@chr33s/pdf-common 5.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (77) hide show
  1. package/dist/base64.d.ts +7 -0
  2. package/dist/base64.js +24 -0
  3. package/dist/base64.js.map +1 -0
  4. package/dist/brotli.d.ts +9 -0
  5. package/dist/brotli.js +2015 -0
  6. package/dist/brotli.js.map +1 -0
  7. package/dist/compression.d.ts +3 -0
  8. package/dist/compression.js +31 -0
  9. package/dist/compression.js.map +1 -0
  10. package/dist/crypto/aes.d.ts +17 -0
  11. package/dist/crypto/aes.js +60 -0
  12. package/dist/crypto/aes.js.map +1 -0
  13. package/dist/crypto/index.d.ts +7 -0
  14. package/dist/crypto/index.js +8 -0
  15. package/dist/crypto/index.js.map +1 -0
  16. package/dist/crypto/md5.d.ts +3 -0
  17. package/dist/crypto/md5.js +9 -0
  18. package/dist/crypto/md5.js.map +1 -0
  19. package/dist/crypto/mode.d.ts +5 -0
  20. package/dist/crypto/mode.js +7 -0
  21. package/dist/crypto/mode.js.map +1 -0
  22. package/dist/crypto/padding.d.ts +7 -0
  23. package/dist/crypto/padding.js +27 -0
  24. package/dist/crypto/padding.js.map +1 -0
  25. package/dist/crypto/rc4.d.ts +10 -0
  26. package/dist/crypto/rc4.js +48 -0
  27. package/dist/crypto/rc4.js.map +1 -0
  28. package/dist/crypto/sha256.d.ts +3 -0
  29. package/dist/crypto/sha256.js +9 -0
  30. package/dist/crypto/sha256.js.map +1 -0
  31. package/dist/crypto/word-array.d.ts +28 -0
  32. package/dist/crypto/word-array.js +116 -0
  33. package/dist/crypto/word-array.js.map +1 -0
  34. package/dist/index.d.ts +4 -0
  35. package/dist/index.js +5 -0
  36. package/dist/index.js.map +1 -0
  37. package/package.json +34 -0
  38. package/src/base64.ts +34 -0
  39. package/src/brotli.ts +2158 -0
  40. package/src/compression.ts +35 -0
  41. package/src/crypto/aes.ts +93 -0
  42. package/src/crypto/index.ts +7 -0
  43. package/src/crypto/md5.ts +10 -0
  44. package/src/crypto/mode.ts +11 -0
  45. package/src/crypto/padding.ts +36 -0
  46. package/src/crypto/rc4.ts +65 -0
  47. package/src/crypto/sha256.ts +10 -0
  48. package/src/crypto/word-array.ts +147 -0
  49. package/src/index.ts +4 -0
  50. package/test/base64.test.ts +173 -0
  51. package/test/brotli.test.data/0000000000000000.empty.br +1 -0
  52. package/test/brotli.test.data/126d9a84a3d1b3ad.xyzzy.br +2 -0
  53. package/test/brotli.test.data/1f39ef98802627d5.bref65536.br +0 -0
  54. package/test/brotli.test.data/24b2c7600b8207e2.random.br +0 -0
  55. package/test/brotli.test.data/5b5eb8c2e54aa1c4.fox.br +1 -0
  56. package/test/brotli.test.data/5ea84b0ab2a9d2f3.ascii.br +0 -0
  57. package/test/brotli.test.data/62652dac985a31f1.monkey.br +0 -0
  58. package/test/brotli.test.data/68333cc8433f3ab8.16k_minus_one.br +0 -0
  59. package/test/brotli.test.data/7da01857468c3de8.buffer_sized_chunks.br +0 -0
  60. package/test/brotli.test.data/89988757bded53ae.x10y10.br +0 -0
  61. package/test/brotli.test.data/940493692ce62466.E.coli.br +0 -0
  62. package/test/brotli.test.data/c3f720395238182c.world192.br +0 -0
  63. package/test/brotli.test.data/c5a4246584d690a7.16k_plus_one.br +0 -0
  64. package/test/brotli.test.data/c895e0c1b11448fa.ukkonooa.br +0 -0
  65. package/test/brotli.test.data/d238c71341928567.allbytevalues_twice.br +0 -0
  66. package/test/brotli.test.data/d38da8261aedc293.bible.br +0 -0
  67. package/test/brotli.test.data/d6a9c5da7ba30f21.allbytevalues_16k.br +0 -0
  68. package/test/brotli.test.data/f121ac88218962d7.x.br +0 -0
  69. package/test/brotli.test.data/f6083a8a3754518c.x64.br +0 -0
  70. package/test/brotli.test.file +201 -0
  71. package/test/brotli.test.file.br +0 -0
  72. package/test/brotli.test.ts +2197 -0
  73. package/test/compression.test.ts +93 -0
  74. package/test/crypto.test.ts +157 -0
  75. package/tsconfig.json +10 -0
  76. package/tsconfig.typecheck.json +14 -0
  77. package/vitest.config.ts +8 -0
@@ -0,0 +1,2197 @@
1
+ import fs from "node:fs/promises";
2
+ import { dirname, resolve } from "node:path";
3
+ import { fileURLToPath } from "node:url";
4
+ import zlib from "node:zlib";
5
+ import { describe, expect, test } from "vitest";
6
+
7
+ import * as brotli from "../src/brotli.js";
8
+
9
+ const __filename = fileURLToPath(import.meta.url);
10
+ const __dirname = dirname(__filename);
11
+
12
+ export const readFile = (path: string) => fs.readFile(resolve(__dirname, path));
13
+
14
+ export const readdir = (path: string) => fs.readdir(resolve(__dirname, path));
15
+
16
+ describe("decode", () => {
17
+ function bytesToString(bytes: Int8Array) {
18
+ const chars: number[] = new Uint16Array(bytes) as unknown as number[];
19
+ return String.fromCharCode.apply(null, chars);
20
+ }
21
+
22
+ function stringToBytes(str: string) {
23
+ const out = new Int8Array(str.length);
24
+ for (let i = 0; i < str.length; ++i) out[i] = str.charCodeAt(i);
25
+ return out;
26
+ }
27
+
28
+ test("metadata", () => {
29
+ expect("").toEqual(bytesToString(brotli.decode(Int8Array.from([1, 11, 0, 42, 3]))));
30
+ });
31
+
32
+ test("compound dictionary", () => {
33
+ const txt = "kot lomom kolol slona\n";
34
+ const dictionary = stringToBytes(txt);
35
+ const compressed = [0xa1, 0xa8, 0x00, 0xc0, 0x2f, 0x01, 0x10, 0xc4, 0x44, 0x09, 0x00];
36
+ expect(txt.length).toEqual(compressed.length * 2);
37
+ const options = { customDictionary: dictionary };
38
+ expect(txt).toEqual(bytesToString(brotli.decode(Int8Array.from(compressed), options)));
39
+ });
40
+
41
+ describe("bundle", async () => {
42
+ const CRC_64_POLY = new Uint32Array([0xd7870f42, 0xc96c5795]);
43
+ function calculateCrc64(data: Int8Array): string {
44
+ const crc = new Uint32Array([0xffffffff, 0xffffffff]);
45
+ const c = new Uint32Array(2);
46
+ for (let i = 0; i < data.length; ++i) {
47
+ c[1] = 0;
48
+ c[0] = (crc[0] ^ data[i]) & 0xff;
49
+ for (let k = 0; k < 8; ++k) {
50
+ const isOdd = c[0] & 1;
51
+ c[0] = (c[0] >>> 1) | ((c[1] & 1) << 31);
52
+ c[1] = c[1] >>> 1;
53
+ if (isOdd) {
54
+ c[0] = c[0] ^ CRC_64_POLY[0];
55
+ c[1] = c[1] ^ CRC_64_POLY[1];
56
+ }
57
+ }
58
+ crc[0] = ((crc[0] >>> 8) | ((crc[1] & 0xff) << 24)) ^ c[0];
59
+ crc[1] = (crc[1] >>> 8) ^ c[1];
60
+ }
61
+ crc[0] = ~crc[0];
62
+ crc[1] = ~crc[1];
63
+
64
+ let lo = crc[0].toString(16);
65
+ lo = "0".repeat(8 - lo.length) + lo;
66
+ let hi = crc[1].toString(16);
67
+ hi = "0".repeat(8 - hi.length) + hi;
68
+
69
+ return hi + lo;
70
+ }
71
+
72
+ const dir = "./brotli.test.data";
73
+ const files = await readdir(dir);
74
+ test.each(files)(`%s`, async (file) => {
75
+ const expected = file.substring(0, 16);
76
+ const data = await readFile(`${dir}/${file}`);
77
+ const decompressed = brotli.decode(data);
78
+ const crc = calculateCrc64(decompressed);
79
+ expect(expected).toEqual(crc);
80
+ });
81
+ });
82
+
83
+ describe("synth", () => {
84
+ /**
85
+ * NB: Use intermediate chunks to avoid "Maximum call stack size exceeded".
86
+ */
87
+ function bytesToString(bytes: Int8Array): string {
88
+ const kChunkSize = 4096;
89
+ if (bytes.length <= kChunkSize) {
90
+ const chars = new Uint8Array(bytes) as unknown as number[];
91
+ return String.fromCharCode.apply(null, chars);
92
+ }
93
+ const chunks = [];
94
+ for (let start = 0; start < bytes.length; start += kChunkSize) {
95
+ const end = Math.min(start + 4096, bytes.length);
96
+ chunks.push(bytesToString(bytes.slice(start, end)));
97
+ }
98
+ return chunks.join("");
99
+ }
100
+
101
+ /**
102
+ * NB: String.prototype.repeat causes "Maximum call stack size exceeded".
103
+ */
104
+ function times(count: number, char: string): string {
105
+ return char.repeat(count);
106
+ }
107
+
108
+ function checkSynth(compressed: number[], expectSuccess: boolean, expectedOutput: string) {
109
+ let success = true;
110
+ let actual: Int8Array | null = null;
111
+ try {
112
+ actual = brotli.decode(Int8Array.from(compressed));
113
+ } catch {
114
+ success = false;
115
+ }
116
+ expect(expectSuccess).toEqual(success);
117
+ if (expectSuccess) {
118
+ expect(expectedOutput).toEqual(bytesToString(actual as Int8Array));
119
+ }
120
+ }
121
+
122
+ const allTests: object = {
123
+ /* GENERATED CODE START */
124
+
125
+ testAllTransforms10() {
126
+ const compressed = [
127
+ 0x1b, 0xfc, 0x05, 0x00, 0x00, 0x00, 0x80, 0xe3, 0xb4, 0x0d, 0x00, 0x00, 0x07, 0x5b, 0x26,
128
+ 0x31, 0x40, 0x02, 0x00, 0xe0, 0x4e, 0x1b, 0x13, 0x7c, 0x84, 0x26, 0xf8, 0x04, 0x10, 0x4c,
129
+ 0xf0, 0x89, 0x38, 0x30, 0xc1, 0x27, 0x4e, 0xc1, 0x04, 0x9f, 0x64, 0x06, 0x26, 0xf8, 0x24,
130
+ 0x3f, 0x34, 0xc1, 0x27, 0x7d, 0x82, 0x09, 0x3e, 0xe9, 0x16, 0x4d, 0xf0, 0xc9, 0xd2, 0xc0,
131
+ 0x04, 0x9f, 0x0c, 0x8f, 0x4c, 0xf0, 0xc9, 0x06, 0xd1, 0x04, 0x9f, 0x6c, 0x92, 0x4d, 0xf0,
132
+ 0xc9, 0x39, 0xc1, 0x04, 0x9f, 0xdc, 0x94, 0x4c, 0xf0, 0xc9, 0x69, 0xd1, 0x04, 0x9f, 0x3c,
133
+ 0x98, 0x4d, 0xf0, 0x29, 0x9c, 0x81, 0x09, 0x3e, 0x45, 0x37, 0x31, 0xc1, 0xa7, 0x60, 0x47,
134
+ 0x26, 0xf8, 0x14, 0xfa, 0xcc, 0x04, 0x9f, 0xc2, 0x20, 0x9a, 0xe0, 0x53, 0x48, 0x54, 0x13,
135
+ 0x7c, 0x8a, 0x8f, 0x6c, 0x82, 0x4f, 0xb1, 0xd2, 0x4d, 0xf0, 0x29, 0x67, 0x82, 0x09, 0x3e,
136
+ 0xe5, 0x4f, 0x31, 0xc1, 0xa7, 0x7c, 0x4a, 0x26, 0xf8, 0x94, 0x57, 0xcd, 0x04, 0x9f, 0x12,
137
+ 0x2c, 0x9a, 0xe0, 0x53, 0xba, 0x55, 0x13, 0x7c, 0xca, 0xbf, 0x6c, 0x82, 0x4f, 0xb9, 0xd8,
138
+ 0x4d, 0xf0, 0xa9, 0x30, 0x03, 0x13, 0x7c, 0x2a, 0xd2, 0xc2, 0x04, 0x9f, 0x4a, 0x36, 0x31,
139
+ 0xc1, 0xa7, 0xca, 0x6d, 0x4c, 0xf0, 0xa9, 0x94, 0x23, 0x13, 0x7c, 0x2a, 0xeb, 0xca, 0x04,
140
+ 0x9f, 0xea, 0x3c, 0x33, 0xc1, 0xa7, 0xb2, 0xef, 0x4c, 0xf0, 0xa9, 0xf8, 0x43, 0x13, 0x7c,
141
+ 0xaa, 0x00, 0xd3, 0x04, 0x9f, 0x2a, 0x42, 0x35, 0xc1, 0xa7, 0xc2, 0x70, 0x4d, 0xf0, 0xa9,
142
+ 0x52, 0x64, 0x13, 0x7c, 0x2a, 0x1a, 0xdb, 0x04, 0x9f, 0x6a, 0x48, 0x37, 0xc1, 0xa7, 0x92,
143
+ 0xf2, 0x4d, 0xf0, 0xa9, 0xc3, 0x04, 0x13, 0x7c, 0xea, 0x32, 0xc3, 0x04, 0x9f, 0x7a, 0x4e,
144
+ 0x31, 0xc1, 0xa7, 0x06, 0x74, 0x4c, 0xf0, 0xa9, 0x19, 0x25, 0x13, 0x7c, 0x6a, 0x4d, 0xcb,
145
+ 0x04, 0x9f, 0x1a, 0x55, 0x33, 0xc1, 0xa7, 0x56, 0xf5, 0x4c, 0xf0, 0xa9, 0x5d, 0x45, 0x13,
146
+ 0x7c, 0xea, 0x59, 0xd3, 0x04, 0x9f, 0xfa, 0x57, 0x35, 0xc1, 0xa7, 0x66, 0x76, 0x4d, 0xf0,
147
+ 0xa9, 0x9f, 0x65, 0x13, 0x7c, 0x6a, 0x6f, 0xdb, 0x04, 0x9f, 0x9a, 0x5d, 0x37, 0xc1, 0xa7,
148
+ 0x06, 0xf8, 0x4d, 0xf0, 0x69, 0x0c, 0x06, 0x26, 0xf8, 0x34, 0x08, 0x07, 0x13, 0x7c, 0x1a,
149
+ 0x8b, 0x85, 0x09, 0x3e, 0x8d, 0xc8, 0xc3, 0x04, 0x9f, 0xe6, 0x65, 0x62, 0x82, 0x4f, 0xb3,
150
+ 0x73, 0x31, 0xc1, 0xa7, 0x41, 0xda, 0x98, 0xe0, 0xd3, 0x54, 0x7d, 0x4c, 0xf0, 0x69, 0xc4,
151
+ 0x46, 0x26, 0xf8, 0x34, 0x72, 0x27, 0x13, 0x7c, 0x1a, 0xc5, 0x95, 0x09, 0x3e, 0x8d, 0xe5,
152
+ 0xcb, 0x04, 0x9f, 0x06, 0x75, 0x66, 0x82, 0x4f, 0x43, 0x7b, 0x33, 0xc1, 0xa7, 0x09, 0xde,
153
+ 0x99, 0xe0, 0xd3, 0x34, 0xff, 0x4c, 0xf0, 0x69, 0xb2, 0x87, 0x26, 0xf8, 0x34, 0xe9, 0x47,
154
+ 0x13, 0x7c, 0x9a, 0xfb, 0xa5, 0x09, 0x3e, 0x4d, 0x01, 0xd4, 0x04, 0x9f, 0x46, 0x82, 0x6a,
155
+ 0x82, 0x4f, 0x03, 0x82, 0x35, 0xc1, 0xa7, 0x61, 0xe1, 0x9a, 0xe0, 0xd3, 0xe4, 0x80, 0x4d,
156
+ 0xf0, 0x69, 0x8a, 0xc8, 0x26, 0xf8, 0x34, 0x52, 0x68, 0x13, 0x7c, 0x9a, 0x2f, 0xb6, 0x09,
157
+ 0x3e, 0x8d, 0x1b, 0xdc, 0x04, 0x9f, 0x86, 0x8f, 0x6e, 0x82, 0x4f, 0xb3, 0x88, 0x37, 0xc1,
158
+ 0xa7, 0xd9, 0xe4, 0x9b, 0xe0, 0xd3, 0x9e, 0x02, 0x4c, 0xf0, 0x69, 0x6d, 0x09, 0x26, 0xf8,
159
+ 0xb4, 0xc3, 0x08, 0x13, 0x7c, 0x5a, 0x68, 0x86, 0x09, 0x3e, 0xad, 0x37, 0xc4, 0x04, 0x9f,
160
+ 0x56, 0x9d, 0x62, 0x82, 0x4f, 0x9b, 0x8f, 0x31, 0xc1, 0xa7, 0x2d, 0xe8, 0x98, 0xe0, 0xd3,
161
+ 0x4a, 0x84, 0x4c, 0xf0, 0x69, 0x3f, 0x4a, 0x26, 0xf8, 0xb4, 0x2c, 0x29, 0x13, 0x7c, 0xda,
162
+ 0x9c, 0x96, 0x09, 0x3e, 0x2d, 0x52, 0xcc, 0x04, 0x9f, 0xb6, 0xaa, 0x66, 0x82, 0x4f, 0x2b,
163
+ 0x96, 0x33, 0xc1, 0xa7, 0x7d, 0xeb, 0x99, 0xe0, 0xd3, 0xf6, 0x05, 0x4d, 0xf0, 0x69, 0x17,
164
+ 0x8b, 0x26, 0xf8, 0xb4, 0x97, 0x49, 0x13, 0x7c, 0xda, 0xd1, 0xa6, 0x09, 0x3e, 0x2d, 0x6c,
165
+ 0xd4, 0x04, 0x9f, 0xb6, 0xb7, 0x6a, 0x82, 0x4f, 0xab, 0x9c, 0x35, 0xc1, 0xa7, 0xc5, 0xee,
166
+ 0x9a, 0xe0, 0xd3, 0x9a, 0x87, 0x4d, 0xf0, 0x69, 0xe9, 0xcb,
167
+ ];
168
+ checkSynth(
169
+ /*
170
+ * // The stream consists of word "time" with all possible transforms.
171
+ * main_header
172
+ * metablock_header_easy: 1533, 1
173
+ * command_easy: 10, "|", 2 // = 0 << 10 + 1 + 1
174
+ * command_easy: 10, "|", 1037 // = 1 << 10 + 1 + 12
175
+ * command_easy: 10, "|", 2073 // = 2 << 10 + 1 + 24
176
+ * command_easy: 10, "|", 3110 // = 3 << 10 + 1 + 37
177
+ * command_easy: 10, "|", 4144 // = 4 << 10 + 1 + 47
178
+ * command_easy: 10, "|", 5180 // = 5 << 10 + 1 + 59
179
+ * command_easy: 10, "|", 6220 // = 6 << 10 + 1 + 75
180
+ * command_easy: 10, "|", 7256 // = 7 << 10 + 1 + 87
181
+ * command_easy: 10, "|", 8294 // = 8 << 10 + 1 + 101
182
+ * command_easy: 10, "|", 9333 // = 9 << 10 + 1 + 116
183
+ * command_easy: 10, "|", 10368 // = 10 << 10 + 1 + 127
184
+ * command_easy: 10, "|", 11408 // = 11 << 10 + 1 + 143
185
+ * command_easy: 10, "|", 12441 // = 12 << 10 + 1 + 152
186
+ * command_easy: 10, "|", 13475 // = 13 << 10 + 1 + 162
187
+ * command_easy: 10, "|", 14513 // = 14 << 10 + 1 + 176
188
+ * command_easy: 10, "|", 15550 // = 15 << 10 + 1 + 189
189
+ * command_easy: 10, "|", 16587 // = 16 << 10 + 1 + 202
190
+ * command_easy: 10, "|", 17626 // = 17 << 10 + 1 + 217
191
+ * command_easy: 10, "|", 18665 // = 18 << 10 + 1 + 232
192
+ * command_easy: 10, "|", 19703 // = 19 << 10 + 1 + 246
193
+ * command_easy: 10, "|", 20739 // = 20 << 10 + 1 + 258
194
+ * command_easy: 10, "|", 21775 // = 21 << 10 + 1 + 270
195
+ * command_easy: 10, "|", 22812 // = 22 << 10 + 1 + 283
196
+ * command_easy: 10, "|", 23848 // = 23 << 10 + 1 + 295
197
+ * command_easy: 10, "|", 24880 // = 24 << 10 + 1 + 303
198
+ * command_easy: 10, "|", 25916 // = 25 << 10 + 1 + 315
199
+ * command_easy: 10, "|", 26956 // = 26 << 10 + 1 + 331
200
+ * command_easy: 10, "|", 27988 // = 27 << 10 + 1 + 339
201
+ * command_easy: 10, "|", 29021 // = 28 << 10 + 1 + 348
202
+ * command_easy: 10, "|", 30059 // = 29 << 10 + 1 + 362
203
+ * command_easy: 10, "|", 31100 // = 30 << 10 + 1 + 379
204
+ * command_easy: 10, "|", 32136 // = 31 << 10 + 1 + 391
205
+ * command_easy: 10, "|", 33173 // = 32 << 10 + 1 + 404
206
+ * command_easy: 10, "|", 34209 // = 33 << 10 + 1 + 416
207
+ * command_easy: 10, "|", 35247 // = 34 << 10 + 1 + 430
208
+ * command_easy: 10, "|", 36278 // = 35 << 10 + 1 + 437
209
+ * command_easy: 10, "|", 37319 // = 36 << 10 + 1 + 454
210
+ * command_easy: 10, "|", 38355 // = 37 << 10 + 1 + 466
211
+ * command_easy: 10, "|", 39396 // = 38 << 10 + 1 + 483
212
+ * command_easy: 10, "|", 40435 // = 39 << 10 + 1 + 498
213
+ * command_easy: 10, "|", 41465 // = 40 << 10 + 1 + 504
214
+ * command_easy: 10, "|", 42494 // = 41 << 10 + 1 + 509
215
+ * command_easy: 10, "|", 43534 // = 42 << 10 + 1 + 525
216
+ * command_easy: 10, "|", 44565 // = 43 << 10 + 1 + 532
217
+ * command_easy: 10, "|", 45606 // = 44 << 10 + 1 + 549
218
+ * command_easy: 10, "|", 46641 // = 45 << 10 + 1 + 560
219
+ * command_easy: 10, "|", 47680 // = 46 << 10 + 1 + 575
220
+ * command_easy: 10, "|", 48719 // = 47 << 10 + 1 + 590
221
+ * command_easy: 10, "|", 49758 // = 48 << 10 + 1 + 605
222
+ * command_easy: 10, "|", 50786 // = 49 << 10 + 1 + 609
223
+ * command_easy: 10, "|", 51824 // = 50 << 10 + 1 + 623
224
+ * command_easy: 10, "|", 52861 // = 51 << 10 + 1 + 636
225
+ * command_easy: 10, "|", 53897 // = 52 << 10 + 1 + 648
226
+ * command_easy: 10, "|", 54935 // = 53 << 10 + 1 + 662
227
+ * command_easy: 10, "|", 55973 // = 54 << 10 + 1 + 676
228
+ * command_easy: 10, "|", 56999 // = 55 << 10 + 1 + 678
229
+ * command_easy: 10, "|", 58027 // = 56 << 10 + 1 + 682
230
+ * command_easy: 10, "|", 59056 // = 57 << 10 + 1 + 687
231
+ * command_easy: 10, "|", 60092 // = 58 << 10 + 1 + 699
232
+ * command_easy: 10, "|", 61129 // = 59 << 10 + 1 + 712
233
+ * command_easy: 10, "|", 62156 // = 60 << 10 + 1 + 715
234
+ * command_easy: 10, "|", 63195 // = 61 << 10 + 1 + 730
235
+ * command_easy: 10, "|", 64233 // = 62 << 10 + 1 + 744
236
+ * command_easy: 10, "|", 65277 // = 63 << 10 + 1 + 764
237
+ * command_easy: 10, "|", 66307 // = 64 << 10 + 1 + 770
238
+ * command_easy: 10, "|", 67333 // = 65 << 10 + 1 + 772
239
+ * command_easy: 10, "|", 68371 // = 66 << 10 + 1 + 786
240
+ * command_easy: 10, "|", 69407 // = 67 << 10 + 1 + 798
241
+ * command_easy: 10, "|", 70444 // = 68 << 10 + 1 + 811
242
+ * command_easy: 10, "|", 71480 // = 69 << 10 + 1 + 823
243
+ * command_easy: 10, "|", 72517 // = 70 << 10 + 1 + 836
244
+ * command_easy: 10, "|", 73554 // = 71 << 10 + 1 + 849
245
+ * command_easy: 10, "|", 74591 // = 72 << 10 + 1 + 862
246
+ * command_easy: 10, "|", 75631 // = 73 << 10 + 1 + 878
247
+ * command_easy: 10, "|", 76679 // = 74 << 10 + 1 + 902
248
+ * command_easy: 10, "|", 77715 // = 75 << 10 + 1 + 914
249
+ * command_easy: 10, "|", 78757 // = 76 << 10 + 1 + 932
250
+ * command_easy: 10, "|", 79793 // = 77 << 10 + 1 + 944
251
+ * command_easy: 10, "|", 80830 // = 78 << 10 + 1 + 957
252
+ * command_easy: 10, "|", 81866 // = 79 << 10 + 1 + 969
253
+ * command_easy: 10, "|", 82902 // = 80 << 10 + 1 + 981
254
+ * command_easy: 10, "|", 83942 // = 81 << 10 + 1 + 997
255
+ * command_easy: 10, "|", 84980 // = 82 << 10 + 1 + 1011
256
+ * command_easy: 10, "|", 86018 // = 83 << 10 + 1 + 1025
257
+ * command_easy: 10, "|", 87055 // = 84 << 10 + 1 + 1038
258
+ * command_easy: 10, "|", 88093 // = 85 << 10 + 1 + 1052
259
+ * command_easy: 10, "|", 89129 // = 86 << 10 + 1 + 1064
260
+ * command_easy: 10, "|", 90166 // = 87 << 10 + 1 + 1077
261
+ * command_easy: 10, "|", 91202 // = 88 << 10 + 1 + 1089
262
+ * command_easy: 10, "|", 92239 // = 89 << 10 + 1 + 1102
263
+ * command_easy: 10, "|", 93276 // = 90 << 10 + 1 + 1115
264
+ * command_easy: 10, "|", 94315 // = 91 << 10 + 1 + 1130
265
+ * command_easy: 10, "|", 95353 // = 92 << 10 + 1 + 1144
266
+ * command_easy: 10, "|", 96392 // = 93 << 10 + 1 + 1159
267
+ * command_easy: 10, "|", 97432 // = 94 << 10 + 1 + 1175
268
+ * command_easy: 10, "|", 98468 // = 95 << 10 + 1 + 1187
269
+ * command_easy: 10, "|", 99507 // = 96 << 10 + 1 + 1202
270
+ * command_easy: 10, "|", 100544 // = 97 << 10 + 1 + 1215
271
+ * command_easy: 10, "|", 101581 // = 98 << 10 + 1 + 1228
272
+ * command_easy: 10, "|", 102619 // = 99 << 10 + 1 + 1242
273
+ * command_easy: 10, "|", 103655 // = 100 << 10 + 1 + 1254
274
+ * command_easy: 10, "|", 104694 // = 101 << 10 + 1 + 1269
275
+ * command_easy: 10, "|", 105730 // = 102 << 10 + 1 + 1281
276
+ * command_easy: 10, "|", 106767 // = 103 << 10 + 1 + 1294
277
+ * command_easy: 10, "|", 107804 // = 104 << 10 + 1 + 1307
278
+ * command_easy: 10, "|", 108841 // = 105 << 10 + 1 + 1320
279
+ * command_easy: 10, "|", 109878 // = 106 << 10 + 1 + 1333
280
+ * command_easy: 10, "|", 110917 // = 107 << 10 + 1 + 1348
281
+ * command_easy: 10, "|", 111954 // = 108 << 10 + 1 + 1361
282
+ * command_easy: 10, "|", 112991 // = 109 << 10 + 1 + 1374
283
+ * command_easy: 10, "|", 114028 // = 110 << 10 + 1 + 1387
284
+ * command_easy: 10, "|", 115066 // = 111 << 10 + 1 + 1401
285
+ * command_easy: 10, "|", 116104 // = 112 << 10 + 1 + 1415
286
+ * command_easy: 10, "|", 117140 // = 113 << 10 + 1 + 1427
287
+ * command_easy: 10, "|", 118176 // = 114 << 10 + 1 + 1439
288
+ * command_easy: 10, "|", 119213 // = 115 << 10 + 1 + 1452
289
+ * command_easy: 10, "|", 120250 // = 116 << 10 + 1 + 1465
290
+ * command_easy: 10, "|", 121287 // = 117 << 10 + 1 + 1478
291
+ * command_easy: 10, "|", 122325 // = 118 << 10 + 1 + 1492
292
+ * command_easy: 10, "|", 123363 // = 119 << 10 + 1 + 1506
293
+ * command_easy: 10, "|", 124401 // = 120 << 10 + 1 + 1520
294
+ */
295
+ compressed,
296
+ true,
297
+ // typo:off
298
+ "|categories|categories | categories |ategories|Categories |categories the " +
299
+ "| categories|s categories |categories of |Categories|categories and |teg" +
300
+ "ories|categorie|, categories |categories, | Categories |categories in |c" +
301
+ 'ategories to |e categories |categories"|categories.|categories">|categor' +
302
+ "ies\n|categor|categories]|categories for |egories|categori|categories a " +
303
+ "|categories that | Categories|categories. |.categories| categories, |gor" +
304
+ "ies|categories with |categories'|categories from |categories by |ories|" +
305
+ "ries| the categories|catego|categories. The |CATEGORIES|categories on |c" +
306
+ "ategories as |categories is |cat|categorieing |categories\n\t|categories" +
307
+ ":| categories. |categoriesed |s|ies|cate|categories(|Categories, |ca|cat" +
308
+ "egories at |categoriesly | the categories of |categ|c| Categories, |Cate" +
309
+ 'gories"|.categories(|CATEGORIES |Categories">|categories="| categories.|' +
310
+ ".com/categories| the categories of the |Categories'|categories. This |c" +
311
+ "ategories,|.categories |Categories(|Categories.|categories not | categor" +
312
+ 'ies="|categorieser | CATEGORIES |categoriesal | CATEGORIES|categories=' +
313
+ "'|CATEGORIES\"|Categories. | categories(|categoriesful | Categories. |ca" +
314
+ "tegoriesive |categoriesless |CATEGORIES'|categoriesest | Categories.|CA" +
315
+ "TEGORIES\">| categories='|Categories,|categoriesize |CATEGORIES.|" +
316
+ '\xc2\xa0categories| categories,|Categories="|CATEGORIES="|categoriesous ' +
317
+ "|CATEGORIES, |Categories='| Categories,| CATEGORIES=\"| CATEGORIES, |CAT" +
318
+ "EGORIES,|CATEGORIES(|CATEGORIES. | CATEGORIES.|CATEGORIES='| CATEGORIES" +
319
+ ". | Categories=\"| CATEGORIES='| Categories='",
320
+ // typo:on
321
+ );
322
+ },
323
+
324
+ testAllTransforms4() {
325
+ const compressed = [
326
+ 0x1b, 0x40, 0x03, 0x00, 0x00, 0x00, 0x80, 0xe3, 0xb4, 0x0d, 0x00, 0x00, 0x07, 0x5b, 0x26,
327
+ 0x31, 0x40, 0x02, 0x00, 0xe0, 0x4e, 0x1b, 0x51, 0x3e, 0x42, 0x51, 0x3e, 0x81, 0x02, 0x51,
328
+ 0x3e, 0x11, 0x04, 0xa2, 0x7c, 0xe2, 0x0b, 0x44, 0xf9, 0x24, 0x1b, 0x10, 0xe5, 0x93, 0x84,
329
+ 0x50, 0x94, 0x4f, 0xba, 0x02, 0x51, 0x3e, 0x69, 0x0c, 0x45, 0xf9, 0x64, 0x39, 0x20, 0xca,
330
+ 0x27, 0x13, 0x22, 0x51, 0x3e, 0xd9, 0x11, 0x8a, 0xf2, 0xc9, 0xa2, 0x58, 0x94, 0x4f, 0x4e,
331
+ 0x05, 0xa2, 0x7c, 0x72, 0x2c, 0x12, 0xe5, 0x93, 0x83, 0xa1, 0x28, 0x9f, 0xfc, 0x8c, 0x45,
332
+ 0xf9, 0x14, 0x6e, 0x40, 0x94, 0x4f, 0x71, 0x47, 0x44, 0xf9, 0x14, 0x80, 0x48, 0x94, 0x4f,
333
+ 0x81, 0xc8, 0x44, 0xf9, 0x14, 0x8e, 0x50, 0x94, 0x4f, 0x41, 0x49, 0x45, 0xf9, 0x14, 0x9b,
334
+ 0x58, 0x94, 0x4f, 0x11, 0xca, 0x45, 0xf9, 0x94, 0xa3, 0x40, 0x94, 0x4f, 0x99, 0x4a, 0x44,
335
+ 0xf9, 0x94, 0xb3, 0x48, 0x94, 0x4f, 0x59, 0xcb, 0x44, 0xf9, 0x94, 0xb8, 0x50, 0x94, 0x4f,
336
+ 0x09, 0x4c, 0x45, 0xf9, 0x94, 0xcb, 0x58, 0x94, 0x4f, 0x19, 0xcd, 0x45, 0xf9, 0x54, 0xd8,
337
+ 0x80, 0x28, 0x9f, 0xca, 0x9b, 0x10, 0xe5, 0x53, 0x99, 0x23, 0xa2, 0x7c, 0xaa, 0x73, 0x46,
338
+ 0x94, 0x4f, 0x25, 0x0f, 0x89, 0xf2, 0xa9, 0xf0, 0x29, 0x51, 0x3e, 0xd5, 0x40, 0x26, 0xca,
339
+ 0xa7, 0x62, 0xe8, 0x44, 0xf9, 0x54, 0x0d, 0xa1, 0x28, 0x9f, 0xca, 0xa1, 0x14, 0xe5, 0x53,
340
+ 0x61, 0xa4, 0xa2, 0x7c, 0xaa, 0x8c, 0x56, 0x94, 0x4f, 0x45, 0x12, 0x8b, 0xf2, 0xa9, 0x52,
341
+ 0x6a, 0x51, 0x3e, 0x95, 0x4c, 0x2e, 0xca, 0xa7, 0xda, 0xe9, 0x45, 0xf9, 0xd4, 0x44, 0x81,
342
+ 0x28, 0x9f, 0xba, 0xa8, 0x10, 0xe5, 0x53, 0x37, 0x25, 0xa2, 0x7c, 0x6a, 0xaa, 0x46, 0x94,
343
+ 0x4f, 0xad, 0x15, 0x89, 0xf2, 0xa9, 0xc5, 0x2a, 0x51, 0x3e, 0xb5, 0x5a, 0x26, 0xca, 0xa7,
344
+ 0x5e, 0xeb, 0x44, 0xf9, 0xd4, 0x6c, 0xa1, 0x28, 0x9f, 0xba, 0xad, 0x14, 0xe5, 0x53, 0xcf,
345
+ 0xa5, 0xa2, 0x7c, 0x6a, 0xbd, 0x56, 0x94, 0x4f, 0xbd, 0x17, 0x8b, 0xf2, 0xa9, 0x09, 0x6b,
346
+ 0x51, 0x3e, 0x35, 0x63, 0x2e, 0xca, 0xa7, 0xd6, 0xec, 0x45, 0xf9, 0x34, 0x9b, 0x01, 0x51,
347
+ 0x3e, 0x0d, 0x67, 0x41, 0x94, 0x4f, 0x43, 0x9a, 0x10, 0xe5, 0xd3, 0xa8, 0x36, 0x44, 0xf9,
348
+ 0x34, 0xb1, 0x11, 0x51, 0x3e, 0xcd, 0x6d, 0x45, 0x94, 0x4f, 0xe3, 0x9b, 0x11, 0xe5, 0xd3,
349
+ 0x14, 0x77, 0x44, 0xf9, 0x34, 0xcc, 0x21, 0x51, 0x3e, 0x8d, 0x75, 0x49, 0x94, 0x4f, 0x83,
350
+ 0x9e, 0x12, 0xe5, 0xd3, 0xb8, 0xb7, 0x44, 0xf9, 0x34, 0xfa, 0x31, 0x51, 0x3e, 0x0d, 0x80,
351
+ 0x4d, 0x94, 0x4f, 0x73, 0xa0, 0x13, 0xe5, 0xd3, 0x34, 0xf8, 0x44, 0xf9, 0x34, 0x13, 0x42,
352
+ 0x51, 0x3e, 0x4d, 0x87, 0x51, 0x94, 0x4f, 0x53, 0xa2, 0x14, 0xe5, 0xd3, 0xb4, 0x38, 0x45,
353
+ 0xf9, 0x34, 0x34, 0x52, 0x51, 0x3e, 0x0d, 0x8f, 0x55, 0x94, 0x4f, 0x23, 0xa4, 0x15, 0xe5,
354
+ 0xd3, 0x24, 0x79, 0x45, 0xf9, 0x34, 0x4f, 0x62, 0x51, 0x3e, 0x8d, 0x95, 0x59, 0x94, 0x4f,
355
+ 0xd3, 0xa5, 0x16, 0xe5, 0xd3, 0x98, 0xb9, 0x45, 0xf9, 0x34, 0x6e, 0x72, 0x51, 0x3e, 0xcd,
356
+ 0x9d, 0x5d, 0x94, 0x4f, 0x13, 0xa8, 0x17, 0xe5, 0xd3, 0x1c, 0xfa, 0x45, 0xf9, 0xb4, 0x90,
357
+ 0x02, 0x51, 0x3e, 0xed, 0xa5, 0x41, 0x94, 0x4f, 0xeb, 0xa9, 0x10, 0xe5, 0xd3, 0x9a, 0x3a,
358
+ 0x44, 0xf9, 0xb4, 0xac, 0x12, 0x51, 0x3e, 0x6d, 0xad, 0x45, 0x94, 0x4f, 0xbb, 0xab, 0x11,
359
+ 0xe5, 0xd3, 0x0a, 0x7b, 0x44, 0xf9, 0xb4, 0xc9, 0x22, 0x51, 0x3e, 0x2d, 0xb4, 0x49, 0x94,
360
+ 0x4f, 0x7b, 0xad, 0x12, 0xe5, 0xd3, 0x82, 0xbb, 0x44, 0xf9, 0xb4, 0xe7, 0x32, 0x51, 0x3e,
361
+ 0xad, 0xbb, 0x4d, 0x94, 0x4f, 0x5b, 0xaf, 0x13, 0xe5, 0xd3, 0xf6, 0xfb, 0x44, 0xf9, 0xb4,
362
+ 0x05, 0x43, 0x51, 0x3e, 0xed, 0xc2, 0x51, 0x94, 0x4f, 0x1b, 0xb1, 0x14, 0xe5, 0xd3, 0x62,
363
+ 0x3c, 0x45, 0xf9, 0xb4, 0x1f, 0x53, 0x51, 0x3e, 0xad, 0xc9, 0x55, 0x94, 0x4f, 0xeb, 0xb2,
364
+ 0x15, 0xe5, 0xd3, 0xda, 0x7c, 0x45, 0xf9, 0xb4, 0x3e, 0x63,
365
+ ];
366
+ checkSynth(
367
+ /*
368
+ * // The stream consists of word "time" with all possible transforms.
369
+ * main_header
370
+ * metablock_header_easy: 833, 1
371
+ * command_easy: 4, "|", 2 // = 0 << 10 + 1 + 1
372
+ * command_easy: 4, "|", 1031 // = 1 << 10 + 1 + 6
373
+ * command_easy: 4, "|", 2061 // = 2 << 10 + 1 + 12
374
+ * command_easy: 4, "|", 3092 // = 3 << 10 + 1 + 19
375
+ * command_easy: 4, "|", 4120 // = 4 << 10 + 1 + 23
376
+ * command_easy: 4, "|", 5150 // = 5 << 10 + 1 + 29
377
+ * command_easy: 4, "|", 6184 // = 6 << 10 + 1 + 39
378
+ * command_easy: 4, "|", 7214 // = 7 << 10 + 1 + 45
379
+ * command_easy: 4, "|", 8246 // = 8 << 10 + 1 + 53
380
+ * command_easy: 4, "|", 9279 // = 9 << 10 + 1 + 62
381
+ * command_easy: 4, "|", 10308 // = 10 << 10 + 1 + 67
382
+ * command_easy: 4, "|", 11342 // = 11 << 10 + 1 + 77
383
+ * command_easy: 4, "|", 12369 // = 12 << 10 + 1 + 80
384
+ * command_easy: 4, "|", 13397 // = 13 << 10 + 1 + 84
385
+ * command_easy: 4, "|", 14429 // = 14 << 10 + 1 + 92
386
+ * command_easy: 4, "|", 15460 // = 15 << 10 + 1 + 99
387
+ * command_easy: 4, "|", 16491 // = 16 << 10 + 1 + 106
388
+ * command_easy: 4, "|", 17524 // = 17 << 10 + 1 + 115
389
+ * command_easy: 4, "|", 18557 // = 18 << 10 + 1 + 124
390
+ * command_easy: 4, "|", 19589 // = 19 << 10 + 1 + 132
391
+ * command_easy: 4, "|", 20619 // = 20 << 10 + 1 + 138
392
+ * command_easy: 4, "|", 21649 // = 21 << 10 + 1 + 144
393
+ * command_easy: 4, "|", 22680 // = 22 << 10 + 1 + 151
394
+ * command_easy: 4, "|", 23710 // = 23 << 10 + 1 + 157
395
+ * command_easy: 4, "|", 24736 // = 24 << 10 + 1 + 159
396
+ * command_easy: 4, "|", 25766 // = 25 << 10 + 1 + 165
397
+ * command_easy: 4, "|", 26800 // = 26 << 10 + 1 + 175
398
+ * command_easy: 4, "|", 27826 // = 27 << 10 + 1 + 177
399
+ * command_easy: 4, "|", 28853 // = 28 << 10 + 1 + 180
400
+ * command_easy: 4, "|", 29885 // = 29 << 10 + 1 + 188
401
+ * command_easy: 4, "|", 30920 // = 30 << 10 + 1 + 199
402
+ * command_easy: 4, "|", 31950 // = 31 << 10 + 1 + 205
403
+ * command_easy: 4, "|", 32981 // = 32 << 10 + 1 + 212
404
+ * command_easy: 4, "|", 34011 // = 33 << 10 + 1 + 218
405
+ * command_easy: 4, "|", 35043 // = 34 << 10 + 1 + 226
406
+ * command_easy: 4, "|", 36068 // = 35 << 10 + 1 + 227
407
+ * command_easy: 4, "|", 37103 // = 36 << 10 + 1 + 238
408
+ * command_easy: 4, "|", 38133 // = 37 << 10 + 1 + 244
409
+ * command_easy: 4, "|", 39168 // = 38 << 10 + 1 + 255
410
+ * command_easy: 4, "|", 40201 // = 39 << 10 + 1 + 264
411
+ * command_easy: 4, "|", 41226 // = 40 << 10 + 1 + 265
412
+ * command_easy: 4, "|", 42251 // = 41 << 10 + 1 + 266
413
+ * command_easy: 4, "|", 43285 // = 42 << 10 + 1 + 276
414
+ * command_easy: 4, "|", 44310 // = 43 << 10 + 1 + 277
415
+ * command_easy: 4, "|", 45345 // = 44 << 10 + 1 + 288
416
+ * command_easy: 4, "|", 46374 // = 45 << 10 + 1 + 293
417
+ * command_easy: 4, "|", 47407 // = 46 << 10 + 1 + 302
418
+ * command_easy: 4, "|", 48440 // = 47 << 10 + 1 + 311
419
+ * command_easy: 4, "|", 49473 // = 48 << 10 + 1 + 320
420
+ * command_easy: 4, "|", 50498 // = 49 << 10 + 1 + 321
421
+ * command_easy: 4, "|", 51530 // = 50 << 10 + 1 + 329
422
+ * command_easy: 4, "|", 52561 // = 51 << 10 + 1 + 336
423
+ * command_easy: 4, "|", 53591 // = 52 << 10 + 1 + 342
424
+ * command_easy: 4, "|", 54623 // = 53 << 10 + 1 + 350
425
+ * command_easy: 4, "|", 55655 // = 54 << 10 + 1 + 358
426
+ * command_easy: 4, "|", 56680 // = 55 << 10 + 1 + 359
427
+ * command_easy: 4, "|", 57705 // = 56 << 10 + 1 + 360
428
+ * command_easy: 4, "|", 58730 // = 57 << 10 + 1 + 361
429
+ * command_easy: 4, "|", 59760 // = 58 << 10 + 1 + 367
430
+ * command_easy: 4, "|", 60791 // = 59 << 10 + 1 + 374
431
+ * command_easy: 4, "|", 61816 // = 60 << 10 + 1 + 375
432
+ * command_easy: 4, "|", 62849 // = 61 << 10 + 1 + 384
433
+ * command_easy: 4, "|", 63881 // = 62 << 10 + 1 + 392
434
+ * command_easy: 4, "|", 64919 // = 63 << 10 + 1 + 406
435
+ * command_easy: 4, "|", 65944 // = 64 << 10 + 1 + 407
436
+ * command_easy: 4, "|", 66969 // = 65 << 10 + 1 + 408
437
+ * command_easy: 4, "|", 68001 // = 66 << 10 + 1 + 416
438
+ * command_easy: 4, "|", 69031 // = 67 << 10 + 1 + 422
439
+ * command_easy: 4, "|", 70062 // = 68 << 10 + 1 + 429
440
+ * command_easy: 4, "|", 71092 // = 69 << 10 + 1 + 435
441
+ * command_easy: 4, "|", 72123 // = 70 << 10 + 1 + 442
442
+ * command_easy: 4, "|", 73154 // = 71 << 10 + 1 + 449
443
+ * command_easy: 4, "|", 74185 // = 72 << 10 + 1 + 456
444
+ * command_easy: 4, "|", 75219 // = 73 << 10 + 1 + 466
445
+ * command_easy: 4, "|", 76261 // = 74 << 10 + 1 + 484
446
+ * command_easy: 4, "|", 77291 // = 75 << 10 + 1 + 490
447
+ * command_easy: 4, "|", 78327 // = 76 << 10 + 1 + 502
448
+ * command_easy: 4, "|", 79357 // = 77 << 10 + 1 + 508
449
+ * command_easy: 4, "|", 80388 // = 78 << 10 + 1 + 515
450
+ * command_easy: 4, "|", 81418 // = 79 << 10 + 1 + 521
451
+ * command_easy: 4, "|", 82448 // = 80 << 10 + 1 + 527
452
+ * command_easy: 4, "|", 83482 // = 81 << 10 + 1 + 537
453
+ * command_easy: 4, "|", 84514 // = 82 << 10 + 1 + 545
454
+ * command_easy: 4, "|", 85546 // = 83 << 10 + 1 + 553
455
+ * command_easy: 4, "|", 86577 // = 84 << 10 + 1 + 560
456
+ * command_easy: 4, "|", 87609 // = 85 << 10 + 1 + 568
457
+ * command_easy: 4, "|", 88639 // = 86 << 10 + 1 + 574
458
+ * command_easy: 4, "|", 89670 // = 87 << 10 + 1 + 581
459
+ * command_easy: 4, "|", 90700 // = 88 << 10 + 1 + 587
460
+ * command_easy: 4, "|", 91731 // = 89 << 10 + 1 + 594
461
+ * command_easy: 4, "|", 92762 // = 90 << 10 + 1 + 601
462
+ * command_easy: 4, "|", 93795 // = 91 << 10 + 1 + 610
463
+ * command_easy: 4, "|", 94827 // = 92 << 10 + 1 + 618
464
+ * command_easy: 4, "|", 95860 // = 93 << 10 + 1 + 627
465
+ * command_easy: 4, "|", 96894 // = 94 << 10 + 1 + 637
466
+ * command_easy: 4, "|", 97924 // = 95 << 10 + 1 + 643
467
+ * command_easy: 4, "|", 98957 // = 96 << 10 + 1 + 652
468
+ * command_easy: 4, "|", 99988 // = 97 << 10 + 1 + 659
469
+ * command_easy: 4, "|", 101019 // = 98 << 10 + 1 + 666
470
+ * command_easy: 4, "|", 102051 // = 99 << 10 + 1 + 674
471
+ * command_easy: 4, "|", 103081 // = 100 << 10 + 1 + 680
472
+ * command_easy: 4, "|", 104114 // = 101 << 10 + 1 + 689
473
+ * command_easy: 4, "|", 105144 // = 102 << 10 + 1 + 695
474
+ * command_easy: 4, "|", 106175 // = 103 << 10 + 1 + 702
475
+ * command_easy: 4, "|", 107206 // = 104 << 10 + 1 + 709
476
+ * command_easy: 4, "|", 108237 // = 105 << 10 + 1 + 716
477
+ * command_easy: 4, "|", 109268 // = 106 << 10 + 1 + 723
478
+ * command_easy: 4, "|", 110301 // = 107 << 10 + 1 + 732
479
+ * command_easy: 4, "|", 111332 // = 108 << 10 + 1 + 739
480
+ * command_easy: 4, "|", 112363 // = 109 << 10 + 1 + 746
481
+ * command_easy: 4, "|", 113394 // = 110 << 10 + 1 + 753
482
+ * command_easy: 4, "|", 114426 // = 111 << 10 + 1 + 761
483
+ * command_easy: 4, "|", 115458 // = 112 << 10 + 1 + 769
484
+ * command_easy: 4, "|", 116488 // = 113 << 10 + 1 + 775
485
+ * command_easy: 4, "|", 117518 // = 114 << 10 + 1 + 781
486
+ * command_easy: 4, "|", 118549 // = 115 << 10 + 1 + 788
487
+ * command_easy: 4, "|", 119580 // = 116 << 10 + 1 + 795
488
+ * command_easy: 4, "|", 120611 // = 117 << 10 + 1 + 802
489
+ * command_easy: 4, "|", 121643 // = 118 << 10 + 1 + 810
490
+ * command_easy: 4, "|", 122675 // = 119 << 10 + 1 + 818
491
+ * command_easy: 4, "|", 123707 // = 120 << 10 + 1 + 826
492
+ */
493
+ compressed,
494
+ true,
495
+ "|time|time | time |ime|Time |time the | time|s time |time of |Time|time an" +
496
+ 'd |me|tim|, time |time, | Time |time in |time to |e time |time"|time.|ti' +
497
+ 'me">|time\n|t|time]|time for |e|ti|time a |time that | Time|time. |.time' +
498
+ "| time, ||time with |time'|time from |time by ||| the time||time. The |" +
499
+ "TIME|time on |time as |time is ||timing |time\n\t|time:| time. |timeed |" +
500
+ '|||time(|Time, ||time at |timely | the time of ||| Time, |Time"|.time(|T' +
501
+ 'IME |Time">|time="| time.|.com/time| the time of the |Time\'|time. This ' +
502
+ '|time,|.time |Time(|Time.|time not | time="|timeer | TIME |timeal | TIME' +
503
+ "|time='|TIME\"|Time. | time(|timeful | Time. |timeive |timeless |TIME" +
504
+ "'|timeest | Time.|TIME\">| time='|Time,|timeize |TIME.|\xc2\xa0time| ti" +
505
+ 'me,|Time="|TIME="|timeous |TIME, |Time=\'| Time,| TIME="| TIME, |TIME,|T' +
506
+ "IME(|TIME. | TIME.|TIME='| TIME. | Time=\"| TIME='| Time='",
507
+ );
508
+ },
509
+
510
+ testBaseDictWord() {
511
+ const compressed = [
512
+ 0x1b, 0x03, 0x00, 0x00, 0x00, 0x00, 0x80, 0xe3, 0xb4, 0x0d, 0x00, 0x00, 0x07, 0x5b, 0x26,
513
+ 0x31, 0x40, 0x02, 0x00, 0xe0, 0x4e, 0x1b, 0x41, 0x02,
514
+ ];
515
+ checkSynth(
516
+ /*
517
+ * // The stream consists of a base dictionary word.
518
+ * main_header
519
+ * metablock_header_easy: 4, 1
520
+ * command_inscopy_easy: 0, 4
521
+ * command_dist_easy: 1
522
+ */
523
+ compressed,
524
+ true,
525
+ "time",
526
+ );
527
+ },
528
+
529
+ testBaseDictWordFinishBlockOnRingbufferWrap() {
530
+ const compressed = [
531
+ 0x1b, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x80, 0xe3, 0xb4, 0x0d, 0x00, 0x00, 0x07, 0x5b, 0x26,
532
+ 0x31, 0x40, 0x02, 0x00, 0xe0, 0x4e, 0x9b, 0x58, 0x32, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34,
533
+ 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34,
534
+ 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0xd4, 0x00,
535
+ ];
536
+ checkSynth(
537
+ /*
538
+ * main_header
539
+ * metablock_header_easy: 32, 1 // 32 = minimal ringbuffer size
540
+ * command_easy: 4, "aaaaaaaaaaaaaaaaaaaaaaaaaaaa", 29
541
+ */
542
+ compressed,
543
+ true,
544
+ times(28, "a") + "time",
545
+ );
546
+ },
547
+
548
+ testBaseDictWordTooLong() {
549
+ const compressed = [
550
+ 0x1b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xe3, 0xb4, 0x0d, 0x00, 0x00, 0x07, 0x5b, 0x26,
551
+ 0x31, 0x40, 0x02, 0x00, 0xe0, 0x4e, 0x1b, 0x41, 0x02,
552
+ ];
553
+ checkSynth(
554
+ /*
555
+ * // Has an unmodified dictionary word that goes over the end of the
556
+ * // meta-block. Same as BaseDictWord, but with a shorter meta-block length.
557
+ * main_header
558
+ * metablock_header_easy: 1, 1
559
+ * command_inscopy_easy: 0, 4
560
+ * command_dist_easy: 1
561
+ */
562
+ compressed,
563
+ false,
564
+ "",
565
+ );
566
+ },
567
+
568
+ testBlockCountMessage() {
569
+ const compressed = [
570
+ 0x1b, 0x0b, 0x00, 0x11, 0x01, 0x8c, 0xc1, 0xc5, 0x0d, 0x08, 0x00, 0x22, 0x65, 0xe1, 0xfc,
571
+ 0xfd, 0x22, 0x2c, 0xc4, 0x00, 0x00, 0x38, 0xd8, 0x32, 0x89, 0x01, 0x12, 0x00, 0x00, 0x77,
572
+ 0xda, 0x04, 0x10, 0x42, 0x00, 0x00, 0x00,
573
+ ];
574
+ checkSynth(
575
+ /*
576
+ * // Same as BlockSwitchMessage but also uses 0-bit block-type commands.
577
+ * main_header
578
+ * metablock_header_begin: 1, 0, 12, 0
579
+ * // two literal block types
580
+ * vlq_blocktypes: 2
581
+ * huffman_simple: 1,1,4, 1 // literal blocktype prefix code
582
+ * huffman_fixed: 26 // literal blockcount prefix code
583
+ * blockcount_easy: 2 // 2 a's
584
+ * // one ins/copy and dist block type
585
+ * vlq_blocktypes: 1
586
+ * vlq_blocktypes: 1
587
+ * ndirect: 0, 0
588
+ * // two MSB6 literal context modes
589
+ * bits: "00", "00"
590
+ * // two literal prefix codes
591
+ * vlq_blocktypes: 2
592
+ * // literal context map
593
+ * vlq_rlemax: 5
594
+ * huffman_simple: 0,3,7, 5,0,6 // context map RLE Huffman code
595
+ * // context map RLE: repeat 0 64 times, 1+5 64 times
596
+ * bits: "01", "0", "11111", "11", "0", "11111"
597
+ * bit: 1 // MTF enabled
598
+ * // one distance prefix code
599
+ * vlq_blocktypes: 1
600
+ * huffman_simple: 0,1,256, 97 // only a's
601
+ * huffman_simple: 0,1,256, 98 // only b's
602
+ * huffman_fixed: 704
603
+ * huffman_fixed: 64
604
+ * // now comes the data
605
+ * command_inscopy_easy: 12, 0
606
+ * blockcount_easy: 2 // switch to other block type; 2 b's
607
+ * blockcount_easy: 5 // switch to other block type; 5 a's
608
+ * blockcount_easy: 1 // switch to other block type; 1 b
609
+ * blockcount_easy: 1 // switch to other block type; 1 a
610
+ * blockcount_easy: 1 // switch to other block type; 1 b
611
+ */
612
+ compressed,
613
+ true,
614
+ "aabbaaaaabab",
615
+ );
616
+ },
617
+
618
+ testBlockSwitchMessage() {
619
+ const compressed = [
620
+ 0x1b, 0x0b, 0x00, 0xd1, 0xe1, 0x01, 0xc6, 0xe0, 0xe2, 0x06, 0x04, 0x00, 0x91, 0xb2, 0x70,
621
+ 0xfe, 0x7e, 0x11, 0x16, 0x62, 0x00, 0x00, 0x1c, 0x6c, 0x99, 0xc4, 0x00, 0x09, 0x00, 0x80,
622
+ 0x3b, 0x6d, 0x02, 0x08, 0x82, 0x00, 0x00, 0x00,
623
+ ];
624
+ checkSynth(
625
+ /*
626
+ * // Uses blocks with 1-symbol Huffman codes that take 0 bits, so that it
627
+ * // is the block-switch commands that encode the message rather than actual
628
+ * // literals.
629
+ * main_header
630
+ * metablock_header_begin: 1, 0, 12, 0
631
+ * // two literal block types
632
+ * vlq_blocktypes: 2
633
+ * huffman_simple: 1,4,4, 1,0,2,3 // literal blocktype prefix code
634
+ * huffman_fixed: 26 // literal blockcount prefix code
635
+ * blockcount_easy: 2 // 2 a's
636
+ * // one ins/copy and dist block type
637
+ * vlq_blocktypes: 1
638
+ * vlq_blocktypes: 1
639
+ * ndirect: 0, 0
640
+ * // two MSB6 literal context modes
641
+ * bits: "00", "00"
642
+ * // two literal prefix codes
643
+ * vlq_blocktypes: 2
644
+ * // literal context map
645
+ * vlq_rlemax: 5
646
+ * huffman_simple: 0,3,7, 5,0,6 // context map RLE Huffman code
647
+ * // context map RLE: repeat 0 64 times, 1+5 64 times
648
+ * bits: "01", "0", "11111", "11", "0", "11111"
649
+ * bit: 1 // MTF enabled
650
+ * // one distance prefix code
651
+ * vlq_blocktypes: 1
652
+ * huffman_simple: 0,1,256, 97 // only a's
653
+ * huffman_simple: 0,1,256, 98 // only b's
654
+ * huffman_fixed: 704
655
+ * huffman_fixed: 64
656
+ * // now comes the data
657
+ * command_inscopy_easy: 12, 0
658
+ * bits: "0"; blockcount_easy: 2 // switch to other block type; 2 b's
659
+ * bits: "0"; blockcount_easy: 5 // switch to other block type; 5 a's
660
+ * bits: "0"; blockcount_easy: 1 // switch to other block type; 1 b
661
+ * bits: "0"; blockcount_easy: 1 // switch to other block type; 1 a
662
+ * bits: "0"; blockcount_easy: 1 // switch to other block type; 1 b
663
+ */
664
+ compressed,
665
+ true,
666
+ "aabbaaaaabab",
667
+ );
668
+ },
669
+
670
+ testClClTreeDeficiency() {
671
+ const compressed = [
672
+ 0x1b, 0x03, 0x00, 0x00, 0x00, 0x01, 0x80, 0x43, 0x01, 0xe0, 0x05, 0x88, 0x55, 0x90, 0x01,
673
+ 0x00, 0x38, 0xd8, 0x32, 0x89, 0x01, 0x12, 0x00, 0x00, 0x77, 0xda, 0x28, 0x40, 0x23,
674
+ ];
675
+ checkSynth(
676
+ /*
677
+ * // This test is a copy of TooManySymbolsRepeated, with changed clcl table.
678
+ * main_header
679
+ * metablock_header_begin: 1, 0, 4, 0
680
+ * metablock_header_trivial_context
681
+ * hskip: 0
682
+ * clcl_ordered: 0,3,0,0,0,0,0,0,3,3,0,0,0,0,0,0,1,0
683
+ * set_prefix_cl_rle: "", "110", "", "", "", "", "", "", "111", "101",\
684
+ * "", "", "", "", "", "", "0", ""
685
+ * cl_rle: 8
686
+ * cl_rle_rep: 9, 96
687
+ * cl_rle: 1
688
+ * cl_rle_rep: 9, 159 // 1 + 96 + 1 + 159 = 257 > 256 = alphabet size
689
+ * huffman_fixed: 704
690
+ * huffman_fixed: 64
691
+ * command_inscopy_easy: 4, 0
692
+ * command_literal_bits: 0, 0, 0, 101100010
693
+ */
694
+ compressed,
695
+ false,
696
+ "aaab",
697
+ );
698
+ },
699
+
700
+ testClClTreeExcess() {
701
+ const compressed = [
702
+ 0x1b, 0x03, 0x00, 0x00, 0x00, 0x01, 0x80, 0xc3, 0x7b, 0x80, 0x58, 0x41, 0x06, 0x00, 0xe0,
703
+ 0x60, 0xcb, 0x24, 0x06, 0x48, 0x00, 0x00, 0xdc, 0x69, 0xa3, 0x00, 0x8d, 0x00,
704
+ ];
705
+ checkSynth(
706
+ /*
707
+ * // This test is a copy of ClClTreeDeficiency, with changed clcl table.
708
+ * main_header
709
+ * metablock_header_begin: 1, 0, 4, 0
710
+ * metablock_header_trivial_context
711
+ * hskip: 0
712
+ * clcl_ordered: 0,3,0,0,0,0,0,0,3,1,0,0,0,0,0,0,1,0
713
+ * set_prefix_cl_rle: "", "110", "", "", "", "", "", "", "111", "1",\
714
+ * "", "", "", "", "", "", "0", ""
715
+ * cl_rle: 8
716
+ * cl_rle_rep: 9, 96
717
+ * cl_rle: 1
718
+ * cl_rle_rep: 9, 159 // 1 + 96 + 1 + 159 = 257 > 256 = alphabet size
719
+ * huffman_fixed: 704
720
+ * huffman_fixed: 64
721
+ * command_inscopy_easy: 4, 0
722
+ * command_literal_bits: 0, 0, 0, 101100010
723
+ */
724
+ compressed,
725
+ false,
726
+ "aaab",
727
+ );
728
+ },
729
+
730
+ testComplexHuffmanCodeTwoSymbols() {
731
+ const compressed = [
732
+ 0x1b, 0x01, 0x00, 0x00, 0x80, 0x03, 0xe0, 0xa2, 0x1a, 0x00, 0x00, 0x0e, 0xb6, 0x4c, 0x62,
733
+ 0x80, 0x04, 0x00, 0xc0, 0x9d, 0x36, 0x12, 0x04,
734
+ ];
735
+ checkSynth(
736
+ /*
737
+ * // This tests a complex Huffman code with only two symbols followed by a
738
+ * // tiny amount of content.
739
+ * main_header
740
+ * metablock_header_begin: 1, 0, 2, 0
741
+ * metablock_header_trivial_context
742
+ * // begin of literal Huffman tree. The tree has symbol length 1 for "a",
743
+ * // symbol length 1 for "b" and symbol length 0 for all others.
744
+ * hskip: 0
745
+ * clcl_ordered: 0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1
746
+ * set_prefix_cl_rle: "", "0", "", "", "", "", "", "", "", "",\
747
+ * "", "", "", "", "", "", "", "1"
748
+ * cl_rle_rep_0: 97
749
+ * cl_rle: 1 // literal number 97, that is, the letter 'a'
750
+ * cl_rle: 1 // literal number 98, that is, the letter 'b'
751
+ * // end of literal Huffman tree
752
+ * huffman_fixed: 704
753
+ * huffman_fixed: 64
754
+ * command_inscopy_easy: 2, 0
755
+ * command_literal_bits: 0, 1 // a followed by b
756
+ */
757
+ compressed,
758
+ true,
759
+ "ab",
760
+ );
761
+ },
762
+
763
+ testCompressedUncompressedShortCompressed() {
764
+ const compressed = [
765
+ 0x8b, 0xfe, 0x01, 0x00, 0x00, 0x00, 0x80, 0xe3, 0xb4, 0x0d, 0x00, 0x00, 0x07, 0x5b, 0x26,
766
+ 0x31, 0x40, 0x02, 0x00, 0xe0, 0x4e, 0x9b, 0x66, 0x6f, 0x1b, 0x0a, 0x50, 0x00, 0x10, 0x62,
767
+ 0x62, 0x62, 0x62, 0x62, 0x62, 0x31, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00,
768
+ 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x24, 0x00,
769
+ ];
770
+ checkSynth(
771
+ /*
772
+ * main_header: 22
773
+ * metablock_header_easy: 1022, 0
774
+ * command_easy: 1021, "a", 1 // 1022 x "a"
775
+ * metablock_uncompressed: "bbbbbb"
776
+ * metablock_header_easy: 4, 1
777
+ * command_easy: 4, "", 1 // 6 + 4 = 10 x "b"
778
+ */
779
+ compressed,
780
+ true,
781
+ times(1022, "a") + times(10, "b"),
782
+ );
783
+ },
784
+
785
+ testCompressedUncompressedShortCompressedSmallWindow() {
786
+ const compressed = [
787
+ 0x21, 0xf4, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xa7, 0x6d, 0x00, 0x00, 0x38, 0xd8, 0x32,
788
+ 0x89, 0x01, 0x12, 0x00, 0x00, 0x77, 0xda, 0x34, 0x7b, 0xdb, 0x50, 0x80, 0x02, 0x80, 0x62,
789
+ 0x62, 0x62, 0x62, 0x62, 0x62, 0x31, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00,
790
+ 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x24, 0x00,
791
+ ];
792
+ checkSynth(
793
+ /*
794
+ * main_header: 10
795
+ * metablock_header_easy: 1022, 0
796
+ * command_easy: 1021, "a", 1 // 1022 x "a"
797
+ * metablock_uncompressed: "bbbbbb"
798
+ * metablock_header_easy: 4, 1
799
+ * command_easy: 4, "", 1 // 6 + 4 = 10 x "b"
800
+ */
801
+ compressed,
802
+ true,
803
+ times(1022, "a") + times(10, "b"),
804
+ );
805
+ },
806
+
807
+ testCopyLengthTooLong() {
808
+ const compressed = [
809
+ 0x1b, 0x01, 0x00, 0x00, 0x00, 0x00, 0x80, 0xe3, 0xb4, 0x0d, 0x00, 0x00, 0x07, 0x5b, 0x26,
810
+ 0x31, 0x40, 0x02, 0x00, 0xe0, 0x4e, 0x1b, 0x11, 0x86, 0x02,
811
+ ];
812
+ checkSynth(
813
+ /*
814
+ * // Has a copy length that goes over the end of the meta-block.
815
+ * // Same as OneCommand, but with a shorter meta-block length.
816
+ * main_header
817
+ * metablock_header_easy: 2, 1
818
+ * command_easy: 2, "a", 1
819
+ */
820
+ compressed,
821
+ false,
822
+ "",
823
+ );
824
+ },
825
+
826
+ testCopyTooLong() {
827
+ const compressed = [
828
+ 0xa1, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xa7, 0x6d, 0x00, 0x00, 0x38, 0xd8, 0x32,
829
+ 0x89, 0x01, 0x12, 0x00, 0x00, 0x77, 0xda, 0x34, 0xab, 0xdb, 0x50, 0x00,
830
+ ];
831
+ checkSynth(
832
+ /*
833
+ * // Has a copy length that goes over the end of the meta-block,
834
+ * // with a ringbuffer wrap.
835
+ * main_header: 10
836
+ * metablock_header_easy: 2, 1
837
+ * command_easy: 1024, "a", 1
838
+ */
839
+ compressed,
840
+ false,
841
+ "",
842
+ );
843
+ },
844
+
845
+ testCustomHuffmanCode() {
846
+ const compressed = [
847
+ 0x1b, 0x03, 0x00, 0x00, 0x00, 0x01, 0x80, 0xc3, 0x3d, 0x80, 0x58, 0x82, 0x08, 0x00, 0xc0,
848
+ 0xc1, 0x96, 0x49, 0x0c, 0x90, 0x00, 0x00, 0xb8, 0xd3, 0x46, 0x01, 0x1a, 0x01,
849
+ ];
850
+ checkSynth(
851
+ /*
852
+ * // This tests a small hand crafted Huffman code followed by a tiny amount
853
+ * // of content. This tests if the bit reader detects the end correctly even
854
+ * // with tiny content after a larger Huffman tree encoding.
855
+ * main_header
856
+ * metablock_header_begin: 1, 0, 4, 0
857
+ * metablock_header_trivial_context
858
+ * // begin of literal Huffman tree. The tree has symbol length 1 for "a",
859
+ * // symbol length 8 for null, symbol length 9 for all others. The length 1
860
+ * // for a is chosen on purpose here, the others must be like that to
861
+ * // fulfill the requirement that sum of 32>>length is 32768.
862
+ * hskip: 0
863
+ * clcl_ordered: 0,3,0,0,0,0,0,0,3,2,0,0,0,0,0,0,1,0
864
+ * set_prefix_cl_rle: "", "110", "", "", "", "", "", "", "111", "10",\
865
+ * "", "", "", "", "", "", "0", ""
866
+ * cl_rle: 8
867
+ * cl_rle_rep: 9, 96
868
+ * cl_rle: 1 // literal number 97, that is, the letter 'a'
869
+ * cl_rle_rep: 9, 158
870
+ * // end of literal Huffman tree
871
+ * huffman_fixed: 704
872
+ * huffman_fixed: 64
873
+ * command_inscopy_easy: 4, 0
874
+ * // Here is how the code "101100010" for b is derived: remember that a has
875
+ * // symbol length 1, null has symbol length 8, the rest 9. So in the
876
+ * // canonical Huffman code, the code for "a" is "0", for null is
877
+ * // "10000000". The next value has "100000010" (cfr. the rules of canonical
878
+ * // prefix code). Counting upwards +95 from there, the value "@" (ASCII 96,
879
+ * // before "a") has "101100001", and so b, the next 9-bit symbol, has the
880
+ * // next binary value "101100010".
881
+ * command_literal_bits: 0, 0, 0, 101100010 // 3 a's followed by a b
882
+ */
883
+ compressed,
884
+ true,
885
+ "aaab",
886
+ );
887
+ },
888
+
889
+ testDistanceLut() {
890
+ const compressed = [
891
+ 0x8b, 0x02, 0x00, 0x00, 0x00, 0x00, 0x80, 0xe3, 0xb4, 0x0d, 0x00, 0x00, 0x07, 0x5b, 0x26,
892
+ 0x31, 0x40, 0x02, 0x00, 0xe0, 0x4e, 0x1b, 0x99, 0x86, 0x46, 0xc6, 0x22, 0x14, 0x00, 0x00,
893
+ 0x03, 0x00, 0x00, 0x1c, 0xa7, 0x6d, 0x00, 0x00, 0x38, 0xd8, 0x32, 0x89, 0x01, 0x12, 0x21,
894
+ 0x91, 0x69, 0x62, 0x6a, 0x36,
895
+ ];
896
+ checkSynth(
897
+ /*
898
+ * main_header
899
+ * metablock_header_easy: 6, 0 // implicit ndirect: 0, 0
900
+ * command_easy: 3, "abc", 3 // Insert "abc", copy "abc"
901
+ * metablock_header_begin: 0, 0, 6, 0
902
+ * vlq_blocktypes: 1 // num litetal block types
903
+ * vlq_blocktypes: 1 // num command block types
904
+ * vlq_blocktypes: 1 // num distance block types
905
+ * ndirect: 3, 0
906
+ * bits: "00" // literal context modes
907
+ * vlq_blocktypes: 1 // num literal Huffman trees
908
+ * // command has no context -> num trees == num block types
909
+ * vlq_blocktypes: 1 // num distance Huffman trees
910
+ * huffman_fixed: 256
911
+ * huffman_fixed: 704
912
+ * huffman_simple: 0,1,67, 18
913
+ * command_inscopy_easy: 3, 3 // Insert 3, copy 3
914
+ * command_literals_easy: "def"
915
+ * // 0-bit Huffman code : dcode = 18 -> third direct distance
916
+ * metablock_lastempty // make sure that no extra distance bits are read
917
+ */
918
+ compressed,
919
+ true,
920
+ "abcabcdefdef",
921
+ );
922
+ },
923
+
924
+ testEmpty() {
925
+ const compressed = [0x3b];
926
+ checkSynth(
927
+ /*
928
+ * main_header
929
+ * metablock_lastempty
930
+ */
931
+ compressed,
932
+ true,
933
+ "",
934
+ );
935
+ },
936
+
937
+ testHelloWorld() {
938
+ const compressed = [
939
+ 0x1b, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x80, 0xe3, 0xb4, 0x0d, 0x00, 0x00, 0x07, 0x5b, 0x26,
940
+ 0x31, 0x40, 0x02, 0x00, 0xe0, 0x4e, 0x9b, 0x00, 0x59, 0x98, 0xda, 0xd8, 0xd8, 0x13, 0xb8,
941
+ 0xdb, 0x3b, 0xd9, 0x98, 0x00,
942
+ ];
943
+ checkSynth(
944
+ /*
945
+ * main_header
946
+ * metablock_fixed: "hello world", 1
947
+ */
948
+ compressed,
949
+ true,
950
+ "hello world",
951
+ );
952
+ },
953
+
954
+ testInsertTooLong() {
955
+ const compressed = [
956
+ 0x1b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xe3, 0xb4, 0x0d, 0x00, 0x00, 0x07, 0x5b, 0x26,
957
+ 0x31, 0x40, 0x02, 0x00, 0xe0, 0x4e, 0x1b, 0x09, 0x86, 0x46,
958
+ ];
959
+ checkSynth(
960
+ /*
961
+ * // Has an insert length that goes over the end of the meta-block.
962
+ * // Same as OneInsert, but with a shorter meta-block length.
963
+ * main_header
964
+ * metablock_header_easy: 1, 1
965
+ * command_easy: 0, "ab"
966
+ */
967
+ compressed,
968
+ false,
969
+ "",
970
+ );
971
+ },
972
+
973
+ testIntactDistanceRingBuffer0() {
974
+ const compressed = [
975
+ 0x1b, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x80, 0xe3, 0xb4, 0x0d, 0x00, 0x00, 0x07, 0x5b, 0x26,
976
+ 0x31, 0x40, 0x02, 0x00, 0xe0, 0x4e, 0x1b, 0xa1, 0x80, 0x20, 0x00,
977
+ ];
978
+ checkSynth(
979
+ /*
980
+ * main_header
981
+ * metablock_header_easy: 11, 1
982
+ * command_inscopy_easy: 0, 7 // "himself" from dictionary
983
+ * bits: "000000" // distance = 4 from RB; RB remains intact
984
+ * command_inscopy_easy: 0, 4 // copy "self"
985
+ * bits: "000000" // distance = 4 from RB; RB remains intact
986
+ */
987
+ compressed,
988
+ true,
989
+ "himselfself",
990
+ );
991
+ },
992
+
993
+ testIntactDistanceRingBuffer1() {
994
+ const compressed = [
995
+ 0x1b, 0x09, 0x00, 0x00, 0x00, 0x00, 0x80, 0xe3, 0xb4, 0x0d, 0x00, 0x00, 0x07, 0x5b, 0x26,
996
+ 0x31, 0x40, 0x02, 0x00, 0xe0, 0x4e, 0x1b, 0x21, 0xa0, 0x20, 0x00,
997
+ ];
998
+ checkSynth(
999
+ /*
1000
+ * main_header
1001
+ * metablock_header_easy: 10, 1
1002
+ * command_inscopy_easy: 0, 6 // "scroll" from dictionary
1003
+ * bits: "100000" // distance = 11 from RB; RB remains intact
1004
+ * command_inscopy_easy: 0, 4 // copy "roll"
1005
+ * bits: "000000" // distance = 4 from RB; RB remains intact
1006
+ */
1007
+ compressed,
1008
+ true,
1009
+ "scrollroll",
1010
+ );
1011
+ },
1012
+
1013
+ testIntactDistanceRingBuffer2() {
1014
+ const compressed = [
1015
+ 0x1b, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x80, 0xe3, 0xb4, 0x0d, 0x00, 0x00, 0x07, 0x5b, 0x26,
1016
+ 0x31, 0x40, 0x02, 0x00, 0xe0, 0x4e, 0x1b, 0x41, 0x80, 0x20, 0x50, 0x10, 0x24, 0x08, 0x06,
1017
+ ];
1018
+ checkSynth(
1019
+ /*
1020
+ * main_header
1021
+ * metablock_header_easy: 16, 1
1022
+ * command_inscopy_easy: 0, 4 // "left" from dictionary (index = 3 = 4 - 1)
1023
+ * bits: "000000" // distance = 4 from RB; RB remains intact
1024
+ * command_inscopy_easy: 0, 4 // "data" from dictionary (index = 6 = 11 - 5)
1025
+ * bits: "100000" // distance = 11 from RB; RB remains intact
1026
+ * command_inscopy_easy: 0, 4 // "data" from dictionary (index = 6 = 15 - 9)
1027
+ * bits: "010000" // distance = 15 from RB; RB remains intact
1028
+ * command_inscopy_easy: 0, 4 // "left" from dictionary (index = 3 = 16 - 13)
1029
+ * bits: "110000" // distance = 16 from RB; RB remains intact
1030
+ */
1031
+ compressed,
1032
+ true,
1033
+ "leftdatadataleft",
1034
+ );
1035
+ },
1036
+
1037
+ testIntactDistanceRingBufferNoDistanceValue0() {
1038
+ const compressed = [
1039
+ 0x1b, 0x17, 0x00, 0x00, 0x00, 0x00, 0x80, 0xe3, 0xb4, 0x0d, 0x00, 0x00, 0x07, 0x5b, 0x26,
1040
+ 0x31, 0x40, 0x02, 0x00, 0xe0, 0x4e, 0x1b, 0x40, 0x82, 0x40, 0x41, 0x90, 0x20, 0x58, 0x18,
1041
+ 0x00,
1042
+ ];
1043
+ checkSynth(
1044
+ /*
1045
+ * main_header
1046
+ * metablock_header_easy: 24, 1
1047
+ * // cmd is {ins_extra, copy_extra, distance_code, ctx, ins_off, copy_off}
1048
+ * // cmd.2 = {0x00, 0x00, 0, 0x02, 0x0000, 0x0004}
1049
+ * // cmd.2 = no insert, copy length = 4, distance_code = 0 (last distance)
1050
+ * command_short: 2 // "left" from dictionary (index = 3 = 4 - 1)
1051
+ * // Check that RB is untouched after the first command...
1052
+ * command_inscopy_easy: 0, 4 // "data" from dictionary (index = 6 = 11 - 5)
1053
+ * bits: "100000" // distance = 11 from RB; RB remains intact
1054
+ * command_inscopy_easy: 0, 4 // "data" from dictionary (index = 6 = 15 - 9)
1055
+ * bits: "010000" // distance = 15 from RB; RB remains intact
1056
+ * command_inscopy_easy: 0, 4 // "left" from dictionary (index = 3 = 16 - 13)
1057
+ * bits: "110000" // distance = 16 from RB; RB remains intact
1058
+ * command_inscopy_easy: 0, 8 // copy "leftleft"
1059
+ * bits: "000000" // distance = 4 from RB; RB remains intact
1060
+ */
1061
+ compressed,
1062
+ true,
1063
+ "leftdatadataleftleftleft",
1064
+ );
1065
+ },
1066
+
1067
+ testIntactDistanceRingBufferNoDistanceValue1() {
1068
+ const compressed = [
1069
+ 0x1b, 0x19, 0x00, 0x00, 0x00, 0x00, 0x80, 0xe3, 0xb4, 0x0d, 0x00, 0x00, 0x07, 0x5b, 0x26,
1070
+ 0x31, 0x40, 0x02, 0x00, 0xe0, 0x4e, 0x1b, 0xc0, 0x82, 0x41, 0x41, 0x90, 0x20, 0x58, 0x18,
1071
+ 0x00,
1072
+ ];
1073
+ checkSynth(
1074
+ /*
1075
+ * main_header
1076
+ * metablock_header_easy: 26, 1
1077
+ * // cmd is {ins_extra, copy_extra, distance_code, ctx, ins_off, copy_off}
1078
+ * // cmd.3 = {0x00, 0x00, 0, 0x03, 0x0000, 0x0005}
1079
+ * // cmd.3 = no insert, copy length = 5, distance_code = 0 (last distance)
1080
+ * command_short: 3 // "world" from dictionary (index = 3 = 4 - 1)
1081
+ * // Check that RB is untouched after the first command...
1082
+ * command_inscopy_easy: 0, 5 // "white" from dictionary (index = 5 = 11 - 6)
1083
+ * bits: "100000" // distance = 11 from RB; RB remains intact
1084
+ * command_inscopy_easy: 0, 4 // "back" from dictionary (index = 4 = 15 - 11)
1085
+ * bits: "010000" // distance = 15 from RB; RB remains intact
1086
+ * command_inscopy_easy: 0, 4 // "down" from dictionary (index = 1 = 16 - 15)
1087
+ * bits: "110000" // distance = 16 from RB; RB remains intact
1088
+ * command_inscopy_easy: 0, 8 // copy "downdown"
1089
+ * bits: "000000" // distance = 4 from RB; RB remains intact
1090
+ */
1091
+ compressed,
1092
+ true,
1093
+ "worldwhitebackdowndowndown",
1094
+ );
1095
+ },
1096
+
1097
+ testInvalidNoLastMetablock() {
1098
+ const compressed = [
1099
+ 0x0b, 0x06, 0x00, 0x00, 0x00, 0x00, 0x80, 0xe3, 0xb4, 0x0d, 0x00, 0x00, 0x07, 0x5b, 0x26,
1100
+ 0x31, 0x40, 0x02, 0x00, 0xe0, 0x4e, 0x9b, 0x00, 0x13, 0x59, 0x98, 0xda, 0xd8, 0xd8, 0x13,
1101
+ 0xb8, 0xdb, 0x3b, 0xd9, 0x98, 0xe8, 0x00,
1102
+ ];
1103
+ checkSynth(
1104
+ /*
1105
+ * main_header
1106
+ * metablock_fixed: \"hello world\", 0
1107
+ */
1108
+ compressed,
1109
+ false,
1110
+ "hello world",
1111
+ );
1112
+ },
1113
+
1114
+ testInvalidNoMetaBlocks() {
1115
+ const compressed = [0x0b];
1116
+ checkSynth(
1117
+ /*
1118
+ * main_header
1119
+ */
1120
+ compressed,
1121
+ false,
1122
+ "",
1123
+ );
1124
+ },
1125
+
1126
+ testInvalidTooFarDist() {
1127
+ const compressed = [
1128
+ 0xa1, 0x48, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xa7, 0x6d, 0x00, 0x00, 0x38, 0xd8, 0x32,
1129
+ 0x89, 0x01, 0x12, 0x00, 0x00, 0x77, 0xda, 0xe8, 0xe0, 0x62, 0x6f, 0x4f, 0x60, 0x66, 0xe8,
1130
+ 0x44, 0x38, 0x0f, 0x09, 0x0d,
1131
+ ];
1132
+ checkSynth(
1133
+ /*
1134
+ * main_header: 10
1135
+ * metablock_header_begin: 1, 0, 10, 0
1136
+ * metablock_header_trivial_context
1137
+ * huffman_fixed: 256
1138
+ * huffman_fixed: 704
1139
+ * huffman_fixed: 64
1140
+ * command_easy: 2, "too far!", 1000000 // distance too far for 10 wbits
1141
+ */
1142
+ compressed,
1143
+ false,
1144
+ "",
1145
+ );
1146
+ },
1147
+
1148
+ testInvalidTooLargeContextMap() {
1149
+ const compressed = [
1150
+ 0x1b, 0x00, 0x00, 0xd1, 0xe1, 0x01, 0xc6, 0xe0, 0xe2, 0x06, 0x00, 0x00, 0x91, 0xb2, 0x70,
1151
+ 0xfe, 0xfb, 0x45, 0x58, 0x88, 0x01, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00,
1152
+ 0xee, 0xb4, 0x11, 0x01,
1153
+ ];
1154
+ checkSynth(
1155
+ /*
1156
+ * // Has a repeat code a context map that makes the size too big -> invalid.
1157
+ * main_header
1158
+ * metablock_header_begin: 1, 0, 1, 0
1159
+ * // two literal block types
1160
+ * vlq_blocktypes: 2
1161
+ * huffman_simple: 1,4,4, 1,0,2,3 // literal blocktype prefix code
1162
+ * huffman_fixed: 26 // literal blockcount prefix code
1163
+ * blockcount_easy: 1
1164
+ * // one ins/copy and dist block type
1165
+ * vlq_blocktypes: 1
1166
+ * vlq_blocktypes: 1
1167
+ * ndirect: 0, 0
1168
+ * // two MSB6 literal context modes
1169
+ * bits: "00", "00"
1170
+ * // two literal prefix codes
1171
+ * vlq_blocktypes: 2
1172
+ * // literal context map
1173
+ * vlq_rlemax: 5
1174
+ * huffman_simple: 0,3,7, 5,0,6 // context map RLE Huffman code
1175
+ * // Too long context map RLE: repeat 0 64 times, 1+5 65 times, that is 129
1176
+ * // values which is 1 too much.
1177
+ * bits: "01", "0", "11111", "11", "11", "0", "11111"
1178
+ * bit: 1 // MTF enabled
1179
+ * // one distance prefix code
1180
+ * vlq_blocktypes: 1
1181
+ * huffman_simple: 0,1,256, 97 // only a's
1182
+ * huffman_simple: 0,1,256, 98 // only b's
1183
+ * huffman_fixed: 704
1184
+ * huffman_fixed: 64
1185
+ * // now comes the data
1186
+ * command_inscopy_easy: 1, 0
1187
+ */
1188
+ compressed,
1189
+ false,
1190
+ "a",
1191
+ );
1192
+ },
1193
+
1194
+ testInvalidTransformType() {
1195
+ const compressed = [
1196
+ 0x1b, 0x03, 0x00, 0x00, 0x00, 0x00, 0x80, 0xe3, 0xb4, 0x0d, 0x00, 0x00, 0x07, 0x5b, 0x26,
1197
+ 0x31, 0x40, 0x02, 0x00, 0xe0, 0x4e, 0x1b, 0x41, 0x2d, 0x01, 0x19,
1198
+ ];
1199
+ checkSynth(
1200
+ /*
1201
+ * main_header
1202
+ * metablock_header_easy: 4, 1
1203
+ * command_inscopy_easy: 0, 4
1204
+ * command_dist_easy: 123905 // = 121 << 10 + 1
1205
+ */
1206
+ compressed,
1207
+ false,
1208
+ "",
1209
+ );
1210
+ },
1211
+
1212
+ testInvalidWindowBits9() {
1213
+ const compressed = [
1214
+ 0x91, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xa7, 0x6d, 0x00, 0x00, 0x38, 0xd8, 0x32,
1215
+ 0x89, 0x01, 0x12, 0x00, 0x00, 0x77, 0xda, 0xc8, 0x20, 0x32, 0xd4, 0x01,
1216
+ ];
1217
+ checkSynth(
1218
+ /*
1219
+ * main_header: 9
1220
+ * metablock_fixed: \"a\", 1
1221
+ */
1222
+ compressed,
1223
+ false,
1224
+ "a",
1225
+ );
1226
+ },
1227
+
1228
+ testManyTinyMetablocks() {
1229
+ const compressed = [
1230
+ 0x0b, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,
1231
+ 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,
1232
+ 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,
1233
+ 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,
1234
+ 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,
1235
+ 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,
1236
+ 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,
1237
+ 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,
1238
+ 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,
1239
+ 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,
1240
+ 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,
1241
+ 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,
1242
+ 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,
1243
+ 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,
1244
+ 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,
1245
+ 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,
1246
+ 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,
1247
+ 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,
1248
+ 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,
1249
+ 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,
1250
+ 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,
1251
+ 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,
1252
+ 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,
1253
+ 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,
1254
+ 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,
1255
+ 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,
1256
+ 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,
1257
+ 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,
1258
+ 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,
1259
+ 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,
1260
+ 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,
1261
+ 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,
1262
+ 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,
1263
+ 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,
1264
+ 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,
1265
+ 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,
1266
+ 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,
1267
+ 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,
1268
+ 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,
1269
+ 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,
1270
+ 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,
1271
+ 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,
1272
+ 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,
1273
+ 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,
1274
+ 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,
1275
+ 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,
1276
+ 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,
1277
+ 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,
1278
+ 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,
1279
+ 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,
1280
+ 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,
1281
+ 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,
1282
+ 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,
1283
+ 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,
1284
+ 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,
1285
+ 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,
1286
+ 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,
1287
+ 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,
1288
+ 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,
1289
+ 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,
1290
+ 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,
1291
+ 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,
1292
+ 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,
1293
+ 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,
1294
+ 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,
1295
+ 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,
1296
+ 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,
1297
+ 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,
1298
+ 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,
1299
+ 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,
1300
+ 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,
1301
+ 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,
1302
+ 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,
1303
+ 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,
1304
+ 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,
1305
+ 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,
1306
+ 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,
1307
+ 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,
1308
+ 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,
1309
+ 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,
1310
+ 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,
1311
+ 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,
1312
+ 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,
1313
+ 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,
1314
+ 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,
1315
+ 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,
1316
+ 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,
1317
+ 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,
1318
+ 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,
1319
+ 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,
1320
+ 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,
1321
+ 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,
1322
+ 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,
1323
+ 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,
1324
+ 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,
1325
+ 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,
1326
+ 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,
1327
+ 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,
1328
+ 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,
1329
+ 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,
1330
+ 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,
1331
+ 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,
1332
+ 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,
1333
+ 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,
1334
+ 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,
1335
+ 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,
1336
+ 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,
1337
+ 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,
1338
+ 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,
1339
+ 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,
1340
+ 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,
1341
+ 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,
1342
+ 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,
1343
+ 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,
1344
+ 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,
1345
+ 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,
1346
+ 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,
1347
+ 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,
1348
+ 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,
1349
+ 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,
1350
+ 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,
1351
+ 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,
1352
+ 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,
1353
+ 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,
1354
+ 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,
1355
+ 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,
1356
+ 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,
1357
+ 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,
1358
+ 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,
1359
+ 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,
1360
+ 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,
1361
+ 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,
1362
+ 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,
1363
+ 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,
1364
+ 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,
1365
+ 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,
1366
+ 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,
1367
+ 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,
1368
+ 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,
1369
+ 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,
1370
+ 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,
1371
+ 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,
1372
+ 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,
1373
+ 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,
1374
+ 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,
1375
+ 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,
1376
+ 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,
1377
+ 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,
1378
+ 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,
1379
+ 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,
1380
+ 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,
1381
+ 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,
1382
+ 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,
1383
+ 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,
1384
+ 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,
1385
+ 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,
1386
+ 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,
1387
+ 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,
1388
+ 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,
1389
+ 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,
1390
+ 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,
1391
+ 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,
1392
+ 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,
1393
+ 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,
1394
+ 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,
1395
+ 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,
1396
+ 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,
1397
+ 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,
1398
+ 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,
1399
+ 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,
1400
+ 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,
1401
+ 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,
1402
+ 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,
1403
+ 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,
1404
+ 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,
1405
+ 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,
1406
+ 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,
1407
+ 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,
1408
+ 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,
1409
+ 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,
1410
+ 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,
1411
+ 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,
1412
+ 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,
1413
+ 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,
1414
+ 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,
1415
+ 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,
1416
+ 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,
1417
+ 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,
1418
+ 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,
1419
+ 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,
1420
+ 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,
1421
+ 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,
1422
+ 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,
1423
+ 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,
1424
+ 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,
1425
+ 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,
1426
+ 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,
1427
+ 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,
1428
+ 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,
1429
+ 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,
1430
+ 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,
1431
+ 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,
1432
+ 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,
1433
+ 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,
1434
+ 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,
1435
+ 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,
1436
+ 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,
1437
+ 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,
1438
+ 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,
1439
+ 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,
1440
+ 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,
1441
+ 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,
1442
+ 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,
1443
+ 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,
1444
+ 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,
1445
+ 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,
1446
+ 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,
1447
+ 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,
1448
+ 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,
1449
+ 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,
1450
+ 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,
1451
+ 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,
1452
+ 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,
1453
+ 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,
1454
+ 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,
1455
+ 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,
1456
+ 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,
1457
+ 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,
1458
+ 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,
1459
+ 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,
1460
+ 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,
1461
+ 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,
1462
+ 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,
1463
+ 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,
1464
+ 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,
1465
+ 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,
1466
+ 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,
1467
+ 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,
1468
+ 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,
1469
+ 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,
1470
+ 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,
1471
+ 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,
1472
+ 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,
1473
+ 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,
1474
+ 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,
1475
+ 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,
1476
+ 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,
1477
+ 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,
1478
+ 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,
1479
+ 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,
1480
+ 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,
1481
+ 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,
1482
+ 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,
1483
+ 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,
1484
+ 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,
1485
+ 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,
1486
+ 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,
1487
+ 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,
1488
+ 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,
1489
+ 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,
1490
+ 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,
1491
+ 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,
1492
+ 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,
1493
+ 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,
1494
+ 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,
1495
+ 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,
1496
+ 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,
1497
+ 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,
1498
+ 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,
1499
+ 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,
1500
+ 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,
1501
+ 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,
1502
+ 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,
1503
+ 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,
1504
+ 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,
1505
+ 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,
1506
+ 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,
1507
+ 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,
1508
+ 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,
1509
+ 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,
1510
+ 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,
1511
+ 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,
1512
+ 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,
1513
+ 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,
1514
+ 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,
1515
+ 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,
1516
+ 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,
1517
+ 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,
1518
+ 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,
1519
+ 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,
1520
+ 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,
1521
+ 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,
1522
+ 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,
1523
+ 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,
1524
+ 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,
1525
+ 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,
1526
+ 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,
1527
+ 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,
1528
+ 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,
1529
+ 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,
1530
+ 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,
1531
+ 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,
1532
+ 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,
1533
+ 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,
1534
+ 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,
1535
+ 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,
1536
+ 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,
1537
+ 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,
1538
+ 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,
1539
+ 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,
1540
+ 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,
1541
+ 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,
1542
+ 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,
1543
+ 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,
1544
+ 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,
1545
+ 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,
1546
+ 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,
1547
+ 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,
1548
+ 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,
1549
+ 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,
1550
+ 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,
1551
+ 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,
1552
+ 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,
1553
+ 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,
1554
+ 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,
1555
+ 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,
1556
+ 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,
1557
+ 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,
1558
+ 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,
1559
+ 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,
1560
+ 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,
1561
+ 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,
1562
+ 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,
1563
+ 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,
1564
+ 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,
1565
+ 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,
1566
+ 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,
1567
+ 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,
1568
+ 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,
1569
+ 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,
1570
+ 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,
1571
+ 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,
1572
+ 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,
1573
+ 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,
1574
+ 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,
1575
+ 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,
1576
+ 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,
1577
+ 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,
1578
+ 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,
1579
+ 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,
1580
+ 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,
1581
+ 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,
1582
+ 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,
1583
+ 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,
1584
+ 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,
1585
+ 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,
1586
+ 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,
1587
+ 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,
1588
+ 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,
1589
+ 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,
1590
+ 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,
1591
+ 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,
1592
+ 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,
1593
+ 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,
1594
+ 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,
1595
+ 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,
1596
+ 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,
1597
+ 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,
1598
+ 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,
1599
+ 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,
1600
+ 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,
1601
+ 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,
1602
+ 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,
1603
+ 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,
1604
+ 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,
1605
+ 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,
1606
+ 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,
1607
+ 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,
1608
+ 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,
1609
+ 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,
1610
+ 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,
1611
+ 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,
1612
+ 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,
1613
+ 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,
1614
+ 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,
1615
+ 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,
1616
+ 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,
1617
+ 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,
1618
+ 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,
1619
+ 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,
1620
+ 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,
1621
+ 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,
1622
+ 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,
1623
+ 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,
1624
+ 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,
1625
+ 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,
1626
+ 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,
1627
+ 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,
1628
+ 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,
1629
+ 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,
1630
+ 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,
1631
+ 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,
1632
+ 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,
1633
+ 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,
1634
+ 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,
1635
+ 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,
1636
+ 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,
1637
+ 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,
1638
+ 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,
1639
+ 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,
1640
+ 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,
1641
+ 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,
1642
+ 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,
1643
+ 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,
1644
+ 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,
1645
+ 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,
1646
+ 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,
1647
+ 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,
1648
+ 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,
1649
+ 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,
1650
+ 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,
1651
+ 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,
1652
+ 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,
1653
+ 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,
1654
+ 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,
1655
+ 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,
1656
+ 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,
1657
+ 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,
1658
+ 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,
1659
+ 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,
1660
+ 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,
1661
+ 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,
1662
+ 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,
1663
+ 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,
1664
+ 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,
1665
+ 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,
1666
+ 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,
1667
+ 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,
1668
+ 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,
1669
+ 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,
1670
+ 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,
1671
+ 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,
1672
+ 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,
1673
+ 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,
1674
+ 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,
1675
+ 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,
1676
+ 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,
1677
+ 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,
1678
+ 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,
1679
+ 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,
1680
+ 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,
1681
+ 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,
1682
+ 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,
1683
+ 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,
1684
+ 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,
1685
+ 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,
1686
+ 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,
1687
+ 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,
1688
+ 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,
1689
+ 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,
1690
+ 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,
1691
+ 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,
1692
+ 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,
1693
+ 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,
1694
+ 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,
1695
+ 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,
1696
+ 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,
1697
+ 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,
1698
+ 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,
1699
+ 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,
1700
+ 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,
1701
+ 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,
1702
+ 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,
1703
+ 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,
1704
+ 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,
1705
+ 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,
1706
+ 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,
1707
+ 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,
1708
+ 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,
1709
+ 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,
1710
+ 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,
1711
+ 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,
1712
+ 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,
1713
+ 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,
1714
+ 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,
1715
+ 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,
1716
+ 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,
1717
+ 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,
1718
+ 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,
1719
+ 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,
1720
+ 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,
1721
+ 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,
1722
+ 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,
1723
+ 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,
1724
+ 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,
1725
+ 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,
1726
+ 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,
1727
+ 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,
1728
+ 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,
1729
+ 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,
1730
+ 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,
1731
+ 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,
1732
+ 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,
1733
+ 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,
1734
+ 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,
1735
+ 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,
1736
+ 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,
1737
+ 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,
1738
+ 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,
1739
+ 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,
1740
+ 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,
1741
+ 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,
1742
+ 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,
1743
+ 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,
1744
+ 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,
1745
+ 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,
1746
+ 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,
1747
+ 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,
1748
+ 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,
1749
+ 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,
1750
+ 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,
1751
+ 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,
1752
+ 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,
1753
+ 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,
1754
+ 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,
1755
+ 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,
1756
+ 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,
1757
+ 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,
1758
+ 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,
1759
+ 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,
1760
+ 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,
1761
+ 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,
1762
+ 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,
1763
+ 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,
1764
+ 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,
1765
+ 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,
1766
+ 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,
1767
+ 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,
1768
+ 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,
1769
+ 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,
1770
+ 0x34,
1771
+ ];
1772
+ checkSynth(
1773
+ /*
1774
+ * main_header
1775
+ * repeat: 300
1776
+ * metablock_uncompressed: "a"
1777
+ * metablock_fixed: "b"
1778
+ * end_repeat
1779
+ * metablock_lastempty
1780
+ */
1781
+ compressed,
1782
+ true,
1783
+ times(300, "ab"),
1784
+ );
1785
+ },
1786
+
1787
+ testNegativeDistance() {
1788
+ const compressed = [
1789
+ 0x1b, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x80, 0xe3, 0xb4, 0x0d, 0x00, 0x00, 0x07, 0x5b, 0x26,
1790
+ 0x31, 0x40, 0x02, 0x00, 0xe0, 0x4e, 0x1b, 0x41, 0x02, 0x01, 0x42, 0x01, 0x42, 0x01, 0x42,
1791
+ 0x01, 0x42, 0x01, 0x42, 0x01, 0x1c,
1792
+ ];
1793
+ checkSynth(
1794
+ /*
1795
+ * main_header
1796
+ * metablock_header_easy: 16, 1
1797
+ * command_inscopy_easy: 0, 4 // time
1798
+ * command_dist_easy: 1
1799
+ * command_inscopy_easy: 0, 2 // me
1800
+ * command_dist_easy: 2
1801
+ * command_inscopy_easy: 0, 2 // me
1802
+ * command_dist_easy: 2
1803
+ * command_inscopy_easy: 0, 2 // me
1804
+ * command_dist_easy: 2
1805
+ * command_inscopy_easy: 0, 2 // me
1806
+ * command_dist_easy: 2
1807
+ * command_inscopy_easy: 0, 2 // me
1808
+ * command_dist_easy: 2 // All rb items are 2 now
1809
+ * command_inscopy_easy: 0, 2
1810
+ * bits: "011100" // 15 -> distance = rb[idx + 2] - 3
1811
+ */
1812
+ compressed,
1813
+ false,
1814
+ "timemememememeXX",
1815
+ );
1816
+ },
1817
+
1818
+ testNegativeRemainingLenBetweenMetablocks() {
1819
+ const compressed = [
1820
+ 0x0b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xe3, 0xb4, 0x0d, 0x00, 0x00, 0x07, 0x5b, 0x26,
1821
+ 0x31, 0x40, 0x02, 0x00, 0xe0, 0x4e, 0x1b, 0x09, 0x86, 0x46, 0x11, 0x00, 0x00, 0x00, 0x00,
1822
+ 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,
1823
+ 0xb4, 0x91, 0x60, 0x68, 0x04,
1824
+ ];
1825
+ checkSynth(
1826
+ /*
1827
+ * main_header
1828
+ * metablock_header_easy: 1, 0
1829
+ * command_easy: 0, "ab" // remaining length == -1 -> invalid stream
1830
+ * metablock_header_easy: 2, 1
1831
+ * command_easy: 0, "ab"
1832
+ */
1833
+ compressed,
1834
+ false,
1835
+ "abab",
1836
+ );
1837
+ },
1838
+
1839
+ testOneCommand() {
1840
+ const compressed = [
1841
+ 0x1b, 0x02, 0x00, 0x00, 0x00, 0x00, 0x80, 0xe3, 0xb4, 0x0d, 0x00, 0x00, 0x07, 0x5b, 0x26,
1842
+ 0x31, 0x40, 0x02, 0x00, 0xe0, 0x4e, 0x1b, 0x11, 0x86, 0x02,
1843
+ ];
1844
+ checkSynth(
1845
+ /*
1846
+ * // The stream consists of one command with insert and copy.
1847
+ * main_header
1848
+ * metablock_header_easy: 3, 1
1849
+ * command_easy: 2, "a", 1
1850
+ */
1851
+ compressed,
1852
+ true,
1853
+ "aaa",
1854
+ );
1855
+ },
1856
+
1857
+ testOneInsert() {
1858
+ const compressed = [
1859
+ 0x1b, 0x01, 0x00, 0x00, 0x00, 0x00, 0x80, 0xe3, 0xb4, 0x0d, 0x00, 0x00, 0x07, 0x5b, 0x26,
1860
+ 0x31, 0x40, 0x02, 0x00, 0xe0, 0x4e, 0x1b, 0x09, 0x86, 0x46,
1861
+ ];
1862
+ checkSynth(
1863
+ /*
1864
+ * // The stream consists of one half command with insert only.
1865
+ * main_header
1866
+ * metablock_header_easy: 2, 1
1867
+ * command_easy: 0, "ab"
1868
+ */
1869
+ compressed,
1870
+ true,
1871
+ "ab",
1872
+ );
1873
+ },
1874
+
1875
+ testPeculiarWrap() {
1876
+ const compressed = [
1877
+ 0x21, 0xfc, 0x1f, 0x00, 0x00, 0xa1, 0x12, 0x82, 0x04, 0x60, 0x1d, 0x00, 0xca, 0xfe, 0xba,
1878
+ 0xbe, 0xde, 0xad, 0xbe, 0xef, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00,
1879
+ 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x91, 0x61, 0x68, 0x64,
1880
+ 0x0c,
1881
+ ];
1882
+ checkSynth(
1883
+ /*
1884
+ * main_header: 10
1885
+ * // See ZeroCostCommand
1886
+ * metablock_header_begin: 0, 0, 2048, 0
1887
+ * metablock_header_trivial_context
1888
+ * huffman_simple: 0,1,256, 42
1889
+ * huffman_simple: 0,1,704, 130
1890
+ * huffman_simple: 0,1,64, 0
1891
+ * // Metadata block; at least 8 bytes long
1892
+ * bits: "0", "11", "0", "01", "00000111"
1893
+ * byte_boundary
1894
+ * bits: "11001010", "11111110", "10111010", "10111110"
1895
+ * bits: "11011110", "10101101", "10111110", "11101111"
1896
+ * metablock_header_easy: 3, 1
1897
+ * command_easy: 0, "abc", 0
1898
+ */
1899
+ compressed,
1900
+ true,
1901
+ times(512, "left") + "abc",
1902
+ );
1903
+ },
1904
+
1905
+ testSimplePrefix() {
1906
+ const compressed = [
1907
+ 0x1b, 0x03, 0x00, 0x00, 0xa0, 0xc3, 0xc4, 0xc6, 0xc8, 0x02, 0x00, 0x70, 0xb0, 0x65, 0x12,
1908
+ 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x51, 0xa0, 0x1d,
1909
+ ];
1910
+ checkSynth(
1911
+ /*
1912
+ * main_header
1913
+ * metablock_header_begin: 1, 0, 4, 0
1914
+ * metablock_header_trivial_context
1915
+ * huffman_simple: 1,4,256, 97,98,99,100 // ASCII codes for a, b, c, d
1916
+ * huffman_fixed: 704
1917
+ * huffman_fixed: 64
1918
+ * command_inscopy_easy: 4, 0
1919
+ * command_literal_bits: 0, 10, 110, 111 // a, b, c, d
1920
+ */
1921
+ compressed,
1922
+ true,
1923
+ "abcd",
1924
+ );
1925
+ },
1926
+
1927
+ testSimplePrefixDuplicateSymbols() {
1928
+ const compressed = [
1929
+ 0x1b, 0x03, 0x00, 0x00, 0xa0, 0xc3, 0xc4, 0xc2, 0xc4, 0x02, 0x00, 0x70, 0xb0, 0x65, 0x12,
1930
+ 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x51, 0xa0, 0x1d,
1931
+ ];
1932
+ checkSynth(
1933
+ /*
1934
+ * main_header
1935
+ * metablock_header_begin: 1, 0, 4, 0
1936
+ * metablock_header_trivial_context
1937
+ * huffman_simple: 1,4,256, 97,98,97,98 // ASCII codes for a, b, a, b
1938
+ * huffman_fixed: 704
1939
+ * huffman_fixed: 64
1940
+ * command_inscopy_easy: 4, 0
1941
+ * command_literal_bits: 0, 10, 110, 111 // a, b, a, b
1942
+ */
1943
+ compressed,
1944
+ false,
1945
+ "abab",
1946
+ );
1947
+ },
1948
+
1949
+ testSimplePrefixOutOfRangeSymbols() {
1950
+ const compressed = [
1951
+ 0x1b, 0x03, 0x00, 0x00, 0x00, 0x00, 0x80, 0xe3, 0xb4, 0x4d, 0xff, 0xef, 0x7f, 0xff, 0xfc,
1952
+ 0x07, 0x00, 0xb8, 0xd3, 0x06,
1953
+ ];
1954
+ checkSynth(
1955
+ /*
1956
+ * main_header
1957
+ * metablock_header_begin: 1, 0, 4, 0
1958
+ * metablock_header_trivial_context
1959
+ * huffman_fixed: 256
1960
+ * huffman_simple: 1,4,704, 1023,1022,1021,1020
1961
+ * huffman_fixed: 64
1962
+ */
1963
+ compressed,
1964
+ false,
1965
+ "",
1966
+ );
1967
+ },
1968
+
1969
+ testSimplePrefixPlusExtraData() {
1970
+ // Test skipped - requires 'pending' implementation from original framework
1971
+ return;
1972
+ },
1973
+
1974
+ testStressReadDistanceExtraBits() {
1975
+ const compressed = [
1976
+ 0x4f, 0xfe, 0xff, 0x3f, 0x00, 0x00, 0x00, 0x80, 0xe3, 0xb4, 0x0d, 0x00, 0x00, 0x07, 0x5b,
1977
+ 0x26, 0x31, 0x40, 0x02, 0x00, 0xe0, 0x4e, 0x9b, 0xf6, 0x69, 0xef, 0xff, 0x0c, 0x8d, 0x8c,
1978
+ 0x05, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,
1979
+ 0x12, 0x03, 0x24, 0xa8, 0xaa, 0xef, 0xab, 0xaa, 0x7f, 0x24, 0x16, 0x35, 0x8f, 0xac, 0x9e,
1980
+ 0x3d, 0xf7, 0xf3, 0xe3, 0x0a, 0xfc, 0xff, 0x03, 0x00, 0x00, 0x78, 0x01, 0x08, 0x30, 0x31,
1981
+ 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x30,
1982
+ 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46,
1983
+ 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x41, 0x42, 0x43, 0x44, 0x45,
1984
+ 0x46, 0x03,
1985
+ ];
1986
+ checkSynth(
1987
+ /*
1988
+ * main_header: 24
1989
+ * metablock_header_easy: 8388605, 0 // 2^23 - 3 = shortest 22-bit distance
1990
+ * command_easy: 8388602, "abc", 1
1991
+ * metablock_header_begin: 0, 0, 3, 0
1992
+ * vlq_blocktypes: 1 // num litetal block types
1993
+ * vlq_blocktypes: 1 // num command block types
1994
+ * vlq_blocktypes: 1 // num distance block types
1995
+ * ndirect: 0, 0
1996
+ * bits: "00" // literal context modes
1997
+ * vlq_blocktypes: 1 // num literal Huffman trees
1998
+ * // command has no context -> num trees == num block types
1999
+ * vlq_blocktypes: 1 // num distance Huffman trees
2000
+ * huffman_fixed: 256
2001
+ * huffman_fixed: 704
2002
+ * // Begin of distance Huffman tree. First 15 codes have lengths 1 to 15.
2003
+ * // Symbol that corresponds to first half of 22-bit distance range is also
2004
+ * // 15. All other symbols are 0.
2005
+ * hskip: 0
2006
+ * clcl_ordered: 4,4,4,4, 4,4,4,4, 4,4,4,4, 4,4, 5,5,5,5
2007
+ * set_prefix_cl_rle: "0000", "0001", "0010", "0011", \
2008
+ * "0100", "0101", "0110", "0111", \
2009
+ * "1000", "1001", "1010", "1011", \
2010
+ * "1100", "1101", \
2011
+ * "11100", "11101", "11110", "11111"
2012
+ * cl_rle: 1
2013
+ * cl_rle: 2
2014
+ * cl_rle: 3
2015
+ * cl_rle: 4
2016
+ * cl_rle: 5
2017
+ * cl_rle: 6
2018
+ * cl_rle: 7
2019
+ * cl_rle: 8
2020
+ * cl_rle: 9
2021
+ * cl_rle: 10
2022
+ * cl_rle: 11
2023
+ * cl_rle: 12
2024
+ * cl_rle: 13
2025
+ * cl_rle: 14
2026
+ * cl_rle: 15
2027
+ * cl_rle_rep_0: 43
2028
+ * cl_rle: 15 // literal number 97, that is, the letter 'a'
2029
+ * // end of literal Huffman tree
2030
+ * command_inscopy_easy: 0, 3 // Insert 0, copy 3
2031
+ * // 15 bits of distance code plus 22 extra bits
2032
+ * command_dist_bits: "111111111111111", "0000000000000000000000"
2033
+ * metablock_uncompressed: "0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF"
2034
+ * metablock_lastempty
2035
+ */
2036
+ compressed,
2037
+ true,
2038
+ "abc" + times(8388602, "c") + "abc" + times(3, "0123456789ABCDEF"),
2039
+ );
2040
+ },
2041
+
2042
+ testTooManySymbolsRepeated() {
2043
+ const compressed = [
2044
+ 0x1b, 0x03, 0x00, 0x00, 0x00, 0x01, 0x80, 0xc3, 0x3d, 0x80, 0x58, 0x82, 0x0c, 0x00, 0xc0,
2045
+ 0xc1, 0x96, 0x49, 0x0c, 0x90, 0x00, 0x00, 0xb8, 0xd3, 0x46, 0x01, 0x1a, 0x01,
2046
+ ];
2047
+ checkSynth(
2048
+ /*
2049
+ * // This test is a copy of CustomHuffmanCode, with changed repeat count.
2050
+ * main_header
2051
+ * metablock_header_begin: 1, 0, 4, 0
2052
+ * metablock_header_trivial_context
2053
+ * hskip: 0
2054
+ * clcl_ordered: 0,3,0,0,0,0,0,0,3,2,0,0,0,0,0,0,1,0
2055
+ * set_prefix_cl_rle: "", "110", "", "", "", "", "", "", "111", "10",\
2056
+ * "", "", "", "", "", "", "0", ""
2057
+ * cl_rle: 8
2058
+ * cl_rle_rep: 9, 96
2059
+ * cl_rle: 1
2060
+ * cl_rle_rep: 9, 159 // 1 + 96 + 1 + 159 = 257 > 256 = alphabet size
2061
+ * huffman_fixed: 704
2062
+ * huffman_fixed: 64
2063
+ * command_inscopy_easy: 4, 0
2064
+ * command_literal_bits: 0, 0, 0, 101100010
2065
+ */
2066
+ compressed,
2067
+ false,
2068
+ "aaab",
2069
+ );
2070
+ },
2071
+
2072
+ testTransformedDictWord() {
2073
+ const compressed = [
2074
+ 0x1b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x80, 0xe3, 0xb4, 0x0d, 0x00, 0x00, 0x07, 0x5b, 0x26,
2075
+ 0x31, 0x40, 0x02, 0x00, 0xe0, 0x4e, 0x1b, 0x41, 0x09, 0x01, 0x01,
2076
+ ];
2077
+ checkSynth(
2078
+ /*
2079
+ * // The stream consists of a transformed dictionary word.
2080
+ * main_header
2081
+ * metablock_header_easy: 9, 1
2082
+ * command_inscopy_easy: 0, 4
2083
+ * command_dist_easy: 5121 // 5 << 10 + 1
2084
+ */
2085
+ compressed,
2086
+ true,
2087
+ "time the ",
2088
+ );
2089
+ },
2090
+
2091
+ testTransformedDictWordTooLong() {
2092
+ const compressed = [
2093
+ 0x1b, 0x03, 0x00, 0x00, 0x00, 0x00, 0x80, 0xe3, 0xb4, 0x0d, 0x00, 0x00, 0x07, 0x5b, 0x26,
2094
+ 0x31, 0x40, 0x02, 0x00, 0xe0, 0x4e, 0x1b, 0x41, 0x09, 0x01, 0x01,
2095
+ ];
2096
+ checkSynth(
2097
+ /*
2098
+ * // Has a transformed dictionary word that goes over the end of the
2099
+ * // meta-block, but the base dictionary word fits in the meta-block.
2100
+ * // Same as TransformedDictWord, but with a shorter meta-block length.
2101
+ * main_header
2102
+ * metablock_header_easy: 4, 1
2103
+ * command_inscopy_easy: 0, 4
2104
+ * command_dist_easy: 5121 // 5 << 10 + 1
2105
+ */
2106
+ compressed,
2107
+ false,
2108
+ "",
2109
+ );
2110
+ },
2111
+
2112
+ testZeroCostCommand() {
2113
+ const compressed = [0xa1, 0xf8, 0x1f, 0x00, 0x00, 0xa1, 0x12, 0x82, 0x04, 0x00];
2114
+ checkSynth(
2115
+ /*
2116
+ * main_header: 10
2117
+ * metablock_header_begin: 1, 0, 1024, 0 // last, not empty, length, compressed
2118
+ * metablock_header_trivial_context
2119
+ * huffman_simple: 0,1,256, 42 // literal: any
2120
+ * huffman_simple: 0,1,704, 130 // command: insert = 0, copy = 4, distance_code = -1
2121
+ * huffman_simple: 0,1,64, 0 // distance: last
2122
+ * // 256 0-bit commands with direct distances
2123
+ */
2124
+ compressed,
2125
+ true,
2126
+ times(256, "left"),
2127
+ );
2128
+ },
2129
+
2130
+ testZeroCostLiterals() {
2131
+ const compressed = [
2132
+ 0x9b, 0xff, 0xff, 0xff, 0x00, 0x20, 0x54, 0x00, 0x00, 0x38, 0xd8, 0x32, 0x89, 0x01, 0x12,
2133
+ 0x00, 0x00, 0x77, 0xda, 0xcc, 0xe1, 0x7b, 0xfa, 0x0f,
2134
+ ];
2135
+ checkSynth(
2136
+ /*
2137
+ * main_header
2138
+ * metablock_header_begin: 1, 0, 16777216, 0
2139
+ * metablock_header_trivial_context
2140
+ * huffman_simple: 0,1,256, 42 // Single symbol alphabet
2141
+ * huffman_fixed: 704
2142
+ * huffman_fixed: 64
2143
+ * command_inscopy_easy: 16777216, 0
2144
+ * // 16777216 times 0 bits
2145
+ */
2146
+ compressed,
2147
+ true,
2148
+ times(16777216, "*"),
2149
+ );
2150
+ },
2151
+
2152
+ /* GENERATED CODE END */
2153
+ };
2154
+
2155
+ const skippedTests = ["testSimplePrefixPlusExtraData"];
2156
+ const testNames = Object.keys(allTests);
2157
+ for (let i = 0; i < testNames.length; ++i) {
2158
+ const testName = testNames[i] as keyof typeof allTests;
2159
+ test.skipIf(skippedTests.includes(testName))(testName, allTests[testName]);
2160
+ }
2161
+ });
2162
+
2163
+ test("compatibility node:zlib#brotli", async () => {
2164
+ const binary = await readFile("../dist/brotli.js");
2165
+ const data = zlib.brotliCompressSync(binary.slice(0, 1024 * 4));
2166
+ const result = brotli.decode(new Int8Array(data));
2167
+ const expected = zlib.brotliDecompressSync(data);
2168
+ expect(Buffer.from(result!)).toStrictEqual(expected);
2169
+ });
2170
+
2171
+ test("performance", async () => {
2172
+ const data = await readFile("brotli.test.file.br"); // brotli ./brotli.test.file
2173
+ if (!Buffer.isBuffer(data)) throw new Error("not a buffer");
2174
+ const bytes = new Int8Array(data);
2175
+
2176
+ function runOperation(repeat = 10, iterations = 10) {
2177
+ const start = performance.now();
2178
+
2179
+ for (let i = 0; i < iterations; ++i) {
2180
+ const a = performance.now();
2181
+ let result: Int8Array<ArrayBufferLike> = new Int8Array();
2182
+ for (let j = 0; j < repeat; ++j) {
2183
+ result = brotli.decode(bytes);
2184
+ }
2185
+ const b = performance.now();
2186
+ const _total_length = (repeat * result.length) / (1024 * 1024);
2187
+ const _total_time = (b - a) / 1000;
2188
+ }
2189
+
2190
+ const end = performance.now();
2191
+ return end - start;
2192
+ }
2193
+
2194
+ const timeTaken = runOperation();
2195
+ expect(timeTaken).toBeLessThan(1_000);
2196
+ });
2197
+ });