]> asedeno.scripts.mit.edu Git - PuTTY.git/blob - minibidi.h
Bah. Ben points out that SSH_1_ version strings should still end in
[PuTTY.git] / minibidi.h
1 /************************************************************************
2  * $Id$
3  *
4  * ------------
5  * Description:
6  * ------------
7  * This is an implemention of Unicode's Bidirectional Algorithm
8  * (known as UAX #9).
9  *
10  *   http://www.unicode.org/reports/tr9/
11  * 
12  * Author: Ahmad Khalifa
13  *
14  * -----------------
15  * Revision Details:    (Updated by Revision Control System)
16  * -----------------
17  *  $Date$
18  *  $Author$
19  *  $Revision$
20  *
21  * (www.arabeyes.org - under MIT license)
22  *
23  ************************************************************************/
24
25 /*
26  * TODO:
27  * =====
28  * - work almost finished
29  * - Shaping Table to be expanded to include the whole range.
30  * - Ligature handling
31  */
32
33 #include <stdlib.h>     /* definition of wchar_t*/
34
35 #define LMASK   0x3F    /* Embedding Level mask */
36 #define OMASK   0xC0    /* Override mask */
37 #define OISL    0x80    /* Override is L */
38 #define OISR    0x40    /* Override is R */
39
40 /* Shaping Helpers */
41 #define STYPE(xh) (((xh >= SHAPE_FIRST) && (xh <= SHAPE_LAST)) ? \
42 shapetypes[xh-SHAPE_FIRST].type : SU) /*))*/
43 #define SISOLATED(xh) (shapetypes[xh-SHAPE_FIRST].form_b)
44 #define SFINAL(xh) xh+1
45 #define SINITIAL(xh) xh+2
46 #define SMEDIAL(ch) ch+3
47
48 typedef struct bidi_char {
49     wchar_t origwc, wc;
50     unsigned short index;
51 } bidi_char;
52
53 /* function declarations */
54 void flipThisRun(bidi_char *from, unsigned char* level, int max, int count);
55 int findIndexOfRun(unsigned char* level , int start, int count, int tlevel);
56 unsigned char getType(wchar_t ch);
57 unsigned char setOverrideBits(unsigned char level, unsigned char override);
58 unsigned char getPreviousLevel(unsigned char* level, int from);
59 unsigned char leastGreaterOdd(unsigned char x);
60 unsigned char leastGreaterEven(unsigned char x);
61 unsigned char getRLE(wchar_t ch);
62 int do_shape(bidi_char *line, bidi_char *to, int count);
63 int do_bidi(bidi_char *line, int count);
64 void doMirror(wchar_t* ch);
65
66 /* character types */
67 enum
68 {
69    L,
70    LRE,
71    LRO,
72    R,
73    AL,
74    RLE,
75    RLO,
76    PDF,
77    EN,
78    ES,
79    ET,
80    AN,
81    CS,
82    NSM,
83    BN,
84    B,
85    S,
86    WS,
87    ON,
88 };
89
90 /* Shaping Types */
91 enum
92 {
93         SL, /* Left-Joining, doesnt exist in U+0600 - U+06FF */
94         SR, /* Right-Joining, ie has Isolated, Final */
95         SD, /* Dual-Joining, ie has Isolated, Final, Initial, Medial */
96         SU, /* Non-Joining */
97         SC  /* Join-Causing, like U+0640 (TATWEEL) */
98 };
99
100 typedef struct{
101         char type;
102         wchar_t form_b;
103 } shape_node;
104
105 /* Kept near the actual table, for verification. */
106 #define SHAPE_FIRST 0x621
107 #define SHAPE_LAST 0x64A
108
109 const shape_node shapetypes[] = {
110 /* index, Typ, Iso, Ligature Index*/
111 /* 621 */ {SU, 0xFE80},
112 /* 622 */ {SR, 0xFE81},
113 /* 623 */ {SR, 0xFE83},
114 /* 624 */ {SR, 0xFE85},
115 /* 625 */ {SR, 0xFE87},
116 /* 626 */ {SD, 0xFE89},
117 /* 627 */ {SR, 0xFE8D},
118 /* 628 */ {SD, 0xFE8F},
119 /* 629 */ {SR, 0xFE93},
120 /* 62A */ {SD, 0xFE95},
121 /* 62B */ {SD, 0xFE99},
122 /* 62C */ {SD, 0xFE9D},
123 /* 62D */ {SD, 0xFEA1},
124 /* 62E */ {SD, 0xFEA5},
125 /* 62F */ {SR, 0xFEA9},
126 /* 630 */ {SR, 0xFEAB},
127 /* 631 */ {SR, 0xFEAD},
128 /* 632 */ {SR, 0xFEAF},
129 /* 633 */ {SD, 0xFEB1},
130 /* 634 */ {SD, 0xFEB5},
131 /* 635 */ {SD, 0xFEB9},
132 /* 636 */ {SD, 0xFEBD},
133 /* 637 */ {SD, 0xFEC1},
134 /* 638 */ {SD, 0xFEC5},
135 /* 639 */ {SD, 0xFEC9},
136 /* 63A */ {SD, 0xFECD},
137 /* 63B */ {SU, 0x0},
138 /* 63C */ {SU, 0x0},
139 /* 63D */ {SU, 0x0},
140 /* 63E */ {SU, 0x0},
141 /* 63F */ {SU, 0x0},
142 /* 640 */ {SC, 0x0},
143 /* 641 */ {SD, 0xFED1},
144 /* 642 */ {SD, 0xFED5},
145 /* 643 */ {SD, 0xFED9},
146 /* 644 */ {SD, 0xFEDD},
147 /* 645 */ {SD, 0xFEE1},
148 /* 646 */ {SD, 0xFEE5},
149 /* 647 */ {SD, 0xFEE9},
150 /* 648 */ {SR, 0xFEED},
151 /* 649 */ {SR, 0xFEEF}, /* SD */
152 /* 64A */ {SD, 0xFEF1},
153 };
154
155 /*
156  * This describes the data byte and its frequency  
157  */
158 typedef struct
159 {
160    unsigned char f;
161    unsigned char d;
162 }RLENode;
163
164
165 /* This is an array of RLENodes, which is the
166  * Compressed unicode types table
167  */
168 const unsigned char RLE_table[] =
169 {
170    0x09, 0x10, 0x01, 0x0F, 0x01, 0x10, 0x01, 0x11,
171    0x01, 0x0F, 0x01, 0x0E, 0x0E, 0x0F, 0x03, 0x10,
172    0x01, 0x11, 0x01, 0x12, 0x02, 0x0A, 0x03, 0x12,
173    0x05, 0x0A, 0x01, 0x0C, 0x01, 0x0A, 0x01, 0x0C,
174    0x01, 0x09, 0x01, 0x08, 0x0A, 0x0C, 0x01, 0x12,
175    0x06, 0x00, 0x1A, 0x12, 0x06, 0x00, 0x1A, 0x12,
176    0x04, 0x0E, 0x06, 0x0F, 0x01, 0x0E, 0x1A, 0x0C,
177    0x01, 0x12, 0x01, 0x0A, 0x04, 0x12, 0x04, 0x00,
178    0x01, 0x12, 0x05, 0x0A, 0x02, 0x08, 0x02, 0x12,
179    0x01, 0x00, 0x01, 0x12, 0x03, 0x08, 0x01, 0x00,
180    0x01, 0x12, 0x05, 0x00, 0x17, 0x12, 0x01, 0x00,
181    0x1F, 0x12, 0x01, 0x00, 0xFF, 0x00, 0x2A, 0x12,
182    0x01, 0x00, 0x12, 0x12, 0x1C, 0x00, 0x5E, 0x12,
183    0x02, 0x00, 0x09, 0x12, 0x02, 0x00, 0x07, 0x12,
184    0x0E, 0x00, 0x02, 0x12, 0x0E, 0x00, 0x05, 0x12,
185    0x09, 0x00, 0x01, 0x12, 0x11, 0x0D, 0x50, 0x12,
186    0x10, 0x0D, 0x10, 0x12, 0x0A, 0x00, 0x01, 0x12,
187    0x0B, 0x00, 0x01, 0x12, 0x01, 0x00, 0x03, 0x12,
188    0x01, 0x00, 0x01, 0x12, 0x01, 0x00, 0x14, 0x12,
189    0x01, 0x00, 0x2C, 0x12, 0x01, 0x00, 0x26, 0x12,
190    0x0A, 0x00, 0x83, 0x0D, 0x04, 0x12, 0x01, 0x0D,
191    0x02, 0x00, 0x45, 0x12, 0x01, 0x00, 0x26, 0x12,
192    0x02, 0x00, 0x02, 0x12, 0x06, 0x00, 0x10, 0x12,
193    0x21, 0x00, 0x26, 0x12, 0x02, 0x00, 0x07, 0x12,
194    0x01, 0x00, 0x27, 0x12, 0x01, 0x00, 0x01, 0x12,
195    0x07, 0x0D, 0x11, 0x12, 0x01, 0x0D, 0x17, 0x12,
196    0x01, 0x0D, 0x03, 0x03, 0x01, 0x0D, 0x01, 0x03,
197    0x01, 0x0D, 0x02, 0x03, 0x01, 0x0D, 0x01, 0x12,
198    0x0B, 0x03, 0x1B, 0x12, 0x05, 0x03, 0x05, 0x12,
199    0x17, 0x0C, 0x01, 0x12, 0x0E, 0x04, 0x01, 0x12,
200    0x03, 0x04, 0x01, 0x12, 0x01, 0x04, 0x1A, 0x12,
201    0x05, 0x04, 0x0B, 0x0D, 0x0B, 0x12, 0x0A, 0x0B,
202    0x0A, 0x0A, 0x01, 0x0B, 0x02, 0x04, 0x03, 0x0D,
203    0x01, 0x04, 0x65, 0x0D, 0x07, 0x04, 0x01, 0x0D,
204    0x07, 0x04, 0x02, 0x0D, 0x02, 0x12, 0x01, 0x0D,
205    0x04, 0x12, 0x02, 0x08, 0x0A, 0x04, 0x05, 0x12,
206    0x01, 0x04, 0x0E, 0x12, 0x01, 0x0E, 0x01, 0x04,
207    0x01, 0x0D, 0x01, 0x04, 0x1B, 0x12, 0x03, 0x0D,
208    0x1B, 0x12, 0x35, 0x04, 0x26, 0x0D, 0x0B, 0x04,
209    0x01, 0x12, 0xFF, 0x12, 0x50, 0x0D, 0x02, 0x00,
210    0x01, 0x12, 0x01, 0x00, 0x35, 0x12, 0x02, 0x0D,
211    0x01, 0x00, 0x04, 0x0D, 0x08, 0x00, 0x04, 0x0D,
212    0x01, 0x12, 0x02, 0x00, 0x01, 0x0D, 0x04, 0x12,
213    0x03, 0x00, 0x0A, 0x0D, 0x02, 0x00, 0x0D, 0x12,
214    0x10, 0x0D, 0x01, 0x00, 0x02, 0x12, 0x01, 0x00,
215    0x08, 0x12, 0x02, 0x00, 0x02, 0x12, 0x02, 0x00,
216    0x16, 0x12, 0x01, 0x00, 0x07, 0x12, 0x01, 0x00,
217    0x01, 0x12, 0x03, 0x00, 0x04, 0x12, 0x02, 0x0D,
218    0x01, 0x12, 0x01, 0x00, 0x03, 0x0D, 0x04, 0x12,
219    0x02, 0x00, 0x02, 0x12, 0x02, 0x00, 0x02, 0x0D,
220    0x01, 0x12, 0x09, 0x00, 0x01, 0x12, 0x04, 0x00,
221    0x02, 0x12, 0x01, 0x00, 0x03, 0x0D, 0x02, 0x12,
222    0x02, 0x00, 0x0C, 0x0A, 0x02, 0x00, 0x07, 0x12,
223    0x07, 0x0D, 0x01, 0x12, 0x02, 0x00, 0x06, 0x12,
224    0x04, 0x00, 0x02, 0x12, 0x02, 0x00, 0x16, 0x12,
225    0x01, 0x00, 0x07, 0x12, 0x01, 0x00, 0x02, 0x12,
226    0x01, 0x00, 0x02, 0x12, 0x01, 0x00, 0x02, 0x12,
227    0x02, 0x0D, 0x01, 0x12, 0x01, 0x00, 0x03, 0x0D,
228    0x02, 0x12, 0x04, 0x0D, 0x02, 0x12, 0x02, 0x0D,
229    0x03, 0x12, 0x0B, 0x00, 0x04, 0x12, 0x01, 0x00,
230    0x01, 0x12, 0x07, 0x00, 0x0A, 0x0D, 0x02, 0x00,
231    0x03, 0x12, 0x0C, 0x0D, 0x02, 0x00, 0x01, 0x12,
232    0x01, 0x00, 0x07, 0x12, 0x01, 0x00, 0x01, 0x12,
233    0x01, 0x00, 0x03, 0x12, 0x01, 0x00, 0x16, 0x12,
234    0x01, 0x00, 0x07, 0x12, 0x01, 0x00, 0x02, 0x12,
235    0x01, 0x00, 0x05, 0x12, 0x02, 0x0D, 0x01, 0x00,
236    0x04, 0x0D, 0x05, 0x12, 0x01, 0x0D, 0x02, 0x00,
237    0x01, 0x12, 0x01, 0x00, 0x02, 0x0D, 0x01, 0x12,
238    0x02, 0x00, 0x01, 0x12, 0x0F, 0x00, 0x01, 0x12,
239    0x05, 0x00, 0x0A, 0x12, 0x11, 0x0D, 0x01, 0x00,
240    0x02, 0x12, 0x01, 0x00, 0x08, 0x12, 0x02, 0x00,
241    0x02, 0x12, 0x02, 0x00, 0x16, 0x12, 0x01, 0x00,
242    0x07, 0x12, 0x01, 0x00, 0x02, 0x12, 0x02, 0x00,
243    0x04, 0x12, 0x02, 0x0D, 0x01, 0x00, 0x02, 0x0D,
244    0x01, 0x00, 0x01, 0x0D, 0x03, 0x12, 0x03, 0x00,
245    0x02, 0x12, 0x02, 0x00, 0x02, 0x0D, 0x01, 0x12,
246    0x08, 0x0D, 0x01, 0x00, 0x01, 0x12, 0x04, 0x00,
247    0x02, 0x12, 0x01, 0x00, 0x03, 0x12, 0x04, 0x00,
248    0x0B, 0x12, 0x11, 0x0D, 0x01, 0x00, 0x01, 0x12,
249    0x01, 0x00, 0x06, 0x12, 0x03, 0x00, 0x03, 0x12,
250    0x01, 0x00, 0x04, 0x12, 0x03, 0x00, 0x02, 0x12,
251    0x01, 0x00, 0x01, 0x12, 0x01, 0x00, 0x02, 0x12,
252    0x03, 0x00, 0x02, 0x12, 0x03, 0x00, 0x03, 0x12,
253    0x03, 0x00, 0x08, 0x12, 0x01, 0x00, 0x03, 0x12,
254    0x04, 0x00, 0x02, 0x0D, 0x01, 0x00, 0x02, 0x12,
255    0x03, 0x00, 0x03, 0x12, 0x01, 0x00, 0x03, 0x0D,
256    0x01, 0x12, 0x09, 0x00, 0x01, 0x12, 0x0F, 0x00,
257    0x0C, 0x12, 0x0E, 0x00, 0x03, 0x12, 0x01, 0x00,
258    0x08, 0x12, 0x01, 0x00, 0x03, 0x12, 0x01, 0x00,
259    0x17, 0x12, 0x01, 0x00, 0x0A, 0x12, 0x01, 0x00,
260    0x05, 0x12, 0x04, 0x0D, 0x03, 0x00, 0x04, 0x12,
261    0x01, 0x0D, 0x03, 0x12, 0x01, 0x0D, 0x04, 0x12,
262    0x07, 0x0D, 0x02, 0x12, 0x09, 0x00, 0x02, 0x12,
263    0x04, 0x00, 0x0A, 0x12, 0x12, 0x00, 0x02, 0x12,
264    0x01, 0x00, 0x08, 0x12, 0x01, 0x00, 0x03, 0x12,
265    0x01, 0x00, 0x17, 0x12, 0x01, 0x00, 0x0A, 0x12,
266    0x01, 0x00, 0x05, 0x12, 0x04, 0x00, 0x01, 0x0D,
267    0x01, 0x00, 0x05, 0x12, 0x01, 0x0D, 0x01, 0x00,
268    0x02, 0x12, 0x01, 0x00, 0x02, 0x0D, 0x02, 0x12,
269    0x07, 0x00, 0x02, 0x12, 0x07, 0x00, 0x01, 0x12,
270    0x01, 0x00, 0x02, 0x12, 0x04, 0x00, 0x0A, 0x12,
271    0x12, 0x00, 0x02, 0x12, 0x01, 0x00, 0x08, 0x12,
272    0x01, 0x00, 0x03, 0x12, 0x01, 0x00, 0x17, 0x12,
273    0x01, 0x00, 0x10, 0x12, 0x04, 0x00, 0x03, 0x0D,
274    0x03, 0x12, 0x02, 0x00, 0x03, 0x12, 0x01, 0x00,
275    0x03, 0x0D, 0x01, 0x12, 0x09, 0x00, 0x01, 0x12,
276    0x08, 0x00, 0x02, 0x12, 0x04, 0x00, 0x0A, 0x12,
277    0x12, 0x00, 0x02, 0x12, 0x01, 0x00, 0x12, 0x12,
278    0x03, 0x00, 0x18, 0x12, 0x01, 0x00, 0x09, 0x12,
279    0x01, 0x00, 0x01, 0x12, 0x02, 0x00, 0x07, 0x12,
280    0x03, 0x0D, 0x01, 0x12, 0x04, 0x00, 0x03, 0x0D,
281    0x03, 0x12, 0x01, 0x0D, 0x01, 0x12, 0x01, 0x00,
282    0x08, 0x12, 0x12, 0x00, 0x03, 0x12, 0x0C, 0x00,
283    0x30, 0x0D, 0x01, 0x00, 0x02, 0x0D, 0x07, 0x12,
284    0x04, 0x0A, 0x01, 0x00, 0x07, 0x0D, 0x08, 0x00,
285    0x0D, 0x12, 0x25, 0x00, 0x02, 0x12, 0x01, 0x00,
286    0x01, 0x12, 0x02, 0x00, 0x02, 0x12, 0x01, 0x00,
287    0x01, 0x12, 0x02, 0x00, 0x01, 0x12, 0x06, 0x00,
288    0x04, 0x12, 0x01, 0x00, 0x07, 0x12, 0x01, 0x00,
289    0x03, 0x12, 0x01, 0x00, 0x01, 0x12, 0x01, 0x00,
290    0x01, 0x12, 0x02, 0x00, 0x02, 0x12, 0x01, 0x00,
291    0x04, 0x0D, 0x01, 0x00, 0x02, 0x0D, 0x06, 0x12,
292    0x01, 0x0D, 0x02, 0x00, 0x01, 0x12, 0x02, 0x00,
293    0x05, 0x12, 0x01, 0x00, 0x01, 0x12, 0x01, 0x0D,
294    0x06, 0x12, 0x02, 0x00, 0x0A, 0x12, 0x02, 0x00,
295    0x02, 0x12, 0x22, 0x00, 0x18, 0x0D, 0x02, 0x00,
296    0x1B, 0x0D, 0x01, 0x00, 0x01, 0x0D, 0x01, 0x00,
297    0x01, 0x0D, 0x01, 0x12, 0x04, 0x00, 0x0A, 0x12,
298    0x01, 0x00, 0x22, 0x12, 0x06, 0x0D, 0x0E, 0x00,
299    0x01, 0x0D, 0x05, 0x00, 0x01, 0x0D, 0x02, 0x00,
300    0x04, 0x12, 0x04, 0x0D, 0x08, 0x12, 0x01, 0x0D,
301    0x24, 0x12, 0x01, 0x00, 0x08, 0x0D, 0x01, 0x00,
302    0x06, 0x12, 0x02, 0x00, 0x01, 0x12, 0x30, 0x00,
303    0x22, 0x12, 0x01, 0x00, 0x05, 0x12, 0x01, 0x00,
304    0x02, 0x12, 0x01, 0x00, 0x01, 0x0D, 0x04, 0x00,
305    0x01, 0x0D, 0x01, 0x12, 0x03, 0x0D, 0x02, 0x00,
306    0x01, 0x0D, 0x01, 0x12, 0x06, 0x00, 0x18, 0x0D,
307    0x02, 0x12, 0x46, 0x00, 0x26, 0x12, 0x0A, 0x00,
308    0x29, 0x12, 0x02, 0x00, 0x01, 0x12, 0x04, 0x00,
309    0x5A, 0x12, 0x05, 0x00, 0x44, 0x12, 0x05, 0x00,
310    0x52, 0x12, 0x06, 0x00, 0x07, 0x12, 0x01, 0x00,
311    0x3F, 0x12, 0x01, 0x00, 0x01, 0x12, 0x01, 0x00,
312    0x04, 0x12, 0x02, 0x00, 0x07, 0x12, 0x01, 0x00,
313    0x01, 0x12, 0x01, 0x00, 0x04, 0x12, 0x02, 0x00,
314    0x27, 0x12, 0x01, 0x00, 0x01, 0x12, 0x01, 0x00,
315    0x04, 0x12, 0x02, 0x00, 0x1F, 0x12, 0x01, 0x00,
316    0x01, 0x12, 0x01, 0x00, 0x04, 0x12, 0x02, 0x00,
317    0x07, 0x12, 0x01, 0x00, 0x01, 0x12, 0x01, 0x00,
318    0x04, 0x12, 0x02, 0x00, 0x07, 0x12, 0x01, 0x00,
319    0x07, 0x12, 0x01, 0x00, 0x17, 0x12, 0x01, 0x00,
320    0x1F, 0x12, 0x01, 0x00, 0x01, 0x12, 0x01, 0x00,
321    0x04, 0x12, 0x02, 0x00, 0x07, 0x12, 0x01, 0x00,
322    0x27, 0x12, 0x01, 0x00, 0x13, 0x12, 0x06, 0x00,
323    0x1C, 0x12, 0x23, 0x00, 0x55, 0x12, 0x0C, 0x00,
324    0xFF, 0x00, 0xFF, 0x00, 0x78, 0x12, 0x09, 0x11,
325    0x01, 0x00, 0x1A, 0x12, 0x05, 0x00, 0x51, 0x12,
326    0x0F, 0x00, 0x0D, 0x12, 0x01, 0x00, 0x04, 0x0D,
327    0x03, 0x12, 0x0B, 0x00, 0x12, 0x0D, 0x03, 0x00,
328    0x02, 0x12, 0x09, 0x00, 0x12, 0x0D, 0x02, 0x12,
329    0x0C, 0x00, 0x0D, 0x12, 0x01, 0x00, 0x03, 0x12,
330    0x01, 0x0D, 0x02, 0x12, 0x0C, 0x00, 0x37, 0x0D,
331    0x07, 0x00, 0x08, 0x0D, 0x01, 0x00, 0x02, 0x0D,
332    0x0B, 0x00, 0x07, 0x0A, 0x01, 0x00, 0x01, 0x12,
333    0x03, 0x00, 0x0A, 0x12, 0x21, 0x0D, 0x03, 0x0E,
334    0x01, 0x12, 0x01, 0x00, 0x0A, 0x12, 0x06, 0x00,
335    0x58, 0x12, 0x08, 0x00, 0x29, 0x0D, 0x01, 0x12,
336    0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
337    0xFF, 0x12, 0x5B, 0x00, 0x9C, 0x12, 0x04, 0x00,
338    0x5A, 0x12, 0x06, 0x00, 0x16, 0x12, 0x02, 0x00,
339    0x06, 0x12, 0x02, 0x00, 0x26, 0x12, 0x02, 0x00,
340    0x06, 0x12, 0x02, 0x00, 0x08, 0x12, 0x01, 0x00,
341    0x01, 0x12, 0x01, 0x00, 0x01, 0x12, 0x01, 0x00,
342    0x01, 0x12, 0x01, 0x00, 0x1F, 0x12, 0x02, 0x00,
343    0x35, 0x12, 0x01, 0x00, 0x07, 0x12, 0x01, 0x00,
344    0x01, 0x12, 0x03, 0x00, 0x03, 0x12, 0x01, 0x00,
345    0x07, 0x12, 0x03, 0x00, 0x04, 0x12, 0x02, 0x00,
346    0x06, 0x12, 0x04, 0x00, 0x0D, 0x12, 0x05, 0x00,
347    0x03, 0x12, 0x01, 0x00, 0x07, 0x12, 0x03, 0x11,
348    0x0B, 0x0E, 0x03, 0x00, 0x01, 0x03, 0x01, 0x12,
349    0x18, 0x11, 0x01, 0x0F, 0x01, 0x01, 0x01, 0x05,
350    0x01, 0x07, 0x01, 0x02, 0x01, 0x06, 0x01, 0x11,
351    0x01, 0x0A, 0x05, 0x12, 0x2A, 0x11, 0x01, 0x0E,
352    0x04, 0x12, 0x06, 0x0E, 0x06, 0x08, 0x01, 0x00,
353    0x01, 0x12, 0x02, 0x08, 0x06, 0x0A, 0x02, 0x12,
354    0x03, 0x00, 0x01, 0x08, 0x0A, 0x0A, 0x02, 0x12,
355    0x14, 0x0A, 0x12, 0x12, 0x1E, 0x0D, 0x1B, 0x12,
356    0x17, 0x00, 0x01, 0x12, 0x04, 0x00, 0x01, 0x12,
357    0x02, 0x00, 0x0A, 0x12, 0x01, 0x00, 0x01, 0x12,
358    0x03, 0x00, 0x05, 0x12, 0x06, 0x00, 0x01, 0x12,
359    0x01, 0x00, 0x01, 0x12, 0x01, 0x00, 0x01, 0x12,
360    0x01, 0x00, 0x04, 0x0A, 0x01, 0x00, 0x03, 0x12,
361    0x01, 0x00, 0x07, 0x12, 0x03, 0x00, 0x03, 0x12,
362    0x05, 0x00, 0x05, 0x12, 0x16, 0x00, 0x24, 0x12,
363    0x8E, 0x0A, 0x02, 0x12, 0xFF, 0x12, 0x23, 0x00,
364    0x45, 0x12, 0x1A, 0x00, 0x01, 0x12, 0xCA, 0x08,
365    0x3C, 0x00, 0x4E, 0x08, 0x01, 0x12, 0xFF, 0x12,
366    0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
367    0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
368    0xFF, 0x12, 0xFF, 0x12, 0x20, 0x11, 0x01, 0x12,
369    0x04, 0x00, 0x03, 0x12, 0x19, 0x00, 0x09, 0x0D,
370    0x06, 0x12, 0x01, 0x00, 0x05, 0x12, 0x02, 0x00,
371    0x05, 0x12, 0x04, 0x00, 0x56, 0x12, 0x02, 0x0D,
372    0x02, 0x12, 0x02, 0x00, 0x03, 0x12, 0x01, 0x00,
373    0x5A, 0x12, 0x01, 0x00, 0x04, 0x12, 0x05, 0x00,
374    0x28, 0x12, 0x04, 0x00, 0x5E, 0x12, 0x01, 0x00,
375    0x28, 0x12, 0x38, 0x00, 0x2D, 0x12, 0x03, 0x00,
376    0x24, 0x12, 0x1C, 0x00, 0x1C, 0x12, 0x03, 0x00,
377    0x32, 0x12, 0x0F, 0x00, 0x0C, 0x12, 0x04, 0x00,
378    0x2F, 0x12, 0x01, 0x00, 0x77, 0x12, 0x04, 0x00,
379    0x63, 0x12, 0x02, 0x00, 0x1F, 0x12, 0x01, 0x00,
380    0x01, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
381    0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
382    0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
383    0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
384    0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
385    0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
386    0xFF, 0x12, 0xFF, 0x12, 0xCD, 0x00, 0x01, 0x12,
387    0x4A, 0x00, 0x01, 0x12, 0xFF, 0x12, 0xFF, 0x12,
388    0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
389    0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
390    0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
391    0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
392    0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
393    0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
394    0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
395    0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
396    0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
397    0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
398    0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
399    0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
400    0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
401    0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
402    0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
403    0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
404    0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
405    0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
406    0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
407    0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xF5, 0x00,
408    0x01, 0x12, 0x5A, 0x00, 0xFF, 0x00, 0xFF, 0x00,
409    0xFF, 0x00, 0xFF, 0x00, 0x91, 0x12, 0xFF, 0x12,
410    0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
411    0xFF, 0x12, 0xFF, 0x12, 0x7A, 0x00, 0x01, 0x12,
412    0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
413    0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
414    0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
415    0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
416    0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
417    0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
418    0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
419    0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
420    0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
421    0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
422    0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xCD, 0x00,
423    0x01, 0x12, 0x5C, 0x00, 0x01, 0x12, 0xFF, 0x12,
424    0xFF, 0x12, 0xFF, 0x12, 0x81, 0x00, 0x02, 0x12,
425    0x7E, 0x00, 0x02, 0x12, 0xFF, 0x12, 0xFF, 0x12,
426    0xFF, 0x12, 0xFF, 0x12, 0x02, 0x00, 0x02, 0x12,
427    0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
428    0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
429    0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
430    0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
431    0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
432    0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
433    0xFF, 0x12, 0x17, 0x00, 0xFF, 0x00, 0x30, 0x12,
434    0x02, 0x00, 0x3B, 0x12, 0x95, 0x00, 0x07, 0x12,
435    0x0C, 0x00, 0x05, 0x12, 0x05, 0x03, 0x01, 0x0D,
436    0x01, 0x03, 0x0A, 0x0A, 0x01, 0x03, 0x0D, 0x12,
437    0x01, 0x03, 0x05, 0x12, 0x01, 0x03, 0x01, 0x12,
438    0x01, 0x03, 0x02, 0x12, 0x01, 0x03, 0x02, 0x12,
439    0x01, 0x03, 0x0A, 0x04, 0x62, 0x12, 0x21, 0x04,
440    0xFF, 0x04, 0x6C, 0x12, 0x12, 0x04, 0x40, 0x12,
441    0x02, 0x04, 0x36, 0x12, 0x28, 0x04, 0x0D, 0x12,
442    0x03, 0x0D, 0x10, 0x12, 0x10, 0x0D, 0x04, 0x12,
443    0x2C, 0x0C, 0x01, 0x12, 0x01, 0x0C, 0x01, 0x12,
444    0x02, 0x0C, 0x01, 0x12, 0x09, 0x0A, 0x01, 0x12,
445    0x02, 0x0A, 0x02, 0x12, 0x05, 0x0A, 0x02, 0x12,
446    0x05, 0x04, 0x05, 0x12, 0x01, 0x04, 0x87, 0x12,
447    0x02, 0x0E, 0x01, 0x12, 0x03, 0x0A, 0x03, 0x12,
448    0x05, 0x0A, 0x01, 0x0C, 0x01, 0x0A, 0x01, 0x0C,
449    0x01, 0x09, 0x01, 0x08, 0x0A, 0x0C, 0x01, 0x12,
450    0x06, 0x00, 0x1A, 0x12, 0x06, 0x00, 0x1A, 0x12,
451    0x0B, 0x00, 0x59, 0x12, 0x03, 0x00, 0x06, 0x12,
452    0x02, 0x00, 0x06, 0x12, 0x02, 0x00, 0x06, 0x12,
453    0x02, 0x00, 0x03, 0x12, 0x03, 0x0A, 0x02, 0x12,
454    0x03, 0x0A, 0x02, 0x12, 0x09, 0x00, 0x0E, 0x00,
455 };