cap-widget 0.1.46

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.
package/src/worker.js ADDED
@@ -0,0 +1,198 @@
1
+ (() => {
2
+ const solveFallback = async ({ salt, target }) => {
3
+ let nonce = 0;
4
+ const batchSize = 50000;
5
+ const encoder = new TextEncoder();
6
+
7
+ const targetBits = target.length * 4;
8
+ const fullBytes = Math.floor(targetBits / 8);
9
+ const remainingBits = targetBits % 8;
10
+
11
+ const paddedTarget = target.length % 2 === 0 ? target : target + "0";
12
+ const targetBytesLength = paddedTarget.length / 2;
13
+ const targetBytes = new Uint8Array(targetBytesLength);
14
+ for (let k = 0; k < targetBytesLength; k++) {
15
+ targetBytes[k] = parseInt(paddedTarget.substring(k * 2, k * 2 + 2), 16);
16
+ }
17
+
18
+ const partialMask = remainingBits > 0 ? (0xff << (8 - remainingBits)) & 0xff : 0;
19
+
20
+ while (true) {
21
+ try {
22
+ for (let i = 0; i < batchSize; i++) {
23
+ const inputString = salt + nonce;
24
+ const inputBytes = encoder.encode(inputString);
25
+
26
+ const hashBuffer = await crypto.subtle.digest("SHA-256", inputBytes);
27
+
28
+ const hashBytes = new Uint8Array(hashBuffer);
29
+
30
+ let matches = true;
31
+
32
+ for (let k = 0; k < fullBytes; k++) {
33
+ if (hashBytes[k] !== targetBytes[k]) {
34
+ matches = false;
35
+ break;
36
+ }
37
+ }
38
+
39
+ if (matches && remainingBits > 0) {
40
+ if ((hashBytes[fullBytes] & partialMask) !== (targetBytes[fullBytes] & partialMask)) {
41
+ matches = false;
42
+ }
43
+ }
44
+
45
+ if (matches) {
46
+ self.postMessage({ nonce, found: true });
47
+ return;
48
+ }
49
+
50
+ nonce++;
51
+ }
52
+ } catch (error) {
53
+ console.error("[cap worker]", error);
54
+ self.postMessage({
55
+ found: false,
56
+ error: error.message,
57
+ });
58
+ return;
59
+ }
60
+ }
61
+ };
62
+
63
+ if (typeof WebAssembly !== "object" || typeof WebAssembly?.instantiate !== "function") {
64
+ console.warn(
65
+ "[cap worker] wasm not supported, falling back to alternative solver. this will be significantly slower.",
66
+ );
67
+
68
+ self.onmessage = async ({ data: { salt, target } }) => {
69
+ return solveFallback({ salt, target });
70
+ };
71
+
72
+ return;
73
+ }
74
+
75
+ let solve_pow_function = null;
76
+
77
+ const initFromModule = (wasmModule) => {
78
+ try {
79
+ let wasm;
80
+ let WASM_VECTOR_LEN = 0;
81
+ let cachedUint8ArrayMemory = null;
82
+
83
+ const getMemory = () => {
84
+ if (cachedUint8ArrayMemory === null || cachedUint8ArrayMemory.byteLength === 0) {
85
+ cachedUint8ArrayMemory = new Uint8Array(wasm.memory.buffer);
86
+ }
87
+ return cachedUint8ArrayMemory;
88
+ };
89
+
90
+ const encoder = new TextEncoder();
91
+
92
+ const passStringToWasm = (str, malloc, realloc) => {
93
+ if (realloc === undefined) {
94
+ const encoded = encoder.encode(str);
95
+ const ptr = malloc(encoded.length, 1) >>> 0;
96
+ getMemory()
97
+ .subarray(ptr, ptr + encoded.length)
98
+ .set(encoded);
99
+ WASM_VECTOR_LEN = encoded.length;
100
+ return ptr;
101
+ }
102
+
103
+ let len = str.length;
104
+ let ptr = malloc(len, 1) >>> 0;
105
+ const mem = getMemory();
106
+ let offset = 0;
107
+
108
+ for (; offset < len; offset++) {
109
+ const code = str.charCodeAt(offset);
110
+ if (code > 127) break;
111
+ mem[ptr + offset] = code;
112
+ }
113
+
114
+ if (offset !== len) {
115
+ if (offset !== 0) str = str.slice(offset);
116
+ ptr = realloc(ptr, len, (len = offset + str.length * 3), 1) >>> 0;
117
+ const subarray = getMemory().subarray(ptr + offset, ptr + len);
118
+ const { written } = encoder.encodeInto(str, subarray);
119
+ offset += written;
120
+ ptr = realloc(ptr, len, offset, 1) >>> 0;
121
+ }
122
+
123
+ WASM_VECTOR_LEN = offset;
124
+ return ptr;
125
+ };
126
+
127
+ const imports = { wbg: {} };
128
+ imports.wbg.__wbindgen_init_externref_table = () => {
129
+ const table = wasm.__wbindgen_export_0;
130
+ const offset = table.grow(4);
131
+ table.set(0, undefined);
132
+ table.set(offset + 0, undefined);
133
+ table.set(offset + 1, null);
134
+ table.set(offset + 2, true);
135
+ table.set(offset + 3, false);
136
+ };
137
+
138
+ const instance = new WebAssembly.Instance(wasmModule, imports);
139
+ wasm = instance.exports;
140
+
141
+ if (wasm.__wbindgen_start) wasm.__wbindgen_start();
142
+
143
+ solve_pow_function = (salt, target) => {
144
+ const saltPtr = passStringToWasm(salt, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
145
+ const saltLen = WASM_VECTOR_LEN;
146
+ const targetPtr = passStringToWasm(target, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
147
+ const targetLen = WASM_VECTOR_LEN;
148
+ return BigInt.asUintN(64, wasm.solve_pow(saltPtr, saltLen, targetPtr, targetLen));
149
+ };
150
+
151
+ return true;
152
+ } catch (e) {
153
+ console.error("[cap worker] failed to init wasm from module:", e);
154
+ return false;
155
+ }
156
+ };
157
+
158
+ self.onmessage = async ({ data: { salt, target, wasmModule } }) => {
159
+ if (wasmModule instanceof WebAssembly.Module && solve_pow_function === null) {
160
+ const ok = initFromModule(wasmModule);
161
+ if (!ok) {
162
+ console.warn("[cap worker] wasm init failed, falling back to JS solver.");
163
+ return solveFallback({ salt, target });
164
+ }
165
+ }
166
+
167
+ if (solve_pow_function === null) {
168
+ console.warn("[cap worker] no wasm module provided, falling back to JS solver.");
169
+ return solveFallback({ salt, target });
170
+ }
171
+
172
+ try {
173
+ const startTime = performance.now();
174
+ const nonce = solve_pow_function(salt, target);
175
+ const endTime = performance.now();
176
+
177
+ self.postMessage({
178
+ nonce: Number(nonce),
179
+ found: true,
180
+ durationMs: (endTime - startTime).toFixed(2),
181
+ });
182
+ } catch (error) {
183
+ console.error("[cap worker]", error);
184
+
185
+ self.postMessage({
186
+ found: false,
187
+ error: error.message || String(error),
188
+ });
189
+ }
190
+ };
191
+
192
+ self.onerror = (error) => {
193
+ self.postMessage({
194
+ found: false,
195
+ error,
196
+ });
197
+ };
198
+ })();
@@ -0,0 +1,327 @@
1
+ !((e, t) => {
2
+ "object" == typeof exports && "undefined" != typeof module
3
+ ? t(exports)
4
+ : "function" == typeof define && define.amd
5
+ ? define(["exports"], t)
6
+ : t(
7
+ ((e = "undefined" != typeof globalThis ? globalThis : e || self).hashwasm =
8
+ e.hashwasm || {}),
9
+ );
10
+ })(void 0, (e) => {
11
+ function t(e, t, n, A) {
12
+ return new (n || (n = Promise))((i, o) => {
13
+ function r(e) {
14
+ try {
15
+ a(A.next(e));
16
+ } catch (e) {
17
+ o(e);
18
+ }
19
+ }
20
+ function E(e) {
21
+ try {
22
+ a(A.throw(e));
23
+ } catch (e) {
24
+ o(e);
25
+ }
26
+ }
27
+ function a(e) {
28
+ var t;
29
+ e.done
30
+ ? i(e.value)
31
+ : ((t = e.value),
32
+ t instanceof n
33
+ ? t
34
+ : new n((e) => {
35
+ e(t);
36
+ })).then(r, E);
37
+ }
38
+ a((A = A.apply(e, t || [])).next());
39
+ });
40
+ }
41
+ "function" == typeof SuppressedError && SuppressedError;
42
+ class n {
43
+ constructor() {
44
+ this.mutex = Promise.resolve();
45
+ }
46
+ lock() {
47
+ let e = () => {};
48
+ return (
49
+ (this.mutex = this.mutex.then(() => new Promise(e))),
50
+ new Promise((t) => {
51
+ e = t;
52
+ })
53
+ );
54
+ }
55
+ dispatch(e) {
56
+ return t(this, void 0, void 0, function* () {
57
+ const t = yield this.lock();
58
+ try {
59
+ return yield Promise.resolve(e());
60
+ } finally {
61
+ t();
62
+ }
63
+ });
64
+ }
65
+ }
66
+ var A;
67
+ const i =
68
+ "undefined" != typeof globalThis
69
+ ? globalThis
70
+ : "undefined" != typeof self
71
+ ? self
72
+ : "undefined" != typeof window
73
+ ? window
74
+ : global,
75
+ o = null !== (A = i.Buffer) && void 0 !== A ? A : null,
76
+ r = i.TextEncoder ? new i.TextEncoder() : null;
77
+ function E(e, t) {
78
+ return (
79
+ (((15 & e) + ((e >> 6) | ((e >> 3) & 8))) << 4) | ((15 & t) + ((t >> 6) | ((t >> 3) & 8)))
80
+ );
81
+ }
82
+ const a = "a".charCodeAt(0) - 10,
83
+ g = "0".charCodeAt(0);
84
+ function s(e, t, n) {
85
+ let A = 0;
86
+ for (let i = 0; i < n; i++) {
87
+ let n = t[i] >>> 4;
88
+ ((e[A++] = n > 9 ? n + a : n + g), (n = 15 & t[i]), (e[A++] = n > 9 ? n + a : n + g));
89
+ }
90
+ return String.fromCharCode.apply(null, e);
91
+ }
92
+ const C =
93
+ null !== o
94
+ ? (e) => {
95
+ if ("string" == typeof e) {
96
+ const t = o.from(e, "utf8");
97
+ return new Uint8Array(t.buffer, t.byteOffset, t.length);
98
+ }
99
+ if (o.isBuffer(e)) return new Uint8Array(e.buffer, e.byteOffset, e.length);
100
+ if (ArrayBuffer.isView(e)) return new Uint8Array(e.buffer, e.byteOffset, e.byteLength);
101
+ throw new Error("Invalid data type!");
102
+ }
103
+ : (e) => {
104
+ if ("string" == typeof e) return r.encode(e);
105
+ if (ArrayBuffer.isView(e)) return new Uint8Array(e.buffer, e.byteOffset, e.byteLength);
106
+ throw new Error("Invalid data type!");
107
+ },
108
+ B = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",
109
+ c = new Uint8Array(256);
110
+ for (let e = 0; e < 64; e++) c[B.charCodeAt(e)] = e;
111
+ function l(e) {
112
+ const t = ((e) => {
113
+ let t = Math.floor(0.75 * e.length);
114
+ const n = e.length;
115
+ return ("=" === e[n - 1] && ((t -= 1), "=" === e[n - 2] && (t -= 1)), t);
116
+ })(e),
117
+ n = e.length,
118
+ A = new Uint8Array(t);
119
+ let i = 0;
120
+ for (let t = 0; t < n; t += 4) {
121
+ const n = c[e.charCodeAt(t)],
122
+ o = c[e.charCodeAt(t + 1)],
123
+ r = c[e.charCodeAt(t + 2)],
124
+ E = c[e.charCodeAt(t + 3)];
125
+ ((A[i] = (n << 2) | (o >> 4)),
126
+ (i += 1),
127
+ (A[i] = ((15 & o) << 4) | (r >> 2)),
128
+ (i += 1),
129
+ (A[i] = ((3 & r) << 6) | (63 & E)),
130
+ (i += 1));
131
+ }
132
+ return A;
133
+ }
134
+ const h = 16384,
135
+ f = new n(),
136
+ d = new Map();
137
+ function u(e, n) {
138
+ return t(this, void 0, void 0, function* () {
139
+ let A = null,
140
+ i = null,
141
+ o = !1;
142
+ if ("undefined" == typeof WebAssembly)
143
+ throw new Error("WebAssembly is not supported in this environment!");
144
+ const r = () => new DataView(A.exports.memory.buffer).getUint32(A.exports.STATE_SIZE, !0),
145
+ a = f.dispatch(() =>
146
+ t(this, void 0, void 0, function* () {
147
+ if (!d.has(e.name)) {
148
+ const t = l(e.data),
149
+ n = WebAssembly.compile(t);
150
+ d.set(e.name, n);
151
+ }
152
+ const t = yield d.get(e.name);
153
+ A = yield WebAssembly.instantiate(t, {});
154
+ }),
155
+ ),
156
+ g = () => {
157
+ const e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : null;
158
+ ((o = !0), A.exports.Hash_Init(e));
159
+ },
160
+ B = (e) => {
161
+ if (!o) throw new Error("update() called before init()");
162
+ ((e) => {
163
+ let t = 0;
164
+ for (; t < e.length; ) {
165
+ const n = e.subarray(t, t + h);
166
+ ((t += n.length), i.set(n), A.exports.Hash_Update(n.length));
167
+ }
168
+ })(C(e));
169
+ },
170
+ c = new Uint8Array(2 * n),
171
+ u = (e) => {
172
+ const t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : null;
173
+ if (!o) throw new Error("digest() called before init()");
174
+ return ((o = !1), A.exports.Hash_Final(t), "binary" === e ? i.slice(0, n) : s(c, i, n));
175
+ },
176
+ v = (e) => ("string" == typeof e ? e.length < 4096 : e.byteLength < h);
177
+ let N = v;
178
+ switch (e.name) {
179
+ case "argon2":
180
+ case "scrypt":
181
+ N = () => !0;
182
+ break;
183
+ case "blake2b":
184
+ case "blake2s":
185
+ N = (e, t) => t <= 512 && v(e);
186
+ break;
187
+ case "blake3":
188
+ N = (e, t) => 0 === t && v(e);
189
+ break;
190
+ case "xxhash64":
191
+ case "xxhash3":
192
+ case "xxhash128":
193
+ N = () => !1;
194
+ }
195
+ return (
196
+ yield (() =>
197
+ t(this, void 0, void 0, function* () {
198
+ A || (yield a);
199
+ const e = A.exports.Hash_GetBuffer(),
200
+ t = A.exports.memory.buffer;
201
+ i = new Uint8Array(t, e, h);
202
+ }))(),
203
+ {
204
+ getMemory: () => i,
205
+ writeMemory: (e) => {
206
+ const t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : 0;
207
+ i.set(e, t);
208
+ },
209
+ getExports: () => A.exports,
210
+ setMemorySize: (e) => {
211
+ A.exports.Hash_SetMemorySize(e);
212
+ const t = A.exports.Hash_GetBuffer(),
213
+ n = A.exports.memory.buffer;
214
+ i = new Uint8Array(n, t, e);
215
+ },
216
+ init: g,
217
+ update: B,
218
+ digest: u,
219
+ save: () => {
220
+ if (!o) throw new Error("save() can only be called after init() and before digest()");
221
+ const t = A.exports.Hash_GetState(),
222
+ n = r(),
223
+ i = A.exports.memory.buffer,
224
+ a = new Uint8Array(i, t, n),
225
+ g = new Uint8Array(4 + n);
226
+ return (
227
+ ((e, t) => {
228
+ const n = t.length >> 1;
229
+ for (let A = 0; A < n; A++) {
230
+ const n = A << 1;
231
+ e[A] = E(t.charCodeAt(n), t.charCodeAt(n + 1));
232
+ }
233
+ })(g, e.hash),
234
+ g.set(a, 4),
235
+ g
236
+ );
237
+ },
238
+ load: (t) => {
239
+ if (!(t instanceof Uint8Array))
240
+ throw new Error("load() expects an Uint8Array generated by save()");
241
+ const n = A.exports.Hash_GetState(),
242
+ i = r(),
243
+ a = 4 + i,
244
+ g = A.exports.memory.buffer;
245
+ if (t.length !== a)
246
+ throw new Error(
247
+ "Bad state length (expected ".concat(a, " bytes, got ").concat(t.length, ")"),
248
+ );
249
+ if (
250
+ !((e, t) => {
251
+ if (e.length !== 2 * t.length) return !1;
252
+ for (let n = 0; n < t.length; n++) {
253
+ const A = n << 1;
254
+ if (t[n] !== E(e.charCodeAt(A), e.charCodeAt(A + 1))) return !1;
255
+ }
256
+ return !0;
257
+ })(e.hash, t.subarray(0, 4))
258
+ )
259
+ throw new Error("This state was written by an incompatible hash implementation");
260
+ const s = t.subarray(4);
261
+ (new Uint8Array(g, n, i).set(s), (o = !0));
262
+ },
263
+ calculate: (e) => {
264
+ const t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : null,
265
+ o = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : null;
266
+ if (!N(e, t)) return (g(t), B(e), u("hex", o));
267
+ const r = C(e);
268
+ return (i.set(r), A.exports.Hash_Calculate(r.length, t, o), s(c, i, n));
269
+ },
270
+ hashLength: n,
271
+ }
272
+ );
273
+ });
274
+ }
275
+ let v =
276
+ "AGFzbQE||BEAF/YAF/AG|AGACf38|wgH|EBAQAw$AQECAgYOAn8BQfCJBQt/AEGACAsHcAgGbWVtb3J5AÔHZXRCdWZmZX|lº0luaXQ|Qtº1VwZGF0ZQACCkhhc2hfRmluYWwABA1º0dldFN0YXRl|UÔDYWxjdWxhdGUABgpTVEFURV9TSVpFAwEKoEoHBQBBkLnQEABCADcDwÈBHEEgBB4AFGIbNgL#QFBAEKnn+anxvST/b5/Qquzj/yRo7Pw2wABs3A+C“QrGWgP6fooWs6ABC/6S5iMWR2oKbfy|GzcD2ÈCl7rDg5Onlod3QvLmu+Ojp/2npX8Bs3A9C“Qti9loj8oLW+NkLnzKfQ1tDrs7t/AbNwPI¥L7wICAX4Gf0EAApA8CJASCtfDcDw`AkACQAJAGnQT9xIgINAEGACSEDDAELAkBBw|msiBC|QEkbIgNFDQA0EDcSEFJBg`aiEGAhAgJANBBEkNACADQfwAcSEHAhAgNAYm#AyACQYAJ˜DFqJBgQ¿NBAmokGCCÀ0ED\vCQYMJ˜HJBBG#AkcN|sLVFDQADQCAGJqJB¿JBAWohAiAFQX9gUN|sLQEsNAU»y|RrIQAgBEGACWohAwsCQC|Qc|SQ0|0AxADNBwABQMEFAaiQT9LDQALCy|RQ0AAhAkÊUDQCACQYCJAWoyAC˜CFQICAFFgVB/wFxSw0ACwsLoz4BRX9BAC|KAI8IgFËU¡AB‰$§FBGXc$OA$̶OCICÏJ?k±JÒC\vµg!R>BE£BE}¶HF\vµE!Z>Bk£Bk}¶AH\vµk!hqJAk=Ak\bgN hgCÜK[K]µU‚tqJ hADE™M[M]µM‚1 jADmo¶CCIJÏl?gC$Idk<lÒPÝ9-9.Z igEGo$PBB{C$PJJ{E$PRR{EkEPSS{E2o¶NCIUh0R?gFE±RÒV•V-V.5qJ iwiFÜW[W]Q\vR\vIÝh-h.RqlqV>B$OB$ÌgCmoÇC0™L[L]M\vV\vNÝ1-1.9qZqNA0=A0\bhRFE=FE\bhdF0=F0\bhÂlGÉGU\bhpGk=Gk\bhtG0=G0\bhx>HE£HE}ÜC[C]V\vY\vOÝ5-5.ZqdqB>EE£EE}gCGogFGogE0EPTT{H$Pdd{HkEPee{H—E0™T[T]Y\vDÝN-N.Fqlq9H0=H0\biBqJ>Ek£Ek}gF—H—E$ZR[R]U\ve\vJÝl-l.Nq1qxHE=HE\biFIÉIU\biJIk=Ik\biNI0=I0\biRqt>G0£G0}gH¢I—GÜa[a]d\vi\vZ•l-l.NCFqh>GE£GE}ÍHGogF0™X[X]R\vb\vU•R-R.lqpCBIE=IE\biVJÉJU\biZJk=Jk\bidJ0=J0\bihKE=KE\bilKÉKU\bipKk=Kk\bit>K0£K0}gH0™f[f]b\vn\ve•5-5.pCZq1>H$OH$ÌgGÇJÇJEEPkk{LEEPss{L$Ptt{L¢JE™k[k]n\vg¸B-ICB.xChC5Lk=Lk\bi9CN>I0£I0}gJ¢L¢IÜi[i]l\vt\vh¸F-ICF.ICBCxCtK0=K0\bjBME=ME\bjFMÉMU\bjJMk=Mk\bjNCp>Kk£Kk}gLÇM¢K$Zp[p]s\vx\vo¸h-ICh.ICRDBCd>J0£J0}gI—K—JÜm[m]i\vq\vl¸V-ICV.ICFClC9L0=L0\bjRNE=NE\bjVNÉNU\bjZNk=Nk\bjdN0=N0\bjhOE=OE\bjlOÉOU\bjogOCA0IC4gLCAhsgG,D4gBE‘Y¥iO0ª7(7d3c0‘k¥iPGp–4`Ij1–3`Ij5zIDtxID1z\vHakGY36iUBG#B0‘U¥iP2#ACAM\v71D4gD—P,G\vAID4gO3NxID5z\vA¦BBGRid2JB2#QE‘Q¥iQW#DC|IDtœ7Ãz/eDrntkJ–z`IkNg0gDC|c3EHNq1%D$VDUaW3181+aiJE·siJASP0gDHÙxŽHbhNvKA2#RSBBIEMHNxIEMHÚB®EETAEE«dgZgdqUgD—CiAN\vLxqcgDyAN†DX‹fGjxM8FKYHMgQ3EgBi|€pIX+kXlgs¼A×PQ¨ŽHVvfHYem#QC*ER½E†BH‹ZjVnsB9aiJCš’RW#DG#BÇFiAH\vQ9qggBGogB,Ö$aF(FgbaNlAFgg¼N^\vKNPU¨ŽG+i8ahAm#Di*qt½F†BX‹cP7sagFQš€9Lr5lQdhY¼N×F\vBRqIgB—F,P\vFQ¨z\vF¦VVH+4/qGeG#By*qhÐgYgB,E†BHNqZ%BkEVBkaeN8N55EEÕ,N…DmÛ#DCAGVœFÃ9OLvjHxgUÎNQDNwgBnÙZz\vN¦11HB0+2kfm#CC\tZÐg8gF—E,N\vUxqkgB¢DyANxœMD0ªP(Pho/5/X5gYHCJ8gDXÙ1³HGu4b+AG#DCR¯EgC,P†D3~czDsqACNBW#AW#FCßÄ79ik7wJg8ICX\vTRqgŸEiAJ\vXQÁX¦ddGqidLTBG#GCZgNgkgFyAU†FH©dzTwuUFUDG°,JdœXÅ2pHmtwdhcNC&HSovnBeW#GS9¯Nq4ÍGiAR\vd;e2Mx8F6aGG#AWƒyM+MgHthgUCHH/+X6e2#FCdgN@fOXgLd8XGW°—ICAS\vcFq8_x6KerX1àHRxqk2a:G#A2„59KkoQFhgUai&GFldy9Am#FCABdgJhMgI—JiAS\viFCU_uMLs8AJ؁H827HpBG#GS\tp›ZOa4JkFa\fGG1OapqAZhg‡UDT\voJCQŸJyAJ\v)G7laizB2#FC\tdgFŒa6Si454X\fGWۄhdnIk3lhk‡aD&Gh0f+Vem#Gi\thÐhNCoÍL,R\vp;cvM6cB6Y\fFGۃ8JauknxhQ‡XDGjo7G7fG#Fy\tlgF@ZnQy4x9Z\fGmÛ#E—MCAS\vvFCs_pIzktH1ho‡YDGF67igf2#GC\tR›fDAqoMBU\fF2loKTzQFØTIDZDIÍN,R\vx;YjY3fEBZGm#AWƒzO6hugJhoYCG1+cKlA2#GCRgN@bOZ8MgDUF2°—LE™s[s]o\v0\vz93IDN¬IDN­XJDcŸMyAJ\v)HK1OL2BG#GyABlgJŒc+U89wFZ:m#A2„89+5wQZhoYai&Huhb6kB2#HCABRgJhNC5>Lk£Lk}gK¢N¢L$Zt[t]p\v1\vX93d¬d­U93R¬R­YJDkŸFCAJ\v)HvxpXFB2#CSt¯E¾~ZTwoaZ4bGW°iARNœTÆiISc5nhà)H6//uFeW#Gix¯QgPGo2AuS“ID8Jaitg:W#AaJajYC1`AgP,v¸9-IC9.ICtDdqÂgŸFCATJœSÄ69nBonphkW#EWo2AuC“IEEgC,DCc,JNxJ¹l”lž\vZaiajYC0`AgPiAw•IDB-IDB.IC9qdDpOk=Ok\bBJqEgFCAT†E3~ffH5vd7XJhJqNgLcCBDEgCXM3E,J…F2Ûo2Asy“IDsgNE™0[0]w\v4\vY93h¬h­\vT\vSEgFHNxR´Hy8cWzfG#E,Damo2Ati“AÎJRamo2AsiJAQu2BgIEfwF+·sCJASJ29xIgFÞCIoAgBBfy|N0IgB0QX9zcUG|,AdHM2ACQAJ|kA$OSQ0|kA$ORw0ABBADYCv`C0»0ÊMMAQs$NRg0BFBAWohAwsyE|kBBBiADa0EHcSICRQ0ANÞaiEBMh|NAFBADYCACABRQEEEBaiEAJBf2#Ag0ACws0F5akEHSQ0ABBAnQhAQNAFBmŠkŠiŠgŠIG#A$4Rw0ACwtBACEBBBACkDw`IgSnIgBBG3QEELdEGAgPwHcXIEEFdk<BBA3RˆjYCv`AgBEIdiKc2AriJAU»0EA·uS 5Ȗ4gE‘c¥2Aty“·ti 2Ȗ1UE‘Q¥2AtC“·sy zȖyI¥CQE‘#QEiAkUNAEÊADQCABQYAJ\vBQciJAÀ$BaiEBIEEBaiQf8BcUsN|sLCwYAQYCJAQujAQBBAENwPAEEcQ,UHUYiARs2Aui“Qqef5qfG9JP9vn9Cq7OP/JGjs/DbACABGzcD4ÈCsZaA/p+ihazoAEL/pLmIxZHagpt/EbNwPYEKXusODk6eWh3dC8ua746On/aelfyABGzcD0ÈC2L2WiPygtb42QufMp9DW0Ouzu38Rs3A8iJA,AÊBAsLCwEAQYAICwRw||IAd3MgcyAMnMXEyACcXM0EeDÑDÓ,DCc,BNxB¹F”Fž\vACÚÙIXÚJ®kETAkE«c,CFxC¹J”Jž\v\bEKdnN\tADJzFxMnÚN®0ETA0E«\vaiA\fE3MnE,D…d3c2pBIBBD3cgBB3dzakiC$YdCAJ¤l²Jh2cnIiiAEEYdC|¤B²Ah2cnIaiIgAQQdyAEHd3NqQyACBc,DJxD¹N”Nž\vqINzJxE3ÚF®$TA$«c—`IgBËE¡|‰EEYdnJyNgLQRBFXdz JASÏB?E±BˆjYC!IgNË0¡AD‰0E§#oi$UE%BGncg&SEgCXÙl´(V3)TIÁT¦NN*ANxzZx0gDHÚ1BHncgD$TD$Kd3N,SA-BDndz.BA3Zz:IXM3EÎcXMkEeCÑCÓG;lqMgEiAR†EXNqN%E0EVE0<GA/gNx=EN>BGXcg?BgP4Dc$IdHI@hIgE,J†CXNqJ%EkEVEk[53]N2^c,MZxM¹x”xž_gCÇEyASFœRE0ªT(T`IkB{p2c2#|AA}EÌ~NqF%E$VEURkgE3NxNz\vR¦FF€’QG#DG#BCAÖEªE(EJMgEnNxJ³‚IglËgCU¡AJ‰gC$§ƒ#C,TJœSC$aJ(J„#E,JNœTŅcXM$eBÑBӆc3Eg‡ÎDˆBGHZyc‰h2QYD+A3EŠ`akNwFB‹Nqd%B0EVB0Œgk¾©Û#Ei߯Žz\vP¦99CIDÏN?0±NҐ13‘EAKAL’cXMgBkEeGÑGӓJA$A”BE3dz•l3–BACgC—2og˜ai0|Do|CA™EZšYÕgBiAN›ÐhEgC,T†E3~œzc,iQFBAžBCndzŸgEÇ qAoA¡<h0ci¢mog£EO¤QYD+A3FBCHRy¥iQE¦p3§YdnJyIg¨gB3Ùd©Nql%C$VCUªEa«Kd3Nq¬BDXdz­BCnZz®BHnc¯gNh°#AW#E±EIdk<²BCHZBgP4Dc,³z\vJ¦ll´z\vS¦JJµAKAI¶CgC·AoA¸•IC¹53ºIYXNoX»GA¥QA¼gDCAG½gZgcgDyA¾gEyAS†En¿lqLQ|OAÀWot|A6|AÁgEXNxFz\vÂhGE=GE\bhÃDEªM(MÄFEªU(UÅE$aR(RÆEkªS(SÇWogÈ`BÉ$NÊEAIQËBGHQÌDdnMÍgE¢ÎiABÏh0ÐgFÑN3҈iIÓp3ÔOSGFzaF9ÕgDXMgDHEÖH9œPB×^aiBCNØhc‡ZDÙNxÚFzÛ#AmÜk™Ý•ÞBAnRBg`ßARlœJàhkaC";
277
+ const N =
278
+ "àßÞÝÜÛÚÙØ×ÖÕÔÓÒÑÐÏÎÍÌËÊÉÈÇÆÅÄÃÂÁÀ¿¾½¼»º¹¸·¶µ´³²±°¯®­¬«ª©¨§¦¥¤£¢¡ Ÿžœ›š™˜—–•”“’‘ŽŒ‹Š‰ˆ‡†…„ƒ‚€~}|{`_^][@?>=<;:.-,*)(&%$#! \f\v\t\b";
279
+ let D;
280
+ for (D in N) {
281
+ const e = v.split(N[D]);
282
+ v = e.join(e.pop());
283
+ }
284
+ var G = { name: "sha256", data: v, hash: "64f06674" };
285
+ const y = new n();
286
+ let J = null;
287
+ ((e.createSHA256 = () =>
288
+ u(G, 32).then((e) => {
289
+ e.init(256);
290
+ const t = {
291
+ init: () => (e.init(256), t),
292
+ update: (n) => (e.update(n), t),
293
+ digest: (t) => e.digest(t),
294
+ save: () => e.save(),
295
+ load: (n) => (e.load(n), t),
296
+ blockSize: 64,
297
+ digestSize: 32,
298
+ };
299
+ return t;
300
+ })),
301
+ (e.sha256 = (e) => {
302
+ if (null === J)
303
+ return (function (e, n) {
304
+ return t(this, void 0, void 0, function* () {
305
+ const t = yield e.lock(),
306
+ A = yield u(n, 32);
307
+ return (t(), A);
308
+ });
309
+ })(y, G).then((t) => ((J = t), J.calculate(e, 256)));
310
+ try {
311
+ const t = J.calculate(e, 256);
312
+ return Promise.resolve(t);
313
+ } catch (e) {
314
+ return Promise.reject(e);
315
+ }
316
+ }));
317
+ });
318
+
319
+ console.warn(
320
+ `[cap]
321
+ %cYou're using a deprecated version of Cap's widget that still relies on this file.
322
+
323
+ It may continue to work for now, but could break at any time since this dependency was removed several versions ago.
324
+
325
+ Please update Cap to fix this.`,
326
+ "font-size:15px;background-image:url('https://external-content.duckduckgo.com/iu/?u=https%3A%2F%2Fpreview.colorkit.co%2Fcolor%2FEEEEEE.png%3Ftype%3Darticle-preview-logo%26size%3Dsocial%26colorname%3DSuper%2520Silver&f=1&nofb=1&ipt=49845e9195461b7c779182793c2ebf7834102eaf5561c15fa2cbb55494b77a9b');background-size:10px",
327
+ );