diff --git a/THIRD_PARTY_NOTICES.md b/THIRD_PARTY_NOTICES.md index db27613ce9..2e1a12f3ec 100644 --- a/THIRD_PARTY_NOTICES.md +++ b/THIRD_PARTY_NOTICES.md @@ -207,6 +207,13 @@ TensorFold ships no model weights. The `z-lab/Qwen3.8-27B-DFlash2` model card st The optional `incoai/GLM-5.3-Flash-DFlash2` model card states CC BY-NC-ND 4.0, for non-commercial use without derivatives; only the Python engine reads that drafter. Each checkpoint keeps its own license. +The native `zig/src/families/deepseek_v41/` implementation and `zig/tests/deepseek_v41_reference/` +follow [DeepSeek-V4.1-Flash's official inference](https://huggingface.co/deepseek-ai/DeepSeek-V4.1-Flash/tree/2cba9e42aa026125f3ed06c6d98c1db82f7ca027/inference), +MIT License, Copyright (c) 2023 DeepSeek: the reference's equations, the Engram normalization, +PCG64 multipliers and prime bucket layout, and the pinned chat template come from that revision. +The EXL3 checkpoint reads through the ExLlamaV3 format covered above; no captured CUDA/Triton +kernel assets, full model shards or binary traces are bundled. + ## Structured output: libtfgrammar `lib/libtfgrammar` in the release archives is `zig/src/grammar/tf_grammar.cc` compiled with the C++ sources of diff --git a/build.zig b/build.zig index 8361b06746..14fa6863a4 100644 --- a/build.zig +++ b/build.zig @@ -19,6 +19,7 @@ const golden_build = @import("zig/build/golden.zig"); const contract_build = @import("zig/build/kernel_contract.zig"); const video_build = @import("zig/build/video.zig"); const sys_build = @import("zig/build/sys.zig"); +const dsv41_build = @import("zig/build/deepseek_v41.zig"); comptime { const required = std.mem.trim(u8, @embedFile(".zig-version"), "\r\n"); @@ -416,6 +417,10 @@ fn metalTargets(b: *std.Build, target: std.Build.ResolvedTarget, optimize: std.b const load_admission_run = b.addRunArtifact(load_admission_cases); b.step("test-flashnext-load-admission", "CPU-only Flash Next runtime quantization admission").dependOn(&load_admission_run.step); test_step.dependOn(&load_admission_run.step); + test_step.dependOn(dsv41_build.weights(b, target, optimize, metal)); + const dsv41 = dsv41_build.checks(b, target, optimize, metal, sources, engine); + test_step.dependOn(dsv41.device); + test_step.dependOn(dsv41.reference); const pack_cache_cases = b.addTest(.{ .root_module = b.createModule(.{ .root_source_file = b.path("zig/flashnext_pack_cache_cases.zig"), .target = target, @@ -425,8 +430,10 @@ fn metalTargets(b: *std.Build, target: std.Build.ResolvedTarget, optimize: std.b const pack_cache_run = b.addRunArtifact(pack_cache_cases); b.step("test-flashnext-pack-cache", "CPU-only atomic Flash Next pack cache lifecycle").dependOn(&pack_cache_run.step); test_step.dependOn(&pack_cache_run.step); - const engine_programs = [_]struct { name: []const u8, path: []const u8, about: []const u8, c_source: ?[]const u8 = null }{ + const engine_programs = [_]struct { name: []const u8, path: []const u8, about: []const u8, c_source: ?[]const u8 = null, host_tests: bool = false }{ .{ .name = "tf-qwen35-check", .path = "zig/tests/qwen35_check.zig", .about = "Qwen3.5-2B checkpoint and native operations" }, + .{ .name = "tf-dsv41-token-map", .path = "zig/dsv41_token_map.zig", .about = "Build the Engram token map from a tokenizer and inference config, byte-identical to the release's", .host_tests = true }, + .{ .name = "tf-dsv41-run", .path = "zig/deepseek_v41_run.zig", .about = "Full-resident DeepSeek V4.1 admission, teacher-forced logits, chunk seams and decode timing" }, .{ .name = "tf-qwen35-forward", .path = "zig/tests/qwen35_forward.zig", .about = "Qwen3.5-2B native teacher-forced logits" }, .{ .name = "tf-qwen35-exact", .path = "zig/tests/qwen35_exact.zig", .about = "Qwen3.5-2B forward and committed-state exactness" }, .{ .name = "tf-lfm2-forward", .path = "zig/tests/lfm2_forward.zig", .about = "LFM2-MoE native teacher-forced logits" }, @@ -479,6 +486,7 @@ fn metalTargets(b: *std.Build, target: std.Build.ResolvedTarget, optimize: std.b const exe = b.addExecutable(.{ .name = p.name, .root_module = mod }); b.installArtifact(exe); b.step(p.name, p.about).dependOn(&b.addInstallArtifact(exe, .{}).step); + if (p.host_tests) test_step.dependOn(&b.addRunArtifact(b.addTest(.{ .root_module = mod })).step); } glm_checks.sampler(b, target, optimize, metal, lanes, sources); diff --git a/tools/zig/lean_check.py b/tools/zig/lean_check.py index a97aa37701..90db929fa3 100644 --- a/tools/zig/lean_check.py +++ b/tools/zig/lean_check.py @@ -12,9 +12,9 @@ ".sh": re.compile(r"^\s*#(?!!)")} BLOCK = re.compile(r"/\*") DOCSTRING = re.compile(r'^\s*(?:[rubf]{0,2})("""|\'\'\')') -GENERATED = ("unicode_data.zig",) +GENERATED = ("unicode_data.zig", "nfkd_data.zig") HEX_METAL = re.compile(r"_[0-9a-f]{16}\.metal$") -# Generator outputs are skipped entirely. unicode_data.zig stays exempt from the length check only. +# Generator outputs are skipped entirely. The Unicode table files stay exempt from the length check only. GENERATOR_OUTPUT = ( "zig/src/families/flashnext/roles_gen.zig", "zig/kernels/metal/flashnext/sources_gen.zig", diff --git a/tools/zig/nfkd_tables.py b/tools/zig/nfkd_tables.py new file mode 100644 index 0000000000..d785458eab --- /dev/null +++ b/tools/zig/nfkd_tables.py @@ -0,0 +1,96 @@ +"""Emit the Engram token-map normalizer's NFKD, mark, lowercase and combining-class tables as Zig source.""" +import argparse +import subprocess +import sys +import tempfile +import unicodedata +from pathlib import Path + +ROOT = Path(__file__).resolve().parents[2] +OUT = ROOT / "zig" / "src" / "core" / "tokenizer" / "nfkd_data.zig" +VERSION = "16.0.0" + + +def rows(values, per_line, fmt): + """Comma-terminated lines of at most `per_line` values, four-space indented.""" + for i in range(0, len(values), per_line): + yield " " + " ".join(fmt(v) + "," for v in values[i:i + per_line]) + + +def render(): + """The generated Zig source before the compiler's formatter aligns the columns.""" + flat, decompositions = [], [] + for cp in range(0x110000): + decomposed = unicodedata.normalize("NFKD", chr(cp)) + if decomposed != chr(cp): + decompositions.append((cp, len(flat), len(decomposed))) + flat.extend(ord(c) for c in decomposed) + marks = [cp for cp in range(0x110000) if unicodedata.category(chr(cp)) in ("Mn", "Mc", "Me")] + lower_flat, lowercases = [], [] + for cp in range(0x110000): + low = chr(cp).lower() + if low != chr(cp): + lowercases.append((cp, len(lower_flat), len(low))) + lower_flat.extend(ord(c) for c in low) + cccs = [] + for cp in range(0x110000): + ccc = unicodedata.combining(chr(cp)) + if not ccc: + continue + if cccs and cccs[-1][2] == ccc and cccs[-1][1] + 1 == cp: + cccs[-1][1] = cp + else: + cccs.append([cp, cp, ccc]) + decomp = lambda e: ".{ .cp = 0x%04X, .start = %d, .len = %d }" % e + ccc = lambda t: ".{ 0x%04X, 0x%04X, 0x%04X }" % tuple(t) + return "\n".join([ + "// Generated by tools/zig/nfkd_tables.py from the Unicode %s character database; do not edit." % VERSION, + 'pub const version = "%s";' % VERSION, + "", + "pub const Decomp = struct { cp: u21, start: u32, len: u8 };", + "", + "// All NFKD sequences concatenated, indexed by Decomp.start/.len.", + "pub const sequences = [_]u21{", *rows(flat, 8, lambda v: "0x%04X" % v), "};", + "", + "pub const decompositions = [_]Decomp{", *rows(decompositions, 1, decomp), "};", + "", + "// General-category Mn/Mc/Me codepoints, sorted; the Rust tokenizers' StripAccents removes all of category M*.", + "pub const marks = [_]u21{", *rows(marks, 8, lambda v: "0x%04X" % v), "};", + "", + "pub const Lower = struct { cp: u21, start: u32, len: u8 };", + "", + "// Full lowercase mappings concatenated (Rust char::to_lowercase semantics).", + "pub const lower_sequences = [_]u21{", *rows(lower_flat, 8, lambda v: "0x%04X" % v), "};", + "", + "pub const lowercases = [_]Lower{", *rows(lowercases, 1, decomp), "};", + "", + "// Canonical combining class ranges [first, last, ccc], unicodedata %s." % VERSION, + "pub const cccs = [_][3]u21{", *rows(cccs, 4, ccc), "};", + ]) + "\n" + + +def formatted(text, zig): + """`text` grown through the Zig compiler's formatter, which is how the committed file is shaped.""" + with tempfile.TemporaryDirectory() as tmp: + path = Path(tmp) / "nfkd_data.zig" + path.write_text(text) + subprocess.run([zig, "fmt", str(path)], check=True, capture_output=True) + return path.read_text() + + +def main(): + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument("--check", action="store_true", help="fail if the committed file differs") + parser.add_argument("--zig", default="zig", help="the Zig compiler whose formatter shapes the output") + args = parser.parse_args() + if unicodedata.unidata_version != VERSION: + sys.exit("Python has Unicode %s; the Engram tables need %s" % (unicodedata.unidata_version, VERSION)) + text = formatted(render(), args.zig) + if args.check: + sys.exit(0 if OUT.read_text() == text else "%s is stale; rerun tools/zig/nfkd_tables.py" % OUT.relative_to(ROOT)) + OUT.write_text(text) + print("Wrote %s (Unicode %s)" % (OUT.relative_to(ROOT), VERSION)) + + +if __name__ == "__main__": + main() diff --git a/zig/build/deepseek_v41.zig b/zig/build/deepseek_v41.zig new file mode 100644 index 0000000000..2e419e9755 --- /dev/null +++ b/zig/build/deepseek_v41.zig @@ -0,0 +1,60 @@ +//! Experimental DS4.1 weight-loading qualification targets. +const std = @import("std"); + +pub fn weights( + b: *std.Build, + target: std.Build.ResolvedTarget, + optimize: std.builtin.OptimizeMode, + metal: *std.Build.Module, +) *std.Build.Step { + const host = b.addTest(.{ .root_module = b.createModule(.{ + .root_source_file = b.path("zig/deepseek_v41_weights_checks.zig"), + .target = target, + .optimize = optimize, + .link_libc = true, + .imports = &.{ + .{ .name = "metal", .module = metal }, + }, + }) }); + const step = b.step("test-deepseek-v41-weights", "V4.1 configuration, Engram table plans and resident weight staging"); + step.dependOn(&b.addRunArtifact(host).step); + return step; +} + +pub fn checks( + b: *std.Build, + target: std.Build.ResolvedTarget, + optimize: std.builtin.OptimizeMode, + metal: *std.Build.Module, + sources: *std.Build.Module, + engine: *std.Build.Module, +) struct { device: *std.Build.Step, reference: *std.Build.Step } { + const device = b.addTest(.{ .root_module = b.createModule(.{ + .root_source_file = b.path("zig/deepseek_v41_checks.zig"), + .target = target, + .optimize = optimize, + .link_libc = true, + .imports = &.{ + .{ .name = "metal", .module = metal }, + .{ .name = "kernel_sources", .module = sources }, + }, + }) }); + const device_step = b.step("test-deepseek-v41", "Experimental DS4.1 EXL3, Engram, mHC and sparse attention on Metal"); + device_step.dependOn(&b.addRunArtifact(device).step); + const reference = b.addTest(.{ + .root_module = b.createModule(.{ + .root_source_file = b.path("zig/deepseek_v41_reference_checks.zig"), + .target = target, + .optimize = optimize, + .link_libc = true, + .imports = &.{ + .{ .name = "tensorfold", .module = engine }, + .{ .name = "metal", .module = metal }, + }, + }), + .filters = &.{"tests.deepseek_v41_reference."}, + }); + const reference_step = b.step("test-deepseek-v41-reference", "Independent CPU teacher-oracle arithmetic boundaries"); + reference_step.dependOn(&b.addRunArtifact(reference).step); + return .{ .device = device_step, .reference = reference_step }; +} diff --git a/zig/deepseek_v41_checks.zig b/zig/deepseek_v41_checks.zig new file mode 100644 index 0000000000..755a35c618 --- /dev/null +++ b/zig/deepseek_v41_checks.zig @@ -0,0 +1,13 @@ +//! Source-built V4.1 operator qualification; real Metal execution, no checkpoint needed. +test { + _ = @import("src/core/exl3_projection_gpu_test.zig"); + _ = @import("src/families/deepseek_v41/engram.zig"); + _ = @import("src/families/deepseek_v41/csa2.zig"); + _ = @import("src/families/deepseek_v41/ops_check.zig"); + _ = @import("src/families/deepseek_v41/load.zig"); + _ = @import("src/families/deepseek_v41/index_precision_test.zig"); + _ = @import("src/families/deepseek_v41/config.zig"); + _ = @import("src/families/deepseek_v41/profiler.zig"); + _ = @import("src/core/gpu_counters.zig"); + _ = @import("src/core/expert_groups.zig"); +} diff --git a/zig/deepseek_v41_reference_checks.zig b/zig/deepseek_v41_reference_checks.zig new file mode 100644 index 0000000000..61aa30f788 --- /dev/null +++ b/zig/deepseek_v41_reference_checks.zig @@ -0,0 +1,7 @@ +//! Independent CPU arithmetic boundaries used by the resident-checkpoint teacher oracle. +test { + _ = @import("tests/deepseek_v41_reference/projection.zig"); + _ = @import("tests/deepseek_v41_reference/math.zig"); + _ = @import("tests/deepseek_v41_reference/attention_math.zig"); + _ = @import("tests/deepseek_v41_reference/qualify.zig"); +} diff --git a/zig/deepseek_v41_run.zig b/zig/deepseek_v41_run.zig new file mode 100644 index 0000000000..0b57148839 --- /dev/null +++ b/zig/deepseek_v41_run.zig @@ -0,0 +1,313 @@ +//! Full-checkpoint admission and execution receipts; no synthetic weights or replay substitute. +const std = @import("std"); +const mtl = @import("metal"); +const tf = @import("tensorfold"); +const ds = tf.deepseek_v41; +const config = tf.deepseek_v41_config; +const load = tf.deepseek_v41_load; +const weights = tf.deepseek_v41_weights; +const process_memory = @import("src/server/process_memory.zig"); +const oracle = @import("tests/deepseek_v41_reference/qualify.zig"); +const profile = @import("tests/deepseek_v41_reference/profile.zig"); +const trace = @import("tests/deepseek_v41_reference/trace.zig"); +const operators = @import("tests/deepseek_v41_reference/operators.zig"); +const attention_operators = @import("tests/deepseek_v41_reference/operator_attention.zig"); +const history_operators = @import("tests/deepseek_v41_reference/operator_history.zig"); +const hc_operators = @import("tests/deepseek_v41_reference/operator_hc.zig"); +const moe_operators = @import("tests/deepseek_v41_reference/operator_moe.zig"); + +fn usage(code: u8) noreturn { + std.debug.print("usage: tf-dsv41-run plan MODEL TABLES\n" ++ + " tf-dsv41-run teacher MODEL TABLES IDS_JSON OUT_DIR [CHUNK]\n" ++ + " tf-dsv41-run seams MODEL TABLES IDS_JSON OUT_DIR\n" ++ + " tf-dsv41-run oracle MODEL TABLES IDS_JSON OUT_DIR\n" ++ + " tf-dsv41-run profile MODEL TABLES IDS_JSON OUT_DIR\n" ++ + " tf-dsv41-run trace MODEL TABLES IDS_JSON OUT_DIR\n" ++ + " tf-dsv41-run operators MODEL TABLES OUT_DIR\n" ++ + " tf-dsv41-run attention-sameinput MODEL TABLES TRACE_CPU_BIN OUT_DIR [LAYER]\n" ++ + " tf-dsv41-run attention-history-sameinput MODEL TABLES TRACE_DIR OUT_DIR TOKEN LAYER\n" ++ + " tf-dsv41-run hc-sameinput MODEL TABLES TRACE_CPU_BIN OUT_DIR [LAYER]\n" ++ + " tf-dsv41-run moe-sameinput MODEL TABLES TRACE_GPU_BIN OUT_DIR [LAYER]\n" ++ + " tf-dsv41-run generate MODEL TABLES IDS_JSON OUT_DIR [TOKENS]\n" ++ + "IDS_JSON: nonempty JSON array of token IDs below 129280.\n" ++ + "Limits: oracle/trace 16 IDs; profile 256 IDs; teacher/seams 4096 IDs.\n" ++ + "History: TOKEN below 4096; retained normalized prefix at most 256 MiB.\n" ++ + "Local diagnostics do not qualify the model. Oracle retains the independent 1% NRMS gate.\n", .{}); + std.process.exit(code); +} +fn number(s: []const u8) !u32 { + return std.fmt.parseInt(u32, s, 10); +} +fn validArguments(args: []const [:0]const u8) bool { + if (args.len < 2) return false; + const mode = args[1]; + for ([_][]const u8{ "plan", "operators" }, [_]usize{ 4, 5 }) |name, count| + if (std.mem.eql(u8, mode, name)) return args.len == count; + if (std.mem.eql(u8, mode, "attention-history-sameinput")) return args.len == 8; + for ([_][]const u8{ "teacher", "generate", "attention-sameinput", "hc-sameinput", "moe-sameinput" }) |name| + if (std.mem.eql(u8, mode, name)) return args.len == 6 or args.len == 7; + for ([_][]const u8{ "seams", "oracle", "profile", "trace" }) |name| + if (std.mem.eql(u8, mode, name)) return args.len == 6; + return false; +} +fn argmax(row: []const f32) !u32 { + var best: u32 = 0; + if (row.len == 0) return error.EmptyLogits; + var score = -std.math.inf(f32); + for (row, 0..) |v, i| { + if (!std.math.isFinite(v)) return error.NonfiniteLogits; + if (v > score) { + best = @intCast(i); + score = v; + } + } + return best; +} +fn write(io: std.Io, a: std.mem.Allocator, dir: []const u8, name: []const u8, data: []const u8) !void { + const path = try std.fs.path.join(a, &.{ dir, name }); + defer a.free(path); + try std.Io.Dir.cwd().writeFile(io, .{ .sub_path = path, .data = data }); +} +const Counters = struct { disk_read: u64, pageins: u64, footprint: u64 }; +/// Darwin's rusage_info_v4 in full: flavor 4 writes 296 bytes (uuid plus 35 u64 fields), so a shorter buffer overruns. +const RUsage = extern struct { + uuid: [16]u8, + user_time: u64, + system_time: u64, + pkg_idle_wkups: u64, + interrupt_wkups: u64, + pageins: u64, + wired_size: u64, + resident_size: u64, + phys_footprint: u64, + proc_start_abstime: u64, + proc_exit_abstime: u64, + child_user_time: u64, + child_system_time: u64, + child_pkg_idle_wkups: u64, + child_interrupt_wkups: u64, + child_pageins: u64, + child_elapsed_abstime: u64, + diskio_bytesread: u64, + /// The 18 fields after `diskio_bytesread`, carried so the struct spans all 296 bytes Darwin writes. + reserved: [18]u64, + + comptime { + // The C interface fixes the size, so a shorter declaration is a build error rather than a silent overrun. + if (@sizeOf(RUsage) != 296) @compileError("RUsage must match Darwin's rusage_info_v4 (296 bytes)"); + } +}; +fn counters() !Counters { + const proc_pid_rusage = struct { + extern "c" fn proc_pid_rusage(pid: c_int, flavor: c_int, buffer: *anyopaque) c_int; + }.proc_pid_rusage; + const getpid = struct { + extern "c" fn getpid() c_int; + }.getpid; + var r: RUsage = undefined; + if (proc_pid_rusage(getpid(), 4, &r) != 0) return error.MemoryCountersUnavailable; + return .{ .disk_read = r.diskio_bytesread, .pageins = r.pageins, .footprint = r.phys_footprint }; +} +fn teacher(m: *ds.Model, ids: []const u32, chunk: u32, out: []f32) !f64 { + if (chunk == 0 or chunk > m.workspace.plan.rows or ids.len > m.cache.plan.capacity) + return error.InvalidTeacherWindow; + if (out.len != ids.len * 129280) return error.InvalidTeacherOutputLength; + try m.reset(); + var elapsed: f64 = 0; + var start: usize = 0; + while (start < ids.len) { + const end = @min(start + chunk, ids.len); + const row = try m.forward(ids[start..end], .all); + @memcpy(out[start * 129280 .. end * 129280], row); + for (row) |value| if (!std.math.isFinite(value)) return error.NonfiniteLogits; + elapsed += m.last_gpu_seconds; + start = end; + } + return elapsed; +} + +pub fn main(init: std.process.Init) !void { + const a = init.gpa; + const io = init.io; + const args = try init.minimal.args.toSlice(init.arena.allocator()); + if (args.len == 2 and (std.mem.eql(u8, args[1], "--help") or std.mem.eql(u8, args[1], "-h"))) usage(0); + if (!validArguments(args)) usage(2); + const arena = init.arena.allocator(); + const mode = args[1]; + const pool = mtl.objc.Pool.push(); + defer pool.pop(); + if (std.mem.eql(u8, mode, "plan")) { + const cfg = try config.Config.load(arena, io, args[2]); + var plan = try load.Plan.open(a, io, args[2], args[3]); + defer plan.deinit(); + try weights.validate(&plan); + const device = try mtl.Device.init(); + defer device.deinit(); + std.debug.print("{{\"mode\":\"plan\",\"weight_bytes\":{d},\"shards\":{d},\"tensors\":{d},\"context\":{d},\"metal_working_set_bytes\":{d}}}\n", .{ plan.bytes, plan.shards.items.len, plan.tensors.count(), cfg.text_config.max_position_embeddings, device.maxWorkingSet() }); + return; + } + const is_operators = std.mem.eql(u8, mode, "operators"); + const is_attention = std.mem.eql(u8, mode, "attention-sameinput"); + const is_attention_history = std.mem.eql(u8, mode, "attention-history-sameinput"); + const is_hc = std.mem.eql(u8, mode, "hc-sameinput"); + const is_moe = std.mem.eql(u8, mode, "moe-sameinput"); + const max_ids: usize = if (std.mem.eql(u8, mode, "oracle") or std.mem.eql(u8, mode, "trace")) 16 else if (std.mem.eql(u8, mode, "profile")) ds.prefill_step else if (std.mem.eql(u8, mode, "teacher") or std.mem.eql(u8, mode, "seams")) 4096 else 1048576; + const input = if (is_operators or is_attention or is_attention_history or is_hc or is_moe) &.{} else try std.Io.Dir.cwd().readFileAlloc(io, args[4], arena, .limited(max_ids * 12 + 2)); + const ids: []const u32 = if (is_operators or is_attention or is_attention_history or is_hc or is_moe) &.{} else try std.json.parseFromSliceLeaky([]const u32, arena, input, .{}); + if (!is_operators and !is_attention and !is_attention_history and !is_hc and !is_moe and (ids.len == 0 or ids.len > 1048576)) return error.InvalidPrompt; + if (ids.len > max_ids) return error.InvalidPrompt; + for (ids) |id| if (id >= 129280) return error.InvalidToken; + const is_oracle = std.mem.eql(u8, mode, "oracle"); + const is_trace = std.mem.eql(u8, mode, "trace"); + const dir = args[if (is_operators) @as(usize, 4) else 5]; + try std.Io.Dir.cwd().createDirPath(io, dir); + const map = try std.fs.path.join(arena, &.{ args[2], "engram-token-map.bin" }); + const map_blob = if (is_oracle or is_trace) + try std.Io.Dir.cwd().readFileAlloc(io, map, arena, .limited(2 << 20)) + else + &.{}; + const model = try a.create(ds.Model); + defer a.destroy(model); + const begin = mtl.clock.seconds(); + model.* = try ds.Model.open(a, io, .{ .dir = args[2], .table_dir = args[3], .token_map = map }); + defer model.deinit(); + const ready = mtl.clock.seconds(); + const before = try counters(); + var execution_after: ?Counters = null; + var execution_error: ?anyerror = null; + execute(a, io, model, args, ids, map_blob, dir, before, &execution_after) catch |err| { + execution_error = err; + }; + const after = execution_after orelse try counters(); + if (after.disk_read < before.disk_read or after.pageins < before.pageins) return error.NonmonotonicCounters; + const resident_gate_passed = after.disk_read == before.disk_read; + const receipt = try std.json.Stringify.valueAlloc(a, .{ + .mode = mode, + .evidence_origin = "current_invocation_not_historical_qualification", + .context_capacity = model.cache.plan.capacity, + .consumed_tokens = model.cache.position, + .weight_bytes = model.checkpoint.residentBytes(), + .resident_allocation_bytes = model.residency.allocatedSize(), + .ready_footprint_bytes = before.footprint, + .final_footprint_bytes = after.footprint, + .load_seconds = ready - begin, + .measurement_scope = if (execution_after != null) "model_execution" else "execution_and_diagnostic_io", + .execution_disk_read_bytes = after.disk_read - before.disk_read, + .execution_pageins = after.pageins - before.pageins, + .resident_gate_passed = resident_gate_passed, + .execution_error = if (execution_error) |err| @as(?[]const u8, @errorName(err)) else null, + }, .{}); + defer a.free(receipt); + std.debug.print("{s}\n", .{receipt}); + try write(io, a, dir, "residency.json", receipt); + if (!resident_gate_passed) std.debug.print("residency gate failed: ResidentExecutionReadFromDisk\n", .{}); + if (execution_error) |err| return err; + if (!resident_gate_passed) return error.ResidentExecutionReadFromDisk; +} + +fn execute(a: std.mem.Allocator, io: std.Io, model: *ds.Model, args: []const [:0]const u8, ids: []const u32, map_blob: []const u8, dir: []const u8, before: Counters, execution_after: *?Counters) !void { + const mode = args[1]; + const is_operators = std.mem.eql(u8, mode, "operators"); + const is_attention = std.mem.eql(u8, mode, "attention-sameinput"); + const is_attention_history = std.mem.eql(u8, mode, "attention-history-sameinput"); + const is_hc = std.mem.eql(u8, mode, "hc-sameinput"); + const is_moe = std.mem.eql(u8, mode, "moe-sameinput"); + const is_oracle = std.mem.eql(u8, mode, "oracle"); + const is_profile = std.mem.eql(u8, mode, "profile"); + const is_trace = std.mem.eql(u8, mode, "trace"); + const is_teacher = std.mem.eql(u8, mode, "teacher"); + const is_seams = std.mem.eql(u8, mode, "seams"); + if (is_operators) { + try operators.run(a, io, model, dir); + } else if (is_attention) { + try attention_operators.runAttention(a, io, model, args[4], dir, if (args.len > 6) try number(args[6]) else 0); + } else if (is_attention_history) { + try history_operators.runAttentionHistory(a, io, model, args[4], dir, try number(args[6]), try number(args[7])); + } else if (is_hc) { + try hc_operators.runHyperconnections(a, io, model, args[4], dir, if (args.len > 6) try number(args[6]) else 0); + } else if (is_moe) { + try moe_operators.runMoe(a, io, model, args[4], dir, if (args.len > 6) try number(args[6]) else 21); + } else if (is_oracle) { + try operators.run(a, io, model, dir); + _ = try oracle.run(a, io, model, ids, map_blob, dir); + } else if (is_profile) { + try profile.run(a, io, model, ids, dir); + } else if (is_trace) { + try trace.run(a, io, model, ids, map_blob, dir); + } else if (is_teacher or is_seams) { + const chunk = if (args.len > 6) try number(args[6]) else model.workspace.plan.rows; + if (chunk == 0 or chunk > model.workspace.plan.rows) return error.InvalidPrefillChunk; + const outputs = try a.alloc(f32, ids.len * 129280); + defer a.free(outputs); + const elapsed = try teacher(model, ids, chunk, outputs); + // Capture execution before writing the receipt, not filesystem metadata reads from the receipt itself. + if (is_seams) { + const alternative = try a.alloc(f32, outputs.len); + defer a.free(alternative); + for ([_]u32{ 1, 2, 3, 7, 31, 127, 128, 129, 255, 256 }) |split| { + if (split > model.workspace.plan.rows) continue; + _ = try teacher(model, ids, split, alternative); + var error_max: f64 = 0; + var disagreements: usize = 0; + var bit_disagreements: usize = 0; + for (outputs, alternative) |x, y| { + error_max = @max(error_max, @abs(@as(f64, x) - y)); + bit_disagreements += @intFromBool(@as(u32, @bitCast(x)) != @as(u32, @bitCast(y))); + } + for (0..ids.len) |i| { + if (try argmax(outputs[i * 129280 ..][0..129280]) != try argmax(alternative[i * 129280 ..][0..129280])) + disagreements += 1; + } + std.debug.print("{{\"mode\":\"seam\",\"chunk\":{d},\"max_logit_error\":{d},\"bit_disagreements\":{d},\"greedy_disagreements\":{d}}}\n", .{ split, error_max, bit_disagreements, disagreements }); + if (disagreements != 0 or bit_disagreements != 0) { + var name: [48]u8 = undefined; + const file = try std.fmt.bufPrint(&name, "seam-{d}-logits.f32", .{split}); + execution_after.* = try counters(); + try write(io, a, dir, file, std.mem.sliceAsBytes(alternative)); + return error.ChunkSeamMismatch; + } + } + } + std.debug.print("{{\"mode\":\"teacher\",\"tokens\":{d},\"gpu_seconds\":{d}}}\n", .{ ids.len, elapsed }); + execution_after.* = try counters(); + try write(io, a, dir, "logits.f32", std.mem.sliceAsBytes(outputs)); + } else if (std.mem.eql(u8, mode, "generate")) { + const n = if (args.len > 6) try number(args[6]) else 64; + if (ids.len > model.cache.plan.capacity or n == 0 or n > model.cache.plan.capacity - ids.len) + return error.ContextFull; + try model.reset(); + const prefill_start = mtl.clock.seconds(); + var row: []const f32 = &.{}; + var start: usize = 0; + var progress_at = prefill_start; + while (start < ids.len) { + const end = @min(start + model.workspace.plan.rows, ids.len); + row = try model.forward(ids[start..end], if (end == ids.len) .last else .none); + start = end; + const now = mtl.clock.seconds(); + if (now - progress_at >= 60 or start == ids.len) { + const memory = try counters(); + std.debug.print("{{\"mode\":\"prefill_progress\",\"completed_tokens\":{d},\"prompt_tokens\":{d},\"elapsed_seconds\":{d},\"footprint_bytes\":{d},\"disk_read_bytes\":{d},\"pageins\":{d}}}\n", .{ start, ids.len, now - prefill_start, memory.footprint, memory.disk_read - before.disk_read, memory.pageins - before.pageins }); + progress_at = now; + } + } + const prefill_end = mtl.clock.seconds(); + const generated = try a.alloc(u32, n); + defer a.free(generated); + var gpu_seconds: f64 = 0; + const decode_start = mtl.clock.seconds(); + for (generated, 0..) |*token, i| { + token.* = try argmax(row); + if (i + 1 < generated.len) { + row = try model.forward(&.{token.*}, .last); + gpu_seconds += model.last_gpu_seconds; + } + } + const decode_end = mtl.clock.seconds(); + execution_after.* = try counters(); + const json = try std.json.Stringify.valueAlloc(a, generated, .{}); + defer a.free(json); + try write(io, a, dir, "tokens.json", json); + std.debug.print("{{\"mode\":\"generate\",\"prompt_tokens\":{d},\"completion_tokens\":{d},\"prefill_seconds\":{d},\"decode_seconds\":{d},\"decode_gpu_seconds\":{d}}}\n", .{ ids.len, n, prefill_end - prefill_start, decode_end - decode_start, gpu_seconds }); + } else usage(2); +} diff --git a/zig/deepseek_v41_weights_checks.zig b/zig/deepseek_v41_weights_checks.zig new file mode 100644 index 0000000000..b3d4fedcac --- /dev/null +++ b/zig/deepseek_v41_weights_checks.zig @@ -0,0 +1,8 @@ +//! Host checks for V4.1 configuration, Engram table plans and resident weight staging; no kernels compiled. +test { + _ = @import("src/families/deepseek_v41/config.zig"); + _ = @import("src/families/deepseek_v41/view.zig"); + _ = @import("src/families/deepseek_v41/engram_hash.zig"); + _ = @import("src/families/deepseek_v41/load.zig"); + _ = @import("src/families/deepseek_v41/weights.zig"); +} diff --git a/zig/dsv41_token_map.zig b/zig/dsv41_token_map.zig new file mode 100644 index 0000000000..7f07899400 --- /dev/null +++ b/zig/dsv41_token_map.zig @@ -0,0 +1,478 @@ +//! The Engram token map builder's command line: tf-dsv41-token-map --tokenizer PATH --config PATH --output PATH. +const std = @import("std"); +const tf = @import("tensorfold"); +const tok = @import("src/core/tokenizer/tokenizer.zig"); +const unicode = @import("src/core/tokenizer/unicode.zig"); +const nfkd_data = @import("src/core/tokenizer/nfkd_data.zig"); + +const magic = "DSENGR01"; +/// The release this algorithm and its recorded PCG64 draws come from (DeepSeek AI, MIT). +const source = "https://huggingface.co/deepseek-ai/DeepSeek-V4.1-Flash/blob/2cba9e42aa026125f3ed06c6d98c1db82f7ca027/inference/engram.py"; + +pub fn main(init: std.process.Init) !void { + const a = init.gpa; + const io = init.io; + const args = try init.minimal.args.toSlice(init.arena.allocator()); + if (args.len != 7) { + std.debug.print("usage: tf-dsv41-token-map --tokenizer PATH --config PATH --output PATH\n", .{}); + return error.InvalidArguments; + } + var tokenizer_path: ?[]const u8 = null; + var config_path: ?[]const u8 = null; + var output_path: ?[]const u8 = null; + var i: usize = 1; + while (i + 1 < args.len) : (i += 2) { + if (std.mem.eql(u8, args[i], "--tokenizer")) tokenizer_path = args[i + 1] else if (std.mem.eql(u8, args[i], "--config")) config_path = args[i + 1] else if (std.mem.eql(u8, args[i], "--output")) output_path = args[i + 1] else return error.InvalidArguments; + } + const tokenizer_bytes = try std.Io.Dir.cwd().readFileAlloc(io, tokenizer_path.?, a, .limited(64 << 20)); + const config_bytes = try std.Io.Dir.cwd().readFileAlloc(io, config_path.?, a, .limited(16 << 20)); + var t = try tok.loadTokenizer(io, a, tokenizer_path.?); + defer t.deinit(); + + var outer = try std.json.parseFromSliceLeaky(std.json.Value, a, config_bytes, .{}); + const config = if (outer == .object and outer.object.get("text_config") != null) outer.object.get("text_config").? else outer; + + // The release's compressed_map: decode each id (raw token on U+FFFD), normalize, dedupe first-seen. + var key_arena = std.heap.ArenaAllocator.init(a); + defer key_arena.deinit(); + const ka = key_arena.allocator(); + var keys: std.StringArrayHashMapUnmanaged(u32) = .empty; + defer keys.deinit(a); + const raw_vocab: usize = @intCast(try intField(config, "vocab_size")); + const compressed_expected: usize = @intCast(try intField(config, "engram_compressed_vocab_size")); + const lookup = try a.alloc(u32, raw_vocab); + defer a.free(lookup); + for (0..raw_vocab) |id| { + const text = try t.decode(a, &.{@intCast(id)}, false); + defer a.free(text); + const key = if (std.mem.indexOfScalar(u8, text, 0xEF) != null and std.mem.indexOf(u8, text, "\u{fffd}") != null) + try ka.dupe(u8, t.id_to_token.get(@intCast(id)) orelse return error.MissingTokenizerEntry) + else + try normalizeKey(ka, text); + const gop = try keys.getOrPut(a, key); + if (!gop.found_existing) { + gop.value_ptr.* = @intCast(keys.count() - 1); + gop.key_ptr.* = key; + } + lookup[id] = gop.value_ptr.*; + } + if (keys.count() != compressed_expected) { + std.log.err("tokenizer mismatch: compressed keys {d} != {d}", .{ keys.count(), compressed_expected }); + return error.TokenizerMismatch; + } + + const order: u64 = @intCast(try intField(config, "engram_max_ngram_size")); + const heads: u64 = @intCast(try intField(config, "engram_n_heads")); + if (order != 4 or heads != 8) return error.UnsupportedEngramShape; + const compressed = keys.count(); + const bound: u64 = @max(1, ((@as(u64, 1) << 63) - 1) / compressed / 2); + + // Per layer: 24 prime buckets never repeated across layers, table offsets, PCG64 multipliers seeded 10007 * layer. + var seen: std.AutoHashMapUnmanaged(u64, void) = .empty; + defer seen.deinit(a); + const layer_ids_v = try arrayField(config, "engram_layer_ids"); + const rows_v = try arrayField(config, "engram_num_embeddings"); + if (layer_ids_v.items.len != rows_v.items.len) return error.ConfigMismatch; + const layer_count = layer_ids_v.items.len; + const Layer = struct { id: u64, rows: u64, primes: [24]u32, offsets: [24]u32, multipliers: [4]u64 }; + var layers = try a.alloc(Layer, layer_count); + defer a.free(layers); + const engram_vocab_size: u64 = @intCast(try intField(config, "engram_vocab_size")); + for (layer_ids_v.items, rows_v.items, 0..) |lid_v, rows_v_i, li| { + const layer_id: u64 = @intCast(lid_v.integer); + const rows: u64 = @intCast(rows_v_i.integer); + var primes: [24]u32 = undefined; + var offsets: [24]u32 = undefined; + var n: usize = 0; + var current: u64 = engram_vocab_size - 1; + while (n < (order - 1) * heads) : (n += 1) { + current += 1; + while (true) { + if (isPrime(current)) { + const gop = try seen.getOrPut(a, current); + if (!gop.found_existing) break; + } + current += 1; + } + var sum: u64 = 0; + for (primes[0..n]) |p| sum += p; + offsets[n] = @intCast(sum); + primes[n] = @intCast(current); + } + var sum: u64 = 0; + for (primes) |p| sum += p; + if (sum != rows) { + std.log.err("layer {d}: prime buckets sum {d} != table rows {d}", .{ layer_id, sum, rows }); + return error.ConfigMismatch; + } + var rng = Pcg64.init(10007 * layer_id); + var multipliers: [4]u64 = undefined; + for (&multipliers) |*m| m.* = rng.boundedBelow(bound) * 2 + 1; + layers[li] = .{ .id = layer_id, .rows = rows, .primes = primes, .offsets = offsets, .multipliers = multipliers }; + } + + const pad_id: usize = @intCast(if (config.object.get("engram_pad_id")) |v| try asInt(v) else try intField(config, "engram_pad_token_id")); + const pad = lookup[pad_id]; + + // LE layout: magic, raw/compressed/pad/order/heads/layers, provenance hashes, per-layer blocks, the lookup array. + var packed_buf: std.ArrayList(u8) = .empty; + defer packed_buf.deinit(a); + try packed_buf.appendSlice(a, magic); + try appendU32(&packed_buf, a, raw_vocab); + try appendU32(&packed_buf, a, compressed); + try appendU32(&packed_buf, a, pad); + try appendU32(&packed_buf, a, order); + try appendU32(&packed_buf, a, heads); + try appendU32(&packed_buf, a, layer_count); + var tokenizer_sha: [32]u8 = undefined; + std.crypto.hash.sha2.Sha256.hash(tokenizer_bytes, &tokenizer_sha, .{}); + var config_sha: [32]u8 = undefined; + std.crypto.hash.sha2.Sha256.hash(config_bytes, &config_sha, .{}); + try packed_buf.appendSlice(a, &tokenizer_sha); + try packed_buf.appendSlice(a, &config_sha); + for (layers) |layer| { + try appendU32(&packed_buf, a, layer.id); + try appendU32(&packed_buf, a, layer.rows); + for (layer.multipliers) |m| try appendU64(&packed_buf, a, m); + for (layer.primes) |p| try appendU32(&packed_buf, a, p); + for (layer.offsets) |o| try appendU32(&packed_buf, a, o); + } + for (lookup) |v| try appendU32(&packed_buf, a, v); + + var out_file = try std.Io.Dir.cwd().createFile(io, output_path.?, .{}); + defer out_file.close(io); + try out_file.writeStreamingAll(io, packed_buf.items); + + // Manifest beside the map, matching the Python tool's fields. + var packed_sha: [32]u8 = undefined; + std.crypto.hash.sha2.Sha256.hash(packed_buf.items, &packed_sha, .{}); + var m: std.ArrayList(u8) = .empty; + defer m.deinit(a); + const W = struct { + fn f(list: *std.ArrayList(u8), al: std.mem.Allocator, comptime fmt: []const u8, args_: anytype) !void { + try list.appendSlice(al, try std.fmt.allocPrint(al, fmt, args_)); + } + }.f; + const tokenizer_hex = try hexLower(a, &tokenizer_sha); + const config_hex = try hexLower(a, &config_sha); + const packed_hex = try hexLower(a, &packed_sha); + try W(&m, a, "{{\n \"source\": \"{s}\",\n \"tokenizer_sha256\": \"{s}\",\n \"config_sha256\": \"{s}\",\n \"packed_sha256\": \"{s}\",\n \"raw_vocab\": {d},\n \"compressed_vocab\": {d},\n \"pad\": {d},\n \"order\": {d},\n \"heads\": {d},\n \"layers\": [", .{ source, tokenizer_hex, config_hex, packed_hex, raw_vocab, compressed, pad, order, heads }); + for (layers, 0..) |layer, li| { + try W(&m, a, "\n {{\n \"layer_id\": {d},\n \"rows\": {d},\n \"primes\": [{d}, ", .{ layer.id, layer.rows, layer.primes[0] }); + for (layer.primes[1..]) |p| try W(&m, a, "{d}, ", .{p}); + try W(&m, a, "],\n \"offsets\": [{d}, ", .{layer.offsets[0]}); + for (layer.offsets[1..]) |o| try W(&m, a, "{d}, ", .{o}); + try W(&m, a, "],\n \"multipliers\": [{d}, ", .{layer.multipliers[0]}); + for (layer.multipliers[1..]) |x| try W(&m, a, "{d}, ", .{x}); + try W(&m, a, "]\n }}{s}", .{if (li + 1 < layers.len) "," else ""}); + } + try W(&m, a, "\n ]\n}}\n", .{}); + const manifest_path = try std.fmt.allocPrint(a, "{s}.json", .{output_path.?}); + defer a.free(manifest_path); + var m_file = try std.Io.Dir.cwd().createFile(io, manifest_path, .{}); + defer m_file.close(io); + try m_file.writeStreamingAll(io, m.items); + + std.debug.print("token map: {d} raw ids -> {d} keys, {d} layers, {d} bytes written to {s}\n", .{ raw_vocab, compressed, layer_count, packed_buf.items.len, output_path.? }); +} + +fn appendU32(list: *std.ArrayList(u8), a: std.mem.Allocator, v: u64) !void { + const tail = try list.addManyAsSlice(a, 4); + std.mem.writeInt(u32, tail[0..4], @intCast(v), .little); +} + +fn appendU64(list: *std.ArrayList(u8), a: std.mem.Allocator, v: u64) !void { + const tail = try list.addManyAsSlice(a, 8); + std.mem.writeInt(u64, tail[0..8], v, .little); +} + +fn hexLower(a: std.mem.Allocator, bytes: []const u8) ![]u8 { + const chars = "0123456789abcdef"; + const out = try a.alloc(u8, bytes.len * 2); + for (bytes, 0..) |b, i| { + out[i * 2] = chars[b >> 4]; + out[i * 2 + 1] = chars[b & 15]; + } + return out; +} + +fn asInt(v: std.json.Value) !i64 { + return switch (v) { + .integer => |n| n, + .number_string, .string => |s| std.fmt.parseInt(i64, s, 10), + else => error.ConfigMismatch, + }; +} + +fn intField(config: std.json.Value, name: []const u8) !i64 { + const v = config.object.get(name) orelse return error.ConfigMismatch; + return asInt(v); +} + +fn arrayField(config: std.json.Value, name: []const u8) !std.json.Array { + const v = config.object.get(name) orelse return error.ConfigMismatch; + if (v != .array) return error.ConfigMismatch; + return v.array; +} + +fn isPrime(n: u64) bool { + if (n < 2 or n % 2 == 0) return n == 2; + var d: u64 = 3; + while (d * d <= n) : (d += 2) { + if (n % d == 0) return false; + } + return true; +} + +// The release's key normalizer chain composes to NFKD, mark-strip, lowercase, space collapse and trim. + +const sentinel: u21 = 0xE000; + +fn normalizeKey(a: std.mem.Allocator, text: []const u8) ![]u8 { + var cps: std.ArrayList(u21) = .empty; + defer cps.deinit(a); + var i: usize = 0; + while (i < text.len) { + const d = unicode.decodeAt(text, i); + try decomposeFull(d.cp, &cps, a); + i += d.len; + } + orderCanonical(cps.items); + var kept: std.ArrayList(u21) = .empty; + defer kept.deinit(a); + for (cps.items) |cp| { + if (!isMark(cp)) try kept.append(a, cp); + } + var low: std.ArrayList(u21) = .empty; + defer low.deinit(a); + for (kept.items) |cp| { + if (lowerOf(cp)) |seq| try low.appendSlice(a, seq) else try low.append(a, cp); + } + // Replace([ \t\r\n]+, " "): collapse runs of the four regex chars. + var col: std.ArrayList(u21) = .empty; + defer col.deinit(a); + var k: usize = 0; + while (k < low.items.len) : (k += 1) { + if (isRegexSpace(low.items[k])) { + try col.append(a, ' '); + while (k + 1 < low.items.len and isRegexSpace(low.items[k + 1])) k += 1; + } else try col.append(a, low.items[k]); + } + // Replace(^ $, U+E000): the whole string being a single space. + if (col.items.len == 1 and col.items[0] == ' ') col.items[0] = sentinel; + // Strip: trim White_Space at both ends (Rust char::is_whitespace's set). + var lo: usize = 0; + var hi: usize = col.items.len; + while (lo < hi and unicode.isSpace(col.items[lo])) lo += 1; + while (hi > lo and unicode.isSpace(col.items[hi - 1])) hi -= 1; + // Replace(U+E000, " "). + var out: std.ArrayList(u8) = .empty; + errdefer out.deinit(a); + var wrote = false; + for (col.items[lo..hi]) |cp| { + try unicode.appendCodepoint(&out, a, if (cp == sentinel) ' ' else cp); + wrote = true; + } + if (!wrote) return a.dupe(u8, text); + return out.toOwnedSlice(a); +} + +fn isRegexSpace(cp: u21) bool { + return cp == 0x20 or cp == 0x09 or cp == 0x0D or cp == 0x0A; +} + +fn decomposeFull(cp: u21, out: *std.ArrayList(u21), a: std.mem.Allocator) !void { + if (decompOf(cp)) |seq| { + for (seq) |c| try out.append(a, c); + } else try out.append(a, cp); +} + +fn decompOf(cp: u21) ?[]const u21 { + var lo: usize = 0; + var hi: usize = nfkd_data.decompositions.len; + while (lo < hi) { + const mid = (lo + hi) / 2; + const e = nfkd_data.decompositions[mid]; + if (e.cp == cp) return nfkd_data.sequences[e.start..][0..e.len]; + if (e.cp < cp) lo = mid + 1 else hi = mid; + } + return null; +} + +fn orderCanonical(items: []u21) void { + var start: usize = 0; + while (start < items.len) : (start += 1) { + if (combiningClass(items[start]) == 0) continue; + var end = start; + while (end < items.len and combiningClass(items[end]) != 0) end += 1; + std.sort.insertion(u21, items[start..end], {}, struct { + fn lt(_: void, x: u21, y: u21) bool { + return combiningClass(x) < combiningClass(y); + } + }.lt); + start = end - 1; + } +} + +fn combiningClass(cp: u21) u8 { + if (cp < 0x300) return 0; + var lo: usize = 0; + var hi: usize = nfkd_data.cccs.len; + while (lo < hi) { + const mid = (lo + hi) / 2; + const run = nfkd_data.cccs[mid]; + if (cp < run[0]) hi = mid else if (cp > run[1]) lo = mid + 1 else return @intCast(run[2]); + } + return 0; +} + +fn isMark(cp: u21) bool { + var lo: usize = 0; + var hi: usize = nfkd_data.marks.len; + while (lo < hi) { + const mid = (lo + hi) / 2; + const v = nfkd_data.marks[mid]; + if (v == cp) return true; + if (v < cp) lo = mid + 1 else hi = mid; + } + return false; +} + +fn lowerOf(cp: u21) ?[]const u21 { + var lo: usize = 0; + var hi: usize = nfkd_data.lowercases.len; + while (lo < hi) { + const mid = (lo + hi) / 2; + const e = nfkd_data.lowercases[mid]; + if (e.cp == cp) return nfkd_data.lower_sequences[e.start..][0..e.len]; + if (e.cp < cp) lo = mid + 1 else hi = mid; + } + return null; +} + +// numpy's Generator.integers draw: SeedSequence, PCG64 and Lemire's bounded integers. + +const Pcg64 = struct { + state: u128, + inc: u128, + + const multiplier: u128 = 0x2360ED051FC65DA44385DF649FCCF645; + + /// pcg64_srandom_r: state = 0, one step, state += initstate, one step; inc = (initseq << 1) | 1 mod 2^128. + fn init(seed: u64) Pcg64 { + const w = seedSequenceWords(seed); + const initstate: u128 = (@as(u128, w[0]) << 64) | @as(u128, w[1]); + const initseq: u128 = (@as(u128, w[2]) << 64) | @as(u128, w[3]); + const inc: u128 = (initseq << 1) | 1; + var state: u128 = 0; + state = state *% multiplier +% inc; + state +%= initstate; + state = state *% multiplier +% inc; + return .{ .state = state, .inc = inc }; + } + + fn next64(self: *Pcg64) u64 { + self.state = self.state *% multiplier +% self.inc; + const hi: u64 = @truncate(self.state >> 64); + const lo: u64 = @truncate(self.state); + const rot: u6 = @intCast(hi >> 58); + return std.math.rotr(u64, lo ^ hi, rot); + } + + /// Lemire's bounded generator, numpy's masked=false path for Generator.integers. + fn boundedBelow(self: *Pcg64, bound: u64) u64 { + const threshold = (0 -% bound) % bound; + while (true) { + const x = self.next64(); + const m = @as(u128, x) * @as(u128, bound); + if (@as(u64, @truncate(m)) >= threshold) return @intCast(m >> 64); + } + } +}; + +/// SeedSequence(seed).generate_state(4, uint64): hashmix a 4-word pool, then draw eight words paired little-endian. +fn seedSequenceWords(seed: u64) [4]u64 { + const entropy = [1]u32{@truncate(seed)}; + var mixer = [4]u32{ 0, 0, 0, 0 }; + var hc: u32 = 0x43b0d7e5; + for (&mixer, 0..) |*slot, i| { + slot.* = hashmix(if (i < entropy.len) entropy[i] else 0, &hc); + } + for (0..mixer.len) |i_src| { + for (0..mixer.len) |i_dst| { + if (i_src != i_dst) mixer[i_dst] = mixWords(mixer[i_dst], hashmix(mixer[i_src], &hc)); + } + } + var out: [8]u32 = undefined; + var hcb: u32 = 0x8b51f9dd; + for (&out, 0..) |*slot, i| { + var dv = mixer[i % mixer.len]; + dv ^= hcb; + hcb = hcb *% 0x58f38ded; + dv = dv *% hcb; + dv ^= dv >> 16; + slot.* = dv; + } + var w: [4]u64 = undefined; + for (0..4) |i| w[i] = @as(u64, out[2 * i]) | (@as(u64, out[2 * i + 1]) << 32); + return w; +} + +fn hashmix(value: u32, hc: *u32) u32 { + var v = value ^ hc.*; + hc.* = hc.* *% 0x931e8875; + v = v *% hc.*; + v ^= v >> 16; + return v; +} + +fn mixWords(x: u32, y: u32) u32 { + var result = 0xca01f9dd *% x -% 0x4973f715 *% y; + result ^= result >> 16; + return result; +} + +test "pcg64 draws match the release's recorded multipliers" { + // From exl3-2.9bpw/engram-token-map.bin, multipliers (m-1)/2 per layer. + var rng1 = Pcg64.init(10007); + try std.testing.expectEqual(@as(u64, 38316048023122), rng1.boundedBelow(46539438283891)); + try std.testing.expectEqual(@as(u64, 2419938046656), rng1.boundedBelow(46539438283891)); + try std.testing.expectEqual(@as(u64, 17979836159674), rng1.boundedBelow(46539438283891)); + try std.testing.expectEqual(@as(u64, 36993668729195), rng1.boundedBelow(46539438283891)); + var rng14 = Pcg64.init(140098); + try std.testing.expectEqual(@as(u64, 33858405369630), rng14.boundedBelow(46539438283891)); + try std.testing.expectEqual(@as(u64, 25755403400457), rng14.boundedBelow(46539438283891)); + try std.testing.expectEqual(@as(u64, 15460673601360), rng14.boundedBelow(46539438283891)); + try std.testing.expectEqual(@as(u64, 41309613242795), rng14.boundedBelow(46539438283891)); +} + +test "the normalizer chain matches the release's recorded behavior" { + const a = std.testing.allocator; + const cases = [_]struct { in: []const u8, want: []const u8 }{ + .{ .in = "é", .want = "e" }, + .{ .in = "fi", .want = "fi" }, + .{ .in = "İ", .want = "i" }, + // NFKD decomposes Hangul syllables to conjoining jamo; the release's chain never recomposes. + .{ .in = "가", .want = "\u{1100}\u{1161}" }, + .{ .in = "Äffin", .want = "affin" }, + .{ .in = "Dž", .want = "dz" }, + .{ .in = "ẞ", .want = "ß" }, + .{ .in = " ", .want = " " }, + .{ .in = " a ", .want = "a" }, + .{ .in = "a\t\tb", .want = "a b" }, + .{ .in = "ffl", .want = "ffl" }, + .{ .in = "Ⅷ", .want = "viii" }, + .{ .in = "½", .want = "1⁄2" }, + .{ .in = "㍿", .want = "株式会社" }, + .{ .in = "Ω", .want = "ω" }, + .{ .in = "K", .want = "k" }, + .{ .in = "a\u{0301}\u{0328}", .want = "a" }, + .{ .in = "x\u{200b}\u{00ad}y", .want = "x\u{200b}\u{00ad}y" }, + .{ .in = "😀", .want = "😀" }, + }; + for (cases) |c| { + const got = try normalizeKey(a, c.in); + defer a.free(got); + try std.testing.expectEqualStrings(c.want, got); + } +} diff --git a/zig/kernels/metal/core/exl3_projection.metal b/zig/kernels/metal/core/exl3_projection.metal index 0eca0d80c5..93ef9cfdf3 100644 --- a/zig/kernels/metal/core/exl3_projection.metal +++ b/zig/kernels/metal/core/exl3_projection.metal @@ -241,6 +241,20 @@ kernel void tf_exl3_state_window_check(const device uint4* inputs [[buffer(0)]], outputs[tid] = tf_exl3_mapped_state(tile, (off << 6) | (1u << 11)); } +// Kept-dense: rotated rows x bf16 weight, f32 in rotate_out sums; sequential k, one thread an output, in fp64 order. +kernel void tf_exl3_dense(const device half* rotated [[buffer(0)]], + const device bfloat* weight [[buffer(1)]], + device float* sums [[buffer(2)]], + constant TfExl3Args& a [[buffer(3)]], + const device uint* input_ids [[buffer(4)]], + uint2 g [[thread_position_in_grid]]) { + const uint row = a.input_ids ? input_ids[g.y] : g.y; + float acc = 0; + for (uint k = 0; k < a.k; ++k) + acc += float(rotated[ulong(g.y) * a.k + k]) * float(weight[ulong(g.x) * a.k + k]); + sums[ulong(g.y) * a.n + g.x] = acc; +} + // Four SIMDgroups share decoded weights while each retains its original eight-row compensated dots. kernel void tf_exl3_matmul_prefill(const device half* x [[buffer(0)]], const device uchar* trellis [[buffer(1)]], diff --git a/zig/kernels/metal/core/expert_groups.metal b/zig/kernels/metal/core/expert_groups.metal new file mode 100644 index 0000000000..be543d5780 --- /dev/null +++ b/zig/kernels/metal/core/expert_groups.metal @@ -0,0 +1,36 @@ +// Group routed slots into padded eight-row expert tiles; scatter preserves original token and output IDs. +#include +using namespace metal; +struct TfExpertGroups { uint rows, experts, repeat, padded; }; +#define TF_GROUP_ARGS \ + const device uint* ids [[buffer(0)]], device atomic_uint* counts [[buffer(1)]], \ + device uint* offsets [[buffer(2)]], device uint* ranks [[buffer(3)]], \ + device uint* expert_ids [[buffer(4)]], device uint* token_ids [[buffer(5)]], \ + device uint* slot_ids [[buffer(6)]], constant TfExpertGroups& d [[buffer(7)]], \ + uint i [[thread_position_in_grid]] + +kernel void tf_expert_group_clear(TF_GROUP_ARGS) { + if (i < d.experts) atomic_store_explicit(counts + i, 0u, memory_order_relaxed); + if (i < d.padded) expert_ids[i] = 0xffffffffu; +} +kernel void tf_expert_group_count(TF_GROUP_ARGS) { + if (i >= d.rows || ids[i] >= d.experts) return; + ranks[i] = atomic_fetch_add_explicit(counts + ids[i], 1u, memory_order_relaxed); +} +kernel void tf_expert_group_prefix(TF_GROUP_ARGS) { + if (i != 0) return; + uint offset = 0; + for (uint expert = 0; expert < d.experts; ++expert) { + offsets[expert] = offset; + const uint count = atomic_load_explicit(counts + expert, memory_order_relaxed); + offset += (count + 7u) & ~7u; + } +} +kernel void tf_expert_group_scatter(TF_GROUP_ARGS) { + if (i >= d.rows || ids[i] >= d.experts) return; + const uint destination = offsets[ids[i]] + ranks[i]; + if (destination >= d.padded) return; + expert_ids[destination] = ids[i]; + token_ids[destination] = i / d.repeat; + slot_ids[destination] = i; +} diff --git a/zig/kernels/metal/deepseek_v41/csa2.metal b/zig/kernels/metal/deepseek_v41/csa2.metal new file mode 100644 index 0000000000..9d16cfcce5 --- /dev/null +++ b/zig/kernels/metal/deepseek_v41/csa2.metal @@ -0,0 +1,102 @@ +// Source is compiled after kv.metal, which provides exact packed-cache decoders. +struct Dsv41Attention { + uint rows, heads, width, q_stride, position, chunk_rows, window, ring_stride; + uint chunk_stride, main_stride, main_block, ratio, compressed_rows, topk, index_stride; + float scale; +}; +// BF16 query/key products are exact in FP32; compensate accumulation and lane reduction. +inline void dsv41_dot_add(thread float &sum, thread float &error, float value) { + float next = sum + value; + float recovered = next - sum; + error += (sum - (next - recovered)) + (value - recovered); + sum = next; +} +inline float dsv41_dot_reduce(float sum, float error) { + for (uint offset = 16; offset != 0; offset >>= 1) { + float other = simd_shuffle_xor(sum, offset); + float other_error = simd_shuffle_xor(error, offset); + dsv41_dot_add(sum, error, other); + dsv41_dot_add(sum, error, other_error); + } + return sum + error; +} +// BF16 probability rounding uses fixed query-based tiles, never a chunk-dependent physical key layout. +inline uint dsv41_window_columns(constant Dsv41Attention &p, uint row) { + return p.position + row == 0 ? 1 : p.window; +} +inline device const uchar *dsv41_attn_key(uint slot, uint row, device const uchar *ring, + device const uchar *chunk, device const uchar *main, device const int *indices, + constant Dsv41Attention &p, thread uint &kind) { + uint query = p.position + row; + uint columns = dsv41_window_columns(p, row); + if (slot < columns) { + uint pos; + if (query == 0) { + pos = 0; + } else if (query + 1 < p.window) { + pos = (query + 1 + slot) % p.window; + } else { + uint begin = query + 1 > p.window ? query + 1 - p.window : 0; + pos = begin + slot; + } + if (pos > query) return nullptr; + kind = 0; + return pos >= p.position ? chunk + (pos - p.position) * p.chunk_stride + : ring + (pos % p.window) * p.ring_stride; + } + if (!p.ratio) return nullptr; + int pos = indices[row * p.index_stride + slot - columns]; + if (pos < 0 || uint(pos) >= min(p.compressed_rows, (query + 1) / p.ratio)) return nullptr; + kind = 1; + return main + uint(pos) * p.main_stride; +} +kernel void dsv41_sparse_attention(device const ushort *q [[buffer(0)]], device const uchar *ring [[buffer(1)]], + device const uchar *chunk [[buffer(2)]], device const uchar *main [[buffer(3)]], + device const int *indices [[buffer(4)]], device const float *sink [[buffer(5)]], + device ushort *out [[buffer(6)]], constant Dsv41Attention &p [[buffer(7)]], + uint2 g [[threadgroup_position_in_grid]], uint lane [[thread_index_in_threadgroup]]) { + uint head = g.x, row = g.y; + if (head >= p.heads || row >= p.rows) return; + threadgroup float scores[64]; + float query[16], acc[16]; + for (uint j = 0; j < p.width / 32; ++j) { + query[j] = dsv41_bf(q[row * p.q_stride + head * p.width + lane + j * 32]); acc[j] = 0; + } + float mx = -1e30f, sum = 0; + uint query_position = p.position + row; + uint compressed_columns = p.ratio ? min(p.topk, min(p.compressed_rows, (query_position + 1) / p.ratio)) : 0; + uint count = dsv41_window_columns(p, row) + compressed_columns; + for (uint base = 0; base < count; base += 64) { + float next_max = mx; + for (uint j = 0; j < 64; ++j) { + uint kind = 0; + device const uchar *key = base + j < count ? dsv41_attn_key(base + j, row, ring, chunk, main, indices, p, kind) : nullptr; + float dot = 0, dot_error = 0; + if (key) for (uint d = 0; d < p.width / 32; ++d) + dsv41_dot_add(dot, dot_error, query[d] * dsv41_unpack(key, lane + d * 32, p.width, kind ? p.main_block : 32, kind)); + dot = key ? dsv41_dot_reduce(dot, dot_error) * p.scale : -INFINITY; + next_max = max(next_max, dot); + if (lane == 0) scores[j] = dot; + } + threadgroup_barrier(mem_flags::mem_threadgroup); + float correction = exp(mx - next_max); + float tile_sum = 0; + for (uint d = 0; d < p.width / 32; ++d) acc[d] *= correction; + for (uint j = 0; j < 64; ++j) { + float probability = exp(scores[j] - next_max); + tile_sum += probability; + float rounded = dsv41_bf(dsv41_round(probability)); + uint kind = 0; + device const uchar *key = base + j < count ? dsv41_attn_key(base + j, row, ring, chunk, main, indices, p, kind) : nullptr; + if (key) for (uint d = 0; d < p.width / 32; ++d) + acc[d] += rounded * dsv41_unpack(key, lane + d * 32, p.width, kind ? p.main_block : 32, kind); + } + sum = sum * correction + tile_sum; + mx = next_max; + threadgroup_barrier(mem_flags::mem_threadgroup); + } + // The source adds sink mass to the completed online denominator before the FP32 division. + float denom = sum + exp(sink[head] - mx); + for (uint d = 0; d < p.width / 32; ++d) + out[row * p.q_stride + head * p.width + lane + d * 32] = dsv41_round(acc[d] / denom); +} diff --git a/zig/kernels/metal/deepseek_v41/engram.metal b/zig/kernels/metal/deepseek_v41/engram.metal new file mode 100644 index 0000000000..b3d454cf59 --- /dev/null +++ b/zig/kernels/metal/deepseek_v41/engram.metal @@ -0,0 +1,155 @@ +// Math/layout attribution: DeepSeek AI DeepSeek-V4.1-Flash inference/{engram,model}.py (MIT). +#include +using namespace metal; +inline float rd(const device uchar* p, ulong i, uint dtype) { + if (dtype == 1u) return ((const device float*)p)[i]; + if (dtype == 2u) return float(((const device half*)p)[i]); + return as_type(uint(((const device ushort*)p)[i]) << 16); +} + +struct EngramLayer { + uint layer_id, rows; + ulong multipliers[4]; + uint primes[24], offsets[24]; +}; +struct EngramHistory { int tail[3]; uint available; }; +struct EngramHashArgs { uint tokens, pad, masked; }; + +inline int engram_token(const device uint* ids, const device uint* map, + const device uchar* mask, uint pos, uint masked) { + return masked && mask[pos] == 0 ? -1 : int(map[ids[pos]]); +} + +// One lane per token; history is immutable until all layers have hashed this chunk. +kernel void tf_v41_engram_hash(const device uint* ids [[buffer(0)]], + const device uint* map [[buffer(1)]], + const device uchar* mask [[buffer(2)]], + const device EngramHistory& history [[buffer(3)]], + device uint* out [[buffer(4)]], + constant EngramLayer& layer [[buffer(5)]], + constant EngramHashArgs& args [[buffer(6)]], + uint pos [[thread_position_in_grid]]) { + if (pos >= args.tokens) return; + bool blocked = false; + ulong rolling = 0; + for (uint shift = 0; shift < 4; shift++) { + int token; + if (shift <= pos) token = engram_token(ids, map, mask, pos - shift, args.masked); + else { + const uint back = shift - pos - 1; + token = back < history.available ? history.tail[back] : -1; + } + blocked = blocked || token == -1; + const ulong compressed = blocked ? args.pad : uint(token); + rolling ^= compressed * layer.multipliers[shift]; + if (shift != 0) for (uint head = 0; head < 8; head++) { + const uint col = (shift - 1) * 8 + head; + out[size_t(pos) * 24 + col] = uint(rolling % layer.primes[col]) + layer.offsets[col]; + } + } +} + +// Called exactly once after all Engram layers hash a chunk, never once per layer. +kernel void tf_v41_engram_commit(const device uint* ids [[buffer(0)]], + const device uint* map [[buffer(1)]], + const device uchar* mask [[buffer(2)]], + device EngramHistory& history [[buffer(3)]], + constant EngramHashArgs& args [[buffer(4)]]) { + int tail[3]; + for (uint i = 0; i < 3; i++) { + tail[i] = i < args.tokens ? engram_token(ids, map, mask, args.tokens - i - 1, args.masked) + : i - args.tokens < history.available ? history.tail[i - args.tokens] : -1; + } + for (uint i = 0; i < 3; i++) history.tail[i] = tail[i]; + history.available = min(3u, history.available + args.tokens); +} + +kernel void tf_v41_engram_reset(device EngramHistory& history [[buffer(0)]]) { + for (uint i = 0; i < 3; i++) history.tail[i] = -1; + history.available = 0; +} + +inline float engram_e4m3(uchar bits) { + const uint magnitude = bits & 127, exponent = magnitude >> 3, mantissa = magnitude & 7; + float value = magnitude == 127 ? NAN : exponent == 0 ? float(mantissa) * 0x1p-9f + : ldexp(1.0f + float(mantissa) * 0.125f, int(exponent) - 7); + return bits & 128 ? -value : value; +} +inline float engram_ue8m0(uchar bits) { + return bits == 255 ? NAN : as_type(bits == 0 ? 0x00400000u : uint(bits) << 23); +} + +struct EngramGatherArgs { + ulong weight_stride, scale_stride, output_stride; + uint tokens, columns, head_dim, scale_block; +}; + +// Read only the selected E4M3FN rows; one UE8M0 scale per 32 values of each row. +kernel void tf_v41_engram_gather(const device uint* ids [[buffer(0)]], + const device uchar* table [[buffer(1)]], + const device uchar* scales [[buffer(2)]], + device bfloat* out [[buffer(3)]], + constant EngramGatherArgs& args [[buffer(4)]], + uint2 pos [[thread_position_in_grid]]) { + if (pos.y >= args.tokens || pos.x >= args.columns * args.head_dim) return; + const uint col = pos.x / args.head_dim, d = pos.x % args.head_dim; + const size_t row = ids[size_t(pos.y) * args.columns + col]; + const float value = engram_e4m3(table[row * args.weight_stride + d]); + const float scale = engram_ue8m0(scales[row * args.scale_stride + d / args.scale_block]); + out[size_t(pos.y) * args.output_stride + pos.x] = bfloat(value * scale); +} + +struct EngramGateArgs { + ulong hidden_stride, kv_stride, output_stride; + uint dim, copies, masked, weight_dtype; + float eps; +}; + +// Each copy gets its own RMS dot gate; all copies share the value following the flattened keys. +kernel void tf_v41_engram_gate(const device bfloat* hidden [[buffer(0)]], + const device bfloat* kv [[buffer(1)]], + const device uchar* q_weight [[buffer(2)]], + const device uchar* k_weight [[buffer(3)]], + const device uchar* mask [[buffer(4)]], + device bfloat* out [[buffer(5)]], + constant EngramGateArgs& args [[buffer(6)]], + uint2 group [[threadgroup_position_in_grid]], + uint t [[thread_index_in_threadgroup]], + uint lane [[thread_index_in_simdgroup]], + uint sg [[simdgroup_index_in_threadgroup]]) { + threadgroup float3 sums[8]; + threadgroup float gate; + const size_t hbase = size_t(group.x) * args.hidden_stride + size_t(group.y) * args.dim; + const size_t kbase = size_t(group.x) * args.kv_stride + size_t(group.y) * args.dim; + const size_t wbase = size_t(group.y) * args.dim; + float3 acc = 0; + for (uint d = t; d < args.dim; d += 256) { + const float h = float(hidden[hbase + d]), k = float(kv[kbase + d]); + const float weight = rd(q_weight, wbase + d, args.weight_dtype) * rd(k_weight, wbase + d, args.weight_dtype); + acc += float3(h * h, k * k, (h * weight) * k); + } + acc = float3(simd_sum(acc.x), simd_sum(acc.y), simd_sum(acc.z)); + if (lane == 0) sums[sg] = acc; + threadgroup_barrier(mem_flags::mem_threadgroup); + if (sg == 0) { + acc = lane < 8 ? sums[lane] : float3(0); + acc = float3(simd_sum(acc.x), simd_sum(acc.y), simd_sum(acc.z)); + if (lane == 0) { + float rstd; + { +#pragma clang fp contract(off) + const float factor = 1.0f / float(args.dim); + rstd = metal::precise::rsqrt(acc.x * factor + args.eps) + * metal::precise::rsqrt(acc.y * factor + args.eps); + } + const float dot = (acc.z * rstd) * metal::precise::rsqrt(float(args.dim)); + const float signed_root = copysign(metal::precise::sqrt(max(abs(dot), 1e-6f)), dot); + gate = args.masked && mask[group.x] == 0 ? 0.0f : 1.0f / (1.0f + metal::precise::exp(-signed_root)); + } + } + threadgroup_barrier(mem_flags::mem_threadgroup); + const size_t vbase = size_t(group.x) * args.kv_stride + size_t(args.copies) * args.dim; + const size_t obase = size_t(group.x) * args.output_stride + size_t(group.y) * args.dim; + for (uint d = t; d < args.dim; d += 256) + out[obase + d] = bfloat(float(hidden[hbase + d]) + gate * float(kv[vbase + d])); +} diff --git a/zig/kernels/metal/deepseek_v41/index.metal b/zig/kernels/metal/deepseek_v41/index.metal new file mode 100644 index 0000000000..8d62337624 --- /dev/null +++ b/zig/kernels/metal/deepseek_v41/index.metal @@ -0,0 +1,103 @@ +// Source is compiled after kv.metal; no query-by-key-by-head score tensor is materialized. +struct Dsv41Index { + uint rows, heads, width, q_stride, weight_stride, position, ratio, keys, key_stride; + uint tile_start, tile_width, topk, candidate_topk, block_size, use_candidates, make_candidates; + float scale; +}; +struct Dsv41Pick { float score; int position; }; +inline bool dsv41_less(Dsv41Pick a, Dsv41Pick b) { + return a.score < b.score || (a.score == b.score && a.position > b.position); +} +inline void dsv41_heap(device Dsv41Pick *h, uint size, Dsv41Pick v) { + if (!dsv41_less(h[0], v)) return; + uint at = 0; + while (2 * at + 1 < size) { + uint child = 2 * at + 1; + if (child + 1 < size && dsv41_less(h[child + 1], h[child])) ++child; + if (!dsv41_less(h[child], v)) break; + h[at] = h[child]; at = child; + } + h[at] = v; +} +inline int dsv41_index_position(uint local, uint row, device const Dsv41Pick *candidates, + constant Dsv41Index &p) { + uint slot = p.tile_start + local; + if (!p.use_candidates) return int(slot); + uint block = slot / p.block_size; + if (block >= p.candidate_topk) return -1; + int id = candidates[row * p.candidate_topk + block].position; + return id < 0 ? -1 : id * int(p.block_size) + int(slot % p.block_size); +} +kernel void dsv41_index_score(device const ushort *q [[buffer(0)]], device const ushort *weight [[buffer(1)]], + device const uchar *key [[buffer(2)]], device const Dsv41Pick *candidates [[buffer(3)]], + device float *scores [[buffer(4)]], constant Dsv41Index &p [[buffer(5)]], + uint2 g [[threadgroup_position_in_grid]], uint lane [[thread_index_in_threadgroup]]) { + uint local = g.x, row = g.y; + if (local >= p.tile_width || row >= p.rows) return; + int pos = dsv41_index_position(local, row, candidates, p); + uint visible = min(p.keys, (p.position + row + 1) / p.ratio); + if (pos < 0 || uint(pos) >= visible) { + if (lane == 0) scores[row * p.tile_width + local] = -INFINITY; + return; + } + device const uchar *k = key + uint(pos) * p.key_stride; + float key_values[4]; + for (uint d = 0; d < p.width / 32; ++d) key_values[d] = dsv41_unpack(k, lane + 32 * d, p.width, 32, 2); + float total = 0; + for (uint head = 0; head < p.heads; ++head) { + float dot = 0; + for (uint d = 0; d < p.width / 32; ++d) + dot += dsv41_bf(q[row * p.q_stride + head * p.width + lane + 32 * d]) * key_values[d]; + dot = dsv41_bf(dsv41_round(simd_sum(dot))); + const float scaled_weight = dsv41_bf(dsv41_round(dsv41_bf(weight[row * p.weight_stride + head]) * p.scale)); + total += dsv41_bf(dsv41_round(max(dot, 0.0f) * scaled_weight)); + } + if (lane == 0) scores[row * p.tile_width + local] = dsv41_bf(dsv41_round(total)); +} +kernel void dsv41_index_clear(device Dsv41Pick *top [[buffer(0)]], device Dsv41Pick *candidate [[buffer(1)]], + constant Dsv41Index &p [[buffer(2)]], uint2 i [[thread_position_in_grid]]) { + if (i.y >= p.rows) return; + if (i.x < p.topk) top[i.y * p.topk + i.x] = {-INFINITY, -1}; + if (p.make_candidates && i.x < p.candidate_topk) candidate[i.y * p.candidate_topk + i.x] = {-INFINITY, -1}; +} +kernel void dsv41_index_merge(device const float *scores [[buffer(0)]], device Dsv41Pick *top [[buffer(1)]], + device Dsv41Pick *candidate [[buffer(2)]], constant Dsv41Index &p [[buffer(3)]], + uint row [[thread_position_in_grid]]) { + if (row >= p.rows) return; + device Dsv41Pick *heap = top + row * p.topk; + for (uint i = 0; i < p.tile_width; ++i) { + float score = scores[row * p.tile_width + i]; + int pos = dsv41_index_position(i, row, candidate, p); + if (isfinite(score)) dsv41_heap(heap, p.topk, {score, pos}); + } + if (!p.make_candidates) return; + uint visible = min(p.keys, (p.position + row + 1) / p.ratio); + device Dsv41Pick *blocks = candidate + row * p.candidate_topk; + for (uint base = 0; base < p.tile_width; base += p.block_size) { + float score = -INFINITY; + for (uint j = 0; j < p.block_size; ++j) score = max(score, scores[row * p.tile_width + base + j]); + uint block = (p.tile_start + base) / p.block_size; + if (visible && block == (visible - 1) / p.block_size) score = INFINITY; + if (score > -INFINITY) dsv41_heap(blocks, p.candidate_topk, {score, int(block)}); + } +} +inline void dsv41_sort_positions(device Dsv41Pick *p, uint size) { + // Selection is score-ordered; attention sees the reference's ascending position order. + for (uint i = 1; i < size; ++i) { + Dsv41Pick value = p[i]; uint j = i; + while (j > 0 && (p[j - 1].position < 0 || + (value.position >= 0 && p[j - 1].position > value.position))) { + if (value.position < 0) break; + p[j] = p[j - 1]; --j; + } + p[j] = value; + } +} +kernel void dsv41_index_finish(device Dsv41Pick *top [[buffer(0)]], device Dsv41Pick *candidate [[buffer(1)]], + device int *positions [[buffer(2)]], constant Dsv41Index &p [[buffer(3)]], uint row [[thread_position_in_grid]]) { + if (row >= p.rows) return; + device Dsv41Pick *heap = top + row * p.topk; + dsv41_sort_positions(heap, p.topk); + for (uint i = 0; i < p.topk; ++i) positions[row * p.topk + i] = heap[i].position; + if (p.make_candidates) dsv41_sort_positions(candidate + row * p.candidate_topk, p.candidate_topk); +} diff --git a/zig/kernels/metal/deepseek_v41/kv.metal b/zig/kernels/metal/deepseek_v41/kv.metal new file mode 100644 index 0000000000..6ac2017efb --- /dev/null +++ b/zig/kernels/metal/deepseek_v41/kv.metal @@ -0,0 +1,141 @@ +// DeepSeek V4.1 cache quantization and pooling, following the official inference kernels. +#include +using namespace metal; +inline float dsv41_bf(ushort x) { return as_type(uint(x) << 16); } +inline ushort dsv41_round(float x) { + uint u = as_type(x); + return ushort((u + 0x7fff + ((u >> 16) & 1)) >> 16); +} +inline float dsv41_e4(uchar c) { + uint e = (c >> 3) & 15, m = c & 7; + float v = e == 0 ? float(m) * 0x1p-9f : ldexp(1.0f + float(m) / 8.0f, int(e) - 7); + return (c & 128) ? -v : v; +} +inline uchar dsv41_e4code(float x) { + float a = min(abs(x), 448.0f); + if (a == 0) return signbit(x) ? 128 : 0; + int e = max(-6, int((as_type(a) >> 23) & 255) - 127); + int q = int(rint(ldexp(a, 3 - e))); + uint c = e == -6 && q < 8 ? uint(q) : uint((e + 7) * 8 + q - 8); + return uchar(min(c, 126u) | (signbit(x) ? 128u : 0u)); +} +inline float dsv41_e2(uchar c) { + const float v[8] = {0, .5f, 1, 1.5f, 2, 3, 4, 6}; + return (c & 8) ? -v[c & 7] : v[c & 7]; +} +inline uchar dsv41_e2code(float x) { + float a = min(abs(x), 6.0f); + uint pick = a <= .25f ? 0 : a < .75f ? 1 : a <= 1.25f ? 2 : a < 1.75f ? 3 + : a <= 2.5f ? 4 : a < 3.5f ? 5 : a <= 5.0f ? 6 : 7; + return uchar(pick | (signbit(x) ? 8 : 0)); +} +inline float dsv41_unpack(device const uchar *p, uint d, uint width, uint block, uint kind) { + if (kind == 0) { + float s = as_type(uint(p[width + d / 32]) << 23); + return dsv41_bf(dsv41_round(dsv41_e4(p[d]) * s)); + } + uchar c = p[d / 2]; + float s = kind == 1 ? dsv41_e4(p[width / 2 + d / block]) + : as_type(uint(p[width / 2 + d / block]) << 23); + return dsv41_bf(dsv41_round(dsv41_e2((d & 1) ? c >> 4 : c & 15) * s)); +} +struct Dsv41Pack { uint rows, width, stride, packed_stride, block, kind, first, ring, inplace; }; +kernel void dsv41_pack(device ushort *x [[buffer(0)]], device uchar *out [[buffer(1)]], + constant Dsv41Pack &p [[buffer(2)]], uint2 g [[threadgroup_position_in_grid]], + uint lane [[thread_index_in_threadgroup]]) { + uint row = g.y, group = g.x, d = group * p.block + lane; + if (row >= p.rows) return; + float v = lane < p.block ? dsv41_bf(x[row * p.stride + d]) : 0; + float a = simd_max(abs(v)); + float scale; uchar sc; + if (p.kind == 1) { + sc = dsv41_e4code(max(a, 6.0f * 0x1p-9f) / 6.0f); scale = dsv41_e4(sc); + } else { + float minimum = p.kind == 0 ? 1e-4f : 6.0f * 0x1p-126f; + float z = max(a, minimum) / (p.kind == 0 ? 448.0f : 6.0f); + uint bits = as_type(z); + int exp = int((bits >> 23) & 255) - 127 + ((bits & 0x7fffff) != 0); + sc = uchar(exp + 127); scale = ldexp(1.0f, exp); + } + uint dst = p.ring ? (p.first + row) % p.ring : p.first + row; + device uchar *packed = out + dst * p.packed_stride; + if (lane == 0) packed[(p.kind == 0 ? p.width : p.width / 2) + group] = sc; + if (lane >= p.block) return; + if (p.kind == 0) { + uchar c = dsv41_e4code(v / scale); packed[d] = c; + if (p.inplace) x[row * p.stride + d] = dsv41_round(dsv41_e4(c) * scale); + } else { + uchar c = dsv41_e2code(v / scale); + uchar other = uchar(simd_shuffle_xor(uint(c), 1)); + if (!(lane & 1)) packed[d / 2] = c | (other << 4); + if (p.inplace) x[row * p.stride + d] = dsv41_round(dsv41_e2(c) * scale); + } +} +struct Dsv41Pool { uint rows, width, ratio, position, stride, input_f32; float eps; }; +kernel void dsv41_pool(device const uchar *values [[buffer(0)]], device const float *gate [[buffer(1)]], + device float *partial [[buffer(2)]], device const ushort *weight [[buffer(3)]], + device ushort *latent [[buffer(4)]], constant Dsv41Pool &p [[buffer(5)]], + uint group [[threadgroup_position_in_grid]], uint lane [[thread_index_in_threadgroup]]) { + // A group reads the prior chunk's tail before the independent tail-update dispatch. + uint start = (p.position / p.ratio + group) * p.ratio; + threadgroup float pooled[512]; + float square = 0; + for (uint d = lane; d < p.width; d += 128) { + float mx = -INFINITY, sum = 0, total = 0; + for (uint j = 0; j < p.ratio; ++j) { + uint pos = start + j; + float score = p.ratio == 1 ? 0 : (pos < p.position ? partial[p.ratio * p.width + (pos % p.ratio) * p.width + d] + : gate[(pos - p.position) * p.stride + d]); + mx = max(mx, score); + } + float slots[2], exponent[2]; + for (uint j = 0; j < p.ratio; ++j) { + uint pos = start + j; + slots[j] = pos < p.position ? partial[(pos % p.ratio) * p.width + d] + : (p.input_f32 ? reinterpret_cast(values)[(pos - p.position) * p.stride + d] + : dsv41_bf(reinterpret_cast(values)[(pos - p.position) * p.stride + d])); + float score = p.ratio == 1 ? 0 : (pos < p.position ? partial[p.ratio * p.width + (pos % p.ratio) * p.width + d] + : gate[(pos - p.position) * p.stride + d]); + exponent[j] = exp(score - mx); sum += exponent[j]; + } + for (uint j = 0; j < p.ratio; ++j) total += slots[j] * (exponent[j] / sum); + float v = dsv41_bf(dsv41_round(total)); pooled[d] = v; square += v * v; + } + threadgroup float sums[4]; + float ss = simd_sum(square); + if (!(lane % 32)) sums[lane / 32] = ss; + threadgroup_barrier(mem_flags::mem_threadgroup); + float inv = rsqrt((sums[0] + sums[1] + sums[2] + sums[3]) / p.width + p.eps); + for (uint d = lane; d < p.width; d += 128) + latent[group * p.width + d] = dsv41_round(pooled[d] * inv * dsv41_bf(weight[d])); +} +kernel void dsv41_pool_tail(device const float *values [[buffer(0)]], device const float *gate [[buffer(1)]], + device float *partial [[buffer(2)]], constant Dsv41Pool &p [[buffer(3)]], + uint d [[thread_position_in_grid]]) { + if (d >= p.width || p.ratio == 1) return; + uint end = p.position + p.rows, tail = end % p.ratio; + for (uint j = 0; j < tail; ++j) { + uint pos = end - tail + j; + if (pos < p.position) continue; + partial[j * p.width + d] = values[(pos - p.position) * p.stride + d]; + partial[p.ratio * p.width + j * p.width + d] = gate[(pos - p.position) * p.stride + d]; + } +} +kernel void dsv41_copy(device const uchar *src [[buffer(0)]], device uchar *dst [[buffer(1)]], + constant uint &bytes [[buffer(2)]], uint i [[thread_position_in_grid]]) { + if (i < bytes) dst[i] = src[i]; +} +kernel void dsv41_publish_window(device const uchar *chunk [[buffer(0)]], device uchar *ring [[buffer(1)]], + constant uint4 &p [[buffer(2)]], uint2 i [[thread_position_in_grid]]) { + uint count = min(p.x, 128u), first = p.x - count; + if (i.x >= p.z || i.y >= count) return; + uint row = first + i.y, slot = (p.y + row) % 128; + ring[slot * p.w + i.x] = chunk[row * p.z + i.x]; +} +kernel void dsv41_unpack_rows(device const uchar *packed [[buffer(0)]], device ushort *out [[buffer(1)]], + constant Dsv41Pack &p [[buffer(2)]], uint2 i [[thread_position_in_grid]]) { + if (i.x >= p.width || i.y >= p.rows) return; + uint row = p.ring ? (p.first + i.y) % p.ring : p.first + i.y; + out[i.y * p.stride + i.x] = dsv41_round(dsv41_unpack(packed + row * p.packed_stride, + i.x, p.width, p.block, p.kind)); +} diff --git a/zig/kernels/metal/deepseek_v41/mhc.metal b/zig/kernels/metal/deepseek_v41/mhc.metal new file mode 100644 index 0000000000..8b6203a4cf --- /dev/null +++ b/zig/kernels/metal/deepseek_v41/mhc.metal @@ -0,0 +1,120 @@ +// Reference: DeepSeek-V4.1-Flash inference/model.py and kernel.py, revision 2cba9e42aa026125f3ed06c6d98c1db82f7ca027. +#include +using namespace metal; +inline float bf(ushort x) { return as_type(uint(x)<<16); } +inline ushort rb(float x) { + uint u=as_type(x); + if ((u&0x7fffffff)>0x7f800000) return ushort((u>>16)|0x40); + return ushort((u+0x7fff+((u>>16)&1))>>16); +} +// Torch CUDA materializes FP32 squares before MeanOps accumulation. +#pragma clang fp contract(off) +struct Rms { uint rows,width,stream_stride; float eps; }; +kernel void dsv41_hc_rms(const device ushort* x [[buffer(0)]], device float* inv [[buffer(1)]], + constant Rms& d [[buffer(2)]], uint row [[threadgroup_position_in_grid]], + uint t [[thread_index_in_threadgroup]], uint lane [[thread_index_in_simdgroup]], + uint sg [[simdgroup_index_in_threadgroup]]) { + // Fixed single-row CUDA tree: four vector accumulators, stride 512, independent of prefill chunks. + threadgroup float sums[512]; + float4 accum=0.0f; + for (uint i=4*t;i<4*d.width;i+=4*512) { + float4 a=float4(bf(x[ulong(row)*d.stream_stride+i]), + bf(x[ulong(row)*d.stream_stride+i+1]), + bf(x[ulong(row)*d.stream_stride+i+2]), + bf(x[ulong(row)*d.stream_stride+i+3])); + float4 square=a*a; + accum+=square; + } + float s=((accum.x+accum.y)+accum.z)+accum.w; + sums[t]=s; + for (uint offset=256;offset>=32;offset>>=1) { + threadgroup_barrier(mem_flags::mem_threadgroup); + if (t0;offset>>=1) s+=simd_shuffle_down(s,offset); + // MeanOps projects with a rounded FP32 factor, not a division of the sum. + float factor=1.0f/float(4*d.width); + if (lane==0) inv[row]=rsqrt(s*factor+d.eps); + } +} +#pragma clang fp contract(on) +struct Split { uint rows,mix_stride,coefficient_stride,comb_stride; float eps; }; +kernel void dsv41_hc_split(const device float* mixes [[buffer(0)]], const device float* inv [[buffer(1)]], + const device float* scale [[buffer(2)]], const device float* base [[buffer(3)]], + device float* pre [[buffer(4)]], device float* post [[buffer(5)]], + device float* comb [[buffer(6)]], constant Split& d [[buffer(7)]], + uint row [[thread_position_in_grid]]) { + if (row>=d.rows) return; + float m[16]; + for (uint j=0;j<4;j++) { + float a=fma(mixes[ulong(row)*d.mix_stride+j]*inv[row],scale[0],base[j]); + float b=fma(mixes[ulong(row)*d.mix_stride+4+j]*inv[row],scale[1],base[4+j]); + pre[ulong(row)*d.coefficient_stride+j]=1.0f/(1.0f+exp(-a))+d.eps; + post[ulong(row)*d.coefficient_stride+j]=2.0f/(1.0f+exp(-b)); + for (uint k=0;k<4;k++) { + uint q=4*j+k; + m[q]=fma(mixes[ulong(row)*d.mix_stride+8+q]*inv[row],scale[2],base[8+q]); + } + } + // Initial row softmax + eps, then a column normalization. This counts as iteration one. + for (uint j=0;j<4;j++) { + float mx=max(max(m[4*j],m[4*j+1]),max(m[4*j+2],m[4*j+3])); + for (uint k=0;k<4;k++) m[4*j+k]=exp(m[4*j+k]-mx); + // Pinned TileLang HC row/column sums use FP32 butterfly pairs. + float s=(m[4*j]+m[4*j+2])+(m[4*j+1]+m[4*j+3]); + for (uint k=0;k<4;k++) m[4*j+k]=m[4*j+k]/s+d.eps; + } + for (uint it=0;it<20;it++) { + if (it>0) { + for (uint j=0;j<4;j++) { + float s=((m[4*j]+m[4*j+2])+(m[4*j+1]+m[4*j+3]))+d.eps; + for (uint k=0;k<4;k++) m[4*j+k]/=s; + } + } + for (uint k=0;k<4;k++) { + float s=((m[k]+m[8+k])+(m[4+k]+m[12+k]))+d.eps; + for (uint j=0;j<4;j++) m[4*j+k]/=s; + } + } + for (uint q=0;q<16;q++) comb[ulong(row)*d.comb_stride+q]=m[q]; +} +// PyTorch materializes these FP32 products before reduction and branch addition. +#pragma clang fp contract(off) +struct Collapse { uint rows,width,stream_stride,y_stride,pre_stride; }; +kernel void dsv41_hc_collapse(const device ushort* x [[buffer(0)]], const device float* previous_pre [[buffer(1)]], + device ushort* y [[buffer(2)]], constant Collapse& d [[buffer(3)]], + uint2 i [[thread_position_in_grid]]) { + if (i.x>=d.width || i.y>=d.rows) return; + float s=0; + for (uint c=0;c<4;c++) s+=previous_pre[ulong(i.y)*d.pre_stride+c]*bf(x[ulong(i.y)*d.stream_stride+ulong(c)*d.width+i.x]); + y[ulong(i.y)*d.y_stride+i.x]=rb(s); +} +struct Post { uint rows,width,branch_stride,residual_stride,y_stride,coefficient_stride,comb_stride; }; +kernel void dsv41_hc_post(const device ushort* branch [[buffer(0)]], const device ushort* residual [[buffer(1)]], + const device float* post [[buffer(2)]], const device float* comb [[buffer(3)]], + device ushort* y [[buffer(4)]], constant Post& d [[buffer(5)]], + uint2 i [[thread_position_in_grid]]) { + if (i.x>=d.width || i.y>=d.rows) return; + float r[4]; + for (uint j=0;j<4;j++) r[j]=bf(residual[ulong(i.y)*d.residual_stride+ulong(j)*d.width+i.x]); + float b=bf(branch[ulong(i.y)*d.branch_stride+i.x]); + for (uint k=0;k<4;k++) { + float s=0; + for (uint j=0;j<4;j++) s+=comb[ulong(i.y)*d.comb_stride+4*j+k]*r[j]; + y[ulong(i.y)*d.y_stride+ulong(k)*d.width+i.x]=rb(post[ulong(i.y)*d.coefficient_stride+k]*b+s); + } +} +#pragma clang fp contract(on) +struct Expand { uint rows,width,x_stride,stream_stride,pre_stride; }; +kernel void dsv41_hc_expand(const device ushort* x [[buffer(0)]], device ushort* stream [[buffer(1)]], + device float* pre [[buffer(2)]], constant Expand& d [[buffer(3)]], + uint2 i [[thread_position_in_grid]]) { + if (i.x>=d.width || i.y>=d.rows) return; + for (uint c=0;c<4;c++) stream[ulong(i.y)*d.stream_stride+ulong(c)*d.width+i.x]=x[ulong(i.y)*d.x_stride+i.x]; + if (i.x==0) for (uint c=0;c<4;c++) pre[ulong(i.y)*d.pre_stride+c]=c==0?1.0f:0.0f; +} diff --git a/zig/kernels/metal/deepseek_v41/ops.metal b/zig/kernels/metal/deepseek_v41/ops.metal new file mode 100644 index 0000000000..d831901dd5 --- /dev/null +++ b/zig/kernels/metal/deepseek_v41/ops.metal @@ -0,0 +1,124 @@ +// Math: deepseek-ai/DeepSeek-V4.1-Flash inference/model.py, revision 2cba9e42aa026125f3ed06c6d98c1db82f7ca027. +#include +using namespace metal; +inline float bf(ushort x) { return as_type(uint(x) << 16); } +inline ushort rb(float x) { + uint u = as_type(x); + if ((u & 0x7fffffff) > 0x7f800000) return ushort((u >> 16) | 0x40); + return ushort((u + 0x7fff + ((u >> 16) & 1)) >> 16); +} +inline float rd(const device uchar* p, ulong i, uint dtype) { + if (dtype==1) return ((const device float*)p)[i]; + if (dtype==2) return float(((const device half*)p)[i]); + return bf(((const device ushort*)p)[i]); +} +struct Rms { uint rows, width, x_stride, y_stride; float eps; uint weight_f32; }; +#pragma clang fp contract(off) +kernel void dsv41_rms(const device ushort* x [[buffer(0)]], const device uchar* w [[buffer(1)]], + device ushort* y [[buffer(2)]], constant Rms& d [[buffer(3)]], + uint row [[threadgroup_position_in_grid]], uint t [[thread_index_in_threadgroup]], + uint lane [[thread_index_in_simdgroup]], uint sg [[simdgroup_index_in_threadgroup]]) { + threadgroup float sums[8]; + float s = 0; + for (uint i = t; i < d.width; i += 256) { float a = bf(x[ulong(row)*d.x_stride+i]); s += a*a; } + s = simd_sum(s); + if (lane == 0) sums[sg] = s; + threadgroup_barrier(mem_flags::mem_threadgroup); + if (sg == 0) { + float total = simd_sum(lane < 8 ? sums[lane] : 0.0f); + const float factor = 1.0f / float(d.width); + if (lane == 0) sums[0] = rsqrt(total * factor + d.eps); + } + threadgroup_barrier(mem_flags::mem_threadgroup); + for (uint i = t; i < d.width; i += 256) + y[ulong(row)*d.y_stride+i] = rb((bf(x[ulong(row)*d.x_stride+i])*sums[0])*rd(w,i,d.weight_f32)); +} +#pragma clang fp contract(on) +// Each SIMD group emits four columns; compensated dots do not depend on token count. + +// Precision: 0=BF16, 1=FP32, 2=FP16; FP16 weights never round through BF16. +inline void dense_add(thread float& high, thread float& low, float value) { + float next = high + value; + float borrowed = next - high; + low += (high - (next - borrowed)) + (value - borrowed); + high = next; +} +struct Dense { uint rows, k, n, groups, x_stride, w_stride, y_stride, x_dtype, w_dtype, y_dtype; }; +kernel void dsv41_dense(const device uchar* x [[buffer(0)]], const device uchar* w [[buffer(1)]], + device uchar* y [[buffer(2)]], constant Dense& d [[buffer(3)]], + uint3 g [[threadgroup_position_in_grid]], uint lane [[thread_index_in_simdgroup]], + uint sg [[simdgroup_index_in_threadgroup]]) { + uint col = g.x*16 + sg*4; + float a[4] = {0,0,0,0}, residual[4] = {0,0,0,0}; + for (uint k = lane; k < d.k; k += 32) { + float v = rd(x,ulong(g.y)*d.x_stride+ulong(g.z)*d.k+k,d.x_dtype); + for (uint j=0;j<4;j++) if (col+j>= 1) { + float other = simd_shuffle_xor(a[j], offset); + float other_residual = simd_shuffle_xor(residual[j], offset); + dense_add(a[j], residual[j], other); + residual[j] += other_residual; + } + float v = a[j] + residual[j]; + if (lane==0 && col+j=d.width || i.y>=d.rows) return; + ushort v=table[ulong(ids[i.y])*d.table_stride+i.x]; + for (uint c=0;c=d.width || i.y>=d.rows) return; + ulong k=ulong(i.y)*d.input_stride+i.x; + float a=min(rd(gate,k,d.input_f32),10.0f), b=clamp(rd(up,k,d.input_f32),-10.0f,10.0f); + float v=(a/(1.0f+exp(-a)))*b; + if (d.weighted) v=weights[i.y]*v; + y[ulong(i.y)*d.output_stride+i.x]=rb(v); +} +struct Combine { uint rows,width,routed_row_stride,slot_stride,shared_stride,y_stride,input_f32,id_stride; }; +kernel void dsv41_combine(const device uchar* routed [[buffer(0)]], const device uchar* shared [[buffer(1)]], + const device uint* ids [[buffer(2)]], device ushort* y [[buffer(3)]], + constant Combine& d [[buffer(4)]], + uint2 i [[thread_position_in_grid]], uint t [[thread_index_in_threadgroup]]) { + threadgroup uint slots[6]; + if (t==0) { + for (uint a=0;a<6;a++) slots[a]=a; + for (uint a=1;a<6;a++) { + uint slot=slots[a], j=a; + while (j>0 && ids[ulong(i.y)*d.id_stride+slots[j-1]]>ids[ulong(i.y)*d.id_stride+slot]) { + slots[j]=slots[j-1]; j--; + } + slots[j]=slot; + } + } + threadgroup_barrier(mem_flags::mem_threadgroup); + if (i.x>=d.width || i.y>=d.rows) return; + for (uint slot=0;slot<6;slot++) if (ids[ulong(i.y)*d.id_stride+slot]>=384) { + y[ulong(i.y)*d.y_stride+i.x]=rb(NAN); + return; + } + float s=0; + for (uint rank=0;rank<6;rank++) + s+=rd(routed,ulong(i.y)*d.routed_row_stride+ulong(slots[rank])*d.slot_stride+i.x,d.input_f32); + s+=rd(shared,ulong(i.y)*d.shared_stride+i.x,d.input_f32); + y[ulong(i.y)*d.y_stride+i.x]=rb(s); +} diff --git a/zig/kernels/metal/deepseek_v41/rope.metal b/zig/kernels/metal/deepseek_v41/rope.metal new file mode 100644 index 0000000000..09c4d1cb2e --- /dev/null +++ b/zig/kernels/metal/deepseek_v41/rope.metal @@ -0,0 +1,17 @@ +// Adjacent-pair RoPE and YaRN match DeepSeek V4.1's in-place BF16 rotation. +#include +using namespace metal; +struct Dsv41Rope { uint rows, heads, width, rotary, stride, position, step, inverse, spectrum; }; +kernel void dsv41_rope(device ushort *x [[buffer(0)]], constant Dsv41Rope &p [[buffer(1)]], + device const float2 *factors [[buffer(2)]], + uint3 i [[thread_position_in_grid]]) { + if (i.x >= p.rotary / 2 || i.y >= p.heads || i.z >= p.rows) return; + // The encoder binds the selected spectrum; rows are absolute source positions. + float2 rotation = factors[(ulong(p.position) + ulong(i.z) * p.step) * (p.rotary / 2) + i.x]; + float c = rotation.x, s = p.inverse ? -rotation.y : rotation.y; + uint at = i.z * p.stride + i.y * p.width + p.width - p.rotary + 2 * i.x; + float a = as_type(uint(x[at]) << 16), b = as_type(uint(x[at + 1]) << 16); + uint u = as_type(a * c - b * s), v = as_type(a * s + b * c); + x[at] = ushort((u + 0x7fff + ((u >> 16) & 1)) >> 16); + x[at + 1] = ushort((v + 0x7fff + ((v >> 16) & 1)) >> 16); +} diff --git a/zig/kernels/metal/deepseek_v41/route.metal b/zig/kernels/metal/deepseek_v41/route.metal new file mode 100644 index 0000000000..51f5454dd3 --- /dev/null +++ b/zig/kernels/metal/deepseek_v41/route.metal @@ -0,0 +1,53 @@ +// Reference: DeepSeek-V4.1-Flash inference/model.py Gate, revision 2cba9e42aa026125f3ed06c6d98c1db82f7ca027. +#include +using namespace metal; +inline float lp(float x) { float u=1.0f+x; return u==1.0f?x:x*(log(u)/(u-1.0f)); } +inline float score(float x) { return sqrt(x>20.0f?x:lp(exp(x))); } +struct Shape { uint rows,logit_stride,output_stride; float temperature; uint bias_dtype; }; +kernel void dsv41_route(const device float* logits [[buffer(0)]], const device uchar* bias [[buffer(1)]], + device uint* ids [[buffer(2)]], device float* weights [[buffer(3)]], + constant Shape& d [[buffer(4)]], uint row [[threadgroup_position_in_grid]], + uint t [[thread_index_in_threadgroup]], uint lane [[thread_index_in_simdgroup]], + uint sg [[simdgroup_index_in_threadgroup]]) { + threadgroup float scores[384], select[384], best[4], picked[6]; + threadgroup uint best_id[4], winner; + for (uint e=t;e<384;e+=128) { + float b; + if (d.bias_dtype==1) b=((const device float*)bias)[e]; + else if (d.bias_dtype==2) b=float(((const device half*)bias)[e]); + else b=as_type(uint(((const device ushort*)bias)[e])<<16); + scores[e]=score(logits[ulong(row)*d.logit_stride+e]/d.temperature); + select[e]=scores[e]+b; + } + threadgroup_barrier(mem_flags::mem_threadgroup); + // Every expert participates in every rank selection; ties use the lower expert id deterministically. + for (uint slot=0;slot<6;slot++) { + float v=-INFINITY; + uint id=0xffffffffu; + for (uint e=t;e<384;e+=128) if (select[e]>v || (select[e]==v && e std.math.maxInt(u32)) return error.InvalidExl3Experts; diff --git a/zig/src/core/exl3_projection_gpu_test.zig b/zig/src/core/exl3_projection_gpu_test.zig index 6f6445c433..1beb5ee218 100644 --- a/zig/src/core/exl3_projection_gpu_test.zig +++ b/zig/src/core/exl3_projection_gpu_test.zig @@ -285,6 +285,34 @@ test "packed signs and GPU expert filtering preserve untouched output slots" { try std.testing.expectEqualSlices(u16, plain.slice(u16, 6 * n), filtered.slice(u16, 6 * n)); } +test "the dense projection checks its borrowed buffers against the output it writes" { + const device = try mtl.Device.init(); + defer device.deinit(); + const queue = try device.queue(); + defer queue.deinit(); + var p = try ex.Pipelines.load(device); + defer p.deinit(); + const owned = try device.buffer(n * k * 2 + (k + n) * 2 + rows * (k + n) * 2, mtl.ResourceOptions.shared); + defer owned.deinit(); + const scratch = try device.buffer(try ex.scratchBytes(k, n, rows), mtl.ResourceOptions.shared); + defer scratch.deinit(); + const spans = @as(usize, n * k * 2); + const weight = ex.View{ .buffer = owned, .offset = 0 }; + const suh = ex.View{ .buffer = owned, .offset = spans }; + const svh = ex.View{ .buffer = owned, .offset = spans + k * 2 }; + const xv = ex.View{ .buffer = owned, .offset = spans + (k + n) * 2 }; + const yv = ex.View{ .buffer = owned, .offset = xv.offset + rows * k * 2 }; + const sv = ex.View{ .buffer = scratch, .offset = 0 }; + const r = ex.Rows{ .count = rows, .x_stride = k, .y_stride = n }; + const cb = queue.commandBuffer(); + const e = cb.compute(.concurrent); + // A weight or scale sharing the output's storage is read while `y` is written, so both are rejected. + const aliased = ex.DenseMatrix{ .weight = yv, .suh = suh, .svh = svh, .k = k, .n = n }; + try std.testing.expectError(error.AliasedExl3View, ex.encodeDense(&p, e, aliased, xv, yv, sv, r)); + try std.testing.expectError(error.AliasedExl3View, ex.encodeDense(&p, e, .{ .weight = weight, .suh = yv, .svh = svh, .k = k, .n = n }, xv, yv, sv, r)); + try ex.encodeDense(&p, e, .{ .weight = weight, .suh = suh, .svh = svh, .k = k, .n = n }, xv, yv, sv, r); +} + test "rejected views leave an encoder reusable and successful output retains its guards" { const device = try mtl.Device.init(); defer device.deinit(); diff --git a/zig/src/core/expert_groups.zig b/zig/src/core/expert_groups.zig new file mode 100644 index 0000000000..5b672ab6fd --- /dev/null +++ b/zig/src/core/expert_groups.zig @@ -0,0 +1,101 @@ +//! Borrowed bounded GPU route grouping; padded eight-row tiles preserve each original output slot. +const std = @import("std"); +const mtl = @import("metal"); +const sources = @import("kernel_sources"); +const exl3 = @import("exl3_projection.zig"); +pub const Field = enum { counts, offsets, ranks, expert_ids, token_ids, slot_ids }; +const field_count = std.enums.values(Field).len; + +pub const Plan = struct { + rows: u32, + experts: u32, + padded: u32, + offsets: [field_count]usize, + bytes: usize, + + pub fn init(rows: usize, experts: usize) !Plan { + if (rows == 0 or experts == 0 or rows > std.math.maxInt(u32) or experts > std.math.maxInt(u32)) + return error.InvalidExpertGrouping; + const active = @min(rows, experts); + const tiles = try std.math.add(usize, active, (rows - active) / 8); + const padded = try std.math.mul(usize, tiles, 8); + if (padded > std.math.maxInt(u32)) return error.ExpertGroupingTooLarge; + const sizes = [_]usize{ experts * 4, experts * 4, rows * 4, padded * 4, padded * 4, padded * 4 }; + var plan = Plan{ .rows = @intCast(rows), .experts = @intCast(experts), .padded = @intCast(padded), .offsets = undefined, .bytes = 0 }; + for (sizes, 0..) |size, i| { + plan.offsets[i] = std.mem.alignForward(usize, plan.bytes, 16); + plan.bytes = try std.math.add(usize, plan.offsets[i], size); + } + plan.bytes = std.mem.alignForward(usize, plan.bytes, 16); + return plan; + } +}; + +pub const Scratch = struct { + buffer: mtl.Buffer, + offset: usize = 0, + plan: Plan, + + pub fn view(self: Scratch, field: Field) exl3.View { + return .{ .buffer = self.buffer, .offset = self.offset + self.plan.offsets[@backingInt(field)] }; + } +}; + +pub const Pipelines = struct { + stages: [4]mtl.Pipeline, + + pub fn load(device: mtl.Device) !Pipelines { + const pool = mtl.objc.Pool.push(); + defer pool.pop(); + const lib = try mtl.Library.fromSource(device, sources.core_expert_groups, mtl.CompileOptions.mlx()); + defer lib.deinit(); + var stages: [4]mtl.Pipeline = undefined; + var loaded: usize = 0; + errdefer for (stages[0..loaded]) |pipeline| pipeline.deinit(); + inline for (.{ "tf_expert_group_clear", "tf_expert_group_count", "tf_expert_group_prefix", "tf_expert_group_scatter" }, 0..) |name, i| { + stages[i] = try mtl.Pipeline.init(device, lib, name, false); + loaded += 1; + } + return .{ .stages = stages }; + } + pub fn deinit(self: Pipelines) void { + for (self.stages) |pipeline| pipeline.deinit(); + } +}; +const Args = extern struct { rows: u32, experts: u32, repeat: u32, padded: u32 }; + +pub fn encode(enc: mtl.ComputeEncoder, pipelines: *const Pipelines, ids: exl3.View, scratch: Scratch, repeat: u32) !void { + // Plan must come from Plan.init; route IDs remain GPU-resident and are bounds-checked by the kernels. + if (repeat == 0 or scratch.plan.rows == 0 or scratch.plan.experts == 0 or + scratch.plan.rows % repeat != 0) return error.InvalidExpertGrouping; + if (ids.offset % 4 != 0 or scratch.offset % 4 != 0 or + ids.offset > ids.buffer.length() or @as(usize, scratch.plan.rows) * 4 > ids.buffer.length() - ids.offset or + scratch.offset > scratch.buffer.length() or scratch.plan.bytes > scratch.buffer.length() - scratch.offset) + return error.InvalidExpertGroupingStorage; + const args = Args{ .rows = scratch.plan.rows, .experts = scratch.plan.experts, .repeat = repeat, .padded = scratch.plan.padded }; + for (pipelines.stages, 0..) |pipeline, phase| { + enc.setPipeline(pipeline); + enc.setBuffer(ids.buffer, ids.offset, 0); + inline for (std.enums.values(Field), 1..) |field, i| { + const view = scratch.view(field); + enc.setBuffer(view.buffer, view.offset, i); + } + enc.setValue(args, 7); + enc.dispatchThreads(.{ .width = switch (phase) { + 0 => @max(args.experts, args.padded), + 2 => 1, + else => args.rows, + } }, .{ .width = 256 }); + enc.barrier(); + } +} + +test "expert grouping bounds padding without context-sized allocation" { + const small = try Plan.init(6, 384); + try std.testing.expectEqual(@as(u32, 48), small.padded); + const full = try Plan.init(1536, 384); + try std.testing.expectEqual(@as(u32, 4224), full.padded); + try std.testing.expect(full.bytes < 64 * 1024); + try std.testing.expectError(error.InvalidExpertGrouping, Plan.init(0, 384)); + try std.testing.expectError(error.ExpertGroupingTooLarge, Plan.init(std.math.maxInt(u32), 384)); +} diff --git a/zig/src/core/gpu_counters.zig b/zig/src/core/gpu_counters.zig index 2e0b216165..72edee1343 100644 --- a/zig/src/core/gpu_counters.zig +++ b/zig/src/core/gpu_counters.zig @@ -1,4 +1,4 @@ -//! Same-command-buffer GPU timestamps, bounded resources and no per-span CPU waits. +//! Bounded same-command GPU timestamps; disabled init allocates nothing, no per-span CPU waits or CPU timing fallback. const std = @import("std"); const mtl = @import("metal"); const counters = mtl.counters; @@ -9,6 +9,8 @@ pub const max_span_capacity: usize = 65536; pub const Options = struct { enabled: bool = false, max_spans: usize = 512 }; pub const Span = struct { kind: Class = .dense, + /// Caller-owned diagnostic label; does not affect sampling or generic class aggregation. + metadata: u32 = 0, begin_timestamp: u64 = 0, end_timestamp: u64 = 0, gpu_seconds: f64 = 0, @@ -16,7 +18,7 @@ pub const Span = struct { pub const Aggregate = struct { calls: u64 = 0, gpu_seconds: f64 = 0 }; const State = enum { idle, recording, resolved, read, broken }; -/// Two reference samples convert GPU ticks to nanoseconds; never use CPU span time. +/// Apple's paired reference samples convert GPU ticks to CPU nanoseconds, not elapsed operator time. pub const Calibration = struct { before: counters.ClockSample, after: counters.ClockSample, @@ -29,7 +31,8 @@ pub const Calibration = struct { } pub fn duration(self: Calibration, begin: u64, end: u64) !f64 { - if (begin == 0 or end == 0 or begin == counters.error_value or end == counters.error_value) return error.InvalidCounterSample; + if (begin == 0 or end == 0 or begin == counters.error_value or end == counters.error_value) + return error.InvalidCounterSample; if (end < begin) return error.ReversedCounterSample; if (begin < self.before.gpu or end > self.after.gpu) return error.CounterOutsideCalibration; const ticks: f64 = @floatFromInt(end - begin); @@ -79,7 +82,7 @@ pub const Recorder = struct { calibration: ?Calibration = null, totals: [class_count]Aggregate = @splat(.{}), - /// Init-only bounded storage; disabled init allocates nothing. + /// Init-only storage, descriptors and fence; 1..65536 spans, at most 16 CPU-resolve bytes per span. pub fn init(allocator: std.mem.Allocator, device: mtl.Device, options: Options) !Recorder { var self = Recorder{ .allocator = allocator }; if (!options.enabled) return self; @@ -120,8 +123,8 @@ pub const Recorder = struct { self.state = .recording; } - /// Non-nested spans; stage mode rotates fenced encoders, requiring resource and pipeline rebinding. - pub fn beginSpan(self: *Recorder, encoder: *mtl.ComputeEncoder, kind: Class) !void { + /// No nesting; stage sampling rotates fenced serial encoders: callers must rebind and redeclare resources. + pub fn beginSpan(self: *Recorder, encoder: *mtl.ComputeEncoder, kind: Class, metadata: u32) !void { if (!self.enabled()) return; if (self.state != .recording or !self.encoder_open) return error.CounterNotRecording; if (self.active_span != null) return error.NestedCounterSpan; @@ -141,7 +144,7 @@ pub const Recorder = struct { self.encoder_open = true; resources.fence.waitCompute(encoder.*); } - self.spans[index] = .{ .kind = kind }; + self.spans[index] = .{ .kind = kind, .metadata = metadata }; self.span_count += 1; self.active_span = index; } @@ -172,7 +175,7 @@ pub const Recorder = struct { self.active_span = null; } - /// Ends the final encoder before the caller's existing commit/wait; resolution requires completion. + /// End the final encoder before existing commit/wait; resolve counters only after command completion. pub fn finishEncoding(self: *Recorder, encoder: *mtl.ComputeEncoder) !void { if (!self.enabled()) { encoder.end(); @@ -186,7 +189,7 @@ pub const Recorder = struct { self.state = .resolved; } - /// Cancels unsubmitted work, closing any surviving encoder, including after encoder creation failure. + /// Close and discard failed, unsubmitted encoding without committing; safe after encoder creation failure. pub fn cancelEncoding(self: *Recorder, encoder: *mtl.ComputeEncoder) !void { if (self.command_buffer) |cb| { if (cb.status() != .not_enqueued) return error.CounterCommandAlreadySubmitted; @@ -198,7 +201,7 @@ pub const Recorder = struct { try self.discardAfterCompletion(); } - /// No wait or fallback; results are borrowed until beginCommand, discardAfterCompletion or deinit. + /// No wait or fallback; results are borrowed until reuse/discard/deinit, errors and invalid calibration propagate. pub fn readAfterCompletion(self: *Recorder) ![]const Span { if (!self.enabled()) return &.{}; if (self.state == .read) return self.spans[0..self.span_count]; @@ -244,7 +247,7 @@ pub const Recorder = struct { return self.totals; } - /// Discards closed, unsubmitted or completed recordings; in-flight resources are never reused. + /// Discard completed/unsubmitted recordings after closing encoders; in-flight reuse is rejected, never waited. pub fn discardAfterCompletion(self: *Recorder) !void { if (self.encoder_open) return error.CounterEncoderStillOpen; if (self.command_buffer) |cb| { @@ -288,14 +291,14 @@ test "disabled recorder allocates nothing and never touches a device or encoder var recorder = try Recorder.init(std.testing.failing_allocator, undefined, .{ .enabled = false }); defer recorder.deinit() catch unreachable; var encoder: mtl.ComputeEncoder = undefined; - try recorder.beginSpan(&encoder, .attention); + try recorder.beginSpan(&encoder, .attention, 0); try recorder.endSpan(&encoder); try std.testing.expect(!recorder.enabled()); try std.testing.expectEqual(@as(usize, 0), (try recorder.readAfterCompletion()).len); for (recorder.aggregates()) |aggregate| try std.testing.expectEqual(@as(u64, 0), aggregate.calls); } -test "calibration rejects missing samples, both reversed clocks and both range boundaries" { +test "calibration rejects missing samples and both clock and range boundaries" { const c = Calibration{ .before = .{ .cpu = 1000, .gpu = 100 }, .after = .{ .cpu = 5000, .gpu = 300 } }; try std.testing.expectError(error.InvalidCounterSample, c.duration(0, 200)); try std.testing.expectError(error.InvalidCounterSample, c.duration(100, counters.error_value)); @@ -308,12 +311,45 @@ test "calibration rejects missing samples, both reversed clocks and both range b } test "enabled capacity validation occurs before any device access" { - try std.testing.expectError(error.InvalidSpanCapacity, Recorder.init(std.testing.failing_allocator, undefined, .{ - .enabled = true, - .max_spans = 0, - })); - try std.testing.expectError(error.InvalidSpanCapacity, Recorder.init(std.testing.failing_allocator, undefined, .{ - .enabled = true, - .max_spans = max_span_capacity + 1, - })); + try std.testing.expectError(error.InvalidSpanCapacity, Recorder.init(std.testing.failing_allocator, undefined, .{ .enabled = true, .max_spans = 0 })); + try std.testing.expectError(error.InvalidSpanCapacity, Recorder.init(std.testing.failing_allocator, undefined, .{ .enabled = true, .max_spans = max_span_capacity + 1 })); +} + +test "counter ownership rejects open and in-flight reuse without a CPU span wait" { + const pool = mtl.objc.Pool.push(); + defer pool.pop(); + const device = mtl.Device.init() catch return error.SkipZigTest; + defer device.deinit(); + if (counters.query(device).mode() == .unsupported) return error.SkipZigTest; + const queue = try device.queue(); + defer queue.deinit(); + const gate = try device.sharedEvent(); + defer gate.deinit(); + var recorder = try Recorder.init(std.testing.allocator, device, .{ .enabled = true, .max_spans = 1 }); + defer recorder.deinit() catch unreachable; + const cb = queue.commandBuffer(); + cb.waitFor(gate, 1); + var encoder = cb.compute(.serial); + try recorder.beginCommand(cb); + var submitted = false; + defer { + if (submitted) { + gate.set(1); + cb.wait(); + recorder.discardAfterCompletion() catch unreachable; + } else recorder.cancelEncoding(&encoder) catch unreachable; + } + try std.testing.expectError(error.CounterEncoderStillOpen, recorder.deinit()); + try recorder.beginSpan(&encoder, .dense, 42); + try std.testing.expectError(error.NestedCounterSpan, recorder.beginSpan(&encoder, .copy, 43)); + try std.testing.expectError(error.UnclosedCounterSpan, recorder.finishEncoding(&encoder)); + try recorder.endSpan(&encoder); + try std.testing.expectError(error.CounterSpanCapacityExceeded, recorder.beginSpan(&encoder, .copy, 43)); + try recorder.finishEncoding(&encoder); + cb.commit(); + submitted = true; + try std.testing.expectError(error.CounterCommandNotCompleted, recorder.readAfterCompletion()); + try std.testing.expectError(error.CounterRecordingInFlight, recorder.beginCommand(cb)); + try std.testing.expectError(error.CounterCommandNotCompleted, recorder.discardAfterCompletion()); + try std.testing.expectError(error.CounterCommandNotCompleted, recorder.deinit()); } diff --git a/zig/src/core/tokenizer/nfkd_data.zig b/zig/src/core/tokenizer/nfkd_data.zig new file mode 100644 index 0000000000..38864b3c76 --- /dev/null +++ b/zig/src/core/tokenizer/nfkd_data.zig @@ -0,0 +1,24457 @@ +// Generated by tools/zig/nfkd_tables.py from the Unicode 16.0.0 character database; do not edit. +pub const version = "16.0.0"; + +pub const Decomp = struct { cp: u21, start: u32, len: u8 }; + +// All NFKD sequences concatenated, indexed by Decomp.start/.len. +pub const sequences = [_]u21{ + 0x0020, 0x0020, 0x0308, 0x0061, 0x0020, 0x0304, 0x0032, 0x0033, + 0x0020, 0x0301, 0x03BC, 0x0020, 0x0327, 0x0031, 0x006F, 0x0031, + 0x2044, 0x0034, 0x0031, 0x2044, 0x0032, 0x0033, 0x2044, 0x0034, + 0x0041, 0x0300, 0x0041, 0x0301, 0x0041, 0x0302, 0x0041, 0x0303, + 0x0041, 0x0308, 0x0041, 0x030A, 0x0043, 0x0327, 0x0045, 0x0300, + 0x0045, 0x0301, 0x0045, 0x0302, 0x0045, 0x0308, 0x0049, 0x0300, + 0x0049, 0x0301, 0x0049, 0x0302, 0x0049, 0x0308, 0x004E, 0x0303, + 0x004F, 0x0300, 0x004F, 0x0301, 0x004F, 0x0302, 0x004F, 0x0303, + 0x004F, 0x0308, 0x0055, 0x0300, 0x0055, 0x0301, 0x0055, 0x0302, + 0x0055, 0x0308, 0x0059, 0x0301, 0x0061, 0x0300, 0x0061, 0x0301, + 0x0061, 0x0302, 0x0061, 0x0303, 0x0061, 0x0308, 0x0061, 0x030A, + 0x0063, 0x0327, 0x0065, 0x0300, 0x0065, 0x0301, 0x0065, 0x0302, + 0x0065, 0x0308, 0x0069, 0x0300, 0x0069, 0x0301, 0x0069, 0x0302, + 0x0069, 0x0308, 0x006E, 0x0303, 0x006F, 0x0300, 0x006F, 0x0301, + 0x006F, 0x0302, 0x006F, 0x0303, 0x006F, 0x0308, 0x0075, 0x0300, + 0x0075, 0x0301, 0x0075, 0x0302, 0x0075, 0x0308, 0x0079, 0x0301, + 0x0079, 0x0308, 0x0041, 0x0304, 0x0061, 0x0304, 0x0041, 0x0306, + 0x0061, 0x0306, 0x0041, 0x0328, 0x0061, 0x0328, 0x0043, 0x0301, + 0x0063, 0x0301, 0x0043, 0x0302, 0x0063, 0x0302, 0x0043, 0x0307, + 0x0063, 0x0307, 0x0043, 0x030C, 0x0063, 0x030C, 0x0044, 0x030C, + 0x0064, 0x030C, 0x0045, 0x0304, 0x0065, 0x0304, 0x0045, 0x0306, + 0x0065, 0x0306, 0x0045, 0x0307, 0x0065, 0x0307, 0x0045, 0x0328, + 0x0065, 0x0328, 0x0045, 0x030C, 0x0065, 0x030C, 0x0047, 0x0302, + 0x0067, 0x0302, 0x0047, 0x0306, 0x0067, 0x0306, 0x0047, 0x0307, + 0x0067, 0x0307, 0x0047, 0x0327, 0x0067, 0x0327, 0x0048, 0x0302, + 0x0068, 0x0302, 0x0049, 0x0303, 0x0069, 0x0303, 0x0049, 0x0304, + 0x0069, 0x0304, 0x0049, 0x0306, 0x0069, 0x0306, 0x0049, 0x0328, + 0x0069, 0x0328, 0x0049, 0x0307, 0x0049, 0x004A, 0x0069, 0x006A, + 0x004A, 0x0302, 0x006A, 0x0302, 0x004B, 0x0327, 0x006B, 0x0327, + 0x004C, 0x0301, 0x006C, 0x0301, 0x004C, 0x0327, 0x006C, 0x0327, + 0x004C, 0x030C, 0x006C, 0x030C, 0x004C, 0x00B7, 0x006C, 0x00B7, + 0x004E, 0x0301, 0x006E, 0x0301, 0x004E, 0x0327, 0x006E, 0x0327, + 0x004E, 0x030C, 0x006E, 0x030C, 0x02BC, 0x006E, 0x004F, 0x0304, + 0x006F, 0x0304, 0x004F, 0x0306, 0x006F, 0x0306, 0x004F, 0x030B, + 0x006F, 0x030B, 0x0052, 0x0301, 0x0072, 0x0301, 0x0052, 0x0327, + 0x0072, 0x0327, 0x0052, 0x030C, 0x0072, 0x030C, 0x0053, 0x0301, + 0x0073, 0x0301, 0x0053, 0x0302, 0x0073, 0x0302, 0x0053, 0x0327, + 0x0073, 0x0327, 0x0053, 0x030C, 0x0073, 0x030C, 0x0054, 0x0327, + 0x0074, 0x0327, 0x0054, 0x030C, 0x0074, 0x030C, 0x0055, 0x0303, + 0x0075, 0x0303, 0x0055, 0x0304, 0x0075, 0x0304, 0x0055, 0x0306, + 0x0075, 0x0306, 0x0055, 0x030A, 0x0075, 0x030A, 0x0055, 0x030B, + 0x0075, 0x030B, 0x0055, 0x0328, 0x0075, 0x0328, 0x0057, 0x0302, + 0x0077, 0x0302, 0x0059, 0x0302, 0x0079, 0x0302, 0x0059, 0x0308, + 0x005A, 0x0301, 0x007A, 0x0301, 0x005A, 0x0307, 0x007A, 0x0307, + 0x005A, 0x030C, 0x007A, 0x030C, 0x0073, 0x004F, 0x031B, 0x006F, + 0x031B, 0x0055, 0x031B, 0x0075, 0x031B, 0x0044, 0x005A, 0x030C, + 0x0044, 0x007A, 0x030C, 0x0064, 0x007A, 0x030C, 0x004C, 0x004A, + 0x004C, 0x006A, 0x006C, 0x006A, 0x004E, 0x004A, 0x004E, 0x006A, + 0x006E, 0x006A, 0x0041, 0x030C, 0x0061, 0x030C, 0x0049, 0x030C, + 0x0069, 0x030C, 0x004F, 0x030C, 0x006F, 0x030C, 0x0055, 0x030C, + 0x0075, 0x030C, 0x0055, 0x0308, 0x0304, 0x0075, 0x0308, 0x0304, + 0x0055, 0x0308, 0x0301, 0x0075, 0x0308, 0x0301, 0x0055, 0x0308, + 0x030C, 0x0075, 0x0308, 0x030C, 0x0055, 0x0308, 0x0300, 0x0075, + 0x0308, 0x0300, 0x0041, 0x0308, 0x0304, 0x0061, 0x0308, 0x0304, + 0x0041, 0x0307, 0x0304, 0x0061, 0x0307, 0x0304, 0x00C6, 0x0304, + 0x00E6, 0x0304, 0x0047, 0x030C, 0x0067, 0x030C, 0x004B, 0x030C, + 0x006B, 0x030C, 0x004F, 0x0328, 0x006F, 0x0328, 0x004F, 0x0328, + 0x0304, 0x006F, 0x0328, 0x0304, 0x01B7, 0x030C, 0x0292, 0x030C, + 0x006A, 0x030C, 0x0044, 0x005A, 0x0044, 0x007A, 0x0064, 0x007A, + 0x0047, 0x0301, 0x0067, 0x0301, 0x004E, 0x0300, 0x006E, 0x0300, + 0x0041, 0x030A, 0x0301, 0x0061, 0x030A, 0x0301, 0x00C6, 0x0301, + 0x00E6, 0x0301, 0x00D8, 0x0301, 0x00F8, 0x0301, 0x0041, 0x030F, + 0x0061, 0x030F, 0x0041, 0x0311, 0x0061, 0x0311, 0x0045, 0x030F, + 0x0065, 0x030F, 0x0045, 0x0311, 0x0065, 0x0311, 0x0049, 0x030F, + 0x0069, 0x030F, 0x0049, 0x0311, 0x0069, 0x0311, 0x004F, 0x030F, + 0x006F, 0x030F, 0x004F, 0x0311, 0x006F, 0x0311, 0x0052, 0x030F, + 0x0072, 0x030F, 0x0052, 0x0311, 0x0072, 0x0311, 0x0055, 0x030F, + 0x0075, 0x030F, 0x0055, 0x0311, 0x0075, 0x0311, 0x0053, 0x0326, + 0x0073, 0x0326, 0x0054, 0x0326, 0x0074, 0x0326, 0x0048, 0x030C, + 0x0068, 0x030C, 0x0041, 0x0307, 0x0061, 0x0307, 0x0045, 0x0327, + 0x0065, 0x0327, 0x004F, 0x0308, 0x0304, 0x006F, 0x0308, 0x0304, + 0x004F, 0x0303, 0x0304, 0x006F, 0x0303, 0x0304, 0x004F, 0x0307, + 0x006F, 0x0307, 0x004F, 0x0307, 0x0304, 0x006F, 0x0307, 0x0304, + 0x0059, 0x0304, 0x0079, 0x0304, 0x0068, 0x0266, 0x006A, 0x0072, + 0x0279, 0x027B, 0x0281, 0x0077, 0x0079, 0x0020, 0x0306, 0x0020, + 0x0307, 0x0020, 0x030A, 0x0020, 0x0328, 0x0020, 0x0303, 0x0020, + 0x030B, 0x0263, 0x006C, 0x0073, 0x0078, 0x0295, 0x0300, 0x0301, + 0x0313, 0x0308, 0x0301, 0x02B9, 0x0020, 0x0345, 0x003B, 0x0020, + 0x0301, 0x0020, 0x0308, 0x0301, 0x0391, 0x0301, 0x00B7, 0x0395, + 0x0301, 0x0397, 0x0301, 0x0399, 0x0301, 0x039F, 0x0301, 0x03A5, + 0x0301, 0x03A9, 0x0301, 0x03B9, 0x0308, 0x0301, 0x0399, 0x0308, + 0x03A5, 0x0308, 0x03B1, 0x0301, 0x03B5, 0x0301, 0x03B7, 0x0301, + 0x03B9, 0x0301, 0x03C5, 0x0308, 0x0301, 0x03B9, 0x0308, 0x03C5, + 0x0308, 0x03BF, 0x0301, 0x03C5, 0x0301, 0x03C9, 0x0301, 0x03B2, + 0x03B8, 0x03A5, 0x03A5, 0x0301, 0x03A5, 0x0308, 0x03C6, 0x03C0, + 0x03BA, 0x03C1, 0x03C2, 0x0398, 0x03B5, 0x03A3, 0x0415, 0x0300, + 0x0415, 0x0308, 0x0413, 0x0301, 0x0406, 0x0308, 0x041A, 0x0301, + 0x0418, 0x0300, 0x0423, 0x0306, 0x0418, 0x0306, 0x0438, 0x0306, + 0x0435, 0x0300, 0x0435, 0x0308, 0x0433, 0x0301, 0x0456, 0x0308, + 0x043A, 0x0301, 0x0438, 0x0300, 0x0443, 0x0306, 0x0474, 0x030F, + 0x0475, 0x030F, 0x0416, 0x0306, 0x0436, 0x0306, 0x0410, 0x0306, + 0x0430, 0x0306, 0x0410, 0x0308, 0x0430, 0x0308, 0x0415, 0x0306, + 0x0435, 0x0306, 0x04D8, 0x0308, 0x04D9, 0x0308, 0x0416, 0x0308, + 0x0436, 0x0308, 0x0417, 0x0308, 0x0437, 0x0308, 0x0418, 0x0304, + 0x0438, 0x0304, 0x0418, 0x0308, 0x0438, 0x0308, 0x041E, 0x0308, + 0x043E, 0x0308, 0x04E8, 0x0308, 0x04E9, 0x0308, 0x042D, 0x0308, + 0x044D, 0x0308, 0x0423, 0x0304, 0x0443, 0x0304, 0x0423, 0x0308, + 0x0443, 0x0308, 0x0423, 0x030B, 0x0443, 0x030B, 0x0427, 0x0308, + 0x0447, 0x0308, 0x042B, 0x0308, 0x044B, 0x0308, 0x0565, 0x0582, + 0x0627, 0x0653, 0x0627, 0x0654, 0x0648, 0x0654, 0x0627, 0x0655, + 0x064A, 0x0654, 0x0627, 0x0674, 0x0648, 0x0674, 0x06C7, 0x0674, + 0x064A, 0x0674, 0x06D5, 0x0654, 0x06C1, 0x0654, 0x06D2, 0x0654, + 0x0928, 0x093C, 0x0930, 0x093C, 0x0933, 0x093C, 0x0915, 0x093C, + 0x0916, 0x093C, 0x0917, 0x093C, 0x091C, 0x093C, 0x0921, 0x093C, + 0x0922, 0x093C, 0x092B, 0x093C, 0x092F, 0x093C, 0x09C7, 0x09BE, + 0x09C7, 0x09D7, 0x09A1, 0x09BC, 0x09A2, 0x09BC, 0x09AF, 0x09BC, + 0x0A32, 0x0A3C, 0x0A38, 0x0A3C, 0x0A16, 0x0A3C, 0x0A17, 0x0A3C, + 0x0A1C, 0x0A3C, 0x0A2B, 0x0A3C, 0x0B47, 0x0B56, 0x0B47, 0x0B3E, + 0x0B47, 0x0B57, 0x0B21, 0x0B3C, 0x0B22, 0x0B3C, 0x0B92, 0x0BD7, + 0x0BC6, 0x0BBE, 0x0BC7, 0x0BBE, 0x0BC6, 0x0BD7, 0x0C46, 0x0C56, + 0x0CBF, 0x0CD5, 0x0CC6, 0x0CD5, 0x0CC6, 0x0CD6, 0x0CC6, 0x0CC2, + 0x0CC6, 0x0CC2, 0x0CD5, 0x0D46, 0x0D3E, 0x0D47, 0x0D3E, 0x0D46, + 0x0D57, 0x0DD9, 0x0DCA, 0x0DD9, 0x0DCF, 0x0DD9, 0x0DCF, 0x0DCA, + 0x0DD9, 0x0DDF, 0x0E4D, 0x0E32, 0x0ECD, 0x0EB2, 0x0EAB, 0x0E99, + 0x0EAB, 0x0EA1, 0x0F0B, 0x0F42, 0x0FB7, 0x0F4C, 0x0FB7, 0x0F51, + 0x0FB7, 0x0F56, 0x0FB7, 0x0F5B, 0x0FB7, 0x0F40, 0x0FB5, 0x0F71, + 0x0F72, 0x0F71, 0x0F74, 0x0FB2, 0x0F80, 0x0FB2, 0x0F71, 0x0F80, + 0x0FB3, 0x0F80, 0x0FB3, 0x0F71, 0x0F80, 0x0F71, 0x0F80, 0x0F92, + 0x0FB7, 0x0F9C, 0x0FB7, 0x0FA1, 0x0FB7, 0x0FA6, 0x0FB7, 0x0FAB, + 0x0FB7, 0x0F90, 0x0FB5, 0x1025, 0x102E, 0x10DC, 0x1B05, 0x1B35, + 0x1B07, 0x1B35, 0x1B09, 0x1B35, 0x1B0B, 0x1B35, 0x1B0D, 0x1B35, + 0x1B11, 0x1B35, 0x1B3A, 0x1B35, 0x1B3C, 0x1B35, 0x1B3E, 0x1B35, + 0x1B3F, 0x1B35, 0x1B42, 0x1B35, 0x0041, 0x00C6, 0x0042, 0x0044, + 0x0045, 0x018E, 0x0047, 0x0048, 0x0049, 0x004A, 0x004B, 0x004C, + 0x004D, 0x004E, 0x004F, 0x0222, 0x0050, 0x0052, 0x0054, 0x0055, + 0x0057, 0x0061, 0x0250, 0x0251, 0x1D02, 0x0062, 0x0064, 0x0065, + 0x0259, 0x025B, 0x025C, 0x0067, 0x006B, 0x006D, 0x014B, 0x006F, + 0x0254, 0x1D16, 0x1D17, 0x0070, 0x0074, 0x0075, 0x1D1D, 0x026F, + 0x0076, 0x1D25, 0x03B2, 0x03B3, 0x03B4, 0x03C6, 0x03C7, 0x0069, + 0x0072, 0x0075, 0x0076, 0x03B2, 0x03B3, 0x03C1, 0x03C6, 0x03C7, + 0x043D, 0x0252, 0x0063, 0x0255, 0x00F0, 0x025C, 0x0066, 0x025F, + 0x0261, 0x0265, 0x0268, 0x0269, 0x026A, 0x1D7B, 0x029D, 0x026D, + 0x1D85, 0x029F, 0x0271, 0x0270, 0x0272, 0x0273, 0x0274, 0x0275, + 0x0278, 0x0282, 0x0283, 0x01AB, 0x0289, 0x028A, 0x1D1C, 0x028B, + 0x028C, 0x007A, 0x0290, 0x0291, 0x0292, 0x03B8, 0x0041, 0x0325, + 0x0061, 0x0325, 0x0042, 0x0307, 0x0062, 0x0307, 0x0042, 0x0323, + 0x0062, 0x0323, 0x0042, 0x0331, 0x0062, 0x0331, 0x0043, 0x0327, + 0x0301, 0x0063, 0x0327, 0x0301, 0x0044, 0x0307, 0x0064, 0x0307, + 0x0044, 0x0323, 0x0064, 0x0323, 0x0044, 0x0331, 0x0064, 0x0331, + 0x0044, 0x0327, 0x0064, 0x0327, 0x0044, 0x032D, 0x0064, 0x032D, + 0x0045, 0x0304, 0x0300, 0x0065, 0x0304, 0x0300, 0x0045, 0x0304, + 0x0301, 0x0065, 0x0304, 0x0301, 0x0045, 0x032D, 0x0065, 0x032D, + 0x0045, 0x0330, 0x0065, 0x0330, 0x0045, 0x0327, 0x0306, 0x0065, + 0x0327, 0x0306, 0x0046, 0x0307, 0x0066, 0x0307, 0x0047, 0x0304, + 0x0067, 0x0304, 0x0048, 0x0307, 0x0068, 0x0307, 0x0048, 0x0323, + 0x0068, 0x0323, 0x0048, 0x0308, 0x0068, 0x0308, 0x0048, 0x0327, + 0x0068, 0x0327, 0x0048, 0x032E, 0x0068, 0x032E, 0x0049, 0x0330, + 0x0069, 0x0330, 0x0049, 0x0308, 0x0301, 0x0069, 0x0308, 0x0301, + 0x004B, 0x0301, 0x006B, 0x0301, 0x004B, 0x0323, 0x006B, 0x0323, + 0x004B, 0x0331, 0x006B, 0x0331, 0x004C, 0x0323, 0x006C, 0x0323, + 0x004C, 0x0323, 0x0304, 0x006C, 0x0323, 0x0304, 0x004C, 0x0331, + 0x006C, 0x0331, 0x004C, 0x032D, 0x006C, 0x032D, 0x004D, 0x0301, + 0x006D, 0x0301, 0x004D, 0x0307, 0x006D, 0x0307, 0x004D, 0x0323, + 0x006D, 0x0323, 0x004E, 0x0307, 0x006E, 0x0307, 0x004E, 0x0323, + 0x006E, 0x0323, 0x004E, 0x0331, 0x006E, 0x0331, 0x004E, 0x032D, + 0x006E, 0x032D, 0x004F, 0x0303, 0x0301, 0x006F, 0x0303, 0x0301, + 0x004F, 0x0303, 0x0308, 0x006F, 0x0303, 0x0308, 0x004F, 0x0304, + 0x0300, 0x006F, 0x0304, 0x0300, 0x004F, 0x0304, 0x0301, 0x006F, + 0x0304, 0x0301, 0x0050, 0x0301, 0x0070, 0x0301, 0x0050, 0x0307, + 0x0070, 0x0307, 0x0052, 0x0307, 0x0072, 0x0307, 0x0052, 0x0323, + 0x0072, 0x0323, 0x0052, 0x0323, 0x0304, 0x0072, 0x0323, 0x0304, + 0x0052, 0x0331, 0x0072, 0x0331, 0x0053, 0x0307, 0x0073, 0x0307, + 0x0053, 0x0323, 0x0073, 0x0323, 0x0053, 0x0301, 0x0307, 0x0073, + 0x0301, 0x0307, 0x0053, 0x030C, 0x0307, 0x0073, 0x030C, 0x0307, + 0x0053, 0x0323, 0x0307, 0x0073, 0x0323, 0x0307, 0x0054, 0x0307, + 0x0074, 0x0307, 0x0054, 0x0323, 0x0074, 0x0323, 0x0054, 0x0331, + 0x0074, 0x0331, 0x0054, 0x032D, 0x0074, 0x032D, 0x0055, 0x0324, + 0x0075, 0x0324, 0x0055, 0x0330, 0x0075, 0x0330, 0x0055, 0x032D, + 0x0075, 0x032D, 0x0055, 0x0303, 0x0301, 0x0075, 0x0303, 0x0301, + 0x0055, 0x0304, 0x0308, 0x0075, 0x0304, 0x0308, 0x0056, 0x0303, + 0x0076, 0x0303, 0x0056, 0x0323, 0x0076, 0x0323, 0x0057, 0x0300, + 0x0077, 0x0300, 0x0057, 0x0301, 0x0077, 0x0301, 0x0057, 0x0308, + 0x0077, 0x0308, 0x0057, 0x0307, 0x0077, 0x0307, 0x0057, 0x0323, + 0x0077, 0x0323, 0x0058, 0x0307, 0x0078, 0x0307, 0x0058, 0x0308, + 0x0078, 0x0308, 0x0059, 0x0307, 0x0079, 0x0307, 0x005A, 0x0302, + 0x007A, 0x0302, 0x005A, 0x0323, 0x007A, 0x0323, 0x005A, 0x0331, + 0x007A, 0x0331, 0x0068, 0x0331, 0x0074, 0x0308, 0x0077, 0x030A, + 0x0079, 0x030A, 0x0061, 0x02BE, 0x0073, 0x0307, 0x0041, 0x0323, + 0x0061, 0x0323, 0x0041, 0x0309, 0x0061, 0x0309, 0x0041, 0x0302, + 0x0301, 0x0061, 0x0302, 0x0301, 0x0041, 0x0302, 0x0300, 0x0061, + 0x0302, 0x0300, 0x0041, 0x0302, 0x0309, 0x0061, 0x0302, 0x0309, + 0x0041, 0x0302, 0x0303, 0x0061, 0x0302, 0x0303, 0x0041, 0x0323, + 0x0302, 0x0061, 0x0323, 0x0302, 0x0041, 0x0306, 0x0301, 0x0061, + 0x0306, 0x0301, 0x0041, 0x0306, 0x0300, 0x0061, 0x0306, 0x0300, + 0x0041, 0x0306, 0x0309, 0x0061, 0x0306, 0x0309, 0x0041, 0x0306, + 0x0303, 0x0061, 0x0306, 0x0303, 0x0041, 0x0323, 0x0306, 0x0061, + 0x0323, 0x0306, 0x0045, 0x0323, 0x0065, 0x0323, 0x0045, 0x0309, + 0x0065, 0x0309, 0x0045, 0x0303, 0x0065, 0x0303, 0x0045, 0x0302, + 0x0301, 0x0065, 0x0302, 0x0301, 0x0045, 0x0302, 0x0300, 0x0065, + 0x0302, 0x0300, 0x0045, 0x0302, 0x0309, 0x0065, 0x0302, 0x0309, + 0x0045, 0x0302, 0x0303, 0x0065, 0x0302, 0x0303, 0x0045, 0x0323, + 0x0302, 0x0065, 0x0323, 0x0302, 0x0049, 0x0309, 0x0069, 0x0309, + 0x0049, 0x0323, 0x0069, 0x0323, 0x004F, 0x0323, 0x006F, 0x0323, + 0x004F, 0x0309, 0x006F, 0x0309, 0x004F, 0x0302, 0x0301, 0x006F, + 0x0302, 0x0301, 0x004F, 0x0302, 0x0300, 0x006F, 0x0302, 0x0300, + 0x004F, 0x0302, 0x0309, 0x006F, 0x0302, 0x0309, 0x004F, 0x0302, + 0x0303, 0x006F, 0x0302, 0x0303, 0x004F, 0x0323, 0x0302, 0x006F, + 0x0323, 0x0302, 0x004F, 0x031B, 0x0301, 0x006F, 0x031B, 0x0301, + 0x004F, 0x031B, 0x0300, 0x006F, 0x031B, 0x0300, 0x004F, 0x031B, + 0x0309, 0x006F, 0x031B, 0x0309, 0x004F, 0x031B, 0x0303, 0x006F, + 0x031B, 0x0303, 0x004F, 0x031B, 0x0323, 0x006F, 0x031B, 0x0323, + 0x0055, 0x0323, 0x0075, 0x0323, 0x0055, 0x0309, 0x0075, 0x0309, + 0x0055, 0x031B, 0x0301, 0x0075, 0x031B, 0x0301, 0x0055, 0x031B, + 0x0300, 0x0075, 0x031B, 0x0300, 0x0055, 0x031B, 0x0309, 0x0075, + 0x031B, 0x0309, 0x0055, 0x031B, 0x0303, 0x0075, 0x031B, 0x0303, + 0x0055, 0x031B, 0x0323, 0x0075, 0x031B, 0x0323, 0x0059, 0x0300, + 0x0079, 0x0300, 0x0059, 0x0323, 0x0079, 0x0323, 0x0059, 0x0309, + 0x0079, 0x0309, 0x0059, 0x0303, 0x0079, 0x0303, 0x03B1, 0x0313, + 0x03B1, 0x0314, 0x03B1, 0x0313, 0x0300, 0x03B1, 0x0314, 0x0300, + 0x03B1, 0x0313, 0x0301, 0x03B1, 0x0314, 0x0301, 0x03B1, 0x0313, + 0x0342, 0x03B1, 0x0314, 0x0342, 0x0391, 0x0313, 0x0391, 0x0314, + 0x0391, 0x0313, 0x0300, 0x0391, 0x0314, 0x0300, 0x0391, 0x0313, + 0x0301, 0x0391, 0x0314, 0x0301, 0x0391, 0x0313, 0x0342, 0x0391, + 0x0314, 0x0342, 0x03B5, 0x0313, 0x03B5, 0x0314, 0x03B5, 0x0313, + 0x0300, 0x03B5, 0x0314, 0x0300, 0x03B5, 0x0313, 0x0301, 0x03B5, + 0x0314, 0x0301, 0x0395, 0x0313, 0x0395, 0x0314, 0x0395, 0x0313, + 0x0300, 0x0395, 0x0314, 0x0300, 0x0395, 0x0313, 0x0301, 0x0395, + 0x0314, 0x0301, 0x03B7, 0x0313, 0x03B7, 0x0314, 0x03B7, 0x0313, + 0x0300, 0x03B7, 0x0314, 0x0300, 0x03B7, 0x0313, 0x0301, 0x03B7, + 0x0314, 0x0301, 0x03B7, 0x0313, 0x0342, 0x03B7, 0x0314, 0x0342, + 0x0397, 0x0313, 0x0397, 0x0314, 0x0397, 0x0313, 0x0300, 0x0397, + 0x0314, 0x0300, 0x0397, 0x0313, 0x0301, 0x0397, 0x0314, 0x0301, + 0x0397, 0x0313, 0x0342, 0x0397, 0x0314, 0x0342, 0x03B9, 0x0313, + 0x03B9, 0x0314, 0x03B9, 0x0313, 0x0300, 0x03B9, 0x0314, 0x0300, + 0x03B9, 0x0313, 0x0301, 0x03B9, 0x0314, 0x0301, 0x03B9, 0x0313, + 0x0342, 0x03B9, 0x0314, 0x0342, 0x0399, 0x0313, 0x0399, 0x0314, + 0x0399, 0x0313, 0x0300, 0x0399, 0x0314, 0x0300, 0x0399, 0x0313, + 0x0301, 0x0399, 0x0314, 0x0301, 0x0399, 0x0313, 0x0342, 0x0399, + 0x0314, 0x0342, 0x03BF, 0x0313, 0x03BF, 0x0314, 0x03BF, 0x0313, + 0x0300, 0x03BF, 0x0314, 0x0300, 0x03BF, 0x0313, 0x0301, 0x03BF, + 0x0314, 0x0301, 0x039F, 0x0313, 0x039F, 0x0314, 0x039F, 0x0313, + 0x0300, 0x039F, 0x0314, 0x0300, 0x039F, 0x0313, 0x0301, 0x039F, + 0x0314, 0x0301, 0x03C5, 0x0313, 0x03C5, 0x0314, 0x03C5, 0x0313, + 0x0300, 0x03C5, 0x0314, 0x0300, 0x03C5, 0x0313, 0x0301, 0x03C5, + 0x0314, 0x0301, 0x03C5, 0x0313, 0x0342, 0x03C5, 0x0314, 0x0342, + 0x03A5, 0x0314, 0x03A5, 0x0314, 0x0300, 0x03A5, 0x0314, 0x0301, + 0x03A5, 0x0314, 0x0342, 0x03C9, 0x0313, 0x03C9, 0x0314, 0x03C9, + 0x0313, 0x0300, 0x03C9, 0x0314, 0x0300, 0x03C9, 0x0313, 0x0301, + 0x03C9, 0x0314, 0x0301, 0x03C9, 0x0313, 0x0342, 0x03C9, 0x0314, + 0x0342, 0x03A9, 0x0313, 0x03A9, 0x0314, 0x03A9, 0x0313, 0x0300, + 0x03A9, 0x0314, 0x0300, 0x03A9, 0x0313, 0x0301, 0x03A9, 0x0314, + 0x0301, 0x03A9, 0x0313, 0x0342, 0x03A9, 0x0314, 0x0342, 0x03B1, + 0x0300, 0x03B1, 0x0301, 0x03B5, 0x0300, 0x03B5, 0x0301, 0x03B7, + 0x0300, 0x03B7, 0x0301, 0x03B9, 0x0300, 0x03B9, 0x0301, 0x03BF, + 0x0300, 0x03BF, 0x0301, 0x03C5, 0x0300, 0x03C5, 0x0301, 0x03C9, + 0x0300, 0x03C9, 0x0301, 0x03B1, 0x0313, 0x0345, 0x03B1, 0x0314, + 0x0345, 0x03B1, 0x0313, 0x0300, 0x0345, 0x03B1, 0x0314, 0x0300, + 0x0345, 0x03B1, 0x0313, 0x0301, 0x0345, 0x03B1, 0x0314, 0x0301, + 0x0345, 0x03B1, 0x0313, 0x0342, 0x0345, 0x03B1, 0x0314, 0x0342, + 0x0345, 0x0391, 0x0313, 0x0345, 0x0391, 0x0314, 0x0345, 0x0391, + 0x0313, 0x0300, 0x0345, 0x0391, 0x0314, 0x0300, 0x0345, 0x0391, + 0x0313, 0x0301, 0x0345, 0x0391, 0x0314, 0x0301, 0x0345, 0x0391, + 0x0313, 0x0342, 0x0345, 0x0391, 0x0314, 0x0342, 0x0345, 0x03B7, + 0x0313, 0x0345, 0x03B7, 0x0314, 0x0345, 0x03B7, 0x0313, 0x0300, + 0x0345, 0x03B7, 0x0314, 0x0300, 0x0345, 0x03B7, 0x0313, 0x0301, + 0x0345, 0x03B7, 0x0314, 0x0301, 0x0345, 0x03B7, 0x0313, 0x0342, + 0x0345, 0x03B7, 0x0314, 0x0342, 0x0345, 0x0397, 0x0313, 0x0345, + 0x0397, 0x0314, 0x0345, 0x0397, 0x0313, 0x0300, 0x0345, 0x0397, + 0x0314, 0x0300, 0x0345, 0x0397, 0x0313, 0x0301, 0x0345, 0x0397, + 0x0314, 0x0301, 0x0345, 0x0397, 0x0313, 0x0342, 0x0345, 0x0397, + 0x0314, 0x0342, 0x0345, 0x03C9, 0x0313, 0x0345, 0x03C9, 0x0314, + 0x0345, 0x03C9, 0x0313, 0x0300, 0x0345, 0x03C9, 0x0314, 0x0300, + 0x0345, 0x03C9, 0x0313, 0x0301, 0x0345, 0x03C9, 0x0314, 0x0301, + 0x0345, 0x03C9, 0x0313, 0x0342, 0x0345, 0x03C9, 0x0314, 0x0342, + 0x0345, 0x03A9, 0x0313, 0x0345, 0x03A9, 0x0314, 0x0345, 0x03A9, + 0x0313, 0x0300, 0x0345, 0x03A9, 0x0314, 0x0300, 0x0345, 0x03A9, + 0x0313, 0x0301, 0x0345, 0x03A9, 0x0314, 0x0301, 0x0345, 0x03A9, + 0x0313, 0x0342, 0x0345, 0x03A9, 0x0314, 0x0342, 0x0345, 0x03B1, + 0x0306, 0x03B1, 0x0304, 0x03B1, 0x0300, 0x0345, 0x03B1, 0x0345, + 0x03B1, 0x0301, 0x0345, 0x03B1, 0x0342, 0x03B1, 0x0342, 0x0345, + 0x0391, 0x0306, 0x0391, 0x0304, 0x0391, 0x0300, 0x0391, 0x0301, + 0x0391, 0x0345, 0x0020, 0x0313, 0x03B9, 0x0020, 0x0313, 0x0020, + 0x0342, 0x0020, 0x0308, 0x0342, 0x03B7, 0x0300, 0x0345, 0x03B7, + 0x0345, 0x03B7, 0x0301, 0x0345, 0x03B7, 0x0342, 0x03B7, 0x0342, + 0x0345, 0x0395, 0x0300, 0x0395, 0x0301, 0x0397, 0x0300, 0x0397, + 0x0301, 0x0397, 0x0345, 0x0020, 0x0313, 0x0300, 0x0020, 0x0313, + 0x0301, 0x0020, 0x0313, 0x0342, 0x03B9, 0x0306, 0x03B9, 0x0304, + 0x03B9, 0x0308, 0x0300, 0x03B9, 0x0308, 0x0301, 0x03B9, 0x0342, + 0x03B9, 0x0308, 0x0342, 0x0399, 0x0306, 0x0399, 0x0304, 0x0399, + 0x0300, 0x0399, 0x0301, 0x0020, 0x0314, 0x0300, 0x0020, 0x0314, + 0x0301, 0x0020, 0x0314, 0x0342, 0x03C5, 0x0306, 0x03C5, 0x0304, + 0x03C5, 0x0308, 0x0300, 0x03C5, 0x0308, 0x0301, 0x03C1, 0x0313, + 0x03C1, 0x0314, 0x03C5, 0x0342, 0x03C5, 0x0308, 0x0342, 0x03A5, + 0x0306, 0x03A5, 0x0304, 0x03A5, 0x0300, 0x03A5, 0x0301, 0x03A1, + 0x0314, 0x0020, 0x0308, 0x0300, 0x0020, 0x0308, 0x0301, 0x0060, + 0x03C9, 0x0300, 0x0345, 0x03C9, 0x0345, 0x03C9, 0x0301, 0x0345, + 0x03C9, 0x0342, 0x03C9, 0x0342, 0x0345, 0x039F, 0x0300, 0x039F, + 0x0301, 0x03A9, 0x0300, 0x03A9, 0x0301, 0x03A9, 0x0345, 0x0020, + 0x0301, 0x0020, 0x0314, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, + 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x2010, 0x0020, + 0x0333, 0x002E, 0x002E, 0x002E, 0x002E, 0x002E, 0x002E, 0x0020, + 0x2032, 0x2032, 0x2032, 0x2032, 0x2032, 0x2035, 0x2035, 0x2035, + 0x2035, 0x2035, 0x0021, 0x0021, 0x0020, 0x0305, 0x003F, 0x003F, + 0x003F, 0x0021, 0x0021, 0x003F, 0x2032, 0x2032, 0x2032, 0x2032, + 0x0020, 0x0030, 0x0069, 0x0034, 0x0035, 0x0036, 0x0037, 0x0038, + 0x0039, 0x002B, 0x2212, 0x003D, 0x0028, 0x0029, 0x006E, 0x0030, + 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, 0x0038, + 0x0039, 0x002B, 0x2212, 0x003D, 0x0028, 0x0029, 0x0061, 0x0065, + 0x006F, 0x0078, 0x0259, 0x0068, 0x006B, 0x006C, 0x006D, 0x006E, + 0x0070, 0x0073, 0x0074, 0x0052, 0x0073, 0x0061, 0x002F, 0x0063, + 0x0061, 0x002F, 0x0073, 0x0043, 0x00B0, 0x0043, 0x0063, 0x002F, + 0x006F, 0x0063, 0x002F, 0x0075, 0x0190, 0x00B0, 0x0046, 0x0067, + 0x0048, 0x0048, 0x0048, 0x0068, 0x0127, 0x0049, 0x0049, 0x004C, + 0x006C, 0x004E, 0x004E, 0x006F, 0x0050, 0x0051, 0x0052, 0x0052, + 0x0052, 0x0053, 0x004D, 0x0054, 0x0045, 0x004C, 0x0054, 0x004D, + 0x005A, 0x03A9, 0x005A, 0x004B, 0x0041, 0x030A, 0x0042, 0x0043, + 0x0065, 0x0045, 0x0046, 0x004D, 0x006F, 0x05D0, 0x05D1, 0x05D2, + 0x05D3, 0x0069, 0x0046, 0x0041, 0x0058, 0x03C0, 0x03B3, 0x0393, + 0x03A0, 0x2211, 0x0044, 0x0064, 0x0065, 0x0069, 0x006A, 0x0031, + 0x2044, 0x0037, 0x0031, 0x2044, 0x0039, 0x0031, 0x2044, 0x0031, + 0x0030, 0x0031, 0x2044, 0x0033, 0x0032, 0x2044, 0x0033, 0x0031, + 0x2044, 0x0035, 0x0032, 0x2044, 0x0035, 0x0033, 0x2044, 0x0035, + 0x0034, 0x2044, 0x0035, 0x0031, 0x2044, 0x0036, 0x0035, 0x2044, + 0x0036, 0x0031, 0x2044, 0x0038, 0x0033, 0x2044, 0x0038, 0x0035, + 0x2044, 0x0038, 0x0037, 0x2044, 0x0038, 0x0031, 0x2044, 0x0049, + 0x0049, 0x0049, 0x0049, 0x0049, 0x0049, 0x0049, 0x0056, 0x0056, + 0x0056, 0x0049, 0x0056, 0x0049, 0x0049, 0x0056, 0x0049, 0x0049, + 0x0049, 0x0049, 0x0058, 0x0058, 0x0058, 0x0049, 0x0058, 0x0049, + 0x0049, 0x004C, 0x0043, 0x0044, 0x004D, 0x0069, 0x0069, 0x0069, + 0x0069, 0x0069, 0x0069, 0x0069, 0x0076, 0x0076, 0x0076, 0x0069, + 0x0076, 0x0069, 0x0069, 0x0076, 0x0069, 0x0069, 0x0069, 0x0069, + 0x0078, 0x0078, 0x0078, 0x0069, 0x0078, 0x0069, 0x0069, 0x006C, + 0x0063, 0x0064, 0x006D, 0x0030, 0x2044, 0x0033, 0x2190, 0x0338, + 0x2192, 0x0338, 0x2194, 0x0338, 0x21D0, 0x0338, 0x21D4, 0x0338, + 0x21D2, 0x0338, 0x2203, 0x0338, 0x2208, 0x0338, 0x220B, 0x0338, + 0x2223, 0x0338, 0x2225, 0x0338, 0x222B, 0x222B, 0x222B, 0x222B, + 0x222B, 0x222E, 0x222E, 0x222E, 0x222E, 0x222E, 0x223C, 0x0338, + 0x2243, 0x0338, 0x2245, 0x0338, 0x2248, 0x0338, 0x003D, 0x0338, + 0x2261, 0x0338, 0x224D, 0x0338, 0x003C, 0x0338, 0x003E, 0x0338, + 0x2264, 0x0338, 0x2265, 0x0338, 0x2272, 0x0338, 0x2273, 0x0338, + 0x2276, 0x0338, 0x2277, 0x0338, 0x227A, 0x0338, 0x227B, 0x0338, + 0x2282, 0x0338, 0x2283, 0x0338, 0x2286, 0x0338, 0x2287, 0x0338, + 0x22A2, 0x0338, 0x22A8, 0x0338, 0x22A9, 0x0338, 0x22AB, 0x0338, + 0x227C, 0x0338, 0x227D, 0x0338, 0x2291, 0x0338, 0x2292, 0x0338, + 0x22B2, 0x0338, 0x22B3, 0x0338, 0x22B4, 0x0338, 0x22B5, 0x0338, + 0x3008, 0x3009, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, + 0x0037, 0x0038, 0x0039, 0x0031, 0x0030, 0x0031, 0x0031, 0x0031, + 0x0032, 0x0031, 0x0033, 0x0031, 0x0034, 0x0031, 0x0035, 0x0031, + 0x0036, 0x0031, 0x0037, 0x0031, 0x0038, 0x0031, 0x0039, 0x0032, + 0x0030, 0x0028, 0x0031, 0x0029, 0x0028, 0x0032, 0x0029, 0x0028, + 0x0033, 0x0029, 0x0028, 0x0034, 0x0029, 0x0028, 0x0035, 0x0029, + 0x0028, 0x0036, 0x0029, 0x0028, 0x0037, 0x0029, 0x0028, 0x0038, + 0x0029, 0x0028, 0x0039, 0x0029, 0x0028, 0x0031, 0x0030, 0x0029, + 0x0028, 0x0031, 0x0031, 0x0029, 0x0028, 0x0031, 0x0032, 0x0029, + 0x0028, 0x0031, 0x0033, 0x0029, 0x0028, 0x0031, 0x0034, 0x0029, + 0x0028, 0x0031, 0x0035, 0x0029, 0x0028, 0x0031, 0x0036, 0x0029, + 0x0028, 0x0031, 0x0037, 0x0029, 0x0028, 0x0031, 0x0038, 0x0029, + 0x0028, 0x0031, 0x0039, 0x0029, 0x0028, 0x0032, 0x0030, 0x0029, + 0x0031, 0x002E, 0x0032, 0x002E, 0x0033, 0x002E, 0x0034, 0x002E, + 0x0035, 0x002E, 0x0036, 0x002E, 0x0037, 0x002E, 0x0038, 0x002E, + 0x0039, 0x002E, 0x0031, 0x0030, 0x002E, 0x0031, 0x0031, 0x002E, + 0x0031, 0x0032, 0x002E, 0x0031, 0x0033, 0x002E, 0x0031, 0x0034, + 0x002E, 0x0031, 0x0035, 0x002E, 0x0031, 0x0036, 0x002E, 0x0031, + 0x0037, 0x002E, 0x0031, 0x0038, 0x002E, 0x0031, 0x0039, 0x002E, + 0x0032, 0x0030, 0x002E, 0x0028, 0x0061, 0x0029, 0x0028, 0x0062, + 0x0029, 0x0028, 0x0063, 0x0029, 0x0028, 0x0064, 0x0029, 0x0028, + 0x0065, 0x0029, 0x0028, 0x0066, 0x0029, 0x0028, 0x0067, 0x0029, + 0x0028, 0x0068, 0x0029, 0x0028, 0x0069, 0x0029, 0x0028, 0x006A, + 0x0029, 0x0028, 0x006B, 0x0029, 0x0028, 0x006C, 0x0029, 0x0028, + 0x006D, 0x0029, 0x0028, 0x006E, 0x0029, 0x0028, 0x006F, 0x0029, + 0x0028, 0x0070, 0x0029, 0x0028, 0x0071, 0x0029, 0x0028, 0x0072, + 0x0029, 0x0028, 0x0073, 0x0029, 0x0028, 0x0074, 0x0029, 0x0028, + 0x0075, 0x0029, 0x0028, 0x0076, 0x0029, 0x0028, 0x0077, 0x0029, + 0x0028, 0x0078, 0x0029, 0x0028, 0x0079, 0x0029, 0x0028, 0x007A, + 0x0029, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, + 0x0048, 0x0049, 0x004A, 0x004B, 0x004C, 0x004D, 0x004E, 0x004F, + 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, + 0x0058, 0x0059, 0x005A, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, + 0x0066, 0x0067, 0x0068, 0x0069, 0x006A, 0x006B, 0x006C, 0x006D, + 0x006E, 0x006F, 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, + 0x0076, 0x0077, 0x0078, 0x0079, 0x007A, 0x0030, 0x222B, 0x222B, + 0x222B, 0x222B, 0x003A, 0x003A, 0x003D, 0x003D, 0x003D, 0x003D, + 0x003D, 0x003D, 0x2ADD, 0x0338, 0x006A, 0x0056, 0x2D61, 0x6BCD, + 0x9F9F, 0x4E00, 0x4E28, 0x4E36, 0x4E3F, 0x4E59, 0x4E85, 0x4E8C, + 0x4EA0, 0x4EBA, 0x513F, 0x5165, 0x516B, 0x5182, 0x5196, 0x51AB, + 0x51E0, 0x51F5, 0x5200, 0x529B, 0x52F9, 0x5315, 0x531A, 0x5338, + 0x5341, 0x535C, 0x5369, 0x5382, 0x53B6, 0x53C8, 0x53E3, 0x56D7, + 0x571F, 0x58EB, 0x5902, 0x590A, 0x5915, 0x5927, 0x5973, 0x5B50, + 0x5B80, 0x5BF8, 0x5C0F, 0x5C22, 0x5C38, 0x5C6E, 0x5C71, 0x5DDB, + 0x5DE5, 0x5DF1, 0x5DFE, 0x5E72, 0x5E7A, 0x5E7F, 0x5EF4, 0x5EFE, + 0x5F0B, 0x5F13, 0x5F50, 0x5F61, 0x5F73, 0x5FC3, 0x6208, 0x6236, + 0x624B, 0x652F, 0x6534, 0x6587, 0x6597, 0x65A4, 0x65B9, 0x65E0, + 0x65E5, 0x66F0, 0x6708, 0x6728, 0x6B20, 0x6B62, 0x6B79, 0x6BB3, + 0x6BCB, 0x6BD4, 0x6BDB, 0x6C0F, 0x6C14, 0x6C34, 0x706B, 0x722A, + 0x7236, 0x723B, 0x723F, 0x7247, 0x7259, 0x725B, 0x72AC, 0x7384, + 0x7389, 0x74DC, 0x74E6, 0x7518, 0x751F, 0x7528, 0x7530, 0x758B, + 0x7592, 0x7676, 0x767D, 0x76AE, 0x76BF, 0x76EE, 0x77DB, 0x77E2, + 0x77F3, 0x793A, 0x79B8, 0x79BE, 0x7A74, 0x7ACB, 0x7AF9, 0x7C73, + 0x7CF8, 0x7F36, 0x7F51, 0x7F8A, 0x7FBD, 0x8001, 0x800C, 0x8012, + 0x8033, 0x807F, 0x8089, 0x81E3, 0x81EA, 0x81F3, 0x81FC, 0x820C, + 0x821B, 0x821F, 0x826E, 0x8272, 0x8278, 0x864D, 0x866B, 0x8840, + 0x884C, 0x8863, 0x897E, 0x898B, 0x89D2, 0x8A00, 0x8C37, 0x8C46, + 0x8C55, 0x8C78, 0x8C9D, 0x8D64, 0x8D70, 0x8DB3, 0x8EAB, 0x8ECA, + 0x8F9B, 0x8FB0, 0x8FB5, 0x9091, 0x9149, 0x91C6, 0x91CC, 0x91D1, + 0x9577, 0x9580, 0x961C, 0x96B6, 0x96B9, 0x96E8, 0x9751, 0x975E, + 0x9762, 0x9769, 0x97CB, 0x97ED, 0x97F3, 0x9801, 0x98A8, 0x98DB, + 0x98DF, 0x9996, 0x9999, 0x99AC, 0x9AA8, 0x9AD8, 0x9ADF, 0x9B25, + 0x9B2F, 0x9B32, 0x9B3C, 0x9B5A, 0x9CE5, 0x9E75, 0x9E7F, 0x9EA5, + 0x9EBB, 0x9EC3, 0x9ECD, 0x9ED1, 0x9EF9, 0x9EFD, 0x9F0E, 0x9F13, + 0x9F20, 0x9F3B, 0x9F4A, 0x9F52, 0x9F8D, 0x9F9C, 0x9FA0, 0x0020, + 0x3012, 0x5341, 0x5344, 0x5345, 0x304B, 0x3099, 0x304D, 0x3099, + 0x304F, 0x3099, 0x3051, 0x3099, 0x3053, 0x3099, 0x3055, 0x3099, + 0x3057, 0x3099, 0x3059, 0x3099, 0x305B, 0x3099, 0x305D, 0x3099, + 0x305F, 0x3099, 0x3061, 0x3099, 0x3064, 0x3099, 0x3066, 0x3099, + 0x3068, 0x3099, 0x306F, 0x3099, 0x306F, 0x309A, 0x3072, 0x3099, + 0x3072, 0x309A, 0x3075, 0x3099, 0x3075, 0x309A, 0x3078, 0x3099, + 0x3078, 0x309A, 0x307B, 0x3099, 0x307B, 0x309A, 0x3046, 0x3099, + 0x0020, 0x3099, 0x0020, 0x309A, 0x309D, 0x3099, 0x3088, 0x308A, + 0x30AB, 0x3099, 0x30AD, 0x3099, 0x30AF, 0x3099, 0x30B1, 0x3099, + 0x30B3, 0x3099, 0x30B5, 0x3099, 0x30B7, 0x3099, 0x30B9, 0x3099, + 0x30BB, 0x3099, 0x30BD, 0x3099, 0x30BF, 0x3099, 0x30C1, 0x3099, + 0x30C4, 0x3099, 0x30C6, 0x3099, 0x30C8, 0x3099, 0x30CF, 0x3099, + 0x30CF, 0x309A, 0x30D2, 0x3099, 0x30D2, 0x309A, 0x30D5, 0x3099, + 0x30D5, 0x309A, 0x30D8, 0x3099, 0x30D8, 0x309A, 0x30DB, 0x3099, + 0x30DB, 0x309A, 0x30A6, 0x3099, 0x30EF, 0x3099, 0x30F0, 0x3099, + 0x30F1, 0x3099, 0x30F2, 0x3099, 0x30FD, 0x3099, 0x30B3, 0x30C8, + 0x1100, 0x1101, 0x11AA, 0x1102, 0x11AC, 0x11AD, 0x1103, 0x1104, + 0x1105, 0x11B0, 0x11B1, 0x11B2, 0x11B3, 0x11B4, 0x11B5, 0x111A, + 0x1106, 0x1107, 0x1108, 0x1121, 0x1109, 0x110A, 0x110B, 0x110C, + 0x110D, 0x110E, 0x110F, 0x1110, 0x1111, 0x1112, 0x1161, 0x1162, + 0x1163, 0x1164, 0x1165, 0x1166, 0x1167, 0x1168, 0x1169, 0x116A, + 0x116B, 0x116C, 0x116D, 0x116E, 0x116F, 0x1170, 0x1171, 0x1172, + 0x1173, 0x1174, 0x1175, 0x1160, 0x1114, 0x1115, 0x11C7, 0x11C8, + 0x11CC, 0x11CE, 0x11D3, 0x11D7, 0x11D9, 0x111C, 0x11DD, 0x11DF, + 0x111D, 0x111E, 0x1120, 0x1122, 0x1123, 0x1127, 0x1129, 0x112B, + 0x112C, 0x112D, 0x112E, 0x112F, 0x1132, 0x1136, 0x1140, 0x1147, + 0x114C, 0x11F1, 0x11F2, 0x1157, 0x1158, 0x1159, 0x1184, 0x1185, + 0x1188, 0x1191, 0x1192, 0x1194, 0x119E, 0x11A1, 0x4E00, 0x4E8C, + 0x4E09, 0x56DB, 0x4E0A, 0x4E2D, 0x4E0B, 0x7532, 0x4E59, 0x4E19, + 0x4E01, 0x5929, 0x5730, 0x4EBA, 0x0028, 0x1100, 0x0029, 0x0028, + 0x1102, 0x0029, 0x0028, 0x1103, 0x0029, 0x0028, 0x1105, 0x0029, + 0x0028, 0x1106, 0x0029, 0x0028, 0x1107, 0x0029, 0x0028, 0x1109, + 0x0029, 0x0028, 0x110B, 0x0029, 0x0028, 0x110C, 0x0029, 0x0028, + 0x110E, 0x0029, 0x0028, 0x110F, 0x0029, 0x0028, 0x1110, 0x0029, + 0x0028, 0x1111, 0x0029, 0x0028, 0x1112, 0x0029, 0x0028, 0x1100, + 0x1161, 0x0029, 0x0028, 0x1102, 0x1161, 0x0029, 0x0028, 0x1103, + 0x1161, 0x0029, 0x0028, 0x1105, 0x1161, 0x0029, 0x0028, 0x1106, + 0x1161, 0x0029, 0x0028, 0x1107, 0x1161, 0x0029, 0x0028, 0x1109, + 0x1161, 0x0029, 0x0028, 0x110B, 0x1161, 0x0029, 0x0028, 0x110C, + 0x1161, 0x0029, 0x0028, 0x110E, 0x1161, 0x0029, 0x0028, 0x110F, + 0x1161, 0x0029, 0x0028, 0x1110, 0x1161, 0x0029, 0x0028, 0x1111, + 0x1161, 0x0029, 0x0028, 0x1112, 0x1161, 0x0029, 0x0028, 0x110C, + 0x116E, 0x0029, 0x0028, 0x110B, 0x1169, 0x110C, 0x1165, 0x11AB, + 0x0029, 0x0028, 0x110B, 0x1169, 0x1112, 0x116E, 0x0029, 0x0028, + 0x4E00, 0x0029, 0x0028, 0x4E8C, 0x0029, 0x0028, 0x4E09, 0x0029, + 0x0028, 0x56DB, 0x0029, 0x0028, 0x4E94, 0x0029, 0x0028, 0x516D, + 0x0029, 0x0028, 0x4E03, 0x0029, 0x0028, 0x516B, 0x0029, 0x0028, + 0x4E5D, 0x0029, 0x0028, 0x5341, 0x0029, 0x0028, 0x6708, 0x0029, + 0x0028, 0x706B, 0x0029, 0x0028, 0x6C34, 0x0029, 0x0028, 0x6728, + 0x0029, 0x0028, 0x91D1, 0x0029, 0x0028, 0x571F, 0x0029, 0x0028, + 0x65E5, 0x0029, 0x0028, 0x682A, 0x0029, 0x0028, 0x6709, 0x0029, + 0x0028, 0x793E, 0x0029, 0x0028, 0x540D, 0x0029, 0x0028, 0x7279, + 0x0029, 0x0028, 0x8CA1, 0x0029, 0x0028, 0x795D, 0x0029, 0x0028, + 0x52B4, 0x0029, 0x0028, 0x4EE3, 0x0029, 0x0028, 0x547C, 0x0029, + 0x0028, 0x5B66, 0x0029, 0x0028, 0x76E3, 0x0029, 0x0028, 0x4F01, + 0x0029, 0x0028, 0x8CC7, 0x0029, 0x0028, 0x5354, 0x0029, 0x0028, + 0x796D, 0x0029, 0x0028, 0x4F11, 0x0029, 0x0028, 0x81EA, 0x0029, + 0x0028, 0x81F3, 0x0029, 0x554F, 0x5E7C, 0x6587, 0x7B8F, 0x0050, + 0x0054, 0x0045, 0x0032, 0x0031, 0x0032, 0x0032, 0x0032, 0x0033, + 0x0032, 0x0034, 0x0032, 0x0035, 0x0032, 0x0036, 0x0032, 0x0037, + 0x0032, 0x0038, 0x0032, 0x0039, 0x0033, 0x0030, 0x0033, 0x0031, + 0x0033, 0x0032, 0x0033, 0x0033, 0x0033, 0x0034, 0x0033, 0x0035, + 0x1100, 0x1102, 0x1103, 0x1105, 0x1106, 0x1107, 0x1109, 0x110B, + 0x110C, 0x110E, 0x110F, 0x1110, 0x1111, 0x1112, 0x1100, 0x1161, + 0x1102, 0x1161, 0x1103, 0x1161, 0x1105, 0x1161, 0x1106, 0x1161, + 0x1107, 0x1161, 0x1109, 0x1161, 0x110B, 0x1161, 0x110C, 0x1161, + 0x110E, 0x1161, 0x110F, 0x1161, 0x1110, 0x1161, 0x1111, 0x1161, + 0x1112, 0x1161, 0x110E, 0x1161, 0x11B7, 0x1100, 0x1169, 0x110C, + 0x116E, 0x110B, 0x1174, 0x110B, 0x116E, 0x4E00, 0x4E8C, 0x4E09, + 0x56DB, 0x4E94, 0x516D, 0x4E03, 0x516B, 0x4E5D, 0x5341, 0x6708, + 0x706B, 0x6C34, 0x6728, 0x91D1, 0x571F, 0x65E5, 0x682A, 0x6709, + 0x793E, 0x540D, 0x7279, 0x8CA1, 0x795D, 0x52B4, 0x79D8, 0x7537, + 0x5973, 0x9069, 0x512A, 0x5370, 0x6CE8, 0x9805, 0x4F11, 0x5199, + 0x6B63, 0x4E0A, 0x4E2D, 0x4E0B, 0x5DE6, 0x53F3, 0x533B, 0x5B97, + 0x5B66, 0x76E3, 0x4F01, 0x8CC7, 0x5354, 0x591C, 0x0033, 0x0036, + 0x0033, 0x0037, 0x0033, 0x0038, 0x0033, 0x0039, 0x0034, 0x0030, + 0x0034, 0x0031, 0x0034, 0x0032, 0x0034, 0x0033, 0x0034, 0x0034, + 0x0034, 0x0035, 0x0034, 0x0036, 0x0034, 0x0037, 0x0034, 0x0038, + 0x0034, 0x0039, 0x0035, 0x0030, 0x0031, 0x6708, 0x0032, 0x6708, + 0x0033, 0x6708, 0x0034, 0x6708, 0x0035, 0x6708, 0x0036, 0x6708, + 0x0037, 0x6708, 0x0038, 0x6708, 0x0039, 0x6708, 0x0031, 0x0030, + 0x6708, 0x0031, 0x0031, 0x6708, 0x0031, 0x0032, 0x6708, 0x0048, + 0x0067, 0x0065, 0x0072, 0x0067, 0x0065, 0x0056, 0x004C, 0x0054, + 0x0044, 0x30A2, 0x30A4, 0x30A6, 0x30A8, 0x30AA, 0x30AB, 0x30AD, + 0x30AF, 0x30B1, 0x30B3, 0x30B5, 0x30B7, 0x30B9, 0x30BB, 0x30BD, + 0x30BF, 0x30C1, 0x30C4, 0x30C6, 0x30C8, 0x30CA, 0x30CB, 0x30CC, + 0x30CD, 0x30CE, 0x30CF, 0x30D2, 0x30D5, 0x30D8, 0x30DB, 0x30DE, + 0x30DF, 0x30E0, 0x30E1, 0x30E2, 0x30E4, 0x30E6, 0x30E8, 0x30E9, + 0x30EA, 0x30EB, 0x30EC, 0x30ED, 0x30EF, 0x30F0, 0x30F1, 0x30F2, + 0x4EE4, 0x548C, 0x30A2, 0x30CF, 0x309A, 0x30FC, 0x30C8, 0x30A2, + 0x30EB, 0x30D5, 0x30A1, 0x30A2, 0x30F3, 0x30D8, 0x309A, 0x30A2, + 0x30A2, 0x30FC, 0x30EB, 0x30A4, 0x30CB, 0x30F3, 0x30AF, 0x3099, + 0x30A4, 0x30F3, 0x30C1, 0x30A6, 0x30A9, 0x30F3, 0x30A8, 0x30B9, + 0x30AF, 0x30FC, 0x30C8, 0x3099, 0x30A8, 0x30FC, 0x30AB, 0x30FC, + 0x30AA, 0x30F3, 0x30B9, 0x30AA, 0x30FC, 0x30E0, 0x30AB, 0x30A4, + 0x30EA, 0x30AB, 0x30E9, 0x30C3, 0x30C8, 0x30AB, 0x30ED, 0x30EA, + 0x30FC, 0x30AB, 0x3099, 0x30ED, 0x30F3, 0x30AB, 0x3099, 0x30F3, + 0x30DE, 0x30AD, 0x3099, 0x30AB, 0x3099, 0x30AD, 0x3099, 0x30CB, + 0x30FC, 0x30AD, 0x30E5, 0x30EA, 0x30FC, 0x30AD, 0x3099, 0x30EB, + 0x30BF, 0x3099, 0x30FC, 0x30AD, 0x30ED, 0x30AD, 0x30ED, 0x30AF, + 0x3099, 0x30E9, 0x30E0, 0x30AD, 0x30ED, 0x30E1, 0x30FC, 0x30C8, + 0x30EB, 0x30AD, 0x30ED, 0x30EF, 0x30C3, 0x30C8, 0x30AF, 0x3099, + 0x30E9, 0x30E0, 0x30AF, 0x3099, 0x30E9, 0x30E0, 0x30C8, 0x30F3, + 0x30AF, 0x30EB, 0x30BB, 0x3099, 0x30A4, 0x30ED, 0x30AF, 0x30ED, + 0x30FC, 0x30CD, 0x30B1, 0x30FC, 0x30B9, 0x30B3, 0x30EB, 0x30CA, + 0x30B3, 0x30FC, 0x30DB, 0x309A, 0x30B5, 0x30A4, 0x30AF, 0x30EB, + 0x30B5, 0x30F3, 0x30C1, 0x30FC, 0x30E0, 0x30B7, 0x30EA, 0x30F3, + 0x30AF, 0x3099, 0x30BB, 0x30F3, 0x30C1, 0x30BB, 0x30F3, 0x30C8, + 0x30BF, 0x3099, 0x30FC, 0x30B9, 0x30C6, 0x3099, 0x30B7, 0x30C8, + 0x3099, 0x30EB, 0x30C8, 0x30F3, 0x30CA, 0x30CE, 0x30CE, 0x30C3, + 0x30C8, 0x30CF, 0x30A4, 0x30C4, 0x30CF, 0x309A, 0x30FC, 0x30BB, + 0x30F3, 0x30C8, 0x30CF, 0x309A, 0x30FC, 0x30C4, 0x30CF, 0x3099, + 0x30FC, 0x30EC, 0x30EB, 0x30D2, 0x309A, 0x30A2, 0x30B9, 0x30C8, + 0x30EB, 0x30D2, 0x309A, 0x30AF, 0x30EB, 0x30D2, 0x309A, 0x30B3, + 0x30D2, 0x3099, 0x30EB, 0x30D5, 0x30A1, 0x30E9, 0x30C3, 0x30C8, + 0x3099, 0x30D5, 0x30A3, 0x30FC, 0x30C8, 0x30D5, 0x3099, 0x30C3, + 0x30B7, 0x30A7, 0x30EB, 0x30D5, 0x30E9, 0x30F3, 0x30D8, 0x30AF, + 0x30BF, 0x30FC, 0x30EB, 0x30D8, 0x309A, 0x30BD, 0x30D8, 0x309A, + 0x30CB, 0x30D2, 0x30D8, 0x30EB, 0x30C4, 0x30D8, 0x309A, 0x30F3, + 0x30B9, 0x30D8, 0x309A, 0x30FC, 0x30B7, 0x3099, 0x30D8, 0x3099, + 0x30FC, 0x30BF, 0x30DB, 0x309A, 0x30A4, 0x30F3, 0x30C8, 0x30DB, + 0x3099, 0x30EB, 0x30C8, 0x30DB, 0x30F3, 0x30DB, 0x309A, 0x30F3, + 0x30C8, 0x3099, 0x30DB, 0x30FC, 0x30EB, 0x30DB, 0x30FC, 0x30F3, + 0x30DE, 0x30A4, 0x30AF, 0x30ED, 0x30DE, 0x30A4, 0x30EB, 0x30DE, + 0x30C3, 0x30CF, 0x30DE, 0x30EB, 0x30AF, 0x30DE, 0x30F3, 0x30B7, + 0x30E7, 0x30F3, 0x30DF, 0x30AF, 0x30ED, 0x30F3, 0x30DF, 0x30EA, + 0x30DF, 0x30EA, 0x30CF, 0x3099, 0x30FC, 0x30EB, 0x30E1, 0x30AB, + 0x3099, 0x30E1, 0x30AB, 0x3099, 0x30C8, 0x30F3, 0x30E1, 0x30FC, + 0x30C8, 0x30EB, 0x30E4, 0x30FC, 0x30C8, 0x3099, 0x30E4, 0x30FC, + 0x30EB, 0x30E6, 0x30A2, 0x30F3, 0x30EA, 0x30C3, 0x30C8, 0x30EB, + 0x30EA, 0x30E9, 0x30EB, 0x30D2, 0x309A, 0x30FC, 0x30EB, 0x30FC, + 0x30D5, 0x3099, 0x30EB, 0x30EC, 0x30E0, 0x30EC, 0x30F3, 0x30C8, + 0x30B1, 0x3099, 0x30F3, 0x30EF, 0x30C3, 0x30C8, 0x0030, 0x70B9, + 0x0031, 0x70B9, 0x0032, 0x70B9, 0x0033, 0x70B9, 0x0034, 0x70B9, + 0x0035, 0x70B9, 0x0036, 0x70B9, 0x0037, 0x70B9, 0x0038, 0x70B9, + 0x0039, 0x70B9, 0x0031, 0x0030, 0x70B9, 0x0031, 0x0031, 0x70B9, + 0x0031, 0x0032, 0x70B9, 0x0031, 0x0033, 0x70B9, 0x0031, 0x0034, + 0x70B9, 0x0031, 0x0035, 0x70B9, 0x0031, 0x0036, 0x70B9, 0x0031, + 0x0037, 0x70B9, 0x0031, 0x0038, 0x70B9, 0x0031, 0x0039, 0x70B9, + 0x0032, 0x0030, 0x70B9, 0x0032, 0x0031, 0x70B9, 0x0032, 0x0032, + 0x70B9, 0x0032, 0x0033, 0x70B9, 0x0032, 0x0034, 0x70B9, 0x0068, + 0x0050, 0x0061, 0x0064, 0x0061, 0x0041, 0x0055, 0x0062, 0x0061, + 0x0072, 0x006F, 0x0056, 0x0070, 0x0063, 0x0064, 0x006D, 0x0064, + 0x006D, 0x0032, 0x0064, 0x006D, 0x0033, 0x0049, 0x0055, 0x5E73, + 0x6210, 0x662D, 0x548C, 0x5927, 0x6B63, 0x660E, 0x6CBB, 0x682A, + 0x5F0F, 0x4F1A, 0x793E, 0x0070, 0x0041, 0x006E, 0x0041, 0x03BC, + 0x0041, 0x006D, 0x0041, 0x006B, 0x0041, 0x004B, 0x0042, 0x004D, + 0x0042, 0x0047, 0x0042, 0x0063, 0x0061, 0x006C, 0x006B, 0x0063, + 0x0061, 0x006C, 0x0070, 0x0046, 0x006E, 0x0046, 0x03BC, 0x0046, + 0x03BC, 0x0067, 0x006D, 0x0067, 0x006B, 0x0067, 0x0048, 0x007A, + 0x006B, 0x0048, 0x007A, 0x004D, 0x0048, 0x007A, 0x0047, 0x0048, + 0x007A, 0x0054, 0x0048, 0x007A, 0x03BC, 0x006C, 0x006D, 0x006C, + 0x0064, 0x006C, 0x006B, 0x006C, 0x0066, 0x006D, 0x006E, 0x006D, + 0x03BC, 0x006D, 0x006D, 0x006D, 0x0063, 0x006D, 0x006B, 0x006D, + 0x006D, 0x006D, 0x0032, 0x0063, 0x006D, 0x0032, 0x006D, 0x0032, + 0x006B, 0x006D, 0x0032, 0x006D, 0x006D, 0x0033, 0x0063, 0x006D, + 0x0033, 0x006D, 0x0033, 0x006B, 0x006D, 0x0033, 0x006D, 0x2215, + 0x0073, 0x006D, 0x2215, 0x0073, 0x0032, 0x0050, 0x0061, 0x006B, + 0x0050, 0x0061, 0x004D, 0x0050, 0x0061, 0x0047, 0x0050, 0x0061, + 0x0072, 0x0061, 0x0064, 0x0072, 0x0061, 0x0064, 0x2215, 0x0073, + 0x0072, 0x0061, 0x0064, 0x2215, 0x0073, 0x0032, 0x0070, 0x0073, + 0x006E, 0x0073, 0x03BC, 0x0073, 0x006D, 0x0073, 0x0070, 0x0056, + 0x006E, 0x0056, 0x03BC, 0x0056, 0x006D, 0x0056, 0x006B, 0x0056, + 0x004D, 0x0056, 0x0070, 0x0057, 0x006E, 0x0057, 0x03BC, 0x0057, + 0x006D, 0x0057, 0x006B, 0x0057, 0x004D, 0x0057, 0x006B, 0x03A9, + 0x004D, 0x03A9, 0x0061, 0x002E, 0x006D, 0x002E, 0x0042, 0x0071, + 0x0063, 0x0063, 0x0063, 0x0064, 0x0043, 0x2215, 0x006B, 0x0067, + 0x0043, 0x006F, 0x002E, 0x0064, 0x0042, 0x0047, 0x0079, 0x0068, + 0x0061, 0x0048, 0x0050, 0x0069, 0x006E, 0x004B, 0x004B, 0x004B, + 0x004D, 0x006B, 0x0074, 0x006C, 0x006D, 0x006C, 0x006E, 0x006C, + 0x006F, 0x0067, 0x006C, 0x0078, 0x006D, 0x0062, 0x006D, 0x0069, + 0x006C, 0x006D, 0x006F, 0x006C, 0x0050, 0x0048, 0x0070, 0x002E, + 0x006D, 0x002E, 0x0050, 0x0050, 0x004D, 0x0050, 0x0052, 0x0073, + 0x0072, 0x0053, 0x0076, 0x0057, 0x0062, 0x0056, 0x2215, 0x006D, + 0x0041, 0x2215, 0x006D, 0x0031, 0x65E5, 0x0032, 0x65E5, 0x0033, + 0x65E5, 0x0034, 0x65E5, 0x0035, 0x65E5, 0x0036, 0x65E5, 0x0037, + 0x65E5, 0x0038, 0x65E5, 0x0039, 0x65E5, 0x0031, 0x0030, 0x65E5, + 0x0031, 0x0031, 0x65E5, 0x0031, 0x0032, 0x65E5, 0x0031, 0x0033, + 0x65E5, 0x0031, 0x0034, 0x65E5, 0x0031, 0x0035, 0x65E5, 0x0031, + 0x0036, 0x65E5, 0x0031, 0x0037, 0x65E5, 0x0031, 0x0038, 0x65E5, + 0x0031, 0x0039, 0x65E5, 0x0032, 0x0030, 0x65E5, 0x0032, 0x0031, + 0x65E5, 0x0032, 0x0032, 0x65E5, 0x0032, 0x0033, 0x65E5, 0x0032, + 0x0034, 0x65E5, 0x0032, 0x0035, 0x65E5, 0x0032, 0x0036, 0x65E5, + 0x0032, 0x0037, 0x65E5, 0x0032, 0x0038, 0x65E5, 0x0032, 0x0039, + 0x65E5, 0x0033, 0x0030, 0x65E5, 0x0033, 0x0031, 0x65E5, 0x0067, + 0x0061, 0x006C, 0x044A, 0x044C, 0xA76F, 0x0043, 0x0046, 0x0051, + 0x0126, 0x0153, 0xA727, 0xAB37, 0x026B, 0xAB52, 0x028D, 0x1100, + 0x1161, 0x1100, 0x1161, 0x11A8, 0x1100, 0x1161, 0x11A9, 0x1100, + 0x1161, 0x11AA, 0x1100, 0x1161, 0x11AB, 0x1100, 0x1161, 0x11AC, + 0x1100, 0x1161, 0x11AD, 0x1100, 0x1161, 0x11AE, 0x1100, 0x1161, + 0x11AF, 0x1100, 0x1161, 0x11B0, 0x1100, 0x1161, 0x11B1, 0x1100, + 0x1161, 0x11B2, 0x1100, 0x1161, 0x11B3, 0x1100, 0x1161, 0x11B4, + 0x1100, 0x1161, 0x11B5, 0x1100, 0x1161, 0x11B6, 0x1100, 0x1161, + 0x11B7, 0x1100, 0x1161, 0x11B8, 0x1100, 0x1161, 0x11B9, 0x1100, + 0x1161, 0x11BA, 0x1100, 0x1161, 0x11BB, 0x1100, 0x1161, 0x11BC, + 0x1100, 0x1161, 0x11BD, 0x1100, 0x1161, 0x11BE, 0x1100, 0x1161, + 0x11BF, 0x1100, 0x1161, 0x11C0, 0x1100, 0x1161, 0x11C1, 0x1100, + 0x1161, 0x11C2, 0x1100, 0x1162, 0x1100, 0x1162, 0x11A8, 0x1100, + 0x1162, 0x11A9, 0x1100, 0x1162, 0x11AA, 0x1100, 0x1162, 0x11AB, + 0x1100, 0x1162, 0x11AC, 0x1100, 0x1162, 0x11AD, 0x1100, 0x1162, + 0x11AE, 0x1100, 0x1162, 0x11AF, 0x1100, 0x1162, 0x11B0, 0x1100, + 0x1162, 0x11B1, 0x1100, 0x1162, 0x11B2, 0x1100, 0x1162, 0x11B3, + 0x1100, 0x1162, 0x11B4, 0x1100, 0x1162, 0x11B5, 0x1100, 0x1162, + 0x11B6, 0x1100, 0x1162, 0x11B7, 0x1100, 0x1162, 0x11B8, 0x1100, + 0x1162, 0x11B9, 0x1100, 0x1162, 0x11BA, 0x1100, 0x1162, 0x11BB, + 0x1100, 0x1162, 0x11BC, 0x1100, 0x1162, 0x11BD, 0x1100, 0x1162, + 0x11BE, 0x1100, 0x1162, 0x11BF, 0x1100, 0x1162, 0x11C0, 0x1100, + 0x1162, 0x11C1, 0x1100, 0x1162, 0x11C2, 0x1100, 0x1163, 0x1100, + 0x1163, 0x11A8, 0x1100, 0x1163, 0x11A9, 0x1100, 0x1163, 0x11AA, + 0x1100, 0x1163, 0x11AB, 0x1100, 0x1163, 0x11AC, 0x1100, 0x1163, + 0x11AD, 0x1100, 0x1163, 0x11AE, 0x1100, 0x1163, 0x11AF, 0x1100, + 0x1163, 0x11B0, 0x1100, 0x1163, 0x11B1, 0x1100, 0x1163, 0x11B2, + 0x1100, 0x1163, 0x11B3, 0x1100, 0x1163, 0x11B4, 0x1100, 0x1163, + 0x11B5, 0x1100, 0x1163, 0x11B6, 0x1100, 0x1163, 0x11B7, 0x1100, + 0x1163, 0x11B8, 0x1100, 0x1163, 0x11B9, 0x1100, 0x1163, 0x11BA, + 0x1100, 0x1163, 0x11BB, 0x1100, 0x1163, 0x11BC, 0x1100, 0x1163, + 0x11BD, 0x1100, 0x1163, 0x11BE, 0x1100, 0x1163, 0x11BF, 0x1100, + 0x1163, 0x11C0, 0x1100, 0x1163, 0x11C1, 0x1100, 0x1163, 0x11C2, + 0x1100, 0x1164, 0x1100, 0x1164, 0x11A8, 0x1100, 0x1164, 0x11A9, + 0x1100, 0x1164, 0x11AA, 0x1100, 0x1164, 0x11AB, 0x1100, 0x1164, + 0x11AC, 0x1100, 0x1164, 0x11AD, 0x1100, 0x1164, 0x11AE, 0x1100, + 0x1164, 0x11AF, 0x1100, 0x1164, 0x11B0, 0x1100, 0x1164, 0x11B1, + 0x1100, 0x1164, 0x11B2, 0x1100, 0x1164, 0x11B3, 0x1100, 0x1164, + 0x11B4, 0x1100, 0x1164, 0x11B5, 0x1100, 0x1164, 0x11B6, 0x1100, + 0x1164, 0x11B7, 0x1100, 0x1164, 0x11B8, 0x1100, 0x1164, 0x11B9, + 0x1100, 0x1164, 0x11BA, 0x1100, 0x1164, 0x11BB, 0x1100, 0x1164, + 0x11BC, 0x1100, 0x1164, 0x11BD, 0x1100, 0x1164, 0x11BE, 0x1100, + 0x1164, 0x11BF, 0x1100, 0x1164, 0x11C0, 0x1100, 0x1164, 0x11C1, + 0x1100, 0x1164, 0x11C2, 0x1100, 0x1165, 0x1100, 0x1165, 0x11A8, + 0x1100, 0x1165, 0x11A9, 0x1100, 0x1165, 0x11AA, 0x1100, 0x1165, + 0x11AB, 0x1100, 0x1165, 0x11AC, 0x1100, 0x1165, 0x11AD, 0x1100, + 0x1165, 0x11AE, 0x1100, 0x1165, 0x11AF, 0x1100, 0x1165, 0x11B0, + 0x1100, 0x1165, 0x11B1, 0x1100, 0x1165, 0x11B2, 0x1100, 0x1165, + 0x11B3, 0x1100, 0x1165, 0x11B4, 0x1100, 0x1165, 0x11B5, 0x1100, + 0x1165, 0x11B6, 0x1100, 0x1165, 0x11B7, 0x1100, 0x1165, 0x11B8, + 0x1100, 0x1165, 0x11B9, 0x1100, 0x1165, 0x11BA, 0x1100, 0x1165, + 0x11BB, 0x1100, 0x1165, 0x11BC, 0x1100, 0x1165, 0x11BD, 0x1100, + 0x1165, 0x11BE, 0x1100, 0x1165, 0x11BF, 0x1100, 0x1165, 0x11C0, + 0x1100, 0x1165, 0x11C1, 0x1100, 0x1165, 0x11C2, 0x1100, 0x1166, + 0x1100, 0x1166, 0x11A8, 0x1100, 0x1166, 0x11A9, 0x1100, 0x1166, + 0x11AA, 0x1100, 0x1166, 0x11AB, 0x1100, 0x1166, 0x11AC, 0x1100, + 0x1166, 0x11AD, 0x1100, 0x1166, 0x11AE, 0x1100, 0x1166, 0x11AF, + 0x1100, 0x1166, 0x11B0, 0x1100, 0x1166, 0x11B1, 0x1100, 0x1166, + 0x11B2, 0x1100, 0x1166, 0x11B3, 0x1100, 0x1166, 0x11B4, 0x1100, + 0x1166, 0x11B5, 0x1100, 0x1166, 0x11B6, 0x1100, 0x1166, 0x11B7, + 0x1100, 0x1166, 0x11B8, 0x1100, 0x1166, 0x11B9, 0x1100, 0x1166, + 0x11BA, 0x1100, 0x1166, 0x11BB, 0x1100, 0x1166, 0x11BC, 0x1100, + 0x1166, 0x11BD, 0x1100, 0x1166, 0x11BE, 0x1100, 0x1166, 0x11BF, + 0x1100, 0x1166, 0x11C0, 0x1100, 0x1166, 0x11C1, 0x1100, 0x1166, + 0x11C2, 0x1100, 0x1167, 0x1100, 0x1167, 0x11A8, 0x1100, 0x1167, + 0x11A9, 0x1100, 0x1167, 0x11AA, 0x1100, 0x1167, 0x11AB, 0x1100, + 0x1167, 0x11AC, 0x1100, 0x1167, 0x11AD, 0x1100, 0x1167, 0x11AE, + 0x1100, 0x1167, 0x11AF, 0x1100, 0x1167, 0x11B0, 0x1100, 0x1167, + 0x11B1, 0x1100, 0x1167, 0x11B2, 0x1100, 0x1167, 0x11B3, 0x1100, + 0x1167, 0x11B4, 0x1100, 0x1167, 0x11B5, 0x1100, 0x1167, 0x11B6, + 0x1100, 0x1167, 0x11B7, 0x1100, 0x1167, 0x11B8, 0x1100, 0x1167, + 0x11B9, 0x1100, 0x1167, 0x11BA, 0x1100, 0x1167, 0x11BB, 0x1100, + 0x1167, 0x11BC, 0x1100, 0x1167, 0x11BD, 0x1100, 0x1167, 0x11BE, + 0x1100, 0x1167, 0x11BF, 0x1100, 0x1167, 0x11C0, 0x1100, 0x1167, + 0x11C1, 0x1100, 0x1167, 0x11C2, 0x1100, 0x1168, 0x1100, 0x1168, + 0x11A8, 0x1100, 0x1168, 0x11A9, 0x1100, 0x1168, 0x11AA, 0x1100, + 0x1168, 0x11AB, 0x1100, 0x1168, 0x11AC, 0x1100, 0x1168, 0x11AD, + 0x1100, 0x1168, 0x11AE, 0x1100, 0x1168, 0x11AF, 0x1100, 0x1168, + 0x11B0, 0x1100, 0x1168, 0x11B1, 0x1100, 0x1168, 0x11B2, 0x1100, + 0x1168, 0x11B3, 0x1100, 0x1168, 0x11B4, 0x1100, 0x1168, 0x11B5, + 0x1100, 0x1168, 0x11B6, 0x1100, 0x1168, 0x11B7, 0x1100, 0x1168, + 0x11B8, 0x1100, 0x1168, 0x11B9, 0x1100, 0x1168, 0x11BA, 0x1100, + 0x1168, 0x11BB, 0x1100, 0x1168, 0x11BC, 0x1100, 0x1168, 0x11BD, + 0x1100, 0x1168, 0x11BE, 0x1100, 0x1168, 0x11BF, 0x1100, 0x1168, + 0x11C0, 0x1100, 0x1168, 0x11C1, 0x1100, 0x1168, 0x11C2, 0x1100, + 0x1169, 0x1100, 0x1169, 0x11A8, 0x1100, 0x1169, 0x11A9, 0x1100, + 0x1169, 0x11AA, 0x1100, 0x1169, 0x11AB, 0x1100, 0x1169, 0x11AC, + 0x1100, 0x1169, 0x11AD, 0x1100, 0x1169, 0x11AE, 0x1100, 0x1169, + 0x11AF, 0x1100, 0x1169, 0x11B0, 0x1100, 0x1169, 0x11B1, 0x1100, + 0x1169, 0x11B2, 0x1100, 0x1169, 0x11B3, 0x1100, 0x1169, 0x11B4, + 0x1100, 0x1169, 0x11B5, 0x1100, 0x1169, 0x11B6, 0x1100, 0x1169, + 0x11B7, 0x1100, 0x1169, 0x11B8, 0x1100, 0x1169, 0x11B9, 0x1100, + 0x1169, 0x11BA, 0x1100, 0x1169, 0x11BB, 0x1100, 0x1169, 0x11BC, + 0x1100, 0x1169, 0x11BD, 0x1100, 0x1169, 0x11BE, 0x1100, 0x1169, + 0x11BF, 0x1100, 0x1169, 0x11C0, 0x1100, 0x1169, 0x11C1, 0x1100, + 0x1169, 0x11C2, 0x1100, 0x116A, 0x1100, 0x116A, 0x11A8, 0x1100, + 0x116A, 0x11A9, 0x1100, 0x116A, 0x11AA, 0x1100, 0x116A, 0x11AB, + 0x1100, 0x116A, 0x11AC, 0x1100, 0x116A, 0x11AD, 0x1100, 0x116A, + 0x11AE, 0x1100, 0x116A, 0x11AF, 0x1100, 0x116A, 0x11B0, 0x1100, + 0x116A, 0x11B1, 0x1100, 0x116A, 0x11B2, 0x1100, 0x116A, 0x11B3, + 0x1100, 0x116A, 0x11B4, 0x1100, 0x116A, 0x11B5, 0x1100, 0x116A, + 0x11B6, 0x1100, 0x116A, 0x11B7, 0x1100, 0x116A, 0x11B8, 0x1100, + 0x116A, 0x11B9, 0x1100, 0x116A, 0x11BA, 0x1100, 0x116A, 0x11BB, + 0x1100, 0x116A, 0x11BC, 0x1100, 0x116A, 0x11BD, 0x1100, 0x116A, + 0x11BE, 0x1100, 0x116A, 0x11BF, 0x1100, 0x116A, 0x11C0, 0x1100, + 0x116A, 0x11C1, 0x1100, 0x116A, 0x11C2, 0x1100, 0x116B, 0x1100, + 0x116B, 0x11A8, 0x1100, 0x116B, 0x11A9, 0x1100, 0x116B, 0x11AA, + 0x1100, 0x116B, 0x11AB, 0x1100, 0x116B, 0x11AC, 0x1100, 0x116B, + 0x11AD, 0x1100, 0x116B, 0x11AE, 0x1100, 0x116B, 0x11AF, 0x1100, + 0x116B, 0x11B0, 0x1100, 0x116B, 0x11B1, 0x1100, 0x116B, 0x11B2, + 0x1100, 0x116B, 0x11B3, 0x1100, 0x116B, 0x11B4, 0x1100, 0x116B, + 0x11B5, 0x1100, 0x116B, 0x11B6, 0x1100, 0x116B, 0x11B7, 0x1100, + 0x116B, 0x11B8, 0x1100, 0x116B, 0x11B9, 0x1100, 0x116B, 0x11BA, + 0x1100, 0x116B, 0x11BB, 0x1100, 0x116B, 0x11BC, 0x1100, 0x116B, + 0x11BD, 0x1100, 0x116B, 0x11BE, 0x1100, 0x116B, 0x11BF, 0x1100, + 0x116B, 0x11C0, 0x1100, 0x116B, 0x11C1, 0x1100, 0x116B, 0x11C2, + 0x1100, 0x116C, 0x1100, 0x116C, 0x11A8, 0x1100, 0x116C, 0x11A9, + 0x1100, 0x116C, 0x11AA, 0x1100, 0x116C, 0x11AB, 0x1100, 0x116C, + 0x11AC, 0x1100, 0x116C, 0x11AD, 0x1100, 0x116C, 0x11AE, 0x1100, + 0x116C, 0x11AF, 0x1100, 0x116C, 0x11B0, 0x1100, 0x116C, 0x11B1, + 0x1100, 0x116C, 0x11B2, 0x1100, 0x116C, 0x11B3, 0x1100, 0x116C, + 0x11B4, 0x1100, 0x116C, 0x11B5, 0x1100, 0x116C, 0x11B6, 0x1100, + 0x116C, 0x11B7, 0x1100, 0x116C, 0x11B8, 0x1100, 0x116C, 0x11B9, + 0x1100, 0x116C, 0x11BA, 0x1100, 0x116C, 0x11BB, 0x1100, 0x116C, + 0x11BC, 0x1100, 0x116C, 0x11BD, 0x1100, 0x116C, 0x11BE, 0x1100, + 0x116C, 0x11BF, 0x1100, 0x116C, 0x11C0, 0x1100, 0x116C, 0x11C1, + 0x1100, 0x116C, 0x11C2, 0x1100, 0x116D, 0x1100, 0x116D, 0x11A8, + 0x1100, 0x116D, 0x11A9, 0x1100, 0x116D, 0x11AA, 0x1100, 0x116D, + 0x11AB, 0x1100, 0x116D, 0x11AC, 0x1100, 0x116D, 0x11AD, 0x1100, + 0x116D, 0x11AE, 0x1100, 0x116D, 0x11AF, 0x1100, 0x116D, 0x11B0, + 0x1100, 0x116D, 0x11B1, 0x1100, 0x116D, 0x11B2, 0x1100, 0x116D, + 0x11B3, 0x1100, 0x116D, 0x11B4, 0x1100, 0x116D, 0x11B5, 0x1100, + 0x116D, 0x11B6, 0x1100, 0x116D, 0x11B7, 0x1100, 0x116D, 0x11B8, + 0x1100, 0x116D, 0x11B9, 0x1100, 0x116D, 0x11BA, 0x1100, 0x116D, + 0x11BB, 0x1100, 0x116D, 0x11BC, 0x1100, 0x116D, 0x11BD, 0x1100, + 0x116D, 0x11BE, 0x1100, 0x116D, 0x11BF, 0x1100, 0x116D, 0x11C0, + 0x1100, 0x116D, 0x11C1, 0x1100, 0x116D, 0x11C2, 0x1100, 0x116E, + 0x1100, 0x116E, 0x11A8, 0x1100, 0x116E, 0x11A9, 0x1100, 0x116E, + 0x11AA, 0x1100, 0x116E, 0x11AB, 0x1100, 0x116E, 0x11AC, 0x1100, + 0x116E, 0x11AD, 0x1100, 0x116E, 0x11AE, 0x1100, 0x116E, 0x11AF, + 0x1100, 0x116E, 0x11B0, 0x1100, 0x116E, 0x11B1, 0x1100, 0x116E, + 0x11B2, 0x1100, 0x116E, 0x11B3, 0x1100, 0x116E, 0x11B4, 0x1100, + 0x116E, 0x11B5, 0x1100, 0x116E, 0x11B6, 0x1100, 0x116E, 0x11B7, + 0x1100, 0x116E, 0x11B8, 0x1100, 0x116E, 0x11B9, 0x1100, 0x116E, + 0x11BA, 0x1100, 0x116E, 0x11BB, 0x1100, 0x116E, 0x11BC, 0x1100, + 0x116E, 0x11BD, 0x1100, 0x116E, 0x11BE, 0x1100, 0x116E, 0x11BF, + 0x1100, 0x116E, 0x11C0, 0x1100, 0x116E, 0x11C1, 0x1100, 0x116E, + 0x11C2, 0x1100, 0x116F, 0x1100, 0x116F, 0x11A8, 0x1100, 0x116F, + 0x11A9, 0x1100, 0x116F, 0x11AA, 0x1100, 0x116F, 0x11AB, 0x1100, + 0x116F, 0x11AC, 0x1100, 0x116F, 0x11AD, 0x1100, 0x116F, 0x11AE, + 0x1100, 0x116F, 0x11AF, 0x1100, 0x116F, 0x11B0, 0x1100, 0x116F, + 0x11B1, 0x1100, 0x116F, 0x11B2, 0x1100, 0x116F, 0x11B3, 0x1100, + 0x116F, 0x11B4, 0x1100, 0x116F, 0x11B5, 0x1100, 0x116F, 0x11B6, + 0x1100, 0x116F, 0x11B7, 0x1100, 0x116F, 0x11B8, 0x1100, 0x116F, + 0x11B9, 0x1100, 0x116F, 0x11BA, 0x1100, 0x116F, 0x11BB, 0x1100, + 0x116F, 0x11BC, 0x1100, 0x116F, 0x11BD, 0x1100, 0x116F, 0x11BE, + 0x1100, 0x116F, 0x11BF, 0x1100, 0x116F, 0x11C0, 0x1100, 0x116F, + 0x11C1, 0x1100, 0x116F, 0x11C2, 0x1100, 0x1170, 0x1100, 0x1170, + 0x11A8, 0x1100, 0x1170, 0x11A9, 0x1100, 0x1170, 0x11AA, 0x1100, + 0x1170, 0x11AB, 0x1100, 0x1170, 0x11AC, 0x1100, 0x1170, 0x11AD, + 0x1100, 0x1170, 0x11AE, 0x1100, 0x1170, 0x11AF, 0x1100, 0x1170, + 0x11B0, 0x1100, 0x1170, 0x11B1, 0x1100, 0x1170, 0x11B2, 0x1100, + 0x1170, 0x11B3, 0x1100, 0x1170, 0x11B4, 0x1100, 0x1170, 0x11B5, + 0x1100, 0x1170, 0x11B6, 0x1100, 0x1170, 0x11B7, 0x1100, 0x1170, + 0x11B8, 0x1100, 0x1170, 0x11B9, 0x1100, 0x1170, 0x11BA, 0x1100, + 0x1170, 0x11BB, 0x1100, 0x1170, 0x11BC, 0x1100, 0x1170, 0x11BD, + 0x1100, 0x1170, 0x11BE, 0x1100, 0x1170, 0x11BF, 0x1100, 0x1170, + 0x11C0, 0x1100, 0x1170, 0x11C1, 0x1100, 0x1170, 0x11C2, 0x1100, + 0x1171, 0x1100, 0x1171, 0x11A8, 0x1100, 0x1171, 0x11A9, 0x1100, + 0x1171, 0x11AA, 0x1100, 0x1171, 0x11AB, 0x1100, 0x1171, 0x11AC, + 0x1100, 0x1171, 0x11AD, 0x1100, 0x1171, 0x11AE, 0x1100, 0x1171, + 0x11AF, 0x1100, 0x1171, 0x11B0, 0x1100, 0x1171, 0x11B1, 0x1100, + 0x1171, 0x11B2, 0x1100, 0x1171, 0x11B3, 0x1100, 0x1171, 0x11B4, + 0x1100, 0x1171, 0x11B5, 0x1100, 0x1171, 0x11B6, 0x1100, 0x1171, + 0x11B7, 0x1100, 0x1171, 0x11B8, 0x1100, 0x1171, 0x11B9, 0x1100, + 0x1171, 0x11BA, 0x1100, 0x1171, 0x11BB, 0x1100, 0x1171, 0x11BC, + 0x1100, 0x1171, 0x11BD, 0x1100, 0x1171, 0x11BE, 0x1100, 0x1171, + 0x11BF, 0x1100, 0x1171, 0x11C0, 0x1100, 0x1171, 0x11C1, 0x1100, + 0x1171, 0x11C2, 0x1100, 0x1172, 0x1100, 0x1172, 0x11A8, 0x1100, + 0x1172, 0x11A9, 0x1100, 0x1172, 0x11AA, 0x1100, 0x1172, 0x11AB, + 0x1100, 0x1172, 0x11AC, 0x1100, 0x1172, 0x11AD, 0x1100, 0x1172, + 0x11AE, 0x1100, 0x1172, 0x11AF, 0x1100, 0x1172, 0x11B0, 0x1100, + 0x1172, 0x11B1, 0x1100, 0x1172, 0x11B2, 0x1100, 0x1172, 0x11B3, + 0x1100, 0x1172, 0x11B4, 0x1100, 0x1172, 0x11B5, 0x1100, 0x1172, + 0x11B6, 0x1100, 0x1172, 0x11B7, 0x1100, 0x1172, 0x11B8, 0x1100, + 0x1172, 0x11B9, 0x1100, 0x1172, 0x11BA, 0x1100, 0x1172, 0x11BB, + 0x1100, 0x1172, 0x11BC, 0x1100, 0x1172, 0x11BD, 0x1100, 0x1172, + 0x11BE, 0x1100, 0x1172, 0x11BF, 0x1100, 0x1172, 0x11C0, 0x1100, + 0x1172, 0x11C1, 0x1100, 0x1172, 0x11C2, 0x1100, 0x1173, 0x1100, + 0x1173, 0x11A8, 0x1100, 0x1173, 0x11A9, 0x1100, 0x1173, 0x11AA, + 0x1100, 0x1173, 0x11AB, 0x1100, 0x1173, 0x11AC, 0x1100, 0x1173, + 0x11AD, 0x1100, 0x1173, 0x11AE, 0x1100, 0x1173, 0x11AF, 0x1100, + 0x1173, 0x11B0, 0x1100, 0x1173, 0x11B1, 0x1100, 0x1173, 0x11B2, + 0x1100, 0x1173, 0x11B3, 0x1100, 0x1173, 0x11B4, 0x1100, 0x1173, + 0x11B5, 0x1100, 0x1173, 0x11B6, 0x1100, 0x1173, 0x11B7, 0x1100, + 0x1173, 0x11B8, 0x1100, 0x1173, 0x11B9, 0x1100, 0x1173, 0x11BA, + 0x1100, 0x1173, 0x11BB, 0x1100, 0x1173, 0x11BC, 0x1100, 0x1173, + 0x11BD, 0x1100, 0x1173, 0x11BE, 0x1100, 0x1173, 0x11BF, 0x1100, + 0x1173, 0x11C0, 0x1100, 0x1173, 0x11C1, 0x1100, 0x1173, 0x11C2, + 0x1100, 0x1174, 0x1100, 0x1174, 0x11A8, 0x1100, 0x1174, 0x11A9, + 0x1100, 0x1174, 0x11AA, 0x1100, 0x1174, 0x11AB, 0x1100, 0x1174, + 0x11AC, 0x1100, 0x1174, 0x11AD, 0x1100, 0x1174, 0x11AE, 0x1100, + 0x1174, 0x11AF, 0x1100, 0x1174, 0x11B0, 0x1100, 0x1174, 0x11B1, + 0x1100, 0x1174, 0x11B2, 0x1100, 0x1174, 0x11B3, 0x1100, 0x1174, + 0x11B4, 0x1100, 0x1174, 0x11B5, 0x1100, 0x1174, 0x11B6, 0x1100, + 0x1174, 0x11B7, 0x1100, 0x1174, 0x11B8, 0x1100, 0x1174, 0x11B9, + 0x1100, 0x1174, 0x11BA, 0x1100, 0x1174, 0x11BB, 0x1100, 0x1174, + 0x11BC, 0x1100, 0x1174, 0x11BD, 0x1100, 0x1174, 0x11BE, 0x1100, + 0x1174, 0x11BF, 0x1100, 0x1174, 0x11C0, 0x1100, 0x1174, 0x11C1, + 0x1100, 0x1174, 0x11C2, 0x1100, 0x1175, 0x1100, 0x1175, 0x11A8, + 0x1100, 0x1175, 0x11A9, 0x1100, 0x1175, 0x11AA, 0x1100, 0x1175, + 0x11AB, 0x1100, 0x1175, 0x11AC, 0x1100, 0x1175, 0x11AD, 0x1100, + 0x1175, 0x11AE, 0x1100, 0x1175, 0x11AF, 0x1100, 0x1175, 0x11B0, + 0x1100, 0x1175, 0x11B1, 0x1100, 0x1175, 0x11B2, 0x1100, 0x1175, + 0x11B3, 0x1100, 0x1175, 0x11B4, 0x1100, 0x1175, 0x11B5, 0x1100, + 0x1175, 0x11B6, 0x1100, 0x1175, 0x11B7, 0x1100, 0x1175, 0x11B8, + 0x1100, 0x1175, 0x11B9, 0x1100, 0x1175, 0x11BA, 0x1100, 0x1175, + 0x11BB, 0x1100, 0x1175, 0x11BC, 0x1100, 0x1175, 0x11BD, 0x1100, + 0x1175, 0x11BE, 0x1100, 0x1175, 0x11BF, 0x1100, 0x1175, 0x11C0, + 0x1100, 0x1175, 0x11C1, 0x1100, 0x1175, 0x11C2, 0x1101, 0x1161, + 0x1101, 0x1161, 0x11A8, 0x1101, 0x1161, 0x11A9, 0x1101, 0x1161, + 0x11AA, 0x1101, 0x1161, 0x11AB, 0x1101, 0x1161, 0x11AC, 0x1101, + 0x1161, 0x11AD, 0x1101, 0x1161, 0x11AE, 0x1101, 0x1161, 0x11AF, + 0x1101, 0x1161, 0x11B0, 0x1101, 0x1161, 0x11B1, 0x1101, 0x1161, + 0x11B2, 0x1101, 0x1161, 0x11B3, 0x1101, 0x1161, 0x11B4, 0x1101, + 0x1161, 0x11B5, 0x1101, 0x1161, 0x11B6, 0x1101, 0x1161, 0x11B7, + 0x1101, 0x1161, 0x11B8, 0x1101, 0x1161, 0x11B9, 0x1101, 0x1161, + 0x11BA, 0x1101, 0x1161, 0x11BB, 0x1101, 0x1161, 0x11BC, 0x1101, + 0x1161, 0x11BD, 0x1101, 0x1161, 0x11BE, 0x1101, 0x1161, 0x11BF, + 0x1101, 0x1161, 0x11C0, 0x1101, 0x1161, 0x11C1, 0x1101, 0x1161, + 0x11C2, 0x1101, 0x1162, 0x1101, 0x1162, 0x11A8, 0x1101, 0x1162, + 0x11A9, 0x1101, 0x1162, 0x11AA, 0x1101, 0x1162, 0x11AB, 0x1101, + 0x1162, 0x11AC, 0x1101, 0x1162, 0x11AD, 0x1101, 0x1162, 0x11AE, + 0x1101, 0x1162, 0x11AF, 0x1101, 0x1162, 0x11B0, 0x1101, 0x1162, + 0x11B1, 0x1101, 0x1162, 0x11B2, 0x1101, 0x1162, 0x11B3, 0x1101, + 0x1162, 0x11B4, 0x1101, 0x1162, 0x11B5, 0x1101, 0x1162, 0x11B6, + 0x1101, 0x1162, 0x11B7, 0x1101, 0x1162, 0x11B8, 0x1101, 0x1162, + 0x11B9, 0x1101, 0x1162, 0x11BA, 0x1101, 0x1162, 0x11BB, 0x1101, + 0x1162, 0x11BC, 0x1101, 0x1162, 0x11BD, 0x1101, 0x1162, 0x11BE, + 0x1101, 0x1162, 0x11BF, 0x1101, 0x1162, 0x11C0, 0x1101, 0x1162, + 0x11C1, 0x1101, 0x1162, 0x11C2, 0x1101, 0x1163, 0x1101, 0x1163, + 0x11A8, 0x1101, 0x1163, 0x11A9, 0x1101, 0x1163, 0x11AA, 0x1101, + 0x1163, 0x11AB, 0x1101, 0x1163, 0x11AC, 0x1101, 0x1163, 0x11AD, + 0x1101, 0x1163, 0x11AE, 0x1101, 0x1163, 0x11AF, 0x1101, 0x1163, + 0x11B0, 0x1101, 0x1163, 0x11B1, 0x1101, 0x1163, 0x11B2, 0x1101, + 0x1163, 0x11B3, 0x1101, 0x1163, 0x11B4, 0x1101, 0x1163, 0x11B5, + 0x1101, 0x1163, 0x11B6, 0x1101, 0x1163, 0x11B7, 0x1101, 0x1163, + 0x11B8, 0x1101, 0x1163, 0x11B9, 0x1101, 0x1163, 0x11BA, 0x1101, + 0x1163, 0x11BB, 0x1101, 0x1163, 0x11BC, 0x1101, 0x1163, 0x11BD, + 0x1101, 0x1163, 0x11BE, 0x1101, 0x1163, 0x11BF, 0x1101, 0x1163, + 0x11C0, 0x1101, 0x1163, 0x11C1, 0x1101, 0x1163, 0x11C2, 0x1101, + 0x1164, 0x1101, 0x1164, 0x11A8, 0x1101, 0x1164, 0x11A9, 0x1101, + 0x1164, 0x11AA, 0x1101, 0x1164, 0x11AB, 0x1101, 0x1164, 0x11AC, + 0x1101, 0x1164, 0x11AD, 0x1101, 0x1164, 0x11AE, 0x1101, 0x1164, + 0x11AF, 0x1101, 0x1164, 0x11B0, 0x1101, 0x1164, 0x11B1, 0x1101, + 0x1164, 0x11B2, 0x1101, 0x1164, 0x11B3, 0x1101, 0x1164, 0x11B4, + 0x1101, 0x1164, 0x11B5, 0x1101, 0x1164, 0x11B6, 0x1101, 0x1164, + 0x11B7, 0x1101, 0x1164, 0x11B8, 0x1101, 0x1164, 0x11B9, 0x1101, + 0x1164, 0x11BA, 0x1101, 0x1164, 0x11BB, 0x1101, 0x1164, 0x11BC, + 0x1101, 0x1164, 0x11BD, 0x1101, 0x1164, 0x11BE, 0x1101, 0x1164, + 0x11BF, 0x1101, 0x1164, 0x11C0, 0x1101, 0x1164, 0x11C1, 0x1101, + 0x1164, 0x11C2, 0x1101, 0x1165, 0x1101, 0x1165, 0x11A8, 0x1101, + 0x1165, 0x11A9, 0x1101, 0x1165, 0x11AA, 0x1101, 0x1165, 0x11AB, + 0x1101, 0x1165, 0x11AC, 0x1101, 0x1165, 0x11AD, 0x1101, 0x1165, + 0x11AE, 0x1101, 0x1165, 0x11AF, 0x1101, 0x1165, 0x11B0, 0x1101, + 0x1165, 0x11B1, 0x1101, 0x1165, 0x11B2, 0x1101, 0x1165, 0x11B3, + 0x1101, 0x1165, 0x11B4, 0x1101, 0x1165, 0x11B5, 0x1101, 0x1165, + 0x11B6, 0x1101, 0x1165, 0x11B7, 0x1101, 0x1165, 0x11B8, 0x1101, + 0x1165, 0x11B9, 0x1101, 0x1165, 0x11BA, 0x1101, 0x1165, 0x11BB, + 0x1101, 0x1165, 0x11BC, 0x1101, 0x1165, 0x11BD, 0x1101, 0x1165, + 0x11BE, 0x1101, 0x1165, 0x11BF, 0x1101, 0x1165, 0x11C0, 0x1101, + 0x1165, 0x11C1, 0x1101, 0x1165, 0x11C2, 0x1101, 0x1166, 0x1101, + 0x1166, 0x11A8, 0x1101, 0x1166, 0x11A9, 0x1101, 0x1166, 0x11AA, + 0x1101, 0x1166, 0x11AB, 0x1101, 0x1166, 0x11AC, 0x1101, 0x1166, + 0x11AD, 0x1101, 0x1166, 0x11AE, 0x1101, 0x1166, 0x11AF, 0x1101, + 0x1166, 0x11B0, 0x1101, 0x1166, 0x11B1, 0x1101, 0x1166, 0x11B2, + 0x1101, 0x1166, 0x11B3, 0x1101, 0x1166, 0x11B4, 0x1101, 0x1166, + 0x11B5, 0x1101, 0x1166, 0x11B6, 0x1101, 0x1166, 0x11B7, 0x1101, + 0x1166, 0x11B8, 0x1101, 0x1166, 0x11B9, 0x1101, 0x1166, 0x11BA, + 0x1101, 0x1166, 0x11BB, 0x1101, 0x1166, 0x11BC, 0x1101, 0x1166, + 0x11BD, 0x1101, 0x1166, 0x11BE, 0x1101, 0x1166, 0x11BF, 0x1101, + 0x1166, 0x11C0, 0x1101, 0x1166, 0x11C1, 0x1101, 0x1166, 0x11C2, + 0x1101, 0x1167, 0x1101, 0x1167, 0x11A8, 0x1101, 0x1167, 0x11A9, + 0x1101, 0x1167, 0x11AA, 0x1101, 0x1167, 0x11AB, 0x1101, 0x1167, + 0x11AC, 0x1101, 0x1167, 0x11AD, 0x1101, 0x1167, 0x11AE, 0x1101, + 0x1167, 0x11AF, 0x1101, 0x1167, 0x11B0, 0x1101, 0x1167, 0x11B1, + 0x1101, 0x1167, 0x11B2, 0x1101, 0x1167, 0x11B3, 0x1101, 0x1167, + 0x11B4, 0x1101, 0x1167, 0x11B5, 0x1101, 0x1167, 0x11B6, 0x1101, + 0x1167, 0x11B7, 0x1101, 0x1167, 0x11B8, 0x1101, 0x1167, 0x11B9, + 0x1101, 0x1167, 0x11BA, 0x1101, 0x1167, 0x11BB, 0x1101, 0x1167, + 0x11BC, 0x1101, 0x1167, 0x11BD, 0x1101, 0x1167, 0x11BE, 0x1101, + 0x1167, 0x11BF, 0x1101, 0x1167, 0x11C0, 0x1101, 0x1167, 0x11C1, + 0x1101, 0x1167, 0x11C2, 0x1101, 0x1168, 0x1101, 0x1168, 0x11A8, + 0x1101, 0x1168, 0x11A9, 0x1101, 0x1168, 0x11AA, 0x1101, 0x1168, + 0x11AB, 0x1101, 0x1168, 0x11AC, 0x1101, 0x1168, 0x11AD, 0x1101, + 0x1168, 0x11AE, 0x1101, 0x1168, 0x11AF, 0x1101, 0x1168, 0x11B0, + 0x1101, 0x1168, 0x11B1, 0x1101, 0x1168, 0x11B2, 0x1101, 0x1168, + 0x11B3, 0x1101, 0x1168, 0x11B4, 0x1101, 0x1168, 0x11B5, 0x1101, + 0x1168, 0x11B6, 0x1101, 0x1168, 0x11B7, 0x1101, 0x1168, 0x11B8, + 0x1101, 0x1168, 0x11B9, 0x1101, 0x1168, 0x11BA, 0x1101, 0x1168, + 0x11BB, 0x1101, 0x1168, 0x11BC, 0x1101, 0x1168, 0x11BD, 0x1101, + 0x1168, 0x11BE, 0x1101, 0x1168, 0x11BF, 0x1101, 0x1168, 0x11C0, + 0x1101, 0x1168, 0x11C1, 0x1101, 0x1168, 0x11C2, 0x1101, 0x1169, + 0x1101, 0x1169, 0x11A8, 0x1101, 0x1169, 0x11A9, 0x1101, 0x1169, + 0x11AA, 0x1101, 0x1169, 0x11AB, 0x1101, 0x1169, 0x11AC, 0x1101, + 0x1169, 0x11AD, 0x1101, 0x1169, 0x11AE, 0x1101, 0x1169, 0x11AF, + 0x1101, 0x1169, 0x11B0, 0x1101, 0x1169, 0x11B1, 0x1101, 0x1169, + 0x11B2, 0x1101, 0x1169, 0x11B3, 0x1101, 0x1169, 0x11B4, 0x1101, + 0x1169, 0x11B5, 0x1101, 0x1169, 0x11B6, 0x1101, 0x1169, 0x11B7, + 0x1101, 0x1169, 0x11B8, 0x1101, 0x1169, 0x11B9, 0x1101, 0x1169, + 0x11BA, 0x1101, 0x1169, 0x11BB, 0x1101, 0x1169, 0x11BC, 0x1101, + 0x1169, 0x11BD, 0x1101, 0x1169, 0x11BE, 0x1101, 0x1169, 0x11BF, + 0x1101, 0x1169, 0x11C0, 0x1101, 0x1169, 0x11C1, 0x1101, 0x1169, + 0x11C2, 0x1101, 0x116A, 0x1101, 0x116A, 0x11A8, 0x1101, 0x116A, + 0x11A9, 0x1101, 0x116A, 0x11AA, 0x1101, 0x116A, 0x11AB, 0x1101, + 0x116A, 0x11AC, 0x1101, 0x116A, 0x11AD, 0x1101, 0x116A, 0x11AE, + 0x1101, 0x116A, 0x11AF, 0x1101, 0x116A, 0x11B0, 0x1101, 0x116A, + 0x11B1, 0x1101, 0x116A, 0x11B2, 0x1101, 0x116A, 0x11B3, 0x1101, + 0x116A, 0x11B4, 0x1101, 0x116A, 0x11B5, 0x1101, 0x116A, 0x11B6, + 0x1101, 0x116A, 0x11B7, 0x1101, 0x116A, 0x11B8, 0x1101, 0x116A, + 0x11B9, 0x1101, 0x116A, 0x11BA, 0x1101, 0x116A, 0x11BB, 0x1101, + 0x116A, 0x11BC, 0x1101, 0x116A, 0x11BD, 0x1101, 0x116A, 0x11BE, + 0x1101, 0x116A, 0x11BF, 0x1101, 0x116A, 0x11C0, 0x1101, 0x116A, + 0x11C1, 0x1101, 0x116A, 0x11C2, 0x1101, 0x116B, 0x1101, 0x116B, + 0x11A8, 0x1101, 0x116B, 0x11A9, 0x1101, 0x116B, 0x11AA, 0x1101, + 0x116B, 0x11AB, 0x1101, 0x116B, 0x11AC, 0x1101, 0x116B, 0x11AD, + 0x1101, 0x116B, 0x11AE, 0x1101, 0x116B, 0x11AF, 0x1101, 0x116B, + 0x11B0, 0x1101, 0x116B, 0x11B1, 0x1101, 0x116B, 0x11B2, 0x1101, + 0x116B, 0x11B3, 0x1101, 0x116B, 0x11B4, 0x1101, 0x116B, 0x11B5, + 0x1101, 0x116B, 0x11B6, 0x1101, 0x116B, 0x11B7, 0x1101, 0x116B, + 0x11B8, 0x1101, 0x116B, 0x11B9, 0x1101, 0x116B, 0x11BA, 0x1101, + 0x116B, 0x11BB, 0x1101, 0x116B, 0x11BC, 0x1101, 0x116B, 0x11BD, + 0x1101, 0x116B, 0x11BE, 0x1101, 0x116B, 0x11BF, 0x1101, 0x116B, + 0x11C0, 0x1101, 0x116B, 0x11C1, 0x1101, 0x116B, 0x11C2, 0x1101, + 0x116C, 0x1101, 0x116C, 0x11A8, 0x1101, 0x116C, 0x11A9, 0x1101, + 0x116C, 0x11AA, 0x1101, 0x116C, 0x11AB, 0x1101, 0x116C, 0x11AC, + 0x1101, 0x116C, 0x11AD, 0x1101, 0x116C, 0x11AE, 0x1101, 0x116C, + 0x11AF, 0x1101, 0x116C, 0x11B0, 0x1101, 0x116C, 0x11B1, 0x1101, + 0x116C, 0x11B2, 0x1101, 0x116C, 0x11B3, 0x1101, 0x116C, 0x11B4, + 0x1101, 0x116C, 0x11B5, 0x1101, 0x116C, 0x11B6, 0x1101, 0x116C, + 0x11B7, 0x1101, 0x116C, 0x11B8, 0x1101, 0x116C, 0x11B9, 0x1101, + 0x116C, 0x11BA, 0x1101, 0x116C, 0x11BB, 0x1101, 0x116C, 0x11BC, + 0x1101, 0x116C, 0x11BD, 0x1101, 0x116C, 0x11BE, 0x1101, 0x116C, + 0x11BF, 0x1101, 0x116C, 0x11C0, 0x1101, 0x116C, 0x11C1, 0x1101, + 0x116C, 0x11C2, 0x1101, 0x116D, 0x1101, 0x116D, 0x11A8, 0x1101, + 0x116D, 0x11A9, 0x1101, 0x116D, 0x11AA, 0x1101, 0x116D, 0x11AB, + 0x1101, 0x116D, 0x11AC, 0x1101, 0x116D, 0x11AD, 0x1101, 0x116D, + 0x11AE, 0x1101, 0x116D, 0x11AF, 0x1101, 0x116D, 0x11B0, 0x1101, + 0x116D, 0x11B1, 0x1101, 0x116D, 0x11B2, 0x1101, 0x116D, 0x11B3, + 0x1101, 0x116D, 0x11B4, 0x1101, 0x116D, 0x11B5, 0x1101, 0x116D, + 0x11B6, 0x1101, 0x116D, 0x11B7, 0x1101, 0x116D, 0x11B8, 0x1101, + 0x116D, 0x11B9, 0x1101, 0x116D, 0x11BA, 0x1101, 0x116D, 0x11BB, + 0x1101, 0x116D, 0x11BC, 0x1101, 0x116D, 0x11BD, 0x1101, 0x116D, + 0x11BE, 0x1101, 0x116D, 0x11BF, 0x1101, 0x116D, 0x11C0, 0x1101, + 0x116D, 0x11C1, 0x1101, 0x116D, 0x11C2, 0x1101, 0x116E, 0x1101, + 0x116E, 0x11A8, 0x1101, 0x116E, 0x11A9, 0x1101, 0x116E, 0x11AA, + 0x1101, 0x116E, 0x11AB, 0x1101, 0x116E, 0x11AC, 0x1101, 0x116E, + 0x11AD, 0x1101, 0x116E, 0x11AE, 0x1101, 0x116E, 0x11AF, 0x1101, + 0x116E, 0x11B0, 0x1101, 0x116E, 0x11B1, 0x1101, 0x116E, 0x11B2, + 0x1101, 0x116E, 0x11B3, 0x1101, 0x116E, 0x11B4, 0x1101, 0x116E, + 0x11B5, 0x1101, 0x116E, 0x11B6, 0x1101, 0x116E, 0x11B7, 0x1101, + 0x116E, 0x11B8, 0x1101, 0x116E, 0x11B9, 0x1101, 0x116E, 0x11BA, + 0x1101, 0x116E, 0x11BB, 0x1101, 0x116E, 0x11BC, 0x1101, 0x116E, + 0x11BD, 0x1101, 0x116E, 0x11BE, 0x1101, 0x116E, 0x11BF, 0x1101, + 0x116E, 0x11C0, 0x1101, 0x116E, 0x11C1, 0x1101, 0x116E, 0x11C2, + 0x1101, 0x116F, 0x1101, 0x116F, 0x11A8, 0x1101, 0x116F, 0x11A9, + 0x1101, 0x116F, 0x11AA, 0x1101, 0x116F, 0x11AB, 0x1101, 0x116F, + 0x11AC, 0x1101, 0x116F, 0x11AD, 0x1101, 0x116F, 0x11AE, 0x1101, + 0x116F, 0x11AF, 0x1101, 0x116F, 0x11B0, 0x1101, 0x116F, 0x11B1, + 0x1101, 0x116F, 0x11B2, 0x1101, 0x116F, 0x11B3, 0x1101, 0x116F, + 0x11B4, 0x1101, 0x116F, 0x11B5, 0x1101, 0x116F, 0x11B6, 0x1101, + 0x116F, 0x11B7, 0x1101, 0x116F, 0x11B8, 0x1101, 0x116F, 0x11B9, + 0x1101, 0x116F, 0x11BA, 0x1101, 0x116F, 0x11BB, 0x1101, 0x116F, + 0x11BC, 0x1101, 0x116F, 0x11BD, 0x1101, 0x116F, 0x11BE, 0x1101, + 0x116F, 0x11BF, 0x1101, 0x116F, 0x11C0, 0x1101, 0x116F, 0x11C1, + 0x1101, 0x116F, 0x11C2, 0x1101, 0x1170, 0x1101, 0x1170, 0x11A8, + 0x1101, 0x1170, 0x11A9, 0x1101, 0x1170, 0x11AA, 0x1101, 0x1170, + 0x11AB, 0x1101, 0x1170, 0x11AC, 0x1101, 0x1170, 0x11AD, 0x1101, + 0x1170, 0x11AE, 0x1101, 0x1170, 0x11AF, 0x1101, 0x1170, 0x11B0, + 0x1101, 0x1170, 0x11B1, 0x1101, 0x1170, 0x11B2, 0x1101, 0x1170, + 0x11B3, 0x1101, 0x1170, 0x11B4, 0x1101, 0x1170, 0x11B5, 0x1101, + 0x1170, 0x11B6, 0x1101, 0x1170, 0x11B7, 0x1101, 0x1170, 0x11B8, + 0x1101, 0x1170, 0x11B9, 0x1101, 0x1170, 0x11BA, 0x1101, 0x1170, + 0x11BB, 0x1101, 0x1170, 0x11BC, 0x1101, 0x1170, 0x11BD, 0x1101, + 0x1170, 0x11BE, 0x1101, 0x1170, 0x11BF, 0x1101, 0x1170, 0x11C0, + 0x1101, 0x1170, 0x11C1, 0x1101, 0x1170, 0x11C2, 0x1101, 0x1171, + 0x1101, 0x1171, 0x11A8, 0x1101, 0x1171, 0x11A9, 0x1101, 0x1171, + 0x11AA, 0x1101, 0x1171, 0x11AB, 0x1101, 0x1171, 0x11AC, 0x1101, + 0x1171, 0x11AD, 0x1101, 0x1171, 0x11AE, 0x1101, 0x1171, 0x11AF, + 0x1101, 0x1171, 0x11B0, 0x1101, 0x1171, 0x11B1, 0x1101, 0x1171, + 0x11B2, 0x1101, 0x1171, 0x11B3, 0x1101, 0x1171, 0x11B4, 0x1101, + 0x1171, 0x11B5, 0x1101, 0x1171, 0x11B6, 0x1101, 0x1171, 0x11B7, + 0x1101, 0x1171, 0x11B8, 0x1101, 0x1171, 0x11B9, 0x1101, 0x1171, + 0x11BA, 0x1101, 0x1171, 0x11BB, 0x1101, 0x1171, 0x11BC, 0x1101, + 0x1171, 0x11BD, 0x1101, 0x1171, 0x11BE, 0x1101, 0x1171, 0x11BF, + 0x1101, 0x1171, 0x11C0, 0x1101, 0x1171, 0x11C1, 0x1101, 0x1171, + 0x11C2, 0x1101, 0x1172, 0x1101, 0x1172, 0x11A8, 0x1101, 0x1172, + 0x11A9, 0x1101, 0x1172, 0x11AA, 0x1101, 0x1172, 0x11AB, 0x1101, + 0x1172, 0x11AC, 0x1101, 0x1172, 0x11AD, 0x1101, 0x1172, 0x11AE, + 0x1101, 0x1172, 0x11AF, 0x1101, 0x1172, 0x11B0, 0x1101, 0x1172, + 0x11B1, 0x1101, 0x1172, 0x11B2, 0x1101, 0x1172, 0x11B3, 0x1101, + 0x1172, 0x11B4, 0x1101, 0x1172, 0x11B5, 0x1101, 0x1172, 0x11B6, + 0x1101, 0x1172, 0x11B7, 0x1101, 0x1172, 0x11B8, 0x1101, 0x1172, + 0x11B9, 0x1101, 0x1172, 0x11BA, 0x1101, 0x1172, 0x11BB, 0x1101, + 0x1172, 0x11BC, 0x1101, 0x1172, 0x11BD, 0x1101, 0x1172, 0x11BE, + 0x1101, 0x1172, 0x11BF, 0x1101, 0x1172, 0x11C0, 0x1101, 0x1172, + 0x11C1, 0x1101, 0x1172, 0x11C2, 0x1101, 0x1173, 0x1101, 0x1173, + 0x11A8, 0x1101, 0x1173, 0x11A9, 0x1101, 0x1173, 0x11AA, 0x1101, + 0x1173, 0x11AB, 0x1101, 0x1173, 0x11AC, 0x1101, 0x1173, 0x11AD, + 0x1101, 0x1173, 0x11AE, 0x1101, 0x1173, 0x11AF, 0x1101, 0x1173, + 0x11B0, 0x1101, 0x1173, 0x11B1, 0x1101, 0x1173, 0x11B2, 0x1101, + 0x1173, 0x11B3, 0x1101, 0x1173, 0x11B4, 0x1101, 0x1173, 0x11B5, + 0x1101, 0x1173, 0x11B6, 0x1101, 0x1173, 0x11B7, 0x1101, 0x1173, + 0x11B8, 0x1101, 0x1173, 0x11B9, 0x1101, 0x1173, 0x11BA, 0x1101, + 0x1173, 0x11BB, 0x1101, 0x1173, 0x11BC, 0x1101, 0x1173, 0x11BD, + 0x1101, 0x1173, 0x11BE, 0x1101, 0x1173, 0x11BF, 0x1101, 0x1173, + 0x11C0, 0x1101, 0x1173, 0x11C1, 0x1101, 0x1173, 0x11C2, 0x1101, + 0x1174, 0x1101, 0x1174, 0x11A8, 0x1101, 0x1174, 0x11A9, 0x1101, + 0x1174, 0x11AA, 0x1101, 0x1174, 0x11AB, 0x1101, 0x1174, 0x11AC, + 0x1101, 0x1174, 0x11AD, 0x1101, 0x1174, 0x11AE, 0x1101, 0x1174, + 0x11AF, 0x1101, 0x1174, 0x11B0, 0x1101, 0x1174, 0x11B1, 0x1101, + 0x1174, 0x11B2, 0x1101, 0x1174, 0x11B3, 0x1101, 0x1174, 0x11B4, + 0x1101, 0x1174, 0x11B5, 0x1101, 0x1174, 0x11B6, 0x1101, 0x1174, + 0x11B7, 0x1101, 0x1174, 0x11B8, 0x1101, 0x1174, 0x11B9, 0x1101, + 0x1174, 0x11BA, 0x1101, 0x1174, 0x11BB, 0x1101, 0x1174, 0x11BC, + 0x1101, 0x1174, 0x11BD, 0x1101, 0x1174, 0x11BE, 0x1101, 0x1174, + 0x11BF, 0x1101, 0x1174, 0x11C0, 0x1101, 0x1174, 0x11C1, 0x1101, + 0x1174, 0x11C2, 0x1101, 0x1175, 0x1101, 0x1175, 0x11A8, 0x1101, + 0x1175, 0x11A9, 0x1101, 0x1175, 0x11AA, 0x1101, 0x1175, 0x11AB, + 0x1101, 0x1175, 0x11AC, 0x1101, 0x1175, 0x11AD, 0x1101, 0x1175, + 0x11AE, 0x1101, 0x1175, 0x11AF, 0x1101, 0x1175, 0x11B0, 0x1101, + 0x1175, 0x11B1, 0x1101, 0x1175, 0x11B2, 0x1101, 0x1175, 0x11B3, + 0x1101, 0x1175, 0x11B4, 0x1101, 0x1175, 0x11B5, 0x1101, 0x1175, + 0x11B6, 0x1101, 0x1175, 0x11B7, 0x1101, 0x1175, 0x11B8, 0x1101, + 0x1175, 0x11B9, 0x1101, 0x1175, 0x11BA, 0x1101, 0x1175, 0x11BB, + 0x1101, 0x1175, 0x11BC, 0x1101, 0x1175, 0x11BD, 0x1101, 0x1175, + 0x11BE, 0x1101, 0x1175, 0x11BF, 0x1101, 0x1175, 0x11C0, 0x1101, + 0x1175, 0x11C1, 0x1101, 0x1175, 0x11C2, 0x1102, 0x1161, 0x1102, + 0x1161, 0x11A8, 0x1102, 0x1161, 0x11A9, 0x1102, 0x1161, 0x11AA, + 0x1102, 0x1161, 0x11AB, 0x1102, 0x1161, 0x11AC, 0x1102, 0x1161, + 0x11AD, 0x1102, 0x1161, 0x11AE, 0x1102, 0x1161, 0x11AF, 0x1102, + 0x1161, 0x11B0, 0x1102, 0x1161, 0x11B1, 0x1102, 0x1161, 0x11B2, + 0x1102, 0x1161, 0x11B3, 0x1102, 0x1161, 0x11B4, 0x1102, 0x1161, + 0x11B5, 0x1102, 0x1161, 0x11B6, 0x1102, 0x1161, 0x11B7, 0x1102, + 0x1161, 0x11B8, 0x1102, 0x1161, 0x11B9, 0x1102, 0x1161, 0x11BA, + 0x1102, 0x1161, 0x11BB, 0x1102, 0x1161, 0x11BC, 0x1102, 0x1161, + 0x11BD, 0x1102, 0x1161, 0x11BE, 0x1102, 0x1161, 0x11BF, 0x1102, + 0x1161, 0x11C0, 0x1102, 0x1161, 0x11C1, 0x1102, 0x1161, 0x11C2, + 0x1102, 0x1162, 0x1102, 0x1162, 0x11A8, 0x1102, 0x1162, 0x11A9, + 0x1102, 0x1162, 0x11AA, 0x1102, 0x1162, 0x11AB, 0x1102, 0x1162, + 0x11AC, 0x1102, 0x1162, 0x11AD, 0x1102, 0x1162, 0x11AE, 0x1102, + 0x1162, 0x11AF, 0x1102, 0x1162, 0x11B0, 0x1102, 0x1162, 0x11B1, + 0x1102, 0x1162, 0x11B2, 0x1102, 0x1162, 0x11B3, 0x1102, 0x1162, + 0x11B4, 0x1102, 0x1162, 0x11B5, 0x1102, 0x1162, 0x11B6, 0x1102, + 0x1162, 0x11B7, 0x1102, 0x1162, 0x11B8, 0x1102, 0x1162, 0x11B9, + 0x1102, 0x1162, 0x11BA, 0x1102, 0x1162, 0x11BB, 0x1102, 0x1162, + 0x11BC, 0x1102, 0x1162, 0x11BD, 0x1102, 0x1162, 0x11BE, 0x1102, + 0x1162, 0x11BF, 0x1102, 0x1162, 0x11C0, 0x1102, 0x1162, 0x11C1, + 0x1102, 0x1162, 0x11C2, 0x1102, 0x1163, 0x1102, 0x1163, 0x11A8, + 0x1102, 0x1163, 0x11A9, 0x1102, 0x1163, 0x11AA, 0x1102, 0x1163, + 0x11AB, 0x1102, 0x1163, 0x11AC, 0x1102, 0x1163, 0x11AD, 0x1102, + 0x1163, 0x11AE, 0x1102, 0x1163, 0x11AF, 0x1102, 0x1163, 0x11B0, + 0x1102, 0x1163, 0x11B1, 0x1102, 0x1163, 0x11B2, 0x1102, 0x1163, + 0x11B3, 0x1102, 0x1163, 0x11B4, 0x1102, 0x1163, 0x11B5, 0x1102, + 0x1163, 0x11B6, 0x1102, 0x1163, 0x11B7, 0x1102, 0x1163, 0x11B8, + 0x1102, 0x1163, 0x11B9, 0x1102, 0x1163, 0x11BA, 0x1102, 0x1163, + 0x11BB, 0x1102, 0x1163, 0x11BC, 0x1102, 0x1163, 0x11BD, 0x1102, + 0x1163, 0x11BE, 0x1102, 0x1163, 0x11BF, 0x1102, 0x1163, 0x11C0, + 0x1102, 0x1163, 0x11C1, 0x1102, 0x1163, 0x11C2, 0x1102, 0x1164, + 0x1102, 0x1164, 0x11A8, 0x1102, 0x1164, 0x11A9, 0x1102, 0x1164, + 0x11AA, 0x1102, 0x1164, 0x11AB, 0x1102, 0x1164, 0x11AC, 0x1102, + 0x1164, 0x11AD, 0x1102, 0x1164, 0x11AE, 0x1102, 0x1164, 0x11AF, + 0x1102, 0x1164, 0x11B0, 0x1102, 0x1164, 0x11B1, 0x1102, 0x1164, + 0x11B2, 0x1102, 0x1164, 0x11B3, 0x1102, 0x1164, 0x11B4, 0x1102, + 0x1164, 0x11B5, 0x1102, 0x1164, 0x11B6, 0x1102, 0x1164, 0x11B7, + 0x1102, 0x1164, 0x11B8, 0x1102, 0x1164, 0x11B9, 0x1102, 0x1164, + 0x11BA, 0x1102, 0x1164, 0x11BB, 0x1102, 0x1164, 0x11BC, 0x1102, + 0x1164, 0x11BD, 0x1102, 0x1164, 0x11BE, 0x1102, 0x1164, 0x11BF, + 0x1102, 0x1164, 0x11C0, 0x1102, 0x1164, 0x11C1, 0x1102, 0x1164, + 0x11C2, 0x1102, 0x1165, 0x1102, 0x1165, 0x11A8, 0x1102, 0x1165, + 0x11A9, 0x1102, 0x1165, 0x11AA, 0x1102, 0x1165, 0x11AB, 0x1102, + 0x1165, 0x11AC, 0x1102, 0x1165, 0x11AD, 0x1102, 0x1165, 0x11AE, + 0x1102, 0x1165, 0x11AF, 0x1102, 0x1165, 0x11B0, 0x1102, 0x1165, + 0x11B1, 0x1102, 0x1165, 0x11B2, 0x1102, 0x1165, 0x11B3, 0x1102, + 0x1165, 0x11B4, 0x1102, 0x1165, 0x11B5, 0x1102, 0x1165, 0x11B6, + 0x1102, 0x1165, 0x11B7, 0x1102, 0x1165, 0x11B8, 0x1102, 0x1165, + 0x11B9, 0x1102, 0x1165, 0x11BA, 0x1102, 0x1165, 0x11BB, 0x1102, + 0x1165, 0x11BC, 0x1102, 0x1165, 0x11BD, 0x1102, 0x1165, 0x11BE, + 0x1102, 0x1165, 0x11BF, 0x1102, 0x1165, 0x11C0, 0x1102, 0x1165, + 0x11C1, 0x1102, 0x1165, 0x11C2, 0x1102, 0x1166, 0x1102, 0x1166, + 0x11A8, 0x1102, 0x1166, 0x11A9, 0x1102, 0x1166, 0x11AA, 0x1102, + 0x1166, 0x11AB, 0x1102, 0x1166, 0x11AC, 0x1102, 0x1166, 0x11AD, + 0x1102, 0x1166, 0x11AE, 0x1102, 0x1166, 0x11AF, 0x1102, 0x1166, + 0x11B0, 0x1102, 0x1166, 0x11B1, 0x1102, 0x1166, 0x11B2, 0x1102, + 0x1166, 0x11B3, 0x1102, 0x1166, 0x11B4, 0x1102, 0x1166, 0x11B5, + 0x1102, 0x1166, 0x11B6, 0x1102, 0x1166, 0x11B7, 0x1102, 0x1166, + 0x11B8, 0x1102, 0x1166, 0x11B9, 0x1102, 0x1166, 0x11BA, 0x1102, + 0x1166, 0x11BB, 0x1102, 0x1166, 0x11BC, 0x1102, 0x1166, 0x11BD, + 0x1102, 0x1166, 0x11BE, 0x1102, 0x1166, 0x11BF, 0x1102, 0x1166, + 0x11C0, 0x1102, 0x1166, 0x11C1, 0x1102, 0x1166, 0x11C2, 0x1102, + 0x1167, 0x1102, 0x1167, 0x11A8, 0x1102, 0x1167, 0x11A9, 0x1102, + 0x1167, 0x11AA, 0x1102, 0x1167, 0x11AB, 0x1102, 0x1167, 0x11AC, + 0x1102, 0x1167, 0x11AD, 0x1102, 0x1167, 0x11AE, 0x1102, 0x1167, + 0x11AF, 0x1102, 0x1167, 0x11B0, 0x1102, 0x1167, 0x11B1, 0x1102, + 0x1167, 0x11B2, 0x1102, 0x1167, 0x11B3, 0x1102, 0x1167, 0x11B4, + 0x1102, 0x1167, 0x11B5, 0x1102, 0x1167, 0x11B6, 0x1102, 0x1167, + 0x11B7, 0x1102, 0x1167, 0x11B8, 0x1102, 0x1167, 0x11B9, 0x1102, + 0x1167, 0x11BA, 0x1102, 0x1167, 0x11BB, 0x1102, 0x1167, 0x11BC, + 0x1102, 0x1167, 0x11BD, 0x1102, 0x1167, 0x11BE, 0x1102, 0x1167, + 0x11BF, 0x1102, 0x1167, 0x11C0, 0x1102, 0x1167, 0x11C1, 0x1102, + 0x1167, 0x11C2, 0x1102, 0x1168, 0x1102, 0x1168, 0x11A8, 0x1102, + 0x1168, 0x11A9, 0x1102, 0x1168, 0x11AA, 0x1102, 0x1168, 0x11AB, + 0x1102, 0x1168, 0x11AC, 0x1102, 0x1168, 0x11AD, 0x1102, 0x1168, + 0x11AE, 0x1102, 0x1168, 0x11AF, 0x1102, 0x1168, 0x11B0, 0x1102, + 0x1168, 0x11B1, 0x1102, 0x1168, 0x11B2, 0x1102, 0x1168, 0x11B3, + 0x1102, 0x1168, 0x11B4, 0x1102, 0x1168, 0x11B5, 0x1102, 0x1168, + 0x11B6, 0x1102, 0x1168, 0x11B7, 0x1102, 0x1168, 0x11B8, 0x1102, + 0x1168, 0x11B9, 0x1102, 0x1168, 0x11BA, 0x1102, 0x1168, 0x11BB, + 0x1102, 0x1168, 0x11BC, 0x1102, 0x1168, 0x11BD, 0x1102, 0x1168, + 0x11BE, 0x1102, 0x1168, 0x11BF, 0x1102, 0x1168, 0x11C0, 0x1102, + 0x1168, 0x11C1, 0x1102, 0x1168, 0x11C2, 0x1102, 0x1169, 0x1102, + 0x1169, 0x11A8, 0x1102, 0x1169, 0x11A9, 0x1102, 0x1169, 0x11AA, + 0x1102, 0x1169, 0x11AB, 0x1102, 0x1169, 0x11AC, 0x1102, 0x1169, + 0x11AD, 0x1102, 0x1169, 0x11AE, 0x1102, 0x1169, 0x11AF, 0x1102, + 0x1169, 0x11B0, 0x1102, 0x1169, 0x11B1, 0x1102, 0x1169, 0x11B2, + 0x1102, 0x1169, 0x11B3, 0x1102, 0x1169, 0x11B4, 0x1102, 0x1169, + 0x11B5, 0x1102, 0x1169, 0x11B6, 0x1102, 0x1169, 0x11B7, 0x1102, + 0x1169, 0x11B8, 0x1102, 0x1169, 0x11B9, 0x1102, 0x1169, 0x11BA, + 0x1102, 0x1169, 0x11BB, 0x1102, 0x1169, 0x11BC, 0x1102, 0x1169, + 0x11BD, 0x1102, 0x1169, 0x11BE, 0x1102, 0x1169, 0x11BF, 0x1102, + 0x1169, 0x11C0, 0x1102, 0x1169, 0x11C1, 0x1102, 0x1169, 0x11C2, + 0x1102, 0x116A, 0x1102, 0x116A, 0x11A8, 0x1102, 0x116A, 0x11A9, + 0x1102, 0x116A, 0x11AA, 0x1102, 0x116A, 0x11AB, 0x1102, 0x116A, + 0x11AC, 0x1102, 0x116A, 0x11AD, 0x1102, 0x116A, 0x11AE, 0x1102, + 0x116A, 0x11AF, 0x1102, 0x116A, 0x11B0, 0x1102, 0x116A, 0x11B1, + 0x1102, 0x116A, 0x11B2, 0x1102, 0x116A, 0x11B3, 0x1102, 0x116A, + 0x11B4, 0x1102, 0x116A, 0x11B5, 0x1102, 0x116A, 0x11B6, 0x1102, + 0x116A, 0x11B7, 0x1102, 0x116A, 0x11B8, 0x1102, 0x116A, 0x11B9, + 0x1102, 0x116A, 0x11BA, 0x1102, 0x116A, 0x11BB, 0x1102, 0x116A, + 0x11BC, 0x1102, 0x116A, 0x11BD, 0x1102, 0x116A, 0x11BE, 0x1102, + 0x116A, 0x11BF, 0x1102, 0x116A, 0x11C0, 0x1102, 0x116A, 0x11C1, + 0x1102, 0x116A, 0x11C2, 0x1102, 0x116B, 0x1102, 0x116B, 0x11A8, + 0x1102, 0x116B, 0x11A9, 0x1102, 0x116B, 0x11AA, 0x1102, 0x116B, + 0x11AB, 0x1102, 0x116B, 0x11AC, 0x1102, 0x116B, 0x11AD, 0x1102, + 0x116B, 0x11AE, 0x1102, 0x116B, 0x11AF, 0x1102, 0x116B, 0x11B0, + 0x1102, 0x116B, 0x11B1, 0x1102, 0x116B, 0x11B2, 0x1102, 0x116B, + 0x11B3, 0x1102, 0x116B, 0x11B4, 0x1102, 0x116B, 0x11B5, 0x1102, + 0x116B, 0x11B6, 0x1102, 0x116B, 0x11B7, 0x1102, 0x116B, 0x11B8, + 0x1102, 0x116B, 0x11B9, 0x1102, 0x116B, 0x11BA, 0x1102, 0x116B, + 0x11BB, 0x1102, 0x116B, 0x11BC, 0x1102, 0x116B, 0x11BD, 0x1102, + 0x116B, 0x11BE, 0x1102, 0x116B, 0x11BF, 0x1102, 0x116B, 0x11C0, + 0x1102, 0x116B, 0x11C1, 0x1102, 0x116B, 0x11C2, 0x1102, 0x116C, + 0x1102, 0x116C, 0x11A8, 0x1102, 0x116C, 0x11A9, 0x1102, 0x116C, + 0x11AA, 0x1102, 0x116C, 0x11AB, 0x1102, 0x116C, 0x11AC, 0x1102, + 0x116C, 0x11AD, 0x1102, 0x116C, 0x11AE, 0x1102, 0x116C, 0x11AF, + 0x1102, 0x116C, 0x11B0, 0x1102, 0x116C, 0x11B1, 0x1102, 0x116C, + 0x11B2, 0x1102, 0x116C, 0x11B3, 0x1102, 0x116C, 0x11B4, 0x1102, + 0x116C, 0x11B5, 0x1102, 0x116C, 0x11B6, 0x1102, 0x116C, 0x11B7, + 0x1102, 0x116C, 0x11B8, 0x1102, 0x116C, 0x11B9, 0x1102, 0x116C, + 0x11BA, 0x1102, 0x116C, 0x11BB, 0x1102, 0x116C, 0x11BC, 0x1102, + 0x116C, 0x11BD, 0x1102, 0x116C, 0x11BE, 0x1102, 0x116C, 0x11BF, + 0x1102, 0x116C, 0x11C0, 0x1102, 0x116C, 0x11C1, 0x1102, 0x116C, + 0x11C2, 0x1102, 0x116D, 0x1102, 0x116D, 0x11A8, 0x1102, 0x116D, + 0x11A9, 0x1102, 0x116D, 0x11AA, 0x1102, 0x116D, 0x11AB, 0x1102, + 0x116D, 0x11AC, 0x1102, 0x116D, 0x11AD, 0x1102, 0x116D, 0x11AE, + 0x1102, 0x116D, 0x11AF, 0x1102, 0x116D, 0x11B0, 0x1102, 0x116D, + 0x11B1, 0x1102, 0x116D, 0x11B2, 0x1102, 0x116D, 0x11B3, 0x1102, + 0x116D, 0x11B4, 0x1102, 0x116D, 0x11B5, 0x1102, 0x116D, 0x11B6, + 0x1102, 0x116D, 0x11B7, 0x1102, 0x116D, 0x11B8, 0x1102, 0x116D, + 0x11B9, 0x1102, 0x116D, 0x11BA, 0x1102, 0x116D, 0x11BB, 0x1102, + 0x116D, 0x11BC, 0x1102, 0x116D, 0x11BD, 0x1102, 0x116D, 0x11BE, + 0x1102, 0x116D, 0x11BF, 0x1102, 0x116D, 0x11C0, 0x1102, 0x116D, + 0x11C1, 0x1102, 0x116D, 0x11C2, 0x1102, 0x116E, 0x1102, 0x116E, + 0x11A8, 0x1102, 0x116E, 0x11A9, 0x1102, 0x116E, 0x11AA, 0x1102, + 0x116E, 0x11AB, 0x1102, 0x116E, 0x11AC, 0x1102, 0x116E, 0x11AD, + 0x1102, 0x116E, 0x11AE, 0x1102, 0x116E, 0x11AF, 0x1102, 0x116E, + 0x11B0, 0x1102, 0x116E, 0x11B1, 0x1102, 0x116E, 0x11B2, 0x1102, + 0x116E, 0x11B3, 0x1102, 0x116E, 0x11B4, 0x1102, 0x116E, 0x11B5, + 0x1102, 0x116E, 0x11B6, 0x1102, 0x116E, 0x11B7, 0x1102, 0x116E, + 0x11B8, 0x1102, 0x116E, 0x11B9, 0x1102, 0x116E, 0x11BA, 0x1102, + 0x116E, 0x11BB, 0x1102, 0x116E, 0x11BC, 0x1102, 0x116E, 0x11BD, + 0x1102, 0x116E, 0x11BE, 0x1102, 0x116E, 0x11BF, 0x1102, 0x116E, + 0x11C0, 0x1102, 0x116E, 0x11C1, 0x1102, 0x116E, 0x11C2, 0x1102, + 0x116F, 0x1102, 0x116F, 0x11A8, 0x1102, 0x116F, 0x11A9, 0x1102, + 0x116F, 0x11AA, 0x1102, 0x116F, 0x11AB, 0x1102, 0x116F, 0x11AC, + 0x1102, 0x116F, 0x11AD, 0x1102, 0x116F, 0x11AE, 0x1102, 0x116F, + 0x11AF, 0x1102, 0x116F, 0x11B0, 0x1102, 0x116F, 0x11B1, 0x1102, + 0x116F, 0x11B2, 0x1102, 0x116F, 0x11B3, 0x1102, 0x116F, 0x11B4, + 0x1102, 0x116F, 0x11B5, 0x1102, 0x116F, 0x11B6, 0x1102, 0x116F, + 0x11B7, 0x1102, 0x116F, 0x11B8, 0x1102, 0x116F, 0x11B9, 0x1102, + 0x116F, 0x11BA, 0x1102, 0x116F, 0x11BB, 0x1102, 0x116F, 0x11BC, + 0x1102, 0x116F, 0x11BD, 0x1102, 0x116F, 0x11BE, 0x1102, 0x116F, + 0x11BF, 0x1102, 0x116F, 0x11C0, 0x1102, 0x116F, 0x11C1, 0x1102, + 0x116F, 0x11C2, 0x1102, 0x1170, 0x1102, 0x1170, 0x11A8, 0x1102, + 0x1170, 0x11A9, 0x1102, 0x1170, 0x11AA, 0x1102, 0x1170, 0x11AB, + 0x1102, 0x1170, 0x11AC, 0x1102, 0x1170, 0x11AD, 0x1102, 0x1170, + 0x11AE, 0x1102, 0x1170, 0x11AF, 0x1102, 0x1170, 0x11B0, 0x1102, + 0x1170, 0x11B1, 0x1102, 0x1170, 0x11B2, 0x1102, 0x1170, 0x11B3, + 0x1102, 0x1170, 0x11B4, 0x1102, 0x1170, 0x11B5, 0x1102, 0x1170, + 0x11B6, 0x1102, 0x1170, 0x11B7, 0x1102, 0x1170, 0x11B8, 0x1102, + 0x1170, 0x11B9, 0x1102, 0x1170, 0x11BA, 0x1102, 0x1170, 0x11BB, + 0x1102, 0x1170, 0x11BC, 0x1102, 0x1170, 0x11BD, 0x1102, 0x1170, + 0x11BE, 0x1102, 0x1170, 0x11BF, 0x1102, 0x1170, 0x11C0, 0x1102, + 0x1170, 0x11C1, 0x1102, 0x1170, 0x11C2, 0x1102, 0x1171, 0x1102, + 0x1171, 0x11A8, 0x1102, 0x1171, 0x11A9, 0x1102, 0x1171, 0x11AA, + 0x1102, 0x1171, 0x11AB, 0x1102, 0x1171, 0x11AC, 0x1102, 0x1171, + 0x11AD, 0x1102, 0x1171, 0x11AE, 0x1102, 0x1171, 0x11AF, 0x1102, + 0x1171, 0x11B0, 0x1102, 0x1171, 0x11B1, 0x1102, 0x1171, 0x11B2, + 0x1102, 0x1171, 0x11B3, 0x1102, 0x1171, 0x11B4, 0x1102, 0x1171, + 0x11B5, 0x1102, 0x1171, 0x11B6, 0x1102, 0x1171, 0x11B7, 0x1102, + 0x1171, 0x11B8, 0x1102, 0x1171, 0x11B9, 0x1102, 0x1171, 0x11BA, + 0x1102, 0x1171, 0x11BB, 0x1102, 0x1171, 0x11BC, 0x1102, 0x1171, + 0x11BD, 0x1102, 0x1171, 0x11BE, 0x1102, 0x1171, 0x11BF, 0x1102, + 0x1171, 0x11C0, 0x1102, 0x1171, 0x11C1, 0x1102, 0x1171, 0x11C2, + 0x1102, 0x1172, 0x1102, 0x1172, 0x11A8, 0x1102, 0x1172, 0x11A9, + 0x1102, 0x1172, 0x11AA, 0x1102, 0x1172, 0x11AB, 0x1102, 0x1172, + 0x11AC, 0x1102, 0x1172, 0x11AD, 0x1102, 0x1172, 0x11AE, 0x1102, + 0x1172, 0x11AF, 0x1102, 0x1172, 0x11B0, 0x1102, 0x1172, 0x11B1, + 0x1102, 0x1172, 0x11B2, 0x1102, 0x1172, 0x11B3, 0x1102, 0x1172, + 0x11B4, 0x1102, 0x1172, 0x11B5, 0x1102, 0x1172, 0x11B6, 0x1102, + 0x1172, 0x11B7, 0x1102, 0x1172, 0x11B8, 0x1102, 0x1172, 0x11B9, + 0x1102, 0x1172, 0x11BA, 0x1102, 0x1172, 0x11BB, 0x1102, 0x1172, + 0x11BC, 0x1102, 0x1172, 0x11BD, 0x1102, 0x1172, 0x11BE, 0x1102, + 0x1172, 0x11BF, 0x1102, 0x1172, 0x11C0, 0x1102, 0x1172, 0x11C1, + 0x1102, 0x1172, 0x11C2, 0x1102, 0x1173, 0x1102, 0x1173, 0x11A8, + 0x1102, 0x1173, 0x11A9, 0x1102, 0x1173, 0x11AA, 0x1102, 0x1173, + 0x11AB, 0x1102, 0x1173, 0x11AC, 0x1102, 0x1173, 0x11AD, 0x1102, + 0x1173, 0x11AE, 0x1102, 0x1173, 0x11AF, 0x1102, 0x1173, 0x11B0, + 0x1102, 0x1173, 0x11B1, 0x1102, 0x1173, 0x11B2, 0x1102, 0x1173, + 0x11B3, 0x1102, 0x1173, 0x11B4, 0x1102, 0x1173, 0x11B5, 0x1102, + 0x1173, 0x11B6, 0x1102, 0x1173, 0x11B7, 0x1102, 0x1173, 0x11B8, + 0x1102, 0x1173, 0x11B9, 0x1102, 0x1173, 0x11BA, 0x1102, 0x1173, + 0x11BB, 0x1102, 0x1173, 0x11BC, 0x1102, 0x1173, 0x11BD, 0x1102, + 0x1173, 0x11BE, 0x1102, 0x1173, 0x11BF, 0x1102, 0x1173, 0x11C0, + 0x1102, 0x1173, 0x11C1, 0x1102, 0x1173, 0x11C2, 0x1102, 0x1174, + 0x1102, 0x1174, 0x11A8, 0x1102, 0x1174, 0x11A9, 0x1102, 0x1174, + 0x11AA, 0x1102, 0x1174, 0x11AB, 0x1102, 0x1174, 0x11AC, 0x1102, + 0x1174, 0x11AD, 0x1102, 0x1174, 0x11AE, 0x1102, 0x1174, 0x11AF, + 0x1102, 0x1174, 0x11B0, 0x1102, 0x1174, 0x11B1, 0x1102, 0x1174, + 0x11B2, 0x1102, 0x1174, 0x11B3, 0x1102, 0x1174, 0x11B4, 0x1102, + 0x1174, 0x11B5, 0x1102, 0x1174, 0x11B6, 0x1102, 0x1174, 0x11B7, + 0x1102, 0x1174, 0x11B8, 0x1102, 0x1174, 0x11B9, 0x1102, 0x1174, + 0x11BA, 0x1102, 0x1174, 0x11BB, 0x1102, 0x1174, 0x11BC, 0x1102, + 0x1174, 0x11BD, 0x1102, 0x1174, 0x11BE, 0x1102, 0x1174, 0x11BF, + 0x1102, 0x1174, 0x11C0, 0x1102, 0x1174, 0x11C1, 0x1102, 0x1174, + 0x11C2, 0x1102, 0x1175, 0x1102, 0x1175, 0x11A8, 0x1102, 0x1175, + 0x11A9, 0x1102, 0x1175, 0x11AA, 0x1102, 0x1175, 0x11AB, 0x1102, + 0x1175, 0x11AC, 0x1102, 0x1175, 0x11AD, 0x1102, 0x1175, 0x11AE, + 0x1102, 0x1175, 0x11AF, 0x1102, 0x1175, 0x11B0, 0x1102, 0x1175, + 0x11B1, 0x1102, 0x1175, 0x11B2, 0x1102, 0x1175, 0x11B3, 0x1102, + 0x1175, 0x11B4, 0x1102, 0x1175, 0x11B5, 0x1102, 0x1175, 0x11B6, + 0x1102, 0x1175, 0x11B7, 0x1102, 0x1175, 0x11B8, 0x1102, 0x1175, + 0x11B9, 0x1102, 0x1175, 0x11BA, 0x1102, 0x1175, 0x11BB, 0x1102, + 0x1175, 0x11BC, 0x1102, 0x1175, 0x11BD, 0x1102, 0x1175, 0x11BE, + 0x1102, 0x1175, 0x11BF, 0x1102, 0x1175, 0x11C0, 0x1102, 0x1175, + 0x11C1, 0x1102, 0x1175, 0x11C2, 0x1103, 0x1161, 0x1103, 0x1161, + 0x11A8, 0x1103, 0x1161, 0x11A9, 0x1103, 0x1161, 0x11AA, 0x1103, + 0x1161, 0x11AB, 0x1103, 0x1161, 0x11AC, 0x1103, 0x1161, 0x11AD, + 0x1103, 0x1161, 0x11AE, 0x1103, 0x1161, 0x11AF, 0x1103, 0x1161, + 0x11B0, 0x1103, 0x1161, 0x11B1, 0x1103, 0x1161, 0x11B2, 0x1103, + 0x1161, 0x11B3, 0x1103, 0x1161, 0x11B4, 0x1103, 0x1161, 0x11B5, + 0x1103, 0x1161, 0x11B6, 0x1103, 0x1161, 0x11B7, 0x1103, 0x1161, + 0x11B8, 0x1103, 0x1161, 0x11B9, 0x1103, 0x1161, 0x11BA, 0x1103, + 0x1161, 0x11BB, 0x1103, 0x1161, 0x11BC, 0x1103, 0x1161, 0x11BD, + 0x1103, 0x1161, 0x11BE, 0x1103, 0x1161, 0x11BF, 0x1103, 0x1161, + 0x11C0, 0x1103, 0x1161, 0x11C1, 0x1103, 0x1161, 0x11C2, 0x1103, + 0x1162, 0x1103, 0x1162, 0x11A8, 0x1103, 0x1162, 0x11A9, 0x1103, + 0x1162, 0x11AA, 0x1103, 0x1162, 0x11AB, 0x1103, 0x1162, 0x11AC, + 0x1103, 0x1162, 0x11AD, 0x1103, 0x1162, 0x11AE, 0x1103, 0x1162, + 0x11AF, 0x1103, 0x1162, 0x11B0, 0x1103, 0x1162, 0x11B1, 0x1103, + 0x1162, 0x11B2, 0x1103, 0x1162, 0x11B3, 0x1103, 0x1162, 0x11B4, + 0x1103, 0x1162, 0x11B5, 0x1103, 0x1162, 0x11B6, 0x1103, 0x1162, + 0x11B7, 0x1103, 0x1162, 0x11B8, 0x1103, 0x1162, 0x11B9, 0x1103, + 0x1162, 0x11BA, 0x1103, 0x1162, 0x11BB, 0x1103, 0x1162, 0x11BC, + 0x1103, 0x1162, 0x11BD, 0x1103, 0x1162, 0x11BE, 0x1103, 0x1162, + 0x11BF, 0x1103, 0x1162, 0x11C0, 0x1103, 0x1162, 0x11C1, 0x1103, + 0x1162, 0x11C2, 0x1103, 0x1163, 0x1103, 0x1163, 0x11A8, 0x1103, + 0x1163, 0x11A9, 0x1103, 0x1163, 0x11AA, 0x1103, 0x1163, 0x11AB, + 0x1103, 0x1163, 0x11AC, 0x1103, 0x1163, 0x11AD, 0x1103, 0x1163, + 0x11AE, 0x1103, 0x1163, 0x11AF, 0x1103, 0x1163, 0x11B0, 0x1103, + 0x1163, 0x11B1, 0x1103, 0x1163, 0x11B2, 0x1103, 0x1163, 0x11B3, + 0x1103, 0x1163, 0x11B4, 0x1103, 0x1163, 0x11B5, 0x1103, 0x1163, + 0x11B6, 0x1103, 0x1163, 0x11B7, 0x1103, 0x1163, 0x11B8, 0x1103, + 0x1163, 0x11B9, 0x1103, 0x1163, 0x11BA, 0x1103, 0x1163, 0x11BB, + 0x1103, 0x1163, 0x11BC, 0x1103, 0x1163, 0x11BD, 0x1103, 0x1163, + 0x11BE, 0x1103, 0x1163, 0x11BF, 0x1103, 0x1163, 0x11C0, 0x1103, + 0x1163, 0x11C1, 0x1103, 0x1163, 0x11C2, 0x1103, 0x1164, 0x1103, + 0x1164, 0x11A8, 0x1103, 0x1164, 0x11A9, 0x1103, 0x1164, 0x11AA, + 0x1103, 0x1164, 0x11AB, 0x1103, 0x1164, 0x11AC, 0x1103, 0x1164, + 0x11AD, 0x1103, 0x1164, 0x11AE, 0x1103, 0x1164, 0x11AF, 0x1103, + 0x1164, 0x11B0, 0x1103, 0x1164, 0x11B1, 0x1103, 0x1164, 0x11B2, + 0x1103, 0x1164, 0x11B3, 0x1103, 0x1164, 0x11B4, 0x1103, 0x1164, + 0x11B5, 0x1103, 0x1164, 0x11B6, 0x1103, 0x1164, 0x11B7, 0x1103, + 0x1164, 0x11B8, 0x1103, 0x1164, 0x11B9, 0x1103, 0x1164, 0x11BA, + 0x1103, 0x1164, 0x11BB, 0x1103, 0x1164, 0x11BC, 0x1103, 0x1164, + 0x11BD, 0x1103, 0x1164, 0x11BE, 0x1103, 0x1164, 0x11BF, 0x1103, + 0x1164, 0x11C0, 0x1103, 0x1164, 0x11C1, 0x1103, 0x1164, 0x11C2, + 0x1103, 0x1165, 0x1103, 0x1165, 0x11A8, 0x1103, 0x1165, 0x11A9, + 0x1103, 0x1165, 0x11AA, 0x1103, 0x1165, 0x11AB, 0x1103, 0x1165, + 0x11AC, 0x1103, 0x1165, 0x11AD, 0x1103, 0x1165, 0x11AE, 0x1103, + 0x1165, 0x11AF, 0x1103, 0x1165, 0x11B0, 0x1103, 0x1165, 0x11B1, + 0x1103, 0x1165, 0x11B2, 0x1103, 0x1165, 0x11B3, 0x1103, 0x1165, + 0x11B4, 0x1103, 0x1165, 0x11B5, 0x1103, 0x1165, 0x11B6, 0x1103, + 0x1165, 0x11B7, 0x1103, 0x1165, 0x11B8, 0x1103, 0x1165, 0x11B9, + 0x1103, 0x1165, 0x11BA, 0x1103, 0x1165, 0x11BB, 0x1103, 0x1165, + 0x11BC, 0x1103, 0x1165, 0x11BD, 0x1103, 0x1165, 0x11BE, 0x1103, + 0x1165, 0x11BF, 0x1103, 0x1165, 0x11C0, 0x1103, 0x1165, 0x11C1, + 0x1103, 0x1165, 0x11C2, 0x1103, 0x1166, 0x1103, 0x1166, 0x11A8, + 0x1103, 0x1166, 0x11A9, 0x1103, 0x1166, 0x11AA, 0x1103, 0x1166, + 0x11AB, 0x1103, 0x1166, 0x11AC, 0x1103, 0x1166, 0x11AD, 0x1103, + 0x1166, 0x11AE, 0x1103, 0x1166, 0x11AF, 0x1103, 0x1166, 0x11B0, + 0x1103, 0x1166, 0x11B1, 0x1103, 0x1166, 0x11B2, 0x1103, 0x1166, + 0x11B3, 0x1103, 0x1166, 0x11B4, 0x1103, 0x1166, 0x11B5, 0x1103, + 0x1166, 0x11B6, 0x1103, 0x1166, 0x11B7, 0x1103, 0x1166, 0x11B8, + 0x1103, 0x1166, 0x11B9, 0x1103, 0x1166, 0x11BA, 0x1103, 0x1166, + 0x11BB, 0x1103, 0x1166, 0x11BC, 0x1103, 0x1166, 0x11BD, 0x1103, + 0x1166, 0x11BE, 0x1103, 0x1166, 0x11BF, 0x1103, 0x1166, 0x11C0, + 0x1103, 0x1166, 0x11C1, 0x1103, 0x1166, 0x11C2, 0x1103, 0x1167, + 0x1103, 0x1167, 0x11A8, 0x1103, 0x1167, 0x11A9, 0x1103, 0x1167, + 0x11AA, 0x1103, 0x1167, 0x11AB, 0x1103, 0x1167, 0x11AC, 0x1103, + 0x1167, 0x11AD, 0x1103, 0x1167, 0x11AE, 0x1103, 0x1167, 0x11AF, + 0x1103, 0x1167, 0x11B0, 0x1103, 0x1167, 0x11B1, 0x1103, 0x1167, + 0x11B2, 0x1103, 0x1167, 0x11B3, 0x1103, 0x1167, 0x11B4, 0x1103, + 0x1167, 0x11B5, 0x1103, 0x1167, 0x11B6, 0x1103, 0x1167, 0x11B7, + 0x1103, 0x1167, 0x11B8, 0x1103, 0x1167, 0x11B9, 0x1103, 0x1167, + 0x11BA, 0x1103, 0x1167, 0x11BB, 0x1103, 0x1167, 0x11BC, 0x1103, + 0x1167, 0x11BD, 0x1103, 0x1167, 0x11BE, 0x1103, 0x1167, 0x11BF, + 0x1103, 0x1167, 0x11C0, 0x1103, 0x1167, 0x11C1, 0x1103, 0x1167, + 0x11C2, 0x1103, 0x1168, 0x1103, 0x1168, 0x11A8, 0x1103, 0x1168, + 0x11A9, 0x1103, 0x1168, 0x11AA, 0x1103, 0x1168, 0x11AB, 0x1103, + 0x1168, 0x11AC, 0x1103, 0x1168, 0x11AD, 0x1103, 0x1168, 0x11AE, + 0x1103, 0x1168, 0x11AF, 0x1103, 0x1168, 0x11B0, 0x1103, 0x1168, + 0x11B1, 0x1103, 0x1168, 0x11B2, 0x1103, 0x1168, 0x11B3, 0x1103, + 0x1168, 0x11B4, 0x1103, 0x1168, 0x11B5, 0x1103, 0x1168, 0x11B6, + 0x1103, 0x1168, 0x11B7, 0x1103, 0x1168, 0x11B8, 0x1103, 0x1168, + 0x11B9, 0x1103, 0x1168, 0x11BA, 0x1103, 0x1168, 0x11BB, 0x1103, + 0x1168, 0x11BC, 0x1103, 0x1168, 0x11BD, 0x1103, 0x1168, 0x11BE, + 0x1103, 0x1168, 0x11BF, 0x1103, 0x1168, 0x11C0, 0x1103, 0x1168, + 0x11C1, 0x1103, 0x1168, 0x11C2, 0x1103, 0x1169, 0x1103, 0x1169, + 0x11A8, 0x1103, 0x1169, 0x11A9, 0x1103, 0x1169, 0x11AA, 0x1103, + 0x1169, 0x11AB, 0x1103, 0x1169, 0x11AC, 0x1103, 0x1169, 0x11AD, + 0x1103, 0x1169, 0x11AE, 0x1103, 0x1169, 0x11AF, 0x1103, 0x1169, + 0x11B0, 0x1103, 0x1169, 0x11B1, 0x1103, 0x1169, 0x11B2, 0x1103, + 0x1169, 0x11B3, 0x1103, 0x1169, 0x11B4, 0x1103, 0x1169, 0x11B5, + 0x1103, 0x1169, 0x11B6, 0x1103, 0x1169, 0x11B7, 0x1103, 0x1169, + 0x11B8, 0x1103, 0x1169, 0x11B9, 0x1103, 0x1169, 0x11BA, 0x1103, + 0x1169, 0x11BB, 0x1103, 0x1169, 0x11BC, 0x1103, 0x1169, 0x11BD, + 0x1103, 0x1169, 0x11BE, 0x1103, 0x1169, 0x11BF, 0x1103, 0x1169, + 0x11C0, 0x1103, 0x1169, 0x11C1, 0x1103, 0x1169, 0x11C2, 0x1103, + 0x116A, 0x1103, 0x116A, 0x11A8, 0x1103, 0x116A, 0x11A9, 0x1103, + 0x116A, 0x11AA, 0x1103, 0x116A, 0x11AB, 0x1103, 0x116A, 0x11AC, + 0x1103, 0x116A, 0x11AD, 0x1103, 0x116A, 0x11AE, 0x1103, 0x116A, + 0x11AF, 0x1103, 0x116A, 0x11B0, 0x1103, 0x116A, 0x11B1, 0x1103, + 0x116A, 0x11B2, 0x1103, 0x116A, 0x11B3, 0x1103, 0x116A, 0x11B4, + 0x1103, 0x116A, 0x11B5, 0x1103, 0x116A, 0x11B6, 0x1103, 0x116A, + 0x11B7, 0x1103, 0x116A, 0x11B8, 0x1103, 0x116A, 0x11B9, 0x1103, + 0x116A, 0x11BA, 0x1103, 0x116A, 0x11BB, 0x1103, 0x116A, 0x11BC, + 0x1103, 0x116A, 0x11BD, 0x1103, 0x116A, 0x11BE, 0x1103, 0x116A, + 0x11BF, 0x1103, 0x116A, 0x11C0, 0x1103, 0x116A, 0x11C1, 0x1103, + 0x116A, 0x11C2, 0x1103, 0x116B, 0x1103, 0x116B, 0x11A8, 0x1103, + 0x116B, 0x11A9, 0x1103, 0x116B, 0x11AA, 0x1103, 0x116B, 0x11AB, + 0x1103, 0x116B, 0x11AC, 0x1103, 0x116B, 0x11AD, 0x1103, 0x116B, + 0x11AE, 0x1103, 0x116B, 0x11AF, 0x1103, 0x116B, 0x11B0, 0x1103, + 0x116B, 0x11B1, 0x1103, 0x116B, 0x11B2, 0x1103, 0x116B, 0x11B3, + 0x1103, 0x116B, 0x11B4, 0x1103, 0x116B, 0x11B5, 0x1103, 0x116B, + 0x11B6, 0x1103, 0x116B, 0x11B7, 0x1103, 0x116B, 0x11B8, 0x1103, + 0x116B, 0x11B9, 0x1103, 0x116B, 0x11BA, 0x1103, 0x116B, 0x11BB, + 0x1103, 0x116B, 0x11BC, 0x1103, 0x116B, 0x11BD, 0x1103, 0x116B, + 0x11BE, 0x1103, 0x116B, 0x11BF, 0x1103, 0x116B, 0x11C0, 0x1103, + 0x116B, 0x11C1, 0x1103, 0x116B, 0x11C2, 0x1103, 0x116C, 0x1103, + 0x116C, 0x11A8, 0x1103, 0x116C, 0x11A9, 0x1103, 0x116C, 0x11AA, + 0x1103, 0x116C, 0x11AB, 0x1103, 0x116C, 0x11AC, 0x1103, 0x116C, + 0x11AD, 0x1103, 0x116C, 0x11AE, 0x1103, 0x116C, 0x11AF, 0x1103, + 0x116C, 0x11B0, 0x1103, 0x116C, 0x11B1, 0x1103, 0x116C, 0x11B2, + 0x1103, 0x116C, 0x11B3, 0x1103, 0x116C, 0x11B4, 0x1103, 0x116C, + 0x11B5, 0x1103, 0x116C, 0x11B6, 0x1103, 0x116C, 0x11B7, 0x1103, + 0x116C, 0x11B8, 0x1103, 0x116C, 0x11B9, 0x1103, 0x116C, 0x11BA, + 0x1103, 0x116C, 0x11BB, 0x1103, 0x116C, 0x11BC, 0x1103, 0x116C, + 0x11BD, 0x1103, 0x116C, 0x11BE, 0x1103, 0x116C, 0x11BF, 0x1103, + 0x116C, 0x11C0, 0x1103, 0x116C, 0x11C1, 0x1103, 0x116C, 0x11C2, + 0x1103, 0x116D, 0x1103, 0x116D, 0x11A8, 0x1103, 0x116D, 0x11A9, + 0x1103, 0x116D, 0x11AA, 0x1103, 0x116D, 0x11AB, 0x1103, 0x116D, + 0x11AC, 0x1103, 0x116D, 0x11AD, 0x1103, 0x116D, 0x11AE, 0x1103, + 0x116D, 0x11AF, 0x1103, 0x116D, 0x11B0, 0x1103, 0x116D, 0x11B1, + 0x1103, 0x116D, 0x11B2, 0x1103, 0x116D, 0x11B3, 0x1103, 0x116D, + 0x11B4, 0x1103, 0x116D, 0x11B5, 0x1103, 0x116D, 0x11B6, 0x1103, + 0x116D, 0x11B7, 0x1103, 0x116D, 0x11B8, 0x1103, 0x116D, 0x11B9, + 0x1103, 0x116D, 0x11BA, 0x1103, 0x116D, 0x11BB, 0x1103, 0x116D, + 0x11BC, 0x1103, 0x116D, 0x11BD, 0x1103, 0x116D, 0x11BE, 0x1103, + 0x116D, 0x11BF, 0x1103, 0x116D, 0x11C0, 0x1103, 0x116D, 0x11C1, + 0x1103, 0x116D, 0x11C2, 0x1103, 0x116E, 0x1103, 0x116E, 0x11A8, + 0x1103, 0x116E, 0x11A9, 0x1103, 0x116E, 0x11AA, 0x1103, 0x116E, + 0x11AB, 0x1103, 0x116E, 0x11AC, 0x1103, 0x116E, 0x11AD, 0x1103, + 0x116E, 0x11AE, 0x1103, 0x116E, 0x11AF, 0x1103, 0x116E, 0x11B0, + 0x1103, 0x116E, 0x11B1, 0x1103, 0x116E, 0x11B2, 0x1103, 0x116E, + 0x11B3, 0x1103, 0x116E, 0x11B4, 0x1103, 0x116E, 0x11B5, 0x1103, + 0x116E, 0x11B6, 0x1103, 0x116E, 0x11B7, 0x1103, 0x116E, 0x11B8, + 0x1103, 0x116E, 0x11B9, 0x1103, 0x116E, 0x11BA, 0x1103, 0x116E, + 0x11BB, 0x1103, 0x116E, 0x11BC, 0x1103, 0x116E, 0x11BD, 0x1103, + 0x116E, 0x11BE, 0x1103, 0x116E, 0x11BF, 0x1103, 0x116E, 0x11C0, + 0x1103, 0x116E, 0x11C1, 0x1103, 0x116E, 0x11C2, 0x1103, 0x116F, + 0x1103, 0x116F, 0x11A8, 0x1103, 0x116F, 0x11A9, 0x1103, 0x116F, + 0x11AA, 0x1103, 0x116F, 0x11AB, 0x1103, 0x116F, 0x11AC, 0x1103, + 0x116F, 0x11AD, 0x1103, 0x116F, 0x11AE, 0x1103, 0x116F, 0x11AF, + 0x1103, 0x116F, 0x11B0, 0x1103, 0x116F, 0x11B1, 0x1103, 0x116F, + 0x11B2, 0x1103, 0x116F, 0x11B3, 0x1103, 0x116F, 0x11B4, 0x1103, + 0x116F, 0x11B5, 0x1103, 0x116F, 0x11B6, 0x1103, 0x116F, 0x11B7, + 0x1103, 0x116F, 0x11B8, 0x1103, 0x116F, 0x11B9, 0x1103, 0x116F, + 0x11BA, 0x1103, 0x116F, 0x11BB, 0x1103, 0x116F, 0x11BC, 0x1103, + 0x116F, 0x11BD, 0x1103, 0x116F, 0x11BE, 0x1103, 0x116F, 0x11BF, + 0x1103, 0x116F, 0x11C0, 0x1103, 0x116F, 0x11C1, 0x1103, 0x116F, + 0x11C2, 0x1103, 0x1170, 0x1103, 0x1170, 0x11A8, 0x1103, 0x1170, + 0x11A9, 0x1103, 0x1170, 0x11AA, 0x1103, 0x1170, 0x11AB, 0x1103, + 0x1170, 0x11AC, 0x1103, 0x1170, 0x11AD, 0x1103, 0x1170, 0x11AE, + 0x1103, 0x1170, 0x11AF, 0x1103, 0x1170, 0x11B0, 0x1103, 0x1170, + 0x11B1, 0x1103, 0x1170, 0x11B2, 0x1103, 0x1170, 0x11B3, 0x1103, + 0x1170, 0x11B4, 0x1103, 0x1170, 0x11B5, 0x1103, 0x1170, 0x11B6, + 0x1103, 0x1170, 0x11B7, 0x1103, 0x1170, 0x11B8, 0x1103, 0x1170, + 0x11B9, 0x1103, 0x1170, 0x11BA, 0x1103, 0x1170, 0x11BB, 0x1103, + 0x1170, 0x11BC, 0x1103, 0x1170, 0x11BD, 0x1103, 0x1170, 0x11BE, + 0x1103, 0x1170, 0x11BF, 0x1103, 0x1170, 0x11C0, 0x1103, 0x1170, + 0x11C1, 0x1103, 0x1170, 0x11C2, 0x1103, 0x1171, 0x1103, 0x1171, + 0x11A8, 0x1103, 0x1171, 0x11A9, 0x1103, 0x1171, 0x11AA, 0x1103, + 0x1171, 0x11AB, 0x1103, 0x1171, 0x11AC, 0x1103, 0x1171, 0x11AD, + 0x1103, 0x1171, 0x11AE, 0x1103, 0x1171, 0x11AF, 0x1103, 0x1171, + 0x11B0, 0x1103, 0x1171, 0x11B1, 0x1103, 0x1171, 0x11B2, 0x1103, + 0x1171, 0x11B3, 0x1103, 0x1171, 0x11B4, 0x1103, 0x1171, 0x11B5, + 0x1103, 0x1171, 0x11B6, 0x1103, 0x1171, 0x11B7, 0x1103, 0x1171, + 0x11B8, 0x1103, 0x1171, 0x11B9, 0x1103, 0x1171, 0x11BA, 0x1103, + 0x1171, 0x11BB, 0x1103, 0x1171, 0x11BC, 0x1103, 0x1171, 0x11BD, + 0x1103, 0x1171, 0x11BE, 0x1103, 0x1171, 0x11BF, 0x1103, 0x1171, + 0x11C0, 0x1103, 0x1171, 0x11C1, 0x1103, 0x1171, 0x11C2, 0x1103, + 0x1172, 0x1103, 0x1172, 0x11A8, 0x1103, 0x1172, 0x11A9, 0x1103, + 0x1172, 0x11AA, 0x1103, 0x1172, 0x11AB, 0x1103, 0x1172, 0x11AC, + 0x1103, 0x1172, 0x11AD, 0x1103, 0x1172, 0x11AE, 0x1103, 0x1172, + 0x11AF, 0x1103, 0x1172, 0x11B0, 0x1103, 0x1172, 0x11B1, 0x1103, + 0x1172, 0x11B2, 0x1103, 0x1172, 0x11B3, 0x1103, 0x1172, 0x11B4, + 0x1103, 0x1172, 0x11B5, 0x1103, 0x1172, 0x11B6, 0x1103, 0x1172, + 0x11B7, 0x1103, 0x1172, 0x11B8, 0x1103, 0x1172, 0x11B9, 0x1103, + 0x1172, 0x11BA, 0x1103, 0x1172, 0x11BB, 0x1103, 0x1172, 0x11BC, + 0x1103, 0x1172, 0x11BD, 0x1103, 0x1172, 0x11BE, 0x1103, 0x1172, + 0x11BF, 0x1103, 0x1172, 0x11C0, 0x1103, 0x1172, 0x11C1, 0x1103, + 0x1172, 0x11C2, 0x1103, 0x1173, 0x1103, 0x1173, 0x11A8, 0x1103, + 0x1173, 0x11A9, 0x1103, 0x1173, 0x11AA, 0x1103, 0x1173, 0x11AB, + 0x1103, 0x1173, 0x11AC, 0x1103, 0x1173, 0x11AD, 0x1103, 0x1173, + 0x11AE, 0x1103, 0x1173, 0x11AF, 0x1103, 0x1173, 0x11B0, 0x1103, + 0x1173, 0x11B1, 0x1103, 0x1173, 0x11B2, 0x1103, 0x1173, 0x11B3, + 0x1103, 0x1173, 0x11B4, 0x1103, 0x1173, 0x11B5, 0x1103, 0x1173, + 0x11B6, 0x1103, 0x1173, 0x11B7, 0x1103, 0x1173, 0x11B8, 0x1103, + 0x1173, 0x11B9, 0x1103, 0x1173, 0x11BA, 0x1103, 0x1173, 0x11BB, + 0x1103, 0x1173, 0x11BC, 0x1103, 0x1173, 0x11BD, 0x1103, 0x1173, + 0x11BE, 0x1103, 0x1173, 0x11BF, 0x1103, 0x1173, 0x11C0, 0x1103, + 0x1173, 0x11C1, 0x1103, 0x1173, 0x11C2, 0x1103, 0x1174, 0x1103, + 0x1174, 0x11A8, 0x1103, 0x1174, 0x11A9, 0x1103, 0x1174, 0x11AA, + 0x1103, 0x1174, 0x11AB, 0x1103, 0x1174, 0x11AC, 0x1103, 0x1174, + 0x11AD, 0x1103, 0x1174, 0x11AE, 0x1103, 0x1174, 0x11AF, 0x1103, + 0x1174, 0x11B0, 0x1103, 0x1174, 0x11B1, 0x1103, 0x1174, 0x11B2, + 0x1103, 0x1174, 0x11B3, 0x1103, 0x1174, 0x11B4, 0x1103, 0x1174, + 0x11B5, 0x1103, 0x1174, 0x11B6, 0x1103, 0x1174, 0x11B7, 0x1103, + 0x1174, 0x11B8, 0x1103, 0x1174, 0x11B9, 0x1103, 0x1174, 0x11BA, + 0x1103, 0x1174, 0x11BB, 0x1103, 0x1174, 0x11BC, 0x1103, 0x1174, + 0x11BD, 0x1103, 0x1174, 0x11BE, 0x1103, 0x1174, 0x11BF, 0x1103, + 0x1174, 0x11C0, 0x1103, 0x1174, 0x11C1, 0x1103, 0x1174, 0x11C2, + 0x1103, 0x1175, 0x1103, 0x1175, 0x11A8, 0x1103, 0x1175, 0x11A9, + 0x1103, 0x1175, 0x11AA, 0x1103, 0x1175, 0x11AB, 0x1103, 0x1175, + 0x11AC, 0x1103, 0x1175, 0x11AD, 0x1103, 0x1175, 0x11AE, 0x1103, + 0x1175, 0x11AF, 0x1103, 0x1175, 0x11B0, 0x1103, 0x1175, 0x11B1, + 0x1103, 0x1175, 0x11B2, 0x1103, 0x1175, 0x11B3, 0x1103, 0x1175, + 0x11B4, 0x1103, 0x1175, 0x11B5, 0x1103, 0x1175, 0x11B6, 0x1103, + 0x1175, 0x11B7, 0x1103, 0x1175, 0x11B8, 0x1103, 0x1175, 0x11B9, + 0x1103, 0x1175, 0x11BA, 0x1103, 0x1175, 0x11BB, 0x1103, 0x1175, + 0x11BC, 0x1103, 0x1175, 0x11BD, 0x1103, 0x1175, 0x11BE, 0x1103, + 0x1175, 0x11BF, 0x1103, 0x1175, 0x11C0, 0x1103, 0x1175, 0x11C1, + 0x1103, 0x1175, 0x11C2, 0x1104, 0x1161, 0x1104, 0x1161, 0x11A8, + 0x1104, 0x1161, 0x11A9, 0x1104, 0x1161, 0x11AA, 0x1104, 0x1161, + 0x11AB, 0x1104, 0x1161, 0x11AC, 0x1104, 0x1161, 0x11AD, 0x1104, + 0x1161, 0x11AE, 0x1104, 0x1161, 0x11AF, 0x1104, 0x1161, 0x11B0, + 0x1104, 0x1161, 0x11B1, 0x1104, 0x1161, 0x11B2, 0x1104, 0x1161, + 0x11B3, 0x1104, 0x1161, 0x11B4, 0x1104, 0x1161, 0x11B5, 0x1104, + 0x1161, 0x11B6, 0x1104, 0x1161, 0x11B7, 0x1104, 0x1161, 0x11B8, + 0x1104, 0x1161, 0x11B9, 0x1104, 0x1161, 0x11BA, 0x1104, 0x1161, + 0x11BB, 0x1104, 0x1161, 0x11BC, 0x1104, 0x1161, 0x11BD, 0x1104, + 0x1161, 0x11BE, 0x1104, 0x1161, 0x11BF, 0x1104, 0x1161, 0x11C0, + 0x1104, 0x1161, 0x11C1, 0x1104, 0x1161, 0x11C2, 0x1104, 0x1162, + 0x1104, 0x1162, 0x11A8, 0x1104, 0x1162, 0x11A9, 0x1104, 0x1162, + 0x11AA, 0x1104, 0x1162, 0x11AB, 0x1104, 0x1162, 0x11AC, 0x1104, + 0x1162, 0x11AD, 0x1104, 0x1162, 0x11AE, 0x1104, 0x1162, 0x11AF, + 0x1104, 0x1162, 0x11B0, 0x1104, 0x1162, 0x11B1, 0x1104, 0x1162, + 0x11B2, 0x1104, 0x1162, 0x11B3, 0x1104, 0x1162, 0x11B4, 0x1104, + 0x1162, 0x11B5, 0x1104, 0x1162, 0x11B6, 0x1104, 0x1162, 0x11B7, + 0x1104, 0x1162, 0x11B8, 0x1104, 0x1162, 0x11B9, 0x1104, 0x1162, + 0x11BA, 0x1104, 0x1162, 0x11BB, 0x1104, 0x1162, 0x11BC, 0x1104, + 0x1162, 0x11BD, 0x1104, 0x1162, 0x11BE, 0x1104, 0x1162, 0x11BF, + 0x1104, 0x1162, 0x11C0, 0x1104, 0x1162, 0x11C1, 0x1104, 0x1162, + 0x11C2, 0x1104, 0x1163, 0x1104, 0x1163, 0x11A8, 0x1104, 0x1163, + 0x11A9, 0x1104, 0x1163, 0x11AA, 0x1104, 0x1163, 0x11AB, 0x1104, + 0x1163, 0x11AC, 0x1104, 0x1163, 0x11AD, 0x1104, 0x1163, 0x11AE, + 0x1104, 0x1163, 0x11AF, 0x1104, 0x1163, 0x11B0, 0x1104, 0x1163, + 0x11B1, 0x1104, 0x1163, 0x11B2, 0x1104, 0x1163, 0x11B3, 0x1104, + 0x1163, 0x11B4, 0x1104, 0x1163, 0x11B5, 0x1104, 0x1163, 0x11B6, + 0x1104, 0x1163, 0x11B7, 0x1104, 0x1163, 0x11B8, 0x1104, 0x1163, + 0x11B9, 0x1104, 0x1163, 0x11BA, 0x1104, 0x1163, 0x11BB, 0x1104, + 0x1163, 0x11BC, 0x1104, 0x1163, 0x11BD, 0x1104, 0x1163, 0x11BE, + 0x1104, 0x1163, 0x11BF, 0x1104, 0x1163, 0x11C0, 0x1104, 0x1163, + 0x11C1, 0x1104, 0x1163, 0x11C2, 0x1104, 0x1164, 0x1104, 0x1164, + 0x11A8, 0x1104, 0x1164, 0x11A9, 0x1104, 0x1164, 0x11AA, 0x1104, + 0x1164, 0x11AB, 0x1104, 0x1164, 0x11AC, 0x1104, 0x1164, 0x11AD, + 0x1104, 0x1164, 0x11AE, 0x1104, 0x1164, 0x11AF, 0x1104, 0x1164, + 0x11B0, 0x1104, 0x1164, 0x11B1, 0x1104, 0x1164, 0x11B2, 0x1104, + 0x1164, 0x11B3, 0x1104, 0x1164, 0x11B4, 0x1104, 0x1164, 0x11B5, + 0x1104, 0x1164, 0x11B6, 0x1104, 0x1164, 0x11B7, 0x1104, 0x1164, + 0x11B8, 0x1104, 0x1164, 0x11B9, 0x1104, 0x1164, 0x11BA, 0x1104, + 0x1164, 0x11BB, 0x1104, 0x1164, 0x11BC, 0x1104, 0x1164, 0x11BD, + 0x1104, 0x1164, 0x11BE, 0x1104, 0x1164, 0x11BF, 0x1104, 0x1164, + 0x11C0, 0x1104, 0x1164, 0x11C1, 0x1104, 0x1164, 0x11C2, 0x1104, + 0x1165, 0x1104, 0x1165, 0x11A8, 0x1104, 0x1165, 0x11A9, 0x1104, + 0x1165, 0x11AA, 0x1104, 0x1165, 0x11AB, 0x1104, 0x1165, 0x11AC, + 0x1104, 0x1165, 0x11AD, 0x1104, 0x1165, 0x11AE, 0x1104, 0x1165, + 0x11AF, 0x1104, 0x1165, 0x11B0, 0x1104, 0x1165, 0x11B1, 0x1104, + 0x1165, 0x11B2, 0x1104, 0x1165, 0x11B3, 0x1104, 0x1165, 0x11B4, + 0x1104, 0x1165, 0x11B5, 0x1104, 0x1165, 0x11B6, 0x1104, 0x1165, + 0x11B7, 0x1104, 0x1165, 0x11B8, 0x1104, 0x1165, 0x11B9, 0x1104, + 0x1165, 0x11BA, 0x1104, 0x1165, 0x11BB, 0x1104, 0x1165, 0x11BC, + 0x1104, 0x1165, 0x11BD, 0x1104, 0x1165, 0x11BE, 0x1104, 0x1165, + 0x11BF, 0x1104, 0x1165, 0x11C0, 0x1104, 0x1165, 0x11C1, 0x1104, + 0x1165, 0x11C2, 0x1104, 0x1166, 0x1104, 0x1166, 0x11A8, 0x1104, + 0x1166, 0x11A9, 0x1104, 0x1166, 0x11AA, 0x1104, 0x1166, 0x11AB, + 0x1104, 0x1166, 0x11AC, 0x1104, 0x1166, 0x11AD, 0x1104, 0x1166, + 0x11AE, 0x1104, 0x1166, 0x11AF, 0x1104, 0x1166, 0x11B0, 0x1104, + 0x1166, 0x11B1, 0x1104, 0x1166, 0x11B2, 0x1104, 0x1166, 0x11B3, + 0x1104, 0x1166, 0x11B4, 0x1104, 0x1166, 0x11B5, 0x1104, 0x1166, + 0x11B6, 0x1104, 0x1166, 0x11B7, 0x1104, 0x1166, 0x11B8, 0x1104, + 0x1166, 0x11B9, 0x1104, 0x1166, 0x11BA, 0x1104, 0x1166, 0x11BB, + 0x1104, 0x1166, 0x11BC, 0x1104, 0x1166, 0x11BD, 0x1104, 0x1166, + 0x11BE, 0x1104, 0x1166, 0x11BF, 0x1104, 0x1166, 0x11C0, 0x1104, + 0x1166, 0x11C1, 0x1104, 0x1166, 0x11C2, 0x1104, 0x1167, 0x1104, + 0x1167, 0x11A8, 0x1104, 0x1167, 0x11A9, 0x1104, 0x1167, 0x11AA, + 0x1104, 0x1167, 0x11AB, 0x1104, 0x1167, 0x11AC, 0x1104, 0x1167, + 0x11AD, 0x1104, 0x1167, 0x11AE, 0x1104, 0x1167, 0x11AF, 0x1104, + 0x1167, 0x11B0, 0x1104, 0x1167, 0x11B1, 0x1104, 0x1167, 0x11B2, + 0x1104, 0x1167, 0x11B3, 0x1104, 0x1167, 0x11B4, 0x1104, 0x1167, + 0x11B5, 0x1104, 0x1167, 0x11B6, 0x1104, 0x1167, 0x11B7, 0x1104, + 0x1167, 0x11B8, 0x1104, 0x1167, 0x11B9, 0x1104, 0x1167, 0x11BA, + 0x1104, 0x1167, 0x11BB, 0x1104, 0x1167, 0x11BC, 0x1104, 0x1167, + 0x11BD, 0x1104, 0x1167, 0x11BE, 0x1104, 0x1167, 0x11BF, 0x1104, + 0x1167, 0x11C0, 0x1104, 0x1167, 0x11C1, 0x1104, 0x1167, 0x11C2, + 0x1104, 0x1168, 0x1104, 0x1168, 0x11A8, 0x1104, 0x1168, 0x11A9, + 0x1104, 0x1168, 0x11AA, 0x1104, 0x1168, 0x11AB, 0x1104, 0x1168, + 0x11AC, 0x1104, 0x1168, 0x11AD, 0x1104, 0x1168, 0x11AE, 0x1104, + 0x1168, 0x11AF, 0x1104, 0x1168, 0x11B0, 0x1104, 0x1168, 0x11B1, + 0x1104, 0x1168, 0x11B2, 0x1104, 0x1168, 0x11B3, 0x1104, 0x1168, + 0x11B4, 0x1104, 0x1168, 0x11B5, 0x1104, 0x1168, 0x11B6, 0x1104, + 0x1168, 0x11B7, 0x1104, 0x1168, 0x11B8, 0x1104, 0x1168, 0x11B9, + 0x1104, 0x1168, 0x11BA, 0x1104, 0x1168, 0x11BB, 0x1104, 0x1168, + 0x11BC, 0x1104, 0x1168, 0x11BD, 0x1104, 0x1168, 0x11BE, 0x1104, + 0x1168, 0x11BF, 0x1104, 0x1168, 0x11C0, 0x1104, 0x1168, 0x11C1, + 0x1104, 0x1168, 0x11C2, 0x1104, 0x1169, 0x1104, 0x1169, 0x11A8, + 0x1104, 0x1169, 0x11A9, 0x1104, 0x1169, 0x11AA, 0x1104, 0x1169, + 0x11AB, 0x1104, 0x1169, 0x11AC, 0x1104, 0x1169, 0x11AD, 0x1104, + 0x1169, 0x11AE, 0x1104, 0x1169, 0x11AF, 0x1104, 0x1169, 0x11B0, + 0x1104, 0x1169, 0x11B1, 0x1104, 0x1169, 0x11B2, 0x1104, 0x1169, + 0x11B3, 0x1104, 0x1169, 0x11B4, 0x1104, 0x1169, 0x11B5, 0x1104, + 0x1169, 0x11B6, 0x1104, 0x1169, 0x11B7, 0x1104, 0x1169, 0x11B8, + 0x1104, 0x1169, 0x11B9, 0x1104, 0x1169, 0x11BA, 0x1104, 0x1169, + 0x11BB, 0x1104, 0x1169, 0x11BC, 0x1104, 0x1169, 0x11BD, 0x1104, + 0x1169, 0x11BE, 0x1104, 0x1169, 0x11BF, 0x1104, 0x1169, 0x11C0, + 0x1104, 0x1169, 0x11C1, 0x1104, 0x1169, 0x11C2, 0x1104, 0x116A, + 0x1104, 0x116A, 0x11A8, 0x1104, 0x116A, 0x11A9, 0x1104, 0x116A, + 0x11AA, 0x1104, 0x116A, 0x11AB, 0x1104, 0x116A, 0x11AC, 0x1104, + 0x116A, 0x11AD, 0x1104, 0x116A, 0x11AE, 0x1104, 0x116A, 0x11AF, + 0x1104, 0x116A, 0x11B0, 0x1104, 0x116A, 0x11B1, 0x1104, 0x116A, + 0x11B2, 0x1104, 0x116A, 0x11B3, 0x1104, 0x116A, 0x11B4, 0x1104, + 0x116A, 0x11B5, 0x1104, 0x116A, 0x11B6, 0x1104, 0x116A, 0x11B7, + 0x1104, 0x116A, 0x11B8, 0x1104, 0x116A, 0x11B9, 0x1104, 0x116A, + 0x11BA, 0x1104, 0x116A, 0x11BB, 0x1104, 0x116A, 0x11BC, 0x1104, + 0x116A, 0x11BD, 0x1104, 0x116A, 0x11BE, 0x1104, 0x116A, 0x11BF, + 0x1104, 0x116A, 0x11C0, 0x1104, 0x116A, 0x11C1, 0x1104, 0x116A, + 0x11C2, 0x1104, 0x116B, 0x1104, 0x116B, 0x11A8, 0x1104, 0x116B, + 0x11A9, 0x1104, 0x116B, 0x11AA, 0x1104, 0x116B, 0x11AB, 0x1104, + 0x116B, 0x11AC, 0x1104, 0x116B, 0x11AD, 0x1104, 0x116B, 0x11AE, + 0x1104, 0x116B, 0x11AF, 0x1104, 0x116B, 0x11B0, 0x1104, 0x116B, + 0x11B1, 0x1104, 0x116B, 0x11B2, 0x1104, 0x116B, 0x11B3, 0x1104, + 0x116B, 0x11B4, 0x1104, 0x116B, 0x11B5, 0x1104, 0x116B, 0x11B6, + 0x1104, 0x116B, 0x11B7, 0x1104, 0x116B, 0x11B8, 0x1104, 0x116B, + 0x11B9, 0x1104, 0x116B, 0x11BA, 0x1104, 0x116B, 0x11BB, 0x1104, + 0x116B, 0x11BC, 0x1104, 0x116B, 0x11BD, 0x1104, 0x116B, 0x11BE, + 0x1104, 0x116B, 0x11BF, 0x1104, 0x116B, 0x11C0, 0x1104, 0x116B, + 0x11C1, 0x1104, 0x116B, 0x11C2, 0x1104, 0x116C, 0x1104, 0x116C, + 0x11A8, 0x1104, 0x116C, 0x11A9, 0x1104, 0x116C, 0x11AA, 0x1104, + 0x116C, 0x11AB, 0x1104, 0x116C, 0x11AC, 0x1104, 0x116C, 0x11AD, + 0x1104, 0x116C, 0x11AE, 0x1104, 0x116C, 0x11AF, 0x1104, 0x116C, + 0x11B0, 0x1104, 0x116C, 0x11B1, 0x1104, 0x116C, 0x11B2, 0x1104, + 0x116C, 0x11B3, 0x1104, 0x116C, 0x11B4, 0x1104, 0x116C, 0x11B5, + 0x1104, 0x116C, 0x11B6, 0x1104, 0x116C, 0x11B7, 0x1104, 0x116C, + 0x11B8, 0x1104, 0x116C, 0x11B9, 0x1104, 0x116C, 0x11BA, 0x1104, + 0x116C, 0x11BB, 0x1104, 0x116C, 0x11BC, 0x1104, 0x116C, 0x11BD, + 0x1104, 0x116C, 0x11BE, 0x1104, 0x116C, 0x11BF, 0x1104, 0x116C, + 0x11C0, 0x1104, 0x116C, 0x11C1, 0x1104, 0x116C, 0x11C2, 0x1104, + 0x116D, 0x1104, 0x116D, 0x11A8, 0x1104, 0x116D, 0x11A9, 0x1104, + 0x116D, 0x11AA, 0x1104, 0x116D, 0x11AB, 0x1104, 0x116D, 0x11AC, + 0x1104, 0x116D, 0x11AD, 0x1104, 0x116D, 0x11AE, 0x1104, 0x116D, + 0x11AF, 0x1104, 0x116D, 0x11B0, 0x1104, 0x116D, 0x11B1, 0x1104, + 0x116D, 0x11B2, 0x1104, 0x116D, 0x11B3, 0x1104, 0x116D, 0x11B4, + 0x1104, 0x116D, 0x11B5, 0x1104, 0x116D, 0x11B6, 0x1104, 0x116D, + 0x11B7, 0x1104, 0x116D, 0x11B8, 0x1104, 0x116D, 0x11B9, 0x1104, + 0x116D, 0x11BA, 0x1104, 0x116D, 0x11BB, 0x1104, 0x116D, 0x11BC, + 0x1104, 0x116D, 0x11BD, 0x1104, 0x116D, 0x11BE, 0x1104, 0x116D, + 0x11BF, 0x1104, 0x116D, 0x11C0, 0x1104, 0x116D, 0x11C1, 0x1104, + 0x116D, 0x11C2, 0x1104, 0x116E, 0x1104, 0x116E, 0x11A8, 0x1104, + 0x116E, 0x11A9, 0x1104, 0x116E, 0x11AA, 0x1104, 0x116E, 0x11AB, + 0x1104, 0x116E, 0x11AC, 0x1104, 0x116E, 0x11AD, 0x1104, 0x116E, + 0x11AE, 0x1104, 0x116E, 0x11AF, 0x1104, 0x116E, 0x11B0, 0x1104, + 0x116E, 0x11B1, 0x1104, 0x116E, 0x11B2, 0x1104, 0x116E, 0x11B3, + 0x1104, 0x116E, 0x11B4, 0x1104, 0x116E, 0x11B5, 0x1104, 0x116E, + 0x11B6, 0x1104, 0x116E, 0x11B7, 0x1104, 0x116E, 0x11B8, 0x1104, + 0x116E, 0x11B9, 0x1104, 0x116E, 0x11BA, 0x1104, 0x116E, 0x11BB, + 0x1104, 0x116E, 0x11BC, 0x1104, 0x116E, 0x11BD, 0x1104, 0x116E, + 0x11BE, 0x1104, 0x116E, 0x11BF, 0x1104, 0x116E, 0x11C0, 0x1104, + 0x116E, 0x11C1, 0x1104, 0x116E, 0x11C2, 0x1104, 0x116F, 0x1104, + 0x116F, 0x11A8, 0x1104, 0x116F, 0x11A9, 0x1104, 0x116F, 0x11AA, + 0x1104, 0x116F, 0x11AB, 0x1104, 0x116F, 0x11AC, 0x1104, 0x116F, + 0x11AD, 0x1104, 0x116F, 0x11AE, 0x1104, 0x116F, 0x11AF, 0x1104, + 0x116F, 0x11B0, 0x1104, 0x116F, 0x11B1, 0x1104, 0x116F, 0x11B2, + 0x1104, 0x116F, 0x11B3, 0x1104, 0x116F, 0x11B4, 0x1104, 0x116F, + 0x11B5, 0x1104, 0x116F, 0x11B6, 0x1104, 0x116F, 0x11B7, 0x1104, + 0x116F, 0x11B8, 0x1104, 0x116F, 0x11B9, 0x1104, 0x116F, 0x11BA, + 0x1104, 0x116F, 0x11BB, 0x1104, 0x116F, 0x11BC, 0x1104, 0x116F, + 0x11BD, 0x1104, 0x116F, 0x11BE, 0x1104, 0x116F, 0x11BF, 0x1104, + 0x116F, 0x11C0, 0x1104, 0x116F, 0x11C1, 0x1104, 0x116F, 0x11C2, + 0x1104, 0x1170, 0x1104, 0x1170, 0x11A8, 0x1104, 0x1170, 0x11A9, + 0x1104, 0x1170, 0x11AA, 0x1104, 0x1170, 0x11AB, 0x1104, 0x1170, + 0x11AC, 0x1104, 0x1170, 0x11AD, 0x1104, 0x1170, 0x11AE, 0x1104, + 0x1170, 0x11AF, 0x1104, 0x1170, 0x11B0, 0x1104, 0x1170, 0x11B1, + 0x1104, 0x1170, 0x11B2, 0x1104, 0x1170, 0x11B3, 0x1104, 0x1170, + 0x11B4, 0x1104, 0x1170, 0x11B5, 0x1104, 0x1170, 0x11B6, 0x1104, + 0x1170, 0x11B7, 0x1104, 0x1170, 0x11B8, 0x1104, 0x1170, 0x11B9, + 0x1104, 0x1170, 0x11BA, 0x1104, 0x1170, 0x11BB, 0x1104, 0x1170, + 0x11BC, 0x1104, 0x1170, 0x11BD, 0x1104, 0x1170, 0x11BE, 0x1104, + 0x1170, 0x11BF, 0x1104, 0x1170, 0x11C0, 0x1104, 0x1170, 0x11C1, + 0x1104, 0x1170, 0x11C2, 0x1104, 0x1171, 0x1104, 0x1171, 0x11A8, + 0x1104, 0x1171, 0x11A9, 0x1104, 0x1171, 0x11AA, 0x1104, 0x1171, + 0x11AB, 0x1104, 0x1171, 0x11AC, 0x1104, 0x1171, 0x11AD, 0x1104, + 0x1171, 0x11AE, 0x1104, 0x1171, 0x11AF, 0x1104, 0x1171, 0x11B0, + 0x1104, 0x1171, 0x11B1, 0x1104, 0x1171, 0x11B2, 0x1104, 0x1171, + 0x11B3, 0x1104, 0x1171, 0x11B4, 0x1104, 0x1171, 0x11B5, 0x1104, + 0x1171, 0x11B6, 0x1104, 0x1171, 0x11B7, 0x1104, 0x1171, 0x11B8, + 0x1104, 0x1171, 0x11B9, 0x1104, 0x1171, 0x11BA, 0x1104, 0x1171, + 0x11BB, 0x1104, 0x1171, 0x11BC, 0x1104, 0x1171, 0x11BD, 0x1104, + 0x1171, 0x11BE, 0x1104, 0x1171, 0x11BF, 0x1104, 0x1171, 0x11C0, + 0x1104, 0x1171, 0x11C1, 0x1104, 0x1171, 0x11C2, 0x1104, 0x1172, + 0x1104, 0x1172, 0x11A8, 0x1104, 0x1172, 0x11A9, 0x1104, 0x1172, + 0x11AA, 0x1104, 0x1172, 0x11AB, 0x1104, 0x1172, 0x11AC, 0x1104, + 0x1172, 0x11AD, 0x1104, 0x1172, 0x11AE, 0x1104, 0x1172, 0x11AF, + 0x1104, 0x1172, 0x11B0, 0x1104, 0x1172, 0x11B1, 0x1104, 0x1172, + 0x11B2, 0x1104, 0x1172, 0x11B3, 0x1104, 0x1172, 0x11B4, 0x1104, + 0x1172, 0x11B5, 0x1104, 0x1172, 0x11B6, 0x1104, 0x1172, 0x11B7, + 0x1104, 0x1172, 0x11B8, 0x1104, 0x1172, 0x11B9, 0x1104, 0x1172, + 0x11BA, 0x1104, 0x1172, 0x11BB, 0x1104, 0x1172, 0x11BC, 0x1104, + 0x1172, 0x11BD, 0x1104, 0x1172, 0x11BE, 0x1104, 0x1172, 0x11BF, + 0x1104, 0x1172, 0x11C0, 0x1104, 0x1172, 0x11C1, 0x1104, 0x1172, + 0x11C2, 0x1104, 0x1173, 0x1104, 0x1173, 0x11A8, 0x1104, 0x1173, + 0x11A9, 0x1104, 0x1173, 0x11AA, 0x1104, 0x1173, 0x11AB, 0x1104, + 0x1173, 0x11AC, 0x1104, 0x1173, 0x11AD, 0x1104, 0x1173, 0x11AE, + 0x1104, 0x1173, 0x11AF, 0x1104, 0x1173, 0x11B0, 0x1104, 0x1173, + 0x11B1, 0x1104, 0x1173, 0x11B2, 0x1104, 0x1173, 0x11B3, 0x1104, + 0x1173, 0x11B4, 0x1104, 0x1173, 0x11B5, 0x1104, 0x1173, 0x11B6, + 0x1104, 0x1173, 0x11B7, 0x1104, 0x1173, 0x11B8, 0x1104, 0x1173, + 0x11B9, 0x1104, 0x1173, 0x11BA, 0x1104, 0x1173, 0x11BB, 0x1104, + 0x1173, 0x11BC, 0x1104, 0x1173, 0x11BD, 0x1104, 0x1173, 0x11BE, + 0x1104, 0x1173, 0x11BF, 0x1104, 0x1173, 0x11C0, 0x1104, 0x1173, + 0x11C1, 0x1104, 0x1173, 0x11C2, 0x1104, 0x1174, 0x1104, 0x1174, + 0x11A8, 0x1104, 0x1174, 0x11A9, 0x1104, 0x1174, 0x11AA, 0x1104, + 0x1174, 0x11AB, 0x1104, 0x1174, 0x11AC, 0x1104, 0x1174, 0x11AD, + 0x1104, 0x1174, 0x11AE, 0x1104, 0x1174, 0x11AF, 0x1104, 0x1174, + 0x11B0, 0x1104, 0x1174, 0x11B1, 0x1104, 0x1174, 0x11B2, 0x1104, + 0x1174, 0x11B3, 0x1104, 0x1174, 0x11B4, 0x1104, 0x1174, 0x11B5, + 0x1104, 0x1174, 0x11B6, 0x1104, 0x1174, 0x11B7, 0x1104, 0x1174, + 0x11B8, 0x1104, 0x1174, 0x11B9, 0x1104, 0x1174, 0x11BA, 0x1104, + 0x1174, 0x11BB, 0x1104, 0x1174, 0x11BC, 0x1104, 0x1174, 0x11BD, + 0x1104, 0x1174, 0x11BE, 0x1104, 0x1174, 0x11BF, 0x1104, 0x1174, + 0x11C0, 0x1104, 0x1174, 0x11C1, 0x1104, 0x1174, 0x11C2, 0x1104, + 0x1175, 0x1104, 0x1175, 0x11A8, 0x1104, 0x1175, 0x11A9, 0x1104, + 0x1175, 0x11AA, 0x1104, 0x1175, 0x11AB, 0x1104, 0x1175, 0x11AC, + 0x1104, 0x1175, 0x11AD, 0x1104, 0x1175, 0x11AE, 0x1104, 0x1175, + 0x11AF, 0x1104, 0x1175, 0x11B0, 0x1104, 0x1175, 0x11B1, 0x1104, + 0x1175, 0x11B2, 0x1104, 0x1175, 0x11B3, 0x1104, 0x1175, 0x11B4, + 0x1104, 0x1175, 0x11B5, 0x1104, 0x1175, 0x11B6, 0x1104, 0x1175, + 0x11B7, 0x1104, 0x1175, 0x11B8, 0x1104, 0x1175, 0x11B9, 0x1104, + 0x1175, 0x11BA, 0x1104, 0x1175, 0x11BB, 0x1104, 0x1175, 0x11BC, + 0x1104, 0x1175, 0x11BD, 0x1104, 0x1175, 0x11BE, 0x1104, 0x1175, + 0x11BF, 0x1104, 0x1175, 0x11C0, 0x1104, 0x1175, 0x11C1, 0x1104, + 0x1175, 0x11C2, 0x1105, 0x1161, 0x1105, 0x1161, 0x11A8, 0x1105, + 0x1161, 0x11A9, 0x1105, 0x1161, 0x11AA, 0x1105, 0x1161, 0x11AB, + 0x1105, 0x1161, 0x11AC, 0x1105, 0x1161, 0x11AD, 0x1105, 0x1161, + 0x11AE, 0x1105, 0x1161, 0x11AF, 0x1105, 0x1161, 0x11B0, 0x1105, + 0x1161, 0x11B1, 0x1105, 0x1161, 0x11B2, 0x1105, 0x1161, 0x11B3, + 0x1105, 0x1161, 0x11B4, 0x1105, 0x1161, 0x11B5, 0x1105, 0x1161, + 0x11B6, 0x1105, 0x1161, 0x11B7, 0x1105, 0x1161, 0x11B8, 0x1105, + 0x1161, 0x11B9, 0x1105, 0x1161, 0x11BA, 0x1105, 0x1161, 0x11BB, + 0x1105, 0x1161, 0x11BC, 0x1105, 0x1161, 0x11BD, 0x1105, 0x1161, + 0x11BE, 0x1105, 0x1161, 0x11BF, 0x1105, 0x1161, 0x11C0, 0x1105, + 0x1161, 0x11C1, 0x1105, 0x1161, 0x11C2, 0x1105, 0x1162, 0x1105, + 0x1162, 0x11A8, 0x1105, 0x1162, 0x11A9, 0x1105, 0x1162, 0x11AA, + 0x1105, 0x1162, 0x11AB, 0x1105, 0x1162, 0x11AC, 0x1105, 0x1162, + 0x11AD, 0x1105, 0x1162, 0x11AE, 0x1105, 0x1162, 0x11AF, 0x1105, + 0x1162, 0x11B0, 0x1105, 0x1162, 0x11B1, 0x1105, 0x1162, 0x11B2, + 0x1105, 0x1162, 0x11B3, 0x1105, 0x1162, 0x11B4, 0x1105, 0x1162, + 0x11B5, 0x1105, 0x1162, 0x11B6, 0x1105, 0x1162, 0x11B7, 0x1105, + 0x1162, 0x11B8, 0x1105, 0x1162, 0x11B9, 0x1105, 0x1162, 0x11BA, + 0x1105, 0x1162, 0x11BB, 0x1105, 0x1162, 0x11BC, 0x1105, 0x1162, + 0x11BD, 0x1105, 0x1162, 0x11BE, 0x1105, 0x1162, 0x11BF, 0x1105, + 0x1162, 0x11C0, 0x1105, 0x1162, 0x11C1, 0x1105, 0x1162, 0x11C2, + 0x1105, 0x1163, 0x1105, 0x1163, 0x11A8, 0x1105, 0x1163, 0x11A9, + 0x1105, 0x1163, 0x11AA, 0x1105, 0x1163, 0x11AB, 0x1105, 0x1163, + 0x11AC, 0x1105, 0x1163, 0x11AD, 0x1105, 0x1163, 0x11AE, 0x1105, + 0x1163, 0x11AF, 0x1105, 0x1163, 0x11B0, 0x1105, 0x1163, 0x11B1, + 0x1105, 0x1163, 0x11B2, 0x1105, 0x1163, 0x11B3, 0x1105, 0x1163, + 0x11B4, 0x1105, 0x1163, 0x11B5, 0x1105, 0x1163, 0x11B6, 0x1105, + 0x1163, 0x11B7, 0x1105, 0x1163, 0x11B8, 0x1105, 0x1163, 0x11B9, + 0x1105, 0x1163, 0x11BA, 0x1105, 0x1163, 0x11BB, 0x1105, 0x1163, + 0x11BC, 0x1105, 0x1163, 0x11BD, 0x1105, 0x1163, 0x11BE, 0x1105, + 0x1163, 0x11BF, 0x1105, 0x1163, 0x11C0, 0x1105, 0x1163, 0x11C1, + 0x1105, 0x1163, 0x11C2, 0x1105, 0x1164, 0x1105, 0x1164, 0x11A8, + 0x1105, 0x1164, 0x11A9, 0x1105, 0x1164, 0x11AA, 0x1105, 0x1164, + 0x11AB, 0x1105, 0x1164, 0x11AC, 0x1105, 0x1164, 0x11AD, 0x1105, + 0x1164, 0x11AE, 0x1105, 0x1164, 0x11AF, 0x1105, 0x1164, 0x11B0, + 0x1105, 0x1164, 0x11B1, 0x1105, 0x1164, 0x11B2, 0x1105, 0x1164, + 0x11B3, 0x1105, 0x1164, 0x11B4, 0x1105, 0x1164, 0x11B5, 0x1105, + 0x1164, 0x11B6, 0x1105, 0x1164, 0x11B7, 0x1105, 0x1164, 0x11B8, + 0x1105, 0x1164, 0x11B9, 0x1105, 0x1164, 0x11BA, 0x1105, 0x1164, + 0x11BB, 0x1105, 0x1164, 0x11BC, 0x1105, 0x1164, 0x11BD, 0x1105, + 0x1164, 0x11BE, 0x1105, 0x1164, 0x11BF, 0x1105, 0x1164, 0x11C0, + 0x1105, 0x1164, 0x11C1, 0x1105, 0x1164, 0x11C2, 0x1105, 0x1165, + 0x1105, 0x1165, 0x11A8, 0x1105, 0x1165, 0x11A9, 0x1105, 0x1165, + 0x11AA, 0x1105, 0x1165, 0x11AB, 0x1105, 0x1165, 0x11AC, 0x1105, + 0x1165, 0x11AD, 0x1105, 0x1165, 0x11AE, 0x1105, 0x1165, 0x11AF, + 0x1105, 0x1165, 0x11B0, 0x1105, 0x1165, 0x11B1, 0x1105, 0x1165, + 0x11B2, 0x1105, 0x1165, 0x11B3, 0x1105, 0x1165, 0x11B4, 0x1105, + 0x1165, 0x11B5, 0x1105, 0x1165, 0x11B6, 0x1105, 0x1165, 0x11B7, + 0x1105, 0x1165, 0x11B8, 0x1105, 0x1165, 0x11B9, 0x1105, 0x1165, + 0x11BA, 0x1105, 0x1165, 0x11BB, 0x1105, 0x1165, 0x11BC, 0x1105, + 0x1165, 0x11BD, 0x1105, 0x1165, 0x11BE, 0x1105, 0x1165, 0x11BF, + 0x1105, 0x1165, 0x11C0, 0x1105, 0x1165, 0x11C1, 0x1105, 0x1165, + 0x11C2, 0x1105, 0x1166, 0x1105, 0x1166, 0x11A8, 0x1105, 0x1166, + 0x11A9, 0x1105, 0x1166, 0x11AA, 0x1105, 0x1166, 0x11AB, 0x1105, + 0x1166, 0x11AC, 0x1105, 0x1166, 0x11AD, 0x1105, 0x1166, 0x11AE, + 0x1105, 0x1166, 0x11AF, 0x1105, 0x1166, 0x11B0, 0x1105, 0x1166, + 0x11B1, 0x1105, 0x1166, 0x11B2, 0x1105, 0x1166, 0x11B3, 0x1105, + 0x1166, 0x11B4, 0x1105, 0x1166, 0x11B5, 0x1105, 0x1166, 0x11B6, + 0x1105, 0x1166, 0x11B7, 0x1105, 0x1166, 0x11B8, 0x1105, 0x1166, + 0x11B9, 0x1105, 0x1166, 0x11BA, 0x1105, 0x1166, 0x11BB, 0x1105, + 0x1166, 0x11BC, 0x1105, 0x1166, 0x11BD, 0x1105, 0x1166, 0x11BE, + 0x1105, 0x1166, 0x11BF, 0x1105, 0x1166, 0x11C0, 0x1105, 0x1166, + 0x11C1, 0x1105, 0x1166, 0x11C2, 0x1105, 0x1167, 0x1105, 0x1167, + 0x11A8, 0x1105, 0x1167, 0x11A9, 0x1105, 0x1167, 0x11AA, 0x1105, + 0x1167, 0x11AB, 0x1105, 0x1167, 0x11AC, 0x1105, 0x1167, 0x11AD, + 0x1105, 0x1167, 0x11AE, 0x1105, 0x1167, 0x11AF, 0x1105, 0x1167, + 0x11B0, 0x1105, 0x1167, 0x11B1, 0x1105, 0x1167, 0x11B2, 0x1105, + 0x1167, 0x11B3, 0x1105, 0x1167, 0x11B4, 0x1105, 0x1167, 0x11B5, + 0x1105, 0x1167, 0x11B6, 0x1105, 0x1167, 0x11B7, 0x1105, 0x1167, + 0x11B8, 0x1105, 0x1167, 0x11B9, 0x1105, 0x1167, 0x11BA, 0x1105, + 0x1167, 0x11BB, 0x1105, 0x1167, 0x11BC, 0x1105, 0x1167, 0x11BD, + 0x1105, 0x1167, 0x11BE, 0x1105, 0x1167, 0x11BF, 0x1105, 0x1167, + 0x11C0, 0x1105, 0x1167, 0x11C1, 0x1105, 0x1167, 0x11C2, 0x1105, + 0x1168, 0x1105, 0x1168, 0x11A8, 0x1105, 0x1168, 0x11A9, 0x1105, + 0x1168, 0x11AA, 0x1105, 0x1168, 0x11AB, 0x1105, 0x1168, 0x11AC, + 0x1105, 0x1168, 0x11AD, 0x1105, 0x1168, 0x11AE, 0x1105, 0x1168, + 0x11AF, 0x1105, 0x1168, 0x11B0, 0x1105, 0x1168, 0x11B1, 0x1105, + 0x1168, 0x11B2, 0x1105, 0x1168, 0x11B3, 0x1105, 0x1168, 0x11B4, + 0x1105, 0x1168, 0x11B5, 0x1105, 0x1168, 0x11B6, 0x1105, 0x1168, + 0x11B7, 0x1105, 0x1168, 0x11B8, 0x1105, 0x1168, 0x11B9, 0x1105, + 0x1168, 0x11BA, 0x1105, 0x1168, 0x11BB, 0x1105, 0x1168, 0x11BC, + 0x1105, 0x1168, 0x11BD, 0x1105, 0x1168, 0x11BE, 0x1105, 0x1168, + 0x11BF, 0x1105, 0x1168, 0x11C0, 0x1105, 0x1168, 0x11C1, 0x1105, + 0x1168, 0x11C2, 0x1105, 0x1169, 0x1105, 0x1169, 0x11A8, 0x1105, + 0x1169, 0x11A9, 0x1105, 0x1169, 0x11AA, 0x1105, 0x1169, 0x11AB, + 0x1105, 0x1169, 0x11AC, 0x1105, 0x1169, 0x11AD, 0x1105, 0x1169, + 0x11AE, 0x1105, 0x1169, 0x11AF, 0x1105, 0x1169, 0x11B0, 0x1105, + 0x1169, 0x11B1, 0x1105, 0x1169, 0x11B2, 0x1105, 0x1169, 0x11B3, + 0x1105, 0x1169, 0x11B4, 0x1105, 0x1169, 0x11B5, 0x1105, 0x1169, + 0x11B6, 0x1105, 0x1169, 0x11B7, 0x1105, 0x1169, 0x11B8, 0x1105, + 0x1169, 0x11B9, 0x1105, 0x1169, 0x11BA, 0x1105, 0x1169, 0x11BB, + 0x1105, 0x1169, 0x11BC, 0x1105, 0x1169, 0x11BD, 0x1105, 0x1169, + 0x11BE, 0x1105, 0x1169, 0x11BF, 0x1105, 0x1169, 0x11C0, 0x1105, + 0x1169, 0x11C1, 0x1105, 0x1169, 0x11C2, 0x1105, 0x116A, 0x1105, + 0x116A, 0x11A8, 0x1105, 0x116A, 0x11A9, 0x1105, 0x116A, 0x11AA, + 0x1105, 0x116A, 0x11AB, 0x1105, 0x116A, 0x11AC, 0x1105, 0x116A, + 0x11AD, 0x1105, 0x116A, 0x11AE, 0x1105, 0x116A, 0x11AF, 0x1105, + 0x116A, 0x11B0, 0x1105, 0x116A, 0x11B1, 0x1105, 0x116A, 0x11B2, + 0x1105, 0x116A, 0x11B3, 0x1105, 0x116A, 0x11B4, 0x1105, 0x116A, + 0x11B5, 0x1105, 0x116A, 0x11B6, 0x1105, 0x116A, 0x11B7, 0x1105, + 0x116A, 0x11B8, 0x1105, 0x116A, 0x11B9, 0x1105, 0x116A, 0x11BA, + 0x1105, 0x116A, 0x11BB, 0x1105, 0x116A, 0x11BC, 0x1105, 0x116A, + 0x11BD, 0x1105, 0x116A, 0x11BE, 0x1105, 0x116A, 0x11BF, 0x1105, + 0x116A, 0x11C0, 0x1105, 0x116A, 0x11C1, 0x1105, 0x116A, 0x11C2, + 0x1105, 0x116B, 0x1105, 0x116B, 0x11A8, 0x1105, 0x116B, 0x11A9, + 0x1105, 0x116B, 0x11AA, 0x1105, 0x116B, 0x11AB, 0x1105, 0x116B, + 0x11AC, 0x1105, 0x116B, 0x11AD, 0x1105, 0x116B, 0x11AE, 0x1105, + 0x116B, 0x11AF, 0x1105, 0x116B, 0x11B0, 0x1105, 0x116B, 0x11B1, + 0x1105, 0x116B, 0x11B2, 0x1105, 0x116B, 0x11B3, 0x1105, 0x116B, + 0x11B4, 0x1105, 0x116B, 0x11B5, 0x1105, 0x116B, 0x11B6, 0x1105, + 0x116B, 0x11B7, 0x1105, 0x116B, 0x11B8, 0x1105, 0x116B, 0x11B9, + 0x1105, 0x116B, 0x11BA, 0x1105, 0x116B, 0x11BB, 0x1105, 0x116B, + 0x11BC, 0x1105, 0x116B, 0x11BD, 0x1105, 0x116B, 0x11BE, 0x1105, + 0x116B, 0x11BF, 0x1105, 0x116B, 0x11C0, 0x1105, 0x116B, 0x11C1, + 0x1105, 0x116B, 0x11C2, 0x1105, 0x116C, 0x1105, 0x116C, 0x11A8, + 0x1105, 0x116C, 0x11A9, 0x1105, 0x116C, 0x11AA, 0x1105, 0x116C, + 0x11AB, 0x1105, 0x116C, 0x11AC, 0x1105, 0x116C, 0x11AD, 0x1105, + 0x116C, 0x11AE, 0x1105, 0x116C, 0x11AF, 0x1105, 0x116C, 0x11B0, + 0x1105, 0x116C, 0x11B1, 0x1105, 0x116C, 0x11B2, 0x1105, 0x116C, + 0x11B3, 0x1105, 0x116C, 0x11B4, 0x1105, 0x116C, 0x11B5, 0x1105, + 0x116C, 0x11B6, 0x1105, 0x116C, 0x11B7, 0x1105, 0x116C, 0x11B8, + 0x1105, 0x116C, 0x11B9, 0x1105, 0x116C, 0x11BA, 0x1105, 0x116C, + 0x11BB, 0x1105, 0x116C, 0x11BC, 0x1105, 0x116C, 0x11BD, 0x1105, + 0x116C, 0x11BE, 0x1105, 0x116C, 0x11BF, 0x1105, 0x116C, 0x11C0, + 0x1105, 0x116C, 0x11C1, 0x1105, 0x116C, 0x11C2, 0x1105, 0x116D, + 0x1105, 0x116D, 0x11A8, 0x1105, 0x116D, 0x11A9, 0x1105, 0x116D, + 0x11AA, 0x1105, 0x116D, 0x11AB, 0x1105, 0x116D, 0x11AC, 0x1105, + 0x116D, 0x11AD, 0x1105, 0x116D, 0x11AE, 0x1105, 0x116D, 0x11AF, + 0x1105, 0x116D, 0x11B0, 0x1105, 0x116D, 0x11B1, 0x1105, 0x116D, + 0x11B2, 0x1105, 0x116D, 0x11B3, 0x1105, 0x116D, 0x11B4, 0x1105, + 0x116D, 0x11B5, 0x1105, 0x116D, 0x11B6, 0x1105, 0x116D, 0x11B7, + 0x1105, 0x116D, 0x11B8, 0x1105, 0x116D, 0x11B9, 0x1105, 0x116D, + 0x11BA, 0x1105, 0x116D, 0x11BB, 0x1105, 0x116D, 0x11BC, 0x1105, + 0x116D, 0x11BD, 0x1105, 0x116D, 0x11BE, 0x1105, 0x116D, 0x11BF, + 0x1105, 0x116D, 0x11C0, 0x1105, 0x116D, 0x11C1, 0x1105, 0x116D, + 0x11C2, 0x1105, 0x116E, 0x1105, 0x116E, 0x11A8, 0x1105, 0x116E, + 0x11A9, 0x1105, 0x116E, 0x11AA, 0x1105, 0x116E, 0x11AB, 0x1105, + 0x116E, 0x11AC, 0x1105, 0x116E, 0x11AD, 0x1105, 0x116E, 0x11AE, + 0x1105, 0x116E, 0x11AF, 0x1105, 0x116E, 0x11B0, 0x1105, 0x116E, + 0x11B1, 0x1105, 0x116E, 0x11B2, 0x1105, 0x116E, 0x11B3, 0x1105, + 0x116E, 0x11B4, 0x1105, 0x116E, 0x11B5, 0x1105, 0x116E, 0x11B6, + 0x1105, 0x116E, 0x11B7, 0x1105, 0x116E, 0x11B8, 0x1105, 0x116E, + 0x11B9, 0x1105, 0x116E, 0x11BA, 0x1105, 0x116E, 0x11BB, 0x1105, + 0x116E, 0x11BC, 0x1105, 0x116E, 0x11BD, 0x1105, 0x116E, 0x11BE, + 0x1105, 0x116E, 0x11BF, 0x1105, 0x116E, 0x11C0, 0x1105, 0x116E, + 0x11C1, 0x1105, 0x116E, 0x11C2, 0x1105, 0x116F, 0x1105, 0x116F, + 0x11A8, 0x1105, 0x116F, 0x11A9, 0x1105, 0x116F, 0x11AA, 0x1105, + 0x116F, 0x11AB, 0x1105, 0x116F, 0x11AC, 0x1105, 0x116F, 0x11AD, + 0x1105, 0x116F, 0x11AE, 0x1105, 0x116F, 0x11AF, 0x1105, 0x116F, + 0x11B0, 0x1105, 0x116F, 0x11B1, 0x1105, 0x116F, 0x11B2, 0x1105, + 0x116F, 0x11B3, 0x1105, 0x116F, 0x11B4, 0x1105, 0x116F, 0x11B5, + 0x1105, 0x116F, 0x11B6, 0x1105, 0x116F, 0x11B7, 0x1105, 0x116F, + 0x11B8, 0x1105, 0x116F, 0x11B9, 0x1105, 0x116F, 0x11BA, 0x1105, + 0x116F, 0x11BB, 0x1105, 0x116F, 0x11BC, 0x1105, 0x116F, 0x11BD, + 0x1105, 0x116F, 0x11BE, 0x1105, 0x116F, 0x11BF, 0x1105, 0x116F, + 0x11C0, 0x1105, 0x116F, 0x11C1, 0x1105, 0x116F, 0x11C2, 0x1105, + 0x1170, 0x1105, 0x1170, 0x11A8, 0x1105, 0x1170, 0x11A9, 0x1105, + 0x1170, 0x11AA, 0x1105, 0x1170, 0x11AB, 0x1105, 0x1170, 0x11AC, + 0x1105, 0x1170, 0x11AD, 0x1105, 0x1170, 0x11AE, 0x1105, 0x1170, + 0x11AF, 0x1105, 0x1170, 0x11B0, 0x1105, 0x1170, 0x11B1, 0x1105, + 0x1170, 0x11B2, 0x1105, 0x1170, 0x11B3, 0x1105, 0x1170, 0x11B4, + 0x1105, 0x1170, 0x11B5, 0x1105, 0x1170, 0x11B6, 0x1105, 0x1170, + 0x11B7, 0x1105, 0x1170, 0x11B8, 0x1105, 0x1170, 0x11B9, 0x1105, + 0x1170, 0x11BA, 0x1105, 0x1170, 0x11BB, 0x1105, 0x1170, 0x11BC, + 0x1105, 0x1170, 0x11BD, 0x1105, 0x1170, 0x11BE, 0x1105, 0x1170, + 0x11BF, 0x1105, 0x1170, 0x11C0, 0x1105, 0x1170, 0x11C1, 0x1105, + 0x1170, 0x11C2, 0x1105, 0x1171, 0x1105, 0x1171, 0x11A8, 0x1105, + 0x1171, 0x11A9, 0x1105, 0x1171, 0x11AA, 0x1105, 0x1171, 0x11AB, + 0x1105, 0x1171, 0x11AC, 0x1105, 0x1171, 0x11AD, 0x1105, 0x1171, + 0x11AE, 0x1105, 0x1171, 0x11AF, 0x1105, 0x1171, 0x11B0, 0x1105, + 0x1171, 0x11B1, 0x1105, 0x1171, 0x11B2, 0x1105, 0x1171, 0x11B3, + 0x1105, 0x1171, 0x11B4, 0x1105, 0x1171, 0x11B5, 0x1105, 0x1171, + 0x11B6, 0x1105, 0x1171, 0x11B7, 0x1105, 0x1171, 0x11B8, 0x1105, + 0x1171, 0x11B9, 0x1105, 0x1171, 0x11BA, 0x1105, 0x1171, 0x11BB, + 0x1105, 0x1171, 0x11BC, 0x1105, 0x1171, 0x11BD, 0x1105, 0x1171, + 0x11BE, 0x1105, 0x1171, 0x11BF, 0x1105, 0x1171, 0x11C0, 0x1105, + 0x1171, 0x11C1, 0x1105, 0x1171, 0x11C2, 0x1105, 0x1172, 0x1105, + 0x1172, 0x11A8, 0x1105, 0x1172, 0x11A9, 0x1105, 0x1172, 0x11AA, + 0x1105, 0x1172, 0x11AB, 0x1105, 0x1172, 0x11AC, 0x1105, 0x1172, + 0x11AD, 0x1105, 0x1172, 0x11AE, 0x1105, 0x1172, 0x11AF, 0x1105, + 0x1172, 0x11B0, 0x1105, 0x1172, 0x11B1, 0x1105, 0x1172, 0x11B2, + 0x1105, 0x1172, 0x11B3, 0x1105, 0x1172, 0x11B4, 0x1105, 0x1172, + 0x11B5, 0x1105, 0x1172, 0x11B6, 0x1105, 0x1172, 0x11B7, 0x1105, + 0x1172, 0x11B8, 0x1105, 0x1172, 0x11B9, 0x1105, 0x1172, 0x11BA, + 0x1105, 0x1172, 0x11BB, 0x1105, 0x1172, 0x11BC, 0x1105, 0x1172, + 0x11BD, 0x1105, 0x1172, 0x11BE, 0x1105, 0x1172, 0x11BF, 0x1105, + 0x1172, 0x11C0, 0x1105, 0x1172, 0x11C1, 0x1105, 0x1172, 0x11C2, + 0x1105, 0x1173, 0x1105, 0x1173, 0x11A8, 0x1105, 0x1173, 0x11A9, + 0x1105, 0x1173, 0x11AA, 0x1105, 0x1173, 0x11AB, 0x1105, 0x1173, + 0x11AC, 0x1105, 0x1173, 0x11AD, 0x1105, 0x1173, 0x11AE, 0x1105, + 0x1173, 0x11AF, 0x1105, 0x1173, 0x11B0, 0x1105, 0x1173, 0x11B1, + 0x1105, 0x1173, 0x11B2, 0x1105, 0x1173, 0x11B3, 0x1105, 0x1173, + 0x11B4, 0x1105, 0x1173, 0x11B5, 0x1105, 0x1173, 0x11B6, 0x1105, + 0x1173, 0x11B7, 0x1105, 0x1173, 0x11B8, 0x1105, 0x1173, 0x11B9, + 0x1105, 0x1173, 0x11BA, 0x1105, 0x1173, 0x11BB, 0x1105, 0x1173, + 0x11BC, 0x1105, 0x1173, 0x11BD, 0x1105, 0x1173, 0x11BE, 0x1105, + 0x1173, 0x11BF, 0x1105, 0x1173, 0x11C0, 0x1105, 0x1173, 0x11C1, + 0x1105, 0x1173, 0x11C2, 0x1105, 0x1174, 0x1105, 0x1174, 0x11A8, + 0x1105, 0x1174, 0x11A9, 0x1105, 0x1174, 0x11AA, 0x1105, 0x1174, + 0x11AB, 0x1105, 0x1174, 0x11AC, 0x1105, 0x1174, 0x11AD, 0x1105, + 0x1174, 0x11AE, 0x1105, 0x1174, 0x11AF, 0x1105, 0x1174, 0x11B0, + 0x1105, 0x1174, 0x11B1, 0x1105, 0x1174, 0x11B2, 0x1105, 0x1174, + 0x11B3, 0x1105, 0x1174, 0x11B4, 0x1105, 0x1174, 0x11B5, 0x1105, + 0x1174, 0x11B6, 0x1105, 0x1174, 0x11B7, 0x1105, 0x1174, 0x11B8, + 0x1105, 0x1174, 0x11B9, 0x1105, 0x1174, 0x11BA, 0x1105, 0x1174, + 0x11BB, 0x1105, 0x1174, 0x11BC, 0x1105, 0x1174, 0x11BD, 0x1105, + 0x1174, 0x11BE, 0x1105, 0x1174, 0x11BF, 0x1105, 0x1174, 0x11C0, + 0x1105, 0x1174, 0x11C1, 0x1105, 0x1174, 0x11C2, 0x1105, 0x1175, + 0x1105, 0x1175, 0x11A8, 0x1105, 0x1175, 0x11A9, 0x1105, 0x1175, + 0x11AA, 0x1105, 0x1175, 0x11AB, 0x1105, 0x1175, 0x11AC, 0x1105, + 0x1175, 0x11AD, 0x1105, 0x1175, 0x11AE, 0x1105, 0x1175, 0x11AF, + 0x1105, 0x1175, 0x11B0, 0x1105, 0x1175, 0x11B1, 0x1105, 0x1175, + 0x11B2, 0x1105, 0x1175, 0x11B3, 0x1105, 0x1175, 0x11B4, 0x1105, + 0x1175, 0x11B5, 0x1105, 0x1175, 0x11B6, 0x1105, 0x1175, 0x11B7, + 0x1105, 0x1175, 0x11B8, 0x1105, 0x1175, 0x11B9, 0x1105, 0x1175, + 0x11BA, 0x1105, 0x1175, 0x11BB, 0x1105, 0x1175, 0x11BC, 0x1105, + 0x1175, 0x11BD, 0x1105, 0x1175, 0x11BE, 0x1105, 0x1175, 0x11BF, + 0x1105, 0x1175, 0x11C0, 0x1105, 0x1175, 0x11C1, 0x1105, 0x1175, + 0x11C2, 0x1106, 0x1161, 0x1106, 0x1161, 0x11A8, 0x1106, 0x1161, + 0x11A9, 0x1106, 0x1161, 0x11AA, 0x1106, 0x1161, 0x11AB, 0x1106, + 0x1161, 0x11AC, 0x1106, 0x1161, 0x11AD, 0x1106, 0x1161, 0x11AE, + 0x1106, 0x1161, 0x11AF, 0x1106, 0x1161, 0x11B0, 0x1106, 0x1161, + 0x11B1, 0x1106, 0x1161, 0x11B2, 0x1106, 0x1161, 0x11B3, 0x1106, + 0x1161, 0x11B4, 0x1106, 0x1161, 0x11B5, 0x1106, 0x1161, 0x11B6, + 0x1106, 0x1161, 0x11B7, 0x1106, 0x1161, 0x11B8, 0x1106, 0x1161, + 0x11B9, 0x1106, 0x1161, 0x11BA, 0x1106, 0x1161, 0x11BB, 0x1106, + 0x1161, 0x11BC, 0x1106, 0x1161, 0x11BD, 0x1106, 0x1161, 0x11BE, + 0x1106, 0x1161, 0x11BF, 0x1106, 0x1161, 0x11C0, 0x1106, 0x1161, + 0x11C1, 0x1106, 0x1161, 0x11C2, 0x1106, 0x1162, 0x1106, 0x1162, + 0x11A8, 0x1106, 0x1162, 0x11A9, 0x1106, 0x1162, 0x11AA, 0x1106, + 0x1162, 0x11AB, 0x1106, 0x1162, 0x11AC, 0x1106, 0x1162, 0x11AD, + 0x1106, 0x1162, 0x11AE, 0x1106, 0x1162, 0x11AF, 0x1106, 0x1162, + 0x11B0, 0x1106, 0x1162, 0x11B1, 0x1106, 0x1162, 0x11B2, 0x1106, + 0x1162, 0x11B3, 0x1106, 0x1162, 0x11B4, 0x1106, 0x1162, 0x11B5, + 0x1106, 0x1162, 0x11B6, 0x1106, 0x1162, 0x11B7, 0x1106, 0x1162, + 0x11B8, 0x1106, 0x1162, 0x11B9, 0x1106, 0x1162, 0x11BA, 0x1106, + 0x1162, 0x11BB, 0x1106, 0x1162, 0x11BC, 0x1106, 0x1162, 0x11BD, + 0x1106, 0x1162, 0x11BE, 0x1106, 0x1162, 0x11BF, 0x1106, 0x1162, + 0x11C0, 0x1106, 0x1162, 0x11C1, 0x1106, 0x1162, 0x11C2, 0x1106, + 0x1163, 0x1106, 0x1163, 0x11A8, 0x1106, 0x1163, 0x11A9, 0x1106, + 0x1163, 0x11AA, 0x1106, 0x1163, 0x11AB, 0x1106, 0x1163, 0x11AC, + 0x1106, 0x1163, 0x11AD, 0x1106, 0x1163, 0x11AE, 0x1106, 0x1163, + 0x11AF, 0x1106, 0x1163, 0x11B0, 0x1106, 0x1163, 0x11B1, 0x1106, + 0x1163, 0x11B2, 0x1106, 0x1163, 0x11B3, 0x1106, 0x1163, 0x11B4, + 0x1106, 0x1163, 0x11B5, 0x1106, 0x1163, 0x11B6, 0x1106, 0x1163, + 0x11B7, 0x1106, 0x1163, 0x11B8, 0x1106, 0x1163, 0x11B9, 0x1106, + 0x1163, 0x11BA, 0x1106, 0x1163, 0x11BB, 0x1106, 0x1163, 0x11BC, + 0x1106, 0x1163, 0x11BD, 0x1106, 0x1163, 0x11BE, 0x1106, 0x1163, + 0x11BF, 0x1106, 0x1163, 0x11C0, 0x1106, 0x1163, 0x11C1, 0x1106, + 0x1163, 0x11C2, 0x1106, 0x1164, 0x1106, 0x1164, 0x11A8, 0x1106, + 0x1164, 0x11A9, 0x1106, 0x1164, 0x11AA, 0x1106, 0x1164, 0x11AB, + 0x1106, 0x1164, 0x11AC, 0x1106, 0x1164, 0x11AD, 0x1106, 0x1164, + 0x11AE, 0x1106, 0x1164, 0x11AF, 0x1106, 0x1164, 0x11B0, 0x1106, + 0x1164, 0x11B1, 0x1106, 0x1164, 0x11B2, 0x1106, 0x1164, 0x11B3, + 0x1106, 0x1164, 0x11B4, 0x1106, 0x1164, 0x11B5, 0x1106, 0x1164, + 0x11B6, 0x1106, 0x1164, 0x11B7, 0x1106, 0x1164, 0x11B8, 0x1106, + 0x1164, 0x11B9, 0x1106, 0x1164, 0x11BA, 0x1106, 0x1164, 0x11BB, + 0x1106, 0x1164, 0x11BC, 0x1106, 0x1164, 0x11BD, 0x1106, 0x1164, + 0x11BE, 0x1106, 0x1164, 0x11BF, 0x1106, 0x1164, 0x11C0, 0x1106, + 0x1164, 0x11C1, 0x1106, 0x1164, 0x11C2, 0x1106, 0x1165, 0x1106, + 0x1165, 0x11A8, 0x1106, 0x1165, 0x11A9, 0x1106, 0x1165, 0x11AA, + 0x1106, 0x1165, 0x11AB, 0x1106, 0x1165, 0x11AC, 0x1106, 0x1165, + 0x11AD, 0x1106, 0x1165, 0x11AE, 0x1106, 0x1165, 0x11AF, 0x1106, + 0x1165, 0x11B0, 0x1106, 0x1165, 0x11B1, 0x1106, 0x1165, 0x11B2, + 0x1106, 0x1165, 0x11B3, 0x1106, 0x1165, 0x11B4, 0x1106, 0x1165, + 0x11B5, 0x1106, 0x1165, 0x11B6, 0x1106, 0x1165, 0x11B7, 0x1106, + 0x1165, 0x11B8, 0x1106, 0x1165, 0x11B9, 0x1106, 0x1165, 0x11BA, + 0x1106, 0x1165, 0x11BB, 0x1106, 0x1165, 0x11BC, 0x1106, 0x1165, + 0x11BD, 0x1106, 0x1165, 0x11BE, 0x1106, 0x1165, 0x11BF, 0x1106, + 0x1165, 0x11C0, 0x1106, 0x1165, 0x11C1, 0x1106, 0x1165, 0x11C2, + 0x1106, 0x1166, 0x1106, 0x1166, 0x11A8, 0x1106, 0x1166, 0x11A9, + 0x1106, 0x1166, 0x11AA, 0x1106, 0x1166, 0x11AB, 0x1106, 0x1166, + 0x11AC, 0x1106, 0x1166, 0x11AD, 0x1106, 0x1166, 0x11AE, 0x1106, + 0x1166, 0x11AF, 0x1106, 0x1166, 0x11B0, 0x1106, 0x1166, 0x11B1, + 0x1106, 0x1166, 0x11B2, 0x1106, 0x1166, 0x11B3, 0x1106, 0x1166, + 0x11B4, 0x1106, 0x1166, 0x11B5, 0x1106, 0x1166, 0x11B6, 0x1106, + 0x1166, 0x11B7, 0x1106, 0x1166, 0x11B8, 0x1106, 0x1166, 0x11B9, + 0x1106, 0x1166, 0x11BA, 0x1106, 0x1166, 0x11BB, 0x1106, 0x1166, + 0x11BC, 0x1106, 0x1166, 0x11BD, 0x1106, 0x1166, 0x11BE, 0x1106, + 0x1166, 0x11BF, 0x1106, 0x1166, 0x11C0, 0x1106, 0x1166, 0x11C1, + 0x1106, 0x1166, 0x11C2, 0x1106, 0x1167, 0x1106, 0x1167, 0x11A8, + 0x1106, 0x1167, 0x11A9, 0x1106, 0x1167, 0x11AA, 0x1106, 0x1167, + 0x11AB, 0x1106, 0x1167, 0x11AC, 0x1106, 0x1167, 0x11AD, 0x1106, + 0x1167, 0x11AE, 0x1106, 0x1167, 0x11AF, 0x1106, 0x1167, 0x11B0, + 0x1106, 0x1167, 0x11B1, 0x1106, 0x1167, 0x11B2, 0x1106, 0x1167, + 0x11B3, 0x1106, 0x1167, 0x11B4, 0x1106, 0x1167, 0x11B5, 0x1106, + 0x1167, 0x11B6, 0x1106, 0x1167, 0x11B7, 0x1106, 0x1167, 0x11B8, + 0x1106, 0x1167, 0x11B9, 0x1106, 0x1167, 0x11BA, 0x1106, 0x1167, + 0x11BB, 0x1106, 0x1167, 0x11BC, 0x1106, 0x1167, 0x11BD, 0x1106, + 0x1167, 0x11BE, 0x1106, 0x1167, 0x11BF, 0x1106, 0x1167, 0x11C0, + 0x1106, 0x1167, 0x11C1, 0x1106, 0x1167, 0x11C2, 0x1106, 0x1168, + 0x1106, 0x1168, 0x11A8, 0x1106, 0x1168, 0x11A9, 0x1106, 0x1168, + 0x11AA, 0x1106, 0x1168, 0x11AB, 0x1106, 0x1168, 0x11AC, 0x1106, + 0x1168, 0x11AD, 0x1106, 0x1168, 0x11AE, 0x1106, 0x1168, 0x11AF, + 0x1106, 0x1168, 0x11B0, 0x1106, 0x1168, 0x11B1, 0x1106, 0x1168, + 0x11B2, 0x1106, 0x1168, 0x11B3, 0x1106, 0x1168, 0x11B4, 0x1106, + 0x1168, 0x11B5, 0x1106, 0x1168, 0x11B6, 0x1106, 0x1168, 0x11B7, + 0x1106, 0x1168, 0x11B8, 0x1106, 0x1168, 0x11B9, 0x1106, 0x1168, + 0x11BA, 0x1106, 0x1168, 0x11BB, 0x1106, 0x1168, 0x11BC, 0x1106, + 0x1168, 0x11BD, 0x1106, 0x1168, 0x11BE, 0x1106, 0x1168, 0x11BF, + 0x1106, 0x1168, 0x11C0, 0x1106, 0x1168, 0x11C1, 0x1106, 0x1168, + 0x11C2, 0x1106, 0x1169, 0x1106, 0x1169, 0x11A8, 0x1106, 0x1169, + 0x11A9, 0x1106, 0x1169, 0x11AA, 0x1106, 0x1169, 0x11AB, 0x1106, + 0x1169, 0x11AC, 0x1106, 0x1169, 0x11AD, 0x1106, 0x1169, 0x11AE, + 0x1106, 0x1169, 0x11AF, 0x1106, 0x1169, 0x11B0, 0x1106, 0x1169, + 0x11B1, 0x1106, 0x1169, 0x11B2, 0x1106, 0x1169, 0x11B3, 0x1106, + 0x1169, 0x11B4, 0x1106, 0x1169, 0x11B5, 0x1106, 0x1169, 0x11B6, + 0x1106, 0x1169, 0x11B7, 0x1106, 0x1169, 0x11B8, 0x1106, 0x1169, + 0x11B9, 0x1106, 0x1169, 0x11BA, 0x1106, 0x1169, 0x11BB, 0x1106, + 0x1169, 0x11BC, 0x1106, 0x1169, 0x11BD, 0x1106, 0x1169, 0x11BE, + 0x1106, 0x1169, 0x11BF, 0x1106, 0x1169, 0x11C0, 0x1106, 0x1169, + 0x11C1, 0x1106, 0x1169, 0x11C2, 0x1106, 0x116A, 0x1106, 0x116A, + 0x11A8, 0x1106, 0x116A, 0x11A9, 0x1106, 0x116A, 0x11AA, 0x1106, + 0x116A, 0x11AB, 0x1106, 0x116A, 0x11AC, 0x1106, 0x116A, 0x11AD, + 0x1106, 0x116A, 0x11AE, 0x1106, 0x116A, 0x11AF, 0x1106, 0x116A, + 0x11B0, 0x1106, 0x116A, 0x11B1, 0x1106, 0x116A, 0x11B2, 0x1106, + 0x116A, 0x11B3, 0x1106, 0x116A, 0x11B4, 0x1106, 0x116A, 0x11B5, + 0x1106, 0x116A, 0x11B6, 0x1106, 0x116A, 0x11B7, 0x1106, 0x116A, + 0x11B8, 0x1106, 0x116A, 0x11B9, 0x1106, 0x116A, 0x11BA, 0x1106, + 0x116A, 0x11BB, 0x1106, 0x116A, 0x11BC, 0x1106, 0x116A, 0x11BD, + 0x1106, 0x116A, 0x11BE, 0x1106, 0x116A, 0x11BF, 0x1106, 0x116A, + 0x11C0, 0x1106, 0x116A, 0x11C1, 0x1106, 0x116A, 0x11C2, 0x1106, + 0x116B, 0x1106, 0x116B, 0x11A8, 0x1106, 0x116B, 0x11A9, 0x1106, + 0x116B, 0x11AA, 0x1106, 0x116B, 0x11AB, 0x1106, 0x116B, 0x11AC, + 0x1106, 0x116B, 0x11AD, 0x1106, 0x116B, 0x11AE, 0x1106, 0x116B, + 0x11AF, 0x1106, 0x116B, 0x11B0, 0x1106, 0x116B, 0x11B1, 0x1106, + 0x116B, 0x11B2, 0x1106, 0x116B, 0x11B3, 0x1106, 0x116B, 0x11B4, + 0x1106, 0x116B, 0x11B5, 0x1106, 0x116B, 0x11B6, 0x1106, 0x116B, + 0x11B7, 0x1106, 0x116B, 0x11B8, 0x1106, 0x116B, 0x11B9, 0x1106, + 0x116B, 0x11BA, 0x1106, 0x116B, 0x11BB, 0x1106, 0x116B, 0x11BC, + 0x1106, 0x116B, 0x11BD, 0x1106, 0x116B, 0x11BE, 0x1106, 0x116B, + 0x11BF, 0x1106, 0x116B, 0x11C0, 0x1106, 0x116B, 0x11C1, 0x1106, + 0x116B, 0x11C2, 0x1106, 0x116C, 0x1106, 0x116C, 0x11A8, 0x1106, + 0x116C, 0x11A9, 0x1106, 0x116C, 0x11AA, 0x1106, 0x116C, 0x11AB, + 0x1106, 0x116C, 0x11AC, 0x1106, 0x116C, 0x11AD, 0x1106, 0x116C, + 0x11AE, 0x1106, 0x116C, 0x11AF, 0x1106, 0x116C, 0x11B0, 0x1106, + 0x116C, 0x11B1, 0x1106, 0x116C, 0x11B2, 0x1106, 0x116C, 0x11B3, + 0x1106, 0x116C, 0x11B4, 0x1106, 0x116C, 0x11B5, 0x1106, 0x116C, + 0x11B6, 0x1106, 0x116C, 0x11B7, 0x1106, 0x116C, 0x11B8, 0x1106, + 0x116C, 0x11B9, 0x1106, 0x116C, 0x11BA, 0x1106, 0x116C, 0x11BB, + 0x1106, 0x116C, 0x11BC, 0x1106, 0x116C, 0x11BD, 0x1106, 0x116C, + 0x11BE, 0x1106, 0x116C, 0x11BF, 0x1106, 0x116C, 0x11C0, 0x1106, + 0x116C, 0x11C1, 0x1106, 0x116C, 0x11C2, 0x1106, 0x116D, 0x1106, + 0x116D, 0x11A8, 0x1106, 0x116D, 0x11A9, 0x1106, 0x116D, 0x11AA, + 0x1106, 0x116D, 0x11AB, 0x1106, 0x116D, 0x11AC, 0x1106, 0x116D, + 0x11AD, 0x1106, 0x116D, 0x11AE, 0x1106, 0x116D, 0x11AF, 0x1106, + 0x116D, 0x11B0, 0x1106, 0x116D, 0x11B1, 0x1106, 0x116D, 0x11B2, + 0x1106, 0x116D, 0x11B3, 0x1106, 0x116D, 0x11B4, 0x1106, 0x116D, + 0x11B5, 0x1106, 0x116D, 0x11B6, 0x1106, 0x116D, 0x11B7, 0x1106, + 0x116D, 0x11B8, 0x1106, 0x116D, 0x11B9, 0x1106, 0x116D, 0x11BA, + 0x1106, 0x116D, 0x11BB, 0x1106, 0x116D, 0x11BC, 0x1106, 0x116D, + 0x11BD, 0x1106, 0x116D, 0x11BE, 0x1106, 0x116D, 0x11BF, 0x1106, + 0x116D, 0x11C0, 0x1106, 0x116D, 0x11C1, 0x1106, 0x116D, 0x11C2, + 0x1106, 0x116E, 0x1106, 0x116E, 0x11A8, 0x1106, 0x116E, 0x11A9, + 0x1106, 0x116E, 0x11AA, 0x1106, 0x116E, 0x11AB, 0x1106, 0x116E, + 0x11AC, 0x1106, 0x116E, 0x11AD, 0x1106, 0x116E, 0x11AE, 0x1106, + 0x116E, 0x11AF, 0x1106, 0x116E, 0x11B0, 0x1106, 0x116E, 0x11B1, + 0x1106, 0x116E, 0x11B2, 0x1106, 0x116E, 0x11B3, 0x1106, 0x116E, + 0x11B4, 0x1106, 0x116E, 0x11B5, 0x1106, 0x116E, 0x11B6, 0x1106, + 0x116E, 0x11B7, 0x1106, 0x116E, 0x11B8, 0x1106, 0x116E, 0x11B9, + 0x1106, 0x116E, 0x11BA, 0x1106, 0x116E, 0x11BB, 0x1106, 0x116E, + 0x11BC, 0x1106, 0x116E, 0x11BD, 0x1106, 0x116E, 0x11BE, 0x1106, + 0x116E, 0x11BF, 0x1106, 0x116E, 0x11C0, 0x1106, 0x116E, 0x11C1, + 0x1106, 0x116E, 0x11C2, 0x1106, 0x116F, 0x1106, 0x116F, 0x11A8, + 0x1106, 0x116F, 0x11A9, 0x1106, 0x116F, 0x11AA, 0x1106, 0x116F, + 0x11AB, 0x1106, 0x116F, 0x11AC, 0x1106, 0x116F, 0x11AD, 0x1106, + 0x116F, 0x11AE, 0x1106, 0x116F, 0x11AF, 0x1106, 0x116F, 0x11B0, + 0x1106, 0x116F, 0x11B1, 0x1106, 0x116F, 0x11B2, 0x1106, 0x116F, + 0x11B3, 0x1106, 0x116F, 0x11B4, 0x1106, 0x116F, 0x11B5, 0x1106, + 0x116F, 0x11B6, 0x1106, 0x116F, 0x11B7, 0x1106, 0x116F, 0x11B8, + 0x1106, 0x116F, 0x11B9, 0x1106, 0x116F, 0x11BA, 0x1106, 0x116F, + 0x11BB, 0x1106, 0x116F, 0x11BC, 0x1106, 0x116F, 0x11BD, 0x1106, + 0x116F, 0x11BE, 0x1106, 0x116F, 0x11BF, 0x1106, 0x116F, 0x11C0, + 0x1106, 0x116F, 0x11C1, 0x1106, 0x116F, 0x11C2, 0x1106, 0x1170, + 0x1106, 0x1170, 0x11A8, 0x1106, 0x1170, 0x11A9, 0x1106, 0x1170, + 0x11AA, 0x1106, 0x1170, 0x11AB, 0x1106, 0x1170, 0x11AC, 0x1106, + 0x1170, 0x11AD, 0x1106, 0x1170, 0x11AE, 0x1106, 0x1170, 0x11AF, + 0x1106, 0x1170, 0x11B0, 0x1106, 0x1170, 0x11B1, 0x1106, 0x1170, + 0x11B2, 0x1106, 0x1170, 0x11B3, 0x1106, 0x1170, 0x11B4, 0x1106, + 0x1170, 0x11B5, 0x1106, 0x1170, 0x11B6, 0x1106, 0x1170, 0x11B7, + 0x1106, 0x1170, 0x11B8, 0x1106, 0x1170, 0x11B9, 0x1106, 0x1170, + 0x11BA, 0x1106, 0x1170, 0x11BB, 0x1106, 0x1170, 0x11BC, 0x1106, + 0x1170, 0x11BD, 0x1106, 0x1170, 0x11BE, 0x1106, 0x1170, 0x11BF, + 0x1106, 0x1170, 0x11C0, 0x1106, 0x1170, 0x11C1, 0x1106, 0x1170, + 0x11C2, 0x1106, 0x1171, 0x1106, 0x1171, 0x11A8, 0x1106, 0x1171, + 0x11A9, 0x1106, 0x1171, 0x11AA, 0x1106, 0x1171, 0x11AB, 0x1106, + 0x1171, 0x11AC, 0x1106, 0x1171, 0x11AD, 0x1106, 0x1171, 0x11AE, + 0x1106, 0x1171, 0x11AF, 0x1106, 0x1171, 0x11B0, 0x1106, 0x1171, + 0x11B1, 0x1106, 0x1171, 0x11B2, 0x1106, 0x1171, 0x11B3, 0x1106, + 0x1171, 0x11B4, 0x1106, 0x1171, 0x11B5, 0x1106, 0x1171, 0x11B6, + 0x1106, 0x1171, 0x11B7, 0x1106, 0x1171, 0x11B8, 0x1106, 0x1171, + 0x11B9, 0x1106, 0x1171, 0x11BA, 0x1106, 0x1171, 0x11BB, 0x1106, + 0x1171, 0x11BC, 0x1106, 0x1171, 0x11BD, 0x1106, 0x1171, 0x11BE, + 0x1106, 0x1171, 0x11BF, 0x1106, 0x1171, 0x11C0, 0x1106, 0x1171, + 0x11C1, 0x1106, 0x1171, 0x11C2, 0x1106, 0x1172, 0x1106, 0x1172, + 0x11A8, 0x1106, 0x1172, 0x11A9, 0x1106, 0x1172, 0x11AA, 0x1106, + 0x1172, 0x11AB, 0x1106, 0x1172, 0x11AC, 0x1106, 0x1172, 0x11AD, + 0x1106, 0x1172, 0x11AE, 0x1106, 0x1172, 0x11AF, 0x1106, 0x1172, + 0x11B0, 0x1106, 0x1172, 0x11B1, 0x1106, 0x1172, 0x11B2, 0x1106, + 0x1172, 0x11B3, 0x1106, 0x1172, 0x11B4, 0x1106, 0x1172, 0x11B5, + 0x1106, 0x1172, 0x11B6, 0x1106, 0x1172, 0x11B7, 0x1106, 0x1172, + 0x11B8, 0x1106, 0x1172, 0x11B9, 0x1106, 0x1172, 0x11BA, 0x1106, + 0x1172, 0x11BB, 0x1106, 0x1172, 0x11BC, 0x1106, 0x1172, 0x11BD, + 0x1106, 0x1172, 0x11BE, 0x1106, 0x1172, 0x11BF, 0x1106, 0x1172, + 0x11C0, 0x1106, 0x1172, 0x11C1, 0x1106, 0x1172, 0x11C2, 0x1106, + 0x1173, 0x1106, 0x1173, 0x11A8, 0x1106, 0x1173, 0x11A9, 0x1106, + 0x1173, 0x11AA, 0x1106, 0x1173, 0x11AB, 0x1106, 0x1173, 0x11AC, + 0x1106, 0x1173, 0x11AD, 0x1106, 0x1173, 0x11AE, 0x1106, 0x1173, + 0x11AF, 0x1106, 0x1173, 0x11B0, 0x1106, 0x1173, 0x11B1, 0x1106, + 0x1173, 0x11B2, 0x1106, 0x1173, 0x11B3, 0x1106, 0x1173, 0x11B4, + 0x1106, 0x1173, 0x11B5, 0x1106, 0x1173, 0x11B6, 0x1106, 0x1173, + 0x11B7, 0x1106, 0x1173, 0x11B8, 0x1106, 0x1173, 0x11B9, 0x1106, + 0x1173, 0x11BA, 0x1106, 0x1173, 0x11BB, 0x1106, 0x1173, 0x11BC, + 0x1106, 0x1173, 0x11BD, 0x1106, 0x1173, 0x11BE, 0x1106, 0x1173, + 0x11BF, 0x1106, 0x1173, 0x11C0, 0x1106, 0x1173, 0x11C1, 0x1106, + 0x1173, 0x11C2, 0x1106, 0x1174, 0x1106, 0x1174, 0x11A8, 0x1106, + 0x1174, 0x11A9, 0x1106, 0x1174, 0x11AA, 0x1106, 0x1174, 0x11AB, + 0x1106, 0x1174, 0x11AC, 0x1106, 0x1174, 0x11AD, 0x1106, 0x1174, + 0x11AE, 0x1106, 0x1174, 0x11AF, 0x1106, 0x1174, 0x11B0, 0x1106, + 0x1174, 0x11B1, 0x1106, 0x1174, 0x11B2, 0x1106, 0x1174, 0x11B3, + 0x1106, 0x1174, 0x11B4, 0x1106, 0x1174, 0x11B5, 0x1106, 0x1174, + 0x11B6, 0x1106, 0x1174, 0x11B7, 0x1106, 0x1174, 0x11B8, 0x1106, + 0x1174, 0x11B9, 0x1106, 0x1174, 0x11BA, 0x1106, 0x1174, 0x11BB, + 0x1106, 0x1174, 0x11BC, 0x1106, 0x1174, 0x11BD, 0x1106, 0x1174, + 0x11BE, 0x1106, 0x1174, 0x11BF, 0x1106, 0x1174, 0x11C0, 0x1106, + 0x1174, 0x11C1, 0x1106, 0x1174, 0x11C2, 0x1106, 0x1175, 0x1106, + 0x1175, 0x11A8, 0x1106, 0x1175, 0x11A9, 0x1106, 0x1175, 0x11AA, + 0x1106, 0x1175, 0x11AB, 0x1106, 0x1175, 0x11AC, 0x1106, 0x1175, + 0x11AD, 0x1106, 0x1175, 0x11AE, 0x1106, 0x1175, 0x11AF, 0x1106, + 0x1175, 0x11B0, 0x1106, 0x1175, 0x11B1, 0x1106, 0x1175, 0x11B2, + 0x1106, 0x1175, 0x11B3, 0x1106, 0x1175, 0x11B4, 0x1106, 0x1175, + 0x11B5, 0x1106, 0x1175, 0x11B6, 0x1106, 0x1175, 0x11B7, 0x1106, + 0x1175, 0x11B8, 0x1106, 0x1175, 0x11B9, 0x1106, 0x1175, 0x11BA, + 0x1106, 0x1175, 0x11BB, 0x1106, 0x1175, 0x11BC, 0x1106, 0x1175, + 0x11BD, 0x1106, 0x1175, 0x11BE, 0x1106, 0x1175, 0x11BF, 0x1106, + 0x1175, 0x11C0, 0x1106, 0x1175, 0x11C1, 0x1106, 0x1175, 0x11C2, + 0x1107, 0x1161, 0x1107, 0x1161, 0x11A8, 0x1107, 0x1161, 0x11A9, + 0x1107, 0x1161, 0x11AA, 0x1107, 0x1161, 0x11AB, 0x1107, 0x1161, + 0x11AC, 0x1107, 0x1161, 0x11AD, 0x1107, 0x1161, 0x11AE, 0x1107, + 0x1161, 0x11AF, 0x1107, 0x1161, 0x11B0, 0x1107, 0x1161, 0x11B1, + 0x1107, 0x1161, 0x11B2, 0x1107, 0x1161, 0x11B3, 0x1107, 0x1161, + 0x11B4, 0x1107, 0x1161, 0x11B5, 0x1107, 0x1161, 0x11B6, 0x1107, + 0x1161, 0x11B7, 0x1107, 0x1161, 0x11B8, 0x1107, 0x1161, 0x11B9, + 0x1107, 0x1161, 0x11BA, 0x1107, 0x1161, 0x11BB, 0x1107, 0x1161, + 0x11BC, 0x1107, 0x1161, 0x11BD, 0x1107, 0x1161, 0x11BE, 0x1107, + 0x1161, 0x11BF, 0x1107, 0x1161, 0x11C0, 0x1107, 0x1161, 0x11C1, + 0x1107, 0x1161, 0x11C2, 0x1107, 0x1162, 0x1107, 0x1162, 0x11A8, + 0x1107, 0x1162, 0x11A9, 0x1107, 0x1162, 0x11AA, 0x1107, 0x1162, + 0x11AB, 0x1107, 0x1162, 0x11AC, 0x1107, 0x1162, 0x11AD, 0x1107, + 0x1162, 0x11AE, 0x1107, 0x1162, 0x11AF, 0x1107, 0x1162, 0x11B0, + 0x1107, 0x1162, 0x11B1, 0x1107, 0x1162, 0x11B2, 0x1107, 0x1162, + 0x11B3, 0x1107, 0x1162, 0x11B4, 0x1107, 0x1162, 0x11B5, 0x1107, + 0x1162, 0x11B6, 0x1107, 0x1162, 0x11B7, 0x1107, 0x1162, 0x11B8, + 0x1107, 0x1162, 0x11B9, 0x1107, 0x1162, 0x11BA, 0x1107, 0x1162, + 0x11BB, 0x1107, 0x1162, 0x11BC, 0x1107, 0x1162, 0x11BD, 0x1107, + 0x1162, 0x11BE, 0x1107, 0x1162, 0x11BF, 0x1107, 0x1162, 0x11C0, + 0x1107, 0x1162, 0x11C1, 0x1107, 0x1162, 0x11C2, 0x1107, 0x1163, + 0x1107, 0x1163, 0x11A8, 0x1107, 0x1163, 0x11A9, 0x1107, 0x1163, + 0x11AA, 0x1107, 0x1163, 0x11AB, 0x1107, 0x1163, 0x11AC, 0x1107, + 0x1163, 0x11AD, 0x1107, 0x1163, 0x11AE, 0x1107, 0x1163, 0x11AF, + 0x1107, 0x1163, 0x11B0, 0x1107, 0x1163, 0x11B1, 0x1107, 0x1163, + 0x11B2, 0x1107, 0x1163, 0x11B3, 0x1107, 0x1163, 0x11B4, 0x1107, + 0x1163, 0x11B5, 0x1107, 0x1163, 0x11B6, 0x1107, 0x1163, 0x11B7, + 0x1107, 0x1163, 0x11B8, 0x1107, 0x1163, 0x11B9, 0x1107, 0x1163, + 0x11BA, 0x1107, 0x1163, 0x11BB, 0x1107, 0x1163, 0x11BC, 0x1107, + 0x1163, 0x11BD, 0x1107, 0x1163, 0x11BE, 0x1107, 0x1163, 0x11BF, + 0x1107, 0x1163, 0x11C0, 0x1107, 0x1163, 0x11C1, 0x1107, 0x1163, + 0x11C2, 0x1107, 0x1164, 0x1107, 0x1164, 0x11A8, 0x1107, 0x1164, + 0x11A9, 0x1107, 0x1164, 0x11AA, 0x1107, 0x1164, 0x11AB, 0x1107, + 0x1164, 0x11AC, 0x1107, 0x1164, 0x11AD, 0x1107, 0x1164, 0x11AE, + 0x1107, 0x1164, 0x11AF, 0x1107, 0x1164, 0x11B0, 0x1107, 0x1164, + 0x11B1, 0x1107, 0x1164, 0x11B2, 0x1107, 0x1164, 0x11B3, 0x1107, + 0x1164, 0x11B4, 0x1107, 0x1164, 0x11B5, 0x1107, 0x1164, 0x11B6, + 0x1107, 0x1164, 0x11B7, 0x1107, 0x1164, 0x11B8, 0x1107, 0x1164, + 0x11B9, 0x1107, 0x1164, 0x11BA, 0x1107, 0x1164, 0x11BB, 0x1107, + 0x1164, 0x11BC, 0x1107, 0x1164, 0x11BD, 0x1107, 0x1164, 0x11BE, + 0x1107, 0x1164, 0x11BF, 0x1107, 0x1164, 0x11C0, 0x1107, 0x1164, + 0x11C1, 0x1107, 0x1164, 0x11C2, 0x1107, 0x1165, 0x1107, 0x1165, + 0x11A8, 0x1107, 0x1165, 0x11A9, 0x1107, 0x1165, 0x11AA, 0x1107, + 0x1165, 0x11AB, 0x1107, 0x1165, 0x11AC, 0x1107, 0x1165, 0x11AD, + 0x1107, 0x1165, 0x11AE, 0x1107, 0x1165, 0x11AF, 0x1107, 0x1165, + 0x11B0, 0x1107, 0x1165, 0x11B1, 0x1107, 0x1165, 0x11B2, 0x1107, + 0x1165, 0x11B3, 0x1107, 0x1165, 0x11B4, 0x1107, 0x1165, 0x11B5, + 0x1107, 0x1165, 0x11B6, 0x1107, 0x1165, 0x11B7, 0x1107, 0x1165, + 0x11B8, 0x1107, 0x1165, 0x11B9, 0x1107, 0x1165, 0x11BA, 0x1107, + 0x1165, 0x11BB, 0x1107, 0x1165, 0x11BC, 0x1107, 0x1165, 0x11BD, + 0x1107, 0x1165, 0x11BE, 0x1107, 0x1165, 0x11BF, 0x1107, 0x1165, + 0x11C0, 0x1107, 0x1165, 0x11C1, 0x1107, 0x1165, 0x11C2, 0x1107, + 0x1166, 0x1107, 0x1166, 0x11A8, 0x1107, 0x1166, 0x11A9, 0x1107, + 0x1166, 0x11AA, 0x1107, 0x1166, 0x11AB, 0x1107, 0x1166, 0x11AC, + 0x1107, 0x1166, 0x11AD, 0x1107, 0x1166, 0x11AE, 0x1107, 0x1166, + 0x11AF, 0x1107, 0x1166, 0x11B0, 0x1107, 0x1166, 0x11B1, 0x1107, + 0x1166, 0x11B2, 0x1107, 0x1166, 0x11B3, 0x1107, 0x1166, 0x11B4, + 0x1107, 0x1166, 0x11B5, 0x1107, 0x1166, 0x11B6, 0x1107, 0x1166, + 0x11B7, 0x1107, 0x1166, 0x11B8, 0x1107, 0x1166, 0x11B9, 0x1107, + 0x1166, 0x11BA, 0x1107, 0x1166, 0x11BB, 0x1107, 0x1166, 0x11BC, + 0x1107, 0x1166, 0x11BD, 0x1107, 0x1166, 0x11BE, 0x1107, 0x1166, + 0x11BF, 0x1107, 0x1166, 0x11C0, 0x1107, 0x1166, 0x11C1, 0x1107, + 0x1166, 0x11C2, 0x1107, 0x1167, 0x1107, 0x1167, 0x11A8, 0x1107, + 0x1167, 0x11A9, 0x1107, 0x1167, 0x11AA, 0x1107, 0x1167, 0x11AB, + 0x1107, 0x1167, 0x11AC, 0x1107, 0x1167, 0x11AD, 0x1107, 0x1167, + 0x11AE, 0x1107, 0x1167, 0x11AF, 0x1107, 0x1167, 0x11B0, 0x1107, + 0x1167, 0x11B1, 0x1107, 0x1167, 0x11B2, 0x1107, 0x1167, 0x11B3, + 0x1107, 0x1167, 0x11B4, 0x1107, 0x1167, 0x11B5, 0x1107, 0x1167, + 0x11B6, 0x1107, 0x1167, 0x11B7, 0x1107, 0x1167, 0x11B8, 0x1107, + 0x1167, 0x11B9, 0x1107, 0x1167, 0x11BA, 0x1107, 0x1167, 0x11BB, + 0x1107, 0x1167, 0x11BC, 0x1107, 0x1167, 0x11BD, 0x1107, 0x1167, + 0x11BE, 0x1107, 0x1167, 0x11BF, 0x1107, 0x1167, 0x11C0, 0x1107, + 0x1167, 0x11C1, 0x1107, 0x1167, 0x11C2, 0x1107, 0x1168, 0x1107, + 0x1168, 0x11A8, 0x1107, 0x1168, 0x11A9, 0x1107, 0x1168, 0x11AA, + 0x1107, 0x1168, 0x11AB, 0x1107, 0x1168, 0x11AC, 0x1107, 0x1168, + 0x11AD, 0x1107, 0x1168, 0x11AE, 0x1107, 0x1168, 0x11AF, 0x1107, + 0x1168, 0x11B0, 0x1107, 0x1168, 0x11B1, 0x1107, 0x1168, 0x11B2, + 0x1107, 0x1168, 0x11B3, 0x1107, 0x1168, 0x11B4, 0x1107, 0x1168, + 0x11B5, 0x1107, 0x1168, 0x11B6, 0x1107, 0x1168, 0x11B7, 0x1107, + 0x1168, 0x11B8, 0x1107, 0x1168, 0x11B9, 0x1107, 0x1168, 0x11BA, + 0x1107, 0x1168, 0x11BB, 0x1107, 0x1168, 0x11BC, 0x1107, 0x1168, + 0x11BD, 0x1107, 0x1168, 0x11BE, 0x1107, 0x1168, 0x11BF, 0x1107, + 0x1168, 0x11C0, 0x1107, 0x1168, 0x11C1, 0x1107, 0x1168, 0x11C2, + 0x1107, 0x1169, 0x1107, 0x1169, 0x11A8, 0x1107, 0x1169, 0x11A9, + 0x1107, 0x1169, 0x11AA, 0x1107, 0x1169, 0x11AB, 0x1107, 0x1169, + 0x11AC, 0x1107, 0x1169, 0x11AD, 0x1107, 0x1169, 0x11AE, 0x1107, + 0x1169, 0x11AF, 0x1107, 0x1169, 0x11B0, 0x1107, 0x1169, 0x11B1, + 0x1107, 0x1169, 0x11B2, 0x1107, 0x1169, 0x11B3, 0x1107, 0x1169, + 0x11B4, 0x1107, 0x1169, 0x11B5, 0x1107, 0x1169, 0x11B6, 0x1107, + 0x1169, 0x11B7, 0x1107, 0x1169, 0x11B8, 0x1107, 0x1169, 0x11B9, + 0x1107, 0x1169, 0x11BA, 0x1107, 0x1169, 0x11BB, 0x1107, 0x1169, + 0x11BC, 0x1107, 0x1169, 0x11BD, 0x1107, 0x1169, 0x11BE, 0x1107, + 0x1169, 0x11BF, 0x1107, 0x1169, 0x11C0, 0x1107, 0x1169, 0x11C1, + 0x1107, 0x1169, 0x11C2, 0x1107, 0x116A, 0x1107, 0x116A, 0x11A8, + 0x1107, 0x116A, 0x11A9, 0x1107, 0x116A, 0x11AA, 0x1107, 0x116A, + 0x11AB, 0x1107, 0x116A, 0x11AC, 0x1107, 0x116A, 0x11AD, 0x1107, + 0x116A, 0x11AE, 0x1107, 0x116A, 0x11AF, 0x1107, 0x116A, 0x11B0, + 0x1107, 0x116A, 0x11B1, 0x1107, 0x116A, 0x11B2, 0x1107, 0x116A, + 0x11B3, 0x1107, 0x116A, 0x11B4, 0x1107, 0x116A, 0x11B5, 0x1107, + 0x116A, 0x11B6, 0x1107, 0x116A, 0x11B7, 0x1107, 0x116A, 0x11B8, + 0x1107, 0x116A, 0x11B9, 0x1107, 0x116A, 0x11BA, 0x1107, 0x116A, + 0x11BB, 0x1107, 0x116A, 0x11BC, 0x1107, 0x116A, 0x11BD, 0x1107, + 0x116A, 0x11BE, 0x1107, 0x116A, 0x11BF, 0x1107, 0x116A, 0x11C0, + 0x1107, 0x116A, 0x11C1, 0x1107, 0x116A, 0x11C2, 0x1107, 0x116B, + 0x1107, 0x116B, 0x11A8, 0x1107, 0x116B, 0x11A9, 0x1107, 0x116B, + 0x11AA, 0x1107, 0x116B, 0x11AB, 0x1107, 0x116B, 0x11AC, 0x1107, + 0x116B, 0x11AD, 0x1107, 0x116B, 0x11AE, 0x1107, 0x116B, 0x11AF, + 0x1107, 0x116B, 0x11B0, 0x1107, 0x116B, 0x11B1, 0x1107, 0x116B, + 0x11B2, 0x1107, 0x116B, 0x11B3, 0x1107, 0x116B, 0x11B4, 0x1107, + 0x116B, 0x11B5, 0x1107, 0x116B, 0x11B6, 0x1107, 0x116B, 0x11B7, + 0x1107, 0x116B, 0x11B8, 0x1107, 0x116B, 0x11B9, 0x1107, 0x116B, + 0x11BA, 0x1107, 0x116B, 0x11BB, 0x1107, 0x116B, 0x11BC, 0x1107, + 0x116B, 0x11BD, 0x1107, 0x116B, 0x11BE, 0x1107, 0x116B, 0x11BF, + 0x1107, 0x116B, 0x11C0, 0x1107, 0x116B, 0x11C1, 0x1107, 0x116B, + 0x11C2, 0x1107, 0x116C, 0x1107, 0x116C, 0x11A8, 0x1107, 0x116C, + 0x11A9, 0x1107, 0x116C, 0x11AA, 0x1107, 0x116C, 0x11AB, 0x1107, + 0x116C, 0x11AC, 0x1107, 0x116C, 0x11AD, 0x1107, 0x116C, 0x11AE, + 0x1107, 0x116C, 0x11AF, 0x1107, 0x116C, 0x11B0, 0x1107, 0x116C, + 0x11B1, 0x1107, 0x116C, 0x11B2, 0x1107, 0x116C, 0x11B3, 0x1107, + 0x116C, 0x11B4, 0x1107, 0x116C, 0x11B5, 0x1107, 0x116C, 0x11B6, + 0x1107, 0x116C, 0x11B7, 0x1107, 0x116C, 0x11B8, 0x1107, 0x116C, + 0x11B9, 0x1107, 0x116C, 0x11BA, 0x1107, 0x116C, 0x11BB, 0x1107, + 0x116C, 0x11BC, 0x1107, 0x116C, 0x11BD, 0x1107, 0x116C, 0x11BE, + 0x1107, 0x116C, 0x11BF, 0x1107, 0x116C, 0x11C0, 0x1107, 0x116C, + 0x11C1, 0x1107, 0x116C, 0x11C2, 0x1107, 0x116D, 0x1107, 0x116D, + 0x11A8, 0x1107, 0x116D, 0x11A9, 0x1107, 0x116D, 0x11AA, 0x1107, + 0x116D, 0x11AB, 0x1107, 0x116D, 0x11AC, 0x1107, 0x116D, 0x11AD, + 0x1107, 0x116D, 0x11AE, 0x1107, 0x116D, 0x11AF, 0x1107, 0x116D, + 0x11B0, 0x1107, 0x116D, 0x11B1, 0x1107, 0x116D, 0x11B2, 0x1107, + 0x116D, 0x11B3, 0x1107, 0x116D, 0x11B4, 0x1107, 0x116D, 0x11B5, + 0x1107, 0x116D, 0x11B6, 0x1107, 0x116D, 0x11B7, 0x1107, 0x116D, + 0x11B8, 0x1107, 0x116D, 0x11B9, 0x1107, 0x116D, 0x11BA, 0x1107, + 0x116D, 0x11BB, 0x1107, 0x116D, 0x11BC, 0x1107, 0x116D, 0x11BD, + 0x1107, 0x116D, 0x11BE, 0x1107, 0x116D, 0x11BF, 0x1107, 0x116D, + 0x11C0, 0x1107, 0x116D, 0x11C1, 0x1107, 0x116D, 0x11C2, 0x1107, + 0x116E, 0x1107, 0x116E, 0x11A8, 0x1107, 0x116E, 0x11A9, 0x1107, + 0x116E, 0x11AA, 0x1107, 0x116E, 0x11AB, 0x1107, 0x116E, 0x11AC, + 0x1107, 0x116E, 0x11AD, 0x1107, 0x116E, 0x11AE, 0x1107, 0x116E, + 0x11AF, 0x1107, 0x116E, 0x11B0, 0x1107, 0x116E, 0x11B1, 0x1107, + 0x116E, 0x11B2, 0x1107, 0x116E, 0x11B3, 0x1107, 0x116E, 0x11B4, + 0x1107, 0x116E, 0x11B5, 0x1107, 0x116E, 0x11B6, 0x1107, 0x116E, + 0x11B7, 0x1107, 0x116E, 0x11B8, 0x1107, 0x116E, 0x11B9, 0x1107, + 0x116E, 0x11BA, 0x1107, 0x116E, 0x11BB, 0x1107, 0x116E, 0x11BC, + 0x1107, 0x116E, 0x11BD, 0x1107, 0x116E, 0x11BE, 0x1107, 0x116E, + 0x11BF, 0x1107, 0x116E, 0x11C0, 0x1107, 0x116E, 0x11C1, 0x1107, + 0x116E, 0x11C2, 0x1107, 0x116F, 0x1107, 0x116F, 0x11A8, 0x1107, + 0x116F, 0x11A9, 0x1107, 0x116F, 0x11AA, 0x1107, 0x116F, 0x11AB, + 0x1107, 0x116F, 0x11AC, 0x1107, 0x116F, 0x11AD, 0x1107, 0x116F, + 0x11AE, 0x1107, 0x116F, 0x11AF, 0x1107, 0x116F, 0x11B0, 0x1107, + 0x116F, 0x11B1, 0x1107, 0x116F, 0x11B2, 0x1107, 0x116F, 0x11B3, + 0x1107, 0x116F, 0x11B4, 0x1107, 0x116F, 0x11B5, 0x1107, 0x116F, + 0x11B6, 0x1107, 0x116F, 0x11B7, 0x1107, 0x116F, 0x11B8, 0x1107, + 0x116F, 0x11B9, 0x1107, 0x116F, 0x11BA, 0x1107, 0x116F, 0x11BB, + 0x1107, 0x116F, 0x11BC, 0x1107, 0x116F, 0x11BD, 0x1107, 0x116F, + 0x11BE, 0x1107, 0x116F, 0x11BF, 0x1107, 0x116F, 0x11C0, 0x1107, + 0x116F, 0x11C1, 0x1107, 0x116F, 0x11C2, 0x1107, 0x1170, 0x1107, + 0x1170, 0x11A8, 0x1107, 0x1170, 0x11A9, 0x1107, 0x1170, 0x11AA, + 0x1107, 0x1170, 0x11AB, 0x1107, 0x1170, 0x11AC, 0x1107, 0x1170, + 0x11AD, 0x1107, 0x1170, 0x11AE, 0x1107, 0x1170, 0x11AF, 0x1107, + 0x1170, 0x11B0, 0x1107, 0x1170, 0x11B1, 0x1107, 0x1170, 0x11B2, + 0x1107, 0x1170, 0x11B3, 0x1107, 0x1170, 0x11B4, 0x1107, 0x1170, + 0x11B5, 0x1107, 0x1170, 0x11B6, 0x1107, 0x1170, 0x11B7, 0x1107, + 0x1170, 0x11B8, 0x1107, 0x1170, 0x11B9, 0x1107, 0x1170, 0x11BA, + 0x1107, 0x1170, 0x11BB, 0x1107, 0x1170, 0x11BC, 0x1107, 0x1170, + 0x11BD, 0x1107, 0x1170, 0x11BE, 0x1107, 0x1170, 0x11BF, 0x1107, + 0x1170, 0x11C0, 0x1107, 0x1170, 0x11C1, 0x1107, 0x1170, 0x11C2, + 0x1107, 0x1171, 0x1107, 0x1171, 0x11A8, 0x1107, 0x1171, 0x11A9, + 0x1107, 0x1171, 0x11AA, 0x1107, 0x1171, 0x11AB, 0x1107, 0x1171, + 0x11AC, 0x1107, 0x1171, 0x11AD, 0x1107, 0x1171, 0x11AE, 0x1107, + 0x1171, 0x11AF, 0x1107, 0x1171, 0x11B0, 0x1107, 0x1171, 0x11B1, + 0x1107, 0x1171, 0x11B2, 0x1107, 0x1171, 0x11B3, 0x1107, 0x1171, + 0x11B4, 0x1107, 0x1171, 0x11B5, 0x1107, 0x1171, 0x11B6, 0x1107, + 0x1171, 0x11B7, 0x1107, 0x1171, 0x11B8, 0x1107, 0x1171, 0x11B9, + 0x1107, 0x1171, 0x11BA, 0x1107, 0x1171, 0x11BB, 0x1107, 0x1171, + 0x11BC, 0x1107, 0x1171, 0x11BD, 0x1107, 0x1171, 0x11BE, 0x1107, + 0x1171, 0x11BF, 0x1107, 0x1171, 0x11C0, 0x1107, 0x1171, 0x11C1, + 0x1107, 0x1171, 0x11C2, 0x1107, 0x1172, 0x1107, 0x1172, 0x11A8, + 0x1107, 0x1172, 0x11A9, 0x1107, 0x1172, 0x11AA, 0x1107, 0x1172, + 0x11AB, 0x1107, 0x1172, 0x11AC, 0x1107, 0x1172, 0x11AD, 0x1107, + 0x1172, 0x11AE, 0x1107, 0x1172, 0x11AF, 0x1107, 0x1172, 0x11B0, + 0x1107, 0x1172, 0x11B1, 0x1107, 0x1172, 0x11B2, 0x1107, 0x1172, + 0x11B3, 0x1107, 0x1172, 0x11B4, 0x1107, 0x1172, 0x11B5, 0x1107, + 0x1172, 0x11B6, 0x1107, 0x1172, 0x11B7, 0x1107, 0x1172, 0x11B8, + 0x1107, 0x1172, 0x11B9, 0x1107, 0x1172, 0x11BA, 0x1107, 0x1172, + 0x11BB, 0x1107, 0x1172, 0x11BC, 0x1107, 0x1172, 0x11BD, 0x1107, + 0x1172, 0x11BE, 0x1107, 0x1172, 0x11BF, 0x1107, 0x1172, 0x11C0, + 0x1107, 0x1172, 0x11C1, 0x1107, 0x1172, 0x11C2, 0x1107, 0x1173, + 0x1107, 0x1173, 0x11A8, 0x1107, 0x1173, 0x11A9, 0x1107, 0x1173, + 0x11AA, 0x1107, 0x1173, 0x11AB, 0x1107, 0x1173, 0x11AC, 0x1107, + 0x1173, 0x11AD, 0x1107, 0x1173, 0x11AE, 0x1107, 0x1173, 0x11AF, + 0x1107, 0x1173, 0x11B0, 0x1107, 0x1173, 0x11B1, 0x1107, 0x1173, + 0x11B2, 0x1107, 0x1173, 0x11B3, 0x1107, 0x1173, 0x11B4, 0x1107, + 0x1173, 0x11B5, 0x1107, 0x1173, 0x11B6, 0x1107, 0x1173, 0x11B7, + 0x1107, 0x1173, 0x11B8, 0x1107, 0x1173, 0x11B9, 0x1107, 0x1173, + 0x11BA, 0x1107, 0x1173, 0x11BB, 0x1107, 0x1173, 0x11BC, 0x1107, + 0x1173, 0x11BD, 0x1107, 0x1173, 0x11BE, 0x1107, 0x1173, 0x11BF, + 0x1107, 0x1173, 0x11C0, 0x1107, 0x1173, 0x11C1, 0x1107, 0x1173, + 0x11C2, 0x1107, 0x1174, 0x1107, 0x1174, 0x11A8, 0x1107, 0x1174, + 0x11A9, 0x1107, 0x1174, 0x11AA, 0x1107, 0x1174, 0x11AB, 0x1107, + 0x1174, 0x11AC, 0x1107, 0x1174, 0x11AD, 0x1107, 0x1174, 0x11AE, + 0x1107, 0x1174, 0x11AF, 0x1107, 0x1174, 0x11B0, 0x1107, 0x1174, + 0x11B1, 0x1107, 0x1174, 0x11B2, 0x1107, 0x1174, 0x11B3, 0x1107, + 0x1174, 0x11B4, 0x1107, 0x1174, 0x11B5, 0x1107, 0x1174, 0x11B6, + 0x1107, 0x1174, 0x11B7, 0x1107, 0x1174, 0x11B8, 0x1107, 0x1174, + 0x11B9, 0x1107, 0x1174, 0x11BA, 0x1107, 0x1174, 0x11BB, 0x1107, + 0x1174, 0x11BC, 0x1107, 0x1174, 0x11BD, 0x1107, 0x1174, 0x11BE, + 0x1107, 0x1174, 0x11BF, 0x1107, 0x1174, 0x11C0, 0x1107, 0x1174, + 0x11C1, 0x1107, 0x1174, 0x11C2, 0x1107, 0x1175, 0x1107, 0x1175, + 0x11A8, 0x1107, 0x1175, 0x11A9, 0x1107, 0x1175, 0x11AA, 0x1107, + 0x1175, 0x11AB, 0x1107, 0x1175, 0x11AC, 0x1107, 0x1175, 0x11AD, + 0x1107, 0x1175, 0x11AE, 0x1107, 0x1175, 0x11AF, 0x1107, 0x1175, + 0x11B0, 0x1107, 0x1175, 0x11B1, 0x1107, 0x1175, 0x11B2, 0x1107, + 0x1175, 0x11B3, 0x1107, 0x1175, 0x11B4, 0x1107, 0x1175, 0x11B5, + 0x1107, 0x1175, 0x11B6, 0x1107, 0x1175, 0x11B7, 0x1107, 0x1175, + 0x11B8, 0x1107, 0x1175, 0x11B9, 0x1107, 0x1175, 0x11BA, 0x1107, + 0x1175, 0x11BB, 0x1107, 0x1175, 0x11BC, 0x1107, 0x1175, 0x11BD, + 0x1107, 0x1175, 0x11BE, 0x1107, 0x1175, 0x11BF, 0x1107, 0x1175, + 0x11C0, 0x1107, 0x1175, 0x11C1, 0x1107, 0x1175, 0x11C2, 0x1108, + 0x1161, 0x1108, 0x1161, 0x11A8, 0x1108, 0x1161, 0x11A9, 0x1108, + 0x1161, 0x11AA, 0x1108, 0x1161, 0x11AB, 0x1108, 0x1161, 0x11AC, + 0x1108, 0x1161, 0x11AD, 0x1108, 0x1161, 0x11AE, 0x1108, 0x1161, + 0x11AF, 0x1108, 0x1161, 0x11B0, 0x1108, 0x1161, 0x11B1, 0x1108, + 0x1161, 0x11B2, 0x1108, 0x1161, 0x11B3, 0x1108, 0x1161, 0x11B4, + 0x1108, 0x1161, 0x11B5, 0x1108, 0x1161, 0x11B6, 0x1108, 0x1161, + 0x11B7, 0x1108, 0x1161, 0x11B8, 0x1108, 0x1161, 0x11B9, 0x1108, + 0x1161, 0x11BA, 0x1108, 0x1161, 0x11BB, 0x1108, 0x1161, 0x11BC, + 0x1108, 0x1161, 0x11BD, 0x1108, 0x1161, 0x11BE, 0x1108, 0x1161, + 0x11BF, 0x1108, 0x1161, 0x11C0, 0x1108, 0x1161, 0x11C1, 0x1108, + 0x1161, 0x11C2, 0x1108, 0x1162, 0x1108, 0x1162, 0x11A8, 0x1108, + 0x1162, 0x11A9, 0x1108, 0x1162, 0x11AA, 0x1108, 0x1162, 0x11AB, + 0x1108, 0x1162, 0x11AC, 0x1108, 0x1162, 0x11AD, 0x1108, 0x1162, + 0x11AE, 0x1108, 0x1162, 0x11AF, 0x1108, 0x1162, 0x11B0, 0x1108, + 0x1162, 0x11B1, 0x1108, 0x1162, 0x11B2, 0x1108, 0x1162, 0x11B3, + 0x1108, 0x1162, 0x11B4, 0x1108, 0x1162, 0x11B5, 0x1108, 0x1162, + 0x11B6, 0x1108, 0x1162, 0x11B7, 0x1108, 0x1162, 0x11B8, 0x1108, + 0x1162, 0x11B9, 0x1108, 0x1162, 0x11BA, 0x1108, 0x1162, 0x11BB, + 0x1108, 0x1162, 0x11BC, 0x1108, 0x1162, 0x11BD, 0x1108, 0x1162, + 0x11BE, 0x1108, 0x1162, 0x11BF, 0x1108, 0x1162, 0x11C0, 0x1108, + 0x1162, 0x11C1, 0x1108, 0x1162, 0x11C2, 0x1108, 0x1163, 0x1108, + 0x1163, 0x11A8, 0x1108, 0x1163, 0x11A9, 0x1108, 0x1163, 0x11AA, + 0x1108, 0x1163, 0x11AB, 0x1108, 0x1163, 0x11AC, 0x1108, 0x1163, + 0x11AD, 0x1108, 0x1163, 0x11AE, 0x1108, 0x1163, 0x11AF, 0x1108, + 0x1163, 0x11B0, 0x1108, 0x1163, 0x11B1, 0x1108, 0x1163, 0x11B2, + 0x1108, 0x1163, 0x11B3, 0x1108, 0x1163, 0x11B4, 0x1108, 0x1163, + 0x11B5, 0x1108, 0x1163, 0x11B6, 0x1108, 0x1163, 0x11B7, 0x1108, + 0x1163, 0x11B8, 0x1108, 0x1163, 0x11B9, 0x1108, 0x1163, 0x11BA, + 0x1108, 0x1163, 0x11BB, 0x1108, 0x1163, 0x11BC, 0x1108, 0x1163, + 0x11BD, 0x1108, 0x1163, 0x11BE, 0x1108, 0x1163, 0x11BF, 0x1108, + 0x1163, 0x11C0, 0x1108, 0x1163, 0x11C1, 0x1108, 0x1163, 0x11C2, + 0x1108, 0x1164, 0x1108, 0x1164, 0x11A8, 0x1108, 0x1164, 0x11A9, + 0x1108, 0x1164, 0x11AA, 0x1108, 0x1164, 0x11AB, 0x1108, 0x1164, + 0x11AC, 0x1108, 0x1164, 0x11AD, 0x1108, 0x1164, 0x11AE, 0x1108, + 0x1164, 0x11AF, 0x1108, 0x1164, 0x11B0, 0x1108, 0x1164, 0x11B1, + 0x1108, 0x1164, 0x11B2, 0x1108, 0x1164, 0x11B3, 0x1108, 0x1164, + 0x11B4, 0x1108, 0x1164, 0x11B5, 0x1108, 0x1164, 0x11B6, 0x1108, + 0x1164, 0x11B7, 0x1108, 0x1164, 0x11B8, 0x1108, 0x1164, 0x11B9, + 0x1108, 0x1164, 0x11BA, 0x1108, 0x1164, 0x11BB, 0x1108, 0x1164, + 0x11BC, 0x1108, 0x1164, 0x11BD, 0x1108, 0x1164, 0x11BE, 0x1108, + 0x1164, 0x11BF, 0x1108, 0x1164, 0x11C0, 0x1108, 0x1164, 0x11C1, + 0x1108, 0x1164, 0x11C2, 0x1108, 0x1165, 0x1108, 0x1165, 0x11A8, + 0x1108, 0x1165, 0x11A9, 0x1108, 0x1165, 0x11AA, 0x1108, 0x1165, + 0x11AB, 0x1108, 0x1165, 0x11AC, 0x1108, 0x1165, 0x11AD, 0x1108, + 0x1165, 0x11AE, 0x1108, 0x1165, 0x11AF, 0x1108, 0x1165, 0x11B0, + 0x1108, 0x1165, 0x11B1, 0x1108, 0x1165, 0x11B2, 0x1108, 0x1165, + 0x11B3, 0x1108, 0x1165, 0x11B4, 0x1108, 0x1165, 0x11B5, 0x1108, + 0x1165, 0x11B6, 0x1108, 0x1165, 0x11B7, 0x1108, 0x1165, 0x11B8, + 0x1108, 0x1165, 0x11B9, 0x1108, 0x1165, 0x11BA, 0x1108, 0x1165, + 0x11BB, 0x1108, 0x1165, 0x11BC, 0x1108, 0x1165, 0x11BD, 0x1108, + 0x1165, 0x11BE, 0x1108, 0x1165, 0x11BF, 0x1108, 0x1165, 0x11C0, + 0x1108, 0x1165, 0x11C1, 0x1108, 0x1165, 0x11C2, 0x1108, 0x1166, + 0x1108, 0x1166, 0x11A8, 0x1108, 0x1166, 0x11A9, 0x1108, 0x1166, + 0x11AA, 0x1108, 0x1166, 0x11AB, 0x1108, 0x1166, 0x11AC, 0x1108, + 0x1166, 0x11AD, 0x1108, 0x1166, 0x11AE, 0x1108, 0x1166, 0x11AF, + 0x1108, 0x1166, 0x11B0, 0x1108, 0x1166, 0x11B1, 0x1108, 0x1166, + 0x11B2, 0x1108, 0x1166, 0x11B3, 0x1108, 0x1166, 0x11B4, 0x1108, + 0x1166, 0x11B5, 0x1108, 0x1166, 0x11B6, 0x1108, 0x1166, 0x11B7, + 0x1108, 0x1166, 0x11B8, 0x1108, 0x1166, 0x11B9, 0x1108, 0x1166, + 0x11BA, 0x1108, 0x1166, 0x11BB, 0x1108, 0x1166, 0x11BC, 0x1108, + 0x1166, 0x11BD, 0x1108, 0x1166, 0x11BE, 0x1108, 0x1166, 0x11BF, + 0x1108, 0x1166, 0x11C0, 0x1108, 0x1166, 0x11C1, 0x1108, 0x1166, + 0x11C2, 0x1108, 0x1167, 0x1108, 0x1167, 0x11A8, 0x1108, 0x1167, + 0x11A9, 0x1108, 0x1167, 0x11AA, 0x1108, 0x1167, 0x11AB, 0x1108, + 0x1167, 0x11AC, 0x1108, 0x1167, 0x11AD, 0x1108, 0x1167, 0x11AE, + 0x1108, 0x1167, 0x11AF, 0x1108, 0x1167, 0x11B0, 0x1108, 0x1167, + 0x11B1, 0x1108, 0x1167, 0x11B2, 0x1108, 0x1167, 0x11B3, 0x1108, + 0x1167, 0x11B4, 0x1108, 0x1167, 0x11B5, 0x1108, 0x1167, 0x11B6, + 0x1108, 0x1167, 0x11B7, 0x1108, 0x1167, 0x11B8, 0x1108, 0x1167, + 0x11B9, 0x1108, 0x1167, 0x11BA, 0x1108, 0x1167, 0x11BB, 0x1108, + 0x1167, 0x11BC, 0x1108, 0x1167, 0x11BD, 0x1108, 0x1167, 0x11BE, + 0x1108, 0x1167, 0x11BF, 0x1108, 0x1167, 0x11C0, 0x1108, 0x1167, + 0x11C1, 0x1108, 0x1167, 0x11C2, 0x1108, 0x1168, 0x1108, 0x1168, + 0x11A8, 0x1108, 0x1168, 0x11A9, 0x1108, 0x1168, 0x11AA, 0x1108, + 0x1168, 0x11AB, 0x1108, 0x1168, 0x11AC, 0x1108, 0x1168, 0x11AD, + 0x1108, 0x1168, 0x11AE, 0x1108, 0x1168, 0x11AF, 0x1108, 0x1168, + 0x11B0, 0x1108, 0x1168, 0x11B1, 0x1108, 0x1168, 0x11B2, 0x1108, + 0x1168, 0x11B3, 0x1108, 0x1168, 0x11B4, 0x1108, 0x1168, 0x11B5, + 0x1108, 0x1168, 0x11B6, 0x1108, 0x1168, 0x11B7, 0x1108, 0x1168, + 0x11B8, 0x1108, 0x1168, 0x11B9, 0x1108, 0x1168, 0x11BA, 0x1108, + 0x1168, 0x11BB, 0x1108, 0x1168, 0x11BC, 0x1108, 0x1168, 0x11BD, + 0x1108, 0x1168, 0x11BE, 0x1108, 0x1168, 0x11BF, 0x1108, 0x1168, + 0x11C0, 0x1108, 0x1168, 0x11C1, 0x1108, 0x1168, 0x11C2, 0x1108, + 0x1169, 0x1108, 0x1169, 0x11A8, 0x1108, 0x1169, 0x11A9, 0x1108, + 0x1169, 0x11AA, 0x1108, 0x1169, 0x11AB, 0x1108, 0x1169, 0x11AC, + 0x1108, 0x1169, 0x11AD, 0x1108, 0x1169, 0x11AE, 0x1108, 0x1169, + 0x11AF, 0x1108, 0x1169, 0x11B0, 0x1108, 0x1169, 0x11B1, 0x1108, + 0x1169, 0x11B2, 0x1108, 0x1169, 0x11B3, 0x1108, 0x1169, 0x11B4, + 0x1108, 0x1169, 0x11B5, 0x1108, 0x1169, 0x11B6, 0x1108, 0x1169, + 0x11B7, 0x1108, 0x1169, 0x11B8, 0x1108, 0x1169, 0x11B9, 0x1108, + 0x1169, 0x11BA, 0x1108, 0x1169, 0x11BB, 0x1108, 0x1169, 0x11BC, + 0x1108, 0x1169, 0x11BD, 0x1108, 0x1169, 0x11BE, 0x1108, 0x1169, + 0x11BF, 0x1108, 0x1169, 0x11C0, 0x1108, 0x1169, 0x11C1, 0x1108, + 0x1169, 0x11C2, 0x1108, 0x116A, 0x1108, 0x116A, 0x11A8, 0x1108, + 0x116A, 0x11A9, 0x1108, 0x116A, 0x11AA, 0x1108, 0x116A, 0x11AB, + 0x1108, 0x116A, 0x11AC, 0x1108, 0x116A, 0x11AD, 0x1108, 0x116A, + 0x11AE, 0x1108, 0x116A, 0x11AF, 0x1108, 0x116A, 0x11B0, 0x1108, + 0x116A, 0x11B1, 0x1108, 0x116A, 0x11B2, 0x1108, 0x116A, 0x11B3, + 0x1108, 0x116A, 0x11B4, 0x1108, 0x116A, 0x11B5, 0x1108, 0x116A, + 0x11B6, 0x1108, 0x116A, 0x11B7, 0x1108, 0x116A, 0x11B8, 0x1108, + 0x116A, 0x11B9, 0x1108, 0x116A, 0x11BA, 0x1108, 0x116A, 0x11BB, + 0x1108, 0x116A, 0x11BC, 0x1108, 0x116A, 0x11BD, 0x1108, 0x116A, + 0x11BE, 0x1108, 0x116A, 0x11BF, 0x1108, 0x116A, 0x11C0, 0x1108, + 0x116A, 0x11C1, 0x1108, 0x116A, 0x11C2, 0x1108, 0x116B, 0x1108, + 0x116B, 0x11A8, 0x1108, 0x116B, 0x11A9, 0x1108, 0x116B, 0x11AA, + 0x1108, 0x116B, 0x11AB, 0x1108, 0x116B, 0x11AC, 0x1108, 0x116B, + 0x11AD, 0x1108, 0x116B, 0x11AE, 0x1108, 0x116B, 0x11AF, 0x1108, + 0x116B, 0x11B0, 0x1108, 0x116B, 0x11B1, 0x1108, 0x116B, 0x11B2, + 0x1108, 0x116B, 0x11B3, 0x1108, 0x116B, 0x11B4, 0x1108, 0x116B, + 0x11B5, 0x1108, 0x116B, 0x11B6, 0x1108, 0x116B, 0x11B7, 0x1108, + 0x116B, 0x11B8, 0x1108, 0x116B, 0x11B9, 0x1108, 0x116B, 0x11BA, + 0x1108, 0x116B, 0x11BB, 0x1108, 0x116B, 0x11BC, 0x1108, 0x116B, + 0x11BD, 0x1108, 0x116B, 0x11BE, 0x1108, 0x116B, 0x11BF, 0x1108, + 0x116B, 0x11C0, 0x1108, 0x116B, 0x11C1, 0x1108, 0x116B, 0x11C2, + 0x1108, 0x116C, 0x1108, 0x116C, 0x11A8, 0x1108, 0x116C, 0x11A9, + 0x1108, 0x116C, 0x11AA, 0x1108, 0x116C, 0x11AB, 0x1108, 0x116C, + 0x11AC, 0x1108, 0x116C, 0x11AD, 0x1108, 0x116C, 0x11AE, 0x1108, + 0x116C, 0x11AF, 0x1108, 0x116C, 0x11B0, 0x1108, 0x116C, 0x11B1, + 0x1108, 0x116C, 0x11B2, 0x1108, 0x116C, 0x11B3, 0x1108, 0x116C, + 0x11B4, 0x1108, 0x116C, 0x11B5, 0x1108, 0x116C, 0x11B6, 0x1108, + 0x116C, 0x11B7, 0x1108, 0x116C, 0x11B8, 0x1108, 0x116C, 0x11B9, + 0x1108, 0x116C, 0x11BA, 0x1108, 0x116C, 0x11BB, 0x1108, 0x116C, + 0x11BC, 0x1108, 0x116C, 0x11BD, 0x1108, 0x116C, 0x11BE, 0x1108, + 0x116C, 0x11BF, 0x1108, 0x116C, 0x11C0, 0x1108, 0x116C, 0x11C1, + 0x1108, 0x116C, 0x11C2, 0x1108, 0x116D, 0x1108, 0x116D, 0x11A8, + 0x1108, 0x116D, 0x11A9, 0x1108, 0x116D, 0x11AA, 0x1108, 0x116D, + 0x11AB, 0x1108, 0x116D, 0x11AC, 0x1108, 0x116D, 0x11AD, 0x1108, + 0x116D, 0x11AE, 0x1108, 0x116D, 0x11AF, 0x1108, 0x116D, 0x11B0, + 0x1108, 0x116D, 0x11B1, 0x1108, 0x116D, 0x11B2, 0x1108, 0x116D, + 0x11B3, 0x1108, 0x116D, 0x11B4, 0x1108, 0x116D, 0x11B5, 0x1108, + 0x116D, 0x11B6, 0x1108, 0x116D, 0x11B7, 0x1108, 0x116D, 0x11B8, + 0x1108, 0x116D, 0x11B9, 0x1108, 0x116D, 0x11BA, 0x1108, 0x116D, + 0x11BB, 0x1108, 0x116D, 0x11BC, 0x1108, 0x116D, 0x11BD, 0x1108, + 0x116D, 0x11BE, 0x1108, 0x116D, 0x11BF, 0x1108, 0x116D, 0x11C0, + 0x1108, 0x116D, 0x11C1, 0x1108, 0x116D, 0x11C2, 0x1108, 0x116E, + 0x1108, 0x116E, 0x11A8, 0x1108, 0x116E, 0x11A9, 0x1108, 0x116E, + 0x11AA, 0x1108, 0x116E, 0x11AB, 0x1108, 0x116E, 0x11AC, 0x1108, + 0x116E, 0x11AD, 0x1108, 0x116E, 0x11AE, 0x1108, 0x116E, 0x11AF, + 0x1108, 0x116E, 0x11B0, 0x1108, 0x116E, 0x11B1, 0x1108, 0x116E, + 0x11B2, 0x1108, 0x116E, 0x11B3, 0x1108, 0x116E, 0x11B4, 0x1108, + 0x116E, 0x11B5, 0x1108, 0x116E, 0x11B6, 0x1108, 0x116E, 0x11B7, + 0x1108, 0x116E, 0x11B8, 0x1108, 0x116E, 0x11B9, 0x1108, 0x116E, + 0x11BA, 0x1108, 0x116E, 0x11BB, 0x1108, 0x116E, 0x11BC, 0x1108, + 0x116E, 0x11BD, 0x1108, 0x116E, 0x11BE, 0x1108, 0x116E, 0x11BF, + 0x1108, 0x116E, 0x11C0, 0x1108, 0x116E, 0x11C1, 0x1108, 0x116E, + 0x11C2, 0x1108, 0x116F, 0x1108, 0x116F, 0x11A8, 0x1108, 0x116F, + 0x11A9, 0x1108, 0x116F, 0x11AA, 0x1108, 0x116F, 0x11AB, 0x1108, + 0x116F, 0x11AC, 0x1108, 0x116F, 0x11AD, 0x1108, 0x116F, 0x11AE, + 0x1108, 0x116F, 0x11AF, 0x1108, 0x116F, 0x11B0, 0x1108, 0x116F, + 0x11B1, 0x1108, 0x116F, 0x11B2, 0x1108, 0x116F, 0x11B3, 0x1108, + 0x116F, 0x11B4, 0x1108, 0x116F, 0x11B5, 0x1108, 0x116F, 0x11B6, + 0x1108, 0x116F, 0x11B7, 0x1108, 0x116F, 0x11B8, 0x1108, 0x116F, + 0x11B9, 0x1108, 0x116F, 0x11BA, 0x1108, 0x116F, 0x11BB, 0x1108, + 0x116F, 0x11BC, 0x1108, 0x116F, 0x11BD, 0x1108, 0x116F, 0x11BE, + 0x1108, 0x116F, 0x11BF, 0x1108, 0x116F, 0x11C0, 0x1108, 0x116F, + 0x11C1, 0x1108, 0x116F, 0x11C2, 0x1108, 0x1170, 0x1108, 0x1170, + 0x11A8, 0x1108, 0x1170, 0x11A9, 0x1108, 0x1170, 0x11AA, 0x1108, + 0x1170, 0x11AB, 0x1108, 0x1170, 0x11AC, 0x1108, 0x1170, 0x11AD, + 0x1108, 0x1170, 0x11AE, 0x1108, 0x1170, 0x11AF, 0x1108, 0x1170, + 0x11B0, 0x1108, 0x1170, 0x11B1, 0x1108, 0x1170, 0x11B2, 0x1108, + 0x1170, 0x11B3, 0x1108, 0x1170, 0x11B4, 0x1108, 0x1170, 0x11B5, + 0x1108, 0x1170, 0x11B6, 0x1108, 0x1170, 0x11B7, 0x1108, 0x1170, + 0x11B8, 0x1108, 0x1170, 0x11B9, 0x1108, 0x1170, 0x11BA, 0x1108, + 0x1170, 0x11BB, 0x1108, 0x1170, 0x11BC, 0x1108, 0x1170, 0x11BD, + 0x1108, 0x1170, 0x11BE, 0x1108, 0x1170, 0x11BF, 0x1108, 0x1170, + 0x11C0, 0x1108, 0x1170, 0x11C1, 0x1108, 0x1170, 0x11C2, 0x1108, + 0x1171, 0x1108, 0x1171, 0x11A8, 0x1108, 0x1171, 0x11A9, 0x1108, + 0x1171, 0x11AA, 0x1108, 0x1171, 0x11AB, 0x1108, 0x1171, 0x11AC, + 0x1108, 0x1171, 0x11AD, 0x1108, 0x1171, 0x11AE, 0x1108, 0x1171, + 0x11AF, 0x1108, 0x1171, 0x11B0, 0x1108, 0x1171, 0x11B1, 0x1108, + 0x1171, 0x11B2, 0x1108, 0x1171, 0x11B3, 0x1108, 0x1171, 0x11B4, + 0x1108, 0x1171, 0x11B5, 0x1108, 0x1171, 0x11B6, 0x1108, 0x1171, + 0x11B7, 0x1108, 0x1171, 0x11B8, 0x1108, 0x1171, 0x11B9, 0x1108, + 0x1171, 0x11BA, 0x1108, 0x1171, 0x11BB, 0x1108, 0x1171, 0x11BC, + 0x1108, 0x1171, 0x11BD, 0x1108, 0x1171, 0x11BE, 0x1108, 0x1171, + 0x11BF, 0x1108, 0x1171, 0x11C0, 0x1108, 0x1171, 0x11C1, 0x1108, + 0x1171, 0x11C2, 0x1108, 0x1172, 0x1108, 0x1172, 0x11A8, 0x1108, + 0x1172, 0x11A9, 0x1108, 0x1172, 0x11AA, 0x1108, 0x1172, 0x11AB, + 0x1108, 0x1172, 0x11AC, 0x1108, 0x1172, 0x11AD, 0x1108, 0x1172, + 0x11AE, 0x1108, 0x1172, 0x11AF, 0x1108, 0x1172, 0x11B0, 0x1108, + 0x1172, 0x11B1, 0x1108, 0x1172, 0x11B2, 0x1108, 0x1172, 0x11B3, + 0x1108, 0x1172, 0x11B4, 0x1108, 0x1172, 0x11B5, 0x1108, 0x1172, + 0x11B6, 0x1108, 0x1172, 0x11B7, 0x1108, 0x1172, 0x11B8, 0x1108, + 0x1172, 0x11B9, 0x1108, 0x1172, 0x11BA, 0x1108, 0x1172, 0x11BB, + 0x1108, 0x1172, 0x11BC, 0x1108, 0x1172, 0x11BD, 0x1108, 0x1172, + 0x11BE, 0x1108, 0x1172, 0x11BF, 0x1108, 0x1172, 0x11C0, 0x1108, + 0x1172, 0x11C1, 0x1108, 0x1172, 0x11C2, 0x1108, 0x1173, 0x1108, + 0x1173, 0x11A8, 0x1108, 0x1173, 0x11A9, 0x1108, 0x1173, 0x11AA, + 0x1108, 0x1173, 0x11AB, 0x1108, 0x1173, 0x11AC, 0x1108, 0x1173, + 0x11AD, 0x1108, 0x1173, 0x11AE, 0x1108, 0x1173, 0x11AF, 0x1108, + 0x1173, 0x11B0, 0x1108, 0x1173, 0x11B1, 0x1108, 0x1173, 0x11B2, + 0x1108, 0x1173, 0x11B3, 0x1108, 0x1173, 0x11B4, 0x1108, 0x1173, + 0x11B5, 0x1108, 0x1173, 0x11B6, 0x1108, 0x1173, 0x11B7, 0x1108, + 0x1173, 0x11B8, 0x1108, 0x1173, 0x11B9, 0x1108, 0x1173, 0x11BA, + 0x1108, 0x1173, 0x11BB, 0x1108, 0x1173, 0x11BC, 0x1108, 0x1173, + 0x11BD, 0x1108, 0x1173, 0x11BE, 0x1108, 0x1173, 0x11BF, 0x1108, + 0x1173, 0x11C0, 0x1108, 0x1173, 0x11C1, 0x1108, 0x1173, 0x11C2, + 0x1108, 0x1174, 0x1108, 0x1174, 0x11A8, 0x1108, 0x1174, 0x11A9, + 0x1108, 0x1174, 0x11AA, 0x1108, 0x1174, 0x11AB, 0x1108, 0x1174, + 0x11AC, 0x1108, 0x1174, 0x11AD, 0x1108, 0x1174, 0x11AE, 0x1108, + 0x1174, 0x11AF, 0x1108, 0x1174, 0x11B0, 0x1108, 0x1174, 0x11B1, + 0x1108, 0x1174, 0x11B2, 0x1108, 0x1174, 0x11B3, 0x1108, 0x1174, + 0x11B4, 0x1108, 0x1174, 0x11B5, 0x1108, 0x1174, 0x11B6, 0x1108, + 0x1174, 0x11B7, 0x1108, 0x1174, 0x11B8, 0x1108, 0x1174, 0x11B9, + 0x1108, 0x1174, 0x11BA, 0x1108, 0x1174, 0x11BB, 0x1108, 0x1174, + 0x11BC, 0x1108, 0x1174, 0x11BD, 0x1108, 0x1174, 0x11BE, 0x1108, + 0x1174, 0x11BF, 0x1108, 0x1174, 0x11C0, 0x1108, 0x1174, 0x11C1, + 0x1108, 0x1174, 0x11C2, 0x1108, 0x1175, 0x1108, 0x1175, 0x11A8, + 0x1108, 0x1175, 0x11A9, 0x1108, 0x1175, 0x11AA, 0x1108, 0x1175, + 0x11AB, 0x1108, 0x1175, 0x11AC, 0x1108, 0x1175, 0x11AD, 0x1108, + 0x1175, 0x11AE, 0x1108, 0x1175, 0x11AF, 0x1108, 0x1175, 0x11B0, + 0x1108, 0x1175, 0x11B1, 0x1108, 0x1175, 0x11B2, 0x1108, 0x1175, + 0x11B3, 0x1108, 0x1175, 0x11B4, 0x1108, 0x1175, 0x11B5, 0x1108, + 0x1175, 0x11B6, 0x1108, 0x1175, 0x11B7, 0x1108, 0x1175, 0x11B8, + 0x1108, 0x1175, 0x11B9, 0x1108, 0x1175, 0x11BA, 0x1108, 0x1175, + 0x11BB, 0x1108, 0x1175, 0x11BC, 0x1108, 0x1175, 0x11BD, 0x1108, + 0x1175, 0x11BE, 0x1108, 0x1175, 0x11BF, 0x1108, 0x1175, 0x11C0, + 0x1108, 0x1175, 0x11C1, 0x1108, 0x1175, 0x11C2, 0x1109, 0x1161, + 0x1109, 0x1161, 0x11A8, 0x1109, 0x1161, 0x11A9, 0x1109, 0x1161, + 0x11AA, 0x1109, 0x1161, 0x11AB, 0x1109, 0x1161, 0x11AC, 0x1109, + 0x1161, 0x11AD, 0x1109, 0x1161, 0x11AE, 0x1109, 0x1161, 0x11AF, + 0x1109, 0x1161, 0x11B0, 0x1109, 0x1161, 0x11B1, 0x1109, 0x1161, + 0x11B2, 0x1109, 0x1161, 0x11B3, 0x1109, 0x1161, 0x11B4, 0x1109, + 0x1161, 0x11B5, 0x1109, 0x1161, 0x11B6, 0x1109, 0x1161, 0x11B7, + 0x1109, 0x1161, 0x11B8, 0x1109, 0x1161, 0x11B9, 0x1109, 0x1161, + 0x11BA, 0x1109, 0x1161, 0x11BB, 0x1109, 0x1161, 0x11BC, 0x1109, + 0x1161, 0x11BD, 0x1109, 0x1161, 0x11BE, 0x1109, 0x1161, 0x11BF, + 0x1109, 0x1161, 0x11C0, 0x1109, 0x1161, 0x11C1, 0x1109, 0x1161, + 0x11C2, 0x1109, 0x1162, 0x1109, 0x1162, 0x11A8, 0x1109, 0x1162, + 0x11A9, 0x1109, 0x1162, 0x11AA, 0x1109, 0x1162, 0x11AB, 0x1109, + 0x1162, 0x11AC, 0x1109, 0x1162, 0x11AD, 0x1109, 0x1162, 0x11AE, + 0x1109, 0x1162, 0x11AF, 0x1109, 0x1162, 0x11B0, 0x1109, 0x1162, + 0x11B1, 0x1109, 0x1162, 0x11B2, 0x1109, 0x1162, 0x11B3, 0x1109, + 0x1162, 0x11B4, 0x1109, 0x1162, 0x11B5, 0x1109, 0x1162, 0x11B6, + 0x1109, 0x1162, 0x11B7, 0x1109, 0x1162, 0x11B8, 0x1109, 0x1162, + 0x11B9, 0x1109, 0x1162, 0x11BA, 0x1109, 0x1162, 0x11BB, 0x1109, + 0x1162, 0x11BC, 0x1109, 0x1162, 0x11BD, 0x1109, 0x1162, 0x11BE, + 0x1109, 0x1162, 0x11BF, 0x1109, 0x1162, 0x11C0, 0x1109, 0x1162, + 0x11C1, 0x1109, 0x1162, 0x11C2, 0x1109, 0x1163, 0x1109, 0x1163, + 0x11A8, 0x1109, 0x1163, 0x11A9, 0x1109, 0x1163, 0x11AA, 0x1109, + 0x1163, 0x11AB, 0x1109, 0x1163, 0x11AC, 0x1109, 0x1163, 0x11AD, + 0x1109, 0x1163, 0x11AE, 0x1109, 0x1163, 0x11AF, 0x1109, 0x1163, + 0x11B0, 0x1109, 0x1163, 0x11B1, 0x1109, 0x1163, 0x11B2, 0x1109, + 0x1163, 0x11B3, 0x1109, 0x1163, 0x11B4, 0x1109, 0x1163, 0x11B5, + 0x1109, 0x1163, 0x11B6, 0x1109, 0x1163, 0x11B7, 0x1109, 0x1163, + 0x11B8, 0x1109, 0x1163, 0x11B9, 0x1109, 0x1163, 0x11BA, 0x1109, + 0x1163, 0x11BB, 0x1109, 0x1163, 0x11BC, 0x1109, 0x1163, 0x11BD, + 0x1109, 0x1163, 0x11BE, 0x1109, 0x1163, 0x11BF, 0x1109, 0x1163, + 0x11C0, 0x1109, 0x1163, 0x11C1, 0x1109, 0x1163, 0x11C2, 0x1109, + 0x1164, 0x1109, 0x1164, 0x11A8, 0x1109, 0x1164, 0x11A9, 0x1109, + 0x1164, 0x11AA, 0x1109, 0x1164, 0x11AB, 0x1109, 0x1164, 0x11AC, + 0x1109, 0x1164, 0x11AD, 0x1109, 0x1164, 0x11AE, 0x1109, 0x1164, + 0x11AF, 0x1109, 0x1164, 0x11B0, 0x1109, 0x1164, 0x11B1, 0x1109, + 0x1164, 0x11B2, 0x1109, 0x1164, 0x11B3, 0x1109, 0x1164, 0x11B4, + 0x1109, 0x1164, 0x11B5, 0x1109, 0x1164, 0x11B6, 0x1109, 0x1164, + 0x11B7, 0x1109, 0x1164, 0x11B8, 0x1109, 0x1164, 0x11B9, 0x1109, + 0x1164, 0x11BA, 0x1109, 0x1164, 0x11BB, 0x1109, 0x1164, 0x11BC, + 0x1109, 0x1164, 0x11BD, 0x1109, 0x1164, 0x11BE, 0x1109, 0x1164, + 0x11BF, 0x1109, 0x1164, 0x11C0, 0x1109, 0x1164, 0x11C1, 0x1109, + 0x1164, 0x11C2, 0x1109, 0x1165, 0x1109, 0x1165, 0x11A8, 0x1109, + 0x1165, 0x11A9, 0x1109, 0x1165, 0x11AA, 0x1109, 0x1165, 0x11AB, + 0x1109, 0x1165, 0x11AC, 0x1109, 0x1165, 0x11AD, 0x1109, 0x1165, + 0x11AE, 0x1109, 0x1165, 0x11AF, 0x1109, 0x1165, 0x11B0, 0x1109, + 0x1165, 0x11B1, 0x1109, 0x1165, 0x11B2, 0x1109, 0x1165, 0x11B3, + 0x1109, 0x1165, 0x11B4, 0x1109, 0x1165, 0x11B5, 0x1109, 0x1165, + 0x11B6, 0x1109, 0x1165, 0x11B7, 0x1109, 0x1165, 0x11B8, 0x1109, + 0x1165, 0x11B9, 0x1109, 0x1165, 0x11BA, 0x1109, 0x1165, 0x11BB, + 0x1109, 0x1165, 0x11BC, 0x1109, 0x1165, 0x11BD, 0x1109, 0x1165, + 0x11BE, 0x1109, 0x1165, 0x11BF, 0x1109, 0x1165, 0x11C0, 0x1109, + 0x1165, 0x11C1, 0x1109, 0x1165, 0x11C2, 0x1109, 0x1166, 0x1109, + 0x1166, 0x11A8, 0x1109, 0x1166, 0x11A9, 0x1109, 0x1166, 0x11AA, + 0x1109, 0x1166, 0x11AB, 0x1109, 0x1166, 0x11AC, 0x1109, 0x1166, + 0x11AD, 0x1109, 0x1166, 0x11AE, 0x1109, 0x1166, 0x11AF, 0x1109, + 0x1166, 0x11B0, 0x1109, 0x1166, 0x11B1, 0x1109, 0x1166, 0x11B2, + 0x1109, 0x1166, 0x11B3, 0x1109, 0x1166, 0x11B4, 0x1109, 0x1166, + 0x11B5, 0x1109, 0x1166, 0x11B6, 0x1109, 0x1166, 0x11B7, 0x1109, + 0x1166, 0x11B8, 0x1109, 0x1166, 0x11B9, 0x1109, 0x1166, 0x11BA, + 0x1109, 0x1166, 0x11BB, 0x1109, 0x1166, 0x11BC, 0x1109, 0x1166, + 0x11BD, 0x1109, 0x1166, 0x11BE, 0x1109, 0x1166, 0x11BF, 0x1109, + 0x1166, 0x11C0, 0x1109, 0x1166, 0x11C1, 0x1109, 0x1166, 0x11C2, + 0x1109, 0x1167, 0x1109, 0x1167, 0x11A8, 0x1109, 0x1167, 0x11A9, + 0x1109, 0x1167, 0x11AA, 0x1109, 0x1167, 0x11AB, 0x1109, 0x1167, + 0x11AC, 0x1109, 0x1167, 0x11AD, 0x1109, 0x1167, 0x11AE, 0x1109, + 0x1167, 0x11AF, 0x1109, 0x1167, 0x11B0, 0x1109, 0x1167, 0x11B1, + 0x1109, 0x1167, 0x11B2, 0x1109, 0x1167, 0x11B3, 0x1109, 0x1167, + 0x11B4, 0x1109, 0x1167, 0x11B5, 0x1109, 0x1167, 0x11B6, 0x1109, + 0x1167, 0x11B7, 0x1109, 0x1167, 0x11B8, 0x1109, 0x1167, 0x11B9, + 0x1109, 0x1167, 0x11BA, 0x1109, 0x1167, 0x11BB, 0x1109, 0x1167, + 0x11BC, 0x1109, 0x1167, 0x11BD, 0x1109, 0x1167, 0x11BE, 0x1109, + 0x1167, 0x11BF, 0x1109, 0x1167, 0x11C0, 0x1109, 0x1167, 0x11C1, + 0x1109, 0x1167, 0x11C2, 0x1109, 0x1168, 0x1109, 0x1168, 0x11A8, + 0x1109, 0x1168, 0x11A9, 0x1109, 0x1168, 0x11AA, 0x1109, 0x1168, + 0x11AB, 0x1109, 0x1168, 0x11AC, 0x1109, 0x1168, 0x11AD, 0x1109, + 0x1168, 0x11AE, 0x1109, 0x1168, 0x11AF, 0x1109, 0x1168, 0x11B0, + 0x1109, 0x1168, 0x11B1, 0x1109, 0x1168, 0x11B2, 0x1109, 0x1168, + 0x11B3, 0x1109, 0x1168, 0x11B4, 0x1109, 0x1168, 0x11B5, 0x1109, + 0x1168, 0x11B6, 0x1109, 0x1168, 0x11B7, 0x1109, 0x1168, 0x11B8, + 0x1109, 0x1168, 0x11B9, 0x1109, 0x1168, 0x11BA, 0x1109, 0x1168, + 0x11BB, 0x1109, 0x1168, 0x11BC, 0x1109, 0x1168, 0x11BD, 0x1109, + 0x1168, 0x11BE, 0x1109, 0x1168, 0x11BF, 0x1109, 0x1168, 0x11C0, + 0x1109, 0x1168, 0x11C1, 0x1109, 0x1168, 0x11C2, 0x1109, 0x1169, + 0x1109, 0x1169, 0x11A8, 0x1109, 0x1169, 0x11A9, 0x1109, 0x1169, + 0x11AA, 0x1109, 0x1169, 0x11AB, 0x1109, 0x1169, 0x11AC, 0x1109, + 0x1169, 0x11AD, 0x1109, 0x1169, 0x11AE, 0x1109, 0x1169, 0x11AF, + 0x1109, 0x1169, 0x11B0, 0x1109, 0x1169, 0x11B1, 0x1109, 0x1169, + 0x11B2, 0x1109, 0x1169, 0x11B3, 0x1109, 0x1169, 0x11B4, 0x1109, + 0x1169, 0x11B5, 0x1109, 0x1169, 0x11B6, 0x1109, 0x1169, 0x11B7, + 0x1109, 0x1169, 0x11B8, 0x1109, 0x1169, 0x11B9, 0x1109, 0x1169, + 0x11BA, 0x1109, 0x1169, 0x11BB, 0x1109, 0x1169, 0x11BC, 0x1109, + 0x1169, 0x11BD, 0x1109, 0x1169, 0x11BE, 0x1109, 0x1169, 0x11BF, + 0x1109, 0x1169, 0x11C0, 0x1109, 0x1169, 0x11C1, 0x1109, 0x1169, + 0x11C2, 0x1109, 0x116A, 0x1109, 0x116A, 0x11A8, 0x1109, 0x116A, + 0x11A9, 0x1109, 0x116A, 0x11AA, 0x1109, 0x116A, 0x11AB, 0x1109, + 0x116A, 0x11AC, 0x1109, 0x116A, 0x11AD, 0x1109, 0x116A, 0x11AE, + 0x1109, 0x116A, 0x11AF, 0x1109, 0x116A, 0x11B0, 0x1109, 0x116A, + 0x11B1, 0x1109, 0x116A, 0x11B2, 0x1109, 0x116A, 0x11B3, 0x1109, + 0x116A, 0x11B4, 0x1109, 0x116A, 0x11B5, 0x1109, 0x116A, 0x11B6, + 0x1109, 0x116A, 0x11B7, 0x1109, 0x116A, 0x11B8, 0x1109, 0x116A, + 0x11B9, 0x1109, 0x116A, 0x11BA, 0x1109, 0x116A, 0x11BB, 0x1109, + 0x116A, 0x11BC, 0x1109, 0x116A, 0x11BD, 0x1109, 0x116A, 0x11BE, + 0x1109, 0x116A, 0x11BF, 0x1109, 0x116A, 0x11C0, 0x1109, 0x116A, + 0x11C1, 0x1109, 0x116A, 0x11C2, 0x1109, 0x116B, 0x1109, 0x116B, + 0x11A8, 0x1109, 0x116B, 0x11A9, 0x1109, 0x116B, 0x11AA, 0x1109, + 0x116B, 0x11AB, 0x1109, 0x116B, 0x11AC, 0x1109, 0x116B, 0x11AD, + 0x1109, 0x116B, 0x11AE, 0x1109, 0x116B, 0x11AF, 0x1109, 0x116B, + 0x11B0, 0x1109, 0x116B, 0x11B1, 0x1109, 0x116B, 0x11B2, 0x1109, + 0x116B, 0x11B3, 0x1109, 0x116B, 0x11B4, 0x1109, 0x116B, 0x11B5, + 0x1109, 0x116B, 0x11B6, 0x1109, 0x116B, 0x11B7, 0x1109, 0x116B, + 0x11B8, 0x1109, 0x116B, 0x11B9, 0x1109, 0x116B, 0x11BA, 0x1109, + 0x116B, 0x11BB, 0x1109, 0x116B, 0x11BC, 0x1109, 0x116B, 0x11BD, + 0x1109, 0x116B, 0x11BE, 0x1109, 0x116B, 0x11BF, 0x1109, 0x116B, + 0x11C0, 0x1109, 0x116B, 0x11C1, 0x1109, 0x116B, 0x11C2, 0x1109, + 0x116C, 0x1109, 0x116C, 0x11A8, 0x1109, 0x116C, 0x11A9, 0x1109, + 0x116C, 0x11AA, 0x1109, 0x116C, 0x11AB, 0x1109, 0x116C, 0x11AC, + 0x1109, 0x116C, 0x11AD, 0x1109, 0x116C, 0x11AE, 0x1109, 0x116C, + 0x11AF, 0x1109, 0x116C, 0x11B0, 0x1109, 0x116C, 0x11B1, 0x1109, + 0x116C, 0x11B2, 0x1109, 0x116C, 0x11B3, 0x1109, 0x116C, 0x11B4, + 0x1109, 0x116C, 0x11B5, 0x1109, 0x116C, 0x11B6, 0x1109, 0x116C, + 0x11B7, 0x1109, 0x116C, 0x11B8, 0x1109, 0x116C, 0x11B9, 0x1109, + 0x116C, 0x11BA, 0x1109, 0x116C, 0x11BB, 0x1109, 0x116C, 0x11BC, + 0x1109, 0x116C, 0x11BD, 0x1109, 0x116C, 0x11BE, 0x1109, 0x116C, + 0x11BF, 0x1109, 0x116C, 0x11C0, 0x1109, 0x116C, 0x11C1, 0x1109, + 0x116C, 0x11C2, 0x1109, 0x116D, 0x1109, 0x116D, 0x11A8, 0x1109, + 0x116D, 0x11A9, 0x1109, 0x116D, 0x11AA, 0x1109, 0x116D, 0x11AB, + 0x1109, 0x116D, 0x11AC, 0x1109, 0x116D, 0x11AD, 0x1109, 0x116D, + 0x11AE, 0x1109, 0x116D, 0x11AF, 0x1109, 0x116D, 0x11B0, 0x1109, + 0x116D, 0x11B1, 0x1109, 0x116D, 0x11B2, 0x1109, 0x116D, 0x11B3, + 0x1109, 0x116D, 0x11B4, 0x1109, 0x116D, 0x11B5, 0x1109, 0x116D, + 0x11B6, 0x1109, 0x116D, 0x11B7, 0x1109, 0x116D, 0x11B8, 0x1109, + 0x116D, 0x11B9, 0x1109, 0x116D, 0x11BA, 0x1109, 0x116D, 0x11BB, + 0x1109, 0x116D, 0x11BC, 0x1109, 0x116D, 0x11BD, 0x1109, 0x116D, + 0x11BE, 0x1109, 0x116D, 0x11BF, 0x1109, 0x116D, 0x11C0, 0x1109, + 0x116D, 0x11C1, 0x1109, 0x116D, 0x11C2, 0x1109, 0x116E, 0x1109, + 0x116E, 0x11A8, 0x1109, 0x116E, 0x11A9, 0x1109, 0x116E, 0x11AA, + 0x1109, 0x116E, 0x11AB, 0x1109, 0x116E, 0x11AC, 0x1109, 0x116E, + 0x11AD, 0x1109, 0x116E, 0x11AE, 0x1109, 0x116E, 0x11AF, 0x1109, + 0x116E, 0x11B0, 0x1109, 0x116E, 0x11B1, 0x1109, 0x116E, 0x11B2, + 0x1109, 0x116E, 0x11B3, 0x1109, 0x116E, 0x11B4, 0x1109, 0x116E, + 0x11B5, 0x1109, 0x116E, 0x11B6, 0x1109, 0x116E, 0x11B7, 0x1109, + 0x116E, 0x11B8, 0x1109, 0x116E, 0x11B9, 0x1109, 0x116E, 0x11BA, + 0x1109, 0x116E, 0x11BB, 0x1109, 0x116E, 0x11BC, 0x1109, 0x116E, + 0x11BD, 0x1109, 0x116E, 0x11BE, 0x1109, 0x116E, 0x11BF, 0x1109, + 0x116E, 0x11C0, 0x1109, 0x116E, 0x11C1, 0x1109, 0x116E, 0x11C2, + 0x1109, 0x116F, 0x1109, 0x116F, 0x11A8, 0x1109, 0x116F, 0x11A9, + 0x1109, 0x116F, 0x11AA, 0x1109, 0x116F, 0x11AB, 0x1109, 0x116F, + 0x11AC, 0x1109, 0x116F, 0x11AD, 0x1109, 0x116F, 0x11AE, 0x1109, + 0x116F, 0x11AF, 0x1109, 0x116F, 0x11B0, 0x1109, 0x116F, 0x11B1, + 0x1109, 0x116F, 0x11B2, 0x1109, 0x116F, 0x11B3, 0x1109, 0x116F, + 0x11B4, 0x1109, 0x116F, 0x11B5, 0x1109, 0x116F, 0x11B6, 0x1109, + 0x116F, 0x11B7, 0x1109, 0x116F, 0x11B8, 0x1109, 0x116F, 0x11B9, + 0x1109, 0x116F, 0x11BA, 0x1109, 0x116F, 0x11BB, 0x1109, 0x116F, + 0x11BC, 0x1109, 0x116F, 0x11BD, 0x1109, 0x116F, 0x11BE, 0x1109, + 0x116F, 0x11BF, 0x1109, 0x116F, 0x11C0, 0x1109, 0x116F, 0x11C1, + 0x1109, 0x116F, 0x11C2, 0x1109, 0x1170, 0x1109, 0x1170, 0x11A8, + 0x1109, 0x1170, 0x11A9, 0x1109, 0x1170, 0x11AA, 0x1109, 0x1170, + 0x11AB, 0x1109, 0x1170, 0x11AC, 0x1109, 0x1170, 0x11AD, 0x1109, + 0x1170, 0x11AE, 0x1109, 0x1170, 0x11AF, 0x1109, 0x1170, 0x11B0, + 0x1109, 0x1170, 0x11B1, 0x1109, 0x1170, 0x11B2, 0x1109, 0x1170, + 0x11B3, 0x1109, 0x1170, 0x11B4, 0x1109, 0x1170, 0x11B5, 0x1109, + 0x1170, 0x11B6, 0x1109, 0x1170, 0x11B7, 0x1109, 0x1170, 0x11B8, + 0x1109, 0x1170, 0x11B9, 0x1109, 0x1170, 0x11BA, 0x1109, 0x1170, + 0x11BB, 0x1109, 0x1170, 0x11BC, 0x1109, 0x1170, 0x11BD, 0x1109, + 0x1170, 0x11BE, 0x1109, 0x1170, 0x11BF, 0x1109, 0x1170, 0x11C0, + 0x1109, 0x1170, 0x11C1, 0x1109, 0x1170, 0x11C2, 0x1109, 0x1171, + 0x1109, 0x1171, 0x11A8, 0x1109, 0x1171, 0x11A9, 0x1109, 0x1171, + 0x11AA, 0x1109, 0x1171, 0x11AB, 0x1109, 0x1171, 0x11AC, 0x1109, + 0x1171, 0x11AD, 0x1109, 0x1171, 0x11AE, 0x1109, 0x1171, 0x11AF, + 0x1109, 0x1171, 0x11B0, 0x1109, 0x1171, 0x11B1, 0x1109, 0x1171, + 0x11B2, 0x1109, 0x1171, 0x11B3, 0x1109, 0x1171, 0x11B4, 0x1109, + 0x1171, 0x11B5, 0x1109, 0x1171, 0x11B6, 0x1109, 0x1171, 0x11B7, + 0x1109, 0x1171, 0x11B8, 0x1109, 0x1171, 0x11B9, 0x1109, 0x1171, + 0x11BA, 0x1109, 0x1171, 0x11BB, 0x1109, 0x1171, 0x11BC, 0x1109, + 0x1171, 0x11BD, 0x1109, 0x1171, 0x11BE, 0x1109, 0x1171, 0x11BF, + 0x1109, 0x1171, 0x11C0, 0x1109, 0x1171, 0x11C1, 0x1109, 0x1171, + 0x11C2, 0x1109, 0x1172, 0x1109, 0x1172, 0x11A8, 0x1109, 0x1172, + 0x11A9, 0x1109, 0x1172, 0x11AA, 0x1109, 0x1172, 0x11AB, 0x1109, + 0x1172, 0x11AC, 0x1109, 0x1172, 0x11AD, 0x1109, 0x1172, 0x11AE, + 0x1109, 0x1172, 0x11AF, 0x1109, 0x1172, 0x11B0, 0x1109, 0x1172, + 0x11B1, 0x1109, 0x1172, 0x11B2, 0x1109, 0x1172, 0x11B3, 0x1109, + 0x1172, 0x11B4, 0x1109, 0x1172, 0x11B5, 0x1109, 0x1172, 0x11B6, + 0x1109, 0x1172, 0x11B7, 0x1109, 0x1172, 0x11B8, 0x1109, 0x1172, + 0x11B9, 0x1109, 0x1172, 0x11BA, 0x1109, 0x1172, 0x11BB, 0x1109, + 0x1172, 0x11BC, 0x1109, 0x1172, 0x11BD, 0x1109, 0x1172, 0x11BE, + 0x1109, 0x1172, 0x11BF, 0x1109, 0x1172, 0x11C0, 0x1109, 0x1172, + 0x11C1, 0x1109, 0x1172, 0x11C2, 0x1109, 0x1173, 0x1109, 0x1173, + 0x11A8, 0x1109, 0x1173, 0x11A9, 0x1109, 0x1173, 0x11AA, 0x1109, + 0x1173, 0x11AB, 0x1109, 0x1173, 0x11AC, 0x1109, 0x1173, 0x11AD, + 0x1109, 0x1173, 0x11AE, 0x1109, 0x1173, 0x11AF, 0x1109, 0x1173, + 0x11B0, 0x1109, 0x1173, 0x11B1, 0x1109, 0x1173, 0x11B2, 0x1109, + 0x1173, 0x11B3, 0x1109, 0x1173, 0x11B4, 0x1109, 0x1173, 0x11B5, + 0x1109, 0x1173, 0x11B6, 0x1109, 0x1173, 0x11B7, 0x1109, 0x1173, + 0x11B8, 0x1109, 0x1173, 0x11B9, 0x1109, 0x1173, 0x11BA, 0x1109, + 0x1173, 0x11BB, 0x1109, 0x1173, 0x11BC, 0x1109, 0x1173, 0x11BD, + 0x1109, 0x1173, 0x11BE, 0x1109, 0x1173, 0x11BF, 0x1109, 0x1173, + 0x11C0, 0x1109, 0x1173, 0x11C1, 0x1109, 0x1173, 0x11C2, 0x1109, + 0x1174, 0x1109, 0x1174, 0x11A8, 0x1109, 0x1174, 0x11A9, 0x1109, + 0x1174, 0x11AA, 0x1109, 0x1174, 0x11AB, 0x1109, 0x1174, 0x11AC, + 0x1109, 0x1174, 0x11AD, 0x1109, 0x1174, 0x11AE, 0x1109, 0x1174, + 0x11AF, 0x1109, 0x1174, 0x11B0, 0x1109, 0x1174, 0x11B1, 0x1109, + 0x1174, 0x11B2, 0x1109, 0x1174, 0x11B3, 0x1109, 0x1174, 0x11B4, + 0x1109, 0x1174, 0x11B5, 0x1109, 0x1174, 0x11B6, 0x1109, 0x1174, + 0x11B7, 0x1109, 0x1174, 0x11B8, 0x1109, 0x1174, 0x11B9, 0x1109, + 0x1174, 0x11BA, 0x1109, 0x1174, 0x11BB, 0x1109, 0x1174, 0x11BC, + 0x1109, 0x1174, 0x11BD, 0x1109, 0x1174, 0x11BE, 0x1109, 0x1174, + 0x11BF, 0x1109, 0x1174, 0x11C0, 0x1109, 0x1174, 0x11C1, 0x1109, + 0x1174, 0x11C2, 0x1109, 0x1175, 0x1109, 0x1175, 0x11A8, 0x1109, + 0x1175, 0x11A9, 0x1109, 0x1175, 0x11AA, 0x1109, 0x1175, 0x11AB, + 0x1109, 0x1175, 0x11AC, 0x1109, 0x1175, 0x11AD, 0x1109, 0x1175, + 0x11AE, 0x1109, 0x1175, 0x11AF, 0x1109, 0x1175, 0x11B0, 0x1109, + 0x1175, 0x11B1, 0x1109, 0x1175, 0x11B2, 0x1109, 0x1175, 0x11B3, + 0x1109, 0x1175, 0x11B4, 0x1109, 0x1175, 0x11B5, 0x1109, 0x1175, + 0x11B6, 0x1109, 0x1175, 0x11B7, 0x1109, 0x1175, 0x11B8, 0x1109, + 0x1175, 0x11B9, 0x1109, 0x1175, 0x11BA, 0x1109, 0x1175, 0x11BB, + 0x1109, 0x1175, 0x11BC, 0x1109, 0x1175, 0x11BD, 0x1109, 0x1175, + 0x11BE, 0x1109, 0x1175, 0x11BF, 0x1109, 0x1175, 0x11C0, 0x1109, + 0x1175, 0x11C1, 0x1109, 0x1175, 0x11C2, 0x110A, 0x1161, 0x110A, + 0x1161, 0x11A8, 0x110A, 0x1161, 0x11A9, 0x110A, 0x1161, 0x11AA, + 0x110A, 0x1161, 0x11AB, 0x110A, 0x1161, 0x11AC, 0x110A, 0x1161, + 0x11AD, 0x110A, 0x1161, 0x11AE, 0x110A, 0x1161, 0x11AF, 0x110A, + 0x1161, 0x11B0, 0x110A, 0x1161, 0x11B1, 0x110A, 0x1161, 0x11B2, + 0x110A, 0x1161, 0x11B3, 0x110A, 0x1161, 0x11B4, 0x110A, 0x1161, + 0x11B5, 0x110A, 0x1161, 0x11B6, 0x110A, 0x1161, 0x11B7, 0x110A, + 0x1161, 0x11B8, 0x110A, 0x1161, 0x11B9, 0x110A, 0x1161, 0x11BA, + 0x110A, 0x1161, 0x11BB, 0x110A, 0x1161, 0x11BC, 0x110A, 0x1161, + 0x11BD, 0x110A, 0x1161, 0x11BE, 0x110A, 0x1161, 0x11BF, 0x110A, + 0x1161, 0x11C0, 0x110A, 0x1161, 0x11C1, 0x110A, 0x1161, 0x11C2, + 0x110A, 0x1162, 0x110A, 0x1162, 0x11A8, 0x110A, 0x1162, 0x11A9, + 0x110A, 0x1162, 0x11AA, 0x110A, 0x1162, 0x11AB, 0x110A, 0x1162, + 0x11AC, 0x110A, 0x1162, 0x11AD, 0x110A, 0x1162, 0x11AE, 0x110A, + 0x1162, 0x11AF, 0x110A, 0x1162, 0x11B0, 0x110A, 0x1162, 0x11B1, + 0x110A, 0x1162, 0x11B2, 0x110A, 0x1162, 0x11B3, 0x110A, 0x1162, + 0x11B4, 0x110A, 0x1162, 0x11B5, 0x110A, 0x1162, 0x11B6, 0x110A, + 0x1162, 0x11B7, 0x110A, 0x1162, 0x11B8, 0x110A, 0x1162, 0x11B9, + 0x110A, 0x1162, 0x11BA, 0x110A, 0x1162, 0x11BB, 0x110A, 0x1162, + 0x11BC, 0x110A, 0x1162, 0x11BD, 0x110A, 0x1162, 0x11BE, 0x110A, + 0x1162, 0x11BF, 0x110A, 0x1162, 0x11C0, 0x110A, 0x1162, 0x11C1, + 0x110A, 0x1162, 0x11C2, 0x110A, 0x1163, 0x110A, 0x1163, 0x11A8, + 0x110A, 0x1163, 0x11A9, 0x110A, 0x1163, 0x11AA, 0x110A, 0x1163, + 0x11AB, 0x110A, 0x1163, 0x11AC, 0x110A, 0x1163, 0x11AD, 0x110A, + 0x1163, 0x11AE, 0x110A, 0x1163, 0x11AF, 0x110A, 0x1163, 0x11B0, + 0x110A, 0x1163, 0x11B1, 0x110A, 0x1163, 0x11B2, 0x110A, 0x1163, + 0x11B3, 0x110A, 0x1163, 0x11B4, 0x110A, 0x1163, 0x11B5, 0x110A, + 0x1163, 0x11B6, 0x110A, 0x1163, 0x11B7, 0x110A, 0x1163, 0x11B8, + 0x110A, 0x1163, 0x11B9, 0x110A, 0x1163, 0x11BA, 0x110A, 0x1163, + 0x11BB, 0x110A, 0x1163, 0x11BC, 0x110A, 0x1163, 0x11BD, 0x110A, + 0x1163, 0x11BE, 0x110A, 0x1163, 0x11BF, 0x110A, 0x1163, 0x11C0, + 0x110A, 0x1163, 0x11C1, 0x110A, 0x1163, 0x11C2, 0x110A, 0x1164, + 0x110A, 0x1164, 0x11A8, 0x110A, 0x1164, 0x11A9, 0x110A, 0x1164, + 0x11AA, 0x110A, 0x1164, 0x11AB, 0x110A, 0x1164, 0x11AC, 0x110A, + 0x1164, 0x11AD, 0x110A, 0x1164, 0x11AE, 0x110A, 0x1164, 0x11AF, + 0x110A, 0x1164, 0x11B0, 0x110A, 0x1164, 0x11B1, 0x110A, 0x1164, + 0x11B2, 0x110A, 0x1164, 0x11B3, 0x110A, 0x1164, 0x11B4, 0x110A, + 0x1164, 0x11B5, 0x110A, 0x1164, 0x11B6, 0x110A, 0x1164, 0x11B7, + 0x110A, 0x1164, 0x11B8, 0x110A, 0x1164, 0x11B9, 0x110A, 0x1164, + 0x11BA, 0x110A, 0x1164, 0x11BB, 0x110A, 0x1164, 0x11BC, 0x110A, + 0x1164, 0x11BD, 0x110A, 0x1164, 0x11BE, 0x110A, 0x1164, 0x11BF, + 0x110A, 0x1164, 0x11C0, 0x110A, 0x1164, 0x11C1, 0x110A, 0x1164, + 0x11C2, 0x110A, 0x1165, 0x110A, 0x1165, 0x11A8, 0x110A, 0x1165, + 0x11A9, 0x110A, 0x1165, 0x11AA, 0x110A, 0x1165, 0x11AB, 0x110A, + 0x1165, 0x11AC, 0x110A, 0x1165, 0x11AD, 0x110A, 0x1165, 0x11AE, + 0x110A, 0x1165, 0x11AF, 0x110A, 0x1165, 0x11B0, 0x110A, 0x1165, + 0x11B1, 0x110A, 0x1165, 0x11B2, 0x110A, 0x1165, 0x11B3, 0x110A, + 0x1165, 0x11B4, 0x110A, 0x1165, 0x11B5, 0x110A, 0x1165, 0x11B6, + 0x110A, 0x1165, 0x11B7, 0x110A, 0x1165, 0x11B8, 0x110A, 0x1165, + 0x11B9, 0x110A, 0x1165, 0x11BA, 0x110A, 0x1165, 0x11BB, 0x110A, + 0x1165, 0x11BC, 0x110A, 0x1165, 0x11BD, 0x110A, 0x1165, 0x11BE, + 0x110A, 0x1165, 0x11BF, 0x110A, 0x1165, 0x11C0, 0x110A, 0x1165, + 0x11C1, 0x110A, 0x1165, 0x11C2, 0x110A, 0x1166, 0x110A, 0x1166, + 0x11A8, 0x110A, 0x1166, 0x11A9, 0x110A, 0x1166, 0x11AA, 0x110A, + 0x1166, 0x11AB, 0x110A, 0x1166, 0x11AC, 0x110A, 0x1166, 0x11AD, + 0x110A, 0x1166, 0x11AE, 0x110A, 0x1166, 0x11AF, 0x110A, 0x1166, + 0x11B0, 0x110A, 0x1166, 0x11B1, 0x110A, 0x1166, 0x11B2, 0x110A, + 0x1166, 0x11B3, 0x110A, 0x1166, 0x11B4, 0x110A, 0x1166, 0x11B5, + 0x110A, 0x1166, 0x11B6, 0x110A, 0x1166, 0x11B7, 0x110A, 0x1166, + 0x11B8, 0x110A, 0x1166, 0x11B9, 0x110A, 0x1166, 0x11BA, 0x110A, + 0x1166, 0x11BB, 0x110A, 0x1166, 0x11BC, 0x110A, 0x1166, 0x11BD, + 0x110A, 0x1166, 0x11BE, 0x110A, 0x1166, 0x11BF, 0x110A, 0x1166, + 0x11C0, 0x110A, 0x1166, 0x11C1, 0x110A, 0x1166, 0x11C2, 0x110A, + 0x1167, 0x110A, 0x1167, 0x11A8, 0x110A, 0x1167, 0x11A9, 0x110A, + 0x1167, 0x11AA, 0x110A, 0x1167, 0x11AB, 0x110A, 0x1167, 0x11AC, + 0x110A, 0x1167, 0x11AD, 0x110A, 0x1167, 0x11AE, 0x110A, 0x1167, + 0x11AF, 0x110A, 0x1167, 0x11B0, 0x110A, 0x1167, 0x11B1, 0x110A, + 0x1167, 0x11B2, 0x110A, 0x1167, 0x11B3, 0x110A, 0x1167, 0x11B4, + 0x110A, 0x1167, 0x11B5, 0x110A, 0x1167, 0x11B6, 0x110A, 0x1167, + 0x11B7, 0x110A, 0x1167, 0x11B8, 0x110A, 0x1167, 0x11B9, 0x110A, + 0x1167, 0x11BA, 0x110A, 0x1167, 0x11BB, 0x110A, 0x1167, 0x11BC, + 0x110A, 0x1167, 0x11BD, 0x110A, 0x1167, 0x11BE, 0x110A, 0x1167, + 0x11BF, 0x110A, 0x1167, 0x11C0, 0x110A, 0x1167, 0x11C1, 0x110A, + 0x1167, 0x11C2, 0x110A, 0x1168, 0x110A, 0x1168, 0x11A8, 0x110A, + 0x1168, 0x11A9, 0x110A, 0x1168, 0x11AA, 0x110A, 0x1168, 0x11AB, + 0x110A, 0x1168, 0x11AC, 0x110A, 0x1168, 0x11AD, 0x110A, 0x1168, + 0x11AE, 0x110A, 0x1168, 0x11AF, 0x110A, 0x1168, 0x11B0, 0x110A, + 0x1168, 0x11B1, 0x110A, 0x1168, 0x11B2, 0x110A, 0x1168, 0x11B3, + 0x110A, 0x1168, 0x11B4, 0x110A, 0x1168, 0x11B5, 0x110A, 0x1168, + 0x11B6, 0x110A, 0x1168, 0x11B7, 0x110A, 0x1168, 0x11B8, 0x110A, + 0x1168, 0x11B9, 0x110A, 0x1168, 0x11BA, 0x110A, 0x1168, 0x11BB, + 0x110A, 0x1168, 0x11BC, 0x110A, 0x1168, 0x11BD, 0x110A, 0x1168, + 0x11BE, 0x110A, 0x1168, 0x11BF, 0x110A, 0x1168, 0x11C0, 0x110A, + 0x1168, 0x11C1, 0x110A, 0x1168, 0x11C2, 0x110A, 0x1169, 0x110A, + 0x1169, 0x11A8, 0x110A, 0x1169, 0x11A9, 0x110A, 0x1169, 0x11AA, + 0x110A, 0x1169, 0x11AB, 0x110A, 0x1169, 0x11AC, 0x110A, 0x1169, + 0x11AD, 0x110A, 0x1169, 0x11AE, 0x110A, 0x1169, 0x11AF, 0x110A, + 0x1169, 0x11B0, 0x110A, 0x1169, 0x11B1, 0x110A, 0x1169, 0x11B2, + 0x110A, 0x1169, 0x11B3, 0x110A, 0x1169, 0x11B4, 0x110A, 0x1169, + 0x11B5, 0x110A, 0x1169, 0x11B6, 0x110A, 0x1169, 0x11B7, 0x110A, + 0x1169, 0x11B8, 0x110A, 0x1169, 0x11B9, 0x110A, 0x1169, 0x11BA, + 0x110A, 0x1169, 0x11BB, 0x110A, 0x1169, 0x11BC, 0x110A, 0x1169, + 0x11BD, 0x110A, 0x1169, 0x11BE, 0x110A, 0x1169, 0x11BF, 0x110A, + 0x1169, 0x11C0, 0x110A, 0x1169, 0x11C1, 0x110A, 0x1169, 0x11C2, + 0x110A, 0x116A, 0x110A, 0x116A, 0x11A8, 0x110A, 0x116A, 0x11A9, + 0x110A, 0x116A, 0x11AA, 0x110A, 0x116A, 0x11AB, 0x110A, 0x116A, + 0x11AC, 0x110A, 0x116A, 0x11AD, 0x110A, 0x116A, 0x11AE, 0x110A, + 0x116A, 0x11AF, 0x110A, 0x116A, 0x11B0, 0x110A, 0x116A, 0x11B1, + 0x110A, 0x116A, 0x11B2, 0x110A, 0x116A, 0x11B3, 0x110A, 0x116A, + 0x11B4, 0x110A, 0x116A, 0x11B5, 0x110A, 0x116A, 0x11B6, 0x110A, + 0x116A, 0x11B7, 0x110A, 0x116A, 0x11B8, 0x110A, 0x116A, 0x11B9, + 0x110A, 0x116A, 0x11BA, 0x110A, 0x116A, 0x11BB, 0x110A, 0x116A, + 0x11BC, 0x110A, 0x116A, 0x11BD, 0x110A, 0x116A, 0x11BE, 0x110A, + 0x116A, 0x11BF, 0x110A, 0x116A, 0x11C0, 0x110A, 0x116A, 0x11C1, + 0x110A, 0x116A, 0x11C2, 0x110A, 0x116B, 0x110A, 0x116B, 0x11A8, + 0x110A, 0x116B, 0x11A9, 0x110A, 0x116B, 0x11AA, 0x110A, 0x116B, + 0x11AB, 0x110A, 0x116B, 0x11AC, 0x110A, 0x116B, 0x11AD, 0x110A, + 0x116B, 0x11AE, 0x110A, 0x116B, 0x11AF, 0x110A, 0x116B, 0x11B0, + 0x110A, 0x116B, 0x11B1, 0x110A, 0x116B, 0x11B2, 0x110A, 0x116B, + 0x11B3, 0x110A, 0x116B, 0x11B4, 0x110A, 0x116B, 0x11B5, 0x110A, + 0x116B, 0x11B6, 0x110A, 0x116B, 0x11B7, 0x110A, 0x116B, 0x11B8, + 0x110A, 0x116B, 0x11B9, 0x110A, 0x116B, 0x11BA, 0x110A, 0x116B, + 0x11BB, 0x110A, 0x116B, 0x11BC, 0x110A, 0x116B, 0x11BD, 0x110A, + 0x116B, 0x11BE, 0x110A, 0x116B, 0x11BF, 0x110A, 0x116B, 0x11C0, + 0x110A, 0x116B, 0x11C1, 0x110A, 0x116B, 0x11C2, 0x110A, 0x116C, + 0x110A, 0x116C, 0x11A8, 0x110A, 0x116C, 0x11A9, 0x110A, 0x116C, + 0x11AA, 0x110A, 0x116C, 0x11AB, 0x110A, 0x116C, 0x11AC, 0x110A, + 0x116C, 0x11AD, 0x110A, 0x116C, 0x11AE, 0x110A, 0x116C, 0x11AF, + 0x110A, 0x116C, 0x11B0, 0x110A, 0x116C, 0x11B1, 0x110A, 0x116C, + 0x11B2, 0x110A, 0x116C, 0x11B3, 0x110A, 0x116C, 0x11B4, 0x110A, + 0x116C, 0x11B5, 0x110A, 0x116C, 0x11B6, 0x110A, 0x116C, 0x11B7, + 0x110A, 0x116C, 0x11B8, 0x110A, 0x116C, 0x11B9, 0x110A, 0x116C, + 0x11BA, 0x110A, 0x116C, 0x11BB, 0x110A, 0x116C, 0x11BC, 0x110A, + 0x116C, 0x11BD, 0x110A, 0x116C, 0x11BE, 0x110A, 0x116C, 0x11BF, + 0x110A, 0x116C, 0x11C0, 0x110A, 0x116C, 0x11C1, 0x110A, 0x116C, + 0x11C2, 0x110A, 0x116D, 0x110A, 0x116D, 0x11A8, 0x110A, 0x116D, + 0x11A9, 0x110A, 0x116D, 0x11AA, 0x110A, 0x116D, 0x11AB, 0x110A, + 0x116D, 0x11AC, 0x110A, 0x116D, 0x11AD, 0x110A, 0x116D, 0x11AE, + 0x110A, 0x116D, 0x11AF, 0x110A, 0x116D, 0x11B0, 0x110A, 0x116D, + 0x11B1, 0x110A, 0x116D, 0x11B2, 0x110A, 0x116D, 0x11B3, 0x110A, + 0x116D, 0x11B4, 0x110A, 0x116D, 0x11B5, 0x110A, 0x116D, 0x11B6, + 0x110A, 0x116D, 0x11B7, 0x110A, 0x116D, 0x11B8, 0x110A, 0x116D, + 0x11B9, 0x110A, 0x116D, 0x11BA, 0x110A, 0x116D, 0x11BB, 0x110A, + 0x116D, 0x11BC, 0x110A, 0x116D, 0x11BD, 0x110A, 0x116D, 0x11BE, + 0x110A, 0x116D, 0x11BF, 0x110A, 0x116D, 0x11C0, 0x110A, 0x116D, + 0x11C1, 0x110A, 0x116D, 0x11C2, 0x110A, 0x116E, 0x110A, 0x116E, + 0x11A8, 0x110A, 0x116E, 0x11A9, 0x110A, 0x116E, 0x11AA, 0x110A, + 0x116E, 0x11AB, 0x110A, 0x116E, 0x11AC, 0x110A, 0x116E, 0x11AD, + 0x110A, 0x116E, 0x11AE, 0x110A, 0x116E, 0x11AF, 0x110A, 0x116E, + 0x11B0, 0x110A, 0x116E, 0x11B1, 0x110A, 0x116E, 0x11B2, 0x110A, + 0x116E, 0x11B3, 0x110A, 0x116E, 0x11B4, 0x110A, 0x116E, 0x11B5, + 0x110A, 0x116E, 0x11B6, 0x110A, 0x116E, 0x11B7, 0x110A, 0x116E, + 0x11B8, 0x110A, 0x116E, 0x11B9, 0x110A, 0x116E, 0x11BA, 0x110A, + 0x116E, 0x11BB, 0x110A, 0x116E, 0x11BC, 0x110A, 0x116E, 0x11BD, + 0x110A, 0x116E, 0x11BE, 0x110A, 0x116E, 0x11BF, 0x110A, 0x116E, + 0x11C0, 0x110A, 0x116E, 0x11C1, 0x110A, 0x116E, 0x11C2, 0x110A, + 0x116F, 0x110A, 0x116F, 0x11A8, 0x110A, 0x116F, 0x11A9, 0x110A, + 0x116F, 0x11AA, 0x110A, 0x116F, 0x11AB, 0x110A, 0x116F, 0x11AC, + 0x110A, 0x116F, 0x11AD, 0x110A, 0x116F, 0x11AE, 0x110A, 0x116F, + 0x11AF, 0x110A, 0x116F, 0x11B0, 0x110A, 0x116F, 0x11B1, 0x110A, + 0x116F, 0x11B2, 0x110A, 0x116F, 0x11B3, 0x110A, 0x116F, 0x11B4, + 0x110A, 0x116F, 0x11B5, 0x110A, 0x116F, 0x11B6, 0x110A, 0x116F, + 0x11B7, 0x110A, 0x116F, 0x11B8, 0x110A, 0x116F, 0x11B9, 0x110A, + 0x116F, 0x11BA, 0x110A, 0x116F, 0x11BB, 0x110A, 0x116F, 0x11BC, + 0x110A, 0x116F, 0x11BD, 0x110A, 0x116F, 0x11BE, 0x110A, 0x116F, + 0x11BF, 0x110A, 0x116F, 0x11C0, 0x110A, 0x116F, 0x11C1, 0x110A, + 0x116F, 0x11C2, 0x110A, 0x1170, 0x110A, 0x1170, 0x11A8, 0x110A, + 0x1170, 0x11A9, 0x110A, 0x1170, 0x11AA, 0x110A, 0x1170, 0x11AB, + 0x110A, 0x1170, 0x11AC, 0x110A, 0x1170, 0x11AD, 0x110A, 0x1170, + 0x11AE, 0x110A, 0x1170, 0x11AF, 0x110A, 0x1170, 0x11B0, 0x110A, + 0x1170, 0x11B1, 0x110A, 0x1170, 0x11B2, 0x110A, 0x1170, 0x11B3, + 0x110A, 0x1170, 0x11B4, 0x110A, 0x1170, 0x11B5, 0x110A, 0x1170, + 0x11B6, 0x110A, 0x1170, 0x11B7, 0x110A, 0x1170, 0x11B8, 0x110A, + 0x1170, 0x11B9, 0x110A, 0x1170, 0x11BA, 0x110A, 0x1170, 0x11BB, + 0x110A, 0x1170, 0x11BC, 0x110A, 0x1170, 0x11BD, 0x110A, 0x1170, + 0x11BE, 0x110A, 0x1170, 0x11BF, 0x110A, 0x1170, 0x11C0, 0x110A, + 0x1170, 0x11C1, 0x110A, 0x1170, 0x11C2, 0x110A, 0x1171, 0x110A, + 0x1171, 0x11A8, 0x110A, 0x1171, 0x11A9, 0x110A, 0x1171, 0x11AA, + 0x110A, 0x1171, 0x11AB, 0x110A, 0x1171, 0x11AC, 0x110A, 0x1171, + 0x11AD, 0x110A, 0x1171, 0x11AE, 0x110A, 0x1171, 0x11AF, 0x110A, + 0x1171, 0x11B0, 0x110A, 0x1171, 0x11B1, 0x110A, 0x1171, 0x11B2, + 0x110A, 0x1171, 0x11B3, 0x110A, 0x1171, 0x11B4, 0x110A, 0x1171, + 0x11B5, 0x110A, 0x1171, 0x11B6, 0x110A, 0x1171, 0x11B7, 0x110A, + 0x1171, 0x11B8, 0x110A, 0x1171, 0x11B9, 0x110A, 0x1171, 0x11BA, + 0x110A, 0x1171, 0x11BB, 0x110A, 0x1171, 0x11BC, 0x110A, 0x1171, + 0x11BD, 0x110A, 0x1171, 0x11BE, 0x110A, 0x1171, 0x11BF, 0x110A, + 0x1171, 0x11C0, 0x110A, 0x1171, 0x11C1, 0x110A, 0x1171, 0x11C2, + 0x110A, 0x1172, 0x110A, 0x1172, 0x11A8, 0x110A, 0x1172, 0x11A9, + 0x110A, 0x1172, 0x11AA, 0x110A, 0x1172, 0x11AB, 0x110A, 0x1172, + 0x11AC, 0x110A, 0x1172, 0x11AD, 0x110A, 0x1172, 0x11AE, 0x110A, + 0x1172, 0x11AF, 0x110A, 0x1172, 0x11B0, 0x110A, 0x1172, 0x11B1, + 0x110A, 0x1172, 0x11B2, 0x110A, 0x1172, 0x11B3, 0x110A, 0x1172, + 0x11B4, 0x110A, 0x1172, 0x11B5, 0x110A, 0x1172, 0x11B6, 0x110A, + 0x1172, 0x11B7, 0x110A, 0x1172, 0x11B8, 0x110A, 0x1172, 0x11B9, + 0x110A, 0x1172, 0x11BA, 0x110A, 0x1172, 0x11BB, 0x110A, 0x1172, + 0x11BC, 0x110A, 0x1172, 0x11BD, 0x110A, 0x1172, 0x11BE, 0x110A, + 0x1172, 0x11BF, 0x110A, 0x1172, 0x11C0, 0x110A, 0x1172, 0x11C1, + 0x110A, 0x1172, 0x11C2, 0x110A, 0x1173, 0x110A, 0x1173, 0x11A8, + 0x110A, 0x1173, 0x11A9, 0x110A, 0x1173, 0x11AA, 0x110A, 0x1173, + 0x11AB, 0x110A, 0x1173, 0x11AC, 0x110A, 0x1173, 0x11AD, 0x110A, + 0x1173, 0x11AE, 0x110A, 0x1173, 0x11AF, 0x110A, 0x1173, 0x11B0, + 0x110A, 0x1173, 0x11B1, 0x110A, 0x1173, 0x11B2, 0x110A, 0x1173, + 0x11B3, 0x110A, 0x1173, 0x11B4, 0x110A, 0x1173, 0x11B5, 0x110A, + 0x1173, 0x11B6, 0x110A, 0x1173, 0x11B7, 0x110A, 0x1173, 0x11B8, + 0x110A, 0x1173, 0x11B9, 0x110A, 0x1173, 0x11BA, 0x110A, 0x1173, + 0x11BB, 0x110A, 0x1173, 0x11BC, 0x110A, 0x1173, 0x11BD, 0x110A, + 0x1173, 0x11BE, 0x110A, 0x1173, 0x11BF, 0x110A, 0x1173, 0x11C0, + 0x110A, 0x1173, 0x11C1, 0x110A, 0x1173, 0x11C2, 0x110A, 0x1174, + 0x110A, 0x1174, 0x11A8, 0x110A, 0x1174, 0x11A9, 0x110A, 0x1174, + 0x11AA, 0x110A, 0x1174, 0x11AB, 0x110A, 0x1174, 0x11AC, 0x110A, + 0x1174, 0x11AD, 0x110A, 0x1174, 0x11AE, 0x110A, 0x1174, 0x11AF, + 0x110A, 0x1174, 0x11B0, 0x110A, 0x1174, 0x11B1, 0x110A, 0x1174, + 0x11B2, 0x110A, 0x1174, 0x11B3, 0x110A, 0x1174, 0x11B4, 0x110A, + 0x1174, 0x11B5, 0x110A, 0x1174, 0x11B6, 0x110A, 0x1174, 0x11B7, + 0x110A, 0x1174, 0x11B8, 0x110A, 0x1174, 0x11B9, 0x110A, 0x1174, + 0x11BA, 0x110A, 0x1174, 0x11BB, 0x110A, 0x1174, 0x11BC, 0x110A, + 0x1174, 0x11BD, 0x110A, 0x1174, 0x11BE, 0x110A, 0x1174, 0x11BF, + 0x110A, 0x1174, 0x11C0, 0x110A, 0x1174, 0x11C1, 0x110A, 0x1174, + 0x11C2, 0x110A, 0x1175, 0x110A, 0x1175, 0x11A8, 0x110A, 0x1175, + 0x11A9, 0x110A, 0x1175, 0x11AA, 0x110A, 0x1175, 0x11AB, 0x110A, + 0x1175, 0x11AC, 0x110A, 0x1175, 0x11AD, 0x110A, 0x1175, 0x11AE, + 0x110A, 0x1175, 0x11AF, 0x110A, 0x1175, 0x11B0, 0x110A, 0x1175, + 0x11B1, 0x110A, 0x1175, 0x11B2, 0x110A, 0x1175, 0x11B3, 0x110A, + 0x1175, 0x11B4, 0x110A, 0x1175, 0x11B5, 0x110A, 0x1175, 0x11B6, + 0x110A, 0x1175, 0x11B7, 0x110A, 0x1175, 0x11B8, 0x110A, 0x1175, + 0x11B9, 0x110A, 0x1175, 0x11BA, 0x110A, 0x1175, 0x11BB, 0x110A, + 0x1175, 0x11BC, 0x110A, 0x1175, 0x11BD, 0x110A, 0x1175, 0x11BE, + 0x110A, 0x1175, 0x11BF, 0x110A, 0x1175, 0x11C0, 0x110A, 0x1175, + 0x11C1, 0x110A, 0x1175, 0x11C2, 0x110B, 0x1161, 0x110B, 0x1161, + 0x11A8, 0x110B, 0x1161, 0x11A9, 0x110B, 0x1161, 0x11AA, 0x110B, + 0x1161, 0x11AB, 0x110B, 0x1161, 0x11AC, 0x110B, 0x1161, 0x11AD, + 0x110B, 0x1161, 0x11AE, 0x110B, 0x1161, 0x11AF, 0x110B, 0x1161, + 0x11B0, 0x110B, 0x1161, 0x11B1, 0x110B, 0x1161, 0x11B2, 0x110B, + 0x1161, 0x11B3, 0x110B, 0x1161, 0x11B4, 0x110B, 0x1161, 0x11B5, + 0x110B, 0x1161, 0x11B6, 0x110B, 0x1161, 0x11B7, 0x110B, 0x1161, + 0x11B8, 0x110B, 0x1161, 0x11B9, 0x110B, 0x1161, 0x11BA, 0x110B, + 0x1161, 0x11BB, 0x110B, 0x1161, 0x11BC, 0x110B, 0x1161, 0x11BD, + 0x110B, 0x1161, 0x11BE, 0x110B, 0x1161, 0x11BF, 0x110B, 0x1161, + 0x11C0, 0x110B, 0x1161, 0x11C1, 0x110B, 0x1161, 0x11C2, 0x110B, + 0x1162, 0x110B, 0x1162, 0x11A8, 0x110B, 0x1162, 0x11A9, 0x110B, + 0x1162, 0x11AA, 0x110B, 0x1162, 0x11AB, 0x110B, 0x1162, 0x11AC, + 0x110B, 0x1162, 0x11AD, 0x110B, 0x1162, 0x11AE, 0x110B, 0x1162, + 0x11AF, 0x110B, 0x1162, 0x11B0, 0x110B, 0x1162, 0x11B1, 0x110B, + 0x1162, 0x11B2, 0x110B, 0x1162, 0x11B3, 0x110B, 0x1162, 0x11B4, + 0x110B, 0x1162, 0x11B5, 0x110B, 0x1162, 0x11B6, 0x110B, 0x1162, + 0x11B7, 0x110B, 0x1162, 0x11B8, 0x110B, 0x1162, 0x11B9, 0x110B, + 0x1162, 0x11BA, 0x110B, 0x1162, 0x11BB, 0x110B, 0x1162, 0x11BC, + 0x110B, 0x1162, 0x11BD, 0x110B, 0x1162, 0x11BE, 0x110B, 0x1162, + 0x11BF, 0x110B, 0x1162, 0x11C0, 0x110B, 0x1162, 0x11C1, 0x110B, + 0x1162, 0x11C2, 0x110B, 0x1163, 0x110B, 0x1163, 0x11A8, 0x110B, + 0x1163, 0x11A9, 0x110B, 0x1163, 0x11AA, 0x110B, 0x1163, 0x11AB, + 0x110B, 0x1163, 0x11AC, 0x110B, 0x1163, 0x11AD, 0x110B, 0x1163, + 0x11AE, 0x110B, 0x1163, 0x11AF, 0x110B, 0x1163, 0x11B0, 0x110B, + 0x1163, 0x11B1, 0x110B, 0x1163, 0x11B2, 0x110B, 0x1163, 0x11B3, + 0x110B, 0x1163, 0x11B4, 0x110B, 0x1163, 0x11B5, 0x110B, 0x1163, + 0x11B6, 0x110B, 0x1163, 0x11B7, 0x110B, 0x1163, 0x11B8, 0x110B, + 0x1163, 0x11B9, 0x110B, 0x1163, 0x11BA, 0x110B, 0x1163, 0x11BB, + 0x110B, 0x1163, 0x11BC, 0x110B, 0x1163, 0x11BD, 0x110B, 0x1163, + 0x11BE, 0x110B, 0x1163, 0x11BF, 0x110B, 0x1163, 0x11C0, 0x110B, + 0x1163, 0x11C1, 0x110B, 0x1163, 0x11C2, 0x110B, 0x1164, 0x110B, + 0x1164, 0x11A8, 0x110B, 0x1164, 0x11A9, 0x110B, 0x1164, 0x11AA, + 0x110B, 0x1164, 0x11AB, 0x110B, 0x1164, 0x11AC, 0x110B, 0x1164, + 0x11AD, 0x110B, 0x1164, 0x11AE, 0x110B, 0x1164, 0x11AF, 0x110B, + 0x1164, 0x11B0, 0x110B, 0x1164, 0x11B1, 0x110B, 0x1164, 0x11B2, + 0x110B, 0x1164, 0x11B3, 0x110B, 0x1164, 0x11B4, 0x110B, 0x1164, + 0x11B5, 0x110B, 0x1164, 0x11B6, 0x110B, 0x1164, 0x11B7, 0x110B, + 0x1164, 0x11B8, 0x110B, 0x1164, 0x11B9, 0x110B, 0x1164, 0x11BA, + 0x110B, 0x1164, 0x11BB, 0x110B, 0x1164, 0x11BC, 0x110B, 0x1164, + 0x11BD, 0x110B, 0x1164, 0x11BE, 0x110B, 0x1164, 0x11BF, 0x110B, + 0x1164, 0x11C0, 0x110B, 0x1164, 0x11C1, 0x110B, 0x1164, 0x11C2, + 0x110B, 0x1165, 0x110B, 0x1165, 0x11A8, 0x110B, 0x1165, 0x11A9, + 0x110B, 0x1165, 0x11AA, 0x110B, 0x1165, 0x11AB, 0x110B, 0x1165, + 0x11AC, 0x110B, 0x1165, 0x11AD, 0x110B, 0x1165, 0x11AE, 0x110B, + 0x1165, 0x11AF, 0x110B, 0x1165, 0x11B0, 0x110B, 0x1165, 0x11B1, + 0x110B, 0x1165, 0x11B2, 0x110B, 0x1165, 0x11B3, 0x110B, 0x1165, + 0x11B4, 0x110B, 0x1165, 0x11B5, 0x110B, 0x1165, 0x11B6, 0x110B, + 0x1165, 0x11B7, 0x110B, 0x1165, 0x11B8, 0x110B, 0x1165, 0x11B9, + 0x110B, 0x1165, 0x11BA, 0x110B, 0x1165, 0x11BB, 0x110B, 0x1165, + 0x11BC, 0x110B, 0x1165, 0x11BD, 0x110B, 0x1165, 0x11BE, 0x110B, + 0x1165, 0x11BF, 0x110B, 0x1165, 0x11C0, 0x110B, 0x1165, 0x11C1, + 0x110B, 0x1165, 0x11C2, 0x110B, 0x1166, 0x110B, 0x1166, 0x11A8, + 0x110B, 0x1166, 0x11A9, 0x110B, 0x1166, 0x11AA, 0x110B, 0x1166, + 0x11AB, 0x110B, 0x1166, 0x11AC, 0x110B, 0x1166, 0x11AD, 0x110B, + 0x1166, 0x11AE, 0x110B, 0x1166, 0x11AF, 0x110B, 0x1166, 0x11B0, + 0x110B, 0x1166, 0x11B1, 0x110B, 0x1166, 0x11B2, 0x110B, 0x1166, + 0x11B3, 0x110B, 0x1166, 0x11B4, 0x110B, 0x1166, 0x11B5, 0x110B, + 0x1166, 0x11B6, 0x110B, 0x1166, 0x11B7, 0x110B, 0x1166, 0x11B8, + 0x110B, 0x1166, 0x11B9, 0x110B, 0x1166, 0x11BA, 0x110B, 0x1166, + 0x11BB, 0x110B, 0x1166, 0x11BC, 0x110B, 0x1166, 0x11BD, 0x110B, + 0x1166, 0x11BE, 0x110B, 0x1166, 0x11BF, 0x110B, 0x1166, 0x11C0, + 0x110B, 0x1166, 0x11C1, 0x110B, 0x1166, 0x11C2, 0x110B, 0x1167, + 0x110B, 0x1167, 0x11A8, 0x110B, 0x1167, 0x11A9, 0x110B, 0x1167, + 0x11AA, 0x110B, 0x1167, 0x11AB, 0x110B, 0x1167, 0x11AC, 0x110B, + 0x1167, 0x11AD, 0x110B, 0x1167, 0x11AE, 0x110B, 0x1167, 0x11AF, + 0x110B, 0x1167, 0x11B0, 0x110B, 0x1167, 0x11B1, 0x110B, 0x1167, + 0x11B2, 0x110B, 0x1167, 0x11B3, 0x110B, 0x1167, 0x11B4, 0x110B, + 0x1167, 0x11B5, 0x110B, 0x1167, 0x11B6, 0x110B, 0x1167, 0x11B7, + 0x110B, 0x1167, 0x11B8, 0x110B, 0x1167, 0x11B9, 0x110B, 0x1167, + 0x11BA, 0x110B, 0x1167, 0x11BB, 0x110B, 0x1167, 0x11BC, 0x110B, + 0x1167, 0x11BD, 0x110B, 0x1167, 0x11BE, 0x110B, 0x1167, 0x11BF, + 0x110B, 0x1167, 0x11C0, 0x110B, 0x1167, 0x11C1, 0x110B, 0x1167, + 0x11C2, 0x110B, 0x1168, 0x110B, 0x1168, 0x11A8, 0x110B, 0x1168, + 0x11A9, 0x110B, 0x1168, 0x11AA, 0x110B, 0x1168, 0x11AB, 0x110B, + 0x1168, 0x11AC, 0x110B, 0x1168, 0x11AD, 0x110B, 0x1168, 0x11AE, + 0x110B, 0x1168, 0x11AF, 0x110B, 0x1168, 0x11B0, 0x110B, 0x1168, + 0x11B1, 0x110B, 0x1168, 0x11B2, 0x110B, 0x1168, 0x11B3, 0x110B, + 0x1168, 0x11B4, 0x110B, 0x1168, 0x11B5, 0x110B, 0x1168, 0x11B6, + 0x110B, 0x1168, 0x11B7, 0x110B, 0x1168, 0x11B8, 0x110B, 0x1168, + 0x11B9, 0x110B, 0x1168, 0x11BA, 0x110B, 0x1168, 0x11BB, 0x110B, + 0x1168, 0x11BC, 0x110B, 0x1168, 0x11BD, 0x110B, 0x1168, 0x11BE, + 0x110B, 0x1168, 0x11BF, 0x110B, 0x1168, 0x11C0, 0x110B, 0x1168, + 0x11C1, 0x110B, 0x1168, 0x11C2, 0x110B, 0x1169, 0x110B, 0x1169, + 0x11A8, 0x110B, 0x1169, 0x11A9, 0x110B, 0x1169, 0x11AA, 0x110B, + 0x1169, 0x11AB, 0x110B, 0x1169, 0x11AC, 0x110B, 0x1169, 0x11AD, + 0x110B, 0x1169, 0x11AE, 0x110B, 0x1169, 0x11AF, 0x110B, 0x1169, + 0x11B0, 0x110B, 0x1169, 0x11B1, 0x110B, 0x1169, 0x11B2, 0x110B, + 0x1169, 0x11B3, 0x110B, 0x1169, 0x11B4, 0x110B, 0x1169, 0x11B5, + 0x110B, 0x1169, 0x11B6, 0x110B, 0x1169, 0x11B7, 0x110B, 0x1169, + 0x11B8, 0x110B, 0x1169, 0x11B9, 0x110B, 0x1169, 0x11BA, 0x110B, + 0x1169, 0x11BB, 0x110B, 0x1169, 0x11BC, 0x110B, 0x1169, 0x11BD, + 0x110B, 0x1169, 0x11BE, 0x110B, 0x1169, 0x11BF, 0x110B, 0x1169, + 0x11C0, 0x110B, 0x1169, 0x11C1, 0x110B, 0x1169, 0x11C2, 0x110B, + 0x116A, 0x110B, 0x116A, 0x11A8, 0x110B, 0x116A, 0x11A9, 0x110B, + 0x116A, 0x11AA, 0x110B, 0x116A, 0x11AB, 0x110B, 0x116A, 0x11AC, + 0x110B, 0x116A, 0x11AD, 0x110B, 0x116A, 0x11AE, 0x110B, 0x116A, + 0x11AF, 0x110B, 0x116A, 0x11B0, 0x110B, 0x116A, 0x11B1, 0x110B, + 0x116A, 0x11B2, 0x110B, 0x116A, 0x11B3, 0x110B, 0x116A, 0x11B4, + 0x110B, 0x116A, 0x11B5, 0x110B, 0x116A, 0x11B6, 0x110B, 0x116A, + 0x11B7, 0x110B, 0x116A, 0x11B8, 0x110B, 0x116A, 0x11B9, 0x110B, + 0x116A, 0x11BA, 0x110B, 0x116A, 0x11BB, 0x110B, 0x116A, 0x11BC, + 0x110B, 0x116A, 0x11BD, 0x110B, 0x116A, 0x11BE, 0x110B, 0x116A, + 0x11BF, 0x110B, 0x116A, 0x11C0, 0x110B, 0x116A, 0x11C1, 0x110B, + 0x116A, 0x11C2, 0x110B, 0x116B, 0x110B, 0x116B, 0x11A8, 0x110B, + 0x116B, 0x11A9, 0x110B, 0x116B, 0x11AA, 0x110B, 0x116B, 0x11AB, + 0x110B, 0x116B, 0x11AC, 0x110B, 0x116B, 0x11AD, 0x110B, 0x116B, + 0x11AE, 0x110B, 0x116B, 0x11AF, 0x110B, 0x116B, 0x11B0, 0x110B, + 0x116B, 0x11B1, 0x110B, 0x116B, 0x11B2, 0x110B, 0x116B, 0x11B3, + 0x110B, 0x116B, 0x11B4, 0x110B, 0x116B, 0x11B5, 0x110B, 0x116B, + 0x11B6, 0x110B, 0x116B, 0x11B7, 0x110B, 0x116B, 0x11B8, 0x110B, + 0x116B, 0x11B9, 0x110B, 0x116B, 0x11BA, 0x110B, 0x116B, 0x11BB, + 0x110B, 0x116B, 0x11BC, 0x110B, 0x116B, 0x11BD, 0x110B, 0x116B, + 0x11BE, 0x110B, 0x116B, 0x11BF, 0x110B, 0x116B, 0x11C0, 0x110B, + 0x116B, 0x11C1, 0x110B, 0x116B, 0x11C2, 0x110B, 0x116C, 0x110B, + 0x116C, 0x11A8, 0x110B, 0x116C, 0x11A9, 0x110B, 0x116C, 0x11AA, + 0x110B, 0x116C, 0x11AB, 0x110B, 0x116C, 0x11AC, 0x110B, 0x116C, + 0x11AD, 0x110B, 0x116C, 0x11AE, 0x110B, 0x116C, 0x11AF, 0x110B, + 0x116C, 0x11B0, 0x110B, 0x116C, 0x11B1, 0x110B, 0x116C, 0x11B2, + 0x110B, 0x116C, 0x11B3, 0x110B, 0x116C, 0x11B4, 0x110B, 0x116C, + 0x11B5, 0x110B, 0x116C, 0x11B6, 0x110B, 0x116C, 0x11B7, 0x110B, + 0x116C, 0x11B8, 0x110B, 0x116C, 0x11B9, 0x110B, 0x116C, 0x11BA, + 0x110B, 0x116C, 0x11BB, 0x110B, 0x116C, 0x11BC, 0x110B, 0x116C, + 0x11BD, 0x110B, 0x116C, 0x11BE, 0x110B, 0x116C, 0x11BF, 0x110B, + 0x116C, 0x11C0, 0x110B, 0x116C, 0x11C1, 0x110B, 0x116C, 0x11C2, + 0x110B, 0x116D, 0x110B, 0x116D, 0x11A8, 0x110B, 0x116D, 0x11A9, + 0x110B, 0x116D, 0x11AA, 0x110B, 0x116D, 0x11AB, 0x110B, 0x116D, + 0x11AC, 0x110B, 0x116D, 0x11AD, 0x110B, 0x116D, 0x11AE, 0x110B, + 0x116D, 0x11AF, 0x110B, 0x116D, 0x11B0, 0x110B, 0x116D, 0x11B1, + 0x110B, 0x116D, 0x11B2, 0x110B, 0x116D, 0x11B3, 0x110B, 0x116D, + 0x11B4, 0x110B, 0x116D, 0x11B5, 0x110B, 0x116D, 0x11B6, 0x110B, + 0x116D, 0x11B7, 0x110B, 0x116D, 0x11B8, 0x110B, 0x116D, 0x11B9, + 0x110B, 0x116D, 0x11BA, 0x110B, 0x116D, 0x11BB, 0x110B, 0x116D, + 0x11BC, 0x110B, 0x116D, 0x11BD, 0x110B, 0x116D, 0x11BE, 0x110B, + 0x116D, 0x11BF, 0x110B, 0x116D, 0x11C0, 0x110B, 0x116D, 0x11C1, + 0x110B, 0x116D, 0x11C2, 0x110B, 0x116E, 0x110B, 0x116E, 0x11A8, + 0x110B, 0x116E, 0x11A9, 0x110B, 0x116E, 0x11AA, 0x110B, 0x116E, + 0x11AB, 0x110B, 0x116E, 0x11AC, 0x110B, 0x116E, 0x11AD, 0x110B, + 0x116E, 0x11AE, 0x110B, 0x116E, 0x11AF, 0x110B, 0x116E, 0x11B0, + 0x110B, 0x116E, 0x11B1, 0x110B, 0x116E, 0x11B2, 0x110B, 0x116E, + 0x11B3, 0x110B, 0x116E, 0x11B4, 0x110B, 0x116E, 0x11B5, 0x110B, + 0x116E, 0x11B6, 0x110B, 0x116E, 0x11B7, 0x110B, 0x116E, 0x11B8, + 0x110B, 0x116E, 0x11B9, 0x110B, 0x116E, 0x11BA, 0x110B, 0x116E, + 0x11BB, 0x110B, 0x116E, 0x11BC, 0x110B, 0x116E, 0x11BD, 0x110B, + 0x116E, 0x11BE, 0x110B, 0x116E, 0x11BF, 0x110B, 0x116E, 0x11C0, + 0x110B, 0x116E, 0x11C1, 0x110B, 0x116E, 0x11C2, 0x110B, 0x116F, + 0x110B, 0x116F, 0x11A8, 0x110B, 0x116F, 0x11A9, 0x110B, 0x116F, + 0x11AA, 0x110B, 0x116F, 0x11AB, 0x110B, 0x116F, 0x11AC, 0x110B, + 0x116F, 0x11AD, 0x110B, 0x116F, 0x11AE, 0x110B, 0x116F, 0x11AF, + 0x110B, 0x116F, 0x11B0, 0x110B, 0x116F, 0x11B1, 0x110B, 0x116F, + 0x11B2, 0x110B, 0x116F, 0x11B3, 0x110B, 0x116F, 0x11B4, 0x110B, + 0x116F, 0x11B5, 0x110B, 0x116F, 0x11B6, 0x110B, 0x116F, 0x11B7, + 0x110B, 0x116F, 0x11B8, 0x110B, 0x116F, 0x11B9, 0x110B, 0x116F, + 0x11BA, 0x110B, 0x116F, 0x11BB, 0x110B, 0x116F, 0x11BC, 0x110B, + 0x116F, 0x11BD, 0x110B, 0x116F, 0x11BE, 0x110B, 0x116F, 0x11BF, + 0x110B, 0x116F, 0x11C0, 0x110B, 0x116F, 0x11C1, 0x110B, 0x116F, + 0x11C2, 0x110B, 0x1170, 0x110B, 0x1170, 0x11A8, 0x110B, 0x1170, + 0x11A9, 0x110B, 0x1170, 0x11AA, 0x110B, 0x1170, 0x11AB, 0x110B, + 0x1170, 0x11AC, 0x110B, 0x1170, 0x11AD, 0x110B, 0x1170, 0x11AE, + 0x110B, 0x1170, 0x11AF, 0x110B, 0x1170, 0x11B0, 0x110B, 0x1170, + 0x11B1, 0x110B, 0x1170, 0x11B2, 0x110B, 0x1170, 0x11B3, 0x110B, + 0x1170, 0x11B4, 0x110B, 0x1170, 0x11B5, 0x110B, 0x1170, 0x11B6, + 0x110B, 0x1170, 0x11B7, 0x110B, 0x1170, 0x11B8, 0x110B, 0x1170, + 0x11B9, 0x110B, 0x1170, 0x11BA, 0x110B, 0x1170, 0x11BB, 0x110B, + 0x1170, 0x11BC, 0x110B, 0x1170, 0x11BD, 0x110B, 0x1170, 0x11BE, + 0x110B, 0x1170, 0x11BF, 0x110B, 0x1170, 0x11C0, 0x110B, 0x1170, + 0x11C1, 0x110B, 0x1170, 0x11C2, 0x110B, 0x1171, 0x110B, 0x1171, + 0x11A8, 0x110B, 0x1171, 0x11A9, 0x110B, 0x1171, 0x11AA, 0x110B, + 0x1171, 0x11AB, 0x110B, 0x1171, 0x11AC, 0x110B, 0x1171, 0x11AD, + 0x110B, 0x1171, 0x11AE, 0x110B, 0x1171, 0x11AF, 0x110B, 0x1171, + 0x11B0, 0x110B, 0x1171, 0x11B1, 0x110B, 0x1171, 0x11B2, 0x110B, + 0x1171, 0x11B3, 0x110B, 0x1171, 0x11B4, 0x110B, 0x1171, 0x11B5, + 0x110B, 0x1171, 0x11B6, 0x110B, 0x1171, 0x11B7, 0x110B, 0x1171, + 0x11B8, 0x110B, 0x1171, 0x11B9, 0x110B, 0x1171, 0x11BA, 0x110B, + 0x1171, 0x11BB, 0x110B, 0x1171, 0x11BC, 0x110B, 0x1171, 0x11BD, + 0x110B, 0x1171, 0x11BE, 0x110B, 0x1171, 0x11BF, 0x110B, 0x1171, + 0x11C0, 0x110B, 0x1171, 0x11C1, 0x110B, 0x1171, 0x11C2, 0x110B, + 0x1172, 0x110B, 0x1172, 0x11A8, 0x110B, 0x1172, 0x11A9, 0x110B, + 0x1172, 0x11AA, 0x110B, 0x1172, 0x11AB, 0x110B, 0x1172, 0x11AC, + 0x110B, 0x1172, 0x11AD, 0x110B, 0x1172, 0x11AE, 0x110B, 0x1172, + 0x11AF, 0x110B, 0x1172, 0x11B0, 0x110B, 0x1172, 0x11B1, 0x110B, + 0x1172, 0x11B2, 0x110B, 0x1172, 0x11B3, 0x110B, 0x1172, 0x11B4, + 0x110B, 0x1172, 0x11B5, 0x110B, 0x1172, 0x11B6, 0x110B, 0x1172, + 0x11B7, 0x110B, 0x1172, 0x11B8, 0x110B, 0x1172, 0x11B9, 0x110B, + 0x1172, 0x11BA, 0x110B, 0x1172, 0x11BB, 0x110B, 0x1172, 0x11BC, + 0x110B, 0x1172, 0x11BD, 0x110B, 0x1172, 0x11BE, 0x110B, 0x1172, + 0x11BF, 0x110B, 0x1172, 0x11C0, 0x110B, 0x1172, 0x11C1, 0x110B, + 0x1172, 0x11C2, 0x110B, 0x1173, 0x110B, 0x1173, 0x11A8, 0x110B, + 0x1173, 0x11A9, 0x110B, 0x1173, 0x11AA, 0x110B, 0x1173, 0x11AB, + 0x110B, 0x1173, 0x11AC, 0x110B, 0x1173, 0x11AD, 0x110B, 0x1173, + 0x11AE, 0x110B, 0x1173, 0x11AF, 0x110B, 0x1173, 0x11B0, 0x110B, + 0x1173, 0x11B1, 0x110B, 0x1173, 0x11B2, 0x110B, 0x1173, 0x11B3, + 0x110B, 0x1173, 0x11B4, 0x110B, 0x1173, 0x11B5, 0x110B, 0x1173, + 0x11B6, 0x110B, 0x1173, 0x11B7, 0x110B, 0x1173, 0x11B8, 0x110B, + 0x1173, 0x11B9, 0x110B, 0x1173, 0x11BA, 0x110B, 0x1173, 0x11BB, + 0x110B, 0x1173, 0x11BC, 0x110B, 0x1173, 0x11BD, 0x110B, 0x1173, + 0x11BE, 0x110B, 0x1173, 0x11BF, 0x110B, 0x1173, 0x11C0, 0x110B, + 0x1173, 0x11C1, 0x110B, 0x1173, 0x11C2, 0x110B, 0x1174, 0x110B, + 0x1174, 0x11A8, 0x110B, 0x1174, 0x11A9, 0x110B, 0x1174, 0x11AA, + 0x110B, 0x1174, 0x11AB, 0x110B, 0x1174, 0x11AC, 0x110B, 0x1174, + 0x11AD, 0x110B, 0x1174, 0x11AE, 0x110B, 0x1174, 0x11AF, 0x110B, + 0x1174, 0x11B0, 0x110B, 0x1174, 0x11B1, 0x110B, 0x1174, 0x11B2, + 0x110B, 0x1174, 0x11B3, 0x110B, 0x1174, 0x11B4, 0x110B, 0x1174, + 0x11B5, 0x110B, 0x1174, 0x11B6, 0x110B, 0x1174, 0x11B7, 0x110B, + 0x1174, 0x11B8, 0x110B, 0x1174, 0x11B9, 0x110B, 0x1174, 0x11BA, + 0x110B, 0x1174, 0x11BB, 0x110B, 0x1174, 0x11BC, 0x110B, 0x1174, + 0x11BD, 0x110B, 0x1174, 0x11BE, 0x110B, 0x1174, 0x11BF, 0x110B, + 0x1174, 0x11C0, 0x110B, 0x1174, 0x11C1, 0x110B, 0x1174, 0x11C2, + 0x110B, 0x1175, 0x110B, 0x1175, 0x11A8, 0x110B, 0x1175, 0x11A9, + 0x110B, 0x1175, 0x11AA, 0x110B, 0x1175, 0x11AB, 0x110B, 0x1175, + 0x11AC, 0x110B, 0x1175, 0x11AD, 0x110B, 0x1175, 0x11AE, 0x110B, + 0x1175, 0x11AF, 0x110B, 0x1175, 0x11B0, 0x110B, 0x1175, 0x11B1, + 0x110B, 0x1175, 0x11B2, 0x110B, 0x1175, 0x11B3, 0x110B, 0x1175, + 0x11B4, 0x110B, 0x1175, 0x11B5, 0x110B, 0x1175, 0x11B6, 0x110B, + 0x1175, 0x11B7, 0x110B, 0x1175, 0x11B8, 0x110B, 0x1175, 0x11B9, + 0x110B, 0x1175, 0x11BA, 0x110B, 0x1175, 0x11BB, 0x110B, 0x1175, + 0x11BC, 0x110B, 0x1175, 0x11BD, 0x110B, 0x1175, 0x11BE, 0x110B, + 0x1175, 0x11BF, 0x110B, 0x1175, 0x11C0, 0x110B, 0x1175, 0x11C1, + 0x110B, 0x1175, 0x11C2, 0x110C, 0x1161, 0x110C, 0x1161, 0x11A8, + 0x110C, 0x1161, 0x11A9, 0x110C, 0x1161, 0x11AA, 0x110C, 0x1161, + 0x11AB, 0x110C, 0x1161, 0x11AC, 0x110C, 0x1161, 0x11AD, 0x110C, + 0x1161, 0x11AE, 0x110C, 0x1161, 0x11AF, 0x110C, 0x1161, 0x11B0, + 0x110C, 0x1161, 0x11B1, 0x110C, 0x1161, 0x11B2, 0x110C, 0x1161, + 0x11B3, 0x110C, 0x1161, 0x11B4, 0x110C, 0x1161, 0x11B5, 0x110C, + 0x1161, 0x11B6, 0x110C, 0x1161, 0x11B7, 0x110C, 0x1161, 0x11B8, + 0x110C, 0x1161, 0x11B9, 0x110C, 0x1161, 0x11BA, 0x110C, 0x1161, + 0x11BB, 0x110C, 0x1161, 0x11BC, 0x110C, 0x1161, 0x11BD, 0x110C, + 0x1161, 0x11BE, 0x110C, 0x1161, 0x11BF, 0x110C, 0x1161, 0x11C0, + 0x110C, 0x1161, 0x11C1, 0x110C, 0x1161, 0x11C2, 0x110C, 0x1162, + 0x110C, 0x1162, 0x11A8, 0x110C, 0x1162, 0x11A9, 0x110C, 0x1162, + 0x11AA, 0x110C, 0x1162, 0x11AB, 0x110C, 0x1162, 0x11AC, 0x110C, + 0x1162, 0x11AD, 0x110C, 0x1162, 0x11AE, 0x110C, 0x1162, 0x11AF, + 0x110C, 0x1162, 0x11B0, 0x110C, 0x1162, 0x11B1, 0x110C, 0x1162, + 0x11B2, 0x110C, 0x1162, 0x11B3, 0x110C, 0x1162, 0x11B4, 0x110C, + 0x1162, 0x11B5, 0x110C, 0x1162, 0x11B6, 0x110C, 0x1162, 0x11B7, + 0x110C, 0x1162, 0x11B8, 0x110C, 0x1162, 0x11B9, 0x110C, 0x1162, + 0x11BA, 0x110C, 0x1162, 0x11BB, 0x110C, 0x1162, 0x11BC, 0x110C, + 0x1162, 0x11BD, 0x110C, 0x1162, 0x11BE, 0x110C, 0x1162, 0x11BF, + 0x110C, 0x1162, 0x11C0, 0x110C, 0x1162, 0x11C1, 0x110C, 0x1162, + 0x11C2, 0x110C, 0x1163, 0x110C, 0x1163, 0x11A8, 0x110C, 0x1163, + 0x11A9, 0x110C, 0x1163, 0x11AA, 0x110C, 0x1163, 0x11AB, 0x110C, + 0x1163, 0x11AC, 0x110C, 0x1163, 0x11AD, 0x110C, 0x1163, 0x11AE, + 0x110C, 0x1163, 0x11AF, 0x110C, 0x1163, 0x11B0, 0x110C, 0x1163, + 0x11B1, 0x110C, 0x1163, 0x11B2, 0x110C, 0x1163, 0x11B3, 0x110C, + 0x1163, 0x11B4, 0x110C, 0x1163, 0x11B5, 0x110C, 0x1163, 0x11B6, + 0x110C, 0x1163, 0x11B7, 0x110C, 0x1163, 0x11B8, 0x110C, 0x1163, + 0x11B9, 0x110C, 0x1163, 0x11BA, 0x110C, 0x1163, 0x11BB, 0x110C, + 0x1163, 0x11BC, 0x110C, 0x1163, 0x11BD, 0x110C, 0x1163, 0x11BE, + 0x110C, 0x1163, 0x11BF, 0x110C, 0x1163, 0x11C0, 0x110C, 0x1163, + 0x11C1, 0x110C, 0x1163, 0x11C2, 0x110C, 0x1164, 0x110C, 0x1164, + 0x11A8, 0x110C, 0x1164, 0x11A9, 0x110C, 0x1164, 0x11AA, 0x110C, + 0x1164, 0x11AB, 0x110C, 0x1164, 0x11AC, 0x110C, 0x1164, 0x11AD, + 0x110C, 0x1164, 0x11AE, 0x110C, 0x1164, 0x11AF, 0x110C, 0x1164, + 0x11B0, 0x110C, 0x1164, 0x11B1, 0x110C, 0x1164, 0x11B2, 0x110C, + 0x1164, 0x11B3, 0x110C, 0x1164, 0x11B4, 0x110C, 0x1164, 0x11B5, + 0x110C, 0x1164, 0x11B6, 0x110C, 0x1164, 0x11B7, 0x110C, 0x1164, + 0x11B8, 0x110C, 0x1164, 0x11B9, 0x110C, 0x1164, 0x11BA, 0x110C, + 0x1164, 0x11BB, 0x110C, 0x1164, 0x11BC, 0x110C, 0x1164, 0x11BD, + 0x110C, 0x1164, 0x11BE, 0x110C, 0x1164, 0x11BF, 0x110C, 0x1164, + 0x11C0, 0x110C, 0x1164, 0x11C1, 0x110C, 0x1164, 0x11C2, 0x110C, + 0x1165, 0x110C, 0x1165, 0x11A8, 0x110C, 0x1165, 0x11A9, 0x110C, + 0x1165, 0x11AA, 0x110C, 0x1165, 0x11AB, 0x110C, 0x1165, 0x11AC, + 0x110C, 0x1165, 0x11AD, 0x110C, 0x1165, 0x11AE, 0x110C, 0x1165, + 0x11AF, 0x110C, 0x1165, 0x11B0, 0x110C, 0x1165, 0x11B1, 0x110C, + 0x1165, 0x11B2, 0x110C, 0x1165, 0x11B3, 0x110C, 0x1165, 0x11B4, + 0x110C, 0x1165, 0x11B5, 0x110C, 0x1165, 0x11B6, 0x110C, 0x1165, + 0x11B7, 0x110C, 0x1165, 0x11B8, 0x110C, 0x1165, 0x11B9, 0x110C, + 0x1165, 0x11BA, 0x110C, 0x1165, 0x11BB, 0x110C, 0x1165, 0x11BC, + 0x110C, 0x1165, 0x11BD, 0x110C, 0x1165, 0x11BE, 0x110C, 0x1165, + 0x11BF, 0x110C, 0x1165, 0x11C0, 0x110C, 0x1165, 0x11C1, 0x110C, + 0x1165, 0x11C2, 0x110C, 0x1166, 0x110C, 0x1166, 0x11A8, 0x110C, + 0x1166, 0x11A9, 0x110C, 0x1166, 0x11AA, 0x110C, 0x1166, 0x11AB, + 0x110C, 0x1166, 0x11AC, 0x110C, 0x1166, 0x11AD, 0x110C, 0x1166, + 0x11AE, 0x110C, 0x1166, 0x11AF, 0x110C, 0x1166, 0x11B0, 0x110C, + 0x1166, 0x11B1, 0x110C, 0x1166, 0x11B2, 0x110C, 0x1166, 0x11B3, + 0x110C, 0x1166, 0x11B4, 0x110C, 0x1166, 0x11B5, 0x110C, 0x1166, + 0x11B6, 0x110C, 0x1166, 0x11B7, 0x110C, 0x1166, 0x11B8, 0x110C, + 0x1166, 0x11B9, 0x110C, 0x1166, 0x11BA, 0x110C, 0x1166, 0x11BB, + 0x110C, 0x1166, 0x11BC, 0x110C, 0x1166, 0x11BD, 0x110C, 0x1166, + 0x11BE, 0x110C, 0x1166, 0x11BF, 0x110C, 0x1166, 0x11C0, 0x110C, + 0x1166, 0x11C1, 0x110C, 0x1166, 0x11C2, 0x110C, 0x1167, 0x110C, + 0x1167, 0x11A8, 0x110C, 0x1167, 0x11A9, 0x110C, 0x1167, 0x11AA, + 0x110C, 0x1167, 0x11AB, 0x110C, 0x1167, 0x11AC, 0x110C, 0x1167, + 0x11AD, 0x110C, 0x1167, 0x11AE, 0x110C, 0x1167, 0x11AF, 0x110C, + 0x1167, 0x11B0, 0x110C, 0x1167, 0x11B1, 0x110C, 0x1167, 0x11B2, + 0x110C, 0x1167, 0x11B3, 0x110C, 0x1167, 0x11B4, 0x110C, 0x1167, + 0x11B5, 0x110C, 0x1167, 0x11B6, 0x110C, 0x1167, 0x11B7, 0x110C, + 0x1167, 0x11B8, 0x110C, 0x1167, 0x11B9, 0x110C, 0x1167, 0x11BA, + 0x110C, 0x1167, 0x11BB, 0x110C, 0x1167, 0x11BC, 0x110C, 0x1167, + 0x11BD, 0x110C, 0x1167, 0x11BE, 0x110C, 0x1167, 0x11BF, 0x110C, + 0x1167, 0x11C0, 0x110C, 0x1167, 0x11C1, 0x110C, 0x1167, 0x11C2, + 0x110C, 0x1168, 0x110C, 0x1168, 0x11A8, 0x110C, 0x1168, 0x11A9, + 0x110C, 0x1168, 0x11AA, 0x110C, 0x1168, 0x11AB, 0x110C, 0x1168, + 0x11AC, 0x110C, 0x1168, 0x11AD, 0x110C, 0x1168, 0x11AE, 0x110C, + 0x1168, 0x11AF, 0x110C, 0x1168, 0x11B0, 0x110C, 0x1168, 0x11B1, + 0x110C, 0x1168, 0x11B2, 0x110C, 0x1168, 0x11B3, 0x110C, 0x1168, + 0x11B4, 0x110C, 0x1168, 0x11B5, 0x110C, 0x1168, 0x11B6, 0x110C, + 0x1168, 0x11B7, 0x110C, 0x1168, 0x11B8, 0x110C, 0x1168, 0x11B9, + 0x110C, 0x1168, 0x11BA, 0x110C, 0x1168, 0x11BB, 0x110C, 0x1168, + 0x11BC, 0x110C, 0x1168, 0x11BD, 0x110C, 0x1168, 0x11BE, 0x110C, + 0x1168, 0x11BF, 0x110C, 0x1168, 0x11C0, 0x110C, 0x1168, 0x11C1, + 0x110C, 0x1168, 0x11C2, 0x110C, 0x1169, 0x110C, 0x1169, 0x11A8, + 0x110C, 0x1169, 0x11A9, 0x110C, 0x1169, 0x11AA, 0x110C, 0x1169, + 0x11AB, 0x110C, 0x1169, 0x11AC, 0x110C, 0x1169, 0x11AD, 0x110C, + 0x1169, 0x11AE, 0x110C, 0x1169, 0x11AF, 0x110C, 0x1169, 0x11B0, + 0x110C, 0x1169, 0x11B1, 0x110C, 0x1169, 0x11B2, 0x110C, 0x1169, + 0x11B3, 0x110C, 0x1169, 0x11B4, 0x110C, 0x1169, 0x11B5, 0x110C, + 0x1169, 0x11B6, 0x110C, 0x1169, 0x11B7, 0x110C, 0x1169, 0x11B8, + 0x110C, 0x1169, 0x11B9, 0x110C, 0x1169, 0x11BA, 0x110C, 0x1169, + 0x11BB, 0x110C, 0x1169, 0x11BC, 0x110C, 0x1169, 0x11BD, 0x110C, + 0x1169, 0x11BE, 0x110C, 0x1169, 0x11BF, 0x110C, 0x1169, 0x11C0, + 0x110C, 0x1169, 0x11C1, 0x110C, 0x1169, 0x11C2, 0x110C, 0x116A, + 0x110C, 0x116A, 0x11A8, 0x110C, 0x116A, 0x11A9, 0x110C, 0x116A, + 0x11AA, 0x110C, 0x116A, 0x11AB, 0x110C, 0x116A, 0x11AC, 0x110C, + 0x116A, 0x11AD, 0x110C, 0x116A, 0x11AE, 0x110C, 0x116A, 0x11AF, + 0x110C, 0x116A, 0x11B0, 0x110C, 0x116A, 0x11B1, 0x110C, 0x116A, + 0x11B2, 0x110C, 0x116A, 0x11B3, 0x110C, 0x116A, 0x11B4, 0x110C, + 0x116A, 0x11B5, 0x110C, 0x116A, 0x11B6, 0x110C, 0x116A, 0x11B7, + 0x110C, 0x116A, 0x11B8, 0x110C, 0x116A, 0x11B9, 0x110C, 0x116A, + 0x11BA, 0x110C, 0x116A, 0x11BB, 0x110C, 0x116A, 0x11BC, 0x110C, + 0x116A, 0x11BD, 0x110C, 0x116A, 0x11BE, 0x110C, 0x116A, 0x11BF, + 0x110C, 0x116A, 0x11C0, 0x110C, 0x116A, 0x11C1, 0x110C, 0x116A, + 0x11C2, 0x110C, 0x116B, 0x110C, 0x116B, 0x11A8, 0x110C, 0x116B, + 0x11A9, 0x110C, 0x116B, 0x11AA, 0x110C, 0x116B, 0x11AB, 0x110C, + 0x116B, 0x11AC, 0x110C, 0x116B, 0x11AD, 0x110C, 0x116B, 0x11AE, + 0x110C, 0x116B, 0x11AF, 0x110C, 0x116B, 0x11B0, 0x110C, 0x116B, + 0x11B1, 0x110C, 0x116B, 0x11B2, 0x110C, 0x116B, 0x11B3, 0x110C, + 0x116B, 0x11B4, 0x110C, 0x116B, 0x11B5, 0x110C, 0x116B, 0x11B6, + 0x110C, 0x116B, 0x11B7, 0x110C, 0x116B, 0x11B8, 0x110C, 0x116B, + 0x11B9, 0x110C, 0x116B, 0x11BA, 0x110C, 0x116B, 0x11BB, 0x110C, + 0x116B, 0x11BC, 0x110C, 0x116B, 0x11BD, 0x110C, 0x116B, 0x11BE, + 0x110C, 0x116B, 0x11BF, 0x110C, 0x116B, 0x11C0, 0x110C, 0x116B, + 0x11C1, 0x110C, 0x116B, 0x11C2, 0x110C, 0x116C, 0x110C, 0x116C, + 0x11A8, 0x110C, 0x116C, 0x11A9, 0x110C, 0x116C, 0x11AA, 0x110C, + 0x116C, 0x11AB, 0x110C, 0x116C, 0x11AC, 0x110C, 0x116C, 0x11AD, + 0x110C, 0x116C, 0x11AE, 0x110C, 0x116C, 0x11AF, 0x110C, 0x116C, + 0x11B0, 0x110C, 0x116C, 0x11B1, 0x110C, 0x116C, 0x11B2, 0x110C, + 0x116C, 0x11B3, 0x110C, 0x116C, 0x11B4, 0x110C, 0x116C, 0x11B5, + 0x110C, 0x116C, 0x11B6, 0x110C, 0x116C, 0x11B7, 0x110C, 0x116C, + 0x11B8, 0x110C, 0x116C, 0x11B9, 0x110C, 0x116C, 0x11BA, 0x110C, + 0x116C, 0x11BB, 0x110C, 0x116C, 0x11BC, 0x110C, 0x116C, 0x11BD, + 0x110C, 0x116C, 0x11BE, 0x110C, 0x116C, 0x11BF, 0x110C, 0x116C, + 0x11C0, 0x110C, 0x116C, 0x11C1, 0x110C, 0x116C, 0x11C2, 0x110C, + 0x116D, 0x110C, 0x116D, 0x11A8, 0x110C, 0x116D, 0x11A9, 0x110C, + 0x116D, 0x11AA, 0x110C, 0x116D, 0x11AB, 0x110C, 0x116D, 0x11AC, + 0x110C, 0x116D, 0x11AD, 0x110C, 0x116D, 0x11AE, 0x110C, 0x116D, + 0x11AF, 0x110C, 0x116D, 0x11B0, 0x110C, 0x116D, 0x11B1, 0x110C, + 0x116D, 0x11B2, 0x110C, 0x116D, 0x11B3, 0x110C, 0x116D, 0x11B4, + 0x110C, 0x116D, 0x11B5, 0x110C, 0x116D, 0x11B6, 0x110C, 0x116D, + 0x11B7, 0x110C, 0x116D, 0x11B8, 0x110C, 0x116D, 0x11B9, 0x110C, + 0x116D, 0x11BA, 0x110C, 0x116D, 0x11BB, 0x110C, 0x116D, 0x11BC, + 0x110C, 0x116D, 0x11BD, 0x110C, 0x116D, 0x11BE, 0x110C, 0x116D, + 0x11BF, 0x110C, 0x116D, 0x11C0, 0x110C, 0x116D, 0x11C1, 0x110C, + 0x116D, 0x11C2, 0x110C, 0x116E, 0x110C, 0x116E, 0x11A8, 0x110C, + 0x116E, 0x11A9, 0x110C, 0x116E, 0x11AA, 0x110C, 0x116E, 0x11AB, + 0x110C, 0x116E, 0x11AC, 0x110C, 0x116E, 0x11AD, 0x110C, 0x116E, + 0x11AE, 0x110C, 0x116E, 0x11AF, 0x110C, 0x116E, 0x11B0, 0x110C, + 0x116E, 0x11B1, 0x110C, 0x116E, 0x11B2, 0x110C, 0x116E, 0x11B3, + 0x110C, 0x116E, 0x11B4, 0x110C, 0x116E, 0x11B5, 0x110C, 0x116E, + 0x11B6, 0x110C, 0x116E, 0x11B7, 0x110C, 0x116E, 0x11B8, 0x110C, + 0x116E, 0x11B9, 0x110C, 0x116E, 0x11BA, 0x110C, 0x116E, 0x11BB, + 0x110C, 0x116E, 0x11BC, 0x110C, 0x116E, 0x11BD, 0x110C, 0x116E, + 0x11BE, 0x110C, 0x116E, 0x11BF, 0x110C, 0x116E, 0x11C0, 0x110C, + 0x116E, 0x11C1, 0x110C, 0x116E, 0x11C2, 0x110C, 0x116F, 0x110C, + 0x116F, 0x11A8, 0x110C, 0x116F, 0x11A9, 0x110C, 0x116F, 0x11AA, + 0x110C, 0x116F, 0x11AB, 0x110C, 0x116F, 0x11AC, 0x110C, 0x116F, + 0x11AD, 0x110C, 0x116F, 0x11AE, 0x110C, 0x116F, 0x11AF, 0x110C, + 0x116F, 0x11B0, 0x110C, 0x116F, 0x11B1, 0x110C, 0x116F, 0x11B2, + 0x110C, 0x116F, 0x11B3, 0x110C, 0x116F, 0x11B4, 0x110C, 0x116F, + 0x11B5, 0x110C, 0x116F, 0x11B6, 0x110C, 0x116F, 0x11B7, 0x110C, + 0x116F, 0x11B8, 0x110C, 0x116F, 0x11B9, 0x110C, 0x116F, 0x11BA, + 0x110C, 0x116F, 0x11BB, 0x110C, 0x116F, 0x11BC, 0x110C, 0x116F, + 0x11BD, 0x110C, 0x116F, 0x11BE, 0x110C, 0x116F, 0x11BF, 0x110C, + 0x116F, 0x11C0, 0x110C, 0x116F, 0x11C1, 0x110C, 0x116F, 0x11C2, + 0x110C, 0x1170, 0x110C, 0x1170, 0x11A8, 0x110C, 0x1170, 0x11A9, + 0x110C, 0x1170, 0x11AA, 0x110C, 0x1170, 0x11AB, 0x110C, 0x1170, + 0x11AC, 0x110C, 0x1170, 0x11AD, 0x110C, 0x1170, 0x11AE, 0x110C, + 0x1170, 0x11AF, 0x110C, 0x1170, 0x11B0, 0x110C, 0x1170, 0x11B1, + 0x110C, 0x1170, 0x11B2, 0x110C, 0x1170, 0x11B3, 0x110C, 0x1170, + 0x11B4, 0x110C, 0x1170, 0x11B5, 0x110C, 0x1170, 0x11B6, 0x110C, + 0x1170, 0x11B7, 0x110C, 0x1170, 0x11B8, 0x110C, 0x1170, 0x11B9, + 0x110C, 0x1170, 0x11BA, 0x110C, 0x1170, 0x11BB, 0x110C, 0x1170, + 0x11BC, 0x110C, 0x1170, 0x11BD, 0x110C, 0x1170, 0x11BE, 0x110C, + 0x1170, 0x11BF, 0x110C, 0x1170, 0x11C0, 0x110C, 0x1170, 0x11C1, + 0x110C, 0x1170, 0x11C2, 0x110C, 0x1171, 0x110C, 0x1171, 0x11A8, + 0x110C, 0x1171, 0x11A9, 0x110C, 0x1171, 0x11AA, 0x110C, 0x1171, + 0x11AB, 0x110C, 0x1171, 0x11AC, 0x110C, 0x1171, 0x11AD, 0x110C, + 0x1171, 0x11AE, 0x110C, 0x1171, 0x11AF, 0x110C, 0x1171, 0x11B0, + 0x110C, 0x1171, 0x11B1, 0x110C, 0x1171, 0x11B2, 0x110C, 0x1171, + 0x11B3, 0x110C, 0x1171, 0x11B4, 0x110C, 0x1171, 0x11B5, 0x110C, + 0x1171, 0x11B6, 0x110C, 0x1171, 0x11B7, 0x110C, 0x1171, 0x11B8, + 0x110C, 0x1171, 0x11B9, 0x110C, 0x1171, 0x11BA, 0x110C, 0x1171, + 0x11BB, 0x110C, 0x1171, 0x11BC, 0x110C, 0x1171, 0x11BD, 0x110C, + 0x1171, 0x11BE, 0x110C, 0x1171, 0x11BF, 0x110C, 0x1171, 0x11C0, + 0x110C, 0x1171, 0x11C1, 0x110C, 0x1171, 0x11C2, 0x110C, 0x1172, + 0x110C, 0x1172, 0x11A8, 0x110C, 0x1172, 0x11A9, 0x110C, 0x1172, + 0x11AA, 0x110C, 0x1172, 0x11AB, 0x110C, 0x1172, 0x11AC, 0x110C, + 0x1172, 0x11AD, 0x110C, 0x1172, 0x11AE, 0x110C, 0x1172, 0x11AF, + 0x110C, 0x1172, 0x11B0, 0x110C, 0x1172, 0x11B1, 0x110C, 0x1172, + 0x11B2, 0x110C, 0x1172, 0x11B3, 0x110C, 0x1172, 0x11B4, 0x110C, + 0x1172, 0x11B5, 0x110C, 0x1172, 0x11B6, 0x110C, 0x1172, 0x11B7, + 0x110C, 0x1172, 0x11B8, 0x110C, 0x1172, 0x11B9, 0x110C, 0x1172, + 0x11BA, 0x110C, 0x1172, 0x11BB, 0x110C, 0x1172, 0x11BC, 0x110C, + 0x1172, 0x11BD, 0x110C, 0x1172, 0x11BE, 0x110C, 0x1172, 0x11BF, + 0x110C, 0x1172, 0x11C0, 0x110C, 0x1172, 0x11C1, 0x110C, 0x1172, + 0x11C2, 0x110C, 0x1173, 0x110C, 0x1173, 0x11A8, 0x110C, 0x1173, + 0x11A9, 0x110C, 0x1173, 0x11AA, 0x110C, 0x1173, 0x11AB, 0x110C, + 0x1173, 0x11AC, 0x110C, 0x1173, 0x11AD, 0x110C, 0x1173, 0x11AE, + 0x110C, 0x1173, 0x11AF, 0x110C, 0x1173, 0x11B0, 0x110C, 0x1173, + 0x11B1, 0x110C, 0x1173, 0x11B2, 0x110C, 0x1173, 0x11B3, 0x110C, + 0x1173, 0x11B4, 0x110C, 0x1173, 0x11B5, 0x110C, 0x1173, 0x11B6, + 0x110C, 0x1173, 0x11B7, 0x110C, 0x1173, 0x11B8, 0x110C, 0x1173, + 0x11B9, 0x110C, 0x1173, 0x11BA, 0x110C, 0x1173, 0x11BB, 0x110C, + 0x1173, 0x11BC, 0x110C, 0x1173, 0x11BD, 0x110C, 0x1173, 0x11BE, + 0x110C, 0x1173, 0x11BF, 0x110C, 0x1173, 0x11C0, 0x110C, 0x1173, + 0x11C1, 0x110C, 0x1173, 0x11C2, 0x110C, 0x1174, 0x110C, 0x1174, + 0x11A8, 0x110C, 0x1174, 0x11A9, 0x110C, 0x1174, 0x11AA, 0x110C, + 0x1174, 0x11AB, 0x110C, 0x1174, 0x11AC, 0x110C, 0x1174, 0x11AD, + 0x110C, 0x1174, 0x11AE, 0x110C, 0x1174, 0x11AF, 0x110C, 0x1174, + 0x11B0, 0x110C, 0x1174, 0x11B1, 0x110C, 0x1174, 0x11B2, 0x110C, + 0x1174, 0x11B3, 0x110C, 0x1174, 0x11B4, 0x110C, 0x1174, 0x11B5, + 0x110C, 0x1174, 0x11B6, 0x110C, 0x1174, 0x11B7, 0x110C, 0x1174, + 0x11B8, 0x110C, 0x1174, 0x11B9, 0x110C, 0x1174, 0x11BA, 0x110C, + 0x1174, 0x11BB, 0x110C, 0x1174, 0x11BC, 0x110C, 0x1174, 0x11BD, + 0x110C, 0x1174, 0x11BE, 0x110C, 0x1174, 0x11BF, 0x110C, 0x1174, + 0x11C0, 0x110C, 0x1174, 0x11C1, 0x110C, 0x1174, 0x11C2, 0x110C, + 0x1175, 0x110C, 0x1175, 0x11A8, 0x110C, 0x1175, 0x11A9, 0x110C, + 0x1175, 0x11AA, 0x110C, 0x1175, 0x11AB, 0x110C, 0x1175, 0x11AC, + 0x110C, 0x1175, 0x11AD, 0x110C, 0x1175, 0x11AE, 0x110C, 0x1175, + 0x11AF, 0x110C, 0x1175, 0x11B0, 0x110C, 0x1175, 0x11B1, 0x110C, + 0x1175, 0x11B2, 0x110C, 0x1175, 0x11B3, 0x110C, 0x1175, 0x11B4, + 0x110C, 0x1175, 0x11B5, 0x110C, 0x1175, 0x11B6, 0x110C, 0x1175, + 0x11B7, 0x110C, 0x1175, 0x11B8, 0x110C, 0x1175, 0x11B9, 0x110C, + 0x1175, 0x11BA, 0x110C, 0x1175, 0x11BB, 0x110C, 0x1175, 0x11BC, + 0x110C, 0x1175, 0x11BD, 0x110C, 0x1175, 0x11BE, 0x110C, 0x1175, + 0x11BF, 0x110C, 0x1175, 0x11C0, 0x110C, 0x1175, 0x11C1, 0x110C, + 0x1175, 0x11C2, 0x110D, 0x1161, 0x110D, 0x1161, 0x11A8, 0x110D, + 0x1161, 0x11A9, 0x110D, 0x1161, 0x11AA, 0x110D, 0x1161, 0x11AB, + 0x110D, 0x1161, 0x11AC, 0x110D, 0x1161, 0x11AD, 0x110D, 0x1161, + 0x11AE, 0x110D, 0x1161, 0x11AF, 0x110D, 0x1161, 0x11B0, 0x110D, + 0x1161, 0x11B1, 0x110D, 0x1161, 0x11B2, 0x110D, 0x1161, 0x11B3, + 0x110D, 0x1161, 0x11B4, 0x110D, 0x1161, 0x11B5, 0x110D, 0x1161, + 0x11B6, 0x110D, 0x1161, 0x11B7, 0x110D, 0x1161, 0x11B8, 0x110D, + 0x1161, 0x11B9, 0x110D, 0x1161, 0x11BA, 0x110D, 0x1161, 0x11BB, + 0x110D, 0x1161, 0x11BC, 0x110D, 0x1161, 0x11BD, 0x110D, 0x1161, + 0x11BE, 0x110D, 0x1161, 0x11BF, 0x110D, 0x1161, 0x11C0, 0x110D, + 0x1161, 0x11C1, 0x110D, 0x1161, 0x11C2, 0x110D, 0x1162, 0x110D, + 0x1162, 0x11A8, 0x110D, 0x1162, 0x11A9, 0x110D, 0x1162, 0x11AA, + 0x110D, 0x1162, 0x11AB, 0x110D, 0x1162, 0x11AC, 0x110D, 0x1162, + 0x11AD, 0x110D, 0x1162, 0x11AE, 0x110D, 0x1162, 0x11AF, 0x110D, + 0x1162, 0x11B0, 0x110D, 0x1162, 0x11B1, 0x110D, 0x1162, 0x11B2, + 0x110D, 0x1162, 0x11B3, 0x110D, 0x1162, 0x11B4, 0x110D, 0x1162, + 0x11B5, 0x110D, 0x1162, 0x11B6, 0x110D, 0x1162, 0x11B7, 0x110D, + 0x1162, 0x11B8, 0x110D, 0x1162, 0x11B9, 0x110D, 0x1162, 0x11BA, + 0x110D, 0x1162, 0x11BB, 0x110D, 0x1162, 0x11BC, 0x110D, 0x1162, + 0x11BD, 0x110D, 0x1162, 0x11BE, 0x110D, 0x1162, 0x11BF, 0x110D, + 0x1162, 0x11C0, 0x110D, 0x1162, 0x11C1, 0x110D, 0x1162, 0x11C2, + 0x110D, 0x1163, 0x110D, 0x1163, 0x11A8, 0x110D, 0x1163, 0x11A9, + 0x110D, 0x1163, 0x11AA, 0x110D, 0x1163, 0x11AB, 0x110D, 0x1163, + 0x11AC, 0x110D, 0x1163, 0x11AD, 0x110D, 0x1163, 0x11AE, 0x110D, + 0x1163, 0x11AF, 0x110D, 0x1163, 0x11B0, 0x110D, 0x1163, 0x11B1, + 0x110D, 0x1163, 0x11B2, 0x110D, 0x1163, 0x11B3, 0x110D, 0x1163, + 0x11B4, 0x110D, 0x1163, 0x11B5, 0x110D, 0x1163, 0x11B6, 0x110D, + 0x1163, 0x11B7, 0x110D, 0x1163, 0x11B8, 0x110D, 0x1163, 0x11B9, + 0x110D, 0x1163, 0x11BA, 0x110D, 0x1163, 0x11BB, 0x110D, 0x1163, + 0x11BC, 0x110D, 0x1163, 0x11BD, 0x110D, 0x1163, 0x11BE, 0x110D, + 0x1163, 0x11BF, 0x110D, 0x1163, 0x11C0, 0x110D, 0x1163, 0x11C1, + 0x110D, 0x1163, 0x11C2, 0x110D, 0x1164, 0x110D, 0x1164, 0x11A8, + 0x110D, 0x1164, 0x11A9, 0x110D, 0x1164, 0x11AA, 0x110D, 0x1164, + 0x11AB, 0x110D, 0x1164, 0x11AC, 0x110D, 0x1164, 0x11AD, 0x110D, + 0x1164, 0x11AE, 0x110D, 0x1164, 0x11AF, 0x110D, 0x1164, 0x11B0, + 0x110D, 0x1164, 0x11B1, 0x110D, 0x1164, 0x11B2, 0x110D, 0x1164, + 0x11B3, 0x110D, 0x1164, 0x11B4, 0x110D, 0x1164, 0x11B5, 0x110D, + 0x1164, 0x11B6, 0x110D, 0x1164, 0x11B7, 0x110D, 0x1164, 0x11B8, + 0x110D, 0x1164, 0x11B9, 0x110D, 0x1164, 0x11BA, 0x110D, 0x1164, + 0x11BB, 0x110D, 0x1164, 0x11BC, 0x110D, 0x1164, 0x11BD, 0x110D, + 0x1164, 0x11BE, 0x110D, 0x1164, 0x11BF, 0x110D, 0x1164, 0x11C0, + 0x110D, 0x1164, 0x11C1, 0x110D, 0x1164, 0x11C2, 0x110D, 0x1165, + 0x110D, 0x1165, 0x11A8, 0x110D, 0x1165, 0x11A9, 0x110D, 0x1165, + 0x11AA, 0x110D, 0x1165, 0x11AB, 0x110D, 0x1165, 0x11AC, 0x110D, + 0x1165, 0x11AD, 0x110D, 0x1165, 0x11AE, 0x110D, 0x1165, 0x11AF, + 0x110D, 0x1165, 0x11B0, 0x110D, 0x1165, 0x11B1, 0x110D, 0x1165, + 0x11B2, 0x110D, 0x1165, 0x11B3, 0x110D, 0x1165, 0x11B4, 0x110D, + 0x1165, 0x11B5, 0x110D, 0x1165, 0x11B6, 0x110D, 0x1165, 0x11B7, + 0x110D, 0x1165, 0x11B8, 0x110D, 0x1165, 0x11B9, 0x110D, 0x1165, + 0x11BA, 0x110D, 0x1165, 0x11BB, 0x110D, 0x1165, 0x11BC, 0x110D, + 0x1165, 0x11BD, 0x110D, 0x1165, 0x11BE, 0x110D, 0x1165, 0x11BF, + 0x110D, 0x1165, 0x11C0, 0x110D, 0x1165, 0x11C1, 0x110D, 0x1165, + 0x11C2, 0x110D, 0x1166, 0x110D, 0x1166, 0x11A8, 0x110D, 0x1166, + 0x11A9, 0x110D, 0x1166, 0x11AA, 0x110D, 0x1166, 0x11AB, 0x110D, + 0x1166, 0x11AC, 0x110D, 0x1166, 0x11AD, 0x110D, 0x1166, 0x11AE, + 0x110D, 0x1166, 0x11AF, 0x110D, 0x1166, 0x11B0, 0x110D, 0x1166, + 0x11B1, 0x110D, 0x1166, 0x11B2, 0x110D, 0x1166, 0x11B3, 0x110D, + 0x1166, 0x11B4, 0x110D, 0x1166, 0x11B5, 0x110D, 0x1166, 0x11B6, + 0x110D, 0x1166, 0x11B7, 0x110D, 0x1166, 0x11B8, 0x110D, 0x1166, + 0x11B9, 0x110D, 0x1166, 0x11BA, 0x110D, 0x1166, 0x11BB, 0x110D, + 0x1166, 0x11BC, 0x110D, 0x1166, 0x11BD, 0x110D, 0x1166, 0x11BE, + 0x110D, 0x1166, 0x11BF, 0x110D, 0x1166, 0x11C0, 0x110D, 0x1166, + 0x11C1, 0x110D, 0x1166, 0x11C2, 0x110D, 0x1167, 0x110D, 0x1167, + 0x11A8, 0x110D, 0x1167, 0x11A9, 0x110D, 0x1167, 0x11AA, 0x110D, + 0x1167, 0x11AB, 0x110D, 0x1167, 0x11AC, 0x110D, 0x1167, 0x11AD, + 0x110D, 0x1167, 0x11AE, 0x110D, 0x1167, 0x11AF, 0x110D, 0x1167, + 0x11B0, 0x110D, 0x1167, 0x11B1, 0x110D, 0x1167, 0x11B2, 0x110D, + 0x1167, 0x11B3, 0x110D, 0x1167, 0x11B4, 0x110D, 0x1167, 0x11B5, + 0x110D, 0x1167, 0x11B6, 0x110D, 0x1167, 0x11B7, 0x110D, 0x1167, + 0x11B8, 0x110D, 0x1167, 0x11B9, 0x110D, 0x1167, 0x11BA, 0x110D, + 0x1167, 0x11BB, 0x110D, 0x1167, 0x11BC, 0x110D, 0x1167, 0x11BD, + 0x110D, 0x1167, 0x11BE, 0x110D, 0x1167, 0x11BF, 0x110D, 0x1167, + 0x11C0, 0x110D, 0x1167, 0x11C1, 0x110D, 0x1167, 0x11C2, 0x110D, + 0x1168, 0x110D, 0x1168, 0x11A8, 0x110D, 0x1168, 0x11A9, 0x110D, + 0x1168, 0x11AA, 0x110D, 0x1168, 0x11AB, 0x110D, 0x1168, 0x11AC, + 0x110D, 0x1168, 0x11AD, 0x110D, 0x1168, 0x11AE, 0x110D, 0x1168, + 0x11AF, 0x110D, 0x1168, 0x11B0, 0x110D, 0x1168, 0x11B1, 0x110D, + 0x1168, 0x11B2, 0x110D, 0x1168, 0x11B3, 0x110D, 0x1168, 0x11B4, + 0x110D, 0x1168, 0x11B5, 0x110D, 0x1168, 0x11B6, 0x110D, 0x1168, + 0x11B7, 0x110D, 0x1168, 0x11B8, 0x110D, 0x1168, 0x11B9, 0x110D, + 0x1168, 0x11BA, 0x110D, 0x1168, 0x11BB, 0x110D, 0x1168, 0x11BC, + 0x110D, 0x1168, 0x11BD, 0x110D, 0x1168, 0x11BE, 0x110D, 0x1168, + 0x11BF, 0x110D, 0x1168, 0x11C0, 0x110D, 0x1168, 0x11C1, 0x110D, + 0x1168, 0x11C2, 0x110D, 0x1169, 0x110D, 0x1169, 0x11A8, 0x110D, + 0x1169, 0x11A9, 0x110D, 0x1169, 0x11AA, 0x110D, 0x1169, 0x11AB, + 0x110D, 0x1169, 0x11AC, 0x110D, 0x1169, 0x11AD, 0x110D, 0x1169, + 0x11AE, 0x110D, 0x1169, 0x11AF, 0x110D, 0x1169, 0x11B0, 0x110D, + 0x1169, 0x11B1, 0x110D, 0x1169, 0x11B2, 0x110D, 0x1169, 0x11B3, + 0x110D, 0x1169, 0x11B4, 0x110D, 0x1169, 0x11B5, 0x110D, 0x1169, + 0x11B6, 0x110D, 0x1169, 0x11B7, 0x110D, 0x1169, 0x11B8, 0x110D, + 0x1169, 0x11B9, 0x110D, 0x1169, 0x11BA, 0x110D, 0x1169, 0x11BB, + 0x110D, 0x1169, 0x11BC, 0x110D, 0x1169, 0x11BD, 0x110D, 0x1169, + 0x11BE, 0x110D, 0x1169, 0x11BF, 0x110D, 0x1169, 0x11C0, 0x110D, + 0x1169, 0x11C1, 0x110D, 0x1169, 0x11C2, 0x110D, 0x116A, 0x110D, + 0x116A, 0x11A8, 0x110D, 0x116A, 0x11A9, 0x110D, 0x116A, 0x11AA, + 0x110D, 0x116A, 0x11AB, 0x110D, 0x116A, 0x11AC, 0x110D, 0x116A, + 0x11AD, 0x110D, 0x116A, 0x11AE, 0x110D, 0x116A, 0x11AF, 0x110D, + 0x116A, 0x11B0, 0x110D, 0x116A, 0x11B1, 0x110D, 0x116A, 0x11B2, + 0x110D, 0x116A, 0x11B3, 0x110D, 0x116A, 0x11B4, 0x110D, 0x116A, + 0x11B5, 0x110D, 0x116A, 0x11B6, 0x110D, 0x116A, 0x11B7, 0x110D, + 0x116A, 0x11B8, 0x110D, 0x116A, 0x11B9, 0x110D, 0x116A, 0x11BA, + 0x110D, 0x116A, 0x11BB, 0x110D, 0x116A, 0x11BC, 0x110D, 0x116A, + 0x11BD, 0x110D, 0x116A, 0x11BE, 0x110D, 0x116A, 0x11BF, 0x110D, + 0x116A, 0x11C0, 0x110D, 0x116A, 0x11C1, 0x110D, 0x116A, 0x11C2, + 0x110D, 0x116B, 0x110D, 0x116B, 0x11A8, 0x110D, 0x116B, 0x11A9, + 0x110D, 0x116B, 0x11AA, 0x110D, 0x116B, 0x11AB, 0x110D, 0x116B, + 0x11AC, 0x110D, 0x116B, 0x11AD, 0x110D, 0x116B, 0x11AE, 0x110D, + 0x116B, 0x11AF, 0x110D, 0x116B, 0x11B0, 0x110D, 0x116B, 0x11B1, + 0x110D, 0x116B, 0x11B2, 0x110D, 0x116B, 0x11B3, 0x110D, 0x116B, + 0x11B4, 0x110D, 0x116B, 0x11B5, 0x110D, 0x116B, 0x11B6, 0x110D, + 0x116B, 0x11B7, 0x110D, 0x116B, 0x11B8, 0x110D, 0x116B, 0x11B9, + 0x110D, 0x116B, 0x11BA, 0x110D, 0x116B, 0x11BB, 0x110D, 0x116B, + 0x11BC, 0x110D, 0x116B, 0x11BD, 0x110D, 0x116B, 0x11BE, 0x110D, + 0x116B, 0x11BF, 0x110D, 0x116B, 0x11C0, 0x110D, 0x116B, 0x11C1, + 0x110D, 0x116B, 0x11C2, 0x110D, 0x116C, 0x110D, 0x116C, 0x11A8, + 0x110D, 0x116C, 0x11A9, 0x110D, 0x116C, 0x11AA, 0x110D, 0x116C, + 0x11AB, 0x110D, 0x116C, 0x11AC, 0x110D, 0x116C, 0x11AD, 0x110D, + 0x116C, 0x11AE, 0x110D, 0x116C, 0x11AF, 0x110D, 0x116C, 0x11B0, + 0x110D, 0x116C, 0x11B1, 0x110D, 0x116C, 0x11B2, 0x110D, 0x116C, + 0x11B3, 0x110D, 0x116C, 0x11B4, 0x110D, 0x116C, 0x11B5, 0x110D, + 0x116C, 0x11B6, 0x110D, 0x116C, 0x11B7, 0x110D, 0x116C, 0x11B8, + 0x110D, 0x116C, 0x11B9, 0x110D, 0x116C, 0x11BA, 0x110D, 0x116C, + 0x11BB, 0x110D, 0x116C, 0x11BC, 0x110D, 0x116C, 0x11BD, 0x110D, + 0x116C, 0x11BE, 0x110D, 0x116C, 0x11BF, 0x110D, 0x116C, 0x11C0, + 0x110D, 0x116C, 0x11C1, 0x110D, 0x116C, 0x11C2, 0x110D, 0x116D, + 0x110D, 0x116D, 0x11A8, 0x110D, 0x116D, 0x11A9, 0x110D, 0x116D, + 0x11AA, 0x110D, 0x116D, 0x11AB, 0x110D, 0x116D, 0x11AC, 0x110D, + 0x116D, 0x11AD, 0x110D, 0x116D, 0x11AE, 0x110D, 0x116D, 0x11AF, + 0x110D, 0x116D, 0x11B0, 0x110D, 0x116D, 0x11B1, 0x110D, 0x116D, + 0x11B2, 0x110D, 0x116D, 0x11B3, 0x110D, 0x116D, 0x11B4, 0x110D, + 0x116D, 0x11B5, 0x110D, 0x116D, 0x11B6, 0x110D, 0x116D, 0x11B7, + 0x110D, 0x116D, 0x11B8, 0x110D, 0x116D, 0x11B9, 0x110D, 0x116D, + 0x11BA, 0x110D, 0x116D, 0x11BB, 0x110D, 0x116D, 0x11BC, 0x110D, + 0x116D, 0x11BD, 0x110D, 0x116D, 0x11BE, 0x110D, 0x116D, 0x11BF, + 0x110D, 0x116D, 0x11C0, 0x110D, 0x116D, 0x11C1, 0x110D, 0x116D, + 0x11C2, 0x110D, 0x116E, 0x110D, 0x116E, 0x11A8, 0x110D, 0x116E, + 0x11A9, 0x110D, 0x116E, 0x11AA, 0x110D, 0x116E, 0x11AB, 0x110D, + 0x116E, 0x11AC, 0x110D, 0x116E, 0x11AD, 0x110D, 0x116E, 0x11AE, + 0x110D, 0x116E, 0x11AF, 0x110D, 0x116E, 0x11B0, 0x110D, 0x116E, + 0x11B1, 0x110D, 0x116E, 0x11B2, 0x110D, 0x116E, 0x11B3, 0x110D, + 0x116E, 0x11B4, 0x110D, 0x116E, 0x11B5, 0x110D, 0x116E, 0x11B6, + 0x110D, 0x116E, 0x11B7, 0x110D, 0x116E, 0x11B8, 0x110D, 0x116E, + 0x11B9, 0x110D, 0x116E, 0x11BA, 0x110D, 0x116E, 0x11BB, 0x110D, + 0x116E, 0x11BC, 0x110D, 0x116E, 0x11BD, 0x110D, 0x116E, 0x11BE, + 0x110D, 0x116E, 0x11BF, 0x110D, 0x116E, 0x11C0, 0x110D, 0x116E, + 0x11C1, 0x110D, 0x116E, 0x11C2, 0x110D, 0x116F, 0x110D, 0x116F, + 0x11A8, 0x110D, 0x116F, 0x11A9, 0x110D, 0x116F, 0x11AA, 0x110D, + 0x116F, 0x11AB, 0x110D, 0x116F, 0x11AC, 0x110D, 0x116F, 0x11AD, + 0x110D, 0x116F, 0x11AE, 0x110D, 0x116F, 0x11AF, 0x110D, 0x116F, + 0x11B0, 0x110D, 0x116F, 0x11B1, 0x110D, 0x116F, 0x11B2, 0x110D, + 0x116F, 0x11B3, 0x110D, 0x116F, 0x11B4, 0x110D, 0x116F, 0x11B5, + 0x110D, 0x116F, 0x11B6, 0x110D, 0x116F, 0x11B7, 0x110D, 0x116F, + 0x11B8, 0x110D, 0x116F, 0x11B9, 0x110D, 0x116F, 0x11BA, 0x110D, + 0x116F, 0x11BB, 0x110D, 0x116F, 0x11BC, 0x110D, 0x116F, 0x11BD, + 0x110D, 0x116F, 0x11BE, 0x110D, 0x116F, 0x11BF, 0x110D, 0x116F, + 0x11C0, 0x110D, 0x116F, 0x11C1, 0x110D, 0x116F, 0x11C2, 0x110D, + 0x1170, 0x110D, 0x1170, 0x11A8, 0x110D, 0x1170, 0x11A9, 0x110D, + 0x1170, 0x11AA, 0x110D, 0x1170, 0x11AB, 0x110D, 0x1170, 0x11AC, + 0x110D, 0x1170, 0x11AD, 0x110D, 0x1170, 0x11AE, 0x110D, 0x1170, + 0x11AF, 0x110D, 0x1170, 0x11B0, 0x110D, 0x1170, 0x11B1, 0x110D, + 0x1170, 0x11B2, 0x110D, 0x1170, 0x11B3, 0x110D, 0x1170, 0x11B4, + 0x110D, 0x1170, 0x11B5, 0x110D, 0x1170, 0x11B6, 0x110D, 0x1170, + 0x11B7, 0x110D, 0x1170, 0x11B8, 0x110D, 0x1170, 0x11B9, 0x110D, + 0x1170, 0x11BA, 0x110D, 0x1170, 0x11BB, 0x110D, 0x1170, 0x11BC, + 0x110D, 0x1170, 0x11BD, 0x110D, 0x1170, 0x11BE, 0x110D, 0x1170, + 0x11BF, 0x110D, 0x1170, 0x11C0, 0x110D, 0x1170, 0x11C1, 0x110D, + 0x1170, 0x11C2, 0x110D, 0x1171, 0x110D, 0x1171, 0x11A8, 0x110D, + 0x1171, 0x11A9, 0x110D, 0x1171, 0x11AA, 0x110D, 0x1171, 0x11AB, + 0x110D, 0x1171, 0x11AC, 0x110D, 0x1171, 0x11AD, 0x110D, 0x1171, + 0x11AE, 0x110D, 0x1171, 0x11AF, 0x110D, 0x1171, 0x11B0, 0x110D, + 0x1171, 0x11B1, 0x110D, 0x1171, 0x11B2, 0x110D, 0x1171, 0x11B3, + 0x110D, 0x1171, 0x11B4, 0x110D, 0x1171, 0x11B5, 0x110D, 0x1171, + 0x11B6, 0x110D, 0x1171, 0x11B7, 0x110D, 0x1171, 0x11B8, 0x110D, + 0x1171, 0x11B9, 0x110D, 0x1171, 0x11BA, 0x110D, 0x1171, 0x11BB, + 0x110D, 0x1171, 0x11BC, 0x110D, 0x1171, 0x11BD, 0x110D, 0x1171, + 0x11BE, 0x110D, 0x1171, 0x11BF, 0x110D, 0x1171, 0x11C0, 0x110D, + 0x1171, 0x11C1, 0x110D, 0x1171, 0x11C2, 0x110D, 0x1172, 0x110D, + 0x1172, 0x11A8, 0x110D, 0x1172, 0x11A9, 0x110D, 0x1172, 0x11AA, + 0x110D, 0x1172, 0x11AB, 0x110D, 0x1172, 0x11AC, 0x110D, 0x1172, + 0x11AD, 0x110D, 0x1172, 0x11AE, 0x110D, 0x1172, 0x11AF, 0x110D, + 0x1172, 0x11B0, 0x110D, 0x1172, 0x11B1, 0x110D, 0x1172, 0x11B2, + 0x110D, 0x1172, 0x11B3, 0x110D, 0x1172, 0x11B4, 0x110D, 0x1172, + 0x11B5, 0x110D, 0x1172, 0x11B6, 0x110D, 0x1172, 0x11B7, 0x110D, + 0x1172, 0x11B8, 0x110D, 0x1172, 0x11B9, 0x110D, 0x1172, 0x11BA, + 0x110D, 0x1172, 0x11BB, 0x110D, 0x1172, 0x11BC, 0x110D, 0x1172, + 0x11BD, 0x110D, 0x1172, 0x11BE, 0x110D, 0x1172, 0x11BF, 0x110D, + 0x1172, 0x11C0, 0x110D, 0x1172, 0x11C1, 0x110D, 0x1172, 0x11C2, + 0x110D, 0x1173, 0x110D, 0x1173, 0x11A8, 0x110D, 0x1173, 0x11A9, + 0x110D, 0x1173, 0x11AA, 0x110D, 0x1173, 0x11AB, 0x110D, 0x1173, + 0x11AC, 0x110D, 0x1173, 0x11AD, 0x110D, 0x1173, 0x11AE, 0x110D, + 0x1173, 0x11AF, 0x110D, 0x1173, 0x11B0, 0x110D, 0x1173, 0x11B1, + 0x110D, 0x1173, 0x11B2, 0x110D, 0x1173, 0x11B3, 0x110D, 0x1173, + 0x11B4, 0x110D, 0x1173, 0x11B5, 0x110D, 0x1173, 0x11B6, 0x110D, + 0x1173, 0x11B7, 0x110D, 0x1173, 0x11B8, 0x110D, 0x1173, 0x11B9, + 0x110D, 0x1173, 0x11BA, 0x110D, 0x1173, 0x11BB, 0x110D, 0x1173, + 0x11BC, 0x110D, 0x1173, 0x11BD, 0x110D, 0x1173, 0x11BE, 0x110D, + 0x1173, 0x11BF, 0x110D, 0x1173, 0x11C0, 0x110D, 0x1173, 0x11C1, + 0x110D, 0x1173, 0x11C2, 0x110D, 0x1174, 0x110D, 0x1174, 0x11A8, + 0x110D, 0x1174, 0x11A9, 0x110D, 0x1174, 0x11AA, 0x110D, 0x1174, + 0x11AB, 0x110D, 0x1174, 0x11AC, 0x110D, 0x1174, 0x11AD, 0x110D, + 0x1174, 0x11AE, 0x110D, 0x1174, 0x11AF, 0x110D, 0x1174, 0x11B0, + 0x110D, 0x1174, 0x11B1, 0x110D, 0x1174, 0x11B2, 0x110D, 0x1174, + 0x11B3, 0x110D, 0x1174, 0x11B4, 0x110D, 0x1174, 0x11B5, 0x110D, + 0x1174, 0x11B6, 0x110D, 0x1174, 0x11B7, 0x110D, 0x1174, 0x11B8, + 0x110D, 0x1174, 0x11B9, 0x110D, 0x1174, 0x11BA, 0x110D, 0x1174, + 0x11BB, 0x110D, 0x1174, 0x11BC, 0x110D, 0x1174, 0x11BD, 0x110D, + 0x1174, 0x11BE, 0x110D, 0x1174, 0x11BF, 0x110D, 0x1174, 0x11C0, + 0x110D, 0x1174, 0x11C1, 0x110D, 0x1174, 0x11C2, 0x110D, 0x1175, + 0x110D, 0x1175, 0x11A8, 0x110D, 0x1175, 0x11A9, 0x110D, 0x1175, + 0x11AA, 0x110D, 0x1175, 0x11AB, 0x110D, 0x1175, 0x11AC, 0x110D, + 0x1175, 0x11AD, 0x110D, 0x1175, 0x11AE, 0x110D, 0x1175, 0x11AF, + 0x110D, 0x1175, 0x11B0, 0x110D, 0x1175, 0x11B1, 0x110D, 0x1175, + 0x11B2, 0x110D, 0x1175, 0x11B3, 0x110D, 0x1175, 0x11B4, 0x110D, + 0x1175, 0x11B5, 0x110D, 0x1175, 0x11B6, 0x110D, 0x1175, 0x11B7, + 0x110D, 0x1175, 0x11B8, 0x110D, 0x1175, 0x11B9, 0x110D, 0x1175, + 0x11BA, 0x110D, 0x1175, 0x11BB, 0x110D, 0x1175, 0x11BC, 0x110D, + 0x1175, 0x11BD, 0x110D, 0x1175, 0x11BE, 0x110D, 0x1175, 0x11BF, + 0x110D, 0x1175, 0x11C0, 0x110D, 0x1175, 0x11C1, 0x110D, 0x1175, + 0x11C2, 0x110E, 0x1161, 0x110E, 0x1161, 0x11A8, 0x110E, 0x1161, + 0x11A9, 0x110E, 0x1161, 0x11AA, 0x110E, 0x1161, 0x11AB, 0x110E, + 0x1161, 0x11AC, 0x110E, 0x1161, 0x11AD, 0x110E, 0x1161, 0x11AE, + 0x110E, 0x1161, 0x11AF, 0x110E, 0x1161, 0x11B0, 0x110E, 0x1161, + 0x11B1, 0x110E, 0x1161, 0x11B2, 0x110E, 0x1161, 0x11B3, 0x110E, + 0x1161, 0x11B4, 0x110E, 0x1161, 0x11B5, 0x110E, 0x1161, 0x11B6, + 0x110E, 0x1161, 0x11B7, 0x110E, 0x1161, 0x11B8, 0x110E, 0x1161, + 0x11B9, 0x110E, 0x1161, 0x11BA, 0x110E, 0x1161, 0x11BB, 0x110E, + 0x1161, 0x11BC, 0x110E, 0x1161, 0x11BD, 0x110E, 0x1161, 0x11BE, + 0x110E, 0x1161, 0x11BF, 0x110E, 0x1161, 0x11C0, 0x110E, 0x1161, + 0x11C1, 0x110E, 0x1161, 0x11C2, 0x110E, 0x1162, 0x110E, 0x1162, + 0x11A8, 0x110E, 0x1162, 0x11A9, 0x110E, 0x1162, 0x11AA, 0x110E, + 0x1162, 0x11AB, 0x110E, 0x1162, 0x11AC, 0x110E, 0x1162, 0x11AD, + 0x110E, 0x1162, 0x11AE, 0x110E, 0x1162, 0x11AF, 0x110E, 0x1162, + 0x11B0, 0x110E, 0x1162, 0x11B1, 0x110E, 0x1162, 0x11B2, 0x110E, + 0x1162, 0x11B3, 0x110E, 0x1162, 0x11B4, 0x110E, 0x1162, 0x11B5, + 0x110E, 0x1162, 0x11B6, 0x110E, 0x1162, 0x11B7, 0x110E, 0x1162, + 0x11B8, 0x110E, 0x1162, 0x11B9, 0x110E, 0x1162, 0x11BA, 0x110E, + 0x1162, 0x11BB, 0x110E, 0x1162, 0x11BC, 0x110E, 0x1162, 0x11BD, + 0x110E, 0x1162, 0x11BE, 0x110E, 0x1162, 0x11BF, 0x110E, 0x1162, + 0x11C0, 0x110E, 0x1162, 0x11C1, 0x110E, 0x1162, 0x11C2, 0x110E, + 0x1163, 0x110E, 0x1163, 0x11A8, 0x110E, 0x1163, 0x11A9, 0x110E, + 0x1163, 0x11AA, 0x110E, 0x1163, 0x11AB, 0x110E, 0x1163, 0x11AC, + 0x110E, 0x1163, 0x11AD, 0x110E, 0x1163, 0x11AE, 0x110E, 0x1163, + 0x11AF, 0x110E, 0x1163, 0x11B0, 0x110E, 0x1163, 0x11B1, 0x110E, + 0x1163, 0x11B2, 0x110E, 0x1163, 0x11B3, 0x110E, 0x1163, 0x11B4, + 0x110E, 0x1163, 0x11B5, 0x110E, 0x1163, 0x11B6, 0x110E, 0x1163, + 0x11B7, 0x110E, 0x1163, 0x11B8, 0x110E, 0x1163, 0x11B9, 0x110E, + 0x1163, 0x11BA, 0x110E, 0x1163, 0x11BB, 0x110E, 0x1163, 0x11BC, + 0x110E, 0x1163, 0x11BD, 0x110E, 0x1163, 0x11BE, 0x110E, 0x1163, + 0x11BF, 0x110E, 0x1163, 0x11C0, 0x110E, 0x1163, 0x11C1, 0x110E, + 0x1163, 0x11C2, 0x110E, 0x1164, 0x110E, 0x1164, 0x11A8, 0x110E, + 0x1164, 0x11A9, 0x110E, 0x1164, 0x11AA, 0x110E, 0x1164, 0x11AB, + 0x110E, 0x1164, 0x11AC, 0x110E, 0x1164, 0x11AD, 0x110E, 0x1164, + 0x11AE, 0x110E, 0x1164, 0x11AF, 0x110E, 0x1164, 0x11B0, 0x110E, + 0x1164, 0x11B1, 0x110E, 0x1164, 0x11B2, 0x110E, 0x1164, 0x11B3, + 0x110E, 0x1164, 0x11B4, 0x110E, 0x1164, 0x11B5, 0x110E, 0x1164, + 0x11B6, 0x110E, 0x1164, 0x11B7, 0x110E, 0x1164, 0x11B8, 0x110E, + 0x1164, 0x11B9, 0x110E, 0x1164, 0x11BA, 0x110E, 0x1164, 0x11BB, + 0x110E, 0x1164, 0x11BC, 0x110E, 0x1164, 0x11BD, 0x110E, 0x1164, + 0x11BE, 0x110E, 0x1164, 0x11BF, 0x110E, 0x1164, 0x11C0, 0x110E, + 0x1164, 0x11C1, 0x110E, 0x1164, 0x11C2, 0x110E, 0x1165, 0x110E, + 0x1165, 0x11A8, 0x110E, 0x1165, 0x11A9, 0x110E, 0x1165, 0x11AA, + 0x110E, 0x1165, 0x11AB, 0x110E, 0x1165, 0x11AC, 0x110E, 0x1165, + 0x11AD, 0x110E, 0x1165, 0x11AE, 0x110E, 0x1165, 0x11AF, 0x110E, + 0x1165, 0x11B0, 0x110E, 0x1165, 0x11B1, 0x110E, 0x1165, 0x11B2, + 0x110E, 0x1165, 0x11B3, 0x110E, 0x1165, 0x11B4, 0x110E, 0x1165, + 0x11B5, 0x110E, 0x1165, 0x11B6, 0x110E, 0x1165, 0x11B7, 0x110E, + 0x1165, 0x11B8, 0x110E, 0x1165, 0x11B9, 0x110E, 0x1165, 0x11BA, + 0x110E, 0x1165, 0x11BB, 0x110E, 0x1165, 0x11BC, 0x110E, 0x1165, + 0x11BD, 0x110E, 0x1165, 0x11BE, 0x110E, 0x1165, 0x11BF, 0x110E, + 0x1165, 0x11C0, 0x110E, 0x1165, 0x11C1, 0x110E, 0x1165, 0x11C2, + 0x110E, 0x1166, 0x110E, 0x1166, 0x11A8, 0x110E, 0x1166, 0x11A9, + 0x110E, 0x1166, 0x11AA, 0x110E, 0x1166, 0x11AB, 0x110E, 0x1166, + 0x11AC, 0x110E, 0x1166, 0x11AD, 0x110E, 0x1166, 0x11AE, 0x110E, + 0x1166, 0x11AF, 0x110E, 0x1166, 0x11B0, 0x110E, 0x1166, 0x11B1, + 0x110E, 0x1166, 0x11B2, 0x110E, 0x1166, 0x11B3, 0x110E, 0x1166, + 0x11B4, 0x110E, 0x1166, 0x11B5, 0x110E, 0x1166, 0x11B6, 0x110E, + 0x1166, 0x11B7, 0x110E, 0x1166, 0x11B8, 0x110E, 0x1166, 0x11B9, + 0x110E, 0x1166, 0x11BA, 0x110E, 0x1166, 0x11BB, 0x110E, 0x1166, + 0x11BC, 0x110E, 0x1166, 0x11BD, 0x110E, 0x1166, 0x11BE, 0x110E, + 0x1166, 0x11BF, 0x110E, 0x1166, 0x11C0, 0x110E, 0x1166, 0x11C1, + 0x110E, 0x1166, 0x11C2, 0x110E, 0x1167, 0x110E, 0x1167, 0x11A8, + 0x110E, 0x1167, 0x11A9, 0x110E, 0x1167, 0x11AA, 0x110E, 0x1167, + 0x11AB, 0x110E, 0x1167, 0x11AC, 0x110E, 0x1167, 0x11AD, 0x110E, + 0x1167, 0x11AE, 0x110E, 0x1167, 0x11AF, 0x110E, 0x1167, 0x11B0, + 0x110E, 0x1167, 0x11B1, 0x110E, 0x1167, 0x11B2, 0x110E, 0x1167, + 0x11B3, 0x110E, 0x1167, 0x11B4, 0x110E, 0x1167, 0x11B5, 0x110E, + 0x1167, 0x11B6, 0x110E, 0x1167, 0x11B7, 0x110E, 0x1167, 0x11B8, + 0x110E, 0x1167, 0x11B9, 0x110E, 0x1167, 0x11BA, 0x110E, 0x1167, + 0x11BB, 0x110E, 0x1167, 0x11BC, 0x110E, 0x1167, 0x11BD, 0x110E, + 0x1167, 0x11BE, 0x110E, 0x1167, 0x11BF, 0x110E, 0x1167, 0x11C0, + 0x110E, 0x1167, 0x11C1, 0x110E, 0x1167, 0x11C2, 0x110E, 0x1168, + 0x110E, 0x1168, 0x11A8, 0x110E, 0x1168, 0x11A9, 0x110E, 0x1168, + 0x11AA, 0x110E, 0x1168, 0x11AB, 0x110E, 0x1168, 0x11AC, 0x110E, + 0x1168, 0x11AD, 0x110E, 0x1168, 0x11AE, 0x110E, 0x1168, 0x11AF, + 0x110E, 0x1168, 0x11B0, 0x110E, 0x1168, 0x11B1, 0x110E, 0x1168, + 0x11B2, 0x110E, 0x1168, 0x11B3, 0x110E, 0x1168, 0x11B4, 0x110E, + 0x1168, 0x11B5, 0x110E, 0x1168, 0x11B6, 0x110E, 0x1168, 0x11B7, + 0x110E, 0x1168, 0x11B8, 0x110E, 0x1168, 0x11B9, 0x110E, 0x1168, + 0x11BA, 0x110E, 0x1168, 0x11BB, 0x110E, 0x1168, 0x11BC, 0x110E, + 0x1168, 0x11BD, 0x110E, 0x1168, 0x11BE, 0x110E, 0x1168, 0x11BF, + 0x110E, 0x1168, 0x11C0, 0x110E, 0x1168, 0x11C1, 0x110E, 0x1168, + 0x11C2, 0x110E, 0x1169, 0x110E, 0x1169, 0x11A8, 0x110E, 0x1169, + 0x11A9, 0x110E, 0x1169, 0x11AA, 0x110E, 0x1169, 0x11AB, 0x110E, + 0x1169, 0x11AC, 0x110E, 0x1169, 0x11AD, 0x110E, 0x1169, 0x11AE, + 0x110E, 0x1169, 0x11AF, 0x110E, 0x1169, 0x11B0, 0x110E, 0x1169, + 0x11B1, 0x110E, 0x1169, 0x11B2, 0x110E, 0x1169, 0x11B3, 0x110E, + 0x1169, 0x11B4, 0x110E, 0x1169, 0x11B5, 0x110E, 0x1169, 0x11B6, + 0x110E, 0x1169, 0x11B7, 0x110E, 0x1169, 0x11B8, 0x110E, 0x1169, + 0x11B9, 0x110E, 0x1169, 0x11BA, 0x110E, 0x1169, 0x11BB, 0x110E, + 0x1169, 0x11BC, 0x110E, 0x1169, 0x11BD, 0x110E, 0x1169, 0x11BE, + 0x110E, 0x1169, 0x11BF, 0x110E, 0x1169, 0x11C0, 0x110E, 0x1169, + 0x11C1, 0x110E, 0x1169, 0x11C2, 0x110E, 0x116A, 0x110E, 0x116A, + 0x11A8, 0x110E, 0x116A, 0x11A9, 0x110E, 0x116A, 0x11AA, 0x110E, + 0x116A, 0x11AB, 0x110E, 0x116A, 0x11AC, 0x110E, 0x116A, 0x11AD, + 0x110E, 0x116A, 0x11AE, 0x110E, 0x116A, 0x11AF, 0x110E, 0x116A, + 0x11B0, 0x110E, 0x116A, 0x11B1, 0x110E, 0x116A, 0x11B2, 0x110E, + 0x116A, 0x11B3, 0x110E, 0x116A, 0x11B4, 0x110E, 0x116A, 0x11B5, + 0x110E, 0x116A, 0x11B6, 0x110E, 0x116A, 0x11B7, 0x110E, 0x116A, + 0x11B8, 0x110E, 0x116A, 0x11B9, 0x110E, 0x116A, 0x11BA, 0x110E, + 0x116A, 0x11BB, 0x110E, 0x116A, 0x11BC, 0x110E, 0x116A, 0x11BD, + 0x110E, 0x116A, 0x11BE, 0x110E, 0x116A, 0x11BF, 0x110E, 0x116A, + 0x11C0, 0x110E, 0x116A, 0x11C1, 0x110E, 0x116A, 0x11C2, 0x110E, + 0x116B, 0x110E, 0x116B, 0x11A8, 0x110E, 0x116B, 0x11A9, 0x110E, + 0x116B, 0x11AA, 0x110E, 0x116B, 0x11AB, 0x110E, 0x116B, 0x11AC, + 0x110E, 0x116B, 0x11AD, 0x110E, 0x116B, 0x11AE, 0x110E, 0x116B, + 0x11AF, 0x110E, 0x116B, 0x11B0, 0x110E, 0x116B, 0x11B1, 0x110E, + 0x116B, 0x11B2, 0x110E, 0x116B, 0x11B3, 0x110E, 0x116B, 0x11B4, + 0x110E, 0x116B, 0x11B5, 0x110E, 0x116B, 0x11B6, 0x110E, 0x116B, + 0x11B7, 0x110E, 0x116B, 0x11B8, 0x110E, 0x116B, 0x11B9, 0x110E, + 0x116B, 0x11BA, 0x110E, 0x116B, 0x11BB, 0x110E, 0x116B, 0x11BC, + 0x110E, 0x116B, 0x11BD, 0x110E, 0x116B, 0x11BE, 0x110E, 0x116B, + 0x11BF, 0x110E, 0x116B, 0x11C0, 0x110E, 0x116B, 0x11C1, 0x110E, + 0x116B, 0x11C2, 0x110E, 0x116C, 0x110E, 0x116C, 0x11A8, 0x110E, + 0x116C, 0x11A9, 0x110E, 0x116C, 0x11AA, 0x110E, 0x116C, 0x11AB, + 0x110E, 0x116C, 0x11AC, 0x110E, 0x116C, 0x11AD, 0x110E, 0x116C, + 0x11AE, 0x110E, 0x116C, 0x11AF, 0x110E, 0x116C, 0x11B0, 0x110E, + 0x116C, 0x11B1, 0x110E, 0x116C, 0x11B2, 0x110E, 0x116C, 0x11B3, + 0x110E, 0x116C, 0x11B4, 0x110E, 0x116C, 0x11B5, 0x110E, 0x116C, + 0x11B6, 0x110E, 0x116C, 0x11B7, 0x110E, 0x116C, 0x11B8, 0x110E, + 0x116C, 0x11B9, 0x110E, 0x116C, 0x11BA, 0x110E, 0x116C, 0x11BB, + 0x110E, 0x116C, 0x11BC, 0x110E, 0x116C, 0x11BD, 0x110E, 0x116C, + 0x11BE, 0x110E, 0x116C, 0x11BF, 0x110E, 0x116C, 0x11C0, 0x110E, + 0x116C, 0x11C1, 0x110E, 0x116C, 0x11C2, 0x110E, 0x116D, 0x110E, + 0x116D, 0x11A8, 0x110E, 0x116D, 0x11A9, 0x110E, 0x116D, 0x11AA, + 0x110E, 0x116D, 0x11AB, 0x110E, 0x116D, 0x11AC, 0x110E, 0x116D, + 0x11AD, 0x110E, 0x116D, 0x11AE, 0x110E, 0x116D, 0x11AF, 0x110E, + 0x116D, 0x11B0, 0x110E, 0x116D, 0x11B1, 0x110E, 0x116D, 0x11B2, + 0x110E, 0x116D, 0x11B3, 0x110E, 0x116D, 0x11B4, 0x110E, 0x116D, + 0x11B5, 0x110E, 0x116D, 0x11B6, 0x110E, 0x116D, 0x11B7, 0x110E, + 0x116D, 0x11B8, 0x110E, 0x116D, 0x11B9, 0x110E, 0x116D, 0x11BA, + 0x110E, 0x116D, 0x11BB, 0x110E, 0x116D, 0x11BC, 0x110E, 0x116D, + 0x11BD, 0x110E, 0x116D, 0x11BE, 0x110E, 0x116D, 0x11BF, 0x110E, + 0x116D, 0x11C0, 0x110E, 0x116D, 0x11C1, 0x110E, 0x116D, 0x11C2, + 0x110E, 0x116E, 0x110E, 0x116E, 0x11A8, 0x110E, 0x116E, 0x11A9, + 0x110E, 0x116E, 0x11AA, 0x110E, 0x116E, 0x11AB, 0x110E, 0x116E, + 0x11AC, 0x110E, 0x116E, 0x11AD, 0x110E, 0x116E, 0x11AE, 0x110E, + 0x116E, 0x11AF, 0x110E, 0x116E, 0x11B0, 0x110E, 0x116E, 0x11B1, + 0x110E, 0x116E, 0x11B2, 0x110E, 0x116E, 0x11B3, 0x110E, 0x116E, + 0x11B4, 0x110E, 0x116E, 0x11B5, 0x110E, 0x116E, 0x11B6, 0x110E, + 0x116E, 0x11B7, 0x110E, 0x116E, 0x11B8, 0x110E, 0x116E, 0x11B9, + 0x110E, 0x116E, 0x11BA, 0x110E, 0x116E, 0x11BB, 0x110E, 0x116E, + 0x11BC, 0x110E, 0x116E, 0x11BD, 0x110E, 0x116E, 0x11BE, 0x110E, + 0x116E, 0x11BF, 0x110E, 0x116E, 0x11C0, 0x110E, 0x116E, 0x11C1, + 0x110E, 0x116E, 0x11C2, 0x110E, 0x116F, 0x110E, 0x116F, 0x11A8, + 0x110E, 0x116F, 0x11A9, 0x110E, 0x116F, 0x11AA, 0x110E, 0x116F, + 0x11AB, 0x110E, 0x116F, 0x11AC, 0x110E, 0x116F, 0x11AD, 0x110E, + 0x116F, 0x11AE, 0x110E, 0x116F, 0x11AF, 0x110E, 0x116F, 0x11B0, + 0x110E, 0x116F, 0x11B1, 0x110E, 0x116F, 0x11B2, 0x110E, 0x116F, + 0x11B3, 0x110E, 0x116F, 0x11B4, 0x110E, 0x116F, 0x11B5, 0x110E, + 0x116F, 0x11B6, 0x110E, 0x116F, 0x11B7, 0x110E, 0x116F, 0x11B8, + 0x110E, 0x116F, 0x11B9, 0x110E, 0x116F, 0x11BA, 0x110E, 0x116F, + 0x11BB, 0x110E, 0x116F, 0x11BC, 0x110E, 0x116F, 0x11BD, 0x110E, + 0x116F, 0x11BE, 0x110E, 0x116F, 0x11BF, 0x110E, 0x116F, 0x11C0, + 0x110E, 0x116F, 0x11C1, 0x110E, 0x116F, 0x11C2, 0x110E, 0x1170, + 0x110E, 0x1170, 0x11A8, 0x110E, 0x1170, 0x11A9, 0x110E, 0x1170, + 0x11AA, 0x110E, 0x1170, 0x11AB, 0x110E, 0x1170, 0x11AC, 0x110E, + 0x1170, 0x11AD, 0x110E, 0x1170, 0x11AE, 0x110E, 0x1170, 0x11AF, + 0x110E, 0x1170, 0x11B0, 0x110E, 0x1170, 0x11B1, 0x110E, 0x1170, + 0x11B2, 0x110E, 0x1170, 0x11B3, 0x110E, 0x1170, 0x11B4, 0x110E, + 0x1170, 0x11B5, 0x110E, 0x1170, 0x11B6, 0x110E, 0x1170, 0x11B7, + 0x110E, 0x1170, 0x11B8, 0x110E, 0x1170, 0x11B9, 0x110E, 0x1170, + 0x11BA, 0x110E, 0x1170, 0x11BB, 0x110E, 0x1170, 0x11BC, 0x110E, + 0x1170, 0x11BD, 0x110E, 0x1170, 0x11BE, 0x110E, 0x1170, 0x11BF, + 0x110E, 0x1170, 0x11C0, 0x110E, 0x1170, 0x11C1, 0x110E, 0x1170, + 0x11C2, 0x110E, 0x1171, 0x110E, 0x1171, 0x11A8, 0x110E, 0x1171, + 0x11A9, 0x110E, 0x1171, 0x11AA, 0x110E, 0x1171, 0x11AB, 0x110E, + 0x1171, 0x11AC, 0x110E, 0x1171, 0x11AD, 0x110E, 0x1171, 0x11AE, + 0x110E, 0x1171, 0x11AF, 0x110E, 0x1171, 0x11B0, 0x110E, 0x1171, + 0x11B1, 0x110E, 0x1171, 0x11B2, 0x110E, 0x1171, 0x11B3, 0x110E, + 0x1171, 0x11B4, 0x110E, 0x1171, 0x11B5, 0x110E, 0x1171, 0x11B6, + 0x110E, 0x1171, 0x11B7, 0x110E, 0x1171, 0x11B8, 0x110E, 0x1171, + 0x11B9, 0x110E, 0x1171, 0x11BA, 0x110E, 0x1171, 0x11BB, 0x110E, + 0x1171, 0x11BC, 0x110E, 0x1171, 0x11BD, 0x110E, 0x1171, 0x11BE, + 0x110E, 0x1171, 0x11BF, 0x110E, 0x1171, 0x11C0, 0x110E, 0x1171, + 0x11C1, 0x110E, 0x1171, 0x11C2, 0x110E, 0x1172, 0x110E, 0x1172, + 0x11A8, 0x110E, 0x1172, 0x11A9, 0x110E, 0x1172, 0x11AA, 0x110E, + 0x1172, 0x11AB, 0x110E, 0x1172, 0x11AC, 0x110E, 0x1172, 0x11AD, + 0x110E, 0x1172, 0x11AE, 0x110E, 0x1172, 0x11AF, 0x110E, 0x1172, + 0x11B0, 0x110E, 0x1172, 0x11B1, 0x110E, 0x1172, 0x11B2, 0x110E, + 0x1172, 0x11B3, 0x110E, 0x1172, 0x11B4, 0x110E, 0x1172, 0x11B5, + 0x110E, 0x1172, 0x11B6, 0x110E, 0x1172, 0x11B7, 0x110E, 0x1172, + 0x11B8, 0x110E, 0x1172, 0x11B9, 0x110E, 0x1172, 0x11BA, 0x110E, + 0x1172, 0x11BB, 0x110E, 0x1172, 0x11BC, 0x110E, 0x1172, 0x11BD, + 0x110E, 0x1172, 0x11BE, 0x110E, 0x1172, 0x11BF, 0x110E, 0x1172, + 0x11C0, 0x110E, 0x1172, 0x11C1, 0x110E, 0x1172, 0x11C2, 0x110E, + 0x1173, 0x110E, 0x1173, 0x11A8, 0x110E, 0x1173, 0x11A9, 0x110E, + 0x1173, 0x11AA, 0x110E, 0x1173, 0x11AB, 0x110E, 0x1173, 0x11AC, + 0x110E, 0x1173, 0x11AD, 0x110E, 0x1173, 0x11AE, 0x110E, 0x1173, + 0x11AF, 0x110E, 0x1173, 0x11B0, 0x110E, 0x1173, 0x11B1, 0x110E, + 0x1173, 0x11B2, 0x110E, 0x1173, 0x11B3, 0x110E, 0x1173, 0x11B4, + 0x110E, 0x1173, 0x11B5, 0x110E, 0x1173, 0x11B6, 0x110E, 0x1173, + 0x11B7, 0x110E, 0x1173, 0x11B8, 0x110E, 0x1173, 0x11B9, 0x110E, + 0x1173, 0x11BA, 0x110E, 0x1173, 0x11BB, 0x110E, 0x1173, 0x11BC, + 0x110E, 0x1173, 0x11BD, 0x110E, 0x1173, 0x11BE, 0x110E, 0x1173, + 0x11BF, 0x110E, 0x1173, 0x11C0, 0x110E, 0x1173, 0x11C1, 0x110E, + 0x1173, 0x11C2, 0x110E, 0x1174, 0x110E, 0x1174, 0x11A8, 0x110E, + 0x1174, 0x11A9, 0x110E, 0x1174, 0x11AA, 0x110E, 0x1174, 0x11AB, + 0x110E, 0x1174, 0x11AC, 0x110E, 0x1174, 0x11AD, 0x110E, 0x1174, + 0x11AE, 0x110E, 0x1174, 0x11AF, 0x110E, 0x1174, 0x11B0, 0x110E, + 0x1174, 0x11B1, 0x110E, 0x1174, 0x11B2, 0x110E, 0x1174, 0x11B3, + 0x110E, 0x1174, 0x11B4, 0x110E, 0x1174, 0x11B5, 0x110E, 0x1174, + 0x11B6, 0x110E, 0x1174, 0x11B7, 0x110E, 0x1174, 0x11B8, 0x110E, + 0x1174, 0x11B9, 0x110E, 0x1174, 0x11BA, 0x110E, 0x1174, 0x11BB, + 0x110E, 0x1174, 0x11BC, 0x110E, 0x1174, 0x11BD, 0x110E, 0x1174, + 0x11BE, 0x110E, 0x1174, 0x11BF, 0x110E, 0x1174, 0x11C0, 0x110E, + 0x1174, 0x11C1, 0x110E, 0x1174, 0x11C2, 0x110E, 0x1175, 0x110E, + 0x1175, 0x11A8, 0x110E, 0x1175, 0x11A9, 0x110E, 0x1175, 0x11AA, + 0x110E, 0x1175, 0x11AB, 0x110E, 0x1175, 0x11AC, 0x110E, 0x1175, + 0x11AD, 0x110E, 0x1175, 0x11AE, 0x110E, 0x1175, 0x11AF, 0x110E, + 0x1175, 0x11B0, 0x110E, 0x1175, 0x11B1, 0x110E, 0x1175, 0x11B2, + 0x110E, 0x1175, 0x11B3, 0x110E, 0x1175, 0x11B4, 0x110E, 0x1175, + 0x11B5, 0x110E, 0x1175, 0x11B6, 0x110E, 0x1175, 0x11B7, 0x110E, + 0x1175, 0x11B8, 0x110E, 0x1175, 0x11B9, 0x110E, 0x1175, 0x11BA, + 0x110E, 0x1175, 0x11BB, 0x110E, 0x1175, 0x11BC, 0x110E, 0x1175, + 0x11BD, 0x110E, 0x1175, 0x11BE, 0x110E, 0x1175, 0x11BF, 0x110E, + 0x1175, 0x11C0, 0x110E, 0x1175, 0x11C1, 0x110E, 0x1175, 0x11C2, + 0x110F, 0x1161, 0x110F, 0x1161, 0x11A8, 0x110F, 0x1161, 0x11A9, + 0x110F, 0x1161, 0x11AA, 0x110F, 0x1161, 0x11AB, 0x110F, 0x1161, + 0x11AC, 0x110F, 0x1161, 0x11AD, 0x110F, 0x1161, 0x11AE, 0x110F, + 0x1161, 0x11AF, 0x110F, 0x1161, 0x11B0, 0x110F, 0x1161, 0x11B1, + 0x110F, 0x1161, 0x11B2, 0x110F, 0x1161, 0x11B3, 0x110F, 0x1161, + 0x11B4, 0x110F, 0x1161, 0x11B5, 0x110F, 0x1161, 0x11B6, 0x110F, + 0x1161, 0x11B7, 0x110F, 0x1161, 0x11B8, 0x110F, 0x1161, 0x11B9, + 0x110F, 0x1161, 0x11BA, 0x110F, 0x1161, 0x11BB, 0x110F, 0x1161, + 0x11BC, 0x110F, 0x1161, 0x11BD, 0x110F, 0x1161, 0x11BE, 0x110F, + 0x1161, 0x11BF, 0x110F, 0x1161, 0x11C0, 0x110F, 0x1161, 0x11C1, + 0x110F, 0x1161, 0x11C2, 0x110F, 0x1162, 0x110F, 0x1162, 0x11A8, + 0x110F, 0x1162, 0x11A9, 0x110F, 0x1162, 0x11AA, 0x110F, 0x1162, + 0x11AB, 0x110F, 0x1162, 0x11AC, 0x110F, 0x1162, 0x11AD, 0x110F, + 0x1162, 0x11AE, 0x110F, 0x1162, 0x11AF, 0x110F, 0x1162, 0x11B0, + 0x110F, 0x1162, 0x11B1, 0x110F, 0x1162, 0x11B2, 0x110F, 0x1162, + 0x11B3, 0x110F, 0x1162, 0x11B4, 0x110F, 0x1162, 0x11B5, 0x110F, + 0x1162, 0x11B6, 0x110F, 0x1162, 0x11B7, 0x110F, 0x1162, 0x11B8, + 0x110F, 0x1162, 0x11B9, 0x110F, 0x1162, 0x11BA, 0x110F, 0x1162, + 0x11BB, 0x110F, 0x1162, 0x11BC, 0x110F, 0x1162, 0x11BD, 0x110F, + 0x1162, 0x11BE, 0x110F, 0x1162, 0x11BF, 0x110F, 0x1162, 0x11C0, + 0x110F, 0x1162, 0x11C1, 0x110F, 0x1162, 0x11C2, 0x110F, 0x1163, + 0x110F, 0x1163, 0x11A8, 0x110F, 0x1163, 0x11A9, 0x110F, 0x1163, + 0x11AA, 0x110F, 0x1163, 0x11AB, 0x110F, 0x1163, 0x11AC, 0x110F, + 0x1163, 0x11AD, 0x110F, 0x1163, 0x11AE, 0x110F, 0x1163, 0x11AF, + 0x110F, 0x1163, 0x11B0, 0x110F, 0x1163, 0x11B1, 0x110F, 0x1163, + 0x11B2, 0x110F, 0x1163, 0x11B3, 0x110F, 0x1163, 0x11B4, 0x110F, + 0x1163, 0x11B5, 0x110F, 0x1163, 0x11B6, 0x110F, 0x1163, 0x11B7, + 0x110F, 0x1163, 0x11B8, 0x110F, 0x1163, 0x11B9, 0x110F, 0x1163, + 0x11BA, 0x110F, 0x1163, 0x11BB, 0x110F, 0x1163, 0x11BC, 0x110F, + 0x1163, 0x11BD, 0x110F, 0x1163, 0x11BE, 0x110F, 0x1163, 0x11BF, + 0x110F, 0x1163, 0x11C0, 0x110F, 0x1163, 0x11C1, 0x110F, 0x1163, + 0x11C2, 0x110F, 0x1164, 0x110F, 0x1164, 0x11A8, 0x110F, 0x1164, + 0x11A9, 0x110F, 0x1164, 0x11AA, 0x110F, 0x1164, 0x11AB, 0x110F, + 0x1164, 0x11AC, 0x110F, 0x1164, 0x11AD, 0x110F, 0x1164, 0x11AE, + 0x110F, 0x1164, 0x11AF, 0x110F, 0x1164, 0x11B0, 0x110F, 0x1164, + 0x11B1, 0x110F, 0x1164, 0x11B2, 0x110F, 0x1164, 0x11B3, 0x110F, + 0x1164, 0x11B4, 0x110F, 0x1164, 0x11B5, 0x110F, 0x1164, 0x11B6, + 0x110F, 0x1164, 0x11B7, 0x110F, 0x1164, 0x11B8, 0x110F, 0x1164, + 0x11B9, 0x110F, 0x1164, 0x11BA, 0x110F, 0x1164, 0x11BB, 0x110F, + 0x1164, 0x11BC, 0x110F, 0x1164, 0x11BD, 0x110F, 0x1164, 0x11BE, + 0x110F, 0x1164, 0x11BF, 0x110F, 0x1164, 0x11C0, 0x110F, 0x1164, + 0x11C1, 0x110F, 0x1164, 0x11C2, 0x110F, 0x1165, 0x110F, 0x1165, + 0x11A8, 0x110F, 0x1165, 0x11A9, 0x110F, 0x1165, 0x11AA, 0x110F, + 0x1165, 0x11AB, 0x110F, 0x1165, 0x11AC, 0x110F, 0x1165, 0x11AD, + 0x110F, 0x1165, 0x11AE, 0x110F, 0x1165, 0x11AF, 0x110F, 0x1165, + 0x11B0, 0x110F, 0x1165, 0x11B1, 0x110F, 0x1165, 0x11B2, 0x110F, + 0x1165, 0x11B3, 0x110F, 0x1165, 0x11B4, 0x110F, 0x1165, 0x11B5, + 0x110F, 0x1165, 0x11B6, 0x110F, 0x1165, 0x11B7, 0x110F, 0x1165, + 0x11B8, 0x110F, 0x1165, 0x11B9, 0x110F, 0x1165, 0x11BA, 0x110F, + 0x1165, 0x11BB, 0x110F, 0x1165, 0x11BC, 0x110F, 0x1165, 0x11BD, + 0x110F, 0x1165, 0x11BE, 0x110F, 0x1165, 0x11BF, 0x110F, 0x1165, + 0x11C0, 0x110F, 0x1165, 0x11C1, 0x110F, 0x1165, 0x11C2, 0x110F, + 0x1166, 0x110F, 0x1166, 0x11A8, 0x110F, 0x1166, 0x11A9, 0x110F, + 0x1166, 0x11AA, 0x110F, 0x1166, 0x11AB, 0x110F, 0x1166, 0x11AC, + 0x110F, 0x1166, 0x11AD, 0x110F, 0x1166, 0x11AE, 0x110F, 0x1166, + 0x11AF, 0x110F, 0x1166, 0x11B0, 0x110F, 0x1166, 0x11B1, 0x110F, + 0x1166, 0x11B2, 0x110F, 0x1166, 0x11B3, 0x110F, 0x1166, 0x11B4, + 0x110F, 0x1166, 0x11B5, 0x110F, 0x1166, 0x11B6, 0x110F, 0x1166, + 0x11B7, 0x110F, 0x1166, 0x11B8, 0x110F, 0x1166, 0x11B9, 0x110F, + 0x1166, 0x11BA, 0x110F, 0x1166, 0x11BB, 0x110F, 0x1166, 0x11BC, + 0x110F, 0x1166, 0x11BD, 0x110F, 0x1166, 0x11BE, 0x110F, 0x1166, + 0x11BF, 0x110F, 0x1166, 0x11C0, 0x110F, 0x1166, 0x11C1, 0x110F, + 0x1166, 0x11C2, 0x110F, 0x1167, 0x110F, 0x1167, 0x11A8, 0x110F, + 0x1167, 0x11A9, 0x110F, 0x1167, 0x11AA, 0x110F, 0x1167, 0x11AB, + 0x110F, 0x1167, 0x11AC, 0x110F, 0x1167, 0x11AD, 0x110F, 0x1167, + 0x11AE, 0x110F, 0x1167, 0x11AF, 0x110F, 0x1167, 0x11B0, 0x110F, + 0x1167, 0x11B1, 0x110F, 0x1167, 0x11B2, 0x110F, 0x1167, 0x11B3, + 0x110F, 0x1167, 0x11B4, 0x110F, 0x1167, 0x11B5, 0x110F, 0x1167, + 0x11B6, 0x110F, 0x1167, 0x11B7, 0x110F, 0x1167, 0x11B8, 0x110F, + 0x1167, 0x11B9, 0x110F, 0x1167, 0x11BA, 0x110F, 0x1167, 0x11BB, + 0x110F, 0x1167, 0x11BC, 0x110F, 0x1167, 0x11BD, 0x110F, 0x1167, + 0x11BE, 0x110F, 0x1167, 0x11BF, 0x110F, 0x1167, 0x11C0, 0x110F, + 0x1167, 0x11C1, 0x110F, 0x1167, 0x11C2, 0x110F, 0x1168, 0x110F, + 0x1168, 0x11A8, 0x110F, 0x1168, 0x11A9, 0x110F, 0x1168, 0x11AA, + 0x110F, 0x1168, 0x11AB, 0x110F, 0x1168, 0x11AC, 0x110F, 0x1168, + 0x11AD, 0x110F, 0x1168, 0x11AE, 0x110F, 0x1168, 0x11AF, 0x110F, + 0x1168, 0x11B0, 0x110F, 0x1168, 0x11B1, 0x110F, 0x1168, 0x11B2, + 0x110F, 0x1168, 0x11B3, 0x110F, 0x1168, 0x11B4, 0x110F, 0x1168, + 0x11B5, 0x110F, 0x1168, 0x11B6, 0x110F, 0x1168, 0x11B7, 0x110F, + 0x1168, 0x11B8, 0x110F, 0x1168, 0x11B9, 0x110F, 0x1168, 0x11BA, + 0x110F, 0x1168, 0x11BB, 0x110F, 0x1168, 0x11BC, 0x110F, 0x1168, + 0x11BD, 0x110F, 0x1168, 0x11BE, 0x110F, 0x1168, 0x11BF, 0x110F, + 0x1168, 0x11C0, 0x110F, 0x1168, 0x11C1, 0x110F, 0x1168, 0x11C2, + 0x110F, 0x1169, 0x110F, 0x1169, 0x11A8, 0x110F, 0x1169, 0x11A9, + 0x110F, 0x1169, 0x11AA, 0x110F, 0x1169, 0x11AB, 0x110F, 0x1169, + 0x11AC, 0x110F, 0x1169, 0x11AD, 0x110F, 0x1169, 0x11AE, 0x110F, + 0x1169, 0x11AF, 0x110F, 0x1169, 0x11B0, 0x110F, 0x1169, 0x11B1, + 0x110F, 0x1169, 0x11B2, 0x110F, 0x1169, 0x11B3, 0x110F, 0x1169, + 0x11B4, 0x110F, 0x1169, 0x11B5, 0x110F, 0x1169, 0x11B6, 0x110F, + 0x1169, 0x11B7, 0x110F, 0x1169, 0x11B8, 0x110F, 0x1169, 0x11B9, + 0x110F, 0x1169, 0x11BA, 0x110F, 0x1169, 0x11BB, 0x110F, 0x1169, + 0x11BC, 0x110F, 0x1169, 0x11BD, 0x110F, 0x1169, 0x11BE, 0x110F, + 0x1169, 0x11BF, 0x110F, 0x1169, 0x11C0, 0x110F, 0x1169, 0x11C1, + 0x110F, 0x1169, 0x11C2, 0x110F, 0x116A, 0x110F, 0x116A, 0x11A8, + 0x110F, 0x116A, 0x11A9, 0x110F, 0x116A, 0x11AA, 0x110F, 0x116A, + 0x11AB, 0x110F, 0x116A, 0x11AC, 0x110F, 0x116A, 0x11AD, 0x110F, + 0x116A, 0x11AE, 0x110F, 0x116A, 0x11AF, 0x110F, 0x116A, 0x11B0, + 0x110F, 0x116A, 0x11B1, 0x110F, 0x116A, 0x11B2, 0x110F, 0x116A, + 0x11B3, 0x110F, 0x116A, 0x11B4, 0x110F, 0x116A, 0x11B5, 0x110F, + 0x116A, 0x11B6, 0x110F, 0x116A, 0x11B7, 0x110F, 0x116A, 0x11B8, + 0x110F, 0x116A, 0x11B9, 0x110F, 0x116A, 0x11BA, 0x110F, 0x116A, + 0x11BB, 0x110F, 0x116A, 0x11BC, 0x110F, 0x116A, 0x11BD, 0x110F, + 0x116A, 0x11BE, 0x110F, 0x116A, 0x11BF, 0x110F, 0x116A, 0x11C0, + 0x110F, 0x116A, 0x11C1, 0x110F, 0x116A, 0x11C2, 0x110F, 0x116B, + 0x110F, 0x116B, 0x11A8, 0x110F, 0x116B, 0x11A9, 0x110F, 0x116B, + 0x11AA, 0x110F, 0x116B, 0x11AB, 0x110F, 0x116B, 0x11AC, 0x110F, + 0x116B, 0x11AD, 0x110F, 0x116B, 0x11AE, 0x110F, 0x116B, 0x11AF, + 0x110F, 0x116B, 0x11B0, 0x110F, 0x116B, 0x11B1, 0x110F, 0x116B, + 0x11B2, 0x110F, 0x116B, 0x11B3, 0x110F, 0x116B, 0x11B4, 0x110F, + 0x116B, 0x11B5, 0x110F, 0x116B, 0x11B6, 0x110F, 0x116B, 0x11B7, + 0x110F, 0x116B, 0x11B8, 0x110F, 0x116B, 0x11B9, 0x110F, 0x116B, + 0x11BA, 0x110F, 0x116B, 0x11BB, 0x110F, 0x116B, 0x11BC, 0x110F, + 0x116B, 0x11BD, 0x110F, 0x116B, 0x11BE, 0x110F, 0x116B, 0x11BF, + 0x110F, 0x116B, 0x11C0, 0x110F, 0x116B, 0x11C1, 0x110F, 0x116B, + 0x11C2, 0x110F, 0x116C, 0x110F, 0x116C, 0x11A8, 0x110F, 0x116C, + 0x11A9, 0x110F, 0x116C, 0x11AA, 0x110F, 0x116C, 0x11AB, 0x110F, + 0x116C, 0x11AC, 0x110F, 0x116C, 0x11AD, 0x110F, 0x116C, 0x11AE, + 0x110F, 0x116C, 0x11AF, 0x110F, 0x116C, 0x11B0, 0x110F, 0x116C, + 0x11B1, 0x110F, 0x116C, 0x11B2, 0x110F, 0x116C, 0x11B3, 0x110F, + 0x116C, 0x11B4, 0x110F, 0x116C, 0x11B5, 0x110F, 0x116C, 0x11B6, + 0x110F, 0x116C, 0x11B7, 0x110F, 0x116C, 0x11B8, 0x110F, 0x116C, + 0x11B9, 0x110F, 0x116C, 0x11BA, 0x110F, 0x116C, 0x11BB, 0x110F, + 0x116C, 0x11BC, 0x110F, 0x116C, 0x11BD, 0x110F, 0x116C, 0x11BE, + 0x110F, 0x116C, 0x11BF, 0x110F, 0x116C, 0x11C0, 0x110F, 0x116C, + 0x11C1, 0x110F, 0x116C, 0x11C2, 0x110F, 0x116D, 0x110F, 0x116D, + 0x11A8, 0x110F, 0x116D, 0x11A9, 0x110F, 0x116D, 0x11AA, 0x110F, + 0x116D, 0x11AB, 0x110F, 0x116D, 0x11AC, 0x110F, 0x116D, 0x11AD, + 0x110F, 0x116D, 0x11AE, 0x110F, 0x116D, 0x11AF, 0x110F, 0x116D, + 0x11B0, 0x110F, 0x116D, 0x11B1, 0x110F, 0x116D, 0x11B2, 0x110F, + 0x116D, 0x11B3, 0x110F, 0x116D, 0x11B4, 0x110F, 0x116D, 0x11B5, + 0x110F, 0x116D, 0x11B6, 0x110F, 0x116D, 0x11B7, 0x110F, 0x116D, + 0x11B8, 0x110F, 0x116D, 0x11B9, 0x110F, 0x116D, 0x11BA, 0x110F, + 0x116D, 0x11BB, 0x110F, 0x116D, 0x11BC, 0x110F, 0x116D, 0x11BD, + 0x110F, 0x116D, 0x11BE, 0x110F, 0x116D, 0x11BF, 0x110F, 0x116D, + 0x11C0, 0x110F, 0x116D, 0x11C1, 0x110F, 0x116D, 0x11C2, 0x110F, + 0x116E, 0x110F, 0x116E, 0x11A8, 0x110F, 0x116E, 0x11A9, 0x110F, + 0x116E, 0x11AA, 0x110F, 0x116E, 0x11AB, 0x110F, 0x116E, 0x11AC, + 0x110F, 0x116E, 0x11AD, 0x110F, 0x116E, 0x11AE, 0x110F, 0x116E, + 0x11AF, 0x110F, 0x116E, 0x11B0, 0x110F, 0x116E, 0x11B1, 0x110F, + 0x116E, 0x11B2, 0x110F, 0x116E, 0x11B3, 0x110F, 0x116E, 0x11B4, + 0x110F, 0x116E, 0x11B5, 0x110F, 0x116E, 0x11B6, 0x110F, 0x116E, + 0x11B7, 0x110F, 0x116E, 0x11B8, 0x110F, 0x116E, 0x11B9, 0x110F, + 0x116E, 0x11BA, 0x110F, 0x116E, 0x11BB, 0x110F, 0x116E, 0x11BC, + 0x110F, 0x116E, 0x11BD, 0x110F, 0x116E, 0x11BE, 0x110F, 0x116E, + 0x11BF, 0x110F, 0x116E, 0x11C0, 0x110F, 0x116E, 0x11C1, 0x110F, + 0x116E, 0x11C2, 0x110F, 0x116F, 0x110F, 0x116F, 0x11A8, 0x110F, + 0x116F, 0x11A9, 0x110F, 0x116F, 0x11AA, 0x110F, 0x116F, 0x11AB, + 0x110F, 0x116F, 0x11AC, 0x110F, 0x116F, 0x11AD, 0x110F, 0x116F, + 0x11AE, 0x110F, 0x116F, 0x11AF, 0x110F, 0x116F, 0x11B0, 0x110F, + 0x116F, 0x11B1, 0x110F, 0x116F, 0x11B2, 0x110F, 0x116F, 0x11B3, + 0x110F, 0x116F, 0x11B4, 0x110F, 0x116F, 0x11B5, 0x110F, 0x116F, + 0x11B6, 0x110F, 0x116F, 0x11B7, 0x110F, 0x116F, 0x11B8, 0x110F, + 0x116F, 0x11B9, 0x110F, 0x116F, 0x11BA, 0x110F, 0x116F, 0x11BB, + 0x110F, 0x116F, 0x11BC, 0x110F, 0x116F, 0x11BD, 0x110F, 0x116F, + 0x11BE, 0x110F, 0x116F, 0x11BF, 0x110F, 0x116F, 0x11C0, 0x110F, + 0x116F, 0x11C1, 0x110F, 0x116F, 0x11C2, 0x110F, 0x1170, 0x110F, + 0x1170, 0x11A8, 0x110F, 0x1170, 0x11A9, 0x110F, 0x1170, 0x11AA, + 0x110F, 0x1170, 0x11AB, 0x110F, 0x1170, 0x11AC, 0x110F, 0x1170, + 0x11AD, 0x110F, 0x1170, 0x11AE, 0x110F, 0x1170, 0x11AF, 0x110F, + 0x1170, 0x11B0, 0x110F, 0x1170, 0x11B1, 0x110F, 0x1170, 0x11B2, + 0x110F, 0x1170, 0x11B3, 0x110F, 0x1170, 0x11B4, 0x110F, 0x1170, + 0x11B5, 0x110F, 0x1170, 0x11B6, 0x110F, 0x1170, 0x11B7, 0x110F, + 0x1170, 0x11B8, 0x110F, 0x1170, 0x11B9, 0x110F, 0x1170, 0x11BA, + 0x110F, 0x1170, 0x11BB, 0x110F, 0x1170, 0x11BC, 0x110F, 0x1170, + 0x11BD, 0x110F, 0x1170, 0x11BE, 0x110F, 0x1170, 0x11BF, 0x110F, + 0x1170, 0x11C0, 0x110F, 0x1170, 0x11C1, 0x110F, 0x1170, 0x11C2, + 0x110F, 0x1171, 0x110F, 0x1171, 0x11A8, 0x110F, 0x1171, 0x11A9, + 0x110F, 0x1171, 0x11AA, 0x110F, 0x1171, 0x11AB, 0x110F, 0x1171, + 0x11AC, 0x110F, 0x1171, 0x11AD, 0x110F, 0x1171, 0x11AE, 0x110F, + 0x1171, 0x11AF, 0x110F, 0x1171, 0x11B0, 0x110F, 0x1171, 0x11B1, + 0x110F, 0x1171, 0x11B2, 0x110F, 0x1171, 0x11B3, 0x110F, 0x1171, + 0x11B4, 0x110F, 0x1171, 0x11B5, 0x110F, 0x1171, 0x11B6, 0x110F, + 0x1171, 0x11B7, 0x110F, 0x1171, 0x11B8, 0x110F, 0x1171, 0x11B9, + 0x110F, 0x1171, 0x11BA, 0x110F, 0x1171, 0x11BB, 0x110F, 0x1171, + 0x11BC, 0x110F, 0x1171, 0x11BD, 0x110F, 0x1171, 0x11BE, 0x110F, + 0x1171, 0x11BF, 0x110F, 0x1171, 0x11C0, 0x110F, 0x1171, 0x11C1, + 0x110F, 0x1171, 0x11C2, 0x110F, 0x1172, 0x110F, 0x1172, 0x11A8, + 0x110F, 0x1172, 0x11A9, 0x110F, 0x1172, 0x11AA, 0x110F, 0x1172, + 0x11AB, 0x110F, 0x1172, 0x11AC, 0x110F, 0x1172, 0x11AD, 0x110F, + 0x1172, 0x11AE, 0x110F, 0x1172, 0x11AF, 0x110F, 0x1172, 0x11B0, + 0x110F, 0x1172, 0x11B1, 0x110F, 0x1172, 0x11B2, 0x110F, 0x1172, + 0x11B3, 0x110F, 0x1172, 0x11B4, 0x110F, 0x1172, 0x11B5, 0x110F, + 0x1172, 0x11B6, 0x110F, 0x1172, 0x11B7, 0x110F, 0x1172, 0x11B8, + 0x110F, 0x1172, 0x11B9, 0x110F, 0x1172, 0x11BA, 0x110F, 0x1172, + 0x11BB, 0x110F, 0x1172, 0x11BC, 0x110F, 0x1172, 0x11BD, 0x110F, + 0x1172, 0x11BE, 0x110F, 0x1172, 0x11BF, 0x110F, 0x1172, 0x11C0, + 0x110F, 0x1172, 0x11C1, 0x110F, 0x1172, 0x11C2, 0x110F, 0x1173, + 0x110F, 0x1173, 0x11A8, 0x110F, 0x1173, 0x11A9, 0x110F, 0x1173, + 0x11AA, 0x110F, 0x1173, 0x11AB, 0x110F, 0x1173, 0x11AC, 0x110F, + 0x1173, 0x11AD, 0x110F, 0x1173, 0x11AE, 0x110F, 0x1173, 0x11AF, + 0x110F, 0x1173, 0x11B0, 0x110F, 0x1173, 0x11B1, 0x110F, 0x1173, + 0x11B2, 0x110F, 0x1173, 0x11B3, 0x110F, 0x1173, 0x11B4, 0x110F, + 0x1173, 0x11B5, 0x110F, 0x1173, 0x11B6, 0x110F, 0x1173, 0x11B7, + 0x110F, 0x1173, 0x11B8, 0x110F, 0x1173, 0x11B9, 0x110F, 0x1173, + 0x11BA, 0x110F, 0x1173, 0x11BB, 0x110F, 0x1173, 0x11BC, 0x110F, + 0x1173, 0x11BD, 0x110F, 0x1173, 0x11BE, 0x110F, 0x1173, 0x11BF, + 0x110F, 0x1173, 0x11C0, 0x110F, 0x1173, 0x11C1, 0x110F, 0x1173, + 0x11C2, 0x110F, 0x1174, 0x110F, 0x1174, 0x11A8, 0x110F, 0x1174, + 0x11A9, 0x110F, 0x1174, 0x11AA, 0x110F, 0x1174, 0x11AB, 0x110F, + 0x1174, 0x11AC, 0x110F, 0x1174, 0x11AD, 0x110F, 0x1174, 0x11AE, + 0x110F, 0x1174, 0x11AF, 0x110F, 0x1174, 0x11B0, 0x110F, 0x1174, + 0x11B1, 0x110F, 0x1174, 0x11B2, 0x110F, 0x1174, 0x11B3, 0x110F, + 0x1174, 0x11B4, 0x110F, 0x1174, 0x11B5, 0x110F, 0x1174, 0x11B6, + 0x110F, 0x1174, 0x11B7, 0x110F, 0x1174, 0x11B8, 0x110F, 0x1174, + 0x11B9, 0x110F, 0x1174, 0x11BA, 0x110F, 0x1174, 0x11BB, 0x110F, + 0x1174, 0x11BC, 0x110F, 0x1174, 0x11BD, 0x110F, 0x1174, 0x11BE, + 0x110F, 0x1174, 0x11BF, 0x110F, 0x1174, 0x11C0, 0x110F, 0x1174, + 0x11C1, 0x110F, 0x1174, 0x11C2, 0x110F, 0x1175, 0x110F, 0x1175, + 0x11A8, 0x110F, 0x1175, 0x11A9, 0x110F, 0x1175, 0x11AA, 0x110F, + 0x1175, 0x11AB, 0x110F, 0x1175, 0x11AC, 0x110F, 0x1175, 0x11AD, + 0x110F, 0x1175, 0x11AE, 0x110F, 0x1175, 0x11AF, 0x110F, 0x1175, + 0x11B0, 0x110F, 0x1175, 0x11B1, 0x110F, 0x1175, 0x11B2, 0x110F, + 0x1175, 0x11B3, 0x110F, 0x1175, 0x11B4, 0x110F, 0x1175, 0x11B5, + 0x110F, 0x1175, 0x11B6, 0x110F, 0x1175, 0x11B7, 0x110F, 0x1175, + 0x11B8, 0x110F, 0x1175, 0x11B9, 0x110F, 0x1175, 0x11BA, 0x110F, + 0x1175, 0x11BB, 0x110F, 0x1175, 0x11BC, 0x110F, 0x1175, 0x11BD, + 0x110F, 0x1175, 0x11BE, 0x110F, 0x1175, 0x11BF, 0x110F, 0x1175, + 0x11C0, 0x110F, 0x1175, 0x11C1, 0x110F, 0x1175, 0x11C2, 0x1110, + 0x1161, 0x1110, 0x1161, 0x11A8, 0x1110, 0x1161, 0x11A9, 0x1110, + 0x1161, 0x11AA, 0x1110, 0x1161, 0x11AB, 0x1110, 0x1161, 0x11AC, + 0x1110, 0x1161, 0x11AD, 0x1110, 0x1161, 0x11AE, 0x1110, 0x1161, + 0x11AF, 0x1110, 0x1161, 0x11B0, 0x1110, 0x1161, 0x11B1, 0x1110, + 0x1161, 0x11B2, 0x1110, 0x1161, 0x11B3, 0x1110, 0x1161, 0x11B4, + 0x1110, 0x1161, 0x11B5, 0x1110, 0x1161, 0x11B6, 0x1110, 0x1161, + 0x11B7, 0x1110, 0x1161, 0x11B8, 0x1110, 0x1161, 0x11B9, 0x1110, + 0x1161, 0x11BA, 0x1110, 0x1161, 0x11BB, 0x1110, 0x1161, 0x11BC, + 0x1110, 0x1161, 0x11BD, 0x1110, 0x1161, 0x11BE, 0x1110, 0x1161, + 0x11BF, 0x1110, 0x1161, 0x11C0, 0x1110, 0x1161, 0x11C1, 0x1110, + 0x1161, 0x11C2, 0x1110, 0x1162, 0x1110, 0x1162, 0x11A8, 0x1110, + 0x1162, 0x11A9, 0x1110, 0x1162, 0x11AA, 0x1110, 0x1162, 0x11AB, + 0x1110, 0x1162, 0x11AC, 0x1110, 0x1162, 0x11AD, 0x1110, 0x1162, + 0x11AE, 0x1110, 0x1162, 0x11AF, 0x1110, 0x1162, 0x11B0, 0x1110, + 0x1162, 0x11B1, 0x1110, 0x1162, 0x11B2, 0x1110, 0x1162, 0x11B3, + 0x1110, 0x1162, 0x11B4, 0x1110, 0x1162, 0x11B5, 0x1110, 0x1162, + 0x11B6, 0x1110, 0x1162, 0x11B7, 0x1110, 0x1162, 0x11B8, 0x1110, + 0x1162, 0x11B9, 0x1110, 0x1162, 0x11BA, 0x1110, 0x1162, 0x11BB, + 0x1110, 0x1162, 0x11BC, 0x1110, 0x1162, 0x11BD, 0x1110, 0x1162, + 0x11BE, 0x1110, 0x1162, 0x11BF, 0x1110, 0x1162, 0x11C0, 0x1110, + 0x1162, 0x11C1, 0x1110, 0x1162, 0x11C2, 0x1110, 0x1163, 0x1110, + 0x1163, 0x11A8, 0x1110, 0x1163, 0x11A9, 0x1110, 0x1163, 0x11AA, + 0x1110, 0x1163, 0x11AB, 0x1110, 0x1163, 0x11AC, 0x1110, 0x1163, + 0x11AD, 0x1110, 0x1163, 0x11AE, 0x1110, 0x1163, 0x11AF, 0x1110, + 0x1163, 0x11B0, 0x1110, 0x1163, 0x11B1, 0x1110, 0x1163, 0x11B2, + 0x1110, 0x1163, 0x11B3, 0x1110, 0x1163, 0x11B4, 0x1110, 0x1163, + 0x11B5, 0x1110, 0x1163, 0x11B6, 0x1110, 0x1163, 0x11B7, 0x1110, + 0x1163, 0x11B8, 0x1110, 0x1163, 0x11B9, 0x1110, 0x1163, 0x11BA, + 0x1110, 0x1163, 0x11BB, 0x1110, 0x1163, 0x11BC, 0x1110, 0x1163, + 0x11BD, 0x1110, 0x1163, 0x11BE, 0x1110, 0x1163, 0x11BF, 0x1110, + 0x1163, 0x11C0, 0x1110, 0x1163, 0x11C1, 0x1110, 0x1163, 0x11C2, + 0x1110, 0x1164, 0x1110, 0x1164, 0x11A8, 0x1110, 0x1164, 0x11A9, + 0x1110, 0x1164, 0x11AA, 0x1110, 0x1164, 0x11AB, 0x1110, 0x1164, + 0x11AC, 0x1110, 0x1164, 0x11AD, 0x1110, 0x1164, 0x11AE, 0x1110, + 0x1164, 0x11AF, 0x1110, 0x1164, 0x11B0, 0x1110, 0x1164, 0x11B1, + 0x1110, 0x1164, 0x11B2, 0x1110, 0x1164, 0x11B3, 0x1110, 0x1164, + 0x11B4, 0x1110, 0x1164, 0x11B5, 0x1110, 0x1164, 0x11B6, 0x1110, + 0x1164, 0x11B7, 0x1110, 0x1164, 0x11B8, 0x1110, 0x1164, 0x11B9, + 0x1110, 0x1164, 0x11BA, 0x1110, 0x1164, 0x11BB, 0x1110, 0x1164, + 0x11BC, 0x1110, 0x1164, 0x11BD, 0x1110, 0x1164, 0x11BE, 0x1110, + 0x1164, 0x11BF, 0x1110, 0x1164, 0x11C0, 0x1110, 0x1164, 0x11C1, + 0x1110, 0x1164, 0x11C2, 0x1110, 0x1165, 0x1110, 0x1165, 0x11A8, + 0x1110, 0x1165, 0x11A9, 0x1110, 0x1165, 0x11AA, 0x1110, 0x1165, + 0x11AB, 0x1110, 0x1165, 0x11AC, 0x1110, 0x1165, 0x11AD, 0x1110, + 0x1165, 0x11AE, 0x1110, 0x1165, 0x11AF, 0x1110, 0x1165, 0x11B0, + 0x1110, 0x1165, 0x11B1, 0x1110, 0x1165, 0x11B2, 0x1110, 0x1165, + 0x11B3, 0x1110, 0x1165, 0x11B4, 0x1110, 0x1165, 0x11B5, 0x1110, + 0x1165, 0x11B6, 0x1110, 0x1165, 0x11B7, 0x1110, 0x1165, 0x11B8, + 0x1110, 0x1165, 0x11B9, 0x1110, 0x1165, 0x11BA, 0x1110, 0x1165, + 0x11BB, 0x1110, 0x1165, 0x11BC, 0x1110, 0x1165, 0x11BD, 0x1110, + 0x1165, 0x11BE, 0x1110, 0x1165, 0x11BF, 0x1110, 0x1165, 0x11C0, + 0x1110, 0x1165, 0x11C1, 0x1110, 0x1165, 0x11C2, 0x1110, 0x1166, + 0x1110, 0x1166, 0x11A8, 0x1110, 0x1166, 0x11A9, 0x1110, 0x1166, + 0x11AA, 0x1110, 0x1166, 0x11AB, 0x1110, 0x1166, 0x11AC, 0x1110, + 0x1166, 0x11AD, 0x1110, 0x1166, 0x11AE, 0x1110, 0x1166, 0x11AF, + 0x1110, 0x1166, 0x11B0, 0x1110, 0x1166, 0x11B1, 0x1110, 0x1166, + 0x11B2, 0x1110, 0x1166, 0x11B3, 0x1110, 0x1166, 0x11B4, 0x1110, + 0x1166, 0x11B5, 0x1110, 0x1166, 0x11B6, 0x1110, 0x1166, 0x11B7, + 0x1110, 0x1166, 0x11B8, 0x1110, 0x1166, 0x11B9, 0x1110, 0x1166, + 0x11BA, 0x1110, 0x1166, 0x11BB, 0x1110, 0x1166, 0x11BC, 0x1110, + 0x1166, 0x11BD, 0x1110, 0x1166, 0x11BE, 0x1110, 0x1166, 0x11BF, + 0x1110, 0x1166, 0x11C0, 0x1110, 0x1166, 0x11C1, 0x1110, 0x1166, + 0x11C2, 0x1110, 0x1167, 0x1110, 0x1167, 0x11A8, 0x1110, 0x1167, + 0x11A9, 0x1110, 0x1167, 0x11AA, 0x1110, 0x1167, 0x11AB, 0x1110, + 0x1167, 0x11AC, 0x1110, 0x1167, 0x11AD, 0x1110, 0x1167, 0x11AE, + 0x1110, 0x1167, 0x11AF, 0x1110, 0x1167, 0x11B0, 0x1110, 0x1167, + 0x11B1, 0x1110, 0x1167, 0x11B2, 0x1110, 0x1167, 0x11B3, 0x1110, + 0x1167, 0x11B4, 0x1110, 0x1167, 0x11B5, 0x1110, 0x1167, 0x11B6, + 0x1110, 0x1167, 0x11B7, 0x1110, 0x1167, 0x11B8, 0x1110, 0x1167, + 0x11B9, 0x1110, 0x1167, 0x11BA, 0x1110, 0x1167, 0x11BB, 0x1110, + 0x1167, 0x11BC, 0x1110, 0x1167, 0x11BD, 0x1110, 0x1167, 0x11BE, + 0x1110, 0x1167, 0x11BF, 0x1110, 0x1167, 0x11C0, 0x1110, 0x1167, + 0x11C1, 0x1110, 0x1167, 0x11C2, 0x1110, 0x1168, 0x1110, 0x1168, + 0x11A8, 0x1110, 0x1168, 0x11A9, 0x1110, 0x1168, 0x11AA, 0x1110, + 0x1168, 0x11AB, 0x1110, 0x1168, 0x11AC, 0x1110, 0x1168, 0x11AD, + 0x1110, 0x1168, 0x11AE, 0x1110, 0x1168, 0x11AF, 0x1110, 0x1168, + 0x11B0, 0x1110, 0x1168, 0x11B1, 0x1110, 0x1168, 0x11B2, 0x1110, + 0x1168, 0x11B3, 0x1110, 0x1168, 0x11B4, 0x1110, 0x1168, 0x11B5, + 0x1110, 0x1168, 0x11B6, 0x1110, 0x1168, 0x11B7, 0x1110, 0x1168, + 0x11B8, 0x1110, 0x1168, 0x11B9, 0x1110, 0x1168, 0x11BA, 0x1110, + 0x1168, 0x11BB, 0x1110, 0x1168, 0x11BC, 0x1110, 0x1168, 0x11BD, + 0x1110, 0x1168, 0x11BE, 0x1110, 0x1168, 0x11BF, 0x1110, 0x1168, + 0x11C0, 0x1110, 0x1168, 0x11C1, 0x1110, 0x1168, 0x11C2, 0x1110, + 0x1169, 0x1110, 0x1169, 0x11A8, 0x1110, 0x1169, 0x11A9, 0x1110, + 0x1169, 0x11AA, 0x1110, 0x1169, 0x11AB, 0x1110, 0x1169, 0x11AC, + 0x1110, 0x1169, 0x11AD, 0x1110, 0x1169, 0x11AE, 0x1110, 0x1169, + 0x11AF, 0x1110, 0x1169, 0x11B0, 0x1110, 0x1169, 0x11B1, 0x1110, + 0x1169, 0x11B2, 0x1110, 0x1169, 0x11B3, 0x1110, 0x1169, 0x11B4, + 0x1110, 0x1169, 0x11B5, 0x1110, 0x1169, 0x11B6, 0x1110, 0x1169, + 0x11B7, 0x1110, 0x1169, 0x11B8, 0x1110, 0x1169, 0x11B9, 0x1110, + 0x1169, 0x11BA, 0x1110, 0x1169, 0x11BB, 0x1110, 0x1169, 0x11BC, + 0x1110, 0x1169, 0x11BD, 0x1110, 0x1169, 0x11BE, 0x1110, 0x1169, + 0x11BF, 0x1110, 0x1169, 0x11C0, 0x1110, 0x1169, 0x11C1, 0x1110, + 0x1169, 0x11C2, 0x1110, 0x116A, 0x1110, 0x116A, 0x11A8, 0x1110, + 0x116A, 0x11A9, 0x1110, 0x116A, 0x11AA, 0x1110, 0x116A, 0x11AB, + 0x1110, 0x116A, 0x11AC, 0x1110, 0x116A, 0x11AD, 0x1110, 0x116A, + 0x11AE, 0x1110, 0x116A, 0x11AF, 0x1110, 0x116A, 0x11B0, 0x1110, + 0x116A, 0x11B1, 0x1110, 0x116A, 0x11B2, 0x1110, 0x116A, 0x11B3, + 0x1110, 0x116A, 0x11B4, 0x1110, 0x116A, 0x11B5, 0x1110, 0x116A, + 0x11B6, 0x1110, 0x116A, 0x11B7, 0x1110, 0x116A, 0x11B8, 0x1110, + 0x116A, 0x11B9, 0x1110, 0x116A, 0x11BA, 0x1110, 0x116A, 0x11BB, + 0x1110, 0x116A, 0x11BC, 0x1110, 0x116A, 0x11BD, 0x1110, 0x116A, + 0x11BE, 0x1110, 0x116A, 0x11BF, 0x1110, 0x116A, 0x11C0, 0x1110, + 0x116A, 0x11C1, 0x1110, 0x116A, 0x11C2, 0x1110, 0x116B, 0x1110, + 0x116B, 0x11A8, 0x1110, 0x116B, 0x11A9, 0x1110, 0x116B, 0x11AA, + 0x1110, 0x116B, 0x11AB, 0x1110, 0x116B, 0x11AC, 0x1110, 0x116B, + 0x11AD, 0x1110, 0x116B, 0x11AE, 0x1110, 0x116B, 0x11AF, 0x1110, + 0x116B, 0x11B0, 0x1110, 0x116B, 0x11B1, 0x1110, 0x116B, 0x11B2, + 0x1110, 0x116B, 0x11B3, 0x1110, 0x116B, 0x11B4, 0x1110, 0x116B, + 0x11B5, 0x1110, 0x116B, 0x11B6, 0x1110, 0x116B, 0x11B7, 0x1110, + 0x116B, 0x11B8, 0x1110, 0x116B, 0x11B9, 0x1110, 0x116B, 0x11BA, + 0x1110, 0x116B, 0x11BB, 0x1110, 0x116B, 0x11BC, 0x1110, 0x116B, + 0x11BD, 0x1110, 0x116B, 0x11BE, 0x1110, 0x116B, 0x11BF, 0x1110, + 0x116B, 0x11C0, 0x1110, 0x116B, 0x11C1, 0x1110, 0x116B, 0x11C2, + 0x1110, 0x116C, 0x1110, 0x116C, 0x11A8, 0x1110, 0x116C, 0x11A9, + 0x1110, 0x116C, 0x11AA, 0x1110, 0x116C, 0x11AB, 0x1110, 0x116C, + 0x11AC, 0x1110, 0x116C, 0x11AD, 0x1110, 0x116C, 0x11AE, 0x1110, + 0x116C, 0x11AF, 0x1110, 0x116C, 0x11B0, 0x1110, 0x116C, 0x11B1, + 0x1110, 0x116C, 0x11B2, 0x1110, 0x116C, 0x11B3, 0x1110, 0x116C, + 0x11B4, 0x1110, 0x116C, 0x11B5, 0x1110, 0x116C, 0x11B6, 0x1110, + 0x116C, 0x11B7, 0x1110, 0x116C, 0x11B8, 0x1110, 0x116C, 0x11B9, + 0x1110, 0x116C, 0x11BA, 0x1110, 0x116C, 0x11BB, 0x1110, 0x116C, + 0x11BC, 0x1110, 0x116C, 0x11BD, 0x1110, 0x116C, 0x11BE, 0x1110, + 0x116C, 0x11BF, 0x1110, 0x116C, 0x11C0, 0x1110, 0x116C, 0x11C1, + 0x1110, 0x116C, 0x11C2, 0x1110, 0x116D, 0x1110, 0x116D, 0x11A8, + 0x1110, 0x116D, 0x11A9, 0x1110, 0x116D, 0x11AA, 0x1110, 0x116D, + 0x11AB, 0x1110, 0x116D, 0x11AC, 0x1110, 0x116D, 0x11AD, 0x1110, + 0x116D, 0x11AE, 0x1110, 0x116D, 0x11AF, 0x1110, 0x116D, 0x11B0, + 0x1110, 0x116D, 0x11B1, 0x1110, 0x116D, 0x11B2, 0x1110, 0x116D, + 0x11B3, 0x1110, 0x116D, 0x11B4, 0x1110, 0x116D, 0x11B5, 0x1110, + 0x116D, 0x11B6, 0x1110, 0x116D, 0x11B7, 0x1110, 0x116D, 0x11B8, + 0x1110, 0x116D, 0x11B9, 0x1110, 0x116D, 0x11BA, 0x1110, 0x116D, + 0x11BB, 0x1110, 0x116D, 0x11BC, 0x1110, 0x116D, 0x11BD, 0x1110, + 0x116D, 0x11BE, 0x1110, 0x116D, 0x11BF, 0x1110, 0x116D, 0x11C0, + 0x1110, 0x116D, 0x11C1, 0x1110, 0x116D, 0x11C2, 0x1110, 0x116E, + 0x1110, 0x116E, 0x11A8, 0x1110, 0x116E, 0x11A9, 0x1110, 0x116E, + 0x11AA, 0x1110, 0x116E, 0x11AB, 0x1110, 0x116E, 0x11AC, 0x1110, + 0x116E, 0x11AD, 0x1110, 0x116E, 0x11AE, 0x1110, 0x116E, 0x11AF, + 0x1110, 0x116E, 0x11B0, 0x1110, 0x116E, 0x11B1, 0x1110, 0x116E, + 0x11B2, 0x1110, 0x116E, 0x11B3, 0x1110, 0x116E, 0x11B4, 0x1110, + 0x116E, 0x11B5, 0x1110, 0x116E, 0x11B6, 0x1110, 0x116E, 0x11B7, + 0x1110, 0x116E, 0x11B8, 0x1110, 0x116E, 0x11B9, 0x1110, 0x116E, + 0x11BA, 0x1110, 0x116E, 0x11BB, 0x1110, 0x116E, 0x11BC, 0x1110, + 0x116E, 0x11BD, 0x1110, 0x116E, 0x11BE, 0x1110, 0x116E, 0x11BF, + 0x1110, 0x116E, 0x11C0, 0x1110, 0x116E, 0x11C1, 0x1110, 0x116E, + 0x11C2, 0x1110, 0x116F, 0x1110, 0x116F, 0x11A8, 0x1110, 0x116F, + 0x11A9, 0x1110, 0x116F, 0x11AA, 0x1110, 0x116F, 0x11AB, 0x1110, + 0x116F, 0x11AC, 0x1110, 0x116F, 0x11AD, 0x1110, 0x116F, 0x11AE, + 0x1110, 0x116F, 0x11AF, 0x1110, 0x116F, 0x11B0, 0x1110, 0x116F, + 0x11B1, 0x1110, 0x116F, 0x11B2, 0x1110, 0x116F, 0x11B3, 0x1110, + 0x116F, 0x11B4, 0x1110, 0x116F, 0x11B5, 0x1110, 0x116F, 0x11B6, + 0x1110, 0x116F, 0x11B7, 0x1110, 0x116F, 0x11B8, 0x1110, 0x116F, + 0x11B9, 0x1110, 0x116F, 0x11BA, 0x1110, 0x116F, 0x11BB, 0x1110, + 0x116F, 0x11BC, 0x1110, 0x116F, 0x11BD, 0x1110, 0x116F, 0x11BE, + 0x1110, 0x116F, 0x11BF, 0x1110, 0x116F, 0x11C0, 0x1110, 0x116F, + 0x11C1, 0x1110, 0x116F, 0x11C2, 0x1110, 0x1170, 0x1110, 0x1170, + 0x11A8, 0x1110, 0x1170, 0x11A9, 0x1110, 0x1170, 0x11AA, 0x1110, + 0x1170, 0x11AB, 0x1110, 0x1170, 0x11AC, 0x1110, 0x1170, 0x11AD, + 0x1110, 0x1170, 0x11AE, 0x1110, 0x1170, 0x11AF, 0x1110, 0x1170, + 0x11B0, 0x1110, 0x1170, 0x11B1, 0x1110, 0x1170, 0x11B2, 0x1110, + 0x1170, 0x11B3, 0x1110, 0x1170, 0x11B4, 0x1110, 0x1170, 0x11B5, + 0x1110, 0x1170, 0x11B6, 0x1110, 0x1170, 0x11B7, 0x1110, 0x1170, + 0x11B8, 0x1110, 0x1170, 0x11B9, 0x1110, 0x1170, 0x11BA, 0x1110, + 0x1170, 0x11BB, 0x1110, 0x1170, 0x11BC, 0x1110, 0x1170, 0x11BD, + 0x1110, 0x1170, 0x11BE, 0x1110, 0x1170, 0x11BF, 0x1110, 0x1170, + 0x11C0, 0x1110, 0x1170, 0x11C1, 0x1110, 0x1170, 0x11C2, 0x1110, + 0x1171, 0x1110, 0x1171, 0x11A8, 0x1110, 0x1171, 0x11A9, 0x1110, + 0x1171, 0x11AA, 0x1110, 0x1171, 0x11AB, 0x1110, 0x1171, 0x11AC, + 0x1110, 0x1171, 0x11AD, 0x1110, 0x1171, 0x11AE, 0x1110, 0x1171, + 0x11AF, 0x1110, 0x1171, 0x11B0, 0x1110, 0x1171, 0x11B1, 0x1110, + 0x1171, 0x11B2, 0x1110, 0x1171, 0x11B3, 0x1110, 0x1171, 0x11B4, + 0x1110, 0x1171, 0x11B5, 0x1110, 0x1171, 0x11B6, 0x1110, 0x1171, + 0x11B7, 0x1110, 0x1171, 0x11B8, 0x1110, 0x1171, 0x11B9, 0x1110, + 0x1171, 0x11BA, 0x1110, 0x1171, 0x11BB, 0x1110, 0x1171, 0x11BC, + 0x1110, 0x1171, 0x11BD, 0x1110, 0x1171, 0x11BE, 0x1110, 0x1171, + 0x11BF, 0x1110, 0x1171, 0x11C0, 0x1110, 0x1171, 0x11C1, 0x1110, + 0x1171, 0x11C2, 0x1110, 0x1172, 0x1110, 0x1172, 0x11A8, 0x1110, + 0x1172, 0x11A9, 0x1110, 0x1172, 0x11AA, 0x1110, 0x1172, 0x11AB, + 0x1110, 0x1172, 0x11AC, 0x1110, 0x1172, 0x11AD, 0x1110, 0x1172, + 0x11AE, 0x1110, 0x1172, 0x11AF, 0x1110, 0x1172, 0x11B0, 0x1110, + 0x1172, 0x11B1, 0x1110, 0x1172, 0x11B2, 0x1110, 0x1172, 0x11B3, + 0x1110, 0x1172, 0x11B4, 0x1110, 0x1172, 0x11B5, 0x1110, 0x1172, + 0x11B6, 0x1110, 0x1172, 0x11B7, 0x1110, 0x1172, 0x11B8, 0x1110, + 0x1172, 0x11B9, 0x1110, 0x1172, 0x11BA, 0x1110, 0x1172, 0x11BB, + 0x1110, 0x1172, 0x11BC, 0x1110, 0x1172, 0x11BD, 0x1110, 0x1172, + 0x11BE, 0x1110, 0x1172, 0x11BF, 0x1110, 0x1172, 0x11C0, 0x1110, + 0x1172, 0x11C1, 0x1110, 0x1172, 0x11C2, 0x1110, 0x1173, 0x1110, + 0x1173, 0x11A8, 0x1110, 0x1173, 0x11A9, 0x1110, 0x1173, 0x11AA, + 0x1110, 0x1173, 0x11AB, 0x1110, 0x1173, 0x11AC, 0x1110, 0x1173, + 0x11AD, 0x1110, 0x1173, 0x11AE, 0x1110, 0x1173, 0x11AF, 0x1110, + 0x1173, 0x11B0, 0x1110, 0x1173, 0x11B1, 0x1110, 0x1173, 0x11B2, + 0x1110, 0x1173, 0x11B3, 0x1110, 0x1173, 0x11B4, 0x1110, 0x1173, + 0x11B5, 0x1110, 0x1173, 0x11B6, 0x1110, 0x1173, 0x11B7, 0x1110, + 0x1173, 0x11B8, 0x1110, 0x1173, 0x11B9, 0x1110, 0x1173, 0x11BA, + 0x1110, 0x1173, 0x11BB, 0x1110, 0x1173, 0x11BC, 0x1110, 0x1173, + 0x11BD, 0x1110, 0x1173, 0x11BE, 0x1110, 0x1173, 0x11BF, 0x1110, + 0x1173, 0x11C0, 0x1110, 0x1173, 0x11C1, 0x1110, 0x1173, 0x11C2, + 0x1110, 0x1174, 0x1110, 0x1174, 0x11A8, 0x1110, 0x1174, 0x11A9, + 0x1110, 0x1174, 0x11AA, 0x1110, 0x1174, 0x11AB, 0x1110, 0x1174, + 0x11AC, 0x1110, 0x1174, 0x11AD, 0x1110, 0x1174, 0x11AE, 0x1110, + 0x1174, 0x11AF, 0x1110, 0x1174, 0x11B0, 0x1110, 0x1174, 0x11B1, + 0x1110, 0x1174, 0x11B2, 0x1110, 0x1174, 0x11B3, 0x1110, 0x1174, + 0x11B4, 0x1110, 0x1174, 0x11B5, 0x1110, 0x1174, 0x11B6, 0x1110, + 0x1174, 0x11B7, 0x1110, 0x1174, 0x11B8, 0x1110, 0x1174, 0x11B9, + 0x1110, 0x1174, 0x11BA, 0x1110, 0x1174, 0x11BB, 0x1110, 0x1174, + 0x11BC, 0x1110, 0x1174, 0x11BD, 0x1110, 0x1174, 0x11BE, 0x1110, + 0x1174, 0x11BF, 0x1110, 0x1174, 0x11C0, 0x1110, 0x1174, 0x11C1, + 0x1110, 0x1174, 0x11C2, 0x1110, 0x1175, 0x1110, 0x1175, 0x11A8, + 0x1110, 0x1175, 0x11A9, 0x1110, 0x1175, 0x11AA, 0x1110, 0x1175, + 0x11AB, 0x1110, 0x1175, 0x11AC, 0x1110, 0x1175, 0x11AD, 0x1110, + 0x1175, 0x11AE, 0x1110, 0x1175, 0x11AF, 0x1110, 0x1175, 0x11B0, + 0x1110, 0x1175, 0x11B1, 0x1110, 0x1175, 0x11B2, 0x1110, 0x1175, + 0x11B3, 0x1110, 0x1175, 0x11B4, 0x1110, 0x1175, 0x11B5, 0x1110, + 0x1175, 0x11B6, 0x1110, 0x1175, 0x11B7, 0x1110, 0x1175, 0x11B8, + 0x1110, 0x1175, 0x11B9, 0x1110, 0x1175, 0x11BA, 0x1110, 0x1175, + 0x11BB, 0x1110, 0x1175, 0x11BC, 0x1110, 0x1175, 0x11BD, 0x1110, + 0x1175, 0x11BE, 0x1110, 0x1175, 0x11BF, 0x1110, 0x1175, 0x11C0, + 0x1110, 0x1175, 0x11C1, 0x1110, 0x1175, 0x11C2, 0x1111, 0x1161, + 0x1111, 0x1161, 0x11A8, 0x1111, 0x1161, 0x11A9, 0x1111, 0x1161, + 0x11AA, 0x1111, 0x1161, 0x11AB, 0x1111, 0x1161, 0x11AC, 0x1111, + 0x1161, 0x11AD, 0x1111, 0x1161, 0x11AE, 0x1111, 0x1161, 0x11AF, + 0x1111, 0x1161, 0x11B0, 0x1111, 0x1161, 0x11B1, 0x1111, 0x1161, + 0x11B2, 0x1111, 0x1161, 0x11B3, 0x1111, 0x1161, 0x11B4, 0x1111, + 0x1161, 0x11B5, 0x1111, 0x1161, 0x11B6, 0x1111, 0x1161, 0x11B7, + 0x1111, 0x1161, 0x11B8, 0x1111, 0x1161, 0x11B9, 0x1111, 0x1161, + 0x11BA, 0x1111, 0x1161, 0x11BB, 0x1111, 0x1161, 0x11BC, 0x1111, + 0x1161, 0x11BD, 0x1111, 0x1161, 0x11BE, 0x1111, 0x1161, 0x11BF, + 0x1111, 0x1161, 0x11C0, 0x1111, 0x1161, 0x11C1, 0x1111, 0x1161, + 0x11C2, 0x1111, 0x1162, 0x1111, 0x1162, 0x11A8, 0x1111, 0x1162, + 0x11A9, 0x1111, 0x1162, 0x11AA, 0x1111, 0x1162, 0x11AB, 0x1111, + 0x1162, 0x11AC, 0x1111, 0x1162, 0x11AD, 0x1111, 0x1162, 0x11AE, + 0x1111, 0x1162, 0x11AF, 0x1111, 0x1162, 0x11B0, 0x1111, 0x1162, + 0x11B1, 0x1111, 0x1162, 0x11B2, 0x1111, 0x1162, 0x11B3, 0x1111, + 0x1162, 0x11B4, 0x1111, 0x1162, 0x11B5, 0x1111, 0x1162, 0x11B6, + 0x1111, 0x1162, 0x11B7, 0x1111, 0x1162, 0x11B8, 0x1111, 0x1162, + 0x11B9, 0x1111, 0x1162, 0x11BA, 0x1111, 0x1162, 0x11BB, 0x1111, + 0x1162, 0x11BC, 0x1111, 0x1162, 0x11BD, 0x1111, 0x1162, 0x11BE, + 0x1111, 0x1162, 0x11BF, 0x1111, 0x1162, 0x11C0, 0x1111, 0x1162, + 0x11C1, 0x1111, 0x1162, 0x11C2, 0x1111, 0x1163, 0x1111, 0x1163, + 0x11A8, 0x1111, 0x1163, 0x11A9, 0x1111, 0x1163, 0x11AA, 0x1111, + 0x1163, 0x11AB, 0x1111, 0x1163, 0x11AC, 0x1111, 0x1163, 0x11AD, + 0x1111, 0x1163, 0x11AE, 0x1111, 0x1163, 0x11AF, 0x1111, 0x1163, + 0x11B0, 0x1111, 0x1163, 0x11B1, 0x1111, 0x1163, 0x11B2, 0x1111, + 0x1163, 0x11B3, 0x1111, 0x1163, 0x11B4, 0x1111, 0x1163, 0x11B5, + 0x1111, 0x1163, 0x11B6, 0x1111, 0x1163, 0x11B7, 0x1111, 0x1163, + 0x11B8, 0x1111, 0x1163, 0x11B9, 0x1111, 0x1163, 0x11BA, 0x1111, + 0x1163, 0x11BB, 0x1111, 0x1163, 0x11BC, 0x1111, 0x1163, 0x11BD, + 0x1111, 0x1163, 0x11BE, 0x1111, 0x1163, 0x11BF, 0x1111, 0x1163, + 0x11C0, 0x1111, 0x1163, 0x11C1, 0x1111, 0x1163, 0x11C2, 0x1111, + 0x1164, 0x1111, 0x1164, 0x11A8, 0x1111, 0x1164, 0x11A9, 0x1111, + 0x1164, 0x11AA, 0x1111, 0x1164, 0x11AB, 0x1111, 0x1164, 0x11AC, + 0x1111, 0x1164, 0x11AD, 0x1111, 0x1164, 0x11AE, 0x1111, 0x1164, + 0x11AF, 0x1111, 0x1164, 0x11B0, 0x1111, 0x1164, 0x11B1, 0x1111, + 0x1164, 0x11B2, 0x1111, 0x1164, 0x11B3, 0x1111, 0x1164, 0x11B4, + 0x1111, 0x1164, 0x11B5, 0x1111, 0x1164, 0x11B6, 0x1111, 0x1164, + 0x11B7, 0x1111, 0x1164, 0x11B8, 0x1111, 0x1164, 0x11B9, 0x1111, + 0x1164, 0x11BA, 0x1111, 0x1164, 0x11BB, 0x1111, 0x1164, 0x11BC, + 0x1111, 0x1164, 0x11BD, 0x1111, 0x1164, 0x11BE, 0x1111, 0x1164, + 0x11BF, 0x1111, 0x1164, 0x11C0, 0x1111, 0x1164, 0x11C1, 0x1111, + 0x1164, 0x11C2, 0x1111, 0x1165, 0x1111, 0x1165, 0x11A8, 0x1111, + 0x1165, 0x11A9, 0x1111, 0x1165, 0x11AA, 0x1111, 0x1165, 0x11AB, + 0x1111, 0x1165, 0x11AC, 0x1111, 0x1165, 0x11AD, 0x1111, 0x1165, + 0x11AE, 0x1111, 0x1165, 0x11AF, 0x1111, 0x1165, 0x11B0, 0x1111, + 0x1165, 0x11B1, 0x1111, 0x1165, 0x11B2, 0x1111, 0x1165, 0x11B3, + 0x1111, 0x1165, 0x11B4, 0x1111, 0x1165, 0x11B5, 0x1111, 0x1165, + 0x11B6, 0x1111, 0x1165, 0x11B7, 0x1111, 0x1165, 0x11B8, 0x1111, + 0x1165, 0x11B9, 0x1111, 0x1165, 0x11BA, 0x1111, 0x1165, 0x11BB, + 0x1111, 0x1165, 0x11BC, 0x1111, 0x1165, 0x11BD, 0x1111, 0x1165, + 0x11BE, 0x1111, 0x1165, 0x11BF, 0x1111, 0x1165, 0x11C0, 0x1111, + 0x1165, 0x11C1, 0x1111, 0x1165, 0x11C2, 0x1111, 0x1166, 0x1111, + 0x1166, 0x11A8, 0x1111, 0x1166, 0x11A9, 0x1111, 0x1166, 0x11AA, + 0x1111, 0x1166, 0x11AB, 0x1111, 0x1166, 0x11AC, 0x1111, 0x1166, + 0x11AD, 0x1111, 0x1166, 0x11AE, 0x1111, 0x1166, 0x11AF, 0x1111, + 0x1166, 0x11B0, 0x1111, 0x1166, 0x11B1, 0x1111, 0x1166, 0x11B2, + 0x1111, 0x1166, 0x11B3, 0x1111, 0x1166, 0x11B4, 0x1111, 0x1166, + 0x11B5, 0x1111, 0x1166, 0x11B6, 0x1111, 0x1166, 0x11B7, 0x1111, + 0x1166, 0x11B8, 0x1111, 0x1166, 0x11B9, 0x1111, 0x1166, 0x11BA, + 0x1111, 0x1166, 0x11BB, 0x1111, 0x1166, 0x11BC, 0x1111, 0x1166, + 0x11BD, 0x1111, 0x1166, 0x11BE, 0x1111, 0x1166, 0x11BF, 0x1111, + 0x1166, 0x11C0, 0x1111, 0x1166, 0x11C1, 0x1111, 0x1166, 0x11C2, + 0x1111, 0x1167, 0x1111, 0x1167, 0x11A8, 0x1111, 0x1167, 0x11A9, + 0x1111, 0x1167, 0x11AA, 0x1111, 0x1167, 0x11AB, 0x1111, 0x1167, + 0x11AC, 0x1111, 0x1167, 0x11AD, 0x1111, 0x1167, 0x11AE, 0x1111, + 0x1167, 0x11AF, 0x1111, 0x1167, 0x11B0, 0x1111, 0x1167, 0x11B1, + 0x1111, 0x1167, 0x11B2, 0x1111, 0x1167, 0x11B3, 0x1111, 0x1167, + 0x11B4, 0x1111, 0x1167, 0x11B5, 0x1111, 0x1167, 0x11B6, 0x1111, + 0x1167, 0x11B7, 0x1111, 0x1167, 0x11B8, 0x1111, 0x1167, 0x11B9, + 0x1111, 0x1167, 0x11BA, 0x1111, 0x1167, 0x11BB, 0x1111, 0x1167, + 0x11BC, 0x1111, 0x1167, 0x11BD, 0x1111, 0x1167, 0x11BE, 0x1111, + 0x1167, 0x11BF, 0x1111, 0x1167, 0x11C0, 0x1111, 0x1167, 0x11C1, + 0x1111, 0x1167, 0x11C2, 0x1111, 0x1168, 0x1111, 0x1168, 0x11A8, + 0x1111, 0x1168, 0x11A9, 0x1111, 0x1168, 0x11AA, 0x1111, 0x1168, + 0x11AB, 0x1111, 0x1168, 0x11AC, 0x1111, 0x1168, 0x11AD, 0x1111, + 0x1168, 0x11AE, 0x1111, 0x1168, 0x11AF, 0x1111, 0x1168, 0x11B0, + 0x1111, 0x1168, 0x11B1, 0x1111, 0x1168, 0x11B2, 0x1111, 0x1168, + 0x11B3, 0x1111, 0x1168, 0x11B4, 0x1111, 0x1168, 0x11B5, 0x1111, + 0x1168, 0x11B6, 0x1111, 0x1168, 0x11B7, 0x1111, 0x1168, 0x11B8, + 0x1111, 0x1168, 0x11B9, 0x1111, 0x1168, 0x11BA, 0x1111, 0x1168, + 0x11BB, 0x1111, 0x1168, 0x11BC, 0x1111, 0x1168, 0x11BD, 0x1111, + 0x1168, 0x11BE, 0x1111, 0x1168, 0x11BF, 0x1111, 0x1168, 0x11C0, + 0x1111, 0x1168, 0x11C1, 0x1111, 0x1168, 0x11C2, 0x1111, 0x1169, + 0x1111, 0x1169, 0x11A8, 0x1111, 0x1169, 0x11A9, 0x1111, 0x1169, + 0x11AA, 0x1111, 0x1169, 0x11AB, 0x1111, 0x1169, 0x11AC, 0x1111, + 0x1169, 0x11AD, 0x1111, 0x1169, 0x11AE, 0x1111, 0x1169, 0x11AF, + 0x1111, 0x1169, 0x11B0, 0x1111, 0x1169, 0x11B1, 0x1111, 0x1169, + 0x11B2, 0x1111, 0x1169, 0x11B3, 0x1111, 0x1169, 0x11B4, 0x1111, + 0x1169, 0x11B5, 0x1111, 0x1169, 0x11B6, 0x1111, 0x1169, 0x11B7, + 0x1111, 0x1169, 0x11B8, 0x1111, 0x1169, 0x11B9, 0x1111, 0x1169, + 0x11BA, 0x1111, 0x1169, 0x11BB, 0x1111, 0x1169, 0x11BC, 0x1111, + 0x1169, 0x11BD, 0x1111, 0x1169, 0x11BE, 0x1111, 0x1169, 0x11BF, + 0x1111, 0x1169, 0x11C0, 0x1111, 0x1169, 0x11C1, 0x1111, 0x1169, + 0x11C2, 0x1111, 0x116A, 0x1111, 0x116A, 0x11A8, 0x1111, 0x116A, + 0x11A9, 0x1111, 0x116A, 0x11AA, 0x1111, 0x116A, 0x11AB, 0x1111, + 0x116A, 0x11AC, 0x1111, 0x116A, 0x11AD, 0x1111, 0x116A, 0x11AE, + 0x1111, 0x116A, 0x11AF, 0x1111, 0x116A, 0x11B0, 0x1111, 0x116A, + 0x11B1, 0x1111, 0x116A, 0x11B2, 0x1111, 0x116A, 0x11B3, 0x1111, + 0x116A, 0x11B4, 0x1111, 0x116A, 0x11B5, 0x1111, 0x116A, 0x11B6, + 0x1111, 0x116A, 0x11B7, 0x1111, 0x116A, 0x11B8, 0x1111, 0x116A, + 0x11B9, 0x1111, 0x116A, 0x11BA, 0x1111, 0x116A, 0x11BB, 0x1111, + 0x116A, 0x11BC, 0x1111, 0x116A, 0x11BD, 0x1111, 0x116A, 0x11BE, + 0x1111, 0x116A, 0x11BF, 0x1111, 0x116A, 0x11C0, 0x1111, 0x116A, + 0x11C1, 0x1111, 0x116A, 0x11C2, 0x1111, 0x116B, 0x1111, 0x116B, + 0x11A8, 0x1111, 0x116B, 0x11A9, 0x1111, 0x116B, 0x11AA, 0x1111, + 0x116B, 0x11AB, 0x1111, 0x116B, 0x11AC, 0x1111, 0x116B, 0x11AD, + 0x1111, 0x116B, 0x11AE, 0x1111, 0x116B, 0x11AF, 0x1111, 0x116B, + 0x11B0, 0x1111, 0x116B, 0x11B1, 0x1111, 0x116B, 0x11B2, 0x1111, + 0x116B, 0x11B3, 0x1111, 0x116B, 0x11B4, 0x1111, 0x116B, 0x11B5, + 0x1111, 0x116B, 0x11B6, 0x1111, 0x116B, 0x11B7, 0x1111, 0x116B, + 0x11B8, 0x1111, 0x116B, 0x11B9, 0x1111, 0x116B, 0x11BA, 0x1111, + 0x116B, 0x11BB, 0x1111, 0x116B, 0x11BC, 0x1111, 0x116B, 0x11BD, + 0x1111, 0x116B, 0x11BE, 0x1111, 0x116B, 0x11BF, 0x1111, 0x116B, + 0x11C0, 0x1111, 0x116B, 0x11C1, 0x1111, 0x116B, 0x11C2, 0x1111, + 0x116C, 0x1111, 0x116C, 0x11A8, 0x1111, 0x116C, 0x11A9, 0x1111, + 0x116C, 0x11AA, 0x1111, 0x116C, 0x11AB, 0x1111, 0x116C, 0x11AC, + 0x1111, 0x116C, 0x11AD, 0x1111, 0x116C, 0x11AE, 0x1111, 0x116C, + 0x11AF, 0x1111, 0x116C, 0x11B0, 0x1111, 0x116C, 0x11B1, 0x1111, + 0x116C, 0x11B2, 0x1111, 0x116C, 0x11B3, 0x1111, 0x116C, 0x11B4, + 0x1111, 0x116C, 0x11B5, 0x1111, 0x116C, 0x11B6, 0x1111, 0x116C, + 0x11B7, 0x1111, 0x116C, 0x11B8, 0x1111, 0x116C, 0x11B9, 0x1111, + 0x116C, 0x11BA, 0x1111, 0x116C, 0x11BB, 0x1111, 0x116C, 0x11BC, + 0x1111, 0x116C, 0x11BD, 0x1111, 0x116C, 0x11BE, 0x1111, 0x116C, + 0x11BF, 0x1111, 0x116C, 0x11C0, 0x1111, 0x116C, 0x11C1, 0x1111, + 0x116C, 0x11C2, 0x1111, 0x116D, 0x1111, 0x116D, 0x11A8, 0x1111, + 0x116D, 0x11A9, 0x1111, 0x116D, 0x11AA, 0x1111, 0x116D, 0x11AB, + 0x1111, 0x116D, 0x11AC, 0x1111, 0x116D, 0x11AD, 0x1111, 0x116D, + 0x11AE, 0x1111, 0x116D, 0x11AF, 0x1111, 0x116D, 0x11B0, 0x1111, + 0x116D, 0x11B1, 0x1111, 0x116D, 0x11B2, 0x1111, 0x116D, 0x11B3, + 0x1111, 0x116D, 0x11B4, 0x1111, 0x116D, 0x11B5, 0x1111, 0x116D, + 0x11B6, 0x1111, 0x116D, 0x11B7, 0x1111, 0x116D, 0x11B8, 0x1111, + 0x116D, 0x11B9, 0x1111, 0x116D, 0x11BA, 0x1111, 0x116D, 0x11BB, + 0x1111, 0x116D, 0x11BC, 0x1111, 0x116D, 0x11BD, 0x1111, 0x116D, + 0x11BE, 0x1111, 0x116D, 0x11BF, 0x1111, 0x116D, 0x11C0, 0x1111, + 0x116D, 0x11C1, 0x1111, 0x116D, 0x11C2, 0x1111, 0x116E, 0x1111, + 0x116E, 0x11A8, 0x1111, 0x116E, 0x11A9, 0x1111, 0x116E, 0x11AA, + 0x1111, 0x116E, 0x11AB, 0x1111, 0x116E, 0x11AC, 0x1111, 0x116E, + 0x11AD, 0x1111, 0x116E, 0x11AE, 0x1111, 0x116E, 0x11AF, 0x1111, + 0x116E, 0x11B0, 0x1111, 0x116E, 0x11B1, 0x1111, 0x116E, 0x11B2, + 0x1111, 0x116E, 0x11B3, 0x1111, 0x116E, 0x11B4, 0x1111, 0x116E, + 0x11B5, 0x1111, 0x116E, 0x11B6, 0x1111, 0x116E, 0x11B7, 0x1111, + 0x116E, 0x11B8, 0x1111, 0x116E, 0x11B9, 0x1111, 0x116E, 0x11BA, + 0x1111, 0x116E, 0x11BB, 0x1111, 0x116E, 0x11BC, 0x1111, 0x116E, + 0x11BD, 0x1111, 0x116E, 0x11BE, 0x1111, 0x116E, 0x11BF, 0x1111, + 0x116E, 0x11C0, 0x1111, 0x116E, 0x11C1, 0x1111, 0x116E, 0x11C2, + 0x1111, 0x116F, 0x1111, 0x116F, 0x11A8, 0x1111, 0x116F, 0x11A9, + 0x1111, 0x116F, 0x11AA, 0x1111, 0x116F, 0x11AB, 0x1111, 0x116F, + 0x11AC, 0x1111, 0x116F, 0x11AD, 0x1111, 0x116F, 0x11AE, 0x1111, + 0x116F, 0x11AF, 0x1111, 0x116F, 0x11B0, 0x1111, 0x116F, 0x11B1, + 0x1111, 0x116F, 0x11B2, 0x1111, 0x116F, 0x11B3, 0x1111, 0x116F, + 0x11B4, 0x1111, 0x116F, 0x11B5, 0x1111, 0x116F, 0x11B6, 0x1111, + 0x116F, 0x11B7, 0x1111, 0x116F, 0x11B8, 0x1111, 0x116F, 0x11B9, + 0x1111, 0x116F, 0x11BA, 0x1111, 0x116F, 0x11BB, 0x1111, 0x116F, + 0x11BC, 0x1111, 0x116F, 0x11BD, 0x1111, 0x116F, 0x11BE, 0x1111, + 0x116F, 0x11BF, 0x1111, 0x116F, 0x11C0, 0x1111, 0x116F, 0x11C1, + 0x1111, 0x116F, 0x11C2, 0x1111, 0x1170, 0x1111, 0x1170, 0x11A8, + 0x1111, 0x1170, 0x11A9, 0x1111, 0x1170, 0x11AA, 0x1111, 0x1170, + 0x11AB, 0x1111, 0x1170, 0x11AC, 0x1111, 0x1170, 0x11AD, 0x1111, + 0x1170, 0x11AE, 0x1111, 0x1170, 0x11AF, 0x1111, 0x1170, 0x11B0, + 0x1111, 0x1170, 0x11B1, 0x1111, 0x1170, 0x11B2, 0x1111, 0x1170, + 0x11B3, 0x1111, 0x1170, 0x11B4, 0x1111, 0x1170, 0x11B5, 0x1111, + 0x1170, 0x11B6, 0x1111, 0x1170, 0x11B7, 0x1111, 0x1170, 0x11B8, + 0x1111, 0x1170, 0x11B9, 0x1111, 0x1170, 0x11BA, 0x1111, 0x1170, + 0x11BB, 0x1111, 0x1170, 0x11BC, 0x1111, 0x1170, 0x11BD, 0x1111, + 0x1170, 0x11BE, 0x1111, 0x1170, 0x11BF, 0x1111, 0x1170, 0x11C0, + 0x1111, 0x1170, 0x11C1, 0x1111, 0x1170, 0x11C2, 0x1111, 0x1171, + 0x1111, 0x1171, 0x11A8, 0x1111, 0x1171, 0x11A9, 0x1111, 0x1171, + 0x11AA, 0x1111, 0x1171, 0x11AB, 0x1111, 0x1171, 0x11AC, 0x1111, + 0x1171, 0x11AD, 0x1111, 0x1171, 0x11AE, 0x1111, 0x1171, 0x11AF, + 0x1111, 0x1171, 0x11B0, 0x1111, 0x1171, 0x11B1, 0x1111, 0x1171, + 0x11B2, 0x1111, 0x1171, 0x11B3, 0x1111, 0x1171, 0x11B4, 0x1111, + 0x1171, 0x11B5, 0x1111, 0x1171, 0x11B6, 0x1111, 0x1171, 0x11B7, + 0x1111, 0x1171, 0x11B8, 0x1111, 0x1171, 0x11B9, 0x1111, 0x1171, + 0x11BA, 0x1111, 0x1171, 0x11BB, 0x1111, 0x1171, 0x11BC, 0x1111, + 0x1171, 0x11BD, 0x1111, 0x1171, 0x11BE, 0x1111, 0x1171, 0x11BF, + 0x1111, 0x1171, 0x11C0, 0x1111, 0x1171, 0x11C1, 0x1111, 0x1171, + 0x11C2, 0x1111, 0x1172, 0x1111, 0x1172, 0x11A8, 0x1111, 0x1172, + 0x11A9, 0x1111, 0x1172, 0x11AA, 0x1111, 0x1172, 0x11AB, 0x1111, + 0x1172, 0x11AC, 0x1111, 0x1172, 0x11AD, 0x1111, 0x1172, 0x11AE, + 0x1111, 0x1172, 0x11AF, 0x1111, 0x1172, 0x11B0, 0x1111, 0x1172, + 0x11B1, 0x1111, 0x1172, 0x11B2, 0x1111, 0x1172, 0x11B3, 0x1111, + 0x1172, 0x11B4, 0x1111, 0x1172, 0x11B5, 0x1111, 0x1172, 0x11B6, + 0x1111, 0x1172, 0x11B7, 0x1111, 0x1172, 0x11B8, 0x1111, 0x1172, + 0x11B9, 0x1111, 0x1172, 0x11BA, 0x1111, 0x1172, 0x11BB, 0x1111, + 0x1172, 0x11BC, 0x1111, 0x1172, 0x11BD, 0x1111, 0x1172, 0x11BE, + 0x1111, 0x1172, 0x11BF, 0x1111, 0x1172, 0x11C0, 0x1111, 0x1172, + 0x11C1, 0x1111, 0x1172, 0x11C2, 0x1111, 0x1173, 0x1111, 0x1173, + 0x11A8, 0x1111, 0x1173, 0x11A9, 0x1111, 0x1173, 0x11AA, 0x1111, + 0x1173, 0x11AB, 0x1111, 0x1173, 0x11AC, 0x1111, 0x1173, 0x11AD, + 0x1111, 0x1173, 0x11AE, 0x1111, 0x1173, 0x11AF, 0x1111, 0x1173, + 0x11B0, 0x1111, 0x1173, 0x11B1, 0x1111, 0x1173, 0x11B2, 0x1111, + 0x1173, 0x11B3, 0x1111, 0x1173, 0x11B4, 0x1111, 0x1173, 0x11B5, + 0x1111, 0x1173, 0x11B6, 0x1111, 0x1173, 0x11B7, 0x1111, 0x1173, + 0x11B8, 0x1111, 0x1173, 0x11B9, 0x1111, 0x1173, 0x11BA, 0x1111, + 0x1173, 0x11BB, 0x1111, 0x1173, 0x11BC, 0x1111, 0x1173, 0x11BD, + 0x1111, 0x1173, 0x11BE, 0x1111, 0x1173, 0x11BF, 0x1111, 0x1173, + 0x11C0, 0x1111, 0x1173, 0x11C1, 0x1111, 0x1173, 0x11C2, 0x1111, + 0x1174, 0x1111, 0x1174, 0x11A8, 0x1111, 0x1174, 0x11A9, 0x1111, + 0x1174, 0x11AA, 0x1111, 0x1174, 0x11AB, 0x1111, 0x1174, 0x11AC, + 0x1111, 0x1174, 0x11AD, 0x1111, 0x1174, 0x11AE, 0x1111, 0x1174, + 0x11AF, 0x1111, 0x1174, 0x11B0, 0x1111, 0x1174, 0x11B1, 0x1111, + 0x1174, 0x11B2, 0x1111, 0x1174, 0x11B3, 0x1111, 0x1174, 0x11B4, + 0x1111, 0x1174, 0x11B5, 0x1111, 0x1174, 0x11B6, 0x1111, 0x1174, + 0x11B7, 0x1111, 0x1174, 0x11B8, 0x1111, 0x1174, 0x11B9, 0x1111, + 0x1174, 0x11BA, 0x1111, 0x1174, 0x11BB, 0x1111, 0x1174, 0x11BC, + 0x1111, 0x1174, 0x11BD, 0x1111, 0x1174, 0x11BE, 0x1111, 0x1174, + 0x11BF, 0x1111, 0x1174, 0x11C0, 0x1111, 0x1174, 0x11C1, 0x1111, + 0x1174, 0x11C2, 0x1111, 0x1175, 0x1111, 0x1175, 0x11A8, 0x1111, + 0x1175, 0x11A9, 0x1111, 0x1175, 0x11AA, 0x1111, 0x1175, 0x11AB, + 0x1111, 0x1175, 0x11AC, 0x1111, 0x1175, 0x11AD, 0x1111, 0x1175, + 0x11AE, 0x1111, 0x1175, 0x11AF, 0x1111, 0x1175, 0x11B0, 0x1111, + 0x1175, 0x11B1, 0x1111, 0x1175, 0x11B2, 0x1111, 0x1175, 0x11B3, + 0x1111, 0x1175, 0x11B4, 0x1111, 0x1175, 0x11B5, 0x1111, 0x1175, + 0x11B6, 0x1111, 0x1175, 0x11B7, 0x1111, 0x1175, 0x11B8, 0x1111, + 0x1175, 0x11B9, 0x1111, 0x1175, 0x11BA, 0x1111, 0x1175, 0x11BB, + 0x1111, 0x1175, 0x11BC, 0x1111, 0x1175, 0x11BD, 0x1111, 0x1175, + 0x11BE, 0x1111, 0x1175, 0x11BF, 0x1111, 0x1175, 0x11C0, 0x1111, + 0x1175, 0x11C1, 0x1111, 0x1175, 0x11C2, 0x1112, 0x1161, 0x1112, + 0x1161, 0x11A8, 0x1112, 0x1161, 0x11A9, 0x1112, 0x1161, 0x11AA, + 0x1112, 0x1161, 0x11AB, 0x1112, 0x1161, 0x11AC, 0x1112, 0x1161, + 0x11AD, 0x1112, 0x1161, 0x11AE, 0x1112, 0x1161, 0x11AF, 0x1112, + 0x1161, 0x11B0, 0x1112, 0x1161, 0x11B1, 0x1112, 0x1161, 0x11B2, + 0x1112, 0x1161, 0x11B3, 0x1112, 0x1161, 0x11B4, 0x1112, 0x1161, + 0x11B5, 0x1112, 0x1161, 0x11B6, 0x1112, 0x1161, 0x11B7, 0x1112, + 0x1161, 0x11B8, 0x1112, 0x1161, 0x11B9, 0x1112, 0x1161, 0x11BA, + 0x1112, 0x1161, 0x11BB, 0x1112, 0x1161, 0x11BC, 0x1112, 0x1161, + 0x11BD, 0x1112, 0x1161, 0x11BE, 0x1112, 0x1161, 0x11BF, 0x1112, + 0x1161, 0x11C0, 0x1112, 0x1161, 0x11C1, 0x1112, 0x1161, 0x11C2, + 0x1112, 0x1162, 0x1112, 0x1162, 0x11A8, 0x1112, 0x1162, 0x11A9, + 0x1112, 0x1162, 0x11AA, 0x1112, 0x1162, 0x11AB, 0x1112, 0x1162, + 0x11AC, 0x1112, 0x1162, 0x11AD, 0x1112, 0x1162, 0x11AE, 0x1112, + 0x1162, 0x11AF, 0x1112, 0x1162, 0x11B0, 0x1112, 0x1162, 0x11B1, + 0x1112, 0x1162, 0x11B2, 0x1112, 0x1162, 0x11B3, 0x1112, 0x1162, + 0x11B4, 0x1112, 0x1162, 0x11B5, 0x1112, 0x1162, 0x11B6, 0x1112, + 0x1162, 0x11B7, 0x1112, 0x1162, 0x11B8, 0x1112, 0x1162, 0x11B9, + 0x1112, 0x1162, 0x11BA, 0x1112, 0x1162, 0x11BB, 0x1112, 0x1162, + 0x11BC, 0x1112, 0x1162, 0x11BD, 0x1112, 0x1162, 0x11BE, 0x1112, + 0x1162, 0x11BF, 0x1112, 0x1162, 0x11C0, 0x1112, 0x1162, 0x11C1, + 0x1112, 0x1162, 0x11C2, 0x1112, 0x1163, 0x1112, 0x1163, 0x11A8, + 0x1112, 0x1163, 0x11A9, 0x1112, 0x1163, 0x11AA, 0x1112, 0x1163, + 0x11AB, 0x1112, 0x1163, 0x11AC, 0x1112, 0x1163, 0x11AD, 0x1112, + 0x1163, 0x11AE, 0x1112, 0x1163, 0x11AF, 0x1112, 0x1163, 0x11B0, + 0x1112, 0x1163, 0x11B1, 0x1112, 0x1163, 0x11B2, 0x1112, 0x1163, + 0x11B3, 0x1112, 0x1163, 0x11B4, 0x1112, 0x1163, 0x11B5, 0x1112, + 0x1163, 0x11B6, 0x1112, 0x1163, 0x11B7, 0x1112, 0x1163, 0x11B8, + 0x1112, 0x1163, 0x11B9, 0x1112, 0x1163, 0x11BA, 0x1112, 0x1163, + 0x11BB, 0x1112, 0x1163, 0x11BC, 0x1112, 0x1163, 0x11BD, 0x1112, + 0x1163, 0x11BE, 0x1112, 0x1163, 0x11BF, 0x1112, 0x1163, 0x11C0, + 0x1112, 0x1163, 0x11C1, 0x1112, 0x1163, 0x11C2, 0x1112, 0x1164, + 0x1112, 0x1164, 0x11A8, 0x1112, 0x1164, 0x11A9, 0x1112, 0x1164, + 0x11AA, 0x1112, 0x1164, 0x11AB, 0x1112, 0x1164, 0x11AC, 0x1112, + 0x1164, 0x11AD, 0x1112, 0x1164, 0x11AE, 0x1112, 0x1164, 0x11AF, + 0x1112, 0x1164, 0x11B0, 0x1112, 0x1164, 0x11B1, 0x1112, 0x1164, + 0x11B2, 0x1112, 0x1164, 0x11B3, 0x1112, 0x1164, 0x11B4, 0x1112, + 0x1164, 0x11B5, 0x1112, 0x1164, 0x11B6, 0x1112, 0x1164, 0x11B7, + 0x1112, 0x1164, 0x11B8, 0x1112, 0x1164, 0x11B9, 0x1112, 0x1164, + 0x11BA, 0x1112, 0x1164, 0x11BB, 0x1112, 0x1164, 0x11BC, 0x1112, + 0x1164, 0x11BD, 0x1112, 0x1164, 0x11BE, 0x1112, 0x1164, 0x11BF, + 0x1112, 0x1164, 0x11C0, 0x1112, 0x1164, 0x11C1, 0x1112, 0x1164, + 0x11C2, 0x1112, 0x1165, 0x1112, 0x1165, 0x11A8, 0x1112, 0x1165, + 0x11A9, 0x1112, 0x1165, 0x11AA, 0x1112, 0x1165, 0x11AB, 0x1112, + 0x1165, 0x11AC, 0x1112, 0x1165, 0x11AD, 0x1112, 0x1165, 0x11AE, + 0x1112, 0x1165, 0x11AF, 0x1112, 0x1165, 0x11B0, 0x1112, 0x1165, + 0x11B1, 0x1112, 0x1165, 0x11B2, 0x1112, 0x1165, 0x11B3, 0x1112, + 0x1165, 0x11B4, 0x1112, 0x1165, 0x11B5, 0x1112, 0x1165, 0x11B6, + 0x1112, 0x1165, 0x11B7, 0x1112, 0x1165, 0x11B8, 0x1112, 0x1165, + 0x11B9, 0x1112, 0x1165, 0x11BA, 0x1112, 0x1165, 0x11BB, 0x1112, + 0x1165, 0x11BC, 0x1112, 0x1165, 0x11BD, 0x1112, 0x1165, 0x11BE, + 0x1112, 0x1165, 0x11BF, 0x1112, 0x1165, 0x11C0, 0x1112, 0x1165, + 0x11C1, 0x1112, 0x1165, 0x11C2, 0x1112, 0x1166, 0x1112, 0x1166, + 0x11A8, 0x1112, 0x1166, 0x11A9, 0x1112, 0x1166, 0x11AA, 0x1112, + 0x1166, 0x11AB, 0x1112, 0x1166, 0x11AC, 0x1112, 0x1166, 0x11AD, + 0x1112, 0x1166, 0x11AE, 0x1112, 0x1166, 0x11AF, 0x1112, 0x1166, + 0x11B0, 0x1112, 0x1166, 0x11B1, 0x1112, 0x1166, 0x11B2, 0x1112, + 0x1166, 0x11B3, 0x1112, 0x1166, 0x11B4, 0x1112, 0x1166, 0x11B5, + 0x1112, 0x1166, 0x11B6, 0x1112, 0x1166, 0x11B7, 0x1112, 0x1166, + 0x11B8, 0x1112, 0x1166, 0x11B9, 0x1112, 0x1166, 0x11BA, 0x1112, + 0x1166, 0x11BB, 0x1112, 0x1166, 0x11BC, 0x1112, 0x1166, 0x11BD, + 0x1112, 0x1166, 0x11BE, 0x1112, 0x1166, 0x11BF, 0x1112, 0x1166, + 0x11C0, 0x1112, 0x1166, 0x11C1, 0x1112, 0x1166, 0x11C2, 0x1112, + 0x1167, 0x1112, 0x1167, 0x11A8, 0x1112, 0x1167, 0x11A9, 0x1112, + 0x1167, 0x11AA, 0x1112, 0x1167, 0x11AB, 0x1112, 0x1167, 0x11AC, + 0x1112, 0x1167, 0x11AD, 0x1112, 0x1167, 0x11AE, 0x1112, 0x1167, + 0x11AF, 0x1112, 0x1167, 0x11B0, 0x1112, 0x1167, 0x11B1, 0x1112, + 0x1167, 0x11B2, 0x1112, 0x1167, 0x11B3, 0x1112, 0x1167, 0x11B4, + 0x1112, 0x1167, 0x11B5, 0x1112, 0x1167, 0x11B6, 0x1112, 0x1167, + 0x11B7, 0x1112, 0x1167, 0x11B8, 0x1112, 0x1167, 0x11B9, 0x1112, + 0x1167, 0x11BA, 0x1112, 0x1167, 0x11BB, 0x1112, 0x1167, 0x11BC, + 0x1112, 0x1167, 0x11BD, 0x1112, 0x1167, 0x11BE, 0x1112, 0x1167, + 0x11BF, 0x1112, 0x1167, 0x11C0, 0x1112, 0x1167, 0x11C1, 0x1112, + 0x1167, 0x11C2, 0x1112, 0x1168, 0x1112, 0x1168, 0x11A8, 0x1112, + 0x1168, 0x11A9, 0x1112, 0x1168, 0x11AA, 0x1112, 0x1168, 0x11AB, + 0x1112, 0x1168, 0x11AC, 0x1112, 0x1168, 0x11AD, 0x1112, 0x1168, + 0x11AE, 0x1112, 0x1168, 0x11AF, 0x1112, 0x1168, 0x11B0, 0x1112, + 0x1168, 0x11B1, 0x1112, 0x1168, 0x11B2, 0x1112, 0x1168, 0x11B3, + 0x1112, 0x1168, 0x11B4, 0x1112, 0x1168, 0x11B5, 0x1112, 0x1168, + 0x11B6, 0x1112, 0x1168, 0x11B7, 0x1112, 0x1168, 0x11B8, 0x1112, + 0x1168, 0x11B9, 0x1112, 0x1168, 0x11BA, 0x1112, 0x1168, 0x11BB, + 0x1112, 0x1168, 0x11BC, 0x1112, 0x1168, 0x11BD, 0x1112, 0x1168, + 0x11BE, 0x1112, 0x1168, 0x11BF, 0x1112, 0x1168, 0x11C0, 0x1112, + 0x1168, 0x11C1, 0x1112, 0x1168, 0x11C2, 0x1112, 0x1169, 0x1112, + 0x1169, 0x11A8, 0x1112, 0x1169, 0x11A9, 0x1112, 0x1169, 0x11AA, + 0x1112, 0x1169, 0x11AB, 0x1112, 0x1169, 0x11AC, 0x1112, 0x1169, + 0x11AD, 0x1112, 0x1169, 0x11AE, 0x1112, 0x1169, 0x11AF, 0x1112, + 0x1169, 0x11B0, 0x1112, 0x1169, 0x11B1, 0x1112, 0x1169, 0x11B2, + 0x1112, 0x1169, 0x11B3, 0x1112, 0x1169, 0x11B4, 0x1112, 0x1169, + 0x11B5, 0x1112, 0x1169, 0x11B6, 0x1112, 0x1169, 0x11B7, 0x1112, + 0x1169, 0x11B8, 0x1112, 0x1169, 0x11B9, 0x1112, 0x1169, 0x11BA, + 0x1112, 0x1169, 0x11BB, 0x1112, 0x1169, 0x11BC, 0x1112, 0x1169, + 0x11BD, 0x1112, 0x1169, 0x11BE, 0x1112, 0x1169, 0x11BF, 0x1112, + 0x1169, 0x11C0, 0x1112, 0x1169, 0x11C1, 0x1112, 0x1169, 0x11C2, + 0x1112, 0x116A, 0x1112, 0x116A, 0x11A8, 0x1112, 0x116A, 0x11A9, + 0x1112, 0x116A, 0x11AA, 0x1112, 0x116A, 0x11AB, 0x1112, 0x116A, + 0x11AC, 0x1112, 0x116A, 0x11AD, 0x1112, 0x116A, 0x11AE, 0x1112, + 0x116A, 0x11AF, 0x1112, 0x116A, 0x11B0, 0x1112, 0x116A, 0x11B1, + 0x1112, 0x116A, 0x11B2, 0x1112, 0x116A, 0x11B3, 0x1112, 0x116A, + 0x11B4, 0x1112, 0x116A, 0x11B5, 0x1112, 0x116A, 0x11B6, 0x1112, + 0x116A, 0x11B7, 0x1112, 0x116A, 0x11B8, 0x1112, 0x116A, 0x11B9, + 0x1112, 0x116A, 0x11BA, 0x1112, 0x116A, 0x11BB, 0x1112, 0x116A, + 0x11BC, 0x1112, 0x116A, 0x11BD, 0x1112, 0x116A, 0x11BE, 0x1112, + 0x116A, 0x11BF, 0x1112, 0x116A, 0x11C0, 0x1112, 0x116A, 0x11C1, + 0x1112, 0x116A, 0x11C2, 0x1112, 0x116B, 0x1112, 0x116B, 0x11A8, + 0x1112, 0x116B, 0x11A9, 0x1112, 0x116B, 0x11AA, 0x1112, 0x116B, + 0x11AB, 0x1112, 0x116B, 0x11AC, 0x1112, 0x116B, 0x11AD, 0x1112, + 0x116B, 0x11AE, 0x1112, 0x116B, 0x11AF, 0x1112, 0x116B, 0x11B0, + 0x1112, 0x116B, 0x11B1, 0x1112, 0x116B, 0x11B2, 0x1112, 0x116B, + 0x11B3, 0x1112, 0x116B, 0x11B4, 0x1112, 0x116B, 0x11B5, 0x1112, + 0x116B, 0x11B6, 0x1112, 0x116B, 0x11B7, 0x1112, 0x116B, 0x11B8, + 0x1112, 0x116B, 0x11B9, 0x1112, 0x116B, 0x11BA, 0x1112, 0x116B, + 0x11BB, 0x1112, 0x116B, 0x11BC, 0x1112, 0x116B, 0x11BD, 0x1112, + 0x116B, 0x11BE, 0x1112, 0x116B, 0x11BF, 0x1112, 0x116B, 0x11C0, + 0x1112, 0x116B, 0x11C1, 0x1112, 0x116B, 0x11C2, 0x1112, 0x116C, + 0x1112, 0x116C, 0x11A8, 0x1112, 0x116C, 0x11A9, 0x1112, 0x116C, + 0x11AA, 0x1112, 0x116C, 0x11AB, 0x1112, 0x116C, 0x11AC, 0x1112, + 0x116C, 0x11AD, 0x1112, 0x116C, 0x11AE, 0x1112, 0x116C, 0x11AF, + 0x1112, 0x116C, 0x11B0, 0x1112, 0x116C, 0x11B1, 0x1112, 0x116C, + 0x11B2, 0x1112, 0x116C, 0x11B3, 0x1112, 0x116C, 0x11B4, 0x1112, + 0x116C, 0x11B5, 0x1112, 0x116C, 0x11B6, 0x1112, 0x116C, 0x11B7, + 0x1112, 0x116C, 0x11B8, 0x1112, 0x116C, 0x11B9, 0x1112, 0x116C, + 0x11BA, 0x1112, 0x116C, 0x11BB, 0x1112, 0x116C, 0x11BC, 0x1112, + 0x116C, 0x11BD, 0x1112, 0x116C, 0x11BE, 0x1112, 0x116C, 0x11BF, + 0x1112, 0x116C, 0x11C0, 0x1112, 0x116C, 0x11C1, 0x1112, 0x116C, + 0x11C2, 0x1112, 0x116D, 0x1112, 0x116D, 0x11A8, 0x1112, 0x116D, + 0x11A9, 0x1112, 0x116D, 0x11AA, 0x1112, 0x116D, 0x11AB, 0x1112, + 0x116D, 0x11AC, 0x1112, 0x116D, 0x11AD, 0x1112, 0x116D, 0x11AE, + 0x1112, 0x116D, 0x11AF, 0x1112, 0x116D, 0x11B0, 0x1112, 0x116D, + 0x11B1, 0x1112, 0x116D, 0x11B2, 0x1112, 0x116D, 0x11B3, 0x1112, + 0x116D, 0x11B4, 0x1112, 0x116D, 0x11B5, 0x1112, 0x116D, 0x11B6, + 0x1112, 0x116D, 0x11B7, 0x1112, 0x116D, 0x11B8, 0x1112, 0x116D, + 0x11B9, 0x1112, 0x116D, 0x11BA, 0x1112, 0x116D, 0x11BB, 0x1112, + 0x116D, 0x11BC, 0x1112, 0x116D, 0x11BD, 0x1112, 0x116D, 0x11BE, + 0x1112, 0x116D, 0x11BF, 0x1112, 0x116D, 0x11C0, 0x1112, 0x116D, + 0x11C1, 0x1112, 0x116D, 0x11C2, 0x1112, 0x116E, 0x1112, 0x116E, + 0x11A8, 0x1112, 0x116E, 0x11A9, 0x1112, 0x116E, 0x11AA, 0x1112, + 0x116E, 0x11AB, 0x1112, 0x116E, 0x11AC, 0x1112, 0x116E, 0x11AD, + 0x1112, 0x116E, 0x11AE, 0x1112, 0x116E, 0x11AF, 0x1112, 0x116E, + 0x11B0, 0x1112, 0x116E, 0x11B1, 0x1112, 0x116E, 0x11B2, 0x1112, + 0x116E, 0x11B3, 0x1112, 0x116E, 0x11B4, 0x1112, 0x116E, 0x11B5, + 0x1112, 0x116E, 0x11B6, 0x1112, 0x116E, 0x11B7, 0x1112, 0x116E, + 0x11B8, 0x1112, 0x116E, 0x11B9, 0x1112, 0x116E, 0x11BA, 0x1112, + 0x116E, 0x11BB, 0x1112, 0x116E, 0x11BC, 0x1112, 0x116E, 0x11BD, + 0x1112, 0x116E, 0x11BE, 0x1112, 0x116E, 0x11BF, 0x1112, 0x116E, + 0x11C0, 0x1112, 0x116E, 0x11C1, 0x1112, 0x116E, 0x11C2, 0x1112, + 0x116F, 0x1112, 0x116F, 0x11A8, 0x1112, 0x116F, 0x11A9, 0x1112, + 0x116F, 0x11AA, 0x1112, 0x116F, 0x11AB, 0x1112, 0x116F, 0x11AC, + 0x1112, 0x116F, 0x11AD, 0x1112, 0x116F, 0x11AE, 0x1112, 0x116F, + 0x11AF, 0x1112, 0x116F, 0x11B0, 0x1112, 0x116F, 0x11B1, 0x1112, + 0x116F, 0x11B2, 0x1112, 0x116F, 0x11B3, 0x1112, 0x116F, 0x11B4, + 0x1112, 0x116F, 0x11B5, 0x1112, 0x116F, 0x11B6, 0x1112, 0x116F, + 0x11B7, 0x1112, 0x116F, 0x11B8, 0x1112, 0x116F, 0x11B9, 0x1112, + 0x116F, 0x11BA, 0x1112, 0x116F, 0x11BB, 0x1112, 0x116F, 0x11BC, + 0x1112, 0x116F, 0x11BD, 0x1112, 0x116F, 0x11BE, 0x1112, 0x116F, + 0x11BF, 0x1112, 0x116F, 0x11C0, 0x1112, 0x116F, 0x11C1, 0x1112, + 0x116F, 0x11C2, 0x1112, 0x1170, 0x1112, 0x1170, 0x11A8, 0x1112, + 0x1170, 0x11A9, 0x1112, 0x1170, 0x11AA, 0x1112, 0x1170, 0x11AB, + 0x1112, 0x1170, 0x11AC, 0x1112, 0x1170, 0x11AD, 0x1112, 0x1170, + 0x11AE, 0x1112, 0x1170, 0x11AF, 0x1112, 0x1170, 0x11B0, 0x1112, + 0x1170, 0x11B1, 0x1112, 0x1170, 0x11B2, 0x1112, 0x1170, 0x11B3, + 0x1112, 0x1170, 0x11B4, 0x1112, 0x1170, 0x11B5, 0x1112, 0x1170, + 0x11B6, 0x1112, 0x1170, 0x11B7, 0x1112, 0x1170, 0x11B8, 0x1112, + 0x1170, 0x11B9, 0x1112, 0x1170, 0x11BA, 0x1112, 0x1170, 0x11BB, + 0x1112, 0x1170, 0x11BC, 0x1112, 0x1170, 0x11BD, 0x1112, 0x1170, + 0x11BE, 0x1112, 0x1170, 0x11BF, 0x1112, 0x1170, 0x11C0, 0x1112, + 0x1170, 0x11C1, 0x1112, 0x1170, 0x11C2, 0x1112, 0x1171, 0x1112, + 0x1171, 0x11A8, 0x1112, 0x1171, 0x11A9, 0x1112, 0x1171, 0x11AA, + 0x1112, 0x1171, 0x11AB, 0x1112, 0x1171, 0x11AC, 0x1112, 0x1171, + 0x11AD, 0x1112, 0x1171, 0x11AE, 0x1112, 0x1171, 0x11AF, 0x1112, + 0x1171, 0x11B0, 0x1112, 0x1171, 0x11B1, 0x1112, 0x1171, 0x11B2, + 0x1112, 0x1171, 0x11B3, 0x1112, 0x1171, 0x11B4, 0x1112, 0x1171, + 0x11B5, 0x1112, 0x1171, 0x11B6, 0x1112, 0x1171, 0x11B7, 0x1112, + 0x1171, 0x11B8, 0x1112, 0x1171, 0x11B9, 0x1112, 0x1171, 0x11BA, + 0x1112, 0x1171, 0x11BB, 0x1112, 0x1171, 0x11BC, 0x1112, 0x1171, + 0x11BD, 0x1112, 0x1171, 0x11BE, 0x1112, 0x1171, 0x11BF, 0x1112, + 0x1171, 0x11C0, 0x1112, 0x1171, 0x11C1, 0x1112, 0x1171, 0x11C2, + 0x1112, 0x1172, 0x1112, 0x1172, 0x11A8, 0x1112, 0x1172, 0x11A9, + 0x1112, 0x1172, 0x11AA, 0x1112, 0x1172, 0x11AB, 0x1112, 0x1172, + 0x11AC, 0x1112, 0x1172, 0x11AD, 0x1112, 0x1172, 0x11AE, 0x1112, + 0x1172, 0x11AF, 0x1112, 0x1172, 0x11B0, 0x1112, 0x1172, 0x11B1, + 0x1112, 0x1172, 0x11B2, 0x1112, 0x1172, 0x11B3, 0x1112, 0x1172, + 0x11B4, 0x1112, 0x1172, 0x11B5, 0x1112, 0x1172, 0x11B6, 0x1112, + 0x1172, 0x11B7, 0x1112, 0x1172, 0x11B8, 0x1112, 0x1172, 0x11B9, + 0x1112, 0x1172, 0x11BA, 0x1112, 0x1172, 0x11BB, 0x1112, 0x1172, + 0x11BC, 0x1112, 0x1172, 0x11BD, 0x1112, 0x1172, 0x11BE, 0x1112, + 0x1172, 0x11BF, 0x1112, 0x1172, 0x11C0, 0x1112, 0x1172, 0x11C1, + 0x1112, 0x1172, 0x11C2, 0x1112, 0x1173, 0x1112, 0x1173, 0x11A8, + 0x1112, 0x1173, 0x11A9, 0x1112, 0x1173, 0x11AA, 0x1112, 0x1173, + 0x11AB, 0x1112, 0x1173, 0x11AC, 0x1112, 0x1173, 0x11AD, 0x1112, + 0x1173, 0x11AE, 0x1112, 0x1173, 0x11AF, 0x1112, 0x1173, 0x11B0, + 0x1112, 0x1173, 0x11B1, 0x1112, 0x1173, 0x11B2, 0x1112, 0x1173, + 0x11B3, 0x1112, 0x1173, 0x11B4, 0x1112, 0x1173, 0x11B5, 0x1112, + 0x1173, 0x11B6, 0x1112, 0x1173, 0x11B7, 0x1112, 0x1173, 0x11B8, + 0x1112, 0x1173, 0x11B9, 0x1112, 0x1173, 0x11BA, 0x1112, 0x1173, + 0x11BB, 0x1112, 0x1173, 0x11BC, 0x1112, 0x1173, 0x11BD, 0x1112, + 0x1173, 0x11BE, 0x1112, 0x1173, 0x11BF, 0x1112, 0x1173, 0x11C0, + 0x1112, 0x1173, 0x11C1, 0x1112, 0x1173, 0x11C2, 0x1112, 0x1174, + 0x1112, 0x1174, 0x11A8, 0x1112, 0x1174, 0x11A9, 0x1112, 0x1174, + 0x11AA, 0x1112, 0x1174, 0x11AB, 0x1112, 0x1174, 0x11AC, 0x1112, + 0x1174, 0x11AD, 0x1112, 0x1174, 0x11AE, 0x1112, 0x1174, 0x11AF, + 0x1112, 0x1174, 0x11B0, 0x1112, 0x1174, 0x11B1, 0x1112, 0x1174, + 0x11B2, 0x1112, 0x1174, 0x11B3, 0x1112, 0x1174, 0x11B4, 0x1112, + 0x1174, 0x11B5, 0x1112, 0x1174, 0x11B6, 0x1112, 0x1174, 0x11B7, + 0x1112, 0x1174, 0x11B8, 0x1112, 0x1174, 0x11B9, 0x1112, 0x1174, + 0x11BA, 0x1112, 0x1174, 0x11BB, 0x1112, 0x1174, 0x11BC, 0x1112, + 0x1174, 0x11BD, 0x1112, 0x1174, 0x11BE, 0x1112, 0x1174, 0x11BF, + 0x1112, 0x1174, 0x11C0, 0x1112, 0x1174, 0x11C1, 0x1112, 0x1174, + 0x11C2, 0x1112, 0x1175, 0x1112, 0x1175, 0x11A8, 0x1112, 0x1175, + 0x11A9, 0x1112, 0x1175, 0x11AA, 0x1112, 0x1175, 0x11AB, 0x1112, + 0x1175, 0x11AC, 0x1112, 0x1175, 0x11AD, 0x1112, 0x1175, 0x11AE, + 0x1112, 0x1175, 0x11AF, 0x1112, 0x1175, 0x11B0, 0x1112, 0x1175, + 0x11B1, 0x1112, 0x1175, 0x11B2, 0x1112, 0x1175, 0x11B3, 0x1112, + 0x1175, 0x11B4, 0x1112, 0x1175, 0x11B5, 0x1112, 0x1175, 0x11B6, + 0x1112, 0x1175, 0x11B7, 0x1112, 0x1175, 0x11B8, 0x1112, 0x1175, + 0x11B9, 0x1112, 0x1175, 0x11BA, 0x1112, 0x1175, 0x11BB, 0x1112, + 0x1175, 0x11BC, 0x1112, 0x1175, 0x11BD, 0x1112, 0x1175, 0x11BE, + 0x1112, 0x1175, 0x11BF, 0x1112, 0x1175, 0x11C0, 0x1112, 0x1175, + 0x11C1, 0x1112, 0x1175, 0x11C2, 0x8C48, 0x66F4, 0x8ECA, 0x8CC8, + 0x6ED1, 0x4E32, 0x53E5, 0x9F9C, 0x9F9C, 0x5951, 0x91D1, 0x5587, + 0x5948, 0x61F6, 0x7669, 0x7F85, 0x863F, 0x87BA, 0x88F8, 0x908F, + 0x6A02, 0x6D1B, 0x70D9, 0x73DE, 0x843D, 0x916A, 0x99F1, 0x4E82, + 0x5375, 0x6B04, 0x721B, 0x862D, 0x9E1E, 0x5D50, 0x6FEB, 0x85CD, + 0x8964, 0x62C9, 0x81D8, 0x881F, 0x5ECA, 0x6717, 0x6D6A, 0x72FC, + 0x90CE, 0x4F86, 0x51B7, 0x52DE, 0x64C4, 0x6AD3, 0x7210, 0x76E7, + 0x8001, 0x8606, 0x865C, 0x8DEF, 0x9732, 0x9B6F, 0x9DFA, 0x788C, + 0x797F, 0x7DA0, 0x83C9, 0x9304, 0x9E7F, 0x8AD6, 0x58DF, 0x5F04, + 0x7C60, 0x807E, 0x7262, 0x78CA, 0x8CC2, 0x96F7, 0x58D8, 0x5C62, + 0x6A13, 0x6DDA, 0x6F0F, 0x7D2F, 0x7E37, 0x964B, 0x52D2, 0x808B, + 0x51DC, 0x51CC, 0x7A1C, 0x7DBE, 0x83F1, 0x9675, 0x8B80, 0x62CF, + 0x6A02, 0x8AFE, 0x4E39, 0x5BE7, 0x6012, 0x7387, 0x7570, 0x5317, + 0x78FB, 0x4FBF, 0x5FA9, 0x4E0D, 0x6CCC, 0x6578, 0x7D22, 0x53C3, + 0x585E, 0x7701, 0x8449, 0x8AAA, 0x6BBA, 0x8FB0, 0x6C88, 0x62FE, + 0x82E5, 0x63A0, 0x7565, 0x4EAE, 0x5169, 0x51C9, 0x6881, 0x7CE7, + 0x826F, 0x8AD2, 0x91CF, 0x52F5, 0x5442, 0x5973, 0x5EEC, 0x65C5, + 0x6FFE, 0x792A, 0x95AD, 0x9A6A, 0x9E97, 0x9ECE, 0x529B, 0x66C6, + 0x6B77, 0x8F62, 0x5E74, 0x6190, 0x6200, 0x649A, 0x6F23, 0x7149, + 0x7489, 0x79CA, 0x7DF4, 0x806F, 0x8F26, 0x84EE, 0x9023, 0x934A, + 0x5217, 0x52A3, 0x54BD, 0x70C8, 0x88C2, 0x8AAA, 0x5EC9, 0x5FF5, + 0x637B, 0x6BAE, 0x7C3E, 0x7375, 0x4EE4, 0x56F9, 0x5BE7, 0x5DBA, + 0x601C, 0x73B2, 0x7469, 0x7F9A, 0x8046, 0x9234, 0x96F6, 0x9748, + 0x9818, 0x4F8B, 0x79AE, 0x91B4, 0x96B8, 0x60E1, 0x4E86, 0x50DA, + 0x5BEE, 0x5C3F, 0x6599, 0x6A02, 0x71CE, 0x7642, 0x84FC, 0x907C, + 0x9F8D, 0x6688, 0x962E, 0x5289, 0x677B, 0x67F3, 0x6D41, 0x6E9C, + 0x7409, 0x7559, 0x786B, 0x7D10, 0x985E, 0x516D, 0x622E, 0x9678, + 0x502B, 0x5D19, 0x6DEA, 0x8F2A, 0x5F8B, 0x6144, 0x6817, 0x7387, + 0x9686, 0x5229, 0x540F, 0x5C65, 0x6613, 0x674E, 0x68A8, 0x6CE5, + 0x7406, 0x75E2, 0x7F79, 0x88CF, 0x88E1, 0x91CC, 0x96E2, 0x533F, + 0x6EBA, 0x541D, 0x71D0, 0x7498, 0x85FA, 0x96A3, 0x9C57, 0x9E9F, + 0x6797, 0x6DCB, 0x81E8, 0x7ACB, 0x7B20, 0x7C92, 0x72C0, 0x7099, + 0x8B58, 0x4EC0, 0x8336, 0x523A, 0x5207, 0x5EA6, 0x62D3, 0x7CD6, + 0x5B85, 0x6D1E, 0x66B4, 0x8F3B, 0x884C, 0x964D, 0x898B, 0x5ED3, + 0x5140, 0x55C0, 0x585A, 0x6674, 0x51DE, 0x732A, 0x76CA, 0x793C, + 0x795E, 0x7965, 0x798F, 0x9756, 0x7CBE, 0x7FBD, 0x8612, 0x8AF8, + 0x9038, 0x90FD, 0x98EF, 0x98FC, 0x9928, 0x9DB4, 0x90DE, 0x96B7, + 0x4FAE, 0x50E7, 0x514D, 0x52C9, 0x52E4, 0x5351, 0x559D, 0x5606, + 0x5668, 0x5840, 0x58A8, 0x5C64, 0x5C6E, 0x6094, 0x6168, 0x618E, + 0x61F2, 0x654F, 0x65E2, 0x6691, 0x6885, 0x6D77, 0x6E1A, 0x6F22, + 0x716E, 0x722B, 0x7422, 0x7891, 0x793E, 0x7949, 0x7948, 0x7950, + 0x7956, 0x795D, 0x798D, 0x798E, 0x7A40, 0x7A81, 0x7BC0, 0x7DF4, + 0x7E09, 0x7E41, 0x7F72, 0x8005, 0x81ED, 0x8279, 0x8279, 0x8457, + 0x8910, 0x8996, 0x8B01, 0x8B39, 0x8CD3, 0x8D08, 0x8FB6, 0x9038, + 0x96E3, 0x97FF, 0x983B, 0x6075, 0x242EE, 0x8218, 0x4E26, 0x51B5, + 0x5168, 0x4F80, 0x5145, 0x5180, 0x52C7, 0x52FA, 0x559D, 0x5555, + 0x5599, 0x55E2, 0x585A, 0x58B3, 0x5944, 0x5954, 0x5A62, 0x5B28, + 0x5ED2, 0x5ED9, 0x5F69, 0x5FAD, 0x60D8, 0x614E, 0x6108, 0x618E, + 0x6160, 0x61F2, 0x6234, 0x63C4, 0x641C, 0x6452, 0x6556, 0x6674, + 0x6717, 0x671B, 0x6756, 0x6B79, 0x6BBA, 0x6D41, 0x6EDB, 0x6ECB, + 0x6F22, 0x701E, 0x716E, 0x77A7, 0x7235, 0x72AF, 0x732A, 0x7471, + 0x7506, 0x753B, 0x761D, 0x761F, 0x76CA, 0x76DB, 0x76F4, 0x774A, + 0x7740, 0x78CC, 0x7AB1, 0x7BC0, 0x7C7B, 0x7D5B, 0x7DF4, 0x7F3E, + 0x8005, 0x8352, 0x83EF, 0x8779, 0x8941, 0x8986, 0x8996, 0x8ABF, + 0x8AF8, 0x8ACB, 0x8B01, 0x8AFE, 0x8AED, 0x8B39, 0x8B8A, 0x8D08, + 0x8F38, 0x9072, 0x9199, 0x9276, 0x967C, 0x96E3, 0x9756, 0x97DB, + 0x97FF, 0x980B, 0x983B, 0x9B12, 0x9F9C, 0x2284A, 0x22844, 0x233D5, + 0x3B9D, 0x4018, 0x4039, 0x25249, 0x25CD0, 0x27ED3, 0x9F43, 0x9F8E, + 0x0066, 0x0066, 0x0066, 0x0069, 0x0066, 0x006C, 0x0066, 0x0066, + 0x0069, 0x0066, 0x0066, 0x006C, 0x0073, 0x0074, 0x0073, 0x0074, + 0x0574, 0x0576, 0x0574, 0x0565, 0x0574, 0x056B, 0x057E, 0x0576, + 0x0574, 0x056D, 0x05D9, 0x05B4, 0x05F2, 0x05B7, 0x05E2, 0x05D0, + 0x05D3, 0x05D4, 0x05DB, 0x05DC, 0x05DD, 0x05E8, 0x05EA, 0x002B, + 0x05E9, 0x05C1, 0x05E9, 0x05C2, 0x05E9, 0x05BC, 0x05C1, 0x05E9, + 0x05BC, 0x05C2, 0x05D0, 0x05B7, 0x05D0, 0x05B8, 0x05D0, 0x05BC, + 0x05D1, 0x05BC, 0x05D2, 0x05BC, 0x05D3, 0x05BC, 0x05D4, 0x05BC, + 0x05D5, 0x05BC, 0x05D6, 0x05BC, 0x05D8, 0x05BC, 0x05D9, 0x05BC, + 0x05DA, 0x05BC, 0x05DB, 0x05BC, 0x05DC, 0x05BC, 0x05DE, 0x05BC, + 0x05E0, 0x05BC, 0x05E1, 0x05BC, 0x05E3, 0x05BC, 0x05E4, 0x05BC, + 0x05E6, 0x05BC, 0x05E7, 0x05BC, 0x05E8, 0x05BC, 0x05E9, 0x05BC, + 0x05EA, 0x05BC, 0x05D5, 0x05B9, 0x05D1, 0x05BF, 0x05DB, 0x05BF, + 0x05E4, 0x05BF, 0x05D0, 0x05DC, 0x0671, 0x0671, 0x067B, 0x067B, + 0x067B, 0x067B, 0x067E, 0x067E, 0x067E, 0x067E, 0x0680, 0x0680, + 0x0680, 0x0680, 0x067A, 0x067A, 0x067A, 0x067A, 0x067F, 0x067F, + 0x067F, 0x067F, 0x0679, 0x0679, 0x0679, 0x0679, 0x06A4, 0x06A4, + 0x06A4, 0x06A4, 0x06A6, 0x06A6, 0x06A6, 0x06A6, 0x0684, 0x0684, + 0x0684, 0x0684, 0x0683, 0x0683, 0x0683, 0x0683, 0x0686, 0x0686, + 0x0686, 0x0686, 0x0687, 0x0687, 0x0687, 0x0687, 0x068D, 0x068D, + 0x068C, 0x068C, 0x068E, 0x068E, 0x0688, 0x0688, 0x0698, 0x0698, + 0x0691, 0x0691, 0x06A9, 0x06A9, 0x06A9, 0x06A9, 0x06AF, 0x06AF, + 0x06AF, 0x06AF, 0x06B3, 0x06B3, 0x06B3, 0x06B3, 0x06B1, 0x06B1, + 0x06B1, 0x06B1, 0x06BA, 0x06BA, 0x06BB, 0x06BB, 0x06BB, 0x06BB, + 0x06D5, 0x0654, 0x06D5, 0x0654, 0x06C1, 0x06C1, 0x06C1, 0x06C1, + 0x06BE, 0x06BE, 0x06BE, 0x06BE, 0x06D2, 0x06D2, 0x06D2, 0x0654, + 0x06D2, 0x0654, 0x06AD, 0x06AD, 0x06AD, 0x06AD, 0x06C7, 0x06C7, + 0x06C6, 0x06C6, 0x06C8, 0x06C8, 0x06C7, 0x0674, 0x06CB, 0x06CB, + 0x06C5, 0x06C5, 0x06C9, 0x06C9, 0x06D0, 0x06D0, 0x06D0, 0x06D0, + 0x0649, 0x0649, 0x064A, 0x0654, 0x0627, 0x064A, 0x0654, 0x0627, + 0x064A, 0x0654, 0x06D5, 0x064A, 0x0654, 0x06D5, 0x064A, 0x0654, + 0x0648, 0x064A, 0x0654, 0x0648, 0x064A, 0x0654, 0x06C7, 0x064A, + 0x0654, 0x06C7, 0x064A, 0x0654, 0x06C6, 0x064A, 0x0654, 0x06C6, + 0x064A, 0x0654, 0x06C8, 0x064A, 0x0654, 0x06C8, 0x064A, 0x0654, + 0x06D0, 0x064A, 0x0654, 0x06D0, 0x064A, 0x0654, 0x06D0, 0x064A, + 0x0654, 0x0649, 0x064A, 0x0654, 0x0649, 0x064A, 0x0654, 0x0649, + 0x06CC, 0x06CC, 0x06CC, 0x06CC, 0x064A, 0x0654, 0x062C, 0x064A, + 0x0654, 0x062D, 0x064A, 0x0654, 0x0645, 0x064A, 0x0654, 0x0649, + 0x064A, 0x0654, 0x064A, 0x0628, 0x062C, 0x0628, 0x062D, 0x0628, + 0x062E, 0x0628, 0x0645, 0x0628, 0x0649, 0x0628, 0x064A, 0x062A, + 0x062C, 0x062A, 0x062D, 0x062A, 0x062E, 0x062A, 0x0645, 0x062A, + 0x0649, 0x062A, 0x064A, 0x062B, 0x062C, 0x062B, 0x0645, 0x062B, + 0x0649, 0x062B, 0x064A, 0x062C, 0x062D, 0x062C, 0x0645, 0x062D, + 0x062C, 0x062D, 0x0645, 0x062E, 0x062C, 0x062E, 0x062D, 0x062E, + 0x0645, 0x0633, 0x062C, 0x0633, 0x062D, 0x0633, 0x062E, 0x0633, + 0x0645, 0x0635, 0x062D, 0x0635, 0x0645, 0x0636, 0x062C, 0x0636, + 0x062D, 0x0636, 0x062E, 0x0636, 0x0645, 0x0637, 0x062D, 0x0637, + 0x0645, 0x0638, 0x0645, 0x0639, 0x062C, 0x0639, 0x0645, 0x063A, + 0x062C, 0x063A, 0x0645, 0x0641, 0x062C, 0x0641, 0x062D, 0x0641, + 0x062E, 0x0641, 0x0645, 0x0641, 0x0649, 0x0641, 0x064A, 0x0642, + 0x062D, 0x0642, 0x0645, 0x0642, 0x0649, 0x0642, 0x064A, 0x0643, + 0x0627, 0x0643, 0x062C, 0x0643, 0x062D, 0x0643, 0x062E, 0x0643, + 0x0644, 0x0643, 0x0645, 0x0643, 0x0649, 0x0643, 0x064A, 0x0644, + 0x062C, 0x0644, 0x062D, 0x0644, 0x062E, 0x0644, 0x0645, 0x0644, + 0x0649, 0x0644, 0x064A, 0x0645, 0x062C, 0x0645, 0x062D, 0x0645, + 0x062E, 0x0645, 0x0645, 0x0645, 0x0649, 0x0645, 0x064A, 0x0646, + 0x062C, 0x0646, 0x062D, 0x0646, 0x062E, 0x0646, 0x0645, 0x0646, + 0x0649, 0x0646, 0x064A, 0x0647, 0x062C, 0x0647, 0x0645, 0x0647, + 0x0649, 0x0647, 0x064A, 0x064A, 0x062C, 0x064A, 0x062D, 0x064A, + 0x062E, 0x064A, 0x0645, 0x064A, 0x0649, 0x064A, 0x064A, 0x0630, + 0x0670, 0x0631, 0x0670, 0x0649, 0x0670, 0x0020, 0x064C, 0x0651, + 0x0020, 0x064D, 0x0651, 0x0020, 0x064E, 0x0651, 0x0020, 0x064F, + 0x0651, 0x0020, 0x0650, 0x0651, 0x0020, 0x0651, 0x0670, 0x064A, + 0x0654, 0x0631, 0x064A, 0x0654, 0x0632, 0x064A, 0x0654, 0x0645, + 0x064A, 0x0654, 0x0646, 0x064A, 0x0654, 0x0649, 0x064A, 0x0654, + 0x064A, 0x0628, 0x0631, 0x0628, 0x0632, 0x0628, 0x0645, 0x0628, + 0x0646, 0x0628, 0x0649, 0x0628, 0x064A, 0x062A, 0x0631, 0x062A, + 0x0632, 0x062A, 0x0645, 0x062A, 0x0646, 0x062A, 0x0649, 0x062A, + 0x064A, 0x062B, 0x0631, 0x062B, 0x0632, 0x062B, 0x0645, 0x062B, + 0x0646, 0x062B, 0x0649, 0x062B, 0x064A, 0x0641, 0x0649, 0x0641, + 0x064A, 0x0642, 0x0649, 0x0642, 0x064A, 0x0643, 0x0627, 0x0643, + 0x0644, 0x0643, 0x0645, 0x0643, 0x0649, 0x0643, 0x064A, 0x0644, + 0x0645, 0x0644, 0x0649, 0x0644, 0x064A, 0x0645, 0x0627, 0x0645, + 0x0645, 0x0646, 0x0631, 0x0646, 0x0632, 0x0646, 0x0645, 0x0646, + 0x0646, 0x0646, 0x0649, 0x0646, 0x064A, 0x0649, 0x0670, 0x064A, + 0x0631, 0x064A, 0x0632, 0x064A, 0x0645, 0x064A, 0x0646, 0x064A, + 0x0649, 0x064A, 0x064A, 0x064A, 0x0654, 0x062C, 0x064A, 0x0654, + 0x062D, 0x064A, 0x0654, 0x062E, 0x064A, 0x0654, 0x0645, 0x064A, + 0x0654, 0x0647, 0x0628, 0x062C, 0x0628, 0x062D, 0x0628, 0x062E, + 0x0628, 0x0645, 0x0628, 0x0647, 0x062A, 0x062C, 0x062A, 0x062D, + 0x062A, 0x062E, 0x062A, 0x0645, 0x062A, 0x0647, 0x062B, 0x0645, + 0x062C, 0x062D, 0x062C, 0x0645, 0x062D, 0x062C, 0x062D, 0x0645, + 0x062E, 0x062C, 0x062E, 0x0645, 0x0633, 0x062C, 0x0633, 0x062D, + 0x0633, 0x062E, 0x0633, 0x0645, 0x0635, 0x062D, 0x0635, 0x062E, + 0x0635, 0x0645, 0x0636, 0x062C, 0x0636, 0x062D, 0x0636, 0x062E, + 0x0636, 0x0645, 0x0637, 0x062D, 0x0638, 0x0645, 0x0639, 0x062C, + 0x0639, 0x0645, 0x063A, 0x062C, 0x063A, 0x0645, 0x0641, 0x062C, + 0x0641, 0x062D, 0x0641, 0x062E, 0x0641, 0x0645, 0x0642, 0x062D, + 0x0642, 0x0645, 0x0643, 0x062C, 0x0643, 0x062D, 0x0643, 0x062E, + 0x0643, 0x0644, 0x0643, 0x0645, 0x0644, 0x062C, 0x0644, 0x062D, + 0x0644, 0x062E, 0x0644, 0x0645, 0x0644, 0x0647, 0x0645, 0x062C, + 0x0645, 0x062D, 0x0645, 0x062E, 0x0645, 0x0645, 0x0646, 0x062C, + 0x0646, 0x062D, 0x0646, 0x062E, 0x0646, 0x0645, 0x0646, 0x0647, + 0x0647, 0x062C, 0x0647, 0x0645, 0x0647, 0x0670, 0x064A, 0x062C, + 0x064A, 0x062D, 0x064A, 0x062E, 0x064A, 0x0645, 0x064A, 0x0647, + 0x064A, 0x0654, 0x0645, 0x064A, 0x0654, 0x0647, 0x0628, 0x0645, + 0x0628, 0x0647, 0x062A, 0x0645, 0x062A, 0x0647, 0x062B, 0x0645, + 0x062B, 0x0647, 0x0633, 0x0645, 0x0633, 0x0647, 0x0634, 0x0645, + 0x0634, 0x0647, 0x0643, 0x0644, 0x0643, 0x0645, 0x0644, 0x0645, + 0x0646, 0x0645, 0x0646, 0x0647, 0x064A, 0x0645, 0x064A, 0x0647, + 0x0640, 0x064E, 0x0651, 0x0640, 0x064F, 0x0651, 0x0640, 0x0650, + 0x0651, 0x0637, 0x0649, 0x0637, 0x064A, 0x0639, 0x0649, 0x0639, + 0x064A, 0x063A, 0x0649, 0x063A, 0x064A, 0x0633, 0x0649, 0x0633, + 0x064A, 0x0634, 0x0649, 0x0634, 0x064A, 0x062D, 0x0649, 0x062D, + 0x064A, 0x062C, 0x0649, 0x062C, 0x064A, 0x062E, 0x0649, 0x062E, + 0x064A, 0x0635, 0x0649, 0x0635, 0x064A, 0x0636, 0x0649, 0x0636, + 0x064A, 0x0634, 0x062C, 0x0634, 0x062D, 0x0634, 0x062E, 0x0634, + 0x0645, 0x0634, 0x0631, 0x0633, 0x0631, 0x0635, 0x0631, 0x0636, + 0x0631, 0x0637, 0x0649, 0x0637, 0x064A, 0x0639, 0x0649, 0x0639, + 0x064A, 0x063A, 0x0649, 0x063A, 0x064A, 0x0633, 0x0649, 0x0633, + 0x064A, 0x0634, 0x0649, 0x0634, 0x064A, 0x062D, 0x0649, 0x062D, + 0x064A, 0x062C, 0x0649, 0x062C, 0x064A, 0x062E, 0x0649, 0x062E, + 0x064A, 0x0635, 0x0649, 0x0635, 0x064A, 0x0636, 0x0649, 0x0636, + 0x064A, 0x0634, 0x062C, 0x0634, 0x062D, 0x0634, 0x062E, 0x0634, + 0x0645, 0x0634, 0x0631, 0x0633, 0x0631, 0x0635, 0x0631, 0x0636, + 0x0631, 0x0634, 0x062C, 0x0634, 0x062D, 0x0634, 0x062E, 0x0634, + 0x0645, 0x0633, 0x0647, 0x0634, 0x0647, 0x0637, 0x0645, 0x0633, + 0x062C, 0x0633, 0x062D, 0x0633, 0x062E, 0x0634, 0x062C, 0x0634, + 0x062D, 0x0634, 0x062E, 0x0637, 0x0645, 0x0638, 0x0645, 0x0627, + 0x064B, 0x0627, 0x064B, 0x062A, 0x062C, 0x0645, 0x062A, 0x062D, + 0x062C, 0x062A, 0x062D, 0x062C, 0x062A, 0x062D, 0x0645, 0x062A, + 0x062E, 0x0645, 0x062A, 0x0645, 0x062C, 0x062A, 0x0645, 0x062D, + 0x062A, 0x0645, 0x062E, 0x062C, 0x0645, 0x062D, 0x062C, 0x0645, + 0x062D, 0x062D, 0x0645, 0x064A, 0x062D, 0x0645, 0x0649, 0x0633, + 0x062D, 0x062C, 0x0633, 0x062C, 0x062D, 0x0633, 0x062C, 0x0649, + 0x0633, 0x0645, 0x062D, 0x0633, 0x0645, 0x062D, 0x0633, 0x0645, + 0x062C, 0x0633, 0x0645, 0x0645, 0x0633, 0x0645, 0x0645, 0x0635, + 0x062D, 0x062D, 0x0635, 0x062D, 0x062D, 0x0635, 0x0645, 0x0645, + 0x0634, 0x062D, 0x0645, 0x0634, 0x062D, 0x0645, 0x0634, 0x062C, + 0x064A, 0x0634, 0x0645, 0x062E, 0x0634, 0x0645, 0x062E, 0x0634, + 0x0645, 0x0645, 0x0634, 0x0645, 0x0645, 0x0636, 0x062D, 0x0649, + 0x0636, 0x062E, 0x0645, 0x0636, 0x062E, 0x0645, 0x0637, 0x0645, + 0x062D, 0x0637, 0x0645, 0x062D, 0x0637, 0x0645, 0x0645, 0x0637, + 0x0645, 0x064A, 0x0639, 0x062C, 0x0645, 0x0639, 0x0645, 0x0645, + 0x0639, 0x0645, 0x0645, 0x0639, 0x0645, 0x0649, 0x063A, 0x0645, + 0x0645, 0x063A, 0x0645, 0x064A, 0x063A, 0x0645, 0x0649, 0x0641, + 0x062E, 0x0645, 0x0641, 0x062E, 0x0645, 0x0642, 0x0645, 0x062D, + 0x0642, 0x0645, 0x0645, 0x0644, 0x062D, 0x0645, 0x0644, 0x062D, + 0x064A, 0x0644, 0x062D, 0x0649, 0x0644, 0x062C, 0x062C, 0x0644, + 0x062C, 0x062C, 0x0644, 0x062E, 0x0645, 0x0644, 0x062E, 0x0645, + 0x0644, 0x0645, 0x062D, 0x0644, 0x0645, 0x062D, 0x0645, 0x062D, + 0x062C, 0x0645, 0x062D, 0x0645, 0x0645, 0x062D, 0x064A, 0x0645, + 0x062C, 0x062D, 0x0645, 0x062C, 0x0645, 0x0645, 0x062E, 0x062C, + 0x0645, 0x062E, 0x0645, 0x0645, 0x062C, 0x062E, 0x0647, 0x0645, + 0x062C, 0x0647, 0x0645, 0x0645, 0x0646, 0x062D, 0x0645, 0x0646, + 0x062D, 0x0649, 0x0646, 0x062C, 0x0645, 0x0646, 0x062C, 0x0645, + 0x0646, 0x062C, 0x0649, 0x0646, 0x0645, 0x064A, 0x0646, 0x0645, + 0x0649, 0x064A, 0x0645, 0x0645, 0x064A, 0x0645, 0x0645, 0x0628, + 0x062E, 0x064A, 0x062A, 0x062C, 0x064A, 0x062A, 0x062C, 0x0649, + 0x062A, 0x062E, 0x064A, 0x062A, 0x062E, 0x0649, 0x062A, 0x0645, + 0x064A, 0x062A, 0x0645, 0x0649, 0x062C, 0x0645, 0x064A, 0x062C, + 0x062D, 0x0649, 0x062C, 0x0645, 0x0649, 0x0633, 0x062E, 0x0649, + 0x0635, 0x062D, 0x064A, 0x0634, 0x062D, 0x064A, 0x0636, 0x062D, + 0x064A, 0x0644, 0x062C, 0x064A, 0x0644, 0x0645, 0x064A, 0x064A, + 0x062D, 0x064A, 0x064A, 0x062C, 0x064A, 0x064A, 0x0645, 0x064A, + 0x0645, 0x0645, 0x064A, 0x0642, 0x0645, 0x064A, 0x0646, 0x062D, + 0x064A, 0x0642, 0x0645, 0x062D, 0x0644, 0x062D, 0x0645, 0x0639, + 0x0645, 0x064A, 0x0643, 0x0645, 0x064A, 0x0646, 0x062C, 0x062D, + 0x0645, 0x062E, 0x064A, 0x0644, 0x062C, 0x0645, 0x0643, 0x0645, + 0x0645, 0x0644, 0x062C, 0x0645, 0x0646, 0x062C, 0x062D, 0x062C, + 0x062D, 0x064A, 0x062D, 0x062C, 0x064A, 0x0645, 0x062C, 0x064A, + 0x0641, 0x0645, 0x064A, 0x0628, 0x062D, 0x064A, 0x0643, 0x0645, + 0x0645, 0x0639, 0x062C, 0x0645, 0x0635, 0x0645, 0x0645, 0x0633, + 0x062E, 0x064A, 0x0646, 0x062C, 0x064A, 0x0635, 0x0644, 0x06D2, + 0x0642, 0x0644, 0x06D2, 0x0627, 0x0644, 0x0644, 0x0647, 0x0627, + 0x0643, 0x0628, 0x0631, 0x0645, 0x062D, 0x0645, 0x062F, 0x0635, + 0x0644, 0x0639, 0x0645, 0x0631, 0x0633, 0x0648, 0x0644, 0x0639, + 0x0644, 0x064A, 0x0647, 0x0648, 0x0633, 0x0644, 0x0645, 0x0635, + 0x0644, 0x0649, 0x0635, 0x0644, 0x0649, 0x0020, 0x0627, 0x0644, + 0x0644, 0x0647, 0x0020, 0x0639, 0x0644, 0x064A, 0x0647, 0x0020, + 0x0648, 0x0633, 0x0644, 0x0645, 0x062C, 0x0644, 0x0020, 0x062C, + 0x0644, 0x0627, 0x0644, 0x0647, 0x0631, 0x06CC, 0x0627, 0x0644, + 0x002C, 0x3001, 0x3002, 0x003A, 0x003B, 0x0021, 0x003F, 0x3016, + 0x3017, 0x002E, 0x002E, 0x002E, 0x002E, 0x002E, 0x2014, 0x2013, + 0x005F, 0x005F, 0x0028, 0x0029, 0x007B, 0x007D, 0x3014, 0x3015, + 0x3010, 0x3011, 0x300A, 0x300B, 0x3008, 0x3009, 0x300C, 0x300D, + 0x300E, 0x300F, 0x005B, 0x005D, 0x0020, 0x0305, 0x0020, 0x0305, + 0x0020, 0x0305, 0x0020, 0x0305, 0x005F, 0x005F, 0x005F, 0x002C, + 0x3001, 0x002E, 0x003B, 0x003A, 0x003F, 0x0021, 0x2014, 0x0028, + 0x0029, 0x007B, 0x007D, 0x3014, 0x3015, 0x0023, 0x0026, 0x002A, + 0x002B, 0x002D, 0x003C, 0x003E, 0x003D, 0x005C, 0x0024, 0x0025, + 0x0040, 0x0020, 0x064B, 0x0640, 0x064B, 0x0020, 0x064C, 0x0020, + 0x064D, 0x0020, 0x064E, 0x0640, 0x064E, 0x0020, 0x064F, 0x0640, + 0x064F, 0x0020, 0x0650, 0x0640, 0x0650, 0x0020, 0x0651, 0x0640, + 0x0651, 0x0020, 0x0652, 0x0640, 0x0652, 0x0621, 0x0627, 0x0653, + 0x0627, 0x0653, 0x0627, 0x0654, 0x0627, 0x0654, 0x0648, 0x0654, + 0x0648, 0x0654, 0x0627, 0x0655, 0x0627, 0x0655, 0x064A, 0x0654, + 0x064A, 0x0654, 0x064A, 0x0654, 0x064A, 0x0654, 0x0627, 0x0627, + 0x0628, 0x0628, 0x0628, 0x0628, 0x0629, 0x0629, 0x062A, 0x062A, + 0x062A, 0x062A, 0x062B, 0x062B, 0x062B, 0x062B, 0x062C, 0x062C, + 0x062C, 0x062C, 0x062D, 0x062D, 0x062D, 0x062D, 0x062E, 0x062E, + 0x062E, 0x062E, 0x062F, 0x062F, 0x0630, 0x0630, 0x0631, 0x0631, + 0x0632, 0x0632, 0x0633, 0x0633, 0x0633, 0x0633, 0x0634, 0x0634, + 0x0634, 0x0634, 0x0635, 0x0635, 0x0635, 0x0635, 0x0636, 0x0636, + 0x0636, 0x0636, 0x0637, 0x0637, 0x0637, 0x0637, 0x0638, 0x0638, + 0x0638, 0x0638, 0x0639, 0x0639, 0x0639, 0x0639, 0x063A, 0x063A, + 0x063A, 0x063A, 0x0641, 0x0641, 0x0641, 0x0641, 0x0642, 0x0642, + 0x0642, 0x0642, 0x0643, 0x0643, 0x0643, 0x0643, 0x0644, 0x0644, + 0x0644, 0x0644, 0x0645, 0x0645, 0x0645, 0x0645, 0x0646, 0x0646, + 0x0646, 0x0646, 0x0647, 0x0647, 0x0647, 0x0647, 0x0648, 0x0648, + 0x0649, 0x0649, 0x064A, 0x064A, 0x064A, 0x064A, 0x0644, 0x0627, + 0x0653, 0x0644, 0x0627, 0x0653, 0x0644, 0x0627, 0x0654, 0x0644, + 0x0627, 0x0654, 0x0644, 0x0627, 0x0655, 0x0644, 0x0627, 0x0655, + 0x0644, 0x0627, 0x0644, 0x0627, 0x0021, 0x0022, 0x0023, 0x0024, + 0x0025, 0x0026, 0x0027, 0x0028, 0x0029, 0x002A, 0x002B, 0x002C, + 0x002D, 0x002E, 0x002F, 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, + 0x0035, 0x0036, 0x0037, 0x0038, 0x0039, 0x003A, 0x003B, 0x003C, + 0x003D, 0x003E, 0x003F, 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, + 0x0045, 0x0046, 0x0047, 0x0048, 0x0049, 0x004A, 0x004B, 0x004C, + 0x004D, 0x004E, 0x004F, 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, + 0x0055, 0x0056, 0x0057, 0x0058, 0x0059, 0x005A, 0x005B, 0x005C, + 0x005D, 0x005E, 0x005F, 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, + 0x0065, 0x0066, 0x0067, 0x0068, 0x0069, 0x006A, 0x006B, 0x006C, + 0x006D, 0x006E, 0x006F, 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, + 0x0075, 0x0076, 0x0077, 0x0078, 0x0079, 0x007A, 0x007B, 0x007C, + 0x007D, 0x007E, 0x2985, 0x2986, 0x3002, 0x300C, 0x300D, 0x3001, + 0x30FB, 0x30F2, 0x30A1, 0x30A3, 0x30A5, 0x30A7, 0x30A9, 0x30E3, + 0x30E5, 0x30E7, 0x30C3, 0x30FC, 0x30A2, 0x30A4, 0x30A6, 0x30A8, + 0x30AA, 0x30AB, 0x30AD, 0x30AF, 0x30B1, 0x30B3, 0x30B5, 0x30B7, + 0x30B9, 0x30BB, 0x30BD, 0x30BF, 0x30C1, 0x30C4, 0x30C6, 0x30C8, + 0x30CA, 0x30CB, 0x30CC, 0x30CD, 0x30CE, 0x30CF, 0x30D2, 0x30D5, + 0x30D8, 0x30DB, 0x30DE, 0x30DF, 0x30E0, 0x30E1, 0x30E2, 0x30E4, + 0x30E6, 0x30E8, 0x30E9, 0x30EA, 0x30EB, 0x30EC, 0x30ED, 0x30EF, + 0x30F3, 0x3099, 0x309A, 0x1160, 0x1100, 0x1101, 0x11AA, 0x1102, + 0x11AC, 0x11AD, 0x1103, 0x1104, 0x1105, 0x11B0, 0x11B1, 0x11B2, + 0x11B3, 0x11B4, 0x11B5, 0x111A, 0x1106, 0x1107, 0x1108, 0x1121, + 0x1109, 0x110A, 0x110B, 0x110C, 0x110D, 0x110E, 0x110F, 0x1110, + 0x1111, 0x1112, 0x1161, 0x1162, 0x1163, 0x1164, 0x1165, 0x1166, + 0x1167, 0x1168, 0x1169, 0x116A, 0x116B, 0x116C, 0x116D, 0x116E, + 0x116F, 0x1170, 0x1171, 0x1172, 0x1173, 0x1174, 0x1175, 0x00A2, + 0x00A3, 0x00AC, 0x0020, 0x0304, 0x00A6, 0x00A5, 0x20A9, 0x2502, + 0x2190, 0x2191, 0x2192, 0x2193, 0x25A0, 0x25CB, 0x105D2, 0x0307, + 0x105DA, 0x0307, 0x02D0, 0x02D1, 0x00E6, 0x0299, 0x0253, 0x02A3, + 0xAB66, 0x02A5, 0x02A4, 0x0256, 0x0257, 0x1D91, 0x0258, 0x025E, + 0x02A9, 0x0264, 0x0262, 0x0260, 0x029B, 0x0127, 0x029C, 0x0267, + 0x0284, 0x02AA, 0x02AB, 0x026C, 0x1DF04, 0xA78E, 0x026E, 0x1DF05, + 0x028E, 0x1DF06, 0x00F8, 0x0276, 0x0277, 0x0071, 0x027A, 0x1DF08, + 0x027D, 0x027E, 0x0280, 0x02A8, 0x02A6, 0xAB67, 0x02A7, 0x0288, + 0x2C71, 0x028F, 0x02A1, 0x02A2, 0x0298, 0x01C0, 0x01C1, 0x01C2, + 0x1DF0A, 0x1DF1E, 0x11099, 0x110BA, 0x1109B, 0x110BA, 0x110A5, 0x110BA, + 0x11131, 0x11127, 0x11132, 0x11127, 0x11347, 0x1133E, 0x11347, 0x11357, + 0x11382, 0x113C9, 0x11384, 0x113BB, 0x1138B, 0x113C2, 0x11390, 0x113C9, + 0x113C2, 0x113C2, 0x113C2, 0x113B8, 0x113C2, 0x113C9, 0x114B9, 0x114BA, + 0x114B9, 0x114B0, 0x114B9, 0x114BD, 0x115B8, 0x115AF, 0x115B9, 0x115AF, + 0x11935, 0x11930, 0x1611E, 0x1611E, 0x1611E, 0x16129, 0x1611E, 0x1611F, + 0x16129, 0x1611F, 0x1611E, 0x16120, 0x1611E, 0x1611E, 0x1611F, 0x1611E, + 0x16129, 0x1611F, 0x1611E, 0x1611E, 0x16120, 0x16D67, 0x16D67, 0x16D63, + 0x16D67, 0x16D63, 0x16D67, 0x16D67, 0x0041, 0x0042, 0x0043, 0x0044, + 0x0045, 0x0046, 0x0047, 0x0048, 0x0049, 0x004A, 0x004B, 0x004C, + 0x004D, 0x004E, 0x004F, 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, + 0x0055, 0x0056, 0x0057, 0x0058, 0x0059, 0x005A, 0x0030, 0x0031, + 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, 0x0038, 0x0039, + 0x1D157, 0x1D165, 0x1D158, 0x1D165, 0x1D158, 0x1D165, 0x1D16E, 0x1D158, + 0x1D165, 0x1D16F, 0x1D158, 0x1D165, 0x1D170, 0x1D158, 0x1D165, 0x1D171, + 0x1D158, 0x1D165, 0x1D172, 0x1D1B9, 0x1D165, 0x1D1BA, 0x1D165, 0x1D1B9, + 0x1D165, 0x1D16E, 0x1D1BA, 0x1D165, 0x1D16E, 0x1D1B9, 0x1D165, 0x1D16F, + 0x1D1BA, 0x1D165, 0x1D16F, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, + 0x0046, 0x0047, 0x0048, 0x0049, 0x004A, 0x004B, 0x004C, 0x004D, + 0x004E, 0x004F, 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, + 0x0056, 0x0057, 0x0058, 0x0059, 0x005A, 0x0061, 0x0062, 0x0063, + 0x0064, 0x0065, 0x0066, 0x0067, 0x0068, 0x0069, 0x006A, 0x006B, + 0x006C, 0x006D, 0x006E, 0x006F, 0x0070, 0x0071, 0x0072, 0x0073, + 0x0074, 0x0075, 0x0076, 0x0077, 0x0078, 0x0079, 0x007A, 0x0041, + 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, 0x0048, 0x0049, + 0x004A, 0x004B, 0x004C, 0x004D, 0x004E, 0x004F, 0x0050, 0x0051, + 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 0x0058, 0x0059, + 0x005A, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, + 0x0069, 0x006A, 0x006B, 0x006C, 0x006D, 0x006E, 0x006F, 0x0070, + 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 0x0078, + 0x0079, 0x007A, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, + 0x0047, 0x0048, 0x0049, 0x004A, 0x004B, 0x004C, 0x004D, 0x004E, + 0x004F, 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, + 0x0057, 0x0058, 0x0059, 0x005A, 0x0061, 0x0062, 0x0063, 0x0064, + 0x0065, 0x0066, 0x0067, 0x0068, 0x0069, 0x006A, 0x006B, 0x006C, + 0x006D, 0x006E, 0x006F, 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, + 0x0075, 0x0076, 0x0077, 0x0078, 0x0079, 0x007A, 0x0041, 0x0043, + 0x0044, 0x0047, 0x004A, 0x004B, 0x004E, 0x004F, 0x0050, 0x0051, + 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 0x0058, 0x0059, 0x005A, + 0x0061, 0x0062, 0x0063, 0x0064, 0x0066, 0x0068, 0x0069, 0x006A, + 0x006B, 0x006C, 0x006D, 0x006E, 0x0070, 0x0071, 0x0072, 0x0073, + 0x0074, 0x0075, 0x0076, 0x0077, 0x0078, 0x0079, 0x007A, 0x0041, + 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, 0x0048, 0x0049, + 0x004A, 0x004B, 0x004C, 0x004D, 0x004E, 0x004F, 0x0050, 0x0051, + 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 0x0058, 0x0059, + 0x005A, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, + 0x0068, 0x0069, 0x006A, 0x006B, 0x006C, 0x006D, 0x006E, 0x006F, + 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, + 0x0078, 0x0079, 0x007A, 0x0041, 0x0042, 0x0044, 0x0045, 0x0046, + 0x0047, 0x004A, 0x004B, 0x004C, 0x004D, 0x004E, 0x004F, 0x0050, + 0x0051, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 0x0058, 0x0059, + 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, 0x0068, + 0x0069, 0x006A, 0x006B, 0x006C, 0x006D, 0x006E, 0x006F, 0x0070, + 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 0x0078, + 0x0079, 0x007A, 0x0041, 0x0042, 0x0044, 0x0045, 0x0046, 0x0047, + 0x0049, 0x004A, 0x004B, 0x004C, 0x004D, 0x004F, 0x0053, 0x0054, + 0x0055, 0x0056, 0x0057, 0x0058, 0x0059, 0x0061, 0x0062, 0x0063, + 0x0064, 0x0065, 0x0066, 0x0067, 0x0068, 0x0069, 0x006A, 0x006B, + 0x006C, 0x006D, 0x006E, 0x006F, 0x0070, 0x0071, 0x0072, 0x0073, + 0x0074, 0x0075, 0x0076, 0x0077, 0x0078, 0x0079, 0x007A, 0x0041, + 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, 0x0048, 0x0049, + 0x004A, 0x004B, 0x004C, 0x004D, 0x004E, 0x004F, 0x0050, 0x0051, + 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 0x0058, 0x0059, + 0x005A, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, + 0x0068, 0x0069, 0x006A, 0x006B, 0x006C, 0x006D, 0x006E, 0x006F, + 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, + 0x0078, 0x0079, 0x007A, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, + 0x0046, 0x0047, 0x0048, 0x0049, 0x004A, 0x004B, 0x004C, 0x004D, + 0x004E, 0x004F, 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, + 0x0056, 0x0057, 0x0058, 0x0059, 0x005A, 0x0061, 0x0062, 0x0063, + 0x0064, 0x0065, 0x0066, 0x0067, 0x0068, 0x0069, 0x006A, 0x006B, + 0x006C, 0x006D, 0x006E, 0x006F, 0x0070, 0x0071, 0x0072, 0x0073, + 0x0074, 0x0075, 0x0076, 0x0077, 0x0078, 0x0079, 0x007A, 0x0041, + 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, 0x0048, 0x0049, + 0x004A, 0x004B, 0x004C, 0x004D, 0x004E, 0x004F, 0x0050, 0x0051, + 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 0x0058, 0x0059, + 0x005A, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, + 0x0068, 0x0069, 0x006A, 0x006B, 0x006C, 0x006D, 0x006E, 0x006F, + 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, + 0x0078, 0x0079, 0x007A, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, + 0x0046, 0x0047, 0x0048, 0x0049, 0x004A, 0x004B, 0x004C, 0x004D, + 0x004E, 0x004F, 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, + 0x0056, 0x0057, 0x0058, 0x0059, 0x005A, 0x0061, 0x0062, 0x0063, + 0x0064, 0x0065, 0x0066, 0x0067, 0x0068, 0x0069, 0x006A, 0x006B, + 0x006C, 0x006D, 0x006E, 0x006F, 0x0070, 0x0071, 0x0072, 0x0073, + 0x0074, 0x0075, 0x0076, 0x0077, 0x0078, 0x0079, 0x007A, 0x0041, + 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, 0x0048, 0x0049, + 0x004A, 0x004B, 0x004C, 0x004D, 0x004E, 0x004F, 0x0050, 0x0051, + 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 0x0058, 0x0059, + 0x005A, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, + 0x0068, 0x0069, 0x006A, 0x006B, 0x006C, 0x006D, 0x006E, 0x006F, + 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, + 0x0078, 0x0079, 0x007A, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, + 0x0046, 0x0047, 0x0048, 0x0049, 0x004A, 0x004B, 0x004C, 0x004D, + 0x004E, 0x004F, 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, + 0x0056, 0x0057, 0x0058, 0x0059, 0x005A, 0x0061, 0x0062, 0x0063, + 0x0064, 0x0065, 0x0066, 0x0067, 0x0068, 0x0069, 0x006A, 0x006B, + 0x006C, 0x006D, 0x006E, 0x006F, 0x0070, 0x0071, 0x0072, 0x0073, + 0x0074, 0x0075, 0x0076, 0x0077, 0x0078, 0x0079, 0x007A, 0x0131, + 0x0237, 0x0391, 0x0392, 0x0393, 0x0394, 0x0395, 0x0396, 0x0397, + 0x0398, 0x0399, 0x039A, 0x039B, 0x039C, 0x039D, 0x039E, 0x039F, + 0x03A0, 0x03A1, 0x0398, 0x03A3, 0x03A4, 0x03A5, 0x03A6, 0x03A7, + 0x03A8, 0x03A9, 0x2207, 0x03B1, 0x03B2, 0x03B3, 0x03B4, 0x03B5, + 0x03B6, 0x03B7, 0x03B8, 0x03B9, 0x03BA, 0x03BB, 0x03BC, 0x03BD, + 0x03BE, 0x03BF, 0x03C0, 0x03C1, 0x03C2, 0x03C3, 0x03C4, 0x03C5, + 0x03C6, 0x03C7, 0x03C8, 0x03C9, 0x2202, 0x03B5, 0x03B8, 0x03BA, + 0x03C6, 0x03C1, 0x03C0, 0x0391, 0x0392, 0x0393, 0x0394, 0x0395, + 0x0396, 0x0397, 0x0398, 0x0399, 0x039A, 0x039B, 0x039C, 0x039D, + 0x039E, 0x039F, 0x03A0, 0x03A1, 0x0398, 0x03A3, 0x03A4, 0x03A5, + 0x03A6, 0x03A7, 0x03A8, 0x03A9, 0x2207, 0x03B1, 0x03B2, 0x03B3, + 0x03B4, 0x03B5, 0x03B6, 0x03B7, 0x03B8, 0x03B9, 0x03BA, 0x03BB, + 0x03BC, 0x03BD, 0x03BE, 0x03BF, 0x03C0, 0x03C1, 0x03C2, 0x03C3, + 0x03C4, 0x03C5, 0x03C6, 0x03C7, 0x03C8, 0x03C9, 0x2202, 0x03B5, + 0x03B8, 0x03BA, 0x03C6, 0x03C1, 0x03C0, 0x0391, 0x0392, 0x0393, + 0x0394, 0x0395, 0x0396, 0x0397, 0x0398, 0x0399, 0x039A, 0x039B, + 0x039C, 0x039D, 0x039E, 0x039F, 0x03A0, 0x03A1, 0x0398, 0x03A3, + 0x03A4, 0x03A5, 0x03A6, 0x03A7, 0x03A8, 0x03A9, 0x2207, 0x03B1, + 0x03B2, 0x03B3, 0x03B4, 0x03B5, 0x03B6, 0x03B7, 0x03B8, 0x03B9, + 0x03BA, 0x03BB, 0x03BC, 0x03BD, 0x03BE, 0x03BF, 0x03C0, 0x03C1, + 0x03C2, 0x03C3, 0x03C4, 0x03C5, 0x03C6, 0x03C7, 0x03C8, 0x03C9, + 0x2202, 0x03B5, 0x03B8, 0x03BA, 0x03C6, 0x03C1, 0x03C0, 0x0391, + 0x0392, 0x0393, 0x0394, 0x0395, 0x0396, 0x0397, 0x0398, 0x0399, + 0x039A, 0x039B, 0x039C, 0x039D, 0x039E, 0x039F, 0x03A0, 0x03A1, + 0x0398, 0x03A3, 0x03A4, 0x03A5, 0x03A6, 0x03A7, 0x03A8, 0x03A9, + 0x2207, 0x03B1, 0x03B2, 0x03B3, 0x03B4, 0x03B5, 0x03B6, 0x03B7, + 0x03B8, 0x03B9, 0x03BA, 0x03BB, 0x03BC, 0x03BD, 0x03BE, 0x03BF, + 0x03C0, 0x03C1, 0x03C2, 0x03C3, 0x03C4, 0x03C5, 0x03C6, 0x03C7, + 0x03C8, 0x03C9, 0x2202, 0x03B5, 0x03B8, 0x03BA, 0x03C6, 0x03C1, + 0x03C0, 0x0391, 0x0392, 0x0393, 0x0394, 0x0395, 0x0396, 0x0397, + 0x0398, 0x0399, 0x039A, 0x039B, 0x039C, 0x039D, 0x039E, 0x039F, + 0x03A0, 0x03A1, 0x0398, 0x03A3, 0x03A4, 0x03A5, 0x03A6, 0x03A7, + 0x03A8, 0x03A9, 0x2207, 0x03B1, 0x03B2, 0x03B3, 0x03B4, 0x03B5, + 0x03B6, 0x03B7, 0x03B8, 0x03B9, 0x03BA, 0x03BB, 0x03BC, 0x03BD, + 0x03BE, 0x03BF, 0x03C0, 0x03C1, 0x03C2, 0x03C3, 0x03C4, 0x03C5, + 0x03C6, 0x03C7, 0x03C8, 0x03C9, 0x2202, 0x03B5, 0x03B8, 0x03BA, + 0x03C6, 0x03C1, 0x03C0, 0x03DC, 0x03DD, 0x0030, 0x0031, 0x0032, + 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, 0x0038, 0x0039, 0x0030, + 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, 0x0038, + 0x0039, 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, + 0x0037, 0x0038, 0x0039, 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, + 0x0035, 0x0036, 0x0037, 0x0038, 0x0039, 0x0030, 0x0031, 0x0032, + 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, 0x0038, 0x0039, 0x0430, + 0x0431, 0x0432, 0x0433, 0x0434, 0x0435, 0x0436, 0x0437, 0x0438, + 0x043A, 0x043B, 0x043C, 0x043E, 0x043F, 0x0440, 0x0441, 0x0442, + 0x0443, 0x0444, 0x0445, 0x0446, 0x0447, 0x0448, 0x044B, 0x044D, + 0x044E, 0xA689, 0x04D9, 0x0456, 0x0458, 0x04E9, 0x04AF, 0x04CF, + 0x0430, 0x0431, 0x0432, 0x0433, 0x0434, 0x0435, 0x0436, 0x0437, + 0x0438, 0x043A, 0x043B, 0x043E, 0x043F, 0x0441, 0x0443, 0x0444, + 0x0445, 0x0446, 0x0447, 0x0448, 0x044A, 0x044B, 0x0491, 0x0456, + 0x0455, 0x045F, 0x04AB, 0xA651, 0x04B1, 0x0627, 0x0628, 0x062C, + 0x062F, 0x0648, 0x0632, 0x062D, 0x0637, 0x064A, 0x0643, 0x0644, + 0x0645, 0x0646, 0x0633, 0x0639, 0x0641, 0x0635, 0x0642, 0x0631, + 0x0634, 0x062A, 0x062B, 0x062E, 0x0630, 0x0636, 0x0638, 0x063A, + 0x066E, 0x06BA, 0x06A1, 0x066F, 0x0628, 0x062C, 0x0647, 0x062D, + 0x064A, 0x0643, 0x0644, 0x0645, 0x0646, 0x0633, 0x0639, 0x0641, + 0x0635, 0x0642, 0x0634, 0x062A, 0x062B, 0x062E, 0x0636, 0x063A, + 0x062C, 0x062D, 0x064A, 0x0644, 0x0646, 0x0633, 0x0639, 0x0635, + 0x0642, 0x0634, 0x062E, 0x0636, 0x063A, 0x06BA, 0x066F, 0x0628, + 0x062C, 0x0647, 0x062D, 0x0637, 0x064A, 0x0643, 0x0645, 0x0646, + 0x0633, 0x0639, 0x0641, 0x0635, 0x0642, 0x0634, 0x062A, 0x062B, + 0x062E, 0x0636, 0x0638, 0x063A, 0x066E, 0x06A1, 0x0627, 0x0628, + 0x062C, 0x062F, 0x0647, 0x0648, 0x0632, 0x062D, 0x0637, 0x064A, + 0x0644, 0x0645, 0x0646, 0x0633, 0x0639, 0x0641, 0x0635, 0x0642, + 0x0631, 0x0634, 0x062A, 0x062B, 0x062E, 0x0630, 0x0636, 0x0638, + 0x063A, 0x0628, 0x062C, 0x062F, 0x0648, 0x0632, 0x062D, 0x0637, + 0x064A, 0x0644, 0x0645, 0x0646, 0x0633, 0x0639, 0x0641, 0x0635, + 0x0642, 0x0631, 0x0634, 0x062A, 0x062B, 0x062E, 0x0630, 0x0636, + 0x0638, 0x063A, 0x0030, 0x002E, 0x0030, 0x002C, 0x0031, 0x002C, + 0x0032, 0x002C, 0x0033, 0x002C, 0x0034, 0x002C, 0x0035, 0x002C, + 0x0036, 0x002C, 0x0037, 0x002C, 0x0038, 0x002C, 0x0039, 0x002C, + 0x0028, 0x0041, 0x0029, 0x0028, 0x0042, 0x0029, 0x0028, 0x0043, + 0x0029, 0x0028, 0x0044, 0x0029, 0x0028, 0x0045, 0x0029, 0x0028, + 0x0046, 0x0029, 0x0028, 0x0047, 0x0029, 0x0028, 0x0048, 0x0029, + 0x0028, 0x0049, 0x0029, 0x0028, 0x004A, 0x0029, 0x0028, 0x004B, + 0x0029, 0x0028, 0x004C, 0x0029, 0x0028, 0x004D, 0x0029, 0x0028, + 0x004E, 0x0029, 0x0028, 0x004F, 0x0029, 0x0028, 0x0050, 0x0029, + 0x0028, 0x0051, 0x0029, 0x0028, 0x0052, 0x0029, 0x0028, 0x0053, + 0x0029, 0x0028, 0x0054, 0x0029, 0x0028, 0x0055, 0x0029, 0x0028, + 0x0056, 0x0029, 0x0028, 0x0057, 0x0029, 0x0028, 0x0058, 0x0029, + 0x0028, 0x0059, 0x0029, 0x0028, 0x005A, 0x0029, 0x3014, 0x0053, + 0x3015, 0x0043, 0x0052, 0x0043, 0x0044, 0x0057, 0x005A, 0x0041, + 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, 0x0048, 0x0049, + 0x004A, 0x004B, 0x004C, 0x004D, 0x004E, 0x004F, 0x0050, 0x0051, + 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 0x0058, 0x0059, + 0x005A, 0x0048, 0x0056, 0x004D, 0x0056, 0x0053, 0x0044, 0x0053, + 0x0053, 0x0050, 0x0050, 0x0056, 0x0057, 0x0043, 0x004D, 0x0043, + 0x004D, 0x0044, 0x004D, 0x0052, 0x0044, 0x004A, 0x307B, 0x304B, + 0x30B3, 0x30B3, 0x30B5, 0x624B, 0x5B57, 0x53CC, 0x30C6, 0x3099, + 0x4E8C, 0x591A, 0x89E3, 0x5929, 0x4EA4, 0x6620, 0x7121, 0x6599, + 0x524D, 0x5F8C, 0x518D, 0x65B0, 0x521D, 0x7D42, 0x751F, 0x8CA9, + 0x58F0, 0x5439, 0x6F14, 0x6295, 0x6355, 0x4E00, 0x4E09, 0x904A, + 0x5DE6, 0x4E2D, 0x53F3, 0x6307, 0x8D70, 0x6253, 0x7981, 0x7A7A, + 0x5408, 0x6E80, 0x6709, 0x6708, 0x7533, 0x5272, 0x55B6, 0x914D, + 0x3014, 0x672C, 0x3015, 0x3014, 0x4E09, 0x3015, 0x3014, 0x4E8C, + 0x3015, 0x3014, 0x5B89, 0x3015, 0x3014, 0x70B9, 0x3015, 0x3014, + 0x6253, 0x3015, 0x3014, 0x76D7, 0x3015, 0x3014, 0x52DD, 0x3015, + 0x3014, 0x6557, 0x3015, 0x5F97, 0x53EF, 0x0030, 0x0031, 0x0032, + 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, 0x0038, 0x0039, 0x4E3D, + 0x4E38, 0x4E41, 0x20122, 0x4F60, 0x4FAE, 0x4FBB, 0x5002, 0x507A, + 0x5099, 0x50E7, 0x50CF, 0x349E, 0x2063A, 0x514D, 0x5154, 0x5164, + 0x5177, 0x2051C, 0x34B9, 0x5167, 0x518D, 0x2054B, 0x5197, 0x51A4, + 0x4ECC, 0x51AC, 0x51B5, 0x291DF, 0x51F5, 0x5203, 0x34DF, 0x523B, + 0x5246, 0x5272, 0x5277, 0x3515, 0x52C7, 0x52C9, 0x52E4, 0x52FA, + 0x5305, 0x5306, 0x5317, 0x5349, 0x5351, 0x535A, 0x5373, 0x537D, + 0x537F, 0x537F, 0x537F, 0x20A2C, 0x7070, 0x53CA, 0x53DF, 0x20B63, + 0x53EB, 0x53F1, 0x5406, 0x549E, 0x5438, 0x5448, 0x5468, 0x54A2, + 0x54F6, 0x5510, 0x5553, 0x5563, 0x5584, 0x5584, 0x5599, 0x55AB, + 0x55B3, 0x55C2, 0x5716, 0x5606, 0x5717, 0x5651, 0x5674, 0x5207, + 0x58EE, 0x57CE, 0x57F4, 0x580D, 0x578B, 0x5832, 0x5831, 0x58AC, + 0x214E4, 0x58F2, 0x58F7, 0x5906, 0x591A, 0x5922, 0x5962, 0x216A8, + 0x216EA, 0x59EC, 0x5A1B, 0x5A27, 0x59D8, 0x5A66, 0x36EE, 0x36FC, + 0x5B08, 0x5B3E, 0x5B3E, 0x219C8, 0x5BC3, 0x5BD8, 0x5BE7, 0x5BF3, + 0x21B18, 0x5BFF, 0x5C06, 0x5F53, 0x5C22, 0x3781, 0x5C60, 0x5C6E, + 0x5CC0, 0x5C8D, 0x21DE4, 0x5D43, 0x21DE6, 0x5D6E, 0x5D6B, 0x5D7C, + 0x5DE1, 0x5DE2, 0x382F, 0x5DFD, 0x5E28, 0x5E3D, 0x5E69, 0x3862, + 0x22183, 0x387C, 0x5EB0, 0x5EB3, 0x5EB6, 0x5ECA, 0x2A392, 0x5EFE, + 0x22331, 0x22331, 0x8201, 0x5F22, 0x5F22, 0x38C7, 0x232B8, 0x261DA, + 0x5F62, 0x5F6B, 0x38E3, 0x5F9A, 0x5FCD, 0x5FD7, 0x5FF9, 0x6081, + 0x393A, 0x391C, 0x6094, 0x226D4, 0x60C7, 0x6148, 0x614C, 0x614E, + 0x614C, 0x617A, 0x618E, 0x61B2, 0x61A4, 0x61AF, 0x61DE, 0x61F2, + 0x61F6, 0x6210, 0x621B, 0x625D, 0x62B1, 0x62D4, 0x6350, 0x22B0C, + 0x633D, 0x62FC, 0x6368, 0x6383, 0x63E4, 0x22BF1, 0x6422, 0x63C5, + 0x63A9, 0x3A2E, 0x6469, 0x647E, 0x649D, 0x6477, 0x3A6C, 0x654F, + 0x656C, 0x2300A, 0x65E3, 0x66F8, 0x6649, 0x3B19, 0x6691, 0x3B08, + 0x3AE4, 0x5192, 0x5195, 0x6700, 0x669C, 0x80AD, 0x43D9, 0x6717, + 0x671B, 0x6721, 0x675E, 0x6753, 0x233C3, 0x3B49, 0x67FA, 0x6785, + 0x6852, 0x6885, 0x2346D, 0x688E, 0x681F, 0x6914, 0x3B9D, 0x6942, + 0x69A3, 0x69EA, 0x6AA8, 0x236A3, 0x6ADB, 0x3C18, 0x6B21, 0x238A7, + 0x6B54, 0x3C4E, 0x6B72, 0x6B9F, 0x6BBA, 0x6BBB, 0x23A8D, 0x21D0B, + 0x23AFA, 0x6C4E, 0x23CBC, 0x6CBF, 0x6CCD, 0x6C67, 0x6D16, 0x6D3E, + 0x6D77, 0x6D41, 0x6D69, 0x6D78, 0x6D85, 0x23D1E, 0x6D34, 0x6E2F, + 0x6E6E, 0x3D33, 0x6ECB, 0x6EC7, 0x23ED1, 0x6DF9, 0x6F6E, 0x23F5E, + 0x23F8E, 0x6FC6, 0x7039, 0x701E, 0x701B, 0x3D96, 0x704A, 0x707D, + 0x7077, 0x70AD, 0x20525, 0x7145, 0x24263, 0x719C, 0x243AB, 0x7228, + 0x7235, 0x7250, 0x24608, 0x7280, 0x7295, 0x24735, 0x24814, 0x737A, + 0x738B, 0x3EAC, 0x73A5, 0x3EB8, 0x3EB8, 0x7447, 0x745C, 0x7471, + 0x7485, 0x74CA, 0x3F1B, 0x7524, 0x24C36, 0x753E, 0x24C92, 0x7570, + 0x2219F, 0x7610, 0x24FA1, 0x24FB8, 0x25044, 0x3FFC, 0x4008, 0x76F4, + 0x250F3, 0x250F2, 0x25119, 0x25133, 0x771E, 0x771F, 0x771F, 0x774A, + 0x4039, 0x778B, 0x4046, 0x4096, 0x2541D, 0x784E, 0x788C, 0x78CC, + 0x40E3, 0x25626, 0x7956, 0x2569A, 0x256C5, 0x798F, 0x79EB, 0x412F, + 0x7A40, 0x7A4A, 0x7A4F, 0x2597C, 0x25AA7, 0x25AA7, 0x7AEE, 0x4202, + 0x25BAB, 0x7BC6, 0x7BC9, 0x4227, 0x25C80, 0x7CD2, 0x42A0, 0x7CE8, + 0x7CE3, 0x7D00, 0x25F86, 0x7D63, 0x4301, 0x7DC7, 0x7E02, 0x7E45, + 0x4334, 0x26228, 0x26247, 0x4359, 0x262D9, 0x7F7A, 0x2633E, 0x7F95, + 0x7FFA, 0x8005, 0x264DA, 0x26523, 0x8060, 0x265A8, 0x8070, 0x2335F, + 0x43D5, 0x80B2, 0x8103, 0x440B, 0x813E, 0x5AB5, 0x267A7, 0x267B5, + 0x23393, 0x2339C, 0x8201, 0x8204, 0x8F9E, 0x446B, 0x8291, 0x828B, + 0x829D, 0x52B3, 0x82B1, 0x82B3, 0x82BD, 0x82E6, 0x26B3C, 0x82E5, + 0x831D, 0x8363, 0x83AD, 0x8323, 0x83BD, 0x83E7, 0x8457, 0x8353, + 0x83CA, 0x83CC, 0x83DC, 0x26C36, 0x26D6B, 0x26CD5, 0x452B, 0x84F1, + 0x84F3, 0x8516, 0x273CA, 0x8564, 0x26F2C, 0x455D, 0x4561, 0x26FB1, + 0x270D2, 0x456B, 0x8650, 0x865C, 0x8667, 0x8669, 0x86A9, 0x8688, + 0x870E, 0x86E2, 0x8779, 0x8728, 0x876B, 0x8786, 0x45D7, 0x87E1, + 0x8801, 0x45F9, 0x8860, 0x8863, 0x27667, 0x88D7, 0x88DE, 0x4635, + 0x88FA, 0x34BB, 0x278AE, 0x27966, 0x46BE, 0x46C7, 0x8AA0, 0x8AED, + 0x8B8A, 0x8C55, 0x27CA8, 0x8CAB, 0x8CC1, 0x8D1B, 0x8D77, 0x27F2F, + 0x20804, 0x8DCB, 0x8DBC, 0x8DF0, 0x208DE, 0x8ED4, 0x8F38, 0x285D2, + 0x285ED, 0x9094, 0x90F1, 0x9111, 0x2872E, 0x911B, 0x9238, 0x92D7, + 0x92D8, 0x927C, 0x93F9, 0x9415, 0x28BFA, 0x958B, 0x4995, 0x95B7, + 0x28D77, 0x49E6, 0x96C3, 0x5DB2, 0x9723, 0x29145, 0x2921A, 0x4A6E, + 0x4A76, 0x97E0, 0x2940A, 0x4AB2, 0x29496, 0x980B, 0x980B, 0x9829, + 0x295B6, 0x98E2, 0x4B33, 0x9929, 0x99A7, 0x99C2, 0x99FE, 0x4BCE, + 0x29B30, 0x9B12, 0x9C40, 0x9CFD, 0x4CCE, 0x4CED, 0x9D67, 0x2A0CE, + 0x4CF8, 0x2A105, 0x2A20E, 0x2A291, 0x9EBB, 0x4D56, 0x9EF9, 0x9EFE, + 0x9F05, 0x9F0F, 0x9F16, 0x9F3B, 0x2A600, +}; + +pub const decompositions = [_]Decomp{ + .{ .cp = 0x00A0, .start = 0, .len = 1 }, + .{ .cp = 0x00A8, .start = 1, .len = 2 }, + .{ .cp = 0x00AA, .start = 3, .len = 1 }, + .{ .cp = 0x00AF, .start = 4, .len = 2 }, + .{ .cp = 0x00B2, .start = 6, .len = 1 }, + .{ .cp = 0x00B3, .start = 7, .len = 1 }, + .{ .cp = 0x00B4, .start = 8, .len = 2 }, + .{ .cp = 0x00B5, .start = 10, .len = 1 }, + .{ .cp = 0x00B8, .start = 11, .len = 2 }, + .{ .cp = 0x00B9, .start = 13, .len = 1 }, + .{ .cp = 0x00BA, .start = 14, .len = 1 }, + .{ .cp = 0x00BC, .start = 15, .len = 3 }, + .{ .cp = 0x00BD, .start = 18, .len = 3 }, + .{ .cp = 0x00BE, .start = 21, .len = 3 }, + .{ .cp = 0x00C0, .start = 24, .len = 2 }, + .{ .cp = 0x00C1, .start = 26, .len = 2 }, + .{ .cp = 0x00C2, .start = 28, .len = 2 }, + .{ .cp = 0x00C3, .start = 30, .len = 2 }, + .{ .cp = 0x00C4, .start = 32, .len = 2 }, + .{ .cp = 0x00C5, .start = 34, .len = 2 }, + .{ .cp = 0x00C7, .start = 36, .len = 2 }, + .{ .cp = 0x00C8, .start = 38, .len = 2 }, + .{ .cp = 0x00C9, .start = 40, .len = 2 }, + .{ .cp = 0x00CA, .start = 42, .len = 2 }, + .{ .cp = 0x00CB, .start = 44, .len = 2 }, + .{ .cp = 0x00CC, .start = 46, .len = 2 }, + .{ .cp = 0x00CD, .start = 48, .len = 2 }, + .{ .cp = 0x00CE, .start = 50, .len = 2 }, + .{ .cp = 0x00CF, .start = 52, .len = 2 }, + .{ .cp = 0x00D1, .start = 54, .len = 2 }, + .{ .cp = 0x00D2, .start = 56, .len = 2 }, + .{ .cp = 0x00D3, .start = 58, .len = 2 }, + .{ .cp = 0x00D4, .start = 60, .len = 2 }, + .{ .cp = 0x00D5, .start = 62, .len = 2 }, + .{ .cp = 0x00D6, .start = 64, .len = 2 }, + .{ .cp = 0x00D9, .start = 66, .len = 2 }, + .{ .cp = 0x00DA, .start = 68, .len = 2 }, + .{ .cp = 0x00DB, .start = 70, .len = 2 }, + .{ .cp = 0x00DC, .start = 72, .len = 2 }, + .{ .cp = 0x00DD, .start = 74, .len = 2 }, + .{ .cp = 0x00E0, .start = 76, .len = 2 }, + .{ .cp = 0x00E1, .start = 78, .len = 2 }, + .{ .cp = 0x00E2, .start = 80, .len = 2 }, + .{ .cp = 0x00E3, .start = 82, .len = 2 }, + .{ .cp = 0x00E4, .start = 84, .len = 2 }, + .{ .cp = 0x00E5, .start = 86, .len = 2 }, + .{ .cp = 0x00E7, .start = 88, .len = 2 }, + .{ .cp = 0x00E8, .start = 90, .len = 2 }, + .{ .cp = 0x00E9, .start = 92, .len = 2 }, + .{ .cp = 0x00EA, .start = 94, .len = 2 }, + .{ .cp = 0x00EB, .start = 96, .len = 2 }, + .{ .cp = 0x00EC, .start = 98, .len = 2 }, + .{ .cp = 0x00ED, .start = 100, .len = 2 }, + .{ .cp = 0x00EE, .start = 102, .len = 2 }, + .{ .cp = 0x00EF, .start = 104, .len = 2 }, + .{ .cp = 0x00F1, .start = 106, .len = 2 }, + .{ .cp = 0x00F2, .start = 108, .len = 2 }, + .{ .cp = 0x00F3, .start = 110, .len = 2 }, + .{ .cp = 0x00F4, .start = 112, .len = 2 }, + .{ .cp = 0x00F5, .start = 114, .len = 2 }, + .{ .cp = 0x00F6, .start = 116, .len = 2 }, + .{ .cp = 0x00F9, .start = 118, .len = 2 }, + .{ .cp = 0x00FA, .start = 120, .len = 2 }, + .{ .cp = 0x00FB, .start = 122, .len = 2 }, + .{ .cp = 0x00FC, .start = 124, .len = 2 }, + .{ .cp = 0x00FD, .start = 126, .len = 2 }, + .{ .cp = 0x00FF, .start = 128, .len = 2 }, + .{ .cp = 0x0100, .start = 130, .len = 2 }, + .{ .cp = 0x0101, .start = 132, .len = 2 }, + .{ .cp = 0x0102, .start = 134, .len = 2 }, + .{ .cp = 0x0103, .start = 136, .len = 2 }, + .{ .cp = 0x0104, .start = 138, .len = 2 }, + .{ .cp = 0x0105, .start = 140, .len = 2 }, + .{ .cp = 0x0106, .start = 142, .len = 2 }, + .{ .cp = 0x0107, .start = 144, .len = 2 }, + .{ .cp = 0x0108, .start = 146, .len = 2 }, + .{ .cp = 0x0109, .start = 148, .len = 2 }, + .{ .cp = 0x010A, .start = 150, .len = 2 }, + .{ .cp = 0x010B, .start = 152, .len = 2 }, + .{ .cp = 0x010C, .start = 154, .len = 2 }, + .{ .cp = 0x010D, .start = 156, .len = 2 }, + .{ .cp = 0x010E, .start = 158, .len = 2 }, + .{ .cp = 0x010F, .start = 160, .len = 2 }, + .{ .cp = 0x0112, .start = 162, .len = 2 }, + .{ .cp = 0x0113, .start = 164, .len = 2 }, + .{ .cp = 0x0114, .start = 166, .len = 2 }, + .{ .cp = 0x0115, .start = 168, .len = 2 }, + .{ .cp = 0x0116, .start = 170, .len = 2 }, + .{ .cp = 0x0117, .start = 172, .len = 2 }, + .{ .cp = 0x0118, .start = 174, .len = 2 }, + .{ .cp = 0x0119, .start = 176, .len = 2 }, + .{ .cp = 0x011A, .start = 178, .len = 2 }, + .{ .cp = 0x011B, .start = 180, .len = 2 }, + .{ .cp = 0x011C, .start = 182, .len = 2 }, + .{ .cp = 0x011D, .start = 184, .len = 2 }, + .{ .cp = 0x011E, .start = 186, .len = 2 }, + .{ .cp = 0x011F, .start = 188, .len = 2 }, + .{ .cp = 0x0120, .start = 190, .len = 2 }, + .{ .cp = 0x0121, .start = 192, .len = 2 }, + .{ .cp = 0x0122, .start = 194, .len = 2 }, + .{ .cp = 0x0123, .start = 196, .len = 2 }, + .{ .cp = 0x0124, .start = 198, .len = 2 }, + .{ .cp = 0x0125, .start = 200, .len = 2 }, + .{ .cp = 0x0128, .start = 202, .len = 2 }, + .{ .cp = 0x0129, .start = 204, .len = 2 }, + .{ .cp = 0x012A, .start = 206, .len = 2 }, + .{ .cp = 0x012B, .start = 208, .len = 2 }, + .{ .cp = 0x012C, .start = 210, .len = 2 }, + .{ .cp = 0x012D, .start = 212, .len = 2 }, + .{ .cp = 0x012E, .start = 214, .len = 2 }, + .{ .cp = 0x012F, .start = 216, .len = 2 }, + .{ .cp = 0x0130, .start = 218, .len = 2 }, + .{ .cp = 0x0132, .start = 220, .len = 2 }, + .{ .cp = 0x0133, .start = 222, .len = 2 }, + .{ .cp = 0x0134, .start = 224, .len = 2 }, + .{ .cp = 0x0135, .start = 226, .len = 2 }, + .{ .cp = 0x0136, .start = 228, .len = 2 }, + .{ .cp = 0x0137, .start = 230, .len = 2 }, + .{ .cp = 0x0139, .start = 232, .len = 2 }, + .{ .cp = 0x013A, .start = 234, .len = 2 }, + .{ .cp = 0x013B, .start = 236, .len = 2 }, + .{ .cp = 0x013C, .start = 238, .len = 2 }, + .{ .cp = 0x013D, .start = 240, .len = 2 }, + .{ .cp = 0x013E, .start = 242, .len = 2 }, + .{ .cp = 0x013F, .start = 244, .len = 2 }, + .{ .cp = 0x0140, .start = 246, .len = 2 }, + .{ .cp = 0x0143, .start = 248, .len = 2 }, + .{ .cp = 0x0144, .start = 250, .len = 2 }, + .{ .cp = 0x0145, .start = 252, .len = 2 }, + .{ .cp = 0x0146, .start = 254, .len = 2 }, + .{ .cp = 0x0147, .start = 256, .len = 2 }, + .{ .cp = 0x0148, .start = 258, .len = 2 }, + .{ .cp = 0x0149, .start = 260, .len = 2 }, + .{ .cp = 0x014C, .start = 262, .len = 2 }, + .{ .cp = 0x014D, .start = 264, .len = 2 }, + .{ .cp = 0x014E, .start = 266, .len = 2 }, + .{ .cp = 0x014F, .start = 268, .len = 2 }, + .{ .cp = 0x0150, .start = 270, .len = 2 }, + .{ .cp = 0x0151, .start = 272, .len = 2 }, + .{ .cp = 0x0154, .start = 274, .len = 2 }, + .{ .cp = 0x0155, .start = 276, .len = 2 }, + .{ .cp = 0x0156, .start = 278, .len = 2 }, + .{ .cp = 0x0157, .start = 280, .len = 2 }, + .{ .cp = 0x0158, .start = 282, .len = 2 }, + .{ .cp = 0x0159, .start = 284, .len = 2 }, + .{ .cp = 0x015A, .start = 286, .len = 2 }, + .{ .cp = 0x015B, .start = 288, .len = 2 }, + .{ .cp = 0x015C, .start = 290, .len = 2 }, + .{ .cp = 0x015D, .start = 292, .len = 2 }, + .{ .cp = 0x015E, .start = 294, .len = 2 }, + .{ .cp = 0x015F, .start = 296, .len = 2 }, + .{ .cp = 0x0160, .start = 298, .len = 2 }, + .{ .cp = 0x0161, .start = 300, .len = 2 }, + .{ .cp = 0x0162, .start = 302, .len = 2 }, + .{ .cp = 0x0163, .start = 304, .len = 2 }, + .{ .cp = 0x0164, .start = 306, .len = 2 }, + .{ .cp = 0x0165, .start = 308, .len = 2 }, + .{ .cp = 0x0168, .start = 310, .len = 2 }, + .{ .cp = 0x0169, .start = 312, .len = 2 }, + .{ .cp = 0x016A, .start = 314, .len = 2 }, + .{ .cp = 0x016B, .start = 316, .len = 2 }, + .{ .cp = 0x016C, .start = 318, .len = 2 }, + .{ .cp = 0x016D, .start = 320, .len = 2 }, + .{ .cp = 0x016E, .start = 322, .len = 2 }, + .{ .cp = 0x016F, .start = 324, .len = 2 }, + .{ .cp = 0x0170, .start = 326, .len = 2 }, + .{ .cp = 0x0171, .start = 328, .len = 2 }, + .{ .cp = 0x0172, .start = 330, .len = 2 }, + .{ .cp = 0x0173, .start = 332, .len = 2 }, + .{ .cp = 0x0174, .start = 334, .len = 2 }, + .{ .cp = 0x0175, .start = 336, .len = 2 }, + .{ .cp = 0x0176, .start = 338, .len = 2 }, + .{ .cp = 0x0177, .start = 340, .len = 2 }, + .{ .cp = 0x0178, .start = 342, .len = 2 }, + .{ .cp = 0x0179, .start = 344, .len = 2 }, + .{ .cp = 0x017A, .start = 346, .len = 2 }, + .{ .cp = 0x017B, .start = 348, .len = 2 }, + .{ .cp = 0x017C, .start = 350, .len = 2 }, + .{ .cp = 0x017D, .start = 352, .len = 2 }, + .{ .cp = 0x017E, .start = 354, .len = 2 }, + .{ .cp = 0x017F, .start = 356, .len = 1 }, + .{ .cp = 0x01A0, .start = 357, .len = 2 }, + .{ .cp = 0x01A1, .start = 359, .len = 2 }, + .{ .cp = 0x01AF, .start = 361, .len = 2 }, + .{ .cp = 0x01B0, .start = 363, .len = 2 }, + .{ .cp = 0x01C4, .start = 365, .len = 3 }, + .{ .cp = 0x01C5, .start = 368, .len = 3 }, + .{ .cp = 0x01C6, .start = 371, .len = 3 }, + .{ .cp = 0x01C7, .start = 374, .len = 2 }, + .{ .cp = 0x01C8, .start = 376, .len = 2 }, + .{ .cp = 0x01C9, .start = 378, .len = 2 }, + .{ .cp = 0x01CA, .start = 380, .len = 2 }, + .{ .cp = 0x01CB, .start = 382, .len = 2 }, + .{ .cp = 0x01CC, .start = 384, .len = 2 }, + .{ .cp = 0x01CD, .start = 386, .len = 2 }, + .{ .cp = 0x01CE, .start = 388, .len = 2 }, + .{ .cp = 0x01CF, .start = 390, .len = 2 }, + .{ .cp = 0x01D0, .start = 392, .len = 2 }, + .{ .cp = 0x01D1, .start = 394, .len = 2 }, + .{ .cp = 0x01D2, .start = 396, .len = 2 }, + .{ .cp = 0x01D3, .start = 398, .len = 2 }, + .{ .cp = 0x01D4, .start = 400, .len = 2 }, + .{ .cp = 0x01D5, .start = 402, .len = 3 }, + .{ .cp = 0x01D6, .start = 405, .len = 3 }, + .{ .cp = 0x01D7, .start = 408, .len = 3 }, + .{ .cp = 0x01D8, .start = 411, .len = 3 }, + .{ .cp = 0x01D9, .start = 414, .len = 3 }, + .{ .cp = 0x01DA, .start = 417, .len = 3 }, + .{ .cp = 0x01DB, .start = 420, .len = 3 }, + .{ .cp = 0x01DC, .start = 423, .len = 3 }, + .{ .cp = 0x01DE, .start = 426, .len = 3 }, + .{ .cp = 0x01DF, .start = 429, .len = 3 }, + .{ .cp = 0x01E0, .start = 432, .len = 3 }, + .{ .cp = 0x01E1, .start = 435, .len = 3 }, + .{ .cp = 0x01E2, .start = 438, .len = 2 }, + .{ .cp = 0x01E3, .start = 440, .len = 2 }, + .{ .cp = 0x01E6, .start = 442, .len = 2 }, + .{ .cp = 0x01E7, .start = 444, .len = 2 }, + .{ .cp = 0x01E8, .start = 446, .len = 2 }, + .{ .cp = 0x01E9, .start = 448, .len = 2 }, + .{ .cp = 0x01EA, .start = 450, .len = 2 }, + .{ .cp = 0x01EB, .start = 452, .len = 2 }, + .{ .cp = 0x01EC, .start = 454, .len = 3 }, + .{ .cp = 0x01ED, .start = 457, .len = 3 }, + .{ .cp = 0x01EE, .start = 460, .len = 2 }, + .{ .cp = 0x01EF, .start = 462, .len = 2 }, + .{ .cp = 0x01F0, .start = 464, .len = 2 }, + .{ .cp = 0x01F1, .start = 466, .len = 2 }, + .{ .cp = 0x01F2, .start = 468, .len = 2 }, + .{ .cp = 0x01F3, .start = 470, .len = 2 }, + .{ .cp = 0x01F4, .start = 472, .len = 2 }, + .{ .cp = 0x01F5, .start = 474, .len = 2 }, + .{ .cp = 0x01F8, .start = 476, .len = 2 }, + .{ .cp = 0x01F9, .start = 478, .len = 2 }, + .{ .cp = 0x01FA, .start = 480, .len = 3 }, + .{ .cp = 0x01FB, .start = 483, .len = 3 }, + .{ .cp = 0x01FC, .start = 486, .len = 2 }, + .{ .cp = 0x01FD, .start = 488, .len = 2 }, + .{ .cp = 0x01FE, .start = 490, .len = 2 }, + .{ .cp = 0x01FF, .start = 492, .len = 2 }, + .{ .cp = 0x0200, .start = 494, .len = 2 }, + .{ .cp = 0x0201, .start = 496, .len = 2 }, + .{ .cp = 0x0202, .start = 498, .len = 2 }, + .{ .cp = 0x0203, .start = 500, .len = 2 }, + .{ .cp = 0x0204, .start = 502, .len = 2 }, + .{ .cp = 0x0205, .start = 504, .len = 2 }, + .{ .cp = 0x0206, .start = 506, .len = 2 }, + .{ .cp = 0x0207, .start = 508, .len = 2 }, + .{ .cp = 0x0208, .start = 510, .len = 2 }, + .{ .cp = 0x0209, .start = 512, .len = 2 }, + .{ .cp = 0x020A, .start = 514, .len = 2 }, + .{ .cp = 0x020B, .start = 516, .len = 2 }, + .{ .cp = 0x020C, .start = 518, .len = 2 }, + .{ .cp = 0x020D, .start = 520, .len = 2 }, + .{ .cp = 0x020E, .start = 522, .len = 2 }, + .{ .cp = 0x020F, .start = 524, .len = 2 }, + .{ .cp = 0x0210, .start = 526, .len = 2 }, + .{ .cp = 0x0211, .start = 528, .len = 2 }, + .{ .cp = 0x0212, .start = 530, .len = 2 }, + .{ .cp = 0x0213, .start = 532, .len = 2 }, + .{ .cp = 0x0214, .start = 534, .len = 2 }, + .{ .cp = 0x0215, .start = 536, .len = 2 }, + .{ .cp = 0x0216, .start = 538, .len = 2 }, + .{ .cp = 0x0217, .start = 540, .len = 2 }, + .{ .cp = 0x0218, .start = 542, .len = 2 }, + .{ .cp = 0x0219, .start = 544, .len = 2 }, + .{ .cp = 0x021A, .start = 546, .len = 2 }, + .{ .cp = 0x021B, .start = 548, .len = 2 }, + .{ .cp = 0x021E, .start = 550, .len = 2 }, + .{ .cp = 0x021F, .start = 552, .len = 2 }, + .{ .cp = 0x0226, .start = 554, .len = 2 }, + .{ .cp = 0x0227, .start = 556, .len = 2 }, + .{ .cp = 0x0228, .start = 558, .len = 2 }, + .{ .cp = 0x0229, .start = 560, .len = 2 }, + .{ .cp = 0x022A, .start = 562, .len = 3 }, + .{ .cp = 0x022B, .start = 565, .len = 3 }, + .{ .cp = 0x022C, .start = 568, .len = 3 }, + .{ .cp = 0x022D, .start = 571, .len = 3 }, + .{ .cp = 0x022E, .start = 574, .len = 2 }, + .{ .cp = 0x022F, .start = 576, .len = 2 }, + .{ .cp = 0x0230, .start = 578, .len = 3 }, + .{ .cp = 0x0231, .start = 581, .len = 3 }, + .{ .cp = 0x0232, .start = 584, .len = 2 }, + .{ .cp = 0x0233, .start = 586, .len = 2 }, + .{ .cp = 0x02B0, .start = 588, .len = 1 }, + .{ .cp = 0x02B1, .start = 589, .len = 1 }, + .{ .cp = 0x02B2, .start = 590, .len = 1 }, + .{ .cp = 0x02B3, .start = 591, .len = 1 }, + .{ .cp = 0x02B4, .start = 592, .len = 1 }, + .{ .cp = 0x02B5, .start = 593, .len = 1 }, + .{ .cp = 0x02B6, .start = 594, .len = 1 }, + .{ .cp = 0x02B7, .start = 595, .len = 1 }, + .{ .cp = 0x02B8, .start = 596, .len = 1 }, + .{ .cp = 0x02D8, .start = 597, .len = 2 }, + .{ .cp = 0x02D9, .start = 599, .len = 2 }, + .{ .cp = 0x02DA, .start = 601, .len = 2 }, + .{ .cp = 0x02DB, .start = 603, .len = 2 }, + .{ .cp = 0x02DC, .start = 605, .len = 2 }, + .{ .cp = 0x02DD, .start = 607, .len = 2 }, + .{ .cp = 0x02E0, .start = 609, .len = 1 }, + .{ .cp = 0x02E1, .start = 610, .len = 1 }, + .{ .cp = 0x02E2, .start = 611, .len = 1 }, + .{ .cp = 0x02E3, .start = 612, .len = 1 }, + .{ .cp = 0x02E4, .start = 613, .len = 1 }, + .{ .cp = 0x0340, .start = 614, .len = 1 }, + .{ .cp = 0x0341, .start = 615, .len = 1 }, + .{ .cp = 0x0343, .start = 616, .len = 1 }, + .{ .cp = 0x0344, .start = 617, .len = 2 }, + .{ .cp = 0x0374, .start = 619, .len = 1 }, + .{ .cp = 0x037A, .start = 620, .len = 2 }, + .{ .cp = 0x037E, .start = 622, .len = 1 }, + .{ .cp = 0x0384, .start = 623, .len = 2 }, + .{ .cp = 0x0385, .start = 625, .len = 3 }, + .{ .cp = 0x0386, .start = 628, .len = 2 }, + .{ .cp = 0x0387, .start = 630, .len = 1 }, + .{ .cp = 0x0388, .start = 631, .len = 2 }, + .{ .cp = 0x0389, .start = 633, .len = 2 }, + .{ .cp = 0x038A, .start = 635, .len = 2 }, + .{ .cp = 0x038C, .start = 637, .len = 2 }, + .{ .cp = 0x038E, .start = 639, .len = 2 }, + .{ .cp = 0x038F, .start = 641, .len = 2 }, + .{ .cp = 0x0390, .start = 643, .len = 3 }, + .{ .cp = 0x03AA, .start = 646, .len = 2 }, + .{ .cp = 0x03AB, .start = 648, .len = 2 }, + .{ .cp = 0x03AC, .start = 650, .len = 2 }, + .{ .cp = 0x03AD, .start = 652, .len = 2 }, + .{ .cp = 0x03AE, .start = 654, .len = 2 }, + .{ .cp = 0x03AF, .start = 656, .len = 2 }, + .{ .cp = 0x03B0, .start = 658, .len = 3 }, + .{ .cp = 0x03CA, .start = 661, .len = 2 }, + .{ .cp = 0x03CB, .start = 663, .len = 2 }, + .{ .cp = 0x03CC, .start = 665, .len = 2 }, + .{ .cp = 0x03CD, .start = 667, .len = 2 }, + .{ .cp = 0x03CE, .start = 669, .len = 2 }, + .{ .cp = 0x03D0, .start = 671, .len = 1 }, + .{ .cp = 0x03D1, .start = 672, .len = 1 }, + .{ .cp = 0x03D2, .start = 673, .len = 1 }, + .{ .cp = 0x03D3, .start = 674, .len = 2 }, + .{ .cp = 0x03D4, .start = 676, .len = 2 }, + .{ .cp = 0x03D5, .start = 678, .len = 1 }, + .{ .cp = 0x03D6, .start = 679, .len = 1 }, + .{ .cp = 0x03F0, .start = 680, .len = 1 }, + .{ .cp = 0x03F1, .start = 681, .len = 1 }, + .{ .cp = 0x03F2, .start = 682, .len = 1 }, + .{ .cp = 0x03F4, .start = 683, .len = 1 }, + .{ .cp = 0x03F5, .start = 684, .len = 1 }, + .{ .cp = 0x03F9, .start = 685, .len = 1 }, + .{ .cp = 0x0400, .start = 686, .len = 2 }, + .{ .cp = 0x0401, .start = 688, .len = 2 }, + .{ .cp = 0x0403, .start = 690, .len = 2 }, + .{ .cp = 0x0407, .start = 692, .len = 2 }, + .{ .cp = 0x040C, .start = 694, .len = 2 }, + .{ .cp = 0x040D, .start = 696, .len = 2 }, + .{ .cp = 0x040E, .start = 698, .len = 2 }, + .{ .cp = 0x0419, .start = 700, .len = 2 }, + .{ .cp = 0x0439, .start = 702, .len = 2 }, + .{ .cp = 0x0450, .start = 704, .len = 2 }, + .{ .cp = 0x0451, .start = 706, .len = 2 }, + .{ .cp = 0x0453, .start = 708, .len = 2 }, + .{ .cp = 0x0457, .start = 710, .len = 2 }, + .{ .cp = 0x045C, .start = 712, .len = 2 }, + .{ .cp = 0x045D, .start = 714, .len = 2 }, + .{ .cp = 0x045E, .start = 716, .len = 2 }, + .{ .cp = 0x0476, .start = 718, .len = 2 }, + .{ .cp = 0x0477, .start = 720, .len = 2 }, + .{ .cp = 0x04C1, .start = 722, .len = 2 }, + .{ .cp = 0x04C2, .start = 724, .len = 2 }, + .{ .cp = 0x04D0, .start = 726, .len = 2 }, + .{ .cp = 0x04D1, .start = 728, .len = 2 }, + .{ .cp = 0x04D2, .start = 730, .len = 2 }, + .{ .cp = 0x04D3, .start = 732, .len = 2 }, + .{ .cp = 0x04D6, .start = 734, .len = 2 }, + .{ .cp = 0x04D7, .start = 736, .len = 2 }, + .{ .cp = 0x04DA, .start = 738, .len = 2 }, + .{ .cp = 0x04DB, .start = 740, .len = 2 }, + .{ .cp = 0x04DC, .start = 742, .len = 2 }, + .{ .cp = 0x04DD, .start = 744, .len = 2 }, + .{ .cp = 0x04DE, .start = 746, .len = 2 }, + .{ .cp = 0x04DF, .start = 748, .len = 2 }, + .{ .cp = 0x04E2, .start = 750, .len = 2 }, + .{ .cp = 0x04E3, .start = 752, .len = 2 }, + .{ .cp = 0x04E4, .start = 754, .len = 2 }, + .{ .cp = 0x04E5, .start = 756, .len = 2 }, + .{ .cp = 0x04E6, .start = 758, .len = 2 }, + .{ .cp = 0x04E7, .start = 760, .len = 2 }, + .{ .cp = 0x04EA, .start = 762, .len = 2 }, + .{ .cp = 0x04EB, .start = 764, .len = 2 }, + .{ .cp = 0x04EC, .start = 766, .len = 2 }, + .{ .cp = 0x04ED, .start = 768, .len = 2 }, + .{ .cp = 0x04EE, .start = 770, .len = 2 }, + .{ .cp = 0x04EF, .start = 772, .len = 2 }, + .{ .cp = 0x04F0, .start = 774, .len = 2 }, + .{ .cp = 0x04F1, .start = 776, .len = 2 }, + .{ .cp = 0x04F2, .start = 778, .len = 2 }, + .{ .cp = 0x04F3, .start = 780, .len = 2 }, + .{ .cp = 0x04F4, .start = 782, .len = 2 }, + .{ .cp = 0x04F5, .start = 784, .len = 2 }, + .{ .cp = 0x04F8, .start = 786, .len = 2 }, + .{ .cp = 0x04F9, .start = 788, .len = 2 }, + .{ .cp = 0x0587, .start = 790, .len = 2 }, + .{ .cp = 0x0622, .start = 792, .len = 2 }, + .{ .cp = 0x0623, .start = 794, .len = 2 }, + .{ .cp = 0x0624, .start = 796, .len = 2 }, + .{ .cp = 0x0625, .start = 798, .len = 2 }, + .{ .cp = 0x0626, .start = 800, .len = 2 }, + .{ .cp = 0x0675, .start = 802, .len = 2 }, + .{ .cp = 0x0676, .start = 804, .len = 2 }, + .{ .cp = 0x0677, .start = 806, .len = 2 }, + .{ .cp = 0x0678, .start = 808, .len = 2 }, + .{ .cp = 0x06C0, .start = 810, .len = 2 }, + .{ .cp = 0x06C2, .start = 812, .len = 2 }, + .{ .cp = 0x06D3, .start = 814, .len = 2 }, + .{ .cp = 0x0929, .start = 816, .len = 2 }, + .{ .cp = 0x0931, .start = 818, .len = 2 }, + .{ .cp = 0x0934, .start = 820, .len = 2 }, + .{ .cp = 0x0958, .start = 822, .len = 2 }, + .{ .cp = 0x0959, .start = 824, .len = 2 }, + .{ .cp = 0x095A, .start = 826, .len = 2 }, + .{ .cp = 0x095B, .start = 828, .len = 2 }, + .{ .cp = 0x095C, .start = 830, .len = 2 }, + .{ .cp = 0x095D, .start = 832, .len = 2 }, + .{ .cp = 0x095E, .start = 834, .len = 2 }, + .{ .cp = 0x095F, .start = 836, .len = 2 }, + .{ .cp = 0x09CB, .start = 838, .len = 2 }, + .{ .cp = 0x09CC, .start = 840, .len = 2 }, + .{ .cp = 0x09DC, .start = 842, .len = 2 }, + .{ .cp = 0x09DD, .start = 844, .len = 2 }, + .{ .cp = 0x09DF, .start = 846, .len = 2 }, + .{ .cp = 0x0A33, .start = 848, .len = 2 }, + .{ .cp = 0x0A36, .start = 850, .len = 2 }, + .{ .cp = 0x0A59, .start = 852, .len = 2 }, + .{ .cp = 0x0A5A, .start = 854, .len = 2 }, + .{ .cp = 0x0A5B, .start = 856, .len = 2 }, + .{ .cp = 0x0A5E, .start = 858, .len = 2 }, + .{ .cp = 0x0B48, .start = 860, .len = 2 }, + .{ .cp = 0x0B4B, .start = 862, .len = 2 }, + .{ .cp = 0x0B4C, .start = 864, .len = 2 }, + .{ .cp = 0x0B5C, .start = 866, .len = 2 }, + .{ .cp = 0x0B5D, .start = 868, .len = 2 }, + .{ .cp = 0x0B94, .start = 870, .len = 2 }, + .{ .cp = 0x0BCA, .start = 872, .len = 2 }, + .{ .cp = 0x0BCB, .start = 874, .len = 2 }, + .{ .cp = 0x0BCC, .start = 876, .len = 2 }, + .{ .cp = 0x0C48, .start = 878, .len = 2 }, + .{ .cp = 0x0CC0, .start = 880, .len = 2 }, + .{ .cp = 0x0CC7, .start = 882, .len = 2 }, + .{ .cp = 0x0CC8, .start = 884, .len = 2 }, + .{ .cp = 0x0CCA, .start = 886, .len = 2 }, + .{ .cp = 0x0CCB, .start = 888, .len = 3 }, + .{ .cp = 0x0D4A, .start = 891, .len = 2 }, + .{ .cp = 0x0D4B, .start = 893, .len = 2 }, + .{ .cp = 0x0D4C, .start = 895, .len = 2 }, + .{ .cp = 0x0DDA, .start = 897, .len = 2 }, + .{ .cp = 0x0DDC, .start = 899, .len = 2 }, + .{ .cp = 0x0DDD, .start = 901, .len = 3 }, + .{ .cp = 0x0DDE, .start = 904, .len = 2 }, + .{ .cp = 0x0E33, .start = 906, .len = 2 }, + .{ .cp = 0x0EB3, .start = 908, .len = 2 }, + .{ .cp = 0x0EDC, .start = 910, .len = 2 }, + .{ .cp = 0x0EDD, .start = 912, .len = 2 }, + .{ .cp = 0x0F0C, .start = 914, .len = 1 }, + .{ .cp = 0x0F43, .start = 915, .len = 2 }, + .{ .cp = 0x0F4D, .start = 917, .len = 2 }, + .{ .cp = 0x0F52, .start = 919, .len = 2 }, + .{ .cp = 0x0F57, .start = 921, .len = 2 }, + .{ .cp = 0x0F5C, .start = 923, .len = 2 }, + .{ .cp = 0x0F69, .start = 925, .len = 2 }, + .{ .cp = 0x0F73, .start = 927, .len = 2 }, + .{ .cp = 0x0F75, .start = 929, .len = 2 }, + .{ .cp = 0x0F76, .start = 931, .len = 2 }, + .{ .cp = 0x0F77, .start = 933, .len = 3 }, + .{ .cp = 0x0F78, .start = 936, .len = 2 }, + .{ .cp = 0x0F79, .start = 938, .len = 3 }, + .{ .cp = 0x0F81, .start = 941, .len = 2 }, + .{ .cp = 0x0F93, .start = 943, .len = 2 }, + .{ .cp = 0x0F9D, .start = 945, .len = 2 }, + .{ .cp = 0x0FA2, .start = 947, .len = 2 }, + .{ .cp = 0x0FA7, .start = 949, .len = 2 }, + .{ .cp = 0x0FAC, .start = 951, .len = 2 }, + .{ .cp = 0x0FB9, .start = 953, .len = 2 }, + .{ .cp = 0x1026, .start = 955, .len = 2 }, + .{ .cp = 0x10FC, .start = 957, .len = 1 }, + .{ .cp = 0x1B06, .start = 958, .len = 2 }, + .{ .cp = 0x1B08, .start = 960, .len = 2 }, + .{ .cp = 0x1B0A, .start = 962, .len = 2 }, + .{ .cp = 0x1B0C, .start = 964, .len = 2 }, + .{ .cp = 0x1B0E, .start = 966, .len = 2 }, + .{ .cp = 0x1B12, .start = 968, .len = 2 }, + .{ .cp = 0x1B3B, .start = 970, .len = 2 }, + .{ .cp = 0x1B3D, .start = 972, .len = 2 }, + .{ .cp = 0x1B40, .start = 974, .len = 2 }, + .{ .cp = 0x1B41, .start = 976, .len = 2 }, + .{ .cp = 0x1B43, .start = 978, .len = 2 }, + .{ .cp = 0x1D2C, .start = 980, .len = 1 }, + .{ .cp = 0x1D2D, .start = 981, .len = 1 }, + .{ .cp = 0x1D2E, .start = 982, .len = 1 }, + .{ .cp = 0x1D30, .start = 983, .len = 1 }, + .{ .cp = 0x1D31, .start = 984, .len = 1 }, + .{ .cp = 0x1D32, .start = 985, .len = 1 }, + .{ .cp = 0x1D33, .start = 986, .len = 1 }, + .{ .cp = 0x1D34, .start = 987, .len = 1 }, + .{ .cp = 0x1D35, .start = 988, .len = 1 }, + .{ .cp = 0x1D36, .start = 989, .len = 1 }, + .{ .cp = 0x1D37, .start = 990, .len = 1 }, + .{ .cp = 0x1D38, .start = 991, .len = 1 }, + .{ .cp = 0x1D39, .start = 992, .len = 1 }, + .{ .cp = 0x1D3A, .start = 993, .len = 1 }, + .{ .cp = 0x1D3C, .start = 994, .len = 1 }, + .{ .cp = 0x1D3D, .start = 995, .len = 1 }, + .{ .cp = 0x1D3E, .start = 996, .len = 1 }, + .{ .cp = 0x1D3F, .start = 997, .len = 1 }, + .{ .cp = 0x1D40, .start = 998, .len = 1 }, + .{ .cp = 0x1D41, .start = 999, .len = 1 }, + .{ .cp = 0x1D42, .start = 1000, .len = 1 }, + .{ .cp = 0x1D43, .start = 1001, .len = 1 }, + .{ .cp = 0x1D44, .start = 1002, .len = 1 }, + .{ .cp = 0x1D45, .start = 1003, .len = 1 }, + .{ .cp = 0x1D46, .start = 1004, .len = 1 }, + .{ .cp = 0x1D47, .start = 1005, .len = 1 }, + .{ .cp = 0x1D48, .start = 1006, .len = 1 }, + .{ .cp = 0x1D49, .start = 1007, .len = 1 }, + .{ .cp = 0x1D4A, .start = 1008, .len = 1 }, + .{ .cp = 0x1D4B, .start = 1009, .len = 1 }, + .{ .cp = 0x1D4C, .start = 1010, .len = 1 }, + .{ .cp = 0x1D4D, .start = 1011, .len = 1 }, + .{ .cp = 0x1D4F, .start = 1012, .len = 1 }, + .{ .cp = 0x1D50, .start = 1013, .len = 1 }, + .{ .cp = 0x1D51, .start = 1014, .len = 1 }, + .{ .cp = 0x1D52, .start = 1015, .len = 1 }, + .{ .cp = 0x1D53, .start = 1016, .len = 1 }, + .{ .cp = 0x1D54, .start = 1017, .len = 1 }, + .{ .cp = 0x1D55, .start = 1018, .len = 1 }, + .{ .cp = 0x1D56, .start = 1019, .len = 1 }, + .{ .cp = 0x1D57, .start = 1020, .len = 1 }, + .{ .cp = 0x1D58, .start = 1021, .len = 1 }, + .{ .cp = 0x1D59, .start = 1022, .len = 1 }, + .{ .cp = 0x1D5A, .start = 1023, .len = 1 }, + .{ .cp = 0x1D5B, .start = 1024, .len = 1 }, + .{ .cp = 0x1D5C, .start = 1025, .len = 1 }, + .{ .cp = 0x1D5D, .start = 1026, .len = 1 }, + .{ .cp = 0x1D5E, .start = 1027, .len = 1 }, + .{ .cp = 0x1D5F, .start = 1028, .len = 1 }, + .{ .cp = 0x1D60, .start = 1029, .len = 1 }, + .{ .cp = 0x1D61, .start = 1030, .len = 1 }, + .{ .cp = 0x1D62, .start = 1031, .len = 1 }, + .{ .cp = 0x1D63, .start = 1032, .len = 1 }, + .{ .cp = 0x1D64, .start = 1033, .len = 1 }, + .{ .cp = 0x1D65, .start = 1034, .len = 1 }, + .{ .cp = 0x1D66, .start = 1035, .len = 1 }, + .{ .cp = 0x1D67, .start = 1036, .len = 1 }, + .{ .cp = 0x1D68, .start = 1037, .len = 1 }, + .{ .cp = 0x1D69, .start = 1038, .len = 1 }, + .{ .cp = 0x1D6A, .start = 1039, .len = 1 }, + .{ .cp = 0x1D78, .start = 1040, .len = 1 }, + .{ .cp = 0x1D9B, .start = 1041, .len = 1 }, + .{ .cp = 0x1D9C, .start = 1042, .len = 1 }, + .{ .cp = 0x1D9D, .start = 1043, .len = 1 }, + .{ .cp = 0x1D9E, .start = 1044, .len = 1 }, + .{ .cp = 0x1D9F, .start = 1045, .len = 1 }, + .{ .cp = 0x1DA0, .start = 1046, .len = 1 }, + .{ .cp = 0x1DA1, .start = 1047, .len = 1 }, + .{ .cp = 0x1DA2, .start = 1048, .len = 1 }, + .{ .cp = 0x1DA3, .start = 1049, .len = 1 }, + .{ .cp = 0x1DA4, .start = 1050, .len = 1 }, + .{ .cp = 0x1DA5, .start = 1051, .len = 1 }, + .{ .cp = 0x1DA6, .start = 1052, .len = 1 }, + .{ .cp = 0x1DA7, .start = 1053, .len = 1 }, + .{ .cp = 0x1DA8, .start = 1054, .len = 1 }, + .{ .cp = 0x1DA9, .start = 1055, .len = 1 }, + .{ .cp = 0x1DAA, .start = 1056, .len = 1 }, + .{ .cp = 0x1DAB, .start = 1057, .len = 1 }, + .{ .cp = 0x1DAC, .start = 1058, .len = 1 }, + .{ .cp = 0x1DAD, .start = 1059, .len = 1 }, + .{ .cp = 0x1DAE, .start = 1060, .len = 1 }, + .{ .cp = 0x1DAF, .start = 1061, .len = 1 }, + .{ .cp = 0x1DB0, .start = 1062, .len = 1 }, + .{ .cp = 0x1DB1, .start = 1063, .len = 1 }, + .{ .cp = 0x1DB2, .start = 1064, .len = 1 }, + .{ .cp = 0x1DB3, .start = 1065, .len = 1 }, + .{ .cp = 0x1DB4, .start = 1066, .len = 1 }, + .{ .cp = 0x1DB5, .start = 1067, .len = 1 }, + .{ .cp = 0x1DB6, .start = 1068, .len = 1 }, + .{ .cp = 0x1DB7, .start = 1069, .len = 1 }, + .{ .cp = 0x1DB8, .start = 1070, .len = 1 }, + .{ .cp = 0x1DB9, .start = 1071, .len = 1 }, + .{ .cp = 0x1DBA, .start = 1072, .len = 1 }, + .{ .cp = 0x1DBB, .start = 1073, .len = 1 }, + .{ .cp = 0x1DBC, .start = 1074, .len = 1 }, + .{ .cp = 0x1DBD, .start = 1075, .len = 1 }, + .{ .cp = 0x1DBE, .start = 1076, .len = 1 }, + .{ .cp = 0x1DBF, .start = 1077, .len = 1 }, + .{ .cp = 0x1E00, .start = 1078, .len = 2 }, + .{ .cp = 0x1E01, .start = 1080, .len = 2 }, + .{ .cp = 0x1E02, .start = 1082, .len = 2 }, + .{ .cp = 0x1E03, .start = 1084, .len = 2 }, + .{ .cp = 0x1E04, .start = 1086, .len = 2 }, + .{ .cp = 0x1E05, .start = 1088, .len = 2 }, + .{ .cp = 0x1E06, .start = 1090, .len = 2 }, + .{ .cp = 0x1E07, .start = 1092, .len = 2 }, + .{ .cp = 0x1E08, .start = 1094, .len = 3 }, + .{ .cp = 0x1E09, .start = 1097, .len = 3 }, + .{ .cp = 0x1E0A, .start = 1100, .len = 2 }, + .{ .cp = 0x1E0B, .start = 1102, .len = 2 }, + .{ .cp = 0x1E0C, .start = 1104, .len = 2 }, + .{ .cp = 0x1E0D, .start = 1106, .len = 2 }, + .{ .cp = 0x1E0E, .start = 1108, .len = 2 }, + .{ .cp = 0x1E0F, .start = 1110, .len = 2 }, + .{ .cp = 0x1E10, .start = 1112, .len = 2 }, + .{ .cp = 0x1E11, .start = 1114, .len = 2 }, + .{ .cp = 0x1E12, .start = 1116, .len = 2 }, + .{ .cp = 0x1E13, .start = 1118, .len = 2 }, + .{ .cp = 0x1E14, .start = 1120, .len = 3 }, + .{ .cp = 0x1E15, .start = 1123, .len = 3 }, + .{ .cp = 0x1E16, .start = 1126, .len = 3 }, + .{ .cp = 0x1E17, .start = 1129, .len = 3 }, + .{ .cp = 0x1E18, .start = 1132, .len = 2 }, + .{ .cp = 0x1E19, .start = 1134, .len = 2 }, + .{ .cp = 0x1E1A, .start = 1136, .len = 2 }, + .{ .cp = 0x1E1B, .start = 1138, .len = 2 }, + .{ .cp = 0x1E1C, .start = 1140, .len = 3 }, + .{ .cp = 0x1E1D, .start = 1143, .len = 3 }, + .{ .cp = 0x1E1E, .start = 1146, .len = 2 }, + .{ .cp = 0x1E1F, .start = 1148, .len = 2 }, + .{ .cp = 0x1E20, .start = 1150, .len = 2 }, + .{ .cp = 0x1E21, .start = 1152, .len = 2 }, + .{ .cp = 0x1E22, .start = 1154, .len = 2 }, + .{ .cp = 0x1E23, .start = 1156, .len = 2 }, + .{ .cp = 0x1E24, .start = 1158, .len = 2 }, + .{ .cp = 0x1E25, .start = 1160, .len = 2 }, + .{ .cp = 0x1E26, .start = 1162, .len = 2 }, + .{ .cp = 0x1E27, .start = 1164, .len = 2 }, + .{ .cp = 0x1E28, .start = 1166, .len = 2 }, + .{ .cp = 0x1E29, .start = 1168, .len = 2 }, + .{ .cp = 0x1E2A, .start = 1170, .len = 2 }, + .{ .cp = 0x1E2B, .start = 1172, .len = 2 }, + .{ .cp = 0x1E2C, .start = 1174, .len = 2 }, + .{ .cp = 0x1E2D, .start = 1176, .len = 2 }, + .{ .cp = 0x1E2E, .start = 1178, .len = 3 }, + .{ .cp = 0x1E2F, .start = 1181, .len = 3 }, + .{ .cp = 0x1E30, .start = 1184, .len = 2 }, + .{ .cp = 0x1E31, .start = 1186, .len = 2 }, + .{ .cp = 0x1E32, .start = 1188, .len = 2 }, + .{ .cp = 0x1E33, .start = 1190, .len = 2 }, + .{ .cp = 0x1E34, .start = 1192, .len = 2 }, + .{ .cp = 0x1E35, .start = 1194, .len = 2 }, + .{ .cp = 0x1E36, .start = 1196, .len = 2 }, + .{ .cp = 0x1E37, .start = 1198, .len = 2 }, + .{ .cp = 0x1E38, .start = 1200, .len = 3 }, + .{ .cp = 0x1E39, .start = 1203, .len = 3 }, + .{ .cp = 0x1E3A, .start = 1206, .len = 2 }, + .{ .cp = 0x1E3B, .start = 1208, .len = 2 }, + .{ .cp = 0x1E3C, .start = 1210, .len = 2 }, + .{ .cp = 0x1E3D, .start = 1212, .len = 2 }, + .{ .cp = 0x1E3E, .start = 1214, .len = 2 }, + .{ .cp = 0x1E3F, .start = 1216, .len = 2 }, + .{ .cp = 0x1E40, .start = 1218, .len = 2 }, + .{ .cp = 0x1E41, .start = 1220, .len = 2 }, + .{ .cp = 0x1E42, .start = 1222, .len = 2 }, + .{ .cp = 0x1E43, .start = 1224, .len = 2 }, + .{ .cp = 0x1E44, .start = 1226, .len = 2 }, + .{ .cp = 0x1E45, .start = 1228, .len = 2 }, + .{ .cp = 0x1E46, .start = 1230, .len = 2 }, + .{ .cp = 0x1E47, .start = 1232, .len = 2 }, + .{ .cp = 0x1E48, .start = 1234, .len = 2 }, + .{ .cp = 0x1E49, .start = 1236, .len = 2 }, + .{ .cp = 0x1E4A, .start = 1238, .len = 2 }, + .{ .cp = 0x1E4B, .start = 1240, .len = 2 }, + .{ .cp = 0x1E4C, .start = 1242, .len = 3 }, + .{ .cp = 0x1E4D, .start = 1245, .len = 3 }, + .{ .cp = 0x1E4E, .start = 1248, .len = 3 }, + .{ .cp = 0x1E4F, .start = 1251, .len = 3 }, + .{ .cp = 0x1E50, .start = 1254, .len = 3 }, + .{ .cp = 0x1E51, .start = 1257, .len = 3 }, + .{ .cp = 0x1E52, .start = 1260, .len = 3 }, + .{ .cp = 0x1E53, .start = 1263, .len = 3 }, + .{ .cp = 0x1E54, .start = 1266, .len = 2 }, + .{ .cp = 0x1E55, .start = 1268, .len = 2 }, + .{ .cp = 0x1E56, .start = 1270, .len = 2 }, + .{ .cp = 0x1E57, .start = 1272, .len = 2 }, + .{ .cp = 0x1E58, .start = 1274, .len = 2 }, + .{ .cp = 0x1E59, .start = 1276, .len = 2 }, + .{ .cp = 0x1E5A, .start = 1278, .len = 2 }, + .{ .cp = 0x1E5B, .start = 1280, .len = 2 }, + .{ .cp = 0x1E5C, .start = 1282, .len = 3 }, + .{ .cp = 0x1E5D, .start = 1285, .len = 3 }, + .{ .cp = 0x1E5E, .start = 1288, .len = 2 }, + .{ .cp = 0x1E5F, .start = 1290, .len = 2 }, + .{ .cp = 0x1E60, .start = 1292, .len = 2 }, + .{ .cp = 0x1E61, .start = 1294, .len = 2 }, + .{ .cp = 0x1E62, .start = 1296, .len = 2 }, + .{ .cp = 0x1E63, .start = 1298, .len = 2 }, + .{ .cp = 0x1E64, .start = 1300, .len = 3 }, + .{ .cp = 0x1E65, .start = 1303, .len = 3 }, + .{ .cp = 0x1E66, .start = 1306, .len = 3 }, + .{ .cp = 0x1E67, .start = 1309, .len = 3 }, + .{ .cp = 0x1E68, .start = 1312, .len = 3 }, + .{ .cp = 0x1E69, .start = 1315, .len = 3 }, + .{ .cp = 0x1E6A, .start = 1318, .len = 2 }, + .{ .cp = 0x1E6B, .start = 1320, .len = 2 }, + .{ .cp = 0x1E6C, .start = 1322, .len = 2 }, + .{ .cp = 0x1E6D, .start = 1324, .len = 2 }, + .{ .cp = 0x1E6E, .start = 1326, .len = 2 }, + .{ .cp = 0x1E6F, .start = 1328, .len = 2 }, + .{ .cp = 0x1E70, .start = 1330, .len = 2 }, + .{ .cp = 0x1E71, .start = 1332, .len = 2 }, + .{ .cp = 0x1E72, .start = 1334, .len = 2 }, + .{ .cp = 0x1E73, .start = 1336, .len = 2 }, + .{ .cp = 0x1E74, .start = 1338, .len = 2 }, + .{ .cp = 0x1E75, .start = 1340, .len = 2 }, + .{ .cp = 0x1E76, .start = 1342, .len = 2 }, + .{ .cp = 0x1E77, .start = 1344, .len = 2 }, + .{ .cp = 0x1E78, .start = 1346, .len = 3 }, + .{ .cp = 0x1E79, .start = 1349, .len = 3 }, + .{ .cp = 0x1E7A, .start = 1352, .len = 3 }, + .{ .cp = 0x1E7B, .start = 1355, .len = 3 }, + .{ .cp = 0x1E7C, .start = 1358, .len = 2 }, + .{ .cp = 0x1E7D, .start = 1360, .len = 2 }, + .{ .cp = 0x1E7E, .start = 1362, .len = 2 }, + .{ .cp = 0x1E7F, .start = 1364, .len = 2 }, + .{ .cp = 0x1E80, .start = 1366, .len = 2 }, + .{ .cp = 0x1E81, .start = 1368, .len = 2 }, + .{ .cp = 0x1E82, .start = 1370, .len = 2 }, + .{ .cp = 0x1E83, .start = 1372, .len = 2 }, + .{ .cp = 0x1E84, .start = 1374, .len = 2 }, + .{ .cp = 0x1E85, .start = 1376, .len = 2 }, + .{ .cp = 0x1E86, .start = 1378, .len = 2 }, + .{ .cp = 0x1E87, .start = 1380, .len = 2 }, + .{ .cp = 0x1E88, .start = 1382, .len = 2 }, + .{ .cp = 0x1E89, .start = 1384, .len = 2 }, + .{ .cp = 0x1E8A, .start = 1386, .len = 2 }, + .{ .cp = 0x1E8B, .start = 1388, .len = 2 }, + .{ .cp = 0x1E8C, .start = 1390, .len = 2 }, + .{ .cp = 0x1E8D, .start = 1392, .len = 2 }, + .{ .cp = 0x1E8E, .start = 1394, .len = 2 }, + .{ .cp = 0x1E8F, .start = 1396, .len = 2 }, + .{ .cp = 0x1E90, .start = 1398, .len = 2 }, + .{ .cp = 0x1E91, .start = 1400, .len = 2 }, + .{ .cp = 0x1E92, .start = 1402, .len = 2 }, + .{ .cp = 0x1E93, .start = 1404, .len = 2 }, + .{ .cp = 0x1E94, .start = 1406, .len = 2 }, + .{ .cp = 0x1E95, .start = 1408, .len = 2 }, + .{ .cp = 0x1E96, .start = 1410, .len = 2 }, + .{ .cp = 0x1E97, .start = 1412, .len = 2 }, + .{ .cp = 0x1E98, .start = 1414, .len = 2 }, + .{ .cp = 0x1E99, .start = 1416, .len = 2 }, + .{ .cp = 0x1E9A, .start = 1418, .len = 2 }, + .{ .cp = 0x1E9B, .start = 1420, .len = 2 }, + .{ .cp = 0x1EA0, .start = 1422, .len = 2 }, + .{ .cp = 0x1EA1, .start = 1424, .len = 2 }, + .{ .cp = 0x1EA2, .start = 1426, .len = 2 }, + .{ .cp = 0x1EA3, .start = 1428, .len = 2 }, + .{ .cp = 0x1EA4, .start = 1430, .len = 3 }, + .{ .cp = 0x1EA5, .start = 1433, .len = 3 }, + .{ .cp = 0x1EA6, .start = 1436, .len = 3 }, + .{ .cp = 0x1EA7, .start = 1439, .len = 3 }, + .{ .cp = 0x1EA8, .start = 1442, .len = 3 }, + .{ .cp = 0x1EA9, .start = 1445, .len = 3 }, + .{ .cp = 0x1EAA, .start = 1448, .len = 3 }, + .{ .cp = 0x1EAB, .start = 1451, .len = 3 }, + .{ .cp = 0x1EAC, .start = 1454, .len = 3 }, + .{ .cp = 0x1EAD, .start = 1457, .len = 3 }, + .{ .cp = 0x1EAE, .start = 1460, .len = 3 }, + .{ .cp = 0x1EAF, .start = 1463, .len = 3 }, + .{ .cp = 0x1EB0, .start = 1466, .len = 3 }, + .{ .cp = 0x1EB1, .start = 1469, .len = 3 }, + .{ .cp = 0x1EB2, .start = 1472, .len = 3 }, + .{ .cp = 0x1EB3, .start = 1475, .len = 3 }, + .{ .cp = 0x1EB4, .start = 1478, .len = 3 }, + .{ .cp = 0x1EB5, .start = 1481, .len = 3 }, + .{ .cp = 0x1EB6, .start = 1484, .len = 3 }, + .{ .cp = 0x1EB7, .start = 1487, .len = 3 }, + .{ .cp = 0x1EB8, .start = 1490, .len = 2 }, + .{ .cp = 0x1EB9, .start = 1492, .len = 2 }, + .{ .cp = 0x1EBA, .start = 1494, .len = 2 }, + .{ .cp = 0x1EBB, .start = 1496, .len = 2 }, + .{ .cp = 0x1EBC, .start = 1498, .len = 2 }, + .{ .cp = 0x1EBD, .start = 1500, .len = 2 }, + .{ .cp = 0x1EBE, .start = 1502, .len = 3 }, + .{ .cp = 0x1EBF, .start = 1505, .len = 3 }, + .{ .cp = 0x1EC0, .start = 1508, .len = 3 }, + .{ .cp = 0x1EC1, .start = 1511, .len = 3 }, + .{ .cp = 0x1EC2, .start = 1514, .len = 3 }, + .{ .cp = 0x1EC3, .start = 1517, .len = 3 }, + .{ .cp = 0x1EC4, .start = 1520, .len = 3 }, + .{ .cp = 0x1EC5, .start = 1523, .len = 3 }, + .{ .cp = 0x1EC6, .start = 1526, .len = 3 }, + .{ .cp = 0x1EC7, .start = 1529, .len = 3 }, + .{ .cp = 0x1EC8, .start = 1532, .len = 2 }, + .{ .cp = 0x1EC9, .start = 1534, .len = 2 }, + .{ .cp = 0x1ECA, .start = 1536, .len = 2 }, + .{ .cp = 0x1ECB, .start = 1538, .len = 2 }, + .{ .cp = 0x1ECC, .start = 1540, .len = 2 }, + .{ .cp = 0x1ECD, .start = 1542, .len = 2 }, + .{ .cp = 0x1ECE, .start = 1544, .len = 2 }, + .{ .cp = 0x1ECF, .start = 1546, .len = 2 }, + .{ .cp = 0x1ED0, .start = 1548, .len = 3 }, + .{ .cp = 0x1ED1, .start = 1551, .len = 3 }, + .{ .cp = 0x1ED2, .start = 1554, .len = 3 }, + .{ .cp = 0x1ED3, .start = 1557, .len = 3 }, + .{ .cp = 0x1ED4, .start = 1560, .len = 3 }, + .{ .cp = 0x1ED5, .start = 1563, .len = 3 }, + .{ .cp = 0x1ED6, .start = 1566, .len = 3 }, + .{ .cp = 0x1ED7, .start = 1569, .len = 3 }, + .{ .cp = 0x1ED8, .start = 1572, .len = 3 }, + .{ .cp = 0x1ED9, .start = 1575, .len = 3 }, + .{ .cp = 0x1EDA, .start = 1578, .len = 3 }, + .{ .cp = 0x1EDB, .start = 1581, .len = 3 }, + .{ .cp = 0x1EDC, .start = 1584, .len = 3 }, + .{ .cp = 0x1EDD, .start = 1587, .len = 3 }, + .{ .cp = 0x1EDE, .start = 1590, .len = 3 }, + .{ .cp = 0x1EDF, .start = 1593, .len = 3 }, + .{ .cp = 0x1EE0, .start = 1596, .len = 3 }, + .{ .cp = 0x1EE1, .start = 1599, .len = 3 }, + .{ .cp = 0x1EE2, .start = 1602, .len = 3 }, + .{ .cp = 0x1EE3, .start = 1605, .len = 3 }, + .{ .cp = 0x1EE4, .start = 1608, .len = 2 }, + .{ .cp = 0x1EE5, .start = 1610, .len = 2 }, + .{ .cp = 0x1EE6, .start = 1612, .len = 2 }, + .{ .cp = 0x1EE7, .start = 1614, .len = 2 }, + .{ .cp = 0x1EE8, .start = 1616, .len = 3 }, + .{ .cp = 0x1EE9, .start = 1619, .len = 3 }, + .{ .cp = 0x1EEA, .start = 1622, .len = 3 }, + .{ .cp = 0x1EEB, .start = 1625, .len = 3 }, + .{ .cp = 0x1EEC, .start = 1628, .len = 3 }, + .{ .cp = 0x1EED, .start = 1631, .len = 3 }, + .{ .cp = 0x1EEE, .start = 1634, .len = 3 }, + .{ .cp = 0x1EEF, .start = 1637, .len = 3 }, + .{ .cp = 0x1EF0, .start = 1640, .len = 3 }, + .{ .cp = 0x1EF1, .start = 1643, .len = 3 }, + .{ .cp = 0x1EF2, .start = 1646, .len = 2 }, + .{ .cp = 0x1EF3, .start = 1648, .len = 2 }, + .{ .cp = 0x1EF4, .start = 1650, .len = 2 }, + .{ .cp = 0x1EF5, .start = 1652, .len = 2 }, + .{ .cp = 0x1EF6, .start = 1654, .len = 2 }, + .{ .cp = 0x1EF7, .start = 1656, .len = 2 }, + .{ .cp = 0x1EF8, .start = 1658, .len = 2 }, + .{ .cp = 0x1EF9, .start = 1660, .len = 2 }, + .{ .cp = 0x1F00, .start = 1662, .len = 2 }, + .{ .cp = 0x1F01, .start = 1664, .len = 2 }, + .{ .cp = 0x1F02, .start = 1666, .len = 3 }, + .{ .cp = 0x1F03, .start = 1669, .len = 3 }, + .{ .cp = 0x1F04, .start = 1672, .len = 3 }, + .{ .cp = 0x1F05, .start = 1675, .len = 3 }, + .{ .cp = 0x1F06, .start = 1678, .len = 3 }, + .{ .cp = 0x1F07, .start = 1681, .len = 3 }, + .{ .cp = 0x1F08, .start = 1684, .len = 2 }, + .{ .cp = 0x1F09, .start = 1686, .len = 2 }, + .{ .cp = 0x1F0A, .start = 1688, .len = 3 }, + .{ .cp = 0x1F0B, .start = 1691, .len = 3 }, + .{ .cp = 0x1F0C, .start = 1694, .len = 3 }, + .{ .cp = 0x1F0D, .start = 1697, .len = 3 }, + .{ .cp = 0x1F0E, .start = 1700, .len = 3 }, + .{ .cp = 0x1F0F, .start = 1703, .len = 3 }, + .{ .cp = 0x1F10, .start = 1706, .len = 2 }, + .{ .cp = 0x1F11, .start = 1708, .len = 2 }, + .{ .cp = 0x1F12, .start = 1710, .len = 3 }, + .{ .cp = 0x1F13, .start = 1713, .len = 3 }, + .{ .cp = 0x1F14, .start = 1716, .len = 3 }, + .{ .cp = 0x1F15, .start = 1719, .len = 3 }, + .{ .cp = 0x1F18, .start = 1722, .len = 2 }, + .{ .cp = 0x1F19, .start = 1724, .len = 2 }, + .{ .cp = 0x1F1A, .start = 1726, .len = 3 }, + .{ .cp = 0x1F1B, .start = 1729, .len = 3 }, + .{ .cp = 0x1F1C, .start = 1732, .len = 3 }, + .{ .cp = 0x1F1D, .start = 1735, .len = 3 }, + .{ .cp = 0x1F20, .start = 1738, .len = 2 }, + .{ .cp = 0x1F21, .start = 1740, .len = 2 }, + .{ .cp = 0x1F22, .start = 1742, .len = 3 }, + .{ .cp = 0x1F23, .start = 1745, .len = 3 }, + .{ .cp = 0x1F24, .start = 1748, .len = 3 }, + .{ .cp = 0x1F25, .start = 1751, .len = 3 }, + .{ .cp = 0x1F26, .start = 1754, .len = 3 }, + .{ .cp = 0x1F27, .start = 1757, .len = 3 }, + .{ .cp = 0x1F28, .start = 1760, .len = 2 }, + .{ .cp = 0x1F29, .start = 1762, .len = 2 }, + .{ .cp = 0x1F2A, .start = 1764, .len = 3 }, + .{ .cp = 0x1F2B, .start = 1767, .len = 3 }, + .{ .cp = 0x1F2C, .start = 1770, .len = 3 }, + .{ .cp = 0x1F2D, .start = 1773, .len = 3 }, + .{ .cp = 0x1F2E, .start = 1776, .len = 3 }, + .{ .cp = 0x1F2F, .start = 1779, .len = 3 }, + .{ .cp = 0x1F30, .start = 1782, .len = 2 }, + .{ .cp = 0x1F31, .start = 1784, .len = 2 }, + .{ .cp = 0x1F32, .start = 1786, .len = 3 }, + .{ .cp = 0x1F33, .start = 1789, .len = 3 }, + .{ .cp = 0x1F34, .start = 1792, .len = 3 }, + .{ .cp = 0x1F35, .start = 1795, .len = 3 }, + .{ .cp = 0x1F36, .start = 1798, .len = 3 }, + .{ .cp = 0x1F37, .start = 1801, .len = 3 }, + .{ .cp = 0x1F38, .start = 1804, .len = 2 }, + .{ .cp = 0x1F39, .start = 1806, .len = 2 }, + .{ .cp = 0x1F3A, .start = 1808, .len = 3 }, + .{ .cp = 0x1F3B, .start = 1811, .len = 3 }, + .{ .cp = 0x1F3C, .start = 1814, .len = 3 }, + .{ .cp = 0x1F3D, .start = 1817, .len = 3 }, + .{ .cp = 0x1F3E, .start = 1820, .len = 3 }, + .{ .cp = 0x1F3F, .start = 1823, .len = 3 }, + .{ .cp = 0x1F40, .start = 1826, .len = 2 }, + .{ .cp = 0x1F41, .start = 1828, .len = 2 }, + .{ .cp = 0x1F42, .start = 1830, .len = 3 }, + .{ .cp = 0x1F43, .start = 1833, .len = 3 }, + .{ .cp = 0x1F44, .start = 1836, .len = 3 }, + .{ .cp = 0x1F45, .start = 1839, .len = 3 }, + .{ .cp = 0x1F48, .start = 1842, .len = 2 }, + .{ .cp = 0x1F49, .start = 1844, .len = 2 }, + .{ .cp = 0x1F4A, .start = 1846, .len = 3 }, + .{ .cp = 0x1F4B, .start = 1849, .len = 3 }, + .{ .cp = 0x1F4C, .start = 1852, .len = 3 }, + .{ .cp = 0x1F4D, .start = 1855, .len = 3 }, + .{ .cp = 0x1F50, .start = 1858, .len = 2 }, + .{ .cp = 0x1F51, .start = 1860, .len = 2 }, + .{ .cp = 0x1F52, .start = 1862, .len = 3 }, + .{ .cp = 0x1F53, .start = 1865, .len = 3 }, + .{ .cp = 0x1F54, .start = 1868, .len = 3 }, + .{ .cp = 0x1F55, .start = 1871, .len = 3 }, + .{ .cp = 0x1F56, .start = 1874, .len = 3 }, + .{ .cp = 0x1F57, .start = 1877, .len = 3 }, + .{ .cp = 0x1F59, .start = 1880, .len = 2 }, + .{ .cp = 0x1F5B, .start = 1882, .len = 3 }, + .{ .cp = 0x1F5D, .start = 1885, .len = 3 }, + .{ .cp = 0x1F5F, .start = 1888, .len = 3 }, + .{ .cp = 0x1F60, .start = 1891, .len = 2 }, + .{ .cp = 0x1F61, .start = 1893, .len = 2 }, + .{ .cp = 0x1F62, .start = 1895, .len = 3 }, + .{ .cp = 0x1F63, .start = 1898, .len = 3 }, + .{ .cp = 0x1F64, .start = 1901, .len = 3 }, + .{ .cp = 0x1F65, .start = 1904, .len = 3 }, + .{ .cp = 0x1F66, .start = 1907, .len = 3 }, + .{ .cp = 0x1F67, .start = 1910, .len = 3 }, + .{ .cp = 0x1F68, .start = 1913, .len = 2 }, + .{ .cp = 0x1F69, .start = 1915, .len = 2 }, + .{ .cp = 0x1F6A, .start = 1917, .len = 3 }, + .{ .cp = 0x1F6B, .start = 1920, .len = 3 }, + .{ .cp = 0x1F6C, .start = 1923, .len = 3 }, + .{ .cp = 0x1F6D, .start = 1926, .len = 3 }, + .{ .cp = 0x1F6E, .start = 1929, .len = 3 }, + .{ .cp = 0x1F6F, .start = 1932, .len = 3 }, + .{ .cp = 0x1F70, .start = 1935, .len = 2 }, + .{ .cp = 0x1F71, .start = 1937, .len = 2 }, + .{ .cp = 0x1F72, .start = 1939, .len = 2 }, + .{ .cp = 0x1F73, .start = 1941, .len = 2 }, + .{ .cp = 0x1F74, .start = 1943, .len = 2 }, + .{ .cp = 0x1F75, .start = 1945, .len = 2 }, + .{ .cp = 0x1F76, .start = 1947, .len = 2 }, + .{ .cp = 0x1F77, .start = 1949, .len = 2 }, + .{ .cp = 0x1F78, .start = 1951, .len = 2 }, + .{ .cp = 0x1F79, .start = 1953, .len = 2 }, + .{ .cp = 0x1F7A, .start = 1955, .len = 2 }, + .{ .cp = 0x1F7B, .start = 1957, .len = 2 }, + .{ .cp = 0x1F7C, .start = 1959, .len = 2 }, + .{ .cp = 0x1F7D, .start = 1961, .len = 2 }, + .{ .cp = 0x1F80, .start = 1963, .len = 3 }, + .{ .cp = 0x1F81, .start = 1966, .len = 3 }, + .{ .cp = 0x1F82, .start = 1969, .len = 4 }, + .{ .cp = 0x1F83, .start = 1973, .len = 4 }, + .{ .cp = 0x1F84, .start = 1977, .len = 4 }, + .{ .cp = 0x1F85, .start = 1981, .len = 4 }, + .{ .cp = 0x1F86, .start = 1985, .len = 4 }, + .{ .cp = 0x1F87, .start = 1989, .len = 4 }, + .{ .cp = 0x1F88, .start = 1993, .len = 3 }, + .{ .cp = 0x1F89, .start = 1996, .len = 3 }, + .{ .cp = 0x1F8A, .start = 1999, .len = 4 }, + .{ .cp = 0x1F8B, .start = 2003, .len = 4 }, + .{ .cp = 0x1F8C, .start = 2007, .len = 4 }, + .{ .cp = 0x1F8D, .start = 2011, .len = 4 }, + .{ .cp = 0x1F8E, .start = 2015, .len = 4 }, + .{ .cp = 0x1F8F, .start = 2019, .len = 4 }, + .{ .cp = 0x1F90, .start = 2023, .len = 3 }, + .{ .cp = 0x1F91, .start = 2026, .len = 3 }, + .{ .cp = 0x1F92, .start = 2029, .len = 4 }, + .{ .cp = 0x1F93, .start = 2033, .len = 4 }, + .{ .cp = 0x1F94, .start = 2037, .len = 4 }, + .{ .cp = 0x1F95, .start = 2041, .len = 4 }, + .{ .cp = 0x1F96, .start = 2045, .len = 4 }, + .{ .cp = 0x1F97, .start = 2049, .len = 4 }, + .{ .cp = 0x1F98, .start = 2053, .len = 3 }, + .{ .cp = 0x1F99, .start = 2056, .len = 3 }, + .{ .cp = 0x1F9A, .start = 2059, .len = 4 }, + .{ .cp = 0x1F9B, .start = 2063, .len = 4 }, + .{ .cp = 0x1F9C, .start = 2067, .len = 4 }, + .{ .cp = 0x1F9D, .start = 2071, .len = 4 }, + .{ .cp = 0x1F9E, .start = 2075, .len = 4 }, + .{ .cp = 0x1F9F, .start = 2079, .len = 4 }, + .{ .cp = 0x1FA0, .start = 2083, .len = 3 }, + .{ .cp = 0x1FA1, .start = 2086, .len = 3 }, + .{ .cp = 0x1FA2, .start = 2089, .len = 4 }, + .{ .cp = 0x1FA3, .start = 2093, .len = 4 }, + .{ .cp = 0x1FA4, .start = 2097, .len = 4 }, + .{ .cp = 0x1FA5, .start = 2101, .len = 4 }, + .{ .cp = 0x1FA6, .start = 2105, .len = 4 }, + .{ .cp = 0x1FA7, .start = 2109, .len = 4 }, + .{ .cp = 0x1FA8, .start = 2113, .len = 3 }, + .{ .cp = 0x1FA9, .start = 2116, .len = 3 }, + .{ .cp = 0x1FAA, .start = 2119, .len = 4 }, + .{ .cp = 0x1FAB, .start = 2123, .len = 4 }, + .{ .cp = 0x1FAC, .start = 2127, .len = 4 }, + .{ .cp = 0x1FAD, .start = 2131, .len = 4 }, + .{ .cp = 0x1FAE, .start = 2135, .len = 4 }, + .{ .cp = 0x1FAF, .start = 2139, .len = 4 }, + .{ .cp = 0x1FB0, .start = 2143, .len = 2 }, + .{ .cp = 0x1FB1, .start = 2145, .len = 2 }, + .{ .cp = 0x1FB2, .start = 2147, .len = 3 }, + .{ .cp = 0x1FB3, .start = 2150, .len = 2 }, + .{ .cp = 0x1FB4, .start = 2152, .len = 3 }, + .{ .cp = 0x1FB6, .start = 2155, .len = 2 }, + .{ .cp = 0x1FB7, .start = 2157, .len = 3 }, + .{ .cp = 0x1FB8, .start = 2160, .len = 2 }, + .{ .cp = 0x1FB9, .start = 2162, .len = 2 }, + .{ .cp = 0x1FBA, .start = 2164, .len = 2 }, + .{ .cp = 0x1FBB, .start = 2166, .len = 2 }, + .{ .cp = 0x1FBC, .start = 2168, .len = 2 }, + .{ .cp = 0x1FBD, .start = 2170, .len = 2 }, + .{ .cp = 0x1FBE, .start = 2172, .len = 1 }, + .{ .cp = 0x1FBF, .start = 2173, .len = 2 }, + .{ .cp = 0x1FC0, .start = 2175, .len = 2 }, + .{ .cp = 0x1FC1, .start = 2177, .len = 3 }, + .{ .cp = 0x1FC2, .start = 2180, .len = 3 }, + .{ .cp = 0x1FC3, .start = 2183, .len = 2 }, + .{ .cp = 0x1FC4, .start = 2185, .len = 3 }, + .{ .cp = 0x1FC6, .start = 2188, .len = 2 }, + .{ .cp = 0x1FC7, .start = 2190, .len = 3 }, + .{ .cp = 0x1FC8, .start = 2193, .len = 2 }, + .{ .cp = 0x1FC9, .start = 2195, .len = 2 }, + .{ .cp = 0x1FCA, .start = 2197, .len = 2 }, + .{ .cp = 0x1FCB, .start = 2199, .len = 2 }, + .{ .cp = 0x1FCC, .start = 2201, .len = 2 }, + .{ .cp = 0x1FCD, .start = 2203, .len = 3 }, + .{ .cp = 0x1FCE, .start = 2206, .len = 3 }, + .{ .cp = 0x1FCF, .start = 2209, .len = 3 }, + .{ .cp = 0x1FD0, .start = 2212, .len = 2 }, + .{ .cp = 0x1FD1, .start = 2214, .len = 2 }, + .{ .cp = 0x1FD2, .start = 2216, .len = 3 }, + .{ .cp = 0x1FD3, .start = 2219, .len = 3 }, + .{ .cp = 0x1FD6, .start = 2222, .len = 2 }, + .{ .cp = 0x1FD7, .start = 2224, .len = 3 }, + .{ .cp = 0x1FD8, .start = 2227, .len = 2 }, + .{ .cp = 0x1FD9, .start = 2229, .len = 2 }, + .{ .cp = 0x1FDA, .start = 2231, .len = 2 }, + .{ .cp = 0x1FDB, .start = 2233, .len = 2 }, + .{ .cp = 0x1FDD, .start = 2235, .len = 3 }, + .{ .cp = 0x1FDE, .start = 2238, .len = 3 }, + .{ .cp = 0x1FDF, .start = 2241, .len = 3 }, + .{ .cp = 0x1FE0, .start = 2244, .len = 2 }, + .{ .cp = 0x1FE1, .start = 2246, .len = 2 }, + .{ .cp = 0x1FE2, .start = 2248, .len = 3 }, + .{ .cp = 0x1FE3, .start = 2251, .len = 3 }, + .{ .cp = 0x1FE4, .start = 2254, .len = 2 }, + .{ .cp = 0x1FE5, .start = 2256, .len = 2 }, + .{ .cp = 0x1FE6, .start = 2258, .len = 2 }, + .{ .cp = 0x1FE7, .start = 2260, .len = 3 }, + .{ .cp = 0x1FE8, .start = 2263, .len = 2 }, + .{ .cp = 0x1FE9, .start = 2265, .len = 2 }, + .{ .cp = 0x1FEA, .start = 2267, .len = 2 }, + .{ .cp = 0x1FEB, .start = 2269, .len = 2 }, + .{ .cp = 0x1FEC, .start = 2271, .len = 2 }, + .{ .cp = 0x1FED, .start = 2273, .len = 3 }, + .{ .cp = 0x1FEE, .start = 2276, .len = 3 }, + .{ .cp = 0x1FEF, .start = 2279, .len = 1 }, + .{ .cp = 0x1FF2, .start = 2280, .len = 3 }, + .{ .cp = 0x1FF3, .start = 2283, .len = 2 }, + .{ .cp = 0x1FF4, .start = 2285, .len = 3 }, + .{ .cp = 0x1FF6, .start = 2288, .len = 2 }, + .{ .cp = 0x1FF7, .start = 2290, .len = 3 }, + .{ .cp = 0x1FF8, .start = 2293, .len = 2 }, + .{ .cp = 0x1FF9, .start = 2295, .len = 2 }, + .{ .cp = 0x1FFA, .start = 2297, .len = 2 }, + .{ .cp = 0x1FFB, .start = 2299, .len = 2 }, + .{ .cp = 0x1FFC, .start = 2301, .len = 2 }, + .{ .cp = 0x1FFD, .start = 2303, .len = 2 }, + .{ .cp = 0x1FFE, .start = 2305, .len = 2 }, + .{ .cp = 0x2000, .start = 2307, .len = 1 }, + .{ .cp = 0x2001, .start = 2308, .len = 1 }, + .{ .cp = 0x2002, .start = 2309, .len = 1 }, + .{ .cp = 0x2003, .start = 2310, .len = 1 }, + .{ .cp = 0x2004, .start = 2311, .len = 1 }, + .{ .cp = 0x2005, .start = 2312, .len = 1 }, + .{ .cp = 0x2006, .start = 2313, .len = 1 }, + .{ .cp = 0x2007, .start = 2314, .len = 1 }, + .{ .cp = 0x2008, .start = 2315, .len = 1 }, + .{ .cp = 0x2009, .start = 2316, .len = 1 }, + .{ .cp = 0x200A, .start = 2317, .len = 1 }, + .{ .cp = 0x2011, .start = 2318, .len = 1 }, + .{ .cp = 0x2017, .start = 2319, .len = 2 }, + .{ .cp = 0x2024, .start = 2321, .len = 1 }, + .{ .cp = 0x2025, .start = 2322, .len = 2 }, + .{ .cp = 0x2026, .start = 2324, .len = 3 }, + .{ .cp = 0x202F, .start = 2327, .len = 1 }, + .{ .cp = 0x2033, .start = 2328, .len = 2 }, + .{ .cp = 0x2034, .start = 2330, .len = 3 }, + .{ .cp = 0x2036, .start = 2333, .len = 2 }, + .{ .cp = 0x2037, .start = 2335, .len = 3 }, + .{ .cp = 0x203C, .start = 2338, .len = 2 }, + .{ .cp = 0x203E, .start = 2340, .len = 2 }, + .{ .cp = 0x2047, .start = 2342, .len = 2 }, + .{ .cp = 0x2048, .start = 2344, .len = 2 }, + .{ .cp = 0x2049, .start = 2346, .len = 2 }, + .{ .cp = 0x2057, .start = 2348, .len = 4 }, + .{ .cp = 0x205F, .start = 2352, .len = 1 }, + .{ .cp = 0x2070, .start = 2353, .len = 1 }, + .{ .cp = 0x2071, .start = 2354, .len = 1 }, + .{ .cp = 0x2074, .start = 2355, .len = 1 }, + .{ .cp = 0x2075, .start = 2356, .len = 1 }, + .{ .cp = 0x2076, .start = 2357, .len = 1 }, + .{ .cp = 0x2077, .start = 2358, .len = 1 }, + .{ .cp = 0x2078, .start = 2359, .len = 1 }, + .{ .cp = 0x2079, .start = 2360, .len = 1 }, + .{ .cp = 0x207A, .start = 2361, .len = 1 }, + .{ .cp = 0x207B, .start = 2362, .len = 1 }, + .{ .cp = 0x207C, .start = 2363, .len = 1 }, + .{ .cp = 0x207D, .start = 2364, .len = 1 }, + .{ .cp = 0x207E, .start = 2365, .len = 1 }, + .{ .cp = 0x207F, .start = 2366, .len = 1 }, + .{ .cp = 0x2080, .start = 2367, .len = 1 }, + .{ .cp = 0x2081, .start = 2368, .len = 1 }, + .{ .cp = 0x2082, .start = 2369, .len = 1 }, + .{ .cp = 0x2083, .start = 2370, .len = 1 }, + .{ .cp = 0x2084, .start = 2371, .len = 1 }, + .{ .cp = 0x2085, .start = 2372, .len = 1 }, + .{ .cp = 0x2086, .start = 2373, .len = 1 }, + .{ .cp = 0x2087, .start = 2374, .len = 1 }, + .{ .cp = 0x2088, .start = 2375, .len = 1 }, + .{ .cp = 0x2089, .start = 2376, .len = 1 }, + .{ .cp = 0x208A, .start = 2377, .len = 1 }, + .{ .cp = 0x208B, .start = 2378, .len = 1 }, + .{ .cp = 0x208C, .start = 2379, .len = 1 }, + .{ .cp = 0x208D, .start = 2380, .len = 1 }, + .{ .cp = 0x208E, .start = 2381, .len = 1 }, + .{ .cp = 0x2090, .start = 2382, .len = 1 }, + .{ .cp = 0x2091, .start = 2383, .len = 1 }, + .{ .cp = 0x2092, .start = 2384, .len = 1 }, + .{ .cp = 0x2093, .start = 2385, .len = 1 }, + .{ .cp = 0x2094, .start = 2386, .len = 1 }, + .{ .cp = 0x2095, .start = 2387, .len = 1 }, + .{ .cp = 0x2096, .start = 2388, .len = 1 }, + .{ .cp = 0x2097, .start = 2389, .len = 1 }, + .{ .cp = 0x2098, .start = 2390, .len = 1 }, + .{ .cp = 0x2099, .start = 2391, .len = 1 }, + .{ .cp = 0x209A, .start = 2392, .len = 1 }, + .{ .cp = 0x209B, .start = 2393, .len = 1 }, + .{ .cp = 0x209C, .start = 2394, .len = 1 }, + .{ .cp = 0x20A8, .start = 2395, .len = 2 }, + .{ .cp = 0x2100, .start = 2397, .len = 3 }, + .{ .cp = 0x2101, .start = 2400, .len = 3 }, + .{ .cp = 0x2102, .start = 2403, .len = 1 }, + .{ .cp = 0x2103, .start = 2404, .len = 2 }, + .{ .cp = 0x2105, .start = 2406, .len = 3 }, + .{ .cp = 0x2106, .start = 2409, .len = 3 }, + .{ .cp = 0x2107, .start = 2412, .len = 1 }, + .{ .cp = 0x2109, .start = 2413, .len = 2 }, + .{ .cp = 0x210A, .start = 2415, .len = 1 }, + .{ .cp = 0x210B, .start = 2416, .len = 1 }, + .{ .cp = 0x210C, .start = 2417, .len = 1 }, + .{ .cp = 0x210D, .start = 2418, .len = 1 }, + .{ .cp = 0x210E, .start = 2419, .len = 1 }, + .{ .cp = 0x210F, .start = 2420, .len = 1 }, + .{ .cp = 0x2110, .start = 2421, .len = 1 }, + .{ .cp = 0x2111, .start = 2422, .len = 1 }, + .{ .cp = 0x2112, .start = 2423, .len = 1 }, + .{ .cp = 0x2113, .start = 2424, .len = 1 }, + .{ .cp = 0x2115, .start = 2425, .len = 1 }, + .{ .cp = 0x2116, .start = 2426, .len = 2 }, + .{ .cp = 0x2119, .start = 2428, .len = 1 }, + .{ .cp = 0x211A, .start = 2429, .len = 1 }, + .{ .cp = 0x211B, .start = 2430, .len = 1 }, + .{ .cp = 0x211C, .start = 2431, .len = 1 }, + .{ .cp = 0x211D, .start = 2432, .len = 1 }, + .{ .cp = 0x2120, .start = 2433, .len = 2 }, + .{ .cp = 0x2121, .start = 2435, .len = 3 }, + .{ .cp = 0x2122, .start = 2438, .len = 2 }, + .{ .cp = 0x2124, .start = 2440, .len = 1 }, + .{ .cp = 0x2126, .start = 2441, .len = 1 }, + .{ .cp = 0x2128, .start = 2442, .len = 1 }, + .{ .cp = 0x212A, .start = 2443, .len = 1 }, + .{ .cp = 0x212B, .start = 2444, .len = 2 }, + .{ .cp = 0x212C, .start = 2446, .len = 1 }, + .{ .cp = 0x212D, .start = 2447, .len = 1 }, + .{ .cp = 0x212F, .start = 2448, .len = 1 }, + .{ .cp = 0x2130, .start = 2449, .len = 1 }, + .{ .cp = 0x2131, .start = 2450, .len = 1 }, + .{ .cp = 0x2133, .start = 2451, .len = 1 }, + .{ .cp = 0x2134, .start = 2452, .len = 1 }, + .{ .cp = 0x2135, .start = 2453, .len = 1 }, + .{ .cp = 0x2136, .start = 2454, .len = 1 }, + .{ .cp = 0x2137, .start = 2455, .len = 1 }, + .{ .cp = 0x2138, .start = 2456, .len = 1 }, + .{ .cp = 0x2139, .start = 2457, .len = 1 }, + .{ .cp = 0x213B, .start = 2458, .len = 3 }, + .{ .cp = 0x213C, .start = 2461, .len = 1 }, + .{ .cp = 0x213D, .start = 2462, .len = 1 }, + .{ .cp = 0x213E, .start = 2463, .len = 1 }, + .{ .cp = 0x213F, .start = 2464, .len = 1 }, + .{ .cp = 0x2140, .start = 2465, .len = 1 }, + .{ .cp = 0x2145, .start = 2466, .len = 1 }, + .{ .cp = 0x2146, .start = 2467, .len = 1 }, + .{ .cp = 0x2147, .start = 2468, .len = 1 }, + .{ .cp = 0x2148, .start = 2469, .len = 1 }, + .{ .cp = 0x2149, .start = 2470, .len = 1 }, + .{ .cp = 0x2150, .start = 2471, .len = 3 }, + .{ .cp = 0x2151, .start = 2474, .len = 3 }, + .{ .cp = 0x2152, .start = 2477, .len = 4 }, + .{ .cp = 0x2153, .start = 2481, .len = 3 }, + .{ .cp = 0x2154, .start = 2484, .len = 3 }, + .{ .cp = 0x2155, .start = 2487, .len = 3 }, + .{ .cp = 0x2156, .start = 2490, .len = 3 }, + .{ .cp = 0x2157, .start = 2493, .len = 3 }, + .{ .cp = 0x2158, .start = 2496, .len = 3 }, + .{ .cp = 0x2159, .start = 2499, .len = 3 }, + .{ .cp = 0x215A, .start = 2502, .len = 3 }, + .{ .cp = 0x215B, .start = 2505, .len = 3 }, + .{ .cp = 0x215C, .start = 2508, .len = 3 }, + .{ .cp = 0x215D, .start = 2511, .len = 3 }, + .{ .cp = 0x215E, .start = 2514, .len = 3 }, + .{ .cp = 0x215F, .start = 2517, .len = 2 }, + .{ .cp = 0x2160, .start = 2519, .len = 1 }, + .{ .cp = 0x2161, .start = 2520, .len = 2 }, + .{ .cp = 0x2162, .start = 2522, .len = 3 }, + .{ .cp = 0x2163, .start = 2525, .len = 2 }, + .{ .cp = 0x2164, .start = 2527, .len = 1 }, + .{ .cp = 0x2165, .start = 2528, .len = 2 }, + .{ .cp = 0x2166, .start = 2530, .len = 3 }, + .{ .cp = 0x2167, .start = 2533, .len = 4 }, + .{ .cp = 0x2168, .start = 2537, .len = 2 }, + .{ .cp = 0x2169, .start = 2539, .len = 1 }, + .{ .cp = 0x216A, .start = 2540, .len = 2 }, + .{ .cp = 0x216B, .start = 2542, .len = 3 }, + .{ .cp = 0x216C, .start = 2545, .len = 1 }, + .{ .cp = 0x216D, .start = 2546, .len = 1 }, + .{ .cp = 0x216E, .start = 2547, .len = 1 }, + .{ .cp = 0x216F, .start = 2548, .len = 1 }, + .{ .cp = 0x2170, .start = 2549, .len = 1 }, + .{ .cp = 0x2171, .start = 2550, .len = 2 }, + .{ .cp = 0x2172, .start = 2552, .len = 3 }, + .{ .cp = 0x2173, .start = 2555, .len = 2 }, + .{ .cp = 0x2174, .start = 2557, .len = 1 }, + .{ .cp = 0x2175, .start = 2558, .len = 2 }, + .{ .cp = 0x2176, .start = 2560, .len = 3 }, + .{ .cp = 0x2177, .start = 2563, .len = 4 }, + .{ .cp = 0x2178, .start = 2567, .len = 2 }, + .{ .cp = 0x2179, .start = 2569, .len = 1 }, + .{ .cp = 0x217A, .start = 2570, .len = 2 }, + .{ .cp = 0x217B, .start = 2572, .len = 3 }, + .{ .cp = 0x217C, .start = 2575, .len = 1 }, + .{ .cp = 0x217D, .start = 2576, .len = 1 }, + .{ .cp = 0x217E, .start = 2577, .len = 1 }, + .{ .cp = 0x217F, .start = 2578, .len = 1 }, + .{ .cp = 0x2189, .start = 2579, .len = 3 }, + .{ .cp = 0x219A, .start = 2582, .len = 2 }, + .{ .cp = 0x219B, .start = 2584, .len = 2 }, + .{ .cp = 0x21AE, .start = 2586, .len = 2 }, + .{ .cp = 0x21CD, .start = 2588, .len = 2 }, + .{ .cp = 0x21CE, .start = 2590, .len = 2 }, + .{ .cp = 0x21CF, .start = 2592, .len = 2 }, + .{ .cp = 0x2204, .start = 2594, .len = 2 }, + .{ .cp = 0x2209, .start = 2596, .len = 2 }, + .{ .cp = 0x220C, .start = 2598, .len = 2 }, + .{ .cp = 0x2224, .start = 2600, .len = 2 }, + .{ .cp = 0x2226, .start = 2602, .len = 2 }, + .{ .cp = 0x222C, .start = 2604, .len = 2 }, + .{ .cp = 0x222D, .start = 2606, .len = 3 }, + .{ .cp = 0x222F, .start = 2609, .len = 2 }, + .{ .cp = 0x2230, .start = 2611, .len = 3 }, + .{ .cp = 0x2241, .start = 2614, .len = 2 }, + .{ .cp = 0x2244, .start = 2616, .len = 2 }, + .{ .cp = 0x2247, .start = 2618, .len = 2 }, + .{ .cp = 0x2249, .start = 2620, .len = 2 }, + .{ .cp = 0x2260, .start = 2622, .len = 2 }, + .{ .cp = 0x2262, .start = 2624, .len = 2 }, + .{ .cp = 0x226D, .start = 2626, .len = 2 }, + .{ .cp = 0x226E, .start = 2628, .len = 2 }, + .{ .cp = 0x226F, .start = 2630, .len = 2 }, + .{ .cp = 0x2270, .start = 2632, .len = 2 }, + .{ .cp = 0x2271, .start = 2634, .len = 2 }, + .{ .cp = 0x2274, .start = 2636, .len = 2 }, + .{ .cp = 0x2275, .start = 2638, .len = 2 }, + .{ .cp = 0x2278, .start = 2640, .len = 2 }, + .{ .cp = 0x2279, .start = 2642, .len = 2 }, + .{ .cp = 0x2280, .start = 2644, .len = 2 }, + .{ .cp = 0x2281, .start = 2646, .len = 2 }, + .{ .cp = 0x2284, .start = 2648, .len = 2 }, + .{ .cp = 0x2285, .start = 2650, .len = 2 }, + .{ .cp = 0x2288, .start = 2652, .len = 2 }, + .{ .cp = 0x2289, .start = 2654, .len = 2 }, + .{ .cp = 0x22AC, .start = 2656, .len = 2 }, + .{ .cp = 0x22AD, .start = 2658, .len = 2 }, + .{ .cp = 0x22AE, .start = 2660, .len = 2 }, + .{ .cp = 0x22AF, .start = 2662, .len = 2 }, + .{ .cp = 0x22E0, .start = 2664, .len = 2 }, + .{ .cp = 0x22E1, .start = 2666, .len = 2 }, + .{ .cp = 0x22E2, .start = 2668, .len = 2 }, + .{ .cp = 0x22E3, .start = 2670, .len = 2 }, + .{ .cp = 0x22EA, .start = 2672, .len = 2 }, + .{ .cp = 0x22EB, .start = 2674, .len = 2 }, + .{ .cp = 0x22EC, .start = 2676, .len = 2 }, + .{ .cp = 0x22ED, .start = 2678, .len = 2 }, + .{ .cp = 0x2329, .start = 2680, .len = 1 }, + .{ .cp = 0x232A, .start = 2681, .len = 1 }, + .{ .cp = 0x2460, .start = 2682, .len = 1 }, + .{ .cp = 0x2461, .start = 2683, .len = 1 }, + .{ .cp = 0x2462, .start = 2684, .len = 1 }, + .{ .cp = 0x2463, .start = 2685, .len = 1 }, + .{ .cp = 0x2464, .start = 2686, .len = 1 }, + .{ .cp = 0x2465, .start = 2687, .len = 1 }, + .{ .cp = 0x2466, .start = 2688, .len = 1 }, + .{ .cp = 0x2467, .start = 2689, .len = 1 }, + .{ .cp = 0x2468, .start = 2690, .len = 1 }, + .{ .cp = 0x2469, .start = 2691, .len = 2 }, + .{ .cp = 0x246A, .start = 2693, .len = 2 }, + .{ .cp = 0x246B, .start = 2695, .len = 2 }, + .{ .cp = 0x246C, .start = 2697, .len = 2 }, + .{ .cp = 0x246D, .start = 2699, .len = 2 }, + .{ .cp = 0x246E, .start = 2701, .len = 2 }, + .{ .cp = 0x246F, .start = 2703, .len = 2 }, + .{ .cp = 0x2470, .start = 2705, .len = 2 }, + .{ .cp = 0x2471, .start = 2707, .len = 2 }, + .{ .cp = 0x2472, .start = 2709, .len = 2 }, + .{ .cp = 0x2473, .start = 2711, .len = 2 }, + .{ .cp = 0x2474, .start = 2713, .len = 3 }, + .{ .cp = 0x2475, .start = 2716, .len = 3 }, + .{ .cp = 0x2476, .start = 2719, .len = 3 }, + .{ .cp = 0x2477, .start = 2722, .len = 3 }, + .{ .cp = 0x2478, .start = 2725, .len = 3 }, + .{ .cp = 0x2479, .start = 2728, .len = 3 }, + .{ .cp = 0x247A, .start = 2731, .len = 3 }, + .{ .cp = 0x247B, .start = 2734, .len = 3 }, + .{ .cp = 0x247C, .start = 2737, .len = 3 }, + .{ .cp = 0x247D, .start = 2740, .len = 4 }, + .{ .cp = 0x247E, .start = 2744, .len = 4 }, + .{ .cp = 0x247F, .start = 2748, .len = 4 }, + .{ .cp = 0x2480, .start = 2752, .len = 4 }, + .{ .cp = 0x2481, .start = 2756, .len = 4 }, + .{ .cp = 0x2482, .start = 2760, .len = 4 }, + .{ .cp = 0x2483, .start = 2764, .len = 4 }, + .{ .cp = 0x2484, .start = 2768, .len = 4 }, + .{ .cp = 0x2485, .start = 2772, .len = 4 }, + .{ .cp = 0x2486, .start = 2776, .len = 4 }, + .{ .cp = 0x2487, .start = 2780, .len = 4 }, + .{ .cp = 0x2488, .start = 2784, .len = 2 }, + .{ .cp = 0x2489, .start = 2786, .len = 2 }, + .{ .cp = 0x248A, .start = 2788, .len = 2 }, + .{ .cp = 0x248B, .start = 2790, .len = 2 }, + .{ .cp = 0x248C, .start = 2792, .len = 2 }, + .{ .cp = 0x248D, .start = 2794, .len = 2 }, + .{ .cp = 0x248E, .start = 2796, .len = 2 }, + .{ .cp = 0x248F, .start = 2798, .len = 2 }, + .{ .cp = 0x2490, .start = 2800, .len = 2 }, + .{ .cp = 0x2491, .start = 2802, .len = 3 }, + .{ .cp = 0x2492, .start = 2805, .len = 3 }, + .{ .cp = 0x2493, .start = 2808, .len = 3 }, + .{ .cp = 0x2494, .start = 2811, .len = 3 }, + .{ .cp = 0x2495, .start = 2814, .len = 3 }, + .{ .cp = 0x2496, .start = 2817, .len = 3 }, + .{ .cp = 0x2497, .start = 2820, .len = 3 }, + .{ .cp = 0x2498, .start = 2823, .len = 3 }, + .{ .cp = 0x2499, .start = 2826, .len = 3 }, + .{ .cp = 0x249A, .start = 2829, .len = 3 }, + .{ .cp = 0x249B, .start = 2832, .len = 3 }, + .{ .cp = 0x249C, .start = 2835, .len = 3 }, + .{ .cp = 0x249D, .start = 2838, .len = 3 }, + .{ .cp = 0x249E, .start = 2841, .len = 3 }, + .{ .cp = 0x249F, .start = 2844, .len = 3 }, + .{ .cp = 0x24A0, .start = 2847, .len = 3 }, + .{ .cp = 0x24A1, .start = 2850, .len = 3 }, + .{ .cp = 0x24A2, .start = 2853, .len = 3 }, + .{ .cp = 0x24A3, .start = 2856, .len = 3 }, + .{ .cp = 0x24A4, .start = 2859, .len = 3 }, + .{ .cp = 0x24A5, .start = 2862, .len = 3 }, + .{ .cp = 0x24A6, .start = 2865, .len = 3 }, + .{ .cp = 0x24A7, .start = 2868, .len = 3 }, + .{ .cp = 0x24A8, .start = 2871, .len = 3 }, + .{ .cp = 0x24A9, .start = 2874, .len = 3 }, + .{ .cp = 0x24AA, .start = 2877, .len = 3 }, + .{ .cp = 0x24AB, .start = 2880, .len = 3 }, + .{ .cp = 0x24AC, .start = 2883, .len = 3 }, + .{ .cp = 0x24AD, .start = 2886, .len = 3 }, + .{ .cp = 0x24AE, .start = 2889, .len = 3 }, + .{ .cp = 0x24AF, .start = 2892, .len = 3 }, + .{ .cp = 0x24B0, .start = 2895, .len = 3 }, + .{ .cp = 0x24B1, .start = 2898, .len = 3 }, + .{ .cp = 0x24B2, .start = 2901, .len = 3 }, + .{ .cp = 0x24B3, .start = 2904, .len = 3 }, + .{ .cp = 0x24B4, .start = 2907, .len = 3 }, + .{ .cp = 0x24B5, .start = 2910, .len = 3 }, + .{ .cp = 0x24B6, .start = 2913, .len = 1 }, + .{ .cp = 0x24B7, .start = 2914, .len = 1 }, + .{ .cp = 0x24B8, .start = 2915, .len = 1 }, + .{ .cp = 0x24B9, .start = 2916, .len = 1 }, + .{ .cp = 0x24BA, .start = 2917, .len = 1 }, + .{ .cp = 0x24BB, .start = 2918, .len = 1 }, + .{ .cp = 0x24BC, .start = 2919, .len = 1 }, + .{ .cp = 0x24BD, .start = 2920, .len = 1 }, + .{ .cp = 0x24BE, .start = 2921, .len = 1 }, + .{ .cp = 0x24BF, .start = 2922, .len = 1 }, + .{ .cp = 0x24C0, .start = 2923, .len = 1 }, + .{ .cp = 0x24C1, .start = 2924, .len = 1 }, + .{ .cp = 0x24C2, .start = 2925, .len = 1 }, + .{ .cp = 0x24C3, .start = 2926, .len = 1 }, + .{ .cp = 0x24C4, .start = 2927, .len = 1 }, + .{ .cp = 0x24C5, .start = 2928, .len = 1 }, + .{ .cp = 0x24C6, .start = 2929, .len = 1 }, + .{ .cp = 0x24C7, .start = 2930, .len = 1 }, + .{ .cp = 0x24C8, .start = 2931, .len = 1 }, + .{ .cp = 0x24C9, .start = 2932, .len = 1 }, + .{ .cp = 0x24CA, .start = 2933, .len = 1 }, + .{ .cp = 0x24CB, .start = 2934, .len = 1 }, + .{ .cp = 0x24CC, .start = 2935, .len = 1 }, + .{ .cp = 0x24CD, .start = 2936, .len = 1 }, + .{ .cp = 0x24CE, .start = 2937, .len = 1 }, + .{ .cp = 0x24CF, .start = 2938, .len = 1 }, + .{ .cp = 0x24D0, .start = 2939, .len = 1 }, + .{ .cp = 0x24D1, .start = 2940, .len = 1 }, + .{ .cp = 0x24D2, .start = 2941, .len = 1 }, + .{ .cp = 0x24D3, .start = 2942, .len = 1 }, + .{ .cp = 0x24D4, .start = 2943, .len = 1 }, + .{ .cp = 0x24D5, .start = 2944, .len = 1 }, + .{ .cp = 0x24D6, .start = 2945, .len = 1 }, + .{ .cp = 0x24D7, .start = 2946, .len = 1 }, + .{ .cp = 0x24D8, .start = 2947, .len = 1 }, + .{ .cp = 0x24D9, .start = 2948, .len = 1 }, + .{ .cp = 0x24DA, .start = 2949, .len = 1 }, + .{ .cp = 0x24DB, .start = 2950, .len = 1 }, + .{ .cp = 0x24DC, .start = 2951, .len = 1 }, + .{ .cp = 0x24DD, .start = 2952, .len = 1 }, + .{ .cp = 0x24DE, .start = 2953, .len = 1 }, + .{ .cp = 0x24DF, .start = 2954, .len = 1 }, + .{ .cp = 0x24E0, .start = 2955, .len = 1 }, + .{ .cp = 0x24E1, .start = 2956, .len = 1 }, + .{ .cp = 0x24E2, .start = 2957, .len = 1 }, + .{ .cp = 0x24E3, .start = 2958, .len = 1 }, + .{ .cp = 0x24E4, .start = 2959, .len = 1 }, + .{ .cp = 0x24E5, .start = 2960, .len = 1 }, + .{ .cp = 0x24E6, .start = 2961, .len = 1 }, + .{ .cp = 0x24E7, .start = 2962, .len = 1 }, + .{ .cp = 0x24E8, .start = 2963, .len = 1 }, + .{ .cp = 0x24E9, .start = 2964, .len = 1 }, + .{ .cp = 0x24EA, .start = 2965, .len = 1 }, + .{ .cp = 0x2A0C, .start = 2966, .len = 4 }, + .{ .cp = 0x2A74, .start = 2970, .len = 3 }, + .{ .cp = 0x2A75, .start = 2973, .len = 2 }, + .{ .cp = 0x2A76, .start = 2975, .len = 3 }, + .{ .cp = 0x2ADC, .start = 2978, .len = 2 }, + .{ .cp = 0x2C7C, .start = 2980, .len = 1 }, + .{ .cp = 0x2C7D, .start = 2981, .len = 1 }, + .{ .cp = 0x2D6F, .start = 2982, .len = 1 }, + .{ .cp = 0x2E9F, .start = 2983, .len = 1 }, + .{ .cp = 0x2EF3, .start = 2984, .len = 1 }, + .{ .cp = 0x2F00, .start = 2985, .len = 1 }, + .{ .cp = 0x2F01, .start = 2986, .len = 1 }, + .{ .cp = 0x2F02, .start = 2987, .len = 1 }, + .{ .cp = 0x2F03, .start = 2988, .len = 1 }, + .{ .cp = 0x2F04, .start = 2989, .len = 1 }, + .{ .cp = 0x2F05, .start = 2990, .len = 1 }, + .{ .cp = 0x2F06, .start = 2991, .len = 1 }, + .{ .cp = 0x2F07, .start = 2992, .len = 1 }, + .{ .cp = 0x2F08, .start = 2993, .len = 1 }, + .{ .cp = 0x2F09, .start = 2994, .len = 1 }, + .{ .cp = 0x2F0A, .start = 2995, .len = 1 }, + .{ .cp = 0x2F0B, .start = 2996, .len = 1 }, + .{ .cp = 0x2F0C, .start = 2997, .len = 1 }, + .{ .cp = 0x2F0D, .start = 2998, .len = 1 }, + .{ .cp = 0x2F0E, .start = 2999, .len = 1 }, + .{ .cp = 0x2F0F, .start = 3000, .len = 1 }, + .{ .cp = 0x2F10, .start = 3001, .len = 1 }, + .{ .cp = 0x2F11, .start = 3002, .len = 1 }, + .{ .cp = 0x2F12, .start = 3003, .len = 1 }, + .{ .cp = 0x2F13, .start = 3004, .len = 1 }, + .{ .cp = 0x2F14, .start = 3005, .len = 1 }, + .{ .cp = 0x2F15, .start = 3006, .len = 1 }, + .{ .cp = 0x2F16, .start = 3007, .len = 1 }, + .{ .cp = 0x2F17, .start = 3008, .len = 1 }, + .{ .cp = 0x2F18, .start = 3009, .len = 1 }, + .{ .cp = 0x2F19, .start = 3010, .len = 1 }, + .{ .cp = 0x2F1A, .start = 3011, .len = 1 }, + .{ .cp = 0x2F1B, .start = 3012, .len = 1 }, + .{ .cp = 0x2F1C, .start = 3013, .len = 1 }, + .{ .cp = 0x2F1D, .start = 3014, .len = 1 }, + .{ .cp = 0x2F1E, .start = 3015, .len = 1 }, + .{ .cp = 0x2F1F, .start = 3016, .len = 1 }, + .{ .cp = 0x2F20, .start = 3017, .len = 1 }, + .{ .cp = 0x2F21, .start = 3018, .len = 1 }, + .{ .cp = 0x2F22, .start = 3019, .len = 1 }, + .{ .cp = 0x2F23, .start = 3020, .len = 1 }, + .{ .cp = 0x2F24, .start = 3021, .len = 1 }, + .{ .cp = 0x2F25, .start = 3022, .len = 1 }, + .{ .cp = 0x2F26, .start = 3023, .len = 1 }, + .{ .cp = 0x2F27, .start = 3024, .len = 1 }, + .{ .cp = 0x2F28, .start = 3025, .len = 1 }, + .{ .cp = 0x2F29, .start = 3026, .len = 1 }, + .{ .cp = 0x2F2A, .start = 3027, .len = 1 }, + .{ .cp = 0x2F2B, .start = 3028, .len = 1 }, + .{ .cp = 0x2F2C, .start = 3029, .len = 1 }, + .{ .cp = 0x2F2D, .start = 3030, .len = 1 }, + .{ .cp = 0x2F2E, .start = 3031, .len = 1 }, + .{ .cp = 0x2F2F, .start = 3032, .len = 1 }, + .{ .cp = 0x2F30, .start = 3033, .len = 1 }, + .{ .cp = 0x2F31, .start = 3034, .len = 1 }, + .{ .cp = 0x2F32, .start = 3035, .len = 1 }, + .{ .cp = 0x2F33, .start = 3036, .len = 1 }, + .{ .cp = 0x2F34, .start = 3037, .len = 1 }, + .{ .cp = 0x2F35, .start = 3038, .len = 1 }, + .{ .cp = 0x2F36, .start = 3039, .len = 1 }, + .{ .cp = 0x2F37, .start = 3040, .len = 1 }, + .{ .cp = 0x2F38, .start = 3041, .len = 1 }, + .{ .cp = 0x2F39, .start = 3042, .len = 1 }, + .{ .cp = 0x2F3A, .start = 3043, .len = 1 }, + .{ .cp = 0x2F3B, .start = 3044, .len = 1 }, + .{ .cp = 0x2F3C, .start = 3045, .len = 1 }, + .{ .cp = 0x2F3D, .start = 3046, .len = 1 }, + .{ .cp = 0x2F3E, .start = 3047, .len = 1 }, + .{ .cp = 0x2F3F, .start = 3048, .len = 1 }, + .{ .cp = 0x2F40, .start = 3049, .len = 1 }, + .{ .cp = 0x2F41, .start = 3050, .len = 1 }, + .{ .cp = 0x2F42, .start = 3051, .len = 1 }, + .{ .cp = 0x2F43, .start = 3052, .len = 1 }, + .{ .cp = 0x2F44, .start = 3053, .len = 1 }, + .{ .cp = 0x2F45, .start = 3054, .len = 1 }, + .{ .cp = 0x2F46, .start = 3055, .len = 1 }, + .{ .cp = 0x2F47, .start = 3056, .len = 1 }, + .{ .cp = 0x2F48, .start = 3057, .len = 1 }, + .{ .cp = 0x2F49, .start = 3058, .len = 1 }, + .{ .cp = 0x2F4A, .start = 3059, .len = 1 }, + .{ .cp = 0x2F4B, .start = 3060, .len = 1 }, + .{ .cp = 0x2F4C, .start = 3061, .len = 1 }, + .{ .cp = 0x2F4D, .start = 3062, .len = 1 }, + .{ .cp = 0x2F4E, .start = 3063, .len = 1 }, + .{ .cp = 0x2F4F, .start = 3064, .len = 1 }, + .{ .cp = 0x2F50, .start = 3065, .len = 1 }, + .{ .cp = 0x2F51, .start = 3066, .len = 1 }, + .{ .cp = 0x2F52, .start = 3067, .len = 1 }, + .{ .cp = 0x2F53, .start = 3068, .len = 1 }, + .{ .cp = 0x2F54, .start = 3069, .len = 1 }, + .{ .cp = 0x2F55, .start = 3070, .len = 1 }, + .{ .cp = 0x2F56, .start = 3071, .len = 1 }, + .{ .cp = 0x2F57, .start = 3072, .len = 1 }, + .{ .cp = 0x2F58, .start = 3073, .len = 1 }, + .{ .cp = 0x2F59, .start = 3074, .len = 1 }, + .{ .cp = 0x2F5A, .start = 3075, .len = 1 }, + .{ .cp = 0x2F5B, .start = 3076, .len = 1 }, + .{ .cp = 0x2F5C, .start = 3077, .len = 1 }, + .{ .cp = 0x2F5D, .start = 3078, .len = 1 }, + .{ .cp = 0x2F5E, .start = 3079, .len = 1 }, + .{ .cp = 0x2F5F, .start = 3080, .len = 1 }, + .{ .cp = 0x2F60, .start = 3081, .len = 1 }, + .{ .cp = 0x2F61, .start = 3082, .len = 1 }, + .{ .cp = 0x2F62, .start = 3083, .len = 1 }, + .{ .cp = 0x2F63, .start = 3084, .len = 1 }, + .{ .cp = 0x2F64, .start = 3085, .len = 1 }, + .{ .cp = 0x2F65, .start = 3086, .len = 1 }, + .{ .cp = 0x2F66, .start = 3087, .len = 1 }, + .{ .cp = 0x2F67, .start = 3088, .len = 1 }, + .{ .cp = 0x2F68, .start = 3089, .len = 1 }, + .{ .cp = 0x2F69, .start = 3090, .len = 1 }, + .{ .cp = 0x2F6A, .start = 3091, .len = 1 }, + .{ .cp = 0x2F6B, .start = 3092, .len = 1 }, + .{ .cp = 0x2F6C, .start = 3093, .len = 1 }, + .{ .cp = 0x2F6D, .start = 3094, .len = 1 }, + .{ .cp = 0x2F6E, .start = 3095, .len = 1 }, + .{ .cp = 0x2F6F, .start = 3096, .len = 1 }, + .{ .cp = 0x2F70, .start = 3097, .len = 1 }, + .{ .cp = 0x2F71, .start = 3098, .len = 1 }, + .{ .cp = 0x2F72, .start = 3099, .len = 1 }, + .{ .cp = 0x2F73, .start = 3100, .len = 1 }, + .{ .cp = 0x2F74, .start = 3101, .len = 1 }, + .{ .cp = 0x2F75, .start = 3102, .len = 1 }, + .{ .cp = 0x2F76, .start = 3103, .len = 1 }, + .{ .cp = 0x2F77, .start = 3104, .len = 1 }, + .{ .cp = 0x2F78, .start = 3105, .len = 1 }, + .{ .cp = 0x2F79, .start = 3106, .len = 1 }, + .{ .cp = 0x2F7A, .start = 3107, .len = 1 }, + .{ .cp = 0x2F7B, .start = 3108, .len = 1 }, + .{ .cp = 0x2F7C, .start = 3109, .len = 1 }, + .{ .cp = 0x2F7D, .start = 3110, .len = 1 }, + .{ .cp = 0x2F7E, .start = 3111, .len = 1 }, + .{ .cp = 0x2F7F, .start = 3112, .len = 1 }, + .{ .cp = 0x2F80, .start = 3113, .len = 1 }, + .{ .cp = 0x2F81, .start = 3114, .len = 1 }, + .{ .cp = 0x2F82, .start = 3115, .len = 1 }, + .{ .cp = 0x2F83, .start = 3116, .len = 1 }, + .{ .cp = 0x2F84, .start = 3117, .len = 1 }, + .{ .cp = 0x2F85, .start = 3118, .len = 1 }, + .{ .cp = 0x2F86, .start = 3119, .len = 1 }, + .{ .cp = 0x2F87, .start = 3120, .len = 1 }, + .{ .cp = 0x2F88, .start = 3121, .len = 1 }, + .{ .cp = 0x2F89, .start = 3122, .len = 1 }, + .{ .cp = 0x2F8A, .start = 3123, .len = 1 }, + .{ .cp = 0x2F8B, .start = 3124, .len = 1 }, + .{ .cp = 0x2F8C, .start = 3125, .len = 1 }, + .{ .cp = 0x2F8D, .start = 3126, .len = 1 }, + .{ .cp = 0x2F8E, .start = 3127, .len = 1 }, + .{ .cp = 0x2F8F, .start = 3128, .len = 1 }, + .{ .cp = 0x2F90, .start = 3129, .len = 1 }, + .{ .cp = 0x2F91, .start = 3130, .len = 1 }, + .{ .cp = 0x2F92, .start = 3131, .len = 1 }, + .{ .cp = 0x2F93, .start = 3132, .len = 1 }, + .{ .cp = 0x2F94, .start = 3133, .len = 1 }, + .{ .cp = 0x2F95, .start = 3134, .len = 1 }, + .{ .cp = 0x2F96, .start = 3135, .len = 1 }, + .{ .cp = 0x2F97, .start = 3136, .len = 1 }, + .{ .cp = 0x2F98, .start = 3137, .len = 1 }, + .{ .cp = 0x2F99, .start = 3138, .len = 1 }, + .{ .cp = 0x2F9A, .start = 3139, .len = 1 }, + .{ .cp = 0x2F9B, .start = 3140, .len = 1 }, + .{ .cp = 0x2F9C, .start = 3141, .len = 1 }, + .{ .cp = 0x2F9D, .start = 3142, .len = 1 }, + .{ .cp = 0x2F9E, .start = 3143, .len = 1 }, + .{ .cp = 0x2F9F, .start = 3144, .len = 1 }, + .{ .cp = 0x2FA0, .start = 3145, .len = 1 }, + .{ .cp = 0x2FA1, .start = 3146, .len = 1 }, + .{ .cp = 0x2FA2, .start = 3147, .len = 1 }, + .{ .cp = 0x2FA3, .start = 3148, .len = 1 }, + .{ .cp = 0x2FA4, .start = 3149, .len = 1 }, + .{ .cp = 0x2FA5, .start = 3150, .len = 1 }, + .{ .cp = 0x2FA6, .start = 3151, .len = 1 }, + .{ .cp = 0x2FA7, .start = 3152, .len = 1 }, + .{ .cp = 0x2FA8, .start = 3153, .len = 1 }, + .{ .cp = 0x2FA9, .start = 3154, .len = 1 }, + .{ .cp = 0x2FAA, .start = 3155, .len = 1 }, + .{ .cp = 0x2FAB, .start = 3156, .len = 1 }, + .{ .cp = 0x2FAC, .start = 3157, .len = 1 }, + .{ .cp = 0x2FAD, .start = 3158, .len = 1 }, + .{ .cp = 0x2FAE, .start = 3159, .len = 1 }, + .{ .cp = 0x2FAF, .start = 3160, .len = 1 }, + .{ .cp = 0x2FB0, .start = 3161, .len = 1 }, + .{ .cp = 0x2FB1, .start = 3162, .len = 1 }, + .{ .cp = 0x2FB2, .start = 3163, .len = 1 }, + .{ .cp = 0x2FB3, .start = 3164, .len = 1 }, + .{ .cp = 0x2FB4, .start = 3165, .len = 1 }, + .{ .cp = 0x2FB5, .start = 3166, .len = 1 }, + .{ .cp = 0x2FB6, .start = 3167, .len = 1 }, + .{ .cp = 0x2FB7, .start = 3168, .len = 1 }, + .{ .cp = 0x2FB8, .start = 3169, .len = 1 }, + .{ .cp = 0x2FB9, .start = 3170, .len = 1 }, + .{ .cp = 0x2FBA, .start = 3171, .len = 1 }, + .{ .cp = 0x2FBB, .start = 3172, .len = 1 }, + .{ .cp = 0x2FBC, .start = 3173, .len = 1 }, + .{ .cp = 0x2FBD, .start = 3174, .len = 1 }, + .{ .cp = 0x2FBE, .start = 3175, .len = 1 }, + .{ .cp = 0x2FBF, .start = 3176, .len = 1 }, + .{ .cp = 0x2FC0, .start = 3177, .len = 1 }, + .{ .cp = 0x2FC1, .start = 3178, .len = 1 }, + .{ .cp = 0x2FC2, .start = 3179, .len = 1 }, + .{ .cp = 0x2FC3, .start = 3180, .len = 1 }, + .{ .cp = 0x2FC4, .start = 3181, .len = 1 }, + .{ .cp = 0x2FC5, .start = 3182, .len = 1 }, + .{ .cp = 0x2FC6, .start = 3183, .len = 1 }, + .{ .cp = 0x2FC7, .start = 3184, .len = 1 }, + .{ .cp = 0x2FC8, .start = 3185, .len = 1 }, + .{ .cp = 0x2FC9, .start = 3186, .len = 1 }, + .{ .cp = 0x2FCA, .start = 3187, .len = 1 }, + .{ .cp = 0x2FCB, .start = 3188, .len = 1 }, + .{ .cp = 0x2FCC, .start = 3189, .len = 1 }, + .{ .cp = 0x2FCD, .start = 3190, .len = 1 }, + .{ .cp = 0x2FCE, .start = 3191, .len = 1 }, + .{ .cp = 0x2FCF, .start = 3192, .len = 1 }, + .{ .cp = 0x2FD0, .start = 3193, .len = 1 }, + .{ .cp = 0x2FD1, .start = 3194, .len = 1 }, + .{ .cp = 0x2FD2, .start = 3195, .len = 1 }, + .{ .cp = 0x2FD3, .start = 3196, .len = 1 }, + .{ .cp = 0x2FD4, .start = 3197, .len = 1 }, + .{ .cp = 0x2FD5, .start = 3198, .len = 1 }, + .{ .cp = 0x3000, .start = 3199, .len = 1 }, + .{ .cp = 0x3036, .start = 3200, .len = 1 }, + .{ .cp = 0x3038, .start = 3201, .len = 1 }, + .{ .cp = 0x3039, .start = 3202, .len = 1 }, + .{ .cp = 0x303A, .start = 3203, .len = 1 }, + .{ .cp = 0x304C, .start = 3204, .len = 2 }, + .{ .cp = 0x304E, .start = 3206, .len = 2 }, + .{ .cp = 0x3050, .start = 3208, .len = 2 }, + .{ .cp = 0x3052, .start = 3210, .len = 2 }, + .{ .cp = 0x3054, .start = 3212, .len = 2 }, + .{ .cp = 0x3056, .start = 3214, .len = 2 }, + .{ .cp = 0x3058, .start = 3216, .len = 2 }, + .{ .cp = 0x305A, .start = 3218, .len = 2 }, + .{ .cp = 0x305C, .start = 3220, .len = 2 }, + .{ .cp = 0x305E, .start = 3222, .len = 2 }, + .{ .cp = 0x3060, .start = 3224, .len = 2 }, + .{ .cp = 0x3062, .start = 3226, .len = 2 }, + .{ .cp = 0x3065, .start = 3228, .len = 2 }, + .{ .cp = 0x3067, .start = 3230, .len = 2 }, + .{ .cp = 0x3069, .start = 3232, .len = 2 }, + .{ .cp = 0x3070, .start = 3234, .len = 2 }, + .{ .cp = 0x3071, .start = 3236, .len = 2 }, + .{ .cp = 0x3073, .start = 3238, .len = 2 }, + .{ .cp = 0x3074, .start = 3240, .len = 2 }, + .{ .cp = 0x3076, .start = 3242, .len = 2 }, + .{ .cp = 0x3077, .start = 3244, .len = 2 }, + .{ .cp = 0x3079, .start = 3246, .len = 2 }, + .{ .cp = 0x307A, .start = 3248, .len = 2 }, + .{ .cp = 0x307C, .start = 3250, .len = 2 }, + .{ .cp = 0x307D, .start = 3252, .len = 2 }, + .{ .cp = 0x3094, .start = 3254, .len = 2 }, + .{ .cp = 0x309B, .start = 3256, .len = 2 }, + .{ .cp = 0x309C, .start = 3258, .len = 2 }, + .{ .cp = 0x309E, .start = 3260, .len = 2 }, + .{ .cp = 0x309F, .start = 3262, .len = 2 }, + .{ .cp = 0x30AC, .start = 3264, .len = 2 }, + .{ .cp = 0x30AE, .start = 3266, .len = 2 }, + .{ .cp = 0x30B0, .start = 3268, .len = 2 }, + .{ .cp = 0x30B2, .start = 3270, .len = 2 }, + .{ .cp = 0x30B4, .start = 3272, .len = 2 }, + .{ .cp = 0x30B6, .start = 3274, .len = 2 }, + .{ .cp = 0x30B8, .start = 3276, .len = 2 }, + .{ .cp = 0x30BA, .start = 3278, .len = 2 }, + .{ .cp = 0x30BC, .start = 3280, .len = 2 }, + .{ .cp = 0x30BE, .start = 3282, .len = 2 }, + .{ .cp = 0x30C0, .start = 3284, .len = 2 }, + .{ .cp = 0x30C2, .start = 3286, .len = 2 }, + .{ .cp = 0x30C5, .start = 3288, .len = 2 }, + .{ .cp = 0x30C7, .start = 3290, .len = 2 }, + .{ .cp = 0x30C9, .start = 3292, .len = 2 }, + .{ .cp = 0x30D0, .start = 3294, .len = 2 }, + .{ .cp = 0x30D1, .start = 3296, .len = 2 }, + .{ .cp = 0x30D3, .start = 3298, .len = 2 }, + .{ .cp = 0x30D4, .start = 3300, .len = 2 }, + .{ .cp = 0x30D6, .start = 3302, .len = 2 }, + .{ .cp = 0x30D7, .start = 3304, .len = 2 }, + .{ .cp = 0x30D9, .start = 3306, .len = 2 }, + .{ .cp = 0x30DA, .start = 3308, .len = 2 }, + .{ .cp = 0x30DC, .start = 3310, .len = 2 }, + .{ .cp = 0x30DD, .start = 3312, .len = 2 }, + .{ .cp = 0x30F4, .start = 3314, .len = 2 }, + .{ .cp = 0x30F7, .start = 3316, .len = 2 }, + .{ .cp = 0x30F8, .start = 3318, .len = 2 }, + .{ .cp = 0x30F9, .start = 3320, .len = 2 }, + .{ .cp = 0x30FA, .start = 3322, .len = 2 }, + .{ .cp = 0x30FE, .start = 3324, .len = 2 }, + .{ .cp = 0x30FF, .start = 3326, .len = 2 }, + .{ .cp = 0x3131, .start = 3328, .len = 1 }, + .{ .cp = 0x3132, .start = 3329, .len = 1 }, + .{ .cp = 0x3133, .start = 3330, .len = 1 }, + .{ .cp = 0x3134, .start = 3331, .len = 1 }, + .{ .cp = 0x3135, .start = 3332, .len = 1 }, + .{ .cp = 0x3136, .start = 3333, .len = 1 }, + .{ .cp = 0x3137, .start = 3334, .len = 1 }, + .{ .cp = 0x3138, .start = 3335, .len = 1 }, + .{ .cp = 0x3139, .start = 3336, .len = 1 }, + .{ .cp = 0x313A, .start = 3337, .len = 1 }, + .{ .cp = 0x313B, .start = 3338, .len = 1 }, + .{ .cp = 0x313C, .start = 3339, .len = 1 }, + .{ .cp = 0x313D, .start = 3340, .len = 1 }, + .{ .cp = 0x313E, .start = 3341, .len = 1 }, + .{ .cp = 0x313F, .start = 3342, .len = 1 }, + .{ .cp = 0x3140, .start = 3343, .len = 1 }, + .{ .cp = 0x3141, .start = 3344, .len = 1 }, + .{ .cp = 0x3142, .start = 3345, .len = 1 }, + .{ .cp = 0x3143, .start = 3346, .len = 1 }, + .{ .cp = 0x3144, .start = 3347, .len = 1 }, + .{ .cp = 0x3145, .start = 3348, .len = 1 }, + .{ .cp = 0x3146, .start = 3349, .len = 1 }, + .{ .cp = 0x3147, .start = 3350, .len = 1 }, + .{ .cp = 0x3148, .start = 3351, .len = 1 }, + .{ .cp = 0x3149, .start = 3352, .len = 1 }, + .{ .cp = 0x314A, .start = 3353, .len = 1 }, + .{ .cp = 0x314B, .start = 3354, .len = 1 }, + .{ .cp = 0x314C, .start = 3355, .len = 1 }, + .{ .cp = 0x314D, .start = 3356, .len = 1 }, + .{ .cp = 0x314E, .start = 3357, .len = 1 }, + .{ .cp = 0x314F, .start = 3358, .len = 1 }, + .{ .cp = 0x3150, .start = 3359, .len = 1 }, + .{ .cp = 0x3151, .start = 3360, .len = 1 }, + .{ .cp = 0x3152, .start = 3361, .len = 1 }, + .{ .cp = 0x3153, .start = 3362, .len = 1 }, + .{ .cp = 0x3154, .start = 3363, .len = 1 }, + .{ .cp = 0x3155, .start = 3364, .len = 1 }, + .{ .cp = 0x3156, .start = 3365, .len = 1 }, + .{ .cp = 0x3157, .start = 3366, .len = 1 }, + .{ .cp = 0x3158, .start = 3367, .len = 1 }, + .{ .cp = 0x3159, .start = 3368, .len = 1 }, + .{ .cp = 0x315A, .start = 3369, .len = 1 }, + .{ .cp = 0x315B, .start = 3370, .len = 1 }, + .{ .cp = 0x315C, .start = 3371, .len = 1 }, + .{ .cp = 0x315D, .start = 3372, .len = 1 }, + .{ .cp = 0x315E, .start = 3373, .len = 1 }, + .{ .cp = 0x315F, .start = 3374, .len = 1 }, + .{ .cp = 0x3160, .start = 3375, .len = 1 }, + .{ .cp = 0x3161, .start = 3376, .len = 1 }, + .{ .cp = 0x3162, .start = 3377, .len = 1 }, + .{ .cp = 0x3163, .start = 3378, .len = 1 }, + .{ .cp = 0x3164, .start = 3379, .len = 1 }, + .{ .cp = 0x3165, .start = 3380, .len = 1 }, + .{ .cp = 0x3166, .start = 3381, .len = 1 }, + .{ .cp = 0x3167, .start = 3382, .len = 1 }, + .{ .cp = 0x3168, .start = 3383, .len = 1 }, + .{ .cp = 0x3169, .start = 3384, .len = 1 }, + .{ .cp = 0x316A, .start = 3385, .len = 1 }, + .{ .cp = 0x316B, .start = 3386, .len = 1 }, + .{ .cp = 0x316C, .start = 3387, .len = 1 }, + .{ .cp = 0x316D, .start = 3388, .len = 1 }, + .{ .cp = 0x316E, .start = 3389, .len = 1 }, + .{ .cp = 0x316F, .start = 3390, .len = 1 }, + .{ .cp = 0x3170, .start = 3391, .len = 1 }, + .{ .cp = 0x3171, .start = 3392, .len = 1 }, + .{ .cp = 0x3172, .start = 3393, .len = 1 }, + .{ .cp = 0x3173, .start = 3394, .len = 1 }, + .{ .cp = 0x3174, .start = 3395, .len = 1 }, + .{ .cp = 0x3175, .start = 3396, .len = 1 }, + .{ .cp = 0x3176, .start = 3397, .len = 1 }, + .{ .cp = 0x3177, .start = 3398, .len = 1 }, + .{ .cp = 0x3178, .start = 3399, .len = 1 }, + .{ .cp = 0x3179, .start = 3400, .len = 1 }, + .{ .cp = 0x317A, .start = 3401, .len = 1 }, + .{ .cp = 0x317B, .start = 3402, .len = 1 }, + .{ .cp = 0x317C, .start = 3403, .len = 1 }, + .{ .cp = 0x317D, .start = 3404, .len = 1 }, + .{ .cp = 0x317E, .start = 3405, .len = 1 }, + .{ .cp = 0x317F, .start = 3406, .len = 1 }, + .{ .cp = 0x3180, .start = 3407, .len = 1 }, + .{ .cp = 0x3181, .start = 3408, .len = 1 }, + .{ .cp = 0x3182, .start = 3409, .len = 1 }, + .{ .cp = 0x3183, .start = 3410, .len = 1 }, + .{ .cp = 0x3184, .start = 3411, .len = 1 }, + .{ .cp = 0x3185, .start = 3412, .len = 1 }, + .{ .cp = 0x3186, .start = 3413, .len = 1 }, + .{ .cp = 0x3187, .start = 3414, .len = 1 }, + .{ .cp = 0x3188, .start = 3415, .len = 1 }, + .{ .cp = 0x3189, .start = 3416, .len = 1 }, + .{ .cp = 0x318A, .start = 3417, .len = 1 }, + .{ .cp = 0x318B, .start = 3418, .len = 1 }, + .{ .cp = 0x318C, .start = 3419, .len = 1 }, + .{ .cp = 0x318D, .start = 3420, .len = 1 }, + .{ .cp = 0x318E, .start = 3421, .len = 1 }, + .{ .cp = 0x3192, .start = 3422, .len = 1 }, + .{ .cp = 0x3193, .start = 3423, .len = 1 }, + .{ .cp = 0x3194, .start = 3424, .len = 1 }, + .{ .cp = 0x3195, .start = 3425, .len = 1 }, + .{ .cp = 0x3196, .start = 3426, .len = 1 }, + .{ .cp = 0x3197, .start = 3427, .len = 1 }, + .{ .cp = 0x3198, .start = 3428, .len = 1 }, + .{ .cp = 0x3199, .start = 3429, .len = 1 }, + .{ .cp = 0x319A, .start = 3430, .len = 1 }, + .{ .cp = 0x319B, .start = 3431, .len = 1 }, + .{ .cp = 0x319C, .start = 3432, .len = 1 }, + .{ .cp = 0x319D, .start = 3433, .len = 1 }, + .{ .cp = 0x319E, .start = 3434, .len = 1 }, + .{ .cp = 0x319F, .start = 3435, .len = 1 }, + .{ .cp = 0x3200, .start = 3436, .len = 3 }, + .{ .cp = 0x3201, .start = 3439, .len = 3 }, + .{ .cp = 0x3202, .start = 3442, .len = 3 }, + .{ .cp = 0x3203, .start = 3445, .len = 3 }, + .{ .cp = 0x3204, .start = 3448, .len = 3 }, + .{ .cp = 0x3205, .start = 3451, .len = 3 }, + .{ .cp = 0x3206, .start = 3454, .len = 3 }, + .{ .cp = 0x3207, .start = 3457, .len = 3 }, + .{ .cp = 0x3208, .start = 3460, .len = 3 }, + .{ .cp = 0x3209, .start = 3463, .len = 3 }, + .{ .cp = 0x320A, .start = 3466, .len = 3 }, + .{ .cp = 0x320B, .start = 3469, .len = 3 }, + .{ .cp = 0x320C, .start = 3472, .len = 3 }, + .{ .cp = 0x320D, .start = 3475, .len = 3 }, + .{ .cp = 0x320E, .start = 3478, .len = 4 }, + .{ .cp = 0x320F, .start = 3482, .len = 4 }, + .{ .cp = 0x3210, .start = 3486, .len = 4 }, + .{ .cp = 0x3211, .start = 3490, .len = 4 }, + .{ .cp = 0x3212, .start = 3494, .len = 4 }, + .{ .cp = 0x3213, .start = 3498, .len = 4 }, + .{ .cp = 0x3214, .start = 3502, .len = 4 }, + .{ .cp = 0x3215, .start = 3506, .len = 4 }, + .{ .cp = 0x3216, .start = 3510, .len = 4 }, + .{ .cp = 0x3217, .start = 3514, .len = 4 }, + .{ .cp = 0x3218, .start = 3518, .len = 4 }, + .{ .cp = 0x3219, .start = 3522, .len = 4 }, + .{ .cp = 0x321A, .start = 3526, .len = 4 }, + .{ .cp = 0x321B, .start = 3530, .len = 4 }, + .{ .cp = 0x321C, .start = 3534, .len = 4 }, + .{ .cp = 0x321D, .start = 3538, .len = 7 }, + .{ .cp = 0x321E, .start = 3545, .len = 6 }, + .{ .cp = 0x3220, .start = 3551, .len = 3 }, + .{ .cp = 0x3221, .start = 3554, .len = 3 }, + .{ .cp = 0x3222, .start = 3557, .len = 3 }, + .{ .cp = 0x3223, .start = 3560, .len = 3 }, + .{ .cp = 0x3224, .start = 3563, .len = 3 }, + .{ .cp = 0x3225, .start = 3566, .len = 3 }, + .{ .cp = 0x3226, .start = 3569, .len = 3 }, + .{ .cp = 0x3227, .start = 3572, .len = 3 }, + .{ .cp = 0x3228, .start = 3575, .len = 3 }, + .{ .cp = 0x3229, .start = 3578, .len = 3 }, + .{ .cp = 0x322A, .start = 3581, .len = 3 }, + .{ .cp = 0x322B, .start = 3584, .len = 3 }, + .{ .cp = 0x322C, .start = 3587, .len = 3 }, + .{ .cp = 0x322D, .start = 3590, .len = 3 }, + .{ .cp = 0x322E, .start = 3593, .len = 3 }, + .{ .cp = 0x322F, .start = 3596, .len = 3 }, + .{ .cp = 0x3230, .start = 3599, .len = 3 }, + .{ .cp = 0x3231, .start = 3602, .len = 3 }, + .{ .cp = 0x3232, .start = 3605, .len = 3 }, + .{ .cp = 0x3233, .start = 3608, .len = 3 }, + .{ .cp = 0x3234, .start = 3611, .len = 3 }, + .{ .cp = 0x3235, .start = 3614, .len = 3 }, + .{ .cp = 0x3236, .start = 3617, .len = 3 }, + .{ .cp = 0x3237, .start = 3620, .len = 3 }, + .{ .cp = 0x3238, .start = 3623, .len = 3 }, + .{ .cp = 0x3239, .start = 3626, .len = 3 }, + .{ .cp = 0x323A, .start = 3629, .len = 3 }, + .{ .cp = 0x323B, .start = 3632, .len = 3 }, + .{ .cp = 0x323C, .start = 3635, .len = 3 }, + .{ .cp = 0x323D, .start = 3638, .len = 3 }, + .{ .cp = 0x323E, .start = 3641, .len = 3 }, + .{ .cp = 0x323F, .start = 3644, .len = 3 }, + .{ .cp = 0x3240, .start = 3647, .len = 3 }, + .{ .cp = 0x3241, .start = 3650, .len = 3 }, + .{ .cp = 0x3242, .start = 3653, .len = 3 }, + .{ .cp = 0x3243, .start = 3656, .len = 3 }, + .{ .cp = 0x3244, .start = 3659, .len = 1 }, + .{ .cp = 0x3245, .start = 3660, .len = 1 }, + .{ .cp = 0x3246, .start = 3661, .len = 1 }, + .{ .cp = 0x3247, .start = 3662, .len = 1 }, + .{ .cp = 0x3250, .start = 3663, .len = 3 }, + .{ .cp = 0x3251, .start = 3666, .len = 2 }, + .{ .cp = 0x3252, .start = 3668, .len = 2 }, + .{ .cp = 0x3253, .start = 3670, .len = 2 }, + .{ .cp = 0x3254, .start = 3672, .len = 2 }, + .{ .cp = 0x3255, .start = 3674, .len = 2 }, + .{ .cp = 0x3256, .start = 3676, .len = 2 }, + .{ .cp = 0x3257, .start = 3678, .len = 2 }, + .{ .cp = 0x3258, .start = 3680, .len = 2 }, + .{ .cp = 0x3259, .start = 3682, .len = 2 }, + .{ .cp = 0x325A, .start = 3684, .len = 2 }, + .{ .cp = 0x325B, .start = 3686, .len = 2 }, + .{ .cp = 0x325C, .start = 3688, .len = 2 }, + .{ .cp = 0x325D, .start = 3690, .len = 2 }, + .{ .cp = 0x325E, .start = 3692, .len = 2 }, + .{ .cp = 0x325F, .start = 3694, .len = 2 }, + .{ .cp = 0x3260, .start = 3696, .len = 1 }, + .{ .cp = 0x3261, .start = 3697, .len = 1 }, + .{ .cp = 0x3262, .start = 3698, .len = 1 }, + .{ .cp = 0x3263, .start = 3699, .len = 1 }, + .{ .cp = 0x3264, .start = 3700, .len = 1 }, + .{ .cp = 0x3265, .start = 3701, .len = 1 }, + .{ .cp = 0x3266, .start = 3702, .len = 1 }, + .{ .cp = 0x3267, .start = 3703, .len = 1 }, + .{ .cp = 0x3268, .start = 3704, .len = 1 }, + .{ .cp = 0x3269, .start = 3705, .len = 1 }, + .{ .cp = 0x326A, .start = 3706, .len = 1 }, + .{ .cp = 0x326B, .start = 3707, .len = 1 }, + .{ .cp = 0x326C, .start = 3708, .len = 1 }, + .{ .cp = 0x326D, .start = 3709, .len = 1 }, + .{ .cp = 0x326E, .start = 3710, .len = 2 }, + .{ .cp = 0x326F, .start = 3712, .len = 2 }, + .{ .cp = 0x3270, .start = 3714, .len = 2 }, + .{ .cp = 0x3271, .start = 3716, .len = 2 }, + .{ .cp = 0x3272, .start = 3718, .len = 2 }, + .{ .cp = 0x3273, .start = 3720, .len = 2 }, + .{ .cp = 0x3274, .start = 3722, .len = 2 }, + .{ .cp = 0x3275, .start = 3724, .len = 2 }, + .{ .cp = 0x3276, .start = 3726, .len = 2 }, + .{ .cp = 0x3277, .start = 3728, .len = 2 }, + .{ .cp = 0x3278, .start = 3730, .len = 2 }, + .{ .cp = 0x3279, .start = 3732, .len = 2 }, + .{ .cp = 0x327A, .start = 3734, .len = 2 }, + .{ .cp = 0x327B, .start = 3736, .len = 2 }, + .{ .cp = 0x327C, .start = 3738, .len = 5 }, + .{ .cp = 0x327D, .start = 3743, .len = 4 }, + .{ .cp = 0x327E, .start = 3747, .len = 2 }, + .{ .cp = 0x3280, .start = 3749, .len = 1 }, + .{ .cp = 0x3281, .start = 3750, .len = 1 }, + .{ .cp = 0x3282, .start = 3751, .len = 1 }, + .{ .cp = 0x3283, .start = 3752, .len = 1 }, + .{ .cp = 0x3284, .start = 3753, .len = 1 }, + .{ .cp = 0x3285, .start = 3754, .len = 1 }, + .{ .cp = 0x3286, .start = 3755, .len = 1 }, + .{ .cp = 0x3287, .start = 3756, .len = 1 }, + .{ .cp = 0x3288, .start = 3757, .len = 1 }, + .{ .cp = 0x3289, .start = 3758, .len = 1 }, + .{ .cp = 0x328A, .start = 3759, .len = 1 }, + .{ .cp = 0x328B, .start = 3760, .len = 1 }, + .{ .cp = 0x328C, .start = 3761, .len = 1 }, + .{ .cp = 0x328D, .start = 3762, .len = 1 }, + .{ .cp = 0x328E, .start = 3763, .len = 1 }, + .{ .cp = 0x328F, .start = 3764, .len = 1 }, + .{ .cp = 0x3290, .start = 3765, .len = 1 }, + .{ .cp = 0x3291, .start = 3766, .len = 1 }, + .{ .cp = 0x3292, .start = 3767, .len = 1 }, + .{ .cp = 0x3293, .start = 3768, .len = 1 }, + .{ .cp = 0x3294, .start = 3769, .len = 1 }, + .{ .cp = 0x3295, .start = 3770, .len = 1 }, + .{ .cp = 0x3296, .start = 3771, .len = 1 }, + .{ .cp = 0x3297, .start = 3772, .len = 1 }, + .{ .cp = 0x3298, .start = 3773, .len = 1 }, + .{ .cp = 0x3299, .start = 3774, .len = 1 }, + .{ .cp = 0x329A, .start = 3775, .len = 1 }, + .{ .cp = 0x329B, .start = 3776, .len = 1 }, + .{ .cp = 0x329C, .start = 3777, .len = 1 }, + .{ .cp = 0x329D, .start = 3778, .len = 1 }, + .{ .cp = 0x329E, .start = 3779, .len = 1 }, + .{ .cp = 0x329F, .start = 3780, .len = 1 }, + .{ .cp = 0x32A0, .start = 3781, .len = 1 }, + .{ .cp = 0x32A1, .start = 3782, .len = 1 }, + .{ .cp = 0x32A2, .start = 3783, .len = 1 }, + .{ .cp = 0x32A3, .start = 3784, .len = 1 }, + .{ .cp = 0x32A4, .start = 3785, .len = 1 }, + .{ .cp = 0x32A5, .start = 3786, .len = 1 }, + .{ .cp = 0x32A6, .start = 3787, .len = 1 }, + .{ .cp = 0x32A7, .start = 3788, .len = 1 }, + .{ .cp = 0x32A8, .start = 3789, .len = 1 }, + .{ .cp = 0x32A9, .start = 3790, .len = 1 }, + .{ .cp = 0x32AA, .start = 3791, .len = 1 }, + .{ .cp = 0x32AB, .start = 3792, .len = 1 }, + .{ .cp = 0x32AC, .start = 3793, .len = 1 }, + .{ .cp = 0x32AD, .start = 3794, .len = 1 }, + .{ .cp = 0x32AE, .start = 3795, .len = 1 }, + .{ .cp = 0x32AF, .start = 3796, .len = 1 }, + .{ .cp = 0x32B0, .start = 3797, .len = 1 }, + .{ .cp = 0x32B1, .start = 3798, .len = 2 }, + .{ .cp = 0x32B2, .start = 3800, .len = 2 }, + .{ .cp = 0x32B3, .start = 3802, .len = 2 }, + .{ .cp = 0x32B4, .start = 3804, .len = 2 }, + .{ .cp = 0x32B5, .start = 3806, .len = 2 }, + .{ .cp = 0x32B6, .start = 3808, .len = 2 }, + .{ .cp = 0x32B7, .start = 3810, .len = 2 }, + .{ .cp = 0x32B8, .start = 3812, .len = 2 }, + .{ .cp = 0x32B9, .start = 3814, .len = 2 }, + .{ .cp = 0x32BA, .start = 3816, .len = 2 }, + .{ .cp = 0x32BB, .start = 3818, .len = 2 }, + .{ .cp = 0x32BC, .start = 3820, .len = 2 }, + .{ .cp = 0x32BD, .start = 3822, .len = 2 }, + .{ .cp = 0x32BE, .start = 3824, .len = 2 }, + .{ .cp = 0x32BF, .start = 3826, .len = 2 }, + .{ .cp = 0x32C0, .start = 3828, .len = 2 }, + .{ .cp = 0x32C1, .start = 3830, .len = 2 }, + .{ .cp = 0x32C2, .start = 3832, .len = 2 }, + .{ .cp = 0x32C3, .start = 3834, .len = 2 }, + .{ .cp = 0x32C4, .start = 3836, .len = 2 }, + .{ .cp = 0x32C5, .start = 3838, .len = 2 }, + .{ .cp = 0x32C6, .start = 3840, .len = 2 }, + .{ .cp = 0x32C7, .start = 3842, .len = 2 }, + .{ .cp = 0x32C8, .start = 3844, .len = 2 }, + .{ .cp = 0x32C9, .start = 3846, .len = 3 }, + .{ .cp = 0x32CA, .start = 3849, .len = 3 }, + .{ .cp = 0x32CB, .start = 3852, .len = 3 }, + .{ .cp = 0x32CC, .start = 3855, .len = 2 }, + .{ .cp = 0x32CD, .start = 3857, .len = 3 }, + .{ .cp = 0x32CE, .start = 3860, .len = 2 }, + .{ .cp = 0x32CF, .start = 3862, .len = 3 }, + .{ .cp = 0x32D0, .start = 3865, .len = 1 }, + .{ .cp = 0x32D1, .start = 3866, .len = 1 }, + .{ .cp = 0x32D2, .start = 3867, .len = 1 }, + .{ .cp = 0x32D3, .start = 3868, .len = 1 }, + .{ .cp = 0x32D4, .start = 3869, .len = 1 }, + .{ .cp = 0x32D5, .start = 3870, .len = 1 }, + .{ .cp = 0x32D6, .start = 3871, .len = 1 }, + .{ .cp = 0x32D7, .start = 3872, .len = 1 }, + .{ .cp = 0x32D8, .start = 3873, .len = 1 }, + .{ .cp = 0x32D9, .start = 3874, .len = 1 }, + .{ .cp = 0x32DA, .start = 3875, .len = 1 }, + .{ .cp = 0x32DB, .start = 3876, .len = 1 }, + .{ .cp = 0x32DC, .start = 3877, .len = 1 }, + .{ .cp = 0x32DD, .start = 3878, .len = 1 }, + .{ .cp = 0x32DE, .start = 3879, .len = 1 }, + .{ .cp = 0x32DF, .start = 3880, .len = 1 }, + .{ .cp = 0x32E0, .start = 3881, .len = 1 }, + .{ .cp = 0x32E1, .start = 3882, .len = 1 }, + .{ .cp = 0x32E2, .start = 3883, .len = 1 }, + .{ .cp = 0x32E3, .start = 3884, .len = 1 }, + .{ .cp = 0x32E4, .start = 3885, .len = 1 }, + .{ .cp = 0x32E5, .start = 3886, .len = 1 }, + .{ .cp = 0x32E6, .start = 3887, .len = 1 }, + .{ .cp = 0x32E7, .start = 3888, .len = 1 }, + .{ .cp = 0x32E8, .start = 3889, .len = 1 }, + .{ .cp = 0x32E9, .start = 3890, .len = 1 }, + .{ .cp = 0x32EA, .start = 3891, .len = 1 }, + .{ .cp = 0x32EB, .start = 3892, .len = 1 }, + .{ .cp = 0x32EC, .start = 3893, .len = 1 }, + .{ .cp = 0x32ED, .start = 3894, .len = 1 }, + .{ .cp = 0x32EE, .start = 3895, .len = 1 }, + .{ .cp = 0x32EF, .start = 3896, .len = 1 }, + .{ .cp = 0x32F0, .start = 3897, .len = 1 }, + .{ .cp = 0x32F1, .start = 3898, .len = 1 }, + .{ .cp = 0x32F2, .start = 3899, .len = 1 }, + .{ .cp = 0x32F3, .start = 3900, .len = 1 }, + .{ .cp = 0x32F4, .start = 3901, .len = 1 }, + .{ .cp = 0x32F5, .start = 3902, .len = 1 }, + .{ .cp = 0x32F6, .start = 3903, .len = 1 }, + .{ .cp = 0x32F7, .start = 3904, .len = 1 }, + .{ .cp = 0x32F8, .start = 3905, .len = 1 }, + .{ .cp = 0x32F9, .start = 3906, .len = 1 }, + .{ .cp = 0x32FA, .start = 3907, .len = 1 }, + .{ .cp = 0x32FB, .start = 3908, .len = 1 }, + .{ .cp = 0x32FC, .start = 3909, .len = 1 }, + .{ .cp = 0x32FD, .start = 3910, .len = 1 }, + .{ .cp = 0x32FE, .start = 3911, .len = 1 }, + .{ .cp = 0x32FF, .start = 3912, .len = 2 }, + .{ .cp = 0x3300, .start = 3914, .len = 5 }, + .{ .cp = 0x3301, .start = 3919, .len = 4 }, + .{ .cp = 0x3302, .start = 3923, .len = 5 }, + .{ .cp = 0x3303, .start = 3928, .len = 3 }, + .{ .cp = 0x3304, .start = 3931, .len = 5 }, + .{ .cp = 0x3305, .start = 3936, .len = 3 }, + .{ .cp = 0x3306, .start = 3939, .len = 3 }, + .{ .cp = 0x3307, .start = 3942, .len = 6 }, + .{ .cp = 0x3308, .start = 3948, .len = 4 }, + .{ .cp = 0x3309, .start = 3952, .len = 3 }, + .{ .cp = 0x330A, .start = 3955, .len = 3 }, + .{ .cp = 0x330B, .start = 3958, .len = 3 }, + .{ .cp = 0x330C, .start = 3961, .len = 4 }, + .{ .cp = 0x330D, .start = 3965, .len = 4 }, + .{ .cp = 0x330E, .start = 3969, .len = 4 }, + .{ .cp = 0x330F, .start = 3973, .len = 4 }, + .{ .cp = 0x3310, .start = 3977, .len = 4 }, + .{ .cp = 0x3311, .start = 3981, .len = 4 }, + .{ .cp = 0x3312, .start = 3985, .len = 4 }, + .{ .cp = 0x3313, .start = 3989, .len = 6 }, + .{ .cp = 0x3314, .start = 3995, .len = 2 }, + .{ .cp = 0x3315, .start = 3997, .len = 6 }, + .{ .cp = 0x3316, .start = 4003, .len = 6 }, + .{ .cp = 0x3317, .start = 4009, .len = 5 }, + .{ .cp = 0x3318, .start = 4014, .len = 4 }, + .{ .cp = 0x3319, .start = 4018, .len = 6 }, + .{ .cp = 0x331A, .start = 4024, .len = 6 }, + .{ .cp = 0x331B, .start = 4030, .len = 4 }, + .{ .cp = 0x331C, .start = 4034, .len = 3 }, + .{ .cp = 0x331D, .start = 4037, .len = 3 }, + .{ .cp = 0x331E, .start = 4040, .len = 4 }, + .{ .cp = 0x331F, .start = 4044, .len = 4 }, + .{ .cp = 0x3320, .start = 4048, .len = 5 }, + .{ .cp = 0x3321, .start = 4053, .len = 5 }, + .{ .cp = 0x3322, .start = 4058, .len = 3 }, + .{ .cp = 0x3323, .start = 4061, .len = 3 }, + .{ .cp = 0x3324, .start = 4064, .len = 4 }, + .{ .cp = 0x3325, .start = 4068, .len = 3 }, + .{ .cp = 0x3326, .start = 4071, .len = 3 }, + .{ .cp = 0x3327, .start = 4074, .len = 2 }, + .{ .cp = 0x3328, .start = 4076, .len = 2 }, + .{ .cp = 0x3329, .start = 4078, .len = 3 }, + .{ .cp = 0x332A, .start = 4081, .len = 3 }, + .{ .cp = 0x332B, .start = 4084, .len = 6 }, + .{ .cp = 0x332C, .start = 4090, .len = 4 }, + .{ .cp = 0x332D, .start = 4094, .len = 5 }, + .{ .cp = 0x332E, .start = 4099, .len = 6 }, + .{ .cp = 0x332F, .start = 4105, .len = 4 }, + .{ .cp = 0x3330, .start = 4109, .len = 3 }, + .{ .cp = 0x3331, .start = 4112, .len = 3 }, + .{ .cp = 0x3332, .start = 4115, .len = 6 }, + .{ .cp = 0x3333, .start = 4121, .len = 4 }, + .{ .cp = 0x3334, .start = 4125, .len = 6 }, + .{ .cp = 0x3335, .start = 4131, .len = 3 }, + .{ .cp = 0x3336, .start = 4134, .len = 5 }, + .{ .cp = 0x3337, .start = 4139, .len = 3 }, + .{ .cp = 0x3338, .start = 4142, .len = 4 }, + .{ .cp = 0x3339, .start = 4146, .len = 3 }, + .{ .cp = 0x333A, .start = 4149, .len = 4 }, + .{ .cp = 0x333B, .start = 4153, .len = 5 }, + .{ .cp = 0x333C, .start = 4158, .len = 4 }, + .{ .cp = 0x333D, .start = 4162, .len = 5 }, + .{ .cp = 0x333E, .start = 4167, .len = 4 }, + .{ .cp = 0x333F, .start = 4171, .len = 2 }, + .{ .cp = 0x3340, .start = 4173, .len = 5 }, + .{ .cp = 0x3341, .start = 4178, .len = 3 }, + .{ .cp = 0x3342, .start = 4181, .len = 3 }, + .{ .cp = 0x3343, .start = 4184, .len = 4 }, + .{ .cp = 0x3344, .start = 4188, .len = 3 }, + .{ .cp = 0x3345, .start = 4191, .len = 3 }, + .{ .cp = 0x3346, .start = 4194, .len = 3 }, + .{ .cp = 0x3347, .start = 4197, .len = 5 }, + .{ .cp = 0x3348, .start = 4202, .len = 4 }, + .{ .cp = 0x3349, .start = 4206, .len = 2 }, + .{ .cp = 0x334A, .start = 4208, .len = 6 }, + .{ .cp = 0x334B, .start = 4214, .len = 3 }, + .{ .cp = 0x334C, .start = 4217, .len = 5 }, + .{ .cp = 0x334D, .start = 4222, .len = 4 }, + .{ .cp = 0x334E, .start = 4226, .len = 4 }, + .{ .cp = 0x334F, .start = 4230, .len = 3 }, + .{ .cp = 0x3350, .start = 4233, .len = 3 }, + .{ .cp = 0x3351, .start = 4236, .len = 4 }, + .{ .cp = 0x3352, .start = 4240, .len = 2 }, + .{ .cp = 0x3353, .start = 4242, .len = 4 }, + .{ .cp = 0x3354, .start = 4246, .len = 5 }, + .{ .cp = 0x3355, .start = 4251, .len = 2 }, + .{ .cp = 0x3356, .start = 4253, .len = 6 }, + .{ .cp = 0x3357, .start = 4259, .len = 3 }, + .{ .cp = 0x3358, .start = 4262, .len = 2 }, + .{ .cp = 0x3359, .start = 4264, .len = 2 }, + .{ .cp = 0x335A, .start = 4266, .len = 2 }, + .{ .cp = 0x335B, .start = 4268, .len = 2 }, + .{ .cp = 0x335C, .start = 4270, .len = 2 }, + .{ .cp = 0x335D, .start = 4272, .len = 2 }, + .{ .cp = 0x335E, .start = 4274, .len = 2 }, + .{ .cp = 0x335F, .start = 4276, .len = 2 }, + .{ .cp = 0x3360, .start = 4278, .len = 2 }, + .{ .cp = 0x3361, .start = 4280, .len = 2 }, + .{ .cp = 0x3362, .start = 4282, .len = 3 }, + .{ .cp = 0x3363, .start = 4285, .len = 3 }, + .{ .cp = 0x3364, .start = 4288, .len = 3 }, + .{ .cp = 0x3365, .start = 4291, .len = 3 }, + .{ .cp = 0x3366, .start = 4294, .len = 3 }, + .{ .cp = 0x3367, .start = 4297, .len = 3 }, + .{ .cp = 0x3368, .start = 4300, .len = 3 }, + .{ .cp = 0x3369, .start = 4303, .len = 3 }, + .{ .cp = 0x336A, .start = 4306, .len = 3 }, + .{ .cp = 0x336B, .start = 4309, .len = 3 }, + .{ .cp = 0x336C, .start = 4312, .len = 3 }, + .{ .cp = 0x336D, .start = 4315, .len = 3 }, + .{ .cp = 0x336E, .start = 4318, .len = 3 }, + .{ .cp = 0x336F, .start = 4321, .len = 3 }, + .{ .cp = 0x3370, .start = 4324, .len = 3 }, + .{ .cp = 0x3371, .start = 4327, .len = 3 }, + .{ .cp = 0x3372, .start = 4330, .len = 2 }, + .{ .cp = 0x3373, .start = 4332, .len = 2 }, + .{ .cp = 0x3374, .start = 4334, .len = 3 }, + .{ .cp = 0x3375, .start = 4337, .len = 2 }, + .{ .cp = 0x3376, .start = 4339, .len = 2 }, + .{ .cp = 0x3377, .start = 4341, .len = 2 }, + .{ .cp = 0x3378, .start = 4343, .len = 3 }, + .{ .cp = 0x3379, .start = 4346, .len = 3 }, + .{ .cp = 0x337A, .start = 4349, .len = 2 }, + .{ .cp = 0x337B, .start = 4351, .len = 2 }, + .{ .cp = 0x337C, .start = 4353, .len = 2 }, + .{ .cp = 0x337D, .start = 4355, .len = 2 }, + .{ .cp = 0x337E, .start = 4357, .len = 2 }, + .{ .cp = 0x337F, .start = 4359, .len = 4 }, + .{ .cp = 0x3380, .start = 4363, .len = 2 }, + .{ .cp = 0x3381, .start = 4365, .len = 2 }, + .{ .cp = 0x3382, .start = 4367, .len = 2 }, + .{ .cp = 0x3383, .start = 4369, .len = 2 }, + .{ .cp = 0x3384, .start = 4371, .len = 2 }, + .{ .cp = 0x3385, .start = 4373, .len = 2 }, + .{ .cp = 0x3386, .start = 4375, .len = 2 }, + .{ .cp = 0x3387, .start = 4377, .len = 2 }, + .{ .cp = 0x3388, .start = 4379, .len = 3 }, + .{ .cp = 0x3389, .start = 4382, .len = 4 }, + .{ .cp = 0x338A, .start = 4386, .len = 2 }, + .{ .cp = 0x338B, .start = 4388, .len = 2 }, + .{ .cp = 0x338C, .start = 4390, .len = 2 }, + .{ .cp = 0x338D, .start = 4392, .len = 2 }, + .{ .cp = 0x338E, .start = 4394, .len = 2 }, + .{ .cp = 0x338F, .start = 4396, .len = 2 }, + .{ .cp = 0x3390, .start = 4398, .len = 2 }, + .{ .cp = 0x3391, .start = 4400, .len = 3 }, + .{ .cp = 0x3392, .start = 4403, .len = 3 }, + .{ .cp = 0x3393, .start = 4406, .len = 3 }, + .{ .cp = 0x3394, .start = 4409, .len = 3 }, + .{ .cp = 0x3395, .start = 4412, .len = 2 }, + .{ .cp = 0x3396, .start = 4414, .len = 2 }, + .{ .cp = 0x3397, .start = 4416, .len = 2 }, + .{ .cp = 0x3398, .start = 4418, .len = 2 }, + .{ .cp = 0x3399, .start = 4420, .len = 2 }, + .{ .cp = 0x339A, .start = 4422, .len = 2 }, + .{ .cp = 0x339B, .start = 4424, .len = 2 }, + .{ .cp = 0x339C, .start = 4426, .len = 2 }, + .{ .cp = 0x339D, .start = 4428, .len = 2 }, + .{ .cp = 0x339E, .start = 4430, .len = 2 }, + .{ .cp = 0x339F, .start = 4432, .len = 3 }, + .{ .cp = 0x33A0, .start = 4435, .len = 3 }, + .{ .cp = 0x33A1, .start = 4438, .len = 2 }, + .{ .cp = 0x33A2, .start = 4440, .len = 3 }, + .{ .cp = 0x33A3, .start = 4443, .len = 3 }, + .{ .cp = 0x33A4, .start = 4446, .len = 3 }, + .{ .cp = 0x33A5, .start = 4449, .len = 2 }, + .{ .cp = 0x33A6, .start = 4451, .len = 3 }, + .{ .cp = 0x33A7, .start = 4454, .len = 3 }, + .{ .cp = 0x33A8, .start = 4457, .len = 4 }, + .{ .cp = 0x33A9, .start = 4461, .len = 2 }, + .{ .cp = 0x33AA, .start = 4463, .len = 3 }, + .{ .cp = 0x33AB, .start = 4466, .len = 3 }, + .{ .cp = 0x33AC, .start = 4469, .len = 3 }, + .{ .cp = 0x33AD, .start = 4472, .len = 3 }, + .{ .cp = 0x33AE, .start = 4475, .len = 5 }, + .{ .cp = 0x33AF, .start = 4480, .len = 6 }, + .{ .cp = 0x33B0, .start = 4486, .len = 2 }, + .{ .cp = 0x33B1, .start = 4488, .len = 2 }, + .{ .cp = 0x33B2, .start = 4490, .len = 2 }, + .{ .cp = 0x33B3, .start = 4492, .len = 2 }, + .{ .cp = 0x33B4, .start = 4494, .len = 2 }, + .{ .cp = 0x33B5, .start = 4496, .len = 2 }, + .{ .cp = 0x33B6, .start = 4498, .len = 2 }, + .{ .cp = 0x33B7, .start = 4500, .len = 2 }, + .{ .cp = 0x33B8, .start = 4502, .len = 2 }, + .{ .cp = 0x33B9, .start = 4504, .len = 2 }, + .{ .cp = 0x33BA, .start = 4506, .len = 2 }, + .{ .cp = 0x33BB, .start = 4508, .len = 2 }, + .{ .cp = 0x33BC, .start = 4510, .len = 2 }, + .{ .cp = 0x33BD, .start = 4512, .len = 2 }, + .{ .cp = 0x33BE, .start = 4514, .len = 2 }, + .{ .cp = 0x33BF, .start = 4516, .len = 2 }, + .{ .cp = 0x33C0, .start = 4518, .len = 2 }, + .{ .cp = 0x33C1, .start = 4520, .len = 2 }, + .{ .cp = 0x33C2, .start = 4522, .len = 4 }, + .{ .cp = 0x33C3, .start = 4526, .len = 2 }, + .{ .cp = 0x33C4, .start = 4528, .len = 2 }, + .{ .cp = 0x33C5, .start = 4530, .len = 2 }, + .{ .cp = 0x33C6, .start = 4532, .len = 4 }, + .{ .cp = 0x33C7, .start = 4536, .len = 3 }, + .{ .cp = 0x33C8, .start = 4539, .len = 2 }, + .{ .cp = 0x33C9, .start = 4541, .len = 2 }, + .{ .cp = 0x33CA, .start = 4543, .len = 2 }, + .{ .cp = 0x33CB, .start = 4545, .len = 2 }, + .{ .cp = 0x33CC, .start = 4547, .len = 2 }, + .{ .cp = 0x33CD, .start = 4549, .len = 2 }, + .{ .cp = 0x33CE, .start = 4551, .len = 2 }, + .{ .cp = 0x33CF, .start = 4553, .len = 2 }, + .{ .cp = 0x33D0, .start = 4555, .len = 2 }, + .{ .cp = 0x33D1, .start = 4557, .len = 2 }, + .{ .cp = 0x33D2, .start = 4559, .len = 3 }, + .{ .cp = 0x33D3, .start = 4562, .len = 2 }, + .{ .cp = 0x33D4, .start = 4564, .len = 2 }, + .{ .cp = 0x33D5, .start = 4566, .len = 3 }, + .{ .cp = 0x33D6, .start = 4569, .len = 3 }, + .{ .cp = 0x33D7, .start = 4572, .len = 2 }, + .{ .cp = 0x33D8, .start = 4574, .len = 4 }, + .{ .cp = 0x33D9, .start = 4578, .len = 3 }, + .{ .cp = 0x33DA, .start = 4581, .len = 2 }, + .{ .cp = 0x33DB, .start = 4583, .len = 2 }, + .{ .cp = 0x33DC, .start = 4585, .len = 2 }, + .{ .cp = 0x33DD, .start = 4587, .len = 2 }, + .{ .cp = 0x33DE, .start = 4589, .len = 3 }, + .{ .cp = 0x33DF, .start = 4592, .len = 3 }, + .{ .cp = 0x33E0, .start = 4595, .len = 2 }, + .{ .cp = 0x33E1, .start = 4597, .len = 2 }, + .{ .cp = 0x33E2, .start = 4599, .len = 2 }, + .{ .cp = 0x33E3, .start = 4601, .len = 2 }, + .{ .cp = 0x33E4, .start = 4603, .len = 2 }, + .{ .cp = 0x33E5, .start = 4605, .len = 2 }, + .{ .cp = 0x33E6, .start = 4607, .len = 2 }, + .{ .cp = 0x33E7, .start = 4609, .len = 2 }, + .{ .cp = 0x33E8, .start = 4611, .len = 2 }, + .{ .cp = 0x33E9, .start = 4613, .len = 3 }, + .{ .cp = 0x33EA, .start = 4616, .len = 3 }, + .{ .cp = 0x33EB, .start = 4619, .len = 3 }, + .{ .cp = 0x33EC, .start = 4622, .len = 3 }, + .{ .cp = 0x33ED, .start = 4625, .len = 3 }, + .{ .cp = 0x33EE, .start = 4628, .len = 3 }, + .{ .cp = 0x33EF, .start = 4631, .len = 3 }, + .{ .cp = 0x33F0, .start = 4634, .len = 3 }, + .{ .cp = 0x33F1, .start = 4637, .len = 3 }, + .{ .cp = 0x33F2, .start = 4640, .len = 3 }, + .{ .cp = 0x33F3, .start = 4643, .len = 3 }, + .{ .cp = 0x33F4, .start = 4646, .len = 3 }, + .{ .cp = 0x33F5, .start = 4649, .len = 3 }, + .{ .cp = 0x33F6, .start = 4652, .len = 3 }, + .{ .cp = 0x33F7, .start = 4655, .len = 3 }, + .{ .cp = 0x33F8, .start = 4658, .len = 3 }, + .{ .cp = 0x33F9, .start = 4661, .len = 3 }, + .{ .cp = 0x33FA, .start = 4664, .len = 3 }, + .{ .cp = 0x33FB, .start = 4667, .len = 3 }, + .{ .cp = 0x33FC, .start = 4670, .len = 3 }, + .{ .cp = 0x33FD, .start = 4673, .len = 3 }, + .{ .cp = 0x33FE, .start = 4676, .len = 3 }, + .{ .cp = 0x33FF, .start = 4679, .len = 3 }, + .{ .cp = 0xA69C, .start = 4682, .len = 1 }, + .{ .cp = 0xA69D, .start = 4683, .len = 1 }, + .{ .cp = 0xA770, .start = 4684, .len = 1 }, + .{ .cp = 0xA7F2, .start = 4685, .len = 1 }, + .{ .cp = 0xA7F3, .start = 4686, .len = 1 }, + .{ .cp = 0xA7F4, .start = 4687, .len = 1 }, + .{ .cp = 0xA7F8, .start = 4688, .len = 1 }, + .{ .cp = 0xA7F9, .start = 4689, .len = 1 }, + .{ .cp = 0xAB5C, .start = 4690, .len = 1 }, + .{ .cp = 0xAB5D, .start = 4691, .len = 1 }, + .{ .cp = 0xAB5E, .start = 4692, .len = 1 }, + .{ .cp = 0xAB5F, .start = 4693, .len = 1 }, + .{ .cp = 0xAB69, .start = 4694, .len = 1 }, + .{ .cp = 0xAC00, .start = 4695, .len = 2 }, + .{ .cp = 0xAC01, .start = 4697, .len = 3 }, + .{ .cp = 0xAC02, .start = 4700, .len = 3 }, + .{ .cp = 0xAC03, .start = 4703, .len = 3 }, + .{ .cp = 0xAC04, .start = 4706, .len = 3 }, + .{ .cp = 0xAC05, .start = 4709, .len = 3 }, + .{ .cp = 0xAC06, .start = 4712, .len = 3 }, + .{ .cp = 0xAC07, .start = 4715, .len = 3 }, + .{ .cp = 0xAC08, .start = 4718, .len = 3 }, + .{ .cp = 0xAC09, .start = 4721, .len = 3 }, + .{ .cp = 0xAC0A, .start = 4724, .len = 3 }, + .{ .cp = 0xAC0B, .start = 4727, .len = 3 }, + .{ .cp = 0xAC0C, .start = 4730, .len = 3 }, + .{ .cp = 0xAC0D, .start = 4733, .len = 3 }, + .{ .cp = 0xAC0E, .start = 4736, .len = 3 }, + .{ .cp = 0xAC0F, .start = 4739, .len = 3 }, + .{ .cp = 0xAC10, .start = 4742, .len = 3 }, + .{ .cp = 0xAC11, .start = 4745, .len = 3 }, + .{ .cp = 0xAC12, .start = 4748, .len = 3 }, + .{ .cp = 0xAC13, .start = 4751, .len = 3 }, + .{ .cp = 0xAC14, .start = 4754, .len = 3 }, + .{ .cp = 0xAC15, .start = 4757, .len = 3 }, + .{ .cp = 0xAC16, .start = 4760, .len = 3 }, + .{ .cp = 0xAC17, .start = 4763, .len = 3 }, + .{ .cp = 0xAC18, .start = 4766, .len = 3 }, + .{ .cp = 0xAC19, .start = 4769, .len = 3 }, + .{ .cp = 0xAC1A, .start = 4772, .len = 3 }, + .{ .cp = 0xAC1B, .start = 4775, .len = 3 }, + .{ .cp = 0xAC1C, .start = 4778, .len = 2 }, + .{ .cp = 0xAC1D, .start = 4780, .len = 3 }, + .{ .cp = 0xAC1E, .start = 4783, .len = 3 }, + .{ .cp = 0xAC1F, .start = 4786, .len = 3 }, + .{ .cp = 0xAC20, .start = 4789, .len = 3 }, + .{ .cp = 0xAC21, .start = 4792, .len = 3 }, + .{ .cp = 0xAC22, .start = 4795, .len = 3 }, + .{ .cp = 0xAC23, .start = 4798, .len = 3 }, + .{ .cp = 0xAC24, .start = 4801, .len = 3 }, + .{ .cp = 0xAC25, .start = 4804, .len = 3 }, + .{ .cp = 0xAC26, .start = 4807, .len = 3 }, + .{ .cp = 0xAC27, .start = 4810, .len = 3 }, + .{ .cp = 0xAC28, .start = 4813, .len = 3 }, + .{ .cp = 0xAC29, .start = 4816, .len = 3 }, + .{ .cp = 0xAC2A, .start = 4819, .len = 3 }, + .{ .cp = 0xAC2B, .start = 4822, .len = 3 }, + .{ .cp = 0xAC2C, .start = 4825, .len = 3 }, + .{ .cp = 0xAC2D, .start = 4828, .len = 3 }, + .{ .cp = 0xAC2E, .start = 4831, .len = 3 }, + .{ .cp = 0xAC2F, .start = 4834, .len = 3 }, + .{ .cp = 0xAC30, .start = 4837, .len = 3 }, + .{ .cp = 0xAC31, .start = 4840, .len = 3 }, + .{ .cp = 0xAC32, .start = 4843, .len = 3 }, + .{ .cp = 0xAC33, .start = 4846, .len = 3 }, + .{ .cp = 0xAC34, .start = 4849, .len = 3 }, + .{ .cp = 0xAC35, .start = 4852, .len = 3 }, + .{ .cp = 0xAC36, .start = 4855, .len = 3 }, + .{ .cp = 0xAC37, .start = 4858, .len = 3 }, + .{ .cp = 0xAC38, .start = 4861, .len = 2 }, + .{ .cp = 0xAC39, .start = 4863, .len = 3 }, + .{ .cp = 0xAC3A, .start = 4866, .len = 3 }, + .{ .cp = 0xAC3B, .start = 4869, .len = 3 }, + .{ .cp = 0xAC3C, .start = 4872, .len = 3 }, + .{ .cp = 0xAC3D, .start = 4875, .len = 3 }, + .{ .cp = 0xAC3E, .start = 4878, .len = 3 }, + .{ .cp = 0xAC3F, .start = 4881, .len = 3 }, + .{ .cp = 0xAC40, .start = 4884, .len = 3 }, + .{ .cp = 0xAC41, .start = 4887, .len = 3 }, + .{ .cp = 0xAC42, .start = 4890, .len = 3 }, + .{ .cp = 0xAC43, .start = 4893, .len = 3 }, + .{ .cp = 0xAC44, .start = 4896, .len = 3 }, + .{ .cp = 0xAC45, .start = 4899, .len = 3 }, + .{ .cp = 0xAC46, .start = 4902, .len = 3 }, + .{ .cp = 0xAC47, .start = 4905, .len = 3 }, + .{ .cp = 0xAC48, .start = 4908, .len = 3 }, + .{ .cp = 0xAC49, .start = 4911, .len = 3 }, + .{ .cp = 0xAC4A, .start = 4914, .len = 3 }, + .{ .cp = 0xAC4B, .start = 4917, .len = 3 }, + .{ .cp = 0xAC4C, .start = 4920, .len = 3 }, + .{ .cp = 0xAC4D, .start = 4923, .len = 3 }, + .{ .cp = 0xAC4E, .start = 4926, .len = 3 }, + .{ .cp = 0xAC4F, .start = 4929, .len = 3 }, + .{ .cp = 0xAC50, .start = 4932, .len = 3 }, + .{ .cp = 0xAC51, .start = 4935, .len = 3 }, + .{ .cp = 0xAC52, .start = 4938, .len = 3 }, + .{ .cp = 0xAC53, .start = 4941, .len = 3 }, + .{ .cp = 0xAC54, .start = 4944, .len = 2 }, + .{ .cp = 0xAC55, .start = 4946, .len = 3 }, + .{ .cp = 0xAC56, .start = 4949, .len = 3 }, + .{ .cp = 0xAC57, .start = 4952, .len = 3 }, + .{ .cp = 0xAC58, .start = 4955, .len = 3 }, + .{ .cp = 0xAC59, .start = 4958, .len = 3 }, + .{ .cp = 0xAC5A, .start = 4961, .len = 3 }, + .{ .cp = 0xAC5B, .start = 4964, .len = 3 }, + .{ .cp = 0xAC5C, .start = 4967, .len = 3 }, + .{ .cp = 0xAC5D, .start = 4970, .len = 3 }, + .{ .cp = 0xAC5E, .start = 4973, .len = 3 }, + .{ .cp = 0xAC5F, .start = 4976, .len = 3 }, + .{ .cp = 0xAC60, .start = 4979, .len = 3 }, + .{ .cp = 0xAC61, .start = 4982, .len = 3 }, + .{ .cp = 0xAC62, .start = 4985, .len = 3 }, + .{ .cp = 0xAC63, .start = 4988, .len = 3 }, + .{ .cp = 0xAC64, .start = 4991, .len = 3 }, + .{ .cp = 0xAC65, .start = 4994, .len = 3 }, + .{ .cp = 0xAC66, .start = 4997, .len = 3 }, + .{ .cp = 0xAC67, .start = 5000, .len = 3 }, + .{ .cp = 0xAC68, .start = 5003, .len = 3 }, + .{ .cp = 0xAC69, .start = 5006, .len = 3 }, + .{ .cp = 0xAC6A, .start = 5009, .len = 3 }, + .{ .cp = 0xAC6B, .start = 5012, .len = 3 }, + .{ .cp = 0xAC6C, .start = 5015, .len = 3 }, + .{ .cp = 0xAC6D, .start = 5018, .len = 3 }, + .{ .cp = 0xAC6E, .start = 5021, .len = 3 }, + .{ .cp = 0xAC6F, .start = 5024, .len = 3 }, + .{ .cp = 0xAC70, .start = 5027, .len = 2 }, + .{ .cp = 0xAC71, .start = 5029, .len = 3 }, + .{ .cp = 0xAC72, .start = 5032, .len = 3 }, + .{ .cp = 0xAC73, .start = 5035, .len = 3 }, + .{ .cp = 0xAC74, .start = 5038, .len = 3 }, + .{ .cp = 0xAC75, .start = 5041, .len = 3 }, + .{ .cp = 0xAC76, .start = 5044, .len = 3 }, + .{ .cp = 0xAC77, .start = 5047, .len = 3 }, + .{ .cp = 0xAC78, .start = 5050, .len = 3 }, + .{ .cp = 0xAC79, .start = 5053, .len = 3 }, + .{ .cp = 0xAC7A, .start = 5056, .len = 3 }, + .{ .cp = 0xAC7B, .start = 5059, .len = 3 }, + .{ .cp = 0xAC7C, .start = 5062, .len = 3 }, + .{ .cp = 0xAC7D, .start = 5065, .len = 3 }, + .{ .cp = 0xAC7E, .start = 5068, .len = 3 }, + .{ .cp = 0xAC7F, .start = 5071, .len = 3 }, + .{ .cp = 0xAC80, .start = 5074, .len = 3 }, + .{ .cp = 0xAC81, .start = 5077, .len = 3 }, + .{ .cp = 0xAC82, .start = 5080, .len = 3 }, + .{ .cp = 0xAC83, .start = 5083, .len = 3 }, + .{ .cp = 0xAC84, .start = 5086, .len = 3 }, + .{ .cp = 0xAC85, .start = 5089, .len = 3 }, + .{ .cp = 0xAC86, .start = 5092, .len = 3 }, + .{ .cp = 0xAC87, .start = 5095, .len = 3 }, + .{ .cp = 0xAC88, .start = 5098, .len = 3 }, + .{ .cp = 0xAC89, .start = 5101, .len = 3 }, + .{ .cp = 0xAC8A, .start = 5104, .len = 3 }, + .{ .cp = 0xAC8B, .start = 5107, .len = 3 }, + .{ .cp = 0xAC8C, .start = 5110, .len = 2 }, + .{ .cp = 0xAC8D, .start = 5112, .len = 3 }, + .{ .cp = 0xAC8E, .start = 5115, .len = 3 }, + .{ .cp = 0xAC8F, .start = 5118, .len = 3 }, + .{ .cp = 0xAC90, .start = 5121, .len = 3 }, + .{ .cp = 0xAC91, .start = 5124, .len = 3 }, + .{ .cp = 0xAC92, .start = 5127, .len = 3 }, + .{ .cp = 0xAC93, .start = 5130, .len = 3 }, + .{ .cp = 0xAC94, .start = 5133, .len = 3 }, + .{ .cp = 0xAC95, .start = 5136, .len = 3 }, + .{ .cp = 0xAC96, .start = 5139, .len = 3 }, + .{ .cp = 0xAC97, .start = 5142, .len = 3 }, + .{ .cp = 0xAC98, .start = 5145, .len = 3 }, + .{ .cp = 0xAC99, .start = 5148, .len = 3 }, + .{ .cp = 0xAC9A, .start = 5151, .len = 3 }, + .{ .cp = 0xAC9B, .start = 5154, .len = 3 }, + .{ .cp = 0xAC9C, .start = 5157, .len = 3 }, + .{ .cp = 0xAC9D, .start = 5160, .len = 3 }, + .{ .cp = 0xAC9E, .start = 5163, .len = 3 }, + .{ .cp = 0xAC9F, .start = 5166, .len = 3 }, + .{ .cp = 0xACA0, .start = 5169, .len = 3 }, + .{ .cp = 0xACA1, .start = 5172, .len = 3 }, + .{ .cp = 0xACA2, .start = 5175, .len = 3 }, + .{ .cp = 0xACA3, .start = 5178, .len = 3 }, + .{ .cp = 0xACA4, .start = 5181, .len = 3 }, + .{ .cp = 0xACA5, .start = 5184, .len = 3 }, + .{ .cp = 0xACA6, .start = 5187, .len = 3 }, + .{ .cp = 0xACA7, .start = 5190, .len = 3 }, + .{ .cp = 0xACA8, .start = 5193, .len = 2 }, + .{ .cp = 0xACA9, .start = 5195, .len = 3 }, + .{ .cp = 0xACAA, .start = 5198, .len = 3 }, + .{ .cp = 0xACAB, .start = 5201, .len = 3 }, + .{ .cp = 0xACAC, .start = 5204, .len = 3 }, + .{ .cp = 0xACAD, .start = 5207, .len = 3 }, + .{ .cp = 0xACAE, .start = 5210, .len = 3 }, + .{ .cp = 0xACAF, .start = 5213, .len = 3 }, + .{ .cp = 0xACB0, .start = 5216, .len = 3 }, + .{ .cp = 0xACB1, .start = 5219, .len = 3 }, + .{ .cp = 0xACB2, .start = 5222, .len = 3 }, + .{ .cp = 0xACB3, .start = 5225, .len = 3 }, + .{ .cp = 0xACB4, .start = 5228, .len = 3 }, + .{ .cp = 0xACB5, .start = 5231, .len = 3 }, + .{ .cp = 0xACB6, .start = 5234, .len = 3 }, + .{ .cp = 0xACB7, .start = 5237, .len = 3 }, + .{ .cp = 0xACB8, .start = 5240, .len = 3 }, + .{ .cp = 0xACB9, .start = 5243, .len = 3 }, + .{ .cp = 0xACBA, .start = 5246, .len = 3 }, + .{ .cp = 0xACBB, .start = 5249, .len = 3 }, + .{ .cp = 0xACBC, .start = 5252, .len = 3 }, + .{ .cp = 0xACBD, .start = 5255, .len = 3 }, + .{ .cp = 0xACBE, .start = 5258, .len = 3 }, + .{ .cp = 0xACBF, .start = 5261, .len = 3 }, + .{ .cp = 0xACC0, .start = 5264, .len = 3 }, + .{ .cp = 0xACC1, .start = 5267, .len = 3 }, + .{ .cp = 0xACC2, .start = 5270, .len = 3 }, + .{ .cp = 0xACC3, .start = 5273, .len = 3 }, + .{ .cp = 0xACC4, .start = 5276, .len = 2 }, + .{ .cp = 0xACC5, .start = 5278, .len = 3 }, + .{ .cp = 0xACC6, .start = 5281, .len = 3 }, + .{ .cp = 0xACC7, .start = 5284, .len = 3 }, + .{ .cp = 0xACC8, .start = 5287, .len = 3 }, + .{ .cp = 0xACC9, .start = 5290, .len = 3 }, + .{ .cp = 0xACCA, .start = 5293, .len = 3 }, + .{ .cp = 0xACCB, .start = 5296, .len = 3 }, + .{ .cp = 0xACCC, .start = 5299, .len = 3 }, + .{ .cp = 0xACCD, .start = 5302, .len = 3 }, + .{ .cp = 0xACCE, .start = 5305, .len = 3 }, + .{ .cp = 0xACCF, .start = 5308, .len = 3 }, + .{ .cp = 0xACD0, .start = 5311, .len = 3 }, + .{ .cp = 0xACD1, .start = 5314, .len = 3 }, + .{ .cp = 0xACD2, .start = 5317, .len = 3 }, + .{ .cp = 0xACD3, .start = 5320, .len = 3 }, + .{ .cp = 0xACD4, .start = 5323, .len = 3 }, + .{ .cp = 0xACD5, .start = 5326, .len = 3 }, + .{ .cp = 0xACD6, .start = 5329, .len = 3 }, + .{ .cp = 0xACD7, .start = 5332, .len = 3 }, + .{ .cp = 0xACD8, .start = 5335, .len = 3 }, + .{ .cp = 0xACD9, .start = 5338, .len = 3 }, + .{ .cp = 0xACDA, .start = 5341, .len = 3 }, + .{ .cp = 0xACDB, .start = 5344, .len = 3 }, + .{ .cp = 0xACDC, .start = 5347, .len = 3 }, + .{ .cp = 0xACDD, .start = 5350, .len = 3 }, + .{ .cp = 0xACDE, .start = 5353, .len = 3 }, + .{ .cp = 0xACDF, .start = 5356, .len = 3 }, + .{ .cp = 0xACE0, .start = 5359, .len = 2 }, + .{ .cp = 0xACE1, .start = 5361, .len = 3 }, + .{ .cp = 0xACE2, .start = 5364, .len = 3 }, + .{ .cp = 0xACE3, .start = 5367, .len = 3 }, + .{ .cp = 0xACE4, .start = 5370, .len = 3 }, + .{ .cp = 0xACE5, .start = 5373, .len = 3 }, + .{ .cp = 0xACE6, .start = 5376, .len = 3 }, + .{ .cp = 0xACE7, .start = 5379, .len = 3 }, + .{ .cp = 0xACE8, .start = 5382, .len = 3 }, + .{ .cp = 0xACE9, .start = 5385, .len = 3 }, + .{ .cp = 0xACEA, .start = 5388, .len = 3 }, + .{ .cp = 0xACEB, .start = 5391, .len = 3 }, + .{ .cp = 0xACEC, .start = 5394, .len = 3 }, + .{ .cp = 0xACED, .start = 5397, .len = 3 }, + .{ .cp = 0xACEE, .start = 5400, .len = 3 }, + .{ .cp = 0xACEF, .start = 5403, .len = 3 }, + .{ .cp = 0xACF0, .start = 5406, .len = 3 }, + .{ .cp = 0xACF1, .start = 5409, .len = 3 }, + .{ .cp = 0xACF2, .start = 5412, .len = 3 }, + .{ .cp = 0xACF3, .start = 5415, .len = 3 }, + .{ .cp = 0xACF4, .start = 5418, .len = 3 }, + .{ .cp = 0xACF5, .start = 5421, .len = 3 }, + .{ .cp = 0xACF6, .start = 5424, .len = 3 }, + .{ .cp = 0xACF7, .start = 5427, .len = 3 }, + .{ .cp = 0xACF8, .start = 5430, .len = 3 }, + .{ .cp = 0xACF9, .start = 5433, .len = 3 }, + .{ .cp = 0xACFA, .start = 5436, .len = 3 }, + .{ .cp = 0xACFB, .start = 5439, .len = 3 }, + .{ .cp = 0xACFC, .start = 5442, .len = 2 }, + .{ .cp = 0xACFD, .start = 5444, .len = 3 }, + .{ .cp = 0xACFE, .start = 5447, .len = 3 }, + .{ .cp = 0xACFF, .start = 5450, .len = 3 }, + .{ .cp = 0xAD00, .start = 5453, .len = 3 }, + .{ .cp = 0xAD01, .start = 5456, .len = 3 }, + .{ .cp = 0xAD02, .start = 5459, .len = 3 }, + .{ .cp = 0xAD03, .start = 5462, .len = 3 }, + .{ .cp = 0xAD04, .start = 5465, .len = 3 }, + .{ .cp = 0xAD05, .start = 5468, .len = 3 }, + .{ .cp = 0xAD06, .start = 5471, .len = 3 }, + .{ .cp = 0xAD07, .start = 5474, .len = 3 }, + .{ .cp = 0xAD08, .start = 5477, .len = 3 }, + .{ .cp = 0xAD09, .start = 5480, .len = 3 }, + .{ .cp = 0xAD0A, .start = 5483, .len = 3 }, + .{ .cp = 0xAD0B, .start = 5486, .len = 3 }, + .{ .cp = 0xAD0C, .start = 5489, .len = 3 }, + .{ .cp = 0xAD0D, .start = 5492, .len = 3 }, + .{ .cp = 0xAD0E, .start = 5495, .len = 3 }, + .{ .cp = 0xAD0F, .start = 5498, .len = 3 }, + .{ .cp = 0xAD10, .start = 5501, .len = 3 }, + .{ .cp = 0xAD11, .start = 5504, .len = 3 }, + .{ .cp = 0xAD12, .start = 5507, .len = 3 }, + .{ .cp = 0xAD13, .start = 5510, .len = 3 }, + .{ .cp = 0xAD14, .start = 5513, .len = 3 }, + .{ .cp = 0xAD15, .start = 5516, .len = 3 }, + .{ .cp = 0xAD16, .start = 5519, .len = 3 }, + .{ .cp = 0xAD17, .start = 5522, .len = 3 }, + .{ .cp = 0xAD18, .start = 5525, .len = 2 }, + .{ .cp = 0xAD19, .start = 5527, .len = 3 }, + .{ .cp = 0xAD1A, .start = 5530, .len = 3 }, + .{ .cp = 0xAD1B, .start = 5533, .len = 3 }, + .{ .cp = 0xAD1C, .start = 5536, .len = 3 }, + .{ .cp = 0xAD1D, .start = 5539, .len = 3 }, + .{ .cp = 0xAD1E, .start = 5542, .len = 3 }, + .{ .cp = 0xAD1F, .start = 5545, .len = 3 }, + .{ .cp = 0xAD20, .start = 5548, .len = 3 }, + .{ .cp = 0xAD21, .start = 5551, .len = 3 }, + .{ .cp = 0xAD22, .start = 5554, .len = 3 }, + .{ .cp = 0xAD23, .start = 5557, .len = 3 }, + .{ .cp = 0xAD24, .start = 5560, .len = 3 }, + .{ .cp = 0xAD25, .start = 5563, .len = 3 }, + .{ .cp = 0xAD26, .start = 5566, .len = 3 }, + .{ .cp = 0xAD27, .start = 5569, .len = 3 }, + .{ .cp = 0xAD28, .start = 5572, .len = 3 }, + .{ .cp = 0xAD29, .start = 5575, .len = 3 }, + .{ .cp = 0xAD2A, .start = 5578, .len = 3 }, + .{ .cp = 0xAD2B, .start = 5581, .len = 3 }, + .{ .cp = 0xAD2C, .start = 5584, .len = 3 }, + .{ .cp = 0xAD2D, .start = 5587, .len = 3 }, + .{ .cp = 0xAD2E, .start = 5590, .len = 3 }, + .{ .cp = 0xAD2F, .start = 5593, .len = 3 }, + .{ .cp = 0xAD30, .start = 5596, .len = 3 }, + .{ .cp = 0xAD31, .start = 5599, .len = 3 }, + .{ .cp = 0xAD32, .start = 5602, .len = 3 }, + .{ .cp = 0xAD33, .start = 5605, .len = 3 }, + .{ .cp = 0xAD34, .start = 5608, .len = 2 }, + .{ .cp = 0xAD35, .start = 5610, .len = 3 }, + .{ .cp = 0xAD36, .start = 5613, .len = 3 }, + .{ .cp = 0xAD37, .start = 5616, .len = 3 }, + .{ .cp = 0xAD38, .start = 5619, .len = 3 }, + .{ .cp = 0xAD39, .start = 5622, .len = 3 }, + .{ .cp = 0xAD3A, .start = 5625, .len = 3 }, + .{ .cp = 0xAD3B, .start = 5628, .len = 3 }, + .{ .cp = 0xAD3C, .start = 5631, .len = 3 }, + .{ .cp = 0xAD3D, .start = 5634, .len = 3 }, + .{ .cp = 0xAD3E, .start = 5637, .len = 3 }, + .{ .cp = 0xAD3F, .start = 5640, .len = 3 }, + .{ .cp = 0xAD40, .start = 5643, .len = 3 }, + .{ .cp = 0xAD41, .start = 5646, .len = 3 }, + .{ .cp = 0xAD42, .start = 5649, .len = 3 }, + .{ .cp = 0xAD43, .start = 5652, .len = 3 }, + .{ .cp = 0xAD44, .start = 5655, .len = 3 }, + .{ .cp = 0xAD45, .start = 5658, .len = 3 }, + .{ .cp = 0xAD46, .start = 5661, .len = 3 }, + .{ .cp = 0xAD47, .start = 5664, .len = 3 }, + .{ .cp = 0xAD48, .start = 5667, .len = 3 }, + .{ .cp = 0xAD49, .start = 5670, .len = 3 }, + .{ .cp = 0xAD4A, .start = 5673, .len = 3 }, + .{ .cp = 0xAD4B, .start = 5676, .len = 3 }, + .{ .cp = 0xAD4C, .start = 5679, .len = 3 }, + .{ .cp = 0xAD4D, .start = 5682, .len = 3 }, + .{ .cp = 0xAD4E, .start = 5685, .len = 3 }, + .{ .cp = 0xAD4F, .start = 5688, .len = 3 }, + .{ .cp = 0xAD50, .start = 5691, .len = 2 }, + .{ .cp = 0xAD51, .start = 5693, .len = 3 }, + .{ .cp = 0xAD52, .start = 5696, .len = 3 }, + .{ .cp = 0xAD53, .start = 5699, .len = 3 }, + .{ .cp = 0xAD54, .start = 5702, .len = 3 }, + .{ .cp = 0xAD55, .start = 5705, .len = 3 }, + .{ .cp = 0xAD56, .start = 5708, .len = 3 }, + .{ .cp = 0xAD57, .start = 5711, .len = 3 }, + .{ .cp = 0xAD58, .start = 5714, .len = 3 }, + .{ .cp = 0xAD59, .start = 5717, .len = 3 }, + .{ .cp = 0xAD5A, .start = 5720, .len = 3 }, + .{ .cp = 0xAD5B, .start = 5723, .len = 3 }, + .{ .cp = 0xAD5C, .start = 5726, .len = 3 }, + .{ .cp = 0xAD5D, .start = 5729, .len = 3 }, + .{ .cp = 0xAD5E, .start = 5732, .len = 3 }, + .{ .cp = 0xAD5F, .start = 5735, .len = 3 }, + .{ .cp = 0xAD60, .start = 5738, .len = 3 }, + .{ .cp = 0xAD61, .start = 5741, .len = 3 }, + .{ .cp = 0xAD62, .start = 5744, .len = 3 }, + .{ .cp = 0xAD63, .start = 5747, .len = 3 }, + .{ .cp = 0xAD64, .start = 5750, .len = 3 }, + .{ .cp = 0xAD65, .start = 5753, .len = 3 }, + .{ .cp = 0xAD66, .start = 5756, .len = 3 }, + .{ .cp = 0xAD67, .start = 5759, .len = 3 }, + .{ .cp = 0xAD68, .start = 5762, .len = 3 }, + .{ .cp = 0xAD69, .start = 5765, .len = 3 }, + .{ .cp = 0xAD6A, .start = 5768, .len = 3 }, + .{ .cp = 0xAD6B, .start = 5771, .len = 3 }, + .{ .cp = 0xAD6C, .start = 5774, .len = 2 }, + .{ .cp = 0xAD6D, .start = 5776, .len = 3 }, + .{ .cp = 0xAD6E, .start = 5779, .len = 3 }, + .{ .cp = 0xAD6F, .start = 5782, .len = 3 }, + .{ .cp = 0xAD70, .start = 5785, .len = 3 }, + .{ .cp = 0xAD71, .start = 5788, .len = 3 }, + .{ .cp = 0xAD72, .start = 5791, .len = 3 }, + .{ .cp = 0xAD73, .start = 5794, .len = 3 }, + .{ .cp = 0xAD74, .start = 5797, .len = 3 }, + .{ .cp = 0xAD75, .start = 5800, .len = 3 }, + .{ .cp = 0xAD76, .start = 5803, .len = 3 }, + .{ .cp = 0xAD77, .start = 5806, .len = 3 }, + .{ .cp = 0xAD78, .start = 5809, .len = 3 }, + .{ .cp = 0xAD79, .start = 5812, .len = 3 }, + .{ .cp = 0xAD7A, .start = 5815, .len = 3 }, + .{ .cp = 0xAD7B, .start = 5818, .len = 3 }, + .{ .cp = 0xAD7C, .start = 5821, .len = 3 }, + .{ .cp = 0xAD7D, .start = 5824, .len = 3 }, + .{ .cp = 0xAD7E, .start = 5827, .len = 3 }, + .{ .cp = 0xAD7F, .start = 5830, .len = 3 }, + .{ .cp = 0xAD80, .start = 5833, .len = 3 }, + .{ .cp = 0xAD81, .start = 5836, .len = 3 }, + .{ .cp = 0xAD82, .start = 5839, .len = 3 }, + .{ .cp = 0xAD83, .start = 5842, .len = 3 }, + .{ .cp = 0xAD84, .start = 5845, .len = 3 }, + .{ .cp = 0xAD85, .start = 5848, .len = 3 }, + .{ .cp = 0xAD86, .start = 5851, .len = 3 }, + .{ .cp = 0xAD87, .start = 5854, .len = 3 }, + .{ .cp = 0xAD88, .start = 5857, .len = 2 }, + .{ .cp = 0xAD89, .start = 5859, .len = 3 }, + .{ .cp = 0xAD8A, .start = 5862, .len = 3 }, + .{ .cp = 0xAD8B, .start = 5865, .len = 3 }, + .{ .cp = 0xAD8C, .start = 5868, .len = 3 }, + .{ .cp = 0xAD8D, .start = 5871, .len = 3 }, + .{ .cp = 0xAD8E, .start = 5874, .len = 3 }, + .{ .cp = 0xAD8F, .start = 5877, .len = 3 }, + .{ .cp = 0xAD90, .start = 5880, .len = 3 }, + .{ .cp = 0xAD91, .start = 5883, .len = 3 }, + .{ .cp = 0xAD92, .start = 5886, .len = 3 }, + .{ .cp = 0xAD93, .start = 5889, .len = 3 }, + .{ .cp = 0xAD94, .start = 5892, .len = 3 }, + .{ .cp = 0xAD95, .start = 5895, .len = 3 }, + .{ .cp = 0xAD96, .start = 5898, .len = 3 }, + .{ .cp = 0xAD97, .start = 5901, .len = 3 }, + .{ .cp = 0xAD98, .start = 5904, .len = 3 }, + .{ .cp = 0xAD99, .start = 5907, .len = 3 }, + .{ .cp = 0xAD9A, .start = 5910, .len = 3 }, + .{ .cp = 0xAD9B, .start = 5913, .len = 3 }, + .{ .cp = 0xAD9C, .start = 5916, .len = 3 }, + .{ .cp = 0xAD9D, .start = 5919, .len = 3 }, + .{ .cp = 0xAD9E, .start = 5922, .len = 3 }, + .{ .cp = 0xAD9F, .start = 5925, .len = 3 }, + .{ .cp = 0xADA0, .start = 5928, .len = 3 }, + .{ .cp = 0xADA1, .start = 5931, .len = 3 }, + .{ .cp = 0xADA2, .start = 5934, .len = 3 }, + .{ .cp = 0xADA3, .start = 5937, .len = 3 }, + .{ .cp = 0xADA4, .start = 5940, .len = 2 }, + .{ .cp = 0xADA5, .start = 5942, .len = 3 }, + .{ .cp = 0xADA6, .start = 5945, .len = 3 }, + .{ .cp = 0xADA7, .start = 5948, .len = 3 }, + .{ .cp = 0xADA8, .start = 5951, .len = 3 }, + .{ .cp = 0xADA9, .start = 5954, .len = 3 }, + .{ .cp = 0xADAA, .start = 5957, .len = 3 }, + .{ .cp = 0xADAB, .start = 5960, .len = 3 }, + .{ .cp = 0xADAC, .start = 5963, .len = 3 }, + .{ .cp = 0xADAD, .start = 5966, .len = 3 }, + .{ .cp = 0xADAE, .start = 5969, .len = 3 }, + .{ .cp = 0xADAF, .start = 5972, .len = 3 }, + .{ .cp = 0xADB0, .start = 5975, .len = 3 }, + .{ .cp = 0xADB1, .start = 5978, .len = 3 }, + .{ .cp = 0xADB2, .start = 5981, .len = 3 }, + .{ .cp = 0xADB3, .start = 5984, .len = 3 }, + .{ .cp = 0xADB4, .start = 5987, .len = 3 }, + .{ .cp = 0xADB5, .start = 5990, .len = 3 }, + .{ .cp = 0xADB6, .start = 5993, .len = 3 }, + .{ .cp = 0xADB7, .start = 5996, .len = 3 }, + .{ .cp = 0xADB8, .start = 5999, .len = 3 }, + .{ .cp = 0xADB9, .start = 6002, .len = 3 }, + .{ .cp = 0xADBA, .start = 6005, .len = 3 }, + .{ .cp = 0xADBB, .start = 6008, .len = 3 }, + .{ .cp = 0xADBC, .start = 6011, .len = 3 }, + .{ .cp = 0xADBD, .start = 6014, .len = 3 }, + .{ .cp = 0xADBE, .start = 6017, .len = 3 }, + .{ .cp = 0xADBF, .start = 6020, .len = 3 }, + .{ .cp = 0xADC0, .start = 6023, .len = 2 }, + .{ .cp = 0xADC1, .start = 6025, .len = 3 }, + .{ .cp = 0xADC2, .start = 6028, .len = 3 }, + .{ .cp = 0xADC3, .start = 6031, .len = 3 }, + .{ .cp = 0xADC4, .start = 6034, .len = 3 }, + .{ .cp = 0xADC5, .start = 6037, .len = 3 }, + .{ .cp = 0xADC6, .start = 6040, .len = 3 }, + .{ .cp = 0xADC7, .start = 6043, .len = 3 }, + .{ .cp = 0xADC8, .start = 6046, .len = 3 }, + .{ .cp = 0xADC9, .start = 6049, .len = 3 }, + .{ .cp = 0xADCA, .start = 6052, .len = 3 }, + .{ .cp = 0xADCB, .start = 6055, .len = 3 }, + .{ .cp = 0xADCC, .start = 6058, .len = 3 }, + .{ .cp = 0xADCD, .start = 6061, .len = 3 }, + .{ .cp = 0xADCE, .start = 6064, .len = 3 }, + .{ .cp = 0xADCF, .start = 6067, .len = 3 }, + .{ .cp = 0xADD0, .start = 6070, .len = 3 }, + .{ .cp = 0xADD1, .start = 6073, .len = 3 }, + .{ .cp = 0xADD2, .start = 6076, .len = 3 }, + .{ .cp = 0xADD3, .start = 6079, .len = 3 }, + .{ .cp = 0xADD4, .start = 6082, .len = 3 }, + .{ .cp = 0xADD5, .start = 6085, .len = 3 }, + .{ .cp = 0xADD6, .start = 6088, .len = 3 }, + .{ .cp = 0xADD7, .start = 6091, .len = 3 }, + .{ .cp = 0xADD8, .start = 6094, .len = 3 }, + .{ .cp = 0xADD9, .start = 6097, .len = 3 }, + .{ .cp = 0xADDA, .start = 6100, .len = 3 }, + .{ .cp = 0xADDB, .start = 6103, .len = 3 }, + .{ .cp = 0xADDC, .start = 6106, .len = 2 }, + .{ .cp = 0xADDD, .start = 6108, .len = 3 }, + .{ .cp = 0xADDE, .start = 6111, .len = 3 }, + .{ .cp = 0xADDF, .start = 6114, .len = 3 }, + .{ .cp = 0xADE0, .start = 6117, .len = 3 }, + .{ .cp = 0xADE1, .start = 6120, .len = 3 }, + .{ .cp = 0xADE2, .start = 6123, .len = 3 }, + .{ .cp = 0xADE3, .start = 6126, .len = 3 }, + .{ .cp = 0xADE4, .start = 6129, .len = 3 }, + .{ .cp = 0xADE5, .start = 6132, .len = 3 }, + .{ .cp = 0xADE6, .start = 6135, .len = 3 }, + .{ .cp = 0xADE7, .start = 6138, .len = 3 }, + .{ .cp = 0xADE8, .start = 6141, .len = 3 }, + .{ .cp = 0xADE9, .start = 6144, .len = 3 }, + .{ .cp = 0xADEA, .start = 6147, .len = 3 }, + .{ .cp = 0xADEB, .start = 6150, .len = 3 }, + .{ .cp = 0xADEC, .start = 6153, .len = 3 }, + .{ .cp = 0xADED, .start = 6156, .len = 3 }, + .{ .cp = 0xADEE, .start = 6159, .len = 3 }, + .{ .cp = 0xADEF, .start = 6162, .len = 3 }, + .{ .cp = 0xADF0, .start = 6165, .len = 3 }, + .{ .cp = 0xADF1, .start = 6168, .len = 3 }, + .{ .cp = 0xADF2, .start = 6171, .len = 3 }, + .{ .cp = 0xADF3, .start = 6174, .len = 3 }, + .{ .cp = 0xADF4, .start = 6177, .len = 3 }, + .{ .cp = 0xADF5, .start = 6180, .len = 3 }, + .{ .cp = 0xADF6, .start = 6183, .len = 3 }, + .{ .cp = 0xADF7, .start = 6186, .len = 3 }, + .{ .cp = 0xADF8, .start = 6189, .len = 2 }, + .{ .cp = 0xADF9, .start = 6191, .len = 3 }, + .{ .cp = 0xADFA, .start = 6194, .len = 3 }, + .{ .cp = 0xADFB, .start = 6197, .len = 3 }, + .{ .cp = 0xADFC, .start = 6200, .len = 3 }, + .{ .cp = 0xADFD, .start = 6203, .len = 3 }, + .{ .cp = 0xADFE, .start = 6206, .len = 3 }, + .{ .cp = 0xADFF, .start = 6209, .len = 3 }, + .{ .cp = 0xAE00, .start = 6212, .len = 3 }, + .{ .cp = 0xAE01, .start = 6215, .len = 3 }, + .{ .cp = 0xAE02, .start = 6218, .len = 3 }, + .{ .cp = 0xAE03, .start = 6221, .len = 3 }, + .{ .cp = 0xAE04, .start = 6224, .len = 3 }, + .{ .cp = 0xAE05, .start = 6227, .len = 3 }, + .{ .cp = 0xAE06, .start = 6230, .len = 3 }, + .{ .cp = 0xAE07, .start = 6233, .len = 3 }, + .{ .cp = 0xAE08, .start = 6236, .len = 3 }, + .{ .cp = 0xAE09, .start = 6239, .len = 3 }, + .{ .cp = 0xAE0A, .start = 6242, .len = 3 }, + .{ .cp = 0xAE0B, .start = 6245, .len = 3 }, + .{ .cp = 0xAE0C, .start = 6248, .len = 3 }, + .{ .cp = 0xAE0D, .start = 6251, .len = 3 }, + .{ .cp = 0xAE0E, .start = 6254, .len = 3 }, + .{ .cp = 0xAE0F, .start = 6257, .len = 3 }, + .{ .cp = 0xAE10, .start = 6260, .len = 3 }, + .{ .cp = 0xAE11, .start = 6263, .len = 3 }, + .{ .cp = 0xAE12, .start = 6266, .len = 3 }, + .{ .cp = 0xAE13, .start = 6269, .len = 3 }, + .{ .cp = 0xAE14, .start = 6272, .len = 2 }, + .{ .cp = 0xAE15, .start = 6274, .len = 3 }, + .{ .cp = 0xAE16, .start = 6277, .len = 3 }, + .{ .cp = 0xAE17, .start = 6280, .len = 3 }, + .{ .cp = 0xAE18, .start = 6283, .len = 3 }, + .{ .cp = 0xAE19, .start = 6286, .len = 3 }, + .{ .cp = 0xAE1A, .start = 6289, .len = 3 }, + .{ .cp = 0xAE1B, .start = 6292, .len = 3 }, + .{ .cp = 0xAE1C, .start = 6295, .len = 3 }, + .{ .cp = 0xAE1D, .start = 6298, .len = 3 }, + .{ .cp = 0xAE1E, .start = 6301, .len = 3 }, + .{ .cp = 0xAE1F, .start = 6304, .len = 3 }, + .{ .cp = 0xAE20, .start = 6307, .len = 3 }, + .{ .cp = 0xAE21, .start = 6310, .len = 3 }, + .{ .cp = 0xAE22, .start = 6313, .len = 3 }, + .{ .cp = 0xAE23, .start = 6316, .len = 3 }, + .{ .cp = 0xAE24, .start = 6319, .len = 3 }, + .{ .cp = 0xAE25, .start = 6322, .len = 3 }, + .{ .cp = 0xAE26, .start = 6325, .len = 3 }, + .{ .cp = 0xAE27, .start = 6328, .len = 3 }, + .{ .cp = 0xAE28, .start = 6331, .len = 3 }, + .{ .cp = 0xAE29, .start = 6334, .len = 3 }, + .{ .cp = 0xAE2A, .start = 6337, .len = 3 }, + .{ .cp = 0xAE2B, .start = 6340, .len = 3 }, + .{ .cp = 0xAE2C, .start = 6343, .len = 3 }, + .{ .cp = 0xAE2D, .start = 6346, .len = 3 }, + .{ .cp = 0xAE2E, .start = 6349, .len = 3 }, + .{ .cp = 0xAE2F, .start = 6352, .len = 3 }, + .{ .cp = 0xAE30, .start = 6355, .len = 2 }, + .{ .cp = 0xAE31, .start = 6357, .len = 3 }, + .{ .cp = 0xAE32, .start = 6360, .len = 3 }, + .{ .cp = 0xAE33, .start = 6363, .len = 3 }, + .{ .cp = 0xAE34, .start = 6366, .len = 3 }, + .{ .cp = 0xAE35, .start = 6369, .len = 3 }, + .{ .cp = 0xAE36, .start = 6372, .len = 3 }, + .{ .cp = 0xAE37, .start = 6375, .len = 3 }, + .{ .cp = 0xAE38, .start = 6378, .len = 3 }, + .{ .cp = 0xAE39, .start = 6381, .len = 3 }, + .{ .cp = 0xAE3A, .start = 6384, .len = 3 }, + .{ .cp = 0xAE3B, .start = 6387, .len = 3 }, + .{ .cp = 0xAE3C, .start = 6390, .len = 3 }, + .{ .cp = 0xAE3D, .start = 6393, .len = 3 }, + .{ .cp = 0xAE3E, .start = 6396, .len = 3 }, + .{ .cp = 0xAE3F, .start = 6399, .len = 3 }, + .{ .cp = 0xAE40, .start = 6402, .len = 3 }, + .{ .cp = 0xAE41, .start = 6405, .len = 3 }, + .{ .cp = 0xAE42, .start = 6408, .len = 3 }, + .{ .cp = 0xAE43, .start = 6411, .len = 3 }, + .{ .cp = 0xAE44, .start = 6414, .len = 3 }, + .{ .cp = 0xAE45, .start = 6417, .len = 3 }, + .{ .cp = 0xAE46, .start = 6420, .len = 3 }, + .{ .cp = 0xAE47, .start = 6423, .len = 3 }, + .{ .cp = 0xAE48, .start = 6426, .len = 3 }, + .{ .cp = 0xAE49, .start = 6429, .len = 3 }, + .{ .cp = 0xAE4A, .start = 6432, .len = 3 }, + .{ .cp = 0xAE4B, .start = 6435, .len = 3 }, + .{ .cp = 0xAE4C, .start = 6438, .len = 2 }, + .{ .cp = 0xAE4D, .start = 6440, .len = 3 }, + .{ .cp = 0xAE4E, .start = 6443, .len = 3 }, + .{ .cp = 0xAE4F, .start = 6446, .len = 3 }, + .{ .cp = 0xAE50, .start = 6449, .len = 3 }, + .{ .cp = 0xAE51, .start = 6452, .len = 3 }, + .{ .cp = 0xAE52, .start = 6455, .len = 3 }, + .{ .cp = 0xAE53, .start = 6458, .len = 3 }, + .{ .cp = 0xAE54, .start = 6461, .len = 3 }, + .{ .cp = 0xAE55, .start = 6464, .len = 3 }, + .{ .cp = 0xAE56, .start = 6467, .len = 3 }, + .{ .cp = 0xAE57, .start = 6470, .len = 3 }, + .{ .cp = 0xAE58, .start = 6473, .len = 3 }, + .{ .cp = 0xAE59, .start = 6476, .len = 3 }, + .{ .cp = 0xAE5A, .start = 6479, .len = 3 }, + .{ .cp = 0xAE5B, .start = 6482, .len = 3 }, + .{ .cp = 0xAE5C, .start = 6485, .len = 3 }, + .{ .cp = 0xAE5D, .start = 6488, .len = 3 }, + .{ .cp = 0xAE5E, .start = 6491, .len = 3 }, + .{ .cp = 0xAE5F, .start = 6494, .len = 3 }, + .{ .cp = 0xAE60, .start = 6497, .len = 3 }, + .{ .cp = 0xAE61, .start = 6500, .len = 3 }, + .{ .cp = 0xAE62, .start = 6503, .len = 3 }, + .{ .cp = 0xAE63, .start = 6506, .len = 3 }, + .{ .cp = 0xAE64, .start = 6509, .len = 3 }, + .{ .cp = 0xAE65, .start = 6512, .len = 3 }, + .{ .cp = 0xAE66, .start = 6515, .len = 3 }, + .{ .cp = 0xAE67, .start = 6518, .len = 3 }, + .{ .cp = 0xAE68, .start = 6521, .len = 2 }, + .{ .cp = 0xAE69, .start = 6523, .len = 3 }, + .{ .cp = 0xAE6A, .start = 6526, .len = 3 }, + .{ .cp = 0xAE6B, .start = 6529, .len = 3 }, + .{ .cp = 0xAE6C, .start = 6532, .len = 3 }, + .{ .cp = 0xAE6D, .start = 6535, .len = 3 }, + .{ .cp = 0xAE6E, .start = 6538, .len = 3 }, + .{ .cp = 0xAE6F, .start = 6541, .len = 3 }, + .{ .cp = 0xAE70, .start = 6544, .len = 3 }, + .{ .cp = 0xAE71, .start = 6547, .len = 3 }, + .{ .cp = 0xAE72, .start = 6550, .len = 3 }, + .{ .cp = 0xAE73, .start = 6553, .len = 3 }, + .{ .cp = 0xAE74, .start = 6556, .len = 3 }, + .{ .cp = 0xAE75, .start = 6559, .len = 3 }, + .{ .cp = 0xAE76, .start = 6562, .len = 3 }, + .{ .cp = 0xAE77, .start = 6565, .len = 3 }, + .{ .cp = 0xAE78, .start = 6568, .len = 3 }, + .{ .cp = 0xAE79, .start = 6571, .len = 3 }, + .{ .cp = 0xAE7A, .start = 6574, .len = 3 }, + .{ .cp = 0xAE7B, .start = 6577, .len = 3 }, + .{ .cp = 0xAE7C, .start = 6580, .len = 3 }, + .{ .cp = 0xAE7D, .start = 6583, .len = 3 }, + .{ .cp = 0xAE7E, .start = 6586, .len = 3 }, + .{ .cp = 0xAE7F, .start = 6589, .len = 3 }, + .{ .cp = 0xAE80, .start = 6592, .len = 3 }, + .{ .cp = 0xAE81, .start = 6595, .len = 3 }, + .{ .cp = 0xAE82, .start = 6598, .len = 3 }, + .{ .cp = 0xAE83, .start = 6601, .len = 3 }, + .{ .cp = 0xAE84, .start = 6604, .len = 2 }, + .{ .cp = 0xAE85, .start = 6606, .len = 3 }, + .{ .cp = 0xAE86, .start = 6609, .len = 3 }, + .{ .cp = 0xAE87, .start = 6612, .len = 3 }, + .{ .cp = 0xAE88, .start = 6615, .len = 3 }, + .{ .cp = 0xAE89, .start = 6618, .len = 3 }, + .{ .cp = 0xAE8A, .start = 6621, .len = 3 }, + .{ .cp = 0xAE8B, .start = 6624, .len = 3 }, + .{ .cp = 0xAE8C, .start = 6627, .len = 3 }, + .{ .cp = 0xAE8D, .start = 6630, .len = 3 }, + .{ .cp = 0xAE8E, .start = 6633, .len = 3 }, + .{ .cp = 0xAE8F, .start = 6636, .len = 3 }, + .{ .cp = 0xAE90, .start = 6639, .len = 3 }, + .{ .cp = 0xAE91, .start = 6642, .len = 3 }, + .{ .cp = 0xAE92, .start = 6645, .len = 3 }, + .{ .cp = 0xAE93, .start = 6648, .len = 3 }, + .{ .cp = 0xAE94, .start = 6651, .len = 3 }, + .{ .cp = 0xAE95, .start = 6654, .len = 3 }, + .{ .cp = 0xAE96, .start = 6657, .len = 3 }, + .{ .cp = 0xAE97, .start = 6660, .len = 3 }, + .{ .cp = 0xAE98, .start = 6663, .len = 3 }, + .{ .cp = 0xAE99, .start = 6666, .len = 3 }, + .{ .cp = 0xAE9A, .start = 6669, .len = 3 }, + .{ .cp = 0xAE9B, .start = 6672, .len = 3 }, + .{ .cp = 0xAE9C, .start = 6675, .len = 3 }, + .{ .cp = 0xAE9D, .start = 6678, .len = 3 }, + .{ .cp = 0xAE9E, .start = 6681, .len = 3 }, + .{ .cp = 0xAE9F, .start = 6684, .len = 3 }, + .{ .cp = 0xAEA0, .start = 6687, .len = 2 }, + .{ .cp = 0xAEA1, .start = 6689, .len = 3 }, + .{ .cp = 0xAEA2, .start = 6692, .len = 3 }, + .{ .cp = 0xAEA3, .start = 6695, .len = 3 }, + .{ .cp = 0xAEA4, .start = 6698, .len = 3 }, + .{ .cp = 0xAEA5, .start = 6701, .len = 3 }, + .{ .cp = 0xAEA6, .start = 6704, .len = 3 }, + .{ .cp = 0xAEA7, .start = 6707, .len = 3 }, + .{ .cp = 0xAEA8, .start = 6710, .len = 3 }, + .{ .cp = 0xAEA9, .start = 6713, .len = 3 }, + .{ .cp = 0xAEAA, .start = 6716, .len = 3 }, + .{ .cp = 0xAEAB, .start = 6719, .len = 3 }, + .{ .cp = 0xAEAC, .start = 6722, .len = 3 }, + .{ .cp = 0xAEAD, .start = 6725, .len = 3 }, + .{ .cp = 0xAEAE, .start = 6728, .len = 3 }, + .{ .cp = 0xAEAF, .start = 6731, .len = 3 }, + .{ .cp = 0xAEB0, .start = 6734, .len = 3 }, + .{ .cp = 0xAEB1, .start = 6737, .len = 3 }, + .{ .cp = 0xAEB2, .start = 6740, .len = 3 }, + .{ .cp = 0xAEB3, .start = 6743, .len = 3 }, + .{ .cp = 0xAEB4, .start = 6746, .len = 3 }, + .{ .cp = 0xAEB5, .start = 6749, .len = 3 }, + .{ .cp = 0xAEB6, .start = 6752, .len = 3 }, + .{ .cp = 0xAEB7, .start = 6755, .len = 3 }, + .{ .cp = 0xAEB8, .start = 6758, .len = 3 }, + .{ .cp = 0xAEB9, .start = 6761, .len = 3 }, + .{ .cp = 0xAEBA, .start = 6764, .len = 3 }, + .{ .cp = 0xAEBB, .start = 6767, .len = 3 }, + .{ .cp = 0xAEBC, .start = 6770, .len = 2 }, + .{ .cp = 0xAEBD, .start = 6772, .len = 3 }, + .{ .cp = 0xAEBE, .start = 6775, .len = 3 }, + .{ .cp = 0xAEBF, .start = 6778, .len = 3 }, + .{ .cp = 0xAEC0, .start = 6781, .len = 3 }, + .{ .cp = 0xAEC1, .start = 6784, .len = 3 }, + .{ .cp = 0xAEC2, .start = 6787, .len = 3 }, + .{ .cp = 0xAEC3, .start = 6790, .len = 3 }, + .{ .cp = 0xAEC4, .start = 6793, .len = 3 }, + .{ .cp = 0xAEC5, .start = 6796, .len = 3 }, + .{ .cp = 0xAEC6, .start = 6799, .len = 3 }, + .{ .cp = 0xAEC7, .start = 6802, .len = 3 }, + .{ .cp = 0xAEC8, .start = 6805, .len = 3 }, + .{ .cp = 0xAEC9, .start = 6808, .len = 3 }, + .{ .cp = 0xAECA, .start = 6811, .len = 3 }, + .{ .cp = 0xAECB, .start = 6814, .len = 3 }, + .{ .cp = 0xAECC, .start = 6817, .len = 3 }, + .{ .cp = 0xAECD, .start = 6820, .len = 3 }, + .{ .cp = 0xAECE, .start = 6823, .len = 3 }, + .{ .cp = 0xAECF, .start = 6826, .len = 3 }, + .{ .cp = 0xAED0, .start = 6829, .len = 3 }, + .{ .cp = 0xAED1, .start = 6832, .len = 3 }, + .{ .cp = 0xAED2, .start = 6835, .len = 3 }, + .{ .cp = 0xAED3, .start = 6838, .len = 3 }, + .{ .cp = 0xAED4, .start = 6841, .len = 3 }, + .{ .cp = 0xAED5, .start = 6844, .len = 3 }, + .{ .cp = 0xAED6, .start = 6847, .len = 3 }, + .{ .cp = 0xAED7, .start = 6850, .len = 3 }, + .{ .cp = 0xAED8, .start = 6853, .len = 2 }, + .{ .cp = 0xAED9, .start = 6855, .len = 3 }, + .{ .cp = 0xAEDA, .start = 6858, .len = 3 }, + .{ .cp = 0xAEDB, .start = 6861, .len = 3 }, + .{ .cp = 0xAEDC, .start = 6864, .len = 3 }, + .{ .cp = 0xAEDD, .start = 6867, .len = 3 }, + .{ .cp = 0xAEDE, .start = 6870, .len = 3 }, + .{ .cp = 0xAEDF, .start = 6873, .len = 3 }, + .{ .cp = 0xAEE0, .start = 6876, .len = 3 }, + .{ .cp = 0xAEE1, .start = 6879, .len = 3 }, + .{ .cp = 0xAEE2, .start = 6882, .len = 3 }, + .{ .cp = 0xAEE3, .start = 6885, .len = 3 }, + .{ .cp = 0xAEE4, .start = 6888, .len = 3 }, + .{ .cp = 0xAEE5, .start = 6891, .len = 3 }, + .{ .cp = 0xAEE6, .start = 6894, .len = 3 }, + .{ .cp = 0xAEE7, .start = 6897, .len = 3 }, + .{ .cp = 0xAEE8, .start = 6900, .len = 3 }, + .{ .cp = 0xAEE9, .start = 6903, .len = 3 }, + .{ .cp = 0xAEEA, .start = 6906, .len = 3 }, + .{ .cp = 0xAEEB, .start = 6909, .len = 3 }, + .{ .cp = 0xAEEC, .start = 6912, .len = 3 }, + .{ .cp = 0xAEED, .start = 6915, .len = 3 }, + .{ .cp = 0xAEEE, .start = 6918, .len = 3 }, + .{ .cp = 0xAEEF, .start = 6921, .len = 3 }, + .{ .cp = 0xAEF0, .start = 6924, .len = 3 }, + .{ .cp = 0xAEF1, .start = 6927, .len = 3 }, + .{ .cp = 0xAEF2, .start = 6930, .len = 3 }, + .{ .cp = 0xAEF3, .start = 6933, .len = 3 }, + .{ .cp = 0xAEF4, .start = 6936, .len = 2 }, + .{ .cp = 0xAEF5, .start = 6938, .len = 3 }, + .{ .cp = 0xAEF6, .start = 6941, .len = 3 }, + .{ .cp = 0xAEF7, .start = 6944, .len = 3 }, + .{ .cp = 0xAEF8, .start = 6947, .len = 3 }, + .{ .cp = 0xAEF9, .start = 6950, .len = 3 }, + .{ .cp = 0xAEFA, .start = 6953, .len = 3 }, + .{ .cp = 0xAEFB, .start = 6956, .len = 3 }, + .{ .cp = 0xAEFC, .start = 6959, .len = 3 }, + .{ .cp = 0xAEFD, .start = 6962, .len = 3 }, + .{ .cp = 0xAEFE, .start = 6965, .len = 3 }, + .{ .cp = 0xAEFF, .start = 6968, .len = 3 }, + .{ .cp = 0xAF00, .start = 6971, .len = 3 }, + .{ .cp = 0xAF01, .start = 6974, .len = 3 }, + .{ .cp = 0xAF02, .start = 6977, .len = 3 }, + .{ .cp = 0xAF03, .start = 6980, .len = 3 }, + .{ .cp = 0xAF04, .start = 6983, .len = 3 }, + .{ .cp = 0xAF05, .start = 6986, .len = 3 }, + .{ .cp = 0xAF06, .start = 6989, .len = 3 }, + .{ .cp = 0xAF07, .start = 6992, .len = 3 }, + .{ .cp = 0xAF08, .start = 6995, .len = 3 }, + .{ .cp = 0xAF09, .start = 6998, .len = 3 }, + .{ .cp = 0xAF0A, .start = 7001, .len = 3 }, + .{ .cp = 0xAF0B, .start = 7004, .len = 3 }, + .{ .cp = 0xAF0C, .start = 7007, .len = 3 }, + .{ .cp = 0xAF0D, .start = 7010, .len = 3 }, + .{ .cp = 0xAF0E, .start = 7013, .len = 3 }, + .{ .cp = 0xAF0F, .start = 7016, .len = 3 }, + .{ .cp = 0xAF10, .start = 7019, .len = 2 }, + .{ .cp = 0xAF11, .start = 7021, .len = 3 }, + .{ .cp = 0xAF12, .start = 7024, .len = 3 }, + .{ .cp = 0xAF13, .start = 7027, .len = 3 }, + .{ .cp = 0xAF14, .start = 7030, .len = 3 }, + .{ .cp = 0xAF15, .start = 7033, .len = 3 }, + .{ .cp = 0xAF16, .start = 7036, .len = 3 }, + .{ .cp = 0xAF17, .start = 7039, .len = 3 }, + .{ .cp = 0xAF18, .start = 7042, .len = 3 }, + .{ .cp = 0xAF19, .start = 7045, .len = 3 }, + .{ .cp = 0xAF1A, .start = 7048, .len = 3 }, + .{ .cp = 0xAF1B, .start = 7051, .len = 3 }, + .{ .cp = 0xAF1C, .start = 7054, .len = 3 }, + .{ .cp = 0xAF1D, .start = 7057, .len = 3 }, + .{ .cp = 0xAF1E, .start = 7060, .len = 3 }, + .{ .cp = 0xAF1F, .start = 7063, .len = 3 }, + .{ .cp = 0xAF20, .start = 7066, .len = 3 }, + .{ .cp = 0xAF21, .start = 7069, .len = 3 }, + .{ .cp = 0xAF22, .start = 7072, .len = 3 }, + .{ .cp = 0xAF23, .start = 7075, .len = 3 }, + .{ .cp = 0xAF24, .start = 7078, .len = 3 }, + .{ .cp = 0xAF25, .start = 7081, .len = 3 }, + .{ .cp = 0xAF26, .start = 7084, .len = 3 }, + .{ .cp = 0xAF27, .start = 7087, .len = 3 }, + .{ .cp = 0xAF28, .start = 7090, .len = 3 }, + .{ .cp = 0xAF29, .start = 7093, .len = 3 }, + .{ .cp = 0xAF2A, .start = 7096, .len = 3 }, + .{ .cp = 0xAF2B, .start = 7099, .len = 3 }, + .{ .cp = 0xAF2C, .start = 7102, .len = 2 }, + .{ .cp = 0xAF2D, .start = 7104, .len = 3 }, + .{ .cp = 0xAF2E, .start = 7107, .len = 3 }, + .{ .cp = 0xAF2F, .start = 7110, .len = 3 }, + .{ .cp = 0xAF30, .start = 7113, .len = 3 }, + .{ .cp = 0xAF31, .start = 7116, .len = 3 }, + .{ .cp = 0xAF32, .start = 7119, .len = 3 }, + .{ .cp = 0xAF33, .start = 7122, .len = 3 }, + .{ .cp = 0xAF34, .start = 7125, .len = 3 }, + .{ .cp = 0xAF35, .start = 7128, .len = 3 }, + .{ .cp = 0xAF36, .start = 7131, .len = 3 }, + .{ .cp = 0xAF37, .start = 7134, .len = 3 }, + .{ .cp = 0xAF38, .start = 7137, .len = 3 }, + .{ .cp = 0xAF39, .start = 7140, .len = 3 }, + .{ .cp = 0xAF3A, .start = 7143, .len = 3 }, + .{ .cp = 0xAF3B, .start = 7146, .len = 3 }, + .{ .cp = 0xAF3C, .start = 7149, .len = 3 }, + .{ .cp = 0xAF3D, .start = 7152, .len = 3 }, + .{ .cp = 0xAF3E, .start = 7155, .len = 3 }, + .{ .cp = 0xAF3F, .start = 7158, .len = 3 }, + .{ .cp = 0xAF40, .start = 7161, .len = 3 }, + .{ .cp = 0xAF41, .start = 7164, .len = 3 }, + .{ .cp = 0xAF42, .start = 7167, .len = 3 }, + .{ .cp = 0xAF43, .start = 7170, .len = 3 }, + .{ .cp = 0xAF44, .start = 7173, .len = 3 }, + .{ .cp = 0xAF45, .start = 7176, .len = 3 }, + .{ .cp = 0xAF46, .start = 7179, .len = 3 }, + .{ .cp = 0xAF47, .start = 7182, .len = 3 }, + .{ .cp = 0xAF48, .start = 7185, .len = 2 }, + .{ .cp = 0xAF49, .start = 7187, .len = 3 }, + .{ .cp = 0xAF4A, .start = 7190, .len = 3 }, + .{ .cp = 0xAF4B, .start = 7193, .len = 3 }, + .{ .cp = 0xAF4C, .start = 7196, .len = 3 }, + .{ .cp = 0xAF4D, .start = 7199, .len = 3 }, + .{ .cp = 0xAF4E, .start = 7202, .len = 3 }, + .{ .cp = 0xAF4F, .start = 7205, .len = 3 }, + .{ .cp = 0xAF50, .start = 7208, .len = 3 }, + .{ .cp = 0xAF51, .start = 7211, .len = 3 }, + .{ .cp = 0xAF52, .start = 7214, .len = 3 }, + .{ .cp = 0xAF53, .start = 7217, .len = 3 }, + .{ .cp = 0xAF54, .start = 7220, .len = 3 }, + .{ .cp = 0xAF55, .start = 7223, .len = 3 }, + .{ .cp = 0xAF56, .start = 7226, .len = 3 }, + .{ .cp = 0xAF57, .start = 7229, .len = 3 }, + .{ .cp = 0xAF58, .start = 7232, .len = 3 }, + .{ .cp = 0xAF59, .start = 7235, .len = 3 }, + .{ .cp = 0xAF5A, .start = 7238, .len = 3 }, + .{ .cp = 0xAF5B, .start = 7241, .len = 3 }, + .{ .cp = 0xAF5C, .start = 7244, .len = 3 }, + .{ .cp = 0xAF5D, .start = 7247, .len = 3 }, + .{ .cp = 0xAF5E, .start = 7250, .len = 3 }, + .{ .cp = 0xAF5F, .start = 7253, .len = 3 }, + .{ .cp = 0xAF60, .start = 7256, .len = 3 }, + .{ .cp = 0xAF61, .start = 7259, .len = 3 }, + .{ .cp = 0xAF62, .start = 7262, .len = 3 }, + .{ .cp = 0xAF63, .start = 7265, .len = 3 }, + .{ .cp = 0xAF64, .start = 7268, .len = 2 }, + .{ .cp = 0xAF65, .start = 7270, .len = 3 }, + .{ .cp = 0xAF66, .start = 7273, .len = 3 }, + .{ .cp = 0xAF67, .start = 7276, .len = 3 }, + .{ .cp = 0xAF68, .start = 7279, .len = 3 }, + .{ .cp = 0xAF69, .start = 7282, .len = 3 }, + .{ .cp = 0xAF6A, .start = 7285, .len = 3 }, + .{ .cp = 0xAF6B, .start = 7288, .len = 3 }, + .{ .cp = 0xAF6C, .start = 7291, .len = 3 }, + .{ .cp = 0xAF6D, .start = 7294, .len = 3 }, + .{ .cp = 0xAF6E, .start = 7297, .len = 3 }, + .{ .cp = 0xAF6F, .start = 7300, .len = 3 }, + .{ .cp = 0xAF70, .start = 7303, .len = 3 }, + .{ .cp = 0xAF71, .start = 7306, .len = 3 }, + .{ .cp = 0xAF72, .start = 7309, .len = 3 }, + .{ .cp = 0xAF73, .start = 7312, .len = 3 }, + .{ .cp = 0xAF74, .start = 7315, .len = 3 }, + .{ .cp = 0xAF75, .start = 7318, .len = 3 }, + .{ .cp = 0xAF76, .start = 7321, .len = 3 }, + .{ .cp = 0xAF77, .start = 7324, .len = 3 }, + .{ .cp = 0xAF78, .start = 7327, .len = 3 }, + .{ .cp = 0xAF79, .start = 7330, .len = 3 }, + .{ .cp = 0xAF7A, .start = 7333, .len = 3 }, + .{ .cp = 0xAF7B, .start = 7336, .len = 3 }, + .{ .cp = 0xAF7C, .start = 7339, .len = 3 }, + .{ .cp = 0xAF7D, .start = 7342, .len = 3 }, + .{ .cp = 0xAF7E, .start = 7345, .len = 3 }, + .{ .cp = 0xAF7F, .start = 7348, .len = 3 }, + .{ .cp = 0xAF80, .start = 7351, .len = 2 }, + .{ .cp = 0xAF81, .start = 7353, .len = 3 }, + .{ .cp = 0xAF82, .start = 7356, .len = 3 }, + .{ .cp = 0xAF83, .start = 7359, .len = 3 }, + .{ .cp = 0xAF84, .start = 7362, .len = 3 }, + .{ .cp = 0xAF85, .start = 7365, .len = 3 }, + .{ .cp = 0xAF86, .start = 7368, .len = 3 }, + .{ .cp = 0xAF87, .start = 7371, .len = 3 }, + .{ .cp = 0xAF88, .start = 7374, .len = 3 }, + .{ .cp = 0xAF89, .start = 7377, .len = 3 }, + .{ .cp = 0xAF8A, .start = 7380, .len = 3 }, + .{ .cp = 0xAF8B, .start = 7383, .len = 3 }, + .{ .cp = 0xAF8C, .start = 7386, .len = 3 }, + .{ .cp = 0xAF8D, .start = 7389, .len = 3 }, + .{ .cp = 0xAF8E, .start = 7392, .len = 3 }, + .{ .cp = 0xAF8F, .start = 7395, .len = 3 }, + .{ .cp = 0xAF90, .start = 7398, .len = 3 }, + .{ .cp = 0xAF91, .start = 7401, .len = 3 }, + .{ .cp = 0xAF92, .start = 7404, .len = 3 }, + .{ .cp = 0xAF93, .start = 7407, .len = 3 }, + .{ .cp = 0xAF94, .start = 7410, .len = 3 }, + .{ .cp = 0xAF95, .start = 7413, .len = 3 }, + .{ .cp = 0xAF96, .start = 7416, .len = 3 }, + .{ .cp = 0xAF97, .start = 7419, .len = 3 }, + .{ .cp = 0xAF98, .start = 7422, .len = 3 }, + .{ .cp = 0xAF99, .start = 7425, .len = 3 }, + .{ .cp = 0xAF9A, .start = 7428, .len = 3 }, + .{ .cp = 0xAF9B, .start = 7431, .len = 3 }, + .{ .cp = 0xAF9C, .start = 7434, .len = 2 }, + .{ .cp = 0xAF9D, .start = 7436, .len = 3 }, + .{ .cp = 0xAF9E, .start = 7439, .len = 3 }, + .{ .cp = 0xAF9F, .start = 7442, .len = 3 }, + .{ .cp = 0xAFA0, .start = 7445, .len = 3 }, + .{ .cp = 0xAFA1, .start = 7448, .len = 3 }, + .{ .cp = 0xAFA2, .start = 7451, .len = 3 }, + .{ .cp = 0xAFA3, .start = 7454, .len = 3 }, + .{ .cp = 0xAFA4, .start = 7457, .len = 3 }, + .{ .cp = 0xAFA5, .start = 7460, .len = 3 }, + .{ .cp = 0xAFA6, .start = 7463, .len = 3 }, + .{ .cp = 0xAFA7, .start = 7466, .len = 3 }, + .{ .cp = 0xAFA8, .start = 7469, .len = 3 }, + .{ .cp = 0xAFA9, .start = 7472, .len = 3 }, + .{ .cp = 0xAFAA, .start = 7475, .len = 3 }, + .{ .cp = 0xAFAB, .start = 7478, .len = 3 }, + .{ .cp = 0xAFAC, .start = 7481, .len = 3 }, + .{ .cp = 0xAFAD, .start = 7484, .len = 3 }, + .{ .cp = 0xAFAE, .start = 7487, .len = 3 }, + .{ .cp = 0xAFAF, .start = 7490, .len = 3 }, + .{ .cp = 0xAFB0, .start = 7493, .len = 3 }, + .{ .cp = 0xAFB1, .start = 7496, .len = 3 }, + .{ .cp = 0xAFB2, .start = 7499, .len = 3 }, + .{ .cp = 0xAFB3, .start = 7502, .len = 3 }, + .{ .cp = 0xAFB4, .start = 7505, .len = 3 }, + .{ .cp = 0xAFB5, .start = 7508, .len = 3 }, + .{ .cp = 0xAFB6, .start = 7511, .len = 3 }, + .{ .cp = 0xAFB7, .start = 7514, .len = 3 }, + .{ .cp = 0xAFB8, .start = 7517, .len = 2 }, + .{ .cp = 0xAFB9, .start = 7519, .len = 3 }, + .{ .cp = 0xAFBA, .start = 7522, .len = 3 }, + .{ .cp = 0xAFBB, .start = 7525, .len = 3 }, + .{ .cp = 0xAFBC, .start = 7528, .len = 3 }, + .{ .cp = 0xAFBD, .start = 7531, .len = 3 }, + .{ .cp = 0xAFBE, .start = 7534, .len = 3 }, + .{ .cp = 0xAFBF, .start = 7537, .len = 3 }, + .{ .cp = 0xAFC0, .start = 7540, .len = 3 }, + .{ .cp = 0xAFC1, .start = 7543, .len = 3 }, + .{ .cp = 0xAFC2, .start = 7546, .len = 3 }, + .{ .cp = 0xAFC3, .start = 7549, .len = 3 }, + .{ .cp = 0xAFC4, .start = 7552, .len = 3 }, + .{ .cp = 0xAFC5, .start = 7555, .len = 3 }, + .{ .cp = 0xAFC6, .start = 7558, .len = 3 }, + .{ .cp = 0xAFC7, .start = 7561, .len = 3 }, + .{ .cp = 0xAFC8, .start = 7564, .len = 3 }, + .{ .cp = 0xAFC9, .start = 7567, .len = 3 }, + .{ .cp = 0xAFCA, .start = 7570, .len = 3 }, + .{ .cp = 0xAFCB, .start = 7573, .len = 3 }, + .{ .cp = 0xAFCC, .start = 7576, .len = 3 }, + .{ .cp = 0xAFCD, .start = 7579, .len = 3 }, + .{ .cp = 0xAFCE, .start = 7582, .len = 3 }, + .{ .cp = 0xAFCF, .start = 7585, .len = 3 }, + .{ .cp = 0xAFD0, .start = 7588, .len = 3 }, + .{ .cp = 0xAFD1, .start = 7591, .len = 3 }, + .{ .cp = 0xAFD2, .start = 7594, .len = 3 }, + .{ .cp = 0xAFD3, .start = 7597, .len = 3 }, + .{ .cp = 0xAFD4, .start = 7600, .len = 2 }, + .{ .cp = 0xAFD5, .start = 7602, .len = 3 }, + .{ .cp = 0xAFD6, .start = 7605, .len = 3 }, + .{ .cp = 0xAFD7, .start = 7608, .len = 3 }, + .{ .cp = 0xAFD8, .start = 7611, .len = 3 }, + .{ .cp = 0xAFD9, .start = 7614, .len = 3 }, + .{ .cp = 0xAFDA, .start = 7617, .len = 3 }, + .{ .cp = 0xAFDB, .start = 7620, .len = 3 }, + .{ .cp = 0xAFDC, .start = 7623, .len = 3 }, + .{ .cp = 0xAFDD, .start = 7626, .len = 3 }, + .{ .cp = 0xAFDE, .start = 7629, .len = 3 }, + .{ .cp = 0xAFDF, .start = 7632, .len = 3 }, + .{ .cp = 0xAFE0, .start = 7635, .len = 3 }, + .{ .cp = 0xAFE1, .start = 7638, .len = 3 }, + .{ .cp = 0xAFE2, .start = 7641, .len = 3 }, + .{ .cp = 0xAFE3, .start = 7644, .len = 3 }, + .{ .cp = 0xAFE4, .start = 7647, .len = 3 }, + .{ .cp = 0xAFE5, .start = 7650, .len = 3 }, + .{ .cp = 0xAFE6, .start = 7653, .len = 3 }, + .{ .cp = 0xAFE7, .start = 7656, .len = 3 }, + .{ .cp = 0xAFE8, .start = 7659, .len = 3 }, + .{ .cp = 0xAFE9, .start = 7662, .len = 3 }, + .{ .cp = 0xAFEA, .start = 7665, .len = 3 }, + .{ .cp = 0xAFEB, .start = 7668, .len = 3 }, + .{ .cp = 0xAFEC, .start = 7671, .len = 3 }, + .{ .cp = 0xAFED, .start = 7674, .len = 3 }, + .{ .cp = 0xAFEE, .start = 7677, .len = 3 }, + .{ .cp = 0xAFEF, .start = 7680, .len = 3 }, + .{ .cp = 0xAFF0, .start = 7683, .len = 2 }, + .{ .cp = 0xAFF1, .start = 7685, .len = 3 }, + .{ .cp = 0xAFF2, .start = 7688, .len = 3 }, + .{ .cp = 0xAFF3, .start = 7691, .len = 3 }, + .{ .cp = 0xAFF4, .start = 7694, .len = 3 }, + .{ .cp = 0xAFF5, .start = 7697, .len = 3 }, + .{ .cp = 0xAFF6, .start = 7700, .len = 3 }, + .{ .cp = 0xAFF7, .start = 7703, .len = 3 }, + .{ .cp = 0xAFF8, .start = 7706, .len = 3 }, + .{ .cp = 0xAFF9, .start = 7709, .len = 3 }, + .{ .cp = 0xAFFA, .start = 7712, .len = 3 }, + .{ .cp = 0xAFFB, .start = 7715, .len = 3 }, + .{ .cp = 0xAFFC, .start = 7718, .len = 3 }, + .{ .cp = 0xAFFD, .start = 7721, .len = 3 }, + .{ .cp = 0xAFFE, .start = 7724, .len = 3 }, + .{ .cp = 0xAFFF, .start = 7727, .len = 3 }, + .{ .cp = 0xB000, .start = 7730, .len = 3 }, + .{ .cp = 0xB001, .start = 7733, .len = 3 }, + .{ .cp = 0xB002, .start = 7736, .len = 3 }, + .{ .cp = 0xB003, .start = 7739, .len = 3 }, + .{ .cp = 0xB004, .start = 7742, .len = 3 }, + .{ .cp = 0xB005, .start = 7745, .len = 3 }, + .{ .cp = 0xB006, .start = 7748, .len = 3 }, + .{ .cp = 0xB007, .start = 7751, .len = 3 }, + .{ .cp = 0xB008, .start = 7754, .len = 3 }, + .{ .cp = 0xB009, .start = 7757, .len = 3 }, + .{ .cp = 0xB00A, .start = 7760, .len = 3 }, + .{ .cp = 0xB00B, .start = 7763, .len = 3 }, + .{ .cp = 0xB00C, .start = 7766, .len = 2 }, + .{ .cp = 0xB00D, .start = 7768, .len = 3 }, + .{ .cp = 0xB00E, .start = 7771, .len = 3 }, + .{ .cp = 0xB00F, .start = 7774, .len = 3 }, + .{ .cp = 0xB010, .start = 7777, .len = 3 }, + .{ .cp = 0xB011, .start = 7780, .len = 3 }, + .{ .cp = 0xB012, .start = 7783, .len = 3 }, + .{ .cp = 0xB013, .start = 7786, .len = 3 }, + .{ .cp = 0xB014, .start = 7789, .len = 3 }, + .{ .cp = 0xB015, .start = 7792, .len = 3 }, + .{ .cp = 0xB016, .start = 7795, .len = 3 }, + .{ .cp = 0xB017, .start = 7798, .len = 3 }, + .{ .cp = 0xB018, .start = 7801, .len = 3 }, + .{ .cp = 0xB019, .start = 7804, .len = 3 }, + .{ .cp = 0xB01A, .start = 7807, .len = 3 }, + .{ .cp = 0xB01B, .start = 7810, .len = 3 }, + .{ .cp = 0xB01C, .start = 7813, .len = 3 }, + .{ .cp = 0xB01D, .start = 7816, .len = 3 }, + .{ .cp = 0xB01E, .start = 7819, .len = 3 }, + .{ .cp = 0xB01F, .start = 7822, .len = 3 }, + .{ .cp = 0xB020, .start = 7825, .len = 3 }, + .{ .cp = 0xB021, .start = 7828, .len = 3 }, + .{ .cp = 0xB022, .start = 7831, .len = 3 }, + .{ .cp = 0xB023, .start = 7834, .len = 3 }, + .{ .cp = 0xB024, .start = 7837, .len = 3 }, + .{ .cp = 0xB025, .start = 7840, .len = 3 }, + .{ .cp = 0xB026, .start = 7843, .len = 3 }, + .{ .cp = 0xB027, .start = 7846, .len = 3 }, + .{ .cp = 0xB028, .start = 7849, .len = 2 }, + .{ .cp = 0xB029, .start = 7851, .len = 3 }, + .{ .cp = 0xB02A, .start = 7854, .len = 3 }, + .{ .cp = 0xB02B, .start = 7857, .len = 3 }, + .{ .cp = 0xB02C, .start = 7860, .len = 3 }, + .{ .cp = 0xB02D, .start = 7863, .len = 3 }, + .{ .cp = 0xB02E, .start = 7866, .len = 3 }, + .{ .cp = 0xB02F, .start = 7869, .len = 3 }, + .{ .cp = 0xB030, .start = 7872, .len = 3 }, + .{ .cp = 0xB031, .start = 7875, .len = 3 }, + .{ .cp = 0xB032, .start = 7878, .len = 3 }, + .{ .cp = 0xB033, .start = 7881, .len = 3 }, + .{ .cp = 0xB034, .start = 7884, .len = 3 }, + .{ .cp = 0xB035, .start = 7887, .len = 3 }, + .{ .cp = 0xB036, .start = 7890, .len = 3 }, + .{ .cp = 0xB037, .start = 7893, .len = 3 }, + .{ .cp = 0xB038, .start = 7896, .len = 3 }, + .{ .cp = 0xB039, .start = 7899, .len = 3 }, + .{ .cp = 0xB03A, .start = 7902, .len = 3 }, + .{ .cp = 0xB03B, .start = 7905, .len = 3 }, + .{ .cp = 0xB03C, .start = 7908, .len = 3 }, + .{ .cp = 0xB03D, .start = 7911, .len = 3 }, + .{ .cp = 0xB03E, .start = 7914, .len = 3 }, + .{ .cp = 0xB03F, .start = 7917, .len = 3 }, + .{ .cp = 0xB040, .start = 7920, .len = 3 }, + .{ .cp = 0xB041, .start = 7923, .len = 3 }, + .{ .cp = 0xB042, .start = 7926, .len = 3 }, + .{ .cp = 0xB043, .start = 7929, .len = 3 }, + .{ .cp = 0xB044, .start = 7932, .len = 2 }, + .{ .cp = 0xB045, .start = 7934, .len = 3 }, + .{ .cp = 0xB046, .start = 7937, .len = 3 }, + .{ .cp = 0xB047, .start = 7940, .len = 3 }, + .{ .cp = 0xB048, .start = 7943, .len = 3 }, + .{ .cp = 0xB049, .start = 7946, .len = 3 }, + .{ .cp = 0xB04A, .start = 7949, .len = 3 }, + .{ .cp = 0xB04B, .start = 7952, .len = 3 }, + .{ .cp = 0xB04C, .start = 7955, .len = 3 }, + .{ .cp = 0xB04D, .start = 7958, .len = 3 }, + .{ .cp = 0xB04E, .start = 7961, .len = 3 }, + .{ .cp = 0xB04F, .start = 7964, .len = 3 }, + .{ .cp = 0xB050, .start = 7967, .len = 3 }, + .{ .cp = 0xB051, .start = 7970, .len = 3 }, + .{ .cp = 0xB052, .start = 7973, .len = 3 }, + .{ .cp = 0xB053, .start = 7976, .len = 3 }, + .{ .cp = 0xB054, .start = 7979, .len = 3 }, + .{ .cp = 0xB055, .start = 7982, .len = 3 }, + .{ .cp = 0xB056, .start = 7985, .len = 3 }, + .{ .cp = 0xB057, .start = 7988, .len = 3 }, + .{ .cp = 0xB058, .start = 7991, .len = 3 }, + .{ .cp = 0xB059, .start = 7994, .len = 3 }, + .{ .cp = 0xB05A, .start = 7997, .len = 3 }, + .{ .cp = 0xB05B, .start = 8000, .len = 3 }, + .{ .cp = 0xB05C, .start = 8003, .len = 3 }, + .{ .cp = 0xB05D, .start = 8006, .len = 3 }, + .{ .cp = 0xB05E, .start = 8009, .len = 3 }, + .{ .cp = 0xB05F, .start = 8012, .len = 3 }, + .{ .cp = 0xB060, .start = 8015, .len = 2 }, + .{ .cp = 0xB061, .start = 8017, .len = 3 }, + .{ .cp = 0xB062, .start = 8020, .len = 3 }, + .{ .cp = 0xB063, .start = 8023, .len = 3 }, + .{ .cp = 0xB064, .start = 8026, .len = 3 }, + .{ .cp = 0xB065, .start = 8029, .len = 3 }, + .{ .cp = 0xB066, .start = 8032, .len = 3 }, + .{ .cp = 0xB067, .start = 8035, .len = 3 }, + .{ .cp = 0xB068, .start = 8038, .len = 3 }, + .{ .cp = 0xB069, .start = 8041, .len = 3 }, + .{ .cp = 0xB06A, .start = 8044, .len = 3 }, + .{ .cp = 0xB06B, .start = 8047, .len = 3 }, + .{ .cp = 0xB06C, .start = 8050, .len = 3 }, + .{ .cp = 0xB06D, .start = 8053, .len = 3 }, + .{ .cp = 0xB06E, .start = 8056, .len = 3 }, + .{ .cp = 0xB06F, .start = 8059, .len = 3 }, + .{ .cp = 0xB070, .start = 8062, .len = 3 }, + .{ .cp = 0xB071, .start = 8065, .len = 3 }, + .{ .cp = 0xB072, .start = 8068, .len = 3 }, + .{ .cp = 0xB073, .start = 8071, .len = 3 }, + .{ .cp = 0xB074, .start = 8074, .len = 3 }, + .{ .cp = 0xB075, .start = 8077, .len = 3 }, + .{ .cp = 0xB076, .start = 8080, .len = 3 }, + .{ .cp = 0xB077, .start = 8083, .len = 3 }, + .{ .cp = 0xB078, .start = 8086, .len = 3 }, + .{ .cp = 0xB079, .start = 8089, .len = 3 }, + .{ .cp = 0xB07A, .start = 8092, .len = 3 }, + .{ .cp = 0xB07B, .start = 8095, .len = 3 }, + .{ .cp = 0xB07C, .start = 8098, .len = 2 }, + .{ .cp = 0xB07D, .start = 8100, .len = 3 }, + .{ .cp = 0xB07E, .start = 8103, .len = 3 }, + .{ .cp = 0xB07F, .start = 8106, .len = 3 }, + .{ .cp = 0xB080, .start = 8109, .len = 3 }, + .{ .cp = 0xB081, .start = 8112, .len = 3 }, + .{ .cp = 0xB082, .start = 8115, .len = 3 }, + .{ .cp = 0xB083, .start = 8118, .len = 3 }, + .{ .cp = 0xB084, .start = 8121, .len = 3 }, + .{ .cp = 0xB085, .start = 8124, .len = 3 }, + .{ .cp = 0xB086, .start = 8127, .len = 3 }, + .{ .cp = 0xB087, .start = 8130, .len = 3 }, + .{ .cp = 0xB088, .start = 8133, .len = 3 }, + .{ .cp = 0xB089, .start = 8136, .len = 3 }, + .{ .cp = 0xB08A, .start = 8139, .len = 3 }, + .{ .cp = 0xB08B, .start = 8142, .len = 3 }, + .{ .cp = 0xB08C, .start = 8145, .len = 3 }, + .{ .cp = 0xB08D, .start = 8148, .len = 3 }, + .{ .cp = 0xB08E, .start = 8151, .len = 3 }, + .{ .cp = 0xB08F, .start = 8154, .len = 3 }, + .{ .cp = 0xB090, .start = 8157, .len = 3 }, + .{ .cp = 0xB091, .start = 8160, .len = 3 }, + .{ .cp = 0xB092, .start = 8163, .len = 3 }, + .{ .cp = 0xB093, .start = 8166, .len = 3 }, + .{ .cp = 0xB094, .start = 8169, .len = 3 }, + .{ .cp = 0xB095, .start = 8172, .len = 3 }, + .{ .cp = 0xB096, .start = 8175, .len = 3 }, + .{ .cp = 0xB097, .start = 8178, .len = 3 }, + .{ .cp = 0xB098, .start = 8181, .len = 2 }, + .{ .cp = 0xB099, .start = 8183, .len = 3 }, + .{ .cp = 0xB09A, .start = 8186, .len = 3 }, + .{ .cp = 0xB09B, .start = 8189, .len = 3 }, + .{ .cp = 0xB09C, .start = 8192, .len = 3 }, + .{ .cp = 0xB09D, .start = 8195, .len = 3 }, + .{ .cp = 0xB09E, .start = 8198, .len = 3 }, + .{ .cp = 0xB09F, .start = 8201, .len = 3 }, + .{ .cp = 0xB0A0, .start = 8204, .len = 3 }, + .{ .cp = 0xB0A1, .start = 8207, .len = 3 }, + .{ .cp = 0xB0A2, .start = 8210, .len = 3 }, + .{ .cp = 0xB0A3, .start = 8213, .len = 3 }, + .{ .cp = 0xB0A4, .start = 8216, .len = 3 }, + .{ .cp = 0xB0A5, .start = 8219, .len = 3 }, + .{ .cp = 0xB0A6, .start = 8222, .len = 3 }, + .{ .cp = 0xB0A7, .start = 8225, .len = 3 }, + .{ .cp = 0xB0A8, .start = 8228, .len = 3 }, + .{ .cp = 0xB0A9, .start = 8231, .len = 3 }, + .{ .cp = 0xB0AA, .start = 8234, .len = 3 }, + .{ .cp = 0xB0AB, .start = 8237, .len = 3 }, + .{ .cp = 0xB0AC, .start = 8240, .len = 3 }, + .{ .cp = 0xB0AD, .start = 8243, .len = 3 }, + .{ .cp = 0xB0AE, .start = 8246, .len = 3 }, + .{ .cp = 0xB0AF, .start = 8249, .len = 3 }, + .{ .cp = 0xB0B0, .start = 8252, .len = 3 }, + .{ .cp = 0xB0B1, .start = 8255, .len = 3 }, + .{ .cp = 0xB0B2, .start = 8258, .len = 3 }, + .{ .cp = 0xB0B3, .start = 8261, .len = 3 }, + .{ .cp = 0xB0B4, .start = 8264, .len = 2 }, + .{ .cp = 0xB0B5, .start = 8266, .len = 3 }, + .{ .cp = 0xB0B6, .start = 8269, .len = 3 }, + .{ .cp = 0xB0B7, .start = 8272, .len = 3 }, + .{ .cp = 0xB0B8, .start = 8275, .len = 3 }, + .{ .cp = 0xB0B9, .start = 8278, .len = 3 }, + .{ .cp = 0xB0BA, .start = 8281, .len = 3 }, + .{ .cp = 0xB0BB, .start = 8284, .len = 3 }, + .{ .cp = 0xB0BC, .start = 8287, .len = 3 }, + .{ .cp = 0xB0BD, .start = 8290, .len = 3 }, + .{ .cp = 0xB0BE, .start = 8293, .len = 3 }, + .{ .cp = 0xB0BF, .start = 8296, .len = 3 }, + .{ .cp = 0xB0C0, .start = 8299, .len = 3 }, + .{ .cp = 0xB0C1, .start = 8302, .len = 3 }, + .{ .cp = 0xB0C2, .start = 8305, .len = 3 }, + .{ .cp = 0xB0C3, .start = 8308, .len = 3 }, + .{ .cp = 0xB0C4, .start = 8311, .len = 3 }, + .{ .cp = 0xB0C5, .start = 8314, .len = 3 }, + .{ .cp = 0xB0C6, .start = 8317, .len = 3 }, + .{ .cp = 0xB0C7, .start = 8320, .len = 3 }, + .{ .cp = 0xB0C8, .start = 8323, .len = 3 }, + .{ .cp = 0xB0C9, .start = 8326, .len = 3 }, + .{ .cp = 0xB0CA, .start = 8329, .len = 3 }, + .{ .cp = 0xB0CB, .start = 8332, .len = 3 }, + .{ .cp = 0xB0CC, .start = 8335, .len = 3 }, + .{ .cp = 0xB0CD, .start = 8338, .len = 3 }, + .{ .cp = 0xB0CE, .start = 8341, .len = 3 }, + .{ .cp = 0xB0CF, .start = 8344, .len = 3 }, + .{ .cp = 0xB0D0, .start = 8347, .len = 2 }, + .{ .cp = 0xB0D1, .start = 8349, .len = 3 }, + .{ .cp = 0xB0D2, .start = 8352, .len = 3 }, + .{ .cp = 0xB0D3, .start = 8355, .len = 3 }, + .{ .cp = 0xB0D4, .start = 8358, .len = 3 }, + .{ .cp = 0xB0D5, .start = 8361, .len = 3 }, + .{ .cp = 0xB0D6, .start = 8364, .len = 3 }, + .{ .cp = 0xB0D7, .start = 8367, .len = 3 }, + .{ .cp = 0xB0D8, .start = 8370, .len = 3 }, + .{ .cp = 0xB0D9, .start = 8373, .len = 3 }, + .{ .cp = 0xB0DA, .start = 8376, .len = 3 }, + .{ .cp = 0xB0DB, .start = 8379, .len = 3 }, + .{ .cp = 0xB0DC, .start = 8382, .len = 3 }, + .{ .cp = 0xB0DD, .start = 8385, .len = 3 }, + .{ .cp = 0xB0DE, .start = 8388, .len = 3 }, + .{ .cp = 0xB0DF, .start = 8391, .len = 3 }, + .{ .cp = 0xB0E0, .start = 8394, .len = 3 }, + .{ .cp = 0xB0E1, .start = 8397, .len = 3 }, + .{ .cp = 0xB0E2, .start = 8400, .len = 3 }, + .{ .cp = 0xB0E3, .start = 8403, .len = 3 }, + .{ .cp = 0xB0E4, .start = 8406, .len = 3 }, + .{ .cp = 0xB0E5, .start = 8409, .len = 3 }, + .{ .cp = 0xB0E6, .start = 8412, .len = 3 }, + .{ .cp = 0xB0E7, .start = 8415, .len = 3 }, + .{ .cp = 0xB0E8, .start = 8418, .len = 3 }, + .{ .cp = 0xB0E9, .start = 8421, .len = 3 }, + .{ .cp = 0xB0EA, .start = 8424, .len = 3 }, + .{ .cp = 0xB0EB, .start = 8427, .len = 3 }, + .{ .cp = 0xB0EC, .start = 8430, .len = 2 }, + .{ .cp = 0xB0ED, .start = 8432, .len = 3 }, + .{ .cp = 0xB0EE, .start = 8435, .len = 3 }, + .{ .cp = 0xB0EF, .start = 8438, .len = 3 }, + .{ .cp = 0xB0F0, .start = 8441, .len = 3 }, + .{ .cp = 0xB0F1, .start = 8444, .len = 3 }, + .{ .cp = 0xB0F2, .start = 8447, .len = 3 }, + .{ .cp = 0xB0F3, .start = 8450, .len = 3 }, + .{ .cp = 0xB0F4, .start = 8453, .len = 3 }, + .{ .cp = 0xB0F5, .start = 8456, .len = 3 }, + .{ .cp = 0xB0F6, .start = 8459, .len = 3 }, + .{ .cp = 0xB0F7, .start = 8462, .len = 3 }, + .{ .cp = 0xB0F8, .start = 8465, .len = 3 }, + .{ .cp = 0xB0F9, .start = 8468, .len = 3 }, + .{ .cp = 0xB0FA, .start = 8471, .len = 3 }, + .{ .cp = 0xB0FB, .start = 8474, .len = 3 }, + .{ .cp = 0xB0FC, .start = 8477, .len = 3 }, + .{ .cp = 0xB0FD, .start = 8480, .len = 3 }, + .{ .cp = 0xB0FE, .start = 8483, .len = 3 }, + .{ .cp = 0xB0FF, .start = 8486, .len = 3 }, + .{ .cp = 0xB100, .start = 8489, .len = 3 }, + .{ .cp = 0xB101, .start = 8492, .len = 3 }, + .{ .cp = 0xB102, .start = 8495, .len = 3 }, + .{ .cp = 0xB103, .start = 8498, .len = 3 }, + .{ .cp = 0xB104, .start = 8501, .len = 3 }, + .{ .cp = 0xB105, .start = 8504, .len = 3 }, + .{ .cp = 0xB106, .start = 8507, .len = 3 }, + .{ .cp = 0xB107, .start = 8510, .len = 3 }, + .{ .cp = 0xB108, .start = 8513, .len = 2 }, + .{ .cp = 0xB109, .start = 8515, .len = 3 }, + .{ .cp = 0xB10A, .start = 8518, .len = 3 }, + .{ .cp = 0xB10B, .start = 8521, .len = 3 }, + .{ .cp = 0xB10C, .start = 8524, .len = 3 }, + .{ .cp = 0xB10D, .start = 8527, .len = 3 }, + .{ .cp = 0xB10E, .start = 8530, .len = 3 }, + .{ .cp = 0xB10F, .start = 8533, .len = 3 }, + .{ .cp = 0xB110, .start = 8536, .len = 3 }, + .{ .cp = 0xB111, .start = 8539, .len = 3 }, + .{ .cp = 0xB112, .start = 8542, .len = 3 }, + .{ .cp = 0xB113, .start = 8545, .len = 3 }, + .{ .cp = 0xB114, .start = 8548, .len = 3 }, + .{ .cp = 0xB115, .start = 8551, .len = 3 }, + .{ .cp = 0xB116, .start = 8554, .len = 3 }, + .{ .cp = 0xB117, .start = 8557, .len = 3 }, + .{ .cp = 0xB118, .start = 8560, .len = 3 }, + .{ .cp = 0xB119, .start = 8563, .len = 3 }, + .{ .cp = 0xB11A, .start = 8566, .len = 3 }, + .{ .cp = 0xB11B, .start = 8569, .len = 3 }, + .{ .cp = 0xB11C, .start = 8572, .len = 3 }, + .{ .cp = 0xB11D, .start = 8575, .len = 3 }, + .{ .cp = 0xB11E, .start = 8578, .len = 3 }, + .{ .cp = 0xB11F, .start = 8581, .len = 3 }, + .{ .cp = 0xB120, .start = 8584, .len = 3 }, + .{ .cp = 0xB121, .start = 8587, .len = 3 }, + .{ .cp = 0xB122, .start = 8590, .len = 3 }, + .{ .cp = 0xB123, .start = 8593, .len = 3 }, + .{ .cp = 0xB124, .start = 8596, .len = 2 }, + .{ .cp = 0xB125, .start = 8598, .len = 3 }, + .{ .cp = 0xB126, .start = 8601, .len = 3 }, + .{ .cp = 0xB127, .start = 8604, .len = 3 }, + .{ .cp = 0xB128, .start = 8607, .len = 3 }, + .{ .cp = 0xB129, .start = 8610, .len = 3 }, + .{ .cp = 0xB12A, .start = 8613, .len = 3 }, + .{ .cp = 0xB12B, .start = 8616, .len = 3 }, + .{ .cp = 0xB12C, .start = 8619, .len = 3 }, + .{ .cp = 0xB12D, .start = 8622, .len = 3 }, + .{ .cp = 0xB12E, .start = 8625, .len = 3 }, + .{ .cp = 0xB12F, .start = 8628, .len = 3 }, + .{ .cp = 0xB130, .start = 8631, .len = 3 }, + .{ .cp = 0xB131, .start = 8634, .len = 3 }, + .{ .cp = 0xB132, .start = 8637, .len = 3 }, + .{ .cp = 0xB133, .start = 8640, .len = 3 }, + .{ .cp = 0xB134, .start = 8643, .len = 3 }, + .{ .cp = 0xB135, .start = 8646, .len = 3 }, + .{ .cp = 0xB136, .start = 8649, .len = 3 }, + .{ .cp = 0xB137, .start = 8652, .len = 3 }, + .{ .cp = 0xB138, .start = 8655, .len = 3 }, + .{ .cp = 0xB139, .start = 8658, .len = 3 }, + .{ .cp = 0xB13A, .start = 8661, .len = 3 }, + .{ .cp = 0xB13B, .start = 8664, .len = 3 }, + .{ .cp = 0xB13C, .start = 8667, .len = 3 }, + .{ .cp = 0xB13D, .start = 8670, .len = 3 }, + .{ .cp = 0xB13E, .start = 8673, .len = 3 }, + .{ .cp = 0xB13F, .start = 8676, .len = 3 }, + .{ .cp = 0xB140, .start = 8679, .len = 2 }, + .{ .cp = 0xB141, .start = 8681, .len = 3 }, + .{ .cp = 0xB142, .start = 8684, .len = 3 }, + .{ .cp = 0xB143, .start = 8687, .len = 3 }, + .{ .cp = 0xB144, .start = 8690, .len = 3 }, + .{ .cp = 0xB145, .start = 8693, .len = 3 }, + .{ .cp = 0xB146, .start = 8696, .len = 3 }, + .{ .cp = 0xB147, .start = 8699, .len = 3 }, + .{ .cp = 0xB148, .start = 8702, .len = 3 }, + .{ .cp = 0xB149, .start = 8705, .len = 3 }, + .{ .cp = 0xB14A, .start = 8708, .len = 3 }, + .{ .cp = 0xB14B, .start = 8711, .len = 3 }, + .{ .cp = 0xB14C, .start = 8714, .len = 3 }, + .{ .cp = 0xB14D, .start = 8717, .len = 3 }, + .{ .cp = 0xB14E, .start = 8720, .len = 3 }, + .{ .cp = 0xB14F, .start = 8723, .len = 3 }, + .{ .cp = 0xB150, .start = 8726, .len = 3 }, + .{ .cp = 0xB151, .start = 8729, .len = 3 }, + .{ .cp = 0xB152, .start = 8732, .len = 3 }, + .{ .cp = 0xB153, .start = 8735, .len = 3 }, + .{ .cp = 0xB154, .start = 8738, .len = 3 }, + .{ .cp = 0xB155, .start = 8741, .len = 3 }, + .{ .cp = 0xB156, .start = 8744, .len = 3 }, + .{ .cp = 0xB157, .start = 8747, .len = 3 }, + .{ .cp = 0xB158, .start = 8750, .len = 3 }, + .{ .cp = 0xB159, .start = 8753, .len = 3 }, + .{ .cp = 0xB15A, .start = 8756, .len = 3 }, + .{ .cp = 0xB15B, .start = 8759, .len = 3 }, + .{ .cp = 0xB15C, .start = 8762, .len = 2 }, + .{ .cp = 0xB15D, .start = 8764, .len = 3 }, + .{ .cp = 0xB15E, .start = 8767, .len = 3 }, + .{ .cp = 0xB15F, .start = 8770, .len = 3 }, + .{ .cp = 0xB160, .start = 8773, .len = 3 }, + .{ .cp = 0xB161, .start = 8776, .len = 3 }, + .{ .cp = 0xB162, .start = 8779, .len = 3 }, + .{ .cp = 0xB163, .start = 8782, .len = 3 }, + .{ .cp = 0xB164, .start = 8785, .len = 3 }, + .{ .cp = 0xB165, .start = 8788, .len = 3 }, + .{ .cp = 0xB166, .start = 8791, .len = 3 }, + .{ .cp = 0xB167, .start = 8794, .len = 3 }, + .{ .cp = 0xB168, .start = 8797, .len = 3 }, + .{ .cp = 0xB169, .start = 8800, .len = 3 }, + .{ .cp = 0xB16A, .start = 8803, .len = 3 }, + .{ .cp = 0xB16B, .start = 8806, .len = 3 }, + .{ .cp = 0xB16C, .start = 8809, .len = 3 }, + .{ .cp = 0xB16D, .start = 8812, .len = 3 }, + .{ .cp = 0xB16E, .start = 8815, .len = 3 }, + .{ .cp = 0xB16F, .start = 8818, .len = 3 }, + .{ .cp = 0xB170, .start = 8821, .len = 3 }, + .{ .cp = 0xB171, .start = 8824, .len = 3 }, + .{ .cp = 0xB172, .start = 8827, .len = 3 }, + .{ .cp = 0xB173, .start = 8830, .len = 3 }, + .{ .cp = 0xB174, .start = 8833, .len = 3 }, + .{ .cp = 0xB175, .start = 8836, .len = 3 }, + .{ .cp = 0xB176, .start = 8839, .len = 3 }, + .{ .cp = 0xB177, .start = 8842, .len = 3 }, + .{ .cp = 0xB178, .start = 8845, .len = 2 }, + .{ .cp = 0xB179, .start = 8847, .len = 3 }, + .{ .cp = 0xB17A, .start = 8850, .len = 3 }, + .{ .cp = 0xB17B, .start = 8853, .len = 3 }, + .{ .cp = 0xB17C, .start = 8856, .len = 3 }, + .{ .cp = 0xB17D, .start = 8859, .len = 3 }, + .{ .cp = 0xB17E, .start = 8862, .len = 3 }, + .{ .cp = 0xB17F, .start = 8865, .len = 3 }, + .{ .cp = 0xB180, .start = 8868, .len = 3 }, + .{ .cp = 0xB181, .start = 8871, .len = 3 }, + .{ .cp = 0xB182, .start = 8874, .len = 3 }, + .{ .cp = 0xB183, .start = 8877, .len = 3 }, + .{ .cp = 0xB184, .start = 8880, .len = 3 }, + .{ .cp = 0xB185, .start = 8883, .len = 3 }, + .{ .cp = 0xB186, .start = 8886, .len = 3 }, + .{ .cp = 0xB187, .start = 8889, .len = 3 }, + .{ .cp = 0xB188, .start = 8892, .len = 3 }, + .{ .cp = 0xB189, .start = 8895, .len = 3 }, + .{ .cp = 0xB18A, .start = 8898, .len = 3 }, + .{ .cp = 0xB18B, .start = 8901, .len = 3 }, + .{ .cp = 0xB18C, .start = 8904, .len = 3 }, + .{ .cp = 0xB18D, .start = 8907, .len = 3 }, + .{ .cp = 0xB18E, .start = 8910, .len = 3 }, + .{ .cp = 0xB18F, .start = 8913, .len = 3 }, + .{ .cp = 0xB190, .start = 8916, .len = 3 }, + .{ .cp = 0xB191, .start = 8919, .len = 3 }, + .{ .cp = 0xB192, .start = 8922, .len = 3 }, + .{ .cp = 0xB193, .start = 8925, .len = 3 }, + .{ .cp = 0xB194, .start = 8928, .len = 2 }, + .{ .cp = 0xB195, .start = 8930, .len = 3 }, + .{ .cp = 0xB196, .start = 8933, .len = 3 }, + .{ .cp = 0xB197, .start = 8936, .len = 3 }, + .{ .cp = 0xB198, .start = 8939, .len = 3 }, + .{ .cp = 0xB199, .start = 8942, .len = 3 }, + .{ .cp = 0xB19A, .start = 8945, .len = 3 }, + .{ .cp = 0xB19B, .start = 8948, .len = 3 }, + .{ .cp = 0xB19C, .start = 8951, .len = 3 }, + .{ .cp = 0xB19D, .start = 8954, .len = 3 }, + .{ .cp = 0xB19E, .start = 8957, .len = 3 }, + .{ .cp = 0xB19F, .start = 8960, .len = 3 }, + .{ .cp = 0xB1A0, .start = 8963, .len = 3 }, + .{ .cp = 0xB1A1, .start = 8966, .len = 3 }, + .{ .cp = 0xB1A2, .start = 8969, .len = 3 }, + .{ .cp = 0xB1A3, .start = 8972, .len = 3 }, + .{ .cp = 0xB1A4, .start = 8975, .len = 3 }, + .{ .cp = 0xB1A5, .start = 8978, .len = 3 }, + .{ .cp = 0xB1A6, .start = 8981, .len = 3 }, + .{ .cp = 0xB1A7, .start = 8984, .len = 3 }, + .{ .cp = 0xB1A8, .start = 8987, .len = 3 }, + .{ .cp = 0xB1A9, .start = 8990, .len = 3 }, + .{ .cp = 0xB1AA, .start = 8993, .len = 3 }, + .{ .cp = 0xB1AB, .start = 8996, .len = 3 }, + .{ .cp = 0xB1AC, .start = 8999, .len = 3 }, + .{ .cp = 0xB1AD, .start = 9002, .len = 3 }, + .{ .cp = 0xB1AE, .start = 9005, .len = 3 }, + .{ .cp = 0xB1AF, .start = 9008, .len = 3 }, + .{ .cp = 0xB1B0, .start = 9011, .len = 2 }, + .{ .cp = 0xB1B1, .start = 9013, .len = 3 }, + .{ .cp = 0xB1B2, .start = 9016, .len = 3 }, + .{ .cp = 0xB1B3, .start = 9019, .len = 3 }, + .{ .cp = 0xB1B4, .start = 9022, .len = 3 }, + .{ .cp = 0xB1B5, .start = 9025, .len = 3 }, + .{ .cp = 0xB1B6, .start = 9028, .len = 3 }, + .{ .cp = 0xB1B7, .start = 9031, .len = 3 }, + .{ .cp = 0xB1B8, .start = 9034, .len = 3 }, + .{ .cp = 0xB1B9, .start = 9037, .len = 3 }, + .{ .cp = 0xB1BA, .start = 9040, .len = 3 }, + .{ .cp = 0xB1BB, .start = 9043, .len = 3 }, + .{ .cp = 0xB1BC, .start = 9046, .len = 3 }, + .{ .cp = 0xB1BD, .start = 9049, .len = 3 }, + .{ .cp = 0xB1BE, .start = 9052, .len = 3 }, + .{ .cp = 0xB1BF, .start = 9055, .len = 3 }, + .{ .cp = 0xB1C0, .start = 9058, .len = 3 }, + .{ .cp = 0xB1C1, .start = 9061, .len = 3 }, + .{ .cp = 0xB1C2, .start = 9064, .len = 3 }, + .{ .cp = 0xB1C3, .start = 9067, .len = 3 }, + .{ .cp = 0xB1C4, .start = 9070, .len = 3 }, + .{ .cp = 0xB1C5, .start = 9073, .len = 3 }, + .{ .cp = 0xB1C6, .start = 9076, .len = 3 }, + .{ .cp = 0xB1C7, .start = 9079, .len = 3 }, + .{ .cp = 0xB1C8, .start = 9082, .len = 3 }, + .{ .cp = 0xB1C9, .start = 9085, .len = 3 }, + .{ .cp = 0xB1CA, .start = 9088, .len = 3 }, + .{ .cp = 0xB1CB, .start = 9091, .len = 3 }, + .{ .cp = 0xB1CC, .start = 9094, .len = 2 }, + .{ .cp = 0xB1CD, .start = 9096, .len = 3 }, + .{ .cp = 0xB1CE, .start = 9099, .len = 3 }, + .{ .cp = 0xB1CF, .start = 9102, .len = 3 }, + .{ .cp = 0xB1D0, .start = 9105, .len = 3 }, + .{ .cp = 0xB1D1, .start = 9108, .len = 3 }, + .{ .cp = 0xB1D2, .start = 9111, .len = 3 }, + .{ .cp = 0xB1D3, .start = 9114, .len = 3 }, + .{ .cp = 0xB1D4, .start = 9117, .len = 3 }, + .{ .cp = 0xB1D5, .start = 9120, .len = 3 }, + .{ .cp = 0xB1D6, .start = 9123, .len = 3 }, + .{ .cp = 0xB1D7, .start = 9126, .len = 3 }, + .{ .cp = 0xB1D8, .start = 9129, .len = 3 }, + .{ .cp = 0xB1D9, .start = 9132, .len = 3 }, + .{ .cp = 0xB1DA, .start = 9135, .len = 3 }, + .{ .cp = 0xB1DB, .start = 9138, .len = 3 }, + .{ .cp = 0xB1DC, .start = 9141, .len = 3 }, + .{ .cp = 0xB1DD, .start = 9144, .len = 3 }, + .{ .cp = 0xB1DE, .start = 9147, .len = 3 }, + .{ .cp = 0xB1DF, .start = 9150, .len = 3 }, + .{ .cp = 0xB1E0, .start = 9153, .len = 3 }, + .{ .cp = 0xB1E1, .start = 9156, .len = 3 }, + .{ .cp = 0xB1E2, .start = 9159, .len = 3 }, + .{ .cp = 0xB1E3, .start = 9162, .len = 3 }, + .{ .cp = 0xB1E4, .start = 9165, .len = 3 }, + .{ .cp = 0xB1E5, .start = 9168, .len = 3 }, + .{ .cp = 0xB1E6, .start = 9171, .len = 3 }, + .{ .cp = 0xB1E7, .start = 9174, .len = 3 }, + .{ .cp = 0xB1E8, .start = 9177, .len = 2 }, + .{ .cp = 0xB1E9, .start = 9179, .len = 3 }, + .{ .cp = 0xB1EA, .start = 9182, .len = 3 }, + .{ .cp = 0xB1EB, .start = 9185, .len = 3 }, + .{ .cp = 0xB1EC, .start = 9188, .len = 3 }, + .{ .cp = 0xB1ED, .start = 9191, .len = 3 }, + .{ .cp = 0xB1EE, .start = 9194, .len = 3 }, + .{ .cp = 0xB1EF, .start = 9197, .len = 3 }, + .{ .cp = 0xB1F0, .start = 9200, .len = 3 }, + .{ .cp = 0xB1F1, .start = 9203, .len = 3 }, + .{ .cp = 0xB1F2, .start = 9206, .len = 3 }, + .{ .cp = 0xB1F3, .start = 9209, .len = 3 }, + .{ .cp = 0xB1F4, .start = 9212, .len = 3 }, + .{ .cp = 0xB1F5, .start = 9215, .len = 3 }, + .{ .cp = 0xB1F6, .start = 9218, .len = 3 }, + .{ .cp = 0xB1F7, .start = 9221, .len = 3 }, + .{ .cp = 0xB1F8, .start = 9224, .len = 3 }, + .{ .cp = 0xB1F9, .start = 9227, .len = 3 }, + .{ .cp = 0xB1FA, .start = 9230, .len = 3 }, + .{ .cp = 0xB1FB, .start = 9233, .len = 3 }, + .{ .cp = 0xB1FC, .start = 9236, .len = 3 }, + .{ .cp = 0xB1FD, .start = 9239, .len = 3 }, + .{ .cp = 0xB1FE, .start = 9242, .len = 3 }, + .{ .cp = 0xB1FF, .start = 9245, .len = 3 }, + .{ .cp = 0xB200, .start = 9248, .len = 3 }, + .{ .cp = 0xB201, .start = 9251, .len = 3 }, + .{ .cp = 0xB202, .start = 9254, .len = 3 }, + .{ .cp = 0xB203, .start = 9257, .len = 3 }, + .{ .cp = 0xB204, .start = 9260, .len = 2 }, + .{ .cp = 0xB205, .start = 9262, .len = 3 }, + .{ .cp = 0xB206, .start = 9265, .len = 3 }, + .{ .cp = 0xB207, .start = 9268, .len = 3 }, + .{ .cp = 0xB208, .start = 9271, .len = 3 }, + .{ .cp = 0xB209, .start = 9274, .len = 3 }, + .{ .cp = 0xB20A, .start = 9277, .len = 3 }, + .{ .cp = 0xB20B, .start = 9280, .len = 3 }, + .{ .cp = 0xB20C, .start = 9283, .len = 3 }, + .{ .cp = 0xB20D, .start = 9286, .len = 3 }, + .{ .cp = 0xB20E, .start = 9289, .len = 3 }, + .{ .cp = 0xB20F, .start = 9292, .len = 3 }, + .{ .cp = 0xB210, .start = 9295, .len = 3 }, + .{ .cp = 0xB211, .start = 9298, .len = 3 }, + .{ .cp = 0xB212, .start = 9301, .len = 3 }, + .{ .cp = 0xB213, .start = 9304, .len = 3 }, + .{ .cp = 0xB214, .start = 9307, .len = 3 }, + .{ .cp = 0xB215, .start = 9310, .len = 3 }, + .{ .cp = 0xB216, .start = 9313, .len = 3 }, + .{ .cp = 0xB217, .start = 9316, .len = 3 }, + .{ .cp = 0xB218, .start = 9319, .len = 3 }, + .{ .cp = 0xB219, .start = 9322, .len = 3 }, + .{ .cp = 0xB21A, .start = 9325, .len = 3 }, + .{ .cp = 0xB21B, .start = 9328, .len = 3 }, + .{ .cp = 0xB21C, .start = 9331, .len = 3 }, + .{ .cp = 0xB21D, .start = 9334, .len = 3 }, + .{ .cp = 0xB21E, .start = 9337, .len = 3 }, + .{ .cp = 0xB21F, .start = 9340, .len = 3 }, + .{ .cp = 0xB220, .start = 9343, .len = 2 }, + .{ .cp = 0xB221, .start = 9345, .len = 3 }, + .{ .cp = 0xB222, .start = 9348, .len = 3 }, + .{ .cp = 0xB223, .start = 9351, .len = 3 }, + .{ .cp = 0xB224, .start = 9354, .len = 3 }, + .{ .cp = 0xB225, .start = 9357, .len = 3 }, + .{ .cp = 0xB226, .start = 9360, .len = 3 }, + .{ .cp = 0xB227, .start = 9363, .len = 3 }, + .{ .cp = 0xB228, .start = 9366, .len = 3 }, + .{ .cp = 0xB229, .start = 9369, .len = 3 }, + .{ .cp = 0xB22A, .start = 9372, .len = 3 }, + .{ .cp = 0xB22B, .start = 9375, .len = 3 }, + .{ .cp = 0xB22C, .start = 9378, .len = 3 }, + .{ .cp = 0xB22D, .start = 9381, .len = 3 }, + .{ .cp = 0xB22E, .start = 9384, .len = 3 }, + .{ .cp = 0xB22F, .start = 9387, .len = 3 }, + .{ .cp = 0xB230, .start = 9390, .len = 3 }, + .{ .cp = 0xB231, .start = 9393, .len = 3 }, + .{ .cp = 0xB232, .start = 9396, .len = 3 }, + .{ .cp = 0xB233, .start = 9399, .len = 3 }, + .{ .cp = 0xB234, .start = 9402, .len = 3 }, + .{ .cp = 0xB235, .start = 9405, .len = 3 }, + .{ .cp = 0xB236, .start = 9408, .len = 3 }, + .{ .cp = 0xB237, .start = 9411, .len = 3 }, + .{ .cp = 0xB238, .start = 9414, .len = 3 }, + .{ .cp = 0xB239, .start = 9417, .len = 3 }, + .{ .cp = 0xB23A, .start = 9420, .len = 3 }, + .{ .cp = 0xB23B, .start = 9423, .len = 3 }, + .{ .cp = 0xB23C, .start = 9426, .len = 2 }, + .{ .cp = 0xB23D, .start = 9428, .len = 3 }, + .{ .cp = 0xB23E, .start = 9431, .len = 3 }, + .{ .cp = 0xB23F, .start = 9434, .len = 3 }, + .{ .cp = 0xB240, .start = 9437, .len = 3 }, + .{ .cp = 0xB241, .start = 9440, .len = 3 }, + .{ .cp = 0xB242, .start = 9443, .len = 3 }, + .{ .cp = 0xB243, .start = 9446, .len = 3 }, + .{ .cp = 0xB244, .start = 9449, .len = 3 }, + .{ .cp = 0xB245, .start = 9452, .len = 3 }, + .{ .cp = 0xB246, .start = 9455, .len = 3 }, + .{ .cp = 0xB247, .start = 9458, .len = 3 }, + .{ .cp = 0xB248, .start = 9461, .len = 3 }, + .{ .cp = 0xB249, .start = 9464, .len = 3 }, + .{ .cp = 0xB24A, .start = 9467, .len = 3 }, + .{ .cp = 0xB24B, .start = 9470, .len = 3 }, + .{ .cp = 0xB24C, .start = 9473, .len = 3 }, + .{ .cp = 0xB24D, .start = 9476, .len = 3 }, + .{ .cp = 0xB24E, .start = 9479, .len = 3 }, + .{ .cp = 0xB24F, .start = 9482, .len = 3 }, + .{ .cp = 0xB250, .start = 9485, .len = 3 }, + .{ .cp = 0xB251, .start = 9488, .len = 3 }, + .{ .cp = 0xB252, .start = 9491, .len = 3 }, + .{ .cp = 0xB253, .start = 9494, .len = 3 }, + .{ .cp = 0xB254, .start = 9497, .len = 3 }, + .{ .cp = 0xB255, .start = 9500, .len = 3 }, + .{ .cp = 0xB256, .start = 9503, .len = 3 }, + .{ .cp = 0xB257, .start = 9506, .len = 3 }, + .{ .cp = 0xB258, .start = 9509, .len = 2 }, + .{ .cp = 0xB259, .start = 9511, .len = 3 }, + .{ .cp = 0xB25A, .start = 9514, .len = 3 }, + .{ .cp = 0xB25B, .start = 9517, .len = 3 }, + .{ .cp = 0xB25C, .start = 9520, .len = 3 }, + .{ .cp = 0xB25D, .start = 9523, .len = 3 }, + .{ .cp = 0xB25E, .start = 9526, .len = 3 }, + .{ .cp = 0xB25F, .start = 9529, .len = 3 }, + .{ .cp = 0xB260, .start = 9532, .len = 3 }, + .{ .cp = 0xB261, .start = 9535, .len = 3 }, + .{ .cp = 0xB262, .start = 9538, .len = 3 }, + .{ .cp = 0xB263, .start = 9541, .len = 3 }, + .{ .cp = 0xB264, .start = 9544, .len = 3 }, + .{ .cp = 0xB265, .start = 9547, .len = 3 }, + .{ .cp = 0xB266, .start = 9550, .len = 3 }, + .{ .cp = 0xB267, .start = 9553, .len = 3 }, + .{ .cp = 0xB268, .start = 9556, .len = 3 }, + .{ .cp = 0xB269, .start = 9559, .len = 3 }, + .{ .cp = 0xB26A, .start = 9562, .len = 3 }, + .{ .cp = 0xB26B, .start = 9565, .len = 3 }, + .{ .cp = 0xB26C, .start = 9568, .len = 3 }, + .{ .cp = 0xB26D, .start = 9571, .len = 3 }, + .{ .cp = 0xB26E, .start = 9574, .len = 3 }, + .{ .cp = 0xB26F, .start = 9577, .len = 3 }, + .{ .cp = 0xB270, .start = 9580, .len = 3 }, + .{ .cp = 0xB271, .start = 9583, .len = 3 }, + .{ .cp = 0xB272, .start = 9586, .len = 3 }, + .{ .cp = 0xB273, .start = 9589, .len = 3 }, + .{ .cp = 0xB274, .start = 9592, .len = 2 }, + .{ .cp = 0xB275, .start = 9594, .len = 3 }, + .{ .cp = 0xB276, .start = 9597, .len = 3 }, + .{ .cp = 0xB277, .start = 9600, .len = 3 }, + .{ .cp = 0xB278, .start = 9603, .len = 3 }, + .{ .cp = 0xB279, .start = 9606, .len = 3 }, + .{ .cp = 0xB27A, .start = 9609, .len = 3 }, + .{ .cp = 0xB27B, .start = 9612, .len = 3 }, + .{ .cp = 0xB27C, .start = 9615, .len = 3 }, + .{ .cp = 0xB27D, .start = 9618, .len = 3 }, + .{ .cp = 0xB27E, .start = 9621, .len = 3 }, + .{ .cp = 0xB27F, .start = 9624, .len = 3 }, + .{ .cp = 0xB280, .start = 9627, .len = 3 }, + .{ .cp = 0xB281, .start = 9630, .len = 3 }, + .{ .cp = 0xB282, .start = 9633, .len = 3 }, + .{ .cp = 0xB283, .start = 9636, .len = 3 }, + .{ .cp = 0xB284, .start = 9639, .len = 3 }, + .{ .cp = 0xB285, .start = 9642, .len = 3 }, + .{ .cp = 0xB286, .start = 9645, .len = 3 }, + .{ .cp = 0xB287, .start = 9648, .len = 3 }, + .{ .cp = 0xB288, .start = 9651, .len = 3 }, + .{ .cp = 0xB289, .start = 9654, .len = 3 }, + .{ .cp = 0xB28A, .start = 9657, .len = 3 }, + .{ .cp = 0xB28B, .start = 9660, .len = 3 }, + .{ .cp = 0xB28C, .start = 9663, .len = 3 }, + .{ .cp = 0xB28D, .start = 9666, .len = 3 }, + .{ .cp = 0xB28E, .start = 9669, .len = 3 }, + .{ .cp = 0xB28F, .start = 9672, .len = 3 }, + .{ .cp = 0xB290, .start = 9675, .len = 2 }, + .{ .cp = 0xB291, .start = 9677, .len = 3 }, + .{ .cp = 0xB292, .start = 9680, .len = 3 }, + .{ .cp = 0xB293, .start = 9683, .len = 3 }, + .{ .cp = 0xB294, .start = 9686, .len = 3 }, + .{ .cp = 0xB295, .start = 9689, .len = 3 }, + .{ .cp = 0xB296, .start = 9692, .len = 3 }, + .{ .cp = 0xB297, .start = 9695, .len = 3 }, + .{ .cp = 0xB298, .start = 9698, .len = 3 }, + .{ .cp = 0xB299, .start = 9701, .len = 3 }, + .{ .cp = 0xB29A, .start = 9704, .len = 3 }, + .{ .cp = 0xB29B, .start = 9707, .len = 3 }, + .{ .cp = 0xB29C, .start = 9710, .len = 3 }, + .{ .cp = 0xB29D, .start = 9713, .len = 3 }, + .{ .cp = 0xB29E, .start = 9716, .len = 3 }, + .{ .cp = 0xB29F, .start = 9719, .len = 3 }, + .{ .cp = 0xB2A0, .start = 9722, .len = 3 }, + .{ .cp = 0xB2A1, .start = 9725, .len = 3 }, + .{ .cp = 0xB2A2, .start = 9728, .len = 3 }, + .{ .cp = 0xB2A3, .start = 9731, .len = 3 }, + .{ .cp = 0xB2A4, .start = 9734, .len = 3 }, + .{ .cp = 0xB2A5, .start = 9737, .len = 3 }, + .{ .cp = 0xB2A6, .start = 9740, .len = 3 }, + .{ .cp = 0xB2A7, .start = 9743, .len = 3 }, + .{ .cp = 0xB2A8, .start = 9746, .len = 3 }, + .{ .cp = 0xB2A9, .start = 9749, .len = 3 }, + .{ .cp = 0xB2AA, .start = 9752, .len = 3 }, + .{ .cp = 0xB2AB, .start = 9755, .len = 3 }, + .{ .cp = 0xB2AC, .start = 9758, .len = 2 }, + .{ .cp = 0xB2AD, .start = 9760, .len = 3 }, + .{ .cp = 0xB2AE, .start = 9763, .len = 3 }, + .{ .cp = 0xB2AF, .start = 9766, .len = 3 }, + .{ .cp = 0xB2B0, .start = 9769, .len = 3 }, + .{ .cp = 0xB2B1, .start = 9772, .len = 3 }, + .{ .cp = 0xB2B2, .start = 9775, .len = 3 }, + .{ .cp = 0xB2B3, .start = 9778, .len = 3 }, + .{ .cp = 0xB2B4, .start = 9781, .len = 3 }, + .{ .cp = 0xB2B5, .start = 9784, .len = 3 }, + .{ .cp = 0xB2B6, .start = 9787, .len = 3 }, + .{ .cp = 0xB2B7, .start = 9790, .len = 3 }, + .{ .cp = 0xB2B8, .start = 9793, .len = 3 }, + .{ .cp = 0xB2B9, .start = 9796, .len = 3 }, + .{ .cp = 0xB2BA, .start = 9799, .len = 3 }, + .{ .cp = 0xB2BB, .start = 9802, .len = 3 }, + .{ .cp = 0xB2BC, .start = 9805, .len = 3 }, + .{ .cp = 0xB2BD, .start = 9808, .len = 3 }, + .{ .cp = 0xB2BE, .start = 9811, .len = 3 }, + .{ .cp = 0xB2BF, .start = 9814, .len = 3 }, + .{ .cp = 0xB2C0, .start = 9817, .len = 3 }, + .{ .cp = 0xB2C1, .start = 9820, .len = 3 }, + .{ .cp = 0xB2C2, .start = 9823, .len = 3 }, + .{ .cp = 0xB2C3, .start = 9826, .len = 3 }, + .{ .cp = 0xB2C4, .start = 9829, .len = 3 }, + .{ .cp = 0xB2C5, .start = 9832, .len = 3 }, + .{ .cp = 0xB2C6, .start = 9835, .len = 3 }, + .{ .cp = 0xB2C7, .start = 9838, .len = 3 }, + .{ .cp = 0xB2C8, .start = 9841, .len = 2 }, + .{ .cp = 0xB2C9, .start = 9843, .len = 3 }, + .{ .cp = 0xB2CA, .start = 9846, .len = 3 }, + .{ .cp = 0xB2CB, .start = 9849, .len = 3 }, + .{ .cp = 0xB2CC, .start = 9852, .len = 3 }, + .{ .cp = 0xB2CD, .start = 9855, .len = 3 }, + .{ .cp = 0xB2CE, .start = 9858, .len = 3 }, + .{ .cp = 0xB2CF, .start = 9861, .len = 3 }, + .{ .cp = 0xB2D0, .start = 9864, .len = 3 }, + .{ .cp = 0xB2D1, .start = 9867, .len = 3 }, + .{ .cp = 0xB2D2, .start = 9870, .len = 3 }, + .{ .cp = 0xB2D3, .start = 9873, .len = 3 }, + .{ .cp = 0xB2D4, .start = 9876, .len = 3 }, + .{ .cp = 0xB2D5, .start = 9879, .len = 3 }, + .{ .cp = 0xB2D6, .start = 9882, .len = 3 }, + .{ .cp = 0xB2D7, .start = 9885, .len = 3 }, + .{ .cp = 0xB2D8, .start = 9888, .len = 3 }, + .{ .cp = 0xB2D9, .start = 9891, .len = 3 }, + .{ .cp = 0xB2DA, .start = 9894, .len = 3 }, + .{ .cp = 0xB2DB, .start = 9897, .len = 3 }, + .{ .cp = 0xB2DC, .start = 9900, .len = 3 }, + .{ .cp = 0xB2DD, .start = 9903, .len = 3 }, + .{ .cp = 0xB2DE, .start = 9906, .len = 3 }, + .{ .cp = 0xB2DF, .start = 9909, .len = 3 }, + .{ .cp = 0xB2E0, .start = 9912, .len = 3 }, + .{ .cp = 0xB2E1, .start = 9915, .len = 3 }, + .{ .cp = 0xB2E2, .start = 9918, .len = 3 }, + .{ .cp = 0xB2E3, .start = 9921, .len = 3 }, + .{ .cp = 0xB2E4, .start = 9924, .len = 2 }, + .{ .cp = 0xB2E5, .start = 9926, .len = 3 }, + .{ .cp = 0xB2E6, .start = 9929, .len = 3 }, + .{ .cp = 0xB2E7, .start = 9932, .len = 3 }, + .{ .cp = 0xB2E8, .start = 9935, .len = 3 }, + .{ .cp = 0xB2E9, .start = 9938, .len = 3 }, + .{ .cp = 0xB2EA, .start = 9941, .len = 3 }, + .{ .cp = 0xB2EB, .start = 9944, .len = 3 }, + .{ .cp = 0xB2EC, .start = 9947, .len = 3 }, + .{ .cp = 0xB2ED, .start = 9950, .len = 3 }, + .{ .cp = 0xB2EE, .start = 9953, .len = 3 }, + .{ .cp = 0xB2EF, .start = 9956, .len = 3 }, + .{ .cp = 0xB2F0, .start = 9959, .len = 3 }, + .{ .cp = 0xB2F1, .start = 9962, .len = 3 }, + .{ .cp = 0xB2F2, .start = 9965, .len = 3 }, + .{ .cp = 0xB2F3, .start = 9968, .len = 3 }, + .{ .cp = 0xB2F4, .start = 9971, .len = 3 }, + .{ .cp = 0xB2F5, .start = 9974, .len = 3 }, + .{ .cp = 0xB2F6, .start = 9977, .len = 3 }, + .{ .cp = 0xB2F7, .start = 9980, .len = 3 }, + .{ .cp = 0xB2F8, .start = 9983, .len = 3 }, + .{ .cp = 0xB2F9, .start = 9986, .len = 3 }, + .{ .cp = 0xB2FA, .start = 9989, .len = 3 }, + .{ .cp = 0xB2FB, .start = 9992, .len = 3 }, + .{ .cp = 0xB2FC, .start = 9995, .len = 3 }, + .{ .cp = 0xB2FD, .start = 9998, .len = 3 }, + .{ .cp = 0xB2FE, .start = 10001, .len = 3 }, + .{ .cp = 0xB2FF, .start = 10004, .len = 3 }, + .{ .cp = 0xB300, .start = 10007, .len = 2 }, + .{ .cp = 0xB301, .start = 10009, .len = 3 }, + .{ .cp = 0xB302, .start = 10012, .len = 3 }, + .{ .cp = 0xB303, .start = 10015, .len = 3 }, + .{ .cp = 0xB304, .start = 10018, .len = 3 }, + .{ .cp = 0xB305, .start = 10021, .len = 3 }, + .{ .cp = 0xB306, .start = 10024, .len = 3 }, + .{ .cp = 0xB307, .start = 10027, .len = 3 }, + .{ .cp = 0xB308, .start = 10030, .len = 3 }, + .{ .cp = 0xB309, .start = 10033, .len = 3 }, + .{ .cp = 0xB30A, .start = 10036, .len = 3 }, + .{ .cp = 0xB30B, .start = 10039, .len = 3 }, + .{ .cp = 0xB30C, .start = 10042, .len = 3 }, + .{ .cp = 0xB30D, .start = 10045, .len = 3 }, + .{ .cp = 0xB30E, .start = 10048, .len = 3 }, + .{ .cp = 0xB30F, .start = 10051, .len = 3 }, + .{ .cp = 0xB310, .start = 10054, .len = 3 }, + .{ .cp = 0xB311, .start = 10057, .len = 3 }, + .{ .cp = 0xB312, .start = 10060, .len = 3 }, + .{ .cp = 0xB313, .start = 10063, .len = 3 }, + .{ .cp = 0xB314, .start = 10066, .len = 3 }, + .{ .cp = 0xB315, .start = 10069, .len = 3 }, + .{ .cp = 0xB316, .start = 10072, .len = 3 }, + .{ .cp = 0xB317, .start = 10075, .len = 3 }, + .{ .cp = 0xB318, .start = 10078, .len = 3 }, + .{ .cp = 0xB319, .start = 10081, .len = 3 }, + .{ .cp = 0xB31A, .start = 10084, .len = 3 }, + .{ .cp = 0xB31B, .start = 10087, .len = 3 }, + .{ .cp = 0xB31C, .start = 10090, .len = 2 }, + .{ .cp = 0xB31D, .start = 10092, .len = 3 }, + .{ .cp = 0xB31E, .start = 10095, .len = 3 }, + .{ .cp = 0xB31F, .start = 10098, .len = 3 }, + .{ .cp = 0xB320, .start = 10101, .len = 3 }, + .{ .cp = 0xB321, .start = 10104, .len = 3 }, + .{ .cp = 0xB322, .start = 10107, .len = 3 }, + .{ .cp = 0xB323, .start = 10110, .len = 3 }, + .{ .cp = 0xB324, .start = 10113, .len = 3 }, + .{ .cp = 0xB325, .start = 10116, .len = 3 }, + .{ .cp = 0xB326, .start = 10119, .len = 3 }, + .{ .cp = 0xB327, .start = 10122, .len = 3 }, + .{ .cp = 0xB328, .start = 10125, .len = 3 }, + .{ .cp = 0xB329, .start = 10128, .len = 3 }, + .{ .cp = 0xB32A, .start = 10131, .len = 3 }, + .{ .cp = 0xB32B, .start = 10134, .len = 3 }, + .{ .cp = 0xB32C, .start = 10137, .len = 3 }, + .{ .cp = 0xB32D, .start = 10140, .len = 3 }, + .{ .cp = 0xB32E, .start = 10143, .len = 3 }, + .{ .cp = 0xB32F, .start = 10146, .len = 3 }, + .{ .cp = 0xB330, .start = 10149, .len = 3 }, + .{ .cp = 0xB331, .start = 10152, .len = 3 }, + .{ .cp = 0xB332, .start = 10155, .len = 3 }, + .{ .cp = 0xB333, .start = 10158, .len = 3 }, + .{ .cp = 0xB334, .start = 10161, .len = 3 }, + .{ .cp = 0xB335, .start = 10164, .len = 3 }, + .{ .cp = 0xB336, .start = 10167, .len = 3 }, + .{ .cp = 0xB337, .start = 10170, .len = 3 }, + .{ .cp = 0xB338, .start = 10173, .len = 2 }, + .{ .cp = 0xB339, .start = 10175, .len = 3 }, + .{ .cp = 0xB33A, .start = 10178, .len = 3 }, + .{ .cp = 0xB33B, .start = 10181, .len = 3 }, + .{ .cp = 0xB33C, .start = 10184, .len = 3 }, + .{ .cp = 0xB33D, .start = 10187, .len = 3 }, + .{ .cp = 0xB33E, .start = 10190, .len = 3 }, + .{ .cp = 0xB33F, .start = 10193, .len = 3 }, + .{ .cp = 0xB340, .start = 10196, .len = 3 }, + .{ .cp = 0xB341, .start = 10199, .len = 3 }, + .{ .cp = 0xB342, .start = 10202, .len = 3 }, + .{ .cp = 0xB343, .start = 10205, .len = 3 }, + .{ .cp = 0xB344, .start = 10208, .len = 3 }, + .{ .cp = 0xB345, .start = 10211, .len = 3 }, + .{ .cp = 0xB346, .start = 10214, .len = 3 }, + .{ .cp = 0xB347, .start = 10217, .len = 3 }, + .{ .cp = 0xB348, .start = 10220, .len = 3 }, + .{ .cp = 0xB349, .start = 10223, .len = 3 }, + .{ .cp = 0xB34A, .start = 10226, .len = 3 }, + .{ .cp = 0xB34B, .start = 10229, .len = 3 }, + .{ .cp = 0xB34C, .start = 10232, .len = 3 }, + .{ .cp = 0xB34D, .start = 10235, .len = 3 }, + .{ .cp = 0xB34E, .start = 10238, .len = 3 }, + .{ .cp = 0xB34F, .start = 10241, .len = 3 }, + .{ .cp = 0xB350, .start = 10244, .len = 3 }, + .{ .cp = 0xB351, .start = 10247, .len = 3 }, + .{ .cp = 0xB352, .start = 10250, .len = 3 }, + .{ .cp = 0xB353, .start = 10253, .len = 3 }, + .{ .cp = 0xB354, .start = 10256, .len = 2 }, + .{ .cp = 0xB355, .start = 10258, .len = 3 }, + .{ .cp = 0xB356, .start = 10261, .len = 3 }, + .{ .cp = 0xB357, .start = 10264, .len = 3 }, + .{ .cp = 0xB358, .start = 10267, .len = 3 }, + .{ .cp = 0xB359, .start = 10270, .len = 3 }, + .{ .cp = 0xB35A, .start = 10273, .len = 3 }, + .{ .cp = 0xB35B, .start = 10276, .len = 3 }, + .{ .cp = 0xB35C, .start = 10279, .len = 3 }, + .{ .cp = 0xB35D, .start = 10282, .len = 3 }, + .{ .cp = 0xB35E, .start = 10285, .len = 3 }, + .{ .cp = 0xB35F, .start = 10288, .len = 3 }, + .{ .cp = 0xB360, .start = 10291, .len = 3 }, + .{ .cp = 0xB361, .start = 10294, .len = 3 }, + .{ .cp = 0xB362, .start = 10297, .len = 3 }, + .{ .cp = 0xB363, .start = 10300, .len = 3 }, + .{ .cp = 0xB364, .start = 10303, .len = 3 }, + .{ .cp = 0xB365, .start = 10306, .len = 3 }, + .{ .cp = 0xB366, .start = 10309, .len = 3 }, + .{ .cp = 0xB367, .start = 10312, .len = 3 }, + .{ .cp = 0xB368, .start = 10315, .len = 3 }, + .{ .cp = 0xB369, .start = 10318, .len = 3 }, + .{ .cp = 0xB36A, .start = 10321, .len = 3 }, + .{ .cp = 0xB36B, .start = 10324, .len = 3 }, + .{ .cp = 0xB36C, .start = 10327, .len = 3 }, + .{ .cp = 0xB36D, .start = 10330, .len = 3 }, + .{ .cp = 0xB36E, .start = 10333, .len = 3 }, + .{ .cp = 0xB36F, .start = 10336, .len = 3 }, + .{ .cp = 0xB370, .start = 10339, .len = 2 }, + .{ .cp = 0xB371, .start = 10341, .len = 3 }, + .{ .cp = 0xB372, .start = 10344, .len = 3 }, + .{ .cp = 0xB373, .start = 10347, .len = 3 }, + .{ .cp = 0xB374, .start = 10350, .len = 3 }, + .{ .cp = 0xB375, .start = 10353, .len = 3 }, + .{ .cp = 0xB376, .start = 10356, .len = 3 }, + .{ .cp = 0xB377, .start = 10359, .len = 3 }, + .{ .cp = 0xB378, .start = 10362, .len = 3 }, + .{ .cp = 0xB379, .start = 10365, .len = 3 }, + .{ .cp = 0xB37A, .start = 10368, .len = 3 }, + .{ .cp = 0xB37B, .start = 10371, .len = 3 }, + .{ .cp = 0xB37C, .start = 10374, .len = 3 }, + .{ .cp = 0xB37D, .start = 10377, .len = 3 }, + .{ .cp = 0xB37E, .start = 10380, .len = 3 }, + .{ .cp = 0xB37F, .start = 10383, .len = 3 }, + .{ .cp = 0xB380, .start = 10386, .len = 3 }, + .{ .cp = 0xB381, .start = 10389, .len = 3 }, + .{ .cp = 0xB382, .start = 10392, .len = 3 }, + .{ .cp = 0xB383, .start = 10395, .len = 3 }, + .{ .cp = 0xB384, .start = 10398, .len = 3 }, + .{ .cp = 0xB385, .start = 10401, .len = 3 }, + .{ .cp = 0xB386, .start = 10404, .len = 3 }, + .{ .cp = 0xB387, .start = 10407, .len = 3 }, + .{ .cp = 0xB388, .start = 10410, .len = 3 }, + .{ .cp = 0xB389, .start = 10413, .len = 3 }, + .{ .cp = 0xB38A, .start = 10416, .len = 3 }, + .{ .cp = 0xB38B, .start = 10419, .len = 3 }, + .{ .cp = 0xB38C, .start = 10422, .len = 2 }, + .{ .cp = 0xB38D, .start = 10424, .len = 3 }, + .{ .cp = 0xB38E, .start = 10427, .len = 3 }, + .{ .cp = 0xB38F, .start = 10430, .len = 3 }, + .{ .cp = 0xB390, .start = 10433, .len = 3 }, + .{ .cp = 0xB391, .start = 10436, .len = 3 }, + .{ .cp = 0xB392, .start = 10439, .len = 3 }, + .{ .cp = 0xB393, .start = 10442, .len = 3 }, + .{ .cp = 0xB394, .start = 10445, .len = 3 }, + .{ .cp = 0xB395, .start = 10448, .len = 3 }, + .{ .cp = 0xB396, .start = 10451, .len = 3 }, + .{ .cp = 0xB397, .start = 10454, .len = 3 }, + .{ .cp = 0xB398, .start = 10457, .len = 3 }, + .{ .cp = 0xB399, .start = 10460, .len = 3 }, + .{ .cp = 0xB39A, .start = 10463, .len = 3 }, + .{ .cp = 0xB39B, .start = 10466, .len = 3 }, + .{ .cp = 0xB39C, .start = 10469, .len = 3 }, + .{ .cp = 0xB39D, .start = 10472, .len = 3 }, + .{ .cp = 0xB39E, .start = 10475, .len = 3 }, + .{ .cp = 0xB39F, .start = 10478, .len = 3 }, + .{ .cp = 0xB3A0, .start = 10481, .len = 3 }, + .{ .cp = 0xB3A1, .start = 10484, .len = 3 }, + .{ .cp = 0xB3A2, .start = 10487, .len = 3 }, + .{ .cp = 0xB3A3, .start = 10490, .len = 3 }, + .{ .cp = 0xB3A4, .start = 10493, .len = 3 }, + .{ .cp = 0xB3A5, .start = 10496, .len = 3 }, + .{ .cp = 0xB3A6, .start = 10499, .len = 3 }, + .{ .cp = 0xB3A7, .start = 10502, .len = 3 }, + .{ .cp = 0xB3A8, .start = 10505, .len = 2 }, + .{ .cp = 0xB3A9, .start = 10507, .len = 3 }, + .{ .cp = 0xB3AA, .start = 10510, .len = 3 }, + .{ .cp = 0xB3AB, .start = 10513, .len = 3 }, + .{ .cp = 0xB3AC, .start = 10516, .len = 3 }, + .{ .cp = 0xB3AD, .start = 10519, .len = 3 }, + .{ .cp = 0xB3AE, .start = 10522, .len = 3 }, + .{ .cp = 0xB3AF, .start = 10525, .len = 3 }, + .{ .cp = 0xB3B0, .start = 10528, .len = 3 }, + .{ .cp = 0xB3B1, .start = 10531, .len = 3 }, + .{ .cp = 0xB3B2, .start = 10534, .len = 3 }, + .{ .cp = 0xB3B3, .start = 10537, .len = 3 }, + .{ .cp = 0xB3B4, .start = 10540, .len = 3 }, + .{ .cp = 0xB3B5, .start = 10543, .len = 3 }, + .{ .cp = 0xB3B6, .start = 10546, .len = 3 }, + .{ .cp = 0xB3B7, .start = 10549, .len = 3 }, + .{ .cp = 0xB3B8, .start = 10552, .len = 3 }, + .{ .cp = 0xB3B9, .start = 10555, .len = 3 }, + .{ .cp = 0xB3BA, .start = 10558, .len = 3 }, + .{ .cp = 0xB3BB, .start = 10561, .len = 3 }, + .{ .cp = 0xB3BC, .start = 10564, .len = 3 }, + .{ .cp = 0xB3BD, .start = 10567, .len = 3 }, + .{ .cp = 0xB3BE, .start = 10570, .len = 3 }, + .{ .cp = 0xB3BF, .start = 10573, .len = 3 }, + .{ .cp = 0xB3C0, .start = 10576, .len = 3 }, + .{ .cp = 0xB3C1, .start = 10579, .len = 3 }, + .{ .cp = 0xB3C2, .start = 10582, .len = 3 }, + .{ .cp = 0xB3C3, .start = 10585, .len = 3 }, + .{ .cp = 0xB3C4, .start = 10588, .len = 2 }, + .{ .cp = 0xB3C5, .start = 10590, .len = 3 }, + .{ .cp = 0xB3C6, .start = 10593, .len = 3 }, + .{ .cp = 0xB3C7, .start = 10596, .len = 3 }, + .{ .cp = 0xB3C8, .start = 10599, .len = 3 }, + .{ .cp = 0xB3C9, .start = 10602, .len = 3 }, + .{ .cp = 0xB3CA, .start = 10605, .len = 3 }, + .{ .cp = 0xB3CB, .start = 10608, .len = 3 }, + .{ .cp = 0xB3CC, .start = 10611, .len = 3 }, + .{ .cp = 0xB3CD, .start = 10614, .len = 3 }, + .{ .cp = 0xB3CE, .start = 10617, .len = 3 }, + .{ .cp = 0xB3CF, .start = 10620, .len = 3 }, + .{ .cp = 0xB3D0, .start = 10623, .len = 3 }, + .{ .cp = 0xB3D1, .start = 10626, .len = 3 }, + .{ .cp = 0xB3D2, .start = 10629, .len = 3 }, + .{ .cp = 0xB3D3, .start = 10632, .len = 3 }, + .{ .cp = 0xB3D4, .start = 10635, .len = 3 }, + .{ .cp = 0xB3D5, .start = 10638, .len = 3 }, + .{ .cp = 0xB3D6, .start = 10641, .len = 3 }, + .{ .cp = 0xB3D7, .start = 10644, .len = 3 }, + .{ .cp = 0xB3D8, .start = 10647, .len = 3 }, + .{ .cp = 0xB3D9, .start = 10650, .len = 3 }, + .{ .cp = 0xB3DA, .start = 10653, .len = 3 }, + .{ .cp = 0xB3DB, .start = 10656, .len = 3 }, + .{ .cp = 0xB3DC, .start = 10659, .len = 3 }, + .{ .cp = 0xB3DD, .start = 10662, .len = 3 }, + .{ .cp = 0xB3DE, .start = 10665, .len = 3 }, + .{ .cp = 0xB3DF, .start = 10668, .len = 3 }, + .{ .cp = 0xB3E0, .start = 10671, .len = 2 }, + .{ .cp = 0xB3E1, .start = 10673, .len = 3 }, + .{ .cp = 0xB3E2, .start = 10676, .len = 3 }, + .{ .cp = 0xB3E3, .start = 10679, .len = 3 }, + .{ .cp = 0xB3E4, .start = 10682, .len = 3 }, + .{ .cp = 0xB3E5, .start = 10685, .len = 3 }, + .{ .cp = 0xB3E6, .start = 10688, .len = 3 }, + .{ .cp = 0xB3E7, .start = 10691, .len = 3 }, + .{ .cp = 0xB3E8, .start = 10694, .len = 3 }, + .{ .cp = 0xB3E9, .start = 10697, .len = 3 }, + .{ .cp = 0xB3EA, .start = 10700, .len = 3 }, + .{ .cp = 0xB3EB, .start = 10703, .len = 3 }, + .{ .cp = 0xB3EC, .start = 10706, .len = 3 }, + .{ .cp = 0xB3ED, .start = 10709, .len = 3 }, + .{ .cp = 0xB3EE, .start = 10712, .len = 3 }, + .{ .cp = 0xB3EF, .start = 10715, .len = 3 }, + .{ .cp = 0xB3F0, .start = 10718, .len = 3 }, + .{ .cp = 0xB3F1, .start = 10721, .len = 3 }, + .{ .cp = 0xB3F2, .start = 10724, .len = 3 }, + .{ .cp = 0xB3F3, .start = 10727, .len = 3 }, + .{ .cp = 0xB3F4, .start = 10730, .len = 3 }, + .{ .cp = 0xB3F5, .start = 10733, .len = 3 }, + .{ .cp = 0xB3F6, .start = 10736, .len = 3 }, + .{ .cp = 0xB3F7, .start = 10739, .len = 3 }, + .{ .cp = 0xB3F8, .start = 10742, .len = 3 }, + .{ .cp = 0xB3F9, .start = 10745, .len = 3 }, + .{ .cp = 0xB3FA, .start = 10748, .len = 3 }, + .{ .cp = 0xB3FB, .start = 10751, .len = 3 }, + .{ .cp = 0xB3FC, .start = 10754, .len = 2 }, + .{ .cp = 0xB3FD, .start = 10756, .len = 3 }, + .{ .cp = 0xB3FE, .start = 10759, .len = 3 }, + .{ .cp = 0xB3FF, .start = 10762, .len = 3 }, + .{ .cp = 0xB400, .start = 10765, .len = 3 }, + .{ .cp = 0xB401, .start = 10768, .len = 3 }, + .{ .cp = 0xB402, .start = 10771, .len = 3 }, + .{ .cp = 0xB403, .start = 10774, .len = 3 }, + .{ .cp = 0xB404, .start = 10777, .len = 3 }, + .{ .cp = 0xB405, .start = 10780, .len = 3 }, + .{ .cp = 0xB406, .start = 10783, .len = 3 }, + .{ .cp = 0xB407, .start = 10786, .len = 3 }, + .{ .cp = 0xB408, .start = 10789, .len = 3 }, + .{ .cp = 0xB409, .start = 10792, .len = 3 }, + .{ .cp = 0xB40A, .start = 10795, .len = 3 }, + .{ .cp = 0xB40B, .start = 10798, .len = 3 }, + .{ .cp = 0xB40C, .start = 10801, .len = 3 }, + .{ .cp = 0xB40D, .start = 10804, .len = 3 }, + .{ .cp = 0xB40E, .start = 10807, .len = 3 }, + .{ .cp = 0xB40F, .start = 10810, .len = 3 }, + .{ .cp = 0xB410, .start = 10813, .len = 3 }, + .{ .cp = 0xB411, .start = 10816, .len = 3 }, + .{ .cp = 0xB412, .start = 10819, .len = 3 }, + .{ .cp = 0xB413, .start = 10822, .len = 3 }, + .{ .cp = 0xB414, .start = 10825, .len = 3 }, + .{ .cp = 0xB415, .start = 10828, .len = 3 }, + .{ .cp = 0xB416, .start = 10831, .len = 3 }, + .{ .cp = 0xB417, .start = 10834, .len = 3 }, + .{ .cp = 0xB418, .start = 10837, .len = 2 }, + .{ .cp = 0xB419, .start = 10839, .len = 3 }, + .{ .cp = 0xB41A, .start = 10842, .len = 3 }, + .{ .cp = 0xB41B, .start = 10845, .len = 3 }, + .{ .cp = 0xB41C, .start = 10848, .len = 3 }, + .{ .cp = 0xB41D, .start = 10851, .len = 3 }, + .{ .cp = 0xB41E, .start = 10854, .len = 3 }, + .{ .cp = 0xB41F, .start = 10857, .len = 3 }, + .{ .cp = 0xB420, .start = 10860, .len = 3 }, + .{ .cp = 0xB421, .start = 10863, .len = 3 }, + .{ .cp = 0xB422, .start = 10866, .len = 3 }, + .{ .cp = 0xB423, .start = 10869, .len = 3 }, + .{ .cp = 0xB424, .start = 10872, .len = 3 }, + .{ .cp = 0xB425, .start = 10875, .len = 3 }, + .{ .cp = 0xB426, .start = 10878, .len = 3 }, + .{ .cp = 0xB427, .start = 10881, .len = 3 }, + .{ .cp = 0xB428, .start = 10884, .len = 3 }, + .{ .cp = 0xB429, .start = 10887, .len = 3 }, + .{ .cp = 0xB42A, .start = 10890, .len = 3 }, + .{ .cp = 0xB42B, .start = 10893, .len = 3 }, + .{ .cp = 0xB42C, .start = 10896, .len = 3 }, + .{ .cp = 0xB42D, .start = 10899, .len = 3 }, + .{ .cp = 0xB42E, .start = 10902, .len = 3 }, + .{ .cp = 0xB42F, .start = 10905, .len = 3 }, + .{ .cp = 0xB430, .start = 10908, .len = 3 }, + .{ .cp = 0xB431, .start = 10911, .len = 3 }, + .{ .cp = 0xB432, .start = 10914, .len = 3 }, + .{ .cp = 0xB433, .start = 10917, .len = 3 }, + .{ .cp = 0xB434, .start = 10920, .len = 2 }, + .{ .cp = 0xB435, .start = 10922, .len = 3 }, + .{ .cp = 0xB436, .start = 10925, .len = 3 }, + .{ .cp = 0xB437, .start = 10928, .len = 3 }, + .{ .cp = 0xB438, .start = 10931, .len = 3 }, + .{ .cp = 0xB439, .start = 10934, .len = 3 }, + .{ .cp = 0xB43A, .start = 10937, .len = 3 }, + .{ .cp = 0xB43B, .start = 10940, .len = 3 }, + .{ .cp = 0xB43C, .start = 10943, .len = 3 }, + .{ .cp = 0xB43D, .start = 10946, .len = 3 }, + .{ .cp = 0xB43E, .start = 10949, .len = 3 }, + .{ .cp = 0xB43F, .start = 10952, .len = 3 }, + .{ .cp = 0xB440, .start = 10955, .len = 3 }, + .{ .cp = 0xB441, .start = 10958, .len = 3 }, + .{ .cp = 0xB442, .start = 10961, .len = 3 }, + .{ .cp = 0xB443, .start = 10964, .len = 3 }, + .{ .cp = 0xB444, .start = 10967, .len = 3 }, + .{ .cp = 0xB445, .start = 10970, .len = 3 }, + .{ .cp = 0xB446, .start = 10973, .len = 3 }, + .{ .cp = 0xB447, .start = 10976, .len = 3 }, + .{ .cp = 0xB448, .start = 10979, .len = 3 }, + .{ .cp = 0xB449, .start = 10982, .len = 3 }, + .{ .cp = 0xB44A, .start = 10985, .len = 3 }, + .{ .cp = 0xB44B, .start = 10988, .len = 3 }, + .{ .cp = 0xB44C, .start = 10991, .len = 3 }, + .{ .cp = 0xB44D, .start = 10994, .len = 3 }, + .{ .cp = 0xB44E, .start = 10997, .len = 3 }, + .{ .cp = 0xB44F, .start = 11000, .len = 3 }, + .{ .cp = 0xB450, .start = 11003, .len = 2 }, + .{ .cp = 0xB451, .start = 11005, .len = 3 }, + .{ .cp = 0xB452, .start = 11008, .len = 3 }, + .{ .cp = 0xB453, .start = 11011, .len = 3 }, + .{ .cp = 0xB454, .start = 11014, .len = 3 }, + .{ .cp = 0xB455, .start = 11017, .len = 3 }, + .{ .cp = 0xB456, .start = 11020, .len = 3 }, + .{ .cp = 0xB457, .start = 11023, .len = 3 }, + .{ .cp = 0xB458, .start = 11026, .len = 3 }, + .{ .cp = 0xB459, .start = 11029, .len = 3 }, + .{ .cp = 0xB45A, .start = 11032, .len = 3 }, + .{ .cp = 0xB45B, .start = 11035, .len = 3 }, + .{ .cp = 0xB45C, .start = 11038, .len = 3 }, + .{ .cp = 0xB45D, .start = 11041, .len = 3 }, + .{ .cp = 0xB45E, .start = 11044, .len = 3 }, + .{ .cp = 0xB45F, .start = 11047, .len = 3 }, + .{ .cp = 0xB460, .start = 11050, .len = 3 }, + .{ .cp = 0xB461, .start = 11053, .len = 3 }, + .{ .cp = 0xB462, .start = 11056, .len = 3 }, + .{ .cp = 0xB463, .start = 11059, .len = 3 }, + .{ .cp = 0xB464, .start = 11062, .len = 3 }, + .{ .cp = 0xB465, .start = 11065, .len = 3 }, + .{ .cp = 0xB466, .start = 11068, .len = 3 }, + .{ .cp = 0xB467, .start = 11071, .len = 3 }, + .{ .cp = 0xB468, .start = 11074, .len = 3 }, + .{ .cp = 0xB469, .start = 11077, .len = 3 }, + .{ .cp = 0xB46A, .start = 11080, .len = 3 }, + .{ .cp = 0xB46B, .start = 11083, .len = 3 }, + .{ .cp = 0xB46C, .start = 11086, .len = 2 }, + .{ .cp = 0xB46D, .start = 11088, .len = 3 }, + .{ .cp = 0xB46E, .start = 11091, .len = 3 }, + .{ .cp = 0xB46F, .start = 11094, .len = 3 }, + .{ .cp = 0xB470, .start = 11097, .len = 3 }, + .{ .cp = 0xB471, .start = 11100, .len = 3 }, + .{ .cp = 0xB472, .start = 11103, .len = 3 }, + .{ .cp = 0xB473, .start = 11106, .len = 3 }, + .{ .cp = 0xB474, .start = 11109, .len = 3 }, + .{ .cp = 0xB475, .start = 11112, .len = 3 }, + .{ .cp = 0xB476, .start = 11115, .len = 3 }, + .{ .cp = 0xB477, .start = 11118, .len = 3 }, + .{ .cp = 0xB478, .start = 11121, .len = 3 }, + .{ .cp = 0xB479, .start = 11124, .len = 3 }, + .{ .cp = 0xB47A, .start = 11127, .len = 3 }, + .{ .cp = 0xB47B, .start = 11130, .len = 3 }, + .{ .cp = 0xB47C, .start = 11133, .len = 3 }, + .{ .cp = 0xB47D, .start = 11136, .len = 3 }, + .{ .cp = 0xB47E, .start = 11139, .len = 3 }, + .{ .cp = 0xB47F, .start = 11142, .len = 3 }, + .{ .cp = 0xB480, .start = 11145, .len = 3 }, + .{ .cp = 0xB481, .start = 11148, .len = 3 }, + .{ .cp = 0xB482, .start = 11151, .len = 3 }, + .{ .cp = 0xB483, .start = 11154, .len = 3 }, + .{ .cp = 0xB484, .start = 11157, .len = 3 }, + .{ .cp = 0xB485, .start = 11160, .len = 3 }, + .{ .cp = 0xB486, .start = 11163, .len = 3 }, + .{ .cp = 0xB487, .start = 11166, .len = 3 }, + .{ .cp = 0xB488, .start = 11169, .len = 2 }, + .{ .cp = 0xB489, .start = 11171, .len = 3 }, + .{ .cp = 0xB48A, .start = 11174, .len = 3 }, + .{ .cp = 0xB48B, .start = 11177, .len = 3 }, + .{ .cp = 0xB48C, .start = 11180, .len = 3 }, + .{ .cp = 0xB48D, .start = 11183, .len = 3 }, + .{ .cp = 0xB48E, .start = 11186, .len = 3 }, + .{ .cp = 0xB48F, .start = 11189, .len = 3 }, + .{ .cp = 0xB490, .start = 11192, .len = 3 }, + .{ .cp = 0xB491, .start = 11195, .len = 3 }, + .{ .cp = 0xB492, .start = 11198, .len = 3 }, + .{ .cp = 0xB493, .start = 11201, .len = 3 }, + .{ .cp = 0xB494, .start = 11204, .len = 3 }, + .{ .cp = 0xB495, .start = 11207, .len = 3 }, + .{ .cp = 0xB496, .start = 11210, .len = 3 }, + .{ .cp = 0xB497, .start = 11213, .len = 3 }, + .{ .cp = 0xB498, .start = 11216, .len = 3 }, + .{ .cp = 0xB499, .start = 11219, .len = 3 }, + .{ .cp = 0xB49A, .start = 11222, .len = 3 }, + .{ .cp = 0xB49B, .start = 11225, .len = 3 }, + .{ .cp = 0xB49C, .start = 11228, .len = 3 }, + .{ .cp = 0xB49D, .start = 11231, .len = 3 }, + .{ .cp = 0xB49E, .start = 11234, .len = 3 }, + .{ .cp = 0xB49F, .start = 11237, .len = 3 }, + .{ .cp = 0xB4A0, .start = 11240, .len = 3 }, + .{ .cp = 0xB4A1, .start = 11243, .len = 3 }, + .{ .cp = 0xB4A2, .start = 11246, .len = 3 }, + .{ .cp = 0xB4A3, .start = 11249, .len = 3 }, + .{ .cp = 0xB4A4, .start = 11252, .len = 2 }, + .{ .cp = 0xB4A5, .start = 11254, .len = 3 }, + .{ .cp = 0xB4A6, .start = 11257, .len = 3 }, + .{ .cp = 0xB4A7, .start = 11260, .len = 3 }, + .{ .cp = 0xB4A8, .start = 11263, .len = 3 }, + .{ .cp = 0xB4A9, .start = 11266, .len = 3 }, + .{ .cp = 0xB4AA, .start = 11269, .len = 3 }, + .{ .cp = 0xB4AB, .start = 11272, .len = 3 }, + .{ .cp = 0xB4AC, .start = 11275, .len = 3 }, + .{ .cp = 0xB4AD, .start = 11278, .len = 3 }, + .{ .cp = 0xB4AE, .start = 11281, .len = 3 }, + .{ .cp = 0xB4AF, .start = 11284, .len = 3 }, + .{ .cp = 0xB4B0, .start = 11287, .len = 3 }, + .{ .cp = 0xB4B1, .start = 11290, .len = 3 }, + .{ .cp = 0xB4B2, .start = 11293, .len = 3 }, + .{ .cp = 0xB4B3, .start = 11296, .len = 3 }, + .{ .cp = 0xB4B4, .start = 11299, .len = 3 }, + .{ .cp = 0xB4B5, .start = 11302, .len = 3 }, + .{ .cp = 0xB4B6, .start = 11305, .len = 3 }, + .{ .cp = 0xB4B7, .start = 11308, .len = 3 }, + .{ .cp = 0xB4B8, .start = 11311, .len = 3 }, + .{ .cp = 0xB4B9, .start = 11314, .len = 3 }, + .{ .cp = 0xB4BA, .start = 11317, .len = 3 }, + .{ .cp = 0xB4BB, .start = 11320, .len = 3 }, + .{ .cp = 0xB4BC, .start = 11323, .len = 3 }, + .{ .cp = 0xB4BD, .start = 11326, .len = 3 }, + .{ .cp = 0xB4BE, .start = 11329, .len = 3 }, + .{ .cp = 0xB4BF, .start = 11332, .len = 3 }, + .{ .cp = 0xB4C0, .start = 11335, .len = 2 }, + .{ .cp = 0xB4C1, .start = 11337, .len = 3 }, + .{ .cp = 0xB4C2, .start = 11340, .len = 3 }, + .{ .cp = 0xB4C3, .start = 11343, .len = 3 }, + .{ .cp = 0xB4C4, .start = 11346, .len = 3 }, + .{ .cp = 0xB4C5, .start = 11349, .len = 3 }, + .{ .cp = 0xB4C6, .start = 11352, .len = 3 }, + .{ .cp = 0xB4C7, .start = 11355, .len = 3 }, + .{ .cp = 0xB4C8, .start = 11358, .len = 3 }, + .{ .cp = 0xB4C9, .start = 11361, .len = 3 }, + .{ .cp = 0xB4CA, .start = 11364, .len = 3 }, + .{ .cp = 0xB4CB, .start = 11367, .len = 3 }, + .{ .cp = 0xB4CC, .start = 11370, .len = 3 }, + .{ .cp = 0xB4CD, .start = 11373, .len = 3 }, + .{ .cp = 0xB4CE, .start = 11376, .len = 3 }, + .{ .cp = 0xB4CF, .start = 11379, .len = 3 }, + .{ .cp = 0xB4D0, .start = 11382, .len = 3 }, + .{ .cp = 0xB4D1, .start = 11385, .len = 3 }, + .{ .cp = 0xB4D2, .start = 11388, .len = 3 }, + .{ .cp = 0xB4D3, .start = 11391, .len = 3 }, + .{ .cp = 0xB4D4, .start = 11394, .len = 3 }, + .{ .cp = 0xB4D5, .start = 11397, .len = 3 }, + .{ .cp = 0xB4D6, .start = 11400, .len = 3 }, + .{ .cp = 0xB4D7, .start = 11403, .len = 3 }, + .{ .cp = 0xB4D8, .start = 11406, .len = 3 }, + .{ .cp = 0xB4D9, .start = 11409, .len = 3 }, + .{ .cp = 0xB4DA, .start = 11412, .len = 3 }, + .{ .cp = 0xB4DB, .start = 11415, .len = 3 }, + .{ .cp = 0xB4DC, .start = 11418, .len = 2 }, + .{ .cp = 0xB4DD, .start = 11420, .len = 3 }, + .{ .cp = 0xB4DE, .start = 11423, .len = 3 }, + .{ .cp = 0xB4DF, .start = 11426, .len = 3 }, + .{ .cp = 0xB4E0, .start = 11429, .len = 3 }, + .{ .cp = 0xB4E1, .start = 11432, .len = 3 }, + .{ .cp = 0xB4E2, .start = 11435, .len = 3 }, + .{ .cp = 0xB4E3, .start = 11438, .len = 3 }, + .{ .cp = 0xB4E4, .start = 11441, .len = 3 }, + .{ .cp = 0xB4E5, .start = 11444, .len = 3 }, + .{ .cp = 0xB4E6, .start = 11447, .len = 3 }, + .{ .cp = 0xB4E7, .start = 11450, .len = 3 }, + .{ .cp = 0xB4E8, .start = 11453, .len = 3 }, + .{ .cp = 0xB4E9, .start = 11456, .len = 3 }, + .{ .cp = 0xB4EA, .start = 11459, .len = 3 }, + .{ .cp = 0xB4EB, .start = 11462, .len = 3 }, + .{ .cp = 0xB4EC, .start = 11465, .len = 3 }, + .{ .cp = 0xB4ED, .start = 11468, .len = 3 }, + .{ .cp = 0xB4EE, .start = 11471, .len = 3 }, + .{ .cp = 0xB4EF, .start = 11474, .len = 3 }, + .{ .cp = 0xB4F0, .start = 11477, .len = 3 }, + .{ .cp = 0xB4F1, .start = 11480, .len = 3 }, + .{ .cp = 0xB4F2, .start = 11483, .len = 3 }, + .{ .cp = 0xB4F3, .start = 11486, .len = 3 }, + .{ .cp = 0xB4F4, .start = 11489, .len = 3 }, + .{ .cp = 0xB4F5, .start = 11492, .len = 3 }, + .{ .cp = 0xB4F6, .start = 11495, .len = 3 }, + .{ .cp = 0xB4F7, .start = 11498, .len = 3 }, + .{ .cp = 0xB4F8, .start = 11501, .len = 2 }, + .{ .cp = 0xB4F9, .start = 11503, .len = 3 }, + .{ .cp = 0xB4FA, .start = 11506, .len = 3 }, + .{ .cp = 0xB4FB, .start = 11509, .len = 3 }, + .{ .cp = 0xB4FC, .start = 11512, .len = 3 }, + .{ .cp = 0xB4FD, .start = 11515, .len = 3 }, + .{ .cp = 0xB4FE, .start = 11518, .len = 3 }, + .{ .cp = 0xB4FF, .start = 11521, .len = 3 }, + .{ .cp = 0xB500, .start = 11524, .len = 3 }, + .{ .cp = 0xB501, .start = 11527, .len = 3 }, + .{ .cp = 0xB502, .start = 11530, .len = 3 }, + .{ .cp = 0xB503, .start = 11533, .len = 3 }, + .{ .cp = 0xB504, .start = 11536, .len = 3 }, + .{ .cp = 0xB505, .start = 11539, .len = 3 }, + .{ .cp = 0xB506, .start = 11542, .len = 3 }, + .{ .cp = 0xB507, .start = 11545, .len = 3 }, + .{ .cp = 0xB508, .start = 11548, .len = 3 }, + .{ .cp = 0xB509, .start = 11551, .len = 3 }, + .{ .cp = 0xB50A, .start = 11554, .len = 3 }, + .{ .cp = 0xB50B, .start = 11557, .len = 3 }, + .{ .cp = 0xB50C, .start = 11560, .len = 3 }, + .{ .cp = 0xB50D, .start = 11563, .len = 3 }, + .{ .cp = 0xB50E, .start = 11566, .len = 3 }, + .{ .cp = 0xB50F, .start = 11569, .len = 3 }, + .{ .cp = 0xB510, .start = 11572, .len = 3 }, + .{ .cp = 0xB511, .start = 11575, .len = 3 }, + .{ .cp = 0xB512, .start = 11578, .len = 3 }, + .{ .cp = 0xB513, .start = 11581, .len = 3 }, + .{ .cp = 0xB514, .start = 11584, .len = 2 }, + .{ .cp = 0xB515, .start = 11586, .len = 3 }, + .{ .cp = 0xB516, .start = 11589, .len = 3 }, + .{ .cp = 0xB517, .start = 11592, .len = 3 }, + .{ .cp = 0xB518, .start = 11595, .len = 3 }, + .{ .cp = 0xB519, .start = 11598, .len = 3 }, + .{ .cp = 0xB51A, .start = 11601, .len = 3 }, + .{ .cp = 0xB51B, .start = 11604, .len = 3 }, + .{ .cp = 0xB51C, .start = 11607, .len = 3 }, + .{ .cp = 0xB51D, .start = 11610, .len = 3 }, + .{ .cp = 0xB51E, .start = 11613, .len = 3 }, + .{ .cp = 0xB51F, .start = 11616, .len = 3 }, + .{ .cp = 0xB520, .start = 11619, .len = 3 }, + .{ .cp = 0xB521, .start = 11622, .len = 3 }, + .{ .cp = 0xB522, .start = 11625, .len = 3 }, + .{ .cp = 0xB523, .start = 11628, .len = 3 }, + .{ .cp = 0xB524, .start = 11631, .len = 3 }, + .{ .cp = 0xB525, .start = 11634, .len = 3 }, + .{ .cp = 0xB526, .start = 11637, .len = 3 }, + .{ .cp = 0xB527, .start = 11640, .len = 3 }, + .{ .cp = 0xB528, .start = 11643, .len = 3 }, + .{ .cp = 0xB529, .start = 11646, .len = 3 }, + .{ .cp = 0xB52A, .start = 11649, .len = 3 }, + .{ .cp = 0xB52B, .start = 11652, .len = 3 }, + .{ .cp = 0xB52C, .start = 11655, .len = 3 }, + .{ .cp = 0xB52D, .start = 11658, .len = 3 }, + .{ .cp = 0xB52E, .start = 11661, .len = 3 }, + .{ .cp = 0xB52F, .start = 11664, .len = 3 }, + .{ .cp = 0xB530, .start = 11667, .len = 2 }, + .{ .cp = 0xB531, .start = 11669, .len = 3 }, + .{ .cp = 0xB532, .start = 11672, .len = 3 }, + .{ .cp = 0xB533, .start = 11675, .len = 3 }, + .{ .cp = 0xB534, .start = 11678, .len = 3 }, + .{ .cp = 0xB535, .start = 11681, .len = 3 }, + .{ .cp = 0xB536, .start = 11684, .len = 3 }, + .{ .cp = 0xB537, .start = 11687, .len = 3 }, + .{ .cp = 0xB538, .start = 11690, .len = 3 }, + .{ .cp = 0xB539, .start = 11693, .len = 3 }, + .{ .cp = 0xB53A, .start = 11696, .len = 3 }, + .{ .cp = 0xB53B, .start = 11699, .len = 3 }, + .{ .cp = 0xB53C, .start = 11702, .len = 3 }, + .{ .cp = 0xB53D, .start = 11705, .len = 3 }, + .{ .cp = 0xB53E, .start = 11708, .len = 3 }, + .{ .cp = 0xB53F, .start = 11711, .len = 3 }, + .{ .cp = 0xB540, .start = 11714, .len = 3 }, + .{ .cp = 0xB541, .start = 11717, .len = 3 }, + .{ .cp = 0xB542, .start = 11720, .len = 3 }, + .{ .cp = 0xB543, .start = 11723, .len = 3 }, + .{ .cp = 0xB544, .start = 11726, .len = 3 }, + .{ .cp = 0xB545, .start = 11729, .len = 3 }, + .{ .cp = 0xB546, .start = 11732, .len = 3 }, + .{ .cp = 0xB547, .start = 11735, .len = 3 }, + .{ .cp = 0xB548, .start = 11738, .len = 3 }, + .{ .cp = 0xB549, .start = 11741, .len = 3 }, + .{ .cp = 0xB54A, .start = 11744, .len = 3 }, + .{ .cp = 0xB54B, .start = 11747, .len = 3 }, + .{ .cp = 0xB54C, .start = 11750, .len = 2 }, + .{ .cp = 0xB54D, .start = 11752, .len = 3 }, + .{ .cp = 0xB54E, .start = 11755, .len = 3 }, + .{ .cp = 0xB54F, .start = 11758, .len = 3 }, + .{ .cp = 0xB550, .start = 11761, .len = 3 }, + .{ .cp = 0xB551, .start = 11764, .len = 3 }, + .{ .cp = 0xB552, .start = 11767, .len = 3 }, + .{ .cp = 0xB553, .start = 11770, .len = 3 }, + .{ .cp = 0xB554, .start = 11773, .len = 3 }, + .{ .cp = 0xB555, .start = 11776, .len = 3 }, + .{ .cp = 0xB556, .start = 11779, .len = 3 }, + .{ .cp = 0xB557, .start = 11782, .len = 3 }, + .{ .cp = 0xB558, .start = 11785, .len = 3 }, + .{ .cp = 0xB559, .start = 11788, .len = 3 }, + .{ .cp = 0xB55A, .start = 11791, .len = 3 }, + .{ .cp = 0xB55B, .start = 11794, .len = 3 }, + .{ .cp = 0xB55C, .start = 11797, .len = 3 }, + .{ .cp = 0xB55D, .start = 11800, .len = 3 }, + .{ .cp = 0xB55E, .start = 11803, .len = 3 }, + .{ .cp = 0xB55F, .start = 11806, .len = 3 }, + .{ .cp = 0xB560, .start = 11809, .len = 3 }, + .{ .cp = 0xB561, .start = 11812, .len = 3 }, + .{ .cp = 0xB562, .start = 11815, .len = 3 }, + .{ .cp = 0xB563, .start = 11818, .len = 3 }, + .{ .cp = 0xB564, .start = 11821, .len = 3 }, + .{ .cp = 0xB565, .start = 11824, .len = 3 }, + .{ .cp = 0xB566, .start = 11827, .len = 3 }, + .{ .cp = 0xB567, .start = 11830, .len = 3 }, + .{ .cp = 0xB568, .start = 11833, .len = 2 }, + .{ .cp = 0xB569, .start = 11835, .len = 3 }, + .{ .cp = 0xB56A, .start = 11838, .len = 3 }, + .{ .cp = 0xB56B, .start = 11841, .len = 3 }, + .{ .cp = 0xB56C, .start = 11844, .len = 3 }, + .{ .cp = 0xB56D, .start = 11847, .len = 3 }, + .{ .cp = 0xB56E, .start = 11850, .len = 3 }, + .{ .cp = 0xB56F, .start = 11853, .len = 3 }, + .{ .cp = 0xB570, .start = 11856, .len = 3 }, + .{ .cp = 0xB571, .start = 11859, .len = 3 }, + .{ .cp = 0xB572, .start = 11862, .len = 3 }, + .{ .cp = 0xB573, .start = 11865, .len = 3 }, + .{ .cp = 0xB574, .start = 11868, .len = 3 }, + .{ .cp = 0xB575, .start = 11871, .len = 3 }, + .{ .cp = 0xB576, .start = 11874, .len = 3 }, + .{ .cp = 0xB577, .start = 11877, .len = 3 }, + .{ .cp = 0xB578, .start = 11880, .len = 3 }, + .{ .cp = 0xB579, .start = 11883, .len = 3 }, + .{ .cp = 0xB57A, .start = 11886, .len = 3 }, + .{ .cp = 0xB57B, .start = 11889, .len = 3 }, + .{ .cp = 0xB57C, .start = 11892, .len = 3 }, + .{ .cp = 0xB57D, .start = 11895, .len = 3 }, + .{ .cp = 0xB57E, .start = 11898, .len = 3 }, + .{ .cp = 0xB57F, .start = 11901, .len = 3 }, + .{ .cp = 0xB580, .start = 11904, .len = 3 }, + .{ .cp = 0xB581, .start = 11907, .len = 3 }, + .{ .cp = 0xB582, .start = 11910, .len = 3 }, + .{ .cp = 0xB583, .start = 11913, .len = 3 }, + .{ .cp = 0xB584, .start = 11916, .len = 2 }, + .{ .cp = 0xB585, .start = 11918, .len = 3 }, + .{ .cp = 0xB586, .start = 11921, .len = 3 }, + .{ .cp = 0xB587, .start = 11924, .len = 3 }, + .{ .cp = 0xB588, .start = 11927, .len = 3 }, + .{ .cp = 0xB589, .start = 11930, .len = 3 }, + .{ .cp = 0xB58A, .start = 11933, .len = 3 }, + .{ .cp = 0xB58B, .start = 11936, .len = 3 }, + .{ .cp = 0xB58C, .start = 11939, .len = 3 }, + .{ .cp = 0xB58D, .start = 11942, .len = 3 }, + .{ .cp = 0xB58E, .start = 11945, .len = 3 }, + .{ .cp = 0xB58F, .start = 11948, .len = 3 }, + .{ .cp = 0xB590, .start = 11951, .len = 3 }, + .{ .cp = 0xB591, .start = 11954, .len = 3 }, + .{ .cp = 0xB592, .start = 11957, .len = 3 }, + .{ .cp = 0xB593, .start = 11960, .len = 3 }, + .{ .cp = 0xB594, .start = 11963, .len = 3 }, + .{ .cp = 0xB595, .start = 11966, .len = 3 }, + .{ .cp = 0xB596, .start = 11969, .len = 3 }, + .{ .cp = 0xB597, .start = 11972, .len = 3 }, + .{ .cp = 0xB598, .start = 11975, .len = 3 }, + .{ .cp = 0xB599, .start = 11978, .len = 3 }, + .{ .cp = 0xB59A, .start = 11981, .len = 3 }, + .{ .cp = 0xB59B, .start = 11984, .len = 3 }, + .{ .cp = 0xB59C, .start = 11987, .len = 3 }, + .{ .cp = 0xB59D, .start = 11990, .len = 3 }, + .{ .cp = 0xB59E, .start = 11993, .len = 3 }, + .{ .cp = 0xB59F, .start = 11996, .len = 3 }, + .{ .cp = 0xB5A0, .start = 11999, .len = 2 }, + .{ .cp = 0xB5A1, .start = 12001, .len = 3 }, + .{ .cp = 0xB5A2, .start = 12004, .len = 3 }, + .{ .cp = 0xB5A3, .start = 12007, .len = 3 }, + .{ .cp = 0xB5A4, .start = 12010, .len = 3 }, + .{ .cp = 0xB5A5, .start = 12013, .len = 3 }, + .{ .cp = 0xB5A6, .start = 12016, .len = 3 }, + .{ .cp = 0xB5A7, .start = 12019, .len = 3 }, + .{ .cp = 0xB5A8, .start = 12022, .len = 3 }, + .{ .cp = 0xB5A9, .start = 12025, .len = 3 }, + .{ .cp = 0xB5AA, .start = 12028, .len = 3 }, + .{ .cp = 0xB5AB, .start = 12031, .len = 3 }, + .{ .cp = 0xB5AC, .start = 12034, .len = 3 }, + .{ .cp = 0xB5AD, .start = 12037, .len = 3 }, + .{ .cp = 0xB5AE, .start = 12040, .len = 3 }, + .{ .cp = 0xB5AF, .start = 12043, .len = 3 }, + .{ .cp = 0xB5B0, .start = 12046, .len = 3 }, + .{ .cp = 0xB5B1, .start = 12049, .len = 3 }, + .{ .cp = 0xB5B2, .start = 12052, .len = 3 }, + .{ .cp = 0xB5B3, .start = 12055, .len = 3 }, + .{ .cp = 0xB5B4, .start = 12058, .len = 3 }, + .{ .cp = 0xB5B5, .start = 12061, .len = 3 }, + .{ .cp = 0xB5B6, .start = 12064, .len = 3 }, + .{ .cp = 0xB5B7, .start = 12067, .len = 3 }, + .{ .cp = 0xB5B8, .start = 12070, .len = 3 }, + .{ .cp = 0xB5B9, .start = 12073, .len = 3 }, + .{ .cp = 0xB5BA, .start = 12076, .len = 3 }, + .{ .cp = 0xB5BB, .start = 12079, .len = 3 }, + .{ .cp = 0xB5BC, .start = 12082, .len = 2 }, + .{ .cp = 0xB5BD, .start = 12084, .len = 3 }, + .{ .cp = 0xB5BE, .start = 12087, .len = 3 }, + .{ .cp = 0xB5BF, .start = 12090, .len = 3 }, + .{ .cp = 0xB5C0, .start = 12093, .len = 3 }, + .{ .cp = 0xB5C1, .start = 12096, .len = 3 }, + .{ .cp = 0xB5C2, .start = 12099, .len = 3 }, + .{ .cp = 0xB5C3, .start = 12102, .len = 3 }, + .{ .cp = 0xB5C4, .start = 12105, .len = 3 }, + .{ .cp = 0xB5C5, .start = 12108, .len = 3 }, + .{ .cp = 0xB5C6, .start = 12111, .len = 3 }, + .{ .cp = 0xB5C7, .start = 12114, .len = 3 }, + .{ .cp = 0xB5C8, .start = 12117, .len = 3 }, + .{ .cp = 0xB5C9, .start = 12120, .len = 3 }, + .{ .cp = 0xB5CA, .start = 12123, .len = 3 }, + .{ .cp = 0xB5CB, .start = 12126, .len = 3 }, + .{ .cp = 0xB5CC, .start = 12129, .len = 3 }, + .{ .cp = 0xB5CD, .start = 12132, .len = 3 }, + .{ .cp = 0xB5CE, .start = 12135, .len = 3 }, + .{ .cp = 0xB5CF, .start = 12138, .len = 3 }, + .{ .cp = 0xB5D0, .start = 12141, .len = 3 }, + .{ .cp = 0xB5D1, .start = 12144, .len = 3 }, + .{ .cp = 0xB5D2, .start = 12147, .len = 3 }, + .{ .cp = 0xB5D3, .start = 12150, .len = 3 }, + .{ .cp = 0xB5D4, .start = 12153, .len = 3 }, + .{ .cp = 0xB5D5, .start = 12156, .len = 3 }, + .{ .cp = 0xB5D6, .start = 12159, .len = 3 }, + .{ .cp = 0xB5D7, .start = 12162, .len = 3 }, + .{ .cp = 0xB5D8, .start = 12165, .len = 2 }, + .{ .cp = 0xB5D9, .start = 12167, .len = 3 }, + .{ .cp = 0xB5DA, .start = 12170, .len = 3 }, + .{ .cp = 0xB5DB, .start = 12173, .len = 3 }, + .{ .cp = 0xB5DC, .start = 12176, .len = 3 }, + .{ .cp = 0xB5DD, .start = 12179, .len = 3 }, + .{ .cp = 0xB5DE, .start = 12182, .len = 3 }, + .{ .cp = 0xB5DF, .start = 12185, .len = 3 }, + .{ .cp = 0xB5E0, .start = 12188, .len = 3 }, + .{ .cp = 0xB5E1, .start = 12191, .len = 3 }, + .{ .cp = 0xB5E2, .start = 12194, .len = 3 }, + .{ .cp = 0xB5E3, .start = 12197, .len = 3 }, + .{ .cp = 0xB5E4, .start = 12200, .len = 3 }, + .{ .cp = 0xB5E5, .start = 12203, .len = 3 }, + .{ .cp = 0xB5E6, .start = 12206, .len = 3 }, + .{ .cp = 0xB5E7, .start = 12209, .len = 3 }, + .{ .cp = 0xB5E8, .start = 12212, .len = 3 }, + .{ .cp = 0xB5E9, .start = 12215, .len = 3 }, + .{ .cp = 0xB5EA, .start = 12218, .len = 3 }, + .{ .cp = 0xB5EB, .start = 12221, .len = 3 }, + .{ .cp = 0xB5EC, .start = 12224, .len = 3 }, + .{ .cp = 0xB5ED, .start = 12227, .len = 3 }, + .{ .cp = 0xB5EE, .start = 12230, .len = 3 }, + .{ .cp = 0xB5EF, .start = 12233, .len = 3 }, + .{ .cp = 0xB5F0, .start = 12236, .len = 3 }, + .{ .cp = 0xB5F1, .start = 12239, .len = 3 }, + .{ .cp = 0xB5F2, .start = 12242, .len = 3 }, + .{ .cp = 0xB5F3, .start = 12245, .len = 3 }, + .{ .cp = 0xB5F4, .start = 12248, .len = 2 }, + .{ .cp = 0xB5F5, .start = 12250, .len = 3 }, + .{ .cp = 0xB5F6, .start = 12253, .len = 3 }, + .{ .cp = 0xB5F7, .start = 12256, .len = 3 }, + .{ .cp = 0xB5F8, .start = 12259, .len = 3 }, + .{ .cp = 0xB5F9, .start = 12262, .len = 3 }, + .{ .cp = 0xB5FA, .start = 12265, .len = 3 }, + .{ .cp = 0xB5FB, .start = 12268, .len = 3 }, + .{ .cp = 0xB5FC, .start = 12271, .len = 3 }, + .{ .cp = 0xB5FD, .start = 12274, .len = 3 }, + .{ .cp = 0xB5FE, .start = 12277, .len = 3 }, + .{ .cp = 0xB5FF, .start = 12280, .len = 3 }, + .{ .cp = 0xB600, .start = 12283, .len = 3 }, + .{ .cp = 0xB601, .start = 12286, .len = 3 }, + .{ .cp = 0xB602, .start = 12289, .len = 3 }, + .{ .cp = 0xB603, .start = 12292, .len = 3 }, + .{ .cp = 0xB604, .start = 12295, .len = 3 }, + .{ .cp = 0xB605, .start = 12298, .len = 3 }, + .{ .cp = 0xB606, .start = 12301, .len = 3 }, + .{ .cp = 0xB607, .start = 12304, .len = 3 }, + .{ .cp = 0xB608, .start = 12307, .len = 3 }, + .{ .cp = 0xB609, .start = 12310, .len = 3 }, + .{ .cp = 0xB60A, .start = 12313, .len = 3 }, + .{ .cp = 0xB60B, .start = 12316, .len = 3 }, + .{ .cp = 0xB60C, .start = 12319, .len = 3 }, + .{ .cp = 0xB60D, .start = 12322, .len = 3 }, + .{ .cp = 0xB60E, .start = 12325, .len = 3 }, + .{ .cp = 0xB60F, .start = 12328, .len = 3 }, + .{ .cp = 0xB610, .start = 12331, .len = 2 }, + .{ .cp = 0xB611, .start = 12333, .len = 3 }, + .{ .cp = 0xB612, .start = 12336, .len = 3 }, + .{ .cp = 0xB613, .start = 12339, .len = 3 }, + .{ .cp = 0xB614, .start = 12342, .len = 3 }, + .{ .cp = 0xB615, .start = 12345, .len = 3 }, + .{ .cp = 0xB616, .start = 12348, .len = 3 }, + .{ .cp = 0xB617, .start = 12351, .len = 3 }, + .{ .cp = 0xB618, .start = 12354, .len = 3 }, + .{ .cp = 0xB619, .start = 12357, .len = 3 }, + .{ .cp = 0xB61A, .start = 12360, .len = 3 }, + .{ .cp = 0xB61B, .start = 12363, .len = 3 }, + .{ .cp = 0xB61C, .start = 12366, .len = 3 }, + .{ .cp = 0xB61D, .start = 12369, .len = 3 }, + .{ .cp = 0xB61E, .start = 12372, .len = 3 }, + .{ .cp = 0xB61F, .start = 12375, .len = 3 }, + .{ .cp = 0xB620, .start = 12378, .len = 3 }, + .{ .cp = 0xB621, .start = 12381, .len = 3 }, + .{ .cp = 0xB622, .start = 12384, .len = 3 }, + .{ .cp = 0xB623, .start = 12387, .len = 3 }, + .{ .cp = 0xB624, .start = 12390, .len = 3 }, + .{ .cp = 0xB625, .start = 12393, .len = 3 }, + .{ .cp = 0xB626, .start = 12396, .len = 3 }, + .{ .cp = 0xB627, .start = 12399, .len = 3 }, + .{ .cp = 0xB628, .start = 12402, .len = 3 }, + .{ .cp = 0xB629, .start = 12405, .len = 3 }, + .{ .cp = 0xB62A, .start = 12408, .len = 3 }, + .{ .cp = 0xB62B, .start = 12411, .len = 3 }, + .{ .cp = 0xB62C, .start = 12414, .len = 2 }, + .{ .cp = 0xB62D, .start = 12416, .len = 3 }, + .{ .cp = 0xB62E, .start = 12419, .len = 3 }, + .{ .cp = 0xB62F, .start = 12422, .len = 3 }, + .{ .cp = 0xB630, .start = 12425, .len = 3 }, + .{ .cp = 0xB631, .start = 12428, .len = 3 }, + .{ .cp = 0xB632, .start = 12431, .len = 3 }, + .{ .cp = 0xB633, .start = 12434, .len = 3 }, + .{ .cp = 0xB634, .start = 12437, .len = 3 }, + .{ .cp = 0xB635, .start = 12440, .len = 3 }, + .{ .cp = 0xB636, .start = 12443, .len = 3 }, + .{ .cp = 0xB637, .start = 12446, .len = 3 }, + .{ .cp = 0xB638, .start = 12449, .len = 3 }, + .{ .cp = 0xB639, .start = 12452, .len = 3 }, + .{ .cp = 0xB63A, .start = 12455, .len = 3 }, + .{ .cp = 0xB63B, .start = 12458, .len = 3 }, + .{ .cp = 0xB63C, .start = 12461, .len = 3 }, + .{ .cp = 0xB63D, .start = 12464, .len = 3 }, + .{ .cp = 0xB63E, .start = 12467, .len = 3 }, + .{ .cp = 0xB63F, .start = 12470, .len = 3 }, + .{ .cp = 0xB640, .start = 12473, .len = 3 }, + .{ .cp = 0xB641, .start = 12476, .len = 3 }, + .{ .cp = 0xB642, .start = 12479, .len = 3 }, + .{ .cp = 0xB643, .start = 12482, .len = 3 }, + .{ .cp = 0xB644, .start = 12485, .len = 3 }, + .{ .cp = 0xB645, .start = 12488, .len = 3 }, + .{ .cp = 0xB646, .start = 12491, .len = 3 }, + .{ .cp = 0xB647, .start = 12494, .len = 3 }, + .{ .cp = 0xB648, .start = 12497, .len = 2 }, + .{ .cp = 0xB649, .start = 12499, .len = 3 }, + .{ .cp = 0xB64A, .start = 12502, .len = 3 }, + .{ .cp = 0xB64B, .start = 12505, .len = 3 }, + .{ .cp = 0xB64C, .start = 12508, .len = 3 }, + .{ .cp = 0xB64D, .start = 12511, .len = 3 }, + .{ .cp = 0xB64E, .start = 12514, .len = 3 }, + .{ .cp = 0xB64F, .start = 12517, .len = 3 }, + .{ .cp = 0xB650, .start = 12520, .len = 3 }, + .{ .cp = 0xB651, .start = 12523, .len = 3 }, + .{ .cp = 0xB652, .start = 12526, .len = 3 }, + .{ .cp = 0xB653, .start = 12529, .len = 3 }, + .{ .cp = 0xB654, .start = 12532, .len = 3 }, + .{ .cp = 0xB655, .start = 12535, .len = 3 }, + .{ .cp = 0xB656, .start = 12538, .len = 3 }, + .{ .cp = 0xB657, .start = 12541, .len = 3 }, + .{ .cp = 0xB658, .start = 12544, .len = 3 }, + .{ .cp = 0xB659, .start = 12547, .len = 3 }, + .{ .cp = 0xB65A, .start = 12550, .len = 3 }, + .{ .cp = 0xB65B, .start = 12553, .len = 3 }, + .{ .cp = 0xB65C, .start = 12556, .len = 3 }, + .{ .cp = 0xB65D, .start = 12559, .len = 3 }, + .{ .cp = 0xB65E, .start = 12562, .len = 3 }, + .{ .cp = 0xB65F, .start = 12565, .len = 3 }, + .{ .cp = 0xB660, .start = 12568, .len = 3 }, + .{ .cp = 0xB661, .start = 12571, .len = 3 }, + .{ .cp = 0xB662, .start = 12574, .len = 3 }, + .{ .cp = 0xB663, .start = 12577, .len = 3 }, + .{ .cp = 0xB664, .start = 12580, .len = 2 }, + .{ .cp = 0xB665, .start = 12582, .len = 3 }, + .{ .cp = 0xB666, .start = 12585, .len = 3 }, + .{ .cp = 0xB667, .start = 12588, .len = 3 }, + .{ .cp = 0xB668, .start = 12591, .len = 3 }, + .{ .cp = 0xB669, .start = 12594, .len = 3 }, + .{ .cp = 0xB66A, .start = 12597, .len = 3 }, + .{ .cp = 0xB66B, .start = 12600, .len = 3 }, + .{ .cp = 0xB66C, .start = 12603, .len = 3 }, + .{ .cp = 0xB66D, .start = 12606, .len = 3 }, + .{ .cp = 0xB66E, .start = 12609, .len = 3 }, + .{ .cp = 0xB66F, .start = 12612, .len = 3 }, + .{ .cp = 0xB670, .start = 12615, .len = 3 }, + .{ .cp = 0xB671, .start = 12618, .len = 3 }, + .{ .cp = 0xB672, .start = 12621, .len = 3 }, + .{ .cp = 0xB673, .start = 12624, .len = 3 }, + .{ .cp = 0xB674, .start = 12627, .len = 3 }, + .{ .cp = 0xB675, .start = 12630, .len = 3 }, + .{ .cp = 0xB676, .start = 12633, .len = 3 }, + .{ .cp = 0xB677, .start = 12636, .len = 3 }, + .{ .cp = 0xB678, .start = 12639, .len = 3 }, + .{ .cp = 0xB679, .start = 12642, .len = 3 }, + .{ .cp = 0xB67A, .start = 12645, .len = 3 }, + .{ .cp = 0xB67B, .start = 12648, .len = 3 }, + .{ .cp = 0xB67C, .start = 12651, .len = 3 }, + .{ .cp = 0xB67D, .start = 12654, .len = 3 }, + .{ .cp = 0xB67E, .start = 12657, .len = 3 }, + .{ .cp = 0xB67F, .start = 12660, .len = 3 }, + .{ .cp = 0xB680, .start = 12663, .len = 2 }, + .{ .cp = 0xB681, .start = 12665, .len = 3 }, + .{ .cp = 0xB682, .start = 12668, .len = 3 }, + .{ .cp = 0xB683, .start = 12671, .len = 3 }, + .{ .cp = 0xB684, .start = 12674, .len = 3 }, + .{ .cp = 0xB685, .start = 12677, .len = 3 }, + .{ .cp = 0xB686, .start = 12680, .len = 3 }, + .{ .cp = 0xB687, .start = 12683, .len = 3 }, + .{ .cp = 0xB688, .start = 12686, .len = 3 }, + .{ .cp = 0xB689, .start = 12689, .len = 3 }, + .{ .cp = 0xB68A, .start = 12692, .len = 3 }, + .{ .cp = 0xB68B, .start = 12695, .len = 3 }, + .{ .cp = 0xB68C, .start = 12698, .len = 3 }, + .{ .cp = 0xB68D, .start = 12701, .len = 3 }, + .{ .cp = 0xB68E, .start = 12704, .len = 3 }, + .{ .cp = 0xB68F, .start = 12707, .len = 3 }, + .{ .cp = 0xB690, .start = 12710, .len = 3 }, + .{ .cp = 0xB691, .start = 12713, .len = 3 }, + .{ .cp = 0xB692, .start = 12716, .len = 3 }, + .{ .cp = 0xB693, .start = 12719, .len = 3 }, + .{ .cp = 0xB694, .start = 12722, .len = 3 }, + .{ .cp = 0xB695, .start = 12725, .len = 3 }, + .{ .cp = 0xB696, .start = 12728, .len = 3 }, + .{ .cp = 0xB697, .start = 12731, .len = 3 }, + .{ .cp = 0xB698, .start = 12734, .len = 3 }, + .{ .cp = 0xB699, .start = 12737, .len = 3 }, + .{ .cp = 0xB69A, .start = 12740, .len = 3 }, + .{ .cp = 0xB69B, .start = 12743, .len = 3 }, + .{ .cp = 0xB69C, .start = 12746, .len = 2 }, + .{ .cp = 0xB69D, .start = 12748, .len = 3 }, + .{ .cp = 0xB69E, .start = 12751, .len = 3 }, + .{ .cp = 0xB69F, .start = 12754, .len = 3 }, + .{ .cp = 0xB6A0, .start = 12757, .len = 3 }, + .{ .cp = 0xB6A1, .start = 12760, .len = 3 }, + .{ .cp = 0xB6A2, .start = 12763, .len = 3 }, + .{ .cp = 0xB6A3, .start = 12766, .len = 3 }, + .{ .cp = 0xB6A4, .start = 12769, .len = 3 }, + .{ .cp = 0xB6A5, .start = 12772, .len = 3 }, + .{ .cp = 0xB6A6, .start = 12775, .len = 3 }, + .{ .cp = 0xB6A7, .start = 12778, .len = 3 }, + .{ .cp = 0xB6A8, .start = 12781, .len = 3 }, + .{ .cp = 0xB6A9, .start = 12784, .len = 3 }, + .{ .cp = 0xB6AA, .start = 12787, .len = 3 }, + .{ .cp = 0xB6AB, .start = 12790, .len = 3 }, + .{ .cp = 0xB6AC, .start = 12793, .len = 3 }, + .{ .cp = 0xB6AD, .start = 12796, .len = 3 }, + .{ .cp = 0xB6AE, .start = 12799, .len = 3 }, + .{ .cp = 0xB6AF, .start = 12802, .len = 3 }, + .{ .cp = 0xB6B0, .start = 12805, .len = 3 }, + .{ .cp = 0xB6B1, .start = 12808, .len = 3 }, + .{ .cp = 0xB6B2, .start = 12811, .len = 3 }, + .{ .cp = 0xB6B3, .start = 12814, .len = 3 }, + .{ .cp = 0xB6B4, .start = 12817, .len = 3 }, + .{ .cp = 0xB6B5, .start = 12820, .len = 3 }, + .{ .cp = 0xB6B6, .start = 12823, .len = 3 }, + .{ .cp = 0xB6B7, .start = 12826, .len = 3 }, + .{ .cp = 0xB6B8, .start = 12829, .len = 2 }, + .{ .cp = 0xB6B9, .start = 12831, .len = 3 }, + .{ .cp = 0xB6BA, .start = 12834, .len = 3 }, + .{ .cp = 0xB6BB, .start = 12837, .len = 3 }, + .{ .cp = 0xB6BC, .start = 12840, .len = 3 }, + .{ .cp = 0xB6BD, .start = 12843, .len = 3 }, + .{ .cp = 0xB6BE, .start = 12846, .len = 3 }, + .{ .cp = 0xB6BF, .start = 12849, .len = 3 }, + .{ .cp = 0xB6C0, .start = 12852, .len = 3 }, + .{ .cp = 0xB6C1, .start = 12855, .len = 3 }, + .{ .cp = 0xB6C2, .start = 12858, .len = 3 }, + .{ .cp = 0xB6C3, .start = 12861, .len = 3 }, + .{ .cp = 0xB6C4, .start = 12864, .len = 3 }, + .{ .cp = 0xB6C5, .start = 12867, .len = 3 }, + .{ .cp = 0xB6C6, .start = 12870, .len = 3 }, + .{ .cp = 0xB6C7, .start = 12873, .len = 3 }, + .{ .cp = 0xB6C8, .start = 12876, .len = 3 }, + .{ .cp = 0xB6C9, .start = 12879, .len = 3 }, + .{ .cp = 0xB6CA, .start = 12882, .len = 3 }, + .{ .cp = 0xB6CB, .start = 12885, .len = 3 }, + .{ .cp = 0xB6CC, .start = 12888, .len = 3 }, + .{ .cp = 0xB6CD, .start = 12891, .len = 3 }, + .{ .cp = 0xB6CE, .start = 12894, .len = 3 }, + .{ .cp = 0xB6CF, .start = 12897, .len = 3 }, + .{ .cp = 0xB6D0, .start = 12900, .len = 3 }, + .{ .cp = 0xB6D1, .start = 12903, .len = 3 }, + .{ .cp = 0xB6D2, .start = 12906, .len = 3 }, + .{ .cp = 0xB6D3, .start = 12909, .len = 3 }, + .{ .cp = 0xB6D4, .start = 12912, .len = 2 }, + .{ .cp = 0xB6D5, .start = 12914, .len = 3 }, + .{ .cp = 0xB6D6, .start = 12917, .len = 3 }, + .{ .cp = 0xB6D7, .start = 12920, .len = 3 }, + .{ .cp = 0xB6D8, .start = 12923, .len = 3 }, + .{ .cp = 0xB6D9, .start = 12926, .len = 3 }, + .{ .cp = 0xB6DA, .start = 12929, .len = 3 }, + .{ .cp = 0xB6DB, .start = 12932, .len = 3 }, + .{ .cp = 0xB6DC, .start = 12935, .len = 3 }, + .{ .cp = 0xB6DD, .start = 12938, .len = 3 }, + .{ .cp = 0xB6DE, .start = 12941, .len = 3 }, + .{ .cp = 0xB6DF, .start = 12944, .len = 3 }, + .{ .cp = 0xB6E0, .start = 12947, .len = 3 }, + .{ .cp = 0xB6E1, .start = 12950, .len = 3 }, + .{ .cp = 0xB6E2, .start = 12953, .len = 3 }, + .{ .cp = 0xB6E3, .start = 12956, .len = 3 }, + .{ .cp = 0xB6E4, .start = 12959, .len = 3 }, + .{ .cp = 0xB6E5, .start = 12962, .len = 3 }, + .{ .cp = 0xB6E6, .start = 12965, .len = 3 }, + .{ .cp = 0xB6E7, .start = 12968, .len = 3 }, + .{ .cp = 0xB6E8, .start = 12971, .len = 3 }, + .{ .cp = 0xB6E9, .start = 12974, .len = 3 }, + .{ .cp = 0xB6EA, .start = 12977, .len = 3 }, + .{ .cp = 0xB6EB, .start = 12980, .len = 3 }, + .{ .cp = 0xB6EC, .start = 12983, .len = 3 }, + .{ .cp = 0xB6ED, .start = 12986, .len = 3 }, + .{ .cp = 0xB6EE, .start = 12989, .len = 3 }, + .{ .cp = 0xB6EF, .start = 12992, .len = 3 }, + .{ .cp = 0xB6F0, .start = 12995, .len = 2 }, + .{ .cp = 0xB6F1, .start = 12997, .len = 3 }, + .{ .cp = 0xB6F2, .start = 13000, .len = 3 }, + .{ .cp = 0xB6F3, .start = 13003, .len = 3 }, + .{ .cp = 0xB6F4, .start = 13006, .len = 3 }, + .{ .cp = 0xB6F5, .start = 13009, .len = 3 }, + .{ .cp = 0xB6F6, .start = 13012, .len = 3 }, + .{ .cp = 0xB6F7, .start = 13015, .len = 3 }, + .{ .cp = 0xB6F8, .start = 13018, .len = 3 }, + .{ .cp = 0xB6F9, .start = 13021, .len = 3 }, + .{ .cp = 0xB6FA, .start = 13024, .len = 3 }, + .{ .cp = 0xB6FB, .start = 13027, .len = 3 }, + .{ .cp = 0xB6FC, .start = 13030, .len = 3 }, + .{ .cp = 0xB6FD, .start = 13033, .len = 3 }, + .{ .cp = 0xB6FE, .start = 13036, .len = 3 }, + .{ .cp = 0xB6FF, .start = 13039, .len = 3 }, + .{ .cp = 0xB700, .start = 13042, .len = 3 }, + .{ .cp = 0xB701, .start = 13045, .len = 3 }, + .{ .cp = 0xB702, .start = 13048, .len = 3 }, + .{ .cp = 0xB703, .start = 13051, .len = 3 }, + .{ .cp = 0xB704, .start = 13054, .len = 3 }, + .{ .cp = 0xB705, .start = 13057, .len = 3 }, + .{ .cp = 0xB706, .start = 13060, .len = 3 }, + .{ .cp = 0xB707, .start = 13063, .len = 3 }, + .{ .cp = 0xB708, .start = 13066, .len = 3 }, + .{ .cp = 0xB709, .start = 13069, .len = 3 }, + .{ .cp = 0xB70A, .start = 13072, .len = 3 }, + .{ .cp = 0xB70B, .start = 13075, .len = 3 }, + .{ .cp = 0xB70C, .start = 13078, .len = 2 }, + .{ .cp = 0xB70D, .start = 13080, .len = 3 }, + .{ .cp = 0xB70E, .start = 13083, .len = 3 }, + .{ .cp = 0xB70F, .start = 13086, .len = 3 }, + .{ .cp = 0xB710, .start = 13089, .len = 3 }, + .{ .cp = 0xB711, .start = 13092, .len = 3 }, + .{ .cp = 0xB712, .start = 13095, .len = 3 }, + .{ .cp = 0xB713, .start = 13098, .len = 3 }, + .{ .cp = 0xB714, .start = 13101, .len = 3 }, + .{ .cp = 0xB715, .start = 13104, .len = 3 }, + .{ .cp = 0xB716, .start = 13107, .len = 3 }, + .{ .cp = 0xB717, .start = 13110, .len = 3 }, + .{ .cp = 0xB718, .start = 13113, .len = 3 }, + .{ .cp = 0xB719, .start = 13116, .len = 3 }, + .{ .cp = 0xB71A, .start = 13119, .len = 3 }, + .{ .cp = 0xB71B, .start = 13122, .len = 3 }, + .{ .cp = 0xB71C, .start = 13125, .len = 3 }, + .{ .cp = 0xB71D, .start = 13128, .len = 3 }, + .{ .cp = 0xB71E, .start = 13131, .len = 3 }, + .{ .cp = 0xB71F, .start = 13134, .len = 3 }, + .{ .cp = 0xB720, .start = 13137, .len = 3 }, + .{ .cp = 0xB721, .start = 13140, .len = 3 }, + .{ .cp = 0xB722, .start = 13143, .len = 3 }, + .{ .cp = 0xB723, .start = 13146, .len = 3 }, + .{ .cp = 0xB724, .start = 13149, .len = 3 }, + .{ .cp = 0xB725, .start = 13152, .len = 3 }, + .{ .cp = 0xB726, .start = 13155, .len = 3 }, + .{ .cp = 0xB727, .start = 13158, .len = 3 }, + .{ .cp = 0xB728, .start = 13161, .len = 2 }, + .{ .cp = 0xB729, .start = 13163, .len = 3 }, + .{ .cp = 0xB72A, .start = 13166, .len = 3 }, + .{ .cp = 0xB72B, .start = 13169, .len = 3 }, + .{ .cp = 0xB72C, .start = 13172, .len = 3 }, + .{ .cp = 0xB72D, .start = 13175, .len = 3 }, + .{ .cp = 0xB72E, .start = 13178, .len = 3 }, + .{ .cp = 0xB72F, .start = 13181, .len = 3 }, + .{ .cp = 0xB730, .start = 13184, .len = 3 }, + .{ .cp = 0xB731, .start = 13187, .len = 3 }, + .{ .cp = 0xB732, .start = 13190, .len = 3 }, + .{ .cp = 0xB733, .start = 13193, .len = 3 }, + .{ .cp = 0xB734, .start = 13196, .len = 3 }, + .{ .cp = 0xB735, .start = 13199, .len = 3 }, + .{ .cp = 0xB736, .start = 13202, .len = 3 }, + .{ .cp = 0xB737, .start = 13205, .len = 3 }, + .{ .cp = 0xB738, .start = 13208, .len = 3 }, + .{ .cp = 0xB739, .start = 13211, .len = 3 }, + .{ .cp = 0xB73A, .start = 13214, .len = 3 }, + .{ .cp = 0xB73B, .start = 13217, .len = 3 }, + .{ .cp = 0xB73C, .start = 13220, .len = 3 }, + .{ .cp = 0xB73D, .start = 13223, .len = 3 }, + .{ .cp = 0xB73E, .start = 13226, .len = 3 }, + .{ .cp = 0xB73F, .start = 13229, .len = 3 }, + .{ .cp = 0xB740, .start = 13232, .len = 3 }, + .{ .cp = 0xB741, .start = 13235, .len = 3 }, + .{ .cp = 0xB742, .start = 13238, .len = 3 }, + .{ .cp = 0xB743, .start = 13241, .len = 3 }, + .{ .cp = 0xB744, .start = 13244, .len = 2 }, + .{ .cp = 0xB745, .start = 13246, .len = 3 }, + .{ .cp = 0xB746, .start = 13249, .len = 3 }, + .{ .cp = 0xB747, .start = 13252, .len = 3 }, + .{ .cp = 0xB748, .start = 13255, .len = 3 }, + .{ .cp = 0xB749, .start = 13258, .len = 3 }, + .{ .cp = 0xB74A, .start = 13261, .len = 3 }, + .{ .cp = 0xB74B, .start = 13264, .len = 3 }, + .{ .cp = 0xB74C, .start = 13267, .len = 3 }, + .{ .cp = 0xB74D, .start = 13270, .len = 3 }, + .{ .cp = 0xB74E, .start = 13273, .len = 3 }, + .{ .cp = 0xB74F, .start = 13276, .len = 3 }, + .{ .cp = 0xB750, .start = 13279, .len = 3 }, + .{ .cp = 0xB751, .start = 13282, .len = 3 }, + .{ .cp = 0xB752, .start = 13285, .len = 3 }, + .{ .cp = 0xB753, .start = 13288, .len = 3 }, + .{ .cp = 0xB754, .start = 13291, .len = 3 }, + .{ .cp = 0xB755, .start = 13294, .len = 3 }, + .{ .cp = 0xB756, .start = 13297, .len = 3 }, + .{ .cp = 0xB757, .start = 13300, .len = 3 }, + .{ .cp = 0xB758, .start = 13303, .len = 3 }, + .{ .cp = 0xB759, .start = 13306, .len = 3 }, + .{ .cp = 0xB75A, .start = 13309, .len = 3 }, + .{ .cp = 0xB75B, .start = 13312, .len = 3 }, + .{ .cp = 0xB75C, .start = 13315, .len = 3 }, + .{ .cp = 0xB75D, .start = 13318, .len = 3 }, + .{ .cp = 0xB75E, .start = 13321, .len = 3 }, + .{ .cp = 0xB75F, .start = 13324, .len = 3 }, + .{ .cp = 0xB760, .start = 13327, .len = 2 }, + .{ .cp = 0xB761, .start = 13329, .len = 3 }, + .{ .cp = 0xB762, .start = 13332, .len = 3 }, + .{ .cp = 0xB763, .start = 13335, .len = 3 }, + .{ .cp = 0xB764, .start = 13338, .len = 3 }, + .{ .cp = 0xB765, .start = 13341, .len = 3 }, + .{ .cp = 0xB766, .start = 13344, .len = 3 }, + .{ .cp = 0xB767, .start = 13347, .len = 3 }, + .{ .cp = 0xB768, .start = 13350, .len = 3 }, + .{ .cp = 0xB769, .start = 13353, .len = 3 }, + .{ .cp = 0xB76A, .start = 13356, .len = 3 }, + .{ .cp = 0xB76B, .start = 13359, .len = 3 }, + .{ .cp = 0xB76C, .start = 13362, .len = 3 }, + .{ .cp = 0xB76D, .start = 13365, .len = 3 }, + .{ .cp = 0xB76E, .start = 13368, .len = 3 }, + .{ .cp = 0xB76F, .start = 13371, .len = 3 }, + .{ .cp = 0xB770, .start = 13374, .len = 3 }, + .{ .cp = 0xB771, .start = 13377, .len = 3 }, + .{ .cp = 0xB772, .start = 13380, .len = 3 }, + .{ .cp = 0xB773, .start = 13383, .len = 3 }, + .{ .cp = 0xB774, .start = 13386, .len = 3 }, + .{ .cp = 0xB775, .start = 13389, .len = 3 }, + .{ .cp = 0xB776, .start = 13392, .len = 3 }, + .{ .cp = 0xB777, .start = 13395, .len = 3 }, + .{ .cp = 0xB778, .start = 13398, .len = 3 }, + .{ .cp = 0xB779, .start = 13401, .len = 3 }, + .{ .cp = 0xB77A, .start = 13404, .len = 3 }, + .{ .cp = 0xB77B, .start = 13407, .len = 3 }, + .{ .cp = 0xB77C, .start = 13410, .len = 2 }, + .{ .cp = 0xB77D, .start = 13412, .len = 3 }, + .{ .cp = 0xB77E, .start = 13415, .len = 3 }, + .{ .cp = 0xB77F, .start = 13418, .len = 3 }, + .{ .cp = 0xB780, .start = 13421, .len = 3 }, + .{ .cp = 0xB781, .start = 13424, .len = 3 }, + .{ .cp = 0xB782, .start = 13427, .len = 3 }, + .{ .cp = 0xB783, .start = 13430, .len = 3 }, + .{ .cp = 0xB784, .start = 13433, .len = 3 }, + .{ .cp = 0xB785, .start = 13436, .len = 3 }, + .{ .cp = 0xB786, .start = 13439, .len = 3 }, + .{ .cp = 0xB787, .start = 13442, .len = 3 }, + .{ .cp = 0xB788, .start = 13445, .len = 3 }, + .{ .cp = 0xB789, .start = 13448, .len = 3 }, + .{ .cp = 0xB78A, .start = 13451, .len = 3 }, + .{ .cp = 0xB78B, .start = 13454, .len = 3 }, + .{ .cp = 0xB78C, .start = 13457, .len = 3 }, + .{ .cp = 0xB78D, .start = 13460, .len = 3 }, + .{ .cp = 0xB78E, .start = 13463, .len = 3 }, + .{ .cp = 0xB78F, .start = 13466, .len = 3 }, + .{ .cp = 0xB790, .start = 13469, .len = 3 }, + .{ .cp = 0xB791, .start = 13472, .len = 3 }, + .{ .cp = 0xB792, .start = 13475, .len = 3 }, + .{ .cp = 0xB793, .start = 13478, .len = 3 }, + .{ .cp = 0xB794, .start = 13481, .len = 3 }, + .{ .cp = 0xB795, .start = 13484, .len = 3 }, + .{ .cp = 0xB796, .start = 13487, .len = 3 }, + .{ .cp = 0xB797, .start = 13490, .len = 3 }, + .{ .cp = 0xB798, .start = 13493, .len = 2 }, + .{ .cp = 0xB799, .start = 13495, .len = 3 }, + .{ .cp = 0xB79A, .start = 13498, .len = 3 }, + .{ .cp = 0xB79B, .start = 13501, .len = 3 }, + .{ .cp = 0xB79C, .start = 13504, .len = 3 }, + .{ .cp = 0xB79D, .start = 13507, .len = 3 }, + .{ .cp = 0xB79E, .start = 13510, .len = 3 }, + .{ .cp = 0xB79F, .start = 13513, .len = 3 }, + .{ .cp = 0xB7A0, .start = 13516, .len = 3 }, + .{ .cp = 0xB7A1, .start = 13519, .len = 3 }, + .{ .cp = 0xB7A2, .start = 13522, .len = 3 }, + .{ .cp = 0xB7A3, .start = 13525, .len = 3 }, + .{ .cp = 0xB7A4, .start = 13528, .len = 3 }, + .{ .cp = 0xB7A5, .start = 13531, .len = 3 }, + .{ .cp = 0xB7A6, .start = 13534, .len = 3 }, + .{ .cp = 0xB7A7, .start = 13537, .len = 3 }, + .{ .cp = 0xB7A8, .start = 13540, .len = 3 }, + .{ .cp = 0xB7A9, .start = 13543, .len = 3 }, + .{ .cp = 0xB7AA, .start = 13546, .len = 3 }, + .{ .cp = 0xB7AB, .start = 13549, .len = 3 }, + .{ .cp = 0xB7AC, .start = 13552, .len = 3 }, + .{ .cp = 0xB7AD, .start = 13555, .len = 3 }, + .{ .cp = 0xB7AE, .start = 13558, .len = 3 }, + .{ .cp = 0xB7AF, .start = 13561, .len = 3 }, + .{ .cp = 0xB7B0, .start = 13564, .len = 3 }, + .{ .cp = 0xB7B1, .start = 13567, .len = 3 }, + .{ .cp = 0xB7B2, .start = 13570, .len = 3 }, + .{ .cp = 0xB7B3, .start = 13573, .len = 3 }, + .{ .cp = 0xB7B4, .start = 13576, .len = 2 }, + .{ .cp = 0xB7B5, .start = 13578, .len = 3 }, + .{ .cp = 0xB7B6, .start = 13581, .len = 3 }, + .{ .cp = 0xB7B7, .start = 13584, .len = 3 }, + .{ .cp = 0xB7B8, .start = 13587, .len = 3 }, + .{ .cp = 0xB7B9, .start = 13590, .len = 3 }, + .{ .cp = 0xB7BA, .start = 13593, .len = 3 }, + .{ .cp = 0xB7BB, .start = 13596, .len = 3 }, + .{ .cp = 0xB7BC, .start = 13599, .len = 3 }, + .{ .cp = 0xB7BD, .start = 13602, .len = 3 }, + .{ .cp = 0xB7BE, .start = 13605, .len = 3 }, + .{ .cp = 0xB7BF, .start = 13608, .len = 3 }, + .{ .cp = 0xB7C0, .start = 13611, .len = 3 }, + .{ .cp = 0xB7C1, .start = 13614, .len = 3 }, + .{ .cp = 0xB7C2, .start = 13617, .len = 3 }, + .{ .cp = 0xB7C3, .start = 13620, .len = 3 }, + .{ .cp = 0xB7C4, .start = 13623, .len = 3 }, + .{ .cp = 0xB7C5, .start = 13626, .len = 3 }, + .{ .cp = 0xB7C6, .start = 13629, .len = 3 }, + .{ .cp = 0xB7C7, .start = 13632, .len = 3 }, + .{ .cp = 0xB7C8, .start = 13635, .len = 3 }, + .{ .cp = 0xB7C9, .start = 13638, .len = 3 }, + .{ .cp = 0xB7CA, .start = 13641, .len = 3 }, + .{ .cp = 0xB7CB, .start = 13644, .len = 3 }, + .{ .cp = 0xB7CC, .start = 13647, .len = 3 }, + .{ .cp = 0xB7CD, .start = 13650, .len = 3 }, + .{ .cp = 0xB7CE, .start = 13653, .len = 3 }, + .{ .cp = 0xB7CF, .start = 13656, .len = 3 }, + .{ .cp = 0xB7D0, .start = 13659, .len = 2 }, + .{ .cp = 0xB7D1, .start = 13661, .len = 3 }, + .{ .cp = 0xB7D2, .start = 13664, .len = 3 }, + .{ .cp = 0xB7D3, .start = 13667, .len = 3 }, + .{ .cp = 0xB7D4, .start = 13670, .len = 3 }, + .{ .cp = 0xB7D5, .start = 13673, .len = 3 }, + .{ .cp = 0xB7D6, .start = 13676, .len = 3 }, + .{ .cp = 0xB7D7, .start = 13679, .len = 3 }, + .{ .cp = 0xB7D8, .start = 13682, .len = 3 }, + .{ .cp = 0xB7D9, .start = 13685, .len = 3 }, + .{ .cp = 0xB7DA, .start = 13688, .len = 3 }, + .{ .cp = 0xB7DB, .start = 13691, .len = 3 }, + .{ .cp = 0xB7DC, .start = 13694, .len = 3 }, + .{ .cp = 0xB7DD, .start = 13697, .len = 3 }, + .{ .cp = 0xB7DE, .start = 13700, .len = 3 }, + .{ .cp = 0xB7DF, .start = 13703, .len = 3 }, + .{ .cp = 0xB7E0, .start = 13706, .len = 3 }, + .{ .cp = 0xB7E1, .start = 13709, .len = 3 }, + .{ .cp = 0xB7E2, .start = 13712, .len = 3 }, + .{ .cp = 0xB7E3, .start = 13715, .len = 3 }, + .{ .cp = 0xB7E4, .start = 13718, .len = 3 }, + .{ .cp = 0xB7E5, .start = 13721, .len = 3 }, + .{ .cp = 0xB7E6, .start = 13724, .len = 3 }, + .{ .cp = 0xB7E7, .start = 13727, .len = 3 }, + .{ .cp = 0xB7E8, .start = 13730, .len = 3 }, + .{ .cp = 0xB7E9, .start = 13733, .len = 3 }, + .{ .cp = 0xB7EA, .start = 13736, .len = 3 }, + .{ .cp = 0xB7EB, .start = 13739, .len = 3 }, + .{ .cp = 0xB7EC, .start = 13742, .len = 2 }, + .{ .cp = 0xB7ED, .start = 13744, .len = 3 }, + .{ .cp = 0xB7EE, .start = 13747, .len = 3 }, + .{ .cp = 0xB7EF, .start = 13750, .len = 3 }, + .{ .cp = 0xB7F0, .start = 13753, .len = 3 }, + .{ .cp = 0xB7F1, .start = 13756, .len = 3 }, + .{ .cp = 0xB7F2, .start = 13759, .len = 3 }, + .{ .cp = 0xB7F3, .start = 13762, .len = 3 }, + .{ .cp = 0xB7F4, .start = 13765, .len = 3 }, + .{ .cp = 0xB7F5, .start = 13768, .len = 3 }, + .{ .cp = 0xB7F6, .start = 13771, .len = 3 }, + .{ .cp = 0xB7F7, .start = 13774, .len = 3 }, + .{ .cp = 0xB7F8, .start = 13777, .len = 3 }, + .{ .cp = 0xB7F9, .start = 13780, .len = 3 }, + .{ .cp = 0xB7FA, .start = 13783, .len = 3 }, + .{ .cp = 0xB7FB, .start = 13786, .len = 3 }, + .{ .cp = 0xB7FC, .start = 13789, .len = 3 }, + .{ .cp = 0xB7FD, .start = 13792, .len = 3 }, + .{ .cp = 0xB7FE, .start = 13795, .len = 3 }, + .{ .cp = 0xB7FF, .start = 13798, .len = 3 }, + .{ .cp = 0xB800, .start = 13801, .len = 3 }, + .{ .cp = 0xB801, .start = 13804, .len = 3 }, + .{ .cp = 0xB802, .start = 13807, .len = 3 }, + .{ .cp = 0xB803, .start = 13810, .len = 3 }, + .{ .cp = 0xB804, .start = 13813, .len = 3 }, + .{ .cp = 0xB805, .start = 13816, .len = 3 }, + .{ .cp = 0xB806, .start = 13819, .len = 3 }, + .{ .cp = 0xB807, .start = 13822, .len = 3 }, + .{ .cp = 0xB808, .start = 13825, .len = 2 }, + .{ .cp = 0xB809, .start = 13827, .len = 3 }, + .{ .cp = 0xB80A, .start = 13830, .len = 3 }, + .{ .cp = 0xB80B, .start = 13833, .len = 3 }, + .{ .cp = 0xB80C, .start = 13836, .len = 3 }, + .{ .cp = 0xB80D, .start = 13839, .len = 3 }, + .{ .cp = 0xB80E, .start = 13842, .len = 3 }, + .{ .cp = 0xB80F, .start = 13845, .len = 3 }, + .{ .cp = 0xB810, .start = 13848, .len = 3 }, + .{ .cp = 0xB811, .start = 13851, .len = 3 }, + .{ .cp = 0xB812, .start = 13854, .len = 3 }, + .{ .cp = 0xB813, .start = 13857, .len = 3 }, + .{ .cp = 0xB814, .start = 13860, .len = 3 }, + .{ .cp = 0xB815, .start = 13863, .len = 3 }, + .{ .cp = 0xB816, .start = 13866, .len = 3 }, + .{ .cp = 0xB817, .start = 13869, .len = 3 }, + .{ .cp = 0xB818, .start = 13872, .len = 3 }, + .{ .cp = 0xB819, .start = 13875, .len = 3 }, + .{ .cp = 0xB81A, .start = 13878, .len = 3 }, + .{ .cp = 0xB81B, .start = 13881, .len = 3 }, + .{ .cp = 0xB81C, .start = 13884, .len = 3 }, + .{ .cp = 0xB81D, .start = 13887, .len = 3 }, + .{ .cp = 0xB81E, .start = 13890, .len = 3 }, + .{ .cp = 0xB81F, .start = 13893, .len = 3 }, + .{ .cp = 0xB820, .start = 13896, .len = 3 }, + .{ .cp = 0xB821, .start = 13899, .len = 3 }, + .{ .cp = 0xB822, .start = 13902, .len = 3 }, + .{ .cp = 0xB823, .start = 13905, .len = 3 }, + .{ .cp = 0xB824, .start = 13908, .len = 2 }, + .{ .cp = 0xB825, .start = 13910, .len = 3 }, + .{ .cp = 0xB826, .start = 13913, .len = 3 }, + .{ .cp = 0xB827, .start = 13916, .len = 3 }, + .{ .cp = 0xB828, .start = 13919, .len = 3 }, + .{ .cp = 0xB829, .start = 13922, .len = 3 }, + .{ .cp = 0xB82A, .start = 13925, .len = 3 }, + .{ .cp = 0xB82B, .start = 13928, .len = 3 }, + .{ .cp = 0xB82C, .start = 13931, .len = 3 }, + .{ .cp = 0xB82D, .start = 13934, .len = 3 }, + .{ .cp = 0xB82E, .start = 13937, .len = 3 }, + .{ .cp = 0xB82F, .start = 13940, .len = 3 }, + .{ .cp = 0xB830, .start = 13943, .len = 3 }, + .{ .cp = 0xB831, .start = 13946, .len = 3 }, + .{ .cp = 0xB832, .start = 13949, .len = 3 }, + .{ .cp = 0xB833, .start = 13952, .len = 3 }, + .{ .cp = 0xB834, .start = 13955, .len = 3 }, + .{ .cp = 0xB835, .start = 13958, .len = 3 }, + .{ .cp = 0xB836, .start = 13961, .len = 3 }, + .{ .cp = 0xB837, .start = 13964, .len = 3 }, + .{ .cp = 0xB838, .start = 13967, .len = 3 }, + .{ .cp = 0xB839, .start = 13970, .len = 3 }, + .{ .cp = 0xB83A, .start = 13973, .len = 3 }, + .{ .cp = 0xB83B, .start = 13976, .len = 3 }, + .{ .cp = 0xB83C, .start = 13979, .len = 3 }, + .{ .cp = 0xB83D, .start = 13982, .len = 3 }, + .{ .cp = 0xB83E, .start = 13985, .len = 3 }, + .{ .cp = 0xB83F, .start = 13988, .len = 3 }, + .{ .cp = 0xB840, .start = 13991, .len = 2 }, + .{ .cp = 0xB841, .start = 13993, .len = 3 }, + .{ .cp = 0xB842, .start = 13996, .len = 3 }, + .{ .cp = 0xB843, .start = 13999, .len = 3 }, + .{ .cp = 0xB844, .start = 14002, .len = 3 }, + .{ .cp = 0xB845, .start = 14005, .len = 3 }, + .{ .cp = 0xB846, .start = 14008, .len = 3 }, + .{ .cp = 0xB847, .start = 14011, .len = 3 }, + .{ .cp = 0xB848, .start = 14014, .len = 3 }, + .{ .cp = 0xB849, .start = 14017, .len = 3 }, + .{ .cp = 0xB84A, .start = 14020, .len = 3 }, + .{ .cp = 0xB84B, .start = 14023, .len = 3 }, + .{ .cp = 0xB84C, .start = 14026, .len = 3 }, + .{ .cp = 0xB84D, .start = 14029, .len = 3 }, + .{ .cp = 0xB84E, .start = 14032, .len = 3 }, + .{ .cp = 0xB84F, .start = 14035, .len = 3 }, + .{ .cp = 0xB850, .start = 14038, .len = 3 }, + .{ .cp = 0xB851, .start = 14041, .len = 3 }, + .{ .cp = 0xB852, .start = 14044, .len = 3 }, + .{ .cp = 0xB853, .start = 14047, .len = 3 }, + .{ .cp = 0xB854, .start = 14050, .len = 3 }, + .{ .cp = 0xB855, .start = 14053, .len = 3 }, + .{ .cp = 0xB856, .start = 14056, .len = 3 }, + .{ .cp = 0xB857, .start = 14059, .len = 3 }, + .{ .cp = 0xB858, .start = 14062, .len = 3 }, + .{ .cp = 0xB859, .start = 14065, .len = 3 }, + .{ .cp = 0xB85A, .start = 14068, .len = 3 }, + .{ .cp = 0xB85B, .start = 14071, .len = 3 }, + .{ .cp = 0xB85C, .start = 14074, .len = 2 }, + .{ .cp = 0xB85D, .start = 14076, .len = 3 }, + .{ .cp = 0xB85E, .start = 14079, .len = 3 }, + .{ .cp = 0xB85F, .start = 14082, .len = 3 }, + .{ .cp = 0xB860, .start = 14085, .len = 3 }, + .{ .cp = 0xB861, .start = 14088, .len = 3 }, + .{ .cp = 0xB862, .start = 14091, .len = 3 }, + .{ .cp = 0xB863, .start = 14094, .len = 3 }, + .{ .cp = 0xB864, .start = 14097, .len = 3 }, + .{ .cp = 0xB865, .start = 14100, .len = 3 }, + .{ .cp = 0xB866, .start = 14103, .len = 3 }, + .{ .cp = 0xB867, .start = 14106, .len = 3 }, + .{ .cp = 0xB868, .start = 14109, .len = 3 }, + .{ .cp = 0xB869, .start = 14112, .len = 3 }, + .{ .cp = 0xB86A, .start = 14115, .len = 3 }, + .{ .cp = 0xB86B, .start = 14118, .len = 3 }, + .{ .cp = 0xB86C, .start = 14121, .len = 3 }, + .{ .cp = 0xB86D, .start = 14124, .len = 3 }, + .{ .cp = 0xB86E, .start = 14127, .len = 3 }, + .{ .cp = 0xB86F, .start = 14130, .len = 3 }, + .{ .cp = 0xB870, .start = 14133, .len = 3 }, + .{ .cp = 0xB871, .start = 14136, .len = 3 }, + .{ .cp = 0xB872, .start = 14139, .len = 3 }, + .{ .cp = 0xB873, .start = 14142, .len = 3 }, + .{ .cp = 0xB874, .start = 14145, .len = 3 }, + .{ .cp = 0xB875, .start = 14148, .len = 3 }, + .{ .cp = 0xB876, .start = 14151, .len = 3 }, + .{ .cp = 0xB877, .start = 14154, .len = 3 }, + .{ .cp = 0xB878, .start = 14157, .len = 2 }, + .{ .cp = 0xB879, .start = 14159, .len = 3 }, + .{ .cp = 0xB87A, .start = 14162, .len = 3 }, + .{ .cp = 0xB87B, .start = 14165, .len = 3 }, + .{ .cp = 0xB87C, .start = 14168, .len = 3 }, + .{ .cp = 0xB87D, .start = 14171, .len = 3 }, + .{ .cp = 0xB87E, .start = 14174, .len = 3 }, + .{ .cp = 0xB87F, .start = 14177, .len = 3 }, + .{ .cp = 0xB880, .start = 14180, .len = 3 }, + .{ .cp = 0xB881, .start = 14183, .len = 3 }, + .{ .cp = 0xB882, .start = 14186, .len = 3 }, + .{ .cp = 0xB883, .start = 14189, .len = 3 }, + .{ .cp = 0xB884, .start = 14192, .len = 3 }, + .{ .cp = 0xB885, .start = 14195, .len = 3 }, + .{ .cp = 0xB886, .start = 14198, .len = 3 }, + .{ .cp = 0xB887, .start = 14201, .len = 3 }, + .{ .cp = 0xB888, .start = 14204, .len = 3 }, + .{ .cp = 0xB889, .start = 14207, .len = 3 }, + .{ .cp = 0xB88A, .start = 14210, .len = 3 }, + .{ .cp = 0xB88B, .start = 14213, .len = 3 }, + .{ .cp = 0xB88C, .start = 14216, .len = 3 }, + .{ .cp = 0xB88D, .start = 14219, .len = 3 }, + .{ .cp = 0xB88E, .start = 14222, .len = 3 }, + .{ .cp = 0xB88F, .start = 14225, .len = 3 }, + .{ .cp = 0xB890, .start = 14228, .len = 3 }, + .{ .cp = 0xB891, .start = 14231, .len = 3 }, + .{ .cp = 0xB892, .start = 14234, .len = 3 }, + .{ .cp = 0xB893, .start = 14237, .len = 3 }, + .{ .cp = 0xB894, .start = 14240, .len = 2 }, + .{ .cp = 0xB895, .start = 14242, .len = 3 }, + .{ .cp = 0xB896, .start = 14245, .len = 3 }, + .{ .cp = 0xB897, .start = 14248, .len = 3 }, + .{ .cp = 0xB898, .start = 14251, .len = 3 }, + .{ .cp = 0xB899, .start = 14254, .len = 3 }, + .{ .cp = 0xB89A, .start = 14257, .len = 3 }, + .{ .cp = 0xB89B, .start = 14260, .len = 3 }, + .{ .cp = 0xB89C, .start = 14263, .len = 3 }, + .{ .cp = 0xB89D, .start = 14266, .len = 3 }, + .{ .cp = 0xB89E, .start = 14269, .len = 3 }, + .{ .cp = 0xB89F, .start = 14272, .len = 3 }, + .{ .cp = 0xB8A0, .start = 14275, .len = 3 }, + .{ .cp = 0xB8A1, .start = 14278, .len = 3 }, + .{ .cp = 0xB8A2, .start = 14281, .len = 3 }, + .{ .cp = 0xB8A3, .start = 14284, .len = 3 }, + .{ .cp = 0xB8A4, .start = 14287, .len = 3 }, + .{ .cp = 0xB8A5, .start = 14290, .len = 3 }, + .{ .cp = 0xB8A6, .start = 14293, .len = 3 }, + .{ .cp = 0xB8A7, .start = 14296, .len = 3 }, + .{ .cp = 0xB8A8, .start = 14299, .len = 3 }, + .{ .cp = 0xB8A9, .start = 14302, .len = 3 }, + .{ .cp = 0xB8AA, .start = 14305, .len = 3 }, + .{ .cp = 0xB8AB, .start = 14308, .len = 3 }, + .{ .cp = 0xB8AC, .start = 14311, .len = 3 }, + .{ .cp = 0xB8AD, .start = 14314, .len = 3 }, + .{ .cp = 0xB8AE, .start = 14317, .len = 3 }, + .{ .cp = 0xB8AF, .start = 14320, .len = 3 }, + .{ .cp = 0xB8B0, .start = 14323, .len = 2 }, + .{ .cp = 0xB8B1, .start = 14325, .len = 3 }, + .{ .cp = 0xB8B2, .start = 14328, .len = 3 }, + .{ .cp = 0xB8B3, .start = 14331, .len = 3 }, + .{ .cp = 0xB8B4, .start = 14334, .len = 3 }, + .{ .cp = 0xB8B5, .start = 14337, .len = 3 }, + .{ .cp = 0xB8B6, .start = 14340, .len = 3 }, + .{ .cp = 0xB8B7, .start = 14343, .len = 3 }, + .{ .cp = 0xB8B8, .start = 14346, .len = 3 }, + .{ .cp = 0xB8B9, .start = 14349, .len = 3 }, + .{ .cp = 0xB8BA, .start = 14352, .len = 3 }, + .{ .cp = 0xB8BB, .start = 14355, .len = 3 }, + .{ .cp = 0xB8BC, .start = 14358, .len = 3 }, + .{ .cp = 0xB8BD, .start = 14361, .len = 3 }, + .{ .cp = 0xB8BE, .start = 14364, .len = 3 }, + .{ .cp = 0xB8BF, .start = 14367, .len = 3 }, + .{ .cp = 0xB8C0, .start = 14370, .len = 3 }, + .{ .cp = 0xB8C1, .start = 14373, .len = 3 }, + .{ .cp = 0xB8C2, .start = 14376, .len = 3 }, + .{ .cp = 0xB8C3, .start = 14379, .len = 3 }, + .{ .cp = 0xB8C4, .start = 14382, .len = 3 }, + .{ .cp = 0xB8C5, .start = 14385, .len = 3 }, + .{ .cp = 0xB8C6, .start = 14388, .len = 3 }, + .{ .cp = 0xB8C7, .start = 14391, .len = 3 }, + .{ .cp = 0xB8C8, .start = 14394, .len = 3 }, + .{ .cp = 0xB8C9, .start = 14397, .len = 3 }, + .{ .cp = 0xB8CA, .start = 14400, .len = 3 }, + .{ .cp = 0xB8CB, .start = 14403, .len = 3 }, + .{ .cp = 0xB8CC, .start = 14406, .len = 2 }, + .{ .cp = 0xB8CD, .start = 14408, .len = 3 }, + .{ .cp = 0xB8CE, .start = 14411, .len = 3 }, + .{ .cp = 0xB8CF, .start = 14414, .len = 3 }, + .{ .cp = 0xB8D0, .start = 14417, .len = 3 }, + .{ .cp = 0xB8D1, .start = 14420, .len = 3 }, + .{ .cp = 0xB8D2, .start = 14423, .len = 3 }, + .{ .cp = 0xB8D3, .start = 14426, .len = 3 }, + .{ .cp = 0xB8D4, .start = 14429, .len = 3 }, + .{ .cp = 0xB8D5, .start = 14432, .len = 3 }, + .{ .cp = 0xB8D6, .start = 14435, .len = 3 }, + .{ .cp = 0xB8D7, .start = 14438, .len = 3 }, + .{ .cp = 0xB8D8, .start = 14441, .len = 3 }, + .{ .cp = 0xB8D9, .start = 14444, .len = 3 }, + .{ .cp = 0xB8DA, .start = 14447, .len = 3 }, + .{ .cp = 0xB8DB, .start = 14450, .len = 3 }, + .{ .cp = 0xB8DC, .start = 14453, .len = 3 }, + .{ .cp = 0xB8DD, .start = 14456, .len = 3 }, + .{ .cp = 0xB8DE, .start = 14459, .len = 3 }, + .{ .cp = 0xB8DF, .start = 14462, .len = 3 }, + .{ .cp = 0xB8E0, .start = 14465, .len = 3 }, + .{ .cp = 0xB8E1, .start = 14468, .len = 3 }, + .{ .cp = 0xB8E2, .start = 14471, .len = 3 }, + .{ .cp = 0xB8E3, .start = 14474, .len = 3 }, + .{ .cp = 0xB8E4, .start = 14477, .len = 3 }, + .{ .cp = 0xB8E5, .start = 14480, .len = 3 }, + .{ .cp = 0xB8E6, .start = 14483, .len = 3 }, + .{ .cp = 0xB8E7, .start = 14486, .len = 3 }, + .{ .cp = 0xB8E8, .start = 14489, .len = 2 }, + .{ .cp = 0xB8E9, .start = 14491, .len = 3 }, + .{ .cp = 0xB8EA, .start = 14494, .len = 3 }, + .{ .cp = 0xB8EB, .start = 14497, .len = 3 }, + .{ .cp = 0xB8EC, .start = 14500, .len = 3 }, + .{ .cp = 0xB8ED, .start = 14503, .len = 3 }, + .{ .cp = 0xB8EE, .start = 14506, .len = 3 }, + .{ .cp = 0xB8EF, .start = 14509, .len = 3 }, + .{ .cp = 0xB8F0, .start = 14512, .len = 3 }, + .{ .cp = 0xB8F1, .start = 14515, .len = 3 }, + .{ .cp = 0xB8F2, .start = 14518, .len = 3 }, + .{ .cp = 0xB8F3, .start = 14521, .len = 3 }, + .{ .cp = 0xB8F4, .start = 14524, .len = 3 }, + .{ .cp = 0xB8F5, .start = 14527, .len = 3 }, + .{ .cp = 0xB8F6, .start = 14530, .len = 3 }, + .{ .cp = 0xB8F7, .start = 14533, .len = 3 }, + .{ .cp = 0xB8F8, .start = 14536, .len = 3 }, + .{ .cp = 0xB8F9, .start = 14539, .len = 3 }, + .{ .cp = 0xB8FA, .start = 14542, .len = 3 }, + .{ .cp = 0xB8FB, .start = 14545, .len = 3 }, + .{ .cp = 0xB8FC, .start = 14548, .len = 3 }, + .{ .cp = 0xB8FD, .start = 14551, .len = 3 }, + .{ .cp = 0xB8FE, .start = 14554, .len = 3 }, + .{ .cp = 0xB8FF, .start = 14557, .len = 3 }, + .{ .cp = 0xB900, .start = 14560, .len = 3 }, + .{ .cp = 0xB901, .start = 14563, .len = 3 }, + .{ .cp = 0xB902, .start = 14566, .len = 3 }, + .{ .cp = 0xB903, .start = 14569, .len = 3 }, + .{ .cp = 0xB904, .start = 14572, .len = 2 }, + .{ .cp = 0xB905, .start = 14574, .len = 3 }, + .{ .cp = 0xB906, .start = 14577, .len = 3 }, + .{ .cp = 0xB907, .start = 14580, .len = 3 }, + .{ .cp = 0xB908, .start = 14583, .len = 3 }, + .{ .cp = 0xB909, .start = 14586, .len = 3 }, + .{ .cp = 0xB90A, .start = 14589, .len = 3 }, + .{ .cp = 0xB90B, .start = 14592, .len = 3 }, + .{ .cp = 0xB90C, .start = 14595, .len = 3 }, + .{ .cp = 0xB90D, .start = 14598, .len = 3 }, + .{ .cp = 0xB90E, .start = 14601, .len = 3 }, + .{ .cp = 0xB90F, .start = 14604, .len = 3 }, + .{ .cp = 0xB910, .start = 14607, .len = 3 }, + .{ .cp = 0xB911, .start = 14610, .len = 3 }, + .{ .cp = 0xB912, .start = 14613, .len = 3 }, + .{ .cp = 0xB913, .start = 14616, .len = 3 }, + .{ .cp = 0xB914, .start = 14619, .len = 3 }, + .{ .cp = 0xB915, .start = 14622, .len = 3 }, + .{ .cp = 0xB916, .start = 14625, .len = 3 }, + .{ .cp = 0xB917, .start = 14628, .len = 3 }, + .{ .cp = 0xB918, .start = 14631, .len = 3 }, + .{ .cp = 0xB919, .start = 14634, .len = 3 }, + .{ .cp = 0xB91A, .start = 14637, .len = 3 }, + .{ .cp = 0xB91B, .start = 14640, .len = 3 }, + .{ .cp = 0xB91C, .start = 14643, .len = 3 }, + .{ .cp = 0xB91D, .start = 14646, .len = 3 }, + .{ .cp = 0xB91E, .start = 14649, .len = 3 }, + .{ .cp = 0xB91F, .start = 14652, .len = 3 }, + .{ .cp = 0xB920, .start = 14655, .len = 2 }, + .{ .cp = 0xB921, .start = 14657, .len = 3 }, + .{ .cp = 0xB922, .start = 14660, .len = 3 }, + .{ .cp = 0xB923, .start = 14663, .len = 3 }, + .{ .cp = 0xB924, .start = 14666, .len = 3 }, + .{ .cp = 0xB925, .start = 14669, .len = 3 }, + .{ .cp = 0xB926, .start = 14672, .len = 3 }, + .{ .cp = 0xB927, .start = 14675, .len = 3 }, + .{ .cp = 0xB928, .start = 14678, .len = 3 }, + .{ .cp = 0xB929, .start = 14681, .len = 3 }, + .{ .cp = 0xB92A, .start = 14684, .len = 3 }, + .{ .cp = 0xB92B, .start = 14687, .len = 3 }, + .{ .cp = 0xB92C, .start = 14690, .len = 3 }, + .{ .cp = 0xB92D, .start = 14693, .len = 3 }, + .{ .cp = 0xB92E, .start = 14696, .len = 3 }, + .{ .cp = 0xB92F, .start = 14699, .len = 3 }, + .{ .cp = 0xB930, .start = 14702, .len = 3 }, + .{ .cp = 0xB931, .start = 14705, .len = 3 }, + .{ .cp = 0xB932, .start = 14708, .len = 3 }, + .{ .cp = 0xB933, .start = 14711, .len = 3 }, + .{ .cp = 0xB934, .start = 14714, .len = 3 }, + .{ .cp = 0xB935, .start = 14717, .len = 3 }, + .{ .cp = 0xB936, .start = 14720, .len = 3 }, + .{ .cp = 0xB937, .start = 14723, .len = 3 }, + .{ .cp = 0xB938, .start = 14726, .len = 3 }, + .{ .cp = 0xB939, .start = 14729, .len = 3 }, + .{ .cp = 0xB93A, .start = 14732, .len = 3 }, + .{ .cp = 0xB93B, .start = 14735, .len = 3 }, + .{ .cp = 0xB93C, .start = 14738, .len = 2 }, + .{ .cp = 0xB93D, .start = 14740, .len = 3 }, + .{ .cp = 0xB93E, .start = 14743, .len = 3 }, + .{ .cp = 0xB93F, .start = 14746, .len = 3 }, + .{ .cp = 0xB940, .start = 14749, .len = 3 }, + .{ .cp = 0xB941, .start = 14752, .len = 3 }, + .{ .cp = 0xB942, .start = 14755, .len = 3 }, + .{ .cp = 0xB943, .start = 14758, .len = 3 }, + .{ .cp = 0xB944, .start = 14761, .len = 3 }, + .{ .cp = 0xB945, .start = 14764, .len = 3 }, + .{ .cp = 0xB946, .start = 14767, .len = 3 }, + .{ .cp = 0xB947, .start = 14770, .len = 3 }, + .{ .cp = 0xB948, .start = 14773, .len = 3 }, + .{ .cp = 0xB949, .start = 14776, .len = 3 }, + .{ .cp = 0xB94A, .start = 14779, .len = 3 }, + .{ .cp = 0xB94B, .start = 14782, .len = 3 }, + .{ .cp = 0xB94C, .start = 14785, .len = 3 }, + .{ .cp = 0xB94D, .start = 14788, .len = 3 }, + .{ .cp = 0xB94E, .start = 14791, .len = 3 }, + .{ .cp = 0xB94F, .start = 14794, .len = 3 }, + .{ .cp = 0xB950, .start = 14797, .len = 3 }, + .{ .cp = 0xB951, .start = 14800, .len = 3 }, + .{ .cp = 0xB952, .start = 14803, .len = 3 }, + .{ .cp = 0xB953, .start = 14806, .len = 3 }, + .{ .cp = 0xB954, .start = 14809, .len = 3 }, + .{ .cp = 0xB955, .start = 14812, .len = 3 }, + .{ .cp = 0xB956, .start = 14815, .len = 3 }, + .{ .cp = 0xB957, .start = 14818, .len = 3 }, + .{ .cp = 0xB958, .start = 14821, .len = 2 }, + .{ .cp = 0xB959, .start = 14823, .len = 3 }, + .{ .cp = 0xB95A, .start = 14826, .len = 3 }, + .{ .cp = 0xB95B, .start = 14829, .len = 3 }, + .{ .cp = 0xB95C, .start = 14832, .len = 3 }, + .{ .cp = 0xB95D, .start = 14835, .len = 3 }, + .{ .cp = 0xB95E, .start = 14838, .len = 3 }, + .{ .cp = 0xB95F, .start = 14841, .len = 3 }, + .{ .cp = 0xB960, .start = 14844, .len = 3 }, + .{ .cp = 0xB961, .start = 14847, .len = 3 }, + .{ .cp = 0xB962, .start = 14850, .len = 3 }, + .{ .cp = 0xB963, .start = 14853, .len = 3 }, + .{ .cp = 0xB964, .start = 14856, .len = 3 }, + .{ .cp = 0xB965, .start = 14859, .len = 3 }, + .{ .cp = 0xB966, .start = 14862, .len = 3 }, + .{ .cp = 0xB967, .start = 14865, .len = 3 }, + .{ .cp = 0xB968, .start = 14868, .len = 3 }, + .{ .cp = 0xB969, .start = 14871, .len = 3 }, + .{ .cp = 0xB96A, .start = 14874, .len = 3 }, + .{ .cp = 0xB96B, .start = 14877, .len = 3 }, + .{ .cp = 0xB96C, .start = 14880, .len = 3 }, + .{ .cp = 0xB96D, .start = 14883, .len = 3 }, + .{ .cp = 0xB96E, .start = 14886, .len = 3 }, + .{ .cp = 0xB96F, .start = 14889, .len = 3 }, + .{ .cp = 0xB970, .start = 14892, .len = 3 }, + .{ .cp = 0xB971, .start = 14895, .len = 3 }, + .{ .cp = 0xB972, .start = 14898, .len = 3 }, + .{ .cp = 0xB973, .start = 14901, .len = 3 }, + .{ .cp = 0xB974, .start = 14904, .len = 2 }, + .{ .cp = 0xB975, .start = 14906, .len = 3 }, + .{ .cp = 0xB976, .start = 14909, .len = 3 }, + .{ .cp = 0xB977, .start = 14912, .len = 3 }, + .{ .cp = 0xB978, .start = 14915, .len = 3 }, + .{ .cp = 0xB979, .start = 14918, .len = 3 }, + .{ .cp = 0xB97A, .start = 14921, .len = 3 }, + .{ .cp = 0xB97B, .start = 14924, .len = 3 }, + .{ .cp = 0xB97C, .start = 14927, .len = 3 }, + .{ .cp = 0xB97D, .start = 14930, .len = 3 }, + .{ .cp = 0xB97E, .start = 14933, .len = 3 }, + .{ .cp = 0xB97F, .start = 14936, .len = 3 }, + .{ .cp = 0xB980, .start = 14939, .len = 3 }, + .{ .cp = 0xB981, .start = 14942, .len = 3 }, + .{ .cp = 0xB982, .start = 14945, .len = 3 }, + .{ .cp = 0xB983, .start = 14948, .len = 3 }, + .{ .cp = 0xB984, .start = 14951, .len = 3 }, + .{ .cp = 0xB985, .start = 14954, .len = 3 }, + .{ .cp = 0xB986, .start = 14957, .len = 3 }, + .{ .cp = 0xB987, .start = 14960, .len = 3 }, + .{ .cp = 0xB988, .start = 14963, .len = 3 }, + .{ .cp = 0xB989, .start = 14966, .len = 3 }, + .{ .cp = 0xB98A, .start = 14969, .len = 3 }, + .{ .cp = 0xB98B, .start = 14972, .len = 3 }, + .{ .cp = 0xB98C, .start = 14975, .len = 3 }, + .{ .cp = 0xB98D, .start = 14978, .len = 3 }, + .{ .cp = 0xB98E, .start = 14981, .len = 3 }, + .{ .cp = 0xB98F, .start = 14984, .len = 3 }, + .{ .cp = 0xB990, .start = 14987, .len = 2 }, + .{ .cp = 0xB991, .start = 14989, .len = 3 }, + .{ .cp = 0xB992, .start = 14992, .len = 3 }, + .{ .cp = 0xB993, .start = 14995, .len = 3 }, + .{ .cp = 0xB994, .start = 14998, .len = 3 }, + .{ .cp = 0xB995, .start = 15001, .len = 3 }, + .{ .cp = 0xB996, .start = 15004, .len = 3 }, + .{ .cp = 0xB997, .start = 15007, .len = 3 }, + .{ .cp = 0xB998, .start = 15010, .len = 3 }, + .{ .cp = 0xB999, .start = 15013, .len = 3 }, + .{ .cp = 0xB99A, .start = 15016, .len = 3 }, + .{ .cp = 0xB99B, .start = 15019, .len = 3 }, + .{ .cp = 0xB99C, .start = 15022, .len = 3 }, + .{ .cp = 0xB99D, .start = 15025, .len = 3 }, + .{ .cp = 0xB99E, .start = 15028, .len = 3 }, + .{ .cp = 0xB99F, .start = 15031, .len = 3 }, + .{ .cp = 0xB9A0, .start = 15034, .len = 3 }, + .{ .cp = 0xB9A1, .start = 15037, .len = 3 }, + .{ .cp = 0xB9A2, .start = 15040, .len = 3 }, + .{ .cp = 0xB9A3, .start = 15043, .len = 3 }, + .{ .cp = 0xB9A4, .start = 15046, .len = 3 }, + .{ .cp = 0xB9A5, .start = 15049, .len = 3 }, + .{ .cp = 0xB9A6, .start = 15052, .len = 3 }, + .{ .cp = 0xB9A7, .start = 15055, .len = 3 }, + .{ .cp = 0xB9A8, .start = 15058, .len = 3 }, + .{ .cp = 0xB9A9, .start = 15061, .len = 3 }, + .{ .cp = 0xB9AA, .start = 15064, .len = 3 }, + .{ .cp = 0xB9AB, .start = 15067, .len = 3 }, + .{ .cp = 0xB9AC, .start = 15070, .len = 2 }, + .{ .cp = 0xB9AD, .start = 15072, .len = 3 }, + .{ .cp = 0xB9AE, .start = 15075, .len = 3 }, + .{ .cp = 0xB9AF, .start = 15078, .len = 3 }, + .{ .cp = 0xB9B0, .start = 15081, .len = 3 }, + .{ .cp = 0xB9B1, .start = 15084, .len = 3 }, + .{ .cp = 0xB9B2, .start = 15087, .len = 3 }, + .{ .cp = 0xB9B3, .start = 15090, .len = 3 }, + .{ .cp = 0xB9B4, .start = 15093, .len = 3 }, + .{ .cp = 0xB9B5, .start = 15096, .len = 3 }, + .{ .cp = 0xB9B6, .start = 15099, .len = 3 }, + .{ .cp = 0xB9B7, .start = 15102, .len = 3 }, + .{ .cp = 0xB9B8, .start = 15105, .len = 3 }, + .{ .cp = 0xB9B9, .start = 15108, .len = 3 }, + .{ .cp = 0xB9BA, .start = 15111, .len = 3 }, + .{ .cp = 0xB9BB, .start = 15114, .len = 3 }, + .{ .cp = 0xB9BC, .start = 15117, .len = 3 }, + .{ .cp = 0xB9BD, .start = 15120, .len = 3 }, + .{ .cp = 0xB9BE, .start = 15123, .len = 3 }, + .{ .cp = 0xB9BF, .start = 15126, .len = 3 }, + .{ .cp = 0xB9C0, .start = 15129, .len = 3 }, + .{ .cp = 0xB9C1, .start = 15132, .len = 3 }, + .{ .cp = 0xB9C2, .start = 15135, .len = 3 }, + .{ .cp = 0xB9C3, .start = 15138, .len = 3 }, + .{ .cp = 0xB9C4, .start = 15141, .len = 3 }, + .{ .cp = 0xB9C5, .start = 15144, .len = 3 }, + .{ .cp = 0xB9C6, .start = 15147, .len = 3 }, + .{ .cp = 0xB9C7, .start = 15150, .len = 3 }, + .{ .cp = 0xB9C8, .start = 15153, .len = 2 }, + .{ .cp = 0xB9C9, .start = 15155, .len = 3 }, + .{ .cp = 0xB9CA, .start = 15158, .len = 3 }, + .{ .cp = 0xB9CB, .start = 15161, .len = 3 }, + .{ .cp = 0xB9CC, .start = 15164, .len = 3 }, + .{ .cp = 0xB9CD, .start = 15167, .len = 3 }, + .{ .cp = 0xB9CE, .start = 15170, .len = 3 }, + .{ .cp = 0xB9CF, .start = 15173, .len = 3 }, + .{ .cp = 0xB9D0, .start = 15176, .len = 3 }, + .{ .cp = 0xB9D1, .start = 15179, .len = 3 }, + .{ .cp = 0xB9D2, .start = 15182, .len = 3 }, + .{ .cp = 0xB9D3, .start = 15185, .len = 3 }, + .{ .cp = 0xB9D4, .start = 15188, .len = 3 }, + .{ .cp = 0xB9D5, .start = 15191, .len = 3 }, + .{ .cp = 0xB9D6, .start = 15194, .len = 3 }, + .{ .cp = 0xB9D7, .start = 15197, .len = 3 }, + .{ .cp = 0xB9D8, .start = 15200, .len = 3 }, + .{ .cp = 0xB9D9, .start = 15203, .len = 3 }, + .{ .cp = 0xB9DA, .start = 15206, .len = 3 }, + .{ .cp = 0xB9DB, .start = 15209, .len = 3 }, + .{ .cp = 0xB9DC, .start = 15212, .len = 3 }, + .{ .cp = 0xB9DD, .start = 15215, .len = 3 }, + .{ .cp = 0xB9DE, .start = 15218, .len = 3 }, + .{ .cp = 0xB9DF, .start = 15221, .len = 3 }, + .{ .cp = 0xB9E0, .start = 15224, .len = 3 }, + .{ .cp = 0xB9E1, .start = 15227, .len = 3 }, + .{ .cp = 0xB9E2, .start = 15230, .len = 3 }, + .{ .cp = 0xB9E3, .start = 15233, .len = 3 }, + .{ .cp = 0xB9E4, .start = 15236, .len = 2 }, + .{ .cp = 0xB9E5, .start = 15238, .len = 3 }, + .{ .cp = 0xB9E6, .start = 15241, .len = 3 }, + .{ .cp = 0xB9E7, .start = 15244, .len = 3 }, + .{ .cp = 0xB9E8, .start = 15247, .len = 3 }, + .{ .cp = 0xB9E9, .start = 15250, .len = 3 }, + .{ .cp = 0xB9EA, .start = 15253, .len = 3 }, + .{ .cp = 0xB9EB, .start = 15256, .len = 3 }, + .{ .cp = 0xB9EC, .start = 15259, .len = 3 }, + .{ .cp = 0xB9ED, .start = 15262, .len = 3 }, + .{ .cp = 0xB9EE, .start = 15265, .len = 3 }, + .{ .cp = 0xB9EF, .start = 15268, .len = 3 }, + .{ .cp = 0xB9F0, .start = 15271, .len = 3 }, + .{ .cp = 0xB9F1, .start = 15274, .len = 3 }, + .{ .cp = 0xB9F2, .start = 15277, .len = 3 }, + .{ .cp = 0xB9F3, .start = 15280, .len = 3 }, + .{ .cp = 0xB9F4, .start = 15283, .len = 3 }, + .{ .cp = 0xB9F5, .start = 15286, .len = 3 }, + .{ .cp = 0xB9F6, .start = 15289, .len = 3 }, + .{ .cp = 0xB9F7, .start = 15292, .len = 3 }, + .{ .cp = 0xB9F8, .start = 15295, .len = 3 }, + .{ .cp = 0xB9F9, .start = 15298, .len = 3 }, + .{ .cp = 0xB9FA, .start = 15301, .len = 3 }, + .{ .cp = 0xB9FB, .start = 15304, .len = 3 }, + .{ .cp = 0xB9FC, .start = 15307, .len = 3 }, + .{ .cp = 0xB9FD, .start = 15310, .len = 3 }, + .{ .cp = 0xB9FE, .start = 15313, .len = 3 }, + .{ .cp = 0xB9FF, .start = 15316, .len = 3 }, + .{ .cp = 0xBA00, .start = 15319, .len = 2 }, + .{ .cp = 0xBA01, .start = 15321, .len = 3 }, + .{ .cp = 0xBA02, .start = 15324, .len = 3 }, + .{ .cp = 0xBA03, .start = 15327, .len = 3 }, + .{ .cp = 0xBA04, .start = 15330, .len = 3 }, + .{ .cp = 0xBA05, .start = 15333, .len = 3 }, + .{ .cp = 0xBA06, .start = 15336, .len = 3 }, + .{ .cp = 0xBA07, .start = 15339, .len = 3 }, + .{ .cp = 0xBA08, .start = 15342, .len = 3 }, + .{ .cp = 0xBA09, .start = 15345, .len = 3 }, + .{ .cp = 0xBA0A, .start = 15348, .len = 3 }, + .{ .cp = 0xBA0B, .start = 15351, .len = 3 }, + .{ .cp = 0xBA0C, .start = 15354, .len = 3 }, + .{ .cp = 0xBA0D, .start = 15357, .len = 3 }, + .{ .cp = 0xBA0E, .start = 15360, .len = 3 }, + .{ .cp = 0xBA0F, .start = 15363, .len = 3 }, + .{ .cp = 0xBA10, .start = 15366, .len = 3 }, + .{ .cp = 0xBA11, .start = 15369, .len = 3 }, + .{ .cp = 0xBA12, .start = 15372, .len = 3 }, + .{ .cp = 0xBA13, .start = 15375, .len = 3 }, + .{ .cp = 0xBA14, .start = 15378, .len = 3 }, + .{ .cp = 0xBA15, .start = 15381, .len = 3 }, + .{ .cp = 0xBA16, .start = 15384, .len = 3 }, + .{ .cp = 0xBA17, .start = 15387, .len = 3 }, + .{ .cp = 0xBA18, .start = 15390, .len = 3 }, + .{ .cp = 0xBA19, .start = 15393, .len = 3 }, + .{ .cp = 0xBA1A, .start = 15396, .len = 3 }, + .{ .cp = 0xBA1B, .start = 15399, .len = 3 }, + .{ .cp = 0xBA1C, .start = 15402, .len = 2 }, + .{ .cp = 0xBA1D, .start = 15404, .len = 3 }, + .{ .cp = 0xBA1E, .start = 15407, .len = 3 }, + .{ .cp = 0xBA1F, .start = 15410, .len = 3 }, + .{ .cp = 0xBA20, .start = 15413, .len = 3 }, + .{ .cp = 0xBA21, .start = 15416, .len = 3 }, + .{ .cp = 0xBA22, .start = 15419, .len = 3 }, + .{ .cp = 0xBA23, .start = 15422, .len = 3 }, + .{ .cp = 0xBA24, .start = 15425, .len = 3 }, + .{ .cp = 0xBA25, .start = 15428, .len = 3 }, + .{ .cp = 0xBA26, .start = 15431, .len = 3 }, + .{ .cp = 0xBA27, .start = 15434, .len = 3 }, + .{ .cp = 0xBA28, .start = 15437, .len = 3 }, + .{ .cp = 0xBA29, .start = 15440, .len = 3 }, + .{ .cp = 0xBA2A, .start = 15443, .len = 3 }, + .{ .cp = 0xBA2B, .start = 15446, .len = 3 }, + .{ .cp = 0xBA2C, .start = 15449, .len = 3 }, + .{ .cp = 0xBA2D, .start = 15452, .len = 3 }, + .{ .cp = 0xBA2E, .start = 15455, .len = 3 }, + .{ .cp = 0xBA2F, .start = 15458, .len = 3 }, + .{ .cp = 0xBA30, .start = 15461, .len = 3 }, + .{ .cp = 0xBA31, .start = 15464, .len = 3 }, + .{ .cp = 0xBA32, .start = 15467, .len = 3 }, + .{ .cp = 0xBA33, .start = 15470, .len = 3 }, + .{ .cp = 0xBA34, .start = 15473, .len = 3 }, + .{ .cp = 0xBA35, .start = 15476, .len = 3 }, + .{ .cp = 0xBA36, .start = 15479, .len = 3 }, + .{ .cp = 0xBA37, .start = 15482, .len = 3 }, + .{ .cp = 0xBA38, .start = 15485, .len = 2 }, + .{ .cp = 0xBA39, .start = 15487, .len = 3 }, + .{ .cp = 0xBA3A, .start = 15490, .len = 3 }, + .{ .cp = 0xBA3B, .start = 15493, .len = 3 }, + .{ .cp = 0xBA3C, .start = 15496, .len = 3 }, + .{ .cp = 0xBA3D, .start = 15499, .len = 3 }, + .{ .cp = 0xBA3E, .start = 15502, .len = 3 }, + .{ .cp = 0xBA3F, .start = 15505, .len = 3 }, + .{ .cp = 0xBA40, .start = 15508, .len = 3 }, + .{ .cp = 0xBA41, .start = 15511, .len = 3 }, + .{ .cp = 0xBA42, .start = 15514, .len = 3 }, + .{ .cp = 0xBA43, .start = 15517, .len = 3 }, + .{ .cp = 0xBA44, .start = 15520, .len = 3 }, + .{ .cp = 0xBA45, .start = 15523, .len = 3 }, + .{ .cp = 0xBA46, .start = 15526, .len = 3 }, + .{ .cp = 0xBA47, .start = 15529, .len = 3 }, + .{ .cp = 0xBA48, .start = 15532, .len = 3 }, + .{ .cp = 0xBA49, .start = 15535, .len = 3 }, + .{ .cp = 0xBA4A, .start = 15538, .len = 3 }, + .{ .cp = 0xBA4B, .start = 15541, .len = 3 }, + .{ .cp = 0xBA4C, .start = 15544, .len = 3 }, + .{ .cp = 0xBA4D, .start = 15547, .len = 3 }, + .{ .cp = 0xBA4E, .start = 15550, .len = 3 }, + .{ .cp = 0xBA4F, .start = 15553, .len = 3 }, + .{ .cp = 0xBA50, .start = 15556, .len = 3 }, + .{ .cp = 0xBA51, .start = 15559, .len = 3 }, + .{ .cp = 0xBA52, .start = 15562, .len = 3 }, + .{ .cp = 0xBA53, .start = 15565, .len = 3 }, + .{ .cp = 0xBA54, .start = 15568, .len = 2 }, + .{ .cp = 0xBA55, .start = 15570, .len = 3 }, + .{ .cp = 0xBA56, .start = 15573, .len = 3 }, + .{ .cp = 0xBA57, .start = 15576, .len = 3 }, + .{ .cp = 0xBA58, .start = 15579, .len = 3 }, + .{ .cp = 0xBA59, .start = 15582, .len = 3 }, + .{ .cp = 0xBA5A, .start = 15585, .len = 3 }, + .{ .cp = 0xBA5B, .start = 15588, .len = 3 }, + .{ .cp = 0xBA5C, .start = 15591, .len = 3 }, + .{ .cp = 0xBA5D, .start = 15594, .len = 3 }, + .{ .cp = 0xBA5E, .start = 15597, .len = 3 }, + .{ .cp = 0xBA5F, .start = 15600, .len = 3 }, + .{ .cp = 0xBA60, .start = 15603, .len = 3 }, + .{ .cp = 0xBA61, .start = 15606, .len = 3 }, + .{ .cp = 0xBA62, .start = 15609, .len = 3 }, + .{ .cp = 0xBA63, .start = 15612, .len = 3 }, + .{ .cp = 0xBA64, .start = 15615, .len = 3 }, + .{ .cp = 0xBA65, .start = 15618, .len = 3 }, + .{ .cp = 0xBA66, .start = 15621, .len = 3 }, + .{ .cp = 0xBA67, .start = 15624, .len = 3 }, + .{ .cp = 0xBA68, .start = 15627, .len = 3 }, + .{ .cp = 0xBA69, .start = 15630, .len = 3 }, + .{ .cp = 0xBA6A, .start = 15633, .len = 3 }, + .{ .cp = 0xBA6B, .start = 15636, .len = 3 }, + .{ .cp = 0xBA6C, .start = 15639, .len = 3 }, + .{ .cp = 0xBA6D, .start = 15642, .len = 3 }, + .{ .cp = 0xBA6E, .start = 15645, .len = 3 }, + .{ .cp = 0xBA6F, .start = 15648, .len = 3 }, + .{ .cp = 0xBA70, .start = 15651, .len = 2 }, + .{ .cp = 0xBA71, .start = 15653, .len = 3 }, + .{ .cp = 0xBA72, .start = 15656, .len = 3 }, + .{ .cp = 0xBA73, .start = 15659, .len = 3 }, + .{ .cp = 0xBA74, .start = 15662, .len = 3 }, + .{ .cp = 0xBA75, .start = 15665, .len = 3 }, + .{ .cp = 0xBA76, .start = 15668, .len = 3 }, + .{ .cp = 0xBA77, .start = 15671, .len = 3 }, + .{ .cp = 0xBA78, .start = 15674, .len = 3 }, + .{ .cp = 0xBA79, .start = 15677, .len = 3 }, + .{ .cp = 0xBA7A, .start = 15680, .len = 3 }, + .{ .cp = 0xBA7B, .start = 15683, .len = 3 }, + .{ .cp = 0xBA7C, .start = 15686, .len = 3 }, + .{ .cp = 0xBA7D, .start = 15689, .len = 3 }, + .{ .cp = 0xBA7E, .start = 15692, .len = 3 }, + .{ .cp = 0xBA7F, .start = 15695, .len = 3 }, + .{ .cp = 0xBA80, .start = 15698, .len = 3 }, + .{ .cp = 0xBA81, .start = 15701, .len = 3 }, + .{ .cp = 0xBA82, .start = 15704, .len = 3 }, + .{ .cp = 0xBA83, .start = 15707, .len = 3 }, + .{ .cp = 0xBA84, .start = 15710, .len = 3 }, + .{ .cp = 0xBA85, .start = 15713, .len = 3 }, + .{ .cp = 0xBA86, .start = 15716, .len = 3 }, + .{ .cp = 0xBA87, .start = 15719, .len = 3 }, + .{ .cp = 0xBA88, .start = 15722, .len = 3 }, + .{ .cp = 0xBA89, .start = 15725, .len = 3 }, + .{ .cp = 0xBA8A, .start = 15728, .len = 3 }, + .{ .cp = 0xBA8B, .start = 15731, .len = 3 }, + .{ .cp = 0xBA8C, .start = 15734, .len = 2 }, + .{ .cp = 0xBA8D, .start = 15736, .len = 3 }, + .{ .cp = 0xBA8E, .start = 15739, .len = 3 }, + .{ .cp = 0xBA8F, .start = 15742, .len = 3 }, + .{ .cp = 0xBA90, .start = 15745, .len = 3 }, + .{ .cp = 0xBA91, .start = 15748, .len = 3 }, + .{ .cp = 0xBA92, .start = 15751, .len = 3 }, + .{ .cp = 0xBA93, .start = 15754, .len = 3 }, + .{ .cp = 0xBA94, .start = 15757, .len = 3 }, + .{ .cp = 0xBA95, .start = 15760, .len = 3 }, + .{ .cp = 0xBA96, .start = 15763, .len = 3 }, + .{ .cp = 0xBA97, .start = 15766, .len = 3 }, + .{ .cp = 0xBA98, .start = 15769, .len = 3 }, + .{ .cp = 0xBA99, .start = 15772, .len = 3 }, + .{ .cp = 0xBA9A, .start = 15775, .len = 3 }, + .{ .cp = 0xBA9B, .start = 15778, .len = 3 }, + .{ .cp = 0xBA9C, .start = 15781, .len = 3 }, + .{ .cp = 0xBA9D, .start = 15784, .len = 3 }, + .{ .cp = 0xBA9E, .start = 15787, .len = 3 }, + .{ .cp = 0xBA9F, .start = 15790, .len = 3 }, + .{ .cp = 0xBAA0, .start = 15793, .len = 3 }, + .{ .cp = 0xBAA1, .start = 15796, .len = 3 }, + .{ .cp = 0xBAA2, .start = 15799, .len = 3 }, + .{ .cp = 0xBAA3, .start = 15802, .len = 3 }, + .{ .cp = 0xBAA4, .start = 15805, .len = 3 }, + .{ .cp = 0xBAA5, .start = 15808, .len = 3 }, + .{ .cp = 0xBAA6, .start = 15811, .len = 3 }, + .{ .cp = 0xBAA7, .start = 15814, .len = 3 }, + .{ .cp = 0xBAA8, .start = 15817, .len = 2 }, + .{ .cp = 0xBAA9, .start = 15819, .len = 3 }, + .{ .cp = 0xBAAA, .start = 15822, .len = 3 }, + .{ .cp = 0xBAAB, .start = 15825, .len = 3 }, + .{ .cp = 0xBAAC, .start = 15828, .len = 3 }, + .{ .cp = 0xBAAD, .start = 15831, .len = 3 }, + .{ .cp = 0xBAAE, .start = 15834, .len = 3 }, + .{ .cp = 0xBAAF, .start = 15837, .len = 3 }, + .{ .cp = 0xBAB0, .start = 15840, .len = 3 }, + .{ .cp = 0xBAB1, .start = 15843, .len = 3 }, + .{ .cp = 0xBAB2, .start = 15846, .len = 3 }, + .{ .cp = 0xBAB3, .start = 15849, .len = 3 }, + .{ .cp = 0xBAB4, .start = 15852, .len = 3 }, + .{ .cp = 0xBAB5, .start = 15855, .len = 3 }, + .{ .cp = 0xBAB6, .start = 15858, .len = 3 }, + .{ .cp = 0xBAB7, .start = 15861, .len = 3 }, + .{ .cp = 0xBAB8, .start = 15864, .len = 3 }, + .{ .cp = 0xBAB9, .start = 15867, .len = 3 }, + .{ .cp = 0xBABA, .start = 15870, .len = 3 }, + .{ .cp = 0xBABB, .start = 15873, .len = 3 }, + .{ .cp = 0xBABC, .start = 15876, .len = 3 }, + .{ .cp = 0xBABD, .start = 15879, .len = 3 }, + .{ .cp = 0xBABE, .start = 15882, .len = 3 }, + .{ .cp = 0xBABF, .start = 15885, .len = 3 }, + .{ .cp = 0xBAC0, .start = 15888, .len = 3 }, + .{ .cp = 0xBAC1, .start = 15891, .len = 3 }, + .{ .cp = 0xBAC2, .start = 15894, .len = 3 }, + .{ .cp = 0xBAC3, .start = 15897, .len = 3 }, + .{ .cp = 0xBAC4, .start = 15900, .len = 2 }, + .{ .cp = 0xBAC5, .start = 15902, .len = 3 }, + .{ .cp = 0xBAC6, .start = 15905, .len = 3 }, + .{ .cp = 0xBAC7, .start = 15908, .len = 3 }, + .{ .cp = 0xBAC8, .start = 15911, .len = 3 }, + .{ .cp = 0xBAC9, .start = 15914, .len = 3 }, + .{ .cp = 0xBACA, .start = 15917, .len = 3 }, + .{ .cp = 0xBACB, .start = 15920, .len = 3 }, + .{ .cp = 0xBACC, .start = 15923, .len = 3 }, + .{ .cp = 0xBACD, .start = 15926, .len = 3 }, + .{ .cp = 0xBACE, .start = 15929, .len = 3 }, + .{ .cp = 0xBACF, .start = 15932, .len = 3 }, + .{ .cp = 0xBAD0, .start = 15935, .len = 3 }, + .{ .cp = 0xBAD1, .start = 15938, .len = 3 }, + .{ .cp = 0xBAD2, .start = 15941, .len = 3 }, + .{ .cp = 0xBAD3, .start = 15944, .len = 3 }, + .{ .cp = 0xBAD4, .start = 15947, .len = 3 }, + .{ .cp = 0xBAD5, .start = 15950, .len = 3 }, + .{ .cp = 0xBAD6, .start = 15953, .len = 3 }, + .{ .cp = 0xBAD7, .start = 15956, .len = 3 }, + .{ .cp = 0xBAD8, .start = 15959, .len = 3 }, + .{ .cp = 0xBAD9, .start = 15962, .len = 3 }, + .{ .cp = 0xBADA, .start = 15965, .len = 3 }, + .{ .cp = 0xBADB, .start = 15968, .len = 3 }, + .{ .cp = 0xBADC, .start = 15971, .len = 3 }, + .{ .cp = 0xBADD, .start = 15974, .len = 3 }, + .{ .cp = 0xBADE, .start = 15977, .len = 3 }, + .{ .cp = 0xBADF, .start = 15980, .len = 3 }, + .{ .cp = 0xBAE0, .start = 15983, .len = 2 }, + .{ .cp = 0xBAE1, .start = 15985, .len = 3 }, + .{ .cp = 0xBAE2, .start = 15988, .len = 3 }, + .{ .cp = 0xBAE3, .start = 15991, .len = 3 }, + .{ .cp = 0xBAE4, .start = 15994, .len = 3 }, + .{ .cp = 0xBAE5, .start = 15997, .len = 3 }, + .{ .cp = 0xBAE6, .start = 16000, .len = 3 }, + .{ .cp = 0xBAE7, .start = 16003, .len = 3 }, + .{ .cp = 0xBAE8, .start = 16006, .len = 3 }, + .{ .cp = 0xBAE9, .start = 16009, .len = 3 }, + .{ .cp = 0xBAEA, .start = 16012, .len = 3 }, + .{ .cp = 0xBAEB, .start = 16015, .len = 3 }, + .{ .cp = 0xBAEC, .start = 16018, .len = 3 }, + .{ .cp = 0xBAED, .start = 16021, .len = 3 }, + .{ .cp = 0xBAEE, .start = 16024, .len = 3 }, + .{ .cp = 0xBAEF, .start = 16027, .len = 3 }, + .{ .cp = 0xBAF0, .start = 16030, .len = 3 }, + .{ .cp = 0xBAF1, .start = 16033, .len = 3 }, + .{ .cp = 0xBAF2, .start = 16036, .len = 3 }, + .{ .cp = 0xBAF3, .start = 16039, .len = 3 }, + .{ .cp = 0xBAF4, .start = 16042, .len = 3 }, + .{ .cp = 0xBAF5, .start = 16045, .len = 3 }, + .{ .cp = 0xBAF6, .start = 16048, .len = 3 }, + .{ .cp = 0xBAF7, .start = 16051, .len = 3 }, + .{ .cp = 0xBAF8, .start = 16054, .len = 3 }, + .{ .cp = 0xBAF9, .start = 16057, .len = 3 }, + .{ .cp = 0xBAFA, .start = 16060, .len = 3 }, + .{ .cp = 0xBAFB, .start = 16063, .len = 3 }, + .{ .cp = 0xBAFC, .start = 16066, .len = 2 }, + .{ .cp = 0xBAFD, .start = 16068, .len = 3 }, + .{ .cp = 0xBAFE, .start = 16071, .len = 3 }, + .{ .cp = 0xBAFF, .start = 16074, .len = 3 }, + .{ .cp = 0xBB00, .start = 16077, .len = 3 }, + .{ .cp = 0xBB01, .start = 16080, .len = 3 }, + .{ .cp = 0xBB02, .start = 16083, .len = 3 }, + .{ .cp = 0xBB03, .start = 16086, .len = 3 }, + .{ .cp = 0xBB04, .start = 16089, .len = 3 }, + .{ .cp = 0xBB05, .start = 16092, .len = 3 }, + .{ .cp = 0xBB06, .start = 16095, .len = 3 }, + .{ .cp = 0xBB07, .start = 16098, .len = 3 }, + .{ .cp = 0xBB08, .start = 16101, .len = 3 }, + .{ .cp = 0xBB09, .start = 16104, .len = 3 }, + .{ .cp = 0xBB0A, .start = 16107, .len = 3 }, + .{ .cp = 0xBB0B, .start = 16110, .len = 3 }, + .{ .cp = 0xBB0C, .start = 16113, .len = 3 }, + .{ .cp = 0xBB0D, .start = 16116, .len = 3 }, + .{ .cp = 0xBB0E, .start = 16119, .len = 3 }, + .{ .cp = 0xBB0F, .start = 16122, .len = 3 }, + .{ .cp = 0xBB10, .start = 16125, .len = 3 }, + .{ .cp = 0xBB11, .start = 16128, .len = 3 }, + .{ .cp = 0xBB12, .start = 16131, .len = 3 }, + .{ .cp = 0xBB13, .start = 16134, .len = 3 }, + .{ .cp = 0xBB14, .start = 16137, .len = 3 }, + .{ .cp = 0xBB15, .start = 16140, .len = 3 }, + .{ .cp = 0xBB16, .start = 16143, .len = 3 }, + .{ .cp = 0xBB17, .start = 16146, .len = 3 }, + .{ .cp = 0xBB18, .start = 16149, .len = 2 }, + .{ .cp = 0xBB19, .start = 16151, .len = 3 }, + .{ .cp = 0xBB1A, .start = 16154, .len = 3 }, + .{ .cp = 0xBB1B, .start = 16157, .len = 3 }, + .{ .cp = 0xBB1C, .start = 16160, .len = 3 }, + .{ .cp = 0xBB1D, .start = 16163, .len = 3 }, + .{ .cp = 0xBB1E, .start = 16166, .len = 3 }, + .{ .cp = 0xBB1F, .start = 16169, .len = 3 }, + .{ .cp = 0xBB20, .start = 16172, .len = 3 }, + .{ .cp = 0xBB21, .start = 16175, .len = 3 }, + .{ .cp = 0xBB22, .start = 16178, .len = 3 }, + .{ .cp = 0xBB23, .start = 16181, .len = 3 }, + .{ .cp = 0xBB24, .start = 16184, .len = 3 }, + .{ .cp = 0xBB25, .start = 16187, .len = 3 }, + .{ .cp = 0xBB26, .start = 16190, .len = 3 }, + .{ .cp = 0xBB27, .start = 16193, .len = 3 }, + .{ .cp = 0xBB28, .start = 16196, .len = 3 }, + .{ .cp = 0xBB29, .start = 16199, .len = 3 }, + .{ .cp = 0xBB2A, .start = 16202, .len = 3 }, + .{ .cp = 0xBB2B, .start = 16205, .len = 3 }, + .{ .cp = 0xBB2C, .start = 16208, .len = 3 }, + .{ .cp = 0xBB2D, .start = 16211, .len = 3 }, + .{ .cp = 0xBB2E, .start = 16214, .len = 3 }, + .{ .cp = 0xBB2F, .start = 16217, .len = 3 }, + .{ .cp = 0xBB30, .start = 16220, .len = 3 }, + .{ .cp = 0xBB31, .start = 16223, .len = 3 }, + .{ .cp = 0xBB32, .start = 16226, .len = 3 }, + .{ .cp = 0xBB33, .start = 16229, .len = 3 }, + .{ .cp = 0xBB34, .start = 16232, .len = 2 }, + .{ .cp = 0xBB35, .start = 16234, .len = 3 }, + .{ .cp = 0xBB36, .start = 16237, .len = 3 }, + .{ .cp = 0xBB37, .start = 16240, .len = 3 }, + .{ .cp = 0xBB38, .start = 16243, .len = 3 }, + .{ .cp = 0xBB39, .start = 16246, .len = 3 }, + .{ .cp = 0xBB3A, .start = 16249, .len = 3 }, + .{ .cp = 0xBB3B, .start = 16252, .len = 3 }, + .{ .cp = 0xBB3C, .start = 16255, .len = 3 }, + .{ .cp = 0xBB3D, .start = 16258, .len = 3 }, + .{ .cp = 0xBB3E, .start = 16261, .len = 3 }, + .{ .cp = 0xBB3F, .start = 16264, .len = 3 }, + .{ .cp = 0xBB40, .start = 16267, .len = 3 }, + .{ .cp = 0xBB41, .start = 16270, .len = 3 }, + .{ .cp = 0xBB42, .start = 16273, .len = 3 }, + .{ .cp = 0xBB43, .start = 16276, .len = 3 }, + .{ .cp = 0xBB44, .start = 16279, .len = 3 }, + .{ .cp = 0xBB45, .start = 16282, .len = 3 }, + .{ .cp = 0xBB46, .start = 16285, .len = 3 }, + .{ .cp = 0xBB47, .start = 16288, .len = 3 }, + .{ .cp = 0xBB48, .start = 16291, .len = 3 }, + .{ .cp = 0xBB49, .start = 16294, .len = 3 }, + .{ .cp = 0xBB4A, .start = 16297, .len = 3 }, + .{ .cp = 0xBB4B, .start = 16300, .len = 3 }, + .{ .cp = 0xBB4C, .start = 16303, .len = 3 }, + .{ .cp = 0xBB4D, .start = 16306, .len = 3 }, + .{ .cp = 0xBB4E, .start = 16309, .len = 3 }, + .{ .cp = 0xBB4F, .start = 16312, .len = 3 }, + .{ .cp = 0xBB50, .start = 16315, .len = 2 }, + .{ .cp = 0xBB51, .start = 16317, .len = 3 }, + .{ .cp = 0xBB52, .start = 16320, .len = 3 }, + .{ .cp = 0xBB53, .start = 16323, .len = 3 }, + .{ .cp = 0xBB54, .start = 16326, .len = 3 }, + .{ .cp = 0xBB55, .start = 16329, .len = 3 }, + .{ .cp = 0xBB56, .start = 16332, .len = 3 }, + .{ .cp = 0xBB57, .start = 16335, .len = 3 }, + .{ .cp = 0xBB58, .start = 16338, .len = 3 }, + .{ .cp = 0xBB59, .start = 16341, .len = 3 }, + .{ .cp = 0xBB5A, .start = 16344, .len = 3 }, + .{ .cp = 0xBB5B, .start = 16347, .len = 3 }, + .{ .cp = 0xBB5C, .start = 16350, .len = 3 }, + .{ .cp = 0xBB5D, .start = 16353, .len = 3 }, + .{ .cp = 0xBB5E, .start = 16356, .len = 3 }, + .{ .cp = 0xBB5F, .start = 16359, .len = 3 }, + .{ .cp = 0xBB60, .start = 16362, .len = 3 }, + .{ .cp = 0xBB61, .start = 16365, .len = 3 }, + .{ .cp = 0xBB62, .start = 16368, .len = 3 }, + .{ .cp = 0xBB63, .start = 16371, .len = 3 }, + .{ .cp = 0xBB64, .start = 16374, .len = 3 }, + .{ .cp = 0xBB65, .start = 16377, .len = 3 }, + .{ .cp = 0xBB66, .start = 16380, .len = 3 }, + .{ .cp = 0xBB67, .start = 16383, .len = 3 }, + .{ .cp = 0xBB68, .start = 16386, .len = 3 }, + .{ .cp = 0xBB69, .start = 16389, .len = 3 }, + .{ .cp = 0xBB6A, .start = 16392, .len = 3 }, + .{ .cp = 0xBB6B, .start = 16395, .len = 3 }, + .{ .cp = 0xBB6C, .start = 16398, .len = 2 }, + .{ .cp = 0xBB6D, .start = 16400, .len = 3 }, + .{ .cp = 0xBB6E, .start = 16403, .len = 3 }, + .{ .cp = 0xBB6F, .start = 16406, .len = 3 }, + .{ .cp = 0xBB70, .start = 16409, .len = 3 }, + .{ .cp = 0xBB71, .start = 16412, .len = 3 }, + .{ .cp = 0xBB72, .start = 16415, .len = 3 }, + .{ .cp = 0xBB73, .start = 16418, .len = 3 }, + .{ .cp = 0xBB74, .start = 16421, .len = 3 }, + .{ .cp = 0xBB75, .start = 16424, .len = 3 }, + .{ .cp = 0xBB76, .start = 16427, .len = 3 }, + .{ .cp = 0xBB77, .start = 16430, .len = 3 }, + .{ .cp = 0xBB78, .start = 16433, .len = 3 }, + .{ .cp = 0xBB79, .start = 16436, .len = 3 }, + .{ .cp = 0xBB7A, .start = 16439, .len = 3 }, + .{ .cp = 0xBB7B, .start = 16442, .len = 3 }, + .{ .cp = 0xBB7C, .start = 16445, .len = 3 }, + .{ .cp = 0xBB7D, .start = 16448, .len = 3 }, + .{ .cp = 0xBB7E, .start = 16451, .len = 3 }, + .{ .cp = 0xBB7F, .start = 16454, .len = 3 }, + .{ .cp = 0xBB80, .start = 16457, .len = 3 }, + .{ .cp = 0xBB81, .start = 16460, .len = 3 }, + .{ .cp = 0xBB82, .start = 16463, .len = 3 }, + .{ .cp = 0xBB83, .start = 16466, .len = 3 }, + .{ .cp = 0xBB84, .start = 16469, .len = 3 }, + .{ .cp = 0xBB85, .start = 16472, .len = 3 }, + .{ .cp = 0xBB86, .start = 16475, .len = 3 }, + .{ .cp = 0xBB87, .start = 16478, .len = 3 }, + .{ .cp = 0xBB88, .start = 16481, .len = 2 }, + .{ .cp = 0xBB89, .start = 16483, .len = 3 }, + .{ .cp = 0xBB8A, .start = 16486, .len = 3 }, + .{ .cp = 0xBB8B, .start = 16489, .len = 3 }, + .{ .cp = 0xBB8C, .start = 16492, .len = 3 }, + .{ .cp = 0xBB8D, .start = 16495, .len = 3 }, + .{ .cp = 0xBB8E, .start = 16498, .len = 3 }, + .{ .cp = 0xBB8F, .start = 16501, .len = 3 }, + .{ .cp = 0xBB90, .start = 16504, .len = 3 }, + .{ .cp = 0xBB91, .start = 16507, .len = 3 }, + .{ .cp = 0xBB92, .start = 16510, .len = 3 }, + .{ .cp = 0xBB93, .start = 16513, .len = 3 }, + .{ .cp = 0xBB94, .start = 16516, .len = 3 }, + .{ .cp = 0xBB95, .start = 16519, .len = 3 }, + .{ .cp = 0xBB96, .start = 16522, .len = 3 }, + .{ .cp = 0xBB97, .start = 16525, .len = 3 }, + .{ .cp = 0xBB98, .start = 16528, .len = 3 }, + .{ .cp = 0xBB99, .start = 16531, .len = 3 }, + .{ .cp = 0xBB9A, .start = 16534, .len = 3 }, + .{ .cp = 0xBB9B, .start = 16537, .len = 3 }, + .{ .cp = 0xBB9C, .start = 16540, .len = 3 }, + .{ .cp = 0xBB9D, .start = 16543, .len = 3 }, + .{ .cp = 0xBB9E, .start = 16546, .len = 3 }, + .{ .cp = 0xBB9F, .start = 16549, .len = 3 }, + .{ .cp = 0xBBA0, .start = 16552, .len = 3 }, + .{ .cp = 0xBBA1, .start = 16555, .len = 3 }, + .{ .cp = 0xBBA2, .start = 16558, .len = 3 }, + .{ .cp = 0xBBA3, .start = 16561, .len = 3 }, + .{ .cp = 0xBBA4, .start = 16564, .len = 2 }, + .{ .cp = 0xBBA5, .start = 16566, .len = 3 }, + .{ .cp = 0xBBA6, .start = 16569, .len = 3 }, + .{ .cp = 0xBBA7, .start = 16572, .len = 3 }, + .{ .cp = 0xBBA8, .start = 16575, .len = 3 }, + .{ .cp = 0xBBA9, .start = 16578, .len = 3 }, + .{ .cp = 0xBBAA, .start = 16581, .len = 3 }, + .{ .cp = 0xBBAB, .start = 16584, .len = 3 }, + .{ .cp = 0xBBAC, .start = 16587, .len = 3 }, + .{ .cp = 0xBBAD, .start = 16590, .len = 3 }, + .{ .cp = 0xBBAE, .start = 16593, .len = 3 }, + .{ .cp = 0xBBAF, .start = 16596, .len = 3 }, + .{ .cp = 0xBBB0, .start = 16599, .len = 3 }, + .{ .cp = 0xBBB1, .start = 16602, .len = 3 }, + .{ .cp = 0xBBB2, .start = 16605, .len = 3 }, + .{ .cp = 0xBBB3, .start = 16608, .len = 3 }, + .{ .cp = 0xBBB4, .start = 16611, .len = 3 }, + .{ .cp = 0xBBB5, .start = 16614, .len = 3 }, + .{ .cp = 0xBBB6, .start = 16617, .len = 3 }, + .{ .cp = 0xBBB7, .start = 16620, .len = 3 }, + .{ .cp = 0xBBB8, .start = 16623, .len = 3 }, + .{ .cp = 0xBBB9, .start = 16626, .len = 3 }, + .{ .cp = 0xBBBA, .start = 16629, .len = 3 }, + .{ .cp = 0xBBBB, .start = 16632, .len = 3 }, + .{ .cp = 0xBBBC, .start = 16635, .len = 3 }, + .{ .cp = 0xBBBD, .start = 16638, .len = 3 }, + .{ .cp = 0xBBBE, .start = 16641, .len = 3 }, + .{ .cp = 0xBBBF, .start = 16644, .len = 3 }, + .{ .cp = 0xBBC0, .start = 16647, .len = 2 }, + .{ .cp = 0xBBC1, .start = 16649, .len = 3 }, + .{ .cp = 0xBBC2, .start = 16652, .len = 3 }, + .{ .cp = 0xBBC3, .start = 16655, .len = 3 }, + .{ .cp = 0xBBC4, .start = 16658, .len = 3 }, + .{ .cp = 0xBBC5, .start = 16661, .len = 3 }, + .{ .cp = 0xBBC6, .start = 16664, .len = 3 }, + .{ .cp = 0xBBC7, .start = 16667, .len = 3 }, + .{ .cp = 0xBBC8, .start = 16670, .len = 3 }, + .{ .cp = 0xBBC9, .start = 16673, .len = 3 }, + .{ .cp = 0xBBCA, .start = 16676, .len = 3 }, + .{ .cp = 0xBBCB, .start = 16679, .len = 3 }, + .{ .cp = 0xBBCC, .start = 16682, .len = 3 }, + .{ .cp = 0xBBCD, .start = 16685, .len = 3 }, + .{ .cp = 0xBBCE, .start = 16688, .len = 3 }, + .{ .cp = 0xBBCF, .start = 16691, .len = 3 }, + .{ .cp = 0xBBD0, .start = 16694, .len = 3 }, + .{ .cp = 0xBBD1, .start = 16697, .len = 3 }, + .{ .cp = 0xBBD2, .start = 16700, .len = 3 }, + .{ .cp = 0xBBD3, .start = 16703, .len = 3 }, + .{ .cp = 0xBBD4, .start = 16706, .len = 3 }, + .{ .cp = 0xBBD5, .start = 16709, .len = 3 }, + .{ .cp = 0xBBD6, .start = 16712, .len = 3 }, + .{ .cp = 0xBBD7, .start = 16715, .len = 3 }, + .{ .cp = 0xBBD8, .start = 16718, .len = 3 }, + .{ .cp = 0xBBD9, .start = 16721, .len = 3 }, + .{ .cp = 0xBBDA, .start = 16724, .len = 3 }, + .{ .cp = 0xBBDB, .start = 16727, .len = 3 }, + .{ .cp = 0xBBDC, .start = 16730, .len = 2 }, + .{ .cp = 0xBBDD, .start = 16732, .len = 3 }, + .{ .cp = 0xBBDE, .start = 16735, .len = 3 }, + .{ .cp = 0xBBDF, .start = 16738, .len = 3 }, + .{ .cp = 0xBBE0, .start = 16741, .len = 3 }, + .{ .cp = 0xBBE1, .start = 16744, .len = 3 }, + .{ .cp = 0xBBE2, .start = 16747, .len = 3 }, + .{ .cp = 0xBBE3, .start = 16750, .len = 3 }, + .{ .cp = 0xBBE4, .start = 16753, .len = 3 }, + .{ .cp = 0xBBE5, .start = 16756, .len = 3 }, + .{ .cp = 0xBBE6, .start = 16759, .len = 3 }, + .{ .cp = 0xBBE7, .start = 16762, .len = 3 }, + .{ .cp = 0xBBE8, .start = 16765, .len = 3 }, + .{ .cp = 0xBBE9, .start = 16768, .len = 3 }, + .{ .cp = 0xBBEA, .start = 16771, .len = 3 }, + .{ .cp = 0xBBEB, .start = 16774, .len = 3 }, + .{ .cp = 0xBBEC, .start = 16777, .len = 3 }, + .{ .cp = 0xBBED, .start = 16780, .len = 3 }, + .{ .cp = 0xBBEE, .start = 16783, .len = 3 }, + .{ .cp = 0xBBEF, .start = 16786, .len = 3 }, + .{ .cp = 0xBBF0, .start = 16789, .len = 3 }, + .{ .cp = 0xBBF1, .start = 16792, .len = 3 }, + .{ .cp = 0xBBF2, .start = 16795, .len = 3 }, + .{ .cp = 0xBBF3, .start = 16798, .len = 3 }, + .{ .cp = 0xBBF4, .start = 16801, .len = 3 }, + .{ .cp = 0xBBF5, .start = 16804, .len = 3 }, + .{ .cp = 0xBBF6, .start = 16807, .len = 3 }, + .{ .cp = 0xBBF7, .start = 16810, .len = 3 }, + .{ .cp = 0xBBF8, .start = 16813, .len = 2 }, + .{ .cp = 0xBBF9, .start = 16815, .len = 3 }, + .{ .cp = 0xBBFA, .start = 16818, .len = 3 }, + .{ .cp = 0xBBFB, .start = 16821, .len = 3 }, + .{ .cp = 0xBBFC, .start = 16824, .len = 3 }, + .{ .cp = 0xBBFD, .start = 16827, .len = 3 }, + .{ .cp = 0xBBFE, .start = 16830, .len = 3 }, + .{ .cp = 0xBBFF, .start = 16833, .len = 3 }, + .{ .cp = 0xBC00, .start = 16836, .len = 3 }, + .{ .cp = 0xBC01, .start = 16839, .len = 3 }, + .{ .cp = 0xBC02, .start = 16842, .len = 3 }, + .{ .cp = 0xBC03, .start = 16845, .len = 3 }, + .{ .cp = 0xBC04, .start = 16848, .len = 3 }, + .{ .cp = 0xBC05, .start = 16851, .len = 3 }, + .{ .cp = 0xBC06, .start = 16854, .len = 3 }, + .{ .cp = 0xBC07, .start = 16857, .len = 3 }, + .{ .cp = 0xBC08, .start = 16860, .len = 3 }, + .{ .cp = 0xBC09, .start = 16863, .len = 3 }, + .{ .cp = 0xBC0A, .start = 16866, .len = 3 }, + .{ .cp = 0xBC0B, .start = 16869, .len = 3 }, + .{ .cp = 0xBC0C, .start = 16872, .len = 3 }, + .{ .cp = 0xBC0D, .start = 16875, .len = 3 }, + .{ .cp = 0xBC0E, .start = 16878, .len = 3 }, + .{ .cp = 0xBC0F, .start = 16881, .len = 3 }, + .{ .cp = 0xBC10, .start = 16884, .len = 3 }, + .{ .cp = 0xBC11, .start = 16887, .len = 3 }, + .{ .cp = 0xBC12, .start = 16890, .len = 3 }, + .{ .cp = 0xBC13, .start = 16893, .len = 3 }, + .{ .cp = 0xBC14, .start = 16896, .len = 2 }, + .{ .cp = 0xBC15, .start = 16898, .len = 3 }, + .{ .cp = 0xBC16, .start = 16901, .len = 3 }, + .{ .cp = 0xBC17, .start = 16904, .len = 3 }, + .{ .cp = 0xBC18, .start = 16907, .len = 3 }, + .{ .cp = 0xBC19, .start = 16910, .len = 3 }, + .{ .cp = 0xBC1A, .start = 16913, .len = 3 }, + .{ .cp = 0xBC1B, .start = 16916, .len = 3 }, + .{ .cp = 0xBC1C, .start = 16919, .len = 3 }, + .{ .cp = 0xBC1D, .start = 16922, .len = 3 }, + .{ .cp = 0xBC1E, .start = 16925, .len = 3 }, + .{ .cp = 0xBC1F, .start = 16928, .len = 3 }, + .{ .cp = 0xBC20, .start = 16931, .len = 3 }, + .{ .cp = 0xBC21, .start = 16934, .len = 3 }, + .{ .cp = 0xBC22, .start = 16937, .len = 3 }, + .{ .cp = 0xBC23, .start = 16940, .len = 3 }, + .{ .cp = 0xBC24, .start = 16943, .len = 3 }, + .{ .cp = 0xBC25, .start = 16946, .len = 3 }, + .{ .cp = 0xBC26, .start = 16949, .len = 3 }, + .{ .cp = 0xBC27, .start = 16952, .len = 3 }, + .{ .cp = 0xBC28, .start = 16955, .len = 3 }, + .{ .cp = 0xBC29, .start = 16958, .len = 3 }, + .{ .cp = 0xBC2A, .start = 16961, .len = 3 }, + .{ .cp = 0xBC2B, .start = 16964, .len = 3 }, + .{ .cp = 0xBC2C, .start = 16967, .len = 3 }, + .{ .cp = 0xBC2D, .start = 16970, .len = 3 }, + .{ .cp = 0xBC2E, .start = 16973, .len = 3 }, + .{ .cp = 0xBC2F, .start = 16976, .len = 3 }, + .{ .cp = 0xBC30, .start = 16979, .len = 2 }, + .{ .cp = 0xBC31, .start = 16981, .len = 3 }, + .{ .cp = 0xBC32, .start = 16984, .len = 3 }, + .{ .cp = 0xBC33, .start = 16987, .len = 3 }, + .{ .cp = 0xBC34, .start = 16990, .len = 3 }, + .{ .cp = 0xBC35, .start = 16993, .len = 3 }, + .{ .cp = 0xBC36, .start = 16996, .len = 3 }, + .{ .cp = 0xBC37, .start = 16999, .len = 3 }, + .{ .cp = 0xBC38, .start = 17002, .len = 3 }, + .{ .cp = 0xBC39, .start = 17005, .len = 3 }, + .{ .cp = 0xBC3A, .start = 17008, .len = 3 }, + .{ .cp = 0xBC3B, .start = 17011, .len = 3 }, + .{ .cp = 0xBC3C, .start = 17014, .len = 3 }, + .{ .cp = 0xBC3D, .start = 17017, .len = 3 }, + .{ .cp = 0xBC3E, .start = 17020, .len = 3 }, + .{ .cp = 0xBC3F, .start = 17023, .len = 3 }, + .{ .cp = 0xBC40, .start = 17026, .len = 3 }, + .{ .cp = 0xBC41, .start = 17029, .len = 3 }, + .{ .cp = 0xBC42, .start = 17032, .len = 3 }, + .{ .cp = 0xBC43, .start = 17035, .len = 3 }, + .{ .cp = 0xBC44, .start = 17038, .len = 3 }, + .{ .cp = 0xBC45, .start = 17041, .len = 3 }, + .{ .cp = 0xBC46, .start = 17044, .len = 3 }, + .{ .cp = 0xBC47, .start = 17047, .len = 3 }, + .{ .cp = 0xBC48, .start = 17050, .len = 3 }, + .{ .cp = 0xBC49, .start = 17053, .len = 3 }, + .{ .cp = 0xBC4A, .start = 17056, .len = 3 }, + .{ .cp = 0xBC4B, .start = 17059, .len = 3 }, + .{ .cp = 0xBC4C, .start = 17062, .len = 2 }, + .{ .cp = 0xBC4D, .start = 17064, .len = 3 }, + .{ .cp = 0xBC4E, .start = 17067, .len = 3 }, + .{ .cp = 0xBC4F, .start = 17070, .len = 3 }, + .{ .cp = 0xBC50, .start = 17073, .len = 3 }, + .{ .cp = 0xBC51, .start = 17076, .len = 3 }, + .{ .cp = 0xBC52, .start = 17079, .len = 3 }, + .{ .cp = 0xBC53, .start = 17082, .len = 3 }, + .{ .cp = 0xBC54, .start = 17085, .len = 3 }, + .{ .cp = 0xBC55, .start = 17088, .len = 3 }, + .{ .cp = 0xBC56, .start = 17091, .len = 3 }, + .{ .cp = 0xBC57, .start = 17094, .len = 3 }, + .{ .cp = 0xBC58, .start = 17097, .len = 3 }, + .{ .cp = 0xBC59, .start = 17100, .len = 3 }, + .{ .cp = 0xBC5A, .start = 17103, .len = 3 }, + .{ .cp = 0xBC5B, .start = 17106, .len = 3 }, + .{ .cp = 0xBC5C, .start = 17109, .len = 3 }, + .{ .cp = 0xBC5D, .start = 17112, .len = 3 }, + .{ .cp = 0xBC5E, .start = 17115, .len = 3 }, + .{ .cp = 0xBC5F, .start = 17118, .len = 3 }, + .{ .cp = 0xBC60, .start = 17121, .len = 3 }, + .{ .cp = 0xBC61, .start = 17124, .len = 3 }, + .{ .cp = 0xBC62, .start = 17127, .len = 3 }, + .{ .cp = 0xBC63, .start = 17130, .len = 3 }, + .{ .cp = 0xBC64, .start = 17133, .len = 3 }, + .{ .cp = 0xBC65, .start = 17136, .len = 3 }, + .{ .cp = 0xBC66, .start = 17139, .len = 3 }, + .{ .cp = 0xBC67, .start = 17142, .len = 3 }, + .{ .cp = 0xBC68, .start = 17145, .len = 2 }, + .{ .cp = 0xBC69, .start = 17147, .len = 3 }, + .{ .cp = 0xBC6A, .start = 17150, .len = 3 }, + .{ .cp = 0xBC6B, .start = 17153, .len = 3 }, + .{ .cp = 0xBC6C, .start = 17156, .len = 3 }, + .{ .cp = 0xBC6D, .start = 17159, .len = 3 }, + .{ .cp = 0xBC6E, .start = 17162, .len = 3 }, + .{ .cp = 0xBC6F, .start = 17165, .len = 3 }, + .{ .cp = 0xBC70, .start = 17168, .len = 3 }, + .{ .cp = 0xBC71, .start = 17171, .len = 3 }, + .{ .cp = 0xBC72, .start = 17174, .len = 3 }, + .{ .cp = 0xBC73, .start = 17177, .len = 3 }, + .{ .cp = 0xBC74, .start = 17180, .len = 3 }, + .{ .cp = 0xBC75, .start = 17183, .len = 3 }, + .{ .cp = 0xBC76, .start = 17186, .len = 3 }, + .{ .cp = 0xBC77, .start = 17189, .len = 3 }, + .{ .cp = 0xBC78, .start = 17192, .len = 3 }, + .{ .cp = 0xBC79, .start = 17195, .len = 3 }, + .{ .cp = 0xBC7A, .start = 17198, .len = 3 }, + .{ .cp = 0xBC7B, .start = 17201, .len = 3 }, + .{ .cp = 0xBC7C, .start = 17204, .len = 3 }, + .{ .cp = 0xBC7D, .start = 17207, .len = 3 }, + .{ .cp = 0xBC7E, .start = 17210, .len = 3 }, + .{ .cp = 0xBC7F, .start = 17213, .len = 3 }, + .{ .cp = 0xBC80, .start = 17216, .len = 3 }, + .{ .cp = 0xBC81, .start = 17219, .len = 3 }, + .{ .cp = 0xBC82, .start = 17222, .len = 3 }, + .{ .cp = 0xBC83, .start = 17225, .len = 3 }, + .{ .cp = 0xBC84, .start = 17228, .len = 2 }, + .{ .cp = 0xBC85, .start = 17230, .len = 3 }, + .{ .cp = 0xBC86, .start = 17233, .len = 3 }, + .{ .cp = 0xBC87, .start = 17236, .len = 3 }, + .{ .cp = 0xBC88, .start = 17239, .len = 3 }, + .{ .cp = 0xBC89, .start = 17242, .len = 3 }, + .{ .cp = 0xBC8A, .start = 17245, .len = 3 }, + .{ .cp = 0xBC8B, .start = 17248, .len = 3 }, + .{ .cp = 0xBC8C, .start = 17251, .len = 3 }, + .{ .cp = 0xBC8D, .start = 17254, .len = 3 }, + .{ .cp = 0xBC8E, .start = 17257, .len = 3 }, + .{ .cp = 0xBC8F, .start = 17260, .len = 3 }, + .{ .cp = 0xBC90, .start = 17263, .len = 3 }, + .{ .cp = 0xBC91, .start = 17266, .len = 3 }, + .{ .cp = 0xBC92, .start = 17269, .len = 3 }, + .{ .cp = 0xBC93, .start = 17272, .len = 3 }, + .{ .cp = 0xBC94, .start = 17275, .len = 3 }, + .{ .cp = 0xBC95, .start = 17278, .len = 3 }, + .{ .cp = 0xBC96, .start = 17281, .len = 3 }, + .{ .cp = 0xBC97, .start = 17284, .len = 3 }, + .{ .cp = 0xBC98, .start = 17287, .len = 3 }, + .{ .cp = 0xBC99, .start = 17290, .len = 3 }, + .{ .cp = 0xBC9A, .start = 17293, .len = 3 }, + .{ .cp = 0xBC9B, .start = 17296, .len = 3 }, + .{ .cp = 0xBC9C, .start = 17299, .len = 3 }, + .{ .cp = 0xBC9D, .start = 17302, .len = 3 }, + .{ .cp = 0xBC9E, .start = 17305, .len = 3 }, + .{ .cp = 0xBC9F, .start = 17308, .len = 3 }, + .{ .cp = 0xBCA0, .start = 17311, .len = 2 }, + .{ .cp = 0xBCA1, .start = 17313, .len = 3 }, + .{ .cp = 0xBCA2, .start = 17316, .len = 3 }, + .{ .cp = 0xBCA3, .start = 17319, .len = 3 }, + .{ .cp = 0xBCA4, .start = 17322, .len = 3 }, + .{ .cp = 0xBCA5, .start = 17325, .len = 3 }, + .{ .cp = 0xBCA6, .start = 17328, .len = 3 }, + .{ .cp = 0xBCA7, .start = 17331, .len = 3 }, + .{ .cp = 0xBCA8, .start = 17334, .len = 3 }, + .{ .cp = 0xBCA9, .start = 17337, .len = 3 }, + .{ .cp = 0xBCAA, .start = 17340, .len = 3 }, + .{ .cp = 0xBCAB, .start = 17343, .len = 3 }, + .{ .cp = 0xBCAC, .start = 17346, .len = 3 }, + .{ .cp = 0xBCAD, .start = 17349, .len = 3 }, + .{ .cp = 0xBCAE, .start = 17352, .len = 3 }, + .{ .cp = 0xBCAF, .start = 17355, .len = 3 }, + .{ .cp = 0xBCB0, .start = 17358, .len = 3 }, + .{ .cp = 0xBCB1, .start = 17361, .len = 3 }, + .{ .cp = 0xBCB2, .start = 17364, .len = 3 }, + .{ .cp = 0xBCB3, .start = 17367, .len = 3 }, + .{ .cp = 0xBCB4, .start = 17370, .len = 3 }, + .{ .cp = 0xBCB5, .start = 17373, .len = 3 }, + .{ .cp = 0xBCB6, .start = 17376, .len = 3 }, + .{ .cp = 0xBCB7, .start = 17379, .len = 3 }, + .{ .cp = 0xBCB8, .start = 17382, .len = 3 }, + .{ .cp = 0xBCB9, .start = 17385, .len = 3 }, + .{ .cp = 0xBCBA, .start = 17388, .len = 3 }, + .{ .cp = 0xBCBB, .start = 17391, .len = 3 }, + .{ .cp = 0xBCBC, .start = 17394, .len = 2 }, + .{ .cp = 0xBCBD, .start = 17396, .len = 3 }, + .{ .cp = 0xBCBE, .start = 17399, .len = 3 }, + .{ .cp = 0xBCBF, .start = 17402, .len = 3 }, + .{ .cp = 0xBCC0, .start = 17405, .len = 3 }, + .{ .cp = 0xBCC1, .start = 17408, .len = 3 }, + .{ .cp = 0xBCC2, .start = 17411, .len = 3 }, + .{ .cp = 0xBCC3, .start = 17414, .len = 3 }, + .{ .cp = 0xBCC4, .start = 17417, .len = 3 }, + .{ .cp = 0xBCC5, .start = 17420, .len = 3 }, + .{ .cp = 0xBCC6, .start = 17423, .len = 3 }, + .{ .cp = 0xBCC7, .start = 17426, .len = 3 }, + .{ .cp = 0xBCC8, .start = 17429, .len = 3 }, + .{ .cp = 0xBCC9, .start = 17432, .len = 3 }, + .{ .cp = 0xBCCA, .start = 17435, .len = 3 }, + .{ .cp = 0xBCCB, .start = 17438, .len = 3 }, + .{ .cp = 0xBCCC, .start = 17441, .len = 3 }, + .{ .cp = 0xBCCD, .start = 17444, .len = 3 }, + .{ .cp = 0xBCCE, .start = 17447, .len = 3 }, + .{ .cp = 0xBCCF, .start = 17450, .len = 3 }, + .{ .cp = 0xBCD0, .start = 17453, .len = 3 }, + .{ .cp = 0xBCD1, .start = 17456, .len = 3 }, + .{ .cp = 0xBCD2, .start = 17459, .len = 3 }, + .{ .cp = 0xBCD3, .start = 17462, .len = 3 }, + .{ .cp = 0xBCD4, .start = 17465, .len = 3 }, + .{ .cp = 0xBCD5, .start = 17468, .len = 3 }, + .{ .cp = 0xBCD6, .start = 17471, .len = 3 }, + .{ .cp = 0xBCD7, .start = 17474, .len = 3 }, + .{ .cp = 0xBCD8, .start = 17477, .len = 2 }, + .{ .cp = 0xBCD9, .start = 17479, .len = 3 }, + .{ .cp = 0xBCDA, .start = 17482, .len = 3 }, + .{ .cp = 0xBCDB, .start = 17485, .len = 3 }, + .{ .cp = 0xBCDC, .start = 17488, .len = 3 }, + .{ .cp = 0xBCDD, .start = 17491, .len = 3 }, + .{ .cp = 0xBCDE, .start = 17494, .len = 3 }, + .{ .cp = 0xBCDF, .start = 17497, .len = 3 }, + .{ .cp = 0xBCE0, .start = 17500, .len = 3 }, + .{ .cp = 0xBCE1, .start = 17503, .len = 3 }, + .{ .cp = 0xBCE2, .start = 17506, .len = 3 }, + .{ .cp = 0xBCE3, .start = 17509, .len = 3 }, + .{ .cp = 0xBCE4, .start = 17512, .len = 3 }, + .{ .cp = 0xBCE5, .start = 17515, .len = 3 }, + .{ .cp = 0xBCE6, .start = 17518, .len = 3 }, + .{ .cp = 0xBCE7, .start = 17521, .len = 3 }, + .{ .cp = 0xBCE8, .start = 17524, .len = 3 }, + .{ .cp = 0xBCE9, .start = 17527, .len = 3 }, + .{ .cp = 0xBCEA, .start = 17530, .len = 3 }, + .{ .cp = 0xBCEB, .start = 17533, .len = 3 }, + .{ .cp = 0xBCEC, .start = 17536, .len = 3 }, + .{ .cp = 0xBCED, .start = 17539, .len = 3 }, + .{ .cp = 0xBCEE, .start = 17542, .len = 3 }, + .{ .cp = 0xBCEF, .start = 17545, .len = 3 }, + .{ .cp = 0xBCF0, .start = 17548, .len = 3 }, + .{ .cp = 0xBCF1, .start = 17551, .len = 3 }, + .{ .cp = 0xBCF2, .start = 17554, .len = 3 }, + .{ .cp = 0xBCF3, .start = 17557, .len = 3 }, + .{ .cp = 0xBCF4, .start = 17560, .len = 2 }, + .{ .cp = 0xBCF5, .start = 17562, .len = 3 }, + .{ .cp = 0xBCF6, .start = 17565, .len = 3 }, + .{ .cp = 0xBCF7, .start = 17568, .len = 3 }, + .{ .cp = 0xBCF8, .start = 17571, .len = 3 }, + .{ .cp = 0xBCF9, .start = 17574, .len = 3 }, + .{ .cp = 0xBCFA, .start = 17577, .len = 3 }, + .{ .cp = 0xBCFB, .start = 17580, .len = 3 }, + .{ .cp = 0xBCFC, .start = 17583, .len = 3 }, + .{ .cp = 0xBCFD, .start = 17586, .len = 3 }, + .{ .cp = 0xBCFE, .start = 17589, .len = 3 }, + .{ .cp = 0xBCFF, .start = 17592, .len = 3 }, + .{ .cp = 0xBD00, .start = 17595, .len = 3 }, + .{ .cp = 0xBD01, .start = 17598, .len = 3 }, + .{ .cp = 0xBD02, .start = 17601, .len = 3 }, + .{ .cp = 0xBD03, .start = 17604, .len = 3 }, + .{ .cp = 0xBD04, .start = 17607, .len = 3 }, + .{ .cp = 0xBD05, .start = 17610, .len = 3 }, + .{ .cp = 0xBD06, .start = 17613, .len = 3 }, + .{ .cp = 0xBD07, .start = 17616, .len = 3 }, + .{ .cp = 0xBD08, .start = 17619, .len = 3 }, + .{ .cp = 0xBD09, .start = 17622, .len = 3 }, + .{ .cp = 0xBD0A, .start = 17625, .len = 3 }, + .{ .cp = 0xBD0B, .start = 17628, .len = 3 }, + .{ .cp = 0xBD0C, .start = 17631, .len = 3 }, + .{ .cp = 0xBD0D, .start = 17634, .len = 3 }, + .{ .cp = 0xBD0E, .start = 17637, .len = 3 }, + .{ .cp = 0xBD0F, .start = 17640, .len = 3 }, + .{ .cp = 0xBD10, .start = 17643, .len = 2 }, + .{ .cp = 0xBD11, .start = 17645, .len = 3 }, + .{ .cp = 0xBD12, .start = 17648, .len = 3 }, + .{ .cp = 0xBD13, .start = 17651, .len = 3 }, + .{ .cp = 0xBD14, .start = 17654, .len = 3 }, + .{ .cp = 0xBD15, .start = 17657, .len = 3 }, + .{ .cp = 0xBD16, .start = 17660, .len = 3 }, + .{ .cp = 0xBD17, .start = 17663, .len = 3 }, + .{ .cp = 0xBD18, .start = 17666, .len = 3 }, + .{ .cp = 0xBD19, .start = 17669, .len = 3 }, + .{ .cp = 0xBD1A, .start = 17672, .len = 3 }, + .{ .cp = 0xBD1B, .start = 17675, .len = 3 }, + .{ .cp = 0xBD1C, .start = 17678, .len = 3 }, + .{ .cp = 0xBD1D, .start = 17681, .len = 3 }, + .{ .cp = 0xBD1E, .start = 17684, .len = 3 }, + .{ .cp = 0xBD1F, .start = 17687, .len = 3 }, + .{ .cp = 0xBD20, .start = 17690, .len = 3 }, + .{ .cp = 0xBD21, .start = 17693, .len = 3 }, + .{ .cp = 0xBD22, .start = 17696, .len = 3 }, + .{ .cp = 0xBD23, .start = 17699, .len = 3 }, + .{ .cp = 0xBD24, .start = 17702, .len = 3 }, + .{ .cp = 0xBD25, .start = 17705, .len = 3 }, + .{ .cp = 0xBD26, .start = 17708, .len = 3 }, + .{ .cp = 0xBD27, .start = 17711, .len = 3 }, + .{ .cp = 0xBD28, .start = 17714, .len = 3 }, + .{ .cp = 0xBD29, .start = 17717, .len = 3 }, + .{ .cp = 0xBD2A, .start = 17720, .len = 3 }, + .{ .cp = 0xBD2B, .start = 17723, .len = 3 }, + .{ .cp = 0xBD2C, .start = 17726, .len = 2 }, + .{ .cp = 0xBD2D, .start = 17728, .len = 3 }, + .{ .cp = 0xBD2E, .start = 17731, .len = 3 }, + .{ .cp = 0xBD2F, .start = 17734, .len = 3 }, + .{ .cp = 0xBD30, .start = 17737, .len = 3 }, + .{ .cp = 0xBD31, .start = 17740, .len = 3 }, + .{ .cp = 0xBD32, .start = 17743, .len = 3 }, + .{ .cp = 0xBD33, .start = 17746, .len = 3 }, + .{ .cp = 0xBD34, .start = 17749, .len = 3 }, + .{ .cp = 0xBD35, .start = 17752, .len = 3 }, + .{ .cp = 0xBD36, .start = 17755, .len = 3 }, + .{ .cp = 0xBD37, .start = 17758, .len = 3 }, + .{ .cp = 0xBD38, .start = 17761, .len = 3 }, + .{ .cp = 0xBD39, .start = 17764, .len = 3 }, + .{ .cp = 0xBD3A, .start = 17767, .len = 3 }, + .{ .cp = 0xBD3B, .start = 17770, .len = 3 }, + .{ .cp = 0xBD3C, .start = 17773, .len = 3 }, + .{ .cp = 0xBD3D, .start = 17776, .len = 3 }, + .{ .cp = 0xBD3E, .start = 17779, .len = 3 }, + .{ .cp = 0xBD3F, .start = 17782, .len = 3 }, + .{ .cp = 0xBD40, .start = 17785, .len = 3 }, + .{ .cp = 0xBD41, .start = 17788, .len = 3 }, + .{ .cp = 0xBD42, .start = 17791, .len = 3 }, + .{ .cp = 0xBD43, .start = 17794, .len = 3 }, + .{ .cp = 0xBD44, .start = 17797, .len = 3 }, + .{ .cp = 0xBD45, .start = 17800, .len = 3 }, + .{ .cp = 0xBD46, .start = 17803, .len = 3 }, + .{ .cp = 0xBD47, .start = 17806, .len = 3 }, + .{ .cp = 0xBD48, .start = 17809, .len = 2 }, + .{ .cp = 0xBD49, .start = 17811, .len = 3 }, + .{ .cp = 0xBD4A, .start = 17814, .len = 3 }, + .{ .cp = 0xBD4B, .start = 17817, .len = 3 }, + .{ .cp = 0xBD4C, .start = 17820, .len = 3 }, + .{ .cp = 0xBD4D, .start = 17823, .len = 3 }, + .{ .cp = 0xBD4E, .start = 17826, .len = 3 }, + .{ .cp = 0xBD4F, .start = 17829, .len = 3 }, + .{ .cp = 0xBD50, .start = 17832, .len = 3 }, + .{ .cp = 0xBD51, .start = 17835, .len = 3 }, + .{ .cp = 0xBD52, .start = 17838, .len = 3 }, + .{ .cp = 0xBD53, .start = 17841, .len = 3 }, + .{ .cp = 0xBD54, .start = 17844, .len = 3 }, + .{ .cp = 0xBD55, .start = 17847, .len = 3 }, + .{ .cp = 0xBD56, .start = 17850, .len = 3 }, + .{ .cp = 0xBD57, .start = 17853, .len = 3 }, + .{ .cp = 0xBD58, .start = 17856, .len = 3 }, + .{ .cp = 0xBD59, .start = 17859, .len = 3 }, + .{ .cp = 0xBD5A, .start = 17862, .len = 3 }, + .{ .cp = 0xBD5B, .start = 17865, .len = 3 }, + .{ .cp = 0xBD5C, .start = 17868, .len = 3 }, + .{ .cp = 0xBD5D, .start = 17871, .len = 3 }, + .{ .cp = 0xBD5E, .start = 17874, .len = 3 }, + .{ .cp = 0xBD5F, .start = 17877, .len = 3 }, + .{ .cp = 0xBD60, .start = 17880, .len = 3 }, + .{ .cp = 0xBD61, .start = 17883, .len = 3 }, + .{ .cp = 0xBD62, .start = 17886, .len = 3 }, + .{ .cp = 0xBD63, .start = 17889, .len = 3 }, + .{ .cp = 0xBD64, .start = 17892, .len = 2 }, + .{ .cp = 0xBD65, .start = 17894, .len = 3 }, + .{ .cp = 0xBD66, .start = 17897, .len = 3 }, + .{ .cp = 0xBD67, .start = 17900, .len = 3 }, + .{ .cp = 0xBD68, .start = 17903, .len = 3 }, + .{ .cp = 0xBD69, .start = 17906, .len = 3 }, + .{ .cp = 0xBD6A, .start = 17909, .len = 3 }, + .{ .cp = 0xBD6B, .start = 17912, .len = 3 }, + .{ .cp = 0xBD6C, .start = 17915, .len = 3 }, + .{ .cp = 0xBD6D, .start = 17918, .len = 3 }, + .{ .cp = 0xBD6E, .start = 17921, .len = 3 }, + .{ .cp = 0xBD6F, .start = 17924, .len = 3 }, + .{ .cp = 0xBD70, .start = 17927, .len = 3 }, + .{ .cp = 0xBD71, .start = 17930, .len = 3 }, + .{ .cp = 0xBD72, .start = 17933, .len = 3 }, + .{ .cp = 0xBD73, .start = 17936, .len = 3 }, + .{ .cp = 0xBD74, .start = 17939, .len = 3 }, + .{ .cp = 0xBD75, .start = 17942, .len = 3 }, + .{ .cp = 0xBD76, .start = 17945, .len = 3 }, + .{ .cp = 0xBD77, .start = 17948, .len = 3 }, + .{ .cp = 0xBD78, .start = 17951, .len = 3 }, + .{ .cp = 0xBD79, .start = 17954, .len = 3 }, + .{ .cp = 0xBD7A, .start = 17957, .len = 3 }, + .{ .cp = 0xBD7B, .start = 17960, .len = 3 }, + .{ .cp = 0xBD7C, .start = 17963, .len = 3 }, + .{ .cp = 0xBD7D, .start = 17966, .len = 3 }, + .{ .cp = 0xBD7E, .start = 17969, .len = 3 }, + .{ .cp = 0xBD7F, .start = 17972, .len = 3 }, + .{ .cp = 0xBD80, .start = 17975, .len = 2 }, + .{ .cp = 0xBD81, .start = 17977, .len = 3 }, + .{ .cp = 0xBD82, .start = 17980, .len = 3 }, + .{ .cp = 0xBD83, .start = 17983, .len = 3 }, + .{ .cp = 0xBD84, .start = 17986, .len = 3 }, + .{ .cp = 0xBD85, .start = 17989, .len = 3 }, + .{ .cp = 0xBD86, .start = 17992, .len = 3 }, + .{ .cp = 0xBD87, .start = 17995, .len = 3 }, + .{ .cp = 0xBD88, .start = 17998, .len = 3 }, + .{ .cp = 0xBD89, .start = 18001, .len = 3 }, + .{ .cp = 0xBD8A, .start = 18004, .len = 3 }, + .{ .cp = 0xBD8B, .start = 18007, .len = 3 }, + .{ .cp = 0xBD8C, .start = 18010, .len = 3 }, + .{ .cp = 0xBD8D, .start = 18013, .len = 3 }, + .{ .cp = 0xBD8E, .start = 18016, .len = 3 }, + .{ .cp = 0xBD8F, .start = 18019, .len = 3 }, + .{ .cp = 0xBD90, .start = 18022, .len = 3 }, + .{ .cp = 0xBD91, .start = 18025, .len = 3 }, + .{ .cp = 0xBD92, .start = 18028, .len = 3 }, + .{ .cp = 0xBD93, .start = 18031, .len = 3 }, + .{ .cp = 0xBD94, .start = 18034, .len = 3 }, + .{ .cp = 0xBD95, .start = 18037, .len = 3 }, + .{ .cp = 0xBD96, .start = 18040, .len = 3 }, + .{ .cp = 0xBD97, .start = 18043, .len = 3 }, + .{ .cp = 0xBD98, .start = 18046, .len = 3 }, + .{ .cp = 0xBD99, .start = 18049, .len = 3 }, + .{ .cp = 0xBD9A, .start = 18052, .len = 3 }, + .{ .cp = 0xBD9B, .start = 18055, .len = 3 }, + .{ .cp = 0xBD9C, .start = 18058, .len = 2 }, + .{ .cp = 0xBD9D, .start = 18060, .len = 3 }, + .{ .cp = 0xBD9E, .start = 18063, .len = 3 }, + .{ .cp = 0xBD9F, .start = 18066, .len = 3 }, + .{ .cp = 0xBDA0, .start = 18069, .len = 3 }, + .{ .cp = 0xBDA1, .start = 18072, .len = 3 }, + .{ .cp = 0xBDA2, .start = 18075, .len = 3 }, + .{ .cp = 0xBDA3, .start = 18078, .len = 3 }, + .{ .cp = 0xBDA4, .start = 18081, .len = 3 }, + .{ .cp = 0xBDA5, .start = 18084, .len = 3 }, + .{ .cp = 0xBDA6, .start = 18087, .len = 3 }, + .{ .cp = 0xBDA7, .start = 18090, .len = 3 }, + .{ .cp = 0xBDA8, .start = 18093, .len = 3 }, + .{ .cp = 0xBDA9, .start = 18096, .len = 3 }, + .{ .cp = 0xBDAA, .start = 18099, .len = 3 }, + .{ .cp = 0xBDAB, .start = 18102, .len = 3 }, + .{ .cp = 0xBDAC, .start = 18105, .len = 3 }, + .{ .cp = 0xBDAD, .start = 18108, .len = 3 }, + .{ .cp = 0xBDAE, .start = 18111, .len = 3 }, + .{ .cp = 0xBDAF, .start = 18114, .len = 3 }, + .{ .cp = 0xBDB0, .start = 18117, .len = 3 }, + .{ .cp = 0xBDB1, .start = 18120, .len = 3 }, + .{ .cp = 0xBDB2, .start = 18123, .len = 3 }, + .{ .cp = 0xBDB3, .start = 18126, .len = 3 }, + .{ .cp = 0xBDB4, .start = 18129, .len = 3 }, + .{ .cp = 0xBDB5, .start = 18132, .len = 3 }, + .{ .cp = 0xBDB6, .start = 18135, .len = 3 }, + .{ .cp = 0xBDB7, .start = 18138, .len = 3 }, + .{ .cp = 0xBDB8, .start = 18141, .len = 2 }, + .{ .cp = 0xBDB9, .start = 18143, .len = 3 }, + .{ .cp = 0xBDBA, .start = 18146, .len = 3 }, + .{ .cp = 0xBDBB, .start = 18149, .len = 3 }, + .{ .cp = 0xBDBC, .start = 18152, .len = 3 }, + .{ .cp = 0xBDBD, .start = 18155, .len = 3 }, + .{ .cp = 0xBDBE, .start = 18158, .len = 3 }, + .{ .cp = 0xBDBF, .start = 18161, .len = 3 }, + .{ .cp = 0xBDC0, .start = 18164, .len = 3 }, + .{ .cp = 0xBDC1, .start = 18167, .len = 3 }, + .{ .cp = 0xBDC2, .start = 18170, .len = 3 }, + .{ .cp = 0xBDC3, .start = 18173, .len = 3 }, + .{ .cp = 0xBDC4, .start = 18176, .len = 3 }, + .{ .cp = 0xBDC5, .start = 18179, .len = 3 }, + .{ .cp = 0xBDC6, .start = 18182, .len = 3 }, + .{ .cp = 0xBDC7, .start = 18185, .len = 3 }, + .{ .cp = 0xBDC8, .start = 18188, .len = 3 }, + .{ .cp = 0xBDC9, .start = 18191, .len = 3 }, + .{ .cp = 0xBDCA, .start = 18194, .len = 3 }, + .{ .cp = 0xBDCB, .start = 18197, .len = 3 }, + .{ .cp = 0xBDCC, .start = 18200, .len = 3 }, + .{ .cp = 0xBDCD, .start = 18203, .len = 3 }, + .{ .cp = 0xBDCE, .start = 18206, .len = 3 }, + .{ .cp = 0xBDCF, .start = 18209, .len = 3 }, + .{ .cp = 0xBDD0, .start = 18212, .len = 3 }, + .{ .cp = 0xBDD1, .start = 18215, .len = 3 }, + .{ .cp = 0xBDD2, .start = 18218, .len = 3 }, + .{ .cp = 0xBDD3, .start = 18221, .len = 3 }, + .{ .cp = 0xBDD4, .start = 18224, .len = 2 }, + .{ .cp = 0xBDD5, .start = 18226, .len = 3 }, + .{ .cp = 0xBDD6, .start = 18229, .len = 3 }, + .{ .cp = 0xBDD7, .start = 18232, .len = 3 }, + .{ .cp = 0xBDD8, .start = 18235, .len = 3 }, + .{ .cp = 0xBDD9, .start = 18238, .len = 3 }, + .{ .cp = 0xBDDA, .start = 18241, .len = 3 }, + .{ .cp = 0xBDDB, .start = 18244, .len = 3 }, + .{ .cp = 0xBDDC, .start = 18247, .len = 3 }, + .{ .cp = 0xBDDD, .start = 18250, .len = 3 }, + .{ .cp = 0xBDDE, .start = 18253, .len = 3 }, + .{ .cp = 0xBDDF, .start = 18256, .len = 3 }, + .{ .cp = 0xBDE0, .start = 18259, .len = 3 }, + .{ .cp = 0xBDE1, .start = 18262, .len = 3 }, + .{ .cp = 0xBDE2, .start = 18265, .len = 3 }, + .{ .cp = 0xBDE3, .start = 18268, .len = 3 }, + .{ .cp = 0xBDE4, .start = 18271, .len = 3 }, + .{ .cp = 0xBDE5, .start = 18274, .len = 3 }, + .{ .cp = 0xBDE6, .start = 18277, .len = 3 }, + .{ .cp = 0xBDE7, .start = 18280, .len = 3 }, + .{ .cp = 0xBDE8, .start = 18283, .len = 3 }, + .{ .cp = 0xBDE9, .start = 18286, .len = 3 }, + .{ .cp = 0xBDEA, .start = 18289, .len = 3 }, + .{ .cp = 0xBDEB, .start = 18292, .len = 3 }, + .{ .cp = 0xBDEC, .start = 18295, .len = 3 }, + .{ .cp = 0xBDED, .start = 18298, .len = 3 }, + .{ .cp = 0xBDEE, .start = 18301, .len = 3 }, + .{ .cp = 0xBDEF, .start = 18304, .len = 3 }, + .{ .cp = 0xBDF0, .start = 18307, .len = 2 }, + .{ .cp = 0xBDF1, .start = 18309, .len = 3 }, + .{ .cp = 0xBDF2, .start = 18312, .len = 3 }, + .{ .cp = 0xBDF3, .start = 18315, .len = 3 }, + .{ .cp = 0xBDF4, .start = 18318, .len = 3 }, + .{ .cp = 0xBDF5, .start = 18321, .len = 3 }, + .{ .cp = 0xBDF6, .start = 18324, .len = 3 }, + .{ .cp = 0xBDF7, .start = 18327, .len = 3 }, + .{ .cp = 0xBDF8, .start = 18330, .len = 3 }, + .{ .cp = 0xBDF9, .start = 18333, .len = 3 }, + .{ .cp = 0xBDFA, .start = 18336, .len = 3 }, + .{ .cp = 0xBDFB, .start = 18339, .len = 3 }, + .{ .cp = 0xBDFC, .start = 18342, .len = 3 }, + .{ .cp = 0xBDFD, .start = 18345, .len = 3 }, + .{ .cp = 0xBDFE, .start = 18348, .len = 3 }, + .{ .cp = 0xBDFF, .start = 18351, .len = 3 }, + .{ .cp = 0xBE00, .start = 18354, .len = 3 }, + .{ .cp = 0xBE01, .start = 18357, .len = 3 }, + .{ .cp = 0xBE02, .start = 18360, .len = 3 }, + .{ .cp = 0xBE03, .start = 18363, .len = 3 }, + .{ .cp = 0xBE04, .start = 18366, .len = 3 }, + .{ .cp = 0xBE05, .start = 18369, .len = 3 }, + .{ .cp = 0xBE06, .start = 18372, .len = 3 }, + .{ .cp = 0xBE07, .start = 18375, .len = 3 }, + .{ .cp = 0xBE08, .start = 18378, .len = 3 }, + .{ .cp = 0xBE09, .start = 18381, .len = 3 }, + .{ .cp = 0xBE0A, .start = 18384, .len = 3 }, + .{ .cp = 0xBE0B, .start = 18387, .len = 3 }, + .{ .cp = 0xBE0C, .start = 18390, .len = 2 }, + .{ .cp = 0xBE0D, .start = 18392, .len = 3 }, + .{ .cp = 0xBE0E, .start = 18395, .len = 3 }, + .{ .cp = 0xBE0F, .start = 18398, .len = 3 }, + .{ .cp = 0xBE10, .start = 18401, .len = 3 }, + .{ .cp = 0xBE11, .start = 18404, .len = 3 }, + .{ .cp = 0xBE12, .start = 18407, .len = 3 }, + .{ .cp = 0xBE13, .start = 18410, .len = 3 }, + .{ .cp = 0xBE14, .start = 18413, .len = 3 }, + .{ .cp = 0xBE15, .start = 18416, .len = 3 }, + .{ .cp = 0xBE16, .start = 18419, .len = 3 }, + .{ .cp = 0xBE17, .start = 18422, .len = 3 }, + .{ .cp = 0xBE18, .start = 18425, .len = 3 }, + .{ .cp = 0xBE19, .start = 18428, .len = 3 }, + .{ .cp = 0xBE1A, .start = 18431, .len = 3 }, + .{ .cp = 0xBE1B, .start = 18434, .len = 3 }, + .{ .cp = 0xBE1C, .start = 18437, .len = 3 }, + .{ .cp = 0xBE1D, .start = 18440, .len = 3 }, + .{ .cp = 0xBE1E, .start = 18443, .len = 3 }, + .{ .cp = 0xBE1F, .start = 18446, .len = 3 }, + .{ .cp = 0xBE20, .start = 18449, .len = 3 }, + .{ .cp = 0xBE21, .start = 18452, .len = 3 }, + .{ .cp = 0xBE22, .start = 18455, .len = 3 }, + .{ .cp = 0xBE23, .start = 18458, .len = 3 }, + .{ .cp = 0xBE24, .start = 18461, .len = 3 }, + .{ .cp = 0xBE25, .start = 18464, .len = 3 }, + .{ .cp = 0xBE26, .start = 18467, .len = 3 }, + .{ .cp = 0xBE27, .start = 18470, .len = 3 }, + .{ .cp = 0xBE28, .start = 18473, .len = 2 }, + .{ .cp = 0xBE29, .start = 18475, .len = 3 }, + .{ .cp = 0xBE2A, .start = 18478, .len = 3 }, + .{ .cp = 0xBE2B, .start = 18481, .len = 3 }, + .{ .cp = 0xBE2C, .start = 18484, .len = 3 }, + .{ .cp = 0xBE2D, .start = 18487, .len = 3 }, + .{ .cp = 0xBE2E, .start = 18490, .len = 3 }, + .{ .cp = 0xBE2F, .start = 18493, .len = 3 }, + .{ .cp = 0xBE30, .start = 18496, .len = 3 }, + .{ .cp = 0xBE31, .start = 18499, .len = 3 }, + .{ .cp = 0xBE32, .start = 18502, .len = 3 }, + .{ .cp = 0xBE33, .start = 18505, .len = 3 }, + .{ .cp = 0xBE34, .start = 18508, .len = 3 }, + .{ .cp = 0xBE35, .start = 18511, .len = 3 }, + .{ .cp = 0xBE36, .start = 18514, .len = 3 }, + .{ .cp = 0xBE37, .start = 18517, .len = 3 }, + .{ .cp = 0xBE38, .start = 18520, .len = 3 }, + .{ .cp = 0xBE39, .start = 18523, .len = 3 }, + .{ .cp = 0xBE3A, .start = 18526, .len = 3 }, + .{ .cp = 0xBE3B, .start = 18529, .len = 3 }, + .{ .cp = 0xBE3C, .start = 18532, .len = 3 }, + .{ .cp = 0xBE3D, .start = 18535, .len = 3 }, + .{ .cp = 0xBE3E, .start = 18538, .len = 3 }, + .{ .cp = 0xBE3F, .start = 18541, .len = 3 }, + .{ .cp = 0xBE40, .start = 18544, .len = 3 }, + .{ .cp = 0xBE41, .start = 18547, .len = 3 }, + .{ .cp = 0xBE42, .start = 18550, .len = 3 }, + .{ .cp = 0xBE43, .start = 18553, .len = 3 }, + .{ .cp = 0xBE44, .start = 18556, .len = 2 }, + .{ .cp = 0xBE45, .start = 18558, .len = 3 }, + .{ .cp = 0xBE46, .start = 18561, .len = 3 }, + .{ .cp = 0xBE47, .start = 18564, .len = 3 }, + .{ .cp = 0xBE48, .start = 18567, .len = 3 }, + .{ .cp = 0xBE49, .start = 18570, .len = 3 }, + .{ .cp = 0xBE4A, .start = 18573, .len = 3 }, + .{ .cp = 0xBE4B, .start = 18576, .len = 3 }, + .{ .cp = 0xBE4C, .start = 18579, .len = 3 }, + .{ .cp = 0xBE4D, .start = 18582, .len = 3 }, + .{ .cp = 0xBE4E, .start = 18585, .len = 3 }, + .{ .cp = 0xBE4F, .start = 18588, .len = 3 }, + .{ .cp = 0xBE50, .start = 18591, .len = 3 }, + .{ .cp = 0xBE51, .start = 18594, .len = 3 }, + .{ .cp = 0xBE52, .start = 18597, .len = 3 }, + .{ .cp = 0xBE53, .start = 18600, .len = 3 }, + .{ .cp = 0xBE54, .start = 18603, .len = 3 }, + .{ .cp = 0xBE55, .start = 18606, .len = 3 }, + .{ .cp = 0xBE56, .start = 18609, .len = 3 }, + .{ .cp = 0xBE57, .start = 18612, .len = 3 }, + .{ .cp = 0xBE58, .start = 18615, .len = 3 }, + .{ .cp = 0xBE59, .start = 18618, .len = 3 }, + .{ .cp = 0xBE5A, .start = 18621, .len = 3 }, + .{ .cp = 0xBE5B, .start = 18624, .len = 3 }, + .{ .cp = 0xBE5C, .start = 18627, .len = 3 }, + .{ .cp = 0xBE5D, .start = 18630, .len = 3 }, + .{ .cp = 0xBE5E, .start = 18633, .len = 3 }, + .{ .cp = 0xBE5F, .start = 18636, .len = 3 }, + .{ .cp = 0xBE60, .start = 18639, .len = 2 }, + .{ .cp = 0xBE61, .start = 18641, .len = 3 }, + .{ .cp = 0xBE62, .start = 18644, .len = 3 }, + .{ .cp = 0xBE63, .start = 18647, .len = 3 }, + .{ .cp = 0xBE64, .start = 18650, .len = 3 }, + .{ .cp = 0xBE65, .start = 18653, .len = 3 }, + .{ .cp = 0xBE66, .start = 18656, .len = 3 }, + .{ .cp = 0xBE67, .start = 18659, .len = 3 }, + .{ .cp = 0xBE68, .start = 18662, .len = 3 }, + .{ .cp = 0xBE69, .start = 18665, .len = 3 }, + .{ .cp = 0xBE6A, .start = 18668, .len = 3 }, + .{ .cp = 0xBE6B, .start = 18671, .len = 3 }, + .{ .cp = 0xBE6C, .start = 18674, .len = 3 }, + .{ .cp = 0xBE6D, .start = 18677, .len = 3 }, + .{ .cp = 0xBE6E, .start = 18680, .len = 3 }, + .{ .cp = 0xBE6F, .start = 18683, .len = 3 }, + .{ .cp = 0xBE70, .start = 18686, .len = 3 }, + .{ .cp = 0xBE71, .start = 18689, .len = 3 }, + .{ .cp = 0xBE72, .start = 18692, .len = 3 }, + .{ .cp = 0xBE73, .start = 18695, .len = 3 }, + .{ .cp = 0xBE74, .start = 18698, .len = 3 }, + .{ .cp = 0xBE75, .start = 18701, .len = 3 }, + .{ .cp = 0xBE76, .start = 18704, .len = 3 }, + .{ .cp = 0xBE77, .start = 18707, .len = 3 }, + .{ .cp = 0xBE78, .start = 18710, .len = 3 }, + .{ .cp = 0xBE79, .start = 18713, .len = 3 }, + .{ .cp = 0xBE7A, .start = 18716, .len = 3 }, + .{ .cp = 0xBE7B, .start = 18719, .len = 3 }, + .{ .cp = 0xBE7C, .start = 18722, .len = 2 }, + .{ .cp = 0xBE7D, .start = 18724, .len = 3 }, + .{ .cp = 0xBE7E, .start = 18727, .len = 3 }, + .{ .cp = 0xBE7F, .start = 18730, .len = 3 }, + .{ .cp = 0xBE80, .start = 18733, .len = 3 }, + .{ .cp = 0xBE81, .start = 18736, .len = 3 }, + .{ .cp = 0xBE82, .start = 18739, .len = 3 }, + .{ .cp = 0xBE83, .start = 18742, .len = 3 }, + .{ .cp = 0xBE84, .start = 18745, .len = 3 }, + .{ .cp = 0xBE85, .start = 18748, .len = 3 }, + .{ .cp = 0xBE86, .start = 18751, .len = 3 }, + .{ .cp = 0xBE87, .start = 18754, .len = 3 }, + .{ .cp = 0xBE88, .start = 18757, .len = 3 }, + .{ .cp = 0xBE89, .start = 18760, .len = 3 }, + .{ .cp = 0xBE8A, .start = 18763, .len = 3 }, + .{ .cp = 0xBE8B, .start = 18766, .len = 3 }, + .{ .cp = 0xBE8C, .start = 18769, .len = 3 }, + .{ .cp = 0xBE8D, .start = 18772, .len = 3 }, + .{ .cp = 0xBE8E, .start = 18775, .len = 3 }, + .{ .cp = 0xBE8F, .start = 18778, .len = 3 }, + .{ .cp = 0xBE90, .start = 18781, .len = 3 }, + .{ .cp = 0xBE91, .start = 18784, .len = 3 }, + .{ .cp = 0xBE92, .start = 18787, .len = 3 }, + .{ .cp = 0xBE93, .start = 18790, .len = 3 }, + .{ .cp = 0xBE94, .start = 18793, .len = 3 }, + .{ .cp = 0xBE95, .start = 18796, .len = 3 }, + .{ .cp = 0xBE96, .start = 18799, .len = 3 }, + .{ .cp = 0xBE97, .start = 18802, .len = 3 }, + .{ .cp = 0xBE98, .start = 18805, .len = 2 }, + .{ .cp = 0xBE99, .start = 18807, .len = 3 }, + .{ .cp = 0xBE9A, .start = 18810, .len = 3 }, + .{ .cp = 0xBE9B, .start = 18813, .len = 3 }, + .{ .cp = 0xBE9C, .start = 18816, .len = 3 }, + .{ .cp = 0xBE9D, .start = 18819, .len = 3 }, + .{ .cp = 0xBE9E, .start = 18822, .len = 3 }, + .{ .cp = 0xBE9F, .start = 18825, .len = 3 }, + .{ .cp = 0xBEA0, .start = 18828, .len = 3 }, + .{ .cp = 0xBEA1, .start = 18831, .len = 3 }, + .{ .cp = 0xBEA2, .start = 18834, .len = 3 }, + .{ .cp = 0xBEA3, .start = 18837, .len = 3 }, + .{ .cp = 0xBEA4, .start = 18840, .len = 3 }, + .{ .cp = 0xBEA5, .start = 18843, .len = 3 }, + .{ .cp = 0xBEA6, .start = 18846, .len = 3 }, + .{ .cp = 0xBEA7, .start = 18849, .len = 3 }, + .{ .cp = 0xBEA8, .start = 18852, .len = 3 }, + .{ .cp = 0xBEA9, .start = 18855, .len = 3 }, + .{ .cp = 0xBEAA, .start = 18858, .len = 3 }, + .{ .cp = 0xBEAB, .start = 18861, .len = 3 }, + .{ .cp = 0xBEAC, .start = 18864, .len = 3 }, + .{ .cp = 0xBEAD, .start = 18867, .len = 3 }, + .{ .cp = 0xBEAE, .start = 18870, .len = 3 }, + .{ .cp = 0xBEAF, .start = 18873, .len = 3 }, + .{ .cp = 0xBEB0, .start = 18876, .len = 3 }, + .{ .cp = 0xBEB1, .start = 18879, .len = 3 }, + .{ .cp = 0xBEB2, .start = 18882, .len = 3 }, + .{ .cp = 0xBEB3, .start = 18885, .len = 3 }, + .{ .cp = 0xBEB4, .start = 18888, .len = 2 }, + .{ .cp = 0xBEB5, .start = 18890, .len = 3 }, + .{ .cp = 0xBEB6, .start = 18893, .len = 3 }, + .{ .cp = 0xBEB7, .start = 18896, .len = 3 }, + .{ .cp = 0xBEB8, .start = 18899, .len = 3 }, + .{ .cp = 0xBEB9, .start = 18902, .len = 3 }, + .{ .cp = 0xBEBA, .start = 18905, .len = 3 }, + .{ .cp = 0xBEBB, .start = 18908, .len = 3 }, + .{ .cp = 0xBEBC, .start = 18911, .len = 3 }, + .{ .cp = 0xBEBD, .start = 18914, .len = 3 }, + .{ .cp = 0xBEBE, .start = 18917, .len = 3 }, + .{ .cp = 0xBEBF, .start = 18920, .len = 3 }, + .{ .cp = 0xBEC0, .start = 18923, .len = 3 }, + .{ .cp = 0xBEC1, .start = 18926, .len = 3 }, + .{ .cp = 0xBEC2, .start = 18929, .len = 3 }, + .{ .cp = 0xBEC3, .start = 18932, .len = 3 }, + .{ .cp = 0xBEC4, .start = 18935, .len = 3 }, + .{ .cp = 0xBEC5, .start = 18938, .len = 3 }, + .{ .cp = 0xBEC6, .start = 18941, .len = 3 }, + .{ .cp = 0xBEC7, .start = 18944, .len = 3 }, + .{ .cp = 0xBEC8, .start = 18947, .len = 3 }, + .{ .cp = 0xBEC9, .start = 18950, .len = 3 }, + .{ .cp = 0xBECA, .start = 18953, .len = 3 }, + .{ .cp = 0xBECB, .start = 18956, .len = 3 }, + .{ .cp = 0xBECC, .start = 18959, .len = 3 }, + .{ .cp = 0xBECD, .start = 18962, .len = 3 }, + .{ .cp = 0xBECE, .start = 18965, .len = 3 }, + .{ .cp = 0xBECF, .start = 18968, .len = 3 }, + .{ .cp = 0xBED0, .start = 18971, .len = 2 }, + .{ .cp = 0xBED1, .start = 18973, .len = 3 }, + .{ .cp = 0xBED2, .start = 18976, .len = 3 }, + .{ .cp = 0xBED3, .start = 18979, .len = 3 }, + .{ .cp = 0xBED4, .start = 18982, .len = 3 }, + .{ .cp = 0xBED5, .start = 18985, .len = 3 }, + .{ .cp = 0xBED6, .start = 18988, .len = 3 }, + .{ .cp = 0xBED7, .start = 18991, .len = 3 }, + .{ .cp = 0xBED8, .start = 18994, .len = 3 }, + .{ .cp = 0xBED9, .start = 18997, .len = 3 }, + .{ .cp = 0xBEDA, .start = 19000, .len = 3 }, + .{ .cp = 0xBEDB, .start = 19003, .len = 3 }, + .{ .cp = 0xBEDC, .start = 19006, .len = 3 }, + .{ .cp = 0xBEDD, .start = 19009, .len = 3 }, + .{ .cp = 0xBEDE, .start = 19012, .len = 3 }, + .{ .cp = 0xBEDF, .start = 19015, .len = 3 }, + .{ .cp = 0xBEE0, .start = 19018, .len = 3 }, + .{ .cp = 0xBEE1, .start = 19021, .len = 3 }, + .{ .cp = 0xBEE2, .start = 19024, .len = 3 }, + .{ .cp = 0xBEE3, .start = 19027, .len = 3 }, + .{ .cp = 0xBEE4, .start = 19030, .len = 3 }, + .{ .cp = 0xBEE5, .start = 19033, .len = 3 }, + .{ .cp = 0xBEE6, .start = 19036, .len = 3 }, + .{ .cp = 0xBEE7, .start = 19039, .len = 3 }, + .{ .cp = 0xBEE8, .start = 19042, .len = 3 }, + .{ .cp = 0xBEE9, .start = 19045, .len = 3 }, + .{ .cp = 0xBEEA, .start = 19048, .len = 3 }, + .{ .cp = 0xBEEB, .start = 19051, .len = 3 }, + .{ .cp = 0xBEEC, .start = 19054, .len = 2 }, + .{ .cp = 0xBEED, .start = 19056, .len = 3 }, + .{ .cp = 0xBEEE, .start = 19059, .len = 3 }, + .{ .cp = 0xBEEF, .start = 19062, .len = 3 }, + .{ .cp = 0xBEF0, .start = 19065, .len = 3 }, + .{ .cp = 0xBEF1, .start = 19068, .len = 3 }, + .{ .cp = 0xBEF2, .start = 19071, .len = 3 }, + .{ .cp = 0xBEF3, .start = 19074, .len = 3 }, + .{ .cp = 0xBEF4, .start = 19077, .len = 3 }, + .{ .cp = 0xBEF5, .start = 19080, .len = 3 }, + .{ .cp = 0xBEF6, .start = 19083, .len = 3 }, + .{ .cp = 0xBEF7, .start = 19086, .len = 3 }, + .{ .cp = 0xBEF8, .start = 19089, .len = 3 }, + .{ .cp = 0xBEF9, .start = 19092, .len = 3 }, + .{ .cp = 0xBEFA, .start = 19095, .len = 3 }, + .{ .cp = 0xBEFB, .start = 19098, .len = 3 }, + .{ .cp = 0xBEFC, .start = 19101, .len = 3 }, + .{ .cp = 0xBEFD, .start = 19104, .len = 3 }, + .{ .cp = 0xBEFE, .start = 19107, .len = 3 }, + .{ .cp = 0xBEFF, .start = 19110, .len = 3 }, + .{ .cp = 0xBF00, .start = 19113, .len = 3 }, + .{ .cp = 0xBF01, .start = 19116, .len = 3 }, + .{ .cp = 0xBF02, .start = 19119, .len = 3 }, + .{ .cp = 0xBF03, .start = 19122, .len = 3 }, + .{ .cp = 0xBF04, .start = 19125, .len = 3 }, + .{ .cp = 0xBF05, .start = 19128, .len = 3 }, + .{ .cp = 0xBF06, .start = 19131, .len = 3 }, + .{ .cp = 0xBF07, .start = 19134, .len = 3 }, + .{ .cp = 0xBF08, .start = 19137, .len = 2 }, + .{ .cp = 0xBF09, .start = 19139, .len = 3 }, + .{ .cp = 0xBF0A, .start = 19142, .len = 3 }, + .{ .cp = 0xBF0B, .start = 19145, .len = 3 }, + .{ .cp = 0xBF0C, .start = 19148, .len = 3 }, + .{ .cp = 0xBF0D, .start = 19151, .len = 3 }, + .{ .cp = 0xBF0E, .start = 19154, .len = 3 }, + .{ .cp = 0xBF0F, .start = 19157, .len = 3 }, + .{ .cp = 0xBF10, .start = 19160, .len = 3 }, + .{ .cp = 0xBF11, .start = 19163, .len = 3 }, + .{ .cp = 0xBF12, .start = 19166, .len = 3 }, + .{ .cp = 0xBF13, .start = 19169, .len = 3 }, + .{ .cp = 0xBF14, .start = 19172, .len = 3 }, + .{ .cp = 0xBF15, .start = 19175, .len = 3 }, + .{ .cp = 0xBF16, .start = 19178, .len = 3 }, + .{ .cp = 0xBF17, .start = 19181, .len = 3 }, + .{ .cp = 0xBF18, .start = 19184, .len = 3 }, + .{ .cp = 0xBF19, .start = 19187, .len = 3 }, + .{ .cp = 0xBF1A, .start = 19190, .len = 3 }, + .{ .cp = 0xBF1B, .start = 19193, .len = 3 }, + .{ .cp = 0xBF1C, .start = 19196, .len = 3 }, + .{ .cp = 0xBF1D, .start = 19199, .len = 3 }, + .{ .cp = 0xBF1E, .start = 19202, .len = 3 }, + .{ .cp = 0xBF1F, .start = 19205, .len = 3 }, + .{ .cp = 0xBF20, .start = 19208, .len = 3 }, + .{ .cp = 0xBF21, .start = 19211, .len = 3 }, + .{ .cp = 0xBF22, .start = 19214, .len = 3 }, + .{ .cp = 0xBF23, .start = 19217, .len = 3 }, + .{ .cp = 0xBF24, .start = 19220, .len = 2 }, + .{ .cp = 0xBF25, .start = 19222, .len = 3 }, + .{ .cp = 0xBF26, .start = 19225, .len = 3 }, + .{ .cp = 0xBF27, .start = 19228, .len = 3 }, + .{ .cp = 0xBF28, .start = 19231, .len = 3 }, + .{ .cp = 0xBF29, .start = 19234, .len = 3 }, + .{ .cp = 0xBF2A, .start = 19237, .len = 3 }, + .{ .cp = 0xBF2B, .start = 19240, .len = 3 }, + .{ .cp = 0xBF2C, .start = 19243, .len = 3 }, + .{ .cp = 0xBF2D, .start = 19246, .len = 3 }, + .{ .cp = 0xBF2E, .start = 19249, .len = 3 }, + .{ .cp = 0xBF2F, .start = 19252, .len = 3 }, + .{ .cp = 0xBF30, .start = 19255, .len = 3 }, + .{ .cp = 0xBF31, .start = 19258, .len = 3 }, + .{ .cp = 0xBF32, .start = 19261, .len = 3 }, + .{ .cp = 0xBF33, .start = 19264, .len = 3 }, + .{ .cp = 0xBF34, .start = 19267, .len = 3 }, + .{ .cp = 0xBF35, .start = 19270, .len = 3 }, + .{ .cp = 0xBF36, .start = 19273, .len = 3 }, + .{ .cp = 0xBF37, .start = 19276, .len = 3 }, + .{ .cp = 0xBF38, .start = 19279, .len = 3 }, + .{ .cp = 0xBF39, .start = 19282, .len = 3 }, + .{ .cp = 0xBF3A, .start = 19285, .len = 3 }, + .{ .cp = 0xBF3B, .start = 19288, .len = 3 }, + .{ .cp = 0xBF3C, .start = 19291, .len = 3 }, + .{ .cp = 0xBF3D, .start = 19294, .len = 3 }, + .{ .cp = 0xBF3E, .start = 19297, .len = 3 }, + .{ .cp = 0xBF3F, .start = 19300, .len = 3 }, + .{ .cp = 0xBF40, .start = 19303, .len = 2 }, + .{ .cp = 0xBF41, .start = 19305, .len = 3 }, + .{ .cp = 0xBF42, .start = 19308, .len = 3 }, + .{ .cp = 0xBF43, .start = 19311, .len = 3 }, + .{ .cp = 0xBF44, .start = 19314, .len = 3 }, + .{ .cp = 0xBF45, .start = 19317, .len = 3 }, + .{ .cp = 0xBF46, .start = 19320, .len = 3 }, + .{ .cp = 0xBF47, .start = 19323, .len = 3 }, + .{ .cp = 0xBF48, .start = 19326, .len = 3 }, + .{ .cp = 0xBF49, .start = 19329, .len = 3 }, + .{ .cp = 0xBF4A, .start = 19332, .len = 3 }, + .{ .cp = 0xBF4B, .start = 19335, .len = 3 }, + .{ .cp = 0xBF4C, .start = 19338, .len = 3 }, + .{ .cp = 0xBF4D, .start = 19341, .len = 3 }, + .{ .cp = 0xBF4E, .start = 19344, .len = 3 }, + .{ .cp = 0xBF4F, .start = 19347, .len = 3 }, + .{ .cp = 0xBF50, .start = 19350, .len = 3 }, + .{ .cp = 0xBF51, .start = 19353, .len = 3 }, + .{ .cp = 0xBF52, .start = 19356, .len = 3 }, + .{ .cp = 0xBF53, .start = 19359, .len = 3 }, + .{ .cp = 0xBF54, .start = 19362, .len = 3 }, + .{ .cp = 0xBF55, .start = 19365, .len = 3 }, + .{ .cp = 0xBF56, .start = 19368, .len = 3 }, + .{ .cp = 0xBF57, .start = 19371, .len = 3 }, + .{ .cp = 0xBF58, .start = 19374, .len = 3 }, + .{ .cp = 0xBF59, .start = 19377, .len = 3 }, + .{ .cp = 0xBF5A, .start = 19380, .len = 3 }, + .{ .cp = 0xBF5B, .start = 19383, .len = 3 }, + .{ .cp = 0xBF5C, .start = 19386, .len = 2 }, + .{ .cp = 0xBF5D, .start = 19388, .len = 3 }, + .{ .cp = 0xBF5E, .start = 19391, .len = 3 }, + .{ .cp = 0xBF5F, .start = 19394, .len = 3 }, + .{ .cp = 0xBF60, .start = 19397, .len = 3 }, + .{ .cp = 0xBF61, .start = 19400, .len = 3 }, + .{ .cp = 0xBF62, .start = 19403, .len = 3 }, + .{ .cp = 0xBF63, .start = 19406, .len = 3 }, + .{ .cp = 0xBF64, .start = 19409, .len = 3 }, + .{ .cp = 0xBF65, .start = 19412, .len = 3 }, + .{ .cp = 0xBF66, .start = 19415, .len = 3 }, + .{ .cp = 0xBF67, .start = 19418, .len = 3 }, + .{ .cp = 0xBF68, .start = 19421, .len = 3 }, + .{ .cp = 0xBF69, .start = 19424, .len = 3 }, + .{ .cp = 0xBF6A, .start = 19427, .len = 3 }, + .{ .cp = 0xBF6B, .start = 19430, .len = 3 }, + .{ .cp = 0xBF6C, .start = 19433, .len = 3 }, + .{ .cp = 0xBF6D, .start = 19436, .len = 3 }, + .{ .cp = 0xBF6E, .start = 19439, .len = 3 }, + .{ .cp = 0xBF6F, .start = 19442, .len = 3 }, + .{ .cp = 0xBF70, .start = 19445, .len = 3 }, + .{ .cp = 0xBF71, .start = 19448, .len = 3 }, + .{ .cp = 0xBF72, .start = 19451, .len = 3 }, + .{ .cp = 0xBF73, .start = 19454, .len = 3 }, + .{ .cp = 0xBF74, .start = 19457, .len = 3 }, + .{ .cp = 0xBF75, .start = 19460, .len = 3 }, + .{ .cp = 0xBF76, .start = 19463, .len = 3 }, + .{ .cp = 0xBF77, .start = 19466, .len = 3 }, + .{ .cp = 0xBF78, .start = 19469, .len = 2 }, + .{ .cp = 0xBF79, .start = 19471, .len = 3 }, + .{ .cp = 0xBF7A, .start = 19474, .len = 3 }, + .{ .cp = 0xBF7B, .start = 19477, .len = 3 }, + .{ .cp = 0xBF7C, .start = 19480, .len = 3 }, + .{ .cp = 0xBF7D, .start = 19483, .len = 3 }, + .{ .cp = 0xBF7E, .start = 19486, .len = 3 }, + .{ .cp = 0xBF7F, .start = 19489, .len = 3 }, + .{ .cp = 0xBF80, .start = 19492, .len = 3 }, + .{ .cp = 0xBF81, .start = 19495, .len = 3 }, + .{ .cp = 0xBF82, .start = 19498, .len = 3 }, + .{ .cp = 0xBF83, .start = 19501, .len = 3 }, + .{ .cp = 0xBF84, .start = 19504, .len = 3 }, + .{ .cp = 0xBF85, .start = 19507, .len = 3 }, + .{ .cp = 0xBF86, .start = 19510, .len = 3 }, + .{ .cp = 0xBF87, .start = 19513, .len = 3 }, + .{ .cp = 0xBF88, .start = 19516, .len = 3 }, + .{ .cp = 0xBF89, .start = 19519, .len = 3 }, + .{ .cp = 0xBF8A, .start = 19522, .len = 3 }, + .{ .cp = 0xBF8B, .start = 19525, .len = 3 }, + .{ .cp = 0xBF8C, .start = 19528, .len = 3 }, + .{ .cp = 0xBF8D, .start = 19531, .len = 3 }, + .{ .cp = 0xBF8E, .start = 19534, .len = 3 }, + .{ .cp = 0xBF8F, .start = 19537, .len = 3 }, + .{ .cp = 0xBF90, .start = 19540, .len = 3 }, + .{ .cp = 0xBF91, .start = 19543, .len = 3 }, + .{ .cp = 0xBF92, .start = 19546, .len = 3 }, + .{ .cp = 0xBF93, .start = 19549, .len = 3 }, + .{ .cp = 0xBF94, .start = 19552, .len = 2 }, + .{ .cp = 0xBF95, .start = 19554, .len = 3 }, + .{ .cp = 0xBF96, .start = 19557, .len = 3 }, + .{ .cp = 0xBF97, .start = 19560, .len = 3 }, + .{ .cp = 0xBF98, .start = 19563, .len = 3 }, + .{ .cp = 0xBF99, .start = 19566, .len = 3 }, + .{ .cp = 0xBF9A, .start = 19569, .len = 3 }, + .{ .cp = 0xBF9B, .start = 19572, .len = 3 }, + .{ .cp = 0xBF9C, .start = 19575, .len = 3 }, + .{ .cp = 0xBF9D, .start = 19578, .len = 3 }, + .{ .cp = 0xBF9E, .start = 19581, .len = 3 }, + .{ .cp = 0xBF9F, .start = 19584, .len = 3 }, + .{ .cp = 0xBFA0, .start = 19587, .len = 3 }, + .{ .cp = 0xBFA1, .start = 19590, .len = 3 }, + .{ .cp = 0xBFA2, .start = 19593, .len = 3 }, + .{ .cp = 0xBFA3, .start = 19596, .len = 3 }, + .{ .cp = 0xBFA4, .start = 19599, .len = 3 }, + .{ .cp = 0xBFA5, .start = 19602, .len = 3 }, + .{ .cp = 0xBFA6, .start = 19605, .len = 3 }, + .{ .cp = 0xBFA7, .start = 19608, .len = 3 }, + .{ .cp = 0xBFA8, .start = 19611, .len = 3 }, + .{ .cp = 0xBFA9, .start = 19614, .len = 3 }, + .{ .cp = 0xBFAA, .start = 19617, .len = 3 }, + .{ .cp = 0xBFAB, .start = 19620, .len = 3 }, + .{ .cp = 0xBFAC, .start = 19623, .len = 3 }, + .{ .cp = 0xBFAD, .start = 19626, .len = 3 }, + .{ .cp = 0xBFAE, .start = 19629, .len = 3 }, + .{ .cp = 0xBFAF, .start = 19632, .len = 3 }, + .{ .cp = 0xBFB0, .start = 19635, .len = 2 }, + .{ .cp = 0xBFB1, .start = 19637, .len = 3 }, + .{ .cp = 0xBFB2, .start = 19640, .len = 3 }, + .{ .cp = 0xBFB3, .start = 19643, .len = 3 }, + .{ .cp = 0xBFB4, .start = 19646, .len = 3 }, + .{ .cp = 0xBFB5, .start = 19649, .len = 3 }, + .{ .cp = 0xBFB6, .start = 19652, .len = 3 }, + .{ .cp = 0xBFB7, .start = 19655, .len = 3 }, + .{ .cp = 0xBFB8, .start = 19658, .len = 3 }, + .{ .cp = 0xBFB9, .start = 19661, .len = 3 }, + .{ .cp = 0xBFBA, .start = 19664, .len = 3 }, + .{ .cp = 0xBFBB, .start = 19667, .len = 3 }, + .{ .cp = 0xBFBC, .start = 19670, .len = 3 }, + .{ .cp = 0xBFBD, .start = 19673, .len = 3 }, + .{ .cp = 0xBFBE, .start = 19676, .len = 3 }, + .{ .cp = 0xBFBF, .start = 19679, .len = 3 }, + .{ .cp = 0xBFC0, .start = 19682, .len = 3 }, + .{ .cp = 0xBFC1, .start = 19685, .len = 3 }, + .{ .cp = 0xBFC2, .start = 19688, .len = 3 }, + .{ .cp = 0xBFC3, .start = 19691, .len = 3 }, + .{ .cp = 0xBFC4, .start = 19694, .len = 3 }, + .{ .cp = 0xBFC5, .start = 19697, .len = 3 }, + .{ .cp = 0xBFC6, .start = 19700, .len = 3 }, + .{ .cp = 0xBFC7, .start = 19703, .len = 3 }, + .{ .cp = 0xBFC8, .start = 19706, .len = 3 }, + .{ .cp = 0xBFC9, .start = 19709, .len = 3 }, + .{ .cp = 0xBFCA, .start = 19712, .len = 3 }, + .{ .cp = 0xBFCB, .start = 19715, .len = 3 }, + .{ .cp = 0xBFCC, .start = 19718, .len = 2 }, + .{ .cp = 0xBFCD, .start = 19720, .len = 3 }, + .{ .cp = 0xBFCE, .start = 19723, .len = 3 }, + .{ .cp = 0xBFCF, .start = 19726, .len = 3 }, + .{ .cp = 0xBFD0, .start = 19729, .len = 3 }, + .{ .cp = 0xBFD1, .start = 19732, .len = 3 }, + .{ .cp = 0xBFD2, .start = 19735, .len = 3 }, + .{ .cp = 0xBFD3, .start = 19738, .len = 3 }, + .{ .cp = 0xBFD4, .start = 19741, .len = 3 }, + .{ .cp = 0xBFD5, .start = 19744, .len = 3 }, + .{ .cp = 0xBFD6, .start = 19747, .len = 3 }, + .{ .cp = 0xBFD7, .start = 19750, .len = 3 }, + .{ .cp = 0xBFD8, .start = 19753, .len = 3 }, + .{ .cp = 0xBFD9, .start = 19756, .len = 3 }, + .{ .cp = 0xBFDA, .start = 19759, .len = 3 }, + .{ .cp = 0xBFDB, .start = 19762, .len = 3 }, + .{ .cp = 0xBFDC, .start = 19765, .len = 3 }, + .{ .cp = 0xBFDD, .start = 19768, .len = 3 }, + .{ .cp = 0xBFDE, .start = 19771, .len = 3 }, + .{ .cp = 0xBFDF, .start = 19774, .len = 3 }, + .{ .cp = 0xBFE0, .start = 19777, .len = 3 }, + .{ .cp = 0xBFE1, .start = 19780, .len = 3 }, + .{ .cp = 0xBFE2, .start = 19783, .len = 3 }, + .{ .cp = 0xBFE3, .start = 19786, .len = 3 }, + .{ .cp = 0xBFE4, .start = 19789, .len = 3 }, + .{ .cp = 0xBFE5, .start = 19792, .len = 3 }, + .{ .cp = 0xBFE6, .start = 19795, .len = 3 }, + .{ .cp = 0xBFE7, .start = 19798, .len = 3 }, + .{ .cp = 0xBFE8, .start = 19801, .len = 2 }, + .{ .cp = 0xBFE9, .start = 19803, .len = 3 }, + .{ .cp = 0xBFEA, .start = 19806, .len = 3 }, + .{ .cp = 0xBFEB, .start = 19809, .len = 3 }, + .{ .cp = 0xBFEC, .start = 19812, .len = 3 }, + .{ .cp = 0xBFED, .start = 19815, .len = 3 }, + .{ .cp = 0xBFEE, .start = 19818, .len = 3 }, + .{ .cp = 0xBFEF, .start = 19821, .len = 3 }, + .{ .cp = 0xBFF0, .start = 19824, .len = 3 }, + .{ .cp = 0xBFF1, .start = 19827, .len = 3 }, + .{ .cp = 0xBFF2, .start = 19830, .len = 3 }, + .{ .cp = 0xBFF3, .start = 19833, .len = 3 }, + .{ .cp = 0xBFF4, .start = 19836, .len = 3 }, + .{ .cp = 0xBFF5, .start = 19839, .len = 3 }, + .{ .cp = 0xBFF6, .start = 19842, .len = 3 }, + .{ .cp = 0xBFF7, .start = 19845, .len = 3 }, + .{ .cp = 0xBFF8, .start = 19848, .len = 3 }, + .{ .cp = 0xBFF9, .start = 19851, .len = 3 }, + .{ .cp = 0xBFFA, .start = 19854, .len = 3 }, + .{ .cp = 0xBFFB, .start = 19857, .len = 3 }, + .{ .cp = 0xBFFC, .start = 19860, .len = 3 }, + .{ .cp = 0xBFFD, .start = 19863, .len = 3 }, + .{ .cp = 0xBFFE, .start = 19866, .len = 3 }, + .{ .cp = 0xBFFF, .start = 19869, .len = 3 }, + .{ .cp = 0xC000, .start = 19872, .len = 3 }, + .{ .cp = 0xC001, .start = 19875, .len = 3 }, + .{ .cp = 0xC002, .start = 19878, .len = 3 }, + .{ .cp = 0xC003, .start = 19881, .len = 3 }, + .{ .cp = 0xC004, .start = 19884, .len = 2 }, + .{ .cp = 0xC005, .start = 19886, .len = 3 }, + .{ .cp = 0xC006, .start = 19889, .len = 3 }, + .{ .cp = 0xC007, .start = 19892, .len = 3 }, + .{ .cp = 0xC008, .start = 19895, .len = 3 }, + .{ .cp = 0xC009, .start = 19898, .len = 3 }, + .{ .cp = 0xC00A, .start = 19901, .len = 3 }, + .{ .cp = 0xC00B, .start = 19904, .len = 3 }, + .{ .cp = 0xC00C, .start = 19907, .len = 3 }, + .{ .cp = 0xC00D, .start = 19910, .len = 3 }, + .{ .cp = 0xC00E, .start = 19913, .len = 3 }, + .{ .cp = 0xC00F, .start = 19916, .len = 3 }, + .{ .cp = 0xC010, .start = 19919, .len = 3 }, + .{ .cp = 0xC011, .start = 19922, .len = 3 }, + .{ .cp = 0xC012, .start = 19925, .len = 3 }, + .{ .cp = 0xC013, .start = 19928, .len = 3 }, + .{ .cp = 0xC014, .start = 19931, .len = 3 }, + .{ .cp = 0xC015, .start = 19934, .len = 3 }, + .{ .cp = 0xC016, .start = 19937, .len = 3 }, + .{ .cp = 0xC017, .start = 19940, .len = 3 }, + .{ .cp = 0xC018, .start = 19943, .len = 3 }, + .{ .cp = 0xC019, .start = 19946, .len = 3 }, + .{ .cp = 0xC01A, .start = 19949, .len = 3 }, + .{ .cp = 0xC01B, .start = 19952, .len = 3 }, + .{ .cp = 0xC01C, .start = 19955, .len = 3 }, + .{ .cp = 0xC01D, .start = 19958, .len = 3 }, + .{ .cp = 0xC01E, .start = 19961, .len = 3 }, + .{ .cp = 0xC01F, .start = 19964, .len = 3 }, + .{ .cp = 0xC020, .start = 19967, .len = 2 }, + .{ .cp = 0xC021, .start = 19969, .len = 3 }, + .{ .cp = 0xC022, .start = 19972, .len = 3 }, + .{ .cp = 0xC023, .start = 19975, .len = 3 }, + .{ .cp = 0xC024, .start = 19978, .len = 3 }, + .{ .cp = 0xC025, .start = 19981, .len = 3 }, + .{ .cp = 0xC026, .start = 19984, .len = 3 }, + .{ .cp = 0xC027, .start = 19987, .len = 3 }, + .{ .cp = 0xC028, .start = 19990, .len = 3 }, + .{ .cp = 0xC029, .start = 19993, .len = 3 }, + .{ .cp = 0xC02A, .start = 19996, .len = 3 }, + .{ .cp = 0xC02B, .start = 19999, .len = 3 }, + .{ .cp = 0xC02C, .start = 20002, .len = 3 }, + .{ .cp = 0xC02D, .start = 20005, .len = 3 }, + .{ .cp = 0xC02E, .start = 20008, .len = 3 }, + .{ .cp = 0xC02F, .start = 20011, .len = 3 }, + .{ .cp = 0xC030, .start = 20014, .len = 3 }, + .{ .cp = 0xC031, .start = 20017, .len = 3 }, + .{ .cp = 0xC032, .start = 20020, .len = 3 }, + .{ .cp = 0xC033, .start = 20023, .len = 3 }, + .{ .cp = 0xC034, .start = 20026, .len = 3 }, + .{ .cp = 0xC035, .start = 20029, .len = 3 }, + .{ .cp = 0xC036, .start = 20032, .len = 3 }, + .{ .cp = 0xC037, .start = 20035, .len = 3 }, + .{ .cp = 0xC038, .start = 20038, .len = 3 }, + .{ .cp = 0xC039, .start = 20041, .len = 3 }, + .{ .cp = 0xC03A, .start = 20044, .len = 3 }, + .{ .cp = 0xC03B, .start = 20047, .len = 3 }, + .{ .cp = 0xC03C, .start = 20050, .len = 2 }, + .{ .cp = 0xC03D, .start = 20052, .len = 3 }, + .{ .cp = 0xC03E, .start = 20055, .len = 3 }, + .{ .cp = 0xC03F, .start = 20058, .len = 3 }, + .{ .cp = 0xC040, .start = 20061, .len = 3 }, + .{ .cp = 0xC041, .start = 20064, .len = 3 }, + .{ .cp = 0xC042, .start = 20067, .len = 3 }, + .{ .cp = 0xC043, .start = 20070, .len = 3 }, + .{ .cp = 0xC044, .start = 20073, .len = 3 }, + .{ .cp = 0xC045, .start = 20076, .len = 3 }, + .{ .cp = 0xC046, .start = 20079, .len = 3 }, + .{ .cp = 0xC047, .start = 20082, .len = 3 }, + .{ .cp = 0xC048, .start = 20085, .len = 3 }, + .{ .cp = 0xC049, .start = 20088, .len = 3 }, + .{ .cp = 0xC04A, .start = 20091, .len = 3 }, + .{ .cp = 0xC04B, .start = 20094, .len = 3 }, + .{ .cp = 0xC04C, .start = 20097, .len = 3 }, + .{ .cp = 0xC04D, .start = 20100, .len = 3 }, + .{ .cp = 0xC04E, .start = 20103, .len = 3 }, + .{ .cp = 0xC04F, .start = 20106, .len = 3 }, + .{ .cp = 0xC050, .start = 20109, .len = 3 }, + .{ .cp = 0xC051, .start = 20112, .len = 3 }, + .{ .cp = 0xC052, .start = 20115, .len = 3 }, + .{ .cp = 0xC053, .start = 20118, .len = 3 }, + .{ .cp = 0xC054, .start = 20121, .len = 3 }, + .{ .cp = 0xC055, .start = 20124, .len = 3 }, + .{ .cp = 0xC056, .start = 20127, .len = 3 }, + .{ .cp = 0xC057, .start = 20130, .len = 3 }, + .{ .cp = 0xC058, .start = 20133, .len = 2 }, + .{ .cp = 0xC059, .start = 20135, .len = 3 }, + .{ .cp = 0xC05A, .start = 20138, .len = 3 }, + .{ .cp = 0xC05B, .start = 20141, .len = 3 }, + .{ .cp = 0xC05C, .start = 20144, .len = 3 }, + .{ .cp = 0xC05D, .start = 20147, .len = 3 }, + .{ .cp = 0xC05E, .start = 20150, .len = 3 }, + .{ .cp = 0xC05F, .start = 20153, .len = 3 }, + .{ .cp = 0xC060, .start = 20156, .len = 3 }, + .{ .cp = 0xC061, .start = 20159, .len = 3 }, + .{ .cp = 0xC062, .start = 20162, .len = 3 }, + .{ .cp = 0xC063, .start = 20165, .len = 3 }, + .{ .cp = 0xC064, .start = 20168, .len = 3 }, + .{ .cp = 0xC065, .start = 20171, .len = 3 }, + .{ .cp = 0xC066, .start = 20174, .len = 3 }, + .{ .cp = 0xC067, .start = 20177, .len = 3 }, + .{ .cp = 0xC068, .start = 20180, .len = 3 }, + .{ .cp = 0xC069, .start = 20183, .len = 3 }, + .{ .cp = 0xC06A, .start = 20186, .len = 3 }, + .{ .cp = 0xC06B, .start = 20189, .len = 3 }, + .{ .cp = 0xC06C, .start = 20192, .len = 3 }, + .{ .cp = 0xC06D, .start = 20195, .len = 3 }, + .{ .cp = 0xC06E, .start = 20198, .len = 3 }, + .{ .cp = 0xC06F, .start = 20201, .len = 3 }, + .{ .cp = 0xC070, .start = 20204, .len = 3 }, + .{ .cp = 0xC071, .start = 20207, .len = 3 }, + .{ .cp = 0xC072, .start = 20210, .len = 3 }, + .{ .cp = 0xC073, .start = 20213, .len = 3 }, + .{ .cp = 0xC074, .start = 20216, .len = 2 }, + .{ .cp = 0xC075, .start = 20218, .len = 3 }, + .{ .cp = 0xC076, .start = 20221, .len = 3 }, + .{ .cp = 0xC077, .start = 20224, .len = 3 }, + .{ .cp = 0xC078, .start = 20227, .len = 3 }, + .{ .cp = 0xC079, .start = 20230, .len = 3 }, + .{ .cp = 0xC07A, .start = 20233, .len = 3 }, + .{ .cp = 0xC07B, .start = 20236, .len = 3 }, + .{ .cp = 0xC07C, .start = 20239, .len = 3 }, + .{ .cp = 0xC07D, .start = 20242, .len = 3 }, + .{ .cp = 0xC07E, .start = 20245, .len = 3 }, + .{ .cp = 0xC07F, .start = 20248, .len = 3 }, + .{ .cp = 0xC080, .start = 20251, .len = 3 }, + .{ .cp = 0xC081, .start = 20254, .len = 3 }, + .{ .cp = 0xC082, .start = 20257, .len = 3 }, + .{ .cp = 0xC083, .start = 20260, .len = 3 }, + .{ .cp = 0xC084, .start = 20263, .len = 3 }, + .{ .cp = 0xC085, .start = 20266, .len = 3 }, + .{ .cp = 0xC086, .start = 20269, .len = 3 }, + .{ .cp = 0xC087, .start = 20272, .len = 3 }, + .{ .cp = 0xC088, .start = 20275, .len = 3 }, + .{ .cp = 0xC089, .start = 20278, .len = 3 }, + .{ .cp = 0xC08A, .start = 20281, .len = 3 }, + .{ .cp = 0xC08B, .start = 20284, .len = 3 }, + .{ .cp = 0xC08C, .start = 20287, .len = 3 }, + .{ .cp = 0xC08D, .start = 20290, .len = 3 }, + .{ .cp = 0xC08E, .start = 20293, .len = 3 }, + .{ .cp = 0xC08F, .start = 20296, .len = 3 }, + .{ .cp = 0xC090, .start = 20299, .len = 2 }, + .{ .cp = 0xC091, .start = 20301, .len = 3 }, + .{ .cp = 0xC092, .start = 20304, .len = 3 }, + .{ .cp = 0xC093, .start = 20307, .len = 3 }, + .{ .cp = 0xC094, .start = 20310, .len = 3 }, + .{ .cp = 0xC095, .start = 20313, .len = 3 }, + .{ .cp = 0xC096, .start = 20316, .len = 3 }, + .{ .cp = 0xC097, .start = 20319, .len = 3 }, + .{ .cp = 0xC098, .start = 20322, .len = 3 }, + .{ .cp = 0xC099, .start = 20325, .len = 3 }, + .{ .cp = 0xC09A, .start = 20328, .len = 3 }, + .{ .cp = 0xC09B, .start = 20331, .len = 3 }, + .{ .cp = 0xC09C, .start = 20334, .len = 3 }, + .{ .cp = 0xC09D, .start = 20337, .len = 3 }, + .{ .cp = 0xC09E, .start = 20340, .len = 3 }, + .{ .cp = 0xC09F, .start = 20343, .len = 3 }, + .{ .cp = 0xC0A0, .start = 20346, .len = 3 }, + .{ .cp = 0xC0A1, .start = 20349, .len = 3 }, + .{ .cp = 0xC0A2, .start = 20352, .len = 3 }, + .{ .cp = 0xC0A3, .start = 20355, .len = 3 }, + .{ .cp = 0xC0A4, .start = 20358, .len = 3 }, + .{ .cp = 0xC0A5, .start = 20361, .len = 3 }, + .{ .cp = 0xC0A6, .start = 20364, .len = 3 }, + .{ .cp = 0xC0A7, .start = 20367, .len = 3 }, + .{ .cp = 0xC0A8, .start = 20370, .len = 3 }, + .{ .cp = 0xC0A9, .start = 20373, .len = 3 }, + .{ .cp = 0xC0AA, .start = 20376, .len = 3 }, + .{ .cp = 0xC0AB, .start = 20379, .len = 3 }, + .{ .cp = 0xC0AC, .start = 20382, .len = 2 }, + .{ .cp = 0xC0AD, .start = 20384, .len = 3 }, + .{ .cp = 0xC0AE, .start = 20387, .len = 3 }, + .{ .cp = 0xC0AF, .start = 20390, .len = 3 }, + .{ .cp = 0xC0B0, .start = 20393, .len = 3 }, + .{ .cp = 0xC0B1, .start = 20396, .len = 3 }, + .{ .cp = 0xC0B2, .start = 20399, .len = 3 }, + .{ .cp = 0xC0B3, .start = 20402, .len = 3 }, + .{ .cp = 0xC0B4, .start = 20405, .len = 3 }, + .{ .cp = 0xC0B5, .start = 20408, .len = 3 }, + .{ .cp = 0xC0B6, .start = 20411, .len = 3 }, + .{ .cp = 0xC0B7, .start = 20414, .len = 3 }, + .{ .cp = 0xC0B8, .start = 20417, .len = 3 }, + .{ .cp = 0xC0B9, .start = 20420, .len = 3 }, + .{ .cp = 0xC0BA, .start = 20423, .len = 3 }, + .{ .cp = 0xC0BB, .start = 20426, .len = 3 }, + .{ .cp = 0xC0BC, .start = 20429, .len = 3 }, + .{ .cp = 0xC0BD, .start = 20432, .len = 3 }, + .{ .cp = 0xC0BE, .start = 20435, .len = 3 }, + .{ .cp = 0xC0BF, .start = 20438, .len = 3 }, + .{ .cp = 0xC0C0, .start = 20441, .len = 3 }, + .{ .cp = 0xC0C1, .start = 20444, .len = 3 }, + .{ .cp = 0xC0C2, .start = 20447, .len = 3 }, + .{ .cp = 0xC0C3, .start = 20450, .len = 3 }, + .{ .cp = 0xC0C4, .start = 20453, .len = 3 }, + .{ .cp = 0xC0C5, .start = 20456, .len = 3 }, + .{ .cp = 0xC0C6, .start = 20459, .len = 3 }, + .{ .cp = 0xC0C7, .start = 20462, .len = 3 }, + .{ .cp = 0xC0C8, .start = 20465, .len = 2 }, + .{ .cp = 0xC0C9, .start = 20467, .len = 3 }, + .{ .cp = 0xC0CA, .start = 20470, .len = 3 }, + .{ .cp = 0xC0CB, .start = 20473, .len = 3 }, + .{ .cp = 0xC0CC, .start = 20476, .len = 3 }, + .{ .cp = 0xC0CD, .start = 20479, .len = 3 }, + .{ .cp = 0xC0CE, .start = 20482, .len = 3 }, + .{ .cp = 0xC0CF, .start = 20485, .len = 3 }, + .{ .cp = 0xC0D0, .start = 20488, .len = 3 }, + .{ .cp = 0xC0D1, .start = 20491, .len = 3 }, + .{ .cp = 0xC0D2, .start = 20494, .len = 3 }, + .{ .cp = 0xC0D3, .start = 20497, .len = 3 }, + .{ .cp = 0xC0D4, .start = 20500, .len = 3 }, + .{ .cp = 0xC0D5, .start = 20503, .len = 3 }, + .{ .cp = 0xC0D6, .start = 20506, .len = 3 }, + .{ .cp = 0xC0D7, .start = 20509, .len = 3 }, + .{ .cp = 0xC0D8, .start = 20512, .len = 3 }, + .{ .cp = 0xC0D9, .start = 20515, .len = 3 }, + .{ .cp = 0xC0DA, .start = 20518, .len = 3 }, + .{ .cp = 0xC0DB, .start = 20521, .len = 3 }, + .{ .cp = 0xC0DC, .start = 20524, .len = 3 }, + .{ .cp = 0xC0DD, .start = 20527, .len = 3 }, + .{ .cp = 0xC0DE, .start = 20530, .len = 3 }, + .{ .cp = 0xC0DF, .start = 20533, .len = 3 }, + .{ .cp = 0xC0E0, .start = 20536, .len = 3 }, + .{ .cp = 0xC0E1, .start = 20539, .len = 3 }, + .{ .cp = 0xC0E2, .start = 20542, .len = 3 }, + .{ .cp = 0xC0E3, .start = 20545, .len = 3 }, + .{ .cp = 0xC0E4, .start = 20548, .len = 2 }, + .{ .cp = 0xC0E5, .start = 20550, .len = 3 }, + .{ .cp = 0xC0E6, .start = 20553, .len = 3 }, + .{ .cp = 0xC0E7, .start = 20556, .len = 3 }, + .{ .cp = 0xC0E8, .start = 20559, .len = 3 }, + .{ .cp = 0xC0E9, .start = 20562, .len = 3 }, + .{ .cp = 0xC0EA, .start = 20565, .len = 3 }, + .{ .cp = 0xC0EB, .start = 20568, .len = 3 }, + .{ .cp = 0xC0EC, .start = 20571, .len = 3 }, + .{ .cp = 0xC0ED, .start = 20574, .len = 3 }, + .{ .cp = 0xC0EE, .start = 20577, .len = 3 }, + .{ .cp = 0xC0EF, .start = 20580, .len = 3 }, + .{ .cp = 0xC0F0, .start = 20583, .len = 3 }, + .{ .cp = 0xC0F1, .start = 20586, .len = 3 }, + .{ .cp = 0xC0F2, .start = 20589, .len = 3 }, + .{ .cp = 0xC0F3, .start = 20592, .len = 3 }, + .{ .cp = 0xC0F4, .start = 20595, .len = 3 }, + .{ .cp = 0xC0F5, .start = 20598, .len = 3 }, + .{ .cp = 0xC0F6, .start = 20601, .len = 3 }, + .{ .cp = 0xC0F7, .start = 20604, .len = 3 }, + .{ .cp = 0xC0F8, .start = 20607, .len = 3 }, + .{ .cp = 0xC0F9, .start = 20610, .len = 3 }, + .{ .cp = 0xC0FA, .start = 20613, .len = 3 }, + .{ .cp = 0xC0FB, .start = 20616, .len = 3 }, + .{ .cp = 0xC0FC, .start = 20619, .len = 3 }, + .{ .cp = 0xC0FD, .start = 20622, .len = 3 }, + .{ .cp = 0xC0FE, .start = 20625, .len = 3 }, + .{ .cp = 0xC0FF, .start = 20628, .len = 3 }, + .{ .cp = 0xC100, .start = 20631, .len = 2 }, + .{ .cp = 0xC101, .start = 20633, .len = 3 }, + .{ .cp = 0xC102, .start = 20636, .len = 3 }, + .{ .cp = 0xC103, .start = 20639, .len = 3 }, + .{ .cp = 0xC104, .start = 20642, .len = 3 }, + .{ .cp = 0xC105, .start = 20645, .len = 3 }, + .{ .cp = 0xC106, .start = 20648, .len = 3 }, + .{ .cp = 0xC107, .start = 20651, .len = 3 }, + .{ .cp = 0xC108, .start = 20654, .len = 3 }, + .{ .cp = 0xC109, .start = 20657, .len = 3 }, + .{ .cp = 0xC10A, .start = 20660, .len = 3 }, + .{ .cp = 0xC10B, .start = 20663, .len = 3 }, + .{ .cp = 0xC10C, .start = 20666, .len = 3 }, + .{ .cp = 0xC10D, .start = 20669, .len = 3 }, + .{ .cp = 0xC10E, .start = 20672, .len = 3 }, + .{ .cp = 0xC10F, .start = 20675, .len = 3 }, + .{ .cp = 0xC110, .start = 20678, .len = 3 }, + .{ .cp = 0xC111, .start = 20681, .len = 3 }, + .{ .cp = 0xC112, .start = 20684, .len = 3 }, + .{ .cp = 0xC113, .start = 20687, .len = 3 }, + .{ .cp = 0xC114, .start = 20690, .len = 3 }, + .{ .cp = 0xC115, .start = 20693, .len = 3 }, + .{ .cp = 0xC116, .start = 20696, .len = 3 }, + .{ .cp = 0xC117, .start = 20699, .len = 3 }, + .{ .cp = 0xC118, .start = 20702, .len = 3 }, + .{ .cp = 0xC119, .start = 20705, .len = 3 }, + .{ .cp = 0xC11A, .start = 20708, .len = 3 }, + .{ .cp = 0xC11B, .start = 20711, .len = 3 }, + .{ .cp = 0xC11C, .start = 20714, .len = 2 }, + .{ .cp = 0xC11D, .start = 20716, .len = 3 }, + .{ .cp = 0xC11E, .start = 20719, .len = 3 }, + .{ .cp = 0xC11F, .start = 20722, .len = 3 }, + .{ .cp = 0xC120, .start = 20725, .len = 3 }, + .{ .cp = 0xC121, .start = 20728, .len = 3 }, + .{ .cp = 0xC122, .start = 20731, .len = 3 }, + .{ .cp = 0xC123, .start = 20734, .len = 3 }, + .{ .cp = 0xC124, .start = 20737, .len = 3 }, + .{ .cp = 0xC125, .start = 20740, .len = 3 }, + .{ .cp = 0xC126, .start = 20743, .len = 3 }, + .{ .cp = 0xC127, .start = 20746, .len = 3 }, + .{ .cp = 0xC128, .start = 20749, .len = 3 }, + .{ .cp = 0xC129, .start = 20752, .len = 3 }, + .{ .cp = 0xC12A, .start = 20755, .len = 3 }, + .{ .cp = 0xC12B, .start = 20758, .len = 3 }, + .{ .cp = 0xC12C, .start = 20761, .len = 3 }, + .{ .cp = 0xC12D, .start = 20764, .len = 3 }, + .{ .cp = 0xC12E, .start = 20767, .len = 3 }, + .{ .cp = 0xC12F, .start = 20770, .len = 3 }, + .{ .cp = 0xC130, .start = 20773, .len = 3 }, + .{ .cp = 0xC131, .start = 20776, .len = 3 }, + .{ .cp = 0xC132, .start = 20779, .len = 3 }, + .{ .cp = 0xC133, .start = 20782, .len = 3 }, + .{ .cp = 0xC134, .start = 20785, .len = 3 }, + .{ .cp = 0xC135, .start = 20788, .len = 3 }, + .{ .cp = 0xC136, .start = 20791, .len = 3 }, + .{ .cp = 0xC137, .start = 20794, .len = 3 }, + .{ .cp = 0xC138, .start = 20797, .len = 2 }, + .{ .cp = 0xC139, .start = 20799, .len = 3 }, + .{ .cp = 0xC13A, .start = 20802, .len = 3 }, + .{ .cp = 0xC13B, .start = 20805, .len = 3 }, + .{ .cp = 0xC13C, .start = 20808, .len = 3 }, + .{ .cp = 0xC13D, .start = 20811, .len = 3 }, + .{ .cp = 0xC13E, .start = 20814, .len = 3 }, + .{ .cp = 0xC13F, .start = 20817, .len = 3 }, + .{ .cp = 0xC140, .start = 20820, .len = 3 }, + .{ .cp = 0xC141, .start = 20823, .len = 3 }, + .{ .cp = 0xC142, .start = 20826, .len = 3 }, + .{ .cp = 0xC143, .start = 20829, .len = 3 }, + .{ .cp = 0xC144, .start = 20832, .len = 3 }, + .{ .cp = 0xC145, .start = 20835, .len = 3 }, + .{ .cp = 0xC146, .start = 20838, .len = 3 }, + .{ .cp = 0xC147, .start = 20841, .len = 3 }, + .{ .cp = 0xC148, .start = 20844, .len = 3 }, + .{ .cp = 0xC149, .start = 20847, .len = 3 }, + .{ .cp = 0xC14A, .start = 20850, .len = 3 }, + .{ .cp = 0xC14B, .start = 20853, .len = 3 }, + .{ .cp = 0xC14C, .start = 20856, .len = 3 }, + .{ .cp = 0xC14D, .start = 20859, .len = 3 }, + .{ .cp = 0xC14E, .start = 20862, .len = 3 }, + .{ .cp = 0xC14F, .start = 20865, .len = 3 }, + .{ .cp = 0xC150, .start = 20868, .len = 3 }, + .{ .cp = 0xC151, .start = 20871, .len = 3 }, + .{ .cp = 0xC152, .start = 20874, .len = 3 }, + .{ .cp = 0xC153, .start = 20877, .len = 3 }, + .{ .cp = 0xC154, .start = 20880, .len = 2 }, + .{ .cp = 0xC155, .start = 20882, .len = 3 }, + .{ .cp = 0xC156, .start = 20885, .len = 3 }, + .{ .cp = 0xC157, .start = 20888, .len = 3 }, + .{ .cp = 0xC158, .start = 20891, .len = 3 }, + .{ .cp = 0xC159, .start = 20894, .len = 3 }, + .{ .cp = 0xC15A, .start = 20897, .len = 3 }, + .{ .cp = 0xC15B, .start = 20900, .len = 3 }, + .{ .cp = 0xC15C, .start = 20903, .len = 3 }, + .{ .cp = 0xC15D, .start = 20906, .len = 3 }, + .{ .cp = 0xC15E, .start = 20909, .len = 3 }, + .{ .cp = 0xC15F, .start = 20912, .len = 3 }, + .{ .cp = 0xC160, .start = 20915, .len = 3 }, + .{ .cp = 0xC161, .start = 20918, .len = 3 }, + .{ .cp = 0xC162, .start = 20921, .len = 3 }, + .{ .cp = 0xC163, .start = 20924, .len = 3 }, + .{ .cp = 0xC164, .start = 20927, .len = 3 }, + .{ .cp = 0xC165, .start = 20930, .len = 3 }, + .{ .cp = 0xC166, .start = 20933, .len = 3 }, + .{ .cp = 0xC167, .start = 20936, .len = 3 }, + .{ .cp = 0xC168, .start = 20939, .len = 3 }, + .{ .cp = 0xC169, .start = 20942, .len = 3 }, + .{ .cp = 0xC16A, .start = 20945, .len = 3 }, + .{ .cp = 0xC16B, .start = 20948, .len = 3 }, + .{ .cp = 0xC16C, .start = 20951, .len = 3 }, + .{ .cp = 0xC16D, .start = 20954, .len = 3 }, + .{ .cp = 0xC16E, .start = 20957, .len = 3 }, + .{ .cp = 0xC16F, .start = 20960, .len = 3 }, + .{ .cp = 0xC170, .start = 20963, .len = 2 }, + .{ .cp = 0xC171, .start = 20965, .len = 3 }, + .{ .cp = 0xC172, .start = 20968, .len = 3 }, + .{ .cp = 0xC173, .start = 20971, .len = 3 }, + .{ .cp = 0xC174, .start = 20974, .len = 3 }, + .{ .cp = 0xC175, .start = 20977, .len = 3 }, + .{ .cp = 0xC176, .start = 20980, .len = 3 }, + .{ .cp = 0xC177, .start = 20983, .len = 3 }, + .{ .cp = 0xC178, .start = 20986, .len = 3 }, + .{ .cp = 0xC179, .start = 20989, .len = 3 }, + .{ .cp = 0xC17A, .start = 20992, .len = 3 }, + .{ .cp = 0xC17B, .start = 20995, .len = 3 }, + .{ .cp = 0xC17C, .start = 20998, .len = 3 }, + .{ .cp = 0xC17D, .start = 21001, .len = 3 }, + .{ .cp = 0xC17E, .start = 21004, .len = 3 }, + .{ .cp = 0xC17F, .start = 21007, .len = 3 }, + .{ .cp = 0xC180, .start = 21010, .len = 3 }, + .{ .cp = 0xC181, .start = 21013, .len = 3 }, + .{ .cp = 0xC182, .start = 21016, .len = 3 }, + .{ .cp = 0xC183, .start = 21019, .len = 3 }, + .{ .cp = 0xC184, .start = 21022, .len = 3 }, + .{ .cp = 0xC185, .start = 21025, .len = 3 }, + .{ .cp = 0xC186, .start = 21028, .len = 3 }, + .{ .cp = 0xC187, .start = 21031, .len = 3 }, + .{ .cp = 0xC188, .start = 21034, .len = 3 }, + .{ .cp = 0xC189, .start = 21037, .len = 3 }, + .{ .cp = 0xC18A, .start = 21040, .len = 3 }, + .{ .cp = 0xC18B, .start = 21043, .len = 3 }, + .{ .cp = 0xC18C, .start = 21046, .len = 2 }, + .{ .cp = 0xC18D, .start = 21048, .len = 3 }, + .{ .cp = 0xC18E, .start = 21051, .len = 3 }, + .{ .cp = 0xC18F, .start = 21054, .len = 3 }, + .{ .cp = 0xC190, .start = 21057, .len = 3 }, + .{ .cp = 0xC191, .start = 21060, .len = 3 }, + .{ .cp = 0xC192, .start = 21063, .len = 3 }, + .{ .cp = 0xC193, .start = 21066, .len = 3 }, + .{ .cp = 0xC194, .start = 21069, .len = 3 }, + .{ .cp = 0xC195, .start = 21072, .len = 3 }, + .{ .cp = 0xC196, .start = 21075, .len = 3 }, + .{ .cp = 0xC197, .start = 21078, .len = 3 }, + .{ .cp = 0xC198, .start = 21081, .len = 3 }, + .{ .cp = 0xC199, .start = 21084, .len = 3 }, + .{ .cp = 0xC19A, .start = 21087, .len = 3 }, + .{ .cp = 0xC19B, .start = 21090, .len = 3 }, + .{ .cp = 0xC19C, .start = 21093, .len = 3 }, + .{ .cp = 0xC19D, .start = 21096, .len = 3 }, + .{ .cp = 0xC19E, .start = 21099, .len = 3 }, + .{ .cp = 0xC19F, .start = 21102, .len = 3 }, + .{ .cp = 0xC1A0, .start = 21105, .len = 3 }, + .{ .cp = 0xC1A1, .start = 21108, .len = 3 }, + .{ .cp = 0xC1A2, .start = 21111, .len = 3 }, + .{ .cp = 0xC1A3, .start = 21114, .len = 3 }, + .{ .cp = 0xC1A4, .start = 21117, .len = 3 }, + .{ .cp = 0xC1A5, .start = 21120, .len = 3 }, + .{ .cp = 0xC1A6, .start = 21123, .len = 3 }, + .{ .cp = 0xC1A7, .start = 21126, .len = 3 }, + .{ .cp = 0xC1A8, .start = 21129, .len = 2 }, + .{ .cp = 0xC1A9, .start = 21131, .len = 3 }, + .{ .cp = 0xC1AA, .start = 21134, .len = 3 }, + .{ .cp = 0xC1AB, .start = 21137, .len = 3 }, + .{ .cp = 0xC1AC, .start = 21140, .len = 3 }, + .{ .cp = 0xC1AD, .start = 21143, .len = 3 }, + .{ .cp = 0xC1AE, .start = 21146, .len = 3 }, + .{ .cp = 0xC1AF, .start = 21149, .len = 3 }, + .{ .cp = 0xC1B0, .start = 21152, .len = 3 }, + .{ .cp = 0xC1B1, .start = 21155, .len = 3 }, + .{ .cp = 0xC1B2, .start = 21158, .len = 3 }, + .{ .cp = 0xC1B3, .start = 21161, .len = 3 }, + .{ .cp = 0xC1B4, .start = 21164, .len = 3 }, + .{ .cp = 0xC1B5, .start = 21167, .len = 3 }, + .{ .cp = 0xC1B6, .start = 21170, .len = 3 }, + .{ .cp = 0xC1B7, .start = 21173, .len = 3 }, + .{ .cp = 0xC1B8, .start = 21176, .len = 3 }, + .{ .cp = 0xC1B9, .start = 21179, .len = 3 }, + .{ .cp = 0xC1BA, .start = 21182, .len = 3 }, + .{ .cp = 0xC1BB, .start = 21185, .len = 3 }, + .{ .cp = 0xC1BC, .start = 21188, .len = 3 }, + .{ .cp = 0xC1BD, .start = 21191, .len = 3 }, + .{ .cp = 0xC1BE, .start = 21194, .len = 3 }, + .{ .cp = 0xC1BF, .start = 21197, .len = 3 }, + .{ .cp = 0xC1C0, .start = 21200, .len = 3 }, + .{ .cp = 0xC1C1, .start = 21203, .len = 3 }, + .{ .cp = 0xC1C2, .start = 21206, .len = 3 }, + .{ .cp = 0xC1C3, .start = 21209, .len = 3 }, + .{ .cp = 0xC1C4, .start = 21212, .len = 2 }, + .{ .cp = 0xC1C5, .start = 21214, .len = 3 }, + .{ .cp = 0xC1C6, .start = 21217, .len = 3 }, + .{ .cp = 0xC1C7, .start = 21220, .len = 3 }, + .{ .cp = 0xC1C8, .start = 21223, .len = 3 }, + .{ .cp = 0xC1C9, .start = 21226, .len = 3 }, + .{ .cp = 0xC1CA, .start = 21229, .len = 3 }, + .{ .cp = 0xC1CB, .start = 21232, .len = 3 }, + .{ .cp = 0xC1CC, .start = 21235, .len = 3 }, + .{ .cp = 0xC1CD, .start = 21238, .len = 3 }, + .{ .cp = 0xC1CE, .start = 21241, .len = 3 }, + .{ .cp = 0xC1CF, .start = 21244, .len = 3 }, + .{ .cp = 0xC1D0, .start = 21247, .len = 3 }, + .{ .cp = 0xC1D1, .start = 21250, .len = 3 }, + .{ .cp = 0xC1D2, .start = 21253, .len = 3 }, + .{ .cp = 0xC1D3, .start = 21256, .len = 3 }, + .{ .cp = 0xC1D4, .start = 21259, .len = 3 }, + .{ .cp = 0xC1D5, .start = 21262, .len = 3 }, + .{ .cp = 0xC1D6, .start = 21265, .len = 3 }, + .{ .cp = 0xC1D7, .start = 21268, .len = 3 }, + .{ .cp = 0xC1D8, .start = 21271, .len = 3 }, + .{ .cp = 0xC1D9, .start = 21274, .len = 3 }, + .{ .cp = 0xC1DA, .start = 21277, .len = 3 }, + .{ .cp = 0xC1DB, .start = 21280, .len = 3 }, + .{ .cp = 0xC1DC, .start = 21283, .len = 3 }, + .{ .cp = 0xC1DD, .start = 21286, .len = 3 }, + .{ .cp = 0xC1DE, .start = 21289, .len = 3 }, + .{ .cp = 0xC1DF, .start = 21292, .len = 3 }, + .{ .cp = 0xC1E0, .start = 21295, .len = 2 }, + .{ .cp = 0xC1E1, .start = 21297, .len = 3 }, + .{ .cp = 0xC1E2, .start = 21300, .len = 3 }, + .{ .cp = 0xC1E3, .start = 21303, .len = 3 }, + .{ .cp = 0xC1E4, .start = 21306, .len = 3 }, + .{ .cp = 0xC1E5, .start = 21309, .len = 3 }, + .{ .cp = 0xC1E6, .start = 21312, .len = 3 }, + .{ .cp = 0xC1E7, .start = 21315, .len = 3 }, + .{ .cp = 0xC1E8, .start = 21318, .len = 3 }, + .{ .cp = 0xC1E9, .start = 21321, .len = 3 }, + .{ .cp = 0xC1EA, .start = 21324, .len = 3 }, + .{ .cp = 0xC1EB, .start = 21327, .len = 3 }, + .{ .cp = 0xC1EC, .start = 21330, .len = 3 }, + .{ .cp = 0xC1ED, .start = 21333, .len = 3 }, + .{ .cp = 0xC1EE, .start = 21336, .len = 3 }, + .{ .cp = 0xC1EF, .start = 21339, .len = 3 }, + .{ .cp = 0xC1F0, .start = 21342, .len = 3 }, + .{ .cp = 0xC1F1, .start = 21345, .len = 3 }, + .{ .cp = 0xC1F2, .start = 21348, .len = 3 }, + .{ .cp = 0xC1F3, .start = 21351, .len = 3 }, + .{ .cp = 0xC1F4, .start = 21354, .len = 3 }, + .{ .cp = 0xC1F5, .start = 21357, .len = 3 }, + .{ .cp = 0xC1F6, .start = 21360, .len = 3 }, + .{ .cp = 0xC1F7, .start = 21363, .len = 3 }, + .{ .cp = 0xC1F8, .start = 21366, .len = 3 }, + .{ .cp = 0xC1F9, .start = 21369, .len = 3 }, + .{ .cp = 0xC1FA, .start = 21372, .len = 3 }, + .{ .cp = 0xC1FB, .start = 21375, .len = 3 }, + .{ .cp = 0xC1FC, .start = 21378, .len = 2 }, + .{ .cp = 0xC1FD, .start = 21380, .len = 3 }, + .{ .cp = 0xC1FE, .start = 21383, .len = 3 }, + .{ .cp = 0xC1FF, .start = 21386, .len = 3 }, + .{ .cp = 0xC200, .start = 21389, .len = 3 }, + .{ .cp = 0xC201, .start = 21392, .len = 3 }, + .{ .cp = 0xC202, .start = 21395, .len = 3 }, + .{ .cp = 0xC203, .start = 21398, .len = 3 }, + .{ .cp = 0xC204, .start = 21401, .len = 3 }, + .{ .cp = 0xC205, .start = 21404, .len = 3 }, + .{ .cp = 0xC206, .start = 21407, .len = 3 }, + .{ .cp = 0xC207, .start = 21410, .len = 3 }, + .{ .cp = 0xC208, .start = 21413, .len = 3 }, + .{ .cp = 0xC209, .start = 21416, .len = 3 }, + .{ .cp = 0xC20A, .start = 21419, .len = 3 }, + .{ .cp = 0xC20B, .start = 21422, .len = 3 }, + .{ .cp = 0xC20C, .start = 21425, .len = 3 }, + .{ .cp = 0xC20D, .start = 21428, .len = 3 }, + .{ .cp = 0xC20E, .start = 21431, .len = 3 }, + .{ .cp = 0xC20F, .start = 21434, .len = 3 }, + .{ .cp = 0xC210, .start = 21437, .len = 3 }, + .{ .cp = 0xC211, .start = 21440, .len = 3 }, + .{ .cp = 0xC212, .start = 21443, .len = 3 }, + .{ .cp = 0xC213, .start = 21446, .len = 3 }, + .{ .cp = 0xC214, .start = 21449, .len = 3 }, + .{ .cp = 0xC215, .start = 21452, .len = 3 }, + .{ .cp = 0xC216, .start = 21455, .len = 3 }, + .{ .cp = 0xC217, .start = 21458, .len = 3 }, + .{ .cp = 0xC218, .start = 21461, .len = 2 }, + .{ .cp = 0xC219, .start = 21463, .len = 3 }, + .{ .cp = 0xC21A, .start = 21466, .len = 3 }, + .{ .cp = 0xC21B, .start = 21469, .len = 3 }, + .{ .cp = 0xC21C, .start = 21472, .len = 3 }, + .{ .cp = 0xC21D, .start = 21475, .len = 3 }, + .{ .cp = 0xC21E, .start = 21478, .len = 3 }, + .{ .cp = 0xC21F, .start = 21481, .len = 3 }, + .{ .cp = 0xC220, .start = 21484, .len = 3 }, + .{ .cp = 0xC221, .start = 21487, .len = 3 }, + .{ .cp = 0xC222, .start = 21490, .len = 3 }, + .{ .cp = 0xC223, .start = 21493, .len = 3 }, + .{ .cp = 0xC224, .start = 21496, .len = 3 }, + .{ .cp = 0xC225, .start = 21499, .len = 3 }, + .{ .cp = 0xC226, .start = 21502, .len = 3 }, + .{ .cp = 0xC227, .start = 21505, .len = 3 }, + .{ .cp = 0xC228, .start = 21508, .len = 3 }, + .{ .cp = 0xC229, .start = 21511, .len = 3 }, + .{ .cp = 0xC22A, .start = 21514, .len = 3 }, + .{ .cp = 0xC22B, .start = 21517, .len = 3 }, + .{ .cp = 0xC22C, .start = 21520, .len = 3 }, + .{ .cp = 0xC22D, .start = 21523, .len = 3 }, + .{ .cp = 0xC22E, .start = 21526, .len = 3 }, + .{ .cp = 0xC22F, .start = 21529, .len = 3 }, + .{ .cp = 0xC230, .start = 21532, .len = 3 }, + .{ .cp = 0xC231, .start = 21535, .len = 3 }, + .{ .cp = 0xC232, .start = 21538, .len = 3 }, + .{ .cp = 0xC233, .start = 21541, .len = 3 }, + .{ .cp = 0xC234, .start = 21544, .len = 2 }, + .{ .cp = 0xC235, .start = 21546, .len = 3 }, + .{ .cp = 0xC236, .start = 21549, .len = 3 }, + .{ .cp = 0xC237, .start = 21552, .len = 3 }, + .{ .cp = 0xC238, .start = 21555, .len = 3 }, + .{ .cp = 0xC239, .start = 21558, .len = 3 }, + .{ .cp = 0xC23A, .start = 21561, .len = 3 }, + .{ .cp = 0xC23B, .start = 21564, .len = 3 }, + .{ .cp = 0xC23C, .start = 21567, .len = 3 }, + .{ .cp = 0xC23D, .start = 21570, .len = 3 }, + .{ .cp = 0xC23E, .start = 21573, .len = 3 }, + .{ .cp = 0xC23F, .start = 21576, .len = 3 }, + .{ .cp = 0xC240, .start = 21579, .len = 3 }, + .{ .cp = 0xC241, .start = 21582, .len = 3 }, + .{ .cp = 0xC242, .start = 21585, .len = 3 }, + .{ .cp = 0xC243, .start = 21588, .len = 3 }, + .{ .cp = 0xC244, .start = 21591, .len = 3 }, + .{ .cp = 0xC245, .start = 21594, .len = 3 }, + .{ .cp = 0xC246, .start = 21597, .len = 3 }, + .{ .cp = 0xC247, .start = 21600, .len = 3 }, + .{ .cp = 0xC248, .start = 21603, .len = 3 }, + .{ .cp = 0xC249, .start = 21606, .len = 3 }, + .{ .cp = 0xC24A, .start = 21609, .len = 3 }, + .{ .cp = 0xC24B, .start = 21612, .len = 3 }, + .{ .cp = 0xC24C, .start = 21615, .len = 3 }, + .{ .cp = 0xC24D, .start = 21618, .len = 3 }, + .{ .cp = 0xC24E, .start = 21621, .len = 3 }, + .{ .cp = 0xC24F, .start = 21624, .len = 3 }, + .{ .cp = 0xC250, .start = 21627, .len = 2 }, + .{ .cp = 0xC251, .start = 21629, .len = 3 }, + .{ .cp = 0xC252, .start = 21632, .len = 3 }, + .{ .cp = 0xC253, .start = 21635, .len = 3 }, + .{ .cp = 0xC254, .start = 21638, .len = 3 }, + .{ .cp = 0xC255, .start = 21641, .len = 3 }, + .{ .cp = 0xC256, .start = 21644, .len = 3 }, + .{ .cp = 0xC257, .start = 21647, .len = 3 }, + .{ .cp = 0xC258, .start = 21650, .len = 3 }, + .{ .cp = 0xC259, .start = 21653, .len = 3 }, + .{ .cp = 0xC25A, .start = 21656, .len = 3 }, + .{ .cp = 0xC25B, .start = 21659, .len = 3 }, + .{ .cp = 0xC25C, .start = 21662, .len = 3 }, + .{ .cp = 0xC25D, .start = 21665, .len = 3 }, + .{ .cp = 0xC25E, .start = 21668, .len = 3 }, + .{ .cp = 0xC25F, .start = 21671, .len = 3 }, + .{ .cp = 0xC260, .start = 21674, .len = 3 }, + .{ .cp = 0xC261, .start = 21677, .len = 3 }, + .{ .cp = 0xC262, .start = 21680, .len = 3 }, + .{ .cp = 0xC263, .start = 21683, .len = 3 }, + .{ .cp = 0xC264, .start = 21686, .len = 3 }, + .{ .cp = 0xC265, .start = 21689, .len = 3 }, + .{ .cp = 0xC266, .start = 21692, .len = 3 }, + .{ .cp = 0xC267, .start = 21695, .len = 3 }, + .{ .cp = 0xC268, .start = 21698, .len = 3 }, + .{ .cp = 0xC269, .start = 21701, .len = 3 }, + .{ .cp = 0xC26A, .start = 21704, .len = 3 }, + .{ .cp = 0xC26B, .start = 21707, .len = 3 }, + .{ .cp = 0xC26C, .start = 21710, .len = 2 }, + .{ .cp = 0xC26D, .start = 21712, .len = 3 }, + .{ .cp = 0xC26E, .start = 21715, .len = 3 }, + .{ .cp = 0xC26F, .start = 21718, .len = 3 }, + .{ .cp = 0xC270, .start = 21721, .len = 3 }, + .{ .cp = 0xC271, .start = 21724, .len = 3 }, + .{ .cp = 0xC272, .start = 21727, .len = 3 }, + .{ .cp = 0xC273, .start = 21730, .len = 3 }, + .{ .cp = 0xC274, .start = 21733, .len = 3 }, + .{ .cp = 0xC275, .start = 21736, .len = 3 }, + .{ .cp = 0xC276, .start = 21739, .len = 3 }, + .{ .cp = 0xC277, .start = 21742, .len = 3 }, + .{ .cp = 0xC278, .start = 21745, .len = 3 }, + .{ .cp = 0xC279, .start = 21748, .len = 3 }, + .{ .cp = 0xC27A, .start = 21751, .len = 3 }, + .{ .cp = 0xC27B, .start = 21754, .len = 3 }, + .{ .cp = 0xC27C, .start = 21757, .len = 3 }, + .{ .cp = 0xC27D, .start = 21760, .len = 3 }, + .{ .cp = 0xC27E, .start = 21763, .len = 3 }, + .{ .cp = 0xC27F, .start = 21766, .len = 3 }, + .{ .cp = 0xC280, .start = 21769, .len = 3 }, + .{ .cp = 0xC281, .start = 21772, .len = 3 }, + .{ .cp = 0xC282, .start = 21775, .len = 3 }, + .{ .cp = 0xC283, .start = 21778, .len = 3 }, + .{ .cp = 0xC284, .start = 21781, .len = 3 }, + .{ .cp = 0xC285, .start = 21784, .len = 3 }, + .{ .cp = 0xC286, .start = 21787, .len = 3 }, + .{ .cp = 0xC287, .start = 21790, .len = 3 }, + .{ .cp = 0xC288, .start = 21793, .len = 2 }, + .{ .cp = 0xC289, .start = 21795, .len = 3 }, + .{ .cp = 0xC28A, .start = 21798, .len = 3 }, + .{ .cp = 0xC28B, .start = 21801, .len = 3 }, + .{ .cp = 0xC28C, .start = 21804, .len = 3 }, + .{ .cp = 0xC28D, .start = 21807, .len = 3 }, + .{ .cp = 0xC28E, .start = 21810, .len = 3 }, + .{ .cp = 0xC28F, .start = 21813, .len = 3 }, + .{ .cp = 0xC290, .start = 21816, .len = 3 }, + .{ .cp = 0xC291, .start = 21819, .len = 3 }, + .{ .cp = 0xC292, .start = 21822, .len = 3 }, + .{ .cp = 0xC293, .start = 21825, .len = 3 }, + .{ .cp = 0xC294, .start = 21828, .len = 3 }, + .{ .cp = 0xC295, .start = 21831, .len = 3 }, + .{ .cp = 0xC296, .start = 21834, .len = 3 }, + .{ .cp = 0xC297, .start = 21837, .len = 3 }, + .{ .cp = 0xC298, .start = 21840, .len = 3 }, + .{ .cp = 0xC299, .start = 21843, .len = 3 }, + .{ .cp = 0xC29A, .start = 21846, .len = 3 }, + .{ .cp = 0xC29B, .start = 21849, .len = 3 }, + .{ .cp = 0xC29C, .start = 21852, .len = 3 }, + .{ .cp = 0xC29D, .start = 21855, .len = 3 }, + .{ .cp = 0xC29E, .start = 21858, .len = 3 }, + .{ .cp = 0xC29F, .start = 21861, .len = 3 }, + .{ .cp = 0xC2A0, .start = 21864, .len = 3 }, + .{ .cp = 0xC2A1, .start = 21867, .len = 3 }, + .{ .cp = 0xC2A2, .start = 21870, .len = 3 }, + .{ .cp = 0xC2A3, .start = 21873, .len = 3 }, + .{ .cp = 0xC2A4, .start = 21876, .len = 2 }, + .{ .cp = 0xC2A5, .start = 21878, .len = 3 }, + .{ .cp = 0xC2A6, .start = 21881, .len = 3 }, + .{ .cp = 0xC2A7, .start = 21884, .len = 3 }, + .{ .cp = 0xC2A8, .start = 21887, .len = 3 }, + .{ .cp = 0xC2A9, .start = 21890, .len = 3 }, + .{ .cp = 0xC2AA, .start = 21893, .len = 3 }, + .{ .cp = 0xC2AB, .start = 21896, .len = 3 }, + .{ .cp = 0xC2AC, .start = 21899, .len = 3 }, + .{ .cp = 0xC2AD, .start = 21902, .len = 3 }, + .{ .cp = 0xC2AE, .start = 21905, .len = 3 }, + .{ .cp = 0xC2AF, .start = 21908, .len = 3 }, + .{ .cp = 0xC2B0, .start = 21911, .len = 3 }, + .{ .cp = 0xC2B1, .start = 21914, .len = 3 }, + .{ .cp = 0xC2B2, .start = 21917, .len = 3 }, + .{ .cp = 0xC2B3, .start = 21920, .len = 3 }, + .{ .cp = 0xC2B4, .start = 21923, .len = 3 }, + .{ .cp = 0xC2B5, .start = 21926, .len = 3 }, + .{ .cp = 0xC2B6, .start = 21929, .len = 3 }, + .{ .cp = 0xC2B7, .start = 21932, .len = 3 }, + .{ .cp = 0xC2B8, .start = 21935, .len = 3 }, + .{ .cp = 0xC2B9, .start = 21938, .len = 3 }, + .{ .cp = 0xC2BA, .start = 21941, .len = 3 }, + .{ .cp = 0xC2BB, .start = 21944, .len = 3 }, + .{ .cp = 0xC2BC, .start = 21947, .len = 3 }, + .{ .cp = 0xC2BD, .start = 21950, .len = 3 }, + .{ .cp = 0xC2BE, .start = 21953, .len = 3 }, + .{ .cp = 0xC2BF, .start = 21956, .len = 3 }, + .{ .cp = 0xC2C0, .start = 21959, .len = 2 }, + .{ .cp = 0xC2C1, .start = 21961, .len = 3 }, + .{ .cp = 0xC2C2, .start = 21964, .len = 3 }, + .{ .cp = 0xC2C3, .start = 21967, .len = 3 }, + .{ .cp = 0xC2C4, .start = 21970, .len = 3 }, + .{ .cp = 0xC2C5, .start = 21973, .len = 3 }, + .{ .cp = 0xC2C6, .start = 21976, .len = 3 }, + .{ .cp = 0xC2C7, .start = 21979, .len = 3 }, + .{ .cp = 0xC2C8, .start = 21982, .len = 3 }, + .{ .cp = 0xC2C9, .start = 21985, .len = 3 }, + .{ .cp = 0xC2CA, .start = 21988, .len = 3 }, + .{ .cp = 0xC2CB, .start = 21991, .len = 3 }, + .{ .cp = 0xC2CC, .start = 21994, .len = 3 }, + .{ .cp = 0xC2CD, .start = 21997, .len = 3 }, + .{ .cp = 0xC2CE, .start = 22000, .len = 3 }, + .{ .cp = 0xC2CF, .start = 22003, .len = 3 }, + .{ .cp = 0xC2D0, .start = 22006, .len = 3 }, + .{ .cp = 0xC2D1, .start = 22009, .len = 3 }, + .{ .cp = 0xC2D2, .start = 22012, .len = 3 }, + .{ .cp = 0xC2D3, .start = 22015, .len = 3 }, + .{ .cp = 0xC2D4, .start = 22018, .len = 3 }, + .{ .cp = 0xC2D5, .start = 22021, .len = 3 }, + .{ .cp = 0xC2D6, .start = 22024, .len = 3 }, + .{ .cp = 0xC2D7, .start = 22027, .len = 3 }, + .{ .cp = 0xC2D8, .start = 22030, .len = 3 }, + .{ .cp = 0xC2D9, .start = 22033, .len = 3 }, + .{ .cp = 0xC2DA, .start = 22036, .len = 3 }, + .{ .cp = 0xC2DB, .start = 22039, .len = 3 }, + .{ .cp = 0xC2DC, .start = 22042, .len = 2 }, + .{ .cp = 0xC2DD, .start = 22044, .len = 3 }, + .{ .cp = 0xC2DE, .start = 22047, .len = 3 }, + .{ .cp = 0xC2DF, .start = 22050, .len = 3 }, + .{ .cp = 0xC2E0, .start = 22053, .len = 3 }, + .{ .cp = 0xC2E1, .start = 22056, .len = 3 }, + .{ .cp = 0xC2E2, .start = 22059, .len = 3 }, + .{ .cp = 0xC2E3, .start = 22062, .len = 3 }, + .{ .cp = 0xC2E4, .start = 22065, .len = 3 }, + .{ .cp = 0xC2E5, .start = 22068, .len = 3 }, + .{ .cp = 0xC2E6, .start = 22071, .len = 3 }, + .{ .cp = 0xC2E7, .start = 22074, .len = 3 }, + .{ .cp = 0xC2E8, .start = 22077, .len = 3 }, + .{ .cp = 0xC2E9, .start = 22080, .len = 3 }, + .{ .cp = 0xC2EA, .start = 22083, .len = 3 }, + .{ .cp = 0xC2EB, .start = 22086, .len = 3 }, + .{ .cp = 0xC2EC, .start = 22089, .len = 3 }, + .{ .cp = 0xC2ED, .start = 22092, .len = 3 }, + .{ .cp = 0xC2EE, .start = 22095, .len = 3 }, + .{ .cp = 0xC2EF, .start = 22098, .len = 3 }, + .{ .cp = 0xC2F0, .start = 22101, .len = 3 }, + .{ .cp = 0xC2F1, .start = 22104, .len = 3 }, + .{ .cp = 0xC2F2, .start = 22107, .len = 3 }, + .{ .cp = 0xC2F3, .start = 22110, .len = 3 }, + .{ .cp = 0xC2F4, .start = 22113, .len = 3 }, + .{ .cp = 0xC2F5, .start = 22116, .len = 3 }, + .{ .cp = 0xC2F6, .start = 22119, .len = 3 }, + .{ .cp = 0xC2F7, .start = 22122, .len = 3 }, + .{ .cp = 0xC2F8, .start = 22125, .len = 2 }, + .{ .cp = 0xC2F9, .start = 22127, .len = 3 }, + .{ .cp = 0xC2FA, .start = 22130, .len = 3 }, + .{ .cp = 0xC2FB, .start = 22133, .len = 3 }, + .{ .cp = 0xC2FC, .start = 22136, .len = 3 }, + .{ .cp = 0xC2FD, .start = 22139, .len = 3 }, + .{ .cp = 0xC2FE, .start = 22142, .len = 3 }, + .{ .cp = 0xC2FF, .start = 22145, .len = 3 }, + .{ .cp = 0xC300, .start = 22148, .len = 3 }, + .{ .cp = 0xC301, .start = 22151, .len = 3 }, + .{ .cp = 0xC302, .start = 22154, .len = 3 }, + .{ .cp = 0xC303, .start = 22157, .len = 3 }, + .{ .cp = 0xC304, .start = 22160, .len = 3 }, + .{ .cp = 0xC305, .start = 22163, .len = 3 }, + .{ .cp = 0xC306, .start = 22166, .len = 3 }, + .{ .cp = 0xC307, .start = 22169, .len = 3 }, + .{ .cp = 0xC308, .start = 22172, .len = 3 }, + .{ .cp = 0xC309, .start = 22175, .len = 3 }, + .{ .cp = 0xC30A, .start = 22178, .len = 3 }, + .{ .cp = 0xC30B, .start = 22181, .len = 3 }, + .{ .cp = 0xC30C, .start = 22184, .len = 3 }, + .{ .cp = 0xC30D, .start = 22187, .len = 3 }, + .{ .cp = 0xC30E, .start = 22190, .len = 3 }, + .{ .cp = 0xC30F, .start = 22193, .len = 3 }, + .{ .cp = 0xC310, .start = 22196, .len = 3 }, + .{ .cp = 0xC311, .start = 22199, .len = 3 }, + .{ .cp = 0xC312, .start = 22202, .len = 3 }, + .{ .cp = 0xC313, .start = 22205, .len = 3 }, + .{ .cp = 0xC314, .start = 22208, .len = 2 }, + .{ .cp = 0xC315, .start = 22210, .len = 3 }, + .{ .cp = 0xC316, .start = 22213, .len = 3 }, + .{ .cp = 0xC317, .start = 22216, .len = 3 }, + .{ .cp = 0xC318, .start = 22219, .len = 3 }, + .{ .cp = 0xC319, .start = 22222, .len = 3 }, + .{ .cp = 0xC31A, .start = 22225, .len = 3 }, + .{ .cp = 0xC31B, .start = 22228, .len = 3 }, + .{ .cp = 0xC31C, .start = 22231, .len = 3 }, + .{ .cp = 0xC31D, .start = 22234, .len = 3 }, + .{ .cp = 0xC31E, .start = 22237, .len = 3 }, + .{ .cp = 0xC31F, .start = 22240, .len = 3 }, + .{ .cp = 0xC320, .start = 22243, .len = 3 }, + .{ .cp = 0xC321, .start = 22246, .len = 3 }, + .{ .cp = 0xC322, .start = 22249, .len = 3 }, + .{ .cp = 0xC323, .start = 22252, .len = 3 }, + .{ .cp = 0xC324, .start = 22255, .len = 3 }, + .{ .cp = 0xC325, .start = 22258, .len = 3 }, + .{ .cp = 0xC326, .start = 22261, .len = 3 }, + .{ .cp = 0xC327, .start = 22264, .len = 3 }, + .{ .cp = 0xC328, .start = 22267, .len = 3 }, + .{ .cp = 0xC329, .start = 22270, .len = 3 }, + .{ .cp = 0xC32A, .start = 22273, .len = 3 }, + .{ .cp = 0xC32B, .start = 22276, .len = 3 }, + .{ .cp = 0xC32C, .start = 22279, .len = 3 }, + .{ .cp = 0xC32D, .start = 22282, .len = 3 }, + .{ .cp = 0xC32E, .start = 22285, .len = 3 }, + .{ .cp = 0xC32F, .start = 22288, .len = 3 }, + .{ .cp = 0xC330, .start = 22291, .len = 2 }, + .{ .cp = 0xC331, .start = 22293, .len = 3 }, + .{ .cp = 0xC332, .start = 22296, .len = 3 }, + .{ .cp = 0xC333, .start = 22299, .len = 3 }, + .{ .cp = 0xC334, .start = 22302, .len = 3 }, + .{ .cp = 0xC335, .start = 22305, .len = 3 }, + .{ .cp = 0xC336, .start = 22308, .len = 3 }, + .{ .cp = 0xC337, .start = 22311, .len = 3 }, + .{ .cp = 0xC338, .start = 22314, .len = 3 }, + .{ .cp = 0xC339, .start = 22317, .len = 3 }, + .{ .cp = 0xC33A, .start = 22320, .len = 3 }, + .{ .cp = 0xC33B, .start = 22323, .len = 3 }, + .{ .cp = 0xC33C, .start = 22326, .len = 3 }, + .{ .cp = 0xC33D, .start = 22329, .len = 3 }, + .{ .cp = 0xC33E, .start = 22332, .len = 3 }, + .{ .cp = 0xC33F, .start = 22335, .len = 3 }, + .{ .cp = 0xC340, .start = 22338, .len = 3 }, + .{ .cp = 0xC341, .start = 22341, .len = 3 }, + .{ .cp = 0xC342, .start = 22344, .len = 3 }, + .{ .cp = 0xC343, .start = 22347, .len = 3 }, + .{ .cp = 0xC344, .start = 22350, .len = 3 }, + .{ .cp = 0xC345, .start = 22353, .len = 3 }, + .{ .cp = 0xC346, .start = 22356, .len = 3 }, + .{ .cp = 0xC347, .start = 22359, .len = 3 }, + .{ .cp = 0xC348, .start = 22362, .len = 3 }, + .{ .cp = 0xC349, .start = 22365, .len = 3 }, + .{ .cp = 0xC34A, .start = 22368, .len = 3 }, + .{ .cp = 0xC34B, .start = 22371, .len = 3 }, + .{ .cp = 0xC34C, .start = 22374, .len = 2 }, + .{ .cp = 0xC34D, .start = 22376, .len = 3 }, + .{ .cp = 0xC34E, .start = 22379, .len = 3 }, + .{ .cp = 0xC34F, .start = 22382, .len = 3 }, + .{ .cp = 0xC350, .start = 22385, .len = 3 }, + .{ .cp = 0xC351, .start = 22388, .len = 3 }, + .{ .cp = 0xC352, .start = 22391, .len = 3 }, + .{ .cp = 0xC353, .start = 22394, .len = 3 }, + .{ .cp = 0xC354, .start = 22397, .len = 3 }, + .{ .cp = 0xC355, .start = 22400, .len = 3 }, + .{ .cp = 0xC356, .start = 22403, .len = 3 }, + .{ .cp = 0xC357, .start = 22406, .len = 3 }, + .{ .cp = 0xC358, .start = 22409, .len = 3 }, + .{ .cp = 0xC359, .start = 22412, .len = 3 }, + .{ .cp = 0xC35A, .start = 22415, .len = 3 }, + .{ .cp = 0xC35B, .start = 22418, .len = 3 }, + .{ .cp = 0xC35C, .start = 22421, .len = 3 }, + .{ .cp = 0xC35D, .start = 22424, .len = 3 }, + .{ .cp = 0xC35E, .start = 22427, .len = 3 }, + .{ .cp = 0xC35F, .start = 22430, .len = 3 }, + .{ .cp = 0xC360, .start = 22433, .len = 3 }, + .{ .cp = 0xC361, .start = 22436, .len = 3 }, + .{ .cp = 0xC362, .start = 22439, .len = 3 }, + .{ .cp = 0xC363, .start = 22442, .len = 3 }, + .{ .cp = 0xC364, .start = 22445, .len = 3 }, + .{ .cp = 0xC365, .start = 22448, .len = 3 }, + .{ .cp = 0xC366, .start = 22451, .len = 3 }, + .{ .cp = 0xC367, .start = 22454, .len = 3 }, + .{ .cp = 0xC368, .start = 22457, .len = 2 }, + .{ .cp = 0xC369, .start = 22459, .len = 3 }, + .{ .cp = 0xC36A, .start = 22462, .len = 3 }, + .{ .cp = 0xC36B, .start = 22465, .len = 3 }, + .{ .cp = 0xC36C, .start = 22468, .len = 3 }, + .{ .cp = 0xC36D, .start = 22471, .len = 3 }, + .{ .cp = 0xC36E, .start = 22474, .len = 3 }, + .{ .cp = 0xC36F, .start = 22477, .len = 3 }, + .{ .cp = 0xC370, .start = 22480, .len = 3 }, + .{ .cp = 0xC371, .start = 22483, .len = 3 }, + .{ .cp = 0xC372, .start = 22486, .len = 3 }, + .{ .cp = 0xC373, .start = 22489, .len = 3 }, + .{ .cp = 0xC374, .start = 22492, .len = 3 }, + .{ .cp = 0xC375, .start = 22495, .len = 3 }, + .{ .cp = 0xC376, .start = 22498, .len = 3 }, + .{ .cp = 0xC377, .start = 22501, .len = 3 }, + .{ .cp = 0xC378, .start = 22504, .len = 3 }, + .{ .cp = 0xC379, .start = 22507, .len = 3 }, + .{ .cp = 0xC37A, .start = 22510, .len = 3 }, + .{ .cp = 0xC37B, .start = 22513, .len = 3 }, + .{ .cp = 0xC37C, .start = 22516, .len = 3 }, + .{ .cp = 0xC37D, .start = 22519, .len = 3 }, + .{ .cp = 0xC37E, .start = 22522, .len = 3 }, + .{ .cp = 0xC37F, .start = 22525, .len = 3 }, + .{ .cp = 0xC380, .start = 22528, .len = 3 }, + .{ .cp = 0xC381, .start = 22531, .len = 3 }, + .{ .cp = 0xC382, .start = 22534, .len = 3 }, + .{ .cp = 0xC383, .start = 22537, .len = 3 }, + .{ .cp = 0xC384, .start = 22540, .len = 2 }, + .{ .cp = 0xC385, .start = 22542, .len = 3 }, + .{ .cp = 0xC386, .start = 22545, .len = 3 }, + .{ .cp = 0xC387, .start = 22548, .len = 3 }, + .{ .cp = 0xC388, .start = 22551, .len = 3 }, + .{ .cp = 0xC389, .start = 22554, .len = 3 }, + .{ .cp = 0xC38A, .start = 22557, .len = 3 }, + .{ .cp = 0xC38B, .start = 22560, .len = 3 }, + .{ .cp = 0xC38C, .start = 22563, .len = 3 }, + .{ .cp = 0xC38D, .start = 22566, .len = 3 }, + .{ .cp = 0xC38E, .start = 22569, .len = 3 }, + .{ .cp = 0xC38F, .start = 22572, .len = 3 }, + .{ .cp = 0xC390, .start = 22575, .len = 3 }, + .{ .cp = 0xC391, .start = 22578, .len = 3 }, + .{ .cp = 0xC392, .start = 22581, .len = 3 }, + .{ .cp = 0xC393, .start = 22584, .len = 3 }, + .{ .cp = 0xC394, .start = 22587, .len = 3 }, + .{ .cp = 0xC395, .start = 22590, .len = 3 }, + .{ .cp = 0xC396, .start = 22593, .len = 3 }, + .{ .cp = 0xC397, .start = 22596, .len = 3 }, + .{ .cp = 0xC398, .start = 22599, .len = 3 }, + .{ .cp = 0xC399, .start = 22602, .len = 3 }, + .{ .cp = 0xC39A, .start = 22605, .len = 3 }, + .{ .cp = 0xC39B, .start = 22608, .len = 3 }, + .{ .cp = 0xC39C, .start = 22611, .len = 3 }, + .{ .cp = 0xC39D, .start = 22614, .len = 3 }, + .{ .cp = 0xC39E, .start = 22617, .len = 3 }, + .{ .cp = 0xC39F, .start = 22620, .len = 3 }, + .{ .cp = 0xC3A0, .start = 22623, .len = 2 }, + .{ .cp = 0xC3A1, .start = 22625, .len = 3 }, + .{ .cp = 0xC3A2, .start = 22628, .len = 3 }, + .{ .cp = 0xC3A3, .start = 22631, .len = 3 }, + .{ .cp = 0xC3A4, .start = 22634, .len = 3 }, + .{ .cp = 0xC3A5, .start = 22637, .len = 3 }, + .{ .cp = 0xC3A6, .start = 22640, .len = 3 }, + .{ .cp = 0xC3A7, .start = 22643, .len = 3 }, + .{ .cp = 0xC3A8, .start = 22646, .len = 3 }, + .{ .cp = 0xC3A9, .start = 22649, .len = 3 }, + .{ .cp = 0xC3AA, .start = 22652, .len = 3 }, + .{ .cp = 0xC3AB, .start = 22655, .len = 3 }, + .{ .cp = 0xC3AC, .start = 22658, .len = 3 }, + .{ .cp = 0xC3AD, .start = 22661, .len = 3 }, + .{ .cp = 0xC3AE, .start = 22664, .len = 3 }, + .{ .cp = 0xC3AF, .start = 22667, .len = 3 }, + .{ .cp = 0xC3B0, .start = 22670, .len = 3 }, + .{ .cp = 0xC3B1, .start = 22673, .len = 3 }, + .{ .cp = 0xC3B2, .start = 22676, .len = 3 }, + .{ .cp = 0xC3B3, .start = 22679, .len = 3 }, + .{ .cp = 0xC3B4, .start = 22682, .len = 3 }, + .{ .cp = 0xC3B5, .start = 22685, .len = 3 }, + .{ .cp = 0xC3B6, .start = 22688, .len = 3 }, + .{ .cp = 0xC3B7, .start = 22691, .len = 3 }, + .{ .cp = 0xC3B8, .start = 22694, .len = 3 }, + .{ .cp = 0xC3B9, .start = 22697, .len = 3 }, + .{ .cp = 0xC3BA, .start = 22700, .len = 3 }, + .{ .cp = 0xC3BB, .start = 22703, .len = 3 }, + .{ .cp = 0xC3BC, .start = 22706, .len = 2 }, + .{ .cp = 0xC3BD, .start = 22708, .len = 3 }, + .{ .cp = 0xC3BE, .start = 22711, .len = 3 }, + .{ .cp = 0xC3BF, .start = 22714, .len = 3 }, + .{ .cp = 0xC3C0, .start = 22717, .len = 3 }, + .{ .cp = 0xC3C1, .start = 22720, .len = 3 }, + .{ .cp = 0xC3C2, .start = 22723, .len = 3 }, + .{ .cp = 0xC3C3, .start = 22726, .len = 3 }, + .{ .cp = 0xC3C4, .start = 22729, .len = 3 }, + .{ .cp = 0xC3C5, .start = 22732, .len = 3 }, + .{ .cp = 0xC3C6, .start = 22735, .len = 3 }, + .{ .cp = 0xC3C7, .start = 22738, .len = 3 }, + .{ .cp = 0xC3C8, .start = 22741, .len = 3 }, + .{ .cp = 0xC3C9, .start = 22744, .len = 3 }, + .{ .cp = 0xC3CA, .start = 22747, .len = 3 }, + .{ .cp = 0xC3CB, .start = 22750, .len = 3 }, + .{ .cp = 0xC3CC, .start = 22753, .len = 3 }, + .{ .cp = 0xC3CD, .start = 22756, .len = 3 }, + .{ .cp = 0xC3CE, .start = 22759, .len = 3 }, + .{ .cp = 0xC3CF, .start = 22762, .len = 3 }, + .{ .cp = 0xC3D0, .start = 22765, .len = 3 }, + .{ .cp = 0xC3D1, .start = 22768, .len = 3 }, + .{ .cp = 0xC3D2, .start = 22771, .len = 3 }, + .{ .cp = 0xC3D3, .start = 22774, .len = 3 }, + .{ .cp = 0xC3D4, .start = 22777, .len = 3 }, + .{ .cp = 0xC3D5, .start = 22780, .len = 3 }, + .{ .cp = 0xC3D6, .start = 22783, .len = 3 }, + .{ .cp = 0xC3D7, .start = 22786, .len = 3 }, + .{ .cp = 0xC3D8, .start = 22789, .len = 2 }, + .{ .cp = 0xC3D9, .start = 22791, .len = 3 }, + .{ .cp = 0xC3DA, .start = 22794, .len = 3 }, + .{ .cp = 0xC3DB, .start = 22797, .len = 3 }, + .{ .cp = 0xC3DC, .start = 22800, .len = 3 }, + .{ .cp = 0xC3DD, .start = 22803, .len = 3 }, + .{ .cp = 0xC3DE, .start = 22806, .len = 3 }, + .{ .cp = 0xC3DF, .start = 22809, .len = 3 }, + .{ .cp = 0xC3E0, .start = 22812, .len = 3 }, + .{ .cp = 0xC3E1, .start = 22815, .len = 3 }, + .{ .cp = 0xC3E2, .start = 22818, .len = 3 }, + .{ .cp = 0xC3E3, .start = 22821, .len = 3 }, + .{ .cp = 0xC3E4, .start = 22824, .len = 3 }, + .{ .cp = 0xC3E5, .start = 22827, .len = 3 }, + .{ .cp = 0xC3E6, .start = 22830, .len = 3 }, + .{ .cp = 0xC3E7, .start = 22833, .len = 3 }, + .{ .cp = 0xC3E8, .start = 22836, .len = 3 }, + .{ .cp = 0xC3E9, .start = 22839, .len = 3 }, + .{ .cp = 0xC3EA, .start = 22842, .len = 3 }, + .{ .cp = 0xC3EB, .start = 22845, .len = 3 }, + .{ .cp = 0xC3EC, .start = 22848, .len = 3 }, + .{ .cp = 0xC3ED, .start = 22851, .len = 3 }, + .{ .cp = 0xC3EE, .start = 22854, .len = 3 }, + .{ .cp = 0xC3EF, .start = 22857, .len = 3 }, + .{ .cp = 0xC3F0, .start = 22860, .len = 3 }, + .{ .cp = 0xC3F1, .start = 22863, .len = 3 }, + .{ .cp = 0xC3F2, .start = 22866, .len = 3 }, + .{ .cp = 0xC3F3, .start = 22869, .len = 3 }, + .{ .cp = 0xC3F4, .start = 22872, .len = 2 }, + .{ .cp = 0xC3F5, .start = 22874, .len = 3 }, + .{ .cp = 0xC3F6, .start = 22877, .len = 3 }, + .{ .cp = 0xC3F7, .start = 22880, .len = 3 }, + .{ .cp = 0xC3F8, .start = 22883, .len = 3 }, + .{ .cp = 0xC3F9, .start = 22886, .len = 3 }, + .{ .cp = 0xC3FA, .start = 22889, .len = 3 }, + .{ .cp = 0xC3FB, .start = 22892, .len = 3 }, + .{ .cp = 0xC3FC, .start = 22895, .len = 3 }, + .{ .cp = 0xC3FD, .start = 22898, .len = 3 }, + .{ .cp = 0xC3FE, .start = 22901, .len = 3 }, + .{ .cp = 0xC3FF, .start = 22904, .len = 3 }, + .{ .cp = 0xC400, .start = 22907, .len = 3 }, + .{ .cp = 0xC401, .start = 22910, .len = 3 }, + .{ .cp = 0xC402, .start = 22913, .len = 3 }, + .{ .cp = 0xC403, .start = 22916, .len = 3 }, + .{ .cp = 0xC404, .start = 22919, .len = 3 }, + .{ .cp = 0xC405, .start = 22922, .len = 3 }, + .{ .cp = 0xC406, .start = 22925, .len = 3 }, + .{ .cp = 0xC407, .start = 22928, .len = 3 }, + .{ .cp = 0xC408, .start = 22931, .len = 3 }, + .{ .cp = 0xC409, .start = 22934, .len = 3 }, + .{ .cp = 0xC40A, .start = 22937, .len = 3 }, + .{ .cp = 0xC40B, .start = 22940, .len = 3 }, + .{ .cp = 0xC40C, .start = 22943, .len = 3 }, + .{ .cp = 0xC40D, .start = 22946, .len = 3 }, + .{ .cp = 0xC40E, .start = 22949, .len = 3 }, + .{ .cp = 0xC40F, .start = 22952, .len = 3 }, + .{ .cp = 0xC410, .start = 22955, .len = 2 }, + .{ .cp = 0xC411, .start = 22957, .len = 3 }, + .{ .cp = 0xC412, .start = 22960, .len = 3 }, + .{ .cp = 0xC413, .start = 22963, .len = 3 }, + .{ .cp = 0xC414, .start = 22966, .len = 3 }, + .{ .cp = 0xC415, .start = 22969, .len = 3 }, + .{ .cp = 0xC416, .start = 22972, .len = 3 }, + .{ .cp = 0xC417, .start = 22975, .len = 3 }, + .{ .cp = 0xC418, .start = 22978, .len = 3 }, + .{ .cp = 0xC419, .start = 22981, .len = 3 }, + .{ .cp = 0xC41A, .start = 22984, .len = 3 }, + .{ .cp = 0xC41B, .start = 22987, .len = 3 }, + .{ .cp = 0xC41C, .start = 22990, .len = 3 }, + .{ .cp = 0xC41D, .start = 22993, .len = 3 }, + .{ .cp = 0xC41E, .start = 22996, .len = 3 }, + .{ .cp = 0xC41F, .start = 22999, .len = 3 }, + .{ .cp = 0xC420, .start = 23002, .len = 3 }, + .{ .cp = 0xC421, .start = 23005, .len = 3 }, + .{ .cp = 0xC422, .start = 23008, .len = 3 }, + .{ .cp = 0xC423, .start = 23011, .len = 3 }, + .{ .cp = 0xC424, .start = 23014, .len = 3 }, + .{ .cp = 0xC425, .start = 23017, .len = 3 }, + .{ .cp = 0xC426, .start = 23020, .len = 3 }, + .{ .cp = 0xC427, .start = 23023, .len = 3 }, + .{ .cp = 0xC428, .start = 23026, .len = 3 }, + .{ .cp = 0xC429, .start = 23029, .len = 3 }, + .{ .cp = 0xC42A, .start = 23032, .len = 3 }, + .{ .cp = 0xC42B, .start = 23035, .len = 3 }, + .{ .cp = 0xC42C, .start = 23038, .len = 2 }, + .{ .cp = 0xC42D, .start = 23040, .len = 3 }, + .{ .cp = 0xC42E, .start = 23043, .len = 3 }, + .{ .cp = 0xC42F, .start = 23046, .len = 3 }, + .{ .cp = 0xC430, .start = 23049, .len = 3 }, + .{ .cp = 0xC431, .start = 23052, .len = 3 }, + .{ .cp = 0xC432, .start = 23055, .len = 3 }, + .{ .cp = 0xC433, .start = 23058, .len = 3 }, + .{ .cp = 0xC434, .start = 23061, .len = 3 }, + .{ .cp = 0xC435, .start = 23064, .len = 3 }, + .{ .cp = 0xC436, .start = 23067, .len = 3 }, + .{ .cp = 0xC437, .start = 23070, .len = 3 }, + .{ .cp = 0xC438, .start = 23073, .len = 3 }, + .{ .cp = 0xC439, .start = 23076, .len = 3 }, + .{ .cp = 0xC43A, .start = 23079, .len = 3 }, + .{ .cp = 0xC43B, .start = 23082, .len = 3 }, + .{ .cp = 0xC43C, .start = 23085, .len = 3 }, + .{ .cp = 0xC43D, .start = 23088, .len = 3 }, + .{ .cp = 0xC43E, .start = 23091, .len = 3 }, + .{ .cp = 0xC43F, .start = 23094, .len = 3 }, + .{ .cp = 0xC440, .start = 23097, .len = 3 }, + .{ .cp = 0xC441, .start = 23100, .len = 3 }, + .{ .cp = 0xC442, .start = 23103, .len = 3 }, + .{ .cp = 0xC443, .start = 23106, .len = 3 }, + .{ .cp = 0xC444, .start = 23109, .len = 3 }, + .{ .cp = 0xC445, .start = 23112, .len = 3 }, + .{ .cp = 0xC446, .start = 23115, .len = 3 }, + .{ .cp = 0xC447, .start = 23118, .len = 3 }, + .{ .cp = 0xC448, .start = 23121, .len = 2 }, + .{ .cp = 0xC449, .start = 23123, .len = 3 }, + .{ .cp = 0xC44A, .start = 23126, .len = 3 }, + .{ .cp = 0xC44B, .start = 23129, .len = 3 }, + .{ .cp = 0xC44C, .start = 23132, .len = 3 }, + .{ .cp = 0xC44D, .start = 23135, .len = 3 }, + .{ .cp = 0xC44E, .start = 23138, .len = 3 }, + .{ .cp = 0xC44F, .start = 23141, .len = 3 }, + .{ .cp = 0xC450, .start = 23144, .len = 3 }, + .{ .cp = 0xC451, .start = 23147, .len = 3 }, + .{ .cp = 0xC452, .start = 23150, .len = 3 }, + .{ .cp = 0xC453, .start = 23153, .len = 3 }, + .{ .cp = 0xC454, .start = 23156, .len = 3 }, + .{ .cp = 0xC455, .start = 23159, .len = 3 }, + .{ .cp = 0xC456, .start = 23162, .len = 3 }, + .{ .cp = 0xC457, .start = 23165, .len = 3 }, + .{ .cp = 0xC458, .start = 23168, .len = 3 }, + .{ .cp = 0xC459, .start = 23171, .len = 3 }, + .{ .cp = 0xC45A, .start = 23174, .len = 3 }, + .{ .cp = 0xC45B, .start = 23177, .len = 3 }, + .{ .cp = 0xC45C, .start = 23180, .len = 3 }, + .{ .cp = 0xC45D, .start = 23183, .len = 3 }, + .{ .cp = 0xC45E, .start = 23186, .len = 3 }, + .{ .cp = 0xC45F, .start = 23189, .len = 3 }, + .{ .cp = 0xC460, .start = 23192, .len = 3 }, + .{ .cp = 0xC461, .start = 23195, .len = 3 }, + .{ .cp = 0xC462, .start = 23198, .len = 3 }, + .{ .cp = 0xC463, .start = 23201, .len = 3 }, + .{ .cp = 0xC464, .start = 23204, .len = 2 }, + .{ .cp = 0xC465, .start = 23206, .len = 3 }, + .{ .cp = 0xC466, .start = 23209, .len = 3 }, + .{ .cp = 0xC467, .start = 23212, .len = 3 }, + .{ .cp = 0xC468, .start = 23215, .len = 3 }, + .{ .cp = 0xC469, .start = 23218, .len = 3 }, + .{ .cp = 0xC46A, .start = 23221, .len = 3 }, + .{ .cp = 0xC46B, .start = 23224, .len = 3 }, + .{ .cp = 0xC46C, .start = 23227, .len = 3 }, + .{ .cp = 0xC46D, .start = 23230, .len = 3 }, + .{ .cp = 0xC46E, .start = 23233, .len = 3 }, + .{ .cp = 0xC46F, .start = 23236, .len = 3 }, + .{ .cp = 0xC470, .start = 23239, .len = 3 }, + .{ .cp = 0xC471, .start = 23242, .len = 3 }, + .{ .cp = 0xC472, .start = 23245, .len = 3 }, + .{ .cp = 0xC473, .start = 23248, .len = 3 }, + .{ .cp = 0xC474, .start = 23251, .len = 3 }, + .{ .cp = 0xC475, .start = 23254, .len = 3 }, + .{ .cp = 0xC476, .start = 23257, .len = 3 }, + .{ .cp = 0xC477, .start = 23260, .len = 3 }, + .{ .cp = 0xC478, .start = 23263, .len = 3 }, + .{ .cp = 0xC479, .start = 23266, .len = 3 }, + .{ .cp = 0xC47A, .start = 23269, .len = 3 }, + .{ .cp = 0xC47B, .start = 23272, .len = 3 }, + .{ .cp = 0xC47C, .start = 23275, .len = 3 }, + .{ .cp = 0xC47D, .start = 23278, .len = 3 }, + .{ .cp = 0xC47E, .start = 23281, .len = 3 }, + .{ .cp = 0xC47F, .start = 23284, .len = 3 }, + .{ .cp = 0xC480, .start = 23287, .len = 2 }, + .{ .cp = 0xC481, .start = 23289, .len = 3 }, + .{ .cp = 0xC482, .start = 23292, .len = 3 }, + .{ .cp = 0xC483, .start = 23295, .len = 3 }, + .{ .cp = 0xC484, .start = 23298, .len = 3 }, + .{ .cp = 0xC485, .start = 23301, .len = 3 }, + .{ .cp = 0xC486, .start = 23304, .len = 3 }, + .{ .cp = 0xC487, .start = 23307, .len = 3 }, + .{ .cp = 0xC488, .start = 23310, .len = 3 }, + .{ .cp = 0xC489, .start = 23313, .len = 3 }, + .{ .cp = 0xC48A, .start = 23316, .len = 3 }, + .{ .cp = 0xC48B, .start = 23319, .len = 3 }, + .{ .cp = 0xC48C, .start = 23322, .len = 3 }, + .{ .cp = 0xC48D, .start = 23325, .len = 3 }, + .{ .cp = 0xC48E, .start = 23328, .len = 3 }, + .{ .cp = 0xC48F, .start = 23331, .len = 3 }, + .{ .cp = 0xC490, .start = 23334, .len = 3 }, + .{ .cp = 0xC491, .start = 23337, .len = 3 }, + .{ .cp = 0xC492, .start = 23340, .len = 3 }, + .{ .cp = 0xC493, .start = 23343, .len = 3 }, + .{ .cp = 0xC494, .start = 23346, .len = 3 }, + .{ .cp = 0xC495, .start = 23349, .len = 3 }, + .{ .cp = 0xC496, .start = 23352, .len = 3 }, + .{ .cp = 0xC497, .start = 23355, .len = 3 }, + .{ .cp = 0xC498, .start = 23358, .len = 3 }, + .{ .cp = 0xC499, .start = 23361, .len = 3 }, + .{ .cp = 0xC49A, .start = 23364, .len = 3 }, + .{ .cp = 0xC49B, .start = 23367, .len = 3 }, + .{ .cp = 0xC49C, .start = 23370, .len = 2 }, + .{ .cp = 0xC49D, .start = 23372, .len = 3 }, + .{ .cp = 0xC49E, .start = 23375, .len = 3 }, + .{ .cp = 0xC49F, .start = 23378, .len = 3 }, + .{ .cp = 0xC4A0, .start = 23381, .len = 3 }, + .{ .cp = 0xC4A1, .start = 23384, .len = 3 }, + .{ .cp = 0xC4A2, .start = 23387, .len = 3 }, + .{ .cp = 0xC4A3, .start = 23390, .len = 3 }, + .{ .cp = 0xC4A4, .start = 23393, .len = 3 }, + .{ .cp = 0xC4A5, .start = 23396, .len = 3 }, + .{ .cp = 0xC4A6, .start = 23399, .len = 3 }, + .{ .cp = 0xC4A7, .start = 23402, .len = 3 }, + .{ .cp = 0xC4A8, .start = 23405, .len = 3 }, + .{ .cp = 0xC4A9, .start = 23408, .len = 3 }, + .{ .cp = 0xC4AA, .start = 23411, .len = 3 }, + .{ .cp = 0xC4AB, .start = 23414, .len = 3 }, + .{ .cp = 0xC4AC, .start = 23417, .len = 3 }, + .{ .cp = 0xC4AD, .start = 23420, .len = 3 }, + .{ .cp = 0xC4AE, .start = 23423, .len = 3 }, + .{ .cp = 0xC4AF, .start = 23426, .len = 3 }, + .{ .cp = 0xC4B0, .start = 23429, .len = 3 }, + .{ .cp = 0xC4B1, .start = 23432, .len = 3 }, + .{ .cp = 0xC4B2, .start = 23435, .len = 3 }, + .{ .cp = 0xC4B3, .start = 23438, .len = 3 }, + .{ .cp = 0xC4B4, .start = 23441, .len = 3 }, + .{ .cp = 0xC4B5, .start = 23444, .len = 3 }, + .{ .cp = 0xC4B6, .start = 23447, .len = 3 }, + .{ .cp = 0xC4B7, .start = 23450, .len = 3 }, + .{ .cp = 0xC4B8, .start = 23453, .len = 2 }, + .{ .cp = 0xC4B9, .start = 23455, .len = 3 }, + .{ .cp = 0xC4BA, .start = 23458, .len = 3 }, + .{ .cp = 0xC4BB, .start = 23461, .len = 3 }, + .{ .cp = 0xC4BC, .start = 23464, .len = 3 }, + .{ .cp = 0xC4BD, .start = 23467, .len = 3 }, + .{ .cp = 0xC4BE, .start = 23470, .len = 3 }, + .{ .cp = 0xC4BF, .start = 23473, .len = 3 }, + .{ .cp = 0xC4C0, .start = 23476, .len = 3 }, + .{ .cp = 0xC4C1, .start = 23479, .len = 3 }, + .{ .cp = 0xC4C2, .start = 23482, .len = 3 }, + .{ .cp = 0xC4C3, .start = 23485, .len = 3 }, + .{ .cp = 0xC4C4, .start = 23488, .len = 3 }, + .{ .cp = 0xC4C5, .start = 23491, .len = 3 }, + .{ .cp = 0xC4C6, .start = 23494, .len = 3 }, + .{ .cp = 0xC4C7, .start = 23497, .len = 3 }, + .{ .cp = 0xC4C8, .start = 23500, .len = 3 }, + .{ .cp = 0xC4C9, .start = 23503, .len = 3 }, + .{ .cp = 0xC4CA, .start = 23506, .len = 3 }, + .{ .cp = 0xC4CB, .start = 23509, .len = 3 }, + .{ .cp = 0xC4CC, .start = 23512, .len = 3 }, + .{ .cp = 0xC4CD, .start = 23515, .len = 3 }, + .{ .cp = 0xC4CE, .start = 23518, .len = 3 }, + .{ .cp = 0xC4CF, .start = 23521, .len = 3 }, + .{ .cp = 0xC4D0, .start = 23524, .len = 3 }, + .{ .cp = 0xC4D1, .start = 23527, .len = 3 }, + .{ .cp = 0xC4D2, .start = 23530, .len = 3 }, + .{ .cp = 0xC4D3, .start = 23533, .len = 3 }, + .{ .cp = 0xC4D4, .start = 23536, .len = 2 }, + .{ .cp = 0xC4D5, .start = 23538, .len = 3 }, + .{ .cp = 0xC4D6, .start = 23541, .len = 3 }, + .{ .cp = 0xC4D7, .start = 23544, .len = 3 }, + .{ .cp = 0xC4D8, .start = 23547, .len = 3 }, + .{ .cp = 0xC4D9, .start = 23550, .len = 3 }, + .{ .cp = 0xC4DA, .start = 23553, .len = 3 }, + .{ .cp = 0xC4DB, .start = 23556, .len = 3 }, + .{ .cp = 0xC4DC, .start = 23559, .len = 3 }, + .{ .cp = 0xC4DD, .start = 23562, .len = 3 }, + .{ .cp = 0xC4DE, .start = 23565, .len = 3 }, + .{ .cp = 0xC4DF, .start = 23568, .len = 3 }, + .{ .cp = 0xC4E0, .start = 23571, .len = 3 }, + .{ .cp = 0xC4E1, .start = 23574, .len = 3 }, + .{ .cp = 0xC4E2, .start = 23577, .len = 3 }, + .{ .cp = 0xC4E3, .start = 23580, .len = 3 }, + .{ .cp = 0xC4E4, .start = 23583, .len = 3 }, + .{ .cp = 0xC4E5, .start = 23586, .len = 3 }, + .{ .cp = 0xC4E6, .start = 23589, .len = 3 }, + .{ .cp = 0xC4E7, .start = 23592, .len = 3 }, + .{ .cp = 0xC4E8, .start = 23595, .len = 3 }, + .{ .cp = 0xC4E9, .start = 23598, .len = 3 }, + .{ .cp = 0xC4EA, .start = 23601, .len = 3 }, + .{ .cp = 0xC4EB, .start = 23604, .len = 3 }, + .{ .cp = 0xC4EC, .start = 23607, .len = 3 }, + .{ .cp = 0xC4ED, .start = 23610, .len = 3 }, + .{ .cp = 0xC4EE, .start = 23613, .len = 3 }, + .{ .cp = 0xC4EF, .start = 23616, .len = 3 }, + .{ .cp = 0xC4F0, .start = 23619, .len = 2 }, + .{ .cp = 0xC4F1, .start = 23621, .len = 3 }, + .{ .cp = 0xC4F2, .start = 23624, .len = 3 }, + .{ .cp = 0xC4F3, .start = 23627, .len = 3 }, + .{ .cp = 0xC4F4, .start = 23630, .len = 3 }, + .{ .cp = 0xC4F5, .start = 23633, .len = 3 }, + .{ .cp = 0xC4F6, .start = 23636, .len = 3 }, + .{ .cp = 0xC4F7, .start = 23639, .len = 3 }, + .{ .cp = 0xC4F8, .start = 23642, .len = 3 }, + .{ .cp = 0xC4F9, .start = 23645, .len = 3 }, + .{ .cp = 0xC4FA, .start = 23648, .len = 3 }, + .{ .cp = 0xC4FB, .start = 23651, .len = 3 }, + .{ .cp = 0xC4FC, .start = 23654, .len = 3 }, + .{ .cp = 0xC4FD, .start = 23657, .len = 3 }, + .{ .cp = 0xC4FE, .start = 23660, .len = 3 }, + .{ .cp = 0xC4FF, .start = 23663, .len = 3 }, + .{ .cp = 0xC500, .start = 23666, .len = 3 }, + .{ .cp = 0xC501, .start = 23669, .len = 3 }, + .{ .cp = 0xC502, .start = 23672, .len = 3 }, + .{ .cp = 0xC503, .start = 23675, .len = 3 }, + .{ .cp = 0xC504, .start = 23678, .len = 3 }, + .{ .cp = 0xC505, .start = 23681, .len = 3 }, + .{ .cp = 0xC506, .start = 23684, .len = 3 }, + .{ .cp = 0xC507, .start = 23687, .len = 3 }, + .{ .cp = 0xC508, .start = 23690, .len = 3 }, + .{ .cp = 0xC509, .start = 23693, .len = 3 }, + .{ .cp = 0xC50A, .start = 23696, .len = 3 }, + .{ .cp = 0xC50B, .start = 23699, .len = 3 }, + .{ .cp = 0xC50C, .start = 23702, .len = 2 }, + .{ .cp = 0xC50D, .start = 23704, .len = 3 }, + .{ .cp = 0xC50E, .start = 23707, .len = 3 }, + .{ .cp = 0xC50F, .start = 23710, .len = 3 }, + .{ .cp = 0xC510, .start = 23713, .len = 3 }, + .{ .cp = 0xC511, .start = 23716, .len = 3 }, + .{ .cp = 0xC512, .start = 23719, .len = 3 }, + .{ .cp = 0xC513, .start = 23722, .len = 3 }, + .{ .cp = 0xC514, .start = 23725, .len = 3 }, + .{ .cp = 0xC515, .start = 23728, .len = 3 }, + .{ .cp = 0xC516, .start = 23731, .len = 3 }, + .{ .cp = 0xC517, .start = 23734, .len = 3 }, + .{ .cp = 0xC518, .start = 23737, .len = 3 }, + .{ .cp = 0xC519, .start = 23740, .len = 3 }, + .{ .cp = 0xC51A, .start = 23743, .len = 3 }, + .{ .cp = 0xC51B, .start = 23746, .len = 3 }, + .{ .cp = 0xC51C, .start = 23749, .len = 3 }, + .{ .cp = 0xC51D, .start = 23752, .len = 3 }, + .{ .cp = 0xC51E, .start = 23755, .len = 3 }, + .{ .cp = 0xC51F, .start = 23758, .len = 3 }, + .{ .cp = 0xC520, .start = 23761, .len = 3 }, + .{ .cp = 0xC521, .start = 23764, .len = 3 }, + .{ .cp = 0xC522, .start = 23767, .len = 3 }, + .{ .cp = 0xC523, .start = 23770, .len = 3 }, + .{ .cp = 0xC524, .start = 23773, .len = 3 }, + .{ .cp = 0xC525, .start = 23776, .len = 3 }, + .{ .cp = 0xC526, .start = 23779, .len = 3 }, + .{ .cp = 0xC527, .start = 23782, .len = 3 }, + .{ .cp = 0xC528, .start = 23785, .len = 2 }, + .{ .cp = 0xC529, .start = 23787, .len = 3 }, + .{ .cp = 0xC52A, .start = 23790, .len = 3 }, + .{ .cp = 0xC52B, .start = 23793, .len = 3 }, + .{ .cp = 0xC52C, .start = 23796, .len = 3 }, + .{ .cp = 0xC52D, .start = 23799, .len = 3 }, + .{ .cp = 0xC52E, .start = 23802, .len = 3 }, + .{ .cp = 0xC52F, .start = 23805, .len = 3 }, + .{ .cp = 0xC530, .start = 23808, .len = 3 }, + .{ .cp = 0xC531, .start = 23811, .len = 3 }, + .{ .cp = 0xC532, .start = 23814, .len = 3 }, + .{ .cp = 0xC533, .start = 23817, .len = 3 }, + .{ .cp = 0xC534, .start = 23820, .len = 3 }, + .{ .cp = 0xC535, .start = 23823, .len = 3 }, + .{ .cp = 0xC536, .start = 23826, .len = 3 }, + .{ .cp = 0xC537, .start = 23829, .len = 3 }, + .{ .cp = 0xC538, .start = 23832, .len = 3 }, + .{ .cp = 0xC539, .start = 23835, .len = 3 }, + .{ .cp = 0xC53A, .start = 23838, .len = 3 }, + .{ .cp = 0xC53B, .start = 23841, .len = 3 }, + .{ .cp = 0xC53C, .start = 23844, .len = 3 }, + .{ .cp = 0xC53D, .start = 23847, .len = 3 }, + .{ .cp = 0xC53E, .start = 23850, .len = 3 }, + .{ .cp = 0xC53F, .start = 23853, .len = 3 }, + .{ .cp = 0xC540, .start = 23856, .len = 3 }, + .{ .cp = 0xC541, .start = 23859, .len = 3 }, + .{ .cp = 0xC542, .start = 23862, .len = 3 }, + .{ .cp = 0xC543, .start = 23865, .len = 3 }, + .{ .cp = 0xC544, .start = 23868, .len = 2 }, + .{ .cp = 0xC545, .start = 23870, .len = 3 }, + .{ .cp = 0xC546, .start = 23873, .len = 3 }, + .{ .cp = 0xC547, .start = 23876, .len = 3 }, + .{ .cp = 0xC548, .start = 23879, .len = 3 }, + .{ .cp = 0xC549, .start = 23882, .len = 3 }, + .{ .cp = 0xC54A, .start = 23885, .len = 3 }, + .{ .cp = 0xC54B, .start = 23888, .len = 3 }, + .{ .cp = 0xC54C, .start = 23891, .len = 3 }, + .{ .cp = 0xC54D, .start = 23894, .len = 3 }, + .{ .cp = 0xC54E, .start = 23897, .len = 3 }, + .{ .cp = 0xC54F, .start = 23900, .len = 3 }, + .{ .cp = 0xC550, .start = 23903, .len = 3 }, + .{ .cp = 0xC551, .start = 23906, .len = 3 }, + .{ .cp = 0xC552, .start = 23909, .len = 3 }, + .{ .cp = 0xC553, .start = 23912, .len = 3 }, + .{ .cp = 0xC554, .start = 23915, .len = 3 }, + .{ .cp = 0xC555, .start = 23918, .len = 3 }, + .{ .cp = 0xC556, .start = 23921, .len = 3 }, + .{ .cp = 0xC557, .start = 23924, .len = 3 }, + .{ .cp = 0xC558, .start = 23927, .len = 3 }, + .{ .cp = 0xC559, .start = 23930, .len = 3 }, + .{ .cp = 0xC55A, .start = 23933, .len = 3 }, + .{ .cp = 0xC55B, .start = 23936, .len = 3 }, + .{ .cp = 0xC55C, .start = 23939, .len = 3 }, + .{ .cp = 0xC55D, .start = 23942, .len = 3 }, + .{ .cp = 0xC55E, .start = 23945, .len = 3 }, + .{ .cp = 0xC55F, .start = 23948, .len = 3 }, + .{ .cp = 0xC560, .start = 23951, .len = 2 }, + .{ .cp = 0xC561, .start = 23953, .len = 3 }, + .{ .cp = 0xC562, .start = 23956, .len = 3 }, + .{ .cp = 0xC563, .start = 23959, .len = 3 }, + .{ .cp = 0xC564, .start = 23962, .len = 3 }, + .{ .cp = 0xC565, .start = 23965, .len = 3 }, + .{ .cp = 0xC566, .start = 23968, .len = 3 }, + .{ .cp = 0xC567, .start = 23971, .len = 3 }, + .{ .cp = 0xC568, .start = 23974, .len = 3 }, + .{ .cp = 0xC569, .start = 23977, .len = 3 }, + .{ .cp = 0xC56A, .start = 23980, .len = 3 }, + .{ .cp = 0xC56B, .start = 23983, .len = 3 }, + .{ .cp = 0xC56C, .start = 23986, .len = 3 }, + .{ .cp = 0xC56D, .start = 23989, .len = 3 }, + .{ .cp = 0xC56E, .start = 23992, .len = 3 }, + .{ .cp = 0xC56F, .start = 23995, .len = 3 }, + .{ .cp = 0xC570, .start = 23998, .len = 3 }, + .{ .cp = 0xC571, .start = 24001, .len = 3 }, + .{ .cp = 0xC572, .start = 24004, .len = 3 }, + .{ .cp = 0xC573, .start = 24007, .len = 3 }, + .{ .cp = 0xC574, .start = 24010, .len = 3 }, + .{ .cp = 0xC575, .start = 24013, .len = 3 }, + .{ .cp = 0xC576, .start = 24016, .len = 3 }, + .{ .cp = 0xC577, .start = 24019, .len = 3 }, + .{ .cp = 0xC578, .start = 24022, .len = 3 }, + .{ .cp = 0xC579, .start = 24025, .len = 3 }, + .{ .cp = 0xC57A, .start = 24028, .len = 3 }, + .{ .cp = 0xC57B, .start = 24031, .len = 3 }, + .{ .cp = 0xC57C, .start = 24034, .len = 2 }, + .{ .cp = 0xC57D, .start = 24036, .len = 3 }, + .{ .cp = 0xC57E, .start = 24039, .len = 3 }, + .{ .cp = 0xC57F, .start = 24042, .len = 3 }, + .{ .cp = 0xC580, .start = 24045, .len = 3 }, + .{ .cp = 0xC581, .start = 24048, .len = 3 }, + .{ .cp = 0xC582, .start = 24051, .len = 3 }, + .{ .cp = 0xC583, .start = 24054, .len = 3 }, + .{ .cp = 0xC584, .start = 24057, .len = 3 }, + .{ .cp = 0xC585, .start = 24060, .len = 3 }, + .{ .cp = 0xC586, .start = 24063, .len = 3 }, + .{ .cp = 0xC587, .start = 24066, .len = 3 }, + .{ .cp = 0xC588, .start = 24069, .len = 3 }, + .{ .cp = 0xC589, .start = 24072, .len = 3 }, + .{ .cp = 0xC58A, .start = 24075, .len = 3 }, + .{ .cp = 0xC58B, .start = 24078, .len = 3 }, + .{ .cp = 0xC58C, .start = 24081, .len = 3 }, + .{ .cp = 0xC58D, .start = 24084, .len = 3 }, + .{ .cp = 0xC58E, .start = 24087, .len = 3 }, + .{ .cp = 0xC58F, .start = 24090, .len = 3 }, + .{ .cp = 0xC590, .start = 24093, .len = 3 }, + .{ .cp = 0xC591, .start = 24096, .len = 3 }, + .{ .cp = 0xC592, .start = 24099, .len = 3 }, + .{ .cp = 0xC593, .start = 24102, .len = 3 }, + .{ .cp = 0xC594, .start = 24105, .len = 3 }, + .{ .cp = 0xC595, .start = 24108, .len = 3 }, + .{ .cp = 0xC596, .start = 24111, .len = 3 }, + .{ .cp = 0xC597, .start = 24114, .len = 3 }, + .{ .cp = 0xC598, .start = 24117, .len = 2 }, + .{ .cp = 0xC599, .start = 24119, .len = 3 }, + .{ .cp = 0xC59A, .start = 24122, .len = 3 }, + .{ .cp = 0xC59B, .start = 24125, .len = 3 }, + .{ .cp = 0xC59C, .start = 24128, .len = 3 }, + .{ .cp = 0xC59D, .start = 24131, .len = 3 }, + .{ .cp = 0xC59E, .start = 24134, .len = 3 }, + .{ .cp = 0xC59F, .start = 24137, .len = 3 }, + .{ .cp = 0xC5A0, .start = 24140, .len = 3 }, + .{ .cp = 0xC5A1, .start = 24143, .len = 3 }, + .{ .cp = 0xC5A2, .start = 24146, .len = 3 }, + .{ .cp = 0xC5A3, .start = 24149, .len = 3 }, + .{ .cp = 0xC5A4, .start = 24152, .len = 3 }, + .{ .cp = 0xC5A5, .start = 24155, .len = 3 }, + .{ .cp = 0xC5A6, .start = 24158, .len = 3 }, + .{ .cp = 0xC5A7, .start = 24161, .len = 3 }, + .{ .cp = 0xC5A8, .start = 24164, .len = 3 }, + .{ .cp = 0xC5A9, .start = 24167, .len = 3 }, + .{ .cp = 0xC5AA, .start = 24170, .len = 3 }, + .{ .cp = 0xC5AB, .start = 24173, .len = 3 }, + .{ .cp = 0xC5AC, .start = 24176, .len = 3 }, + .{ .cp = 0xC5AD, .start = 24179, .len = 3 }, + .{ .cp = 0xC5AE, .start = 24182, .len = 3 }, + .{ .cp = 0xC5AF, .start = 24185, .len = 3 }, + .{ .cp = 0xC5B0, .start = 24188, .len = 3 }, + .{ .cp = 0xC5B1, .start = 24191, .len = 3 }, + .{ .cp = 0xC5B2, .start = 24194, .len = 3 }, + .{ .cp = 0xC5B3, .start = 24197, .len = 3 }, + .{ .cp = 0xC5B4, .start = 24200, .len = 2 }, + .{ .cp = 0xC5B5, .start = 24202, .len = 3 }, + .{ .cp = 0xC5B6, .start = 24205, .len = 3 }, + .{ .cp = 0xC5B7, .start = 24208, .len = 3 }, + .{ .cp = 0xC5B8, .start = 24211, .len = 3 }, + .{ .cp = 0xC5B9, .start = 24214, .len = 3 }, + .{ .cp = 0xC5BA, .start = 24217, .len = 3 }, + .{ .cp = 0xC5BB, .start = 24220, .len = 3 }, + .{ .cp = 0xC5BC, .start = 24223, .len = 3 }, + .{ .cp = 0xC5BD, .start = 24226, .len = 3 }, + .{ .cp = 0xC5BE, .start = 24229, .len = 3 }, + .{ .cp = 0xC5BF, .start = 24232, .len = 3 }, + .{ .cp = 0xC5C0, .start = 24235, .len = 3 }, + .{ .cp = 0xC5C1, .start = 24238, .len = 3 }, + .{ .cp = 0xC5C2, .start = 24241, .len = 3 }, + .{ .cp = 0xC5C3, .start = 24244, .len = 3 }, + .{ .cp = 0xC5C4, .start = 24247, .len = 3 }, + .{ .cp = 0xC5C5, .start = 24250, .len = 3 }, + .{ .cp = 0xC5C6, .start = 24253, .len = 3 }, + .{ .cp = 0xC5C7, .start = 24256, .len = 3 }, + .{ .cp = 0xC5C8, .start = 24259, .len = 3 }, + .{ .cp = 0xC5C9, .start = 24262, .len = 3 }, + .{ .cp = 0xC5CA, .start = 24265, .len = 3 }, + .{ .cp = 0xC5CB, .start = 24268, .len = 3 }, + .{ .cp = 0xC5CC, .start = 24271, .len = 3 }, + .{ .cp = 0xC5CD, .start = 24274, .len = 3 }, + .{ .cp = 0xC5CE, .start = 24277, .len = 3 }, + .{ .cp = 0xC5CF, .start = 24280, .len = 3 }, + .{ .cp = 0xC5D0, .start = 24283, .len = 2 }, + .{ .cp = 0xC5D1, .start = 24285, .len = 3 }, + .{ .cp = 0xC5D2, .start = 24288, .len = 3 }, + .{ .cp = 0xC5D3, .start = 24291, .len = 3 }, + .{ .cp = 0xC5D4, .start = 24294, .len = 3 }, + .{ .cp = 0xC5D5, .start = 24297, .len = 3 }, + .{ .cp = 0xC5D6, .start = 24300, .len = 3 }, + .{ .cp = 0xC5D7, .start = 24303, .len = 3 }, + .{ .cp = 0xC5D8, .start = 24306, .len = 3 }, + .{ .cp = 0xC5D9, .start = 24309, .len = 3 }, + .{ .cp = 0xC5DA, .start = 24312, .len = 3 }, + .{ .cp = 0xC5DB, .start = 24315, .len = 3 }, + .{ .cp = 0xC5DC, .start = 24318, .len = 3 }, + .{ .cp = 0xC5DD, .start = 24321, .len = 3 }, + .{ .cp = 0xC5DE, .start = 24324, .len = 3 }, + .{ .cp = 0xC5DF, .start = 24327, .len = 3 }, + .{ .cp = 0xC5E0, .start = 24330, .len = 3 }, + .{ .cp = 0xC5E1, .start = 24333, .len = 3 }, + .{ .cp = 0xC5E2, .start = 24336, .len = 3 }, + .{ .cp = 0xC5E3, .start = 24339, .len = 3 }, + .{ .cp = 0xC5E4, .start = 24342, .len = 3 }, + .{ .cp = 0xC5E5, .start = 24345, .len = 3 }, + .{ .cp = 0xC5E6, .start = 24348, .len = 3 }, + .{ .cp = 0xC5E7, .start = 24351, .len = 3 }, + .{ .cp = 0xC5E8, .start = 24354, .len = 3 }, + .{ .cp = 0xC5E9, .start = 24357, .len = 3 }, + .{ .cp = 0xC5EA, .start = 24360, .len = 3 }, + .{ .cp = 0xC5EB, .start = 24363, .len = 3 }, + .{ .cp = 0xC5EC, .start = 24366, .len = 2 }, + .{ .cp = 0xC5ED, .start = 24368, .len = 3 }, + .{ .cp = 0xC5EE, .start = 24371, .len = 3 }, + .{ .cp = 0xC5EF, .start = 24374, .len = 3 }, + .{ .cp = 0xC5F0, .start = 24377, .len = 3 }, + .{ .cp = 0xC5F1, .start = 24380, .len = 3 }, + .{ .cp = 0xC5F2, .start = 24383, .len = 3 }, + .{ .cp = 0xC5F3, .start = 24386, .len = 3 }, + .{ .cp = 0xC5F4, .start = 24389, .len = 3 }, + .{ .cp = 0xC5F5, .start = 24392, .len = 3 }, + .{ .cp = 0xC5F6, .start = 24395, .len = 3 }, + .{ .cp = 0xC5F7, .start = 24398, .len = 3 }, + .{ .cp = 0xC5F8, .start = 24401, .len = 3 }, + .{ .cp = 0xC5F9, .start = 24404, .len = 3 }, + .{ .cp = 0xC5FA, .start = 24407, .len = 3 }, + .{ .cp = 0xC5FB, .start = 24410, .len = 3 }, + .{ .cp = 0xC5FC, .start = 24413, .len = 3 }, + .{ .cp = 0xC5FD, .start = 24416, .len = 3 }, + .{ .cp = 0xC5FE, .start = 24419, .len = 3 }, + .{ .cp = 0xC5FF, .start = 24422, .len = 3 }, + .{ .cp = 0xC600, .start = 24425, .len = 3 }, + .{ .cp = 0xC601, .start = 24428, .len = 3 }, + .{ .cp = 0xC602, .start = 24431, .len = 3 }, + .{ .cp = 0xC603, .start = 24434, .len = 3 }, + .{ .cp = 0xC604, .start = 24437, .len = 3 }, + .{ .cp = 0xC605, .start = 24440, .len = 3 }, + .{ .cp = 0xC606, .start = 24443, .len = 3 }, + .{ .cp = 0xC607, .start = 24446, .len = 3 }, + .{ .cp = 0xC608, .start = 24449, .len = 2 }, + .{ .cp = 0xC609, .start = 24451, .len = 3 }, + .{ .cp = 0xC60A, .start = 24454, .len = 3 }, + .{ .cp = 0xC60B, .start = 24457, .len = 3 }, + .{ .cp = 0xC60C, .start = 24460, .len = 3 }, + .{ .cp = 0xC60D, .start = 24463, .len = 3 }, + .{ .cp = 0xC60E, .start = 24466, .len = 3 }, + .{ .cp = 0xC60F, .start = 24469, .len = 3 }, + .{ .cp = 0xC610, .start = 24472, .len = 3 }, + .{ .cp = 0xC611, .start = 24475, .len = 3 }, + .{ .cp = 0xC612, .start = 24478, .len = 3 }, + .{ .cp = 0xC613, .start = 24481, .len = 3 }, + .{ .cp = 0xC614, .start = 24484, .len = 3 }, + .{ .cp = 0xC615, .start = 24487, .len = 3 }, + .{ .cp = 0xC616, .start = 24490, .len = 3 }, + .{ .cp = 0xC617, .start = 24493, .len = 3 }, + .{ .cp = 0xC618, .start = 24496, .len = 3 }, + .{ .cp = 0xC619, .start = 24499, .len = 3 }, + .{ .cp = 0xC61A, .start = 24502, .len = 3 }, + .{ .cp = 0xC61B, .start = 24505, .len = 3 }, + .{ .cp = 0xC61C, .start = 24508, .len = 3 }, + .{ .cp = 0xC61D, .start = 24511, .len = 3 }, + .{ .cp = 0xC61E, .start = 24514, .len = 3 }, + .{ .cp = 0xC61F, .start = 24517, .len = 3 }, + .{ .cp = 0xC620, .start = 24520, .len = 3 }, + .{ .cp = 0xC621, .start = 24523, .len = 3 }, + .{ .cp = 0xC622, .start = 24526, .len = 3 }, + .{ .cp = 0xC623, .start = 24529, .len = 3 }, + .{ .cp = 0xC624, .start = 24532, .len = 2 }, + .{ .cp = 0xC625, .start = 24534, .len = 3 }, + .{ .cp = 0xC626, .start = 24537, .len = 3 }, + .{ .cp = 0xC627, .start = 24540, .len = 3 }, + .{ .cp = 0xC628, .start = 24543, .len = 3 }, + .{ .cp = 0xC629, .start = 24546, .len = 3 }, + .{ .cp = 0xC62A, .start = 24549, .len = 3 }, + .{ .cp = 0xC62B, .start = 24552, .len = 3 }, + .{ .cp = 0xC62C, .start = 24555, .len = 3 }, + .{ .cp = 0xC62D, .start = 24558, .len = 3 }, + .{ .cp = 0xC62E, .start = 24561, .len = 3 }, + .{ .cp = 0xC62F, .start = 24564, .len = 3 }, + .{ .cp = 0xC630, .start = 24567, .len = 3 }, + .{ .cp = 0xC631, .start = 24570, .len = 3 }, + .{ .cp = 0xC632, .start = 24573, .len = 3 }, + .{ .cp = 0xC633, .start = 24576, .len = 3 }, + .{ .cp = 0xC634, .start = 24579, .len = 3 }, + .{ .cp = 0xC635, .start = 24582, .len = 3 }, + .{ .cp = 0xC636, .start = 24585, .len = 3 }, + .{ .cp = 0xC637, .start = 24588, .len = 3 }, + .{ .cp = 0xC638, .start = 24591, .len = 3 }, + .{ .cp = 0xC639, .start = 24594, .len = 3 }, + .{ .cp = 0xC63A, .start = 24597, .len = 3 }, + .{ .cp = 0xC63B, .start = 24600, .len = 3 }, + .{ .cp = 0xC63C, .start = 24603, .len = 3 }, + .{ .cp = 0xC63D, .start = 24606, .len = 3 }, + .{ .cp = 0xC63E, .start = 24609, .len = 3 }, + .{ .cp = 0xC63F, .start = 24612, .len = 3 }, + .{ .cp = 0xC640, .start = 24615, .len = 2 }, + .{ .cp = 0xC641, .start = 24617, .len = 3 }, + .{ .cp = 0xC642, .start = 24620, .len = 3 }, + .{ .cp = 0xC643, .start = 24623, .len = 3 }, + .{ .cp = 0xC644, .start = 24626, .len = 3 }, + .{ .cp = 0xC645, .start = 24629, .len = 3 }, + .{ .cp = 0xC646, .start = 24632, .len = 3 }, + .{ .cp = 0xC647, .start = 24635, .len = 3 }, + .{ .cp = 0xC648, .start = 24638, .len = 3 }, + .{ .cp = 0xC649, .start = 24641, .len = 3 }, + .{ .cp = 0xC64A, .start = 24644, .len = 3 }, + .{ .cp = 0xC64B, .start = 24647, .len = 3 }, + .{ .cp = 0xC64C, .start = 24650, .len = 3 }, + .{ .cp = 0xC64D, .start = 24653, .len = 3 }, + .{ .cp = 0xC64E, .start = 24656, .len = 3 }, + .{ .cp = 0xC64F, .start = 24659, .len = 3 }, + .{ .cp = 0xC650, .start = 24662, .len = 3 }, + .{ .cp = 0xC651, .start = 24665, .len = 3 }, + .{ .cp = 0xC652, .start = 24668, .len = 3 }, + .{ .cp = 0xC653, .start = 24671, .len = 3 }, + .{ .cp = 0xC654, .start = 24674, .len = 3 }, + .{ .cp = 0xC655, .start = 24677, .len = 3 }, + .{ .cp = 0xC656, .start = 24680, .len = 3 }, + .{ .cp = 0xC657, .start = 24683, .len = 3 }, + .{ .cp = 0xC658, .start = 24686, .len = 3 }, + .{ .cp = 0xC659, .start = 24689, .len = 3 }, + .{ .cp = 0xC65A, .start = 24692, .len = 3 }, + .{ .cp = 0xC65B, .start = 24695, .len = 3 }, + .{ .cp = 0xC65C, .start = 24698, .len = 2 }, + .{ .cp = 0xC65D, .start = 24700, .len = 3 }, + .{ .cp = 0xC65E, .start = 24703, .len = 3 }, + .{ .cp = 0xC65F, .start = 24706, .len = 3 }, + .{ .cp = 0xC660, .start = 24709, .len = 3 }, + .{ .cp = 0xC661, .start = 24712, .len = 3 }, + .{ .cp = 0xC662, .start = 24715, .len = 3 }, + .{ .cp = 0xC663, .start = 24718, .len = 3 }, + .{ .cp = 0xC664, .start = 24721, .len = 3 }, + .{ .cp = 0xC665, .start = 24724, .len = 3 }, + .{ .cp = 0xC666, .start = 24727, .len = 3 }, + .{ .cp = 0xC667, .start = 24730, .len = 3 }, + .{ .cp = 0xC668, .start = 24733, .len = 3 }, + .{ .cp = 0xC669, .start = 24736, .len = 3 }, + .{ .cp = 0xC66A, .start = 24739, .len = 3 }, + .{ .cp = 0xC66B, .start = 24742, .len = 3 }, + .{ .cp = 0xC66C, .start = 24745, .len = 3 }, + .{ .cp = 0xC66D, .start = 24748, .len = 3 }, + .{ .cp = 0xC66E, .start = 24751, .len = 3 }, + .{ .cp = 0xC66F, .start = 24754, .len = 3 }, + .{ .cp = 0xC670, .start = 24757, .len = 3 }, + .{ .cp = 0xC671, .start = 24760, .len = 3 }, + .{ .cp = 0xC672, .start = 24763, .len = 3 }, + .{ .cp = 0xC673, .start = 24766, .len = 3 }, + .{ .cp = 0xC674, .start = 24769, .len = 3 }, + .{ .cp = 0xC675, .start = 24772, .len = 3 }, + .{ .cp = 0xC676, .start = 24775, .len = 3 }, + .{ .cp = 0xC677, .start = 24778, .len = 3 }, + .{ .cp = 0xC678, .start = 24781, .len = 2 }, + .{ .cp = 0xC679, .start = 24783, .len = 3 }, + .{ .cp = 0xC67A, .start = 24786, .len = 3 }, + .{ .cp = 0xC67B, .start = 24789, .len = 3 }, + .{ .cp = 0xC67C, .start = 24792, .len = 3 }, + .{ .cp = 0xC67D, .start = 24795, .len = 3 }, + .{ .cp = 0xC67E, .start = 24798, .len = 3 }, + .{ .cp = 0xC67F, .start = 24801, .len = 3 }, + .{ .cp = 0xC680, .start = 24804, .len = 3 }, + .{ .cp = 0xC681, .start = 24807, .len = 3 }, + .{ .cp = 0xC682, .start = 24810, .len = 3 }, + .{ .cp = 0xC683, .start = 24813, .len = 3 }, + .{ .cp = 0xC684, .start = 24816, .len = 3 }, + .{ .cp = 0xC685, .start = 24819, .len = 3 }, + .{ .cp = 0xC686, .start = 24822, .len = 3 }, + .{ .cp = 0xC687, .start = 24825, .len = 3 }, + .{ .cp = 0xC688, .start = 24828, .len = 3 }, + .{ .cp = 0xC689, .start = 24831, .len = 3 }, + .{ .cp = 0xC68A, .start = 24834, .len = 3 }, + .{ .cp = 0xC68B, .start = 24837, .len = 3 }, + .{ .cp = 0xC68C, .start = 24840, .len = 3 }, + .{ .cp = 0xC68D, .start = 24843, .len = 3 }, + .{ .cp = 0xC68E, .start = 24846, .len = 3 }, + .{ .cp = 0xC68F, .start = 24849, .len = 3 }, + .{ .cp = 0xC690, .start = 24852, .len = 3 }, + .{ .cp = 0xC691, .start = 24855, .len = 3 }, + .{ .cp = 0xC692, .start = 24858, .len = 3 }, + .{ .cp = 0xC693, .start = 24861, .len = 3 }, + .{ .cp = 0xC694, .start = 24864, .len = 2 }, + .{ .cp = 0xC695, .start = 24866, .len = 3 }, + .{ .cp = 0xC696, .start = 24869, .len = 3 }, + .{ .cp = 0xC697, .start = 24872, .len = 3 }, + .{ .cp = 0xC698, .start = 24875, .len = 3 }, + .{ .cp = 0xC699, .start = 24878, .len = 3 }, + .{ .cp = 0xC69A, .start = 24881, .len = 3 }, + .{ .cp = 0xC69B, .start = 24884, .len = 3 }, + .{ .cp = 0xC69C, .start = 24887, .len = 3 }, + .{ .cp = 0xC69D, .start = 24890, .len = 3 }, + .{ .cp = 0xC69E, .start = 24893, .len = 3 }, + .{ .cp = 0xC69F, .start = 24896, .len = 3 }, + .{ .cp = 0xC6A0, .start = 24899, .len = 3 }, + .{ .cp = 0xC6A1, .start = 24902, .len = 3 }, + .{ .cp = 0xC6A2, .start = 24905, .len = 3 }, + .{ .cp = 0xC6A3, .start = 24908, .len = 3 }, + .{ .cp = 0xC6A4, .start = 24911, .len = 3 }, + .{ .cp = 0xC6A5, .start = 24914, .len = 3 }, + .{ .cp = 0xC6A6, .start = 24917, .len = 3 }, + .{ .cp = 0xC6A7, .start = 24920, .len = 3 }, + .{ .cp = 0xC6A8, .start = 24923, .len = 3 }, + .{ .cp = 0xC6A9, .start = 24926, .len = 3 }, + .{ .cp = 0xC6AA, .start = 24929, .len = 3 }, + .{ .cp = 0xC6AB, .start = 24932, .len = 3 }, + .{ .cp = 0xC6AC, .start = 24935, .len = 3 }, + .{ .cp = 0xC6AD, .start = 24938, .len = 3 }, + .{ .cp = 0xC6AE, .start = 24941, .len = 3 }, + .{ .cp = 0xC6AF, .start = 24944, .len = 3 }, + .{ .cp = 0xC6B0, .start = 24947, .len = 2 }, + .{ .cp = 0xC6B1, .start = 24949, .len = 3 }, + .{ .cp = 0xC6B2, .start = 24952, .len = 3 }, + .{ .cp = 0xC6B3, .start = 24955, .len = 3 }, + .{ .cp = 0xC6B4, .start = 24958, .len = 3 }, + .{ .cp = 0xC6B5, .start = 24961, .len = 3 }, + .{ .cp = 0xC6B6, .start = 24964, .len = 3 }, + .{ .cp = 0xC6B7, .start = 24967, .len = 3 }, + .{ .cp = 0xC6B8, .start = 24970, .len = 3 }, + .{ .cp = 0xC6B9, .start = 24973, .len = 3 }, + .{ .cp = 0xC6BA, .start = 24976, .len = 3 }, + .{ .cp = 0xC6BB, .start = 24979, .len = 3 }, + .{ .cp = 0xC6BC, .start = 24982, .len = 3 }, + .{ .cp = 0xC6BD, .start = 24985, .len = 3 }, + .{ .cp = 0xC6BE, .start = 24988, .len = 3 }, + .{ .cp = 0xC6BF, .start = 24991, .len = 3 }, + .{ .cp = 0xC6C0, .start = 24994, .len = 3 }, + .{ .cp = 0xC6C1, .start = 24997, .len = 3 }, + .{ .cp = 0xC6C2, .start = 25000, .len = 3 }, + .{ .cp = 0xC6C3, .start = 25003, .len = 3 }, + .{ .cp = 0xC6C4, .start = 25006, .len = 3 }, + .{ .cp = 0xC6C5, .start = 25009, .len = 3 }, + .{ .cp = 0xC6C6, .start = 25012, .len = 3 }, + .{ .cp = 0xC6C7, .start = 25015, .len = 3 }, + .{ .cp = 0xC6C8, .start = 25018, .len = 3 }, + .{ .cp = 0xC6C9, .start = 25021, .len = 3 }, + .{ .cp = 0xC6CA, .start = 25024, .len = 3 }, + .{ .cp = 0xC6CB, .start = 25027, .len = 3 }, + .{ .cp = 0xC6CC, .start = 25030, .len = 2 }, + .{ .cp = 0xC6CD, .start = 25032, .len = 3 }, + .{ .cp = 0xC6CE, .start = 25035, .len = 3 }, + .{ .cp = 0xC6CF, .start = 25038, .len = 3 }, + .{ .cp = 0xC6D0, .start = 25041, .len = 3 }, + .{ .cp = 0xC6D1, .start = 25044, .len = 3 }, + .{ .cp = 0xC6D2, .start = 25047, .len = 3 }, + .{ .cp = 0xC6D3, .start = 25050, .len = 3 }, + .{ .cp = 0xC6D4, .start = 25053, .len = 3 }, + .{ .cp = 0xC6D5, .start = 25056, .len = 3 }, + .{ .cp = 0xC6D6, .start = 25059, .len = 3 }, + .{ .cp = 0xC6D7, .start = 25062, .len = 3 }, + .{ .cp = 0xC6D8, .start = 25065, .len = 3 }, + .{ .cp = 0xC6D9, .start = 25068, .len = 3 }, + .{ .cp = 0xC6DA, .start = 25071, .len = 3 }, + .{ .cp = 0xC6DB, .start = 25074, .len = 3 }, + .{ .cp = 0xC6DC, .start = 25077, .len = 3 }, + .{ .cp = 0xC6DD, .start = 25080, .len = 3 }, + .{ .cp = 0xC6DE, .start = 25083, .len = 3 }, + .{ .cp = 0xC6DF, .start = 25086, .len = 3 }, + .{ .cp = 0xC6E0, .start = 25089, .len = 3 }, + .{ .cp = 0xC6E1, .start = 25092, .len = 3 }, + .{ .cp = 0xC6E2, .start = 25095, .len = 3 }, + .{ .cp = 0xC6E3, .start = 25098, .len = 3 }, + .{ .cp = 0xC6E4, .start = 25101, .len = 3 }, + .{ .cp = 0xC6E5, .start = 25104, .len = 3 }, + .{ .cp = 0xC6E6, .start = 25107, .len = 3 }, + .{ .cp = 0xC6E7, .start = 25110, .len = 3 }, + .{ .cp = 0xC6E8, .start = 25113, .len = 2 }, + .{ .cp = 0xC6E9, .start = 25115, .len = 3 }, + .{ .cp = 0xC6EA, .start = 25118, .len = 3 }, + .{ .cp = 0xC6EB, .start = 25121, .len = 3 }, + .{ .cp = 0xC6EC, .start = 25124, .len = 3 }, + .{ .cp = 0xC6ED, .start = 25127, .len = 3 }, + .{ .cp = 0xC6EE, .start = 25130, .len = 3 }, + .{ .cp = 0xC6EF, .start = 25133, .len = 3 }, + .{ .cp = 0xC6F0, .start = 25136, .len = 3 }, + .{ .cp = 0xC6F1, .start = 25139, .len = 3 }, + .{ .cp = 0xC6F2, .start = 25142, .len = 3 }, + .{ .cp = 0xC6F3, .start = 25145, .len = 3 }, + .{ .cp = 0xC6F4, .start = 25148, .len = 3 }, + .{ .cp = 0xC6F5, .start = 25151, .len = 3 }, + .{ .cp = 0xC6F6, .start = 25154, .len = 3 }, + .{ .cp = 0xC6F7, .start = 25157, .len = 3 }, + .{ .cp = 0xC6F8, .start = 25160, .len = 3 }, + .{ .cp = 0xC6F9, .start = 25163, .len = 3 }, + .{ .cp = 0xC6FA, .start = 25166, .len = 3 }, + .{ .cp = 0xC6FB, .start = 25169, .len = 3 }, + .{ .cp = 0xC6FC, .start = 25172, .len = 3 }, + .{ .cp = 0xC6FD, .start = 25175, .len = 3 }, + .{ .cp = 0xC6FE, .start = 25178, .len = 3 }, + .{ .cp = 0xC6FF, .start = 25181, .len = 3 }, + .{ .cp = 0xC700, .start = 25184, .len = 3 }, + .{ .cp = 0xC701, .start = 25187, .len = 3 }, + .{ .cp = 0xC702, .start = 25190, .len = 3 }, + .{ .cp = 0xC703, .start = 25193, .len = 3 }, + .{ .cp = 0xC704, .start = 25196, .len = 2 }, + .{ .cp = 0xC705, .start = 25198, .len = 3 }, + .{ .cp = 0xC706, .start = 25201, .len = 3 }, + .{ .cp = 0xC707, .start = 25204, .len = 3 }, + .{ .cp = 0xC708, .start = 25207, .len = 3 }, + .{ .cp = 0xC709, .start = 25210, .len = 3 }, + .{ .cp = 0xC70A, .start = 25213, .len = 3 }, + .{ .cp = 0xC70B, .start = 25216, .len = 3 }, + .{ .cp = 0xC70C, .start = 25219, .len = 3 }, + .{ .cp = 0xC70D, .start = 25222, .len = 3 }, + .{ .cp = 0xC70E, .start = 25225, .len = 3 }, + .{ .cp = 0xC70F, .start = 25228, .len = 3 }, + .{ .cp = 0xC710, .start = 25231, .len = 3 }, + .{ .cp = 0xC711, .start = 25234, .len = 3 }, + .{ .cp = 0xC712, .start = 25237, .len = 3 }, + .{ .cp = 0xC713, .start = 25240, .len = 3 }, + .{ .cp = 0xC714, .start = 25243, .len = 3 }, + .{ .cp = 0xC715, .start = 25246, .len = 3 }, + .{ .cp = 0xC716, .start = 25249, .len = 3 }, + .{ .cp = 0xC717, .start = 25252, .len = 3 }, + .{ .cp = 0xC718, .start = 25255, .len = 3 }, + .{ .cp = 0xC719, .start = 25258, .len = 3 }, + .{ .cp = 0xC71A, .start = 25261, .len = 3 }, + .{ .cp = 0xC71B, .start = 25264, .len = 3 }, + .{ .cp = 0xC71C, .start = 25267, .len = 3 }, + .{ .cp = 0xC71D, .start = 25270, .len = 3 }, + .{ .cp = 0xC71E, .start = 25273, .len = 3 }, + .{ .cp = 0xC71F, .start = 25276, .len = 3 }, + .{ .cp = 0xC720, .start = 25279, .len = 2 }, + .{ .cp = 0xC721, .start = 25281, .len = 3 }, + .{ .cp = 0xC722, .start = 25284, .len = 3 }, + .{ .cp = 0xC723, .start = 25287, .len = 3 }, + .{ .cp = 0xC724, .start = 25290, .len = 3 }, + .{ .cp = 0xC725, .start = 25293, .len = 3 }, + .{ .cp = 0xC726, .start = 25296, .len = 3 }, + .{ .cp = 0xC727, .start = 25299, .len = 3 }, + .{ .cp = 0xC728, .start = 25302, .len = 3 }, + .{ .cp = 0xC729, .start = 25305, .len = 3 }, + .{ .cp = 0xC72A, .start = 25308, .len = 3 }, + .{ .cp = 0xC72B, .start = 25311, .len = 3 }, + .{ .cp = 0xC72C, .start = 25314, .len = 3 }, + .{ .cp = 0xC72D, .start = 25317, .len = 3 }, + .{ .cp = 0xC72E, .start = 25320, .len = 3 }, + .{ .cp = 0xC72F, .start = 25323, .len = 3 }, + .{ .cp = 0xC730, .start = 25326, .len = 3 }, + .{ .cp = 0xC731, .start = 25329, .len = 3 }, + .{ .cp = 0xC732, .start = 25332, .len = 3 }, + .{ .cp = 0xC733, .start = 25335, .len = 3 }, + .{ .cp = 0xC734, .start = 25338, .len = 3 }, + .{ .cp = 0xC735, .start = 25341, .len = 3 }, + .{ .cp = 0xC736, .start = 25344, .len = 3 }, + .{ .cp = 0xC737, .start = 25347, .len = 3 }, + .{ .cp = 0xC738, .start = 25350, .len = 3 }, + .{ .cp = 0xC739, .start = 25353, .len = 3 }, + .{ .cp = 0xC73A, .start = 25356, .len = 3 }, + .{ .cp = 0xC73B, .start = 25359, .len = 3 }, + .{ .cp = 0xC73C, .start = 25362, .len = 2 }, + .{ .cp = 0xC73D, .start = 25364, .len = 3 }, + .{ .cp = 0xC73E, .start = 25367, .len = 3 }, + .{ .cp = 0xC73F, .start = 25370, .len = 3 }, + .{ .cp = 0xC740, .start = 25373, .len = 3 }, + .{ .cp = 0xC741, .start = 25376, .len = 3 }, + .{ .cp = 0xC742, .start = 25379, .len = 3 }, + .{ .cp = 0xC743, .start = 25382, .len = 3 }, + .{ .cp = 0xC744, .start = 25385, .len = 3 }, + .{ .cp = 0xC745, .start = 25388, .len = 3 }, + .{ .cp = 0xC746, .start = 25391, .len = 3 }, + .{ .cp = 0xC747, .start = 25394, .len = 3 }, + .{ .cp = 0xC748, .start = 25397, .len = 3 }, + .{ .cp = 0xC749, .start = 25400, .len = 3 }, + .{ .cp = 0xC74A, .start = 25403, .len = 3 }, + .{ .cp = 0xC74B, .start = 25406, .len = 3 }, + .{ .cp = 0xC74C, .start = 25409, .len = 3 }, + .{ .cp = 0xC74D, .start = 25412, .len = 3 }, + .{ .cp = 0xC74E, .start = 25415, .len = 3 }, + .{ .cp = 0xC74F, .start = 25418, .len = 3 }, + .{ .cp = 0xC750, .start = 25421, .len = 3 }, + .{ .cp = 0xC751, .start = 25424, .len = 3 }, + .{ .cp = 0xC752, .start = 25427, .len = 3 }, + .{ .cp = 0xC753, .start = 25430, .len = 3 }, + .{ .cp = 0xC754, .start = 25433, .len = 3 }, + .{ .cp = 0xC755, .start = 25436, .len = 3 }, + .{ .cp = 0xC756, .start = 25439, .len = 3 }, + .{ .cp = 0xC757, .start = 25442, .len = 3 }, + .{ .cp = 0xC758, .start = 25445, .len = 2 }, + .{ .cp = 0xC759, .start = 25447, .len = 3 }, + .{ .cp = 0xC75A, .start = 25450, .len = 3 }, + .{ .cp = 0xC75B, .start = 25453, .len = 3 }, + .{ .cp = 0xC75C, .start = 25456, .len = 3 }, + .{ .cp = 0xC75D, .start = 25459, .len = 3 }, + .{ .cp = 0xC75E, .start = 25462, .len = 3 }, + .{ .cp = 0xC75F, .start = 25465, .len = 3 }, + .{ .cp = 0xC760, .start = 25468, .len = 3 }, + .{ .cp = 0xC761, .start = 25471, .len = 3 }, + .{ .cp = 0xC762, .start = 25474, .len = 3 }, + .{ .cp = 0xC763, .start = 25477, .len = 3 }, + .{ .cp = 0xC764, .start = 25480, .len = 3 }, + .{ .cp = 0xC765, .start = 25483, .len = 3 }, + .{ .cp = 0xC766, .start = 25486, .len = 3 }, + .{ .cp = 0xC767, .start = 25489, .len = 3 }, + .{ .cp = 0xC768, .start = 25492, .len = 3 }, + .{ .cp = 0xC769, .start = 25495, .len = 3 }, + .{ .cp = 0xC76A, .start = 25498, .len = 3 }, + .{ .cp = 0xC76B, .start = 25501, .len = 3 }, + .{ .cp = 0xC76C, .start = 25504, .len = 3 }, + .{ .cp = 0xC76D, .start = 25507, .len = 3 }, + .{ .cp = 0xC76E, .start = 25510, .len = 3 }, + .{ .cp = 0xC76F, .start = 25513, .len = 3 }, + .{ .cp = 0xC770, .start = 25516, .len = 3 }, + .{ .cp = 0xC771, .start = 25519, .len = 3 }, + .{ .cp = 0xC772, .start = 25522, .len = 3 }, + .{ .cp = 0xC773, .start = 25525, .len = 3 }, + .{ .cp = 0xC774, .start = 25528, .len = 2 }, + .{ .cp = 0xC775, .start = 25530, .len = 3 }, + .{ .cp = 0xC776, .start = 25533, .len = 3 }, + .{ .cp = 0xC777, .start = 25536, .len = 3 }, + .{ .cp = 0xC778, .start = 25539, .len = 3 }, + .{ .cp = 0xC779, .start = 25542, .len = 3 }, + .{ .cp = 0xC77A, .start = 25545, .len = 3 }, + .{ .cp = 0xC77B, .start = 25548, .len = 3 }, + .{ .cp = 0xC77C, .start = 25551, .len = 3 }, + .{ .cp = 0xC77D, .start = 25554, .len = 3 }, + .{ .cp = 0xC77E, .start = 25557, .len = 3 }, + .{ .cp = 0xC77F, .start = 25560, .len = 3 }, + .{ .cp = 0xC780, .start = 25563, .len = 3 }, + .{ .cp = 0xC781, .start = 25566, .len = 3 }, + .{ .cp = 0xC782, .start = 25569, .len = 3 }, + .{ .cp = 0xC783, .start = 25572, .len = 3 }, + .{ .cp = 0xC784, .start = 25575, .len = 3 }, + .{ .cp = 0xC785, .start = 25578, .len = 3 }, + .{ .cp = 0xC786, .start = 25581, .len = 3 }, + .{ .cp = 0xC787, .start = 25584, .len = 3 }, + .{ .cp = 0xC788, .start = 25587, .len = 3 }, + .{ .cp = 0xC789, .start = 25590, .len = 3 }, + .{ .cp = 0xC78A, .start = 25593, .len = 3 }, + .{ .cp = 0xC78B, .start = 25596, .len = 3 }, + .{ .cp = 0xC78C, .start = 25599, .len = 3 }, + .{ .cp = 0xC78D, .start = 25602, .len = 3 }, + .{ .cp = 0xC78E, .start = 25605, .len = 3 }, + .{ .cp = 0xC78F, .start = 25608, .len = 3 }, + .{ .cp = 0xC790, .start = 25611, .len = 2 }, + .{ .cp = 0xC791, .start = 25613, .len = 3 }, + .{ .cp = 0xC792, .start = 25616, .len = 3 }, + .{ .cp = 0xC793, .start = 25619, .len = 3 }, + .{ .cp = 0xC794, .start = 25622, .len = 3 }, + .{ .cp = 0xC795, .start = 25625, .len = 3 }, + .{ .cp = 0xC796, .start = 25628, .len = 3 }, + .{ .cp = 0xC797, .start = 25631, .len = 3 }, + .{ .cp = 0xC798, .start = 25634, .len = 3 }, + .{ .cp = 0xC799, .start = 25637, .len = 3 }, + .{ .cp = 0xC79A, .start = 25640, .len = 3 }, + .{ .cp = 0xC79B, .start = 25643, .len = 3 }, + .{ .cp = 0xC79C, .start = 25646, .len = 3 }, + .{ .cp = 0xC79D, .start = 25649, .len = 3 }, + .{ .cp = 0xC79E, .start = 25652, .len = 3 }, + .{ .cp = 0xC79F, .start = 25655, .len = 3 }, + .{ .cp = 0xC7A0, .start = 25658, .len = 3 }, + .{ .cp = 0xC7A1, .start = 25661, .len = 3 }, + .{ .cp = 0xC7A2, .start = 25664, .len = 3 }, + .{ .cp = 0xC7A3, .start = 25667, .len = 3 }, + .{ .cp = 0xC7A4, .start = 25670, .len = 3 }, + .{ .cp = 0xC7A5, .start = 25673, .len = 3 }, + .{ .cp = 0xC7A6, .start = 25676, .len = 3 }, + .{ .cp = 0xC7A7, .start = 25679, .len = 3 }, + .{ .cp = 0xC7A8, .start = 25682, .len = 3 }, + .{ .cp = 0xC7A9, .start = 25685, .len = 3 }, + .{ .cp = 0xC7AA, .start = 25688, .len = 3 }, + .{ .cp = 0xC7AB, .start = 25691, .len = 3 }, + .{ .cp = 0xC7AC, .start = 25694, .len = 2 }, + .{ .cp = 0xC7AD, .start = 25696, .len = 3 }, + .{ .cp = 0xC7AE, .start = 25699, .len = 3 }, + .{ .cp = 0xC7AF, .start = 25702, .len = 3 }, + .{ .cp = 0xC7B0, .start = 25705, .len = 3 }, + .{ .cp = 0xC7B1, .start = 25708, .len = 3 }, + .{ .cp = 0xC7B2, .start = 25711, .len = 3 }, + .{ .cp = 0xC7B3, .start = 25714, .len = 3 }, + .{ .cp = 0xC7B4, .start = 25717, .len = 3 }, + .{ .cp = 0xC7B5, .start = 25720, .len = 3 }, + .{ .cp = 0xC7B6, .start = 25723, .len = 3 }, + .{ .cp = 0xC7B7, .start = 25726, .len = 3 }, + .{ .cp = 0xC7B8, .start = 25729, .len = 3 }, + .{ .cp = 0xC7B9, .start = 25732, .len = 3 }, + .{ .cp = 0xC7BA, .start = 25735, .len = 3 }, + .{ .cp = 0xC7BB, .start = 25738, .len = 3 }, + .{ .cp = 0xC7BC, .start = 25741, .len = 3 }, + .{ .cp = 0xC7BD, .start = 25744, .len = 3 }, + .{ .cp = 0xC7BE, .start = 25747, .len = 3 }, + .{ .cp = 0xC7BF, .start = 25750, .len = 3 }, + .{ .cp = 0xC7C0, .start = 25753, .len = 3 }, + .{ .cp = 0xC7C1, .start = 25756, .len = 3 }, + .{ .cp = 0xC7C2, .start = 25759, .len = 3 }, + .{ .cp = 0xC7C3, .start = 25762, .len = 3 }, + .{ .cp = 0xC7C4, .start = 25765, .len = 3 }, + .{ .cp = 0xC7C5, .start = 25768, .len = 3 }, + .{ .cp = 0xC7C6, .start = 25771, .len = 3 }, + .{ .cp = 0xC7C7, .start = 25774, .len = 3 }, + .{ .cp = 0xC7C8, .start = 25777, .len = 2 }, + .{ .cp = 0xC7C9, .start = 25779, .len = 3 }, + .{ .cp = 0xC7CA, .start = 25782, .len = 3 }, + .{ .cp = 0xC7CB, .start = 25785, .len = 3 }, + .{ .cp = 0xC7CC, .start = 25788, .len = 3 }, + .{ .cp = 0xC7CD, .start = 25791, .len = 3 }, + .{ .cp = 0xC7CE, .start = 25794, .len = 3 }, + .{ .cp = 0xC7CF, .start = 25797, .len = 3 }, + .{ .cp = 0xC7D0, .start = 25800, .len = 3 }, + .{ .cp = 0xC7D1, .start = 25803, .len = 3 }, + .{ .cp = 0xC7D2, .start = 25806, .len = 3 }, + .{ .cp = 0xC7D3, .start = 25809, .len = 3 }, + .{ .cp = 0xC7D4, .start = 25812, .len = 3 }, + .{ .cp = 0xC7D5, .start = 25815, .len = 3 }, + .{ .cp = 0xC7D6, .start = 25818, .len = 3 }, + .{ .cp = 0xC7D7, .start = 25821, .len = 3 }, + .{ .cp = 0xC7D8, .start = 25824, .len = 3 }, + .{ .cp = 0xC7D9, .start = 25827, .len = 3 }, + .{ .cp = 0xC7DA, .start = 25830, .len = 3 }, + .{ .cp = 0xC7DB, .start = 25833, .len = 3 }, + .{ .cp = 0xC7DC, .start = 25836, .len = 3 }, + .{ .cp = 0xC7DD, .start = 25839, .len = 3 }, + .{ .cp = 0xC7DE, .start = 25842, .len = 3 }, + .{ .cp = 0xC7DF, .start = 25845, .len = 3 }, + .{ .cp = 0xC7E0, .start = 25848, .len = 3 }, + .{ .cp = 0xC7E1, .start = 25851, .len = 3 }, + .{ .cp = 0xC7E2, .start = 25854, .len = 3 }, + .{ .cp = 0xC7E3, .start = 25857, .len = 3 }, + .{ .cp = 0xC7E4, .start = 25860, .len = 2 }, + .{ .cp = 0xC7E5, .start = 25862, .len = 3 }, + .{ .cp = 0xC7E6, .start = 25865, .len = 3 }, + .{ .cp = 0xC7E7, .start = 25868, .len = 3 }, + .{ .cp = 0xC7E8, .start = 25871, .len = 3 }, + .{ .cp = 0xC7E9, .start = 25874, .len = 3 }, + .{ .cp = 0xC7EA, .start = 25877, .len = 3 }, + .{ .cp = 0xC7EB, .start = 25880, .len = 3 }, + .{ .cp = 0xC7EC, .start = 25883, .len = 3 }, + .{ .cp = 0xC7ED, .start = 25886, .len = 3 }, + .{ .cp = 0xC7EE, .start = 25889, .len = 3 }, + .{ .cp = 0xC7EF, .start = 25892, .len = 3 }, + .{ .cp = 0xC7F0, .start = 25895, .len = 3 }, + .{ .cp = 0xC7F1, .start = 25898, .len = 3 }, + .{ .cp = 0xC7F2, .start = 25901, .len = 3 }, + .{ .cp = 0xC7F3, .start = 25904, .len = 3 }, + .{ .cp = 0xC7F4, .start = 25907, .len = 3 }, + .{ .cp = 0xC7F5, .start = 25910, .len = 3 }, + .{ .cp = 0xC7F6, .start = 25913, .len = 3 }, + .{ .cp = 0xC7F7, .start = 25916, .len = 3 }, + .{ .cp = 0xC7F8, .start = 25919, .len = 3 }, + .{ .cp = 0xC7F9, .start = 25922, .len = 3 }, + .{ .cp = 0xC7FA, .start = 25925, .len = 3 }, + .{ .cp = 0xC7FB, .start = 25928, .len = 3 }, + .{ .cp = 0xC7FC, .start = 25931, .len = 3 }, + .{ .cp = 0xC7FD, .start = 25934, .len = 3 }, + .{ .cp = 0xC7FE, .start = 25937, .len = 3 }, + .{ .cp = 0xC7FF, .start = 25940, .len = 3 }, + .{ .cp = 0xC800, .start = 25943, .len = 2 }, + .{ .cp = 0xC801, .start = 25945, .len = 3 }, + .{ .cp = 0xC802, .start = 25948, .len = 3 }, + .{ .cp = 0xC803, .start = 25951, .len = 3 }, + .{ .cp = 0xC804, .start = 25954, .len = 3 }, + .{ .cp = 0xC805, .start = 25957, .len = 3 }, + .{ .cp = 0xC806, .start = 25960, .len = 3 }, + .{ .cp = 0xC807, .start = 25963, .len = 3 }, + .{ .cp = 0xC808, .start = 25966, .len = 3 }, + .{ .cp = 0xC809, .start = 25969, .len = 3 }, + .{ .cp = 0xC80A, .start = 25972, .len = 3 }, + .{ .cp = 0xC80B, .start = 25975, .len = 3 }, + .{ .cp = 0xC80C, .start = 25978, .len = 3 }, + .{ .cp = 0xC80D, .start = 25981, .len = 3 }, + .{ .cp = 0xC80E, .start = 25984, .len = 3 }, + .{ .cp = 0xC80F, .start = 25987, .len = 3 }, + .{ .cp = 0xC810, .start = 25990, .len = 3 }, + .{ .cp = 0xC811, .start = 25993, .len = 3 }, + .{ .cp = 0xC812, .start = 25996, .len = 3 }, + .{ .cp = 0xC813, .start = 25999, .len = 3 }, + .{ .cp = 0xC814, .start = 26002, .len = 3 }, + .{ .cp = 0xC815, .start = 26005, .len = 3 }, + .{ .cp = 0xC816, .start = 26008, .len = 3 }, + .{ .cp = 0xC817, .start = 26011, .len = 3 }, + .{ .cp = 0xC818, .start = 26014, .len = 3 }, + .{ .cp = 0xC819, .start = 26017, .len = 3 }, + .{ .cp = 0xC81A, .start = 26020, .len = 3 }, + .{ .cp = 0xC81B, .start = 26023, .len = 3 }, + .{ .cp = 0xC81C, .start = 26026, .len = 2 }, + .{ .cp = 0xC81D, .start = 26028, .len = 3 }, + .{ .cp = 0xC81E, .start = 26031, .len = 3 }, + .{ .cp = 0xC81F, .start = 26034, .len = 3 }, + .{ .cp = 0xC820, .start = 26037, .len = 3 }, + .{ .cp = 0xC821, .start = 26040, .len = 3 }, + .{ .cp = 0xC822, .start = 26043, .len = 3 }, + .{ .cp = 0xC823, .start = 26046, .len = 3 }, + .{ .cp = 0xC824, .start = 26049, .len = 3 }, + .{ .cp = 0xC825, .start = 26052, .len = 3 }, + .{ .cp = 0xC826, .start = 26055, .len = 3 }, + .{ .cp = 0xC827, .start = 26058, .len = 3 }, + .{ .cp = 0xC828, .start = 26061, .len = 3 }, + .{ .cp = 0xC829, .start = 26064, .len = 3 }, + .{ .cp = 0xC82A, .start = 26067, .len = 3 }, + .{ .cp = 0xC82B, .start = 26070, .len = 3 }, + .{ .cp = 0xC82C, .start = 26073, .len = 3 }, + .{ .cp = 0xC82D, .start = 26076, .len = 3 }, + .{ .cp = 0xC82E, .start = 26079, .len = 3 }, + .{ .cp = 0xC82F, .start = 26082, .len = 3 }, + .{ .cp = 0xC830, .start = 26085, .len = 3 }, + .{ .cp = 0xC831, .start = 26088, .len = 3 }, + .{ .cp = 0xC832, .start = 26091, .len = 3 }, + .{ .cp = 0xC833, .start = 26094, .len = 3 }, + .{ .cp = 0xC834, .start = 26097, .len = 3 }, + .{ .cp = 0xC835, .start = 26100, .len = 3 }, + .{ .cp = 0xC836, .start = 26103, .len = 3 }, + .{ .cp = 0xC837, .start = 26106, .len = 3 }, + .{ .cp = 0xC838, .start = 26109, .len = 2 }, + .{ .cp = 0xC839, .start = 26111, .len = 3 }, + .{ .cp = 0xC83A, .start = 26114, .len = 3 }, + .{ .cp = 0xC83B, .start = 26117, .len = 3 }, + .{ .cp = 0xC83C, .start = 26120, .len = 3 }, + .{ .cp = 0xC83D, .start = 26123, .len = 3 }, + .{ .cp = 0xC83E, .start = 26126, .len = 3 }, + .{ .cp = 0xC83F, .start = 26129, .len = 3 }, + .{ .cp = 0xC840, .start = 26132, .len = 3 }, + .{ .cp = 0xC841, .start = 26135, .len = 3 }, + .{ .cp = 0xC842, .start = 26138, .len = 3 }, + .{ .cp = 0xC843, .start = 26141, .len = 3 }, + .{ .cp = 0xC844, .start = 26144, .len = 3 }, + .{ .cp = 0xC845, .start = 26147, .len = 3 }, + .{ .cp = 0xC846, .start = 26150, .len = 3 }, + .{ .cp = 0xC847, .start = 26153, .len = 3 }, + .{ .cp = 0xC848, .start = 26156, .len = 3 }, + .{ .cp = 0xC849, .start = 26159, .len = 3 }, + .{ .cp = 0xC84A, .start = 26162, .len = 3 }, + .{ .cp = 0xC84B, .start = 26165, .len = 3 }, + .{ .cp = 0xC84C, .start = 26168, .len = 3 }, + .{ .cp = 0xC84D, .start = 26171, .len = 3 }, + .{ .cp = 0xC84E, .start = 26174, .len = 3 }, + .{ .cp = 0xC84F, .start = 26177, .len = 3 }, + .{ .cp = 0xC850, .start = 26180, .len = 3 }, + .{ .cp = 0xC851, .start = 26183, .len = 3 }, + .{ .cp = 0xC852, .start = 26186, .len = 3 }, + .{ .cp = 0xC853, .start = 26189, .len = 3 }, + .{ .cp = 0xC854, .start = 26192, .len = 2 }, + .{ .cp = 0xC855, .start = 26194, .len = 3 }, + .{ .cp = 0xC856, .start = 26197, .len = 3 }, + .{ .cp = 0xC857, .start = 26200, .len = 3 }, + .{ .cp = 0xC858, .start = 26203, .len = 3 }, + .{ .cp = 0xC859, .start = 26206, .len = 3 }, + .{ .cp = 0xC85A, .start = 26209, .len = 3 }, + .{ .cp = 0xC85B, .start = 26212, .len = 3 }, + .{ .cp = 0xC85C, .start = 26215, .len = 3 }, + .{ .cp = 0xC85D, .start = 26218, .len = 3 }, + .{ .cp = 0xC85E, .start = 26221, .len = 3 }, + .{ .cp = 0xC85F, .start = 26224, .len = 3 }, + .{ .cp = 0xC860, .start = 26227, .len = 3 }, + .{ .cp = 0xC861, .start = 26230, .len = 3 }, + .{ .cp = 0xC862, .start = 26233, .len = 3 }, + .{ .cp = 0xC863, .start = 26236, .len = 3 }, + .{ .cp = 0xC864, .start = 26239, .len = 3 }, + .{ .cp = 0xC865, .start = 26242, .len = 3 }, + .{ .cp = 0xC866, .start = 26245, .len = 3 }, + .{ .cp = 0xC867, .start = 26248, .len = 3 }, + .{ .cp = 0xC868, .start = 26251, .len = 3 }, + .{ .cp = 0xC869, .start = 26254, .len = 3 }, + .{ .cp = 0xC86A, .start = 26257, .len = 3 }, + .{ .cp = 0xC86B, .start = 26260, .len = 3 }, + .{ .cp = 0xC86C, .start = 26263, .len = 3 }, + .{ .cp = 0xC86D, .start = 26266, .len = 3 }, + .{ .cp = 0xC86E, .start = 26269, .len = 3 }, + .{ .cp = 0xC86F, .start = 26272, .len = 3 }, + .{ .cp = 0xC870, .start = 26275, .len = 2 }, + .{ .cp = 0xC871, .start = 26277, .len = 3 }, + .{ .cp = 0xC872, .start = 26280, .len = 3 }, + .{ .cp = 0xC873, .start = 26283, .len = 3 }, + .{ .cp = 0xC874, .start = 26286, .len = 3 }, + .{ .cp = 0xC875, .start = 26289, .len = 3 }, + .{ .cp = 0xC876, .start = 26292, .len = 3 }, + .{ .cp = 0xC877, .start = 26295, .len = 3 }, + .{ .cp = 0xC878, .start = 26298, .len = 3 }, + .{ .cp = 0xC879, .start = 26301, .len = 3 }, + .{ .cp = 0xC87A, .start = 26304, .len = 3 }, + .{ .cp = 0xC87B, .start = 26307, .len = 3 }, + .{ .cp = 0xC87C, .start = 26310, .len = 3 }, + .{ .cp = 0xC87D, .start = 26313, .len = 3 }, + .{ .cp = 0xC87E, .start = 26316, .len = 3 }, + .{ .cp = 0xC87F, .start = 26319, .len = 3 }, + .{ .cp = 0xC880, .start = 26322, .len = 3 }, + .{ .cp = 0xC881, .start = 26325, .len = 3 }, + .{ .cp = 0xC882, .start = 26328, .len = 3 }, + .{ .cp = 0xC883, .start = 26331, .len = 3 }, + .{ .cp = 0xC884, .start = 26334, .len = 3 }, + .{ .cp = 0xC885, .start = 26337, .len = 3 }, + .{ .cp = 0xC886, .start = 26340, .len = 3 }, + .{ .cp = 0xC887, .start = 26343, .len = 3 }, + .{ .cp = 0xC888, .start = 26346, .len = 3 }, + .{ .cp = 0xC889, .start = 26349, .len = 3 }, + .{ .cp = 0xC88A, .start = 26352, .len = 3 }, + .{ .cp = 0xC88B, .start = 26355, .len = 3 }, + .{ .cp = 0xC88C, .start = 26358, .len = 2 }, + .{ .cp = 0xC88D, .start = 26360, .len = 3 }, + .{ .cp = 0xC88E, .start = 26363, .len = 3 }, + .{ .cp = 0xC88F, .start = 26366, .len = 3 }, + .{ .cp = 0xC890, .start = 26369, .len = 3 }, + .{ .cp = 0xC891, .start = 26372, .len = 3 }, + .{ .cp = 0xC892, .start = 26375, .len = 3 }, + .{ .cp = 0xC893, .start = 26378, .len = 3 }, + .{ .cp = 0xC894, .start = 26381, .len = 3 }, + .{ .cp = 0xC895, .start = 26384, .len = 3 }, + .{ .cp = 0xC896, .start = 26387, .len = 3 }, + .{ .cp = 0xC897, .start = 26390, .len = 3 }, + .{ .cp = 0xC898, .start = 26393, .len = 3 }, + .{ .cp = 0xC899, .start = 26396, .len = 3 }, + .{ .cp = 0xC89A, .start = 26399, .len = 3 }, + .{ .cp = 0xC89B, .start = 26402, .len = 3 }, + .{ .cp = 0xC89C, .start = 26405, .len = 3 }, + .{ .cp = 0xC89D, .start = 26408, .len = 3 }, + .{ .cp = 0xC89E, .start = 26411, .len = 3 }, + .{ .cp = 0xC89F, .start = 26414, .len = 3 }, + .{ .cp = 0xC8A0, .start = 26417, .len = 3 }, + .{ .cp = 0xC8A1, .start = 26420, .len = 3 }, + .{ .cp = 0xC8A2, .start = 26423, .len = 3 }, + .{ .cp = 0xC8A3, .start = 26426, .len = 3 }, + .{ .cp = 0xC8A4, .start = 26429, .len = 3 }, + .{ .cp = 0xC8A5, .start = 26432, .len = 3 }, + .{ .cp = 0xC8A6, .start = 26435, .len = 3 }, + .{ .cp = 0xC8A7, .start = 26438, .len = 3 }, + .{ .cp = 0xC8A8, .start = 26441, .len = 2 }, + .{ .cp = 0xC8A9, .start = 26443, .len = 3 }, + .{ .cp = 0xC8AA, .start = 26446, .len = 3 }, + .{ .cp = 0xC8AB, .start = 26449, .len = 3 }, + .{ .cp = 0xC8AC, .start = 26452, .len = 3 }, + .{ .cp = 0xC8AD, .start = 26455, .len = 3 }, + .{ .cp = 0xC8AE, .start = 26458, .len = 3 }, + .{ .cp = 0xC8AF, .start = 26461, .len = 3 }, + .{ .cp = 0xC8B0, .start = 26464, .len = 3 }, + .{ .cp = 0xC8B1, .start = 26467, .len = 3 }, + .{ .cp = 0xC8B2, .start = 26470, .len = 3 }, + .{ .cp = 0xC8B3, .start = 26473, .len = 3 }, + .{ .cp = 0xC8B4, .start = 26476, .len = 3 }, + .{ .cp = 0xC8B5, .start = 26479, .len = 3 }, + .{ .cp = 0xC8B6, .start = 26482, .len = 3 }, + .{ .cp = 0xC8B7, .start = 26485, .len = 3 }, + .{ .cp = 0xC8B8, .start = 26488, .len = 3 }, + .{ .cp = 0xC8B9, .start = 26491, .len = 3 }, + .{ .cp = 0xC8BA, .start = 26494, .len = 3 }, + .{ .cp = 0xC8BB, .start = 26497, .len = 3 }, + .{ .cp = 0xC8BC, .start = 26500, .len = 3 }, + .{ .cp = 0xC8BD, .start = 26503, .len = 3 }, + .{ .cp = 0xC8BE, .start = 26506, .len = 3 }, + .{ .cp = 0xC8BF, .start = 26509, .len = 3 }, + .{ .cp = 0xC8C0, .start = 26512, .len = 3 }, + .{ .cp = 0xC8C1, .start = 26515, .len = 3 }, + .{ .cp = 0xC8C2, .start = 26518, .len = 3 }, + .{ .cp = 0xC8C3, .start = 26521, .len = 3 }, + .{ .cp = 0xC8C4, .start = 26524, .len = 2 }, + .{ .cp = 0xC8C5, .start = 26526, .len = 3 }, + .{ .cp = 0xC8C6, .start = 26529, .len = 3 }, + .{ .cp = 0xC8C7, .start = 26532, .len = 3 }, + .{ .cp = 0xC8C8, .start = 26535, .len = 3 }, + .{ .cp = 0xC8C9, .start = 26538, .len = 3 }, + .{ .cp = 0xC8CA, .start = 26541, .len = 3 }, + .{ .cp = 0xC8CB, .start = 26544, .len = 3 }, + .{ .cp = 0xC8CC, .start = 26547, .len = 3 }, + .{ .cp = 0xC8CD, .start = 26550, .len = 3 }, + .{ .cp = 0xC8CE, .start = 26553, .len = 3 }, + .{ .cp = 0xC8CF, .start = 26556, .len = 3 }, + .{ .cp = 0xC8D0, .start = 26559, .len = 3 }, + .{ .cp = 0xC8D1, .start = 26562, .len = 3 }, + .{ .cp = 0xC8D2, .start = 26565, .len = 3 }, + .{ .cp = 0xC8D3, .start = 26568, .len = 3 }, + .{ .cp = 0xC8D4, .start = 26571, .len = 3 }, + .{ .cp = 0xC8D5, .start = 26574, .len = 3 }, + .{ .cp = 0xC8D6, .start = 26577, .len = 3 }, + .{ .cp = 0xC8D7, .start = 26580, .len = 3 }, + .{ .cp = 0xC8D8, .start = 26583, .len = 3 }, + .{ .cp = 0xC8D9, .start = 26586, .len = 3 }, + .{ .cp = 0xC8DA, .start = 26589, .len = 3 }, + .{ .cp = 0xC8DB, .start = 26592, .len = 3 }, + .{ .cp = 0xC8DC, .start = 26595, .len = 3 }, + .{ .cp = 0xC8DD, .start = 26598, .len = 3 }, + .{ .cp = 0xC8DE, .start = 26601, .len = 3 }, + .{ .cp = 0xC8DF, .start = 26604, .len = 3 }, + .{ .cp = 0xC8E0, .start = 26607, .len = 2 }, + .{ .cp = 0xC8E1, .start = 26609, .len = 3 }, + .{ .cp = 0xC8E2, .start = 26612, .len = 3 }, + .{ .cp = 0xC8E3, .start = 26615, .len = 3 }, + .{ .cp = 0xC8E4, .start = 26618, .len = 3 }, + .{ .cp = 0xC8E5, .start = 26621, .len = 3 }, + .{ .cp = 0xC8E6, .start = 26624, .len = 3 }, + .{ .cp = 0xC8E7, .start = 26627, .len = 3 }, + .{ .cp = 0xC8E8, .start = 26630, .len = 3 }, + .{ .cp = 0xC8E9, .start = 26633, .len = 3 }, + .{ .cp = 0xC8EA, .start = 26636, .len = 3 }, + .{ .cp = 0xC8EB, .start = 26639, .len = 3 }, + .{ .cp = 0xC8EC, .start = 26642, .len = 3 }, + .{ .cp = 0xC8ED, .start = 26645, .len = 3 }, + .{ .cp = 0xC8EE, .start = 26648, .len = 3 }, + .{ .cp = 0xC8EF, .start = 26651, .len = 3 }, + .{ .cp = 0xC8F0, .start = 26654, .len = 3 }, + .{ .cp = 0xC8F1, .start = 26657, .len = 3 }, + .{ .cp = 0xC8F2, .start = 26660, .len = 3 }, + .{ .cp = 0xC8F3, .start = 26663, .len = 3 }, + .{ .cp = 0xC8F4, .start = 26666, .len = 3 }, + .{ .cp = 0xC8F5, .start = 26669, .len = 3 }, + .{ .cp = 0xC8F6, .start = 26672, .len = 3 }, + .{ .cp = 0xC8F7, .start = 26675, .len = 3 }, + .{ .cp = 0xC8F8, .start = 26678, .len = 3 }, + .{ .cp = 0xC8F9, .start = 26681, .len = 3 }, + .{ .cp = 0xC8FA, .start = 26684, .len = 3 }, + .{ .cp = 0xC8FB, .start = 26687, .len = 3 }, + .{ .cp = 0xC8FC, .start = 26690, .len = 2 }, + .{ .cp = 0xC8FD, .start = 26692, .len = 3 }, + .{ .cp = 0xC8FE, .start = 26695, .len = 3 }, + .{ .cp = 0xC8FF, .start = 26698, .len = 3 }, + .{ .cp = 0xC900, .start = 26701, .len = 3 }, + .{ .cp = 0xC901, .start = 26704, .len = 3 }, + .{ .cp = 0xC902, .start = 26707, .len = 3 }, + .{ .cp = 0xC903, .start = 26710, .len = 3 }, + .{ .cp = 0xC904, .start = 26713, .len = 3 }, + .{ .cp = 0xC905, .start = 26716, .len = 3 }, + .{ .cp = 0xC906, .start = 26719, .len = 3 }, + .{ .cp = 0xC907, .start = 26722, .len = 3 }, + .{ .cp = 0xC908, .start = 26725, .len = 3 }, + .{ .cp = 0xC909, .start = 26728, .len = 3 }, + .{ .cp = 0xC90A, .start = 26731, .len = 3 }, + .{ .cp = 0xC90B, .start = 26734, .len = 3 }, + .{ .cp = 0xC90C, .start = 26737, .len = 3 }, + .{ .cp = 0xC90D, .start = 26740, .len = 3 }, + .{ .cp = 0xC90E, .start = 26743, .len = 3 }, + .{ .cp = 0xC90F, .start = 26746, .len = 3 }, + .{ .cp = 0xC910, .start = 26749, .len = 3 }, + .{ .cp = 0xC911, .start = 26752, .len = 3 }, + .{ .cp = 0xC912, .start = 26755, .len = 3 }, + .{ .cp = 0xC913, .start = 26758, .len = 3 }, + .{ .cp = 0xC914, .start = 26761, .len = 3 }, + .{ .cp = 0xC915, .start = 26764, .len = 3 }, + .{ .cp = 0xC916, .start = 26767, .len = 3 }, + .{ .cp = 0xC917, .start = 26770, .len = 3 }, + .{ .cp = 0xC918, .start = 26773, .len = 2 }, + .{ .cp = 0xC919, .start = 26775, .len = 3 }, + .{ .cp = 0xC91A, .start = 26778, .len = 3 }, + .{ .cp = 0xC91B, .start = 26781, .len = 3 }, + .{ .cp = 0xC91C, .start = 26784, .len = 3 }, + .{ .cp = 0xC91D, .start = 26787, .len = 3 }, + .{ .cp = 0xC91E, .start = 26790, .len = 3 }, + .{ .cp = 0xC91F, .start = 26793, .len = 3 }, + .{ .cp = 0xC920, .start = 26796, .len = 3 }, + .{ .cp = 0xC921, .start = 26799, .len = 3 }, + .{ .cp = 0xC922, .start = 26802, .len = 3 }, + .{ .cp = 0xC923, .start = 26805, .len = 3 }, + .{ .cp = 0xC924, .start = 26808, .len = 3 }, + .{ .cp = 0xC925, .start = 26811, .len = 3 }, + .{ .cp = 0xC926, .start = 26814, .len = 3 }, + .{ .cp = 0xC927, .start = 26817, .len = 3 }, + .{ .cp = 0xC928, .start = 26820, .len = 3 }, + .{ .cp = 0xC929, .start = 26823, .len = 3 }, + .{ .cp = 0xC92A, .start = 26826, .len = 3 }, + .{ .cp = 0xC92B, .start = 26829, .len = 3 }, + .{ .cp = 0xC92C, .start = 26832, .len = 3 }, + .{ .cp = 0xC92D, .start = 26835, .len = 3 }, + .{ .cp = 0xC92E, .start = 26838, .len = 3 }, + .{ .cp = 0xC92F, .start = 26841, .len = 3 }, + .{ .cp = 0xC930, .start = 26844, .len = 3 }, + .{ .cp = 0xC931, .start = 26847, .len = 3 }, + .{ .cp = 0xC932, .start = 26850, .len = 3 }, + .{ .cp = 0xC933, .start = 26853, .len = 3 }, + .{ .cp = 0xC934, .start = 26856, .len = 2 }, + .{ .cp = 0xC935, .start = 26858, .len = 3 }, + .{ .cp = 0xC936, .start = 26861, .len = 3 }, + .{ .cp = 0xC937, .start = 26864, .len = 3 }, + .{ .cp = 0xC938, .start = 26867, .len = 3 }, + .{ .cp = 0xC939, .start = 26870, .len = 3 }, + .{ .cp = 0xC93A, .start = 26873, .len = 3 }, + .{ .cp = 0xC93B, .start = 26876, .len = 3 }, + .{ .cp = 0xC93C, .start = 26879, .len = 3 }, + .{ .cp = 0xC93D, .start = 26882, .len = 3 }, + .{ .cp = 0xC93E, .start = 26885, .len = 3 }, + .{ .cp = 0xC93F, .start = 26888, .len = 3 }, + .{ .cp = 0xC940, .start = 26891, .len = 3 }, + .{ .cp = 0xC941, .start = 26894, .len = 3 }, + .{ .cp = 0xC942, .start = 26897, .len = 3 }, + .{ .cp = 0xC943, .start = 26900, .len = 3 }, + .{ .cp = 0xC944, .start = 26903, .len = 3 }, + .{ .cp = 0xC945, .start = 26906, .len = 3 }, + .{ .cp = 0xC946, .start = 26909, .len = 3 }, + .{ .cp = 0xC947, .start = 26912, .len = 3 }, + .{ .cp = 0xC948, .start = 26915, .len = 3 }, + .{ .cp = 0xC949, .start = 26918, .len = 3 }, + .{ .cp = 0xC94A, .start = 26921, .len = 3 }, + .{ .cp = 0xC94B, .start = 26924, .len = 3 }, + .{ .cp = 0xC94C, .start = 26927, .len = 3 }, + .{ .cp = 0xC94D, .start = 26930, .len = 3 }, + .{ .cp = 0xC94E, .start = 26933, .len = 3 }, + .{ .cp = 0xC94F, .start = 26936, .len = 3 }, + .{ .cp = 0xC950, .start = 26939, .len = 2 }, + .{ .cp = 0xC951, .start = 26941, .len = 3 }, + .{ .cp = 0xC952, .start = 26944, .len = 3 }, + .{ .cp = 0xC953, .start = 26947, .len = 3 }, + .{ .cp = 0xC954, .start = 26950, .len = 3 }, + .{ .cp = 0xC955, .start = 26953, .len = 3 }, + .{ .cp = 0xC956, .start = 26956, .len = 3 }, + .{ .cp = 0xC957, .start = 26959, .len = 3 }, + .{ .cp = 0xC958, .start = 26962, .len = 3 }, + .{ .cp = 0xC959, .start = 26965, .len = 3 }, + .{ .cp = 0xC95A, .start = 26968, .len = 3 }, + .{ .cp = 0xC95B, .start = 26971, .len = 3 }, + .{ .cp = 0xC95C, .start = 26974, .len = 3 }, + .{ .cp = 0xC95D, .start = 26977, .len = 3 }, + .{ .cp = 0xC95E, .start = 26980, .len = 3 }, + .{ .cp = 0xC95F, .start = 26983, .len = 3 }, + .{ .cp = 0xC960, .start = 26986, .len = 3 }, + .{ .cp = 0xC961, .start = 26989, .len = 3 }, + .{ .cp = 0xC962, .start = 26992, .len = 3 }, + .{ .cp = 0xC963, .start = 26995, .len = 3 }, + .{ .cp = 0xC964, .start = 26998, .len = 3 }, + .{ .cp = 0xC965, .start = 27001, .len = 3 }, + .{ .cp = 0xC966, .start = 27004, .len = 3 }, + .{ .cp = 0xC967, .start = 27007, .len = 3 }, + .{ .cp = 0xC968, .start = 27010, .len = 3 }, + .{ .cp = 0xC969, .start = 27013, .len = 3 }, + .{ .cp = 0xC96A, .start = 27016, .len = 3 }, + .{ .cp = 0xC96B, .start = 27019, .len = 3 }, + .{ .cp = 0xC96C, .start = 27022, .len = 2 }, + .{ .cp = 0xC96D, .start = 27024, .len = 3 }, + .{ .cp = 0xC96E, .start = 27027, .len = 3 }, + .{ .cp = 0xC96F, .start = 27030, .len = 3 }, + .{ .cp = 0xC970, .start = 27033, .len = 3 }, + .{ .cp = 0xC971, .start = 27036, .len = 3 }, + .{ .cp = 0xC972, .start = 27039, .len = 3 }, + .{ .cp = 0xC973, .start = 27042, .len = 3 }, + .{ .cp = 0xC974, .start = 27045, .len = 3 }, + .{ .cp = 0xC975, .start = 27048, .len = 3 }, + .{ .cp = 0xC976, .start = 27051, .len = 3 }, + .{ .cp = 0xC977, .start = 27054, .len = 3 }, + .{ .cp = 0xC978, .start = 27057, .len = 3 }, + .{ .cp = 0xC979, .start = 27060, .len = 3 }, + .{ .cp = 0xC97A, .start = 27063, .len = 3 }, + .{ .cp = 0xC97B, .start = 27066, .len = 3 }, + .{ .cp = 0xC97C, .start = 27069, .len = 3 }, + .{ .cp = 0xC97D, .start = 27072, .len = 3 }, + .{ .cp = 0xC97E, .start = 27075, .len = 3 }, + .{ .cp = 0xC97F, .start = 27078, .len = 3 }, + .{ .cp = 0xC980, .start = 27081, .len = 3 }, + .{ .cp = 0xC981, .start = 27084, .len = 3 }, + .{ .cp = 0xC982, .start = 27087, .len = 3 }, + .{ .cp = 0xC983, .start = 27090, .len = 3 }, + .{ .cp = 0xC984, .start = 27093, .len = 3 }, + .{ .cp = 0xC985, .start = 27096, .len = 3 }, + .{ .cp = 0xC986, .start = 27099, .len = 3 }, + .{ .cp = 0xC987, .start = 27102, .len = 3 }, + .{ .cp = 0xC988, .start = 27105, .len = 2 }, + .{ .cp = 0xC989, .start = 27107, .len = 3 }, + .{ .cp = 0xC98A, .start = 27110, .len = 3 }, + .{ .cp = 0xC98B, .start = 27113, .len = 3 }, + .{ .cp = 0xC98C, .start = 27116, .len = 3 }, + .{ .cp = 0xC98D, .start = 27119, .len = 3 }, + .{ .cp = 0xC98E, .start = 27122, .len = 3 }, + .{ .cp = 0xC98F, .start = 27125, .len = 3 }, + .{ .cp = 0xC990, .start = 27128, .len = 3 }, + .{ .cp = 0xC991, .start = 27131, .len = 3 }, + .{ .cp = 0xC992, .start = 27134, .len = 3 }, + .{ .cp = 0xC993, .start = 27137, .len = 3 }, + .{ .cp = 0xC994, .start = 27140, .len = 3 }, + .{ .cp = 0xC995, .start = 27143, .len = 3 }, + .{ .cp = 0xC996, .start = 27146, .len = 3 }, + .{ .cp = 0xC997, .start = 27149, .len = 3 }, + .{ .cp = 0xC998, .start = 27152, .len = 3 }, + .{ .cp = 0xC999, .start = 27155, .len = 3 }, + .{ .cp = 0xC99A, .start = 27158, .len = 3 }, + .{ .cp = 0xC99B, .start = 27161, .len = 3 }, + .{ .cp = 0xC99C, .start = 27164, .len = 3 }, + .{ .cp = 0xC99D, .start = 27167, .len = 3 }, + .{ .cp = 0xC99E, .start = 27170, .len = 3 }, + .{ .cp = 0xC99F, .start = 27173, .len = 3 }, + .{ .cp = 0xC9A0, .start = 27176, .len = 3 }, + .{ .cp = 0xC9A1, .start = 27179, .len = 3 }, + .{ .cp = 0xC9A2, .start = 27182, .len = 3 }, + .{ .cp = 0xC9A3, .start = 27185, .len = 3 }, + .{ .cp = 0xC9A4, .start = 27188, .len = 2 }, + .{ .cp = 0xC9A5, .start = 27190, .len = 3 }, + .{ .cp = 0xC9A6, .start = 27193, .len = 3 }, + .{ .cp = 0xC9A7, .start = 27196, .len = 3 }, + .{ .cp = 0xC9A8, .start = 27199, .len = 3 }, + .{ .cp = 0xC9A9, .start = 27202, .len = 3 }, + .{ .cp = 0xC9AA, .start = 27205, .len = 3 }, + .{ .cp = 0xC9AB, .start = 27208, .len = 3 }, + .{ .cp = 0xC9AC, .start = 27211, .len = 3 }, + .{ .cp = 0xC9AD, .start = 27214, .len = 3 }, + .{ .cp = 0xC9AE, .start = 27217, .len = 3 }, + .{ .cp = 0xC9AF, .start = 27220, .len = 3 }, + .{ .cp = 0xC9B0, .start = 27223, .len = 3 }, + .{ .cp = 0xC9B1, .start = 27226, .len = 3 }, + .{ .cp = 0xC9B2, .start = 27229, .len = 3 }, + .{ .cp = 0xC9B3, .start = 27232, .len = 3 }, + .{ .cp = 0xC9B4, .start = 27235, .len = 3 }, + .{ .cp = 0xC9B5, .start = 27238, .len = 3 }, + .{ .cp = 0xC9B6, .start = 27241, .len = 3 }, + .{ .cp = 0xC9B7, .start = 27244, .len = 3 }, + .{ .cp = 0xC9B8, .start = 27247, .len = 3 }, + .{ .cp = 0xC9B9, .start = 27250, .len = 3 }, + .{ .cp = 0xC9BA, .start = 27253, .len = 3 }, + .{ .cp = 0xC9BB, .start = 27256, .len = 3 }, + .{ .cp = 0xC9BC, .start = 27259, .len = 3 }, + .{ .cp = 0xC9BD, .start = 27262, .len = 3 }, + .{ .cp = 0xC9BE, .start = 27265, .len = 3 }, + .{ .cp = 0xC9BF, .start = 27268, .len = 3 }, + .{ .cp = 0xC9C0, .start = 27271, .len = 2 }, + .{ .cp = 0xC9C1, .start = 27273, .len = 3 }, + .{ .cp = 0xC9C2, .start = 27276, .len = 3 }, + .{ .cp = 0xC9C3, .start = 27279, .len = 3 }, + .{ .cp = 0xC9C4, .start = 27282, .len = 3 }, + .{ .cp = 0xC9C5, .start = 27285, .len = 3 }, + .{ .cp = 0xC9C6, .start = 27288, .len = 3 }, + .{ .cp = 0xC9C7, .start = 27291, .len = 3 }, + .{ .cp = 0xC9C8, .start = 27294, .len = 3 }, + .{ .cp = 0xC9C9, .start = 27297, .len = 3 }, + .{ .cp = 0xC9CA, .start = 27300, .len = 3 }, + .{ .cp = 0xC9CB, .start = 27303, .len = 3 }, + .{ .cp = 0xC9CC, .start = 27306, .len = 3 }, + .{ .cp = 0xC9CD, .start = 27309, .len = 3 }, + .{ .cp = 0xC9CE, .start = 27312, .len = 3 }, + .{ .cp = 0xC9CF, .start = 27315, .len = 3 }, + .{ .cp = 0xC9D0, .start = 27318, .len = 3 }, + .{ .cp = 0xC9D1, .start = 27321, .len = 3 }, + .{ .cp = 0xC9D2, .start = 27324, .len = 3 }, + .{ .cp = 0xC9D3, .start = 27327, .len = 3 }, + .{ .cp = 0xC9D4, .start = 27330, .len = 3 }, + .{ .cp = 0xC9D5, .start = 27333, .len = 3 }, + .{ .cp = 0xC9D6, .start = 27336, .len = 3 }, + .{ .cp = 0xC9D7, .start = 27339, .len = 3 }, + .{ .cp = 0xC9D8, .start = 27342, .len = 3 }, + .{ .cp = 0xC9D9, .start = 27345, .len = 3 }, + .{ .cp = 0xC9DA, .start = 27348, .len = 3 }, + .{ .cp = 0xC9DB, .start = 27351, .len = 3 }, + .{ .cp = 0xC9DC, .start = 27354, .len = 2 }, + .{ .cp = 0xC9DD, .start = 27356, .len = 3 }, + .{ .cp = 0xC9DE, .start = 27359, .len = 3 }, + .{ .cp = 0xC9DF, .start = 27362, .len = 3 }, + .{ .cp = 0xC9E0, .start = 27365, .len = 3 }, + .{ .cp = 0xC9E1, .start = 27368, .len = 3 }, + .{ .cp = 0xC9E2, .start = 27371, .len = 3 }, + .{ .cp = 0xC9E3, .start = 27374, .len = 3 }, + .{ .cp = 0xC9E4, .start = 27377, .len = 3 }, + .{ .cp = 0xC9E5, .start = 27380, .len = 3 }, + .{ .cp = 0xC9E6, .start = 27383, .len = 3 }, + .{ .cp = 0xC9E7, .start = 27386, .len = 3 }, + .{ .cp = 0xC9E8, .start = 27389, .len = 3 }, + .{ .cp = 0xC9E9, .start = 27392, .len = 3 }, + .{ .cp = 0xC9EA, .start = 27395, .len = 3 }, + .{ .cp = 0xC9EB, .start = 27398, .len = 3 }, + .{ .cp = 0xC9EC, .start = 27401, .len = 3 }, + .{ .cp = 0xC9ED, .start = 27404, .len = 3 }, + .{ .cp = 0xC9EE, .start = 27407, .len = 3 }, + .{ .cp = 0xC9EF, .start = 27410, .len = 3 }, + .{ .cp = 0xC9F0, .start = 27413, .len = 3 }, + .{ .cp = 0xC9F1, .start = 27416, .len = 3 }, + .{ .cp = 0xC9F2, .start = 27419, .len = 3 }, + .{ .cp = 0xC9F3, .start = 27422, .len = 3 }, + .{ .cp = 0xC9F4, .start = 27425, .len = 3 }, + .{ .cp = 0xC9F5, .start = 27428, .len = 3 }, + .{ .cp = 0xC9F6, .start = 27431, .len = 3 }, + .{ .cp = 0xC9F7, .start = 27434, .len = 3 }, + .{ .cp = 0xC9F8, .start = 27437, .len = 2 }, + .{ .cp = 0xC9F9, .start = 27439, .len = 3 }, + .{ .cp = 0xC9FA, .start = 27442, .len = 3 }, + .{ .cp = 0xC9FB, .start = 27445, .len = 3 }, + .{ .cp = 0xC9FC, .start = 27448, .len = 3 }, + .{ .cp = 0xC9FD, .start = 27451, .len = 3 }, + .{ .cp = 0xC9FE, .start = 27454, .len = 3 }, + .{ .cp = 0xC9FF, .start = 27457, .len = 3 }, + .{ .cp = 0xCA00, .start = 27460, .len = 3 }, + .{ .cp = 0xCA01, .start = 27463, .len = 3 }, + .{ .cp = 0xCA02, .start = 27466, .len = 3 }, + .{ .cp = 0xCA03, .start = 27469, .len = 3 }, + .{ .cp = 0xCA04, .start = 27472, .len = 3 }, + .{ .cp = 0xCA05, .start = 27475, .len = 3 }, + .{ .cp = 0xCA06, .start = 27478, .len = 3 }, + .{ .cp = 0xCA07, .start = 27481, .len = 3 }, + .{ .cp = 0xCA08, .start = 27484, .len = 3 }, + .{ .cp = 0xCA09, .start = 27487, .len = 3 }, + .{ .cp = 0xCA0A, .start = 27490, .len = 3 }, + .{ .cp = 0xCA0B, .start = 27493, .len = 3 }, + .{ .cp = 0xCA0C, .start = 27496, .len = 3 }, + .{ .cp = 0xCA0D, .start = 27499, .len = 3 }, + .{ .cp = 0xCA0E, .start = 27502, .len = 3 }, + .{ .cp = 0xCA0F, .start = 27505, .len = 3 }, + .{ .cp = 0xCA10, .start = 27508, .len = 3 }, + .{ .cp = 0xCA11, .start = 27511, .len = 3 }, + .{ .cp = 0xCA12, .start = 27514, .len = 3 }, + .{ .cp = 0xCA13, .start = 27517, .len = 3 }, + .{ .cp = 0xCA14, .start = 27520, .len = 2 }, + .{ .cp = 0xCA15, .start = 27522, .len = 3 }, + .{ .cp = 0xCA16, .start = 27525, .len = 3 }, + .{ .cp = 0xCA17, .start = 27528, .len = 3 }, + .{ .cp = 0xCA18, .start = 27531, .len = 3 }, + .{ .cp = 0xCA19, .start = 27534, .len = 3 }, + .{ .cp = 0xCA1A, .start = 27537, .len = 3 }, + .{ .cp = 0xCA1B, .start = 27540, .len = 3 }, + .{ .cp = 0xCA1C, .start = 27543, .len = 3 }, + .{ .cp = 0xCA1D, .start = 27546, .len = 3 }, + .{ .cp = 0xCA1E, .start = 27549, .len = 3 }, + .{ .cp = 0xCA1F, .start = 27552, .len = 3 }, + .{ .cp = 0xCA20, .start = 27555, .len = 3 }, + .{ .cp = 0xCA21, .start = 27558, .len = 3 }, + .{ .cp = 0xCA22, .start = 27561, .len = 3 }, + .{ .cp = 0xCA23, .start = 27564, .len = 3 }, + .{ .cp = 0xCA24, .start = 27567, .len = 3 }, + .{ .cp = 0xCA25, .start = 27570, .len = 3 }, + .{ .cp = 0xCA26, .start = 27573, .len = 3 }, + .{ .cp = 0xCA27, .start = 27576, .len = 3 }, + .{ .cp = 0xCA28, .start = 27579, .len = 3 }, + .{ .cp = 0xCA29, .start = 27582, .len = 3 }, + .{ .cp = 0xCA2A, .start = 27585, .len = 3 }, + .{ .cp = 0xCA2B, .start = 27588, .len = 3 }, + .{ .cp = 0xCA2C, .start = 27591, .len = 3 }, + .{ .cp = 0xCA2D, .start = 27594, .len = 3 }, + .{ .cp = 0xCA2E, .start = 27597, .len = 3 }, + .{ .cp = 0xCA2F, .start = 27600, .len = 3 }, + .{ .cp = 0xCA30, .start = 27603, .len = 2 }, + .{ .cp = 0xCA31, .start = 27605, .len = 3 }, + .{ .cp = 0xCA32, .start = 27608, .len = 3 }, + .{ .cp = 0xCA33, .start = 27611, .len = 3 }, + .{ .cp = 0xCA34, .start = 27614, .len = 3 }, + .{ .cp = 0xCA35, .start = 27617, .len = 3 }, + .{ .cp = 0xCA36, .start = 27620, .len = 3 }, + .{ .cp = 0xCA37, .start = 27623, .len = 3 }, + .{ .cp = 0xCA38, .start = 27626, .len = 3 }, + .{ .cp = 0xCA39, .start = 27629, .len = 3 }, + .{ .cp = 0xCA3A, .start = 27632, .len = 3 }, + .{ .cp = 0xCA3B, .start = 27635, .len = 3 }, + .{ .cp = 0xCA3C, .start = 27638, .len = 3 }, + .{ .cp = 0xCA3D, .start = 27641, .len = 3 }, + .{ .cp = 0xCA3E, .start = 27644, .len = 3 }, + .{ .cp = 0xCA3F, .start = 27647, .len = 3 }, + .{ .cp = 0xCA40, .start = 27650, .len = 3 }, + .{ .cp = 0xCA41, .start = 27653, .len = 3 }, + .{ .cp = 0xCA42, .start = 27656, .len = 3 }, + .{ .cp = 0xCA43, .start = 27659, .len = 3 }, + .{ .cp = 0xCA44, .start = 27662, .len = 3 }, + .{ .cp = 0xCA45, .start = 27665, .len = 3 }, + .{ .cp = 0xCA46, .start = 27668, .len = 3 }, + .{ .cp = 0xCA47, .start = 27671, .len = 3 }, + .{ .cp = 0xCA48, .start = 27674, .len = 3 }, + .{ .cp = 0xCA49, .start = 27677, .len = 3 }, + .{ .cp = 0xCA4A, .start = 27680, .len = 3 }, + .{ .cp = 0xCA4B, .start = 27683, .len = 3 }, + .{ .cp = 0xCA4C, .start = 27686, .len = 2 }, + .{ .cp = 0xCA4D, .start = 27688, .len = 3 }, + .{ .cp = 0xCA4E, .start = 27691, .len = 3 }, + .{ .cp = 0xCA4F, .start = 27694, .len = 3 }, + .{ .cp = 0xCA50, .start = 27697, .len = 3 }, + .{ .cp = 0xCA51, .start = 27700, .len = 3 }, + .{ .cp = 0xCA52, .start = 27703, .len = 3 }, + .{ .cp = 0xCA53, .start = 27706, .len = 3 }, + .{ .cp = 0xCA54, .start = 27709, .len = 3 }, + .{ .cp = 0xCA55, .start = 27712, .len = 3 }, + .{ .cp = 0xCA56, .start = 27715, .len = 3 }, + .{ .cp = 0xCA57, .start = 27718, .len = 3 }, + .{ .cp = 0xCA58, .start = 27721, .len = 3 }, + .{ .cp = 0xCA59, .start = 27724, .len = 3 }, + .{ .cp = 0xCA5A, .start = 27727, .len = 3 }, + .{ .cp = 0xCA5B, .start = 27730, .len = 3 }, + .{ .cp = 0xCA5C, .start = 27733, .len = 3 }, + .{ .cp = 0xCA5D, .start = 27736, .len = 3 }, + .{ .cp = 0xCA5E, .start = 27739, .len = 3 }, + .{ .cp = 0xCA5F, .start = 27742, .len = 3 }, + .{ .cp = 0xCA60, .start = 27745, .len = 3 }, + .{ .cp = 0xCA61, .start = 27748, .len = 3 }, + .{ .cp = 0xCA62, .start = 27751, .len = 3 }, + .{ .cp = 0xCA63, .start = 27754, .len = 3 }, + .{ .cp = 0xCA64, .start = 27757, .len = 3 }, + .{ .cp = 0xCA65, .start = 27760, .len = 3 }, + .{ .cp = 0xCA66, .start = 27763, .len = 3 }, + .{ .cp = 0xCA67, .start = 27766, .len = 3 }, + .{ .cp = 0xCA68, .start = 27769, .len = 2 }, + .{ .cp = 0xCA69, .start = 27771, .len = 3 }, + .{ .cp = 0xCA6A, .start = 27774, .len = 3 }, + .{ .cp = 0xCA6B, .start = 27777, .len = 3 }, + .{ .cp = 0xCA6C, .start = 27780, .len = 3 }, + .{ .cp = 0xCA6D, .start = 27783, .len = 3 }, + .{ .cp = 0xCA6E, .start = 27786, .len = 3 }, + .{ .cp = 0xCA6F, .start = 27789, .len = 3 }, + .{ .cp = 0xCA70, .start = 27792, .len = 3 }, + .{ .cp = 0xCA71, .start = 27795, .len = 3 }, + .{ .cp = 0xCA72, .start = 27798, .len = 3 }, + .{ .cp = 0xCA73, .start = 27801, .len = 3 }, + .{ .cp = 0xCA74, .start = 27804, .len = 3 }, + .{ .cp = 0xCA75, .start = 27807, .len = 3 }, + .{ .cp = 0xCA76, .start = 27810, .len = 3 }, + .{ .cp = 0xCA77, .start = 27813, .len = 3 }, + .{ .cp = 0xCA78, .start = 27816, .len = 3 }, + .{ .cp = 0xCA79, .start = 27819, .len = 3 }, + .{ .cp = 0xCA7A, .start = 27822, .len = 3 }, + .{ .cp = 0xCA7B, .start = 27825, .len = 3 }, + .{ .cp = 0xCA7C, .start = 27828, .len = 3 }, + .{ .cp = 0xCA7D, .start = 27831, .len = 3 }, + .{ .cp = 0xCA7E, .start = 27834, .len = 3 }, + .{ .cp = 0xCA7F, .start = 27837, .len = 3 }, + .{ .cp = 0xCA80, .start = 27840, .len = 3 }, + .{ .cp = 0xCA81, .start = 27843, .len = 3 }, + .{ .cp = 0xCA82, .start = 27846, .len = 3 }, + .{ .cp = 0xCA83, .start = 27849, .len = 3 }, + .{ .cp = 0xCA84, .start = 27852, .len = 2 }, + .{ .cp = 0xCA85, .start = 27854, .len = 3 }, + .{ .cp = 0xCA86, .start = 27857, .len = 3 }, + .{ .cp = 0xCA87, .start = 27860, .len = 3 }, + .{ .cp = 0xCA88, .start = 27863, .len = 3 }, + .{ .cp = 0xCA89, .start = 27866, .len = 3 }, + .{ .cp = 0xCA8A, .start = 27869, .len = 3 }, + .{ .cp = 0xCA8B, .start = 27872, .len = 3 }, + .{ .cp = 0xCA8C, .start = 27875, .len = 3 }, + .{ .cp = 0xCA8D, .start = 27878, .len = 3 }, + .{ .cp = 0xCA8E, .start = 27881, .len = 3 }, + .{ .cp = 0xCA8F, .start = 27884, .len = 3 }, + .{ .cp = 0xCA90, .start = 27887, .len = 3 }, + .{ .cp = 0xCA91, .start = 27890, .len = 3 }, + .{ .cp = 0xCA92, .start = 27893, .len = 3 }, + .{ .cp = 0xCA93, .start = 27896, .len = 3 }, + .{ .cp = 0xCA94, .start = 27899, .len = 3 }, + .{ .cp = 0xCA95, .start = 27902, .len = 3 }, + .{ .cp = 0xCA96, .start = 27905, .len = 3 }, + .{ .cp = 0xCA97, .start = 27908, .len = 3 }, + .{ .cp = 0xCA98, .start = 27911, .len = 3 }, + .{ .cp = 0xCA99, .start = 27914, .len = 3 }, + .{ .cp = 0xCA9A, .start = 27917, .len = 3 }, + .{ .cp = 0xCA9B, .start = 27920, .len = 3 }, + .{ .cp = 0xCA9C, .start = 27923, .len = 3 }, + .{ .cp = 0xCA9D, .start = 27926, .len = 3 }, + .{ .cp = 0xCA9E, .start = 27929, .len = 3 }, + .{ .cp = 0xCA9F, .start = 27932, .len = 3 }, + .{ .cp = 0xCAA0, .start = 27935, .len = 2 }, + .{ .cp = 0xCAA1, .start = 27937, .len = 3 }, + .{ .cp = 0xCAA2, .start = 27940, .len = 3 }, + .{ .cp = 0xCAA3, .start = 27943, .len = 3 }, + .{ .cp = 0xCAA4, .start = 27946, .len = 3 }, + .{ .cp = 0xCAA5, .start = 27949, .len = 3 }, + .{ .cp = 0xCAA6, .start = 27952, .len = 3 }, + .{ .cp = 0xCAA7, .start = 27955, .len = 3 }, + .{ .cp = 0xCAA8, .start = 27958, .len = 3 }, + .{ .cp = 0xCAA9, .start = 27961, .len = 3 }, + .{ .cp = 0xCAAA, .start = 27964, .len = 3 }, + .{ .cp = 0xCAAB, .start = 27967, .len = 3 }, + .{ .cp = 0xCAAC, .start = 27970, .len = 3 }, + .{ .cp = 0xCAAD, .start = 27973, .len = 3 }, + .{ .cp = 0xCAAE, .start = 27976, .len = 3 }, + .{ .cp = 0xCAAF, .start = 27979, .len = 3 }, + .{ .cp = 0xCAB0, .start = 27982, .len = 3 }, + .{ .cp = 0xCAB1, .start = 27985, .len = 3 }, + .{ .cp = 0xCAB2, .start = 27988, .len = 3 }, + .{ .cp = 0xCAB3, .start = 27991, .len = 3 }, + .{ .cp = 0xCAB4, .start = 27994, .len = 3 }, + .{ .cp = 0xCAB5, .start = 27997, .len = 3 }, + .{ .cp = 0xCAB6, .start = 28000, .len = 3 }, + .{ .cp = 0xCAB7, .start = 28003, .len = 3 }, + .{ .cp = 0xCAB8, .start = 28006, .len = 3 }, + .{ .cp = 0xCAB9, .start = 28009, .len = 3 }, + .{ .cp = 0xCABA, .start = 28012, .len = 3 }, + .{ .cp = 0xCABB, .start = 28015, .len = 3 }, + .{ .cp = 0xCABC, .start = 28018, .len = 2 }, + .{ .cp = 0xCABD, .start = 28020, .len = 3 }, + .{ .cp = 0xCABE, .start = 28023, .len = 3 }, + .{ .cp = 0xCABF, .start = 28026, .len = 3 }, + .{ .cp = 0xCAC0, .start = 28029, .len = 3 }, + .{ .cp = 0xCAC1, .start = 28032, .len = 3 }, + .{ .cp = 0xCAC2, .start = 28035, .len = 3 }, + .{ .cp = 0xCAC3, .start = 28038, .len = 3 }, + .{ .cp = 0xCAC4, .start = 28041, .len = 3 }, + .{ .cp = 0xCAC5, .start = 28044, .len = 3 }, + .{ .cp = 0xCAC6, .start = 28047, .len = 3 }, + .{ .cp = 0xCAC7, .start = 28050, .len = 3 }, + .{ .cp = 0xCAC8, .start = 28053, .len = 3 }, + .{ .cp = 0xCAC9, .start = 28056, .len = 3 }, + .{ .cp = 0xCACA, .start = 28059, .len = 3 }, + .{ .cp = 0xCACB, .start = 28062, .len = 3 }, + .{ .cp = 0xCACC, .start = 28065, .len = 3 }, + .{ .cp = 0xCACD, .start = 28068, .len = 3 }, + .{ .cp = 0xCACE, .start = 28071, .len = 3 }, + .{ .cp = 0xCACF, .start = 28074, .len = 3 }, + .{ .cp = 0xCAD0, .start = 28077, .len = 3 }, + .{ .cp = 0xCAD1, .start = 28080, .len = 3 }, + .{ .cp = 0xCAD2, .start = 28083, .len = 3 }, + .{ .cp = 0xCAD3, .start = 28086, .len = 3 }, + .{ .cp = 0xCAD4, .start = 28089, .len = 3 }, + .{ .cp = 0xCAD5, .start = 28092, .len = 3 }, + .{ .cp = 0xCAD6, .start = 28095, .len = 3 }, + .{ .cp = 0xCAD7, .start = 28098, .len = 3 }, + .{ .cp = 0xCAD8, .start = 28101, .len = 2 }, + .{ .cp = 0xCAD9, .start = 28103, .len = 3 }, + .{ .cp = 0xCADA, .start = 28106, .len = 3 }, + .{ .cp = 0xCADB, .start = 28109, .len = 3 }, + .{ .cp = 0xCADC, .start = 28112, .len = 3 }, + .{ .cp = 0xCADD, .start = 28115, .len = 3 }, + .{ .cp = 0xCADE, .start = 28118, .len = 3 }, + .{ .cp = 0xCADF, .start = 28121, .len = 3 }, + .{ .cp = 0xCAE0, .start = 28124, .len = 3 }, + .{ .cp = 0xCAE1, .start = 28127, .len = 3 }, + .{ .cp = 0xCAE2, .start = 28130, .len = 3 }, + .{ .cp = 0xCAE3, .start = 28133, .len = 3 }, + .{ .cp = 0xCAE4, .start = 28136, .len = 3 }, + .{ .cp = 0xCAE5, .start = 28139, .len = 3 }, + .{ .cp = 0xCAE6, .start = 28142, .len = 3 }, + .{ .cp = 0xCAE7, .start = 28145, .len = 3 }, + .{ .cp = 0xCAE8, .start = 28148, .len = 3 }, + .{ .cp = 0xCAE9, .start = 28151, .len = 3 }, + .{ .cp = 0xCAEA, .start = 28154, .len = 3 }, + .{ .cp = 0xCAEB, .start = 28157, .len = 3 }, + .{ .cp = 0xCAEC, .start = 28160, .len = 3 }, + .{ .cp = 0xCAED, .start = 28163, .len = 3 }, + .{ .cp = 0xCAEE, .start = 28166, .len = 3 }, + .{ .cp = 0xCAEF, .start = 28169, .len = 3 }, + .{ .cp = 0xCAF0, .start = 28172, .len = 3 }, + .{ .cp = 0xCAF1, .start = 28175, .len = 3 }, + .{ .cp = 0xCAF2, .start = 28178, .len = 3 }, + .{ .cp = 0xCAF3, .start = 28181, .len = 3 }, + .{ .cp = 0xCAF4, .start = 28184, .len = 2 }, + .{ .cp = 0xCAF5, .start = 28186, .len = 3 }, + .{ .cp = 0xCAF6, .start = 28189, .len = 3 }, + .{ .cp = 0xCAF7, .start = 28192, .len = 3 }, + .{ .cp = 0xCAF8, .start = 28195, .len = 3 }, + .{ .cp = 0xCAF9, .start = 28198, .len = 3 }, + .{ .cp = 0xCAFA, .start = 28201, .len = 3 }, + .{ .cp = 0xCAFB, .start = 28204, .len = 3 }, + .{ .cp = 0xCAFC, .start = 28207, .len = 3 }, + .{ .cp = 0xCAFD, .start = 28210, .len = 3 }, + .{ .cp = 0xCAFE, .start = 28213, .len = 3 }, + .{ .cp = 0xCAFF, .start = 28216, .len = 3 }, + .{ .cp = 0xCB00, .start = 28219, .len = 3 }, + .{ .cp = 0xCB01, .start = 28222, .len = 3 }, + .{ .cp = 0xCB02, .start = 28225, .len = 3 }, + .{ .cp = 0xCB03, .start = 28228, .len = 3 }, + .{ .cp = 0xCB04, .start = 28231, .len = 3 }, + .{ .cp = 0xCB05, .start = 28234, .len = 3 }, + .{ .cp = 0xCB06, .start = 28237, .len = 3 }, + .{ .cp = 0xCB07, .start = 28240, .len = 3 }, + .{ .cp = 0xCB08, .start = 28243, .len = 3 }, + .{ .cp = 0xCB09, .start = 28246, .len = 3 }, + .{ .cp = 0xCB0A, .start = 28249, .len = 3 }, + .{ .cp = 0xCB0B, .start = 28252, .len = 3 }, + .{ .cp = 0xCB0C, .start = 28255, .len = 3 }, + .{ .cp = 0xCB0D, .start = 28258, .len = 3 }, + .{ .cp = 0xCB0E, .start = 28261, .len = 3 }, + .{ .cp = 0xCB0F, .start = 28264, .len = 3 }, + .{ .cp = 0xCB10, .start = 28267, .len = 2 }, + .{ .cp = 0xCB11, .start = 28269, .len = 3 }, + .{ .cp = 0xCB12, .start = 28272, .len = 3 }, + .{ .cp = 0xCB13, .start = 28275, .len = 3 }, + .{ .cp = 0xCB14, .start = 28278, .len = 3 }, + .{ .cp = 0xCB15, .start = 28281, .len = 3 }, + .{ .cp = 0xCB16, .start = 28284, .len = 3 }, + .{ .cp = 0xCB17, .start = 28287, .len = 3 }, + .{ .cp = 0xCB18, .start = 28290, .len = 3 }, + .{ .cp = 0xCB19, .start = 28293, .len = 3 }, + .{ .cp = 0xCB1A, .start = 28296, .len = 3 }, + .{ .cp = 0xCB1B, .start = 28299, .len = 3 }, + .{ .cp = 0xCB1C, .start = 28302, .len = 3 }, + .{ .cp = 0xCB1D, .start = 28305, .len = 3 }, + .{ .cp = 0xCB1E, .start = 28308, .len = 3 }, + .{ .cp = 0xCB1F, .start = 28311, .len = 3 }, + .{ .cp = 0xCB20, .start = 28314, .len = 3 }, + .{ .cp = 0xCB21, .start = 28317, .len = 3 }, + .{ .cp = 0xCB22, .start = 28320, .len = 3 }, + .{ .cp = 0xCB23, .start = 28323, .len = 3 }, + .{ .cp = 0xCB24, .start = 28326, .len = 3 }, + .{ .cp = 0xCB25, .start = 28329, .len = 3 }, + .{ .cp = 0xCB26, .start = 28332, .len = 3 }, + .{ .cp = 0xCB27, .start = 28335, .len = 3 }, + .{ .cp = 0xCB28, .start = 28338, .len = 3 }, + .{ .cp = 0xCB29, .start = 28341, .len = 3 }, + .{ .cp = 0xCB2A, .start = 28344, .len = 3 }, + .{ .cp = 0xCB2B, .start = 28347, .len = 3 }, + .{ .cp = 0xCB2C, .start = 28350, .len = 2 }, + .{ .cp = 0xCB2D, .start = 28352, .len = 3 }, + .{ .cp = 0xCB2E, .start = 28355, .len = 3 }, + .{ .cp = 0xCB2F, .start = 28358, .len = 3 }, + .{ .cp = 0xCB30, .start = 28361, .len = 3 }, + .{ .cp = 0xCB31, .start = 28364, .len = 3 }, + .{ .cp = 0xCB32, .start = 28367, .len = 3 }, + .{ .cp = 0xCB33, .start = 28370, .len = 3 }, + .{ .cp = 0xCB34, .start = 28373, .len = 3 }, + .{ .cp = 0xCB35, .start = 28376, .len = 3 }, + .{ .cp = 0xCB36, .start = 28379, .len = 3 }, + .{ .cp = 0xCB37, .start = 28382, .len = 3 }, + .{ .cp = 0xCB38, .start = 28385, .len = 3 }, + .{ .cp = 0xCB39, .start = 28388, .len = 3 }, + .{ .cp = 0xCB3A, .start = 28391, .len = 3 }, + .{ .cp = 0xCB3B, .start = 28394, .len = 3 }, + .{ .cp = 0xCB3C, .start = 28397, .len = 3 }, + .{ .cp = 0xCB3D, .start = 28400, .len = 3 }, + .{ .cp = 0xCB3E, .start = 28403, .len = 3 }, + .{ .cp = 0xCB3F, .start = 28406, .len = 3 }, + .{ .cp = 0xCB40, .start = 28409, .len = 3 }, + .{ .cp = 0xCB41, .start = 28412, .len = 3 }, + .{ .cp = 0xCB42, .start = 28415, .len = 3 }, + .{ .cp = 0xCB43, .start = 28418, .len = 3 }, + .{ .cp = 0xCB44, .start = 28421, .len = 3 }, + .{ .cp = 0xCB45, .start = 28424, .len = 3 }, + .{ .cp = 0xCB46, .start = 28427, .len = 3 }, + .{ .cp = 0xCB47, .start = 28430, .len = 3 }, + .{ .cp = 0xCB48, .start = 28433, .len = 2 }, + .{ .cp = 0xCB49, .start = 28435, .len = 3 }, + .{ .cp = 0xCB4A, .start = 28438, .len = 3 }, + .{ .cp = 0xCB4B, .start = 28441, .len = 3 }, + .{ .cp = 0xCB4C, .start = 28444, .len = 3 }, + .{ .cp = 0xCB4D, .start = 28447, .len = 3 }, + .{ .cp = 0xCB4E, .start = 28450, .len = 3 }, + .{ .cp = 0xCB4F, .start = 28453, .len = 3 }, + .{ .cp = 0xCB50, .start = 28456, .len = 3 }, + .{ .cp = 0xCB51, .start = 28459, .len = 3 }, + .{ .cp = 0xCB52, .start = 28462, .len = 3 }, + .{ .cp = 0xCB53, .start = 28465, .len = 3 }, + .{ .cp = 0xCB54, .start = 28468, .len = 3 }, + .{ .cp = 0xCB55, .start = 28471, .len = 3 }, + .{ .cp = 0xCB56, .start = 28474, .len = 3 }, + .{ .cp = 0xCB57, .start = 28477, .len = 3 }, + .{ .cp = 0xCB58, .start = 28480, .len = 3 }, + .{ .cp = 0xCB59, .start = 28483, .len = 3 }, + .{ .cp = 0xCB5A, .start = 28486, .len = 3 }, + .{ .cp = 0xCB5B, .start = 28489, .len = 3 }, + .{ .cp = 0xCB5C, .start = 28492, .len = 3 }, + .{ .cp = 0xCB5D, .start = 28495, .len = 3 }, + .{ .cp = 0xCB5E, .start = 28498, .len = 3 }, + .{ .cp = 0xCB5F, .start = 28501, .len = 3 }, + .{ .cp = 0xCB60, .start = 28504, .len = 3 }, + .{ .cp = 0xCB61, .start = 28507, .len = 3 }, + .{ .cp = 0xCB62, .start = 28510, .len = 3 }, + .{ .cp = 0xCB63, .start = 28513, .len = 3 }, + .{ .cp = 0xCB64, .start = 28516, .len = 2 }, + .{ .cp = 0xCB65, .start = 28518, .len = 3 }, + .{ .cp = 0xCB66, .start = 28521, .len = 3 }, + .{ .cp = 0xCB67, .start = 28524, .len = 3 }, + .{ .cp = 0xCB68, .start = 28527, .len = 3 }, + .{ .cp = 0xCB69, .start = 28530, .len = 3 }, + .{ .cp = 0xCB6A, .start = 28533, .len = 3 }, + .{ .cp = 0xCB6B, .start = 28536, .len = 3 }, + .{ .cp = 0xCB6C, .start = 28539, .len = 3 }, + .{ .cp = 0xCB6D, .start = 28542, .len = 3 }, + .{ .cp = 0xCB6E, .start = 28545, .len = 3 }, + .{ .cp = 0xCB6F, .start = 28548, .len = 3 }, + .{ .cp = 0xCB70, .start = 28551, .len = 3 }, + .{ .cp = 0xCB71, .start = 28554, .len = 3 }, + .{ .cp = 0xCB72, .start = 28557, .len = 3 }, + .{ .cp = 0xCB73, .start = 28560, .len = 3 }, + .{ .cp = 0xCB74, .start = 28563, .len = 3 }, + .{ .cp = 0xCB75, .start = 28566, .len = 3 }, + .{ .cp = 0xCB76, .start = 28569, .len = 3 }, + .{ .cp = 0xCB77, .start = 28572, .len = 3 }, + .{ .cp = 0xCB78, .start = 28575, .len = 3 }, + .{ .cp = 0xCB79, .start = 28578, .len = 3 }, + .{ .cp = 0xCB7A, .start = 28581, .len = 3 }, + .{ .cp = 0xCB7B, .start = 28584, .len = 3 }, + .{ .cp = 0xCB7C, .start = 28587, .len = 3 }, + .{ .cp = 0xCB7D, .start = 28590, .len = 3 }, + .{ .cp = 0xCB7E, .start = 28593, .len = 3 }, + .{ .cp = 0xCB7F, .start = 28596, .len = 3 }, + .{ .cp = 0xCB80, .start = 28599, .len = 2 }, + .{ .cp = 0xCB81, .start = 28601, .len = 3 }, + .{ .cp = 0xCB82, .start = 28604, .len = 3 }, + .{ .cp = 0xCB83, .start = 28607, .len = 3 }, + .{ .cp = 0xCB84, .start = 28610, .len = 3 }, + .{ .cp = 0xCB85, .start = 28613, .len = 3 }, + .{ .cp = 0xCB86, .start = 28616, .len = 3 }, + .{ .cp = 0xCB87, .start = 28619, .len = 3 }, + .{ .cp = 0xCB88, .start = 28622, .len = 3 }, + .{ .cp = 0xCB89, .start = 28625, .len = 3 }, + .{ .cp = 0xCB8A, .start = 28628, .len = 3 }, + .{ .cp = 0xCB8B, .start = 28631, .len = 3 }, + .{ .cp = 0xCB8C, .start = 28634, .len = 3 }, + .{ .cp = 0xCB8D, .start = 28637, .len = 3 }, + .{ .cp = 0xCB8E, .start = 28640, .len = 3 }, + .{ .cp = 0xCB8F, .start = 28643, .len = 3 }, + .{ .cp = 0xCB90, .start = 28646, .len = 3 }, + .{ .cp = 0xCB91, .start = 28649, .len = 3 }, + .{ .cp = 0xCB92, .start = 28652, .len = 3 }, + .{ .cp = 0xCB93, .start = 28655, .len = 3 }, + .{ .cp = 0xCB94, .start = 28658, .len = 3 }, + .{ .cp = 0xCB95, .start = 28661, .len = 3 }, + .{ .cp = 0xCB96, .start = 28664, .len = 3 }, + .{ .cp = 0xCB97, .start = 28667, .len = 3 }, + .{ .cp = 0xCB98, .start = 28670, .len = 3 }, + .{ .cp = 0xCB99, .start = 28673, .len = 3 }, + .{ .cp = 0xCB9A, .start = 28676, .len = 3 }, + .{ .cp = 0xCB9B, .start = 28679, .len = 3 }, + .{ .cp = 0xCB9C, .start = 28682, .len = 2 }, + .{ .cp = 0xCB9D, .start = 28684, .len = 3 }, + .{ .cp = 0xCB9E, .start = 28687, .len = 3 }, + .{ .cp = 0xCB9F, .start = 28690, .len = 3 }, + .{ .cp = 0xCBA0, .start = 28693, .len = 3 }, + .{ .cp = 0xCBA1, .start = 28696, .len = 3 }, + .{ .cp = 0xCBA2, .start = 28699, .len = 3 }, + .{ .cp = 0xCBA3, .start = 28702, .len = 3 }, + .{ .cp = 0xCBA4, .start = 28705, .len = 3 }, + .{ .cp = 0xCBA5, .start = 28708, .len = 3 }, + .{ .cp = 0xCBA6, .start = 28711, .len = 3 }, + .{ .cp = 0xCBA7, .start = 28714, .len = 3 }, + .{ .cp = 0xCBA8, .start = 28717, .len = 3 }, + .{ .cp = 0xCBA9, .start = 28720, .len = 3 }, + .{ .cp = 0xCBAA, .start = 28723, .len = 3 }, + .{ .cp = 0xCBAB, .start = 28726, .len = 3 }, + .{ .cp = 0xCBAC, .start = 28729, .len = 3 }, + .{ .cp = 0xCBAD, .start = 28732, .len = 3 }, + .{ .cp = 0xCBAE, .start = 28735, .len = 3 }, + .{ .cp = 0xCBAF, .start = 28738, .len = 3 }, + .{ .cp = 0xCBB0, .start = 28741, .len = 3 }, + .{ .cp = 0xCBB1, .start = 28744, .len = 3 }, + .{ .cp = 0xCBB2, .start = 28747, .len = 3 }, + .{ .cp = 0xCBB3, .start = 28750, .len = 3 }, + .{ .cp = 0xCBB4, .start = 28753, .len = 3 }, + .{ .cp = 0xCBB5, .start = 28756, .len = 3 }, + .{ .cp = 0xCBB6, .start = 28759, .len = 3 }, + .{ .cp = 0xCBB7, .start = 28762, .len = 3 }, + .{ .cp = 0xCBB8, .start = 28765, .len = 2 }, + .{ .cp = 0xCBB9, .start = 28767, .len = 3 }, + .{ .cp = 0xCBBA, .start = 28770, .len = 3 }, + .{ .cp = 0xCBBB, .start = 28773, .len = 3 }, + .{ .cp = 0xCBBC, .start = 28776, .len = 3 }, + .{ .cp = 0xCBBD, .start = 28779, .len = 3 }, + .{ .cp = 0xCBBE, .start = 28782, .len = 3 }, + .{ .cp = 0xCBBF, .start = 28785, .len = 3 }, + .{ .cp = 0xCBC0, .start = 28788, .len = 3 }, + .{ .cp = 0xCBC1, .start = 28791, .len = 3 }, + .{ .cp = 0xCBC2, .start = 28794, .len = 3 }, + .{ .cp = 0xCBC3, .start = 28797, .len = 3 }, + .{ .cp = 0xCBC4, .start = 28800, .len = 3 }, + .{ .cp = 0xCBC5, .start = 28803, .len = 3 }, + .{ .cp = 0xCBC6, .start = 28806, .len = 3 }, + .{ .cp = 0xCBC7, .start = 28809, .len = 3 }, + .{ .cp = 0xCBC8, .start = 28812, .len = 3 }, + .{ .cp = 0xCBC9, .start = 28815, .len = 3 }, + .{ .cp = 0xCBCA, .start = 28818, .len = 3 }, + .{ .cp = 0xCBCB, .start = 28821, .len = 3 }, + .{ .cp = 0xCBCC, .start = 28824, .len = 3 }, + .{ .cp = 0xCBCD, .start = 28827, .len = 3 }, + .{ .cp = 0xCBCE, .start = 28830, .len = 3 }, + .{ .cp = 0xCBCF, .start = 28833, .len = 3 }, + .{ .cp = 0xCBD0, .start = 28836, .len = 3 }, + .{ .cp = 0xCBD1, .start = 28839, .len = 3 }, + .{ .cp = 0xCBD2, .start = 28842, .len = 3 }, + .{ .cp = 0xCBD3, .start = 28845, .len = 3 }, + .{ .cp = 0xCBD4, .start = 28848, .len = 2 }, + .{ .cp = 0xCBD5, .start = 28850, .len = 3 }, + .{ .cp = 0xCBD6, .start = 28853, .len = 3 }, + .{ .cp = 0xCBD7, .start = 28856, .len = 3 }, + .{ .cp = 0xCBD8, .start = 28859, .len = 3 }, + .{ .cp = 0xCBD9, .start = 28862, .len = 3 }, + .{ .cp = 0xCBDA, .start = 28865, .len = 3 }, + .{ .cp = 0xCBDB, .start = 28868, .len = 3 }, + .{ .cp = 0xCBDC, .start = 28871, .len = 3 }, + .{ .cp = 0xCBDD, .start = 28874, .len = 3 }, + .{ .cp = 0xCBDE, .start = 28877, .len = 3 }, + .{ .cp = 0xCBDF, .start = 28880, .len = 3 }, + .{ .cp = 0xCBE0, .start = 28883, .len = 3 }, + .{ .cp = 0xCBE1, .start = 28886, .len = 3 }, + .{ .cp = 0xCBE2, .start = 28889, .len = 3 }, + .{ .cp = 0xCBE3, .start = 28892, .len = 3 }, + .{ .cp = 0xCBE4, .start = 28895, .len = 3 }, + .{ .cp = 0xCBE5, .start = 28898, .len = 3 }, + .{ .cp = 0xCBE6, .start = 28901, .len = 3 }, + .{ .cp = 0xCBE7, .start = 28904, .len = 3 }, + .{ .cp = 0xCBE8, .start = 28907, .len = 3 }, + .{ .cp = 0xCBE9, .start = 28910, .len = 3 }, + .{ .cp = 0xCBEA, .start = 28913, .len = 3 }, + .{ .cp = 0xCBEB, .start = 28916, .len = 3 }, + .{ .cp = 0xCBEC, .start = 28919, .len = 3 }, + .{ .cp = 0xCBED, .start = 28922, .len = 3 }, + .{ .cp = 0xCBEE, .start = 28925, .len = 3 }, + .{ .cp = 0xCBEF, .start = 28928, .len = 3 }, + .{ .cp = 0xCBF0, .start = 28931, .len = 2 }, + .{ .cp = 0xCBF1, .start = 28933, .len = 3 }, + .{ .cp = 0xCBF2, .start = 28936, .len = 3 }, + .{ .cp = 0xCBF3, .start = 28939, .len = 3 }, + .{ .cp = 0xCBF4, .start = 28942, .len = 3 }, + .{ .cp = 0xCBF5, .start = 28945, .len = 3 }, + .{ .cp = 0xCBF6, .start = 28948, .len = 3 }, + .{ .cp = 0xCBF7, .start = 28951, .len = 3 }, + .{ .cp = 0xCBF8, .start = 28954, .len = 3 }, + .{ .cp = 0xCBF9, .start = 28957, .len = 3 }, + .{ .cp = 0xCBFA, .start = 28960, .len = 3 }, + .{ .cp = 0xCBFB, .start = 28963, .len = 3 }, + .{ .cp = 0xCBFC, .start = 28966, .len = 3 }, + .{ .cp = 0xCBFD, .start = 28969, .len = 3 }, + .{ .cp = 0xCBFE, .start = 28972, .len = 3 }, + .{ .cp = 0xCBFF, .start = 28975, .len = 3 }, + .{ .cp = 0xCC00, .start = 28978, .len = 3 }, + .{ .cp = 0xCC01, .start = 28981, .len = 3 }, + .{ .cp = 0xCC02, .start = 28984, .len = 3 }, + .{ .cp = 0xCC03, .start = 28987, .len = 3 }, + .{ .cp = 0xCC04, .start = 28990, .len = 3 }, + .{ .cp = 0xCC05, .start = 28993, .len = 3 }, + .{ .cp = 0xCC06, .start = 28996, .len = 3 }, + .{ .cp = 0xCC07, .start = 28999, .len = 3 }, + .{ .cp = 0xCC08, .start = 29002, .len = 3 }, + .{ .cp = 0xCC09, .start = 29005, .len = 3 }, + .{ .cp = 0xCC0A, .start = 29008, .len = 3 }, + .{ .cp = 0xCC0B, .start = 29011, .len = 3 }, + .{ .cp = 0xCC0C, .start = 29014, .len = 2 }, + .{ .cp = 0xCC0D, .start = 29016, .len = 3 }, + .{ .cp = 0xCC0E, .start = 29019, .len = 3 }, + .{ .cp = 0xCC0F, .start = 29022, .len = 3 }, + .{ .cp = 0xCC10, .start = 29025, .len = 3 }, + .{ .cp = 0xCC11, .start = 29028, .len = 3 }, + .{ .cp = 0xCC12, .start = 29031, .len = 3 }, + .{ .cp = 0xCC13, .start = 29034, .len = 3 }, + .{ .cp = 0xCC14, .start = 29037, .len = 3 }, + .{ .cp = 0xCC15, .start = 29040, .len = 3 }, + .{ .cp = 0xCC16, .start = 29043, .len = 3 }, + .{ .cp = 0xCC17, .start = 29046, .len = 3 }, + .{ .cp = 0xCC18, .start = 29049, .len = 3 }, + .{ .cp = 0xCC19, .start = 29052, .len = 3 }, + .{ .cp = 0xCC1A, .start = 29055, .len = 3 }, + .{ .cp = 0xCC1B, .start = 29058, .len = 3 }, + .{ .cp = 0xCC1C, .start = 29061, .len = 3 }, + .{ .cp = 0xCC1D, .start = 29064, .len = 3 }, + .{ .cp = 0xCC1E, .start = 29067, .len = 3 }, + .{ .cp = 0xCC1F, .start = 29070, .len = 3 }, + .{ .cp = 0xCC20, .start = 29073, .len = 3 }, + .{ .cp = 0xCC21, .start = 29076, .len = 3 }, + .{ .cp = 0xCC22, .start = 29079, .len = 3 }, + .{ .cp = 0xCC23, .start = 29082, .len = 3 }, + .{ .cp = 0xCC24, .start = 29085, .len = 3 }, + .{ .cp = 0xCC25, .start = 29088, .len = 3 }, + .{ .cp = 0xCC26, .start = 29091, .len = 3 }, + .{ .cp = 0xCC27, .start = 29094, .len = 3 }, + .{ .cp = 0xCC28, .start = 29097, .len = 2 }, + .{ .cp = 0xCC29, .start = 29099, .len = 3 }, + .{ .cp = 0xCC2A, .start = 29102, .len = 3 }, + .{ .cp = 0xCC2B, .start = 29105, .len = 3 }, + .{ .cp = 0xCC2C, .start = 29108, .len = 3 }, + .{ .cp = 0xCC2D, .start = 29111, .len = 3 }, + .{ .cp = 0xCC2E, .start = 29114, .len = 3 }, + .{ .cp = 0xCC2F, .start = 29117, .len = 3 }, + .{ .cp = 0xCC30, .start = 29120, .len = 3 }, + .{ .cp = 0xCC31, .start = 29123, .len = 3 }, + .{ .cp = 0xCC32, .start = 29126, .len = 3 }, + .{ .cp = 0xCC33, .start = 29129, .len = 3 }, + .{ .cp = 0xCC34, .start = 29132, .len = 3 }, + .{ .cp = 0xCC35, .start = 29135, .len = 3 }, + .{ .cp = 0xCC36, .start = 29138, .len = 3 }, + .{ .cp = 0xCC37, .start = 29141, .len = 3 }, + .{ .cp = 0xCC38, .start = 29144, .len = 3 }, + .{ .cp = 0xCC39, .start = 29147, .len = 3 }, + .{ .cp = 0xCC3A, .start = 29150, .len = 3 }, + .{ .cp = 0xCC3B, .start = 29153, .len = 3 }, + .{ .cp = 0xCC3C, .start = 29156, .len = 3 }, + .{ .cp = 0xCC3D, .start = 29159, .len = 3 }, + .{ .cp = 0xCC3E, .start = 29162, .len = 3 }, + .{ .cp = 0xCC3F, .start = 29165, .len = 3 }, + .{ .cp = 0xCC40, .start = 29168, .len = 3 }, + .{ .cp = 0xCC41, .start = 29171, .len = 3 }, + .{ .cp = 0xCC42, .start = 29174, .len = 3 }, + .{ .cp = 0xCC43, .start = 29177, .len = 3 }, + .{ .cp = 0xCC44, .start = 29180, .len = 2 }, + .{ .cp = 0xCC45, .start = 29182, .len = 3 }, + .{ .cp = 0xCC46, .start = 29185, .len = 3 }, + .{ .cp = 0xCC47, .start = 29188, .len = 3 }, + .{ .cp = 0xCC48, .start = 29191, .len = 3 }, + .{ .cp = 0xCC49, .start = 29194, .len = 3 }, + .{ .cp = 0xCC4A, .start = 29197, .len = 3 }, + .{ .cp = 0xCC4B, .start = 29200, .len = 3 }, + .{ .cp = 0xCC4C, .start = 29203, .len = 3 }, + .{ .cp = 0xCC4D, .start = 29206, .len = 3 }, + .{ .cp = 0xCC4E, .start = 29209, .len = 3 }, + .{ .cp = 0xCC4F, .start = 29212, .len = 3 }, + .{ .cp = 0xCC50, .start = 29215, .len = 3 }, + .{ .cp = 0xCC51, .start = 29218, .len = 3 }, + .{ .cp = 0xCC52, .start = 29221, .len = 3 }, + .{ .cp = 0xCC53, .start = 29224, .len = 3 }, + .{ .cp = 0xCC54, .start = 29227, .len = 3 }, + .{ .cp = 0xCC55, .start = 29230, .len = 3 }, + .{ .cp = 0xCC56, .start = 29233, .len = 3 }, + .{ .cp = 0xCC57, .start = 29236, .len = 3 }, + .{ .cp = 0xCC58, .start = 29239, .len = 3 }, + .{ .cp = 0xCC59, .start = 29242, .len = 3 }, + .{ .cp = 0xCC5A, .start = 29245, .len = 3 }, + .{ .cp = 0xCC5B, .start = 29248, .len = 3 }, + .{ .cp = 0xCC5C, .start = 29251, .len = 3 }, + .{ .cp = 0xCC5D, .start = 29254, .len = 3 }, + .{ .cp = 0xCC5E, .start = 29257, .len = 3 }, + .{ .cp = 0xCC5F, .start = 29260, .len = 3 }, + .{ .cp = 0xCC60, .start = 29263, .len = 2 }, + .{ .cp = 0xCC61, .start = 29265, .len = 3 }, + .{ .cp = 0xCC62, .start = 29268, .len = 3 }, + .{ .cp = 0xCC63, .start = 29271, .len = 3 }, + .{ .cp = 0xCC64, .start = 29274, .len = 3 }, + .{ .cp = 0xCC65, .start = 29277, .len = 3 }, + .{ .cp = 0xCC66, .start = 29280, .len = 3 }, + .{ .cp = 0xCC67, .start = 29283, .len = 3 }, + .{ .cp = 0xCC68, .start = 29286, .len = 3 }, + .{ .cp = 0xCC69, .start = 29289, .len = 3 }, + .{ .cp = 0xCC6A, .start = 29292, .len = 3 }, + .{ .cp = 0xCC6B, .start = 29295, .len = 3 }, + .{ .cp = 0xCC6C, .start = 29298, .len = 3 }, + .{ .cp = 0xCC6D, .start = 29301, .len = 3 }, + .{ .cp = 0xCC6E, .start = 29304, .len = 3 }, + .{ .cp = 0xCC6F, .start = 29307, .len = 3 }, + .{ .cp = 0xCC70, .start = 29310, .len = 3 }, + .{ .cp = 0xCC71, .start = 29313, .len = 3 }, + .{ .cp = 0xCC72, .start = 29316, .len = 3 }, + .{ .cp = 0xCC73, .start = 29319, .len = 3 }, + .{ .cp = 0xCC74, .start = 29322, .len = 3 }, + .{ .cp = 0xCC75, .start = 29325, .len = 3 }, + .{ .cp = 0xCC76, .start = 29328, .len = 3 }, + .{ .cp = 0xCC77, .start = 29331, .len = 3 }, + .{ .cp = 0xCC78, .start = 29334, .len = 3 }, + .{ .cp = 0xCC79, .start = 29337, .len = 3 }, + .{ .cp = 0xCC7A, .start = 29340, .len = 3 }, + .{ .cp = 0xCC7B, .start = 29343, .len = 3 }, + .{ .cp = 0xCC7C, .start = 29346, .len = 2 }, + .{ .cp = 0xCC7D, .start = 29348, .len = 3 }, + .{ .cp = 0xCC7E, .start = 29351, .len = 3 }, + .{ .cp = 0xCC7F, .start = 29354, .len = 3 }, + .{ .cp = 0xCC80, .start = 29357, .len = 3 }, + .{ .cp = 0xCC81, .start = 29360, .len = 3 }, + .{ .cp = 0xCC82, .start = 29363, .len = 3 }, + .{ .cp = 0xCC83, .start = 29366, .len = 3 }, + .{ .cp = 0xCC84, .start = 29369, .len = 3 }, + .{ .cp = 0xCC85, .start = 29372, .len = 3 }, + .{ .cp = 0xCC86, .start = 29375, .len = 3 }, + .{ .cp = 0xCC87, .start = 29378, .len = 3 }, + .{ .cp = 0xCC88, .start = 29381, .len = 3 }, + .{ .cp = 0xCC89, .start = 29384, .len = 3 }, + .{ .cp = 0xCC8A, .start = 29387, .len = 3 }, + .{ .cp = 0xCC8B, .start = 29390, .len = 3 }, + .{ .cp = 0xCC8C, .start = 29393, .len = 3 }, + .{ .cp = 0xCC8D, .start = 29396, .len = 3 }, + .{ .cp = 0xCC8E, .start = 29399, .len = 3 }, + .{ .cp = 0xCC8F, .start = 29402, .len = 3 }, + .{ .cp = 0xCC90, .start = 29405, .len = 3 }, + .{ .cp = 0xCC91, .start = 29408, .len = 3 }, + .{ .cp = 0xCC92, .start = 29411, .len = 3 }, + .{ .cp = 0xCC93, .start = 29414, .len = 3 }, + .{ .cp = 0xCC94, .start = 29417, .len = 3 }, + .{ .cp = 0xCC95, .start = 29420, .len = 3 }, + .{ .cp = 0xCC96, .start = 29423, .len = 3 }, + .{ .cp = 0xCC97, .start = 29426, .len = 3 }, + .{ .cp = 0xCC98, .start = 29429, .len = 2 }, + .{ .cp = 0xCC99, .start = 29431, .len = 3 }, + .{ .cp = 0xCC9A, .start = 29434, .len = 3 }, + .{ .cp = 0xCC9B, .start = 29437, .len = 3 }, + .{ .cp = 0xCC9C, .start = 29440, .len = 3 }, + .{ .cp = 0xCC9D, .start = 29443, .len = 3 }, + .{ .cp = 0xCC9E, .start = 29446, .len = 3 }, + .{ .cp = 0xCC9F, .start = 29449, .len = 3 }, + .{ .cp = 0xCCA0, .start = 29452, .len = 3 }, + .{ .cp = 0xCCA1, .start = 29455, .len = 3 }, + .{ .cp = 0xCCA2, .start = 29458, .len = 3 }, + .{ .cp = 0xCCA3, .start = 29461, .len = 3 }, + .{ .cp = 0xCCA4, .start = 29464, .len = 3 }, + .{ .cp = 0xCCA5, .start = 29467, .len = 3 }, + .{ .cp = 0xCCA6, .start = 29470, .len = 3 }, + .{ .cp = 0xCCA7, .start = 29473, .len = 3 }, + .{ .cp = 0xCCA8, .start = 29476, .len = 3 }, + .{ .cp = 0xCCA9, .start = 29479, .len = 3 }, + .{ .cp = 0xCCAA, .start = 29482, .len = 3 }, + .{ .cp = 0xCCAB, .start = 29485, .len = 3 }, + .{ .cp = 0xCCAC, .start = 29488, .len = 3 }, + .{ .cp = 0xCCAD, .start = 29491, .len = 3 }, + .{ .cp = 0xCCAE, .start = 29494, .len = 3 }, + .{ .cp = 0xCCAF, .start = 29497, .len = 3 }, + .{ .cp = 0xCCB0, .start = 29500, .len = 3 }, + .{ .cp = 0xCCB1, .start = 29503, .len = 3 }, + .{ .cp = 0xCCB2, .start = 29506, .len = 3 }, + .{ .cp = 0xCCB3, .start = 29509, .len = 3 }, + .{ .cp = 0xCCB4, .start = 29512, .len = 2 }, + .{ .cp = 0xCCB5, .start = 29514, .len = 3 }, + .{ .cp = 0xCCB6, .start = 29517, .len = 3 }, + .{ .cp = 0xCCB7, .start = 29520, .len = 3 }, + .{ .cp = 0xCCB8, .start = 29523, .len = 3 }, + .{ .cp = 0xCCB9, .start = 29526, .len = 3 }, + .{ .cp = 0xCCBA, .start = 29529, .len = 3 }, + .{ .cp = 0xCCBB, .start = 29532, .len = 3 }, + .{ .cp = 0xCCBC, .start = 29535, .len = 3 }, + .{ .cp = 0xCCBD, .start = 29538, .len = 3 }, + .{ .cp = 0xCCBE, .start = 29541, .len = 3 }, + .{ .cp = 0xCCBF, .start = 29544, .len = 3 }, + .{ .cp = 0xCCC0, .start = 29547, .len = 3 }, + .{ .cp = 0xCCC1, .start = 29550, .len = 3 }, + .{ .cp = 0xCCC2, .start = 29553, .len = 3 }, + .{ .cp = 0xCCC3, .start = 29556, .len = 3 }, + .{ .cp = 0xCCC4, .start = 29559, .len = 3 }, + .{ .cp = 0xCCC5, .start = 29562, .len = 3 }, + .{ .cp = 0xCCC6, .start = 29565, .len = 3 }, + .{ .cp = 0xCCC7, .start = 29568, .len = 3 }, + .{ .cp = 0xCCC8, .start = 29571, .len = 3 }, + .{ .cp = 0xCCC9, .start = 29574, .len = 3 }, + .{ .cp = 0xCCCA, .start = 29577, .len = 3 }, + .{ .cp = 0xCCCB, .start = 29580, .len = 3 }, + .{ .cp = 0xCCCC, .start = 29583, .len = 3 }, + .{ .cp = 0xCCCD, .start = 29586, .len = 3 }, + .{ .cp = 0xCCCE, .start = 29589, .len = 3 }, + .{ .cp = 0xCCCF, .start = 29592, .len = 3 }, + .{ .cp = 0xCCD0, .start = 29595, .len = 2 }, + .{ .cp = 0xCCD1, .start = 29597, .len = 3 }, + .{ .cp = 0xCCD2, .start = 29600, .len = 3 }, + .{ .cp = 0xCCD3, .start = 29603, .len = 3 }, + .{ .cp = 0xCCD4, .start = 29606, .len = 3 }, + .{ .cp = 0xCCD5, .start = 29609, .len = 3 }, + .{ .cp = 0xCCD6, .start = 29612, .len = 3 }, + .{ .cp = 0xCCD7, .start = 29615, .len = 3 }, + .{ .cp = 0xCCD8, .start = 29618, .len = 3 }, + .{ .cp = 0xCCD9, .start = 29621, .len = 3 }, + .{ .cp = 0xCCDA, .start = 29624, .len = 3 }, + .{ .cp = 0xCCDB, .start = 29627, .len = 3 }, + .{ .cp = 0xCCDC, .start = 29630, .len = 3 }, + .{ .cp = 0xCCDD, .start = 29633, .len = 3 }, + .{ .cp = 0xCCDE, .start = 29636, .len = 3 }, + .{ .cp = 0xCCDF, .start = 29639, .len = 3 }, + .{ .cp = 0xCCE0, .start = 29642, .len = 3 }, + .{ .cp = 0xCCE1, .start = 29645, .len = 3 }, + .{ .cp = 0xCCE2, .start = 29648, .len = 3 }, + .{ .cp = 0xCCE3, .start = 29651, .len = 3 }, + .{ .cp = 0xCCE4, .start = 29654, .len = 3 }, + .{ .cp = 0xCCE5, .start = 29657, .len = 3 }, + .{ .cp = 0xCCE6, .start = 29660, .len = 3 }, + .{ .cp = 0xCCE7, .start = 29663, .len = 3 }, + .{ .cp = 0xCCE8, .start = 29666, .len = 3 }, + .{ .cp = 0xCCE9, .start = 29669, .len = 3 }, + .{ .cp = 0xCCEA, .start = 29672, .len = 3 }, + .{ .cp = 0xCCEB, .start = 29675, .len = 3 }, + .{ .cp = 0xCCEC, .start = 29678, .len = 2 }, + .{ .cp = 0xCCED, .start = 29680, .len = 3 }, + .{ .cp = 0xCCEE, .start = 29683, .len = 3 }, + .{ .cp = 0xCCEF, .start = 29686, .len = 3 }, + .{ .cp = 0xCCF0, .start = 29689, .len = 3 }, + .{ .cp = 0xCCF1, .start = 29692, .len = 3 }, + .{ .cp = 0xCCF2, .start = 29695, .len = 3 }, + .{ .cp = 0xCCF3, .start = 29698, .len = 3 }, + .{ .cp = 0xCCF4, .start = 29701, .len = 3 }, + .{ .cp = 0xCCF5, .start = 29704, .len = 3 }, + .{ .cp = 0xCCF6, .start = 29707, .len = 3 }, + .{ .cp = 0xCCF7, .start = 29710, .len = 3 }, + .{ .cp = 0xCCF8, .start = 29713, .len = 3 }, + .{ .cp = 0xCCF9, .start = 29716, .len = 3 }, + .{ .cp = 0xCCFA, .start = 29719, .len = 3 }, + .{ .cp = 0xCCFB, .start = 29722, .len = 3 }, + .{ .cp = 0xCCFC, .start = 29725, .len = 3 }, + .{ .cp = 0xCCFD, .start = 29728, .len = 3 }, + .{ .cp = 0xCCFE, .start = 29731, .len = 3 }, + .{ .cp = 0xCCFF, .start = 29734, .len = 3 }, + .{ .cp = 0xCD00, .start = 29737, .len = 3 }, + .{ .cp = 0xCD01, .start = 29740, .len = 3 }, + .{ .cp = 0xCD02, .start = 29743, .len = 3 }, + .{ .cp = 0xCD03, .start = 29746, .len = 3 }, + .{ .cp = 0xCD04, .start = 29749, .len = 3 }, + .{ .cp = 0xCD05, .start = 29752, .len = 3 }, + .{ .cp = 0xCD06, .start = 29755, .len = 3 }, + .{ .cp = 0xCD07, .start = 29758, .len = 3 }, + .{ .cp = 0xCD08, .start = 29761, .len = 2 }, + .{ .cp = 0xCD09, .start = 29763, .len = 3 }, + .{ .cp = 0xCD0A, .start = 29766, .len = 3 }, + .{ .cp = 0xCD0B, .start = 29769, .len = 3 }, + .{ .cp = 0xCD0C, .start = 29772, .len = 3 }, + .{ .cp = 0xCD0D, .start = 29775, .len = 3 }, + .{ .cp = 0xCD0E, .start = 29778, .len = 3 }, + .{ .cp = 0xCD0F, .start = 29781, .len = 3 }, + .{ .cp = 0xCD10, .start = 29784, .len = 3 }, + .{ .cp = 0xCD11, .start = 29787, .len = 3 }, + .{ .cp = 0xCD12, .start = 29790, .len = 3 }, + .{ .cp = 0xCD13, .start = 29793, .len = 3 }, + .{ .cp = 0xCD14, .start = 29796, .len = 3 }, + .{ .cp = 0xCD15, .start = 29799, .len = 3 }, + .{ .cp = 0xCD16, .start = 29802, .len = 3 }, + .{ .cp = 0xCD17, .start = 29805, .len = 3 }, + .{ .cp = 0xCD18, .start = 29808, .len = 3 }, + .{ .cp = 0xCD19, .start = 29811, .len = 3 }, + .{ .cp = 0xCD1A, .start = 29814, .len = 3 }, + .{ .cp = 0xCD1B, .start = 29817, .len = 3 }, + .{ .cp = 0xCD1C, .start = 29820, .len = 3 }, + .{ .cp = 0xCD1D, .start = 29823, .len = 3 }, + .{ .cp = 0xCD1E, .start = 29826, .len = 3 }, + .{ .cp = 0xCD1F, .start = 29829, .len = 3 }, + .{ .cp = 0xCD20, .start = 29832, .len = 3 }, + .{ .cp = 0xCD21, .start = 29835, .len = 3 }, + .{ .cp = 0xCD22, .start = 29838, .len = 3 }, + .{ .cp = 0xCD23, .start = 29841, .len = 3 }, + .{ .cp = 0xCD24, .start = 29844, .len = 2 }, + .{ .cp = 0xCD25, .start = 29846, .len = 3 }, + .{ .cp = 0xCD26, .start = 29849, .len = 3 }, + .{ .cp = 0xCD27, .start = 29852, .len = 3 }, + .{ .cp = 0xCD28, .start = 29855, .len = 3 }, + .{ .cp = 0xCD29, .start = 29858, .len = 3 }, + .{ .cp = 0xCD2A, .start = 29861, .len = 3 }, + .{ .cp = 0xCD2B, .start = 29864, .len = 3 }, + .{ .cp = 0xCD2C, .start = 29867, .len = 3 }, + .{ .cp = 0xCD2D, .start = 29870, .len = 3 }, + .{ .cp = 0xCD2E, .start = 29873, .len = 3 }, + .{ .cp = 0xCD2F, .start = 29876, .len = 3 }, + .{ .cp = 0xCD30, .start = 29879, .len = 3 }, + .{ .cp = 0xCD31, .start = 29882, .len = 3 }, + .{ .cp = 0xCD32, .start = 29885, .len = 3 }, + .{ .cp = 0xCD33, .start = 29888, .len = 3 }, + .{ .cp = 0xCD34, .start = 29891, .len = 3 }, + .{ .cp = 0xCD35, .start = 29894, .len = 3 }, + .{ .cp = 0xCD36, .start = 29897, .len = 3 }, + .{ .cp = 0xCD37, .start = 29900, .len = 3 }, + .{ .cp = 0xCD38, .start = 29903, .len = 3 }, + .{ .cp = 0xCD39, .start = 29906, .len = 3 }, + .{ .cp = 0xCD3A, .start = 29909, .len = 3 }, + .{ .cp = 0xCD3B, .start = 29912, .len = 3 }, + .{ .cp = 0xCD3C, .start = 29915, .len = 3 }, + .{ .cp = 0xCD3D, .start = 29918, .len = 3 }, + .{ .cp = 0xCD3E, .start = 29921, .len = 3 }, + .{ .cp = 0xCD3F, .start = 29924, .len = 3 }, + .{ .cp = 0xCD40, .start = 29927, .len = 2 }, + .{ .cp = 0xCD41, .start = 29929, .len = 3 }, + .{ .cp = 0xCD42, .start = 29932, .len = 3 }, + .{ .cp = 0xCD43, .start = 29935, .len = 3 }, + .{ .cp = 0xCD44, .start = 29938, .len = 3 }, + .{ .cp = 0xCD45, .start = 29941, .len = 3 }, + .{ .cp = 0xCD46, .start = 29944, .len = 3 }, + .{ .cp = 0xCD47, .start = 29947, .len = 3 }, + .{ .cp = 0xCD48, .start = 29950, .len = 3 }, + .{ .cp = 0xCD49, .start = 29953, .len = 3 }, + .{ .cp = 0xCD4A, .start = 29956, .len = 3 }, + .{ .cp = 0xCD4B, .start = 29959, .len = 3 }, + .{ .cp = 0xCD4C, .start = 29962, .len = 3 }, + .{ .cp = 0xCD4D, .start = 29965, .len = 3 }, + .{ .cp = 0xCD4E, .start = 29968, .len = 3 }, + .{ .cp = 0xCD4F, .start = 29971, .len = 3 }, + .{ .cp = 0xCD50, .start = 29974, .len = 3 }, + .{ .cp = 0xCD51, .start = 29977, .len = 3 }, + .{ .cp = 0xCD52, .start = 29980, .len = 3 }, + .{ .cp = 0xCD53, .start = 29983, .len = 3 }, + .{ .cp = 0xCD54, .start = 29986, .len = 3 }, + .{ .cp = 0xCD55, .start = 29989, .len = 3 }, + .{ .cp = 0xCD56, .start = 29992, .len = 3 }, + .{ .cp = 0xCD57, .start = 29995, .len = 3 }, + .{ .cp = 0xCD58, .start = 29998, .len = 3 }, + .{ .cp = 0xCD59, .start = 30001, .len = 3 }, + .{ .cp = 0xCD5A, .start = 30004, .len = 3 }, + .{ .cp = 0xCD5B, .start = 30007, .len = 3 }, + .{ .cp = 0xCD5C, .start = 30010, .len = 2 }, + .{ .cp = 0xCD5D, .start = 30012, .len = 3 }, + .{ .cp = 0xCD5E, .start = 30015, .len = 3 }, + .{ .cp = 0xCD5F, .start = 30018, .len = 3 }, + .{ .cp = 0xCD60, .start = 30021, .len = 3 }, + .{ .cp = 0xCD61, .start = 30024, .len = 3 }, + .{ .cp = 0xCD62, .start = 30027, .len = 3 }, + .{ .cp = 0xCD63, .start = 30030, .len = 3 }, + .{ .cp = 0xCD64, .start = 30033, .len = 3 }, + .{ .cp = 0xCD65, .start = 30036, .len = 3 }, + .{ .cp = 0xCD66, .start = 30039, .len = 3 }, + .{ .cp = 0xCD67, .start = 30042, .len = 3 }, + .{ .cp = 0xCD68, .start = 30045, .len = 3 }, + .{ .cp = 0xCD69, .start = 30048, .len = 3 }, + .{ .cp = 0xCD6A, .start = 30051, .len = 3 }, + .{ .cp = 0xCD6B, .start = 30054, .len = 3 }, + .{ .cp = 0xCD6C, .start = 30057, .len = 3 }, + .{ .cp = 0xCD6D, .start = 30060, .len = 3 }, + .{ .cp = 0xCD6E, .start = 30063, .len = 3 }, + .{ .cp = 0xCD6F, .start = 30066, .len = 3 }, + .{ .cp = 0xCD70, .start = 30069, .len = 3 }, + .{ .cp = 0xCD71, .start = 30072, .len = 3 }, + .{ .cp = 0xCD72, .start = 30075, .len = 3 }, + .{ .cp = 0xCD73, .start = 30078, .len = 3 }, + .{ .cp = 0xCD74, .start = 30081, .len = 3 }, + .{ .cp = 0xCD75, .start = 30084, .len = 3 }, + .{ .cp = 0xCD76, .start = 30087, .len = 3 }, + .{ .cp = 0xCD77, .start = 30090, .len = 3 }, + .{ .cp = 0xCD78, .start = 30093, .len = 2 }, + .{ .cp = 0xCD79, .start = 30095, .len = 3 }, + .{ .cp = 0xCD7A, .start = 30098, .len = 3 }, + .{ .cp = 0xCD7B, .start = 30101, .len = 3 }, + .{ .cp = 0xCD7C, .start = 30104, .len = 3 }, + .{ .cp = 0xCD7D, .start = 30107, .len = 3 }, + .{ .cp = 0xCD7E, .start = 30110, .len = 3 }, + .{ .cp = 0xCD7F, .start = 30113, .len = 3 }, + .{ .cp = 0xCD80, .start = 30116, .len = 3 }, + .{ .cp = 0xCD81, .start = 30119, .len = 3 }, + .{ .cp = 0xCD82, .start = 30122, .len = 3 }, + .{ .cp = 0xCD83, .start = 30125, .len = 3 }, + .{ .cp = 0xCD84, .start = 30128, .len = 3 }, + .{ .cp = 0xCD85, .start = 30131, .len = 3 }, + .{ .cp = 0xCD86, .start = 30134, .len = 3 }, + .{ .cp = 0xCD87, .start = 30137, .len = 3 }, + .{ .cp = 0xCD88, .start = 30140, .len = 3 }, + .{ .cp = 0xCD89, .start = 30143, .len = 3 }, + .{ .cp = 0xCD8A, .start = 30146, .len = 3 }, + .{ .cp = 0xCD8B, .start = 30149, .len = 3 }, + .{ .cp = 0xCD8C, .start = 30152, .len = 3 }, + .{ .cp = 0xCD8D, .start = 30155, .len = 3 }, + .{ .cp = 0xCD8E, .start = 30158, .len = 3 }, + .{ .cp = 0xCD8F, .start = 30161, .len = 3 }, + .{ .cp = 0xCD90, .start = 30164, .len = 3 }, + .{ .cp = 0xCD91, .start = 30167, .len = 3 }, + .{ .cp = 0xCD92, .start = 30170, .len = 3 }, + .{ .cp = 0xCD93, .start = 30173, .len = 3 }, + .{ .cp = 0xCD94, .start = 30176, .len = 2 }, + .{ .cp = 0xCD95, .start = 30178, .len = 3 }, + .{ .cp = 0xCD96, .start = 30181, .len = 3 }, + .{ .cp = 0xCD97, .start = 30184, .len = 3 }, + .{ .cp = 0xCD98, .start = 30187, .len = 3 }, + .{ .cp = 0xCD99, .start = 30190, .len = 3 }, + .{ .cp = 0xCD9A, .start = 30193, .len = 3 }, + .{ .cp = 0xCD9B, .start = 30196, .len = 3 }, + .{ .cp = 0xCD9C, .start = 30199, .len = 3 }, + .{ .cp = 0xCD9D, .start = 30202, .len = 3 }, + .{ .cp = 0xCD9E, .start = 30205, .len = 3 }, + .{ .cp = 0xCD9F, .start = 30208, .len = 3 }, + .{ .cp = 0xCDA0, .start = 30211, .len = 3 }, + .{ .cp = 0xCDA1, .start = 30214, .len = 3 }, + .{ .cp = 0xCDA2, .start = 30217, .len = 3 }, + .{ .cp = 0xCDA3, .start = 30220, .len = 3 }, + .{ .cp = 0xCDA4, .start = 30223, .len = 3 }, + .{ .cp = 0xCDA5, .start = 30226, .len = 3 }, + .{ .cp = 0xCDA6, .start = 30229, .len = 3 }, + .{ .cp = 0xCDA7, .start = 30232, .len = 3 }, + .{ .cp = 0xCDA8, .start = 30235, .len = 3 }, + .{ .cp = 0xCDA9, .start = 30238, .len = 3 }, + .{ .cp = 0xCDAA, .start = 30241, .len = 3 }, + .{ .cp = 0xCDAB, .start = 30244, .len = 3 }, + .{ .cp = 0xCDAC, .start = 30247, .len = 3 }, + .{ .cp = 0xCDAD, .start = 30250, .len = 3 }, + .{ .cp = 0xCDAE, .start = 30253, .len = 3 }, + .{ .cp = 0xCDAF, .start = 30256, .len = 3 }, + .{ .cp = 0xCDB0, .start = 30259, .len = 2 }, + .{ .cp = 0xCDB1, .start = 30261, .len = 3 }, + .{ .cp = 0xCDB2, .start = 30264, .len = 3 }, + .{ .cp = 0xCDB3, .start = 30267, .len = 3 }, + .{ .cp = 0xCDB4, .start = 30270, .len = 3 }, + .{ .cp = 0xCDB5, .start = 30273, .len = 3 }, + .{ .cp = 0xCDB6, .start = 30276, .len = 3 }, + .{ .cp = 0xCDB7, .start = 30279, .len = 3 }, + .{ .cp = 0xCDB8, .start = 30282, .len = 3 }, + .{ .cp = 0xCDB9, .start = 30285, .len = 3 }, + .{ .cp = 0xCDBA, .start = 30288, .len = 3 }, + .{ .cp = 0xCDBB, .start = 30291, .len = 3 }, + .{ .cp = 0xCDBC, .start = 30294, .len = 3 }, + .{ .cp = 0xCDBD, .start = 30297, .len = 3 }, + .{ .cp = 0xCDBE, .start = 30300, .len = 3 }, + .{ .cp = 0xCDBF, .start = 30303, .len = 3 }, + .{ .cp = 0xCDC0, .start = 30306, .len = 3 }, + .{ .cp = 0xCDC1, .start = 30309, .len = 3 }, + .{ .cp = 0xCDC2, .start = 30312, .len = 3 }, + .{ .cp = 0xCDC3, .start = 30315, .len = 3 }, + .{ .cp = 0xCDC4, .start = 30318, .len = 3 }, + .{ .cp = 0xCDC5, .start = 30321, .len = 3 }, + .{ .cp = 0xCDC6, .start = 30324, .len = 3 }, + .{ .cp = 0xCDC7, .start = 30327, .len = 3 }, + .{ .cp = 0xCDC8, .start = 30330, .len = 3 }, + .{ .cp = 0xCDC9, .start = 30333, .len = 3 }, + .{ .cp = 0xCDCA, .start = 30336, .len = 3 }, + .{ .cp = 0xCDCB, .start = 30339, .len = 3 }, + .{ .cp = 0xCDCC, .start = 30342, .len = 2 }, + .{ .cp = 0xCDCD, .start = 30344, .len = 3 }, + .{ .cp = 0xCDCE, .start = 30347, .len = 3 }, + .{ .cp = 0xCDCF, .start = 30350, .len = 3 }, + .{ .cp = 0xCDD0, .start = 30353, .len = 3 }, + .{ .cp = 0xCDD1, .start = 30356, .len = 3 }, + .{ .cp = 0xCDD2, .start = 30359, .len = 3 }, + .{ .cp = 0xCDD3, .start = 30362, .len = 3 }, + .{ .cp = 0xCDD4, .start = 30365, .len = 3 }, + .{ .cp = 0xCDD5, .start = 30368, .len = 3 }, + .{ .cp = 0xCDD6, .start = 30371, .len = 3 }, + .{ .cp = 0xCDD7, .start = 30374, .len = 3 }, + .{ .cp = 0xCDD8, .start = 30377, .len = 3 }, + .{ .cp = 0xCDD9, .start = 30380, .len = 3 }, + .{ .cp = 0xCDDA, .start = 30383, .len = 3 }, + .{ .cp = 0xCDDB, .start = 30386, .len = 3 }, + .{ .cp = 0xCDDC, .start = 30389, .len = 3 }, + .{ .cp = 0xCDDD, .start = 30392, .len = 3 }, + .{ .cp = 0xCDDE, .start = 30395, .len = 3 }, + .{ .cp = 0xCDDF, .start = 30398, .len = 3 }, + .{ .cp = 0xCDE0, .start = 30401, .len = 3 }, + .{ .cp = 0xCDE1, .start = 30404, .len = 3 }, + .{ .cp = 0xCDE2, .start = 30407, .len = 3 }, + .{ .cp = 0xCDE3, .start = 30410, .len = 3 }, + .{ .cp = 0xCDE4, .start = 30413, .len = 3 }, + .{ .cp = 0xCDE5, .start = 30416, .len = 3 }, + .{ .cp = 0xCDE6, .start = 30419, .len = 3 }, + .{ .cp = 0xCDE7, .start = 30422, .len = 3 }, + .{ .cp = 0xCDE8, .start = 30425, .len = 2 }, + .{ .cp = 0xCDE9, .start = 30427, .len = 3 }, + .{ .cp = 0xCDEA, .start = 30430, .len = 3 }, + .{ .cp = 0xCDEB, .start = 30433, .len = 3 }, + .{ .cp = 0xCDEC, .start = 30436, .len = 3 }, + .{ .cp = 0xCDED, .start = 30439, .len = 3 }, + .{ .cp = 0xCDEE, .start = 30442, .len = 3 }, + .{ .cp = 0xCDEF, .start = 30445, .len = 3 }, + .{ .cp = 0xCDF0, .start = 30448, .len = 3 }, + .{ .cp = 0xCDF1, .start = 30451, .len = 3 }, + .{ .cp = 0xCDF2, .start = 30454, .len = 3 }, + .{ .cp = 0xCDF3, .start = 30457, .len = 3 }, + .{ .cp = 0xCDF4, .start = 30460, .len = 3 }, + .{ .cp = 0xCDF5, .start = 30463, .len = 3 }, + .{ .cp = 0xCDF6, .start = 30466, .len = 3 }, + .{ .cp = 0xCDF7, .start = 30469, .len = 3 }, + .{ .cp = 0xCDF8, .start = 30472, .len = 3 }, + .{ .cp = 0xCDF9, .start = 30475, .len = 3 }, + .{ .cp = 0xCDFA, .start = 30478, .len = 3 }, + .{ .cp = 0xCDFB, .start = 30481, .len = 3 }, + .{ .cp = 0xCDFC, .start = 30484, .len = 3 }, + .{ .cp = 0xCDFD, .start = 30487, .len = 3 }, + .{ .cp = 0xCDFE, .start = 30490, .len = 3 }, + .{ .cp = 0xCDFF, .start = 30493, .len = 3 }, + .{ .cp = 0xCE00, .start = 30496, .len = 3 }, + .{ .cp = 0xCE01, .start = 30499, .len = 3 }, + .{ .cp = 0xCE02, .start = 30502, .len = 3 }, + .{ .cp = 0xCE03, .start = 30505, .len = 3 }, + .{ .cp = 0xCE04, .start = 30508, .len = 2 }, + .{ .cp = 0xCE05, .start = 30510, .len = 3 }, + .{ .cp = 0xCE06, .start = 30513, .len = 3 }, + .{ .cp = 0xCE07, .start = 30516, .len = 3 }, + .{ .cp = 0xCE08, .start = 30519, .len = 3 }, + .{ .cp = 0xCE09, .start = 30522, .len = 3 }, + .{ .cp = 0xCE0A, .start = 30525, .len = 3 }, + .{ .cp = 0xCE0B, .start = 30528, .len = 3 }, + .{ .cp = 0xCE0C, .start = 30531, .len = 3 }, + .{ .cp = 0xCE0D, .start = 30534, .len = 3 }, + .{ .cp = 0xCE0E, .start = 30537, .len = 3 }, + .{ .cp = 0xCE0F, .start = 30540, .len = 3 }, + .{ .cp = 0xCE10, .start = 30543, .len = 3 }, + .{ .cp = 0xCE11, .start = 30546, .len = 3 }, + .{ .cp = 0xCE12, .start = 30549, .len = 3 }, + .{ .cp = 0xCE13, .start = 30552, .len = 3 }, + .{ .cp = 0xCE14, .start = 30555, .len = 3 }, + .{ .cp = 0xCE15, .start = 30558, .len = 3 }, + .{ .cp = 0xCE16, .start = 30561, .len = 3 }, + .{ .cp = 0xCE17, .start = 30564, .len = 3 }, + .{ .cp = 0xCE18, .start = 30567, .len = 3 }, + .{ .cp = 0xCE19, .start = 30570, .len = 3 }, + .{ .cp = 0xCE1A, .start = 30573, .len = 3 }, + .{ .cp = 0xCE1B, .start = 30576, .len = 3 }, + .{ .cp = 0xCE1C, .start = 30579, .len = 3 }, + .{ .cp = 0xCE1D, .start = 30582, .len = 3 }, + .{ .cp = 0xCE1E, .start = 30585, .len = 3 }, + .{ .cp = 0xCE1F, .start = 30588, .len = 3 }, + .{ .cp = 0xCE20, .start = 30591, .len = 2 }, + .{ .cp = 0xCE21, .start = 30593, .len = 3 }, + .{ .cp = 0xCE22, .start = 30596, .len = 3 }, + .{ .cp = 0xCE23, .start = 30599, .len = 3 }, + .{ .cp = 0xCE24, .start = 30602, .len = 3 }, + .{ .cp = 0xCE25, .start = 30605, .len = 3 }, + .{ .cp = 0xCE26, .start = 30608, .len = 3 }, + .{ .cp = 0xCE27, .start = 30611, .len = 3 }, + .{ .cp = 0xCE28, .start = 30614, .len = 3 }, + .{ .cp = 0xCE29, .start = 30617, .len = 3 }, + .{ .cp = 0xCE2A, .start = 30620, .len = 3 }, + .{ .cp = 0xCE2B, .start = 30623, .len = 3 }, + .{ .cp = 0xCE2C, .start = 30626, .len = 3 }, + .{ .cp = 0xCE2D, .start = 30629, .len = 3 }, + .{ .cp = 0xCE2E, .start = 30632, .len = 3 }, + .{ .cp = 0xCE2F, .start = 30635, .len = 3 }, + .{ .cp = 0xCE30, .start = 30638, .len = 3 }, + .{ .cp = 0xCE31, .start = 30641, .len = 3 }, + .{ .cp = 0xCE32, .start = 30644, .len = 3 }, + .{ .cp = 0xCE33, .start = 30647, .len = 3 }, + .{ .cp = 0xCE34, .start = 30650, .len = 3 }, + .{ .cp = 0xCE35, .start = 30653, .len = 3 }, + .{ .cp = 0xCE36, .start = 30656, .len = 3 }, + .{ .cp = 0xCE37, .start = 30659, .len = 3 }, + .{ .cp = 0xCE38, .start = 30662, .len = 3 }, + .{ .cp = 0xCE39, .start = 30665, .len = 3 }, + .{ .cp = 0xCE3A, .start = 30668, .len = 3 }, + .{ .cp = 0xCE3B, .start = 30671, .len = 3 }, + .{ .cp = 0xCE3C, .start = 30674, .len = 2 }, + .{ .cp = 0xCE3D, .start = 30676, .len = 3 }, + .{ .cp = 0xCE3E, .start = 30679, .len = 3 }, + .{ .cp = 0xCE3F, .start = 30682, .len = 3 }, + .{ .cp = 0xCE40, .start = 30685, .len = 3 }, + .{ .cp = 0xCE41, .start = 30688, .len = 3 }, + .{ .cp = 0xCE42, .start = 30691, .len = 3 }, + .{ .cp = 0xCE43, .start = 30694, .len = 3 }, + .{ .cp = 0xCE44, .start = 30697, .len = 3 }, + .{ .cp = 0xCE45, .start = 30700, .len = 3 }, + .{ .cp = 0xCE46, .start = 30703, .len = 3 }, + .{ .cp = 0xCE47, .start = 30706, .len = 3 }, + .{ .cp = 0xCE48, .start = 30709, .len = 3 }, + .{ .cp = 0xCE49, .start = 30712, .len = 3 }, + .{ .cp = 0xCE4A, .start = 30715, .len = 3 }, + .{ .cp = 0xCE4B, .start = 30718, .len = 3 }, + .{ .cp = 0xCE4C, .start = 30721, .len = 3 }, + .{ .cp = 0xCE4D, .start = 30724, .len = 3 }, + .{ .cp = 0xCE4E, .start = 30727, .len = 3 }, + .{ .cp = 0xCE4F, .start = 30730, .len = 3 }, + .{ .cp = 0xCE50, .start = 30733, .len = 3 }, + .{ .cp = 0xCE51, .start = 30736, .len = 3 }, + .{ .cp = 0xCE52, .start = 30739, .len = 3 }, + .{ .cp = 0xCE53, .start = 30742, .len = 3 }, + .{ .cp = 0xCE54, .start = 30745, .len = 3 }, + .{ .cp = 0xCE55, .start = 30748, .len = 3 }, + .{ .cp = 0xCE56, .start = 30751, .len = 3 }, + .{ .cp = 0xCE57, .start = 30754, .len = 3 }, + .{ .cp = 0xCE58, .start = 30757, .len = 2 }, + .{ .cp = 0xCE59, .start = 30759, .len = 3 }, + .{ .cp = 0xCE5A, .start = 30762, .len = 3 }, + .{ .cp = 0xCE5B, .start = 30765, .len = 3 }, + .{ .cp = 0xCE5C, .start = 30768, .len = 3 }, + .{ .cp = 0xCE5D, .start = 30771, .len = 3 }, + .{ .cp = 0xCE5E, .start = 30774, .len = 3 }, + .{ .cp = 0xCE5F, .start = 30777, .len = 3 }, + .{ .cp = 0xCE60, .start = 30780, .len = 3 }, + .{ .cp = 0xCE61, .start = 30783, .len = 3 }, + .{ .cp = 0xCE62, .start = 30786, .len = 3 }, + .{ .cp = 0xCE63, .start = 30789, .len = 3 }, + .{ .cp = 0xCE64, .start = 30792, .len = 3 }, + .{ .cp = 0xCE65, .start = 30795, .len = 3 }, + .{ .cp = 0xCE66, .start = 30798, .len = 3 }, + .{ .cp = 0xCE67, .start = 30801, .len = 3 }, + .{ .cp = 0xCE68, .start = 30804, .len = 3 }, + .{ .cp = 0xCE69, .start = 30807, .len = 3 }, + .{ .cp = 0xCE6A, .start = 30810, .len = 3 }, + .{ .cp = 0xCE6B, .start = 30813, .len = 3 }, + .{ .cp = 0xCE6C, .start = 30816, .len = 3 }, + .{ .cp = 0xCE6D, .start = 30819, .len = 3 }, + .{ .cp = 0xCE6E, .start = 30822, .len = 3 }, + .{ .cp = 0xCE6F, .start = 30825, .len = 3 }, + .{ .cp = 0xCE70, .start = 30828, .len = 3 }, + .{ .cp = 0xCE71, .start = 30831, .len = 3 }, + .{ .cp = 0xCE72, .start = 30834, .len = 3 }, + .{ .cp = 0xCE73, .start = 30837, .len = 3 }, + .{ .cp = 0xCE74, .start = 30840, .len = 2 }, + .{ .cp = 0xCE75, .start = 30842, .len = 3 }, + .{ .cp = 0xCE76, .start = 30845, .len = 3 }, + .{ .cp = 0xCE77, .start = 30848, .len = 3 }, + .{ .cp = 0xCE78, .start = 30851, .len = 3 }, + .{ .cp = 0xCE79, .start = 30854, .len = 3 }, + .{ .cp = 0xCE7A, .start = 30857, .len = 3 }, + .{ .cp = 0xCE7B, .start = 30860, .len = 3 }, + .{ .cp = 0xCE7C, .start = 30863, .len = 3 }, + .{ .cp = 0xCE7D, .start = 30866, .len = 3 }, + .{ .cp = 0xCE7E, .start = 30869, .len = 3 }, + .{ .cp = 0xCE7F, .start = 30872, .len = 3 }, + .{ .cp = 0xCE80, .start = 30875, .len = 3 }, + .{ .cp = 0xCE81, .start = 30878, .len = 3 }, + .{ .cp = 0xCE82, .start = 30881, .len = 3 }, + .{ .cp = 0xCE83, .start = 30884, .len = 3 }, + .{ .cp = 0xCE84, .start = 30887, .len = 3 }, + .{ .cp = 0xCE85, .start = 30890, .len = 3 }, + .{ .cp = 0xCE86, .start = 30893, .len = 3 }, + .{ .cp = 0xCE87, .start = 30896, .len = 3 }, + .{ .cp = 0xCE88, .start = 30899, .len = 3 }, + .{ .cp = 0xCE89, .start = 30902, .len = 3 }, + .{ .cp = 0xCE8A, .start = 30905, .len = 3 }, + .{ .cp = 0xCE8B, .start = 30908, .len = 3 }, + .{ .cp = 0xCE8C, .start = 30911, .len = 3 }, + .{ .cp = 0xCE8D, .start = 30914, .len = 3 }, + .{ .cp = 0xCE8E, .start = 30917, .len = 3 }, + .{ .cp = 0xCE8F, .start = 30920, .len = 3 }, + .{ .cp = 0xCE90, .start = 30923, .len = 2 }, + .{ .cp = 0xCE91, .start = 30925, .len = 3 }, + .{ .cp = 0xCE92, .start = 30928, .len = 3 }, + .{ .cp = 0xCE93, .start = 30931, .len = 3 }, + .{ .cp = 0xCE94, .start = 30934, .len = 3 }, + .{ .cp = 0xCE95, .start = 30937, .len = 3 }, + .{ .cp = 0xCE96, .start = 30940, .len = 3 }, + .{ .cp = 0xCE97, .start = 30943, .len = 3 }, + .{ .cp = 0xCE98, .start = 30946, .len = 3 }, + .{ .cp = 0xCE99, .start = 30949, .len = 3 }, + .{ .cp = 0xCE9A, .start = 30952, .len = 3 }, + .{ .cp = 0xCE9B, .start = 30955, .len = 3 }, + .{ .cp = 0xCE9C, .start = 30958, .len = 3 }, + .{ .cp = 0xCE9D, .start = 30961, .len = 3 }, + .{ .cp = 0xCE9E, .start = 30964, .len = 3 }, + .{ .cp = 0xCE9F, .start = 30967, .len = 3 }, + .{ .cp = 0xCEA0, .start = 30970, .len = 3 }, + .{ .cp = 0xCEA1, .start = 30973, .len = 3 }, + .{ .cp = 0xCEA2, .start = 30976, .len = 3 }, + .{ .cp = 0xCEA3, .start = 30979, .len = 3 }, + .{ .cp = 0xCEA4, .start = 30982, .len = 3 }, + .{ .cp = 0xCEA5, .start = 30985, .len = 3 }, + .{ .cp = 0xCEA6, .start = 30988, .len = 3 }, + .{ .cp = 0xCEA7, .start = 30991, .len = 3 }, + .{ .cp = 0xCEA8, .start = 30994, .len = 3 }, + .{ .cp = 0xCEA9, .start = 30997, .len = 3 }, + .{ .cp = 0xCEAA, .start = 31000, .len = 3 }, + .{ .cp = 0xCEAB, .start = 31003, .len = 3 }, + .{ .cp = 0xCEAC, .start = 31006, .len = 2 }, + .{ .cp = 0xCEAD, .start = 31008, .len = 3 }, + .{ .cp = 0xCEAE, .start = 31011, .len = 3 }, + .{ .cp = 0xCEAF, .start = 31014, .len = 3 }, + .{ .cp = 0xCEB0, .start = 31017, .len = 3 }, + .{ .cp = 0xCEB1, .start = 31020, .len = 3 }, + .{ .cp = 0xCEB2, .start = 31023, .len = 3 }, + .{ .cp = 0xCEB3, .start = 31026, .len = 3 }, + .{ .cp = 0xCEB4, .start = 31029, .len = 3 }, + .{ .cp = 0xCEB5, .start = 31032, .len = 3 }, + .{ .cp = 0xCEB6, .start = 31035, .len = 3 }, + .{ .cp = 0xCEB7, .start = 31038, .len = 3 }, + .{ .cp = 0xCEB8, .start = 31041, .len = 3 }, + .{ .cp = 0xCEB9, .start = 31044, .len = 3 }, + .{ .cp = 0xCEBA, .start = 31047, .len = 3 }, + .{ .cp = 0xCEBB, .start = 31050, .len = 3 }, + .{ .cp = 0xCEBC, .start = 31053, .len = 3 }, + .{ .cp = 0xCEBD, .start = 31056, .len = 3 }, + .{ .cp = 0xCEBE, .start = 31059, .len = 3 }, + .{ .cp = 0xCEBF, .start = 31062, .len = 3 }, + .{ .cp = 0xCEC0, .start = 31065, .len = 3 }, + .{ .cp = 0xCEC1, .start = 31068, .len = 3 }, + .{ .cp = 0xCEC2, .start = 31071, .len = 3 }, + .{ .cp = 0xCEC3, .start = 31074, .len = 3 }, + .{ .cp = 0xCEC4, .start = 31077, .len = 3 }, + .{ .cp = 0xCEC5, .start = 31080, .len = 3 }, + .{ .cp = 0xCEC6, .start = 31083, .len = 3 }, + .{ .cp = 0xCEC7, .start = 31086, .len = 3 }, + .{ .cp = 0xCEC8, .start = 31089, .len = 2 }, + .{ .cp = 0xCEC9, .start = 31091, .len = 3 }, + .{ .cp = 0xCECA, .start = 31094, .len = 3 }, + .{ .cp = 0xCECB, .start = 31097, .len = 3 }, + .{ .cp = 0xCECC, .start = 31100, .len = 3 }, + .{ .cp = 0xCECD, .start = 31103, .len = 3 }, + .{ .cp = 0xCECE, .start = 31106, .len = 3 }, + .{ .cp = 0xCECF, .start = 31109, .len = 3 }, + .{ .cp = 0xCED0, .start = 31112, .len = 3 }, + .{ .cp = 0xCED1, .start = 31115, .len = 3 }, + .{ .cp = 0xCED2, .start = 31118, .len = 3 }, + .{ .cp = 0xCED3, .start = 31121, .len = 3 }, + .{ .cp = 0xCED4, .start = 31124, .len = 3 }, + .{ .cp = 0xCED5, .start = 31127, .len = 3 }, + .{ .cp = 0xCED6, .start = 31130, .len = 3 }, + .{ .cp = 0xCED7, .start = 31133, .len = 3 }, + .{ .cp = 0xCED8, .start = 31136, .len = 3 }, + .{ .cp = 0xCED9, .start = 31139, .len = 3 }, + .{ .cp = 0xCEDA, .start = 31142, .len = 3 }, + .{ .cp = 0xCEDB, .start = 31145, .len = 3 }, + .{ .cp = 0xCEDC, .start = 31148, .len = 3 }, + .{ .cp = 0xCEDD, .start = 31151, .len = 3 }, + .{ .cp = 0xCEDE, .start = 31154, .len = 3 }, + .{ .cp = 0xCEDF, .start = 31157, .len = 3 }, + .{ .cp = 0xCEE0, .start = 31160, .len = 3 }, + .{ .cp = 0xCEE1, .start = 31163, .len = 3 }, + .{ .cp = 0xCEE2, .start = 31166, .len = 3 }, + .{ .cp = 0xCEE3, .start = 31169, .len = 3 }, + .{ .cp = 0xCEE4, .start = 31172, .len = 2 }, + .{ .cp = 0xCEE5, .start = 31174, .len = 3 }, + .{ .cp = 0xCEE6, .start = 31177, .len = 3 }, + .{ .cp = 0xCEE7, .start = 31180, .len = 3 }, + .{ .cp = 0xCEE8, .start = 31183, .len = 3 }, + .{ .cp = 0xCEE9, .start = 31186, .len = 3 }, + .{ .cp = 0xCEEA, .start = 31189, .len = 3 }, + .{ .cp = 0xCEEB, .start = 31192, .len = 3 }, + .{ .cp = 0xCEEC, .start = 31195, .len = 3 }, + .{ .cp = 0xCEED, .start = 31198, .len = 3 }, + .{ .cp = 0xCEEE, .start = 31201, .len = 3 }, + .{ .cp = 0xCEEF, .start = 31204, .len = 3 }, + .{ .cp = 0xCEF0, .start = 31207, .len = 3 }, + .{ .cp = 0xCEF1, .start = 31210, .len = 3 }, + .{ .cp = 0xCEF2, .start = 31213, .len = 3 }, + .{ .cp = 0xCEF3, .start = 31216, .len = 3 }, + .{ .cp = 0xCEF4, .start = 31219, .len = 3 }, + .{ .cp = 0xCEF5, .start = 31222, .len = 3 }, + .{ .cp = 0xCEF6, .start = 31225, .len = 3 }, + .{ .cp = 0xCEF7, .start = 31228, .len = 3 }, + .{ .cp = 0xCEF8, .start = 31231, .len = 3 }, + .{ .cp = 0xCEF9, .start = 31234, .len = 3 }, + .{ .cp = 0xCEFA, .start = 31237, .len = 3 }, + .{ .cp = 0xCEFB, .start = 31240, .len = 3 }, + .{ .cp = 0xCEFC, .start = 31243, .len = 3 }, + .{ .cp = 0xCEFD, .start = 31246, .len = 3 }, + .{ .cp = 0xCEFE, .start = 31249, .len = 3 }, + .{ .cp = 0xCEFF, .start = 31252, .len = 3 }, + .{ .cp = 0xCF00, .start = 31255, .len = 2 }, + .{ .cp = 0xCF01, .start = 31257, .len = 3 }, + .{ .cp = 0xCF02, .start = 31260, .len = 3 }, + .{ .cp = 0xCF03, .start = 31263, .len = 3 }, + .{ .cp = 0xCF04, .start = 31266, .len = 3 }, + .{ .cp = 0xCF05, .start = 31269, .len = 3 }, + .{ .cp = 0xCF06, .start = 31272, .len = 3 }, + .{ .cp = 0xCF07, .start = 31275, .len = 3 }, + .{ .cp = 0xCF08, .start = 31278, .len = 3 }, + .{ .cp = 0xCF09, .start = 31281, .len = 3 }, + .{ .cp = 0xCF0A, .start = 31284, .len = 3 }, + .{ .cp = 0xCF0B, .start = 31287, .len = 3 }, + .{ .cp = 0xCF0C, .start = 31290, .len = 3 }, + .{ .cp = 0xCF0D, .start = 31293, .len = 3 }, + .{ .cp = 0xCF0E, .start = 31296, .len = 3 }, + .{ .cp = 0xCF0F, .start = 31299, .len = 3 }, + .{ .cp = 0xCF10, .start = 31302, .len = 3 }, + .{ .cp = 0xCF11, .start = 31305, .len = 3 }, + .{ .cp = 0xCF12, .start = 31308, .len = 3 }, + .{ .cp = 0xCF13, .start = 31311, .len = 3 }, + .{ .cp = 0xCF14, .start = 31314, .len = 3 }, + .{ .cp = 0xCF15, .start = 31317, .len = 3 }, + .{ .cp = 0xCF16, .start = 31320, .len = 3 }, + .{ .cp = 0xCF17, .start = 31323, .len = 3 }, + .{ .cp = 0xCF18, .start = 31326, .len = 3 }, + .{ .cp = 0xCF19, .start = 31329, .len = 3 }, + .{ .cp = 0xCF1A, .start = 31332, .len = 3 }, + .{ .cp = 0xCF1B, .start = 31335, .len = 3 }, + .{ .cp = 0xCF1C, .start = 31338, .len = 2 }, + .{ .cp = 0xCF1D, .start = 31340, .len = 3 }, + .{ .cp = 0xCF1E, .start = 31343, .len = 3 }, + .{ .cp = 0xCF1F, .start = 31346, .len = 3 }, + .{ .cp = 0xCF20, .start = 31349, .len = 3 }, + .{ .cp = 0xCF21, .start = 31352, .len = 3 }, + .{ .cp = 0xCF22, .start = 31355, .len = 3 }, + .{ .cp = 0xCF23, .start = 31358, .len = 3 }, + .{ .cp = 0xCF24, .start = 31361, .len = 3 }, + .{ .cp = 0xCF25, .start = 31364, .len = 3 }, + .{ .cp = 0xCF26, .start = 31367, .len = 3 }, + .{ .cp = 0xCF27, .start = 31370, .len = 3 }, + .{ .cp = 0xCF28, .start = 31373, .len = 3 }, + .{ .cp = 0xCF29, .start = 31376, .len = 3 }, + .{ .cp = 0xCF2A, .start = 31379, .len = 3 }, + .{ .cp = 0xCF2B, .start = 31382, .len = 3 }, + .{ .cp = 0xCF2C, .start = 31385, .len = 3 }, + .{ .cp = 0xCF2D, .start = 31388, .len = 3 }, + .{ .cp = 0xCF2E, .start = 31391, .len = 3 }, + .{ .cp = 0xCF2F, .start = 31394, .len = 3 }, + .{ .cp = 0xCF30, .start = 31397, .len = 3 }, + .{ .cp = 0xCF31, .start = 31400, .len = 3 }, + .{ .cp = 0xCF32, .start = 31403, .len = 3 }, + .{ .cp = 0xCF33, .start = 31406, .len = 3 }, + .{ .cp = 0xCF34, .start = 31409, .len = 3 }, + .{ .cp = 0xCF35, .start = 31412, .len = 3 }, + .{ .cp = 0xCF36, .start = 31415, .len = 3 }, + .{ .cp = 0xCF37, .start = 31418, .len = 3 }, + .{ .cp = 0xCF38, .start = 31421, .len = 2 }, + .{ .cp = 0xCF39, .start = 31423, .len = 3 }, + .{ .cp = 0xCF3A, .start = 31426, .len = 3 }, + .{ .cp = 0xCF3B, .start = 31429, .len = 3 }, + .{ .cp = 0xCF3C, .start = 31432, .len = 3 }, + .{ .cp = 0xCF3D, .start = 31435, .len = 3 }, + .{ .cp = 0xCF3E, .start = 31438, .len = 3 }, + .{ .cp = 0xCF3F, .start = 31441, .len = 3 }, + .{ .cp = 0xCF40, .start = 31444, .len = 3 }, + .{ .cp = 0xCF41, .start = 31447, .len = 3 }, + .{ .cp = 0xCF42, .start = 31450, .len = 3 }, + .{ .cp = 0xCF43, .start = 31453, .len = 3 }, + .{ .cp = 0xCF44, .start = 31456, .len = 3 }, + .{ .cp = 0xCF45, .start = 31459, .len = 3 }, + .{ .cp = 0xCF46, .start = 31462, .len = 3 }, + .{ .cp = 0xCF47, .start = 31465, .len = 3 }, + .{ .cp = 0xCF48, .start = 31468, .len = 3 }, + .{ .cp = 0xCF49, .start = 31471, .len = 3 }, + .{ .cp = 0xCF4A, .start = 31474, .len = 3 }, + .{ .cp = 0xCF4B, .start = 31477, .len = 3 }, + .{ .cp = 0xCF4C, .start = 31480, .len = 3 }, + .{ .cp = 0xCF4D, .start = 31483, .len = 3 }, + .{ .cp = 0xCF4E, .start = 31486, .len = 3 }, + .{ .cp = 0xCF4F, .start = 31489, .len = 3 }, + .{ .cp = 0xCF50, .start = 31492, .len = 3 }, + .{ .cp = 0xCF51, .start = 31495, .len = 3 }, + .{ .cp = 0xCF52, .start = 31498, .len = 3 }, + .{ .cp = 0xCF53, .start = 31501, .len = 3 }, + .{ .cp = 0xCF54, .start = 31504, .len = 2 }, + .{ .cp = 0xCF55, .start = 31506, .len = 3 }, + .{ .cp = 0xCF56, .start = 31509, .len = 3 }, + .{ .cp = 0xCF57, .start = 31512, .len = 3 }, + .{ .cp = 0xCF58, .start = 31515, .len = 3 }, + .{ .cp = 0xCF59, .start = 31518, .len = 3 }, + .{ .cp = 0xCF5A, .start = 31521, .len = 3 }, + .{ .cp = 0xCF5B, .start = 31524, .len = 3 }, + .{ .cp = 0xCF5C, .start = 31527, .len = 3 }, + .{ .cp = 0xCF5D, .start = 31530, .len = 3 }, + .{ .cp = 0xCF5E, .start = 31533, .len = 3 }, + .{ .cp = 0xCF5F, .start = 31536, .len = 3 }, + .{ .cp = 0xCF60, .start = 31539, .len = 3 }, + .{ .cp = 0xCF61, .start = 31542, .len = 3 }, + .{ .cp = 0xCF62, .start = 31545, .len = 3 }, + .{ .cp = 0xCF63, .start = 31548, .len = 3 }, + .{ .cp = 0xCF64, .start = 31551, .len = 3 }, + .{ .cp = 0xCF65, .start = 31554, .len = 3 }, + .{ .cp = 0xCF66, .start = 31557, .len = 3 }, + .{ .cp = 0xCF67, .start = 31560, .len = 3 }, + .{ .cp = 0xCF68, .start = 31563, .len = 3 }, + .{ .cp = 0xCF69, .start = 31566, .len = 3 }, + .{ .cp = 0xCF6A, .start = 31569, .len = 3 }, + .{ .cp = 0xCF6B, .start = 31572, .len = 3 }, + .{ .cp = 0xCF6C, .start = 31575, .len = 3 }, + .{ .cp = 0xCF6D, .start = 31578, .len = 3 }, + .{ .cp = 0xCF6E, .start = 31581, .len = 3 }, + .{ .cp = 0xCF6F, .start = 31584, .len = 3 }, + .{ .cp = 0xCF70, .start = 31587, .len = 2 }, + .{ .cp = 0xCF71, .start = 31589, .len = 3 }, + .{ .cp = 0xCF72, .start = 31592, .len = 3 }, + .{ .cp = 0xCF73, .start = 31595, .len = 3 }, + .{ .cp = 0xCF74, .start = 31598, .len = 3 }, + .{ .cp = 0xCF75, .start = 31601, .len = 3 }, + .{ .cp = 0xCF76, .start = 31604, .len = 3 }, + .{ .cp = 0xCF77, .start = 31607, .len = 3 }, + .{ .cp = 0xCF78, .start = 31610, .len = 3 }, + .{ .cp = 0xCF79, .start = 31613, .len = 3 }, + .{ .cp = 0xCF7A, .start = 31616, .len = 3 }, + .{ .cp = 0xCF7B, .start = 31619, .len = 3 }, + .{ .cp = 0xCF7C, .start = 31622, .len = 3 }, + .{ .cp = 0xCF7D, .start = 31625, .len = 3 }, + .{ .cp = 0xCF7E, .start = 31628, .len = 3 }, + .{ .cp = 0xCF7F, .start = 31631, .len = 3 }, + .{ .cp = 0xCF80, .start = 31634, .len = 3 }, + .{ .cp = 0xCF81, .start = 31637, .len = 3 }, + .{ .cp = 0xCF82, .start = 31640, .len = 3 }, + .{ .cp = 0xCF83, .start = 31643, .len = 3 }, + .{ .cp = 0xCF84, .start = 31646, .len = 3 }, + .{ .cp = 0xCF85, .start = 31649, .len = 3 }, + .{ .cp = 0xCF86, .start = 31652, .len = 3 }, + .{ .cp = 0xCF87, .start = 31655, .len = 3 }, + .{ .cp = 0xCF88, .start = 31658, .len = 3 }, + .{ .cp = 0xCF89, .start = 31661, .len = 3 }, + .{ .cp = 0xCF8A, .start = 31664, .len = 3 }, + .{ .cp = 0xCF8B, .start = 31667, .len = 3 }, + .{ .cp = 0xCF8C, .start = 31670, .len = 2 }, + .{ .cp = 0xCF8D, .start = 31672, .len = 3 }, + .{ .cp = 0xCF8E, .start = 31675, .len = 3 }, + .{ .cp = 0xCF8F, .start = 31678, .len = 3 }, + .{ .cp = 0xCF90, .start = 31681, .len = 3 }, + .{ .cp = 0xCF91, .start = 31684, .len = 3 }, + .{ .cp = 0xCF92, .start = 31687, .len = 3 }, + .{ .cp = 0xCF93, .start = 31690, .len = 3 }, + .{ .cp = 0xCF94, .start = 31693, .len = 3 }, + .{ .cp = 0xCF95, .start = 31696, .len = 3 }, + .{ .cp = 0xCF96, .start = 31699, .len = 3 }, + .{ .cp = 0xCF97, .start = 31702, .len = 3 }, + .{ .cp = 0xCF98, .start = 31705, .len = 3 }, + .{ .cp = 0xCF99, .start = 31708, .len = 3 }, + .{ .cp = 0xCF9A, .start = 31711, .len = 3 }, + .{ .cp = 0xCF9B, .start = 31714, .len = 3 }, + .{ .cp = 0xCF9C, .start = 31717, .len = 3 }, + .{ .cp = 0xCF9D, .start = 31720, .len = 3 }, + .{ .cp = 0xCF9E, .start = 31723, .len = 3 }, + .{ .cp = 0xCF9F, .start = 31726, .len = 3 }, + .{ .cp = 0xCFA0, .start = 31729, .len = 3 }, + .{ .cp = 0xCFA1, .start = 31732, .len = 3 }, + .{ .cp = 0xCFA2, .start = 31735, .len = 3 }, + .{ .cp = 0xCFA3, .start = 31738, .len = 3 }, + .{ .cp = 0xCFA4, .start = 31741, .len = 3 }, + .{ .cp = 0xCFA5, .start = 31744, .len = 3 }, + .{ .cp = 0xCFA6, .start = 31747, .len = 3 }, + .{ .cp = 0xCFA7, .start = 31750, .len = 3 }, + .{ .cp = 0xCFA8, .start = 31753, .len = 2 }, + .{ .cp = 0xCFA9, .start = 31755, .len = 3 }, + .{ .cp = 0xCFAA, .start = 31758, .len = 3 }, + .{ .cp = 0xCFAB, .start = 31761, .len = 3 }, + .{ .cp = 0xCFAC, .start = 31764, .len = 3 }, + .{ .cp = 0xCFAD, .start = 31767, .len = 3 }, + .{ .cp = 0xCFAE, .start = 31770, .len = 3 }, + .{ .cp = 0xCFAF, .start = 31773, .len = 3 }, + .{ .cp = 0xCFB0, .start = 31776, .len = 3 }, + .{ .cp = 0xCFB1, .start = 31779, .len = 3 }, + .{ .cp = 0xCFB2, .start = 31782, .len = 3 }, + .{ .cp = 0xCFB3, .start = 31785, .len = 3 }, + .{ .cp = 0xCFB4, .start = 31788, .len = 3 }, + .{ .cp = 0xCFB5, .start = 31791, .len = 3 }, + .{ .cp = 0xCFB6, .start = 31794, .len = 3 }, + .{ .cp = 0xCFB7, .start = 31797, .len = 3 }, + .{ .cp = 0xCFB8, .start = 31800, .len = 3 }, + .{ .cp = 0xCFB9, .start = 31803, .len = 3 }, + .{ .cp = 0xCFBA, .start = 31806, .len = 3 }, + .{ .cp = 0xCFBB, .start = 31809, .len = 3 }, + .{ .cp = 0xCFBC, .start = 31812, .len = 3 }, + .{ .cp = 0xCFBD, .start = 31815, .len = 3 }, + .{ .cp = 0xCFBE, .start = 31818, .len = 3 }, + .{ .cp = 0xCFBF, .start = 31821, .len = 3 }, + .{ .cp = 0xCFC0, .start = 31824, .len = 3 }, + .{ .cp = 0xCFC1, .start = 31827, .len = 3 }, + .{ .cp = 0xCFC2, .start = 31830, .len = 3 }, + .{ .cp = 0xCFC3, .start = 31833, .len = 3 }, + .{ .cp = 0xCFC4, .start = 31836, .len = 2 }, + .{ .cp = 0xCFC5, .start = 31838, .len = 3 }, + .{ .cp = 0xCFC6, .start = 31841, .len = 3 }, + .{ .cp = 0xCFC7, .start = 31844, .len = 3 }, + .{ .cp = 0xCFC8, .start = 31847, .len = 3 }, + .{ .cp = 0xCFC9, .start = 31850, .len = 3 }, + .{ .cp = 0xCFCA, .start = 31853, .len = 3 }, + .{ .cp = 0xCFCB, .start = 31856, .len = 3 }, + .{ .cp = 0xCFCC, .start = 31859, .len = 3 }, + .{ .cp = 0xCFCD, .start = 31862, .len = 3 }, + .{ .cp = 0xCFCE, .start = 31865, .len = 3 }, + .{ .cp = 0xCFCF, .start = 31868, .len = 3 }, + .{ .cp = 0xCFD0, .start = 31871, .len = 3 }, + .{ .cp = 0xCFD1, .start = 31874, .len = 3 }, + .{ .cp = 0xCFD2, .start = 31877, .len = 3 }, + .{ .cp = 0xCFD3, .start = 31880, .len = 3 }, + .{ .cp = 0xCFD4, .start = 31883, .len = 3 }, + .{ .cp = 0xCFD5, .start = 31886, .len = 3 }, + .{ .cp = 0xCFD6, .start = 31889, .len = 3 }, + .{ .cp = 0xCFD7, .start = 31892, .len = 3 }, + .{ .cp = 0xCFD8, .start = 31895, .len = 3 }, + .{ .cp = 0xCFD9, .start = 31898, .len = 3 }, + .{ .cp = 0xCFDA, .start = 31901, .len = 3 }, + .{ .cp = 0xCFDB, .start = 31904, .len = 3 }, + .{ .cp = 0xCFDC, .start = 31907, .len = 3 }, + .{ .cp = 0xCFDD, .start = 31910, .len = 3 }, + .{ .cp = 0xCFDE, .start = 31913, .len = 3 }, + .{ .cp = 0xCFDF, .start = 31916, .len = 3 }, + .{ .cp = 0xCFE0, .start = 31919, .len = 2 }, + .{ .cp = 0xCFE1, .start = 31921, .len = 3 }, + .{ .cp = 0xCFE2, .start = 31924, .len = 3 }, + .{ .cp = 0xCFE3, .start = 31927, .len = 3 }, + .{ .cp = 0xCFE4, .start = 31930, .len = 3 }, + .{ .cp = 0xCFE5, .start = 31933, .len = 3 }, + .{ .cp = 0xCFE6, .start = 31936, .len = 3 }, + .{ .cp = 0xCFE7, .start = 31939, .len = 3 }, + .{ .cp = 0xCFE8, .start = 31942, .len = 3 }, + .{ .cp = 0xCFE9, .start = 31945, .len = 3 }, + .{ .cp = 0xCFEA, .start = 31948, .len = 3 }, + .{ .cp = 0xCFEB, .start = 31951, .len = 3 }, + .{ .cp = 0xCFEC, .start = 31954, .len = 3 }, + .{ .cp = 0xCFED, .start = 31957, .len = 3 }, + .{ .cp = 0xCFEE, .start = 31960, .len = 3 }, + .{ .cp = 0xCFEF, .start = 31963, .len = 3 }, + .{ .cp = 0xCFF0, .start = 31966, .len = 3 }, + .{ .cp = 0xCFF1, .start = 31969, .len = 3 }, + .{ .cp = 0xCFF2, .start = 31972, .len = 3 }, + .{ .cp = 0xCFF3, .start = 31975, .len = 3 }, + .{ .cp = 0xCFF4, .start = 31978, .len = 3 }, + .{ .cp = 0xCFF5, .start = 31981, .len = 3 }, + .{ .cp = 0xCFF6, .start = 31984, .len = 3 }, + .{ .cp = 0xCFF7, .start = 31987, .len = 3 }, + .{ .cp = 0xCFF8, .start = 31990, .len = 3 }, + .{ .cp = 0xCFF9, .start = 31993, .len = 3 }, + .{ .cp = 0xCFFA, .start = 31996, .len = 3 }, + .{ .cp = 0xCFFB, .start = 31999, .len = 3 }, + .{ .cp = 0xCFFC, .start = 32002, .len = 2 }, + .{ .cp = 0xCFFD, .start = 32004, .len = 3 }, + .{ .cp = 0xCFFE, .start = 32007, .len = 3 }, + .{ .cp = 0xCFFF, .start = 32010, .len = 3 }, + .{ .cp = 0xD000, .start = 32013, .len = 3 }, + .{ .cp = 0xD001, .start = 32016, .len = 3 }, + .{ .cp = 0xD002, .start = 32019, .len = 3 }, + .{ .cp = 0xD003, .start = 32022, .len = 3 }, + .{ .cp = 0xD004, .start = 32025, .len = 3 }, + .{ .cp = 0xD005, .start = 32028, .len = 3 }, + .{ .cp = 0xD006, .start = 32031, .len = 3 }, + .{ .cp = 0xD007, .start = 32034, .len = 3 }, + .{ .cp = 0xD008, .start = 32037, .len = 3 }, + .{ .cp = 0xD009, .start = 32040, .len = 3 }, + .{ .cp = 0xD00A, .start = 32043, .len = 3 }, + .{ .cp = 0xD00B, .start = 32046, .len = 3 }, + .{ .cp = 0xD00C, .start = 32049, .len = 3 }, + .{ .cp = 0xD00D, .start = 32052, .len = 3 }, + .{ .cp = 0xD00E, .start = 32055, .len = 3 }, + .{ .cp = 0xD00F, .start = 32058, .len = 3 }, + .{ .cp = 0xD010, .start = 32061, .len = 3 }, + .{ .cp = 0xD011, .start = 32064, .len = 3 }, + .{ .cp = 0xD012, .start = 32067, .len = 3 }, + .{ .cp = 0xD013, .start = 32070, .len = 3 }, + .{ .cp = 0xD014, .start = 32073, .len = 3 }, + .{ .cp = 0xD015, .start = 32076, .len = 3 }, + .{ .cp = 0xD016, .start = 32079, .len = 3 }, + .{ .cp = 0xD017, .start = 32082, .len = 3 }, + .{ .cp = 0xD018, .start = 32085, .len = 2 }, + .{ .cp = 0xD019, .start = 32087, .len = 3 }, + .{ .cp = 0xD01A, .start = 32090, .len = 3 }, + .{ .cp = 0xD01B, .start = 32093, .len = 3 }, + .{ .cp = 0xD01C, .start = 32096, .len = 3 }, + .{ .cp = 0xD01D, .start = 32099, .len = 3 }, + .{ .cp = 0xD01E, .start = 32102, .len = 3 }, + .{ .cp = 0xD01F, .start = 32105, .len = 3 }, + .{ .cp = 0xD020, .start = 32108, .len = 3 }, + .{ .cp = 0xD021, .start = 32111, .len = 3 }, + .{ .cp = 0xD022, .start = 32114, .len = 3 }, + .{ .cp = 0xD023, .start = 32117, .len = 3 }, + .{ .cp = 0xD024, .start = 32120, .len = 3 }, + .{ .cp = 0xD025, .start = 32123, .len = 3 }, + .{ .cp = 0xD026, .start = 32126, .len = 3 }, + .{ .cp = 0xD027, .start = 32129, .len = 3 }, + .{ .cp = 0xD028, .start = 32132, .len = 3 }, + .{ .cp = 0xD029, .start = 32135, .len = 3 }, + .{ .cp = 0xD02A, .start = 32138, .len = 3 }, + .{ .cp = 0xD02B, .start = 32141, .len = 3 }, + .{ .cp = 0xD02C, .start = 32144, .len = 3 }, + .{ .cp = 0xD02D, .start = 32147, .len = 3 }, + .{ .cp = 0xD02E, .start = 32150, .len = 3 }, + .{ .cp = 0xD02F, .start = 32153, .len = 3 }, + .{ .cp = 0xD030, .start = 32156, .len = 3 }, + .{ .cp = 0xD031, .start = 32159, .len = 3 }, + .{ .cp = 0xD032, .start = 32162, .len = 3 }, + .{ .cp = 0xD033, .start = 32165, .len = 3 }, + .{ .cp = 0xD034, .start = 32168, .len = 2 }, + .{ .cp = 0xD035, .start = 32170, .len = 3 }, + .{ .cp = 0xD036, .start = 32173, .len = 3 }, + .{ .cp = 0xD037, .start = 32176, .len = 3 }, + .{ .cp = 0xD038, .start = 32179, .len = 3 }, + .{ .cp = 0xD039, .start = 32182, .len = 3 }, + .{ .cp = 0xD03A, .start = 32185, .len = 3 }, + .{ .cp = 0xD03B, .start = 32188, .len = 3 }, + .{ .cp = 0xD03C, .start = 32191, .len = 3 }, + .{ .cp = 0xD03D, .start = 32194, .len = 3 }, + .{ .cp = 0xD03E, .start = 32197, .len = 3 }, + .{ .cp = 0xD03F, .start = 32200, .len = 3 }, + .{ .cp = 0xD040, .start = 32203, .len = 3 }, + .{ .cp = 0xD041, .start = 32206, .len = 3 }, + .{ .cp = 0xD042, .start = 32209, .len = 3 }, + .{ .cp = 0xD043, .start = 32212, .len = 3 }, + .{ .cp = 0xD044, .start = 32215, .len = 3 }, + .{ .cp = 0xD045, .start = 32218, .len = 3 }, + .{ .cp = 0xD046, .start = 32221, .len = 3 }, + .{ .cp = 0xD047, .start = 32224, .len = 3 }, + .{ .cp = 0xD048, .start = 32227, .len = 3 }, + .{ .cp = 0xD049, .start = 32230, .len = 3 }, + .{ .cp = 0xD04A, .start = 32233, .len = 3 }, + .{ .cp = 0xD04B, .start = 32236, .len = 3 }, + .{ .cp = 0xD04C, .start = 32239, .len = 3 }, + .{ .cp = 0xD04D, .start = 32242, .len = 3 }, + .{ .cp = 0xD04E, .start = 32245, .len = 3 }, + .{ .cp = 0xD04F, .start = 32248, .len = 3 }, + .{ .cp = 0xD050, .start = 32251, .len = 2 }, + .{ .cp = 0xD051, .start = 32253, .len = 3 }, + .{ .cp = 0xD052, .start = 32256, .len = 3 }, + .{ .cp = 0xD053, .start = 32259, .len = 3 }, + .{ .cp = 0xD054, .start = 32262, .len = 3 }, + .{ .cp = 0xD055, .start = 32265, .len = 3 }, + .{ .cp = 0xD056, .start = 32268, .len = 3 }, + .{ .cp = 0xD057, .start = 32271, .len = 3 }, + .{ .cp = 0xD058, .start = 32274, .len = 3 }, + .{ .cp = 0xD059, .start = 32277, .len = 3 }, + .{ .cp = 0xD05A, .start = 32280, .len = 3 }, + .{ .cp = 0xD05B, .start = 32283, .len = 3 }, + .{ .cp = 0xD05C, .start = 32286, .len = 3 }, + .{ .cp = 0xD05D, .start = 32289, .len = 3 }, + .{ .cp = 0xD05E, .start = 32292, .len = 3 }, + .{ .cp = 0xD05F, .start = 32295, .len = 3 }, + .{ .cp = 0xD060, .start = 32298, .len = 3 }, + .{ .cp = 0xD061, .start = 32301, .len = 3 }, + .{ .cp = 0xD062, .start = 32304, .len = 3 }, + .{ .cp = 0xD063, .start = 32307, .len = 3 }, + .{ .cp = 0xD064, .start = 32310, .len = 3 }, + .{ .cp = 0xD065, .start = 32313, .len = 3 }, + .{ .cp = 0xD066, .start = 32316, .len = 3 }, + .{ .cp = 0xD067, .start = 32319, .len = 3 }, + .{ .cp = 0xD068, .start = 32322, .len = 3 }, + .{ .cp = 0xD069, .start = 32325, .len = 3 }, + .{ .cp = 0xD06A, .start = 32328, .len = 3 }, + .{ .cp = 0xD06B, .start = 32331, .len = 3 }, + .{ .cp = 0xD06C, .start = 32334, .len = 2 }, + .{ .cp = 0xD06D, .start = 32336, .len = 3 }, + .{ .cp = 0xD06E, .start = 32339, .len = 3 }, + .{ .cp = 0xD06F, .start = 32342, .len = 3 }, + .{ .cp = 0xD070, .start = 32345, .len = 3 }, + .{ .cp = 0xD071, .start = 32348, .len = 3 }, + .{ .cp = 0xD072, .start = 32351, .len = 3 }, + .{ .cp = 0xD073, .start = 32354, .len = 3 }, + .{ .cp = 0xD074, .start = 32357, .len = 3 }, + .{ .cp = 0xD075, .start = 32360, .len = 3 }, + .{ .cp = 0xD076, .start = 32363, .len = 3 }, + .{ .cp = 0xD077, .start = 32366, .len = 3 }, + .{ .cp = 0xD078, .start = 32369, .len = 3 }, + .{ .cp = 0xD079, .start = 32372, .len = 3 }, + .{ .cp = 0xD07A, .start = 32375, .len = 3 }, + .{ .cp = 0xD07B, .start = 32378, .len = 3 }, + .{ .cp = 0xD07C, .start = 32381, .len = 3 }, + .{ .cp = 0xD07D, .start = 32384, .len = 3 }, + .{ .cp = 0xD07E, .start = 32387, .len = 3 }, + .{ .cp = 0xD07F, .start = 32390, .len = 3 }, + .{ .cp = 0xD080, .start = 32393, .len = 3 }, + .{ .cp = 0xD081, .start = 32396, .len = 3 }, + .{ .cp = 0xD082, .start = 32399, .len = 3 }, + .{ .cp = 0xD083, .start = 32402, .len = 3 }, + .{ .cp = 0xD084, .start = 32405, .len = 3 }, + .{ .cp = 0xD085, .start = 32408, .len = 3 }, + .{ .cp = 0xD086, .start = 32411, .len = 3 }, + .{ .cp = 0xD087, .start = 32414, .len = 3 }, + .{ .cp = 0xD088, .start = 32417, .len = 2 }, + .{ .cp = 0xD089, .start = 32419, .len = 3 }, + .{ .cp = 0xD08A, .start = 32422, .len = 3 }, + .{ .cp = 0xD08B, .start = 32425, .len = 3 }, + .{ .cp = 0xD08C, .start = 32428, .len = 3 }, + .{ .cp = 0xD08D, .start = 32431, .len = 3 }, + .{ .cp = 0xD08E, .start = 32434, .len = 3 }, + .{ .cp = 0xD08F, .start = 32437, .len = 3 }, + .{ .cp = 0xD090, .start = 32440, .len = 3 }, + .{ .cp = 0xD091, .start = 32443, .len = 3 }, + .{ .cp = 0xD092, .start = 32446, .len = 3 }, + .{ .cp = 0xD093, .start = 32449, .len = 3 }, + .{ .cp = 0xD094, .start = 32452, .len = 3 }, + .{ .cp = 0xD095, .start = 32455, .len = 3 }, + .{ .cp = 0xD096, .start = 32458, .len = 3 }, + .{ .cp = 0xD097, .start = 32461, .len = 3 }, + .{ .cp = 0xD098, .start = 32464, .len = 3 }, + .{ .cp = 0xD099, .start = 32467, .len = 3 }, + .{ .cp = 0xD09A, .start = 32470, .len = 3 }, + .{ .cp = 0xD09B, .start = 32473, .len = 3 }, + .{ .cp = 0xD09C, .start = 32476, .len = 3 }, + .{ .cp = 0xD09D, .start = 32479, .len = 3 }, + .{ .cp = 0xD09E, .start = 32482, .len = 3 }, + .{ .cp = 0xD09F, .start = 32485, .len = 3 }, + .{ .cp = 0xD0A0, .start = 32488, .len = 3 }, + .{ .cp = 0xD0A1, .start = 32491, .len = 3 }, + .{ .cp = 0xD0A2, .start = 32494, .len = 3 }, + .{ .cp = 0xD0A3, .start = 32497, .len = 3 }, + .{ .cp = 0xD0A4, .start = 32500, .len = 2 }, + .{ .cp = 0xD0A5, .start = 32502, .len = 3 }, + .{ .cp = 0xD0A6, .start = 32505, .len = 3 }, + .{ .cp = 0xD0A7, .start = 32508, .len = 3 }, + .{ .cp = 0xD0A8, .start = 32511, .len = 3 }, + .{ .cp = 0xD0A9, .start = 32514, .len = 3 }, + .{ .cp = 0xD0AA, .start = 32517, .len = 3 }, + .{ .cp = 0xD0AB, .start = 32520, .len = 3 }, + .{ .cp = 0xD0AC, .start = 32523, .len = 3 }, + .{ .cp = 0xD0AD, .start = 32526, .len = 3 }, + .{ .cp = 0xD0AE, .start = 32529, .len = 3 }, + .{ .cp = 0xD0AF, .start = 32532, .len = 3 }, + .{ .cp = 0xD0B0, .start = 32535, .len = 3 }, + .{ .cp = 0xD0B1, .start = 32538, .len = 3 }, + .{ .cp = 0xD0B2, .start = 32541, .len = 3 }, + .{ .cp = 0xD0B3, .start = 32544, .len = 3 }, + .{ .cp = 0xD0B4, .start = 32547, .len = 3 }, + .{ .cp = 0xD0B5, .start = 32550, .len = 3 }, + .{ .cp = 0xD0B6, .start = 32553, .len = 3 }, + .{ .cp = 0xD0B7, .start = 32556, .len = 3 }, + .{ .cp = 0xD0B8, .start = 32559, .len = 3 }, + .{ .cp = 0xD0B9, .start = 32562, .len = 3 }, + .{ .cp = 0xD0BA, .start = 32565, .len = 3 }, + .{ .cp = 0xD0BB, .start = 32568, .len = 3 }, + .{ .cp = 0xD0BC, .start = 32571, .len = 3 }, + .{ .cp = 0xD0BD, .start = 32574, .len = 3 }, + .{ .cp = 0xD0BE, .start = 32577, .len = 3 }, + .{ .cp = 0xD0BF, .start = 32580, .len = 3 }, + .{ .cp = 0xD0C0, .start = 32583, .len = 2 }, + .{ .cp = 0xD0C1, .start = 32585, .len = 3 }, + .{ .cp = 0xD0C2, .start = 32588, .len = 3 }, + .{ .cp = 0xD0C3, .start = 32591, .len = 3 }, + .{ .cp = 0xD0C4, .start = 32594, .len = 3 }, + .{ .cp = 0xD0C5, .start = 32597, .len = 3 }, + .{ .cp = 0xD0C6, .start = 32600, .len = 3 }, + .{ .cp = 0xD0C7, .start = 32603, .len = 3 }, + .{ .cp = 0xD0C8, .start = 32606, .len = 3 }, + .{ .cp = 0xD0C9, .start = 32609, .len = 3 }, + .{ .cp = 0xD0CA, .start = 32612, .len = 3 }, + .{ .cp = 0xD0CB, .start = 32615, .len = 3 }, + .{ .cp = 0xD0CC, .start = 32618, .len = 3 }, + .{ .cp = 0xD0CD, .start = 32621, .len = 3 }, + .{ .cp = 0xD0CE, .start = 32624, .len = 3 }, + .{ .cp = 0xD0CF, .start = 32627, .len = 3 }, + .{ .cp = 0xD0D0, .start = 32630, .len = 3 }, + .{ .cp = 0xD0D1, .start = 32633, .len = 3 }, + .{ .cp = 0xD0D2, .start = 32636, .len = 3 }, + .{ .cp = 0xD0D3, .start = 32639, .len = 3 }, + .{ .cp = 0xD0D4, .start = 32642, .len = 3 }, + .{ .cp = 0xD0D5, .start = 32645, .len = 3 }, + .{ .cp = 0xD0D6, .start = 32648, .len = 3 }, + .{ .cp = 0xD0D7, .start = 32651, .len = 3 }, + .{ .cp = 0xD0D8, .start = 32654, .len = 3 }, + .{ .cp = 0xD0D9, .start = 32657, .len = 3 }, + .{ .cp = 0xD0DA, .start = 32660, .len = 3 }, + .{ .cp = 0xD0DB, .start = 32663, .len = 3 }, + .{ .cp = 0xD0DC, .start = 32666, .len = 2 }, + .{ .cp = 0xD0DD, .start = 32668, .len = 3 }, + .{ .cp = 0xD0DE, .start = 32671, .len = 3 }, + .{ .cp = 0xD0DF, .start = 32674, .len = 3 }, + .{ .cp = 0xD0E0, .start = 32677, .len = 3 }, + .{ .cp = 0xD0E1, .start = 32680, .len = 3 }, + .{ .cp = 0xD0E2, .start = 32683, .len = 3 }, + .{ .cp = 0xD0E3, .start = 32686, .len = 3 }, + .{ .cp = 0xD0E4, .start = 32689, .len = 3 }, + .{ .cp = 0xD0E5, .start = 32692, .len = 3 }, + .{ .cp = 0xD0E6, .start = 32695, .len = 3 }, + .{ .cp = 0xD0E7, .start = 32698, .len = 3 }, + .{ .cp = 0xD0E8, .start = 32701, .len = 3 }, + .{ .cp = 0xD0E9, .start = 32704, .len = 3 }, + .{ .cp = 0xD0EA, .start = 32707, .len = 3 }, + .{ .cp = 0xD0EB, .start = 32710, .len = 3 }, + .{ .cp = 0xD0EC, .start = 32713, .len = 3 }, + .{ .cp = 0xD0ED, .start = 32716, .len = 3 }, + .{ .cp = 0xD0EE, .start = 32719, .len = 3 }, + .{ .cp = 0xD0EF, .start = 32722, .len = 3 }, + .{ .cp = 0xD0F0, .start = 32725, .len = 3 }, + .{ .cp = 0xD0F1, .start = 32728, .len = 3 }, + .{ .cp = 0xD0F2, .start = 32731, .len = 3 }, + .{ .cp = 0xD0F3, .start = 32734, .len = 3 }, + .{ .cp = 0xD0F4, .start = 32737, .len = 3 }, + .{ .cp = 0xD0F5, .start = 32740, .len = 3 }, + .{ .cp = 0xD0F6, .start = 32743, .len = 3 }, + .{ .cp = 0xD0F7, .start = 32746, .len = 3 }, + .{ .cp = 0xD0F8, .start = 32749, .len = 2 }, + .{ .cp = 0xD0F9, .start = 32751, .len = 3 }, + .{ .cp = 0xD0FA, .start = 32754, .len = 3 }, + .{ .cp = 0xD0FB, .start = 32757, .len = 3 }, + .{ .cp = 0xD0FC, .start = 32760, .len = 3 }, + .{ .cp = 0xD0FD, .start = 32763, .len = 3 }, + .{ .cp = 0xD0FE, .start = 32766, .len = 3 }, + .{ .cp = 0xD0FF, .start = 32769, .len = 3 }, + .{ .cp = 0xD100, .start = 32772, .len = 3 }, + .{ .cp = 0xD101, .start = 32775, .len = 3 }, + .{ .cp = 0xD102, .start = 32778, .len = 3 }, + .{ .cp = 0xD103, .start = 32781, .len = 3 }, + .{ .cp = 0xD104, .start = 32784, .len = 3 }, + .{ .cp = 0xD105, .start = 32787, .len = 3 }, + .{ .cp = 0xD106, .start = 32790, .len = 3 }, + .{ .cp = 0xD107, .start = 32793, .len = 3 }, + .{ .cp = 0xD108, .start = 32796, .len = 3 }, + .{ .cp = 0xD109, .start = 32799, .len = 3 }, + .{ .cp = 0xD10A, .start = 32802, .len = 3 }, + .{ .cp = 0xD10B, .start = 32805, .len = 3 }, + .{ .cp = 0xD10C, .start = 32808, .len = 3 }, + .{ .cp = 0xD10D, .start = 32811, .len = 3 }, + .{ .cp = 0xD10E, .start = 32814, .len = 3 }, + .{ .cp = 0xD10F, .start = 32817, .len = 3 }, + .{ .cp = 0xD110, .start = 32820, .len = 3 }, + .{ .cp = 0xD111, .start = 32823, .len = 3 }, + .{ .cp = 0xD112, .start = 32826, .len = 3 }, + .{ .cp = 0xD113, .start = 32829, .len = 3 }, + .{ .cp = 0xD114, .start = 32832, .len = 2 }, + .{ .cp = 0xD115, .start = 32834, .len = 3 }, + .{ .cp = 0xD116, .start = 32837, .len = 3 }, + .{ .cp = 0xD117, .start = 32840, .len = 3 }, + .{ .cp = 0xD118, .start = 32843, .len = 3 }, + .{ .cp = 0xD119, .start = 32846, .len = 3 }, + .{ .cp = 0xD11A, .start = 32849, .len = 3 }, + .{ .cp = 0xD11B, .start = 32852, .len = 3 }, + .{ .cp = 0xD11C, .start = 32855, .len = 3 }, + .{ .cp = 0xD11D, .start = 32858, .len = 3 }, + .{ .cp = 0xD11E, .start = 32861, .len = 3 }, + .{ .cp = 0xD11F, .start = 32864, .len = 3 }, + .{ .cp = 0xD120, .start = 32867, .len = 3 }, + .{ .cp = 0xD121, .start = 32870, .len = 3 }, + .{ .cp = 0xD122, .start = 32873, .len = 3 }, + .{ .cp = 0xD123, .start = 32876, .len = 3 }, + .{ .cp = 0xD124, .start = 32879, .len = 3 }, + .{ .cp = 0xD125, .start = 32882, .len = 3 }, + .{ .cp = 0xD126, .start = 32885, .len = 3 }, + .{ .cp = 0xD127, .start = 32888, .len = 3 }, + .{ .cp = 0xD128, .start = 32891, .len = 3 }, + .{ .cp = 0xD129, .start = 32894, .len = 3 }, + .{ .cp = 0xD12A, .start = 32897, .len = 3 }, + .{ .cp = 0xD12B, .start = 32900, .len = 3 }, + .{ .cp = 0xD12C, .start = 32903, .len = 3 }, + .{ .cp = 0xD12D, .start = 32906, .len = 3 }, + .{ .cp = 0xD12E, .start = 32909, .len = 3 }, + .{ .cp = 0xD12F, .start = 32912, .len = 3 }, + .{ .cp = 0xD130, .start = 32915, .len = 2 }, + .{ .cp = 0xD131, .start = 32917, .len = 3 }, + .{ .cp = 0xD132, .start = 32920, .len = 3 }, + .{ .cp = 0xD133, .start = 32923, .len = 3 }, + .{ .cp = 0xD134, .start = 32926, .len = 3 }, + .{ .cp = 0xD135, .start = 32929, .len = 3 }, + .{ .cp = 0xD136, .start = 32932, .len = 3 }, + .{ .cp = 0xD137, .start = 32935, .len = 3 }, + .{ .cp = 0xD138, .start = 32938, .len = 3 }, + .{ .cp = 0xD139, .start = 32941, .len = 3 }, + .{ .cp = 0xD13A, .start = 32944, .len = 3 }, + .{ .cp = 0xD13B, .start = 32947, .len = 3 }, + .{ .cp = 0xD13C, .start = 32950, .len = 3 }, + .{ .cp = 0xD13D, .start = 32953, .len = 3 }, + .{ .cp = 0xD13E, .start = 32956, .len = 3 }, + .{ .cp = 0xD13F, .start = 32959, .len = 3 }, + .{ .cp = 0xD140, .start = 32962, .len = 3 }, + .{ .cp = 0xD141, .start = 32965, .len = 3 }, + .{ .cp = 0xD142, .start = 32968, .len = 3 }, + .{ .cp = 0xD143, .start = 32971, .len = 3 }, + .{ .cp = 0xD144, .start = 32974, .len = 3 }, + .{ .cp = 0xD145, .start = 32977, .len = 3 }, + .{ .cp = 0xD146, .start = 32980, .len = 3 }, + .{ .cp = 0xD147, .start = 32983, .len = 3 }, + .{ .cp = 0xD148, .start = 32986, .len = 3 }, + .{ .cp = 0xD149, .start = 32989, .len = 3 }, + .{ .cp = 0xD14A, .start = 32992, .len = 3 }, + .{ .cp = 0xD14B, .start = 32995, .len = 3 }, + .{ .cp = 0xD14C, .start = 32998, .len = 2 }, + .{ .cp = 0xD14D, .start = 33000, .len = 3 }, + .{ .cp = 0xD14E, .start = 33003, .len = 3 }, + .{ .cp = 0xD14F, .start = 33006, .len = 3 }, + .{ .cp = 0xD150, .start = 33009, .len = 3 }, + .{ .cp = 0xD151, .start = 33012, .len = 3 }, + .{ .cp = 0xD152, .start = 33015, .len = 3 }, + .{ .cp = 0xD153, .start = 33018, .len = 3 }, + .{ .cp = 0xD154, .start = 33021, .len = 3 }, + .{ .cp = 0xD155, .start = 33024, .len = 3 }, + .{ .cp = 0xD156, .start = 33027, .len = 3 }, + .{ .cp = 0xD157, .start = 33030, .len = 3 }, + .{ .cp = 0xD158, .start = 33033, .len = 3 }, + .{ .cp = 0xD159, .start = 33036, .len = 3 }, + .{ .cp = 0xD15A, .start = 33039, .len = 3 }, + .{ .cp = 0xD15B, .start = 33042, .len = 3 }, + .{ .cp = 0xD15C, .start = 33045, .len = 3 }, + .{ .cp = 0xD15D, .start = 33048, .len = 3 }, + .{ .cp = 0xD15E, .start = 33051, .len = 3 }, + .{ .cp = 0xD15F, .start = 33054, .len = 3 }, + .{ .cp = 0xD160, .start = 33057, .len = 3 }, + .{ .cp = 0xD161, .start = 33060, .len = 3 }, + .{ .cp = 0xD162, .start = 33063, .len = 3 }, + .{ .cp = 0xD163, .start = 33066, .len = 3 }, + .{ .cp = 0xD164, .start = 33069, .len = 3 }, + .{ .cp = 0xD165, .start = 33072, .len = 3 }, + .{ .cp = 0xD166, .start = 33075, .len = 3 }, + .{ .cp = 0xD167, .start = 33078, .len = 3 }, + .{ .cp = 0xD168, .start = 33081, .len = 2 }, + .{ .cp = 0xD169, .start = 33083, .len = 3 }, + .{ .cp = 0xD16A, .start = 33086, .len = 3 }, + .{ .cp = 0xD16B, .start = 33089, .len = 3 }, + .{ .cp = 0xD16C, .start = 33092, .len = 3 }, + .{ .cp = 0xD16D, .start = 33095, .len = 3 }, + .{ .cp = 0xD16E, .start = 33098, .len = 3 }, + .{ .cp = 0xD16F, .start = 33101, .len = 3 }, + .{ .cp = 0xD170, .start = 33104, .len = 3 }, + .{ .cp = 0xD171, .start = 33107, .len = 3 }, + .{ .cp = 0xD172, .start = 33110, .len = 3 }, + .{ .cp = 0xD173, .start = 33113, .len = 3 }, + .{ .cp = 0xD174, .start = 33116, .len = 3 }, + .{ .cp = 0xD175, .start = 33119, .len = 3 }, + .{ .cp = 0xD176, .start = 33122, .len = 3 }, + .{ .cp = 0xD177, .start = 33125, .len = 3 }, + .{ .cp = 0xD178, .start = 33128, .len = 3 }, + .{ .cp = 0xD179, .start = 33131, .len = 3 }, + .{ .cp = 0xD17A, .start = 33134, .len = 3 }, + .{ .cp = 0xD17B, .start = 33137, .len = 3 }, + .{ .cp = 0xD17C, .start = 33140, .len = 3 }, + .{ .cp = 0xD17D, .start = 33143, .len = 3 }, + .{ .cp = 0xD17E, .start = 33146, .len = 3 }, + .{ .cp = 0xD17F, .start = 33149, .len = 3 }, + .{ .cp = 0xD180, .start = 33152, .len = 3 }, + .{ .cp = 0xD181, .start = 33155, .len = 3 }, + .{ .cp = 0xD182, .start = 33158, .len = 3 }, + .{ .cp = 0xD183, .start = 33161, .len = 3 }, + .{ .cp = 0xD184, .start = 33164, .len = 2 }, + .{ .cp = 0xD185, .start = 33166, .len = 3 }, + .{ .cp = 0xD186, .start = 33169, .len = 3 }, + .{ .cp = 0xD187, .start = 33172, .len = 3 }, + .{ .cp = 0xD188, .start = 33175, .len = 3 }, + .{ .cp = 0xD189, .start = 33178, .len = 3 }, + .{ .cp = 0xD18A, .start = 33181, .len = 3 }, + .{ .cp = 0xD18B, .start = 33184, .len = 3 }, + .{ .cp = 0xD18C, .start = 33187, .len = 3 }, + .{ .cp = 0xD18D, .start = 33190, .len = 3 }, + .{ .cp = 0xD18E, .start = 33193, .len = 3 }, + .{ .cp = 0xD18F, .start = 33196, .len = 3 }, + .{ .cp = 0xD190, .start = 33199, .len = 3 }, + .{ .cp = 0xD191, .start = 33202, .len = 3 }, + .{ .cp = 0xD192, .start = 33205, .len = 3 }, + .{ .cp = 0xD193, .start = 33208, .len = 3 }, + .{ .cp = 0xD194, .start = 33211, .len = 3 }, + .{ .cp = 0xD195, .start = 33214, .len = 3 }, + .{ .cp = 0xD196, .start = 33217, .len = 3 }, + .{ .cp = 0xD197, .start = 33220, .len = 3 }, + .{ .cp = 0xD198, .start = 33223, .len = 3 }, + .{ .cp = 0xD199, .start = 33226, .len = 3 }, + .{ .cp = 0xD19A, .start = 33229, .len = 3 }, + .{ .cp = 0xD19B, .start = 33232, .len = 3 }, + .{ .cp = 0xD19C, .start = 33235, .len = 3 }, + .{ .cp = 0xD19D, .start = 33238, .len = 3 }, + .{ .cp = 0xD19E, .start = 33241, .len = 3 }, + .{ .cp = 0xD19F, .start = 33244, .len = 3 }, + .{ .cp = 0xD1A0, .start = 33247, .len = 2 }, + .{ .cp = 0xD1A1, .start = 33249, .len = 3 }, + .{ .cp = 0xD1A2, .start = 33252, .len = 3 }, + .{ .cp = 0xD1A3, .start = 33255, .len = 3 }, + .{ .cp = 0xD1A4, .start = 33258, .len = 3 }, + .{ .cp = 0xD1A5, .start = 33261, .len = 3 }, + .{ .cp = 0xD1A6, .start = 33264, .len = 3 }, + .{ .cp = 0xD1A7, .start = 33267, .len = 3 }, + .{ .cp = 0xD1A8, .start = 33270, .len = 3 }, + .{ .cp = 0xD1A9, .start = 33273, .len = 3 }, + .{ .cp = 0xD1AA, .start = 33276, .len = 3 }, + .{ .cp = 0xD1AB, .start = 33279, .len = 3 }, + .{ .cp = 0xD1AC, .start = 33282, .len = 3 }, + .{ .cp = 0xD1AD, .start = 33285, .len = 3 }, + .{ .cp = 0xD1AE, .start = 33288, .len = 3 }, + .{ .cp = 0xD1AF, .start = 33291, .len = 3 }, + .{ .cp = 0xD1B0, .start = 33294, .len = 3 }, + .{ .cp = 0xD1B1, .start = 33297, .len = 3 }, + .{ .cp = 0xD1B2, .start = 33300, .len = 3 }, + .{ .cp = 0xD1B3, .start = 33303, .len = 3 }, + .{ .cp = 0xD1B4, .start = 33306, .len = 3 }, + .{ .cp = 0xD1B5, .start = 33309, .len = 3 }, + .{ .cp = 0xD1B6, .start = 33312, .len = 3 }, + .{ .cp = 0xD1B7, .start = 33315, .len = 3 }, + .{ .cp = 0xD1B8, .start = 33318, .len = 3 }, + .{ .cp = 0xD1B9, .start = 33321, .len = 3 }, + .{ .cp = 0xD1BA, .start = 33324, .len = 3 }, + .{ .cp = 0xD1BB, .start = 33327, .len = 3 }, + .{ .cp = 0xD1BC, .start = 33330, .len = 2 }, + .{ .cp = 0xD1BD, .start = 33332, .len = 3 }, + .{ .cp = 0xD1BE, .start = 33335, .len = 3 }, + .{ .cp = 0xD1BF, .start = 33338, .len = 3 }, + .{ .cp = 0xD1C0, .start = 33341, .len = 3 }, + .{ .cp = 0xD1C1, .start = 33344, .len = 3 }, + .{ .cp = 0xD1C2, .start = 33347, .len = 3 }, + .{ .cp = 0xD1C3, .start = 33350, .len = 3 }, + .{ .cp = 0xD1C4, .start = 33353, .len = 3 }, + .{ .cp = 0xD1C5, .start = 33356, .len = 3 }, + .{ .cp = 0xD1C6, .start = 33359, .len = 3 }, + .{ .cp = 0xD1C7, .start = 33362, .len = 3 }, + .{ .cp = 0xD1C8, .start = 33365, .len = 3 }, + .{ .cp = 0xD1C9, .start = 33368, .len = 3 }, + .{ .cp = 0xD1CA, .start = 33371, .len = 3 }, + .{ .cp = 0xD1CB, .start = 33374, .len = 3 }, + .{ .cp = 0xD1CC, .start = 33377, .len = 3 }, + .{ .cp = 0xD1CD, .start = 33380, .len = 3 }, + .{ .cp = 0xD1CE, .start = 33383, .len = 3 }, + .{ .cp = 0xD1CF, .start = 33386, .len = 3 }, + .{ .cp = 0xD1D0, .start = 33389, .len = 3 }, + .{ .cp = 0xD1D1, .start = 33392, .len = 3 }, + .{ .cp = 0xD1D2, .start = 33395, .len = 3 }, + .{ .cp = 0xD1D3, .start = 33398, .len = 3 }, + .{ .cp = 0xD1D4, .start = 33401, .len = 3 }, + .{ .cp = 0xD1D5, .start = 33404, .len = 3 }, + .{ .cp = 0xD1D6, .start = 33407, .len = 3 }, + .{ .cp = 0xD1D7, .start = 33410, .len = 3 }, + .{ .cp = 0xD1D8, .start = 33413, .len = 2 }, + .{ .cp = 0xD1D9, .start = 33415, .len = 3 }, + .{ .cp = 0xD1DA, .start = 33418, .len = 3 }, + .{ .cp = 0xD1DB, .start = 33421, .len = 3 }, + .{ .cp = 0xD1DC, .start = 33424, .len = 3 }, + .{ .cp = 0xD1DD, .start = 33427, .len = 3 }, + .{ .cp = 0xD1DE, .start = 33430, .len = 3 }, + .{ .cp = 0xD1DF, .start = 33433, .len = 3 }, + .{ .cp = 0xD1E0, .start = 33436, .len = 3 }, + .{ .cp = 0xD1E1, .start = 33439, .len = 3 }, + .{ .cp = 0xD1E2, .start = 33442, .len = 3 }, + .{ .cp = 0xD1E3, .start = 33445, .len = 3 }, + .{ .cp = 0xD1E4, .start = 33448, .len = 3 }, + .{ .cp = 0xD1E5, .start = 33451, .len = 3 }, + .{ .cp = 0xD1E6, .start = 33454, .len = 3 }, + .{ .cp = 0xD1E7, .start = 33457, .len = 3 }, + .{ .cp = 0xD1E8, .start = 33460, .len = 3 }, + .{ .cp = 0xD1E9, .start = 33463, .len = 3 }, + .{ .cp = 0xD1EA, .start = 33466, .len = 3 }, + .{ .cp = 0xD1EB, .start = 33469, .len = 3 }, + .{ .cp = 0xD1EC, .start = 33472, .len = 3 }, + .{ .cp = 0xD1ED, .start = 33475, .len = 3 }, + .{ .cp = 0xD1EE, .start = 33478, .len = 3 }, + .{ .cp = 0xD1EF, .start = 33481, .len = 3 }, + .{ .cp = 0xD1F0, .start = 33484, .len = 3 }, + .{ .cp = 0xD1F1, .start = 33487, .len = 3 }, + .{ .cp = 0xD1F2, .start = 33490, .len = 3 }, + .{ .cp = 0xD1F3, .start = 33493, .len = 3 }, + .{ .cp = 0xD1F4, .start = 33496, .len = 2 }, + .{ .cp = 0xD1F5, .start = 33498, .len = 3 }, + .{ .cp = 0xD1F6, .start = 33501, .len = 3 }, + .{ .cp = 0xD1F7, .start = 33504, .len = 3 }, + .{ .cp = 0xD1F8, .start = 33507, .len = 3 }, + .{ .cp = 0xD1F9, .start = 33510, .len = 3 }, + .{ .cp = 0xD1FA, .start = 33513, .len = 3 }, + .{ .cp = 0xD1FB, .start = 33516, .len = 3 }, + .{ .cp = 0xD1FC, .start = 33519, .len = 3 }, + .{ .cp = 0xD1FD, .start = 33522, .len = 3 }, + .{ .cp = 0xD1FE, .start = 33525, .len = 3 }, + .{ .cp = 0xD1FF, .start = 33528, .len = 3 }, + .{ .cp = 0xD200, .start = 33531, .len = 3 }, + .{ .cp = 0xD201, .start = 33534, .len = 3 }, + .{ .cp = 0xD202, .start = 33537, .len = 3 }, + .{ .cp = 0xD203, .start = 33540, .len = 3 }, + .{ .cp = 0xD204, .start = 33543, .len = 3 }, + .{ .cp = 0xD205, .start = 33546, .len = 3 }, + .{ .cp = 0xD206, .start = 33549, .len = 3 }, + .{ .cp = 0xD207, .start = 33552, .len = 3 }, + .{ .cp = 0xD208, .start = 33555, .len = 3 }, + .{ .cp = 0xD209, .start = 33558, .len = 3 }, + .{ .cp = 0xD20A, .start = 33561, .len = 3 }, + .{ .cp = 0xD20B, .start = 33564, .len = 3 }, + .{ .cp = 0xD20C, .start = 33567, .len = 3 }, + .{ .cp = 0xD20D, .start = 33570, .len = 3 }, + .{ .cp = 0xD20E, .start = 33573, .len = 3 }, + .{ .cp = 0xD20F, .start = 33576, .len = 3 }, + .{ .cp = 0xD210, .start = 33579, .len = 2 }, + .{ .cp = 0xD211, .start = 33581, .len = 3 }, + .{ .cp = 0xD212, .start = 33584, .len = 3 }, + .{ .cp = 0xD213, .start = 33587, .len = 3 }, + .{ .cp = 0xD214, .start = 33590, .len = 3 }, + .{ .cp = 0xD215, .start = 33593, .len = 3 }, + .{ .cp = 0xD216, .start = 33596, .len = 3 }, + .{ .cp = 0xD217, .start = 33599, .len = 3 }, + .{ .cp = 0xD218, .start = 33602, .len = 3 }, + .{ .cp = 0xD219, .start = 33605, .len = 3 }, + .{ .cp = 0xD21A, .start = 33608, .len = 3 }, + .{ .cp = 0xD21B, .start = 33611, .len = 3 }, + .{ .cp = 0xD21C, .start = 33614, .len = 3 }, + .{ .cp = 0xD21D, .start = 33617, .len = 3 }, + .{ .cp = 0xD21E, .start = 33620, .len = 3 }, + .{ .cp = 0xD21F, .start = 33623, .len = 3 }, + .{ .cp = 0xD220, .start = 33626, .len = 3 }, + .{ .cp = 0xD221, .start = 33629, .len = 3 }, + .{ .cp = 0xD222, .start = 33632, .len = 3 }, + .{ .cp = 0xD223, .start = 33635, .len = 3 }, + .{ .cp = 0xD224, .start = 33638, .len = 3 }, + .{ .cp = 0xD225, .start = 33641, .len = 3 }, + .{ .cp = 0xD226, .start = 33644, .len = 3 }, + .{ .cp = 0xD227, .start = 33647, .len = 3 }, + .{ .cp = 0xD228, .start = 33650, .len = 3 }, + .{ .cp = 0xD229, .start = 33653, .len = 3 }, + .{ .cp = 0xD22A, .start = 33656, .len = 3 }, + .{ .cp = 0xD22B, .start = 33659, .len = 3 }, + .{ .cp = 0xD22C, .start = 33662, .len = 2 }, + .{ .cp = 0xD22D, .start = 33664, .len = 3 }, + .{ .cp = 0xD22E, .start = 33667, .len = 3 }, + .{ .cp = 0xD22F, .start = 33670, .len = 3 }, + .{ .cp = 0xD230, .start = 33673, .len = 3 }, + .{ .cp = 0xD231, .start = 33676, .len = 3 }, + .{ .cp = 0xD232, .start = 33679, .len = 3 }, + .{ .cp = 0xD233, .start = 33682, .len = 3 }, + .{ .cp = 0xD234, .start = 33685, .len = 3 }, + .{ .cp = 0xD235, .start = 33688, .len = 3 }, + .{ .cp = 0xD236, .start = 33691, .len = 3 }, + .{ .cp = 0xD237, .start = 33694, .len = 3 }, + .{ .cp = 0xD238, .start = 33697, .len = 3 }, + .{ .cp = 0xD239, .start = 33700, .len = 3 }, + .{ .cp = 0xD23A, .start = 33703, .len = 3 }, + .{ .cp = 0xD23B, .start = 33706, .len = 3 }, + .{ .cp = 0xD23C, .start = 33709, .len = 3 }, + .{ .cp = 0xD23D, .start = 33712, .len = 3 }, + .{ .cp = 0xD23E, .start = 33715, .len = 3 }, + .{ .cp = 0xD23F, .start = 33718, .len = 3 }, + .{ .cp = 0xD240, .start = 33721, .len = 3 }, + .{ .cp = 0xD241, .start = 33724, .len = 3 }, + .{ .cp = 0xD242, .start = 33727, .len = 3 }, + .{ .cp = 0xD243, .start = 33730, .len = 3 }, + .{ .cp = 0xD244, .start = 33733, .len = 3 }, + .{ .cp = 0xD245, .start = 33736, .len = 3 }, + .{ .cp = 0xD246, .start = 33739, .len = 3 }, + .{ .cp = 0xD247, .start = 33742, .len = 3 }, + .{ .cp = 0xD248, .start = 33745, .len = 2 }, + .{ .cp = 0xD249, .start = 33747, .len = 3 }, + .{ .cp = 0xD24A, .start = 33750, .len = 3 }, + .{ .cp = 0xD24B, .start = 33753, .len = 3 }, + .{ .cp = 0xD24C, .start = 33756, .len = 3 }, + .{ .cp = 0xD24D, .start = 33759, .len = 3 }, + .{ .cp = 0xD24E, .start = 33762, .len = 3 }, + .{ .cp = 0xD24F, .start = 33765, .len = 3 }, + .{ .cp = 0xD250, .start = 33768, .len = 3 }, + .{ .cp = 0xD251, .start = 33771, .len = 3 }, + .{ .cp = 0xD252, .start = 33774, .len = 3 }, + .{ .cp = 0xD253, .start = 33777, .len = 3 }, + .{ .cp = 0xD254, .start = 33780, .len = 3 }, + .{ .cp = 0xD255, .start = 33783, .len = 3 }, + .{ .cp = 0xD256, .start = 33786, .len = 3 }, + .{ .cp = 0xD257, .start = 33789, .len = 3 }, + .{ .cp = 0xD258, .start = 33792, .len = 3 }, + .{ .cp = 0xD259, .start = 33795, .len = 3 }, + .{ .cp = 0xD25A, .start = 33798, .len = 3 }, + .{ .cp = 0xD25B, .start = 33801, .len = 3 }, + .{ .cp = 0xD25C, .start = 33804, .len = 3 }, + .{ .cp = 0xD25D, .start = 33807, .len = 3 }, + .{ .cp = 0xD25E, .start = 33810, .len = 3 }, + .{ .cp = 0xD25F, .start = 33813, .len = 3 }, + .{ .cp = 0xD260, .start = 33816, .len = 3 }, + .{ .cp = 0xD261, .start = 33819, .len = 3 }, + .{ .cp = 0xD262, .start = 33822, .len = 3 }, + .{ .cp = 0xD263, .start = 33825, .len = 3 }, + .{ .cp = 0xD264, .start = 33828, .len = 2 }, + .{ .cp = 0xD265, .start = 33830, .len = 3 }, + .{ .cp = 0xD266, .start = 33833, .len = 3 }, + .{ .cp = 0xD267, .start = 33836, .len = 3 }, + .{ .cp = 0xD268, .start = 33839, .len = 3 }, + .{ .cp = 0xD269, .start = 33842, .len = 3 }, + .{ .cp = 0xD26A, .start = 33845, .len = 3 }, + .{ .cp = 0xD26B, .start = 33848, .len = 3 }, + .{ .cp = 0xD26C, .start = 33851, .len = 3 }, + .{ .cp = 0xD26D, .start = 33854, .len = 3 }, + .{ .cp = 0xD26E, .start = 33857, .len = 3 }, + .{ .cp = 0xD26F, .start = 33860, .len = 3 }, + .{ .cp = 0xD270, .start = 33863, .len = 3 }, + .{ .cp = 0xD271, .start = 33866, .len = 3 }, + .{ .cp = 0xD272, .start = 33869, .len = 3 }, + .{ .cp = 0xD273, .start = 33872, .len = 3 }, + .{ .cp = 0xD274, .start = 33875, .len = 3 }, + .{ .cp = 0xD275, .start = 33878, .len = 3 }, + .{ .cp = 0xD276, .start = 33881, .len = 3 }, + .{ .cp = 0xD277, .start = 33884, .len = 3 }, + .{ .cp = 0xD278, .start = 33887, .len = 3 }, + .{ .cp = 0xD279, .start = 33890, .len = 3 }, + .{ .cp = 0xD27A, .start = 33893, .len = 3 }, + .{ .cp = 0xD27B, .start = 33896, .len = 3 }, + .{ .cp = 0xD27C, .start = 33899, .len = 3 }, + .{ .cp = 0xD27D, .start = 33902, .len = 3 }, + .{ .cp = 0xD27E, .start = 33905, .len = 3 }, + .{ .cp = 0xD27F, .start = 33908, .len = 3 }, + .{ .cp = 0xD280, .start = 33911, .len = 2 }, + .{ .cp = 0xD281, .start = 33913, .len = 3 }, + .{ .cp = 0xD282, .start = 33916, .len = 3 }, + .{ .cp = 0xD283, .start = 33919, .len = 3 }, + .{ .cp = 0xD284, .start = 33922, .len = 3 }, + .{ .cp = 0xD285, .start = 33925, .len = 3 }, + .{ .cp = 0xD286, .start = 33928, .len = 3 }, + .{ .cp = 0xD287, .start = 33931, .len = 3 }, + .{ .cp = 0xD288, .start = 33934, .len = 3 }, + .{ .cp = 0xD289, .start = 33937, .len = 3 }, + .{ .cp = 0xD28A, .start = 33940, .len = 3 }, + .{ .cp = 0xD28B, .start = 33943, .len = 3 }, + .{ .cp = 0xD28C, .start = 33946, .len = 3 }, + .{ .cp = 0xD28D, .start = 33949, .len = 3 }, + .{ .cp = 0xD28E, .start = 33952, .len = 3 }, + .{ .cp = 0xD28F, .start = 33955, .len = 3 }, + .{ .cp = 0xD290, .start = 33958, .len = 3 }, + .{ .cp = 0xD291, .start = 33961, .len = 3 }, + .{ .cp = 0xD292, .start = 33964, .len = 3 }, + .{ .cp = 0xD293, .start = 33967, .len = 3 }, + .{ .cp = 0xD294, .start = 33970, .len = 3 }, + .{ .cp = 0xD295, .start = 33973, .len = 3 }, + .{ .cp = 0xD296, .start = 33976, .len = 3 }, + .{ .cp = 0xD297, .start = 33979, .len = 3 }, + .{ .cp = 0xD298, .start = 33982, .len = 3 }, + .{ .cp = 0xD299, .start = 33985, .len = 3 }, + .{ .cp = 0xD29A, .start = 33988, .len = 3 }, + .{ .cp = 0xD29B, .start = 33991, .len = 3 }, + .{ .cp = 0xD29C, .start = 33994, .len = 2 }, + .{ .cp = 0xD29D, .start = 33996, .len = 3 }, + .{ .cp = 0xD29E, .start = 33999, .len = 3 }, + .{ .cp = 0xD29F, .start = 34002, .len = 3 }, + .{ .cp = 0xD2A0, .start = 34005, .len = 3 }, + .{ .cp = 0xD2A1, .start = 34008, .len = 3 }, + .{ .cp = 0xD2A2, .start = 34011, .len = 3 }, + .{ .cp = 0xD2A3, .start = 34014, .len = 3 }, + .{ .cp = 0xD2A4, .start = 34017, .len = 3 }, + .{ .cp = 0xD2A5, .start = 34020, .len = 3 }, + .{ .cp = 0xD2A6, .start = 34023, .len = 3 }, + .{ .cp = 0xD2A7, .start = 34026, .len = 3 }, + .{ .cp = 0xD2A8, .start = 34029, .len = 3 }, + .{ .cp = 0xD2A9, .start = 34032, .len = 3 }, + .{ .cp = 0xD2AA, .start = 34035, .len = 3 }, + .{ .cp = 0xD2AB, .start = 34038, .len = 3 }, + .{ .cp = 0xD2AC, .start = 34041, .len = 3 }, + .{ .cp = 0xD2AD, .start = 34044, .len = 3 }, + .{ .cp = 0xD2AE, .start = 34047, .len = 3 }, + .{ .cp = 0xD2AF, .start = 34050, .len = 3 }, + .{ .cp = 0xD2B0, .start = 34053, .len = 3 }, + .{ .cp = 0xD2B1, .start = 34056, .len = 3 }, + .{ .cp = 0xD2B2, .start = 34059, .len = 3 }, + .{ .cp = 0xD2B3, .start = 34062, .len = 3 }, + .{ .cp = 0xD2B4, .start = 34065, .len = 3 }, + .{ .cp = 0xD2B5, .start = 34068, .len = 3 }, + .{ .cp = 0xD2B6, .start = 34071, .len = 3 }, + .{ .cp = 0xD2B7, .start = 34074, .len = 3 }, + .{ .cp = 0xD2B8, .start = 34077, .len = 2 }, + .{ .cp = 0xD2B9, .start = 34079, .len = 3 }, + .{ .cp = 0xD2BA, .start = 34082, .len = 3 }, + .{ .cp = 0xD2BB, .start = 34085, .len = 3 }, + .{ .cp = 0xD2BC, .start = 34088, .len = 3 }, + .{ .cp = 0xD2BD, .start = 34091, .len = 3 }, + .{ .cp = 0xD2BE, .start = 34094, .len = 3 }, + .{ .cp = 0xD2BF, .start = 34097, .len = 3 }, + .{ .cp = 0xD2C0, .start = 34100, .len = 3 }, + .{ .cp = 0xD2C1, .start = 34103, .len = 3 }, + .{ .cp = 0xD2C2, .start = 34106, .len = 3 }, + .{ .cp = 0xD2C3, .start = 34109, .len = 3 }, + .{ .cp = 0xD2C4, .start = 34112, .len = 3 }, + .{ .cp = 0xD2C5, .start = 34115, .len = 3 }, + .{ .cp = 0xD2C6, .start = 34118, .len = 3 }, + .{ .cp = 0xD2C7, .start = 34121, .len = 3 }, + .{ .cp = 0xD2C8, .start = 34124, .len = 3 }, + .{ .cp = 0xD2C9, .start = 34127, .len = 3 }, + .{ .cp = 0xD2CA, .start = 34130, .len = 3 }, + .{ .cp = 0xD2CB, .start = 34133, .len = 3 }, + .{ .cp = 0xD2CC, .start = 34136, .len = 3 }, + .{ .cp = 0xD2CD, .start = 34139, .len = 3 }, + .{ .cp = 0xD2CE, .start = 34142, .len = 3 }, + .{ .cp = 0xD2CF, .start = 34145, .len = 3 }, + .{ .cp = 0xD2D0, .start = 34148, .len = 3 }, + .{ .cp = 0xD2D1, .start = 34151, .len = 3 }, + .{ .cp = 0xD2D2, .start = 34154, .len = 3 }, + .{ .cp = 0xD2D3, .start = 34157, .len = 3 }, + .{ .cp = 0xD2D4, .start = 34160, .len = 2 }, + .{ .cp = 0xD2D5, .start = 34162, .len = 3 }, + .{ .cp = 0xD2D6, .start = 34165, .len = 3 }, + .{ .cp = 0xD2D7, .start = 34168, .len = 3 }, + .{ .cp = 0xD2D8, .start = 34171, .len = 3 }, + .{ .cp = 0xD2D9, .start = 34174, .len = 3 }, + .{ .cp = 0xD2DA, .start = 34177, .len = 3 }, + .{ .cp = 0xD2DB, .start = 34180, .len = 3 }, + .{ .cp = 0xD2DC, .start = 34183, .len = 3 }, + .{ .cp = 0xD2DD, .start = 34186, .len = 3 }, + .{ .cp = 0xD2DE, .start = 34189, .len = 3 }, + .{ .cp = 0xD2DF, .start = 34192, .len = 3 }, + .{ .cp = 0xD2E0, .start = 34195, .len = 3 }, + .{ .cp = 0xD2E1, .start = 34198, .len = 3 }, + .{ .cp = 0xD2E2, .start = 34201, .len = 3 }, + .{ .cp = 0xD2E3, .start = 34204, .len = 3 }, + .{ .cp = 0xD2E4, .start = 34207, .len = 3 }, + .{ .cp = 0xD2E5, .start = 34210, .len = 3 }, + .{ .cp = 0xD2E6, .start = 34213, .len = 3 }, + .{ .cp = 0xD2E7, .start = 34216, .len = 3 }, + .{ .cp = 0xD2E8, .start = 34219, .len = 3 }, + .{ .cp = 0xD2E9, .start = 34222, .len = 3 }, + .{ .cp = 0xD2EA, .start = 34225, .len = 3 }, + .{ .cp = 0xD2EB, .start = 34228, .len = 3 }, + .{ .cp = 0xD2EC, .start = 34231, .len = 3 }, + .{ .cp = 0xD2ED, .start = 34234, .len = 3 }, + .{ .cp = 0xD2EE, .start = 34237, .len = 3 }, + .{ .cp = 0xD2EF, .start = 34240, .len = 3 }, + .{ .cp = 0xD2F0, .start = 34243, .len = 2 }, + .{ .cp = 0xD2F1, .start = 34245, .len = 3 }, + .{ .cp = 0xD2F2, .start = 34248, .len = 3 }, + .{ .cp = 0xD2F3, .start = 34251, .len = 3 }, + .{ .cp = 0xD2F4, .start = 34254, .len = 3 }, + .{ .cp = 0xD2F5, .start = 34257, .len = 3 }, + .{ .cp = 0xD2F6, .start = 34260, .len = 3 }, + .{ .cp = 0xD2F7, .start = 34263, .len = 3 }, + .{ .cp = 0xD2F8, .start = 34266, .len = 3 }, + .{ .cp = 0xD2F9, .start = 34269, .len = 3 }, + .{ .cp = 0xD2FA, .start = 34272, .len = 3 }, + .{ .cp = 0xD2FB, .start = 34275, .len = 3 }, + .{ .cp = 0xD2FC, .start = 34278, .len = 3 }, + .{ .cp = 0xD2FD, .start = 34281, .len = 3 }, + .{ .cp = 0xD2FE, .start = 34284, .len = 3 }, + .{ .cp = 0xD2FF, .start = 34287, .len = 3 }, + .{ .cp = 0xD300, .start = 34290, .len = 3 }, + .{ .cp = 0xD301, .start = 34293, .len = 3 }, + .{ .cp = 0xD302, .start = 34296, .len = 3 }, + .{ .cp = 0xD303, .start = 34299, .len = 3 }, + .{ .cp = 0xD304, .start = 34302, .len = 3 }, + .{ .cp = 0xD305, .start = 34305, .len = 3 }, + .{ .cp = 0xD306, .start = 34308, .len = 3 }, + .{ .cp = 0xD307, .start = 34311, .len = 3 }, + .{ .cp = 0xD308, .start = 34314, .len = 3 }, + .{ .cp = 0xD309, .start = 34317, .len = 3 }, + .{ .cp = 0xD30A, .start = 34320, .len = 3 }, + .{ .cp = 0xD30B, .start = 34323, .len = 3 }, + .{ .cp = 0xD30C, .start = 34326, .len = 2 }, + .{ .cp = 0xD30D, .start = 34328, .len = 3 }, + .{ .cp = 0xD30E, .start = 34331, .len = 3 }, + .{ .cp = 0xD30F, .start = 34334, .len = 3 }, + .{ .cp = 0xD310, .start = 34337, .len = 3 }, + .{ .cp = 0xD311, .start = 34340, .len = 3 }, + .{ .cp = 0xD312, .start = 34343, .len = 3 }, + .{ .cp = 0xD313, .start = 34346, .len = 3 }, + .{ .cp = 0xD314, .start = 34349, .len = 3 }, + .{ .cp = 0xD315, .start = 34352, .len = 3 }, + .{ .cp = 0xD316, .start = 34355, .len = 3 }, + .{ .cp = 0xD317, .start = 34358, .len = 3 }, + .{ .cp = 0xD318, .start = 34361, .len = 3 }, + .{ .cp = 0xD319, .start = 34364, .len = 3 }, + .{ .cp = 0xD31A, .start = 34367, .len = 3 }, + .{ .cp = 0xD31B, .start = 34370, .len = 3 }, + .{ .cp = 0xD31C, .start = 34373, .len = 3 }, + .{ .cp = 0xD31D, .start = 34376, .len = 3 }, + .{ .cp = 0xD31E, .start = 34379, .len = 3 }, + .{ .cp = 0xD31F, .start = 34382, .len = 3 }, + .{ .cp = 0xD320, .start = 34385, .len = 3 }, + .{ .cp = 0xD321, .start = 34388, .len = 3 }, + .{ .cp = 0xD322, .start = 34391, .len = 3 }, + .{ .cp = 0xD323, .start = 34394, .len = 3 }, + .{ .cp = 0xD324, .start = 34397, .len = 3 }, + .{ .cp = 0xD325, .start = 34400, .len = 3 }, + .{ .cp = 0xD326, .start = 34403, .len = 3 }, + .{ .cp = 0xD327, .start = 34406, .len = 3 }, + .{ .cp = 0xD328, .start = 34409, .len = 2 }, + .{ .cp = 0xD329, .start = 34411, .len = 3 }, + .{ .cp = 0xD32A, .start = 34414, .len = 3 }, + .{ .cp = 0xD32B, .start = 34417, .len = 3 }, + .{ .cp = 0xD32C, .start = 34420, .len = 3 }, + .{ .cp = 0xD32D, .start = 34423, .len = 3 }, + .{ .cp = 0xD32E, .start = 34426, .len = 3 }, + .{ .cp = 0xD32F, .start = 34429, .len = 3 }, + .{ .cp = 0xD330, .start = 34432, .len = 3 }, + .{ .cp = 0xD331, .start = 34435, .len = 3 }, + .{ .cp = 0xD332, .start = 34438, .len = 3 }, + .{ .cp = 0xD333, .start = 34441, .len = 3 }, + .{ .cp = 0xD334, .start = 34444, .len = 3 }, + .{ .cp = 0xD335, .start = 34447, .len = 3 }, + .{ .cp = 0xD336, .start = 34450, .len = 3 }, + .{ .cp = 0xD337, .start = 34453, .len = 3 }, + .{ .cp = 0xD338, .start = 34456, .len = 3 }, + .{ .cp = 0xD339, .start = 34459, .len = 3 }, + .{ .cp = 0xD33A, .start = 34462, .len = 3 }, + .{ .cp = 0xD33B, .start = 34465, .len = 3 }, + .{ .cp = 0xD33C, .start = 34468, .len = 3 }, + .{ .cp = 0xD33D, .start = 34471, .len = 3 }, + .{ .cp = 0xD33E, .start = 34474, .len = 3 }, + .{ .cp = 0xD33F, .start = 34477, .len = 3 }, + .{ .cp = 0xD340, .start = 34480, .len = 3 }, + .{ .cp = 0xD341, .start = 34483, .len = 3 }, + .{ .cp = 0xD342, .start = 34486, .len = 3 }, + .{ .cp = 0xD343, .start = 34489, .len = 3 }, + .{ .cp = 0xD344, .start = 34492, .len = 2 }, + .{ .cp = 0xD345, .start = 34494, .len = 3 }, + .{ .cp = 0xD346, .start = 34497, .len = 3 }, + .{ .cp = 0xD347, .start = 34500, .len = 3 }, + .{ .cp = 0xD348, .start = 34503, .len = 3 }, + .{ .cp = 0xD349, .start = 34506, .len = 3 }, + .{ .cp = 0xD34A, .start = 34509, .len = 3 }, + .{ .cp = 0xD34B, .start = 34512, .len = 3 }, + .{ .cp = 0xD34C, .start = 34515, .len = 3 }, + .{ .cp = 0xD34D, .start = 34518, .len = 3 }, + .{ .cp = 0xD34E, .start = 34521, .len = 3 }, + .{ .cp = 0xD34F, .start = 34524, .len = 3 }, + .{ .cp = 0xD350, .start = 34527, .len = 3 }, + .{ .cp = 0xD351, .start = 34530, .len = 3 }, + .{ .cp = 0xD352, .start = 34533, .len = 3 }, + .{ .cp = 0xD353, .start = 34536, .len = 3 }, + .{ .cp = 0xD354, .start = 34539, .len = 3 }, + .{ .cp = 0xD355, .start = 34542, .len = 3 }, + .{ .cp = 0xD356, .start = 34545, .len = 3 }, + .{ .cp = 0xD357, .start = 34548, .len = 3 }, + .{ .cp = 0xD358, .start = 34551, .len = 3 }, + .{ .cp = 0xD359, .start = 34554, .len = 3 }, + .{ .cp = 0xD35A, .start = 34557, .len = 3 }, + .{ .cp = 0xD35B, .start = 34560, .len = 3 }, + .{ .cp = 0xD35C, .start = 34563, .len = 3 }, + .{ .cp = 0xD35D, .start = 34566, .len = 3 }, + .{ .cp = 0xD35E, .start = 34569, .len = 3 }, + .{ .cp = 0xD35F, .start = 34572, .len = 3 }, + .{ .cp = 0xD360, .start = 34575, .len = 2 }, + .{ .cp = 0xD361, .start = 34577, .len = 3 }, + .{ .cp = 0xD362, .start = 34580, .len = 3 }, + .{ .cp = 0xD363, .start = 34583, .len = 3 }, + .{ .cp = 0xD364, .start = 34586, .len = 3 }, + .{ .cp = 0xD365, .start = 34589, .len = 3 }, + .{ .cp = 0xD366, .start = 34592, .len = 3 }, + .{ .cp = 0xD367, .start = 34595, .len = 3 }, + .{ .cp = 0xD368, .start = 34598, .len = 3 }, + .{ .cp = 0xD369, .start = 34601, .len = 3 }, + .{ .cp = 0xD36A, .start = 34604, .len = 3 }, + .{ .cp = 0xD36B, .start = 34607, .len = 3 }, + .{ .cp = 0xD36C, .start = 34610, .len = 3 }, + .{ .cp = 0xD36D, .start = 34613, .len = 3 }, + .{ .cp = 0xD36E, .start = 34616, .len = 3 }, + .{ .cp = 0xD36F, .start = 34619, .len = 3 }, + .{ .cp = 0xD370, .start = 34622, .len = 3 }, + .{ .cp = 0xD371, .start = 34625, .len = 3 }, + .{ .cp = 0xD372, .start = 34628, .len = 3 }, + .{ .cp = 0xD373, .start = 34631, .len = 3 }, + .{ .cp = 0xD374, .start = 34634, .len = 3 }, + .{ .cp = 0xD375, .start = 34637, .len = 3 }, + .{ .cp = 0xD376, .start = 34640, .len = 3 }, + .{ .cp = 0xD377, .start = 34643, .len = 3 }, + .{ .cp = 0xD378, .start = 34646, .len = 3 }, + .{ .cp = 0xD379, .start = 34649, .len = 3 }, + .{ .cp = 0xD37A, .start = 34652, .len = 3 }, + .{ .cp = 0xD37B, .start = 34655, .len = 3 }, + .{ .cp = 0xD37C, .start = 34658, .len = 2 }, + .{ .cp = 0xD37D, .start = 34660, .len = 3 }, + .{ .cp = 0xD37E, .start = 34663, .len = 3 }, + .{ .cp = 0xD37F, .start = 34666, .len = 3 }, + .{ .cp = 0xD380, .start = 34669, .len = 3 }, + .{ .cp = 0xD381, .start = 34672, .len = 3 }, + .{ .cp = 0xD382, .start = 34675, .len = 3 }, + .{ .cp = 0xD383, .start = 34678, .len = 3 }, + .{ .cp = 0xD384, .start = 34681, .len = 3 }, + .{ .cp = 0xD385, .start = 34684, .len = 3 }, + .{ .cp = 0xD386, .start = 34687, .len = 3 }, + .{ .cp = 0xD387, .start = 34690, .len = 3 }, + .{ .cp = 0xD388, .start = 34693, .len = 3 }, + .{ .cp = 0xD389, .start = 34696, .len = 3 }, + .{ .cp = 0xD38A, .start = 34699, .len = 3 }, + .{ .cp = 0xD38B, .start = 34702, .len = 3 }, + .{ .cp = 0xD38C, .start = 34705, .len = 3 }, + .{ .cp = 0xD38D, .start = 34708, .len = 3 }, + .{ .cp = 0xD38E, .start = 34711, .len = 3 }, + .{ .cp = 0xD38F, .start = 34714, .len = 3 }, + .{ .cp = 0xD390, .start = 34717, .len = 3 }, + .{ .cp = 0xD391, .start = 34720, .len = 3 }, + .{ .cp = 0xD392, .start = 34723, .len = 3 }, + .{ .cp = 0xD393, .start = 34726, .len = 3 }, + .{ .cp = 0xD394, .start = 34729, .len = 3 }, + .{ .cp = 0xD395, .start = 34732, .len = 3 }, + .{ .cp = 0xD396, .start = 34735, .len = 3 }, + .{ .cp = 0xD397, .start = 34738, .len = 3 }, + .{ .cp = 0xD398, .start = 34741, .len = 2 }, + .{ .cp = 0xD399, .start = 34743, .len = 3 }, + .{ .cp = 0xD39A, .start = 34746, .len = 3 }, + .{ .cp = 0xD39B, .start = 34749, .len = 3 }, + .{ .cp = 0xD39C, .start = 34752, .len = 3 }, + .{ .cp = 0xD39D, .start = 34755, .len = 3 }, + .{ .cp = 0xD39E, .start = 34758, .len = 3 }, + .{ .cp = 0xD39F, .start = 34761, .len = 3 }, + .{ .cp = 0xD3A0, .start = 34764, .len = 3 }, + .{ .cp = 0xD3A1, .start = 34767, .len = 3 }, + .{ .cp = 0xD3A2, .start = 34770, .len = 3 }, + .{ .cp = 0xD3A3, .start = 34773, .len = 3 }, + .{ .cp = 0xD3A4, .start = 34776, .len = 3 }, + .{ .cp = 0xD3A5, .start = 34779, .len = 3 }, + .{ .cp = 0xD3A6, .start = 34782, .len = 3 }, + .{ .cp = 0xD3A7, .start = 34785, .len = 3 }, + .{ .cp = 0xD3A8, .start = 34788, .len = 3 }, + .{ .cp = 0xD3A9, .start = 34791, .len = 3 }, + .{ .cp = 0xD3AA, .start = 34794, .len = 3 }, + .{ .cp = 0xD3AB, .start = 34797, .len = 3 }, + .{ .cp = 0xD3AC, .start = 34800, .len = 3 }, + .{ .cp = 0xD3AD, .start = 34803, .len = 3 }, + .{ .cp = 0xD3AE, .start = 34806, .len = 3 }, + .{ .cp = 0xD3AF, .start = 34809, .len = 3 }, + .{ .cp = 0xD3B0, .start = 34812, .len = 3 }, + .{ .cp = 0xD3B1, .start = 34815, .len = 3 }, + .{ .cp = 0xD3B2, .start = 34818, .len = 3 }, + .{ .cp = 0xD3B3, .start = 34821, .len = 3 }, + .{ .cp = 0xD3B4, .start = 34824, .len = 2 }, + .{ .cp = 0xD3B5, .start = 34826, .len = 3 }, + .{ .cp = 0xD3B6, .start = 34829, .len = 3 }, + .{ .cp = 0xD3B7, .start = 34832, .len = 3 }, + .{ .cp = 0xD3B8, .start = 34835, .len = 3 }, + .{ .cp = 0xD3B9, .start = 34838, .len = 3 }, + .{ .cp = 0xD3BA, .start = 34841, .len = 3 }, + .{ .cp = 0xD3BB, .start = 34844, .len = 3 }, + .{ .cp = 0xD3BC, .start = 34847, .len = 3 }, + .{ .cp = 0xD3BD, .start = 34850, .len = 3 }, + .{ .cp = 0xD3BE, .start = 34853, .len = 3 }, + .{ .cp = 0xD3BF, .start = 34856, .len = 3 }, + .{ .cp = 0xD3C0, .start = 34859, .len = 3 }, + .{ .cp = 0xD3C1, .start = 34862, .len = 3 }, + .{ .cp = 0xD3C2, .start = 34865, .len = 3 }, + .{ .cp = 0xD3C3, .start = 34868, .len = 3 }, + .{ .cp = 0xD3C4, .start = 34871, .len = 3 }, + .{ .cp = 0xD3C5, .start = 34874, .len = 3 }, + .{ .cp = 0xD3C6, .start = 34877, .len = 3 }, + .{ .cp = 0xD3C7, .start = 34880, .len = 3 }, + .{ .cp = 0xD3C8, .start = 34883, .len = 3 }, + .{ .cp = 0xD3C9, .start = 34886, .len = 3 }, + .{ .cp = 0xD3CA, .start = 34889, .len = 3 }, + .{ .cp = 0xD3CB, .start = 34892, .len = 3 }, + .{ .cp = 0xD3CC, .start = 34895, .len = 3 }, + .{ .cp = 0xD3CD, .start = 34898, .len = 3 }, + .{ .cp = 0xD3CE, .start = 34901, .len = 3 }, + .{ .cp = 0xD3CF, .start = 34904, .len = 3 }, + .{ .cp = 0xD3D0, .start = 34907, .len = 2 }, + .{ .cp = 0xD3D1, .start = 34909, .len = 3 }, + .{ .cp = 0xD3D2, .start = 34912, .len = 3 }, + .{ .cp = 0xD3D3, .start = 34915, .len = 3 }, + .{ .cp = 0xD3D4, .start = 34918, .len = 3 }, + .{ .cp = 0xD3D5, .start = 34921, .len = 3 }, + .{ .cp = 0xD3D6, .start = 34924, .len = 3 }, + .{ .cp = 0xD3D7, .start = 34927, .len = 3 }, + .{ .cp = 0xD3D8, .start = 34930, .len = 3 }, + .{ .cp = 0xD3D9, .start = 34933, .len = 3 }, + .{ .cp = 0xD3DA, .start = 34936, .len = 3 }, + .{ .cp = 0xD3DB, .start = 34939, .len = 3 }, + .{ .cp = 0xD3DC, .start = 34942, .len = 3 }, + .{ .cp = 0xD3DD, .start = 34945, .len = 3 }, + .{ .cp = 0xD3DE, .start = 34948, .len = 3 }, + .{ .cp = 0xD3DF, .start = 34951, .len = 3 }, + .{ .cp = 0xD3E0, .start = 34954, .len = 3 }, + .{ .cp = 0xD3E1, .start = 34957, .len = 3 }, + .{ .cp = 0xD3E2, .start = 34960, .len = 3 }, + .{ .cp = 0xD3E3, .start = 34963, .len = 3 }, + .{ .cp = 0xD3E4, .start = 34966, .len = 3 }, + .{ .cp = 0xD3E5, .start = 34969, .len = 3 }, + .{ .cp = 0xD3E6, .start = 34972, .len = 3 }, + .{ .cp = 0xD3E7, .start = 34975, .len = 3 }, + .{ .cp = 0xD3E8, .start = 34978, .len = 3 }, + .{ .cp = 0xD3E9, .start = 34981, .len = 3 }, + .{ .cp = 0xD3EA, .start = 34984, .len = 3 }, + .{ .cp = 0xD3EB, .start = 34987, .len = 3 }, + .{ .cp = 0xD3EC, .start = 34990, .len = 2 }, + .{ .cp = 0xD3ED, .start = 34992, .len = 3 }, + .{ .cp = 0xD3EE, .start = 34995, .len = 3 }, + .{ .cp = 0xD3EF, .start = 34998, .len = 3 }, + .{ .cp = 0xD3F0, .start = 35001, .len = 3 }, + .{ .cp = 0xD3F1, .start = 35004, .len = 3 }, + .{ .cp = 0xD3F2, .start = 35007, .len = 3 }, + .{ .cp = 0xD3F3, .start = 35010, .len = 3 }, + .{ .cp = 0xD3F4, .start = 35013, .len = 3 }, + .{ .cp = 0xD3F5, .start = 35016, .len = 3 }, + .{ .cp = 0xD3F6, .start = 35019, .len = 3 }, + .{ .cp = 0xD3F7, .start = 35022, .len = 3 }, + .{ .cp = 0xD3F8, .start = 35025, .len = 3 }, + .{ .cp = 0xD3F9, .start = 35028, .len = 3 }, + .{ .cp = 0xD3FA, .start = 35031, .len = 3 }, + .{ .cp = 0xD3FB, .start = 35034, .len = 3 }, + .{ .cp = 0xD3FC, .start = 35037, .len = 3 }, + .{ .cp = 0xD3FD, .start = 35040, .len = 3 }, + .{ .cp = 0xD3FE, .start = 35043, .len = 3 }, + .{ .cp = 0xD3FF, .start = 35046, .len = 3 }, + .{ .cp = 0xD400, .start = 35049, .len = 3 }, + .{ .cp = 0xD401, .start = 35052, .len = 3 }, + .{ .cp = 0xD402, .start = 35055, .len = 3 }, + .{ .cp = 0xD403, .start = 35058, .len = 3 }, + .{ .cp = 0xD404, .start = 35061, .len = 3 }, + .{ .cp = 0xD405, .start = 35064, .len = 3 }, + .{ .cp = 0xD406, .start = 35067, .len = 3 }, + .{ .cp = 0xD407, .start = 35070, .len = 3 }, + .{ .cp = 0xD408, .start = 35073, .len = 2 }, + .{ .cp = 0xD409, .start = 35075, .len = 3 }, + .{ .cp = 0xD40A, .start = 35078, .len = 3 }, + .{ .cp = 0xD40B, .start = 35081, .len = 3 }, + .{ .cp = 0xD40C, .start = 35084, .len = 3 }, + .{ .cp = 0xD40D, .start = 35087, .len = 3 }, + .{ .cp = 0xD40E, .start = 35090, .len = 3 }, + .{ .cp = 0xD40F, .start = 35093, .len = 3 }, + .{ .cp = 0xD410, .start = 35096, .len = 3 }, + .{ .cp = 0xD411, .start = 35099, .len = 3 }, + .{ .cp = 0xD412, .start = 35102, .len = 3 }, + .{ .cp = 0xD413, .start = 35105, .len = 3 }, + .{ .cp = 0xD414, .start = 35108, .len = 3 }, + .{ .cp = 0xD415, .start = 35111, .len = 3 }, + .{ .cp = 0xD416, .start = 35114, .len = 3 }, + .{ .cp = 0xD417, .start = 35117, .len = 3 }, + .{ .cp = 0xD418, .start = 35120, .len = 3 }, + .{ .cp = 0xD419, .start = 35123, .len = 3 }, + .{ .cp = 0xD41A, .start = 35126, .len = 3 }, + .{ .cp = 0xD41B, .start = 35129, .len = 3 }, + .{ .cp = 0xD41C, .start = 35132, .len = 3 }, + .{ .cp = 0xD41D, .start = 35135, .len = 3 }, + .{ .cp = 0xD41E, .start = 35138, .len = 3 }, + .{ .cp = 0xD41F, .start = 35141, .len = 3 }, + .{ .cp = 0xD420, .start = 35144, .len = 3 }, + .{ .cp = 0xD421, .start = 35147, .len = 3 }, + .{ .cp = 0xD422, .start = 35150, .len = 3 }, + .{ .cp = 0xD423, .start = 35153, .len = 3 }, + .{ .cp = 0xD424, .start = 35156, .len = 2 }, + .{ .cp = 0xD425, .start = 35158, .len = 3 }, + .{ .cp = 0xD426, .start = 35161, .len = 3 }, + .{ .cp = 0xD427, .start = 35164, .len = 3 }, + .{ .cp = 0xD428, .start = 35167, .len = 3 }, + .{ .cp = 0xD429, .start = 35170, .len = 3 }, + .{ .cp = 0xD42A, .start = 35173, .len = 3 }, + .{ .cp = 0xD42B, .start = 35176, .len = 3 }, + .{ .cp = 0xD42C, .start = 35179, .len = 3 }, + .{ .cp = 0xD42D, .start = 35182, .len = 3 }, + .{ .cp = 0xD42E, .start = 35185, .len = 3 }, + .{ .cp = 0xD42F, .start = 35188, .len = 3 }, + .{ .cp = 0xD430, .start = 35191, .len = 3 }, + .{ .cp = 0xD431, .start = 35194, .len = 3 }, + .{ .cp = 0xD432, .start = 35197, .len = 3 }, + .{ .cp = 0xD433, .start = 35200, .len = 3 }, + .{ .cp = 0xD434, .start = 35203, .len = 3 }, + .{ .cp = 0xD435, .start = 35206, .len = 3 }, + .{ .cp = 0xD436, .start = 35209, .len = 3 }, + .{ .cp = 0xD437, .start = 35212, .len = 3 }, + .{ .cp = 0xD438, .start = 35215, .len = 3 }, + .{ .cp = 0xD439, .start = 35218, .len = 3 }, + .{ .cp = 0xD43A, .start = 35221, .len = 3 }, + .{ .cp = 0xD43B, .start = 35224, .len = 3 }, + .{ .cp = 0xD43C, .start = 35227, .len = 3 }, + .{ .cp = 0xD43D, .start = 35230, .len = 3 }, + .{ .cp = 0xD43E, .start = 35233, .len = 3 }, + .{ .cp = 0xD43F, .start = 35236, .len = 3 }, + .{ .cp = 0xD440, .start = 35239, .len = 2 }, + .{ .cp = 0xD441, .start = 35241, .len = 3 }, + .{ .cp = 0xD442, .start = 35244, .len = 3 }, + .{ .cp = 0xD443, .start = 35247, .len = 3 }, + .{ .cp = 0xD444, .start = 35250, .len = 3 }, + .{ .cp = 0xD445, .start = 35253, .len = 3 }, + .{ .cp = 0xD446, .start = 35256, .len = 3 }, + .{ .cp = 0xD447, .start = 35259, .len = 3 }, + .{ .cp = 0xD448, .start = 35262, .len = 3 }, + .{ .cp = 0xD449, .start = 35265, .len = 3 }, + .{ .cp = 0xD44A, .start = 35268, .len = 3 }, + .{ .cp = 0xD44B, .start = 35271, .len = 3 }, + .{ .cp = 0xD44C, .start = 35274, .len = 3 }, + .{ .cp = 0xD44D, .start = 35277, .len = 3 }, + .{ .cp = 0xD44E, .start = 35280, .len = 3 }, + .{ .cp = 0xD44F, .start = 35283, .len = 3 }, + .{ .cp = 0xD450, .start = 35286, .len = 3 }, + .{ .cp = 0xD451, .start = 35289, .len = 3 }, + .{ .cp = 0xD452, .start = 35292, .len = 3 }, + .{ .cp = 0xD453, .start = 35295, .len = 3 }, + .{ .cp = 0xD454, .start = 35298, .len = 3 }, + .{ .cp = 0xD455, .start = 35301, .len = 3 }, + .{ .cp = 0xD456, .start = 35304, .len = 3 }, + .{ .cp = 0xD457, .start = 35307, .len = 3 }, + .{ .cp = 0xD458, .start = 35310, .len = 3 }, + .{ .cp = 0xD459, .start = 35313, .len = 3 }, + .{ .cp = 0xD45A, .start = 35316, .len = 3 }, + .{ .cp = 0xD45B, .start = 35319, .len = 3 }, + .{ .cp = 0xD45C, .start = 35322, .len = 2 }, + .{ .cp = 0xD45D, .start = 35324, .len = 3 }, + .{ .cp = 0xD45E, .start = 35327, .len = 3 }, + .{ .cp = 0xD45F, .start = 35330, .len = 3 }, + .{ .cp = 0xD460, .start = 35333, .len = 3 }, + .{ .cp = 0xD461, .start = 35336, .len = 3 }, + .{ .cp = 0xD462, .start = 35339, .len = 3 }, + .{ .cp = 0xD463, .start = 35342, .len = 3 }, + .{ .cp = 0xD464, .start = 35345, .len = 3 }, + .{ .cp = 0xD465, .start = 35348, .len = 3 }, + .{ .cp = 0xD466, .start = 35351, .len = 3 }, + .{ .cp = 0xD467, .start = 35354, .len = 3 }, + .{ .cp = 0xD468, .start = 35357, .len = 3 }, + .{ .cp = 0xD469, .start = 35360, .len = 3 }, + .{ .cp = 0xD46A, .start = 35363, .len = 3 }, + .{ .cp = 0xD46B, .start = 35366, .len = 3 }, + .{ .cp = 0xD46C, .start = 35369, .len = 3 }, + .{ .cp = 0xD46D, .start = 35372, .len = 3 }, + .{ .cp = 0xD46E, .start = 35375, .len = 3 }, + .{ .cp = 0xD46F, .start = 35378, .len = 3 }, + .{ .cp = 0xD470, .start = 35381, .len = 3 }, + .{ .cp = 0xD471, .start = 35384, .len = 3 }, + .{ .cp = 0xD472, .start = 35387, .len = 3 }, + .{ .cp = 0xD473, .start = 35390, .len = 3 }, + .{ .cp = 0xD474, .start = 35393, .len = 3 }, + .{ .cp = 0xD475, .start = 35396, .len = 3 }, + .{ .cp = 0xD476, .start = 35399, .len = 3 }, + .{ .cp = 0xD477, .start = 35402, .len = 3 }, + .{ .cp = 0xD478, .start = 35405, .len = 2 }, + .{ .cp = 0xD479, .start = 35407, .len = 3 }, + .{ .cp = 0xD47A, .start = 35410, .len = 3 }, + .{ .cp = 0xD47B, .start = 35413, .len = 3 }, + .{ .cp = 0xD47C, .start = 35416, .len = 3 }, + .{ .cp = 0xD47D, .start = 35419, .len = 3 }, + .{ .cp = 0xD47E, .start = 35422, .len = 3 }, + .{ .cp = 0xD47F, .start = 35425, .len = 3 }, + .{ .cp = 0xD480, .start = 35428, .len = 3 }, + .{ .cp = 0xD481, .start = 35431, .len = 3 }, + .{ .cp = 0xD482, .start = 35434, .len = 3 }, + .{ .cp = 0xD483, .start = 35437, .len = 3 }, + .{ .cp = 0xD484, .start = 35440, .len = 3 }, + .{ .cp = 0xD485, .start = 35443, .len = 3 }, + .{ .cp = 0xD486, .start = 35446, .len = 3 }, + .{ .cp = 0xD487, .start = 35449, .len = 3 }, + .{ .cp = 0xD488, .start = 35452, .len = 3 }, + .{ .cp = 0xD489, .start = 35455, .len = 3 }, + .{ .cp = 0xD48A, .start = 35458, .len = 3 }, + .{ .cp = 0xD48B, .start = 35461, .len = 3 }, + .{ .cp = 0xD48C, .start = 35464, .len = 3 }, + .{ .cp = 0xD48D, .start = 35467, .len = 3 }, + .{ .cp = 0xD48E, .start = 35470, .len = 3 }, + .{ .cp = 0xD48F, .start = 35473, .len = 3 }, + .{ .cp = 0xD490, .start = 35476, .len = 3 }, + .{ .cp = 0xD491, .start = 35479, .len = 3 }, + .{ .cp = 0xD492, .start = 35482, .len = 3 }, + .{ .cp = 0xD493, .start = 35485, .len = 3 }, + .{ .cp = 0xD494, .start = 35488, .len = 2 }, + .{ .cp = 0xD495, .start = 35490, .len = 3 }, + .{ .cp = 0xD496, .start = 35493, .len = 3 }, + .{ .cp = 0xD497, .start = 35496, .len = 3 }, + .{ .cp = 0xD498, .start = 35499, .len = 3 }, + .{ .cp = 0xD499, .start = 35502, .len = 3 }, + .{ .cp = 0xD49A, .start = 35505, .len = 3 }, + .{ .cp = 0xD49B, .start = 35508, .len = 3 }, + .{ .cp = 0xD49C, .start = 35511, .len = 3 }, + .{ .cp = 0xD49D, .start = 35514, .len = 3 }, + .{ .cp = 0xD49E, .start = 35517, .len = 3 }, + .{ .cp = 0xD49F, .start = 35520, .len = 3 }, + .{ .cp = 0xD4A0, .start = 35523, .len = 3 }, + .{ .cp = 0xD4A1, .start = 35526, .len = 3 }, + .{ .cp = 0xD4A2, .start = 35529, .len = 3 }, + .{ .cp = 0xD4A3, .start = 35532, .len = 3 }, + .{ .cp = 0xD4A4, .start = 35535, .len = 3 }, + .{ .cp = 0xD4A5, .start = 35538, .len = 3 }, + .{ .cp = 0xD4A6, .start = 35541, .len = 3 }, + .{ .cp = 0xD4A7, .start = 35544, .len = 3 }, + .{ .cp = 0xD4A8, .start = 35547, .len = 3 }, + .{ .cp = 0xD4A9, .start = 35550, .len = 3 }, + .{ .cp = 0xD4AA, .start = 35553, .len = 3 }, + .{ .cp = 0xD4AB, .start = 35556, .len = 3 }, + .{ .cp = 0xD4AC, .start = 35559, .len = 3 }, + .{ .cp = 0xD4AD, .start = 35562, .len = 3 }, + .{ .cp = 0xD4AE, .start = 35565, .len = 3 }, + .{ .cp = 0xD4AF, .start = 35568, .len = 3 }, + .{ .cp = 0xD4B0, .start = 35571, .len = 2 }, + .{ .cp = 0xD4B1, .start = 35573, .len = 3 }, + .{ .cp = 0xD4B2, .start = 35576, .len = 3 }, + .{ .cp = 0xD4B3, .start = 35579, .len = 3 }, + .{ .cp = 0xD4B4, .start = 35582, .len = 3 }, + .{ .cp = 0xD4B5, .start = 35585, .len = 3 }, + .{ .cp = 0xD4B6, .start = 35588, .len = 3 }, + .{ .cp = 0xD4B7, .start = 35591, .len = 3 }, + .{ .cp = 0xD4B8, .start = 35594, .len = 3 }, + .{ .cp = 0xD4B9, .start = 35597, .len = 3 }, + .{ .cp = 0xD4BA, .start = 35600, .len = 3 }, + .{ .cp = 0xD4BB, .start = 35603, .len = 3 }, + .{ .cp = 0xD4BC, .start = 35606, .len = 3 }, + .{ .cp = 0xD4BD, .start = 35609, .len = 3 }, + .{ .cp = 0xD4BE, .start = 35612, .len = 3 }, + .{ .cp = 0xD4BF, .start = 35615, .len = 3 }, + .{ .cp = 0xD4C0, .start = 35618, .len = 3 }, + .{ .cp = 0xD4C1, .start = 35621, .len = 3 }, + .{ .cp = 0xD4C2, .start = 35624, .len = 3 }, + .{ .cp = 0xD4C3, .start = 35627, .len = 3 }, + .{ .cp = 0xD4C4, .start = 35630, .len = 3 }, + .{ .cp = 0xD4C5, .start = 35633, .len = 3 }, + .{ .cp = 0xD4C6, .start = 35636, .len = 3 }, + .{ .cp = 0xD4C7, .start = 35639, .len = 3 }, + .{ .cp = 0xD4C8, .start = 35642, .len = 3 }, + .{ .cp = 0xD4C9, .start = 35645, .len = 3 }, + .{ .cp = 0xD4CA, .start = 35648, .len = 3 }, + .{ .cp = 0xD4CB, .start = 35651, .len = 3 }, + .{ .cp = 0xD4CC, .start = 35654, .len = 2 }, + .{ .cp = 0xD4CD, .start = 35656, .len = 3 }, + .{ .cp = 0xD4CE, .start = 35659, .len = 3 }, + .{ .cp = 0xD4CF, .start = 35662, .len = 3 }, + .{ .cp = 0xD4D0, .start = 35665, .len = 3 }, + .{ .cp = 0xD4D1, .start = 35668, .len = 3 }, + .{ .cp = 0xD4D2, .start = 35671, .len = 3 }, + .{ .cp = 0xD4D3, .start = 35674, .len = 3 }, + .{ .cp = 0xD4D4, .start = 35677, .len = 3 }, + .{ .cp = 0xD4D5, .start = 35680, .len = 3 }, + .{ .cp = 0xD4D6, .start = 35683, .len = 3 }, + .{ .cp = 0xD4D7, .start = 35686, .len = 3 }, + .{ .cp = 0xD4D8, .start = 35689, .len = 3 }, + .{ .cp = 0xD4D9, .start = 35692, .len = 3 }, + .{ .cp = 0xD4DA, .start = 35695, .len = 3 }, + .{ .cp = 0xD4DB, .start = 35698, .len = 3 }, + .{ .cp = 0xD4DC, .start = 35701, .len = 3 }, + .{ .cp = 0xD4DD, .start = 35704, .len = 3 }, + .{ .cp = 0xD4DE, .start = 35707, .len = 3 }, + .{ .cp = 0xD4DF, .start = 35710, .len = 3 }, + .{ .cp = 0xD4E0, .start = 35713, .len = 3 }, + .{ .cp = 0xD4E1, .start = 35716, .len = 3 }, + .{ .cp = 0xD4E2, .start = 35719, .len = 3 }, + .{ .cp = 0xD4E3, .start = 35722, .len = 3 }, + .{ .cp = 0xD4E4, .start = 35725, .len = 3 }, + .{ .cp = 0xD4E5, .start = 35728, .len = 3 }, + .{ .cp = 0xD4E6, .start = 35731, .len = 3 }, + .{ .cp = 0xD4E7, .start = 35734, .len = 3 }, + .{ .cp = 0xD4E8, .start = 35737, .len = 2 }, + .{ .cp = 0xD4E9, .start = 35739, .len = 3 }, + .{ .cp = 0xD4EA, .start = 35742, .len = 3 }, + .{ .cp = 0xD4EB, .start = 35745, .len = 3 }, + .{ .cp = 0xD4EC, .start = 35748, .len = 3 }, + .{ .cp = 0xD4ED, .start = 35751, .len = 3 }, + .{ .cp = 0xD4EE, .start = 35754, .len = 3 }, + .{ .cp = 0xD4EF, .start = 35757, .len = 3 }, + .{ .cp = 0xD4F0, .start = 35760, .len = 3 }, + .{ .cp = 0xD4F1, .start = 35763, .len = 3 }, + .{ .cp = 0xD4F2, .start = 35766, .len = 3 }, + .{ .cp = 0xD4F3, .start = 35769, .len = 3 }, + .{ .cp = 0xD4F4, .start = 35772, .len = 3 }, + .{ .cp = 0xD4F5, .start = 35775, .len = 3 }, + .{ .cp = 0xD4F6, .start = 35778, .len = 3 }, + .{ .cp = 0xD4F7, .start = 35781, .len = 3 }, + .{ .cp = 0xD4F8, .start = 35784, .len = 3 }, + .{ .cp = 0xD4F9, .start = 35787, .len = 3 }, + .{ .cp = 0xD4FA, .start = 35790, .len = 3 }, + .{ .cp = 0xD4FB, .start = 35793, .len = 3 }, + .{ .cp = 0xD4FC, .start = 35796, .len = 3 }, + .{ .cp = 0xD4FD, .start = 35799, .len = 3 }, + .{ .cp = 0xD4FE, .start = 35802, .len = 3 }, + .{ .cp = 0xD4FF, .start = 35805, .len = 3 }, + .{ .cp = 0xD500, .start = 35808, .len = 3 }, + .{ .cp = 0xD501, .start = 35811, .len = 3 }, + .{ .cp = 0xD502, .start = 35814, .len = 3 }, + .{ .cp = 0xD503, .start = 35817, .len = 3 }, + .{ .cp = 0xD504, .start = 35820, .len = 2 }, + .{ .cp = 0xD505, .start = 35822, .len = 3 }, + .{ .cp = 0xD506, .start = 35825, .len = 3 }, + .{ .cp = 0xD507, .start = 35828, .len = 3 }, + .{ .cp = 0xD508, .start = 35831, .len = 3 }, + .{ .cp = 0xD509, .start = 35834, .len = 3 }, + .{ .cp = 0xD50A, .start = 35837, .len = 3 }, + .{ .cp = 0xD50B, .start = 35840, .len = 3 }, + .{ .cp = 0xD50C, .start = 35843, .len = 3 }, + .{ .cp = 0xD50D, .start = 35846, .len = 3 }, + .{ .cp = 0xD50E, .start = 35849, .len = 3 }, + .{ .cp = 0xD50F, .start = 35852, .len = 3 }, + .{ .cp = 0xD510, .start = 35855, .len = 3 }, + .{ .cp = 0xD511, .start = 35858, .len = 3 }, + .{ .cp = 0xD512, .start = 35861, .len = 3 }, + .{ .cp = 0xD513, .start = 35864, .len = 3 }, + .{ .cp = 0xD514, .start = 35867, .len = 3 }, + .{ .cp = 0xD515, .start = 35870, .len = 3 }, + .{ .cp = 0xD516, .start = 35873, .len = 3 }, + .{ .cp = 0xD517, .start = 35876, .len = 3 }, + .{ .cp = 0xD518, .start = 35879, .len = 3 }, + .{ .cp = 0xD519, .start = 35882, .len = 3 }, + .{ .cp = 0xD51A, .start = 35885, .len = 3 }, + .{ .cp = 0xD51B, .start = 35888, .len = 3 }, + .{ .cp = 0xD51C, .start = 35891, .len = 3 }, + .{ .cp = 0xD51D, .start = 35894, .len = 3 }, + .{ .cp = 0xD51E, .start = 35897, .len = 3 }, + .{ .cp = 0xD51F, .start = 35900, .len = 3 }, + .{ .cp = 0xD520, .start = 35903, .len = 2 }, + .{ .cp = 0xD521, .start = 35905, .len = 3 }, + .{ .cp = 0xD522, .start = 35908, .len = 3 }, + .{ .cp = 0xD523, .start = 35911, .len = 3 }, + .{ .cp = 0xD524, .start = 35914, .len = 3 }, + .{ .cp = 0xD525, .start = 35917, .len = 3 }, + .{ .cp = 0xD526, .start = 35920, .len = 3 }, + .{ .cp = 0xD527, .start = 35923, .len = 3 }, + .{ .cp = 0xD528, .start = 35926, .len = 3 }, + .{ .cp = 0xD529, .start = 35929, .len = 3 }, + .{ .cp = 0xD52A, .start = 35932, .len = 3 }, + .{ .cp = 0xD52B, .start = 35935, .len = 3 }, + .{ .cp = 0xD52C, .start = 35938, .len = 3 }, + .{ .cp = 0xD52D, .start = 35941, .len = 3 }, + .{ .cp = 0xD52E, .start = 35944, .len = 3 }, + .{ .cp = 0xD52F, .start = 35947, .len = 3 }, + .{ .cp = 0xD530, .start = 35950, .len = 3 }, + .{ .cp = 0xD531, .start = 35953, .len = 3 }, + .{ .cp = 0xD532, .start = 35956, .len = 3 }, + .{ .cp = 0xD533, .start = 35959, .len = 3 }, + .{ .cp = 0xD534, .start = 35962, .len = 3 }, + .{ .cp = 0xD535, .start = 35965, .len = 3 }, + .{ .cp = 0xD536, .start = 35968, .len = 3 }, + .{ .cp = 0xD537, .start = 35971, .len = 3 }, + .{ .cp = 0xD538, .start = 35974, .len = 3 }, + .{ .cp = 0xD539, .start = 35977, .len = 3 }, + .{ .cp = 0xD53A, .start = 35980, .len = 3 }, + .{ .cp = 0xD53B, .start = 35983, .len = 3 }, + .{ .cp = 0xD53C, .start = 35986, .len = 2 }, + .{ .cp = 0xD53D, .start = 35988, .len = 3 }, + .{ .cp = 0xD53E, .start = 35991, .len = 3 }, + .{ .cp = 0xD53F, .start = 35994, .len = 3 }, + .{ .cp = 0xD540, .start = 35997, .len = 3 }, + .{ .cp = 0xD541, .start = 36000, .len = 3 }, + .{ .cp = 0xD542, .start = 36003, .len = 3 }, + .{ .cp = 0xD543, .start = 36006, .len = 3 }, + .{ .cp = 0xD544, .start = 36009, .len = 3 }, + .{ .cp = 0xD545, .start = 36012, .len = 3 }, + .{ .cp = 0xD546, .start = 36015, .len = 3 }, + .{ .cp = 0xD547, .start = 36018, .len = 3 }, + .{ .cp = 0xD548, .start = 36021, .len = 3 }, + .{ .cp = 0xD549, .start = 36024, .len = 3 }, + .{ .cp = 0xD54A, .start = 36027, .len = 3 }, + .{ .cp = 0xD54B, .start = 36030, .len = 3 }, + .{ .cp = 0xD54C, .start = 36033, .len = 3 }, + .{ .cp = 0xD54D, .start = 36036, .len = 3 }, + .{ .cp = 0xD54E, .start = 36039, .len = 3 }, + .{ .cp = 0xD54F, .start = 36042, .len = 3 }, + .{ .cp = 0xD550, .start = 36045, .len = 3 }, + .{ .cp = 0xD551, .start = 36048, .len = 3 }, + .{ .cp = 0xD552, .start = 36051, .len = 3 }, + .{ .cp = 0xD553, .start = 36054, .len = 3 }, + .{ .cp = 0xD554, .start = 36057, .len = 3 }, + .{ .cp = 0xD555, .start = 36060, .len = 3 }, + .{ .cp = 0xD556, .start = 36063, .len = 3 }, + .{ .cp = 0xD557, .start = 36066, .len = 3 }, + .{ .cp = 0xD558, .start = 36069, .len = 2 }, + .{ .cp = 0xD559, .start = 36071, .len = 3 }, + .{ .cp = 0xD55A, .start = 36074, .len = 3 }, + .{ .cp = 0xD55B, .start = 36077, .len = 3 }, + .{ .cp = 0xD55C, .start = 36080, .len = 3 }, + .{ .cp = 0xD55D, .start = 36083, .len = 3 }, + .{ .cp = 0xD55E, .start = 36086, .len = 3 }, + .{ .cp = 0xD55F, .start = 36089, .len = 3 }, + .{ .cp = 0xD560, .start = 36092, .len = 3 }, + .{ .cp = 0xD561, .start = 36095, .len = 3 }, + .{ .cp = 0xD562, .start = 36098, .len = 3 }, + .{ .cp = 0xD563, .start = 36101, .len = 3 }, + .{ .cp = 0xD564, .start = 36104, .len = 3 }, + .{ .cp = 0xD565, .start = 36107, .len = 3 }, + .{ .cp = 0xD566, .start = 36110, .len = 3 }, + .{ .cp = 0xD567, .start = 36113, .len = 3 }, + .{ .cp = 0xD568, .start = 36116, .len = 3 }, + .{ .cp = 0xD569, .start = 36119, .len = 3 }, + .{ .cp = 0xD56A, .start = 36122, .len = 3 }, + .{ .cp = 0xD56B, .start = 36125, .len = 3 }, + .{ .cp = 0xD56C, .start = 36128, .len = 3 }, + .{ .cp = 0xD56D, .start = 36131, .len = 3 }, + .{ .cp = 0xD56E, .start = 36134, .len = 3 }, + .{ .cp = 0xD56F, .start = 36137, .len = 3 }, + .{ .cp = 0xD570, .start = 36140, .len = 3 }, + .{ .cp = 0xD571, .start = 36143, .len = 3 }, + .{ .cp = 0xD572, .start = 36146, .len = 3 }, + .{ .cp = 0xD573, .start = 36149, .len = 3 }, + .{ .cp = 0xD574, .start = 36152, .len = 2 }, + .{ .cp = 0xD575, .start = 36154, .len = 3 }, + .{ .cp = 0xD576, .start = 36157, .len = 3 }, + .{ .cp = 0xD577, .start = 36160, .len = 3 }, + .{ .cp = 0xD578, .start = 36163, .len = 3 }, + .{ .cp = 0xD579, .start = 36166, .len = 3 }, + .{ .cp = 0xD57A, .start = 36169, .len = 3 }, + .{ .cp = 0xD57B, .start = 36172, .len = 3 }, + .{ .cp = 0xD57C, .start = 36175, .len = 3 }, + .{ .cp = 0xD57D, .start = 36178, .len = 3 }, + .{ .cp = 0xD57E, .start = 36181, .len = 3 }, + .{ .cp = 0xD57F, .start = 36184, .len = 3 }, + .{ .cp = 0xD580, .start = 36187, .len = 3 }, + .{ .cp = 0xD581, .start = 36190, .len = 3 }, + .{ .cp = 0xD582, .start = 36193, .len = 3 }, + .{ .cp = 0xD583, .start = 36196, .len = 3 }, + .{ .cp = 0xD584, .start = 36199, .len = 3 }, + .{ .cp = 0xD585, .start = 36202, .len = 3 }, + .{ .cp = 0xD586, .start = 36205, .len = 3 }, + .{ .cp = 0xD587, .start = 36208, .len = 3 }, + .{ .cp = 0xD588, .start = 36211, .len = 3 }, + .{ .cp = 0xD589, .start = 36214, .len = 3 }, + .{ .cp = 0xD58A, .start = 36217, .len = 3 }, + .{ .cp = 0xD58B, .start = 36220, .len = 3 }, + .{ .cp = 0xD58C, .start = 36223, .len = 3 }, + .{ .cp = 0xD58D, .start = 36226, .len = 3 }, + .{ .cp = 0xD58E, .start = 36229, .len = 3 }, + .{ .cp = 0xD58F, .start = 36232, .len = 3 }, + .{ .cp = 0xD590, .start = 36235, .len = 2 }, + .{ .cp = 0xD591, .start = 36237, .len = 3 }, + .{ .cp = 0xD592, .start = 36240, .len = 3 }, + .{ .cp = 0xD593, .start = 36243, .len = 3 }, + .{ .cp = 0xD594, .start = 36246, .len = 3 }, + .{ .cp = 0xD595, .start = 36249, .len = 3 }, + .{ .cp = 0xD596, .start = 36252, .len = 3 }, + .{ .cp = 0xD597, .start = 36255, .len = 3 }, + .{ .cp = 0xD598, .start = 36258, .len = 3 }, + .{ .cp = 0xD599, .start = 36261, .len = 3 }, + .{ .cp = 0xD59A, .start = 36264, .len = 3 }, + .{ .cp = 0xD59B, .start = 36267, .len = 3 }, + .{ .cp = 0xD59C, .start = 36270, .len = 3 }, + .{ .cp = 0xD59D, .start = 36273, .len = 3 }, + .{ .cp = 0xD59E, .start = 36276, .len = 3 }, + .{ .cp = 0xD59F, .start = 36279, .len = 3 }, + .{ .cp = 0xD5A0, .start = 36282, .len = 3 }, + .{ .cp = 0xD5A1, .start = 36285, .len = 3 }, + .{ .cp = 0xD5A2, .start = 36288, .len = 3 }, + .{ .cp = 0xD5A3, .start = 36291, .len = 3 }, + .{ .cp = 0xD5A4, .start = 36294, .len = 3 }, + .{ .cp = 0xD5A5, .start = 36297, .len = 3 }, + .{ .cp = 0xD5A6, .start = 36300, .len = 3 }, + .{ .cp = 0xD5A7, .start = 36303, .len = 3 }, + .{ .cp = 0xD5A8, .start = 36306, .len = 3 }, + .{ .cp = 0xD5A9, .start = 36309, .len = 3 }, + .{ .cp = 0xD5AA, .start = 36312, .len = 3 }, + .{ .cp = 0xD5AB, .start = 36315, .len = 3 }, + .{ .cp = 0xD5AC, .start = 36318, .len = 2 }, + .{ .cp = 0xD5AD, .start = 36320, .len = 3 }, + .{ .cp = 0xD5AE, .start = 36323, .len = 3 }, + .{ .cp = 0xD5AF, .start = 36326, .len = 3 }, + .{ .cp = 0xD5B0, .start = 36329, .len = 3 }, + .{ .cp = 0xD5B1, .start = 36332, .len = 3 }, + .{ .cp = 0xD5B2, .start = 36335, .len = 3 }, + .{ .cp = 0xD5B3, .start = 36338, .len = 3 }, + .{ .cp = 0xD5B4, .start = 36341, .len = 3 }, + .{ .cp = 0xD5B5, .start = 36344, .len = 3 }, + .{ .cp = 0xD5B6, .start = 36347, .len = 3 }, + .{ .cp = 0xD5B7, .start = 36350, .len = 3 }, + .{ .cp = 0xD5B8, .start = 36353, .len = 3 }, + .{ .cp = 0xD5B9, .start = 36356, .len = 3 }, + .{ .cp = 0xD5BA, .start = 36359, .len = 3 }, + .{ .cp = 0xD5BB, .start = 36362, .len = 3 }, + .{ .cp = 0xD5BC, .start = 36365, .len = 3 }, + .{ .cp = 0xD5BD, .start = 36368, .len = 3 }, + .{ .cp = 0xD5BE, .start = 36371, .len = 3 }, + .{ .cp = 0xD5BF, .start = 36374, .len = 3 }, + .{ .cp = 0xD5C0, .start = 36377, .len = 3 }, + .{ .cp = 0xD5C1, .start = 36380, .len = 3 }, + .{ .cp = 0xD5C2, .start = 36383, .len = 3 }, + .{ .cp = 0xD5C3, .start = 36386, .len = 3 }, + .{ .cp = 0xD5C4, .start = 36389, .len = 3 }, + .{ .cp = 0xD5C5, .start = 36392, .len = 3 }, + .{ .cp = 0xD5C6, .start = 36395, .len = 3 }, + .{ .cp = 0xD5C7, .start = 36398, .len = 3 }, + .{ .cp = 0xD5C8, .start = 36401, .len = 2 }, + .{ .cp = 0xD5C9, .start = 36403, .len = 3 }, + .{ .cp = 0xD5CA, .start = 36406, .len = 3 }, + .{ .cp = 0xD5CB, .start = 36409, .len = 3 }, + .{ .cp = 0xD5CC, .start = 36412, .len = 3 }, + .{ .cp = 0xD5CD, .start = 36415, .len = 3 }, + .{ .cp = 0xD5CE, .start = 36418, .len = 3 }, + .{ .cp = 0xD5CF, .start = 36421, .len = 3 }, + .{ .cp = 0xD5D0, .start = 36424, .len = 3 }, + .{ .cp = 0xD5D1, .start = 36427, .len = 3 }, + .{ .cp = 0xD5D2, .start = 36430, .len = 3 }, + .{ .cp = 0xD5D3, .start = 36433, .len = 3 }, + .{ .cp = 0xD5D4, .start = 36436, .len = 3 }, + .{ .cp = 0xD5D5, .start = 36439, .len = 3 }, + .{ .cp = 0xD5D6, .start = 36442, .len = 3 }, + .{ .cp = 0xD5D7, .start = 36445, .len = 3 }, + .{ .cp = 0xD5D8, .start = 36448, .len = 3 }, + .{ .cp = 0xD5D9, .start = 36451, .len = 3 }, + .{ .cp = 0xD5DA, .start = 36454, .len = 3 }, + .{ .cp = 0xD5DB, .start = 36457, .len = 3 }, + .{ .cp = 0xD5DC, .start = 36460, .len = 3 }, + .{ .cp = 0xD5DD, .start = 36463, .len = 3 }, + .{ .cp = 0xD5DE, .start = 36466, .len = 3 }, + .{ .cp = 0xD5DF, .start = 36469, .len = 3 }, + .{ .cp = 0xD5E0, .start = 36472, .len = 3 }, + .{ .cp = 0xD5E1, .start = 36475, .len = 3 }, + .{ .cp = 0xD5E2, .start = 36478, .len = 3 }, + .{ .cp = 0xD5E3, .start = 36481, .len = 3 }, + .{ .cp = 0xD5E4, .start = 36484, .len = 2 }, + .{ .cp = 0xD5E5, .start = 36486, .len = 3 }, + .{ .cp = 0xD5E6, .start = 36489, .len = 3 }, + .{ .cp = 0xD5E7, .start = 36492, .len = 3 }, + .{ .cp = 0xD5E8, .start = 36495, .len = 3 }, + .{ .cp = 0xD5E9, .start = 36498, .len = 3 }, + .{ .cp = 0xD5EA, .start = 36501, .len = 3 }, + .{ .cp = 0xD5EB, .start = 36504, .len = 3 }, + .{ .cp = 0xD5EC, .start = 36507, .len = 3 }, + .{ .cp = 0xD5ED, .start = 36510, .len = 3 }, + .{ .cp = 0xD5EE, .start = 36513, .len = 3 }, + .{ .cp = 0xD5EF, .start = 36516, .len = 3 }, + .{ .cp = 0xD5F0, .start = 36519, .len = 3 }, + .{ .cp = 0xD5F1, .start = 36522, .len = 3 }, + .{ .cp = 0xD5F2, .start = 36525, .len = 3 }, + .{ .cp = 0xD5F3, .start = 36528, .len = 3 }, + .{ .cp = 0xD5F4, .start = 36531, .len = 3 }, + .{ .cp = 0xD5F5, .start = 36534, .len = 3 }, + .{ .cp = 0xD5F6, .start = 36537, .len = 3 }, + .{ .cp = 0xD5F7, .start = 36540, .len = 3 }, + .{ .cp = 0xD5F8, .start = 36543, .len = 3 }, + .{ .cp = 0xD5F9, .start = 36546, .len = 3 }, + .{ .cp = 0xD5FA, .start = 36549, .len = 3 }, + .{ .cp = 0xD5FB, .start = 36552, .len = 3 }, + .{ .cp = 0xD5FC, .start = 36555, .len = 3 }, + .{ .cp = 0xD5FD, .start = 36558, .len = 3 }, + .{ .cp = 0xD5FE, .start = 36561, .len = 3 }, + .{ .cp = 0xD5FF, .start = 36564, .len = 3 }, + .{ .cp = 0xD600, .start = 36567, .len = 2 }, + .{ .cp = 0xD601, .start = 36569, .len = 3 }, + .{ .cp = 0xD602, .start = 36572, .len = 3 }, + .{ .cp = 0xD603, .start = 36575, .len = 3 }, + .{ .cp = 0xD604, .start = 36578, .len = 3 }, + .{ .cp = 0xD605, .start = 36581, .len = 3 }, + .{ .cp = 0xD606, .start = 36584, .len = 3 }, + .{ .cp = 0xD607, .start = 36587, .len = 3 }, + .{ .cp = 0xD608, .start = 36590, .len = 3 }, + .{ .cp = 0xD609, .start = 36593, .len = 3 }, + .{ .cp = 0xD60A, .start = 36596, .len = 3 }, + .{ .cp = 0xD60B, .start = 36599, .len = 3 }, + .{ .cp = 0xD60C, .start = 36602, .len = 3 }, + .{ .cp = 0xD60D, .start = 36605, .len = 3 }, + .{ .cp = 0xD60E, .start = 36608, .len = 3 }, + .{ .cp = 0xD60F, .start = 36611, .len = 3 }, + .{ .cp = 0xD610, .start = 36614, .len = 3 }, + .{ .cp = 0xD611, .start = 36617, .len = 3 }, + .{ .cp = 0xD612, .start = 36620, .len = 3 }, + .{ .cp = 0xD613, .start = 36623, .len = 3 }, + .{ .cp = 0xD614, .start = 36626, .len = 3 }, + .{ .cp = 0xD615, .start = 36629, .len = 3 }, + .{ .cp = 0xD616, .start = 36632, .len = 3 }, + .{ .cp = 0xD617, .start = 36635, .len = 3 }, + .{ .cp = 0xD618, .start = 36638, .len = 3 }, + .{ .cp = 0xD619, .start = 36641, .len = 3 }, + .{ .cp = 0xD61A, .start = 36644, .len = 3 }, + .{ .cp = 0xD61B, .start = 36647, .len = 3 }, + .{ .cp = 0xD61C, .start = 36650, .len = 2 }, + .{ .cp = 0xD61D, .start = 36652, .len = 3 }, + .{ .cp = 0xD61E, .start = 36655, .len = 3 }, + .{ .cp = 0xD61F, .start = 36658, .len = 3 }, + .{ .cp = 0xD620, .start = 36661, .len = 3 }, + .{ .cp = 0xD621, .start = 36664, .len = 3 }, + .{ .cp = 0xD622, .start = 36667, .len = 3 }, + .{ .cp = 0xD623, .start = 36670, .len = 3 }, + .{ .cp = 0xD624, .start = 36673, .len = 3 }, + .{ .cp = 0xD625, .start = 36676, .len = 3 }, + .{ .cp = 0xD626, .start = 36679, .len = 3 }, + .{ .cp = 0xD627, .start = 36682, .len = 3 }, + .{ .cp = 0xD628, .start = 36685, .len = 3 }, + .{ .cp = 0xD629, .start = 36688, .len = 3 }, + .{ .cp = 0xD62A, .start = 36691, .len = 3 }, + .{ .cp = 0xD62B, .start = 36694, .len = 3 }, + .{ .cp = 0xD62C, .start = 36697, .len = 3 }, + .{ .cp = 0xD62D, .start = 36700, .len = 3 }, + .{ .cp = 0xD62E, .start = 36703, .len = 3 }, + .{ .cp = 0xD62F, .start = 36706, .len = 3 }, + .{ .cp = 0xD630, .start = 36709, .len = 3 }, + .{ .cp = 0xD631, .start = 36712, .len = 3 }, + .{ .cp = 0xD632, .start = 36715, .len = 3 }, + .{ .cp = 0xD633, .start = 36718, .len = 3 }, + .{ .cp = 0xD634, .start = 36721, .len = 3 }, + .{ .cp = 0xD635, .start = 36724, .len = 3 }, + .{ .cp = 0xD636, .start = 36727, .len = 3 }, + .{ .cp = 0xD637, .start = 36730, .len = 3 }, + .{ .cp = 0xD638, .start = 36733, .len = 2 }, + .{ .cp = 0xD639, .start = 36735, .len = 3 }, + .{ .cp = 0xD63A, .start = 36738, .len = 3 }, + .{ .cp = 0xD63B, .start = 36741, .len = 3 }, + .{ .cp = 0xD63C, .start = 36744, .len = 3 }, + .{ .cp = 0xD63D, .start = 36747, .len = 3 }, + .{ .cp = 0xD63E, .start = 36750, .len = 3 }, + .{ .cp = 0xD63F, .start = 36753, .len = 3 }, + .{ .cp = 0xD640, .start = 36756, .len = 3 }, + .{ .cp = 0xD641, .start = 36759, .len = 3 }, + .{ .cp = 0xD642, .start = 36762, .len = 3 }, + .{ .cp = 0xD643, .start = 36765, .len = 3 }, + .{ .cp = 0xD644, .start = 36768, .len = 3 }, + .{ .cp = 0xD645, .start = 36771, .len = 3 }, + .{ .cp = 0xD646, .start = 36774, .len = 3 }, + .{ .cp = 0xD647, .start = 36777, .len = 3 }, + .{ .cp = 0xD648, .start = 36780, .len = 3 }, + .{ .cp = 0xD649, .start = 36783, .len = 3 }, + .{ .cp = 0xD64A, .start = 36786, .len = 3 }, + .{ .cp = 0xD64B, .start = 36789, .len = 3 }, + .{ .cp = 0xD64C, .start = 36792, .len = 3 }, + .{ .cp = 0xD64D, .start = 36795, .len = 3 }, + .{ .cp = 0xD64E, .start = 36798, .len = 3 }, + .{ .cp = 0xD64F, .start = 36801, .len = 3 }, + .{ .cp = 0xD650, .start = 36804, .len = 3 }, + .{ .cp = 0xD651, .start = 36807, .len = 3 }, + .{ .cp = 0xD652, .start = 36810, .len = 3 }, + .{ .cp = 0xD653, .start = 36813, .len = 3 }, + .{ .cp = 0xD654, .start = 36816, .len = 2 }, + .{ .cp = 0xD655, .start = 36818, .len = 3 }, + .{ .cp = 0xD656, .start = 36821, .len = 3 }, + .{ .cp = 0xD657, .start = 36824, .len = 3 }, + .{ .cp = 0xD658, .start = 36827, .len = 3 }, + .{ .cp = 0xD659, .start = 36830, .len = 3 }, + .{ .cp = 0xD65A, .start = 36833, .len = 3 }, + .{ .cp = 0xD65B, .start = 36836, .len = 3 }, + .{ .cp = 0xD65C, .start = 36839, .len = 3 }, + .{ .cp = 0xD65D, .start = 36842, .len = 3 }, + .{ .cp = 0xD65E, .start = 36845, .len = 3 }, + .{ .cp = 0xD65F, .start = 36848, .len = 3 }, + .{ .cp = 0xD660, .start = 36851, .len = 3 }, + .{ .cp = 0xD661, .start = 36854, .len = 3 }, + .{ .cp = 0xD662, .start = 36857, .len = 3 }, + .{ .cp = 0xD663, .start = 36860, .len = 3 }, + .{ .cp = 0xD664, .start = 36863, .len = 3 }, + .{ .cp = 0xD665, .start = 36866, .len = 3 }, + .{ .cp = 0xD666, .start = 36869, .len = 3 }, + .{ .cp = 0xD667, .start = 36872, .len = 3 }, + .{ .cp = 0xD668, .start = 36875, .len = 3 }, + .{ .cp = 0xD669, .start = 36878, .len = 3 }, + .{ .cp = 0xD66A, .start = 36881, .len = 3 }, + .{ .cp = 0xD66B, .start = 36884, .len = 3 }, + .{ .cp = 0xD66C, .start = 36887, .len = 3 }, + .{ .cp = 0xD66D, .start = 36890, .len = 3 }, + .{ .cp = 0xD66E, .start = 36893, .len = 3 }, + .{ .cp = 0xD66F, .start = 36896, .len = 3 }, + .{ .cp = 0xD670, .start = 36899, .len = 2 }, + .{ .cp = 0xD671, .start = 36901, .len = 3 }, + .{ .cp = 0xD672, .start = 36904, .len = 3 }, + .{ .cp = 0xD673, .start = 36907, .len = 3 }, + .{ .cp = 0xD674, .start = 36910, .len = 3 }, + .{ .cp = 0xD675, .start = 36913, .len = 3 }, + .{ .cp = 0xD676, .start = 36916, .len = 3 }, + .{ .cp = 0xD677, .start = 36919, .len = 3 }, + .{ .cp = 0xD678, .start = 36922, .len = 3 }, + .{ .cp = 0xD679, .start = 36925, .len = 3 }, + .{ .cp = 0xD67A, .start = 36928, .len = 3 }, + .{ .cp = 0xD67B, .start = 36931, .len = 3 }, + .{ .cp = 0xD67C, .start = 36934, .len = 3 }, + .{ .cp = 0xD67D, .start = 36937, .len = 3 }, + .{ .cp = 0xD67E, .start = 36940, .len = 3 }, + .{ .cp = 0xD67F, .start = 36943, .len = 3 }, + .{ .cp = 0xD680, .start = 36946, .len = 3 }, + .{ .cp = 0xD681, .start = 36949, .len = 3 }, + .{ .cp = 0xD682, .start = 36952, .len = 3 }, + .{ .cp = 0xD683, .start = 36955, .len = 3 }, + .{ .cp = 0xD684, .start = 36958, .len = 3 }, + .{ .cp = 0xD685, .start = 36961, .len = 3 }, + .{ .cp = 0xD686, .start = 36964, .len = 3 }, + .{ .cp = 0xD687, .start = 36967, .len = 3 }, + .{ .cp = 0xD688, .start = 36970, .len = 3 }, + .{ .cp = 0xD689, .start = 36973, .len = 3 }, + .{ .cp = 0xD68A, .start = 36976, .len = 3 }, + .{ .cp = 0xD68B, .start = 36979, .len = 3 }, + .{ .cp = 0xD68C, .start = 36982, .len = 2 }, + .{ .cp = 0xD68D, .start = 36984, .len = 3 }, + .{ .cp = 0xD68E, .start = 36987, .len = 3 }, + .{ .cp = 0xD68F, .start = 36990, .len = 3 }, + .{ .cp = 0xD690, .start = 36993, .len = 3 }, + .{ .cp = 0xD691, .start = 36996, .len = 3 }, + .{ .cp = 0xD692, .start = 36999, .len = 3 }, + .{ .cp = 0xD693, .start = 37002, .len = 3 }, + .{ .cp = 0xD694, .start = 37005, .len = 3 }, + .{ .cp = 0xD695, .start = 37008, .len = 3 }, + .{ .cp = 0xD696, .start = 37011, .len = 3 }, + .{ .cp = 0xD697, .start = 37014, .len = 3 }, + .{ .cp = 0xD698, .start = 37017, .len = 3 }, + .{ .cp = 0xD699, .start = 37020, .len = 3 }, + .{ .cp = 0xD69A, .start = 37023, .len = 3 }, + .{ .cp = 0xD69B, .start = 37026, .len = 3 }, + .{ .cp = 0xD69C, .start = 37029, .len = 3 }, + .{ .cp = 0xD69D, .start = 37032, .len = 3 }, + .{ .cp = 0xD69E, .start = 37035, .len = 3 }, + .{ .cp = 0xD69F, .start = 37038, .len = 3 }, + .{ .cp = 0xD6A0, .start = 37041, .len = 3 }, + .{ .cp = 0xD6A1, .start = 37044, .len = 3 }, + .{ .cp = 0xD6A2, .start = 37047, .len = 3 }, + .{ .cp = 0xD6A3, .start = 37050, .len = 3 }, + .{ .cp = 0xD6A4, .start = 37053, .len = 3 }, + .{ .cp = 0xD6A5, .start = 37056, .len = 3 }, + .{ .cp = 0xD6A6, .start = 37059, .len = 3 }, + .{ .cp = 0xD6A7, .start = 37062, .len = 3 }, + .{ .cp = 0xD6A8, .start = 37065, .len = 2 }, + .{ .cp = 0xD6A9, .start = 37067, .len = 3 }, + .{ .cp = 0xD6AA, .start = 37070, .len = 3 }, + .{ .cp = 0xD6AB, .start = 37073, .len = 3 }, + .{ .cp = 0xD6AC, .start = 37076, .len = 3 }, + .{ .cp = 0xD6AD, .start = 37079, .len = 3 }, + .{ .cp = 0xD6AE, .start = 37082, .len = 3 }, + .{ .cp = 0xD6AF, .start = 37085, .len = 3 }, + .{ .cp = 0xD6B0, .start = 37088, .len = 3 }, + .{ .cp = 0xD6B1, .start = 37091, .len = 3 }, + .{ .cp = 0xD6B2, .start = 37094, .len = 3 }, + .{ .cp = 0xD6B3, .start = 37097, .len = 3 }, + .{ .cp = 0xD6B4, .start = 37100, .len = 3 }, + .{ .cp = 0xD6B5, .start = 37103, .len = 3 }, + .{ .cp = 0xD6B6, .start = 37106, .len = 3 }, + .{ .cp = 0xD6B7, .start = 37109, .len = 3 }, + .{ .cp = 0xD6B8, .start = 37112, .len = 3 }, + .{ .cp = 0xD6B9, .start = 37115, .len = 3 }, + .{ .cp = 0xD6BA, .start = 37118, .len = 3 }, + .{ .cp = 0xD6BB, .start = 37121, .len = 3 }, + .{ .cp = 0xD6BC, .start = 37124, .len = 3 }, + .{ .cp = 0xD6BD, .start = 37127, .len = 3 }, + .{ .cp = 0xD6BE, .start = 37130, .len = 3 }, + .{ .cp = 0xD6BF, .start = 37133, .len = 3 }, + .{ .cp = 0xD6C0, .start = 37136, .len = 3 }, + .{ .cp = 0xD6C1, .start = 37139, .len = 3 }, + .{ .cp = 0xD6C2, .start = 37142, .len = 3 }, + .{ .cp = 0xD6C3, .start = 37145, .len = 3 }, + .{ .cp = 0xD6C4, .start = 37148, .len = 2 }, + .{ .cp = 0xD6C5, .start = 37150, .len = 3 }, + .{ .cp = 0xD6C6, .start = 37153, .len = 3 }, + .{ .cp = 0xD6C7, .start = 37156, .len = 3 }, + .{ .cp = 0xD6C8, .start = 37159, .len = 3 }, + .{ .cp = 0xD6C9, .start = 37162, .len = 3 }, + .{ .cp = 0xD6CA, .start = 37165, .len = 3 }, + .{ .cp = 0xD6CB, .start = 37168, .len = 3 }, + .{ .cp = 0xD6CC, .start = 37171, .len = 3 }, + .{ .cp = 0xD6CD, .start = 37174, .len = 3 }, + .{ .cp = 0xD6CE, .start = 37177, .len = 3 }, + .{ .cp = 0xD6CF, .start = 37180, .len = 3 }, + .{ .cp = 0xD6D0, .start = 37183, .len = 3 }, + .{ .cp = 0xD6D1, .start = 37186, .len = 3 }, + .{ .cp = 0xD6D2, .start = 37189, .len = 3 }, + .{ .cp = 0xD6D3, .start = 37192, .len = 3 }, + .{ .cp = 0xD6D4, .start = 37195, .len = 3 }, + .{ .cp = 0xD6D5, .start = 37198, .len = 3 }, + .{ .cp = 0xD6D6, .start = 37201, .len = 3 }, + .{ .cp = 0xD6D7, .start = 37204, .len = 3 }, + .{ .cp = 0xD6D8, .start = 37207, .len = 3 }, + .{ .cp = 0xD6D9, .start = 37210, .len = 3 }, + .{ .cp = 0xD6DA, .start = 37213, .len = 3 }, + .{ .cp = 0xD6DB, .start = 37216, .len = 3 }, + .{ .cp = 0xD6DC, .start = 37219, .len = 3 }, + .{ .cp = 0xD6DD, .start = 37222, .len = 3 }, + .{ .cp = 0xD6DE, .start = 37225, .len = 3 }, + .{ .cp = 0xD6DF, .start = 37228, .len = 3 }, + .{ .cp = 0xD6E0, .start = 37231, .len = 2 }, + .{ .cp = 0xD6E1, .start = 37233, .len = 3 }, + .{ .cp = 0xD6E2, .start = 37236, .len = 3 }, + .{ .cp = 0xD6E3, .start = 37239, .len = 3 }, + .{ .cp = 0xD6E4, .start = 37242, .len = 3 }, + .{ .cp = 0xD6E5, .start = 37245, .len = 3 }, + .{ .cp = 0xD6E6, .start = 37248, .len = 3 }, + .{ .cp = 0xD6E7, .start = 37251, .len = 3 }, + .{ .cp = 0xD6E8, .start = 37254, .len = 3 }, + .{ .cp = 0xD6E9, .start = 37257, .len = 3 }, + .{ .cp = 0xD6EA, .start = 37260, .len = 3 }, + .{ .cp = 0xD6EB, .start = 37263, .len = 3 }, + .{ .cp = 0xD6EC, .start = 37266, .len = 3 }, + .{ .cp = 0xD6ED, .start = 37269, .len = 3 }, + .{ .cp = 0xD6EE, .start = 37272, .len = 3 }, + .{ .cp = 0xD6EF, .start = 37275, .len = 3 }, + .{ .cp = 0xD6F0, .start = 37278, .len = 3 }, + .{ .cp = 0xD6F1, .start = 37281, .len = 3 }, + .{ .cp = 0xD6F2, .start = 37284, .len = 3 }, + .{ .cp = 0xD6F3, .start = 37287, .len = 3 }, + .{ .cp = 0xD6F4, .start = 37290, .len = 3 }, + .{ .cp = 0xD6F5, .start = 37293, .len = 3 }, + .{ .cp = 0xD6F6, .start = 37296, .len = 3 }, + .{ .cp = 0xD6F7, .start = 37299, .len = 3 }, + .{ .cp = 0xD6F8, .start = 37302, .len = 3 }, + .{ .cp = 0xD6F9, .start = 37305, .len = 3 }, + .{ .cp = 0xD6FA, .start = 37308, .len = 3 }, + .{ .cp = 0xD6FB, .start = 37311, .len = 3 }, + .{ .cp = 0xD6FC, .start = 37314, .len = 2 }, + .{ .cp = 0xD6FD, .start = 37316, .len = 3 }, + .{ .cp = 0xD6FE, .start = 37319, .len = 3 }, + .{ .cp = 0xD6FF, .start = 37322, .len = 3 }, + .{ .cp = 0xD700, .start = 37325, .len = 3 }, + .{ .cp = 0xD701, .start = 37328, .len = 3 }, + .{ .cp = 0xD702, .start = 37331, .len = 3 }, + .{ .cp = 0xD703, .start = 37334, .len = 3 }, + .{ .cp = 0xD704, .start = 37337, .len = 3 }, + .{ .cp = 0xD705, .start = 37340, .len = 3 }, + .{ .cp = 0xD706, .start = 37343, .len = 3 }, + .{ .cp = 0xD707, .start = 37346, .len = 3 }, + .{ .cp = 0xD708, .start = 37349, .len = 3 }, + .{ .cp = 0xD709, .start = 37352, .len = 3 }, + .{ .cp = 0xD70A, .start = 37355, .len = 3 }, + .{ .cp = 0xD70B, .start = 37358, .len = 3 }, + .{ .cp = 0xD70C, .start = 37361, .len = 3 }, + .{ .cp = 0xD70D, .start = 37364, .len = 3 }, + .{ .cp = 0xD70E, .start = 37367, .len = 3 }, + .{ .cp = 0xD70F, .start = 37370, .len = 3 }, + .{ .cp = 0xD710, .start = 37373, .len = 3 }, + .{ .cp = 0xD711, .start = 37376, .len = 3 }, + .{ .cp = 0xD712, .start = 37379, .len = 3 }, + .{ .cp = 0xD713, .start = 37382, .len = 3 }, + .{ .cp = 0xD714, .start = 37385, .len = 3 }, + .{ .cp = 0xD715, .start = 37388, .len = 3 }, + .{ .cp = 0xD716, .start = 37391, .len = 3 }, + .{ .cp = 0xD717, .start = 37394, .len = 3 }, + .{ .cp = 0xD718, .start = 37397, .len = 2 }, + .{ .cp = 0xD719, .start = 37399, .len = 3 }, + .{ .cp = 0xD71A, .start = 37402, .len = 3 }, + .{ .cp = 0xD71B, .start = 37405, .len = 3 }, + .{ .cp = 0xD71C, .start = 37408, .len = 3 }, + .{ .cp = 0xD71D, .start = 37411, .len = 3 }, + .{ .cp = 0xD71E, .start = 37414, .len = 3 }, + .{ .cp = 0xD71F, .start = 37417, .len = 3 }, + .{ .cp = 0xD720, .start = 37420, .len = 3 }, + .{ .cp = 0xD721, .start = 37423, .len = 3 }, + .{ .cp = 0xD722, .start = 37426, .len = 3 }, + .{ .cp = 0xD723, .start = 37429, .len = 3 }, + .{ .cp = 0xD724, .start = 37432, .len = 3 }, + .{ .cp = 0xD725, .start = 37435, .len = 3 }, + .{ .cp = 0xD726, .start = 37438, .len = 3 }, + .{ .cp = 0xD727, .start = 37441, .len = 3 }, + .{ .cp = 0xD728, .start = 37444, .len = 3 }, + .{ .cp = 0xD729, .start = 37447, .len = 3 }, + .{ .cp = 0xD72A, .start = 37450, .len = 3 }, + .{ .cp = 0xD72B, .start = 37453, .len = 3 }, + .{ .cp = 0xD72C, .start = 37456, .len = 3 }, + .{ .cp = 0xD72D, .start = 37459, .len = 3 }, + .{ .cp = 0xD72E, .start = 37462, .len = 3 }, + .{ .cp = 0xD72F, .start = 37465, .len = 3 }, + .{ .cp = 0xD730, .start = 37468, .len = 3 }, + .{ .cp = 0xD731, .start = 37471, .len = 3 }, + .{ .cp = 0xD732, .start = 37474, .len = 3 }, + .{ .cp = 0xD733, .start = 37477, .len = 3 }, + .{ .cp = 0xD734, .start = 37480, .len = 2 }, + .{ .cp = 0xD735, .start = 37482, .len = 3 }, + .{ .cp = 0xD736, .start = 37485, .len = 3 }, + .{ .cp = 0xD737, .start = 37488, .len = 3 }, + .{ .cp = 0xD738, .start = 37491, .len = 3 }, + .{ .cp = 0xD739, .start = 37494, .len = 3 }, + .{ .cp = 0xD73A, .start = 37497, .len = 3 }, + .{ .cp = 0xD73B, .start = 37500, .len = 3 }, + .{ .cp = 0xD73C, .start = 37503, .len = 3 }, + .{ .cp = 0xD73D, .start = 37506, .len = 3 }, + .{ .cp = 0xD73E, .start = 37509, .len = 3 }, + .{ .cp = 0xD73F, .start = 37512, .len = 3 }, + .{ .cp = 0xD740, .start = 37515, .len = 3 }, + .{ .cp = 0xD741, .start = 37518, .len = 3 }, + .{ .cp = 0xD742, .start = 37521, .len = 3 }, + .{ .cp = 0xD743, .start = 37524, .len = 3 }, + .{ .cp = 0xD744, .start = 37527, .len = 3 }, + .{ .cp = 0xD745, .start = 37530, .len = 3 }, + .{ .cp = 0xD746, .start = 37533, .len = 3 }, + .{ .cp = 0xD747, .start = 37536, .len = 3 }, + .{ .cp = 0xD748, .start = 37539, .len = 3 }, + .{ .cp = 0xD749, .start = 37542, .len = 3 }, + .{ .cp = 0xD74A, .start = 37545, .len = 3 }, + .{ .cp = 0xD74B, .start = 37548, .len = 3 }, + .{ .cp = 0xD74C, .start = 37551, .len = 3 }, + .{ .cp = 0xD74D, .start = 37554, .len = 3 }, + .{ .cp = 0xD74E, .start = 37557, .len = 3 }, + .{ .cp = 0xD74F, .start = 37560, .len = 3 }, + .{ .cp = 0xD750, .start = 37563, .len = 2 }, + .{ .cp = 0xD751, .start = 37565, .len = 3 }, + .{ .cp = 0xD752, .start = 37568, .len = 3 }, + .{ .cp = 0xD753, .start = 37571, .len = 3 }, + .{ .cp = 0xD754, .start = 37574, .len = 3 }, + .{ .cp = 0xD755, .start = 37577, .len = 3 }, + .{ .cp = 0xD756, .start = 37580, .len = 3 }, + .{ .cp = 0xD757, .start = 37583, .len = 3 }, + .{ .cp = 0xD758, .start = 37586, .len = 3 }, + .{ .cp = 0xD759, .start = 37589, .len = 3 }, + .{ .cp = 0xD75A, .start = 37592, .len = 3 }, + .{ .cp = 0xD75B, .start = 37595, .len = 3 }, + .{ .cp = 0xD75C, .start = 37598, .len = 3 }, + .{ .cp = 0xD75D, .start = 37601, .len = 3 }, + .{ .cp = 0xD75E, .start = 37604, .len = 3 }, + .{ .cp = 0xD75F, .start = 37607, .len = 3 }, + .{ .cp = 0xD760, .start = 37610, .len = 3 }, + .{ .cp = 0xD761, .start = 37613, .len = 3 }, + .{ .cp = 0xD762, .start = 37616, .len = 3 }, + .{ .cp = 0xD763, .start = 37619, .len = 3 }, + .{ .cp = 0xD764, .start = 37622, .len = 3 }, + .{ .cp = 0xD765, .start = 37625, .len = 3 }, + .{ .cp = 0xD766, .start = 37628, .len = 3 }, + .{ .cp = 0xD767, .start = 37631, .len = 3 }, + .{ .cp = 0xD768, .start = 37634, .len = 3 }, + .{ .cp = 0xD769, .start = 37637, .len = 3 }, + .{ .cp = 0xD76A, .start = 37640, .len = 3 }, + .{ .cp = 0xD76B, .start = 37643, .len = 3 }, + .{ .cp = 0xD76C, .start = 37646, .len = 2 }, + .{ .cp = 0xD76D, .start = 37648, .len = 3 }, + .{ .cp = 0xD76E, .start = 37651, .len = 3 }, + .{ .cp = 0xD76F, .start = 37654, .len = 3 }, + .{ .cp = 0xD770, .start = 37657, .len = 3 }, + .{ .cp = 0xD771, .start = 37660, .len = 3 }, + .{ .cp = 0xD772, .start = 37663, .len = 3 }, + .{ .cp = 0xD773, .start = 37666, .len = 3 }, + .{ .cp = 0xD774, .start = 37669, .len = 3 }, + .{ .cp = 0xD775, .start = 37672, .len = 3 }, + .{ .cp = 0xD776, .start = 37675, .len = 3 }, + .{ .cp = 0xD777, .start = 37678, .len = 3 }, + .{ .cp = 0xD778, .start = 37681, .len = 3 }, + .{ .cp = 0xD779, .start = 37684, .len = 3 }, + .{ .cp = 0xD77A, .start = 37687, .len = 3 }, + .{ .cp = 0xD77B, .start = 37690, .len = 3 }, + .{ .cp = 0xD77C, .start = 37693, .len = 3 }, + .{ .cp = 0xD77D, .start = 37696, .len = 3 }, + .{ .cp = 0xD77E, .start = 37699, .len = 3 }, + .{ .cp = 0xD77F, .start = 37702, .len = 3 }, + .{ .cp = 0xD780, .start = 37705, .len = 3 }, + .{ .cp = 0xD781, .start = 37708, .len = 3 }, + .{ .cp = 0xD782, .start = 37711, .len = 3 }, + .{ .cp = 0xD783, .start = 37714, .len = 3 }, + .{ .cp = 0xD784, .start = 37717, .len = 3 }, + .{ .cp = 0xD785, .start = 37720, .len = 3 }, + .{ .cp = 0xD786, .start = 37723, .len = 3 }, + .{ .cp = 0xD787, .start = 37726, .len = 3 }, + .{ .cp = 0xD788, .start = 37729, .len = 2 }, + .{ .cp = 0xD789, .start = 37731, .len = 3 }, + .{ .cp = 0xD78A, .start = 37734, .len = 3 }, + .{ .cp = 0xD78B, .start = 37737, .len = 3 }, + .{ .cp = 0xD78C, .start = 37740, .len = 3 }, + .{ .cp = 0xD78D, .start = 37743, .len = 3 }, + .{ .cp = 0xD78E, .start = 37746, .len = 3 }, + .{ .cp = 0xD78F, .start = 37749, .len = 3 }, + .{ .cp = 0xD790, .start = 37752, .len = 3 }, + .{ .cp = 0xD791, .start = 37755, .len = 3 }, + .{ .cp = 0xD792, .start = 37758, .len = 3 }, + .{ .cp = 0xD793, .start = 37761, .len = 3 }, + .{ .cp = 0xD794, .start = 37764, .len = 3 }, + .{ .cp = 0xD795, .start = 37767, .len = 3 }, + .{ .cp = 0xD796, .start = 37770, .len = 3 }, + .{ .cp = 0xD797, .start = 37773, .len = 3 }, + .{ .cp = 0xD798, .start = 37776, .len = 3 }, + .{ .cp = 0xD799, .start = 37779, .len = 3 }, + .{ .cp = 0xD79A, .start = 37782, .len = 3 }, + .{ .cp = 0xD79B, .start = 37785, .len = 3 }, + .{ .cp = 0xD79C, .start = 37788, .len = 3 }, + .{ .cp = 0xD79D, .start = 37791, .len = 3 }, + .{ .cp = 0xD79E, .start = 37794, .len = 3 }, + .{ .cp = 0xD79F, .start = 37797, .len = 3 }, + .{ .cp = 0xD7A0, .start = 37800, .len = 3 }, + .{ .cp = 0xD7A1, .start = 37803, .len = 3 }, + .{ .cp = 0xD7A2, .start = 37806, .len = 3 }, + .{ .cp = 0xD7A3, .start = 37809, .len = 3 }, + .{ .cp = 0xF900, .start = 37812, .len = 1 }, + .{ .cp = 0xF901, .start = 37813, .len = 1 }, + .{ .cp = 0xF902, .start = 37814, .len = 1 }, + .{ .cp = 0xF903, .start = 37815, .len = 1 }, + .{ .cp = 0xF904, .start = 37816, .len = 1 }, + .{ .cp = 0xF905, .start = 37817, .len = 1 }, + .{ .cp = 0xF906, .start = 37818, .len = 1 }, + .{ .cp = 0xF907, .start = 37819, .len = 1 }, + .{ .cp = 0xF908, .start = 37820, .len = 1 }, + .{ .cp = 0xF909, .start = 37821, .len = 1 }, + .{ .cp = 0xF90A, .start = 37822, .len = 1 }, + .{ .cp = 0xF90B, .start = 37823, .len = 1 }, + .{ .cp = 0xF90C, .start = 37824, .len = 1 }, + .{ .cp = 0xF90D, .start = 37825, .len = 1 }, + .{ .cp = 0xF90E, .start = 37826, .len = 1 }, + .{ .cp = 0xF90F, .start = 37827, .len = 1 }, + .{ .cp = 0xF910, .start = 37828, .len = 1 }, + .{ .cp = 0xF911, .start = 37829, .len = 1 }, + .{ .cp = 0xF912, .start = 37830, .len = 1 }, + .{ .cp = 0xF913, .start = 37831, .len = 1 }, + .{ .cp = 0xF914, .start = 37832, .len = 1 }, + .{ .cp = 0xF915, .start = 37833, .len = 1 }, + .{ .cp = 0xF916, .start = 37834, .len = 1 }, + .{ .cp = 0xF917, .start = 37835, .len = 1 }, + .{ .cp = 0xF918, .start = 37836, .len = 1 }, + .{ .cp = 0xF919, .start = 37837, .len = 1 }, + .{ .cp = 0xF91A, .start = 37838, .len = 1 }, + .{ .cp = 0xF91B, .start = 37839, .len = 1 }, + .{ .cp = 0xF91C, .start = 37840, .len = 1 }, + .{ .cp = 0xF91D, .start = 37841, .len = 1 }, + .{ .cp = 0xF91E, .start = 37842, .len = 1 }, + .{ .cp = 0xF91F, .start = 37843, .len = 1 }, + .{ .cp = 0xF920, .start = 37844, .len = 1 }, + .{ .cp = 0xF921, .start = 37845, .len = 1 }, + .{ .cp = 0xF922, .start = 37846, .len = 1 }, + .{ .cp = 0xF923, .start = 37847, .len = 1 }, + .{ .cp = 0xF924, .start = 37848, .len = 1 }, + .{ .cp = 0xF925, .start = 37849, .len = 1 }, + .{ .cp = 0xF926, .start = 37850, .len = 1 }, + .{ .cp = 0xF927, .start = 37851, .len = 1 }, + .{ .cp = 0xF928, .start = 37852, .len = 1 }, + .{ .cp = 0xF929, .start = 37853, .len = 1 }, + .{ .cp = 0xF92A, .start = 37854, .len = 1 }, + .{ .cp = 0xF92B, .start = 37855, .len = 1 }, + .{ .cp = 0xF92C, .start = 37856, .len = 1 }, + .{ .cp = 0xF92D, .start = 37857, .len = 1 }, + .{ .cp = 0xF92E, .start = 37858, .len = 1 }, + .{ .cp = 0xF92F, .start = 37859, .len = 1 }, + .{ .cp = 0xF930, .start = 37860, .len = 1 }, + .{ .cp = 0xF931, .start = 37861, .len = 1 }, + .{ .cp = 0xF932, .start = 37862, .len = 1 }, + .{ .cp = 0xF933, .start = 37863, .len = 1 }, + .{ .cp = 0xF934, .start = 37864, .len = 1 }, + .{ .cp = 0xF935, .start = 37865, .len = 1 }, + .{ .cp = 0xF936, .start = 37866, .len = 1 }, + .{ .cp = 0xF937, .start = 37867, .len = 1 }, + .{ .cp = 0xF938, .start = 37868, .len = 1 }, + .{ .cp = 0xF939, .start = 37869, .len = 1 }, + .{ .cp = 0xF93A, .start = 37870, .len = 1 }, + .{ .cp = 0xF93B, .start = 37871, .len = 1 }, + .{ .cp = 0xF93C, .start = 37872, .len = 1 }, + .{ .cp = 0xF93D, .start = 37873, .len = 1 }, + .{ .cp = 0xF93E, .start = 37874, .len = 1 }, + .{ .cp = 0xF93F, .start = 37875, .len = 1 }, + .{ .cp = 0xF940, .start = 37876, .len = 1 }, + .{ .cp = 0xF941, .start = 37877, .len = 1 }, + .{ .cp = 0xF942, .start = 37878, .len = 1 }, + .{ .cp = 0xF943, .start = 37879, .len = 1 }, + .{ .cp = 0xF944, .start = 37880, .len = 1 }, + .{ .cp = 0xF945, .start = 37881, .len = 1 }, + .{ .cp = 0xF946, .start = 37882, .len = 1 }, + .{ .cp = 0xF947, .start = 37883, .len = 1 }, + .{ .cp = 0xF948, .start = 37884, .len = 1 }, + .{ .cp = 0xF949, .start = 37885, .len = 1 }, + .{ .cp = 0xF94A, .start = 37886, .len = 1 }, + .{ .cp = 0xF94B, .start = 37887, .len = 1 }, + .{ .cp = 0xF94C, .start = 37888, .len = 1 }, + .{ .cp = 0xF94D, .start = 37889, .len = 1 }, + .{ .cp = 0xF94E, .start = 37890, .len = 1 }, + .{ .cp = 0xF94F, .start = 37891, .len = 1 }, + .{ .cp = 0xF950, .start = 37892, .len = 1 }, + .{ .cp = 0xF951, .start = 37893, .len = 1 }, + .{ .cp = 0xF952, .start = 37894, .len = 1 }, + .{ .cp = 0xF953, .start = 37895, .len = 1 }, + .{ .cp = 0xF954, .start = 37896, .len = 1 }, + .{ .cp = 0xF955, .start = 37897, .len = 1 }, + .{ .cp = 0xF956, .start = 37898, .len = 1 }, + .{ .cp = 0xF957, .start = 37899, .len = 1 }, + .{ .cp = 0xF958, .start = 37900, .len = 1 }, + .{ .cp = 0xF959, .start = 37901, .len = 1 }, + .{ .cp = 0xF95A, .start = 37902, .len = 1 }, + .{ .cp = 0xF95B, .start = 37903, .len = 1 }, + .{ .cp = 0xF95C, .start = 37904, .len = 1 }, + .{ .cp = 0xF95D, .start = 37905, .len = 1 }, + .{ .cp = 0xF95E, .start = 37906, .len = 1 }, + .{ .cp = 0xF95F, .start = 37907, .len = 1 }, + .{ .cp = 0xF960, .start = 37908, .len = 1 }, + .{ .cp = 0xF961, .start = 37909, .len = 1 }, + .{ .cp = 0xF962, .start = 37910, .len = 1 }, + .{ .cp = 0xF963, .start = 37911, .len = 1 }, + .{ .cp = 0xF964, .start = 37912, .len = 1 }, + .{ .cp = 0xF965, .start = 37913, .len = 1 }, + .{ .cp = 0xF966, .start = 37914, .len = 1 }, + .{ .cp = 0xF967, .start = 37915, .len = 1 }, + .{ .cp = 0xF968, .start = 37916, .len = 1 }, + .{ .cp = 0xF969, .start = 37917, .len = 1 }, + .{ .cp = 0xF96A, .start = 37918, .len = 1 }, + .{ .cp = 0xF96B, .start = 37919, .len = 1 }, + .{ .cp = 0xF96C, .start = 37920, .len = 1 }, + .{ .cp = 0xF96D, .start = 37921, .len = 1 }, + .{ .cp = 0xF96E, .start = 37922, .len = 1 }, + .{ .cp = 0xF96F, .start = 37923, .len = 1 }, + .{ .cp = 0xF970, .start = 37924, .len = 1 }, + .{ .cp = 0xF971, .start = 37925, .len = 1 }, + .{ .cp = 0xF972, .start = 37926, .len = 1 }, + .{ .cp = 0xF973, .start = 37927, .len = 1 }, + .{ .cp = 0xF974, .start = 37928, .len = 1 }, + .{ .cp = 0xF975, .start = 37929, .len = 1 }, + .{ .cp = 0xF976, .start = 37930, .len = 1 }, + .{ .cp = 0xF977, .start = 37931, .len = 1 }, + .{ .cp = 0xF978, .start = 37932, .len = 1 }, + .{ .cp = 0xF979, .start = 37933, .len = 1 }, + .{ .cp = 0xF97A, .start = 37934, .len = 1 }, + .{ .cp = 0xF97B, .start = 37935, .len = 1 }, + .{ .cp = 0xF97C, .start = 37936, .len = 1 }, + .{ .cp = 0xF97D, .start = 37937, .len = 1 }, + .{ .cp = 0xF97E, .start = 37938, .len = 1 }, + .{ .cp = 0xF97F, .start = 37939, .len = 1 }, + .{ .cp = 0xF980, .start = 37940, .len = 1 }, + .{ .cp = 0xF981, .start = 37941, .len = 1 }, + .{ .cp = 0xF982, .start = 37942, .len = 1 }, + .{ .cp = 0xF983, .start = 37943, .len = 1 }, + .{ .cp = 0xF984, .start = 37944, .len = 1 }, + .{ .cp = 0xF985, .start = 37945, .len = 1 }, + .{ .cp = 0xF986, .start = 37946, .len = 1 }, + .{ .cp = 0xF987, .start = 37947, .len = 1 }, + .{ .cp = 0xF988, .start = 37948, .len = 1 }, + .{ .cp = 0xF989, .start = 37949, .len = 1 }, + .{ .cp = 0xF98A, .start = 37950, .len = 1 }, + .{ .cp = 0xF98B, .start = 37951, .len = 1 }, + .{ .cp = 0xF98C, .start = 37952, .len = 1 }, + .{ .cp = 0xF98D, .start = 37953, .len = 1 }, + .{ .cp = 0xF98E, .start = 37954, .len = 1 }, + .{ .cp = 0xF98F, .start = 37955, .len = 1 }, + .{ .cp = 0xF990, .start = 37956, .len = 1 }, + .{ .cp = 0xF991, .start = 37957, .len = 1 }, + .{ .cp = 0xF992, .start = 37958, .len = 1 }, + .{ .cp = 0xF993, .start = 37959, .len = 1 }, + .{ .cp = 0xF994, .start = 37960, .len = 1 }, + .{ .cp = 0xF995, .start = 37961, .len = 1 }, + .{ .cp = 0xF996, .start = 37962, .len = 1 }, + .{ .cp = 0xF997, .start = 37963, .len = 1 }, + .{ .cp = 0xF998, .start = 37964, .len = 1 }, + .{ .cp = 0xF999, .start = 37965, .len = 1 }, + .{ .cp = 0xF99A, .start = 37966, .len = 1 }, + .{ .cp = 0xF99B, .start = 37967, .len = 1 }, + .{ .cp = 0xF99C, .start = 37968, .len = 1 }, + .{ .cp = 0xF99D, .start = 37969, .len = 1 }, + .{ .cp = 0xF99E, .start = 37970, .len = 1 }, + .{ .cp = 0xF99F, .start = 37971, .len = 1 }, + .{ .cp = 0xF9A0, .start = 37972, .len = 1 }, + .{ .cp = 0xF9A1, .start = 37973, .len = 1 }, + .{ .cp = 0xF9A2, .start = 37974, .len = 1 }, + .{ .cp = 0xF9A3, .start = 37975, .len = 1 }, + .{ .cp = 0xF9A4, .start = 37976, .len = 1 }, + .{ .cp = 0xF9A5, .start = 37977, .len = 1 }, + .{ .cp = 0xF9A6, .start = 37978, .len = 1 }, + .{ .cp = 0xF9A7, .start = 37979, .len = 1 }, + .{ .cp = 0xF9A8, .start = 37980, .len = 1 }, + .{ .cp = 0xF9A9, .start = 37981, .len = 1 }, + .{ .cp = 0xF9AA, .start = 37982, .len = 1 }, + .{ .cp = 0xF9AB, .start = 37983, .len = 1 }, + .{ .cp = 0xF9AC, .start = 37984, .len = 1 }, + .{ .cp = 0xF9AD, .start = 37985, .len = 1 }, + .{ .cp = 0xF9AE, .start = 37986, .len = 1 }, + .{ .cp = 0xF9AF, .start = 37987, .len = 1 }, + .{ .cp = 0xF9B0, .start = 37988, .len = 1 }, + .{ .cp = 0xF9B1, .start = 37989, .len = 1 }, + .{ .cp = 0xF9B2, .start = 37990, .len = 1 }, + .{ .cp = 0xF9B3, .start = 37991, .len = 1 }, + .{ .cp = 0xF9B4, .start = 37992, .len = 1 }, + .{ .cp = 0xF9B5, .start = 37993, .len = 1 }, + .{ .cp = 0xF9B6, .start = 37994, .len = 1 }, + .{ .cp = 0xF9B7, .start = 37995, .len = 1 }, + .{ .cp = 0xF9B8, .start = 37996, .len = 1 }, + .{ .cp = 0xF9B9, .start = 37997, .len = 1 }, + .{ .cp = 0xF9BA, .start = 37998, .len = 1 }, + .{ .cp = 0xF9BB, .start = 37999, .len = 1 }, + .{ .cp = 0xF9BC, .start = 38000, .len = 1 }, + .{ .cp = 0xF9BD, .start = 38001, .len = 1 }, + .{ .cp = 0xF9BE, .start = 38002, .len = 1 }, + .{ .cp = 0xF9BF, .start = 38003, .len = 1 }, + .{ .cp = 0xF9C0, .start = 38004, .len = 1 }, + .{ .cp = 0xF9C1, .start = 38005, .len = 1 }, + .{ .cp = 0xF9C2, .start = 38006, .len = 1 }, + .{ .cp = 0xF9C3, .start = 38007, .len = 1 }, + .{ .cp = 0xF9C4, .start = 38008, .len = 1 }, + .{ .cp = 0xF9C5, .start = 38009, .len = 1 }, + .{ .cp = 0xF9C6, .start = 38010, .len = 1 }, + .{ .cp = 0xF9C7, .start = 38011, .len = 1 }, + .{ .cp = 0xF9C8, .start = 38012, .len = 1 }, + .{ .cp = 0xF9C9, .start = 38013, .len = 1 }, + .{ .cp = 0xF9CA, .start = 38014, .len = 1 }, + .{ .cp = 0xF9CB, .start = 38015, .len = 1 }, + .{ .cp = 0xF9CC, .start = 38016, .len = 1 }, + .{ .cp = 0xF9CD, .start = 38017, .len = 1 }, + .{ .cp = 0xF9CE, .start = 38018, .len = 1 }, + .{ .cp = 0xF9CF, .start = 38019, .len = 1 }, + .{ .cp = 0xF9D0, .start = 38020, .len = 1 }, + .{ .cp = 0xF9D1, .start = 38021, .len = 1 }, + .{ .cp = 0xF9D2, .start = 38022, .len = 1 }, + .{ .cp = 0xF9D3, .start = 38023, .len = 1 }, + .{ .cp = 0xF9D4, .start = 38024, .len = 1 }, + .{ .cp = 0xF9D5, .start = 38025, .len = 1 }, + .{ .cp = 0xF9D6, .start = 38026, .len = 1 }, + .{ .cp = 0xF9D7, .start = 38027, .len = 1 }, + .{ .cp = 0xF9D8, .start = 38028, .len = 1 }, + .{ .cp = 0xF9D9, .start = 38029, .len = 1 }, + .{ .cp = 0xF9DA, .start = 38030, .len = 1 }, + .{ .cp = 0xF9DB, .start = 38031, .len = 1 }, + .{ .cp = 0xF9DC, .start = 38032, .len = 1 }, + .{ .cp = 0xF9DD, .start = 38033, .len = 1 }, + .{ .cp = 0xF9DE, .start = 38034, .len = 1 }, + .{ .cp = 0xF9DF, .start = 38035, .len = 1 }, + .{ .cp = 0xF9E0, .start = 38036, .len = 1 }, + .{ .cp = 0xF9E1, .start = 38037, .len = 1 }, + .{ .cp = 0xF9E2, .start = 38038, .len = 1 }, + .{ .cp = 0xF9E3, .start = 38039, .len = 1 }, + .{ .cp = 0xF9E4, .start = 38040, .len = 1 }, + .{ .cp = 0xF9E5, .start = 38041, .len = 1 }, + .{ .cp = 0xF9E6, .start = 38042, .len = 1 }, + .{ .cp = 0xF9E7, .start = 38043, .len = 1 }, + .{ .cp = 0xF9E8, .start = 38044, .len = 1 }, + .{ .cp = 0xF9E9, .start = 38045, .len = 1 }, + .{ .cp = 0xF9EA, .start = 38046, .len = 1 }, + .{ .cp = 0xF9EB, .start = 38047, .len = 1 }, + .{ .cp = 0xF9EC, .start = 38048, .len = 1 }, + .{ .cp = 0xF9ED, .start = 38049, .len = 1 }, + .{ .cp = 0xF9EE, .start = 38050, .len = 1 }, + .{ .cp = 0xF9EF, .start = 38051, .len = 1 }, + .{ .cp = 0xF9F0, .start = 38052, .len = 1 }, + .{ .cp = 0xF9F1, .start = 38053, .len = 1 }, + .{ .cp = 0xF9F2, .start = 38054, .len = 1 }, + .{ .cp = 0xF9F3, .start = 38055, .len = 1 }, + .{ .cp = 0xF9F4, .start = 38056, .len = 1 }, + .{ .cp = 0xF9F5, .start = 38057, .len = 1 }, + .{ .cp = 0xF9F6, .start = 38058, .len = 1 }, + .{ .cp = 0xF9F7, .start = 38059, .len = 1 }, + .{ .cp = 0xF9F8, .start = 38060, .len = 1 }, + .{ .cp = 0xF9F9, .start = 38061, .len = 1 }, + .{ .cp = 0xF9FA, .start = 38062, .len = 1 }, + .{ .cp = 0xF9FB, .start = 38063, .len = 1 }, + .{ .cp = 0xF9FC, .start = 38064, .len = 1 }, + .{ .cp = 0xF9FD, .start = 38065, .len = 1 }, + .{ .cp = 0xF9FE, .start = 38066, .len = 1 }, + .{ .cp = 0xF9FF, .start = 38067, .len = 1 }, + .{ .cp = 0xFA00, .start = 38068, .len = 1 }, + .{ .cp = 0xFA01, .start = 38069, .len = 1 }, + .{ .cp = 0xFA02, .start = 38070, .len = 1 }, + .{ .cp = 0xFA03, .start = 38071, .len = 1 }, + .{ .cp = 0xFA04, .start = 38072, .len = 1 }, + .{ .cp = 0xFA05, .start = 38073, .len = 1 }, + .{ .cp = 0xFA06, .start = 38074, .len = 1 }, + .{ .cp = 0xFA07, .start = 38075, .len = 1 }, + .{ .cp = 0xFA08, .start = 38076, .len = 1 }, + .{ .cp = 0xFA09, .start = 38077, .len = 1 }, + .{ .cp = 0xFA0A, .start = 38078, .len = 1 }, + .{ .cp = 0xFA0B, .start = 38079, .len = 1 }, + .{ .cp = 0xFA0C, .start = 38080, .len = 1 }, + .{ .cp = 0xFA0D, .start = 38081, .len = 1 }, + .{ .cp = 0xFA10, .start = 38082, .len = 1 }, + .{ .cp = 0xFA12, .start = 38083, .len = 1 }, + .{ .cp = 0xFA15, .start = 38084, .len = 1 }, + .{ .cp = 0xFA16, .start = 38085, .len = 1 }, + .{ .cp = 0xFA17, .start = 38086, .len = 1 }, + .{ .cp = 0xFA18, .start = 38087, .len = 1 }, + .{ .cp = 0xFA19, .start = 38088, .len = 1 }, + .{ .cp = 0xFA1A, .start = 38089, .len = 1 }, + .{ .cp = 0xFA1B, .start = 38090, .len = 1 }, + .{ .cp = 0xFA1C, .start = 38091, .len = 1 }, + .{ .cp = 0xFA1D, .start = 38092, .len = 1 }, + .{ .cp = 0xFA1E, .start = 38093, .len = 1 }, + .{ .cp = 0xFA20, .start = 38094, .len = 1 }, + .{ .cp = 0xFA22, .start = 38095, .len = 1 }, + .{ .cp = 0xFA25, .start = 38096, .len = 1 }, + .{ .cp = 0xFA26, .start = 38097, .len = 1 }, + .{ .cp = 0xFA2A, .start = 38098, .len = 1 }, + .{ .cp = 0xFA2B, .start = 38099, .len = 1 }, + .{ .cp = 0xFA2C, .start = 38100, .len = 1 }, + .{ .cp = 0xFA2D, .start = 38101, .len = 1 }, + .{ .cp = 0xFA2E, .start = 38102, .len = 1 }, + .{ .cp = 0xFA2F, .start = 38103, .len = 1 }, + .{ .cp = 0xFA30, .start = 38104, .len = 1 }, + .{ .cp = 0xFA31, .start = 38105, .len = 1 }, + .{ .cp = 0xFA32, .start = 38106, .len = 1 }, + .{ .cp = 0xFA33, .start = 38107, .len = 1 }, + .{ .cp = 0xFA34, .start = 38108, .len = 1 }, + .{ .cp = 0xFA35, .start = 38109, .len = 1 }, + .{ .cp = 0xFA36, .start = 38110, .len = 1 }, + .{ .cp = 0xFA37, .start = 38111, .len = 1 }, + .{ .cp = 0xFA38, .start = 38112, .len = 1 }, + .{ .cp = 0xFA39, .start = 38113, .len = 1 }, + .{ .cp = 0xFA3A, .start = 38114, .len = 1 }, + .{ .cp = 0xFA3B, .start = 38115, .len = 1 }, + .{ .cp = 0xFA3C, .start = 38116, .len = 1 }, + .{ .cp = 0xFA3D, .start = 38117, .len = 1 }, + .{ .cp = 0xFA3E, .start = 38118, .len = 1 }, + .{ .cp = 0xFA3F, .start = 38119, .len = 1 }, + .{ .cp = 0xFA40, .start = 38120, .len = 1 }, + .{ .cp = 0xFA41, .start = 38121, .len = 1 }, + .{ .cp = 0xFA42, .start = 38122, .len = 1 }, + .{ .cp = 0xFA43, .start = 38123, .len = 1 }, + .{ .cp = 0xFA44, .start = 38124, .len = 1 }, + .{ .cp = 0xFA45, .start = 38125, .len = 1 }, + .{ .cp = 0xFA46, .start = 38126, .len = 1 }, + .{ .cp = 0xFA47, .start = 38127, .len = 1 }, + .{ .cp = 0xFA48, .start = 38128, .len = 1 }, + .{ .cp = 0xFA49, .start = 38129, .len = 1 }, + .{ .cp = 0xFA4A, .start = 38130, .len = 1 }, + .{ .cp = 0xFA4B, .start = 38131, .len = 1 }, + .{ .cp = 0xFA4C, .start = 38132, .len = 1 }, + .{ .cp = 0xFA4D, .start = 38133, .len = 1 }, + .{ .cp = 0xFA4E, .start = 38134, .len = 1 }, + .{ .cp = 0xFA4F, .start = 38135, .len = 1 }, + .{ .cp = 0xFA50, .start = 38136, .len = 1 }, + .{ .cp = 0xFA51, .start = 38137, .len = 1 }, + .{ .cp = 0xFA52, .start = 38138, .len = 1 }, + .{ .cp = 0xFA53, .start = 38139, .len = 1 }, + .{ .cp = 0xFA54, .start = 38140, .len = 1 }, + .{ .cp = 0xFA55, .start = 38141, .len = 1 }, + .{ .cp = 0xFA56, .start = 38142, .len = 1 }, + .{ .cp = 0xFA57, .start = 38143, .len = 1 }, + .{ .cp = 0xFA58, .start = 38144, .len = 1 }, + .{ .cp = 0xFA59, .start = 38145, .len = 1 }, + .{ .cp = 0xFA5A, .start = 38146, .len = 1 }, + .{ .cp = 0xFA5B, .start = 38147, .len = 1 }, + .{ .cp = 0xFA5C, .start = 38148, .len = 1 }, + .{ .cp = 0xFA5D, .start = 38149, .len = 1 }, + .{ .cp = 0xFA5E, .start = 38150, .len = 1 }, + .{ .cp = 0xFA5F, .start = 38151, .len = 1 }, + .{ .cp = 0xFA60, .start = 38152, .len = 1 }, + .{ .cp = 0xFA61, .start = 38153, .len = 1 }, + .{ .cp = 0xFA62, .start = 38154, .len = 1 }, + .{ .cp = 0xFA63, .start = 38155, .len = 1 }, + .{ .cp = 0xFA64, .start = 38156, .len = 1 }, + .{ .cp = 0xFA65, .start = 38157, .len = 1 }, + .{ .cp = 0xFA66, .start = 38158, .len = 1 }, + .{ .cp = 0xFA67, .start = 38159, .len = 1 }, + .{ .cp = 0xFA68, .start = 38160, .len = 1 }, + .{ .cp = 0xFA69, .start = 38161, .len = 1 }, + .{ .cp = 0xFA6A, .start = 38162, .len = 1 }, + .{ .cp = 0xFA6B, .start = 38163, .len = 1 }, + .{ .cp = 0xFA6C, .start = 38164, .len = 1 }, + .{ .cp = 0xFA6D, .start = 38165, .len = 1 }, + .{ .cp = 0xFA70, .start = 38166, .len = 1 }, + .{ .cp = 0xFA71, .start = 38167, .len = 1 }, + .{ .cp = 0xFA72, .start = 38168, .len = 1 }, + .{ .cp = 0xFA73, .start = 38169, .len = 1 }, + .{ .cp = 0xFA74, .start = 38170, .len = 1 }, + .{ .cp = 0xFA75, .start = 38171, .len = 1 }, + .{ .cp = 0xFA76, .start = 38172, .len = 1 }, + .{ .cp = 0xFA77, .start = 38173, .len = 1 }, + .{ .cp = 0xFA78, .start = 38174, .len = 1 }, + .{ .cp = 0xFA79, .start = 38175, .len = 1 }, + .{ .cp = 0xFA7A, .start = 38176, .len = 1 }, + .{ .cp = 0xFA7B, .start = 38177, .len = 1 }, + .{ .cp = 0xFA7C, .start = 38178, .len = 1 }, + .{ .cp = 0xFA7D, .start = 38179, .len = 1 }, + .{ .cp = 0xFA7E, .start = 38180, .len = 1 }, + .{ .cp = 0xFA7F, .start = 38181, .len = 1 }, + .{ .cp = 0xFA80, .start = 38182, .len = 1 }, + .{ .cp = 0xFA81, .start = 38183, .len = 1 }, + .{ .cp = 0xFA82, .start = 38184, .len = 1 }, + .{ .cp = 0xFA83, .start = 38185, .len = 1 }, + .{ .cp = 0xFA84, .start = 38186, .len = 1 }, + .{ .cp = 0xFA85, .start = 38187, .len = 1 }, + .{ .cp = 0xFA86, .start = 38188, .len = 1 }, + .{ .cp = 0xFA87, .start = 38189, .len = 1 }, + .{ .cp = 0xFA88, .start = 38190, .len = 1 }, + .{ .cp = 0xFA89, .start = 38191, .len = 1 }, + .{ .cp = 0xFA8A, .start = 38192, .len = 1 }, + .{ .cp = 0xFA8B, .start = 38193, .len = 1 }, + .{ .cp = 0xFA8C, .start = 38194, .len = 1 }, + .{ .cp = 0xFA8D, .start = 38195, .len = 1 }, + .{ .cp = 0xFA8E, .start = 38196, .len = 1 }, + .{ .cp = 0xFA8F, .start = 38197, .len = 1 }, + .{ .cp = 0xFA90, .start = 38198, .len = 1 }, + .{ .cp = 0xFA91, .start = 38199, .len = 1 }, + .{ .cp = 0xFA92, .start = 38200, .len = 1 }, + .{ .cp = 0xFA93, .start = 38201, .len = 1 }, + .{ .cp = 0xFA94, .start = 38202, .len = 1 }, + .{ .cp = 0xFA95, .start = 38203, .len = 1 }, + .{ .cp = 0xFA96, .start = 38204, .len = 1 }, + .{ .cp = 0xFA97, .start = 38205, .len = 1 }, + .{ .cp = 0xFA98, .start = 38206, .len = 1 }, + .{ .cp = 0xFA99, .start = 38207, .len = 1 }, + .{ .cp = 0xFA9A, .start = 38208, .len = 1 }, + .{ .cp = 0xFA9B, .start = 38209, .len = 1 }, + .{ .cp = 0xFA9C, .start = 38210, .len = 1 }, + .{ .cp = 0xFA9D, .start = 38211, .len = 1 }, + .{ .cp = 0xFA9E, .start = 38212, .len = 1 }, + .{ .cp = 0xFA9F, .start = 38213, .len = 1 }, + .{ .cp = 0xFAA0, .start = 38214, .len = 1 }, + .{ .cp = 0xFAA1, .start = 38215, .len = 1 }, + .{ .cp = 0xFAA2, .start = 38216, .len = 1 }, + .{ .cp = 0xFAA3, .start = 38217, .len = 1 }, + .{ .cp = 0xFAA4, .start = 38218, .len = 1 }, + .{ .cp = 0xFAA5, .start = 38219, .len = 1 }, + .{ .cp = 0xFAA6, .start = 38220, .len = 1 }, + .{ .cp = 0xFAA7, .start = 38221, .len = 1 }, + .{ .cp = 0xFAA8, .start = 38222, .len = 1 }, + .{ .cp = 0xFAA9, .start = 38223, .len = 1 }, + .{ .cp = 0xFAAA, .start = 38224, .len = 1 }, + .{ .cp = 0xFAAB, .start = 38225, .len = 1 }, + .{ .cp = 0xFAAC, .start = 38226, .len = 1 }, + .{ .cp = 0xFAAD, .start = 38227, .len = 1 }, + .{ .cp = 0xFAAE, .start = 38228, .len = 1 }, + .{ .cp = 0xFAAF, .start = 38229, .len = 1 }, + .{ .cp = 0xFAB0, .start = 38230, .len = 1 }, + .{ .cp = 0xFAB1, .start = 38231, .len = 1 }, + .{ .cp = 0xFAB2, .start = 38232, .len = 1 }, + .{ .cp = 0xFAB3, .start = 38233, .len = 1 }, + .{ .cp = 0xFAB4, .start = 38234, .len = 1 }, + .{ .cp = 0xFAB5, .start = 38235, .len = 1 }, + .{ .cp = 0xFAB6, .start = 38236, .len = 1 }, + .{ .cp = 0xFAB7, .start = 38237, .len = 1 }, + .{ .cp = 0xFAB8, .start = 38238, .len = 1 }, + .{ .cp = 0xFAB9, .start = 38239, .len = 1 }, + .{ .cp = 0xFABA, .start = 38240, .len = 1 }, + .{ .cp = 0xFABB, .start = 38241, .len = 1 }, + .{ .cp = 0xFABC, .start = 38242, .len = 1 }, + .{ .cp = 0xFABD, .start = 38243, .len = 1 }, + .{ .cp = 0xFABE, .start = 38244, .len = 1 }, + .{ .cp = 0xFABF, .start = 38245, .len = 1 }, + .{ .cp = 0xFAC0, .start = 38246, .len = 1 }, + .{ .cp = 0xFAC1, .start = 38247, .len = 1 }, + .{ .cp = 0xFAC2, .start = 38248, .len = 1 }, + .{ .cp = 0xFAC3, .start = 38249, .len = 1 }, + .{ .cp = 0xFAC4, .start = 38250, .len = 1 }, + .{ .cp = 0xFAC5, .start = 38251, .len = 1 }, + .{ .cp = 0xFAC6, .start = 38252, .len = 1 }, + .{ .cp = 0xFAC7, .start = 38253, .len = 1 }, + .{ .cp = 0xFAC8, .start = 38254, .len = 1 }, + .{ .cp = 0xFAC9, .start = 38255, .len = 1 }, + .{ .cp = 0xFACA, .start = 38256, .len = 1 }, + .{ .cp = 0xFACB, .start = 38257, .len = 1 }, + .{ .cp = 0xFACC, .start = 38258, .len = 1 }, + .{ .cp = 0xFACD, .start = 38259, .len = 1 }, + .{ .cp = 0xFACE, .start = 38260, .len = 1 }, + .{ .cp = 0xFACF, .start = 38261, .len = 1 }, + .{ .cp = 0xFAD0, .start = 38262, .len = 1 }, + .{ .cp = 0xFAD1, .start = 38263, .len = 1 }, + .{ .cp = 0xFAD2, .start = 38264, .len = 1 }, + .{ .cp = 0xFAD3, .start = 38265, .len = 1 }, + .{ .cp = 0xFAD4, .start = 38266, .len = 1 }, + .{ .cp = 0xFAD5, .start = 38267, .len = 1 }, + .{ .cp = 0xFAD6, .start = 38268, .len = 1 }, + .{ .cp = 0xFAD7, .start = 38269, .len = 1 }, + .{ .cp = 0xFAD8, .start = 38270, .len = 1 }, + .{ .cp = 0xFAD9, .start = 38271, .len = 1 }, + .{ .cp = 0xFB00, .start = 38272, .len = 2 }, + .{ .cp = 0xFB01, .start = 38274, .len = 2 }, + .{ .cp = 0xFB02, .start = 38276, .len = 2 }, + .{ .cp = 0xFB03, .start = 38278, .len = 3 }, + .{ .cp = 0xFB04, .start = 38281, .len = 3 }, + .{ .cp = 0xFB05, .start = 38284, .len = 2 }, + .{ .cp = 0xFB06, .start = 38286, .len = 2 }, + .{ .cp = 0xFB13, .start = 38288, .len = 2 }, + .{ .cp = 0xFB14, .start = 38290, .len = 2 }, + .{ .cp = 0xFB15, .start = 38292, .len = 2 }, + .{ .cp = 0xFB16, .start = 38294, .len = 2 }, + .{ .cp = 0xFB17, .start = 38296, .len = 2 }, + .{ .cp = 0xFB1D, .start = 38298, .len = 2 }, + .{ .cp = 0xFB1F, .start = 38300, .len = 2 }, + .{ .cp = 0xFB20, .start = 38302, .len = 1 }, + .{ .cp = 0xFB21, .start = 38303, .len = 1 }, + .{ .cp = 0xFB22, .start = 38304, .len = 1 }, + .{ .cp = 0xFB23, .start = 38305, .len = 1 }, + .{ .cp = 0xFB24, .start = 38306, .len = 1 }, + .{ .cp = 0xFB25, .start = 38307, .len = 1 }, + .{ .cp = 0xFB26, .start = 38308, .len = 1 }, + .{ .cp = 0xFB27, .start = 38309, .len = 1 }, + .{ .cp = 0xFB28, .start = 38310, .len = 1 }, + .{ .cp = 0xFB29, .start = 38311, .len = 1 }, + .{ .cp = 0xFB2A, .start = 38312, .len = 2 }, + .{ .cp = 0xFB2B, .start = 38314, .len = 2 }, + .{ .cp = 0xFB2C, .start = 38316, .len = 3 }, + .{ .cp = 0xFB2D, .start = 38319, .len = 3 }, + .{ .cp = 0xFB2E, .start = 38322, .len = 2 }, + .{ .cp = 0xFB2F, .start = 38324, .len = 2 }, + .{ .cp = 0xFB30, .start = 38326, .len = 2 }, + .{ .cp = 0xFB31, .start = 38328, .len = 2 }, + .{ .cp = 0xFB32, .start = 38330, .len = 2 }, + .{ .cp = 0xFB33, .start = 38332, .len = 2 }, + .{ .cp = 0xFB34, .start = 38334, .len = 2 }, + .{ .cp = 0xFB35, .start = 38336, .len = 2 }, + .{ .cp = 0xFB36, .start = 38338, .len = 2 }, + .{ .cp = 0xFB38, .start = 38340, .len = 2 }, + .{ .cp = 0xFB39, .start = 38342, .len = 2 }, + .{ .cp = 0xFB3A, .start = 38344, .len = 2 }, + .{ .cp = 0xFB3B, .start = 38346, .len = 2 }, + .{ .cp = 0xFB3C, .start = 38348, .len = 2 }, + .{ .cp = 0xFB3E, .start = 38350, .len = 2 }, + .{ .cp = 0xFB40, .start = 38352, .len = 2 }, + .{ .cp = 0xFB41, .start = 38354, .len = 2 }, + .{ .cp = 0xFB43, .start = 38356, .len = 2 }, + .{ .cp = 0xFB44, .start = 38358, .len = 2 }, + .{ .cp = 0xFB46, .start = 38360, .len = 2 }, + .{ .cp = 0xFB47, .start = 38362, .len = 2 }, + .{ .cp = 0xFB48, .start = 38364, .len = 2 }, + .{ .cp = 0xFB49, .start = 38366, .len = 2 }, + .{ .cp = 0xFB4A, .start = 38368, .len = 2 }, + .{ .cp = 0xFB4B, .start = 38370, .len = 2 }, + .{ .cp = 0xFB4C, .start = 38372, .len = 2 }, + .{ .cp = 0xFB4D, .start = 38374, .len = 2 }, + .{ .cp = 0xFB4E, .start = 38376, .len = 2 }, + .{ .cp = 0xFB4F, .start = 38378, .len = 2 }, + .{ .cp = 0xFB50, .start = 38380, .len = 1 }, + .{ .cp = 0xFB51, .start = 38381, .len = 1 }, + .{ .cp = 0xFB52, .start = 38382, .len = 1 }, + .{ .cp = 0xFB53, .start = 38383, .len = 1 }, + .{ .cp = 0xFB54, .start = 38384, .len = 1 }, + .{ .cp = 0xFB55, .start = 38385, .len = 1 }, + .{ .cp = 0xFB56, .start = 38386, .len = 1 }, + .{ .cp = 0xFB57, .start = 38387, .len = 1 }, + .{ .cp = 0xFB58, .start = 38388, .len = 1 }, + .{ .cp = 0xFB59, .start = 38389, .len = 1 }, + .{ .cp = 0xFB5A, .start = 38390, .len = 1 }, + .{ .cp = 0xFB5B, .start = 38391, .len = 1 }, + .{ .cp = 0xFB5C, .start = 38392, .len = 1 }, + .{ .cp = 0xFB5D, .start = 38393, .len = 1 }, + .{ .cp = 0xFB5E, .start = 38394, .len = 1 }, + .{ .cp = 0xFB5F, .start = 38395, .len = 1 }, + .{ .cp = 0xFB60, .start = 38396, .len = 1 }, + .{ .cp = 0xFB61, .start = 38397, .len = 1 }, + .{ .cp = 0xFB62, .start = 38398, .len = 1 }, + .{ .cp = 0xFB63, .start = 38399, .len = 1 }, + .{ .cp = 0xFB64, .start = 38400, .len = 1 }, + .{ .cp = 0xFB65, .start = 38401, .len = 1 }, + .{ .cp = 0xFB66, .start = 38402, .len = 1 }, + .{ .cp = 0xFB67, .start = 38403, .len = 1 }, + .{ .cp = 0xFB68, .start = 38404, .len = 1 }, + .{ .cp = 0xFB69, .start = 38405, .len = 1 }, + .{ .cp = 0xFB6A, .start = 38406, .len = 1 }, + .{ .cp = 0xFB6B, .start = 38407, .len = 1 }, + .{ .cp = 0xFB6C, .start = 38408, .len = 1 }, + .{ .cp = 0xFB6D, .start = 38409, .len = 1 }, + .{ .cp = 0xFB6E, .start = 38410, .len = 1 }, + .{ .cp = 0xFB6F, .start = 38411, .len = 1 }, + .{ .cp = 0xFB70, .start = 38412, .len = 1 }, + .{ .cp = 0xFB71, .start = 38413, .len = 1 }, + .{ .cp = 0xFB72, .start = 38414, .len = 1 }, + .{ .cp = 0xFB73, .start = 38415, .len = 1 }, + .{ .cp = 0xFB74, .start = 38416, .len = 1 }, + .{ .cp = 0xFB75, .start = 38417, .len = 1 }, + .{ .cp = 0xFB76, .start = 38418, .len = 1 }, + .{ .cp = 0xFB77, .start = 38419, .len = 1 }, + .{ .cp = 0xFB78, .start = 38420, .len = 1 }, + .{ .cp = 0xFB79, .start = 38421, .len = 1 }, + .{ .cp = 0xFB7A, .start = 38422, .len = 1 }, + .{ .cp = 0xFB7B, .start = 38423, .len = 1 }, + .{ .cp = 0xFB7C, .start = 38424, .len = 1 }, + .{ .cp = 0xFB7D, .start = 38425, .len = 1 }, + .{ .cp = 0xFB7E, .start = 38426, .len = 1 }, + .{ .cp = 0xFB7F, .start = 38427, .len = 1 }, + .{ .cp = 0xFB80, .start = 38428, .len = 1 }, + .{ .cp = 0xFB81, .start = 38429, .len = 1 }, + .{ .cp = 0xFB82, .start = 38430, .len = 1 }, + .{ .cp = 0xFB83, .start = 38431, .len = 1 }, + .{ .cp = 0xFB84, .start = 38432, .len = 1 }, + .{ .cp = 0xFB85, .start = 38433, .len = 1 }, + .{ .cp = 0xFB86, .start = 38434, .len = 1 }, + .{ .cp = 0xFB87, .start = 38435, .len = 1 }, + .{ .cp = 0xFB88, .start = 38436, .len = 1 }, + .{ .cp = 0xFB89, .start = 38437, .len = 1 }, + .{ .cp = 0xFB8A, .start = 38438, .len = 1 }, + .{ .cp = 0xFB8B, .start = 38439, .len = 1 }, + .{ .cp = 0xFB8C, .start = 38440, .len = 1 }, + .{ .cp = 0xFB8D, .start = 38441, .len = 1 }, + .{ .cp = 0xFB8E, .start = 38442, .len = 1 }, + .{ .cp = 0xFB8F, .start = 38443, .len = 1 }, + .{ .cp = 0xFB90, .start = 38444, .len = 1 }, + .{ .cp = 0xFB91, .start = 38445, .len = 1 }, + .{ .cp = 0xFB92, .start = 38446, .len = 1 }, + .{ .cp = 0xFB93, .start = 38447, .len = 1 }, + .{ .cp = 0xFB94, .start = 38448, .len = 1 }, + .{ .cp = 0xFB95, .start = 38449, .len = 1 }, + .{ .cp = 0xFB96, .start = 38450, .len = 1 }, + .{ .cp = 0xFB97, .start = 38451, .len = 1 }, + .{ .cp = 0xFB98, .start = 38452, .len = 1 }, + .{ .cp = 0xFB99, .start = 38453, .len = 1 }, + .{ .cp = 0xFB9A, .start = 38454, .len = 1 }, + .{ .cp = 0xFB9B, .start = 38455, .len = 1 }, + .{ .cp = 0xFB9C, .start = 38456, .len = 1 }, + .{ .cp = 0xFB9D, .start = 38457, .len = 1 }, + .{ .cp = 0xFB9E, .start = 38458, .len = 1 }, + .{ .cp = 0xFB9F, .start = 38459, .len = 1 }, + .{ .cp = 0xFBA0, .start = 38460, .len = 1 }, + .{ .cp = 0xFBA1, .start = 38461, .len = 1 }, + .{ .cp = 0xFBA2, .start = 38462, .len = 1 }, + .{ .cp = 0xFBA3, .start = 38463, .len = 1 }, + .{ .cp = 0xFBA4, .start = 38464, .len = 2 }, + .{ .cp = 0xFBA5, .start = 38466, .len = 2 }, + .{ .cp = 0xFBA6, .start = 38468, .len = 1 }, + .{ .cp = 0xFBA7, .start = 38469, .len = 1 }, + .{ .cp = 0xFBA8, .start = 38470, .len = 1 }, + .{ .cp = 0xFBA9, .start = 38471, .len = 1 }, + .{ .cp = 0xFBAA, .start = 38472, .len = 1 }, + .{ .cp = 0xFBAB, .start = 38473, .len = 1 }, + .{ .cp = 0xFBAC, .start = 38474, .len = 1 }, + .{ .cp = 0xFBAD, .start = 38475, .len = 1 }, + .{ .cp = 0xFBAE, .start = 38476, .len = 1 }, + .{ .cp = 0xFBAF, .start = 38477, .len = 1 }, + .{ .cp = 0xFBB0, .start = 38478, .len = 2 }, + .{ .cp = 0xFBB1, .start = 38480, .len = 2 }, + .{ .cp = 0xFBD3, .start = 38482, .len = 1 }, + .{ .cp = 0xFBD4, .start = 38483, .len = 1 }, + .{ .cp = 0xFBD5, .start = 38484, .len = 1 }, + .{ .cp = 0xFBD6, .start = 38485, .len = 1 }, + .{ .cp = 0xFBD7, .start = 38486, .len = 1 }, + .{ .cp = 0xFBD8, .start = 38487, .len = 1 }, + .{ .cp = 0xFBD9, .start = 38488, .len = 1 }, + .{ .cp = 0xFBDA, .start = 38489, .len = 1 }, + .{ .cp = 0xFBDB, .start = 38490, .len = 1 }, + .{ .cp = 0xFBDC, .start = 38491, .len = 1 }, + .{ .cp = 0xFBDD, .start = 38492, .len = 2 }, + .{ .cp = 0xFBDE, .start = 38494, .len = 1 }, + .{ .cp = 0xFBDF, .start = 38495, .len = 1 }, + .{ .cp = 0xFBE0, .start = 38496, .len = 1 }, + .{ .cp = 0xFBE1, .start = 38497, .len = 1 }, + .{ .cp = 0xFBE2, .start = 38498, .len = 1 }, + .{ .cp = 0xFBE3, .start = 38499, .len = 1 }, + .{ .cp = 0xFBE4, .start = 38500, .len = 1 }, + .{ .cp = 0xFBE5, .start = 38501, .len = 1 }, + .{ .cp = 0xFBE6, .start = 38502, .len = 1 }, + .{ .cp = 0xFBE7, .start = 38503, .len = 1 }, + .{ .cp = 0xFBE8, .start = 38504, .len = 1 }, + .{ .cp = 0xFBE9, .start = 38505, .len = 1 }, + .{ .cp = 0xFBEA, .start = 38506, .len = 3 }, + .{ .cp = 0xFBEB, .start = 38509, .len = 3 }, + .{ .cp = 0xFBEC, .start = 38512, .len = 3 }, + .{ .cp = 0xFBED, .start = 38515, .len = 3 }, + .{ .cp = 0xFBEE, .start = 38518, .len = 3 }, + .{ .cp = 0xFBEF, .start = 38521, .len = 3 }, + .{ .cp = 0xFBF0, .start = 38524, .len = 3 }, + .{ .cp = 0xFBF1, .start = 38527, .len = 3 }, + .{ .cp = 0xFBF2, .start = 38530, .len = 3 }, + .{ .cp = 0xFBF3, .start = 38533, .len = 3 }, + .{ .cp = 0xFBF4, .start = 38536, .len = 3 }, + .{ .cp = 0xFBF5, .start = 38539, .len = 3 }, + .{ .cp = 0xFBF6, .start = 38542, .len = 3 }, + .{ .cp = 0xFBF7, .start = 38545, .len = 3 }, + .{ .cp = 0xFBF8, .start = 38548, .len = 3 }, + .{ .cp = 0xFBF9, .start = 38551, .len = 3 }, + .{ .cp = 0xFBFA, .start = 38554, .len = 3 }, + .{ .cp = 0xFBFB, .start = 38557, .len = 3 }, + .{ .cp = 0xFBFC, .start = 38560, .len = 1 }, + .{ .cp = 0xFBFD, .start = 38561, .len = 1 }, + .{ .cp = 0xFBFE, .start = 38562, .len = 1 }, + .{ .cp = 0xFBFF, .start = 38563, .len = 1 }, + .{ .cp = 0xFC00, .start = 38564, .len = 3 }, + .{ .cp = 0xFC01, .start = 38567, .len = 3 }, + .{ .cp = 0xFC02, .start = 38570, .len = 3 }, + .{ .cp = 0xFC03, .start = 38573, .len = 3 }, + .{ .cp = 0xFC04, .start = 38576, .len = 3 }, + .{ .cp = 0xFC05, .start = 38579, .len = 2 }, + .{ .cp = 0xFC06, .start = 38581, .len = 2 }, + .{ .cp = 0xFC07, .start = 38583, .len = 2 }, + .{ .cp = 0xFC08, .start = 38585, .len = 2 }, + .{ .cp = 0xFC09, .start = 38587, .len = 2 }, + .{ .cp = 0xFC0A, .start = 38589, .len = 2 }, + .{ .cp = 0xFC0B, .start = 38591, .len = 2 }, + .{ .cp = 0xFC0C, .start = 38593, .len = 2 }, + .{ .cp = 0xFC0D, .start = 38595, .len = 2 }, + .{ .cp = 0xFC0E, .start = 38597, .len = 2 }, + .{ .cp = 0xFC0F, .start = 38599, .len = 2 }, + .{ .cp = 0xFC10, .start = 38601, .len = 2 }, + .{ .cp = 0xFC11, .start = 38603, .len = 2 }, + .{ .cp = 0xFC12, .start = 38605, .len = 2 }, + .{ .cp = 0xFC13, .start = 38607, .len = 2 }, + .{ .cp = 0xFC14, .start = 38609, .len = 2 }, + .{ .cp = 0xFC15, .start = 38611, .len = 2 }, + .{ .cp = 0xFC16, .start = 38613, .len = 2 }, + .{ .cp = 0xFC17, .start = 38615, .len = 2 }, + .{ .cp = 0xFC18, .start = 38617, .len = 2 }, + .{ .cp = 0xFC19, .start = 38619, .len = 2 }, + .{ .cp = 0xFC1A, .start = 38621, .len = 2 }, + .{ .cp = 0xFC1B, .start = 38623, .len = 2 }, + .{ .cp = 0xFC1C, .start = 38625, .len = 2 }, + .{ .cp = 0xFC1D, .start = 38627, .len = 2 }, + .{ .cp = 0xFC1E, .start = 38629, .len = 2 }, + .{ .cp = 0xFC1F, .start = 38631, .len = 2 }, + .{ .cp = 0xFC20, .start = 38633, .len = 2 }, + .{ .cp = 0xFC21, .start = 38635, .len = 2 }, + .{ .cp = 0xFC22, .start = 38637, .len = 2 }, + .{ .cp = 0xFC23, .start = 38639, .len = 2 }, + .{ .cp = 0xFC24, .start = 38641, .len = 2 }, + .{ .cp = 0xFC25, .start = 38643, .len = 2 }, + .{ .cp = 0xFC26, .start = 38645, .len = 2 }, + .{ .cp = 0xFC27, .start = 38647, .len = 2 }, + .{ .cp = 0xFC28, .start = 38649, .len = 2 }, + .{ .cp = 0xFC29, .start = 38651, .len = 2 }, + .{ .cp = 0xFC2A, .start = 38653, .len = 2 }, + .{ .cp = 0xFC2B, .start = 38655, .len = 2 }, + .{ .cp = 0xFC2C, .start = 38657, .len = 2 }, + .{ .cp = 0xFC2D, .start = 38659, .len = 2 }, + .{ .cp = 0xFC2E, .start = 38661, .len = 2 }, + .{ .cp = 0xFC2F, .start = 38663, .len = 2 }, + .{ .cp = 0xFC30, .start = 38665, .len = 2 }, + .{ .cp = 0xFC31, .start = 38667, .len = 2 }, + .{ .cp = 0xFC32, .start = 38669, .len = 2 }, + .{ .cp = 0xFC33, .start = 38671, .len = 2 }, + .{ .cp = 0xFC34, .start = 38673, .len = 2 }, + .{ .cp = 0xFC35, .start = 38675, .len = 2 }, + .{ .cp = 0xFC36, .start = 38677, .len = 2 }, + .{ .cp = 0xFC37, .start = 38679, .len = 2 }, + .{ .cp = 0xFC38, .start = 38681, .len = 2 }, + .{ .cp = 0xFC39, .start = 38683, .len = 2 }, + .{ .cp = 0xFC3A, .start = 38685, .len = 2 }, + .{ .cp = 0xFC3B, .start = 38687, .len = 2 }, + .{ .cp = 0xFC3C, .start = 38689, .len = 2 }, + .{ .cp = 0xFC3D, .start = 38691, .len = 2 }, + .{ .cp = 0xFC3E, .start = 38693, .len = 2 }, + .{ .cp = 0xFC3F, .start = 38695, .len = 2 }, + .{ .cp = 0xFC40, .start = 38697, .len = 2 }, + .{ .cp = 0xFC41, .start = 38699, .len = 2 }, + .{ .cp = 0xFC42, .start = 38701, .len = 2 }, + .{ .cp = 0xFC43, .start = 38703, .len = 2 }, + .{ .cp = 0xFC44, .start = 38705, .len = 2 }, + .{ .cp = 0xFC45, .start = 38707, .len = 2 }, + .{ .cp = 0xFC46, .start = 38709, .len = 2 }, + .{ .cp = 0xFC47, .start = 38711, .len = 2 }, + .{ .cp = 0xFC48, .start = 38713, .len = 2 }, + .{ .cp = 0xFC49, .start = 38715, .len = 2 }, + .{ .cp = 0xFC4A, .start = 38717, .len = 2 }, + .{ .cp = 0xFC4B, .start = 38719, .len = 2 }, + .{ .cp = 0xFC4C, .start = 38721, .len = 2 }, + .{ .cp = 0xFC4D, .start = 38723, .len = 2 }, + .{ .cp = 0xFC4E, .start = 38725, .len = 2 }, + .{ .cp = 0xFC4F, .start = 38727, .len = 2 }, + .{ .cp = 0xFC50, .start = 38729, .len = 2 }, + .{ .cp = 0xFC51, .start = 38731, .len = 2 }, + .{ .cp = 0xFC52, .start = 38733, .len = 2 }, + .{ .cp = 0xFC53, .start = 38735, .len = 2 }, + .{ .cp = 0xFC54, .start = 38737, .len = 2 }, + .{ .cp = 0xFC55, .start = 38739, .len = 2 }, + .{ .cp = 0xFC56, .start = 38741, .len = 2 }, + .{ .cp = 0xFC57, .start = 38743, .len = 2 }, + .{ .cp = 0xFC58, .start = 38745, .len = 2 }, + .{ .cp = 0xFC59, .start = 38747, .len = 2 }, + .{ .cp = 0xFC5A, .start = 38749, .len = 2 }, + .{ .cp = 0xFC5B, .start = 38751, .len = 2 }, + .{ .cp = 0xFC5C, .start = 38753, .len = 2 }, + .{ .cp = 0xFC5D, .start = 38755, .len = 2 }, + .{ .cp = 0xFC5E, .start = 38757, .len = 3 }, + .{ .cp = 0xFC5F, .start = 38760, .len = 3 }, + .{ .cp = 0xFC60, .start = 38763, .len = 3 }, + .{ .cp = 0xFC61, .start = 38766, .len = 3 }, + .{ .cp = 0xFC62, .start = 38769, .len = 3 }, + .{ .cp = 0xFC63, .start = 38772, .len = 3 }, + .{ .cp = 0xFC64, .start = 38775, .len = 3 }, + .{ .cp = 0xFC65, .start = 38778, .len = 3 }, + .{ .cp = 0xFC66, .start = 38781, .len = 3 }, + .{ .cp = 0xFC67, .start = 38784, .len = 3 }, + .{ .cp = 0xFC68, .start = 38787, .len = 3 }, + .{ .cp = 0xFC69, .start = 38790, .len = 3 }, + .{ .cp = 0xFC6A, .start = 38793, .len = 2 }, + .{ .cp = 0xFC6B, .start = 38795, .len = 2 }, + .{ .cp = 0xFC6C, .start = 38797, .len = 2 }, + .{ .cp = 0xFC6D, .start = 38799, .len = 2 }, + .{ .cp = 0xFC6E, .start = 38801, .len = 2 }, + .{ .cp = 0xFC6F, .start = 38803, .len = 2 }, + .{ .cp = 0xFC70, .start = 38805, .len = 2 }, + .{ .cp = 0xFC71, .start = 38807, .len = 2 }, + .{ .cp = 0xFC72, .start = 38809, .len = 2 }, + .{ .cp = 0xFC73, .start = 38811, .len = 2 }, + .{ .cp = 0xFC74, .start = 38813, .len = 2 }, + .{ .cp = 0xFC75, .start = 38815, .len = 2 }, + .{ .cp = 0xFC76, .start = 38817, .len = 2 }, + .{ .cp = 0xFC77, .start = 38819, .len = 2 }, + .{ .cp = 0xFC78, .start = 38821, .len = 2 }, + .{ .cp = 0xFC79, .start = 38823, .len = 2 }, + .{ .cp = 0xFC7A, .start = 38825, .len = 2 }, + .{ .cp = 0xFC7B, .start = 38827, .len = 2 }, + .{ .cp = 0xFC7C, .start = 38829, .len = 2 }, + .{ .cp = 0xFC7D, .start = 38831, .len = 2 }, + .{ .cp = 0xFC7E, .start = 38833, .len = 2 }, + .{ .cp = 0xFC7F, .start = 38835, .len = 2 }, + .{ .cp = 0xFC80, .start = 38837, .len = 2 }, + .{ .cp = 0xFC81, .start = 38839, .len = 2 }, + .{ .cp = 0xFC82, .start = 38841, .len = 2 }, + .{ .cp = 0xFC83, .start = 38843, .len = 2 }, + .{ .cp = 0xFC84, .start = 38845, .len = 2 }, + .{ .cp = 0xFC85, .start = 38847, .len = 2 }, + .{ .cp = 0xFC86, .start = 38849, .len = 2 }, + .{ .cp = 0xFC87, .start = 38851, .len = 2 }, + .{ .cp = 0xFC88, .start = 38853, .len = 2 }, + .{ .cp = 0xFC89, .start = 38855, .len = 2 }, + .{ .cp = 0xFC8A, .start = 38857, .len = 2 }, + .{ .cp = 0xFC8B, .start = 38859, .len = 2 }, + .{ .cp = 0xFC8C, .start = 38861, .len = 2 }, + .{ .cp = 0xFC8D, .start = 38863, .len = 2 }, + .{ .cp = 0xFC8E, .start = 38865, .len = 2 }, + .{ .cp = 0xFC8F, .start = 38867, .len = 2 }, + .{ .cp = 0xFC90, .start = 38869, .len = 2 }, + .{ .cp = 0xFC91, .start = 38871, .len = 2 }, + .{ .cp = 0xFC92, .start = 38873, .len = 2 }, + .{ .cp = 0xFC93, .start = 38875, .len = 2 }, + .{ .cp = 0xFC94, .start = 38877, .len = 2 }, + .{ .cp = 0xFC95, .start = 38879, .len = 2 }, + .{ .cp = 0xFC96, .start = 38881, .len = 2 }, + .{ .cp = 0xFC97, .start = 38883, .len = 3 }, + .{ .cp = 0xFC98, .start = 38886, .len = 3 }, + .{ .cp = 0xFC99, .start = 38889, .len = 3 }, + .{ .cp = 0xFC9A, .start = 38892, .len = 3 }, + .{ .cp = 0xFC9B, .start = 38895, .len = 3 }, + .{ .cp = 0xFC9C, .start = 38898, .len = 2 }, + .{ .cp = 0xFC9D, .start = 38900, .len = 2 }, + .{ .cp = 0xFC9E, .start = 38902, .len = 2 }, + .{ .cp = 0xFC9F, .start = 38904, .len = 2 }, + .{ .cp = 0xFCA0, .start = 38906, .len = 2 }, + .{ .cp = 0xFCA1, .start = 38908, .len = 2 }, + .{ .cp = 0xFCA2, .start = 38910, .len = 2 }, + .{ .cp = 0xFCA3, .start = 38912, .len = 2 }, + .{ .cp = 0xFCA4, .start = 38914, .len = 2 }, + .{ .cp = 0xFCA5, .start = 38916, .len = 2 }, + .{ .cp = 0xFCA6, .start = 38918, .len = 2 }, + .{ .cp = 0xFCA7, .start = 38920, .len = 2 }, + .{ .cp = 0xFCA8, .start = 38922, .len = 2 }, + .{ .cp = 0xFCA9, .start = 38924, .len = 2 }, + .{ .cp = 0xFCAA, .start = 38926, .len = 2 }, + .{ .cp = 0xFCAB, .start = 38928, .len = 2 }, + .{ .cp = 0xFCAC, .start = 38930, .len = 2 }, + .{ .cp = 0xFCAD, .start = 38932, .len = 2 }, + .{ .cp = 0xFCAE, .start = 38934, .len = 2 }, + .{ .cp = 0xFCAF, .start = 38936, .len = 2 }, + .{ .cp = 0xFCB0, .start = 38938, .len = 2 }, + .{ .cp = 0xFCB1, .start = 38940, .len = 2 }, + .{ .cp = 0xFCB2, .start = 38942, .len = 2 }, + .{ .cp = 0xFCB3, .start = 38944, .len = 2 }, + .{ .cp = 0xFCB4, .start = 38946, .len = 2 }, + .{ .cp = 0xFCB5, .start = 38948, .len = 2 }, + .{ .cp = 0xFCB6, .start = 38950, .len = 2 }, + .{ .cp = 0xFCB7, .start = 38952, .len = 2 }, + .{ .cp = 0xFCB8, .start = 38954, .len = 2 }, + .{ .cp = 0xFCB9, .start = 38956, .len = 2 }, + .{ .cp = 0xFCBA, .start = 38958, .len = 2 }, + .{ .cp = 0xFCBB, .start = 38960, .len = 2 }, + .{ .cp = 0xFCBC, .start = 38962, .len = 2 }, + .{ .cp = 0xFCBD, .start = 38964, .len = 2 }, + .{ .cp = 0xFCBE, .start = 38966, .len = 2 }, + .{ .cp = 0xFCBF, .start = 38968, .len = 2 }, + .{ .cp = 0xFCC0, .start = 38970, .len = 2 }, + .{ .cp = 0xFCC1, .start = 38972, .len = 2 }, + .{ .cp = 0xFCC2, .start = 38974, .len = 2 }, + .{ .cp = 0xFCC3, .start = 38976, .len = 2 }, + .{ .cp = 0xFCC4, .start = 38978, .len = 2 }, + .{ .cp = 0xFCC5, .start = 38980, .len = 2 }, + .{ .cp = 0xFCC6, .start = 38982, .len = 2 }, + .{ .cp = 0xFCC7, .start = 38984, .len = 2 }, + .{ .cp = 0xFCC8, .start = 38986, .len = 2 }, + .{ .cp = 0xFCC9, .start = 38988, .len = 2 }, + .{ .cp = 0xFCCA, .start = 38990, .len = 2 }, + .{ .cp = 0xFCCB, .start = 38992, .len = 2 }, + .{ .cp = 0xFCCC, .start = 38994, .len = 2 }, + .{ .cp = 0xFCCD, .start = 38996, .len = 2 }, + .{ .cp = 0xFCCE, .start = 38998, .len = 2 }, + .{ .cp = 0xFCCF, .start = 39000, .len = 2 }, + .{ .cp = 0xFCD0, .start = 39002, .len = 2 }, + .{ .cp = 0xFCD1, .start = 39004, .len = 2 }, + .{ .cp = 0xFCD2, .start = 39006, .len = 2 }, + .{ .cp = 0xFCD3, .start = 39008, .len = 2 }, + .{ .cp = 0xFCD4, .start = 39010, .len = 2 }, + .{ .cp = 0xFCD5, .start = 39012, .len = 2 }, + .{ .cp = 0xFCD6, .start = 39014, .len = 2 }, + .{ .cp = 0xFCD7, .start = 39016, .len = 2 }, + .{ .cp = 0xFCD8, .start = 39018, .len = 2 }, + .{ .cp = 0xFCD9, .start = 39020, .len = 2 }, + .{ .cp = 0xFCDA, .start = 39022, .len = 2 }, + .{ .cp = 0xFCDB, .start = 39024, .len = 2 }, + .{ .cp = 0xFCDC, .start = 39026, .len = 2 }, + .{ .cp = 0xFCDD, .start = 39028, .len = 2 }, + .{ .cp = 0xFCDE, .start = 39030, .len = 2 }, + .{ .cp = 0xFCDF, .start = 39032, .len = 3 }, + .{ .cp = 0xFCE0, .start = 39035, .len = 3 }, + .{ .cp = 0xFCE1, .start = 39038, .len = 2 }, + .{ .cp = 0xFCE2, .start = 39040, .len = 2 }, + .{ .cp = 0xFCE3, .start = 39042, .len = 2 }, + .{ .cp = 0xFCE4, .start = 39044, .len = 2 }, + .{ .cp = 0xFCE5, .start = 39046, .len = 2 }, + .{ .cp = 0xFCE6, .start = 39048, .len = 2 }, + .{ .cp = 0xFCE7, .start = 39050, .len = 2 }, + .{ .cp = 0xFCE8, .start = 39052, .len = 2 }, + .{ .cp = 0xFCE9, .start = 39054, .len = 2 }, + .{ .cp = 0xFCEA, .start = 39056, .len = 2 }, + .{ .cp = 0xFCEB, .start = 39058, .len = 2 }, + .{ .cp = 0xFCEC, .start = 39060, .len = 2 }, + .{ .cp = 0xFCED, .start = 39062, .len = 2 }, + .{ .cp = 0xFCEE, .start = 39064, .len = 2 }, + .{ .cp = 0xFCEF, .start = 39066, .len = 2 }, + .{ .cp = 0xFCF0, .start = 39068, .len = 2 }, + .{ .cp = 0xFCF1, .start = 39070, .len = 2 }, + .{ .cp = 0xFCF2, .start = 39072, .len = 3 }, + .{ .cp = 0xFCF3, .start = 39075, .len = 3 }, + .{ .cp = 0xFCF4, .start = 39078, .len = 3 }, + .{ .cp = 0xFCF5, .start = 39081, .len = 2 }, + .{ .cp = 0xFCF6, .start = 39083, .len = 2 }, + .{ .cp = 0xFCF7, .start = 39085, .len = 2 }, + .{ .cp = 0xFCF8, .start = 39087, .len = 2 }, + .{ .cp = 0xFCF9, .start = 39089, .len = 2 }, + .{ .cp = 0xFCFA, .start = 39091, .len = 2 }, + .{ .cp = 0xFCFB, .start = 39093, .len = 2 }, + .{ .cp = 0xFCFC, .start = 39095, .len = 2 }, + .{ .cp = 0xFCFD, .start = 39097, .len = 2 }, + .{ .cp = 0xFCFE, .start = 39099, .len = 2 }, + .{ .cp = 0xFCFF, .start = 39101, .len = 2 }, + .{ .cp = 0xFD00, .start = 39103, .len = 2 }, + .{ .cp = 0xFD01, .start = 39105, .len = 2 }, + .{ .cp = 0xFD02, .start = 39107, .len = 2 }, + .{ .cp = 0xFD03, .start = 39109, .len = 2 }, + .{ .cp = 0xFD04, .start = 39111, .len = 2 }, + .{ .cp = 0xFD05, .start = 39113, .len = 2 }, + .{ .cp = 0xFD06, .start = 39115, .len = 2 }, + .{ .cp = 0xFD07, .start = 39117, .len = 2 }, + .{ .cp = 0xFD08, .start = 39119, .len = 2 }, + .{ .cp = 0xFD09, .start = 39121, .len = 2 }, + .{ .cp = 0xFD0A, .start = 39123, .len = 2 }, + .{ .cp = 0xFD0B, .start = 39125, .len = 2 }, + .{ .cp = 0xFD0C, .start = 39127, .len = 2 }, + .{ .cp = 0xFD0D, .start = 39129, .len = 2 }, + .{ .cp = 0xFD0E, .start = 39131, .len = 2 }, + .{ .cp = 0xFD0F, .start = 39133, .len = 2 }, + .{ .cp = 0xFD10, .start = 39135, .len = 2 }, + .{ .cp = 0xFD11, .start = 39137, .len = 2 }, + .{ .cp = 0xFD12, .start = 39139, .len = 2 }, + .{ .cp = 0xFD13, .start = 39141, .len = 2 }, + .{ .cp = 0xFD14, .start = 39143, .len = 2 }, + .{ .cp = 0xFD15, .start = 39145, .len = 2 }, + .{ .cp = 0xFD16, .start = 39147, .len = 2 }, + .{ .cp = 0xFD17, .start = 39149, .len = 2 }, + .{ .cp = 0xFD18, .start = 39151, .len = 2 }, + .{ .cp = 0xFD19, .start = 39153, .len = 2 }, + .{ .cp = 0xFD1A, .start = 39155, .len = 2 }, + .{ .cp = 0xFD1B, .start = 39157, .len = 2 }, + .{ .cp = 0xFD1C, .start = 39159, .len = 2 }, + .{ .cp = 0xFD1D, .start = 39161, .len = 2 }, + .{ .cp = 0xFD1E, .start = 39163, .len = 2 }, + .{ .cp = 0xFD1F, .start = 39165, .len = 2 }, + .{ .cp = 0xFD20, .start = 39167, .len = 2 }, + .{ .cp = 0xFD21, .start = 39169, .len = 2 }, + .{ .cp = 0xFD22, .start = 39171, .len = 2 }, + .{ .cp = 0xFD23, .start = 39173, .len = 2 }, + .{ .cp = 0xFD24, .start = 39175, .len = 2 }, + .{ .cp = 0xFD25, .start = 39177, .len = 2 }, + .{ .cp = 0xFD26, .start = 39179, .len = 2 }, + .{ .cp = 0xFD27, .start = 39181, .len = 2 }, + .{ .cp = 0xFD28, .start = 39183, .len = 2 }, + .{ .cp = 0xFD29, .start = 39185, .len = 2 }, + .{ .cp = 0xFD2A, .start = 39187, .len = 2 }, + .{ .cp = 0xFD2B, .start = 39189, .len = 2 }, + .{ .cp = 0xFD2C, .start = 39191, .len = 2 }, + .{ .cp = 0xFD2D, .start = 39193, .len = 2 }, + .{ .cp = 0xFD2E, .start = 39195, .len = 2 }, + .{ .cp = 0xFD2F, .start = 39197, .len = 2 }, + .{ .cp = 0xFD30, .start = 39199, .len = 2 }, + .{ .cp = 0xFD31, .start = 39201, .len = 2 }, + .{ .cp = 0xFD32, .start = 39203, .len = 2 }, + .{ .cp = 0xFD33, .start = 39205, .len = 2 }, + .{ .cp = 0xFD34, .start = 39207, .len = 2 }, + .{ .cp = 0xFD35, .start = 39209, .len = 2 }, + .{ .cp = 0xFD36, .start = 39211, .len = 2 }, + .{ .cp = 0xFD37, .start = 39213, .len = 2 }, + .{ .cp = 0xFD38, .start = 39215, .len = 2 }, + .{ .cp = 0xFD39, .start = 39217, .len = 2 }, + .{ .cp = 0xFD3A, .start = 39219, .len = 2 }, + .{ .cp = 0xFD3B, .start = 39221, .len = 2 }, + .{ .cp = 0xFD3C, .start = 39223, .len = 2 }, + .{ .cp = 0xFD3D, .start = 39225, .len = 2 }, + .{ .cp = 0xFD50, .start = 39227, .len = 3 }, + .{ .cp = 0xFD51, .start = 39230, .len = 3 }, + .{ .cp = 0xFD52, .start = 39233, .len = 3 }, + .{ .cp = 0xFD53, .start = 39236, .len = 3 }, + .{ .cp = 0xFD54, .start = 39239, .len = 3 }, + .{ .cp = 0xFD55, .start = 39242, .len = 3 }, + .{ .cp = 0xFD56, .start = 39245, .len = 3 }, + .{ .cp = 0xFD57, .start = 39248, .len = 3 }, + .{ .cp = 0xFD58, .start = 39251, .len = 3 }, + .{ .cp = 0xFD59, .start = 39254, .len = 3 }, + .{ .cp = 0xFD5A, .start = 39257, .len = 3 }, + .{ .cp = 0xFD5B, .start = 39260, .len = 3 }, + .{ .cp = 0xFD5C, .start = 39263, .len = 3 }, + .{ .cp = 0xFD5D, .start = 39266, .len = 3 }, + .{ .cp = 0xFD5E, .start = 39269, .len = 3 }, + .{ .cp = 0xFD5F, .start = 39272, .len = 3 }, + .{ .cp = 0xFD60, .start = 39275, .len = 3 }, + .{ .cp = 0xFD61, .start = 39278, .len = 3 }, + .{ .cp = 0xFD62, .start = 39281, .len = 3 }, + .{ .cp = 0xFD63, .start = 39284, .len = 3 }, + .{ .cp = 0xFD64, .start = 39287, .len = 3 }, + .{ .cp = 0xFD65, .start = 39290, .len = 3 }, + .{ .cp = 0xFD66, .start = 39293, .len = 3 }, + .{ .cp = 0xFD67, .start = 39296, .len = 3 }, + .{ .cp = 0xFD68, .start = 39299, .len = 3 }, + .{ .cp = 0xFD69, .start = 39302, .len = 3 }, + .{ .cp = 0xFD6A, .start = 39305, .len = 3 }, + .{ .cp = 0xFD6B, .start = 39308, .len = 3 }, + .{ .cp = 0xFD6C, .start = 39311, .len = 3 }, + .{ .cp = 0xFD6D, .start = 39314, .len = 3 }, + .{ .cp = 0xFD6E, .start = 39317, .len = 3 }, + .{ .cp = 0xFD6F, .start = 39320, .len = 3 }, + .{ .cp = 0xFD70, .start = 39323, .len = 3 }, + .{ .cp = 0xFD71, .start = 39326, .len = 3 }, + .{ .cp = 0xFD72, .start = 39329, .len = 3 }, + .{ .cp = 0xFD73, .start = 39332, .len = 3 }, + .{ .cp = 0xFD74, .start = 39335, .len = 3 }, + .{ .cp = 0xFD75, .start = 39338, .len = 3 }, + .{ .cp = 0xFD76, .start = 39341, .len = 3 }, + .{ .cp = 0xFD77, .start = 39344, .len = 3 }, + .{ .cp = 0xFD78, .start = 39347, .len = 3 }, + .{ .cp = 0xFD79, .start = 39350, .len = 3 }, + .{ .cp = 0xFD7A, .start = 39353, .len = 3 }, + .{ .cp = 0xFD7B, .start = 39356, .len = 3 }, + .{ .cp = 0xFD7C, .start = 39359, .len = 3 }, + .{ .cp = 0xFD7D, .start = 39362, .len = 3 }, + .{ .cp = 0xFD7E, .start = 39365, .len = 3 }, + .{ .cp = 0xFD7F, .start = 39368, .len = 3 }, + .{ .cp = 0xFD80, .start = 39371, .len = 3 }, + .{ .cp = 0xFD81, .start = 39374, .len = 3 }, + .{ .cp = 0xFD82, .start = 39377, .len = 3 }, + .{ .cp = 0xFD83, .start = 39380, .len = 3 }, + .{ .cp = 0xFD84, .start = 39383, .len = 3 }, + .{ .cp = 0xFD85, .start = 39386, .len = 3 }, + .{ .cp = 0xFD86, .start = 39389, .len = 3 }, + .{ .cp = 0xFD87, .start = 39392, .len = 3 }, + .{ .cp = 0xFD88, .start = 39395, .len = 3 }, + .{ .cp = 0xFD89, .start = 39398, .len = 3 }, + .{ .cp = 0xFD8A, .start = 39401, .len = 3 }, + .{ .cp = 0xFD8B, .start = 39404, .len = 3 }, + .{ .cp = 0xFD8C, .start = 39407, .len = 3 }, + .{ .cp = 0xFD8D, .start = 39410, .len = 3 }, + .{ .cp = 0xFD8E, .start = 39413, .len = 3 }, + .{ .cp = 0xFD8F, .start = 39416, .len = 3 }, + .{ .cp = 0xFD92, .start = 39419, .len = 3 }, + .{ .cp = 0xFD93, .start = 39422, .len = 3 }, + .{ .cp = 0xFD94, .start = 39425, .len = 3 }, + .{ .cp = 0xFD95, .start = 39428, .len = 3 }, + .{ .cp = 0xFD96, .start = 39431, .len = 3 }, + .{ .cp = 0xFD97, .start = 39434, .len = 3 }, + .{ .cp = 0xFD98, .start = 39437, .len = 3 }, + .{ .cp = 0xFD99, .start = 39440, .len = 3 }, + .{ .cp = 0xFD9A, .start = 39443, .len = 3 }, + .{ .cp = 0xFD9B, .start = 39446, .len = 3 }, + .{ .cp = 0xFD9C, .start = 39449, .len = 3 }, + .{ .cp = 0xFD9D, .start = 39452, .len = 3 }, + .{ .cp = 0xFD9E, .start = 39455, .len = 3 }, + .{ .cp = 0xFD9F, .start = 39458, .len = 3 }, + .{ .cp = 0xFDA0, .start = 39461, .len = 3 }, + .{ .cp = 0xFDA1, .start = 39464, .len = 3 }, + .{ .cp = 0xFDA2, .start = 39467, .len = 3 }, + .{ .cp = 0xFDA3, .start = 39470, .len = 3 }, + .{ .cp = 0xFDA4, .start = 39473, .len = 3 }, + .{ .cp = 0xFDA5, .start = 39476, .len = 3 }, + .{ .cp = 0xFDA6, .start = 39479, .len = 3 }, + .{ .cp = 0xFDA7, .start = 39482, .len = 3 }, + .{ .cp = 0xFDA8, .start = 39485, .len = 3 }, + .{ .cp = 0xFDA9, .start = 39488, .len = 3 }, + .{ .cp = 0xFDAA, .start = 39491, .len = 3 }, + .{ .cp = 0xFDAB, .start = 39494, .len = 3 }, + .{ .cp = 0xFDAC, .start = 39497, .len = 3 }, + .{ .cp = 0xFDAD, .start = 39500, .len = 3 }, + .{ .cp = 0xFDAE, .start = 39503, .len = 3 }, + .{ .cp = 0xFDAF, .start = 39506, .len = 3 }, + .{ .cp = 0xFDB0, .start = 39509, .len = 3 }, + .{ .cp = 0xFDB1, .start = 39512, .len = 3 }, + .{ .cp = 0xFDB2, .start = 39515, .len = 3 }, + .{ .cp = 0xFDB3, .start = 39518, .len = 3 }, + .{ .cp = 0xFDB4, .start = 39521, .len = 3 }, + .{ .cp = 0xFDB5, .start = 39524, .len = 3 }, + .{ .cp = 0xFDB6, .start = 39527, .len = 3 }, + .{ .cp = 0xFDB7, .start = 39530, .len = 3 }, + .{ .cp = 0xFDB8, .start = 39533, .len = 3 }, + .{ .cp = 0xFDB9, .start = 39536, .len = 3 }, + .{ .cp = 0xFDBA, .start = 39539, .len = 3 }, + .{ .cp = 0xFDBB, .start = 39542, .len = 3 }, + .{ .cp = 0xFDBC, .start = 39545, .len = 3 }, + .{ .cp = 0xFDBD, .start = 39548, .len = 3 }, + .{ .cp = 0xFDBE, .start = 39551, .len = 3 }, + .{ .cp = 0xFDBF, .start = 39554, .len = 3 }, + .{ .cp = 0xFDC0, .start = 39557, .len = 3 }, + .{ .cp = 0xFDC1, .start = 39560, .len = 3 }, + .{ .cp = 0xFDC2, .start = 39563, .len = 3 }, + .{ .cp = 0xFDC3, .start = 39566, .len = 3 }, + .{ .cp = 0xFDC4, .start = 39569, .len = 3 }, + .{ .cp = 0xFDC5, .start = 39572, .len = 3 }, + .{ .cp = 0xFDC6, .start = 39575, .len = 3 }, + .{ .cp = 0xFDC7, .start = 39578, .len = 3 }, + .{ .cp = 0xFDF0, .start = 39581, .len = 3 }, + .{ .cp = 0xFDF1, .start = 39584, .len = 3 }, + .{ .cp = 0xFDF2, .start = 39587, .len = 4 }, + .{ .cp = 0xFDF3, .start = 39591, .len = 4 }, + .{ .cp = 0xFDF4, .start = 39595, .len = 4 }, + .{ .cp = 0xFDF5, .start = 39599, .len = 4 }, + .{ .cp = 0xFDF6, .start = 39603, .len = 4 }, + .{ .cp = 0xFDF7, .start = 39607, .len = 4 }, + .{ .cp = 0xFDF8, .start = 39611, .len = 4 }, + .{ .cp = 0xFDF9, .start = 39615, .len = 3 }, + .{ .cp = 0xFDFA, .start = 39618, .len = 18 }, + .{ .cp = 0xFDFB, .start = 39636, .len = 8 }, + .{ .cp = 0xFDFC, .start = 39644, .len = 4 }, + .{ .cp = 0xFE10, .start = 39648, .len = 1 }, + .{ .cp = 0xFE11, .start = 39649, .len = 1 }, + .{ .cp = 0xFE12, .start = 39650, .len = 1 }, + .{ .cp = 0xFE13, .start = 39651, .len = 1 }, + .{ .cp = 0xFE14, .start = 39652, .len = 1 }, + .{ .cp = 0xFE15, .start = 39653, .len = 1 }, + .{ .cp = 0xFE16, .start = 39654, .len = 1 }, + .{ .cp = 0xFE17, .start = 39655, .len = 1 }, + .{ .cp = 0xFE18, .start = 39656, .len = 1 }, + .{ .cp = 0xFE19, .start = 39657, .len = 3 }, + .{ .cp = 0xFE30, .start = 39660, .len = 2 }, + .{ .cp = 0xFE31, .start = 39662, .len = 1 }, + .{ .cp = 0xFE32, .start = 39663, .len = 1 }, + .{ .cp = 0xFE33, .start = 39664, .len = 1 }, + .{ .cp = 0xFE34, .start = 39665, .len = 1 }, + .{ .cp = 0xFE35, .start = 39666, .len = 1 }, + .{ .cp = 0xFE36, .start = 39667, .len = 1 }, + .{ .cp = 0xFE37, .start = 39668, .len = 1 }, + .{ .cp = 0xFE38, .start = 39669, .len = 1 }, + .{ .cp = 0xFE39, .start = 39670, .len = 1 }, + .{ .cp = 0xFE3A, .start = 39671, .len = 1 }, + .{ .cp = 0xFE3B, .start = 39672, .len = 1 }, + .{ .cp = 0xFE3C, .start = 39673, .len = 1 }, + .{ .cp = 0xFE3D, .start = 39674, .len = 1 }, + .{ .cp = 0xFE3E, .start = 39675, .len = 1 }, + .{ .cp = 0xFE3F, .start = 39676, .len = 1 }, + .{ .cp = 0xFE40, .start = 39677, .len = 1 }, + .{ .cp = 0xFE41, .start = 39678, .len = 1 }, + .{ .cp = 0xFE42, .start = 39679, .len = 1 }, + .{ .cp = 0xFE43, .start = 39680, .len = 1 }, + .{ .cp = 0xFE44, .start = 39681, .len = 1 }, + .{ .cp = 0xFE47, .start = 39682, .len = 1 }, + .{ .cp = 0xFE48, .start = 39683, .len = 1 }, + .{ .cp = 0xFE49, .start = 39684, .len = 2 }, + .{ .cp = 0xFE4A, .start = 39686, .len = 2 }, + .{ .cp = 0xFE4B, .start = 39688, .len = 2 }, + .{ .cp = 0xFE4C, .start = 39690, .len = 2 }, + .{ .cp = 0xFE4D, .start = 39692, .len = 1 }, + .{ .cp = 0xFE4E, .start = 39693, .len = 1 }, + .{ .cp = 0xFE4F, .start = 39694, .len = 1 }, + .{ .cp = 0xFE50, .start = 39695, .len = 1 }, + .{ .cp = 0xFE51, .start = 39696, .len = 1 }, + .{ .cp = 0xFE52, .start = 39697, .len = 1 }, + .{ .cp = 0xFE54, .start = 39698, .len = 1 }, + .{ .cp = 0xFE55, .start = 39699, .len = 1 }, + .{ .cp = 0xFE56, .start = 39700, .len = 1 }, + .{ .cp = 0xFE57, .start = 39701, .len = 1 }, + .{ .cp = 0xFE58, .start = 39702, .len = 1 }, + .{ .cp = 0xFE59, .start = 39703, .len = 1 }, + .{ .cp = 0xFE5A, .start = 39704, .len = 1 }, + .{ .cp = 0xFE5B, .start = 39705, .len = 1 }, + .{ .cp = 0xFE5C, .start = 39706, .len = 1 }, + .{ .cp = 0xFE5D, .start = 39707, .len = 1 }, + .{ .cp = 0xFE5E, .start = 39708, .len = 1 }, + .{ .cp = 0xFE5F, .start = 39709, .len = 1 }, + .{ .cp = 0xFE60, .start = 39710, .len = 1 }, + .{ .cp = 0xFE61, .start = 39711, .len = 1 }, + .{ .cp = 0xFE62, .start = 39712, .len = 1 }, + .{ .cp = 0xFE63, .start = 39713, .len = 1 }, + .{ .cp = 0xFE64, .start = 39714, .len = 1 }, + .{ .cp = 0xFE65, .start = 39715, .len = 1 }, + .{ .cp = 0xFE66, .start = 39716, .len = 1 }, + .{ .cp = 0xFE68, .start = 39717, .len = 1 }, + .{ .cp = 0xFE69, .start = 39718, .len = 1 }, + .{ .cp = 0xFE6A, .start = 39719, .len = 1 }, + .{ .cp = 0xFE6B, .start = 39720, .len = 1 }, + .{ .cp = 0xFE70, .start = 39721, .len = 2 }, + .{ .cp = 0xFE71, .start = 39723, .len = 2 }, + .{ .cp = 0xFE72, .start = 39725, .len = 2 }, + .{ .cp = 0xFE74, .start = 39727, .len = 2 }, + .{ .cp = 0xFE76, .start = 39729, .len = 2 }, + .{ .cp = 0xFE77, .start = 39731, .len = 2 }, + .{ .cp = 0xFE78, .start = 39733, .len = 2 }, + .{ .cp = 0xFE79, .start = 39735, .len = 2 }, + .{ .cp = 0xFE7A, .start = 39737, .len = 2 }, + .{ .cp = 0xFE7B, .start = 39739, .len = 2 }, + .{ .cp = 0xFE7C, .start = 39741, .len = 2 }, + .{ .cp = 0xFE7D, .start = 39743, .len = 2 }, + .{ .cp = 0xFE7E, .start = 39745, .len = 2 }, + .{ .cp = 0xFE7F, .start = 39747, .len = 2 }, + .{ .cp = 0xFE80, .start = 39749, .len = 1 }, + .{ .cp = 0xFE81, .start = 39750, .len = 2 }, + .{ .cp = 0xFE82, .start = 39752, .len = 2 }, + .{ .cp = 0xFE83, .start = 39754, .len = 2 }, + .{ .cp = 0xFE84, .start = 39756, .len = 2 }, + .{ .cp = 0xFE85, .start = 39758, .len = 2 }, + .{ .cp = 0xFE86, .start = 39760, .len = 2 }, + .{ .cp = 0xFE87, .start = 39762, .len = 2 }, + .{ .cp = 0xFE88, .start = 39764, .len = 2 }, + .{ .cp = 0xFE89, .start = 39766, .len = 2 }, + .{ .cp = 0xFE8A, .start = 39768, .len = 2 }, + .{ .cp = 0xFE8B, .start = 39770, .len = 2 }, + .{ .cp = 0xFE8C, .start = 39772, .len = 2 }, + .{ .cp = 0xFE8D, .start = 39774, .len = 1 }, + .{ .cp = 0xFE8E, .start = 39775, .len = 1 }, + .{ .cp = 0xFE8F, .start = 39776, .len = 1 }, + .{ .cp = 0xFE90, .start = 39777, .len = 1 }, + .{ .cp = 0xFE91, .start = 39778, .len = 1 }, + .{ .cp = 0xFE92, .start = 39779, .len = 1 }, + .{ .cp = 0xFE93, .start = 39780, .len = 1 }, + .{ .cp = 0xFE94, .start = 39781, .len = 1 }, + .{ .cp = 0xFE95, .start = 39782, .len = 1 }, + .{ .cp = 0xFE96, .start = 39783, .len = 1 }, + .{ .cp = 0xFE97, .start = 39784, .len = 1 }, + .{ .cp = 0xFE98, .start = 39785, .len = 1 }, + .{ .cp = 0xFE99, .start = 39786, .len = 1 }, + .{ .cp = 0xFE9A, .start = 39787, .len = 1 }, + .{ .cp = 0xFE9B, .start = 39788, .len = 1 }, + .{ .cp = 0xFE9C, .start = 39789, .len = 1 }, + .{ .cp = 0xFE9D, .start = 39790, .len = 1 }, + .{ .cp = 0xFE9E, .start = 39791, .len = 1 }, + .{ .cp = 0xFE9F, .start = 39792, .len = 1 }, + .{ .cp = 0xFEA0, .start = 39793, .len = 1 }, + .{ .cp = 0xFEA1, .start = 39794, .len = 1 }, + .{ .cp = 0xFEA2, .start = 39795, .len = 1 }, + .{ .cp = 0xFEA3, .start = 39796, .len = 1 }, + .{ .cp = 0xFEA4, .start = 39797, .len = 1 }, + .{ .cp = 0xFEA5, .start = 39798, .len = 1 }, + .{ .cp = 0xFEA6, .start = 39799, .len = 1 }, + .{ .cp = 0xFEA7, .start = 39800, .len = 1 }, + .{ .cp = 0xFEA8, .start = 39801, .len = 1 }, + .{ .cp = 0xFEA9, .start = 39802, .len = 1 }, + .{ .cp = 0xFEAA, .start = 39803, .len = 1 }, + .{ .cp = 0xFEAB, .start = 39804, .len = 1 }, + .{ .cp = 0xFEAC, .start = 39805, .len = 1 }, + .{ .cp = 0xFEAD, .start = 39806, .len = 1 }, + .{ .cp = 0xFEAE, .start = 39807, .len = 1 }, + .{ .cp = 0xFEAF, .start = 39808, .len = 1 }, + .{ .cp = 0xFEB0, .start = 39809, .len = 1 }, + .{ .cp = 0xFEB1, .start = 39810, .len = 1 }, + .{ .cp = 0xFEB2, .start = 39811, .len = 1 }, + .{ .cp = 0xFEB3, .start = 39812, .len = 1 }, + .{ .cp = 0xFEB4, .start = 39813, .len = 1 }, + .{ .cp = 0xFEB5, .start = 39814, .len = 1 }, + .{ .cp = 0xFEB6, .start = 39815, .len = 1 }, + .{ .cp = 0xFEB7, .start = 39816, .len = 1 }, + .{ .cp = 0xFEB8, .start = 39817, .len = 1 }, + .{ .cp = 0xFEB9, .start = 39818, .len = 1 }, + .{ .cp = 0xFEBA, .start = 39819, .len = 1 }, + .{ .cp = 0xFEBB, .start = 39820, .len = 1 }, + .{ .cp = 0xFEBC, .start = 39821, .len = 1 }, + .{ .cp = 0xFEBD, .start = 39822, .len = 1 }, + .{ .cp = 0xFEBE, .start = 39823, .len = 1 }, + .{ .cp = 0xFEBF, .start = 39824, .len = 1 }, + .{ .cp = 0xFEC0, .start = 39825, .len = 1 }, + .{ .cp = 0xFEC1, .start = 39826, .len = 1 }, + .{ .cp = 0xFEC2, .start = 39827, .len = 1 }, + .{ .cp = 0xFEC3, .start = 39828, .len = 1 }, + .{ .cp = 0xFEC4, .start = 39829, .len = 1 }, + .{ .cp = 0xFEC5, .start = 39830, .len = 1 }, + .{ .cp = 0xFEC6, .start = 39831, .len = 1 }, + .{ .cp = 0xFEC7, .start = 39832, .len = 1 }, + .{ .cp = 0xFEC8, .start = 39833, .len = 1 }, + .{ .cp = 0xFEC9, .start = 39834, .len = 1 }, + .{ .cp = 0xFECA, .start = 39835, .len = 1 }, + .{ .cp = 0xFECB, .start = 39836, .len = 1 }, + .{ .cp = 0xFECC, .start = 39837, .len = 1 }, + .{ .cp = 0xFECD, .start = 39838, .len = 1 }, + .{ .cp = 0xFECE, .start = 39839, .len = 1 }, + .{ .cp = 0xFECF, .start = 39840, .len = 1 }, + .{ .cp = 0xFED0, .start = 39841, .len = 1 }, + .{ .cp = 0xFED1, .start = 39842, .len = 1 }, + .{ .cp = 0xFED2, .start = 39843, .len = 1 }, + .{ .cp = 0xFED3, .start = 39844, .len = 1 }, + .{ .cp = 0xFED4, .start = 39845, .len = 1 }, + .{ .cp = 0xFED5, .start = 39846, .len = 1 }, + .{ .cp = 0xFED6, .start = 39847, .len = 1 }, + .{ .cp = 0xFED7, .start = 39848, .len = 1 }, + .{ .cp = 0xFED8, .start = 39849, .len = 1 }, + .{ .cp = 0xFED9, .start = 39850, .len = 1 }, + .{ .cp = 0xFEDA, .start = 39851, .len = 1 }, + .{ .cp = 0xFEDB, .start = 39852, .len = 1 }, + .{ .cp = 0xFEDC, .start = 39853, .len = 1 }, + .{ .cp = 0xFEDD, .start = 39854, .len = 1 }, + .{ .cp = 0xFEDE, .start = 39855, .len = 1 }, + .{ .cp = 0xFEDF, .start = 39856, .len = 1 }, + .{ .cp = 0xFEE0, .start = 39857, .len = 1 }, + .{ .cp = 0xFEE1, .start = 39858, .len = 1 }, + .{ .cp = 0xFEE2, .start = 39859, .len = 1 }, + .{ .cp = 0xFEE3, .start = 39860, .len = 1 }, + .{ .cp = 0xFEE4, .start = 39861, .len = 1 }, + .{ .cp = 0xFEE5, .start = 39862, .len = 1 }, + .{ .cp = 0xFEE6, .start = 39863, .len = 1 }, + .{ .cp = 0xFEE7, .start = 39864, .len = 1 }, + .{ .cp = 0xFEE8, .start = 39865, .len = 1 }, + .{ .cp = 0xFEE9, .start = 39866, .len = 1 }, + .{ .cp = 0xFEEA, .start = 39867, .len = 1 }, + .{ .cp = 0xFEEB, .start = 39868, .len = 1 }, + .{ .cp = 0xFEEC, .start = 39869, .len = 1 }, + .{ .cp = 0xFEED, .start = 39870, .len = 1 }, + .{ .cp = 0xFEEE, .start = 39871, .len = 1 }, + .{ .cp = 0xFEEF, .start = 39872, .len = 1 }, + .{ .cp = 0xFEF0, .start = 39873, .len = 1 }, + .{ .cp = 0xFEF1, .start = 39874, .len = 1 }, + .{ .cp = 0xFEF2, .start = 39875, .len = 1 }, + .{ .cp = 0xFEF3, .start = 39876, .len = 1 }, + .{ .cp = 0xFEF4, .start = 39877, .len = 1 }, + .{ .cp = 0xFEF5, .start = 39878, .len = 3 }, + .{ .cp = 0xFEF6, .start = 39881, .len = 3 }, + .{ .cp = 0xFEF7, .start = 39884, .len = 3 }, + .{ .cp = 0xFEF8, .start = 39887, .len = 3 }, + .{ .cp = 0xFEF9, .start = 39890, .len = 3 }, + .{ .cp = 0xFEFA, .start = 39893, .len = 3 }, + .{ .cp = 0xFEFB, .start = 39896, .len = 2 }, + .{ .cp = 0xFEFC, .start = 39898, .len = 2 }, + .{ .cp = 0xFF01, .start = 39900, .len = 1 }, + .{ .cp = 0xFF02, .start = 39901, .len = 1 }, + .{ .cp = 0xFF03, .start = 39902, .len = 1 }, + .{ .cp = 0xFF04, .start = 39903, .len = 1 }, + .{ .cp = 0xFF05, .start = 39904, .len = 1 }, + .{ .cp = 0xFF06, .start = 39905, .len = 1 }, + .{ .cp = 0xFF07, .start = 39906, .len = 1 }, + .{ .cp = 0xFF08, .start = 39907, .len = 1 }, + .{ .cp = 0xFF09, .start = 39908, .len = 1 }, + .{ .cp = 0xFF0A, .start = 39909, .len = 1 }, + .{ .cp = 0xFF0B, .start = 39910, .len = 1 }, + .{ .cp = 0xFF0C, .start = 39911, .len = 1 }, + .{ .cp = 0xFF0D, .start = 39912, .len = 1 }, + .{ .cp = 0xFF0E, .start = 39913, .len = 1 }, + .{ .cp = 0xFF0F, .start = 39914, .len = 1 }, + .{ .cp = 0xFF10, .start = 39915, .len = 1 }, + .{ .cp = 0xFF11, .start = 39916, .len = 1 }, + .{ .cp = 0xFF12, .start = 39917, .len = 1 }, + .{ .cp = 0xFF13, .start = 39918, .len = 1 }, + .{ .cp = 0xFF14, .start = 39919, .len = 1 }, + .{ .cp = 0xFF15, .start = 39920, .len = 1 }, + .{ .cp = 0xFF16, .start = 39921, .len = 1 }, + .{ .cp = 0xFF17, .start = 39922, .len = 1 }, + .{ .cp = 0xFF18, .start = 39923, .len = 1 }, + .{ .cp = 0xFF19, .start = 39924, .len = 1 }, + .{ .cp = 0xFF1A, .start = 39925, .len = 1 }, + .{ .cp = 0xFF1B, .start = 39926, .len = 1 }, + .{ .cp = 0xFF1C, .start = 39927, .len = 1 }, + .{ .cp = 0xFF1D, .start = 39928, .len = 1 }, + .{ .cp = 0xFF1E, .start = 39929, .len = 1 }, + .{ .cp = 0xFF1F, .start = 39930, .len = 1 }, + .{ .cp = 0xFF20, .start = 39931, .len = 1 }, + .{ .cp = 0xFF21, .start = 39932, .len = 1 }, + .{ .cp = 0xFF22, .start = 39933, .len = 1 }, + .{ .cp = 0xFF23, .start = 39934, .len = 1 }, + .{ .cp = 0xFF24, .start = 39935, .len = 1 }, + .{ .cp = 0xFF25, .start = 39936, .len = 1 }, + .{ .cp = 0xFF26, .start = 39937, .len = 1 }, + .{ .cp = 0xFF27, .start = 39938, .len = 1 }, + .{ .cp = 0xFF28, .start = 39939, .len = 1 }, + .{ .cp = 0xFF29, .start = 39940, .len = 1 }, + .{ .cp = 0xFF2A, .start = 39941, .len = 1 }, + .{ .cp = 0xFF2B, .start = 39942, .len = 1 }, + .{ .cp = 0xFF2C, .start = 39943, .len = 1 }, + .{ .cp = 0xFF2D, .start = 39944, .len = 1 }, + .{ .cp = 0xFF2E, .start = 39945, .len = 1 }, + .{ .cp = 0xFF2F, .start = 39946, .len = 1 }, + .{ .cp = 0xFF30, .start = 39947, .len = 1 }, + .{ .cp = 0xFF31, .start = 39948, .len = 1 }, + .{ .cp = 0xFF32, .start = 39949, .len = 1 }, + .{ .cp = 0xFF33, .start = 39950, .len = 1 }, + .{ .cp = 0xFF34, .start = 39951, .len = 1 }, + .{ .cp = 0xFF35, .start = 39952, .len = 1 }, + .{ .cp = 0xFF36, .start = 39953, .len = 1 }, + .{ .cp = 0xFF37, .start = 39954, .len = 1 }, + .{ .cp = 0xFF38, .start = 39955, .len = 1 }, + .{ .cp = 0xFF39, .start = 39956, .len = 1 }, + .{ .cp = 0xFF3A, .start = 39957, .len = 1 }, + .{ .cp = 0xFF3B, .start = 39958, .len = 1 }, + .{ .cp = 0xFF3C, .start = 39959, .len = 1 }, + .{ .cp = 0xFF3D, .start = 39960, .len = 1 }, + .{ .cp = 0xFF3E, .start = 39961, .len = 1 }, + .{ .cp = 0xFF3F, .start = 39962, .len = 1 }, + .{ .cp = 0xFF40, .start = 39963, .len = 1 }, + .{ .cp = 0xFF41, .start = 39964, .len = 1 }, + .{ .cp = 0xFF42, .start = 39965, .len = 1 }, + .{ .cp = 0xFF43, .start = 39966, .len = 1 }, + .{ .cp = 0xFF44, .start = 39967, .len = 1 }, + .{ .cp = 0xFF45, .start = 39968, .len = 1 }, + .{ .cp = 0xFF46, .start = 39969, .len = 1 }, + .{ .cp = 0xFF47, .start = 39970, .len = 1 }, + .{ .cp = 0xFF48, .start = 39971, .len = 1 }, + .{ .cp = 0xFF49, .start = 39972, .len = 1 }, + .{ .cp = 0xFF4A, .start = 39973, .len = 1 }, + .{ .cp = 0xFF4B, .start = 39974, .len = 1 }, + .{ .cp = 0xFF4C, .start = 39975, .len = 1 }, + .{ .cp = 0xFF4D, .start = 39976, .len = 1 }, + .{ .cp = 0xFF4E, .start = 39977, .len = 1 }, + .{ .cp = 0xFF4F, .start = 39978, .len = 1 }, + .{ .cp = 0xFF50, .start = 39979, .len = 1 }, + .{ .cp = 0xFF51, .start = 39980, .len = 1 }, + .{ .cp = 0xFF52, .start = 39981, .len = 1 }, + .{ .cp = 0xFF53, .start = 39982, .len = 1 }, + .{ .cp = 0xFF54, .start = 39983, .len = 1 }, + .{ .cp = 0xFF55, .start = 39984, .len = 1 }, + .{ .cp = 0xFF56, .start = 39985, .len = 1 }, + .{ .cp = 0xFF57, .start = 39986, .len = 1 }, + .{ .cp = 0xFF58, .start = 39987, .len = 1 }, + .{ .cp = 0xFF59, .start = 39988, .len = 1 }, + .{ .cp = 0xFF5A, .start = 39989, .len = 1 }, + .{ .cp = 0xFF5B, .start = 39990, .len = 1 }, + .{ .cp = 0xFF5C, .start = 39991, .len = 1 }, + .{ .cp = 0xFF5D, .start = 39992, .len = 1 }, + .{ .cp = 0xFF5E, .start = 39993, .len = 1 }, + .{ .cp = 0xFF5F, .start = 39994, .len = 1 }, + .{ .cp = 0xFF60, .start = 39995, .len = 1 }, + .{ .cp = 0xFF61, .start = 39996, .len = 1 }, + .{ .cp = 0xFF62, .start = 39997, .len = 1 }, + .{ .cp = 0xFF63, .start = 39998, .len = 1 }, + .{ .cp = 0xFF64, .start = 39999, .len = 1 }, + .{ .cp = 0xFF65, .start = 40000, .len = 1 }, + .{ .cp = 0xFF66, .start = 40001, .len = 1 }, + .{ .cp = 0xFF67, .start = 40002, .len = 1 }, + .{ .cp = 0xFF68, .start = 40003, .len = 1 }, + .{ .cp = 0xFF69, .start = 40004, .len = 1 }, + .{ .cp = 0xFF6A, .start = 40005, .len = 1 }, + .{ .cp = 0xFF6B, .start = 40006, .len = 1 }, + .{ .cp = 0xFF6C, .start = 40007, .len = 1 }, + .{ .cp = 0xFF6D, .start = 40008, .len = 1 }, + .{ .cp = 0xFF6E, .start = 40009, .len = 1 }, + .{ .cp = 0xFF6F, .start = 40010, .len = 1 }, + .{ .cp = 0xFF70, .start = 40011, .len = 1 }, + .{ .cp = 0xFF71, .start = 40012, .len = 1 }, + .{ .cp = 0xFF72, .start = 40013, .len = 1 }, + .{ .cp = 0xFF73, .start = 40014, .len = 1 }, + .{ .cp = 0xFF74, .start = 40015, .len = 1 }, + .{ .cp = 0xFF75, .start = 40016, .len = 1 }, + .{ .cp = 0xFF76, .start = 40017, .len = 1 }, + .{ .cp = 0xFF77, .start = 40018, .len = 1 }, + .{ .cp = 0xFF78, .start = 40019, .len = 1 }, + .{ .cp = 0xFF79, .start = 40020, .len = 1 }, + .{ .cp = 0xFF7A, .start = 40021, .len = 1 }, + .{ .cp = 0xFF7B, .start = 40022, .len = 1 }, + .{ .cp = 0xFF7C, .start = 40023, .len = 1 }, + .{ .cp = 0xFF7D, .start = 40024, .len = 1 }, + .{ .cp = 0xFF7E, .start = 40025, .len = 1 }, + .{ .cp = 0xFF7F, .start = 40026, .len = 1 }, + .{ .cp = 0xFF80, .start = 40027, .len = 1 }, + .{ .cp = 0xFF81, .start = 40028, .len = 1 }, + .{ .cp = 0xFF82, .start = 40029, .len = 1 }, + .{ .cp = 0xFF83, .start = 40030, .len = 1 }, + .{ .cp = 0xFF84, .start = 40031, .len = 1 }, + .{ .cp = 0xFF85, .start = 40032, .len = 1 }, + .{ .cp = 0xFF86, .start = 40033, .len = 1 }, + .{ .cp = 0xFF87, .start = 40034, .len = 1 }, + .{ .cp = 0xFF88, .start = 40035, .len = 1 }, + .{ .cp = 0xFF89, .start = 40036, .len = 1 }, + .{ .cp = 0xFF8A, .start = 40037, .len = 1 }, + .{ .cp = 0xFF8B, .start = 40038, .len = 1 }, + .{ .cp = 0xFF8C, .start = 40039, .len = 1 }, + .{ .cp = 0xFF8D, .start = 40040, .len = 1 }, + .{ .cp = 0xFF8E, .start = 40041, .len = 1 }, + .{ .cp = 0xFF8F, .start = 40042, .len = 1 }, + .{ .cp = 0xFF90, .start = 40043, .len = 1 }, + .{ .cp = 0xFF91, .start = 40044, .len = 1 }, + .{ .cp = 0xFF92, .start = 40045, .len = 1 }, + .{ .cp = 0xFF93, .start = 40046, .len = 1 }, + .{ .cp = 0xFF94, .start = 40047, .len = 1 }, + .{ .cp = 0xFF95, .start = 40048, .len = 1 }, + .{ .cp = 0xFF96, .start = 40049, .len = 1 }, + .{ .cp = 0xFF97, .start = 40050, .len = 1 }, + .{ .cp = 0xFF98, .start = 40051, .len = 1 }, + .{ .cp = 0xFF99, .start = 40052, .len = 1 }, + .{ .cp = 0xFF9A, .start = 40053, .len = 1 }, + .{ .cp = 0xFF9B, .start = 40054, .len = 1 }, + .{ .cp = 0xFF9C, .start = 40055, .len = 1 }, + .{ .cp = 0xFF9D, .start = 40056, .len = 1 }, + .{ .cp = 0xFF9E, .start = 40057, .len = 1 }, + .{ .cp = 0xFF9F, .start = 40058, .len = 1 }, + .{ .cp = 0xFFA0, .start = 40059, .len = 1 }, + .{ .cp = 0xFFA1, .start = 40060, .len = 1 }, + .{ .cp = 0xFFA2, .start = 40061, .len = 1 }, + .{ .cp = 0xFFA3, .start = 40062, .len = 1 }, + .{ .cp = 0xFFA4, .start = 40063, .len = 1 }, + .{ .cp = 0xFFA5, .start = 40064, .len = 1 }, + .{ .cp = 0xFFA6, .start = 40065, .len = 1 }, + .{ .cp = 0xFFA7, .start = 40066, .len = 1 }, + .{ .cp = 0xFFA8, .start = 40067, .len = 1 }, + .{ .cp = 0xFFA9, .start = 40068, .len = 1 }, + .{ .cp = 0xFFAA, .start = 40069, .len = 1 }, + .{ .cp = 0xFFAB, .start = 40070, .len = 1 }, + .{ .cp = 0xFFAC, .start = 40071, .len = 1 }, + .{ .cp = 0xFFAD, .start = 40072, .len = 1 }, + .{ .cp = 0xFFAE, .start = 40073, .len = 1 }, + .{ .cp = 0xFFAF, .start = 40074, .len = 1 }, + .{ .cp = 0xFFB0, .start = 40075, .len = 1 }, + .{ .cp = 0xFFB1, .start = 40076, .len = 1 }, + .{ .cp = 0xFFB2, .start = 40077, .len = 1 }, + .{ .cp = 0xFFB3, .start = 40078, .len = 1 }, + .{ .cp = 0xFFB4, .start = 40079, .len = 1 }, + .{ .cp = 0xFFB5, .start = 40080, .len = 1 }, + .{ .cp = 0xFFB6, .start = 40081, .len = 1 }, + .{ .cp = 0xFFB7, .start = 40082, .len = 1 }, + .{ .cp = 0xFFB8, .start = 40083, .len = 1 }, + .{ .cp = 0xFFB9, .start = 40084, .len = 1 }, + .{ .cp = 0xFFBA, .start = 40085, .len = 1 }, + .{ .cp = 0xFFBB, .start = 40086, .len = 1 }, + .{ .cp = 0xFFBC, .start = 40087, .len = 1 }, + .{ .cp = 0xFFBD, .start = 40088, .len = 1 }, + .{ .cp = 0xFFBE, .start = 40089, .len = 1 }, + .{ .cp = 0xFFC2, .start = 40090, .len = 1 }, + .{ .cp = 0xFFC3, .start = 40091, .len = 1 }, + .{ .cp = 0xFFC4, .start = 40092, .len = 1 }, + .{ .cp = 0xFFC5, .start = 40093, .len = 1 }, + .{ .cp = 0xFFC6, .start = 40094, .len = 1 }, + .{ .cp = 0xFFC7, .start = 40095, .len = 1 }, + .{ .cp = 0xFFCA, .start = 40096, .len = 1 }, + .{ .cp = 0xFFCB, .start = 40097, .len = 1 }, + .{ .cp = 0xFFCC, .start = 40098, .len = 1 }, + .{ .cp = 0xFFCD, .start = 40099, .len = 1 }, + .{ .cp = 0xFFCE, .start = 40100, .len = 1 }, + .{ .cp = 0xFFCF, .start = 40101, .len = 1 }, + .{ .cp = 0xFFD2, .start = 40102, .len = 1 }, + .{ .cp = 0xFFD3, .start = 40103, .len = 1 }, + .{ .cp = 0xFFD4, .start = 40104, .len = 1 }, + .{ .cp = 0xFFD5, .start = 40105, .len = 1 }, + .{ .cp = 0xFFD6, .start = 40106, .len = 1 }, + .{ .cp = 0xFFD7, .start = 40107, .len = 1 }, + .{ .cp = 0xFFDA, .start = 40108, .len = 1 }, + .{ .cp = 0xFFDB, .start = 40109, .len = 1 }, + .{ .cp = 0xFFDC, .start = 40110, .len = 1 }, + .{ .cp = 0xFFE0, .start = 40111, .len = 1 }, + .{ .cp = 0xFFE1, .start = 40112, .len = 1 }, + .{ .cp = 0xFFE2, .start = 40113, .len = 1 }, + .{ .cp = 0xFFE3, .start = 40114, .len = 2 }, + .{ .cp = 0xFFE4, .start = 40116, .len = 1 }, + .{ .cp = 0xFFE5, .start = 40117, .len = 1 }, + .{ .cp = 0xFFE6, .start = 40118, .len = 1 }, + .{ .cp = 0xFFE8, .start = 40119, .len = 1 }, + .{ .cp = 0xFFE9, .start = 40120, .len = 1 }, + .{ .cp = 0xFFEA, .start = 40121, .len = 1 }, + .{ .cp = 0xFFEB, .start = 40122, .len = 1 }, + .{ .cp = 0xFFEC, .start = 40123, .len = 1 }, + .{ .cp = 0xFFED, .start = 40124, .len = 1 }, + .{ .cp = 0xFFEE, .start = 40125, .len = 1 }, + .{ .cp = 0x105C9, .start = 40126, .len = 2 }, + .{ .cp = 0x105E4, .start = 40128, .len = 2 }, + .{ .cp = 0x10781, .start = 40130, .len = 1 }, + .{ .cp = 0x10782, .start = 40131, .len = 1 }, + .{ .cp = 0x10783, .start = 40132, .len = 1 }, + .{ .cp = 0x10784, .start = 40133, .len = 1 }, + .{ .cp = 0x10785, .start = 40134, .len = 1 }, + .{ .cp = 0x10787, .start = 40135, .len = 1 }, + .{ .cp = 0x10788, .start = 40136, .len = 1 }, + .{ .cp = 0x10789, .start = 40137, .len = 1 }, + .{ .cp = 0x1078A, .start = 40138, .len = 1 }, + .{ .cp = 0x1078B, .start = 40139, .len = 1 }, + .{ .cp = 0x1078C, .start = 40140, .len = 1 }, + .{ .cp = 0x1078D, .start = 40141, .len = 1 }, + .{ .cp = 0x1078E, .start = 40142, .len = 1 }, + .{ .cp = 0x1078F, .start = 40143, .len = 1 }, + .{ .cp = 0x10790, .start = 40144, .len = 1 }, + .{ .cp = 0x10791, .start = 40145, .len = 1 }, + .{ .cp = 0x10792, .start = 40146, .len = 1 }, + .{ .cp = 0x10793, .start = 40147, .len = 1 }, + .{ .cp = 0x10794, .start = 40148, .len = 1 }, + .{ .cp = 0x10795, .start = 40149, .len = 1 }, + .{ .cp = 0x10796, .start = 40150, .len = 1 }, + .{ .cp = 0x10797, .start = 40151, .len = 1 }, + .{ .cp = 0x10798, .start = 40152, .len = 1 }, + .{ .cp = 0x10799, .start = 40153, .len = 1 }, + .{ .cp = 0x1079A, .start = 40154, .len = 1 }, + .{ .cp = 0x1079B, .start = 40155, .len = 1 }, + .{ .cp = 0x1079C, .start = 40156, .len = 1 }, + .{ .cp = 0x1079D, .start = 40157, .len = 1 }, + .{ .cp = 0x1079E, .start = 40158, .len = 1 }, + .{ .cp = 0x1079F, .start = 40159, .len = 1 }, + .{ .cp = 0x107A0, .start = 40160, .len = 1 }, + .{ .cp = 0x107A1, .start = 40161, .len = 1 }, + .{ .cp = 0x107A2, .start = 40162, .len = 1 }, + .{ .cp = 0x107A3, .start = 40163, .len = 1 }, + .{ .cp = 0x107A4, .start = 40164, .len = 1 }, + .{ .cp = 0x107A5, .start = 40165, .len = 1 }, + .{ .cp = 0x107A6, .start = 40166, .len = 1 }, + .{ .cp = 0x107A7, .start = 40167, .len = 1 }, + .{ .cp = 0x107A8, .start = 40168, .len = 1 }, + .{ .cp = 0x107A9, .start = 40169, .len = 1 }, + .{ .cp = 0x107AA, .start = 40170, .len = 1 }, + .{ .cp = 0x107AB, .start = 40171, .len = 1 }, + .{ .cp = 0x107AC, .start = 40172, .len = 1 }, + .{ .cp = 0x107AD, .start = 40173, .len = 1 }, + .{ .cp = 0x107AE, .start = 40174, .len = 1 }, + .{ .cp = 0x107AF, .start = 40175, .len = 1 }, + .{ .cp = 0x107B0, .start = 40176, .len = 1 }, + .{ .cp = 0x107B2, .start = 40177, .len = 1 }, + .{ .cp = 0x107B3, .start = 40178, .len = 1 }, + .{ .cp = 0x107B4, .start = 40179, .len = 1 }, + .{ .cp = 0x107B5, .start = 40180, .len = 1 }, + .{ .cp = 0x107B6, .start = 40181, .len = 1 }, + .{ .cp = 0x107B7, .start = 40182, .len = 1 }, + .{ .cp = 0x107B8, .start = 40183, .len = 1 }, + .{ .cp = 0x107B9, .start = 40184, .len = 1 }, + .{ .cp = 0x107BA, .start = 40185, .len = 1 }, + .{ .cp = 0x1109A, .start = 40186, .len = 2 }, + .{ .cp = 0x1109C, .start = 40188, .len = 2 }, + .{ .cp = 0x110AB, .start = 40190, .len = 2 }, + .{ .cp = 0x1112E, .start = 40192, .len = 2 }, + .{ .cp = 0x1112F, .start = 40194, .len = 2 }, + .{ .cp = 0x1134B, .start = 40196, .len = 2 }, + .{ .cp = 0x1134C, .start = 40198, .len = 2 }, + .{ .cp = 0x11383, .start = 40200, .len = 2 }, + .{ .cp = 0x11385, .start = 40202, .len = 2 }, + .{ .cp = 0x1138E, .start = 40204, .len = 2 }, + .{ .cp = 0x11391, .start = 40206, .len = 2 }, + .{ .cp = 0x113C5, .start = 40208, .len = 2 }, + .{ .cp = 0x113C7, .start = 40210, .len = 2 }, + .{ .cp = 0x113C8, .start = 40212, .len = 2 }, + .{ .cp = 0x114BB, .start = 40214, .len = 2 }, + .{ .cp = 0x114BC, .start = 40216, .len = 2 }, + .{ .cp = 0x114BE, .start = 40218, .len = 2 }, + .{ .cp = 0x115BA, .start = 40220, .len = 2 }, + .{ .cp = 0x115BB, .start = 40222, .len = 2 }, + .{ .cp = 0x11938, .start = 40224, .len = 2 }, + .{ .cp = 0x16121, .start = 40226, .len = 2 }, + .{ .cp = 0x16122, .start = 40228, .len = 2 }, + .{ .cp = 0x16123, .start = 40230, .len = 2 }, + .{ .cp = 0x16124, .start = 40232, .len = 2 }, + .{ .cp = 0x16125, .start = 40234, .len = 2 }, + .{ .cp = 0x16126, .start = 40236, .len = 3 }, + .{ .cp = 0x16127, .start = 40239, .len = 3 }, + .{ .cp = 0x16128, .start = 40242, .len = 3 }, + .{ .cp = 0x16D68, .start = 40245, .len = 2 }, + .{ .cp = 0x16D69, .start = 40247, .len = 2 }, + .{ .cp = 0x16D6A, .start = 40249, .len = 3 }, + .{ .cp = 0x1CCD6, .start = 40252, .len = 1 }, + .{ .cp = 0x1CCD7, .start = 40253, .len = 1 }, + .{ .cp = 0x1CCD8, .start = 40254, .len = 1 }, + .{ .cp = 0x1CCD9, .start = 40255, .len = 1 }, + .{ .cp = 0x1CCDA, .start = 40256, .len = 1 }, + .{ .cp = 0x1CCDB, .start = 40257, .len = 1 }, + .{ .cp = 0x1CCDC, .start = 40258, .len = 1 }, + .{ .cp = 0x1CCDD, .start = 40259, .len = 1 }, + .{ .cp = 0x1CCDE, .start = 40260, .len = 1 }, + .{ .cp = 0x1CCDF, .start = 40261, .len = 1 }, + .{ .cp = 0x1CCE0, .start = 40262, .len = 1 }, + .{ .cp = 0x1CCE1, .start = 40263, .len = 1 }, + .{ .cp = 0x1CCE2, .start = 40264, .len = 1 }, + .{ .cp = 0x1CCE3, .start = 40265, .len = 1 }, + .{ .cp = 0x1CCE4, .start = 40266, .len = 1 }, + .{ .cp = 0x1CCE5, .start = 40267, .len = 1 }, + .{ .cp = 0x1CCE6, .start = 40268, .len = 1 }, + .{ .cp = 0x1CCE7, .start = 40269, .len = 1 }, + .{ .cp = 0x1CCE8, .start = 40270, .len = 1 }, + .{ .cp = 0x1CCE9, .start = 40271, .len = 1 }, + .{ .cp = 0x1CCEA, .start = 40272, .len = 1 }, + .{ .cp = 0x1CCEB, .start = 40273, .len = 1 }, + .{ .cp = 0x1CCEC, .start = 40274, .len = 1 }, + .{ .cp = 0x1CCED, .start = 40275, .len = 1 }, + .{ .cp = 0x1CCEE, .start = 40276, .len = 1 }, + .{ .cp = 0x1CCEF, .start = 40277, .len = 1 }, + .{ .cp = 0x1CCF0, .start = 40278, .len = 1 }, + .{ .cp = 0x1CCF1, .start = 40279, .len = 1 }, + .{ .cp = 0x1CCF2, .start = 40280, .len = 1 }, + .{ .cp = 0x1CCF3, .start = 40281, .len = 1 }, + .{ .cp = 0x1CCF4, .start = 40282, .len = 1 }, + .{ .cp = 0x1CCF5, .start = 40283, .len = 1 }, + .{ .cp = 0x1CCF6, .start = 40284, .len = 1 }, + .{ .cp = 0x1CCF7, .start = 40285, .len = 1 }, + .{ .cp = 0x1CCF8, .start = 40286, .len = 1 }, + .{ .cp = 0x1CCF9, .start = 40287, .len = 1 }, + .{ .cp = 0x1D15E, .start = 40288, .len = 2 }, + .{ .cp = 0x1D15F, .start = 40290, .len = 2 }, + .{ .cp = 0x1D160, .start = 40292, .len = 3 }, + .{ .cp = 0x1D161, .start = 40295, .len = 3 }, + .{ .cp = 0x1D162, .start = 40298, .len = 3 }, + .{ .cp = 0x1D163, .start = 40301, .len = 3 }, + .{ .cp = 0x1D164, .start = 40304, .len = 3 }, + .{ .cp = 0x1D1BB, .start = 40307, .len = 2 }, + .{ .cp = 0x1D1BC, .start = 40309, .len = 2 }, + .{ .cp = 0x1D1BD, .start = 40311, .len = 3 }, + .{ .cp = 0x1D1BE, .start = 40314, .len = 3 }, + .{ .cp = 0x1D1BF, .start = 40317, .len = 3 }, + .{ .cp = 0x1D1C0, .start = 40320, .len = 3 }, + .{ .cp = 0x1D400, .start = 40323, .len = 1 }, + .{ .cp = 0x1D401, .start = 40324, .len = 1 }, + .{ .cp = 0x1D402, .start = 40325, .len = 1 }, + .{ .cp = 0x1D403, .start = 40326, .len = 1 }, + .{ .cp = 0x1D404, .start = 40327, .len = 1 }, + .{ .cp = 0x1D405, .start = 40328, .len = 1 }, + .{ .cp = 0x1D406, .start = 40329, .len = 1 }, + .{ .cp = 0x1D407, .start = 40330, .len = 1 }, + .{ .cp = 0x1D408, .start = 40331, .len = 1 }, + .{ .cp = 0x1D409, .start = 40332, .len = 1 }, + .{ .cp = 0x1D40A, .start = 40333, .len = 1 }, + .{ .cp = 0x1D40B, .start = 40334, .len = 1 }, + .{ .cp = 0x1D40C, .start = 40335, .len = 1 }, + .{ .cp = 0x1D40D, .start = 40336, .len = 1 }, + .{ .cp = 0x1D40E, .start = 40337, .len = 1 }, + .{ .cp = 0x1D40F, .start = 40338, .len = 1 }, + .{ .cp = 0x1D410, .start = 40339, .len = 1 }, + .{ .cp = 0x1D411, .start = 40340, .len = 1 }, + .{ .cp = 0x1D412, .start = 40341, .len = 1 }, + .{ .cp = 0x1D413, .start = 40342, .len = 1 }, + .{ .cp = 0x1D414, .start = 40343, .len = 1 }, + .{ .cp = 0x1D415, .start = 40344, .len = 1 }, + .{ .cp = 0x1D416, .start = 40345, .len = 1 }, + .{ .cp = 0x1D417, .start = 40346, .len = 1 }, + .{ .cp = 0x1D418, .start = 40347, .len = 1 }, + .{ .cp = 0x1D419, .start = 40348, .len = 1 }, + .{ .cp = 0x1D41A, .start = 40349, .len = 1 }, + .{ .cp = 0x1D41B, .start = 40350, .len = 1 }, + .{ .cp = 0x1D41C, .start = 40351, .len = 1 }, + .{ .cp = 0x1D41D, .start = 40352, .len = 1 }, + .{ .cp = 0x1D41E, .start = 40353, .len = 1 }, + .{ .cp = 0x1D41F, .start = 40354, .len = 1 }, + .{ .cp = 0x1D420, .start = 40355, .len = 1 }, + .{ .cp = 0x1D421, .start = 40356, .len = 1 }, + .{ .cp = 0x1D422, .start = 40357, .len = 1 }, + .{ .cp = 0x1D423, .start = 40358, .len = 1 }, + .{ .cp = 0x1D424, .start = 40359, .len = 1 }, + .{ .cp = 0x1D425, .start = 40360, .len = 1 }, + .{ .cp = 0x1D426, .start = 40361, .len = 1 }, + .{ .cp = 0x1D427, .start = 40362, .len = 1 }, + .{ .cp = 0x1D428, .start = 40363, .len = 1 }, + .{ .cp = 0x1D429, .start = 40364, .len = 1 }, + .{ .cp = 0x1D42A, .start = 40365, .len = 1 }, + .{ .cp = 0x1D42B, .start = 40366, .len = 1 }, + .{ .cp = 0x1D42C, .start = 40367, .len = 1 }, + .{ .cp = 0x1D42D, .start = 40368, .len = 1 }, + .{ .cp = 0x1D42E, .start = 40369, .len = 1 }, + .{ .cp = 0x1D42F, .start = 40370, .len = 1 }, + .{ .cp = 0x1D430, .start = 40371, .len = 1 }, + .{ .cp = 0x1D431, .start = 40372, .len = 1 }, + .{ .cp = 0x1D432, .start = 40373, .len = 1 }, + .{ .cp = 0x1D433, .start = 40374, .len = 1 }, + .{ .cp = 0x1D434, .start = 40375, .len = 1 }, + .{ .cp = 0x1D435, .start = 40376, .len = 1 }, + .{ .cp = 0x1D436, .start = 40377, .len = 1 }, + .{ .cp = 0x1D437, .start = 40378, .len = 1 }, + .{ .cp = 0x1D438, .start = 40379, .len = 1 }, + .{ .cp = 0x1D439, .start = 40380, .len = 1 }, + .{ .cp = 0x1D43A, .start = 40381, .len = 1 }, + .{ .cp = 0x1D43B, .start = 40382, .len = 1 }, + .{ .cp = 0x1D43C, .start = 40383, .len = 1 }, + .{ .cp = 0x1D43D, .start = 40384, .len = 1 }, + .{ .cp = 0x1D43E, .start = 40385, .len = 1 }, + .{ .cp = 0x1D43F, .start = 40386, .len = 1 }, + .{ .cp = 0x1D440, .start = 40387, .len = 1 }, + .{ .cp = 0x1D441, .start = 40388, .len = 1 }, + .{ .cp = 0x1D442, .start = 40389, .len = 1 }, + .{ .cp = 0x1D443, .start = 40390, .len = 1 }, + .{ .cp = 0x1D444, .start = 40391, .len = 1 }, + .{ .cp = 0x1D445, .start = 40392, .len = 1 }, + .{ .cp = 0x1D446, .start = 40393, .len = 1 }, + .{ .cp = 0x1D447, .start = 40394, .len = 1 }, + .{ .cp = 0x1D448, .start = 40395, .len = 1 }, + .{ .cp = 0x1D449, .start = 40396, .len = 1 }, + .{ .cp = 0x1D44A, .start = 40397, .len = 1 }, + .{ .cp = 0x1D44B, .start = 40398, .len = 1 }, + .{ .cp = 0x1D44C, .start = 40399, .len = 1 }, + .{ .cp = 0x1D44D, .start = 40400, .len = 1 }, + .{ .cp = 0x1D44E, .start = 40401, .len = 1 }, + .{ .cp = 0x1D44F, .start = 40402, .len = 1 }, + .{ .cp = 0x1D450, .start = 40403, .len = 1 }, + .{ .cp = 0x1D451, .start = 40404, .len = 1 }, + .{ .cp = 0x1D452, .start = 40405, .len = 1 }, + .{ .cp = 0x1D453, .start = 40406, .len = 1 }, + .{ .cp = 0x1D454, .start = 40407, .len = 1 }, + .{ .cp = 0x1D456, .start = 40408, .len = 1 }, + .{ .cp = 0x1D457, .start = 40409, .len = 1 }, + .{ .cp = 0x1D458, .start = 40410, .len = 1 }, + .{ .cp = 0x1D459, .start = 40411, .len = 1 }, + .{ .cp = 0x1D45A, .start = 40412, .len = 1 }, + .{ .cp = 0x1D45B, .start = 40413, .len = 1 }, + .{ .cp = 0x1D45C, .start = 40414, .len = 1 }, + .{ .cp = 0x1D45D, .start = 40415, .len = 1 }, + .{ .cp = 0x1D45E, .start = 40416, .len = 1 }, + .{ .cp = 0x1D45F, .start = 40417, .len = 1 }, + .{ .cp = 0x1D460, .start = 40418, .len = 1 }, + .{ .cp = 0x1D461, .start = 40419, .len = 1 }, + .{ .cp = 0x1D462, .start = 40420, .len = 1 }, + .{ .cp = 0x1D463, .start = 40421, .len = 1 }, + .{ .cp = 0x1D464, .start = 40422, .len = 1 }, + .{ .cp = 0x1D465, .start = 40423, .len = 1 }, + .{ .cp = 0x1D466, .start = 40424, .len = 1 }, + .{ .cp = 0x1D467, .start = 40425, .len = 1 }, + .{ .cp = 0x1D468, .start = 40426, .len = 1 }, + .{ .cp = 0x1D469, .start = 40427, .len = 1 }, + .{ .cp = 0x1D46A, .start = 40428, .len = 1 }, + .{ .cp = 0x1D46B, .start = 40429, .len = 1 }, + .{ .cp = 0x1D46C, .start = 40430, .len = 1 }, + .{ .cp = 0x1D46D, .start = 40431, .len = 1 }, + .{ .cp = 0x1D46E, .start = 40432, .len = 1 }, + .{ .cp = 0x1D46F, .start = 40433, .len = 1 }, + .{ .cp = 0x1D470, .start = 40434, .len = 1 }, + .{ .cp = 0x1D471, .start = 40435, .len = 1 }, + .{ .cp = 0x1D472, .start = 40436, .len = 1 }, + .{ .cp = 0x1D473, .start = 40437, .len = 1 }, + .{ .cp = 0x1D474, .start = 40438, .len = 1 }, + .{ .cp = 0x1D475, .start = 40439, .len = 1 }, + .{ .cp = 0x1D476, .start = 40440, .len = 1 }, + .{ .cp = 0x1D477, .start = 40441, .len = 1 }, + .{ .cp = 0x1D478, .start = 40442, .len = 1 }, + .{ .cp = 0x1D479, .start = 40443, .len = 1 }, + .{ .cp = 0x1D47A, .start = 40444, .len = 1 }, + .{ .cp = 0x1D47B, .start = 40445, .len = 1 }, + .{ .cp = 0x1D47C, .start = 40446, .len = 1 }, + .{ .cp = 0x1D47D, .start = 40447, .len = 1 }, + .{ .cp = 0x1D47E, .start = 40448, .len = 1 }, + .{ .cp = 0x1D47F, .start = 40449, .len = 1 }, + .{ .cp = 0x1D480, .start = 40450, .len = 1 }, + .{ .cp = 0x1D481, .start = 40451, .len = 1 }, + .{ .cp = 0x1D482, .start = 40452, .len = 1 }, + .{ .cp = 0x1D483, .start = 40453, .len = 1 }, + .{ .cp = 0x1D484, .start = 40454, .len = 1 }, + .{ .cp = 0x1D485, .start = 40455, .len = 1 }, + .{ .cp = 0x1D486, .start = 40456, .len = 1 }, + .{ .cp = 0x1D487, .start = 40457, .len = 1 }, + .{ .cp = 0x1D488, .start = 40458, .len = 1 }, + .{ .cp = 0x1D489, .start = 40459, .len = 1 }, + .{ .cp = 0x1D48A, .start = 40460, .len = 1 }, + .{ .cp = 0x1D48B, .start = 40461, .len = 1 }, + .{ .cp = 0x1D48C, .start = 40462, .len = 1 }, + .{ .cp = 0x1D48D, .start = 40463, .len = 1 }, + .{ .cp = 0x1D48E, .start = 40464, .len = 1 }, + .{ .cp = 0x1D48F, .start = 40465, .len = 1 }, + .{ .cp = 0x1D490, .start = 40466, .len = 1 }, + .{ .cp = 0x1D491, .start = 40467, .len = 1 }, + .{ .cp = 0x1D492, .start = 40468, .len = 1 }, + .{ .cp = 0x1D493, .start = 40469, .len = 1 }, + .{ .cp = 0x1D494, .start = 40470, .len = 1 }, + .{ .cp = 0x1D495, .start = 40471, .len = 1 }, + .{ .cp = 0x1D496, .start = 40472, .len = 1 }, + .{ .cp = 0x1D497, .start = 40473, .len = 1 }, + .{ .cp = 0x1D498, .start = 40474, .len = 1 }, + .{ .cp = 0x1D499, .start = 40475, .len = 1 }, + .{ .cp = 0x1D49A, .start = 40476, .len = 1 }, + .{ .cp = 0x1D49B, .start = 40477, .len = 1 }, + .{ .cp = 0x1D49C, .start = 40478, .len = 1 }, + .{ .cp = 0x1D49E, .start = 40479, .len = 1 }, + .{ .cp = 0x1D49F, .start = 40480, .len = 1 }, + .{ .cp = 0x1D4A2, .start = 40481, .len = 1 }, + .{ .cp = 0x1D4A5, .start = 40482, .len = 1 }, + .{ .cp = 0x1D4A6, .start = 40483, .len = 1 }, + .{ .cp = 0x1D4A9, .start = 40484, .len = 1 }, + .{ .cp = 0x1D4AA, .start = 40485, .len = 1 }, + .{ .cp = 0x1D4AB, .start = 40486, .len = 1 }, + .{ .cp = 0x1D4AC, .start = 40487, .len = 1 }, + .{ .cp = 0x1D4AE, .start = 40488, .len = 1 }, + .{ .cp = 0x1D4AF, .start = 40489, .len = 1 }, + .{ .cp = 0x1D4B0, .start = 40490, .len = 1 }, + .{ .cp = 0x1D4B1, .start = 40491, .len = 1 }, + .{ .cp = 0x1D4B2, .start = 40492, .len = 1 }, + .{ .cp = 0x1D4B3, .start = 40493, .len = 1 }, + .{ .cp = 0x1D4B4, .start = 40494, .len = 1 }, + .{ .cp = 0x1D4B5, .start = 40495, .len = 1 }, + .{ .cp = 0x1D4B6, .start = 40496, .len = 1 }, + .{ .cp = 0x1D4B7, .start = 40497, .len = 1 }, + .{ .cp = 0x1D4B8, .start = 40498, .len = 1 }, + .{ .cp = 0x1D4B9, .start = 40499, .len = 1 }, + .{ .cp = 0x1D4BB, .start = 40500, .len = 1 }, + .{ .cp = 0x1D4BD, .start = 40501, .len = 1 }, + .{ .cp = 0x1D4BE, .start = 40502, .len = 1 }, + .{ .cp = 0x1D4BF, .start = 40503, .len = 1 }, + .{ .cp = 0x1D4C0, .start = 40504, .len = 1 }, + .{ .cp = 0x1D4C1, .start = 40505, .len = 1 }, + .{ .cp = 0x1D4C2, .start = 40506, .len = 1 }, + .{ .cp = 0x1D4C3, .start = 40507, .len = 1 }, + .{ .cp = 0x1D4C5, .start = 40508, .len = 1 }, + .{ .cp = 0x1D4C6, .start = 40509, .len = 1 }, + .{ .cp = 0x1D4C7, .start = 40510, .len = 1 }, + .{ .cp = 0x1D4C8, .start = 40511, .len = 1 }, + .{ .cp = 0x1D4C9, .start = 40512, .len = 1 }, + .{ .cp = 0x1D4CA, .start = 40513, .len = 1 }, + .{ .cp = 0x1D4CB, .start = 40514, .len = 1 }, + .{ .cp = 0x1D4CC, .start = 40515, .len = 1 }, + .{ .cp = 0x1D4CD, .start = 40516, .len = 1 }, + .{ .cp = 0x1D4CE, .start = 40517, .len = 1 }, + .{ .cp = 0x1D4CF, .start = 40518, .len = 1 }, + .{ .cp = 0x1D4D0, .start = 40519, .len = 1 }, + .{ .cp = 0x1D4D1, .start = 40520, .len = 1 }, + .{ .cp = 0x1D4D2, .start = 40521, .len = 1 }, + .{ .cp = 0x1D4D3, .start = 40522, .len = 1 }, + .{ .cp = 0x1D4D4, .start = 40523, .len = 1 }, + .{ .cp = 0x1D4D5, .start = 40524, .len = 1 }, + .{ .cp = 0x1D4D6, .start = 40525, .len = 1 }, + .{ .cp = 0x1D4D7, .start = 40526, .len = 1 }, + .{ .cp = 0x1D4D8, .start = 40527, .len = 1 }, + .{ .cp = 0x1D4D9, .start = 40528, .len = 1 }, + .{ .cp = 0x1D4DA, .start = 40529, .len = 1 }, + .{ .cp = 0x1D4DB, .start = 40530, .len = 1 }, + .{ .cp = 0x1D4DC, .start = 40531, .len = 1 }, + .{ .cp = 0x1D4DD, .start = 40532, .len = 1 }, + .{ .cp = 0x1D4DE, .start = 40533, .len = 1 }, + .{ .cp = 0x1D4DF, .start = 40534, .len = 1 }, + .{ .cp = 0x1D4E0, .start = 40535, .len = 1 }, + .{ .cp = 0x1D4E1, .start = 40536, .len = 1 }, + .{ .cp = 0x1D4E2, .start = 40537, .len = 1 }, + .{ .cp = 0x1D4E3, .start = 40538, .len = 1 }, + .{ .cp = 0x1D4E4, .start = 40539, .len = 1 }, + .{ .cp = 0x1D4E5, .start = 40540, .len = 1 }, + .{ .cp = 0x1D4E6, .start = 40541, .len = 1 }, + .{ .cp = 0x1D4E7, .start = 40542, .len = 1 }, + .{ .cp = 0x1D4E8, .start = 40543, .len = 1 }, + .{ .cp = 0x1D4E9, .start = 40544, .len = 1 }, + .{ .cp = 0x1D4EA, .start = 40545, .len = 1 }, + .{ .cp = 0x1D4EB, .start = 40546, .len = 1 }, + .{ .cp = 0x1D4EC, .start = 40547, .len = 1 }, + .{ .cp = 0x1D4ED, .start = 40548, .len = 1 }, + .{ .cp = 0x1D4EE, .start = 40549, .len = 1 }, + .{ .cp = 0x1D4EF, .start = 40550, .len = 1 }, + .{ .cp = 0x1D4F0, .start = 40551, .len = 1 }, + .{ .cp = 0x1D4F1, .start = 40552, .len = 1 }, + .{ .cp = 0x1D4F2, .start = 40553, .len = 1 }, + .{ .cp = 0x1D4F3, .start = 40554, .len = 1 }, + .{ .cp = 0x1D4F4, .start = 40555, .len = 1 }, + .{ .cp = 0x1D4F5, .start = 40556, .len = 1 }, + .{ .cp = 0x1D4F6, .start = 40557, .len = 1 }, + .{ .cp = 0x1D4F7, .start = 40558, .len = 1 }, + .{ .cp = 0x1D4F8, .start = 40559, .len = 1 }, + .{ .cp = 0x1D4F9, .start = 40560, .len = 1 }, + .{ .cp = 0x1D4FA, .start = 40561, .len = 1 }, + .{ .cp = 0x1D4FB, .start = 40562, .len = 1 }, + .{ .cp = 0x1D4FC, .start = 40563, .len = 1 }, + .{ .cp = 0x1D4FD, .start = 40564, .len = 1 }, + .{ .cp = 0x1D4FE, .start = 40565, .len = 1 }, + .{ .cp = 0x1D4FF, .start = 40566, .len = 1 }, + .{ .cp = 0x1D500, .start = 40567, .len = 1 }, + .{ .cp = 0x1D501, .start = 40568, .len = 1 }, + .{ .cp = 0x1D502, .start = 40569, .len = 1 }, + .{ .cp = 0x1D503, .start = 40570, .len = 1 }, + .{ .cp = 0x1D504, .start = 40571, .len = 1 }, + .{ .cp = 0x1D505, .start = 40572, .len = 1 }, + .{ .cp = 0x1D507, .start = 40573, .len = 1 }, + .{ .cp = 0x1D508, .start = 40574, .len = 1 }, + .{ .cp = 0x1D509, .start = 40575, .len = 1 }, + .{ .cp = 0x1D50A, .start = 40576, .len = 1 }, + .{ .cp = 0x1D50D, .start = 40577, .len = 1 }, + .{ .cp = 0x1D50E, .start = 40578, .len = 1 }, + .{ .cp = 0x1D50F, .start = 40579, .len = 1 }, + .{ .cp = 0x1D510, .start = 40580, .len = 1 }, + .{ .cp = 0x1D511, .start = 40581, .len = 1 }, + .{ .cp = 0x1D512, .start = 40582, .len = 1 }, + .{ .cp = 0x1D513, .start = 40583, .len = 1 }, + .{ .cp = 0x1D514, .start = 40584, .len = 1 }, + .{ .cp = 0x1D516, .start = 40585, .len = 1 }, + .{ .cp = 0x1D517, .start = 40586, .len = 1 }, + .{ .cp = 0x1D518, .start = 40587, .len = 1 }, + .{ .cp = 0x1D519, .start = 40588, .len = 1 }, + .{ .cp = 0x1D51A, .start = 40589, .len = 1 }, + .{ .cp = 0x1D51B, .start = 40590, .len = 1 }, + .{ .cp = 0x1D51C, .start = 40591, .len = 1 }, + .{ .cp = 0x1D51E, .start = 40592, .len = 1 }, + .{ .cp = 0x1D51F, .start = 40593, .len = 1 }, + .{ .cp = 0x1D520, .start = 40594, .len = 1 }, + .{ .cp = 0x1D521, .start = 40595, .len = 1 }, + .{ .cp = 0x1D522, .start = 40596, .len = 1 }, + .{ .cp = 0x1D523, .start = 40597, .len = 1 }, + .{ .cp = 0x1D524, .start = 40598, .len = 1 }, + .{ .cp = 0x1D525, .start = 40599, .len = 1 }, + .{ .cp = 0x1D526, .start = 40600, .len = 1 }, + .{ .cp = 0x1D527, .start = 40601, .len = 1 }, + .{ .cp = 0x1D528, .start = 40602, .len = 1 }, + .{ .cp = 0x1D529, .start = 40603, .len = 1 }, + .{ .cp = 0x1D52A, .start = 40604, .len = 1 }, + .{ .cp = 0x1D52B, .start = 40605, .len = 1 }, + .{ .cp = 0x1D52C, .start = 40606, .len = 1 }, + .{ .cp = 0x1D52D, .start = 40607, .len = 1 }, + .{ .cp = 0x1D52E, .start = 40608, .len = 1 }, + .{ .cp = 0x1D52F, .start = 40609, .len = 1 }, + .{ .cp = 0x1D530, .start = 40610, .len = 1 }, + .{ .cp = 0x1D531, .start = 40611, .len = 1 }, + .{ .cp = 0x1D532, .start = 40612, .len = 1 }, + .{ .cp = 0x1D533, .start = 40613, .len = 1 }, + .{ .cp = 0x1D534, .start = 40614, .len = 1 }, + .{ .cp = 0x1D535, .start = 40615, .len = 1 }, + .{ .cp = 0x1D536, .start = 40616, .len = 1 }, + .{ .cp = 0x1D537, .start = 40617, .len = 1 }, + .{ .cp = 0x1D538, .start = 40618, .len = 1 }, + .{ .cp = 0x1D539, .start = 40619, .len = 1 }, + .{ .cp = 0x1D53B, .start = 40620, .len = 1 }, + .{ .cp = 0x1D53C, .start = 40621, .len = 1 }, + .{ .cp = 0x1D53D, .start = 40622, .len = 1 }, + .{ .cp = 0x1D53E, .start = 40623, .len = 1 }, + .{ .cp = 0x1D540, .start = 40624, .len = 1 }, + .{ .cp = 0x1D541, .start = 40625, .len = 1 }, + .{ .cp = 0x1D542, .start = 40626, .len = 1 }, + .{ .cp = 0x1D543, .start = 40627, .len = 1 }, + .{ .cp = 0x1D544, .start = 40628, .len = 1 }, + .{ .cp = 0x1D546, .start = 40629, .len = 1 }, + .{ .cp = 0x1D54A, .start = 40630, .len = 1 }, + .{ .cp = 0x1D54B, .start = 40631, .len = 1 }, + .{ .cp = 0x1D54C, .start = 40632, .len = 1 }, + .{ .cp = 0x1D54D, .start = 40633, .len = 1 }, + .{ .cp = 0x1D54E, .start = 40634, .len = 1 }, + .{ .cp = 0x1D54F, .start = 40635, .len = 1 }, + .{ .cp = 0x1D550, .start = 40636, .len = 1 }, + .{ .cp = 0x1D552, .start = 40637, .len = 1 }, + .{ .cp = 0x1D553, .start = 40638, .len = 1 }, + .{ .cp = 0x1D554, .start = 40639, .len = 1 }, + .{ .cp = 0x1D555, .start = 40640, .len = 1 }, + .{ .cp = 0x1D556, .start = 40641, .len = 1 }, + .{ .cp = 0x1D557, .start = 40642, .len = 1 }, + .{ .cp = 0x1D558, .start = 40643, .len = 1 }, + .{ .cp = 0x1D559, .start = 40644, .len = 1 }, + .{ .cp = 0x1D55A, .start = 40645, .len = 1 }, + .{ .cp = 0x1D55B, .start = 40646, .len = 1 }, + .{ .cp = 0x1D55C, .start = 40647, .len = 1 }, + .{ .cp = 0x1D55D, .start = 40648, .len = 1 }, + .{ .cp = 0x1D55E, .start = 40649, .len = 1 }, + .{ .cp = 0x1D55F, .start = 40650, .len = 1 }, + .{ .cp = 0x1D560, .start = 40651, .len = 1 }, + .{ .cp = 0x1D561, .start = 40652, .len = 1 }, + .{ .cp = 0x1D562, .start = 40653, .len = 1 }, + .{ .cp = 0x1D563, .start = 40654, .len = 1 }, + .{ .cp = 0x1D564, .start = 40655, .len = 1 }, + .{ .cp = 0x1D565, .start = 40656, .len = 1 }, + .{ .cp = 0x1D566, .start = 40657, .len = 1 }, + .{ .cp = 0x1D567, .start = 40658, .len = 1 }, + .{ .cp = 0x1D568, .start = 40659, .len = 1 }, + .{ .cp = 0x1D569, .start = 40660, .len = 1 }, + .{ .cp = 0x1D56A, .start = 40661, .len = 1 }, + .{ .cp = 0x1D56B, .start = 40662, .len = 1 }, + .{ .cp = 0x1D56C, .start = 40663, .len = 1 }, + .{ .cp = 0x1D56D, .start = 40664, .len = 1 }, + .{ .cp = 0x1D56E, .start = 40665, .len = 1 }, + .{ .cp = 0x1D56F, .start = 40666, .len = 1 }, + .{ .cp = 0x1D570, .start = 40667, .len = 1 }, + .{ .cp = 0x1D571, .start = 40668, .len = 1 }, + .{ .cp = 0x1D572, .start = 40669, .len = 1 }, + .{ .cp = 0x1D573, .start = 40670, .len = 1 }, + .{ .cp = 0x1D574, .start = 40671, .len = 1 }, + .{ .cp = 0x1D575, .start = 40672, .len = 1 }, + .{ .cp = 0x1D576, .start = 40673, .len = 1 }, + .{ .cp = 0x1D577, .start = 40674, .len = 1 }, + .{ .cp = 0x1D578, .start = 40675, .len = 1 }, + .{ .cp = 0x1D579, .start = 40676, .len = 1 }, + .{ .cp = 0x1D57A, .start = 40677, .len = 1 }, + .{ .cp = 0x1D57B, .start = 40678, .len = 1 }, + .{ .cp = 0x1D57C, .start = 40679, .len = 1 }, + .{ .cp = 0x1D57D, .start = 40680, .len = 1 }, + .{ .cp = 0x1D57E, .start = 40681, .len = 1 }, + .{ .cp = 0x1D57F, .start = 40682, .len = 1 }, + .{ .cp = 0x1D580, .start = 40683, .len = 1 }, + .{ .cp = 0x1D581, .start = 40684, .len = 1 }, + .{ .cp = 0x1D582, .start = 40685, .len = 1 }, + .{ .cp = 0x1D583, .start = 40686, .len = 1 }, + .{ .cp = 0x1D584, .start = 40687, .len = 1 }, + .{ .cp = 0x1D585, .start = 40688, .len = 1 }, + .{ .cp = 0x1D586, .start = 40689, .len = 1 }, + .{ .cp = 0x1D587, .start = 40690, .len = 1 }, + .{ .cp = 0x1D588, .start = 40691, .len = 1 }, + .{ .cp = 0x1D589, .start = 40692, .len = 1 }, + .{ .cp = 0x1D58A, .start = 40693, .len = 1 }, + .{ .cp = 0x1D58B, .start = 40694, .len = 1 }, + .{ .cp = 0x1D58C, .start = 40695, .len = 1 }, + .{ .cp = 0x1D58D, .start = 40696, .len = 1 }, + .{ .cp = 0x1D58E, .start = 40697, .len = 1 }, + .{ .cp = 0x1D58F, .start = 40698, .len = 1 }, + .{ .cp = 0x1D590, .start = 40699, .len = 1 }, + .{ .cp = 0x1D591, .start = 40700, .len = 1 }, + .{ .cp = 0x1D592, .start = 40701, .len = 1 }, + .{ .cp = 0x1D593, .start = 40702, .len = 1 }, + .{ .cp = 0x1D594, .start = 40703, .len = 1 }, + .{ .cp = 0x1D595, .start = 40704, .len = 1 }, + .{ .cp = 0x1D596, .start = 40705, .len = 1 }, + .{ .cp = 0x1D597, .start = 40706, .len = 1 }, + .{ .cp = 0x1D598, .start = 40707, .len = 1 }, + .{ .cp = 0x1D599, .start = 40708, .len = 1 }, + .{ .cp = 0x1D59A, .start = 40709, .len = 1 }, + .{ .cp = 0x1D59B, .start = 40710, .len = 1 }, + .{ .cp = 0x1D59C, .start = 40711, .len = 1 }, + .{ .cp = 0x1D59D, .start = 40712, .len = 1 }, + .{ .cp = 0x1D59E, .start = 40713, .len = 1 }, + .{ .cp = 0x1D59F, .start = 40714, .len = 1 }, + .{ .cp = 0x1D5A0, .start = 40715, .len = 1 }, + .{ .cp = 0x1D5A1, .start = 40716, .len = 1 }, + .{ .cp = 0x1D5A2, .start = 40717, .len = 1 }, + .{ .cp = 0x1D5A3, .start = 40718, .len = 1 }, + .{ .cp = 0x1D5A4, .start = 40719, .len = 1 }, + .{ .cp = 0x1D5A5, .start = 40720, .len = 1 }, + .{ .cp = 0x1D5A6, .start = 40721, .len = 1 }, + .{ .cp = 0x1D5A7, .start = 40722, .len = 1 }, + .{ .cp = 0x1D5A8, .start = 40723, .len = 1 }, + .{ .cp = 0x1D5A9, .start = 40724, .len = 1 }, + .{ .cp = 0x1D5AA, .start = 40725, .len = 1 }, + .{ .cp = 0x1D5AB, .start = 40726, .len = 1 }, + .{ .cp = 0x1D5AC, .start = 40727, .len = 1 }, + .{ .cp = 0x1D5AD, .start = 40728, .len = 1 }, + .{ .cp = 0x1D5AE, .start = 40729, .len = 1 }, + .{ .cp = 0x1D5AF, .start = 40730, .len = 1 }, + .{ .cp = 0x1D5B0, .start = 40731, .len = 1 }, + .{ .cp = 0x1D5B1, .start = 40732, .len = 1 }, + .{ .cp = 0x1D5B2, .start = 40733, .len = 1 }, + .{ .cp = 0x1D5B3, .start = 40734, .len = 1 }, + .{ .cp = 0x1D5B4, .start = 40735, .len = 1 }, + .{ .cp = 0x1D5B5, .start = 40736, .len = 1 }, + .{ .cp = 0x1D5B6, .start = 40737, .len = 1 }, + .{ .cp = 0x1D5B7, .start = 40738, .len = 1 }, + .{ .cp = 0x1D5B8, .start = 40739, .len = 1 }, + .{ .cp = 0x1D5B9, .start = 40740, .len = 1 }, + .{ .cp = 0x1D5BA, .start = 40741, .len = 1 }, + .{ .cp = 0x1D5BB, .start = 40742, .len = 1 }, + .{ .cp = 0x1D5BC, .start = 40743, .len = 1 }, + .{ .cp = 0x1D5BD, .start = 40744, .len = 1 }, + .{ .cp = 0x1D5BE, .start = 40745, .len = 1 }, + .{ .cp = 0x1D5BF, .start = 40746, .len = 1 }, + .{ .cp = 0x1D5C0, .start = 40747, .len = 1 }, + .{ .cp = 0x1D5C1, .start = 40748, .len = 1 }, + .{ .cp = 0x1D5C2, .start = 40749, .len = 1 }, + .{ .cp = 0x1D5C3, .start = 40750, .len = 1 }, + .{ .cp = 0x1D5C4, .start = 40751, .len = 1 }, + .{ .cp = 0x1D5C5, .start = 40752, .len = 1 }, + .{ .cp = 0x1D5C6, .start = 40753, .len = 1 }, + .{ .cp = 0x1D5C7, .start = 40754, .len = 1 }, + .{ .cp = 0x1D5C8, .start = 40755, .len = 1 }, + .{ .cp = 0x1D5C9, .start = 40756, .len = 1 }, + .{ .cp = 0x1D5CA, .start = 40757, .len = 1 }, + .{ .cp = 0x1D5CB, .start = 40758, .len = 1 }, + .{ .cp = 0x1D5CC, .start = 40759, .len = 1 }, + .{ .cp = 0x1D5CD, .start = 40760, .len = 1 }, + .{ .cp = 0x1D5CE, .start = 40761, .len = 1 }, + .{ .cp = 0x1D5CF, .start = 40762, .len = 1 }, + .{ .cp = 0x1D5D0, .start = 40763, .len = 1 }, + .{ .cp = 0x1D5D1, .start = 40764, .len = 1 }, + .{ .cp = 0x1D5D2, .start = 40765, .len = 1 }, + .{ .cp = 0x1D5D3, .start = 40766, .len = 1 }, + .{ .cp = 0x1D5D4, .start = 40767, .len = 1 }, + .{ .cp = 0x1D5D5, .start = 40768, .len = 1 }, + .{ .cp = 0x1D5D6, .start = 40769, .len = 1 }, + .{ .cp = 0x1D5D7, .start = 40770, .len = 1 }, + .{ .cp = 0x1D5D8, .start = 40771, .len = 1 }, + .{ .cp = 0x1D5D9, .start = 40772, .len = 1 }, + .{ .cp = 0x1D5DA, .start = 40773, .len = 1 }, + .{ .cp = 0x1D5DB, .start = 40774, .len = 1 }, + .{ .cp = 0x1D5DC, .start = 40775, .len = 1 }, + .{ .cp = 0x1D5DD, .start = 40776, .len = 1 }, + .{ .cp = 0x1D5DE, .start = 40777, .len = 1 }, + .{ .cp = 0x1D5DF, .start = 40778, .len = 1 }, + .{ .cp = 0x1D5E0, .start = 40779, .len = 1 }, + .{ .cp = 0x1D5E1, .start = 40780, .len = 1 }, + .{ .cp = 0x1D5E2, .start = 40781, .len = 1 }, + .{ .cp = 0x1D5E3, .start = 40782, .len = 1 }, + .{ .cp = 0x1D5E4, .start = 40783, .len = 1 }, + .{ .cp = 0x1D5E5, .start = 40784, .len = 1 }, + .{ .cp = 0x1D5E6, .start = 40785, .len = 1 }, + .{ .cp = 0x1D5E7, .start = 40786, .len = 1 }, + .{ .cp = 0x1D5E8, .start = 40787, .len = 1 }, + .{ .cp = 0x1D5E9, .start = 40788, .len = 1 }, + .{ .cp = 0x1D5EA, .start = 40789, .len = 1 }, + .{ .cp = 0x1D5EB, .start = 40790, .len = 1 }, + .{ .cp = 0x1D5EC, .start = 40791, .len = 1 }, + .{ .cp = 0x1D5ED, .start = 40792, .len = 1 }, + .{ .cp = 0x1D5EE, .start = 40793, .len = 1 }, + .{ .cp = 0x1D5EF, .start = 40794, .len = 1 }, + .{ .cp = 0x1D5F0, .start = 40795, .len = 1 }, + .{ .cp = 0x1D5F1, .start = 40796, .len = 1 }, + .{ .cp = 0x1D5F2, .start = 40797, .len = 1 }, + .{ .cp = 0x1D5F3, .start = 40798, .len = 1 }, + .{ .cp = 0x1D5F4, .start = 40799, .len = 1 }, + .{ .cp = 0x1D5F5, .start = 40800, .len = 1 }, + .{ .cp = 0x1D5F6, .start = 40801, .len = 1 }, + .{ .cp = 0x1D5F7, .start = 40802, .len = 1 }, + .{ .cp = 0x1D5F8, .start = 40803, .len = 1 }, + .{ .cp = 0x1D5F9, .start = 40804, .len = 1 }, + .{ .cp = 0x1D5FA, .start = 40805, .len = 1 }, + .{ .cp = 0x1D5FB, .start = 40806, .len = 1 }, + .{ .cp = 0x1D5FC, .start = 40807, .len = 1 }, + .{ .cp = 0x1D5FD, .start = 40808, .len = 1 }, + .{ .cp = 0x1D5FE, .start = 40809, .len = 1 }, + .{ .cp = 0x1D5FF, .start = 40810, .len = 1 }, + .{ .cp = 0x1D600, .start = 40811, .len = 1 }, + .{ .cp = 0x1D601, .start = 40812, .len = 1 }, + .{ .cp = 0x1D602, .start = 40813, .len = 1 }, + .{ .cp = 0x1D603, .start = 40814, .len = 1 }, + .{ .cp = 0x1D604, .start = 40815, .len = 1 }, + .{ .cp = 0x1D605, .start = 40816, .len = 1 }, + .{ .cp = 0x1D606, .start = 40817, .len = 1 }, + .{ .cp = 0x1D607, .start = 40818, .len = 1 }, + .{ .cp = 0x1D608, .start = 40819, .len = 1 }, + .{ .cp = 0x1D609, .start = 40820, .len = 1 }, + .{ .cp = 0x1D60A, .start = 40821, .len = 1 }, + .{ .cp = 0x1D60B, .start = 40822, .len = 1 }, + .{ .cp = 0x1D60C, .start = 40823, .len = 1 }, + .{ .cp = 0x1D60D, .start = 40824, .len = 1 }, + .{ .cp = 0x1D60E, .start = 40825, .len = 1 }, + .{ .cp = 0x1D60F, .start = 40826, .len = 1 }, + .{ .cp = 0x1D610, .start = 40827, .len = 1 }, + .{ .cp = 0x1D611, .start = 40828, .len = 1 }, + .{ .cp = 0x1D612, .start = 40829, .len = 1 }, + .{ .cp = 0x1D613, .start = 40830, .len = 1 }, + .{ .cp = 0x1D614, .start = 40831, .len = 1 }, + .{ .cp = 0x1D615, .start = 40832, .len = 1 }, + .{ .cp = 0x1D616, .start = 40833, .len = 1 }, + .{ .cp = 0x1D617, .start = 40834, .len = 1 }, + .{ .cp = 0x1D618, .start = 40835, .len = 1 }, + .{ .cp = 0x1D619, .start = 40836, .len = 1 }, + .{ .cp = 0x1D61A, .start = 40837, .len = 1 }, + .{ .cp = 0x1D61B, .start = 40838, .len = 1 }, + .{ .cp = 0x1D61C, .start = 40839, .len = 1 }, + .{ .cp = 0x1D61D, .start = 40840, .len = 1 }, + .{ .cp = 0x1D61E, .start = 40841, .len = 1 }, + .{ .cp = 0x1D61F, .start = 40842, .len = 1 }, + .{ .cp = 0x1D620, .start = 40843, .len = 1 }, + .{ .cp = 0x1D621, .start = 40844, .len = 1 }, + .{ .cp = 0x1D622, .start = 40845, .len = 1 }, + .{ .cp = 0x1D623, .start = 40846, .len = 1 }, + .{ .cp = 0x1D624, .start = 40847, .len = 1 }, + .{ .cp = 0x1D625, .start = 40848, .len = 1 }, + .{ .cp = 0x1D626, .start = 40849, .len = 1 }, + .{ .cp = 0x1D627, .start = 40850, .len = 1 }, + .{ .cp = 0x1D628, .start = 40851, .len = 1 }, + .{ .cp = 0x1D629, .start = 40852, .len = 1 }, + .{ .cp = 0x1D62A, .start = 40853, .len = 1 }, + .{ .cp = 0x1D62B, .start = 40854, .len = 1 }, + .{ .cp = 0x1D62C, .start = 40855, .len = 1 }, + .{ .cp = 0x1D62D, .start = 40856, .len = 1 }, + .{ .cp = 0x1D62E, .start = 40857, .len = 1 }, + .{ .cp = 0x1D62F, .start = 40858, .len = 1 }, + .{ .cp = 0x1D630, .start = 40859, .len = 1 }, + .{ .cp = 0x1D631, .start = 40860, .len = 1 }, + .{ .cp = 0x1D632, .start = 40861, .len = 1 }, + .{ .cp = 0x1D633, .start = 40862, .len = 1 }, + .{ .cp = 0x1D634, .start = 40863, .len = 1 }, + .{ .cp = 0x1D635, .start = 40864, .len = 1 }, + .{ .cp = 0x1D636, .start = 40865, .len = 1 }, + .{ .cp = 0x1D637, .start = 40866, .len = 1 }, + .{ .cp = 0x1D638, .start = 40867, .len = 1 }, + .{ .cp = 0x1D639, .start = 40868, .len = 1 }, + .{ .cp = 0x1D63A, .start = 40869, .len = 1 }, + .{ .cp = 0x1D63B, .start = 40870, .len = 1 }, + .{ .cp = 0x1D63C, .start = 40871, .len = 1 }, + .{ .cp = 0x1D63D, .start = 40872, .len = 1 }, + .{ .cp = 0x1D63E, .start = 40873, .len = 1 }, + .{ .cp = 0x1D63F, .start = 40874, .len = 1 }, + .{ .cp = 0x1D640, .start = 40875, .len = 1 }, + .{ .cp = 0x1D641, .start = 40876, .len = 1 }, + .{ .cp = 0x1D642, .start = 40877, .len = 1 }, + .{ .cp = 0x1D643, .start = 40878, .len = 1 }, + .{ .cp = 0x1D644, .start = 40879, .len = 1 }, + .{ .cp = 0x1D645, .start = 40880, .len = 1 }, + .{ .cp = 0x1D646, .start = 40881, .len = 1 }, + .{ .cp = 0x1D647, .start = 40882, .len = 1 }, + .{ .cp = 0x1D648, .start = 40883, .len = 1 }, + .{ .cp = 0x1D649, .start = 40884, .len = 1 }, + .{ .cp = 0x1D64A, .start = 40885, .len = 1 }, + .{ .cp = 0x1D64B, .start = 40886, .len = 1 }, + .{ .cp = 0x1D64C, .start = 40887, .len = 1 }, + .{ .cp = 0x1D64D, .start = 40888, .len = 1 }, + .{ .cp = 0x1D64E, .start = 40889, .len = 1 }, + .{ .cp = 0x1D64F, .start = 40890, .len = 1 }, + .{ .cp = 0x1D650, .start = 40891, .len = 1 }, + .{ .cp = 0x1D651, .start = 40892, .len = 1 }, + .{ .cp = 0x1D652, .start = 40893, .len = 1 }, + .{ .cp = 0x1D653, .start = 40894, .len = 1 }, + .{ .cp = 0x1D654, .start = 40895, .len = 1 }, + .{ .cp = 0x1D655, .start = 40896, .len = 1 }, + .{ .cp = 0x1D656, .start = 40897, .len = 1 }, + .{ .cp = 0x1D657, .start = 40898, .len = 1 }, + .{ .cp = 0x1D658, .start = 40899, .len = 1 }, + .{ .cp = 0x1D659, .start = 40900, .len = 1 }, + .{ .cp = 0x1D65A, .start = 40901, .len = 1 }, + .{ .cp = 0x1D65B, .start = 40902, .len = 1 }, + .{ .cp = 0x1D65C, .start = 40903, .len = 1 }, + .{ .cp = 0x1D65D, .start = 40904, .len = 1 }, + .{ .cp = 0x1D65E, .start = 40905, .len = 1 }, + .{ .cp = 0x1D65F, .start = 40906, .len = 1 }, + .{ .cp = 0x1D660, .start = 40907, .len = 1 }, + .{ .cp = 0x1D661, .start = 40908, .len = 1 }, + .{ .cp = 0x1D662, .start = 40909, .len = 1 }, + .{ .cp = 0x1D663, .start = 40910, .len = 1 }, + .{ .cp = 0x1D664, .start = 40911, .len = 1 }, + .{ .cp = 0x1D665, .start = 40912, .len = 1 }, + .{ .cp = 0x1D666, .start = 40913, .len = 1 }, + .{ .cp = 0x1D667, .start = 40914, .len = 1 }, + .{ .cp = 0x1D668, .start = 40915, .len = 1 }, + .{ .cp = 0x1D669, .start = 40916, .len = 1 }, + .{ .cp = 0x1D66A, .start = 40917, .len = 1 }, + .{ .cp = 0x1D66B, .start = 40918, .len = 1 }, + .{ .cp = 0x1D66C, .start = 40919, .len = 1 }, + .{ .cp = 0x1D66D, .start = 40920, .len = 1 }, + .{ .cp = 0x1D66E, .start = 40921, .len = 1 }, + .{ .cp = 0x1D66F, .start = 40922, .len = 1 }, + .{ .cp = 0x1D670, .start = 40923, .len = 1 }, + .{ .cp = 0x1D671, .start = 40924, .len = 1 }, + .{ .cp = 0x1D672, .start = 40925, .len = 1 }, + .{ .cp = 0x1D673, .start = 40926, .len = 1 }, + .{ .cp = 0x1D674, .start = 40927, .len = 1 }, + .{ .cp = 0x1D675, .start = 40928, .len = 1 }, + .{ .cp = 0x1D676, .start = 40929, .len = 1 }, + .{ .cp = 0x1D677, .start = 40930, .len = 1 }, + .{ .cp = 0x1D678, .start = 40931, .len = 1 }, + .{ .cp = 0x1D679, .start = 40932, .len = 1 }, + .{ .cp = 0x1D67A, .start = 40933, .len = 1 }, + .{ .cp = 0x1D67B, .start = 40934, .len = 1 }, + .{ .cp = 0x1D67C, .start = 40935, .len = 1 }, + .{ .cp = 0x1D67D, .start = 40936, .len = 1 }, + .{ .cp = 0x1D67E, .start = 40937, .len = 1 }, + .{ .cp = 0x1D67F, .start = 40938, .len = 1 }, + .{ .cp = 0x1D680, .start = 40939, .len = 1 }, + .{ .cp = 0x1D681, .start = 40940, .len = 1 }, + .{ .cp = 0x1D682, .start = 40941, .len = 1 }, + .{ .cp = 0x1D683, .start = 40942, .len = 1 }, + .{ .cp = 0x1D684, .start = 40943, .len = 1 }, + .{ .cp = 0x1D685, .start = 40944, .len = 1 }, + .{ .cp = 0x1D686, .start = 40945, .len = 1 }, + .{ .cp = 0x1D687, .start = 40946, .len = 1 }, + .{ .cp = 0x1D688, .start = 40947, .len = 1 }, + .{ .cp = 0x1D689, .start = 40948, .len = 1 }, + .{ .cp = 0x1D68A, .start = 40949, .len = 1 }, + .{ .cp = 0x1D68B, .start = 40950, .len = 1 }, + .{ .cp = 0x1D68C, .start = 40951, .len = 1 }, + .{ .cp = 0x1D68D, .start = 40952, .len = 1 }, + .{ .cp = 0x1D68E, .start = 40953, .len = 1 }, + .{ .cp = 0x1D68F, .start = 40954, .len = 1 }, + .{ .cp = 0x1D690, .start = 40955, .len = 1 }, + .{ .cp = 0x1D691, .start = 40956, .len = 1 }, + .{ .cp = 0x1D692, .start = 40957, .len = 1 }, + .{ .cp = 0x1D693, .start = 40958, .len = 1 }, + .{ .cp = 0x1D694, .start = 40959, .len = 1 }, + .{ .cp = 0x1D695, .start = 40960, .len = 1 }, + .{ .cp = 0x1D696, .start = 40961, .len = 1 }, + .{ .cp = 0x1D697, .start = 40962, .len = 1 }, + .{ .cp = 0x1D698, .start = 40963, .len = 1 }, + .{ .cp = 0x1D699, .start = 40964, .len = 1 }, + .{ .cp = 0x1D69A, .start = 40965, .len = 1 }, + .{ .cp = 0x1D69B, .start = 40966, .len = 1 }, + .{ .cp = 0x1D69C, .start = 40967, .len = 1 }, + .{ .cp = 0x1D69D, .start = 40968, .len = 1 }, + .{ .cp = 0x1D69E, .start = 40969, .len = 1 }, + .{ .cp = 0x1D69F, .start = 40970, .len = 1 }, + .{ .cp = 0x1D6A0, .start = 40971, .len = 1 }, + .{ .cp = 0x1D6A1, .start = 40972, .len = 1 }, + .{ .cp = 0x1D6A2, .start = 40973, .len = 1 }, + .{ .cp = 0x1D6A3, .start = 40974, .len = 1 }, + .{ .cp = 0x1D6A4, .start = 40975, .len = 1 }, + .{ .cp = 0x1D6A5, .start = 40976, .len = 1 }, + .{ .cp = 0x1D6A8, .start = 40977, .len = 1 }, + .{ .cp = 0x1D6A9, .start = 40978, .len = 1 }, + .{ .cp = 0x1D6AA, .start = 40979, .len = 1 }, + .{ .cp = 0x1D6AB, .start = 40980, .len = 1 }, + .{ .cp = 0x1D6AC, .start = 40981, .len = 1 }, + .{ .cp = 0x1D6AD, .start = 40982, .len = 1 }, + .{ .cp = 0x1D6AE, .start = 40983, .len = 1 }, + .{ .cp = 0x1D6AF, .start = 40984, .len = 1 }, + .{ .cp = 0x1D6B0, .start = 40985, .len = 1 }, + .{ .cp = 0x1D6B1, .start = 40986, .len = 1 }, + .{ .cp = 0x1D6B2, .start = 40987, .len = 1 }, + .{ .cp = 0x1D6B3, .start = 40988, .len = 1 }, + .{ .cp = 0x1D6B4, .start = 40989, .len = 1 }, + .{ .cp = 0x1D6B5, .start = 40990, .len = 1 }, + .{ .cp = 0x1D6B6, .start = 40991, .len = 1 }, + .{ .cp = 0x1D6B7, .start = 40992, .len = 1 }, + .{ .cp = 0x1D6B8, .start = 40993, .len = 1 }, + .{ .cp = 0x1D6B9, .start = 40994, .len = 1 }, + .{ .cp = 0x1D6BA, .start = 40995, .len = 1 }, + .{ .cp = 0x1D6BB, .start = 40996, .len = 1 }, + .{ .cp = 0x1D6BC, .start = 40997, .len = 1 }, + .{ .cp = 0x1D6BD, .start = 40998, .len = 1 }, + .{ .cp = 0x1D6BE, .start = 40999, .len = 1 }, + .{ .cp = 0x1D6BF, .start = 41000, .len = 1 }, + .{ .cp = 0x1D6C0, .start = 41001, .len = 1 }, + .{ .cp = 0x1D6C1, .start = 41002, .len = 1 }, + .{ .cp = 0x1D6C2, .start = 41003, .len = 1 }, + .{ .cp = 0x1D6C3, .start = 41004, .len = 1 }, + .{ .cp = 0x1D6C4, .start = 41005, .len = 1 }, + .{ .cp = 0x1D6C5, .start = 41006, .len = 1 }, + .{ .cp = 0x1D6C6, .start = 41007, .len = 1 }, + .{ .cp = 0x1D6C7, .start = 41008, .len = 1 }, + .{ .cp = 0x1D6C8, .start = 41009, .len = 1 }, + .{ .cp = 0x1D6C9, .start = 41010, .len = 1 }, + .{ .cp = 0x1D6CA, .start = 41011, .len = 1 }, + .{ .cp = 0x1D6CB, .start = 41012, .len = 1 }, + .{ .cp = 0x1D6CC, .start = 41013, .len = 1 }, + .{ .cp = 0x1D6CD, .start = 41014, .len = 1 }, + .{ .cp = 0x1D6CE, .start = 41015, .len = 1 }, + .{ .cp = 0x1D6CF, .start = 41016, .len = 1 }, + .{ .cp = 0x1D6D0, .start = 41017, .len = 1 }, + .{ .cp = 0x1D6D1, .start = 41018, .len = 1 }, + .{ .cp = 0x1D6D2, .start = 41019, .len = 1 }, + .{ .cp = 0x1D6D3, .start = 41020, .len = 1 }, + .{ .cp = 0x1D6D4, .start = 41021, .len = 1 }, + .{ .cp = 0x1D6D5, .start = 41022, .len = 1 }, + .{ .cp = 0x1D6D6, .start = 41023, .len = 1 }, + .{ .cp = 0x1D6D7, .start = 41024, .len = 1 }, + .{ .cp = 0x1D6D8, .start = 41025, .len = 1 }, + .{ .cp = 0x1D6D9, .start = 41026, .len = 1 }, + .{ .cp = 0x1D6DA, .start = 41027, .len = 1 }, + .{ .cp = 0x1D6DB, .start = 41028, .len = 1 }, + .{ .cp = 0x1D6DC, .start = 41029, .len = 1 }, + .{ .cp = 0x1D6DD, .start = 41030, .len = 1 }, + .{ .cp = 0x1D6DE, .start = 41031, .len = 1 }, + .{ .cp = 0x1D6DF, .start = 41032, .len = 1 }, + .{ .cp = 0x1D6E0, .start = 41033, .len = 1 }, + .{ .cp = 0x1D6E1, .start = 41034, .len = 1 }, + .{ .cp = 0x1D6E2, .start = 41035, .len = 1 }, + .{ .cp = 0x1D6E3, .start = 41036, .len = 1 }, + .{ .cp = 0x1D6E4, .start = 41037, .len = 1 }, + .{ .cp = 0x1D6E5, .start = 41038, .len = 1 }, + .{ .cp = 0x1D6E6, .start = 41039, .len = 1 }, + .{ .cp = 0x1D6E7, .start = 41040, .len = 1 }, + .{ .cp = 0x1D6E8, .start = 41041, .len = 1 }, + .{ .cp = 0x1D6E9, .start = 41042, .len = 1 }, + .{ .cp = 0x1D6EA, .start = 41043, .len = 1 }, + .{ .cp = 0x1D6EB, .start = 41044, .len = 1 }, + .{ .cp = 0x1D6EC, .start = 41045, .len = 1 }, + .{ .cp = 0x1D6ED, .start = 41046, .len = 1 }, + .{ .cp = 0x1D6EE, .start = 41047, .len = 1 }, + .{ .cp = 0x1D6EF, .start = 41048, .len = 1 }, + .{ .cp = 0x1D6F0, .start = 41049, .len = 1 }, + .{ .cp = 0x1D6F1, .start = 41050, .len = 1 }, + .{ .cp = 0x1D6F2, .start = 41051, .len = 1 }, + .{ .cp = 0x1D6F3, .start = 41052, .len = 1 }, + .{ .cp = 0x1D6F4, .start = 41053, .len = 1 }, + .{ .cp = 0x1D6F5, .start = 41054, .len = 1 }, + .{ .cp = 0x1D6F6, .start = 41055, .len = 1 }, + .{ .cp = 0x1D6F7, .start = 41056, .len = 1 }, + .{ .cp = 0x1D6F8, .start = 41057, .len = 1 }, + .{ .cp = 0x1D6F9, .start = 41058, .len = 1 }, + .{ .cp = 0x1D6FA, .start = 41059, .len = 1 }, + .{ .cp = 0x1D6FB, .start = 41060, .len = 1 }, + .{ .cp = 0x1D6FC, .start = 41061, .len = 1 }, + .{ .cp = 0x1D6FD, .start = 41062, .len = 1 }, + .{ .cp = 0x1D6FE, .start = 41063, .len = 1 }, + .{ .cp = 0x1D6FF, .start = 41064, .len = 1 }, + .{ .cp = 0x1D700, .start = 41065, .len = 1 }, + .{ .cp = 0x1D701, .start = 41066, .len = 1 }, + .{ .cp = 0x1D702, .start = 41067, .len = 1 }, + .{ .cp = 0x1D703, .start = 41068, .len = 1 }, + .{ .cp = 0x1D704, .start = 41069, .len = 1 }, + .{ .cp = 0x1D705, .start = 41070, .len = 1 }, + .{ .cp = 0x1D706, .start = 41071, .len = 1 }, + .{ .cp = 0x1D707, .start = 41072, .len = 1 }, + .{ .cp = 0x1D708, .start = 41073, .len = 1 }, + .{ .cp = 0x1D709, .start = 41074, .len = 1 }, + .{ .cp = 0x1D70A, .start = 41075, .len = 1 }, + .{ .cp = 0x1D70B, .start = 41076, .len = 1 }, + .{ .cp = 0x1D70C, .start = 41077, .len = 1 }, + .{ .cp = 0x1D70D, .start = 41078, .len = 1 }, + .{ .cp = 0x1D70E, .start = 41079, .len = 1 }, + .{ .cp = 0x1D70F, .start = 41080, .len = 1 }, + .{ .cp = 0x1D710, .start = 41081, .len = 1 }, + .{ .cp = 0x1D711, .start = 41082, .len = 1 }, + .{ .cp = 0x1D712, .start = 41083, .len = 1 }, + .{ .cp = 0x1D713, .start = 41084, .len = 1 }, + .{ .cp = 0x1D714, .start = 41085, .len = 1 }, + .{ .cp = 0x1D715, .start = 41086, .len = 1 }, + .{ .cp = 0x1D716, .start = 41087, .len = 1 }, + .{ .cp = 0x1D717, .start = 41088, .len = 1 }, + .{ .cp = 0x1D718, .start = 41089, .len = 1 }, + .{ .cp = 0x1D719, .start = 41090, .len = 1 }, + .{ .cp = 0x1D71A, .start = 41091, .len = 1 }, + .{ .cp = 0x1D71B, .start = 41092, .len = 1 }, + .{ .cp = 0x1D71C, .start = 41093, .len = 1 }, + .{ .cp = 0x1D71D, .start = 41094, .len = 1 }, + .{ .cp = 0x1D71E, .start = 41095, .len = 1 }, + .{ .cp = 0x1D71F, .start = 41096, .len = 1 }, + .{ .cp = 0x1D720, .start = 41097, .len = 1 }, + .{ .cp = 0x1D721, .start = 41098, .len = 1 }, + .{ .cp = 0x1D722, .start = 41099, .len = 1 }, + .{ .cp = 0x1D723, .start = 41100, .len = 1 }, + .{ .cp = 0x1D724, .start = 41101, .len = 1 }, + .{ .cp = 0x1D725, .start = 41102, .len = 1 }, + .{ .cp = 0x1D726, .start = 41103, .len = 1 }, + .{ .cp = 0x1D727, .start = 41104, .len = 1 }, + .{ .cp = 0x1D728, .start = 41105, .len = 1 }, + .{ .cp = 0x1D729, .start = 41106, .len = 1 }, + .{ .cp = 0x1D72A, .start = 41107, .len = 1 }, + .{ .cp = 0x1D72B, .start = 41108, .len = 1 }, + .{ .cp = 0x1D72C, .start = 41109, .len = 1 }, + .{ .cp = 0x1D72D, .start = 41110, .len = 1 }, + .{ .cp = 0x1D72E, .start = 41111, .len = 1 }, + .{ .cp = 0x1D72F, .start = 41112, .len = 1 }, + .{ .cp = 0x1D730, .start = 41113, .len = 1 }, + .{ .cp = 0x1D731, .start = 41114, .len = 1 }, + .{ .cp = 0x1D732, .start = 41115, .len = 1 }, + .{ .cp = 0x1D733, .start = 41116, .len = 1 }, + .{ .cp = 0x1D734, .start = 41117, .len = 1 }, + .{ .cp = 0x1D735, .start = 41118, .len = 1 }, + .{ .cp = 0x1D736, .start = 41119, .len = 1 }, + .{ .cp = 0x1D737, .start = 41120, .len = 1 }, + .{ .cp = 0x1D738, .start = 41121, .len = 1 }, + .{ .cp = 0x1D739, .start = 41122, .len = 1 }, + .{ .cp = 0x1D73A, .start = 41123, .len = 1 }, + .{ .cp = 0x1D73B, .start = 41124, .len = 1 }, + .{ .cp = 0x1D73C, .start = 41125, .len = 1 }, + .{ .cp = 0x1D73D, .start = 41126, .len = 1 }, + .{ .cp = 0x1D73E, .start = 41127, .len = 1 }, + .{ .cp = 0x1D73F, .start = 41128, .len = 1 }, + .{ .cp = 0x1D740, .start = 41129, .len = 1 }, + .{ .cp = 0x1D741, .start = 41130, .len = 1 }, + .{ .cp = 0x1D742, .start = 41131, .len = 1 }, + .{ .cp = 0x1D743, .start = 41132, .len = 1 }, + .{ .cp = 0x1D744, .start = 41133, .len = 1 }, + .{ .cp = 0x1D745, .start = 41134, .len = 1 }, + .{ .cp = 0x1D746, .start = 41135, .len = 1 }, + .{ .cp = 0x1D747, .start = 41136, .len = 1 }, + .{ .cp = 0x1D748, .start = 41137, .len = 1 }, + .{ .cp = 0x1D749, .start = 41138, .len = 1 }, + .{ .cp = 0x1D74A, .start = 41139, .len = 1 }, + .{ .cp = 0x1D74B, .start = 41140, .len = 1 }, + .{ .cp = 0x1D74C, .start = 41141, .len = 1 }, + .{ .cp = 0x1D74D, .start = 41142, .len = 1 }, + .{ .cp = 0x1D74E, .start = 41143, .len = 1 }, + .{ .cp = 0x1D74F, .start = 41144, .len = 1 }, + .{ .cp = 0x1D750, .start = 41145, .len = 1 }, + .{ .cp = 0x1D751, .start = 41146, .len = 1 }, + .{ .cp = 0x1D752, .start = 41147, .len = 1 }, + .{ .cp = 0x1D753, .start = 41148, .len = 1 }, + .{ .cp = 0x1D754, .start = 41149, .len = 1 }, + .{ .cp = 0x1D755, .start = 41150, .len = 1 }, + .{ .cp = 0x1D756, .start = 41151, .len = 1 }, + .{ .cp = 0x1D757, .start = 41152, .len = 1 }, + .{ .cp = 0x1D758, .start = 41153, .len = 1 }, + .{ .cp = 0x1D759, .start = 41154, .len = 1 }, + .{ .cp = 0x1D75A, .start = 41155, .len = 1 }, + .{ .cp = 0x1D75B, .start = 41156, .len = 1 }, + .{ .cp = 0x1D75C, .start = 41157, .len = 1 }, + .{ .cp = 0x1D75D, .start = 41158, .len = 1 }, + .{ .cp = 0x1D75E, .start = 41159, .len = 1 }, + .{ .cp = 0x1D75F, .start = 41160, .len = 1 }, + .{ .cp = 0x1D760, .start = 41161, .len = 1 }, + .{ .cp = 0x1D761, .start = 41162, .len = 1 }, + .{ .cp = 0x1D762, .start = 41163, .len = 1 }, + .{ .cp = 0x1D763, .start = 41164, .len = 1 }, + .{ .cp = 0x1D764, .start = 41165, .len = 1 }, + .{ .cp = 0x1D765, .start = 41166, .len = 1 }, + .{ .cp = 0x1D766, .start = 41167, .len = 1 }, + .{ .cp = 0x1D767, .start = 41168, .len = 1 }, + .{ .cp = 0x1D768, .start = 41169, .len = 1 }, + .{ .cp = 0x1D769, .start = 41170, .len = 1 }, + .{ .cp = 0x1D76A, .start = 41171, .len = 1 }, + .{ .cp = 0x1D76B, .start = 41172, .len = 1 }, + .{ .cp = 0x1D76C, .start = 41173, .len = 1 }, + .{ .cp = 0x1D76D, .start = 41174, .len = 1 }, + .{ .cp = 0x1D76E, .start = 41175, .len = 1 }, + .{ .cp = 0x1D76F, .start = 41176, .len = 1 }, + .{ .cp = 0x1D770, .start = 41177, .len = 1 }, + .{ .cp = 0x1D771, .start = 41178, .len = 1 }, + .{ .cp = 0x1D772, .start = 41179, .len = 1 }, + .{ .cp = 0x1D773, .start = 41180, .len = 1 }, + .{ .cp = 0x1D774, .start = 41181, .len = 1 }, + .{ .cp = 0x1D775, .start = 41182, .len = 1 }, + .{ .cp = 0x1D776, .start = 41183, .len = 1 }, + .{ .cp = 0x1D777, .start = 41184, .len = 1 }, + .{ .cp = 0x1D778, .start = 41185, .len = 1 }, + .{ .cp = 0x1D779, .start = 41186, .len = 1 }, + .{ .cp = 0x1D77A, .start = 41187, .len = 1 }, + .{ .cp = 0x1D77B, .start = 41188, .len = 1 }, + .{ .cp = 0x1D77C, .start = 41189, .len = 1 }, + .{ .cp = 0x1D77D, .start = 41190, .len = 1 }, + .{ .cp = 0x1D77E, .start = 41191, .len = 1 }, + .{ .cp = 0x1D77F, .start = 41192, .len = 1 }, + .{ .cp = 0x1D780, .start = 41193, .len = 1 }, + .{ .cp = 0x1D781, .start = 41194, .len = 1 }, + .{ .cp = 0x1D782, .start = 41195, .len = 1 }, + .{ .cp = 0x1D783, .start = 41196, .len = 1 }, + .{ .cp = 0x1D784, .start = 41197, .len = 1 }, + .{ .cp = 0x1D785, .start = 41198, .len = 1 }, + .{ .cp = 0x1D786, .start = 41199, .len = 1 }, + .{ .cp = 0x1D787, .start = 41200, .len = 1 }, + .{ .cp = 0x1D788, .start = 41201, .len = 1 }, + .{ .cp = 0x1D789, .start = 41202, .len = 1 }, + .{ .cp = 0x1D78A, .start = 41203, .len = 1 }, + .{ .cp = 0x1D78B, .start = 41204, .len = 1 }, + .{ .cp = 0x1D78C, .start = 41205, .len = 1 }, + .{ .cp = 0x1D78D, .start = 41206, .len = 1 }, + .{ .cp = 0x1D78E, .start = 41207, .len = 1 }, + .{ .cp = 0x1D78F, .start = 41208, .len = 1 }, + .{ .cp = 0x1D790, .start = 41209, .len = 1 }, + .{ .cp = 0x1D791, .start = 41210, .len = 1 }, + .{ .cp = 0x1D792, .start = 41211, .len = 1 }, + .{ .cp = 0x1D793, .start = 41212, .len = 1 }, + .{ .cp = 0x1D794, .start = 41213, .len = 1 }, + .{ .cp = 0x1D795, .start = 41214, .len = 1 }, + .{ .cp = 0x1D796, .start = 41215, .len = 1 }, + .{ .cp = 0x1D797, .start = 41216, .len = 1 }, + .{ .cp = 0x1D798, .start = 41217, .len = 1 }, + .{ .cp = 0x1D799, .start = 41218, .len = 1 }, + .{ .cp = 0x1D79A, .start = 41219, .len = 1 }, + .{ .cp = 0x1D79B, .start = 41220, .len = 1 }, + .{ .cp = 0x1D79C, .start = 41221, .len = 1 }, + .{ .cp = 0x1D79D, .start = 41222, .len = 1 }, + .{ .cp = 0x1D79E, .start = 41223, .len = 1 }, + .{ .cp = 0x1D79F, .start = 41224, .len = 1 }, + .{ .cp = 0x1D7A0, .start = 41225, .len = 1 }, + .{ .cp = 0x1D7A1, .start = 41226, .len = 1 }, + .{ .cp = 0x1D7A2, .start = 41227, .len = 1 }, + .{ .cp = 0x1D7A3, .start = 41228, .len = 1 }, + .{ .cp = 0x1D7A4, .start = 41229, .len = 1 }, + .{ .cp = 0x1D7A5, .start = 41230, .len = 1 }, + .{ .cp = 0x1D7A6, .start = 41231, .len = 1 }, + .{ .cp = 0x1D7A7, .start = 41232, .len = 1 }, + .{ .cp = 0x1D7A8, .start = 41233, .len = 1 }, + .{ .cp = 0x1D7A9, .start = 41234, .len = 1 }, + .{ .cp = 0x1D7AA, .start = 41235, .len = 1 }, + .{ .cp = 0x1D7AB, .start = 41236, .len = 1 }, + .{ .cp = 0x1D7AC, .start = 41237, .len = 1 }, + .{ .cp = 0x1D7AD, .start = 41238, .len = 1 }, + .{ .cp = 0x1D7AE, .start = 41239, .len = 1 }, + .{ .cp = 0x1D7AF, .start = 41240, .len = 1 }, + .{ .cp = 0x1D7B0, .start = 41241, .len = 1 }, + .{ .cp = 0x1D7B1, .start = 41242, .len = 1 }, + .{ .cp = 0x1D7B2, .start = 41243, .len = 1 }, + .{ .cp = 0x1D7B3, .start = 41244, .len = 1 }, + .{ .cp = 0x1D7B4, .start = 41245, .len = 1 }, + .{ .cp = 0x1D7B5, .start = 41246, .len = 1 }, + .{ .cp = 0x1D7B6, .start = 41247, .len = 1 }, + .{ .cp = 0x1D7B7, .start = 41248, .len = 1 }, + .{ .cp = 0x1D7B8, .start = 41249, .len = 1 }, + .{ .cp = 0x1D7B9, .start = 41250, .len = 1 }, + .{ .cp = 0x1D7BA, .start = 41251, .len = 1 }, + .{ .cp = 0x1D7BB, .start = 41252, .len = 1 }, + .{ .cp = 0x1D7BC, .start = 41253, .len = 1 }, + .{ .cp = 0x1D7BD, .start = 41254, .len = 1 }, + .{ .cp = 0x1D7BE, .start = 41255, .len = 1 }, + .{ .cp = 0x1D7BF, .start = 41256, .len = 1 }, + .{ .cp = 0x1D7C0, .start = 41257, .len = 1 }, + .{ .cp = 0x1D7C1, .start = 41258, .len = 1 }, + .{ .cp = 0x1D7C2, .start = 41259, .len = 1 }, + .{ .cp = 0x1D7C3, .start = 41260, .len = 1 }, + .{ .cp = 0x1D7C4, .start = 41261, .len = 1 }, + .{ .cp = 0x1D7C5, .start = 41262, .len = 1 }, + .{ .cp = 0x1D7C6, .start = 41263, .len = 1 }, + .{ .cp = 0x1D7C7, .start = 41264, .len = 1 }, + .{ .cp = 0x1D7C8, .start = 41265, .len = 1 }, + .{ .cp = 0x1D7C9, .start = 41266, .len = 1 }, + .{ .cp = 0x1D7CA, .start = 41267, .len = 1 }, + .{ .cp = 0x1D7CB, .start = 41268, .len = 1 }, + .{ .cp = 0x1D7CE, .start = 41269, .len = 1 }, + .{ .cp = 0x1D7CF, .start = 41270, .len = 1 }, + .{ .cp = 0x1D7D0, .start = 41271, .len = 1 }, + .{ .cp = 0x1D7D1, .start = 41272, .len = 1 }, + .{ .cp = 0x1D7D2, .start = 41273, .len = 1 }, + .{ .cp = 0x1D7D3, .start = 41274, .len = 1 }, + .{ .cp = 0x1D7D4, .start = 41275, .len = 1 }, + .{ .cp = 0x1D7D5, .start = 41276, .len = 1 }, + .{ .cp = 0x1D7D6, .start = 41277, .len = 1 }, + .{ .cp = 0x1D7D7, .start = 41278, .len = 1 }, + .{ .cp = 0x1D7D8, .start = 41279, .len = 1 }, + .{ .cp = 0x1D7D9, .start = 41280, .len = 1 }, + .{ .cp = 0x1D7DA, .start = 41281, .len = 1 }, + .{ .cp = 0x1D7DB, .start = 41282, .len = 1 }, + .{ .cp = 0x1D7DC, .start = 41283, .len = 1 }, + .{ .cp = 0x1D7DD, .start = 41284, .len = 1 }, + .{ .cp = 0x1D7DE, .start = 41285, .len = 1 }, + .{ .cp = 0x1D7DF, .start = 41286, .len = 1 }, + .{ .cp = 0x1D7E0, .start = 41287, .len = 1 }, + .{ .cp = 0x1D7E1, .start = 41288, .len = 1 }, + .{ .cp = 0x1D7E2, .start = 41289, .len = 1 }, + .{ .cp = 0x1D7E3, .start = 41290, .len = 1 }, + .{ .cp = 0x1D7E4, .start = 41291, .len = 1 }, + .{ .cp = 0x1D7E5, .start = 41292, .len = 1 }, + .{ .cp = 0x1D7E6, .start = 41293, .len = 1 }, + .{ .cp = 0x1D7E7, .start = 41294, .len = 1 }, + .{ .cp = 0x1D7E8, .start = 41295, .len = 1 }, + .{ .cp = 0x1D7E9, .start = 41296, .len = 1 }, + .{ .cp = 0x1D7EA, .start = 41297, .len = 1 }, + .{ .cp = 0x1D7EB, .start = 41298, .len = 1 }, + .{ .cp = 0x1D7EC, .start = 41299, .len = 1 }, + .{ .cp = 0x1D7ED, .start = 41300, .len = 1 }, + .{ .cp = 0x1D7EE, .start = 41301, .len = 1 }, + .{ .cp = 0x1D7EF, .start = 41302, .len = 1 }, + .{ .cp = 0x1D7F0, .start = 41303, .len = 1 }, + .{ .cp = 0x1D7F1, .start = 41304, .len = 1 }, + .{ .cp = 0x1D7F2, .start = 41305, .len = 1 }, + .{ .cp = 0x1D7F3, .start = 41306, .len = 1 }, + .{ .cp = 0x1D7F4, .start = 41307, .len = 1 }, + .{ .cp = 0x1D7F5, .start = 41308, .len = 1 }, + .{ .cp = 0x1D7F6, .start = 41309, .len = 1 }, + .{ .cp = 0x1D7F7, .start = 41310, .len = 1 }, + .{ .cp = 0x1D7F8, .start = 41311, .len = 1 }, + .{ .cp = 0x1D7F9, .start = 41312, .len = 1 }, + .{ .cp = 0x1D7FA, .start = 41313, .len = 1 }, + .{ .cp = 0x1D7FB, .start = 41314, .len = 1 }, + .{ .cp = 0x1D7FC, .start = 41315, .len = 1 }, + .{ .cp = 0x1D7FD, .start = 41316, .len = 1 }, + .{ .cp = 0x1D7FE, .start = 41317, .len = 1 }, + .{ .cp = 0x1D7FF, .start = 41318, .len = 1 }, + .{ .cp = 0x1E030, .start = 41319, .len = 1 }, + .{ .cp = 0x1E031, .start = 41320, .len = 1 }, + .{ .cp = 0x1E032, .start = 41321, .len = 1 }, + .{ .cp = 0x1E033, .start = 41322, .len = 1 }, + .{ .cp = 0x1E034, .start = 41323, .len = 1 }, + .{ .cp = 0x1E035, .start = 41324, .len = 1 }, + .{ .cp = 0x1E036, .start = 41325, .len = 1 }, + .{ .cp = 0x1E037, .start = 41326, .len = 1 }, + .{ .cp = 0x1E038, .start = 41327, .len = 1 }, + .{ .cp = 0x1E039, .start = 41328, .len = 1 }, + .{ .cp = 0x1E03A, .start = 41329, .len = 1 }, + .{ .cp = 0x1E03B, .start = 41330, .len = 1 }, + .{ .cp = 0x1E03C, .start = 41331, .len = 1 }, + .{ .cp = 0x1E03D, .start = 41332, .len = 1 }, + .{ .cp = 0x1E03E, .start = 41333, .len = 1 }, + .{ .cp = 0x1E03F, .start = 41334, .len = 1 }, + .{ .cp = 0x1E040, .start = 41335, .len = 1 }, + .{ .cp = 0x1E041, .start = 41336, .len = 1 }, + .{ .cp = 0x1E042, .start = 41337, .len = 1 }, + .{ .cp = 0x1E043, .start = 41338, .len = 1 }, + .{ .cp = 0x1E044, .start = 41339, .len = 1 }, + .{ .cp = 0x1E045, .start = 41340, .len = 1 }, + .{ .cp = 0x1E046, .start = 41341, .len = 1 }, + .{ .cp = 0x1E047, .start = 41342, .len = 1 }, + .{ .cp = 0x1E048, .start = 41343, .len = 1 }, + .{ .cp = 0x1E049, .start = 41344, .len = 1 }, + .{ .cp = 0x1E04A, .start = 41345, .len = 1 }, + .{ .cp = 0x1E04B, .start = 41346, .len = 1 }, + .{ .cp = 0x1E04C, .start = 41347, .len = 1 }, + .{ .cp = 0x1E04D, .start = 41348, .len = 1 }, + .{ .cp = 0x1E04E, .start = 41349, .len = 1 }, + .{ .cp = 0x1E04F, .start = 41350, .len = 1 }, + .{ .cp = 0x1E050, .start = 41351, .len = 1 }, + .{ .cp = 0x1E051, .start = 41352, .len = 1 }, + .{ .cp = 0x1E052, .start = 41353, .len = 1 }, + .{ .cp = 0x1E053, .start = 41354, .len = 1 }, + .{ .cp = 0x1E054, .start = 41355, .len = 1 }, + .{ .cp = 0x1E055, .start = 41356, .len = 1 }, + .{ .cp = 0x1E056, .start = 41357, .len = 1 }, + .{ .cp = 0x1E057, .start = 41358, .len = 1 }, + .{ .cp = 0x1E058, .start = 41359, .len = 1 }, + .{ .cp = 0x1E059, .start = 41360, .len = 1 }, + .{ .cp = 0x1E05A, .start = 41361, .len = 1 }, + .{ .cp = 0x1E05B, .start = 41362, .len = 1 }, + .{ .cp = 0x1E05C, .start = 41363, .len = 1 }, + .{ .cp = 0x1E05D, .start = 41364, .len = 1 }, + .{ .cp = 0x1E05E, .start = 41365, .len = 1 }, + .{ .cp = 0x1E05F, .start = 41366, .len = 1 }, + .{ .cp = 0x1E060, .start = 41367, .len = 1 }, + .{ .cp = 0x1E061, .start = 41368, .len = 1 }, + .{ .cp = 0x1E062, .start = 41369, .len = 1 }, + .{ .cp = 0x1E063, .start = 41370, .len = 1 }, + .{ .cp = 0x1E064, .start = 41371, .len = 1 }, + .{ .cp = 0x1E065, .start = 41372, .len = 1 }, + .{ .cp = 0x1E066, .start = 41373, .len = 1 }, + .{ .cp = 0x1E067, .start = 41374, .len = 1 }, + .{ .cp = 0x1E068, .start = 41375, .len = 1 }, + .{ .cp = 0x1E069, .start = 41376, .len = 1 }, + .{ .cp = 0x1E06A, .start = 41377, .len = 1 }, + .{ .cp = 0x1E06B, .start = 41378, .len = 1 }, + .{ .cp = 0x1E06C, .start = 41379, .len = 1 }, + .{ .cp = 0x1E06D, .start = 41380, .len = 1 }, + .{ .cp = 0x1EE00, .start = 41381, .len = 1 }, + .{ .cp = 0x1EE01, .start = 41382, .len = 1 }, + .{ .cp = 0x1EE02, .start = 41383, .len = 1 }, + .{ .cp = 0x1EE03, .start = 41384, .len = 1 }, + .{ .cp = 0x1EE05, .start = 41385, .len = 1 }, + .{ .cp = 0x1EE06, .start = 41386, .len = 1 }, + .{ .cp = 0x1EE07, .start = 41387, .len = 1 }, + .{ .cp = 0x1EE08, .start = 41388, .len = 1 }, + .{ .cp = 0x1EE09, .start = 41389, .len = 1 }, + .{ .cp = 0x1EE0A, .start = 41390, .len = 1 }, + .{ .cp = 0x1EE0B, .start = 41391, .len = 1 }, + .{ .cp = 0x1EE0C, .start = 41392, .len = 1 }, + .{ .cp = 0x1EE0D, .start = 41393, .len = 1 }, + .{ .cp = 0x1EE0E, .start = 41394, .len = 1 }, + .{ .cp = 0x1EE0F, .start = 41395, .len = 1 }, + .{ .cp = 0x1EE10, .start = 41396, .len = 1 }, + .{ .cp = 0x1EE11, .start = 41397, .len = 1 }, + .{ .cp = 0x1EE12, .start = 41398, .len = 1 }, + .{ .cp = 0x1EE13, .start = 41399, .len = 1 }, + .{ .cp = 0x1EE14, .start = 41400, .len = 1 }, + .{ .cp = 0x1EE15, .start = 41401, .len = 1 }, + .{ .cp = 0x1EE16, .start = 41402, .len = 1 }, + .{ .cp = 0x1EE17, .start = 41403, .len = 1 }, + .{ .cp = 0x1EE18, .start = 41404, .len = 1 }, + .{ .cp = 0x1EE19, .start = 41405, .len = 1 }, + .{ .cp = 0x1EE1A, .start = 41406, .len = 1 }, + .{ .cp = 0x1EE1B, .start = 41407, .len = 1 }, + .{ .cp = 0x1EE1C, .start = 41408, .len = 1 }, + .{ .cp = 0x1EE1D, .start = 41409, .len = 1 }, + .{ .cp = 0x1EE1E, .start = 41410, .len = 1 }, + .{ .cp = 0x1EE1F, .start = 41411, .len = 1 }, + .{ .cp = 0x1EE21, .start = 41412, .len = 1 }, + .{ .cp = 0x1EE22, .start = 41413, .len = 1 }, + .{ .cp = 0x1EE24, .start = 41414, .len = 1 }, + .{ .cp = 0x1EE27, .start = 41415, .len = 1 }, + .{ .cp = 0x1EE29, .start = 41416, .len = 1 }, + .{ .cp = 0x1EE2A, .start = 41417, .len = 1 }, + .{ .cp = 0x1EE2B, .start = 41418, .len = 1 }, + .{ .cp = 0x1EE2C, .start = 41419, .len = 1 }, + .{ .cp = 0x1EE2D, .start = 41420, .len = 1 }, + .{ .cp = 0x1EE2E, .start = 41421, .len = 1 }, + .{ .cp = 0x1EE2F, .start = 41422, .len = 1 }, + .{ .cp = 0x1EE30, .start = 41423, .len = 1 }, + .{ .cp = 0x1EE31, .start = 41424, .len = 1 }, + .{ .cp = 0x1EE32, .start = 41425, .len = 1 }, + .{ .cp = 0x1EE34, .start = 41426, .len = 1 }, + .{ .cp = 0x1EE35, .start = 41427, .len = 1 }, + .{ .cp = 0x1EE36, .start = 41428, .len = 1 }, + .{ .cp = 0x1EE37, .start = 41429, .len = 1 }, + .{ .cp = 0x1EE39, .start = 41430, .len = 1 }, + .{ .cp = 0x1EE3B, .start = 41431, .len = 1 }, + .{ .cp = 0x1EE42, .start = 41432, .len = 1 }, + .{ .cp = 0x1EE47, .start = 41433, .len = 1 }, + .{ .cp = 0x1EE49, .start = 41434, .len = 1 }, + .{ .cp = 0x1EE4B, .start = 41435, .len = 1 }, + .{ .cp = 0x1EE4D, .start = 41436, .len = 1 }, + .{ .cp = 0x1EE4E, .start = 41437, .len = 1 }, + .{ .cp = 0x1EE4F, .start = 41438, .len = 1 }, + .{ .cp = 0x1EE51, .start = 41439, .len = 1 }, + .{ .cp = 0x1EE52, .start = 41440, .len = 1 }, + .{ .cp = 0x1EE54, .start = 41441, .len = 1 }, + .{ .cp = 0x1EE57, .start = 41442, .len = 1 }, + .{ .cp = 0x1EE59, .start = 41443, .len = 1 }, + .{ .cp = 0x1EE5B, .start = 41444, .len = 1 }, + .{ .cp = 0x1EE5D, .start = 41445, .len = 1 }, + .{ .cp = 0x1EE5F, .start = 41446, .len = 1 }, + .{ .cp = 0x1EE61, .start = 41447, .len = 1 }, + .{ .cp = 0x1EE62, .start = 41448, .len = 1 }, + .{ .cp = 0x1EE64, .start = 41449, .len = 1 }, + .{ .cp = 0x1EE67, .start = 41450, .len = 1 }, + .{ .cp = 0x1EE68, .start = 41451, .len = 1 }, + .{ .cp = 0x1EE69, .start = 41452, .len = 1 }, + .{ .cp = 0x1EE6A, .start = 41453, .len = 1 }, + .{ .cp = 0x1EE6C, .start = 41454, .len = 1 }, + .{ .cp = 0x1EE6D, .start = 41455, .len = 1 }, + .{ .cp = 0x1EE6E, .start = 41456, .len = 1 }, + .{ .cp = 0x1EE6F, .start = 41457, .len = 1 }, + .{ .cp = 0x1EE70, .start = 41458, .len = 1 }, + .{ .cp = 0x1EE71, .start = 41459, .len = 1 }, + .{ .cp = 0x1EE72, .start = 41460, .len = 1 }, + .{ .cp = 0x1EE74, .start = 41461, .len = 1 }, + .{ .cp = 0x1EE75, .start = 41462, .len = 1 }, + .{ .cp = 0x1EE76, .start = 41463, .len = 1 }, + .{ .cp = 0x1EE77, .start = 41464, .len = 1 }, + .{ .cp = 0x1EE79, .start = 41465, .len = 1 }, + .{ .cp = 0x1EE7A, .start = 41466, .len = 1 }, + .{ .cp = 0x1EE7B, .start = 41467, .len = 1 }, + .{ .cp = 0x1EE7C, .start = 41468, .len = 1 }, + .{ .cp = 0x1EE7E, .start = 41469, .len = 1 }, + .{ .cp = 0x1EE80, .start = 41470, .len = 1 }, + .{ .cp = 0x1EE81, .start = 41471, .len = 1 }, + .{ .cp = 0x1EE82, .start = 41472, .len = 1 }, + .{ .cp = 0x1EE83, .start = 41473, .len = 1 }, + .{ .cp = 0x1EE84, .start = 41474, .len = 1 }, + .{ .cp = 0x1EE85, .start = 41475, .len = 1 }, + .{ .cp = 0x1EE86, .start = 41476, .len = 1 }, + .{ .cp = 0x1EE87, .start = 41477, .len = 1 }, + .{ .cp = 0x1EE88, .start = 41478, .len = 1 }, + .{ .cp = 0x1EE89, .start = 41479, .len = 1 }, + .{ .cp = 0x1EE8B, .start = 41480, .len = 1 }, + .{ .cp = 0x1EE8C, .start = 41481, .len = 1 }, + .{ .cp = 0x1EE8D, .start = 41482, .len = 1 }, + .{ .cp = 0x1EE8E, .start = 41483, .len = 1 }, + .{ .cp = 0x1EE8F, .start = 41484, .len = 1 }, + .{ .cp = 0x1EE90, .start = 41485, .len = 1 }, + .{ .cp = 0x1EE91, .start = 41486, .len = 1 }, + .{ .cp = 0x1EE92, .start = 41487, .len = 1 }, + .{ .cp = 0x1EE93, .start = 41488, .len = 1 }, + .{ .cp = 0x1EE94, .start = 41489, .len = 1 }, + .{ .cp = 0x1EE95, .start = 41490, .len = 1 }, + .{ .cp = 0x1EE96, .start = 41491, .len = 1 }, + .{ .cp = 0x1EE97, .start = 41492, .len = 1 }, + .{ .cp = 0x1EE98, .start = 41493, .len = 1 }, + .{ .cp = 0x1EE99, .start = 41494, .len = 1 }, + .{ .cp = 0x1EE9A, .start = 41495, .len = 1 }, + .{ .cp = 0x1EE9B, .start = 41496, .len = 1 }, + .{ .cp = 0x1EEA1, .start = 41497, .len = 1 }, + .{ .cp = 0x1EEA2, .start = 41498, .len = 1 }, + .{ .cp = 0x1EEA3, .start = 41499, .len = 1 }, + .{ .cp = 0x1EEA5, .start = 41500, .len = 1 }, + .{ .cp = 0x1EEA6, .start = 41501, .len = 1 }, + .{ .cp = 0x1EEA7, .start = 41502, .len = 1 }, + .{ .cp = 0x1EEA8, .start = 41503, .len = 1 }, + .{ .cp = 0x1EEA9, .start = 41504, .len = 1 }, + .{ .cp = 0x1EEAB, .start = 41505, .len = 1 }, + .{ .cp = 0x1EEAC, .start = 41506, .len = 1 }, + .{ .cp = 0x1EEAD, .start = 41507, .len = 1 }, + .{ .cp = 0x1EEAE, .start = 41508, .len = 1 }, + .{ .cp = 0x1EEAF, .start = 41509, .len = 1 }, + .{ .cp = 0x1EEB0, .start = 41510, .len = 1 }, + .{ .cp = 0x1EEB1, .start = 41511, .len = 1 }, + .{ .cp = 0x1EEB2, .start = 41512, .len = 1 }, + .{ .cp = 0x1EEB3, .start = 41513, .len = 1 }, + .{ .cp = 0x1EEB4, .start = 41514, .len = 1 }, + .{ .cp = 0x1EEB5, .start = 41515, .len = 1 }, + .{ .cp = 0x1EEB6, .start = 41516, .len = 1 }, + .{ .cp = 0x1EEB7, .start = 41517, .len = 1 }, + .{ .cp = 0x1EEB8, .start = 41518, .len = 1 }, + .{ .cp = 0x1EEB9, .start = 41519, .len = 1 }, + .{ .cp = 0x1EEBA, .start = 41520, .len = 1 }, + .{ .cp = 0x1EEBB, .start = 41521, .len = 1 }, + .{ .cp = 0x1F100, .start = 41522, .len = 2 }, + .{ .cp = 0x1F101, .start = 41524, .len = 2 }, + .{ .cp = 0x1F102, .start = 41526, .len = 2 }, + .{ .cp = 0x1F103, .start = 41528, .len = 2 }, + .{ .cp = 0x1F104, .start = 41530, .len = 2 }, + .{ .cp = 0x1F105, .start = 41532, .len = 2 }, + .{ .cp = 0x1F106, .start = 41534, .len = 2 }, + .{ .cp = 0x1F107, .start = 41536, .len = 2 }, + .{ .cp = 0x1F108, .start = 41538, .len = 2 }, + .{ .cp = 0x1F109, .start = 41540, .len = 2 }, + .{ .cp = 0x1F10A, .start = 41542, .len = 2 }, + .{ .cp = 0x1F110, .start = 41544, .len = 3 }, + .{ .cp = 0x1F111, .start = 41547, .len = 3 }, + .{ .cp = 0x1F112, .start = 41550, .len = 3 }, + .{ .cp = 0x1F113, .start = 41553, .len = 3 }, + .{ .cp = 0x1F114, .start = 41556, .len = 3 }, + .{ .cp = 0x1F115, .start = 41559, .len = 3 }, + .{ .cp = 0x1F116, .start = 41562, .len = 3 }, + .{ .cp = 0x1F117, .start = 41565, .len = 3 }, + .{ .cp = 0x1F118, .start = 41568, .len = 3 }, + .{ .cp = 0x1F119, .start = 41571, .len = 3 }, + .{ .cp = 0x1F11A, .start = 41574, .len = 3 }, + .{ .cp = 0x1F11B, .start = 41577, .len = 3 }, + .{ .cp = 0x1F11C, .start = 41580, .len = 3 }, + .{ .cp = 0x1F11D, .start = 41583, .len = 3 }, + .{ .cp = 0x1F11E, .start = 41586, .len = 3 }, + .{ .cp = 0x1F11F, .start = 41589, .len = 3 }, + .{ .cp = 0x1F120, .start = 41592, .len = 3 }, + .{ .cp = 0x1F121, .start = 41595, .len = 3 }, + .{ .cp = 0x1F122, .start = 41598, .len = 3 }, + .{ .cp = 0x1F123, .start = 41601, .len = 3 }, + .{ .cp = 0x1F124, .start = 41604, .len = 3 }, + .{ .cp = 0x1F125, .start = 41607, .len = 3 }, + .{ .cp = 0x1F126, .start = 41610, .len = 3 }, + .{ .cp = 0x1F127, .start = 41613, .len = 3 }, + .{ .cp = 0x1F128, .start = 41616, .len = 3 }, + .{ .cp = 0x1F129, .start = 41619, .len = 3 }, + .{ .cp = 0x1F12A, .start = 41622, .len = 3 }, + .{ .cp = 0x1F12B, .start = 41625, .len = 1 }, + .{ .cp = 0x1F12C, .start = 41626, .len = 1 }, + .{ .cp = 0x1F12D, .start = 41627, .len = 2 }, + .{ .cp = 0x1F12E, .start = 41629, .len = 2 }, + .{ .cp = 0x1F130, .start = 41631, .len = 1 }, + .{ .cp = 0x1F131, .start = 41632, .len = 1 }, + .{ .cp = 0x1F132, .start = 41633, .len = 1 }, + .{ .cp = 0x1F133, .start = 41634, .len = 1 }, + .{ .cp = 0x1F134, .start = 41635, .len = 1 }, + .{ .cp = 0x1F135, .start = 41636, .len = 1 }, + .{ .cp = 0x1F136, .start = 41637, .len = 1 }, + .{ .cp = 0x1F137, .start = 41638, .len = 1 }, + .{ .cp = 0x1F138, .start = 41639, .len = 1 }, + .{ .cp = 0x1F139, .start = 41640, .len = 1 }, + .{ .cp = 0x1F13A, .start = 41641, .len = 1 }, + .{ .cp = 0x1F13B, .start = 41642, .len = 1 }, + .{ .cp = 0x1F13C, .start = 41643, .len = 1 }, + .{ .cp = 0x1F13D, .start = 41644, .len = 1 }, + .{ .cp = 0x1F13E, .start = 41645, .len = 1 }, + .{ .cp = 0x1F13F, .start = 41646, .len = 1 }, + .{ .cp = 0x1F140, .start = 41647, .len = 1 }, + .{ .cp = 0x1F141, .start = 41648, .len = 1 }, + .{ .cp = 0x1F142, .start = 41649, .len = 1 }, + .{ .cp = 0x1F143, .start = 41650, .len = 1 }, + .{ .cp = 0x1F144, .start = 41651, .len = 1 }, + .{ .cp = 0x1F145, .start = 41652, .len = 1 }, + .{ .cp = 0x1F146, .start = 41653, .len = 1 }, + .{ .cp = 0x1F147, .start = 41654, .len = 1 }, + .{ .cp = 0x1F148, .start = 41655, .len = 1 }, + .{ .cp = 0x1F149, .start = 41656, .len = 1 }, + .{ .cp = 0x1F14A, .start = 41657, .len = 2 }, + .{ .cp = 0x1F14B, .start = 41659, .len = 2 }, + .{ .cp = 0x1F14C, .start = 41661, .len = 2 }, + .{ .cp = 0x1F14D, .start = 41663, .len = 2 }, + .{ .cp = 0x1F14E, .start = 41665, .len = 3 }, + .{ .cp = 0x1F14F, .start = 41668, .len = 2 }, + .{ .cp = 0x1F16A, .start = 41670, .len = 2 }, + .{ .cp = 0x1F16B, .start = 41672, .len = 2 }, + .{ .cp = 0x1F16C, .start = 41674, .len = 2 }, + .{ .cp = 0x1F190, .start = 41676, .len = 2 }, + .{ .cp = 0x1F200, .start = 41678, .len = 2 }, + .{ .cp = 0x1F201, .start = 41680, .len = 2 }, + .{ .cp = 0x1F202, .start = 41682, .len = 1 }, + .{ .cp = 0x1F210, .start = 41683, .len = 1 }, + .{ .cp = 0x1F211, .start = 41684, .len = 1 }, + .{ .cp = 0x1F212, .start = 41685, .len = 1 }, + .{ .cp = 0x1F213, .start = 41686, .len = 2 }, + .{ .cp = 0x1F214, .start = 41688, .len = 1 }, + .{ .cp = 0x1F215, .start = 41689, .len = 1 }, + .{ .cp = 0x1F216, .start = 41690, .len = 1 }, + .{ .cp = 0x1F217, .start = 41691, .len = 1 }, + .{ .cp = 0x1F218, .start = 41692, .len = 1 }, + .{ .cp = 0x1F219, .start = 41693, .len = 1 }, + .{ .cp = 0x1F21A, .start = 41694, .len = 1 }, + .{ .cp = 0x1F21B, .start = 41695, .len = 1 }, + .{ .cp = 0x1F21C, .start = 41696, .len = 1 }, + .{ .cp = 0x1F21D, .start = 41697, .len = 1 }, + .{ .cp = 0x1F21E, .start = 41698, .len = 1 }, + .{ .cp = 0x1F21F, .start = 41699, .len = 1 }, + .{ .cp = 0x1F220, .start = 41700, .len = 1 }, + .{ .cp = 0x1F221, .start = 41701, .len = 1 }, + .{ .cp = 0x1F222, .start = 41702, .len = 1 }, + .{ .cp = 0x1F223, .start = 41703, .len = 1 }, + .{ .cp = 0x1F224, .start = 41704, .len = 1 }, + .{ .cp = 0x1F225, .start = 41705, .len = 1 }, + .{ .cp = 0x1F226, .start = 41706, .len = 1 }, + .{ .cp = 0x1F227, .start = 41707, .len = 1 }, + .{ .cp = 0x1F228, .start = 41708, .len = 1 }, + .{ .cp = 0x1F229, .start = 41709, .len = 1 }, + .{ .cp = 0x1F22A, .start = 41710, .len = 1 }, + .{ .cp = 0x1F22B, .start = 41711, .len = 1 }, + .{ .cp = 0x1F22C, .start = 41712, .len = 1 }, + .{ .cp = 0x1F22D, .start = 41713, .len = 1 }, + .{ .cp = 0x1F22E, .start = 41714, .len = 1 }, + .{ .cp = 0x1F22F, .start = 41715, .len = 1 }, + .{ .cp = 0x1F230, .start = 41716, .len = 1 }, + .{ .cp = 0x1F231, .start = 41717, .len = 1 }, + .{ .cp = 0x1F232, .start = 41718, .len = 1 }, + .{ .cp = 0x1F233, .start = 41719, .len = 1 }, + .{ .cp = 0x1F234, .start = 41720, .len = 1 }, + .{ .cp = 0x1F235, .start = 41721, .len = 1 }, + .{ .cp = 0x1F236, .start = 41722, .len = 1 }, + .{ .cp = 0x1F237, .start = 41723, .len = 1 }, + .{ .cp = 0x1F238, .start = 41724, .len = 1 }, + .{ .cp = 0x1F239, .start = 41725, .len = 1 }, + .{ .cp = 0x1F23A, .start = 41726, .len = 1 }, + .{ .cp = 0x1F23B, .start = 41727, .len = 1 }, + .{ .cp = 0x1F240, .start = 41728, .len = 3 }, + .{ .cp = 0x1F241, .start = 41731, .len = 3 }, + .{ .cp = 0x1F242, .start = 41734, .len = 3 }, + .{ .cp = 0x1F243, .start = 41737, .len = 3 }, + .{ .cp = 0x1F244, .start = 41740, .len = 3 }, + .{ .cp = 0x1F245, .start = 41743, .len = 3 }, + .{ .cp = 0x1F246, .start = 41746, .len = 3 }, + .{ .cp = 0x1F247, .start = 41749, .len = 3 }, + .{ .cp = 0x1F248, .start = 41752, .len = 3 }, + .{ .cp = 0x1F250, .start = 41755, .len = 1 }, + .{ .cp = 0x1F251, .start = 41756, .len = 1 }, + .{ .cp = 0x1FBF0, .start = 41757, .len = 1 }, + .{ .cp = 0x1FBF1, .start = 41758, .len = 1 }, + .{ .cp = 0x1FBF2, .start = 41759, .len = 1 }, + .{ .cp = 0x1FBF3, .start = 41760, .len = 1 }, + .{ .cp = 0x1FBF4, .start = 41761, .len = 1 }, + .{ .cp = 0x1FBF5, .start = 41762, .len = 1 }, + .{ .cp = 0x1FBF6, .start = 41763, .len = 1 }, + .{ .cp = 0x1FBF7, .start = 41764, .len = 1 }, + .{ .cp = 0x1FBF8, .start = 41765, .len = 1 }, + .{ .cp = 0x1FBF9, .start = 41766, .len = 1 }, + .{ .cp = 0x2F800, .start = 41767, .len = 1 }, + .{ .cp = 0x2F801, .start = 41768, .len = 1 }, + .{ .cp = 0x2F802, .start = 41769, .len = 1 }, + .{ .cp = 0x2F803, .start = 41770, .len = 1 }, + .{ .cp = 0x2F804, .start = 41771, .len = 1 }, + .{ .cp = 0x2F805, .start = 41772, .len = 1 }, + .{ .cp = 0x2F806, .start = 41773, .len = 1 }, + .{ .cp = 0x2F807, .start = 41774, .len = 1 }, + .{ .cp = 0x2F808, .start = 41775, .len = 1 }, + .{ .cp = 0x2F809, .start = 41776, .len = 1 }, + .{ .cp = 0x2F80A, .start = 41777, .len = 1 }, + .{ .cp = 0x2F80B, .start = 41778, .len = 1 }, + .{ .cp = 0x2F80C, .start = 41779, .len = 1 }, + .{ .cp = 0x2F80D, .start = 41780, .len = 1 }, + .{ .cp = 0x2F80E, .start = 41781, .len = 1 }, + .{ .cp = 0x2F80F, .start = 41782, .len = 1 }, + .{ .cp = 0x2F810, .start = 41783, .len = 1 }, + .{ .cp = 0x2F811, .start = 41784, .len = 1 }, + .{ .cp = 0x2F812, .start = 41785, .len = 1 }, + .{ .cp = 0x2F813, .start = 41786, .len = 1 }, + .{ .cp = 0x2F814, .start = 41787, .len = 1 }, + .{ .cp = 0x2F815, .start = 41788, .len = 1 }, + .{ .cp = 0x2F816, .start = 41789, .len = 1 }, + .{ .cp = 0x2F817, .start = 41790, .len = 1 }, + .{ .cp = 0x2F818, .start = 41791, .len = 1 }, + .{ .cp = 0x2F819, .start = 41792, .len = 1 }, + .{ .cp = 0x2F81A, .start = 41793, .len = 1 }, + .{ .cp = 0x2F81B, .start = 41794, .len = 1 }, + .{ .cp = 0x2F81C, .start = 41795, .len = 1 }, + .{ .cp = 0x2F81D, .start = 41796, .len = 1 }, + .{ .cp = 0x2F81E, .start = 41797, .len = 1 }, + .{ .cp = 0x2F81F, .start = 41798, .len = 1 }, + .{ .cp = 0x2F820, .start = 41799, .len = 1 }, + .{ .cp = 0x2F821, .start = 41800, .len = 1 }, + .{ .cp = 0x2F822, .start = 41801, .len = 1 }, + .{ .cp = 0x2F823, .start = 41802, .len = 1 }, + .{ .cp = 0x2F824, .start = 41803, .len = 1 }, + .{ .cp = 0x2F825, .start = 41804, .len = 1 }, + .{ .cp = 0x2F826, .start = 41805, .len = 1 }, + .{ .cp = 0x2F827, .start = 41806, .len = 1 }, + .{ .cp = 0x2F828, .start = 41807, .len = 1 }, + .{ .cp = 0x2F829, .start = 41808, .len = 1 }, + .{ .cp = 0x2F82A, .start = 41809, .len = 1 }, + .{ .cp = 0x2F82B, .start = 41810, .len = 1 }, + .{ .cp = 0x2F82C, .start = 41811, .len = 1 }, + .{ .cp = 0x2F82D, .start = 41812, .len = 1 }, + .{ .cp = 0x2F82E, .start = 41813, .len = 1 }, + .{ .cp = 0x2F82F, .start = 41814, .len = 1 }, + .{ .cp = 0x2F830, .start = 41815, .len = 1 }, + .{ .cp = 0x2F831, .start = 41816, .len = 1 }, + .{ .cp = 0x2F832, .start = 41817, .len = 1 }, + .{ .cp = 0x2F833, .start = 41818, .len = 1 }, + .{ .cp = 0x2F834, .start = 41819, .len = 1 }, + .{ .cp = 0x2F835, .start = 41820, .len = 1 }, + .{ .cp = 0x2F836, .start = 41821, .len = 1 }, + .{ .cp = 0x2F837, .start = 41822, .len = 1 }, + .{ .cp = 0x2F838, .start = 41823, .len = 1 }, + .{ .cp = 0x2F839, .start = 41824, .len = 1 }, + .{ .cp = 0x2F83A, .start = 41825, .len = 1 }, + .{ .cp = 0x2F83B, .start = 41826, .len = 1 }, + .{ .cp = 0x2F83C, .start = 41827, .len = 1 }, + .{ .cp = 0x2F83D, .start = 41828, .len = 1 }, + .{ .cp = 0x2F83E, .start = 41829, .len = 1 }, + .{ .cp = 0x2F83F, .start = 41830, .len = 1 }, + .{ .cp = 0x2F840, .start = 41831, .len = 1 }, + .{ .cp = 0x2F841, .start = 41832, .len = 1 }, + .{ .cp = 0x2F842, .start = 41833, .len = 1 }, + .{ .cp = 0x2F843, .start = 41834, .len = 1 }, + .{ .cp = 0x2F844, .start = 41835, .len = 1 }, + .{ .cp = 0x2F845, .start = 41836, .len = 1 }, + .{ .cp = 0x2F846, .start = 41837, .len = 1 }, + .{ .cp = 0x2F847, .start = 41838, .len = 1 }, + .{ .cp = 0x2F848, .start = 41839, .len = 1 }, + .{ .cp = 0x2F849, .start = 41840, .len = 1 }, + .{ .cp = 0x2F84A, .start = 41841, .len = 1 }, + .{ .cp = 0x2F84B, .start = 41842, .len = 1 }, + .{ .cp = 0x2F84C, .start = 41843, .len = 1 }, + .{ .cp = 0x2F84D, .start = 41844, .len = 1 }, + .{ .cp = 0x2F84E, .start = 41845, .len = 1 }, + .{ .cp = 0x2F84F, .start = 41846, .len = 1 }, + .{ .cp = 0x2F850, .start = 41847, .len = 1 }, + .{ .cp = 0x2F851, .start = 41848, .len = 1 }, + .{ .cp = 0x2F852, .start = 41849, .len = 1 }, + .{ .cp = 0x2F853, .start = 41850, .len = 1 }, + .{ .cp = 0x2F854, .start = 41851, .len = 1 }, + .{ .cp = 0x2F855, .start = 41852, .len = 1 }, + .{ .cp = 0x2F856, .start = 41853, .len = 1 }, + .{ .cp = 0x2F857, .start = 41854, .len = 1 }, + .{ .cp = 0x2F858, .start = 41855, .len = 1 }, + .{ .cp = 0x2F859, .start = 41856, .len = 1 }, + .{ .cp = 0x2F85A, .start = 41857, .len = 1 }, + .{ .cp = 0x2F85B, .start = 41858, .len = 1 }, + .{ .cp = 0x2F85C, .start = 41859, .len = 1 }, + .{ .cp = 0x2F85D, .start = 41860, .len = 1 }, + .{ .cp = 0x2F85E, .start = 41861, .len = 1 }, + .{ .cp = 0x2F85F, .start = 41862, .len = 1 }, + .{ .cp = 0x2F860, .start = 41863, .len = 1 }, + .{ .cp = 0x2F861, .start = 41864, .len = 1 }, + .{ .cp = 0x2F862, .start = 41865, .len = 1 }, + .{ .cp = 0x2F863, .start = 41866, .len = 1 }, + .{ .cp = 0x2F864, .start = 41867, .len = 1 }, + .{ .cp = 0x2F865, .start = 41868, .len = 1 }, + .{ .cp = 0x2F866, .start = 41869, .len = 1 }, + .{ .cp = 0x2F867, .start = 41870, .len = 1 }, + .{ .cp = 0x2F868, .start = 41871, .len = 1 }, + .{ .cp = 0x2F869, .start = 41872, .len = 1 }, + .{ .cp = 0x2F86A, .start = 41873, .len = 1 }, + .{ .cp = 0x2F86B, .start = 41874, .len = 1 }, + .{ .cp = 0x2F86C, .start = 41875, .len = 1 }, + .{ .cp = 0x2F86D, .start = 41876, .len = 1 }, + .{ .cp = 0x2F86E, .start = 41877, .len = 1 }, + .{ .cp = 0x2F86F, .start = 41878, .len = 1 }, + .{ .cp = 0x2F870, .start = 41879, .len = 1 }, + .{ .cp = 0x2F871, .start = 41880, .len = 1 }, + .{ .cp = 0x2F872, .start = 41881, .len = 1 }, + .{ .cp = 0x2F873, .start = 41882, .len = 1 }, + .{ .cp = 0x2F874, .start = 41883, .len = 1 }, + .{ .cp = 0x2F875, .start = 41884, .len = 1 }, + .{ .cp = 0x2F876, .start = 41885, .len = 1 }, + .{ .cp = 0x2F877, .start = 41886, .len = 1 }, + .{ .cp = 0x2F878, .start = 41887, .len = 1 }, + .{ .cp = 0x2F879, .start = 41888, .len = 1 }, + .{ .cp = 0x2F87A, .start = 41889, .len = 1 }, + .{ .cp = 0x2F87B, .start = 41890, .len = 1 }, + .{ .cp = 0x2F87C, .start = 41891, .len = 1 }, + .{ .cp = 0x2F87D, .start = 41892, .len = 1 }, + .{ .cp = 0x2F87E, .start = 41893, .len = 1 }, + .{ .cp = 0x2F87F, .start = 41894, .len = 1 }, + .{ .cp = 0x2F880, .start = 41895, .len = 1 }, + .{ .cp = 0x2F881, .start = 41896, .len = 1 }, + .{ .cp = 0x2F882, .start = 41897, .len = 1 }, + .{ .cp = 0x2F883, .start = 41898, .len = 1 }, + .{ .cp = 0x2F884, .start = 41899, .len = 1 }, + .{ .cp = 0x2F885, .start = 41900, .len = 1 }, + .{ .cp = 0x2F886, .start = 41901, .len = 1 }, + .{ .cp = 0x2F887, .start = 41902, .len = 1 }, + .{ .cp = 0x2F888, .start = 41903, .len = 1 }, + .{ .cp = 0x2F889, .start = 41904, .len = 1 }, + .{ .cp = 0x2F88A, .start = 41905, .len = 1 }, + .{ .cp = 0x2F88B, .start = 41906, .len = 1 }, + .{ .cp = 0x2F88C, .start = 41907, .len = 1 }, + .{ .cp = 0x2F88D, .start = 41908, .len = 1 }, + .{ .cp = 0x2F88E, .start = 41909, .len = 1 }, + .{ .cp = 0x2F88F, .start = 41910, .len = 1 }, + .{ .cp = 0x2F890, .start = 41911, .len = 1 }, + .{ .cp = 0x2F891, .start = 41912, .len = 1 }, + .{ .cp = 0x2F892, .start = 41913, .len = 1 }, + .{ .cp = 0x2F893, .start = 41914, .len = 1 }, + .{ .cp = 0x2F894, .start = 41915, .len = 1 }, + .{ .cp = 0x2F895, .start = 41916, .len = 1 }, + .{ .cp = 0x2F896, .start = 41917, .len = 1 }, + .{ .cp = 0x2F897, .start = 41918, .len = 1 }, + .{ .cp = 0x2F898, .start = 41919, .len = 1 }, + .{ .cp = 0x2F899, .start = 41920, .len = 1 }, + .{ .cp = 0x2F89A, .start = 41921, .len = 1 }, + .{ .cp = 0x2F89B, .start = 41922, .len = 1 }, + .{ .cp = 0x2F89C, .start = 41923, .len = 1 }, + .{ .cp = 0x2F89D, .start = 41924, .len = 1 }, + .{ .cp = 0x2F89E, .start = 41925, .len = 1 }, + .{ .cp = 0x2F89F, .start = 41926, .len = 1 }, + .{ .cp = 0x2F8A0, .start = 41927, .len = 1 }, + .{ .cp = 0x2F8A1, .start = 41928, .len = 1 }, + .{ .cp = 0x2F8A2, .start = 41929, .len = 1 }, + .{ .cp = 0x2F8A3, .start = 41930, .len = 1 }, + .{ .cp = 0x2F8A4, .start = 41931, .len = 1 }, + .{ .cp = 0x2F8A5, .start = 41932, .len = 1 }, + .{ .cp = 0x2F8A6, .start = 41933, .len = 1 }, + .{ .cp = 0x2F8A7, .start = 41934, .len = 1 }, + .{ .cp = 0x2F8A8, .start = 41935, .len = 1 }, + .{ .cp = 0x2F8A9, .start = 41936, .len = 1 }, + .{ .cp = 0x2F8AA, .start = 41937, .len = 1 }, + .{ .cp = 0x2F8AB, .start = 41938, .len = 1 }, + .{ .cp = 0x2F8AC, .start = 41939, .len = 1 }, + .{ .cp = 0x2F8AD, .start = 41940, .len = 1 }, + .{ .cp = 0x2F8AE, .start = 41941, .len = 1 }, + .{ .cp = 0x2F8AF, .start = 41942, .len = 1 }, + .{ .cp = 0x2F8B0, .start = 41943, .len = 1 }, + .{ .cp = 0x2F8B1, .start = 41944, .len = 1 }, + .{ .cp = 0x2F8B2, .start = 41945, .len = 1 }, + .{ .cp = 0x2F8B3, .start = 41946, .len = 1 }, + .{ .cp = 0x2F8B4, .start = 41947, .len = 1 }, + .{ .cp = 0x2F8B5, .start = 41948, .len = 1 }, + .{ .cp = 0x2F8B6, .start = 41949, .len = 1 }, + .{ .cp = 0x2F8B7, .start = 41950, .len = 1 }, + .{ .cp = 0x2F8B8, .start = 41951, .len = 1 }, + .{ .cp = 0x2F8B9, .start = 41952, .len = 1 }, + .{ .cp = 0x2F8BA, .start = 41953, .len = 1 }, + .{ .cp = 0x2F8BB, .start = 41954, .len = 1 }, + .{ .cp = 0x2F8BC, .start = 41955, .len = 1 }, + .{ .cp = 0x2F8BD, .start = 41956, .len = 1 }, + .{ .cp = 0x2F8BE, .start = 41957, .len = 1 }, + .{ .cp = 0x2F8BF, .start = 41958, .len = 1 }, + .{ .cp = 0x2F8C0, .start = 41959, .len = 1 }, + .{ .cp = 0x2F8C1, .start = 41960, .len = 1 }, + .{ .cp = 0x2F8C2, .start = 41961, .len = 1 }, + .{ .cp = 0x2F8C3, .start = 41962, .len = 1 }, + .{ .cp = 0x2F8C4, .start = 41963, .len = 1 }, + .{ .cp = 0x2F8C5, .start = 41964, .len = 1 }, + .{ .cp = 0x2F8C6, .start = 41965, .len = 1 }, + .{ .cp = 0x2F8C7, .start = 41966, .len = 1 }, + .{ .cp = 0x2F8C8, .start = 41967, .len = 1 }, + .{ .cp = 0x2F8C9, .start = 41968, .len = 1 }, + .{ .cp = 0x2F8CA, .start = 41969, .len = 1 }, + .{ .cp = 0x2F8CB, .start = 41970, .len = 1 }, + .{ .cp = 0x2F8CC, .start = 41971, .len = 1 }, + .{ .cp = 0x2F8CD, .start = 41972, .len = 1 }, + .{ .cp = 0x2F8CE, .start = 41973, .len = 1 }, + .{ .cp = 0x2F8CF, .start = 41974, .len = 1 }, + .{ .cp = 0x2F8D0, .start = 41975, .len = 1 }, + .{ .cp = 0x2F8D1, .start = 41976, .len = 1 }, + .{ .cp = 0x2F8D2, .start = 41977, .len = 1 }, + .{ .cp = 0x2F8D3, .start = 41978, .len = 1 }, + .{ .cp = 0x2F8D4, .start = 41979, .len = 1 }, + .{ .cp = 0x2F8D5, .start = 41980, .len = 1 }, + .{ .cp = 0x2F8D6, .start = 41981, .len = 1 }, + .{ .cp = 0x2F8D7, .start = 41982, .len = 1 }, + .{ .cp = 0x2F8D8, .start = 41983, .len = 1 }, + .{ .cp = 0x2F8D9, .start = 41984, .len = 1 }, + .{ .cp = 0x2F8DA, .start = 41985, .len = 1 }, + .{ .cp = 0x2F8DB, .start = 41986, .len = 1 }, + .{ .cp = 0x2F8DC, .start = 41987, .len = 1 }, + .{ .cp = 0x2F8DD, .start = 41988, .len = 1 }, + .{ .cp = 0x2F8DE, .start = 41989, .len = 1 }, + .{ .cp = 0x2F8DF, .start = 41990, .len = 1 }, + .{ .cp = 0x2F8E0, .start = 41991, .len = 1 }, + .{ .cp = 0x2F8E1, .start = 41992, .len = 1 }, + .{ .cp = 0x2F8E2, .start = 41993, .len = 1 }, + .{ .cp = 0x2F8E3, .start = 41994, .len = 1 }, + .{ .cp = 0x2F8E4, .start = 41995, .len = 1 }, + .{ .cp = 0x2F8E5, .start = 41996, .len = 1 }, + .{ .cp = 0x2F8E6, .start = 41997, .len = 1 }, + .{ .cp = 0x2F8E7, .start = 41998, .len = 1 }, + .{ .cp = 0x2F8E8, .start = 41999, .len = 1 }, + .{ .cp = 0x2F8E9, .start = 42000, .len = 1 }, + .{ .cp = 0x2F8EA, .start = 42001, .len = 1 }, + .{ .cp = 0x2F8EB, .start = 42002, .len = 1 }, + .{ .cp = 0x2F8EC, .start = 42003, .len = 1 }, + .{ .cp = 0x2F8ED, .start = 42004, .len = 1 }, + .{ .cp = 0x2F8EE, .start = 42005, .len = 1 }, + .{ .cp = 0x2F8EF, .start = 42006, .len = 1 }, + .{ .cp = 0x2F8F0, .start = 42007, .len = 1 }, + .{ .cp = 0x2F8F1, .start = 42008, .len = 1 }, + .{ .cp = 0x2F8F2, .start = 42009, .len = 1 }, + .{ .cp = 0x2F8F3, .start = 42010, .len = 1 }, + .{ .cp = 0x2F8F4, .start = 42011, .len = 1 }, + .{ .cp = 0x2F8F5, .start = 42012, .len = 1 }, + .{ .cp = 0x2F8F6, .start = 42013, .len = 1 }, + .{ .cp = 0x2F8F7, .start = 42014, .len = 1 }, + .{ .cp = 0x2F8F8, .start = 42015, .len = 1 }, + .{ .cp = 0x2F8F9, .start = 42016, .len = 1 }, + .{ .cp = 0x2F8FA, .start = 42017, .len = 1 }, + .{ .cp = 0x2F8FB, .start = 42018, .len = 1 }, + .{ .cp = 0x2F8FC, .start = 42019, .len = 1 }, + .{ .cp = 0x2F8FD, .start = 42020, .len = 1 }, + .{ .cp = 0x2F8FE, .start = 42021, .len = 1 }, + .{ .cp = 0x2F8FF, .start = 42022, .len = 1 }, + .{ .cp = 0x2F900, .start = 42023, .len = 1 }, + .{ .cp = 0x2F901, .start = 42024, .len = 1 }, + .{ .cp = 0x2F902, .start = 42025, .len = 1 }, + .{ .cp = 0x2F903, .start = 42026, .len = 1 }, + .{ .cp = 0x2F904, .start = 42027, .len = 1 }, + .{ .cp = 0x2F905, .start = 42028, .len = 1 }, + .{ .cp = 0x2F906, .start = 42029, .len = 1 }, + .{ .cp = 0x2F907, .start = 42030, .len = 1 }, + .{ .cp = 0x2F908, .start = 42031, .len = 1 }, + .{ .cp = 0x2F909, .start = 42032, .len = 1 }, + .{ .cp = 0x2F90A, .start = 42033, .len = 1 }, + .{ .cp = 0x2F90B, .start = 42034, .len = 1 }, + .{ .cp = 0x2F90C, .start = 42035, .len = 1 }, + .{ .cp = 0x2F90D, .start = 42036, .len = 1 }, + .{ .cp = 0x2F90E, .start = 42037, .len = 1 }, + .{ .cp = 0x2F90F, .start = 42038, .len = 1 }, + .{ .cp = 0x2F910, .start = 42039, .len = 1 }, + .{ .cp = 0x2F911, .start = 42040, .len = 1 }, + .{ .cp = 0x2F912, .start = 42041, .len = 1 }, + .{ .cp = 0x2F913, .start = 42042, .len = 1 }, + .{ .cp = 0x2F914, .start = 42043, .len = 1 }, + .{ .cp = 0x2F915, .start = 42044, .len = 1 }, + .{ .cp = 0x2F916, .start = 42045, .len = 1 }, + .{ .cp = 0x2F917, .start = 42046, .len = 1 }, + .{ .cp = 0x2F918, .start = 42047, .len = 1 }, + .{ .cp = 0x2F919, .start = 42048, .len = 1 }, + .{ .cp = 0x2F91A, .start = 42049, .len = 1 }, + .{ .cp = 0x2F91B, .start = 42050, .len = 1 }, + .{ .cp = 0x2F91C, .start = 42051, .len = 1 }, + .{ .cp = 0x2F91D, .start = 42052, .len = 1 }, + .{ .cp = 0x2F91E, .start = 42053, .len = 1 }, + .{ .cp = 0x2F91F, .start = 42054, .len = 1 }, + .{ .cp = 0x2F920, .start = 42055, .len = 1 }, + .{ .cp = 0x2F921, .start = 42056, .len = 1 }, + .{ .cp = 0x2F922, .start = 42057, .len = 1 }, + .{ .cp = 0x2F923, .start = 42058, .len = 1 }, + .{ .cp = 0x2F924, .start = 42059, .len = 1 }, + .{ .cp = 0x2F925, .start = 42060, .len = 1 }, + .{ .cp = 0x2F926, .start = 42061, .len = 1 }, + .{ .cp = 0x2F927, .start = 42062, .len = 1 }, + .{ .cp = 0x2F928, .start = 42063, .len = 1 }, + .{ .cp = 0x2F929, .start = 42064, .len = 1 }, + .{ .cp = 0x2F92A, .start = 42065, .len = 1 }, + .{ .cp = 0x2F92B, .start = 42066, .len = 1 }, + .{ .cp = 0x2F92C, .start = 42067, .len = 1 }, + .{ .cp = 0x2F92D, .start = 42068, .len = 1 }, + .{ .cp = 0x2F92E, .start = 42069, .len = 1 }, + .{ .cp = 0x2F92F, .start = 42070, .len = 1 }, + .{ .cp = 0x2F930, .start = 42071, .len = 1 }, + .{ .cp = 0x2F931, .start = 42072, .len = 1 }, + .{ .cp = 0x2F932, .start = 42073, .len = 1 }, + .{ .cp = 0x2F933, .start = 42074, .len = 1 }, + .{ .cp = 0x2F934, .start = 42075, .len = 1 }, + .{ .cp = 0x2F935, .start = 42076, .len = 1 }, + .{ .cp = 0x2F936, .start = 42077, .len = 1 }, + .{ .cp = 0x2F937, .start = 42078, .len = 1 }, + .{ .cp = 0x2F938, .start = 42079, .len = 1 }, + .{ .cp = 0x2F939, .start = 42080, .len = 1 }, + .{ .cp = 0x2F93A, .start = 42081, .len = 1 }, + .{ .cp = 0x2F93B, .start = 42082, .len = 1 }, + .{ .cp = 0x2F93C, .start = 42083, .len = 1 }, + .{ .cp = 0x2F93D, .start = 42084, .len = 1 }, + .{ .cp = 0x2F93E, .start = 42085, .len = 1 }, + .{ .cp = 0x2F93F, .start = 42086, .len = 1 }, + .{ .cp = 0x2F940, .start = 42087, .len = 1 }, + .{ .cp = 0x2F941, .start = 42088, .len = 1 }, + .{ .cp = 0x2F942, .start = 42089, .len = 1 }, + .{ .cp = 0x2F943, .start = 42090, .len = 1 }, + .{ .cp = 0x2F944, .start = 42091, .len = 1 }, + .{ .cp = 0x2F945, .start = 42092, .len = 1 }, + .{ .cp = 0x2F946, .start = 42093, .len = 1 }, + .{ .cp = 0x2F947, .start = 42094, .len = 1 }, + .{ .cp = 0x2F948, .start = 42095, .len = 1 }, + .{ .cp = 0x2F949, .start = 42096, .len = 1 }, + .{ .cp = 0x2F94A, .start = 42097, .len = 1 }, + .{ .cp = 0x2F94B, .start = 42098, .len = 1 }, + .{ .cp = 0x2F94C, .start = 42099, .len = 1 }, + .{ .cp = 0x2F94D, .start = 42100, .len = 1 }, + .{ .cp = 0x2F94E, .start = 42101, .len = 1 }, + .{ .cp = 0x2F94F, .start = 42102, .len = 1 }, + .{ .cp = 0x2F950, .start = 42103, .len = 1 }, + .{ .cp = 0x2F951, .start = 42104, .len = 1 }, + .{ .cp = 0x2F952, .start = 42105, .len = 1 }, + .{ .cp = 0x2F953, .start = 42106, .len = 1 }, + .{ .cp = 0x2F954, .start = 42107, .len = 1 }, + .{ .cp = 0x2F955, .start = 42108, .len = 1 }, + .{ .cp = 0x2F956, .start = 42109, .len = 1 }, + .{ .cp = 0x2F957, .start = 42110, .len = 1 }, + .{ .cp = 0x2F958, .start = 42111, .len = 1 }, + .{ .cp = 0x2F959, .start = 42112, .len = 1 }, + .{ .cp = 0x2F95A, .start = 42113, .len = 1 }, + .{ .cp = 0x2F95B, .start = 42114, .len = 1 }, + .{ .cp = 0x2F95C, .start = 42115, .len = 1 }, + .{ .cp = 0x2F95D, .start = 42116, .len = 1 }, + .{ .cp = 0x2F95E, .start = 42117, .len = 1 }, + .{ .cp = 0x2F95F, .start = 42118, .len = 1 }, + .{ .cp = 0x2F960, .start = 42119, .len = 1 }, + .{ .cp = 0x2F961, .start = 42120, .len = 1 }, + .{ .cp = 0x2F962, .start = 42121, .len = 1 }, + .{ .cp = 0x2F963, .start = 42122, .len = 1 }, + .{ .cp = 0x2F964, .start = 42123, .len = 1 }, + .{ .cp = 0x2F965, .start = 42124, .len = 1 }, + .{ .cp = 0x2F966, .start = 42125, .len = 1 }, + .{ .cp = 0x2F967, .start = 42126, .len = 1 }, + .{ .cp = 0x2F968, .start = 42127, .len = 1 }, + .{ .cp = 0x2F969, .start = 42128, .len = 1 }, + .{ .cp = 0x2F96A, .start = 42129, .len = 1 }, + .{ .cp = 0x2F96B, .start = 42130, .len = 1 }, + .{ .cp = 0x2F96C, .start = 42131, .len = 1 }, + .{ .cp = 0x2F96D, .start = 42132, .len = 1 }, + .{ .cp = 0x2F96E, .start = 42133, .len = 1 }, + .{ .cp = 0x2F96F, .start = 42134, .len = 1 }, + .{ .cp = 0x2F970, .start = 42135, .len = 1 }, + .{ .cp = 0x2F971, .start = 42136, .len = 1 }, + .{ .cp = 0x2F972, .start = 42137, .len = 1 }, + .{ .cp = 0x2F973, .start = 42138, .len = 1 }, + .{ .cp = 0x2F974, .start = 42139, .len = 1 }, + .{ .cp = 0x2F975, .start = 42140, .len = 1 }, + .{ .cp = 0x2F976, .start = 42141, .len = 1 }, + .{ .cp = 0x2F977, .start = 42142, .len = 1 }, + .{ .cp = 0x2F978, .start = 42143, .len = 1 }, + .{ .cp = 0x2F979, .start = 42144, .len = 1 }, + .{ .cp = 0x2F97A, .start = 42145, .len = 1 }, + .{ .cp = 0x2F97B, .start = 42146, .len = 1 }, + .{ .cp = 0x2F97C, .start = 42147, .len = 1 }, + .{ .cp = 0x2F97D, .start = 42148, .len = 1 }, + .{ .cp = 0x2F97E, .start = 42149, .len = 1 }, + .{ .cp = 0x2F97F, .start = 42150, .len = 1 }, + .{ .cp = 0x2F980, .start = 42151, .len = 1 }, + .{ .cp = 0x2F981, .start = 42152, .len = 1 }, + .{ .cp = 0x2F982, .start = 42153, .len = 1 }, + .{ .cp = 0x2F983, .start = 42154, .len = 1 }, + .{ .cp = 0x2F984, .start = 42155, .len = 1 }, + .{ .cp = 0x2F985, .start = 42156, .len = 1 }, + .{ .cp = 0x2F986, .start = 42157, .len = 1 }, + .{ .cp = 0x2F987, .start = 42158, .len = 1 }, + .{ .cp = 0x2F988, .start = 42159, .len = 1 }, + .{ .cp = 0x2F989, .start = 42160, .len = 1 }, + .{ .cp = 0x2F98A, .start = 42161, .len = 1 }, + .{ .cp = 0x2F98B, .start = 42162, .len = 1 }, + .{ .cp = 0x2F98C, .start = 42163, .len = 1 }, + .{ .cp = 0x2F98D, .start = 42164, .len = 1 }, + .{ .cp = 0x2F98E, .start = 42165, .len = 1 }, + .{ .cp = 0x2F98F, .start = 42166, .len = 1 }, + .{ .cp = 0x2F990, .start = 42167, .len = 1 }, + .{ .cp = 0x2F991, .start = 42168, .len = 1 }, + .{ .cp = 0x2F992, .start = 42169, .len = 1 }, + .{ .cp = 0x2F993, .start = 42170, .len = 1 }, + .{ .cp = 0x2F994, .start = 42171, .len = 1 }, + .{ .cp = 0x2F995, .start = 42172, .len = 1 }, + .{ .cp = 0x2F996, .start = 42173, .len = 1 }, + .{ .cp = 0x2F997, .start = 42174, .len = 1 }, + .{ .cp = 0x2F998, .start = 42175, .len = 1 }, + .{ .cp = 0x2F999, .start = 42176, .len = 1 }, + .{ .cp = 0x2F99A, .start = 42177, .len = 1 }, + .{ .cp = 0x2F99B, .start = 42178, .len = 1 }, + .{ .cp = 0x2F99C, .start = 42179, .len = 1 }, + .{ .cp = 0x2F99D, .start = 42180, .len = 1 }, + .{ .cp = 0x2F99E, .start = 42181, .len = 1 }, + .{ .cp = 0x2F99F, .start = 42182, .len = 1 }, + .{ .cp = 0x2F9A0, .start = 42183, .len = 1 }, + .{ .cp = 0x2F9A1, .start = 42184, .len = 1 }, + .{ .cp = 0x2F9A2, .start = 42185, .len = 1 }, + .{ .cp = 0x2F9A3, .start = 42186, .len = 1 }, + .{ .cp = 0x2F9A4, .start = 42187, .len = 1 }, + .{ .cp = 0x2F9A5, .start = 42188, .len = 1 }, + .{ .cp = 0x2F9A6, .start = 42189, .len = 1 }, + .{ .cp = 0x2F9A7, .start = 42190, .len = 1 }, + .{ .cp = 0x2F9A8, .start = 42191, .len = 1 }, + .{ .cp = 0x2F9A9, .start = 42192, .len = 1 }, + .{ .cp = 0x2F9AA, .start = 42193, .len = 1 }, + .{ .cp = 0x2F9AB, .start = 42194, .len = 1 }, + .{ .cp = 0x2F9AC, .start = 42195, .len = 1 }, + .{ .cp = 0x2F9AD, .start = 42196, .len = 1 }, + .{ .cp = 0x2F9AE, .start = 42197, .len = 1 }, + .{ .cp = 0x2F9AF, .start = 42198, .len = 1 }, + .{ .cp = 0x2F9B0, .start = 42199, .len = 1 }, + .{ .cp = 0x2F9B1, .start = 42200, .len = 1 }, + .{ .cp = 0x2F9B2, .start = 42201, .len = 1 }, + .{ .cp = 0x2F9B3, .start = 42202, .len = 1 }, + .{ .cp = 0x2F9B4, .start = 42203, .len = 1 }, + .{ .cp = 0x2F9B5, .start = 42204, .len = 1 }, + .{ .cp = 0x2F9B6, .start = 42205, .len = 1 }, + .{ .cp = 0x2F9B7, .start = 42206, .len = 1 }, + .{ .cp = 0x2F9B8, .start = 42207, .len = 1 }, + .{ .cp = 0x2F9B9, .start = 42208, .len = 1 }, + .{ .cp = 0x2F9BA, .start = 42209, .len = 1 }, + .{ .cp = 0x2F9BB, .start = 42210, .len = 1 }, + .{ .cp = 0x2F9BC, .start = 42211, .len = 1 }, + .{ .cp = 0x2F9BD, .start = 42212, .len = 1 }, + .{ .cp = 0x2F9BE, .start = 42213, .len = 1 }, + .{ .cp = 0x2F9BF, .start = 42214, .len = 1 }, + .{ .cp = 0x2F9C0, .start = 42215, .len = 1 }, + .{ .cp = 0x2F9C1, .start = 42216, .len = 1 }, + .{ .cp = 0x2F9C2, .start = 42217, .len = 1 }, + .{ .cp = 0x2F9C3, .start = 42218, .len = 1 }, + .{ .cp = 0x2F9C4, .start = 42219, .len = 1 }, + .{ .cp = 0x2F9C5, .start = 42220, .len = 1 }, + .{ .cp = 0x2F9C6, .start = 42221, .len = 1 }, + .{ .cp = 0x2F9C7, .start = 42222, .len = 1 }, + .{ .cp = 0x2F9C8, .start = 42223, .len = 1 }, + .{ .cp = 0x2F9C9, .start = 42224, .len = 1 }, + .{ .cp = 0x2F9CA, .start = 42225, .len = 1 }, + .{ .cp = 0x2F9CB, .start = 42226, .len = 1 }, + .{ .cp = 0x2F9CC, .start = 42227, .len = 1 }, + .{ .cp = 0x2F9CD, .start = 42228, .len = 1 }, + .{ .cp = 0x2F9CE, .start = 42229, .len = 1 }, + .{ .cp = 0x2F9CF, .start = 42230, .len = 1 }, + .{ .cp = 0x2F9D0, .start = 42231, .len = 1 }, + .{ .cp = 0x2F9D1, .start = 42232, .len = 1 }, + .{ .cp = 0x2F9D2, .start = 42233, .len = 1 }, + .{ .cp = 0x2F9D3, .start = 42234, .len = 1 }, + .{ .cp = 0x2F9D4, .start = 42235, .len = 1 }, + .{ .cp = 0x2F9D5, .start = 42236, .len = 1 }, + .{ .cp = 0x2F9D6, .start = 42237, .len = 1 }, + .{ .cp = 0x2F9D7, .start = 42238, .len = 1 }, + .{ .cp = 0x2F9D8, .start = 42239, .len = 1 }, + .{ .cp = 0x2F9D9, .start = 42240, .len = 1 }, + .{ .cp = 0x2F9DA, .start = 42241, .len = 1 }, + .{ .cp = 0x2F9DB, .start = 42242, .len = 1 }, + .{ .cp = 0x2F9DC, .start = 42243, .len = 1 }, + .{ .cp = 0x2F9DD, .start = 42244, .len = 1 }, + .{ .cp = 0x2F9DE, .start = 42245, .len = 1 }, + .{ .cp = 0x2F9DF, .start = 42246, .len = 1 }, + .{ .cp = 0x2F9E0, .start = 42247, .len = 1 }, + .{ .cp = 0x2F9E1, .start = 42248, .len = 1 }, + .{ .cp = 0x2F9E2, .start = 42249, .len = 1 }, + .{ .cp = 0x2F9E3, .start = 42250, .len = 1 }, + .{ .cp = 0x2F9E4, .start = 42251, .len = 1 }, + .{ .cp = 0x2F9E5, .start = 42252, .len = 1 }, + .{ .cp = 0x2F9E6, .start = 42253, .len = 1 }, + .{ .cp = 0x2F9E7, .start = 42254, .len = 1 }, + .{ .cp = 0x2F9E8, .start = 42255, .len = 1 }, + .{ .cp = 0x2F9E9, .start = 42256, .len = 1 }, + .{ .cp = 0x2F9EA, .start = 42257, .len = 1 }, + .{ .cp = 0x2F9EB, .start = 42258, .len = 1 }, + .{ .cp = 0x2F9EC, .start = 42259, .len = 1 }, + .{ .cp = 0x2F9ED, .start = 42260, .len = 1 }, + .{ .cp = 0x2F9EE, .start = 42261, .len = 1 }, + .{ .cp = 0x2F9EF, .start = 42262, .len = 1 }, + .{ .cp = 0x2F9F0, .start = 42263, .len = 1 }, + .{ .cp = 0x2F9F1, .start = 42264, .len = 1 }, + .{ .cp = 0x2F9F2, .start = 42265, .len = 1 }, + .{ .cp = 0x2F9F3, .start = 42266, .len = 1 }, + .{ .cp = 0x2F9F4, .start = 42267, .len = 1 }, + .{ .cp = 0x2F9F5, .start = 42268, .len = 1 }, + .{ .cp = 0x2F9F6, .start = 42269, .len = 1 }, + .{ .cp = 0x2F9F7, .start = 42270, .len = 1 }, + .{ .cp = 0x2F9F8, .start = 42271, .len = 1 }, + .{ .cp = 0x2F9F9, .start = 42272, .len = 1 }, + .{ .cp = 0x2F9FA, .start = 42273, .len = 1 }, + .{ .cp = 0x2F9FB, .start = 42274, .len = 1 }, + .{ .cp = 0x2F9FC, .start = 42275, .len = 1 }, + .{ .cp = 0x2F9FD, .start = 42276, .len = 1 }, + .{ .cp = 0x2F9FE, .start = 42277, .len = 1 }, + .{ .cp = 0x2F9FF, .start = 42278, .len = 1 }, + .{ .cp = 0x2FA00, .start = 42279, .len = 1 }, + .{ .cp = 0x2FA01, .start = 42280, .len = 1 }, + .{ .cp = 0x2FA02, .start = 42281, .len = 1 }, + .{ .cp = 0x2FA03, .start = 42282, .len = 1 }, + .{ .cp = 0x2FA04, .start = 42283, .len = 1 }, + .{ .cp = 0x2FA05, .start = 42284, .len = 1 }, + .{ .cp = 0x2FA06, .start = 42285, .len = 1 }, + .{ .cp = 0x2FA07, .start = 42286, .len = 1 }, + .{ .cp = 0x2FA08, .start = 42287, .len = 1 }, + .{ .cp = 0x2FA09, .start = 42288, .len = 1 }, + .{ .cp = 0x2FA0A, .start = 42289, .len = 1 }, + .{ .cp = 0x2FA0B, .start = 42290, .len = 1 }, + .{ .cp = 0x2FA0C, .start = 42291, .len = 1 }, + .{ .cp = 0x2FA0D, .start = 42292, .len = 1 }, + .{ .cp = 0x2FA0E, .start = 42293, .len = 1 }, + .{ .cp = 0x2FA0F, .start = 42294, .len = 1 }, + .{ .cp = 0x2FA10, .start = 42295, .len = 1 }, + .{ .cp = 0x2FA11, .start = 42296, .len = 1 }, + .{ .cp = 0x2FA12, .start = 42297, .len = 1 }, + .{ .cp = 0x2FA13, .start = 42298, .len = 1 }, + .{ .cp = 0x2FA14, .start = 42299, .len = 1 }, + .{ .cp = 0x2FA15, .start = 42300, .len = 1 }, + .{ .cp = 0x2FA16, .start = 42301, .len = 1 }, + .{ .cp = 0x2FA17, .start = 42302, .len = 1 }, + .{ .cp = 0x2FA18, .start = 42303, .len = 1 }, + .{ .cp = 0x2FA19, .start = 42304, .len = 1 }, + .{ .cp = 0x2FA1A, .start = 42305, .len = 1 }, + .{ .cp = 0x2FA1B, .start = 42306, .len = 1 }, + .{ .cp = 0x2FA1C, .start = 42307, .len = 1 }, + .{ .cp = 0x2FA1D, .start = 42308, .len = 1 }, +}; + +// General-category Mn/Mc/Me codepoints, sorted; the Rust tokenizers' StripAccents removes all of category M*. +pub const marks = [_]u21{ + 0x0300, 0x0301, 0x0302, 0x0303, 0x0304, 0x0305, 0x0306, 0x0307, + 0x0308, 0x0309, 0x030A, 0x030B, 0x030C, 0x030D, 0x030E, 0x030F, + 0x0310, 0x0311, 0x0312, 0x0313, 0x0314, 0x0315, 0x0316, 0x0317, + 0x0318, 0x0319, 0x031A, 0x031B, 0x031C, 0x031D, 0x031E, 0x031F, + 0x0320, 0x0321, 0x0322, 0x0323, 0x0324, 0x0325, 0x0326, 0x0327, + 0x0328, 0x0329, 0x032A, 0x032B, 0x032C, 0x032D, 0x032E, 0x032F, + 0x0330, 0x0331, 0x0332, 0x0333, 0x0334, 0x0335, 0x0336, 0x0337, + 0x0338, 0x0339, 0x033A, 0x033B, 0x033C, 0x033D, 0x033E, 0x033F, + 0x0340, 0x0341, 0x0342, 0x0343, 0x0344, 0x0345, 0x0346, 0x0347, + 0x0348, 0x0349, 0x034A, 0x034B, 0x034C, 0x034D, 0x034E, 0x034F, + 0x0350, 0x0351, 0x0352, 0x0353, 0x0354, 0x0355, 0x0356, 0x0357, + 0x0358, 0x0359, 0x035A, 0x035B, 0x035C, 0x035D, 0x035E, 0x035F, + 0x0360, 0x0361, 0x0362, 0x0363, 0x0364, 0x0365, 0x0366, 0x0367, + 0x0368, 0x0369, 0x036A, 0x036B, 0x036C, 0x036D, 0x036E, 0x036F, + 0x0483, 0x0484, 0x0485, 0x0486, 0x0487, 0x0488, 0x0489, 0x0591, + 0x0592, 0x0593, 0x0594, 0x0595, 0x0596, 0x0597, 0x0598, 0x0599, + 0x059A, 0x059B, 0x059C, 0x059D, 0x059E, 0x059F, 0x05A0, 0x05A1, + 0x05A2, 0x05A3, 0x05A4, 0x05A5, 0x05A6, 0x05A7, 0x05A8, 0x05A9, + 0x05AA, 0x05AB, 0x05AC, 0x05AD, 0x05AE, 0x05AF, 0x05B0, 0x05B1, + 0x05B2, 0x05B3, 0x05B4, 0x05B5, 0x05B6, 0x05B7, 0x05B8, 0x05B9, + 0x05BA, 0x05BB, 0x05BC, 0x05BD, 0x05BF, 0x05C1, 0x05C2, 0x05C4, + 0x05C5, 0x05C7, 0x0610, 0x0611, 0x0612, 0x0613, 0x0614, 0x0615, + 0x0616, 0x0617, 0x0618, 0x0619, 0x061A, 0x064B, 0x064C, 0x064D, + 0x064E, 0x064F, 0x0650, 0x0651, 0x0652, 0x0653, 0x0654, 0x0655, + 0x0656, 0x0657, 0x0658, 0x0659, 0x065A, 0x065B, 0x065C, 0x065D, + 0x065E, 0x065F, 0x0670, 0x06D6, 0x06D7, 0x06D8, 0x06D9, 0x06DA, + 0x06DB, 0x06DC, 0x06DF, 0x06E0, 0x06E1, 0x06E2, 0x06E3, 0x06E4, + 0x06E7, 0x06E8, 0x06EA, 0x06EB, 0x06EC, 0x06ED, 0x0711, 0x0730, + 0x0731, 0x0732, 0x0733, 0x0734, 0x0735, 0x0736, 0x0737, 0x0738, + 0x0739, 0x073A, 0x073B, 0x073C, 0x073D, 0x073E, 0x073F, 0x0740, + 0x0741, 0x0742, 0x0743, 0x0744, 0x0745, 0x0746, 0x0747, 0x0748, + 0x0749, 0x074A, 0x07A6, 0x07A7, 0x07A8, 0x07A9, 0x07AA, 0x07AB, + 0x07AC, 0x07AD, 0x07AE, 0x07AF, 0x07B0, 0x07EB, 0x07EC, 0x07ED, + 0x07EE, 0x07EF, 0x07F0, 0x07F1, 0x07F2, 0x07F3, 0x07FD, 0x0816, + 0x0817, 0x0818, 0x0819, 0x081B, 0x081C, 0x081D, 0x081E, 0x081F, + 0x0820, 0x0821, 0x0822, 0x0823, 0x0825, 0x0826, 0x0827, 0x0829, + 0x082A, 0x082B, 0x082C, 0x082D, 0x0859, 0x085A, 0x085B, 0x0897, + 0x0898, 0x0899, 0x089A, 0x089B, 0x089C, 0x089D, 0x089E, 0x089F, + 0x08CA, 0x08CB, 0x08CC, 0x08CD, 0x08CE, 0x08CF, 0x08D0, 0x08D1, + 0x08D2, 0x08D3, 0x08D4, 0x08D5, 0x08D6, 0x08D7, 0x08D8, 0x08D9, + 0x08DA, 0x08DB, 0x08DC, 0x08DD, 0x08DE, 0x08DF, 0x08E0, 0x08E1, + 0x08E3, 0x08E4, 0x08E5, 0x08E6, 0x08E7, 0x08E8, 0x08E9, 0x08EA, + 0x08EB, 0x08EC, 0x08ED, 0x08EE, 0x08EF, 0x08F0, 0x08F1, 0x08F2, + 0x08F3, 0x08F4, 0x08F5, 0x08F6, 0x08F7, 0x08F8, 0x08F9, 0x08FA, + 0x08FB, 0x08FC, 0x08FD, 0x08FE, 0x08FF, 0x0900, 0x0901, 0x0902, + 0x0903, 0x093A, 0x093B, 0x093C, 0x093E, 0x093F, 0x0940, 0x0941, + 0x0942, 0x0943, 0x0944, 0x0945, 0x0946, 0x0947, 0x0948, 0x0949, + 0x094A, 0x094B, 0x094C, 0x094D, 0x094E, 0x094F, 0x0951, 0x0952, + 0x0953, 0x0954, 0x0955, 0x0956, 0x0957, 0x0962, 0x0963, 0x0981, + 0x0982, 0x0983, 0x09BC, 0x09BE, 0x09BF, 0x09C0, 0x09C1, 0x09C2, + 0x09C3, 0x09C4, 0x09C7, 0x09C8, 0x09CB, 0x09CC, 0x09CD, 0x09D7, + 0x09E2, 0x09E3, 0x09FE, 0x0A01, 0x0A02, 0x0A03, 0x0A3C, 0x0A3E, + 0x0A3F, 0x0A40, 0x0A41, 0x0A42, 0x0A47, 0x0A48, 0x0A4B, 0x0A4C, + 0x0A4D, 0x0A51, 0x0A70, 0x0A71, 0x0A75, 0x0A81, 0x0A82, 0x0A83, + 0x0ABC, 0x0ABE, 0x0ABF, 0x0AC0, 0x0AC1, 0x0AC2, 0x0AC3, 0x0AC4, + 0x0AC5, 0x0AC7, 0x0AC8, 0x0AC9, 0x0ACB, 0x0ACC, 0x0ACD, 0x0AE2, + 0x0AE3, 0x0AFA, 0x0AFB, 0x0AFC, 0x0AFD, 0x0AFE, 0x0AFF, 0x0B01, + 0x0B02, 0x0B03, 0x0B3C, 0x0B3E, 0x0B3F, 0x0B40, 0x0B41, 0x0B42, + 0x0B43, 0x0B44, 0x0B47, 0x0B48, 0x0B4B, 0x0B4C, 0x0B4D, 0x0B55, + 0x0B56, 0x0B57, 0x0B62, 0x0B63, 0x0B82, 0x0BBE, 0x0BBF, 0x0BC0, + 0x0BC1, 0x0BC2, 0x0BC6, 0x0BC7, 0x0BC8, 0x0BCA, 0x0BCB, 0x0BCC, + 0x0BCD, 0x0BD7, 0x0C00, 0x0C01, 0x0C02, 0x0C03, 0x0C04, 0x0C3C, + 0x0C3E, 0x0C3F, 0x0C40, 0x0C41, 0x0C42, 0x0C43, 0x0C44, 0x0C46, + 0x0C47, 0x0C48, 0x0C4A, 0x0C4B, 0x0C4C, 0x0C4D, 0x0C55, 0x0C56, + 0x0C62, 0x0C63, 0x0C81, 0x0C82, 0x0C83, 0x0CBC, 0x0CBE, 0x0CBF, + 0x0CC0, 0x0CC1, 0x0CC2, 0x0CC3, 0x0CC4, 0x0CC6, 0x0CC7, 0x0CC8, + 0x0CCA, 0x0CCB, 0x0CCC, 0x0CCD, 0x0CD5, 0x0CD6, 0x0CE2, 0x0CE3, + 0x0CF3, 0x0D00, 0x0D01, 0x0D02, 0x0D03, 0x0D3B, 0x0D3C, 0x0D3E, + 0x0D3F, 0x0D40, 0x0D41, 0x0D42, 0x0D43, 0x0D44, 0x0D46, 0x0D47, + 0x0D48, 0x0D4A, 0x0D4B, 0x0D4C, 0x0D4D, 0x0D57, 0x0D62, 0x0D63, + 0x0D81, 0x0D82, 0x0D83, 0x0DCA, 0x0DCF, 0x0DD0, 0x0DD1, 0x0DD2, + 0x0DD3, 0x0DD4, 0x0DD6, 0x0DD8, 0x0DD9, 0x0DDA, 0x0DDB, 0x0DDC, + 0x0DDD, 0x0DDE, 0x0DDF, 0x0DF2, 0x0DF3, 0x0E31, 0x0E34, 0x0E35, + 0x0E36, 0x0E37, 0x0E38, 0x0E39, 0x0E3A, 0x0E47, 0x0E48, 0x0E49, + 0x0E4A, 0x0E4B, 0x0E4C, 0x0E4D, 0x0E4E, 0x0EB1, 0x0EB4, 0x0EB5, + 0x0EB6, 0x0EB7, 0x0EB8, 0x0EB9, 0x0EBA, 0x0EBB, 0x0EBC, 0x0EC8, + 0x0EC9, 0x0ECA, 0x0ECB, 0x0ECC, 0x0ECD, 0x0ECE, 0x0F18, 0x0F19, + 0x0F35, 0x0F37, 0x0F39, 0x0F3E, 0x0F3F, 0x0F71, 0x0F72, 0x0F73, + 0x0F74, 0x0F75, 0x0F76, 0x0F77, 0x0F78, 0x0F79, 0x0F7A, 0x0F7B, + 0x0F7C, 0x0F7D, 0x0F7E, 0x0F7F, 0x0F80, 0x0F81, 0x0F82, 0x0F83, + 0x0F84, 0x0F86, 0x0F87, 0x0F8D, 0x0F8E, 0x0F8F, 0x0F90, 0x0F91, + 0x0F92, 0x0F93, 0x0F94, 0x0F95, 0x0F96, 0x0F97, 0x0F99, 0x0F9A, + 0x0F9B, 0x0F9C, 0x0F9D, 0x0F9E, 0x0F9F, 0x0FA0, 0x0FA1, 0x0FA2, + 0x0FA3, 0x0FA4, 0x0FA5, 0x0FA6, 0x0FA7, 0x0FA8, 0x0FA9, 0x0FAA, + 0x0FAB, 0x0FAC, 0x0FAD, 0x0FAE, 0x0FAF, 0x0FB0, 0x0FB1, 0x0FB2, + 0x0FB3, 0x0FB4, 0x0FB5, 0x0FB6, 0x0FB7, 0x0FB8, 0x0FB9, 0x0FBA, + 0x0FBB, 0x0FBC, 0x0FC6, 0x102B, 0x102C, 0x102D, 0x102E, 0x102F, + 0x1030, 0x1031, 0x1032, 0x1033, 0x1034, 0x1035, 0x1036, 0x1037, + 0x1038, 0x1039, 0x103A, 0x103B, 0x103C, 0x103D, 0x103E, 0x1056, + 0x1057, 0x1058, 0x1059, 0x105E, 0x105F, 0x1060, 0x1062, 0x1063, + 0x1064, 0x1067, 0x1068, 0x1069, 0x106A, 0x106B, 0x106C, 0x106D, + 0x1071, 0x1072, 0x1073, 0x1074, 0x1082, 0x1083, 0x1084, 0x1085, + 0x1086, 0x1087, 0x1088, 0x1089, 0x108A, 0x108B, 0x108C, 0x108D, + 0x108F, 0x109A, 0x109B, 0x109C, 0x109D, 0x135D, 0x135E, 0x135F, + 0x1712, 0x1713, 0x1714, 0x1715, 0x1732, 0x1733, 0x1734, 0x1752, + 0x1753, 0x1772, 0x1773, 0x17B4, 0x17B5, 0x17B6, 0x17B7, 0x17B8, + 0x17B9, 0x17BA, 0x17BB, 0x17BC, 0x17BD, 0x17BE, 0x17BF, 0x17C0, + 0x17C1, 0x17C2, 0x17C3, 0x17C4, 0x17C5, 0x17C6, 0x17C7, 0x17C8, + 0x17C9, 0x17CA, 0x17CB, 0x17CC, 0x17CD, 0x17CE, 0x17CF, 0x17D0, + 0x17D1, 0x17D2, 0x17D3, 0x17DD, 0x180B, 0x180C, 0x180D, 0x180F, + 0x1885, 0x1886, 0x18A9, 0x1920, 0x1921, 0x1922, 0x1923, 0x1924, + 0x1925, 0x1926, 0x1927, 0x1928, 0x1929, 0x192A, 0x192B, 0x1930, + 0x1931, 0x1932, 0x1933, 0x1934, 0x1935, 0x1936, 0x1937, 0x1938, + 0x1939, 0x193A, 0x193B, 0x1A17, 0x1A18, 0x1A19, 0x1A1A, 0x1A1B, + 0x1A55, 0x1A56, 0x1A57, 0x1A58, 0x1A59, 0x1A5A, 0x1A5B, 0x1A5C, + 0x1A5D, 0x1A5E, 0x1A60, 0x1A61, 0x1A62, 0x1A63, 0x1A64, 0x1A65, + 0x1A66, 0x1A67, 0x1A68, 0x1A69, 0x1A6A, 0x1A6B, 0x1A6C, 0x1A6D, + 0x1A6E, 0x1A6F, 0x1A70, 0x1A71, 0x1A72, 0x1A73, 0x1A74, 0x1A75, + 0x1A76, 0x1A77, 0x1A78, 0x1A79, 0x1A7A, 0x1A7B, 0x1A7C, 0x1A7F, + 0x1AB0, 0x1AB1, 0x1AB2, 0x1AB3, 0x1AB4, 0x1AB5, 0x1AB6, 0x1AB7, + 0x1AB8, 0x1AB9, 0x1ABA, 0x1ABB, 0x1ABC, 0x1ABD, 0x1ABE, 0x1ABF, + 0x1AC0, 0x1AC1, 0x1AC2, 0x1AC3, 0x1AC4, 0x1AC5, 0x1AC6, 0x1AC7, + 0x1AC8, 0x1AC9, 0x1ACA, 0x1ACB, 0x1ACC, 0x1ACD, 0x1ACE, 0x1B00, + 0x1B01, 0x1B02, 0x1B03, 0x1B04, 0x1B34, 0x1B35, 0x1B36, 0x1B37, + 0x1B38, 0x1B39, 0x1B3A, 0x1B3B, 0x1B3C, 0x1B3D, 0x1B3E, 0x1B3F, + 0x1B40, 0x1B41, 0x1B42, 0x1B43, 0x1B44, 0x1B6B, 0x1B6C, 0x1B6D, + 0x1B6E, 0x1B6F, 0x1B70, 0x1B71, 0x1B72, 0x1B73, 0x1B80, 0x1B81, + 0x1B82, 0x1BA1, 0x1BA2, 0x1BA3, 0x1BA4, 0x1BA5, 0x1BA6, 0x1BA7, + 0x1BA8, 0x1BA9, 0x1BAA, 0x1BAB, 0x1BAC, 0x1BAD, 0x1BE6, 0x1BE7, + 0x1BE8, 0x1BE9, 0x1BEA, 0x1BEB, 0x1BEC, 0x1BED, 0x1BEE, 0x1BEF, + 0x1BF0, 0x1BF1, 0x1BF2, 0x1BF3, 0x1C24, 0x1C25, 0x1C26, 0x1C27, + 0x1C28, 0x1C29, 0x1C2A, 0x1C2B, 0x1C2C, 0x1C2D, 0x1C2E, 0x1C2F, + 0x1C30, 0x1C31, 0x1C32, 0x1C33, 0x1C34, 0x1C35, 0x1C36, 0x1C37, + 0x1CD0, 0x1CD1, 0x1CD2, 0x1CD4, 0x1CD5, 0x1CD6, 0x1CD7, 0x1CD8, + 0x1CD9, 0x1CDA, 0x1CDB, 0x1CDC, 0x1CDD, 0x1CDE, 0x1CDF, 0x1CE0, + 0x1CE1, 0x1CE2, 0x1CE3, 0x1CE4, 0x1CE5, 0x1CE6, 0x1CE7, 0x1CE8, + 0x1CED, 0x1CF4, 0x1CF7, 0x1CF8, 0x1CF9, 0x1DC0, 0x1DC1, 0x1DC2, + 0x1DC3, 0x1DC4, 0x1DC5, 0x1DC6, 0x1DC7, 0x1DC8, 0x1DC9, 0x1DCA, + 0x1DCB, 0x1DCC, 0x1DCD, 0x1DCE, 0x1DCF, 0x1DD0, 0x1DD1, 0x1DD2, + 0x1DD3, 0x1DD4, 0x1DD5, 0x1DD6, 0x1DD7, 0x1DD8, 0x1DD9, 0x1DDA, + 0x1DDB, 0x1DDC, 0x1DDD, 0x1DDE, 0x1DDF, 0x1DE0, 0x1DE1, 0x1DE2, + 0x1DE3, 0x1DE4, 0x1DE5, 0x1DE6, 0x1DE7, 0x1DE8, 0x1DE9, 0x1DEA, + 0x1DEB, 0x1DEC, 0x1DED, 0x1DEE, 0x1DEF, 0x1DF0, 0x1DF1, 0x1DF2, + 0x1DF3, 0x1DF4, 0x1DF5, 0x1DF6, 0x1DF7, 0x1DF8, 0x1DF9, 0x1DFA, + 0x1DFB, 0x1DFC, 0x1DFD, 0x1DFE, 0x1DFF, 0x20D0, 0x20D1, 0x20D2, + 0x20D3, 0x20D4, 0x20D5, 0x20D6, 0x20D7, 0x20D8, 0x20D9, 0x20DA, + 0x20DB, 0x20DC, 0x20DD, 0x20DE, 0x20DF, 0x20E0, 0x20E1, 0x20E2, + 0x20E3, 0x20E4, 0x20E5, 0x20E6, 0x20E7, 0x20E8, 0x20E9, 0x20EA, + 0x20EB, 0x20EC, 0x20ED, 0x20EE, 0x20EF, 0x20F0, 0x2CEF, 0x2CF0, + 0x2CF1, 0x2D7F, 0x2DE0, 0x2DE1, 0x2DE2, 0x2DE3, 0x2DE4, 0x2DE5, + 0x2DE6, 0x2DE7, 0x2DE8, 0x2DE9, 0x2DEA, 0x2DEB, 0x2DEC, 0x2DED, + 0x2DEE, 0x2DEF, 0x2DF0, 0x2DF1, 0x2DF2, 0x2DF3, 0x2DF4, 0x2DF5, + 0x2DF6, 0x2DF7, 0x2DF8, 0x2DF9, 0x2DFA, 0x2DFB, 0x2DFC, 0x2DFD, + 0x2DFE, 0x2DFF, 0x302A, 0x302B, 0x302C, 0x302D, 0x302E, 0x302F, + 0x3099, 0x309A, 0xA66F, 0xA670, 0xA671, 0xA672, 0xA674, 0xA675, + 0xA676, 0xA677, 0xA678, 0xA679, 0xA67A, 0xA67B, 0xA67C, 0xA67D, + 0xA69E, 0xA69F, 0xA6F0, 0xA6F1, 0xA802, 0xA806, 0xA80B, 0xA823, + 0xA824, 0xA825, 0xA826, 0xA827, 0xA82C, 0xA880, 0xA881, 0xA8B4, + 0xA8B5, 0xA8B6, 0xA8B7, 0xA8B8, 0xA8B9, 0xA8BA, 0xA8BB, 0xA8BC, + 0xA8BD, 0xA8BE, 0xA8BF, 0xA8C0, 0xA8C1, 0xA8C2, 0xA8C3, 0xA8C4, + 0xA8C5, 0xA8E0, 0xA8E1, 0xA8E2, 0xA8E3, 0xA8E4, 0xA8E5, 0xA8E6, + 0xA8E7, 0xA8E8, 0xA8E9, 0xA8EA, 0xA8EB, 0xA8EC, 0xA8ED, 0xA8EE, + 0xA8EF, 0xA8F0, 0xA8F1, 0xA8FF, 0xA926, 0xA927, 0xA928, 0xA929, + 0xA92A, 0xA92B, 0xA92C, 0xA92D, 0xA947, 0xA948, 0xA949, 0xA94A, + 0xA94B, 0xA94C, 0xA94D, 0xA94E, 0xA94F, 0xA950, 0xA951, 0xA952, + 0xA953, 0xA980, 0xA981, 0xA982, 0xA983, 0xA9B3, 0xA9B4, 0xA9B5, + 0xA9B6, 0xA9B7, 0xA9B8, 0xA9B9, 0xA9BA, 0xA9BB, 0xA9BC, 0xA9BD, + 0xA9BE, 0xA9BF, 0xA9C0, 0xA9E5, 0xAA29, 0xAA2A, 0xAA2B, 0xAA2C, + 0xAA2D, 0xAA2E, 0xAA2F, 0xAA30, 0xAA31, 0xAA32, 0xAA33, 0xAA34, + 0xAA35, 0xAA36, 0xAA43, 0xAA4C, 0xAA4D, 0xAA7B, 0xAA7C, 0xAA7D, + 0xAAB0, 0xAAB2, 0xAAB3, 0xAAB4, 0xAAB7, 0xAAB8, 0xAABE, 0xAABF, + 0xAAC1, 0xAAEB, 0xAAEC, 0xAAED, 0xAAEE, 0xAAEF, 0xAAF5, 0xAAF6, + 0xABE3, 0xABE4, 0xABE5, 0xABE6, 0xABE7, 0xABE8, 0xABE9, 0xABEA, + 0xABEC, 0xABED, 0xFB1E, 0xFE00, 0xFE01, 0xFE02, 0xFE03, 0xFE04, + 0xFE05, 0xFE06, 0xFE07, 0xFE08, 0xFE09, 0xFE0A, 0xFE0B, 0xFE0C, + 0xFE0D, 0xFE0E, 0xFE0F, 0xFE20, 0xFE21, 0xFE22, 0xFE23, 0xFE24, + 0xFE25, 0xFE26, 0xFE27, 0xFE28, 0xFE29, 0xFE2A, 0xFE2B, 0xFE2C, + 0xFE2D, 0xFE2E, 0xFE2F, 0x101FD, 0x102E0, 0x10376, 0x10377, 0x10378, + 0x10379, 0x1037A, 0x10A01, 0x10A02, 0x10A03, 0x10A05, 0x10A06, 0x10A0C, + 0x10A0D, 0x10A0E, 0x10A0F, 0x10A38, 0x10A39, 0x10A3A, 0x10A3F, 0x10AE5, + 0x10AE6, 0x10D24, 0x10D25, 0x10D26, 0x10D27, 0x10D69, 0x10D6A, 0x10D6B, + 0x10D6C, 0x10D6D, 0x10EAB, 0x10EAC, 0x10EFC, 0x10EFD, 0x10EFE, 0x10EFF, + 0x10F46, 0x10F47, 0x10F48, 0x10F49, 0x10F4A, 0x10F4B, 0x10F4C, 0x10F4D, + 0x10F4E, 0x10F4F, 0x10F50, 0x10F82, 0x10F83, 0x10F84, 0x10F85, 0x11000, + 0x11001, 0x11002, 0x11038, 0x11039, 0x1103A, 0x1103B, 0x1103C, 0x1103D, + 0x1103E, 0x1103F, 0x11040, 0x11041, 0x11042, 0x11043, 0x11044, 0x11045, + 0x11046, 0x11070, 0x11073, 0x11074, 0x1107F, 0x11080, 0x11081, 0x11082, + 0x110B0, 0x110B1, 0x110B2, 0x110B3, 0x110B4, 0x110B5, 0x110B6, 0x110B7, + 0x110B8, 0x110B9, 0x110BA, 0x110C2, 0x11100, 0x11101, 0x11102, 0x11127, + 0x11128, 0x11129, 0x1112A, 0x1112B, 0x1112C, 0x1112D, 0x1112E, 0x1112F, + 0x11130, 0x11131, 0x11132, 0x11133, 0x11134, 0x11145, 0x11146, 0x11173, + 0x11180, 0x11181, 0x11182, 0x111B3, 0x111B4, 0x111B5, 0x111B6, 0x111B7, + 0x111B8, 0x111B9, 0x111BA, 0x111BB, 0x111BC, 0x111BD, 0x111BE, 0x111BF, + 0x111C0, 0x111C9, 0x111CA, 0x111CB, 0x111CC, 0x111CE, 0x111CF, 0x1122C, + 0x1122D, 0x1122E, 0x1122F, 0x11230, 0x11231, 0x11232, 0x11233, 0x11234, + 0x11235, 0x11236, 0x11237, 0x1123E, 0x11241, 0x112DF, 0x112E0, 0x112E1, + 0x112E2, 0x112E3, 0x112E4, 0x112E5, 0x112E6, 0x112E7, 0x112E8, 0x112E9, + 0x112EA, 0x11300, 0x11301, 0x11302, 0x11303, 0x1133B, 0x1133C, 0x1133E, + 0x1133F, 0x11340, 0x11341, 0x11342, 0x11343, 0x11344, 0x11347, 0x11348, + 0x1134B, 0x1134C, 0x1134D, 0x11357, 0x11362, 0x11363, 0x11366, 0x11367, + 0x11368, 0x11369, 0x1136A, 0x1136B, 0x1136C, 0x11370, 0x11371, 0x11372, + 0x11373, 0x11374, 0x113B8, 0x113B9, 0x113BA, 0x113BB, 0x113BC, 0x113BD, + 0x113BE, 0x113BF, 0x113C0, 0x113C2, 0x113C5, 0x113C7, 0x113C8, 0x113C9, + 0x113CA, 0x113CC, 0x113CD, 0x113CE, 0x113CF, 0x113D0, 0x113D2, 0x113E1, + 0x113E2, 0x11435, 0x11436, 0x11437, 0x11438, 0x11439, 0x1143A, 0x1143B, + 0x1143C, 0x1143D, 0x1143E, 0x1143F, 0x11440, 0x11441, 0x11442, 0x11443, + 0x11444, 0x11445, 0x11446, 0x1145E, 0x114B0, 0x114B1, 0x114B2, 0x114B3, + 0x114B4, 0x114B5, 0x114B6, 0x114B7, 0x114B8, 0x114B9, 0x114BA, 0x114BB, + 0x114BC, 0x114BD, 0x114BE, 0x114BF, 0x114C0, 0x114C1, 0x114C2, 0x114C3, + 0x115AF, 0x115B0, 0x115B1, 0x115B2, 0x115B3, 0x115B4, 0x115B5, 0x115B8, + 0x115B9, 0x115BA, 0x115BB, 0x115BC, 0x115BD, 0x115BE, 0x115BF, 0x115C0, + 0x115DC, 0x115DD, 0x11630, 0x11631, 0x11632, 0x11633, 0x11634, 0x11635, + 0x11636, 0x11637, 0x11638, 0x11639, 0x1163A, 0x1163B, 0x1163C, 0x1163D, + 0x1163E, 0x1163F, 0x11640, 0x116AB, 0x116AC, 0x116AD, 0x116AE, 0x116AF, + 0x116B0, 0x116B1, 0x116B2, 0x116B3, 0x116B4, 0x116B5, 0x116B6, 0x116B7, + 0x1171D, 0x1171E, 0x1171F, 0x11720, 0x11721, 0x11722, 0x11723, 0x11724, + 0x11725, 0x11726, 0x11727, 0x11728, 0x11729, 0x1172A, 0x1172B, 0x1182C, + 0x1182D, 0x1182E, 0x1182F, 0x11830, 0x11831, 0x11832, 0x11833, 0x11834, + 0x11835, 0x11836, 0x11837, 0x11838, 0x11839, 0x1183A, 0x11930, 0x11931, + 0x11932, 0x11933, 0x11934, 0x11935, 0x11937, 0x11938, 0x1193B, 0x1193C, + 0x1193D, 0x1193E, 0x11940, 0x11942, 0x11943, 0x119D1, 0x119D2, 0x119D3, + 0x119D4, 0x119D5, 0x119D6, 0x119D7, 0x119DA, 0x119DB, 0x119DC, 0x119DD, + 0x119DE, 0x119DF, 0x119E0, 0x119E4, 0x11A01, 0x11A02, 0x11A03, 0x11A04, + 0x11A05, 0x11A06, 0x11A07, 0x11A08, 0x11A09, 0x11A0A, 0x11A33, 0x11A34, + 0x11A35, 0x11A36, 0x11A37, 0x11A38, 0x11A39, 0x11A3B, 0x11A3C, 0x11A3D, + 0x11A3E, 0x11A47, 0x11A51, 0x11A52, 0x11A53, 0x11A54, 0x11A55, 0x11A56, + 0x11A57, 0x11A58, 0x11A59, 0x11A5A, 0x11A5B, 0x11A8A, 0x11A8B, 0x11A8C, + 0x11A8D, 0x11A8E, 0x11A8F, 0x11A90, 0x11A91, 0x11A92, 0x11A93, 0x11A94, + 0x11A95, 0x11A96, 0x11A97, 0x11A98, 0x11A99, 0x11C2F, 0x11C30, 0x11C31, + 0x11C32, 0x11C33, 0x11C34, 0x11C35, 0x11C36, 0x11C38, 0x11C39, 0x11C3A, + 0x11C3B, 0x11C3C, 0x11C3D, 0x11C3E, 0x11C3F, 0x11C92, 0x11C93, 0x11C94, + 0x11C95, 0x11C96, 0x11C97, 0x11C98, 0x11C99, 0x11C9A, 0x11C9B, 0x11C9C, + 0x11C9D, 0x11C9E, 0x11C9F, 0x11CA0, 0x11CA1, 0x11CA2, 0x11CA3, 0x11CA4, + 0x11CA5, 0x11CA6, 0x11CA7, 0x11CA9, 0x11CAA, 0x11CAB, 0x11CAC, 0x11CAD, + 0x11CAE, 0x11CAF, 0x11CB0, 0x11CB1, 0x11CB2, 0x11CB3, 0x11CB4, 0x11CB5, + 0x11CB6, 0x11D31, 0x11D32, 0x11D33, 0x11D34, 0x11D35, 0x11D36, 0x11D3A, + 0x11D3C, 0x11D3D, 0x11D3F, 0x11D40, 0x11D41, 0x11D42, 0x11D43, 0x11D44, + 0x11D45, 0x11D47, 0x11D8A, 0x11D8B, 0x11D8C, 0x11D8D, 0x11D8E, 0x11D90, + 0x11D91, 0x11D93, 0x11D94, 0x11D95, 0x11D96, 0x11D97, 0x11EF3, 0x11EF4, + 0x11EF5, 0x11EF6, 0x11F00, 0x11F01, 0x11F03, 0x11F34, 0x11F35, 0x11F36, + 0x11F37, 0x11F38, 0x11F39, 0x11F3A, 0x11F3E, 0x11F3F, 0x11F40, 0x11F41, + 0x11F42, 0x11F5A, 0x13440, 0x13447, 0x13448, 0x13449, 0x1344A, 0x1344B, + 0x1344C, 0x1344D, 0x1344E, 0x1344F, 0x13450, 0x13451, 0x13452, 0x13453, + 0x13454, 0x13455, 0x1611E, 0x1611F, 0x16120, 0x16121, 0x16122, 0x16123, + 0x16124, 0x16125, 0x16126, 0x16127, 0x16128, 0x16129, 0x1612A, 0x1612B, + 0x1612C, 0x1612D, 0x1612E, 0x1612F, 0x16AF0, 0x16AF1, 0x16AF2, 0x16AF3, + 0x16AF4, 0x16B30, 0x16B31, 0x16B32, 0x16B33, 0x16B34, 0x16B35, 0x16B36, + 0x16F4F, 0x16F51, 0x16F52, 0x16F53, 0x16F54, 0x16F55, 0x16F56, 0x16F57, + 0x16F58, 0x16F59, 0x16F5A, 0x16F5B, 0x16F5C, 0x16F5D, 0x16F5E, 0x16F5F, + 0x16F60, 0x16F61, 0x16F62, 0x16F63, 0x16F64, 0x16F65, 0x16F66, 0x16F67, + 0x16F68, 0x16F69, 0x16F6A, 0x16F6B, 0x16F6C, 0x16F6D, 0x16F6E, 0x16F6F, + 0x16F70, 0x16F71, 0x16F72, 0x16F73, 0x16F74, 0x16F75, 0x16F76, 0x16F77, + 0x16F78, 0x16F79, 0x16F7A, 0x16F7B, 0x16F7C, 0x16F7D, 0x16F7E, 0x16F7F, + 0x16F80, 0x16F81, 0x16F82, 0x16F83, 0x16F84, 0x16F85, 0x16F86, 0x16F87, + 0x16F8F, 0x16F90, 0x16F91, 0x16F92, 0x16FE4, 0x16FF0, 0x16FF1, 0x1BC9D, + 0x1BC9E, 0x1CF00, 0x1CF01, 0x1CF02, 0x1CF03, 0x1CF04, 0x1CF05, 0x1CF06, + 0x1CF07, 0x1CF08, 0x1CF09, 0x1CF0A, 0x1CF0B, 0x1CF0C, 0x1CF0D, 0x1CF0E, + 0x1CF0F, 0x1CF10, 0x1CF11, 0x1CF12, 0x1CF13, 0x1CF14, 0x1CF15, 0x1CF16, + 0x1CF17, 0x1CF18, 0x1CF19, 0x1CF1A, 0x1CF1B, 0x1CF1C, 0x1CF1D, 0x1CF1E, + 0x1CF1F, 0x1CF20, 0x1CF21, 0x1CF22, 0x1CF23, 0x1CF24, 0x1CF25, 0x1CF26, + 0x1CF27, 0x1CF28, 0x1CF29, 0x1CF2A, 0x1CF2B, 0x1CF2C, 0x1CF2D, 0x1CF30, + 0x1CF31, 0x1CF32, 0x1CF33, 0x1CF34, 0x1CF35, 0x1CF36, 0x1CF37, 0x1CF38, + 0x1CF39, 0x1CF3A, 0x1CF3B, 0x1CF3C, 0x1CF3D, 0x1CF3E, 0x1CF3F, 0x1CF40, + 0x1CF41, 0x1CF42, 0x1CF43, 0x1CF44, 0x1CF45, 0x1CF46, 0x1D165, 0x1D166, + 0x1D167, 0x1D168, 0x1D169, 0x1D16D, 0x1D16E, 0x1D16F, 0x1D170, 0x1D171, + 0x1D172, 0x1D17B, 0x1D17C, 0x1D17D, 0x1D17E, 0x1D17F, 0x1D180, 0x1D181, + 0x1D182, 0x1D185, 0x1D186, 0x1D187, 0x1D188, 0x1D189, 0x1D18A, 0x1D18B, + 0x1D1AA, 0x1D1AB, 0x1D1AC, 0x1D1AD, 0x1D242, 0x1D243, 0x1D244, 0x1DA00, + 0x1DA01, 0x1DA02, 0x1DA03, 0x1DA04, 0x1DA05, 0x1DA06, 0x1DA07, 0x1DA08, + 0x1DA09, 0x1DA0A, 0x1DA0B, 0x1DA0C, 0x1DA0D, 0x1DA0E, 0x1DA0F, 0x1DA10, + 0x1DA11, 0x1DA12, 0x1DA13, 0x1DA14, 0x1DA15, 0x1DA16, 0x1DA17, 0x1DA18, + 0x1DA19, 0x1DA1A, 0x1DA1B, 0x1DA1C, 0x1DA1D, 0x1DA1E, 0x1DA1F, 0x1DA20, + 0x1DA21, 0x1DA22, 0x1DA23, 0x1DA24, 0x1DA25, 0x1DA26, 0x1DA27, 0x1DA28, + 0x1DA29, 0x1DA2A, 0x1DA2B, 0x1DA2C, 0x1DA2D, 0x1DA2E, 0x1DA2F, 0x1DA30, + 0x1DA31, 0x1DA32, 0x1DA33, 0x1DA34, 0x1DA35, 0x1DA36, 0x1DA3B, 0x1DA3C, + 0x1DA3D, 0x1DA3E, 0x1DA3F, 0x1DA40, 0x1DA41, 0x1DA42, 0x1DA43, 0x1DA44, + 0x1DA45, 0x1DA46, 0x1DA47, 0x1DA48, 0x1DA49, 0x1DA4A, 0x1DA4B, 0x1DA4C, + 0x1DA4D, 0x1DA4E, 0x1DA4F, 0x1DA50, 0x1DA51, 0x1DA52, 0x1DA53, 0x1DA54, + 0x1DA55, 0x1DA56, 0x1DA57, 0x1DA58, 0x1DA59, 0x1DA5A, 0x1DA5B, 0x1DA5C, + 0x1DA5D, 0x1DA5E, 0x1DA5F, 0x1DA60, 0x1DA61, 0x1DA62, 0x1DA63, 0x1DA64, + 0x1DA65, 0x1DA66, 0x1DA67, 0x1DA68, 0x1DA69, 0x1DA6A, 0x1DA6B, 0x1DA6C, + 0x1DA75, 0x1DA84, 0x1DA9B, 0x1DA9C, 0x1DA9D, 0x1DA9E, 0x1DA9F, 0x1DAA1, + 0x1DAA2, 0x1DAA3, 0x1DAA4, 0x1DAA5, 0x1DAA6, 0x1DAA7, 0x1DAA8, 0x1DAA9, + 0x1DAAA, 0x1DAAB, 0x1DAAC, 0x1DAAD, 0x1DAAE, 0x1DAAF, 0x1E000, 0x1E001, + 0x1E002, 0x1E003, 0x1E004, 0x1E005, 0x1E006, 0x1E008, 0x1E009, 0x1E00A, + 0x1E00B, 0x1E00C, 0x1E00D, 0x1E00E, 0x1E00F, 0x1E010, 0x1E011, 0x1E012, + 0x1E013, 0x1E014, 0x1E015, 0x1E016, 0x1E017, 0x1E018, 0x1E01B, 0x1E01C, + 0x1E01D, 0x1E01E, 0x1E01F, 0x1E020, 0x1E021, 0x1E023, 0x1E024, 0x1E026, + 0x1E027, 0x1E028, 0x1E029, 0x1E02A, 0x1E08F, 0x1E130, 0x1E131, 0x1E132, + 0x1E133, 0x1E134, 0x1E135, 0x1E136, 0x1E2AE, 0x1E2EC, 0x1E2ED, 0x1E2EE, + 0x1E2EF, 0x1E4EC, 0x1E4ED, 0x1E4EE, 0x1E4EF, 0x1E5EE, 0x1E5EF, 0x1E8D0, + 0x1E8D1, 0x1E8D2, 0x1E8D3, 0x1E8D4, 0x1E8D5, 0x1E8D6, 0x1E944, 0x1E945, + 0x1E946, 0x1E947, 0x1E948, 0x1E949, 0x1E94A, 0xE0100, 0xE0101, 0xE0102, + 0xE0103, 0xE0104, 0xE0105, 0xE0106, 0xE0107, 0xE0108, 0xE0109, 0xE010A, + 0xE010B, 0xE010C, 0xE010D, 0xE010E, 0xE010F, 0xE0110, 0xE0111, 0xE0112, + 0xE0113, 0xE0114, 0xE0115, 0xE0116, 0xE0117, 0xE0118, 0xE0119, 0xE011A, + 0xE011B, 0xE011C, 0xE011D, 0xE011E, 0xE011F, 0xE0120, 0xE0121, 0xE0122, + 0xE0123, 0xE0124, 0xE0125, 0xE0126, 0xE0127, 0xE0128, 0xE0129, 0xE012A, + 0xE012B, 0xE012C, 0xE012D, 0xE012E, 0xE012F, 0xE0130, 0xE0131, 0xE0132, + 0xE0133, 0xE0134, 0xE0135, 0xE0136, 0xE0137, 0xE0138, 0xE0139, 0xE013A, + 0xE013B, 0xE013C, 0xE013D, 0xE013E, 0xE013F, 0xE0140, 0xE0141, 0xE0142, + 0xE0143, 0xE0144, 0xE0145, 0xE0146, 0xE0147, 0xE0148, 0xE0149, 0xE014A, + 0xE014B, 0xE014C, 0xE014D, 0xE014E, 0xE014F, 0xE0150, 0xE0151, 0xE0152, + 0xE0153, 0xE0154, 0xE0155, 0xE0156, 0xE0157, 0xE0158, 0xE0159, 0xE015A, + 0xE015B, 0xE015C, 0xE015D, 0xE015E, 0xE015F, 0xE0160, 0xE0161, 0xE0162, + 0xE0163, 0xE0164, 0xE0165, 0xE0166, 0xE0167, 0xE0168, 0xE0169, 0xE016A, + 0xE016B, 0xE016C, 0xE016D, 0xE016E, 0xE016F, 0xE0170, 0xE0171, 0xE0172, + 0xE0173, 0xE0174, 0xE0175, 0xE0176, 0xE0177, 0xE0178, 0xE0179, 0xE017A, + 0xE017B, 0xE017C, 0xE017D, 0xE017E, 0xE017F, 0xE0180, 0xE0181, 0xE0182, + 0xE0183, 0xE0184, 0xE0185, 0xE0186, 0xE0187, 0xE0188, 0xE0189, 0xE018A, + 0xE018B, 0xE018C, 0xE018D, 0xE018E, 0xE018F, 0xE0190, 0xE0191, 0xE0192, + 0xE0193, 0xE0194, 0xE0195, 0xE0196, 0xE0197, 0xE0198, 0xE0199, 0xE019A, + 0xE019B, 0xE019C, 0xE019D, 0xE019E, 0xE019F, 0xE01A0, 0xE01A1, 0xE01A2, + 0xE01A3, 0xE01A4, 0xE01A5, 0xE01A6, 0xE01A7, 0xE01A8, 0xE01A9, 0xE01AA, + 0xE01AB, 0xE01AC, 0xE01AD, 0xE01AE, 0xE01AF, 0xE01B0, 0xE01B1, 0xE01B2, + 0xE01B3, 0xE01B4, 0xE01B5, 0xE01B6, 0xE01B7, 0xE01B8, 0xE01B9, 0xE01BA, + 0xE01BB, 0xE01BC, 0xE01BD, 0xE01BE, 0xE01BF, 0xE01C0, 0xE01C1, 0xE01C2, + 0xE01C3, 0xE01C4, 0xE01C5, 0xE01C6, 0xE01C7, 0xE01C8, 0xE01C9, 0xE01CA, + 0xE01CB, 0xE01CC, 0xE01CD, 0xE01CE, 0xE01CF, 0xE01D0, 0xE01D1, 0xE01D2, + 0xE01D3, 0xE01D4, 0xE01D5, 0xE01D6, 0xE01D7, 0xE01D8, 0xE01D9, 0xE01DA, + 0xE01DB, 0xE01DC, 0xE01DD, 0xE01DE, 0xE01DF, 0xE01E0, 0xE01E1, 0xE01E2, + 0xE01E3, 0xE01E4, 0xE01E5, 0xE01E6, 0xE01E7, 0xE01E8, 0xE01E9, 0xE01EA, + 0xE01EB, 0xE01EC, 0xE01ED, 0xE01EE, 0xE01EF, +}; + +pub const Lower = struct { cp: u21, start: u32, len: u8 }; + +// Full lowercase mappings concatenated (Rust char::to_lowercase semantics). +pub const lower_sequences = [_]u21{ + 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, 0x0068, + 0x0069, 0x006A, 0x006B, 0x006C, 0x006D, 0x006E, 0x006F, 0x0070, + 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 0x0078, + 0x0079, 0x007A, 0x00E0, 0x00E1, 0x00E2, 0x00E3, 0x00E4, 0x00E5, + 0x00E6, 0x00E7, 0x00E8, 0x00E9, 0x00EA, 0x00EB, 0x00EC, 0x00ED, + 0x00EE, 0x00EF, 0x00F0, 0x00F1, 0x00F2, 0x00F3, 0x00F4, 0x00F5, + 0x00F6, 0x00F8, 0x00F9, 0x00FA, 0x00FB, 0x00FC, 0x00FD, 0x00FE, + 0x0101, 0x0103, 0x0105, 0x0107, 0x0109, 0x010B, 0x010D, 0x010F, + 0x0111, 0x0113, 0x0115, 0x0117, 0x0119, 0x011B, 0x011D, 0x011F, + 0x0121, 0x0123, 0x0125, 0x0127, 0x0129, 0x012B, 0x012D, 0x012F, + 0x0069, 0x0307, 0x0133, 0x0135, 0x0137, 0x013A, 0x013C, 0x013E, + 0x0140, 0x0142, 0x0144, 0x0146, 0x0148, 0x014B, 0x014D, 0x014F, + 0x0151, 0x0153, 0x0155, 0x0157, 0x0159, 0x015B, 0x015D, 0x015F, + 0x0161, 0x0163, 0x0165, 0x0167, 0x0169, 0x016B, 0x016D, 0x016F, + 0x0171, 0x0173, 0x0175, 0x0177, 0x00FF, 0x017A, 0x017C, 0x017E, + 0x0253, 0x0183, 0x0185, 0x0254, 0x0188, 0x0256, 0x0257, 0x018C, + 0x01DD, 0x0259, 0x025B, 0x0192, 0x0260, 0x0263, 0x0269, 0x0268, + 0x0199, 0x026F, 0x0272, 0x0275, 0x01A1, 0x01A3, 0x01A5, 0x0280, + 0x01A8, 0x0283, 0x01AD, 0x0288, 0x01B0, 0x028A, 0x028B, 0x01B4, + 0x01B6, 0x0292, 0x01B9, 0x01BD, 0x01C6, 0x01C6, 0x01C9, 0x01C9, + 0x01CC, 0x01CC, 0x01CE, 0x01D0, 0x01D2, 0x01D4, 0x01D6, 0x01D8, + 0x01DA, 0x01DC, 0x01DF, 0x01E1, 0x01E3, 0x01E5, 0x01E7, 0x01E9, + 0x01EB, 0x01ED, 0x01EF, 0x01F3, 0x01F3, 0x01F5, 0x0195, 0x01BF, + 0x01F9, 0x01FB, 0x01FD, 0x01FF, 0x0201, 0x0203, 0x0205, 0x0207, + 0x0209, 0x020B, 0x020D, 0x020F, 0x0211, 0x0213, 0x0215, 0x0217, + 0x0219, 0x021B, 0x021D, 0x021F, 0x019E, 0x0223, 0x0225, 0x0227, + 0x0229, 0x022B, 0x022D, 0x022F, 0x0231, 0x0233, 0x2C65, 0x023C, + 0x019A, 0x2C66, 0x0242, 0x0180, 0x0289, 0x028C, 0x0247, 0x0249, + 0x024B, 0x024D, 0x024F, 0x0371, 0x0373, 0x0377, 0x03F3, 0x03AC, + 0x03AD, 0x03AE, 0x03AF, 0x03CC, 0x03CD, 0x03CE, 0x03B1, 0x03B2, + 0x03B3, 0x03B4, 0x03B5, 0x03B6, 0x03B7, 0x03B8, 0x03B9, 0x03BA, + 0x03BB, 0x03BC, 0x03BD, 0x03BE, 0x03BF, 0x03C0, 0x03C1, 0x03C3, + 0x03C4, 0x03C5, 0x03C6, 0x03C7, 0x03C8, 0x03C9, 0x03CA, 0x03CB, + 0x03D7, 0x03D9, 0x03DB, 0x03DD, 0x03DF, 0x03E1, 0x03E3, 0x03E5, + 0x03E7, 0x03E9, 0x03EB, 0x03ED, 0x03EF, 0x03B8, 0x03F8, 0x03F2, + 0x03FB, 0x037B, 0x037C, 0x037D, 0x0450, 0x0451, 0x0452, 0x0453, + 0x0454, 0x0455, 0x0456, 0x0457, 0x0458, 0x0459, 0x045A, 0x045B, + 0x045C, 0x045D, 0x045E, 0x045F, 0x0430, 0x0431, 0x0432, 0x0433, + 0x0434, 0x0435, 0x0436, 0x0437, 0x0438, 0x0439, 0x043A, 0x043B, + 0x043C, 0x043D, 0x043E, 0x043F, 0x0440, 0x0441, 0x0442, 0x0443, + 0x0444, 0x0445, 0x0446, 0x0447, 0x0448, 0x0449, 0x044A, 0x044B, + 0x044C, 0x044D, 0x044E, 0x044F, 0x0461, 0x0463, 0x0465, 0x0467, + 0x0469, 0x046B, 0x046D, 0x046F, 0x0471, 0x0473, 0x0475, 0x0477, + 0x0479, 0x047B, 0x047D, 0x047F, 0x0481, 0x048B, 0x048D, 0x048F, + 0x0491, 0x0493, 0x0495, 0x0497, 0x0499, 0x049B, 0x049D, 0x049F, + 0x04A1, 0x04A3, 0x04A5, 0x04A7, 0x04A9, 0x04AB, 0x04AD, 0x04AF, + 0x04B1, 0x04B3, 0x04B5, 0x04B7, 0x04B9, 0x04BB, 0x04BD, 0x04BF, + 0x04CF, 0x04C2, 0x04C4, 0x04C6, 0x04C8, 0x04CA, 0x04CC, 0x04CE, + 0x04D1, 0x04D3, 0x04D5, 0x04D7, 0x04D9, 0x04DB, 0x04DD, 0x04DF, + 0x04E1, 0x04E3, 0x04E5, 0x04E7, 0x04E9, 0x04EB, 0x04ED, 0x04EF, + 0x04F1, 0x04F3, 0x04F5, 0x04F7, 0x04F9, 0x04FB, 0x04FD, 0x04FF, + 0x0501, 0x0503, 0x0505, 0x0507, 0x0509, 0x050B, 0x050D, 0x050F, + 0x0511, 0x0513, 0x0515, 0x0517, 0x0519, 0x051B, 0x051D, 0x051F, + 0x0521, 0x0523, 0x0525, 0x0527, 0x0529, 0x052B, 0x052D, 0x052F, + 0x0561, 0x0562, 0x0563, 0x0564, 0x0565, 0x0566, 0x0567, 0x0568, + 0x0569, 0x056A, 0x056B, 0x056C, 0x056D, 0x056E, 0x056F, 0x0570, + 0x0571, 0x0572, 0x0573, 0x0574, 0x0575, 0x0576, 0x0577, 0x0578, + 0x0579, 0x057A, 0x057B, 0x057C, 0x057D, 0x057E, 0x057F, 0x0580, + 0x0581, 0x0582, 0x0583, 0x0584, 0x0585, 0x0586, 0x2D00, 0x2D01, + 0x2D02, 0x2D03, 0x2D04, 0x2D05, 0x2D06, 0x2D07, 0x2D08, 0x2D09, + 0x2D0A, 0x2D0B, 0x2D0C, 0x2D0D, 0x2D0E, 0x2D0F, 0x2D10, 0x2D11, + 0x2D12, 0x2D13, 0x2D14, 0x2D15, 0x2D16, 0x2D17, 0x2D18, 0x2D19, + 0x2D1A, 0x2D1B, 0x2D1C, 0x2D1D, 0x2D1E, 0x2D1F, 0x2D20, 0x2D21, + 0x2D22, 0x2D23, 0x2D24, 0x2D25, 0x2D27, 0x2D2D, 0xAB70, 0xAB71, + 0xAB72, 0xAB73, 0xAB74, 0xAB75, 0xAB76, 0xAB77, 0xAB78, 0xAB79, + 0xAB7A, 0xAB7B, 0xAB7C, 0xAB7D, 0xAB7E, 0xAB7F, 0xAB80, 0xAB81, + 0xAB82, 0xAB83, 0xAB84, 0xAB85, 0xAB86, 0xAB87, 0xAB88, 0xAB89, + 0xAB8A, 0xAB8B, 0xAB8C, 0xAB8D, 0xAB8E, 0xAB8F, 0xAB90, 0xAB91, + 0xAB92, 0xAB93, 0xAB94, 0xAB95, 0xAB96, 0xAB97, 0xAB98, 0xAB99, + 0xAB9A, 0xAB9B, 0xAB9C, 0xAB9D, 0xAB9E, 0xAB9F, 0xABA0, 0xABA1, + 0xABA2, 0xABA3, 0xABA4, 0xABA5, 0xABA6, 0xABA7, 0xABA8, 0xABA9, + 0xABAA, 0xABAB, 0xABAC, 0xABAD, 0xABAE, 0xABAF, 0xABB0, 0xABB1, + 0xABB2, 0xABB3, 0xABB4, 0xABB5, 0xABB6, 0xABB7, 0xABB8, 0xABB9, + 0xABBA, 0xABBB, 0xABBC, 0xABBD, 0xABBE, 0xABBF, 0x13F8, 0x13F9, + 0x13FA, 0x13FB, 0x13FC, 0x13FD, 0x1C8A, 0x10D0, 0x10D1, 0x10D2, + 0x10D3, 0x10D4, 0x10D5, 0x10D6, 0x10D7, 0x10D8, 0x10D9, 0x10DA, + 0x10DB, 0x10DC, 0x10DD, 0x10DE, 0x10DF, 0x10E0, 0x10E1, 0x10E2, + 0x10E3, 0x10E4, 0x10E5, 0x10E6, 0x10E7, 0x10E8, 0x10E9, 0x10EA, + 0x10EB, 0x10EC, 0x10ED, 0x10EE, 0x10EF, 0x10F0, 0x10F1, 0x10F2, + 0x10F3, 0x10F4, 0x10F5, 0x10F6, 0x10F7, 0x10F8, 0x10F9, 0x10FA, + 0x10FD, 0x10FE, 0x10FF, 0x1E01, 0x1E03, 0x1E05, 0x1E07, 0x1E09, + 0x1E0B, 0x1E0D, 0x1E0F, 0x1E11, 0x1E13, 0x1E15, 0x1E17, 0x1E19, + 0x1E1B, 0x1E1D, 0x1E1F, 0x1E21, 0x1E23, 0x1E25, 0x1E27, 0x1E29, + 0x1E2B, 0x1E2D, 0x1E2F, 0x1E31, 0x1E33, 0x1E35, 0x1E37, 0x1E39, + 0x1E3B, 0x1E3D, 0x1E3F, 0x1E41, 0x1E43, 0x1E45, 0x1E47, 0x1E49, + 0x1E4B, 0x1E4D, 0x1E4F, 0x1E51, 0x1E53, 0x1E55, 0x1E57, 0x1E59, + 0x1E5B, 0x1E5D, 0x1E5F, 0x1E61, 0x1E63, 0x1E65, 0x1E67, 0x1E69, + 0x1E6B, 0x1E6D, 0x1E6F, 0x1E71, 0x1E73, 0x1E75, 0x1E77, 0x1E79, + 0x1E7B, 0x1E7D, 0x1E7F, 0x1E81, 0x1E83, 0x1E85, 0x1E87, 0x1E89, + 0x1E8B, 0x1E8D, 0x1E8F, 0x1E91, 0x1E93, 0x1E95, 0x00DF, 0x1EA1, + 0x1EA3, 0x1EA5, 0x1EA7, 0x1EA9, 0x1EAB, 0x1EAD, 0x1EAF, 0x1EB1, + 0x1EB3, 0x1EB5, 0x1EB7, 0x1EB9, 0x1EBB, 0x1EBD, 0x1EBF, 0x1EC1, + 0x1EC3, 0x1EC5, 0x1EC7, 0x1EC9, 0x1ECB, 0x1ECD, 0x1ECF, 0x1ED1, + 0x1ED3, 0x1ED5, 0x1ED7, 0x1ED9, 0x1EDB, 0x1EDD, 0x1EDF, 0x1EE1, + 0x1EE3, 0x1EE5, 0x1EE7, 0x1EE9, 0x1EEB, 0x1EED, 0x1EEF, 0x1EF1, + 0x1EF3, 0x1EF5, 0x1EF7, 0x1EF9, 0x1EFB, 0x1EFD, 0x1EFF, 0x1F00, + 0x1F01, 0x1F02, 0x1F03, 0x1F04, 0x1F05, 0x1F06, 0x1F07, 0x1F10, + 0x1F11, 0x1F12, 0x1F13, 0x1F14, 0x1F15, 0x1F20, 0x1F21, 0x1F22, + 0x1F23, 0x1F24, 0x1F25, 0x1F26, 0x1F27, 0x1F30, 0x1F31, 0x1F32, + 0x1F33, 0x1F34, 0x1F35, 0x1F36, 0x1F37, 0x1F40, 0x1F41, 0x1F42, + 0x1F43, 0x1F44, 0x1F45, 0x1F51, 0x1F53, 0x1F55, 0x1F57, 0x1F60, + 0x1F61, 0x1F62, 0x1F63, 0x1F64, 0x1F65, 0x1F66, 0x1F67, 0x1F80, + 0x1F81, 0x1F82, 0x1F83, 0x1F84, 0x1F85, 0x1F86, 0x1F87, 0x1F90, + 0x1F91, 0x1F92, 0x1F93, 0x1F94, 0x1F95, 0x1F96, 0x1F97, 0x1FA0, + 0x1FA1, 0x1FA2, 0x1FA3, 0x1FA4, 0x1FA5, 0x1FA6, 0x1FA7, 0x1FB0, + 0x1FB1, 0x1F70, 0x1F71, 0x1FB3, 0x1F72, 0x1F73, 0x1F74, 0x1F75, + 0x1FC3, 0x1FD0, 0x1FD1, 0x1F76, 0x1F77, 0x1FE0, 0x1FE1, 0x1F7A, + 0x1F7B, 0x1FE5, 0x1F78, 0x1F79, 0x1F7C, 0x1F7D, 0x1FF3, 0x03C9, + 0x006B, 0x00E5, 0x214E, 0x2170, 0x2171, 0x2172, 0x2173, 0x2174, + 0x2175, 0x2176, 0x2177, 0x2178, 0x2179, 0x217A, 0x217B, 0x217C, + 0x217D, 0x217E, 0x217F, 0x2184, 0x24D0, 0x24D1, 0x24D2, 0x24D3, + 0x24D4, 0x24D5, 0x24D6, 0x24D7, 0x24D8, 0x24D9, 0x24DA, 0x24DB, + 0x24DC, 0x24DD, 0x24DE, 0x24DF, 0x24E0, 0x24E1, 0x24E2, 0x24E3, + 0x24E4, 0x24E5, 0x24E6, 0x24E7, 0x24E8, 0x24E9, 0x2C30, 0x2C31, + 0x2C32, 0x2C33, 0x2C34, 0x2C35, 0x2C36, 0x2C37, 0x2C38, 0x2C39, + 0x2C3A, 0x2C3B, 0x2C3C, 0x2C3D, 0x2C3E, 0x2C3F, 0x2C40, 0x2C41, + 0x2C42, 0x2C43, 0x2C44, 0x2C45, 0x2C46, 0x2C47, 0x2C48, 0x2C49, + 0x2C4A, 0x2C4B, 0x2C4C, 0x2C4D, 0x2C4E, 0x2C4F, 0x2C50, 0x2C51, + 0x2C52, 0x2C53, 0x2C54, 0x2C55, 0x2C56, 0x2C57, 0x2C58, 0x2C59, + 0x2C5A, 0x2C5B, 0x2C5C, 0x2C5D, 0x2C5E, 0x2C5F, 0x2C61, 0x026B, + 0x1D7D, 0x027D, 0x2C68, 0x2C6A, 0x2C6C, 0x0251, 0x0271, 0x0250, + 0x0252, 0x2C73, 0x2C76, 0x023F, 0x0240, 0x2C81, 0x2C83, 0x2C85, + 0x2C87, 0x2C89, 0x2C8B, 0x2C8D, 0x2C8F, 0x2C91, 0x2C93, 0x2C95, + 0x2C97, 0x2C99, 0x2C9B, 0x2C9D, 0x2C9F, 0x2CA1, 0x2CA3, 0x2CA5, + 0x2CA7, 0x2CA9, 0x2CAB, 0x2CAD, 0x2CAF, 0x2CB1, 0x2CB3, 0x2CB5, + 0x2CB7, 0x2CB9, 0x2CBB, 0x2CBD, 0x2CBF, 0x2CC1, 0x2CC3, 0x2CC5, + 0x2CC7, 0x2CC9, 0x2CCB, 0x2CCD, 0x2CCF, 0x2CD1, 0x2CD3, 0x2CD5, + 0x2CD7, 0x2CD9, 0x2CDB, 0x2CDD, 0x2CDF, 0x2CE1, 0x2CE3, 0x2CEC, + 0x2CEE, 0x2CF3, 0xA641, 0xA643, 0xA645, 0xA647, 0xA649, 0xA64B, + 0xA64D, 0xA64F, 0xA651, 0xA653, 0xA655, 0xA657, 0xA659, 0xA65B, + 0xA65D, 0xA65F, 0xA661, 0xA663, 0xA665, 0xA667, 0xA669, 0xA66B, + 0xA66D, 0xA681, 0xA683, 0xA685, 0xA687, 0xA689, 0xA68B, 0xA68D, + 0xA68F, 0xA691, 0xA693, 0xA695, 0xA697, 0xA699, 0xA69B, 0xA723, + 0xA725, 0xA727, 0xA729, 0xA72B, 0xA72D, 0xA72F, 0xA733, 0xA735, + 0xA737, 0xA739, 0xA73B, 0xA73D, 0xA73F, 0xA741, 0xA743, 0xA745, + 0xA747, 0xA749, 0xA74B, 0xA74D, 0xA74F, 0xA751, 0xA753, 0xA755, + 0xA757, 0xA759, 0xA75B, 0xA75D, 0xA75F, 0xA761, 0xA763, 0xA765, + 0xA767, 0xA769, 0xA76B, 0xA76D, 0xA76F, 0xA77A, 0xA77C, 0x1D79, + 0xA77F, 0xA781, 0xA783, 0xA785, 0xA787, 0xA78C, 0x0265, 0xA791, + 0xA793, 0xA797, 0xA799, 0xA79B, 0xA79D, 0xA79F, 0xA7A1, 0xA7A3, + 0xA7A5, 0xA7A7, 0xA7A9, 0x0266, 0x025C, 0x0261, 0x026C, 0x026A, + 0x029E, 0x0287, 0x029D, 0xAB53, 0xA7B5, 0xA7B7, 0xA7B9, 0xA7BB, + 0xA7BD, 0xA7BF, 0xA7C1, 0xA7C3, 0xA794, 0x0282, 0x1D8E, 0xA7C8, + 0xA7CA, 0x0264, 0xA7CD, 0xA7D1, 0xA7D7, 0xA7D9, 0xA7DB, 0x019B, + 0xA7F6, 0xFF41, 0xFF42, 0xFF43, 0xFF44, 0xFF45, 0xFF46, 0xFF47, + 0xFF48, 0xFF49, 0xFF4A, 0xFF4B, 0xFF4C, 0xFF4D, 0xFF4E, 0xFF4F, + 0xFF50, 0xFF51, 0xFF52, 0xFF53, 0xFF54, 0xFF55, 0xFF56, 0xFF57, + 0xFF58, 0xFF59, 0xFF5A, 0x10428, 0x10429, 0x1042A, 0x1042B, 0x1042C, + 0x1042D, 0x1042E, 0x1042F, 0x10430, 0x10431, 0x10432, 0x10433, 0x10434, + 0x10435, 0x10436, 0x10437, 0x10438, 0x10439, 0x1043A, 0x1043B, 0x1043C, + 0x1043D, 0x1043E, 0x1043F, 0x10440, 0x10441, 0x10442, 0x10443, 0x10444, + 0x10445, 0x10446, 0x10447, 0x10448, 0x10449, 0x1044A, 0x1044B, 0x1044C, + 0x1044D, 0x1044E, 0x1044F, 0x104D8, 0x104D9, 0x104DA, 0x104DB, 0x104DC, + 0x104DD, 0x104DE, 0x104DF, 0x104E0, 0x104E1, 0x104E2, 0x104E3, 0x104E4, + 0x104E5, 0x104E6, 0x104E7, 0x104E8, 0x104E9, 0x104EA, 0x104EB, 0x104EC, + 0x104ED, 0x104EE, 0x104EF, 0x104F0, 0x104F1, 0x104F2, 0x104F3, 0x104F4, + 0x104F5, 0x104F6, 0x104F7, 0x104F8, 0x104F9, 0x104FA, 0x104FB, 0x10597, + 0x10598, 0x10599, 0x1059A, 0x1059B, 0x1059C, 0x1059D, 0x1059E, 0x1059F, + 0x105A0, 0x105A1, 0x105A3, 0x105A4, 0x105A5, 0x105A6, 0x105A7, 0x105A8, + 0x105A9, 0x105AA, 0x105AB, 0x105AC, 0x105AD, 0x105AE, 0x105AF, 0x105B0, + 0x105B1, 0x105B3, 0x105B4, 0x105B5, 0x105B6, 0x105B7, 0x105B8, 0x105B9, + 0x105BB, 0x105BC, 0x10CC0, 0x10CC1, 0x10CC2, 0x10CC3, 0x10CC4, 0x10CC5, + 0x10CC6, 0x10CC7, 0x10CC8, 0x10CC9, 0x10CCA, 0x10CCB, 0x10CCC, 0x10CCD, + 0x10CCE, 0x10CCF, 0x10CD0, 0x10CD1, 0x10CD2, 0x10CD3, 0x10CD4, 0x10CD5, + 0x10CD6, 0x10CD7, 0x10CD8, 0x10CD9, 0x10CDA, 0x10CDB, 0x10CDC, 0x10CDD, + 0x10CDE, 0x10CDF, 0x10CE0, 0x10CE1, 0x10CE2, 0x10CE3, 0x10CE4, 0x10CE5, + 0x10CE6, 0x10CE7, 0x10CE8, 0x10CE9, 0x10CEA, 0x10CEB, 0x10CEC, 0x10CED, + 0x10CEE, 0x10CEF, 0x10CF0, 0x10CF1, 0x10CF2, 0x10D70, 0x10D71, 0x10D72, + 0x10D73, 0x10D74, 0x10D75, 0x10D76, 0x10D77, 0x10D78, 0x10D79, 0x10D7A, + 0x10D7B, 0x10D7C, 0x10D7D, 0x10D7E, 0x10D7F, 0x10D80, 0x10D81, 0x10D82, + 0x10D83, 0x10D84, 0x10D85, 0x118C0, 0x118C1, 0x118C2, 0x118C3, 0x118C4, + 0x118C5, 0x118C6, 0x118C7, 0x118C8, 0x118C9, 0x118CA, 0x118CB, 0x118CC, + 0x118CD, 0x118CE, 0x118CF, 0x118D0, 0x118D1, 0x118D2, 0x118D3, 0x118D4, + 0x118D5, 0x118D6, 0x118D7, 0x118D8, 0x118D9, 0x118DA, 0x118DB, 0x118DC, + 0x118DD, 0x118DE, 0x118DF, 0x16E60, 0x16E61, 0x16E62, 0x16E63, 0x16E64, + 0x16E65, 0x16E66, 0x16E67, 0x16E68, 0x16E69, 0x16E6A, 0x16E6B, 0x16E6C, + 0x16E6D, 0x16E6E, 0x16E6F, 0x16E70, 0x16E71, 0x16E72, 0x16E73, 0x16E74, + 0x16E75, 0x16E76, 0x16E77, 0x16E78, 0x16E79, 0x16E7A, 0x16E7B, 0x16E7C, + 0x16E7D, 0x16E7E, 0x16E7F, 0x1E922, 0x1E923, 0x1E924, 0x1E925, 0x1E926, + 0x1E927, 0x1E928, 0x1E929, 0x1E92A, 0x1E92B, 0x1E92C, 0x1E92D, 0x1E92E, + 0x1E92F, 0x1E930, 0x1E931, 0x1E932, 0x1E933, 0x1E934, 0x1E935, 0x1E936, + 0x1E937, 0x1E938, 0x1E939, 0x1E93A, 0x1E93B, 0x1E93C, 0x1E93D, 0x1E93E, + 0x1E93F, 0x1E940, 0x1E941, 0x1E942, 0x1E943, +}; + +pub const lowercases = [_]Lower{ + .{ .cp = 0x0041, .start = 0, .len = 1 }, + .{ .cp = 0x0042, .start = 1, .len = 1 }, + .{ .cp = 0x0043, .start = 2, .len = 1 }, + .{ .cp = 0x0044, .start = 3, .len = 1 }, + .{ .cp = 0x0045, .start = 4, .len = 1 }, + .{ .cp = 0x0046, .start = 5, .len = 1 }, + .{ .cp = 0x0047, .start = 6, .len = 1 }, + .{ .cp = 0x0048, .start = 7, .len = 1 }, + .{ .cp = 0x0049, .start = 8, .len = 1 }, + .{ .cp = 0x004A, .start = 9, .len = 1 }, + .{ .cp = 0x004B, .start = 10, .len = 1 }, + .{ .cp = 0x004C, .start = 11, .len = 1 }, + .{ .cp = 0x004D, .start = 12, .len = 1 }, + .{ .cp = 0x004E, .start = 13, .len = 1 }, + .{ .cp = 0x004F, .start = 14, .len = 1 }, + .{ .cp = 0x0050, .start = 15, .len = 1 }, + .{ .cp = 0x0051, .start = 16, .len = 1 }, + .{ .cp = 0x0052, .start = 17, .len = 1 }, + .{ .cp = 0x0053, .start = 18, .len = 1 }, + .{ .cp = 0x0054, .start = 19, .len = 1 }, + .{ .cp = 0x0055, .start = 20, .len = 1 }, + .{ .cp = 0x0056, .start = 21, .len = 1 }, + .{ .cp = 0x0057, .start = 22, .len = 1 }, + .{ .cp = 0x0058, .start = 23, .len = 1 }, + .{ .cp = 0x0059, .start = 24, .len = 1 }, + .{ .cp = 0x005A, .start = 25, .len = 1 }, + .{ .cp = 0x00C0, .start = 26, .len = 1 }, + .{ .cp = 0x00C1, .start = 27, .len = 1 }, + .{ .cp = 0x00C2, .start = 28, .len = 1 }, + .{ .cp = 0x00C3, .start = 29, .len = 1 }, + .{ .cp = 0x00C4, .start = 30, .len = 1 }, + .{ .cp = 0x00C5, .start = 31, .len = 1 }, + .{ .cp = 0x00C6, .start = 32, .len = 1 }, + .{ .cp = 0x00C7, .start = 33, .len = 1 }, + .{ .cp = 0x00C8, .start = 34, .len = 1 }, + .{ .cp = 0x00C9, .start = 35, .len = 1 }, + .{ .cp = 0x00CA, .start = 36, .len = 1 }, + .{ .cp = 0x00CB, .start = 37, .len = 1 }, + .{ .cp = 0x00CC, .start = 38, .len = 1 }, + .{ .cp = 0x00CD, .start = 39, .len = 1 }, + .{ .cp = 0x00CE, .start = 40, .len = 1 }, + .{ .cp = 0x00CF, .start = 41, .len = 1 }, + .{ .cp = 0x00D0, .start = 42, .len = 1 }, + .{ .cp = 0x00D1, .start = 43, .len = 1 }, + .{ .cp = 0x00D2, .start = 44, .len = 1 }, + .{ .cp = 0x00D3, .start = 45, .len = 1 }, + .{ .cp = 0x00D4, .start = 46, .len = 1 }, + .{ .cp = 0x00D5, .start = 47, .len = 1 }, + .{ .cp = 0x00D6, .start = 48, .len = 1 }, + .{ .cp = 0x00D8, .start = 49, .len = 1 }, + .{ .cp = 0x00D9, .start = 50, .len = 1 }, + .{ .cp = 0x00DA, .start = 51, .len = 1 }, + .{ .cp = 0x00DB, .start = 52, .len = 1 }, + .{ .cp = 0x00DC, .start = 53, .len = 1 }, + .{ .cp = 0x00DD, .start = 54, .len = 1 }, + .{ .cp = 0x00DE, .start = 55, .len = 1 }, + .{ .cp = 0x0100, .start = 56, .len = 1 }, + .{ .cp = 0x0102, .start = 57, .len = 1 }, + .{ .cp = 0x0104, .start = 58, .len = 1 }, + .{ .cp = 0x0106, .start = 59, .len = 1 }, + .{ .cp = 0x0108, .start = 60, .len = 1 }, + .{ .cp = 0x010A, .start = 61, .len = 1 }, + .{ .cp = 0x010C, .start = 62, .len = 1 }, + .{ .cp = 0x010E, .start = 63, .len = 1 }, + .{ .cp = 0x0110, .start = 64, .len = 1 }, + .{ .cp = 0x0112, .start = 65, .len = 1 }, + .{ .cp = 0x0114, .start = 66, .len = 1 }, + .{ .cp = 0x0116, .start = 67, .len = 1 }, + .{ .cp = 0x0118, .start = 68, .len = 1 }, + .{ .cp = 0x011A, .start = 69, .len = 1 }, + .{ .cp = 0x011C, .start = 70, .len = 1 }, + .{ .cp = 0x011E, .start = 71, .len = 1 }, + .{ .cp = 0x0120, .start = 72, .len = 1 }, + .{ .cp = 0x0122, .start = 73, .len = 1 }, + .{ .cp = 0x0124, .start = 74, .len = 1 }, + .{ .cp = 0x0126, .start = 75, .len = 1 }, + .{ .cp = 0x0128, .start = 76, .len = 1 }, + .{ .cp = 0x012A, .start = 77, .len = 1 }, + .{ .cp = 0x012C, .start = 78, .len = 1 }, + .{ .cp = 0x012E, .start = 79, .len = 1 }, + .{ .cp = 0x0130, .start = 80, .len = 2 }, + .{ .cp = 0x0132, .start = 82, .len = 1 }, + .{ .cp = 0x0134, .start = 83, .len = 1 }, + .{ .cp = 0x0136, .start = 84, .len = 1 }, + .{ .cp = 0x0139, .start = 85, .len = 1 }, + .{ .cp = 0x013B, .start = 86, .len = 1 }, + .{ .cp = 0x013D, .start = 87, .len = 1 }, + .{ .cp = 0x013F, .start = 88, .len = 1 }, + .{ .cp = 0x0141, .start = 89, .len = 1 }, + .{ .cp = 0x0143, .start = 90, .len = 1 }, + .{ .cp = 0x0145, .start = 91, .len = 1 }, + .{ .cp = 0x0147, .start = 92, .len = 1 }, + .{ .cp = 0x014A, .start = 93, .len = 1 }, + .{ .cp = 0x014C, .start = 94, .len = 1 }, + .{ .cp = 0x014E, .start = 95, .len = 1 }, + .{ .cp = 0x0150, .start = 96, .len = 1 }, + .{ .cp = 0x0152, .start = 97, .len = 1 }, + .{ .cp = 0x0154, .start = 98, .len = 1 }, + .{ .cp = 0x0156, .start = 99, .len = 1 }, + .{ .cp = 0x0158, .start = 100, .len = 1 }, + .{ .cp = 0x015A, .start = 101, .len = 1 }, + .{ .cp = 0x015C, .start = 102, .len = 1 }, + .{ .cp = 0x015E, .start = 103, .len = 1 }, + .{ .cp = 0x0160, .start = 104, .len = 1 }, + .{ .cp = 0x0162, .start = 105, .len = 1 }, + .{ .cp = 0x0164, .start = 106, .len = 1 }, + .{ .cp = 0x0166, .start = 107, .len = 1 }, + .{ .cp = 0x0168, .start = 108, .len = 1 }, + .{ .cp = 0x016A, .start = 109, .len = 1 }, + .{ .cp = 0x016C, .start = 110, .len = 1 }, + .{ .cp = 0x016E, .start = 111, .len = 1 }, + .{ .cp = 0x0170, .start = 112, .len = 1 }, + .{ .cp = 0x0172, .start = 113, .len = 1 }, + .{ .cp = 0x0174, .start = 114, .len = 1 }, + .{ .cp = 0x0176, .start = 115, .len = 1 }, + .{ .cp = 0x0178, .start = 116, .len = 1 }, + .{ .cp = 0x0179, .start = 117, .len = 1 }, + .{ .cp = 0x017B, .start = 118, .len = 1 }, + .{ .cp = 0x017D, .start = 119, .len = 1 }, + .{ .cp = 0x0181, .start = 120, .len = 1 }, + .{ .cp = 0x0182, .start = 121, .len = 1 }, + .{ .cp = 0x0184, .start = 122, .len = 1 }, + .{ .cp = 0x0186, .start = 123, .len = 1 }, + .{ .cp = 0x0187, .start = 124, .len = 1 }, + .{ .cp = 0x0189, .start = 125, .len = 1 }, + .{ .cp = 0x018A, .start = 126, .len = 1 }, + .{ .cp = 0x018B, .start = 127, .len = 1 }, + .{ .cp = 0x018E, .start = 128, .len = 1 }, + .{ .cp = 0x018F, .start = 129, .len = 1 }, + .{ .cp = 0x0190, .start = 130, .len = 1 }, + .{ .cp = 0x0191, .start = 131, .len = 1 }, + .{ .cp = 0x0193, .start = 132, .len = 1 }, + .{ .cp = 0x0194, .start = 133, .len = 1 }, + .{ .cp = 0x0196, .start = 134, .len = 1 }, + .{ .cp = 0x0197, .start = 135, .len = 1 }, + .{ .cp = 0x0198, .start = 136, .len = 1 }, + .{ .cp = 0x019C, .start = 137, .len = 1 }, + .{ .cp = 0x019D, .start = 138, .len = 1 }, + .{ .cp = 0x019F, .start = 139, .len = 1 }, + .{ .cp = 0x01A0, .start = 140, .len = 1 }, + .{ .cp = 0x01A2, .start = 141, .len = 1 }, + .{ .cp = 0x01A4, .start = 142, .len = 1 }, + .{ .cp = 0x01A6, .start = 143, .len = 1 }, + .{ .cp = 0x01A7, .start = 144, .len = 1 }, + .{ .cp = 0x01A9, .start = 145, .len = 1 }, + .{ .cp = 0x01AC, .start = 146, .len = 1 }, + .{ .cp = 0x01AE, .start = 147, .len = 1 }, + .{ .cp = 0x01AF, .start = 148, .len = 1 }, + .{ .cp = 0x01B1, .start = 149, .len = 1 }, + .{ .cp = 0x01B2, .start = 150, .len = 1 }, + .{ .cp = 0x01B3, .start = 151, .len = 1 }, + .{ .cp = 0x01B5, .start = 152, .len = 1 }, + .{ .cp = 0x01B7, .start = 153, .len = 1 }, + .{ .cp = 0x01B8, .start = 154, .len = 1 }, + .{ .cp = 0x01BC, .start = 155, .len = 1 }, + .{ .cp = 0x01C4, .start = 156, .len = 1 }, + .{ .cp = 0x01C5, .start = 157, .len = 1 }, + .{ .cp = 0x01C7, .start = 158, .len = 1 }, + .{ .cp = 0x01C8, .start = 159, .len = 1 }, + .{ .cp = 0x01CA, .start = 160, .len = 1 }, + .{ .cp = 0x01CB, .start = 161, .len = 1 }, + .{ .cp = 0x01CD, .start = 162, .len = 1 }, + .{ .cp = 0x01CF, .start = 163, .len = 1 }, + .{ .cp = 0x01D1, .start = 164, .len = 1 }, + .{ .cp = 0x01D3, .start = 165, .len = 1 }, + .{ .cp = 0x01D5, .start = 166, .len = 1 }, + .{ .cp = 0x01D7, .start = 167, .len = 1 }, + .{ .cp = 0x01D9, .start = 168, .len = 1 }, + .{ .cp = 0x01DB, .start = 169, .len = 1 }, + .{ .cp = 0x01DE, .start = 170, .len = 1 }, + .{ .cp = 0x01E0, .start = 171, .len = 1 }, + .{ .cp = 0x01E2, .start = 172, .len = 1 }, + .{ .cp = 0x01E4, .start = 173, .len = 1 }, + .{ .cp = 0x01E6, .start = 174, .len = 1 }, + .{ .cp = 0x01E8, .start = 175, .len = 1 }, + .{ .cp = 0x01EA, .start = 176, .len = 1 }, + .{ .cp = 0x01EC, .start = 177, .len = 1 }, + .{ .cp = 0x01EE, .start = 178, .len = 1 }, + .{ .cp = 0x01F1, .start = 179, .len = 1 }, + .{ .cp = 0x01F2, .start = 180, .len = 1 }, + .{ .cp = 0x01F4, .start = 181, .len = 1 }, + .{ .cp = 0x01F6, .start = 182, .len = 1 }, + .{ .cp = 0x01F7, .start = 183, .len = 1 }, + .{ .cp = 0x01F8, .start = 184, .len = 1 }, + .{ .cp = 0x01FA, .start = 185, .len = 1 }, + .{ .cp = 0x01FC, .start = 186, .len = 1 }, + .{ .cp = 0x01FE, .start = 187, .len = 1 }, + .{ .cp = 0x0200, .start = 188, .len = 1 }, + .{ .cp = 0x0202, .start = 189, .len = 1 }, + .{ .cp = 0x0204, .start = 190, .len = 1 }, + .{ .cp = 0x0206, .start = 191, .len = 1 }, + .{ .cp = 0x0208, .start = 192, .len = 1 }, + .{ .cp = 0x020A, .start = 193, .len = 1 }, + .{ .cp = 0x020C, .start = 194, .len = 1 }, + .{ .cp = 0x020E, .start = 195, .len = 1 }, + .{ .cp = 0x0210, .start = 196, .len = 1 }, + .{ .cp = 0x0212, .start = 197, .len = 1 }, + .{ .cp = 0x0214, .start = 198, .len = 1 }, + .{ .cp = 0x0216, .start = 199, .len = 1 }, + .{ .cp = 0x0218, .start = 200, .len = 1 }, + .{ .cp = 0x021A, .start = 201, .len = 1 }, + .{ .cp = 0x021C, .start = 202, .len = 1 }, + .{ .cp = 0x021E, .start = 203, .len = 1 }, + .{ .cp = 0x0220, .start = 204, .len = 1 }, + .{ .cp = 0x0222, .start = 205, .len = 1 }, + .{ .cp = 0x0224, .start = 206, .len = 1 }, + .{ .cp = 0x0226, .start = 207, .len = 1 }, + .{ .cp = 0x0228, .start = 208, .len = 1 }, + .{ .cp = 0x022A, .start = 209, .len = 1 }, + .{ .cp = 0x022C, .start = 210, .len = 1 }, + .{ .cp = 0x022E, .start = 211, .len = 1 }, + .{ .cp = 0x0230, .start = 212, .len = 1 }, + .{ .cp = 0x0232, .start = 213, .len = 1 }, + .{ .cp = 0x023A, .start = 214, .len = 1 }, + .{ .cp = 0x023B, .start = 215, .len = 1 }, + .{ .cp = 0x023D, .start = 216, .len = 1 }, + .{ .cp = 0x023E, .start = 217, .len = 1 }, + .{ .cp = 0x0241, .start = 218, .len = 1 }, + .{ .cp = 0x0243, .start = 219, .len = 1 }, + .{ .cp = 0x0244, .start = 220, .len = 1 }, + .{ .cp = 0x0245, .start = 221, .len = 1 }, + .{ .cp = 0x0246, .start = 222, .len = 1 }, + .{ .cp = 0x0248, .start = 223, .len = 1 }, + .{ .cp = 0x024A, .start = 224, .len = 1 }, + .{ .cp = 0x024C, .start = 225, .len = 1 }, + .{ .cp = 0x024E, .start = 226, .len = 1 }, + .{ .cp = 0x0370, .start = 227, .len = 1 }, + .{ .cp = 0x0372, .start = 228, .len = 1 }, + .{ .cp = 0x0376, .start = 229, .len = 1 }, + .{ .cp = 0x037F, .start = 230, .len = 1 }, + .{ .cp = 0x0386, .start = 231, .len = 1 }, + .{ .cp = 0x0388, .start = 232, .len = 1 }, + .{ .cp = 0x0389, .start = 233, .len = 1 }, + .{ .cp = 0x038A, .start = 234, .len = 1 }, + .{ .cp = 0x038C, .start = 235, .len = 1 }, + .{ .cp = 0x038E, .start = 236, .len = 1 }, + .{ .cp = 0x038F, .start = 237, .len = 1 }, + .{ .cp = 0x0391, .start = 238, .len = 1 }, + .{ .cp = 0x0392, .start = 239, .len = 1 }, + .{ .cp = 0x0393, .start = 240, .len = 1 }, + .{ .cp = 0x0394, .start = 241, .len = 1 }, + .{ .cp = 0x0395, .start = 242, .len = 1 }, + .{ .cp = 0x0396, .start = 243, .len = 1 }, + .{ .cp = 0x0397, .start = 244, .len = 1 }, + .{ .cp = 0x0398, .start = 245, .len = 1 }, + .{ .cp = 0x0399, .start = 246, .len = 1 }, + .{ .cp = 0x039A, .start = 247, .len = 1 }, + .{ .cp = 0x039B, .start = 248, .len = 1 }, + .{ .cp = 0x039C, .start = 249, .len = 1 }, + .{ .cp = 0x039D, .start = 250, .len = 1 }, + .{ .cp = 0x039E, .start = 251, .len = 1 }, + .{ .cp = 0x039F, .start = 252, .len = 1 }, + .{ .cp = 0x03A0, .start = 253, .len = 1 }, + .{ .cp = 0x03A1, .start = 254, .len = 1 }, + .{ .cp = 0x03A3, .start = 255, .len = 1 }, + .{ .cp = 0x03A4, .start = 256, .len = 1 }, + .{ .cp = 0x03A5, .start = 257, .len = 1 }, + .{ .cp = 0x03A6, .start = 258, .len = 1 }, + .{ .cp = 0x03A7, .start = 259, .len = 1 }, + .{ .cp = 0x03A8, .start = 260, .len = 1 }, + .{ .cp = 0x03A9, .start = 261, .len = 1 }, + .{ .cp = 0x03AA, .start = 262, .len = 1 }, + .{ .cp = 0x03AB, .start = 263, .len = 1 }, + .{ .cp = 0x03CF, .start = 264, .len = 1 }, + .{ .cp = 0x03D8, .start = 265, .len = 1 }, + .{ .cp = 0x03DA, .start = 266, .len = 1 }, + .{ .cp = 0x03DC, .start = 267, .len = 1 }, + .{ .cp = 0x03DE, .start = 268, .len = 1 }, + .{ .cp = 0x03E0, .start = 269, .len = 1 }, + .{ .cp = 0x03E2, .start = 270, .len = 1 }, + .{ .cp = 0x03E4, .start = 271, .len = 1 }, + .{ .cp = 0x03E6, .start = 272, .len = 1 }, + .{ .cp = 0x03E8, .start = 273, .len = 1 }, + .{ .cp = 0x03EA, .start = 274, .len = 1 }, + .{ .cp = 0x03EC, .start = 275, .len = 1 }, + .{ .cp = 0x03EE, .start = 276, .len = 1 }, + .{ .cp = 0x03F4, .start = 277, .len = 1 }, + .{ .cp = 0x03F7, .start = 278, .len = 1 }, + .{ .cp = 0x03F9, .start = 279, .len = 1 }, + .{ .cp = 0x03FA, .start = 280, .len = 1 }, + .{ .cp = 0x03FD, .start = 281, .len = 1 }, + .{ .cp = 0x03FE, .start = 282, .len = 1 }, + .{ .cp = 0x03FF, .start = 283, .len = 1 }, + .{ .cp = 0x0400, .start = 284, .len = 1 }, + .{ .cp = 0x0401, .start = 285, .len = 1 }, + .{ .cp = 0x0402, .start = 286, .len = 1 }, + .{ .cp = 0x0403, .start = 287, .len = 1 }, + .{ .cp = 0x0404, .start = 288, .len = 1 }, + .{ .cp = 0x0405, .start = 289, .len = 1 }, + .{ .cp = 0x0406, .start = 290, .len = 1 }, + .{ .cp = 0x0407, .start = 291, .len = 1 }, + .{ .cp = 0x0408, .start = 292, .len = 1 }, + .{ .cp = 0x0409, .start = 293, .len = 1 }, + .{ .cp = 0x040A, .start = 294, .len = 1 }, + .{ .cp = 0x040B, .start = 295, .len = 1 }, + .{ .cp = 0x040C, .start = 296, .len = 1 }, + .{ .cp = 0x040D, .start = 297, .len = 1 }, + .{ .cp = 0x040E, .start = 298, .len = 1 }, + .{ .cp = 0x040F, .start = 299, .len = 1 }, + .{ .cp = 0x0410, .start = 300, .len = 1 }, + .{ .cp = 0x0411, .start = 301, .len = 1 }, + .{ .cp = 0x0412, .start = 302, .len = 1 }, + .{ .cp = 0x0413, .start = 303, .len = 1 }, + .{ .cp = 0x0414, .start = 304, .len = 1 }, + .{ .cp = 0x0415, .start = 305, .len = 1 }, + .{ .cp = 0x0416, .start = 306, .len = 1 }, + .{ .cp = 0x0417, .start = 307, .len = 1 }, + .{ .cp = 0x0418, .start = 308, .len = 1 }, + .{ .cp = 0x0419, .start = 309, .len = 1 }, + .{ .cp = 0x041A, .start = 310, .len = 1 }, + .{ .cp = 0x041B, .start = 311, .len = 1 }, + .{ .cp = 0x041C, .start = 312, .len = 1 }, + .{ .cp = 0x041D, .start = 313, .len = 1 }, + .{ .cp = 0x041E, .start = 314, .len = 1 }, + .{ .cp = 0x041F, .start = 315, .len = 1 }, + .{ .cp = 0x0420, .start = 316, .len = 1 }, + .{ .cp = 0x0421, .start = 317, .len = 1 }, + .{ .cp = 0x0422, .start = 318, .len = 1 }, + .{ .cp = 0x0423, .start = 319, .len = 1 }, + .{ .cp = 0x0424, .start = 320, .len = 1 }, + .{ .cp = 0x0425, .start = 321, .len = 1 }, + .{ .cp = 0x0426, .start = 322, .len = 1 }, + .{ .cp = 0x0427, .start = 323, .len = 1 }, + .{ .cp = 0x0428, .start = 324, .len = 1 }, + .{ .cp = 0x0429, .start = 325, .len = 1 }, + .{ .cp = 0x042A, .start = 326, .len = 1 }, + .{ .cp = 0x042B, .start = 327, .len = 1 }, + .{ .cp = 0x042C, .start = 328, .len = 1 }, + .{ .cp = 0x042D, .start = 329, .len = 1 }, + .{ .cp = 0x042E, .start = 330, .len = 1 }, + .{ .cp = 0x042F, .start = 331, .len = 1 }, + .{ .cp = 0x0460, .start = 332, .len = 1 }, + .{ .cp = 0x0462, .start = 333, .len = 1 }, + .{ .cp = 0x0464, .start = 334, .len = 1 }, + .{ .cp = 0x0466, .start = 335, .len = 1 }, + .{ .cp = 0x0468, .start = 336, .len = 1 }, + .{ .cp = 0x046A, .start = 337, .len = 1 }, + .{ .cp = 0x046C, .start = 338, .len = 1 }, + .{ .cp = 0x046E, .start = 339, .len = 1 }, + .{ .cp = 0x0470, .start = 340, .len = 1 }, + .{ .cp = 0x0472, .start = 341, .len = 1 }, + .{ .cp = 0x0474, .start = 342, .len = 1 }, + .{ .cp = 0x0476, .start = 343, .len = 1 }, + .{ .cp = 0x0478, .start = 344, .len = 1 }, + .{ .cp = 0x047A, .start = 345, .len = 1 }, + .{ .cp = 0x047C, .start = 346, .len = 1 }, + .{ .cp = 0x047E, .start = 347, .len = 1 }, + .{ .cp = 0x0480, .start = 348, .len = 1 }, + .{ .cp = 0x048A, .start = 349, .len = 1 }, + .{ .cp = 0x048C, .start = 350, .len = 1 }, + .{ .cp = 0x048E, .start = 351, .len = 1 }, + .{ .cp = 0x0490, .start = 352, .len = 1 }, + .{ .cp = 0x0492, .start = 353, .len = 1 }, + .{ .cp = 0x0494, .start = 354, .len = 1 }, + .{ .cp = 0x0496, .start = 355, .len = 1 }, + .{ .cp = 0x0498, .start = 356, .len = 1 }, + .{ .cp = 0x049A, .start = 357, .len = 1 }, + .{ .cp = 0x049C, .start = 358, .len = 1 }, + .{ .cp = 0x049E, .start = 359, .len = 1 }, + .{ .cp = 0x04A0, .start = 360, .len = 1 }, + .{ .cp = 0x04A2, .start = 361, .len = 1 }, + .{ .cp = 0x04A4, .start = 362, .len = 1 }, + .{ .cp = 0x04A6, .start = 363, .len = 1 }, + .{ .cp = 0x04A8, .start = 364, .len = 1 }, + .{ .cp = 0x04AA, .start = 365, .len = 1 }, + .{ .cp = 0x04AC, .start = 366, .len = 1 }, + .{ .cp = 0x04AE, .start = 367, .len = 1 }, + .{ .cp = 0x04B0, .start = 368, .len = 1 }, + .{ .cp = 0x04B2, .start = 369, .len = 1 }, + .{ .cp = 0x04B4, .start = 370, .len = 1 }, + .{ .cp = 0x04B6, .start = 371, .len = 1 }, + .{ .cp = 0x04B8, .start = 372, .len = 1 }, + .{ .cp = 0x04BA, .start = 373, .len = 1 }, + .{ .cp = 0x04BC, .start = 374, .len = 1 }, + .{ .cp = 0x04BE, .start = 375, .len = 1 }, + .{ .cp = 0x04C0, .start = 376, .len = 1 }, + .{ .cp = 0x04C1, .start = 377, .len = 1 }, + .{ .cp = 0x04C3, .start = 378, .len = 1 }, + .{ .cp = 0x04C5, .start = 379, .len = 1 }, + .{ .cp = 0x04C7, .start = 380, .len = 1 }, + .{ .cp = 0x04C9, .start = 381, .len = 1 }, + .{ .cp = 0x04CB, .start = 382, .len = 1 }, + .{ .cp = 0x04CD, .start = 383, .len = 1 }, + .{ .cp = 0x04D0, .start = 384, .len = 1 }, + .{ .cp = 0x04D2, .start = 385, .len = 1 }, + .{ .cp = 0x04D4, .start = 386, .len = 1 }, + .{ .cp = 0x04D6, .start = 387, .len = 1 }, + .{ .cp = 0x04D8, .start = 388, .len = 1 }, + .{ .cp = 0x04DA, .start = 389, .len = 1 }, + .{ .cp = 0x04DC, .start = 390, .len = 1 }, + .{ .cp = 0x04DE, .start = 391, .len = 1 }, + .{ .cp = 0x04E0, .start = 392, .len = 1 }, + .{ .cp = 0x04E2, .start = 393, .len = 1 }, + .{ .cp = 0x04E4, .start = 394, .len = 1 }, + .{ .cp = 0x04E6, .start = 395, .len = 1 }, + .{ .cp = 0x04E8, .start = 396, .len = 1 }, + .{ .cp = 0x04EA, .start = 397, .len = 1 }, + .{ .cp = 0x04EC, .start = 398, .len = 1 }, + .{ .cp = 0x04EE, .start = 399, .len = 1 }, + .{ .cp = 0x04F0, .start = 400, .len = 1 }, + .{ .cp = 0x04F2, .start = 401, .len = 1 }, + .{ .cp = 0x04F4, .start = 402, .len = 1 }, + .{ .cp = 0x04F6, .start = 403, .len = 1 }, + .{ .cp = 0x04F8, .start = 404, .len = 1 }, + .{ .cp = 0x04FA, .start = 405, .len = 1 }, + .{ .cp = 0x04FC, .start = 406, .len = 1 }, + .{ .cp = 0x04FE, .start = 407, .len = 1 }, + .{ .cp = 0x0500, .start = 408, .len = 1 }, + .{ .cp = 0x0502, .start = 409, .len = 1 }, + .{ .cp = 0x0504, .start = 410, .len = 1 }, + .{ .cp = 0x0506, .start = 411, .len = 1 }, + .{ .cp = 0x0508, .start = 412, .len = 1 }, + .{ .cp = 0x050A, .start = 413, .len = 1 }, + .{ .cp = 0x050C, .start = 414, .len = 1 }, + .{ .cp = 0x050E, .start = 415, .len = 1 }, + .{ .cp = 0x0510, .start = 416, .len = 1 }, + .{ .cp = 0x0512, .start = 417, .len = 1 }, + .{ .cp = 0x0514, .start = 418, .len = 1 }, + .{ .cp = 0x0516, .start = 419, .len = 1 }, + .{ .cp = 0x0518, .start = 420, .len = 1 }, + .{ .cp = 0x051A, .start = 421, .len = 1 }, + .{ .cp = 0x051C, .start = 422, .len = 1 }, + .{ .cp = 0x051E, .start = 423, .len = 1 }, + .{ .cp = 0x0520, .start = 424, .len = 1 }, + .{ .cp = 0x0522, .start = 425, .len = 1 }, + .{ .cp = 0x0524, .start = 426, .len = 1 }, + .{ .cp = 0x0526, .start = 427, .len = 1 }, + .{ .cp = 0x0528, .start = 428, .len = 1 }, + .{ .cp = 0x052A, .start = 429, .len = 1 }, + .{ .cp = 0x052C, .start = 430, .len = 1 }, + .{ .cp = 0x052E, .start = 431, .len = 1 }, + .{ .cp = 0x0531, .start = 432, .len = 1 }, + .{ .cp = 0x0532, .start = 433, .len = 1 }, + .{ .cp = 0x0533, .start = 434, .len = 1 }, + .{ .cp = 0x0534, .start = 435, .len = 1 }, + .{ .cp = 0x0535, .start = 436, .len = 1 }, + .{ .cp = 0x0536, .start = 437, .len = 1 }, + .{ .cp = 0x0537, .start = 438, .len = 1 }, + .{ .cp = 0x0538, .start = 439, .len = 1 }, + .{ .cp = 0x0539, .start = 440, .len = 1 }, + .{ .cp = 0x053A, .start = 441, .len = 1 }, + .{ .cp = 0x053B, .start = 442, .len = 1 }, + .{ .cp = 0x053C, .start = 443, .len = 1 }, + .{ .cp = 0x053D, .start = 444, .len = 1 }, + .{ .cp = 0x053E, .start = 445, .len = 1 }, + .{ .cp = 0x053F, .start = 446, .len = 1 }, + .{ .cp = 0x0540, .start = 447, .len = 1 }, + .{ .cp = 0x0541, .start = 448, .len = 1 }, + .{ .cp = 0x0542, .start = 449, .len = 1 }, + .{ .cp = 0x0543, .start = 450, .len = 1 }, + .{ .cp = 0x0544, .start = 451, .len = 1 }, + .{ .cp = 0x0545, .start = 452, .len = 1 }, + .{ .cp = 0x0546, .start = 453, .len = 1 }, + .{ .cp = 0x0547, .start = 454, .len = 1 }, + .{ .cp = 0x0548, .start = 455, .len = 1 }, + .{ .cp = 0x0549, .start = 456, .len = 1 }, + .{ .cp = 0x054A, .start = 457, .len = 1 }, + .{ .cp = 0x054B, .start = 458, .len = 1 }, + .{ .cp = 0x054C, .start = 459, .len = 1 }, + .{ .cp = 0x054D, .start = 460, .len = 1 }, + .{ .cp = 0x054E, .start = 461, .len = 1 }, + .{ .cp = 0x054F, .start = 462, .len = 1 }, + .{ .cp = 0x0550, .start = 463, .len = 1 }, + .{ .cp = 0x0551, .start = 464, .len = 1 }, + .{ .cp = 0x0552, .start = 465, .len = 1 }, + .{ .cp = 0x0553, .start = 466, .len = 1 }, + .{ .cp = 0x0554, .start = 467, .len = 1 }, + .{ .cp = 0x0555, .start = 468, .len = 1 }, + .{ .cp = 0x0556, .start = 469, .len = 1 }, + .{ .cp = 0x10A0, .start = 470, .len = 1 }, + .{ .cp = 0x10A1, .start = 471, .len = 1 }, + .{ .cp = 0x10A2, .start = 472, .len = 1 }, + .{ .cp = 0x10A3, .start = 473, .len = 1 }, + .{ .cp = 0x10A4, .start = 474, .len = 1 }, + .{ .cp = 0x10A5, .start = 475, .len = 1 }, + .{ .cp = 0x10A6, .start = 476, .len = 1 }, + .{ .cp = 0x10A7, .start = 477, .len = 1 }, + .{ .cp = 0x10A8, .start = 478, .len = 1 }, + .{ .cp = 0x10A9, .start = 479, .len = 1 }, + .{ .cp = 0x10AA, .start = 480, .len = 1 }, + .{ .cp = 0x10AB, .start = 481, .len = 1 }, + .{ .cp = 0x10AC, .start = 482, .len = 1 }, + .{ .cp = 0x10AD, .start = 483, .len = 1 }, + .{ .cp = 0x10AE, .start = 484, .len = 1 }, + .{ .cp = 0x10AF, .start = 485, .len = 1 }, + .{ .cp = 0x10B0, .start = 486, .len = 1 }, + .{ .cp = 0x10B1, .start = 487, .len = 1 }, + .{ .cp = 0x10B2, .start = 488, .len = 1 }, + .{ .cp = 0x10B3, .start = 489, .len = 1 }, + .{ .cp = 0x10B4, .start = 490, .len = 1 }, + .{ .cp = 0x10B5, .start = 491, .len = 1 }, + .{ .cp = 0x10B6, .start = 492, .len = 1 }, + .{ .cp = 0x10B7, .start = 493, .len = 1 }, + .{ .cp = 0x10B8, .start = 494, .len = 1 }, + .{ .cp = 0x10B9, .start = 495, .len = 1 }, + .{ .cp = 0x10BA, .start = 496, .len = 1 }, + .{ .cp = 0x10BB, .start = 497, .len = 1 }, + .{ .cp = 0x10BC, .start = 498, .len = 1 }, + .{ .cp = 0x10BD, .start = 499, .len = 1 }, + .{ .cp = 0x10BE, .start = 500, .len = 1 }, + .{ .cp = 0x10BF, .start = 501, .len = 1 }, + .{ .cp = 0x10C0, .start = 502, .len = 1 }, + .{ .cp = 0x10C1, .start = 503, .len = 1 }, + .{ .cp = 0x10C2, .start = 504, .len = 1 }, + .{ .cp = 0x10C3, .start = 505, .len = 1 }, + .{ .cp = 0x10C4, .start = 506, .len = 1 }, + .{ .cp = 0x10C5, .start = 507, .len = 1 }, + .{ .cp = 0x10C7, .start = 508, .len = 1 }, + .{ .cp = 0x10CD, .start = 509, .len = 1 }, + .{ .cp = 0x13A0, .start = 510, .len = 1 }, + .{ .cp = 0x13A1, .start = 511, .len = 1 }, + .{ .cp = 0x13A2, .start = 512, .len = 1 }, + .{ .cp = 0x13A3, .start = 513, .len = 1 }, + .{ .cp = 0x13A4, .start = 514, .len = 1 }, + .{ .cp = 0x13A5, .start = 515, .len = 1 }, + .{ .cp = 0x13A6, .start = 516, .len = 1 }, + .{ .cp = 0x13A7, .start = 517, .len = 1 }, + .{ .cp = 0x13A8, .start = 518, .len = 1 }, + .{ .cp = 0x13A9, .start = 519, .len = 1 }, + .{ .cp = 0x13AA, .start = 520, .len = 1 }, + .{ .cp = 0x13AB, .start = 521, .len = 1 }, + .{ .cp = 0x13AC, .start = 522, .len = 1 }, + .{ .cp = 0x13AD, .start = 523, .len = 1 }, + .{ .cp = 0x13AE, .start = 524, .len = 1 }, + .{ .cp = 0x13AF, .start = 525, .len = 1 }, + .{ .cp = 0x13B0, .start = 526, .len = 1 }, + .{ .cp = 0x13B1, .start = 527, .len = 1 }, + .{ .cp = 0x13B2, .start = 528, .len = 1 }, + .{ .cp = 0x13B3, .start = 529, .len = 1 }, + .{ .cp = 0x13B4, .start = 530, .len = 1 }, + .{ .cp = 0x13B5, .start = 531, .len = 1 }, + .{ .cp = 0x13B6, .start = 532, .len = 1 }, + .{ .cp = 0x13B7, .start = 533, .len = 1 }, + .{ .cp = 0x13B8, .start = 534, .len = 1 }, + .{ .cp = 0x13B9, .start = 535, .len = 1 }, + .{ .cp = 0x13BA, .start = 536, .len = 1 }, + .{ .cp = 0x13BB, .start = 537, .len = 1 }, + .{ .cp = 0x13BC, .start = 538, .len = 1 }, + .{ .cp = 0x13BD, .start = 539, .len = 1 }, + .{ .cp = 0x13BE, .start = 540, .len = 1 }, + .{ .cp = 0x13BF, .start = 541, .len = 1 }, + .{ .cp = 0x13C0, .start = 542, .len = 1 }, + .{ .cp = 0x13C1, .start = 543, .len = 1 }, + .{ .cp = 0x13C2, .start = 544, .len = 1 }, + .{ .cp = 0x13C3, .start = 545, .len = 1 }, + .{ .cp = 0x13C4, .start = 546, .len = 1 }, + .{ .cp = 0x13C5, .start = 547, .len = 1 }, + .{ .cp = 0x13C6, .start = 548, .len = 1 }, + .{ .cp = 0x13C7, .start = 549, .len = 1 }, + .{ .cp = 0x13C8, .start = 550, .len = 1 }, + .{ .cp = 0x13C9, .start = 551, .len = 1 }, + .{ .cp = 0x13CA, .start = 552, .len = 1 }, + .{ .cp = 0x13CB, .start = 553, .len = 1 }, + .{ .cp = 0x13CC, .start = 554, .len = 1 }, + .{ .cp = 0x13CD, .start = 555, .len = 1 }, + .{ .cp = 0x13CE, .start = 556, .len = 1 }, + .{ .cp = 0x13CF, .start = 557, .len = 1 }, + .{ .cp = 0x13D0, .start = 558, .len = 1 }, + .{ .cp = 0x13D1, .start = 559, .len = 1 }, + .{ .cp = 0x13D2, .start = 560, .len = 1 }, + .{ .cp = 0x13D3, .start = 561, .len = 1 }, + .{ .cp = 0x13D4, .start = 562, .len = 1 }, + .{ .cp = 0x13D5, .start = 563, .len = 1 }, + .{ .cp = 0x13D6, .start = 564, .len = 1 }, + .{ .cp = 0x13D7, .start = 565, .len = 1 }, + .{ .cp = 0x13D8, .start = 566, .len = 1 }, + .{ .cp = 0x13D9, .start = 567, .len = 1 }, + .{ .cp = 0x13DA, .start = 568, .len = 1 }, + .{ .cp = 0x13DB, .start = 569, .len = 1 }, + .{ .cp = 0x13DC, .start = 570, .len = 1 }, + .{ .cp = 0x13DD, .start = 571, .len = 1 }, + .{ .cp = 0x13DE, .start = 572, .len = 1 }, + .{ .cp = 0x13DF, .start = 573, .len = 1 }, + .{ .cp = 0x13E0, .start = 574, .len = 1 }, + .{ .cp = 0x13E1, .start = 575, .len = 1 }, + .{ .cp = 0x13E2, .start = 576, .len = 1 }, + .{ .cp = 0x13E3, .start = 577, .len = 1 }, + .{ .cp = 0x13E4, .start = 578, .len = 1 }, + .{ .cp = 0x13E5, .start = 579, .len = 1 }, + .{ .cp = 0x13E6, .start = 580, .len = 1 }, + .{ .cp = 0x13E7, .start = 581, .len = 1 }, + .{ .cp = 0x13E8, .start = 582, .len = 1 }, + .{ .cp = 0x13E9, .start = 583, .len = 1 }, + .{ .cp = 0x13EA, .start = 584, .len = 1 }, + .{ .cp = 0x13EB, .start = 585, .len = 1 }, + .{ .cp = 0x13EC, .start = 586, .len = 1 }, + .{ .cp = 0x13ED, .start = 587, .len = 1 }, + .{ .cp = 0x13EE, .start = 588, .len = 1 }, + .{ .cp = 0x13EF, .start = 589, .len = 1 }, + .{ .cp = 0x13F0, .start = 590, .len = 1 }, + .{ .cp = 0x13F1, .start = 591, .len = 1 }, + .{ .cp = 0x13F2, .start = 592, .len = 1 }, + .{ .cp = 0x13F3, .start = 593, .len = 1 }, + .{ .cp = 0x13F4, .start = 594, .len = 1 }, + .{ .cp = 0x13F5, .start = 595, .len = 1 }, + .{ .cp = 0x1C89, .start = 596, .len = 1 }, + .{ .cp = 0x1C90, .start = 597, .len = 1 }, + .{ .cp = 0x1C91, .start = 598, .len = 1 }, + .{ .cp = 0x1C92, .start = 599, .len = 1 }, + .{ .cp = 0x1C93, .start = 600, .len = 1 }, + .{ .cp = 0x1C94, .start = 601, .len = 1 }, + .{ .cp = 0x1C95, .start = 602, .len = 1 }, + .{ .cp = 0x1C96, .start = 603, .len = 1 }, + .{ .cp = 0x1C97, .start = 604, .len = 1 }, + .{ .cp = 0x1C98, .start = 605, .len = 1 }, + .{ .cp = 0x1C99, .start = 606, .len = 1 }, + .{ .cp = 0x1C9A, .start = 607, .len = 1 }, + .{ .cp = 0x1C9B, .start = 608, .len = 1 }, + .{ .cp = 0x1C9C, .start = 609, .len = 1 }, + .{ .cp = 0x1C9D, .start = 610, .len = 1 }, + .{ .cp = 0x1C9E, .start = 611, .len = 1 }, + .{ .cp = 0x1C9F, .start = 612, .len = 1 }, + .{ .cp = 0x1CA0, .start = 613, .len = 1 }, + .{ .cp = 0x1CA1, .start = 614, .len = 1 }, + .{ .cp = 0x1CA2, .start = 615, .len = 1 }, + .{ .cp = 0x1CA3, .start = 616, .len = 1 }, + .{ .cp = 0x1CA4, .start = 617, .len = 1 }, + .{ .cp = 0x1CA5, .start = 618, .len = 1 }, + .{ .cp = 0x1CA6, .start = 619, .len = 1 }, + .{ .cp = 0x1CA7, .start = 620, .len = 1 }, + .{ .cp = 0x1CA8, .start = 621, .len = 1 }, + .{ .cp = 0x1CA9, .start = 622, .len = 1 }, + .{ .cp = 0x1CAA, .start = 623, .len = 1 }, + .{ .cp = 0x1CAB, .start = 624, .len = 1 }, + .{ .cp = 0x1CAC, .start = 625, .len = 1 }, + .{ .cp = 0x1CAD, .start = 626, .len = 1 }, + .{ .cp = 0x1CAE, .start = 627, .len = 1 }, + .{ .cp = 0x1CAF, .start = 628, .len = 1 }, + .{ .cp = 0x1CB0, .start = 629, .len = 1 }, + .{ .cp = 0x1CB1, .start = 630, .len = 1 }, + .{ .cp = 0x1CB2, .start = 631, .len = 1 }, + .{ .cp = 0x1CB3, .start = 632, .len = 1 }, + .{ .cp = 0x1CB4, .start = 633, .len = 1 }, + .{ .cp = 0x1CB5, .start = 634, .len = 1 }, + .{ .cp = 0x1CB6, .start = 635, .len = 1 }, + .{ .cp = 0x1CB7, .start = 636, .len = 1 }, + .{ .cp = 0x1CB8, .start = 637, .len = 1 }, + .{ .cp = 0x1CB9, .start = 638, .len = 1 }, + .{ .cp = 0x1CBA, .start = 639, .len = 1 }, + .{ .cp = 0x1CBD, .start = 640, .len = 1 }, + .{ .cp = 0x1CBE, .start = 641, .len = 1 }, + .{ .cp = 0x1CBF, .start = 642, .len = 1 }, + .{ .cp = 0x1E00, .start = 643, .len = 1 }, + .{ .cp = 0x1E02, .start = 644, .len = 1 }, + .{ .cp = 0x1E04, .start = 645, .len = 1 }, + .{ .cp = 0x1E06, .start = 646, .len = 1 }, + .{ .cp = 0x1E08, .start = 647, .len = 1 }, + .{ .cp = 0x1E0A, .start = 648, .len = 1 }, + .{ .cp = 0x1E0C, .start = 649, .len = 1 }, + .{ .cp = 0x1E0E, .start = 650, .len = 1 }, + .{ .cp = 0x1E10, .start = 651, .len = 1 }, + .{ .cp = 0x1E12, .start = 652, .len = 1 }, + .{ .cp = 0x1E14, .start = 653, .len = 1 }, + .{ .cp = 0x1E16, .start = 654, .len = 1 }, + .{ .cp = 0x1E18, .start = 655, .len = 1 }, + .{ .cp = 0x1E1A, .start = 656, .len = 1 }, + .{ .cp = 0x1E1C, .start = 657, .len = 1 }, + .{ .cp = 0x1E1E, .start = 658, .len = 1 }, + .{ .cp = 0x1E20, .start = 659, .len = 1 }, + .{ .cp = 0x1E22, .start = 660, .len = 1 }, + .{ .cp = 0x1E24, .start = 661, .len = 1 }, + .{ .cp = 0x1E26, .start = 662, .len = 1 }, + .{ .cp = 0x1E28, .start = 663, .len = 1 }, + .{ .cp = 0x1E2A, .start = 664, .len = 1 }, + .{ .cp = 0x1E2C, .start = 665, .len = 1 }, + .{ .cp = 0x1E2E, .start = 666, .len = 1 }, + .{ .cp = 0x1E30, .start = 667, .len = 1 }, + .{ .cp = 0x1E32, .start = 668, .len = 1 }, + .{ .cp = 0x1E34, .start = 669, .len = 1 }, + .{ .cp = 0x1E36, .start = 670, .len = 1 }, + .{ .cp = 0x1E38, .start = 671, .len = 1 }, + .{ .cp = 0x1E3A, .start = 672, .len = 1 }, + .{ .cp = 0x1E3C, .start = 673, .len = 1 }, + .{ .cp = 0x1E3E, .start = 674, .len = 1 }, + .{ .cp = 0x1E40, .start = 675, .len = 1 }, + .{ .cp = 0x1E42, .start = 676, .len = 1 }, + .{ .cp = 0x1E44, .start = 677, .len = 1 }, + .{ .cp = 0x1E46, .start = 678, .len = 1 }, + .{ .cp = 0x1E48, .start = 679, .len = 1 }, + .{ .cp = 0x1E4A, .start = 680, .len = 1 }, + .{ .cp = 0x1E4C, .start = 681, .len = 1 }, + .{ .cp = 0x1E4E, .start = 682, .len = 1 }, + .{ .cp = 0x1E50, .start = 683, .len = 1 }, + .{ .cp = 0x1E52, .start = 684, .len = 1 }, + .{ .cp = 0x1E54, .start = 685, .len = 1 }, + .{ .cp = 0x1E56, .start = 686, .len = 1 }, + .{ .cp = 0x1E58, .start = 687, .len = 1 }, + .{ .cp = 0x1E5A, .start = 688, .len = 1 }, + .{ .cp = 0x1E5C, .start = 689, .len = 1 }, + .{ .cp = 0x1E5E, .start = 690, .len = 1 }, + .{ .cp = 0x1E60, .start = 691, .len = 1 }, + .{ .cp = 0x1E62, .start = 692, .len = 1 }, + .{ .cp = 0x1E64, .start = 693, .len = 1 }, + .{ .cp = 0x1E66, .start = 694, .len = 1 }, + .{ .cp = 0x1E68, .start = 695, .len = 1 }, + .{ .cp = 0x1E6A, .start = 696, .len = 1 }, + .{ .cp = 0x1E6C, .start = 697, .len = 1 }, + .{ .cp = 0x1E6E, .start = 698, .len = 1 }, + .{ .cp = 0x1E70, .start = 699, .len = 1 }, + .{ .cp = 0x1E72, .start = 700, .len = 1 }, + .{ .cp = 0x1E74, .start = 701, .len = 1 }, + .{ .cp = 0x1E76, .start = 702, .len = 1 }, + .{ .cp = 0x1E78, .start = 703, .len = 1 }, + .{ .cp = 0x1E7A, .start = 704, .len = 1 }, + .{ .cp = 0x1E7C, .start = 705, .len = 1 }, + .{ .cp = 0x1E7E, .start = 706, .len = 1 }, + .{ .cp = 0x1E80, .start = 707, .len = 1 }, + .{ .cp = 0x1E82, .start = 708, .len = 1 }, + .{ .cp = 0x1E84, .start = 709, .len = 1 }, + .{ .cp = 0x1E86, .start = 710, .len = 1 }, + .{ .cp = 0x1E88, .start = 711, .len = 1 }, + .{ .cp = 0x1E8A, .start = 712, .len = 1 }, + .{ .cp = 0x1E8C, .start = 713, .len = 1 }, + .{ .cp = 0x1E8E, .start = 714, .len = 1 }, + .{ .cp = 0x1E90, .start = 715, .len = 1 }, + .{ .cp = 0x1E92, .start = 716, .len = 1 }, + .{ .cp = 0x1E94, .start = 717, .len = 1 }, + .{ .cp = 0x1E9E, .start = 718, .len = 1 }, + .{ .cp = 0x1EA0, .start = 719, .len = 1 }, + .{ .cp = 0x1EA2, .start = 720, .len = 1 }, + .{ .cp = 0x1EA4, .start = 721, .len = 1 }, + .{ .cp = 0x1EA6, .start = 722, .len = 1 }, + .{ .cp = 0x1EA8, .start = 723, .len = 1 }, + .{ .cp = 0x1EAA, .start = 724, .len = 1 }, + .{ .cp = 0x1EAC, .start = 725, .len = 1 }, + .{ .cp = 0x1EAE, .start = 726, .len = 1 }, + .{ .cp = 0x1EB0, .start = 727, .len = 1 }, + .{ .cp = 0x1EB2, .start = 728, .len = 1 }, + .{ .cp = 0x1EB4, .start = 729, .len = 1 }, + .{ .cp = 0x1EB6, .start = 730, .len = 1 }, + .{ .cp = 0x1EB8, .start = 731, .len = 1 }, + .{ .cp = 0x1EBA, .start = 732, .len = 1 }, + .{ .cp = 0x1EBC, .start = 733, .len = 1 }, + .{ .cp = 0x1EBE, .start = 734, .len = 1 }, + .{ .cp = 0x1EC0, .start = 735, .len = 1 }, + .{ .cp = 0x1EC2, .start = 736, .len = 1 }, + .{ .cp = 0x1EC4, .start = 737, .len = 1 }, + .{ .cp = 0x1EC6, .start = 738, .len = 1 }, + .{ .cp = 0x1EC8, .start = 739, .len = 1 }, + .{ .cp = 0x1ECA, .start = 740, .len = 1 }, + .{ .cp = 0x1ECC, .start = 741, .len = 1 }, + .{ .cp = 0x1ECE, .start = 742, .len = 1 }, + .{ .cp = 0x1ED0, .start = 743, .len = 1 }, + .{ .cp = 0x1ED2, .start = 744, .len = 1 }, + .{ .cp = 0x1ED4, .start = 745, .len = 1 }, + .{ .cp = 0x1ED6, .start = 746, .len = 1 }, + .{ .cp = 0x1ED8, .start = 747, .len = 1 }, + .{ .cp = 0x1EDA, .start = 748, .len = 1 }, + .{ .cp = 0x1EDC, .start = 749, .len = 1 }, + .{ .cp = 0x1EDE, .start = 750, .len = 1 }, + .{ .cp = 0x1EE0, .start = 751, .len = 1 }, + .{ .cp = 0x1EE2, .start = 752, .len = 1 }, + .{ .cp = 0x1EE4, .start = 753, .len = 1 }, + .{ .cp = 0x1EE6, .start = 754, .len = 1 }, + .{ .cp = 0x1EE8, .start = 755, .len = 1 }, + .{ .cp = 0x1EEA, .start = 756, .len = 1 }, + .{ .cp = 0x1EEC, .start = 757, .len = 1 }, + .{ .cp = 0x1EEE, .start = 758, .len = 1 }, + .{ .cp = 0x1EF0, .start = 759, .len = 1 }, + .{ .cp = 0x1EF2, .start = 760, .len = 1 }, + .{ .cp = 0x1EF4, .start = 761, .len = 1 }, + .{ .cp = 0x1EF6, .start = 762, .len = 1 }, + .{ .cp = 0x1EF8, .start = 763, .len = 1 }, + .{ .cp = 0x1EFA, .start = 764, .len = 1 }, + .{ .cp = 0x1EFC, .start = 765, .len = 1 }, + .{ .cp = 0x1EFE, .start = 766, .len = 1 }, + .{ .cp = 0x1F08, .start = 767, .len = 1 }, + .{ .cp = 0x1F09, .start = 768, .len = 1 }, + .{ .cp = 0x1F0A, .start = 769, .len = 1 }, + .{ .cp = 0x1F0B, .start = 770, .len = 1 }, + .{ .cp = 0x1F0C, .start = 771, .len = 1 }, + .{ .cp = 0x1F0D, .start = 772, .len = 1 }, + .{ .cp = 0x1F0E, .start = 773, .len = 1 }, + .{ .cp = 0x1F0F, .start = 774, .len = 1 }, + .{ .cp = 0x1F18, .start = 775, .len = 1 }, + .{ .cp = 0x1F19, .start = 776, .len = 1 }, + .{ .cp = 0x1F1A, .start = 777, .len = 1 }, + .{ .cp = 0x1F1B, .start = 778, .len = 1 }, + .{ .cp = 0x1F1C, .start = 779, .len = 1 }, + .{ .cp = 0x1F1D, .start = 780, .len = 1 }, + .{ .cp = 0x1F28, .start = 781, .len = 1 }, + .{ .cp = 0x1F29, .start = 782, .len = 1 }, + .{ .cp = 0x1F2A, .start = 783, .len = 1 }, + .{ .cp = 0x1F2B, .start = 784, .len = 1 }, + .{ .cp = 0x1F2C, .start = 785, .len = 1 }, + .{ .cp = 0x1F2D, .start = 786, .len = 1 }, + .{ .cp = 0x1F2E, .start = 787, .len = 1 }, + .{ .cp = 0x1F2F, .start = 788, .len = 1 }, + .{ .cp = 0x1F38, .start = 789, .len = 1 }, + .{ .cp = 0x1F39, .start = 790, .len = 1 }, + .{ .cp = 0x1F3A, .start = 791, .len = 1 }, + .{ .cp = 0x1F3B, .start = 792, .len = 1 }, + .{ .cp = 0x1F3C, .start = 793, .len = 1 }, + .{ .cp = 0x1F3D, .start = 794, .len = 1 }, + .{ .cp = 0x1F3E, .start = 795, .len = 1 }, + .{ .cp = 0x1F3F, .start = 796, .len = 1 }, + .{ .cp = 0x1F48, .start = 797, .len = 1 }, + .{ .cp = 0x1F49, .start = 798, .len = 1 }, + .{ .cp = 0x1F4A, .start = 799, .len = 1 }, + .{ .cp = 0x1F4B, .start = 800, .len = 1 }, + .{ .cp = 0x1F4C, .start = 801, .len = 1 }, + .{ .cp = 0x1F4D, .start = 802, .len = 1 }, + .{ .cp = 0x1F59, .start = 803, .len = 1 }, + .{ .cp = 0x1F5B, .start = 804, .len = 1 }, + .{ .cp = 0x1F5D, .start = 805, .len = 1 }, + .{ .cp = 0x1F5F, .start = 806, .len = 1 }, + .{ .cp = 0x1F68, .start = 807, .len = 1 }, + .{ .cp = 0x1F69, .start = 808, .len = 1 }, + .{ .cp = 0x1F6A, .start = 809, .len = 1 }, + .{ .cp = 0x1F6B, .start = 810, .len = 1 }, + .{ .cp = 0x1F6C, .start = 811, .len = 1 }, + .{ .cp = 0x1F6D, .start = 812, .len = 1 }, + .{ .cp = 0x1F6E, .start = 813, .len = 1 }, + .{ .cp = 0x1F6F, .start = 814, .len = 1 }, + .{ .cp = 0x1F88, .start = 815, .len = 1 }, + .{ .cp = 0x1F89, .start = 816, .len = 1 }, + .{ .cp = 0x1F8A, .start = 817, .len = 1 }, + .{ .cp = 0x1F8B, .start = 818, .len = 1 }, + .{ .cp = 0x1F8C, .start = 819, .len = 1 }, + .{ .cp = 0x1F8D, .start = 820, .len = 1 }, + .{ .cp = 0x1F8E, .start = 821, .len = 1 }, + .{ .cp = 0x1F8F, .start = 822, .len = 1 }, + .{ .cp = 0x1F98, .start = 823, .len = 1 }, + .{ .cp = 0x1F99, .start = 824, .len = 1 }, + .{ .cp = 0x1F9A, .start = 825, .len = 1 }, + .{ .cp = 0x1F9B, .start = 826, .len = 1 }, + .{ .cp = 0x1F9C, .start = 827, .len = 1 }, + .{ .cp = 0x1F9D, .start = 828, .len = 1 }, + .{ .cp = 0x1F9E, .start = 829, .len = 1 }, + .{ .cp = 0x1F9F, .start = 830, .len = 1 }, + .{ .cp = 0x1FA8, .start = 831, .len = 1 }, + .{ .cp = 0x1FA9, .start = 832, .len = 1 }, + .{ .cp = 0x1FAA, .start = 833, .len = 1 }, + .{ .cp = 0x1FAB, .start = 834, .len = 1 }, + .{ .cp = 0x1FAC, .start = 835, .len = 1 }, + .{ .cp = 0x1FAD, .start = 836, .len = 1 }, + .{ .cp = 0x1FAE, .start = 837, .len = 1 }, + .{ .cp = 0x1FAF, .start = 838, .len = 1 }, + .{ .cp = 0x1FB8, .start = 839, .len = 1 }, + .{ .cp = 0x1FB9, .start = 840, .len = 1 }, + .{ .cp = 0x1FBA, .start = 841, .len = 1 }, + .{ .cp = 0x1FBB, .start = 842, .len = 1 }, + .{ .cp = 0x1FBC, .start = 843, .len = 1 }, + .{ .cp = 0x1FC8, .start = 844, .len = 1 }, + .{ .cp = 0x1FC9, .start = 845, .len = 1 }, + .{ .cp = 0x1FCA, .start = 846, .len = 1 }, + .{ .cp = 0x1FCB, .start = 847, .len = 1 }, + .{ .cp = 0x1FCC, .start = 848, .len = 1 }, + .{ .cp = 0x1FD8, .start = 849, .len = 1 }, + .{ .cp = 0x1FD9, .start = 850, .len = 1 }, + .{ .cp = 0x1FDA, .start = 851, .len = 1 }, + .{ .cp = 0x1FDB, .start = 852, .len = 1 }, + .{ .cp = 0x1FE8, .start = 853, .len = 1 }, + .{ .cp = 0x1FE9, .start = 854, .len = 1 }, + .{ .cp = 0x1FEA, .start = 855, .len = 1 }, + .{ .cp = 0x1FEB, .start = 856, .len = 1 }, + .{ .cp = 0x1FEC, .start = 857, .len = 1 }, + .{ .cp = 0x1FF8, .start = 858, .len = 1 }, + .{ .cp = 0x1FF9, .start = 859, .len = 1 }, + .{ .cp = 0x1FFA, .start = 860, .len = 1 }, + .{ .cp = 0x1FFB, .start = 861, .len = 1 }, + .{ .cp = 0x1FFC, .start = 862, .len = 1 }, + .{ .cp = 0x2126, .start = 863, .len = 1 }, + .{ .cp = 0x212A, .start = 864, .len = 1 }, + .{ .cp = 0x212B, .start = 865, .len = 1 }, + .{ .cp = 0x2132, .start = 866, .len = 1 }, + .{ .cp = 0x2160, .start = 867, .len = 1 }, + .{ .cp = 0x2161, .start = 868, .len = 1 }, + .{ .cp = 0x2162, .start = 869, .len = 1 }, + .{ .cp = 0x2163, .start = 870, .len = 1 }, + .{ .cp = 0x2164, .start = 871, .len = 1 }, + .{ .cp = 0x2165, .start = 872, .len = 1 }, + .{ .cp = 0x2166, .start = 873, .len = 1 }, + .{ .cp = 0x2167, .start = 874, .len = 1 }, + .{ .cp = 0x2168, .start = 875, .len = 1 }, + .{ .cp = 0x2169, .start = 876, .len = 1 }, + .{ .cp = 0x216A, .start = 877, .len = 1 }, + .{ .cp = 0x216B, .start = 878, .len = 1 }, + .{ .cp = 0x216C, .start = 879, .len = 1 }, + .{ .cp = 0x216D, .start = 880, .len = 1 }, + .{ .cp = 0x216E, .start = 881, .len = 1 }, + .{ .cp = 0x216F, .start = 882, .len = 1 }, + .{ .cp = 0x2183, .start = 883, .len = 1 }, + .{ .cp = 0x24B6, .start = 884, .len = 1 }, + .{ .cp = 0x24B7, .start = 885, .len = 1 }, + .{ .cp = 0x24B8, .start = 886, .len = 1 }, + .{ .cp = 0x24B9, .start = 887, .len = 1 }, + .{ .cp = 0x24BA, .start = 888, .len = 1 }, + .{ .cp = 0x24BB, .start = 889, .len = 1 }, + .{ .cp = 0x24BC, .start = 890, .len = 1 }, + .{ .cp = 0x24BD, .start = 891, .len = 1 }, + .{ .cp = 0x24BE, .start = 892, .len = 1 }, + .{ .cp = 0x24BF, .start = 893, .len = 1 }, + .{ .cp = 0x24C0, .start = 894, .len = 1 }, + .{ .cp = 0x24C1, .start = 895, .len = 1 }, + .{ .cp = 0x24C2, .start = 896, .len = 1 }, + .{ .cp = 0x24C3, .start = 897, .len = 1 }, + .{ .cp = 0x24C4, .start = 898, .len = 1 }, + .{ .cp = 0x24C5, .start = 899, .len = 1 }, + .{ .cp = 0x24C6, .start = 900, .len = 1 }, + .{ .cp = 0x24C7, .start = 901, .len = 1 }, + .{ .cp = 0x24C8, .start = 902, .len = 1 }, + .{ .cp = 0x24C9, .start = 903, .len = 1 }, + .{ .cp = 0x24CA, .start = 904, .len = 1 }, + .{ .cp = 0x24CB, .start = 905, .len = 1 }, + .{ .cp = 0x24CC, .start = 906, .len = 1 }, + .{ .cp = 0x24CD, .start = 907, .len = 1 }, + .{ .cp = 0x24CE, .start = 908, .len = 1 }, + .{ .cp = 0x24CF, .start = 909, .len = 1 }, + .{ .cp = 0x2C00, .start = 910, .len = 1 }, + .{ .cp = 0x2C01, .start = 911, .len = 1 }, + .{ .cp = 0x2C02, .start = 912, .len = 1 }, + .{ .cp = 0x2C03, .start = 913, .len = 1 }, + .{ .cp = 0x2C04, .start = 914, .len = 1 }, + .{ .cp = 0x2C05, .start = 915, .len = 1 }, + .{ .cp = 0x2C06, .start = 916, .len = 1 }, + .{ .cp = 0x2C07, .start = 917, .len = 1 }, + .{ .cp = 0x2C08, .start = 918, .len = 1 }, + .{ .cp = 0x2C09, .start = 919, .len = 1 }, + .{ .cp = 0x2C0A, .start = 920, .len = 1 }, + .{ .cp = 0x2C0B, .start = 921, .len = 1 }, + .{ .cp = 0x2C0C, .start = 922, .len = 1 }, + .{ .cp = 0x2C0D, .start = 923, .len = 1 }, + .{ .cp = 0x2C0E, .start = 924, .len = 1 }, + .{ .cp = 0x2C0F, .start = 925, .len = 1 }, + .{ .cp = 0x2C10, .start = 926, .len = 1 }, + .{ .cp = 0x2C11, .start = 927, .len = 1 }, + .{ .cp = 0x2C12, .start = 928, .len = 1 }, + .{ .cp = 0x2C13, .start = 929, .len = 1 }, + .{ .cp = 0x2C14, .start = 930, .len = 1 }, + .{ .cp = 0x2C15, .start = 931, .len = 1 }, + .{ .cp = 0x2C16, .start = 932, .len = 1 }, + .{ .cp = 0x2C17, .start = 933, .len = 1 }, + .{ .cp = 0x2C18, .start = 934, .len = 1 }, + .{ .cp = 0x2C19, .start = 935, .len = 1 }, + .{ .cp = 0x2C1A, .start = 936, .len = 1 }, + .{ .cp = 0x2C1B, .start = 937, .len = 1 }, + .{ .cp = 0x2C1C, .start = 938, .len = 1 }, + .{ .cp = 0x2C1D, .start = 939, .len = 1 }, + .{ .cp = 0x2C1E, .start = 940, .len = 1 }, + .{ .cp = 0x2C1F, .start = 941, .len = 1 }, + .{ .cp = 0x2C20, .start = 942, .len = 1 }, + .{ .cp = 0x2C21, .start = 943, .len = 1 }, + .{ .cp = 0x2C22, .start = 944, .len = 1 }, + .{ .cp = 0x2C23, .start = 945, .len = 1 }, + .{ .cp = 0x2C24, .start = 946, .len = 1 }, + .{ .cp = 0x2C25, .start = 947, .len = 1 }, + .{ .cp = 0x2C26, .start = 948, .len = 1 }, + .{ .cp = 0x2C27, .start = 949, .len = 1 }, + .{ .cp = 0x2C28, .start = 950, .len = 1 }, + .{ .cp = 0x2C29, .start = 951, .len = 1 }, + .{ .cp = 0x2C2A, .start = 952, .len = 1 }, + .{ .cp = 0x2C2B, .start = 953, .len = 1 }, + .{ .cp = 0x2C2C, .start = 954, .len = 1 }, + .{ .cp = 0x2C2D, .start = 955, .len = 1 }, + .{ .cp = 0x2C2E, .start = 956, .len = 1 }, + .{ .cp = 0x2C2F, .start = 957, .len = 1 }, + .{ .cp = 0x2C60, .start = 958, .len = 1 }, + .{ .cp = 0x2C62, .start = 959, .len = 1 }, + .{ .cp = 0x2C63, .start = 960, .len = 1 }, + .{ .cp = 0x2C64, .start = 961, .len = 1 }, + .{ .cp = 0x2C67, .start = 962, .len = 1 }, + .{ .cp = 0x2C69, .start = 963, .len = 1 }, + .{ .cp = 0x2C6B, .start = 964, .len = 1 }, + .{ .cp = 0x2C6D, .start = 965, .len = 1 }, + .{ .cp = 0x2C6E, .start = 966, .len = 1 }, + .{ .cp = 0x2C6F, .start = 967, .len = 1 }, + .{ .cp = 0x2C70, .start = 968, .len = 1 }, + .{ .cp = 0x2C72, .start = 969, .len = 1 }, + .{ .cp = 0x2C75, .start = 970, .len = 1 }, + .{ .cp = 0x2C7E, .start = 971, .len = 1 }, + .{ .cp = 0x2C7F, .start = 972, .len = 1 }, + .{ .cp = 0x2C80, .start = 973, .len = 1 }, + .{ .cp = 0x2C82, .start = 974, .len = 1 }, + .{ .cp = 0x2C84, .start = 975, .len = 1 }, + .{ .cp = 0x2C86, .start = 976, .len = 1 }, + .{ .cp = 0x2C88, .start = 977, .len = 1 }, + .{ .cp = 0x2C8A, .start = 978, .len = 1 }, + .{ .cp = 0x2C8C, .start = 979, .len = 1 }, + .{ .cp = 0x2C8E, .start = 980, .len = 1 }, + .{ .cp = 0x2C90, .start = 981, .len = 1 }, + .{ .cp = 0x2C92, .start = 982, .len = 1 }, + .{ .cp = 0x2C94, .start = 983, .len = 1 }, + .{ .cp = 0x2C96, .start = 984, .len = 1 }, + .{ .cp = 0x2C98, .start = 985, .len = 1 }, + .{ .cp = 0x2C9A, .start = 986, .len = 1 }, + .{ .cp = 0x2C9C, .start = 987, .len = 1 }, + .{ .cp = 0x2C9E, .start = 988, .len = 1 }, + .{ .cp = 0x2CA0, .start = 989, .len = 1 }, + .{ .cp = 0x2CA2, .start = 990, .len = 1 }, + .{ .cp = 0x2CA4, .start = 991, .len = 1 }, + .{ .cp = 0x2CA6, .start = 992, .len = 1 }, + .{ .cp = 0x2CA8, .start = 993, .len = 1 }, + .{ .cp = 0x2CAA, .start = 994, .len = 1 }, + .{ .cp = 0x2CAC, .start = 995, .len = 1 }, + .{ .cp = 0x2CAE, .start = 996, .len = 1 }, + .{ .cp = 0x2CB0, .start = 997, .len = 1 }, + .{ .cp = 0x2CB2, .start = 998, .len = 1 }, + .{ .cp = 0x2CB4, .start = 999, .len = 1 }, + .{ .cp = 0x2CB6, .start = 1000, .len = 1 }, + .{ .cp = 0x2CB8, .start = 1001, .len = 1 }, + .{ .cp = 0x2CBA, .start = 1002, .len = 1 }, + .{ .cp = 0x2CBC, .start = 1003, .len = 1 }, + .{ .cp = 0x2CBE, .start = 1004, .len = 1 }, + .{ .cp = 0x2CC0, .start = 1005, .len = 1 }, + .{ .cp = 0x2CC2, .start = 1006, .len = 1 }, + .{ .cp = 0x2CC4, .start = 1007, .len = 1 }, + .{ .cp = 0x2CC6, .start = 1008, .len = 1 }, + .{ .cp = 0x2CC8, .start = 1009, .len = 1 }, + .{ .cp = 0x2CCA, .start = 1010, .len = 1 }, + .{ .cp = 0x2CCC, .start = 1011, .len = 1 }, + .{ .cp = 0x2CCE, .start = 1012, .len = 1 }, + .{ .cp = 0x2CD0, .start = 1013, .len = 1 }, + .{ .cp = 0x2CD2, .start = 1014, .len = 1 }, + .{ .cp = 0x2CD4, .start = 1015, .len = 1 }, + .{ .cp = 0x2CD6, .start = 1016, .len = 1 }, + .{ .cp = 0x2CD8, .start = 1017, .len = 1 }, + .{ .cp = 0x2CDA, .start = 1018, .len = 1 }, + .{ .cp = 0x2CDC, .start = 1019, .len = 1 }, + .{ .cp = 0x2CDE, .start = 1020, .len = 1 }, + .{ .cp = 0x2CE0, .start = 1021, .len = 1 }, + .{ .cp = 0x2CE2, .start = 1022, .len = 1 }, + .{ .cp = 0x2CEB, .start = 1023, .len = 1 }, + .{ .cp = 0x2CED, .start = 1024, .len = 1 }, + .{ .cp = 0x2CF2, .start = 1025, .len = 1 }, + .{ .cp = 0xA640, .start = 1026, .len = 1 }, + .{ .cp = 0xA642, .start = 1027, .len = 1 }, + .{ .cp = 0xA644, .start = 1028, .len = 1 }, + .{ .cp = 0xA646, .start = 1029, .len = 1 }, + .{ .cp = 0xA648, .start = 1030, .len = 1 }, + .{ .cp = 0xA64A, .start = 1031, .len = 1 }, + .{ .cp = 0xA64C, .start = 1032, .len = 1 }, + .{ .cp = 0xA64E, .start = 1033, .len = 1 }, + .{ .cp = 0xA650, .start = 1034, .len = 1 }, + .{ .cp = 0xA652, .start = 1035, .len = 1 }, + .{ .cp = 0xA654, .start = 1036, .len = 1 }, + .{ .cp = 0xA656, .start = 1037, .len = 1 }, + .{ .cp = 0xA658, .start = 1038, .len = 1 }, + .{ .cp = 0xA65A, .start = 1039, .len = 1 }, + .{ .cp = 0xA65C, .start = 1040, .len = 1 }, + .{ .cp = 0xA65E, .start = 1041, .len = 1 }, + .{ .cp = 0xA660, .start = 1042, .len = 1 }, + .{ .cp = 0xA662, .start = 1043, .len = 1 }, + .{ .cp = 0xA664, .start = 1044, .len = 1 }, + .{ .cp = 0xA666, .start = 1045, .len = 1 }, + .{ .cp = 0xA668, .start = 1046, .len = 1 }, + .{ .cp = 0xA66A, .start = 1047, .len = 1 }, + .{ .cp = 0xA66C, .start = 1048, .len = 1 }, + .{ .cp = 0xA680, .start = 1049, .len = 1 }, + .{ .cp = 0xA682, .start = 1050, .len = 1 }, + .{ .cp = 0xA684, .start = 1051, .len = 1 }, + .{ .cp = 0xA686, .start = 1052, .len = 1 }, + .{ .cp = 0xA688, .start = 1053, .len = 1 }, + .{ .cp = 0xA68A, .start = 1054, .len = 1 }, + .{ .cp = 0xA68C, .start = 1055, .len = 1 }, + .{ .cp = 0xA68E, .start = 1056, .len = 1 }, + .{ .cp = 0xA690, .start = 1057, .len = 1 }, + .{ .cp = 0xA692, .start = 1058, .len = 1 }, + .{ .cp = 0xA694, .start = 1059, .len = 1 }, + .{ .cp = 0xA696, .start = 1060, .len = 1 }, + .{ .cp = 0xA698, .start = 1061, .len = 1 }, + .{ .cp = 0xA69A, .start = 1062, .len = 1 }, + .{ .cp = 0xA722, .start = 1063, .len = 1 }, + .{ .cp = 0xA724, .start = 1064, .len = 1 }, + .{ .cp = 0xA726, .start = 1065, .len = 1 }, + .{ .cp = 0xA728, .start = 1066, .len = 1 }, + .{ .cp = 0xA72A, .start = 1067, .len = 1 }, + .{ .cp = 0xA72C, .start = 1068, .len = 1 }, + .{ .cp = 0xA72E, .start = 1069, .len = 1 }, + .{ .cp = 0xA732, .start = 1070, .len = 1 }, + .{ .cp = 0xA734, .start = 1071, .len = 1 }, + .{ .cp = 0xA736, .start = 1072, .len = 1 }, + .{ .cp = 0xA738, .start = 1073, .len = 1 }, + .{ .cp = 0xA73A, .start = 1074, .len = 1 }, + .{ .cp = 0xA73C, .start = 1075, .len = 1 }, + .{ .cp = 0xA73E, .start = 1076, .len = 1 }, + .{ .cp = 0xA740, .start = 1077, .len = 1 }, + .{ .cp = 0xA742, .start = 1078, .len = 1 }, + .{ .cp = 0xA744, .start = 1079, .len = 1 }, + .{ .cp = 0xA746, .start = 1080, .len = 1 }, + .{ .cp = 0xA748, .start = 1081, .len = 1 }, + .{ .cp = 0xA74A, .start = 1082, .len = 1 }, + .{ .cp = 0xA74C, .start = 1083, .len = 1 }, + .{ .cp = 0xA74E, .start = 1084, .len = 1 }, + .{ .cp = 0xA750, .start = 1085, .len = 1 }, + .{ .cp = 0xA752, .start = 1086, .len = 1 }, + .{ .cp = 0xA754, .start = 1087, .len = 1 }, + .{ .cp = 0xA756, .start = 1088, .len = 1 }, + .{ .cp = 0xA758, .start = 1089, .len = 1 }, + .{ .cp = 0xA75A, .start = 1090, .len = 1 }, + .{ .cp = 0xA75C, .start = 1091, .len = 1 }, + .{ .cp = 0xA75E, .start = 1092, .len = 1 }, + .{ .cp = 0xA760, .start = 1093, .len = 1 }, + .{ .cp = 0xA762, .start = 1094, .len = 1 }, + .{ .cp = 0xA764, .start = 1095, .len = 1 }, + .{ .cp = 0xA766, .start = 1096, .len = 1 }, + .{ .cp = 0xA768, .start = 1097, .len = 1 }, + .{ .cp = 0xA76A, .start = 1098, .len = 1 }, + .{ .cp = 0xA76C, .start = 1099, .len = 1 }, + .{ .cp = 0xA76E, .start = 1100, .len = 1 }, + .{ .cp = 0xA779, .start = 1101, .len = 1 }, + .{ .cp = 0xA77B, .start = 1102, .len = 1 }, + .{ .cp = 0xA77D, .start = 1103, .len = 1 }, + .{ .cp = 0xA77E, .start = 1104, .len = 1 }, + .{ .cp = 0xA780, .start = 1105, .len = 1 }, + .{ .cp = 0xA782, .start = 1106, .len = 1 }, + .{ .cp = 0xA784, .start = 1107, .len = 1 }, + .{ .cp = 0xA786, .start = 1108, .len = 1 }, + .{ .cp = 0xA78B, .start = 1109, .len = 1 }, + .{ .cp = 0xA78D, .start = 1110, .len = 1 }, + .{ .cp = 0xA790, .start = 1111, .len = 1 }, + .{ .cp = 0xA792, .start = 1112, .len = 1 }, + .{ .cp = 0xA796, .start = 1113, .len = 1 }, + .{ .cp = 0xA798, .start = 1114, .len = 1 }, + .{ .cp = 0xA79A, .start = 1115, .len = 1 }, + .{ .cp = 0xA79C, .start = 1116, .len = 1 }, + .{ .cp = 0xA79E, .start = 1117, .len = 1 }, + .{ .cp = 0xA7A0, .start = 1118, .len = 1 }, + .{ .cp = 0xA7A2, .start = 1119, .len = 1 }, + .{ .cp = 0xA7A4, .start = 1120, .len = 1 }, + .{ .cp = 0xA7A6, .start = 1121, .len = 1 }, + .{ .cp = 0xA7A8, .start = 1122, .len = 1 }, + .{ .cp = 0xA7AA, .start = 1123, .len = 1 }, + .{ .cp = 0xA7AB, .start = 1124, .len = 1 }, + .{ .cp = 0xA7AC, .start = 1125, .len = 1 }, + .{ .cp = 0xA7AD, .start = 1126, .len = 1 }, + .{ .cp = 0xA7AE, .start = 1127, .len = 1 }, + .{ .cp = 0xA7B0, .start = 1128, .len = 1 }, + .{ .cp = 0xA7B1, .start = 1129, .len = 1 }, + .{ .cp = 0xA7B2, .start = 1130, .len = 1 }, + .{ .cp = 0xA7B3, .start = 1131, .len = 1 }, + .{ .cp = 0xA7B4, .start = 1132, .len = 1 }, + .{ .cp = 0xA7B6, .start = 1133, .len = 1 }, + .{ .cp = 0xA7B8, .start = 1134, .len = 1 }, + .{ .cp = 0xA7BA, .start = 1135, .len = 1 }, + .{ .cp = 0xA7BC, .start = 1136, .len = 1 }, + .{ .cp = 0xA7BE, .start = 1137, .len = 1 }, + .{ .cp = 0xA7C0, .start = 1138, .len = 1 }, + .{ .cp = 0xA7C2, .start = 1139, .len = 1 }, + .{ .cp = 0xA7C4, .start = 1140, .len = 1 }, + .{ .cp = 0xA7C5, .start = 1141, .len = 1 }, + .{ .cp = 0xA7C6, .start = 1142, .len = 1 }, + .{ .cp = 0xA7C7, .start = 1143, .len = 1 }, + .{ .cp = 0xA7C9, .start = 1144, .len = 1 }, + .{ .cp = 0xA7CB, .start = 1145, .len = 1 }, + .{ .cp = 0xA7CC, .start = 1146, .len = 1 }, + .{ .cp = 0xA7D0, .start = 1147, .len = 1 }, + .{ .cp = 0xA7D6, .start = 1148, .len = 1 }, + .{ .cp = 0xA7D8, .start = 1149, .len = 1 }, + .{ .cp = 0xA7DA, .start = 1150, .len = 1 }, + .{ .cp = 0xA7DC, .start = 1151, .len = 1 }, + .{ .cp = 0xA7F5, .start = 1152, .len = 1 }, + .{ .cp = 0xFF21, .start = 1153, .len = 1 }, + .{ .cp = 0xFF22, .start = 1154, .len = 1 }, + .{ .cp = 0xFF23, .start = 1155, .len = 1 }, + .{ .cp = 0xFF24, .start = 1156, .len = 1 }, + .{ .cp = 0xFF25, .start = 1157, .len = 1 }, + .{ .cp = 0xFF26, .start = 1158, .len = 1 }, + .{ .cp = 0xFF27, .start = 1159, .len = 1 }, + .{ .cp = 0xFF28, .start = 1160, .len = 1 }, + .{ .cp = 0xFF29, .start = 1161, .len = 1 }, + .{ .cp = 0xFF2A, .start = 1162, .len = 1 }, + .{ .cp = 0xFF2B, .start = 1163, .len = 1 }, + .{ .cp = 0xFF2C, .start = 1164, .len = 1 }, + .{ .cp = 0xFF2D, .start = 1165, .len = 1 }, + .{ .cp = 0xFF2E, .start = 1166, .len = 1 }, + .{ .cp = 0xFF2F, .start = 1167, .len = 1 }, + .{ .cp = 0xFF30, .start = 1168, .len = 1 }, + .{ .cp = 0xFF31, .start = 1169, .len = 1 }, + .{ .cp = 0xFF32, .start = 1170, .len = 1 }, + .{ .cp = 0xFF33, .start = 1171, .len = 1 }, + .{ .cp = 0xFF34, .start = 1172, .len = 1 }, + .{ .cp = 0xFF35, .start = 1173, .len = 1 }, + .{ .cp = 0xFF36, .start = 1174, .len = 1 }, + .{ .cp = 0xFF37, .start = 1175, .len = 1 }, + .{ .cp = 0xFF38, .start = 1176, .len = 1 }, + .{ .cp = 0xFF39, .start = 1177, .len = 1 }, + .{ .cp = 0xFF3A, .start = 1178, .len = 1 }, + .{ .cp = 0x10400, .start = 1179, .len = 1 }, + .{ .cp = 0x10401, .start = 1180, .len = 1 }, + .{ .cp = 0x10402, .start = 1181, .len = 1 }, + .{ .cp = 0x10403, .start = 1182, .len = 1 }, + .{ .cp = 0x10404, .start = 1183, .len = 1 }, + .{ .cp = 0x10405, .start = 1184, .len = 1 }, + .{ .cp = 0x10406, .start = 1185, .len = 1 }, + .{ .cp = 0x10407, .start = 1186, .len = 1 }, + .{ .cp = 0x10408, .start = 1187, .len = 1 }, + .{ .cp = 0x10409, .start = 1188, .len = 1 }, + .{ .cp = 0x1040A, .start = 1189, .len = 1 }, + .{ .cp = 0x1040B, .start = 1190, .len = 1 }, + .{ .cp = 0x1040C, .start = 1191, .len = 1 }, + .{ .cp = 0x1040D, .start = 1192, .len = 1 }, + .{ .cp = 0x1040E, .start = 1193, .len = 1 }, + .{ .cp = 0x1040F, .start = 1194, .len = 1 }, + .{ .cp = 0x10410, .start = 1195, .len = 1 }, + .{ .cp = 0x10411, .start = 1196, .len = 1 }, + .{ .cp = 0x10412, .start = 1197, .len = 1 }, + .{ .cp = 0x10413, .start = 1198, .len = 1 }, + .{ .cp = 0x10414, .start = 1199, .len = 1 }, + .{ .cp = 0x10415, .start = 1200, .len = 1 }, + .{ .cp = 0x10416, .start = 1201, .len = 1 }, + .{ .cp = 0x10417, .start = 1202, .len = 1 }, + .{ .cp = 0x10418, .start = 1203, .len = 1 }, + .{ .cp = 0x10419, .start = 1204, .len = 1 }, + .{ .cp = 0x1041A, .start = 1205, .len = 1 }, + .{ .cp = 0x1041B, .start = 1206, .len = 1 }, + .{ .cp = 0x1041C, .start = 1207, .len = 1 }, + .{ .cp = 0x1041D, .start = 1208, .len = 1 }, + .{ .cp = 0x1041E, .start = 1209, .len = 1 }, + .{ .cp = 0x1041F, .start = 1210, .len = 1 }, + .{ .cp = 0x10420, .start = 1211, .len = 1 }, + .{ .cp = 0x10421, .start = 1212, .len = 1 }, + .{ .cp = 0x10422, .start = 1213, .len = 1 }, + .{ .cp = 0x10423, .start = 1214, .len = 1 }, + .{ .cp = 0x10424, .start = 1215, .len = 1 }, + .{ .cp = 0x10425, .start = 1216, .len = 1 }, + .{ .cp = 0x10426, .start = 1217, .len = 1 }, + .{ .cp = 0x10427, .start = 1218, .len = 1 }, + .{ .cp = 0x104B0, .start = 1219, .len = 1 }, + .{ .cp = 0x104B1, .start = 1220, .len = 1 }, + .{ .cp = 0x104B2, .start = 1221, .len = 1 }, + .{ .cp = 0x104B3, .start = 1222, .len = 1 }, + .{ .cp = 0x104B4, .start = 1223, .len = 1 }, + .{ .cp = 0x104B5, .start = 1224, .len = 1 }, + .{ .cp = 0x104B6, .start = 1225, .len = 1 }, + .{ .cp = 0x104B7, .start = 1226, .len = 1 }, + .{ .cp = 0x104B8, .start = 1227, .len = 1 }, + .{ .cp = 0x104B9, .start = 1228, .len = 1 }, + .{ .cp = 0x104BA, .start = 1229, .len = 1 }, + .{ .cp = 0x104BB, .start = 1230, .len = 1 }, + .{ .cp = 0x104BC, .start = 1231, .len = 1 }, + .{ .cp = 0x104BD, .start = 1232, .len = 1 }, + .{ .cp = 0x104BE, .start = 1233, .len = 1 }, + .{ .cp = 0x104BF, .start = 1234, .len = 1 }, + .{ .cp = 0x104C0, .start = 1235, .len = 1 }, + .{ .cp = 0x104C1, .start = 1236, .len = 1 }, + .{ .cp = 0x104C2, .start = 1237, .len = 1 }, + .{ .cp = 0x104C3, .start = 1238, .len = 1 }, + .{ .cp = 0x104C4, .start = 1239, .len = 1 }, + .{ .cp = 0x104C5, .start = 1240, .len = 1 }, + .{ .cp = 0x104C6, .start = 1241, .len = 1 }, + .{ .cp = 0x104C7, .start = 1242, .len = 1 }, + .{ .cp = 0x104C8, .start = 1243, .len = 1 }, + .{ .cp = 0x104C9, .start = 1244, .len = 1 }, + .{ .cp = 0x104CA, .start = 1245, .len = 1 }, + .{ .cp = 0x104CB, .start = 1246, .len = 1 }, + .{ .cp = 0x104CC, .start = 1247, .len = 1 }, + .{ .cp = 0x104CD, .start = 1248, .len = 1 }, + .{ .cp = 0x104CE, .start = 1249, .len = 1 }, + .{ .cp = 0x104CF, .start = 1250, .len = 1 }, + .{ .cp = 0x104D0, .start = 1251, .len = 1 }, + .{ .cp = 0x104D1, .start = 1252, .len = 1 }, + .{ .cp = 0x104D2, .start = 1253, .len = 1 }, + .{ .cp = 0x104D3, .start = 1254, .len = 1 }, + .{ .cp = 0x10570, .start = 1255, .len = 1 }, + .{ .cp = 0x10571, .start = 1256, .len = 1 }, + .{ .cp = 0x10572, .start = 1257, .len = 1 }, + .{ .cp = 0x10573, .start = 1258, .len = 1 }, + .{ .cp = 0x10574, .start = 1259, .len = 1 }, + .{ .cp = 0x10575, .start = 1260, .len = 1 }, + .{ .cp = 0x10576, .start = 1261, .len = 1 }, + .{ .cp = 0x10577, .start = 1262, .len = 1 }, + .{ .cp = 0x10578, .start = 1263, .len = 1 }, + .{ .cp = 0x10579, .start = 1264, .len = 1 }, + .{ .cp = 0x1057A, .start = 1265, .len = 1 }, + .{ .cp = 0x1057C, .start = 1266, .len = 1 }, + .{ .cp = 0x1057D, .start = 1267, .len = 1 }, + .{ .cp = 0x1057E, .start = 1268, .len = 1 }, + .{ .cp = 0x1057F, .start = 1269, .len = 1 }, + .{ .cp = 0x10580, .start = 1270, .len = 1 }, + .{ .cp = 0x10581, .start = 1271, .len = 1 }, + .{ .cp = 0x10582, .start = 1272, .len = 1 }, + .{ .cp = 0x10583, .start = 1273, .len = 1 }, + .{ .cp = 0x10584, .start = 1274, .len = 1 }, + .{ .cp = 0x10585, .start = 1275, .len = 1 }, + .{ .cp = 0x10586, .start = 1276, .len = 1 }, + .{ .cp = 0x10587, .start = 1277, .len = 1 }, + .{ .cp = 0x10588, .start = 1278, .len = 1 }, + .{ .cp = 0x10589, .start = 1279, .len = 1 }, + .{ .cp = 0x1058A, .start = 1280, .len = 1 }, + .{ .cp = 0x1058C, .start = 1281, .len = 1 }, + .{ .cp = 0x1058D, .start = 1282, .len = 1 }, + .{ .cp = 0x1058E, .start = 1283, .len = 1 }, + .{ .cp = 0x1058F, .start = 1284, .len = 1 }, + .{ .cp = 0x10590, .start = 1285, .len = 1 }, + .{ .cp = 0x10591, .start = 1286, .len = 1 }, + .{ .cp = 0x10592, .start = 1287, .len = 1 }, + .{ .cp = 0x10594, .start = 1288, .len = 1 }, + .{ .cp = 0x10595, .start = 1289, .len = 1 }, + .{ .cp = 0x10C80, .start = 1290, .len = 1 }, + .{ .cp = 0x10C81, .start = 1291, .len = 1 }, + .{ .cp = 0x10C82, .start = 1292, .len = 1 }, + .{ .cp = 0x10C83, .start = 1293, .len = 1 }, + .{ .cp = 0x10C84, .start = 1294, .len = 1 }, + .{ .cp = 0x10C85, .start = 1295, .len = 1 }, + .{ .cp = 0x10C86, .start = 1296, .len = 1 }, + .{ .cp = 0x10C87, .start = 1297, .len = 1 }, + .{ .cp = 0x10C88, .start = 1298, .len = 1 }, + .{ .cp = 0x10C89, .start = 1299, .len = 1 }, + .{ .cp = 0x10C8A, .start = 1300, .len = 1 }, + .{ .cp = 0x10C8B, .start = 1301, .len = 1 }, + .{ .cp = 0x10C8C, .start = 1302, .len = 1 }, + .{ .cp = 0x10C8D, .start = 1303, .len = 1 }, + .{ .cp = 0x10C8E, .start = 1304, .len = 1 }, + .{ .cp = 0x10C8F, .start = 1305, .len = 1 }, + .{ .cp = 0x10C90, .start = 1306, .len = 1 }, + .{ .cp = 0x10C91, .start = 1307, .len = 1 }, + .{ .cp = 0x10C92, .start = 1308, .len = 1 }, + .{ .cp = 0x10C93, .start = 1309, .len = 1 }, + .{ .cp = 0x10C94, .start = 1310, .len = 1 }, + .{ .cp = 0x10C95, .start = 1311, .len = 1 }, + .{ .cp = 0x10C96, .start = 1312, .len = 1 }, + .{ .cp = 0x10C97, .start = 1313, .len = 1 }, + .{ .cp = 0x10C98, .start = 1314, .len = 1 }, + .{ .cp = 0x10C99, .start = 1315, .len = 1 }, + .{ .cp = 0x10C9A, .start = 1316, .len = 1 }, + .{ .cp = 0x10C9B, .start = 1317, .len = 1 }, + .{ .cp = 0x10C9C, .start = 1318, .len = 1 }, + .{ .cp = 0x10C9D, .start = 1319, .len = 1 }, + .{ .cp = 0x10C9E, .start = 1320, .len = 1 }, + .{ .cp = 0x10C9F, .start = 1321, .len = 1 }, + .{ .cp = 0x10CA0, .start = 1322, .len = 1 }, + .{ .cp = 0x10CA1, .start = 1323, .len = 1 }, + .{ .cp = 0x10CA2, .start = 1324, .len = 1 }, + .{ .cp = 0x10CA3, .start = 1325, .len = 1 }, + .{ .cp = 0x10CA4, .start = 1326, .len = 1 }, + .{ .cp = 0x10CA5, .start = 1327, .len = 1 }, + .{ .cp = 0x10CA6, .start = 1328, .len = 1 }, + .{ .cp = 0x10CA7, .start = 1329, .len = 1 }, + .{ .cp = 0x10CA8, .start = 1330, .len = 1 }, + .{ .cp = 0x10CA9, .start = 1331, .len = 1 }, + .{ .cp = 0x10CAA, .start = 1332, .len = 1 }, + .{ .cp = 0x10CAB, .start = 1333, .len = 1 }, + .{ .cp = 0x10CAC, .start = 1334, .len = 1 }, + .{ .cp = 0x10CAD, .start = 1335, .len = 1 }, + .{ .cp = 0x10CAE, .start = 1336, .len = 1 }, + .{ .cp = 0x10CAF, .start = 1337, .len = 1 }, + .{ .cp = 0x10CB0, .start = 1338, .len = 1 }, + .{ .cp = 0x10CB1, .start = 1339, .len = 1 }, + .{ .cp = 0x10CB2, .start = 1340, .len = 1 }, + .{ .cp = 0x10D50, .start = 1341, .len = 1 }, + .{ .cp = 0x10D51, .start = 1342, .len = 1 }, + .{ .cp = 0x10D52, .start = 1343, .len = 1 }, + .{ .cp = 0x10D53, .start = 1344, .len = 1 }, + .{ .cp = 0x10D54, .start = 1345, .len = 1 }, + .{ .cp = 0x10D55, .start = 1346, .len = 1 }, + .{ .cp = 0x10D56, .start = 1347, .len = 1 }, + .{ .cp = 0x10D57, .start = 1348, .len = 1 }, + .{ .cp = 0x10D58, .start = 1349, .len = 1 }, + .{ .cp = 0x10D59, .start = 1350, .len = 1 }, + .{ .cp = 0x10D5A, .start = 1351, .len = 1 }, + .{ .cp = 0x10D5B, .start = 1352, .len = 1 }, + .{ .cp = 0x10D5C, .start = 1353, .len = 1 }, + .{ .cp = 0x10D5D, .start = 1354, .len = 1 }, + .{ .cp = 0x10D5E, .start = 1355, .len = 1 }, + .{ .cp = 0x10D5F, .start = 1356, .len = 1 }, + .{ .cp = 0x10D60, .start = 1357, .len = 1 }, + .{ .cp = 0x10D61, .start = 1358, .len = 1 }, + .{ .cp = 0x10D62, .start = 1359, .len = 1 }, + .{ .cp = 0x10D63, .start = 1360, .len = 1 }, + .{ .cp = 0x10D64, .start = 1361, .len = 1 }, + .{ .cp = 0x10D65, .start = 1362, .len = 1 }, + .{ .cp = 0x118A0, .start = 1363, .len = 1 }, + .{ .cp = 0x118A1, .start = 1364, .len = 1 }, + .{ .cp = 0x118A2, .start = 1365, .len = 1 }, + .{ .cp = 0x118A3, .start = 1366, .len = 1 }, + .{ .cp = 0x118A4, .start = 1367, .len = 1 }, + .{ .cp = 0x118A5, .start = 1368, .len = 1 }, + .{ .cp = 0x118A6, .start = 1369, .len = 1 }, + .{ .cp = 0x118A7, .start = 1370, .len = 1 }, + .{ .cp = 0x118A8, .start = 1371, .len = 1 }, + .{ .cp = 0x118A9, .start = 1372, .len = 1 }, + .{ .cp = 0x118AA, .start = 1373, .len = 1 }, + .{ .cp = 0x118AB, .start = 1374, .len = 1 }, + .{ .cp = 0x118AC, .start = 1375, .len = 1 }, + .{ .cp = 0x118AD, .start = 1376, .len = 1 }, + .{ .cp = 0x118AE, .start = 1377, .len = 1 }, + .{ .cp = 0x118AF, .start = 1378, .len = 1 }, + .{ .cp = 0x118B0, .start = 1379, .len = 1 }, + .{ .cp = 0x118B1, .start = 1380, .len = 1 }, + .{ .cp = 0x118B2, .start = 1381, .len = 1 }, + .{ .cp = 0x118B3, .start = 1382, .len = 1 }, + .{ .cp = 0x118B4, .start = 1383, .len = 1 }, + .{ .cp = 0x118B5, .start = 1384, .len = 1 }, + .{ .cp = 0x118B6, .start = 1385, .len = 1 }, + .{ .cp = 0x118B7, .start = 1386, .len = 1 }, + .{ .cp = 0x118B8, .start = 1387, .len = 1 }, + .{ .cp = 0x118B9, .start = 1388, .len = 1 }, + .{ .cp = 0x118BA, .start = 1389, .len = 1 }, + .{ .cp = 0x118BB, .start = 1390, .len = 1 }, + .{ .cp = 0x118BC, .start = 1391, .len = 1 }, + .{ .cp = 0x118BD, .start = 1392, .len = 1 }, + .{ .cp = 0x118BE, .start = 1393, .len = 1 }, + .{ .cp = 0x118BF, .start = 1394, .len = 1 }, + .{ .cp = 0x16E40, .start = 1395, .len = 1 }, + .{ .cp = 0x16E41, .start = 1396, .len = 1 }, + .{ .cp = 0x16E42, .start = 1397, .len = 1 }, + .{ .cp = 0x16E43, .start = 1398, .len = 1 }, + .{ .cp = 0x16E44, .start = 1399, .len = 1 }, + .{ .cp = 0x16E45, .start = 1400, .len = 1 }, + .{ .cp = 0x16E46, .start = 1401, .len = 1 }, + .{ .cp = 0x16E47, .start = 1402, .len = 1 }, + .{ .cp = 0x16E48, .start = 1403, .len = 1 }, + .{ .cp = 0x16E49, .start = 1404, .len = 1 }, + .{ .cp = 0x16E4A, .start = 1405, .len = 1 }, + .{ .cp = 0x16E4B, .start = 1406, .len = 1 }, + .{ .cp = 0x16E4C, .start = 1407, .len = 1 }, + .{ .cp = 0x16E4D, .start = 1408, .len = 1 }, + .{ .cp = 0x16E4E, .start = 1409, .len = 1 }, + .{ .cp = 0x16E4F, .start = 1410, .len = 1 }, + .{ .cp = 0x16E50, .start = 1411, .len = 1 }, + .{ .cp = 0x16E51, .start = 1412, .len = 1 }, + .{ .cp = 0x16E52, .start = 1413, .len = 1 }, + .{ .cp = 0x16E53, .start = 1414, .len = 1 }, + .{ .cp = 0x16E54, .start = 1415, .len = 1 }, + .{ .cp = 0x16E55, .start = 1416, .len = 1 }, + .{ .cp = 0x16E56, .start = 1417, .len = 1 }, + .{ .cp = 0x16E57, .start = 1418, .len = 1 }, + .{ .cp = 0x16E58, .start = 1419, .len = 1 }, + .{ .cp = 0x16E59, .start = 1420, .len = 1 }, + .{ .cp = 0x16E5A, .start = 1421, .len = 1 }, + .{ .cp = 0x16E5B, .start = 1422, .len = 1 }, + .{ .cp = 0x16E5C, .start = 1423, .len = 1 }, + .{ .cp = 0x16E5D, .start = 1424, .len = 1 }, + .{ .cp = 0x16E5E, .start = 1425, .len = 1 }, + .{ .cp = 0x16E5F, .start = 1426, .len = 1 }, + .{ .cp = 0x1E900, .start = 1427, .len = 1 }, + .{ .cp = 0x1E901, .start = 1428, .len = 1 }, + .{ .cp = 0x1E902, .start = 1429, .len = 1 }, + .{ .cp = 0x1E903, .start = 1430, .len = 1 }, + .{ .cp = 0x1E904, .start = 1431, .len = 1 }, + .{ .cp = 0x1E905, .start = 1432, .len = 1 }, + .{ .cp = 0x1E906, .start = 1433, .len = 1 }, + .{ .cp = 0x1E907, .start = 1434, .len = 1 }, + .{ .cp = 0x1E908, .start = 1435, .len = 1 }, + .{ .cp = 0x1E909, .start = 1436, .len = 1 }, + .{ .cp = 0x1E90A, .start = 1437, .len = 1 }, + .{ .cp = 0x1E90B, .start = 1438, .len = 1 }, + .{ .cp = 0x1E90C, .start = 1439, .len = 1 }, + .{ .cp = 0x1E90D, .start = 1440, .len = 1 }, + .{ .cp = 0x1E90E, .start = 1441, .len = 1 }, + .{ .cp = 0x1E90F, .start = 1442, .len = 1 }, + .{ .cp = 0x1E910, .start = 1443, .len = 1 }, + .{ .cp = 0x1E911, .start = 1444, .len = 1 }, + .{ .cp = 0x1E912, .start = 1445, .len = 1 }, + .{ .cp = 0x1E913, .start = 1446, .len = 1 }, + .{ .cp = 0x1E914, .start = 1447, .len = 1 }, + .{ .cp = 0x1E915, .start = 1448, .len = 1 }, + .{ .cp = 0x1E916, .start = 1449, .len = 1 }, + .{ .cp = 0x1E917, .start = 1450, .len = 1 }, + .{ .cp = 0x1E918, .start = 1451, .len = 1 }, + .{ .cp = 0x1E919, .start = 1452, .len = 1 }, + .{ .cp = 0x1E91A, .start = 1453, .len = 1 }, + .{ .cp = 0x1E91B, .start = 1454, .len = 1 }, + .{ .cp = 0x1E91C, .start = 1455, .len = 1 }, + .{ .cp = 0x1E91D, .start = 1456, .len = 1 }, + .{ .cp = 0x1E91E, .start = 1457, .len = 1 }, + .{ .cp = 0x1E91F, .start = 1458, .len = 1 }, + .{ .cp = 0x1E920, .start = 1459, .len = 1 }, + .{ .cp = 0x1E921, .start = 1460, .len = 1 }, +}; + +// Canonical combining class ranges [first, last, ccc], unicodedata 16.0.0. +pub const cccs = [_][3]u21{ + .{ 0x0300, 0x0314, 0x00E6 }, .{ 0x0315, 0x0315, 0x00E8 }, .{ 0x0316, 0x0319, 0x00DC }, .{ 0x031A, 0x031A, 0x00E8 }, + .{ 0x031B, 0x031B, 0x00D8 }, .{ 0x031C, 0x0320, 0x00DC }, .{ 0x0321, 0x0322, 0x00CA }, .{ 0x0323, 0x0326, 0x00DC }, + .{ 0x0327, 0x0328, 0x00CA }, .{ 0x0329, 0x0333, 0x00DC }, .{ 0x0334, 0x0338, 0x0001 }, .{ 0x0339, 0x033C, 0x00DC }, + .{ 0x033D, 0x0344, 0x00E6 }, .{ 0x0345, 0x0345, 0x00F0 }, .{ 0x0346, 0x0346, 0x00E6 }, .{ 0x0347, 0x0349, 0x00DC }, + .{ 0x034A, 0x034C, 0x00E6 }, .{ 0x034D, 0x034E, 0x00DC }, .{ 0x0350, 0x0352, 0x00E6 }, .{ 0x0353, 0x0356, 0x00DC }, + .{ 0x0357, 0x0357, 0x00E6 }, .{ 0x0358, 0x0358, 0x00E8 }, .{ 0x0359, 0x035A, 0x00DC }, .{ 0x035B, 0x035B, 0x00E6 }, + .{ 0x035C, 0x035C, 0x00E9 }, .{ 0x035D, 0x035E, 0x00EA }, .{ 0x035F, 0x035F, 0x00E9 }, .{ 0x0360, 0x0361, 0x00EA }, + .{ 0x0362, 0x0362, 0x00E9 }, .{ 0x0363, 0x036F, 0x00E6 }, .{ 0x0483, 0x0487, 0x00E6 }, .{ 0x0591, 0x0591, 0x00DC }, + .{ 0x0592, 0x0595, 0x00E6 }, .{ 0x0596, 0x0596, 0x00DC }, .{ 0x0597, 0x0599, 0x00E6 }, .{ 0x059A, 0x059A, 0x00DE }, + .{ 0x059B, 0x059B, 0x00DC }, .{ 0x059C, 0x05A1, 0x00E6 }, .{ 0x05A2, 0x05A7, 0x00DC }, .{ 0x05A8, 0x05A9, 0x00E6 }, + .{ 0x05AA, 0x05AA, 0x00DC }, .{ 0x05AB, 0x05AC, 0x00E6 }, .{ 0x05AD, 0x05AD, 0x00DE }, .{ 0x05AE, 0x05AE, 0x00E4 }, + .{ 0x05AF, 0x05AF, 0x00E6 }, .{ 0x05B0, 0x05B0, 0x000A }, .{ 0x05B1, 0x05B1, 0x000B }, .{ 0x05B2, 0x05B2, 0x000C }, + .{ 0x05B3, 0x05B3, 0x000D }, .{ 0x05B4, 0x05B4, 0x000E }, .{ 0x05B5, 0x05B5, 0x000F }, .{ 0x05B6, 0x05B6, 0x0010 }, + .{ 0x05B7, 0x05B7, 0x0011 }, .{ 0x05B8, 0x05B8, 0x0012 }, .{ 0x05B9, 0x05BA, 0x0013 }, .{ 0x05BB, 0x05BB, 0x0014 }, + .{ 0x05BC, 0x05BC, 0x0015 }, .{ 0x05BD, 0x05BD, 0x0016 }, .{ 0x05BF, 0x05BF, 0x0017 }, .{ 0x05C1, 0x05C1, 0x0018 }, + .{ 0x05C2, 0x05C2, 0x0019 }, .{ 0x05C4, 0x05C4, 0x00E6 }, .{ 0x05C5, 0x05C5, 0x00DC }, .{ 0x05C7, 0x05C7, 0x0012 }, + .{ 0x0610, 0x0617, 0x00E6 }, .{ 0x0618, 0x0618, 0x001E }, .{ 0x0619, 0x0619, 0x001F }, .{ 0x061A, 0x061A, 0x0020 }, + .{ 0x064B, 0x064B, 0x001B }, .{ 0x064C, 0x064C, 0x001C }, .{ 0x064D, 0x064D, 0x001D }, .{ 0x064E, 0x064E, 0x001E }, + .{ 0x064F, 0x064F, 0x001F }, .{ 0x0650, 0x0650, 0x0020 }, .{ 0x0651, 0x0651, 0x0021 }, .{ 0x0652, 0x0652, 0x0022 }, + .{ 0x0653, 0x0654, 0x00E6 }, .{ 0x0655, 0x0656, 0x00DC }, .{ 0x0657, 0x065B, 0x00E6 }, .{ 0x065C, 0x065C, 0x00DC }, + .{ 0x065D, 0x065E, 0x00E6 }, .{ 0x065F, 0x065F, 0x00DC }, .{ 0x0670, 0x0670, 0x0023 }, .{ 0x06D6, 0x06DC, 0x00E6 }, + .{ 0x06DF, 0x06E2, 0x00E6 }, .{ 0x06E3, 0x06E3, 0x00DC }, .{ 0x06E4, 0x06E4, 0x00E6 }, .{ 0x06E7, 0x06E8, 0x00E6 }, + .{ 0x06EA, 0x06EA, 0x00DC }, .{ 0x06EB, 0x06EC, 0x00E6 }, .{ 0x06ED, 0x06ED, 0x00DC }, .{ 0x0711, 0x0711, 0x0024 }, + .{ 0x0730, 0x0730, 0x00E6 }, .{ 0x0731, 0x0731, 0x00DC }, .{ 0x0732, 0x0733, 0x00E6 }, .{ 0x0734, 0x0734, 0x00DC }, + .{ 0x0735, 0x0736, 0x00E6 }, .{ 0x0737, 0x0739, 0x00DC }, .{ 0x073A, 0x073A, 0x00E6 }, .{ 0x073B, 0x073C, 0x00DC }, + .{ 0x073D, 0x073D, 0x00E6 }, .{ 0x073E, 0x073E, 0x00DC }, .{ 0x073F, 0x0741, 0x00E6 }, .{ 0x0742, 0x0742, 0x00DC }, + .{ 0x0743, 0x0743, 0x00E6 }, .{ 0x0744, 0x0744, 0x00DC }, .{ 0x0745, 0x0745, 0x00E6 }, .{ 0x0746, 0x0746, 0x00DC }, + .{ 0x0747, 0x0747, 0x00E6 }, .{ 0x0748, 0x0748, 0x00DC }, .{ 0x0749, 0x074A, 0x00E6 }, .{ 0x07EB, 0x07F1, 0x00E6 }, + .{ 0x07F2, 0x07F2, 0x00DC }, .{ 0x07F3, 0x07F3, 0x00E6 }, .{ 0x07FD, 0x07FD, 0x00DC }, .{ 0x0816, 0x0819, 0x00E6 }, + .{ 0x081B, 0x0823, 0x00E6 }, .{ 0x0825, 0x0827, 0x00E6 }, .{ 0x0829, 0x082D, 0x00E6 }, .{ 0x0859, 0x085B, 0x00DC }, + .{ 0x0897, 0x0898, 0x00E6 }, .{ 0x0899, 0x089B, 0x00DC }, .{ 0x089C, 0x089F, 0x00E6 }, .{ 0x08CA, 0x08CE, 0x00E6 }, + .{ 0x08CF, 0x08D3, 0x00DC }, .{ 0x08D4, 0x08E1, 0x00E6 }, .{ 0x08E3, 0x08E3, 0x00DC }, .{ 0x08E4, 0x08E5, 0x00E6 }, + .{ 0x08E6, 0x08E6, 0x00DC }, .{ 0x08E7, 0x08E8, 0x00E6 }, .{ 0x08E9, 0x08E9, 0x00DC }, .{ 0x08EA, 0x08EC, 0x00E6 }, + .{ 0x08ED, 0x08EF, 0x00DC }, .{ 0x08F0, 0x08F0, 0x001B }, .{ 0x08F1, 0x08F1, 0x001C }, .{ 0x08F2, 0x08F2, 0x001D }, + .{ 0x08F3, 0x08F5, 0x00E6 }, .{ 0x08F6, 0x08F6, 0x00DC }, .{ 0x08F7, 0x08F8, 0x00E6 }, .{ 0x08F9, 0x08FA, 0x00DC }, + .{ 0x08FB, 0x08FF, 0x00E6 }, .{ 0x093C, 0x093C, 0x0007 }, .{ 0x094D, 0x094D, 0x0009 }, .{ 0x0951, 0x0951, 0x00E6 }, + .{ 0x0952, 0x0952, 0x00DC }, .{ 0x0953, 0x0954, 0x00E6 }, .{ 0x09BC, 0x09BC, 0x0007 }, .{ 0x09CD, 0x09CD, 0x0009 }, + .{ 0x09FE, 0x09FE, 0x00E6 }, .{ 0x0A3C, 0x0A3C, 0x0007 }, .{ 0x0A4D, 0x0A4D, 0x0009 }, .{ 0x0ABC, 0x0ABC, 0x0007 }, + .{ 0x0ACD, 0x0ACD, 0x0009 }, .{ 0x0B3C, 0x0B3C, 0x0007 }, .{ 0x0B4D, 0x0B4D, 0x0009 }, .{ 0x0BCD, 0x0BCD, 0x0009 }, + .{ 0x0C3C, 0x0C3C, 0x0007 }, .{ 0x0C4D, 0x0C4D, 0x0009 }, .{ 0x0C55, 0x0C55, 0x0054 }, .{ 0x0C56, 0x0C56, 0x005B }, + .{ 0x0CBC, 0x0CBC, 0x0007 }, .{ 0x0CCD, 0x0CCD, 0x0009 }, .{ 0x0D3B, 0x0D3C, 0x0009 }, .{ 0x0D4D, 0x0D4D, 0x0009 }, + .{ 0x0DCA, 0x0DCA, 0x0009 }, .{ 0x0E38, 0x0E39, 0x0067 }, .{ 0x0E3A, 0x0E3A, 0x0009 }, .{ 0x0E48, 0x0E4B, 0x006B }, + .{ 0x0EB8, 0x0EB9, 0x0076 }, .{ 0x0EBA, 0x0EBA, 0x0009 }, .{ 0x0EC8, 0x0ECB, 0x007A }, .{ 0x0F18, 0x0F19, 0x00DC }, + .{ 0x0F35, 0x0F35, 0x00DC }, .{ 0x0F37, 0x0F37, 0x00DC }, .{ 0x0F39, 0x0F39, 0x00D8 }, .{ 0x0F71, 0x0F71, 0x0081 }, + .{ 0x0F72, 0x0F72, 0x0082 }, .{ 0x0F74, 0x0F74, 0x0084 }, .{ 0x0F7A, 0x0F7D, 0x0082 }, .{ 0x0F80, 0x0F80, 0x0082 }, + .{ 0x0F82, 0x0F83, 0x00E6 }, .{ 0x0F84, 0x0F84, 0x0009 }, .{ 0x0F86, 0x0F87, 0x00E6 }, .{ 0x0FC6, 0x0FC6, 0x00DC }, + .{ 0x1037, 0x1037, 0x0007 }, .{ 0x1039, 0x103A, 0x0009 }, .{ 0x108D, 0x108D, 0x00DC }, .{ 0x135D, 0x135F, 0x00E6 }, + .{ 0x1714, 0x1715, 0x0009 }, .{ 0x1734, 0x1734, 0x0009 }, .{ 0x17D2, 0x17D2, 0x0009 }, .{ 0x17DD, 0x17DD, 0x00E6 }, + .{ 0x18A9, 0x18A9, 0x00E4 }, .{ 0x1939, 0x1939, 0x00DE }, .{ 0x193A, 0x193A, 0x00E6 }, .{ 0x193B, 0x193B, 0x00DC }, + .{ 0x1A17, 0x1A17, 0x00E6 }, .{ 0x1A18, 0x1A18, 0x00DC }, .{ 0x1A60, 0x1A60, 0x0009 }, .{ 0x1A75, 0x1A7C, 0x00E6 }, + .{ 0x1A7F, 0x1A7F, 0x00DC }, .{ 0x1AB0, 0x1AB4, 0x00E6 }, .{ 0x1AB5, 0x1ABA, 0x00DC }, .{ 0x1ABB, 0x1ABC, 0x00E6 }, + .{ 0x1ABD, 0x1ABD, 0x00DC }, .{ 0x1ABF, 0x1AC0, 0x00DC }, .{ 0x1AC1, 0x1AC2, 0x00E6 }, .{ 0x1AC3, 0x1AC4, 0x00DC }, + .{ 0x1AC5, 0x1AC9, 0x00E6 }, .{ 0x1ACA, 0x1ACA, 0x00DC }, .{ 0x1ACB, 0x1ACE, 0x00E6 }, .{ 0x1B34, 0x1B34, 0x0007 }, + .{ 0x1B44, 0x1B44, 0x0009 }, .{ 0x1B6B, 0x1B6B, 0x00E6 }, .{ 0x1B6C, 0x1B6C, 0x00DC }, .{ 0x1B6D, 0x1B73, 0x00E6 }, + .{ 0x1BAA, 0x1BAB, 0x0009 }, .{ 0x1BE6, 0x1BE6, 0x0007 }, .{ 0x1BF2, 0x1BF3, 0x0009 }, .{ 0x1C37, 0x1C37, 0x0007 }, + .{ 0x1CD0, 0x1CD2, 0x00E6 }, .{ 0x1CD4, 0x1CD4, 0x0001 }, .{ 0x1CD5, 0x1CD9, 0x00DC }, .{ 0x1CDA, 0x1CDB, 0x00E6 }, + .{ 0x1CDC, 0x1CDF, 0x00DC }, .{ 0x1CE0, 0x1CE0, 0x00E6 }, .{ 0x1CE2, 0x1CE8, 0x0001 }, .{ 0x1CED, 0x1CED, 0x00DC }, + .{ 0x1CF4, 0x1CF4, 0x00E6 }, .{ 0x1CF8, 0x1CF9, 0x00E6 }, .{ 0x1DC0, 0x1DC1, 0x00E6 }, .{ 0x1DC2, 0x1DC2, 0x00DC }, + .{ 0x1DC3, 0x1DC9, 0x00E6 }, .{ 0x1DCA, 0x1DCA, 0x00DC }, .{ 0x1DCB, 0x1DCC, 0x00E6 }, .{ 0x1DCD, 0x1DCD, 0x00EA }, + .{ 0x1DCE, 0x1DCE, 0x00D6 }, .{ 0x1DCF, 0x1DCF, 0x00DC }, .{ 0x1DD0, 0x1DD0, 0x00CA }, .{ 0x1DD1, 0x1DF5, 0x00E6 }, + .{ 0x1DF6, 0x1DF6, 0x00E8 }, .{ 0x1DF7, 0x1DF8, 0x00E4 }, .{ 0x1DF9, 0x1DF9, 0x00DC }, .{ 0x1DFA, 0x1DFA, 0x00DA }, + .{ 0x1DFB, 0x1DFB, 0x00E6 }, .{ 0x1DFC, 0x1DFC, 0x00E9 }, .{ 0x1DFD, 0x1DFD, 0x00DC }, .{ 0x1DFE, 0x1DFE, 0x00E6 }, + .{ 0x1DFF, 0x1DFF, 0x00DC }, .{ 0x20D0, 0x20D1, 0x00E6 }, .{ 0x20D2, 0x20D3, 0x0001 }, .{ 0x20D4, 0x20D7, 0x00E6 }, + .{ 0x20D8, 0x20DA, 0x0001 }, .{ 0x20DB, 0x20DC, 0x00E6 }, .{ 0x20E1, 0x20E1, 0x00E6 }, .{ 0x20E5, 0x20E6, 0x0001 }, + .{ 0x20E7, 0x20E7, 0x00E6 }, .{ 0x20E8, 0x20E8, 0x00DC }, .{ 0x20E9, 0x20E9, 0x00E6 }, .{ 0x20EA, 0x20EB, 0x0001 }, + .{ 0x20EC, 0x20EF, 0x00DC }, .{ 0x20F0, 0x20F0, 0x00E6 }, .{ 0x2CEF, 0x2CF1, 0x00E6 }, .{ 0x2D7F, 0x2D7F, 0x0009 }, + .{ 0x2DE0, 0x2DFF, 0x00E6 }, .{ 0x302A, 0x302A, 0x00DA }, .{ 0x302B, 0x302B, 0x00E4 }, .{ 0x302C, 0x302C, 0x00E8 }, + .{ 0x302D, 0x302D, 0x00DE }, .{ 0x302E, 0x302F, 0x00E0 }, .{ 0x3099, 0x309A, 0x0008 }, .{ 0xA66F, 0xA66F, 0x00E6 }, + .{ 0xA674, 0xA67D, 0x00E6 }, .{ 0xA69E, 0xA69F, 0x00E6 }, .{ 0xA6F0, 0xA6F1, 0x00E6 }, .{ 0xA806, 0xA806, 0x0009 }, + .{ 0xA82C, 0xA82C, 0x0009 }, .{ 0xA8C4, 0xA8C4, 0x0009 }, .{ 0xA8E0, 0xA8F1, 0x00E6 }, .{ 0xA92B, 0xA92D, 0x00DC }, + .{ 0xA953, 0xA953, 0x0009 }, .{ 0xA9B3, 0xA9B3, 0x0007 }, .{ 0xA9C0, 0xA9C0, 0x0009 }, .{ 0xAAB0, 0xAAB0, 0x00E6 }, + .{ 0xAAB2, 0xAAB3, 0x00E6 }, .{ 0xAAB4, 0xAAB4, 0x00DC }, .{ 0xAAB7, 0xAAB8, 0x00E6 }, .{ 0xAABE, 0xAABF, 0x00E6 }, + .{ 0xAAC1, 0xAAC1, 0x00E6 }, .{ 0xAAF6, 0xAAF6, 0x0009 }, .{ 0xABED, 0xABED, 0x0009 }, .{ 0xFB1E, 0xFB1E, 0x001A }, + .{ 0xFE20, 0xFE26, 0x00E6 }, .{ 0xFE27, 0xFE2D, 0x00DC }, .{ 0xFE2E, 0xFE2F, 0x00E6 }, .{ 0x101FD, 0x101FD, 0x00DC }, + .{ 0x102E0, 0x102E0, 0x00DC }, .{ 0x10376, 0x1037A, 0x00E6 }, .{ 0x10A0D, 0x10A0D, 0x00DC }, .{ 0x10A0F, 0x10A0F, 0x00E6 }, + .{ 0x10A38, 0x10A38, 0x00E6 }, .{ 0x10A39, 0x10A39, 0x0001 }, .{ 0x10A3A, 0x10A3A, 0x00DC }, .{ 0x10A3F, 0x10A3F, 0x0009 }, + .{ 0x10AE5, 0x10AE5, 0x00E6 }, .{ 0x10AE6, 0x10AE6, 0x00DC }, .{ 0x10D24, 0x10D27, 0x00E6 }, .{ 0x10D69, 0x10D6D, 0x00E6 }, + .{ 0x10EAB, 0x10EAC, 0x00E6 }, .{ 0x10EFD, 0x10EFF, 0x00DC }, .{ 0x10F46, 0x10F47, 0x00DC }, .{ 0x10F48, 0x10F4A, 0x00E6 }, + .{ 0x10F4B, 0x10F4B, 0x00DC }, .{ 0x10F4C, 0x10F4C, 0x00E6 }, .{ 0x10F4D, 0x10F50, 0x00DC }, .{ 0x10F82, 0x10F82, 0x00E6 }, + .{ 0x10F83, 0x10F83, 0x00DC }, .{ 0x10F84, 0x10F84, 0x00E6 }, .{ 0x10F85, 0x10F85, 0x00DC }, .{ 0x11046, 0x11046, 0x0009 }, + .{ 0x11070, 0x11070, 0x0009 }, .{ 0x1107F, 0x1107F, 0x0009 }, .{ 0x110B9, 0x110B9, 0x0009 }, .{ 0x110BA, 0x110BA, 0x0007 }, + .{ 0x11100, 0x11102, 0x00E6 }, .{ 0x11133, 0x11134, 0x0009 }, .{ 0x11173, 0x11173, 0x0007 }, .{ 0x111C0, 0x111C0, 0x0009 }, + .{ 0x111CA, 0x111CA, 0x0007 }, .{ 0x11235, 0x11235, 0x0009 }, .{ 0x11236, 0x11236, 0x0007 }, .{ 0x112E9, 0x112E9, 0x0007 }, + .{ 0x112EA, 0x112EA, 0x0009 }, .{ 0x1133B, 0x1133C, 0x0007 }, .{ 0x1134D, 0x1134D, 0x0009 }, .{ 0x11366, 0x1136C, 0x00E6 }, + .{ 0x11370, 0x11374, 0x00E6 }, .{ 0x113CE, 0x113D0, 0x0009 }, .{ 0x11442, 0x11442, 0x0009 }, .{ 0x11446, 0x11446, 0x0007 }, + .{ 0x1145E, 0x1145E, 0x00E6 }, .{ 0x114C2, 0x114C2, 0x0009 }, .{ 0x114C3, 0x114C3, 0x0007 }, .{ 0x115BF, 0x115BF, 0x0009 }, + .{ 0x115C0, 0x115C0, 0x0007 }, .{ 0x1163F, 0x1163F, 0x0009 }, .{ 0x116B6, 0x116B6, 0x0009 }, .{ 0x116B7, 0x116B7, 0x0007 }, + .{ 0x1172B, 0x1172B, 0x0009 }, .{ 0x11839, 0x11839, 0x0009 }, .{ 0x1183A, 0x1183A, 0x0007 }, .{ 0x1193D, 0x1193E, 0x0009 }, + .{ 0x11943, 0x11943, 0x0007 }, .{ 0x119E0, 0x119E0, 0x0009 }, .{ 0x11A34, 0x11A34, 0x0009 }, .{ 0x11A47, 0x11A47, 0x0009 }, + .{ 0x11A99, 0x11A99, 0x0009 }, .{ 0x11C3F, 0x11C3F, 0x0009 }, .{ 0x11D42, 0x11D42, 0x0007 }, .{ 0x11D44, 0x11D45, 0x0009 }, + .{ 0x11D97, 0x11D97, 0x0009 }, .{ 0x11F41, 0x11F42, 0x0009 }, .{ 0x1612F, 0x1612F, 0x0009 }, .{ 0x16AF0, 0x16AF4, 0x0001 }, + .{ 0x16B30, 0x16B36, 0x00E6 }, .{ 0x16FF0, 0x16FF1, 0x0006 }, .{ 0x1BC9E, 0x1BC9E, 0x0001 }, .{ 0x1D165, 0x1D166, 0x00D8 }, + .{ 0x1D167, 0x1D169, 0x0001 }, .{ 0x1D16D, 0x1D16D, 0x00E2 }, .{ 0x1D16E, 0x1D172, 0x00D8 }, .{ 0x1D17B, 0x1D182, 0x00DC }, + .{ 0x1D185, 0x1D189, 0x00E6 }, .{ 0x1D18A, 0x1D18B, 0x00DC }, .{ 0x1D1AA, 0x1D1AD, 0x00E6 }, .{ 0x1D242, 0x1D244, 0x00E6 }, + .{ 0x1E000, 0x1E006, 0x00E6 }, .{ 0x1E008, 0x1E018, 0x00E6 }, .{ 0x1E01B, 0x1E021, 0x00E6 }, .{ 0x1E023, 0x1E024, 0x00E6 }, + .{ 0x1E026, 0x1E02A, 0x00E6 }, .{ 0x1E08F, 0x1E08F, 0x00E6 }, .{ 0x1E130, 0x1E136, 0x00E6 }, .{ 0x1E2AE, 0x1E2AE, 0x00E6 }, + .{ 0x1E2EC, 0x1E2EF, 0x00E6 }, .{ 0x1E4EC, 0x1E4ED, 0x00E8 }, .{ 0x1E4EE, 0x1E4EE, 0x00DC }, .{ 0x1E4EF, 0x1E4EF, 0x00E6 }, + .{ 0x1E5EE, 0x1E5EE, 0x00E6 }, .{ 0x1E5EF, 0x1E5EF, 0x00DC }, .{ 0x1E8D0, 0x1E8D6, 0x00DC }, .{ 0x1E944, 0x1E949, 0x00E6 }, + .{ 0x1E94A, 0x1E94A, 0x0007 }, +}; diff --git a/zig/src/families/deepseek_v41/attention.zig b/zig/src/families/deepseek_v41/attention.zig new file mode 100644 index 0000000000..7a3199f401 --- /dev/null +++ b/zig/src/families/deepseek_v41/attention.zig @@ -0,0 +1,273 @@ +//! Pinned DeepSeek V4.1 attention, resident EXL3 projections and causal packed-cache chunk execution. +const mtl = @import("metal"); +const exl3 = @import("../../core/exl3_projection.zig"); +const checkpoint = @import("../../core/checkpoint_metal.zig"); +const weights = @import("weights.zig"); +const config = @import("config.zig"); +const ops = @import("ops.zig"); +const csa2 = @import("csa2.zig"); +const kv = @import("kv.zig"); +const index = @import("csa2_index.zig"); +const rope = @import("rope.zig"); +pub const View = @import("view.zig").View; +pub const State = kv.cache.State; + +/// Opt-in bounded intermediate capture; ordinary execution does not install an observer. +pub const DiagnosticStage = enum { + qr_projection, + qr_norm, + q_projection, + q, + kv_projection, + kv_norm, + kv_rope, + kv_quantized, + sparse_o, + o, + grouped, + wo_b, +}; +pub const DiagnosticObserver = struct { + ctx: *anyopaque, + capture: *const fn (*anyopaque, mtl.ComputeEncoder, DiagnosticStage, View) anyerror!void, + + fn observe(comptime enabled: bool, self: ?DiagnosticObserver, e: mtl.ComputeEncoder, stage: DiagnosticStage, source: View) !void { + if (enabled) if (self) |observer| try observer.capture(observer.ctx, e, stage, source); + } +}; + +pub const Pipelines = struct { + plain: ops.Pipelines, + cache: kv.Pipelines, + select: index.Pipelines, + rotary: rope.Pipelines, + sparse: csa2.Pipelines, + + pub fn load(device: mtl.Device, capacity: u32, c: config.Text) !Pipelines { + var plain = try ops.Pipelines.load(device); + errdefer plain.deinit(); + var cache = try kv.Pipelines.load(device); + errdefer cache.deinit(); + var select = try index.Pipelines.load(device); + errdefer select.deinit(); + var rotary = try rope.Pipelines.load(device, capacity, c.qk_rope_head_dim, .{ .theta = c.rope_theta, .original = 0 }, .{ .theta = c.compress_rope_theta, .factor = c.rope_scaling.factor, .original = c.rope_scaling.original_max_position_embeddings, .beta_fast = c.rope_scaling.beta_fast, .beta_slow = c.rope_scaling.beta_slow }); + errdefer rotary.deinit(); + const sparse = try csa2.Pipelines.load(device); + return .{ .plain = plain, .cache = cache, .select = select, .rotary = rotary, .sparse = sparse }; + } + pub fn residentBytes(capacity: u32, c: config.Text) usize { + return rope.Pipelines.residentBytes(capacity, c.qk_rope_head_dim); + } + pub fn registerResidency(p: *const Pipelines, set: mtl.ResidencySet) void { + p.rotary.registerResidency(set); + } + pub fn deinit(p: *Pipelines) void { + p.plain.deinit(); + p.cache.deinit(); + p.select.deinit(); + p.rotary.deinit(); + p.sparse.deinit(); + } +}; + +// Row-sized regions never contain dequantized weights or a query-by-context tensor. +const regions = [_]usize{ 1280 * 2, 32768 * 2, 512 * 2, 512 * 4, 512 * 4, 512 * 2, 128 * 2, 4096 * 2, 32 * 2, 8192 * 2 }; +const Region = enum(usize) { qr, query, raw_kv, values, gates, latent, index_k, index_q, index_weights, grouped }; + +pub const Workspace = struct { + buffer: mtl.Buffer, + selection: index.Scratch, + max_rows: u32, + selection_layer: ?u32 = null, + selection_position: u32 = 0, + selection_rows: u32 = 0, + candidate_position: u32 = 0, + candidate_rows: u32 = 0, + + pub fn bytes(max_rows: u32) usize { + var per_row: usize = 0; + for (regions) |size| per_row += size; + return @as(usize, max_rows) * per_row + index.Scratch.bytes(max_rows); + } + pub fn init(device: mtl.Device, max_rows: u32) !Workspace { + if (max_rows == 0 or max_rows > 4096) return error.InvalidAttentionWorkspace; + const buffer = try device.buffer(bytes(max_rows) - index.Scratch.bytes(max_rows), mtl.ResourceOptions.shared | mtl.ResourceOptions.untracked); + errdefer buffer.deinit(); + const selection = try index.Scratch.init(device, max_rows); + return .{ .buffer = buffer, .selection = selection, .max_rows = max_rows }; + } + pub fn deinit(w: *Workspace) void { + w.buffer.deinit(); + w.selection.deinit(); + } + pub fn residentBytes(w: *const Workspace) usize { + return bytes(w.max_rows); + } + pub fn registerResidency(w: *const Workspace, set: mtl.ResidencySet) void { + set.add(w.buffer); + set.add(w.selection.buffer); + } + fn view(w: *const Workspace, region: Region) View { + var offset: usize = 0; + for (regions[0..@backingInt(region)]) |size| offset += size * w.max_rows; + return .{ .buffer = w.buffer, .offset = offset }; + } +}; + +fn tensor(t: checkpoint.Tensor) View { + return .{ .buffer = t.buffer, .offset = t.offset }; +} +fn core(v: View) exl3.View { + return .{ .buffer = v.buffer, .offset = v.offset }; +} +fn projection(p: *const exl3.Pipelines, e: mtl.ComputeEncoder, m: weights.AnyMatrix, x: View, y: View, scratch: exl3.View, rows: u32, xs: u32, ys: u32, output: exl3.Output) !void { + switch (m) { + .trellis => |t| try exl3.encode(p, e, t, core(x), core(y), scratch, .{ .count = rows, .x_stride = xs, .y_stride = ys, .output = output }), + // A kept-dense repack: the same rotate stages, the middle a plain dense product. + .dense => |d| try exl3.encodeDense(p, e, .{ + .weight = core(tensor(d.weight)), + .suh = core(tensor(d.suh)), + .svh = core(tensor(d.svh)), + .k = d.k, + .n = d.n, + }, core(x), core(y), scratch, .{ .count = rows, .x_stride = xs, .y_stride = ys, .output = output }), + } +} +fn norm(p: *const Pipelines, e: mtl.ComputeEncoder, x: View, weight: checkpoint.Tensor, rows: u32, width: u32, eps: f32) void { + ops.encodeRms(e, &p.plain, x, tensor(weight), x, .{ .rows = rows, .width = width, .x_stride = width, .y_stride = width, .eps = eps, .weight_f32 = weight.dtype == .f32 }); + e.barrier(); +} +fn rotate(p: *const Pipelines, e: mtl.ComputeEncoder, x: View, rows: u32, heads: u32, width: u32, position: u32, ratio: u32, step: u32, inverse: bool, c: config.Text) !void { + try p.rotary.encode(e, x, .{ .rows = rows, .heads = heads, .width = width, .rotary = c.qk_rope_head_dim, .stride = heads * width, .position = position, .step = step, .inverse = @intFromBool(inverse), .spectrum = if (ratio == 0) .normal else .compressed }); +} +fn precedingIndex(layer: u32) u32 { + var source: u32 = 2; + for (kv.cache.index_sources) |id| { + if (id > layer) break; + source = id; + } + return source; +} + +/// BF16 x/y [rows,5120]; layers 0..39 share the chunk-start cursor, appended by the caller after all layers. + +// No extra RMS after wq_b or index-query Hadamard outside EXL3. +pub fn encode(p: *const Pipelines, e: mtl.ComputeEncoder, w: *const weights.Attention, state: *State, work: *Workspace, x: View, y: View, ep: *const exl3.Pipelines, scratch: exl3.View, layer: u32, rows: u32, c: config.Text) !void { + return encodeDiagnostic(p, e, w, state, work, x, y, ep, scratch, layer, rows, c, false, null); +} + +/// Same encoder and arithmetic as encode, with optional copies at operator boundaries. +pub fn encodeDiagnostic(p: *const Pipelines, e: mtl.ComputeEncoder, w: *const weights.Attention, state: *State, work: *Workspace, x: View, y: View, ep: *const exl3.Pipelines, scratch: exl3.View, layer: u32, rows: u32, c: config.Text, comptime diagnostic: bool, observer: ?DiagnosticObserver) !void { + if (layer >= 40 or rows == 0 or rows > work.max_rows or + state.position > state.plan.capacity or rows > state.plan.capacity - state.position) + return error.InvalidAttentionChunk; + const position = state.position; + const ratio = c.compress_ratios[layer]; + const end = position + rows; + const q_width = c.num_attention_heads * c.head_dim; + const qr = work.view(.qr); + const q = work.view(.query); + const raw = work.view(.raw_kv); + const ring = try state.ring(layer); + const chunk = work.selection.windowChunk(); + e.barrier(); + try projection(ep, e, .{ .trellis = w.wq_a }, x, qr, scratch, rows, c.hidden_size, c.q_lora_rank, .bf16); + if (diagnostic) try DiagnosticObserver.observe(true, observer, e, .qr_projection, qr); + norm(p, e, qr, w.q_norm, rows, c.q_lora_rank, c.rms_norm_eps); + if (diagnostic) try DiagnosticObserver.observe(true, observer, e, .qr_norm, qr); + try projection(ep, e, .{ .trellis = w.wq_b }, qr, q, scratch, rows, c.q_lora_rank, q_width, .bf16); + if (diagnostic) try DiagnosticObserver.observe(true, observer, e, .q_projection, q); + try rotate(p, e, q, rows, c.num_attention_heads, c.head_dim, position, ratio, 1, false, c); + if (diagnostic) try DiagnosticObserver.observe(true, observer, e, .q, q); + try projection(ep, e, .{ .trellis = w.wkv }, x, raw, scratch, rows, c.hidden_size, c.head_dim, .bf16); + if (diagnostic) try DiagnosticObserver.observe(true, observer, e, .kv_projection, raw); + norm(p, e, raw, w.kv_norm, rows, c.head_dim, c.rms_norm_eps); + if (diagnostic) try DiagnosticObserver.observe(true, observer, e, .kv_norm, raw); + try rotate(p, e, raw, rows, 1, c.head_dim, position, ratio, 1, false, c); + if (diagnostic) try DiagnosticObserver.observe(true, observer, e, .kv_rope, raw); + try p.cache.encodePack(e, raw, chunk, .{ .rows = rows, .width = c.head_dim, .stride = c.head_dim, .packed_stride = kv.cache.ring_stride, .block = 32, .kind = .window_fp8 }); + if (diagnostic) try DiagnosticObserver.observe(true, observer, e, .kv_quantized, chunk); + + var main = chunk; + var compressed_rows: u32 = 0; + if (ratio != 0) { + const source = try state.source(layer, ratio); + main = source.main; + compressed_rows = end / ratio; + const complete = compressed_rows - position / ratio; + const latent = work.view(.latent); + if (source.owner == layer) { + const compressor = if (w.compressor) |*value| value else return error.MissingAttentionCompressor; + const output: exl3.Output = if (ratio == 1) .bf16 else .f32; + const values = work.view(.values); + const gates = work.view(.gates); + try projection(ep, e, compressor.wkv, x, values, scratch, rows, c.hidden_size, c.head_dim, output); + if (ratio > 1) { + const gate = compressor.wgate orelse return error.MissingAttentionCompressorGate; + try projection(ep, e, gate, x, gates, scratch, rows, c.hidden_size, c.head_dim, .f32); + } + try p.cache.encodePool(e, values, gates, source.partial, tensor(compressor.norm), latent, .{ .rows = rows, .ratio = ratio, .position = position, .stride = c.head_dim, .input_f32 = @intFromBool(ratio > 1), .eps = c.rms_norm_eps }); + if (complete != 0) { + const selector = if (w.indexer) |*value| value else return error.MissingAttentionIndexer; + const wk = selector.wk orelse return error.MissingAttentionIndexKeyProjection; + const k_norm = selector.k_norm orelse return error.MissingAttentionIndexKeyNorm; + const key = work.view(.index_k); + try projection(ep, e, wk, latent, key, scratch, complete, c.head_dim, c.index_head_dim, .bf16); + norm(p, e, key, k_norm, complete, c.index_head_dim, c.rms_norm_eps); + try rotate(p, e, key, complete, 1, c.index_head_dim, position / ratio * ratio, ratio, ratio, false, c); + try p.cache.encodePack(e, key, source.index, .{ .rows = complete, .width = c.index_head_dim, .stride = c.index_head_dim, .packed_stride = kv.cache.index_stride, .block = 32, .kind = .index_fp4, .first = position / ratio }); + } + } + if (kv.cache.isIndexSource(layer)) { + const selector = if (w.indexer) |*value| value else return error.MissingAttentionIndexer; + const iq = work.view(.index_q); + const iw = work.view(.index_weights); + const iq_width = c.index_n_heads * c.index_head_dim; + if (compressed_rows != 0) { + try projection(ep, e, selector.wq_b, qr, iq, scratch, rows, c.q_lora_rank, iq_width, .bf16); + try rotate(p, e, iq, rows, c.index_n_heads, c.index_head_dim, position, ratio, 1, false, c); + try p.cache.encodePack(e, iq, work.selection.queryPacked(), .{ .rows = rows * c.index_n_heads, .width = c.index_head_dim, .stride = c.index_head_dim, .packed_stride = kv.cache.index_stride, .block = 32, .kind = .index_fp4, .inplace = 1 }); + ops.encodeDense(e, &p.plain, x, tensor(selector.weights_proj), iw, .{ .rows = rows, .k = c.hidden_size, .n = c.index_n_heads, .x_stride = c.hidden_size, .w_stride = c.hidden_size, .y_stride = c.index_n_heads, .w_dtype = switch (selector.weights_proj.dtype) { + .bf16 => .bf16, + .f16 => .f16, + .f32 => .f32, + else => unreachable, + } }); + e.barrier(); + } + const make_candidates = layer == c.candidate_source_layer_id; + const use_candidates = layer > c.candidate_source_layer_id; + if (use_candidates and (work.candidate_position != position or work.candidate_rows != rows)) + return error.MissingAttentionCandidates; + try p.select.encode(e, iq, iw, source.index, work.selection, .{ .rows = rows, .q_stride = iq_width, .weight_stride = c.index_n_heads, .position = position, .ratio = ratio, .keys = compressed_rows, .make_candidates = @intFromBool(make_candidates), .use_candidates = @intFromBool(use_candidates) }); + work.selection_layer = layer; + work.selection_position = position; + work.selection_rows = rows; + if (make_candidates) { + work.candidate_position = position; + work.candidate_rows = rows; + } + } else if (work.selection_layer != precedingIndex(layer) or + work.selection_position != position or work.selection_rows != rows) return error.MissingAttentionSelection; + // Index K consumes the normalized latent before this in-place RoPE mutates it. + if (source.owner == layer and complete != 0) { + try rotate(p, e, latent, complete, 1, c.head_dim, position / ratio * ratio, ratio, ratio, false, c); + try p.cache.encodePack(e, latent, source.main, .{ .rows = complete, .width = c.head_dim, .stride = c.head_dim, .packed_stride = kv.cache.main_stride, .block = 16, .kind = .main_fp4, .first = position / ratio }); + } + } + try p.sparse.encode(e, q, ring, chunk, main, work.selection.positions(), tensor(w.sink), q, .{ .rows = rows, .q_stride = q_width, .position = position, .chunk_rows = rows, .ratio = ratio, .compressed_rows = compressed_rows, .topk = @min(c.index_topk, compressed_rows) }); + e.barrier(); + if (diagnostic) try DiagnosticObserver.observe(true, observer, e, .sparse_o, q); + try p.cache.publishWindow(e, chunk, ring, rows, position); + try rotate(p, e, q, rows, c.num_attention_heads, c.head_dim, position, ratio, 1, true, c); + if (diagnostic) try DiagnosticObserver.observe(true, observer, e, .o, q); + const grouped = work.view(.grouped); + const group_input = q_width / c.o_groups; + const group_output = c.o_groups * c.o_lora_rank; + for (w.wo_a, 0..) |matrix, group| { + try projection(ep, e, .{ .trellis = matrix }, q.shifted(group * group_input * 2), grouped.shifted(group * c.o_lora_rank * 2), scratch, rows, q_width, group_output, .bf16); + } + if (diagnostic) try DiagnosticObserver.observe(true, observer, e, .grouped, grouped); + try projection(ep, e, .{ .trellis = w.wo_b }, grouped, y, scratch, rows, group_output, c.hidden_size, .bf16); + if (diagnostic) try DiagnosticObserver.observe(true, observer, e, .wo_b, y); +} diff --git a/zig/src/families/deepseek_v41/config.zig b/zig/src/families/deepseek_v41/config.zig new file mode 100644 index 0000000000..67658fb4c8 --- /dev/null +++ b/zig/src/families/deepseek_v41/config.zig @@ -0,0 +1,343 @@ +//! The admitted DeepSeek V4.1 EXL3 architecture and its source-owned global caches. +const std = @import("std"); + +pub const Rope = struct { + rope_type: []const u8, + factor: f32, + beta_fast: f32, + beta_slow: f32, + original_max_position_embeddings: u32, +}; + +pub const Text = struct { + vocab_size: u32, + hidden_size: u32, + moe_intermediate_size: u32, + num_hidden_layers: u32, + num_attention_heads: u32, + num_key_value_heads: u32, + head_dim: u32, + qk_rope_head_dim: u32, + q_lora_rank: u32, + o_lora_rank: u32, + o_groups: u32, + swiglu_limit: f32, + rms_norm_eps: f32, + max_position_embeddings: u32, + rope_theta: f32, + rope_scaling: Rope, + n_routed_experts: u32, + n_shared_experts: u32, + num_experts_per_tok: u32, + scoring_func: []const u8, + topk_method: []const u8, + norm_topk_prob: bool, + routed_scaling_factor: f32, + sliding_window: u32, + compress_ratios: []const u32, + compress_rope_theta: f32, + kv_source_layer_ids: []const u32, + index_source_layer_ids: []const u32, + index_n_heads: u32, + index_head_dim: u32, + index_topk: u32, + candidate_source_layer_id: u32, + candidate_topk_blocks: u32, + candidate_block_size: u32, + hc_mult: u32, + hc_sinkhorn_iters: u32, + hc_eps: f32, + engram_layer_ids: []const u32, + engram_num_embeddings: []const u64, + engram_max_ngram_size: u32, + engram_vocab_size: u32, + engram_n_heads: u32, + engram_head_dim: u32, + engram_pad_token_id: u32, + engram_compressed_vocab_size: u32, + num_nextn_predict_layers: u32, +}; + +pub const Config = struct { + model_type: []const u8, + text_config: Text, + quantization_config: struct { quant_method: []const u8, version: []const u8 }, + engram_table_dir: ?[]const u8 = null, + + pub fn load(arena: std.mem.Allocator, io: std.Io, dir: []const u8) !Config { + const path = try std.fs.path.join(arena, &.{ dir, "config.json" }); + const bytes = try std.Io.Dir.cwd().readFileAlloc(io, path, arena, .limited(1 << 20)); + return parse(arena, bytes); + } + + pub fn parse(arena: std.mem.Allocator, bytes: []const u8) !Config { + const root = try std.json.parseFromSliceLeaky(std.json.Value, arena, bytes, .{ .parse_numbers = false }); + const text = try field(root, "text_config"); + const rope = try field(text, "rope_scaling"); + const quant = try field(root, "quantization_config"); + const c: Config = .{ + .model_type = try string(try field(root, "model_type")), + .text_config = .{ + .vocab_size = try unsigned(u32, try field(text, "vocab_size")), + .hidden_size = try unsigned(u32, try field(text, "hidden_size")), + .moe_intermediate_size = try unsigned(u32, try field(text, "moe_intermediate_size")), + .num_hidden_layers = try unsigned(u32, try field(text, "num_hidden_layers")), + .num_attention_heads = try unsigned(u32, try field(text, "num_attention_heads")), + .num_key_value_heads = try unsigned(u32, try field(text, "num_key_value_heads")), + .head_dim = try unsigned(u32, try field(text, "head_dim")), + .qk_rope_head_dim = try unsigned(u32, try field(text, "qk_rope_head_dim")), + .q_lora_rank = try unsigned(u32, try field(text, "q_lora_rank")), + .o_lora_rank = try unsigned(u32, try field(text, "o_lora_rank")), + .o_groups = try unsigned(u32, try field(text, "o_groups")), + .swiglu_limit = try float(try field(text, "swiglu_limit")), + .rms_norm_eps = try float(try field(text, "rms_norm_eps")), + .max_position_embeddings = try unsigned(u32, try field(text, "max_position_embeddings")), + .rope_theta = try float(try field(text, "rope_theta")), + .rope_scaling = .{ + .rope_type = try string(try field(rope, "rope_type")), + .factor = try float(try field(rope, "factor")), + .beta_fast = try float(try field(rope, "beta_fast")), + .beta_slow = try float(try field(rope, "beta_slow")), + .original_max_position_embeddings = try unsigned(u32, try field(rope, "original_max_position_embeddings")), + }, + .n_routed_experts = try unsigned(u32, try field(text, "n_routed_experts")), + .n_shared_experts = try unsigned(u32, try field(text, "n_shared_experts")), + .num_experts_per_tok = try unsigned(u32, try field(text, "num_experts_per_tok")), + .scoring_func = try string(try field(text, "scoring_func")), + .topk_method = try string(try field(text, "topk_method")), + .norm_topk_prob = try boolean(try field(text, "norm_topk_prob")), + .routed_scaling_factor = try float(try field(text, "routed_scaling_factor")), + .sliding_window = try unsigned(u32, try field(text, "sliding_window")), + .compress_ratios = try integers(u32, arena, try field(text, "compress_ratios")), + .compress_rope_theta = try float(try field(text, "compress_rope_theta")), + .kv_source_layer_ids = try integers(u32, arena, try field(text, "kv_source_layer_ids")), + .index_source_layer_ids = try integers(u32, arena, try field(text, "index_source_layer_ids")), + .index_n_heads = try unsigned(u32, try field(text, "index_n_heads")), + .index_head_dim = try unsigned(u32, try field(text, "index_head_dim")), + .index_topk = try unsigned(u32, try field(text, "index_topk")), + .candidate_source_layer_id = try unsigned(u32, try field(text, "candidate_source_layer_id")), + .candidate_topk_blocks = try unsigned(u32, try field(text, "candidate_topk_blocks")), + .candidate_block_size = try unsigned(u32, try field(text, "candidate_block_size")), + .hc_mult = try unsigned(u32, try field(text, "hc_mult")), + .hc_sinkhorn_iters = try unsigned(u32, try field(text, "hc_sinkhorn_iters")), + .hc_eps = try float(try field(text, "hc_eps")), + .engram_layer_ids = try integers(u32, arena, try field(text, "engram_layer_ids")), + .engram_num_embeddings = try integers(u64, arena, try field(text, "engram_num_embeddings")), + .engram_max_ngram_size = try unsigned(u32, try field(text, "engram_max_ngram_size")), + .engram_vocab_size = try unsigned(u32, try field(text, "engram_vocab_size")), + .engram_n_heads = try unsigned(u32, try field(text, "engram_n_heads")), + .engram_head_dim = try unsigned(u32, try field(text, "engram_head_dim")), + .engram_pad_token_id = try unsigned(u32, try field(text, "engram_pad_token_id")), + .engram_compressed_vocab_size = try unsigned(u32, try field(text, "engram_compressed_vocab_size")), + .num_nextn_predict_layers = try unsigned(u32, try field(text, "num_nextn_predict_layers")), + }, + .quantization_config = .{ + .quant_method = try string(try field(quant, "quant_method")), + .version = try string(try field(quant, "version")), + }, + .engram_table_dir = if (root.object.get("engram_table_dir")) |v| + (if (v == .null) null else try string(v)) + else + null, + }; + try c.validate(); + return c; + } + + pub fn validate(c: Config) !void { + const t = c.text_config; + if (!std.mem.eql(u8, c.model_type, "deepseek_v41") or + !std.mem.eql(u8, c.quantization_config.quant_method, "exl3")) return error.UnsupportedCheckpoint; + if (t.hidden_size != 5120 or t.moe_intermediate_size != 2304 or t.num_hidden_layers != 40 or + t.num_attention_heads != 64 or t.num_key_value_heads != 1 or t.head_dim != 512 or + t.qk_rope_head_dim != 64 or t.q_lora_rank != 1280 or t.o_lora_rank != 1024 or t.o_groups != 8 or + t.vocab_size != 129280 or t.max_position_embeddings != 1048576) return error.UnsupportedArchitecture; + if (t.n_routed_experts != 384 or t.n_shared_experts != 1 or t.num_experts_per_tok != 6 or + !std.mem.eql(u8, t.scoring_func, "sqrtsoftplus") or !std.mem.eql(u8, t.topk_method, "noaux_tc") or + !t.norm_topk_prob or t.routed_scaling_factor != 1.5 or t.swiglu_limit != 10 or + t.sliding_window != 128 or t.hc_mult != 4 or t.hc_sinkhorn_iters != 20 or + t.index_n_heads != 32 or t.index_head_dim != 128 or t.index_topk != 512 or + t.candidate_source_layer_id != 20 or t.candidate_topk_blocks != 2048 or + t.candidate_block_size != 8) return error.UnsupportedArchitecture; + if (!std.mem.eql(u32, t.kv_source_layer_ids, &.{ 2, 8, 14, 20 }) or + !std.mem.eql(u32, t.index_source_layer_ids, &.{ 2, 8, 14, 20, 24, 28, 32, 36 }) or + !std.mem.eql(u32, t.engram_layer_ids, &.{ 1, 14 }) or t.compress_ratios.len != 43 or + !std.mem.eql(u64, t.engram_num_embeddings, &.{ 384006168, 384016682 })) return error.UnsupportedCacheLayout; + for (t.compress_ratios, 0..) |ratio, layer| { + const expected: u32 = if (layer < 2 or layer >= 40) 0 else if (layer < 20) 2 else 1; + if (ratio != expected) return error.UnsupportedCacheLayout; + } + if (t.engram_vocab_size != 16000000 or + t.engram_max_ngram_size != 4 or t.engram_n_heads != 8 or t.engram_head_dim != 256 or + t.engram_pad_token_id != 2 or t.engram_compressed_vocab_size != 99092 or + t.num_nextn_predict_layers != 3 or !std.mem.eql(u8, t.rope_scaling.rope_type, "yarn") or + t.rope_scaling.factor != 16 or t.rope_scaling.original_max_position_embeddings != 65536 or + !std.math.isFinite(t.rms_norm_eps) or t.rms_norm_eps <= 0 or + !std.math.isFinite(t.hc_eps) or t.hc_eps <= 0) return error.UnsupportedArchitecture; + if (!std.math.isFinite(t.rope_theta) or t.rope_theta <= 1 or + !std.math.isFinite(t.compress_rope_theta) or t.compress_rope_theta <= 1 or + !std.math.isFinite(t.rope_scaling.beta_fast) or t.rope_scaling.beta_fast <= 0 or + !std.math.isFinite(t.rope_scaling.beta_slow) or t.rope_scaling.beta_slow <= 0) + return error.UnsupportedArchitecture; + } + + pub fn context(c: Config, requested: u32) !u32 { + const limit = c.text_config.max_position_embeddings; + if (requested > limit) return error.ContextFull; + return if (requested == 0) limit else requested; + } +}; + +fn field(value: std.json.Value, name: []const u8) !std.json.Value { + if (value != .object) return error.UnexpectedToken; + return value.object.get(name) orelse error.MissingField; +} + +fn string(value: std.json.Value) ![]const u8 { + if (value != .string) return error.UnexpectedToken; + return value.string; +} + +fn boolean(value: std.json.Value) !bool { + if (value != .bool) return error.UnexpectedToken; + return value.bool; +} + +fn numberText(value: std.json.Value) ![]const u8 { + return switch (value) { + .number_string, .string => |s| s, + else => error.UnexpectedToken, + }; +} + +fn float(value: std.json.Value) !f32 { + const result = try std.fmt.parseFloat(f32, try numberText(value)); + if (!std.math.isFinite(result)) return error.Overflow; + return result; +} + +/// Decode integral decimal/exponent notation from digits exactly, without floating-point coercion. +fn unsigned(comptime T: type, value: std.json.Value) !T { + const text = try numberText(value); + if (text.len == 0) return error.InvalidCharacter; + if (std.fmt.parseInt(T, text, 10)) |n| return n else |_| {} + var start: usize = 0; + const negative = text[0] == '-'; + if (negative or text[0] == '+') start = 1; + const exp_pos = std.mem.indexOfAnyPos(u8, text, start, "eE") orelse text.len; + const exponent: i64 = if (exp_pos < text.len) + try std.fmt.parseInt(i32, text[exp_pos + 1 ..], 10) + else + 0; + var digits: usize = 0; + var fractional: usize = 0; + var dot = false; + var nonzero = false; + for (text[start..exp_pos]) |ch| { + if (ch == '.' and !dot) { + dot = true; + continue; + } + if (ch < '0' or ch > '9') return error.InvalidCharacter; + digits += 1; + if (dot) fractional += 1; + nonzero = nonzero or ch != '0'; + } + if (digits == 0) return error.InvalidCharacter; + if (!nonzero) return 0; + if (negative) return error.Overflow; + const scale = exponent - @as(i64, @intCast(fractional)); + const discarded: usize = if (scale < 0) @intCast(-scale) else 0; + if (discarded >= digits) return error.InvalidNumber; + const kept = digits - discarded; + var n: T = 0; + var index: usize = 0; + for (text[start..exp_pos]) |ch| { + if (ch == '.') continue; + if (index < kept) { + const digit: T = @intCast(ch - '0'); + if (n > (std.math.maxInt(T) - digit) / 10) return error.Overflow; + n = n * 10 + digit; + } else if (ch != '0') return error.InvalidNumber; + index += 1; + } + // Any nonzero ordinary integer overflows after at most 20 decimal shifts. + if (scale > 20) return error.Overflow; + var shift: i64 = 0; + while (shift < scale) : (shift += 1) { + if (n > std.math.maxInt(T) / 10) return error.Overflow; + n *= 10; + } + return n; +} + +fn integers(comptime T: type, arena: std.mem.Allocator, value: std.json.Value) ![]const T { + if (value != .array) return error.UnexpectedToken; + const result = try arena.alloc(T, value.array.items.len); + for (value.array.items, result) |item, *out| out.* = try unsigned(T, item); + return result; +} + +test "config integers retain exact unsigned boundaries and integral notation" { + try std.testing.expectEqual(@as(u32, 4294967295), try unsigned(u32, .{ .number_string = "4294967295" })); + try std.testing.expectEqual(@as(u64, 18446744073709551615), try unsigned(u64, .{ .number_string = "18446744073709551615.0" })); + try std.testing.expectEqual(@as(u32, 5120), try unsigned(u32, .{ .number_string = "5.120e3" })); + try std.testing.expectEqual(@as(u32, 5120), try unsigned(u32, .{ .string = "5120" })); + try std.testing.expectEqual(@as(u32, 0), try unsigned(u32, .{ .number_string = "-0.0" })); + try std.testing.expectError(error.Overflow, unsigned(u32, .{ .number_string = "4294967296" })); + try std.testing.expectError(error.Overflow, unsigned(u64, .{ .number_string = "18446744073709551616" })); + try std.testing.expectError(error.Overflow, unsigned(u64, .{ .number_string = "18446744073709551616.0" })); + try std.testing.expectError(error.InvalidNumber, unsigned(u64, .{ .number_string = "18446744073709551615.1" })); + try std.testing.expectError(error.InvalidNumber, unsigned(u32, .{ .number_string = "5120.0000000000000000001" })); + try std.testing.expectError(error.InvalidNumber, unsigned(u32, .{ .number_string = "1e-100" })); + try std.testing.expectError(error.Overflow, unsigned(u32, .{ .number_string = "-1.0" })); + try std.testing.expectError(error.Overflow, unsigned(u32, .{ .number_string = "1e100" })); +} + +test "config decoding rejects missing fields and wrong shapes without defaults" { + var arena = std.heap.ArenaAllocator.init(std.testing.allocator); + defer arena.deinit(); + try std.testing.expectError(error.MissingField, Config.parse(arena.allocator(), "{}")); + try std.testing.expectError(error.UnexpectedToken, Config.parse(arena.allocator(), "[]")); + try std.testing.expectError(error.UnexpectedToken, Config.parse(arena.allocator(), "{\"text_config\":false}")); + try std.testing.expectError(error.UnexpectedToken, boolean(.{ .string = "true" })); + try std.testing.expectError(error.UnexpectedToken, unsigned(u32, .{ .bool = true })); + try std.testing.expectError(error.Overflow, float(.{ .number_string = "1e100" })); +} + +test "released architecture rejects inconsistent Engram buckets and nonfinite rotary parameters" { + var arena = std.heap.ArenaAllocator.init(std.testing.allocator); + defer arena.deinit(); + const checkpoint = + \\{"model_type":"deepseek_v41","quantization_config":{"quant_method":"exl3","version":"1"}, + \\"text_config":{"vocab_size":129280,"hidden_size":5120,"moe_intermediate_size":2304, + \\"num_hidden_layers":40,"num_attention_heads":64,"num_key_value_heads":1,"head_dim":512, + \\"qk_rope_head_dim":64,"q_lora_rank":1280,"o_lora_rank":1024,"o_groups":8, + \\"swiglu_limit":10,"rms_norm_eps":0.000001,"max_position_embeddings":1048576, + \\"rope_theta":10000,"rope_scaling":{"rope_type":"yarn","factor":16,"beta_fast":32, + \\"beta_slow":1,"original_max_position_embeddings":65536},"n_routed_experts":384, + \\"n_shared_experts":1,"num_experts_per_tok":6,"scoring_func":"sqrtsoftplus", + \\"topk_method":"noaux_tc","norm_topk_prob":true,"routed_scaling_factor":1.5, + \\"sliding_window":128,"compress_ratios":[0,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + \\1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0],"compress_rope_theta":10000, + \\"kv_source_layer_ids":[2,8,14,20],"index_source_layer_ids":[2,8,14,20,24,28,32,36], + \\"index_n_heads":32,"index_head_dim":128,"index_topk":512,"candidate_source_layer_id":20, + \\"candidate_topk_blocks":2048,"candidate_block_size":8,"hc_mult":4,"hc_sinkhorn_iters":20, + \\"hc_eps":0.000001,"engram_layer_ids":[1,14],"engram_num_embeddings":[384006168,384016682], + \\"engram_max_ngram_size":4,"engram_vocab_size":16000000,"engram_n_heads":8,"engram_head_dim":256, + \\"engram_pad_token_id":2,"engram_compressed_vocab_size":99092,"num_nextn_predict_layers":3} + ; + const absent = try Config.parse(arena.allocator(), try std.fmt.allocPrint(arena.allocator(), "{s}}}", .{checkpoint})); + var invalid = absent; + invalid.text_config.engram_vocab_size = 1; + try std.testing.expectError(error.UnsupportedArchitecture, invalid.validate()); + invalid = absent; + invalid.text_config.engram_vocab_size = invalid.text_config.vocab_size; + try std.testing.expectError(error.UnsupportedArchitecture, invalid.validate()); + invalid = absent; + invalid.text_config.rope_theta = 1; + try std.testing.expectError(error.UnsupportedArchitecture, invalid.validate()); + invalid = absent; + invalid.text_config.rope_scaling.beta_slow = std.math.nan(f32); + try std.testing.expectError(error.UnsupportedArchitecture, invalid.validate()); +} diff --git a/zig/src/families/deepseek_v41/csa2.zig b/zig/src/families/deepseek_v41/csa2.zig new file mode 100644 index 0000000000..395de9107a --- /dev/null +++ b/zig/src/families/deepseek_v41/csa2.zig @@ -0,0 +1,77 @@ +//! Exact causal SWA plus shared compressed KV; fixed-buffer chunked prefill and decode use one path. +const std = @import("std"); +const mtl = @import("metal"); +const sources = @import("kernel_sources"); +const View = @import("view.zig").View; +pub const index = @import("csa2_index.zig"); +pub const kv = @import("kv.zig"); +pub const rope = @import("rope.zig"); +pub const Params = extern struct { + rows: u32, + heads: u32 = 64, + width: u32 = 512, + q_stride: u32, + position: u32, + chunk_rows: u32, + window: u32 = 128, + ring_stride: u32 = 528, + chunk_stride: u32 = 528, + main_stride: u32 = 288, + main_block: u32 = 16, + ratio: u32, + compressed_rows: u32, + topk: u32 = 512, + index_stride: u32 = 512, + scale: f32 = 0.04419417382415922, + pub fn validate(p: Params) !void { + if (p.rows == 0 or p.heads == 0 or p.width == 0 or p.width > 512 or p.width % 32 != 0 or + @as(u64, p.q_stride) < @as(u64, p.heads) * p.width or + p.chunk_rows < p.rows or p.window != 128 or + p.ring_stride < p.width + p.width / 32 or p.chunk_stride < p.width + p.width / 32 or + p.main_stride < p.width / 2 + p.width / 16 or p.main_block != 16 or + (p.ratio != 0 and p.ratio != 1 and p.ratio != 2) or p.topk > 512 or p.index_stride < p.topk or + @as(u64, p.position) + p.rows > kv.cache.max_context or + p.compressed_rows > kv.cache.max_context or !std.math.isFinite(p.scale) or p.scale <= 0 or + @as(u64, p.rows -| 1) * p.q_stride + @as(u64, p.heads) * p.width > std.math.maxInt(u32) or + @as(u64, p.rows) * p.index_stride > std.math.maxInt(u32) or + @as(u64, p.rows) * p.chunk_stride > std.math.maxInt(u32) or + @as(u64, p.window) * p.ring_stride > std.math.maxInt(u32) or + @as(u64, p.compressed_rows) * p.main_stride > std.math.maxInt(u32)) + return error.InvalidSparseAttentionShape; + } +}; +pub const Pipelines = struct { + attention: mtl.Pipeline, + pub fn load(device: mtl.Device) !Pipelines { + var options = mtl.CompileOptions.mlx(); + options.math_functions = .precise; + const lib = try mtl.Library.fromSource(device, sources.deepseek_v41_kv ++ sources.deepseek_v41_csa2, options); + defer lib.deinit(); + return .{ .attention = try mtl.Pipeline.init(device, lib, "dsv41_sparse_attention", false) }; + } + pub fn deinit(p: *Pipelines) void { + p.attention.deinit(); + } + /// BF16 Q/output [rows,heads,width], FP32 sinks, I32 indices; publish this chunk to the ring only after dispatch. + pub fn encode(p: *const Pipelines, enc: mtl.ComputeEncoder, q: View, ring: View, chunk: View, compressed: View, positions: View, sink: View, out: View, args: Params) !void { + try args.validate(); + try q.requireRows(args.rows, args.q_stride, @as(usize, args.heads) * args.width, 2); + try out.requireRows(args.rows, args.q_stride, @as(usize, args.heads) * args.width, 2); + try sink.require(@as(usize, args.heads) * 4, 4); + if (args.position != 0) try ring.requireRows(@min(args.position, args.window), args.ring_stride, args.width + args.width / 32, 1); + try chunk.requireRows(args.rows, args.chunk_stride, args.width + args.width / 32, 1); + if (args.ratio != 0 and args.compressed_rows != 0 and args.topk != 0) { + try compressed.requireRows(args.compressed_rows, args.main_stride, args.width / 2 + args.width / 16, 1); + try positions.requireRows(args.rows, args.index_stride, args.topk, 4); + } + enc.setPipeline(p.attention); + for ([_]View{ q, ring, chunk, compressed, positions, sink, out }, 0..) |v, i| + enc.setBuffer(v.buffer, v.offset, i); + enc.setValue(args, 7); + enc.dispatchGroups(mtl.Size.of(args.heads, args.rows, 1), mtl.Size.of(32, 1, 1)); + } +}; + +test { + _ = @import("kv_test.zig"); +} diff --git a/zig/src/families/deepseek_v41/csa2_index.zig b/zig/src/families/deepseek_v41/csa2_index.zig new file mode 100644 index 0000000000..2ac845ef07 --- /dev/null +++ b/zig/src/families/deepseek_v41/csa2_index.zig @@ -0,0 +1,139 @@ +//! Tiled GPU scores and bounded online heaps; the memory footprint does not grow with context length. +const std = @import("std"); +const max_context = @import("kv_state.zig").max_context; +const mtl = @import("metal"); +const sources = @import("kernel_sources"); +const View = @import("view.zig").View; +pub const score_tile_width = 4096; +pub const Params = extern struct { + rows: u32, + heads: u32 = 32, + width: u32 = 128, + q_stride: u32, + weight_stride: u32, + position: u32, + ratio: u32, + keys: u32, + key_stride: u32 = 68, + tile_start: u32 = 0, + tile_width: u32 = score_tile_width, + topk: u32 = 512, + candidate_topk: u32 = 2048, + block_size: u32 = 8, + use_candidates: u32 = 0, + make_candidates: u32 = 0, + scale: f32 = 0.015625, + pub fn validate(p: Params) !void { + if (p.rows == 0 or p.heads == 0 or p.heads > 32 or p.width == 0 or p.width > 128 or p.width % 32 != 0 or + p.q_stride < p.heads * p.width or p.weight_stride < p.heads or + (p.ratio != 1 and p.ratio != 2) or p.key_stride < p.width / 2 + p.width / 32 or + p.topk != 512 or p.candidate_topk != 2048 or p.block_size != 8 or + p.tile_width != score_tile_width or p.use_candidates > 1 or p.make_candidates > 1 or + (p.use_candidates != 0 and p.make_candidates != 0) or + @as(u64, p.position) + p.rows > max_context or p.keys > max_context or + !std.math.isFinite(p.scale) or p.scale <= 0 or + @as(u64, p.rows) * p.q_stride > std.math.maxInt(u32) or + @as(u64, p.rows) * p.weight_stride > std.math.maxInt(u32) or + @as(u64, p.keys) * p.key_stride > std.math.maxInt(u32)) + return error.InvalidIndexerShape; + } +}; +pub const Scratch = struct { + buffer: mtl.Buffer, + rows: u32, + pub fn bytes(rows: u32) usize { + return @as(usize, rows) * (score_tile_width * 4 + 512 * 8 + 2048 * 8 + 512 * 4 + 528 + 32 * 68); + } + pub fn init(device: mtl.Device, rows: u32) !Scratch { + if (rows == 0 or rows > 4096) return error.InvalidIndexerScratch; + return .{ .buffer = try device.buffer(bytes(rows), mtl.ResourceOptions.shared), .rows = rows }; + } + pub fn deinit(s: *Scratch) void { + s.buffer.deinit(); + } + pub fn scores(s: Scratch) View { + return .{ .buffer = s.buffer }; + } + pub fn heap(s: Scratch) View { + return s.scores().shifted(@as(usize, s.rows) * score_tile_width * 4); + } + pub fn candidates(s: Scratch) View { + return s.heap().shifted(@as(usize, s.rows) * 512 * 8); + } + pub fn positions(s: Scratch) View { + return s.candidates().shifted(@as(usize, s.rows) * 2048 * 8); + } + pub fn windowChunk(s: Scratch) View { + return s.positions().shifted(@as(usize, s.rows) * 512 * 4); + } + pub fn queryPacked(s: Scratch) View { + return s.windowChunk().shifted(@as(usize, s.rows) * 528); + } +}; +pub const Pipelines = struct { + score: mtl.Pipeline, + clear: mtl.Pipeline, + merge: mtl.Pipeline, + finish: mtl.Pipeline, + pub fn load(device: mtl.Device) !Pipelines { + var options = mtl.CompileOptions.mlx(); + options.math_functions = .precise; + const lib = try mtl.Library.fromSource(device, sources.deepseek_v41_kv ++ sources.deepseek_v41_index, options); + defer lib.deinit(); + var p: Pipelines = undefined; + p.score = try mtl.Pipeline.init(device, lib, "dsv41_index_score", false); + errdefer p.score.deinit(); + p.clear = try mtl.Pipeline.init(device, lib, "dsv41_index_clear", false); + errdefer p.clear.deinit(); + p.merge = try mtl.Pipeline.init(device, lib, "dsv41_index_merge", false); + errdefer p.merge.deinit(); + p.finish = try mtl.Pipeline.init(device, lib, "dsv41_index_finish", false); + return p; + } + pub fn deinit(p: *Pipelines) void { + p.score.deinit(); + p.clear.deinit(); + p.merge.deinit(); + p.finish.deinit(); + } + /// Q has already undergone BF16 RoPE and in-place FP4/E8M0 quantization; weights are BF16 projection output. + pub fn encode(p: *const Pipelines, enc: mtl.ComputeEncoder, q: View, weights: View, keys: View, scratch: Scratch, args: Params) !void { + try args.validate(); + if (args.rows > scratch.rows) return error.IndexerScratchExceeded; + try (View{ .buffer = scratch.buffer }).require(Scratch.bytes(scratch.rows), 4); + if (args.keys != 0) { + try q.requireRows(args.rows, args.q_stride, @as(usize, args.heads) * args.width, 2); + try weights.requireRows(args.rows, args.weight_stride, args.heads, 2); + try keys.requireRows(args.keys, args.key_stride, args.width / 2 + args.width / 32, 1); + } + enc.setPipeline(p.clear); + for ([_]View{ scratch.heap(), scratch.candidates() }, 0..) |v, i| enc.setBuffer(v.buffer, v.offset, i); + enc.setValue(args, 2); + enc.dispatchThreads(mtl.Size.of(@max(args.topk, args.candidate_topk), args.rows, 1), mtl.Size.of(128, 1, 1)); + enc.barrier(); + const count = if (args.use_candidates != 0) args.candidate_topk * args.block_size else args.keys; + var at: u32 = 0; + while (at < count) : (at += score_tile_width) { + var tile = args; + tile.tile_start = at; + enc.setPipeline(p.score); + for ([_]View{ q, weights, keys, scratch.candidates(), scratch.scores() }, 0..) |v, i| + enc.setBuffer(v.buffer, v.offset, i); + enc.setValue(tile, 5); + enc.dispatchGroups(mtl.Size.of(score_tile_width, args.rows, 1), mtl.Size.of(32, 1, 1)); + enc.barrier(); + enc.setPipeline(p.merge); + for ([_]View{ scratch.scores(), scratch.heap(), scratch.candidates() }, 0..) |v, i| + enc.setBuffer(v.buffer, v.offset, i); + enc.setValue(tile, 3); + enc.dispatchThreads(mtl.Size.of(args.rows, 1, 1), mtl.Size.of(1, 1, 1)); + enc.barrier(); + } + enc.setPipeline(p.finish); + for ([_]View{ scratch.heap(), scratch.candidates(), scratch.positions() }, 0..) |v, i| + enc.setBuffer(v.buffer, v.offset, i); + enc.setValue(args, 3); + enc.dispatchThreads(mtl.Size.of(args.rows, 1, 1), mtl.Size.of(1, 1, 1)); + enc.barrier(); + } +}; diff --git a/zig/src/families/deepseek_v41/csa2_test.zig b/zig/src/families/deepseek_v41/csa2_test.zig new file mode 100644 index 0000000000..0ac81cacca --- /dev/null +++ b/zig/src/families/deepseek_v41/csa2_test.zig @@ -0,0 +1,309 @@ +const std = @import("std"); +const mtl = @import("metal"); +const csa2 = @import("csa2.zig"); +const index = @import("csa2_index.zig"); +const rope = @import("rope.zig"); +const View = @import("view.zig").View; +fn bf(x: f32) u16 { + const bits: u32 = @bitCast(x); + return @intCast((bits +% 0x7fff +% ((bits >> 16) & 1)) >> 16); +} +fn view(b: mtl.Buffer) View { + return .{ .buffer = b }; +} +fn submit(cb: mtl.CommandBuffer, enc: mtl.ComputeEncoder) !void { + enc.end(); + cb.commit(); + cb.wait(); + try std.testing.expect(cb.failure() == null); +} + +test "sparse attention preserves a causal window across ring wrap and masks future compressed keys" { + const pool = mtl.objc.Pool.push(); + defer pool.pop(); + const device = try mtl.Device.init(); + defer device.deinit(); + const queue = try device.queue(); + defer queue.deinit(); + var p = try csa2.Pipelines.load(device); + defer p.deinit(); + const q = try device.buffer(3 * 512 * 2, mtl.ResourceOptions.shared); + defer q.deinit(); + const ring = try device.buffer(128 * 528, mtl.ResourceOptions.shared); + defer ring.deinit(); + const chunk = try device.buffer(3 * 528, mtl.ResourceOptions.shared); + defer chunk.deinit(); + const main = try device.buffer(201 * 288, mtl.ResourceOptions.shared); + defer main.deinit(); + const positions = try device.buffer(6 * 4, mtl.ResourceOptions.shared); + defer positions.deinit(); + const sink = try device.buffer(4, mtl.ResourceOptions.shared); + defer sink.deinit(); + const out = try device.buffer(3 * 512 * 2, mtl.ResourceOptions.shared); + defer out.deinit(); + @memset(q.contents()[0 .. 3 * 512 * 2], 0); + sink.slice(f32, 1)[0] = 0; + for (0..128) |r| { + @memset(ring.contents()[r * 528 .. r * 528 + 512], 0x38); + @memset(ring.contents()[r * 528 + 512 .. (r + 1) * 528], 127); + } + for (0..3) |r| { + @memset(chunk.contents()[r * 528 .. r * 528 + 512], 0x40); + @memset(chunk.contents()[r * 528 + 512 .. (r + 1) * 528], 127); + positions.slice(i32, 6)[2 * r] = 0; + positions.slice(i32, 6)[2 * r + 1] = 200; + } + @memset(main.contents()[0..256], 0x66); + @memset(main.contents()[256..288], 0x38); + const cb = queue.commandBuffer(); + const enc = cb.compute(.serial); + try p.encode(enc, view(q), view(ring), view(chunk), view(main), view(positions), view(sink), view(out), .{ .rows = 3, .heads = 1, .q_stride = 512, .position = 129, .chunk_rows = 3, .ratio = 2, .compressed_rows = 201, .topk = 2, .index_stride = 2 }); + try submit(cb, enc); + for (0..3) |r| { + const expected = bf((133 + @as(f32, @floatFromInt(r))) / 130); + for (out.slice(u16, 3 * 512)[r * 512 .. (r + 1) * 512]) |v| try std.testing.expectEqual(expected, v); + } +} + +test "sparse QK cancellation retains a small score before sink normalization" { + const pool = mtl.objc.Pool.push(); + defer pool.pop(); + const device = try mtl.Device.init(); + defer device.deinit(); + const queue = try device.queue(); + defer queue.deinit(); + var p = try csa2.Pipelines.load(device); + defer p.deinit(); + const q = try device.buffer(512 * 2, mtl.ResourceOptions.shared); + defer q.deinit(); + const chunk = try device.buffer(528, mtl.ResourceOptions.shared); + defer chunk.deinit(); + const sink = try device.buffer(4, mtl.ResourceOptions.shared); + defer sink.deinit(); + const out = try device.buffer(512 * 2, mtl.ResourceOptions.shared); + defer out.deinit(); + @memset(q.slice(u16, 512), 0); + q.slice(u16, 512)[0] = bf(0x1p24); + q.slice(u16, 512)[1] = bf(-0x1p24); + q.slice(u16, 512)[32] = bf(0x1p-6); + @memset(chunk.contents()[0..512], 0x38); + @memset(chunk.contents()[512..528], 127); + sink.slice(f32, 1)[0] = 0; + const cb = queue.commandBuffer(); + const enc = cb.compute(.serial); + // No prior window or compressed keys: their unused bindings share the immutable chunk. + try p.encode(enc, view(q), view(chunk), view(chunk), view(chunk), view(chunk), view(sink), view(out), .{ .rows = 1, .heads = 1, .q_stride = 512, .position = 0, .chunk_rows = 1, .ratio = 0, .compressed_rows = 0, .scale = 1 }); + try submit(cb, enc); + // Exact dot = 2^-6; 1 / (1 + exp(-2^-6)) rounds to this BF16 value. + for (out.slice(u16, 512)) |v| try std.testing.expectEqual(bf(0.50390625), v); +} + +test "the first query retains BF16 probability arithmetic regardless of future prefill rows" { + const pool = mtl.objc.Pool.push(); + defer pool.pop(); + const device = try mtl.Device.init(); + defer device.deinit(); + const queue = try device.queue(); + defer queue.deinit(); + var p = try csa2.Pipelines.load(device); + defer p.deinit(); + const q = try device.buffer(32 * 2, mtl.ResourceOptions.shared); + defer q.deinit(); + const ring = try device.buffer(128 * 33, mtl.ResourceOptions.shared); + defer ring.deinit(); + const chunk = try device.buffer(128 * 33, mtl.ResourceOptions.shared); + defer chunk.deinit(); + const main = try device.buffer(18, mtl.ResourceOptions.shared); + defer main.deinit(); + const positions = try device.buffer(4, mtl.ResourceOptions.shared); + defer positions.deinit(); + const sink = try device.buffer(4, mtl.ResourceOptions.shared); + defer sink.deinit(); + const out = try device.buffer(32 * 2, mtl.ResourceOptions.shared); + defer out.deinit(); + @memset(q.slice(u16, 32), 0); + q.slice(u16, 32)[0] = bf(1); + @memset(chunk.contents()[0..32], 0x38); + chunk.contents()[32] = 127; + @memset(main.contents()[0..16], 0x44); + @memset(main.contents()[16..18], 0x38); + positions.slice(i32, 1)[0] = 0; + sink.slice(f32, 1)[0] = 0.005; + const cb = queue.commandBuffer(); + const enc = cb.compute(.serial); + try p.encode(enc, view(q), view(ring), view(chunk), view(main), view(positions), view(sink), view(out), .{ .rows = 1, .heads = 1, .width = 32, .q_stride = 32, .position = 0, .chunk_rows = 1, .ring_stride = 33, .chunk_stride = 33, .main_stride = 18, .ratio = 1, .compressed_rows = 1, .topk = 1, .index_stride = 1, .scale = 1 }); + try submit(cb, enc); + // BF16(exp(-1))*1 + 1*2; padded windows would move key 2 into a later online-softmax tile. + for (out.slice(u16, 32)) |v| try std.testing.expectEqual(bf(1.5703125), v); + const cb2 = queue.commandBuffer(); + const enc2 = cb2.compute(.serial); + try p.encode(enc2, view(q), view(ring), view(chunk), view(main), view(positions), view(sink), view(out), .{ .rows = 1, .heads = 1, .width = 32, .q_stride = 32, .position = 0, .chunk_rows = 128, .ring_stride = 33, .chunk_stride = 33, .main_stride = 18, .ratio = 1, .compressed_rows = 1, .topk = 1, .index_stride = 1, .scale = 1 }); + try submit(cb2, enc2); + for (out.slice(u16, 32)) |v| try std.testing.expectEqual(bf(1.5703125), v); +} + +test "hierarchical candidate selection pins the newest partial block and subsequent reindex uses those blocks" { + const pool = mtl.objc.Pool.push(); + defer pool.pop(); + const device = try mtl.Device.init(); + defer device.deinit(); + const queue = try device.queue(); + defer queue.deinit(); + var p = try index.Pipelines.load(device); + defer p.deinit(); + var scratch = try index.Scratch.init(device, 1); + defer scratch.deinit(); + const q = try device.buffer(32 * 2, mtl.ResourceOptions.shared); + defer q.deinit(); + const weights = try device.buffer(2, mtl.ResourceOptions.shared); + defer weights.deinit(); + const keys_count = 2048 * 8 + 3; + const keys = try device.buffer(keys_count * 17, mtl.ResourceOptions.shared); + defer keys.deinit(); + @memset(q.slice(u16, 32), bf(1)); + weights.slice(u16, 1)[0] = bf(1); + for (0..keys_count) |r| { + @memset(keys.contents()[r * 17 .. r * 17 + 16], 0x22); + keys.contents()[r * 17 + 16] = if (r >= 2048 * 8) 126 else 127; + } + var args = index.Params{ .rows = 1, .heads = 1, .width = 32, .q_stride = 32, .weight_stride = 1, .position = keys_count - 1, .ratio = 1, .keys = keys_count, .key_stride = 17, .make_candidates = 1, .scale = 1 }; + const cb = queue.commandBuffer(); + const enc = cb.compute(.serial); + try p.encode(enc, view(q), view(weights), view(keys), scratch, args); + try submit(cb, enc); + const Pick = extern struct { score: f32, position: i32 }; + const candidates = @as([*]Pick, @ptrCast(@alignCast(scratch.candidates().buffer.contents() + scratch.candidates().offset)))[0..2048]; + try std.testing.expectEqual(@as(i32, 2048), candidates[2047].position); + for (candidates[0..2047], 0..) |pick, i| try std.testing.expectEqual(@as(i32, @intCast(i)), pick.position); + const cb2 = queue.commandBuffer(); + const enc2 = cb2.compute(.serial); + args.make_candidates = 0; + args.use_candidates = 1; + try p.encode(enc2, view(q), view(weights), view(keys), scratch, args); + try submit(cb2, enc2); + const selected = @as([*]i32, @ptrCast(@alignCast(scratch.positions().buffer.contents() + scratch.positions().offset)))[0..512]; + for (selected, 0..) |pos, i| try std.testing.expectEqual(@as(i32, @intCast(i)), pos); +} + +test "RoPE rotates adjacent tail pairs with BF16 assignment and compressed positions use group starts" { + const pool = mtl.objc.Pool.push(); + defer pool.pop(); + const device = try mtl.Device.init(); + defer device.deinit(); + const queue = try device.queue(); + defer queue.deinit(); + var p = try rope.Pipelines.load(device, 3, 32, .{ .theta = 10000 }, .{ .theta = 160000 }); + defer p.deinit(); + const x = try device.buffer(2 * 64 * 2, mtl.ResourceOptions.shared); + defer x.deinit(); + @memset(x.slice(u16, 128), bf(1)); + const cb = queue.commandBuffer(); + const enc = cb.compute(.serial); + try std.testing.expectError(error.InvalidRotaryShape, p.encode(enc, view(x), .{ .rows = 2, .heads = 1, .width = 64, .rotary = 32, .stride = 64, .position = 1, .step = 2 })); + try std.testing.expectError(error.InvalidRotaryShape, p.encode(enc, view(x), .{ .rows = 1, .heads = 1, .width = 64, .rotary = 16, .stride = 64, .position = 0 })); + try std.testing.expectError(error.InvalidRotaryShape, p.encode(enc, view(x), .{ .rows = 2, .heads = 1, .width = 64, .rotary = 32, .stride = 64, .position = std.math.maxInt(u32), .step = std.math.maxInt(u32) })); + try p.encode(enc, view(x), .{ .rows = 2, .heads = 1, .width = 64, .rotary = 32, .stride = 64, .position = 0, .step = 2 }); + try submit(cb, enc); + for (x.slice(u16, 128)[0..96]) |v| try std.testing.expectEqual(bf(1), v); + for (0..16) |pair| { + const power: f32 = @floatCast(std.math.pow(f64, 10000, @as(f32, @floatFromInt(pair * 2)) / 32)); + const frequency: f32 = 1 / power; + const angle: f32 = 2 * frequency; + const c: f32 = @floatCast(@cos(@as(f64, angle))); + const s: f32 = @floatCast(@sin(@as(f64, angle))); + const a = bf(c - s); + const b = bf(s + c); + try std.testing.expectEqual(a, x.slice(u16, 128)[96 + pair * 2]); + try std.testing.expectEqual(b, x.slice(u16, 128)[97 + pair * 2]); + } +} + +test "indexer visibility follows completed compressor groups for every query in a chunk" { + const pool = mtl.objc.Pool.push(); + defer pool.pop(); + const device = try mtl.Device.init(); + defer device.deinit(); + const queue = try device.queue(); + defer queue.deinit(); + var p = try index.Pipelines.load(device); + defer p.deinit(); + var scratch = try index.Scratch.init(device, 3); + defer scratch.deinit(); + const q = try device.buffer(3 * 32 * 2, mtl.ResourceOptions.shared); + defer q.deinit(); + const weights = try device.buffer(3 * 2, mtl.ResourceOptions.shared); + defer weights.deinit(); + const keys = try device.buffer(3 * 17, mtl.ResourceOptions.shared); + defer keys.deinit(); + @memset(q.slice(u16, 3 * 32), bf(1)); + @memset(weights.slice(u16, 3), bf(1)); + for (0..3) |r| { + @memset(keys.contents()[r * 17 .. r * 17 + 16], 0x22); + keys.contents()[r * 17 + 16] = 127; + } + const cb = queue.commandBuffer(); + const enc = cb.compute(.serial); + try p.encode(enc, view(q), view(weights), view(keys), scratch, .{ .rows = 3, .heads = 1, .width = 32, .q_stride = 32, .weight_stride = 1, .position = 0, .ratio = 2, .keys = 3, .key_stride = 17, .scale = 1 }); + try submit(cb, enc); + const selected = @as([*]i32, @ptrCast(@alignCast(scratch.positions().buffer.contents() + + scratch.positions().offset)))[0 .. 3 * 512]; + for (selected[0..512]) |pos| try std.testing.expectEqual(@as(i32, -1), pos); + for (1..3) |r| { + try std.testing.expectEqual(@as(i32, 0), selected[r * 512]); + for (selected[r * 512 + 1 .. (r + 1) * 512]) |pos| try std.testing.expectEqual(@as(i32, -1), pos); + } +} + +test "YaRN interpolates its correction band and inverse rotation conjugates the frequency" { + const pool = mtl.objc.Pool.push(); + defer pool.pop(); + const device = try mtl.Device.init(); + defer device.deinit(); + const queue = try device.queue(); + defer queue.deinit(); + var p = try rope.Pipelines.load(device, 65537, 32, .{ .theta = 10000 }, .{ .theta = 160000, .original = 65536 }); + defer p.deinit(); + const x = try device.buffer(64 * 2, mtl.ResourceOptions.shared); + defer x.deinit(); + @memset(x.slice(u16, 64), bf(1)); + const cb = queue.commandBuffer(); + const enc = cb.compute(.serial); + try p.encode(enc, view(x), .{ .rows = 1, .heads = 1, .width = 64, .rotary = 32, .stride = 64, .position = 65536, .inverse = 1, .spectrum = .compressed }); + try submit(cb, enc); + const low: f32 = @floatCast(@max(@floor(32 * @log(@as(f64, 65536) / (32 * 2 * std.math.pi)) / (2 * @log(@as(f64, 160000)))), 0)); + const high: f32 = @floatCast(@min(@ceil(32 * @log(@as(f64, 65536) / (2 * std.math.pi)) / (2 * @log(@as(f64, 160000)))), 31)); + for ([_]usize{ 0, 10, 15 }) |pair| { + const power: f32 = @floatCast(std.math.pow(f64, 160000, @as(f32, @floatFromInt(pair * 2)) / 32)); + const frequency: f32 = 1 / power; + const smooth: f32 = 1 - std.math.clamp((@as(f32, @floatFromInt(pair)) - low) / @max(high - low, 1e-3), 0, 1); + const slow: f32 = frequency / 16 * (1 - smooth); + const fast: f32 = frequency * smooth; + const angle: f32 = 65536 * (slow + fast); + const c: f32 = @floatCast(@cos(@as(f64, angle))); + const s: f32 = -@as(f32, @floatCast(@sin(@as(f64, angle)))); + try std.testing.expectEqual(bf(c - s), x.slice(u16, 64)[32 + pair * 2]); + try std.testing.expectEqual(bf(s + c), x.slice(u16, 64)[33 + pair * 2]); + } +} + +test "RoPE retained source pair rounds the position-five imaginary consumer to pinned CUDA BF16" { + const pool = mtl.objc.Pool.push(); + defer pool.pop(); + const device = try mtl.Device.init(); + defer device.deinit(); + const queue = try device.queue(); + defer queue.deinit(); + var p = try rope.Pipelines.load(device, 6, 64, .{ .theta = 10000 }, .{ .theta = 160000, .original = 65536 }); + defer p.deinit(); + const x = try device.buffer(512 * 2, mtl.ResourceOptions.shared); + defer x.deinit(); + @memset(x.slice(u16, 512), bf(0)); + // Token-5/layer-0 rotary pair 21 crosses a BF16 tie under per-head cos; pinned source factors give .546875. + x.slice(u16, 512)[490] = bf(1.15625); + x.slice(u16, 512)[491] = bf(0.53125); + const cb = queue.commandBuffer(); + const enc = cb.compute(.serial); + try p.encode(enc, view(x), .{ .rows = 1, .heads = 1, .width = 512, .rotary = 64, .stride = 512, .position = 5 }); + try submit(cb, enc); + try std.testing.expectEqual(bf(0.546875), x.slice(u16, 512)[491]); +} diff --git a/zig/src/families/deepseek_v41/engram.zig b/zig/src/families/deepseek_v41/engram.zig new file mode 100644 index 0000000000..867cc78d39 --- /dev/null +++ b/zig/src/families/deepseek_v41/engram.zig @@ -0,0 +1,207 @@ +//! Resident Engram FP8 gathers and signed-sqrt gates; WKV is projected separately by the caller. +const std = @import("std"); +const mtl = @import("metal"); +const sources = @import("kernel_sources"); +pub const View = @import("view.zig").View; +const Dtype = @import("ops.zig").Dtype; +pub const hash = @import("engram_hash.zig"); + +pub const head_dim = 256; +pub const gather_dim = hash.columns * head_dim; +pub const history_bytes = 16; + +/// Borrowed full-resident E4M3FN rows and UE8M0 rowwise scale blocks, never a 32x32 scale matrix. +pub const Table = struct { + weight: View, + scale: View, + rows: u32, + weight_stride_bytes: usize = head_dim, + scale_stride_bytes: usize = head_dim / 32, + scale_block: u32 = 32, + + pub fn validate(self: Table) !void { + if (self.rows == 0 or self.weight_stride_bytes < head_dim or self.scale_stride_bytes < head_dim / 32 or self.scale_block != 32) return error.InvalidEngramTable; + try self.weight.requireRows(self.rows, self.weight_stride_bytes, head_dim, 1); + try self.scale.requireRows(self.rows, self.scale_stride_bytes, head_dim / 32, 1); + } +}; + +/// BF16 hidden [tokens,copies,dim], WKV [tokens,(copies+1)*dim]; norm weights contiguous FP32 [copies,dim]. +pub const Gate = struct { + q_weight: View, + k_weight: View, + /// The released checkpoints store these f32; rank-split repacks store bf16. + weight_dtype: Dtype = .f32, + dim: u32, + copies: u32, + hidden_stride: usize, + kv_stride: usize, + output_stride: usize, + eps: f32, + + pub fn validate(self: Gate) !void { + const width = try std.math.mul(usize, self.dim, self.copies); + const projected_width = try std.math.add(usize, width, self.dim); + if (self.dim == 0 or self.copies == 0 or self.hidden_stride < width or self.output_stride < width or self.kv_stride < projected_width or !std.math.isFinite(self.eps) or self.eps <= 0 or + self.dim > std.math.maxInt(u32) - 255) return error.InvalidEngramGate; + const weight_bytes = try std.math.mul(usize, width, 4); + try self.q_weight.require(weight_bytes, 4); + try self.k_weight.require(weight_bytes, 4); + } +}; + +pub const Pipelines = struct { + hash_ids: mtl.Pipeline, + commit: mtl.Pipeline, + reset: mtl.Pipeline, + gather: mtl.Pipeline, + gate: mtl.Pipeline, + + pub fn load(device: mtl.Device) !Pipelines { + const pool = mtl.objc.Pool.push(); + defer pool.pop(); + const lib = try mtl.Library.fromSource(device, sources.deepseek_v41_engram, mtl.CompileOptions.mlx()); + defer lib.deinit(); + const h = try mtl.Pipeline.init(device, lib, "tf_v41_engram_hash", false); + errdefer h.deinit(); + const c = try mtl.Pipeline.init(device, lib, "tf_v41_engram_commit", false); + errdefer c.deinit(); + const r = try mtl.Pipeline.init(device, lib, "tf_v41_engram_reset", false); + errdefer r.deinit(); + const g = try mtl.Pipeline.init(device, lib, "tf_v41_engram_gather", false); + errdefer g.deinit(); + const gate = try mtl.Pipeline.init(device, lib, "tf_v41_engram_gate", false); + return .{ .hash_ids = h, .commit = c, .reset = r, .gather = g, .gate = gate }; + } + + pub fn deinit(self: *Pipelines) void { + self.hash_ids.deinit(); + self.commit.deinit(); + self.reset.deinit(); + self.gather.deinit(); + self.gate.deinit(); + } +}; + +const HashArgs = extern struct { tokens: u32, pad: u32, masked: u32 }; +const GatherArgs = extern struct { + weight_stride: u64, + scale_stride: u64, + output_stride: u64, + tokens: u32, + columns: u32, + head_dim: u32, + scale_block: u32, +}; +const GateArgs = extern struct { + hidden_stride: u64, + kv_stride: u64, + output_stride: u64, + dim: u32, + copies: u32, + masked: u32, + weight_dtype: u32, + eps: f32, +}; + +fn bind(e: mtl.ComputeEncoder, view: View, at: usize) void { + e.setBuffer(view.buffer, view.offset, at); +} + +/// Each history View is one sequence's 16-byte GPU record; initialize before its first hash. +pub fn encodeReset(e: mtl.ComputeEncoder, p: *const Pipelines, history: View) void { + e.setPipeline(p.reset); + bind(e, history, 0); + e.dispatchGroups(.{ .width = 1 }, .{ .width = 1 }); + e.barrier(); +} + +/// Snapshot/rollback are GPU copies; caller ends compute encoding before beginning a blit encoder. +pub fn encodeSnapshot(e: mtl.BlitEncoder, history: View, saved: View) void { + e.copy(history.buffer, history.offset, saved.buffer, saved.offset, history_bytes); +} + +pub fn encodeRollback(e: mtl.BlitEncoder, saved: View, history: View) void { + encodeSnapshot(e, saved, history); +} + +/// Raw u32 IDs -> [tokens,24] hashes; map covers valid IDs, optional 0=DEAD mask, history is unchanged. +pub fn encodeHash(e: mtl.ComputeEncoder, p: *const Pipelines, meta: hash.Layer, ids: View, token_map: View, mask: ?View, history: View, out: View, tokens: u32) !void { + if (tokens == 0) return error.EmptyEngramChunk; + if (!std.mem.eql(u8, std.mem.asBytes(&meta), std.mem.asBytes(&hash.layers[0])) and + !std.mem.eql(u8, std.mem.asBytes(&meta), std.mem.asBytes(&hash.layers[1]))) return error.InvalidEngramMetadata; + try ids.requireRows(tokens, 1, 1, 4); + try token_map.require(4, 4); + try history.require(history_bytes, 4); + try out.requireRows(tokens, hash.columns, hash.columns, 4); + if (mask) |m| try m.require(tokens, 1); + e.setPipeline(p.hash_ids); + bind(e, ids, 0); + bind(e, token_map, 1); + bind(e, mask orelse ids, 2); + bind(e, history, 3); + bind(e, out, 4); + e.setValue(meta, 5); + e.setValue(HashArgs{ .tokens = tokens, .pad = hash.pad_id, .masked = @intFromBool(mask != null) }, 6); + e.dispatchThreads(.{ .width = tokens }, .{ .width = 64 }); + e.barrier(); +} + +/// Commit exactly once per chunk after both layers have hashed; remains bounded at three past tokens. +pub fn encodeCommit(e: mtl.ComputeEncoder, p: *const Pipelines, ids: View, token_map: View, mask: ?View, history: View, tokens: u32) !void { + if (tokens == 0) return error.EmptyEngramChunk; + try ids.requireRows(tokens, 1, 1, 4); + try token_map.require(4, 4); + try history.require(history_bytes, 4); + if (mask) |m| try m.require(tokens, 1); + e.barrier(); + e.setPipeline(p.commit); + bind(e, ids, 0); + bind(e, token_map, 1); + bind(e, mask orelse ids, 2); + bind(e, history, 3); + e.setValue(HashArgs{ .tokens = tokens, .pad = hash.pad_id, .masked = @intFromBool(mask != null) }, 4); + e.dispatchGroups(.{ .width = 1 }, .{ .width = 1 }); + e.barrier(); +} + +/// Gather uint32 [tokens,24] row IDs into BF16 [tokens,6144]; IDs must be within the borrowed table. +pub fn encodeGather(e: mtl.ComputeEncoder, p: *const Pipelines, table: Table, ids: View, out: View, tokens: u32, output_stride: usize) !void { + try table.validate(); + if (tokens == 0 or output_stride < gather_dim) return error.InvalidEngramGather; + try ids.requireRows(tokens, hash.columns, hash.columns, 4); + try out.requireRows(tokens, output_stride, gather_dim, 2); + e.setPipeline(p.gather); + bind(e, ids, 0); + bind(e, table.weight, 1); + bind(e, table.scale, 2); + bind(e, out, 3); + e.setValue(GatherArgs{ .weight_stride = table.weight_stride_bytes, .scale_stride = table.scale_stride_bytes, .output_stride = output_stride, .tokens = tokens, .columns = hash.columns, .head_dim = head_dim, .scale_block = table.scale_block }, 4); + e.dispatchThreads(.{ .width = gather_dim, .height = tokens }, .{ .width = 256 }); + e.barrier(); +} + +/// Add per-copy gate times shared value to BF16 hidden; out may alias hidden, never the projected KV. +pub fn encodeGate(e: mtl.ComputeEncoder, p: *const Pipelines, gate: Gate, hidden: View, projected_kv: View, mask: ?View, out: View, tokens: u32) !void { + try gate.validate(); + if (tokens == 0) return error.EmptyEngramChunk; + const width = @as(usize, gate.dim) * gate.copies; + try hidden.requireRows(tokens, gate.hidden_stride, width, 2); + try projected_kv.requireRows(tokens, gate.kv_stride, width + gate.dim, 2); + try out.requireRows(tokens, gate.output_stride, width, 2); + if (mask) |m| try m.require(tokens, 1); + e.setPipeline(p.gate); + bind(e, hidden, 0); + bind(e, projected_kv, 1); + bind(e, gate.q_weight, 2); + bind(e, gate.k_weight, 3); + bind(e, mask orelse hidden, 4); + bind(e, out, 5); + e.setValue(GateArgs{ .hidden_stride = gate.hidden_stride, .kv_stride = gate.kv_stride, .output_stride = gate.output_stride, .dim = gate.dim, .copies = gate.copies, .masked = @intFromBool(mask != null), .weight_dtype = @backingInt(gate.weight_dtype), .eps = gate.eps }, 6); + e.dispatchGroups(.{ .width = tokens, .height = gate.copies }, .{ .width = 256 }); + e.barrier(); +} + +test { + _ = @import("engram_test.zig"); +} diff --git a/zig/src/families/deepseek_v41/engram_hash.zig b/zig/src/families/deepseek_v41/engram_hash.zig new file mode 100644 index 0000000000..609aff7ca8 --- /dev/null +++ b/zig/src/families/deepseek_v41/engram_hash.zig @@ -0,0 +1,148 @@ +//! Exact DeepSeek AI inference/engram.py hashes; metadata from the released Flash configuration. +const std = @import("std"); + +pub const order = 4; +pub const heads = 8; +pub const columns = 24; +pub const dead: i32 = -1; +pub const raw_vocab = 129280; +pub const compressed_vocab = 99092; +pub const pad_id = 2; + +pub const Layer = extern struct { + layer_id: u32, + rows: u32, + multipliers: [order]u64, + primes: [columns]u32, + offsets: [columns]u32, +}; + +fn layer(id: u32, rows: u32, multipliers: [order]u64, primes: [columns]u32) Layer { + var offsets: [columns]u32 = undefined; + var offset: u32 = 0; + for (primes, 0..) |p, i| { + offsets[i] = offset; + offset += p; + } + std.debug.assert(offset == rows); + return .{ .layer_id = id, .rows = rows, .multipliers = multipliers, .primes = primes, .offsets = offsets }; +} + +pub const layers = [_]Layer{ + layer(1, 384006168, .{ 76632096046245, 4839876093313, 35959672319349, 73987337458391 }, .{ + 16000057, 16000079, 16000081, 16000097, 16000121, 16000129, 16000133, 16000183, + 16000189, 16000207, 16000211, 16000253, 16000277, 16000289, 16000307, 16000321, + 16000339, 16000381, 16000393, 16000399, 16000403, 16000409, 16000447, 16000463, + }), + layer(14, 384016682, .{ 67716810739261, 51510806800915, 30921347202721, 82619226485591 }, .{ + 16000477, 16000487, 16000499, 16000507, 16000511, 16000573, 16000609, 16000627, + 16000667, 16000669, 16000693, 16000697, 16000711, 16000729, 16000759, 16000769, + 16000781, 16000799, 16000813, 16000819, 16000841, 16000877, 16000879, 16000889, + }), +}; + +fn word(bytes: []const u8, at: usize) u32 { + return std.mem.readInt(u32, bytes[at..][0..4], .little); +} + +/// Borrowed packed metadata; parent owns both the blob and its resident Metal upload. +pub const TokenMap = struct { + bytes: []const u8, + + pub fn parse(blob: []const u8) !TokenMap { + const header = 96; + const layer_size = 232; + const map_offset = header + layers.len * layer_size; + if (blob.len != map_offset + raw_vocab * 4 or !std.mem.eql(u8, blob[0..8], "DSENGR01")) + return error.InvalidEngramMetadata; + const expected = [_]u32{ raw_vocab, compressed_vocab, pad_id, order, heads, layers.len }; + for (expected, 0..) |value, i| if (word(blob, 8 + i * 4) != value) return error.InvalidEngramMetadata; + // Reject a tokenizer which happened to have the right size but normalized differently. + const tokenizer_sha = [_]u8{ + 0xc9, 0x0d, 0xfa, 0x01, 0x24, 0x9d, 0xb1, 0xbe, 0x42, 0x45, 0x78, 0x0a, 0x05, 0x2e, 0xde, 0x75, + 0x2e, 0x13, 0x61, 0xc6, 0x12, 0xac, 0x6d, 0x08, 0xe2, 0xbd, 0xad, 0xa7, 0xd5, 0x99, 0x47, 0x6b, + }; + if (!std.mem.eql(u8, blob[32..64], &tokenizer_sha)) return error.InvalidEngramTokenizer; + for (layers, 0..) |meta, i| { + const at = header + i * layer_size; + if (word(blob, at) != meta.layer_id or word(blob, at + 4) != meta.rows) return error.InvalidEngramMetadata; + for (meta.multipliers, 0..) |v, j| { + if (std.mem.readInt(u64, blob[at + 8 + j * 8 ..][0..8], .little) != v) + return error.InvalidEngramMetadata; + } + for (meta.primes, 0..) |v, j| if (word(blob, at + 40 + j * 4) != v) return error.InvalidEngramMetadata; + for (meta.offsets, 0..) |v, j| if (word(blob, at + 136 + j * 4) != v) return error.InvalidEngramMetadata; + } + const result = TokenMap{ .bytes = blob[map_offset..] }; + for (0..raw_vocab) |id| if (word(result.bytes, id * 4) >= compressed_vocab) return error.InvalidEngramTokenMap; + if (try result.get(2) != pad_id) return error.InvalidEngramTokenMap; + const map_sha = [_]u8{ + 0xc6, 0x0a, 0x86, 0x32, 0x2e, 0xc1, 0x7b, 0x41, 0x42, 0xbf, 0xef, 0x3c, 0x57, 0xa8, 0xd8, 0x1f, + 0xb4, 0x28, 0x55, 0x0c, 0xdf, 0x48, 0x7f, 0x88, 0xa4, 0x32, 0x0c, 0xb5, 0x9f, 0xe4, 0x64, 0x81, + }; + var digest: [32]u8 = undefined; + std.crypto.hash.sha2.Sha256.hash(result.bytes, &digest, .{}); + if (!std.mem.eql(u8, &digest, &map_sha)) return error.InvalidEngramTokenMap; + return result; + } + + pub fn get(self: TokenMap, token: u32) !u32 { + if (token >= self.bytes.len / 4) return error.InvalidEngramToken; + return word(self.bytes, @as(usize, token) * 4); + } +}; + +/// Only the previous three positions are retained, including DEAD positions; newest is first. +pub const History = struct { + tail: [order - 1]i32 = .{ dead, dead, dead }, + position: u64 = 0, + + pub fn reset(self: *History) void { + self.* = .{}; + } + + pub fn snapshot(self: History) History { + return self; + } + + /// Restore before replaying the accepted prefix of a speculative chunk. + pub fn rollback(self: *History, saved: History) void { + self.* = saved; + } + + pub fn push(self: *History, compressed: i32, meta: Layer) ![columns]u32 { + if (compressed < dead or compressed >= compressed_vocab) return error.InvalidEngramCompressedId; + var tokens: [order]u32 = @splat(pad_id); + var blocked = compressed == dead; + if (!blocked) tokens[0] = @intCast(compressed); + for (0..order - 1) |i| { + blocked = blocked or self.position <= i or self.tail[i] == dead; + if (!blocked) tokens[i + 1] = @intCast(self.tail[i]); + } + var result: [columns]u32 = undefined; + var rolling = @as(u64, tokens[0]) * meta.multipliers[0]; + for (1..order) |shift| { + rolling ^= @as(u64, tokens[shift]) * meta.multipliers[shift]; + for (0..heads) |head| { + const col = (shift - 1) * heads + head; + result[col] = @as(u32, @intCast(rolling % meta.primes[col])) + meta.offsets[col]; + } + } + self.tail[2] = self.tail[1]; + self.tail[1] = self.tail[0]; + self.tail[0] = compressed; + self.position += 1; + return result; + } +}; + +/// Single sequence, token mask bytes (0=DEAD), output [tokens,24], no allocations or lost chunk history. +pub fn hashChunk(history: *History, map: TokenMap, meta: Layer, ids: []const u32, mask: ?[]const u8, out: [][columns]u32) !void { + if (out.len != ids.len or (mask != null and mask.?.len != ids.len)) return error.InvalidEngramChunk; + // Validate the entire chunk before mutating history. + for (ids) |token| _ = try map.get(token); + for (ids, 0..) |token, i| { + const compressed: i32 = if (mask != null and mask.?[i] == 0) dead else @intCast(try map.get(token)); + out[i] = try history.push(compressed, meta); + } +} diff --git a/zig/src/families/deepseek_v41/engram_test.zig b/zig/src/families/deepseek_v41/engram_test.zig new file mode 100644 index 0000000000..dd085a8744 --- /dev/null +++ b/zig/src/families/deepseek_v41/engram_test.zig @@ -0,0 +1,247 @@ +//! Behavioral hash, rollback, selected-row dequantization and per-copy signed-sqrt gate regressions. +const std = @import("std"); +const hash = @import("engram_hash.zig"); +const engram = @import("engram.zig"); +const mtl = @import("metal"); +const View = engram.View; + +// Generated offline with the official NumPy multipliers and prime-bucket algorithm, not the native code. +const first = [_]u32{ + 8939594, 28321402, 40265357, 55817216, 71147020, 86924254, 110813108, 121427189, + 128454377, 156247504, 165979524, 188168291, 198564788, 211763979, 239563936, 241631034, + 263018334, 286373017, 297618161, 319241270, 333656732, 339279600, 364226324, 373889199, +}; +const third = [_]u32{ + 13176822, 30752650, 42532473, 56771564, 70133176, 85254602, 108815600, 115334181, + 138863141, 149049926, 167314083, 191090346, 204680718, 211476972, 237672992, 245604111, + 269210034, 282954889, 298312790, 313992267, 329778842, 345458689, 359433926, 374584261, +}; +const after_dead = [_]u32{ + 762556, 18016262, 38494153, 58317688, 64056565, 81970637, 106927994, 122902996, + 129060773, 153088767, 160206490, 178949865, 205667218, 211027556, 235070602, 251994813, + 263310652, 278975004, 292595948, 315407209, 325281398, 348093105, 353903080, 377405725, +}; + +test "official hash IDs preserve order, padding and globally unique layer buckets" { + var history: hash.History = .{}; + const a = try history.push(7, hash.layers[0]); + try std.testing.expectEqualSlices(u32, &first, &a); + _ = try history.push(9, hash.layers[0]); + const c = try history.push(11, hash.layers[0]); + try std.testing.expectEqualSlices(u32, &third, &c); + for (hash.layers) |meta| for (meta.primes, meta.offsets) |p, offset| { + try std.testing.expect(p >= 16000000); + try std.testing.expect(offset + p <= meta.rows); + }; + var high: hash.History = .{ .tail = .{ 1234, 5678, 42 }, .position = 3 }; + const result = try high.push(99091, hash.layers[1]); + const expected = [_]u32{ + 3315102, 30010869, 33829090, 51274514, 77267621, 84401643, 106522093, 127296527, + 137402994, 151593930, 162661867, 180852958, 195297507, 213361283, 228864003, 255457679, + 262256667, 282063670, 300635716, 304966933, 321424067, 350721784, 358839309, 370654406, + }; + try std.testing.expectEqualSlices(u32, &expected, &result); +} + +test "dead image positions block all older lookbacks and snapshot rollback restores the exact boundary" { + var history: hash.History = .{}; + _ = try history.push(7, hash.layers[0]); + _ = try history.push(9, hash.layers[0]); + const saved = history.snapshot(); + _ = try history.push(hash.dead, hash.layers[0]); + const got = try history.push(13, hash.layers[0]); + try std.testing.expectEqualSlices(u32, &after_dead, &got); + history.rollback(saved); + const replay = try history.push(11, hash.layers[0]); + try std.testing.expectEqualSlices(u32, &third, &replay); + history.reset(); + const reset = try history.push(7, hash.layers[0]); + try std.testing.expectEqualSlices(u32, &first, &reset); + try std.testing.expectError(error.InvalidEngramCompressedId, history.push(-2, hash.layers[0])); + try std.testing.expectEqual(@as(u64, 1), history.position); +} + +test "all prefill/decode partitions preserve hashes including a dead token at the chunk boundary" { + var bytes: [20 * 4]u8 = undefined; + for (0..20) |i| std.mem.writeInt(u32, bytes[i * 4 ..][0..4], @intCast(i), .little); + const map = hash.TokenMap{ .bytes = &bytes }; + const ids = [_]u32{ 7, 9, 11, 3, 13, 15, 17 }; + const mask = [_]u8{ 1, 1, 1, 0, 1, 1, 1 }; + for (hash.layers) |meta| { + var whole: hash.History = .{}; + var expected: [ids.len][hash.columns]u32 = undefined; + try hash.hashChunk(&whole, map, meta, &ids, &mask, &expected); + for (0..ids.len + 1) |split| { + var chunked: hash.History = .{}; + var actual: [ids.len][hash.columns]u32 = undefined; + try hash.hashChunk(&chunked, map, meta, ids[0..split], mask[0..split], actual[0..split]); + try hash.hashChunk(&chunked, map, meta, ids[split..], mask[split..], actual[split..]); + try std.testing.expectEqualDeep(expected, actual); + try std.testing.expectEqualDeep(whole, chunked); + } + const saved = whole.snapshot(); + var invalid: [2][hash.columns]u32 = undefined; + try std.testing.expectError(error.InvalidEngramToken, hash.hashChunk(&whole, map, meta, &.{ 1, 20 }, null, &invalid)); + try std.testing.expectEqualDeep(saved, whole); + } +} + +test "raw tokenizer IDs are compressed before hashing and normalization-equivalent tokens share hashes" { + var bytes: [4 * 4]u8 = undefined; + for ([_]u32{ 7, 9, 11, 9 }, 0..) |id, i| std.mem.writeInt(u32, bytes[i * 4 ..][0..4], id, .little); + const map = hash.TokenMap{ .bytes = &bytes }; + var a: hash.History = .{}; + var b: hash.History = .{}; + var out_a: [3][hash.columns]u32 = undefined; + var out_b: [3][hash.columns]u32 = undefined; + try hash.hashChunk(&a, map, hash.layers[0], &.{ 0, 1, 2 }, null, &out_a); + try hash.hashChunk(&b, map, hash.layers[0], &.{ 0, 3, 2 }, null, &out_b); + try std.testing.expectEqualDeep(out_a, out_b); + try std.testing.expectEqualSlices(u32, &first, &out_a[0]); + try std.testing.expectEqualSlices(u32, &third, &out_a[2]); +} + +fn view(buffer: mtl.Buffer) View { + return .{ .buffer = buffer }; +} +fn bf(value: f32) u16 { + const bits: u32 = @bitCast(value); + return @truncate((bits + 0x7fff + ((bits >> 16) & 1)) >> 16); +} +fn float(bits: u16) f32 { + return @bitCast(@as(u32, bits) << 16); +} +fn completed(cb: mtl.CommandBuffer) !void { + cb.commit(); + cb.wait(); + if (cb.failure() != null) return error.EngramGPUFailure; +} + +test "Metal hashes chunks with image breaks and rolls back bounded GPU history" { + const pool = mtl.objc.Pool.push(); + defer pool.pop(); + const device = try mtl.Device.init(); + defer device.deinit(); + var p = try engram.Pipelines.load(device); + defer p.deinit(); + const queue = try device.queue(); + defer queue.deinit(); + const ids = try device.buffer(7 * 4, 0); + defer ids.deinit(); + @memcpy(ids.slice(u32, 7), &[_]u32{ 7, 9, 11, 3, 13, 15, 17 }); + const map = try device.buffer(20 * 4, 0); + defer map.deinit(); + for (map.slice(u32, 20), 0..) |*id, i| id.* = @intCast(i); + const mask = try device.buffer(7, 0); + defer mask.deinit(); + @memcpy(mask.slice(u8, 7), &[_]u8{ 1, 1, 1, 0, 1, 1, 1 }); + const history = try device.buffer(engram.history_bytes, 0); + defer history.deinit(); + const saved = try device.buffer(engram.history_bytes, 0); + defer saved.deinit(); + const out = try device.buffer(7 * 24 * 4, 0); + defer out.deinit(); + const replay = try device.buffer(24 * 4, 0); + defer replay.deinit(); + const cb = queue.commandBuffer(); + var e = cb.compute(.serial); + engram.encodeReset(e, &p, view(history)); + try engram.encodeHash(e, &p, hash.layers[0], view(ids), view(map), view(mask), view(history), view(out), 3); + try engram.encodeCommit(e, &p, view(ids), view(map), view(mask), view(history), 3); + e.end(); + var blit = cb.blit(); + engram.encodeSnapshot(blit, view(history), view(saved)); + blit.end(); + e = cb.compute(.serial); + try engram.encodeHash(e, &p, hash.layers[0], view(ids).shifted(12), view(map), view(mask).shifted(3), view(history), view(out).shifted(3 * 24 * 4), 4); + try engram.encodeCommit(e, &p, view(ids).shifted(12), view(map), view(mask).shifted(3), view(history), 4); + e.end(); + blit = cb.blit(); + engram.encodeRollback(blit, view(saved), view(history)); + blit.end(); + e = cb.compute(.serial); + try engram.encodeHash(e, &p, hash.layers[1], view(ids).shifted(16), view(map), null, view(history), view(replay), 1); + e.end(); + try completed(cb); + var cpu: hash.History = .{}; + for (ids.slice(u32, 7), mask.slice(u8, 7), 0..) |id, alive, i| { + const want = try cpu.push(if (alive == 0) hash.dead else @intCast(id), hash.layers[0]); + try std.testing.expectEqualSlices(u32, &want, out.slice(u32, 7 * 24)[i * 24 ..][0..24]); + } + cpu = .{ .tail = .{ 11, 9, 7 }, .position = 3 }; + const want = try cpu.push(13, hash.layers[1]); + try std.testing.expectEqualSlices(u32, &want, replay.slice(u32, 24)); + try std.testing.expectEqualSlices(i32, &.{ 11, 9, 7 }, history.slice(i32, 4)[0..3]); +} + +test "Metal gathers only selected FP8 rows with rowwise scales and gates each mHC copy independently" { + const pool = mtl.objc.Pool.push(); + defer pool.pop(); + const device = try mtl.Device.init(); + defer device.deinit(); + var p = try engram.Pipelines.load(device); + defer p.deinit(); + const queue = try device.queue(); + defer queue.deinit(); + const table = try device.buffer(3 * 272, 0); + defer table.deinit(); + @memset(table.slice(u8, 3 * 272), 0x7f); + const scales = try device.buffer(3 * 12, 0); + defer scales.deinit(); + @memset(scales.slice(u8, 3 * 12), 255); + for (0..3) |r| { + @memset(table.slice(u8, 3 * 272)[r * 272 ..][0..256], if (r == 0) 0x38 else if (r == 1) 0xb8 else 0x7e); + for (0..8) |g| scales.slice(u8, 3 * 12)[r * 12 + g] = @intCast(127 + g); + } + table.slice(u8, 3 * 272)[2 * 272] = 0x01; + table.slice(u8, 3 * 272)[2 * 272 + 1] = 0x80; + scales.slice(u8, 3 * 12)[12 + 7] = 255; + const ids = try device.buffer(24 * 4, 0); + defer ids.deinit(); + for (ids.slice(u32, 24), 0..) |*id, i| id.* = @intCast((i * 2 + 1) % 3); + const gathered = try device.buffer((engram.gather_dim + 16) * 2, 0); + defer gathered.deinit(); + const hidden = try device.buffer(2 * 4 * 2, 0); + defer hidden.deinit(); + for (hidden.slice(u16, 8), 0..) |*v, i| v.* = bf(if (i < 4) 1 else 2); + const kv = try device.buffer(12 * 2, 0); + defer kv.deinit(); + for (kv.slice(u16, 12), 0..) |*v, i| v.* = bf(if (i < 4) 1 else if (i < 8) -2 else 3); + const q = try device.buffer(8 * 4, 0); + defer q.deinit(); + for (q.slice(f32, 8), 0..) |*v, i| v.* = if (i < 4) 1 else 0.5; + const k = try device.buffer(8 * 4, 0); + defer k.deinit(); + for (k.slice(f32, 8), 0..) |*v, i| v.* = if (i < 4) 1 else 2; + const output = try device.buffer(8 * 2, 0); + defer output.deinit(); + const dead_mask = try device.buffer(1, 0); + defer dead_mask.deinit(); + dead_mask.slice(u8, 1)[0] = 0; + const masked_output = try device.buffer(8 * 2, 0); + defer masked_output.deinit(); + const cb = queue.commandBuffer(); + const e = cb.compute(.serial); + try engram.encodeGather(e, &p, .{ .weight = view(table), .scale = view(scales), .rows = 3, .weight_stride_bytes = 272, .scale_stride_bytes = 12 }, view(ids), view(gathered), 1, engram.gather_dim + 16); + try engram.encodeGate(e, &p, .{ .q_weight = view(q), .k_weight = view(k), .dim = 4, .copies = 2, .hidden_stride = 8, .kv_stride = 12, .output_stride = 8, .eps = 1e-20 }, view(hidden), view(kv), null, view(output), 1); + try engram.encodeGate(e, &p, .{ .q_weight = view(q), .k_weight = view(k), .dim = 4, .copies = 2, .hidden_stride = 8, .kv_stride = 12, .output_stride = 8, .eps = 1e-20 }, view(hidden), view(kv), view(dead_mask), view(masked_output), 1); + e.end(); + try completed(cb); + for (ids.slice(u32, 24), 0..) |r, col| for (0..256) |d| { + const got = gathered.slice(u16, engram.gather_dim)[col * 256 + d]; + if (r == 1 and d >= 224) { + try std.testing.expect(std.math.isNan(float(got))); + continue; + } + const base: f32 = if (r == 2 and d == 0) 0x1p-9 else if (r == 2 and d == 1) -0.0 else if (r == 0) 1 else if (r == 1) -1 else 448; + const scale: f32 = @floatFromInt(@as(u32, 1) << @as(u5, @intCast(d / 32))); + try std.testing.expectEqual(bf(base * scale), got); + }; + const gate_positive = 1.0 / (1.0 + @exp(-@sqrt(@as(f32, 2)))); + const gate_negative = 1.0 / (1.0 + @exp(@sqrt(@as(f32, 2)))); + for (output.slice(u16, 8), 0..) |v, i| { + const want = bf(if (i < 4) 1 + 3 * gate_positive else 2 + 3 * gate_negative); + try std.testing.expectApproxEqAbs(float(want), float(v), 0.015625); + } + try std.testing.expectEqualSlices(u16, hidden.slice(u16, 8), masked_output.slice(u16, 8)); +} diff --git a/zig/src/families/deepseek_v41/fixtures/hc_attention_rms.json b/zig/src/families/deepseek_v41/fixtures/hc_attention_rms.json new file mode 100644 index 0000000000..d1f1c2b61d --- /dev/null +++ b/zig/src/families/deepseek_v41/fixtures/hc_attention_rms.json @@ -0,0 +1,25 @@ +{ + "embedding_bf16": "WT1bPAO857tZvTS9Cr2HvDY9MT2nvUI867vvPIG9Xr3wPMs8GLwLvCG91b1CPf87mTzuvC69rTzOvM28x7w+PSC6VL0YPOG8Fb1TvRE84zwNuw48pTwrvF89OTxEveU8SDybPBA9Yz0XPKU8Nj33PJK8jjtTvNW8C731PDk8Rz0SvAK9l7xnPB69ojvNuxM9y7yMvDC97Dx3PA89Ib2TO0k8j7orvDc7xbwwvCM9lLydvDS9OD1JPQC9JL2yvBu8ebyCvUE9Qz3+vDm8Bb0XPGG8gryUuAi8ZT1vvN+8wbyQPI47orz/vCE93jzVPHU90DwgvVe8rLzPvDe9Xr1tPZK8ojtCvcG84byJOzq9QD2APGE9Xzu3OwY90LzkPNY9iLsZPao8kz2Ivbs85LxKvZu9AjuiPQO9BL6RvAk9hL37u+08gjoavBw97rxDPXq5kz3vO5e7arp3vX+9hj2dO6m8B7sBPHS9jDywPGI907zYvAy8P7y9PDw8u7zrO1O8rjzLvD28Yz3yu5u8lLz0vCa9kjxuPE+9ED1XvJW7RbwfPDe9Mz1yvRy9Br0CPNc8OL2zPLI8tjwdPQw8Fb03vIM8kTzrvPU8DTwgvdM8YbwJPKY877vVPLo8Y7x6PAw9IbyOPEu9+TxuPfo8E7zVPO48ybzNPOe8EbtlvYi8Kb3VvCI8Wz2rvb88Wz1HvYe9oLzFPMY8pDyCPXO8k7yQPQq9IrxbvS89JjwKvQo7Jb0QvVa9oDxWPLM8rrgMvI46mjwWPdi8nzwevUG9Dz3eumy8K70bPZS9Jz2/vIO9xrxLvZi9W73GOsY9mL2OvCe8BL1DvOE8D70tvbU9mzxPvT082zwnvCy9Ar0+O1s9qTwbvIY9Sb2qvTY9KzvvvCA93TxAPeG83TtbPN07s7vXu2M8RjzyvAe9wb1fvUk9YrwwvE+8nbywPVG8WzsDPZI9XD2RvG09+DybPAo81zx8PdI8kr0JvJI7Xj1GPTS9irycPFS8gTzcvES9wLwvPY+9Bju2vRs9IDziPF09GD3dvHA7ML0MvEa9nroCPbo8yrtcvZg7QT3WvC47aLxmPKa7zbwVvGq7Dz30Oyc9Bz2FPBo9Ob14vVW8ELsDPUc8qL2kvCA8DbzlOz49EbwsvS8907wQO5w6sDzcuo085jt3Pdu6Hr0UPBm9OLzVvOq8LT0wO8y7Hz2/vFa9rLwePSC91LyXPa87rr0xveK8jDuMu8C54rx6uzU7HT3AvLE8Jj37O047/zz1PB+7Ab0QPDa9Oz2JvZW8Lb3guwQ9njtivey8vTyhOuE8Brx5vXC80jxdOw08i70OvcS8MD2qvbu8XbyZPLm9mz1aPV66iTx3vMQ7oTyyPIw9PbuOuzM9HjzgO4c7ubzivS69PDzTvLi8H712u767ZL2dPFk9gTzvvK48BTwOvYA9TbtlPIy8Vj0wPSu8D7x2vZQ88ruvPLy8tjwyPSk99rycOxk91DzgvL87pjyGPUi8Uz1ivBS9hb28OjM9izxevFq7Rb39vK07fL2QvcU8uD1vvPq6TLz2PCk9hLzhvIC7gzyBO2Q65DySux6967zbvA09Iz2cPVe8rrwmvbC8djwtPVe8Pz1qvUi9e71ZvYU9R7okPS49jbpIvaY8QbwiPee8rLwKvbE6WT2MPFa8YbxJvLo7Hr0iPVM94DzMu4s8Ojw5PRs9N730O568Fz27vFK8tL2uvEa8irrtO0K89TtAPVk8vbgmvTk9pzqDvLs7KTxtO6W8GjoWPCc9DjxBPZi9oryoPJS8O72jvBu9Fz3lPKA8bj1lPAS9UD0iPQ48KbxFPJy9J703Pbi8/rwqPVs7Er3Iu3q9qDsvvR28VrxzPVE8Y72UPB+9WbsfvS+8KL2BOu08B71ZPVK6Nbo0PZg9iT1pPYE8RD0IPB89Mr3NPEG8oz2wvLU8QjzavLK7qLwgve88ybxCPV68obxbvbu8f71xPGa87LwRPa08Pj1vvG89mz1WPdk8E711O5C89zwXPOy8hDzxPAc9ELwqvGI9I70SO7Q7Ab3AOzg8abtfvTe8zbzAvLS8ibyVPTu9tTyYPKy857wnPZi9JDx5uz07E70MPVq8ZLysOy67BT00Pda8bTx0PN082T0nvdS8Lztyuzm95DyoO1I9vLv5PBO9FD2kPWQ9kLuguQY8A73LPD27pryUvPq8Rb2Pvf68kjxzvGS9+LyDvOC8TDyRPAG9HDy0vLW89DyGPQg78LqMOza9ULt+POM44zzRvIU9xTyLPQc8zbxtvaY9bLuoPKw79zvMO7U8h72pPAa9ML0BvUK907xDvZC9Fbx3PfA8VDxsvW88Bz0TvDK91DwrPIk9ab2uu0a8iTtBvck8sjz7PCQ9D70JvQe94DrHOhG7hLzvvJ894DwxO2q7mb1jPDY8qTzPvEM9N7zZPHE9IboPPUM84zxbO0y9q7ylOh68JD3/u5c7ujwKPIu7yTzLvOO8Ej0YPdE9r726PR28C732PBW8wztrvZY8eLyVPLU8T7xhPea9i7qvPES7qbsvPI08jj2uPOM8T71bvOC8ijwrPY28G707PeO8JD0BvC85sbwPPA491bzNO5Y6J7wbPX88n71hPA+9wbyzPBi7kj2JPM+7j7sROgG8Zj2nPJ88uzwGvJE9j70PPay7yLz+vAC9Sj19vYe8hz3OvBW9DrswvYM8Eb2dvGy9/TuKPeI7JTwIvUk9mLuLvI68rrx2vUg9izxfPf08ez33vB+8L70lvdk8Sb0lvYY8Pry0POk7yDy/PCA8cDwNPQY8dT2DvYu6FT2dPWy8C7wcPUw9nzxhvKA9t7sWPci8Tr25vL47Vb02vBQ9j71vva+8tzyNPDe9lrm3PAK82jq1O2M7WbuXvCw9krsmvag7tDoIPXM86zzJPAU9aj2bvRG8uD3SOqa7XrxNuy09gDvHPF+93DwxPAu9Ej1FPU69hTuyPOu8L70avQ89zTqzvUk9tjvvPBw7u7zEO7k8Ez0hO0U7NL01PQM83zzJO3y8oDz8PO0797yOPIG9nLx9PLs8sbx2PZa7kT2NPCe8k7vUPJU6Gb0fPL48cDzDOzQ8RLxKPU89Wr36PJY8rDy+uya7E7wMPau6TryIO6O9kDyyvc87Er3hvAg8BLzWPEi8yzxqO5I9vLwWvRs9sryUPCa8trw6PA09EDuNvaa7QDxXvSq8U71fvHQ9M71QvU88TLuYvV89xrxFPXS8/jxAu2E9cLyZPL29+DvHPOq8QL0XvCi9TT0JPX+8prxPPSe9wr7FvG09OD2mPJM8g72NvLS80jytPLo8F73cOz+9CD2LO1Q9Mrx1vA+9WT2UO4K9MT1uPIk96L1Qu9i8cL1oPU69v7rePNg7Kz2ePLA7Dj0oPEU9Mj3/vDY9hL2SO488J7sGvIE8Kz1Xuxs9KDwCPpa8O725vGA8SrxAvSI8A73HvF47n7x7PEA9ejyWPUw8NT0TPXo9DT2ePGu9yjzXu4I9tTsAPee97rsEvSO9GDw/PEq96DvOPQS8Yz1dvSw9cz2vOxq71boZvVM8AD1vvYQ5UT08POm8zjuEvZy8JT0Puw466LyfPfg87zqFvMw6Ujzqulm6fz2muwM9t72pPc87+LzIPci8xLzzO2S95LtoPXu9bDx0vBG8/TzPPHC97zzWPDe9k7wXPJQ78rwavQW9gj2NOFw8/rxgvX28gjwRvei8F7ywvDW9z7s0PUE90rsePV2987yZO8o8Rj2TO8e7mT3oPM47zDs3vBS90jykPBa9zTyNvOM8kTwTvT87Wjz2PLi8rDs8ugS9CT11u3e8Wr0rvNs7ITz3vA09T73bvIu8qjyIvYC9oz21vIC9Z7uAPEs9Gr0MvYe84ztXPeq86TykvAW9FD0uvII8ELxAvK67Sj3GPIe9HrxcPAW9yjxdPSc9RL3kvC48gbysPBg9BL0SvUE83jzCPMI7Cryyu448+rr0PEM8Wj3mvAY8mLyGuyw8Mjp4vcS9AjwlPXw8Rz1BPq89HT2yu9i8Zbz4Ois9S701Oym9FrwIvaI9lz1nPMO8nb0OutA7rT2IPFa96ryrvTG9e73xvKS8ETzsvGs95zuzPC28dz2dPIc9/DxPvGG8tDw+PGo8h70HPCq93TwqPJG6erznO8C8qbxfPBK8iD0EvWw68bwpO2a9lbvSPHE73DoEPGo9YD3vOzY9Q7ouPCo9I7wjPeu65TysvBA7gD2VO5S9BD07vbo8hL2QPG28AD0vvWG9JL3EPFw9q72guw68qzwRPRy9rDybPPG8BL3svGK9nj17PWi7ETwEO+s7Czz8u/E80DyPvFA9fLyHPEI9vT1ovJe7Gb0aPRQ8br0IPVe8Wr04u8c7BTw8vT+9Kb3ZPJW9+DxQPFC8UrzBPDc9Jb2Dvbq8Sz2zPIa9aT17POO8lbzEPL88Ar66O4U8Zj0Xu5W8Vz0NPSQ9tr2dvIM8PL0VvMs8n7wBvXq9sTuCPbu9ezwBvQO9Ubw4PSA9ITyruwm70bwSPUA8hDwPvZ89F73tvOa7Ij3OuZU8AT1svb28P7xIOzu8jz1oPQo9HDwePcG8ozy+vSm9vjyJPEW9ezyOPO28tTzLu8E8Er1mvdK8TD25vCO9fz1VPJu9BbxxvGc8rbwJvYO8bTzKPIo9Rb0yPJo82LzAu9I8Bz1XvGI9RrwMvSE9IjvAvA08FzoUvbQ8PLxbvfm8Zz0zvIK7zTv/PF88Mz1PvJa9IT3JPKW8Sb0QvQW8cjyjPLs737z5O4+807w0vQs9ZD0LvUk9Gj20PPe8I7suvOm8l7xVvca8KrtzvQ89QzyHPWU8ejzUPA+9Aj2aPBY9ebwmPXy7bj1mPS09Z7sLPZ+8KL28PCS9z7xQvW47QTw3vdu7/DvhvPq8X7ySvTq6O72nPUY80LwJvR496TxXPIU7LrywPfq87zz5uwW9/DsEvUI8Qr2wPPE7pz1SvbS8Xjx5vTe8Qj0LPcM9JjwzPZa8HT0zvBw9KjyIPZQ9WLwTPIg8cTutvHm8+Lweveo8k72ivOM8Sz17vYO9VD0Zvek8wjzAvdg8cr0IPFo9mLygPZe9GTz+OYc9mD1NvBs97TyHvTq96bwovXE8zTtIPK08qz2XPCw8MT2/O0m9ezwEPE07lT1uPU29s7zHPAO9CD3Ru2g8K71yPUA8nD3Ku0I8YT0ePU48TbzYu1s8sDwtPY29BD0UPPI74joFPUs9rr0uPD88Cb3CvOa8rjx1vVe8xbzlO6S8yTyBPJq7YLpOvLe8IbyzPDW9C7vkO8s8izwtvQQ9gbwbvIW8HT5PPXo8ID0oPAu8dbstvRq7pzxkvMM87jymPcE6BDyOvSI9w7tiPXW8vbwJvAi8pryJvHa6oz3APPS8QD3wvIE94Ty8vNc8Qz2RPGs9LD3YO4+9r7yhvEO8nzutvDe88bxVPHc8tTwuvV68Ab0NO5w9ijz5O6W8S71UPQG87TyIvAA9KLyWuys9/buVPHG8dL3oPMg8oTy7vNO86DlLvQs94jwUPHK8rTsTvQ49SzwyvXo8XTzbut28aTwQvOS5KbzkvJs7Pbkcvdm8P7x9vek8V70KPb489zx8PVo8gz3lPAE9RD04vSs6Trx6u9M8uDwOPLq7OT0rvSm8Jz2svI08t7yiO5A9X73Au1i9zjxvPES9Qj3zvGw8Tb0+vSw9Vb1pOxu9zL00vYu9QL0fPcs8djy1vS88vD1PPcI8NzyFPIK97zxXvOE8hz3iOg49Gz3XvBA9sr0bvJ884jzkvNy8kbyzO++8U7s/vXo8hj2cvDQ9R72DPYI9P7p/u2m9z7w2vDK8GD02vbc97bwqPP28Yb0xvWY8RjsQvX47eDySvAU9nLwVPVG9Hz3SPIa8f723PEo8Gb28PIW7Nr1cO5M9+rxsPDA9ODz5vIE8Az3QPFu9jTw7PQs9Yj2IvBk9kL2GvAS9zLx6PI+8oLzMuwu9Jj3pvGu8Vr1SvOw7V7yJPLc8G72ovGA8dT1JvKu8KT2CPHU9ET2ZPKM84rn5ug49mD0sPfo8Uz1yu8u8T7kPvXs9qDyrPe27Lb2ePKo8/rswvPS7wb2pvLc7n72VvFe8BzyrPKC8CD2ovHA8oD0ivF07+ryLvTA8mTxtPBS9xTvXO/K8Qb2fPDu8ID2sPLO7Rj0Kve68ibzrus68jrxMOye9ybyFPF88TD2KvfU84Ty1vKM86Lw4vFm9iTzcPCq997wIPBo9TD3MPUg8W7xbPVA93jiwvGA9J70uPbu8Rz0hPM883LxNPR48Jb0HPCu9sDyNuwu8ED3RPP28gr0dPUo8Ej0pvM29tT3dvLy85rw6vZc9k7ynPM+7Q7zeu0u9Rr3tPLK8Fz2FvGs7kbxWvOS7LD2FvDC90jwjvIE8Kb2mvH48PDzlvNC5G7z7PBW9Kb1vPG48oTwkO6e9HT26OzW8QL0APEg9t7uRvA68l73zOaG87LwwvVy7ZLy+vNg7HT0sOyM8vDyevcg7xrx0vNE9wryNvYw7Nz0wvIy9W701vCi8qD2DPba83zx7PSU9+ju5PD69Lj2BvCU9hjlJPQO9sjwdPQS7Mb2ROzm9OjwYvWQ9Ur13O0I9gT3dPKU8xjuVPIk5gjyku1+97rwcvIq9dTsKvVQ88jvLPB894Tv0vAu8yL1XuqC9ibwivSY8RDw1vYw8oTwEvZI8C71xvEM9HztYPXY9FLwdu5G8dDxavDu8ir3ZvPo8tbyWvVu8Kr0pvZA8ZT3Euxe9e7youQ28ZjwHvVk9Dr1OPEQ8/ryfPD+9kb0RPFS91jurvL08pDsFPRS957wLPSa9QLw9PVu8J73+uFK89DxXve68mD2XO4Q9Bb1FvIg8Uz1pPWg9qbtsvI494TwPuzI9hLysu4k9QDvKvPM8bbsGPea7Jb30vBs8yzxavRa9STyWvOc8Sj2KvHy9ZTwqO4y8mLwhvWW8GTxZOzo9wzx+vVK8Srx6vJi8EL2nvCg9AjxwvSM8ZD0uuK88x7zuvDa9UL1SvIe8CD0hvZ088Lymu4I81D2TPIi6OD3aPGk857yOPaA8yTzdvJG8uTsmvcs8ijz8PNE8J70WvG68OL3lu9q8l732vY49Ab1sPG28bbw6vRm9zbxEvUA9+Lw7vH07Yr0QvAo8orxmvHi6FLyavCu9gDyNvBy8zjxAvQY9aT38ux49bTynvAY9ojycvQ080zy9uhi9Zz3bOxC9jT3tu0m8iLuRvYY8s7zQu5g9jT3nvM67LD0nPcG8fTwkuxc6tr11utk8l7uvPDq9Dr2kPVW9Lj2hPCO9Qz1TvY68cL21PD69mLw/O6q84T2JPYO9cz2mPZA8v7xeuXy8hz14vJ08ljxyPZY9Uz16Paq65TmKvGc7OLrou928Ib1mPcC8ub0tPSg7LTz3O6W8/LyIPUM7Trxkvbw9Dr3cvOO8C71aPeS8lrw4vDe8db07PXq5CLzDPMI96DywvAA9KrzrPJY8Dz2jPHG8k7xBvGi9OTyxPMi8QbyIPJu8k7t/POc6rbrWPCi9NTxOPZ49VT0UPSy9Sj1YPCO9JztUPQ68gjwwvLi8jDuRPEw9U70xvcW73btcPbE9/jw/PfW8ND0Kvay8W72wPFU7Iz2bPeG7OTyCPao8nzwUPTI8fLvdO/G6trt1vfy897tBvIa8JzwWPS49uzytPKM8k71VPN+8KT1bvdM8zrxaPD07VT2kPBg9TLyPPJa9xLsjPSe7GT1hvO88QjxSvds8bz2mPGw9xLx8PW89pb0Kuww9jzzAPW+7E7wxvLC8WDxnPAq8sLzNu0C9KD3jPNy8/jvqPKq9I70WPDs8UD27PNE8vjyAvWM9Xrx0vIM8Zjw3vAi9Bj5XvT09j7xvvDm9Rr15PJS8/DuXPKU9vrw0PYm8CzuYPOe8LT0zvQG9aL36uxI8RjxKu667Uj0fO6w8Lb29uqM8hrzmPMW4Xr2OPBm9/zyNPZ+7Lbw4PVi8j72/u4q7tjtJvDO9ED0QPHk9wzybPKI8i727PIe8RjwNPVo9ADwgu1U8ybxJPey8VztTOwc9KD3lO0+9sbwpvTM8gLwQvSQ8SL2ZPNC8ST2pPNC8aT0CPXe9dLuCPGw9YD1fPAY81TxIOye8wrwcPRe9SjwePdw8BT12vQe8Vb0JvYQ96zuTPS09PrzdPJE8rDzmvKe7/Dz9u/K8Zj2IPZ28Ez1SvCc8T7wEvb67R73mO/O8sTvXO3W8FL1Avfs7xTwavVY757x/PcW7GL30vBc91rz0uiY9i71kvIG8WzzQvMc9QrzHPDu9ULvwPGQ9XT26vPy6q7uGvQQ9DT07PCk9mbyHO0S7eD0BPSE9Aj3bOsQ8Fr1dvbO8IT0QPsG81L2UPN28JT0GPYG8lzwsPWy7kLyyPeE8Wru0PBq86btYu/68ibxsPGk8Jj13vMe8jLxqPGg90btGPIO8gT27PJK9P737vF28tro6vZO8Jr20O3A96zw3vZe8eT1yPYw8vDsqPRk7obxnPd87j73lPNs8Hzo2PGW82jxOvYo8vbxPPWU8HD1SPZm8Br3GvKG8ZTylPG89kD3xvH69Ir1+Ozm95DoEPIO8Pj1BPQo9hb05PHW96jxevaC8TT2BuoO807w8vNq8E71JPQy8gz0DvKS8lTyQvTC9vjyUvcG7Qr0WvK+8CL27PcK8Hj25PEo9KD2KvBo9ybv5u628abouvAW96bwpPVG8tzoOO+a7WrxKvcE8xLtQvWs95bqDPa889bsePaY8STkyPbI7FD2HO6W8u7yJvT89FjwOPcG84Tyhvey8arzGOtc81ryyvNs8fT0avYq7Kz26PNK9Szk5vfI8PT0ZvQc8vD1IvaK8Bj2mPAe94bvhPEA9TzyEPZE9zDsKvSI9s71APXS73TyBPKQ8Hr0APQs8bz0zu1e9qDx5vZq9fzybPXa9qr2OvKg9STz1vIs9cLzvPBQ96Tsmvam9/rsMvUo957o6PbA8tbslO3W7az0MPaw8Cr1gPMa8ab1ku828Gb23OwI9b7yYvCQ9aT0WvbG847wevFA7BjwbPRc8hLx5u4i8gDy4PCA9dD2MvFC8iD30PFc9SDyNPHi7xrwyvXW9kT2LPFy9+Tt+PKw8qLwUPe+55DtzvRo9HD0NupG9rjsIPCc7pjpDOwk7Nr2UvMO86zyHvTK8H70lvas9MTwvPZG8hL5UPXg7FzxrvCu9d71LvS69vbwKvVG9tzy2vZe7ED1kvFy8nDvgPIo9BL2DPQ89LL3avEA9Tj1TPYY99r0ZPR27w7tru7Q8O7sBPd+827wqPYM8WDxkPaO8Pjx1Pc26mrzXOyW9mj0Tvc29sjzWuzY9Arx4vUM81Twduhs9hjsCvS89qDudPDM6lj3NuxW7Gb1EPcK8xjzwPAi9Xz0SOw094rkXPdq8ab0/PfI7bbv7uh28GL1YPfw8K7xJPQS9mbxbvMa8xjt0PBK9a70qPSS9HDwHPTO9yTxNPMs8DbxkPCW9lL38O029nz1QvL08hb2wvJS8Zjx6vMC8JTs8PQ28aDwUu1A8Bb0GO8c8Dj1NPFi8G72EPZ48DzxrPbI7ljwYu9e5Nj0TvaC65zyLPU886j0OvZo907u1vCo9Jb0au1E7szwdPSc98Ls0Pdc8Bjz1PLK8FT0Jvmm8l7yzO1E8Uj1BPfu7MD2lvHK8i7wWvTu8TzzlvIm98zvZPBi5gb3ZO4w9xzz7O/C84Tv1vCE8PL1GvRS8Y7z+PMs8nbx3OxG9XrwsvRA927uQvJ+9U71zvDo9oTyVPTS8wTwRvbG8FD3CPYy9vb2QPUC9XD0iPC06PL2VvLa8C72VOz89ZL33vHi8Sr0KPQI9nrxUPQq9xDpOvaO7sjxWPUc8+jxbvco8jDwAPXs8TLyWvPe7vLz7u7y6Wz1Ju7Y8BD0uu2C8j7zbutM7IDz/Oki9YbsoPCC9F7ytvBO85Ls2vb28UDuWO5w8Br0TPSu9ZbwUvfe8dj2gvUA9pT2nPFC9bzy9vLa8+TqCPPY8ibx/PeY8kLw6vfK7vzzzOw88u7wnvcs6mzwwvbu8PLx2PVA6Zj2SvQu9G72rPIy93bxiPQA9Iz3KvJQ9t7zPPX49oTy3vDS7XDzZORY83rwRPeM8/zvVvC+9CLy2vBM9SD3gvB07qzzgvIS8qz2KvOs6iLtIPS+8hT1dvP88lTzUPJq6WL1KvY69WD3HvD+93rzbvAY8HLx3vXK8ujtMPNk5yrxqvKS8nLtevYO9or3lu5C97rwOOma8lT09Pci8iT2KvJI8Hr0Kvcw8Jz0OvPY8kT33O6m9mzubvOq8JD2XOje9Mj1FPZc8pbvYvCK93Tsxu9U8ELomPZo8wbyHPL87+LyHPJ+6c7x2va68i7wqvTa8mj1zvaS8lj23PDC9sryhPSi9sTy9u6C8t7ktvCI9VT6+O7o8vDvfPGG8ozyJPH68tDuQvE69AzwrvPA8YD3MveI74bwDPBO9YD0SO1e9Fj0qO2W8IbvEPAQ9WjwCvb+8s72uOQo6nL2YPKq8Zb2zPJk8Cr0WPGi9Jj2tuxW9izzGPTY81rwEvM28pbnjPbS8gDyIPQQ96bzwPFS9SrqWPJe90zugO+q7G714OkI8vDyeOzW9aLzCPcS8cj1NPci8/rycPLc8Qb2IPPg6irw1PQi9irzkPIk9brzuvAo9cD2pvA87vjyeunK8kL1RvUY8ebrEO/u83DwLvMM8jz2OPVI8FT3evB09PzwgvUs9JT3ovG+8yTvDuGq8urxfvJg9uT0uPY69YzxHvIo8AL0cPSw8trz9PMG9xL0QPdo8CL1bPNm9UjyzO4K907zKu5w8ID0yPBo8s7wwvYu8jrynu328TztyvAQ9YzygvAo9hDxMN9Y8DT2yPc0837yVuhU8kbw3PV07h7wPOw69XD2rPDk7azxXPRQ9Hz0LvVm8zzxkvX+9Gb1GvJE7oL0/uwS8WDxAvYO9JD3xu887Fj3LvEo94zwlPSi74rwnu/Y8ZD2/PAy9/zymOhQ9uDuJvEm8STwLvZS8jj1xPSK9oDygPTk8VT3bPFq7rDsWPJQ8iTwFPQa9ezztvCE9bLs1u/s8bz0fvQe4Q7sfvea8Db0dPca8MD2bPYM8Ir0OPaY6hjwkPSQ6fDsBu1C9zzxNPd65LLuQvVk9ibtMvDS81jxnPWK9SjzTvKi8Sjx3vSg9KT0NPV68Jr0Rvau8DL0IvIk83DxePYK8iz2RO9u8tb3/u6y8LT23PGY9x7wru5E9ojzlPJ28hLyDOx28JLzwvCs9zTzzPNO6gT1xO4m8nr0uu3I8FT1vPFu8Dry+vBG9tbxYvWu8Az1tPKK8HT3CPI49pzxUPQO8sTxmvXK9STxAPLQ9bTy2PMA8tj2GvKu8eLwWvSy9Kjz5uzQ8F733PLK8q7zuO0O9rDx5PYC9BL0kvRu827z8u5S9izz4O5A86Dv3PBE8Gz0dvKc7ozxWvHG9EL1DvZC9KTwNPci83jqevYE8mDzxPNq7Dr3bunA9Tr01vZc7UD2AOhU9dTp0PIE66LxUPFU8GLv4vA89YjxjvaQ8w7y+PAa8eDw1O049Ajw9vMS9R73ovB481zuTvPQ5az1lPcA8urzVu3c95zrSvA47ejzIvIO9WTuSu7Y8JD1sOza9FL2EPMO8nz3yuys8Yz2EOQG9f7zHPEO9LD3QPLA8Xr1MPU88+bxZPKK7dTwNPfS7kTyYu1Y8Sb3zPEA8NL0UPdc8nzqBvJ28gzwTPaY8y7z8vBM8+ryeOiI9vDwzPfc7zbsVvNu8QjxlPfw6ZLwwvJ28FbsCvWW9LT2rveE8HT2FPUg8v7xKPO29VL1dve08Qry3u1E8IbwOPaw86jyuO5g8nz3mvOO8jzy7vAO9BT1CPQq8H72hvNO7ijwvuz+8pL2QvVg9d7sCvtK8U70XPa07IL1rvea8PLugPRS9hDxqvP+8G7ywvHY7OztIvdc627sJvKg80DxFPEQ9dj0Zuwo9uzx2PG87kD1aPac7oj1xvHE7dDyfPMW8Ejucu5e7Ub3UOwc8qDwMPXu6uz3VvF+8j7zEPIk6tLyUPWY7LbypvPW8NbxGuuy6qD1TvWq707wWvfO8Q71yPTQ8Ej1sPU+7wzqdu9c4X7xKvQ88SrzTuxK9qjtZvQW9vjuJvMQ8Ir1gvRo9ojxfPSg9yjyFPIA8A71EO7a8ebzUvIi8FDwUPRe9yr1xPeK6JrsOveC8hzzmO3+8IDySPRa9Jz1MPKE8Dz2SvfQ8xjyWvMC85LyavB28lDwVvQC7TjuGvAK96zyxPIG8VDzkuzq6ZzqsPHY7Az2EvTU9B7zDvNC8mzzsPJE8Kj2JvCK8lDz/PLc8l7xJvFw9Bz1uPIA8sDzXvHA9Zz1Cvam90zyjvAM9qDmGvHo7nDsQPd28bLzZvKg9Cr0bvTE9qLdAPc86Hr2oPKu8drwNvVm8Hr32vKu8cb0ivZU6870HPJk9hbxsPaE8CD2AvF09sLyOPDG9tzz5vK+9nbpBPRc9jT1CPNW7i7xaPai8I72cvB07j7zOO0m9p7xvPYC7pLu3PEy93rwzPQ09EDzEPPM8XbwLO4w9JD1Hu2O9qDm1OxK9yTx8u7y8qryZvNA8FT0Ku5m9TT0LvOO8sbyMPTa9VTy2vKi7Cz2RPJK8JrsrvQ69iL3MPL68F70mPai9NT39OyI8xbyBPVo8yLuBvdm7gTxSO9E8JrwhPBE9RL2fvNe7Hzw+PJy9wTqzPGq7ET0mvYY8NL2TvHU9FD2WPO+88Dw/vWU9VrwavRo9h70RPbS7bz1HvQe727w7PQe7J70ZO0G9Kb4hPK681TswPDO8ozyBPB49Qj33vP47Pr2WvcW8I70UPfw8Vz0qPRW7vrwFOzu9YLmWPEG98bwUPS69Or1cvPc8lTz4OrG7Qb2IPIk9mjwVPLk8zryGvII8U7zdPIW8jLwxvHM8BbyOvPA6Dr3OOS+81rwNvF06tzzRvM08Vj3TPHU7jjsPPXC75rwlPQG88jzaPJS7Ij3ivKw9qjxTPeY8DT0OPTk9Lj1BvEq9RT1TPIy8lroSPdo7ez1AvYy8xzsbPYc9ND25vJQ9qz3mvBA99LtivMG8WLyePLc8xDyrvPC8AjzYPI49V7yuPJo9nT0mvUq8P70pvSi9hbwEvNS7Mz0pPQu7mbxWPIm8u7xrvXK7LzxkPDG9IL0aPS69g72jPD09ELwIPWw9ETytvEA8NTyYPM08xjwPPYe8hjyjO8G8bryGOhw8MTyIvPA7TD06vZy8Br3zPM48Dz1SvbM87b0wuwC9hrxvvTY9VroZPUq8WLyBuxw9sLyWPYi8Eb1SvRc9uzxWu628BL1GvHy9pDuMvAy9A7xPvIU8dbxVuwM9X7wevTC8jL2yvK29ObyYPbM82ryrPLQ6yrwVu068yD2evAu9Bz0qvYm7UjwNPTQ97TuhvFG9pLsHvl+6Yj00PQG817wsvf48jjwiPai7H72JvDM73DyovDI8o7yUvG69qLy0Pbg8VrzOPAs9qzw5vuM78jwRPTA9JLtZPAm8sL0PPRg9HjzoO2g9C7wJvea8VL3IvMa8Oz0Uvby89L28POa8Qz1KvZq8zbuPPDk97jk2vM88/zwnPRu9lLxCPTe9szyuPLQ6mz1vvGG9mb26PA==", + "mixes_f32": "5ertwO6atMABjNfAmaqHQE2ySsG204rBMOp7wJFAr8AAOxE/S0CVuhU2ssD8mqBA2IAxv1nkMT83yZu6uaNIuUHJwbqG2oG/SCKCPzAy3LloCZa7EL8+uv22bLroEMs7", + "scale_f32": "UyCBPWQ7RDxMEXw9", + "base_f32": "ChY2QHj3VcDr8U7AWOUNwHV/hcDK9HzApJWcwXxptb9nNFU+IZzLwZlLo8AJrcU9GSQBP0av4b4WAsrBt7OswV3ty8HInUA+BOflvQtYsMFBCZzB416twTi2s8G+BFdB", + "branch_bf16_bits": [ + 16053, + 16067 + ], + "residual_bf16_bits": [ + 48359, + 48377, + 48359, + 48377, + 48359, + 48377, + 48359, + 48377 + ], + "expected_source_tree_target_bf16_bits": [ + 14092, + 46834 + ], + "provenance": "Token 671, layer-0 attention HC, official model revision 2cba9e42aa026125f3ed06c6d98c1db82f7ca027. Four copies of the actual BF16 embedding; mixes are the independently executed native FP32 projection boundary. Target columns 3093 and 4687 of copy 3 distinguish native old RMS from pinned Torch CUDA single-row mean. Base64 payloads are little-endian BF16 or FP32." +} diff --git a/zig/src/families/deepseek_v41/index_precision_test.zig b/zig/src/families/deepseek_v41/index_precision_test.zig new file mode 100644 index 0000000000..1822f7ad0f --- /dev/null +++ b/zig/src/families/deepseek_v41/index_precision_test.zig @@ -0,0 +1,57 @@ +//! BF16 tensor boundaries are observable through which compressed positions enter sparse attention. +const std = @import("std"); +const mtl = @import("metal"); +const index = @import("csa2_index.zig"); +const kv = @import("kv.zig"); + +// The last key's extra 2^-9 dot term disappears at the source BF16 boundary; all 513 scores must tie. +test "index BF16 dot product and reduction boundaries preserve top-512 tie selection" { + const pool = mtl.objc.Pool.push(); + defer pool.pop(); + const device = mtl.Device.init() catch return error.SkipZigTest; + defer device.deinit(); + const queue = try device.queue(); + defer queue.deinit(); + var ip = try index.Pipelines.load(device); + defer ip.deinit(); + var kp = try kv.Pipelines.load(device); + defer kp.deinit(); + var scratch = try index.Scratch.init(device, 1); + defer scratch.deinit(); + const q = try device.buffer(4096 * 2, mtl.ResourceOptions.shared); + defer q.deinit(); + const w = try device.buffer(32 * 2, mtl.ResourceOptions.shared); + defer w.deinit(); + const raw = try device.buffer(513 * 128 * 2, mtl.ResourceOptions.shared); + defer raw.deinit(); + const storage = try device.buffer(513 * 68, mtl.ResourceOptions.shared); + defer storage.deinit(); + @memset(q.slice(u16, 4096), 0); + @memset(w.slice(u16, 32), 0); + @memset(raw.slice(u16, 513 * 128), 0); + q.slice(u16, 4096)[0] = 0x3f80; // 1 + q.slice(u16, 4096)[32] = 0x3b00; // 2^-9, in a separate FP4 scale block + q.slice(u16, 4096)[128] = 0x3f80; + w.slice(u16, 32)[0] = 0x3f40; // 3/4 + w.slice(u16, 32)[1] = 0x3b00; + for (0..513) |row| raw.slice(u16, 513 * 128)[row * 128] = 0x3f80; + raw.slice(u16, 513 * 128)[512 * 128 + 32] = 0x3f80; + const cb = queue.commandBuffer(); + const enc = cb.compute(.serial); + try kp.encodePack(enc, .{ .buffer = raw }, .{ .buffer = storage }, .{ .rows = 513, .width = 128, .stride = 128, .packed_stride = 68, .block = 32, .kind = .index_fp4 }); + try ip.encode(enc, .{ .buffer = q }, .{ .buffer = w }, .{ .buffer = storage }, scratch, .{ .rows = 1, .q_stride = 4096, .weight_stride = 32, .position = 512, .ratio = 1, .keys = 513 }); + enc.end(); + cb.commit(); + cb.wait(); + if (cb.failure()) |message| { + std.log.err("index precision qualification: {s}", .{message}); + return error.GpuExecutionFailed; + } + const positions = scratch.positions(); + const ids: [*]const i32 = @ptrCast(@alignCast(positions.buffer.contents() + positions.offset)); + for (0..512) |i| try std.testing.expectEqual(@as(i32, @intCast(i)), ids[i]); + const scores = scratch.scores(); + const values: [*]const f32 = @ptrCast(@alignCast(scores.buffer.contents() + scores.offset)); + try std.testing.expectEqual(@as(f32, 0.01171875), values[0]); + try std.testing.expectEqual(values[0], values[512]); +} diff --git a/zig/src/families/deepseek_v41/kv.zig b/zig/src/families/deepseek_v41/kv.zig new file mode 100644 index 0000000000..ac9c4839b9 --- /dev/null +++ b/zig/src/families/deepseek_v41/kv.zig @@ -0,0 +1,162 @@ +//! Cache operators accept projected inputs; no source projection or hidden allocations live here. +const std = @import("std"); +const mtl = @import("metal"); +const sources = @import("kernel_sources"); +const View = @import("view.zig").View; +pub const cache = @import("kv_state.zig"); +pub const Kind = enum(u32) { window_fp8 = 0, main_fp4 = 1, index_fp4 = 2 }; +pub const Pack = extern struct { + rows: u32, + width: u32, + stride: u32, + packed_stride: u32, + block: u32, + kind: Kind, + first: u32 = 0, + ring: u32 = 0, + inplace: u32 = 0, + pub fn validate(p: Pack) !void { + const block: u32 = if (p.kind == .main_fp4) 16 else 32; + const bytes = if (p.kind == .window_fp8) p.width else p.width / 2; + if (p.rows == 0 or p.width == 0 or p.width % block != 0 or p.block != block or + p.stride < p.width or @as(u64, p.packed_stride) < @as(u64, bytes) + p.width / block or + p.inplace > 1 or @as(u64, p.first) + p.rows > std.math.maxInt(u32) or + @as(u64, p.rows -| 1) * p.stride + p.width > std.math.maxInt(u32) or + @as(u64, if (p.ring != 0) p.ring else p.first +| p.rows) * p.packed_stride > + std.math.maxInt(u32) or (p.ring != 0 and p.rows > p.ring)) + return error.InvalidCachePackShape; + } +}; +pub const Pool = extern struct { + rows: u32, + width: u32 = 512, + ratio: u32, + position: u32, + stride: u32, + input_f32: u32, + eps: f32 = 1e-20, + pub fn completed(p: Pool) u32 { + return (p.position + p.rows) / p.ratio - p.position / p.ratio; + } + pub fn validate(p: Pool) !void { + if (p.rows == 0 or p.width == 0 or p.width > 512 or (p.ratio != 1 and p.ratio != 2) or + p.stride < p.width or p.input_f32 != @intFromBool(p.ratio > 1) or + !std.math.isFinite(p.eps) or p.eps <= 0 or + @as(u64, p.position) + p.rows > cache.max_context or + @as(u64, p.rows -| 1) * p.stride + p.width > std.math.maxInt(u32)) + return error.InvalidCompressorShape; + } +}; +pub const Pipelines = struct { + pack: mtl.Pipeline, + pool: mtl.Pipeline, + tail: mtl.Pipeline, + copy: mtl.Pipeline, + publish: mtl.Pipeline, + unpack: mtl.Pipeline, + pub fn load(device: mtl.Device) !Pipelines { + var options = mtl.CompileOptions.mlx(); + options.math_functions = .precise; + const lib = try mtl.Library.fromSource(device, sources.deepseek_v41_kv, options); + defer lib.deinit(); + var p: Pipelines = undefined; + p.pack = try mtl.Pipeline.init(device, lib, "dsv41_pack", false); + errdefer p.pack.deinit(); + p.pool = try mtl.Pipeline.init(device, lib, "dsv41_pool", false); + errdefer p.pool.deinit(); + p.tail = try mtl.Pipeline.init(device, lib, "dsv41_pool_tail", false); + errdefer p.tail.deinit(); + p.copy = try mtl.Pipeline.init(device, lib, "dsv41_copy", false); + errdefer p.copy.deinit(); + p.publish = try mtl.Pipeline.init(device, lib, "dsv41_publish_window", false); + errdefer p.publish.deinit(); + p.unpack = try mtl.Pipeline.init(device, lib, "dsv41_unpack_rows", false); + return p; + } + pub fn deinit(p: *Pipelines) void { + p.pack.deinit(); + p.pool.deinit(); + p.tail.deinit(); + p.copy.deinit(); + p.publish.deinit(); + p.unpack.deinit(); + } + pub fn encodePack(p: *const Pipelines, enc: mtl.ComputeEncoder, x: View, storage: View, args: Pack) !void { + try args.validate(); + try x.requireRows(args.rows, args.stride, args.width, 2); + try storage.requireRows(if (args.ring != 0) args.ring else args.first + args.rows, args.packed_stride, args.width / (if (args.kind == .window_fp8) @as(u32, 1) else 2) + + args.width / args.block, 1); + enc.setPipeline(p.pack); + enc.setBuffer(x.buffer, x.offset, 0); + enc.setBuffer(storage.buffer, storage.offset, 1); + enc.setValue(args, 2); + enc.dispatchGroups(mtl.Size.of(args.width / args.block, args.rows, 1), mtl.Size.of(32, 1, 1)); + enc.barrier(); + } + pub fn encodeUnpack(p: *const Pipelines, enc: mtl.ComputeEncoder, storage: View, out: View, args: Pack) !void { + try args.validate(); + try out.requireRows(args.rows, args.stride, args.width, 2); + try storage.requireRows(if (args.ring != 0) args.ring else args.first + args.rows, args.packed_stride, args.width / (if (args.kind == .window_fp8) @as(u32, 1) else 2) + + args.width / args.block, 1); + enc.setPipeline(p.unpack); + enc.setBuffer(storage.buffer, storage.offset, 0); + enc.setBuffer(out.buffer, out.offset, 1); + enc.setValue(args, 2); + enc.dispatchThreads(mtl.Size.of(args.width, args.rows, 1), mtl.Size.of(32, 1, 1)); + enc.barrier(); + } + /// ratio2 values/gates are FP32; ratio1 values and RMS weight are BF16. Latent output is BF16. + pub fn encodePool(p: *const Pipelines, enc: mtl.ComputeEncoder, values: View, gates: View, partial: View, norm_weight: View, latent: View, args: Pool) !void { + try args.validate(); + try values.requireRows(args.rows, args.stride, args.width, if (args.input_f32 != 0) 4 else 2); + if (args.ratio > 1) { + try gates.requireRows(args.rows, args.stride, args.width, 4); + try partial.require(@as(usize, 2) * args.ratio * args.width * 4, 4); + } + if (args.completed() != 0) { + try norm_weight.require(@as(usize, args.width) * 2, 2); + try latent.requireRows(args.completed(), args.width, args.width, 2); + enc.setPipeline(p.pool); + for ([_]View{ values, gates, partial, norm_weight, latent }, 0..) |v, i| + enc.setBuffer(v.buffer, v.offset, i); + enc.setValue(args, 5); + enc.dispatchGroups(mtl.Size.of(args.completed(), 1, 1), mtl.Size.of(128, 1, 1)); + enc.barrier(); + } + if (args.ratio > 1) { + enc.setPipeline(p.tail); + for ([_]View{ values, gates, partial }, 0..) |v, i| enc.setBuffer(v.buffer, v.offset, i); + enc.setValue(args, 3); + enc.dispatchThreads(mtl.Size.of(args.width, 1, 1), mtl.Size.of(128, 1, 1)); + enc.barrier(); + } + } + pub fn encodeCopy(p: *const Pipelines, enc: mtl.ComputeEncoder, src: View, dst: View, bytes: u32) void { + enc.setPipeline(p.copy); + enc.setBuffer(src.buffer, src.offset, 0); + enc.setBuffer(dst.buffer, dst.offset, 1); + enc.setValue(bytes, 2); + enc.dispatchThreads(mtl.Size.of(bytes, 1, 1), mtl.Size.of(256, 1, 1)); + enc.barrier(); + } + /// Copy only the final window; each destination slot has one writer even for large prefill chunks. + pub fn publishWindow(p: *const Pipelines, enc: mtl.ComputeEncoder, chunk: View, ring: View, rows: u32, position: u32) !void { + if (rows == 0 or @as(u64, position) + rows > cache.max_context) return error.NoCacheRows; + try chunk.requireRows(rows, 528, 528, 1); + try ring.require(128 * 528, 1); + enc.setPipeline(p.publish); + enc.setBuffer(chunk.buffer, chunk.offset, 0); + enc.setBuffer(ring.buffer, ring.offset, 1); + enc.setValue([4]u32{ rows, position, 528, 528 }, 2); + enc.dispatchThreads(mtl.Size.of(528, @min(rows, 128), 1), mtl.Size.of(32, 1, 1)); + enc.barrier(); + } + pub fn snapshot(p: *const Pipelines, enc: mtl.ComputeEncoder, state: *cache.State) !void { + try state.begin(); + p.encodeCopy(enc, .{ .buffer = state.live }, .{ .buffer = state.backup }, @intCast(state.plan.mutableBytes())); + } + pub fn rollback(p: *const Pipelines, enc: mtl.ComputeEncoder, state: *cache.State) !void { + try state.rollback(); + p.encodeCopy(enc, .{ .buffer = state.backup }, .{ .buffer = state.live }, @intCast(state.plan.mutableBytes())); + } +}; diff --git a/zig/src/families/deepseek_v41/kv_state.zig b/zig/src/families/deepseek_v41/kv_state.zig new file mode 100644 index 0000000000..f2b70175a7 --- /dev/null +++ b/zig/src/families/deepseek_v41/kv_state.zig @@ -0,0 +1,111 @@ +//! Shared cache ownership and exact transaction snapshots; appended rows are cursor-delimited. +const std = @import("std"); +const mtl = @import("metal"); +const View = @import("view.zig").View; +pub const owners = [_]u32{ 2, 8, 14, 20 }; +pub const ratios = [_]u32{ 2, 2, 2, 1 }; +pub const index_sources = [_]u32{ 2, 8, 14, 20, 24, 28, 32, 36 }; +pub const main_stride = 288; +pub const index_stride = 68; +pub const ring_stride = 528; +pub const window = 128; +pub const max_context = 1048576; + +pub fn ownerFor(layer: u32, ratio: u32) !usize { + if (ratio == 0) return error.NoCompressedCache; + if (layer >= 40) return error.InvalidCacheLayer; + if (layer < 2 or ratio != (if (layer < 20) @as(u32, 2) else 1)) return error.InvalidCacheOwner; + var found: ?usize = null; + for (owners, 0..) |owner, i| { + if (owner <= layer and ratios[i] == ratio) found = i; + } + return found orelse error.InvalidCacheOwner; +} +pub fn isIndexSource(layer: u32) bool { + return std.mem.indexOfScalar(u32, &index_sources, layer) != null; +} +pub const Source = struct { owner: u32, ratio: u32, rows: u32, main: View, index: View, partial: View }; +pub const Plan = struct { + capacity: u32, + layers: u32, + pub fn validate(p: Plan) !void { + if (p.capacity == 0 or p.capacity > max_context or p.layers != 40) + return error.InvalidCacheCapacity; + } + pub fn packedBytes(p: Plan) usize { + var bytes: usize = 0; + for (ratios) |r| bytes += @as(usize, p.capacity / r) * (main_stride + index_stride); + return bytes; + } + pub fn mutableBytes(p: Plan) usize { + return @as(usize, p.layers) * window * ring_stride + 7 * 2 * 512 * 4; + } + pub fn residentBytes(p: Plan) usize { + return p.packedBytes() + 2 * p.mutableBytes(); + } +}; +pub const State = struct { + plan: Plan, + storage: mtl.Buffer, + live: mtl.Buffer, + backup: mtl.Buffer, + position: u32 = 0, + saved_position: ?u32 = null, + + pub fn init(device: mtl.Device, plan: Plan) !State { + try plan.validate(); + const storage = try device.buffer(plan.packedBytes(), mtl.ResourceOptions.shared); + errdefer storage.deinit(); + const live = try device.buffer(plan.mutableBytes(), mtl.ResourceOptions.shared); + errdefer live.deinit(); + const backup = try device.buffer(plan.mutableBytes(), mtl.ResourceOptions.shared); + @memset(live.contents()[0..plan.mutableBytes()], 0); + return .{ .plan = plan, .storage = storage, .live = live, .backup = backup }; + } + pub fn deinit(s: *State) void { + s.storage.deinit(); + s.live.deinit(); + s.backup.deinit(); + } + pub fn residentBytes(s: *const State) usize { + return s.plan.residentBytes(); + } + pub fn registerResidency(s: *const State, set: mtl.ResidencySet) void { + set.add(s.storage); + set.add(s.live); + set.add(s.backup); + } + pub fn ring(s: *const State, layer: u32) !View { + if (layer >= s.plan.layers) return error.InvalidCacheLayer; + return .{ .buffer = s.live, .offset = @as(usize, layer) * window * ring_stride }; + } + pub fn source(s: *const State, layer: u32, ratio: u32) !Source { + if (layer >= s.plan.layers) return error.InvalidCacheLayer; + if (s.position > s.plan.capacity) return error.CacheCapacityExceeded; + const id = try ownerFor(layer, ratio); + var packed_off: usize = 0; + var partial_off: usize = @as(usize, s.plan.layers) * window * ring_stride; + for (ratios[0..id]) |r| { + packed_off += @as(usize, s.plan.capacity / r) * (main_stride + index_stride); + partial_off += 2 * r * 512 * 4; + } + return .{ .owner = owners[id], .ratio = ratio, .rows = s.position / ratio, .main = .{ .buffer = s.storage, .offset = packed_off }, .index = .{ .buffer = s.storage, .offset = packed_off + @as(usize, s.plan.capacity / ratio) * main_stride }, .partial = .{ .buffer = s.live, .offset = partial_off } }; + } + pub fn append(s: *State, rows: u32) !void { + if (s.position > s.plan.capacity or rows == 0 or rows > s.plan.capacity - s.position) + return error.CacheCapacityExceeded; + s.position += rows; + } + pub fn begin(s: *State) !void { + if (s.saved_position != null) return error.CacheTransactionActive; + s.saved_position = s.position; + } + pub fn commit(s: *State) !void { + if (s.saved_position == null) return error.NoCacheTransaction; + s.saved_position = null; + } + pub fn rollback(s: *State) !void { + s.position = s.saved_position orelse return error.NoCacheTransaction; + s.saved_position = null; + } +}; diff --git a/zig/src/families/deepseek_v41/kv_test.zig b/zig/src/families/deepseek_v41/kv_test.zig new file mode 100644 index 0000000000..0d1ae738bc --- /dev/null +++ b/zig/src/families/deepseek_v41/kv_test.zig @@ -0,0 +1,234 @@ +const std = @import("std"); +const mtl = @import("metal"); +const kv = @import("kv.zig"); +const cache = @import("kv_state.zig"); +const View = @import("view.zig").View; +fn bf(x: f32) u16 { + const bits: u32 = @bitCast(x); + return @intCast((bits +% 0x7fff +% ((bits >> 16) & 1)) >> 16); +} +fn view(b: mtl.Buffer) View { + return .{ .buffer = b }; +} +fn submit(cb: mtl.CommandBuffer, enc: mtl.ComputeEncoder) !void { + enc.end(); + cb.commit(); + cb.wait(); + try std.testing.expect(cb.failure() == null); +} + +test "cache owners and one million token storage match the released layout" { + try std.testing.expectEqual(@as(usize, 0), try cache.ownerFor(7, 2)); + try std.testing.expectEqual(@as(usize, 1), try cache.ownerFor(13, 2)); + try std.testing.expectEqual(@as(usize, 2), try cache.ownerFor(19, 2)); + try std.testing.expectEqual(@as(usize, 3), try cache.ownerFor(39, 1)); + try std.testing.expectError(error.NoCompressedCache, cache.ownerFor(0, 0)); + const plan = cache.Plan{ .capacity = 1048576, .layers = 40 }; + try std.testing.expectEqual(@as(usize, 1048576 * 890), plan.packedBytes()); + try std.testing.expectEqual(@as(usize, 2732032), plan.mutableBytes()); + try plan.validate(); + try std.testing.expectError(error.InvalidCacheCapacity, (cache.Plan{ .capacity = 1, .layers = 41 }).validate()); + try std.testing.expectError(error.InvalidCacheLayer, cache.ownerFor(40, 1)); + try std.testing.expectError(error.InvalidCacheOwner, cache.ownerFor(39, 2)); +} + +test "FP4 E2M1 ties, signs, zero scales and BF16 in-place values" { + const pool = mtl.objc.Pool.push(); + defer pool.pop(); + const device = try mtl.Device.init(); + defer device.deinit(); + const queue = try device.queue(); + defer queue.deinit(); + var pipes = try kv.Pipelines.load(device); + defer pipes.deinit(); + const x = try device.buffer(64, mtl.ResourceOptions.shared); + defer x.deinit(); + const storage = try device.buffer(36, mtl.ResourceOptions.shared); + defer storage.deinit(); + const values = [_]f32{ 0, 0.5, 1, 1.5, 2, 3, 4, 6, -0.5, -1, -1.5, -2, 0.25, 0.75, 1.25, 1.75 }; + for (values, 0..) |v, i| x.slice(u16, 32)[i] = bf(v); + @memset(x.slice(u16, 32)[16..32], 0); + const cb = queue.commandBuffer(); + const enc = cb.compute(.serial); + try pipes.encodePack(enc, view(x), view(storage), .{ .rows = 2, .width = 16, .stride = 16, .packed_stride = 9, .block = 16, .kind = .main_fp4, .inplace = 1 }); + try submit(cb, enc); + const expected = [_]u8{ 0x10, 0x32, 0x54, 0x76, 0xa9, 0xcb, 0x20, 0x42, 0x38 }; + try std.testing.expectEqualSlices(u8, &expected, storage.contents()[0..9]); + try std.testing.expectEqual(@as(u8, 1), storage.contents()[17]); + const rounded = [_]f32{ 0, 0.5, 1, 1.5, 2, 3, 4, 6, -0.5, -1, -1.5, -2, 0, 1, 1, 2 }; + for (rounded, 0..) |v, i| try std.testing.expectEqual(bf(v), x.slice(u16, 32)[i]); +} + +test "compressor carries a partial group across chunks without changing the pooled latent" { + const pool = mtl.objc.Pool.push(); + defer pool.pop(); + const device = try mtl.Device.init(); + defer device.deinit(); + const queue = try device.queue(); + defer queue.deinit(); + var pipes = try kv.Pipelines.load(device); + defer pipes.deinit(); + const values = try device.buffer(3 * 512 * 4, mtl.ResourceOptions.shared); + defer values.deinit(); + const gates = try device.buffer(3 * 512 * 4, mtl.ResourceOptions.shared); + defer gates.deinit(); + const partial = try device.buffer(4 * 512 * 4, mtl.ResourceOptions.shared); + defer partial.deinit(); + const one_shot = try device.buffer(4 * 512 * 4, mtl.ResourceOptions.shared); + defer one_shot.deinit(); + const weight = try device.buffer(512 * 2, mtl.ResourceOptions.shared); + defer weight.deinit(); + const out = try device.buffer(2 * 512 * 2, mtl.ResourceOptions.shared); + defer out.deinit(); + @memset(partial.contents()[0 .. 4 * 512 * 4], 0); + @memset(one_shot.contents()[0 .. 4 * 512 * 4], 0); + @memset(weight.slice(u16, 512), bf(1)); + for (0..3 * 512) |i| { + values.slice(f32, 3 * 512)[i] = @as(f32, @floatFromInt((i % 512) % 11)) - 5 + @as(f32, @floatFromInt(i / 512)); + gates.slice(f32, 3 * 512)[i] = @as(f32, @floatFromInt(i % 7)) * 0.25; + } + const cb = queue.commandBuffer(); + const enc = cb.compute(.serial); + try pipes.encodePool(enc, view(values), view(gates), view(partial), view(weight), view(out), .{ .rows = 1, .ratio = 2, .position = 0, .stride = 512, .input_f32 = 1 }); + try pipes.encodePool(enc, view(values).shifted(512 * 4), view(gates).shifted(512 * 4), view(partial), view(weight), view(out), .{ .rows = 2, .ratio = 2, .position = 1, .stride = 512, .input_f32 = 1 }); + try pipes.encodePool(enc, view(values), view(gates), view(one_shot), view(weight), view(out).shifted(512 * 2), .{ .rows = 3, .ratio = 2, .position = 0, .stride = 512, .input_f32 = 1 }); + try submit(cb, enc); + try std.testing.expectEqualSlices(u16, out.slice(u16, 1024)[0..512], out.slice(u16, 1024)[512..1024]); + try std.testing.expectEqualSlices(f32, partial.slice(f32, 2048)[0..512], one_shot.slice(f32, 2048)[0..512]); + try std.testing.expectEqualSlices(f32, partial.slice(f32, 2048)[1024..1536], one_shot.slice(f32, 2048)[1024..1536]); +} + +test "compressor rounds the pooled FP32 latent to BF16 before RMS normalization" { + const pool = mtl.objc.Pool.push(); + defer pool.pop(); + const device = try mtl.Device.init(); + defer device.deinit(); + const queue = try device.queue(); + defer queue.deinit(); + var pipes = try kv.Pipelines.load(device); + defer pipes.deinit(); + const values = try device.buffer(4 * 4, mtl.ResourceOptions.shared); + defer values.deinit(); + const gates = try device.buffer(4 * 4, mtl.ResourceOptions.shared); + defer gates.deinit(); + const partial = try device.buffer(4 * 2 * 4, mtl.ResourceOptions.shared); + defer partial.deinit(); + const weight = try device.buffer(2 * 2, mtl.ResourceOptions.shared); + defer weight.deinit(); + const out = try device.buffer(2 * 2, mtl.ResourceOptions.shared); + defer out.deinit(); + @memcpy(values.slice(f32, 4), &[_]f32{ 1.00390625, 0.5, 1.00390625, 0.5 }); + @memset(gates.slice(f32, 4), 0); + @memset(partial.contents()[0..32], 0); + @memset(weight.slice(u16, 2), bf(1)); + const cb = queue.commandBuffer(); + const enc = cb.compute(.serial); + try pipes.encodePool(enc, view(values), view(gates), view(partial), view(weight), view(out), .{ .rows = 2, .width = 2, .ratio = 2, .position = 0, .stride = 2, .input_f32 = 1 }); + try submit(cb, enc); + // 1.00390625 ties to 1 in BF16; normalizing the unrounded value changes the second result. + try std.testing.expectEqual(bf(1.265625), out.slice(u16, 2)[0]); + try std.testing.expectEqual(bf(0.6328125), out.slice(u16, 2)[1]); +} + +test "ring publish handles chunks beyond the window and transaction rollback restores every mutable byte" { + const pool = mtl.objc.Pool.push(); + defer pool.pop(); + const device = try mtl.Device.init(); + defer device.deinit(); + const queue = try device.queue(); + defer queue.deinit(); + var pipes = try kv.Pipelines.load(device); + defer pipes.deinit(); + var state = try cache.State.init(device, .{ .capacity = 1024, .layers = 40 }); + defer state.deinit(); + const chunk = try device.buffer(131 * 528, mtl.ResourceOptions.shared); + defer chunk.deinit(); + for (0..131) |r| @memset(chunk.contents()[r * 528 .. (r + 1) * 528], @intCast(r)); + const cb = queue.commandBuffer(); + const enc = cb.compute(.serial); + try pipes.publishWindow(enc, view(chunk), try state.ring(0), 131, 0); + try state.append(131); + try pipes.snapshot(enc, &state); + try pipes.publishWindow(enc, view(chunk), try state.ring(0), 131, 131); + try state.append(131); + try pipes.rollback(enc, &state); + try submit(cb, enc); + try std.testing.expectEqual(@as(u32, 131), state.position); + try std.testing.expectEqualSlices(u8, state.backup.contents()[0..state.plan.mutableBytes()], state.live.contents()[0..state.plan.mutableBytes()]); + for (3..131) |r| { + const slot = r % 128; + for (state.live.contents()[slot * 528 .. (slot + 1) * 528]) |byte| + try std.testing.expectEqual(@as(u8, @intCast(r)), byte); + } + const cb2 = queue.commandBuffer(); + const enc2 = cb2.compute(.serial); + try pipes.snapshot(enc2, &state); + try pipes.publishWindow(enc2, view(chunk), try state.ring(0), 131, 131); + try state.append(131); + try state.commit(); + try submit(cb2, enc2); + try std.testing.expectEqual(@as(u32, 262), state.position); + try std.testing.expect(state.saved_position == null); +} + +test "window FP8 quantization includes the RoPE tail and index FP4 uses E8M0 scale bytes" { + const pool = mtl.objc.Pool.push(); + defer pool.pop(); + const device = try mtl.Device.init(); + defer device.deinit(); + const queue = try device.queue(); + defer queue.deinit(); + var pipes = try kv.Pipelines.load(device); + defer pipes.deinit(); + const x = try device.buffer(64 * 2, mtl.ResourceOptions.shared); + defer x.deinit(); + const storage = try device.buffer(66, mtl.ResourceOptions.shared); + defer storage.deinit(); + const decoded = try device.buffer(64 * 2, mtl.ResourceOptions.shared); + defer decoded.deinit(); + @memset(x.slice(u16, 64), 0); + @memset(x.slice(u16, 64)[32..64], bf(0.3)); + x.slice(u16, 64)[63] = bf(448); + const cb = queue.commandBuffer(); + const enc = cb.compute(.serial); + const args = kv.Pack{ .rows = 1, .width = 64, .stride = 64, .packed_stride = 66, .block = 32, .kind = .window_fp8, .inplace = 1 }; + try pipes.encodePack(enc, view(x), view(storage), args); + try pipes.encodeUnpack(enc, view(storage), view(decoded), args); + try submit(cb, enc); + try std.testing.expectEqual(@as(u8, 127), storage.contents()[65]); + try std.testing.expectEqual(@as(u8, 126), storage.contents()[63]); + try std.testing.expectEqual(bf(0.3125), decoded.slice(u16, 64)[62]); + try std.testing.expectEqualSlices(u16, x.slice(u16, 64), decoded.slice(u16, 64)); + @memset(x.slice(u16, 64)[0..32], bf(6)); + const cb2 = queue.commandBuffer(); + const enc2 = cb2.compute(.serial); + try pipes.encodePack(enc2, view(x), view(storage), .{ .rows = 1, .width = 32, .stride = 32, .packed_stride = 17, .block = 32, .kind = .index_fp4, .inplace = 1 }); + try submit(cb2, enc2); + for (storage.contents()[0..16]) |byte| try std.testing.expectEqual(@as(u8, 0x77), byte); + try std.testing.expectEqual(@as(u8, 127), storage.contents()[16]); +} + +test { + _ = @import("csa2_test.zig"); +} + +test "cache pack rejects undersized borrowed input and output before encoding" { + const device = mtl.Device.init() catch return error.SkipZigTest; + defer device.deinit(); + const pool = mtl.objc.Pool.push(); + defer pool.pop(); + const small = try device.buffer(16, mtl.ResourceOptions.shared); + defer small.deinit(); + const input = try device.buffer(64, mtl.ResourceOptions.shared); + defer input.deinit(); + const args = kv.Pack{ .rows = 1, .width = 32, .stride = 32, .packed_stride = 33, .block = 32, .kind = .window_fp8 }; + const pipelines: *const kv.Pipelines = undefined; + try std.testing.expectError(error.InvalidTensorView, pipelines.encodePack(undefined, view(small), view(input), args)); + try std.testing.expectError(error.InvalidTensorView, pipelines.encodePack(undefined, view(input), view(small), args)); + try std.testing.expectError(error.InvalidTensorView, pipelines.encodePack(undefined, view(input).shifted(1), view(input), args)); +} + +test "cache shapes reject overflow and nonfinite compressor epsilon" { + try std.testing.expectError(error.InvalidCachePackShape, (kv.Pack{ .rows = 2, .width = 32, .stride = 32, .packed_stride = 33, .block = 32, .kind = .window_fp8, .first = std.math.maxInt(u32) }).validate()); + try std.testing.expectError(error.InvalidCompressorShape, (kv.Pool{ .rows = 1, .ratio = 1, .position = 0, .stride = 512, .input_f32 = 0, .eps = std.math.nan(f32) }).validate()); +} diff --git a/zig/src/families/deepseek_v41/load.zig b/zig/src/families/deepseek_v41/load.zig new file mode 100644 index 0000000000..58e59c4a3f --- /dev/null +++ b/zig/src/families/deepseek_v41/load.zig @@ -0,0 +1,266 @@ +//! Header-first resident loading: no mapped weights, deferred disk lookup or duplicate Engram projections. +const std = @import("std"); +const mtl = @import("metal"); +const st = @import("../../core/safetensors.zig"); +const cp = @import("../../core/checkpoint_metal.zig"); +const paced = @import("../../core/paced_read.zig"); + +pub const Reference = struct { shard: usize, entry: st.Entry }; +pub const Shard = struct { + path: [:0]const u8, + file_bytes: usize, + data_start: usize, + begin: usize, + end: usize, + names: st.Header, +}; + +pub const Plan = struct { + arena: std.heap.ArenaAllocator, + shards: std.ArrayList(Shard) = .empty, + tensors: std.StringHashMapUnmanaged(Reference) = .empty, + bytes: usize = 0, + + pub fn open(gpa: std.mem.Allocator, io: std.Io, dir: []const u8, table_dir: []const u8) !Plan { + var self = Plan{ .arena = std.heap.ArenaAllocator.init(gpa) }; + errdefer self.deinit(); + const a = self.arena.allocator(); + const index_path = try std.fs.path.join(a, &.{ dir, "model.safetensors.index.json" }); + const index_bytes = try std.Io.Dir.cwd().readFileAlloc(io, index_path, a, .limited(64 << 20)); + const index = try std.json.parseFromSliceLeaky(struct { weight_map: std.json.Value }, a, index_bytes, .{ + .ignore_unknown_fields = true, + }); + if (index.weight_map != .object or index.weight_map.object.count() == 0) return error.BadCheckpointIndex; + var files: std.StringHashMapUnmanaged(void) = .empty; + var entries = index.weight_map.object.iterator(); + while (entries.next()) |item| { + if (item.value_ptr.* != .string) return error.BadCheckpointIndex; + const file = item.value_ptr.string; + if (!safeBasename(file)) return error.BadCheckpointIndex; + try files.put(a, file, {}); + } + const ordered = try a.alloc([]const u8, files.count()); + var file_it = files.keyIterator(); + var n: usize = 0; + while (file_it.next()) |file| : (n += 1) ordered[n] = file.*; + std.mem.sort([]const u8, ordered, {}, less); + var owned: std.StringHashMapUnmanaged([]const u8) = .empty; + entries.reset(); + while (entries.next()) |item| try owned.put(a, item.key_ptr.*, item.value_ptr.string); + for (ordered) |file| try self.add(try std.fs.path.join(a, &.{ dir, file }), null, &owned); + if (self.tensors.count() != index.weight_map.object.count()) return error.CheckpointIndexMismatch; + entries = index.weight_map.object.iterator(); + while (entries.next()) |item| { + const ref = self.tensors.get(item.key_ptr.*) orelse return error.CheckpointIndexMismatch; + if (!std.mem.eql(u8, std.fs.path.basename(self.shards.items[ref.shard].path), item.value_ptr.string)) + return error.CheckpointIndexMismatch; + } + for ([_]struct { layer: u32, file: []const u8, rows: usize }{ + .{ .layer = 1, .file = "model-00047-of-00048.safetensors", .rows = 384006168 }, + .{ .layer = 14, .file = "model-00048-of-00048.safetensors", .rows = 384016682 }, + }) |table| { + const prefix = try std.fmt.allocPrint(a, "layers.{d}.engram.embed.", .{table.layer}); + try self.add(try std.fs.path.join(a, &.{ table_dir, table.file }), prefix, null); + const weight = try std.fmt.allocPrint(a, "{s}weight", .{prefix}); + const scale = try std.fmt.allocPrint(a, "{s}scale", .{prefix}); + try self.require(weight, .f8_e4m3, &.{ table.rows, 256 }); + try self.require(scale, .f8_e8m0, &.{ table.rows, 8 }); + if (self.shards.items[self.shards.items.len - 1].names.count() != 2) return error.UnexpectedEngramTensor; + } + return self; + } + + pub fn deinit(self: *Plan) void { + self.arena.deinit(); + self.* = undefined; + } + + pub fn get(self: *const Plan, name: []const u8) !st.Entry { + return (self.tensors.get(name) orelse return error.MissingTensor).entry; + } + + pub fn has(self: *const Plan, name: []const u8) bool { + return self.tensors.contains(name); + } + + pub fn require(self: *const Plan, name: []const u8, dtype: st.DType, shape: []const usize) !void { + const e = try self.get(name); + if (e.dtype != dtype or e.rank != shape.len or !std.mem.eql(usize, e.shape[0..e.rank], shape)) { + std.log.err("unsupported tensor {s}: dtype {s}, shape {any}", .{ name, @tagName(e.dtype), e.shape[0..e.rank] }); + return error.UnsupportedTensor; + } + } + + fn add(self: *Plan, path: []const u8, prefix: ?[]const u8, owned: ?*const std.StringHashMapUnmanaged([]const u8)) !void { + const a = self.arena.allocator(); + const own_path = try a.dupeSentinel(u8, path, 0); + const fd = std.c.open(own_path, .{ .ACCMODE = .RDONLY }); + if (fd < 0) return error.OpenFailed; + defer _ = std.c.close(fd); + const length = std.c.lseek(fd, 0, std.c.SEEK.END); + if (length < 8) return error.BadSafetensors; + const file_bytes: usize = @intCast(length); + var head: [8]u8 = undefined; + try readAll(fd, &head, 0); + const header_bytes = std.mem.readInt(u64, &head, .little); + if (header_bytes > @min(file_bytes - 8, 64 << 20)) return error.BadSafetensors; + const json = try a.alloc(u8, @intCast(header_bytes)); + try readAll(fd, json, 8); + const data_start: usize = 8 + @as(usize, @intCast(header_bytes)); + const names = try st.parseHeaderPrefix(a, json, file_bytes - data_start, prefix); + if (names.count() == 0) return error.MissingTensor; + var begin: usize = if (prefix == null) 0 else file_bytes - data_start; + var end: usize = if (prefix == null) file_bytes - data_start else 0; + for (names.keys(), names.values()) |name, entry| { + // A rank-split pack duplicates whole-load tensors beside the shards; the index decides the owner file. + if (owned) |map| { + const owner = map.get(name) orelse continue; + if (!std.mem.eql(u8, owner, std.fs.path.basename(path))) continue; + } + begin = @min(begin, entry.begin); + end = @max(end, entry.end); + const slot = try self.tensors.getOrPut(a, name); + if (slot.found_existing) { + return error.DuplicateTensor; + } + slot.value_ptr.* = .{ .shard = self.shards.items.len, .entry = entry }; + } + if (prefix != null) { + var selected_bytes: usize = 0; + for (names.values()) |entry| selected_bytes = try std.math.add(usize, selected_bytes, entry.end - entry.begin); + if (selected_bytes != end - begin) return error.NoncontiguousEngramTables; + } + self.bytes = try std.math.add(usize, self.bytes, end - begin); + try self.shards.append(a, .{ .path = own_path, .file_bytes = file_bytes, .data_start = data_start, .begin = begin, .end = end, .names = names }); + } + + /// Only called after architecture validation and the complete memory admission calculation. + pub fn materialize(self: *const Plan, gpa: std.mem.Allocator, device: mtl.Device, residency: mtl.ResidencySet, queue: mtl.Queue) !cp.Checkpoint { + var out = cp.Checkpoint.init(gpa); + errdefer out.deinit(); + const stage = try paced.stage(gpa, 32 << 20); + defer gpa.free(stage); + var warm = mtl.keepalive.Target{ .queue = queue, .sets = @as(*const [1]mtl.ResidencySet, &residency) }; + var last_tick: f64 = -std.math.inf(f64); + var short: paced.Memory = undefined; + for (self.shards.items, 0..) |shard, i| { + const fd = std.c.open(shard.path, .{ .ACCMODE = .RDONLY }); + if (fd < 0) return error.OpenFailed; + defer _ = std.c.close(fd); + if (std.c.fcntl(fd, 48, @as(c_int, 1)) != 0) return error.UncachedReadUnavailable; + if (std.c.lseek(fd, 0, std.c.SEEK.END) != shard.file_bytes) return error.CheckpointChanged; + const bytes = shard.end - shard.begin; + const buffer = try device.buffer(@max(bytes, 16), mtl.ResourceOptions.shared | mtl.ResourceOptions.untracked); + var owned = false; + errdefer if (!owned) buffer.deinit(); + try out.own(buffer, bytes); + owned = true; + // Unwinding must deregister before `out.deinit` frees the buffer, or the set points at released storage. + var registered = false; + errdefer if (registered) { + residency.remove(buffer); + residency.commit(); + }; + residency.add(buffer); + residency.commit(); + registered = true; + residency.requestResidency(); + var copied: usize = 0; + while (copied < bytes) { + const count = @min(bytes - copied, stage.len - paced.alignment); + paced.read(fd, buffer.contents()[copied..][0..count], shard.data_start + shard.begin + copied, stage, &short) catch |err| { + if (err == error.MemoryShort) { + var msg: [512]u8 = undefined; + std.log.err("deepseek-v41: {s}", .{paced.refusal(&msg, short, paced.floor())}); + } + return err; + }; + copied += count; + const now = mtl.clock.seconds(); + if (now - last_tick >= 0.4) { + mtl.keepalive.Target.tick(&warm); + last_tick = now; + } + } + for (shard.names.keys(), shard.names.values()) |name, e| { + try out.set(name, .{ .buffer = buffer, .offset = e.begin - shard.begin, .bytes = e.end - e.begin, .dtype = e.dtype, .shape = e.shape, .rank = e.rank }); + } + std.log.info("resident checkpoint shard {d}/{d}: {d} bytes, residency set {d} bytes", .{ i + 1, self.shards.items.len, bytes, residency.allocatedSize() }); + } + residency.commit(); + residency.requestResidency(); + return out; + } +}; + +fn readAll(fd: std.c.fd_t, dest: []u8, at: usize) !void { + var done: usize = 0; + while (done < dest.len) { + const n = std.c.pread(fd, dest.ptr + done, dest.len - done, @intCast(at + done)); + if (n <= 0) return error.ShortRead; + done += @intCast(n); + } +} + +fn safeBasename(s: []const u8) bool { + return s.len > 0 and !std.mem.eql(u8, s, ".") and !std.mem.eql(u8, s, "..") and + std.mem.indexOfAny(u8, s, "/\\") == null and std.mem.indexOfScalar(u8, s, 0) == null and + std.mem.endsWith(u8, s, ".safetensors"); +} + +fn less(_: void, a: []const u8, b: []const u8) bool { + return std.mem.lessThan(u8, a, b); +} + +test "selected table plan excludes projections and preserves tensor byte offsets" { + const a = std.testing.allocator; + const io = std.testing.io; + var tmp = std.testing.tmpDir(.{}); + defer tmp.cleanup(); + const header = + \\{"padding":{"dtype":"U8","shape":[3],"data_offsets":[0,3]}, + \\ "engram.embed.weight":{"dtype":"U8","shape":[4],"data_offsets":[3,7]}, + \\ "engram.embed.scale":{"dtype":"U8","shape":[2],"data_offsets":[7,9]}, + \\ "engram.wkv":{"dtype":"U8","shape":[1],"data_offsets":[9,10]}} + ; + var data: [8 + header.len + 10]u8 = undefined; + std.mem.writeInt(u64, data[0..8], header.len, .little); + @memcpy(data[8..][0..header.len], header); + @memset(data[8 + header.len ..], 0); + try tmp.dir.writeFile(io, .{ .sub_path = "table.safetensors", .data = &data }); + const path = try std.fmt.allocPrint(a, ".zig-cache/tmp/{s}/table.safetensors", .{tmp.sub_path}); + defer a.free(path); + var plan = Plan{ .arena = std.heap.ArenaAllocator.init(a) }; + defer plan.deinit(); + try plan.add(path, "engram.embed.", null); + try std.testing.expectEqual(@as(usize, 6), plan.bytes); + try std.testing.expectEqual(@as(usize, 3), plan.shards.items[0].begin); + try std.testing.expectEqual(@as(usize, 9), plan.shards.items[0].end); + try std.testing.expectEqual(@as(usize, 7), (try plan.get("engram.embed.scale")).begin); + try std.testing.expectError(error.MissingTensor, plan.get("engram.wkv")); + try std.testing.expectError(error.DuplicateTensor, plan.add(path, "engram.embed.", null)); +} + +test "selected table payload must be contiguous and indexed files cannot escape checkpoint directory" { + const a = std.testing.allocator; + const io = std.testing.io; + var tmp = std.testing.tmpDir(.{}); + defer tmp.cleanup(); + const header = + \\{"engram.embed.weight":{"dtype":"U8","shape":[4],"data_offsets":[0,4]}, + \\ "projection":{"dtype":"U8","shape":[3],"data_offsets":[4,7]}, + \\ "engram.embed.scale":{"dtype":"U8","shape":[2],"data_offsets":[7,9]}} + ; + var data: [8 + header.len + 9]u8 = undefined; + std.mem.writeInt(u64, data[0..8], header.len, .little); + @memcpy(data[8..][0..header.len], header); + @memset(data[8 + header.len ..], 0); + try tmp.dir.writeFile(io, .{ .sub_path = "gap.safetensors", .data = &data }); + const path = try std.fmt.allocPrint(a, ".zig-cache/tmp/{s}/gap.safetensors", .{tmp.sub_path}); + defer a.free(path); + var plan = Plan{ .arena = std.heap.ArenaAllocator.init(a) }; + defer plan.deinit(); + try std.testing.expectError(error.NoncontiguousEngramTables, plan.add(path, "engram.embed.", null)); + for ([_][]const u8{ "../x.safetensors", "/x.safetensors", "a\\x.safetensors", ".", "..", "x.safetensors\x00", "x.json", "" }) |name| try std.testing.expect(!safeBasename(name)); + try std.testing.expect(safeBasename("model-00001-of-00039.safetensors")); +} diff --git a/zig/src/families/deepseek_v41/mhc.zig b/zig/src/families/deepseek_v41/mhc.zig new file mode 100644 index 0000000000..3ac499423f --- /dev/null +++ b/zig/src/families/deepseek_v41/mhc.zig @@ -0,0 +1,95 @@ +//! Four-copy mHC; callers validate shapes/storage and own previous-pre coefficients. +const mtl = @import("metal"); +const sources = @import("kernel_sources"); +pub const View = @import("view.zig").View; +pub const Pipelines = struct { + rms: mtl.Pipeline, + split: mtl.Pipeline, + collapse: mtl.Pipeline, + post: mtl.Pipeline, + expand: mtl.Pipeline, + pub fn load(device: mtl.Device) !Pipelines { + const pool = mtl.objc.Pool.push(); + defer pool.pop(); + var options = mtl.CompileOptions.mlx(); + options.math_functions = .precise; + const lib = try mtl.Library.fromSource(device, sources.deepseek_v41_mhc, options); + defer lib.deinit(); + const rms = try mtl.Pipeline.init(device, lib, "dsv41_hc_rms", false); + errdefer rms.deinit(); + const split = try mtl.Pipeline.init(device, lib, "dsv41_hc_split", false); + errdefer split.deinit(); + const collapse = try mtl.Pipeline.init(device, lib, "dsv41_hc_collapse", false); + errdefer collapse.deinit(); + const post = try mtl.Pipeline.init(device, lib, "dsv41_hc_post", false); + errdefer post.deinit(); + const expand = try mtl.Pipeline.init(device, lib, "dsv41_hc_expand", false); + return .{ .rms = rms, .split = split, .collapse = collapse, .post = post, .expand = expand }; + } + pub fn deinit(p: *Pipelines) void { + p.rms.deinit(); + p.split.deinit(); + p.collapse.deinit(); + p.post.deinit(); + p.expand.deinit(); + } +}; +fn bind(e: mtl.ComputeEncoder, refs: anytype) void { + inline for (refs, 0..) |r, i| e.setBuffer(r.buffer, r.offset, i); +} +pub const Rms = extern struct { rows: u32, width: u32, stream_stride: u32, eps: f32 }; +/// BF16 flattened [rows,4*width] -> FP32 inv[rows]; fixed CUDA single-row tree, not every batched CUDA grouping. +pub fn encodeRms(e: mtl.ComputeEncoder, p: *const Pipelines, stream: View, inv: View, d: Rms) void { + e.setPipeline(p.rms); + bind(e, .{ stream, inv }); + e.setValue(d, 2); + e.dispatchGroups(mtl.Size.of(d.rows, 1, 1), mtl.Size.of(512, 1, 1)); +} +pub const Split = extern struct { + rows: u32, + mix_stride: u32 = 24, + coefficient_stride: u32 = 4, + comb_stride: u32 = 16, + eps: f32 = 1e-6, +}; +/// FP32 mixes[rows,24], inv, scale[3], base[24] -> pre/post[rows,4], comb[rows,4,4]; 20 iterations. +pub fn encodeSplit(e: mtl.ComputeEncoder, p: *const Pipelines, mixes: View, inv: View, scale: View, base: View, pre: View, post: View, comb: View, d: Split) void { + e.setPipeline(p.split); + bind(e, .{ mixes, inv, scale, base, pre, post, comb }); + e.setValue(d, 7); + e.dispatchThreads(mtl.Size.of(d.rows, 1, 1), mtl.Size.of(32, 1, 1)); +} +pub const Collapse = extern struct { rows: u32, width: u32, stream_stride: u32, y_stride: u32, pre_stride: u32 = 4 }; +/// Collapse BF16 [rows,4,width] with previous sublayer pre[rows,4]; head uses final FFN pre, initially one-hot. +pub fn encodeCollapse(e: mtl.ComputeEncoder, p: *const Pipelines, stream: View, previous_pre: View, y: View, d: Collapse) void { + e.setPipeline(p.collapse); + bind(e, .{ stream, previous_pre, y }); + e.setValue(d, 3); + e.dispatchThreads(mtl.Size.of(d.width, d.rows, 1), mtl.Size.of(256, 1, 1)); +} +pub const Post = extern struct { + rows: u32, + width: u32, + branch_stride: u32, + residual_stride: u32, + y_stride: u32, + coefficient_stride: u32 = 4, + comb_stride: u32 = 16, +}; +/// y[k,d]=post[k]*branch[d]+sum_j comb[j,k]*residual[j,d]; BF16 inputs/output, FP32 coefficients/math. + +// Element pitches; exact residual alias is safe, but output must not alias branch/post/comb. +pub fn encodePost(e: mtl.ComputeEncoder, p: *const Pipelines, branch: View, residual: View, post: View, comb: View, y: View, d: Post) void { + e.setPipeline(p.post); + bind(e, .{ branch, residual, post, comb, y }); + e.setValue(d, 5); + e.dispatchThreads(mtl.Size.of(d.width, d.rows, 1), mtl.Size.of(256, 1, 1)); +} +pub const Expand = extern struct { rows: u32, width: u32, x_stride: u32, stream_stride: u32, pre_stride: u32 = 4 }; +/// BF16 x[rows,width] copied into four streams and FP32 initial pre[rows,4] set to [1,0,0,0]. +pub fn encodeExpand(e: mtl.ComputeEncoder, p: *const Pipelines, x: View, stream: View, pre: View, d: Expand) void { + e.setPipeline(p.expand); + bind(e, .{ x, stream, pre }); + e.setValue(d, 3); + e.dispatchThreads(mtl.Size.of(d.width, d.rows, 1), mtl.Size.of(256, 1, 1)); +} diff --git a/zig/src/families/deepseek_v41/mhc_test.zig b/zig/src/families/deepseek_v41/mhc_test.zig new file mode 100644 index 0000000000..ee0d888e28 --- /dev/null +++ b/zig/src/families/deepseek_v41/mhc_test.zig @@ -0,0 +1,209 @@ +//! Consumer-visible mHC coefficient, reduction and BF16 boundary regressions. +const std = @import("std"); +const mtl = @import("metal"); +const mhc = @import("mhc.zig"); +const support = @import("test_support.zig"); +const bf = support.bf; +const fp = support.fp; +const view = support.view; +const Buffers = support.Buffers; +const done = support.done; +const close = support.close; +fn splitReference(mixes: []const f32, inv: f64, scales: []const f32, base: []const f32) [24]f64 { + var out: [24]f64 = undefined; + for (0..4) |j| { + out[j] = 1 / (1 + @exp(-(@as(f64, mixes[j]) * inv * scales[0] + base[j]))) + 1e-6; + out[4 + j] = 2 / (1 + @exp(-(@as(f64, mixes[4 + j]) * inv * scales[1] + base[4 + j]))); + } + for (0..4) |j| { + var max: f64 = -std.math.inf(f64); + for (0..4) |k| { + const q = 8 + 4 * j + k; + out[q] = @as(f64, mixes[q]) * inv * scales[2] + base[q]; + max = @max(max, out[q]); + } + var sum: f64 = 0; + for (0..4) |k| { + const q = 8 + 4 * j + k; + out[q] = @exp(out[q] - max); + sum += out[q]; + } + for (0..4) |k| out[8 + 4 * j + k] = out[8 + 4 * j + k] / sum + 1e-6; + } + for (0..20) |it| { + if (it > 0) for (0..4) |j| { + var s: f64 = 0; + for (0..4) |k| s += out[8 + 4 * j + k]; + for (0..4) |k| out[8 + 4 * j + k] /= s + 1e-6; + }; + for (0..4) |k| { + var s: f64 = 0; + for (0..4) |j| s += out[8 + 4 * j + k]; + for (0..4) |j| out[8 + 4 * j + k] /= s + 1e-6; + } + } + return out; +} + +test "V4.1 flattened mHC RMS, 20 Sinkhorn iterations, previous collapse, source-destination post and identity expand" { + const device = mtl.Device.init() catch return error.SkipZigTest; + defer device.deinit(); + const pool = mtl.objc.Pool.push(); + defer pool.pop(); + const queue = try device.queue(); + defer queue.deinit(); + var p = try mhc.Pipelines.load(device); + defer p.deinit(); + var b = Buffers{ .device = device }; + defer b.deinit(); + const stream = try b.get(u16, 16); + for (stream.slice(u16, 16), 0..) |*v, i| v.* = bf(@as(f32, @floatFromInt(i + 1)) * 0.25); + const inv = try b.get(f32, 1); + const mixes = try b.get(f32, 24); + for (mixes.slice(f32, 24), 0..) |*v, i| v.* = (@as(f32, @floatFromInt(i % 9)) - 4) * 3; + const scale = try b.get(f32, 3); + @memcpy(scale.slice(f32, 3), &[_]f32{ 0.3, -0.7, 1.2 }); + const base = try b.get(f32, 24); + for (base.slice(f32, 24), 0..) |*v, i| v.* = (@as(f32, @floatFromInt(i % 5)) - 2) * 0.3; + const pre = try b.get(f32, 4); + const post = try b.get(f32, 4); + const comb = try b.get(f32, 16); + const previous = try b.get(f32, 4); + @memcpy(previous.slice(f32, 4), &[_]f32{ 0.1, 0.2, 0.3, 0.4 }); + const collapse = try b.get(u16, 4); + const branch = try b.get(u16, 4); + @memset(branch.slice(u16, 4), bf(2)); + const y = try b.get(u16, 16); + const expanded = try b.get(u16, 16); + const initial = try b.get(f32, 4); + const cb = queue.commandBuffer(); + const e = cb.compute(.serial); + mhc.encodeRms(e, &p, view(stream), view(inv), .{ .rows = 1, .width = 4, .stream_stride = 16, .eps = 1e-20 }); + mhc.encodeSplit(e, &p, view(mixes), view(inv), view(scale), view(base), view(pre), view(post), view(comb), .{ .rows = 1 }); + mhc.encodeCollapse(e, &p, view(stream), view(previous), view(collapse), .{ .rows = 1, .width = 4, .stream_stride = 16, .y_stride = 4 }); + mhc.encodePost(e, &p, view(branch), view(stream), view(post), view(comb), view(y), .{ .rows = 1, .width = 4, .branch_stride = 4, .residual_stride = 16, .y_stride = 16 }); + mhc.encodeExpand(e, &p, view(branch), view(expanded), view(initial), .{ .rows = 1, .width = 4, .x_stride = 4, .stream_stride = 16 }); + try done(cb, e); + var squares: f64 = 0; + for (stream.slice(u16, 16)) |v| squares += @as(f64, fp(v)) * fp(v); + const ir = 1 / @sqrt(squares / 16 + 1e-20); + try close(ir, inv.slice(f32, 1)[0], 1e-6); + const ref = splitReference(mixes.slice(f32, 24), ir, scale.slice(f32, 3), base.slice(f32, 24)); + for (0..4) |j| { + try close(ref[j], pre.slice(f32, 4)[j], 2e-6); + try close(ref[4 + j], post.slice(f32, 4)[j], 2e-6); + } + for (0..16) |q| try close(ref[8 + q], comb.slice(f32, 16)[q], 3e-6); + for (0..4) |i| { + var collapsed: f64 = 0; + for (0..4) |j| collapsed += @as(f64, previous.slice(f32, 4)[j]) * fp(stream.slice(u16, 16)[j * 4 + i]); + try close(collapsed, fp(collapse.slice(u16, 4)[i]), 0.02); + for (0..4) |k| { + var expected: f64 = 2 * ref[4 + k]; + for (0..4) |j| expected += ref[8 + 4 * j + k] * fp(stream.slice(u16, 16)[j * 4 + i]); + try close(expected, fp(y.slice(u16, 16)[k * 4 + i]), 0.04); + try std.testing.expectEqual(bf(2), expanded.slice(u16, 16)[k * 4 + i]); + } + try std.testing.expectEqual(@as(f32, if (i == 0) 1 else 0), initial.slice(f32, 4)[i]); + } +} + +test "V4.1 source single-row HC RMS reaches the retained attention BF16 consumer" { + const Fixture = struct { + embedding_bf16: []const u8, + mixes_f32: []const u8, + scale_f32: []const u8, + base_f32: []const u8, + branch_bf16_bits: [2]u16, + residual_bf16_bits: [8]u16, + expected_source_tree_target_bf16_bits: [2]u16, + }; + const fixture = try std.json.parseFromSlice(Fixture, std.testing.allocator, @embedFile("fixtures/hc_attention_rms.json"), .{ .ignore_unknown_fields = true }); + defer fixture.deinit(); + const f = fixture.value; + const device = mtl.Device.init() catch return error.SkipZigTest; + defer device.deinit(); + const pool = mtl.objc.Pool.push(); + defer pool.pop(); + const queue = try device.queue(); + defer queue.deinit(); + var p = try mhc.Pipelines.load(device); + defer p.deinit(); + var b = Buffers{ .device = device }; + defer b.deinit(); + const width = 5120; + const stream = try b.get(u16, 4 * width); + const xs = stream.slice(u16, 4 * width); + try std.base64.standard.Decoder.decode(std.mem.sliceAsBytes(xs[0..width]), f.embedding_bf16); + for (1..4) |copy| @memcpy(xs[copy * width ..][0..width], xs[0..width]); + const inv = try b.get(f32, 1); + const mixes = try b.get(f32, 24); + const scale = try b.get(f32, 3); + const base = try b.get(f32, 24); + try std.base64.standard.Decoder.decode(std.mem.sliceAsBytes(mixes.slice(f32, 24)), f.mixes_f32); + try std.base64.standard.Decoder.decode(std.mem.sliceAsBytes(scale.slice(f32, 3)), f.scale_f32); + try std.base64.standard.Decoder.decode(std.mem.sliceAsBytes(base.slice(f32, 24)), f.base_f32); + const pre = try b.get(f32, 4); + const post = try b.get(f32, 4); + const comb = try b.get(f32, 16); + const branch = try b.get(u16, 2); + const residual = try b.get(u16, 8); + const output = try b.get(u16, 8); + @memcpy(branch.slice(u16, 2), &f.branch_bf16_bits); + @memcpy(residual.slice(u16, 8), &f.residual_bf16_bits); + const cb = queue.commandBuffer(); + const e = cb.compute(.serial); + // Recompute statistic, coefficients and post products from the retained projection; never inject an oracle inverse. + mhc.encodeRms(e, &p, view(stream), view(inv), .{ .rows = 1, .width = width, .stream_stride = 4 * width, .eps = 1e-20 }); + mhc.encodeSplit(e, &p, view(mixes), view(inv), view(scale), view(base), view(pre), view(post), view(comb), .{ .rows = 1 }); + mhc.encodePost(e, &p, view(branch), view(residual), view(post), view(comb), view(output), .{ .rows = 1, .width = 2, .branch_stride = 2, .residual_stride = 8, .y_stride = 8 }); + try done(cb, e); + // The former reduction produces [14091,46835], despite unchanged branch BF16 bits. + for (0..2) |i| try std.testing.expectEqual(f.expected_source_tree_target_bf16_bits[i], output.slice(u16, 8)[6 + i]); +} + +test "V4.1 hyperconnections preserve FP32 products and residual boundaries under cancellation" { + const device = mtl.Device.init() catch return error.SkipZigTest; + defer device.deinit(); + const pool = mtl.objc.Pool.push(); + defer pool.pop(); + const queue = try device.queue(); + defer queue.deinit(); + var p = try mhc.Pipelines.load(device); + defer p.deinit(); + var b = Buffers{ .device = device }; + defer b.deinit(); + const stream = try b.get(u16, 8); + @memcpy(stream.slice(u16, 8), &[_]u16{ bf(3), bf(3), bf(0), bf(0), bf(1), bf(1), bf(1), bf(1) }); + const previous = try b.get(f32, 8); + @memcpy(previous.slice(f32, 8), &[_]f32{ -1, 1 + 0x1p-23, 0, 0, 1, 0x1p-24, 0x1p-24, -1 }); + const collapsed = try b.get(u16, 2); + const branch = try b.get(u16, 2); + @memcpy(branch.slice(u16, 2), &[_]u16{ bf(0), bf(1) }); + const post = try b.get(f32, 8); + post.slice(f32, 8)[4] = -1; + const comb = try b.get(f32, 32); + comb.slice(f32, 32)[0] = -1; + comb.slice(f32, 32)[4] = 1 + 0x1p-23; + comb.slice(f32, 32)[16] = 1; + comb.slice(f32, 32)[20] = 0x1p-24; + comb.slice(f32, 32)[24] = 0x1p-24; + const output = try b.get(u16, 8); + const cb = queue.commandBuffer(); + const e = cb.compute(.serial); + mhc.encodeCollapse(e, &p, view(stream), view(previous), view(collapsed), .{ .rows = 2, .width = 1, .stream_stride = 4, .y_stride = 1 }); + mhc.encodePost(e, &p, view(branch), view(stream), view(post), view(comb), view(output), .{ .rows = 2, .width = 1, .branch_stride = 1, .residual_stride = 4, .y_stride = 4 }); + try done(cb, e); + try std.testing.expectEqual(bf(0x1p-21), collapsed.slice(u16, 2)[0]); + try std.testing.expectEqual(bf(0), collapsed.slice(u16, 2)[1]); + try std.testing.expectEqual(bf(0x1p-21), output.slice(u16, 8)[0]); + try std.testing.expectEqual(bf(0), output.slice(u16, 8)[4]); + branch.slice(u16, 2)[0] = bf(3); + post.slice(f32, 8)[0] = 1 + 0x1p-23; + comb.slice(f32, 32)[4] = 0; + const branch_cb = queue.commandBuffer(); + const branch_enc = branch_cb.compute(.serial); + mhc.encodePost(branch_enc, &p, view(branch), view(stream), view(post), view(comb), view(output), .{ .rows = 1, .width = 1, .branch_stride = 1, .residual_stride = 4, .y_stride = 4 }); + try done(branch_cb, branch_enc); + try std.testing.expectEqual(bf(0x1p-21), output.slice(u16, 8)[0]); +} diff --git a/zig/src/families/deepseek_v41/model.zig b/zig/src/families/deepseek_v41/model.zig new file mode 100644 index 0000000000..d73cc5d371 --- /dev/null +++ b/zig/src/families/deepseek_v41/model.zig @@ -0,0 +1,376 @@ +//! Plain V4.1 execution over resident EXL3 weights and source-owned packed caches. +const std = @import("std"); +const mtl = @import("metal"); +const checkpoint = @import("../../core/checkpoint_metal.zig"); +const exl3 = @import("../../core/exl3_projection.zig"); +const config = @import("config.zig"); +const load = @import("load.zig"); +const weights = @import("weights.zig"); +const work = @import("workspace.zig"); +pub const attention = @import("attention.zig"); +const kv = @import("kv.zig"); +pub const ops = @import("ops.zig"); +pub const mhc = @import("mhc.zig"); +const route = @import("route.zig"); +const engram = @import("engram.zig"); +const View = @import("view.zig").View; +const gpu_counters = @import("profiler.zig"); +const expert_groups = @import("../../core/expert_groups.zig"); + +pub const prefill_step = 256; +pub const Logits = enum { none, last, all }; +pub const Options = struct { + dir: []const u8, + table_dir: ?[]const u8 = null, + token_map: []const u8, + context: u32 = 0, + chunk_rows: u32 = prefill_step, +}; + +const Pipelines = struct { + projection: exl3.Pipelines, + ops: ops.Pipelines, + mhc: mhc.Pipelines, + route: route.Pipelines, + engram: engram.Pipelines, + attention: attention.Pipelines, + groups: expert_groups.Pipelines, + + fn init(device: mtl.Device, capacity: u32, c: config.Text) !Pipelines { + var ep = try exl3.Pipelines.load(device); + errdefer ep.deinit(); + var op = try ops.Pipelines.load(device); + errdefer op.deinit(); + var hp = try mhc.Pipelines.load(device); + errdefer hp.deinit(); + var rp = try route.Pipelines.load(device); + errdefer rp.deinit(); + var gp = try engram.Pipelines.load(device); + errdefer gp.deinit(); + var groups = try expert_groups.Pipelines.load(device); + errdefer groups.deinit(); + const ap = try attention.Pipelines.load(device, capacity, c); + return .{ .projection = ep, .ops = op, .mhc = hp, .route = rp, .engram = gp, .attention = ap, .groups = groups }; + } + + fn deinit(p: *Pipelines) void { + p.attention.deinit(); + p.engram.deinit(); + p.route.deinit(); + p.groups.deinit(); + p.mhc.deinit(); + p.ops.deinit(); + p.projection.deinit(); + } +}; + +/// Serialized unique owner; submissions finish before return/release, cancellation is between bounded chunks. +pub const Model = struct { + gpa: std.mem.Allocator, + device: mtl.Device, + queue: mtl.Queue, + residency: mtl.ResidencySet, + checkpoint: checkpoint.Checkpoint, + weights: weights.Model, + cfg: config.Config, + cfg_arena: std.heap.ArenaAllocator, + cache: kv.cache.State, + workspace: work.Workspace, + attention_workspace: attention.Workspace, + pipelines: Pipelines, + admitted_bytes: usize, + last_gpu_seconds: f64 = 0, + logits_rows: usize = 0, + valid: bool = true, + profile: ?*gpu_counters.Recorder = null, + grouped_prefill: bool = true, + observer: ?Observer = null, + pub const Observer = struct { + ctx: *anyopaque, + encode: *const fn (*anyopaque, mtl.ComputeEncoder, u32, gpu_counters.Stage, *const Model) void, + }; + + pub fn open(gpa: std.mem.Allocator, io: std.Io, o: Options) !Model { + var arena = std.heap.ArenaAllocator.init(gpa); + errdefer arena.deinit(); + const c = try config.Config.load(arena.allocator(), io, o.dir); + const capacity = try c.context(o.context); + const table_dir = o.table_dir orelse c.engram_table_dir orelse return error.MissingEngramTables; + var plan = try load.Plan.open(gpa, io, o.dir, table_dir); + defer plan.deinit(); + try weights.validate(&plan); + const map_blob = try std.Io.Dir.cwd().readFileAlloc(io, o.token_map, arena.allocator(), .limited(2 << 20)); + const map = try engram.hash.TokenMap.parse(map_blob); + const wp = try work.Plan.init(o.chunk_rows); + const kp = kv.cache.Plan{ .capacity = capacity, .layers = 40 }; + const workspace_bytes = try std.math.add(usize, wp.bytes, attention.Workspace.bytes(o.chunk_rows)); + const cache_bytes = try std.math.add(usize, kp.residentBytes(), weights.sizeofDescriptors()); + const execution_bytes = try std.math.add(usize, workspace_bytes, cache_bytes); + const rotary_bytes = attention.Pipelines.residentBytes(capacity, c.text_config); + const needed = try std.math.add(usize, plan.bytes, try std.math.add(usize, execution_bytes, rotary_bytes)); + const device = try mtl.Device.init(); + errdefer device.deinit(); + const margin: u64 = 8 << 30; + const available = device.maxWorkingSet() -| device.allocated() -| margin; + if (needed > available) { + std.log.err("full residency needs {d} bytes plus {d} margin; Metal admission allows {d}", .{ needed, margin, available }); + return error.InsufficientResidentMemory; + } + const max_buffer = mtl.objc.msg(u64, device.id, "maxBufferLength", .{}); + for (plan.shards.items) |shard| if (shard.end - shard.begin > max_buffer) return error.ShardExceedsMetalBufferLimit; + std.log.info("full resident admission: weights={d}, total={d}, context={d}, headroom={d}", .{ plan.bytes, needed, capacity, available - needed }); + var pipelines = try Pipelines.init(device, capacity, c.text_config); + errdefer pipelines.deinit(); + const queue = try device.queue(); + errdefer queue.deinit(); + const residency = try device.residencySet(plan.shards.items.len + 128); + errdefer residency.deinit(); + var cp = try plan.materialize(gpa, device, residency, queue); + errdefer cp.deinit(); + var bound = try weights.bind(device, &cp); + errdefer bound.deinit(); + var cache = try kv.cache.State.init(device, kp); + errdefer cache.deinit(); + var workspace = try work.Workspace.init(device, wp, map.bytes); + errdefer workspace.deinit(); + var aw = try attention.Workspace.init(device, o.chunk_rows); + errdefer aw.deinit(); + bound.registerResidency(residency); + cache.registerResidency(residency); + residency.add(workspace.buffer); + aw.registerResidency(residency); + pipelines.attention.registerResidency(residency); + residency.commit(); + residency.requestResidency(); + queue.addResidencySet(residency); + return .{ .gpa = gpa, .device = device, .queue = queue, .residency = residency, .checkpoint = cp, .weights = bound, .cfg = c, .cfg_arena = arena, .cache = cache, .workspace = workspace, .attention_workspace = aw, .pipelines = pipelines, .admitted_bytes = needed }; + } + + pub fn deinit(m: *Model) void { + m.queue.removeResidencySet(m.residency); + m.residency.deinit(); + m.attention_workspace.deinit(); + m.workspace.deinit(); + m.cache.deinit(); + m.weights.deinit(); + m.checkpoint.deinit(); + m.pipelines.deinit(); + m.queue.deinit(); + m.device.deinit(); + m.cfg_arena.deinit(); + } + + pub fn reset(m: *Model) !void { + const pool = mtl.objc.Pool.push(); + defer pool.pop(); + m.valid = false; + m.logits_rows = 0; + m.cache.position = 0; + m.attention_workspace.selection_layer = null; + m.attention_workspace.selection_rows = 0; + m.attention_workspace.candidate_rows = 0; + m.last_gpu_seconds = 0; + m.cache.saved_position = null; + @memset(m.cache.live.contents()[0..m.cache.plan.mutableBytes()], 0); + const cb = m.queue.commandBufferUnretained(); + const enc = cb.compute(.serial); + engram.encodeReset(enc, &m.pipelines.engram, m.workspace.view(.history)); + enc.end(); + cb.commit(); + cb.wait(); + try completed(cb); + m.valid = true; + m.logits_rows = 0; + } + + /// One command buffer per chunk; no operator waits or reads routes back to the CPU. + pub fn forward(m: *Model, ids: []const u32, logits: Logits) ![]const f32 { + if (!m.valid) return error.InvalidModelState; + if (ids.len == 0 or ids.len > m.workspace.plan.rows) return error.InvalidPrefillChunk; + if (m.cache.position > m.cache.plan.capacity or + ids.len > m.cache.plan.capacity - m.cache.position) return error.ContextFull; + for (ids) |id| if (id >= 129280) return error.UnsupportedToken; + m.logits_rows = 0; + @memcpy(m.workspace.tokenIds(ids.len), ids); + const pool = mtl.objc.Pool.push(); + defer pool.pop(); + const rows: u32 = @intCast(ids.len); + const e = m.queue.commandBufferUnretained(); + var enc = e.compute(.serial); + for (m.checkpoint.shards.items) |shard| enc.useResource(shard.buffer, mtl.ResourceUsage.read); + var encoding = true; + var record_started = false; + errdefer { + if (m.profile) |recorder| { + if (record_started) { + if (encoding) recorder.cancelEncoding(&enc) catch {} else recorder.discardAfterCompletion() catch {}; + } else if (encoding) enc.end(); + } else if (encoding) enc.end(); + } + if (m.profile) |recorder| { + try recorder.beginCommand(e); + record_started = true; + } + try m.profileSpan(&enc, .other); + const p = &m.pipelines; + const ws = &m.workspace; + for (engram.hash.layers, 0..) |meta, index| { + try engram.encodeHash(enc, &p.engram, meta, ws.view(.ids), ws.view(.token_map), null, ws.view(.history), ws.view(if (index == 0) .engram_ids_0 else .engram_ids_1), rows); + } + try engram.encodeCommit(enc, &p.engram, ws.view(.ids), ws.view(.token_map), null, ws.view(.history), rows); + ops.encodeEmbedding(enc, &p.ops, ws.view(.ids), tensor(m.weights.embed), ws.view(.collapsed), .{ .rows = rows, .width = 5120, .table_stride = 5120, .y_stride = 5120, .copies = 1 }); + enc.barrier(); + mhc.encodeExpand(enc, &p.mhc, ws.view(.collapsed), ws.view(.stream), ws.view(.previous_pre), .{ .rows = rows, .width = 5120, .x_stride = 5120, .stream_stride = 20480 }); + enc.barrier(); + for (&m.weights.layers, 0..) |*layer, index| { + if (layer.engram) |g| { + try m.profileSpan(&enc, .engram); + try engram.encodeGather(enc, &p.engram, .{ .weight = tensor(g.table), .scale = tensor(g.scales), .rows = @intCast(g.table.shape[0]) }, ws.view(if (index == 1) .engram_ids_0 else .engram_ids_1), ws.view(.engram_gather), rows, 6144); + try m.project(enc, g.wkv, ws.view(.engram_gather), ws.view(.engram_kv), rows, 6144, 25600, .bf16); + try engram.encodeGate(enc, &p.engram, .{ .q_weight = tensor(g.q_weight), .k_weight = tensor(g.k_weight), .dim = 5120, .copies = 4, .weight_dtype = switch (g.q_weight.dtype) { + .bf16 => .bf16, + .f16 => .f16, + .f32 => .f32, + else => unreachable, + }, .hidden_stride = 20480, .kv_stride = 25600, .output_stride = 20480, .eps = m.cfg.text_config.rms_norm_eps }, ws.view(.stream), ws.view(.engram_kv), null, ws.view(.stream), rows); + } + try m.profileSpan(&enc, .mhc); + m.mixes(enc, layer.hc_attn, ws.view(.attention_pre), rows); + mhc.encodeCollapse(enc, &p.mhc, ws.view(.stream), ws.view(.previous_pre), ws.view(.collapsed), .{ .rows = rows, .width = 5120, .stream_stride = 20480, .y_stride = 5120 }); + enc.barrier(); + m.normalize(enc, ws.view(.collapsed), layer.attn_norm, ws.view(.normalized), rows); + try m.profileSpan(&enc, .attention); + try attention.encode(&p.attention, enc, &layer.attn, &m.cache, &m.attention_workspace, ws.view(.normalized), ws.view(.branch), &p.projection, ws.projection(), @intCast(index), rows, m.cfg.text_config); + enc.barrier(); + try m.profileSpan(&enc, .mhc); + m.post(enc, rows); + if (m.observer) |observer| observer.encode(observer.ctx, enc, @intCast(index), .attention, m); + m.mixes(enc, layer.hc_ffn, ws.view(.previous_pre), rows); + mhc.encodeCollapse(enc, &p.mhc, ws.view(.stream), ws.view(.attention_pre), ws.view(.collapsed), .{ .rows = rows, .width = 5120, .stream_stride = 20480, .y_stride = 5120 }); + enc.barrier(); + m.normalize(enc, ws.view(.collapsed), layer.ffn_norm, ws.view(.normalized), rows); + try m.profileSpan(&enc, .moe); + try m.moe(enc, &layer.moe, rows); + try m.profileSpan(&enc, .mhc); + m.post(enc, rows); + if (m.observer) |observer| observer.encode(observer.ctx, enc, @intCast(index), .moe, m); + } + if (logits != .none) { + try m.profileSpan(&enc, .head); + const output_rows: u32 = if (logits == .all) rows else 1; + const first: usize = if (logits == .all) 0 else rows - 1; + mhc.encodeCollapse(enc, &p.mhc, ws.view(.stream).shifted(first * 20480 * 2), ws.view(.previous_pre).shifted(first * 4 * 4), ws.view(.collapsed), .{ .rows = output_rows, .width = 5120, .stream_stride = 20480, .y_stride = 5120 }); + enc.barrier(); + m.normalize(enc, ws.view(.collapsed), m.weights.norm, ws.view(.normalized), output_rows); + try m.project(enc, m.weights.head, ws.view(.normalized), ws.view(.logits), output_rows, 5120, 129280, .f32); + } + if (m.profile) |recorder| { + if (recorder.activeSpan()) try recorder.endSpan(&enc); + try recorder.finishEncoding(&enc); + } else enc.end(); + encoding = false; + m.valid = false; + e.commit(); + e.wait(); + try completed(e); + if (m.profile) |recorder| _ = try recorder.readAfterCompletion(); + try m.cache.append(rows); + m.last_gpu_seconds = e.gpuSeconds(); + m.valid = true; + m.logits_rows = if (logits == .all) rows else if (logits == .last) 1 else 0; + return ws.logits(m.logits_rows); + } + + fn profileSpan(m: *Model, encoder: *mtl.ComputeEncoder, stage: gpu_counters.Stage) !void { + const recorder = m.profile orelse return; + if (!recorder.enabled()) return; + if (recorder.activeSpan()) try recorder.endSpan(encoder); + try recorder.beginSpan(encoder, stage); + for (m.checkpoint.shards.items) |shard| encoder.useResource(shard.buffer, mtl.ResourceUsage.read); + } + + fn normalize(m: *Model, enc: mtl.ComputeEncoder, x: View, w: checkpoint.Tensor, y: View, rows: u32) void { + ops.encodeRms(enc, &m.pipelines.ops, x, tensor(w), y, .{ .rows = rows, .width = 5120, .x_stride = 5120, .y_stride = 5120, .eps = m.cfg.text_config.rms_norm_eps }); + enc.barrier(); + } + + fn mixes(m: *Model, enc: mtl.ComputeEncoder, w: weights.Hc, pre: View, rows: u32) void { + const ws = &m.workspace; + mhc.encodeRms(enc, &m.pipelines.mhc, ws.view(.stream), ws.view(.inv), .{ .rows = rows, .width = 5120, .stream_stride = 20480, .eps = m.cfg.text_config.rms_norm_eps }); + ops.encodeDense(enc, &m.pipelines.ops, ws.view(.stream), tensor(w.projection), ws.view(.mixes), .{ .rows = rows, .k = 20480, .n = 24, .x_stride = 20480, .w_stride = 20480, .y_stride = 24, .w_dtype = .f32, .y_dtype = .f32 }); + enc.barrier(); + mhc.encodeSplit(enc, &m.pipelines.mhc, ws.view(.mixes), ws.view(.inv), tensor(w.scale), tensor(w.base), pre, ws.view(.post), ws.view(.comb), .{ .rows = rows, .eps = m.cfg.text_config.hc_eps }); + enc.barrier(); + } + + fn post(m: *Model, enc: mtl.ComputeEncoder, rows: u32) void { + const ws = &m.workspace; + mhc.encodePost(enc, &m.pipelines.mhc, ws.view(.branch), ws.view(.stream), ws.view(.post), ws.view(.comb), ws.view(.stream), .{ .rows = rows, .width = 5120, .branch_stride = 5120, .residual_stride = 20480, .y_stride = 20480 }); + enc.barrier(); + } + + fn project(m: *Model, enc: mtl.ComputeEncoder, matrix: exl3.Matrix, x: View, y: View, rows: u32, xs: usize, ys: usize, output: exl3.Output) !void { + try exl3.encode(&m.pipelines.projection, enc, matrix, convert(x), convert(y), m.workspace.projection(), .{ .count = rows, .x_stride = xs, .y_stride = ys, .output = output }); + enc.barrier(); + } + + fn moe(m: *Model, enc: mtl.ComputeEncoder, w: *const weights.Moe, rows: u32) !void { + const ws = &m.workspace; + const p = &m.pipelines; + ops.encodeDense(enc, &p.ops, ws.view(.normalized), tensor(w.gate), ws.view(.router_logits), .{ .rows = rows, .k = 5120, .n = 384, .x_stride = 5120, .w_stride = 5120, .y_stride = 384, .w_dtype = switch (w.gate.dtype) { + .bf16 => .bf16, + else => .f16, + }, .y_dtype = .f32 }); + enc.barrier(); + route.encode(enc, &p.route, ws.view(.router_logits), tensor(w.bias), ws.view(.route_ids), ws.view(.route_weights), .{ .rows = rows, .bias_dtype = switch (w.bias.dtype) { + .f32 => .f32, + .f16 => .f16, + .bf16 => .bf16, + else => .f16, + } }); + enc.barrier(); + const grouped: ?expert_groups.Scratch = if (m.grouped_prefill and rows >= 8) try ws.grouping(rows) else null; + var routed_rows = exl3.Rows{ .count = @as(usize, rows) * 6, .x_stride = 5120, .y_stride = 2304, .input_rows = rows, .output_rows = @as(usize, rows) * 6, .routes = .{ .ids = convert(ws.view(.route_ids)), .repeat = 6 } }; + if (grouped) |g| { + try expert_groups.encode(enc, &p.groups, convert(ws.view(.route_ids)), g, 6); + routed_rows.count = g.plan.padded; + routed_rows.input_ids = g.view(.token_ids); + routed_rows.output_ids = g.view(.slot_ids); + routed_rows.routes = .{ .ids = g.view(.expert_ids) }; + routed_rows.grouped = true; + } + for (0..2) |i| { + try exl3.encodeIndexed(&p.projection, enc, .{ .descriptors = .{ .buffer = w.descriptors[i] }, .count = 384, .k = 5120, .n = 2304 }, convert(ws.view(.normalized)), convert(ws.view(if (i == 0) .gate else .up)), ws.projection(), routed_rows); + enc.barrier(); + } + ops.encodeSwiGLU(enc, &p.ops, ws.view(.gate), ws.view(.up), ws.view(.route_weights), ws.view(.activation), .{ .rows = rows * 6, .width = 2304, .input_stride = 2304, .output_stride = 2304, .weighted = true }); + enc.barrier(); + routed_rows.x_stride = 2304; + routed_rows.y_stride = 5120; + routed_rows.routes.?.repeat = 1; + routed_rows.input_rows = @as(usize, rows) * 6; + if (grouped) |g| routed_rows.input_ids = g.view(.slot_ids); + try exl3.encodeIndexed(&p.projection, enc, .{ .descriptors = .{ .buffer = w.descriptors[2] }, .count = 384, .k = 2304, .n = 5120 }, convert(ws.view(.activation)), convert(ws.view(.routed)), ws.projection(), routed_rows); + enc.barrier(); + try m.project(enc, w.shared[0], ws.view(.normalized), ws.view(.shared_gate), rows, 5120, 2304, .bf16); + try m.project(enc, w.shared[1], ws.view(.normalized), ws.view(.shared_up), rows, 5120, 2304, .bf16); + ops.encodeSwiGLU(enc, &p.ops, ws.view(.shared_gate), ws.view(.shared_up), ws.view(.route_weights), ws.view(.shared_activation), .{ .rows = rows, .width = 2304, .input_stride = 2304, .output_stride = 2304 }); + enc.barrier(); + try m.project(enc, w.shared[2], ws.view(.shared_activation), ws.view(.shared_down), rows, 2304, 5120, .bf16); + ops.encodeCombine(enc, &p.ops, ws.view(.routed), ws.view(.shared_down), ws.view(.route_ids), ws.view(.branch), .{ .rows = rows, .width = 5120, .routed_row_stride = 6 * 5120, .slot_stride = 5120, .shared_stride = 5120, .y_stride = 5120 }); + enc.barrier(); + } +}; + +fn tensor(t: checkpoint.Tensor) View { + return .{ .buffer = t.buffer, .offset = t.offset }; +} +fn convert(v: View) exl3.View { + return .{ .buffer = v.buffer, .offset = v.offset }; +} +fn completed(cb: mtl.CommandBuffer) !void { + if (cb.failure()) |message| { + std.log.err("DeepSeek V4.1 GPU execution failed: {s}", .{message}); + return error.GpuExecutionFailed; + } +} diff --git a/zig/src/families/deepseek_v41/ops.zig b/zig/src/families/deepseek_v41/ops.zig new file mode 100644 index 0000000000..68fd169857 --- /dev/null +++ b/zig/src/families/deepseek_v41/ops.zig @@ -0,0 +1,110 @@ +//! Trusted plaintext encoders: callers validate nonzero shapes/storage; strides count elements, EXL3 is separate. +const mtl = @import("metal"); +const sources = @import("kernel_sources"); +pub const View = @import("view.zig").View; + +pub const Pipelines = struct { + rms: mtl.Pipeline, + dense: mtl.Pipeline, + embedding: mtl.Pipeline, + swiglu: mtl.Pipeline, + combine: mtl.Pipeline, + + pub fn load(device: mtl.Device) !Pipelines { + const pool = mtl.objc.Pool.push(); + defer pool.pop(); + var options = mtl.CompileOptions.mlx(); + options.math_functions = .precise; + const lib = try mtl.Library.fromSource(device, sources.deepseek_v41_ops, options); + defer lib.deinit(); + const rms = try mtl.Pipeline.init(device, lib, "dsv41_rms", false); + errdefer rms.deinit(); + const dense = try mtl.Pipeline.init(device, lib, "dsv41_dense", false); + errdefer dense.deinit(); + const embedding = try mtl.Pipeline.init(device, lib, "dsv41_embedding", false); + errdefer embedding.deinit(); + const swiglu = try mtl.Pipeline.init(device, lib, "dsv41_swiglu", false); + errdefer swiglu.deinit(); + const combine = try mtl.Pipeline.init(device, lib, "dsv41_combine", false); + return .{ .rms = rms, .dense = dense, .embedding = embedding, .swiglu = swiglu, .combine = combine }; + } + pub fn deinit(p: *Pipelines) void { + p.rms.deinit(); + p.dense.deinit(); + p.embedding.deinit(); + p.swiglu.deinit(); + p.combine.deinit(); + } +}; +fn bind(e: mtl.ComputeEncoder, refs: anytype) void { + inline for (refs, 0..) |r, i| e.setBuffer(r.buffer, r.offset, i); +} +pub const Rms = struct { rows: u32, width: u32, x_stride: u32, y_stride: u32, eps: f32, weight_f32: bool = false }; +/// BF16 x/y [rows,width], BF16 or FP32 weight [width]; sums, mean and affine product are FP32. +pub fn encodeRms(e: mtl.ComputeEncoder, p: *const Pipelines, x: View, weight: View, y: View, d: Rms) void { + e.setPipeline(p.rms); + bind(e, .{ x, weight, y }); + const D = extern struct { rows: u32, width: u32, x_stride: u32, y_stride: u32, eps: f32, weight_f32: u32 }; + e.setValue(D{ .rows = d.rows, .width = d.width, .x_stride = d.x_stride, .y_stride = d.y_stride, .eps = d.eps, .weight_f32 = @intFromBool(d.weight_f32) }, 3); + e.dispatchGroups(mtl.Size.of(d.rows, 1, 1), mtl.Size.of(256, 1, 1)); +} +pub const Dtype = enum(u32) { bf16 = 0, f32 = 1, f16 = 2 }; +pub const Dense = struct { + rows: u32, + k: u32, + n: u32, + groups: u32 = 1, + x_stride: u32, + w_stride: u32, + y_stride: u32, + x_dtype: Dtype = .bf16, + w_dtype: Dtype = .bf16, + y_dtype: Dtype = .bf16, +}; +/// x[rows,groups,k], w[groups,n,k], y[rows,groups,n]; packed groups, padded token pitches, FP32 sums, final BF16. +pub fn encodeDense(e: mtl.ComputeEncoder, p: *const Pipelines, x: View, w: View, y: View, d: Dense) void { + e.setPipeline(p.dense); + bind(e, .{ x, w, y }); + e.setValue([10]u32{ d.rows, d.k, d.n, d.groups, d.x_stride, d.w_stride, d.y_stride, @backingInt(d.x_dtype), @backingInt(d.w_dtype), @backingInt(d.y_dtype) }, 3); + e.dispatchGroups(mtl.Size.of((d.n + 15) / 16, d.rows, d.groups), mtl.Size.of(128, 1, 1)); +} +pub const Embedding = extern struct { rows: u32, width: u32, table_stride: u32, y_stride: u32, copies: u32 = 4 }; +/// ids[rows] u32 must be in vocabulary; table[vocab,width] BF16 -> y[rows,copies,width] BF16. +pub fn encodeEmbedding(e: mtl.ComputeEncoder, p: *const Pipelines, ids: View, table: View, y: View, d: Embedding) void { + e.setPipeline(p.embedding); + bind(e, .{ ids, table, y }); + e.setValue(d, 3); + e.dispatchThreads(mtl.Size.of(d.width, d.rows, 1), mtl.Size.of(256, 1, 1)); +} +pub const Activation = struct { + rows: u32, + width: u32, + input_stride: u32, + output_stride: u32, + weighted: bool = false, + input_f32: bool = false, +}; +/// Separate gate/up; apply FP32 weights before BF16 cast/down. Unweighted calls borrow but never read weights. +pub fn encodeSwiGLU(e: mtl.ComputeEncoder, p: *const Pipelines, gate: View, up: View, weights: View, y: View, d: Activation) void { + e.setPipeline(p.swiglu); + bind(e, .{ gate, up, weights, y }); + e.setValue([6]u32{ d.rows, d.width, d.input_stride, d.output_stride, @intFromBool(d.weighted), @intFromBool(d.input_f32) }, 4); + e.dispatchThreads(mtl.Size.of(d.width, d.rows, 1), mtl.Size.of(256, 1, 1)); +} +pub const Combine = struct { + rows: u32, + width: u32, + routed_row_stride: u32, + slot_stride: u32, + shared_stride: u32, + y_stride: u32, + input_f32: bool = false, + id_stride: u32 = 6, +}; +/// Sum six weighted down slots by ascending expert ID in FP32, then shared; final BF16, invalid IDs yield NaN. +pub fn encodeCombine(e: mtl.ComputeEncoder, p: *const Pipelines, routed: View, shared: View, ids: View, y: View, d: Combine) void { + e.setPipeline(p.combine); + bind(e, .{ routed, shared, ids, y }); + e.setValue([8]u32{ d.rows, d.width, d.routed_row_stride, d.slot_stride, d.shared_stride, d.y_stride, @intFromBool(d.input_f32), d.id_stride }, 4); + e.dispatchThreads(mtl.Size.of(d.width, d.rows, 1), mtl.Size.of(256, 1, 1)); +} diff --git a/zig/src/families/deepseek_v41/ops_check.zig b/zig/src/families/deepseek_v41/ops_check.zig new file mode 100644 index 0000000000..bfe08f4dd8 --- /dev/null +++ b/zig/src/families/deepseek_v41/ops_check.zig @@ -0,0 +1,191 @@ +//! Independent GPU consumer fixtures; pinned official inference equations and provenance in THIRD_PARTY_NOTICES.md. +const std = @import("std"); +const mtl = @import("metal"); +const ops = @import("ops.zig"); +const support = @import("test_support.zig"); +const bf = support.bf; +const fp = support.fp; +const view = support.view; +const Buffers = support.Buffers; +const done = support.done; +const close = support.close; + +test "V4.1 BF16 RMS, F16 dense row independence, grouped wo_a, embedding, clamped weighted SwiGLU and shared combine" { + const device = mtl.Device.init() catch return error.SkipZigTest; + defer device.deinit(); + const pool = mtl.objc.Pool.push(); + defer pool.pop(); + const queue = try device.queue(); + defer queue.deinit(); + var p = try ops.Pipelines.load(device); + defer p.deinit(); + var b = Buffers{ .device = device }; + defer b.deinit(); + const x = try b.get(u16, 16); + const w = try b.get(u16, 4); + const norm = try b.get(u16, 16); + const xs = x.slice(u16, 16); + const ws = w.slice(u16, 4); + for (0..2) |r| for (0..4) |i| { + xs[r * 8 + i] = bf(@as(f32, @floatFromInt(1 + i + r))); + }; + for (ws, 0..) |*v, i| v.* = bf(@as(f32, @floatFromInt(i + 1)) * 0.5); + const f16w = try b.get(f16, 8); + const fws = f16w.slice(f16, 8); + for (fws, 0..) |*v, i| v.* = @floatCast(@as(f32, @floatFromInt(i + 1)) * 0.125 + 0.0009765625); + const dense = try b.get(f32, 8); + const dense_one = try b.get(f32, 2); + const grouped = try b.get(u16, 8); + const gw = try b.get(u16, 8); + for (gw.slice(u16, 8), 0..) |*v, i| v.* = bf(@as(f32, @floatFromInt(i + 1)) * 0.25); + const ids = try b.get(u32, 2); + ids.slice(u32, 2)[0] = 1; + ids.slice(u32, 2)[1] = 0; + const embed = try b.get(u16, 32); + const gate = try b.get(f32, 8); + const up = try b.get(f32, 8); + @memcpy(gate.slice(f32, 8), &[_]f32{ -100, -12, 1, 100, -2, 0, 8, 12 }); + @memcpy(up.slice(f32, 8), &[_]f32{ -100, -12, 1, 100, 12, -20, 0.5, 1 }); + const weights = try b.get(f32, 2); + @memcpy(weights.slice(f32, 2), &[_]f32{ 0.25, 1.25 }); + const act = try b.get(u16, 8); + const routed = try b.get(u16, 48); + const combine_ids = try b.get(u32, 12); + @memcpy(combine_ids.slice(u32, 12), &[_]u32{ 5, 3, 1, 4, 2, 0, 5, 3, 1, 4, 2, 0 }); + const shared = try b.get(u16, 8); + const combined = try b.get(u16, 8); + const values = [_]f32{ 1, 33554432, -33554432, 2, 4, 8 }; + for (routed.slice(u16, 48), 0..) |*v, i| v.* = bf(values[(i % 24) / 4]); + @memset(shared.slice(u16, 8), bf(2.5)); + const cb = queue.commandBuffer(); + const e = cb.compute(.serial); + ops.encodeRms(e, &p, view(x), view(w), view(norm), .{ .rows = 2, .width = 4, .x_stride = 8, .y_stride = 8, .eps = 1e-20 }); + ops.encodeDense(e, &p, view(x), view(f16w), view(dense), .{ .rows = 2, .k = 4, .n = 2, .x_stride = 8, .w_stride = 4, .y_stride = 4, .w_dtype = .f16, .y_dtype = .f32 }); + ops.encodeDense(e, &p, view(x).shifted(16), view(f16w), view(dense_one), .{ .rows = 1, .k = 4, .n = 2, .x_stride = 8, .w_stride = 4, .y_stride = 2, .w_dtype = .f16, .y_dtype = .f32 }); + ops.encodeDense(e, &p, view(x), view(gw), view(grouped), .{ .rows = 2, .k = 2, .n = 2, .groups = 2, .x_stride = 8, .w_stride = 2, .y_stride = 4 }); + ops.encodeEmbedding(e, &p, view(ids), view(x), view(embed), .{ .rows = 2, .width = 4, .table_stride = 8, .y_stride = 16 }); + ops.encodeSwiGLU(e, &p, view(gate), view(up), view(weights), view(act), .{ .rows = 2, .width = 4, .input_stride = 4, .output_stride = 4, .weighted = true, .input_f32 = true }); + ops.encodeCombine(e, &p, view(routed), view(shared), view(combine_ids), view(combined), .{ .rows = 2, .width = 4, .routed_row_stride = 24, .slot_stride = 4, .shared_stride = 4, .y_stride = 4 }); + try done(cb, e); + for (0..2) |r| { + var sum: f64 = 0; + for (0..4) |i| sum += @as(f64, fp(xs[r * 8 + i])) * fp(xs[r * 8 + i]); + for (0..4) |i| try close(@as(f64, fp(xs[r * 8 + i])) / @sqrt(sum / 4 + 1e-20) * fp(ws[i]), fp(norm.slice(u16, 16)[r * 8 + i]), 0.04); + for (0..2) |j| { + var ref: f64 = 0; + for (0..4) |k| ref += @as(f64, fp(xs[r * 8 + k])) * @as(f64, fws[j * 4 + k]); + try close(ref, dense.slice(f32, 8)[r * 4 + j], 1e-6); + } + for (0..2) |g| for (0..2) |j| { + var ref: f32 = 0; + for (0..2) |k| ref += fp(xs[r * 8 + g * 2 + k]) * fp(gw.slice(u16, 8)[g * 4 + j * 2 + k]); + try std.testing.expectEqual(bf(ref), grouped.slice(u16, 8)[r * 4 + g * 2 + j]); + }; + for (0..4) |copy| for (0..4) |i| try std.testing.expectEqual(xs[(1 - r) * 8 + i], embed.slice(u16, 32)[r * 16 + copy * 4 + i]); + for (0..4) |i| { + const k = r * 4 + i; + const a: f64 = @min(gate.slice(f32, 8)[k], 10); + const u: f64 = @max(-10, @min(up.slice(f32, 8)[k], 10)); + const activated = a / (1 + @exp(-a)) * u * weights.slice(f32, 2)[r]; + try close(activated, fp(act.slice(u16, 8)[k]), @abs(activated) * 0.004 + 1e-35); + var ref: f32 = 0; + for ([_]usize{ 5, 2, 4, 1, 3, 0 }) |slot| ref += fp(routed.slice(u16, 48)[r * 24 + slot * 4 + i]); + try std.testing.expectEqual(bf(ref + 2.5), combined.slice(u16, 8)[k]); + } + } + for (0..2) |j| try std.testing.expectEqual(dense.slice(f32, 8)[4 + j], dense_one.slice(f32, 2)[j]); +} + +test "V4.1 CUDA RMS mean projection preserves the BF16 affine tie" { + const device = mtl.Device.init() catch return error.SkipZigTest; + defer device.deinit(); + const pool = mtl.objc.Pool.push(); + defer pool.pop(); + const queue = try device.queue(); + defer queue.deinit(); + var p = try ops.Pipelines.load(device); + defer p.deinit(); + var buffers = Buffers{ .device = device }; + defer buffers.deinit(); + const width = 5120; + const x = try buffers.get(u16, width); + const weight = try buffers.get(f32, width); + const output = try buffers.get(u16, width); + x.slice(u16, width)[0] = bf(3); + @memset(weight.slice(f32, width), @bitCast(@as(u32, 0x3c65de29))); + const cb = queue.commandBuffer(); + const e = cb.compute(.serial); + ops.encodeRms(e, &p, view(x), view(weight), view(output), .{ .rows = 1, .width = width, .x_stride = width, .y_stride = width, .eps = 1e-20, .weight_f32 = true }); + try done(cb, e); + // Pinned CUDA RMSNorm.forward returns 1; sum / width crosses to the next BF16 value. + try std.testing.expectEqual(bf(1), output.slice(u16, width)[0]); + for (output.slice(u16, width)[1..]) |v| try std.testing.expectEqual(@as(u16, 0), v); +} + +test "V4.1 FP32 dense retains product and reduction cancellation" { + const device = mtl.Device.init() catch return error.SkipZigTest; + defer device.deinit(); + const pool = mtl.objc.Pool.push(); + defer pool.pop(); + const queue = try device.queue(); + defer queue.deinit(); + var p = try ops.Pipelines.load(device); + defer p.deinit(); + var buffers = Buffers{ .device = device }; + defer buffers.deinit(); + const k = 96; + const n = 3; + const x = try buffers.get(u16, k); + const w = try buffers.get(f32, k * n); + const y = try buffers.get(f32, n); + @memset(x.slice(u16, k), bf(3)); + const weights = w.slice(f32, k * n); + weights[0] = 0x1p25; + weights[32] = 1; + weights[64] = -0x1p25; + weights[k] = 1 + 0x1p-23; + weights[k + 32] = -1; + weights[2 * k] = 0x1p25; + weights[2 * k + 1] = 1; + weights[2 * k + 2] = -0x1p25; + const cb = queue.commandBuffer(); + const enc = cb.compute(.serial); + ops.encodeDense(enc, &p, view(x), view(w), view(y), .{ .rows = 1, .k = k, .n = n, .x_stride = k, .w_stride = k, .y_stride = n, .w_dtype = .f32, .y_dtype = .f32 }); + try done(cb, enc); + for (0..n) |column| { + var expected: f64 = 0; + for (0..k) |index| expected += @as(f64, fp(x.slice(u16, k)[index])) * weights[column * k + index]; + try std.testing.expectEqual(@as(f32, @floatCast(expected)), y.slice(f32, n)[column]); + } +} + +test "V4.1 weighted SiLU preserves division rounding before BF16 activation" { + const device = mtl.Device.init() catch return error.SkipZigTest; + defer device.deinit(); + const pool = mtl.objc.Pool.push(); + defer pool.pop(); + const queue = try device.queue(); + defer queue.deinit(); + var p = try ops.Pipelines.load(device); + defer p.deinit(); + var buffers = Buffers{ .device = device }; + defer buffers.deinit(); + const gate = try buffers.get(u16, 1); + const up = try buffers.get(u16, 1); + const weights = try buffers.get(f32, 1); + const output = try buffers.get(u16, 1); + gate.slice(u16, 1)[0] = bf(0.78515625); + up.slice(u16, 1)[0] = bf(-6.96875); + weights.slice(f32, 1)[0] = 0.25; + const cb = queue.commandBuffer(); + const encoder = cb.compute(.serial); + ops.encodeSwiGLU(encoder, &p, view(gate), view(up), view(weights), view(output), .{ .rows = 1, .width = 1, .input_stride = 1, .output_stride = 1, .weighted = true }); + try done(cb, encoder); + // Source SiLU divides before up/route multiplication; reciprocal multiplication crosses this BF16 tie. + try std.testing.expectEqual(bf(-0.94140625), output.slice(u16, 1)[0]); +} + +test { + _ = @import("mhc_test.zig"); + _ = @import("route_test.zig"); +} diff --git a/zig/src/families/deepseek_v41/profiler.zig b/zig/src/families/deepseek_v41/profiler.zig new file mode 100644 index 0000000000..fe3a85b5fc --- /dev/null +++ b/zig/src/families/deepseek_v41/profiler.zig @@ -0,0 +1,93 @@ +//! Family stage labels over the generic same-command-buffer counter recorder; no extra storage or GPU waits. +const std = @import("std"); +const mtl = @import("metal"); +const counters = @import("../../core/gpu_counters.zig"); + +pub const Stage = enum { engram, mhc, attention, moe, head, other }; +pub const stage_count = @typeInfo(Stage).@"enum".field_names.len; +pub const Options = counters.Options; +pub const Aggregate = counters.Aggregate; +pub const Span = counters.Span; + +pub fn class(stage: Stage) counters.Class { + return switch (stage) { + .engram => .embedding, + .mhc => .norm, + .attention => .attention, + .moe, .head => .dense, + .other => .copy, + }; +} +pub fn stageOf(span: Span) !Stage { + if (span.metadata >= stage_count) return error.InvalidProfileStage; + return @fromBackingInt(@intCast(span.metadata)); +} + +/// Unique owner of the recorder; stage metadata and class totals share the recorder's bounded span storage. +pub const Recorder = struct { + recorder: counters.Recorder, + totals: [stage_count]Aggregate = @splat(.{}), + + pub fn init(allocator: std.mem.Allocator, device: mtl.Device, options: Options) !Recorder { + return .{ .recorder = try counters.Recorder.init(allocator, device, options) }; + } + pub fn enabled(self: *const Recorder) bool { + return self.recorder.enabled(); + } + pub fn capability(self: *const Recorder) mtl.counters.Capability { + return self.recorder.capability(); + } + pub fn activeSpan(self: *const Recorder) bool { + return self.recorder.active_span != null; + } + pub fn beginCommand(self: *Recorder, cb: mtl.CommandBuffer) !void { + try self.recorder.beginCommand(cb); + self.totals = @splat(.{}); + } + pub fn beginSpan(self: *Recorder, encoder: *mtl.ComputeEncoder, stage: Stage) !void { + try self.recorder.beginSpan(encoder, class(stage), @intCast(@backingInt(stage))); + } + pub fn endSpan(self: *Recorder, encoder: *mtl.ComputeEncoder) !void { + try self.recorder.endSpan(encoder); + } + pub fn finishEncoding(self: *Recorder, encoder: *mtl.ComputeEncoder) !void { + try self.recorder.finishEncoding(encoder); + } + pub fn cancelEncoding(self: *Recorder, encoder: *mtl.ComputeEncoder) !void { + try self.recorder.cancelEncoding(encoder); + self.totals = @splat(.{}); + } + pub fn discardAfterCompletion(self: *Recorder) !void { + try self.recorder.discardAfterCompletion(); + self.totals = @splat(.{}); + } + pub fn readAfterCompletion(self: *Recorder) ![]const Span { + const spans = try self.recorder.readAfterCompletion(); + var totals: [stage_count]Aggregate = @splat(.{}); + for (spans) |span| { + const total = &totals[@backingInt(try stageOf(span))]; + total.calls += 1; + total.gpu_seconds += span.gpu_seconds; + } + self.totals = totals; + return spans; + } + pub fn aggregates(self: *const Recorder) [stage_count]Aggregate { + return self.totals; + } + pub fn deinit(self: *Recorder) !void { + try self.recorder.deinit(); + self.totals = @splat(.{}); + } +}; + +test "disabled family profiling allocates nothing and leaves no stage receipts" { + var recorder = try Recorder.init(std.testing.failing_allocator, undefined, .{}); + defer recorder.deinit() catch unreachable; + var encoder: mtl.ComputeEncoder = undefined; + try recorder.beginSpan(&encoder, .mhc); + try recorder.endSpan(&encoder); + try std.testing.expect(!recorder.activeSpan()); + try std.testing.expectEqual(@as(usize, 0), (try recorder.readAfterCompletion()).len); + for (recorder.aggregates()) |total| try std.testing.expectEqual(@as(u64, 0), total.calls); +} diff --git a/zig/src/families/deepseek_v41/rope.zig b/zig/src/families/deepseek_v41/rope.zig new file mode 100644 index 0000000000..cc3419f7c3 --- /dev/null +++ b/zig/src/families/deepseek_v41/rope.zig @@ -0,0 +1,134 @@ +//! Adjacent-pair BF16 RoPE using resident, source-style complex rotation factors. +const std = @import("std"); +const mtl = @import("metal"); +const sources = @import("kernel_sources"); +const View = @import("view.zig").View; + +pub const Spec = struct { + theta: f32, + factor: f32 = 16, + original: u32 = 0, + beta_fast: f32 = 32, + beta_slow: f32 = 1, + + fn validate(s: Spec) !void { + if (!std.math.isFinite(s.theta) or s.theta <= 1 or + !std.math.isFinite(s.factor) or s.factor <= 0 or + !std.math.isFinite(s.beta_fast) or s.beta_fast <= 0 or + !std.math.isFinite(s.beta_slow) or s.beta_slow <= 0) + return error.InvalidRotarySpec; + } +}; +pub const Spectrum = enum(u32) { normal, compressed }; +pub const Params = extern struct { + rows: u32, + heads: u32, + width: u32, + rotary: u32, + stride: u32, + position: u32, + step: u32 = 1, + inverse: u32 = 0, + spectrum: Spectrum = .normal, + + pub fn validate(p: Params) !void { + if (p.rows == 0 or p.heads == 0 or p.rotary == 0 or p.rotary % 2 != 0 or + p.rotary > p.width or @as(u64, p.stride) < @as(u64, p.heads) * p.width or + p.step == 0 or p.inverse > 1 or + @as(u64, p.rows - 1) * p.stride + @as(u64, p.heads) * p.width > std.math.maxInt(u32)) + return error.InvalidRotaryShape; + } +}; + +// Keep FP32 tensor/angle boundaries, FP64 corrected_dim logs, and FP32-rounded polar unaries; never per-head recompute. +fn fillFactors(out: []f32, capacity: u32, rotary: u32, spec: Spec) void { + @setFloatMode(.strict); + const dim: f32 = @floatFromInt(rotary); + const pairs: usize = rotary / 2; + var low: f32 = 0; + var high: f32 = 0; + if (spec.original > 0) { + const original: f64 = @floatFromInt(spec.original); + const dim64: f64 = @floatFromInt(rotary); + const denominator = 2 * @log(@as(f64, spec.theta)); + low = @floatCast(@max(@floor(dim64 * @log(original / + (@as(f64, spec.beta_fast) * 2 * std.math.pi)) / denominator), 0)); + high = @floatCast(@min(@ceil(dim64 * @log(original / + (@as(f64, spec.beta_slow) * 2 * std.math.pi)) / denominator), dim64 - 1)); + } + for (0..pairs) |pair| { + const exponent: f32 = @as(f32, @floatFromInt(pair * 2)) / dim; + const power: f32 = @floatCast(std.math.pow(f64, spec.theta, exponent)); + var frequency: f32 = 1 / power; + if (spec.original > 0) { + const ramp: f32 = std.math.clamp((@as(f32, @floatFromInt(pair)) - low) / + @max(high - low, @as(f32, 1e-3)), 0, 1); + const smooth: f32 = 1 - ramp; + const scaled: f32 = frequency / spec.factor; + const slow: f32 = scaled * (1 - smooth); + const fast: f32 = frequency * smooth; + frequency = slow + fast; + } + for (0..capacity) |position| { + const angle: f32 = @as(f32, @floatFromInt(position)) * frequency; + const at = (position * pairs + pair) * 2; + out[at] = @floatCast(@cos(@as(f64, angle))); + out[at + 1] = @floatCast(@sin(@as(f64, angle))); + } + } +} + +pub const Pipelines = struct { + rotate: mtl.Pipeline, + factors: mtl.Buffer, + capacity: u32, + rotary: u32, + + pub fn residentBytes(capacity: u32, rotary: u32) usize { + return 2 * @as(usize, capacity) * (rotary / 2) * 2 * @sizeOf(f32); + } + + pub fn load(device: mtl.Device, capacity: u32, rotary: u32, normal: Spec, compressed: Spec) !Pipelines { + if (capacity == 0 or rotary == 0 or rotary % 2 != 0 or + @as(u64, capacity) * rotary > std.math.maxInt(usize) / (2 * @sizeOf(f32))) + return error.InvalidRotaryShape; + try normal.validate(); + try compressed.validate(); + var options = mtl.CompileOptions.mlx(); + options.math_functions = .precise; + const lib = try mtl.Library.fromSource(device, sources.deepseek_v41_rope, options); + defer lib.deinit(); + const rotate = try mtl.Pipeline.init(device, lib, "dsv41_rope", false); + errdefer rotate.deinit(); + const factors = try device.buffer(residentBytes(capacity, rotary), mtl.ResourceOptions.shared | mtl.ResourceOptions.untracked); + errdefer factors.deinit(); + const count = @as(usize, capacity) * rotary; + const values = factors.slice(f32, 2 * count); + fillFactors(values[0..count], capacity, rotary, normal); + fillFactors(values[count..], capacity, rotary, compressed); + return .{ .rotate = rotate, .factors = factors, .capacity = capacity, .rotary = rotary }; + } + pub fn deinit(p: *Pipelines) void { + p.factors.deinit(); + p.rotate.deinit(); + } + pub fn registerResidency(p: *const Pipelines, set: mtl.ResidencySet) void { + set.add(p.factors); + } + pub fn encode(p: *const Pipelines, enc: mtl.ComputeEncoder, x: View, args: Params) !void { + try args.validate(); + const last = @as(u64, args.position) + @as(u64, args.rows - 1) * args.step; + if (args.rotary != p.rotary or last >= p.capacity) return error.InvalidRotaryShape; + try x.requireRows(args.rows, args.stride, @as(usize, args.heads) * args.width, 2); + const offset = switch (args.spectrum) { + .normal => 0, + .compressed => @as(usize, p.capacity) * p.rotary * @sizeOf(f32), + }; + enc.setPipeline(p.rotate); + enc.setBuffer(x.buffer, x.offset, 0); + enc.setValue(args, 1); + enc.setBuffer(p.factors, offset, 2); + enc.dispatchThreads(mtl.Size.of(args.rotary / 2, args.heads, args.rows), mtl.Size.of(32, 1, 1)); + enc.barrier(); + } +}; diff --git a/zig/src/families/deepseek_v41/route.zig b/zig/src/families/deepseek_v41/route.zig new file mode 100644 index 0000000000..00c1a1ff10 --- /dev/null +++ b/zig/src/families/deepseek_v41/route.zig @@ -0,0 +1,39 @@ +//! Exhaustive 384-expert sqrt-softplus top-six routing. Bias affects selection, never returned weights. +const mtl = @import("metal"); +const sources = @import("kernel_sources"); +pub const View = @import("view.zig").View; +pub const Dtype = @import("ops.zig").Dtype; +pub const Pipelines = struct { + select: mtl.Pipeline, + pub fn load(device: mtl.Device) !Pipelines { + const pool = mtl.objc.Pool.push(); + defer pool.pop(); + var options = mtl.CompileOptions.mlx(); + options.math_functions = .precise; + const lib = try mtl.Library.fromSource(device, sources.deepseek_v41_route, options); + defer lib.deinit(); + return .{ .select = try mtl.Pipeline.init(device, lib, "dsv41_route", false) }; + } + pub fn deinit(p: *Pipelines) void { + p.select.deinit(); + } +}; +pub const Shape = struct { + rows: u32, + logit_stride: u32 = 384, + output_stride: u32 = 6, + temperature: f32 = 1, + bias_dtype: Dtype = .f32, +}; +/// FP32 logits[rows,384], bias F16/BF16/FP32 -> u32 IDs and FP32 weights[rows,6]; lower ID wins biased-score ties. + +// Nonzero rows, logit/output pitches >=384/6, finite positive temperature, complete storage are caller invariants. + +// All six execute; weights use unbiased scores / (sum+1e-20) * 1.5. Invalid comparisons emit invalid IDs/NaNs. +pub fn encode(e: mtl.ComputeEncoder, p: *const Pipelines, logits: View, bias: View, ids: View, weights: View, d: Shape) void { + e.setPipeline(p.select); + inline for (.{ logits, bias, ids, weights }, 0..) |r, i| e.setBuffer(r.buffer, r.offset, i); + const D = extern struct { rows: u32, logit_stride: u32, output_stride: u32, temperature: f32, bias_dtype: u32 }; + e.setValue(D{ .rows = d.rows, .logit_stride = d.logit_stride, .output_stride = d.output_stride, .temperature = d.temperature, .bias_dtype = @backingInt(d.bias_dtype) }, 4); + e.dispatchGroups(mtl.Size.of(d.rows, 1, 1), mtl.Size.of(128, 1, 1)); +} diff --git a/zig/src/families/deepseek_v41/route_test.zig b/zig/src/families/deepseek_v41/route_test.zig new file mode 100644 index 0000000000..f653fa9241 --- /dev/null +++ b/zig/src/families/deepseek_v41/route_test.zig @@ -0,0 +1,152 @@ +//! Consumer-visible expert IDs, weights and nonfinite-input routing boundaries. +const std = @import("std"); +const mtl = @import("metal"); +const route = @import("route.zig"); +const ops = @import("ops.zig"); +const support = @import("test_support.zig"); +const view = support.view; +const Buffers = support.Buffers; +const done = support.done; +const close = support.close; +fn scoreReference(x: f64) f64 { + return @sqrt(if (x > 20) x else std.math.log1p(@exp(x))); +} +test "V4.1 exhaustive router F16 correction bias, unbiased normalization, extreme logits and row independence" { + const device = mtl.Device.init() catch return error.SkipZigTest; + defer device.deinit(); + const pool = mtl.objc.Pool.push(); + defer pool.pop(); + const queue = try device.queue(); + defer queue.deinit(); + var p = try route.Pipelines.load(device); + defer p.deinit(); + var b = Buffers{ .device = device }; + defer b.deinit(); + const logits = try b.get(f32, 2 * 389); + const bias = try b.get(f16, 384); + for (0..384) |i| { + logits.slice(f32, 778)[i] = (@as(f32, @floatFromInt(i)) - 190) * 0.5; + logits.slice(f32, 778)[389 + i] = 0; + bias.slice(f16, 384)[i] = if (i >= 17 and i < 23) 100 else 0; + } + const ids = try b.get(u32, 16); + const weights = try b.get(f32, 16); + const ids_one = try b.get(u32, 6); + const weights_one = try b.get(f32, 6); + const cb = queue.commandBuffer(); + const e = cb.compute(.serial); + route.encode(e, &p, view(logits), view(bias), view(ids), view(weights), .{ .rows = 2, .logit_stride = 389, .output_stride = 8, .bias_dtype = .f16 }); + route.encode(e, &p, view(logits).shifted(389 * 4), view(bias), view(ids_one), view(weights_one), .{ .rows = 1, .bias_dtype = .f16 }); + try done(cb, e); + for (0..2) |r| { + var used: [384]bool = @splat(false); + var picks: [6]usize = undefined; + var raw: [6]f64 = undefined; + var sum: f64 = 0; + for (0..6) |slot| { + var best: f64 = -std.math.inf(f64); + var pick: usize = 0; + for (0..384) |i| { + const sc = scoreReference(logits.slice(f32, 778)[r * 389 + i]) + @as(f64, bias.slice(f16, 384)[i]); + if (!used[i] and sc > best) { + best = sc; + pick = i; + } + } + used[pick] = true; + picks[slot] = pick; + raw[slot] = scoreReference(logits.slice(f32, 778)[r * 389 + pick]); + sum += raw[slot]; + } + for (0..6) |slot| { + try std.testing.expectEqual(@as(u32, @intCast(picks[slot])), ids.slice(u32, 16)[r * 8 + slot]); + try close(raw[slot] / (sum + 1e-20) * 1.5, weights.slice(f32, 16)[r * 8 + slot], 3e-6); + } + } + for (0..6) |i| { + try std.testing.expectEqual(ids.slice(u32, 16)[8 + i], ids_one.slice(u32, 6)[i]); + try std.testing.expectEqual(weights.slice(f32, 16)[8 + i], weights_one.slice(f32, 6)[i]); + } +} + +test "V4.1 router normalization matches source CUDA six-score FP32 reduction boundaries" { + const device = mtl.Device.init() catch return error.SkipZigTest; + defer device.deinit(); + const pool = mtl.objc.Pool.push(); + defer pool.pop(); + const queue = try device.queue(); + defer queue.deinit(); + var p = try route.Pipelines.load(device); + defer p.deinit(); + var b = Buffers{ .device = device }; + defer b.deinit(); + // Power-of-two sqrt(softplus(score^2)) with logits >20 eliminates unary-rounding ambiguity. + const scores = [2][6]f32{ + .{ 268435456, 16, 16, 16, 16, 16 }, + .{ 2097152, 8, 16, 134217728, 8388608, 8192 }, + }; + // Independent pinned Torch CUDA Gate expected bits; the second row also distinguishes wide normalization. + const expected_bits = [2][6]u32{ + .{ 1069547517, 868220925, 868220925, 868220925, 868220925, 868220925 }, + .{ 1018303405, 867308461, 875697069, 1068635053, 1035080621, 951194541 }, + }; + const logits = try b.get(f32, scores.len * 384); + const bias = try b.get(f32, 384); + const ids = try b.get(u32, scores.len * 6); + const weights = try b.get(f32, scores.len * 6); + @memset(logits.slice(f32, scores.len * 384), -100); + for (scores, 0..) |row, r| { + for (row, 0..) |s, slot| logits.slice(f32, scores.len * 384)[r * 384 + slot] = s * s; + } + // Distinct biases force slot order without topk ties; weights still use unbiased scores. + for (0..6) |slot| bias.slice(f32, 384)[slot] = 1099511627776 - @as(f32, @floatFromInt(slot)) * 68719476736; + const cb = queue.commandBuffer(); + const encoder = cb.compute(.serial); + route.encode(encoder, &p, view(logits), view(bias), view(ids), view(weights), .{ .rows = scores.len, .bias_dtype = .f32 }); + try done(cb, encoder); + for (expected_bits, 0..) |row, r| { + for (row, 0..) |expected, slot| { + try std.testing.expectEqual(@as(u32, @intCast(slot)), ids.slice(u32, scores.len * 6)[r * 6 + slot]); + try std.testing.expectEqual(expected, @as(u32, @bitCast(weights.slice(f32, scores.len * 6)[r * 6 + slot]))); + } + } +} + +test "nonfinite router inputs propagate invalid routes without reading outside the expert arrays" { + const device = mtl.Device.init() catch return error.SkipZigTest; + defer device.deinit(); + const pool = mtl.objc.Pool.push(); + defer pool.pop(); + const queue = try device.queue(); + defer queue.deinit(); + var p = try route.Pipelines.load(device); + defer p.deinit(); + var buffers = Buffers{ .device = device }; + defer buffers.deinit(); + const logits = try buffers.get(f32, 384); + const bias = try buffers.get(f32, 384); + const ids = try buffers.get(u32, 6); + const weights = try buffers.get(f32, 6); + @memset(logits.slice(f32, 384), std.math.nan(f32)); + const cb = queue.commandBuffer(); + const encoder = cb.compute(.serial); + route.encode(encoder, &p, view(logits), view(bias), view(ids), view(weights), .{ .rows = 1 }); + try done(cb, encoder); + for (ids.slice(u32, 6), weights.slice(f32, 6)) |id, weight| { + try std.testing.expectEqual(std.math.maxInt(u32), id); + try std.testing.expect(std.math.isNan(weight)); + } + var combine = try ops.Pipelines.load(device); + defer combine.deinit(); + const routed = try buffers.get(u16, 6 * 4); + const shared = try buffers.get(u16, 4); + const output = try buffers.get(u16, 4); + // Invalid routes skip expert writes; finite slots from a prior chunk must not hide that failure. + @memset(routed.slice(u16, 24), support.bf(2)); + @memset(shared.slice(u16, 4), support.bf(3)); + const combine_cb = queue.commandBuffer(); + const combine_encoder = combine_cb.compute(.serial); + ops.encodeCombine(combine_encoder, &combine, view(routed), view(shared), view(ids), view(output), .{ .rows = 1, .width = 4, .routed_row_stride = 24, .slot_stride = 4, .shared_stride = 4, .y_stride = 4 }); + try done(combine_cb, combine_encoder); + for (output.slice(u16, 4)) |value| try std.testing.expect(std.math.isNan(support.fp(value))); +} diff --git a/zig/src/families/deepseek_v41/test_support.zig b/zig/src/families/deepseek_v41/test_support.zig new file mode 100644 index 0000000000..80bf87e8d2 --- /dev/null +++ b/zig/src/families/deepseek_v41/test_support.zig @@ -0,0 +1,40 @@ +const std = @import("std"); +const mtl = @import("metal"); +const View = @import("view.zig").View; + +pub fn bf(x: f32) u16 { + const u: u32 = @bitCast(x); + return @intCast((u +% 0x7fff +% ((u >> 16) & 1)) >> 16); +} +pub fn fp(x: u16) f32 { + return @bitCast(@as(u32, x) << 16); +} +pub fn view(b: mtl.Buffer) View { + return .{ .buffer = b }; +} +pub const Buffers = struct { + device: mtl.Device, + items: [32]mtl.Buffer = undefined, + count: usize = 0, + + pub fn get(b: *Buffers, comptime T: type, n: usize) !mtl.Buffer { + if (b.count == b.items.len) return error.TooManyTestBuffers; + const x = try b.device.buffer(try std.math.mul(usize, @sizeOf(T), n), mtl.ResourceOptions.shared); + b.items[b.count] = x; + b.count += 1; + @memset(x.slice(T, n), 0); + return x; + } + pub fn deinit(b: *Buffers) void { + for (b.items[0..b.count]) |x| x.deinit(); + } +}; +pub fn done(cb: mtl.CommandBuffer, e: mtl.ComputeEncoder) !void { + e.end(); + cb.commit(); + cb.wait(); + try std.testing.expect(cb.failure() == null); +} +pub fn close(expected: f64, actual: f32, tolerance: f64) !void { + try std.testing.expect(@abs(expected - @as(f64, actual)) <= tolerance); +} diff --git a/zig/src/families/deepseek_v41/view.zig b/zig/src/families/deepseek_v41/view.zig new file mode 100644 index 0000000000..fbaa08ce39 --- /dev/null +++ b/zig/src/families/deepseek_v41/view.zig @@ -0,0 +1,25 @@ +//! A borrowed Metal buffer region; element precision is carried by each operator's explicit descriptor. +const std = @import("std"); +const mtl = @import("metal"); + +pub const View = struct { + buffer: mtl.Buffer, + offset: usize = 0, + + pub fn shifted(self: View, bytes: usize) View { + return .{ .buffer = self.buffer, .offset = self.offset + bytes }; + } + + pub fn require(self: View, bytes: usize, alignment: usize) !void { + if (self.offset % alignment != 0 or self.offset > self.buffer.length() or + bytes > self.buffer.length() - self.offset) return error.InvalidTensorView; + } + + /// Rows are strided elements; only the final row's used width is required. + pub fn requireRows(self: View, rows: usize, stride: usize, width: usize, element_bytes: usize) !void { + if (rows == 0 or width == 0 or stride < width) return error.InvalidTensorView; + const preceding = try std.math.mul(usize, rows - 1, stride); + const elements = try std.math.add(usize, preceding, width); + try self.require(try std.math.mul(usize, elements, element_bytes), element_bytes); + } +}; diff --git a/zig/src/families/deepseek_v41/weights.zig b/zig/src/families/deepseek_v41/weights.zig new file mode 100644 index 0000000000..0795e0db8e --- /dev/null +++ b/zig/src/families/deepseek_v41/weights.zig @@ -0,0 +1,348 @@ +//! Strict pinned backbone schema and borrowed resident bindings; only expert descriptor tables are owned. +const std = @import("std"); +const mtl = @import("metal"); +const cp = @import("../../core/checkpoint_metal.zig"); +const st = @import("../../core/safetensors.zig"); +const exl3 = @import("../../core/exl3_projection.zig"); +const load = @import("load.zig"); + +pub const Tensor = cp.Tensor; +pub const Matrix = exl3.Matrix; + +/// A kept-dense repack stores small matrices as a bf16 weight beside the rotation scales. +pub const Dense = struct { weight: Tensor, suh: Tensor, svh: Tensor, k: usize, n: usize }; +pub const AnyMatrix = union(enum) { trellis: Matrix, dense: Dense }; +pub const Hc = struct { projection: Tensor, scale: Tensor, base: Tensor }; +pub const Compressor = struct { wkv: AnyMatrix, wgate: ?AnyMatrix, norm: Tensor }; +pub const Indexer = struct { wq_b: AnyMatrix, wk: ?AnyMatrix, weights_proj: Tensor, k_norm: ?Tensor }; +pub const Attention = struct { + wq_a: Matrix, + wq_b: Matrix, + wkv: Matrix, + wo_b: Matrix, + wo_a: [8]Matrix, + sink: Tensor, + q_norm: Tensor, + kv_norm: Tensor, + compressor: ?Compressor, + indexer: ?Indexer, +}; +/// Projection order is w1 (gate), w3 (up), w2 (down), for shared and routed experts alike. +pub const Moe = struct { + gate: Tensor, + bias: Tensor, + shared: [3]Matrix, + descriptors: [3]mtl.Buffer, +}; +pub const Engram = struct { table: Tensor, scales: Tensor, q_weight: Tensor, k_weight: Tensor, wkv: Matrix }; +pub const Layer = struct { + attn_norm: Tensor, + ffn_norm: Tensor, + hc_attn: Hc, + hc_ffn: Hc, + attn: Attention, + moe: Moe, + engram: ?Engram, +}; +pub const Model = struct { + embed: Tensor, + head: Matrix, + norm: Tensor, + layers: [40]Layer, + + /// Checkpoint buffers must outlive this borrowed model and every submitted command using it. + pub fn deinit(self: *Model) void { + for (&self.layers) |*layer| for (layer.moe.descriptors) |buffer| buffer.deinit(); + self.* = undefined; + } + pub fn registerResidency(self: *const Model, set: mtl.ResidencySet) void { + for (&self.layers) |*layer| for (layer.moe.descriptors) |buffer| set.add(buffer); + } + pub fn residentBytes(_: *const Model) usize { + return sizeofDescriptors(); + } +}; + +/// Admission adds these bytes to load.Plan.bytes; no dequantized weights or duplicate projections are allocated. +pub fn sizeofDescriptors() usize { + return 40 * 3 * 384 * @sizeOf(exl3.ExpertDescriptor); +} + +/// Every executed tensor is checked using headers only, before checkpoint materialization or model allocation. +pub fn validate(plan: *const load.Plan) !void { + try populate(false, plan, null); +} + +/// Bind resident tensors and marker payloads; route descriptors replace redundant host matrix metadata. +pub fn bind(device: mtl.Device, checkpoint: *const cp.Checkpoint) !Model { + var model: Model = undefined; + try populate(true, checkpoint, &model); + var owned: usize = 0; + errdefer for (0..owned) |i| model.layers[i / 3].moe.descriptors[i % 3].deinit(); + var prefix: [128]u8 = undefined; + for (&model.layers, 0..) |*layer, layer_id| { + inline for (.{ "w1", "w3", "w2" }, 0..) |part, projection| { + const bytes = 384 * @sizeOf(exl3.ExpertDescriptor); + const buffer = try device.buffer(bytes, mtl.ResourceOptions.shared | mtl.ResourceOptions.untracked); + layer.moe.descriptors[projection] = buffer; + owned += 1; + const out: [*]exl3.ExpertDescriptor = @ptrCast(@alignCast(buffer.contents())); + for (0..384) |expert| { + var m: Matrix = undefined; + const k: usize = if (projection == 2) 2304 else 5120; + const n: usize = if (projection == 2) 5120 else 2304; + try matrix(true, checkpoint, try named(&prefix, "layers.{d}.ffn.experts.{d}.{s}", .{ layer_id, expert, part }), k, n, &m); + out[expert] = try exl3.descriptor(m); + } + } + } + return model; +} + +/// A borrowed CPU/GPU matrix view for checkpoint qualification, using the same strict storage contract. +pub fn lookup(checkpoint: *const cp.Checkpoint, prefix: []const u8, k: usize, n: usize) !Matrix { + var out: Matrix = undefined; + try matrix(true, checkpoint, prefix, k, n, &out); + return out; +} + +fn named(buffer: []u8, comptime fmt: []const u8, args: anytype) ![]const u8 { + return std.fmt.bufPrint(buffer, fmt, args); +} + +/// A plain tensor the encoders decode as f32, f16 or bf16; the shape must match exactly. +fn plainEither(comptime binding: bool, source: anytype, name: []const u8, shape: []const usize, destination: ?*Tensor) !void { + const tensor = try source.get(name); + if ((tensor.dtype != .f32 and tensor.dtype != .f16 and tensor.dtype != .bf16) or tensor.rank != shape.len or + !std.mem.eql(usize, tensor.shape[0..tensor.rank], shape)) + { + std.log.err("unsupported tensor {s}: {s} {any}", .{ name, @tagName(tensor.dtype), tensor.shape[0..tensor.rank] }); + return error.UnsupportedTensor; + } + if (binding) { + var count: usize = 1; + for (shape) |dim| count = try std.math.mul(usize, count, dim); + if (tensor.bytes != try std.math.mul(usize, count, tensor.dtype.size())) return error.UnsupportedTensor; + if (tensor.offset % tensor.dtype.size() != 0 or tensor.offset > tensor.buffer.length() or + tensor.bytes > tensor.buffer.length() - tensor.offset) return error.InvalidTensorView; + destination.?.* = tensor; + } else if (tensor.begin % 4 != 0) return error.InvalidTensorView; +} + +fn plain(comptime binding: bool, source: anytype, name: []const u8, dtype: st.DType, shape: []const usize, destination: ?*Tensor) !void { + const tensor = try source.get(name); + if (tensor.dtype != dtype or tensor.rank != shape.len or + !std.mem.eql(usize, tensor.shape[0..tensor.rank], shape)) + { + std.log.err("unsupported backbone tensor {s}: {s} {any}", .{ name, @tagName(tensor.dtype), tensor.shape[0..tensor.rank] }); + return error.UnsupportedTensor; + } + const offset = if (binding) tensor.offset else tensor.begin; + if (offset % dtype.size() != 0) return error.InvalidTensorView; + if (binding) { + var count: usize = 1; + for (shape) |dim| count = try std.math.mul(usize, count, dim); + if (tensor.bytes != try std.math.mul(usize, count, dtype.size())) return error.UnsupportedTensor; + if (tensor.offset % dtype.size() != 0 or tensor.offset > tensor.buffer.length() or + tensor.bytes > tensor.buffer.length() - tensor.offset) return error.InvalidTensorView; + destination.?.* = tensor; + } +} + +fn has(source: anytype, name: []const u8) bool { + return source.has(name); +} + +const Scale = struct { name: []const u8, format: exl3.ScaleFormat }; +fn scale(comptime binding: bool, source: anytype, prefix: []const u8, size: usize, comptime fp: []const u8, comptime signs: []const u8, storage: []u8) !Scale { + var alternative: [160]u8 = undefined; + const f = try named(storage, "{s}.{s}", .{ prefix, fp }); + const s = try named(&alternative, "{s}.{s}", .{ prefix, signs }); + const have_fp = has(source, f); + if (have_fp == has(source, s)) return error.MissingOrAmbiguousExl3Scale; + const name = if (have_fp) f else try named(storage, "{s}.{s}", .{ prefix, signs }); + const t = try source.get(name); + if (t.rank != 1 or t.shape[0] != (if (have_fp) size else size / 16) or + t.dtype != (if (have_fp) st.DType.f16 else st.DType.i16)) return error.UnsupportedExl3Scale; + const offset = if (binding) t.offset else t.begin; + if (offset % 2 != 0) return error.InvalidTensorView; + if (binding) { + const bytes = (if (have_fp) size else size / 16) * 2; + if (t.bytes != bytes or t.offset % 2 != 0 or t.offset > t.buffer.length() or + bytes > t.buffer.length() - t.offset) return error.InvalidTensorView; + } + return .{ .name = name, .format = if (have_fp) .f16 else .packed_signs }; +} + +/// Compressor/indexer matrices ride either storage: packs quantize; rank-split repacks stay dense with rotation scales. +fn matrixAny(comptime binding: bool, source: anytype, prefix: []const u8, k: usize, n: usize, destination: ?*AnyMatrix) !void { + var name_buf: [160]u8 = undefined; + if (has(source, try named(&name_buf, "{s}.weight", .{prefix}))) { + const weight_name = try named(&name_buf, "{s}.weight", .{prefix}); + const w = try source.get(weight_name); + if (w.dtype != .bf16 or w.rank != 2 or w.shape[0] != n or w.shape[1] != k) { + std.log.err("unsupported dense tensor {s}: {s} {any}", .{ weight_name, @tagName(w.dtype), w.shape[0..w.rank] }); + return error.UnsupportedTensor; + } + const su = try source.get(try named(&name_buf, "{s}.suh", .{prefix})); + const sv = try source.get(try named(&name_buf, "{s}.svh", .{prefix})); + if (su.dtype != .f16 or su.rank != 1 or su.shape[0] != k or + sv.dtype != .f16 or sv.rank != 1 or sv.shape[0] != n) return error.UnsupportedExl3Scale; + if (binding) { + if (w.offset % 2 != 0) return error.InvalidTensorView; + destination.?.* = .{ .dense = .{ .weight = w, .suh = su, .svh = sv, .k = k, .n = n } }; + } + return; + } + var m: Matrix = undefined; + try matrix(binding, source, prefix, k, n, if (binding) &m else null); + if (binding) destination.?.* = .{ .trellis = m }; +} + +fn matrix(comptime binding: bool, source: anytype, prefix: []const u8, k: usize, n: usize, destination: ?*Matrix) !void { + var name: [160]u8 = undefined; + const trellis = try source.get(try named(&name, "{s}.trellis", .{prefix})); + if (trellis.dtype != .i16 or trellis.rank != 3 or trellis.shape[0] != k / 16 or + trellis.shape[1] != n / 16 or trellis.shape[2] % 8 != 0) return error.UnsupportedExl3Shape; + if ((if (binding) trellis.offset else trellis.begin) % 2 != 0) return error.InvalidTensorView; + const halves = trellis.shape[2] / 8; + if (halves < 2 or halves > 16 or (halves % 2 != 0 and halves > 7)) return error.UnsupportedExl3Width; + // Pinned checkpoint uses mul1 throughout; missing markers cannot silently select the legacy codebook. + const marker = try source.get(try named(&name, "{s}.mul1", .{prefix})); + if (marker.dtype != .i32 or marker.rank != 0) return error.UnsupportedExl3Marker; + if ((if (binding) marker.offset else marker.begin) % 4 != 0) return error.InvalidTensorView; + if (has(source, try named(&name, "{s}.mcg", .{prefix})) or + has(source, try named(&name, "{s}.3inst", .{prefix})) or + has(source, try named(&name, "{s}.bias", .{prefix}))) + { + std.log.err("unexpected exl3 parts beside {s}", .{prefix}); + return error.UnsupportedExl3Parts; + } + var su_name: [160]u8 = undefined; + var sv_name: [160]u8 = undefined; + const su = try scale(binding, source, prefix, k, "suh", "su", &su_name); + const sv = try scale(binding, source, prefix, n, "svh", "sv", &sv_name); + if (binding) { + const expected = k / 16 * (n / 16) * halves * 16; + if (trellis.bytes != expected or trellis.offset % 2 != 0 or + trellis.offset > trellis.buffer.length() or expected > trellis.buffer.length() - trellis.offset) + return error.InvalidTensorView; + if (marker.bytes != 4 or marker.offset % 4 != 0 or marker.offset > marker.buffer.length() or + 4 > marker.buffer.length() - marker.offset) return error.InvalidTensorView; + const marker_bytes = marker.buffer.contents()[marker.offset..][0..4]; + if (std.mem.readInt(u32, marker_bytes, .little) != exl3.format.Mul1Mul) return error.UnsupportedExl3Marker; + const suh = try source.get(su.name); + const svh = try source.get(sv.name); + destination.?.* = .{ + .trellis = .{ .buffer = trellis.buffer, .offset = trellis.offset }, + .suh = .{ .buffer = suh.buffer, .offset = suh.offset }, + .svh = .{ .buffer = svh.buffer, .offset = svh.offset }, + .k = k, + .n = n, + .width = .{ .halves = @intCast(halves) }, + .codebook = .mul1, + .suh_format = su.format, + .svh_format = sv.format, + }; + try destination.?.validate(); + } +} + +fn populate(comptime binding: bool, source: anytype, model: ?*Model) !void { + try plain(binding, source, "embed.weight", .bf16, &.{ 129280, 5120 }, if (binding) &model.?.embed else null); + try plain(binding, source, "norm.weight", .bf16, &.{5120}, if (binding) &model.?.norm else null); + try matrix(binding, source, "head", 5120, 129280, if (binding) &model.?.head else null); + var name: [160]u8 = undefined; + var prefix: [128]u8 = undefined; + for (0..40) |layer| { + const out: ?*Layer = if (binding) &model.?.layers[layer] else null; + try plain(binding, source, try named(&name, "layers.{d}.attn_norm.weight", .{layer}), .bf16, &.{5120}, if (binding) &out.?.attn_norm else null); + try plain(binding, source, try named(&name, "layers.{d}.ffn_norm.weight", .{layer}), .bf16, &.{5120}, if (binding) &out.?.ffn_norm else null); + inline for (.{ "attn", "ffn" }) |kind| { + const hc: ?*Hc = if (binding) (if (std.mem.eql(u8, kind, "attn")) &out.?.hc_attn else &out.?.hc_ffn) else null; + try plain(binding, source, try named(&name, "layers.{d}.hc_{s}_fn", .{ layer, kind }), .f32, &.{ 24, 20480 }, if (binding) &hc.?.projection else null); + try plain(binding, source, try named(&name, "layers.{d}.hc_{s}_scale", .{ layer, kind }), .f32, &.{3}, if (binding) &hc.?.scale else null); + try plain(binding, source, try named(&name, "layers.{d}.hc_{s}_base", .{ layer, kind }), .f32, &.{24}, if (binding) &hc.?.base else null); + } + const attn: ?*Attention = if (binding) &out.?.attn else null; + inline for (.{ "wq_a", "wq_b", "wkv", "wo_b" }, .{ 5120, 1280, 5120, 8192 }, .{ 1280, 32768, 512, 5120 }) |part, k, n| { + try matrix(binding, source, try named(&prefix, "layers.{d}.attn.{s}", .{ layer, part }), k, n, if (binding) &@field(attn.?, part) else null); + } + for (0..8) |slice| try matrix(binding, source, try named(&prefix, "layers.{d}.attn.wo_a.slice.{d}", .{ layer, slice }), 4096, 1024, if (binding) &attn.?.wo_a[slice] else null); + try plain(binding, source, try named(&name, "layers.{d}.attn.attn_sink", .{layer}), .f32, &.{64}, if (binding) &attn.?.sink else null); + try plain(binding, source, try named(&name, "layers.{d}.attn.q_norm.weight", .{layer}), .bf16, &.{1280}, if (binding) &attn.?.q_norm else null); + try plain(binding, source, try named(&name, "layers.{d}.attn.kv_norm.weight", .{layer}), .bf16, &.{512}, if (binding) &attn.?.kv_norm else null); + const owner = layer == 2 or layer == 8 or layer == 14 or layer == 20; + if (binding) { + attn.?.compressor = if (owner) @as(Compressor, undefined) else null; + attn.?.indexer = if (owner or layer == 24 or layer == 28 or layer == 32 or layer == 36) + @as(Indexer, undefined) + else + null; + } + if (owner) { + const compressor: ?*Compressor = if (binding) &attn.?.compressor.? else null; + try matrixAny(binding, source, try named(&prefix, "layers.{d}.attn.compressor.wkv", .{layer}), 5120, 512, if (binding) &compressor.?.wkv else null); + try plain(binding, source, try named(&name, "layers.{d}.attn.compressor.norm.weight", .{layer}), .bf16, &.{512}, if (binding) &compressor.?.norm else null); + if (binding) compressor.?.wgate = if (layer < 20) @as(AnyMatrix, undefined) else null; + if (layer < 20) try matrixAny(binding, source, try named(&prefix, "layers.{d}.attn.compressor.wgate", .{layer}), 5120, 512, if (binding) &compressor.?.wgate.? else null); + } + if (owner or layer == 24 or layer == 28 or layer == 32 or layer == 36) { + const indexer: ?*Indexer = if (binding) &attn.?.indexer.? else null; + try matrixAny(binding, source, try named(&prefix, "layers.{d}.attn.indexer.wq_b", .{layer}), 1280, 4096, if (binding) &indexer.?.wq_b else null); + try plainEither(binding, source, try named(&name, "layers.{d}.attn.indexer.weights_proj.weight", .{layer}), &.{ 32, 5120 }, if (binding) &indexer.?.weights_proj else null); + if (binding) { + indexer.?.wk = if (owner) @as(AnyMatrix, undefined) else null; + indexer.?.k_norm = if (owner) @as(Tensor, undefined) else null; + } + if (owner) { + try matrixAny(binding, source, try named(&prefix, "layers.{d}.attn.indexer.wk", .{layer}), 512, 128, if (binding) &indexer.?.wk.? else null); + try plain(binding, source, try named(&name, "layers.{d}.attn.indexer.k_norm.weight", .{layer}), .bf16, &.{128}, if (binding) &indexer.?.k_norm.? else null); + } + } + const moe: ?*Moe = if (binding) &out.?.moe else null; + // The released checkpoints store the router gate f16; rank-split repacks store it bf16. + if (binding) { + const tensor = try source.get(try named(&name, "layers.{d}.ffn.gate.weight", .{layer})); + if ((tensor.dtype != .f16 and tensor.dtype != .bf16) or tensor.rank != 2 or + tensor.shape[0] != 384 or tensor.shape[1] != 5120) + { + std.log.err("unsupported router gate {s}: {s} {any}", .{ name, @tagName(tensor.dtype), tensor.shape[0..tensor.rank] }); + return error.UnsupportedTensor; + } + moe.?.gate = tensor; + } else { + const tensor = try source.get(try named(&name, "layers.{d}.ffn.gate.weight", .{layer})); + if ((tensor.dtype != .f16 and tensor.dtype != .bf16) or tensor.rank != 2 or + tensor.shape[0] != 384 or tensor.shape[1] != 5120) return error.UnsupportedTensor; + } + // The bias rides the same three dtypes the route kernel decodes (f32, f16, bf16). + if (binding) { + const tensor = try source.get(try named(&name, "layers.{d}.ffn.gate.bias", .{layer})); + if ((tensor.dtype != .f16 and tensor.dtype != .bf16 and tensor.dtype != .f32) or tensor.rank != 1 or tensor.shape[0] != 384) + return error.UnsupportedTensor; + moe.?.bias = tensor; + } else { + const tensor = try source.get(try named(&name, "layers.{d}.ffn.gate.bias", .{layer})); + if ((tensor.dtype != .f16 and tensor.dtype != .bf16 and tensor.dtype != .f32) or tensor.rank != 1 or tensor.shape[0] != 384) + return error.UnsupportedTensor; + } + inline for (.{ "w1", "w3", "w2" }, 0..) |part, projection| { + const k: usize = if (projection == 2) 2304 else 5120; + const n: usize = if (projection == 2) 5120 else 2304; + try matrix(binding, source, try named(&prefix, "layers.{d}.ffn.shared_experts.{s}", .{ layer, part }), k, n, if (binding) &moe.?.shared[projection] else null); + if (!binding) for (0..384) |expert| try matrix(false, source, try named(&prefix, "layers.{d}.ffn.experts.{d}.{s}", .{ layer, expert, part }), k, n, null); + } + const engram = layer == 1 or layer == 14; + if (binding) out.?.engram = if (engram) @as(Engram, undefined) else null; + if (engram) { + const e: ?*Engram = if (binding) &out.?.engram.? else null; + const rows: usize = if (layer == 1) 384006168 else 384016682; + try plain(binding, source, try named(&name, "layers.{d}.engram.embed.weight", .{layer}), .f8_e4m3, &.{ rows, 256 }, if (binding) &e.?.table else null); + try plain(binding, source, try named(&name, "layers.{d}.engram.embed.scale", .{layer}), .f8_e8m0, &.{ rows, 8 }, if (binding) &e.?.scales else null); + try plainEither(binding, source, try named(&name, "layers.{d}.engram.q_weight", .{layer}), &.{ 4, 5120 }, if (binding) &e.?.q_weight else null); + try plainEither(binding, source, try named(&name, "layers.{d}.engram.k_weight", .{layer}), &.{ 4, 5120 }, if (binding) &e.?.k_weight else null); + try matrix(binding, source, try named(&prefix, "layers.{d}.engram.wkv", .{layer}), 6144, 25600, if (binding) &e.?.wkv else null); + } + } +} diff --git a/zig/src/families/deepseek_v41/workspace.zig b/zig/src/families/deepseek_v41/workspace.zig new file mode 100644 index 0000000000..fcef57cd6e --- /dev/null +++ b/zig/src/families/deepseek_v41/workspace.zig @@ -0,0 +1,107 @@ +//! Fixed chunk-sized activations: no layer history or context-by-query score matrices. +const std = @import("std"); +const mtl = @import("metal"); +const exl3 = @import("../../core/exl3_projection.zig"); +const View = @import("view.zig").View; +const hash = @import("engram_hash.zig"); +const groups = @import("../../core/expert_groups.zig"); + +pub const Field = enum { + ids, + token_map, + history, + stream, + collapsed, + normalized, + branch, + previous_pre, + attention_pre, + post, + comb, + mixes, + inv, + engram_ids_0, + engram_ids_1, + engram_gather, + engram_kv, + router_logits, + route_ids, + route_weights, + gate, + up, + activation, + routed, + shared_gate, + shared_up, + shared_activation, + shared_down, + logits, + projection, + grouping, +}; +const count = std.enums.values(Field).len; + +pub const Plan = struct { + rows: u32, + offsets: [count]usize, + bytes: usize, + + pub fn init(rows: u32) !Plan { + if (rows == 0 or rows > 4096) return error.InvalidPrefillChunk; + const t: usize = rows; + const grouped = if (rows > 1) try groups.Plan.init(t * 6, 384) else null; + const projection_bytes = @max(try exl3.scratchBytes(5120, 129280, t), if (grouped) |g| @max(try exl3.scratchBytes(5120, 2304, g.padded), try exl3.scratchBytes(2304, 5120, g.padded)) else try exl3.scratchBytes(2304, 5120, t * 6)); + const sizes = [_]usize{ + t * 4, hash.raw_vocab * 4, 16, t * 20480 * 2, t * 5120 * 2, t * 5120 * 2, t * 5120 * 2, + t * 4 * 4, t * 4 * 4, t * 4 * 4, t * 16 * 4, t * 24 * 4, t * 4, t * 24 * 4, + t * 24 * 4, t * 6144 * 2, t * 25600 * 2, t * 384 * 4, t * 6 * 4, t * 6 * 4, t * 6 * 2304 * 2, + t * 6 * 2304 * 2, t * 6 * 2304 * 2, t * 6 * 5120 * 2, t * 2304 * 2, t * 2304 * 2, t * 2304 * 2, t * 5120 * 2, + t * 129280 * 4, projection_bytes, if (grouped) |g| g.bytes else 0, + }; + var out = Plan{ .rows = rows, .offsets = undefined, .bytes = 0 }; + for (sizes, 0..) |size, i| { + out.offsets[i] = std.mem.alignForward(usize, out.bytes, 16); + out.bytes = try std.math.add(usize, out.offsets[i], size); + } + out.bytes = std.mem.alignForward(usize, out.bytes, 16384); + return out; + } +}; + +pub const Workspace = struct { + buffer: mtl.Buffer, + plan: Plan, + + pub fn init(device: mtl.Device, plan: Plan, token_map: []const u8) !Workspace { + if (token_map.len != hash.raw_vocab * 4) return error.InvalidTokenMap; + const buffer = try device.buffer(plan.bytes, mtl.ResourceOptions.shared | mtl.ResourceOptions.untracked); + const w = Workspace{ .buffer = buffer, .plan = plan }; + @memcpy(buffer.contents()[plan.offsets[@backingInt(Field.token_map)]..][0..token_map.len], token_map); + @memset(buffer.contents()[plan.offsets[@backingInt(Field.history)]..][0..16], 0); + return w; + } + + pub fn deinit(w: *Workspace) void { + w.buffer.deinit(); + } + pub fn view(w: *const Workspace, field: Field) View { + return .{ .buffer = w.buffer, .offset = w.plan.offsets[@backingInt(field)] }; + } + pub fn projection(w: *const Workspace) exl3.View { + const v = w.view(.projection); + return .{ .buffer = v.buffer, .offset = v.offset }; + } + pub fn grouping(w: *const Workspace, rows: u32) !groups.Scratch { + if (rows < 2 or rows > w.plan.rows) return error.InvalidPrefillChunk; + const v = w.view(.grouping); + return .{ .buffer = v.buffer, .offset = v.offset, .plan = try groups.Plan.init(@as(usize, rows) * 6, 384) }; + } + pub fn tokenIds(w: *const Workspace, rows: usize) []u32 { + const v = w.view(.ids); + return @as([*]u32, @ptrCast(@alignCast(v.buffer.contents() + v.offset)))[0..rows]; + } + pub fn logits(w: *const Workspace, rows: usize) []const f32 { + const v = w.view(.logits); + return @as([*]const f32, @ptrCast(@alignCast(v.buffer.contents() + v.offset)))[0 .. rows * 129280]; + } +}; diff --git a/zig/src/metal/counters.zig b/zig/src/metal/counters.zig index 610e22086b..0bbd65f186 100644 --- a/zig/src/metal/counters.zig +++ b/zig/src/metal/counters.zig @@ -1,4 +1,4 @@ -//! Metal counter sampling; owned resources must outlive every command buffer using them. +//! Metal counter sampling; owned descriptors, samples and fences must outlive their command buffers. const std = @import("std"); const objc = @import("objc.zig"); const types = @import("types.zig"); @@ -107,7 +107,7 @@ pub const SampleBuffer = struct { objc.msg(void, encoder.id, "sampleCountersInBuffer:atSampleIndex:withBarrier:", .{ self.id, index, true }); } - /// Caller must ensure GPU completion; borrows a bounded NSData result without a GPU blit or second copy. + /// Borrow bounded NSData bytes after completion; same-command blit resolution is unsupported, no result copy. pub fn resolveCompleted(self: SampleBuffer, count: usize) !Resolved { if (count == 0 or count > self.count) return error.InvalidSampleCount; const data = objc.msg(?objc.Id, self.id, "resolveCounterRange:", .{ diff --git a/zig/src/tensorfold.zig b/zig/src/tensorfold.zig index c2a149e07c..6bfbc75911 100644 --- a/zig/src/tensorfold.zig +++ b/zig/src/tensorfold.zig @@ -22,6 +22,15 @@ pub const row_projection = @import("core/row_projection.zig"); pub const affine_mm = @import("core/affine_mm.zig"); /// The checkpoint formats (MLX affine and its fp64 reader for the device checks, exact widen). pub const quant = @import("core/quant/quant.zig"); +pub const deepseek_v41_config = @import("families/deepseek_v41/config.zig"); +pub const deepseek_v41_load = @import("families/deepseek_v41/load.zig"); +pub const deepseek_v41_weights = @import("families/deepseek_v41/weights.zig"); +pub const deepseek_v41_view = @import("families/deepseek_v41/view.zig"); +pub const deepseek_v41 = @import("families/deepseek_v41/model.zig"); +pub const deepseek_v41_profiler = @import("families/deepseek_v41/profiler.zig"); +pub const gpu_counters = @import("core/gpu_counters.zig"); +pub const expert_groups = @import("core/expert_groups.zig"); +pub const deepseek_v41_engram_hash = @import("families/deepseek_v41/engram_hash.zig"); pub const exl3_format = @import("core/exl3_format.zig"); pub const exl3_projection = @import("core/exl3_projection.zig"); pub const exlr8 = @import("core/exlr8.zig"); diff --git a/zig/tests/deepseek_v41_reference/attention_math.zig b/zig/tests/deepseek_v41_reference/attention_math.zig new file mode 100644 index 0000000000..1adec0172d --- /dev/null +++ b/zig/tests/deepseek_v41_reference/attention_math.zig @@ -0,0 +1,298 @@ +//! CPU CSA2 from DeepSeek AI inference/{model,kernel}.py, rev 2cba9e42aa026125f3ed06c6d98c1db82f7ca027. +const std = @import("std"); +const tf = @import("tensorfold"); +const m = @import("math.zig"); +const projection = @import("projection.zig"); +const Config = tf.deepseek_v41_config.Text; +const Attention = tf.deepseek_v41_weights.Attention; + +pub const max_capacity = 4096; +pub const State = struct { + gpa: std.mem.Allocator, + capacity: usize, + window: []u16, + sources: []u16, + scores: []f32, + candidates: []bool, + blocks: []f32, + active_owner: usize = 0, + selected: [512]u32 = undefined, + selected_len: usize = 0, + partial_kv: [4][2][512]f32 = undefined, + partial_gate: [4][2][512]f32 = undefined, + qr: [1280]u16 = undefined, + q: [32768]u16 = undefined, + index_q: [4096]u16 = undefined, + index_weights: [32]f32 = undefined, + latent: [512]u16 = undefined, + index_key: [128]u16 = undefined, + kv: [512]u16 = undefined, + o: [32768]u16 = undefined, + grouped: [8192]u16 = undefined, + observer: ?Observer = null, + sparse_snapshot: ?[]u16 = null, + pub const Observer = struct { + ctx: *anyopaque, + capture: *const fn (*anyopaque, tf.deepseek_v41.attention.DiagnosticStage, []const u16) void, + }; + fn observe(self: *State, stage: tf.deepseek_v41.attention.DiagnosticStage, values: []const u16) void { + if (self.observer) |observer| observer.capture(observer.ctx, stage, values); + } + + pub fn init(gpa: std.mem.Allocator, capacity: usize) !State { + if (capacity == 0 or capacity > max_capacity) return error.InvalidAttentionReferenceCapacity; + const window = try gpa.alloc(u16, 40 * 128 * 512); + errdefer gpa.free(window); + const sources = try gpa.alloc(u16, 4 * capacity * 640); + errdefer gpa.free(sources); + const scores = try gpa.alloc(f32, capacity); + errdefer gpa.free(scores); + const candidates = try gpa.alloc(bool, capacity); + errdefer gpa.free(candidates); + const blocks = try gpa.alloc(f32, (capacity + 7) / 8); + @memset(window, 0); + return .{ .gpa = gpa, .capacity = capacity, .window = window, .sources = sources, .scores = scores, .candidates = candidates, .blocks = blocks }; + } + pub fn deinit(self: *State) void { + self.gpa.free(self.window); + self.gpa.free(self.sources); + self.gpa.free(self.scores); + self.gpa.free(self.candidates); + self.gpa.free(self.blocks); + self.* = undefined; + } + fn mainRow(self: *State, owner: usize, row: usize) []u16 { + return self.sources[owner * self.capacity * 640 + row * 640 ..][0..512]; + } + fn indexRow(self: *State, owner: usize, row: usize) []u16 { + return self.sources[owner * self.capacity * 640 + row * 640 + 512 ..][0..128]; + } + fn publish(self: *State, a: Attention, layer: usize, x: []const u16, position: usize, c: Config, scratch: *projection.Scratch) !bool { + @setFloatMode(.strict); + const compressor = a.compressor orelse return false; + const owner = (layer - 2) / 6; + self.active_owner = owner; + const ratio: usize = c.compress_ratios[layer]; + if (ratio == 1) { + try projection.apply(compressor.wkv, x, &self.latent, scratch); + } else { + const slot = position % ratio; + try projection.applyF32(compressor.wkv, x, &self.partial_kv[owner][slot], scratch); + try projection.applyF32(compressor.wgate.?, x, &self.partial_gate[owner][slot], scratch); + if ((position + 1) % ratio != 0) return false; + for (0..512) |d| { + const high = @max(self.partial_gate[owner][0][d], self.partial_gate[owner][1][d]); + const p0 = @exp(self.partial_gate[owner][0][d] - high); + const p1 = @exp(self.partial_gate[owner][1][d] - high); + const denominator = p0 + p1; + const weighted0 = self.partial_kv[owner][0][d] * (p0 / denominator); + const weighted1 = self.partial_kv[owner][1][d] * (p1 / denominator); + const pooled = weighted0 + weighted1; + self.latent[d] = m.b(pooled); + } + } + m.rms(&self.latent, compressor.norm, c.rms_norm_eps, &self.latent); + const indexer = a.indexer.?; + try projection.apply(indexer.wk.?, &self.latent, &self.index_key, scratch); + m.rms(&self.index_key, indexer.k_norm.?, c.rms_norm_eps, &self.index_key); + const group_position = position + 1 - ratio; + m.rope(&self.index_key, group_position, true, false, c); + m.quantize(&self.index_key, .index); + const row = position / ratio; + @memcpy(self.indexRow(owner, row), &self.index_key); + m.rope(&self.latent, group_position, true, false, c); + m.quantize(&self.latent, .main); + @memcpy(self.mainRow(owner, row), &self.latent); + return true; + } + fn chooseCandidates(self: *State, count: usize, c: Config) void { + @memset(self.candidates[0..count], false); + const nblocks = (count + 7) / 8; + for (0..nblocks) |block| { + var score: f32 = -std.math.inf(f32); + for (block * 8..@min(block * 8 + 8, count)) |row| score = @max(score, self.scores[row]); + self.blocks[block] = score; + } + if (nblocks == 0) return; + self.blocks[nblocks - 1] = std.math.inf(f32); + for (0..@min(nblocks, c.candidate_topk_blocks)) |_| { + var best: usize = 0; + for (0..nblocks) |i| if (self.blocks[i] > self.blocks[best]) { + best = i; + }; + if (self.blocks[best] == -std.math.inf(f32)) break; + for (best * 8..@min(best * 8 + 8, count)) |row| self.candidates[row] = true; + self.blocks[best] = -std.math.inf(f32); + } + } + fn selectPositions(self: *State, a: Attention, layer: usize, x: []const u16, position: usize, count: usize, c: Config, scratch: *projection.Scratch) !void { + const indexer = a.indexer orelse return; + self.selected_len = @min(count, c.index_topk); + if (count == 0) return; + try projection.apply(indexer.wq_b, &self.qr, &self.index_q, scratch); + for (0..32) |head| { + const q = self.index_q[head * 128 ..][0..128]; + m.rope(q, position, true, false, c); + m.quantize(q, .index); + } + m.dense(indexer.weights_proj, x, &self.index_weights); + const scale: f32 = 1 / @sqrt(@as(f32, 128 * 32)); + // Python scalar multiplication preserves the source weights projection's BF16 dtype. + for (&self.index_weights) |*v| v.* = m.f(m.b(m.f(m.b(v.*)) * scale)); + for (0..count) |row| { + const key = self.indexRow(self.active_owner, row); + var score: f64 = 0; + for (0..32) |head| { + var dot: f64 = 0; + for (key, 0..) |v, d| dot += @as(f64, m.f(v)) * m.f(self.index_q[head * 128 + d]); + // einsum produces BF16, then BF16 multiply and head sum, in the pinned source. + const rectified = @max(m.f(m.b(@floatCast(dot))), 0); + const weighted = m.f(m.b(rectified * self.index_weights[head])); + score += weighted; + } + self.scores[row] = m.f(m.b(@floatCast(score))); + } + if (layer == c.candidate_source_layer_id) self.chooseCandidates(count, c); + if (layer > c.candidate_source_layer_id) for (0..count) |row| { + if (!self.candidates[row]) self.scores[row] = -std.math.inf(f32); + }; + for (0..self.selected_len) |pick| { + var best: usize = 0; + for (0..count) |i| if (self.scores[i] > self.scores[best]) { + best = i; + }; + self.selected[pick] = @intCast(best); + self.scores[best] = -std.math.inf(f32); + } + std.mem.sort(u32, self.selected[0..self.selected_len], {}, std.sort.asc(u32)); + } + pub fn apply(self: *State, a: Attention, layer: usize, x: []const u16, position: usize, c: Config, out: []u16, scratch: *projection.Scratch) !void { + const compressed = c.compress_ratios[layer] != 0; + try projection.apply(.{ .trellis = a.wq_a }, x, &self.qr, scratch); + self.observe(.qr_projection, &self.qr); + m.rms(&self.qr, a.q_norm, c.rms_norm_eps, &self.qr); + self.observe(.qr_norm, &self.qr); + try projection.apply(.{ .trellis = a.wq_b }, &self.qr, &self.q, scratch); + self.observe(.q_projection, &self.q); + for (0..64) |head| m.rope(self.q[head * 512 ..][0..512], position, compressed, false, c); + self.observe(.q, &self.q); + try projection.apply(.{ .trellis = a.wkv }, x, &self.kv, scratch); + self.observe(.kv_projection, &self.kv); + m.rms(&self.kv, a.kv_norm, c.rms_norm_eps, &self.kv); + self.observe(.kv_norm, &self.kv); + m.rope(&self.kv, position, compressed, false, c); + self.observe(.kv_rope, &self.kv); + m.quantize(&self.kv, .window); + self.observe(.kv_quantized, &self.kv); + const window = self.window[layer * 128 * 512 ..][0 .. 128 * 512]; + @memcpy(window[(position % 128) * 512 ..][0..512], &self.kv); + var count: usize = 0; + if (compressed) { + _ = try self.publish(a, layer, x, position, c, scratch); + count = (position + 1) / c.compress_ratios[layer]; + try self.selectPositions(a, layer, x, position, count, c, scratch); + } + var indices: [640]i32 = undefined; + var slots: usize = 0; + if (position == 0) { + indices[0] = 0; + slots = 1; + } else { + const oldest = position % 128 + 1; + for (0..128) |i| { + const at = (oldest + i) % 128; + indices[i] = if (at > position) -1 else @intCast(at); + } + slots = 128; + } + if (compressed) for (self.selected[0..self.selected_len]) |row| { + indices[slots] = @intCast(128 + row); + slots += 1; + }; + for (0..64) |head| { + self.sparseHead(self.q[head * 512 ..][0..512], window, indices[0..slots], m.value(a.sink, head), self.o[head * 512 ..][0..512]); + self.observeHead(head); + m.rope(self.o[head * 512 ..][0..512], position, compressed, true, c); + } + if (self.sparse_snapshot) |snapshot| self.observe(.sparse_o, snapshot); + self.observe(.o, &self.o); + for (0..8) |group| try projection.apply(.{ .trellis = a.wo_a[group] }, self.o[group * 4096 ..][0..4096], self.grouped[group * 1024 ..][0..1024], scratch); + self.observe(.grouped, &self.grouped); + try projection.apply(.{ .trellis = a.wo_b }, &self.grouped, out, scratch); + self.observe(.wo_b, out); + } + fn observeHead(self: *State, head: usize) void { + if (self.sparse_snapshot) |snapshot| + @memcpy(snapshot[head * 512 ..][0..512], self.o[head * 512 ..][0..512]); + } + fn keyRow(self: *State, window: []const u16, key_id: i32) []const u16 { + const at: usize = @intCast(key_id); + return if (at < 128) window[at * 512 ..][0..512] else self.mainRow(self.active_owner, at - 128); + } + pub fn sparseHead(self: *State, q: []const u16, window: []const u16, indices: []const i32, sink: f32, out: []u16) void { + @setFloatMode(.strict); + var acc: [512]f32 = @splat(0); + var high: f32 = -1e30; + var denominator: f32 = 0; + var base: usize = 0; + while (base < indices.len) : (base += 64) { + var probabilities: [64]f32 = undefined; + const width = @min(64, indices.len - base); + var next_high = high; + for (0..width) |j| { + const index = indices[base + j]; + var dot: f64 = 0; + if (index >= 0) { + const key = self.keyRow(window, index); + for (q, key) |a, v| dot += @as(f64, m.f(a)) * m.f(v); + } + probabilities[j] = if (index < 0) -std.math.inf(f32) else @as(f32, @floatCast(dot)) * (1 / @sqrt(@as(f32, 512))); + next_high = @max(next_high, probabilities[j]); + } + const correction = @exp(high - next_high); + var sum: f64 = 0; + for (0..width) |j| { + probabilities[j] = @exp(probabilities[j] - next_high); + sum += probabilities[j]; + } + denominator = denominator * correction + @as(f32, @floatCast(sum)); + for (0..512) |d| { + var accumulated: f64 = acc[d] * correction; + for (0..width) |j| if (indices[base + j] >= 0) { + // Online 64-column source kernel rounds unnormalized probabilities to BF16 before P*V. + accumulated += @as(f64, m.f(m.b(probabilities[j]))) * m.f(self.keyRow(window, indices[base + j])[d]); + }; + acc[d] = @floatCast(accumulated); + } + high = next_high; + } + denominator += @exp(sink - high); + for (out, acc) |*v, a| v.* = m.b(a / denominator); + } +}; + +test "online 64-column sparse attention rounds probabilities before value GEMM" { + var state = try State.init(std.testing.allocator, 2); + defer state.deinit(); + var q: [512]u16 = @splat(0); + q[0] = m.b(8); + state.window[1] = m.b(1); + state.window[512] = m.b(1); + var indices: [65]i32 = @splat(-1); + indices[0] = 0; + indices[1] = 1; + indices[64] = 0; + var out: [512]u16 = undefined; + state.sparseHead(&q, state.window[0..1024], &indices, 0, &out); + const probability = @exp(-@as(f32, 8) * (1 / @sqrt(@as(f32, 512)))); + var denominator = @as(f32, @floatCast(@as(f64, probability) + 1)); + denominator += probability; + denominator += probability; + const expected = m.b((2 * m.f(m.b(probability))) / denominator); + try std.testing.expectEqual(expected, out[1]); +} + +test "attention reference capacity rejects unbounded history before allocation" { + try std.testing.expectError(error.InvalidAttentionReferenceCapacity, State.init(std.testing.allocator, 0)); + try std.testing.expectError(error.InvalidAttentionReferenceCapacity, State.init(std.testing.allocator, max_capacity + 1)); +} diff --git a/zig/tests/deepseek_v41_reference/engram_math.zig b/zig/tests/deepseek_v41_reference/engram_math.zig new file mode 100644 index 0000000000..88772898de --- /dev/null +++ b/zig/tests/deepseek_v41_reference/engram_math.zig @@ -0,0 +1,106 @@ +//! CPU Engram from DeepSeek AI inference/engram.py and model.py, rev 2cba9e42aa026125f3ed06c6d98c1db82f7ca027. +const std = @import("std"); +const tf = @import("tensorfold"); +const m = @import("math.zig"); +const projection = @import("projection.zig"); +const Engram = tf.deepseek_v41_weights.Engram; +const Config = tf.deepseek_v41_config.Text; +const multipliers = [2][4]u64{ + .{ 76632096046245, 4839876093313, 35959672319349, 73987337458391 }, + .{ 67716810739261, 51510806800915, 30921347202721, 82619226485591 }, +}; +const primes = [2][24]u32{ + .{ 16000057, 16000079, 16000081, 16000097, 16000121, 16000129, 16000133, 16000183, 16000189, 16000207, 16000211, 16000253, 16000277, 16000289, 16000307, 16000321, 16000339, 16000381, 16000393, 16000399, 16000403, 16000409, 16000447, 16000463 }, + .{ 16000477, 16000487, 16000499, 16000507, 16000511, 16000573, 16000609, 16000627, 16000667, 16000669, 16000693, 16000697, 16000711, 16000729, 16000759, 16000769, 16000781, 16000799, 16000813, 16000819, 16000841, 16000877, 16000879, 16000889 }, +}; +fn word(raw: []const u8, at: usize) u32 { + return std.mem.readInt(u32, raw[at..][0..4], .little); +} +pub const State = struct { + map: []const u8, + history: [3]u32 = .{ 2, 2, 2 }, + gathered: [6144]u16 = undefined, + kv: [25600]u16 = undefined, + + pub fn init(blob: []const u8) !State { + const at = 96 + 2 * 232; + if (blob.len != at + 129280 * 4 or !std.mem.eql(u8, blob[0..8], "DSENGR01")) + return error.InvalidEngramMetadata; + for ([_]u32{ 129280, 99092, 2, 4, 8, 2 }, 0..) |v, i| + if (word(blob, 8 + i * 4) != v) return error.InvalidEngramMetadata; + for (0..2) |layer| { + const base = 96 + layer * 232; + if (word(blob, base) != (if (layer == 0) @as(u32, 1) else @as(u32, 14))) + return error.InvalidEngramMetadata; + var offset: u32 = 0; + for (multipliers[layer], 0..) |v, j| + if (std.mem.readInt(u64, blob[base + 8 + 8 * j ..][0..8], .little) != v) + return error.InvalidEngramMetadata; + for (primes[layer], 0..) |v, j| { + if (word(blob, base + 40 + 4 * j) != v or word(blob, base + 136 + 4 * j) != offset) + return error.InvalidEngramMetadata; + offset += v; + } + if (word(blob, base + 4) != offset) return error.InvalidEngramMetadata; + } + const map = blob[at..]; + const expected = [_]u8{ 0xc6, 0x0a, 0x86, 0x32, 0x2e, 0xc1, 0x7b, 0x41, 0x42, 0xbf, 0xef, 0x3c, 0x57, 0xa8, 0xd8, 0x1f, 0xb4, 0x28, 0x55, 0x0c, 0xdf, 0x48, 0x7f, 0x88, 0xa4, 0x32, 0x0c, 0xb5, 0x9f, 0xe4, 0x64, 0x81 }; + var digest: [32]u8 = undefined; + std.crypto.hash.sha2.Sha256.hash(map, &digest, .{}); + if (!std.mem.eql(u8, &expected, &digest)) return error.InvalidEngramTokenMap; + return .{ .map = map }; + } + pub fn compressed(self: *const State, id: u32) !u32 { + if (id >= 129280) return error.InvalidToken; + return word(self.map, @as(usize, id) * 4); + } + pub fn advance(self: *State, id: u32) void { + self.history[2] = self.history[1]; + self.history[1] = self.history[0]; + self.history[0] = id; + } + pub fn apply(self: *State, e: Engram, layer: usize, id: u32, h: []u16, c: Config, scratch: *projection.Scratch) !void { + @setFloatMode(.strict); + const tokens = [4]u32{ id, self.history[0], self.history[1], self.history[2] }; + var rolling = @as(u64, tokens[0]) * multipliers[layer][0]; + var offset: usize = 0; + for (1..4) |lookback| { + rolling ^= @as(u64, tokens[lookback]) * multipliers[layer][lookback]; + for (0..8) |head| { + const column = (lookback - 1) * 8 + head; + const row = offset + @as(usize, @intCast(rolling % primes[layer][column])); + for (0..256) |d| self.gathered[column * 256 + d] = + m.b(m.value(e.table, row * 256 + d) * m.value(e.scales, row * 8 + d / 32)); + offset += primes[layer][column]; + } + } + try projection.apply(.{ .trellis = e.wkv }, &self.gathered, &self.kv, scratch); + for (0..4) |copy| { + var hh: f64 = 0; + var kk: f64 = 0; + var dot: f64 = 0; + for (0..5120) |d| { + const at = copy * 5120 + d; + const x = m.f(h[at]); + const k = m.f(self.kv[at]); + const weight = m.value(e.q_weight, at) * m.value(e.k_weight, at); + hh += @as(f64, x) * x; + kk += @as(f64, k) * k; + const weighted: f32 = (x * weight) * k; + dot += weighted; + } + const h_mean = m.meanFromWide(hh, 5120); + const k_mean = m.meanFromWide(kk, 5120); + const h_inverse = m.idealRsqrt(h_mean + c.rms_norm_eps); + const k_inverse = m.idealRsqrt(k_mean + c.rms_norm_eps); + const rstd: f32 = h_inverse * k_inverse; + const dot_f32: f32 = @floatCast(dot); + const normalized: f32 = (dot_f32 * rstd) * (1 / @sqrt(@as(f32, 5120))); + const gate = m.sigmoid(std.math.copysign(@sqrt(@max(@abs(normalized), 1e-6)), normalized)); + for (0..5120) |d| { + const at = copy * 5120 + d; + h[at] = m.b(m.f(h[at]) + gate * m.f(self.kv[20480 + d])); + } + } + } +}; diff --git a/zig/tests/deepseek_v41_reference/math.zig b/zig/tests/deepseek_v41_reference/math.zig new file mode 100644 index 0000000000..a6dccb2b93 --- /dev/null +++ b/zig/tests/deepseek_v41_reference/math.zig @@ -0,0 +1,289 @@ +//! Independent CPU equations: DeepSeek AI inference/{model,kernel}.py, rev 2cba9e42aa026125f3ed06c6d98c1db82f7ca027. +const std = @import("std"); +const tf = @import("tensorfold"); +const Tensor = tf.checkpoint_metal.Tensor; +const Hc = tf.deepseek_v41_weights.Hc; +const Config = tf.deepseek_v41_config.Text; + +pub fn f(x: u16) f32 { + return @bitCast(@as(u32, x) << 16); +} +pub fn b(x: f32) u16 { + const bits: u32 = @bitCast(x); + if ((bits & 0x7fffffff) > 0x7f800000) return @truncate((bits >> 16) | 0x40); + return @truncate((bits +% 0x7fff +% ((bits >> 16) & 1)) >> 16); +} +pub fn bytes(t: Tensor) []const u8 { + return t.buffer.contents()[t.offset..][0..t.bytes]; +} +pub fn value(t: Tensor, index: usize) f32 { + const raw = bytes(t); + return switch (t.dtype) { + .bf16 => f(std.mem.readInt(u16, raw[index * 2 ..][0..2], .little)), + .f16 => @floatCast(@as(f16, @bitCast(std.mem.readInt(u16, raw[index * 2 ..][0..2], .little)))), + .f32 => @bitCast(std.mem.readInt(u32, raw[index * 4 ..][0..4], .little)), + .f8_e4m3 => e4(raw[index]), + .f8_e8m0 => e8(raw[index]), + else => unreachable, + }; +} +pub fn e4(code: u8) f32 { + const magnitude = code & 127; + if (magnitude == 127) return std.math.nan(f32); + const exponent = magnitude >> 3; + const mantissa = magnitude & 7; + const power: f32 = @bitCast((@as(u32, exponent) + 120) << 23); + const v: f32 = if (exponent == 0) @as(f32, @floatFromInt(mantissa)) / 512 else power * (1 + @as(f32, @floatFromInt(mantissa)) / 8); + return if ((code & 128) != 0) -v else v; +} +pub fn e8(code: u8) f32 { + if (code == 255) return std.math.nan(f32); + if (code == 0) return 0x1p-127; + return @bitCast(@as(u32, code) << 23); +} +pub fn roundE4(x: f32) f32 { + const a = @min(@abs(x), 448); + var low: u8 = 0; + var high: u8 = 126; + while (low < high) { + const mid = low + (high - low + 1) / 2; + if (e4(mid) <= a) low = mid else high = mid - 1; + } + var best = low; + if (low < 126) { + const below = a - e4(low); + const above = e4(low + 1) - a; + if (above < below or (above == below and (low + 1) % 2 == 0)) best += 1; + } + return std.math.copysign(e4(best), x); +} +pub fn roundE2(x: f32) f32 { + const levels = [_]f32{ 0, 0.5, 1, 1.5, 2, 3, 4, 6 }; + var best: usize = 0; + var distance: f32 = std.math.inf(f32); + for (levels, 0..) |v, i| { + const d = @abs(@abs(x) - v); + if (d < distance or (d == distance and i % 2 == 0)) { + best = i; + distance = d; + } + } + return std.math.copysign(levels[best], x); +} +fn powerScale(x: f32) f32 { + const bits: u32 = @bitCast(x); + const exponent = (bits >> 23) & 255; + const rounded = exponent + @as(u32, @intFromBool((bits & 0x7fffff) != 0)); + return @bitCast(rounded << 23); +} +pub const Quant = enum { window, main, index }; +pub fn quantize(x: []u16, kind: Quant) void { + const group: usize = if (kind == .main) 16 else 32; + var start: usize = 0; + while (start < x.len) : (start += group) { + var a: f32 = if (kind == .window) 1e-4 else if (kind == .main) 6 * 0x1p-9 else 6 * 0x1p-126; + for (x[start..][0..group]) |v| a = @max(a, @abs(f(v))); + const scale = if (kind == .main) roundE4(a / 6) else powerScale(a * (if (kind == .window) @as(f32, 1.0 / 448.0) else @as(f32, 1.0 / 6.0))); + for (x[start..][0..group]) |*v| { + const z = f(v.*) / scale; + v.* = b((if (kind == .window) roundE4(z) else roundE2(@max(-6, @min(6, z)))) * scale); + } + } +} +pub fn dense(t: Tensor, x: []const u16, out: []f32) void { + for (out, 0..) |*y, row| { + var sum: f64 = 0; + for (x, 0..) |v, k| sum += @as(f64, f(v)) * value(t, row * x.len + k); + y.* = @floatCast(sum); + } +} +/// CUDA MeanOps scalar projection; the internal reduction remains independently wide. +pub fn meanFromWide(sum: f64, count: usize) f32 { + @setFloatMode(.strict); + const accumulator: f32 = @floatCast(sum); + const factor: f32 = 1 / @as(f32, @floatFromInt(count)); + return accumulator * factor; +} +/// Independent ideal FP32 unary result, not an emulation of CUDA's rsqrt approximation. +pub fn idealRsqrt(x: f32) f32 { + @setFloatMode(.strict); + return @floatCast(1 / @sqrt(@as(f64, x))); +} +pub fn rms(x: []const u16, weight: Tensor, eps: f32, out: []u16) void { + @setFloatMode(.strict); + var sum: f64 = 0; + for (x) |v| sum += @as(f64, f(v)) * f(v); + const mean = meanFromWide(sum, x.len); + const r = idealRsqrt(mean + eps); + for (x, out, 0..) |v, *y, i| y.* = b(f(v) * r * value(weight, i)); +} +pub fn sigmoid(x: f32) f32 { + return 1 / (1 + @exp(-x)); +} +pub const Mix = struct { pre: [4]f32, post: [4]f32, comb: [16]f32 }; +pub fn mixes(x: []const u16, hc: Hc, c: Config) Mix { + @setFloatMode(.strict); + var projected: [24]f32 = undefined; + dense(hc.projection, x, &projected); + var squares: f64 = 0; + for (x) |v| squares += @as(f64, f(v)) * f(v); + const mean = meanFromWide(squares, x.len); + const r = idealRsqrt(mean + c.rms_norm_eps); + var m: Mix = undefined; + for (0..4) |i| { + m.pre[i] = sigmoid(@mulAdd(f32, projected[i] * r, value(hc.scale, 0), value(hc.base, i))) + c.hc_eps; + m.post[i] = 2 * sigmoid(@mulAdd(f32, projected[i + 4] * r, value(hc.scale, 1), value(hc.base, i + 4))); + } + for (0..4) |i| { + var high: f32 = -std.math.inf(f32); + for (0..4) |j| { + const at = i * 4 + j; + m.comb[at] = @mulAdd(f32, projected[at + 8] * r, value(hc.scale, 2), value(hc.base, at + 8)); + high = @max(high, m.comb[at]); + } + for (0..4) |j| { + m.comb[i * 4 + j] = @exp(m.comb[i * 4 + j] - high); + } + // TileLang 0.1.8 emits FP32 XOR reductions with offsets 2, then 1. + const denominator = (m.comb[i * 4] + m.comb[i * 4 + 2]) + + (m.comb[i * 4 + 1] + m.comb[i * 4 + 3]); + for (0..4) |j| m.comb[i * 4 + j] = m.comb[i * 4 + j] / denominator + c.hc_eps; + } + for (0..c.hc_sinkhorn_iters) |iteration| { + if (iteration != 0) for (0..4) |i| { + const denominator = ((m.comb[i * 4] + m.comb[i * 4 + 2]) + + (m.comb[i * 4 + 1] + m.comb[i * 4 + 3])) + c.hc_eps; + for (0..4) |j| m.comb[i * 4 + j] /= denominator; + }; + for (0..4) |j| { + const denominator = ((m.comb[j] + m.comb[8 + j]) + + (m.comb[4 + j] + m.comb[12 + j])) + c.hc_eps; + for (0..4) |i| m.comb[i * 4 + j] /= denominator; + } + } + return m; +} +pub fn collapse(h: []const u16, pre: [4]f32, out: []u16) void { + @setFloatMode(.strict); + for (out, 0..) |*v, d| { + var sum: f32 = 0; + for (0..4) |i| { + const product: f32 = pre[i] * f(h[i * out.len + d]); + sum += product; + } + v.* = b(sum); + } +} +pub fn expand(h: []u16, x: []const u16, m: Mix) void { + @setFloatMode(.strict); + for (0..x.len) |d| { + var old: [4]f32 = undefined; + for (0..4) |i| old[i] = f(h[i * x.len + d]); + for (0..4) |i| { + var residual: f32 = 0; + for (0..4) |j| { + const product: f32 = m.comb[j * 4 + i] * old[j]; + residual += product; + } + h[i * x.len + d] = b(m.post[i] * f(x[d]) + residual); + } + } +} +pub fn ropeFrequency(index: usize, theta: f32, original: u32, factor: f32, beta_fast: f32, beta_slow: f32) f32 { + @setFloatMode(.strict); + const exponent: f32 = @as(f32, @floatFromInt(index * 2)) / 64; + const power: f32 = @floatCast(std.math.pow(f64, theta, exponent)); + var frequency: f32 = 1 / power; + if (original > 0) { + const original_f64: f64 = @floatFromInt(original); + const theta_f64: f64 = theta; + const low: f32 = @floatCast(@max(@floor(64 * @log(original_f64 / + (@as(f64, beta_fast) * 2 * std.math.pi)) / (2 * @log(theta_f64))), 0)); + const high: f32 = @floatCast(@min(@ceil(64 * @log(original_f64 / + (@as(f64, beta_slow) * 2 * std.math.pi)) / (2 * @log(theta_f64))), 63)); + const ramp: f32 = @max(0, @min(1, (@as(f32, @floatFromInt(index)) - low) / @max(high - low, 1e-3))); + const smooth: f32 = 1 - ramp; + frequency = frequency / factor * (1 - smooth) + frequency * smooth; + } + return frequency; +} +pub fn rope(x: []u16, position: usize, compressed: bool, inverse: bool, c: Config) void { + for (0..32) |i| { + const frequency = ropeFrequency(i, if (compressed) c.compress_rope_theta else c.rope_theta, if (compressed) c.rope_scaling.original_max_position_embeddings else 0, c.rope_scaling.factor, c.rope_scaling.beta_fast, c.rope_scaling.beta_slow); + const angle: f32 = @as(f32, @floatFromInt(position)) * frequency; + const cosine = @cos(angle); + const sine = @sin(angle) * (if (inverse) @as(f32, -1) else @as(f32, 1)); + const at = x.len - 64 + 2 * i; + const a = f(x[at]); + const z = f(x[at + 1]); + x[at] = b(a * cosine - z * sine); + x[at + 1] = b(a * sine + z * cosine); + } +} + +test "BF16 probability ties and FP4 ties retain source boundaries" { + try std.testing.expectEqual(@as(u16, 0x3f80), b(@bitCast(@as(u32, 0x3f808000)))); + try std.testing.expectEqual(@as(f32, 2), roundE2(2.5)); + try std.testing.expectEqual(@as(f32, 4), roundE2(5)); + try std.testing.expectEqual(@as(f32, 448), roundE4(500)); +} + +test "delayed hyperconnection residual uses comb columns, not rows" { + var h = [_]u16{ b(1), b(2), b(3), b(4) }; + const mix = Mix{ .pre = .{ 1, 0, 0, 0 }, .post = .{ 0, 0, 0, 0 }, .comb = .{ 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0 } }; + expand(&h, &.{b(0)}, mix); + try std.testing.expectEqualSlices(u16, &.{ b(4), b(1), b(2), b(3) }, &h); +} + +test "hyperconnection FP32 accumulation preserves collapse and branch cancellation" { + var h = [_]u16{ b(1), b(1), b(1), b(1) }; + var collapsed: [1]u16 = undefined; + collapse(&h, .{ 1, 0x1p-24, 0x1p-24, -1 }, &collapsed); + try std.testing.expectEqual(@as(u16, 0), collapsed[0]); + const mix = Mix{ .pre = .{ 1, 0, 0, 0 }, .post = .{ -1, 0, 0, 0 }, .comb = .{ 1, 0, 0, 0, 0x1p-24, 0, 0, 0, 0x1p-24, 0, 0, 0, 0, 0, 0, 0 } }; + expand(&h, &.{b(1)}, mix); + try std.testing.expectEqual(@as(u16, 0), h[0]); +} + +test "hyperconnection rounds elementwise products before cancelling reductions" { + var h = [_]u16{ b(3), b(3), b(0), b(0) }; + const coefficient: f32 = 1 + 0x1p-23; + var collapsed: [1]u16 = undefined; + collapse(&h, .{ -1, coefficient, 0, 0 }, &collapsed); + try std.testing.expectEqual(b(0x1p-21), collapsed[0]); + const mix = Mix{ .pre = .{ 1, 0, 0, 0 }, .post = .{ 0, 0, 0, 0 }, .comb = .{ -1, 0, 0, 0, coefficient, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }; + expand(&h, &.{b(0)}, mix); + try std.testing.expectEqual(b(0x1p-21), h[0]); + h = .{ b(3), b(0), b(0), b(0) }; + const branch_mix = Mix{ .pre = .{ 1, 0, 0, 0 }, .post = .{ coefficient, 0, 0, 0 }, .comb = .{ -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }; + expand(&h, &.{b(3)}, branch_mix); + try std.testing.expectEqual(b(0x1p-21), h[0]); +} + +test "RoPE and YaRN frequency vectors retain official FP32 elementwise boundaries" { + const parsed = try std.json.parseFromSlice(std.json.Value, std.testing.allocator, @embedFile("rope_frequencies.json"), .{}); + defer parsed.deinit(); + for (parsed.value.object.get("vectors").?.array.items) |vector| { + const theta: f32 = @floatFromInt(vector.object.get("theta").?.integer); + const original: u32 = @intCast(vector.object.get("original").?.integer); + for (vector.object.get("bits").?.array.items, 0..) |expected, index| { + const actual = ropeFrequency(index, theta, original, 16, 32, 1); + const bits: u32 = @intCast(expected.integer); + const source: f32 = @bitCast(bits); + try std.testing.expectApproxEqAbs(source, actual, source * std.math.floatEps(f32)); + } + } +} + +test "ideal FP32 inverse square root avoids an intermediate square-root rounding" { + // Actual CUDA agrees on this HC RMS argument; CPU/MPS's two-round result is one ULP higher. + try std.testing.expectEqual(@as(f32, 0.3651483356952667), idealRsqrt(7.500000953674316)); +} + +test "CUDA mean projection preserves the BF16 RMS affine tie" { + @setFloatMode(.strict); + // Constructed exact-sum row isolates canonical CUDA RMSNorm mean projection through the BF16 affine tie. + const gamma: f32 = @bitCast(@as(u32, 0x3c65de29)); + const inverse = idealRsqrt(meanFromWide(9, 5120) + @as(f32, 1e-20)); + try std.testing.expectEqual(b(1), b((@as(f32, 3) * inverse) * gamma)); +} diff --git a/zig/tests/deepseek_v41_reference/operator_attention.zig b/zig/tests/deepseek_v41_reference/operator_attention.zig new file mode 100644 index 0000000000..73e94641c3 --- /dev/null +++ b/zig/tests/deepseek_v41_reference/operator_attention.zig @@ -0,0 +1,155 @@ +//! Single-position retained-input attention isolation. +const std = @import("std"); +const mtl = @import("metal"); +const tf = @import("tensorfold"); +const projection = @import("projection.zig"); +const math = @import("math.zig"); +const attention = tf.deepseek_v41.attention; +const Model = tf.deepseek_v41.Model; +const diagnostic = @import("operator_diagnostic.zig"); +const diagnosticRow = diagnostic.diagnosticRow; +const attentionMetric = diagnostic.attentionMetric; +const attention_math = @import("attention_math.zig"); +const AttentionStage = diagnostic.AttentionStage; +const AttentionCapture = diagnostic.AttentionCapture; +const attention_elements = diagnostic.attention_elements; +const attentionProjection = diagnostic.attentionProjection; +const hyperconnections = @import("operator_hc.zig").hyperconnections; + +/// Local isolation receipt, not a replacement for the full eight-token oracle or its 1% gate. +pub fn runAttention(gpa: std.mem.Allocator, io: std.Io, model: *Model, snapshot: []const u8, dir: []const u8, layer: usize) !void { + const blob = try std.Io.Dir.cwd().readFileAlloc(io, snapshot, gpa, .limited(8 << 20)); + defer gpa.free(blob); + const cfg = model.cfg.text_config; + if (layer >= model.weights.layers.len) return error.InvalidAttentionLayer; + const snapshot_offset = layer * 2 * 61488; + if (blob.len < snapshot_offset + 40960 + 10240) return error.InvalidAttentionSnapshot; + try model.reset(); + const input = model.workspace.view(.normalized); + @memcpy(input.buffer.contents()[input.offset..][0..10240], blob[snapshot_offset + 40960 ..][0..10240]); + const input_row = @as([*]const u16, @ptrCast(@alignCast(input.buffer.contents() + input.offset)))[0..5120]; + const native = try model.device.buffer(attention_elements * 2, mtl.ResourceOptions.shared); + defer native.deinit(); + const reference_rows = try gpa.alloc(u16, attention_elements); + defer gpa.free(reference_rows); + var capture = AttentionCapture{ .model = model, .native = native, .reference = reference_rows }; + model.residency.add(native); + model.residency.commit(); + model.residency.requestResidency(); + defer { + model.residency.remove(native); + model.residency.commit(); + } + var scratch = try projection.Scratch.init(gpa, 8192, 32768); + defer scratch.deinit(); + var state = try attention_math.State.init(gpa, 1); + defer state.deinit(); + var output: [5120]u16 = undefined; + // Replay prerequisite normalized layers; complete each GPU command before reusing the CPU input buffer. + for (0..layer) |prior| { + const prior_offset = prior * 2 * 61488 + 40960; + @memcpy(input.buffer.contents()[input.offset..][0..10240], blob[prior_offset..][0..10240]); + const warm_cb = model.queue.commandBufferUnretained(); + const warm_enc = warm_cb.compute(.serial); + var warm_encoding = true; + errdefer if (warm_encoding) warm_enc.end(); + for (model.checkpoint.shards.items) |shard| warm_enc.useResource(shard.buffer, mtl.ResourceUsage.read); + try attention.encode(&model.pipelines.attention, warm_enc, &model.weights.layers[prior].attn, &model.cache, &model.attention_workspace, input, model.workspace.view(.branch), &model.pipelines.projection, model.workspace.projection(), @intCast(prior), 1, cfg); + warm_enc.end(); + warm_encoding = false; + warm_cb.commit(); + warm_cb.wait(); + if (warm_cb.failure() != null) return error.OperatorGpuFailure; + try state.apply(model.weights.layers[prior].attn, prior, input_row, 0, cfg, &output, &scratch); + } + @memcpy(input.buffer.contents()[input.offset..][0..10240], blob[snapshot_offset + 40960 ..][0..10240]); + const weights = &model.weights.layers[layer].attn; + const cb = model.queue.commandBufferUnretained(); + const enc = cb.compute(.serial); + var encoding = true; + errdefer if (encoding) enc.end(); + for (model.checkpoint.shards.items) |shard| enc.useResource(shard.buffer, mtl.ResourceUsage.read); + try attention.encodeDiagnostic(&model.pipelines.attention, enc, weights, &model.cache, &model.attention_workspace, input, model.workspace.view(.branch), &model.pipelines.projection, model.workspace.projection(), @intCast(layer), 1, cfg, true, .{ .ctx = &capture, .capture = AttentionCapture.gpu }); + enc.end(); + encoding = false; + cb.commit(); + cb.wait(); + if (cb.failure() != null) return error.OperatorGpuFailure; + const sparse_snapshot = try gpa.alloc(u16, 32768); + defer gpa.free(sparse_snapshot); + state.sparse_snapshot = sparse_snapshot; + state.observer = .{ .ctx = &capture, .capture = AttentionCapture.cpu }; + try state.apply(weights.*, layer, input_row, 0, cfg, &output, &scratch); + state.observer = null; + state.sparse_snapshot = null; + + var report: std.ArrayList(u8) = .empty; + defer report.deinit(gpa); + var count: usize = 0; + var header: [512]u8 = undefined; + try report.appendSlice(gpa, try std.fmt.bufPrint(&header, "{{\"mode\":\"attention-sameinput\",\"token\":0,\"layer\":{d},\"input_offset_bytes\":{d},\"input_length_bytes\":10240,\"identical_normalized_input\":true,\"retained_normalized_prefix_layers\":{d},\"compression_ratio\":{d},\"reference_dot\":\"independent_EXL3_FP64\",\"qualification_gate_applied\":false,\"cases\":[\n", .{ layer, snapshot_offset + 40960, layer, cfg.compress_ratios[layer] })); + inline for (std.enums.values(AttentionStage)) |stage| + try attentionMetric(u16, gpa, &report, &count, @tagName(stage), "same_normalized_input_chain", capture.row(stage), capture.cpuRow(stage)); + + const expected = try gpa.alloc(f32, 32768); + defer gpa.free(expected); + try attentionProjection(gpa, model, weights.wq_a, input, "wq_a", &scratch, expected, &report, &count); + try attentionProjection(gpa, model, weights.wq_b, capture.view(.qr_norm), "wq_b", &scratch, expected, &report, &count); + try attentionProjection(gpa, model, weights.wkv, input, "wkv", &scratch, expected, &report, &count); + for (weights.wo_a, 0..) |matrix, group| { + var name: [32]u8 = undefined; + try attentionProjection(gpa, model, matrix, capture.view(.o).shifted(group * 4096 * 2), try std.fmt.bufPrint(&name, "wo_a_group{d}", .{group}), &scratch, expected, &report, &count); + } + try attentionProjection(gpa, model, weights.wo_b, capture.view(.grouped), "wo_b", &scratch, expected, &report, &count); + + var same_input: [32768]u16 = undefined; + math.rms(capture.row(.qr_projection), weights.q_norm, cfg.rms_norm_eps, same_input[0..1280]); + try attentionMetric(u16, gpa, &report, &count, "qr_norm", "same_native_input_reference_rms", capture.row(.qr_norm), same_input[0..1280]); + math.rms(capture.row(.kv_projection), weights.kv_norm, cfg.rms_norm_eps, same_input[0..512]); + try attentionMetric(u16, gpa, &report, &count, "kv_norm", "same_native_input_reference_rms", capture.row(.kv_norm), same_input[0..512]); + @memcpy(same_input[0..512], capture.row(.kv_rope)); + math.quantize(same_input[0..512], .window); + try attentionMetric(u16, gpa, &report, &count, "kv_quantized", "same_native_input_reference_quantize", capture.row(.kv_quantized), same_input[0..512]); + if (cfg.compress_ratios[layer] == 1) { + const source = try model.cache.source(@intCast(layer), 1); + const compressed = model.workspace.view(.collapsed); + const unpack_cb = model.queue.commandBufferUnretained(); + const unpack_enc = unpack_cb.compute(.serial); + var unpack_encoding = true; + errdefer if (unpack_encoding) unpack_enc.end(); + try model.pipelines.attention.cache.encodeUnpack(unpack_enc, source.main, compressed, .{ .rows = 1, .width = 512, .stride = 512, .packed_stride = 288, .block = 16, .kind = .main_fp4 }); + unpack_enc.end(); + unpack_encoding = false; + unpack_cb.commit(); + unpack_cb.wait(); + if (unpack_cb.failure() != null) return error.OperatorGpuFailure; + const actual_compressed = diagnosticRow(u16, compressed, 512); + const reference_compressed = state.sources[state.active_owner * state.capacity * 640 ..][0..512]; + try attentionMetric(u16, gpa, &report, &count, "compressed_kv", "same_retained_normalized_prefix", actual_compressed, reference_compressed); + var sinks: [64]f32 = undefined; + for (&sinks, 0..) |*v, head| v.* = math.value(weights.sink, head); + inline for (.{ "attention-compressed-native.bf16", "attention-compressed-reference.bf16", "attention-sinks.f32" }, .{ std.mem.sliceAsBytes(actual_compressed), std.mem.sliceAsBytes(reference_compressed), std.mem.sliceAsBytes(&sinks) }) |name, data| { + const path = try std.fs.path.join(gpa, &.{ dir, name }); + defer gpa.free(path); + try std.Io.Dir.cwd().writeFile(io, .{ .sub_path = path, .data = data }); + } + @memcpy(reference_compressed, actual_compressed); + const indices = [_]i32{ 0, 128 }; + for (0..64) |head| + state.sparseHead(capture.row(.q)[head * 512 ..][0..512], capture.row(.kv_quantized), &indices, sinks[head], same_input[head * 512 ..][0..512]); + try attentionMetric(u16, gpa, &report, &count, "sparse_o", "same_native_q_window_and_compressed_kv_reference_sparse", capture.row(.sparse_o), &same_input); + } + if (cfg.compress_ratios[layer] == 0) { + const indices = [_]i32{0}; + for (0..64) |head| + state.sparseHead(capture.row(.q)[head * 512 ..][0..512], capture.row(.kv_quantized), &indices, math.value(weights.sink, head), same_input[head * 512 ..][0..512]); + try attentionMetric(u16, gpa, &report, &count, "sparse_o", "same_native_q_and_quantized_kv_reference_sparse", capture.row(.sparse_o), &same_input); + } + try hyperconnections(gpa, model, blob[snapshot_offset..], capture.view(.wo_b), &report, &count, layer); + try report.appendSlice(gpa, "\n]}\n"); + inline for (.{ "attention-sameinput.json", "attention-native.bf16", "attention-reference.bf16", "attention-input.bf16" }, .{ report.items, std.mem.sliceAsBytes(native.slice(u16, attention_elements)), std.mem.sliceAsBytes(reference_rows), std.mem.sliceAsBytes(input_row) }) |name, data| { + const path = try std.fs.path.join(gpa, &.{ dir, name }); + defer gpa.free(path); + try std.Io.Dir.cwd().writeFile(io, .{ .sub_path = path, .data = data }); + } +} diff --git a/zig/tests/deepseek_v41_reference/operator_diagnostic.zig b/zig/tests/deepseek_v41_reference/operator_diagnostic.zig new file mode 100644 index 0000000000..66dc039bcf --- /dev/null +++ b/zig/tests/deepseek_v41_reference/operator_diagnostic.zig @@ -0,0 +1,124 @@ +//! Shared retained-input diagnostic capture and metrics. +const std = @import("std"); +const mtl = @import("metal"); +const tf = @import("tensorfold"); +const projection = @import("projection.zig"); +const math = @import("math.zig"); +const attention = tf.deepseek_v41.attention; +const Model = tf.deepseek_v41.Model; +const ex = tf.exl3_projection; + +pub const AttentionStage = attention.DiagnosticStage; +pub const attention_widths = [_]usize{ 1280, 1280, 32768, 32768, 512, 512, 512, 512, 32768, 32768, 8192, 5120 }; +pub const attention_elements = blk: { + var total: usize = 0; + for (attention_widths) |width| total += width; + break :blk total; +}; +pub fn attentionOffset(stage: AttentionStage) usize { + var offset: usize = 0; + for (attention_widths[0..@backingInt(stage)]) |width| offset += width; + return offset; +} +pub const AttentionCapture = struct { + model: *Model, + native: mtl.Buffer, + reference: []u16, + + pub fn view(self: *const AttentionCapture, stage: AttentionStage) attention.View { + return .{ .buffer = self.native, .offset = attentionOffset(stage) * 2 }; + } + pub fn row(self: *const AttentionCapture, stage: AttentionStage) []u16 { + return self.native.slice(u16, attention_elements)[attentionOffset(stage)..][0..attention_widths[@backingInt(stage)]]; + } + pub fn cpuRow(self: *const AttentionCapture, stage: AttentionStage) []u16 { + return self.reference[attentionOffset(stage)..][0..attention_widths[@backingInt(stage)]]; + } + pub fn gpu(ctx: *anyopaque, enc: mtl.ComputeEncoder, stage: AttentionStage, source: attention.View) !void { + const self: *AttentionCapture = @ptrCast(@alignCast(ctx)); + const cache = &self.model.pipelines.attention.cache; + if (stage == .kv_quantized) { + try cache.encodeUnpack(enc, source, self.view(stage), .{ .rows = 1, .width = 512, .stride = 512, .packed_stride = 528, .block = 32, .kind = .window_fp8 }); + } else { + cache.encodeCopy(enc, source, self.view(stage), @intCast(attention_widths[@backingInt(stage)] * 2)); + } + } + pub fn cpu(ctx: *anyopaque, stage: AttentionStage, values: []const u16) void { + const self: *AttentionCapture = @ptrCast(@alignCast(ctx)); + @memcpy(self.cpuRow(stage), values); + } +}; + +pub fn attentionMetric(comptime T: type, gpa: std.mem.Allocator, report: *std.ArrayList(u8), count: *usize, name: []const u8, comparison: []const u8, actual: []const T, expected: []const T) !void { + if (actual.len == 0 or actual.len != expected.len) return error.InvalidAttentionMetricShape; + var squared: f64 = 0; + var magnitude: f64 = 0; + var max_abs: f64 = 0; + var worst: usize = 0; + var unequal: usize = 0; + var first: ?usize = null; + for (actual, expected, 0..) |a, r, i| { + const x = if (T == u16) math.f(a) else a; + const y = if (T == u16) math.f(r) else r; + if (!std.math.isFinite(x) or !std.math.isFinite(y)) return error.NonfiniteAttentionDiagnostic; + const delta = @as(f64, x) - y; + squared += delta * delta; + magnitude += @as(f64, y) * y; + if (@abs(delta) > max_abs) { + max_abs = @abs(delta); + worst = i; + } + const ab = if (T == u16) a else math.b(a); + const rb = if (T == u16) r else math.b(r); + if (ab != rb) { + unequal += 1; + if (first == null) first = i; + } + } + const line = try std.json.Stringify.valueAlloc(gpa, .{ + .name = name, + .comparison = comparison, + .elements = actual.len, + .output_dtype = if (T == u16) "bf16" else "f32", + .normalized_rms_error = if (magnitude == 0) @sqrt(squared) else @sqrt(squared / magnitude), + .max_absolute_error = max_abs, + .worst_index = worst, + .bf16_unequal_count = unequal, + .bf16_first_unequal_index = first, + .worst_native = if (T == u16) math.f(actual[worst]) else actual[worst], + .worst_reference = if (T == u16) math.f(expected[worst]) else expected[worst], + }, .{}); + defer gpa.free(line); + if (count.* != 0) try report.appendSlice(gpa, ",\n"); + try report.appendSlice(gpa, line); + count.* += 1; + std.debug.print("{s}\n", .{line}); +} + +pub fn attentionProjection(gpa: std.mem.Allocator, model: *Model, matrix: ex.Matrix, input: attention.View, name: []const u8, scratch: *projection.Scratch, expected: []f32, report: *std.ArrayList(u8), count: *usize) !void { + const input_row = @as([*]const u16, @ptrCast(@alignCast(input.buffer.contents() + input.offset)))[0..matrix.k]; + try projection.applyF32(.{ .trellis = matrix }, input_row, expected[0..matrix.n], scratch); + const output = model.workspace.view(.logits); + const cb = model.queue.commandBufferUnretained(); + const enc = cb.compute(.serial); + var encoding = true; + errdefer if (encoding) enc.end(); + ex.useMatrix(enc, matrix); + try ex.encode(&model.pipelines.projection, enc, matrix, .{ .buffer = input.buffer, .offset = input.offset }, .{ .buffer = output.buffer, .offset = output.offset }, model.workspace.projection(), .{ .count = 1, .x_stride = matrix.k, .y_stride = matrix.n, .output = .f32 }); + enc.end(); + encoding = false; + cb.commit(); + cb.wait(); + if (cb.failure() != null) return error.OperatorGpuFailure; + const actual = @as([*]const f32, @ptrCast(@alignCast(output.buffer.contents() + output.offset)))[0..matrix.n]; + try attentionMetric(f32, gpa, report, count, name, "same_native_input_fp64_dot", actual, expected[0..matrix.n]); +} + +pub fn diagnosticRow(comptime T: type, view: attention.View, len: usize) []T { + return @as([*]T, @ptrCast(@alignCast(view.buffer.contents() + view.offset)))[0..len]; +} +pub fn attentionWrite(gpa: std.mem.Allocator, io: std.Io, dir: []const u8, name: []const u8, data: []const u8) !void { + const path = try std.fs.path.join(gpa, &.{ dir, name }); + defer gpa.free(path); + try std.Io.Dir.cwd().writeFile(io, .{ .sub_path = path, .data = data }); +} diff --git a/zig/tests/deepseek_v41_reference/operator_hc.zig b/zig/tests/deepseek_v41_reference/operator_hc.zig new file mode 100644 index 0000000000..4aec23362a --- /dev/null +++ b/zig/tests/deepseek_v41_reference/operator_hc.zig @@ -0,0 +1,98 @@ +//! Retained-input hyperconnection isolation, separate from qualification. +const std = @import("std"); +const mtl = @import("metal"); +const tf = @import("tensorfold"); +const math = @import("math.zig"); +const attention = tf.deepseek_v41.attention; +const Model = tf.deepseek_v41.Model; +const diagnostic = @import("operator_diagnostic.zig"); +const diagnosticRow = diagnostic.diagnosticRow; +const attentionMetric = diagnostic.attentionMetric; + +pub fn hyperconnections(gpa: std.mem.Allocator, model: *Model, stream_bytes: []const u8, branch: attention.View, report: *std.ArrayList(u8), count: *usize, layer: usize) !void { + const ws = &model.workspace; + const hc = model.weights.layers[layer].hc_ffn; + const cfg = model.cfg.text_config; + const stream = ws.view(.stream); + @memcpy(stream.buffer.contents()[stream.offset..][0..40960], stream_bytes[0..40960]); + var input: [20480]u16 = undefined; + @memcpy(&input, diagnosticRow(u16, stream, input.len)); + var projected: [24]f32 = undefined; + math.dense(hc.projection, &input, &projected); + const expected_mix = math.mixes(&input, hc, cfg); + var squares: f64 = 0; + for (input) |v| squares += @as(f64, math.f(v)) * math.f(v); + const mean = math.meanFromWide(squares, input.len); + const expected_inv = [_]f32{math.idealRsqrt(mean + cfg.rms_norm_eps)}; + const cb = model.queue.commandBufferUnretained(); + const enc = cb.compute(.serial); + for (model.checkpoint.shards.items) |shard| enc.useResource(shard.buffer, mtl.ResourceUsage.read); + tf.deepseek_v41.mhc.encodeRms(enc, &model.pipelines.mhc, stream, ws.view(.inv), .{ .rows = 1, .width = 5120, .stream_stride = 20480, .eps = cfg.rms_norm_eps }); + tf.deepseek_v41.ops.encodeDense(enc, &model.pipelines.ops, stream, .{ .buffer = hc.projection.buffer, .offset = hc.projection.offset }, ws.view(.mixes), .{ .rows = 1, .k = 20480, .n = 24, .x_stride = 20480, .w_stride = 20480, .y_stride = 24, .w_dtype = .f32, .y_dtype = .f32 }); + enc.barrier(); + tf.deepseek_v41.mhc.encodeSplit(enc, &model.pipelines.mhc, ws.view(.mixes), ws.view(.inv), .{ .buffer = hc.scale.buffer, .offset = hc.scale.offset }, .{ .buffer = hc.base.buffer, .offset = hc.base.offset }, ws.view(.attention_pre), ws.view(.post), ws.view(.comb), .{ .rows = 1, .eps = cfg.hc_eps }); + enc.barrier(); + tf.deepseek_v41.mhc.encodeCollapse(enc, &model.pipelines.mhc, stream, ws.view(.attention_pre), ws.view(.collapsed), .{ .rows = 1, .width = 5120, .stream_stride = 20480, .y_stride = 5120 }); + enc.barrier(); + tf.deepseek_v41.mhc.encodePost(enc, &model.pipelines.mhc, branch, stream, ws.view(.post), ws.view(.comb), stream, .{ .rows = 1, .width = 5120, .branch_stride = 5120, .residual_stride = 20480, .y_stride = 20480 }); + enc.end(); + cb.commit(); + cb.wait(); + if (cb.failure() != null) return error.OperatorGpuFailure; + try attentionMetric(f32, gpa, report, count, "hc_projection", "same_retained_stream_fp64_dot", diagnosticRow(f32, ws.view(.mixes), 24), &projected); + try attentionMetric(f32, gpa, report, count, "hc_inverse", "same_retained_stream_reference_statistic", diagnosticRow(f32, ws.view(.inv), 1), &expected_inv); + try attentionMetric(f32, gpa, report, count, "hc_pre", "same_retained_stream_chain", diagnosticRow(f32, ws.view(.attention_pre), 4), &expected_mix.pre); + try attentionMetric(f32, gpa, report, count, "hc_post", "same_retained_stream_chain", diagnosticRow(f32, ws.view(.post), 4), &expected_mix.post); + try attentionMetric(f32, gpa, report, count, "hc_comb", "same_retained_stream_chain", diagnosticRow(f32, ws.view(.comb), 16), &expected_mix.comb); + var native_mix: math.Mix = undefined; + @memcpy(&native_mix.pre, diagnosticRow(f32, ws.view(.attention_pre), 4)); + @memcpy(&native_mix.post, diagnosticRow(f32, ws.view(.post), 4)); + @memcpy(&native_mix.comb, diagnosticRow(f32, ws.view(.comb), 16)); + var collapsed: [5120]u16 = undefined; + math.collapse(&input, native_mix.pre, &collapsed); + try attentionMetric(u16, gpa, report, count, "hc_collapse", "same_retained_stream_and_native_coefficients", diagnosticRow(u16, ws.view(.collapsed), 5120), &collapsed); + math.expand(&input, diagnosticRow(u16, branch, 5120), native_mix); + try attentionMetric(u16, gpa, report, count, "hc_expand", "same_retained_stream_branch_and_native_coefficients", diagnosticRow(u16, stream, 20480), &input); + if (layer + 1 < model.weights.layers.len and stream_bytes.len >= 61488 + 40960) { + @memcpy(stream.buffer.contents()[stream.offset..][0..40960], stream_bytes[61488..][0..40960]); + @memcpy(&input, diagnosticRow(u16, stream, input.len)); + const norm = model.weights.layers[layer + 1].attn_norm; + const next_cb = model.queue.commandBufferUnretained(); + const next_enc = next_cb.compute(.serial); + next_enc.useResource(norm.buffer, mtl.ResourceUsage.read); + tf.deepseek_v41.mhc.encodeCollapse(next_enc, &model.pipelines.mhc, stream, ws.view(.attention_pre), ws.view(.collapsed), .{ .rows = 1, .width = 5120, .stream_stride = 20480, .y_stride = 5120 }); + next_enc.barrier(); + tf.deepseek_v41.ops.encodeRms(next_enc, &model.pipelines.ops, ws.view(.collapsed), .{ .buffer = norm.buffer, .offset = norm.offset }, ws.view(.branch), .{ .rows = 1, .width = 5120, .x_stride = 5120, .y_stride = 5120, .eps = cfg.rms_norm_eps }); + next_enc.end(); + next_cb.commit(); + next_cb.wait(); + if (next_cb.failure() != null) return error.OperatorGpuFailure; + math.collapse(&input, native_mix.pre, &collapsed); + try attentionMetric(u16, gpa, report, count, "next_collapse", "same_retained_ffn_stream_and_native_pre", diagnosticRow(u16, ws.view(.collapsed), 5120), &collapsed); + math.collapse(&input, expected_mix.pre, &collapsed); + try attentionMetric(u16, gpa, report, count, "next_collapse", "same_retained_ffn_stream_reference_pre", diagnosticRow(u16, ws.view(.collapsed), 5120), &collapsed); + math.rms(&collapsed, norm, cfg.rms_norm_eps, &collapsed); + try attentionMetric(u16, gpa, report, count, "next_normalized", "same_retained_ffn_stream_reference_pre_and_norm", diagnosticRow(u16, ws.view(.branch), 5120), &collapsed); + } +} + +pub fn runHyperconnections(gpa: std.mem.Allocator, io: std.Io, model: *Model, snapshot: []const u8, dir: []const u8, layer: usize) !void { + if (layer >= model.weights.layers.len) return error.InvalidHyperconnectionLayer; + const blob = try std.Io.Dir.cwd().readFileAlloc(io, snapshot, gpa, .limited(8 << 20)); + defer gpa.free(blob); + const offset = layer * 2 * 61488; + if (blob.len < offset + 2 * 61488) return error.InvalidHyperconnectionSnapshot; + try model.reset(); + const branch = model.workspace.view(.branch); + @memcpy(branch.buffer.contents()[branch.offset..][0..10240], blob[offset + 61488 + 51200 ..][0..10240]); + var report: std.ArrayList(u8) = .empty; + defer report.deinit(gpa); + var count: usize = 0; + var header: [256]u8 = undefined; + try report.appendSlice(gpa, try std.fmt.bufPrint(&header, "{{\"mode\":\"hc-sameinput\",\"token\":null,\"token_identity_source\":\"unknown_headerless_snapshot\",\"layer\":{d},\"qualification_gate_applied\":false,\"cases\":[\n", .{layer})); + try hyperconnections(gpa, model, blob[offset..], branch, &report, &count, layer); + try report.appendSlice(gpa, "\n]}\n"); + const path = try std.fs.path.join(gpa, &.{ dir, "hc-sameinput.json" }); + defer gpa.free(path); + try std.Io.Dir.cwd().writeFile(io, .{ .sub_path = path, .data = report.items }); +} diff --git a/zig/tests/deepseek_v41_reference/operator_history.zig b/zig/tests/deepseek_v41_reference/operator_history.zig new file mode 100644 index 0000000000..499a1cd463 --- /dev/null +++ b/zig/tests/deepseek_v41_reference/operator_history.zig @@ -0,0 +1,298 @@ +//! Retained-input attention history and source-layout receipts. +const std = @import("std"); +const mtl = @import("metal"); +const tf = @import("tensorfold"); +const projection = @import("projection.zig"); +const math = @import("math.zig"); +const attention = tf.deepseek_v41.attention; +const Model = tf.deepseek_v41.Model; +const diagnostic = @import("operator_diagnostic.zig"); +const diagnosticRow = diagnostic.diagnosticRow; +const attentionMetric = diagnostic.attentionMetric; +const attention_math = @import("attention_math.zig"); +const AttentionStage = diagnostic.AttentionStage; +const AttentionCapture = diagnostic.AttentionCapture; +const attention_widths = diagnostic.attention_widths; +const attention_elements = diagnostic.attention_elements; +const attentionOffset = diagnostic.attentionOffset; +const attentionProjection = diagnostic.attentionProjection; +const attentionWrite = diagnostic.attentionWrite; + +// Source indices address physical ring slots then compressed rows; reference reserves 128 window rows even at zero. +fn attentionHistoryIndices(position: usize, selected: []const i32, compressed_offset: usize, out: *[640]i32) []const i32 { + const window_columns: usize = if (position == 0) 1 else 128; + if (position == 0) { + out[0] = 0; + } else { + for (0..128) |slot| { + const at = (position % 128 + 1 + slot) % 128; + out[slot] = if (at > position) -1 else @intCast(at); + } + } + for (selected, 0..) |row, slot| + out[window_columns + slot] = if (row < 0) -1 else @intCast(compressed_offset + @as(usize, @intCast(row))); + return out[0 .. window_columns + selected.len]; +} + +/// Replay prerequisite layers at each position; native/reference cursors advance without borrowed intermediates. +pub fn runAttentionHistory(gpa: std.mem.Allocator, io: std.Io, model: *Model, trace_dir: []const u8, dir: []const u8, token: usize, layer: usize) !void { + if (layer >= model.weights.layers.len) return error.InvalidAttentionLayer; + if (token >= model.cache.plan.capacity) return error.InvalidAttentionHistory; + if (token >= attention_math.max_capacity) return error.DiagnosticHistoryTooLarge; + const prefix_elements = try std.math.mul(usize, token + 1, (layer + 1) * 5120); + if (prefix_elements > (256 << 20) / @sizeOf(u16)) return error.DiagnosticHistoryTooLarge; + const cfg = model.cfg.text_config; + const history_count = token + 1; + const ratio = cfg.compress_ratios[layer]; + const compressed_rows = if (ratio == 0) 0 else history_count / ratio; + const topk = @min(compressed_rows, cfg.index_topk); + const window_rows: usize = if (token == 0) 1 else 128; + const snapshot_bytes = 61488; + const snapshot_offset = layer * 2 * snapshot_bytes; + const weights = &model.weights.layers[layer].attn; + const input = model.workspace.view(.normalized); + const native = try model.device.buffer(attention_elements * 2, mtl.ResourceOptions.shared); + defer native.deinit(); + const decoded = try model.device.buffer((128 * 512 + compressed_rows * 640) * 2, mtl.ResourceOptions.shared); + defer decoded.deinit(); + const reference_rows = try gpa.alloc(u16, attention_elements); + defer gpa.free(reference_rows); + const sparse_snapshot = try gpa.alloc(u16, 32768); + defer gpa.free(sparse_snapshot); + const normalized_prefix = try gpa.alloc(u16, prefix_elements); + defer gpa.free(normalized_prefix); + var retained_branch: [5120]u16 = undefined; + var capture = AttentionCapture{ .model = model, .native = native, .reference = reference_rows }; + for ([_]mtl.Buffer{ native, decoded }) |buffer| model.residency.add(buffer); + model.residency.commit(); + model.residency.requestResidency(); + defer { + for ([_]mtl.Buffer{ native, decoded }) |buffer| model.residency.remove(buffer); + model.residency.commit(); + } + var scratch = try projection.Scratch.init(gpa, 8192, 32768); + defer scratch.deinit(); + var state = try attention_math.State.init(gpa, history_count); + defer state.deinit(); + var output: [5120]u16 = undefined; + try model.reset(); + for (0..history_count) |position| { + var name: [64]u8 = undefined; + const trace_name = try std.fmt.bufPrint(&name, "trace-{d}-gpu.bin", .{position}); + const path = try std.fs.path.join(gpa, &.{ trace_dir, trace_name }); + defer gpa.free(path); + const blob = try std.Io.Dir.cwd().readFileAlloc(io, path, gpa, .limited(8 << 20)); + defer gpa.free(blob); + if (blob.len != model.weights.layers.len * 2 * snapshot_bytes) return error.InvalidAttentionSnapshot; + if (model.cache.position != position) return error.InvalidAttentionHistoryCursor; + for (0..layer + 1) |prior| { + const offset = prior * 2 * snapshot_bytes + 40960; + const row = normalized_prefix[(position * (layer + 1) + prior) * 5120 ..][0..5120]; + @memcpy(std.mem.sliceAsBytes(row), blob[offset..][0..10240]); + @memcpy(input.buffer.contents()[input.offset..][0..10240], std.mem.sliceAsBytes(row)); + const target = position == token and prior == layer; + const cb = model.queue.commandBufferUnretained(); + const enc = cb.compute(.serial); + var encoding = true; + errdefer if (encoding) enc.end(); + for (model.checkpoint.shards.items) |shard| enc.useResource(shard.buffer, mtl.ResourceUsage.read); + if (target) { + try attention.encodeDiagnostic(&model.pipelines.attention, enc, &model.weights.layers[prior].attn, &model.cache, &model.attention_workspace, input, model.workspace.view(.branch), &model.pipelines.projection, model.workspace.projection(), @intCast(prior), 1, cfg, true, .{ .ctx = &capture, .capture = AttentionCapture.gpu }); + @memcpy(std.mem.sliceAsBytes(&retained_branch), blob[snapshot_offset + 51200 ..][0..10240]); + } else { + try attention.encode(&model.pipelines.attention, enc, &model.weights.layers[prior].attn, &model.cache, &model.attention_workspace, input, model.workspace.view(.branch), &model.pipelines.projection, model.workspace.projection(), @intCast(prior), 1, cfg); + } + enc.end(); + encoding = false; + cb.commit(); + cb.wait(); + if (cb.failure() != null) return error.OperatorGpuFailure; + // Wait before the next retained row replaces the native workspace input. + if (target) { + state.observer = .{ .ctx = &capture, .capture = AttentionCapture.cpu }; + state.sparse_snapshot = sparse_snapshot; + } + try state.apply(model.weights.layers[prior].attn, prior, row, position, cfg, &output, &scratch); + state.observer = null; + state.sparse_snapshot = null; + } + try model.cache.append(1); + } + + // Export post-insertion physical ring slots, masking never-written slots in source indices. + const decoded_view = attention.View{ .buffer = decoded }; + const native_window = decoded.slice(u16, 128 * 512 + compressed_rows * 640)[0 .. 128 * 512]; + const native_compressed = decoded.slice(u16, 128 * 512 + compressed_rows * 640)[128 * 512 ..][0 .. compressed_rows * 512]; + const native_index_keys = decoded.slice(u16, 128 * 512 + compressed_rows * 640)[128 * 512 + compressed_rows * 512 ..][0 .. compressed_rows * 128]; + const unpack_cb = model.queue.commandBufferUnretained(); + const unpack_enc = unpack_cb.compute(.serial); + var unpack_encoding = true; + errdefer if (unpack_encoding) unpack_enc.end(); + const ring = try model.cache.ring(@intCast(layer)); + try model.pipelines.attention.cache.encodeUnpack(unpack_enc, ring, decoded_view, .{ .rows = 128, .width = 512, .stride = 512, .packed_stride = 528, .block = 32, .kind = .window_fp8 }); + if (compressed_rows != 0) { + const source = try model.cache.source(@intCast(layer), ratio); + try model.pipelines.attention.cache.encodeUnpack(unpack_enc, source.main, decoded_view.shifted(128 * 512 * 2), .{ .rows = @intCast(compressed_rows), .width = 512, .stride = 512, .packed_stride = 288, .block = 16, .kind = .main_fp4 }); + try model.pipelines.attention.cache.encodeUnpack(unpack_enc, source.index, decoded_view.shifted((128 * 512 + compressed_rows * 512) * 2), .{ .rows = @intCast(compressed_rows), .width = 128, .stride = 128, .packed_stride = 68, .block = 32, .kind = .index_fp4 }); + } + unpack_enc.end(); + unpack_encoding = false; + unpack_cb.commit(); + unpack_cb.wait(); + if (unpack_cb.failure() != null) return error.OperatorGpuFailure; + const reference_window = state.window[layer * 128 * 512 ..][0 .. 128 * 512]; + const reference_compressed = try gpa.alloc(u16, compressed_rows * 640); + defer gpa.free(reference_compressed); + const reference_main = reference_compressed[0 .. compressed_rows * 512]; + const reference_index_keys = reference_compressed[compressed_rows * 512 ..]; + for (0..compressed_rows) |row| { + const source_row = state.sources[state.active_owner * state.capacity * 640 + row * 640 ..][0..640]; + @memcpy(reference_main[row * 512 ..][0..512], source_row[0..512]); + @memcpy(reference_index_keys[row * 128 ..][0..128], source_row[512..640]); + } + const native_selected = diagnosticRow(i32, model.attention_workspace.selection.positions(), 512)[0..topk]; + var reference_selected: [512]i32 = undefined; + for (state.selected[0..topk], 0..) |row, i| reference_selected[i] = @intCast(row); + var native_indices_storage: [640]i32 = undefined; + var reference_indices_storage: [640]i32 = undefined; + const native_indices = attentionHistoryIndices(token, native_selected, window_rows, &native_indices_storage); + const reference_indices = attentionHistoryIndices(token, reference_selected[0..topk], window_rows, &reference_indices_storage); + var sinks: [64]f32 = undefined; + for (&sinks, 0..) |*value, head| value.* = math.value(weights.sink, head); + + var first_stage: ?[]const u8 = null; + inline for (std.enums.values(AttentionStage)) |stage| + if (first_stage == null and !std.mem.eql(u16, capture.row(stage), capture.cpuRow(stage))) { + first_stage = @tagName(stage); + }; + const header = try std.json.Stringify.valueAlloc(gpa, .{ + .mode = "attention-history-sameinput", + .token = token, + .layer = layer, + .history_count = history_count, + .token_identity_source = "caller_supplied_TOKEN_and_trace_POSITION_gpu_filenames_raw_snapshots_have_no_token_header", + .normalized_prefix_replay = .{ .file_pattern = "trace-{position}-gpu.bin", .origin = "retained_native_GPU_normalized_attention_inputs", .first_position = 0, .last_position = token, .first_layer = 0, .last_layer = layer, .order = "position_major_then_layer_ascending_inclusive", .snapshot_count_per_file = model.weights.layers.len * 2, .snapshot_length_bytes = snapshot_bytes, .attention_snapshot_index = "2*layer", .normalized_input_offset_within_snapshot_bytes = 40960, .normalized_input_length_bytes = 10240, .native_cache_reset = true, .native_cache_cursor_matches_each_position = true, .native_cache_append_rows_per_position = 1, .reference_position_passed_explicitly = true, .reference_capacity = state.capacity }, + .identical_retained_normalized_inputs = true, + .independent_reference_history = true, + .native_history_replay_branch_matches_retained_trace = std.mem.eql(u16, capture.row(.wo_b), &retained_branch), + .first_differing_same_history_input_stage = first_stage, + .window_history_equal = std.mem.eql(u16, native_window, reference_window), + .compressed_main_equal = std.mem.eql(u16, native_compressed, reference_main), + .compressed_index_keys_equal = std.mem.eql(u16, native_index_keys, reference_index_keys), + .selection_equal = std.mem.eql(i32, native_selected, reference_selected[0..topk]), + .compression_ratio = ratio, + .compressed_rows = compressed_rows, + .selection_count = topk, + .reference_dot = "independent_EXL3_FP64", + .reference_sparse_dot = "independent_FP64", + .qualification_gate_applied = false, + .qualification_oracle_modified_to_reuse_native_values = false, + .same_native_query_cache_diagnostic = "separate_reference_State_with_captured_native_window_main_selection_and_q_not_used_in_independent_chain", + .official_revision = "2cba9e42aa026125f3ed06c6d98c1db82f7ca027", + .receipt_dtype_endianness = "little_endian", + .receipt_strides = "contiguous_element_strides", + .files = .{ + .stage_chain = .{ .native = "attention-native.bf16", .reference = "attention-reference.bf16", .dtype = "bf16", .shape = .{attention_elements}, .strides = .{1}, .layout = "stages_table_below" }, + .normalized_prefix = .{ .file = "attention-normalized-prefix.bf16", .dtype = "bf16", .shape = .{ history_count, layer + 1, 5120 }, .strides = .{ (layer + 1) * 5120, 5120, 1 } }, + .target_input = .{ .file = "attention-input.bf16", .dtype = "bf16", .shape = .{5120}, .strides = .{1} }, + .retained_branch = .{ .file = "attention-retained-branch.bf16", .dtype = "bf16", .shape = .{5120}, .strides = .{1} }, + .query = .{ .native = "attention-query-native.bf16", .reference = "attention-query-reference.bf16", .dtype = "bf16", .shape = .{ 1, 1, 64, 512 }, .strides = .{ 32768, 32768, 512, 1 } }, + .window = .{ .native = "attention-window-native.bf16", .reference = "attention-window-reference.bf16", .dtype = "bf16", .shape = .{ 1, 128, 512 }, .strides = .{ 65536, 512, 1 }, .layout = "physical_ring_slot_position_modulo_128_includes_current_quantized_KV" }, + .compressed_main = .{ .native = "attention-compressed-native.bf16", .reference = "attention-compressed-reference.bf16", .dtype = "bf16", .shape = .{ 1, compressed_rows, 512 }, .strides = .{ compressed_rows * 512, 512, 1 } }, + .compressed_index_keys = .{ .native = "attention-index-keys-native.bf16", .reference = "attention-index-keys-reference.bf16", .dtype = "bf16", .shape = .{ 1, compressed_rows, 128 }, .strides = .{ compressed_rows * 128, 128, 1 } }, + .selection = .{ .native = "attention-selection-native.i32", .reference = "attention-selection-reference.i32", .dtype = "i32", .shape = .{ 1, topk }, .strides = .{ topk, 1 }, .layout = "actual_compressed_row_ids_compact_export_native_workspace_row_stride_is_512" }, + .source_kv = .{ .native = "attention-source-kv-native.bf16", .reference = "attention-source-kv-reference.bf16", .dtype = "bf16", .shape = .{ 1, window_rows + compressed_rows, 512 }, .strides = .{ (window_rows + compressed_rows) * 512, 512, 1 }, .layout = "source_sparse_attn_KV_window_then_compressed_rows_no_requantization" }, + .source_indices = .{ .native = "attention-source-indices-native.i32", .reference = "attention-source-indices-reference.i32", .dtype = "i32", .shape = .{ 1, 1, native_indices.len }, .strides = .{ native_indices.len, native_indices.len, 1 }, .layout = "source_get_window_topk_idxs_then_actual_selection_plus_window_rows_minus_one_remains_masked" }, + .sinks = .{ .file = "attention-sinks.f32", .dtype = "f32", .shape = .{64}, .strides = .{1} }, + .sparse_output = .{ .native = "attention-sparse-native.bf16", .reference = "attention-sparse-reference.bf16", .same_native_input_reference = "attention-sparse-same-native-input-reference.bf16", .dtype = "bf16", .shape = .{ 1, 1, 64, 512 }, .strides = .{ 32768, 32768, 512, 1 } }, + }, + .source_sparse_call = "sparse_attn(query,source_kv,sinks,source_indices,1/sqrt(512)); output_before_inverse_RoPE", + .source_sparse_replay_is_operator_evidence_only = true, + }, .{}); + defer gpa.free(header); + var report: std.ArrayList(u8) = .empty; + defer report.deinit(gpa); + try report.appendSlice(gpa, header[0 .. header.len - 1]); + try report.appendSlice(gpa, ",\"cases\":[\n"); + var count: usize = 0; + inline for (std.enums.values(AttentionStage)) |stage| + try attentionMetric(u16, gpa, &report, &count, @tagName(stage), "same_retained_normalized_history_input_chain", capture.row(stage), capture.cpuRow(stage)); + try attentionMetric(u16, gpa, &report, &count, "retained_branch", "native_history_replay_vs_retained_native_trace", capture.row(.wo_b), &retained_branch); + try attentionMetric(u16, gpa, &report, &count, "window_history", "same_retained_normalized_history_input_chain", native_window, reference_window); + if (compressed_rows != 0) { + try attentionMetric(u16, gpa, &report, &count, "compressed_kv", "same_retained_normalized_history_input_chain", native_compressed, reference_main); + try attentionMetric(u16, gpa, &report, &count, "compressed_index_keys", "same_retained_normalized_history_input_chain", native_index_keys, reference_index_keys); + } + + // This separate diagnostic State never overwrites independent retained-history reference data. + var native_input_state = try attention_math.State.init(gpa, history_count); + defer native_input_state.deinit(); + for (0..compressed_rows) |row| + @memcpy(native_input_state.sources[row * 640 ..][0..512], native_compressed[row * 512 ..][0..512]); + var helper_indices_storage: [640]i32 = undefined; + const helper_indices = attentionHistoryIndices(token, native_selected, 128, &helper_indices_storage); + var same_input: [32768]u16 = undefined; + for (0..64) |head| + native_input_state.sparseHead(capture.row(.q)[head * 512 ..][0..512], native_window, helper_indices, sinks[head], same_input[head * 512 ..][0..512]); + try attentionMetric(u16, gpa, &report, &count, "sparse_o", "same_native_query_window_compressed_cache_selection_reference_sparse_diagnostic", capture.row(.sparse_o), &same_input); + try attentionWrite(gpa, io, dir, "attention-sparse-same-native-input-reference.bf16", std.mem.sliceAsBytes(&same_input)); + math.rms(capture.row(.qr_projection), weights.q_norm, cfg.rms_norm_eps, same_input[0..1280]); + try attentionMetric(u16, gpa, &report, &count, "qr_norm", "same_native_input_reference_rms_diagnostic", capture.row(.qr_norm), same_input[0..1280]); + math.rms(capture.row(.kv_projection), weights.kv_norm, cfg.rms_norm_eps, same_input[0..512]); + try attentionMetric(u16, gpa, &report, &count, "kv_norm", "same_native_input_reference_rms_diagnostic", capture.row(.kv_norm), same_input[0..512]); + @memcpy(&same_input, capture.row(.q_projection)); + for (0..64) |head| math.rope(same_input[head * 512 ..][0..512], token, ratio != 0, false, cfg); + try attentionMetric(u16, gpa, &report, &count, "q", "same_native_input_reference_rope_diagnostic", capture.row(.q), &same_input); + @memcpy(same_input[0..512], capture.row(.kv_norm)); + math.rope(same_input[0..512], token, ratio != 0, false, cfg); + try attentionMetric(u16, gpa, &report, &count, "kv_rope", "same_native_input_reference_rope_diagnostic", capture.row(.kv_rope), same_input[0..512]); + @memcpy(same_input[0..512], capture.row(.kv_rope)); + math.quantize(same_input[0..512], .window); + try attentionMetric(u16, gpa, &report, &count, "kv_quantized", "same_native_input_reference_quantize_diagnostic", capture.row(.kv_quantized), same_input[0..512]); + const expected = try gpa.alloc(f32, 32768); + defer gpa.free(expected); + try attentionProjection(gpa, model, weights.wq_a, input, "wq_a", &scratch, expected, &report, &count); + try attentionProjection(gpa, model, weights.wq_b, capture.view(.qr_norm), "wq_b", &scratch, expected, &report, &count); + try attentionProjection(gpa, model, weights.wkv, input, "wkv", &scratch, expected, &report, &count); + for (weights.wo_a, 0..) |matrix, group| { + var name: [32]u8 = undefined; + try attentionProjection(gpa, model, matrix, capture.view(.o).shifted(group * 4096 * 2), try std.fmt.bufPrint(&name, "wo_a_group{d}", .{group}), &scratch, expected, &report, &count); + } + try attentionProjection(gpa, model, weights.wo_b, capture.view(.grouped), "wo_b", &scratch, expected, &report, &count); + try report.appendSlice(gpa, "\n],\"stages\":["); + inline for (std.enums.values(AttentionStage), 0..) |stage, i| { + const descriptor = try std.json.Stringify.valueAlloc(gpa, .{ .name = @tagName(stage), .offset_bytes = attentionOffset(stage) * 2, .elements = attention_widths[i] }, .{}); + defer gpa.free(descriptor); + if (i != 0) try report.appendSlice(gpa, ","); + try report.appendSlice(gpa, descriptor); + } + try report.appendSlice(gpa, "]}\n"); + const source_kv = try gpa.alloc(u16, 2 * (window_rows + compressed_rows) * 512); + defer gpa.free(source_kv); + const source_native = source_kv[0 .. (window_rows + compressed_rows) * 512]; + const source_reference = source_kv[(window_rows + compressed_rows) * 512 ..]; + @memcpy(source_native[0 .. window_rows * 512], native_window[0 .. window_rows * 512]); + @memcpy(source_native[window_rows * 512 ..], native_compressed); + @memcpy(source_reference[0 .. window_rows * 512], reference_window[0 .. window_rows * 512]); + @memcpy(source_reference[window_rows * 512 ..], reference_main); + const input_row = normalized_prefix[(history_count * (layer + 1) - 1) * 5120 ..][0..5120]; + inline for (.{ + "attention-history-sameinput.json", "attention-native.bf16", "attention-reference.bf16", + "attention-normalized-prefix.bf16", "attention-input.bf16", "attention-retained-branch.bf16", + "attention-query-native.bf16", "attention-query-reference.bf16", "attention-window-native.bf16", + "attention-window-reference.bf16", "attention-compressed-native.bf16", "attention-compressed-reference.bf16", + "attention-index-keys-native.bf16", "attention-index-keys-reference.bf16", "attention-selection-native.i32", + "attention-selection-reference.i32", "attention-source-kv-native.bf16", "attention-source-kv-reference.bf16", + "attention-source-indices-native.i32", "attention-source-indices-reference.i32", "attention-sinks.f32", + "attention-sparse-native.bf16", "attention-sparse-reference.bf16", + }, .{ + report.items, std.mem.sliceAsBytes(native.slice(u16, attention_elements)), std.mem.sliceAsBytes(reference_rows), + std.mem.sliceAsBytes(normalized_prefix), std.mem.sliceAsBytes(input_row), std.mem.sliceAsBytes(&retained_branch), + std.mem.sliceAsBytes(capture.row(.q)), std.mem.sliceAsBytes(capture.cpuRow(.q)), std.mem.sliceAsBytes(native_window), + std.mem.sliceAsBytes(reference_window), std.mem.sliceAsBytes(native_compressed), std.mem.sliceAsBytes(reference_main), + std.mem.sliceAsBytes(native_index_keys), std.mem.sliceAsBytes(reference_index_keys), std.mem.sliceAsBytes(native_selected), + std.mem.sliceAsBytes(reference_selected[0..topk]), std.mem.sliceAsBytes(source_native), std.mem.sliceAsBytes(source_reference), + std.mem.sliceAsBytes(native_indices), std.mem.sliceAsBytes(reference_indices), std.mem.sliceAsBytes(&sinks), + std.mem.sliceAsBytes(capture.row(.sparse_o)), std.mem.sliceAsBytes(capture.cpuRow(.sparse_o)), + }) |name, data| try attentionWrite(gpa, io, dir, name, data); +} diff --git a/zig/tests/deepseek_v41_reference/operator_moe.zig b/zig/tests/deepseek_v41_reference/operator_moe.zig new file mode 100644 index 0000000000..558234569f --- /dev/null +++ b/zig/tests/deepseek_v41_reference/operator_moe.zig @@ -0,0 +1,409 @@ +//! Retained-input MoE routing and expert isolation. +const std = @import("std"); +const mtl = @import("metal"); +const tf = @import("tensorfold"); +const projection = @import("projection.zig"); +const math = @import("math.zig"); +const attention = tf.deepseek_v41.attention; +const Model = tf.deepseek_v41.Model; +const ex = tf.exl3_projection; +const diagnosticRow = @import("operator_diagnostic.zig").diagnosticRow; + +const moe_reference = @import("reference.zig"); +const MoeRows = struct { + gate: [7][2304]u16 = undefined, + up: [7][2304]u16 = undefined, + activation: [7][2304]u16 = undefined, + down: [7][5120]u16 = undefined, + branch: [5120]u16 = undefined, +}; +const MoeFirst = struct { + source_chain: ?[]const u8 = null, + source_expert_stage: ?[]const u8 = null, + native_input_diagnostic: ?[]const u8 = null, + native_weights_reference_chain_diagnostic: ?[]const u8 = null, + retained_weights_reference_chain_diagnostic: ?[]const u8 = null, + native_down_reference_combine_diagnostic_differs: bool = false, +}; + +fn moeMetric(comptime T: type, gpa: std.mem.Allocator, report: *std.ArrayList(u8), count: *usize, name: []const u8, comparison: []const u8, diagnostic_reuse: bool, actual: []const T, expected: []const T) !bool { + if (actual.len == 0 or actual.len != expected.len) return error.InvalidMoeMetricShape; + var squared: f64 = 0; + var magnitude: f64 = 0; + var max_abs: f64 = 0; + var worst: usize = 0; + var unequal: usize = 0; + var first: ?usize = null; + for (actual, expected, 0..) |a, r, i| { + const x = if (T == u16) math.f(a) else a; + const y = if (T == u16) math.f(r) else r; + if (!std.math.isFinite(x) or !std.math.isFinite(y)) return error.NonfiniteMoeDiagnostic; + const delta = @as(f64, x) - y; + squared += delta * delta; + magnitude += @as(f64, y) * y; + if (@abs(delta) > max_abs) { + max_abs = @abs(delta); + worst = i; + } + const ab = if (T == u16) a else @as(u32, @bitCast(a)); + const rb = if (T == u16) r else @as(u32, @bitCast(r)); + if (ab != rb) { + unequal += 1; + if (first == null) first = i; + } + } + const line = try std.json.Stringify.valueAlloc(gpa, .{ + .name = name, + .comparison = comparison, + .diagnostic_native_value_reuse = diagnostic_reuse, + .qualification_gate_applied = false, + .elements = actual.len, + .output_dtype = if (T == u16) "bf16" else "f32", + .normalized_rms_error = if (magnitude == 0) @sqrt(squared) else @sqrt(squared / magnitude), + .max_absolute_error = max_abs, + .worst_index = worst, + .bit_unequal_count = unequal, + .first_bit_unequal_index = first, + .worst_native = if (T == u16) math.f(actual[worst]) else actual[worst], + .worst_reference = if (T == u16) math.f(expected[worst]) else expected[worst], + }, .{}); + defer gpa.free(line); + if (count.* != 0) try report.appendSlice(gpa, ",\n"); + try report.appendSlice(gpa, line); + count.* += 1; + std.debug.print("{s}\n", .{line}); + return unequal != 0; +} + +fn moeWrite(gpa: std.mem.Allocator, io: std.Io, dir: []const u8, name: []const u8, bytes: []const u8) !void { + const path = try std.fs.path.join(gpa, &.{ dir, name }); + defer gpa.free(path); + try std.Io.Dir.cwd().writeFile(io, .{ .sub_path = path, .data = bytes }); +} + +fn moeWriteRows(gpa: std.mem.Allocator, io: std.Io, dir: []const u8, prefix: []const u8, rows: *const MoeRows) !void { + inline for (.{ "gate", "up", "activation", "down", "branch" }) |stage| { + const name = try std.fmt.allocPrint(gpa, "{s}-{s}.bf16", .{ prefix, stage }); + defer gpa.free(name); + try moeWrite(gpa, io, dir, name, std.mem.asBytes(&@field(rows.*, stage))); + } +} + +fn moeMatrices(model: *Model, layer: usize, expert: ?u32) ![3]ex.Matrix { + if (expert == null) return model.weights.layers[layer].moe.shared; + var matrices: [3]ex.Matrix = undefined; + var name: [128]u8 = undefined; + inline for (.{ "w1", "w3", "w2" }, 0..) |part, i| { + const key = try std.fmt.bufPrint(&name, "layers.{d}.ffn.experts.{d}.{s}", .{ layer, expert.?, part }); + matrices[i] = try tf.deepseek_v41_weights.lookup(&model.checkpoint, key, if (i == 2) 2304 else 5120, if (i == 2) 5120 else 2304); + } + return matrices; +} + +fn moeCombineDown(ids: *const [6]u32, down: *const [7][5120]u16, branch: *[5120]u16) void { + @setFloatMode(.strict); + var sum: [5120]f32 = @splat(0); + // Keep slots in top-six order in receipts, but match the official ascending expert traversal. + for (0..384) |expert| { + for (ids, 0..) |id, slot| { + if (id == expert) + for (&sum, down[slot]) |*s, value| { + s.* += math.f(value); + }; + } + } + for (branch, sum, down[6]) |*v, routed, shared| v.* = math.b(routed + math.f(shared)); +} + +fn moeCombine(ids: *const [6]u32, rows: *MoeRows) void { + moeCombineDown(ids, &rows.down, &rows.branch); +} + +fn moeReferenceRows(model: *Model, layer: usize, input: []const u16, ids: *const [6]u32, routing: *const [6]f32, rows: *MoeRows, scratch: *projection.Scratch, previous: ?*const MoeRows, previous_ids: ?*const [6]u32) !void { + for (0..7) |slot| { + const matrices = try moeMatrices(model, layer, if (slot == 6) null else ids[slot]); + var reuse: ?usize = if (slot == 6 and previous != null) 6 else null; + if (slot != 6 and previous_ids != null) + for (previous_ids.?, 0..) |id, prior| { + if (id == ids[slot]) { + reuse = prior; + break; + } + }; + if (reuse) |prior| { + rows.gate[slot] = previous.?.gate[prior]; + rows.up[slot] = previous.?.up[prior]; + } else { + try projection.apply(.{ .trellis = matrices[0] }, input, &rows.gate[slot], scratch); + try projection.apply(.{ .trellis = matrices[1] }, input, &rows.up[slot], scratch); + } + moe_reference.moeActivation(&rows.gate[slot], &rows.up[slot], if (slot == 6) 1 else routing[slot], model.cfg.text_config, &rows.activation[slot]); + // A shared or identical-weight expert result can be reused only when the BF16 input is identical. + if (reuse != null and std.mem.eql(u16, &rows.activation[slot], &previous.?.activation[reuse.?])) { + rows.down[slot] = previous.?.down[reuse.?]; + } else { + try projection.apply(.{ .trellis = matrices[2] }, &rows.activation[slot], &rows.down[slot], scratch); + } + } + moeCombine(ids, rows); +} + +fn moeEncodeNative(model: *Model, layer: usize, select_routes: bool) !void { + const ws = &model.workspace; + const p = &model.pipelines; + const w = &model.weights.layers[layer].moe; + const cb = model.queue.commandBufferUnretained(); + const enc = cb.compute(.serial); + var encoding = true; + errdefer if (encoding) enc.end(); + for (model.checkpoint.shards.items) |shard| enc.useResource(shard.buffer, mtl.ResourceUsage.read); + for (w.descriptors) |buffer| enc.useResource(buffer, mtl.ResourceUsage.read); + if (select_routes) { + tf.deepseek_v41.ops.encodeDense(enc, &p.ops, ws.view(.normalized), .{ .buffer = w.gate.buffer, .offset = w.gate.offset }, ws.view(.router_logits), .{ .rows = 1, .k = 5120, .n = 384, .x_stride = 5120, .w_stride = 5120, .y_stride = 384, .w_dtype = .f16, .y_dtype = .f32 }); + enc.barrier(); + // Bind the existing production router; no new native interface or diagnostic math kernel. + enc.setPipeline(p.route.select); + inline for (.{ ws.view(.router_logits), attention.View{ .buffer = w.bias.buffer, .offset = w.bias.offset }, ws.view(.route_ids), ws.view(.route_weights) }, 0..) |view, i| + enc.setBuffer(view.buffer, view.offset, i); + const Shape = extern struct { rows: u32, logit_stride: u32, output_stride: u32, temperature: f32, bias_dtype: u32 }; + enc.setValue(Shape{ .rows = 1, .logit_stride = 384, .output_stride = 6, .temperature = 1, .bias_dtype = 2 }, 4); + enc.dispatchGroups(mtl.Size.of(1, 1, 1), mtl.Size.of(128, 1, 1)); + enc.barrier(); + } + var routed_rows = ex.Rows{ .count = 6, .x_stride = 5120, .y_stride = 2304, .routes = .{ .ids = .{ .buffer = ws.view(.route_ids).buffer, .offset = ws.view(.route_ids).offset }, .repeat = 6 } }; + for (0..2) |i| { + const target = ws.view(if (i == 0) .gate else .up); + const input = ws.view(.normalized); + try ex.encodeIndexed(&p.projection, enc, .{ .descriptors = .{ .buffer = w.descriptors[i] }, .count = 384, .k = 5120, .n = 2304 }, .{ .buffer = input.buffer, .offset = input.offset }, .{ .buffer = target.buffer, .offset = target.offset }, ws.projection(), routed_rows); + enc.barrier(); + } + tf.deepseek_v41.ops.encodeSwiGLU(enc, &p.ops, ws.view(.gate), ws.view(.up), ws.view(.route_weights), ws.view(.activation), .{ .rows = 6, .width = 2304, .input_stride = 2304, .output_stride = 2304, .weighted = true }); + enc.barrier(); + routed_rows.x_stride = 2304; + routed_rows.y_stride = 5120; + routed_rows.routes.?.repeat = 1; + const activation = ws.view(.activation); + const down = ws.view(.routed); + try ex.encodeIndexed(&p.projection, enc, .{ .descriptors = .{ .buffer = w.descriptors[2] }, .count = 384, .k = 2304, .n = 5120 }, .{ .buffer = activation.buffer, .offset = activation.offset }, .{ .buffer = down.buffer, .offset = down.offset }, ws.projection(), routed_rows); + enc.barrier(); + for (0..2) |i| { + const target = ws.view(if (i == 0) .shared_gate else .shared_up); + const input = ws.view(.normalized); + ex.useMatrix(enc, w.shared[i]); + try ex.encode(&p.projection, enc, w.shared[i], .{ .buffer = input.buffer, .offset = input.offset }, .{ .buffer = target.buffer, .offset = target.offset }, ws.projection(), .{ .count = 1, .x_stride = 5120, .y_stride = 2304 }); + enc.barrier(); + } + tf.deepseek_v41.ops.encodeSwiGLU(enc, &p.ops, ws.view(.shared_gate), ws.view(.shared_up), ws.view(.route_weights), ws.view(.shared_activation), .{ .rows = 1, .width = 2304, .input_stride = 2304, .output_stride = 2304 }); + enc.barrier(); + const shared_activation = ws.view(.shared_activation); + const shared_down = ws.view(.shared_down); + ex.useMatrix(enc, w.shared[2]); + try ex.encode(&p.projection, enc, w.shared[2], .{ .buffer = shared_activation.buffer, .offset = shared_activation.offset }, .{ .buffer = shared_down.buffer, .offset = shared_down.offset }, ws.projection(), .{ .count = 1, .x_stride = 2304, .y_stride = 5120 }); + enc.barrier(); + tf.deepseek_v41.ops.encodeCombine(enc, &p.ops, ws.view(.routed), ws.view(.shared_down), ws.view(.route_ids), ws.view(.branch), .{ .rows = 1, .width = 5120, .routed_row_stride = 6 * 5120, .slot_stride = 5120, .shared_stride = 5120, .y_stride = 5120 }); + enc.end(); + encoding = false; + cb.commit(); + cb.wait(); + if (cb.failure() != null) return error.OperatorGpuFailure; +} + +fn moeCaptureNative(model: *Model, rows: *MoeRows) void { + const ws = &model.workspace; + inline for (.{ "gate", "up", "activation", "down" }, .{ .gate, .up, .activation, .routed }, .{ .shared_gate, .shared_up, .shared_activation, .shared_down }) |stage, routed, shared| { + const width = if (comptime std.mem.eql(u8, stage, "down")) 5120 else 2304; + const source = diagnosticRow(u16, ws.view(routed), 6 * width); + for (0..6) |slot| @memcpy(&@field(rows.*, stage)[slot], source[slot * width ..][0..width]); + @memcpy(&@field(rows.*, stage)[6], diagnosticRow(u16, ws.view(shared), width)); + } + @memcpy(&rows.branch, diagnosticRow(u16, ws.view(.branch), 5120)); +} + +fn moeCompareRows(gpa: std.mem.Allocator, report: *std.ArrayList(u8), count: *usize, comparison: []const u8, reuse: bool, actual: *const MoeRows, actual_ids: *const [6]u32, expected: *const MoeRows, expected_ids: *const [6]u32, first: *?[]const u8) !void { + // Compare like expert IDs rather than assuming independent top-six orders are identical. + inline for (.{ "gate", "up", "activation", "down" }) |stage| { + var differs = false; + for (0..7) |slot| { + var reference_slot: ?usize = if (slot == 6) 6 else null; + if (slot != 6) + for (expected_ids, 0..) |id, i| { + if (id == actual_ids[slot]) { + reference_slot = i; + break; + } + }; + if (reference_slot == null) continue; + var name: [64]u8 = undefined; + const label = if (slot == 6) try std.fmt.bufPrint(&name, "shared_{s}", .{stage}) else try std.fmt.bufPrint(&name, "expert_{d}_{s}", .{ actual_ids[slot], stage }); + differs = (try moeMetric(u16, gpa, report, count, label, comparison, reuse, &@field(actual.*, stage)[slot], &@field(expected.*, stage)[reference_slot.?])) or differs; + } + if (differs and first.* == null) first.* = stage; + } + if (try moeMetric(u16, gpa, report, count, "combined_branch", comparison, reuse, &actual.branch, &expected.branch)) + if (first.* == null) { + first.* = "combined_branch"; + }; +} + +/// Retained local snapshot isolation. MoE has no history; qualification computes every value independently. +pub fn runMoe(gpa: std.mem.Allocator, io: std.Io, model: *Model, snapshot: []const u8, dir: []const u8, layer: usize) !void { + if (layer >= model.weights.layers.len) return error.InvalidMoeLayer; + const blob = try std.Io.Dir.cwd().readFileAlloc(io, snapshot, gpa, .limited(8 << 20)); + defer gpa.free(blob); + const snapshot_offset = (layer * 2 + 1) * 61488; + if (blob.len != 80 * 61488 or blob.len < snapshot_offset + 61488) return error.InvalidMoeSnapshot; + try model.reset(); + const input = model.workspace.view(.normalized); + @memcpy(input.buffer.contents()[input.offset..][0..10240], blob[snapshot_offset + 40960 ..][0..10240]); + const input_row = diagnosticRow(u16, input, 5120); + var retained_ids: [6]u32 = undefined; + var retained_weights: [6]f32 = undefined; + var retained_branch: [5120]u16 = undefined; + for (&retained_ids, 0..) |*id, i| id.* = std.mem.readInt(u32, blob[snapshot_offset + 61440 + 4 * i ..][0..4], .little); + for (&retained_weights, 0..) |*weight, i| + weight.* = @bitCast(std.mem.readInt(u32, blob[snapshot_offset + 61464 + 4 * i ..][0..4], .little)); + @memcpy(std.mem.asBytes(&retained_branch), blob[snapshot_offset + 51200 ..][0..10240]); + for (retained_ids, retained_weights, 0..) |id, weight, i| { + if (id >= 384 or !std.math.isFinite(weight)) return error.InvalidMoeRetainedRouting; + for (retained_ids[0..i]) |prior| if (id == prior) return error.InvalidMoeRetainedRouting; + } + const native = try gpa.create(MoeRows); + defer gpa.destroy(native); + const source = try gpa.create(MoeRows); + defer gpa.destroy(source); + const native_weights_reference = try gpa.create(MoeRows); + defer gpa.destroy(native_weights_reference); + const retained_reference = try gpa.create(MoeRows); + defer gpa.destroy(retained_reference); + const native_inputs_reference = try gpa.create(MoeRows); + defer gpa.destroy(native_inputs_reference); + const retained_native = try gpa.create(MoeRows); + defer gpa.destroy(retained_native); + var scratch = try projection.Scratch.init(gpa, 5120, 5120); + defer scratch.deinit(); + + try moeEncodeNative(model, layer, true); + moeCaptureNative(model, native); + var native_ids: [6]u32 = undefined; + var native_weights: [6]f32 = undefined; + var native_logits_routing: moe_reference.MoeRouting = .{}; + @memcpy(&native_ids, diagnosticRow(u32, model.workspace.view(.route_ids), 6)); + @memcpy(&native_weights, diagnosticRow(f32, model.workspace.view(.route_weights), 6)); + @memcpy(&native_logits_routing.logits, diagnosticRow(f32, model.workspace.view(.router_logits), 384)); + moe_reference.moeSelect(model.weights.layers[layer].moe, model.cfg.text_config, &native_logits_routing.logits, &native_logits_routing.scores, &native_logits_routing.ids, &native_logits_routing.weights); + var source_routing: moe_reference.MoeRouting = .{}; + math.dense(model.weights.layers[layer].moe.gate, input_row, &source_routing.logits); + moe_reference.moeSelect(model.weights.layers[layer].moe, model.cfg.text_config, &source_routing.logits, &source_routing.scores, &source_routing.ids, &source_routing.weights); + try moeReferenceRows(model, layer, input_row, &source_routing.ids, &source_routing.weights, source, &scratch, null, null); + try moeReferenceRows(model, layer, input_row, &native_ids, &native_weights, native_weights_reference, &scratch, source, &source_routing.ids); + try moeReferenceRows(model, layer, input_row, &retained_ids, &retained_weights, retained_reference, &scratch, native_weights_reference, &native_ids); + for (0..7) |slot| { + native_inputs_reference.gate[slot] = native.gate[slot]; + native_inputs_reference.up[slot] = native.up[slot]; + moe_reference.moeActivation(&native.gate[slot], &native.up[slot], if (slot == 6) 1 else native_weights[slot], model.cfg.text_config, &native_inputs_reference.activation[slot]); + // Deliberately use the captured native activation, not the preceding reference activation. + if (std.mem.eql(u16, &native.activation[slot], &native_weights_reference.activation[slot])) { + native_inputs_reference.down[slot] = native_weights_reference.down[slot]; + } else { + const matrices = try moeMatrices(model, layer, if (slot == 6) null else native_ids[slot]); + try projection.apply(.{ .trellis = matrices[2] }, &native.activation[slot], &native_inputs_reference.down[slot], &scratch); + } + } + moeCombine(&native_ids, native_inputs_reference); + @memcpy(diagnosticRow(u32, model.workspace.view(.route_ids), 6), &retained_ids); + @memcpy(diagnosticRow(f32, model.workspace.view(.route_weights), 6), &retained_weights); + try moeEncodeNative(model, layer, false); + moeCaptureNative(model, retained_native); + + var report: std.ArrayList(u8) = .empty; + defer report.deinit(gpa); + const header = try std.json.Stringify.valueAlloc(gpa, .{ + .mode = "moe-sameinput", + .token = @as(?usize, null), + .layer = layer, + .token_identity_source = "caller_supplied_snapshot_argument_raw_snapshot_has_no_token_header", + .retained_route_origin = "native_GPU_snapshot_command_contract", + .snapshot_count = 80, + .snapshot_length_bytes = 61488, + .snapshot_index = layer * 2 + 1, + .snapshot_stage = "moe", + .input_offset_bytes = snapshot_offset + 40960, + .input_length_bytes = 10240, + .retained_ids_offset_bytes = snapshot_offset + 61440, + .retained_weights_offset_bytes = snapshot_offset + 61464, + .identical_normalized_input = true, + .reference_dot = "independent_EXL3_FP64", + .qualification_gate_applied = false, + .qualification_oracle_modified_to_reuse_native_values = false, + .official_revision = "2cba9e42aa026125f3ed06c6d98c1db82f7ca027", + .source_ids = source_routing.ids, + .source_weights = source_routing.weights, + .native_ids = native_ids, + .native_weights = native_weights, + .retained_ids = retained_ids, + .retained_weights = retained_weights, + .source_ids_equal_native_order = std.mem.eql(u32, &source_routing.ids, &native_ids), + .native_ids_equal_retained_order = std.mem.eql(u32, &native_ids, &retained_ids), + .source_select_on_native_logits_ids = native_logits_routing.ids, + .source_select_on_native_logits_weights = native_logits_routing.weights, + .score_receipt_origin = "source_sqrt_softplus_applied_to_captured_native_logits_not_GPU_score_capture", + .expert_receipt_layout = "slot_major_top6_ids_order_then_shared_slot6", + .expert_sum_order = "ascending_expert_id_FP32_shared_last_final_BF16", + .receipt_prefixes = .{ "moe-native", "moe-source", "moe-native-weights-reference-diagnostic", "moe-native-inputs-reference-diagnostic", "moe-retained-weights-reference-diagnostic", "moe-retained-route-native-diagnostic" }, + .receipt_shapes = .{ .gate = .{ 7, 2304 }, .up = .{ 7, 2304 }, .activation = .{ 7, 2304 }, .down = .{ 7, 5120 }, .branch = .{5120} }, + .native_inputs_reference_contract = "activation:reference_on_native_gate_up_and_weight;down:FP64_on_native_activation;branch:reference_combine_of_these_down_outputs", + }, .{}); + defer gpa.free(header); + try report.appendSlice(gpa, header[0 .. header.len - 1]); + try report.appendSlice(gpa, ",\"cases\":[\n"); + var count: usize = 0; + var first: MoeFirst = .{}; + if (try moeMetric(f32, gpa, &report, &count, "route_logits", "source_chain", false, &native_logits_routing.logits, &source_routing.logits)) first.source_chain = "route_logits"; + if (try moeMetric(f32, gpa, &report, &count, "route_scores_source_transform", "source_score_transform_on_captured_native_logits_diagnostic", true, &native_logits_routing.scores, &source_routing.scores)) + if (first.source_chain == null) { + first.source_chain = "route_scores_source_transform"; + }; + if (!std.mem.eql(u32, &source_routing.ids, &native_ids) and first.source_chain == null) first.source_chain = "route_ids"; + if (std.mem.eql(u32, &source_routing.ids, &native_ids)) { + if (try moeMetric(f32, gpa, &report, &count, "route_weights", "source_chain", false, &native_weights, &source_routing.weights)) + if (first.source_chain == null) { + first.source_chain = "route_weights"; + }; + } + if (std.mem.eql(u32, &native_logits_routing.ids, &native_ids)) + _ = try moeMetric(f32, gpa, &report, &count, "route_weights", "source_select_on_same_native_logits_diagnostic", true, &native_weights, &native_logits_routing.weights); + if (std.mem.eql(u32, &retained_ids, &native_ids)) + _ = try moeMetric(f32, gpa, &report, &count, "route_weights", "retained_native_weights_vs_reexecuted_native", true, &native_weights, &retained_weights); + try moeCompareRows(gpa, &report, &count, "source_chain", false, native, &native_ids, source, &source_routing.ids, &first.source_expert_stage); + if (first.source_chain == null) first.source_chain = first.source_expert_stage; + try moeCompareRows(gpa, &report, &count, "same_native_ids_weights_reference_chain_diagnostic", true, native, &native_ids, native_weights_reference, &native_ids, &first.native_weights_reference_chain_diagnostic); + inline for (.{ "activation", "down" }) |stage| { + var differs = false; + for (0..7) |slot| { + var name: [64]u8 = undefined; + const label = if (slot == 6) try std.fmt.bufPrint(&name, "shared_{s}", .{stage}) else try std.fmt.bufPrint(&name, "expert_{d}_{s}", .{ native_ids[slot], stage }); + differs = (try moeMetric(u16, gpa, &report, &count, label, if (comptime std.mem.eql(u8, stage, "activation")) "same_native_gate_up_weight_reference_activation_diagnostic" else "same_native_activation_FP64_down_diagnostic", true, &@field(native.*, stage)[slot], &@field(native_inputs_reference.*, stage)[slot])) or differs; + } + if (differs and first.native_input_diagnostic == null) first.native_input_diagnostic = stage; + } + _ = try moeMetric(u16, gpa, &report, &count, "combined_branch", "same_native_activation_FP64_down_then_reference_combine_diagnostic", true, &native.branch, &native_inputs_reference.branch); + // Isolate combination arithmetic independently of every projection and route-weight difference. + var native_down_reference_branch: [5120]u16 = undefined; + moeCombineDown(&native_ids, &native.down, &native_down_reference_branch); + first.native_down_reference_combine_diagnostic_differs = + try moeMetric(u16, gpa, &report, &count, "combined_branch", "same_native_down_reference_combine_diagnostic", true, &native.branch, &native_down_reference_branch); + try moeWrite(gpa, io, dir, "moe-native-down-reference-combine-diagnostic.bf16", std.mem.asBytes(&native_down_reference_branch)); + try moeCompareRows(gpa, &report, &count, "same_retained_native_ids_weights_reference_chain_diagnostic", true, retained_native, &retained_ids, retained_reference, &retained_ids, &first.retained_weights_reference_chain_diagnostic); + _ = try moeMetric(u16, gpa, &report, &count, "combined_branch", "retained_native_branch_vs_reexecuted_native_routing", true, &native.branch, &retained_branch); + _ = try moeMetric(u16, gpa, &report, &count, "combined_branch", "retained_native_branch_vs_reexecuted_retained_routes_diagnostic", true, &retained_native.branch, &retained_branch); + const finding = try std.json.Stringify.valueAlloc(gpa, first, .{}); + defer gpa.free(finding); + try report.appendSlice(gpa, "\n],\"first_differing_intermediate\":"); + try report.appendSlice(gpa, finding); + try report.appendSlice(gpa, "}\n"); + try moeWrite(gpa, io, dir, "moe-sameinput.json", report.items); + inline for (.{ "moe-native", "moe-source", "moe-native-weights-reference-diagnostic", "moe-native-inputs-reference-diagnostic", "moe-retained-weights-reference-diagnostic", "moe-retained-route-native-diagnostic" }, .{ native, source, native_weights_reference, native_inputs_reference, retained_reference, retained_native }) |prefix, rows| + try moeWriteRows(gpa, io, dir, prefix, rows); + inline for (.{ "moe-input.bf16", "moe-retained-branch.bf16", "moe-native-logits.f32", "moe-source-logits.f32", "moe-native-logits-source-scores.f32", "moe-source-scores.f32", "moe-native-ids.u32", "moe-source-ids.u32", "moe-retained-ids.u32", "moe-native-weights.f32", "moe-source-weights.f32", "moe-retained-weights.f32", "moe-native-logits-source-select-ids.u32", "moe-native-logits-source-select-weights.f32" }, .{ std.mem.sliceAsBytes(input_row), std.mem.asBytes(&retained_branch), std.mem.asBytes(&native_logits_routing.logits), std.mem.asBytes(&source_routing.logits), std.mem.asBytes(&native_logits_routing.scores), std.mem.asBytes(&source_routing.scores), std.mem.asBytes(&native_ids), std.mem.asBytes(&source_routing.ids), std.mem.asBytes(&retained_ids), std.mem.asBytes(&native_weights), std.mem.asBytes(&source_routing.weights), std.mem.asBytes(&retained_weights), std.mem.asBytes(&native_logits_routing.ids), std.mem.asBytes(&native_logits_routing.weights) }) |name, bytes| + try moeWrite(gpa, io, dir, name, bytes); +} diff --git a/zig/tests/deepseek_v41_reference/operators.zig b/zig/tests/deepseek_v41_reference/operators.zig new file mode 100644 index 0000000000..d7c8cb65de --- /dev/null +++ b/zig/tests/deepseek_v41_reference/operators.zig @@ -0,0 +1,92 @@ +//! Actual checkpoint projections on identical deterministic BF16 rows, against independent FP64 dot products. +const std = @import("std"); +const mtl = @import("metal"); +const tf = @import("tensorfold"); +const projection = @import("projection.zig"); +const math = @import("math.zig"); +const Model = tf.deepseek_v41.Model; +const ex = tf.exl3_projection; +const Case = struct { name: []const u8, matrix: ex.Matrix }; + +pub fn run(gpa: std.mem.Allocator, io: std.Io, model: *Model, dir: []const u8) !void { + const first = &model.weights.layers[0]; + const cases = [_]Case{ + .{ .name = "wq_a", .matrix = first.attn.wq_a }, + .{ .name = "wq_b", .matrix = first.attn.wq_b }, + .{ .name = "wkv", .matrix = first.attn.wkv }, + .{ .name = "wo_a_group0", .matrix = first.attn.wo_a[0] }, + .{ .name = "wo_b", .matrix = first.attn.wo_b }, + .{ .name = "engram_wkv", .matrix = model.weights.layers[1].engram.?.wkv }, + .{ .name = "routed_gate", .matrix = try tf.deepseek_v41_weights.lookup(&model.checkpoint, "layers.0.ffn.experts.0.w1", 5120, 2304) }, + .{ .name = "routed_up", .matrix = try tf.deepseek_v41_weights.lookup(&model.checkpoint, "layers.0.ffn.experts.0.w3", 5120, 2304) }, + .{ .name = "routed_down", .matrix = try tf.deepseek_v41_weights.lookup(&model.checkpoint, "layers.0.ffn.experts.0.w2", 2304, 5120) }, + .{ .name = "head", .matrix = model.weights.head }, + }; + const x = try model.device.buffer(8192 * 2, mtl.ResourceOptions.shared); + defer x.deinit(); + const y = try model.device.buffer(2 * 129280 * 4, mtl.ResourceOptions.shared); + defer y.deinit(); + const scratch = try model.device.buffer(try ex.scratchBytes(8192, 129280, 1), mtl.ResourceOptions.shared); + defer scratch.deinit(); + for (x.slice(u16, 8192), 0..) |*value, i| + value.* = math.b(@as(f32, @floatFromInt(@as(i32, @intCast((i * 17) % 97)) - 48)) / 32); + for ([_]mtl.Buffer{ x, y, scratch }) |buffer| model.residency.add(buffer); + model.residency.commit(); + model.residency.requestResidency(); + defer { + for ([_]mtl.Buffer{ x, y, scratch }) |buffer| model.residency.remove(buffer); + model.residency.commit(); + } + var reference = try projection.Scratch.init(gpa, 8192, 129280); + defer reference.deinit(); + const expected = try gpa.alloc(f32, 129280); + defer gpa.free(expected); + var report: std.ArrayList(u8) = .empty; + defer report.deinit(gpa); + try report.appendSlice(gpa, "{\"input\":\"bf16((17*i%97-48)/32)\",\"reference_dot\":\"FP64\",\"cases\":["); + var all_pass = true; + for (cases, 0..) |case, index| { + const pool = mtl.objc.Pool.push(); + defer pool.pop(); + const matrix = case.matrix; + const cb = model.queue.commandBufferUnretained(); + const enc = cb.compute(.serial); + var encoding = true; + errdefer if (encoding) enc.end(); + ex.useMatrix(enc, matrix); + try ex.encode(&model.pipelines.projection, enc, matrix, .{ .buffer = x }, .{ .buffer = y }, .{ .buffer = scratch }, .{ .count = 1, .x_stride = matrix.k, .y_stride = matrix.n, .output = .f32 }); + enc.end(); + encoding = false; + cb.commit(); + cb.wait(); + if (cb.failure() != null) return error.OperatorGpuFailure; + const actual = y.slice(f32, 129280); + try projection.applyF32(.{ .trellis = matrix }, x.slice(u16, matrix.k), expected[0..matrix.n], &reference); + var max_abs: f64 = 0; + var worst: usize = 0; + var squared: f64 = 0; + var magnitude: f64 = 0; + for (actual[0..matrix.n], expected[0..matrix.n], 0..) |a, b, column| { + if (!std.math.isFinite(a) or !std.math.isFinite(b)) return error.NonfiniteOperatorOutput; + const delta: f64 = @as(f64, a) - b; + if (@abs(delta) > max_abs) { + max_abs = @abs(delta); + worst = column; + } + squared += delta * delta; + magnitude += @as(f64, b) * b; + } + const nrms = if (magnitude == 0) @sqrt(squared) else @sqrt(squared / magnitude); + all_pass = all_pass and nrms <= 1e-4; + const line = try std.fmt.allocPrint(gpa, "{{\"name\":\"{s}\",\"k\":{d},\"n\":{d},\"normalized_rms_error\":{d},\"max_absolute_error\":{d},\"worst_column\":{d},\"worst_gpu\":{d},\"worst_reference\":{d}}}", .{ case.name, matrix.k, matrix.n, nrms, max_abs, worst, actual[worst], expected[worst] }); + defer gpa.free(line); + if (index > 0) try report.appendSlice(gpa, ","); + try report.appendSlice(gpa, line); + std.debug.print("{s}\n", .{line}); + } + try report.appendSlice(gpa, "]}\n"); + const path = try std.fs.path.join(gpa, &.{ dir, "operators.json" }); + defer gpa.free(path); + try std.Io.Dir.cwd().writeFile(io, .{ .sub_path = path, .data = report.items }); + if (!all_pass) return error.OperatorReferenceMismatch; +} diff --git a/zig/tests/deepseek_v41_reference/profile.zig b/zig/tests/deepseek_v41_reference/profile.zig new file mode 100644 index 0000000000..0fb15a8b90 --- /dev/null +++ b/zig/tests/deepseek_v41_reference/profile.zig @@ -0,0 +1,52 @@ +//! Real-checkpoint calibrated GPU stage timings, with profile-on/off logits checked before reporting. +const std = @import("std"); +const tf = @import("tensorfold"); +const counters = tf.deepseek_v41_profiler; +const Model = tf.deepseek_v41.Model; + +pub fn run(gpa: std.mem.Allocator, io: std.Io, model: *Model, ids: []const u32, dir: []const u8) !void { + if (ids.len == 0 or ids.len > model.workspace.plan.rows) return error.InvalidProfileWindow; + const previous_grouping = model.grouped_prefill; + defer model.grouped_prefill = previous_grouping; + model.grouped_prefill = false; + try model.reset(); + const baseline = try model.forward(ids, .all); + const baseline_gpu_seconds = model.last_gpu_seconds; + const expected = try gpa.dupe(f32, baseline); + defer gpa.free(expected); + model.grouped_prefill = true; + try model.reset(); + const candidate = try model.forward(ids, .all); + const candidate_gpu_seconds = model.last_gpu_seconds; + try check(expected, candidate); + var recorder = try counters.Recorder.init(gpa, model.device, .{ .enabled = true, .max_spans = 512 }); + defer recorder.deinit() catch unreachable; + const previous_profile = model.profile; + model.profile = &recorder; + defer model.profile = previous_profile; + try model.reset(); + const actual = try model.forward(ids, .last); + try check(expected[expected.len - 129280 ..], actual); + const totals = recorder.aggregates(); + var sampled_gpu_seconds: f64 = 0; + for (totals) |value| sampled_gpu_seconds += value.gpu_seconds; + var text: std.ArrayList(u8) = .empty; + defer text.deinit(gpa); + try text.print(gpa, "{{\"tokens\":{d},\"comparison_logits\":\"all\",\"candidate_grouping\":true,\"same_logits\":true,\"baseline_command_gpu_seconds\":{d},\"candidate_command_gpu_seconds\":{d},\"profiled_logits\":\"last\",\"sampled_span_gpu_seconds\":{d},\"stages\":[", .{ ids.len, baseline_gpu_seconds, candidate_gpu_seconds, sampled_gpu_seconds }); + for (std.enums.values(counters.Stage), totals, 0..) |stage, value, i| { + try text.print(gpa, "{s}{{\"stage\":\"{s}\",\"calls\":{d},\"gpu_seconds\":{d}}}", .{ if (i == 0) "" else ",", @tagName(stage), value.calls, value.gpu_seconds }); + } + try text.appendSlice(gpa, "]}\n"); + const path = try std.fs.path.join(gpa, &.{ dir, "gpu-profile.json" }); + defer gpa.free(path); + try std.Io.Dir.cwd().writeFile(io, .{ .sub_path = path, .data = text.items }); + std.debug.print("{s}", .{text.items}); +} + +fn check(expected: []const f32, actual: []const f32) !void { + if (expected.len != actual.len) return error.ProfileLogitShapeMismatch; + for (actual, expected) |a, b| { + if (!std.math.isFinite(a) or !std.math.isFinite(b)) return error.NonfiniteProfileLogits; + if (@as(u32, @bitCast(a)) != @as(u32, @bitCast(b))) return error.ProfileChangedLogits; + } +} diff --git a/zig/tests/deepseek_v41_reference/projection.zig b/zig/tests/deepseek_v41_reference/projection.zig new file mode 100644 index 0000000000..03174c9459 --- /dev/null +++ b/zig/tests/deepseek_v41_reference/projection.zig @@ -0,0 +1,311 @@ +//! Independent scalar EXL3 oracle over resident bytes; FP64 dots and FP32 rotation/output boundaries, no GPU work. + +// EXL3 attribution: docs/recipes/exl3.md; pinned checkpoint provenance in THIRD_PARTY_NOTICES.md. + +const std = @import("std"); +const tf = @import("tensorfold"); +const exl3 = tf.exl3_projection; +const weights = tf.deepseek_v41_weights; +const format = exl3.format; +const block_size = format.hadamard_dim; +const inverse: f32 = 0.08838834764831845; +const states_count = 65536; + +/// Reuse bounded vector/codebook storage for heterogeneous matrices; never allocate decoded W[K,N]. +pub const Scratch = struct { + gpa: std.mem.Allocator, + rotated: []f64, + sums: []f64, + codebooks: []f16, + + pub fn init(gpa: std.mem.Allocator, max_k: usize, max_n: usize) !Scratch { + if (max_k == 0 or max_n == 0) return error.InvalidReferenceProjectionCapacity; + const rotated = try gpa.alloc(f64, max_k); + errdefer gpa.free(rotated); + const sums = try gpa.alloc(f64, max_n); + errdefer gpa.free(sums); + const codebooks = try gpa.alloc(f16, 3 * states_count); + errdefer gpa.free(codebooks); + for ([_]format.Codebook{ .inst3, .mcg, .mul1 }, 0..) |book, bi| { + for (0..states_count) |state| { + codebooks[bi * states_count + state] = format.codebookValue(book, @intCast(state)); + } + } + return .{ .gpa = gpa, .rotated = rotated, .sums = sums, .codebooks = codebooks }; + } + + pub fn deinit(s: *Scratch) void { + s.gpa.free(s.rotated); + s.gpa.free(s.sums); + s.gpa.free(s.codebooks); + s.* = undefined; + } +}; + +/// One BF16 input row and BF16 output row; caller must finish GPU writes before borrowing shared CPU bytes. +pub fn apply(matrix: weights.AnyMatrix, x: []const u16, y: []u16, scratch: *Scratch) !void { + switch (matrix) { + .trellis => |m| return applyTrellis(m, x, y, scratch), + .dense => |d| return applyDense(u16, d, x, y, scratch), + } +} + +pub fn applyF32(matrix: weights.AnyMatrix, x: []const u16, y: []f32, scratch: *Scratch) !void { + switch (matrix) { + .trellis => |m| return applyF32Trellis(m, x, y, scratch), + .dense => |d| return applyDense(f32, d, x, y, scratch), + } +} + +/// Kept-dense: quantized rotation and output stages; FP64 dot over the f16-rounded row replaces the tile decode. +fn applyDense(comptime T: type, d: weights.Dense, x: []const u16, y: []T, scratch: *Scratch) !void { + @setFloatMode(.strict); + if (x.len != d.k or y.len != d.n) return error.InvalidReferenceProjectionLength; + if (d.k > scratch.rotated.len or d.n > scratch.sums.len) + return error.ReferenceProjectionScratchTooSmall; + const su = try borrowed(.{ .buffer = d.suh.buffer, .offset = d.suh.offset }, d.k * 2); + const sv = try borrowed(.{ .buffer = d.svh.buffer, .offset = d.svh.offset }, d.n * 2); + const w = try borrowed(.{ .buffer = d.weight.buffer, .offset = d.weight.offset }, d.n * d.k * 2); + const rotated = scratch.rotated[0..d.k]; + const sums = scratch.sums[0..d.n]; + prepare(x, su, .f16, rotated); + for (sums) |*slot| slot.* = 0; + for (0..d.n) |j| { + var acc: f64 = 0; + const wrow = 2 * j * d.k; + for (0..d.k) |k| { + const word = std.mem.readInt(u16, w[wrow + 2 * k ..][0..2], .little); + acc += @as(f64, rotated[k]) * @as(f64, @as(f32, @bitCast(@as(u32, word) << 16))); + } + sums[j] = acc; + } + var base: usize = 0; + while (base < d.n) : (base += block_size) { + var values: [block_size]f32 = undefined; + for (&values, 0..) |*value, i| value.* = @floatCast(sums[base + i]); + hadamard(&values); + for (values, 0..) |value, i| { + const out: f32 = (value * inverse) * half(sv, base + i); + y[base + i] = if (T == u16) bf16(out) else out; + } + } +} + +fn applyTrellis(matrix: exl3.Matrix, x: []const u16, y: []u16, scratch: *Scratch) !void { + try project(matrix, x, y.len, scratch); + try finish(u16, matrix, y, scratch.sums[0..matrix.n]); +} + +/// The same arithmetic with an FP32 output boundary, for compressor projections and full-vocabulary logits. +pub fn applyF32Trellis(matrix: exl3.Matrix, x: []const u16, y: []f32, scratch: *Scratch) !void { + try project(matrix, x, y.len, scratch); + try finish(f32, matrix, y, scratch.sums[0..matrix.n]); +} + +fn borrowed(view: exl3.View, bytes: usize) ![]const u8 { + const len = view.buffer.length(); + if (view.offset % 2 != 0 or view.offset > len or bytes > len - view.offset) + return error.InvalidReferenceProjectionView; + const address = view.buffer.contents(); + if (@intFromPtr(address) == 0) return error.NonCpuAccessibleExl3Buffer; + return address[view.offset..][0..bytes]; +} + +fn scaleBytes(count: usize, kind: exl3.ScaleFormat) !usize { + return std.math.mul(usize, if (kind == .packed_signs) count / 16 else count, 2); +} + +fn half(bytes: []const u8, i: usize) f32 { + const value: f16 = @bitCast(std.mem.readInt(u16, bytes[2 * i ..][0..2], .little)); + return @floatCast(value); +} + +fn scale(bytes: []const u8, i: usize, kind: exl3.ScaleFormat) f32 { + if (kind == .f16) return half(bytes, i); + const word = std.mem.readInt(u16, bytes[2 * (i / 16) ..][0..2], .little); + return if (((word >> @as(u4, @intCast(i % 16))) & 1) != 0) -1.0 else 1.0; +} + +fn bf16(value: f32) u16 { + const bits: u32 = @bitCast(value); + // Preserve a quiet NaN instead of letting rounding turn a tiny NaN payload into infinity. + if ((bits & 0x7fffffff) > 0x7f800000) return @as(u16, @truncate(bits >> 16)) | 0x0040; + return @truncate((bits +% (0x7fff + ((bits >> 16) & 1))) >> 16); +} + +/// Seven ordinary Sylvester butterflies, with explicit FP32 stage boundaries and normalization afterward. +fn hadamard(values: *[block_size]f32) void { + @setFloatMode(.strict); + var stride: usize = 1; + while (stride < block_size) : (stride *= 2) { + var base: usize = 0; + while (base < block_size) : (base += 2 * stride) { + for (0..stride) |j| { + const a = values[base + j]; + const b = values[base + stride + j]; + values[base + j] = a + b; + values[base + stride + j] = a - b; + } + } + } +} + +fn prepare(x: []const u16, su: []const u8, kind: exl3.ScaleFormat, rotated: []f64) void { + @setFloatMode(.strict); + var base: usize = 0; + while (base < x.len) : (base += block_size) { + var values: [block_size]f32 = undefined; + for (&values, 0..) |*value, i| { + const input: f32 = @bitCast(@as(u32, x[base + i]) << 16); + value.* = input * scale(su, base + i, kind); + } + hadamard(&values); + for (values, 0..) |value, i| { + const rounded: f16 = @floatCast(value * inverse); + rotated[base + i] = @floatCast(rounded); + } + } +} + +/// CPU stream reader consumes MSB-first bits from little-endian int16 pairs, not the GPU indexed decoder. +const Stream = struct { + bytes: []const u8, + cursor: usize = 0, + pending: u32 = 0, + available: u6 = 0, + + fn take(s: *Stream, count: u5) u16 { + if (s.available == 0) { + s.pending = std.mem.readInt(u32, s.bytes[s.cursor..][0..4], .little); + s.cursor += 4; + s.available = 32; + } + const first: u5 = @intCast(@min(s.available, count)); + const head: u32 = s.pending >> @as(u5, @intCast(32 - @as(u6, first))); + s.pending <<= first; + s.available -= first; + if (first == count) return @intCast(head); + const rest = count - first; + s.pending = std.mem.readInt(u32, s.bytes[s.cursor..][0..4], .little); + s.cursor += 4; + const tail = s.pending >> @as(u5, @intCast(32 - @as(u6, rest))); + s.pending <<= rest; + s.available = 32 - @as(u6, rest); + return @intCast((head << rest) | tail); + } +}; + +/// Circular initial state uses final 16 stream bits; decode only a sixteen-column accumulator and live stream. +fn accumulateTile(comptime halves: u16, tile: []const u8, table: []const f16, x: []const f64, acc: *[16]f64) void { + @setFloatMode(.strict); + var stream: Stream = .{ .bytes = tile }; + var state: u16 = @truncate(std.mem.readInt(u32, tile[tile.len - 4 ..][0..4], .little)); + var p: usize = 0; + while (p < 256) : (p += 1) { + // Odd half-widths alternate floor(bits),ceil(bits), exactly as format.streamEnds specifies. + const advance: u4 = @intCast(halves / 2 + (if (halves % 2 == 1) p % 2 else 0)); + state = (state << advance) | stream.take(advance); + const lane = p / 8; + const j = p % 8; + const row = 2 * (lane % 4) + (j & 1) + 8 * ((j >> 1) & 1); + const col = lane / 4 + 8 * (j >> 2); + const weight: f64 = @floatCast(table[state]); + acc[col] += x[row] * weight; + } +} + +fn product(comptime halves: u16, matrix: exl3.Matrix, trellis: []const u8, table: []const f16, rotated: []const f64, sums: []f64) !void { + const ks = try matrix.kStride(); + const ns = matrix.nStride(); + const tile_bytes = @as(usize, halves) * 16; + @memset(sums, 0); + for (0..matrix.k / 16) |tk| { + const input = rotated[tk * 16 ..][0..16]; + for (0..matrix.n / 16) |tn| { + const at = tk * ks + tn * ns; + accumulateTile(halves, trellis[at..][0..tile_bytes], table, input, sums[tn * 16 ..][0..16]); + } + } +} + +fn project(matrix: exl3.Matrix, x: []const u16, output_len: usize, scratch: *Scratch) !void { + try matrix.validate(); + if (x.len != matrix.k or output_len != matrix.n) return error.InvalidReferenceProjectionLength; + if (matrix.k > scratch.rotated.len or matrix.n > scratch.sums.len) + return error.ReferenceProjectionScratchTooSmall; + const trellis = try borrowed(matrix.trellis, try matrix.storageBytes()); + const su = try borrowed(matrix.suh, try scaleBytes(matrix.k, matrix.suh_format)); + // Check every borrowed view before doing arithmetic, including the output-only scale and optional bias. + _ = try borrowed(matrix.svh, try scaleBytes(matrix.n, matrix.svh_format)); + if (matrix.bias) |bias| _ = try borrowed(bias, try std.math.mul(usize, matrix.n, 2)); + const rotated = scratch.rotated[0..matrix.k]; + const sums = scratch.sums[0..matrix.n]; + prepare(x, su, matrix.suh_format, rotated); + const book_index: usize = @intCast(@backingInt(matrix.codebook)); + const table = scratch.codebooks[book_index * states_count ..][0..states_count]; + switch (matrix.width.halves) { + inline 2...16 => |halves| try product(halves, matrix, trellis, table, rotated, sums), + else => unreachable, + } +} + +fn finish(comptime T: type, matrix: exl3.Matrix, y: []T, sums: []const f64) !void { + @setFloatMode(.strict); + const sv = try borrowed(matrix.svh, try scaleBytes(matrix.n, matrix.svh_format)); + const bias = if (matrix.bias) |view| try borrowed(view, try std.math.mul(usize, matrix.n, 2)) else null; + var base: usize = 0; + while (base < matrix.n) : (base += block_size) { + var values: [block_size]f32 = undefined; + // One FP64->FP32 boundary replaces GPU FP32 dot-product accumulation, not the output rotation. + for (&values, 0..) |*value, i| value.* = @floatCast(sums[base + i]); + hadamard(&values); + for (values, 0..) |value, i| { + var out: f32 = (value * inverse) * scale(sv, base + i, matrix.svh_format); + if (bias) |bytes| out += half(bytes, base + i); + y[base + i] = if (T == u16) bf16(out) else out; + } + } +} + +test "CPU circular streaming matches scalar format for every supported width and codebook" { + var scratch = try Scratch.init(std.testing.allocator, 128, 128); + defer scratch.deinit(); + var words: [128]i16 = undefined; + for (&words, 0..) |*word, i| word.* = @bitCast(@as(u16, @truncate(i * 40503 + 17329))); + var x: [16]f64 = undefined; + for (&x, 0..) |*value, i| value.* = @as(f64, @floatFromInt(i + 1)) * 0.0625; + var placement: [256]format.Placement = undefined; + format.tilePlacement(&placement); + inline for (2..17) |halves| { + const width: format.Width = .{ .halves = halves }; + const tile = words[0..width.tileWords()]; + var states: [256]u32 = undefined; + format.tileStates(width, tile, &states); + for ([_]format.Codebook{ .inst3, .mcg, .mul1 }, 0..) |book, bi| { + if (width.isHalf() and (book != .mul1 or halves > 7)) continue; + const table = scratch.codebooks[bi * states_count ..][0..states_count]; + var expected: [16]f64 = @splat(0); + for (states, placement) |state, where| { + const weight: f64 = @floatCast(format.codebookValue(book, @intCast(state))); + expected[where.col] += x[where.row] * weight; + } + var actual: [16]f64 = @splat(0); + accumulateTile(halves, std.mem.sliceAsBytes(tile), table, &x, &actual); + try std.testing.expectEqualSlices(f64, &expected, &actual); + } + } +} + +test "FP32 Hadamard then FP16 and BF16 boundaries are deterministic" { + var x: [128]u16 = @splat(0); + x[0] = 0x3f80; + var signs: [16]u8 = @splat(0); + signs[0] = 1; + var rotated: [128]f64 = undefined; + prepare(&x, &signs, .packed_signs, &rotated); + const rounded: f16 = @floatCast(-inverse); + for (rotated) |value| try std.testing.expectEqual(@as(f64, @floatCast(rounded)), value); + try std.testing.expectEqual(@as(u16, 0x3f80), bf16(@bitCast(@as(u32, 0x3f808000)))); + try std.testing.expectEqual(@as(u16, 0x3f82), bf16(@bitCast(@as(u32, 0x3f818000)))); + try std.testing.expectEqual(@as(u16, 0x7fc0), bf16(@bitCast(@as(u32, 0x7f800001)))); +} diff --git a/zig/tests/deepseek_v41_reference/qualify.zig b/zig/tests/deepseek_v41_reference/qualify.zig new file mode 100644 index 0000000000..e5190ee546 --- /dev/null +++ b/zig/tests/deepseek_v41_reference/qualify.zig @@ -0,0 +1,97 @@ +//! Actual checkpoint teacher comparison: independent CPU arithmetic versus the resident GPU decode path. +const std = @import("std"); +const mtl = @import("metal"); +const Model = @import("tensorfold").deepseek_v41.Model; +const Reference = @import("reference.zig").Reference; +const nrms_limit: f64 = 0.01; + +pub const Result = struct { + tokens: usize, + max_absolute_error: f64, + rms_error: f64, + normalized_rms_error: f64, + greedy_disagreements: usize, + gpu_seconds: f64, + cpu_seconds: f64, + normalized_rms_limit: f64 = nrms_limit, + numeric_gate_passed: bool = false, + greedy_gate_passed: bool = false, +}; + +fn maximum(row: []const f32) !u32 { + var id: u32 = 0; + var best = -std.math.inf(f32); + for (row, 0..) |v, i| { + if (!std.math.isFinite(v)) return error.NonfiniteTeacherLogits; + if (v > best) { + best = v; + id = @intCast(i); + } + } + return id; +} + +pub fn run(gpa: std.mem.Allocator, io: std.Io, model: *Model, ids: []const u32, token_map: []const u8, dir: []const u8) !Result { + if (ids.len == 0 or ids.len > 16) return error.InvalidOracleWindow; + var reference = try Reference.init(gpa, model.cfg.text_config, &model.weights, &model.checkpoint, token_map, @intCast(ids.len)); + defer reference.deinit(); + const cpu = try gpa.alloc(f32, ids.len * 129280); + defer gpa.free(cpu); + const gpu = try gpa.alloc(f32, cpu.len); + defer gpa.free(gpu); + try model.reset(); + var result = Result{ .tokens = ids.len, .max_absolute_error = 0, .rms_error = 0, .normalized_rms_error = 0, .greedy_disagreements = 0, .gpu_seconds = 0, .cpu_seconds = 0 }; + var squared_error: f64 = 0; + var squared_reference: f64 = 0; + for (ids, 0..) |id, i| { + const actual = try model.forward(&.{id}, .all); + result.gpu_seconds += model.last_gpu_seconds; + @memcpy(gpu[i * 129280 ..][0..129280], actual); + const start = mtl.clock.seconds(); + const expected = try reference.step(id); + result.cpu_seconds += mtl.clock.seconds() - start; + @memcpy(cpu[i * 129280 ..][0..129280], expected); + if (try maximum(actual) != try maximum(expected)) result.greedy_disagreements += 1; + for (actual, expected) |a, b| { + if (!std.math.isFinite(a) or !std.math.isFinite(b)) return error.NonfiniteTeacherLogits; + const error_: f64 = @as(f64, a) - b; + result.max_absolute_error = @max(result.max_absolute_error, @abs(error_)); + squared_error += error_ * error_; + squared_reference += @as(f64, b) * b; + } + std.debug.print("oracle teacher {d}/{d}: GPU token={d}, CPU token={d}\n", .{ i + 1, ids.len, try maximum(actual), try maximum(expected) }); + } + result.rms_error = @sqrt(squared_error / @as(f64, @floatFromInt(cpu.len))); + result.normalized_rms_error = if (squared_reference == 0) result.rms_error else @sqrt(squared_error / squared_reference); + result.numeric_gate_passed = result.normalized_rms_error <= result.normalized_rms_limit; + result.greedy_gate_passed = result.greedy_disagreements == 0; + const cp = try std.fs.path.join(gpa, &.{ dir, "oracle-logits.f32" }); + defer gpa.free(cp); + const gp = try std.fs.path.join(gpa, &.{ dir, "gpu-logits.f32" }); + defer gpa.free(gp); + const report = try std.fs.path.join(gpa, &.{ dir, "oracle.json" }); + defer gpa.free(report); + try std.Io.Dir.cwd().writeFile(io, .{ .sub_path = cp, .data = std.mem.sliceAsBytes(cpu) }); + try std.Io.Dir.cwd().writeFile(io, .{ .sub_path = gp, .data = std.mem.sliceAsBytes(gpu) }); + const json = try std.json.Stringify.valueAlloc(gpa, result, .{}); + defer gpa.free(json); + try std.Io.Dir.cwd().writeFile(io, .{ .sub_path = report, .data = json }); + std.debug.print("{s}\n", .{json}); + try enforceGate(result.normalized_rms_error, result.greedy_disagreements); + return result; +} + +fn enforceGate(normalized_rms_error: f64, greedy_disagreements: usize) !void { + if (!std.math.isFinite(normalized_rms_error)) return error.NonfiniteTeacherLogits; + if (normalized_rms_error > nrms_limit) return error.TeacherReferenceMismatch; + if (greedy_disagreements != 0) return error.TeacherGreedyMismatch; +} + +test "teacher numeric gate remains independent of greedy agreement" { + try std.testing.expectError(error.TeacherReferenceMismatch, enforceGate(0.04, 0)); + try std.testing.expectError(error.TeacherReferenceMismatch, enforceGate(0.010000001, 1)); + try std.testing.expectError(error.TeacherGreedyMismatch, enforceGate(0.01, 1)); + try enforceGate(0.01, 0); + try std.testing.expectError(error.NonfiniteTeacherLogits, enforceGate(std.math.nan(f64), 0)); + try std.testing.expectError(error.NonfiniteTeacherLogits, enforceGate(std.math.inf(f64), 0)); +} diff --git a/zig/tests/deepseek_v41_reference/reference.zig b/zig/tests/deepseek_v41_reference/reference.zig new file mode 100644 index 0000000000..98069068f7 --- /dev/null +++ b/zig/tests/deepseek_v41_reference/reference.zig @@ -0,0 +1,176 @@ +//! Independent wide-sum qualification with explicit FP32/BF16 boundaries; not GPU self-reference or CUDA emulation. + +// Equations: pinned DeepSeek AI inference/{model,engram,kernel}.py; provenance in THIRD_PARTY_NOTICES.md. +const std = @import("std"); +const tf = @import("tensorfold"); +const weights = tf.deepseek_v41_weights; +const config = tf.deepseek_v41_config; +const cp = tf.checkpoint_metal; +const exl3 = tf.exl3_projection; +const projection = @import("projection.zig"); +const math = @import("math.zig"); +const attention = @import("attention_math.zig"); +const engram = @import("engram_math.zig"); +const Stage = tf.deepseek_v41_profiler.Stage; + +/// Local routing isolation also uses these source equations; no native values enter qualification. +pub const MoeRouting = struct { + logits: [384]f32 = undefined, + scores: [384]f32 = undefined, + ids: [6]u32 = undefined, + weights: [6]f32 = undefined, +}; + +pub fn moeSelect(moe_weights: weights.Moe, c: config.Text, logits: *const [384]f32, scores: *[384]f32, ids: *[6]u32, routing_weights: *[6]f32) void { + @setFloatMode(.strict); + for (logits, scores) |z, *score| { + const softplus = if (z > 20) z else std.math.log1p(@exp(z)); + score.* = @sqrt(softplus); + } + var used: [384]bool = @splat(false); + for (0..6) |pick| { + var best: usize = 0; + var high: f32 = -std.math.inf(f32); + for (0..384) |expert| { + const biased = scores[expert] + math.value(moe_weights.bias, expert); + if (!used[expert] and biased > high) { + best = expert; + high = biased; + } + } + ids[pick] = @intCast(best); + routing_weights[pick] = scores[best]; + used[best] = true; + } + var normalization: f64 = 0; + for (routing_weights) |v| normalization += v; + const denominator = @as(f32, @floatCast(normalization)) + 1e-20; + for (routing_weights) |*v| v.* = (v.* / denominator) * c.routed_scaling_factor; +} + +pub fn moeActivation(gate: []const u16, up: []const u16, route: f32, c: config.Text, activation: []u16) void { + @setFloatMode(.strict); + for (activation, gate, up) |*v, g_value, u_value| { + const g = @min(math.f(g_value), c.swiglu_limit); + const u = @max(-c.swiglu_limit, @min(math.f(u_value), c.swiglu_limit)); + v.* = math.b(route * ((g / (1 + @exp(-g))) * u)); + } +} + +pub const Reference = struct { + gpa: std.mem.Allocator, + c: config.Text, + w: *const weights.Model, + checkpoint: *const cp.Checkpoint, + capacity: u32, + position: u32 = 0, + projection_scratch: projection.Scratch, + attention_state: attention.State, + engram_state: engram.State, + logits: []f32, + h: [20480]u16 = undefined, + input: [5120]u16 = undefined, + output: [5120]u16 = undefined, + gate: [2304]u16 = undefined, + up: [2304]u16 = undefined, + activation: [2304]u16 = undefined, + expert_output: [5120]u16 = undefined, + moe_sum: [5120]f32 = undefined, + route_logits: [384]f32 = undefined, + route_scores: [384]f32 = undefined, + last_routes: [6]u32 = undefined, + last_routing: [6]f32 = undefined, + observer: ?Observer = null, + pub const Observer = struct { + ctx: *anyopaque, + read: *const fn (*anyopaque, usize, Stage, *const Reference) void, + }; + + /// Borrowed model/checkpoint/config/map must outlive this instance; capacity is the teacher sequence length. + pub fn init(gpa: std.mem.Allocator, c: config.Text, w: *const weights.Model, checkpoint: *const cp.Checkpoint, token_map: []const u8, capacity: u32) !Reference { + if (capacity == 0 or capacity > c.max_position_embeddings or capacity > attention.max_capacity) + return error.InvalidReferenceCapacity; + if (c.hidden_size != 5120 or c.num_hidden_layers != 40 or c.vocab_size != 129280 or + c.num_experts_per_tok != 6 or c.n_routed_experts != 384 or c.hc_mult != 4) + return error.UnsupportedReferenceArchitecture; + const engram_state = try engram.State.init(token_map); + var projection_scratch = try projection.Scratch.init(gpa, 8192, 129280); + errdefer projection_scratch.deinit(); + var attention_state = try attention.State.init(gpa, capacity); + errdefer attention_state.deinit(); + const logits = try gpa.alloc(f32, 129280); + return .{ .gpa = gpa, .c = c, .w = w, .checkpoint = checkpoint, .capacity = capacity, .projection_scratch = projection_scratch, .attention_state = attention_state, .engram_state = engram_state, .logits = logits }; + } + pub fn deinit(self: *Reference) void { + self.projection_scratch.deinit(); + self.attention_state.deinit(); + self.gpa.free(self.logits); + self.* = undefined; + } + /// Consume exactly one teacher token and return all actual checkpoint logits, borrowed until the next step. + pub fn step(self: *Reference, id: u32) ![]const f32 { + if (self.position >= self.capacity) return error.ContextFull; + const compressed = try self.engram_state.compressed(id); + for (0..5120) |d| { + const v = math.b(math.value(self.w.embed, @as(usize, id) * 5120 + d)); + for (0..4) |copy| self.h[copy * 5120 + d] = v; + } + var pre = [4]f32{ 1, 0, 0, 0 }; + for (&self.w.layers, 0..) |*layer, layer_id| { + if (layer.engram) |e| try self.engram_state.apply(e, if (layer_id == 1) 0 else 1, compressed, &self.h, self.c, &self.projection_scratch); + const attn_mix = math.mixes(&self.h, layer.hc_attn, self.c); + math.collapse(&self.h, pre, &self.input); + math.rms(&self.input, layer.attn_norm, self.c.rms_norm_eps, &self.input); + try self.attention_state.apply(layer.attn, layer_id, &self.input, self.position, self.c, &self.output, &self.projection_scratch); + math.expand(&self.h, &self.output, attn_mix); + if (self.observer) |observer| observer.read(observer.ctx, layer_id, .attention, self); + const ffn_mix = math.mixes(&self.h, layer.hc_ffn, self.c); + math.collapse(&self.h, attn_mix.pre, &self.input); + math.rms(&self.input, layer.ffn_norm, self.c.rms_norm_eps, &self.input); + try self.moe(layer.moe, layer_id); + math.expand(&self.h, &self.output, ffn_mix); + if (self.observer) |observer| observer.read(observer.ctx, layer_id, .moe, self); + pre = ffn_mix.pre; + } + math.collapse(&self.h, pre, &self.input); + math.rms(&self.input, self.w.norm, self.c.rms_norm_eps, &self.input); + try projection.applyF32(.{ .trellis = self.w.head }, &self.input, self.logits, &self.projection_scratch); + for (self.logits) |v| if (!std.math.isFinite(v)) return error.NonFiniteReferenceLogits; + self.engram_state.advance(compressed); + self.position += 1; + return self.logits; + } + fn moe(self: *Reference, moe_weights: weights.Moe, layer: usize) !void { + @setFloatMode(.strict); + math.dense(moe_weights.gate, &self.input, &self.route_logits); + moeSelect(moe_weights, self.c, &self.route_logits, &self.route_scores, &self.last_routes, &self.last_routing); + @memset(&self.moe_sum, 0); + // Official MoE visits expert ids in ascending order, accumulates FP32, then adds shared expert last. + for (0..384) |expert| { + var route: ?f32 = null; + for (self.last_routes, self.last_routing) |selected, weight| + if (selected == expert) { + route = weight; + }; + const expert_route = route orelse continue; + var matrices: [3]exl3.Matrix = undefined; + var name: [128]u8 = undefined; + inline for (.{ "w1", "w3", "w2" }, 0..) |part, i| { + const prefix = try std.fmt.bufPrint(&name, "layers.{d}.ffn.experts.{d}.{s}", .{ layer, expert, part }); + matrices[i] = try weights.lookup(self.checkpoint, prefix, if (i == 2) 2304 else 5120, if (i == 2) 5120 else 2304); + } + try self.applyExpert(matrices, expert_route); + for (&self.moe_sum, self.expert_output) |*sum, v| sum.* += math.f(v); + } + try self.applyExpert(moe_weights.shared, 1); + for (&self.output, self.moe_sum, self.expert_output) |*v, routed, shared| + v.* = math.b(routed + math.f(shared)); + } + fn applyExpert(self: *Reference, matrices: [3]exl3.Matrix, route: f32) !void { + @setFloatMode(.strict); + try projection.apply(.{ .trellis = matrices[0] }, &self.input, &self.gate, &self.projection_scratch); + try projection.apply(.{ .trellis = matrices[1] }, &self.input, &self.up, &self.projection_scratch); + moeActivation(&self.gate, &self.up, route, self.c, &self.activation); + try projection.apply(.{ .trellis = matrices[2] }, &self.activation, &self.expert_output, &self.projection_scratch); + } +}; diff --git a/zig/tests/deepseek_v41_reference/rope_frequencies.json b/zig/tests/deepseek_v41_reference/rope_frequencies.json new file mode 100644 index 0000000000..2ffe1d1556 --- /dev/null +++ b/zig/tests/deepseek_v41_reference/rope_frequencies.json @@ -0,0 +1,14 @@ +{ + "reference": "deepseek-ai/DeepSeek-V4.1-Flash", + "revision": "2cba9e42aa026125f3ed06c6d98c1db82f7ca027", + "source_sha256": "4e9ae23620edc8028ccc5d5fef552ab7fdc7dcd6f79608754fe9f67644056f65", + "torch_version": "2.14.1", + "extraction": "precompute_freqs_cis FP32 frequency vector before outer/polar; CPU", + "factor": 16, + "beta_fast": 32, + "beta_slow": 1, + "vectors": [ + {"theta": 10000, "original": 0, "bits": [1065353216,1061157137,1058010522,1054337179,1050798235,1047712803,1043732615,1040747895,1036831949,1033475085,1030116802,1026341397,1023510243,1019364175,1016180025,1012562930,1008981770,1005959600,1001931932,998911607,995049016,991652109,988353832,984533390,981668463,977573004,974350870,970790693,967166816,964208661,960132947,957076594]}, + {"theta": 160000, "original": 65536, "bits": [1065353216,1060112954,1056054303,1051098369,1046804782,1042117749,1037601972,1033169251,1028443341,1024251131,1019326489,1015361742,1010249151,1006366088,1001209182,997081655,991197921,985076960,979287478,973418702,966505391,959469944,952012877,943627103,933484300,917783504,913828774,908753896,904558591,899759068,895336240,890797133]} + ] +} diff --git a/zig/tests/deepseek_v41_reference/trace.zig b/zig/tests/deepseek_v41_reference/trace.zig new file mode 100644 index 0000000000..79cdef0fa4 --- /dev/null +++ b/zig/tests/deepseek_v41_reference/trace.zig @@ -0,0 +1,123 @@ +//! Bounded investigation snapshots; file I/O and independent CPU work are not performance measurements. +const std = @import("std"); +const mtl = @import("metal"); +const tf = @import("tensorfold"); +const Model = tf.deepseek_v41.Model; +const Reference = @import("reference.zig").Reference; +const Stage = tf.deepseek_v41_profiler.Stage; +const widths = [_]usize{ 20480 * 2, 5120 * 2, 5120 * 2, 6 * 4, 6 * 4 }; +const stride = 61488; +const bytes = stride * 80; + +const Capture = struct { + buffer: mtl.Buffer, + pipeline: mtl.Pipeline, + cpu: []u8, + + fn gpu(ctx: *anyopaque, enc: mtl.ComputeEncoder, layer: u32, stage: Stage, model: *const Model) void { + const self: *Capture = @ptrCast(@alignCast(ctx)); + var destination: usize = (@as(usize, layer) * 2 + @intFromBool(stage == .moe)) * stride; + const ws = &model.workspace; + inline for (.{ ws.view(.stream), ws.view(.normalized), ws.view(.branch), ws.view(.route_ids), ws.view(.route_weights) }, widths, 0..) |source, count, field| { + if (stage == .moe or field < 3) { + enc.setPipeline(self.pipeline); + enc.setBuffer(source.buffer, source.offset, 0); + enc.setBuffer(self.buffer, destination, 1); + enc.setValue(@as(u32, @intCast(count / 4)), 2); + enc.dispatchThreads(.{ .width = count / 4 }, .{ .width = 256 }); + destination += count; + } + } + enc.barrier(); + } + fn reference(ctx: *anyopaque, layer: usize, stage: Stage, ref: *const Reference) void { + const self: *Capture = @ptrCast(@alignCast(ctx)); + const start = (layer * 2 + @intFromBool(stage == .moe)) * stride; + var destination: []u8 = self.cpu[start..][0..stride]; + inline for (.{ std.mem.sliceAsBytes(&ref.h), std.mem.sliceAsBytes(&ref.input), std.mem.sliceAsBytes(&ref.output), std.mem.sliceAsBytes(&ref.last_routes), std.mem.sliceAsBytes(&ref.last_routing) }, 0..) |source, field| { + if (stage == .moe or field < 3) { + @memcpy(destination[0..source.len], source); + destination = destination[source.len..]; + } + } + } +}; +fn normalizedError(a: []const u8, b: []const u8) !f64 { + var squared: f64 = 0; + var denominator: f64 = 0; + var i: usize = 0; + while (i < a.len) : (i += 2) { + const x: f32 = @bitCast(@as(u32, std.mem.readInt(u16, a[i..][0..2], .little)) << 16); + const y: f32 = @bitCast(@as(u32, std.mem.readInt(u16, b[i..][0..2], .little)) << 16); + if (!std.math.isFinite(x) or !std.math.isFinite(y)) return error.NonfiniteTraceValues; + squared += (@as(f64, x) - y) * (@as(f64, x) - y); + denominator += @as(f64, y) * y; + } + return if (denominator == 0) @sqrt(squared) else @sqrt(squared / denominator); +} + +pub fn run(gpa: std.mem.Allocator, io: std.Io, model: *Model, ids: []const u32, token_map: []const u8, dir: []const u8) !void { + if (ids.len == 0 or ids.len > 16) return error.InvalidOracleWindow; + const lib = try mtl.Library.fromSource(model.device, "#include \nusing namespace metal;\nkernel void trace_copy(const device uint* x [[buffer(0)]], device uint* y [[buffer(1)]], constant uint& n [[buffer(2)]], uint i [[thread_position_in_grid]]) { if(i 0.01 or !routes_match) std.debug.print("trace token={d} layer={d} stage={s} stream={d} input={d} branch={d} routes_match={}\n", .{ token, point / 2, if (point % 2 == 0) "attention" else "moe", stream_error, input_error, branch_error, routes_match }); + } + inline for (.{ "gpu", "cpu" }, .{ gpu, cpu }) |name, data| { + const path = try std.fmt.allocPrint(gpa, "{s}/trace-{d}-{s}.bin", .{ dir, token, name }); + defer gpa.free(path); + try std.Io.Dir.cwd().writeFile(io, .{ .sub_path = path, .data = data }); + } + std.debug.print("trace captured token {d}/{d}, same_logits=true\n", .{ token + 1, ids.len }); + } + try report.appendSlice(gpa, "\n]\n"); + const path = try std.fs.path.join(gpa, &.{ dir, "layer-trace.json" }); + defer gpa.free(path); + try std.Io.Dir.cwd().writeFile(io, .{ .sub_path = path, .data = report.items }); +}