summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoriximeow <me@iximeow.net>2019-01-16 03:49:00 -0800
committeriximeow <me@iximeow.net>2020-01-12 17:19:46 -0800
commit45ef64e866df4907e637373f03a0a7293a44987b (patch)
treeb20cad1831a7f3fd78aad4c9aac0af6d65434bef
initial commit
-rw-r--r--Cargo.toml17
-rw-r--r--src/consts.rs4155
-rw-r--r--src/display.rs166
-rw-r--r--src/lib.rs467
4 files changed, 4805 insertions, 0 deletions
diff --git a/Cargo.toml b/Cargo.toml
new file mode 100644
index 0000000..c70191d
--- /dev/null
+++ b/Cargo.toml
@@ -0,0 +1,17 @@
+[package]
+
+name = "yaxpeax-pic18"
+version = "0.0.1"
+authors = [ "iximeow <me@iximeow.net>" ]
+license = "0BSD"
+repository = ""
+description = """
+A rust pic18 decoder
+"""
+
+[dependencies]
+yaxpeax-arch = { path = "../../yaxpeax-arch" }
+
+[[test]]
+name = "test"
+path = "test/test.rs"
diff --git a/src/consts.rs b/src/consts.rs
new file mode 100644
index 0000000..a35806d
--- /dev/null
+++ b/src/consts.rs
@@ -0,0 +1,4155 @@
+#[allow(non_snake_case, non_camel_case_types, unused)]
+pub mod SFRS {
+ pub const EECON2: u16 = 0xfa7 - 0xf60;
+ pub const EECON1: u16 = 0xfa6 - 0xf60;
+/*
+ *
+ * THE UNIMPLEMENTED VOID
+ *
+ */
+ pub const T0CON: u16 = 0xfd5 - 0xf60;
+ pub const TMR0L: u16 = 0xfd6 - 0xf60;
+ pub const TMR0H: u16 = 0xfd7 - 0xf60;
+ pub const STATUS: u16 = 0xfd8 - 0xf60;
+ pub const FSR2L: u16 = 0xfd9 - 0xf60;
+ pub const FSR2H: u16 = 0xfda - 0xf60;
+ pub const PLUSW2: u16 = 0xfdb - 0xf60;
+ pub const PREINC2: u16 = 0xfdc - 0xf60;
+ pub const POSTDEC2: u16 = 0xfdd - 0xf60;
+ pub const POSTINC2: u16 = 0xfde - 0xf60;
+ pub const INDF2: u16 = 0xfdf - 0xf60;
+ pub const BSR: u16 = 0xfe0 - 0xf60;
+ pub const FSR1L: u16 = 0xfe1 - 0xf60;
+ pub const FSR1H: u16 = 0xfe2 - 0xf60;
+ pub const PLUSW1: u16 = 0xfe3 - 0xf60;
+ pub const PREINC1: u16 = 0xfe4 - 0xf60;
+ pub const POSTDEC1: u16 = 0xfe5 - 0xf60;
+ pub const POSTINC1: u16 = 0xfe6 - 0xf60;
+ pub const INDF1: u16 = 0xfe7 - 0xf60;
+ pub const WREG: u16 = 0xfe8 - 0xf60;
+ pub const FSR0L: u16 = 0xfe9 - 0xf60;
+ pub const FSR0H: u16 = 0xfea - 0xf60;
+ pub const PLUSW0: u16 = 0xfeb - 0xf60;
+ pub const PREINC0: u16 = 0xfec - 0xf60;
+ pub const POSTDEC0: u16 = 0xfed - 0xf60;
+ pub const POSTINC0: u16 = 0xfee - 0xf60;
+ pub const INDF0: u16 = 0xfef - 0xf60;
+ pub const INTCON3: u16 = 0xff0 - 0xf60;
+ pub const INTCON2: u16 = 0xff1 - 0xf60;
+ pub const INTCON: u16 = 0xff2 - 0xf60;
+ pub const PRODL: u16 = 0xff3 - 0xf60;
+ pub const PRODH: u16 = 0xff4 - 0xf60;
+ pub const TABLAT: u16 = 0xff5 - 0xf60;
+ pub const TBLPTRL: u16 = 0xff6 - 0xf60;
+ pub const TBLPTRH: u16 = 0xff7 - 0xf60;
+ pub const TBLPTRU: u16 = 0xff8 - 0xf60;
+ pub const PCL: u16 = 0xff9 - 0xf60;
+ pub const PCLATH: u16 = 0xffa - 0xf60;
+ pub const PCLATU: u16 = 0xffb - 0xf60;
+ pub const STKPTR: u16 = 0xffc - 0xf60;
+ pub const TOSL: u16 = 0xffd - 0xf60;
+ pub const TOSH: u16 = 0xffe - 0xf60;
+ pub const TOSU: u16 = 0xfff - 0xf60;
+}
+
+pub fn named_file(file: u16) -> &'static str {
+ match file {
+ 0x0 => "0x0",
+ 0x1 => "0x1",
+ 0x2 => "0x2",
+ 0x3 => "0x3",
+ 0x4 => "0x4",
+ 0x5 => "0x5",
+ 0x6 => "0x6",
+ 0x7 => "0x7",
+ 0x8 => "0x8",
+ 0x9 => "0x9",
+ 0xa => "0xa",
+ 0xb => "0xb",
+ 0xc => "0xc",
+ 0xd => "0xd",
+ 0xe => "0xe",
+ 0xf => "0xf",
+ 0x10 => "0x10",
+ 0x11 => "0x11",
+ 0x12 => "0x12",
+ 0x13 => "0x13",
+ 0x14 => "0x14",
+ 0x15 => "0x15",
+ 0x16 => "0x16",
+ 0x17 => "0x17",
+ 0x18 => "0x18",
+ 0x19 => "0x19",
+ 0x1a => "0x1a",
+ 0x1b => "0x1b",
+ 0x1c => "0x1c",
+ 0x1d => "0x1d",
+ 0x1e => "0x1e",
+ 0x1f => "0x1f",
+ 0x20 => "0x20",
+ 0x21 => "0x21",
+ 0x22 => "0x22",
+ 0x23 => "0x23",
+ 0x24 => "0x24",
+ 0x25 => "0x25",
+ 0x26 => "0x26",
+ 0x27 => "0x27",
+ 0x28 => "0x28",
+ 0x29 => "0x29",
+ 0x2a => "0x2a",
+ 0x2b => "0x2b",
+ 0x2c => "0x2c",
+ 0x2d => "0x2d",
+ 0x2e => "0x2e",
+ 0x2f => "0x2f",
+ 0x30 => "0x30",
+ 0x31 => "0x31",
+ 0x32 => "0x32",
+ 0x33 => "0x33",
+ 0x34 => "0x34",
+ 0x35 => "0x35",
+ 0x36 => "0x36",
+ 0x37 => "0x37",
+ 0x38 => "0x38",
+ 0x39 => "0x39",
+ 0x3a => "0x3a",
+ 0x3b => "0x3b",
+ 0x3c => "0x3c",
+ 0x3d => "0x3d",
+ 0x3e => "0x3e",
+ 0x3f => "0x3f",
+ 0x40 => "0x40",
+ 0x41 => "0x41",
+ 0x42 => "0x42",
+ 0x43 => "0x43",
+ 0x44 => "0x44",
+ 0x45 => "0x45",
+ 0x46 => "0x46",
+ 0x47 => "0x47",
+ 0x48 => "0x48",
+ 0x49 => "0x49",
+ 0x4a => "0x4a",
+ 0x4b => "0x4b",
+ 0x4c => "0x4c",
+ 0x4d => "0x4d",
+ 0x4e => "0x4e",
+ 0x4f => "0x4f",
+ 0x50 => "0x50",
+ 0x51 => "0x51",
+ 0x52 => "0x52",
+ 0x53 => "0x53",
+ 0x54 => "0x54",
+ 0x55 => "0x55",
+ 0x56 => "0x56",
+ 0x57 => "0x57",
+ 0x58 => "0x58",
+ 0x59 => "0x59",
+ 0x5a => "0x5a",
+ 0x5b => "0x5b",
+ 0x5c => "0x5c",
+ 0x5d => "0x5d",
+ 0x5e => "0x5e",
+ 0x5f => "0x5f",
+ 0x60 => "0x60",
+ 0x61 => "0x61",
+ 0x62 => "0x62",
+ 0x63 => "0x63",
+ 0x64 => "0x64",
+ 0x65 => "0x65",
+ 0x66 => "0x66",
+ 0x67 => "0x67",
+ 0x68 => "0x68",
+ 0x69 => "0x69",
+ 0x6a => "0x6a",
+ 0x6b => "0x6b",
+ 0x6c => "0x6c",
+ 0x6d => "0x6d",
+ 0x6e => "0x6e",
+ 0x6f => "0x6f",
+ 0x70 => "0x70",
+ 0x71 => "0x71",
+ 0x72 => "0x72",
+ 0x73 => "0x73",
+ 0x74 => "0x74",
+ 0x75 => "0x75",
+ 0x76 => "0x76",
+ 0x77 => "0x77",
+ 0x78 => "0x78",
+ 0x79 => "0x79",
+ 0x7a => "0x7a",
+ 0x7b => "0x7b",
+ 0x7c => "0x7c",
+ 0x7d => "0x7d",
+ 0x7e => "0x7e",
+ 0x7f => "0x7f",
+ 0x80 => "0x80",
+ 0x81 => "0x81",
+ 0x82 => "0x82",
+ 0x83 => "0x83",
+ 0x84 => "0x84",
+ 0x85 => "0x85",
+ 0x86 => "0x86",
+ 0x87 => "0x87",
+ 0x88 => "0x88",
+ 0x89 => "0x89",
+ 0x8a => "0x8a",
+ 0x8b => "0x8b",
+ 0x8c => "0x8c",
+ 0x8d => "0x8d",
+ 0x8e => "0x8e",
+ 0x8f => "0x8f",
+ 0x90 => "0x90",
+ 0x91 => "0x91",
+ 0x92 => "0x92",
+ 0x93 => "0x93",
+ 0x94 => "0x94",
+ 0x95 => "0x95",
+ 0x96 => "0x96",
+ 0x97 => "0x97",
+ 0x98 => "0x98",
+ 0x99 => "0x99",
+ 0x9a => "0x9a",
+ 0x9b => "0x9b",
+ 0x9c => "0x9c",
+ 0x9d => "0x9d",
+ 0x9e => "0x9e",
+ 0x9f => "0x9f",
+ 0xa0 => "0xa0",
+ 0xa1 => "0xa1",
+ 0xa2 => "0xa2",
+ 0xa3 => "0xa3",
+ 0xa4 => "0xa4",
+ 0xa5 => "0xa5",
+ 0xa6 => "0xa6",
+ 0xa7 => "0xa7",
+ 0xa8 => "0xa8",
+ 0xa9 => "0xa9",
+ 0xaa => "0xaa",
+ 0xab => "0xab",
+ 0xac => "0xac",
+ 0xad => "0xad",
+ 0xae => "0xae",
+ 0xaf => "0xaf",
+ 0xb0 => "0xb0",
+ 0xb1 => "0xb1",
+ 0xb2 => "0xb2",
+ 0xb3 => "0xb3",
+ 0xb4 => "0xb4",
+ 0xb5 => "0xb5",
+ 0xb6 => "0xb6",
+ 0xb7 => "0xb7",
+ 0xb8 => "0xb8",
+ 0xb9 => "0xb9",
+ 0xba => "0xba",
+ 0xbb => "0xbb",
+ 0xbc => "0xbc",
+ 0xbd => "0xbd",
+ 0xbe => "0xbe",
+ 0xbf => "0xbf",
+ 0xc0 => "0xc0",
+ 0xc1 => "0xc1",
+ 0xc2 => "0xc2",
+ 0xc3 => "0xc3",
+ 0xc4 => "0xc4",
+ 0xc5 => "0xc5",
+ 0xc6 => "0xc6",
+ 0xc7 => "0xc7",
+ 0xc8 => "0xc8",
+ 0xc9 => "0xc9",
+ 0xca => "0xca",
+ 0xcb => "0xcb",
+ 0xcc => "0xcc",
+ 0xcd => "0xcd",
+ 0xce => "0xce",
+ 0xcf => "0xcf",
+ 0xd0 => "0xd0",
+ 0xd1 => "0xd1",
+ 0xd2 => "0xd2",
+ 0xd3 => "0xd3",
+ 0xd4 => "0xd4",
+ 0xd5 => "0xd5",
+ 0xd6 => "0xd6",
+ 0xd7 => "0xd7",
+ 0xd8 => "0xd8",
+ 0xd9 => "0xd9",
+ 0xda => "0xda",
+ 0xdb => "0xdb",
+ 0xdc => "0xdc",
+ 0xdd => "0xdd",
+ 0xde => "0xde",
+ 0xdf => "0xdf",
+ 0xe0 => "0xe0",
+ 0xe1 => "0xe1",
+ 0xe2 => "0xe2",
+ 0xe3 => "0xe3",
+ 0xe4 => "0xe4",
+ 0xe5 => "0xe5",
+ 0xe6 => "0xe6",
+ 0xe7 => "0xe7",
+ 0xe8 => "0xe8",
+ 0xe9 => "0xe9",
+ 0xea => "0xea",
+ 0xeb => "0xeb",
+ 0xec => "0xec",
+ 0xed => "0xed",
+ 0xee => "0xee",
+ 0xef => "0xef",
+ 0xf0 => "0xf0",
+ 0xf1 => "0xf1",
+ 0xf2 => "0xf2",
+ 0xf3 => "0xf3",
+ 0xf4 => "0xf4",
+ 0xf5 => "0xf5",
+ 0xf6 => "0xf6",
+ 0xf7 => "0xf7",
+ 0xf8 => "0xf8",
+ 0xf9 => "0xf9",
+ 0xfa => "0xfa",
+ 0xfb => "0xfb",
+ 0xfc => "0xfc",
+ 0xfd => "0xfd",
+ 0xfe => "0xfe",
+ 0xff => "0xff",
+ 0x100 => "0x100",
+ 0x101 => "0x101",
+ 0x102 => "0x102",
+ 0x103 => "0x103",
+ 0x104 => "0x104",
+ 0x105 => "0x105",
+ 0x106 => "0x106",
+ 0x107 => "0x107",
+ 0x108 => "0x108",
+ 0x109 => "0x109",
+ 0x10a => "0x10a",
+ 0x10b => "0x10b",
+ 0x10c => "0x10c",
+ 0x10d => "0x10d",
+ 0x10e => "0x10e",
+ 0x10f => "0x10f",
+ 0x110 => "0x110",
+ 0x111 => "0x111",
+ 0x112 => "0x112",
+ 0x113 => "0x113",
+ 0x114 => "0x114",
+ 0x115 => "0x115",
+ 0x116 => "0x116",
+ 0x117 => "0x117",
+ 0x118 => "0x118",
+ 0x119 => "0x119",
+ 0x11a => "0x11a",
+ 0x11b => "0x11b",
+ 0x11c => "0x11c",
+ 0x11d => "0x11d",
+ 0x11e => "0x11e",
+ 0x11f => "0x11f",
+ 0x120 => "0x120",
+ 0x121 => "0x121",
+ 0x122 => "0x122",
+ 0x123 => "0x123",
+ 0x124 => "0x124",
+ 0x125 => "0x125",
+ 0x126 => "0x126",
+ 0x127 => "0x127",
+ 0x128 => "0x128",
+ 0x129 => "0x129",
+ 0x12a => "0x12a",
+ 0x12b => "0x12b",
+ 0x12c => "0x12c",
+ 0x12d => "0x12d",
+ 0x12e => "0x12e",
+ 0x12f => "0x12f",
+ 0x130 => "0x130",
+ 0x131 => "0x131",
+ 0x132 => "0x132",
+ 0x133 => "0x133",
+ 0x134 => "0x134",
+ 0x135 => "0x135",
+ 0x136 => "0x136",
+ 0x137 => "0x137",
+ 0x138 => "0x138",
+ 0x139 => "0x139",
+ 0x13a => "0x13a",
+ 0x13b => "0x13b",
+ 0x13c => "0x13c",
+ 0x13d => "0x13d",
+ 0x13e => "0x13e",
+ 0x13f => "0x13f",
+ 0x140 => "0x140",
+ 0x141 => "0x141",
+ 0x142 => "0x142",
+ 0x143 => "0x143",
+ 0x144 => "0x144",
+ 0x145 => "0x145",
+ 0x146 => "0x146",
+ 0x147 => "0x147",
+ 0x148 => "0x148",
+ 0x149 => "0x149",
+ 0x14a => "0x14a",
+ 0x14b => "0x14b",
+ 0x14c => "0x14c",
+ 0x14d => "0x14d",
+ 0x14e => "0x14e",
+ 0x14f => "0x14f",
+ 0x150 => "0x150",
+ 0x151 => "0x151",
+ 0x152 => "0x152",
+ 0x153 => "0x153",
+ 0x154 => "0x154",
+ 0x155 => "0x155",
+ 0x156 => "0x156",
+ 0x157 => "0x157",
+ 0x158 => "0x158",
+ 0x159 => "0x159",
+ 0x15a => "0x15a",
+ 0x15b => "0x15b",
+ 0x15c => "0x15c",
+ 0x15d => "0x15d",
+ 0x15e => "0x15e",
+ 0x15f => "0x15f",
+ 0x160 => "0x160",
+ 0x161 => "0x161",
+ 0x162 => "0x162",
+ 0x163 => "0x163",
+ 0x164 => "0x164",
+ 0x165 => "0x165",
+ 0x166 => "0x166",
+ 0x167 => "0x167",
+ 0x168 => "0x168",
+ 0x169 => "0x169",
+ 0x16a => "0x16a",
+ 0x16b => "0x16b",
+ 0x16c => "0x16c",
+ 0x16d => "0x16d",
+ 0x16e => "0x16e",
+ 0x16f => "0x16f",
+ 0x170 => "0x170",
+ 0x171 => "0x171",
+ 0x172 => "0x172",
+ 0x173 => "0x173",
+ 0x174 => "0x174",
+ 0x175 => "0x175",
+ 0x176 => "0x176",
+ 0x177 => "0x177",
+ 0x178 => "0x178",
+ 0x179 => "0x179",
+ 0x17a => "0x17a",
+ 0x17b => "0x17b",
+ 0x17c => "0x17c",
+ 0x17d => "0x17d",
+ 0x17e => "0x17e",
+ 0x17f => "0x17f",
+ 0x180 => "0x180",
+ 0x181 => "0x181",
+ 0x182 => "0x182",
+ 0x183 => "0x183",
+ 0x184 => "0x184",
+ 0x185 => "0x185",
+ 0x186 => "0x186",
+ 0x187 => "0x187",
+ 0x188 => "0x188",
+ 0x189 => "0x189",
+ 0x18a => "0x18a",
+ 0x18b => "0x18b",
+ 0x18c => "0x18c",
+ 0x18d => "0x18d",
+ 0x18e => "0x18e",
+ 0x18f => "0x18f",
+ 0x190 => "0x190",
+ 0x191 => "0x191",
+ 0x192 => "0x192",
+ 0x193 => "0x193",
+ 0x194 => "0x194",
+ 0x195 => "0x195",
+ 0x196 => "0x196",
+ 0x197 => "0x197",
+ 0x198 => "0x198",
+ 0x199 => "0x199",
+ 0x19a => "0x19a",
+ 0x19b => "0x19b",
+ 0x19c => "0x19c",
+ 0x19d => "0x19d",
+ 0x19e => "0x19e",
+ 0x19f => "0x19f",
+ 0x1a0 => "0x1a0",
+ 0x1a1 => "0x1a1",
+ 0x1a2 => "0x1a2",
+ 0x1a3 => "0x1a3",
+ 0x1a4 => "0x1a4",
+ 0x1a5 => "0x1a5",
+ 0x1a6 => "0x1a6",
+ 0x1a7 => "0x1a7",
+ 0x1a8 => "0x1a8",
+ 0x1a9 => "0x1a9",
+ 0x1aa => "0x1aa",
+ 0x1ab => "0x1ab",
+ 0x1ac => "0x1ac",
+ 0x1ad => "0x1ad",
+ 0x1ae => "0x1ae",
+ 0x1af => "0x1af",
+ 0x1b0 => "0x1b0",
+ 0x1b1 => "0x1b1",
+ 0x1b2 => "0x1b2",
+ 0x1b3 => "0x1b3",
+ 0x1b4 => "0x1b4",
+ 0x1b5 => "0x1b5",
+ 0x1b6 => "0x1b6",
+ 0x1b7 => "0x1b7",
+ 0x1b8 => "0x1b8",
+ 0x1b9 => "0x1b9",
+ 0x1ba => "0x1ba",
+ 0x1bb => "0x1bb",
+ 0x1bc => "0x1bc",
+ 0x1bd => "0x1bd",
+ 0x1be => "0x1be",
+ 0x1bf => "0x1bf",
+ 0x1c0 => "0x1c0",
+ 0x1c1 => "0x1c1",
+ 0x1c2 => "0x1c2",
+ 0x1c3 => "0x1c3",
+ 0x1c4 => "0x1c4",
+ 0x1c5 => "0x1c5",
+ 0x1c6 => "0x1c6",
+ 0x1c7 => "0x1c7",
+ 0x1c8 => "0x1c8",
+ 0x1c9 => "0x1c9",
+ 0x1ca => "0x1ca",
+ 0x1cb => "0x1cb",
+ 0x1cc => "0x1cc",
+ 0x1cd => "0x1cd",
+ 0x1ce => "0x1ce",
+ 0x1cf => "0x1cf",
+ 0x1d0 => "0x1d0",
+ 0x1d1 => "0x1d1",
+ 0x1d2 => "0x1d2",
+ 0x1d3 => "0x1d3",
+ 0x1d4 => "0x1d4",
+ 0x1d5 => "0x1d5",
+ 0x1d6 => "0x1d6",
+ 0x1d7 => "0x1d7",
+ 0x1d8 => "0x1d8",
+ 0x1d9 => "0x1d9",
+ 0x1da => "0x1da",
+ 0x1db => "0x1db",
+ 0x1dc => "0x1dc",
+ 0x1dd => "0x1dd",
+ 0x1de => "0x1de",
+ 0x1df => "0x1df",
+ 0x1e0 => "0x1e0",
+ 0x1e1 => "0x1e1",
+ 0x1e2 => "0x1e2",
+ 0x1e3 => "0x1e3",
+ 0x1e4 => "0x1e4",
+ 0x1e5 => "0x1e5",
+ 0x1e6 => "0x1e6",
+ 0x1e7 => "0x1e7",
+ 0x1e8 => "0x1e8",
+ 0x1e9 => "0x1e9",
+ 0x1ea => "0x1ea",
+ 0x1eb => "0x1eb",
+ 0x1ec => "0x1ec",
+ 0x1ed => "0x1ed",
+ 0x1ee => "0x1ee",
+ 0x1ef => "0x1ef",
+ 0x1f0 => "0x1f0",
+ 0x1f1 => "0x1f1",
+ 0x1f2 => "0x1f2",
+ 0x1f3 => "0x1f3",
+ 0x1f4 => "0x1f4",
+ 0x1f5 => "0x1f5",
+ 0x1f6 => "0x1f6",
+ 0x1f7 => "0x1f7",
+ 0x1f8 => "0x1f8",
+ 0x1f9 => "0x1f9",
+ 0x1fa => "0x1fa",
+ 0x1fb => "0x1fb",
+ 0x1fc => "0x1fc",
+ 0x1fd => "0x1fd",
+ 0x1fe => "0x1fe",
+ 0x1ff => "0x1ff",
+ 0x200 => "0x200",
+ 0x201 => "0x201",
+ 0x202 => "0x202",
+ 0x203 => "0x203",
+ 0x204 => "0x204",
+ 0x205 => "0x205",
+ 0x206 => "0x206",
+ 0x207 => "0x207",
+ 0x208 => "0x208",
+ 0x209 => "0x209",
+ 0x20a => "0x20a",
+ 0x20b => "0x20b",
+ 0x20c => "0x20c",
+ 0x20d => "0x20d",
+ 0x20e => "0x20e",
+ 0x20f => "0x20f",
+ 0x210 => "0x210",
+ 0x211 => "0x211",
+ 0x212 => "0x212",
+ 0x213 => "0x213",
+ 0x214 => "0x214",
+ 0x215 => "0x215",
+ 0x216 => "0x216",
+ 0x217 => "0x217",
+ 0x218 => "0x218",
+ 0x219 => "0x219",
+ 0x21a => "0x21a",
+ 0x21b => "0x21b",
+ 0x21c => "0x21c",
+ 0x21d => "0x21d",
+ 0x21e => "0x21e",
+ 0x21f => "0x21f",
+ 0x220 => "0x220",
+ 0x221 => "0x221",
+ 0x222 => "0x222",
+ 0x223 => "0x223",
+ 0x224 => "0x224",
+ 0x225 => "0x225",
+ 0x226 => "0x226",
+ 0x227 => "0x227",
+ 0x228 => "0x228",
+ 0x229 => "0x229",
+ 0x22a => "0x22a",
+ 0x22b => "0x22b",
+ 0x22c => "0x22c",
+ 0x22d => "0x22d",
+ 0x22e => "0x22e",
+ 0x22f => "0x22f",
+ 0x230 => "0x230",
+ 0x231 => "0x231",
+ 0x232 => "0x232",
+ 0x233 => "0x233",
+ 0x234 => "0x234",
+ 0x235 => "0x235",
+ 0x236 => "0x236",
+ 0x237 => "0x237",
+ 0x238 => "0x238",
+ 0x239 => "0x239",
+ 0x23a => "0x23a",
+ 0x23b => "0x23b",
+ 0x23c => "0x23c",
+ 0x23d => "0x23d",
+ 0x23e => "0x23e",
+ 0x23f => "0x23f",
+ 0x240 => "0x240",
+ 0x241 => "0x241",
+ 0x242 => "0x242",
+ 0x243 => "0x243",
+ 0x244 => "0x244",
+ 0x245 => "0x245",
+ 0x246 => "0x246",
+ 0x247 => "0x247",
+ 0x248 => "0x248",
+ 0x249 => "0x249",
+ 0x24a => "0x24a",
+ 0x24b => "0x24b",
+ 0x24c => "0x24c",
+ 0x24d => "0x24d",
+ 0x24e => "0x24e",
+ 0x24f => "0x24f",
+ 0x250 => "0x250",
+ 0x251 => "0x251",
+ 0x252 => "0x252",
+ 0x253 => "0x253",
+ 0x254 => "0x254",
+ 0x255 => "0x255",
+ 0x256 => "0x256",
+ 0x257 => "0x257",
+ 0x258 => "0x258",
+ 0x259 => "0x259",
+ 0x25a => "0x25a",
+ 0x25b => "0x25b",
+ 0x25c => "0x25c",
+ 0x25d => "0x25d",
+ 0x25e => "0x25e",
+ 0x25f => "0x25f",
+ 0x260 => "0x260",
+ 0x261 => "0x261",
+ 0x262 => "0x262",
+ 0x263 => "0x263",
+ 0x264 => "0x264",
+ 0x265 => "0x265",
+ 0x266 => "0x266",
+ 0x267 => "0x267",
+ 0x268 => "0x268",
+ 0x269 => "0x269",
+ 0x26a => "0x26a",
+ 0x26b => "0x26b",
+ 0x26c => "0x26c",
+ 0x26d => "0x26d",
+ 0x26e => "0x26e",
+ 0x26f => "0x26f",
+ 0x270 => "0x270",
+ 0x271 => "0x271",
+ 0x272 => "0x272",
+ 0x273 => "0x273",
+ 0x274 => "0x274",
+ 0x275 => "0x275",
+ 0x276 => "0x276",
+ 0x277 => "0x277",
+ 0x278 => "0x278",
+ 0x279 => "0x279",
+ 0x27a => "0x27a",
+ 0x27b => "0x27b",
+ 0x27c => "0x27c",
+ 0x27d => "0x27d",
+ 0x27e => "0x27e",
+ 0x27f => "0x27f",
+ 0x280 => "0x280",
+ 0x281 => "0x281",
+ 0x282 => "0x282",
+ 0x283 => "0x283",
+ 0x284 => "0x284",
+ 0x285 => "0x285",
+ 0x286 => "0x286",
+ 0x287 => "0x287",
+ 0x288 => "0x288",
+ 0x289 => "0x289",
+ 0x28a => "0x28a",
+ 0x28b => "0x28b",
+ 0x28c => "0x28c",
+ 0x28d => "0x28d",
+ 0x28e => "0x28e",
+ 0x28f => "0x28f",
+ 0x290 => "0x290",
+ 0x291 => "0x291",
+ 0x292 => "0x292",
+ 0x293 => "0x293",
+ 0x294 => "0x294",
+ 0x295 => "0x295",
+ 0x296 => "0x296",
+ 0x297 => "0x297",
+ 0x298 => "0x298",
+ 0x299 => "0x299",
+ 0x29a => "0x29a",
+ 0x29b => "0x29b",
+ 0x29c => "0x29c",
+ 0x29d => "0x29d",
+ 0x29e => "0x29e",
+ 0x29f => "0x29f",
+ 0x2a0 => "0x2a0",
+ 0x2a1 => "0x2a1",
+ 0x2a2 => "0x2a2",
+ 0x2a3 => "0x2a3",
+ 0x2a4 => "0x2a4",
+ 0x2a5 => "0x2a5",
+ 0x2a6 => "0x2a6",
+ 0x2a7 => "0x2a7",
+ 0x2a8 => "0x2a8",
+ 0x2a9 => "0x2a9",
+ 0x2aa => "0x2aa",
+ 0x2ab => "0x2ab",
+ 0x2ac => "0x2ac",
+ 0x2ad => "0x2ad",
+ 0x2ae => "0x2ae",
+ 0x2af => "0x2af",
+ 0x2b0 => "0x2b0",
+ 0x2b1 => "0x2b1",
+ 0x2b2 => "0x2b2",
+ 0x2b3 => "0x2b3",
+ 0x2b4 => "0x2b4",
+ 0x2b5 => "0x2b5",
+ 0x2b6 => "0x2b6",
+ 0x2b7 => "0x2b7",
+ 0x2b8 => "0x2b8",
+ 0x2b9 => "0x2b9",
+ 0x2ba => "0x2ba",
+ 0x2bb => "0x2bb",
+ 0x2bc => "0x2bc",
+ 0x2bd => "0x2bd",
+ 0x2be => "0x2be",
+ 0x2bf => "0x2bf",
+ 0x2c0 => "0x2c0",
+ 0x2c1 => "0x2c1",
+ 0x2c2 => "0x2c2",
+ 0x2c3 => "0x2c3",
+ 0x2c4 => "0x2c4",
+ 0x2c5 => "0x2c5",
+ 0x2c6 => "0x2c6",
+ 0x2c7 => "0x2c7",
+ 0x2c8 => "0x2c8",
+ 0x2c9 => "0x2c9",
+ 0x2ca => "0x2ca",
+ 0x2cb => "0x2cb",
+ 0x2cc => "0x2cc",
+ 0x2cd => "0x2cd",
+ 0x2ce => "0x2ce",
+ 0x2cf => "0x2cf",
+ 0x2d0 => "0x2d0",
+ 0x2d1 => "0x2d1",
+ 0x2d2 => "0x2d2",
+ 0x2d3 => "0x2d3",
+ 0x2d4 => "0x2d4",
+ 0x2d5 => "0x2d5",
+ 0x2d6 => "0x2d6",
+ 0x2d7 => "0x2d7",
+ 0x2d8 => "0x2d8",
+ 0x2d9 => "0x2d9",
+ 0x2da => "0x2da",
+ 0x2db => "0x2db",
+ 0x2dc => "0x2dc",
+ 0x2dd => "0x2dd",
+ 0x2de => "0x2de",
+ 0x2df => "0x2df",
+ 0x2e0 => "0x2e0",
+ 0x2e1 => "0x2e1",
+ 0x2e2 => "0x2e2",
+ 0x2e3 => "0x2e3",
+ 0x2e4 => "0x2e4",
+ 0x2e5 => "0x2e5",
+ 0x2e6 => "0x2e6",
+ 0x2e7 => "0x2e7",
+ 0x2e8 => "0x2e8",
+ 0x2e9 => "0x2e9",
+ 0x2ea => "0x2ea",
+ 0x2eb => "0x2eb",
+ 0x2ec => "0x2ec",
+ 0x2ed => "0x2ed",
+ 0x2ee => "0x2ee",
+ 0x2ef => "0x2ef",
+ 0x2f0 => "0x2f0",
+ 0x2f1 => "0x2f1",
+ 0x2f2 => "0x2f2",
+ 0x2f3 => "0x2f3",
+ 0x2f4 => "0x2f4",
+ 0x2f5 => "0x2f5",
+ 0x2f6 => "0x2f6",
+ 0x2f7 => "0x2f7",
+ 0x2f8 => "0x2f8",
+ 0x2f9 => "0x2f9",
+ 0x2fa => "0x2fa",
+ 0x2fb => "0x2fb",
+ 0x2fc => "0x2fc",
+ 0x2fd => "0x2fd",
+ 0x2fe => "0x2fe",
+ 0x2ff => "0x2ff",
+ 0x300 => "0x300",
+ 0x301 => "0x301",
+ 0x302 => "0x302",
+ 0x303 => "0x303",
+ 0x304 => "0x304",
+ 0x305 => "0x305",
+ 0x306 => "0x306",
+ 0x307 => "0x307",
+ 0x308 => "0x308",
+ 0x309 => "0x309",
+ 0x30a => "0x30a",
+ 0x30b => "0x30b",
+ 0x30c => "0x30c",
+ 0x30d => "0x30d",
+ 0x30e => "0x30e",
+ 0x30f => "0x30f",
+ 0x310 => "0x310",
+ 0x311 => "0x311",
+ 0x312 => "0x312",
+ 0x313 => "0x313",
+ 0x314 => "0x314",
+ 0x315 => "0x315",
+ 0x316 => "0x316",
+ 0x317 => "0x317",
+ 0x318 => "0x318",
+ 0x319 => "0x319",
+ 0x31a => "0x31a",
+ 0x31b => "0x31b",
+ 0x31c => "0x31c",
+ 0x31d => "0x31d",
+ 0x31e => "0x31e",
+ 0x31f => "0x31f",
+ 0x320 => "0x320",
+ 0x321 => "0x321",
+ 0x322 => "0x322",
+ 0x323 => "0x323",
+ 0x324 => "0x324",
+ 0x325 => "0x325",
+ 0x326 => "0x326",
+ 0x327 => "0x327",
+ 0x328 => "0x328",
+ 0x329 => "0x329",
+ 0x32a => "0x32a",
+ 0x32b => "0x32b",
+ 0x32c => "0x32c",
+ 0x32d => "0x32d",
+ 0x32e => "0x32e",
+ 0x32f => "0x32f",
+ 0x330 => "0x330",
+ 0x331 => "0x331",
+ 0x332 => "0x332",
+ 0x333 => "0x333",
+ 0x334 => "0x334",
+ 0x335 => "0x335",
+ 0x336 => "0x336",
+ 0x337 => "0x337",
+ 0x338 => "0x338",
+ 0x339 => "0x339",
+ 0x33a => "0x33a",
+ 0x33b => "0x33b",
+ 0x33c => "0x33c",
+ 0x33d => "0x33d",
+ 0x33e => "0x33e",
+ 0x33f => "0x33f",
+ 0x340 => "0x340",
+ 0x341 => "0x341",
+ 0x342 => "0x342",
+ 0x343 => "0x343",
+ 0x344 => "0x344",
+ 0x345 => "0x345",
+ 0x346 => "0x346",
+ 0x347 => "0x347",
+ 0x348 => "0x348",
+ 0x349 => "0x349",
+ 0x34a => "0x34a",
+ 0x34b => "0x34b",
+ 0x34c => "0x34c",
+ 0x34d => "0x34d",
+ 0x34e => "0x34e",
+ 0x34f => "0x34f",
+ 0x350 => "0x350",
+ 0x351 => "0x351",
+ 0x352 => "0x352",
+ 0x353 => "0x353",
+ 0x354 => "0x354",
+ 0x355 => "0x355",
+ 0x356 => "0x356",
+ 0x357 => "0x357",
+ 0x358 => "0x358",
+ 0x359 => "0x359",
+ 0x35a => "0x35a",
+ 0x35b => "0x35b",
+ 0x35c => "0x35c",
+ 0x35d => "0x35d",
+ 0x35e => "0x35e",
+ 0x35f => "0x35f",
+ 0x360 => "0x360",
+ 0x361 => "0x361",
+ 0x362 => "0x362",
+ 0x363 => "0x363",
+ 0x364 => "0x364",
+ 0x365 => "0x365",
+ 0x366 => "0x366",
+ 0x367 => "0x367",
+ 0x368 => "0x368",
+ 0x369 => "0x369",
+ 0x36a => "0x36a",
+ 0x36b => "0x36b",
+ 0x36c => "0x36c",
+ 0x36d => "0x36d",
+ 0x36e => "0x36e",
+ 0x36f => "0x36f",
+ 0x370 => "0x370",
+ 0x371 => "0x371",
+ 0x372 => "0x372",
+ 0x373 => "0x373",
+ 0x374 => "0x374",
+ 0x375 => "0x375",
+ 0x376 => "0x376",
+ 0x377 => "0x377",
+ 0x378 => "0x378",
+ 0x379 => "0x379",
+ 0x37a => "0x37a",
+ 0x37b => "0x37b",
+ 0x37c => "0x37c",
+ 0x37d => "0x37d",
+ 0x37e => "0x37e",
+ 0x37f => "0x37f",
+ 0x380 => "0x380",
+ 0x381 => "0x381",
+ 0x382 => "0x382",
+ 0x383 => "0x383",
+ 0x384 => "0x384",
+ 0x385 => "0x385",
+ 0x386 => "0x386",
+ 0x387 => "0x387",
+ 0x388 => "0x388",
+ 0x389 => "0x389",
+ 0x38a => "0x38a",
+ 0x38b => "0x38b",
+ 0x38c => "0x38c",
+ 0x38d => "0x38d",
+ 0x38e => "0x38e",
+ 0x38f => "0x38f",
+ 0x390 => "0x390",
+ 0x391 => "0x391",
+ 0x392 => "0x392",
+ 0x393 => "0x393",
+ 0x394 => "0x394",
+ 0x395 => "0x395",
+ 0x396 => "0x396",
+ 0x397 => "0x397",
+ 0x398 => "0x398",
+ 0x399 => "0x399",
+ 0x39a => "0x39a",
+ 0x39b => "0x39b",
+ 0x39c => "0x39c",
+ 0x39d => "0x39d",
+ 0x39e => "0x39e",
+ 0x39f => "0x39f",
+ 0x3a0 => "0x3a0",
+ 0x3a1 => "0x3a1",
+ 0x3a2 => "0x3a2",
+ 0x3a3 => "0x3a3",
+ 0x3a4 => "0x3a4",
+ 0x3a5 => "0x3a5",
+ 0x3a6 => "0x3a6",
+ 0x3a7 => "0x3a7",
+ 0x3a8 => "0x3a8",
+ 0x3a9 => "0x3a9",
+ 0x3aa => "0x3aa",
+ 0x3ab => "0x3ab",
+ 0x3ac => "0x3ac",
+ 0x3ad => "0x3ad",
+ 0x3ae => "0x3ae",
+ 0x3af => "0x3af",
+ 0x3b0 => "0x3b0",
+ 0x3b1 => "0x3b1",
+ 0x3b2 => "0x3b2",
+ 0x3b3 => "0x3b3",
+ 0x3b4 => "0x3b4",
+ 0x3b5 => "0x3b5",
+ 0x3b6 => "0x3b6",
+ 0x3b7 => "0x3b7",
+ 0x3b8 => "0x3b8",
+ 0x3b9 => "0x3b9",
+ 0x3ba => "0x3ba",
+ 0x3bb => "0x3bb",
+ 0x3bc => "0x3bc",
+ 0x3bd => "0x3bd",
+ 0x3be => "0x3be",
+ 0x3bf => "0x3bf",
+ 0x3c0 => "0x3c0",
+ 0x3c1 => "0x3c1",
+ 0x3c2 => "0x3c2",
+ 0x3c3 => "0x3c3",
+ 0x3c4 => "0x3c4",
+ 0x3c5 => "0x3c5",
+ 0x3c6 => "0x3c6",
+ 0x3c7 => "0x3c7",
+ 0x3c8 => "0x3c8",
+ 0x3c9 => "0x3c9",
+ 0x3ca => "0x3ca",
+ 0x3cb => "0x3cb",
+ 0x3cc => "0x3cc",
+ 0x3cd => "0x3cd",
+ 0x3ce => "0x3ce",
+ 0x3cf => "0x3cf",
+ 0x3d0 => "0x3d0",
+ 0x3d1 => "0x3d1",
+ 0x3d2 => "0x3d2",
+ 0x3d3 => "0x3d3",
+ 0x3d4 => "0x3d4",
+ 0x3d5 => "0x3d5",
+ 0x3d6 => "0x3d6",
+ 0x3d7 => "0x3d7",
+ 0x3d8 => "0x3d8",
+ 0x3d9 => "0x3d9",
+ 0x3da => "0x3da",
+ 0x3db => "0x3db",
+ 0x3dc => "0x3dc",
+ 0x3dd => "0x3dd",
+ 0x3de => "0x3de",
+ 0x3df => "0x3df",
+ 0x3e0 => "0x3e0",
+ 0x3e1 => "0x3e1",
+ 0x3e2 => "0x3e2",
+ 0x3e3 => "0x3e3",
+ 0x3e4 => "0x3e4",
+ 0x3e5 => "0x3e5",
+ 0x3e6 => "0x3e6",
+ 0x3e7 => "0x3e7",
+ 0x3e8 => "0x3e8",
+ 0x3e9 => "0x3e9",
+ 0x3ea => "0x3ea",
+ 0x3eb => "0x3eb",
+ 0x3ec => "0x3ec",
+ 0x3ed => "0x3ed",
+ 0x3ee => "0x3ee",
+ 0x3ef => "0x3ef",
+ 0x3f0 => "0x3f0",
+ 0x3f1 => "0x3f1",
+ 0x3f2 => "0x3f2",
+ 0x3f3 => "0x3f3",
+ 0x3f4 => "0x3f4",
+ 0x3f5 => "0x3f5",
+ 0x3f6 => "0x3f6",
+ 0x3f7 => "0x3f7",
+ 0x3f8 => "0x3f8",
+ 0x3f9 => "0x3f9",
+ 0x3fa => "0x3fa",
+ 0x3fb => "0x3fb",
+ 0x3fc => "0x3fc",
+ 0x3fd => "0x3fd",
+ 0x3fe => "0x3fe",
+ 0x3ff => "0x3ff",
+ 0x400 => "0x400",
+ 0x401 => "0x401",
+ 0x402 => "0x402",
+ 0x403 => "0x403",
+ 0x404 => "0x404",
+ 0x405 => "0x405",
+ 0x406 => "0x406",
+ 0x407 => "0x407",
+ 0x408 => "0x408",
+ 0x409 => "0x409",
+ 0x40a => "0x40a",
+ 0x40b => "0x40b",
+ 0x40c => "0x40c",
+ 0x40d => "0x40d",
+ 0x40e => "0x40e",
+ 0x40f => "0x40f",
+ 0x410 => "0x410",
+ 0x411 => "0x411",
+ 0x412 => "0x412",
+ 0x413 => "0x413",
+ 0x414 => "0x414",
+ 0x415 => "0x415",
+ 0x416 => "0x416",
+ 0x417 => "0x417",
+ 0x418 => "0x418",
+ 0x419 => "0x419",
+ 0x41a => "0x41a",
+ 0x41b => "0x41b",
+ 0x41c => "0x41c",
+ 0x41d => "0x41d",
+ 0x41e => "0x41e",
+ 0x41f => "0x41f",
+ 0x420 => "0x420",
+ 0x421 => "0x421",
+ 0x422 => "0x422",
+ 0x423 => "0x423",
+ 0x424 => "0x424",
+ 0x425 => "0x425",
+ 0x426 => "0x426",
+ 0x427 => "0x427",
+ 0x428 => "0x428",
+ 0x429 => "0x429",
+ 0x42a => "0x42a",
+ 0x42b => "0x42b",
+ 0x42c => "0x42c",
+ 0x42d => "0x42d",
+ 0x42e => "0x42e",
+ 0x42f => "0x42f",
+ 0x430 => "0x430",
+ 0x431 => "0x431",
+ 0x432 => "0x432",
+ 0x433 => "0x433",
+ 0x434 => "0x434",
+ 0x435 => "0x435",
+ 0x436 => "0x436",
+ 0x437 => "0x437",
+ 0x438 => "0x438",
+ 0x439 => "0x439",
+ 0x43a => "0x43a",
+ 0x43b => "0x43b",
+ 0x43c => "0x43c",
+ 0x43d => "0x43d",
+ 0x43e => "0x43e",
+ 0x43f => "0x43f",
+ 0x440 => "0x440",
+ 0x441 => "0x441",
+ 0x442 => "0x442",
+ 0x443 => "0x443",
+ 0x444 => "0x444",
+ 0x445 => "0x445",
+ 0x446 => "0x446",
+ 0x447 => "0x447",
+ 0x448 => "0x448",
+ 0x449 => "0x449",
+ 0x44a => "0x44a",
+ 0x44b => "0x44b",
+ 0x44c => "0x44c",
+ 0x44d => "0x44d",
+ 0x44e => "0x44e",
+ 0x44f => "0x44f",
+ 0x450 => "0x450",
+ 0x451 => "0x451",
+ 0x452 => "0x452",
+ 0x453 => "0x453",
+ 0x454 => "0x454",
+ 0x455 => "0x455",
+ 0x456 => "0x456",
+ 0x457 => "0x457",
+ 0x458 => "0x458",
+ 0x459 => "0x459",
+ 0x45a => "0x45a",
+ 0x45b => "0x45b",
+ 0x45c => "0x45c",
+ 0x45d => "0x45d",
+ 0x45e => "0x45e",
+ 0x45f => "0x45f",
+ 0x460 => "0x460",
+ 0x461 => "0x461",
+ 0x462 => "0x462",
+ 0x463 => "0x463",
+ 0x464 => "0x464",
+ 0x465 => "0x465",
+ 0x466 => "0x466",
+ 0x467 => "0x467",
+ 0x468 => "0x468",
+ 0x469 => "0x469",
+ 0x46a => "0x46a",
+ 0x46b => "0x46b",
+ 0x46c => "0x46c",
+ 0x46d => "0x46d",
+ 0x46e => "0x46e",
+ 0x46f => "0x46f",
+ 0x470 => "0x470",
+ 0x471 => "0x471",
+ 0x472 => "0x472",
+ 0x473 => "0x473",
+ 0x474 => "0x474",
+ 0x475 => "0x475",
+ 0x476 => "0x476",
+ 0x477 => "0x477",
+ 0x478 => "0x478",
+ 0x479 => "0x479",
+ 0x47a => "0x47a",
+ 0x47b => "0x47b",
+ 0x47c => "0x47c",
+ 0x47d => "0x47d",
+ 0x47e => "0x47e",
+ 0x47f => "0x47f",
+ 0x480 => "0x480",
+ 0x481 => "0x481",
+ 0x482 => "0x482",
+ 0x483 => "0x483",
+ 0x484 => "0x484",
+ 0x485 => "0x485",
+ 0x486 => "0x486",
+ 0x487 => "0x487",
+ 0x488 => "0x488",
+ 0x489 => "0x489",
+ 0x48a => "0x48a",
+ 0x48b => "0x48b",
+ 0x48c => "0x48c",
+ 0x48d => "0x48d",
+ 0x48e => "0x48e",
+ 0x48f => "0x48f",
+ 0x490 => "0x490",
+ 0x491 => "0x491",
+ 0x492 => "0x492",
+ 0x493 => "0x493",
+ 0x494 => "0x494",
+ 0x495 => "0x495",
+ 0x496 => "0x496",
+ 0x497 => "0x497",
+ 0x498 => "0x498",
+ 0x499 => "0x499",
+ 0x49a => "0x49a",
+ 0x49b => "0x49b",
+ 0x49c => "0x49c",
+ 0x49d => "0x49d",
+ 0x49e => "0x49e",
+ 0x49f => "0x49f",
+ 0x4a0 => "0x4a0",
+ 0x4a1 => "0x4a1",
+ 0x4a2 => "0x4a2",
+ 0x4a3 => "0x4a3",
+ 0x4a4 => "0x4a4",
+ 0x4a5 => "0x4a5",
+ 0x4a6 => "0x4a6",
+ 0x4a7 => "0x4a7",
+ 0x4a8 => "0x4a8",
+ 0x4a9 => "0x4a9",
+ 0x4aa => "0x4aa",
+ 0x4ab => "0x4ab",
+ 0x4ac => "0x4ac",
+ 0x4ad => "0x4ad",
+ 0x4ae => "0x4ae",
+ 0x4af => "0x4af",
+ 0x4b0 => "0x4b0",
+ 0x4b1 => "0x4b1",
+ 0x4b2 => "0x4b2",
+ 0x4b3 => "0x4b3",
+ 0x4b4 => "0x4b4",
+ 0x4b5 => "0x4b5",
+ 0x4b6 => "0x4b6",
+ 0x4b7 => "0x4b7",
+ 0x4b8 => "0x4b8",
+ 0x4b9 => "0x4b9",
+ 0x4ba => "0x4ba",
+ 0x4bb => "0x4bb",
+ 0x4bc => "0x4bc",
+ 0x4bd => "0x4bd",
+ 0x4be => "0x4be",
+ 0x4bf => "0x4bf",
+ 0x4c0 => "0x4c0",
+ 0x4c1 => "0x4c1",
+ 0x4c2 => "0x4c2",
+ 0x4c3 => "0x4c3",
+ 0x4c4 => "0x4c4",
+ 0x4c5 => "0x4c5",
+ 0x4c6 => "0x4c6",
+ 0x4c7 => "0x4c7",
+ 0x4c8 => "0x4c8",
+ 0x4c9 => "0x4c9",
+ 0x4ca => "0x4ca",
+ 0x4cb => "0x4cb",
+ 0x4cc => "0x4cc",
+ 0x4cd => "0x4cd",
+ 0x4ce => "0x4ce",
+ 0x4cf => "0x4cf",
+ 0x4d0 => "0x4d0",
+ 0x4d1 => "0x4d1",
+ 0x4d2 => "0x4d2",
+ 0x4d3 => "0x4d3",
+ 0x4d4 => "0x4d4",
+ 0x4d5 => "0x4d5",
+ 0x4d6 => "0x4d6",
+ 0x4d7 => "0x4d7",
+ 0x4d8 => "0x4d8",
+ 0x4d9 => "0x4d9",
+ 0x4da => "0x4da",
+ 0x4db => "0x4db",
+ 0x4dc => "0x4dc",
+ 0x4dd => "0x4dd",
+ 0x4de => "0x4de",
+ 0x4df => "0x4df",
+ 0x4e0 => "0x4e0",
+ 0x4e1 => "0x4e1",
+ 0x4e2 => "0x4e2",
+ 0x4e3 => "0x4e3",
+ 0x4e4 => "0x4e4",
+ 0x4e5 => "0x4e5",
+ 0x4e6 => "0x4e6",
+ 0x4e7 => "0x4e7",
+ 0x4e8 => "0x4e8",
+ 0x4e9 => "0x4e9",
+ 0x4ea => "0x4ea",
+ 0x4eb => "0x4eb",
+ 0x4ec => "0x4ec",
+ 0x4ed => "0x4ed",
+ 0x4ee => "0x4ee",
+ 0x4ef => "0x4ef",
+ 0x4f0 => "0x4f0",
+ 0x4f1 => "0x4f1",
+ 0x4f2 => "0x4f2",
+ 0x4f3 => "0x4f3",
+ 0x4f4 => "0x4f4",
+ 0x4f5 => "0x4f5",
+ 0x4f6 => "0x4f6",
+ 0x4f7 => "0x4f7",
+ 0x4f8 => "0x4f8",
+ 0x4f9 => "0x4f9",
+ 0x4fa => "0x4fa",
+ 0x4fb => "0x4fb",
+ 0x4fc => "0x4fc",
+ 0x4fd => "0x4fd",
+ 0x4fe => "0x4fe",
+ 0x4ff => "0x4ff",
+ 0x500 => "0x500",
+ 0x501 => "0x501",
+ 0x502 => "0x502",
+ 0x503 => "0x503",
+ 0x504 => "0x504",
+ 0x505 => "0x505",
+ 0x506 => "0x506",
+ 0x507 => "0x507",
+ 0x508 => "0x508",
+ 0x509 => "0x509",
+ 0x50a => "0x50a",
+ 0x50b => "0x50b",
+ 0x50c => "0x50c",
+ 0x50d => "0x50d",
+ 0x50e => "0x50e",
+ 0x50f => "0x50f",
+ 0x510 => "0x510",
+ 0x511 => "0x511",
+ 0x512 => "0x512",
+ 0x513 => "0x513",
+ 0x514 => "0x514",
+ 0x515 => "0x515",
+ 0x516 => "0x516",
+ 0x517 => "0x517",
+ 0x518 => "0x518",
+ 0x519 => "0x519",
+ 0x51a => "0x51a",
+ 0x51b => "0x51b",
+ 0x51c => "0x51c",
+ 0x51d => "0x51d",
+ 0x51e => "0x51e",
+ 0x51f => "0x51f",
+ 0x520 => "0x520",
+ 0x521 => "0x521",
+ 0x522 => "0x522",
+ 0x523 => "0x523",
+ 0x524 => "0x524",
+ 0x525 => "0x525",
+ 0x526 => "0x526",
+ 0x527 => "0x527",
+ 0x528 => "0x528",
+ 0x529 => "0x529",
+ 0x52a => "0x52a",
+ 0x52b => "0x52b",
+ 0x52c => "0x52c",
+ 0x52d => "0x52d",
+ 0x52e => "0x52e",
+ 0x52f => "0x52f",
+ 0x530 => "0x530",
+ 0x531 => "0x531",
+ 0x532 => "0x532",
+ 0x533 => "0x533",
+ 0x534 => "0x534",
+ 0x535 => "0x535",
+ 0x536 => "0x536",
+ 0x537 => "0x537",
+ 0x538 => "0x538",
+ 0x539 => "0x539",
+ 0x53a => "0x53a",
+ 0x53b => "0x53b",
+ 0x53c => "0x53c",
+ 0x53d => "0x53d",
+ 0x53e => "0x53e",
+ 0x53f => "0x53f",
+ 0x540 => "0x540",
+ 0x541 => "0x541",
+ 0x542 => "0x542",
+ 0x543 => "0x543",
+ 0x544 => "0x544",
+ 0x545 => "0x545",
+ 0x546 => "0x546",
+ 0x547 => "0x547",
+ 0x548 => "0x548",
+ 0x549 => "0x549",
+ 0x54a => "0x54a",
+ 0x54b => "0x54b",
+ 0x54c => "0x54c",
+ 0x54d => "0x54d",
+ 0x54e => "0x54e",
+ 0x54f => "0x54f",
+ 0x550 => "0x550",
+ 0x551 => "0x551",
+ 0x552 => "0x552",
+ 0x553 => "0x553",
+ 0x554 => "0x554",
+ 0x555 => "0x555",
+ 0x556 => "0x556",
+ 0x557 => "0x557",
+ 0x558 => "0x558",
+ 0x559 => "0x559",
+ 0x55a => "0x55a",
+ 0x55b => "0x55b",
+ 0x55c => "0x55c",
+ 0x55d => "0x55d",
+ 0x55e => "0x55e",
+ 0x55f => "0x55f",
+ 0x560 => "0x560",
+ 0x561 => "0x561",
+ 0x562 => "0x562",
+ 0x563 => "0x563",
+ 0x564 => "0x564",
+ 0x565 => "0x565",
+ 0x566 => "0x566",
+ 0x567 => "0x567",
+ 0x568 => "0x568",
+ 0x569 => "0x569",
+ 0x56a => "0x56a",
+ 0x56b => "0x56b",
+ 0x56c => "0x56c",
+ 0x56d => "0x56d",
+ 0x56e => "0x56e",
+ 0x56f => "0x56f",
+ 0x570 => "0x570",
+ 0x571 => "0x571",
+ 0x572 => "0x572",
+ 0x573 => "0x573",
+ 0x574 => "0x574",
+ 0x575 => "0x575",
+ 0x576 => "0x576",
+ 0x577 => "0x577",
+ 0x578 => "0x578",
+ 0x579 => "0x579",
+ 0x57a => "0x57a",
+ 0x57b => "0x57b",
+ 0x57c => "0x57c",
+ 0x57d => "0x57d",
+ 0x57e => "0x57e",
+ 0x57f => "0x57f",
+ 0x580 => "0x580",
+ 0x581 => "0x581",
+ 0x582 => "0x582",
+ 0x583 => "0x583",
+ 0x584 => "0x584",
+ 0x585 => "0x585",
+ 0x586 => "0x586",
+ 0x587 => "0x587",
+ 0x588 => "0x588",
+ 0x589 => "0x589",
+ 0x58a => "0x58a",
+ 0x58b => "0x58b",
+ 0x58c => "0x58c",
+ 0x58d => "0x58d",
+ 0x58e => "0x58e",
+ 0x58f => "0x58f",
+ 0x590 => "0x590",
+ 0x591 => "0x591",
+ 0x592 => "0x592",
+ 0x593 => "0x593",
+ 0x594 => "0x594",
+ 0x595 => "0x595",
+ 0x596 => "0x596",
+ 0x597 => "0x597",
+ 0x598 => "0x598",
+ 0x599 => "0x599",
+ 0x59a => "0x59a",
+ 0x59b => "0x59b",
+ 0x59c => "0x59c",
+ 0x59d => "0x59d",
+ 0x59e => "0x59e",
+ 0x59f => "0x59f",
+ 0x5a0 => "0x5a0",
+ 0x5a1 => "0x5a1",
+ 0x5a2 => "0x5a2",
+ 0x5a3 => "0x5a3",
+ 0x5a4 => "0x5a4",
+ 0x5a5 => "0x5a5",
+ 0x5a6 => "0x5a6",
+ 0x5a7 => "0x5a7",
+ 0x5a8 => "0x5a8",
+ 0x5a9 => "0x5a9",
+ 0x5aa => "0x5aa",
+ 0x5ab => "0x5ab",
+ 0x5ac => "0x5ac",
+ 0x5ad => "0x5ad",
+ 0x5ae => "0x5ae",
+ 0x5af => "0x5af",
+ 0x5b0 => "0x5b0",
+ 0x5b1 => "0x5b1",
+ 0x5b2 => "0x5b2",
+ 0x5b3 => "0x5b3",
+ 0x5b4 => "0x5b4",
+ 0x5b5 => "0x5b5",
+ 0x5b6 => "0x5b6",
+ 0x5b7 => "0x5b7",
+ 0x5b8 => "0x5b8",
+ 0x5b9 => "0x5b9",
+ 0x5ba => "0x5ba",
+ 0x5bb => "0x5bb",
+ 0x5bc => "0x5bc",
+ 0x5bd => "0x5bd",
+ 0x5be => "0x5be",
+ 0x5bf => "0x5bf",
+ 0x5c0 => "0x5c0",
+ 0x5c1 => "0x5c1",
+ 0x5c2 => "0x5c2",
+ 0x5c3 => "0x5c3",
+ 0x5c4 => "0x5c4",
+ 0x5c5 => "0x5c5",
+ 0x5c6 => "0x5c6",
+ 0x5c7 => "0x5c7",
+ 0x5c8 => "0x5c8",
+ 0x5c9 => "0x5c9",
+ 0x5ca => "0x5ca",
+ 0x5cb => "0x5cb",
+ 0x5cc => "0x5cc",
+ 0x5cd => "0x5cd",
+ 0x5ce => "0x5ce",
+ 0x5cf => "0x5cf",
+ 0x5d0 => "0x5d0",
+ 0x5d1 => "0x5d1",
+ 0x5d2 => "0x5d2",
+ 0x5d3 => "0x5d3",
+ 0x5d4 => "0x5d4",
+ 0x5d5 => "0x5d5",
+ 0x5d6 => "0x5d6",
+ 0x5d7 => "0x5d7",
+ 0x5d8 => "0x5d8",
+ 0x5d9 => "0x5d9",
+ 0x5da => "0x5da",
+ 0x5db => "0x5db",
+ 0x5dc => "0x5dc",
+ 0x5dd => "0x5dd",
+ 0x5de => "0x5de",
+ 0x5df => "0x5df",
+ 0x5e0 => "0x5e0",
+ 0x5e1 => "0x5e1",
+ 0x5e2 => "0x5e2",
+ 0x5e3 => "0x5e3",
+ 0x5e4 => "0x5e4",
+ 0x5e5 => "0x5e5",
+ 0x5e6 => "0x5e6",
+ 0x5e7 => "0x5e7",
+ 0x5e8 => "0x5e8",
+ 0x5e9 => "0x5e9",
+ 0x5ea => "0x5ea",
+ 0x5eb => "0x5eb",
+ 0x5ec => "0x5ec",
+ 0x5ed => "0x5ed",
+ 0x5ee => "0x5ee",
+ 0x5ef => "0x5ef",
+ 0x5f0 => "0x5f0",
+ 0x5f1 => "0x5f1",
+ 0x5f2 => "0x5f2",
+ 0x5f3 => "0x5f3",
+ 0x5f4 => "0x5f4",
+ 0x5f5 => "0x5f5",
+ 0x5f6 => "0x5f6",
+ 0x5f7 => "0x5f7",
+ 0x5f8 => "0x5f8",
+ 0x5f9 => "0x5f9",
+ 0x5fa => "0x5fa",
+ 0x5fb => "0x5fb",
+ 0x5fc => "0x5fc",
+ 0x5fd => "0x5fd",
+ 0x5fe => "0x5fe",
+ 0x5ff => "0x5ff",
+ 0x600 => "0x600",
+ 0x601 => "0x601",
+ 0x602 => "0x602",
+ 0x603 => "0x603",
+ 0x604 => "0x604",
+ 0x605 => "0x605",
+ 0x606 => "0x606",
+ 0x607 => "0x607",
+ 0x608 => "0x608",
+ 0x609 => "0x609",
+ 0x60a => "0x60a",
+ 0x60b => "0x60b",
+ 0x60c => "0x60c",
+ 0x60d => "0x60d",
+ 0x60e => "0x60e",
+ 0x60f => "0x60f",
+ 0x610 => "0x610",
+ 0x611 => "0x611",
+ 0x612 => "0x612",
+ 0x613 => "0x613",
+ 0x614 => "0x614",
+ 0x615 => "0x615",
+ 0x616 => "0x616",
+ 0x617 => "0x617",
+ 0x618 => "0x618",
+ 0x619 => "0x619",
+ 0x61a => "0x61a",
+ 0x61b => "0x61b",
+ 0x61c => "0x61c",
+ 0x61d => "0x61d",
+ 0x61e => "0x61e",
+ 0x61f => "0x61f",
+ 0x620 => "0x620",
+ 0x621 => "0x621",
+ 0x622 => "0x622",
+ 0x623 => "0x623",
+ 0x624 => "0x624",
+ 0x625 => "0x625",
+ 0x626 => "0x626",
+ 0x627 => "0x627",
+ 0x628 => "0x628",
+ 0x629 => "0x629",
+ 0x62a => "0x62a",
+ 0x62b => "0x62b",
+ 0x62c => "0x62c",
+ 0x62d => "0x62d",
+ 0x62e => "0x62e",
+ 0x62f => "0x62f",
+ 0x630 => "0x630",
+ 0x631 => "0x631",
+ 0x632 => "0x632",
+ 0x633 => "0x633",
+ 0x634 => "0x634",
+ 0x635 => "0x635",
+ 0x636 => "0x636",
+ 0x637 => "0x637",
+ 0x638 => "0x638",
+ 0x639 => "0x639",
+ 0x63a => "0x63a",
+ 0x63b => "0x63b",
+ 0x63c => "0x63c",
+ 0x63d => "0x63d",
+ 0x63e => "0x63e",
+ 0x63f => "0x63f",
+ 0x640 => "0x640",
+ 0x641 => "0x641",
+ 0x642 => "0x642",
+ 0x643 => "0x643",
+ 0x644 => "0x644",
+ 0x645 => "0x645",
+ 0x646 => "0x646",
+ 0x647 => "0x647",
+ 0x648 => "0x648",
+ 0x649 => "0x649",
+ 0x64a => "0x64a",
+ 0x64b => "0x64b",
+ 0x64c => "0x64c",
+ 0x64d => "0x64d",
+ 0x64e => "0x64e",
+ 0x64f => "0x64f",
+ 0x650 => "0x650",
+ 0x651 => "0x651",
+ 0x652 => "0x652",
+ 0x653 => "0x653",
+ 0x654 => "0x654",
+ 0x655 => "0x655",
+ 0x656 => "0x656",
+ 0x657 => "0x657",
+ 0x658 => "0x658",
+ 0x659 => "0x659",
+ 0x65a => "0x65a",
+ 0x65b => "0x65b",
+ 0x65c => "0x65c",
+ 0x65d => "0x65d",
+ 0x65e => "0x65e",
+ 0x65f => "0x65f",
+ 0x660 => "0x660",
+ 0x661 => "0x661",
+ 0x662 => "0x662",
+ 0x663 => "0x663",
+ 0x664 => "0x664",
+ 0x665 => "0x665",
+ 0x666 => "0x666",
+ 0x667 => "0x667",
+ 0x668 => "0x668",
+ 0x669 => "0x669",
+ 0x66a => "0x66a",
+ 0x66b => "0x66b",
+ 0x66c => "0x66c",
+ 0x66d => "0x66d",
+ 0x66e => "0x66e",
+ 0x66f => "0x66f",
+ 0x670 => "0x670",
+ 0x671 => "0x671",
+ 0x672 => "0x672",
+ 0x673 => "0x673",
+ 0x674 => "0x674",
+ 0x675 => "0x675",
+ 0x676 => "0x676",
+ 0x677 => "0x677",
+ 0x678 => "0x678",
+ 0x679 => "0x679",
+ 0x67a => "0x67a",
+ 0x67b => "0x67b",
+ 0x67c => "0x67c",
+ 0x67d => "0x67d",
+ 0x67e => "0x67e",
+ 0x67f => "0x67f",
+ 0x680 => "0x680",
+ 0x681 => "0x681",
+ 0x682 => "0x682",
+ 0x683 => "0x683",
+ 0x684 => "0x684",
+ 0x685 => "0x685",
+ 0x686 => "0x686",
+ 0x687 => "0x687",
+ 0x688 => "0x688",
+ 0x689 => "0x689",
+ 0x68a => "0x68a",
+ 0x68b => "0x68b",
+ 0x68c => "0x68c",
+ 0x68d => "0x68d",
+ 0x68e => "0x68e",
+ 0x68f => "0x68f",
+ 0x690 => "0x690",
+ 0x691 => "0x691",
+ 0x692 => "0x692",
+ 0x693 => "0x693",
+ 0x694 => "0x694",
+ 0x695 => "0x695",
+ 0x696 => "0x696",
+ 0x697 => "0x697",
+ 0x698 => "0x698",
+ 0x699 => "0x699",
+ 0x69a => "0x69a",
+ 0x69b => "0x69b",
+ 0x69c => "0x69c",
+ 0x69d => "0x69d",
+ 0x69e => "0x69e",
+ 0x69f => "0x69f",
+ 0x6a0 => "0x6a0",
+ 0x6a1 => "0x6a1",
+ 0x6a2 => "0x6a2",
+ 0x6a3 => "0x6a3",
+ 0x6a4 => "0x6a4",
+ 0x6a5 => "0x6a5",
+ 0x6a6 => "0x6a6",
+ 0x6a7 => "0x6a7",
+ 0x6a8 => "0x6a8",
+ 0x6a9 => "0x6a9",
+ 0x6aa => "0x6aa",
+ 0x6ab => "0x6ab",
+ 0x6ac => "0x6ac",
+ 0x6ad => "0x6ad",
+ 0x6ae => "0x6ae",
+ 0x6af => "0x6af",
+ 0x6b0 => "0x6b0",
+ 0x6b1 => "0x6b1",
+ 0x6b2 => "0x6b2",
+ 0x6b3 => "0x6b3",
+ 0x6b4 => "0x6b4",
+ 0x6b5 => "0x6b5",
+ 0x6b6 => "0x6b6",
+ 0x6b7 => "0x6b7",
+ 0x6b8 => "0x6b8",
+ 0x6b9 => "0x6b9",
+ 0x6ba => "0x6ba",
+ 0x6bb => "0x6bb",
+ 0x6bc => "0x6bc",
+ 0x6bd => "0x6bd",
+ 0x6be => "0x6be",
+ 0x6bf => "0x6bf",
+ 0x6c0 => "0x6c0",
+ 0x6c1 => "0x6c1",
+ 0x6c2 => "0x6c2",
+ 0x6c3 => "0x6c3",
+ 0x6c4 => "0x6c4",
+ 0x6c5 => "0x6c5",
+ 0x6c6 => "0x6c6",
+ 0x6c7 => "0x6c7",
+ 0x6c8 => "0x6c8",
+ 0x6c9 => "0x6c9",
+ 0x6ca => "0x6ca",
+ 0x6cb => "0x6cb",
+ 0x6cc => "0x6cc",
+ 0x6cd => "0x6cd",
+ 0x6ce => "0x6ce",
+ 0x6cf => "0x6cf",
+ 0x6d0 => "0x6d0",
+ 0x6d1 => "0x6d1",
+ 0x6d2 => "0x6d2",
+ 0x6d3 => "0x6d3",
+ 0x6d4 => "0x6d4",
+ 0x6d5 => "0x6d5",
+ 0x6d6 => "0x6d6",
+ 0x6d7 => "0x6d7",
+ 0x6d8 => "0x6d8",
+ 0x6d9 => "0x6d9",
+ 0x6da => "0x6da",
+ 0x6db => "0x6db",
+ 0x6dc => "0x6dc",
+ 0x6dd => "0x6dd",
+ 0x6de => "0x6de",
+ 0x6df => "0x6df",
+ 0x6e0 => "0x6e0",
+ 0x6e1 => "0x6e1",
+ 0x6e2 => "0x6e2",
+ 0x6e3 => "0x6e3",
+ 0x6e4 => "0x6e4",
+ 0x6e5 => "0x6e5",
+ 0x6e6 => "0x6e6",
+ 0x6e7 => "0x6e7",
+ 0x6e8 => "0x6e8",
+ 0x6e9 => "0x6e9",
+ 0x6ea => "0x6ea",
+ 0x6eb => "0x6eb",
+ 0x6ec => "0x6ec",
+ 0x6ed => "0x6ed",
+ 0x6ee => "0x6ee",
+ 0x6ef => "0x6ef",
+ 0x6f0 => "0x6f0",
+ 0x6f1 => "0x6f1",
+ 0x6f2 => "0x6f2",
+ 0x6f3 => "0x6f3",
+ 0x6f4 => "0x6f4",
+ 0x6f5 => "0x6f5",
+ 0x6f6 => "0x6f6",
+ 0x6f7 => "0x6f7",
+ 0x6f8 => "0x6f8",
+ 0x6f9 => "0x6f9",
+ 0x6fa => "0x6fa",
+ 0x6fb => "0x6fb",
+ 0x6fc => "0x6fc",
+ 0x6fd => "0x6fd",
+ 0x6fe => "0x6fe",
+ 0x6ff => "0x6ff",
+ 0x700 => "0x700",
+ 0x701 => "0x701",
+ 0x702 => "0x702",
+ 0x703 => "0x703",
+ 0x704 => "0x704",
+ 0x705 => "0x705",
+ 0x706 => "0x706",
+ 0x707 => "0x707",
+ 0x708 => "0x708",
+ 0x709 => "0x709",
+ 0x70a => "0x70a",
+ 0x70b => "0x70b",
+ 0x70c => "0x70c",
+ 0x70d => "0x70d",
+ 0x70e => "0x70e",
+ 0x70f => "0x70f",
+ 0x710 => "0x710",
+ 0x711 => "0x711",
+ 0x712 => "0x712",
+ 0x713 => "0x713",
+ 0x714 => "0x714",
+ 0x715 => "0x715",
+ 0x716 => "0x716",
+ 0x717 => "0x717",
+ 0x718 => "0x718",
+ 0x719 => "0x719",
+ 0x71a => "0x71a",
+ 0x71b => "0x71b",
+ 0x71c => "0x71c",
+ 0x71d => "0x71d",
+ 0x71e => "0x71e",
+ 0x71f => "0x71f",
+ 0x720 => "0x720",
+ 0x721 => "0x721",
+ 0x722 => "0x722",
+ 0x723 => "0x723",
+ 0x724 => "0x724",
+ 0x725 => "0x725",
+ 0x726 => "0x726",
+ 0x727 => "0x727",
+ 0x728 => "0x728",
+ 0x729 => "0x729",
+ 0x72a => "0x72a",
+ 0x72b => "0x72b",
+ 0x72c => "0x72c",
+ 0x72d => "0x72d",
+ 0x72e => "0x72e",
+ 0x72f => "0x72f",
+ 0x730 => "0x730",
+ 0x731 => "0x731",
+ 0x732 => "0x732",
+ 0x733 => "0x733",
+ 0x734 => "0x734",
+ 0x735 => "0x735",
+ 0x736 => "0x736",
+ 0x737 => "0x737",
+ 0x738 => "0x738",
+ 0x739 => "0x739",
+ 0x73a => "0x73a",
+ 0x73b => "0x73b",
+ 0x73c => "0x73c",
+ 0x73d => "0x73d",
+ 0x73e => "0x73e",
+ 0x73f => "0x73f",
+ 0x740 => "0x740",
+ 0x741 => "0x741",
+ 0x742 => "0x742",
+ 0x743 => "0x743",
+ 0x744 => "0x744",
+ 0x745 => "0x745",
+ 0x746 => "0x746",
+ 0x747 => "0x747",
+ 0x748 => "0x748",
+ 0x749 => "0x749",
+ 0x74a => "0x74a",
+ 0x74b => "0x74b",
+ 0x74c => "0x74c",
+ 0x74d => "0x74d",
+ 0x74e => "0x74e",
+ 0x74f => "0x74f",
+ 0x750 => "0x750",
+ 0x751 => "0x751",
+ 0x752 => "0x752",
+ 0x753 => "0x753",
+ 0x754 => "0x754",
+ 0x755 => "0x755",
+ 0x756 => "0x756",
+ 0x757 => "0x757",
+ 0x758 => "0x758",
+ 0x759 => "0x759",
+ 0x75a => "0x75a",
+ 0x75b => "0x75b",
+ 0x75c => "0x75c",
+ 0x75d => "0x75d",
+ 0x75e => "0x75e",
+ 0x75f => "0x75f",
+ 0x760 => "0x760",
+ 0x761 => "0x761",
+ 0x762 => "0x762",
+ 0x763 => "0x763",
+ 0x764 => "0x764",
+ 0x765 => "0x765",
+ 0x766 => "0x766",
+ 0x767 => "0x767",
+ 0x768 => "0x768",
+ 0x769 => "0x769",
+ 0x76a => "0x76a",
+ 0x76b => "0x76b",
+ 0x76c => "0x76c",
+ 0x76d => "0x76d",
+ 0x76e => "0x76e",
+ 0x76f => "0x76f",
+ 0x770 => "0x770",
+ 0x771 => "0x771",
+ 0x772 => "0x772",
+ 0x773 => "0x773",
+ 0x774 => "0x774",
+ 0x775 => "0x775",
+ 0x776 => "0x776",
+ 0x777 => "0x777",
+ 0x778 => "0x778",
+ 0x779 => "0x779",
+ 0x77a => "0x77a",
+ 0x77b => "0x77b",
+ 0x77c => "0x77c",
+ 0x77d => "0x77d",
+ 0x77e => "0x77e",
+ 0x77f => "0x77f",
+ 0x780 => "0x780",
+ 0x781 => "0x781",
+ 0x782 => "0x782",
+ 0x783 => "0x783",
+ 0x784 => "0x784",
+ 0x785 => "0x785",
+ 0x786 => "0x786",
+ 0x787 => "0x787",
+ 0x788 => "0x788",
+ 0x789 => "0x789",
+ 0x78a => "0x78a",
+ 0x78b => "0x78b",
+ 0x78c => "0x78c",
+ 0x78d => "0x78d",
+ 0x78e => "0x78e",
+ 0x78f => "0x78f",
+ 0x790 => "0x790",
+ 0x791 => "0x791",
+ 0x792 => "0x792",
+ 0x793 => "0x793",
+ 0x794 => "0x794",
+ 0x795 => "0x795",
+ 0x796 => "0x796",
+ 0x797 => "0x797",
+ 0x798 => "0x798",
+ 0x799 => "0x799",
+ 0x79a => "0x79a",
+ 0x79b => "0x79b",
+ 0x79c => "0x79c",
+ 0x79d => "0x79d",
+ 0x79e => "0x79e",
+ 0x79f => "0x79f",
+ 0x7a0 => "0x7a0",
+ 0x7a1 => "0x7a1",
+ 0x7a2 => "0x7a2",
+ 0x7a3 => "0x7a3",
+ 0x7a4 => "0x7a4",
+ 0x7a5 => "0x7a5",
+ 0x7a6 => "0x7a6",
+ 0x7a7 => "0x7a7",
+ 0x7a8 => "0x7a8",
+ 0x7a9 => "0x7a9",
+ 0x7aa => "0x7aa",
+ 0x7ab => "0x7ab",
+ 0x7ac => "0x7ac",
+ 0x7ad => "0x7ad",
+ 0x7ae => "0x7ae",
+ 0x7af => "0x7af",
+ 0x7b0 => "0x7b0",
+ 0x7b1 => "0x7b1",
+ 0x7b2 => "0x7b2",
+ 0x7b3 => "0x7b3",
+ 0x7b4 => "0x7b4",
+ 0x7b5 => "0x7b5",
+ 0x7b6 => "0x7b6",
+ 0x7b7 => "0x7b7",
+ 0x7b8 => "0x7b8",
+ 0x7b9 => "0x7b9",
+ 0x7ba => "0x7ba",
+ 0x7bb => "0x7bb",
+ 0x7bc => "0x7bc",
+ 0x7bd => "0x7bd",
+ 0x7be => "0x7be",
+ 0x7bf => "0x7bf",
+ 0x7c0 => "0x7c0",
+ 0x7c1 => "0x7c1",
+ 0x7c2 => "0x7c2",
+ 0x7c3 => "0x7c3",
+ 0x7c4 => "0x7c4",
+ 0x7c5 => "0x7c5",
+ 0x7c6 => "0x7c6",
+ 0x7c7 => "0x7c7",
+ 0x7c8 => "0x7c8",
+ 0x7c9 => "0x7c9",
+ 0x7ca => "0x7ca",
+ 0x7cb => "0x7cb",
+ 0x7cc => "0x7cc",
+ 0x7cd => "0x7cd",
+ 0x7ce => "0x7ce",
+ 0x7cf => "0x7cf",
+ 0x7d0 => "0x7d0",
+ 0x7d1 => "0x7d1",
+ 0x7d2 => "0x7d2",
+ 0x7d3 => "0x7d3",
+ 0x7d4 => "0x7d4",
+ 0x7d5 => "0x7d5",
+ 0x7d6 => "0x7d6",
+ 0x7d7 => "0x7d7",
+ 0x7d8 => "0x7d8",
+ 0x7d9 => "0x7d9",
+ 0x7da => "0x7da",
+ 0x7db => "0x7db",
+ 0x7dc => "0x7dc",
+ 0x7dd => "0x7dd",
+ 0x7de => "0x7de",
+ 0x7df => "0x7df",
+ 0x7e0 => "0x7e0",
+ 0x7e1 => "0x7e1",
+ 0x7e2 => "0x7e2",
+ 0x7e3 => "0x7e3",
+ 0x7e4 => "0x7e4",
+ 0x7e5 => "0x7e5",
+ 0x7e6 => "0x7e6",
+ 0x7e7 => "0x7e7",
+ 0x7e8 => "0x7e8",
+ 0x7e9 => "0x7e9",
+ 0x7ea => "0x7ea",
+ 0x7eb => "0x7eb",
+ 0x7ec => "0x7ec",
+ 0x7ed => "0x7ed",
+ 0x7ee => "0x7ee",
+ 0x7ef => "0x7ef",
+ 0x7f0 => "0x7f0",
+ 0x7f1 => "0x7f1",
+ 0x7f2 => "0x7f2",
+ 0x7f3 => "0x7f3",
+ 0x7f4 => "0x7f4",
+ 0x7f5 => "0x7f5",
+ 0x7f6 => "0x7f6",
+ 0x7f7 => "0x7f7",
+ 0x7f8 => "0x7f8",
+ 0x7f9 => "0x7f9",
+ 0x7fa => "0x7fa",
+ 0x7fb => "0x7fb",
+ 0x7fc => "0x7fc",
+ 0x7fd => "0x7fd",
+ 0x7fe => "0x7fe",
+ 0x7ff => "0x7ff",
+ 0x800 => "0x800",
+ 0x801 => "0x801",
+ 0x802 => "0x802",
+ 0x803 => "0x803",
+ 0x804 => "0x804",
+ 0x805 => "0x805",
+ 0x806 => "0x806",
+ 0x807 => "0x807",
+ 0x808 => "0x808",
+ 0x809 => "0x809",
+ 0x80a => "0x80a",
+ 0x80b => "0x80b",
+ 0x80c => "0x80c",
+ 0x80d => "0x80d",
+ 0x80e => "0x80e",
+ 0x80f => "0x80f",
+ 0x810 => "0x810",
+ 0x811 => "0x811",
+ 0x812 => "0x812",
+ 0x813 => "0x813",
+ 0x814 => "0x814",
+ 0x815 => "0x815",
+ 0x816 => "0x816",
+ 0x817 => "0x817",
+ 0x818 => "0x818",
+ 0x819 => "0x819",
+ 0x81a => "0x81a",
+ 0x81b => "0x81b",
+ 0x81c => "0x81c",
+ 0x81d => "0x81d",
+ 0x81e => "0x81e",
+ 0x81f => "0x81f",
+ 0x820 => "0x820",
+ 0x821 => "0x821",
+ 0x822 => "0x822",
+ 0x823 => "0x823",
+ 0x824 => "0x824",
+ 0x825 => "0x825",
+ 0x826 => "0x826",
+ 0x827 => "0x827",
+ 0x828 => "0x828",
+ 0x829 => "0x829",
+ 0x82a => "0x82a",
+ 0x82b => "0x82b",
+ 0x82c => "0x82c",
+ 0x82d => "0x82d",
+ 0x82e => "0x82e",
+ 0x82f => "0x82f",
+ 0x830 => "0x830",
+ 0x831 => "0x831",
+ 0x832 => "0x832",
+ 0x833 => "0x833",
+ 0x834 => "0x834",
+ 0x835 => "0x835",
+ 0x836 => "0x836",
+ 0x837 => "0x837",
+ 0x838 => "0x838",
+ 0x839 => "0x839",
+ 0x83a => "0x83a",
+ 0x83b => "0x83b",
+ 0x83c => "0x83c",
+ 0x83d => "0x83d",
+ 0x83e => "0x83e",
+ 0x83f => "0x83f",
+ 0x840 => "0x840",
+ 0x841 => "0x841",
+ 0x842 => "0x842",
+ 0x843 => "0x843",
+ 0x844 => "0x844",
+ 0x845 => "0x845",
+ 0x846 => "0x846",
+ 0x847 => "0x847",
+ 0x848 => "0x848",
+ 0x849 => "0x849",
+ 0x84a => "0x84a",
+ 0x84b => "0x84b",
+ 0x84c => "0x84c",
+ 0x84d => "0x84d",
+ 0x84e => "0x84e",
+ 0x84f => "0x84f",
+ 0x850 => "0x850",
+ 0x851 => "0x851",
+ 0x852 => "0x852",
+ 0x853 => "0x853",
+ 0x854 => "0x854",
+ 0x855 => "0x855",
+ 0x856 => "0x856",
+ 0x857 => "0x857",
+ 0x858 => "0x858",
+ 0x859 => "0x859",
+ 0x85a => "0x85a",
+ 0x85b => "0x85b",
+ 0x85c => "0x85c",
+ 0x85d => "0x85d",
+ 0x85e => "0x85e",
+ 0x85f => "0x85f",
+ 0x860 => "0x860",
+ 0x861 => "0x861",
+ 0x862 => "0x862",
+ 0x863 => "0x863",
+ 0x864 => "0x864",
+ 0x865 => "0x865",
+ 0x866 => "0x866",
+ 0x867 => "0x867",
+ 0x868 => "0x868",
+ 0x869 => "0x869",
+ 0x86a => "0x86a",
+ 0x86b => "0x86b",
+ 0x86c => "0x86c",
+ 0x86d => "0x86d",
+ 0x86e => "0x86e",
+ 0x86f => "0x86f",
+ 0x870 => "0x870",
+ 0x871 => "0x871",
+ 0x872 => "0x872",
+ 0x873 => "0x873",
+ 0x874 => "0x874",
+ 0x875 => "0x875",
+ 0x876 => "0x876",
+ 0x877 => "0x877",
+ 0x878 => "0x878",
+ 0x879 => "0x879",
+ 0x87a => "0x87a",
+ 0x87b => "0x87b",
+ 0x87c => "0x87c",
+ 0x87d => "0x87d",
+ 0x87e => "0x87e",
+ 0x87f => "0x87f",
+ 0x880 => "0x880",
+ 0x881 => "0x881",
+ 0x882 => "0x882",
+ 0x883 => "0x883",
+ 0x884 => "0x884",
+ 0x885 => "0x885",
+ 0x886 => "0x886",
+ 0x887 => "0x887",
+ 0x888 => "0x888",
+ 0x889 => "0x889",
+ 0x88a => "0x88a",
+ 0x88b => "0x88b",
+ 0x88c => "0x88c",
+ 0x88d => "0x88d",
+ 0x88e => "0x88e",
+ 0x88f => "0x88f",
+ 0x890 => "0x890",
+ 0x891 => "0x891",
+ 0x892 => "0x892",
+ 0x893 => "0x893",
+ 0x894 => "0x894",
+ 0x895 => "0x895",
+ 0x896 => "0x896",
+ 0x897 => "0x897",
+ 0x898 => "0x898",
+ 0x899 => "0x899",
+ 0x89a => "0x89a",
+ 0x89b => "0x89b",
+ 0x89c => "0x89c",
+ 0x89d => "0x89d",
+ 0x89e => "0x89e",
+ 0x89f => "0x89f",
+ 0x8a0 => "0x8a0",
+ 0x8a1 => "0x8a1",
+ 0x8a2 => "0x8a2",
+ 0x8a3 => "0x8a3",
+ 0x8a4 => "0x8a4",
+ 0x8a5 => "0x8a5",
+ 0x8a6 => "0x8a6",
+ 0x8a7 => "0x8a7",
+ 0x8a8 => "0x8a8",
+ 0x8a9 => "0x8a9",
+ 0x8aa => "0x8aa",
+ 0x8ab => "0x8ab",
+ 0x8ac => "0x8ac",
+ 0x8ad => "0x8ad",
+ 0x8ae => "0x8ae",
+ 0x8af => "0x8af",
+ 0x8b0 => "0x8b0",
+ 0x8b1 => "0x8b1",
+ 0x8b2 => "0x8b2",
+ 0x8b3 => "0x8b3",
+ 0x8b4 => "0x8b4",
+ 0x8b5 => "0x8b5",
+ 0x8b6 => "0x8b6",
+ 0x8b7 => "0x8b7",
+ 0x8b8 => "0x8b8",
+ 0x8b9 => "0x8b9",
+ 0x8ba => "0x8ba",
+ 0x8bb => "0x8bb",
+ 0x8bc => "0x8bc",
+ 0x8bd => "0x8bd",
+ 0x8be => "0x8be",
+ 0x8bf => "0x8bf",
+ 0x8c0 => "0x8c0",
+ 0x8c1 => "0x8c1",
+ 0x8c2 => "0x8c2",
+ 0x8c3 => "0x8c3",
+ 0x8c4 => "0x8c4",
+ 0x8c5 => "0x8c5",
+ 0x8c6 => "0x8c6",
+ 0x8c7 => "0x8c7",
+ 0x8c8 => "0x8c8",
+ 0x8c9 => "0x8c9",
+ 0x8ca => "0x8ca",
+ 0x8cb => "0x8cb",
+ 0x8cc => "0x8cc",
+ 0x8cd => "0x8cd",
+ 0x8ce => "0x8ce",
+ 0x8cf => "0x8cf",
+ 0x8d0 => "0x8d0",
+ 0x8d1 => "0x8d1",
+ 0x8d2 => "0x8d2",
+ 0x8d3 => "0x8d3",
+ 0x8d4 => "0x8d4",
+ 0x8d5 => "0x8d5",
+ 0x8d6 => "0x8d6",
+ 0x8d7 => "0x8d7",
+ 0x8d8 => "0x8d8",
+ 0x8d9 => "0x8d9",
+ 0x8da => "0x8da",
+ 0x8db => "0x8db",
+ 0x8dc => "0x8dc",
+ 0x8dd => "0x8dd",
+ 0x8de => "0x8de",
+ 0x8df => "0x8df",
+ 0x8e0 => "0x8e0",
+ 0x8e1 => "0x8e1",
+ 0x8e2 => "0x8e2",
+ 0x8e3 => "0x8e3",
+ 0x8e4 => "0x8e4",
+ 0x8e5 => "0x8e5",
+ 0x8e6 => "0x8e6",
+ 0x8e7 => "0x8e7",
+ 0x8e8 => "0x8e8",
+ 0x8e9 => "0x8e9",
+ 0x8ea => "0x8ea",
+ 0x8eb => "0x8eb",
+ 0x8ec => "0x8ec",
+ 0x8ed => "0x8ed",
+ 0x8ee => "0x8ee",
+ 0x8ef => "0x8ef",
+ 0x8f0 => "0x8f0",
+ 0x8f1 => "0x8f1",
+ 0x8f2 => "0x8f2",
+ 0x8f3 => "0x8f3",
+ 0x8f4 => "0x8f4",
+ 0x8f5 => "0x8f5",
+ 0x8f6 => "0x8f6",
+ 0x8f7 => "0x8f7",
+ 0x8f8 => "0x8f8",
+ 0x8f9 => "0x8f9",
+ 0x8fa => "0x8fa",
+ 0x8fb => "0x8fb",
+ 0x8fc => "0x8fc",
+ 0x8fd => "0x8fd",
+ 0x8fe => "0x8fe",
+ 0x8ff => "0x8ff",
+ 0x900 => "0x900",
+ 0x901 => "0x901",
+ 0x902 => "0x902",
+ 0x903 => "0x903",
+ 0x904 => "0x904",
+ 0x905 => "0x905",
+ 0x906 => "0x906",
+ 0x907 => "0x907",
+ 0x908 => "0x908",
+ 0x909 => "0x909",
+ 0x90a => "0x90a",
+ 0x90b => "0x90b",
+ 0x90c => "0x90c",
+ 0x90d => "0x90d",
+ 0x90e => "0x90e",
+ 0x90f => "0x90f",
+ 0x910 => "0x910",
+ 0x911 => "0x911",
+ 0x912 => "0x912",
+ 0x913 => "0x913",
+ 0x914 => "0x914",
+ 0x915 => "0x915",
+ 0x916 => "0x916",
+ 0x917 => "0x917",
+ 0x918 => "0x918",
+ 0x919 => "0x919",
+ 0x91a => "0x91a",
+ 0x91b => "0x91b",
+ 0x91c => "0x91c",
+ 0x91d => "0x91d",
+ 0x91e => "0x91e",
+ 0x91f => "0x91f",
+ 0x920 => "0x920",
+ 0x921 => "0x921",
+ 0x922 => "0x922",
+ 0x923 => "0x923",
+ 0x924 => "0x924",
+ 0x925 => "0x925",
+ 0x926 => "0x926",
+ 0x927 => "0x927",
+ 0x928 => "0x928",
+ 0x929 => "0x929",
+ 0x92a => "0x92a",
+ 0x92b => "0x92b",
+ 0x92c => "0x92c",
+ 0x92d => "0x92d",
+ 0x92e => "0x92e",
+ 0x92f => "0x92f",
+ 0x930 => "0x930",
+ 0x931 => "0x931",
+ 0x932 => "0x932",
+ 0x933 => "0x933",
+ 0x934 => "0x934",
+ 0x935 => "0x935",
+ 0x936 => "0x936",
+ 0x937 => "0x937",
+ 0x938 => "0x938",
+ 0x939 => "0x939",
+ 0x93a => "0x93a",
+ 0x93b => "0x93b",
+ 0x93c => "0x93c",
+ 0x93d => "0x93d",
+ 0x93e => "0x93e",
+ 0x93f => "0x93f",
+ 0x940 => "0x940",
+ 0x941 => "0x941",
+ 0x942 => "0x942",
+ 0x943 => "0x943",
+ 0x944 => "0x944",
+ 0x945 => "0x945",
+ 0x946 => "0x946",
+ 0x947 => "0x947",
+ 0x948 => "0x948",
+ 0x949 => "0x949",
+ 0x94a => "0x94a",
+ 0x94b => "0x94b",
+ 0x94c => "0x94c",
+ 0x94d => "0x94d",
+ 0x94e => "0x94e",
+ 0x94f => "0x94f",
+ 0x950 => "0x950",
+ 0x951 => "0x951",
+ 0x952 => "0x952",
+ 0x953 => "0x953",
+ 0x954 => "0x954",
+ 0x955 => "0x955",
+ 0x956 => "0x956",
+ 0x957 => "0x957",
+ 0x958 => "0x958",
+ 0x959 => "0x959",
+ 0x95a => "0x95a",
+ 0x95b => "0x95b",
+ 0x95c => "0x95c",
+ 0x95d => "0x95d",
+ 0x95e => "0x95e",
+ 0x95f => "0x95f",
+ 0x960 => "0x960",
+ 0x961 => "0x961",
+ 0x962 => "0x962",
+ 0x963 => "0x963",
+ 0x964 => "0x964",
+ 0x965 => "0x965",
+ 0x966 => "0x966",
+ 0x967 => "0x967",
+ 0x968 => "0x968",
+ 0x969 => "0x969",
+ 0x96a => "0x96a",
+ 0x96b => "0x96b",
+ 0x96c => "0x96c",
+ 0x96d => "0x96d",
+ 0x96e => "0x96e",
+ 0x96f => "0x96f",
+ 0x970 => "0x970",
+ 0x971 => "0x971",
+ 0x972 => "0x972",
+ 0x973 => "0x973",
+ 0x974 => "0x974",
+ 0x975 => "0x975",
+ 0x976 => "0x976",
+ 0x977 => "0x977",
+ 0x978 => "0x978",
+ 0x979 => "0x979",
+ 0x97a => "0x97a",
+ 0x97b => "0x97b",
+ 0x97c => "0x97c",
+ 0x97d => "0x97d",
+ 0x97e => "0x97e",
+ 0x97f => "0x97f",
+ 0x980 => "0x980",
+ 0x981 => "0x981",
+ 0x982 => "0x982",
+ 0x983 => "0x983",
+ 0x984 => "0x984",
+ 0x985 => "0x985",
+ 0x986 => "0x986",
+ 0x987 => "0x987",
+ 0x988 => "0x988",
+ 0x989 => "0x989",
+ 0x98a => "0x98a",
+ 0x98b => "0x98b",
+ 0x98c => "0x98c",
+ 0x98d => "0x98d",
+ 0x98e => "0x98e",
+ 0x98f => "0x98f",
+ 0x990 => "0x990",
+ 0x991 => "0x991",
+ 0x992 => "0x992",
+ 0x993 => "0x993",
+ 0x994 => "0x994",
+ 0x995 => "0x995",
+ 0x996 => "0x996",
+ 0x997 => "0x997",
+ 0x998 => "0x998",
+ 0x999 => "0x999",
+ 0x99a => "0x99a",
+ 0x99b => "0x99b",
+ 0x99c => "0x99c",
+ 0x99d => "0x99d",
+ 0x99e => "0x99e",
+ 0x99f => "0x99f",
+ 0x9a0 => "0x9a0",
+ 0x9a1 => "0x9a1",
+ 0x9a2 => "0x9a2",
+ 0x9a3 => "0x9a3",
+ 0x9a4 => "0x9a4",
+ 0x9a5 => "0x9a5",
+ 0x9a6 => "0x9a6",
+ 0x9a7 => "0x9a7",
+ 0x9a8 => "0x9a8",
+ 0x9a9 => "0x9a9",
+ 0x9aa => "0x9aa",
+ 0x9ab => "0x9ab",
+ 0x9ac => "0x9ac",
+ 0x9ad => "0x9ad",
+ 0x9ae => "0x9ae",
+ 0x9af => "0x9af",
+ 0x9b0 => "0x9b0",
+ 0x9b1 => "0x9b1",
+ 0x9b2 => "0x9b2",
+ 0x9b3 => "0x9b3",
+ 0x9b4 => "0x9b4",
+ 0x9b5 => "0x9b5",
+ 0x9b6 => "0x9b6",
+ 0x9b7 => "0x9b7",
+ 0x9b8 => "0x9b8",
+ 0x9b9 => "0x9b9",
+ 0x9ba => "0x9ba",
+ 0x9bb => "0x9bb",
+ 0x9bc => "0x9bc",
+ 0x9bd => "0x9bd",
+ 0x9be => "0x9be",
+ 0x9bf => "0x9bf",
+ 0x9c0 => "0x9c0",
+ 0x9c1 => "0x9c1",
+ 0x9c2 => "0x9c2",
+ 0x9c3 => "0x9c3",
+ 0x9c4 => "0x9c4",
+ 0x9c5 => "0x9c5",
+ 0x9c6 => "0x9c6",
+ 0x9c7 => "0x9c7",
+ 0x9c8 => "0x9c8",
+ 0x9c9 => "0x9c9",
+ 0x9ca => "0x9ca",
+ 0x9cb => "0x9cb",
+ 0x9cc => "0x9cc",
+ 0x9cd => "0x9cd",
+ 0x9ce => "0x9ce",
+ 0x9cf => "0x9cf",
+ 0x9d0 => "0x9d0",
+ 0x9d1 => "0x9d1",
+ 0x9d2 => "0x9d2",
+ 0x9d3 => "0x9d3",
+ 0x9d4 => "0x9d4",
+ 0x9d5 => "0x9d5",
+ 0x9d6 => "0x9d6",
+ 0x9d7 => "0x9d7",
+ 0x9d8 => "0x9d8",
+ 0x9d9 => "0x9d9",
+ 0x9da => "0x9da",
+ 0x9db => "0x9db",
+ 0x9dc => "0x9dc",
+ 0x9dd => "0x9dd",
+ 0x9de => "0x9de",
+ 0x9df => "0x9df",
+ 0x9e0 => "0x9e0",
+ 0x9e1 => "0x9e1",
+ 0x9e2 => "0x9e2",
+ 0x9e3 => "0x9e3",
+ 0x9e4 => "0x9e4",
+ 0x9e5 => "0x9e5",
+ 0x9e6 => "0x9e6",
+ 0x9e7 => "0x9e7",
+ 0x9e8 => "0x9e8",
+ 0x9e9 => "0x9e9",
+ 0x9ea => "0x9ea",
+ 0x9eb => "0x9eb",
+ 0x9ec => "0x9ec",
+ 0x9ed => "0x9ed",
+ 0x9ee => "0x9ee",
+ 0x9ef => "0x9ef",
+ 0x9f0 => "0x9f0",
+ 0x9f1 => "0x9f1",
+ 0x9f2 => "0x9f2",
+ 0x9f3 => "0x9f3",
+ 0x9f4 => "0x9f4",
+ 0x9f5 => "0x9f5",
+ 0x9f6 => "0x9f6",
+ 0x9f7 => "0x9f7",
+ 0x9f8 => "0x9f8",
+ 0x9f9 => "0x9f9",
+ 0x9fa => "0x9fa",
+ 0x9fb => "0x9fb",
+ 0x9fc => "0x9fc",
+ 0x9fd => "0x9fd",
+ 0x9fe => "0x9fe",
+ 0x9ff => "0x9ff",
+ 0xa00 => "0xa00",
+ 0xa01 => "0xa01",
+ 0xa02 => "0xa02",
+ 0xa03 => "0xa03",
+ 0xa04 => "0xa04",
+ 0xa05 => "0xa05",
+ 0xa06 => "0xa06",
+ 0xa07 => "0xa07",
+ 0xa08 => "0xa08",
+ 0xa09 => "0xa09",
+ 0xa0a => "0xa0a",
+ 0xa0b => "0xa0b",
+ 0xa0c => "0xa0c",
+ 0xa0d => "0xa0d",
+ 0xa0e => "0xa0e",
+ 0xa0f => "0xa0f",
+ 0xa10 => "0xa10",
+ 0xa11 => "0xa11",
+ 0xa12 => "0xa12",
+ 0xa13 => "0xa13",
+ 0xa14 => "0xa14",
+ 0xa15 => "0xa15",
+ 0xa16 => "0xa16",
+ 0xa17 => "0xa17",
+ 0xa18 => "0xa18",
+ 0xa19 => "0xa19",
+ 0xa1a => "0xa1a",
+ 0xa1b => "0xa1b",
+ 0xa1c => "0xa1c",
+ 0xa1d => "0xa1d",
+ 0xa1e => "0xa1e",
+ 0xa1f => "0xa1f",
+ 0xa20 => "0xa20",
+ 0xa21 => "0xa21",
+ 0xa22 => "0xa22",
+ 0xa23 => "0xa23",
+ 0xa24 => "0xa24",
+ 0xa25 => "0xa25",
+ 0xa26 => "0xa26",
+ 0xa27 => "0xa27",
+ 0xa28 => "0xa28",
+ 0xa29 => "0xa29",
+ 0xa2a => "0xa2a",
+ 0xa2b => "0xa2b",
+ 0xa2c => "0xa2c",
+ 0xa2d => "0xa2d",
+ 0xa2e => "0xa2e",
+ 0xa2f => "0xa2f",
+ 0xa30 => "0xa30",
+ 0xa31 => "0xa31",
+ 0xa32 => "0xa32",
+ 0xa33 => "0xa33",
+ 0xa34 => "0xa34",
+ 0xa35 => "0xa35",
+ 0xa36 => "0xa36",
+ 0xa37 => "0xa37",
+ 0xa38 => "0xa38",
+ 0xa39 => "0xa39",
+ 0xa3a => "0xa3a",
+ 0xa3b => "0xa3b",
+ 0xa3c => "0xa3c",
+ 0xa3d => "0xa3d",
+ 0xa3e => "0xa3e",
+ 0xa3f => "0xa3f",
+ 0xa40 => "0xa40",
+ 0xa41 => "0xa41",
+ 0xa42 => "0xa42",
+ 0xa43 => "0xa43",
+ 0xa44 => "0xa44",
+ 0xa45 => "0xa45",
+ 0xa46 => "0xa46",
+ 0xa47 => "0xa47",
+ 0xa48 => "0xa48",
+ 0xa49 => "0xa49",
+ 0xa4a => "0xa4a",
+ 0xa4b => "0xa4b",
+ 0xa4c => "0xa4c",
+ 0xa4d => "0xa4d",
+ 0xa4e => "0xa4e",
+ 0xa4f => "0xa4f",
+ 0xa50 => "0xa50",
+ 0xa51 => "0xa51",
+ 0xa52 => "0xa52",
+ 0xa53 => "0xa53",
+ 0xa54 => "0xa54",
+ 0xa55 => "0xa55",
+ 0xa56 => "0xa56",
+ 0xa57 => "0xa57",
+ 0xa58 => "0xa58",
+ 0xa59 => "0xa59",
+ 0xa5a => "0xa5a",
+ 0xa5b => "0xa5b",
+ 0xa5c => "0xa5c",
+ 0xa5d => "0xa5d",
+ 0xa5e => "0xa5e",
+ 0xa5f => "0xa5f",
+ 0xa60 => "0xa60",
+ 0xa61 => "0xa61",
+ 0xa62 => "0xa62",
+ 0xa63 => "0xa63",
+ 0xa64 => "0xa64",
+ 0xa65 => "0xa65",
+ 0xa66 => "0xa66",
+ 0xa67 => "0xa67",
+ 0xa68 => "0xa68",
+ 0xa69 => "0xa69",
+ 0xa6a => "0xa6a",
+ 0xa6b => "0xa6b",
+ 0xa6c => "0xa6c",
+ 0xa6d => "0xa6d",
+ 0xa6e => "0xa6e",
+ 0xa6f => "0xa6f",
+ 0xa70 => "0xa70",
+ 0xa71 => "0xa71",
+ 0xa72 => "0xa72",
+ 0xa73 => "0xa73",
+ 0xa74 => "0xa74",
+ 0xa75 => "0xa75",
+ 0xa76 => "0xa76",
+ 0xa77 => "0xa77",
+ 0xa78 => "0xa78",
+ 0xa79 => "0xa79",
+ 0xa7a => "0xa7a",
+ 0xa7b => "0xa7b",
+ 0xa7c => "0xa7c",
+ 0xa7d => "0xa7d",
+ 0xa7e => "0xa7e",
+ 0xa7f => "0xa7f",
+ 0xa80 => "0xa80",
+ 0xa81 => "0xa81",
+ 0xa82 => "0xa82",
+ 0xa83 => "0xa83",
+ 0xa84 => "0xa84",
+ 0xa85 => "0xa85",
+ 0xa86 => "0xa86",
+ 0xa87 => "0xa87",
+ 0xa88 => "0xa88",
+ 0xa89 => "0xa89",
+ 0xa8a => "0xa8a",
+ 0xa8b => "0xa8b",
+ 0xa8c => "0xa8c",
+ 0xa8d => "0xa8d",
+ 0xa8e => "0xa8e",
+ 0xa8f => "0xa8f",
+ 0xa90 => "0xa90",
+ 0xa91 => "0xa91",
+ 0xa92 => "0xa92",
+ 0xa93 => "0xa93",
+ 0xa94 => "0xa94",
+ 0xa95 => "0xa95",
+ 0xa96 => "0xa96",
+ 0xa97 => "0xa97",
+ 0xa98 => "0xa98",
+ 0xa99 => "0xa99",
+ 0xa9a => "0xa9a",
+ 0xa9b => "0xa9b",
+ 0xa9c => "0xa9c",
+ 0xa9d => "0xa9d",
+ 0xa9e => "0xa9e",
+ 0xa9f => "0xa9f",
+ 0xaa0 => "0xaa0",
+ 0xaa1 => "0xaa1",
+ 0xaa2 => "0xaa2",
+ 0xaa3 => "0xaa3",
+ 0xaa4 => "0xaa4",
+ 0xaa5 => "0xaa5",
+ 0xaa6 => "0xaa6",
+ 0xaa7 => "0xaa7",
+ 0xaa8 => "0xaa8",
+ 0xaa9 => "0xaa9",
+ 0xaaa => "0xaaa",
+ 0xaab => "0xaab",
+ 0xaac => "0xaac",
+ 0xaad => "0xaad",
+ 0xaae => "0xaae",
+ 0xaaf => "0xaaf",
+ 0xab0 => "0xab0",
+ 0xab1 => "0xab1",
+ 0xab2 => "0xab2",
+ 0xab3 => "0xab3",
+ 0xab4 => "0xab4",
+ 0xab5 => "0xab5",
+ 0xab6 => "0xab6",
+ 0xab7 => "0xab7",
+ 0xab8 => "0xab8",
+ 0xab9 => "0xab9",
+ 0xaba => "0xaba",
+ 0xabb => "0xabb",
+ 0xabc => "0xabc",
+ 0xabd => "0xabd",
+ 0xabe => "0xabe",
+ 0xabf => "0xabf",
+ 0xac0 => "0xac0",
+ 0xac1 => "0xac1",
+ 0xac2 => "0xac2",
+ 0xac3 => "0xac3",
+ 0xac4 => "0xac4",
+ 0xac5 => "0xac5",
+ 0xac6 => "0xac6",
+ 0xac7 => "0xac7",
+ 0xac8 => "0xac8",
+ 0xac9 => "0xac9",
+ 0xaca => "0xaca",
+ 0xacb => "0xacb",
+ 0xacc => "0xacc",
+ 0xacd => "0xacd",
+ 0xace => "0xace",
+ 0xacf => "0xacf",
+ 0xad0 => "0xad0",
+ 0xad1 => "0xad1",
+ 0xad2 => "0xad2",
+ 0xad3 => "0xad3",
+ 0xad4 => "0xad4",
+ 0xad5 => "0xad5",
+ 0xad6 => "0xad6",
+ 0xad7 => "0xad7",
+ 0xad8 => "0xad8",
+ 0xad9 => "0xad9",
+ 0xada => "0xada",
+ 0xadb => "0xadb",
+ 0xadc => "0xadc",
+ 0xadd => "0xadd",
+ 0xade => "0xade",
+ 0xadf => "0xadf",
+ 0xae0 => "0xae0",
+ 0xae1 => "0xae1",
+ 0xae2 => "0xae2",
+ 0xae3 => "0xae3",
+ 0xae4 => "0xae4",
+ 0xae5 => "0xae5",
+ 0xae6 => "0xae6",
+ 0xae7 => "0xae7",
+ 0xae8 => "0xae8",
+ 0xae9 => "0xae9",
+ 0xaea => "0xaea",
+ 0xaeb => "0xaeb",
+ 0xaec => "0xaec",
+ 0xaed => "0xaed",
+ 0xaee => "0xaee",
+ 0xaef => "0xaef",
+ 0xaf0 => "0xaf0",
+ 0xaf1 => "0xaf1",
+ 0xaf2 => "0xaf2",
+ 0xaf3 => "0xaf3",
+ 0xaf4 => "0xaf4",
+ 0xaf5 => "0xaf5",
+ 0xaf6 => "0xaf6",
+ 0xaf7 => "0xaf7",
+ 0xaf8 => "0xaf8",
+ 0xaf9 => "0xaf9",
+ 0xafa => "0xafa",
+ 0xafb => "0xafb",
+ 0xafc => "0xafc",
+ 0xafd => "0xafd",
+ 0xafe => "0xafe",
+ 0xaff => "0xaff",
+ 0xb00 => "0xb00",
+ 0xb01 => "0xb01",
+ 0xb02 => "0xb02",
+ 0xb03 => "0xb03",
+ 0xb04 => "0xb04",
+ 0xb05 => "0xb05",
+ 0xb06 => "0xb06",
+ 0xb07 => "0xb07",
+ 0xb08 => "0xb08",
+ 0xb09 => "0xb09",
+ 0xb0a => "0xb0a",
+ 0xb0b => "0xb0b",
+ 0xb0c => "0xb0c",
+ 0xb0d => "0xb0d",
+ 0xb0e => "0xb0e",
+ 0xb0f => "0xb0f",
+ 0xb10 => "0xb10",
+ 0xb11 => "0xb11",
+ 0xb12 => "0xb12",
+ 0xb13 => "0xb13",
+ 0xb14 => "0xb14",
+ 0xb15 => "0xb15",
+ 0xb16 => "0xb16",
+ 0xb17 => "0xb17",
+ 0xb18 => "0xb18",
+ 0xb19 => "0xb19",
+ 0xb1a => "0xb1a",
+ 0xb1b => "0xb1b",
+ 0xb1c => "0xb1c",
+ 0xb1d => "0xb1d",
+ 0xb1e => "0xb1e",
+ 0xb1f => "0xb1f",
+ 0xb20 => "0xb20",
+ 0xb21 => "0xb21",
+ 0xb22 => "0xb22",
+ 0xb23 => "0xb23",
+ 0xb24 => "0xb24",
+ 0xb25 => "0xb25",
+ 0xb26 => "0xb26",
+ 0xb27 => "0xb27",
+ 0xb28 => "0xb28",
+ 0xb29 => "0xb29",
+ 0xb2a => "0xb2a",
+ 0xb2b => "0xb2b",
+ 0xb2c => "0xb2c",
+ 0xb2d => "0xb2d",
+ 0xb2e => "0xb2e",
+ 0xb2f => "0xb2f",
+ 0xb30 => "0xb30",
+ 0xb31 => "0xb31",
+ 0xb32 => "0xb32",
+ 0xb33 => "0xb33",
+ 0xb34 => "0xb34",
+ 0xb35 => "0xb35",
+ 0xb36 => "0xb36",
+ 0xb37 => "0xb37",
+ 0xb38 => "0xb38",
+ 0xb39 => "0xb39",
+ 0xb3a => "0xb3a",
+ 0xb3b => "0xb3b",
+ 0xb3c => "0xb3c",
+ 0xb3d => "0xb3d",
+ 0xb3e => "0xb3e",
+ 0xb3f => "0xb3f",
+ 0xb40 => "0xb40",
+ 0xb41 => "0xb41",
+ 0xb42 => "0xb42",
+ 0xb43 => "0xb43",
+ 0xb44 => "0xb44",
+ 0xb45 => "0xb45",
+ 0xb46 => "0xb46",
+ 0xb47 => "0xb47",
+ 0xb48 => "0xb48",
+ 0xb49 => "0xb49",
+ 0xb4a => "0xb4a",
+ 0xb4b => "0xb4b",
+ 0xb4c => "0xb4c",
+ 0xb4d => "0xb4d",
+ 0xb4e => "0xb4e",
+ 0xb4f => "0xb4f",
+ 0xb50 => "0xb50",
+ 0xb51 => "0xb51",
+ 0xb52 => "0xb52",
+ 0xb53 => "0xb53",
+ 0xb54 => "0xb54",
+ 0xb55 => "0xb55",
+ 0xb56 => "0xb56",
+ 0xb57 => "0xb57",
+ 0xb58 => "0xb58",
+ 0xb59 => "0xb59",
+ 0xb5a => "0xb5a",
+ 0xb5b => "0xb5b",
+ 0xb5c => "0xb5c",
+ 0xb5d => "0xb5d",
+ 0xb5e => "0xb5e",
+ 0xb5f => "0xb5f",
+ 0xb60 => "0xb60",
+ 0xb61 => "0xb61",
+ 0xb62 => "0xb62",
+ 0xb63 => "0xb63",
+ 0xb64 => "0xb64",
+ 0xb65 => "0xb65",
+ 0xb66 => "0xb66",
+ 0xb67 => "0xb67",
+ 0xb68 => "0xb68",
+ 0xb69 => "0xb69",
+ 0xb6a => "0xb6a",
+ 0xb6b => "0xb6b",
+ 0xb6c => "0xb6c",
+ 0xb6d => "0xb6d",
+ 0xb6e => "0xb6e",
+ 0xb6f => "0xb6f",
+ 0xb70 => "0xb70",
+ 0xb71 => "0xb71",
+ 0xb72 => "0xb72",
+ 0xb73 => "0xb73",
+ 0xb74 => "0xb74",
+ 0xb75 => "0xb75",
+ 0xb76 => "0xb76",
+ 0xb77 => "0xb77",
+ 0xb78 => "0xb78",
+ 0xb79 => "0xb79",
+ 0xb7a => "0xb7a",
+ 0xb7b => "0xb7b",
+ 0xb7c => "0xb7c",
+ 0xb7d => "0xb7d",
+ 0xb7e => "0xb7e",
+ 0xb7f => "0xb7f",
+ 0xb80 => "0xb80",
+ 0xb81 => "0xb81",
+ 0xb82 => "0xb82",
+ 0xb83 => "0xb83",
+ 0xb84 => "0xb84",
+ 0xb85 => "0xb85",
+ 0xb86 => "0xb86",
+ 0xb87 => "0xb87",
+ 0xb88 => "0xb88",
+ 0xb89 => "0xb89",
+ 0xb8a => "0xb8a",
+ 0xb8b => "0xb8b",
+ 0xb8c => "0xb8c",
+ 0xb8d => "0xb8d",
+ 0xb8e => "0xb8e",
+ 0xb8f => "0xb8f",
+ 0xb90 => "0xb90",
+ 0xb91 => "0xb91",
+ 0xb92 => "0xb92",
+ 0xb93 => "0xb93",
+ 0xb94 => "0xb94",
+ 0xb95 => "0xb95",
+ 0xb96 => "0xb96",
+ 0xb97 => "0xb97",
+ 0xb98 => "0xb98",
+ 0xb99 => "0xb99",
+ 0xb9a => "0xb9a",
+ 0xb9b => "0xb9b",
+ 0xb9c => "0xb9c",
+ 0xb9d => "0xb9d",
+ 0xb9e => "0xb9e",
+ 0xb9f => "0xb9f",
+ 0xba0 => "0xba0",
+ 0xba1 => "0xba1",
+ 0xba2 => "0xba2",
+ 0xba3 => "0xba3",
+ 0xba4 => "0xba4",
+ 0xba5 => "0xba5",
+ 0xba6 => "0xba6",
+ 0xba7 => "0xba7",
+ 0xba8 => "0xba8",
+ 0xba9 => "0xba9",
+ 0xbaa => "0xbaa",
+ 0xbab => "0xbab",
+ 0xbac => "0xbac",
+ 0xbad => "0xbad",
+ 0xbae => "0xbae",
+ 0xbaf => "0xbaf",
+ 0xbb0 => "0xbb0",
+ 0xbb1 => "0xbb1",
+ 0xbb2 => "0xbb2",
+ 0xbb3 => "0xbb3",
+ 0xbb4 => "0xbb4",
+ 0xbb5 => "0xbb5",
+ 0xbb6 => "0xbb6",
+ 0xbb7 => "0xbb7",
+ 0xbb8 => "0xbb8",
+ 0xbb9 => "0xbb9",
+ 0xbba => "0xbba",
+ 0xbbb => "0xbbb",
+ 0xbbc => "0xbbc",
+ 0xbbd => "0xbbd",
+ 0xbbe => "0xbbe",
+ 0xbbf => "0xbbf",
+ 0xbc0 => "0xbc0",
+ 0xbc1 => "0xbc1",
+ 0xbc2 => "0xbc2",
+ 0xbc3 => "0xbc3",
+ 0xbc4 => "0xbc4",
+ 0xbc5 => "0xbc5",
+ 0xbc6 => "0xbc6",
+ 0xbc7 => "0xbc7",
+ 0xbc8 => "0xbc8",
+ 0xbc9 => "0xbc9",
+ 0xbca => "0xbca",
+ 0xbcb => "0xbcb",
+ 0xbcc => "0xbcc",
+ 0xbcd => "0xbcd",
+ 0xbce => "0xbce",
+ 0xbcf => "0xbcf",
+ 0xbd0 => "0xbd0",
+ 0xbd1 => "0xbd1",
+ 0xbd2 => "0xbd2",
+ 0xbd3 => "0xbd3",
+ 0xbd4 => "0xbd4",
+ 0xbd5 => "0xbd5",
+ 0xbd6 => "0xbd6",
+ 0xbd7 => "0xbd7",
+ 0xbd8 => "0xbd8",
+ 0xbd9 => "0xbd9",
+ 0xbda => "0xbda",
+ 0xbdb => "0xbdb",
+ 0xbdc => "0xbdc",
+ 0xbdd => "0xbdd",
+ 0xbde => "0xbde",
+ 0xbdf => "0xbdf",
+ 0xbe0 => "0xbe0",
+ 0xbe1 => "0xbe1",
+ 0xbe2 => "0xbe2",
+ 0xbe3 => "0xbe3",
+ 0xbe4 => "0xbe4",
+ 0xbe5 => "0xbe5",
+ 0xbe6 => "0xbe6",
+ 0xbe7 => "0xbe7",
+ 0xbe8 => "0xbe8",
+ 0xbe9 => "0xbe9",
+ 0xbea => "0xbea",
+ 0xbeb => "0xbeb",
+ 0xbec => "0xbec",
+ 0xbed => "0xbed",
+ 0xbee => "0xbee",
+ 0xbef => "0xbef",
+ 0xbf0 => "0xbf0",
+ 0xbf1 => "0xbf1",
+ 0xbf2 => "0xbf2",
+ 0xbf3 => "0xbf3",
+ 0xbf4 => "0xbf4",
+ 0xbf5 => "0xbf5",
+ 0xbf6 => "0xbf6",
+ 0xbf7 => "0xbf7",
+ 0xbf8 => "0xbf8",
+ 0xbf9 => "0xbf9",
+ 0xbfa => "0xbfa",
+ 0xbfb => "0xbfb",
+ 0xbfc => "0xbfc",
+ 0xbfd => "0xbfd",
+ 0xbfe => "0xbfe",
+ 0xbff => "0xbff",
+ 0xc00 => "0xc00",
+ 0xc01 => "0xc01",
+ 0xc02 => "0xc02",
+ 0xc03 => "0xc03",
+ 0xc04 => "0xc04",
+ 0xc05 => "0xc05",
+ 0xc06 => "0xc06",
+ 0xc07 => "0xc07",
+ 0xc08 => "0xc08",
+ 0xc09 => "0xc09",
+ 0xc0a => "0xc0a",
+ 0xc0b => "0xc0b",
+ 0xc0c => "0xc0c",
+ 0xc0d => "0xc0d",
+ 0xc0e => "0xc0e",
+ 0xc0f => "0xc0f",
+ 0xc10 => "0xc10",
+ 0xc11 => "0xc11",
+ 0xc12 => "0xc12",
+ 0xc13 => "0xc13",
+ 0xc14 => "0xc14",
+ 0xc15 => "0xc15",
+ 0xc16 => "0xc16",
+ 0xc17 => "0xc17",
+ 0xc18 => "0xc18",
+ 0xc19 => "0xc19",
+ 0xc1a => "0xc1a",
+ 0xc1b => "0xc1b",
+ 0xc1c => "0xc1c",
+ 0xc1d => "0xc1d",
+ 0xc1e => "0xc1e",
+ 0xc1f => "0xc1f",
+ 0xc20 => "0xc20",
+ 0xc21 => "0xc21",
+ 0xc22 => "0xc22",
+ 0xc23 => "0xc23",
+ 0xc24 => "0xc24",
+ 0xc25 => "0xc25",
+ 0xc26 => "0xc26",
+ 0xc27 => "0xc27",
+ 0xc28 => "0xc28",
+ 0xc29 => "0xc29",
+ 0xc2a => "0xc2a",
+ 0xc2b => "0xc2b",
+ 0xc2c => "0xc2c",
+ 0xc2d => "0xc2d",
+ 0xc2e => "0xc2e",
+ 0xc2f => "0xc2f",
+ 0xc30 => "0xc30",
+ 0xc31 => "0xc31",
+ 0xc32 => "0xc32",
+ 0xc33 => "0xc33",
+ 0xc34 => "0xc34",
+ 0xc35 => "0xc35",
+ 0xc36 => "0xc36",
+ 0xc37 => "0xc37",
+ 0xc38 => "0xc38",
+ 0xc39 => "0xc39",
+ 0xc3a => "0xc3a",
+ 0xc3b => "0xc3b",
+ 0xc3c => "0xc3c",
+ 0xc3d => "0xc3d",
+ 0xc3e => "0xc3e",
+ 0xc3f => "0xc3f",
+ 0xc40 => "0xc40",
+ 0xc41 => "0xc41",
+ 0xc42 => "0xc42",
+ 0xc43 => "0xc43",
+ 0xc44 => "0xc44",
+ 0xc45 => "0xc45",
+ 0xc46 => "0xc46",
+ 0xc47 => "0xc47",
+ 0xc48 => "0xc48",
+ 0xc49 => "0xc49",
+ 0xc4a => "0xc4a",
+ 0xc4b => "0xc4b",
+ 0xc4c => "0xc4c",
+ 0xc4d => "0xc4d",
+ 0xc4e => "0xc4e",
+ 0xc4f => "0xc4f",
+ 0xc50 => "0xc50",
+ 0xc51 => "0xc51",
+ 0xc52 => "0xc52",
+ 0xc53 => "0xc53",
+ 0xc54 => "0xc54",
+ 0xc55 => "0xc55",
+ 0xc56 => "0xc56",
+ 0xc57 => "0xc57",
+ 0xc58 => "0xc58",
+ 0xc59 => "0xc59",
+ 0xc5a => "0xc5a",
+ 0xc5b => "0xc5b",
+ 0xc5c => "0xc5c",
+ 0xc5d => "0xc5d",
+ 0xc5e => "0xc5e",
+ 0xc5f => "0xc5f",
+ 0xc60 => "0xc60",
+ 0xc61 => "0xc61",
+ 0xc62 => "0xc62",
+ 0xc63 => "0xc63",
+ 0xc64 => "0xc64",
+ 0xc65 => "0xc65",
+ 0xc66 => "0xc66",
+ 0xc67 => "0xc67",
+ 0xc68 => "0xc68",
+ 0xc69 => "0xc69",
+ 0xc6a => "0xc6a",
+ 0xc6b => "0xc6b",
+ 0xc6c => "0xc6c",
+ 0xc6d => "0xc6d",
+ 0xc6e => "0xc6e",
+ 0xc6f => "0xc6f",
+ 0xc70 => "0xc70",
+ 0xc71 => "0xc71",
+ 0xc72 => "0xc72",
+ 0xc73 => "0xc73",
+ 0xc74 => "0xc74",
+ 0xc75 => "0xc75",
+ 0xc76 => "0xc76",
+ 0xc77 => "0xc77",
+ 0xc78 => "0xc78",
+ 0xc79 => "0xc79",
+ 0xc7a => "0xc7a",
+ 0xc7b => "0xc7b",
+ 0xc7c => "0xc7c",
+ 0xc7d => "0xc7d",
+ 0xc7e => "0xc7e",
+ 0xc7f => "0xc7f",
+ 0xc80 => "0xc80",
+ 0xc81 => "0xc81",
+ 0xc82 => "0xc82",
+ 0xc83 => "0xc83",
+ 0xc84 => "0xc84",
+ 0xc85 => "0xc85",
+ 0xc86 => "0xc86",
+ 0xc87 => "0xc87",
+ 0xc88 => "0xc88",
+ 0xc89 => "0xc89",
+ 0xc8a => "0xc8a",
+ 0xc8b => "0xc8b",
+ 0xc8c => "0xc8c",
+ 0xc8d => "0xc8d",
+ 0xc8e => "0xc8e",
+ 0xc8f => "0xc8f",
+ 0xc90 => "0xc90",
+ 0xc91 => "0xc91",
+ 0xc92 => "0xc92",
+ 0xc93 => "0xc93",
+ 0xc94 => "0xc94",
+ 0xc95 => "0xc95",
+ 0xc96 => "0xc96",
+ 0xc97 => "0xc97",
+ 0xc98 => "0xc98",
+ 0xc99 => "0xc99",
+ 0xc9a => "0xc9a",
+ 0xc9b => "0xc9b",
+ 0xc9c => "0xc9c",
+ 0xc9d => "0xc9d",
+ 0xc9e => "0xc9e",
+ 0xc9f => "0xc9f",
+ 0xca0 => "0xca0",
+ 0xca1 => "0xca1",
+ 0xca2 => "0xca2",
+ 0xca3 => "0xca3",
+ 0xca4 => "0xca4",
+ 0xca5 => "0xca5",
+ 0xca6 => "0xca6",
+ 0xca7 => "0xca7",
+ 0xca8 => "0xca8",
+ 0xca9 => "0xca9",
+ 0xcaa => "0xcaa",
+ 0xcab => "0xcab",
+ 0xcac => "0xcac",
+ 0xcad => "0xcad",
+ 0xcae => "0xcae",
+ 0xcaf => "0xcaf",
+ 0xcb0 => "0xcb0",
+ 0xcb1 => "0xcb1",
+ 0xcb2 => "0xcb2",
+ 0xcb3 => "0xcb3",
+ 0xcb4 => "0xcb4",
+ 0xcb5 => "0xcb5",
+ 0xcb6 => "0xcb6",
+ 0xcb7 => "0xcb7",
+ 0xcb8 => "0xcb8",
+ 0xcb9 => "0xcb9",
+ 0xcba => "0xcba",
+ 0xcbb => "0xcbb",
+ 0xcbc => "0xcbc",
+ 0xcbd => "0xcbd",
+ 0xcbe => "0xcbe",
+ 0xcbf => "0xcbf",
+ 0xcc0 => "0xcc0",
+ 0xcc1 => "0xcc1",
+ 0xcc2 => "0xcc2",
+ 0xcc3 => "0xcc3",
+ 0xcc4 => "0xcc4",
+ 0xcc5 => "0xcc5",
+ 0xcc6 => "0xcc6",
+ 0xcc7 => "0xcc7",
+ 0xcc8 => "0xcc8",
+ 0xcc9 => "0xcc9",
+ 0xcca => "0xcca",
+ 0xccb => "0xccb",
+ 0xccc => "0xccc",
+ 0xccd => "0xccd",
+ 0xcce => "0xcce",
+ 0xccf => "0xccf",
+ 0xcd0 => "0xcd0",
+ 0xcd1 => "0xcd1",
+ 0xcd2 => "0xcd2",
+ 0xcd3 => "0xcd3",
+ 0xcd4 => "0xcd4",
+ 0xcd5 => "0xcd5",
+ 0xcd6 => "0xcd6",
+ 0xcd7 => "0xcd7",
+ 0xcd8 => "0xcd8",
+ 0xcd9 => "0xcd9",
+ 0xcda => "0xcda",
+ 0xcdb => "0xcdb",
+ 0xcdc => "0xcdc",
+ 0xcdd => "0xcdd",
+ 0xcde => "0xcde",
+ 0xcdf => "0xcdf",
+ 0xce0 => "0xce0",
+ 0xce1 => "0xce1",
+ 0xce2 => "0xce2",
+ 0xce3 => "0xce3",
+ 0xce4 => "0xce4",
+ 0xce5 => "0xce5",
+ 0xce6 => "0xce6",
+ 0xce7 => "0xce7",
+ 0xce8 => "0xce8",
+ 0xce9 => "0xce9",
+ 0xcea => "0xcea",
+ 0xceb => "0xceb",
+ 0xcec => "0xcec",
+ 0xced => "0xced",
+ 0xcee => "0xcee",
+ 0xcef => "0xcef",
+ 0xcf0 => "0xcf0",
+ 0xcf1 => "0xcf1",
+ 0xcf2 => "0xcf2",
+ 0xcf3 => "0xcf3",
+ 0xcf4 => "0xcf4",
+ 0xcf5 => "0xcf5",
+ 0xcf6 => "0xcf6",
+ 0xcf7 => "0xcf7",
+ 0xcf8 => "0xcf8",
+ 0xcf9 => "0xcf9",
+ 0xcfa => "0xcfa",
+ 0xcfb => "0xcfb",
+ 0xcfc => "0xcfc",
+ 0xcfd => "0xcfd",
+ 0xcfe => "0xcfe",
+ 0xcff => "0xcff",
+ 0xd00 => "0xd00",
+ 0xd01 => "0xd01",
+ 0xd02 => "0xd02",
+ 0xd03 => "0xd03",
+ 0xd04 => "0xd04",
+ 0xd05 => "0xd05",
+ 0xd06 => "0xd06",
+ 0xd07 => "0xd07",
+ 0xd08 => "0xd08",
+ 0xd09 => "0xd09",
+ 0xd0a => "0xd0a",
+ 0xd0b => "0xd0b",
+ 0xd0c => "0xd0c",
+ 0xd0d => "0xd0d",
+ 0xd0e => "0xd0e",
+ 0xd0f => "0xd0f",
+ 0xd10 => "0xd10",
+ 0xd11 => "0xd11",
+ 0xd12 => "0xd12",
+ 0xd13 => "0xd13",
+ 0xd14 => "0xd14",
+ 0xd15 => "0xd15",
+ 0xd16 => "0xd16",
+ 0xd17 => "0xd17",
+ 0xd18 => "0xd18",
+ 0xd19 => "0xd19",
+ 0xd1a => "0xd1a",
+ 0xd1b => "0xd1b",
+ 0xd1c => "0xd1c",
+ 0xd1d => "0xd1d",
+ 0xd1e => "0xd1e",
+ 0xd1f => "0xd1f",
+ 0xd20 => "0xd20",
+ 0xd21 => "0xd21",
+ 0xd22 => "0xd22",
+ 0xd23 => "0xd23",
+ 0xd24 => "0xd24",
+ 0xd25 => "0xd25",
+ 0xd26 => "0xd26",
+ 0xd27 => "0xd27",
+ 0xd28 => "0xd28",
+ 0xd29 => "0xd29",
+ 0xd2a => "0xd2a",
+ 0xd2b => "0xd2b",
+ 0xd2c => "0xd2c",
+ 0xd2d => "0xd2d",
+ 0xd2e => "0xd2e",
+ 0xd2f => "0xd2f",
+ 0xd30 => "0xd30",
+ 0xd31 => "0xd31",
+ 0xd32 => "0xd32",
+ 0xd33 => "0xd33",
+ 0xd34 => "0xd34",
+ 0xd35 => "0xd35",
+ 0xd36 => "0xd36",
+ 0xd37 => "0xd37",
+ 0xd38 => "0xd38",
+ 0xd39 => "0xd39",
+ 0xd3a => "0xd3a",
+ 0xd3b => "0xd3b",
+ 0xd3c => "0xd3c",
+ 0xd3d => "0xd3d",
+ 0xd3e => "0xd3e",
+ 0xd3f => "0xd3f",
+ 0xd40 => "0xd40",
+ 0xd41 => "0xd41",
+ 0xd42 => "0xd42",
+ 0xd43 => "0xd43",
+ 0xd44 => "0xd44",
+ 0xd45 => "0xd45",
+ 0xd46 => "0xd46",
+ 0xd47 => "0xd47",
+ 0xd48 => "0xd48",
+ 0xd49 => "0xd49",
+ 0xd4a => "0xd4a",
+ 0xd4b => "0xd4b",
+ 0xd4c => "0xd4c",
+ 0xd4d => "0xd4d",
+ 0xd4e => "0xd4e",
+ 0xd4f => "0xd4f",
+ 0xd50 => "0xd50",
+ 0xd51 => "0xd51",
+ 0xd52 => "0xd52",
+ 0xd53 => "0xd53",
+ 0xd54 => "0xd54",
+ 0xd55 => "0xd55",
+ 0xd56 => "0xd56",
+ 0xd57 => "0xd57",
+ 0xd58 => "0xd58",
+ 0xd59 => "0xd59",
+ 0xd5a => "0xd5a",
+ 0xd5b => "0xd5b",
+ 0xd5c => "0xd5c",
+ 0xd5d => "0xd5d",
+ 0xd5e => "0xd5e",
+ 0xd5f => "0xd5f",
+ 0xd60 => "0xd60",
+ 0xd61 => "0xd61",
+ 0xd62 => "0xd62",
+ 0xd63 => "0xd63",
+ 0xd64 => "0xd64",
+ 0xd65 => "0xd65",
+ 0xd66 => "0xd66",
+ 0xd67 => "0xd67",
+ 0xd68 => "0xd68",
+ 0xd69 => "0xd69",
+ 0xd6a => "0xd6a",
+ 0xd6b => "0xd6b",
+ 0xd6c => "0xd6c",
+ 0xd6d => "0xd6d",
+ 0xd6e => "0xd6e",
+ 0xd6f => "0xd6f",
+ 0xd70 => "0xd70",
+ 0xd71 => "0xd71",
+ 0xd72 => "0xd72",
+ 0xd73 => "0xd73",
+ 0xd74 => "0xd74",
+ 0xd75 => "0xd75",
+ 0xd76 => "0xd76",
+ 0xd77 => "0xd77",
+ 0xd78 => "0xd78",
+ 0xd79 => "0xd79",
+ 0xd7a => "0xd7a",
+ 0xd7b => "0xd7b",
+ 0xd7c => "0xd7c",
+ 0xd7d => "0xd7d",
+ 0xd7e => "0xd7e",
+ 0xd7f => "0xd7f",
+ 0xd80 => "0xd80",
+ 0xd81 => "0xd81",
+ 0xd82 => "0xd82",
+ 0xd83 => "0xd83",
+ 0xd84 => "0xd84",
+ 0xd85 => "0xd85",
+ 0xd86 => "0xd86",
+ 0xd87 => "0xd87",
+ 0xd88 => "0xd88",
+ 0xd89 => "0xd89",
+ 0xd8a => "0xd8a",
+ 0xd8b => "0xd8b",
+ 0xd8c => "0xd8c",
+ 0xd8d => "0xd8d",
+ 0xd8e => "0xd8e",
+ 0xd8f => "0xd8f",
+ 0xd90 => "0xd90",
+ 0xd91 => "0xd91",
+ 0xd92 => "0xd92",
+ 0xd93 => "0xd93",
+ 0xd94 => "0xd94",
+ 0xd95 => "0xd95",
+ 0xd96 => "0xd96",
+ 0xd97 => "0xd97",
+ 0xd98 => "0xd98",
+ 0xd99 => "0xd99",
+ 0xd9a => "0xd9a",
+ 0xd9b => "0xd9b",
+ 0xd9c => "0xd9c",
+ 0xd9d => "0xd9d",
+ 0xd9e => "0xd9e",
+ 0xd9f => "0xd9f",
+ 0xda0 => "0xda0",
+ 0xda1 => "0xda1",
+ 0xda2 => "0xda2",
+ 0xda3 => "0xda3",
+ 0xda4 => "0xda4",
+ 0xda5 => "0xda5",
+ 0xda6 => "0xda6",
+ 0xda7 => "0xda7",
+ 0xda8 => "0xda8",
+ 0xda9 => "0xda9",
+ 0xdaa => "0xdaa",
+ 0xdab => "0xdab",
+ 0xdac => "0xdac",
+ 0xdad => "0xdad",
+ 0xdae => "0xdae",
+ 0xdaf => "0xdaf",
+ 0xdb0 => "0xdb0",
+ 0xdb1 => "0xdb1",
+ 0xdb2 => "0xdb2",
+ 0xdb3 => "0xdb3",
+ 0xdb4 => "0xdb4",
+ 0xdb5 => "0xdb5",
+ 0xdb6 => "0xdb6",
+ 0xdb7 => "0xdb7",
+ 0xdb8 => "0xdb8",
+ 0xdb9 => "0xdb9",
+ 0xdba => "0xdba",
+ 0xdbb => "0xdbb",
+ 0xdbc => "0xdbc",
+ 0xdbd => "0xdbd",
+ 0xdbe => "0xdbe",
+ 0xdbf => "0xdbf",
+ 0xdc0 => "0xdc0",
+ 0xdc1 => "0xdc1",
+ 0xdc2 => "0xdc2",
+ 0xdc3 => "0xdc3",
+ 0xdc4 => "0xdc4",
+ 0xdc5 => "0xdc5",
+ 0xdc6 => "0xdc6",
+ 0xdc7 => "0xdc7",
+ 0xdc8 => "0xdc8",
+ 0xdc9 => "0xdc9",
+ 0xdca => "0xdca",
+ 0xdcb => "0xdcb",
+ 0xdcc => "0xdcc",
+ 0xdcd => "0xdcd",
+ 0xdce => "0xdce",
+ 0xdcf => "0xdcf",
+ 0xdd0 => "0xdd0",
+ 0xdd1 => "0xdd1",
+ 0xdd2 => "0xdd2",
+ 0xdd3 => "0xdd3",
+ 0xdd4 => "0xdd4",
+ 0xdd5 => "0xdd5",
+ 0xdd6 => "0xdd6",
+ 0xdd7 => "0xdd7",
+ 0xdd8 => "0xdd8",
+ 0xdd9 => "0xdd9",
+ 0xdda => "0xdda",
+ 0xddb => "0xddb",
+ 0xddc => "0xddc",
+ 0xddd => "0xddd",
+ 0xdde => "0xdde",
+ 0xddf => "0xddf",
+ 0xde0 => "0xde0",
+ 0xde1 => "0xde1",
+ 0xde2 => "0xde2",
+ 0xde3 => "0xde3",
+ 0xde4 => "0xde4",
+ 0xde5 => "0xde5",
+ 0xde6 => "0xde6",
+ 0xde7 => "0xde7",
+ 0xde8 => "0xde8",
+ 0xde9 => "0xde9",
+ 0xdea => "0xdea",
+ 0xdeb => "0xdeb",
+ 0xdec => "0xdec",
+ 0xded => "0xded",
+ 0xdee => "0xdee",
+ 0xdef => "0xdef",
+ 0xdf0 => "0xdf0",
+ 0xdf1 => "0xdf1",
+ 0xdf2 => "0xdf2",
+ 0xdf3 => "0xdf3",
+ 0xdf4 => "0xdf4",
+ 0xdf5 => "0xdf5",
+ 0xdf6 => "0xdf6",
+ 0xdf7 => "0xdf7",
+ 0xdf8 => "0xdf8",
+ 0xdf9 => "0xdf9",
+ 0xdfa => "0xdfa",
+ 0xdfb => "0xdfb",
+ 0xdfc => "0xdfc",
+ 0xdfd => "0xdfd",
+ 0xdfe => "0xdfe",
+ 0xdff => "0xdff",
+ 0xe00 => "0xe00",
+ 0xe01 => "0xe01",
+ 0xe02 => "0xe02",
+ 0xe03 => "0xe03",
+ 0xe04 => "0xe04",
+ 0xe05 => "0xe05",
+ 0xe06 => "0xe06",
+ 0xe07 => "0xe07",
+ 0xe08 => "0xe08",
+ 0xe09 => "0xe09",
+ 0xe0a => "0xe0a",
+ 0xe0b => "0xe0b",
+ 0xe0c => "0xe0c",
+ 0xe0d => "0xe0d",
+ 0xe0e => "0xe0e",
+ 0xe0f => "0xe0f",
+ 0xe10 => "0xe10",
+ 0xe11 => "0xe11",
+ 0xe12 => "0xe12",
+ 0xe13 => "0xe13",
+ 0xe14 => "0xe14",
+ 0xe15 => "0xe15",
+ 0xe16 => "0xe16",
+ 0xe17 => "0xe17",
+ 0xe18 => "0xe18",
+ 0xe19 => "0xe19",
+ 0xe1a => "0xe1a",
+ 0xe1b => "0xe1b",
+ 0xe1c => "0xe1c",
+ 0xe1d => "0xe1d",
+ 0xe1e => "0xe1e",
+ 0xe1f => "0xe1f",
+ 0xe20 => "0xe20",
+ 0xe21 => "0xe21",
+ 0xe22 => "0xe22",
+ 0xe23 => "0xe23",
+ 0xe24 => "0xe24",
+ 0xe25 => "0xe25",
+ 0xe26 => "0xe26",
+ 0xe27 => "0xe27",
+ 0xe28 => "0xe28",
+ 0xe29 => "0xe29",
+ 0xe2a => "0xe2a",
+ 0xe2b => "0xe2b",
+ 0xe2c => "0xe2c",
+ 0xe2d => "0xe2d",
+ 0xe2e => "0xe2e",
+ 0xe2f => "0xe2f",
+ 0xe30 => "0xe30",
+ 0xe31 => "0xe31",
+ 0xe32 => "0xe32",
+ 0xe33 => "0xe33",
+ 0xe34 => "0xe34",
+ 0xe35 => "0xe35",
+ 0xe36 => "0xe36",
+ 0xe37 => "0xe37",
+ 0xe38 => "0xe38",
+ 0xe39 => "0xe39",
+ 0xe3a => "0xe3a",
+ 0xe3b => "0xe3b",
+ 0xe3c => "0xe3c",
+ 0xe3d => "0xe3d",
+ 0xe3e => "0xe3e",
+ 0xe3f => "0xe3f",
+ 0xe40 => "0xe40",
+ 0xe41 => "0xe41",
+ 0xe42 => "0xe42",
+ 0xe43 => "0xe43",
+ 0xe44 => "0xe44",
+ 0xe45 => "0xe45",
+ 0xe46 => "0xe46",
+ 0xe47 => "0xe47",
+ 0xe48 => "0xe48",
+ 0xe49 => "0xe49",
+ 0xe4a => "0xe4a",
+ 0xe4b => "0xe4b",
+ 0xe4c => "0xe4c",
+ 0xe4d => "0xe4d",
+ 0xe4e => "0xe4e",
+ 0xe4f => "0xe4f",
+ 0xe50 => "0xe50",
+ 0xe51 => "0xe51",
+ 0xe52 => "0xe52",
+ 0xe53 => "0xe53",
+ 0xe54 => "0xe54",
+ 0xe55 => "0xe55",
+ 0xe56 => "0xe56",
+ 0xe57 => "0xe57",
+ 0xe58 => "0xe58",
+ 0xe59 => "0xe59",
+ 0xe5a => "0xe5a",
+ 0xe5b => "0xe5b",
+ 0xe5c => "0xe5c",
+ 0xe5d => "0xe5d",
+ 0xe5e => "0xe5e",
+ 0xe5f => "0xe5f",
+ 0xe60 => "0xe60",
+ 0xe61 => "0xe61",
+ 0xe62 => "0xe62",
+ 0xe63 => "0xe63",
+ 0xe64 => "0xe64",
+ 0xe65 => "0xe65",
+ 0xe66 => "0xe66",
+ 0xe67 => "0xe67",
+ 0xe68 => "0xe68",
+ 0xe69 => "0xe69",
+ 0xe6a => "0xe6a",
+ 0xe6b => "0xe6b",
+ 0xe6c => "0xe6c",
+ 0xe6d => "0xe6d",
+ 0xe6e => "0xe6e",
+ 0xe6f => "0xe6f",
+ 0xe70 => "0xe70",
+ 0xe71 => "0xe71",
+ 0xe72 => "0xe72",
+ 0xe73 => "0xe73",
+ 0xe74 => "0xe74",
+ 0xe75 => "0xe75",
+ 0xe76 => "0xe76",
+ 0xe77 => "0xe77",
+ 0xe78 => "0xe78",
+ 0xe79 => "0xe79",
+ 0xe7a => "0xe7a",
+ 0xe7b => "0xe7b",
+ 0xe7c => "0xe7c",
+ 0xe7d => "0xe7d",
+ 0xe7e => "0xe7e",
+ 0xe7f => "0xe7f",
+ 0xe80 => "0xe80",
+ 0xe81 => "0xe81",
+ 0xe82 => "0xe82",
+ 0xe83 => "0xe83",
+ 0xe84 => "0xe84",
+ 0xe85 => "0xe85",
+ 0xe86 => "0xe86",
+ 0xe87 => "0xe87",
+ 0xe88 => "0xe88",
+ 0xe89 => "0xe89",
+ 0xe8a => "0xe8a",
+ 0xe8b => "0xe8b",
+ 0xe8c => "0xe8c",
+ 0xe8d => "0xe8d",
+ 0xe8e => "0xe8e",
+ 0xe8f => "0xe8f",
+ 0xe90 => "0xe90",
+ 0xe91 => "0xe91",
+ 0xe92 => "0xe92",
+ 0xe93 => "0xe93",
+ 0xe94 => "0xe94",
+ 0xe95 => "0xe95",
+ 0xe96 => "0xe96",
+ 0xe97 => "0xe97",
+ 0xe98 => "0xe98",
+ 0xe99 => "0xe99",
+ 0xe9a => "0xe9a",
+ 0xe9b => "0xe9b",
+ 0xe9c => "0xe9c",
+ 0xe9d => "0xe9d",
+ 0xe9e => "0xe9e",
+ 0xe9f => "0xe9f",
+ 0xea0 => "0xea0",
+ 0xea1 => "0xea1",
+ 0xea2 => "0xea2",
+ 0xea3 => "0xea3",
+ 0xea4 => "0xea4",
+ 0xea5 => "0xea5",
+ 0xea6 => "0xea6",
+ 0xea7 => "0xea7",
+ 0xea8 => "0xea8",
+ 0xea9 => "0xea9",
+ 0xeaa => "0xeaa",
+ 0xeab => "0xeab",
+ 0xeac => "0xeac",
+ 0xead => "0xead",
+ 0xeae => "0xeae",
+ 0xeaf => "0xeaf",
+ 0xeb0 => "0xeb0",
+ 0xeb1 => "0xeb1",
+ 0xeb2 => "0xeb2",
+ 0xeb3 => "0xeb3",
+ 0xeb4 => "0xeb4",
+ 0xeb5 => "0xeb5",
+ 0xeb6 => "0xeb6",
+ 0xeb7 => "0xeb7",
+ 0xeb8 => "0xeb8",
+ 0xeb9 => "0xeb9",
+ 0xeba => "0xeba",
+ 0xebb => "0xebb",
+ 0xebc => "0xebc",
+ 0xebd => "0xebd",
+ 0xebe => "0xebe",
+ 0xebf => "0xebf",
+ 0xec0 => "0xec0",
+ 0xec1 => "0xec1",
+ 0xec2 => "0xec2",
+ 0xec3 => "0xec3",
+ 0xec4 => "0xec4",
+ 0xec5 => "0xec5",
+ 0xec6 => "0xec6",
+ 0xec7 => "0xec7",
+ 0xec8 => "0xec8",
+ 0xec9 => "0xec9",
+ 0xeca => "0xeca",
+ 0xecb => "0xecb",
+ 0xecc => "0xecc",
+ 0xecd => "0xecd",
+ 0xece => "0xece",
+ 0xecf => "0xecf",
+ 0xed0 => "0xed0",
+ 0xed1 => "0xed1",
+ 0xed2 => "0xed2",
+ 0xed3 => "0xed3",
+ 0xed4 => "0xed4",
+ 0xed5 => "0xed5",
+ 0xed6 => "0xed6",
+ 0xed7 => "0xed7",
+ 0xed8 => "0xed8",
+ 0xed9 => "0xed9",
+ 0xeda => "0xeda",
+ 0xedb => "0xedb",
+ 0xedc => "0xedc",
+ 0xedd => "0xedd",
+ 0xede => "0xede",
+ 0xedf => "0xedf",
+ 0xee0 => "0xee0",
+ 0xee1 => "0xee1",
+ 0xee2 => "0xee2",
+ 0xee3 => "0xee3",
+ 0xee4 => "0xee4",
+ 0xee5 => "0xee5",
+ 0xee6 => "0xee6",
+ 0xee7 => "0xee7",
+ 0xee8 => "0xee8",
+ 0xee9 => "0xee9",
+ 0xeea => "0xeea",
+ 0xeeb => "0xeeb",
+ 0xeec => "0xeec",
+ 0xeed => "0xeed",
+ 0xeee => "0xeee",
+ 0xeef => "0xeef",
+ 0xef0 => "0xef0",
+ 0xef1 => "0xef1",
+ 0xef2 => "0xef2",
+ 0xef3 => "0xef3",
+ 0xef4 => "0xef4",
+ 0xef5 => "0xef5",
+ 0xef6 => "0xef6",
+ 0xef7 => "0xef7",
+ 0xef8 => "0xef8",
+ 0xef9 => "0xef9",
+ 0xefa => "0xefa",
+ 0xefb => "0xefb",
+ 0xefc => "0xefc",
+ 0xefd => "0xefd",
+ 0xefe => "0xefe",
+ 0xeff => "0xeff",
+ 0xf00 => "0xf00",
+ 0xf01 => "0xf01",
+ 0xf02 => "0xf02",
+ 0xf03 => "0xf03",
+ 0xf04 => "0xf04",
+ 0xf05 => "0xf05",
+ 0xf06 => "0xf06",
+ 0xf07 => "0xf07",
+ 0xf08 => "0xf08",
+ 0xf09 => "0xf09",
+ 0xf0a => "0xf0a",
+ 0xf0b => "0xf0b",
+ 0xf0c => "0xf0c",
+ 0xf0d => "0xf0d",
+ 0xf0e => "0xf0e",
+ 0xf0f => "0xf0f",
+ 0xf10 => "0xf10",
+ 0xf11 => "0xf11",
+ 0xf12 => "0xf12",
+ 0xf13 => "0xf13",
+ 0xf14 => "0xf14",
+ 0xf15 => "0xf15",
+ 0xf16 => "0xf16",
+ 0xf17 => "0xf17",
+ 0xf18 => "0xf18",
+ 0xf19 => "0xf19",
+ 0xf1a => "0xf1a",
+ 0xf1b => "0xf1b",
+ 0xf1c => "0xf1c",
+ 0xf1d => "0xf1d",
+ 0xf1e => "0xf1e",
+ 0xf1f => "0xf1f",
+ 0xf20 => "0xf20",
+ 0xf21 => "0xf21",
+ 0xf22 => "0xf22",
+ 0xf23 => "0xf23",
+ 0xf24 => "0xf24",
+ 0xf25 => "0xf25",
+ 0xf26 => "0xf26",
+ 0xf27 => "0xf27",
+ 0xf28 => "0xf28",
+ 0xf29 => "0xf29",
+ 0xf2a => "0xf2a",
+ 0xf2b => "0xf2b",
+ 0xf2c => "0xf2c",
+ 0xf2d => "0xf2d",
+ 0xf2e => "0xf2e",
+ 0xf2f => "0xf2f",
+ 0xf30 => "0xf30",
+ 0xf31 => "0xf31",
+ 0xf32 => "0xf32",
+ 0xf33 => "0xf33",
+ 0xf34 => "0xf34",
+ 0xf35 => "0xf35",
+ 0xf36 => "0xf36",
+ 0xf37 => "0xf37",
+ 0xf38 => "0xf38",
+ 0xf39 => "0xf39",
+ 0xf3a => "0xf3a",
+ 0xf3b => "0xf3b",
+ 0xf3c => "0xf3c",
+ 0xf3d => "0xf3d",
+ 0xf3e => "0xf3e",
+ 0xf3f => "0xf3f",
+ 0xf40 => "0xf40",
+ 0xf41 => "0xf41",
+ 0xf42 => "0xf42",
+ 0xf43 => "0xf43",
+ 0xf44 => "0xf44",
+ 0xf45 => "0xf45",
+ 0xf46 => "0xf46",
+ 0xf47 => "0xf47",
+ 0xf48 => "0xf48",
+ 0xf49 => "0xf49",
+ 0xf4a => "0xf4a",
+ 0xf4b => "0xf4b",
+ 0xf4c => "0xf4c",
+ 0xf4d => "0xf4d",
+ 0xf4e => "0xf4e",
+ 0xf4f => "0xf4f",
+ 0xf50 => "0xf50",
+ 0xf51 => "0xf51",
+ 0xf52 => "0xf52",
+ 0xf53 => "0xf53",
+ 0xf54 => "0xf54",
+ 0xf55 => "0xf55",
+ 0xf56 => "0xf56",
+ 0xf57 => "0xf57",
+ 0xf58 => "0xf58",
+ 0xf59 => "0xf59",
+ 0xf5a => "0xf5a",
+ 0xf5b => "0xf5b",
+ 0xf5c => "0xf5c",
+ 0xf5d => "0xf5d",
+ 0xf5e => "0xf5e",
+ 0xf5f => "0xf5f",
+ 0xf60 => "0xf60",
+ 0xf61 => "0xf61",
+ 0xf62 => "0xf62",
+ 0xf63 => "0xf63",
+ 0xf64 => "0xf64",
+ 0xf65 => "0xf65",
+ 0xf66 => "0xf66",
+ 0xf67 => "0xf67",
+ 0xf68 => "0xf68",
+ 0xf69 => "0xf69",
+ 0xf6a => "0xf6a",
+ 0xf6b => "0xf6b",
+ 0xf6c => "0xf6c",
+ 0xf6d => "0xf6d",
+ 0xf6e => "0xf6e",
+ 0xf6f => "0xf6f",
+ 0xf70 => "0xf70",
+ 0xf71 => "0xf71",
+ 0xf72 => "0xf72",
+ 0xf73 => "0xf73",
+ 0xf74 => "0xf74",
+ 0xf75 => "0xf75",
+ 0xf76 => "0xf76",
+ 0xf77 => "0xf77",
+ 0xf78 => "0xf78",
+ 0xf79 => "0xf79",
+ 0xf7a => "0xf7a",
+ 0xf7b => "0xf7b",
+ 0xf7c => "0xf7c",
+ 0xf7d => "0xf7d",
+ 0xf7e => "0xf7e",
+ 0xf7f => "0xf7f",
+ 0xf80 => "0xf80",
+ 0xf81 => "0xf81",
+ 0xf82 => "0xf82",
+ 0xf83 => "0xf83",
+ 0xf84 => "0xf84",
+ 0xf85 => "0xf85",
+ 0xf86 => "0xf86",
+ 0xf87 => "0xf87",
+ 0xf88 => "0xf88",
+ 0xf89 => "0xf89",
+ 0xf8a => "0xf8a",
+ 0xf8b => "0xf8b",
+ 0xf8c => "0xf8c",
+ 0xf8d => "0xf8d",
+ 0xf8e => "0xf8e",
+ 0xf8f => "0xf8f",
+ 0xf90 => "0xf90",
+ 0xf91 => "0xf91",
+ 0xf92 => "0xf92",
+ 0xf93 => "0xf93",
+ 0xf94 => "0xf94",
+ 0xf95 => "0xf95",
+ 0xf96 => "0xf96",
+ 0xf97 => "0xf97",
+ 0xf98 => "0xf98",
+ 0xf99 => "0xf99",
+ 0xf9a => "0xf9a",
+ 0xf9b => "0xf9b",
+ 0xf9c => "0xf9c",
+ 0xf9d => "0xf9d",
+ 0xf9e => "0xf9e",
+ 0xf9f => "0xf9f",
+ 0xfa0 => "0xfa0",
+ 0xfa1 => "0xfa1",
+ 0xfa2 => "0xfa2",
+ 0xfa3 => "0xfa3",
+ 0xfa4 => "0xfa4",
+ 0xfa5 => "0xfa5",
+ 0xfa6 => "0xfa6",
+ 0xfa7 => "0xfa7",
+ 0xfa8 => "0xfa8",
+ 0xfa9 => "0xfa9",
+ 0xfaa => "0xfaa",
+ 0xfab => "0xfab",
+ 0xfac => "0xfac",
+ 0xfad => "0xfad",
+ 0xfae => "0xfae",
+ 0xfaf => "0xfaf",
+ 0xfb0 => "0xfb0",
+ 0xfb1 => "0xfb1",
+ 0xfb2 => "0xfb2",
+ 0xfb3 => "0xfb3",
+ 0xfb4 => "0xfb4",
+ 0xfb5 => "0xfb5",
+ 0xfb6 => "0xfb6",
+ 0xfb7 => "0xfb7",
+ 0xfb8 => "0xfb8",
+ 0xfb9 => "0xfb9",
+ 0xfba => "0xfba",
+ 0xfbb => "0xfbb",
+ 0xfbc => "0xfbc",
+ 0xfbd => "0xfbd",
+ 0xfbe => "0xfbe",
+ 0xfbf => "0xfbf",
+ 0xfc0 => "0xfc0",
+ 0xfc1 => "0xfc1",
+ 0xfc2 => "0xfc2",
+ 0xfc3 => "0xfc3",
+ 0xfc4 => "0xfc4",
+ 0xfc5 => "0xfc5",
+ 0xfc6 => "0xfc6",
+ 0xfc7 => "0xfc7",
+ 0xfc8 => "0xfc8",
+ 0xfc9 => "0xfc9",
+ 0xfca => "0xfca",
+ 0xfcb => "0xfcb",
+ 0xfcc => "0xfcc",
+ 0xfcd => "0xfcd",
+ 0xfce => "0xfce",
+ 0xfcf => "0xfcf",
+ 0xfd0 => "0xfd0",
+ 0xfd1 => "0xfd1",
+ 0xfd2 => "0xfd2",
+ 0xfd3 => "0xfd3",
+ 0xfd4 => "0xfd4",
+ 0xfd5 => "T0CON",
+ 0xfd6 => "TMR0L",
+ 0xfd7 => "TMR0H",
+ 0xfd8 => "STATUS",
+ 0xfd9 => "FSR2L",
+ 0xfda => "FSR2H",
+ 0xfdb => "PLUSW2",
+ 0xfdc => "PREINC2",
+ 0xfdd => "POSTDEC2",
+ 0xfde => "POSTINC2",
+ 0xfdf => "INDF2",
+ 0xfe0 => "BSR",
+ 0xfe1 => "FSR1L",
+ 0xfe2 => "FSR1H",
+ 0xfe3 => "PLUSW1",
+ 0xfe4 => "PREINC1",
+ 0xfe5 => "POSTDEC1",
+ 0xfe6 => "POSTINC1",
+ 0xfe7 => "INDF1",
+ 0xfe8 => "WREG",
+ 0xfe9 => "FSR0L",
+ 0xfea => "FSR0H",
+ 0xfeb => "PLUSW0",
+ 0xfec => "PREINC0",
+ 0xfed => "POSTDEC0",
+ 0xfee => "POSTINC0",
+ 0xfef => "INDF0",
+ 0xff0 => "INTCON3",
+ 0xff1 => "INTCON2",
+ 0xff2 => "INTCON",
+ 0xff3 => "PRODL",
+ 0xff4 => "PRODH",
+ 0xff5 => "TABLAT",
+ 0xff6 => "TBLPTRL",
+ 0xff7 => "TBLPTRH",
+ 0xff8 => "TBLPTRU",
+ 0xff9 => "PCL",
+ 0xffa => "PCLATH",
+ 0xffb => "PCLATU",
+ 0xffc => "STKPTR",
+ 0xffd => "TOSL",
+ 0xffe => "TOSH",
+ 0xfff => "TOSU",
+ _ => { unreachable!() }
+ }
+}
diff --git a/src/display.rs b/src/display.rs
new file mode 100644
index 0000000..80b9b70
--- /dev/null
+++ b/src/display.rs
@@ -0,0 +1,166 @@
+use crate::{Instruction, Opcode, Operand};
+use crate::consts;
+
+use std;
+use std::fmt::{Display, Formatter};
+impl Display for Instruction {
+ fn fmt(&self, f: &mut Formatter) -> Result<(), std::fmt::Error> {
+ write!(f, "{}", self.opcode)?;
+ match self.operands[0] {
+ Operand::Nothing => return Ok(()),
+ x @ _ => {
+ write!(f, " {}", x)?;
+ }
+ };
+ match self.operands[1] {
+ Operand::Nothing => return Ok(()),
+ x @ _ => {
+ write!(f, ", {}", x)?;
+ }
+ };
+ Ok(())
+ }
+}
+
+impl Display for Opcode {
+ fn fmt(&self, f: &mut Formatter) -> Result<(), std::fmt::Error> {
+ match self {
+ Opcode::Invalid(a, b) => { write!(f, "invalid({:02x}{:02x})", a, b) },
+ Opcode::NOP => { write!(f, "nop") },
+ Opcode::MOVFF => { write!(f, "movff") },
+ Opcode::MOVSF => { write!(f, "movsf") },
+ Opcode::MOVSD => { write!(f, "movsd") },
+ Opcode::CALL => { write!(f, "call") },
+ Opcode::LFSR => { write!(f, "lfsr") },
+ Opcode::GOTO => { write!(f, "goto") },
+ Opcode::CALLW => { write!(f, "callw") },
+ Opcode::CLRWDT => { write!(f, "clrwdt") },
+ Opcode::DAW => { write!(f, "daw") },
+ Opcode::POP => { write!(f, "pop") },
+ Opcode::PUSH => { write!(f, "push") },
+ Opcode::RESET => { write!(f, "reset") },
+ Opcode::RETFIE => { write!(f, "retfie") },
+ Opcode::RETFIE_FAST => { write!(f, "retfie_fast") },
+ Opcode::RETURN => { write!(f, "return") },
+ Opcode::RETURN_FAST => { write!(f, "return_fast") },
+ Opcode::SLEEP => { write!(f, "sleep") },
+ Opcode::TBLRD_I_S => { write!(f, "tblrd_i_s") },
+ Opcode::TBLRD_S => { write!(f, "tblrd_s") },
+ Opcode::TBLRD_S_D => { write!(f, "tblrd_s_d") },
+ Opcode::TBLRD_S_I => { write!(f, "tblrd_s_i") },
+ Opcode::TBLWT_I_S => { write!(f, "tblwt_i_s") },
+ Opcode::TBLWT_S => { write!(f, "tblwt_s") },
+ Opcode::TBLWT_S_D => { write!(f, "tblwt_s_d") },
+ Opcode::TBLWT_S_I => { write!(f, "tblwt_s_i") },
+ Opcode::MOVLB => { write!(f, "movlb") },
+ Opcode::ADDLW => { write!(f, "addlw") },
+ Opcode::MOVLW => { write!(f, "movlw") },
+ Opcode::MULLW => { write!(f, "mullw") },
+ Opcode::RETLW => { write!(f, "retlw") },
+ Opcode::ANDLW => { write!(f, "andlw") },
+ Opcode::XORLW => { write!(f, "xorlw") },
+ Opcode::IORLW => { write!(f, "iorlw") },
+ Opcode::SUBLW => { write!(f, "sublw") },
+ Opcode::IORWF => { write!(f, "iorwf") },
+ Opcode::ANDWF => { write!(f, "andwf") },
+ Opcode::XORWF => { write!(f, "xorwf") },
+ Opcode::COMF => { write!(f, "comf") },
+ Opcode::MULWF => { write!(f, "mulwf") },
+ Opcode::ADDWFC => { write!(f, "addwfc") },
+ Opcode::ADDWF => { write!(f, "addwf") },
+ Opcode::INCF => { write!(f, "incf") },
+ Opcode::DECF => { write!(f, "decf") },
+ Opcode::DECFSZ => { write!(f, "decfsz") },
+ Opcode::RRCF => { write!(f, "rrcf") },
+ Opcode::RLCF => { write!(f, "rlcf") },
+ Opcode::SWAPF => { write!(f, "swapf") },
+ Opcode::INCFSZ => { write!(f, "incfsz") },
+ Opcode::RRNCF => { write!(f, "rrncf") },
+ Opcode::RLNCF => { write!(f, "rlncf") },
+ Opcode::INFSNZ => { write!(f, "infsnz") },
+ Opcode::DCFSNZ => { write!(f, "dcfsnz") },
+ Opcode::MOVF => { write!(f, "movf") },
+ Opcode::SUBFWB => { write!(f, "subfwb") },
+ Opcode::SUBWFB => { write!(f, "subwfb") },
+ Opcode::SUBWF => { write!(f, "subwf") },
+ Opcode::CPFSLT => { write!(f, "cpfslt") },
+ Opcode::CPFSEQ => { write!(f, "cpfseq") },
+ Opcode::CPFSGT => { write!(f, "cpfsgt") },
+ Opcode::TSTFSZ => { write!(f, "tstfsz") },
+ Opcode::SETF => { write!(f, "setf") },
+ Opcode::CLRF => { write!(f, "clrf") },
+ Opcode::NEGF => { write!(f, "negf") },
+ Opcode::MOVWF => { write!(f, "movwf") },
+ Opcode::BTG => { write!(f, "btg") },
+ Opcode::BSF => { write!(f, "bsf") },
+ Opcode::BCF => { write!(f, "bcf") },
+ Opcode::BTFSS => { write!(f, "btfss") },
+ Opcode::BTFSC => { write!(f, "btfsc") },
+ Opcode::BZ => { write!(f, "bz") },
+ Opcode::BNZ => { write!(f, "bnz") },
+ Opcode::BC => { write!(f, "bc") },
+ Opcode::BNC => { write!(f, "bnc") },
+ Opcode::BOV => { write!(f, "bov") },
+ Opcode::BNOV => { write!(f, "bnov") },
+ Opcode::BN => { write!(f, "bn") },
+ Opcode::BNN => { write!(f, "bnn") },
+ Opcode::BRA => { write!(f, "bra") },
+ Opcode::RCALL => { write!(f, "rcall") }
+ }
+ }
+}
+
+impl Display for Operand {
+ fn fmt(&self, f: &mut Formatter) -> Result<(), std::fmt::Error> {
+ match self {
+ Operand::ImmediateU8(imm) => {
+ write!(f, "#0x{:x}", imm)
+ },
+ Operand::ImmediateU32(imm) => {
+ write!(f, "#0x{:x}", imm)
+ },
+ Operand::FileFSR(fsr) => {
+ write!(f, "[FSR{}]", fsr)
+ },
+ Operand::File(file, banked) => {
+ if *banked {
+ write!(f, "[banked 0x{:x}]", file)
+ } else {
+ write!(f, "[{}]", consts::named_file(
+ if *file < 0x80 {
+ (*file as u16)
+ } else {
+ (*file as u16) | 0xf00u16
+ })
+ )
+ }
+ },
+ Operand::AbsoluteFile(file) => {
+ write!(f, "[{}]", consts::named_file(*file))
+ },
+ Operand::RedirectableFile(file, banked, direction) => {
+ if *direction {
+ write!(f, "[todo -> F] ")?
+ } else {
+ write!(f, "[todo -> W] ")?
+ };
+
+ if *banked {
+ write!(f, "[banked 0x{:x}]", file)
+ } else {
+ write!(f, "[{}]", consts::named_file(
+ if *file < 0x80 {
+ (*file as u16)
+ } else {
+ (*file as u16) | 0xf00u16
+ })
+ )
+ }
+ },
+ Operand::Nothing => {
+ write!(f, "<No Operand>")
+ }
+ }
+ }
+}
+
diff --git a/src/lib.rs b/src/lib.rs
new file mode 100644
index 0000000..e2391a0
--- /dev/null
+++ b/src/lib.rs
@@ -0,0 +1,467 @@
+extern crate yaxpeax_arch;
+
+use yaxpeax_arch::{Arch, Decodable, LengthedInstruction};
+
+pub mod consts;
+pub mod display;
+
+pub struct PIC18;
+impl Arch for PIC18 {
+ type Address = u32;
+ type Instruction = Instruction;
+ type Operand = Operand;
+}
+
+#[derive(Debug, Copy, Clone)]
+pub struct Instruction {
+ pub opcode: Opcode,
+ pub operands: [Operand; 2]
+}
+
+impl LengthedInstruction for Instruction {
+ type Unit = <PIC18 as Arch>::Address;
+ fn len(&self) -> Self::Unit {
+ match self.opcode {
+ Opcode::MOVFF
+ | Opcode::MOVSF
+ | Opcode::MOVSD
+ | Opcode::CALL
+ | Opcode::LFSR
+ | Opcode::GOTO => {
+ 4
+ },
+ _ => 2
+ }
+ }
+}
+
+impl Instruction {
+ pub fn blank() -> Instruction {
+ Instruction {
+ opcode: Opcode::NOP,
+ operands: [Operand::Nothing, Operand::Nothing]
+ }
+ }
+}
+
+#[allow(non_camel_case_types)]
+#[derive(Debug, Copy, Clone)]
+pub enum Opcode {
+ Invalid(u8, u8),
+ NOP,
+ MOVFF,
+ MOVSF,
+ MOVSD,
+ CALL,
+ LFSR,
+ GOTO,
+ CALLW,
+ CLRWDT,
+ DAW,
+ POP,
+ PUSH,
+ RESET,
+ RETFIE,
+ RETFIE_FAST,
+ RETURN,
+ RETURN_FAST,
+ SLEEP,
+ TBLRD_I_S,
+ TBLRD_S,
+ TBLRD_S_D,
+ TBLRD_S_I,
+ TBLWT_I_S,
+ TBLWT_S,
+ TBLWT_S_D,
+ TBLWT_S_I,
+ MOVLB,
+ ADDLW,
+ MOVLW,
+ MULLW,
+ RETLW,
+ ANDLW,
+ XORLW,
+ IORLW,
+ SUBLW,
+ IORWF,
+ ANDWF,
+ XORWF,
+ COMF,
+ MULWF,
+ ADDWFC,
+ ADDWF,
+ INCF,
+ DECF,
+ DECFSZ,
+ RRCF,
+ RLCF,
+ SWAPF,
+ INCFSZ,
+ RRNCF,
+ RLNCF,
+ INFSNZ,
+ DCFSNZ,
+ MOVF,
+ SUBFWB,
+ SUBWFB,
+ SUBWF,
+ CPFSLT,
+ CPFSEQ,
+ CPFSGT,
+ TSTFSZ,
+ SETF,
+ CLRF,
+ NEGF,
+ MOVWF,
+ BTG,
+ BSF,
+ BCF,
+ BTFSS,
+ BTFSC,
+ BZ,
+ BNZ,
+ BC,
+ BNC,
+ BOV,
+ BNOV,
+ BN,
+ BNN,
+ BRA,
+ RCALL
+}
+
+#[derive(Debug, Copy, Clone)]
+pub enum Operand {
+ ImmediateU8(u8),
+ ImmediateU32(u32),
+ FileFSR(u8),
+ File(u8, bool), // a == banked
+ AbsoluteFile(u16),
+ RedirectableFile(u8, bool, bool), // a == banked, d == direction
+ Nothing
+}
+
+impl Decodable for Instruction {
+ fn decode<'a, T: IntoIterator<Item=&'a u8>>(bytes: T) -> Option<Self> {
+ let mut blank = Instruction::blank();
+ match blank.decode_into(bytes) {
+ Some(_) => Some(blank),
+ None => None
+ }
+ }
+ fn decode_into<'a, T: IntoIterator<Item=&'a u8>>(&mut self, bytes: T) -> Option<()> {
+ let mut bytes_iter = bytes.into_iter();
+ let word: Vec<&'a u8> = bytes_iter.by_ref().take(2).collect();
+ if word.len() != 2 {
+ return None;
+ }
+
+// println!("Decoding {:x?}", word);
+ match *word[1] {
+ 0x00 => {
+ match *word[0] {
+ 0x00 => {
+ self.opcode = Opcode::NOP;
+ Some(())
+ },
+ 0b00000011 => {
+ self.opcode = Opcode::SLEEP;
+ Some(())
+ },
+ 0b00000100 => {
+ self.opcode = Opcode::CLRWDT;
+ Some(())
+ },
+ 0b00000101 => {
+ self.opcode = Opcode::PUSH;
+ Some(())
+ },
+ 0b00000110 => {
+ self.opcode = Opcode::POP;
+ Some(())
+ },
+ 0b00000111 => {
+ self.opcode = Opcode::DAW;
+ Some(())
+ },
+ 0b00001000 => {
+ self.opcode = Opcode::TBLRD_S;
+ Some(())
+ },
+ 0b00001001 => {
+ self.opcode = Opcode::TBLRD_S_I;
+ Some(())
+ },
+ 0b00001010 => {
+ self.opcode = Opcode::TBLRD_S_D;
+ Some(())
+ },
+ 0b00001011 => {
+ self.opcode = Opcode::TBLRD_I_S;
+ Some(())
+ },
+ 0b00001100 => {
+ self.opcode = Opcode::TBLWT_S;
+ Some(())
+ },
+ 0b00001101 => {
+ self.opcode = Opcode::TBLWT_S_I;
+ Some(())
+ },
+ 0b00001110 => {
+ self.opcode = Opcode::TBLWT_S_D;
+ Some(())
+ },
+ 0b00001111 => {
+ self.opcode = Opcode::TBLWT_I_S;
+ Some(())
+ },
+ 0b00010000 => {
+ self.opcode = Opcode::RETFIE;
+ Some(())
+ },
+ 0b00010001 => {
+ self.opcode = Opcode::RETFIE_FAST;
+ Some(())
+ },
+ 0b00010010 => {
+ self.opcode = Opcode::RETURN;
+ Some(())
+ },
+ 0b00010011 => {
+ self.opcode = Opcode::RETURN_FAST;
+ Some(())
+ },
+ 0b00010100 => {
+ self.opcode = Opcode::CALLW;
+ Some(())
+ },
+ 0b11111111 => {
+ self.opcode = Opcode::RESET;
+ Some(())
+ },
+ _ => {
+ self.opcode = Opcode::Invalid(*word[0], *word[1]);
+ None
+ }
+ }
+ },
+ 0x01 => {
+ self.opcode = Opcode::MOVLB;
+ // this ignores high nibble of low word. ok by isa, but...
+ self.operands[0] = Operand::ImmediateU8(*word[0] & 0x0f);
+ Some(())
+ },
+ 0x02 | 0x03 => {
+ self.opcode = Opcode::MULWF;
+ let a = (word[1] & 0x01) == 1;
+ self.operands[0] = Operand::File(*word[0], a);
+ Some(())
+ },
+ 0x04 | 0x05 | 0x06 | 0x07 => {
+ self.opcode = Opcode::DECF;
+ let d = ((word[1] >> 1) & 0x01u8) == 1u8;
+ let a = (word[1] & 0x01) == 1;
+ self.operands[0] = Operand::RedirectableFile(*word[0], a, d);
+ Some(())
+ },
+ 0x08 => {
+ self.opcode = Opcode::SUBLW;
+ self.operands[0] = Operand::ImmediateU8(*word[0]);
+ Some(())
+ },
+ 0x09 => {
+ self.opcode = Opcode::IORLW;
+ self.operands[0] = Operand::ImmediateU8(*word[0]);
+ Some(())
+ },
+ 0x0a => {
+ self.opcode = Opcode::XORLW;
+ self.operands[0] = Operand::ImmediateU8(*word[0]);
+ Some(())
+ },
+ 0x0b => {
+ self.opcode = Opcode::ANDLW;
+ self.operands[0] = Operand::ImmediateU8(*word[0]);
+ Some(())
+ },
+ 0x0c => {
+ self.opcode = Opcode::RETLW;
+ self.operands[0] = Operand::ImmediateU8(*word[0]);
+ Some(())
+ },
+ 0x0d => {
+ self.opcode = Opcode::MULLW;
+ self.operands[0] = Operand::ImmediateU8(*word[0]);
+ Some(())
+ },
+ 0x0e => {
+ self.opcode = Opcode::MOVLW;
+ self.operands[0] = Operand::ImmediateU8(*word[0]);
+ Some(())
+ },
+ 0x0f => {
+ self.opcode = Opcode::ADDLW;
+ self.operands[0] = Operand::ImmediateU8(*word[0]);
+ Some(())
+ },
+ x if x >= 0x10 && x < 0b01100000 => {
+ let da = x & 0b0011;
+ let opc = (x >> 2) - 4;
+ self.opcode = [
+ Opcode::IORWF,
+ Opcode::ANDWF,
+ Opcode::XORWF,
+ Opcode::COMF,
+ Opcode::ADDWFC,
+ Opcode::ADDWF,
+ Opcode::INCF,
+ Opcode::DECFSZ,
+ Opcode::RRCF,
+ Opcode::RLCF,
+ Opcode::SWAPF,
+ Opcode::INCFSZ,
+ Opcode::RRNCF,
+ Opcode::RLNCF,
+ Opcode::INFSNZ,
+ Opcode::DCFSNZ,
+ Opcode::MOVF,
+ Opcode::SUBFWB,
+ Opcode::SUBWFB,
+ Opcode::SUBWF
+ ][opc as usize];
+ self.operands[0] = Operand::RedirectableFile(*word[0], (da & 0x01) == 0x01, (da & 0x02) == 0x02);
+ Some(())
+ },
+ x if x >= 0b01100000 && x < 0b01110000 => {
+ let a = x & 1;
+ let opc = (x >> 1) & 0b0000111;
+ self.opcode = [
+ Opcode::CPFSLT,
+ Opcode::CPFSEQ,
+ Opcode::CPFSGT,
+ Opcode::TSTFSZ,
+ Opcode::SETF,
+ Opcode::CLRF,
+ Opcode::NEGF,
+ Opcode::MOVWF
+ ][opc as usize];
+ self.operands[0] = Operand::File(*word[0], a == 1);
+ Some(())
+ },
+ x if x >= 0b01110000 && x < 0b11000000 => {
+ let a = x & 1;
+ let opc = ((x >> 4) & 0b00001111) - 0b111;
+ self.opcode = [
+ Opcode::BTG,
+ Opcode::BSF,
+ Opcode::BCF,
+ Opcode::BTFSS,
+ Opcode::BTFSC
+ ][opc as usize];
+ let bit = (x >> 1) & 0b0000111;
+ self.operands[0] = Operand::File(*word[0], a == 1);
+ self.operands[1] = Operand::ImmediateU8(bit);
+ Some(())
+ },
+ x if x >= 0b11000000 && x < 0b11010000 => {
+ self.opcode = Opcode::MOVFF;
+ let word2: Vec<&'a u8> = bytes_iter.take(2).collect();
+ if word2.len() != 2 {
+ return None;
+ }
+ if word2[1] & 0xf0 != 0xf0 {
+ return None;
+ }
+
+ let src = (*word[0] as u16) | ((*word[1] as u16 & 0x0f) << 8);
+ let dest = (*word2[0] as u16) | ((*word2[1] as u16 & 0x0f) << 8);
+ self.operands[0] = Operand::AbsoluteFile(src);
+ self.operands[1] = Operand::AbsoluteFile(dest);
+ Some(())
+ },
+ x if x >= 0b11010000 && x < 0b11100000 => {
+ self.opcode = [
+ Opcode::BRA,
+ Opcode::RCALL
+ ][((x >> 3) & 1) as usize];
+ self.operands[0] = Operand::ImmediateU32((((x & 0b111) as u32) << 8) | *word[0] as u32);
+ Some(())
+ },
+ x if x >= 0b11100000 && x < 0b11101000 => {
+ let opc = x & 0b00000111;
+ self.opcode = [
+ Opcode::BZ,
+ Opcode::BNZ,
+ Opcode::BC,
+ Opcode::BNC,
+ Opcode::BOV,
+ Opcode::BNOV,
+ Opcode::BN,
+ Opcode::BNN
+ ][opc as usize];
+ self.operands[0] = Operand::ImmediateU8(*word[0]);
+ Some(())
+ },
+ 0xee => {
+ let f_k_msb = *word[0];
+ let word2: Vec<&'a u8> = bytes_iter.take(2).collect();
+ if word2.len() != 2 {
+ return None;
+ }
+
+ if (word2[1] & 0xf0) != 0xf0 {
+ return None; // invalid instruction
+ }
+
+ self.opcode = Opcode::LFSR;
+
+ let f = (f_k_msb >> 4) & 0b0011;
+ let k_msb = f_k_msb & 0b1111;
+ let k_lsb = word2[0];
+
+ self.operands[0] = Operand::FileFSR(f);
+ self.operands[1] = Operand::ImmediateU32(((k_msb as u32) << 8) | (*k_lsb as u32));
+ Some(())
+ }
+ /* ... */
+ 0xeb | 0xec => {
+ // TODO: respect s bit
+ let k_lsb = *word[0];
+ let word2: Vec<&'a u8> = bytes_iter.take(2).collect();
+ if word2.len() != 2 {
+ return None;
+ }
+
+ if (word2[1] & 0xf0) != 0xf0 {
+ return None; // invalid instruction
+ }
+
+ let k_msb = (((*word2[1] & 0xf) as u32) << 8) | *word2[0] as u32;
+
+ self.opcode = Opcode::CALL;
+ self.operands[0] = Operand::ImmediateU32(((k_msb << 8) | k_lsb as u32) << 1);
+ Some(())
+ }
+ 0xef => {
+ let k_lsb = *word[0];
+ let word2: Vec<&'a u8> = bytes_iter.take(2).collect();
+ if word2.len() != 2 {
+ return None;
+ }
+
+ if (word2[1] & 0xf0) != 0xf0 {
+ return None; // invalid instruction
+ }
+
+ let k_msb = (((*word2[1] & 0xf) as u32) << 8) | *word2[0] as u32;
+
+ self.opcode = Opcode::GOTO;
+ self.operands[0] = Operand::ImmediateU32(((k_msb << 8) | k_lsb as u32) << 1);
+ Some(())
+ }
+ _ => None
+ }
+ }
+}
+