@secrecy/lib 1.0.0-dev.64 → 1.0.0-dev.66

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 (196) hide show
  1. package/dist/BaseClient-7c38f650.d.ts +351 -0
  2. package/dist/BaseClient.cjs +2 -0
  3. package/dist/BaseClient.cjs.map +1 -0
  4. package/dist/BaseClient.d.ts +16 -104
  5. package/dist/BaseClient.js +2 -430
  6. package/dist/BaseClient.js.map +1 -0
  7. package/dist/PopupTools.cjs +2 -0
  8. package/dist/PopupTools.cjs.map +1 -0
  9. package/dist/PopupTools.d.ts +5 -4
  10. package/dist/PopupTools.js +2 -196
  11. package/dist/PopupTools.js.map +1 -0
  12. package/dist/ZeusThunder.cjs +2 -0
  13. package/dist/ZeusThunder.cjs.map +1 -0
  14. package/dist/ZeusThunder.d.ts +6 -2
  15. package/dist/ZeusThunder.js +2 -65
  16. package/dist/ZeusThunder.js.map +1 -0
  17. package/dist/cache.cjs +2 -0
  18. package/dist/cache.cjs.map +1 -0
  19. package/dist/cache.d.ts +22 -4
  20. package/dist/cache.js +2 -4
  21. package/dist/cache.js.map +1 -0
  22. package/dist/chunk-5WPCTUWH.cjs +2 -0
  23. package/dist/chunk-5WPCTUWH.cjs.map +1 -0
  24. package/dist/chunk-KMTF2BZE.js +2 -0
  25. package/dist/chunk-KMTF2BZE.js.map +1 -0
  26. package/dist/client/SecrecyAppClient.cjs +2 -0
  27. package/dist/client/SecrecyAppClient.cjs.map +1 -0
  28. package/dist/client/SecrecyAppClient.d.ts +16 -17
  29. package/dist/client/SecrecyAppClient.js +2 -227
  30. package/dist/client/SecrecyAppClient.js.map +1 -0
  31. package/dist/client/SecrecyCloudClient.cjs +2 -0
  32. package/dist/client/SecrecyCloudClient.cjs.map +1 -0
  33. package/dist/client/SecrecyCloudClient.d.ts +16 -89
  34. package/dist/client/SecrecyCloudClient.js +2 -1411
  35. package/dist/client/SecrecyCloudClient.js.map +1 -0
  36. package/dist/client/SecrecyDbClient.cjs +2 -0
  37. package/dist/client/SecrecyDbClient.cjs.map +1 -0
  38. package/dist/client/SecrecyDbClient.d.ts +16 -21
  39. package/dist/client/SecrecyDbClient.js +2 -177
  40. package/dist/client/SecrecyDbClient.js.map +1 -0
  41. package/dist/client/SecrecyMailClient.cjs +2 -0
  42. package/dist/client/SecrecyMailClient.cjs.map +1 -0
  43. package/dist/client/SecrecyMailClient.d.ts +16 -42
  44. package/dist/client/SecrecyMailClient.js +2 -1022
  45. package/dist/client/SecrecyMailClient.js.map +1 -0
  46. package/dist/client/SecrecyPayClient.cjs +2 -0
  47. package/dist/client/SecrecyPayClient.cjs.map +1 -0
  48. package/dist/client/SecrecyPayClient.d.ts +16 -7
  49. package/dist/client/SecrecyPayClient.js +2 -36
  50. package/dist/client/SecrecyPayClient.js.map +1 -0
  51. package/dist/client/SecrecyWalletClient.cjs +2 -0
  52. package/dist/client/SecrecyWalletClient.cjs.map +1 -0
  53. package/dist/client/SecrecyWalletClient.d.ts +16 -30
  54. package/dist/client/SecrecyWalletClient.js +2 -73
  55. package/dist/client/SecrecyWalletClient.js.map +1 -0
  56. package/dist/client/convert/file.cjs +2 -0
  57. package/dist/client/convert/file.cjs.map +1 -0
  58. package/dist/client/convert/file.d.ts +11 -5
  59. package/dist/client/convert/file.js +2 -33
  60. package/dist/client/convert/file.js.map +1 -0
  61. package/dist/client/convert/mail.cjs +2 -0
  62. package/dist/client/convert/mail.cjs.map +1 -0
  63. package/dist/client/convert/mail.d.ts +13 -3
  64. package/dist/client/convert/mail.js +2 -43
  65. package/dist/client/convert/mail.js.map +1 -0
  66. package/dist/client/convert/node.cjs +2 -0
  67. package/dist/client/convert/node.cjs.map +1 -0
  68. package/dist/client/convert/node.d.ts +18 -9
  69. package/dist/client/convert/node.js +2 -88
  70. package/dist/client/convert/node.js.map +1 -0
  71. package/dist/client/helpers.cjs +2 -0
  72. package/dist/client/helpers.cjs.map +1 -0
  73. package/dist/client/helpers.d.ts +16 -28
  74. package/dist/client/helpers.js +2 -113
  75. package/dist/client/helpers.js.map +1 -0
  76. package/dist/client/index.cjs +2 -0
  77. package/dist/client/index.cjs.map +1 -0
  78. package/dist/client/index.d.ts +16 -34
  79. package/dist/client/index.js +2 -46
  80. package/dist/client/index.js.map +1 -0
  81. package/dist/client/storage.cjs +2 -0
  82. package/dist/client/storage.cjs.map +1 -0
  83. package/dist/client/storage.d.ts +6 -3
  84. package/dist/client/storage.js +2 -12
  85. package/dist/client/storage.js.map +1 -0
  86. package/dist/client/types/File.cjs +1 -0
  87. package/dist/client/types/File.cjs.map +1 -0
  88. package/dist/client/types/File.d.ts +9 -5
  89. package/dist/client/types/File.js +1 -3
  90. package/dist/client/types/File.js.map +1 -0
  91. package/dist/client/types/Inputs.cjs +1 -0
  92. package/dist/client/types/Inputs.cjs.map +1 -0
  93. package/dist/client/types/Inputs.d.ts +6 -4
  94. package/dist/client/types/Inputs.js +1 -3
  95. package/dist/client/types/Inputs.js.map +1 -0
  96. package/dist/client/types/Node.cjs +1 -0
  97. package/dist/client/types/Node.cjs.map +1 -0
  98. package/dist/client/types/Node.d.ts +9 -56
  99. package/dist/client/types/Node.js +1 -3
  100. package/dist/client/types/Node.js.map +1 -0
  101. package/dist/client/types/UserAppNotifications.cjs +1 -0
  102. package/dist/client/types/UserAppNotifications.cjs.map +1 -0
  103. package/dist/client/types/UserAppNotifications.d.ts +3 -1
  104. package/dist/client/types/UserAppNotifications.js +1 -3
  105. package/dist/client/types/UserAppNotifications.js.map +1 -0
  106. package/dist/client/types/UserAppSettings.cjs +1 -0
  107. package/dist/client/types/UserAppSettings.cjs.map +1 -0
  108. package/dist/client/types/UserAppSettings.d.ts +3 -1
  109. package/dist/client/types/UserAppSettings.js +1 -3
  110. package/dist/client/types/UserAppSettings.js.map +1 -0
  111. package/dist/client/types/index.cjs +2 -0
  112. package/dist/client/types/index.cjs.map +1 -0
  113. package/dist/client/types/index.d.ts +86 -30
  114. package/dist/client/types/index.js +2 -8
  115. package/dist/client/types/index.js.map +1 -0
  116. package/dist/client/types/selectors.cjs +2 -0
  117. package/dist/client/types/selectors.cjs.map +1 -0
  118. package/dist/client/types/selectors.d.ts +7 -5
  119. package/dist/client/types/selectors.js +2 -135
  120. package/dist/client/types/selectors.js.map +1 -0
  121. package/dist/crypto/file.cjs +2 -0
  122. package/dist/crypto/file.cjs.map +1 -0
  123. package/dist/crypto/file.d.ts +8 -6
  124. package/dist/crypto/file.js +2 -195
  125. package/dist/crypto/file.js.map +1 -0
  126. package/dist/crypto/index.cjs +2 -0
  127. package/dist/crypto/index.cjs.map +1 -0
  128. package/dist/crypto/index.d.ts +11 -9
  129. package/dist/crypto/index.js +2 -45
  130. package/dist/crypto/index.js.map +1 -0
  131. package/dist/error.cjs +1 -0
  132. package/dist/error.cjs.map +1 -0
  133. package/dist/error.d.ts +15 -10
  134. package/dist/error.js +1 -3
  135. package/dist/error.js.map +1 -0
  136. package/dist/index.cjs +2 -0
  137. package/dist/index.cjs.map +1 -0
  138. package/dist/index.d.ts +19 -11
  139. package/dist/index.js +2 -9
  140. package/dist/index.js.map +1 -0
  141. package/dist/minify/index.cjs +2 -0
  142. package/dist/minify/index.cjs.map +1 -0
  143. package/dist/minify/index.d.ts +4 -2
  144. package/dist/minify/index.js +2 -23
  145. package/dist/minify/index.js.map +1 -0
  146. package/dist/minify/lz4.cjs +3 -0
  147. package/dist/minify/lz4.cjs.map +1 -0
  148. package/dist/minify/lz4.d.ts +7 -5
  149. package/dist/minify/lz4.js +3 -539
  150. package/dist/minify/lz4.js.map +1 -0
  151. package/dist/sodium.cjs +2 -0
  152. package/dist/sodium.cjs.map +1 -0
  153. package/dist/sodium.d.ts +5 -3
  154. package/dist/sodium.js +2 -6
  155. package/dist/sodium.js.map +1 -0
  156. package/dist/utils/store-buddy.cjs +2 -0
  157. package/dist/utils/store-buddy.cjs.map +1 -0
  158. package/dist/utils/store-buddy.d.ts +4 -3
  159. package/dist/utils/store-buddy.js +2 -58
  160. package/dist/utils/store-buddy.js.map +1 -0
  161. package/dist/utils/time.cjs +2 -0
  162. package/dist/utils/time.cjs.map +1 -0
  163. package/dist/utils/time.d.ts +4 -2
  164. package/dist/utils/time.js +2 -12
  165. package/dist/utils/time.js.map +1 -0
  166. package/dist/utils/utils.cjs +2 -0
  167. package/dist/utils/utils.cjs.map +1 -0
  168. package/dist/utils/utils.d.ts +6 -4
  169. package/dist/utils/utils.js +2 -47
  170. package/dist/utils/utils.js.map +1 -0
  171. package/dist/worker/md5.cjs +2 -0
  172. package/dist/worker/md5.cjs.map +1 -0
  173. package/dist/worker/md5.d.ts +3 -1
  174. package/dist/worker/md5.js +2 -24
  175. package/dist/worker/md5.js.map +1 -0
  176. package/dist/worker/sodium.cjs +2 -0
  177. package/dist/worker/sodium.cjs.map +1 -0
  178. package/dist/worker/sodium.d.ts +6 -3
  179. package/dist/worker/sodium.js +2 -118
  180. package/dist/worker/sodium.js.map +1 -0
  181. package/dist/worker/workerCodes.cjs +254 -0
  182. package/dist/worker/workerCodes.cjs.map +1 -0
  183. package/dist/worker/workerCodes.d.ts +4 -2
  184. package/dist/worker/workerCodes.js +4 -5
  185. package/dist/worker/workerCodes.js.map +1 -0
  186. package/dist/zeus/const.cjs +2 -0
  187. package/dist/zeus/const.cjs.map +1 -0
  188. package/dist/zeus/const.d.ts +5 -3
  189. package/dist/zeus/const.js +2 -1287
  190. package/dist/zeus/const.js.map +1 -0
  191. package/dist/zeus/index.cjs +5 -0
  192. package/dist/zeus/index.cjs.map +1 -0
  193. package/dist/zeus/index.d.ts +2215 -116
  194. package/dist/zeus/index.js +5 -562
  195. package/dist/zeus/index.js.map +1 -0
  196. package/package.json +21 -21
@@ -1,539 +1,3 @@
1
- // lz4-ts @license BSD-3-Clause / Copyright (c) 2015, Pierre Curto / 2016, oov. All rights reserved.
2
- /**
3
- * Copyright (c) 2015, Pierre Curto
4
- * Copyright (c) 2016, oov
5
- * All rights reserved.
6
- *
7
- * Redistribution and use in source and binary forms, with or without
8
- * modification, are permitted provided that the following conditions are met:
9
- *
10
- * * Redistributions of source code must retain the above copyright notice, this
11
- * list of conditions and the following disclaimer.
12
- *
13
- * * Redistributions in binary form must reproduce the above copyright notice,
14
- * this list of conditions and the following disclaimer in the documentation
15
- * and/or other materials provided with the distribution.
16
- *
17
- * * Neither the name of xxHash nor the names of its
18
- * contributors may be used to endorse or promote products derived from
19
- * this software without specific prior written permission.
20
- *
21
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
22
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
23
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
24
- * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
25
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
26
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
27
- * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
28
- * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
29
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
30
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31
- */
32
-
33
- const errInvalidSource = new Error("invalid source");
34
- const errShortBuffer = new Error("short buffer");
35
-
36
- // The following constants are used to setup the compression algorithm.
37
- const minMatch = 4; // the minimum size of the match sequence size (4 bytes)
38
- const winSizeLog = 16; // LZ4 64Kb window size limit
39
- const winSize = 1 << winSizeLog;
40
- const winMask = winSize - 1; // 64Kb window of previous data for dependent blocks
41
-
42
- // hashSizeLog determines the size of the hash table used to quickly find a previous match position.
43
- // Its value influences the compression speed and memory usage, the lower the faster,
44
- // but at the expense of the compression ratio.
45
- // 16 seems to be the best compromise.
46
- const hashSizeLog = 16;
47
- const hashSize = 1 << hashSizeLog;
48
- const hashShift = minMatch * 8 - hashSizeLog;
49
- const mfLimit = 8 + minMatch; // The last match cannot start within the last 12 bytes.
50
- const skipStrength = 6; // variable step for fast scan
51
-
52
- const hasher = 2654435761 | 0; // prime number used to hash minMatch
53
-
54
- // https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Math/imul#Polyfill
55
- function imulPolyfill(a, b) {
56
- const ah = a >>> 16 & 0xffff;
57
- const al = a & 0xffff;
58
- const bh = b >>> 16 & 0xffff;
59
- const bl = b & 0xffff;
60
- // the shift by 0 fixes the sign on the high part
61
- // the final |0 converts the unsigned value into a signed value
62
- return al * bl + (ah * bl + al * bh << 16 >>> 0) | 0;
63
- }
64
- const imul = Math.imul ? Math.imul : imulPolyfill;
65
- function getUint32(a, i) {
66
- return a[i + 3] | a[i + 2] << 8 | a[i + 1] << 16 | a[i] << 24;
67
- }
68
- function copy(dest, src, di, si, len) {
69
- for (let i = 0; i < len; ++i) {
70
- dest[di++] = src[si++];
71
- }
72
- }
73
- export function calcUncompressedLen(src) {
74
- const sn = src.length;
75
- if (sn === 0) {
76
- return 0;
77
- }
78
- let si = 0;
79
- let di = 0;
80
- while (true) {
81
- // literals and match lengths (token)
82
- let lLen = src[si] >> 4;
83
- let mLen = src[si] & 0xf;
84
- if (++si === sn) {
85
- throw errInvalidSource;
86
- }
87
-
88
- // literals
89
- if (lLen > 0) {
90
- if (lLen === 0xf) {
91
- while (src[si] === 0xff) {
92
- lLen += 0xff;
93
- if (++si === sn) {
94
- throw errInvalidSource;
95
- }
96
- }
97
- lLen += src[si];
98
- if (++si === sn) {
99
- throw errInvalidSource;
100
- }
101
- }
102
- di += lLen;
103
- si += lLen;
104
- if (si >= sn) {
105
- return di;
106
- }
107
- }
108
- si += 2;
109
- if (si >= sn) {
110
- throw errInvalidSource;
111
- }
112
- const offset = src[si - 2] | src[si - 1] << 8;
113
- if (di - offset < 0 || offset === 0) {
114
- throw errInvalidSource;
115
- }
116
-
117
- // match
118
- if (mLen === 0xf) {
119
- while (src[si] === 0xff) {
120
- mLen += 0xff;
121
- if (++si === sn) {
122
- throw errInvalidSource;
123
- }
124
- }
125
- mLen += src[si];
126
- if (++si === sn) {
127
- throw errInvalidSource;
128
- }
129
- }
130
- // minimum match length is 4
131
- mLen += 4;
132
-
133
- // copy the match (NB. match is at least 4 bytes long)
134
- for (; mLen >= offset; mLen -= offset) {
135
- di += offset;
136
- }
137
- di += mLen;
138
- }
139
- }
140
- export function uncompressBlock(src, dest) {
141
- const sn = src.length;
142
- const dn = dest.length;
143
- if (sn === 0) {
144
- return 0;
145
- }
146
- let si = 0;
147
- let di = 0;
148
- while (true) {
149
- // literals and match lengths (token)
150
- let lLen = src[si] >> 4;
151
- let mLen = src[si] & 0xf;
152
- if (++si === sn) {
153
- throw errInvalidSource;
154
- }
155
-
156
- // literals
157
- if (lLen > 0) {
158
- if (lLen === 0xf) {
159
- while (src[si] === 0xff) {
160
- lLen += 0xff;
161
- if (++si === sn) {
162
- throw errInvalidSource;
163
- }
164
- }
165
- lLen += src[si];
166
- if (++si === sn) {
167
- throw errInvalidSource;
168
- }
169
- }
170
- if (dn - di < lLen || si + lLen > sn) {
171
- throw errShortBuffer;
172
- }
173
- copy(dest, src, di, si, lLen);
174
- di += lLen;
175
- si += lLen;
176
- if (si >= sn) {
177
- return di;
178
- }
179
- }
180
- si += 2;
181
- if (si >= sn) {
182
- throw errInvalidSource;
183
- }
184
- const offset = src[si - 2] | src[si - 1] << 8;
185
- if (di - offset < 0 || offset === 0) {
186
- throw errInvalidSource;
187
- }
188
-
189
- // match
190
- if (mLen === 0xf) {
191
- while (src[si] === 0xff) {
192
- mLen += 0xff;
193
- if (++si === sn) {
194
- throw errInvalidSource;
195
- }
196
- }
197
- mLen += src[si];
198
- if (++si === sn) {
199
- throw errInvalidSource;
200
- }
201
- }
202
- // minimum match length is 4
203
- mLen += 4;
204
- if (dn - di <= mLen) {
205
- throw errShortBuffer;
206
- }
207
-
208
- // copy the match (NB. match is at least 4 bytes long)
209
- for (; mLen >= offset; mLen -= offset) {
210
- copy(dest, dest, di, di - offset, offset);
211
- di += offset;
212
- }
213
- copy(dest, dest, di, di - offset, mLen);
214
- di += mLen;
215
- }
216
- }
217
- export function compressBlockBound(n) {
218
- return n + (n / 255 | 0) + 16;
219
- }
220
- export function compressBlock(src, dest, soffset) {
221
- const sn = src.length - mfLimit;
222
- const dn = dest.length;
223
- if (sn <= 0 || dn === 0 || soffset >= sn) {
224
- return 0;
225
- }
226
- let si = 0,
227
- di = 0;
228
-
229
- // fast scan strategy:
230
- // we only need a hash table to store the last sequences (4 bytes)
231
- const hashTable = new Uint32Array(hashSize);
232
-
233
- // Initialise the hash table with the first 64Kb of the input buffer
234
- // (used when compressing dependent blocks)
235
- while (si < soffset) {
236
- const h = imul(getUint32(src, si), hasher) >>> hashShift;
237
- hashTable[h] = ++si;
238
- }
239
- let anchor = si;
240
- let fma = 1 << skipStrength;
241
- while (si < sn - minMatch) {
242
- // hash the next 4 bytes (sequence)...
243
- const h = imul(getUint32(src, si), hasher) >>> hashShift;
244
- // -1 to separate existing entries from new ones
245
- const ref = hashTable[h] - 1;
246
- // ...and store the position of the hash in the hash table (+1 to compensate the -1 upon saving)
247
- hashTable[h] = si + 1;
248
- // no need to check the last 3 bytes in the first literal 4 bytes as
249
- // this guarantees that the next match, if any, is compressed with
250
- // a lower size, since to have some compression we must have:
251
- // ll+ml-overlap > 1 + (ll-15)/255 + (ml-4-15)/255 + 2 (uncompressed size>compressed size)
252
- // => ll+ml>3+2*overlap => ll+ml>= 4+2*overlap
253
- // and by definition we do have:
254
- // ll >= 1, ml >= 4
255
- // => ll+ml >= 5
256
- // => so overlap must be 0
257
-
258
- // the sequence is new, out of bound (64kb) or not valid: try next sequence
259
- if (ref < 0 ||
260
- //(fma & ((1 << skipStrength) - 1)) < 4 || // this code seems has a big penalty for size...
261
- si - ref >> winSizeLog > 0 || src[ref] !== src[si] || src[ref + 1] !== src[si + 1] || src[ref + 2] !== src[si + 2] || src[ref + 3] !== src[si + 3]) {
262
- // variable step: improves performance on non-compressible data
263
- si += fma >> skipStrength;
264
- ++fma;
265
- continue;
266
- }
267
- // match found
268
- fma = 1 << skipStrength;
269
- const lLen = si - anchor;
270
- const offset = si - ref;
271
-
272
- // encode match length part 1
273
- si += minMatch;
274
- let mLen = si; // match length has minMatch already
275
- while (si <= sn && src[si] === src[si - offset]) {
276
- si++;
277
- }
278
- mLen = si - mLen;
279
- if (mLen < 0xf) {
280
- dest[di] = mLen;
281
- } else {
282
- dest[di] = 0xf;
283
- }
284
-
285
- // encode literals length
286
- if (lLen < 0xf) {
287
- dest[di] |= lLen << 4;
288
- } else {
289
- dest[di] |= 0xf0;
290
- if (++di === dn) {
291
- throw errShortBuffer;
292
- }
293
- let l = lLen - 0xf;
294
- for (; l >= 0xff; l -= 0xff) {
295
- dest[di] = 0xff;
296
- if (++di === dn) {
297
- throw errShortBuffer;
298
- }
299
- }
300
- dest[di] = l & 0xff;
301
- }
302
- if (++di === dn) {
303
- throw errShortBuffer;
304
- }
305
-
306
- // literals
307
- if (di + lLen >= dn) {
308
- throw errShortBuffer;
309
- }
310
- copy(dest, src, di, anchor, lLen);
311
- di += lLen;
312
- anchor = si;
313
-
314
- // encode offset
315
- di += 2;
316
- if (di >= dn) {
317
- throw errShortBuffer;
318
- }
319
- dest[di - 2] = offset;
320
- dest[di - 1] = offset >> 8;
321
-
322
- // encode match length part 2
323
- if (mLen >= 0xf) {
324
- for (mLen -= 0xf; mLen >= 0xff; mLen -= 0xff) {
325
- dest[di] = 0xff;
326
- if (++di === dn) {
327
- throw errShortBuffer;
328
- }
329
- }
330
- dest[di] = mLen;
331
- if (++di === dn) {
332
- throw errShortBuffer;
333
- }
334
- }
335
- }
336
- if (anchor === 0) {
337
- // incompressible
338
- return 0;
339
- }
340
-
341
- // last literals
342
- let lLen = src.length - anchor;
343
- if (lLen < 0xf) {
344
- dest[di] = lLen << 4;
345
- } else {
346
- dest[di] = 0xf0;
347
- if (++di === dn) {
348
- throw errShortBuffer;
349
- }
350
- for (lLen -= 0xf; lLen >= 0xff; lLen -= 0xff) {
351
- dest[di] = 0xff;
352
- if (++di === dn) {
353
- throw errShortBuffer;
354
- }
355
- }
356
- dest[di] = lLen;
357
- }
358
- if (++di === dn) {
359
- throw errShortBuffer;
360
- }
361
-
362
- // write literals
363
- const lastLen = src.length - anchor;
364
- const n = di + lastLen;
365
- if (n > dn) {
366
- throw errShortBuffer;
367
- } else if (n >= sn) {
368
- // incompressible
369
- return 0;
370
- }
371
- copy(dest, src, di, anchor, lastLen);
372
- di += lastLen;
373
- return di;
374
- }
375
- export function compressBlockHC(src, dest, soffset) {
376
- const sn = src.length - mfLimit;
377
- const dn = dest.length;
378
- if (sn <= 0 || dn === 0 || soffset >= sn) {
379
- return 0;
380
- }
381
- let si = 0;
382
- let di = 0;
383
-
384
- // Hash Chain strategy:
385
- // we need a hash table and a chain table
386
- // the chain table cannot contain more entries than the window size (64Kb entries)
387
- const hashTable = new Uint32Array(hashSize);
388
- const chainTable = new Uint32Array(winSize);
389
-
390
- // Initialise the hash table with the first 64Kb of the input buffer
391
- // (used when compressing dependent blocks)
392
- while (si < soffset) {
393
- const h = imul(getUint32(src, si), hasher) >>> hashShift;
394
- chainTable[si & winMask] = hashTable[h];
395
- hashTable[h] = ++si;
396
- }
397
- let anchor = si;
398
- while (si < sn - minMatch) {
399
- // hash the next 4 bytes (sequence)...
400
- const h = imul(getUint32(src, si), hasher) >>> hashShift;
401
-
402
- // follow the chain until out of window and give the longest match
403
- let mLen = 0;
404
- let offset = 0;
405
- for (let next = hashTable[h] - 1; next > 0 && next > si - winSize; next = chainTable[next & winMask] - 1) {
406
- // the first (mLen==0) or next byte (mLen>=minMatch) at current match length must match to improve on the match length
407
- if (src[next + mLen] === src[si + mLen]) {
408
- for (let ml = 0;; ++ml) {
409
- if (src[next + ml] !== src[si + ml] || si + ml > sn) {
410
- // found a longer match, keep its position and length
411
- if (mLen < ml && ml >= minMatch) {
412
- mLen = ml;
413
- offset = si - next;
414
- }
415
- break;
416
- }
417
- }
418
- }
419
- }
420
- chainTable[si & winMask] = hashTable[h];
421
- hashTable[h] = si + 1;
422
-
423
- // no match found
424
- if (mLen === 0) {
425
- ++si;
426
- continue;
427
- }
428
- let si2 = si + 1;
429
- const ml = si + mLen;
430
-
431
- // match found
432
- // update hash/chain tables with overlaping bytes:
433
- // si already hashed, add everything from si+1 up to the match length
434
- while (si2 < ml) {
435
- const h = imul(getUint32(src, si2), hasher) >>> hashShift;
436
- chainTable[si2 & winMask] = hashTable[h];
437
- hashTable[h] = ++si2;
438
- }
439
- const lLen = si - anchor;
440
- si += mLen;
441
- mLen -= minMatch; // match length does not include minMatch
442
-
443
- if (mLen < 0xf) {
444
- dest[di] = mLen;
445
- } else {
446
- dest[di] = 0xf;
447
- }
448
-
449
- // encode literals length
450
- if (lLen < 0xf) {
451
- dest[di] |= lLen << 4;
452
- } else {
453
- dest[di] |= 0xf0;
454
- if (++di === dn) {
455
- throw errShortBuffer;
456
- }
457
- let l = lLen - 0xf;
458
- for (; l >= 0xff; l -= 0xff) {
459
- dest[di] = 0xff;
460
- if (++di === dn) {
461
- throw errShortBuffer;
462
- }
463
- }
464
- dest[di] = l & 0xff;
465
- }
466
- if (++di === dn) {
467
- throw errShortBuffer;
468
- }
469
-
470
- // literals
471
- if (di + lLen >= dn) {
472
- throw errShortBuffer;
473
- }
474
- copy(dest, src, di, anchor, lLen);
475
- di += lLen;
476
- anchor = si;
477
-
478
- // encode offset
479
- di += 2;
480
- if (di >= dn) {
481
- throw errShortBuffer;
482
- }
483
- dest[di - 2] = offset;
484
- dest[di - 1] = offset >> 8;
485
-
486
- // encode match length part 2
487
- if (mLen >= 0xf) {
488
- for (mLen -= 0xf; mLen >= 0xff; mLen -= 0xff) {
489
- dest[di] = 0xff;
490
- if (++di === dn) {
491
- throw errShortBuffer;
492
- }
493
- }
494
- dest[di] = mLen;
495
- if (++di === dn) {
496
- throw errShortBuffer;
497
- }
498
- }
499
- }
500
- if (anchor === 0) {
501
- // incompressible
502
- return 0;
503
- }
504
-
505
- // last literals
506
- let lLen = src.length - anchor;
507
- if (lLen < 0xf) {
508
- dest[di] = lLen << 4;
509
- } else {
510
- dest[di] = 0xf0;
511
- if (++di === dn) {
512
- throw errShortBuffer;
513
- }
514
- for (lLen -= 0xf; lLen >= 0xff; lLen -= 0xff) {
515
- dest[di] = 0xff;
516
- if (++di === dn) {
517
- throw errShortBuffer;
518
- }
519
- }
520
- dest[di] = lLen;
521
- }
522
- if (++di === dn) {
523
- throw errShortBuffer;
524
- }
525
-
526
- // write literals
527
- const lastLen = src.length - anchor;
528
- const n = di + lastLen;
529
- if (n > dn) {
530
- throw errShortBuffer;
531
- } else if (n >= sn) {
532
- // incompressible
533
- return 0;
534
- }
535
- copy(dest, src, di, anchor, lastLen);
536
- di += lastLen;
537
- return di;
538
- }
539
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJlcnJJbnZhbGlkU291cmNlIiwiRXJyb3IiLCJlcnJTaG9ydEJ1ZmZlciIsIm1pbk1hdGNoIiwid2luU2l6ZUxvZyIsIndpblNpemUiLCJ3aW5NYXNrIiwiaGFzaFNpemVMb2ciLCJoYXNoU2l6ZSIsImhhc2hTaGlmdCIsIm1mTGltaXQiLCJza2lwU3RyZW5ndGgiLCJoYXNoZXIiLCJpbXVsUG9seWZpbGwiLCJhIiwiYiIsImFoIiwiYWwiLCJiaCIsImJsIiwiaW11bCIsIk1hdGgiLCJnZXRVaW50MzIiLCJpIiwiY29weSIsImRlc3QiLCJzcmMiLCJkaSIsInNpIiwibGVuIiwiY2FsY1VuY29tcHJlc3NlZExlbiIsInNuIiwibGVuZ3RoIiwibExlbiIsIm1MZW4iLCJvZmZzZXQiLCJ1bmNvbXByZXNzQmxvY2siLCJkbiIsImNvbXByZXNzQmxvY2tCb3VuZCIsIm4iLCJjb21wcmVzc0Jsb2NrIiwic29mZnNldCIsImhhc2hUYWJsZSIsIlVpbnQzMkFycmF5IiwiaCIsImFuY2hvciIsImZtYSIsInJlZiIsImwiLCJsYXN0TGVuIiwiY29tcHJlc3NCbG9ja0hDIiwiY2hhaW5UYWJsZSIsIm5leHQiLCJtbCIsInNpMiJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9taW5pZnkvbHo0LnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIGx6NC10cyBAbGljZW5zZSBCU0QtMy1DbGF1c2UgLyBDb3B5cmlnaHQgKGMpIDIwMTUsIFBpZXJyZSBDdXJ0byAvIDIwMTYsIG9vdi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDE1LCBQaWVycmUgQ3VydG9cbiAqIENvcHlyaWdodCAoYykgMjAxNiwgb292XG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dFxuICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6XG4gKlxuICogKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXNcbiAqICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuXG4gKlxuICogKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsXG4gKiAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb25cbiAqICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uXG4gKlxuICogKiBOZWl0aGVyIHRoZSBuYW1lIG9mIHh4SGFzaCBub3IgdGhlIG5hbWVzIG9mIGl0c1xuICogICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbVxuICogICB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLlxuICpcbiAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgXCJBUyBJU1wiXG4gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFXG4gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkVcbiAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEVcbiAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMXG4gKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUlxuICogU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVJcbiAqIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksXG4gKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRVxuICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS5cbiAqL1xuXG5jb25zdCBlcnJJbnZhbGlkU291cmNlID0gbmV3IEVycm9yKFwiaW52YWxpZCBzb3VyY2VcIik7XG5jb25zdCBlcnJTaG9ydEJ1ZmZlciA9IG5ldyBFcnJvcihcInNob3J0IGJ1ZmZlclwiKTtcblxuLy8gVGhlIGZvbGxvd2luZyBjb25zdGFudHMgYXJlIHVzZWQgdG8gc2V0dXAgdGhlIGNvbXByZXNzaW9uIGFsZ29yaXRobS5cbmNvbnN0IG1pbk1hdGNoID0gNDsgLy8gdGhlIG1pbmltdW0gc2l6ZSBvZiB0aGUgbWF0Y2ggc2VxdWVuY2Ugc2l6ZSAoNCBieXRlcylcbmNvbnN0IHdpblNpemVMb2cgPSAxNjsgLy8gTFo0IDY0S2Igd2luZG93IHNpemUgbGltaXRcbmNvbnN0IHdpblNpemUgPSAxIDw8IHdpblNpemVMb2c7XG5jb25zdCB3aW5NYXNrID0gd2luU2l6ZSAtIDE7IC8vIDY0S2Igd2luZG93IG9mIHByZXZpb3VzIGRhdGEgZm9yIGRlcGVuZGVudCBibG9ja3NcblxuLy8gaGFzaFNpemVMb2cgZGV0ZXJtaW5lcyB0aGUgc2l6ZSBvZiB0aGUgaGFzaCB0YWJsZSB1c2VkIHRvIHF1aWNrbHkgZmluZCBhIHByZXZpb3VzIG1hdGNoIHBvc2l0aW9uLlxuLy8gSXRzIHZhbHVlIGluZmx1ZW5jZXMgdGhlIGNvbXByZXNzaW9uIHNwZWVkIGFuZCBtZW1vcnkgdXNhZ2UsIHRoZSBsb3dlciB0aGUgZmFzdGVyLFxuLy8gYnV0IGF0IHRoZSBleHBlbnNlIG9mIHRoZSBjb21wcmVzc2lvbiByYXRpby5cbi8vIDE2IHNlZW1zIHRvIGJlIHRoZSBiZXN0IGNvbXByb21pc2UuXG5jb25zdCBoYXNoU2l6ZUxvZyA9IDE2O1xuY29uc3QgaGFzaFNpemUgPSAxIDw8IGhhc2hTaXplTG9nO1xuY29uc3QgaGFzaFNoaWZ0ID0gbWluTWF0Y2ggKiA4IC0gaGFzaFNpemVMb2c7XG5cbmNvbnN0IG1mTGltaXQgPSA4ICsgbWluTWF0Y2g7IC8vIFRoZSBsYXN0IG1hdGNoIGNhbm5vdCBzdGFydCB3aXRoaW4gdGhlIGxhc3QgMTIgYnl0ZXMuXG5jb25zdCBza2lwU3RyZW5ndGggPSA2OyAvLyB2YXJpYWJsZSBzdGVwIGZvciBmYXN0IHNjYW5cblxuY29uc3QgaGFzaGVyID0gMjY1NDQzNTc2MSB8IDA7IC8vIHByaW1lIG51bWJlciB1c2VkIHRvIGhhc2ggbWluTWF0Y2hcblxuLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4vZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvTWF0aC9pbXVsI1BvbHlmaWxsXG5mdW5jdGlvbiBpbXVsUG9seWZpbGwoYTogbnVtYmVyLCBiOiBudW1iZXIpOiBudW1iZXIge1xuICBjb25zdCBhaCA9IChhID4+PiAxNikgJiAweGZmZmY7XG4gIGNvbnN0IGFsID0gYSAmIDB4ZmZmZjtcbiAgY29uc3QgYmggPSAoYiA+Pj4gMTYpICYgMHhmZmZmO1xuICBjb25zdCBibCA9IGIgJiAweGZmZmY7XG4gIC8vIHRoZSBzaGlmdCBieSAwIGZpeGVzIHRoZSBzaWduIG9uIHRoZSBoaWdoIHBhcnRcbiAgLy8gdGhlIGZpbmFsIHwwIGNvbnZlcnRzIHRoZSB1bnNpZ25lZCB2YWx1ZSBpbnRvIGEgc2lnbmVkIHZhbHVlXG4gIHJldHVybiAoYWwgKiBibCArICgoKGFoICogYmwgKyBhbCAqIGJoKSA8PCAxNikgPj4+IDApKSB8IDA7XG59XG5jb25zdCBpbXVsID0gTWF0aC5pbXVsID8gTWF0aC5pbXVsIDogaW11bFBvbHlmaWxsO1xuXG5mdW5jdGlvbiBnZXRVaW50MzIoYTogVWludDhBcnJheSwgaTogbnVtYmVyKTogbnVtYmVyIHtcbiAgcmV0dXJuIGFbaSArIDNdIHwgKGFbaSArIDJdIDw8IDgpIHwgKGFbaSArIDFdIDw8IDE2KSB8IChhW2ldIDw8IDI0KTtcbn1cblxuZnVuY3Rpb24gY29weShcbiAgZGVzdDogVWludDhBcnJheSxcbiAgc3JjOiBVaW50OEFycmF5LFxuICBkaTogbnVtYmVyLFxuICBzaTogbnVtYmVyLFxuICBsZW46IG51bWJlclxuKTogdm9pZCB7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuOyArK2kpIHtcbiAgICBkZXN0W2RpKytdID0gc3JjW3NpKytdO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjYWxjVW5jb21wcmVzc2VkTGVuKHNyYzogVWludDhBcnJheSk6IG51bWJlciB7XG4gIGNvbnN0IHNuID0gc3JjLmxlbmd0aDtcbiAgaWYgKHNuID09PSAwKSB7XG4gICAgcmV0dXJuIDA7XG4gIH1cblxuICBsZXQgc2kgPSAwO1xuICBsZXQgZGkgPSAwO1xuXG4gIHdoaWxlICh0cnVlKSB7XG4gICAgLy8gbGl0ZXJhbHMgYW5kIG1hdGNoIGxlbmd0aHMgKHRva2VuKVxuICAgIGxldCBsTGVuID0gc3JjW3NpXSA+PiA0O1xuICAgIGxldCBtTGVuID0gc3JjW3NpXSAmIDB4ZjtcbiAgICBpZiAoKytzaSA9PT0gc24pIHtcbiAgICAgIHRocm93IGVyckludmFsaWRTb3VyY2U7XG4gICAgfVxuXG4gICAgLy8gbGl0ZXJhbHNcbiAgICBpZiAobExlbiA+IDApIHtcbiAgICAgIGlmIChsTGVuID09PSAweGYpIHtcbiAgICAgICAgd2hpbGUgKHNyY1tzaV0gPT09IDB4ZmYpIHtcbiAgICAgICAgICBsTGVuICs9IDB4ZmY7XG4gICAgICAgICAgaWYgKCsrc2kgPT09IHNuKSB7XG4gICAgICAgICAgICB0aHJvdyBlcnJJbnZhbGlkU291cmNlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBsTGVuICs9IHNyY1tzaV07XG4gICAgICAgIGlmICgrK3NpID09PSBzbikge1xuICAgICAgICAgIHRocm93IGVyckludmFsaWRTb3VyY2U7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGRpICs9IGxMZW47XG4gICAgICBzaSArPSBsTGVuO1xuICAgICAgaWYgKHNpID49IHNuKSB7XG4gICAgICAgIHJldHVybiBkaTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBzaSArPSAyO1xuICAgIGlmIChzaSA+PSBzbikge1xuICAgICAgdGhyb3cgZXJySW52YWxpZFNvdXJjZTtcbiAgICB9XG4gICAgY29uc3Qgb2Zmc2V0ID0gc3JjW3NpIC0gMl0gfCAoc3JjW3NpIC0gMV0gPDwgOCk7XG4gICAgaWYgKGRpIC0gb2Zmc2V0IDwgMCB8fCBvZmZzZXQgPT09IDApIHtcbiAgICAgIHRocm93IGVyckludmFsaWRTb3VyY2U7XG4gICAgfVxuXG4gICAgLy8gbWF0Y2hcbiAgICBpZiAobUxlbiA9PT0gMHhmKSB7XG4gICAgICB3aGlsZSAoc3JjW3NpXSA9PT0gMHhmZikge1xuICAgICAgICBtTGVuICs9IDB4ZmY7XG4gICAgICAgIGlmICgrK3NpID09PSBzbikge1xuICAgICAgICAgIHRocm93IGVyckludmFsaWRTb3VyY2U7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIG1MZW4gKz0gc3JjW3NpXTtcbiAgICAgIGlmICgrK3NpID09PSBzbikge1xuICAgICAgICB0aHJvdyBlcnJJbnZhbGlkU291cmNlO1xuICAgICAgfVxuICAgIH1cbiAgICAvLyBtaW5pbXVtIG1hdGNoIGxlbmd0aCBpcyA0XG4gICAgbUxlbiArPSA0O1xuXG4gICAgLy8gY29weSB0aGUgbWF0Y2ggKE5CLiBtYXRjaCBpcyBhdCBsZWFzdCA0IGJ5dGVzIGxvbmcpXG4gICAgZm9yICg7IG1MZW4gPj0gb2Zmc2V0OyBtTGVuIC09IG9mZnNldCkge1xuICAgICAgZGkgKz0gb2Zmc2V0O1xuICAgIH1cbiAgICBkaSArPSBtTGVuO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1bmNvbXByZXNzQmxvY2soc3JjOiBVaW50OEFycmF5LCBkZXN0OiBVaW50OEFycmF5KTogbnVtYmVyIHtcbiAgY29uc3Qgc24gPSBzcmMubGVuZ3RoO1xuICBjb25zdCBkbiA9IGRlc3QubGVuZ3RoO1xuICBpZiAoc24gPT09IDApIHtcbiAgICByZXR1cm4gMDtcbiAgfVxuXG4gIGxldCBzaSA9IDA7XG4gIGxldCBkaSA9IDA7XG5cbiAgd2hpbGUgKHRydWUpIHtcbiAgICAvLyBsaXRlcmFscyBhbmQgbWF0Y2ggbGVuZ3RocyAodG9rZW4pXG4gICAgbGV0IGxMZW4gPSBzcmNbc2ldID4+IDQ7XG4gICAgbGV0IG1MZW4gPSBzcmNbc2ldICYgMHhmO1xuICAgIGlmICgrK3NpID09PSBzbikge1xuICAgICAgdGhyb3cgZXJySW52YWxpZFNvdXJjZTtcbiAgICB9XG5cbiAgICAvLyBsaXRlcmFsc1xuICAgIGlmIChsTGVuID4gMCkge1xuICAgICAgaWYgKGxMZW4gPT09IDB4Zikge1xuICAgICAgICB3aGlsZSAoc3JjW3NpXSA9PT0gMHhmZikge1xuICAgICAgICAgIGxMZW4gKz0gMHhmZjtcbiAgICAgICAgICBpZiAoKytzaSA9PT0gc24pIHtcbiAgICAgICAgICAgIHRocm93IGVyckludmFsaWRTb3VyY2U7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGxMZW4gKz0gc3JjW3NpXTtcbiAgICAgICAgaWYgKCsrc2kgPT09IHNuKSB7XG4gICAgICAgICAgdGhyb3cgZXJySW52YWxpZFNvdXJjZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGRuIC0gZGkgPCBsTGVuIHx8IHNpICsgbExlbiA+IHNuKSB7XG4gICAgICAgIHRocm93IGVyclNob3J0QnVmZmVyO1xuICAgICAgfVxuICAgICAgY29weShkZXN0LCBzcmMsIGRpLCBzaSwgbExlbik7XG4gICAgICBkaSArPSBsTGVuO1xuICAgICAgc2kgKz0gbExlbjtcbiAgICAgIGlmIChzaSA+PSBzbikge1xuICAgICAgICByZXR1cm4gZGk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgc2kgKz0gMjtcbiAgICBpZiAoc2kgPj0gc24pIHtcbiAgICAgIHRocm93IGVyckludmFsaWRTb3VyY2U7XG4gICAgfVxuICAgIGNvbnN0IG9mZnNldCA9IHNyY1tzaSAtIDJdIHwgKHNyY1tzaSAtIDFdIDw8IDgpO1xuICAgIGlmIChkaSAtIG9mZnNldCA8IDAgfHwgb2Zmc2V0ID09PSAwKSB7XG4gICAgICB0aHJvdyBlcnJJbnZhbGlkU291cmNlO1xuICAgIH1cblxuICAgIC8vIG1hdGNoXG4gICAgaWYgKG1MZW4gPT09IDB4Zikge1xuICAgICAgd2hpbGUgKHNyY1tzaV0gPT09IDB4ZmYpIHtcbiAgICAgICAgbUxlbiArPSAweGZmO1xuICAgICAgICBpZiAoKytzaSA9PT0gc24pIHtcbiAgICAgICAgICB0aHJvdyBlcnJJbnZhbGlkU291cmNlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBtTGVuICs9IHNyY1tzaV07XG4gICAgICBpZiAoKytzaSA9PT0gc24pIHtcbiAgICAgICAgdGhyb3cgZXJySW52YWxpZFNvdXJjZTtcbiAgICAgIH1cbiAgICB9XG4gICAgLy8gbWluaW11bSBtYXRjaCBsZW5ndGggaXMgNFxuICAgIG1MZW4gKz0gNDtcbiAgICBpZiAoZG4gLSBkaSA8PSBtTGVuKSB7XG4gICAgICB0aHJvdyBlcnJTaG9ydEJ1ZmZlcjtcbiAgICB9XG5cbiAgICAvLyBjb3B5IHRoZSBtYXRjaCAoTkIuIG1hdGNoIGlzIGF0IGxlYXN0IDQgYnl0ZXMgbG9uZylcbiAgICBmb3IgKDsgbUxlbiA+PSBvZmZzZXQ7IG1MZW4gLT0gb2Zmc2V0KSB7XG4gICAgICBjb3B5KGRlc3QsIGRlc3QsIGRpLCBkaSAtIG9mZnNldCwgb2Zmc2V0KTtcbiAgICAgIGRpICs9IG9mZnNldDtcbiAgICB9XG4gICAgY29weShkZXN0LCBkZXN0LCBkaSwgZGkgLSBvZmZzZXQsIG1MZW4pO1xuICAgIGRpICs9IG1MZW47XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbXByZXNzQmxvY2tCb3VuZChuOiBudW1iZXIpOiBudW1iZXIge1xuICByZXR1cm4gbiArICgobiAvIDI1NSkgfCAwKSArIDE2O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29tcHJlc3NCbG9jayhcbiAgc3JjOiBVaW50OEFycmF5LFxuICBkZXN0OiBVaW50OEFycmF5LFxuICBzb2Zmc2V0OiBudW1iZXJcbik6IG51bWJlciB7XG4gIGNvbnN0IHNuID0gc3JjLmxlbmd0aCAtIG1mTGltaXQ7XG4gIGNvbnN0IGRuID0gZGVzdC5sZW5ndGg7XG4gIGlmIChzbiA8PSAwIHx8IGRuID09PSAwIHx8IHNvZmZzZXQgPj0gc24pIHtcbiAgICByZXR1cm4gMDtcbiAgfVxuICBsZXQgc2kgPSAwLFxuICAgIGRpID0gMDtcblxuICAvLyBmYXN0IHNjYW4gc3RyYXRlZ3k6XG4gIC8vIHdlIG9ubHkgbmVlZCBhIGhhc2ggdGFibGUgdG8gc3RvcmUgdGhlIGxhc3Qgc2VxdWVuY2VzICg0IGJ5dGVzKVxuICBjb25zdCBoYXNoVGFibGUgPSBuZXcgVWludDMyQXJyYXkoaGFzaFNpemUpO1xuXG4gIC8vIEluaXRpYWxpc2UgdGhlIGhhc2ggdGFibGUgd2l0aCB0aGUgZmlyc3QgNjRLYiBvZiB0aGUgaW5wdXQgYnVmZmVyXG4gIC8vICh1c2VkIHdoZW4gY29tcHJlc3NpbmcgZGVwZW5kZW50IGJsb2NrcylcbiAgd2hpbGUgKHNpIDwgc29mZnNldCkge1xuICAgIGNvbnN0IGggPSBpbXVsKGdldFVpbnQzMihzcmMsIHNpKSwgaGFzaGVyKSA+Pj4gaGFzaFNoaWZ0O1xuICAgIGhhc2hUYWJsZVtoXSA9ICsrc2k7XG4gIH1cblxuICBsZXQgYW5jaG9yID0gc2k7XG4gIGxldCBmbWEgPSAxIDw8IHNraXBTdHJlbmd0aDtcbiAgd2hpbGUgKHNpIDwgc24gLSBtaW5NYXRjaCkge1xuICAgIC8vIGhhc2ggdGhlIG5leHQgNCBieXRlcyAoc2VxdWVuY2UpLi4uXG4gICAgY29uc3QgaCA9IGltdWwoZ2V0VWludDMyKHNyYywgc2kpLCBoYXNoZXIpID4+PiBoYXNoU2hpZnQ7XG4gICAgLy8gLTEgdG8gc2VwYXJhdGUgZXhpc3RpbmcgZW50cmllcyBmcm9tIG5ldyBvbmVzXG4gICAgY29uc3QgcmVmID0gaGFzaFRhYmxlW2hdIC0gMTtcbiAgICAvLyAuLi5hbmQgc3RvcmUgdGhlIHBvc2l0aW9uIG9mIHRoZSBoYXNoIGluIHRoZSBoYXNoIHRhYmxlICgrMSB0byBjb21wZW5zYXRlIHRoZSAtMSB1cG9uIHNhdmluZylcbiAgICBoYXNoVGFibGVbaF0gPSBzaSArIDE7XG4gICAgLy8gbm8gbmVlZCB0byBjaGVjayB0aGUgbGFzdCAzIGJ5dGVzIGluIHRoZSBmaXJzdCBsaXRlcmFsIDQgYnl0ZXMgYXNcbiAgICAvLyB0aGlzIGd1YXJhbnRlZXMgdGhhdCB0aGUgbmV4dCBtYXRjaCwgaWYgYW55LCBpcyBjb21wcmVzc2VkIHdpdGhcbiAgICAvLyBhIGxvd2VyIHNpemUsIHNpbmNlIHRvIGhhdmUgc29tZSBjb21wcmVzc2lvbiB3ZSBtdXN0IGhhdmU6XG4gICAgLy8gbGwrbWwtb3ZlcmxhcCA+IDEgKyAobGwtMTUpLzI1NSArIChtbC00LTE1KS8yNTUgKyAyICh1bmNvbXByZXNzZWQgc2l6ZT5jb21wcmVzc2VkIHNpemUpXG4gICAgLy8gPT4gbGwrbWw+MysyKm92ZXJsYXAgPT4gbGwrbWw+PSA0KzIqb3ZlcmxhcFxuICAgIC8vIGFuZCBieSBkZWZpbml0aW9uIHdlIGRvIGhhdmU6XG4gICAgLy8gbGwgPj0gMSwgbWwgPj0gNFxuICAgIC8vID0+IGxsK21sID49IDVcbiAgICAvLyA9PiBzbyBvdmVybGFwIG11c3QgYmUgMFxuXG4gICAgLy8gdGhlIHNlcXVlbmNlIGlzIG5ldywgb3V0IG9mIGJvdW5kICg2NGtiKSBvciBub3QgdmFsaWQ6IHRyeSBuZXh0IHNlcXVlbmNlXG4gICAgaWYgKFxuICAgICAgcmVmIDwgMCB8fCAvLyhmbWEgJiAoKDEgPDwgc2tpcFN0cmVuZ3RoKSAtIDEpKSA8IDQgfHwgLy8gdGhpcyBjb2RlIHNlZW1zIGhhcyBhIGJpZyBwZW5hbHR5IGZvciBzaXplLi4uXG4gICAgICAoc2kgLSByZWYpID4+IHdpblNpemVMb2cgPiAwIHx8XG4gICAgICBzcmNbcmVmXSAhPT0gc3JjW3NpXSB8fFxuICAgICAgc3JjW3JlZiArIDFdICE9PSBzcmNbc2kgKyAxXSB8fFxuICAgICAgc3JjW3JlZiArIDJdICE9PSBzcmNbc2kgKyAyXSB8fFxuICAgICAgc3JjW3JlZiArIDNdICE9PSBzcmNbc2kgKyAzXVxuICAgICkge1xuICAgICAgLy8gdmFyaWFibGUgc3RlcDogaW1wcm92ZXMgcGVyZm9ybWFuY2Ugb24gbm9uLWNvbXByZXNzaWJsZSBkYXRhXG4gICAgICBzaSArPSBmbWEgPj4gc2tpcFN0cmVuZ3RoO1xuICAgICAgKytmbWE7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgLy8gbWF0Y2ggZm91bmRcbiAgICBmbWEgPSAxIDw8IHNraXBTdHJlbmd0aDtcbiAgICBjb25zdCBsTGVuID0gc2kgLSBhbmNob3I7XG4gICAgY29uc3Qgb2Zmc2V0ID0gc2kgLSByZWY7XG5cbiAgICAvLyBlbmNvZGUgbWF0Y2ggbGVuZ3RoIHBhcnQgMVxuICAgIHNpICs9IG1pbk1hdGNoO1xuICAgIGxldCBtTGVuID0gc2k7IC8vIG1hdGNoIGxlbmd0aCBoYXMgbWluTWF0Y2ggYWxyZWFkeVxuICAgIHdoaWxlIChzaSA8PSBzbiAmJiBzcmNbc2ldID09PSBzcmNbc2kgLSBvZmZzZXRdKSB7XG4gICAgICBzaSsrO1xuICAgIH1cbiAgICBtTGVuID0gc2kgLSBtTGVuO1xuICAgIGlmIChtTGVuIDwgMHhmKSB7XG4gICAgICBkZXN0W2RpXSA9IG1MZW47XG4gICAgfSBlbHNlIHtcbiAgICAgIGRlc3RbZGldID0gMHhmO1xuICAgIH1cblxuICAgIC8vIGVuY29kZSBsaXRlcmFscyBsZW5ndGhcbiAgICBpZiAobExlbiA8IDB4Zikge1xuICAgICAgZGVzdFtkaV0gfD0gbExlbiA8PCA0O1xuICAgIH0gZWxzZSB7XG4gICAgICBkZXN0W2RpXSB8PSAweGYwO1xuICAgICAgaWYgKCsrZGkgPT09IGRuKSB7XG4gICAgICAgIHRocm93IGVyclNob3J0QnVmZmVyO1xuICAgICAgfVxuICAgICAgbGV0IGwgPSBsTGVuIC0gMHhmO1xuICAgICAgZm9yICg7IGwgPj0gMHhmZjsgbCAtPSAweGZmKSB7XG4gICAgICAgIGRlc3RbZGldID0gMHhmZjtcbiAgICAgICAgaWYgKCsrZGkgPT09IGRuKSB7XG4gICAgICAgICAgdGhyb3cgZXJyU2hvcnRCdWZmZXI7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGRlc3RbZGldID0gbCAmIDB4ZmY7XG4gICAgfVxuICAgIGlmICgrK2RpID09PSBkbikge1xuICAgICAgdGhyb3cgZXJyU2hvcnRCdWZmZXI7XG4gICAgfVxuXG4gICAgLy8gbGl0ZXJhbHNcbiAgICBpZiAoZGkgKyBsTGVuID49IGRuKSB7XG4gICAgICB0aHJvdyBlcnJTaG9ydEJ1ZmZlcjtcbiAgICB9XG4gICAgY29weShkZXN0LCBzcmMsIGRpLCBhbmNob3IsIGxMZW4pO1xuICAgIGRpICs9IGxMZW47XG4gICAgYW5jaG9yID0gc2k7XG5cbiAgICAvLyBlbmNvZGUgb2Zmc2V0XG4gICAgZGkgKz0gMjtcbiAgICBpZiAoZGkgPj0gZG4pIHtcbiAgICAgIHRocm93IGVyclNob3J0QnVmZmVyO1xuICAgIH1cbiAgICBkZXN0W2RpIC0gMl0gPSBvZmZzZXQ7XG4gICAgZGVzdFtkaSAtIDFdID0gb2Zmc2V0ID4+IDg7XG5cbiAgICAvLyBlbmNvZGUgbWF0Y2ggbGVuZ3RoIHBhcnQgMlxuICAgIGlmIChtTGVuID49IDB4Zikge1xuICAgICAgZm9yIChtTGVuIC09IDB4ZjsgbUxlbiA+PSAweGZmOyBtTGVuIC09IDB4ZmYpIHtcbiAgICAgICAgZGVzdFtkaV0gPSAweGZmO1xuICAgICAgICBpZiAoKytkaSA9PT0gZG4pIHtcbiAgICAgICAgICB0aHJvdyBlcnJTaG9ydEJ1ZmZlcjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZGVzdFtkaV0gPSBtTGVuO1xuICAgICAgaWYgKCsrZGkgPT09IGRuKSB7XG4gICAgICAgIHRocm93IGVyclNob3J0QnVmZmVyO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlmIChhbmNob3IgPT09IDApIHtcbiAgICAvLyBpbmNvbXByZXNzaWJsZVxuICAgIHJldHVybiAwO1xuICB9XG5cbiAgLy8gbGFzdCBsaXRlcmFsc1xuICBsZXQgbExlbiA9IHNyYy5sZW5ndGggLSBhbmNob3I7XG4gIGlmIChsTGVuIDwgMHhmKSB7XG4gICAgZGVzdFtkaV0gPSBsTGVuIDw8IDQ7XG4gIH0gZWxzZSB7XG4gICAgZGVzdFtkaV0gPSAweGYwO1xuICAgIGlmICgrK2RpID09PSBkbikge1xuICAgICAgdGhyb3cgZXJyU2hvcnRCdWZmZXI7XG4gICAgfVxuICAgIGZvciAobExlbiAtPSAweGY7IGxMZW4gPj0gMHhmZjsgbExlbiAtPSAweGZmKSB7XG4gICAgICBkZXN0W2RpXSA9IDB4ZmY7XG4gICAgICBpZiAoKytkaSA9PT0gZG4pIHtcbiAgICAgICAgdGhyb3cgZXJyU2hvcnRCdWZmZXI7XG4gICAgICB9XG4gICAgfVxuICAgIGRlc3RbZGldID0gbExlbjtcbiAgfVxuICBpZiAoKytkaSA9PT0gZG4pIHtcbiAgICB0aHJvdyBlcnJTaG9ydEJ1ZmZlcjtcbiAgfVxuXG4gIC8vIHdyaXRlIGxpdGVyYWxzXG4gIGNvbnN0IGxhc3RMZW4gPSBzcmMubGVuZ3RoIC0gYW5jaG9yO1xuICBjb25zdCBuID0gZGkgKyBsYXN0TGVuO1xuICBpZiAobiA+IGRuKSB7XG4gICAgdGhyb3cgZXJyU2hvcnRCdWZmZXI7XG4gIH0gZWxzZSBpZiAobiA+PSBzbikge1xuICAgIC8vIGluY29tcHJlc3NpYmxlXG4gICAgcmV0dXJuIDA7XG4gIH1cbiAgY29weShkZXN0LCBzcmMsIGRpLCBhbmNob3IsIGxhc3RMZW4pO1xuICBkaSArPSBsYXN0TGVuO1xuICByZXR1cm4gZGk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb21wcmVzc0Jsb2NrSEMoXG4gIHNyYzogVWludDhBcnJheSxcbiAgZGVzdDogVWludDhBcnJheSxcbiAgc29mZnNldDogbnVtYmVyXG4pOiBudW1iZXIge1xuICBjb25zdCBzbiA9IHNyYy5sZW5ndGggLSBtZkxpbWl0O1xuICBjb25zdCBkbiA9IGRlc3QubGVuZ3RoO1xuICBpZiAoc24gPD0gMCB8fCBkbiA9PT0gMCB8fCBzb2Zmc2V0ID49IHNuKSB7XG4gICAgcmV0dXJuIDA7XG4gIH1cbiAgbGV0IHNpID0gMDtcbiAgbGV0IGRpID0gMDtcblxuICAvLyBIYXNoIENoYWluIHN0cmF0ZWd5OlxuICAvLyB3ZSBuZWVkIGEgaGFzaCB0YWJsZSBhbmQgYSBjaGFpbiB0YWJsZVxuICAvLyB0aGUgY2hhaW4gdGFibGUgY2Fubm90IGNvbnRhaW4gbW9yZSBlbnRyaWVzIHRoYW4gdGhlIHdpbmRvdyBzaXplICg2NEtiIGVudHJpZXMpXG4gIGNvbnN0IGhhc2hUYWJsZSA9IG5ldyBVaW50MzJBcnJheShoYXNoU2l6ZSk7XG4gIGNvbnN0IGNoYWluVGFibGUgPSBuZXcgVWludDMyQXJyYXkod2luU2l6ZSk7XG5cbiAgLy8gSW5pdGlhbGlzZSB0aGUgaGFzaCB0YWJsZSB3aXRoIHRoZSBmaXJzdCA2NEtiIG9mIHRoZSBpbnB1dCBidWZmZXJcbiAgLy8gKHVzZWQgd2hlbiBjb21wcmVzc2luZyBkZXBlbmRlbnQgYmxvY2tzKVxuICB3aGlsZSAoc2kgPCBzb2Zmc2V0KSB7XG4gICAgY29uc3QgaCA9IGltdWwoZ2V0VWludDMyKHNyYywgc2kpLCBoYXNoZXIpID4+PiBoYXNoU2hpZnQ7XG4gICAgY2hhaW5UYWJsZVtzaSAmIHdpbk1hc2tdID0gaGFzaFRhYmxlW2hdO1xuICAgIGhhc2hUYWJsZVtoXSA9ICsrc2k7XG4gIH1cblxuICBsZXQgYW5jaG9yID0gc2k7XG4gIHdoaWxlIChzaSA8IHNuIC0gbWluTWF0Y2gpIHtcbiAgICAvLyBoYXNoIHRoZSBuZXh0IDQgYnl0ZXMgKHNlcXVlbmNlKS4uLlxuICAgIGNvbnN0IGggPSBpbXVsKGdldFVpbnQzMihzcmMsIHNpKSwgaGFzaGVyKSA+Pj4gaGFzaFNoaWZ0O1xuXG4gICAgLy8gZm9sbG93IHRoZSBjaGFpbiB1bnRpbCBvdXQgb2Ygd2luZG93IGFuZCBnaXZlIHRoZSBsb25nZXN0IG1hdGNoXG4gICAgbGV0IG1MZW4gPSAwO1xuICAgIGxldCBvZmZzZXQgPSAwO1xuICAgIGZvciAoXG4gICAgICBsZXQgbmV4dCA9IGhhc2hUYWJsZVtoXSAtIDE7XG4gICAgICBuZXh0ID4gMCAmJiBuZXh0ID4gc2kgLSB3aW5TaXplO1xuICAgICAgbmV4dCA9IGNoYWluVGFibGVbbmV4dCAmIHdpbk1hc2tdIC0gMVxuICAgICkge1xuICAgICAgLy8gdGhlIGZpcnN0IChtTGVuPT0wKSBvciBuZXh0IGJ5dGUgKG1MZW4+PW1pbk1hdGNoKSBhdCBjdXJyZW50IG1hdGNoIGxlbmd0aCBtdXN0IG1hdGNoIHRvIGltcHJvdmUgb24gdGhlIG1hdGNoIGxlbmd0aFxuICAgICAgaWYgKHNyY1tuZXh0ICsgbUxlbl0gPT09IHNyY1tzaSArIG1MZW5dKSB7XG4gICAgICAgIGZvciAobGV0IG1sID0gMDsgOyArK21sKSB7XG4gICAgICAgICAgaWYgKHNyY1tuZXh0ICsgbWxdICE9PSBzcmNbc2kgKyBtbF0gfHwgc2kgKyBtbCA+IHNuKSB7XG4gICAgICAgICAgICAvLyBmb3VuZCBhIGxvbmdlciBtYXRjaCwga2VlcCBpdHMgcG9zaXRpb24gYW5kIGxlbmd0aFxuICAgICAgICAgICAgaWYgKG1MZW4gPCBtbCAmJiBtbCA+PSBtaW5NYXRjaCkge1xuICAgICAgICAgICAgICBtTGVuID0gbWw7XG4gICAgICAgICAgICAgIG9mZnNldCA9IHNpIC0gbmV4dDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBjaGFpblRhYmxlW3NpICYgd2luTWFza10gPSBoYXNoVGFibGVbaF07XG4gICAgaGFzaFRhYmxlW2hdID0gc2kgKyAxO1xuXG4gICAgLy8gbm8gbWF0Y2ggZm91bmRcbiAgICBpZiAobUxlbiA9PT0gMCkge1xuICAgICAgKytzaTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGxldCBzaTIgPSBzaSArIDE7XG4gICAgY29uc3QgbWwgPSBzaSArIG1MZW47XG5cbiAgICAvLyBtYXRjaCBmb3VuZFxuICAgIC8vIHVwZGF0ZSBoYXNoL2NoYWluIHRhYmxlcyB3aXRoIG92ZXJsYXBpbmcgYnl0ZXM6XG4gICAgLy8gc2kgYWxyZWFkeSBoYXNoZWQsIGFkZCBldmVyeXRoaW5nIGZyb20gc2krMSB1cCB0byB0aGUgbWF0Y2ggbGVuZ3RoXG4gICAgd2hpbGUgKHNpMiA8IG1sKSB7XG4gICAgICBjb25zdCBoID0gaW11bChnZXRVaW50MzIoc3JjLCBzaTIpLCBoYXNoZXIpID4+PiBoYXNoU2hpZnQ7XG4gICAgICBjaGFpblRhYmxlW3NpMiAmIHdpbk1hc2tdID0gaGFzaFRhYmxlW2hdO1xuICAgICAgaGFzaFRhYmxlW2hdID0gKytzaTI7XG4gICAgfVxuXG4gICAgY29uc3QgbExlbiA9IHNpIC0gYW5jaG9yO1xuICAgIHNpICs9IG1MZW47XG4gICAgbUxlbiAtPSBtaW5NYXRjaDsgLy8gbWF0Y2ggbGVuZ3RoIGRvZXMgbm90IGluY2x1ZGUgbWluTWF0Y2hcblxuICAgIGlmIChtTGVuIDwgMHhmKSB7XG4gICAgICBkZXN0W2RpXSA9IG1MZW47XG4gICAgfSBlbHNlIHtcbiAgICAgIGRlc3RbZGldID0gMHhmO1xuICAgIH1cblxuICAgIC8vIGVuY29kZSBsaXRlcmFscyBsZW5ndGhcbiAgICBpZiAobExlbiA8IDB4Zikge1xuICAgICAgZGVzdFtkaV0gfD0gbExlbiA8PCA0O1xuICAgIH0gZWxzZSB7XG4gICAgICBkZXN0W2RpXSB8PSAweGYwO1xuICAgICAgaWYgKCsrZGkgPT09IGRuKSB7XG4gICAgICAgIHRocm93IGVyclNob3J0QnVmZmVyO1xuICAgICAgfVxuICAgICAgbGV0IGwgPSBsTGVuIC0gMHhmO1xuICAgICAgZm9yICg7IGwgPj0gMHhmZjsgbCAtPSAweGZmKSB7XG4gICAgICAgIGRlc3RbZGldID0gMHhmZjtcbiAgICAgICAgaWYgKCsrZGkgPT09IGRuKSB7XG4gICAgICAgICAgdGhyb3cgZXJyU2hvcnRCdWZmZXI7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGRlc3RbZGldID0gbCAmIDB4ZmY7XG4gICAgfVxuICAgIGlmICgrK2RpID09PSBkbikge1xuICAgICAgdGhyb3cgZXJyU2hvcnRCdWZmZXI7XG4gICAgfVxuXG4gICAgLy8gbGl0ZXJhbHNcbiAgICBpZiAoZGkgKyBsTGVuID49IGRuKSB7XG4gICAgICB0aHJvdyBlcnJTaG9ydEJ1ZmZlcjtcbiAgICB9XG4gICAgY29weShkZXN0LCBzcmMsIGRpLCBhbmNob3IsIGxMZW4pO1xuICAgIGRpICs9IGxMZW47XG4gICAgYW5jaG9yID0gc2k7XG5cbiAgICAvLyBlbmNvZGUgb2Zmc2V0XG4gICAgZGkgKz0gMjtcbiAgICBpZiAoZGkgPj0gZG4pIHtcbiAgICAgIHRocm93IGVyclNob3J0QnVmZmVyO1xuICAgIH1cbiAgICBkZXN0W2RpIC0gMl0gPSBvZmZzZXQ7XG4gICAgZGVzdFtkaSAtIDFdID0gb2Zmc2V0ID4+IDg7XG5cbiAgICAvLyBlbmNvZGUgbWF0Y2ggbGVuZ3RoIHBhcnQgMlxuICAgIGlmIChtTGVuID49IDB4Zikge1xuICAgICAgZm9yIChtTGVuIC09IDB4ZjsgbUxlbiA+PSAweGZmOyBtTGVuIC09IDB4ZmYpIHtcbiAgICAgICAgZGVzdFtkaV0gPSAweGZmO1xuICAgICAgICBpZiAoKytkaSA9PT0gZG4pIHtcbiAgICAgICAgICB0aHJvdyBlcnJTaG9ydEJ1ZmZlcjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZGVzdFtkaV0gPSBtTGVuO1xuICAgICAgaWYgKCsrZGkgPT09IGRuKSB7XG4gICAgICAgIHRocm93IGVyclNob3J0QnVmZmVyO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlmIChhbmNob3IgPT09IDApIHtcbiAgICAvLyBpbmNvbXByZXNzaWJsZVxuICAgIHJldHVybiAwO1xuICB9XG5cbiAgLy8gbGFzdCBsaXRlcmFsc1xuICBsZXQgbExlbiA9IHNyYy5sZW5ndGggLSBhbmNob3I7XG4gIGlmIChsTGVuIDwgMHhmKSB7XG4gICAgZGVzdFtkaV0gPSBsTGVuIDw8IDQ7XG4gIH0gZWxzZSB7XG4gICAgZGVzdFtkaV0gPSAweGYwO1xuICAgIGlmICgrK2RpID09PSBkbikge1xuICAgICAgdGhyb3cgZXJyU2hvcnRCdWZmZXI7XG4gICAgfVxuICAgIGZvciAobExlbiAtPSAweGY7IGxMZW4gPj0gMHhmZjsgbExlbiAtPSAweGZmKSB7XG4gICAgICBkZXN0W2RpXSA9IDB4ZmY7XG4gICAgICBpZiAoKytkaSA9PT0gZG4pIHtcbiAgICAgICAgdGhyb3cgZXJyU2hvcnRCdWZmZXI7XG4gICAgICB9XG4gICAgfVxuICAgIGRlc3RbZGldID0gbExlbjtcbiAgfVxuICBpZiAoKytkaSA9PT0gZG4pIHtcbiAgICB0aHJvdyBlcnJTaG9ydEJ1ZmZlcjtcbiAgfVxuXG4gIC8vIHdyaXRlIGxpdGVyYWxzXG4gIGNvbnN0IGxhc3RMZW4gPSBzcmMubGVuZ3RoIC0gYW5jaG9yO1xuICBjb25zdCBuID0gZGkgKyBsYXN0TGVuO1xuICBpZiAobiA+IGRuKSB7XG4gICAgdGhyb3cgZXJyU2hvcnRCdWZmZXI7XG4gIH0gZWxzZSBpZiAobiA+PSBzbikge1xuICAgIC8vIGluY29tcHJlc3NpYmxlXG4gICAgcmV0dXJuIDA7XG4gIH1cbiAgY29weShkZXN0LCBzcmMsIGRpLCBhbmNob3IsIGxhc3RMZW4pO1xuICBkaSArPSBsYXN0TGVuO1xuICByZXR1cm4gZGk7XG59XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLE1BQU1BLGdCQUFnQixHQUFHLElBQUlDLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQztBQUNwRCxNQUFNQyxjQUFjLEdBQUcsSUFBSUQsS0FBSyxDQUFDLGNBQWMsQ0FBQzs7QUFFaEQ7QUFDQSxNQUFNRSxRQUFRLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDcEIsTUFBTUMsVUFBVSxHQUFHLEVBQUUsQ0FBQyxDQUFDO0FBQ3ZCLE1BQU1DLE9BQU8sR0FBRyxDQUFDLElBQUlELFVBQVU7QUFDL0IsTUFBTUUsT0FBTyxHQUFHRCxPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUM7O0FBRTdCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTUUsV0FBVyxHQUFHLEVBQUU7QUFDdEIsTUFBTUMsUUFBUSxHQUFHLENBQUMsSUFBSUQsV0FBVztBQUNqQyxNQUFNRSxTQUFTLEdBQUdOLFFBQVEsR0FBRyxDQUFDLEdBQUdJLFdBQVc7QUFFNUMsTUFBTUcsT0FBTyxHQUFHLENBQUMsR0FBR1AsUUFBUSxDQUFDLENBQUM7QUFDOUIsTUFBTVEsWUFBWSxHQUFHLENBQUMsQ0FBQyxDQUFDOztBQUV4QixNQUFNQyxNQUFNLEdBQUcsVUFBVSxHQUFHLENBQUMsQ0FBQyxDQUFDOztBQUUvQjtBQUNBLFNBQVNDLFlBQVksQ0FBQ0MsQ0FBUyxFQUFFQyxDQUFTLEVBQVU7RUFDbEQsTUFBTUMsRUFBRSxHQUFJRixDQUFD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
1
+ import"../chunk-KMTF2BZE.js";// lz4-ts @license BSD-3-Clause / Copyright (c) 2015, Pierre Curto / 2016, oov. All rights reserved.
2
+ const m=new Error("invalid source"),h=new Error("short buffer"),S=4,H=16,s=1<<H,E=s-1,I=16,P=1<<I,z=S*8-I,j=8+S,C=6,M=-1640531535;function q(t,i){const e=t>>>16&65535,r=t&65535,o=i>>>16&65535,n=i&65535;return r*n+(e*n+r*o<<16>>>0)|0}const v=Math.imul?Math.imul:q;function T(t,i){return t[i+3]|t[i+2]<<8|t[i+1]<<16|t[i]<<24}function k(t,i,e,r,o){for(let n=0;n<o;++n)t[e++]=i[r++]}function D(t){const i=t.length;if(i===0)return 0;let e=0,r=0;for(;;){let o=t[e]>>4,n=t[e]&15;if(++e===i)throw m;if(o>0){if(o===15){for(;t[e]===255;)if(o+=255,++e===i)throw m;if(o+=t[e],++e===i)throw m}if(r+=o,e+=o,e>=i)return r}if(e+=2,e>=i)throw m;const f=t[e-2]|t[e-1]<<8;if(r-f<0||f===0)throw m;if(n===15){for(;t[e]===255;)if(n+=255,++e===i)throw m;if(n+=t[e],++e===i)throw m}for(n+=4;n>=f;n-=f)r+=f;r+=n}}function F(t,i){const e=t.length,r=i.length;if(e===0)return 0;let o=0,n=0;for(;;){let f=t[o]>>4,x=t[o]&15;if(++o===e)throw m;if(f>0){if(f===15){for(;t[o]===255;)if(f+=255,++o===e)throw m;if(f+=t[o],++o===e)throw m}if(r-n<f||o+f>e)throw h;if(k(i,t,n,o,f),n+=f,o+=f,o>=e)return n}if(o+=2,o>=e)throw m;const w=t[o-2]|t[o-1]<<8;if(n-w<0||w===0)throw m;if(x===15){for(;t[o]===255;)if(x+=255,++o===e)throw m;if(x+=t[o],++o===e)throw m}if(x+=4,r-n<=x)throw h;for(;x>=w;x-=w)k(i,i,n,n-w,w),n+=w;k(i,i,n,n-w,x),n+=x}}function G(t){return t+(t/255|0)+16}function J(t,i,e){const r=t.length-j,o=i.length;if(r<=0||o===0||e>=r)return 0;let n=0,f=0;const x=new Uint32Array(P);for(;n<e;){const b=v(T(t,n),M)>>>z;x[b]=++n}let w=n,c=1<<C;for(;n<r-S;){const b=v(T(t,n),M)>>>z,l=x[b]-1;if(x[b]=n+1,l<0||n-l>>H>0||t[l]!==t[n]||t[l+1]!==t[n+1]||t[l+2]!==t[n+2]||t[l+3]!==t[n+3]){n+=c>>C,++c;continue}c=1<<C;const g=n-w,U=n-l;n+=S;let L=n;for(;n<=r&&t[n]===t[n-U];)n++;if(L=n-L,L<15?i[f]=L:i[f]=15,g<15)i[f]|=g<<4;else{if(i[f]|=240,++f===o)throw h;let y=g-15;for(;y>=255;y-=255)if(i[f]=255,++f===o)throw h;i[f]=y&255}if(++f===o||f+g>=o||(k(i,t,f,w,g),f+=g,w=n,f+=2,f>=o))throw h;if(i[f-2]=U,i[f-1]=U>>8,L>=15){for(L-=15;L>=255;L-=255)if(i[f]=255,++f===o)throw h;if(i[f]=L,++f===o)throw h}}if(w===0)return 0;let a=t.length-w;if(a<15)i[f]=a<<4;else{if(i[f]=240,++f===o)throw h;for(a-=15;a>=255;a-=255)if(i[f]=255,++f===o)throw h;i[f]=a}if(++f===o)throw h;const A=t.length-w,B=f+A;if(B>o)throw h;return B>=r?0:(k(i,t,f,w,A),f+=A,f)}function K(t,i,e){const r=t.length-j,o=i.length;if(r<=0||o===0||e>=r)return 0;let n=0,f=0;const x=new Uint32Array(P),w=new Uint32Array(s);for(;n<e;){const b=v(T(t,n),M)>>>z;w[n&E]=x[b],x[b]=++n}let c=n;for(;n<r-S;){const b=v(T(t,n),M)>>>z;let l=0,g=0;for(let u=x[b]-1;u>0&&u>n-s;u=w[u&E]-1)if(t[u+l]===t[n+l]){for(let p=0;;++p)if(t[u+p]!==t[n+p]||n+p>r){l<p&&p>=S&&(l=p,g=n-u);break}}if(w[n&E]=x[b],x[b]=n+1,l===0){++n;continue}let U=n+1;const L=n+l;for(;U<L;){const u=v(T(t,U),M)>>>z;w[U&E]=x[u],x[u]=++U}const y=n-c;if(n+=l,l-=S,l<15?i[f]=l:i[f]=15,y<15)i[f]|=y<<4;else{if(i[f]|=240,++f===o)throw h;let u=y-15;for(;u>=255;u-=255)if(i[f]=255,++f===o)throw h;i[f]=u&255}if(++f===o||f+y>=o||(k(i,t,f,c,y),f+=y,c=n,f+=2,f>=o))throw h;if(i[f-2]=g,i[f-1]=g>>8,l>=15){for(l-=15;l>=255;l-=255)if(i[f]=255,++f===o)throw h;if(i[f]=l,++f===o)throw h}}if(c===0)return 0;let a=t.length-c;if(a<15)i[f]=a<<4;else{if(i[f]=240,++f===o)throw h;for(a-=15;a>=255;a-=255)if(i[f]=255,++f===o)throw h;i[f]=a}if(++f===o)throw h;const A=t.length-c,B=f+A;if(B>o)throw h;return B>=r?0:(k(i,t,f,c,A),f+=A,f)}export{D as calcUncompressedLen,J as compressBlock,G as compressBlockBound,K as compressBlockHC,F as uncompressBlock};
3
+ //# sourceMappingURL=lz4.js.map