/src/mpv/misc/codepoint_width.c
Line | Count | Source (jump to first uncovered line) |
1 | | #include "codepoint_width.h" |
2 | | |
3 | | #include <stdbool.h> |
4 | | #include <stdint.h> |
5 | | |
6 | | typedef uint_least32_t char32_t; |
7 | | |
8 | | // Generated by GraphemeTableGen (https://github.com/microsoft/terminal/blob/0961a77a5aec003e9f79d388f8e7bffb9a550cdb/src/tools/GraphemeTableGen/Program.cs) |
9 | | // on 2025-02-25T07:26:37Z, from Unicode 16.0.0, 9224 bytes |
10 | | // Copyright (c) Microsoft Corporation. |
11 | | // Licensed under the MIT license. |
12 | | |
13 | | // Manually adjusted for C compatibility |
14 | | // To generate: |
15 | | // 0. Install .NET 8.0 |
16 | | // 1. Download the tool from: https://github.com/microsoft/terminal/tree/main/src/tools/GraphemeTableGen |
17 | | // 2. Download the Unicode data from: https://www.unicode.org/Public/UCD/latest/ucdxml/ucd.nounihan.grouped.zip |
18 | | // 3. Build the project: `dotnet build GraphemeTableGen.csproj` |
19 | | // 4. Run the tool: `./GraphemeTableGen ucd.nounihan.grouped.xml` |
20 | | // 5. Copy the generated code and adjust it for C compatibility by replacing `constexpr` and `auto` keywords. |
21 | | |
22 | | // clang-format off |
23 | | static const uint16_t s_stage0[] = { |
24 | | 0x0000, 0x0020, 0x0040, 0x0060, 0x0080, 0x009f, 0x00bf, 0x00ca, 0x00ca, 0x00ca, 0x00ca, 0x00ca, 0x00ca, 0x00ca, 0x00ca, 0x00ca, |
25 | | 0x00ca, 0x00ca, 0x00ca, 0x00ca, 0x00d8, 0x00f8, 0x010a, 0x010e, 0x010b, 0x0108, 0x0113, 0x0133, 0x0153, 0x0153, 0x0153, 0x016f, |
26 | | 0x018f, 0x01a7, 0x01c7, 0x01e7, 0x0133, 0x0133, 0x0205, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0221, 0x0236, 0x00ca, 0x00ca, |
27 | | 0x0256, 0x0276, 0x0133, 0x0133, 0x0133, 0x028b, 0x02ab, 0x02b9, 0x0133, 0x02cc, 0x02ea, 0x0302, 0x0322, 0x033f, 0x035f, 0x037f, |
28 | | 0x00ca, 0x00ca, 0x00ca, 0x00ca, 0x00ca, 0x00ca, 0x00ca, 0x00ca, 0x00ca, 0x00ca, 0x00ca, 0x00ca, 0x00ca, 0x00ca, 0x00ca, 0x00ca, |
29 | | 0x00ca, 0x00ca, 0x00ca, 0x00ca, 0x00ca, 0x00ca, 0x00ca, 0x00ca, 0x00ca, 0x00ca, 0x00ca, 0x00ca, 0x00ca, 0x00ca, 0x00ca, 0x039f, |
30 | | 0x00ca, 0x00ca, 0x00ca, 0x00ca, 0x00ca, 0x00ca, 0x00ca, 0x00ca, 0x00ca, 0x00ca, 0x00ca, 0x00ca, 0x00ca, 0x00ca, 0x00ca, 0x00ca, |
31 | | 0x00ca, 0x00ca, 0x00ca, 0x00ca, 0x00ca, 0x00ca, 0x00ca, 0x00ca, 0x00ca, 0x00ca, 0x00ca, 0x00ca, 0x00ca, 0x00ca, 0x00ca, 0x039f, |
32 | | 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, |
33 | | 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, |
34 | | 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, |
35 | | 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, |
36 | | 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, |
37 | | 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, |
38 | | 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, |
39 | | 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, |
40 | | 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, |
41 | | 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, |
42 | | 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, |
43 | | 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, |
44 | | 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, |
45 | | 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, |
46 | | 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, |
47 | | 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, |
48 | | 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, |
49 | | 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, |
50 | | 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, |
51 | | 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, |
52 | | 0x03bf, 0x03c7, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, |
53 | | 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, |
54 | | 0x0153, 0x0153, 0x0153, 0x0153, 0x0153, 0x0153, 0x0153, 0x0153, 0x0153, 0x0153, 0x0153, 0x0153, 0x0153, 0x0153, 0x0153, 0x0153, |
55 | | 0x0153, 0x0153, 0x0153, 0x0153, 0x0153, 0x0153, 0x0153, 0x0153, 0x0153, 0x0153, 0x0153, 0x0153, 0x0153, 0x0153, 0x0153, 0x03e7, |
56 | | 0x0153, 0x0153, 0x0153, 0x0153, 0x0153, 0x0153, 0x0153, 0x0153, 0x0153, 0x0153, 0x0153, 0x0153, 0x0153, 0x0153, 0x0153, 0x0153, |
57 | | 0x0153, 0x0153, 0x0153, 0x0153, 0x0153, 0x0153, 0x0153, 0x0153, 0x0153, 0x0153, 0x0153, 0x0153, 0x0153, 0x0153, 0x0153, 0x03e7, |
58 | | }; |
59 | | static const uint16_t s_stage1[] = { |
60 | | 0x0000, 0x0004, 0x000c, 0x0014, 0x001c, 0x0024, 0x002a, 0x0031, 0x002a, 0x0037, 0x002a, 0x003f, 0x0047, 0x0049, 0x004f, 0x0057, 0x005f, 0x0065, 0x006d, 0x002a, 0x002a, 0x002a, 0x0073, 0x007b, 0x0083, 0x008a, 0x002a, 0x0091, 0x0098, 0x009f, 0x00a3, 0x00aa, |
61 | | 0x00b2, 0x00b8, 0x00be, 0x00c5, 0x00cd, 0x00d5, 0x00dd, 0x00e5, 0x00ed, 0x00f5, 0x00fd, 0x0105, 0x010d, 0x0115, 0x011d, 0x0125, 0x012d, 0x0135, 0x013d, 0x0145, 0x014d, 0x0155, 0x015d, 0x0164, 0x016b, 0x0173, 0x0175, 0x017d, 0x0182, 0x018a, 0x0192, 0x019a, |
62 | | 0x019d, 0x01a5, 0x01ad, 0x002a, 0x01b5, 0x01b9, 0x01bd, 0x01c2, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x01ca, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x01d0, 0x01d7, 0x01de, 0x01e6, |
63 | | 0x01ed, 0x002a, 0x01f5, 0x002a, 0x01fb, 0x002a, 0x002a, 0x002a, 0x0203, 0x0209, 0x0211, 0x0218, 0x0220, 0x0228, 0x0230, 0x0236, 0x023d, 0x002a, 0x002a, 0x0244, 0x002a, 0x002a, 0x002a, 0x0047, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, |
64 | | 0x024c, 0x0254, 0x025c, 0x0262, 0x026a, 0x0272, 0x027a, 0x0282, 0x028a, 0x0292, 0x029a, 0x002a, 0x02a2, 0x002a, 0x02a9, 0x02b0, 0x002a, 0x02b8, 0x02bc, 0x02c4, 0x002a, 0x002a, 0x02cc, 0x02d4, 0x02dc, 0x02e4, 0x02ec, 0x02f4, 0x02fc, 0x0304, 0x030c, 0x002a, |
65 | | 0x002a, 0x002a, 0x002a, 0x0314, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x031c, 0x0322, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x0326, 0x002a, 0x032d, 0x002a, 0x0043, 0x002a, 0x002a, 0x0335, 0x0339, 0x0341, 0x0341, 0x0341, 0x0347, 0x034d, |
66 | | 0x0355, 0x035b, 0x0341, 0x0363, 0x0341, 0x036a, 0x036e, 0x0374, 0x037b, 0x0381, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, |
67 | | 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0388, 0x0390, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x0393, 0x039b, 0x017f, 0x002a, 0x002a, 0x002a, 0x002a, 0x03a3, 0x002a, 0x03ab, 0x03b3, 0x03bb, 0x03c3, 0x03cb, 0x03d3, |
68 | | 0x03d8, 0x03e0, 0x03e8, 0x03f0, 0x002a, 0x002a, 0x002a, 0x03f7, 0x03ff, 0x0400, 0x0401, 0x0402, 0x0403, 0x0404, 0x0405, 0x03ff, 0x0400, 0x0401, 0x0402, 0x0403, 0x0404, 0x0405, 0x03ff, 0x0400, 0x0401, 0x0402, 0x0403, 0x0404, 0x0405, 0x03ff, 0x0400, 0x0401, |
69 | | 0x0402, 0x0403, 0x0404, 0x0405, 0x03ff, 0x0400, 0x0401, 0x0402, 0x0403, 0x0404, 0x0405, 0x03ff, 0x0400, 0x0401, 0x0402, 0x0403, 0x0404, 0x040c, 0x0414, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, |
70 | | 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x02bc, 0x02bc, 0x02bc, 0x02bc, 0x02bc, 0x02bc, 0x02bc, 0x02bc, 0x02bc, 0x02bc, 0x02bc, 0x02bc, 0x02bc, |
71 | | 0x02bc, 0x02bc, 0x02bc, 0x02bc, 0x02bc, 0x02bc, 0x02bc, 0x02bc, 0x02bc, 0x02bc, 0x02bc, 0x02bc, 0x02bc, 0x02bc, 0x02bc, 0x02bc, 0x02bc, 0x02bc, 0x02bc, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x041c, 0x002a, 0x002a, 0x002a, 0x002a, |
72 | | 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x0424, 0x042a, 0x002a, 0x032d, 0x0355, 0x0432, 0x0437, 0x043b, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x0443, 0x002a, 0x002a, 0x002a, 0x044b, 0x002a, 0x0450, 0x002a, 0x002a, 0x002a, |
73 | | 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x0458, 0x002a, 0x002a, 0x01f1, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x0460, 0x0465, 0x002a, 0x002a, 0x002a, |
74 | | 0x002a, 0x046b, 0x0471, 0x002a, 0x00a7, 0x0479, 0x002a, 0x0481, 0x0489, 0x0491, 0x0499, 0x04a1, 0x04a9, 0x04b1, 0x04b9, 0x04bc, 0x04c4, 0x002a, 0x04c9, 0x04d1, 0x04d9, 0x04e0, 0x04e8, 0x04ed, 0x04f5, 0x04f9, 0x0501, 0x002a, 0x002a, 0x0504, 0x050c, 0x0510, |
75 | | 0x0518, 0x051b, 0x002a, 0x0522, 0x002a, 0x002a, 0x002a, 0x0528, 0x002a, 0x002a, 0x002a, 0x0530, 0x0538, 0x002a, 0x053e, 0x0546, 0x054e, 0x0556, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x055a, 0x002a, 0x0562, 0x002a, 0x0569, 0x0571, 0x0578, 0x002a, 0x002a, |
76 | | 0x002a, 0x002a, 0x057b, 0x0583, 0x058b, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x0211, 0x0593, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, |
77 | | 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x0598, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, |
78 | | 0x002a, 0x059e, 0x05a5, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x05ac, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x05b3, 0x05ba, 0x05be, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, |
79 | | 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x05c6, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, |
80 | | 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x05ce, 0x05d6, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, |
81 | | 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x05d8, 0x0341, 0x0341, 0x0341, 0x0341, 0x05e0, 0x05e7, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x05ed, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, |
82 | | 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x05f5, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, |
83 | | 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x05fd, 0x0605, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x0609, 0x0611, 0x002a, 0x002a, 0x0619, 0x002a, 0x002a, 0x0341, 0x0621, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, |
84 | | 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x0629, 0x0631, 0x0639, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, |
85 | | 0x002a, 0x002a, 0x0641, 0x002a, 0x0648, 0x002a, 0x05a5, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x064b, 0x0651, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x0651, 0x002a, 0x002a, 0x002a, 0x0657, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, |
86 | | 0x002a, 0x002a, 0x065d, 0x002a, 0x0665, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x066d, |
87 | | 0x066e, 0x066e, 0x0675, 0x067d, 0x0683, 0x068b, 0x0691, 0x0699, 0x06a1, 0x066e, 0x066e, 0x06a9, 0x06b0, 0x06b8, 0x06bf, 0x06c7, 0x06cf, 0x06d0, 0x06d1, 0x06d9, 0x06e1, 0x06e9, 0x06ee, 0x06d0, 0x06f6, 0x06d0, 0x06fe, 0x002a, 0x0706, 0x002a, 0x070e, 0x0716, |
88 | | 0x071d, 0x0724, 0x066e, 0x072c, 0x0734, 0x06d0, 0x06d0, 0x066e, 0x073c, 0x0744, 0x074c, 0x002a, 0x002a, 0x002a, 0x002a, 0x066e, 0x066e, 0x066e, 0x066e, 0x066e, 0x066e, 0x066e, 0x066e, 0x066e, 0x066e, 0x066e, 0x066e, 0x066e, 0x066e, 0x066e, 0x0754, 0x0341, |
89 | | 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0342, 0x075c, |
90 | | 0x0047, 0x0764, 0x0764, 0x0047, 0x0047, 0x0047, 0x076c, 0x0764, 0x0764, 0x0764, 0x0764, 0x0764, 0x0764, 0x0764, 0x0764, 0x0764, 0x0764, 0x0764, 0x0764, 0x0764, 0x0764, 0x0764, 0x0764, 0x0764, 0x0764, 0x0764, 0x0764, 0x0764, 0x0764, 0x0764, 0x0764, 0x0764, |
91 | | 0x0764, 0x0764, 0x0764, 0x0764, 0x0764, 0x0764, 0x0764, 0x02bc, 0x02bc, 0x02bc, 0x02bc, 0x02bc, 0x02bc, 0x02bc, 0x02bc, 0x02bc, 0x02bc, 0x02bc, 0x02bc, 0x02bc, 0x02bc, 0x02bc, 0x02bc, 0x02bc, 0x02bc, 0x02bc, 0x02bc, 0x02bc, 0x02bc, 0x02bc, 0x02bc, 0x02bc, |
92 | | 0x02bc, 0x02bc, 0x02bc, 0x02bc, 0x02bc, 0x02bc, 0x0774, |
93 | | }; |
94 | | static const uint16_t s_stage2[] = { |
95 | | 0x0000, 0x0000, 0x0000, 0x0000, 0x0008, 0x0008, 0x0008, 0x0008, |
96 | | 0x0008, 0x0008, 0x0008, 0x0009, 0x0000, 0x0000, 0x0000, 0x0000, |
97 | | 0x0011, 0x0018, 0x0020, 0x0022, 0x002a, 0x0008, 0x0029, 0x0030, |
98 | | 0x0036, 0x003e, 0x0040, 0x0047, 0x004c, 0x0008, 0x004a, 0x002d, |
99 | | 0x004e, 0x002d, 0x0053, 0x0029, 0x005b, 0x0063, 0x0034, 0x0008, |
100 | | 0x004e, 0x002d, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, |
101 | | 0x0008, 0x0008, 0x002a, 0x006b, 0x0049, 0x0008, 0x0008, 0x0008, |
102 | | 0x0008, 0x004c, 0x0008, 0x004c, 0x0008, 0x0008, 0x0008, 0x0072, |
103 | | 0x005a, 0x0079, 0x0081, 0x0008, 0x0008, 0x0008, 0x0008, 0x0089, |
104 | | 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0008, |
105 | | 0x0008, 0x0091, 0x0092, 0x0098, 0x0028, 0x0091, 0x0092, 0x0098, |
106 | | 0x0028, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x004c, |
107 | | 0x0008, 0x0092, 0x0092, 0x0092, 0x0092, 0x0092, 0x0092, 0x004c, |
108 | | 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x00a0, 0x00a6, 0x0008, |
109 | | 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x00ad, 0x0089, 0x0089, |
110 | | 0x0089, 0x0089, 0x00af, 0x00b5, 0x0008, 0x0008, 0x0008, 0x0008, |
111 | | 0x0008, 0x0008, 0x0008, 0x00bd, 0x0008, 0x0089, 0x00c5, 0x0008, |
112 | | 0x0008, 0x0008, 0x0008, 0x00a0, 0x0089, 0x0089, 0x0008, 0x0008, |
113 | | 0x00c9, 0x0008, 0x0008, 0x00a8, 0x00d1, 0x00d8, 0x00df, 0x0008, |
114 | | 0x0008, 0x00e5, 0x00c8, 0x0008, 0x0008, 0x0008, 0x0089, 0x0089, |
115 | | 0x00a5, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x00a8, |
116 | | 0x0089, 0x00c9, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x00a0, |
117 | | 0x00a4, 0x00ed, 0x0008, 0x0008, 0x00a8, 0x00f5, 0x00f9, 0x00a2, |
118 | | 0x0008, 0x0008, 0x0008, 0x00fd, 0x0008, 0x0008, 0x0008, 0x0008, |
119 | | 0x0105, 0x0089, 0x0008, 0x0008, 0x0008, 0x0008, 0x00ac, 0x0089, |
120 | | 0x0089, 0x010c, 0x0089, 0x0089, 0x0089, 0x0111, 0x0008, 0x0115, |
121 | | 0x011a, 0x011a, 0x011a, 0x011a, 0x0120, 0x0127, 0x012e, 0x00ad, |
122 | | 0x011a, 0x0136, 0x0008, 0x0008, 0x011a, 0x013d, 0x0008, 0x0115, |
123 | | 0x011a, 0x011a, 0x0145, 0x014c, 0x0152, 0x0159, 0x0160, 0x0166, |
124 | | 0x016e, 0x0136, 0x0008, 0x0175, 0x0177, 0x017e, 0x0008, 0x0008, |
125 | | 0x0008, 0x0008, 0x0008, 0x0008, 0x0182, 0x0189, 0x0190, 0x00c8, |
126 | | 0x0008, 0x0008, 0x0008, 0x0194, 0x0008, 0x017e, 0x0008, 0x0115, |
127 | | 0x011a, 0x011a, 0x0145, 0x019c, 0x0152, 0x01a4, 0x01ab, 0x0008, |
128 | | 0x0008, 0x0136, 0x0008, 0x0008, 0x01b2, 0x013d, 0x0008, 0x0115, |
129 | | 0x011a, 0x011a, 0x0145, 0x019c, 0x01ba, 0x0159, 0x0160, 0x01c2, |
130 | | 0x016e, 0x0136, 0x0008, 0x01ca, 0x0008, 0x01d0, 0x0008, 0x0008, |
131 | | 0x0008, 0x0008, 0x0008, 0x0008, 0x01d3, 0x01db, 0x01e2, 0x0166, |
132 | | 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x01ea, 0x0008, 0x0115, |
133 | | 0x011a, 0x011a, 0x0145, 0x011a, 0x01f2, 0x01f9, 0x0200, 0x0206, |
134 | | 0x020e, 0x0136, 0x0008, 0x0008, 0x0008, 0x013d, 0x0008, 0x0008, |
135 | | 0x0008, 0x0008, 0x0008, 0x0008, 0x0212, 0x021a, 0x0221, 0x0227, |
136 | | 0x0008, 0x0136, 0x0008, 0x016a, 0x0008, 0x022f, 0x0008, 0x0115, |
137 | | 0x011a, 0x011a, 0x011a, 0x011a, 0x0237, 0x023e, 0x0245, 0x0166, |
138 | | 0x0008, 0x0136, 0x0008, 0x0008, 0x0008, 0x013d, 0x0008, 0x0008, |
139 | | 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x024c, 0x0253, 0x025b, |
140 | | 0x0008, 0x0008, 0x0263, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, |
141 | | 0x0008, 0x026a, 0x00a5, 0x00ca, 0x008a, 0x0008, 0x0008, 0x0008, |
142 | | 0x0008, 0x0008, 0x0008, 0x026a, 0x00a3, 0x0008, 0x008a, 0x0008, |
143 | | 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x00a6, 0x0008, 0x0008, |
144 | | 0x0178, 0x024d, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, |
145 | | 0x00ad, 0x0128, 0x00b0, 0x00a9, 0x0089, 0x00ad, 0x0089, 0x0089, |
146 | | 0x0089, 0x00a3, 0x0177, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, |
147 | | 0x0008, 0x0008, 0x00a9, 0x0271, 0x0279, 0x0008, 0x0008, 0x01d3, |
148 | | 0x027e, 0x00c9, 0x0008, 0x00e0, 0x0008, 0x0286, 0x00ed, 0x0008, |
149 | | 0x00ed, 0x0008, 0x0008, 0x0008, 0x0008, 0x028e, 0x028e, 0x028e, |
150 | | 0x028e, 0x028e, 0x028e, 0x028e, 0x028e, 0x0296, 0x0296, 0x0296, |
151 | | 0x0296, 0x0296, 0x029e, 0x029e, 0x029e, 0x029e, 0x029e, 0x029e, |
152 | | 0x029e, 0x029e, 0x0008, 0x0008, 0x0008, 0x00a9, 0x0008, 0x0008, |
153 | | 0x0008, 0x0008, 0x02a6, 0x0008, 0x0008, 0x0008, 0x02ac, 0x0008, |
154 | | 0x0008, 0x0136, 0x0008, 0x0008, 0x0008, 0x0136, 0x0008, 0x0008, |
155 | | 0x0008, 0x0008, 0x0008, 0x0008, 0x02b1, 0x0129, 0x02b9, 0x0127, |
156 | | 0x00a4, 0x00ed, 0x0008, 0x0008, 0x0008, 0x0008, 0x00a0, 0x0008, |
157 | | 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0206, 0x0008, 0x0008, |
158 | | 0x0008, 0x0008, 0x00c8, 0x0008, 0x0008, 0x0008, 0x0008, 0x02c1, |
159 | | 0x02c8, 0x02d0, 0x02d7, 0x0008, 0x0008, 0x00ca, 0x02df, 0x0008, |
160 | | 0x0008, 0x0008, 0x0008, 0x02e3, 0x008a, 0x02eb, 0x012a, 0x02f3, |
161 | | 0x00d8, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0089, |
162 | | 0x0089, 0x008a, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, |
163 | | 0x0110, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x02fb, 0x0301, |
164 | | 0x01d9, 0x0008, 0x0008, 0x0008, 0x0008, 0x00a0, 0x00a4, 0x0008, |
165 | | 0x0112, 0x0008, 0x0008, 0x0008, 0x0309, 0x0311, 0x0008, 0x0008, |
166 | | 0x0008, 0x0008, 0x0317, 0x031f, 0x022f, 0x0008, 0x0008, 0x0008, |
167 | | 0x0008, 0x0327, 0x032b, 0x030b, 0x0008, 0x0008, 0x0330, 0x0089, |
168 | | 0x0271, 0x018b, 0x0338, 0x00a6, 0x0008, 0x0340, 0x0348, 0x034d, |
169 | | 0x0022, 0x0355, 0x035d, 0x0363, 0x0008, 0x036a, 0x0008, 0x0008, |
170 | | 0x0372, 0x0089, 0x002c, 0x007a, 0x0025, 0x0008, 0x0008, 0x0008, |
171 | | 0x0008, 0x002c, 0x0008, 0x0008, 0x0089, 0x0089, 0x0089, 0x0089, |
172 | | 0x00c9, 0x0008, 0x037a, 0x004c, 0x0073, 0x0008, 0x0381, 0x002d, |
173 | | 0x0008, 0x036a, 0x0008, 0x0008, 0x0033, 0x0060, 0x0092, 0x0026, |
174 | | 0x0092, 0x0028, 0x0008, 0x004c, 0x0389, 0x038f, 0x0008, 0x0396, |
175 | | 0x0008, 0x0028, 0x0008, 0x0008, 0x039c, 0x0008, 0x007a, 0x0008, |
176 | | 0x0008, 0x0008, 0x0040, 0x03a4, 0x039f, 0x03a9, 0x0068, 0x03ae, |
177 | | 0x007d, 0x0032, 0x0008, 0x03b4, 0x002e, 0x0008, 0x03bc, 0x03ba, |
178 | | 0x0008, 0x0008, 0x03ba, 0x0008, 0x002b, 0x004c, 0x002b, 0x0008, |
179 | | 0x0008, 0x007a, 0x0008, 0x0008, 0x002e, 0x03c4, 0x0008, 0x03cc, |
180 | | 0x0008, 0x0008, 0x03d4, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, |
181 | | 0x0008, 0x03d5, 0x0008, 0x0008, 0x0008, 0x03dd, 0x03e5, 0x03ed, |
182 | | 0x0008, 0x0008, 0x0008, 0x0008, 0x0092, 0x0092, 0x0092, 0x0092, |
183 | | 0x0092, 0x0092, 0x0092, 0x0092, 0x03f5, 0x0092, 0x0092, 0x0092, |
184 | | 0x0092, 0x0098, 0x0092, 0x0092, 0x0008, 0x0008, 0x0008, 0x0008, |
185 | | 0x0098, 0x03fb, 0x0401, 0x0032, 0x0407, 0x040e, 0x0028, 0x0008, |
186 | | 0x0349, 0x007a, 0x0008, 0x0416, 0x041e, 0x0425, 0x042d, 0x0433, |
187 | | 0x043a, 0x043a, 0x0442, 0x043a, 0x0437, 0x0442, 0x0446, 0x043a, |
188 | | 0x044e, 0x0451, 0x043a, 0x043b, 0x0459, 0x045f, 0x0467, 0x046b, |
189 | | 0x0469, 0x0473, 0x043a, 0x0477, 0x0478, 0x047e, 0x0480, 0x0485, |
190 | | 0x0455, 0x0482, 0x048b, 0x0491, 0x0499, 0x0473, 0x04a1, 0x03cf, |
191 | | 0x036a, 0x04a9, 0x0394, 0x002b, 0x04ad, 0x04b5, 0x04bc, 0x0008, |
192 | | 0x04c4, 0x0008, 0x004e, 0x0092, 0x0008, 0x0008, 0x04cc, 0x0008, |
193 | | 0x036a, 0x0008, 0x04a9, 0x04d4, 0x0008, 0x0008, 0x0008, 0x0008, |
194 | | 0x0008, 0x0008, 0x0393, 0x0008, 0x04dc, 0x0008, 0x0008, 0x04e4, |
195 | | 0x0008, 0x0008, 0x0008, 0x0008, 0x04e8, 0x0028, 0x0008, 0x0008, |
196 | | 0x0008, 0x0008, 0x0008, 0x00ca, 0x00a6, 0x0008, 0x0008, 0x0008, |
197 | | 0x0008, 0x0008, 0x0008, 0x0008, 0x00ca, 0x04f0, 0x04f0, 0x04f0, |
198 | | 0x04f6, 0x04f0, 0x04f0, 0x04f0, 0x04f0, 0x04f0, 0x04f0, 0x04fa, |
199 | | 0x0008, 0x04f0, 0x04f0, 0x04f0, 0x04f0, 0x04f0, 0x04f0, 0x04f0, |
200 | | 0x04f0, 0x0502, 0x0008, 0x0008, 0x0008, 0x04f0, 0x04f0, 0x04f0, |
201 | | 0x04f0, 0x04f0, 0x050a, 0x0512, 0x0515, 0x051c, 0x04f0, 0x04f0, |
202 | | 0x04f0, 0x04f0, 0x04f0, 0x04f0, 0x04f0, 0x04f1, 0x0524, 0x04f0, |
203 | | 0x04f0, 0x04f0, 0x04f0, 0x052c, 0x04f0, 0x04f0, 0x04f0, 0x04f0, |
204 | | 0x04f0, 0x051c, 0x04f0, 0x04f1, 0x04f0, 0x04f0, 0x04f0, 0x04f0, |
205 | | 0x04f0, 0x04f0, 0x0502, 0x0534, 0x04f0, 0x04f0, 0x04f0, 0x04f1, |
206 | | 0x04f0, 0x04f0, 0x04f0, 0x04f0, 0x0092, 0x04f0, 0x04f0, 0x04f0, |
207 | | 0x04f0, 0x04f0, 0x04f0, 0x0513, 0x053b, 0x04f0, 0x04f0, 0x04f0, |
208 | | 0x04f0, 0x04f9, 0x04f0, 0x04f0, 0x04f0, 0x04f0, 0x04f0, 0x04f0, |
209 | | 0x04f1, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, |
210 | | 0x00ca, 0x0330, 0x0543, 0x0008, 0x0008, 0x0008, 0x00a8, 0x0008, |
211 | | 0x0008, 0x0008, 0x0008, 0x0549, 0x01cf, 0x0008, 0x0008, 0x0550, |
212 | | 0x01ce, 0x0008, 0x0008, 0x0557, 0x0008, 0x0008, 0x0008, 0x0008, |
213 | | 0x0008, 0x0327, 0x025b, 0x055f, 0x0008, 0x0008, 0x0008, 0x0089, |
214 | | 0x0089, 0x00a6, 0x00ca, 0x0008, 0x0008, 0x0008, 0x0008, 0x00a8, |
215 | | 0x0543, 0x0008, 0x0008, 0x00ca, 0x0089, 0x022f, 0x0008, 0x028e, |
216 | | 0x028e, 0x028e, 0x0567, 0x0111, 0x0008, 0x0008, 0x0008, 0x0008, |
217 | | 0x0008, 0x056c, 0x0572, 0x0579, 0x0008, 0x0008, 0x0008, 0x00ed, |
218 | | 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0580, 0x0587, 0x0008, |
219 | | 0x01cf, 0x058e, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x01ce, |
220 | | 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0596, 0x01c1, |
221 | | 0x00c8, 0x0008, 0x0008, 0x0008, 0x0008, 0x059e, 0x05a6, 0x0008, |
222 | | 0x0008, 0x0008, 0x0008, 0x01d6, 0x05ae, 0x0008, 0x0008, 0x05b6, |
223 | | 0x05b7, 0x05b7, 0x05bb, 0x05b7, 0x05b7, 0x05b7, 0x05b6, 0x05b7, |
224 | | 0x05b7, 0x05bb, 0x05b7, 0x05b7, 0x05b7, 0x05b6, 0x05b7, 0x05b7, |
225 | | 0x05c0, 0x0008, 0x0296, 0x0296, 0x05c8, 0x05cf, 0x029e, 0x029e, |
226 | | 0x029e, 0x029e, 0x029e, 0x05d3, 0x0008, 0x0008, 0x0008, 0x0177, |
227 | | 0x0008, 0x0008, 0x0008, 0x0008, 0x0089, 0x0089, 0x04f0, 0x0532, |
228 | | 0x0089, 0x0089, 0x04f0, 0x04f0, 0x04f5, 0x04f0, 0x04f1, 0x04fa, |
229 | | 0x0008, 0x0008, 0x04f0, 0x04f0, 0x04f0, 0x04f0, 0x0533, 0x0008, |
230 | | 0x0008, 0x0008, 0x01d3, 0x0008, 0x0008, 0x0008, 0x0008, 0x04f1, |
231 | | 0x0008, 0x0000, 0x05db, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, |
232 | | 0x0008, 0x0008, 0x00ed, 0x0008, 0x0008, 0x0008, 0x0008, 0x00c9, |
233 | | 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x00a8, 0x00a5, |
234 | | 0x05e2, 0x00aa, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x02d8, |
235 | | 0x0008, 0x0008, 0x0008, 0x0008, 0x00aa, 0x0008, 0x0008, 0x0008, |
236 | | 0x0008, 0x0008, 0x00a2, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, |
237 | | 0x05e9, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, |
238 | | 0x00aa, 0x05ef, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, |
239 | | 0x0008, 0x05f7, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, |
240 | | 0x0089, 0x008a, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x05ff, |
241 | | 0x00ca, 0x0112, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0607, |
242 | | 0x060e, 0x01d0, 0x00e7, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, |
243 | | 0x0008, 0x00a5, 0x0008, 0x0008, 0x0008, 0x00ca, 0x026e, 0x00a3, |
244 | | 0x0008, 0x0227, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x01cf, |
245 | | 0x0008, 0x0112, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0604, |
246 | | 0x0128, 0x0616, 0x061d, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, |
247 | | 0x0008, 0x0625, 0x062c, 0x0177, 0x00c8, 0x0008, 0x0008, 0x0008, |
248 | | 0x0008, 0x0008, 0x0008, 0x0008, 0x00ca, 0x02f3, 0x00a5, 0x0008, |
249 | | 0x0008, 0x022f, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, |
250 | | 0x0634, 0x063c, 0x0640, 0x0166, 0x0008, 0x0646, 0x00a3, 0x00a3, |
251 | | 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x02f3, |
252 | | 0x064d, 0x0654, 0x065c, 0x0008, 0x0663, 0x0008, 0x0008, 0x0008, |
253 | | 0x0008, 0x0008, 0x0008, 0x055a, 0x0089, 0x066b, 0x0008, 0x0008, |
254 | | 0x0177, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x02f3, |
255 | | 0x0673, 0x067a, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, |
256 | | 0x0008, 0x0166, 0x0158, 0x0682, 0x00c9, 0x0008, 0x0008, 0x0280, |
257 | | 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x02f3, 0x0689, |
258 | | 0x00c9, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, |
259 | | 0x0691, 0x0581, 0x0008, 0x0008, 0x0008, 0x0318, 0x0699, 0x00a4, |
260 | | 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0625, 0x0089, 0x0224, |
261 | | 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x06a1, 0x06a8, |
262 | | 0x06b0, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, |
263 | | 0x0606, 0x06b6, 0x06be, 0x0008, 0x0008, 0x0008, 0x00ad, 0x00a5, |
264 | | 0x0008, 0x0008, 0x0008, 0x0008, 0x00a0, 0x06c6, 0x00ca, 0x0008, |
265 | | 0x0580, 0x02d7, 0x0008, 0x0008, 0x0008, 0x0008, 0x06cd, 0x06d3, |
266 | | 0x0128, 0x00a6, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0166, |
267 | | 0x008a, 0x0581, 0x0008, 0x0008, 0x00ac, 0x0089, 0x0089, 0x06db, |
268 | | 0x06e2, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x06e9, |
269 | | 0x06f0, 0x06f7, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, |
270 | | 0x0008, 0x06ff, 0x0707, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, |
271 | | 0x0008, 0x070f, 0x0008, 0x0717, 0x0008, 0x0008, 0x0008, 0x0008, |
272 | | 0x0008, 0x024f, 0x071f, 0x0727, 0x0008, 0x0008, 0x01d0, 0x0008, |
273 | | 0x0008, 0x0008, 0x0008, 0x00a7, 0x0089, 0x0543, 0x0008, 0x0008, |
274 | | 0x0008, 0x0008, 0x0008, 0x00a8, 0x0089, 0x02f1, 0x0008, 0x0008, |
275 | | 0x0008, 0x0008, 0x0008, 0x0008, 0x00a3, 0x0008, 0x0008, 0x0008, |
276 | | 0x0008, 0x0008, 0x0008, 0x008a, 0x0008, 0x0008, 0x0008, 0x0008, |
277 | | 0x072c, 0x0733, 0x0008, 0x0008, 0x00ca, 0x025a, 0x025b, 0x025b, |
278 | | 0x025b, 0x025b, 0x025b, 0x00ca, 0x00a5, 0x0008, 0x0008, 0x0008, |
279 | | 0x0008, 0x0008, 0x073b, 0x0008, 0x0743, 0x0008, 0x04f0, 0x04f0, |
280 | | 0x04f0, 0x04f0, 0x04f0, 0x04f0, 0x04f0, 0x0008, 0x04f0, 0x04f0, |
281 | | 0x0502, 0x0008, 0x0008, 0x0008, 0x0008, 0x0534, 0x04f0, 0x0533, |
282 | | 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x04f4, 0x074b, |
283 | | 0x04f0, 0x04f0, 0x04f0, 0x04f0, 0x0529, 0x0008, 0x0752, 0x0008, |
284 | | 0x0008, 0x075a, 0x0008, 0x04fe, 0x0008, 0x04f0, 0x04f0, 0x04f0, |
285 | | 0x04f0, 0x04f0, 0x04f0, 0x04f0, 0x04fa, 0x0008, 0x0008, 0x0008, |
286 | | 0x0206, 0x00a4, 0x0008, 0x0008, 0x0008, 0x0089, 0x0089, 0x0089, |
287 | | 0x0089, 0x0089, 0x0543, 0x0089, 0x0089, 0x008a, 0x0008, 0x0008, |
288 | | 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x01d4, 0x0602, 0x02f3, |
289 | | 0x0089, 0x0762, 0x00a4, 0x0008, 0x0008, 0x0008, 0x05ef, 0x0008, |
290 | | 0x0008, 0x0191, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, |
291 | | 0x0008, 0x04f0, 0x04f0, 0x04f1, 0x0008, 0x04f0, 0x04f0, 0x04f1, |
292 | | 0x0008, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x008a, |
293 | | 0x00a0, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x00a3, 0x00ed, |
294 | | 0x0008, 0x01ce, 0x0008, 0x0008, 0x00a0, 0x00ad, 0x0089, 0x0008, |
295 | | 0x0008, 0x008a, 0x0089, 0x0089, 0x0764, 0x00b3, 0x00a5, 0x0008, |
296 | | 0x0008, 0x00ca, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, |
297 | | 0x0177, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x00aa, 0x0008, |
298 | | 0x0008, 0x0008, 0x0008, 0x0008, 0x00a8, 0x0008, 0x0008, 0x008a, |
299 | | 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x00aa, 0x00a5, 0x0008, |
300 | | 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x076c, 0x043a, 0x043a, |
301 | | 0x043a, 0x043a, 0x043a, 0x043a, 0x043a, 0x043a, 0x043b, 0x043a, |
302 | | 0x043a, 0x043a, 0x043a, 0x043a, 0x043a, 0x0092, 0x0774, 0x0092, |
303 | | 0x0092, 0x0092, 0x077c, 0x0092, 0x0092, 0x0092, 0x0092, 0x0092, |
304 | | 0x0784, 0x078c, 0x078e, 0x0092, 0x0796, 0x079d, 0x07a2, 0x0092, |
305 | | 0x07a5, 0x043a, 0x043a, 0x043a, 0x043a, 0x07aa, 0x07b0, 0x07b0, |
306 | | 0x07b0, 0x07b8, 0x043a, 0x04f0, 0x07c0, 0x04f0, 0x0513, 0x07c6, |
307 | | 0x07cb, 0x04f0, 0x07ce, 0x07d6, 0x043a, 0x0444, 0x043a, 0x043a, |
308 | | 0x043a, 0x0442, 0x0442, 0x0442, 0x0442, 0x07d7, 0x043d, 0x07df, |
309 | | 0x0442, 0x0442, 0x0442, 0x0442, 0x0442, 0x0442, 0x0442, 0x07e0, |
310 | | 0x0442, 0x0442, 0x0446, 0x043a, 0x0442, 0x0442, 0x0442, 0x0442, |
311 | | 0x07e6, 0x0446, 0x043a, 0x0442, 0x0442, 0x07ed, 0x07f5, 0x0442, |
312 | | 0x0442, 0x0442, 0x0442, 0x0442, 0x0442, 0x0442, 0x0443, 0x07fd, |
313 | | 0x0442, 0x0442, 0x0442, 0x0442, 0x0442, 0x0442, 0x0442, 0x0442, |
314 | | 0x0800, 0x0442, 0x0442, 0x0442, 0x0442, 0x0442, 0x0442, 0x0442, |
315 | | 0x0807, 0x0391, 0x080f, 0x0442, 0x0442, 0x0442, 0x043a, 0x043a, |
316 | | 0x0468, 0x043a, 0x043a, 0x07d1, 0x043a, 0x076c, 0x043a, 0x043a, |
317 | | 0x043a, 0x043a, 0x043a, 0x043a, 0x043a, 0x043f, 0x0442, 0x0442, |
318 | | 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0444, 0x076c, |
319 | | 0x0802, 0x043e, 0x043a, 0x07d3, 0x043e, 0x0445, 0x0008, 0x0008, |
320 | | 0x0008, 0x0008, 0x0008, 0x0008, 0x0817, 0x043a, 0x0008, 0x0008, |
321 | | 0x04dc, 0x043a, 0x0442, 0x0446, 0x07d7, 0x043a, 0x0008, 0x0817, |
322 | | 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x043a, 0x0008, |
323 | | 0x0819, 0x0008, 0x0008, 0x0008, 0x0008, 0x043a, 0x0008, 0x0008, |
324 | | 0x0008, 0x0391, 0x043a, 0x043a, 0x0008, 0x0821, 0x0442, 0x0442, |
325 | | 0x0442, 0x0442, 0x0442, 0x0826, 0x082a, 0x0442, 0x0442, 0x0442, |
326 | | 0x0442, 0x0442, 0x0442, 0x0442, 0x043a, 0x043a, 0x043a, 0x043a, |
327 | | 0x043a, 0x043a, 0x0442, 0x0445, 0x0442, 0x0475, 0x0442, 0x0442, |
328 | | 0x0442, 0x0442, 0x0442, 0x0442, 0x0443, 0x043c, 0x0442, 0x0800, |
329 | | 0x0442, 0x07d6, 0x0442, 0x07d7, 0x043a, 0x043a, 0x043a, 0x043a, |
330 | | 0x043a, 0x043a, 0x043a, 0x0459, 0x0832, 0x0000, 0x0000, 0x0000, |
331 | | 0x0089, 0x0089, 0x0089, 0x0089, 0x0000, 0x0000, 0x0000, 0x0000, |
332 | | 0x0000, 0x0000, 0x0000, 0x0000, 0x0089, 0x0089, 0x0089, 0x0089, |
333 | | 0x0089, 0x0089, 0x0000, 0x0000, 0x0092, 0x0092, 0x0092, 0x0092, |
334 | | 0x0092, 0x0092, 0x0092, 0x083a, |
335 | | }; |
336 | | static const uint8_t s_stage3[] = { |
337 | | 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, |
338 | | 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, |
339 | | 0x41, 0x40, 0xc0, 0x40, 0x40, 0xc0, 0x40, 0x40, |
340 | | 0xc0, 0x4c, 0xc0, 0x40, 0x40, 0x41, 0xcc, 0x40, |
341 | | 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0x40, 0xc0, 0xc0, |
342 | | 0xc0, 0xc0, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, |
343 | | 0xc0, 0x40, 0x40, 0x40, 0x40, 0x40, 0xc0, 0xc0, |
344 | | 0x40, 0x40, 0x40, 0x40, 0xc0, 0x40, 0xc0, 0xc0, |
345 | | 0xc0, 0x40, 0xc0, 0xc0, 0x40, 0x40, 0x40, 0xc0, |
346 | | 0xc0, 0xc0, 0x40, 0xc0, 0x40, 0xc0, 0x40, 0x40, |
347 | | 0x40, 0x40, 0x40, 0x40, 0xc0, 0xc0, 0xc0, 0x40, |
348 | | 0x40, 0x40, 0x40, 0xc0, 0xc0, 0xc0, 0x40, 0xc0, |
349 | | 0x40, 0x40, 0x40, 0xc0, 0xc0, 0xc0, 0xc0, 0x40, |
350 | | 0xc0, 0x40, 0x40, 0xc0, 0x40, 0xc0, 0x40, 0xc0, |
351 | | 0x40, 0xc0, 0x40, 0x40, 0x40, 0x40, 0xc0, 0x40, |
352 | | 0x40, 0xc0, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, |
353 | | 0x40, 0xc0, 0xc0, 0xc0, 0xc0, 0x40, 0xc0, 0x40, |
354 | | 0xc0, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, |
355 | | 0x02, 0x40, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, |
356 | | 0xc0, 0xc0, 0x40, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, |
357 | | 0x40, 0x40, 0x40, 0x02, 0x02, 0x02, 0x02, 0x02, |
358 | | 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x02, 0x02, |
359 | | 0x02, 0x02, 0x02, 0x02, 0x02, 0x40, 0x02, 0x02, |
360 | | 0x40, 0x02, 0x02, 0x40, 0x02, 0x04, 0x04, 0x04, |
361 | | 0x04, 0x04, 0x04, 0x40, 0x40, 0x02, 0x02, 0x02, |
362 | | 0x40, 0x02, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, |
363 | | 0x40, 0x02, 0x02, 0x02, 0x02, 0x02, 0x04, 0x40, |
364 | | 0x02, 0x02, 0x02, 0x02, 0x02, 0x40, 0x40, 0x02, |
365 | | 0x40, 0x02, 0x02, 0x02, 0x02, 0x40, 0x40, 0x40, |
366 | | 0x40, 0x40, 0x40, 0x40, 0x04, 0x40, 0x40, 0x40, |
367 | | 0x40, 0x40, 0x02, 0x40, 0x40, 0x02, 0x02, 0x40, |
368 | | 0x02, 0x02, 0x02, 0x02, 0x02, 0x40, 0x02, 0x02, |
369 | | 0x02, 0x40, 0x40, 0x40, 0x40, 0x04, 0x04, 0x40, |
370 | | 0x40, 0x40, 0x40, 0x40, 0x02, 0x02, 0x04, 0x02, |
371 | | 0x02, 0x02, 0x02, 0x02, 0x42, 0x40, 0x40, 0x40, |
372 | | 0x40, 0x40, 0x4b, 0x4b, 0x4b, 0x4b, 0x4b, 0x4b, |
373 | | 0x4b, 0x4b, 0x02, 0x42, 0x02, 0x40, 0x42, 0x42, |
374 | | 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x42, |
375 | | 0x42, 0x42, 0x42, 0x0a, 0x42, 0x42, 0x40, 0x40, |
376 | | 0x02, 0x02, 0x40, 0x40, 0x40, 0x40, 0x02, 0x42, |
377 | | 0x42, 0x40, 0x40, 0x40, 0x40, 0x4b, 0x40, 0x4b, |
378 | | 0x4b, 0x4b, 0x4b, 0x4b, 0x4b, 0x40, 0x4b, 0x40, |
379 | | 0x40, 0x40, 0x4b, 0x4b, 0x40, 0x40, 0x02, 0x40, |
380 | | 0x42, 0x42, 0x02, 0x02, 0x02, 0x02, 0x40, 0x40, |
381 | | 0x42, 0x40, 0x40, 0x42, 0x42, 0x0a, 0x40, 0x40, |
382 | | 0x40, 0x40, 0x40, 0x40, 0x40, 0x42, 0x40, 0x40, |
383 | | 0x40, 0x40, 0x4b, 0x4b, 0x40, 0x4b, 0x4b, 0x40, |
384 | | 0x40, 0x40, 0x40, 0x40, 0x40, 0x02, 0x40, 0x02, |
385 | | 0x02, 0x42, 0x40, 0x40, 0x40, 0x40, 0x02, 0x40, |
386 | | 0x42, 0x42, 0x02, 0x02, 0x40, 0x40, 0x40, 0x40, |
387 | | 0x02, 0x40, 0x40, 0x02, 0x02, 0x02, 0x40, 0x40, |
388 | | 0x40, 0x02, 0x40, 0x40, 0x4b, 0x40, 0x4b, 0x4b, |
389 | | 0x40, 0x4b, 0x4b, 0x4b, 0x42, 0x02, 0x02, 0x02, |
390 | | 0x02, 0x02, 0x40, 0x02, 0x42, 0x40, 0x42, 0x42, |
391 | | 0x0a, 0x40, 0x40, 0x4b, 0x02, 0x02, 0x02, 0x02, |
392 | | 0x02, 0x02, 0x4b, 0x4b, 0x40, 0x40, 0x02, 0x40, |
393 | | 0x42, 0x02, 0x40, 0x40, 0x40, 0x40, 0x40, 0x02, |
394 | | 0x02, 0x42, 0x40, 0x4b, 0x40, 0x40, 0x40, 0x40, |
395 | | 0x40, 0x40, 0x02, 0x40, 0x40, 0x40, 0x40, 0x40, |
396 | | 0x40, 0x42, 0x42, 0x02, 0x42, 0x42, 0x40, 0x40, |
397 | | 0x40, 0x42, 0x42, 0x40, 0x42, 0x42, 0x42, 0x02, |
398 | | 0x40, 0x40, 0x02, 0x42, 0x42, 0x42, 0x02, 0x40, |
399 | | 0x40, 0x40, 0x4b, 0x4b, 0x40, 0x40, 0x02, 0x40, |
400 | | 0x02, 0x02, 0x42, 0x42, 0x42, 0x42, 0x40, 0x02, |
401 | | 0x02, 0x40, 0x02, 0x02, 0x02, 0x0a, 0x40, 0x40, |
402 | | 0x40, 0x40, 0x40, 0x02, 0x02, 0x40, 0x4b, 0x4b, |
403 | | 0x4b, 0x40, 0x40, 0x40, 0x40, 0x40, 0x02, 0x40, |
404 | | 0x42, 0x02, 0x42, 0x42, 0x42, 0x42, 0x42, 0x40, |
405 | | 0x02, 0x42, 0x40, 0x42, 0x42, 0x02, 0x02, 0x40, |
406 | | 0x40, 0x40, 0x40, 0x40, 0x42, 0x42, 0x40, 0x02, |
407 | | 0x02, 0x42, 0x42, 0x40, 0x40, 0x40, 0x40, 0x4b, |
408 | | 0x4b, 0x4b, 0x02, 0x02, 0x40, 0x42, 0x42, 0x02, |
409 | | 0x02, 0x02, 0x02, 0x40, 0x42, 0x42, 0x40, 0x42, |
410 | | 0x42, 0x42, 0x0a, 0x44, 0x40, 0x40, 0x02, 0x40, |
411 | | 0x40, 0x40, 0x40, 0x42, 0x42, 0x02, 0x02, 0x02, |
412 | | 0x40, 0x02, 0x40, 0x42, 0x42, 0x42, 0x42, 0x42, |
413 | | 0x42, 0x42, 0x42, 0x40, 0x40, 0x42, 0x42, 0x40, |
414 | | 0x40, 0x40, 0x40, 0x02, 0x40, 0x42, 0x02, 0x02, |
415 | | 0x02, 0x02, 0x42, 0x02, 0x02, 0x02, 0x02, 0x02, |
416 | | 0x02, 0x40, 0x02, 0x02, 0x42, 0x42, 0x02, 0x02, |
417 | | 0x40, 0x40, 0x40, 0x40, 0x02, 0x02, 0x40, 0x40, |
418 | | 0x02, 0x40, 0x42, 0x02, 0x02, 0x40, 0x85, 0x85, |
419 | | 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x46, 0x46, |
420 | | 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x47, 0x47, |
421 | | 0x47, 0x47, 0x47, 0x47, 0x47, 0x47, 0x40, 0x40, |
422 | | 0x02, 0x02, 0x02, 0x42, 0x40, 0x40, 0x02, 0x02, |
423 | | 0x42, 0x40, 0x40, 0x40, 0x40, 0x02, 0x02, 0x42, |
424 | | 0x02, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x02, |
425 | | 0x42, 0x02, 0x02, 0x02, 0x42, 0x42, 0x42, 0x42, |
426 | | 0x02, 0x42, 0x42, 0x42, 0x40, 0x40, 0x40, 0x40, |
427 | | 0x42, 0x42, 0x02, 0x42, 0x42, 0x42, 0x42, 0x42, |
428 | | 0x02, 0x02, 0x02, 0x40, 0x40, 0x40, 0x40, 0x02, |
429 | | 0x42, 0x42, 0x02, 0x40, 0x40, 0x40, 0x40, 0x40, |
430 | | 0x42, 0x02, 0x42, 0x02, 0x40, 0x02, 0x40, 0x40, |
431 | | 0x02, 0x02, 0x02, 0x42, 0x42, 0x42, 0x02, 0x02, |
432 | | 0x02, 0x02, 0x02, 0x40, 0x40, 0x40, 0x40, 0x02, |
433 | | 0x42, 0x02, 0x02, 0x02, 0x42, 0x02, 0x42, 0x42, |
434 | | 0x42, 0x40, 0x42, 0x02, 0x02, 0x02, 0x02, 0x42, |
435 | | 0x42, 0x02, 0x02, 0x42, 0x02, 0x02, 0x02, 0x40, |
436 | | 0x40, 0x40, 0x40, 0x40, 0x40, 0x02, 0x42, 0x02, |
437 | | 0x02, 0x42, 0x42, 0x42, 0x02, 0x42, 0x02, 0x40, |
438 | | 0x40, 0x40, 0x40, 0x42, 0x42, 0x42, 0x42, 0x02, |
439 | | 0x02, 0x02, 0x02, 0x40, 0x02, 0x02, 0x02, 0x02, |
440 | | 0x40, 0x40, 0x40, 0x40, 0x02, 0x40, 0x40, 0x42, |
441 | | 0x40, 0x40, 0x40, 0x02, 0x02, 0x0d, 0x02, 0x02, |
442 | | 0xc0, 0x40, 0x40, 0xc0, 0xc0, 0xc0, 0xc0, 0x40, |
443 | | 0x40, 0xc0, 0xc0, 0x40, 0x40, 0x41, 0x41, 0x02, |
444 | | 0x02, 0x02, 0x02, 0x02, 0x40, 0xc0, 0x40, 0xc0, |
445 | | 0xc0, 0x40, 0xc0, 0x40, 0x40, 0x40, 0xc0, 0x4c, |
446 | | 0x40, 0xc0, 0x40, 0x4c, 0x40, 0x40, 0x40, 0x40, |
447 | | 0x40, 0x40, 0x02, 0x02, 0x02, 0x02, 0x02, 0x41, |
448 | | 0x02, 0x02, 0x40, 0x40, 0x40, 0xc0, 0x40, 0xc0, |
449 | | 0x40, 0x40, 0xc0, 0xcc, 0x40, 0x40, 0x40, 0xc0, |
450 | | 0x40, 0xc0, 0xc0, 0xc0, 0xc0, 0xcc, 0xcc, 0xcc, |
451 | | 0xcc, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x4c, |
452 | | 0x4c, 0x40, 0x40, 0x40, 0x40, 0x40, 0xc0, 0x40, |
453 | | 0xc0, 0x40, 0x40, 0x40, 0xc0, 0x40, 0x40, 0xc0, |
454 | | 0x40, 0x40, 0x40, 0xc0, 0x40, 0x40, 0xc0, 0xc0, |
455 | | 0xc0, 0xc0, 0xc0, 0x40, 0xc0, 0x40, 0x40, 0x40, |
456 | | 0xc0, 0x40, 0x40, 0x40, 0xc0, 0xc0, 0x40, 0x40, |
457 | | 0xc0, 0xc0, 0xc0, 0xc0, 0x40, 0x40, 0x8c, 0x8c, |
458 | | 0x40, 0x40, 0x40, 0x40, 0x4c, 0x80, 0x80, 0x40, |
459 | | 0x40, 0x40, 0x40, 0x40, 0x4c, 0x40, 0x40, 0x40, |
460 | | 0x40, 0x40, 0x40, 0x40, 0x4c, 0x40, 0x8c, 0x8c, |
461 | | 0x8c, 0x8c, 0x4c, 0x4c, 0x4c, 0x8c, 0x4c, 0x4c, |
462 | | 0x8c, 0x40, 0x40, 0x40, 0x40, 0x4c, 0x4c, 0x4c, |
463 | | 0x40, 0x40, 0x40, 0x40, 0x40, 0xc0, 0xc0, 0xcc, |
464 | | 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0x4c, 0x4c, 0x40, |
465 | | 0x40, 0x40, 0x40, 0xc0, 0xc0, 0x40, 0x40, 0xcc, |
466 | | 0xc0, 0x40, 0x40, 0x40, 0x40, 0xc0, 0xc0, 0x40, |
467 | | 0x40, 0xc0, 0x40, 0x40, 0xc0, 0xc0, 0x40, 0x40, |
468 | | 0x40, 0x4c, 0x4c, 0x8c, 0x8c, 0x40, 0x4c, 0x4c, |
469 | | 0x4c, 0x4c, 0x4c, 0xcc, 0xc0, 0x4c, 0xcc, 0x4c, |
470 | | 0x4c, 0x4c, 0x4c, 0xcc, 0xcc, 0x4c, 0x4c, 0x4c, |
471 | | 0x40, 0x8c, 0x8c, 0x4c, 0x4c, 0x4c, 0x4c, 0xcc, |
472 | | 0x4c, 0xcc, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, |
473 | | 0x4c, 0x4c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, |
474 | | 0x8c, 0x8c, 0x4c, 0x4c, 0x4c, 0x4c, 0xcc, 0xcc, |
475 | | 0x4c, 0xcc, 0xcc, 0xcc, 0x4c, 0xcc, 0xcc, 0x4c, |
476 | | 0xcc, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x40, |
477 | | 0x40, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x4c, |
478 | | 0x4c, 0x4c, 0x8c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, |
479 | | 0x4c, 0xcc, 0xcc, 0x4c, 0x4c, 0x8c, 0x8c, 0x4c, |
480 | | 0x4c, 0x4c, 0x4c, 0x4c, 0x8c, 0x8c, 0xcc, 0xcc, |
481 | | 0xcc, 0xcc, 0xcc, 0xcc, 0x8c, 0xcc, 0xcc, 0xcc, |
482 | | 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x8c, 0x8c, 0xcc, |
483 | | 0x8c, 0xcc, 0xcc, 0x8c, 0xcc, 0xcc, 0x8c, 0xcc, |
484 | | 0xcc, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x8c, 0x40, |
485 | | 0x40, 0x4c, 0x4c, 0x4c, 0x40, 0x4c, 0x40, 0x4c, |
486 | | 0x40, 0x8c, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, |
487 | | 0x40, 0x4c, 0x40, 0x40, 0x4c, 0x40, 0x40, 0x40, |
488 | | 0x40, 0x8c, 0x40, 0x8c, 0x40, 0x40, 0x40, 0x8c, |
489 | | 0x8c, 0x8c, 0x40, 0x8c, 0x40, 0x40, 0x40, 0x4c, |
490 | | 0x4c, 0x4c, 0x4c, 0x4c, 0x40, 0x40, 0x40, 0x40, |
491 | | 0x40, 0x8c, 0x8c, 0x8c, 0x40, 0x40, 0x40, 0x40, |
492 | | 0x40, 0x40, 0x40, 0x8c, 0x40, 0x40, 0x40, 0x40, |
493 | | 0x40, 0x4c, 0x4c, 0x4c, 0x40, 0x40, 0x40, 0x8c, |
494 | | 0x8c, 0x40, 0x40, 0x40, 0x40, 0x8c, 0xc0, 0xc0, |
495 | | 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, |
496 | | 0x40, 0x80, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, |
497 | | 0x40, 0x40, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, |
498 | | 0x40, 0x40, 0x80, 0x80, 0x02, 0x02, 0x02, 0x02, |
499 | | 0x82, 0x82, 0x8c, 0x80, 0x80, 0x80, 0x80, 0x80, |
500 | | 0x80, 0x80, 0x8c, 0x80, 0x40, 0x80, 0x80, 0x80, |
501 | | 0x80, 0x80, 0x80, 0x80, 0x40, 0x02, 0x02, 0x80, |
502 | | 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x40, 0x40, |
503 | | 0x40, 0x80, 0x80, 0x80, 0x40, 0x40, 0x40, 0x40, |
504 | | 0x40, 0x40, 0x40, 0x80, 0x8c, 0x80, 0x80, 0x80, |
505 | | 0x80, 0x80, 0x80, 0x02, 0x02, 0x02, 0x02, 0x02, |
506 | | 0x02, 0x40, 0x40, 0x02, 0x40, 0x40, 0x40, 0x02, |
507 | | 0x40, 0x40, 0x40, 0x42, 0x42, 0x02, 0x02, 0x42, |
508 | | 0x42, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x42, |
509 | | 0x42, 0x42, 0x42, 0x02, 0x02, 0x40, 0x40, 0x85, |
510 | | 0x85, 0x85, 0x85, 0x85, 0x40, 0x40, 0x40, 0x02, |
511 | | 0x42, 0x42, 0x02, 0x02, 0x42, 0x42, 0x02, 0x02, |
512 | | 0x42, 0x42, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, |
513 | | 0x40, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x42, |
514 | | 0x02, 0x02, 0x42, 0x42, 0x02, 0x02, 0x40, 0x40, |
515 | | 0x40, 0x40, 0x02, 0x42, 0x40, 0x40, 0x02, 0x40, |
516 | | 0x02, 0x02, 0x02, 0x40, 0x40, 0x02, 0x40, 0x40, |
517 | | 0x40, 0x42, 0x02, 0x02, 0x42, 0x42, 0x40, 0x40, |
518 | | 0x40, 0x40, 0x40, 0x42, 0x02, 0x40, 0x02, 0x42, |
519 | | 0x42, 0x40, 0x42, 0x02, 0x40, 0x40, 0x88, 0x89, |
520 | | 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x88, |
521 | | 0x89, 0x89, 0x89, 0x89, 0x40, 0x40, 0x40, 0x40, |
522 | | 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x40, |
523 | | 0x40, 0x40, 0x47, 0x47, 0x47, 0x47, 0x47, 0x40, |
524 | | 0x40, 0x40, 0x40, 0x41, 0x02, 0x02, 0x02, 0x40, |
525 | | 0xc0, 0x40, 0x40, 0x02, 0x02, 0x02, 0x40, 0x02, |
526 | | 0x02, 0x40, 0x40, 0x40, 0x02, 0x02, 0x40, 0x40, |
527 | | 0x40, 0x02, 0x02, 0x02, 0x02, 0x40, 0x40, 0x42, |
528 | | 0x02, 0x42, 0x40, 0x40, 0x40, 0x40, 0x40, 0x02, |
529 | | 0x40, 0x40, 0x02, 0x02, 0x40, 0x40, 0x40, 0x42, |
530 | | 0x42, 0x42, 0x02, 0x02, 0x02, 0x02, 0x42, 0x02, |
531 | | 0x02, 0x40, 0x40, 0x04, 0x40, 0x40, 0x42, 0x40, |
532 | | 0x44, 0x44, 0x40, 0x40, 0x40, 0x40, 0x02, 0x02, |
533 | | 0x02, 0x02, 0x40, 0x42, 0x02, 0x40, 0x40, 0x40, |
534 | | 0x40, 0x42, 0x42, 0x42, 0x02, 0x02, 0x42, 0x42, |
535 | | 0x02, 0x42, 0x02, 0x02, 0x40, 0x40, 0x40, 0x02, |
536 | | 0x02, 0x40, 0x42, 0x42, 0x02, 0x42, 0x42, 0x42, |
537 | | 0x42, 0x40, 0x40, 0x42, 0x42, 0x42, 0x40, 0x40, |
538 | | 0x42, 0x42, 0x40, 0x40, 0x02, 0x02, 0x40, 0x42, |
539 | | 0x40, 0x40, 0x42, 0x40, 0x42, 0x42, 0x42, 0x40, |
540 | | 0x42, 0x42, 0x02, 0x42, 0x02, 0x44, 0x02, 0x40, |
541 | | 0x40, 0x40, 0x40, 0x40, 0x02, 0x02, 0x40, 0x40, |
542 | | 0x40, 0x40, 0x40, 0x42, 0x42, 0x02, 0x02, 0x02, |
543 | | 0x42, 0x02, 0x40, 0x02, 0x42, 0x02, 0x42, 0x42, |
544 | | 0x42, 0x42, 0x02, 0x42, 0x02, 0x02, 0x40, 0x40, |
545 | | 0x40, 0x40, 0x42, 0x42, 0x42, 0x42, 0x02, 0x02, |
546 | | 0x42, 0x02, 0x02, 0x02, 0x42, 0x42, 0x02, 0x42, |
547 | | 0x02, 0x40, 0x40, 0x40, 0x02, 0x42, 0x02, 0x42, |
548 | | 0x42, 0x40, 0x40, 0x02, 0x02, 0x02, 0x02, 0x42, |
549 | | 0x02, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x40, |
550 | | 0x42, 0x40, 0x40, 0x02, 0x02, 0x42, 0x02, 0x44, |
551 | | 0x42, 0x44, 0x42, 0x02, 0x40, 0x40, 0x40, 0x40, |
552 | | 0x02, 0x02, 0x42, 0x42, 0x42, 0x42, 0x02, 0x40, |
553 | | 0x40, 0x40, 0x42, 0x40, 0x40, 0x40, 0x02, 0x42, |
554 | | 0x44, 0x02, 0x02, 0x02, 0x02, 0x40, 0x40, 0x40, |
555 | | 0x40, 0x44, 0x44, 0x44, 0x44, 0x02, 0x02, 0x02, |
556 | | 0x02, 0x02, 0x02, 0x40, 0x42, 0x02, 0x02, 0x02, |
557 | | 0x02, 0x02, 0x02, 0x42, 0x02, 0x02, 0x42, 0x02, |
558 | | 0x02, 0x40, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, |
559 | | 0x40, 0x40, 0x02, 0x40, 0x02, 0x02, 0x40, 0x02, |
560 | | 0x02, 0x02, 0x02, 0x02, 0x02, 0x44, 0x02, 0x40, |
561 | | 0x40, 0x42, 0x42, 0x42, 0x42, 0x42, 0x40, 0x02, |
562 | | 0x02, 0x40, 0x42, 0x42, 0x02, 0x42, 0x02, 0x40, |
563 | | 0x40, 0x40, 0x02, 0x02, 0x42, 0x42, 0x40, 0x02, |
564 | | 0x02, 0x44, 0x42, 0x40, 0x40, 0x40, 0x40, 0x02, |
565 | | 0x02, 0x02, 0x40, 0x40, 0x40, 0x42, 0x42, 0x02, |
566 | | 0x42, 0x02, 0x40, 0x40, 0x40, 0x40, 0x40, 0x46, |
567 | | 0x40, 0x40, 0x40, 0x46, 0x46, 0x46, 0x40, 0x40, |
568 | | 0x40, 0x40, 0x40, 0x80, 0x80, 0x80, 0x80, 0x02, |
569 | | 0x40, 0x40, 0x40, 0x82, 0x82, 0x40, 0x40, 0x40, |
570 | | 0x40, 0x40, 0x40, 0x80, 0x80, 0x80, 0x80, 0x40, |
571 | | 0x80, 0x80, 0x40, 0x40, 0x80, 0x40, 0x40, 0x40, |
572 | | 0x40, 0x40, 0x80, 0x80, 0x80, 0x40, 0x40, 0x80, |
573 | | 0x40, 0x40, 0x02, 0x02, 0x02, 0x40, 0x40, 0x02, |
574 | | 0x02, 0x02, 0x02, 0x02, 0x4c, 0x4c, 0x4c, 0x4c, |
575 | | 0x8c, 0x4c, 0x4c, 0x4c, 0xc0, 0xc0, 0xc0, 0x40, |
576 | | 0x40, 0x4c, 0x4c, 0x4c, 0xc0, 0xc0, 0xc0, 0xc0, |
577 | | 0xc0, 0xc0, 0x40, 0x4c, 0xc0, 0xc0, 0x40, 0x40, |
578 | | 0x4c, 0x4c, 0x4c, 0x4c, 0xcc, 0xcc, 0xc0, 0xc0, |
579 | | 0xc0, 0xc0, 0xc0, 0xc0, 0xcc, 0xcc, 0xc0, 0xc0, |
580 | | 0xc0, 0xc0, 0xc0, 0xc0, 0x8c, 0xc0, 0x8c, 0x8c, |
581 | | 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0xc0, 0xc0, 0xc0, |
582 | | 0xc0, 0xc0, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, |
583 | | 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, |
584 | | 0x80, 0x8c, 0x8c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, |
585 | | 0x80, 0x80, 0x8c, 0x80, 0x80, 0x80, 0x80, 0x80, |
586 | | 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x80, 0x4c, |
587 | | 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x8c, 0x8c, |
588 | | 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x8c, |
589 | | 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x4c, 0x8c, 0x8c, |
590 | | 0x8c, 0x4c, 0x4c, 0x4c, 0x4c, 0x8c, 0x4c, 0x4c, |
591 | | 0x4c, 0x8c, 0x4c, 0x4c, 0x4c, 0x8c, 0x8c, 0x8c, |
592 | | 0x82, 0x82, 0x82, 0x82, 0x82, 0x8c, 0x4c, 0x8c, |
593 | | 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x4c, 0x4c, 0x8c, |
594 | | 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x40, 0x40, 0x4c, |
595 | | 0x4c, 0x4c, 0x8c, 0x8c, 0x8c, 0x8c, 0x4c, 0x40, |
596 | | 0x40, 0x40, 0x40, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, |
597 | | 0x4c, 0x40, 0x40, 0x40, 0x40, 0x8c, 0x8c, 0x8c, |
598 | | 0x8c, 0x40, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, |
599 | | 0x40, 0x8c, 0x41, 0x02, 0x41, 0x41, 0x41, 0x41, |
600 | | 0x41, 0x41, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, |
601 | | 0x40, 0x40, |
602 | | }; |
603 | | static const uint32_t s_joinRules[2][16] = { |
604 | | { |
605 | | 0x03cfffcf, 0x0fffffff, 0x03cfffcf, 0x03cfff4f, |
606 | | 0x0000000c, 0x03c0c3cf, 0x03cf0fcf, 0x03cf3fcf, |
607 | | 0x03cf0fcf, 0x03cf3fcf, 0x030fffcf, 0x03cfffcf, |
608 | | 0x03cfffcf, 0x00cfffcf, 0x00000000, 0x00000000, |
609 | | }, |
610 | | { |
611 | | 0x03cfffcf, 0x0fffffff, 0x03cfffcf, 0x03cfffcf, |
612 | | 0x0000000c, 0x03c0c3cf, 0x03cf0fcf, 0x03cf3fcf, |
613 | | 0x03cf0fcf, 0x03cf3fcf, 0x030fffcf, 0x03cfffcf, |
614 | | 0x03cfffcf, 0x00cfffcf, 0x00000000, 0x00000000, |
615 | | }, |
616 | | }; |
617 | | static int ucdLookup(const char32_t cp) |
618 | 22.7k | { |
619 | 22.7k | const uint16_t s0 = s_stage0[cp >> 11]; |
620 | 22.7k | const uint16_t s1 = s_stage1[s0 + ((cp >> 6) & 31)]; |
621 | 22.7k | const uint16_t s2 = s_stage2[s1 + ((cp >> 3) & 7)]; |
622 | 22.7k | const uint8_t s3 = s_stage3[s2 + ((cp >> 0) & 7)]; |
623 | 22.7k | return s3; |
624 | 22.7k | } |
625 | | static int ucdGraphemeJoins(const int state, const int lead, const int trail) |
626 | 10.9k | { |
627 | 10.9k | const int l = lead & 15; |
628 | 10.9k | const int t = trail & 15; |
629 | 10.9k | return (s_joinRules[state][l] >> (t * 2)) & 3; |
630 | 10.9k | } |
631 | | static bool ucdGraphemeDone(const int state) |
632 | 10.9k | { |
633 | 10.9k | return state == 3; |
634 | 10.9k | } |
635 | | static int ucdToCharacterWidth(const int val) |
636 | 11.8k | { |
637 | 11.8k | return val >> 6; |
638 | 11.8k | } |
639 | | // clang-format on |
640 | | // End of generated code |
641 | | |
642 | | /* |
643 | | * This file is part of mpv. |
644 | | * |
645 | | * mpv is free software; you can redistribute it and/or |
646 | | * modify it under the terms of the GNU Lesser General Public |
647 | | * License as published by the Free Software Foundation; either |
648 | | * version 2.1 of the License, or (at your option) any later version. |
649 | | * |
650 | | * mpv is distributed in the hope that it will be useful, |
651 | | * but WITHOUT ANY WARRANTY; without even the implied warranty of |
652 | | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
653 | | * GNU Lesser General Public License for more details. |
654 | | * |
655 | | * You should have received a copy of the GNU Lesser General Public |
656 | | * License along with mpv. If not, see <http://www.gnu.org/licenses/>. |
657 | | */ |
658 | | |
659 | | #include "common/common.h" |
660 | | |
661 | | int term_disp_width(bstr str, int max_width, const unsigned char **cut_pos) |
662 | 149k | { |
663 | 149k | static const int ambiguous_width = 1; |
664 | | |
665 | 149k | int width = 0; |
666 | | |
667 | 149k | const unsigned char *prev_pos = str.start; |
668 | 15.2M | while (str.len) { |
669 | 15.1M | int current_width = 0; |
670 | | |
671 | 15.1M | if (bstr_eatstart0(&str, "\033[")) { |
672 | 591k | while (str.len && !((*str.start >= '@' && *str.start <= '~') || *str.start == 'm')) |
673 | 587k | str = bstr_cut(str, 1); |
674 | 3.69k | str = bstr_cut(str, 1); |
675 | 3.69k | goto next; |
676 | 3.69k | } |
677 | | |
678 | 15.1M | prev_pos = str.start; |
679 | 15.1M | int cp = bstr_decode_utf8(str, &str); |
680 | | |
681 | | // Stop processing on any invalid input |
682 | 15.1M | if (cp < 0) |
683 | 16.0k | return 0; |
684 | | |
685 | 15.1M | if (cp == '\r') { |
686 | 608 | width = 0; |
687 | 608 | goto next; |
688 | 608 | } |
689 | | |
690 | 15.1M | if (cp == '\t') { |
691 | | // Assume tabstop width is 8 |
692 | 2.16k | current_width = 8 - width % 8; |
693 | 2.16k | goto next; |
694 | 2.16k | } |
695 | | |
696 | 15.1M | if (cp < 0x20) |
697 | 142k | goto next; |
698 | | |
699 | 14.9M | if (cp <= 0x7E) { |
700 | 14.9M | current_width = 1; |
701 | 14.9M | goto next; |
702 | 14.9M | } |
703 | | |
704 | 11.1k | int state = 0; |
705 | | |
706 | 11.8k | while (true) { |
707 | 11.8k | int lead = ucdLookup(cp); |
708 | 11.8k | int w = ucdToCharacterWidth(lead); |
709 | 11.8k | if (w == 3) |
710 | 1.56k | w = ambiguous_width; |
711 | | |
712 | | // U+FE0F Variation Selector-16 is used to turn unqualified Emojis into qualified ones. |
713 | | // By convention, this turns them from being ambiguous width (= narrow) into wide ones. |
714 | | // We achieve this here by explicitly giving this codepoint a wide width. |
715 | | // Later down below we'll clamp width back to <= 2. |
716 | 11.8k | if (cp == 0xFE0F) |
717 | 224 | w = 2; |
718 | | |
719 | 11.8k | current_width += w; |
720 | | |
721 | 11.8k | if (!str.len) |
722 | 0 | break; |
723 | | |
724 | | // Fetch next codepoint in grapheme cluster |
725 | 11.8k | bstr cluster_end; |
726 | 11.8k | cp = bstr_decode_utf8(str, &cluster_end); |
727 | | // Stop processing on any invalid input |
728 | 11.8k | if (cp < 0) |
729 | 970 | return 0; |
730 | 10.9k | int trail = ucdLookup(cp); |
731 | | |
732 | 10.9k | state = ucdGraphemeJoins(state, lead, trail); |
733 | 10.9k | if (ucdGraphemeDone(state)) |
734 | 10.2k | break; |
735 | | |
736 | 684 | str = cluster_end; |
737 | 684 | } |
738 | | |
739 | 10.2k | current_width = MPMIN(current_width, 2); |
740 | 15.1M | next: |
741 | 15.1M | if (width + current_width > max_width) { |
742 | 0 | mp_assert(prev_pos < str.start + str.len); |
743 | 0 | *cut_pos = prev_pos; |
744 | 0 | break; |
745 | 0 | } |
746 | 15.1M | width += current_width; |
747 | 15.1M | if (width == max_width) { |
748 | 0 | if (str.len) |
749 | 0 | *cut_pos = str.start; |
750 | 0 | break; |
751 | 0 | } |
752 | 15.1M | } |
753 | | |
754 | 132k | return width; |
755 | 149k | } |