| 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 | int 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 d; |
| 161 | unsigned char f; |
| 162 | }RLENode; |
| 163 | |
| 164 | |
| 165 | /* This is an array of RLENodes, which is the |
| 166 | * Compressed unicode types table |
| 167 | */ |
| 168 | const RLENode RLE_table[] = |
| 169 | { |
| 170 | { BN, 9}, { S, 1}, { B, 1}, { S, 1}, { WS, 1}, |
| 171 | { B, 1}, { BN, 14}, { B, 3}, { S, 1}, { WS, 1}, |
| 172 | { ON, 2}, { ET, 3}, { ON, 5}, { ET, 1}, { CS, 1}, |
| 173 | { ET, 1}, { CS, 1}, { ES, 1}, { EN, 10}, { CS, 1}, |
| 174 | { ON, 6}, { L, 26}, { ON, 6}, { L, 26}, { ON, 4}, |
| 175 | { BN, 6}, { B, 1}, { BN, 26}, { CS, 1}, { ON, 1}, |
| 176 | { ET, 4}, { ON, 4}, { L, 1}, { ON, 5}, { ET, 2}, |
| 177 | { EN, 2}, { ON, 1}, { L, 1}, { ON, 3}, { EN, 1}, |
| 178 | { L, 1}, { ON, 5}, { L, 23}, { ON, 1}, { L, 31}, |
| 179 | { ON, 1}, { L, 255}, { L, 42}, { ON, 1}, { L, 18}, |
| 180 | { ON, 28}, { L, 94}, { ON, 2}, { L, 9}, { ON, 2}, |
| 181 | { L, 7}, { ON, 14}, { L, 2}, { ON, 14}, { L, 5}, |
| 182 | { ON, 9}, { L, 1}, { ON, 17}, {NSM, 80}, { ON, 16}, |
| 183 | {NSM, 16}, { ON, 10}, { L, 1}, { ON, 11}, { L, 1}, |
| 184 | { ON, 1}, { L, 3}, { ON, 1}, { L, 1}, { ON, 1}, |
| 185 | { L, 20}, { ON, 1}, { L, 44}, { ON, 1}, { L, 38}, |
| 186 | { ON, 10}, { L, 131}, {NSM, 4}, { ON, 1}, {NSM, 2}, |
| 187 | { L, 69}, { ON, 1}, { L, 38}, { ON, 2}, { L, 2}, |
| 188 | { ON, 6}, { L, 16}, { ON, 33}, { L, 38}, { ON, 2}, |
| 189 | { L, 7}, { ON, 1}, { L, 39}, { ON, 1}, { L, 1}, |
| 190 | { ON, 7}, {NSM, 17}, { ON, 1}, {NSM, 23}, { ON, 1}, |
| 191 | {NSM, 3}, { R, 1}, {NSM, 1}, { R, 1}, {NSM, 2}, |
| 192 | { R, 1}, {NSM, 1}, { ON, 11}, { R, 27}, { ON, 5}, |
| 193 | { R, 5}, { ON, 23}, { CS, 1}, { ON, 14}, { AL, 1}, |
| 194 | { ON, 3}, { AL, 1}, { ON, 1}, { AL, 26}, { ON, 5}, |
| 195 | { AL, 11}, {NSM, 11}, { ON, 10}, { AN, 10}, { ET, 1}, |
| 196 | { AN, 2}, { AL, 3}, {NSM, 1}, { AL, 101}, {NSM, 7}, |
| 197 | { AL, 1}, {NSM, 7}, { AL, 2}, {NSM, 2}, { ON, 1}, |
| 198 | {NSM, 4}, { ON, 2}, { EN, 10}, { AL, 5}, { ON, 1}, |
| 199 | { AL, 14}, { ON, 1}, { BN, 1}, { AL, 1}, {NSM, 1}, |
| 200 | { AL, 27}, { ON, 3}, {NSM, 27}, { ON, 53}, { AL, 38}, |
| 201 | {NSM, 11}, { AL, 1}, { ON, 255}, { ON, 80}, {NSM, 2}, |
| 202 | { L, 1}, { ON, 1}, { L, 53}, { ON, 2}, {NSM, 1}, |
| 203 | { L, 4}, {NSM, 8}, { L, 4}, {NSM, 1}, { ON, 2}, |
| 204 | { L, 1}, {NSM, 4}, { ON, 3}, { L, 10}, {NSM, 2}, |
| 205 | { L, 13}, { ON, 16}, {NSM, 1}, { L, 2}, { ON, 1}, |
| 206 | { L, 8}, { ON, 2}, { L, 2}, { ON, 2}, { L, 22}, |
| 207 | { ON, 1}, { L, 7}, { ON, 1}, { L, 1}, { ON, 3}, |
| 208 | { L, 4}, { ON, 2}, {NSM, 1}, { ON, 1}, { L, 3}, |
| 209 | {NSM, 4}, { ON, 2}, { L, 2}, { ON, 2}, { L, 2}, |
| 210 | {NSM, 1}, { ON, 9}, { L, 1}, { ON, 4}, { L, 2}, |
| 211 | { ON, 1}, { L, 3}, {NSM, 2}, { ON, 2}, { L, 12}, |
| 212 | { ET, 2}, { L, 7}, { ON, 7}, {NSM, 1}, { ON, 2}, |
| 213 | { L, 6}, { ON, 4}, { L, 2}, { ON, 2}, { L, 22}, |
| 214 | { ON, 1}, { L, 7}, { ON, 1}, { L, 2}, { ON, 1}, |
| 215 | { L, 2}, { ON, 1}, { L, 2}, { ON, 2}, {NSM, 1}, |
| 216 | { ON, 1}, { L, 3}, {NSM, 2}, { ON, 4}, {NSM, 2}, |
| 217 | { ON, 2}, {NSM, 3}, { ON, 11}, { L, 4}, { ON, 1}, |
| 218 | { L, 1}, { ON, 7}, { L, 10}, {NSM, 2}, { L, 3}, |
| 219 | { ON, 12}, {NSM, 2}, { L, 1}, { ON, 1}, { L, 7}, |
| 220 | { ON, 1}, { L, 1}, { ON, 1}, { L, 3}, { ON, 1}, |
| 221 | { L, 22}, { ON, 1}, { L, 7}, { ON, 1}, { L, 2}, |
| 222 | { ON, 1}, { L, 5}, { ON, 2}, {NSM, 1}, { L, 4}, |
| 223 | {NSM, 5}, { ON, 1}, {NSM, 2}, { L, 1}, { ON, 1}, |
| 224 | { L, 2}, {NSM, 1}, { ON, 2}, { L, 1}, { ON, 15}, |
| 225 | { L, 1}, { ON, 5}, { L, 10}, { ON, 17}, {NSM, 1}, |
| 226 | { L, 2}, { ON, 1}, { L, 8}, { ON, 2}, { L, 2}, |
| 227 | { ON, 2}, { L, 22}, { ON, 1}, { L, 7}, { ON, 1}, |
| 228 | { L, 2}, { ON, 2}, { L, 4}, { ON, 2}, {NSM, 1}, |
| 229 | { L, 2}, {NSM, 1}, { L, 1}, {NSM, 3}, { ON, 3}, |
| 230 | { L, 2}, { ON, 2}, { L, 2}, {NSM, 1}, { ON, 8}, |
| 231 | {NSM, 1}, { L, 1}, { ON, 4}, { L, 2}, { ON, 1}, |
| 232 | { L, 3}, { ON, 4}, { L, 11}, { ON, 17}, {NSM, 1}, |
| 233 | { L, 1}, { ON, 1}, { L, 6}, { ON, 3}, { L, 3}, |
| 234 | { ON, 1}, { L, 4}, { ON, 3}, { L, 2}, { ON, 1}, |
| 235 | { L, 1}, { ON, 1}, { L, 2}, { ON, 3}, { L, 2}, |
| 236 | { ON, 3}, { L, 3}, { ON, 3}, { L, 8}, { ON, 1}, |
| 237 | { L, 3}, { ON, 4}, { L, 2}, {NSM, 1}, { L, 2}, |
| 238 | { ON, 3}, { L, 3}, { ON, 1}, { L, 3}, {NSM, 1}, |
| 239 | { ON, 9}, { L, 1}, { ON, 15}, { L, 12}, { ON, 14}, |
| 240 | { L, 3}, { ON, 1}, { L, 8}, { ON, 1}, { L, 3}, |
| 241 | { ON, 1}, { L, 23}, { ON, 1}, { L, 10}, { ON, 1}, |
| 242 | { L, 5}, { ON, 4}, {NSM, 3}, { L, 4}, { ON, 1}, |
| 243 | {NSM, 3}, { ON, 1}, {NSM, 4}, { ON, 7}, {NSM, 2}, |
| 244 | { ON, 9}, { L, 2}, { ON, 4}, { L, 10}, { ON, 18}, |
| 245 | { L, 2}, { ON, 1}, { L, 8}, { ON, 1}, { L, 3}, |
| 246 | { ON, 1}, { L, 23}, { ON, 1}, { L, 10}, { ON, 1}, |
| 247 | { L, 5}, { ON, 4}, { L, 1}, {NSM, 1}, { L, 5}, |
| 248 | { ON, 1}, {NSM, 1}, { L, 2}, { ON, 1}, { L, 2}, |
| 249 | {NSM, 2}, { ON, 7}, { L, 2}, { ON, 7}, { L, 1}, |
| 250 | { ON, 1}, { L, 2}, { ON, 4}, { L, 10}, { ON, 18}, |
| 251 | { L, 2}, { ON, 1}, { L, 8}, { ON, 1}, { L, 3}, |
| 252 | { ON, 1}, { L, 23}, { ON, 1}, { L, 16}, { ON, 4}, |
| 253 | { L, 3}, {NSM, 3}, { ON, 2}, { L, 3}, { ON, 1}, |
| 254 | { L, 3}, {NSM, 1}, { ON, 9}, { L, 1}, { ON, 8}, |
| 255 | { L, 2}, { ON, 4}, { L, 10}, { ON, 18}, { L, 2}, |
| 256 | { ON, 1}, { L, 18}, { ON, 3}, { L, 24}, { ON, 1}, |
| 257 | { L, 9}, { ON, 1}, { L, 1}, { ON, 2}, { L, 7}, |
| 258 | { ON, 3}, {NSM, 1}, { ON, 4}, { L, 3}, {NSM, 3}, |
| 259 | { ON, 1}, {NSM, 1}, { ON, 1}, { L, 8}, { ON, 18}, |
| 260 | { L, 3}, { ON, 12}, { L, 48}, {NSM, 1}, { L, 2}, |
| 261 | {NSM, 7}, { ON, 4}, { ET, 1}, { L, 7}, {NSM, 8}, |
| 262 | { L, 13}, { ON, 37}, { L, 2}, { ON, 1}, { L, 1}, |
| 263 | { ON, 2}, { L, 2}, { ON, 1}, { L, 1}, { ON, 2}, |
| 264 | { L, 1}, { ON, 6}, { L, 4}, { ON, 1}, { L, 7}, |
| 265 | { ON, 1}, { L, 3}, { ON, 1}, { L, 1}, { ON, 1}, |
| 266 | { L, 1}, { ON, 2}, { L, 2}, { ON, 1}, { L, 4}, |
| 267 | {NSM, 1}, { L, 2}, {NSM, 6}, { ON, 1}, {NSM, 2}, |
| 268 | { L, 1}, { ON, 2}, { L, 5}, { ON, 1}, { L, 1}, |
| 269 | { ON, 1}, {NSM, 6}, { ON, 2}, { L, 10}, { ON, 2}, |
| 270 | { L, 2}, { ON, 34}, { L, 24}, {NSM, 2}, { L, 27}, |
| 271 | {NSM, 1}, { L, 1}, {NSM, 1}, { L, 1}, {NSM, 1}, |
| 272 | { ON, 4}, { L, 10}, { ON, 1}, { L, 34}, { ON, 6}, |
| 273 | {NSM, 14}, { L, 1}, {NSM, 5}, { L, 1}, {NSM, 2}, |
| 274 | { L, 4}, { ON, 4}, {NSM, 8}, { ON, 1}, {NSM, 36}, |
| 275 | { ON, 1}, { L, 8}, {NSM, 1}, { L, 6}, { ON, 2}, |
| 276 | { L, 1}, { ON, 48}, { L, 34}, { ON, 1}, { L, 5}, |
| 277 | { ON, 1}, { L, 2}, { ON, 1}, { L, 1}, {NSM, 4}, |
| 278 | { L, 1}, {NSM, 1}, { ON, 3}, {NSM, 2}, { L, 1}, |
| 279 | {NSM, 1}, { ON, 6}, { L, 24}, {NSM, 2}, { ON, 70}, |
| 280 | { L, 38}, { ON, 10}, { L, 41}, { ON, 2}, { L, 1}, |
| 281 | { ON, 4}, { L, 90}, { ON, 5}, { L, 68}, { ON, 5}, |
| 282 | { L, 82}, { ON, 6}, { L, 7}, { ON, 1}, { L, 63}, |
| 283 | { ON, 1}, { L, 1}, { ON, 1}, { L, 4}, { ON, 2}, |
| 284 | { L, 7}, { ON, 1}, { L, 1}, { ON, 1}, { L, 4}, |
| 285 | { ON, 2}, { L, 39}, { ON, 1}, { L, 1}, { ON, 1}, |
| 286 | { L, 4}, { ON, 2}, { L, 31}, { ON, 1}, { L, 1}, |
| 287 | { ON, 1}, { L, 4}, { ON, 2}, { L, 7}, { ON, 1}, |
| 288 | { L, 1}, { ON, 1}, { L, 4}, { ON, 2}, { L, 7}, |
| 289 | { ON, 1}, { L, 7}, { ON, 1}, { L, 23}, { ON, 1}, |
| 290 | { L, 31}, { ON, 1}, { L, 1}, { ON, 1}, { L, 4}, |
| 291 | { ON, 2}, { L, 7}, { ON, 1}, { L, 39}, { ON, 1}, |
| 292 | { L, 19}, { ON, 6}, { L, 28}, { ON, 35}, { L, 85}, |
| 293 | { ON, 12}, { L, 255}, { L, 255}, { L, 120}, { ON, 9}, |
| 294 | { WS, 1}, { L, 26}, { ON, 5}, { L, 81}, { ON, 15}, |
| 295 | { L, 13}, { ON, 1}, { L, 4}, {NSM, 3}, { ON, 11}, |
| 296 | { L, 18}, {NSM, 3}, { L, 2}, { ON, 9}, { L, 18}, |
| 297 | {NSM, 2}, { ON, 12}, { L, 13}, { ON, 1}, { L, 3}, |
| 298 | { ON, 1}, {NSM, 2}, { ON, 12}, { L, 55}, {NSM, 7}, |
| 299 | { L, 8}, {NSM, 1}, { L, 2}, {NSM, 11}, { L, 7}, |
| 300 | { ET, 1}, { L, 1}, { ON, 3}, { L, 10}, { ON, 33}, |
| 301 | {NSM, 3}, { BN, 1}, { ON, 1}, { L, 10}, { ON, 6}, |
| 302 | { L, 88}, { ON, 8}, { L, 41}, {NSM, 1}, { ON, 255}, |
| 303 | { ON, 255}, { ON, 255}, { ON, 255}, { ON, 255}, { ON, 91}, |
| 304 | { L, 156}, { ON, 4}, { L, 90}, { ON, 6}, { L, 22}, |
| 305 | { ON, 2}, { L, 6}, { ON, 2}, { L, 38}, { ON, 2}, |
| 306 | { L, 6}, { ON, 2}, { L, 8}, { ON, 1}, { L, 1}, |
| 307 | { ON, 1}, { L, 1}, { ON, 1}, { L, 1}, { ON, 1}, |
| 308 | { L, 31}, { ON, 2}, { L, 53}, { ON, 1}, { L, 7}, |
| 309 | { ON, 1}, { L, 1}, { ON, 3}, { L, 3}, { ON, 1}, |
| 310 | { L, 7}, { ON, 3}, { L, 4}, { ON, 2}, { L, 6}, |
| 311 | { ON, 4}, { L, 13}, { ON, 5}, { L, 3}, { ON, 1}, |
| 312 | { L, 7}, { ON, 3}, { WS, 11}, { BN, 3}, { L, 1}, |
| 313 | { R, 1}, { ON, 24}, { WS, 1}, { B, 1}, {LRE, 1}, |
| 314 | {RLE, 1}, {PDF, 1}, {LRO, 1}, {RLO, 1}, { WS, 1}, |
| 315 | { ET, 5}, { ON, 42}, { WS, 1}, { BN, 4}, { ON, 6}, |
| 316 | { BN, 6}, { EN, 1}, { L, 1}, { ON, 2}, { EN, 6}, |
| 317 | { ET, 2}, { ON, 3}, { L, 1}, { EN, 10}, { ET, 2}, |
| 318 | { ON, 20}, { ET, 18}, { ON, 30}, {NSM, 27}, { ON, 23}, |
| 319 | { L, 1}, { ON, 4}, { L, 1}, { ON, 2}, { L, 10}, |
| 320 | { ON, 1}, { L, 1}, { ON, 3}, { L, 5}, { ON, 6}, |
| 321 | { L, 1}, { ON, 1}, { L, 1}, { ON, 1}, { L, 1}, |
| 322 | { ON, 1}, { L, 4}, { ET, 1}, { L, 3}, { ON, 1}, |
| 323 | { L, 7}, { ON, 3}, { L, 3}, { ON, 5}, { L, 5}, |
| 324 | { ON, 22}, { L, 36}, { ON, 142}, { ET, 2}, { ON, 255}, |
| 325 | { ON, 35}, { L, 69}, { ON, 26}, { L, 1}, { ON, 202}, |
| 326 | { EN, 60}, { L, 78}, { EN, 1}, { ON, 255}, { ON, 255}, |
| 327 | { ON, 255}, { ON, 255}, { ON, 255}, { ON, 255}, { ON, 255}, |
| 328 | { ON, 255}, { ON, 255}, { ON, 255}, { ON, 255}, { ON, 32}, |
| 329 | { WS, 1}, { ON, 4}, { L, 3}, { ON, 25}, { L, 9}, |
| 330 | {NSM, 6}, { ON, 1}, { L, 5}, { ON, 2}, { L, 5}, |
| 331 | { ON, 4}, { L, 86}, { ON, 2}, {NSM, 2}, { ON, 2}, |
| 332 | { L, 3}, { ON, 1}, { L, 90}, { ON, 1}, { L, 4}, |
| 333 | { ON, 5}, { L, 40}, { ON, 4}, { L, 94}, { ON, 1}, |
| 334 | { L, 40}, { ON, 56}, { L, 45}, { ON, 3}, { L, 36}, |
| 335 | { ON, 28}, { L, 28}, { ON, 3}, { L, 50}, { ON, 15}, |
| 336 | { L, 12}, { ON, 4}, { L, 47}, { ON, 1}, { L, 119}, |
| 337 | { ON, 4}, { L, 99}, { ON, 2}, { L, 31}, { ON, 1}, |
| 338 | { L, 1}, { ON, 255}, { ON, 255}, { ON, 255}, { ON, 255}, |
| 339 | { ON, 255}, { ON, 255}, { ON, 255}, { ON, 255}, { ON, 255}, |
| 340 | { ON, 255}, { ON, 255}, { ON, 255}, { ON, 255}, { ON, 255}, |
| 341 | { ON, 255}, { ON, 255}, { ON, 255}, { ON, 255}, { ON, 255}, |
| 342 | { ON, 255}, { ON, 255}, { ON, 255}, { ON, 255}, { ON, 255}, |
| 343 | { ON, 255}, { ON, 205}, { L, 1}, { ON, 74}, { L, 1}, |
| 344 | { ON, 255}, { ON, 255}, { ON, 255}, { ON, 255}, { ON, 255}, |
| 345 | { ON, 255}, { ON, 255}, { ON, 255}, { ON, 255}, { ON, 255}, |
| 346 | { ON, 255}, { ON, 255}, { ON, 255}, { ON, 255}, { ON, 255}, |
| 347 | { ON, 255}, { ON, 255}, { ON, 255}, { ON, 255}, { ON, 255}, |
| 348 | { ON, 255}, { ON, 255}, { ON, 255}, { ON, 255}, { ON, 255}, |
| 349 | { ON, 255}, { ON, 255}, { ON, 255}, { ON, 255}, { ON, 255}, |
| 350 | { ON, 255}, { ON, 255}, { ON, 255}, { ON, 255}, { ON, 255}, |
| 351 | { ON, 255}, { ON, 255}, { ON, 255}, { ON, 255}, { ON, 255}, |
| 352 | { ON, 255}, { ON, 255}, { ON, 255}, { ON, 255}, { ON, 255}, |
| 353 | { ON, 255}, { ON, 255}, { ON, 255}, { ON, 255}, { ON, 255}, |
| 354 | { ON, 255}, { ON, 255}, { ON, 255}, { ON, 255}, { ON, 255}, |
| 355 | { ON, 255}, { ON, 255}, { ON, 255}, { ON, 255}, { ON, 255}, |
| 356 | { ON, 255}, { ON, 255}, { ON, 255}, { ON, 255}, { ON, 255}, |
| 357 | { ON, 255}, { ON, 255}, { ON, 255}, { ON, 255}, { ON, 255}, |
| 358 | { ON, 255}, { ON, 255}, { ON, 255}, { ON, 255}, { ON, 255}, |
| 359 | { ON, 255}, { ON, 255}, { ON, 255}, { ON, 255}, { ON, 255}, |
| 360 | { ON, 255}, { ON, 245}, { L, 1}, { ON, 90}, { L, 255}, |
| 361 | { L, 255}, { L, 255}, { L, 255}, { L, 145}, { ON, 255}, |
| 362 | { ON, 255}, { ON, 255}, { ON, 255}, { ON, 255}, { ON, 255}, |
| 363 | { ON, 255}, { ON, 122}, { L, 1}, { ON, 255}, { ON, 255}, |
| 364 | { ON, 255}, { ON, 255}, { ON, 255}, { ON, 255}, { ON, 255}, |
| 365 | { ON, 255}, { ON, 255}, { ON, 255}, { ON, 255}, { ON, 255}, |
| 366 | { ON, 255}, { ON, 255}, { ON, 255}, { ON, 255}, { ON, 255}, |
| 367 | { ON, 255}, { ON, 255}, { ON, 255}, { ON, 255}, { ON, 255}, |
| 368 | { ON, 255}, { ON, 255}, { ON, 255}, { ON, 255}, { ON, 255}, |
| 369 | { ON, 255}, { ON, 255}, { ON, 255}, { ON, 255}, { ON, 255}, |
| 370 | { ON, 255}, { ON, 255}, { ON, 255}, { ON, 255}, { ON, 255}, |
| 371 | { ON, 255}, { ON, 255}, { ON, 255}, { ON, 255}, { ON, 255}, |
| 372 | { ON, 255}, { ON, 205}, { L, 1}, { ON, 92}, { L, 1}, |
| 373 | { ON, 255}, { ON, 255}, { ON, 255}, { ON, 129}, { L, 2}, |
| 374 | { ON, 126}, { L, 2}, { ON, 255}, { ON, 255}, { ON, 255}, |
| 375 | { ON, 255}, { ON, 2}, { L, 2}, { ON, 255}, { ON, 255}, |
| 376 | { ON, 255}, { ON, 255}, { ON, 255}, { ON, 255}, { ON, 255}, |
| 377 | { ON, 255}, { ON, 255}, { ON, 255}, { ON, 255}, { ON, 255}, |
| 378 | { ON, 255}, { ON, 255}, { ON, 255}, { ON, 255}, { ON, 255}, |
| 379 | { ON, 255}, { ON, 255}, { ON, 255}, { ON, 255}, { ON, 255}, |
| 380 | { ON, 255}, { ON, 255}, { ON, 255}, { ON, 23}, { L, 255}, |
| 381 | { L, 48}, { ON, 2}, { L, 59}, { ON, 149}, { L, 7}, |
| 382 | { ON, 12}, { L, 5}, { ON, 5}, { R, 1}, {NSM, 1}, |
| 383 | { R, 10}, { ET, 1}, { R, 13}, { ON, 1}, { R, 5}, |
| 384 | { ON, 1}, { R, 1}, { ON, 1}, { R, 2}, { ON, 1}, |
| 385 | { R, 2}, { ON, 1}, { R, 10}, { AL, 98}, { ON, 33}, |
| 386 | { AL, 255}, { AL, 108}, { ON, 18}, { AL, 64}, { ON, 2}, |
| 387 | { AL, 54}, { ON, 40}, { AL, 13}, { ON, 3}, {NSM, 16}, |
| 388 | { ON, 16}, {NSM, 4}, { ON, 44}, { CS, 1}, { ON, 1}, |
| 389 | { CS, 1}, { ON, 2}, { CS, 1}, { ON, 9}, { ET, 1}, |
| 390 | { ON, 2}, { ET, 2}, { ON, 5}, { ET, 2}, { ON, 5}, |
| 391 | { AL, 5}, { ON, 1}, { AL, 135}, { ON, 2}, { BN, 1}, |
| 392 | { ON, 3}, { ET, 3}, { ON, 5}, { ET, 1}, { CS, 1}, |
| 393 | { ET, 1}, { CS, 1}, { ES, 1}, { EN, 10}, { CS, 1}, |
| 394 | { ON, 6}, { L, 26}, { ON, 6}, { L, 26}, { ON, 11}, |
| 395 | { L, 89}, { ON, 3}, { L, 6}, { ON, 2}, { L, 6}, |
| 396 | { ON, 2}, { L, 6}, { ON, 2}, { L, 3}, { ON, 3}, |
| 397 | { ET, 2}, { ON, 3}, { ET, 2}, { ON, 9}, { L, 14}, |
| 398 | }; |