spectrogram-js 1.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.
@@ -0,0 +1,2341 @@
1
+ var pA = (() => {
2
+ var o = import.meta.url;
3
+ return (function(I = {}) {
4
+ var A = I, r, E;
5
+ A.ready = new Promise((g, i) => {
6
+ r = g, E = i;
7
+ });
8
+ var B = Object.assign({}, A), Q = "";
9
+ function e(g) {
10
+ return A.locateFile ? A.locateFile(g, Q) : Q + g;
11
+ }
12
+ typeof document < "u" && document.currentScript && (Q = document.currentScript.src), o && (Q = o), Q.indexOf("blob:") !== 0 ? Q = Q.substr(0, Q.replace(/[?#].*/, "").lastIndexOf("/") + 1) : Q = "", A.print || console.log.bind(console);
13
+ var a = A.printErr || console.error.bind(console);
14
+ Object.assign(A, B), B = null, A.arguments && A.arguments, A.thisProgram && A.thisProgram, A.quit && A.quit;
15
+ var t;
16
+ A.wasmBinary && (t = A.wasmBinary), A.noExitRuntime, typeof WebAssembly != "object" && L("no native wasm support detected");
17
+ var w, F, h = !1, D, s;
18
+ function c() {
19
+ var g = w.buffer;
20
+ A.HEAP8 = D = new Int8Array(g), A.HEAP16 = new Int16Array(g), A.HEAP32 = new Int32Array(g), A.HEAPU8 = s = new Uint8Array(g), A.HEAPU16 = new Uint16Array(g), A.HEAPU32 = new Uint32Array(g), A.HEAPF32 = new Float32Array(g), A.HEAPF64 = new Float64Array(g);
21
+ }
22
+ var l = [], R = [], f = [];
23
+ function y() {
24
+ if (A.preRun)
25
+ for (typeof A.preRun == "function" && (A.preRun = [A.preRun]); A.preRun.length; )
26
+ J(A.preRun.shift());
27
+ O(l);
28
+ }
29
+ function G() {
30
+ O(R);
31
+ }
32
+ function H() {
33
+ if (A.postRun)
34
+ for (typeof A.postRun == "function" && (A.postRun = [A.postRun]); A.postRun.length; )
35
+ P(A.postRun.shift());
36
+ O(f);
37
+ }
38
+ function J(g) {
39
+ l.unshift(g);
40
+ }
41
+ function p(g) {
42
+ R.unshift(g);
43
+ }
44
+ function P(g) {
45
+ f.unshift(g);
46
+ }
47
+ var k = 0, S = null;
48
+ function T(g) {
49
+ k++, A.monitorRunDependencies && A.monitorRunDependencies(k);
50
+ }
51
+ function K(g) {
52
+ if (k--, A.monitorRunDependencies && A.monitorRunDependencies(k), k == 0 && S) {
53
+ var i = S;
54
+ S = null, i();
55
+ }
56
+ }
57
+ function L(g) {
58
+ A.onAbort && A.onAbort(g), g = "Aborted(" + g + ")", a(g), h = !0, g += ". Build with -sASSERTIONS for more info.";
59
+ var i = new WebAssembly.RuntimeError(g);
60
+ throw E(i), i;
61
+ }
62
+ var u = "data:application/octet-stream;base64,";
63
+ function m(g) {
64
+ return g.startsWith(u);
65
+ }
66
+ var U;
67
+ U = "data:application/octet-stream;base64,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GCAZkzgCBCAHIBcgHpM4AgAgBUEIaiEFIAdBCGohByAEQQhqIQQgAUEIaiEBIABBCGohACAJQQFqIgkgBkcNAAsMAQsgBSgCACELIAlBA3QQByEIAkAgCUECSA0AIAZBAEwNACAFQYgCaiENIAlBfHEhDiAJQQNxIQogCUEBa0EDSSEPQQAhBwNAIAchAUEAIQRBACEDIA9FBEADQCAIIARBA3QiBWogACABQQN0aikCADcCACAIIAVBCHJqIAAgASAGaiIBQQN0aikCADcCACAIIAVBEHJqIAAgASAGaiIBQQN0aikCADcCACAIIAVBGHJqIAAgASAGaiIBQQN0aikCADcCACAEQQRqIQQgASAGaiEBIANBBGoiAyAORw0ACwtBACEFIAoEQANAIAggBEEDdGogACABQQN0aikCADcCACAEQQFqIQQgASAGaiEBIAVBAWoiBSAKRw0ACwsgCCkCACIvp74hFUEAIQwgByEDA0AgACADQQN0aiIFIC83AgAgAiADbCEQIAUqAgQhFEEBIQEgFSETQQAhBANAIAUgEyAIIAFBA3RqIhEqAgAiFiANIAQgEGoiBCALQQAgBCALThtrIgRBA3RqIhIqAgAiF5QgEioCBCIYIBEqAgQiGZSTkiITOAIAIAUgFCAWIBiUIBcgGZSSkiIUOAIEIAFBAWoiASAJRw0ACyADIAZqIQMgDEEBaiIMIAlHDQALIAdBAWoiByAGRw0ACwsgCBAGCwsDAAELwQEBAn8jAEEQayIBJAACfCAAvUIgiKdB/////wdxIgJB+8Ok/wNNBEBEAAAAAAAA8D8gAkGewZryA0kNARogAEQAAAAAAAAAABAEDAELIAAgAKEgAkGAgMD/B08NABoCQAJAAkACQCAAIAEQC0EDcQ4DAAECAwsgASsDACABKwMIEAQMAwsgASsDACABKwMIQQEQA5oMAgsgASsDACABKwMIEASaDAELIAErAwAgASsDCEEBEAMLIQAgAUEQaiQAIAALuBgDFH8EfAF+IwBBMGsiCCQAAkACQAJAIAC9IhpCIIinIgNB/////wdxIgZB+tS9gARNBEAgA0H//z9xQfvDJEYNASAGQfyyi4AETQRAIBpCAFkEQCABIABEAABAVPsh+b+gIgBEMWNiGmG00L2gIhY5AwAgASAAIBahRDFjYhphtNC9oDkDCEEB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IAIgC0chCiACQQFqIQIgCg0ACwsgBUGgAWogBkEDdGogADkDACAEQQBKIQIgBEEBayEEIAINAAsLRAAAAAAAAAAAIQAgA0EATgRAIAMhAgNAIAIiBEEBayECIAAgBUGgAWogBEEDdGorAwCgIQAgBA0ACwsgCCAAmiAAIAwbOQMAIAUrA6ABIAChIQBBASECIANBAEoEQANAIAAgBUGgAWogAkEDdGorAwCgIQAgAiADRyEEIAJBAWohAiAEDQALCyAIIACaIAAgDBs5AwggBUGwBGokACAHQQdxIQMgCCsDACEAIBpCAFMEQCABIACaOQMAIAEgCCsDCJo5AwhBACADayEDDAELIAEgADkDACABIAgrAwg5AwgLIAhBMGokACADC8UBAQJ/IwBBEGsiASQAAkAgAL1CIIinQf////8HcSICQfvDpP8DTQRAIAJBgIDA8gNJDQEgAEQAAAAAAAAAAEEAEAMhAAwBCyACQYCAwP8HTwRAIAAgAKEhAAwBCwJAAkACQAJAIAAgARALQQNxDgMAAQIDCyABKwMAIAErAwhBARADIQAMAwsgASsDACABKwMIEAQhAAwCCyABKwMAIAErAwhBARADmiEADAELIAErAwAgASsDCBAEmiEACyABQRBqJAAgAAuhBAEDfyABIAJGBEAgACgCAEEDdBAHIgQgAUEBQQEgAEEIaiAAEAggBCECAkAgACgCAEEDdCIDQYAETwRAIAEgAiADEAEMAQsgASADaiEAAkAgASACc0EDcUUEQAJAIAFBA3FFDQAgA0UNAANAIAEgAi0AADoAACACQQFqIQIgAUEBaiIBQQNxRQ0BIAAgAUsNAAsLAkAgAEF8cSIDQcAASQ0AIAEgA0FAaiIFSw0AA0AgASACKAIANgIAIAEgAigCBDYCBCABIAIoAgg2AgggASACKAIMNgIMIAEgAigCEDYCECABIAIoAhQ2AhQgASACKAIYNgIYIAEgAigCHDYCHCABIAIoAiA2AiAgASACKAIkNgIkIAEgAigCKDYCKCABIAIoAiw2AiwgASACKAIwNgIwIAEgAigCNDYCNCABIAIoAjg2AjggASACKAI8NgI8IAJBQGshAiABQUBrIgEgBU0NAAsLIAEgA08NAQNAIAEgAigCADYCACACQQRqIQIgAUEEaiIBIANJDQALDAELIABBBEkNACAB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", m(U) || (U = e(U));
68
+ function x(g) {
69
+ if (g == U && t)
70
+ return new Uint8Array(t);
71
+ var i = aA(g);
72
+ if (i)
73
+ return i;
74
+ throw "sync fetching of the wasm failed: you can preload it to Module['wasmBinary'] manually, or emcc.py will do that for you when generating HTML (but not JS)";
75
+ }
76
+ function Z(g, i) {
77
+ var n, d = x(g);
78
+ n = new WebAssembly.Module(d);
79
+ var Y = new WebAssembly.Instance(n, i);
80
+ return [Y, n];
81
+ }
82
+ function W() {
83
+ var g = { a: q };
84
+ function i(d, Y) {
85
+ var M = d.exports;
86
+ return F = M, w = F.c, c(), F.j, p(F.d), K(), M;
87
+ }
88
+ if (T(), A.instantiateWasm)
89
+ try {
90
+ return A.instantiateWasm(g, i);
91
+ } catch (d) {
92
+ a("Module.instantiateWasm callback failed with error: " + d), E(d);
93
+ }
94
+ var n = Z(U, g);
95
+ return i(n[0]);
96
+ }
97
+ var O = (g) => {
98
+ for (; g.length > 0; )
99
+ g.shift()(A);
100
+ }, _ = (g, i, n) => s.copyWithin(g, i, i + n), AA = (g) => {
101
+ L("OOM");
102
+ }, $ = (g) => {
103
+ s.length, AA();
104
+ };
105
+ function CA(g) {
106
+ var i = A["_" + g];
107
+ return i;
108
+ }
109
+ var EA = (g, i) => {
110
+ D.set(g, i);
111
+ }, iA = (g) => {
112
+ for (var i = 0, n = 0; n < g.length; ++n) {
113
+ var d = g.charCodeAt(n);
114
+ d <= 127 ? i++ : d <= 2047 ? i += 2 : d >= 55296 && d <= 57343 ? (i += 4, ++n) : i += 3;
115
+ }
116
+ return i;
117
+ }, IA = (g, i, n, d) => {
118
+ if (!(d > 0)) return 0;
119
+ for (var Y = n, M = n + d - 1, N = 0; N < g.length; ++N) {
120
+ var v = g.charCodeAt(N);
121
+ if (v >= 55296 && v <= 57343) {
122
+ var V = g.charCodeAt(++N);
123
+ v = 65536 + ((v & 1023) << 10) | V & 1023;
124
+ }
125
+ if (v <= 127) {
126
+ if (n >= M) break;
127
+ i[n++] = v;
128
+ } else if (v <= 2047) {
129
+ if (n + 1 >= M) break;
130
+ i[n++] = 192 | v >> 6, i[n++] = 128 | v & 63;
131
+ } else if (v <= 65535) {
132
+ if (n + 2 >= M) break;
133
+ i[n++] = 224 | v >> 12, i[n++] = 128 | v >> 6 & 63, i[n++] = 128 | v & 63;
134
+ } else {
135
+ if (n + 3 >= M) break;
136
+ i[n++] = 240 | v >> 18, i[n++] = 128 | v >> 12 & 63, i[n++] = 128 | v >> 6 & 63, i[n++] = 128 | v & 63;
137
+ }
138
+ }
139
+ return i[n] = 0, n - Y;
140
+ }, BA = (g, i, n) => IA(g, s, i, n), gA = (g) => {
141
+ var i = iA(g) + 1, n = DA(i);
142
+ return BA(g, n, i), n;
143
+ }, oA = typeof TextDecoder < "u" ? new TextDecoder("utf8") : void 0, eA = (g, i, n) => {
144
+ for (var d = i + n, Y = i; g[Y] && !(Y >= d); ) ++Y;
145
+ if (Y - i > 16 && g.buffer && oA)
146
+ return oA.decode(g.subarray(i, Y));
147
+ for (var M = ""; i < Y; ) {
148
+ var N = g[i++];
149
+ if (!(N & 128)) {
150
+ M += String.fromCharCode(N);
151
+ continue;
152
+ }
153
+ var v = g[i++] & 63;
154
+ if ((N & 224) == 192) {
155
+ M += String.fromCharCode((N & 31) << 6 | v);
156
+ continue;
157
+ }
158
+ var V = g[i++] & 63;
159
+ if ((N & 240) == 224 ? N = (N & 15) << 12 | v << 6 | V : N = (N & 7) << 18 | v << 12 | V << 6 | g[i++] & 63, N < 65536)
160
+ M += String.fromCharCode(N);
161
+ else {
162
+ var j = N - 65536;
163
+ M += String.fromCharCode(55296 | j >> 10, 56320 | j & 1023);
164
+ }
165
+ }
166
+ return M;
167
+ }, rA = (g, i) => g ? eA(s, g, i) : "", sA = function(g, i, n, d, Y) {
168
+ var M = { string: (z) => {
169
+ var YA = 0;
170
+ return z != null && z !== 0 && (YA = gA(z)), YA;
171
+ }, array: (z) => {
172
+ var YA = DA(z.length);
173
+ return EA(z, YA), YA;
174
+ } };
175
+ function N(z) {
176
+ return i === "string" ? rA(z) : i === "boolean" ? !!z : z;
177
+ }
178
+ var v = CA(g), V = [], j = 0;
179
+ if (d)
180
+ for (var tA = 0; tA < d.length; tA++) {
181
+ var wA = M[n[tA]];
182
+ wA ? (j === 0 && (j = RA()), V[tA] = wA(d[tA])) : V[tA] = d[tA];
183
+ }
184
+ var yA = v.apply(null, V);
185
+ function b(z) {
186
+ return j !== 0 && nA(j), N(z);
187
+ }
188
+ return yA = b(yA), yA;
189
+ }, FA = function(g, i, n, d) {
190
+ var Y = !n || n.every((N) => N === "number" || N === "boolean"), M = i !== "string";
191
+ return M && Y && !d ? CA(g) : function() {
192
+ return sA(g, i, n, arguments);
193
+ };
194
+ }, q = { b: _, a: $ }, QA = W();
195
+ QA.d, A._kiss_fft_free = QA.e, A._free = QA.f, A._kiss_fft_alloc = QA.g, A._malloc = QA.h, A._kiss_fft = QA.i, QA.__errno_location;
196
+ var RA = QA.k, nA = QA.l, DA = QA.m;
197
+ function cA(g) {
198
+ try {
199
+ for (var i = atob(g), n = new Uint8Array(i.length), d = 0; d < i.length; ++d)
200
+ n[d] = i.charCodeAt(d);
201
+ return n;
202
+ } catch {
203
+ throw new Error("Converting base64 string to bytes failed.");
204
+ }
205
+ }
206
+ function aA(g) {
207
+ if (m(g))
208
+ return cA(g.slice(u.length));
209
+ }
210
+ A.ccall = sA, A.cwrap = FA;
211
+ var hA;
212
+ S = function g() {
213
+ hA || C(), hA || (S = g);
214
+ };
215
+ function C() {
216
+ if (k > 0 || (y(), k > 0))
217
+ return;
218
+ function g() {
219
+ hA || (hA = !0, A.calledRun = !0, !h && (G(), r(A), A.onRuntimeInitialized && A.onRuntimeInitialized(), H()));
220
+ }
221
+ A.setStatus ? (A.setStatus("Running..."), setTimeout(function() {
222
+ setTimeout(function() {
223
+ A.setStatus("");
224
+ }, 1), g();
225
+ }, 1)) : g();
226
+ }
227
+ if (A.preInit)
228
+ for (typeof A.preInit == "function" && (A.preInit = [A.preInit]); A.preInit.length > 0; )
229
+ A.preInit.pop()();
230
+ return C(), I;
231
+ });
232
+ })(), MA = pA({}), uA = MA.cwrap("kiss_fft_alloc", "number", [
233
+ "number",
234
+ "number",
235
+ "number",
236
+ "number"
237
+ ]), PA = MA.cwrap("kiss_fft", "void", [
238
+ "number",
239
+ "number",
240
+ "number"
241
+ ]), JA = MA.cwrap("kiss_fft_free", "void", ["number"]);
242
+ class xA {
243
+ constructor(I) {
244
+ this.size = I, this.fcfg = uA(this.size, !1), this.icfg = uA(this.size, !0), this.inptr = MA._malloc(this.size * 8), this.cin = new Float32Array(
245
+ MA.HEAPU8.buffer,
246
+ this.inptr,
247
+ this.size * 2
248
+ );
249
+ }
250
+ fft = function(I) {
251
+ const A = MA._malloc(this.size * 8), r = new Float32Array(
252
+ MA.HEAPU8.buffer,
253
+ A,
254
+ this.size * 2
255
+ );
256
+ this.cin.set(I), PA(this.fcfg, this.inptr, A);
257
+ let E = new Float32Array(this.size * 2);
258
+ return E.set(r), MA._free(A), E;
259
+ };
260
+ dispose() {
261
+ JA(this.fcfg), JA(this.icfg), MA._free(this.inptr);
262
+ }
263
+ }
264
+ function fA(o) {
265
+ if (this.size = o | 0, this.size <= 1 || (this.size & this.size - 1) !== 0)
266
+ throw new Error("FFT size must be a power of two and bigger than 1");
267
+ this._csize = o << 1;
268
+ for (var I = new Array(this.size * 2), A = 0; A < I.length; A += 2) {
269
+ const a = Math.PI * A / this.size;
270
+ I[A] = Math.cos(a), I[A + 1] = -Math.sin(a);
271
+ }
272
+ this.table = I;
273
+ for (var r = 0, E = 1; this.size > E; E <<= 1) r++;
274
+ this._width = r % 2 === 0 ? r - 1 : r, this._bitrev = new Array(1 << this._width);
275
+ for (var B = 0; B < this._bitrev.length; B++) {
276
+ this._bitrev[B] = 0;
277
+ for (var Q = 0; Q < this._width; Q += 2) {
278
+ var e = this._width - Q - 2;
279
+ this._bitrev[B] |= (B >>> Q & 3) << e;
280
+ }
281
+ }
282
+ this._out = null, this._data = null, this._inv = 0;
283
+ }
284
+ fA.prototype.fromComplexArray = function(I, A) {
285
+ for (var r = A || new Array(I.length >>> 1), E = 0; E < I.length; E += 2) r[E >>> 1] = I[E];
286
+ return r;
287
+ };
288
+ fA.prototype.createComplexArray = function() {
289
+ const I = new Array(this._csize);
290
+ for (var A = 0; A < I.length; A++) I[A] = 0;
291
+ return I;
292
+ };
293
+ fA.prototype.toComplexArray = function(I, A) {
294
+ for (var r = A || this.createComplexArray(), E = 0; E < r.length; E += 2)
295
+ r[E] = I[E >>> 1], r[E + 1] = 0;
296
+ return r;
297
+ };
298
+ fA.prototype.completeSpectrum = function(I) {
299
+ for (var A = this._csize, r = A >>> 1, E = 2; E < r; E += 2)
300
+ I[A - E] = I[E], I[A - E + 1] = -I[E + 1];
301
+ };
302
+ fA.prototype.transform = function(I, A) {
303
+ if (I === A) throw new Error("Input and output buffers must be different");
304
+ this._out = I, this._data = A, this._inv = 0, this._transform4(), this._out = null, this._data = null;
305
+ };
306
+ fA.prototype.realTransform = function(I, A) {
307
+ if (I === A) throw new Error("Input and output buffers must be different");
308
+ this._out = I, this._data = A, this._inv = 0, this._realTransform4(), this._out = null, this._data = null;
309
+ };
310
+ fA.prototype.inverseTransform = function(I, A) {
311
+ if (I === A) throw new Error("Input and output buffers must be different");
312
+ this._out = I, this._data = A, this._inv = 1, this._transform4();
313
+ for (var r = 0; r < I.length; r++) I[r] /= this.size;
314
+ this._out = null, this._data = null;
315
+ };
316
+ fA.prototype._transform4 = function() {
317
+ var I = this._out, A = this._csize, r = this._width, E = 1 << r, B = A / E << 1, Q, e, a = this._bitrev;
318
+ if (B === 4)
319
+ for (Q = 0, e = 0; Q < A; Q += B, e++) {
320
+ const c = a[e];
321
+ this._singleTransform2(Q, c, E);
322
+ }
323
+ else
324
+ for (Q = 0, e = 0; Q < A; Q += B, e++) {
325
+ const c = a[e];
326
+ this._singleTransform4(Q, c, E);
327
+ }
328
+ var t = this._inv ? -1 : 1, w = this.table;
329
+ for (E >>= 2; E >= 2; E >>= 2) {
330
+ B = A / E << 1;
331
+ var F = B >>> 2;
332
+ for (Q = 0; Q < A; Q += B)
333
+ for (var h = Q + F, D = Q, s = 0; D < h; D += 2, s += E) {
334
+ const c = D, l = c + F, R = l + F, f = R + F, y = I[c], G = I[c + 1], H = I[l], J = I[l + 1], p = I[R], P = I[R + 1], k = I[f], S = I[f + 1], T = y, K = G, L = w[s], u = t * w[s + 1], m = H * L - J * u, U = H * u + J * L, x = w[2 * s], Z = t * w[2 * s + 1], W = p * x - P * Z, O = p * Z + P * x, _ = w[3 * s], AA = t * w[3 * s + 1], $ = k * _ - S * AA, CA = k * AA + S * _, EA = T + W, iA = K + O, IA = T - W, BA = K - O, gA = m + $, oA = U + CA, eA = t * (m - $), rA = t * (U - CA), sA = EA + gA, FA = iA + oA, q = EA - gA, QA = iA - oA, RA = IA + rA, nA = BA - eA, DA = IA - rA, cA = BA + eA;
335
+ I[c] = sA, I[c + 1] = FA, I[l] = RA, I[l + 1] = nA, I[R] = q, I[R + 1] = QA, I[f] = DA, I[f + 1] = cA;
336
+ }
337
+ }
338
+ };
339
+ fA.prototype._singleTransform2 = function(I, A, r) {
340
+ const E = this._out, B = this._data, Q = B[A], e = B[A + 1], a = B[A + r], t = B[A + r + 1], w = Q + a, F = e + t, h = Q - a, D = e - t;
341
+ E[I] = w, E[I + 1] = F, E[I + 2] = h, E[I + 3] = D;
342
+ };
343
+ fA.prototype._singleTransform4 = function(I, A, r) {
344
+ const E = this._out, B = this._data, Q = this._inv ? -1 : 1, e = r * 2, a = r * 3, t = B[A], w = B[A + 1], F = B[A + r], h = B[A + r + 1], D = B[A + e], s = B[A + e + 1], c = B[A + a], l = B[A + a + 1], R = t + D, f = w + s, y = t - D, G = w - s, H = F + c, J = h + l, p = Q * (F - c), P = Q * (h - l), k = R + H, S = f + J, T = y + P, K = G - p, L = R - H, u = f - J, m = y - P, U = G + p;
345
+ E[I] = k, E[I + 1] = S, E[I + 2] = T, E[I + 3] = K, E[I + 4] = L, E[I + 5] = u, E[I + 6] = m, E[I + 7] = U;
346
+ };
347
+ fA.prototype._realTransform4 = function() {
348
+ var I = this._out, A = this._csize, r = this._width, E = 1 << r, B = A / E << 1, Q, e, a = this._bitrev;
349
+ if (B === 4)
350
+ for (Q = 0, e = 0; Q < A; Q += B, e++) {
351
+ const tA = a[e];
352
+ this._singleRealTransform2(Q, tA >>> 1, E >>> 1);
353
+ }
354
+ else
355
+ for (Q = 0, e = 0; Q < A; Q += B, e++) {
356
+ const tA = a[e];
357
+ this._singleRealTransform4(Q, tA >>> 1, E >>> 1);
358
+ }
359
+ var t = this._inv ? -1 : 1, w = this.table;
360
+ for (E >>= 2; E >= 2; E >>= 2) {
361
+ B = A / E << 1;
362
+ var F = B >>> 1, h = F >>> 1, D = h >>> 1;
363
+ for (Q = 0; Q < A; Q += B)
364
+ for (var s = 0, c = 0; s <= D; s += 2, c += E) {
365
+ var l = Q + s, R = l + h, f = R + h, y = f + h, G = I[l], H = I[l + 1], J = I[R], p = I[R + 1], P = I[f], k = I[f + 1], S = I[y], T = I[y + 1], K = G, L = H, u = w[c], m = t * w[c + 1], U = J * u - p * m, x = J * m + p * u, Z = w[2 * c], W = t * w[2 * c + 1], O = P * Z - k * W, _ = P * W + k * Z, AA = w[3 * c], $ = t * w[3 * c + 1], CA = S * AA - T * $, EA = S * $ + T * AA, iA = K + O, IA = L + _, BA = K - O, gA = L - _, oA = U + CA, eA = x + EA, rA = t * (U - CA), sA = t * (x - EA), FA = iA + oA, q = IA + eA, QA = BA + sA, RA = gA - rA;
366
+ if (I[l] = FA, I[l + 1] = q, I[R] = QA, I[R + 1] = RA, s === 0) {
367
+ var nA = iA - oA, DA = IA - eA;
368
+ I[f] = nA, I[f + 1] = DA;
369
+ continue;
370
+ }
371
+ if (s !== D) {
372
+ var cA = BA, aA = -gA, hA = iA, C = -IA, g = -t * sA, i = -t * rA, n = -t * eA, d = -t * oA, Y = cA + g, M = aA + i, N = hA + d, v = C - n, V = Q + h - s, j = Q + F - s;
373
+ I[V] = Y, I[V + 1] = M, I[j] = N, I[j + 1] = v;
374
+ }
375
+ }
376
+ }
377
+ };
378
+ fA.prototype._singleRealTransform2 = function(I, A, r) {
379
+ const E = this._out, B = this._data, Q = B[A], e = B[A + r], a = Q + e, t = Q - e;
380
+ E[I] = a, E[I + 1] = 0, E[I + 2] = t, E[I + 3] = 0;
381
+ };
382
+ fA.prototype._singleRealTransform4 = function(I, A, r) {
383
+ const E = this._out, B = this._data, Q = this._inv ? -1 : 1, e = r * 2, a = r * 3, t = B[A], w = B[A + r], F = B[A + e], h = B[A + a], D = t + F, s = t - F, c = w + h, l = Q * (w - h), R = D + c, f = s, y = -l, G = D - c, H = s, J = l;
384
+ E[I] = R, E[I + 1] = 0, E[I + 2] = f, E[I + 3] = y, E[I + 4] = G, E[I + 5] = 0, E[I + 6] = H, E[I + 7] = J;
385
+ };
386
+ class LA {
387
+ constructor(I) {
388
+ this.size = I, this.indutnyFft = new fA(I);
389
+ }
390
+ fft(I) {
391
+ const A = new Float32Array(2 * this.size);
392
+ return this.indutnyFft.transform(A, I), A;
393
+ }
394
+ }
395
+ var WA = (() => {
396
+ var o = import.meta.url;
397
+ return (function(I = {}) {
398
+ var A = I, r, E;
399
+ A.ready = new Promise((C, g) => {
400
+ r = C, E = g;
401
+ });
402
+ var B = Object.assign({}, A), Q = "";
403
+ function e(C) {
404
+ return A.locateFile ? A.locateFile(C, Q) : Q + C;
405
+ }
406
+ typeof document < "u" && document.currentScript && (Q = document.currentScript.src), o && (Q = o), Q.indexOf("blob:") !== 0 ? Q = Q.substr(0, Q.replace(/[?#].*/, "").lastIndexOf("/") + 1) : Q = "", A.print || console.log.bind(console);
407
+ var a = A.printErr || console.error.bind(console);
408
+ Object.assign(A, B), B = null, A.arguments && A.arguments, A.thisProgram && A.thisProgram, A.quit && A.quit;
409
+ var t;
410
+ A.wasmBinary && (t = A.wasmBinary), A.noExitRuntime, typeof WebAssembly != "object" && L("no native wasm support detected");
411
+ var w, F, h = !1, D, s;
412
+ function c() {
413
+ var C = w.buffer;
414
+ A.HEAP8 = D = new Int8Array(C), A.HEAP16 = new Int16Array(C), A.HEAP32 = new Int32Array(C), A.HEAPU8 = s = new Uint8Array(C), A.HEAPU16 = new Uint16Array(C), A.HEAPU32 = new Uint32Array(C), A.HEAPF32 = new Float32Array(C), A.HEAPF64 = new Float64Array(C);
415
+ }
416
+ var l = [], R = [], f = [];
417
+ function y() {
418
+ if (A.preRun)
419
+ for (typeof A.preRun == "function" && (A.preRun = [A.preRun]); A.preRun.length; )
420
+ J(A.preRun.shift());
421
+ O(l);
422
+ }
423
+ function G() {
424
+ O(R);
425
+ }
426
+ function H() {
427
+ if (A.postRun)
428
+ for (typeof A.postRun == "function" && (A.postRun = [A.postRun]); A.postRun.length; )
429
+ P(A.postRun.shift());
430
+ O(f);
431
+ }
432
+ function J(C) {
433
+ l.unshift(C);
434
+ }
435
+ function p(C) {
436
+ R.unshift(C);
437
+ }
438
+ function P(C) {
439
+ f.unshift(C);
440
+ }
441
+ var k = 0, S = null;
442
+ function T(C) {
443
+ k++, A.monitorRunDependencies && A.monitorRunDependencies(k);
444
+ }
445
+ function K(C) {
446
+ if (k--, A.monitorRunDependencies && A.monitorRunDependencies(k), k == 0 && S) {
447
+ var g = S;
448
+ S = null, g();
449
+ }
450
+ }
451
+ function L(C) {
452
+ A.onAbort && A.onAbort(C), C = "Aborted(" + C + ")", a(C), h = !0, C += ". Build with -sASSERTIONS for more info.";
453
+ var g = new WebAssembly.RuntimeError(C);
454
+ throw E(g), g;
455
+ }
456
+ var u = "data:application/octet-stream;base64,";
457
+ function m(C) {
458
+ return C.startsWith(u);
459
+ }
460
+ var U;
461
+ U = "data:application/octet-stream;base64,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ACACSwRAQbgeIAI2AgALIAIgBmohAUHoISEAAkACQAJAA0AgASAAKAIARwRAIAAoAggiAA0BDAILCyAALQAMQQhxRQ0BC0HoISEAA0AgAyAAKAIAIgFPBEAgASAAKAIEaiIEIANLDQMLIAAoAgghAAwACwALIAAgAjYCACAAIAAoAgQgBmo2AgQgAkF4IAJrQQdxaiIHIAVBA3I2AgQgAUF4IAFrQQdxaiIGIAUgB2oiBWshACADIAZGBEBBwB4gBTYCAEG0HkG0HigCACAAaiIANgIAIAUgAEEBcjYCBAwIC0G8HigCACAGRgRAQbweIAU2AgBBsB5BsB4oAgAgAGoiADYCACAFIABBAXI2AgQgACAFaiAANgIADAgLIAYoAgQiA0EDcUEBRw0GIANBeHEhCSADQf8BTQRAIAYoAgwiASAGKAIIIgJGBEBBqB5BqB4oAgBBfiADQQN2d3E2AgAMBwsgAiABNgIMIAEgAjYCCAwGCyAGKAIYIQggBiAGKAIMIgJHBEAgBigCCCIBIAI2AgwgAiABNgIIDAULIAZBFGoiASgCACIDRQRAIAYoAhAiA0UNBCAGQRBqIQELA0AgASEEIAMiAkEUaiIBKAIAIgMNACACQRBqIQEgAigCECIDDQALIARBADYCAAwEC0G0HiAGQShrIgBBeCACa0EHcSIBayIINgIAQcAeIAEgAmoiATYCACABIAhBAXI2AgQgACACakEoNgIEQcQeQZAiKAIANgIAIAMgBEEnIARrQQdxakEvayIAIAAgA0EQakkbIgFBGzYCBCABQfAhKQIANwIQIAFB6CEpAgA3AghB8CEgAUEIajYCAEHsISAGNgIAQeghIAI2AgBB9CFBADYCACABQRhqIQADQCAAQQc2AgQgAEEIaiECIABBBGohACACIARJDQALIAEgA0YNACABIAEoAgRBfnE2AgQgAyABIANrIgJBAXI2AgQgASACNgIAIAJB/wFNBEAgAkF4cUHQHmohAAJ/QageKAIAIgFBASACQQN2dCICcUUEQEGoHiABIAJyNgIAIAAMAQsgACgCCAshASAAIAM2AgggASADNgIMIAMgADYCDCADIAE2AggMAQtBHyEAIAJB////B00EQCACQSYgAkEIdmciAGt2QQFxIABBAXRrQT5qIQALIAMgADYCHCADQgA3AhAgAEECdEHY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", m(U) || (U = e(U));
462
+ function x(C) {
463
+ if (C == U && t)
464
+ return new Uint8Array(t);
465
+ var g = cA(C);
466
+ if (g)
467
+ return g;
468
+ throw "sync fetching of the wasm failed: you can preload it to Module['wasmBinary'] manually, or emcc.py will do that for you when generating HTML (but not JS)";
469
+ }
470
+ function Z(C, g) {
471
+ var i, n = x(C);
472
+ i = new WebAssembly.Module(n);
473
+ var d = new WebAssembly.Instance(i, g);
474
+ return [d, i];
475
+ }
476
+ function W() {
477
+ var C = { a: FA };
478
+ function g(n, d) {
479
+ var Y = n.exports;
480
+ return F = Y, w = F.b, c(), F.e, p(F.c), K(), Y;
481
+ }
482
+ if (T(), A.instantiateWasm)
483
+ try {
484
+ return A.instantiateWasm(C, g);
485
+ } catch (n) {
486
+ a("Module.instantiateWasm callback failed with error: " + n), E(n);
487
+ }
488
+ var i = Z(U, C);
489
+ return g(i[0]);
490
+ }
491
+ var O = (C) => {
492
+ for (; C.length > 0; )
493
+ C.shift()(A);
494
+ }, _ = (C) => {
495
+ L("OOM");
496
+ }, AA = (C) => {
497
+ s.length, _();
498
+ };
499
+ function $(C) {
500
+ var g = A["_" + C];
501
+ return g;
502
+ }
503
+ var CA = (C, g) => {
504
+ D.set(C, g);
505
+ }, EA = (C) => {
506
+ for (var g = 0, i = 0; i < C.length; ++i) {
507
+ var n = C.charCodeAt(i);
508
+ n <= 127 ? g++ : n <= 2047 ? g += 2 : n >= 55296 && n <= 57343 ? (g += 4, ++i) : g += 3;
509
+ }
510
+ return g;
511
+ }, iA = (C, g, i, n) => {
512
+ if (!(n > 0)) return 0;
513
+ for (var d = i, Y = i + n - 1, M = 0; M < C.length; ++M) {
514
+ var N = C.charCodeAt(M);
515
+ if (N >= 55296 && N <= 57343) {
516
+ var v = C.charCodeAt(++M);
517
+ N = 65536 + ((N & 1023) << 10) | v & 1023;
518
+ }
519
+ if (N <= 127) {
520
+ if (i >= Y) break;
521
+ g[i++] = N;
522
+ } else if (N <= 2047) {
523
+ if (i + 1 >= Y) break;
524
+ g[i++] = 192 | N >> 6, g[i++] = 128 | N & 63;
525
+ } else if (N <= 65535) {
526
+ if (i + 2 >= Y) break;
527
+ g[i++] = 224 | N >> 12, g[i++] = 128 | N >> 6 & 63, g[i++] = 128 | N & 63;
528
+ } else {
529
+ if (i + 3 >= Y) break;
530
+ g[i++] = 240 | N >> 18, g[i++] = 128 | N >> 12 & 63, g[i++] = 128 | N >> 6 & 63, g[i++] = 128 | N & 63;
531
+ }
532
+ }
533
+ return g[i] = 0, i - d;
534
+ }, IA = (C, g, i) => iA(C, s, g, i), BA = (C) => {
535
+ var g = EA(C) + 1, i = nA(g);
536
+ return IA(C, i, g), i;
537
+ }, gA = typeof TextDecoder < "u" ? new TextDecoder("utf8") : void 0, oA = (C, g, i) => {
538
+ for (var n = g + i, d = g; C[d] && !(d >= n); ) ++d;
539
+ if (d - g > 16 && C.buffer && gA)
540
+ return gA.decode(C.subarray(g, d));
541
+ for (var Y = ""; g < d; ) {
542
+ var M = C[g++];
543
+ if (!(M & 128)) {
544
+ Y += String.fromCharCode(M);
545
+ continue;
546
+ }
547
+ var N = C[g++] & 63;
548
+ if ((M & 224) == 192) {
549
+ Y += String.fromCharCode((M & 31) << 6 | N);
550
+ continue;
551
+ }
552
+ var v = C[g++] & 63;
553
+ if ((M & 240) == 224 ? M = (M & 15) << 12 | N << 6 | v : M = (M & 7) << 18 | N << 12 | v << 6 | C[g++] & 63, M < 65536)
554
+ Y += String.fromCharCode(M);
555
+ else {
556
+ var V = M - 65536;
557
+ Y += String.fromCharCode(55296 | V >> 10, 56320 | V & 1023);
558
+ }
559
+ }
560
+ return Y;
561
+ }, eA = (C, g) => C ? oA(s, C, g) : "", rA = function(C, g, i, n, d) {
562
+ var Y = { string: (b) => {
563
+ var z = 0;
564
+ return b != null && b !== 0 && (z = BA(b)), z;
565
+ }, array: (b) => {
566
+ var z = nA(b.length);
567
+ return CA(b, z), z;
568
+ } };
569
+ function M(b) {
570
+ return g === "string" ? eA(b) : g === "boolean" ? !!b : b;
571
+ }
572
+ var N = $(C), v = [], V = 0;
573
+ if (n)
574
+ for (var j = 0; j < n.length; j++) {
575
+ var tA = Y[i[j]];
576
+ tA ? (V === 0 && (V = QA()), v[j] = tA(n[j])) : v[j] = n[j];
577
+ }
578
+ var wA = N.apply(null, v);
579
+ function yA(b) {
580
+ return V !== 0 && RA(V), M(b);
581
+ }
582
+ return wA = yA(wA), wA;
583
+ }, sA = function(C, g, i, n) {
584
+ var d = !i || i.every((M) => M === "number" || M === "boolean"), Y = g !== "string";
585
+ return Y && d && !n ? $(C) : function() {
586
+ return rA(C, g, i, arguments);
587
+ };
588
+ }, FA = { a: AA }, q = W();
589
+ q.c, A._fftCross = q.d, q.__errno_location, A._malloc = q.f, A._free = q.g;
590
+ var QA = q.h, RA = q.i, nA = q.j;
591
+ function DA(C) {
592
+ try {
593
+ for (var g = atob(C), i = new Uint8Array(g.length), n = 0; n < g.length; ++n)
594
+ i[n] = g.charCodeAt(n);
595
+ return i;
596
+ } catch {
597
+ throw new Error("Converting base64 string to bytes failed.");
598
+ }
599
+ }
600
+ function cA(C) {
601
+ if (m(C))
602
+ return DA(C.slice(u.length));
603
+ }
604
+ A.ccall = rA, A.cwrap = sA;
605
+ var aA;
606
+ S = function C() {
607
+ aA || hA(), aA || (S = C);
608
+ };
609
+ function hA() {
610
+ if (k > 0 || (y(), k > 0))
611
+ return;
612
+ function C() {
613
+ aA || (aA = !0, A.calledRun = !0, !h && (G(), r(A), A.onRuntimeInitialized && A.onRuntimeInitialized(), H()));
614
+ }
615
+ A.setStatus ? (A.setStatus("Running..."), setTimeout(function() {
616
+ setTimeout(function() {
617
+ A.setStatus("");
618
+ }, 1), C();
619
+ }, 1)) : C();
620
+ }
621
+ if (A.preInit)
622
+ for (typeof A.preInit == "function" && (A.preInit = [A.preInit]); A.preInit.length > 0; )
623
+ A.preInit.pop()();
624
+ return hA(), I;
625
+ });
626
+ })(), dA = WA({}), VA = dA.cwrap("fftCross", "void", [
627
+ "number",
628
+ "number",
629
+ "number",
630
+ "number",
631
+ "number",
632
+ "number"
633
+ ]);
634
+ function jA(o) {
635
+ this.size = o, this.n = o * 8, this.ptr = dA._malloc(this.n * 4), this.ri = new Uint8Array(dA.HEAPU8.buffer, this.ptr, this.n), this.ii = new Uint8Array(
636
+ dA.HEAPU8.buffer,
637
+ this.ptr + this.n,
638
+ this.n
639
+ ), this.transform = function(I, A, r) {
640
+ var E = this.ptr, B = this.n;
641
+ this.ri.set(new Uint8Array(I.buffer)), this.ii.set(new Uint8Array(A.buffer)), VA(this.size, r, E, E + B, E + B * 2, E + B * 3);
642
+ var Q = new Float64Array(
643
+ dA.HEAPU8.buffer,
644
+ E + B * 2,
645
+ this.size
646
+ ), e = new Float64Array(
647
+ dA.HEAPU8.buffer,
648
+ E + B * 3,
649
+ this.size
650
+ );
651
+ return { real: Q, imag: e };
652
+ }, this.dispose = function() {
653
+ dA._free(this.ptr);
654
+ };
655
+ }
656
+ class XA {
657
+ constructor(I) {
658
+ this.size = I, this.fftcross = new jA(I), this.real = new Float64Array(this.size), this.imag = new Float64Array(this.size);
659
+ }
660
+ fft(I) {
661
+ for (var A = 0; A < this.size; A++)
662
+ this.real[A] = I[2 * A], this.imag[A] = I[2 * A + 1];
663
+ const r = this.fftcross.transform(this.real, this.imag, !1), E = new Float32Array(2 * this.size);
664
+ for (var A = 0; A < this.size; A++)
665
+ E[2 * A] = r.real[A], E[2 * A + 1] = r.imag[A];
666
+ return E;
667
+ }
668
+ }
669
+ function ZA(o) {
670
+ this.n = o, this.levels = -1;
671
+ for (var I = 0; I < 32; I++)
672
+ 1 << I == o && (this.levels = I);
673
+ if (this.levels == -1)
674
+ throw "Length is not a power of 2";
675
+ this.cosTable = new Array(o / 2), this.sinTable = new Array(o / 2);
676
+ for (var I = 0; I < o / 2; I++)
677
+ this.cosTable[I] = Math.cos(2 * Math.PI * I / o), this.sinTable[I] = Math.sin(2 * Math.PI * I / o);
678
+ this.forward = function(A, r) {
679
+ for (var E = this.n, B = 0; B < E; B++) {
680
+ var Q = s(B, this.levels);
681
+ if (Q > B) {
682
+ var e = A[B];
683
+ A[B] = A[Q], A[Q] = e, e = r[B], r[B] = r[Q], r[Q] = e;
684
+ }
685
+ }
686
+ for (var a = 2; a <= E; a *= 2)
687
+ for (var t = a / 2, w = E / a, B = 0; B < E; B += a)
688
+ for (var Q = B, F = 0; Q < B + t; Q++, F += w) {
689
+ var h = A[Q + t] * this.cosTable[F] + r[Q + t] * this.sinTable[F], D = -A[Q + t] * this.sinTable[F] + r[Q + t] * this.cosTable[F];
690
+ A[Q + t] = A[Q] - h, r[Q + t] = r[Q] - D, A[Q] += h, r[Q] += D;
691
+ }
692
+ function s(c, l) {
693
+ for (var R = 0, f = 0; f < l; f++)
694
+ R = R << 1 | c & 1, c >>>= 1;
695
+ return R;
696
+ }
697
+ }, this.inverse = function(A, r) {
698
+ forward(r, A);
699
+ };
700
+ }
701
+ class OA {
702
+ constructor(I) {
703
+ this.size = I, this.fftNayuki = new ZA(I);
704
+ }
705
+ fft(I) {
706
+ const A = new Float32Array(this.size), r = new Float32Array(this.size), E = new Float32Array(this.size * 2);
707
+ for (var B = 0; B < this.size; ++B)
708
+ A[B] = I[B * 2], r[B] = I[B * 2 + 1];
709
+ this.fftNayuki.forward(A, r);
710
+ for (var B = 0; B < this.size; ++B)
711
+ E[B * 2] = A[B], E[B * 2 + 1] = r[B];
712
+ return E;
713
+ }
714
+ }
715
+ var zA = (() => {
716
+ var o = import.meta.url;
717
+ return (function(I = {}) {
718
+ var A = I, r, E;
719
+ A.ready = new Promise((C, g) => {
720
+ r = C, E = g;
721
+ });
722
+ var B = Object.assign({}, A), Q = "";
723
+ function e(C) {
724
+ return A.locateFile ? A.locateFile(C, Q) : Q + C;
725
+ }
726
+ typeof document < "u" && document.currentScript && (Q = document.currentScript.src), o && (Q = o), Q.indexOf("blob:") !== 0 ? Q = Q.substr(0, Q.replace(/[?#].*/, "").lastIndexOf("/") + 1) : Q = "", A.print || console.log.bind(console);
727
+ var a = A.printErr || console.error.bind(console);
728
+ Object.assign(A, B), B = null, A.arguments && A.arguments, A.thisProgram && A.thisProgram, A.quit && A.quit;
729
+ var t;
730
+ A.wasmBinary && (t = A.wasmBinary), A.noExitRuntime, typeof WebAssembly != "object" && L("no native wasm support detected");
731
+ var w, F, h = !1, D, s;
732
+ function c() {
733
+ var C = w.buffer;
734
+ A.HEAP8 = D = new Int8Array(C), A.HEAP16 = new Int16Array(C), A.HEAP32 = new Int32Array(C), A.HEAPU8 = s = new Uint8Array(C), A.HEAPU16 = new Uint16Array(C), A.HEAPU32 = new Uint32Array(C), A.HEAPF32 = new Float32Array(C), A.HEAPF64 = new Float64Array(C);
735
+ }
736
+ var l = [], R = [], f = [];
737
+ function y() {
738
+ if (A.preRun)
739
+ for (typeof A.preRun == "function" && (A.preRun = [A.preRun]); A.preRun.length; )
740
+ J(A.preRun.shift());
741
+ O(l);
742
+ }
743
+ function G() {
744
+ O(R);
745
+ }
746
+ function H() {
747
+ if (A.postRun)
748
+ for (typeof A.postRun == "function" && (A.postRun = [A.postRun]); A.postRun.length; )
749
+ P(A.postRun.shift());
750
+ O(f);
751
+ }
752
+ function J(C) {
753
+ l.unshift(C);
754
+ }
755
+ function p(C) {
756
+ R.unshift(C);
757
+ }
758
+ function P(C) {
759
+ f.unshift(C);
760
+ }
761
+ var k = 0, S = null;
762
+ function T(C) {
763
+ k++, A.monitorRunDependencies && A.monitorRunDependencies(k);
764
+ }
765
+ function K(C) {
766
+ if (k--, A.monitorRunDependencies && A.monitorRunDependencies(k), k == 0 && S) {
767
+ var g = S;
768
+ S = null, g();
769
+ }
770
+ }
771
+ function L(C) {
772
+ A.onAbort && A.onAbort(C), C = "Aborted(" + C + ")", a(C), h = !0, C += ". Build with -sASSERTIONS for more info.";
773
+ var g = new WebAssembly.RuntimeError(C);
774
+ throw E(g), g;
775
+ }
776
+ var u = "data:application/octet-stream;base64,";
777
+ function m(C) {
778
+ return C.startsWith(u);
779
+ }
780
+ var U;
781
+ U = "data:application/octet-stream;base64,AGFzbQEAAAABNgpgAX8Bf2ABfwBgBH9/f38AYAN8fH8BfGACfHwBfGACfH8BfGABfAF8YAAAYAJ8fwF/YAABfwIHAQFhAWEAAAMSEQEAAAMEBQYHCAECAgAAAQkABAUBcAEBAQUGAQGAAoACBggBfwFBoKIECwc5DgFiAgABYwAIAWQAAgFlAAEBZgARAWcADQFoAAoBaQAKAWoADAFrAAsBbAEAAW0AEAFuAA8BbwAOCvdfEdILAQd/AkAgAEUNACAAQQhrIgIgAEEEaygCACIBQXhxIgBqIQUCQCABQQFxDQAgAUEDcUUNASACIAIoAgAiAWsiAkG4HigCAEkNASAAIAFqIQACQAJAQbweKAIAIAJHBEAgAUH/AU0EQCABQQN2IQQgAigCDCIBIAIoAggiA0YEQEGoHkGoHigCAEF+IAR3cTYCAAwFCyADIAE2AgwgASADNgIIDAQLIAIoAhghBiACIAIoAgwiAUcEQCACKAIIIgMgATYCDCABIAM2AggMAwsgAkEUaiIEKAIAIgNFBEAgAigCECIDRQ0CIAJBEGohBAsDQCAEIQcgAyIBQRRqIgQoAgAiAw0AIAFBEGohBCABKAIQIgMNAAsgB0EANgIADAILIAUoAgQiAUEDcUEDRw0CQbAeIAA2AgAgBSABQX5xNgIEIAIgAEEBcjYCBCAFIAA2AgAPC0EAIQELIAZFDQACQCACKAIcIgNBAnRB2CBqIgQoAgAgAkYEQCAEIAE2AgAgAQ0BQaweQaweKAIAQX4gA3dxNgIADAILIAZBEEEUIAYoAhAgAkYbaiABNgIAIAFFDQELIAEgBjYCGCACKAIQIgMEQCABIAM2AhAgAyABNgIYCyACKAIUIgNFDQAgASADNgIUIAMgATYCGAsgAiAFTw0AIAUoAgQiAUEBcUUNAAJAAkACQAJAIAFBAnFFBEBBwB4oAgAgBUYEQEHAHiACNgIAQbQeQbQeKAIAIABqIgA2AgAgAiAAQQFyNgIEIAJBvB4oAgBHDQZBsB5BADYCAEG8HkEANgIADwtBvB4oAgAgBUYEQEG8HiACNgIAQbAeQbAeKAIAIABqIgA2AgAgAiAAQQFyNgIEIAAgAmogADYCAA8LIAFBeHEgAGohACABQf8BTQRAIAFBA3YhBCAFKAIMIgEgBSgCCCIDRgRAQageQageKAIAQX4gBHdxNgIADAULIAMgATYCDCABIAM2AggMBAsgBSgCGCEGIAUgBSgCDCIBRwRAQbgeKAIAGiAFKAIIIgMgATYCDCABIAM2AggMAwsgBUEUaiIEKAIAIgNFBEAgBSgCECIDRQ0CIAVBEGohBAsDQCAEIQcgAyIBQRRqIgQoAgAiAw0AIAFBEGohBCABKAIQIgMNAAsgB0EANgIADAILIAUgAUF+cTYCBCACIABBAXI2AgQgACACaiAANgIADAMLQQAhAQsgBkUNAAJAIAUoAhwiA0ECdEHYIGoiBCgCACAFRgRAIAQgATYCACABDQFBrB5BrB4oAgBBfiADd3E2AgAMAgsgBkEQQRQgBigCECAFRhtqIAE2AgAgAUUNAQsgASAGNgIYIAUoAhAiAwRAIAEgAzYCECADIAE2AhgLIAUoAhQiA0UNACABIAM2AhQgAyABNgIYCyACIABBAXI2AgQgACACaiAANgIAIAJBvB4oAgBHDQBBsB4gADYCAA8LIABB/wFNBEAgAEF4cUHQHmohAQJ/QageKAIAIgNBASAAQQN2dCIAcUUEQEGoHiAAIANyNgIAIAEMAQsgASgCCAshACABIAI2AgggACACNgIMIAIgATYCDCACIAA2AggPC0EfIQMgAEH///8HTQRAIABBJiAAQQh2ZyIBa3ZBAXEgAUEBdGtBPmohAwsgAiADNgIcIAJCADcCECADQQJ0QdggaiEBAkACQAJAQaweKAIAIgRBASADdCIHcUUEQEGsHiAEIAdyNgIAIAEgAjYCACACIAE2AhgMAQsgAEEZIANBAXZrQQAgA0EfRxt0IQMgASgCACEBA0AgASIEKAIEQXhxIABGDQIgA0EddiEBIANBAXQhAyAEIAFBBHFqIgdBEGooAgAiAQ0ACyAHIAI2AhAgAiAENgIYCyACIAI2AgwgAiACNgIIDAELIAQoAggiACACNgIMIAQgAjYCCCACQQA2AhggAiAENgIMIAIgADYCCAtByB5ByB4oAgBBAWsiAEF/IAAbNgIACwvGJwELfyMAQRBrIgokAAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAgAEH0AU0EQEGoHigCACIGQRAgAEELakF4cSAAQQtJGyIFQQN2IgB2IgFBA3EEQAJAIAFBf3NBAXEgAGoiAkEDdCIBQdAeaiIAIAFB2B5qKAIAIgEoAggiBEYEQEGoHiAGQX4gAndxNgIADAELIAQgADYCDCAAIAQ2AggLIAFBCGohACABIAJBA3QiAkEDcjYCBCABIAJqIgEgASgCBEEBcjYCBAwPCyAFQbAeKAIAIgdNDQEgAQRAAkBBAiAAdCICQQAgAmtyIAEgAHRxaCIBQQN0IgBB0B5qIgIgAEHYHmooAgAiACgCCCIERgRAQageIAZBfiABd3EiBjYCAAwBCyAEIAI2AgwgAiAENgIICyAAIAVBA3I2AgQgACAFaiIIIAFBA3QiASAFayIEQQFyNgIEIAAgAWogBDYCACAHBEAgB0F4cUHQHmohAUG8HigCACECAn8gBkEBIAdBA3Z0IgNxRQRAQageIAMgBnI2AgAgAQwBCyABKAIICyEDIAEgAjYCCCADIAI2AgwgAiABNgIMIAIgAzYCCAsgAEEIaiEAQbweIAg2AgBBsB4gBDYCAAwPC0GsHigCACILRQ0BIAtoQQJ0QdggaigCACICKAIEQXhxIAVrIQMgAiEBA0ACQCABKAIQIgBFBEAgASgCFCIARQ0BCyAAKAIEQXhxIAVrIgEgAyABIANJIgEbIQMgACACIAEbIQIgACEBDAELCyACKAIYIQkgAiACKAIMIgRHBEBBuB4oAgAaIAIoAggiACAENgIMIAQgADYCCAwOCyACQRRqIgEoAgAiAEUEQCACKAIQIgBFDQMgAkEQaiEBCwNAIAEhCCAAIgRBFGoiASgCACIADQAgBEEQaiEBIAQoAhAiAA0ACyAIQQA2AgAMDQtBfyEFIABBv39LDQAgAEELaiIAQXhxIQVBrB4oAgAiCEUNAEEAIAVrIQMCQAJAAkACf0EAIAVBgAJJDQAaQR8gBUH///8HSw0AGiAFQSYgAEEIdmciAGt2QQFxIABBAXRrQT5qCyIHQQJ0QdggaigCACIBRQRAQQAhAAwBC0EAIQAgBUEZIAdBAXZrQQAgB0EfRxt0IQIDQAJAIAEoAgRBeHEgBWsiBiADTw0AIAEhBCAGIgMNAEEAIQMgASEADAMLIAAgASgCFCIGIAYgASACQR12QQRxaigCECIBRhsgACAGGyEAIAJBAXQhAiABDQALCyAAIARyRQRAQQAhBEECIAd0IgBBACAAa3IgCHEiAEUNAyAAaEECdEHYIGooAgAhAAsgAEUNAQsDQCAAKAIEQXhxIAVrIgIgA0khASACIAMgARshAyAAIAQgARshBCAAKAIQIgEEfyABBSAAKAIUCyIADQALCyAERQ0AIANBsB4oAgAgBWtPDQAgBCgCGCEHIAQgBCgCDCICRwRAQbgeKAIAGiAEKAIIIgAgAjYCDCACIAA2AggMDAsgBEEUaiIBKAIAIgBFBEAgBCgCECIARQ0DIARBEGohAQsDQCABIQYgACICQRRqIgEoAgAiAA0AIAJBEGohASACKAIQIgANAAsgBkEANgIADAsLIAVBsB4oAgAiBE0EQEG8HigCACEAAkAgBCAFayIBQRBPBEAgACAFaiICIAFBAXI2AgQgACAEaiABNgIAIAAgBUEDcjYCBAwBCyAAIARBA3I2AgQgACAEaiIBIAEoAgRBAXI2AgRBACECQQAhAQtBsB4gATYCAEG8HiACNgIAIABBCGohAAwNCyAFQbQeKAIAIgJJBEBBtB4gAiAFayIBNgIAQcAeQcAeKAIAIgAgBWoiAjYCACACIAFBAXI2AgQgACAFQQNyNgIEIABBCGohAAwNC0EAIQAgBUEvaiIDAn9BgCIoAgAEQEGIIigCAAwBC0GMIkJ/NwIAQYQiQoCggICAgAQ3AgBBgCIgCkEMakFwcUHYqtWqBXM2AgBBlCJBADYCAEHkIUEANgIAQYAgCyIBaiIGQQAgAWsiCHEiASAFTQ0MQeAhKAIAIgQEQEHYISgCACIHIAFqIgkgB00NDSAEIAlJDQ0LAkBB5CEtAABBBHFFBEACQAJAAkACQEHAHigCACIEBEBB6CEhAANAIAQgACgCACIHTwRAIAcgACgCBGogBEsNAwsgACgCCCIADQALC0EAEAMiAkF/Rg0DIAEhBkGEIigCACIAQQFrIgQgAnEEQCABIAJrIAIgBGpBACAAa3FqIQYLIAUgBk8NA0HgISgCACIABEBB2CEoAgAiBCAGaiIIIARNDQQgACAISQ0ECyAGEAMiACACRw0BDAULIAYgAmsgCHEiBhADIgIgACgCACAAKAIEakYNASACIQALIABBf0YNASAFQTBqIAZNBEAgACECDAQLQYgiKAIAIgIgAyAGa2pBACACa3EiAhADQX9GDQEgAiAGaiEGIAAhAgwDCyACQX9HDQILQeQhQeQhKAIAQQRyNgIACyABEAMhAkEAEAMhACACQX9GDQUgAEF/Rg0FIAAgAk0NBSAAIAJrIgYgBUEoak0NBQtB2CFB2CEoAgAgBmoiADYCAEHcISgCACAASQRAQdwhIAA2AgALAkBBwB4oAgAiAwRAQeghIQADQCACIAAoAgAiASAAKAIEIgRqRg0CIAAoAggiAA0ACwwEC0G4HigCACIAQQAgACACTRtFBEBBuB4gAjYCAAtBACEAQewhIAY2AgBB6CEgAjYCAEHIHkF/NgIAQcweQYAiKAIANgIAQfQhQQA2AgADQCAAQQN0IgFB2B5qIAFB0B5qIgQ2AgAgAUHcHmogBDYCACAAQQFqIgBBIEcNAAtBtB4gBkEoayIAQXggAmtBB3EiAWsiBDYCAEHAHiABIAJqIgE2AgAgASAEQQFyNgIEIAAgAmpBKDYCBEHEHkGQIigCADYCAAwECyACIANNDQIgASADSw0CIAAoAgxBCHENAiAAIAQgBmo2AgRBwB4gA0F4IANrQQdxIgBqIgE2AgBBtB5BtB4oAgAgBmoiAiAAayIANgIAIAEgAEEBcjYCBCACIANqQSg2AgRBxB5BkCIoAgA2AgAMAwtBACEEDAoLQQAhAgwIC0G4HigCACACSwRAQbgeIAI2AgALIAIgBmohAUHoISEAAkACQAJAA0AgASAAKAIARwRAIAAoAggiAA0BDAILCyAALQAMQQhxRQ0BC0HoISEAA0AgAyAAKAIAIgFPBEAgASAAKAIEaiIEIANLDQMLIAAoAgghAAwACwALIAAgAjYCACAAIAAoAgQgBmo2AgQgAkF4IAJrQQdxaiIHIAVBA3I2AgQgAUF4IAFrQQdxaiIGIAUgB2oiBWshACADIAZGBEBBwB4gBTYCAEG0HkG0HigCACAAaiIANgIAIAUgAEEBcjYCBAwIC0G8HigCACAGRgRAQbweIAU2AgBBsB5BsB4oAgAgAGoiADYCACAFIABBAXI2AgQgACAFaiAANgIADAgLIAYoAgQiA0EDcUEBRw0GIANBeHEhCSADQf8BTQRAIAYoAgwiASAGKAIIIgJGBEBBqB5BqB4oAgBBfiADQQN2d3E2AgAMBwsgAiABNgIMIAEgAjYCCAwGCyAGKAIYIQggBiAGKAIMIgJHBEAgBigCCCIBIAI2AgwgAiABNgIIDAULIAZBFGoiASgCACIDRQRAIAYoAhAiA0UNBCAGQRBqIQELA0AgASEEIAMiAkEUaiIBKAIAIgMNACACQRBqIQEgAigCECIDDQALIARBADYCAAwEC0G0HiAGQShrIgBBeCACa0EHcSIBayIINgIAQcAeIAEgAmoiATYCACABIAhBAXI2AgQgACACakEoNgIEQcQeQZAiKAIANgIAIAMgBEEnIARrQQdxakEvayIAIAAgA0EQakkbIgFBGzYCBCABQfAhKQIANwIQIAFB6CEpAgA3AghB8CEgAUEIajYCAEHsISAGNgIAQeghIAI2AgBB9CFBADYCACABQRhqIQADQCAAQQc2AgQgAEEIaiECIABBBGohACACIARJDQALIAEgA0YNACABIAEoAgRBfnE2AgQgAyABIANrIgJBAXI2AgQgASACNgIAIAJB/wFNBEAgAkF4cUHQHmohAAJ/QageKAIAIgFBASACQQN2dCICcUUEQEGoHiABIAJyNgIAIAAMAQsgACgCCAshASAAIAM2AgggASADNgIMIAMgADYCDCADIAE2AggMAQtBHyEAIAJB////B00EQCACQSYgAkEIdmciAGt2QQFxIABBAXRrQT5qIQALIAMgADYCHCADQgA3AhAgAEECdEHYIGohAQJAAkBBrB4oAgAiBEEBIAB0IgZxRQRAQaweIAQgBnI2AgAgASADNgIADAELIAJBGSAAQQF2a0EAIABBH0cbdCEAIAEoAgAhBANAIAQiASgCBEF4cSACRg0CIABBHXYhBCAAQQF0IQAgASAEQQRxaiIGKAIQIgQNAAsgBiADNgIQCyADIAE2AhggAyADNgIMIAMgAzYCCAwBCyABKAIIIgAgAzYCDCABIAM2AgggA0EANgIYIAMgATYCDCADIAA2AggLQbQeKAIAIgAgBU0NAEG0HiAAIAVrIgE2AgBBwB5BwB4oAgAiACAFaiICNgIAIAIgAUEBcjYCBCAAIAVBA3I2AgQgAEEIaiEADAgLQaQeQTA2AgBBACEADAcLQQAhAgsgCEUNAAJAIAYoAhwiAUECdEHYIGoiBCgCACAGRgRAIAQgAjYCACACDQFBrB5BrB4oAgBBfiABd3E2AgAMAgsgCEEQQRQgCCgCECAGRhtqIAI2AgAgAkUNAQsgAiAINgIYIAYoAhAiAQRAIAIgATYCECABIAI2AhgLIAYoAhQiAUUNACACIAE2AhQgASACNgIYCyAAIAlqIQAgBiAJaiIGKAIEIQMLIAYgA0F+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", m(U) || (U = e(U));
782
+ function x(C) {
783
+ if (C == U && t)
784
+ return new Uint8Array(t);
785
+ var g = cA(C);
786
+ if (g)
787
+ return g;
788
+ throw "sync fetching of the wasm failed: you can preload it to Module['wasmBinary'] manually, or emcc.py will do that for you when generating HTML (but not JS)";
789
+ }
790
+ function Z(C, g) {
791
+ var i, n = x(C);
792
+ i = new WebAssembly.Module(n);
793
+ var d = new WebAssembly.Instance(i, g);
794
+ return [d, i];
795
+ }
796
+ function W() {
797
+ var C = { a: FA };
798
+ function g(n, d) {
799
+ var Y = n.exports;
800
+ return F = Y, w = F.b, c(), F.l, p(F.c), K(), Y;
801
+ }
802
+ if (T(), A.instantiateWasm)
803
+ try {
804
+ return A.instantiateWasm(C, g);
805
+ } catch (n) {
806
+ a("Module.instantiateWasm callback failed with error: " + n), E(n);
807
+ }
808
+ var i = Z(U, C);
809
+ return g(i[0]);
810
+ }
811
+ var O = (C) => {
812
+ for (; C.length > 0; )
813
+ C.shift()(A);
814
+ }, _ = (C) => {
815
+ L("OOM");
816
+ }, AA = (C) => {
817
+ s.length, _();
818
+ };
819
+ function $(C) {
820
+ var g = A["_" + C];
821
+ return g;
822
+ }
823
+ var CA = (C, g) => {
824
+ D.set(C, g);
825
+ }, EA = (C) => {
826
+ for (var g = 0, i = 0; i < C.length; ++i) {
827
+ var n = C.charCodeAt(i);
828
+ n <= 127 ? g++ : n <= 2047 ? g += 2 : n >= 55296 && n <= 57343 ? (g += 4, ++i) : g += 3;
829
+ }
830
+ return g;
831
+ }, iA = (C, g, i, n) => {
832
+ if (!(n > 0)) return 0;
833
+ for (var d = i, Y = i + n - 1, M = 0; M < C.length; ++M) {
834
+ var N = C.charCodeAt(M);
835
+ if (N >= 55296 && N <= 57343) {
836
+ var v = C.charCodeAt(++M);
837
+ N = 65536 + ((N & 1023) << 10) | v & 1023;
838
+ }
839
+ if (N <= 127) {
840
+ if (i >= Y) break;
841
+ g[i++] = N;
842
+ } else if (N <= 2047) {
843
+ if (i + 1 >= Y) break;
844
+ g[i++] = 192 | N >> 6, g[i++] = 128 | N & 63;
845
+ } else if (N <= 65535) {
846
+ if (i + 2 >= Y) break;
847
+ g[i++] = 224 | N >> 12, g[i++] = 128 | N >> 6 & 63, g[i++] = 128 | N & 63;
848
+ } else {
849
+ if (i + 3 >= Y) break;
850
+ g[i++] = 240 | N >> 18, g[i++] = 128 | N >> 12 & 63, g[i++] = 128 | N >> 6 & 63, g[i++] = 128 | N & 63;
851
+ }
852
+ }
853
+ return g[i] = 0, i - d;
854
+ }, IA = (C, g, i) => iA(C, s, g, i), BA = (C) => {
855
+ var g = EA(C) + 1, i = nA(g);
856
+ return IA(C, i, g), i;
857
+ }, gA = typeof TextDecoder < "u" ? new TextDecoder("utf8") : void 0, oA = (C, g, i) => {
858
+ for (var n = g + i, d = g; C[d] && !(d >= n); ) ++d;
859
+ if (d - g > 16 && C.buffer && gA)
860
+ return gA.decode(C.subarray(g, d));
861
+ for (var Y = ""; g < d; ) {
862
+ var M = C[g++];
863
+ if (!(M & 128)) {
864
+ Y += String.fromCharCode(M);
865
+ continue;
866
+ }
867
+ var N = C[g++] & 63;
868
+ if ((M & 224) == 192) {
869
+ Y += String.fromCharCode((M & 31) << 6 | N);
870
+ continue;
871
+ }
872
+ var v = C[g++] & 63;
873
+ if ((M & 240) == 224 ? M = (M & 15) << 12 | N << 6 | v : M = (M & 7) << 18 | N << 12 | v << 6 | C[g++] & 63, M < 65536)
874
+ Y += String.fromCharCode(M);
875
+ else {
876
+ var V = M - 65536;
877
+ Y += String.fromCharCode(55296 | V >> 10, 56320 | V & 1023);
878
+ }
879
+ }
880
+ return Y;
881
+ }, eA = (C, g) => C ? oA(s, C, g) : "", rA = function(C, g, i, n, d) {
882
+ var Y = { string: (b) => {
883
+ var z = 0;
884
+ return b != null && b !== 0 && (z = BA(b)), z;
885
+ }, array: (b) => {
886
+ var z = nA(b.length);
887
+ return CA(b, z), z;
888
+ } };
889
+ function M(b) {
890
+ return g === "string" ? eA(b) : g === "boolean" ? !!b : b;
891
+ }
892
+ var N = $(C), v = [], V = 0;
893
+ if (n)
894
+ for (var j = 0; j < n.length; j++) {
895
+ var tA = Y[i[j]];
896
+ tA ? (V === 0 && (V = QA()), v[j] = tA(n[j])) : v[j] = n[j];
897
+ }
898
+ var wA = N.apply(null, v);
899
+ function yA(b) {
900
+ return V !== 0 && RA(V), M(b);
901
+ }
902
+ return wA = yA(wA), wA;
903
+ }, sA = function(C, g, i, n) {
904
+ var d = !i || i.every((M) => M === "number" || M === "boolean"), Y = g !== "string";
905
+ return Y && d && !n ? $(C) : function() {
906
+ return rA(C, g, i, arguments);
907
+ };
908
+ }, FA = { a: AA }, q = W();
909
+ q.c, A._malloc = q.d, A._free = q.e, A._precalc = q.f, A._precalc_f = q.g, A._dispose = q.h, A._dispose_f = q.i, A._transform_radix2_precalc = q.j, A._transform_radix2_precalc_f = q.k, q.__errno_location;
910
+ var QA = q.m, RA = q.n, nA = q.o;
911
+ function DA(C) {
912
+ try {
913
+ for (var g = atob(C), i = new Uint8Array(g.length), n = 0; n < g.length; ++n)
914
+ i[n] = g.charCodeAt(n);
915
+ return i;
916
+ } catch {
917
+ throw new Error("Converting base64 string to bytes failed.");
918
+ }
919
+ }
920
+ function cA(C) {
921
+ if (m(C))
922
+ return DA(C.slice(u.length));
923
+ }
924
+ A.ccall = rA, A.cwrap = sA;
925
+ var aA;
926
+ S = function C() {
927
+ aA || hA(), aA || (S = C);
928
+ };
929
+ function hA() {
930
+ if (k > 0 || (y(), k > 0))
931
+ return;
932
+ function C() {
933
+ aA || (aA = !0, A.calledRun = !0, !h && (G(), r(A), A.onRuntimeInitialized && A.onRuntimeInitialized(), H()));
934
+ }
935
+ A.setStatus ? (A.setStatus("Running..."), setTimeout(function() {
936
+ setTimeout(function() {
937
+ A.setStatus("");
938
+ }, 1), C();
939
+ }, 1)) : C();
940
+ }
941
+ if (A.preInit)
942
+ for (typeof A.preInit == "function" && (A.preInit = [A.preInit]); A.preInit.length > 0; )
943
+ A.preInit.pop()();
944
+ return hA(), I;
945
+ });
946
+ })(), NA = zA({});
947
+ NA.cwrap("precalc", "number", ["number"]);
948
+ NA.cwrap("dispose", "void", ["number"]);
949
+ NA.cwrap(
950
+ "transform_radix2_precalc",
951
+ "void",
952
+ ["number", "number", "number", "number"]
953
+ );
954
+ var _A = NA.cwrap("precalc_f", "number", ["number"]), $A = NA.cwrap("dispose_f", "void", ["number"]), AI = NA.cwrap(
955
+ "transform_radix2_precalc_f",
956
+ "void",
957
+ ["number", "number", "number", "number"]
958
+ );
959
+ function II(o) {
960
+ this.n = o, this.rptr = NA._malloc(o * 4 + o * 4), this.iptr = this.rptr + o * 4, this.rarr = new Float32Array(NA.HEAPU8.buffer, this.rptr, o), this.iarr = new Float32Array(NA.HEAPU8.buffer, this.iptr, o), this.tables = _A(o), this.forward = function(I, A) {
961
+ this.rarr.set(I), this.iarr.set(A), AI(this.rptr, this.iptr, this.n, this.tables), I.set(this.rarr), A.set(this.iarr);
962
+ }, this.dispose = function() {
963
+ NA._free(this.rptr), $A(this.tables);
964
+ };
965
+ }
966
+ class gI {
967
+ constructor(I) {
968
+ this.size = I, this.fftNayuki = new II(I);
969
+ }
970
+ fft(I) {
971
+ const A = new Float32Array(this.size), r = new Float32Array(this.size), E = new Float32Array(this.size * 2);
972
+ for (var B = 0; B < this.size; ++B)
973
+ A[B] = I[B * 2], r[B] = I[B * 2 + 1];
974
+ this.fftNayuki.forward(A, r);
975
+ for (var B = 0; B < this.size; ++B)
976
+ E[B * 2] = A[B], E[B * 2 + 1] = r[B];
977
+ return E;
978
+ }
979
+ }
980
+ if (!mA)
981
+ var mA = {};
982
+ (function(o) {
983
+ function I(e, a, t, w, F, h) {
984
+ for (var D = F.twiddle, s = 0; s < h; s++) {
985
+ var c = e[2 * (a + t * s)], l = e[2 * (a + t * s) + 1], R = e[2 * (a + t * (s + h))], f = e[2 * (a + t * (s + h)) + 1], y = D[2 * (0 + w * s)], G = D[2 * (0 + w * s) + 1], H = R * y - f * G, J = R * G + f * y, p = c + H, P = l + J, k = c - H, S = l - J;
986
+ e[2 * (a + t * s)] = p, e[2 * (a + t * s) + 1] = P, e[2 * (a + t * (s + h))] = k, e[2 * (a + t * (s + h)) + 1] = S;
987
+ }
988
+ }
989
+ function A(e, a, t, w, F, h) {
990
+ for (var D = F.twiddle, s = h, c = 2 * h, l = w, R = 2 * w, f = D[2 * (0 + w * h) + 1], y = 0; y < h; y++) {
991
+ var G = e[2 * (a + t * y)], H = e[2 * (a + t * y) + 1], J = e[2 * (a + t * (y + s))], p = e[2 * (a + t * (y + s)) + 1], P = D[2 * (0 + l * y)], k = D[2 * (0 + l * y) + 1], S = J * P - p * k, T = J * k + p * P, K = e[2 * (a + t * (y + c))], L = e[2 * (a + t * (y + c)) + 1], u = D[2 * (0 + R * y)], m = D[2 * (0 + R * y) + 1], U = K * u - L * m, x = K * m + L * u, Z = S + U, W = T + x, O = G + Z, _ = H + W;
992
+ e[2 * (a + t * y)] = O, e[2 * (a + t * y) + 1] = _;
993
+ var AA = G - Z * 0.5, $ = H - W * 0.5, CA = (S - U) * f, EA = (T - x) * f, iA = AA - EA, IA = $ + CA;
994
+ e[2 * (a + t * (y + s))] = iA, e[2 * (a + t * (y + s)) + 1] = IA;
995
+ var BA = AA + EA, gA = $ - CA;
996
+ e[2 * (a + t * (y + c))] = BA, e[2 * (a + t * (y + c)) + 1] = gA;
997
+ }
998
+ }
999
+ function r(e, a, t, w, F, h) {
1000
+ for (var D = F.twiddle, s = h, c = 2 * h, l = 3 * h, R = w, f = 2 * w, y = 3 * w, G = 0; G < h; G++) {
1001
+ var H = e[2 * (a + t * G)], J = e[2 * (a + t * G) + 1], p = e[2 * (a + t * (G + s))], P = e[2 * (a + t * (G + s)) + 1], k = D[2 * (0 + R * G)], S = D[2 * (0 + R * G) + 1], T = p * k - P * S, K = p * S + P * k, L = e[2 * (a + t * (G + c))], u = e[2 * (a + t * (G + c)) + 1], m = D[2 * (0 + f * G)], U = D[2 * (0 + f * G) + 1], x = L * m - u * U, Z = L * U + u * m, W = e[2 * (a + t * (G + l))], O = e[2 * (a + t * (G + l)) + 1], _ = D[2 * (0 + y * G)], AA = D[2 * (0 + y * G) + 1], $ = W * _ - O * AA, CA = W * AA + O * _, EA = H + x, iA = J + Z, IA = H - x, BA = J - Z, gA = T + $, oA = K + CA, eA = T - $, rA = K - CA, sA = EA + gA, FA = iA + oA;
1002
+ if (F.inverse)
1003
+ var q = IA - rA, QA = BA + eA;
1004
+ else
1005
+ var q = IA + rA, QA = BA - eA;
1006
+ var RA = EA - gA, nA = iA - oA;
1007
+ if (F.inverse)
1008
+ var DA = IA + rA, cA = BA - eA;
1009
+ else
1010
+ var DA = IA - rA, cA = BA + eA;
1011
+ e[2 * (a + t * G)] = sA, e[2 * (a + t * G) + 1] = FA, e[2 * (a + t * (G + s))] = q, e[2 * (a + t * (G + s)) + 1] = QA, e[2 * (a + t * (G + c))] = RA, e[2 * (a + t * (G + c)) + 1] = nA, e[2 * (a + t * (G + l))] = DA, e[2 * (a + t * (G + l)) + 1] = cA;
1012
+ }
1013
+ }
1014
+ function E(e, a, t, w, F, h, D) {
1015
+ for (var s = F.twiddle, c = F.n, l = new Float64Array(2 * D), R = 0; R < h; R++) {
1016
+ for (var f = 0, y = R; f < D; f++, y += h) {
1017
+ var G = e[2 * (a + t * y)], H = e[2 * (a + t * y) + 1];
1018
+ l[2 * f] = G, l[2 * f + 1] = H;
1019
+ }
1020
+ for (var f = 0, y = R; f < D; f++, y += h) {
1021
+ var J = 0, G = l[0], H = l[1];
1022
+ e[2 * (a + t * y)] = G, e[2 * (a + t * y) + 1] = H;
1023
+ for (var p = 1; p < D; p++) {
1024
+ J = (J + w * y) % c;
1025
+ var P = e[2 * (a + t * y)], k = e[2 * (a + t * y) + 1], S = l[2 * p], T = l[2 * p + 1], K = s[2 * J], L = s[2 * J + 1], u = S * K - T * L, m = S * L + T * K, U = P + u, x = k + m;
1026
+ e[2 * (a + t * y)] = U, e[2 * (a + t * y) + 1] = x;
1027
+ }
1028
+ }
1029
+ }
1030
+ }
1031
+ function B(e, a, t, w, F, h, D, s, c) {
1032
+ var l = s.shift(), R = s.shift();
1033
+ if (R == 1)
1034
+ for (var f = 0; f < l * R; f++) {
1035
+ var y = w[2 * (F + h * D * f)], G = w[2 * (F + h * D * f) + 1];
1036
+ e[2 * (a + t * f)] = y, e[2 * (a + t * f) + 1] = G;
1037
+ }
1038
+ else
1039
+ for (var f = 0; f < l; f++)
1040
+ B(
1041
+ e,
1042
+ a + t * f * R,
1043
+ t,
1044
+ w,
1045
+ F + f * h * D,
1046
+ h * l,
1047
+ D,
1048
+ s.slice(),
1049
+ c
1050
+ );
1051
+ switch (l) {
1052
+ case 2:
1053
+ I(e, a, t, h, c, R);
1054
+ break;
1055
+ case 3:
1056
+ A(e, a, t, h, c, R);
1057
+ break;
1058
+ case 4:
1059
+ r(e, a, t, h, c, R);
1060
+ break;
1061
+ default:
1062
+ E(e, a, t, h, c, R, l);
1063
+ break;
1064
+ }
1065
+ }
1066
+ var Q = function(t, w) {
1067
+ if (arguments.length < 2)
1068
+ throw new RangeError("You didn't pass enough arguments, passed `" + arguments.length + "'");
1069
+ var t = ~~t, w = !!w;
1070
+ if (t < 1)
1071
+ throw new RangeError("n is outside range, should be positive integer, was `" + t + "'");
1072
+ for (var F = {
1073
+ n: t,
1074
+ inverse: w,
1075
+ factors: [],
1076
+ twiddle: new Float64Array(2 * t),
1077
+ scratch: new Float64Array(2 * t)
1078
+ }, h = F.twiddle, D = 2 * Math.PI / t, s = 0; s < t; s++) {
1079
+ if (w)
1080
+ var c = D * s;
1081
+ else
1082
+ var c = -D * s;
1083
+ h[2 * s] = Math.cos(c), h[2 * s + 1] = Math.sin(c);
1084
+ }
1085
+ for (var l = 4, R = Math.floor(Math.sqrt(t)); t > 1; ) {
1086
+ for (; t % l; ) {
1087
+ switch (l) {
1088
+ case 4:
1089
+ l = 2;
1090
+ break;
1091
+ case 2:
1092
+ l = 3;
1093
+ break;
1094
+ default:
1095
+ l += 2;
1096
+ break;
1097
+ }
1098
+ l > R && (l = t);
1099
+ }
1100
+ t /= l, F.factors.push(l), F.factors.push(t);
1101
+ }
1102
+ this.state = F;
1103
+ };
1104
+ Q.prototype.simple = function(e, a, t) {
1105
+ this.process(e, 0, 1, a, 0, 1, t);
1106
+ }, Q.prototype.process = function(e, a, s, w, F, c, D) {
1107
+ var s = ~~s, c = ~~c, l = D == "real" ? D : "complex";
1108
+ if (s < 1)
1109
+ throw new RangeError("outputStride is outside range, should be positive integer, was `" + s + "'");
1110
+ if (c < 1)
1111
+ throw new RangeError("inputStride is outside range, should be positive integer, was `" + c + "'");
1112
+ if (l == "real") {
1113
+ for (var R = 0; R < this.state.n; R++) {
1114
+ var f = w[F + c * R], y = 0;
1115
+ this.state.scratch[2 * R] = f, this.state.scratch[2 * R + 1] = y;
1116
+ }
1117
+ B(e, a, s, this.state.scratch, 0, 1, 1, this.state.factors.slice(), this.state);
1118
+ } else if (w == e) {
1119
+ B(this.state.scratch, 0, 1, w, F, 1, c, this.state.factors.slice(), this.state);
1120
+ for (var R = 0; R < this.state.n; R++) {
1121
+ var f = this.state.scratch[2 * R], y = this.state.scratch[2 * R + 1];
1122
+ e[2 * (a + s * R)] = f, e[2 * (a + s * R) + 1] = y;
1123
+ }
1124
+ } else
1125
+ B(
1126
+ e,
1127
+ a,
1128
+ s,
1129
+ w,
1130
+ F,
1131
+ 1,
1132
+ c,
1133
+ this.state.factors.slice(),
1134
+ this.state
1135
+ );
1136
+ }, o.complex = Q;
1137
+ })(mA);
1138
+ const CI = mA;
1139
+ class BI {
1140
+ constructor(I) {
1141
+ this.size = I, this.nockertfft = new CI.complex(I, !1);
1142
+ }
1143
+ fft(I) {
1144
+ const A = new Float32Array(2 * this.size);
1145
+ return this.nockertfft.simple(A, I, "complex"), A;
1146
+ }
1147
+ }
1148
+ let X = 0, kA = null, lA = null;
1149
+ function QI(o) {
1150
+ if (o !== 0 && (o & o - 1) === 0)
1151
+ X = o, tI(), eI(), oI();
1152
+ else
1153
+ throw new Error("init: radix-2 required");
1154
+ }
1155
+ function SA(o, I) {
1156
+ vA(o, I, 1);
1157
+ }
1158
+ function UA(o, I) {
1159
+ let A = 1 / X;
1160
+ vA(o, I, -1);
1161
+ for (let r = 0; r < X; r++)
1162
+ o[r] *= A, I[r] *= A;
1163
+ }
1164
+ function EI(o, I) {
1165
+ vA(o, I, -1);
1166
+ }
1167
+ function iI(o, I) {
1168
+ let A = [], r = [], E = 0;
1169
+ for (let B = 0; B < X; B++) {
1170
+ E = B * X;
1171
+ for (let Q = 0; Q < X; Q++)
1172
+ A[Q] = o[Q + E], r[Q] = I[Q + E];
1173
+ SA(A, r);
1174
+ for (let Q = 0; Q < X; Q++)
1175
+ o[Q + E] = A[Q], I[Q + E] = r[Q];
1176
+ }
1177
+ for (let B = 0; B < X; B++) {
1178
+ for (let Q = 0; Q < X; Q++)
1179
+ E = B + Q * X, A[Q] = o[E], r[Q] = I[E];
1180
+ SA(A, r);
1181
+ for (let Q = 0; Q < X; Q++)
1182
+ E = B + Q * X, o[E] = A[Q], I[E] = r[Q];
1183
+ }
1184
+ }
1185
+ function rI(o, I) {
1186
+ let A = [], r = [], E = 0;
1187
+ for (let B = 0; B < X; B++) {
1188
+ E = B * X;
1189
+ for (let Q = 0; Q < X; Q++)
1190
+ A[Q] = o[Q + E], r[Q] = I[Q + E];
1191
+ UA(A, r);
1192
+ for (let Q = 0; Q < X; Q++)
1193
+ o[Q + E] = A[Q], I[Q + E] = r[Q];
1194
+ }
1195
+ for (let B = 0; B < X; B++) {
1196
+ for (let Q = 0; Q < X; Q++)
1197
+ E = B + Q * X, A[Q] = o[E], r[Q] = I[E];
1198
+ UA(A, r);
1199
+ for (let Q = 0; Q < X; Q++)
1200
+ E = B + Q * X, o[E] = A[Q], I[E] = r[Q];
1201
+ }
1202
+ }
1203
+ function vA(o, I, A) {
1204
+ let r, E, B, Q, e, a, t, w, F, h = X >> 2;
1205
+ for (let D = 0; D < X; D++)
1206
+ Q = kA[D], D < Q && (e = o[D], o[D] = o[Q], o[Q] = e, e = I[D], I[D] = I[Q], I[Q] = e);
1207
+ for (let D = 1; D < X; D <<= 1) {
1208
+ E = 0, r = X / (D << 1);
1209
+ for (let s = 0; s < D; s++) {
1210
+ a = lA[E + h], t = A * lA[E];
1211
+ for (let c = s; c < X; c += D << 1)
1212
+ B = c + D, w = a * o[B] + t * I[B], F = a * I[B] - t * o[B], o[B] = o[c] - w, o[c] += w, I[B] = I[c] - F, I[c] += F;
1213
+ E += r;
1214
+ }
1215
+ }
1216
+ }
1217
+ function tI() {
1218
+ typeof Uint32Array < "u" ? kA = new Uint32Array(X) : kA = [], typeof Float64Array < "u" ? lA = new Float64Array(X * 1.25) : lA = [];
1219
+ }
1220
+ function eI() {
1221
+ let o = 0, I = 0, A = 0;
1222
+ for (kA[0] = 0; ++o < X; ) {
1223
+ for (A = X >> 1; A <= I; )
1224
+ I -= A, A >>= 1;
1225
+ I += A, kA[o] = I;
1226
+ }
1227
+ }
1228
+ function oI() {
1229
+ let o = X >> 1, I = X >> 2, A = X >> 3, r = o + I, E = Math.sin(Math.PI / X), B = 2 * E * E, Q = Math.sqrt(B * (2 - B)), e = lA[I] = 1, a = lA[0] = 0;
1230
+ E = 2 * B;
1231
+ for (let t = 1; t < A; t++)
1232
+ e -= B, B += E * e, a += Q, Q -= E * a, lA[t] = a, lA[I - t] = e;
1233
+ A !== 0 && (lA[A] = Math.sqrt(0.5));
1234
+ for (let t = 0; t < I; t++)
1235
+ lA[o - t] = lA[t];
1236
+ for (let t = 0; t < r; t++)
1237
+ lA[t + o] = -lA[t];
1238
+ }
1239
+ const aI = {
1240
+ init: QI,
1241
+ fft1d: SA,
1242
+ ifft1d: UA,
1243
+ fft2d: iI,
1244
+ ifft2d: rI,
1245
+ fft: SA,
1246
+ ifft: UA,
1247
+ bt: EI
1248
+ };
1249
+ class nI {
1250
+ constructor(I) {
1251
+ this.size = I, this.FFT_mljs = aI, this.FFT_mljs.init(I);
1252
+ }
1253
+ fft(I) {
1254
+ const A = new Float32Array(this.size), r = new Float32Array(this.size), E = new Float32Array(2 * this.size);
1255
+ for (var B = 0; B < this.size; ++B)
1256
+ A[B] = I[B * 2], r[B] = I[B * 2 + 1];
1257
+ this.FFT_mljs.fft(A, r);
1258
+ for (var B = 0; B < this.size; ++B)
1259
+ E[B * 2] = A[B], E[B * 2 + 1] = r[B];
1260
+ return E;
1261
+ }
1262
+ }
1263
+ async function sI() {
1264
+ return await WebAssembly.validate(
1265
+ new Uint8Array([
1266
+ 0,
1267
+ 97,
1268
+ 115,
1269
+ 109,
1270
+ 1,
1271
+ 0,
1272
+ 0,
1273
+ 0,
1274
+ 1,
1275
+ 5,
1276
+ 1,
1277
+ 96,
1278
+ 0,
1279
+ 1,
1280
+ 123,
1281
+ 3,
1282
+ 2,
1283
+ 1,
1284
+ 0,
1285
+ 10,
1286
+ 15,
1287
+ 1,
1288
+ 13,
1289
+ 0,
1290
+ 65,
1291
+ 1,
1292
+ 253,
1293
+ 15,
1294
+ 65,
1295
+ 2,
1296
+ 253,
1297
+ 15,
1298
+ 253,
1299
+ 128,
1300
+ 2,
1301
+ 11
1302
+ ])
1303
+ );
1304
+ }
1305
+ async function DI() {
1306
+ return await WebAssembly.validate(
1307
+ new Uint8Array([
1308
+ 0,
1309
+ 97,
1310
+ 115,
1311
+ 109,
1312
+ 1,
1313
+ 0,
1314
+ 0,
1315
+ 0,
1316
+ 1,
1317
+ 5,
1318
+ 1,
1319
+ 96,
1320
+ 0,
1321
+ 1,
1322
+ 123,
1323
+ 3,
1324
+ 2,
1325
+ 1,
1326
+ 0,
1327
+ 10,
1328
+ 10,
1329
+ 1,
1330
+ 8,
1331
+ 0,
1332
+ 65,
1333
+ 0,
1334
+ 253,
1335
+ 15,
1336
+ 253,
1337
+ 98,
1338
+ 11
1339
+ ])
1340
+ );
1341
+ }
1342
+ async function hI() {
1343
+ let o = "Other", I = "Unknown", A = "Other", r = "Unknown", E = navigator.userAgentData, B = navigator.userAgent;
1344
+ try {
1345
+ if (E) {
1346
+ const Q = await E.getHighEntropyValues([
1347
+ "architecture",
1348
+ "model",
1349
+ "platform",
1350
+ "platformVersion",
1351
+ "uaFullVersion"
1352
+ ]), e = E.brands.find(
1353
+ (a) => ["Microsoft Edge", "Google Chrome", "Opera"].includes(a.brand)
1354
+ );
1355
+ o = e ? e.brand : "Other", I = e ? `v${e.version}` : "Unknown", A = Q.platform ? Q.platform : "Other", r = Q.platformVersion ? `v${Q.platformVersion}` : "Unknown";
1356
+ }
1357
+ if (o === "Other" || A === "Other") {
1358
+ const Q = B.split(" "), e = Q[Q.length - 1], a = /Firefox/.test(e), t = /Safari/.test(e) && !/CriOS/.test(e) && !/Chrome/.test(e), w = /CriOS/.test(e) || /Chrome/.test(e), F = /Edg/.test(e), h = /OPR/.test(e), D = [
1359
+ {
1360
+ name: "Mozilla Firefox",
1361
+ regex: /Firefox\/(\d+\.\d+)/,
1362
+ flag: a
1363
+ },
1364
+ { name: "Safari", regex: /Version\/(\d+\.\d+)/, flag: t },
1365
+ {
1366
+ name: "Google Chrome",
1367
+ regex: /CriOS|Chrome\/(\d+\.\d+)/,
1368
+ flag: w
1369
+ },
1370
+ { name: "Microsoft Edge", regex: /Edg\/(\d+\.\d+)/, flag: F },
1371
+ { name: "Opera", regex: /OPR\/(\d+\.\d+)/, flag: h }
1372
+ ];
1373
+ for (const f of D)
1374
+ if (f.flag) {
1375
+ o = f.name;
1376
+ const y = e.match(f.regex);
1377
+ I = y ? y[1] : "Unknown";
1378
+ break;
1379
+ }
1380
+ const s = B.match(/\(([^)]+)\)/), c = s ? s[1].split("; ") : [];
1381
+ console.log(s), console.log(c);
1382
+ const l = {
1383
+ "10.0": "10",
1384
+ "6.3": "8.1",
1385
+ "6.2": "8",
1386
+ "6.1": "7",
1387
+ "6.0": "Vista",
1388
+ "5.2": "XP 64-bit",
1389
+ "5.1": "XP",
1390
+ "5.0": "2000"
1391
+ }, R = [
1392
+ {
1393
+ name: "Windows",
1394
+ regex: /Windows NT/,
1395
+ transform: (f) => l[f.split(" ")[2]],
1396
+ index: 0
1397
+ },
1398
+ {
1399
+ name: "Mac OS X",
1400
+ regex: /Mac OS X/,
1401
+ transform: (f) => f.replace("_", ".").split(" ")[3],
1402
+ index: 0
1403
+ },
1404
+ {
1405
+ name: "Linux",
1406
+ regex: /Linux/,
1407
+ transform: () => "Unknown",
1408
+ // Precise Linux version can be difficult to determine
1409
+ index: 0
1410
+ },
1411
+ {
1412
+ name: "Android",
1413
+ regex: /Android/,
1414
+ transform: (f) => f.split(" ")[1],
1415
+ index: 0
1416
+ },
1417
+ {
1418
+ name: "iOS",
1419
+ regex: /iPhone/,
1420
+ transform: (f) => f.split(" ")[1].replace("_", "."),
1421
+ index: 0
1422
+ }
1423
+ ];
1424
+ for (const f of R)
1425
+ if (f.regex.test(c[0])) {
1426
+ A = f.name, console.log(`osDetails: ${c}`), r = f.transform ? f.transform(c[1]) : f.versionMap[c[1].split(" ")[f.index]];
1427
+ break;
1428
+ }
1429
+ }
1430
+ } catch (Q) {
1431
+ console.error("Could not retrieve user agent data", Q);
1432
+ }
1433
+ return {
1434
+ browserName: o,
1435
+ browserVersion: I,
1436
+ osName: A,
1437
+ osVersion: r,
1438
+ wasm: typeof WebAssembly == "object",
1439
+ relaxedSimd: await sI(),
1440
+ simd: await DI()
1441
+ };
1442
+ }
1443
+ var cI = (() => {
1444
+ var o = import.meta.url;
1445
+ return (function(I = {}) {
1446
+ var A = I, r, E;
1447
+ A.ready = new Promise((C, g) => {
1448
+ r = C, E = g;
1449
+ });
1450
+ var B = Object.assign({}, A), Q = "";
1451
+ function e(C) {
1452
+ return A.locateFile ? A.locateFile(C, Q) : Q + C;
1453
+ }
1454
+ typeof document < "u" && document.currentScript && (Q = document.currentScript.src), o && (Q = o), Q.indexOf("blob:") !== 0 ? Q = Q.substr(0, Q.replace(/[?#].*/, "").lastIndexOf("/") + 1) : Q = "", A.print || console.log.bind(console);
1455
+ var a = A.printErr || console.error.bind(console);
1456
+ Object.assign(A, B), B = null, A.arguments && A.arguments, A.thisProgram && A.thisProgram, A.quit && A.quit;
1457
+ var t;
1458
+ A.wasmBinary && (t = A.wasmBinary), A.noExitRuntime, typeof WebAssembly != "object" && L("no native wasm support detected");
1459
+ var w, F, h = !1, D, s;
1460
+ function c() {
1461
+ var C = w.buffer;
1462
+ A.HEAP8 = D = new Int8Array(C), A.HEAP16 = new Int16Array(C), A.HEAP32 = new Int32Array(C), A.HEAPU8 = s = new Uint8Array(C), A.HEAPU16 = new Uint16Array(C), A.HEAPU32 = new Uint32Array(C), A.HEAPF32 = new Float32Array(C), A.HEAPF64 = new Float64Array(C);
1463
+ }
1464
+ var l = [], R = [], f = [];
1465
+ function y() {
1466
+ if (A.preRun)
1467
+ for (typeof A.preRun == "function" && (A.preRun = [A.preRun]); A.preRun.length; )
1468
+ J(A.preRun.shift());
1469
+ O(l);
1470
+ }
1471
+ function G() {
1472
+ O(R);
1473
+ }
1474
+ function H() {
1475
+ if (A.postRun)
1476
+ for (typeof A.postRun == "function" && (A.postRun = [A.postRun]); A.postRun.length; )
1477
+ P(A.postRun.shift());
1478
+ O(f);
1479
+ }
1480
+ function J(C) {
1481
+ l.unshift(C);
1482
+ }
1483
+ function p(C) {
1484
+ R.unshift(C);
1485
+ }
1486
+ function P(C) {
1487
+ f.unshift(C);
1488
+ }
1489
+ var k = 0, S = null;
1490
+ function T(C) {
1491
+ k++, A.monitorRunDependencies && A.monitorRunDependencies(k);
1492
+ }
1493
+ function K(C) {
1494
+ if (k--, A.monitorRunDependencies && A.monitorRunDependencies(k), k == 0 && S) {
1495
+ var g = S;
1496
+ S = null, g();
1497
+ }
1498
+ }
1499
+ function L(C) {
1500
+ A.onAbort && A.onAbort(C), C = "Aborted(" + C + ")", a(C), h = !0, C += ". Build with -sASSERTIONS for more info.";
1501
+ var g = new WebAssembly.RuntimeError(C);
1502
+ throw E(g), g;
1503
+ }
1504
+ var u = "data:application/octet-stream;base64,";
1505
+ function m(C) {
1506
+ return C.startsWith(u);
1507
+ }
1508
+ var U;
1509
+ U = "data:application/octet-stream;base64,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", m(U) || (U = e(U));
1510
+ function x(C) {
1511
+ if (C == U && t)
1512
+ return new Uint8Array(t);
1513
+ var g = cA(C);
1514
+ if (g)
1515
+ return g;
1516
+ throw "sync fetching of the wasm failed: you can preload it to Module['wasmBinary'] manually, or emcc.py will do that for you when generating HTML (but not JS)";
1517
+ }
1518
+ function Z(C, g) {
1519
+ var i, n = x(C);
1520
+ i = new WebAssembly.Module(n);
1521
+ var d = new WebAssembly.Instance(i, g);
1522
+ return [d, i];
1523
+ }
1524
+ function W() {
1525
+ var C = { a: FA };
1526
+ function g(n, d) {
1527
+ var Y = n.exports;
1528
+ return F = Y, w = F.b, c(), F.i, p(F.c), K(), Y;
1529
+ }
1530
+ if (T(), A.instantiateWasm)
1531
+ try {
1532
+ return A.instantiateWasm(C, g);
1533
+ } catch (n) {
1534
+ a("Module.instantiateWasm callback failed with error: " + n), E(n);
1535
+ }
1536
+ var i = Z(U, C);
1537
+ return g(i[0]);
1538
+ }
1539
+ var O = (C) => {
1540
+ for (; C.length > 0; )
1541
+ C.shift()(A);
1542
+ }, _ = (C) => {
1543
+ L("OOM");
1544
+ }, AA = (C) => {
1545
+ s.length, _();
1546
+ };
1547
+ function $(C) {
1548
+ var g = A["_" + C];
1549
+ return g;
1550
+ }
1551
+ var CA = (C, g) => {
1552
+ D.set(C, g);
1553
+ }, EA = (C) => {
1554
+ for (var g = 0, i = 0; i < C.length; ++i) {
1555
+ var n = C.charCodeAt(i);
1556
+ n <= 127 ? g++ : n <= 2047 ? g += 2 : n >= 55296 && n <= 57343 ? (g += 4, ++i) : g += 3;
1557
+ }
1558
+ return g;
1559
+ }, iA = (C, g, i, n) => {
1560
+ if (!(n > 0)) return 0;
1561
+ for (var d = i, Y = i + n - 1, M = 0; M < C.length; ++M) {
1562
+ var N = C.charCodeAt(M);
1563
+ if (N >= 55296 && N <= 57343) {
1564
+ var v = C.charCodeAt(++M);
1565
+ N = 65536 + ((N & 1023) << 10) | v & 1023;
1566
+ }
1567
+ if (N <= 127) {
1568
+ if (i >= Y) break;
1569
+ g[i++] = N;
1570
+ } else if (N <= 2047) {
1571
+ if (i + 1 >= Y) break;
1572
+ g[i++] = 192 | N >> 6, g[i++] = 128 | N & 63;
1573
+ } else if (N <= 65535) {
1574
+ if (i + 2 >= Y) break;
1575
+ g[i++] = 224 | N >> 12, g[i++] = 128 | N >> 6 & 63, g[i++] = 128 | N & 63;
1576
+ } else {
1577
+ if (i + 3 >= Y) break;
1578
+ g[i++] = 240 | N >> 18, g[i++] = 128 | N >> 12 & 63, g[i++] = 128 | N >> 6 & 63, g[i++] = 128 | N & 63;
1579
+ }
1580
+ }
1581
+ return g[i] = 0, i - d;
1582
+ }, IA = (C, g, i) => iA(C, s, g, i), BA = (C) => {
1583
+ var g = EA(C) + 1, i = nA(g);
1584
+ return IA(C, i, g), i;
1585
+ }, gA = typeof TextDecoder < "u" ? new TextDecoder("utf8") : void 0, oA = (C, g, i) => {
1586
+ for (var n = g + i, d = g; C[d] && !(d >= n); ) ++d;
1587
+ if (d - g > 16 && C.buffer && gA)
1588
+ return gA.decode(C.subarray(g, d));
1589
+ for (var Y = ""; g < d; ) {
1590
+ var M = C[g++];
1591
+ if (!(M & 128)) {
1592
+ Y += String.fromCharCode(M);
1593
+ continue;
1594
+ }
1595
+ var N = C[g++] & 63;
1596
+ if ((M & 224) == 192) {
1597
+ Y += String.fromCharCode((M & 31) << 6 | N);
1598
+ continue;
1599
+ }
1600
+ var v = C[g++] & 63;
1601
+ if ((M & 240) == 224 ? M = (M & 15) << 12 | N << 6 | v : M = (M & 7) << 18 | N << 12 | v << 6 | C[g++] & 63, M < 65536)
1602
+ Y += String.fromCharCode(M);
1603
+ else {
1604
+ var V = M - 65536;
1605
+ Y += String.fromCharCode(55296 | V >> 10, 56320 | V & 1023);
1606
+ }
1607
+ }
1608
+ return Y;
1609
+ }, eA = (C, g) => C ? oA(s, C, g) : "", rA = function(C, g, i, n, d) {
1610
+ var Y = { string: (b) => {
1611
+ var z = 0;
1612
+ return b != null && b !== 0 && (z = BA(b)), z;
1613
+ }, array: (b) => {
1614
+ var z = nA(b.length);
1615
+ return CA(b, z), z;
1616
+ } };
1617
+ function M(b) {
1618
+ return g === "string" ? eA(b) : g === "boolean" ? !!b : b;
1619
+ }
1620
+ var N = $(C), v = [], V = 0;
1621
+ if (n)
1622
+ for (var j = 0; j < n.length; j++) {
1623
+ var tA = Y[i[j]];
1624
+ tA ? (V === 0 && (V = QA()), v[j] = tA(n[j])) : v[j] = n[j];
1625
+ }
1626
+ var wA = N.apply(null, v);
1627
+ function yA(b) {
1628
+ return V !== 0 && RA(V), M(b);
1629
+ }
1630
+ return wA = yA(wA), wA;
1631
+ }, sA = function(C, g, i, n) {
1632
+ var d = !i || i.every((M) => M === "number" || M === "boolean"), Y = g !== "string";
1633
+ return Y && d && !n ? $(C) : function() {
1634
+ return rA(C, g, i, arguments);
1635
+ };
1636
+ }, FA = { a: AA }, q = W();
1637
+ q.c, A._kiss_fft_free = q.d, A._free = q.e, A._kiss_fft_alloc = q.f, A._malloc = q.g, A._kiss_fft = q.h, q.__errno_location;
1638
+ var QA = q.j, RA = q.k, nA = q.l;
1639
+ function DA(C) {
1640
+ try {
1641
+ for (var g = atob(C), i = new Uint8Array(g.length), n = 0; n < g.length; ++n)
1642
+ i[n] = g.charCodeAt(n);
1643
+ return i;
1644
+ } catch {
1645
+ throw new Error("Converting base64 string to bytes failed.");
1646
+ }
1647
+ }
1648
+ function cA(C) {
1649
+ if (m(C))
1650
+ return DA(C.slice(u.length));
1651
+ }
1652
+ A.ccall = rA, A.cwrap = sA;
1653
+ var aA;
1654
+ S = function C() {
1655
+ aA || hA(), aA || (S = C);
1656
+ };
1657
+ function hA() {
1658
+ if (k > 0 || (y(), k > 0))
1659
+ return;
1660
+ function C() {
1661
+ aA || (aA = !0, A.calledRun = !0, !h && (G(), r(A), A.onRuntimeInitialized && A.onRuntimeInitialized(), H()));
1662
+ }
1663
+ A.setStatus ? (A.setStatus("Running..."), setTimeout(function() {
1664
+ setTimeout(function() {
1665
+ A.setStatus("");
1666
+ }, 1), C();
1667
+ }, 1)) : C();
1668
+ }
1669
+ if (A.preInit)
1670
+ for (typeof A.preInit == "function" && (A.preInit = [A.preInit]); A.preInit.length > 0; )
1671
+ A.preInit.pop()();
1672
+ return hA(), I;
1673
+ });
1674
+ })(), GA = cI({}), KA = GA.cwrap("kiss_fft_alloc", "number", [
1675
+ "number",
1676
+ "number",
1677
+ "number",
1678
+ "number"
1679
+ ]), wI = GA.cwrap("kiss_fft", "void", [
1680
+ "number",
1681
+ "number",
1682
+ "number"
1683
+ ]), bA = GA.cwrap("kiss_fft_free", "void", ["number"]);
1684
+ class fI {
1685
+ constructor(I) {
1686
+ this.size = I, this.fcfg = KA(I, !1), this.icfg = KA(I, !0), this.inptr = GA._malloc(I * 8 + I * 8), this.cin = new Float32Array(
1687
+ GA.HEAPU8.buffer,
1688
+ this.inptr,
1689
+ I * 2
1690
+ );
1691
+ }
1692
+ fft = function(I) {
1693
+ const A = GA._malloc(this.size * 8), r = new Float32Array(
1694
+ GA.HEAPU8.buffer,
1695
+ A,
1696
+ this.size * 2
1697
+ );
1698
+ this.cin.set(I), wI(this.fcfg, this.inptr, A);
1699
+ let E = new Float32Array(this.size * 2);
1700
+ return E.set(r), GA._free(A), E;
1701
+ };
1702
+ dispose() {
1703
+ bA(this.fcfg), bA(this.icfg), GA._free(this.inptr);
1704
+ }
1705
+ }
1706
+ function HA(o) {
1707
+ this.size = o, this._csize = o << 1;
1708
+ for (var I = new Array(this.size * 2), A = 0; A < I.length; A += 2) {
1709
+ const a = Math.PI * A / this.size;
1710
+ I[A] = Math.cos(a), I[A + 1] = -Math.sin(a);
1711
+ }
1712
+ this.table = I;
1713
+ for (var r = 0, E = 1; this.size > E; E <<= 1) r++;
1714
+ this._width = r % 2 === 0 ? r - 1 : r, this._bitrev = new Array(1 << this._width);
1715
+ for (var B = 0; B < this._bitrev.length; B++) {
1716
+ this._bitrev[B] = 0;
1717
+ for (var Q = 0; Q < this._width; Q += 2) {
1718
+ var e = this._width - Q - 2;
1719
+ this._bitrev[B] |= (B >>> Q & 3) << e;
1720
+ }
1721
+ }
1722
+ this._data = null;
1723
+ }
1724
+ HA.prototype.fft = function(I) {
1725
+ this._data = I, this._out = new Float32Array(2 * this.size);
1726
+ var A = this._csize, r = 1 << this._width, E = A / r << 1, B, Q, e = this._bitrev;
1727
+ if (E === 4)
1728
+ for (B = 0, Q = 0; B < A; B += E, Q++) {
1729
+ const h = e[Q];
1730
+ this._singleTransform2(B, h, r);
1731
+ }
1732
+ else
1733
+ for (B = 0, Q = 0; B < A; B += E, Q++) {
1734
+ const h = e[Q];
1735
+ this._singleTransform4(B, h, r);
1736
+ }
1737
+ for (r >>= 2; r >= 2; r >>= 2) {
1738
+ E = A / r << 1;
1739
+ var a = E >>> 2;
1740
+ for (B = 0; B < A; B += E)
1741
+ for (var t = B + a, w = B, F = 0; w < t; w += 2, F += r) {
1742
+ const h = w, D = h + a, s = D + a, c = s + a, l = this._out[h], R = this._out[h + 1], f = this._out[D], y = this._out[D + 1], G = this._out[s], H = this._out[s + 1], J = this._out[c], p = this._out[c + 1], P = l, k = R, S = this.table[F], T = this.table[F + 1], K = f * S - y * T, L = f * T + y * S, u = this.table[2 * F], m = this.table[2 * F + 1], U = G * u - H * m, x = G * m + H * u, Z = this.table[3 * F], W = this.table[3 * F + 1], O = J * Z - p * W, _ = J * W + p * Z, AA = P + U, $ = k + x, CA = P - U, EA = k - x, iA = K + O, IA = L + _, BA = K - O, gA = L - _;
1743
+ this._out[h] = AA + iA, this._out[h + 1] = $ + IA, this._out[D] = CA + gA, this._out[D + 1] = EA - BA, this._out[s] = AA - iA, this._out[s + 1] = $ - IA, this._out[c] = CA - gA, this._out[c + 1] = EA + BA;
1744
+ }
1745
+ }
1746
+ return this._out;
1747
+ };
1748
+ HA.prototype._singleTransform2 = function(I, A, r) {
1749
+ const E = this._data[A], B = this._data[A + 1], Q = this._data[A + r], e = this._data[A + r + 1];
1750
+ this._out[I] = E + Q, this._out[I + 1] = B + e, this._out[I + 2] = E - Q, this._out[I + 3] = B - e;
1751
+ };
1752
+ HA.prototype._singleTransform4 = function(I, A, r) {
1753
+ const E = r * 2, B = r * 3, Q = this._data[A], e = this._data[A + 1], a = this._data[A + r], t = this._data[A + r + 1], w = this._data[A + E], F = this._data[A + E + 1], h = this._data[A + B], D = this._data[A + B + 1], s = Q + w, c = e + F, l = Q - w, R = e - F, f = a + h, y = t + D, G = a - h, H = t - D;
1754
+ this._out[I] = s + f, this._out[I + 1] = c + y, this._out[I + 2] = l + H, this._out[I + 3] = R - G, this._out[I + 4] = s - f, this._out[I + 5] = c - y, this._out[I + 6] = l - H, this._out[I + 7] = R + G;
1755
+ };
1756
+ const qA = [
1757
+ 4,
1758
+ 8,
1759
+ 16,
1760
+ 32,
1761
+ 64,
1762
+ 128,
1763
+ 256,
1764
+ 512,
1765
+ 1024,
1766
+ 2048,
1767
+ 4096,
1768
+ 8192,
1769
+ 16384,
1770
+ 32768,
1771
+ 16384,
1772
+ 32768,
1773
+ 65536,
1774
+ 131072
1775
+ ];
1776
+ class FI {
1777
+ constructor(I = 128, A = "indutnyJavascript", r = !0) {
1778
+ if (!qA.includes(I))
1779
+ throw new Error("Size must be a power of 2 between 4 and 131072");
1780
+ this.size = I, this.outputArr = new Float32Array(2 * I), this.subLibrary = A, this.fftLibrary = void 0;
1781
+ const E = this.getCurrentProfile();
1782
+ E && r ? this.setSubLibrary(E.fastestSubLibrary) : this.setSubLibrary(A);
1783
+ }
1784
+ availableSubLibraries() {
1785
+ return [
1786
+ "kissWasm",
1787
+ "indutnyModifiedJavascript",
1788
+ "indutnyJavascript",
1789
+ "crossWasm",
1790
+ "mljsJavascript",
1791
+ "nockertJavascript",
1792
+ "nayuki3Wasm",
1793
+ "nayukiJavascript",
1794
+ //"dntjJavascript", // need to figure out the precise scale factor before we can use this one, mainly due to unit tests
1795
+ "kissfftmodifiedWasm"
1796
+ // currently doesnt perform any better
1797
+ //"viljaWasm"
1798
+ ];
1799
+ }
1800
+ // A subset of the libraries known to be quickest, and removing ones that are too similar to others
1801
+ availableSubLibrariesQuick() {
1802
+ return ["kissWasm", "indutnyModifiedJavascript"];
1803
+ }
1804
+ getCurrentProfile() {
1805
+ if (!(typeof localStorage > "u") && localStorage.getItem("webfftProfile"))
1806
+ return JSON.parse(localStorage.getItem("webfftProfile"));
1807
+ }
1808
+ setSubLibrary(I) {
1809
+ switch (I) {
1810
+ case "nayukiJavascript":
1811
+ this.fftLibrary = new OA(this.size);
1812
+ break;
1813
+ case "nayuki3Wasm":
1814
+ this.fftLibrary = new gI(this.size);
1815
+ break;
1816
+ case "kissWasm":
1817
+ this.fftLibrary = new xA(this.size);
1818
+ break;
1819
+ case "crossWasm":
1820
+ this.fftLibrary = new XA(this.size), this.size > 16384 && (this.fftLibrary = new LA(this.size));
1821
+ break;
1822
+ case "nockertJavascript":
1823
+ this.fftLibrary = new BI(this.size);
1824
+ break;
1825
+ //case "dntjJavascript":
1826
+ // this.fftLibrary = new DntjWebFftWrapperJavascript(this.size);
1827
+ // break;
1828
+ case "indutnyJavascript":
1829
+ this.fftLibrary = new LA(this.size);
1830
+ break;
1831
+ case "mljsJavascript":
1832
+ this.fftLibrary = new nI(this.size);
1833
+ break;
1834
+ case "kissfftmodifiedWasm":
1835
+ this.fftLibrary = new fI(this.size);
1836
+ break;
1837
+ //case "viljaWasm":
1838
+ // this.fftLibrary = new ViljaFftWrapperWasm(this.size);
1839
+ case "indutnyModifiedJavascript":
1840
+ this.fftLibrary = new HA(this.size);
1841
+ break;
1842
+ default:
1843
+ throw new Error("Invalid sublibrary");
1844
+ }
1845
+ }
1846
+ fft(I) {
1847
+ if (I.length !== 2 * this.size)
1848
+ throw new Error("Input array length must be == 2 * size");
1849
+ return this.outputArr = this.fftLibrary.fft(I), this.outputArr;
1850
+ }
1851
+ // convinience function for people who want to use real-valued input.
1852
+ // note that you still have to give it a size that is 2x your real-valued input length!!
1853
+ // it doesn't actually speed it up by 2x
1854
+ // output is complex but the lenght of inputArr because the negative freqs are removed
1855
+ fftr(I) {
1856
+ var { outputArr: A, fftLibrary: r, size: E } = this;
1857
+ if (I.length !== E)
1858
+ throw new Error("Input array length must be == size");
1859
+ const B = new Float32Array(2 * E);
1860
+ B.fill(0);
1861
+ for (let Q = 0; Q < E; Q++)
1862
+ B[2 * Q] = I[Q];
1863
+ return A = r.fft(B), A.slice(E, E * 2);
1864
+ }
1865
+ // takes in an array of arrays each of length 2*size. the outter array length must also be a power of two. only supports complex
1866
+ fft2d(I) {
1867
+ const A = I[0].length / 2, r = I.length;
1868
+ if (A !== this.size)
1869
+ throw new Error("Inner array length must be == 2 * size");
1870
+ if (!qA.includes(r))
1871
+ throw new Error(
1872
+ "Outter array length must be a power of 2 between 4 and 131072"
1873
+ );
1874
+ let E = [];
1875
+ for (let e = 0; e < r; e++)
1876
+ this.outputArr = this.fft(I[e]), E.push(this.outputArr);
1877
+ this.dispose(), this.size = r, this.setSubLibrary(this.subLibrary);
1878
+ let B = [];
1879
+ for (let e = 0; e < A; e++) {
1880
+ const a = new Float32Array(2 * r);
1881
+ a.fill(0);
1882
+ for (let w = 0; w < r; w++)
1883
+ a[2 * w] = E[w][2 * e], a[2 * w + 1] = E[w][2 * e + 1];
1884
+ let t = new Float32Array(2 * r);
1885
+ t = this.fft(a), B.push(t);
1886
+ }
1887
+ let Q = [];
1888
+ for (let e = 0; e < r; e++) {
1889
+ let a = new Float32Array(2 * A);
1890
+ for (let t = 0; t < A; t++)
1891
+ a[2 * t] = B[t][2 * e], a[2 * t + 1] = B[t][2 * e + 1];
1892
+ Q.push(a);
1893
+ }
1894
+ return this.dispose(), this.size = A, this.setSubLibrary(this.subLibrary), Q;
1895
+ }
1896
+ profile(I = 1, A = !0, r = !1) {
1897
+ if (!A && this.getCurrentProfile())
1898
+ return this.getCurrentProfile();
1899
+ const E = performance.now();
1900
+ let B;
1901
+ r ? B = this.availableSubLibrariesQuick() : B = this.availableSubLibraries();
1902
+ let Q = [];
1903
+ const e = I / B.length / 2;
1904
+ for (let F = 0; F < B.length; F++) {
1905
+ this.setSubLibrary(B[F]);
1906
+ const h = new Float32Array(2 * this.size);
1907
+ for (let c = 0; c < this.size; c++)
1908
+ h[2 * c] = Math.random() - 0.5, h[2 * c + 1] = Math.random() - 0.5;
1909
+ let D = performance.now();
1910
+ for (; (performance.now() - D) / 1e3 < e; )
1911
+ this.fft(h);
1912
+ D = performance.now();
1913
+ let s = 0;
1914
+ for (; (performance.now() - D) / 1e3 < e; )
1915
+ this.fft(h), s++;
1916
+ Q.push(1e3 * s / (performance.now() - D)), this.dispose();
1917
+ }
1918
+ const a = (performance.now() - E) / 1e3;
1919
+ let t = Q.indexOf(Math.max(...Q));
1920
+ const w = {
1921
+ fftsPerSecond: Q,
1922
+ subLibraries: B,
1923
+ totalElapsed: a,
1924
+ fastestSubLibrary: B[t]
1925
+ };
1926
+ return console.log("Setting sublibrary to", w.fastestSubLibrary), this.setSubLibrary(w.fastestSubLibrary), typeof localStorage < "u" && localStorage.setItem("webfftProfile", JSON.stringify(w)), w;
1927
+ }
1928
+ async checkBrowserCapabilities() {
1929
+ return await hI();
1930
+ }
1931
+ dispose() {
1932
+ this.fftLibrary && this.fftLibrary.dispose !== void 0 && this.fftLibrary.dispose();
1933
+ }
1934
+ }
1935
+ class RI {
1936
+ constructor(I) {
1937
+ if (this.EPS = 1e-20, this.INV_LN10 = 1 / Math.LN10, (I & I - 1) !== 0)
1938
+ throw new Error("FFT size must be power of two");
1939
+ this.fftSize = I, this.fft = new FI(I);
1940
+ const r = this.fft.profile(0.5).fastestSubLibrary;
1941
+ this.fft.setSubLibrary(r), this.complexIn = new Float32Array(I * 2), this.spectrum = new Float32Array(I / 2 + 1);
1942
+ }
1943
+ size() {
1944
+ return this.fftSize;
1945
+ }
1946
+ compute(I, A, r) {
1947
+ const E = this.fftSize, B = this.complexIn;
1948
+ for (let h = 0; h < E; h++) {
1949
+ const D = h << 1;
1950
+ B[D] = I[h], B[D + 1] = 0;
1951
+ }
1952
+ const Q = this.fft.fft(B), e = this.spectrum, a = e.length, t = 1 / (r - A), w = this.EPS, F = this.INV_LN10;
1953
+ for (let h = 0; h < a; h++) {
1954
+ const D = h << 1, s = Q[D], c = Q[D + 1], l = s * s + c * c + w, R = (10 * Math.log(l) * F - A) * t;
1955
+ e[h] = R < 0 ? 0 : R > 1 ? 1 : R;
1956
+ }
1957
+ return e;
1958
+ }
1959
+ dispose() {
1960
+ }
1961
+ }
1962
+ class lI {
1963
+ constructor(I) {
1964
+ this.data = null, this.showRealTimeScale = !1, this.startTime = 0, this.config = I;
1965
+ }
1966
+ setData(I) {
1967
+ const A = this.isTimestamped(I);
1968
+ if (this.showRealTimeScale = A, A) {
1969
+ if (I.length === 0) {
1970
+ this.data = new Float32Array(0);
1971
+ return;
1972
+ }
1973
+ this.startTime = I[0][0];
1974
+ const r = new Float32Array(I.length);
1975
+ for (let E = 0; E < I.length; E++)
1976
+ r[E] = I[E][1];
1977
+ this.data = r;
1978
+ } else
1979
+ this.data = I, this.startTime = 0;
1980
+ }
1981
+ isTimestamped(I) {
1982
+ return Array.isArray(I) && I.length > 0 && Array.isArray(I[0]);
1983
+ }
1984
+ updateConfig(I) {
1985
+ this.config = { ...this.config, ...I };
1986
+ }
1987
+ getDuration() {
1988
+ return this.data ? this.data.length / this.config.sampleRate : 0;
1989
+ }
1990
+ }
1991
+ const NI = (o, I) => {
1992
+ const A = new Float32Array(o);
1993
+ if (I === "rectangular")
1994
+ return A.fill(1);
1995
+ const r = 2 * Math.PI, E = o - 1;
1996
+ switch (I) {
1997
+ case "hann":
1998
+ for (let B = 0; B < o; B++)
1999
+ A[B] = 0.5 * (1 - Math.cos(r * B / E));
2000
+ break;
2001
+ case "hamming":
2002
+ for (let B = 0; B < o; B++)
2003
+ A[B] = 0.54 - 0.46 * Math.cos(r * B / E);
2004
+ break;
2005
+ case "blackman":
2006
+ for (let B = 0; B < o; B++) {
2007
+ const Q = r * B / E;
2008
+ A[B] = 0.42 - 0.5 * Math.cos(Q) + 0.08 * Math.cos(2 * Q);
2009
+ }
2010
+ break;
2011
+ }
2012
+ return A;
2013
+ };
2014
+ class yI {
2015
+ constructor(I, A, r, E) {
2016
+ this.image = null, this.isProcessing = !1, this.id = I, this.startIndex = A, this.endIndex = r, this.startTime = A / E, this.endTime = r / E;
2017
+ }
2018
+ }
2019
+ class MI {
2020
+ constructor(I) {
2021
+ let A;
2022
+ I.fftExecutor ? (A = I.fftExecutor.size(), this.fft = I.fftExecutor) : (A = I.fftSize ?? 1024, this.fft = new RI(A)), this.windowBuffer = NI(I.windowSize, I.windowType), this.inputBuf = new Float32Array(A);
2023
+ }
2024
+ process(I, A, r, E, B) {
2025
+ const { windowSize: Q, minDb: e, maxDb: a, overlap: t } = E, w = Math.max(1, Q - t), F = this.fft.size(), D = Math.ceil((r - A) / w), s = (F >> 1) + 1;
2026
+ if (D <= 0)
2027
+ return new ImageData(1, 1);
2028
+ const c = new ImageData(D, s), l = c.data, R = this.inputBuf, f = this.windowBuffer;
2029
+ let y = 0, G = 0;
2030
+ for (let H = 0; H < Q; H++) {
2031
+ const J = A + H;
2032
+ J < I.length && (y += I[J], G++);
2033
+ }
2034
+ for (let H = 0; H < D; H++) {
2035
+ const J = A + H * w, p = G > 0 ? y / G : 0, P = Math.min(Q, I.length - J);
2036
+ let k = 0;
2037
+ for (; k < P; k++)
2038
+ R[k] = (I[J + k] - p) * f[k];
2039
+ for (; k < F; k++)
2040
+ R[k] = 0;
2041
+ const S = this.fft.compute(R, e, a);
2042
+ for (let T = 0; T < s; T++) {
2043
+ const K = S[T], L = B(K), m = ((s - 1 - T) * D + H) * 4;
2044
+ l[m] = L[0], l[m + 1] = L[1], l[m + 2] = L[2], l[m + 3] = 255;
2045
+ }
2046
+ if (H + 1 < D) {
2047
+ for (let K = 0; K < w; K++) {
2048
+ const L = J + K;
2049
+ L < I.length && (y -= I[L], G--);
2050
+ }
2051
+ const T = J + Q;
2052
+ for (let K = 0; K < w; K++) {
2053
+ const L = T + K;
2054
+ L < I.length && (y += I[L], G++);
2055
+ }
2056
+ }
2057
+ }
2058
+ return c;
2059
+ }
2060
+ dispose() {
2061
+ this.fft.dispose();
2062
+ }
2063
+ }
2064
+ class GI {
2065
+ constructor(I) {
2066
+ this.model = I;
2067
+ }
2068
+ draw(I, A, r, E, B, Q) {
2069
+ I.save(), I.strokeStyle = "#464646", I.fillStyle = "#252525", I.font = "11px monospace", I.textBaseline = "top", I.lineWidth = 1;
2070
+ const [e, a] = E, [t, w] = B, F = a - e, { left: h, bottom: D, top: s, right: c } = Q, l = h, R = s, f = A - h - c, y = r - D - s;
2071
+ if (F <= 0) {
2072
+ I.restore();
2073
+ return;
2074
+ }
2075
+ I.beginPath();
2076
+ const G = R + y;
2077
+ I.moveTo(h, G), I.lineTo(h + f, G), I.stroke(), I.beginPath(), I.moveTo(h, R), I.lineTo(h, G), I.stroke();
2078
+ const H = Math.max(3, Math.floor(f / 100)), J = F / H, p = this.model.startTime;
2079
+ for (let u = 0; u <= H; u++) {
2080
+ const m = e + u * J, U = l + (m - e) / F * f;
2081
+ if (U < l || U > l + f)
2082
+ continue;
2083
+ I.beginPath(), I.moveTo(U, G), I.lineTo(U, G + 5), I.stroke();
2084
+ const x = p + m * 1e3;
2085
+ let Z = "";
2086
+ if (this.model.showRealTimeScale) {
2087
+ const W = new Date(x), O = W.getHours().toString().padStart(2, "0"), _ = W.getMinutes().toString().padStart(2, "0"), AA = W.getSeconds().toString().padStart(2, "0");
2088
+ Z = `${O}:${_}:${AA}`;
2089
+ } else x >= 0 && (Z = `${Math.floor(a - x / 1e3)}s`);
2090
+ I.textAlign = "center", I.fillText(Z, U, G + 8);
2091
+ }
2092
+ const P = w - t, k = Math.max(3, Math.floor(y / 40));
2093
+ let S = 1;
2094
+ if (P > 0 && k > 0) {
2095
+ const u = P / k, m = Math.pow(10, Math.floor(Math.log10(u))), U = u / m;
2096
+ U > 5 ? S = 10 * m : U > 2 ? S = 5 * m : U > 1 ? S = 2 * m : S = 1 * m;
2097
+ }
2098
+ const T = Math.floor(w / S) * S, K = Math.floor(t / S) * S;
2099
+ I.textAlign = "right", I.textBaseline = "middle";
2100
+ const L = S || 1;
2101
+ for (let u = T; u >= K; u -= L) {
2102
+ const m = L / 1e3;
2103
+ if (u > w + m || u < t - m)
2104
+ continue;
2105
+ const U = (w - u) / P, x = R + U * y;
2106
+ if (x < R - 1 || x > R + y + 1)
2107
+ continue;
2108
+ I.beginPath(), I.moveTo(h, x), I.lineTo(h - 5, x), I.stroke();
2109
+ let Z = u.toString();
2110
+ u % 1 !== 0 && (Z = u.toFixed(1).replace(/\.0$/, "")), I.fillText(Z, h - 8, x);
2111
+ }
2112
+ I.save(), I.translate(10, y / 2.8), I.rotate(-Math.PI / 2), I.textAlign = "right", I.fillText("Frequency (Hz)", 0, 0), I.restore();
2113
+ }
2114
+ }
2115
+ function TA(o, I) {
2116
+ if (o <= 0)
2117
+ return I[0];
2118
+ if (o >= 1)
2119
+ return I[I.length - 1];
2120
+ const A = 1 / (I.length - 1), r = o / A | 0, E = (o - r * A) / A, B = I[r], Q = I[r + 1];
2121
+ return [
2122
+ B[0] + (Q[0] - B[0]) * E | 0,
2123
+ B[1] + (Q[1] - B[1]) * E | 0,
2124
+ B[2] + (Q[2] - B[2]) * E | 0
2125
+ ];
2126
+ }
2127
+ const dI = [
2128
+ [68, 1, 84],
2129
+ [59, 82, 139],
2130
+ [33, 145, 140],
2131
+ [94, 201, 98],
2132
+ [253, 231, 37]
2133
+ ], YI = [
2134
+ [0, 0, 4],
2135
+ [87, 16, 110],
2136
+ [187, 55, 84],
2137
+ [249, 142, 9],
2138
+ [252, 255, 164]
2139
+ ];
2140
+ function kI(o) {
2141
+ return TA(o, dI);
2142
+ }
2143
+ function SI(o) {
2144
+ return TA(o, YI);
2145
+ }
2146
+ function UI(o) {
2147
+ const I = Math.floor(o * 255);
2148
+ return [I, I, I];
2149
+ }
2150
+ function HI(o) {
2151
+ const I = Math.max(0, Math.min(1, o)), A = Math.min(4 * I - 1.5, -4 * I + 4.5), r = Math.min(4 * I - 0.5, -4 * I + 3.5), E = Math.min(4 * I + 0.5, -4 * I + 2.5);
2152
+ return [
2153
+ Math.floor(Math.max(0, Math.min(1, A)) * 255),
2154
+ Math.floor(Math.max(0, Math.min(1, r)) * 255),
2155
+ Math.floor(Math.max(0, Math.min(1, E)) * 255)
2156
+ ];
2157
+ }
2158
+ function mI(o) {
2159
+ let I = 0, A = 0, r = 0;
2160
+ return o < 0.33 ? I = o / 0.33 : o < 0.66 ? (I = 1, A = (o - 0.33) / 0.33) : (I = 1, A = 1, r = (o - 0.66) / 0.34), [Math.floor(I * 255), Math.floor(A * 255), Math.floor(r * 255)];
2161
+ }
2162
+ function vI(o) {
2163
+ const I = o, A = 1 - o;
2164
+ return [Math.floor(I * 255), Math.floor(A * 255), Math.floor(1 * 255)];
2165
+ }
2166
+ function uI(o) {
2167
+ return [255, Math.floor(o * 255), Math.floor((1 - o) * 255)];
2168
+ }
2169
+ function JI(o) {
2170
+ return [Math.floor(o * 255), Math.floor((0.5 + 0.5 * o) * 255), Math.floor(0.4 * 255)];
2171
+ }
2172
+ function LI(o) {
2173
+ return [255, Math.floor(o * 255), 0];
2174
+ }
2175
+ function KI(o) {
2176
+ return [0, Math.floor(o * 255), Math.floor((1 - 0.5 * o) * 255)];
2177
+ }
2178
+ function bI(o) {
2179
+ const I = o, A = 0.1 * Math.sin(o * Math.PI * 2), r = o < 0.5 ? o + A : o, E = o < 0.75 ? o + A : o;
2180
+ return [
2181
+ Math.floor(Math.min(1, I) * 255),
2182
+ Math.floor(Math.min(1, r) * 255),
2183
+ Math.floor(Math.min(1, E) * 255)
2184
+ ];
2185
+ }
2186
+ const qI = {
2187
+ viridis: kI,
2188
+ inferno: SI,
2189
+ grayscale: UI,
2190
+ jet: HI,
2191
+ hot: mI,
2192
+ cool: vI,
2193
+ spring: uI,
2194
+ summer: JI,
2195
+ autumn: LI,
2196
+ winter: KI,
2197
+ bone: bI
2198
+ };
2199
+ class TI {
2200
+ // [R, G, B, R, G, B...] for 0..255
2201
+ constructor(I = "jet") {
2202
+ this.type = I, this.lut = new Uint8Array(256 * 3), this.generateLut();
2203
+ }
2204
+ generateLut() {
2205
+ const I = qI[this.type];
2206
+ for (let A = 0; A < 256; A++) {
2207
+ const r = I(A / 255), E = A * 3;
2208
+ this.lut[E] = r[0], this.lut[E + 1] = r[1], this.lut[E + 2] = r[2];
2209
+ }
2210
+ }
2211
+ getRGB(I) {
2212
+ const A = (I <= 0 ? 0 : I >= 1 ? 255 : I * 255 | 0) * 3;
2213
+ return [this.lut[A], this.lut[A + 1], this.lut[A + 2]];
2214
+ }
2215
+ setMap(I) {
2216
+ this.type = I, this.generateLut();
2217
+ }
2218
+ }
2219
+ class pI {
2220
+ constructor(I) {
2221
+ this.chunks = /* @__PURE__ */ new Map(), this.offscreenCanvas = null, this.offscreenCtx = null, this.offscreenHelpers = /* @__PURE__ */ new Map(), this.ctx = null, this.lastW = 0, this.lastH = 0, this.lastDPR = 0, this.model = I, this.processor = new MI(I.config), this.colormap = new TI(), this.axisRenderer = new GI(I);
2222
+ }
2223
+ setColormap(I) {
2224
+ this.colormap.setMap(I), this.clearCache();
2225
+ }
2226
+ clearCache() {
2227
+ this.chunks.clear(), this.offscreenHelpers.clear();
2228
+ }
2229
+ dispose() {
2230
+ this.clearCache(), this.offscreenCanvas = null, this.offscreenCtx = null, this.ctx = null, this.processor.dispose();
2231
+ }
2232
+ setupHiDPICanvas(I, A, r) {
2233
+ const E = window.devicePixelRatio || 1;
2234
+ I.style.width = `${A}px`, I.style.height = `${r}px`, I.width = Math.round(A * E), I.height = Math.round(r * E);
2235
+ const B = I.getContext("2d", { alpha: !0 });
2236
+ return B.resetTransform(), B.scale(E, E), B.imageSmoothingEnabled = !1, this.offscreenCanvas || (this.offscreenCanvas = document.createElement("canvas")), this.offscreenCanvas.width = I.width, this.offscreenCanvas.height = I.height, this.offscreenCtx = this.offscreenCanvas.getContext("2d", { alpha: !0 }), this.offscreenCtx.resetTransform(), this.offscreenCtx.scale(E, E), this.offscreenCtx.imageSmoothingEnabled = !1, B;
2237
+ }
2238
+ calibrateCanvas(I, A, r) {
2239
+ const E = window.devicePixelRatio || 1;
2240
+ return this.ctx && this.lastW === A && this.lastH === r && this.lastDPR === E ? this.ctx : (this.lastW = A, this.lastH = r, this.lastDPR = E, this.ctx = this.setupHiDPICanvas(I, A, r), this.ctx);
2241
+ }
2242
+ render(I) {
2243
+ const { canvas: A, timeRange: r, freqRange: E } = I, B = this.calibrateCanvas(A, I.width, I.height), Q = A.width / (window.devicePixelRatio || 1), e = A.height / (window.devicePixelRatio || 1), [a, t] = r, [w, F] = E, h = 50, D = 30, s = 12, c = 32, l = h, R = s, f = Q - h - c, y = e - D - s;
2244
+ if (B.clearRect(0, 0, Q, e), !this.model.data)
2245
+ return;
2246
+ const G = this.model.config.sampleRate, H = this.model.config, J = Math.max(1, H.windowSize - H.overlap), P = 10 * G, S = Math.ceil(P / J) * J, T = Math.floor(Math.max(0, a * G)), K = Math.floor(Math.min(this.model.data.length, t * G));
2247
+ if (K <= T)
2248
+ return;
2249
+ const L = Math.floor(T / S), u = Math.floor(K / S);
2250
+ for (let m = L; m <= u; m++) {
2251
+ const U = m * S, x = Math.min((m + 1) * S, this.model.data.length), Z = `chunk_${m}`;
2252
+ let W = this.chunks.get(Z);
2253
+ if (!W) {
2254
+ W = new yI(Z, U, x, G), this.chunks.set(Z, W);
2255
+ const O = this.processor.process(
2256
+ this.model.data,
2257
+ U,
2258
+ x,
2259
+ H,
2260
+ (_) => this.colormap.getRGB(_)
2261
+ );
2262
+ createImageBitmap(O).then((_) => {
2263
+ W && (W.image = _, this.offscreenCtx.save(), this.offscreenCtx.beginPath(), this.offscreenCtx.rect(l, R, f, y), this.offscreenCtx.clip(), this.drawChunk(
2264
+ this.offscreenCtx,
2265
+ W,
2266
+ a,
2267
+ t,
2268
+ w,
2269
+ F,
2270
+ l,
2271
+ R,
2272
+ f,
2273
+ y
2274
+ ), this.offscreenCtx.restore());
2275
+ });
2276
+ }
2277
+ W.image && (this.offscreenCtx.save(), this.offscreenCtx.beginPath(), this.offscreenCtx.rect(l, R, f, y), this.offscreenCtx.clip(), this.drawChunk(
2278
+ this.offscreenCtx,
2279
+ W,
2280
+ a,
2281
+ t,
2282
+ w,
2283
+ F,
2284
+ l,
2285
+ R,
2286
+ f,
2287
+ y
2288
+ ), this.offscreenCtx.restore());
2289
+ }
2290
+ B.drawImage(this.offscreenCanvas, 0, 0, Q, e), this.axisRenderer.draw(B, Q, e, r, E, {
2291
+ left: h,
2292
+ bottom: D,
2293
+ top: s,
2294
+ right: c
2295
+ });
2296
+ }
2297
+ drawChunk(I, A, r, E, B, Q, e, a, t, w) {
2298
+ if (!A.image)
2299
+ return;
2300
+ const F = E - r, h = this.model.config.sampleRate, D = h / 2, s = A.startIndex / h, c = A.endIndex / h, l = e + (s - r) / F * t, R = e + (c - r) / F * t;
2301
+ if (R <= e || l >= e + t)
2302
+ return;
2303
+ const f = Math.max(e, l), y = Math.min(e + t, R) - f, G = A.image.width, H = (f - l) / (R - l) * G, J = y / (R - l) * G, p = Math.min(Q, D), P = Math.max(B, 0), k = A.image.height, S = (1 - p / D) * k, K = (1 - P / D) * k - S;
2304
+ if (K > 0) {
2305
+ const L = a, u = w;
2306
+ I.drawImage(A.image, H, S, J, K, f, L, y, u);
2307
+ }
2308
+ }
2309
+ }
2310
+ class PI {
2311
+ constructor(I) {
2312
+ this.model = new lI(I), this.renderer = new pI(this.model);
2313
+ }
2314
+ setData(I) {
2315
+ this.model.setData(I), this.renderer.clearCache();
2316
+ }
2317
+ destroy() {
2318
+ this.renderer.dispose();
2319
+ }
2320
+ render(I) {
2321
+ const A = this.model.config.sampleRate / 2, r = I.freqRange || [0, A];
2322
+ this.renderer.render({
2323
+ ...I,
2324
+ freqRange: r
2325
+ });
2326
+ }
2327
+ updateConfig(I) {
2328
+ this.model.updateConfig(I), (I.windowSize || I.windowType || I.minDb || I.maxDb || I.fftSize || I.overlap) && this.renderer.clearCache();
2329
+ }
2330
+ setColormap(I) {
2331
+ this.renderer.setColormap(I);
2332
+ }
2333
+ getDuration() {
2334
+ return this.model.getDuration();
2335
+ }
2336
+ }
2337
+ export {
2338
+ RI as FFTExecutor,
2339
+ PI as Spectrogram
2340
+ };
2341
+ //# sourceMappingURL=spectrogram-js.es.js.map