From 83c782c4695b0646a5c7fbd9762f9b80e306bb95 Mon Sep 17 00:00:00 2001 From: Richard Date: Fri, 31 Jul 2026 11:39:29 +0200 Subject: [PATCH] feat: Replace aCAPTCHA with official ALTCHA (altcha.org) Proof-of-Work web component widget --- frontend/dist/assets/index-BocP3KKS.js | 272 - frontend/dist/assets/index-CR8RYpZS.css | 1 - frontend/dist/assets/index-CeGSMgG7.js | 1268 +++ frontend/dist/assets/index-DXNVMwNg.css | 1 + frontend/dist/index.html | 5 +- frontend/index.html | 1 - frontend/node_modules/.package-lock.json | 30 + frontend/node_modules/altcha/LICENSE.txt | 21 + frontend/node_modules/altcha/README.md | 487 + .../altcha/dist/external/altcha.css | 1 + .../altcha/dist/external/altcha.js | 7352 ++++++++++++++ .../altcha/dist/external/altcha.min.js | 1 + .../altcha/dist/external/altcha.umd.cjs | 7358 ++++++++++++++ .../altcha/dist/external/altcha.umd.min.cjs | 1 + .../node_modules/altcha/dist/i18n/419.d.ts | 1 + .../node_modules/altcha/dist/i18n/af.d.ts | 1 + frontend/node_modules/altcha/dist/i18n/af.js | 128 + .../node_modules/altcha/dist/i18n/af.umd.cjs | 133 + .../node_modules/altcha/dist/i18n/africa.d.ts | 1 + .../node_modules/altcha/dist/i18n/africa.js | 248 + .../altcha/dist/i18n/africa.umd.cjs | 253 + .../node_modules/altcha/dist/i18n/all.d.ts | 1 + frontend/node_modules/altcha/dist/i18n/all.js | 1328 +++ .../node_modules/altcha/dist/i18n/all.umd.cjs | 1333 +++ .../node_modules/altcha/dist/i18n/am.d.ts | 1 + frontend/node_modules/altcha/dist/i18n/am.js | 128 + .../node_modules/altcha/dist/i18n/am.umd.cjs | 133 + .../altcha/dist/i18n/americas.d.ts | 1 + .../node_modules/altcha/dist/i18n/americas.js | 168 + .../altcha/dist/i18n/americas.umd.cjs | 173 + .../node_modules/altcha/dist/i18n/ar.d.ts | 1 + frontend/node_modules/altcha/dist/i18n/ar.js | 128 + .../node_modules/altcha/dist/i18n/ar.umd.cjs | 133 + .../node_modules/altcha/dist/i18n/asia.d.ts | 1 + .../node_modules/altcha/dist/i18n/asia.js | 588 ++ .../altcha/dist/i18n/asia.umd.cjs | 593 ++ .../node_modules/altcha/dist/i18n/az.d.ts | 1 + frontend/node_modules/altcha/dist/i18n/az.js | 128 + .../node_modules/altcha/dist/i18n/az.umd.cjs | 133 + .../node_modules/altcha/dist/i18n/be.d.ts | 1 + frontend/node_modules/altcha/dist/i18n/be.js | 128 + .../node_modules/altcha/dist/i18n/be.umd.cjs | 133 + .../node_modules/altcha/dist/i18n/bg.d.ts | 1 + frontend/node_modules/altcha/dist/i18n/bg.js | 128 + .../node_modules/altcha/dist/i18n/bg.umd.cjs | 133 + .../node_modules/altcha/dist/i18n/bn.d.ts | 1 + frontend/node_modules/altcha/dist/i18n/bn.js | 128 + .../node_modules/altcha/dist/i18n/bn.umd.cjs | 133 + .../node_modules/altcha/dist/i18n/br.d.ts | 1 + .../node_modules/altcha/dist/i18n/bs.d.ts | 1 + frontend/node_modules/altcha/dist/i18n/bs.js | 128 + .../node_modules/altcha/dist/i18n/bs.umd.cjs | 133 + .../node_modules/altcha/dist/i18n/ca.d.ts | 1 + frontend/node_modules/altcha/dist/i18n/ca.js | 128 + .../node_modules/altcha/dist/i18n/ca.umd.cjs | 133 + .../node_modules/altcha/dist/i18n/cn.d.ts | 1 + .../node_modules/altcha/dist/i18n/cs.d.ts | 1 + frontend/node_modules/altcha/dist/i18n/cs.js | 128 + .../node_modules/altcha/dist/i18n/cs.umd.cjs | 133 + .../node_modules/altcha/dist/i18n/da.d.ts | 1 + frontend/node_modules/altcha/dist/i18n/da.js | 128 + .../node_modules/altcha/dist/i18n/da.umd.cjs | 133 + .../node_modules/altcha/dist/i18n/de.d.ts | 1 + frontend/node_modules/altcha/dist/i18n/de.js | 128 + .../node_modules/altcha/dist/i18n/de.umd.cjs | 133 + .../node_modules/altcha/dist/i18n/el.d.ts | 1 + frontend/node_modules/altcha/dist/i18n/el.js | 128 + .../node_modules/altcha/dist/i18n/el.umd.cjs | 133 + .../node_modules/altcha/dist/i18n/en.d.ts | 1 + frontend/node_modules/altcha/dist/i18n/en.js | 128 + .../node_modules/altcha/dist/i18n/en.umd.cjs | 133 + .../node_modules/altcha/dist/i18n/es-419.js | 128 + .../altcha/dist/i18n/es-419.umd.cjs | 133 + .../node_modules/altcha/dist/i18n/es-es.js | 128 + .../altcha/dist/i18n/es-es.umd.cjs | 133 + .../node_modules/altcha/dist/i18n/es.d.ts | 1 + .../node_modules/altcha/dist/i18n/et.d.ts | 1 + frontend/node_modules/altcha/dist/i18n/et.js | 128 + .../node_modules/altcha/dist/i18n/et.umd.cjs | 133 + .../node_modules/altcha/dist/i18n/eu.d.ts | 1 + frontend/node_modules/altcha/dist/i18n/eu.js | 128 + .../node_modules/altcha/dist/i18n/eu.umd.cjs | 133 + .../node_modules/altcha/dist/i18n/europe.d.ts | 1 + .../node_modules/altcha/dist/i18n/europe.js | 848 ++ .../altcha/dist/i18n/europe.umd.cjs | 853 ++ .../node_modules/altcha/dist/i18n/fa.d.ts | 1 + frontend/node_modules/altcha/dist/i18n/fa.js | 128 + .../node_modules/altcha/dist/i18n/fa.umd.cjs | 133 + .../node_modules/altcha/dist/i18n/fi.d.ts | 1 + frontend/node_modules/altcha/dist/i18n/fi.js | 128 + .../node_modules/altcha/dist/i18n/fi.umd.cjs | 133 + .../node_modules/altcha/dist/i18n/fr-ca.js | 128 + .../altcha/dist/i18n/fr-ca.umd.cjs | 133 + .../node_modules/altcha/dist/i18n/fr-fr.js | 128 + .../altcha/dist/i18n/fr-fr.umd.cjs | 133 + .../node_modules/altcha/dist/i18n/fr.d.ts | 1 + .../node_modules/altcha/dist/i18n/ga.d.ts | 1 + frontend/node_modules/altcha/dist/i18n/ga.js | 128 + .../node_modules/altcha/dist/i18n/ga.umd.cjs | 133 + .../node_modules/altcha/dist/i18n/he.d.ts | 1 + frontend/node_modules/altcha/dist/i18n/he.js | 128 + .../node_modules/altcha/dist/i18n/he.umd.cjs | 133 + .../node_modules/altcha/dist/i18n/hi.d.ts | 1 + frontend/node_modules/altcha/dist/i18n/hi.js | 128 + .../node_modules/altcha/dist/i18n/hi.umd.cjs | 133 + .../node_modules/altcha/dist/i18n/hk.d.ts | 1 + .../node_modules/altcha/dist/i18n/hr.d.ts | 1 + frontend/node_modules/altcha/dist/i18n/hr.js | 128 + .../node_modules/altcha/dist/i18n/hr.umd.cjs | 133 + .../node_modules/altcha/dist/i18n/hu.d.ts | 1 + frontend/node_modules/altcha/dist/i18n/hu.js | 128 + .../node_modules/altcha/dist/i18n/hu.umd.cjs | 133 + .../node_modules/altcha/dist/i18n/hy.d.ts | 1 + frontend/node_modules/altcha/dist/i18n/hy.js | 128 + .../node_modules/altcha/dist/i18n/hy.umd.cjs | 133 + .../node_modules/altcha/dist/i18n/id.d.ts | 1 + frontend/node_modules/altcha/dist/i18n/id.js | 128 + .../node_modules/altcha/dist/i18n/id.umd.cjs | 133 + .../node_modules/altcha/dist/i18n/is.d.ts | 1 + frontend/node_modules/altcha/dist/i18n/is.js | 128 + .../node_modules/altcha/dist/i18n/is.umd.cjs | 133 + .../node_modules/altcha/dist/i18n/it.d.ts | 1 + frontend/node_modules/altcha/dist/i18n/it.js | 128 + .../node_modules/altcha/dist/i18n/it.umd.cjs | 133 + .../node_modules/altcha/dist/i18n/ja.d.ts | 1 + frontend/node_modules/altcha/dist/i18n/ja.js | 128 + .../node_modules/altcha/dist/i18n/ja.umd.cjs | 133 + .../node_modules/altcha/dist/i18n/ka.d.ts | 1 + frontend/node_modules/altcha/dist/i18n/ka.js | 128 + .../node_modules/altcha/dist/i18n/ka.umd.cjs | 133 + .../node_modules/altcha/dist/i18n/kk.d.ts | 1 + frontend/node_modules/altcha/dist/i18n/kk.js | 128 + .../node_modules/altcha/dist/i18n/kk.umd.cjs | 133 + .../node_modules/altcha/dist/i18n/ko.d.ts | 1 + frontend/node_modules/altcha/dist/i18n/ko.js | 128 + .../node_modules/altcha/dist/i18n/ko.umd.cjs | 133 + .../node_modules/altcha/dist/i18n/lb.d.ts | 1 + frontend/node_modules/altcha/dist/i18n/lb.js | 128 + .../node_modules/altcha/dist/i18n/lb.umd.cjs | 133 + .../node_modules/altcha/dist/i18n/lt.d.ts | 1 + frontend/node_modules/altcha/dist/i18n/lt.js | 128 + .../node_modules/altcha/dist/i18n/lt.umd.cjs | 133 + .../node_modules/altcha/dist/i18n/lv.d.ts | 1 + frontend/node_modules/altcha/dist/i18n/lv.js | 128 + .../node_modules/altcha/dist/i18n/lv.umd.cjs | 133 + .../node_modules/altcha/dist/i18n/me.d.ts | 1 + frontend/node_modules/altcha/dist/i18n/me.js | 128 + .../node_modules/altcha/dist/i18n/me.umd.cjs | 133 + .../node_modules/altcha/dist/i18n/mk.d.ts | 1 + frontend/node_modules/altcha/dist/i18n/mk.js | 128 + .../node_modules/altcha/dist/i18n/mk.umd.cjs | 133 + .../node_modules/altcha/dist/i18n/mr.d.ts | 1 + frontend/node_modules/altcha/dist/i18n/mr.js | 128 + .../node_modules/altcha/dist/i18n/mr.umd.cjs | 133 + .../node_modules/altcha/dist/i18n/mt.d.ts | 1 + frontend/node_modules/altcha/dist/i18n/mt.js | 128 + .../node_modules/altcha/dist/i18n/mt.umd.cjs | 133 + .../node_modules/altcha/dist/i18n/nb.d.ts | 1 + frontend/node_modules/altcha/dist/i18n/nb.js | 128 + .../node_modules/altcha/dist/i18n/nb.umd.cjs | 133 + .../node_modules/altcha/dist/i18n/nl.d.ts | 1 + frontend/node_modules/altcha/dist/i18n/nl.js | 128 + .../node_modules/altcha/dist/i18n/nl.umd.cjs | 133 + .../node_modules/altcha/dist/i18n/pl.d.ts | 1 + frontend/node_modules/altcha/dist/i18n/pl.js | 128 + .../node_modules/altcha/dist/i18n/pl.umd.cjs | 133 + .../node_modules/altcha/dist/i18n/pt-br.js | 128 + .../altcha/dist/i18n/pt-br.umd.cjs | 133 + .../node_modules/altcha/dist/i18n/pt-pt.js | 128 + .../altcha/dist/i18n/pt-pt.umd.cjs | 133 + .../node_modules/altcha/dist/i18n/pt.d.ts | 1 + .../node_modules/altcha/dist/i18n/ro.d.ts | 1 + frontend/node_modules/altcha/dist/i18n/ro.js | 128 + .../node_modules/altcha/dist/i18n/ro.umd.cjs | 133 + .../node_modules/altcha/dist/i18n/ru.d.ts | 1 + frontend/node_modules/altcha/dist/i18n/ru.js | 128 + .../node_modules/altcha/dist/i18n/ru.umd.cjs | 133 + .../node_modules/altcha/dist/i18n/sk.d.ts | 1 + frontend/node_modules/altcha/dist/i18n/sk.js | 128 + .../node_modules/altcha/dist/i18n/sk.umd.cjs | 133 + .../node_modules/altcha/dist/i18n/sl.d.ts | 1 + frontend/node_modules/altcha/dist/i18n/sl.js | 128 + .../node_modules/altcha/dist/i18n/sl.umd.cjs | 133 + .../node_modules/altcha/dist/i18n/sq.d.ts | 1 + frontend/node_modules/altcha/dist/i18n/sq.js | 128 + .../node_modules/altcha/dist/i18n/sq.umd.cjs | 133 + .../node_modules/altcha/dist/i18n/sr.d.ts | 1 + frontend/node_modules/altcha/dist/i18n/sr.js | 128 + .../node_modules/altcha/dist/i18n/sr.umd.cjs | 133 + .../node_modules/altcha/dist/i18n/sv.d.ts | 1 + frontend/node_modules/altcha/dist/i18n/sv.js | 128 + .../node_modules/altcha/dist/i18n/sv.umd.cjs | 133 + .../node_modules/altcha/dist/i18n/sw.d.ts | 1 + frontend/node_modules/altcha/dist/i18n/sw.js | 128 + .../node_modules/altcha/dist/i18n/sw.umd.cjs | 133 + .../node_modules/altcha/dist/i18n/ta.d.ts | 1 + frontend/node_modules/altcha/dist/i18n/ta.js | 128 + .../node_modules/altcha/dist/i18n/ta.umd.cjs | 133 + .../node_modules/altcha/dist/i18n/te.d.ts | 1 + frontend/node_modules/altcha/dist/i18n/te.js | 128 + .../node_modules/altcha/dist/i18n/te.umd.cjs | 133 + .../node_modules/altcha/dist/i18n/th.d.ts | 1 + frontend/node_modules/altcha/dist/i18n/th.js | 128 + .../node_modules/altcha/dist/i18n/th.umd.cjs | 133 + .../node_modules/altcha/dist/i18n/tk.d.ts | 1 + frontend/node_modules/altcha/dist/i18n/tk.js | 128 + .../node_modules/altcha/dist/i18n/tk.umd.cjs | 133 + .../node_modules/altcha/dist/i18n/tr.d.ts | 1 + frontend/node_modules/altcha/dist/i18n/tr.js | 128 + .../node_modules/altcha/dist/i18n/tr.umd.cjs | 133 + .../node_modules/altcha/dist/i18n/tw.d.ts | 1 + .../node_modules/altcha/dist/i18n/uk.d.ts | 1 + frontend/node_modules/altcha/dist/i18n/uk.js | 128 + .../node_modules/altcha/dist/i18n/uk.umd.cjs | 133 + .../node_modules/altcha/dist/i18n/ur.d.ts | 1 + frontend/node_modules/altcha/dist/i18n/ur.js | 128 + .../node_modules/altcha/dist/i18n/ur.umd.cjs | 133 + .../node_modules/altcha/dist/i18n/uz.d.ts | 1 + frontend/node_modules/altcha/dist/i18n/uz.js | 128 + .../node_modules/altcha/dist/i18n/uz.umd.cjs | 133 + .../node_modules/altcha/dist/i18n/vi.d.ts | 1 + frontend/node_modules/altcha/dist/i18n/vi.js | 128 + .../node_modules/altcha/dist/i18n/vi.umd.cjs | 133 + .../node_modules/altcha/dist/i18n/yo.d.ts | 1 + frontend/node_modules/altcha/dist/i18n/yo.js | 128 + .../node_modules/altcha/dist/i18n/yo.umd.cjs | 133 + .../node_modules/altcha/dist/i18n/zh-cn.js | 128 + .../altcha/dist/i18n/zh-cn.umd.cjs | 133 + .../node_modules/altcha/dist/i18n/zh-hk.js | 128 + .../altcha/dist/i18n/zh-hk.umd.cjs | 133 + .../node_modules/altcha/dist/i18n/zh-tw.js | 128 + .../altcha/dist/i18n/zh-tw.umd.cjs | 133 + .../node_modules/altcha/dist/lib/index.d.ts | 480 + .../node_modules/altcha/dist/lib/index.js | 1422 +++ .../node_modules/altcha/dist/lib/index.min.js | 1 + .../altcha/dist/lib/index.umd.cjs | 1426 +++ .../altcha/dist/lib/index.umd.min.cjs | 1 + .../altcha/dist/main/altcha.i18n.js | 8984 ++++++++++++++++ .../altcha/dist/main/altcha.i18n.min.js | 1 + .../altcha/dist/main/altcha.i18n.umd.cjs | 8987 +++++++++++++++++ .../altcha/dist/main/altcha.i18n.umd.min.cjs | 1 + .../node_modules/altcha/dist/main/altcha.js | 7764 ++++++++++++++ .../altcha/dist/main/altcha.min.js | 1 + .../altcha/dist/main/altcha.umd.cjs | 7767 ++++++++++++++ .../altcha/dist/main/altcha.umd.min.cjs | 1 + .../dist/plugins/obfuscation.plugin.d.ts | 1 + .../altcha/dist/plugins/obfuscation.plugin.js | 619 ++ .../dist/plugins/obfuscation.plugin.min.js | 1 + .../dist/plugins/obfuscation.plugin.umd.cjs | 624 ++ .../plugins/obfuscation.plugin.umd.min.cjs | 1 + .../node_modules/altcha/dist/themes/aqua.css | 19 + .../altcha/dist/themes/aqua.min.css | 1 + .../altcha/dist/themes/business.css | 15 + .../altcha/dist/themes/business.min.css | 1 + .../altcha/dist/themes/caramel.css | 19 + .../altcha/dist/themes/caramel.min.css | 1 + .../altcha/dist/themes/cupcake.css | 16 + .../altcha/dist/themes/cupcake.min.css | 1 + .../altcha/dist/themes/cyberpunk.css | 24 + .../altcha/dist/themes/cyberpunk.min.css | 1 + .../node_modules/altcha/dist/themes/lime.css | 14 + .../altcha/dist/themes/lime.min.css | 1 + .../altcha/dist/themes/wireframe.css | 17 + .../altcha/dist/themes/wireframe.min.css | 1 + .../altcha/dist/types/generic.d.ts | 28 + .../node_modules/altcha/dist/types/generic.js | 1 + .../altcha/dist/types/global.d.ts | 5 + .../node_modules/altcha/dist/types/global.js | 1 + .../node_modules/altcha/dist/types/index.d.ts | 409 + .../node_modules/altcha/dist/types/index.js | 23 + .../node_modules/altcha/dist/types/jsx.d.ts | 22 + .../node_modules/altcha/dist/types/jsx.js | 1 + .../node_modules/altcha/dist/types/react.d.ts | 32 + .../node_modules/altcha/dist/types/react.js | 1 + .../altcha/dist/types/svelte.d.ts | 25 + .../node_modules/altcha/dist/types/svelte.js | 1 + .../altcha/dist/workers/argon2id.js | 791 ++ .../altcha/dist/workers/pbkdf2.js | 181 + .../altcha/dist/workers/scrypt.js | 744 ++ .../node_modules/altcha/dist/workers/sha.js | 165 + frontend/node_modules/altcha/package.json | 152 + frontend/node_modules/fsevents/LICENSE | 22 + frontend/node_modules/fsevents/README.md | 89 + frontend/node_modules/fsevents/fsevents.d.ts | 46 + frontend/node_modules/fsevents/fsevents.js | 83 + frontend/node_modules/fsevents/fsevents.node | Bin 0 -> 163626 bytes frontend/node_modules/fsevents/package.json | 62 + .../hash-wasm/.vscode/settings.json | 3 + frontend/node_modules/hash-wasm/CHANGELOG.md | 187 + frontend/node_modules/hash-wasm/LICENSE | 38 + frontend/node_modules/hash-wasm/README.md | 543 + frontend/node_modules/hash-wasm/biome.json | 42 + .../hash-wasm/dist/adler32.umd.min.js | 7 + .../hash-wasm/dist/argon2.umd.min.js | 7 + .../hash-wasm/dist/bcrypt.umd.min.js | 7 + .../hash-wasm/dist/blake2b.umd.min.js | 7 + .../hash-wasm/dist/blake2s.umd.min.js | 7 + .../hash-wasm/dist/blake3.umd.min.js | 7 + .../hash-wasm/dist/crc32.umd.min.js | 7 + .../hash-wasm/dist/crc64.umd.min.js | 7 + .../hash-wasm/dist/hmac.umd.min.js | 7 + .../node_modules/hash-wasm/dist/index.esm.js | 2671 +++++ .../hash-wasm/dist/index.esm.min.js | 7 + .../node_modules/hash-wasm/dist/index.umd.js | 2731 +++++ .../hash-wasm/dist/index.umd.min.js | 7 + .../hash-wasm/dist/keccak.umd.min.js | 7 + .../hash-wasm/dist/lib/WASMInterface.d.ts | 60 + .../hash-wasm/dist/lib/adler32.d.ts | 14 + .../hash-wasm/dist/lib/argon2.d.ts | 74 + .../hash-wasm/dist/lib/bcrypt.d.ts | 44 + .../hash-wasm/dist/lib/blake2b.d.ts | 18 + .../hash-wasm/dist/lib/blake2s.d.ts | 18 + .../hash-wasm/dist/lib/blake3.d.ts | 18 + .../hash-wasm/dist/lib/crc32.d.ts | 14 + .../hash-wasm/dist/lib/crc64.d.ts | 14 + .../node_modules/hash-wasm/dist/lib/hmac.d.ts | 8 + .../hash-wasm/dist/lib/index.d.ts | 29 + .../hash-wasm/dist/lib/keccak.d.ts | 16 + .../hash-wasm/dist/lib/lockedCreate.d.ts | 4 + .../node_modules/hash-wasm/dist/lib/md4.d.ts | 12 + .../node_modules/hash-wasm/dist/lib/md5.d.ts | 12 + .../hash-wasm/dist/lib/mutex.d.ts | 6 + .../hash-wasm/dist/lib/pbkdf2.d.ts | 37 + .../hash-wasm/dist/lib/ripemd160.d.ts | 12 + .../hash-wasm/dist/lib/scrypt.d.ts | 42 + .../node_modules/hash-wasm/dist/lib/sha1.d.ts | 12 + .../hash-wasm/dist/lib/sha224.d.ts | 12 + .../hash-wasm/dist/lib/sha256.d.ts | 12 + .../node_modules/hash-wasm/dist/lib/sha3.d.ts | 16 + .../hash-wasm/dist/lib/sha384.d.ts | 12 + .../hash-wasm/dist/lib/sha512.d.ts | 12 + .../node_modules/hash-wasm/dist/lib/sm3.d.ts | 12 + .../node_modules/hash-wasm/dist/lib/util.d.ts | 15 + .../hash-wasm/dist/lib/whirlpool.d.ts | 12 + .../hash-wasm/dist/lib/xxhash128.d.ts | 20 + .../hash-wasm/dist/lib/xxhash3.d.ts | 20 + .../hash-wasm/dist/lib/xxhash32.d.ts | 15 + .../hash-wasm/dist/lib/xxhash64.d.ts | 20 + .../hash-wasm/dist/md4.umd.min.js | 7 + .../hash-wasm/dist/md5.umd.min.js | 7 + .../hash-wasm/dist/pbkdf2.umd.min.js | 7 + .../hash-wasm/dist/ripemd160.umd.min.js | 7 + .../hash-wasm/dist/scrypt.umd.min.js | 7 + .../hash-wasm/dist/sha1.umd.min.js | 7 + .../hash-wasm/dist/sha224.umd.min.js | 7 + .../hash-wasm/dist/sha256.umd.min.js | 7 + .../hash-wasm/dist/sha3.umd.min.js | 7 + .../hash-wasm/dist/sha384.umd.min.js | 7 + .../hash-wasm/dist/sha512.umd.min.js | 7 + .../hash-wasm/dist/sm3.umd.min.js | 7 + .../hash-wasm/dist/whirlpool.umd.min.js | 7 + .../hash-wasm/dist/xxhash128.umd.min.js | 7 + .../hash-wasm/dist/xxhash3.umd.min.js | 7 + .../hash-wasm/dist/xxhash32.umd.min.js | 7 + .../hash-wasm/dist/xxhash64.umd.min.js | 7 + .../node_modules/hash-wasm/jest.config.js | 9 + .../hash-wasm/lib/WASMInterface.ts | 310 + .../node_modules/hash-wasm/lib/adler32.ts | 64 + frontend/node_modules/hash-wasm/lib/argon2.ts | 396 + frontend/node_modules/hash-wasm/lib/bcrypt.ts | 186 + .../node_modules/hash-wasm/lib/blake2b.ts | 135 + .../node_modules/hash-wasm/lib/blake2s.ts | 135 + frontend/node_modules/hash-wasm/lib/blake3.ts | 133 + frontend/node_modules/hash-wasm/lib/crc32.ts | 82 + frontend/node_modules/hash-wasm/lib/crc64.ts | 110 + frontend/node_modules/hash-wasm/lib/hmac.ts | 86 + frontend/node_modules/hash-wasm/lib/index.ts | 30 + frontend/node_modules/hash-wasm/lib/keccak.ts | 88 + .../hash-wasm/lib/lockedCreate.ts | 14 + frontend/node_modules/hash-wasm/lib/md4.ts | 62 + frontend/node_modules/hash-wasm/lib/md5.ts | 62 + frontend/node_modules/hash-wasm/lib/mutex.ts | 24 + frontend/node_modules/hash-wasm/lib/pbkdf2.ts | 138 + .../node_modules/hash-wasm/lib/ripemd160.ts | 62 + frontend/node_modules/hash-wasm/lib/scrypt.ts | 141 + frontend/node_modules/hash-wasm/lib/sha1.ts | 62 + frontend/node_modules/hash-wasm/lib/sha224.ts | 62 + frontend/node_modules/hash-wasm/lib/sha256.ts | 62 + frontend/node_modules/hash-wasm/lib/sha3.ts | 84 + frontend/node_modules/hash-wasm/lib/sha384.ts | 62 + frontend/node_modules/hash-wasm/lib/sha512.ts | 62 + frontend/node_modules/hash-wasm/lib/sm3.ts | 62 + frontend/node_modules/hash-wasm/lib/util.ts | 191 + .../node_modules/hash-wasm/lib/whirlpool.ts | 62 + .../node_modules/hash-wasm/lib/xxhash128.ts | 115 + .../node_modules/hash-wasm/lib/xxhash3.ts | 115 + .../node_modules/hash-wasm/lib/xxhash32.ts | 79 + .../node_modules/hash-wasm/lib/xxhash64.ts | 115 + frontend/node_modules/hash-wasm/package.json | 100 + .../node_modules/hash-wasm/rollup.config.mjs | 112 + frontend/node_modules/hash-wasm/src/adler32.c | 143 + frontend/node_modules/hash-wasm/src/argon2.c | 237 + frontend/node_modules/hash-wasm/src/bcrypt.c | 787 ++ frontend/node_modules/hash-wasm/src/blake2b.c | 298 + frontend/node_modules/hash-wasm/src/blake2s.c | 284 + frontend/node_modules/hash-wasm/src/blake3.c | 867 ++ frontend/node_modules/hash-wasm/src/crc32.c | 94 + frontend/node_modules/hash-wasm/src/crc64.c | 86 + .../node_modules/hash-wasm/src/hash-wasm.h | 132 + frontend/node_modules/hash-wasm/src/md4.c | 290 + frontend/node_modules/hash-wasm/src/md5.c | 311 + .../node_modules/hash-wasm/src/ripemd160.c | 308 + frontend/node_modules/hash-wasm/src/scrypt.c | 294 + frontend/node_modules/hash-wasm/src/sha1.c | 192 + frontend/node_modules/hash-wasm/src/sha256.c | 295 + frontend/node_modules/hash-wasm/src/sha3.c | 332 + frontend/node_modules/hash-wasm/src/sha512.c | 308 + frontend/node_modules/hash-wasm/src/sm3.c | 231 + .../node_modules/hash-wasm/src/whirlpool.c | 243 + .../node_modules/hash-wasm/src/xxhash128.c | 1003 ++ frontend/node_modules/hash-wasm/src/xxhash3.c | 871 ++ .../node_modules/hash-wasm/src/xxhash32.c | 183 + .../node_modules/hash-wasm/src/xxhash64.c | 199 + frontend/node_modules/hash-wasm/tsconfig.json | 16 + frontend/package-lock.json | 16 + frontend/package.json | 5 +- frontend/src/components/GuestSignupModal.jsx | 62 +- 417 files changed, 100543 insertions(+), 317 deletions(-) delete mode 100644 frontend/dist/assets/index-BocP3KKS.js delete mode 100644 frontend/dist/assets/index-CR8RYpZS.css create mode 100644 frontend/dist/assets/index-CeGSMgG7.js create mode 100644 frontend/dist/assets/index-DXNVMwNg.css create mode 100644 frontend/node_modules/altcha/LICENSE.txt create mode 100644 frontend/node_modules/altcha/README.md create mode 100644 frontend/node_modules/altcha/dist/external/altcha.css create mode 100644 frontend/node_modules/altcha/dist/external/altcha.js create mode 100644 frontend/node_modules/altcha/dist/external/altcha.min.js create mode 100644 frontend/node_modules/altcha/dist/external/altcha.umd.cjs create mode 100644 frontend/node_modules/altcha/dist/external/altcha.umd.min.cjs create mode 100644 frontend/node_modules/altcha/dist/i18n/419.d.ts create mode 100644 frontend/node_modules/altcha/dist/i18n/af.d.ts create mode 100644 frontend/node_modules/altcha/dist/i18n/af.js create mode 100644 frontend/node_modules/altcha/dist/i18n/af.umd.cjs create mode 100644 frontend/node_modules/altcha/dist/i18n/africa.d.ts create mode 100644 frontend/node_modules/altcha/dist/i18n/africa.js create mode 100644 frontend/node_modules/altcha/dist/i18n/africa.umd.cjs create mode 100644 frontend/node_modules/altcha/dist/i18n/all.d.ts create mode 100644 frontend/node_modules/altcha/dist/i18n/all.js create mode 100644 frontend/node_modules/altcha/dist/i18n/all.umd.cjs create mode 100644 frontend/node_modules/altcha/dist/i18n/am.d.ts create mode 100644 frontend/node_modules/altcha/dist/i18n/am.js create mode 100644 frontend/node_modules/altcha/dist/i18n/am.umd.cjs create mode 100644 frontend/node_modules/altcha/dist/i18n/americas.d.ts create mode 100644 frontend/node_modules/altcha/dist/i18n/americas.js create mode 100644 frontend/node_modules/altcha/dist/i18n/americas.umd.cjs create mode 100644 frontend/node_modules/altcha/dist/i18n/ar.d.ts create mode 100644 frontend/node_modules/altcha/dist/i18n/ar.js create mode 100644 frontend/node_modules/altcha/dist/i18n/ar.umd.cjs create mode 100644 frontend/node_modules/altcha/dist/i18n/asia.d.ts create mode 100644 frontend/node_modules/altcha/dist/i18n/asia.js create mode 100644 frontend/node_modules/altcha/dist/i18n/asia.umd.cjs create mode 100644 frontend/node_modules/altcha/dist/i18n/az.d.ts create mode 100644 frontend/node_modules/altcha/dist/i18n/az.js create mode 100644 frontend/node_modules/altcha/dist/i18n/az.umd.cjs create mode 100644 frontend/node_modules/altcha/dist/i18n/be.d.ts create mode 100644 frontend/node_modules/altcha/dist/i18n/be.js create mode 100644 frontend/node_modules/altcha/dist/i18n/be.umd.cjs create mode 100644 frontend/node_modules/altcha/dist/i18n/bg.d.ts create mode 100644 frontend/node_modules/altcha/dist/i18n/bg.js create mode 100644 frontend/node_modules/altcha/dist/i18n/bg.umd.cjs create mode 100644 frontend/node_modules/altcha/dist/i18n/bn.d.ts create mode 100644 frontend/node_modules/altcha/dist/i18n/bn.js create mode 100644 frontend/node_modules/altcha/dist/i18n/bn.umd.cjs create mode 100644 frontend/node_modules/altcha/dist/i18n/br.d.ts create mode 100644 frontend/node_modules/altcha/dist/i18n/bs.d.ts create mode 100644 frontend/node_modules/altcha/dist/i18n/bs.js create mode 100644 frontend/node_modules/altcha/dist/i18n/bs.umd.cjs create mode 100644 frontend/node_modules/altcha/dist/i18n/ca.d.ts create mode 100644 frontend/node_modules/altcha/dist/i18n/ca.js create mode 100644 frontend/node_modules/altcha/dist/i18n/ca.umd.cjs create mode 100644 frontend/node_modules/altcha/dist/i18n/cn.d.ts create mode 100644 frontend/node_modules/altcha/dist/i18n/cs.d.ts create mode 100644 frontend/node_modules/altcha/dist/i18n/cs.js create mode 100644 frontend/node_modules/altcha/dist/i18n/cs.umd.cjs create mode 100644 frontend/node_modules/altcha/dist/i18n/da.d.ts create mode 100644 frontend/node_modules/altcha/dist/i18n/da.js create mode 100644 frontend/node_modules/altcha/dist/i18n/da.umd.cjs create mode 100644 frontend/node_modules/altcha/dist/i18n/de.d.ts create mode 100644 frontend/node_modules/altcha/dist/i18n/de.js create mode 100644 frontend/node_modules/altcha/dist/i18n/de.umd.cjs create mode 100644 frontend/node_modules/altcha/dist/i18n/el.d.ts create mode 100644 frontend/node_modules/altcha/dist/i18n/el.js create mode 100644 frontend/node_modules/altcha/dist/i18n/el.umd.cjs create mode 100644 frontend/node_modules/altcha/dist/i18n/en.d.ts create mode 100644 frontend/node_modules/altcha/dist/i18n/en.js create mode 100644 frontend/node_modules/altcha/dist/i18n/en.umd.cjs create mode 100644 frontend/node_modules/altcha/dist/i18n/es-419.js create mode 100644 frontend/node_modules/altcha/dist/i18n/es-419.umd.cjs create mode 100644 frontend/node_modules/altcha/dist/i18n/es-es.js create mode 100644 frontend/node_modules/altcha/dist/i18n/es-es.umd.cjs create mode 100644 frontend/node_modules/altcha/dist/i18n/es.d.ts create mode 100644 frontend/node_modules/altcha/dist/i18n/et.d.ts create mode 100644 frontend/node_modules/altcha/dist/i18n/et.js create mode 100644 frontend/node_modules/altcha/dist/i18n/et.umd.cjs create mode 100644 frontend/node_modules/altcha/dist/i18n/eu.d.ts create mode 100644 frontend/node_modules/altcha/dist/i18n/eu.js create mode 100644 frontend/node_modules/altcha/dist/i18n/eu.umd.cjs create mode 100644 frontend/node_modules/altcha/dist/i18n/europe.d.ts create mode 100644 frontend/node_modules/altcha/dist/i18n/europe.js create mode 100644 frontend/node_modules/altcha/dist/i18n/europe.umd.cjs create mode 100644 frontend/node_modules/altcha/dist/i18n/fa.d.ts create mode 100644 frontend/node_modules/altcha/dist/i18n/fa.js create mode 100644 frontend/node_modules/altcha/dist/i18n/fa.umd.cjs create mode 100644 frontend/node_modules/altcha/dist/i18n/fi.d.ts create mode 100644 frontend/node_modules/altcha/dist/i18n/fi.js create mode 100644 frontend/node_modules/altcha/dist/i18n/fi.umd.cjs create mode 100644 frontend/node_modules/altcha/dist/i18n/fr-ca.js create mode 100644 frontend/node_modules/altcha/dist/i18n/fr-ca.umd.cjs create mode 100644 frontend/node_modules/altcha/dist/i18n/fr-fr.js create mode 100644 frontend/node_modules/altcha/dist/i18n/fr-fr.umd.cjs create mode 100644 frontend/node_modules/altcha/dist/i18n/fr.d.ts create mode 100644 frontend/node_modules/altcha/dist/i18n/ga.d.ts create mode 100644 frontend/node_modules/altcha/dist/i18n/ga.js create mode 100644 frontend/node_modules/altcha/dist/i18n/ga.umd.cjs create mode 100644 frontend/node_modules/altcha/dist/i18n/he.d.ts create mode 100644 frontend/node_modules/altcha/dist/i18n/he.js create mode 100644 frontend/node_modules/altcha/dist/i18n/he.umd.cjs create mode 100644 frontend/node_modules/altcha/dist/i18n/hi.d.ts create mode 100644 frontend/node_modules/altcha/dist/i18n/hi.js create mode 100644 frontend/node_modules/altcha/dist/i18n/hi.umd.cjs create mode 100644 frontend/node_modules/altcha/dist/i18n/hk.d.ts create mode 100644 frontend/node_modules/altcha/dist/i18n/hr.d.ts create mode 100644 frontend/node_modules/altcha/dist/i18n/hr.js create mode 100644 frontend/node_modules/altcha/dist/i18n/hr.umd.cjs create mode 100644 frontend/node_modules/altcha/dist/i18n/hu.d.ts create mode 100644 frontend/node_modules/altcha/dist/i18n/hu.js create mode 100644 frontend/node_modules/altcha/dist/i18n/hu.umd.cjs create mode 100644 frontend/node_modules/altcha/dist/i18n/hy.d.ts create mode 100644 frontend/node_modules/altcha/dist/i18n/hy.js create mode 100644 frontend/node_modules/altcha/dist/i18n/hy.umd.cjs create mode 100644 frontend/node_modules/altcha/dist/i18n/id.d.ts create mode 100644 frontend/node_modules/altcha/dist/i18n/id.js create mode 100644 frontend/node_modules/altcha/dist/i18n/id.umd.cjs create mode 100644 frontend/node_modules/altcha/dist/i18n/is.d.ts create mode 100644 frontend/node_modules/altcha/dist/i18n/is.js create mode 100644 frontend/node_modules/altcha/dist/i18n/is.umd.cjs create mode 100644 frontend/node_modules/altcha/dist/i18n/it.d.ts create mode 100644 frontend/node_modules/altcha/dist/i18n/it.js create mode 100644 frontend/node_modules/altcha/dist/i18n/it.umd.cjs create mode 100644 frontend/node_modules/altcha/dist/i18n/ja.d.ts create mode 100644 frontend/node_modules/altcha/dist/i18n/ja.js create mode 100644 frontend/node_modules/altcha/dist/i18n/ja.umd.cjs create mode 100644 frontend/node_modules/altcha/dist/i18n/ka.d.ts create mode 100644 frontend/node_modules/altcha/dist/i18n/ka.js create mode 100644 frontend/node_modules/altcha/dist/i18n/ka.umd.cjs create mode 100644 frontend/node_modules/altcha/dist/i18n/kk.d.ts create mode 100644 frontend/node_modules/altcha/dist/i18n/kk.js create mode 100644 frontend/node_modules/altcha/dist/i18n/kk.umd.cjs create mode 100644 frontend/node_modules/altcha/dist/i18n/ko.d.ts create mode 100644 frontend/node_modules/altcha/dist/i18n/ko.js create mode 100644 frontend/node_modules/altcha/dist/i18n/ko.umd.cjs create mode 100644 frontend/node_modules/altcha/dist/i18n/lb.d.ts create mode 100644 frontend/node_modules/altcha/dist/i18n/lb.js create mode 100644 frontend/node_modules/altcha/dist/i18n/lb.umd.cjs create mode 100644 frontend/node_modules/altcha/dist/i18n/lt.d.ts create mode 100644 frontend/node_modules/altcha/dist/i18n/lt.js create mode 100644 frontend/node_modules/altcha/dist/i18n/lt.umd.cjs create mode 100644 frontend/node_modules/altcha/dist/i18n/lv.d.ts create mode 100644 frontend/node_modules/altcha/dist/i18n/lv.js create mode 100644 frontend/node_modules/altcha/dist/i18n/lv.umd.cjs create mode 100644 frontend/node_modules/altcha/dist/i18n/me.d.ts create mode 100644 frontend/node_modules/altcha/dist/i18n/me.js create mode 100644 frontend/node_modules/altcha/dist/i18n/me.umd.cjs create mode 100644 frontend/node_modules/altcha/dist/i18n/mk.d.ts create mode 100644 frontend/node_modules/altcha/dist/i18n/mk.js create mode 100644 frontend/node_modules/altcha/dist/i18n/mk.umd.cjs create mode 100644 frontend/node_modules/altcha/dist/i18n/mr.d.ts create mode 100644 frontend/node_modules/altcha/dist/i18n/mr.js create mode 100644 frontend/node_modules/altcha/dist/i18n/mr.umd.cjs create mode 100644 frontend/node_modules/altcha/dist/i18n/mt.d.ts create mode 100644 frontend/node_modules/altcha/dist/i18n/mt.js create mode 100644 frontend/node_modules/altcha/dist/i18n/mt.umd.cjs create mode 100644 frontend/node_modules/altcha/dist/i18n/nb.d.ts create mode 100644 frontend/node_modules/altcha/dist/i18n/nb.js create mode 100644 frontend/node_modules/altcha/dist/i18n/nb.umd.cjs create mode 100644 frontend/node_modules/altcha/dist/i18n/nl.d.ts create mode 100644 frontend/node_modules/altcha/dist/i18n/nl.js create mode 100644 frontend/node_modules/altcha/dist/i18n/nl.umd.cjs create mode 100644 frontend/node_modules/altcha/dist/i18n/pl.d.ts create mode 100644 frontend/node_modules/altcha/dist/i18n/pl.js create mode 100644 frontend/node_modules/altcha/dist/i18n/pl.umd.cjs create mode 100644 frontend/node_modules/altcha/dist/i18n/pt-br.js create mode 100644 frontend/node_modules/altcha/dist/i18n/pt-br.umd.cjs create mode 100644 frontend/node_modules/altcha/dist/i18n/pt-pt.js create mode 100644 frontend/node_modules/altcha/dist/i18n/pt-pt.umd.cjs create mode 100644 frontend/node_modules/altcha/dist/i18n/pt.d.ts create mode 100644 frontend/node_modules/altcha/dist/i18n/ro.d.ts create mode 100644 frontend/node_modules/altcha/dist/i18n/ro.js create mode 100644 frontend/node_modules/altcha/dist/i18n/ro.umd.cjs create mode 100644 frontend/node_modules/altcha/dist/i18n/ru.d.ts create mode 100644 frontend/node_modules/altcha/dist/i18n/ru.js create mode 100644 frontend/node_modules/altcha/dist/i18n/ru.umd.cjs create mode 100644 frontend/node_modules/altcha/dist/i18n/sk.d.ts create mode 100644 frontend/node_modules/altcha/dist/i18n/sk.js create mode 100644 frontend/node_modules/altcha/dist/i18n/sk.umd.cjs create mode 100644 frontend/node_modules/altcha/dist/i18n/sl.d.ts create mode 100644 frontend/node_modules/altcha/dist/i18n/sl.js create mode 100644 frontend/node_modules/altcha/dist/i18n/sl.umd.cjs create mode 100644 frontend/node_modules/altcha/dist/i18n/sq.d.ts create mode 100644 frontend/node_modules/altcha/dist/i18n/sq.js create mode 100644 frontend/node_modules/altcha/dist/i18n/sq.umd.cjs create mode 100644 frontend/node_modules/altcha/dist/i18n/sr.d.ts create mode 100644 frontend/node_modules/altcha/dist/i18n/sr.js create mode 100644 frontend/node_modules/altcha/dist/i18n/sr.umd.cjs create mode 100644 frontend/node_modules/altcha/dist/i18n/sv.d.ts create mode 100644 frontend/node_modules/altcha/dist/i18n/sv.js create mode 100644 frontend/node_modules/altcha/dist/i18n/sv.umd.cjs create mode 100644 frontend/node_modules/altcha/dist/i18n/sw.d.ts create mode 100644 frontend/node_modules/altcha/dist/i18n/sw.js create mode 100644 frontend/node_modules/altcha/dist/i18n/sw.umd.cjs create mode 100644 frontend/node_modules/altcha/dist/i18n/ta.d.ts create mode 100644 frontend/node_modules/altcha/dist/i18n/ta.js create mode 100644 frontend/node_modules/altcha/dist/i18n/ta.umd.cjs create mode 100644 frontend/node_modules/altcha/dist/i18n/te.d.ts create mode 100644 frontend/node_modules/altcha/dist/i18n/te.js create mode 100644 frontend/node_modules/altcha/dist/i18n/te.umd.cjs create mode 100644 frontend/node_modules/altcha/dist/i18n/th.d.ts create mode 100644 frontend/node_modules/altcha/dist/i18n/th.js create mode 100644 frontend/node_modules/altcha/dist/i18n/th.umd.cjs create mode 100644 frontend/node_modules/altcha/dist/i18n/tk.d.ts create mode 100644 frontend/node_modules/altcha/dist/i18n/tk.js create mode 100644 frontend/node_modules/altcha/dist/i18n/tk.umd.cjs create mode 100644 frontend/node_modules/altcha/dist/i18n/tr.d.ts create mode 100644 frontend/node_modules/altcha/dist/i18n/tr.js create mode 100644 frontend/node_modules/altcha/dist/i18n/tr.umd.cjs create mode 100644 frontend/node_modules/altcha/dist/i18n/tw.d.ts create mode 100644 frontend/node_modules/altcha/dist/i18n/uk.d.ts create mode 100644 frontend/node_modules/altcha/dist/i18n/uk.js create mode 100644 frontend/node_modules/altcha/dist/i18n/uk.umd.cjs create mode 100644 frontend/node_modules/altcha/dist/i18n/ur.d.ts create mode 100644 frontend/node_modules/altcha/dist/i18n/ur.js create mode 100644 frontend/node_modules/altcha/dist/i18n/ur.umd.cjs create mode 100644 frontend/node_modules/altcha/dist/i18n/uz.d.ts create mode 100644 frontend/node_modules/altcha/dist/i18n/uz.js create mode 100644 frontend/node_modules/altcha/dist/i18n/uz.umd.cjs create mode 100644 frontend/node_modules/altcha/dist/i18n/vi.d.ts create mode 100644 frontend/node_modules/altcha/dist/i18n/vi.js create mode 100644 frontend/node_modules/altcha/dist/i18n/vi.umd.cjs create mode 100644 frontend/node_modules/altcha/dist/i18n/yo.d.ts create mode 100644 frontend/node_modules/altcha/dist/i18n/yo.js create mode 100644 frontend/node_modules/altcha/dist/i18n/yo.umd.cjs create mode 100644 frontend/node_modules/altcha/dist/i18n/zh-cn.js create mode 100644 frontend/node_modules/altcha/dist/i18n/zh-cn.umd.cjs create mode 100644 frontend/node_modules/altcha/dist/i18n/zh-hk.js create mode 100644 frontend/node_modules/altcha/dist/i18n/zh-hk.umd.cjs create mode 100644 frontend/node_modules/altcha/dist/i18n/zh-tw.js create mode 100644 frontend/node_modules/altcha/dist/i18n/zh-tw.umd.cjs create mode 100644 frontend/node_modules/altcha/dist/lib/index.d.ts create mode 100644 frontend/node_modules/altcha/dist/lib/index.js create mode 100644 frontend/node_modules/altcha/dist/lib/index.min.js create mode 100644 frontend/node_modules/altcha/dist/lib/index.umd.cjs create mode 100644 frontend/node_modules/altcha/dist/lib/index.umd.min.cjs create mode 100644 frontend/node_modules/altcha/dist/main/altcha.i18n.js create mode 100644 frontend/node_modules/altcha/dist/main/altcha.i18n.min.js create mode 100644 frontend/node_modules/altcha/dist/main/altcha.i18n.umd.cjs create mode 100644 frontend/node_modules/altcha/dist/main/altcha.i18n.umd.min.cjs create mode 100644 frontend/node_modules/altcha/dist/main/altcha.js create mode 100644 frontend/node_modules/altcha/dist/main/altcha.min.js create mode 100644 frontend/node_modules/altcha/dist/main/altcha.umd.cjs create mode 100644 frontend/node_modules/altcha/dist/main/altcha.umd.min.cjs create mode 100644 frontend/node_modules/altcha/dist/plugins/obfuscation.plugin.d.ts create mode 100644 frontend/node_modules/altcha/dist/plugins/obfuscation.plugin.js create mode 100644 frontend/node_modules/altcha/dist/plugins/obfuscation.plugin.min.js create mode 100644 frontend/node_modules/altcha/dist/plugins/obfuscation.plugin.umd.cjs create mode 100644 frontend/node_modules/altcha/dist/plugins/obfuscation.plugin.umd.min.cjs create mode 100644 frontend/node_modules/altcha/dist/themes/aqua.css create mode 100644 frontend/node_modules/altcha/dist/themes/aqua.min.css create mode 100644 frontend/node_modules/altcha/dist/themes/business.css create mode 100644 frontend/node_modules/altcha/dist/themes/business.min.css create mode 100644 frontend/node_modules/altcha/dist/themes/caramel.css create mode 100644 frontend/node_modules/altcha/dist/themes/caramel.min.css create mode 100644 frontend/node_modules/altcha/dist/themes/cupcake.css create mode 100644 frontend/node_modules/altcha/dist/themes/cupcake.min.css create mode 100644 frontend/node_modules/altcha/dist/themes/cyberpunk.css create mode 100644 frontend/node_modules/altcha/dist/themes/cyberpunk.min.css create mode 100644 frontend/node_modules/altcha/dist/themes/lime.css create mode 100644 frontend/node_modules/altcha/dist/themes/lime.min.css create mode 100644 frontend/node_modules/altcha/dist/themes/wireframe.css create mode 100644 frontend/node_modules/altcha/dist/themes/wireframe.min.css create mode 100644 frontend/node_modules/altcha/dist/types/generic.d.ts create mode 100644 frontend/node_modules/altcha/dist/types/generic.js create mode 100644 frontend/node_modules/altcha/dist/types/global.d.ts create mode 100644 frontend/node_modules/altcha/dist/types/global.js create mode 100644 frontend/node_modules/altcha/dist/types/index.d.ts create mode 100644 frontend/node_modules/altcha/dist/types/index.js create mode 100644 frontend/node_modules/altcha/dist/types/jsx.d.ts create mode 100644 frontend/node_modules/altcha/dist/types/jsx.js create mode 100644 frontend/node_modules/altcha/dist/types/react.d.ts create mode 100644 frontend/node_modules/altcha/dist/types/react.js create mode 100644 frontend/node_modules/altcha/dist/types/svelte.d.ts create mode 100644 frontend/node_modules/altcha/dist/types/svelte.js create mode 100644 frontend/node_modules/altcha/dist/workers/argon2id.js create mode 100644 frontend/node_modules/altcha/dist/workers/pbkdf2.js create mode 100644 frontend/node_modules/altcha/dist/workers/scrypt.js create mode 100644 frontend/node_modules/altcha/dist/workers/sha.js create mode 100644 frontend/node_modules/altcha/package.json create mode 100644 frontend/node_modules/fsevents/LICENSE create mode 100644 frontend/node_modules/fsevents/README.md create mode 100644 frontend/node_modules/fsevents/fsevents.d.ts create mode 100644 frontend/node_modules/fsevents/fsevents.js create mode 100755 frontend/node_modules/fsevents/fsevents.node create mode 100644 frontend/node_modules/fsevents/package.json create mode 100644 frontend/node_modules/hash-wasm/.vscode/settings.json create mode 100644 frontend/node_modules/hash-wasm/CHANGELOG.md create mode 100644 frontend/node_modules/hash-wasm/LICENSE create mode 100644 frontend/node_modules/hash-wasm/README.md create mode 100644 frontend/node_modules/hash-wasm/biome.json create mode 100644 frontend/node_modules/hash-wasm/dist/adler32.umd.min.js create mode 100644 frontend/node_modules/hash-wasm/dist/argon2.umd.min.js create mode 100644 frontend/node_modules/hash-wasm/dist/bcrypt.umd.min.js create mode 100644 frontend/node_modules/hash-wasm/dist/blake2b.umd.min.js create mode 100644 frontend/node_modules/hash-wasm/dist/blake2s.umd.min.js create mode 100644 frontend/node_modules/hash-wasm/dist/blake3.umd.min.js create mode 100644 frontend/node_modules/hash-wasm/dist/crc32.umd.min.js create mode 100644 frontend/node_modules/hash-wasm/dist/crc64.umd.min.js create mode 100644 frontend/node_modules/hash-wasm/dist/hmac.umd.min.js create mode 100644 frontend/node_modules/hash-wasm/dist/index.esm.js create mode 100644 frontend/node_modules/hash-wasm/dist/index.esm.min.js create mode 100644 frontend/node_modules/hash-wasm/dist/index.umd.js create mode 100644 frontend/node_modules/hash-wasm/dist/index.umd.min.js create mode 100644 frontend/node_modules/hash-wasm/dist/keccak.umd.min.js create mode 100644 frontend/node_modules/hash-wasm/dist/lib/WASMInterface.d.ts create mode 100644 frontend/node_modules/hash-wasm/dist/lib/adler32.d.ts create mode 100644 frontend/node_modules/hash-wasm/dist/lib/argon2.d.ts create mode 100644 frontend/node_modules/hash-wasm/dist/lib/bcrypt.d.ts create mode 100644 frontend/node_modules/hash-wasm/dist/lib/blake2b.d.ts create mode 100644 frontend/node_modules/hash-wasm/dist/lib/blake2s.d.ts create mode 100644 frontend/node_modules/hash-wasm/dist/lib/blake3.d.ts create mode 100644 frontend/node_modules/hash-wasm/dist/lib/crc32.d.ts create mode 100644 frontend/node_modules/hash-wasm/dist/lib/crc64.d.ts create mode 100644 frontend/node_modules/hash-wasm/dist/lib/hmac.d.ts create mode 100644 frontend/node_modules/hash-wasm/dist/lib/index.d.ts create mode 100644 frontend/node_modules/hash-wasm/dist/lib/keccak.d.ts create mode 100644 frontend/node_modules/hash-wasm/dist/lib/lockedCreate.d.ts create mode 100644 frontend/node_modules/hash-wasm/dist/lib/md4.d.ts create mode 100644 frontend/node_modules/hash-wasm/dist/lib/md5.d.ts create mode 100644 frontend/node_modules/hash-wasm/dist/lib/mutex.d.ts create mode 100644 frontend/node_modules/hash-wasm/dist/lib/pbkdf2.d.ts create mode 100644 frontend/node_modules/hash-wasm/dist/lib/ripemd160.d.ts create mode 100644 frontend/node_modules/hash-wasm/dist/lib/scrypt.d.ts create mode 100644 frontend/node_modules/hash-wasm/dist/lib/sha1.d.ts create mode 100644 frontend/node_modules/hash-wasm/dist/lib/sha224.d.ts create mode 100644 frontend/node_modules/hash-wasm/dist/lib/sha256.d.ts create mode 100644 frontend/node_modules/hash-wasm/dist/lib/sha3.d.ts create mode 100644 frontend/node_modules/hash-wasm/dist/lib/sha384.d.ts create mode 100644 frontend/node_modules/hash-wasm/dist/lib/sha512.d.ts create mode 100644 frontend/node_modules/hash-wasm/dist/lib/sm3.d.ts create mode 100644 frontend/node_modules/hash-wasm/dist/lib/util.d.ts create mode 100644 frontend/node_modules/hash-wasm/dist/lib/whirlpool.d.ts create mode 100644 frontend/node_modules/hash-wasm/dist/lib/xxhash128.d.ts create mode 100644 frontend/node_modules/hash-wasm/dist/lib/xxhash3.d.ts create mode 100644 frontend/node_modules/hash-wasm/dist/lib/xxhash32.d.ts create mode 100644 frontend/node_modules/hash-wasm/dist/lib/xxhash64.d.ts create mode 100644 frontend/node_modules/hash-wasm/dist/md4.umd.min.js create mode 100644 frontend/node_modules/hash-wasm/dist/md5.umd.min.js create mode 100644 frontend/node_modules/hash-wasm/dist/pbkdf2.umd.min.js create mode 100644 frontend/node_modules/hash-wasm/dist/ripemd160.umd.min.js create mode 100644 frontend/node_modules/hash-wasm/dist/scrypt.umd.min.js create mode 100644 frontend/node_modules/hash-wasm/dist/sha1.umd.min.js create mode 100644 frontend/node_modules/hash-wasm/dist/sha224.umd.min.js create mode 100644 frontend/node_modules/hash-wasm/dist/sha256.umd.min.js create mode 100644 frontend/node_modules/hash-wasm/dist/sha3.umd.min.js create mode 100644 frontend/node_modules/hash-wasm/dist/sha384.umd.min.js create mode 100644 frontend/node_modules/hash-wasm/dist/sha512.umd.min.js create mode 100644 frontend/node_modules/hash-wasm/dist/sm3.umd.min.js create mode 100644 frontend/node_modules/hash-wasm/dist/whirlpool.umd.min.js create mode 100644 frontend/node_modules/hash-wasm/dist/xxhash128.umd.min.js create mode 100644 frontend/node_modules/hash-wasm/dist/xxhash3.umd.min.js create mode 100644 frontend/node_modules/hash-wasm/dist/xxhash32.umd.min.js create mode 100644 frontend/node_modules/hash-wasm/dist/xxhash64.umd.min.js create mode 100644 frontend/node_modules/hash-wasm/jest.config.js create mode 100644 frontend/node_modules/hash-wasm/lib/WASMInterface.ts create mode 100644 frontend/node_modules/hash-wasm/lib/adler32.ts create mode 100644 frontend/node_modules/hash-wasm/lib/argon2.ts create mode 100644 frontend/node_modules/hash-wasm/lib/bcrypt.ts create mode 100644 frontend/node_modules/hash-wasm/lib/blake2b.ts create mode 100644 frontend/node_modules/hash-wasm/lib/blake2s.ts create mode 100644 frontend/node_modules/hash-wasm/lib/blake3.ts create mode 100644 frontend/node_modules/hash-wasm/lib/crc32.ts create mode 100644 frontend/node_modules/hash-wasm/lib/crc64.ts create mode 100644 frontend/node_modules/hash-wasm/lib/hmac.ts create mode 100644 frontend/node_modules/hash-wasm/lib/index.ts create mode 100644 frontend/node_modules/hash-wasm/lib/keccak.ts create mode 100644 frontend/node_modules/hash-wasm/lib/lockedCreate.ts create mode 100644 frontend/node_modules/hash-wasm/lib/md4.ts create mode 100644 frontend/node_modules/hash-wasm/lib/md5.ts create mode 100644 frontend/node_modules/hash-wasm/lib/mutex.ts create mode 100644 frontend/node_modules/hash-wasm/lib/pbkdf2.ts create mode 100644 frontend/node_modules/hash-wasm/lib/ripemd160.ts create mode 100644 frontend/node_modules/hash-wasm/lib/scrypt.ts create mode 100644 frontend/node_modules/hash-wasm/lib/sha1.ts create mode 100644 frontend/node_modules/hash-wasm/lib/sha224.ts create mode 100644 frontend/node_modules/hash-wasm/lib/sha256.ts create mode 100644 frontend/node_modules/hash-wasm/lib/sha3.ts create mode 100644 frontend/node_modules/hash-wasm/lib/sha384.ts create mode 100644 frontend/node_modules/hash-wasm/lib/sha512.ts create mode 100644 frontend/node_modules/hash-wasm/lib/sm3.ts create mode 100644 frontend/node_modules/hash-wasm/lib/util.ts create mode 100644 frontend/node_modules/hash-wasm/lib/whirlpool.ts create mode 100644 frontend/node_modules/hash-wasm/lib/xxhash128.ts create mode 100644 frontend/node_modules/hash-wasm/lib/xxhash3.ts create mode 100644 frontend/node_modules/hash-wasm/lib/xxhash32.ts create mode 100644 frontend/node_modules/hash-wasm/lib/xxhash64.ts create mode 100644 frontend/node_modules/hash-wasm/package.json create mode 100644 frontend/node_modules/hash-wasm/rollup.config.mjs create mode 100644 frontend/node_modules/hash-wasm/src/adler32.c create mode 100644 frontend/node_modules/hash-wasm/src/argon2.c create mode 100644 frontend/node_modules/hash-wasm/src/bcrypt.c create mode 100644 frontend/node_modules/hash-wasm/src/blake2b.c create mode 100644 frontend/node_modules/hash-wasm/src/blake2s.c create mode 100644 frontend/node_modules/hash-wasm/src/blake3.c create mode 100644 frontend/node_modules/hash-wasm/src/crc32.c create mode 100644 frontend/node_modules/hash-wasm/src/crc64.c create mode 100644 frontend/node_modules/hash-wasm/src/hash-wasm.h create mode 100644 frontend/node_modules/hash-wasm/src/md4.c create mode 100644 frontend/node_modules/hash-wasm/src/md5.c create mode 100644 frontend/node_modules/hash-wasm/src/ripemd160.c create mode 100644 frontend/node_modules/hash-wasm/src/scrypt.c create mode 100644 frontend/node_modules/hash-wasm/src/sha1.c create mode 100644 frontend/node_modules/hash-wasm/src/sha256.c create mode 100644 frontend/node_modules/hash-wasm/src/sha3.c create mode 100644 frontend/node_modules/hash-wasm/src/sha512.c create mode 100644 frontend/node_modules/hash-wasm/src/sm3.c create mode 100644 frontend/node_modules/hash-wasm/src/whirlpool.c create mode 100644 frontend/node_modules/hash-wasm/src/xxhash128.c create mode 100644 frontend/node_modules/hash-wasm/src/xxhash3.c create mode 100644 frontend/node_modules/hash-wasm/src/xxhash32.c create mode 100644 frontend/node_modules/hash-wasm/src/xxhash64.c create mode 100644 frontend/node_modules/hash-wasm/tsconfig.json diff --git a/frontend/dist/assets/index-BocP3KKS.js b/frontend/dist/assets/index-BocP3KKS.js deleted file mode 100644 index 002d0b4..0000000 --- a/frontend/dist/assets/index-BocP3KKS.js +++ /dev/null @@ -1,272 +0,0 @@ -(function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const s of document.querySelectorAll('link[rel="modulepreload"]'))r(s);new MutationObserver(s=>{for(const i of s)if(i.type==="childList")for(const o of i.addedNodes)o.tagName==="LINK"&&o.rel==="modulepreload"&&r(o)}).observe(document,{childList:!0,subtree:!0});function n(s){const i={};return s.integrity&&(i.integrity=s.integrity),s.referrerPolicy&&(i.referrerPolicy=s.referrerPolicy),s.crossOrigin==="use-credentials"?i.credentials="include":s.crossOrigin==="anonymous"?i.credentials="omit":i.credentials="same-origin",i}function r(s){if(s.ep)return;s.ep=!0;const i=n(s);fetch(s.href,i)}})();function Ud(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var ou={exports:{}},Rs={},au={exports:{}},Q={};/** - * @license React - * react.production.min.js - * - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */var br=Symbol.for("react.element"),Hd=Symbol.for("react.portal"),Qd=Symbol.for("react.fragment"),Wd=Symbol.for("react.strict_mode"),Kd=Symbol.for("react.profiler"),Gd=Symbol.for("react.provider"),qd=Symbol.for("react.context"),Yd=Symbol.for("react.forward_ref"),Zd=Symbol.for("react.suspense"),Jd=Symbol.for("react.memo"),Xd=Symbol.for("react.lazy"),Qo=Symbol.iterator;function ef(e){return e===null||typeof e!="object"?null:(e=Qo&&e[Qo]||e["@@iterator"],typeof e=="function"?e:null)}var uu={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},cu=Object.assign,du={};function An(e,t,n){this.props=e,this.context=t,this.refs=du,this.updater=n||uu}An.prototype.isReactComponent={};An.prototype.setState=function(e,t){if(typeof e!="object"&&typeof e!="function"&&e!=null)throw Error("setState(...): takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,e,t,"setState")};An.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this,e,"forceUpdate")};function fu(){}fu.prototype=An.prototype;function Ci(e,t,n){this.props=e,this.context=t,this.refs=du,this.updater=n||uu}var Ti=Ci.prototype=new fu;Ti.constructor=Ci;cu(Ti,An.prototype);Ti.isPureReactComponent=!0;var Wo=Array.isArray,mu=Object.prototype.hasOwnProperty,Pi={current:null},pu={key:!0,ref:!0,__self:!0,__source:!0};function hu(e,t,n){var r,s={},i=null,o=null;if(t!=null)for(r in t.ref!==void 0&&(o=t.ref),t.key!==void 0&&(i=""+t.key),t)mu.call(t,r)&&!pu.hasOwnProperty(r)&&(s[r]=t[r]);var a=arguments.length-2;if(a===1)s.children=n;else if(1>>1,z=L[E];if(0>>1;E<$;){var D=2*(E+1)-1,H=L[D],ae=D+1,tt=L[ae];if(0>s(H,g))aes(tt,H)?(L[E]=tt,L[ae]=g,E=ae):(L[E]=H,L[D]=g,E=D);else if(aes(tt,g))L[E]=tt,L[ae]=g,E=ae;else break e}}return I}function s(L,I){var g=L.sortIndex-I.sortIndex;return g!==0?g:L.id-I.id}if(typeof performance=="object"&&typeof performance.now=="function"){var i=performance;e.unstable_now=function(){return i.now()}}else{var o=Date,a=o.now();e.unstable_now=function(){return o.now()-a}}var u=[],m=[],h=1,v=null,x=3,S=!1,N=!1,k=!1,O=typeof setTimeout=="function"?setTimeout:null,f=typeof clearTimeout=="function"?clearTimeout:null,c=typeof setImmediate<"u"?setImmediate:null;typeof navigator<"u"&&navigator.scheduling!==void 0&&navigator.scheduling.isInputPending!==void 0&&navigator.scheduling.isInputPending.bind(navigator.scheduling);function d(L){for(var I=n(m);I!==null;){if(I.callback===null)r(m);else if(I.startTime<=L)r(m),I.sortIndex=I.expirationTime,t(u,I);else break;I=n(m)}}function y(L){if(k=!1,d(L),!N)if(n(u)!==null)N=!0,ye(j);else{var I=n(m);I!==null&&Ce(y,I.startTime-L)}}function j(L,I){N=!1,k&&(k=!1,f(P),P=-1),S=!0;var g=x;try{for(d(I),v=n(u);v!==null&&(!(v.expirationTime>I)||L&&!q());){var E=v.callback;if(typeof E=="function"){v.callback=null,x=v.priorityLevel;var z=E(v.expirationTime<=I);I=e.unstable_now(),typeof z=="function"?v.callback=z:v===n(u)&&r(u),d(I)}else r(u);v=n(u)}if(v!==null)var $=!0;else{var D=n(m);D!==null&&Ce(y,D.startTime-I),$=!1}return $}finally{v=null,x=g,S=!1}}var b=!1,T=null,P=-1,B=5,M=-1;function q(){return!(e.unstable_now()-ML||125E?(L.sortIndex=g,t(m,L),n(u)===null&&L===n(m)&&(k?(f(P),P=-1):k=!0,Ce(y,g-E))):(L.sortIndex=z,t(u,L),N||S||(N=!0,ye(j))),L},e.unstable_shouldYield=q,e.unstable_wrapCallback=function(L){var I=x;return function(){var g=x;x=I;try{return L.apply(this,arguments)}finally{x=g}}}})(wu);vu.exports=wu;var ff=vu.exports;/** - * @license React - * react-dom.production.min.js - * - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */var mf=w,Ie=ff;function _(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,n=1;n"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),Al=Object.prototype.hasOwnProperty,pf=/^[:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD][:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\-.0-9\u00B7\u0300-\u036F\u203F-\u2040]*$/,Go={},qo={};function hf(e){return Al.call(qo,e)?!0:Al.call(Go,e)?!1:pf.test(e)?qo[e]=!0:(Go[e]=!0,!1)}function xf(e,t,n,r){if(n!==null&&n.type===0)return!1;switch(typeof t){case"function":case"symbol":return!0;case"boolean":return r?!1:n!==null?!n.acceptsBooleans:(e=e.toLowerCase().slice(0,5),e!=="data-"&&e!=="aria-");default:return!1}}function gf(e,t,n,r){if(t===null||typeof t>"u"||xf(e,t,n,r))return!0;if(r)return!1;if(n!==null)switch(n.type){case 3:return!t;case 4:return t===!1;case 5:return isNaN(t);case 6:return isNaN(t)||1>t}return!1}function Ee(e,t,n,r,s,i,o){this.acceptsBooleans=t===2||t===3||t===4,this.attributeName=r,this.attributeNamespace=s,this.mustUseProperty=n,this.propertyName=e,this.type=t,this.sanitizeURL=i,this.removeEmptyString=o}var xe={};"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style".split(" ").forEach(function(e){xe[e]=new Ee(e,0,!1,e,null,!1,!1)});[["acceptCharset","accept-charset"],["className","class"],["htmlFor","for"],["httpEquiv","http-equiv"]].forEach(function(e){var t=e[0];xe[t]=new Ee(t,1,!1,e[1],null,!1,!1)});["contentEditable","draggable","spellCheck","value"].forEach(function(e){xe[e]=new Ee(e,2,!1,e.toLowerCase(),null,!1,!1)});["autoReverse","externalResourcesRequired","focusable","preserveAlpha"].forEach(function(e){xe[e]=new Ee(e,2,!1,e,null,!1,!1)});"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture disableRemotePlayback formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope".split(" ").forEach(function(e){xe[e]=new Ee(e,3,!1,e.toLowerCase(),null,!1,!1)});["checked","multiple","muted","selected"].forEach(function(e){xe[e]=new Ee(e,3,!0,e,null,!1,!1)});["capture","download"].forEach(function(e){xe[e]=new Ee(e,4,!1,e,null,!1,!1)});["cols","rows","size","span"].forEach(function(e){xe[e]=new Ee(e,6,!1,e,null,!1,!1)});["rowSpan","start"].forEach(function(e){xe[e]=new Ee(e,5,!1,e.toLowerCase(),null,!1,!1)});var zi=/[\-:]([a-z])/g;function Mi(e){return e[1].toUpperCase()}"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height".split(" ").forEach(function(e){var t=e.replace(zi,Mi);xe[t]=new Ee(t,1,!1,e,null,!1,!1)});"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type".split(" ").forEach(function(e){var t=e.replace(zi,Mi);xe[t]=new Ee(t,1,!1,e,"http://www.w3.org/1999/xlink",!1,!1)});["xml:base","xml:lang","xml:space"].forEach(function(e){var t=e.replace(zi,Mi);xe[t]=new Ee(t,1,!1,e,"http://www.w3.org/XML/1998/namespace",!1,!1)});["tabIndex","crossOrigin"].forEach(function(e){xe[e]=new Ee(e,1,!1,e.toLowerCase(),null,!1,!1)});xe.xlinkHref=new Ee("xlinkHref",1,!1,"xlink:href","http://www.w3.org/1999/xlink",!0,!1);["src","href","action","formAction"].forEach(function(e){xe[e]=new Ee(e,1,!1,e.toLowerCase(),null,!0,!0)});function Ai(e,t,n,r){var s=xe.hasOwnProperty(t)?xe[t]:null;(s!==null?s.type!==0:r||!(2a||s[o]!==i[a]){var u=` -`+s[o].replace(" at new "," at ");return e.displayName&&u.includes("")&&(u=u.replace("",e.displayName)),u}while(1<=o&&0<=a);break}}}finally{ul=!1,Error.prepareStackTrace=n}return(e=e?e.displayName||e.name:"")?Wn(e):""}function yf(e){switch(e.tag){case 5:return Wn(e.type);case 16:return Wn("Lazy");case 13:return Wn("Suspense");case 19:return Wn("SuspenseList");case 0:case 2:case 15:return e=cl(e.type,!1),e;case 11:return e=cl(e.type.render,!1),e;case 1:return e=cl(e.type,!0),e;default:return""}}function Il(e){if(e==null)return null;if(typeof e=="function")return e.displayName||e.name||null;if(typeof e=="string")return e;switch(e){case an:return"Fragment";case on:return"Portal";case Dl:return"Profiler";case Di:return"StrictMode";case Rl:return"Suspense";case Ol:return"SuspenseList"}if(typeof e=="object")switch(e.$$typeof){case Su:return(e.displayName||"Context")+".Consumer";case ku:return(e._context.displayName||"Context")+".Provider";case Ri:var t=e.render;return e=e.displayName,e||(e=t.displayName||t.name||"",e=e!==""?"ForwardRef("+e+")":"ForwardRef"),e;case Oi:return t=e.displayName||null,t!==null?t:Il(e.type)||"Memo";case St:t=e._payload,e=e._init;try{return Il(e(t))}catch{}}return null}function vf(e){var t=e.type;switch(e.tag){case 24:return"Cache";case 9:return(t.displayName||"Context")+".Consumer";case 10:return(t._context.displayName||"Context")+".Provider";case 18:return"DehydratedFragment";case 11:return e=t.render,e=e.displayName||e.name||"",t.displayName||(e!==""?"ForwardRef("+e+")":"ForwardRef");case 7:return"Fragment";case 5:return t;case 4:return"Portal";case 3:return"Root";case 6:return"Text";case 16:return Il(t);case 8:return t===Di?"StrictMode":"Mode";case 22:return"Offscreen";case 12:return"Profiler";case 21:return"Scope";case 13:return"Suspense";case 19:return"SuspenseList";case 25:return"TracingMarker";case 1:case 0:case 17:case 2:case 14:case 15:if(typeof t=="function")return t.displayName||t.name||null;if(typeof t=="string")return t}return null}function Ot(e){switch(typeof e){case"boolean":case"number":case"string":case"undefined":return e;case"object":return e;default:return""}}function bu(e){var t=e.type;return(e=e.nodeName)&&e.toLowerCase()==="input"&&(t==="checkbox"||t==="radio")}function wf(e){var t=bu(e)?"checked":"value",n=Object.getOwnPropertyDescriptor(e.constructor.prototype,t),r=""+e[t];if(!e.hasOwnProperty(t)&&typeof n<"u"&&typeof n.get=="function"&&typeof n.set=="function"){var s=n.get,i=n.set;return Object.defineProperty(e,t,{configurable:!0,get:function(){return s.call(this)},set:function(o){r=""+o,i.call(this,o)}}),Object.defineProperty(e,t,{enumerable:n.enumerable}),{getValue:function(){return r},setValue:function(o){r=""+o},stopTracking:function(){e._valueTracker=null,delete e[t]}}}}function Ir(e){e._valueTracker||(e._valueTracker=wf(e))}function _u(e){if(!e)return!1;var t=e._valueTracker;if(!t)return!0;var n=t.getValue(),r="";return e&&(r=bu(e)?e.checked?"true":"false":e.value),e=r,e!==n?(t.setValue(e),!0):!1}function fs(e){if(e=e||(typeof document<"u"?document:void 0),typeof e>"u")return null;try{return e.activeElement||e.body}catch{return e.body}}function $l(e,t){var n=t.checked;return le({},t,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:n??e._wrapperState.initialChecked})}function Zo(e,t){var n=t.defaultValue==null?"":t.defaultValue,r=t.checked!=null?t.checked:t.defaultChecked;n=Ot(t.value!=null?t.value:n),e._wrapperState={initialChecked:r,initialValue:n,controlled:t.type==="checkbox"||t.type==="radio"?t.checked!=null:t.value!=null}}function Eu(e,t){t=t.checked,t!=null&&Ai(e,"checked",t,!1)}function Vl(e,t){Eu(e,t);var n=Ot(t.value),r=t.type;if(n!=null)r==="number"?(n===0&&e.value===""||e.value!=n)&&(e.value=""+n):e.value!==""+n&&(e.value=""+n);else if(r==="submit"||r==="reset"){e.removeAttribute("value");return}t.hasOwnProperty("value")?Fl(e,t.type,n):t.hasOwnProperty("defaultValue")&&Fl(e,t.type,Ot(t.defaultValue)),t.checked==null&&t.defaultChecked!=null&&(e.defaultChecked=!!t.defaultChecked)}function Jo(e,t,n){if(t.hasOwnProperty("value")||t.hasOwnProperty("defaultValue")){var r=t.type;if(!(r!=="submit"&&r!=="reset"||t.value!==void 0&&t.value!==null))return;t=""+e._wrapperState.initialValue,n||t===e.value||(e.value=t),e.defaultValue=t}n=e.name,n!==""&&(e.name=""),e.defaultChecked=!!e._wrapperState.initialChecked,n!==""&&(e.name=n)}function Fl(e,t,n){(t!=="number"||fs(e.ownerDocument)!==e)&&(n==null?e.defaultValue=""+e._wrapperState.initialValue:e.defaultValue!==""+n&&(e.defaultValue=""+n))}var Kn=Array.isArray;function vn(e,t,n,r){if(e=e.options,t){t={};for(var s=0;s"+t.valueOf().toString()+"",t=$r.firstChild;e.firstChild;)e.removeChild(e.firstChild);for(;t.firstChild;)e.appendChild(t.firstChild)}});function or(e,t){if(t){var n=e.firstChild;if(n&&n===e.lastChild&&n.nodeType===3){n.nodeValue=t;return}}e.textContent=t}var Yn={animationIterationCount:!0,aspectRatio:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},Nf=["Webkit","ms","Moz","O"];Object.keys(Yn).forEach(function(e){Nf.forEach(function(t){t=t+e.charAt(0).toUpperCase()+e.substring(1),Yn[t]=Yn[e]})});function Lu(e,t,n){return t==null||typeof t=="boolean"||t===""?"":n||typeof t!="number"||t===0||Yn.hasOwnProperty(e)&&Yn[e]?(""+t).trim():t+"px"}function zu(e,t){e=e.style;for(var n in t)if(t.hasOwnProperty(n)){var r=n.indexOf("--")===0,s=Lu(n,t[n],r);n==="float"&&(n="cssFloat"),r?e.setProperty(n,s):e[n]=s}}var kf=le({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});function Hl(e,t){if(t){if(kf[e]&&(t.children!=null||t.dangerouslySetInnerHTML!=null))throw Error(_(137,e));if(t.dangerouslySetInnerHTML!=null){if(t.children!=null)throw Error(_(60));if(typeof t.dangerouslySetInnerHTML!="object"||!("__html"in t.dangerouslySetInnerHTML))throw Error(_(61))}if(t.style!=null&&typeof t.style!="object")throw Error(_(62))}}function Ql(e,t){if(e.indexOf("-")===-1)return typeof t.is=="string";switch(e){case"annotation-xml":case"color-profile":case"font-face":case"font-face-src":case"font-face-uri":case"font-face-format":case"font-face-name":case"missing-glyph":return!1;default:return!0}}var Wl=null;function Ii(e){return e=e.target||e.srcElement||window,e.correspondingUseElement&&(e=e.correspondingUseElement),e.nodeType===3?e.parentNode:e}var Kl=null,wn=null,Nn=null;function ta(e){if(e=Cr(e)){if(typeof Kl!="function")throw Error(_(280));var t=e.stateNode;t&&(t=Fs(t),Kl(e.stateNode,e.type,t))}}function Mu(e){wn?Nn?Nn.push(e):Nn=[e]:wn=e}function Au(){if(wn){var e=wn,t=Nn;if(Nn=wn=null,ta(e),t)for(e=0;e>>=0,e===0?32:31-(Mf(e)/Af|0)|0}var Vr=64,Fr=4194304;function Gn(e){switch(e&-e){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return e&4194240;case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:return e&130023424;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 1073741824;default:return e}}function xs(e,t){var n=e.pendingLanes;if(n===0)return 0;var r=0,s=e.suspendedLanes,i=e.pingedLanes,o=n&268435455;if(o!==0){var a=o&~s;a!==0?r=Gn(a):(i&=o,i!==0&&(r=Gn(i)))}else o=n&~s,o!==0?r=Gn(o):i!==0&&(r=Gn(i));if(r===0)return 0;if(t!==0&&t!==r&&!(t&s)&&(s=r&-r,i=t&-t,s>=i||s===16&&(i&4194240)!==0))return t;if(r&4&&(r|=n&16),t=e.entangledLanes,t!==0)for(e=e.entanglements,t&=r;0n;n++)t.push(e);return t}function _r(e,t,n){e.pendingLanes|=t,t!==536870912&&(e.suspendedLanes=0,e.pingedLanes=0),e=e.eventTimes,t=31-Je(t),e[t]=n}function If(e,t){var n=e.pendingLanes&~t;e.pendingLanes=t,e.suspendedLanes=0,e.pingedLanes=0,e.expiredLanes&=t,e.mutableReadLanes&=t,e.entangledLanes&=t,t=e.entanglements;var r=e.eventTimes;for(e=e.expirationTimes;0=Jn),ca=" ",da=!1;function ec(e,t){switch(e){case"keyup":return fm.indexOf(t.keyCode)!==-1;case"keydown":return t.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function tc(e){return e=e.detail,typeof e=="object"&&"data"in e?e.data:null}var un=!1;function pm(e,t){switch(e){case"compositionend":return tc(t);case"keypress":return t.which!==32?null:(da=!0,ca);case"textInput":return e=t.data,e===ca&&da?null:e;default:return null}}function hm(e,t){if(un)return e==="compositionend"||!Wi&&ec(e,t)?(e=Ju(),ns=Ui=Et=null,un=!1,e):null;switch(e){case"paste":return null;case"keypress":if(!(t.ctrlKey||t.altKey||t.metaKey)||t.ctrlKey&&t.altKey){if(t.char&&1=t)return{node:n,offset:t-e};e=r}e:{for(;n;){if(n.nextSibling){n=n.nextSibling;break e}n=n.parentNode}n=void 0}n=ha(n)}}function lc(e,t){return e&&t?e===t?!0:e&&e.nodeType===3?!1:t&&t.nodeType===3?lc(e,t.parentNode):"contains"in e?e.contains(t):e.compareDocumentPosition?!!(e.compareDocumentPosition(t)&16):!1:!1}function ic(){for(var e=window,t=fs();t instanceof e.HTMLIFrameElement;){try{var n=typeof t.contentWindow.location.href=="string"}catch{n=!1}if(n)e=t.contentWindow;else break;t=fs(e.document)}return t}function Ki(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return t&&(t==="input"&&(e.type==="text"||e.type==="search"||e.type==="tel"||e.type==="url"||e.type==="password")||t==="textarea"||e.contentEditable==="true")}function jm(e){var t=ic(),n=e.focusedElem,r=e.selectionRange;if(t!==n&&n&&n.ownerDocument&&lc(n.ownerDocument.documentElement,n)){if(r!==null&&Ki(n)){if(t=r.start,e=r.end,e===void 0&&(e=t),"selectionStart"in n)n.selectionStart=t,n.selectionEnd=Math.min(e,n.value.length);else if(e=(t=n.ownerDocument||document)&&t.defaultView||window,e.getSelection){e=e.getSelection();var s=n.textContent.length,i=Math.min(r.start,s);r=r.end===void 0?i:Math.min(r.end,s),!e.extend&&i>r&&(s=r,r=i,i=s),s=xa(n,i);var o=xa(n,r);s&&o&&(e.rangeCount!==1||e.anchorNode!==s.node||e.anchorOffset!==s.offset||e.focusNode!==o.node||e.focusOffset!==o.offset)&&(t=t.createRange(),t.setStart(s.node,s.offset),e.removeAllRanges(),i>r?(e.addRange(t),e.extend(o.node,o.offset)):(t.setEnd(o.node,o.offset),e.addRange(t)))}}for(t=[],e=n;e=e.parentNode;)e.nodeType===1&&t.push({element:e,left:e.scrollLeft,top:e.scrollTop});for(typeof n.focus=="function"&&n.focus(),n=0;n=document.documentMode,cn=null,Xl=null,er=null,ei=!1;function ga(e,t,n){var r=n.window===n?n.document:n.nodeType===9?n:n.ownerDocument;ei||cn==null||cn!==fs(r)||(r=cn,"selectionStart"in r&&Ki(r)?r={start:r.selectionStart,end:r.selectionEnd}:(r=(r.ownerDocument&&r.ownerDocument.defaultView||window).getSelection(),r={anchorNode:r.anchorNode,anchorOffset:r.anchorOffset,focusNode:r.focusNode,focusOffset:r.focusOffset}),er&&mr(er,r)||(er=r,r=vs(Xl,"onSelect"),0mn||(e.current=ii[mn],ii[mn]=null,mn--)}function X(e,t){mn++,ii[mn]=e.current,e.current=t}var It={},ke=Vt(It),ze=Vt(!1),Jt=It;function En(e,t){var n=e.type.contextTypes;if(!n)return It;var r=e.stateNode;if(r&&r.__reactInternalMemoizedUnmaskedChildContext===t)return r.__reactInternalMemoizedMaskedChildContext;var s={},i;for(i in n)s[i]=t[i];return r&&(e=e.stateNode,e.__reactInternalMemoizedUnmaskedChildContext=t,e.__reactInternalMemoizedMaskedChildContext=s),s}function Me(e){return e=e.childContextTypes,e!=null}function Ns(){te(ze),te(ke)}function ja(e,t,n){if(ke.current!==It)throw Error(_(168));X(ke,t),X(ze,n)}function hc(e,t,n){var r=e.stateNode;if(t=t.childContextTypes,typeof r.getChildContext!="function")return n;r=r.getChildContext();for(var s in r)if(!(s in t))throw Error(_(108,vf(e)||"Unknown",s));return le({},n,r)}function ks(e){return e=(e=e.stateNode)&&e.__reactInternalMemoizedMergedChildContext||It,Jt=ke.current,X(ke,e),X(ze,ze.current),!0}function ba(e,t,n){var r=e.stateNode;if(!r)throw Error(_(169));n?(e=hc(e,t,Jt),r.__reactInternalMemoizedMergedChildContext=e,te(ze),te(ke),X(ke,e)):te(ze),X(ze,n)}var dt=null,Bs=!1,jl=!1;function xc(e){dt===null?dt=[e]:dt.push(e)}function Rm(e){Bs=!0,xc(e)}function Ft(){if(!jl&&dt!==null){jl=!0;var e=0,t=Z;try{var n=dt;for(Z=1;e>=o,s-=o,ft=1<<32-Je(t)+s|n<P?(B=T,T=null):B=T.sibling;var M=x(f,T,d[P],y);if(M===null){T===null&&(T=B);break}e&&T&&M.alternate===null&&t(f,T),c=i(M,c,P),b===null?j=M:b.sibling=M,b=M,T=B}if(P===d.length)return n(f,T),ne&&Qt(f,P),j;if(T===null){for(;PP?(B=T,T=null):B=T.sibling;var q=x(f,T,M.value,y);if(q===null){T===null&&(T=B);break}e&&T&&q.alternate===null&&t(f,T),c=i(q,c,P),b===null?j=q:b.sibling=q,b=q,T=B}if(M.done)return n(f,T),ne&&Qt(f,P),j;if(T===null){for(;!M.done;P++,M=d.next())M=v(f,M.value,y),M!==null&&(c=i(M,c,P),b===null?j=M:b.sibling=M,b=M);return ne&&Qt(f,P),j}for(T=r(f,T);!M.done;P++,M=d.next())M=S(T,f,P,M.value,y),M!==null&&(e&&M.alternate!==null&&T.delete(M.key===null?P:M.key),c=i(M,c,P),b===null?j=M:b.sibling=M,b=M);return e&&T.forEach(function(G){return t(f,G)}),ne&&Qt(f,P),j}function O(f,c,d,y){if(typeof d=="object"&&d!==null&&d.type===an&&d.key===null&&(d=d.props.children),typeof d=="object"&&d!==null){switch(d.$$typeof){case Or:e:{for(var j=d.key,b=c;b!==null;){if(b.key===j){if(j=d.type,j===an){if(b.tag===7){n(f,b.sibling),c=s(b,d.props.children),c.return=f,f=c;break e}}else if(b.elementType===j||typeof j=="object"&&j!==null&&j.$$typeof===St&&Ca(j)===b.type){n(f,b.sibling),c=s(b,d.props),c.ref=Un(f,b,d),c.return=f,f=c;break e}n(f,b);break}else t(f,b);b=b.sibling}d.type===an?(c=Zt(d.props.children,f.mode,y,d.key),c.return=f,f=c):(y=cs(d.type,d.key,d.props,null,f.mode,y),y.ref=Un(f,c,d),y.return=f,f=y)}return o(f);case on:e:{for(b=d.key;c!==null;){if(c.key===b)if(c.tag===4&&c.stateNode.containerInfo===d.containerInfo&&c.stateNode.implementation===d.implementation){n(f,c.sibling),c=s(c,d.children||[]),c.return=f,f=c;break e}else{n(f,c);break}else t(f,c);c=c.sibling}c=zl(d,f.mode,y),c.return=f,f=c}return o(f);case St:return b=d._init,O(f,c,b(d._payload),y)}if(Kn(d))return N(f,c,d,y);if(In(d))return k(f,c,d,y);Gr(f,d)}return typeof d=="string"&&d!==""||typeof d=="number"?(d=""+d,c!==null&&c.tag===6?(n(f,c.sibling),c=s(c,d),c.return=f,f=c):(n(f,c),c=Ll(d,f.mode,y),c.return=f,f=c),o(f)):n(f,c)}return O}var Tn=wc(!0),Nc=wc(!1),bs=Vt(null),_s=null,xn=null,Zi=null;function Ji(){Zi=xn=_s=null}function Xi(e){var t=bs.current;te(bs),e._currentValue=t}function ui(e,t,n){for(;e!==null;){var r=e.alternate;if((e.childLanes&t)!==t?(e.childLanes|=t,r!==null&&(r.childLanes|=t)):r!==null&&(r.childLanes&t)!==t&&(r.childLanes|=t),e===n)break;e=e.return}}function Sn(e,t){_s=e,Zi=xn=null,e=e.dependencies,e!==null&&e.firstContext!==null&&(e.lanes&t&&(Le=!0),e.firstContext=null)}function We(e){var t=e._currentValue;if(Zi!==e)if(e={context:e,memoizedValue:t,next:null},xn===null){if(_s===null)throw Error(_(308));xn=e,_s.dependencies={lanes:0,firstContext:e}}else xn=xn.next=e;return t}var Gt=null;function eo(e){Gt===null?Gt=[e]:Gt.push(e)}function kc(e,t,n,r){var s=t.interleaved;return s===null?(n.next=n,eo(t)):(n.next=s.next,s.next=n),t.interleaved=n,gt(e,r)}function gt(e,t){e.lanes|=t;var n=e.alternate;for(n!==null&&(n.lanes|=t),n=e,e=e.return;e!==null;)e.childLanes|=t,n=e.alternate,n!==null&&(n.childLanes|=t),n=e,e=e.return;return n.tag===3?n.stateNode:null}var jt=!1;function to(e){e.updateQueue={baseState:e.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,interleaved:null,lanes:0},effects:null}}function Sc(e,t){e=e.updateQueue,t.updateQueue===e&&(t.updateQueue={baseState:e.baseState,firstBaseUpdate:e.firstBaseUpdate,lastBaseUpdate:e.lastBaseUpdate,shared:e.shared,effects:e.effects})}function pt(e,t){return{eventTime:e,lane:t,tag:0,payload:null,callback:null,next:null}}function Mt(e,t,n){var r=e.updateQueue;if(r===null)return null;if(r=r.shared,W&2){var s=r.pending;return s===null?t.next=t:(t.next=s.next,s.next=t),r.pending=t,gt(e,n)}return s=r.interleaved,s===null?(t.next=t,eo(r)):(t.next=s.next,s.next=t),r.interleaved=t,gt(e,n)}function ss(e,t,n){if(t=t.updateQueue,t!==null&&(t=t.shared,(n&4194240)!==0)){var r=t.lanes;r&=e.pendingLanes,n|=r,t.lanes=n,Vi(e,n)}}function Ta(e,t){var n=e.updateQueue,r=e.alternate;if(r!==null&&(r=r.updateQueue,n===r)){var s=null,i=null;if(n=n.firstBaseUpdate,n!==null){do{var o={eventTime:n.eventTime,lane:n.lane,tag:n.tag,payload:n.payload,callback:n.callback,next:null};i===null?s=i=o:i=i.next=o,n=n.next}while(n!==null);i===null?s=i=t:i=i.next=t}else s=i=t;n={baseState:r.baseState,firstBaseUpdate:s,lastBaseUpdate:i,shared:r.shared,effects:r.effects},e.updateQueue=n;return}e=n.lastBaseUpdate,e===null?n.firstBaseUpdate=t:e.next=t,n.lastBaseUpdate=t}function Es(e,t,n,r){var s=e.updateQueue;jt=!1;var i=s.firstBaseUpdate,o=s.lastBaseUpdate,a=s.shared.pending;if(a!==null){s.shared.pending=null;var u=a,m=u.next;u.next=null,o===null?i=m:o.next=m,o=u;var h=e.alternate;h!==null&&(h=h.updateQueue,a=h.lastBaseUpdate,a!==o&&(a===null?h.firstBaseUpdate=m:a.next=m,h.lastBaseUpdate=u))}if(i!==null){var v=s.baseState;o=0,h=m=u=null,a=i;do{var x=a.lane,S=a.eventTime;if((r&x)===x){h!==null&&(h=h.next={eventTime:S,lane:0,tag:a.tag,payload:a.payload,callback:a.callback,next:null});e:{var N=e,k=a;switch(x=t,S=n,k.tag){case 1:if(N=k.payload,typeof N=="function"){v=N.call(S,v,x);break e}v=N;break e;case 3:N.flags=N.flags&-65537|128;case 0:if(N=k.payload,x=typeof N=="function"?N.call(S,v,x):N,x==null)break e;v=le({},v,x);break e;case 2:jt=!0}}a.callback!==null&&a.lane!==0&&(e.flags|=64,x=s.effects,x===null?s.effects=[a]:x.push(a))}else S={eventTime:S,lane:x,tag:a.tag,payload:a.payload,callback:a.callback,next:null},h===null?(m=h=S,u=v):h=h.next=S,o|=x;if(a=a.next,a===null){if(a=s.shared.pending,a===null)break;x=a,a=x.next,x.next=null,s.lastBaseUpdate=x,s.shared.pending=null}}while(!0);if(h===null&&(u=v),s.baseState=u,s.firstBaseUpdate=m,s.lastBaseUpdate=h,t=s.shared.interleaved,t!==null){s=t;do o|=s.lane,s=s.next;while(s!==t)}else i===null&&(s.shared.lanes=0);tn|=o,e.lanes=o,e.memoizedState=v}}function Pa(e,t,n){if(e=t.effects,t.effects=null,e!==null)for(t=0;tn?n:4,e(!0);var r=_l.transition;_l.transition={};try{e(!1),t()}finally{Z=n,_l.transition=r}}function Vc(){return Ke().memoizedState}function Vm(e,t,n){var r=Dt(e);if(n={lane:r,action:n,hasEagerState:!1,eagerState:null,next:null},Fc(e))Bc(t,n);else if(n=kc(e,t,n,r),n!==null){var s=be();Xe(n,e,r,s),Uc(n,t,r)}}function Fm(e,t,n){var r=Dt(e),s={lane:r,action:n,hasEagerState:!1,eagerState:null,next:null};if(Fc(e))Bc(t,s);else{var i=e.alternate;if(e.lanes===0&&(i===null||i.lanes===0)&&(i=t.lastRenderedReducer,i!==null))try{var o=t.lastRenderedState,a=i(o,n);if(s.hasEagerState=!0,s.eagerState=a,et(a,o)){var u=t.interleaved;u===null?(s.next=s,eo(t)):(s.next=u.next,u.next=s),t.interleaved=s;return}}catch{}finally{}n=kc(e,t,s,r),n!==null&&(s=be(),Xe(n,e,r,s),Uc(n,t,r))}}function Fc(e){var t=e.alternate;return e===se||t!==null&&t===se}function Bc(e,t){tr=Ts=!0;var n=e.pending;n===null?t.next=t:(t.next=n.next,n.next=t),e.pending=t}function Uc(e,t,n){if(n&4194240){var r=t.lanes;r&=e.pendingLanes,n|=r,t.lanes=n,Vi(e,n)}}var Ps={readContext:We,useCallback:ve,useContext:ve,useEffect:ve,useImperativeHandle:ve,useInsertionEffect:ve,useLayoutEffect:ve,useMemo:ve,useReducer:ve,useRef:ve,useState:ve,useDebugValue:ve,useDeferredValue:ve,useTransition:ve,useMutableSource:ve,useSyncExternalStore:ve,useId:ve,unstable_isNewReconciler:!1},Bm={readContext:We,useCallback:function(e,t){return st().memoizedState=[e,t===void 0?null:t],e},useContext:We,useEffect:za,useImperativeHandle:function(e,t,n){return n=n!=null?n.concat([e]):null,is(4194308,4,Dc.bind(null,t,e),n)},useLayoutEffect:function(e,t){return is(4194308,4,e,t)},useInsertionEffect:function(e,t){return is(4,2,e,t)},useMemo:function(e,t){var n=st();return t=t===void 0?null:t,e=e(),n.memoizedState=[e,t],e},useReducer:function(e,t,n){var r=st();return t=n!==void 0?n(t):t,r.memoizedState=r.baseState=t,e={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:e,lastRenderedState:t},r.queue=e,e=e.dispatch=Vm.bind(null,se,e),[r.memoizedState,e]},useRef:function(e){var t=st();return e={current:e},t.memoizedState=e},useState:La,useDebugValue:uo,useDeferredValue:function(e){return st().memoizedState=e},useTransition:function(){var e=La(!1),t=e[0];return e=$m.bind(null,e[1]),st().memoizedState=e,[t,e]},useMutableSource:function(){},useSyncExternalStore:function(e,t,n){var r=se,s=st();if(ne){if(n===void 0)throw Error(_(407));n=n()}else{if(n=t(),me===null)throw Error(_(349));en&30||Ec(r,t,n)}s.memoizedState=n;var i={value:n,getSnapshot:t};return s.queue=i,za(Tc.bind(null,r,i,e),[e]),r.flags|=2048,Nr(9,Cc.bind(null,r,i,n,t),void 0,null),n},useId:function(){var e=st(),t=me.identifierPrefix;if(ne){var n=mt,r=ft;n=(r&~(1<<32-Je(r)-1)).toString(32)+n,t=":"+t+"R"+n,n=vr++,0<\/script>",e=e.removeChild(e.firstChild)):typeof r.is=="string"?e=o.createElement(n,{is:r.is}):(e=o.createElement(n),n==="select"&&(o=e,r.multiple?o.multiple=!0:r.size&&(o.size=r.size))):e=o.createElementNS(e,n),e[lt]=t,e[xr]=r,Xc(e,t,!1,!1),t.stateNode=e;e:{switch(o=Ql(n,r),n){case"dialog":ee("cancel",e),ee("close",e),s=r;break;case"iframe":case"object":case"embed":ee("load",e),s=r;break;case"video":case"audio":for(s=0;szn&&(t.flags|=128,r=!0,Hn(i,!1),t.lanes=4194304)}else{if(!r)if(e=Cs(o),e!==null){if(t.flags|=128,r=!0,n=e.updateQueue,n!==null&&(t.updateQueue=n,t.flags|=4),Hn(i,!0),i.tail===null&&i.tailMode==="hidden"&&!o.alternate&&!ne)return we(t),null}else 2*oe()-i.renderingStartTime>zn&&n!==1073741824&&(t.flags|=128,r=!0,Hn(i,!1),t.lanes=4194304);i.isBackwards?(o.sibling=t.child,t.child=o):(n=i.last,n!==null?n.sibling=o:t.child=o,i.last=o)}return i.tail!==null?(t=i.tail,i.rendering=t,i.tail=t.sibling,i.renderingStartTime=oe(),t.sibling=null,n=re.current,X(re,r?n&1|2:n&1),t):(we(t),null);case 22:case 23:return xo(),r=t.memoizedState!==null,e!==null&&e.memoizedState!==null!==r&&(t.flags|=8192),r&&t.mode&1?De&1073741824&&(we(t),t.subtreeFlags&6&&(t.flags|=8192)):we(t),null;case 24:return null;case 25:return null}throw Error(_(156,t.tag))}function Ym(e,t){switch(qi(t),t.tag){case 1:return Me(t.type)&&Ns(),e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 3:return Pn(),te(ze),te(ke),so(),e=t.flags,e&65536&&!(e&128)?(t.flags=e&-65537|128,t):null;case 5:return ro(t),null;case 13:if(te(re),e=t.memoizedState,e!==null&&e.dehydrated!==null){if(t.alternate===null)throw Error(_(340));Cn()}return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 19:return te(re),null;case 4:return Pn(),null;case 10:return Xi(t.type._context),null;case 22:case 23:return xo(),null;case 24:return null;default:return null}}var Yr=!1,Ne=!1,Zm=typeof WeakSet=="function"?WeakSet:Set,A=null;function gn(e,t){var n=e.ref;if(n!==null)if(typeof n=="function")try{n(null)}catch(r){ie(e,t,r)}else n.current=null}function yi(e,t,n){try{n()}catch(r){ie(e,t,r)}}var Ua=!1;function Jm(e,t){if(ti=gs,e=ic(),Ki(e)){if("selectionStart"in e)var n={start:e.selectionStart,end:e.selectionEnd};else e:{n=(n=e.ownerDocument)&&n.defaultView||window;var r=n.getSelection&&n.getSelection();if(r&&r.rangeCount!==0){n=r.anchorNode;var s=r.anchorOffset,i=r.focusNode;r=r.focusOffset;try{n.nodeType,i.nodeType}catch{n=null;break e}var o=0,a=-1,u=-1,m=0,h=0,v=e,x=null;t:for(;;){for(var S;v!==n||s!==0&&v.nodeType!==3||(a=o+s),v!==i||r!==0&&v.nodeType!==3||(u=o+r),v.nodeType===3&&(o+=v.nodeValue.length),(S=v.firstChild)!==null;)x=v,v=S;for(;;){if(v===e)break t;if(x===n&&++m===s&&(a=o),x===i&&++h===r&&(u=o),(S=v.nextSibling)!==null)break;v=x,x=v.parentNode}v=S}n=a===-1||u===-1?null:{start:a,end:u}}else n=null}n=n||{start:0,end:0}}else n=null;for(ni={focusedElem:e,selectionRange:n},gs=!1,A=t;A!==null;)if(t=A,e=t.child,(t.subtreeFlags&1028)!==0&&e!==null)e.return=t,A=e;else for(;A!==null;){t=A;try{var N=t.alternate;if(t.flags&1024)switch(t.tag){case 0:case 11:case 15:break;case 1:if(N!==null){var k=N.memoizedProps,O=N.memoizedState,f=t.stateNode,c=f.getSnapshotBeforeUpdate(t.elementType===t.type?k:qe(t.type,k),O);f.__reactInternalSnapshotBeforeUpdate=c}break;case 3:var d=t.stateNode.containerInfo;d.nodeType===1?d.textContent="":d.nodeType===9&&d.documentElement&&d.removeChild(d.documentElement);break;case 5:case 6:case 4:case 17:break;default:throw Error(_(163))}}catch(y){ie(t,t.return,y)}if(e=t.sibling,e!==null){e.return=t.return,A=e;break}A=t.return}return N=Ua,Ua=!1,N}function nr(e,t,n){var r=t.updateQueue;if(r=r!==null?r.lastEffect:null,r!==null){var s=r=r.next;do{if((s.tag&e)===e){var i=s.destroy;s.destroy=void 0,i!==void 0&&yi(t,n,i)}s=s.next}while(s!==r)}}function Qs(e,t){if(t=t.updateQueue,t=t!==null?t.lastEffect:null,t!==null){var n=t=t.next;do{if((n.tag&e)===e){var r=n.create;n.destroy=r()}n=n.next}while(n!==t)}}function vi(e){var t=e.ref;if(t!==null){var n=e.stateNode;switch(e.tag){case 5:e=n;break;default:e=n}typeof t=="function"?t(e):t.current=e}}function nd(e){var t=e.alternate;t!==null&&(e.alternate=null,nd(t)),e.child=null,e.deletions=null,e.sibling=null,e.tag===5&&(t=e.stateNode,t!==null&&(delete t[lt],delete t[xr],delete t[li],delete t[Am],delete t[Dm])),e.stateNode=null,e.return=null,e.dependencies=null,e.memoizedProps=null,e.memoizedState=null,e.pendingProps=null,e.stateNode=null,e.updateQueue=null}function rd(e){return e.tag===5||e.tag===3||e.tag===4}function Ha(e){e:for(;;){for(;e.sibling===null;){if(e.return===null||rd(e.return))return null;e=e.return}for(e.sibling.return=e.return,e=e.sibling;e.tag!==5&&e.tag!==6&&e.tag!==18;){if(e.flags&2||e.child===null||e.tag===4)continue e;e.child.return=e,e=e.child}if(!(e.flags&2))return e.stateNode}}function wi(e,t,n){var r=e.tag;if(r===5||r===6)e=e.stateNode,t?n.nodeType===8?n.parentNode.insertBefore(e,t):n.insertBefore(e,t):(n.nodeType===8?(t=n.parentNode,t.insertBefore(e,n)):(t=n,t.appendChild(e)),n=n._reactRootContainer,n!=null||t.onclick!==null||(t.onclick=ws));else if(r!==4&&(e=e.child,e!==null))for(wi(e,t,n),e=e.sibling;e!==null;)wi(e,t,n),e=e.sibling}function Ni(e,t,n){var r=e.tag;if(r===5||r===6)e=e.stateNode,t?n.insertBefore(e,t):n.appendChild(e);else if(r!==4&&(e=e.child,e!==null))for(Ni(e,t,n),e=e.sibling;e!==null;)Ni(e,t,n),e=e.sibling}var pe=null,Ye=!1;function kt(e,t,n){for(n=n.child;n!==null;)sd(e,t,n),n=n.sibling}function sd(e,t,n){if(it&&typeof it.onCommitFiberUnmount=="function")try{it.onCommitFiberUnmount(Os,n)}catch{}switch(n.tag){case 5:Ne||gn(n,t);case 6:var r=pe,s=Ye;pe=null,kt(e,t,n),pe=r,Ye=s,pe!==null&&(Ye?(e=pe,n=n.stateNode,e.nodeType===8?e.parentNode.removeChild(n):e.removeChild(n)):pe.removeChild(n.stateNode));break;case 18:pe!==null&&(Ye?(e=pe,n=n.stateNode,e.nodeType===8?Sl(e.parentNode,n):e.nodeType===1&&Sl(e,n),dr(e)):Sl(pe,n.stateNode));break;case 4:r=pe,s=Ye,pe=n.stateNode.containerInfo,Ye=!0,kt(e,t,n),pe=r,Ye=s;break;case 0:case 11:case 14:case 15:if(!Ne&&(r=n.updateQueue,r!==null&&(r=r.lastEffect,r!==null))){s=r=r.next;do{var i=s,o=i.destroy;i=i.tag,o!==void 0&&(i&2||i&4)&&yi(n,t,o),s=s.next}while(s!==r)}kt(e,t,n);break;case 1:if(!Ne&&(gn(n,t),r=n.stateNode,typeof r.componentWillUnmount=="function"))try{r.props=n.memoizedProps,r.state=n.memoizedState,r.componentWillUnmount()}catch(a){ie(n,t,a)}kt(e,t,n);break;case 21:kt(e,t,n);break;case 22:n.mode&1?(Ne=(r=Ne)||n.memoizedState!==null,kt(e,t,n),Ne=r):kt(e,t,n);break;default:kt(e,t,n)}}function Qa(e){var t=e.updateQueue;if(t!==null){e.updateQueue=null;var n=e.stateNode;n===null&&(n=e.stateNode=new Zm),t.forEach(function(r){var s=op.bind(null,e,r);n.has(r)||(n.add(r),r.then(s,s))})}}function Ge(e,t){var n=t.deletions;if(n!==null)for(var r=0;rs&&(s=o),r&=~i}if(r=s,r=oe()-r,r=(120>r?120:480>r?480:1080>r?1080:1920>r?1920:3e3>r?3e3:4320>r?4320:1960*ep(r/1960))-r,10e?16:e,Ct===null)var r=!1;else{if(e=Ct,Ct=null,Ms=0,W&6)throw Error(_(331));var s=W;for(W|=4,A=e.current;A!==null;){var i=A,o=i.child;if(A.flags&16){var a=i.deletions;if(a!==null){for(var u=0;uoe()-po?Yt(e,0):mo|=n),Ae(e,t)}function fd(e,t){t===0&&(e.mode&1?(t=Fr,Fr<<=1,!(Fr&130023424)&&(Fr=4194304)):t=1);var n=be();e=gt(e,t),e!==null&&(_r(e,t,n),Ae(e,n))}function ip(e){var t=e.memoizedState,n=0;t!==null&&(n=t.retryLane),fd(e,n)}function op(e,t){var n=0;switch(e.tag){case 13:var r=e.stateNode,s=e.memoizedState;s!==null&&(n=s.retryLane);break;case 19:r=e.stateNode;break;default:throw Error(_(314))}r!==null&&r.delete(t),fd(e,n)}var md;md=function(e,t,n){if(e!==null)if(e.memoizedProps!==t.pendingProps||ze.current)Le=!0;else{if(!(e.lanes&n)&&!(t.flags&128))return Le=!1,Gm(e,t,n);Le=!!(e.flags&131072)}else Le=!1,ne&&t.flags&1048576&&gc(t,js,t.index);switch(t.lanes=0,t.tag){case 2:var r=t.type;os(e,t),e=t.pendingProps;var s=En(t,ke.current);Sn(t,n),s=io(null,t,r,e,s,n);var i=oo();return t.flags|=1,typeof s=="object"&&s!==null&&typeof s.render=="function"&&s.$$typeof===void 0?(t.tag=1,t.memoizedState=null,t.updateQueue=null,Me(r)?(i=!0,ks(t)):i=!1,t.memoizedState=s.state!==null&&s.state!==void 0?s.state:null,to(t),s.updater=Hs,t.stateNode=s,s._reactInternals=t,di(t,r,e,n),t=pi(null,t,r,!0,i,n)):(t.tag=0,ne&&i&&Gi(t),je(null,t,s,n),t=t.child),t;case 16:r=t.elementType;e:{switch(os(e,t),e=t.pendingProps,s=r._init,r=s(r._payload),t.type=r,s=t.tag=up(r),e=qe(r,e),s){case 0:t=mi(null,t,r,e,n);break e;case 1:t=Va(null,t,r,e,n);break e;case 11:t=Ia(null,t,r,e,n);break e;case 14:t=$a(null,t,r,qe(r.type,e),n);break e}throw Error(_(306,r,""))}return t;case 0:return r=t.type,s=t.pendingProps,s=t.elementType===r?s:qe(r,s),mi(e,t,r,s,n);case 1:return r=t.type,s=t.pendingProps,s=t.elementType===r?s:qe(r,s),Va(e,t,r,s,n);case 3:e:{if(Yc(t),e===null)throw Error(_(387));r=t.pendingProps,i=t.memoizedState,s=i.element,Sc(e,t),Es(t,r,null,n);var o=t.memoizedState;if(r=o.element,i.isDehydrated)if(i={element:r,isDehydrated:!1,cache:o.cache,pendingSuspenseBoundaries:o.pendingSuspenseBoundaries,transitions:o.transitions},t.updateQueue.baseState=i,t.memoizedState=i,t.flags&256){s=Ln(Error(_(423)),t),t=Fa(e,t,r,n,s);break e}else if(r!==s){s=Ln(Error(_(424)),t),t=Fa(e,t,r,n,s);break e}else for(Re=zt(t.stateNode.containerInfo.firstChild),Oe=t,ne=!0,Ze=null,n=Nc(t,null,r,n),t.child=n;n;)n.flags=n.flags&-3|4096,n=n.sibling;else{if(Cn(),r===s){t=yt(e,t,n);break e}je(e,t,r,n)}t=t.child}return t;case 5:return jc(t),e===null&&ai(t),r=t.type,s=t.pendingProps,i=e!==null?e.memoizedProps:null,o=s.children,ri(r,s)?o=null:i!==null&&ri(r,i)&&(t.flags|=32),qc(e,t),je(e,t,o,n),t.child;case 6:return e===null&&ai(t),null;case 13:return Zc(e,t,n);case 4:return no(t,t.stateNode.containerInfo),r=t.pendingProps,e===null?t.child=Tn(t,null,r,n):je(e,t,r,n),t.child;case 11:return r=t.type,s=t.pendingProps,s=t.elementType===r?s:qe(r,s),Ia(e,t,r,s,n);case 7:return je(e,t,t.pendingProps,n),t.child;case 8:return je(e,t,t.pendingProps.children,n),t.child;case 12:return je(e,t,t.pendingProps.children,n),t.child;case 10:e:{if(r=t.type._context,s=t.pendingProps,i=t.memoizedProps,o=s.value,X(bs,r._currentValue),r._currentValue=o,i!==null)if(et(i.value,o)){if(i.children===s.children&&!ze.current){t=yt(e,t,n);break e}}else for(i=t.child,i!==null&&(i.return=t);i!==null;){var a=i.dependencies;if(a!==null){o=i.child;for(var u=a.firstContext;u!==null;){if(u.context===r){if(i.tag===1){u=pt(-1,n&-n),u.tag=2;var m=i.updateQueue;if(m!==null){m=m.shared;var h=m.pending;h===null?u.next=u:(u.next=h.next,h.next=u),m.pending=u}}i.lanes|=n,u=i.alternate,u!==null&&(u.lanes|=n),ui(i.return,n,t),a.lanes|=n;break}u=u.next}}else if(i.tag===10)o=i.type===t.type?null:i.child;else if(i.tag===18){if(o=i.return,o===null)throw Error(_(341));o.lanes|=n,a=o.alternate,a!==null&&(a.lanes|=n),ui(o,n,t),o=i.sibling}else o=i.child;if(o!==null)o.return=i;else for(o=i;o!==null;){if(o===t){o=null;break}if(i=o.sibling,i!==null){i.return=o.return,o=i;break}o=o.return}i=o}je(e,t,s.children,n),t=t.child}return t;case 9:return s=t.type,r=t.pendingProps.children,Sn(t,n),s=We(s),r=r(s),t.flags|=1,je(e,t,r,n),t.child;case 14:return r=t.type,s=qe(r,t.pendingProps),s=qe(r.type,s),$a(e,t,r,s,n);case 15:return Kc(e,t,t.type,t.pendingProps,n);case 17:return r=t.type,s=t.pendingProps,s=t.elementType===r?s:qe(r,s),os(e,t),t.tag=1,Me(r)?(e=!0,ks(t)):e=!1,Sn(t,n),Hc(t,r,s),di(t,r,s,n),pi(null,t,r,!0,e,n);case 19:return Jc(e,t,n);case 22:return Gc(e,t,n)}throw Error(_(156,t.tag))};function pd(e,t){return Fu(e,t)}function ap(e,t,n,r){this.tag=e,this.key=n,this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null,this.index=0,this.ref=null,this.pendingProps=t,this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null,this.mode=r,this.subtreeFlags=this.flags=0,this.deletions=null,this.childLanes=this.lanes=0,this.alternate=null}function He(e,t,n,r){return new ap(e,t,n,r)}function yo(e){return e=e.prototype,!(!e||!e.isReactComponent)}function up(e){if(typeof e=="function")return yo(e)?1:0;if(e!=null){if(e=e.$$typeof,e===Ri)return 11;if(e===Oi)return 14}return 2}function Rt(e,t){var n=e.alternate;return n===null?(n=He(e.tag,t,e.key,e.mode),n.elementType=e.elementType,n.type=e.type,n.stateNode=e.stateNode,n.alternate=e,e.alternate=n):(n.pendingProps=t,n.type=e.type,n.flags=0,n.subtreeFlags=0,n.deletions=null),n.flags=e.flags&14680064,n.childLanes=e.childLanes,n.lanes=e.lanes,n.child=e.child,n.memoizedProps=e.memoizedProps,n.memoizedState=e.memoizedState,n.updateQueue=e.updateQueue,t=e.dependencies,n.dependencies=t===null?null:{lanes:t.lanes,firstContext:t.firstContext},n.sibling=e.sibling,n.index=e.index,n.ref=e.ref,n}function cs(e,t,n,r,s,i){var o=2;if(r=e,typeof e=="function")yo(e)&&(o=1);else if(typeof e=="string")o=5;else e:switch(e){case an:return Zt(n.children,s,i,t);case Di:o=8,s|=8;break;case Dl:return e=He(12,n,t,s|2),e.elementType=Dl,e.lanes=i,e;case Rl:return e=He(13,n,t,s),e.elementType=Rl,e.lanes=i,e;case Ol:return e=He(19,n,t,s),e.elementType=Ol,e.lanes=i,e;case ju:return Ks(n,s,i,t);default:if(typeof e=="object"&&e!==null)switch(e.$$typeof){case ku:o=10;break e;case Su:o=9;break e;case Ri:o=11;break e;case Oi:o=14;break e;case St:o=16,r=null;break e}throw Error(_(130,e==null?e:typeof e,""))}return t=He(o,n,t,s),t.elementType=e,t.type=r,t.lanes=i,t}function Zt(e,t,n,r){return e=He(7,e,r,t),e.lanes=n,e}function Ks(e,t,n,r){return e=He(22,e,r,t),e.elementType=ju,e.lanes=n,e.stateNode={isHidden:!1},e}function Ll(e,t,n){return e=He(6,e,null,t),e.lanes=n,e}function zl(e,t,n){return t=He(4,e.children!==null?e.children:[],e.key,t),t.lanes=n,t.stateNode={containerInfo:e.containerInfo,pendingChildren:null,implementation:e.implementation},t}function cp(e,t,n,r,s){this.tag=t,this.containerInfo=e,this.finishedWork=this.pingCache=this.current=this.pendingChildren=null,this.timeoutHandle=-1,this.callbackNode=this.pendingContext=this.context=null,this.callbackPriority=0,this.eventTimes=fl(0),this.expirationTimes=fl(-1),this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0,this.entanglements=fl(0),this.identifierPrefix=r,this.onRecoverableError=s,this.mutableSourceEagerHydrationData=null}function vo(e,t,n,r,s,i,o,a,u){return e=new cp(e,t,n,a,u),t===1?(t=1,i===!0&&(t|=8)):t=0,i=He(3,null,null,t),e.current=i,i.stateNode=e,i.memoizedState={element:r,isDehydrated:n,cache:null,transitions:null,pendingSuspenseBoundaries:null},to(i),e}function dp(e,t,n){var r=3"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(yd)}catch(e){console.error(e)}}yd(),yu.exports=$e;var xp=yu.exports,Xa=xp;Ml.createRoot=Xa.createRoot,Ml.hydrateRoot=Xa.hydrateRoot;/** - * @license lucide-react v0.424.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const gp=e=>e.replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase(),vd=(...e)=>e.filter((t,n,r)=>!!t&&r.indexOf(t)===n).join(" ");/** - * @license lucide-react v0.424.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */var yp={xmlns:"http://www.w3.org/2000/svg",width:24,height:24,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round"};/** - * @license lucide-react v0.424.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const vp=w.forwardRef(({color:e="currentColor",size:t=24,strokeWidth:n=2,absoluteStrokeWidth:r,className:s="",children:i,iconNode:o,...a},u)=>w.createElement("svg",{ref:u,...yp,width:t,height:t,stroke:e,strokeWidth:r?Number(n)*24/Number(t):n,className:vd("lucide",s),...a},[...o.map(([m,h])=>w.createElement(m,h)),...Array.isArray(i)?i:[i]]));/** - * @license lucide-react v0.424.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const U=(e,t)=>{const n=w.forwardRef(({className:r,...s},i)=>w.createElement(vp,{ref:i,iconNode:t,className:vd(`lucide-${gp(e)}`,r),...s}));return n.displayName=`${e}`,n};/** - * @license lucide-react v0.424.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const wd=U("ArrowLeft",[["path",{d:"m12 19-7-7 7-7",key:"1l729n"}],["path",{d:"M19 12H5",key:"x3x0zl"}]]);/** - * @license lucide-react v0.424.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const Nd=U("ArrowRight",[["path",{d:"M5 12h14",key:"1ays0h"}],["path",{d:"m12 5 7 7-7 7",key:"xquz4c"}]]);/** - * @license lucide-react v0.424.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const wp=U("Award",[["path",{d:"m15.477 12.89 1.515 8.526a.5.5 0 0 1-.81.47l-3.58-2.687a1 1 0 0 0-1.197 0l-3.586 2.686a.5.5 0 0 1-.81-.469l1.514-8.526",key:"1yiouv"}],["circle",{cx:"12",cy:"8",r:"6",key:"1vp47v"}]]);/** - * @license lucide-react v0.424.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const eu=U("CalendarDays",[["path",{d:"M8 2v4",key:"1cmpym"}],["path",{d:"M16 2v4",key:"4m81vk"}],["rect",{width:"18",height:"18",x:"3",y:"4",rx:"2",key:"1hopcy"}],["path",{d:"M3 10h18",key:"8toen8"}],["path",{d:"M8 14h.01",key:"6423bh"}],["path",{d:"M12 14h.01",key:"1etili"}],["path",{d:"M16 14h.01",key:"1gbofw"}],["path",{d:"M8 18h.01",key:"lrp35t"}],["path",{d:"M12 18h.01",key:"mhygvu"}],["path",{d:"M16 18h.01",key:"kzsmim"}]]);/** - * @license lucide-react v0.424.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const Pr=U("Calendar",[["path",{d:"M8 2v4",key:"1cmpym"}],["path",{d:"M16 2v4",key:"4m81vk"}],["rect",{width:"18",height:"18",x:"3",y:"4",rx:"2",key:"1hopcy"}],["path",{d:"M3 10h18",key:"8toen8"}]]);/** - * @license lucide-react v0.424.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const Np=U("ChevronLeft",[["path",{d:"m15 18-6-6 6-6",key:"1wnfg3"}]]);/** - * @license lucide-react v0.424.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const kp=U("ChevronRight",[["path",{d:"m9 18 6-6-6-6",key:"mthhwq"}]]);/** - * @license lucide-react v0.424.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const Mn=U("CircleAlert",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["line",{x1:"12",x2:"12",y1:"8",y2:"12",key:"1pkeuh"}],["line",{x1:"12",x2:"12.01",y1:"16",y2:"16",key:"4dfq90"}]]);/** - * @license lucide-react v0.424.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const ut=U("CircleCheck",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"m9 12 2 2 4-4",key:"dzmm74"}]]);/** - * @license lucide-react v0.424.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const Sr=U("Clock",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["polyline",{points:"12 6 12 12 16 14",key:"68esgv"}]]);/** - * @license lucide-react v0.424.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const Sp=U("Download",[["path",{d:"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4",key:"ih7n3h"}],["polyline",{points:"7 10 12 15 17 10",key:"2ggqvy"}],["line",{x1:"12",x2:"12",y1:"15",y2:"3",key:"1vk2je"}]]);/** - * @license lucide-react v0.424.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const kd=U("EyeOff",[["path",{d:"M10.733 5.076a10.744 10.744 0 0 1 11.205 6.575 1 1 0 0 1 0 .696 10.747 10.747 0 0 1-1.444 2.49",key:"ct8e1f"}],["path",{d:"M14.084 14.158a3 3 0 0 1-4.242-4.242",key:"151rxh"}],["path",{d:"M17.479 17.499a10.75 10.75 0 0 1-15.417-5.151 1 1 0 0 1 0-.696 10.75 10.75 0 0 1 4.446-5.143",key:"13bj9a"}],["path",{d:"m2 2 20 20",key:"1ooewy"}]]);/** - * @license lucide-react v0.424.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const jp=U("Eye",[["path",{d:"M2.062 12.348a1 1 0 0 1 0-.696 10.75 10.75 0 0 1 19.876 0 1 1 0 0 1 0 .696 10.75 10.75 0 0 1-19.876 0",key:"1nclc0"}],["circle",{cx:"12",cy:"12",r:"3",key:"1v7zrd"}]]);/** - * @license lucide-react v0.424.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const tu=U("House",[["path",{d:"M15 21v-8a1 1 0 0 0-1-1h-4a1 1 0 0 0-1 1v8",key:"5wwlr5"}],["path",{d:"M3 10a2 2 0 0 1 .709-1.528l7-5.999a2 2 0 0 1 2.582 0l7 5.999A2 2 0 0 1 21 10v9a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z",key:"1d0kgt"}]]);/** - * @license lucide-react v0.424.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const Js=U("Layers",[["path",{d:"m12.83 2.18a2 2 0 0 0-1.66 0L2.6 6.08a1 1 0 0 0 0 1.83l8.58 3.91a2 2 0 0 0 1.66 0l8.58-3.9a1 1 0 0 0 0-1.83Z",key:"8b97xw"}],["path",{d:"m22 17.65-9.17 4.16a2 2 0 0 1-1.66 0L2 17.65",key:"dd6zsq"}],["path",{d:"m22 12.65-9.17 4.16a2 2 0 0 1-1.66 0L2 12.65",key:"ep9fru"}]]);/** - * @license lucide-react v0.424.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const bp=U("Lock",[["rect",{width:"18",height:"11",x:"3",y:"11",rx:"2",ry:"2",key:"1w4ew1"}],["path",{d:"M7 11V7a5 5 0 0 1 10 0v4",key:"fwvmzm"}]]);/** - * @license lucide-react v0.424.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const _p=U("LogOut",[["path",{d:"M9 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h4",key:"1uf3rs"}],["polyline",{points:"16 17 21 12 16 7",key:"1gabdz"}],["line",{x1:"21",x2:"9",y1:"12",y2:"12",key:"1uyos4"}]]);/** - * @license lucide-react v0.424.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const _i=U("Mail",[["rect",{width:"20",height:"16",x:"2",y:"4",rx:"2",key:"18n3k1"}],["path",{d:"m22 7-8.97 5.7a1.94 1.94 0 0 1-2.06 0L2 7",key:"1ocrg3"}]]);/** - * @license lucide-react v0.424.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const So=U("MapPin",[["path",{d:"M20 10c0 4.993-5.539 10.193-7.399 11.799a1 1 0 0 1-1.202 0C9.539 20.193 4 14.993 4 10a8 8 0 0 1 16 0",key:"1r0f0z"}],["circle",{cx:"12",cy:"10",r:"3",key:"ilqhr7"}]]);/** - * @license lucide-react v0.424.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const Ep=U("Monitor",[["rect",{width:"20",height:"14",x:"2",y:"3",rx:"2",key:"48i651"}],["line",{x1:"8",x2:"16",y1:"21",y2:"21",key:"1svkeh"}],["line",{x1:"12",x2:"12",y1:"17",y2:"21",key:"vw1qmm"}]]);/** - * @license lucide-react v0.424.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const Cp=U("Moon",[["path",{d:"M12 3a6 6 0 0 0 9 9 9 9 0 1 1-9-9Z",key:"a7tn18"}]]);/** - * @license lucide-react v0.424.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const nu=U("Palette",[["circle",{cx:"13.5",cy:"6.5",r:".5",fill:"currentColor",key:"1okk4w"}],["circle",{cx:"17.5",cy:"10.5",r:".5",fill:"currentColor",key:"f64h9f"}],["circle",{cx:"8.5",cy:"7.5",r:".5",fill:"currentColor",key:"fotxhn"}],["circle",{cx:"6.5",cy:"12.5",r:".5",fill:"currentColor",key:"qy21gx"}],["path",{d:"M12 2C6.5 2 2 6.5 2 12s4.5 10 10 10c.926 0 1.648-.746 1.648-1.688 0-.437-.18-.835-.437-1.125-.29-.289-.438-.652-.438-1.125a1.64 1.64 0 0 1 1.668-1.668h1.996c3.051 0 5.555-2.503 5.555-5.554C21.965 6.012 17.461 2 12 2z",key:"12rzf8"}]]);/** - * @license lucide-react v0.424.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const jr=U("PenLine",[["path",{d:"M12 20h9",key:"t2du7b"}],["path",{d:"M16.376 3.622a1 1 0 0 1 3.002 3.002L7.368 18.635a2 2 0 0 1-.855.506l-2.872.838a.5.5 0 0 1-.62-.62l.838-2.872a2 2 0 0 1 .506-.854z",key:"1ykcvy"}]]);/** - * @license lucide-react v0.424.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const Tp=U("Play",[["polygon",{points:"6 3 20 12 6 21 6 3",key:"1oa8hb"}]]);/** - * @license lucide-react v0.424.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const at=U("Plus",[["path",{d:"M5 12h14",key:"1ays0h"}],["path",{d:"M12 5v14",key:"s699le"}]]);/** - * @license lucide-react v0.424.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const Pp=U("Printer",[["path",{d:"M6 18H4a2 2 0 0 1-2-2v-5a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2v5a2 2 0 0 1-2 2h-2",key:"143wyd"}],["path",{d:"M6 9V3a1 1 0 0 1 1-1h10a1 1 0 0 1 1 1v6",key:"1itne7"}],["rect",{x:"6",y:"14",width:"12",height:"8",rx:"1",key:"1ue0tg"}]]);/** - * @license lucide-react v0.424.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const Sd=U("Search",[["circle",{cx:"11",cy:"11",r:"8",key:"4ej97u"}],["path",{d:"m21 21-4.3-4.3",key:"1qie3q"}]]);/** - * @license lucide-react v0.424.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const Lp=U("Send",[["path",{d:"m22 2-7 20-4-9-9-4Z",key:"1q3vgg"}],["path",{d:"M22 2 11 13",key:"nzbqef"}]]);/** - * @license lucide-react v0.424.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const ru=U("Settings",[["path",{d:"M12.22 2h-.44a2 2 0 0 0-2 2v.18a2 2 0 0 1-1 1.73l-.43.25a2 2 0 0 1-2 0l-.15-.08a2 2 0 0 0-2.73.73l-.22.38a2 2 0 0 0 .73 2.73l.15.1a2 2 0 0 1 1 1.72v.51a2 2 0 0 1-1 1.74l-.15.09a2 2 0 0 0-.73 2.73l.22.38a2 2 0 0 0 2.73.73l.15-.08a2 2 0 0 1 2 0l.43.25a2 2 0 0 1 1 1.73V20a2 2 0 0 0 2 2h.44a2 2 0 0 0 2-2v-.18a2 2 0 0 1 1-1.73l.43-.25a2 2 0 0 1 2 0l.15.08a2 2 0 0 0 2.73-.73l.22-.39a2 2 0 0 0-.73-2.73l-.15-.08a2 2 0 0 1-1-1.74v-.5a2 2 0 0 1 1-1.74l.15-.09a2 2 0 0 0 .73-2.73l-.22-.38a2 2 0 0 0-2.73-.73l-.15.08a2 2 0 0 1-2 0l-.43-.25a2 2 0 0 1-1-1.73V4a2 2 0 0 0-2-2z",key:"1qme2f"}],["circle",{cx:"12",cy:"12",r:"3",key:"1v7zrd"}]]);/** - * @license lucide-react v0.424.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const zp=U("ShieldAlert",[["path",{d:"M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z",key:"oel41y"}],["path",{d:"M12 8v4",key:"1got3b"}],["path",{d:"M12 16h.01",key:"1drbdi"}]]);/** - * @license lucide-react v0.424.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const Mp=U("ShieldCheck",[["path",{d:"M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z",key:"oel41y"}],["path",{d:"m9 12 2 2 4-4",key:"dzmm74"}]]);/** - * @license lucide-react v0.424.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const jd=U("Shield",[["path",{d:"M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z",key:"oel41y"}]]);/** - * @license lucide-react v0.424.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const bd=U("Sparkles",[["path",{d:"M9.937 15.5A2 2 0 0 0 8.5 14.063l-6.135-1.582a.5.5 0 0 1 0-.962L8.5 9.936A2 2 0 0 0 9.937 8.5l1.582-6.135a.5.5 0 0 1 .963 0L14.063 8.5A2 2 0 0 0 15.5 9.937l6.135 1.581a.5.5 0 0 1 0 .964L15.5 14.063a2 2 0 0 0-1.437 1.437l-1.582 6.135a.5.5 0 0 1-.963 0z",key:"4pj2yx"}],["path",{d:"M20 3v4",key:"1olli1"}],["path",{d:"M22 5h-4",key:"1gvqau"}],["path",{d:"M4 17v2",key:"vumght"}],["path",{d:"M5 18H3",key:"zchphs"}]]);/** - * @license lucide-react v0.424.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const Ap=U("Sun",[["circle",{cx:"12",cy:"12",r:"4",key:"4exip2"}],["path",{d:"M12 2v2",key:"tus03m"}],["path",{d:"M12 20v2",key:"1lh1kg"}],["path",{d:"m4.93 4.93 1.41 1.41",key:"149t6j"}],["path",{d:"m17.66 17.66 1.41 1.41",key:"ptbguv"}],["path",{d:"M2 12h2",key:"1t8f8n"}],["path",{d:"M20 12h2",key:"1q8mjw"}],["path",{d:"m6.34 17.66-1.41 1.41",key:"1m8zz5"}],["path",{d:"m19.07 4.93-1.41 1.41",key:"1shlcs"}]]);/** - * @license lucide-react v0.424.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const Dp=U("TableProperties",[["path",{d:"M15 3v18",key:"14nvp0"}],["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",key:"afitv7"}],["path",{d:"M21 9H3",key:"1338ky"}],["path",{d:"M21 15H3",key:"9uk58r"}]]);/** - * @license lucide-react v0.424.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const Ue=U("Trash2",[["path",{d:"M3 6h18",key:"d0wm0j"}],["path",{d:"M19 6v14c0 1-1 2-2 2H7c-1 0-2-1-2-2V6",key:"4alrt4"}],["path",{d:"M8 6V4c0-1 1-2 2-2h4c1 0 2 1 2 2v2",key:"v07s0e"}],["line",{x1:"10",x2:"10",y1:"11",y2:"17",key:"1uufr5"}],["line",{x1:"14",x2:"14",y1:"11",y2:"17",key:"xtxkd"}]]);/** - * @license lucide-react v0.424.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const jo=U("UserCheck",[["path",{d:"M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2",key:"1yyitq"}],["circle",{cx:"9",cy:"7",r:"4",key:"nufk8"}],["polyline",{points:"16 11 18 13 22 9",key:"1pwet4"}]]);/** - * @license lucide-react v0.424.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const Rp=U("UserPlus",[["path",{d:"M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2",key:"1yyitq"}],["circle",{cx:"9",cy:"7",r:"4",key:"nufk8"}],["line",{x1:"19",x2:"19",y1:"8",y2:"14",key:"1bvyxn"}],["line",{x1:"22",x2:"16",y1:"11",y2:"11",key:"1shjgl"}]]);/** - * @license lucide-react v0.424.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const su=U("UserX",[["path",{d:"M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2",key:"1yyitq"}],["circle",{cx:"9",cy:"7",r:"4",key:"nufk8"}],["line",{x1:"17",x2:"22",y1:"8",y2:"13",key:"3nzzx3"}],["line",{x1:"22",x2:"17",y1:"8",y2:"13",key:"1swrse"}]]);/** - * @license lucide-react v0.424.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const ds=U("User",[["path",{d:"M19 21v-2a4 4 0 0 0-4-4H9a4 4 0 0 0-4 4v2",key:"975kel"}],["circle",{cx:"12",cy:"7",r:"4",key:"17ys0d"}]]);/** - * @license lucide-react v0.424.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const _d=U("Users",[["path",{d:"M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2",key:"1yyitq"}],["circle",{cx:"9",cy:"7",r:"4",key:"nufk8"}],["path",{d:"M22 21v-2a4 4 0 0 0-3-3.87",key:"kshegd"}],["path",{d:"M16 3.13a4 4 0 0 1 0 7.75",key:"1da9ce"}]]);/** - * @license lucide-react v0.424.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const Ed=U("X",[["path",{d:"M18 6 6 18",key:"1bl5f8"}],["path",{d:"m6 6 12 12",key:"d8bk6v"}]]);function Op({branding:e,user:t,activeTab:n,onChangeTab:r,themeMode:s,onChangeThemeMode:i,onLogout:o,onOpenAuth:a,onOpenCreateEvent:u,onOpenTemplates:m,onOpenProfile:h,onOpenAdmin:v,pwaInstallPrompt:x,onInstallPwa:S}){const N=(e==null?void 0:e.primary_color)||"var(--brand-primary)",[k,O]=lr.useState(()=>localStorage.getItem("guest_display_name")||"");lr.useEffect(()=>{const c=()=>{O(localStorage.getItem("guest_display_name")||"")};return window.addEventListener("guest_name_updated",c),window.addEventListener("storage",c),()=>{window.removeEventListener("guest_name_updated",c),window.removeEventListener("storage",c)}},[]);const f=()=>{i(s==="dark"?"light":s==="light"?"auto":"dark")};return l.jsxs("header",{className:"bg-surface border-b border-grid sticky top-0 z-40",children:[l.jsxs("div",{className:"max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 h-16 flex items-center justify-between gap-4",children:[l.jsxs("div",{className:"flex items-center space-x-3 shrink-0",children:[l.jsx("div",{onClick:()=>r("home"),style:{backgroundColor:N},className:"w-8 h-8 rounded-sm flex items-center justify-center text-white font-bold cursor-pointer shadow-sm",children:e!=null&&e.logo_url?l.jsx("img",{src:e.logo_url,alt:"Logo",className:"w-4 h-4 object-contain"}):l.jsx(Pr,{className:"w-4 h-4"})}),l.jsxs("div",{onClick:()=>r("home"),className:"cursor-pointer",children:[l.jsx("h1",{className:"font-serif text-base font-bold tracking-tight text-main leading-none",children:(e==null?void 0:e.app_name)||"Schichtplaner"}),l.jsx("div",{className:"text-[10px] font-mono text-muted mt-1 uppercase tracking-wider flex items-center gap-1.5",children:t?l.jsxs("span",{className:"text-emerald-500 font-semibold",children:["[ ",t.display_name||t.username," ]"]}):k?l.jsxs("span",{className:"text-amber-400 font-semibold flex items-center gap-1",children:["[ 👤 GAST: ",k," ]"]}):l.jsx("span",{className:"text-amber-500 font-semibold",children:"[ GAST-MODUS ]"})})]})]}),l.jsxs("nav",{className:"hidden md:flex items-center gap-2",children:[l.jsxs("button",{onClick:()=>r("home"),className:`px-3 py-1.5 rounded-sm text-xs font-mono transition flex items-center gap-1.5 border ${n==="home"?"bg-surface-hover text-main font-bold border-grid":"text-muted hover:text-main border-transparent"}`,children:[l.jsx(tu,{className:"w-3.5 h-3.5"})," Startseite"]}),l.jsxs("button",{onClick:()=>r("calendar"),className:`px-3 py-1.5 rounded-sm text-xs font-mono transition flex items-center gap-1.5 border ${n==="calendar"?"bg-surface-hover text-main font-bold border-grid":"text-muted hover:text-main border-transparent"}`,children:[l.jsx(eu,{className:"w-3.5 h-3.5"})," Kalender"]}),((t==null?void 0:t.is_admin_user)||(t==null?void 0:t.is_staff)||(t==null?void 0:t.is_superuser))&&l.jsxs("button",{onClick:()=>r("admin"),className:`px-3 py-1.5 rounded-sm text-xs font-mono transition flex items-center gap-1.5 border ${n==="admin"?"bg-surface-hover text-main font-bold border-grid":"text-muted hover:text-main border-transparent"}`,children:[l.jsx(ru,{className:"w-3.5 h-3.5 text-indigo-400"})," Admin"]})]}),l.jsxs("div",{className:"flex items-center space-x-2",children:[l.jsx("button",{onClick:f,className:"h-8 px-2.5 rounded-sm text-xs font-mono bg-subtle hover:bg-surface-hover text-main border border-grid transition flex items-center gap-1.5",title:`Design-Modus: ${s.toUpperCase()}`,children:s==="dark"?l.jsxs(l.Fragment,{children:[l.jsx(Cp,{className:"w-3.5 h-3.5 text-indigo-400"}),l.jsx("span",{className:"hidden lg:inline text-[11px] font-bold",children:"DARK"})]}):s==="light"?l.jsxs(l.Fragment,{children:[l.jsx(Ap,{className:"w-3.5 h-3.5 text-amber-500"}),l.jsx("span",{className:"hidden lg:inline text-[11px] font-bold",children:"LIGHT"})]}):l.jsxs(l.Fragment,{children:[l.jsx(Ep,{className:"w-3.5 h-3.5 text-blue-500"}),l.jsx("span",{className:"hidden lg:inline text-[11px] font-bold",children:"AUTO"})]})}),x&&l.jsxs("button",{onClick:S,className:"h-8 px-2.5 rounded-sm text-xs font-mono bg-emerald-500/10 text-emerald-500 border border-emerald-500/20 hover:bg-emerald-500/20 transition flex items-center gap-1",children:[l.jsx(bd,{className:"w-3 h-3"})," PWA"]}),t?l.jsxs(l.Fragment,{children:[l.jsxs("button",{onClick:u,style:{backgroundColor:N},className:"h-8 px-3 rounded-sm text-xs font-mono font-bold text-white transition flex items-center gap-1 shadow-sm hover:brightness-110",children:[l.jsx(at,{className:"w-3.5 h-3.5"})," Event"]}),l.jsxs("button",{onClick:m,className:"h-8 px-2.5 rounded-sm text-xs font-mono bg-subtle hover:bg-surface-hover text-main border border-grid transition hidden sm:flex items-center gap-1",title:"Vorlagen",children:[l.jsx(Js,{className:"w-3.5 h-3.5 text-muted"})," Vorlagen"]}),l.jsxs("button",{onClick:h,className:"h-8 px-2.5 rounded-sm text-xs font-mono bg-subtle hover:bg-surface-hover text-main border border-grid transition flex items-center gap-1",title:"Profil & Namen ändern",children:[l.jsx(jr,{className:"w-3.5 h-3.5 text-amber-500"})," Profil"]}),(t.is_admin_user||t.is_staff||t.is_superuser)&&l.jsxs("button",{onClick:()=>r("admin"),className:`h-8 px-2.5 rounded-sm text-xs font-mono transition flex items-center gap-1 border ${n==="admin"?"bg-indigo-500/20 text-indigo-300 border-indigo-500/40 font-bold":"bg-indigo-500/10 hover:bg-indigo-500/20 text-indigo-400 border-indigo-500/30"}`,title:"Admin-Zentrale",children:[l.jsx(ru,{className:"w-3.5 h-3.5"})," Admin"]}),l.jsx("div",{className:"h-4 w-px bg-grid mx-1"}),l.jsx("button",{onClick:o,className:"h-8 w-8 rounded-sm text-muted hover:text-red-500 hover:bg-red-500/10 border border-transparent hover:border-red-500/20 transition flex items-center justify-center",title:"Abmelden",children:l.jsx(_p,{className:"w-3.5 h-3.5"})})]}):l.jsxs("button",{onClick:a,style:{backgroundColor:N},className:"h-8 px-3.5 rounded-sm text-xs font-mono font-bold text-white transition hover:brightness-110 flex items-center gap-1.5 shadow-sm",children:[l.jsx(ds,{className:"w-3.5 h-3.5"})," Anmelden"]})]})]}),l.jsxs("div",{className:"flex md:hidden items-center justify-around border-t border-grid py-2 bg-subtle text-xs font-mono",children:[l.jsxs("button",{onClick:()=>r("home"),className:`flex items-center gap-1 px-3 py-1.5 rounded-sm border ${n==="home"?"text-main font-bold bg-surface border-grid":"text-muted border-transparent"}`,children:[l.jsx(tu,{className:"w-3.5 h-3.5"})," Start"]}),l.jsxs("button",{onClick:()=>r("calendar"),className:`flex items-center gap-1 px-3 py-1.5 rounded-sm border ${n==="calendar"?"text-main font-bold bg-surface border-grid":"text-muted border-transparent"}`,children:[l.jsx(eu,{className:"w-3.5 h-3.5"})," Termine"]}),l.jsxs("button",{onClick:()=>r("schedule"),className:`flex items-center gap-1 px-3 py-1.5 rounded-sm border ${n==="schedule"?"text-main font-bold bg-surface border-grid":"text-muted border-transparent"}`,children:[l.jsx(Dp,{className:"w-3.5 h-3.5"})," Schichtplan"]})]})]})}function Ip({event:e,user:t,onSignupClick:n,onCancelClick:r,onRemoveUserFromShift:s,onGenerateClaimLink:i,onExportPdf:o,onPrintView:a,onEditEvent:u,onDeleteEvent:m}){var k,O,f;const[h,v]=lr.useState(()=>localStorage.getItem("guest_display_name")||"");if(lr.useEffect(()=>{const c=()=>v(localStorage.getItem("guest_display_name")||"");return window.addEventListener("guest_name_updated",c),window.addEventListener("storage",c),()=>{window.removeEventListener("guest_name_updated",c),window.removeEventListener("storage",c)}},[]),!e||!e.task_areas||e.task_areas.length===0)return l.jsxs("div",{className:"hallmark-panel rounded-sm p-12 text-center border border-grid font-mono",children:[l.jsx(Sr,{className:"w-8 h-8 text-muted mx-auto mb-3"}),l.jsx("h3",{className:"font-serif text-xl font-bold text-main uppercase",children:"Keine Aufgabenfelder vorhanden"}),l.jsx("p",{className:"text-xs text-muted mt-1 mb-4",children:"[ Event hat noch keine definierten Aufgabenfelder oder Schichten ]"}),t&&(t.is_admin_user||t.is_staff||t.is_superuser||(e==null?void 0:e.created_by)===t.id||((k=e==null?void 0:e.created_by)==null?void 0:k.id)===t.id||(e==null?void 0:e.co_managers)&&e.co_managers.some(c=>typeof c=="object"?c.id===t.id:c===t.id))&&u&&l.jsxs("button",{onClick:()=>u(e),className:"px-4 py-2 rounded-sm bg-indigo-500/10 hover:bg-indigo-500/20 text-indigo-400 border border-indigo-500/30 font-bold text-xs inline-flex items-center gap-2",children:[l.jsx(jr,{className:"w-4 h-4"})," SCHICHTEN & BEREICHE ANLEGEN"]})]});const x=!t,S=t&&(e==null?void 0:e.co_managers)&&e.co_managers.some(c=>typeof c=="object"?c.id===t.id:c===t.id),N=t&&(t.is_admin_user||t.is_staff||t.is_superuser||(e==null?void 0:e.created_by)===t.id||((O=e==null?void 0:e.created_by)==null?void 0:O.id)===t.id||S);return l.jsxs("div",{className:"space-y-6",children:[l.jsxs("div",{className:"hallmark-panel rounded-sm p-6 sm:p-8 border border-grid flex flex-col md:flex-row md:items-center justify-between gap-4",children:[l.jsxs("div",{className:"space-y-1 font-mono",children:[l.jsxs("div",{className:"flex flex-wrap items-center gap-2 text-xs text-muted mb-1",children:[l.jsxs("span",{className:"bg-subtle px-2.5 py-0.5 rounded-sm border border-grid font-bold text-main",children:[new Date(e.start_date).toLocaleDateString("de-DE")," — ",new Date(e.end_date).toLocaleDateString("de-DE")]}),e.location&&l.jsxs("span",{className:"flex items-center gap-1 text-muted",children:[l.jsx(So,{className:"w-3.5 h-3.5 shrink-0"}),e.location]}),e.is_active===!1&&l.jsx("span",{className:"px-2 py-0.5 rounded-sm bg-amber-500/10 text-amber-500 border border-amber-500/20 font-bold",children:"[ DEAKTIVIERT ]"})]}),l.jsx("h2",{className:"font-serif text-3xl sm:text-4xl font-bold uppercase tracking-tight text-main",children:e.title}),e.description&&l.jsx("p",{className:"text-xs font-sans text-muted max-w-2xl mt-1",children:e.description})]}),l.jsxs("div",{className:"flex items-center gap-2 no-print font-mono text-xs shrink-0",children:[N&&u&&l.jsxs("button",{onClick:()=>u(e),className:"px-3.5 py-1.5 rounded-sm bg-indigo-500/10 hover:bg-indigo-500/20 text-indigo-400 border border-indigo-500/30 transition flex items-center gap-1.5 font-bold",title:"Schichten und Aufgabenbereiche für diese Veranstaltung bearbeiten",children:[l.jsx(jr,{className:"w-3.5 h-3.5"})," SCHICHTEN BEARBEITEN"]}),t&&(t.is_admin_user||t.is_staff||t.is_superuser||(e==null?void 0:e.created_by)===t.id||((f=e==null?void 0:e.created_by)==null?void 0:f.id)===t.id)&&m&&l.jsxs("button",{onClick:()=>m(e),className:"px-3.5 py-1.5 rounded-sm bg-red-500/10 hover:bg-red-500/20 text-red-400 border border-red-500/30 transition flex items-center gap-1.5 font-bold",title:"Diese Veranstaltung unwiderruflich löschen",children:[l.jsx(Ue,{className:"w-3.5 h-3.5"})," LÖSCHEN"]}),l.jsxs("button",{onClick:a,className:"px-3.5 py-1.5 rounded-sm bg-surface hover:bg-surface-hover text-main border border-grid transition flex items-center gap-1.5 font-bold",children:[l.jsx(Pp,{className:"w-3.5 h-3.5"})," DRUCKEN"]}),l.jsxs("button",{onClick:o,className:"px-3.5 py-1.5 rounded-sm bg-surface hover:bg-surface-hover text-main border border-grid transition flex items-center gap-1.5 font-bold",children:[l.jsx(Sp,{className:"w-3.5 h-3.5"})," PDF"]})]})]}),x&&l.jsxs("div",{className:"p-3.5 rounded-sm bg-amber-500/10 border border-amber-500/20 text-amber-500 text-xs font-mono flex items-center gap-2",children:[l.jsx(jd,{className:"w-4 h-4 shrink-0 text-amber-500"}),l.jsxs("span",{children:["[ GAST-DATENSCHUTZ ]: Belegungszahlen sichtbar, Namensanzeige aus Datenschutzgründen ",l.jsx("strong",{children:"anonymisiert"}),"."]})]}),l.jsx("div",{className:"hallmark-panel rounded-sm border border-grid overflow-hidden",children:l.jsx("div",{className:"overflow-x-auto",children:l.jsxs("table",{className:"w-full text-left border-collapse",children:[l.jsx("thead",{children:l.jsxs("tr",{className:"bg-subtle border-b border-grid text-[11px] font-mono text-muted uppercase tracking-wider",children:[l.jsx("th",{className:"py-3.5 px-4 w-1/4",children:"Aufgabenfeld"}),l.jsx("th",{className:"py-3.5 px-4 w-1/4",children:"Schicht & Zeitraum"}),l.jsx("th",{className:"py-3.5 px-4 w-1/6",children:"Qualifikation"}),l.jsx("th",{className:"py-3.5 px-4 w-1/4",children:"Belegung & Personen"}),l.jsx("th",{className:"py-3.5 px-4 w-1/6 text-right",children:"Aktion"})]})}),l.jsx("tbody",{className:"divide-y divide-grid text-xs font-sans",children:e.task_areas.map(c=>!c.shifts||c.shifts.length===0?l.jsxs("tr",{children:[l.jsx("td",{className:"py-3.5 px-4 font-serif text-lg font-bold text-main uppercase",children:c.name}),l.jsx("td",{colSpan:4,className:"py-3.5 px-4 text-muted font-mono text-[11px]",children:"[ Keine Schichten angelegt ]"})]},`area-${c.id}`):c.shifts.map((d,y)=>{const j=y===0,b=d.is_full,P=!!(t?d.signups.find(M=>!M.is_guest&&M.display_name===t.display_name):null),B=d.required_skills&&d.required_skills.length>0;return l.jsxs("tr",{className:"hover:bg-surface-hover/60 transition",children:[j?l.jsxs("td",{rowSpan:c.shifts.length,className:"py-3.5 px-4 font-serif text-lg font-bold text-main uppercase bg-subtle/80 align-top border-r border-grid",children:[l.jsx("div",{children:c.name}),c.description&&l.jsx("div",{className:"text-[11px] font-sans font-normal text-muted mt-0.5",children:c.description})]}):null,l.jsxs("td",{className:"py-3.5 px-4",children:[l.jsxs("div",{className:"font-semibold text-main flex items-center gap-2 flex-wrap",children:[l.jsx("span",{children:d.title}),d.date&&l.jsxs("span",{className:"text-[10px] font-mono font-bold text-indigo-400 bg-indigo-500/10 px-2 py-0.5 rounded-sm border border-indigo-500/20",children:["📅 ",new Date(d.date+"T00:00:00").toLocaleDateString("de-DE",{weekday:"short",day:"2-digit",month:"2-digit"})]})]}),l.jsxs("div",{className:"text-[11px] font-mono text-muted flex items-center gap-1 mt-0.5",children:[l.jsx(Sr,{className:"w-3 h-3 text-muted shrink-0"}),l.jsxs("span",{children:[d.start_time," — ",d.end_time," Uhr"]})]})]}),l.jsx("td",{className:"py-3.5 px-4 font-mono",children:B?l.jsx("div",{className:"flex flex-wrap gap-1",children:d.required_skills.map(M=>l.jsxs("span",{style:{backgroundColor:`${M.color}15`,borderColor:`${M.color}35`,color:M.color},className:"px-2 py-0.5 rounded-sm text-[10px] font-semibold border flex items-center gap-1",children:[l.jsx(wp,{className:"w-3 h-3 shrink-0"})," ",M.name]},M.id))}):l.jsx("span",{className:"text-[11px] text-muted",children:"—"})}),l.jsxs("td",{className:"py-3.5 px-4 font-mono",children:[l.jsx("div",{className:"flex items-center gap-2",children:l.jsxs("span",{className:`px-2 py-0.5 rounded-sm text-[11px] font-bold border ${b?"bg-red-500/10 text-red-500 border-red-500/20":"bg-emerald-500/10 text-emerald-500 border-emerald-500/20"}`,children:["[ ",d.signups_count," / ",d.max_participants," BELEGT ]"]})}),l.jsx("div",{className:"mt-2 space-y-1 font-sans",children:d.signups.map(M=>{var G;const q=x&&M.is_guest&&h&&((G=M.display_name)==null?void 0:G.trim().toLowerCase())===h.trim().toLowerCase();return l.jsxs("div",{className:`text-[11px] text-muted flex items-center justify-between gap-2 p-1.5 rounded-sm border ${q?"bg-amber-500/10 border-amber-500/30":"bg-subtle border-grid"}`,children:[l.jsxs("div",{className:"flex items-center gap-1.5 truncate",children:[l.jsx(jo,{className:`w-3 h-3 shrink-0 ${q?"text-amber-400":"text-muted"}`}),l.jsx("span",{className:`truncate ${q?"font-bold text-amber-300":""}`,children:M.display_name}),M.is_guest&&l.jsx("span",{className:"text-[9px] font-mono text-amber-500 px-1 rounded-sm bg-amber-500/10 border border-amber-500/20 font-bold",children:"GAST"}),q&&l.jsx("span",{className:"text-[9px] font-mono text-emerald-400 px-1 rounded-sm bg-emerald-500/10 border border-emerald-500/20 font-bold",children:"DU"})]}),l.jsxs("div",{className:"flex items-center gap-1 shrink-0",children:[t&&M.is_guest&&i&&l.jsxs("button",{onClick:()=>i(M),className:"text-indigo-400 hover:text-indigo-300 transition p-1 rounded-sm bg-indigo-500/10 hover:bg-indigo-500/20 border border-indigo-500/20 flex items-center gap-1 text-[10px] font-mono font-bold",title:"Konto-Einladungslink für diese Gast-Eintragung kopieren",children:[l.jsx(Rp,{className:"w-3 h-3"})," LINK"]}),N&&s&&l.jsx("button",{onClick:()=>s(d,M.id),className:"text-muted hover:text-red-500 transition p-1 rounded-sm hover:bg-red-500/10",title:"Person aus dieser Schicht entfernen",children:l.jsx(su,{className:"w-3.5 h-3.5"})})]})]},M.id)})})]}),l.jsx("td",{className:"py-3.5 px-4 text-right font-mono",children:P?l.jsxs("button",{onClick:()=>r(d),className:"px-3 py-1.5 rounded-sm text-xs font-semibold bg-red-500/10 hover:bg-red-500/20 text-red-500 border border-red-500/20 transition flex items-center gap-1 ml-auto",children:[l.jsx(su,{className:"w-3.5 h-3.5"})," AUSTRAGEN"]}):b?l.jsx("span",{className:"text-xs text-muted font-bold",children:"[ VOLL ]"}):l.jsxs("button",{onClick:()=>n(d),style:{backgroundColor:"var(--brand-primary)"},className:"px-3.5 py-1.5 rounded-sm text-xs font-bold text-white transition hover:brightness-110 flex items-center gap-1 ml-auto shadow-sm",children:[l.jsx(ut,{className:"w-3.5 h-3.5"})," EINTRAGEN"]})})]},`shift-${d.id}`)}))})]})})})]})}function $p({shift:e,onClose:t,onSubmit:n}){const[r,s]=w.useState(""),[i,o]=w.useState(()=>sessionStorage.getItem("guest_captcha_verified")==="true"),[a,u]=w.useState(()=>sessionStorage.getItem("guest_captcha_verified")==="true"?"acaptcha-session-verified":""),[m,h]=w.useState(()=>sessionStorage.getItem("guest_captcha_verified")==="true"),[v,x]=w.useState(""),[S,N]=w.useState(!1),k=w.useRef(null);w.useEffect(()=>{const f=localStorage.getItem("guest_display_name")||"";f&&s(f)},[]),w.useEffect(()=>{if(i)return;const f=k.current;if(!f)return;const c=y=>{var b;if(((b=y==null?void 0:y.detail)==null?void 0:b.verified)||f.isValid&&f.isValid()){sessionStorage.setItem("guest_captcha_verified","true"),o(!0),h(!0);const T="acaptcha-verified-"+Math.random().toString(36).substring(2,10);u(T)}},d=()=>{h(!1),u("")};return f.addEventListener("verified",c),f.addEventListener("statuschange",c),f.addEventListener("reset",d),f.isValid&&f.isValid()&&c({detail:{verified:!0}}),()=>{f.removeEventListener("verified",c),f.removeEventListener("statuschange",c),f.removeEventListener("reset",d)}},[i]);const O=async f=>{if(f.preventDefault(),x(""),!r.trim()){x("Bitte gib deinen Namen ein.");return}if(!(i||m)){x("Bitte löse zuerst das Captcha.");return}const d=a||"acaptcha-session-verified";localStorage.setItem("guest_display_name",r.trim()),window.dispatchEvent(new Event("guest_name_updated")),N(!0);try{await n({guest_name:r.trim(),captcha_token:d}),t()}catch(y){x(y.message||"Eintragen fehlgeschlagen.")}finally{N(!1)}};return l.jsx("div",{className:"fixed inset-0 z-50 flex items-center justify-center p-4 bg-slate-950/80 backdrop-blur-sm",children:l.jsxs("div",{className:"glass-panel w-full max-w-md rounded-2xl border border-slate-800 p-6 shadow-2xl relative animate-in fade-in zoom-in-95 duration-200",children:[l.jsx("button",{onClick:t,className:"absolute top-4 right-4 p-2 text-slate-400 hover:text-white rounded-lg transition",children:l.jsx(Ed,{className:"w-5 h-5"})}),l.jsxs("div",{className:"flex items-center gap-3 mb-4",children:[l.jsx("div",{className:"w-10 h-10 rounded-xl bg-blue-500/10 text-blue-400 border border-blue-500/20 flex items-center justify-center",children:l.jsx(jo,{className:"w-5 h-5"})}),l.jsxs("div",{children:[l.jsx("h3",{className:"font-bold text-lg text-white",children:"Als Gast eintragen"}),l.jsxs("p",{className:"text-xs text-slate-400",children:["Schicht: ",e==null?void 0:e.title," (",e==null?void 0:e.start_time," - ",e==null?void 0:e.end_time,")"]})]})]}),v&&l.jsxs("div",{className:"mb-4 p-3 rounded-xl bg-red-500/10 border border-red-500/20 text-red-400 text-xs flex items-center gap-2",children:[l.jsx(Mn,{className:"w-4 h-4 shrink-0"}),l.jsx("span",{children:v})]}),l.jsxs("form",{onSubmit:O,className:"space-y-4",children:[l.jsxs("div",{children:[l.jsx("label",{className:"block text-xs font-semibold text-slate-300 mb-1",children:"Dein Name / Anzeigename"}),l.jsx("input",{type:"text",required:!0,value:r,onChange:f=>s(f.target.value),placeholder:"z. B. Alex Muster",className:"w-full px-3.5 py-2.5 rounded-xl bg-slate-900 border border-slate-800 text-white text-sm focus:outline-none focus:border-blue-500 transition"}),l.jsx("p",{className:"text-[11px] text-slate-500 mt-1",children:"Dein Name bleibt in deiner aktuellen Sitzung gespeichert. Falls du später ein Konto mit diesem Namen erstellst, werden deine Gast-Schichten automatisch übernommen!"})]}),i?l.jsxs("div",{className:"p-3.5 rounded-xl bg-emerald-500/10 border border-emerald-500/20 text-emerald-400 text-xs flex items-center justify-between font-mono",children:[l.jsxs("span",{className:"flex items-center gap-2 font-semibold",children:[l.jsx(ut,{className:"w-4 h-4 text-emerald-400 shrink-0"})," Security Check verifiziert"]}),l.jsx("span",{className:"text-[10px] text-emerald-400/80",children:"[ In dieser Sitzung aktiv ]"})]}):l.jsxs("div",{className:"p-4 rounded-xl bg-slate-900/90 border border-slate-800 space-y-3",children:[l.jsxs("div",{className:"flex items-center justify-between",children:[l.jsxs("span",{className:"text-xs font-semibold text-slate-300 flex items-center gap-1.5 font-mono",children:[l.jsx(Mp,{className:"w-4 h-4 text-emerald-400"})," Security Check (aCAPTCHA)"]}),l.jsx("a",{href:"https://acaptcha.vercel.app/",target:"_blank",rel:"noreferrer",className:"text-[10px] text-blue-400 hover:underline font-mono",children:"aCAPTCHA v1.1"})]}),l.jsxs("div",{className:"border border-slate-700 rounded-lg p-3 bg-slate-950/80 flex flex-col items-center justify-center min-h-[100px]",children:[l.jsx("captcha-element",{ref:k,status:"null","sound-enabled":"true","dark-mode":"dark",type:"both",difficulty:"adaptive"}),m&&l.jsxs("div",{className:"mt-2 text-xs font-medium text-emerald-400 flex items-center gap-1 font-mono",children:[l.jsx(ut,{className:"w-4 h-4"})," Captcha verifiziert!"]})]})]}),l.jsxs("div",{className:"pt-2 flex justify-end gap-2",children:[l.jsx("button",{type:"button",onClick:t,className:"px-4 py-2 rounded-xl text-xs font-semibold text-slate-400 hover:bg-slate-800 transition",children:"Abbrechen"}),l.jsx("button",{type:"submit",disabled:S,className:"px-5 py-2 rounded-xl text-xs font-bold bg-blue-600 hover:bg-blue-500 text-white transition shadow-lg shadow-blue-600/30 disabled:opacity-50",children:S?"Eintragen...":"Jetzt eintragen"})]})]})]})})}const Vp="/api",Ei=()=>localStorage.getItem("auth_token"),bn=e=>{e?localStorage.setItem("auth_token",e):localStorage.removeItem("auth_token")},V=async(e,t={})=>{const n=Ei(),r={"Content-Type":"application/json",...n?{Authorization:`Token ${n}`}:{},...t.headers},s=await fetch(`${Vp}${e}`,{...t,headers:r}),i=s.headers.get("content-type");let o=null;if(i&&i.includes("application/json")&&(o=await s.json()),!s.ok){s.status===401&&bn(null);let a="Ein Fehler ist aufgetreten.";throw o&&(typeof o.error=="string"?a=o.error:typeof o.detail=="string"?a=o.detail:o.email?a=Array.isArray(o.email)?o.email[0]:o.email:o.username?a=Array.isArray(o.username)?o.username[0]:o.username:o.non_field_errors&&(a=o.non_field_errors[0])),new Error(a)}return o},lu=["#E05A47","#3B82F6","#10B981","#8B5CF6","#F59E0B","#EC4899","#06B6D4","#6366F1","#14B8A6","#F97316","#D97706","#059669","#7C3AED","#DB2777","#2563EB"],iu=()=>lu[Math.floor(Math.random()*lu.length)];function Fp({onClose:e,onSuccess:t,claimToken:n,prefilledGuestName:r}){const[s,i]=w.useState(!!(n||r)),[o,a]=w.useState(""),[u,m]=w.useState(""),[h,v]=w.useState(""),[x,S]=w.useState(r||""),[N,k]=w.useState(null),[O,f]=w.useState(""),[c,d]=w.useState(!1);w.useEffect(()=>{y()},[]);const y=async()=>{try{const b=await V("/users/restriction-setting/");k(b)}catch{}},j=async b=>{b.preventDefault(),f(""),d(!0);try{if(s){const T={username:o,email:u,password:h,display_name:x||o};n&&(T.claim_token=n);const P=await V("/users/register/",{method:"POST",body:JSON.stringify(T)});if(P.requires_verification||P.requires_approval||!P.token){t(null,P.message||"Konto erfolgreich registriert! Bitte schau in deine E-Mail zur Bestätigung oder warte auf die Admin-Freischaltung."),e();return}bn(P.token),t(P.user,P.message)}else{const T=await V("/users/login/",{method:"POST",body:JSON.stringify({username:o,password:h})});bn(T.token),t(T.user,"Erfolgreich angemeldet!")}e()}catch(T){f(T.message||"Authentifizierung fehlgeschlagen.")}finally{d(!1)}};return l.jsx("div",{className:"fixed inset-0 z-50 flex items-center justify-center p-4 bg-black/60 backdrop-blur-sm",children:l.jsxs("div",{className:"hallmark-panel w-full max-w-md rounded-sm border border-grid p-6 shadow-2xl relative animate-in fade-in zoom-in-95 duration-200",children:[l.jsx("button",{onClick:e,className:"absolute top-4 right-4 p-2 text-muted hover:text-main rounded-sm transition",children:l.jsx(Ed,{className:"w-5 h-5"})}),l.jsxs("div",{className:"flex items-center gap-3 mb-6",children:[l.jsx("div",{className:"w-10 h-10 rounded-sm bg-blue-500/10 text-blue-500 border border-blue-500/20 flex items-center justify-center",children:l.jsx(ds,{className:"w-5 h-5"})}),l.jsxs("div",{children:[l.jsx("h3",{className:"font-serif font-bold text-lg text-main",children:s?"Konto erstellen":"Anmelden"}),l.jsx("p",{className:"text-xs text-muted font-sans",children:s?"Erstelle einen Account für volle Funktionen & Schichteinsicht":"Melde dich an, um Events zu verwalten"})]})]}),r&&l.jsxs("div",{className:"mb-4 p-3 rounded-sm bg-amber-500/10 border border-amber-500/20 text-amber-500 text-xs flex items-center gap-2 font-mono",children:[l.jsx(bd,{className:"w-4 h-4 shrink-0 text-amber-500"}),l.jsxs("span",{children:["Einladung für Gast: ",l.jsx("strong",{children:r}),". Die Schicht wird deinem neuen Konto zugewiesen!"]})]}),(N==null?void 0:N.is_restriction_enabled)&&s&&l.jsxs("div",{className:"mb-4 p-3 rounded-sm bg-indigo-500/10 border border-indigo-500/20 text-indigo-400 text-xs flex items-center gap-2 font-mono",children:[l.jsx(zp,{className:"w-4 h-4 shrink-0 text-indigo-400"}),l.jsxs("span",{children:["Registrierungen beschränkt auf: ",l.jsx("strong",{children:N.active_domains.join(", ")})]})]}),O&&l.jsxs("div",{className:"mb-4 p-3 rounded-sm bg-red-500/10 border border-red-500/20 text-red-500 text-xs flex items-center gap-2 font-mono",children:[l.jsx(Mn,{className:"w-4 h-4 shrink-0"}),l.jsx("span",{children:O})]}),!s&&!1,l.jsxs("form",{onSubmit:j,className:"space-y-4 font-sans",children:[l.jsxs("div",{children:[l.jsx("label",{className:"block text-xs font-semibold text-main mb-1 font-mono",children:"Benutzername"}),l.jsxs("div",{className:"relative",children:[l.jsx(ds,{className:"w-4 h-4 absolute left-3 top-3 text-muted"}),l.jsx("input",{type:"text",required:!0,value:o,onChange:b=>a(b.target.value),placeholder:"z. B. max_muster",className:"w-full pl-9 pr-3.5 py-2 rounded-sm input-field text-sm font-mono"})]})]}),s&&l.jsxs(l.Fragment,{children:[l.jsxs("div",{children:[l.jsx("label",{className:"block text-xs font-semibold text-main mb-1 font-mono",children:"E-Mail-Adresse"}),l.jsxs("div",{className:"relative",children:[l.jsx(_i,{className:"w-4 h-4 absolute left-3 top-3 text-muted"}),l.jsx("input",{type:"email",required:!0,value:u,onChange:b=>m(b.target.value),placeholder:"max@beispiel.de",className:"w-full pl-9 pr-3.5 py-2 rounded-sm input-field text-sm font-mono"})]})]}),l.jsxs("div",{children:[l.jsx("label",{className:"block text-xs font-semibold text-main mb-1 font-mono",children:"Anzeigename (für Schichtlisten)"}),l.jsxs("div",{className:"relative",children:[l.jsx(ds,{className:"w-4 h-4 absolute left-3 top-3 text-muted"}),l.jsx("input",{type:"text",value:x,onChange:b=>S(b.target.value),placeholder:"z. B. Max M.",className:"w-full pl-9 pr-3.5 py-2 rounded-sm input-field text-sm font-mono"})]})]})]}),l.jsxs("div",{children:[l.jsx("label",{className:"block text-xs font-semibold text-main mb-1 font-mono",children:"Passwort"}),l.jsxs("div",{className:"relative",children:[l.jsx(bp,{className:"w-4 h-4 absolute left-3 top-3 text-muted"}),l.jsx("input",{type:"password",required:!0,value:h,onChange:b=>v(b.target.value),placeholder:"••••••••",className:"w-full pl-9 pr-3.5 py-2 rounded-sm input-field text-sm font-mono"})]})]}),l.jsx("button",{type:"submit",disabled:c,style:{backgroundColor:"var(--brand-primary)"},className:"w-full py-2.5 rounded-sm text-xs font-mono font-bold text-white transition hover:brightness-110 shadow-sm",children:c?"Verarbeite...":s?"Registrieren":"Anmelden"})]}),l.jsx("div",{className:"mt-4 pt-4 border-t border-grid text-center",children:l.jsx("button",{type:"button",onClick:()=>{i(!s),f("")},className:"text-xs font-mono text-muted hover:text-main transition",children:s?"Bereits ein Konto? Hier anmelden":"Noch kein Konto? Jetzt registrieren"})})]})})}function Bp({events:e,user:t,onSelectEvent:n,onOpenCreateEvent:r,onToggleEventActive:s,onEditEvent:i,onDeleteEvent:o,branding:a}){const[u,m]=w.useState(""),[h,v]=w.useState("all"),x=new Date().toISOString().split("T")[0],S=e.filter(d=>d.title.toLowerCase().includes(u.toLowerCase())||d.description&&d.description.toLowerCase().includes(u.toLowerCase())||d.location&&d.location.toLowerCase().includes(u.toLowerCase())?h==="upcoming"?d.end_date>=x:!0:!1),N=(a==null?void 0:a.primary_color)||"var(--brand-primary)",k=(a==null?void 0:a.show_community_info_box)??!0,O=(a==null?void 0:a.show_support_box)??!0,f=k||O,c=t&&(t.is_admin_user||t.is_staff||t.is_superuser);return l.jsxs("div",{className:"space-y-8 animate-in fade-in duration-200",children:[l.jsxs("div",{className:"hallmark-panel rounded-sm p-6 sm:p-10 space-y-6 max-w-5xl mx-auto relative border border-grid",children:[l.jsxs("div",{className:"space-y-2 border-b border-grid pb-6",children:[l.jsxs("div",{className:"flex items-center gap-2",children:[l.jsx("span",{className:"font-mono text-[10px] uppercase tracking-widest text-muted border border-grid px-2.5 py-1 rounded-sm inline-block",children:(a==null?void 0:a.app_name)||"SCHICHT- & EVENTPORTAL"}),(a==null?void 0:a.custom_banner_text)&&l.jsxs("span",{className:"font-mono text-[10px] uppercase tracking-widest text-amber-500 bg-amber-500/10 border border-amber-500/20 px-2.5 py-1 rounded-sm inline-block font-bold",children:["📢 ",a.custom_banner_text]})]}),l.jsx("h2",{className:"font-serif text-3xl sm:text-5xl font-bold uppercase tracking-tight text-main leading-tight",children:"Veranstaltungen & Schichtkoordination"}),l.jsx("p",{className:"font-sans text-xs sm:text-sm text-muted max-w-2xl",children:"Hier findest du aktuelle Termine, Arbeitsgruppen, Bar- & Tresendienste und Schichtpläne der Initiative."})]}),l.jsxs("div",{className:"flex flex-col sm:flex-row items-stretch sm:items-center justify-between gap-3",children:[l.jsxs("div",{className:"relative flex-1",children:[l.jsx(Sd,{className:"w-4 h-4 absolute left-3.5 top-3 text-muted"}),l.jsx("input",{type:"text",value:u,onChange:d=>m(d.target.value),placeholder:"Veranstaltung, Ort oder Suchbegriff...",className:"w-full pl-10 pr-16 py-2 rounded-sm bg-subtle border border-grid text-main text-xs font-mono focus:outline-none focus:border-muted"}),u&&l.jsx("button",{onClick:()=>m(""),className:"absolute right-3 top-2.5 text-[10px] font-mono text-muted hover:text-main",children:"[ CLEAR ]"})]}),l.jsxs("div",{className:"flex items-center gap-1.5 font-mono text-xs shrink-0",children:[l.jsxs("button",{onClick:()=>v("all"),className:`px-3.5 py-1.5 rounded-sm transition border ${h==="all"?"bg-surface-hover text-main border-grid font-bold shadow-sm":"bg-subtle text-muted border-grid hover:text-main"}`,children:["ALLE PROGRAMME (",e.length,")"]}),l.jsxs("button",{onClick:()=>v("upcoming"),className:`px-3.5 py-1.5 rounded-sm transition border ${h==="upcoming"?"bg-surface-hover text-main border-grid font-bold shadow-sm":"bg-subtle text-muted border-grid hover:text-main"}`,children:["ANSTEHEND (",e.filter(d=>d.end_date>=x).length,")"]})]})]})]}),l.jsxs("div",{className:"max-w-5xl mx-auto grid grid-cols-1 lg:grid-cols-4 gap-6",children:[l.jsxs("div",{className:`${f?"lg:col-span-3":"lg:col-span-4"} space-y-4`,children:[l.jsxs("div",{className:"flex items-center justify-between border-b border-grid pb-3 font-mono",children:[l.jsxs("h3",{className:"font-serif text-xl font-bold uppercase tracking-wide text-main flex items-center gap-2",children:[l.jsx(Pr,{className:"w-4.5 h-4.5 text-muted"})," Termine & Schichten"]}),t&&l.jsxs("button",{onClick:r,style:{backgroundColor:N},className:"px-3.5 py-1.5 rounded-sm text-xs font-mono font-bold text-white transition flex items-center gap-1 hover:brightness-110 shadow-sm",children:[l.jsx(at,{className:"w-3.5 h-3.5"})," EVENT ANLEGEN"]})]}),S.length===0?l.jsx("div",{className:"hallmark-panel rounded-sm p-12 text-center text-xs font-mono text-muted border border-grid",children:u?`[ Keinen Eintrag für "${u}" gefunden ]`:"[ Keine Veranstaltungen vorhanden ]"}):l.jsx("div",{className:`grid grid-cols-1 sm:grid-cols-2 ${f?"":"lg:grid-cols-3"} gap-4`,children:S.map(d=>{var B,M,q,G;const y=((B=d.task_areas)==null?void 0:B.length)||0,j=((M=d.task_areas)==null?void 0:M.reduce((Y,ge)=>{var Se;return Y+(((Se=ge.shifts)==null?void 0:Se.length)||0)},0))||0,b=t&&d.co_managers&&d.co_managers.some(Y=>typeof Y=="object"?Y.id===t.id:Y===t.id),T=t&&(d.created_by===t.id||((q=d.created_by)==null?void 0:q.id)===t.id||b),P=c||T;return l.jsxs("div",{className:`hallmark-card rounded-sm p-5 border transition flex flex-col justify-between space-y-4 group overflow-hidden ${d.is_active===!1?"border-amber-500/40 opacity-80 bg-subtle":"border-grid"}`,children:[l.jsxs("div",{className:"space-y-3",children:[l.jsxs("div",{className:"flex items-center justify-between text-[11px] font-mono text-muted gap-2",children:[l.jsxs("span",{className:"flex items-center gap-1 bg-subtle px-2 py-0.5 rounded-sm border border-grid font-bold shrink-0",children:[l.jsx(Sr,{className:"w-3 h-3 text-muted"}),new Date(d.start_date).toLocaleDateString("de-DE")]}),d.is_active===!1?l.jsx("span",{className:"text-amber-500 font-bold px-1.5 py-0.5 rounded-sm bg-amber-500/10 border border-amber-500/20 shrink-0",children:"[ DEAKTIVIERT ]"}):d.location?l.jsxs("span",{className:"flex items-center gap-1 text-muted truncate max-w-[130px]",children:[l.jsx(So,{className:"w-3 h-3 shrink-0"}),l.jsx("span",{className:"truncate",children:d.location})]}):null]}),l.jsx("h4",{className:"font-serif text-lg font-bold uppercase text-main group-hover:text-amber-500 transition line-clamp-2",children:d.title}),d.description&&l.jsx("p",{className:"text-xs text-muted font-sans line-clamp-2",children:d.description}),l.jsxs("div",{className:"text-[10px] font-mono text-muted flex items-center gap-1.5 pt-1",children:[l.jsxs("span",{children:[y," Bereiche"]}),l.jsx("span",{children:"/"}),l.jsxs("span",{children:[j," Schichten"]})]})]}),l.jsx("div",{className:"pt-3 border-t border-grid space-y-2 font-mono",children:l.jsxs("div",{className:"flex flex-wrap items-center gap-1.5",children:[l.jsxs("button",{onClick:()=>n(d.id),className:"flex-1 min-w-[110px] py-1.5 px-3 rounded-sm text-xs font-mono font-bold bg-surface hover:bg-surface-hover text-main border border-grid transition flex items-center justify-center gap-1",children:["Schichtplan ",l.jsx(Nd,{className:"w-3.5 h-3.5"})]}),P&&i&&l.jsxs("button",{onClick:()=>i(d),className:"py-1.5 px-2.5 rounded-sm text-[10px] font-mono font-bold bg-indigo-500/10 text-indigo-400 border border-indigo-500/20 hover:bg-indigo-500/20 transition flex items-center gap-1 shrink-0",title:"Veranstaltung & Schichten bearbeiten",children:[l.jsx(jr,{className:"w-3.5 h-3.5"})," BEARBEITEN"]}),P&&s&&l.jsx("button",{onClick:()=>s(d),className:`py-1.5 px-2 rounded-sm text-[10px] font-mono font-bold transition flex items-center gap-1 border shrink-0 ${d.is_active!==!1?"bg-amber-500/10 text-amber-500 border-amber-500/20 hover:bg-amber-500/20":"bg-emerald-500/10 text-emerald-400 border-emerald-500/20 hover:bg-emerald-500/20"}`,title:d.is_active!==!1?"Deaktivieren":"Aktivieren",children:d.is_active!==!1?l.jsx(kd,{className:"w-3.5 h-3.5"}):l.jsx(ut,{className:"w-3.5 h-3.5"})}),(c||t&&(d.created_by===t.id||((G=d.created_by)==null?void 0:G.id)===t.id))&&o&&l.jsx("button",{onClick:()=>o(d),className:"py-1.5 px-2 rounded-sm text-[10px] font-mono font-bold bg-red-500/10 text-red-400 border border-red-500/20 hover:bg-red-500/20 transition flex items-center gap-1 shrink-0",title:"Veranstaltung unwiderruflich löschen",children:l.jsx(Ue,{className:"w-3.5 h-3.5"})})]})})]},d.id)})})]}),f&&l.jsxs("div",{className:"space-y-4 font-mono text-xs",children:[k&&l.jsxs("div",{className:"hallmark-panel rounded-sm p-4 border border-grid space-y-3",children:[l.jsx("h4",{className:"font-serif text-sm font-bold uppercase tracking-wide text-main border-b border-grid pb-2",children:(a==null?void 0:a.community_info_title)||"📌 Verein & Infos"}),l.jsx("div",{className:"space-y-2 text-muted text-[11px] whitespace-pre-line",children:(a==null?void 0:a.community_info_text)||`Initiative e.V. Hausverein -Offene Angebote, DIY-Kultur & engagierte Schichten.`})]}),O&&l.jsxs("div",{className:"hallmark-panel rounded-sm p-4 border border-grid space-y-3",children:[l.jsx("h4",{className:"font-serif text-sm font-bold uppercase tracking-wide text-main border-b border-grid pb-2",children:(a==null?void 0:a.support_box_title)||"❤️ Unterstützen"}),l.jsx("p",{className:"text-[11px] text-muted whitespace-pre-line",children:(a==null?void 0:a.support_box_text)||"Hilf mit als Helfer*in an der Bar, beim Essen kochen oder beim Auf- & Abbau."})]})]})]})]})}function Up({events:e,onSelectEvent:t,branding:n}){const[r,s]=w.useState(new Date),[i,o]=w.useState(null),a=r.getFullYear(),u=r.getMonth(),m=["JANUAR","FEBRUAR","MÄRZ","APRIL","MAI","JUNI","JULI","AUGUST","SEPTEMBER","OKTOBER","NOVEMBER","DEZEMBER"],h=()=>s(new Date(a,u-1,1)),v=()=>s(new Date(a,u+1,1)),x=()=>s(new Date),S=new Date(a,u,1).getDay(),N=S===0?6:S-1,k=new Date(a,u+1,0).getDate(),O=d=>{const y=String(u+1).padStart(2,"0"),j=String(d).padStart(2,"0");return`${a}-${y}-${j}`},f=d=>{const y=O(d);return e.filter(j=>y>=j.start_date&&y<=j.end_date)},c=(n==null?void 0:n.primary_color)||"var(--brand-primary)";return l.jsxs("div",{className:"space-y-6 max-w-5xl mx-auto animate-in fade-in duration-200",children:[l.jsxs("div",{className:"hallmark-panel rounded-sm p-6 sm:p-8 border border-grid flex flex-col sm:flex-row sm:items-center justify-between gap-4 font-mono",children:[l.jsxs("div",{className:"flex items-center gap-3",children:[l.jsx("div",{className:"w-10 h-10 rounded-sm bg-subtle text-main border border-grid flex items-center justify-center font-bold",children:l.jsx(Pr,{className:"w-4 h-4 text-amber-500"})}),l.jsxs("div",{children:[l.jsxs("h2",{className:"font-serif text-3xl sm:text-4xl font-bold uppercase tracking-tight text-main leading-none",children:[m[u]," ",a]}),l.jsx("p",{className:"text-[10px] text-muted uppercase tracking-widest mt-1",children:"— INITIATIVE E.V. TERMIN- & SCHICHTÜBERSICHT —"})]})]}),l.jsxs("div",{className:"flex items-center gap-2",children:[l.jsx("button",{onClick:x,className:"px-3.5 py-1.5 rounded-sm text-xs font-mono font-bold bg-surface hover:bg-surface-hover text-main border border-grid transition",children:"[ HEUTE ]"}),l.jsx("button",{onClick:h,className:"p-1.5 rounded-sm text-muted hover:text-main bg-surface border border-grid transition",title:"Vorheriger Monat",children:l.jsx(Np,{className:"w-4 h-4"})}),l.jsx("button",{onClick:v,className:"p-1.5 rounded-sm text-muted hover:text-main bg-surface border border-grid transition",title:"Nächster Monat",children:l.jsx(kp,{className:"w-4 h-4"})})]})]}),l.jsxs("div",{className:"hallmark-panel rounded-sm border border-grid overflow-hidden",children:[l.jsxs("div",{className:"grid grid-cols-7 bg-subtle border-b border-grid text-center text-xs font-mono text-muted font-bold py-3 uppercase",children:[l.jsx("div",{children:"MO"}),l.jsx("div",{children:"DI"}),l.jsx("div",{children:"MI"}),l.jsx("div",{children:"DO"}),l.jsx("div",{children:"FR"}),l.jsx("div",{children:"SA"}),l.jsx("div",{children:"SO"})]}),l.jsxs("div",{className:"grid grid-cols-7 auto-rows-fr divide-x divide-y divide-grid bg-surface text-xs font-mono",children:[Array.from({length:N}).map((d,y)=>l.jsx("div",{className:"min-h-[100px] sm:min-h-[110px] p-2 bg-subtle/50 text-muted opacity-30"},`offset-${y}`)),Array.from({length:k}).map((d,y)=>{const j=y+1,b=f(j),T=new Date().getFullYear()===a&&new Date().getMonth()===u&&new Date().getDate()===j;return l.jsxs("div",{className:`min-h-[100px] sm:min-h-[110px] p-2 flex flex-col justify-between transition ${T?"bg-surface-hover/80 font-bold":"hover:bg-surface-hover/50"}`,children:[l.jsxs("div",{className:"flex items-center justify-between mb-1",children:[l.jsx("span",{className:`w-5 h-5 rounded-sm flex items-center justify-center font-mono text-xs ${T?"bg-main text-paper font-bold shadow-sm":"text-muted"}`,children:j}),b.length>0&&l.jsxs("span",{className:"text-[9px] font-mono text-muted",children:[b.length," ",b.length===1?"Event":"Events"]})]}),l.jsx("div",{className:"space-y-1.5 overflow-y-auto max-h-[70px] no-scrollbar",children:b.map(P=>{const B=(i==null?void 0:i.id)===P.id;return l.jsx("button",{onClick:()=>o(P),style:{backgroundColor:B?c:`${c}15`,borderColor:`${c}40`,color:B?"#ffffff":c},className:`w-full text-left px-2 py-1 rounded-sm text-[10px] font-mono font-bold border truncate block hover:brightness-110 transition shadow-sm ${P.is_active===!1?"opacity-50 line-through":""}`,children:P.title},`evt-${P.id}`)})})]},`day-${j}`)})]})]}),i&&l.jsxs("div",{className:"hallmark-panel rounded-sm p-6 border border-grid flex flex-col sm:flex-row sm:items-center justify-between gap-4 font-mono animate-in fade-in duration-200",children:[l.jsxs("div",{className:"space-y-2",children:[l.jsxs("div",{className:"flex flex-wrap items-center gap-2 text-xs text-muted",children:[l.jsxs("span",{className:"flex items-center gap-1 bg-subtle px-2 py-0.5 rounded-sm border border-grid font-bold text-main",children:[l.jsx(Sr,{className:"w-3 h-3 text-muted"}),new Date(i.start_date).toLocaleDateString("de-DE")," — ",new Date(i.end_date).toLocaleDateString("de-DE")]}),i.location&&l.jsxs("span",{className:"flex items-center gap-1 text-muted",children:[l.jsx(So,{className:"w-3 h-3"}),i.location]})]}),l.jsx("h3",{className:"font-serif text-2xl font-bold uppercase text-main",children:i.title}),i.description&&l.jsx("p",{className:"text-xs font-sans text-muted max-w-xl",children:i.description})]}),l.jsx("div",{className:"flex items-center gap-2 shrink-0",children:l.jsxs("button",{onClick:()=>t(i.id),style:{backgroundColor:c},className:"px-5 py-2 rounded-sm text-xs font-mono font-bold text-white transition flex items-center gap-1.5 hover:brightness-110 shadow-sm",children:["SCHICHTPLAN ÖFFNEN ",l.jsx(Nd,{className:"w-4 h-4"})]})})]})]})}function Hp({branding:e,onRefreshBranding:t,onRefreshEvents:n,skills:r,onRefreshSkills:s}){const[i,o]=w.useState("users"),[a,u]=w.useState(!0),[m,h]=w.useState(""),[v,x]=w.useState(""),[S,N]=w.useState([]),[k,O]=w.useState(""),[f,c]=w.useState([]),[d,y]=w.useState(!1),[j,b]=w.useState(!1),[T,P]=w.useState(!0),[B,M]=w.useState([]),[q,G]=w.useState(""),[Y,ge]=w.useState([]),[Se,ye]=w.useState([]),[Ce,L]=w.useState(""),[I,g]=w.useState(""),[E,z]=w.useState(iu()),[$,D]=w.useState((e==null?void 0:e.app_name)||"Veranstaltungsschichtplaner"),[H,ae]=w.useState((e==null?void 0:e.logo_url)||""),[tt,Lr]=w.useState((e==null?void 0:e.primary_color)||"#E05A47"),[zr,Xs]=w.useState((e==null?void 0:e.custom_banner_text)||""),[Bt,On]=w.useState((e==null?void 0:e.show_community_info_box)??!0),[Mr,Ut]=w.useState((e==null?void 0:e.community_info_title)||"📌 Verein & Infos"),[Ar,el]=w.useState((e==null?void 0:e.community_info_text)||`Initiative e.V. Hausverein -Offene Angebote, DIY-Kultur & engagierte Schichten.`),[Ht,tl]=w.useState((e==null?void 0:e.show_support_box)??!0),[Dr,C]=w.useState((e==null?void 0:e.support_box_title)||"❤️ Unterstützen"),[R,J]=w.useState((e==null?void 0:e.support_box_text)||"Hilf mit als Helfer*in an der Bar, beim Essen kochen oder beim Auf- & Abbau."),[nt,K]=w.useState(!1),[wt,bo]=w.useState(!1),[_o,Eo]=w.useState("smtp.beispiel.de"),[Co,To]=w.useState(587),[Po,Lo]=w.useState(""),[zo,Mo]=w.useState(""),[Ao,nl]=w.useState(!0),[Do,rl]=w.useState(!1),[Ro,Oo]=w.useState("noreply@schichtplaner.de"),[Io,Cd]=w.useState(""),[sl,Td]=w.useState(!1),[$o,Vo]=w.useState(!1),[Fo,Bo]=w.useState(!1);w.useEffect(()=>{Uo()},[]);const Uo=async()=>{u(!0);try{try{const p=await V("/users/manage-users/");N(p.results||p)}catch{}try{const p=await V("/users/pending/");c(p.results||p)}catch{}try{const p=await V("/users/restriction-setting/");y(p.is_restriction_enabled),b(p.require_admin_approval),P(p.require_email_verification??!0)}catch{}try{const p=await V("/users/domain-rules/");M(p.results||p)}catch{}try{const p=await V("/events/");ge(p.results||p)}catch{}try{const p=await V("/templates/");ye(p.results||p)}catch{}try{const p=await V("/users/smtp-setting/");p&&(bo(p.is_active??!1),Eo(p.host||""),To(p.port||587),Lo(p.username||""),Mo(p.password||""),nl(p.use_tls??!0),rl(p.use_ssl??!1),Oo(p.from_email||""))}catch{}}catch(p){h(p.message||"Laden der Admin-Daten fehlgeschlagen.")}finally{u(!1)}},Te=p=>{x(p),setTimeout(()=>x(""),4e3)},Pd=async p=>{try{const F=await V(`/users/manage-users/${p.id}/`,{method:"PATCH",body:JSON.stringify({is_admin_user:!p.is_admin_user})});N(S.map(Nt=>Nt.id===p.id?F:Nt)),Te(`Admin-Rechte für ${p.username} aktualisiert.`)}catch(F){h(F.message||"Fehler beim Aktualisieren.")}},Ld=async p=>{try{const F=await V(`/users/manage-users/${p.id}/`,{method:"PATCH",body:JSON.stringify({is_approved:!p.is_approved})});N(S.map(Nt=>Nt.id===p.id?F:Nt)),Te(`Freischalt-Status für ${p.username} aktualisiert.`)}catch(F){h(F.message||"Fehler beim Aktualisieren.")}},zd=async p=>{if(window.confirm(`Möchtest du das Benutzerkonto "${p.display_name||p.username}" (@${p.username}) wirklich dauerhaft löschen?`))try{await V(`/users/manage-users/${p.id}/`,{method:"DELETE"}),N(S.filter(F=>F.id!==p.id)),Te(`Benutzerkonto ${p.username} wurde gelöscht.`)}catch(F){h(F.message||"Fehler beim Löschen des Benutzers.")}},Md=async p=>{try{await V(`/users/${p}/approve/`,{method:"POST"}),c(f.filter(F=>F.id!==p)),Uo(),Te("Benutzer erfolgreich freigeschaltet.")}catch(F){h(F.message||"Freischalten fehlgeschlagen.")}},Ad=async p=>{try{await V(`/users/${p}/approve/`,{method:"DELETE"}),c(f.filter(F=>F.id!==p)),Te("Benutzer abgelehnt und gelöscht.")}catch(F){h(F.message||"Ablehnen fehlgeschlagen.")}},ll=async(p,F)=>{try{const il=await V("/users/restriction-setting/",{method:"POST",body:JSON.stringify({is_restriction_enabled:p==="restriction"?F:d,require_admin_approval:p==="approval"?F:j,require_email_verification:p==="email_verify"?F:T})});y(il.is_restriction_enabled),b(il.require_admin_approval),P(il.require_email_verification),Te("Sicherheitseinstellungen aktualisiert.")}catch(Nt){h(Nt.message||"Aktualisierung fehlgeschlagen.")}},Dd=async p=>{if(p.preventDefault(),!!q.trim())try{const F=await V("/users/domain-rules/",{method:"POST",body:JSON.stringify({domain:q})});M([...B,F]),G(""),Te(`Domain-Regel "${F.domain}" hinzugefügt.`)}catch(F){h(F.message||"Fehler beim Hinzufügen.")}},Rd=async p=>{try{await V(`/users/domain-rules/${p}/`,{method:"DELETE"}),M(B.filter(F=>F.id!==p)),Te("Domain-Regel entfernt.")}catch(F){h(F.message||"Fehler beim Löschen.")}},Od=async p=>{if(p.preventDefault(),!!Ce.trim())try{await V("/skills/",{method:"POST",body:JSON.stringify({name:Ce,description:I,color:E})}),L(""),g(""),z(iu()),s(),Te("Qualifikation angelegt.")}catch(F){h(F.message||"Fehler beim Anlegen.")}},Id=async p=>{try{await V(`/skills/${p}/`,{method:"DELETE"}),s(),Te("Qualifikation gelöscht.")}catch(F){h(F.message||"Fehler beim Löschen.")}},$d=async p=>{try{await V(`/templates/${p}/`,{method:"DELETE"}),ye(Se.filter(F=>F.id!==p)),Te("Vorlage gelöscht.")}catch(F){h(F.message||"Fehler beim Löschen.")}},Vd=async p=>{p.preventDefault(),K(!0);try{await V("/branding/",{method:"POST",body:JSON.stringify({app_name:$,logo_url:H,primary_color:tt,custom_banner_text:zr,show_community_info_box:Bt,community_info_title:Mr,community_info_text:Ar,show_support_box:Ht,support_box_title:Dr,support_box_text:R})}),t(),Te("Branding-Einstellungen erfolgreich gespeichert!")}catch(F){h(F.message||"Speichern des Brandings fehlgeschlagen.")}finally{K(!1)}},Fd=async p=>{p.preventDefault(),Vo(!0);try{await V("/users/smtp-setting/",{method:"POST",body:JSON.stringify({is_active:wt,host:_o,port:parseInt(Co)||587,username:Po,password:zo,use_tls:Ao,use_ssl:Do,from_email:Ro})}),Te("✅ SMTP-Einstellungen erfolgreich gespeichert!")}catch(F){h(F.message||"Speichern der SMTP-Einstellungen fehlgeschlagen.")}finally{Vo(!1)}},Bd=async()=>{Bo(!0);try{const p=await V("/users/smtp-setting/test/",{method:"POST",body:JSON.stringify({email:Io})});Te(`✅ ${p.message||"Test-E-Mail erfolgreich gesendet!"}`)}catch(p){h(p.message||"Test-E-Mail fehlgeschlagen.")}finally{Bo(!1)}},Ho=S.filter(p=>p.username.toLowerCase().includes(k.toLowerCase())||p.email.toLowerCase().includes(k.toLowerCase())||p.display_name&&p.display_name.toLowerCase().includes(k.toLowerCase()));return l.jsxs("div",{className:"space-y-6 max-w-5xl mx-auto animate-in fade-in duration-200 font-sans",children:[l.jsx("div",{className:"hallmark-panel rounded-sm p-6 sm:p-8 border border-grid space-y-2",children:l.jsxs("div",{className:"flex items-center gap-3",children:[l.jsx("div",{className:"w-10 h-10 rounded-sm bg-indigo-500/10 text-indigo-500 border border-indigo-500/20 flex items-center justify-center font-bold",children:l.jsx(jd,{className:"w-5 h-5"})}),l.jsxs("div",{children:[l.jsx("h2",{className:"font-serif text-3xl font-bold uppercase tracking-tight text-main",children:"System Administration"}),l.jsx("p",{className:"text-xs text-muted font-mono mt-0.5",children:"Verwaltung von Benutzern, Freischaltungen, Events, Vorlagen, Branding & SMTP-Mailserver"})]})]})}),l.jsx("div",{className:"border-b border-grid pb-2",children:l.jsxs("div",{className:"flex items-center gap-1.5 font-mono text-xs overflow-x-auto no-scrollbar",children:[l.jsxs("button",{onClick:()=>o("users"),className:`px-4 py-2 rounded-sm transition flex items-center gap-2 border ${i==="users"?"bg-surface-hover text-main font-bold border-grid shadow-sm":"bg-subtle text-muted border-transparent hover:text-main"}`,children:[l.jsx(_d,{className:"w-3.5 h-3.5 text-blue-400"})," [ 01: BENUTZER & SICHERHEIT (",S.length,") ]"]}),l.jsxs("button",{onClick:()=>o("events"),className:`px-4 py-2 rounded-sm transition flex items-center gap-2 border ${i==="events"?"bg-surface-hover text-main font-bold border-grid shadow-sm":"bg-subtle text-muted border-transparent hover:text-main"}`,children:[l.jsx(Pr,{className:"w-3.5 h-3.5 text-emerald-400"})," [ 02: VERANSTALTUNGEN (",Y.length,") ]"]}),l.jsxs("button",{onClick:()=>o("templates"),className:`px-4 py-2 rounded-sm transition flex items-center gap-2 border ${i==="templates"?"bg-surface-hover text-main font-bold border-grid shadow-sm":"bg-subtle text-muted border-transparent hover:text-main"}`,children:[l.jsx(Js,{className:"w-3.5 h-3.5 text-amber-400"})," [ 03: VORLAGEN & SKILLS ]"]}),l.jsxs("button",{onClick:()=>o("branding"),className:`px-4 py-2 rounded-sm transition flex items-center gap-2 border ${i==="branding"?"bg-surface-hover text-main font-bold border-grid shadow-sm":"bg-subtle text-muted border-transparent hover:text-main"}`,children:[l.jsx(nu,{className:"w-3.5 h-3.5 text-indigo-400"})," [ 04: BRANDING & SYSTEM ]"]}),l.jsxs("button",{onClick:()=>o("smtp"),className:`px-4 py-2 rounded-sm transition flex items-center gap-2 border ${i==="smtp"?"bg-surface-hover text-main font-bold border-grid shadow-sm":"bg-subtle text-muted border-transparent hover:text-main"}`,children:[l.jsx(_i,{className:"w-3.5 h-3.5 text-purple-400"})," [ 05: E-MAIL & SMTP ]"]})]})}),m&&l.jsxs("div",{className:"p-4 rounded-sm bg-red-500/10 border border-red-500/20 text-red-500 text-xs font-mono flex items-center gap-2",children:[l.jsx(Mn,{className:"w-4 h-4 shrink-0"}),l.jsx("span",{children:m})]}),v&&l.jsxs("div",{className:"p-4 rounded-sm bg-emerald-500/10 border border-emerald-500/20 text-emerald-400 text-xs font-mono flex items-center gap-2",children:[l.jsx(ut,{className:"w-4 h-4 shrink-0"}),l.jsx("span",{children:v})]}),i==="users"&&l.jsxs("div",{className:"space-y-6 animate-in fade-in duration-150 font-mono",children:[f.length>0&&l.jsxs("div",{className:"hallmark-panel rounded-sm p-5 border border-amber-500/40 bg-amber-500/5 space-y-3",children:[l.jsxs("h3",{className:"font-serif text-lg font-bold uppercase text-amber-500 flex items-center gap-2 border-b border-amber-500/20 pb-2",children:["⚠️ Ausstehende Registrierungen (",f.length,")"]}),l.jsx("div",{className:"space-y-2",children:f.map(p=>l.jsxs("div",{className:"p-3 rounded-sm bg-surface border border-grid flex items-center justify-between text-xs",children:[l.jsxs("div",{children:[l.jsxs("div",{className:"font-bold text-main",children:[p.display_name," (@",p.username,")"]}),l.jsx("div",{className:"text-[11px] text-muted",children:p.email})]}),l.jsxs("div",{className:"flex items-center gap-2",children:[l.jsx("button",{onClick:()=>Md(p.id),className:"px-3 py-1 rounded-sm bg-emerald-600 hover:bg-emerald-500 text-white font-bold text-xs",children:"[ FREISCHALTEN ]"}),l.jsx("button",{onClick:()=>Ad(p.id),className:"px-3 py-1 rounded-sm bg-red-600/20 text-red-400 hover:bg-red-600/30 border border-red-600/30 font-bold text-xs",children:"[ ABLEHNEN ]"})]})]},p.id))})]}),l.jsxs("div",{className:"hallmark-panel rounded-sm p-4 border border-grid flex items-center gap-3",children:[l.jsx(Sd,{className:"w-4 h-4 text-muted shrink-0"}),l.jsx("input",{type:"text",value:k,onChange:p=>O(p.target.value),placeholder:"Nutzer suchen nach Name, Username oder E-Mail...",className:"w-full bg-subtle border border-grid px-3 py-1.5 rounded-sm text-xs font-mono text-main focus:outline-none focus:border-muted"}),k&&l.jsx("button",{onClick:()=>O(""),className:"text-xs text-muted hover:text-main font-mono shrink-0",children:"[ CLEAR ]"})]}),l.jsxs("div",{className:"hallmark-panel rounded-sm p-5 border border-grid space-y-4",children:[l.jsxs("h3",{className:"font-serif text-lg font-bold uppercase text-main border-b border-grid pb-2",children:["Benutzerkonten & Rechtestatus (",Ho.length,")"]}),l.jsx("div",{className:"overflow-x-auto",children:l.jsxs("table",{className:"w-full text-left border-collapse text-xs",children:[l.jsx("thead",{children:l.jsxs("tr",{className:"border-b border-grid text-muted uppercase text-[10px]",children:[l.jsx("th",{className:"pb-2 font-bold",children:"Nutzer"}),l.jsx("th",{className:"pb-2 font-bold",children:"E-Mail"}),l.jsx("th",{className:"pb-2 font-bold",children:"Freigeschaltet"}),l.jsx("th",{className:"pb-2 font-bold",children:"E-Mail Bestätigt"}),l.jsx("th",{className:"pb-2 font-bold",children:"Admin-Rolle"}),l.jsx("th",{className:"pb-2 font-bold text-right",children:"Aktionen"})]})}),l.jsx("tbody",{className:"divide-y divide-grid",children:Ho.map(p=>l.jsxs("tr",{className:"hover:bg-subtle/50 transition",children:[l.jsxs("td",{className:"py-2.5 font-bold text-main",children:[p.display_name||p.username,l.jsxs("span",{className:"text-[10px] text-muted font-normal block",children:["@",p.username]})]}),l.jsx("td",{className:"py-2.5 text-muted",children:p.email}),l.jsx("td",{className:"py-2.5",children:l.jsx("span",{className:`px-2 py-0.5 rounded-sm text-[10px] font-bold border ${p.is_approved?"bg-emerald-500/10 text-emerald-400 border-emerald-500/20":"bg-amber-500/10 text-amber-400 border-amber-500/20"}`,children:p.is_approved?"JA":"NEIN"})}),l.jsx("td",{className:"py-2.5",children:l.jsx("span",{className:`px-2 py-0.5 rounded-sm text-[10px] font-bold border ${p.is_email_verified?"bg-emerald-500/10 text-emerald-400 border-emerald-500/20":"bg-subtle text-muted border-grid"}`,children:p.is_email_verified?"VERIFIZIERT":"AUSSTEHEND"})}),l.jsx("td",{className:"py-2.5",children:l.jsx("span",{className:`px-2 py-0.5 rounded-sm text-[10px] font-bold border ${p.is_admin_user||p.is_superuser?"bg-indigo-500/10 text-indigo-400 border-indigo-500/20":"bg-subtle text-muted border-grid"}`,children:p.is_superuser?"SUPERUSER":p.is_admin_user?"ADMIN":"USER"})}),l.jsxs("td",{className:"py-2.5 text-right space-x-1",children:[l.jsx("button",{onClick:()=>Ld(p),className:"px-2 py-1 rounded-sm text-[10px] bg-subtle hover:bg-surface-hover border border-grid text-main transition",children:p.is_approved?"Sperren":"Freischalten"}),l.jsx("button",{onClick:()=>Pd(p),className:"px-2 py-1 rounded-sm text-[10px] bg-subtle hover:bg-surface-hover border border-grid text-indigo-400 transition",children:p.is_admin_user?"Admin entziehen":"Zu Admin machen"}),l.jsxs("button",{onClick:()=>zd(p),className:"px-2 py-1 rounded-sm text-[10px] bg-red-500/10 hover:bg-red-500/20 border border-red-500/20 text-red-400 font-bold transition inline-flex items-center gap-1",title:"Benutzerkonto dauerhaft löschen",children:[l.jsx(Ue,{className:"w-3 h-3"})," Löschen"]})]})]},p.id))})]})})]}),l.jsxs("div",{className:"hallmark-panel rounded-sm p-5 border border-grid space-y-4",children:[l.jsx("h3",{className:"font-serif text-lg font-bold uppercase text-main border-b border-grid pb-2",children:"Sicherheit & Registrierungs-Einschränkungen"}),l.jsxs("div",{className:"grid grid-cols-1 sm:grid-cols-3 gap-4",children:[l.jsxs("div",{className:"p-4 rounded-sm bg-subtle border border-grid space-y-2",children:[l.jsxs("div",{className:"flex items-center justify-between",children:[l.jsx("span",{className:"font-bold text-main",children:"E-Mail Bestätigung (Opt-Out)"}),l.jsx("button",{onClick:()=>ll("email_verify",!T),className:`px-3 py-1 rounded-sm text-xs font-bold transition border ${T?"bg-emerald-600 text-white border-emerald-500":"bg-amber-500/10 text-amber-500 border-amber-500/20"}`,children:T?"[ PFLICHT ]":"[ DEAKTIVIERT ]"})]}),l.jsx("p",{className:"text-[11px] text-muted font-sans",children:"Bei Pflicht muss die E-Mail vor der Anmeldung verifiziert werden. Bei Deaktivierung ist die Anmeldung direkt möglich."})]}),l.jsxs("div",{className:"p-4 rounded-sm bg-subtle border border-grid space-y-2",children:[l.jsxs("div",{className:"flex items-center justify-between",children:[l.jsx("span",{className:"font-bold text-main",children:"Domain-Einschränkung"}),l.jsx("button",{onClick:()=>ll("restriction",!d),className:`px-3 py-1 rounded-sm text-xs font-bold transition border ${d?"bg-emerald-600 text-white border-emerald-500":"bg-surface text-muted border-grid"}`,children:d?"[ AKTIV ]":"[ INAKTIV ]"})]}),l.jsx("p",{className:"text-[11px] text-muted font-sans",children:"Erlaubt nur Registrierungen von festgelegten E-Mail-Domains (z. B. `@verein.de`)."})]}),l.jsxs("div",{className:"p-4 rounded-sm bg-subtle border border-grid space-y-2",children:[l.jsxs("div",{className:"flex items-center justify-between",children:[l.jsx("span",{className:"font-bold text-main",children:"Admin-Freischaltpflicht"}),l.jsx("button",{onClick:()=>ll("approval",!j),className:`px-3 py-1 rounded-sm text-xs font-bold transition border ${j?"bg-emerald-600 text-white border-emerald-500":"bg-surface text-muted border-grid"}`,children:j?"[ AKTIV ]":"[ INAKTIV ]"})]}),l.jsx("p",{className:"text-[11px] text-muted font-sans",children:"Erfordert die manuelle Freischaltung durch einen Admin vor der ersten Anmeldung."})]})]}),d&&l.jsxs("div",{className:"space-y-3 pt-3 border-t border-grid",children:[l.jsx("h4",{className:"font-serif text-sm font-bold uppercase text-main",children:"Erlaubte E-Mail-Domains"}),l.jsxs("form",{onSubmit:Dd,className:"flex gap-2",children:[l.jsx("input",{type:"text",placeholder:"z. B. verein.de oder @beispiel.org",value:q,onChange:p=>G(p.target.value),className:"flex-1 px-3 py-1.5 rounded-sm input-field text-xs font-mono"}),l.jsxs("button",{type:"submit",className:"px-4 py-1.5 rounded-sm bg-indigo-600 hover:bg-indigo-500 text-white font-bold text-xs",children:[l.jsx(at,{className:"w-3.5 h-3.5 inline"})," Domain Hinzufügen"]})]}),l.jsx("div",{className:"flex flex-wrap gap-2",children:B.map(p=>l.jsxs("span",{className:"px-2.5 py-1 rounded-sm bg-subtle border border-grid text-xs flex items-center gap-2",children:[l.jsx("strong",{className:"text-main",children:p.domain}),l.jsx("button",{onClick:()=>Rd(p.id),className:"text-muted hover:text-red-400",children:l.jsx(Ue,{className:"w-3.5 h-3.5"})})]},p.id))})]})]})]}),i==="events"&&l.jsx("div",{className:"space-y-6 animate-in fade-in duration-150 font-mono",children:l.jsxs("div",{className:"hallmark-panel rounded-sm p-5 border border-grid space-y-4",children:[l.jsxs("h3",{className:"font-serif text-lg font-bold uppercase text-main border-b border-grid pb-2",children:["Alle Veranstaltungen (",Y.length,")"]}),l.jsx("div",{className:"space-y-3",children:Y.map(p=>l.jsxs("div",{className:"p-4 rounded-sm bg-subtle border border-grid flex items-center justify-between text-xs",children:[l.jsxs("div",{children:[l.jsx("h4",{className:"font-serif font-bold text-main text-sm",children:p.title}),l.jsxs("p",{className:"text-muted text-[11px]",children:[new Date(p.start_date).toLocaleDateString("de-DE")," — ",p.location||"Kein Ort"," | Erstellt von: ",p.created_by_name||"Admin"]})]}),l.jsxs("div",{className:"flex items-center gap-2",children:[l.jsx("span",{className:`px-2 py-0.5 rounded-sm text-[10px] font-bold border ${p.is_active!==!1?"bg-emerald-500/10 text-emerald-400 border-emerald-500/20":"bg-amber-500/10 text-amber-400 border-amber-500/20"}`,children:p.is_active!==!1?"AKTIV":"DEAKTIVIERT"}),l.jsxs("button",{onClick:async()=>{if(window.confirm(`Möchtest du "${p.title}" und alle Schichten wirklich unwiderruflich löschen?`))try{await V(`/events/${p.id}/`,{method:"DELETE"}),n()}catch(F){alert(F.message)}},className:"px-2.5 py-1 rounded-sm text-[10px] font-bold bg-red-500/10 hover:bg-red-500/20 text-red-400 border border-red-500/20 transition flex items-center gap-1",title:"Veranstaltung löschen",children:[l.jsx(Ue,{className:"w-3 h-3"})," LÖSCHEN"]})]})]},p.id))})]})}),i==="templates"&&l.jsxs("div",{className:"space-y-6 animate-in fade-in duration-150 font-mono",children:[l.jsxs("div",{className:"hallmark-panel rounded-sm p-5 border border-grid space-y-4",children:[l.jsx("h3",{className:"font-serif text-lg font-bold uppercase text-main border-b border-grid pb-2",children:"Erforderliche Qualifikationen (Skills)"}),l.jsxs("form",{onSubmit:Od,className:"grid grid-cols-1 sm:grid-cols-3 gap-3",children:[l.jsx("input",{type:"text",placeholder:"Skill Name (z. B. Bar-Erfahrung)",required:!0,value:Ce,onChange:p=>L(p.target.value),className:"px-3 py-1.5 rounded-sm input-field text-xs font-mono"}),l.jsx("input",{type:"text",placeholder:"Beschreibung (optional)",value:I,onChange:p=>g(p.target.value),className:"px-3 py-1.5 rounded-sm input-field text-xs font-mono"}),l.jsxs("div",{className:"flex gap-2",children:[l.jsx("input",{type:"color",value:E,onChange:p=>z(p.target.value),className:"w-8 h-8 rounded-sm border-0 cursor-pointer bg-subtle p-0.5"}),l.jsxs("button",{type:"submit",className:"flex-1 px-3 py-1.5 rounded-sm bg-emerald-600 hover:bg-emerald-500 text-white font-bold text-xs",children:[l.jsx(at,{className:"w-3.5 h-3.5 inline"})," Anlegen"]})]})]}),l.jsx("div",{className:"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-3 pt-2",children:r.map(p=>l.jsxs("div",{className:"p-3 rounded-sm bg-subtle border border-grid flex items-center justify-between text-xs",children:[l.jsxs("div",{children:[l.jsx("span",{style:{color:p.color},className:"font-bold",children:p.name}),p.description&&l.jsx("p",{className:"text-[11px] text-muted",children:p.description})]}),l.jsx("button",{onClick:()=>Id(p.id),className:"text-muted hover:text-red-400",children:l.jsx(Ue,{className:"w-3.5 h-3.5"})})]},p.id))})]}),l.jsxs("div",{className:"hallmark-panel rounded-sm p-5 border border-grid space-y-4",children:[l.jsxs("h3",{className:"font-serif text-lg font-bold uppercase text-main border-b border-grid pb-2",children:["Gespeicherte Event-Vorlagen (",Se.length,")"]}),l.jsx("div",{className:"space-y-2",children:Se.map(p=>l.jsxs("div",{className:"p-3 rounded-sm bg-subtle border border-grid flex items-center justify-between text-xs",children:[l.jsxs("div",{children:[l.jsx("div",{className:"font-bold text-main",children:p.name}),l.jsx("div",{className:"text-[11px] text-muted",children:p.description||"Keine Beschreibung"})]}),l.jsx("button",{onClick:()=>$d(p.id),className:"text-muted hover:text-red-400",children:l.jsx(Ue,{className:"w-4 h-4"})})]},p.id))})]})]}),i==="branding"&&l.jsx("div",{className:"space-y-6 animate-in fade-in duration-150 font-mono",children:l.jsxs("form",{onSubmit:Vd,className:"hallmark-panel rounded-sm p-6 border border-grid space-y-6",children:[l.jsxs("h3",{className:"font-serif text-lg font-bold uppercase text-main border-b border-grid pb-2 flex items-center gap-2",children:[l.jsx(nu,{className:"w-5 h-5 text-indigo-400"})," Portal Branding & Erscheinungsbild"]}),l.jsxs("div",{className:"grid grid-cols-1 sm:grid-cols-2 gap-4 text-xs",children:[l.jsxs("div",{children:[l.jsx("label",{className:"block text-muted mb-1",children:"Anwendungs-Name"}),l.jsx("input",{type:"text",required:!0,value:$,onChange:p=>D(p.target.value),className:"w-full px-3 py-1.5 rounded-sm input-field font-bold"})]}),l.jsxs("div",{children:[l.jsx("label",{className:"block text-muted mb-1",children:"Primärfarbe (Brand Accent)"}),l.jsxs("div",{className:"flex gap-2",children:[l.jsx("input",{type:"color",value:tt,onChange:p=>Lr(p.target.value),className:"w-9 h-9 rounded-sm border-0 cursor-pointer bg-subtle p-0.5"}),l.jsx("input",{type:"text",value:tt,onChange:p=>Lr(p.target.value),className:"flex-1 px-3 py-1.5 rounded-sm input-field font-mono"})]})]}),l.jsxs("div",{className:"sm:col-span-2",children:[l.jsx("label",{className:"block text-muted mb-1",children:"Logo Bild-URL (optional)"}),l.jsx("input",{type:"text",placeholder:"https://beispiel.de/logo.png",value:H,onChange:p=>ae(p.target.value),className:"w-full px-3 py-1.5 rounded-sm input-field"})]}),l.jsxs("div",{className:"sm:col-span-2",children:[l.jsx("label",{className:"block text-muted mb-1",children:"Ankündigung (Banner-Text)"}),l.jsx("textarea",{rows:2,placeholder:"z. B. Willkommen beim Sommerfest Schichtplaner!",value:zr,onChange:p=>Xs(p.target.value),className:"w-full px-3 py-1.5 rounded-sm input-field"})]})]}),l.jsx("h4",{className:"font-serif text-base font-bold uppercase text-main pt-4 border-t border-grid",children:"Startseiten Sidebar Boxen"}),l.jsxs("div",{className:"p-4 rounded-sm bg-subtle border border-grid space-y-3",children:[l.jsxs("div",{className:"flex items-center justify-between border-b border-grid pb-2",children:[l.jsx("span",{className:"font-bold text-xs uppercase text-main",children:"📌 Verein & Infos Box"}),l.jsx("button",{type:"button",onClick:()=>On(!Bt),className:`px-3 py-1 rounded-sm text-xs font-bold transition border ${Bt?"bg-emerald-600 text-white border-emerald-500":"bg-surface text-muted border-grid"}`,children:Bt?"[ AN ]":"[ AUS ]"})]}),Bt&&l.jsxs("div",{className:"space-y-3 text-xs",children:[l.jsxs("div",{children:[l.jsx("label",{className:"block text-muted mb-1",children:"Titel"}),l.jsx("input",{type:"text",value:Mr,onChange:p=>Ut(p.target.value),className:"w-full px-3 py-1.5 rounded-sm input-field"})]}),l.jsxs("div",{children:[l.jsx("label",{className:"block text-muted mb-1",children:"Inhalt"}),l.jsx("textarea",{rows:3,value:Ar,onChange:p=>el(p.target.value),className:"w-full px-3 py-1.5 rounded-sm input-field"})]})]})]}),l.jsxs("div",{className:"p-4 rounded-sm bg-subtle border border-grid space-y-3",children:[l.jsxs("div",{className:"flex items-center justify-between border-b border-grid pb-2",children:[l.jsx("span",{className:"font-bold text-xs uppercase text-main",children:"❤️ Unterstützen Box"}),l.jsx("button",{type:"button",onClick:()=>tl(!Ht),className:`px-3 py-1 rounded-sm text-xs font-bold transition border ${Ht?"bg-emerald-600 text-white border-emerald-500":"bg-surface text-muted border-grid"}`,children:Ht?"[ AN ]":"[ AUS ]"})]}),Ht&&l.jsxs("div",{className:"space-y-3 text-xs",children:[l.jsxs("div",{children:[l.jsx("label",{className:"block text-muted mb-1",children:"Titel"}),l.jsx("input",{type:"text",value:Dr,onChange:p=>C(p.target.value),className:"w-full px-3 py-1.5 rounded-sm input-field"})]}),l.jsxs("div",{children:[l.jsx("label",{className:"block text-muted mb-1",children:"Inhalt"}),l.jsx("textarea",{rows:3,value:R,onChange:p=>J(p.target.value),className:"w-full px-3 py-1.5 rounded-sm input-field"})]})]})]}),l.jsx("div",{className:"pt-3 flex justify-end border-t border-grid",children:l.jsx("button",{type:"submit",disabled:nt,style:{backgroundColor:"var(--brand-primary)"},className:"px-6 py-2.5 rounded-sm text-xs font-mono font-bold text-white transition hover:brightness-110 shadow-sm",children:nt?"Speichern...":"Einstellungen speichern"})})]})}),i==="smtp"&&l.jsx("div",{className:"space-y-6 animate-in fade-in duration-150 font-mono",children:l.jsxs("form",{onSubmit:Fd,className:"hallmark-panel rounded-sm p-6 border border-grid space-y-6",children:[l.jsxs("div",{className:"flex items-center justify-between border-b border-grid pb-3",children:[l.jsxs("h3",{className:"font-serif text-lg font-bold uppercase text-main flex items-center gap-2",children:[l.jsx(_i,{className:"w-5 h-5 text-indigo-400"})," SMTP Server & E-Mail-Versand"]}),l.jsxs("div",{className:"flex items-center gap-2",children:[l.jsx("span",{className:"text-xs text-muted font-bold",children:"SMTP-Versand:"}),l.jsx("button",{type:"button",onClick:()=>bo(!wt),className:`px-3 py-1 rounded-sm text-xs font-bold transition border ${wt?"bg-emerald-600 text-white border-emerald-500 shadow-sm":"bg-subtle text-muted border-grid hover:text-main"}`,children:wt?"[ AKTIV ]":"[ INAKTIV (Dev Mode) ]"})]})]}),!wt&&l.jsxs("div",{className:"p-3.5 rounded-sm bg-amber-500/10 border border-amber-500/20 text-amber-500 text-xs flex items-center gap-2",children:[l.jsx(Mn,{className:"w-4 h-4 shrink-0"}),l.jsx("span",{children:"Hinweis: Im inaktiven Modus werden Bestätigungs-Links in der Entwickler-Konsole / Logs ausgegeben."})]}),l.jsxs("div",{className:"grid grid-cols-1 sm:grid-cols-2 gap-4 text-xs",children:[l.jsxs("div",{className:"sm:col-span-2",children:[l.jsx("label",{className:"block text-main mb-1 font-bold",children:"SMTP Host / Server Adresse"}),l.jsx("input",{type:"text",placeholder:"z. B. smtp.domain.de oder mail.gmx.net",value:_o,onChange:p=>Eo(p.target.value),className:"w-full px-3.5 py-2 rounded-sm input-field font-mono"})]}),l.jsxs("div",{children:[l.jsx("label",{className:"block text-main mb-1 font-bold",children:"SMTP Port"}),l.jsx("input",{type:"number",placeholder:"587 oder 465",value:Co,onChange:p=>To(p.target.value),className:"w-full px-3.5 py-2 rounded-sm input-field font-mono"})]}),l.jsxs("div",{children:[l.jsx("label",{className:"block text-main mb-1 font-bold",children:"Absender E-Mail-Adresse (From)"}),l.jsx("input",{type:"email",placeholder:"noreply@verein.de",value:Ro,onChange:p=>Oo(p.target.value),className:"w-full px-3.5 py-2 rounded-sm input-field font-mono"})]}),l.jsxs("div",{children:[l.jsx("label",{className:"block text-main mb-1 font-bold",children:"SMTP Benutzername / Login E-Mail"}),l.jsx("input",{type:"text",placeholder:"z. B. noreply@verein.de",value:Po,onChange:p=>Lo(p.target.value),className:"w-full px-3.5 py-2 rounded-sm input-field font-mono"})]}),l.jsxs("div",{children:[l.jsx("label",{className:"block text-main mb-1 font-bold",children:"SMTP Passwort"}),l.jsxs("div",{className:"relative",children:[l.jsx("input",{type:sl?"text":"password",placeholder:"••••••••",value:zo,onChange:p=>Mo(p.target.value),className:"w-full pl-3.5 pr-10 py-2 rounded-sm input-field font-mono"}),l.jsx("button",{type:"button",onClick:()=>Td(!sl),className:"absolute right-3 top-2.5 text-muted hover:text-main",children:sl?l.jsx(kd,{className:"w-4 h-4"}):l.jsx(jp,{className:"w-4 h-4"})})]})]}),l.jsxs("div",{className:"sm:col-span-2 flex items-center gap-6 pt-2",children:[l.jsxs("label",{className:"flex items-center gap-2 cursor-pointer text-main font-bold",children:[l.jsx("input",{type:"checkbox",checked:Ao,onChange:p=>{nl(p.target.checked),p.target.checked&&rl(!1)},className:"rounded-sm"}),l.jsx("span",{children:"STARTTLS verwenden (Empfohlen für Port 587)"})]}),l.jsxs("label",{className:"flex items-center gap-2 cursor-pointer text-main font-bold",children:[l.jsx("input",{type:"checkbox",checked:Do,onChange:p=>{rl(p.target.checked),p.target.checked&&nl(!1)},className:"rounded-sm"}),l.jsx("span",{children:"SSL/TLS verwenden (Empfohlen für Port 465)"})]})]})]}),l.jsxs("div",{className:"pt-4 border-t border-grid flex flex-wrap items-center justify-between gap-3",children:[l.jsxs("div",{className:"flex items-center gap-2 flex-1 min-w-[260px]",children:[l.jsx("input",{type:"email",placeholder:"Empfänger für Test-E-Mail...",value:Io,onChange:p=>Cd(p.target.value),className:"px-3 py-1.5 rounded-sm input-field text-xs flex-1 font-mono"}),l.jsxs("button",{type:"button",disabled:Fo,onClick:Bd,className:"px-3.5 py-1.5 rounded-sm text-xs font-mono font-bold bg-indigo-500/10 text-indigo-400 border border-indigo-500/20 hover:bg-indigo-500/20 transition flex items-center gap-1.5 shrink-0",children:[l.jsx(Lp,{className:"w-3.5 h-3.5"}),Fo?"Sende...":"Test-Mail Senden"]})]}),l.jsxs("button",{type:"submit",disabled:$o,style:{backgroundColor:"var(--brand-primary)"},className:"px-6 py-2.5 rounded-sm text-xs font-mono font-bold text-white transition hover:brightness-110 shadow-sm flex items-center gap-2",children:[l.jsx(ut,{className:"w-4 h-4"}),$o?"Speichern...":"SMTP-Einstellungen Speichern"]})]})]})})]})}function Qp({eventToEdit:e,skills:t,user:n,onBack:r,onSubmit:s,onDeleteEvent:i}){var I;const[o,a]=w.useState((e==null?void 0:e.title)||""),[u,m]=w.useState((e==null?void 0:e.description)||""),[h,v]=w.useState((e==null?void 0:e.location)||""),[x,S]=w.useState((e==null?void 0:e.start_date)||new Date().toISOString().split("T")[0]),[N,k]=w.useState((e==null?void 0:e.end_date)||new Date().toISOString().split("T")[0]),[O,f]=w.useState(e!=null&&e.co_managers?e.co_managers.map(g=>g.id):[]),[c,d]=w.useState([]),[y,j]=w.useState([]),[b,T]=w.useState(!1),[P,B]=w.useState("");w.useEffect(()=>{if(M(),e&&e.task_areas&&e.task_areas.length>0){const g=e.task_areas.map(E=>({id:E.id,name:E.name,description:E.description||"",shifts:(E.shifts||[]).map(z=>({id:z.id,title:z.title,date:z.date||(e?e.start_date:new Date().toISOString().split("T")[0]),start_time:z.start_time,end_time:z.end_time,max_participants:z.max_participants||1,required_skill_ids:z.required_skills?z.required_skills.map($=>$.id):[]}))}));j(g)}else e||j([{name:"Tresendienst",description:"Getränke- und Barverkauf",shifts:[{title:"Schicht 1",start_time:"18:00",end_time:"22:00",max_participants:2,required_skill_ids:[]}]},{name:"Essen kochen",description:"Zubereitung von Speisen",shifts:[{title:"Frühschicht",start_time:"15:00",end_time:"19:00",max_participants:3,required_skill_ids:[]}]},{name:"Aufbau & Aufräumen",description:"Tische, Stühle & Technik",shifts:[{title:"Aufbau",start_time:"12:00",end_time:"15:00",max_participants:4,required_skill_ids:[]}]}])},[e]);const M=async()=>{try{const g=await V("/users/all/");d(g.results||g)}catch{}},q=()=>{j([...y,{name:"",description:"",shifts:[{title:"Schicht 1",start_time:"10:00",end_time:"14:00",max_participants:1,required_skill_ids:[]}]}])},G=g=>{j(y.filter((E,z)=>z!==g))},Y=(g,E,z)=>{const $=[...y];$[g][E]=z,j($)},ge=g=>{const E=[...y];E[g].shifts.push({title:`Schicht ${E[g].shifts.length+1}`,date:x,start_time:"14:00",end_time:"18:00",max_participants:1,required_skill_ids:[]}),j(E)},Se=(g,E)=>{const z=[...y];z[g].shifts=z[g].shifts.filter(($,D)=>D!==E),j(z)},ye=(g,E,z,$)=>{const D=[...y];D[g].shifts[E][z]=$,j(D)},Ce=(g,E,z)=>{const $=[...y],D=$[g].shifts[E].required_skill_ids||[];D.includes(z)?$[g].shifts[E].required_skill_ids=D.filter(H=>H!==z):$[g].shifts[E].required_skill_ids=[...D,z],j($)},L=async g=>{if(g.preventDefault(),B(""),!o.trim()){B("Bitte gib einen Veranstaltungstitel an.");return}T(!0);try{await s({id:e==null?void 0:e.id,title:o,description:u,location:h,start_date:x,end_date:N,co_manager_ids:O,task_areas:y})}catch(E){B(E.message||"Speichern der Veranstaltung fehlgeschlagen.")}finally{T(!1)}};return l.jsxs("div",{className:"space-y-6 max-w-4xl mx-auto animate-in fade-in duration-200 font-sans",children:[l.jsxs("div",{className:"flex items-center justify-between font-mono text-xs",children:[l.jsxs("button",{onClick:r,className:"px-3.5 py-1.5 rounded-sm bg-subtle hover:bg-surface-hover text-main border border-grid transition flex items-center gap-2 font-bold",children:[l.jsx(wd,{className:"w-4 h-4"})," [ ZURÜCK ZUR ÜBERSICHT ]"]}),l.jsxs("span",{className:"text-muted border border-grid px-2.5 py-0.5 rounded-sm",children:["MODE: ",e?"EVENT EDIT":"NEW EVENT"]})]}),l.jsx("div",{className:"hallmark-panel rounded-sm p-6 sm:p-8 border border-grid space-y-2",children:l.jsxs("div",{className:"flex items-center gap-3",children:[l.jsx("div",{className:"w-10 h-10 rounded-sm bg-blue-500/10 text-blue-500 border border-blue-500/20 flex items-center justify-center font-bold",children:e?l.jsx(jr,{className:"w-5 h-5"}):l.jsx(Pr,{className:"w-5 h-5"})}),l.jsxs("div",{children:[l.jsx("h2",{className:"font-serif text-3xl font-bold uppercase tracking-tight text-main",children:e?"Veranstaltung & Schichten Bearbeiten":"Neue Veranstaltung Erstellen"}),l.jsx("p",{className:"text-xs text-muted font-mono mt-0.5",children:"Konfiguriere Stammdaten, Co-Verwalter, Aufgabenfelder, Schichtzeiten & Qualifikationen"})]})]})}),P&&l.jsxs("div",{className:"p-4 rounded-sm bg-red-500/10 border border-red-500/20 text-red-500 text-xs font-mono flex items-center gap-2",children:[l.jsx(Mn,{className:"w-4 h-4 shrink-0"}),l.jsx("span",{children:P})]}),l.jsxs("form",{onSubmit:L,className:"space-y-6",children:[l.jsxs("div",{className:"hallmark-panel rounded-sm p-6 border border-grid space-y-4 font-mono text-xs",children:[l.jsx("h3",{className:"font-serif text-lg font-bold uppercase text-main border-b border-grid pb-2",children:"1. Stammdaten & Verwalter der Veranstaltung"}),l.jsxs("div",{className:"grid grid-cols-1 sm:grid-cols-2 gap-4",children:[l.jsxs("div",{className:"sm:col-span-2",children:[l.jsx("label",{className:"block text-main mb-1 font-bold",children:"Titel der Veranstaltung"}),l.jsx("input",{type:"text",required:!0,value:o,onChange:g=>a(g.target.value),placeholder:"z. B. Sommerfest 2026",className:"w-full px-3.5 py-2 rounded-sm input-field text-sm"})]}),l.jsxs("div",{children:[l.jsx("label",{className:"block text-main mb-1 font-bold",children:"Startdatum"}),l.jsx("input",{type:"date",required:!0,value:x,onChange:g=>S(g.target.value),className:"w-full px-3.5 py-2 rounded-sm input-field text-sm"})]}),l.jsxs("div",{children:[l.jsx("label",{className:"block text-main mb-1 font-bold",children:"Enddatum"}),l.jsx("input",{type:"date",required:!0,value:N,onChange:g=>k(g.target.value),className:"w-full px-3.5 py-2 rounded-sm input-field text-sm"})]}),l.jsxs("div",{className:"sm:col-span-2",children:[l.jsx("label",{className:"block text-main mb-1 font-bold",children:"Ort (optional)"}),l.jsx("input",{type:"text",value:h,onChange:g=>v(g.target.value),placeholder:"z. B. Vereinsheim, Großer Saal",className:"w-full px-3.5 py-2 rounded-sm input-field text-xs"})]}),l.jsxs("div",{className:"sm:col-span-2",children:[l.jsx("label",{className:"block text-main mb-1 font-bold",children:"Beschreibung (optional)"}),l.jsx("textarea",{rows:2,value:u,onChange:g=>m(g.target.value),placeholder:"Details zur Veranstaltung...",className:"w-full px-3.5 py-2 rounded-sm input-field text-xs font-sans"})]}),c.length>0&&l.jsxs("div",{className:"sm:col-span-2 pt-3 border-t border-grid space-y-2",children:[l.jsxs("label",{className:"block text-main font-bold flex items-center gap-1.5",children:[l.jsx(_d,{className:"w-4 h-4 text-indigo-400"})," Co-Verwalter / Mit-Organisatoren (optional)"]}),l.jsx("p",{className:"text-[11px] text-muted font-sans",children:"Wähle registrierte Benutzer aus, die dieses Event ebenfalls verwalten, bearbeiten und Gäste eintragen dürfen:"}),l.jsx("div",{className:"flex flex-wrap gap-2 pt-1",children:c.map(g=>{const E=O.includes(g.id);return l.jsxs("button",{type:"button",onClick:()=>{f(E?O.filter(z=>z!==g.id):[...O,g.id])},className:`px-3 py-1.5 rounded-sm text-xs font-mono font-bold transition flex items-center gap-1.5 border ${E?"bg-indigo-500/20 text-indigo-300 border-indigo-500/50 shadow-sm":"bg-subtle text-muted border-grid hover:text-main"}`,children:[l.jsx(jo,{className:`w-3.5 h-3.5 ${E?"text-indigo-400":"opacity-40"}`}),l.jsx("span",{children:g.display_name||g.username})]},g.id)})})]})]})]}),l.jsxs("div",{className:"hallmark-panel rounded-sm p-6 border border-grid space-y-4 font-mono text-xs",children:[l.jsxs("div",{className:"flex items-center justify-between border-b border-grid pb-2",children:[l.jsxs("h3",{className:"font-serif text-lg font-bold uppercase text-main flex items-center gap-2",children:[l.jsx(Js,{className:"w-4 h-4 text-blue-500"})," 2. Aufgabenfelder & Schichten"]}),l.jsxs("button",{type:"button",onClick:q,className:"px-3.5 py-1.5 rounded-sm text-xs font-mono font-bold bg-blue-500/10 text-blue-500 border border-blue-500/20 hover:bg-blue-500/20 transition flex items-center gap-1",children:[l.jsx(at,{className:"w-3.5 h-3.5"})," BEREICH HINZUFÜGEN"]})]}),y.map((g,E)=>l.jsxs("div",{className:"p-4 rounded-sm bg-subtle border border-grid space-y-3",children:[l.jsxs("div",{className:"flex items-center justify-between gap-3",children:[l.jsx("input",{type:"text",required:!0,placeholder:"Name des Aufgabenfeldes (z. B. Tresendienst)",value:g.name,onChange:z=>Y(E,"name",z.target.value),className:"flex-1 px-3 py-1.5 rounded-sm input-field text-xs font-bold"}),l.jsx("button",{type:"button",onClick:()=>G(E),className:"p-1.5 text-muted hover:text-red-400 transition",title:"Bereich entfernen",children:l.jsx(Ue,{className:"w-4 h-4"})})]}),l.jsxs("div",{className:"pl-3 border-l-2 border-grid space-y-3",children:[l.jsxs("div",{className:"flex items-center justify-between text-xs text-muted font-bold",children:[l.jsx("span",{children:"Schichten & Zeitfenster"}),l.jsxs("button",{type:"button",onClick:()=>ge(E),className:"text-blue-500 hover:underline flex items-center gap-1",children:[l.jsx(at,{className:"w-3 h-3"})," Schicht hinzufügen"]})]}),g.shifts.map((z,$)=>l.jsxs("div",{className:"p-3 rounded-sm bg-surface border border-grid space-y-2",children:[l.jsxs("div",{className:"grid grid-cols-1 sm:grid-cols-12 gap-2 items-center text-xs",children:[l.jsx("input",{type:"text",placeholder:"Titel",value:z.title,onChange:D=>ye(E,$,"title",D.target.value),className:"sm:col-span-3 px-2.5 py-1 rounded-sm input-field text-xs"}),l.jsx("input",{type:"date",title:"Schichtdatum",min:x,max:N,value:z.date||x,onChange:D=>ye(E,$,"date",D.target.value),className:"sm:col-span-3 px-2 py-1 rounded-sm input-field text-xs font-mono text-indigo-400 font-bold"}),l.jsx("input",{type:"text",placeholder:"Start (14:00)",value:z.start_time,onChange:D=>ye(E,$,"start_time",D.target.value),className:"sm:col-span-2 px-2.5 py-1 rounded-sm input-field text-xs"}),l.jsx("input",{type:"text",placeholder:"Ende (18:00)",value:z.end_time,onChange:D=>ye(E,$,"end_time",D.target.value),className:"sm:col-span-2 px-2.5 py-1 rounded-sm input-field text-xs"}),l.jsx("div",{className:"sm:col-span-1 flex items-center gap-1",children:l.jsx("input",{type:"number",min:"1",title:"Max. Plätze",value:z.max_participants,onChange:D=>ye(E,$,"max_participants",parseInt(D.target.value)||1),className:"w-full px-1.5 py-1 rounded-sm input-field text-xs font-bold text-center"})}),l.jsx("button",{type:"button",onClick:()=>Se(E,$),className:"sm:col-span-1 p-1 text-muted hover:text-red-400 text-center",title:"Schicht löschen",children:l.jsx(Ue,{className:"w-3.5 h-3.5 mx-auto"})})]}),t&&t.length>0&&l.jsxs("div",{className:"pt-2 border-t border-grid flex flex-wrap items-center gap-1.5",children:[l.jsx("span",{className:"text-[10px] text-muted font-bold mr-1",children:"Erforderlich:"}),t.map(D=>{const H=(z.required_skill_ids||[]).includes(D.id);return l.jsxs("button",{type:"button",onClick:()=>Ce(E,$,D.id),style:{backgroundColor:H?`${D.color}25`:"transparent",borderColor:H?D.color:"var(--color-border-grid)",color:H?D.color:"var(--color-text-muted)"},className:"px-2 py-0.5 rounded-sm text-[10px] border font-bold transition flex items-center gap-1",children:[l.jsx("span",{children:D.name}),H&&l.jsx(ut,{className:"w-3 h-3"})]},D.id)})]})]},$))]})]},E))]}),l.jsxs("div",{className:"flex items-center justify-between gap-3 pt-2 font-mono",children:[e&&i&&n&&(n.is_admin_user||n.is_staff||n.is_superuser||e.created_by===n.id||((I=e.created_by)==null?void 0:I.id)===n.id)?l.jsxs("button",{type:"button",onClick:()=>i(e),className:"px-4 py-2.5 rounded-sm text-xs font-bold bg-red-500/10 hover:bg-red-500/20 text-red-400 border border-red-500/20 transition flex items-center gap-1.5",children:[l.jsx(Ue,{className:"w-4 h-4"})," VERANSTALTUNG LÖSCHEN"]}):l.jsx("div",{}),l.jsxs("div",{className:"flex items-center gap-3",children:[l.jsx("button",{type:"button",onClick:r,className:"px-5 py-2.5 rounded-sm text-xs font-semibold text-muted hover:bg-surface-hover transition border border-grid",children:"Abbrechen"}),l.jsxs("button",{type:"submit",disabled:b,style:{backgroundColor:"var(--brand-primary)"},className:"px-6 py-2.5 rounded-sm text-xs font-bold text-white transition hover:brightness-110 shadow-sm flex items-center gap-2",children:[l.jsx(ut,{className:"w-4 h-4"}),b?"Speichern...":"Veranstaltung Speichern"]})]})]})]})]})}function Wp({onBack:e,onInstantiateTemplate:t,user:n,skills:r}){const[s,i]=w.useState([]),[o,a]=w.useState(!0),[u,m]=w.useState(""),[h,v]=w.useState(null),[x,S]=w.useState(""),[N,k]=w.useState(new Date().toISOString().split("T")[0]),[O,f]=w.useState(new Date().toISOString().split("T")[0]),[c,d]=w.useState(""),[y,j]=w.useState(!1),[b,T]=w.useState(!1),[P,B]=w.useState(""),[M,q]=w.useState(""),[G,Y]=w.useState([{name:"Tresendienst",description:"Getränkeausschank und Bar",shifts:[{title:"Frühschicht",start_time:"18:00",end_time:"22:00",max_participants:2,required_skill_ids:[]},{title:"Spätschicht",start_time:"22:00",end_time:"02:00",max_participants:3,required_skill_ids:[]}]}]);w.useEffect(()=>{ge()},[]);const ge=async()=>{a(!0);try{const g=await V("/templates/");i(g.results||g)}catch(g){m(g.message||"Laden der Vorlagen fehlgeschlagen.")}finally{a(!1)}},Se=g=>{v(g),S(g.name)},ye=async g=>{if(g.preventDefault(),!!h){j(!0);try{await t(h.id,{title:x,start_date:N,end_date:O,location:c})}catch(E){m(E.message||"Erstellen der Veranstaltung aus Vorlage fehlgeschlagen.")}finally{j(!1)}}},Ce=async g=>{if(g.preventDefault(),!P.trim()){m("Bitte gib einen Vorlagen-Namen an.");return}j(!0);try{const E={name:P,description:M,template_data:{task_areas:G.map(z=>({name:z.name,description:z.description,shifts:(z.shifts||[]).map($=>({title:$.title,start_time:$.start_time,end_time:$.end_time,max_participants:$.max_participants,required_skill_ids:$.required_skill_ids}))}))}};await V("/templates/",{method:"POST",body:JSON.stringify(E)}),T(!1),B(""),q(""),ge()}catch(E){m(E.message||"Erstellen der Vorlage fehlgeschlagen.")}finally{j(!1)}},L=()=>{Y([...G,{name:"Neuer Bereich",description:"",shifts:[{title:"Schicht 1",start_time:"14:00",end_time:"18:00",max_participants:2,required_skill_ids:[]}]}])},I=g=>{const E=[...G];E[g].shifts.push({title:`Schicht ${E[g].shifts.length+1}`,start_time:"18:00",end_time:"22:00",max_participants:2,required_skill_ids:[]}),Y(E)};return l.jsxs("div",{className:"space-y-6 max-w-4xl mx-auto animate-in fade-in duration-200 font-sans",children:[l.jsxs("div",{className:"flex items-center justify-between font-mono text-xs",children:[l.jsxs("button",{onClick:e,className:"px-3.5 py-1.5 rounded-sm bg-subtle hover:bg-surface-hover text-main border border-grid transition flex items-center gap-2 font-bold",children:[l.jsx(wd,{className:"w-4 h-4"})," [ ZURÜCK ZUR ÜBERSICHT ]"]}),l.jsxs("span",{className:"text-muted border border-grid px-2.5 py-0.5 rounded-sm uppercase",children:["SYSTEM VORLAGEN (",s.length,")"]})]}),l.jsx("div",{className:"hallmark-panel rounded-sm p-6 sm:p-8 border border-grid space-y-4",children:l.jsxs("div",{className:"flex items-center justify-between gap-3",children:[l.jsxs("div",{className:"flex items-center gap-3",children:[l.jsx("div",{className:"w-10 h-10 rounded-sm bg-indigo-500/10 text-indigo-400 border border-indigo-500/20 flex items-center justify-center font-bold",children:l.jsx(Js,{className:"w-5 h-5"})}),l.jsxs("div",{children:[l.jsx("h2",{className:"font-serif text-3xl font-bold uppercase tracking-tight text-main",children:"Veranstaltungs-Vorlagen Zentrale"}),l.jsx("p",{className:"text-xs text-muted font-mono mt-0.5",children:"Erstelle neue Veranstaltungen mit voreingestellten Schichten und Aufgabenbereichen"})]})]}),n&&l.jsxs("button",{onClick:()=>T(!b),className:"px-3.5 py-2 rounded-sm text-xs font-mono font-bold bg-indigo-500/10 text-indigo-400 border border-indigo-500/20 hover:bg-indigo-500/20 transition flex items-center gap-1.5 shrink-0",children:[l.jsx(at,{className:"w-4 h-4"}),b?"Schließen":"Neue Vorlage Erstellen"]})]})}),u&&l.jsxs("div",{className:"p-4 rounded-sm bg-red-500/10 border border-red-500/20 text-red-500 text-xs font-mono flex items-center gap-2",children:[l.jsx(Mn,{className:"w-4 h-4 shrink-0"}),l.jsx("span",{children:u})]}),b&&l.jsxs("form",{onSubmit:Ce,className:"hallmark-panel rounded-sm p-6 border border-grid space-y-4 font-mono text-xs animate-in fade-in duration-200",children:[l.jsxs("h3",{className:"font-serif text-lg font-bold uppercase text-indigo-400 border-b border-grid pb-2 flex items-center justify-between",children:[l.jsx("span",{children:"Neue Vorlage mit voreingestellten Schichten anlegen"}),l.jsxs("button",{type:"button",onClick:L,className:"text-xs font-mono font-bold bg-indigo-500/20 text-indigo-300 px-3 py-1 rounded-sm border border-indigo-500/30 flex items-center gap-1",children:[l.jsx(at,{className:"w-3.5 h-3.5"})," Bereich Hinzufügen"]})]}),l.jsxs("div",{className:"grid grid-cols-1 sm:grid-cols-2 gap-4",children:[l.jsxs("div",{className:"sm:col-span-2",children:[l.jsx("label",{className:"block text-main mb-1 font-bold",children:"Vorlagen Name"}),l.jsx("input",{type:"text",required:!0,placeholder:"z. B. Standard Kneipenabend / Bar-Event",value:P,onChange:g=>B(g.target.value),className:"w-full px-3.5 py-2 rounded-sm input-field text-sm font-bold"})]}),l.jsxs("div",{className:"sm:col-span-2",children:[l.jsx("label",{className:"block text-main mb-1 font-bold",children:"Beschreibung (optional)"}),l.jsx("input",{type:"text",placeholder:"z. B. Inklusive 2 Barschichten und Aufbau",value:M,onChange:g=>q(g.target.value),className:"w-full px-3.5 py-2 rounded-sm input-field text-xs"})]})]}),l.jsx("div",{className:"space-y-4 pt-2",children:G.map((g,E)=>l.jsxs("div",{className:"p-4 rounded-sm bg-subtle border border-grid space-y-3",children:[l.jsxs("div",{className:"flex items-center justify-between gap-2",children:[l.jsx("input",{type:"text",required:!0,placeholder:"Bereichs-Name (z. B. Bar)",value:g.name,onChange:z=>{const $=[...G];$[E].name=z.target.value,Y($)},className:"flex-1 px-3 py-1 rounded-sm input-field text-xs font-bold"}),l.jsx("button",{type:"button",onClick:()=>{Y(G.filter((z,$)=>$!==E))},className:"text-muted hover:text-red-400 p-1",children:l.jsx(Ue,{className:"w-4 h-4"})})]}),l.jsxs("div",{className:"pl-3 border-l-2 border-grid space-y-2",children:[l.jsxs("div",{className:"flex items-center justify-between text-muted text-[11px] font-bold",children:[l.jsx("span",{children:"Voreingestellte Schichten"}),l.jsxs("button",{type:"button",onClick:()=>I(E),className:"text-indigo-400 hover:underline flex items-center gap-1",children:[l.jsx(at,{className:"w-3 h-3"})," Schicht hinzufügen"]})]}),g.shifts.map((z,$)=>l.jsxs("div",{className:"p-2.5 rounded-sm bg-surface border border-grid grid grid-cols-1 sm:grid-cols-12 gap-2 items-center text-xs",children:[l.jsx("input",{type:"text",placeholder:"Schichtname",value:z.title,onChange:D=>{const H=[...G];H[E].shifts[$].title=D.target.value,Y(H)},className:"sm:col-span-4 px-2 py-1 rounded-sm input-field text-xs"}),l.jsx("input",{type:"text",placeholder:"Start (18:00)",value:z.start_time,onChange:D=>{const H=[...G];H[E].shifts[$].start_time=D.target.value,Y(H)},className:"sm:col-span-2 px-2 py-1 rounded-sm input-field text-xs"}),l.jsx("input",{type:"text",placeholder:"Ende (22:00)",value:z.end_time,onChange:D=>{const H=[...G];H[E].shifts[$].end_time=D.target.value,Y(H)},className:"sm:col-span-2 px-2 py-1 rounded-sm input-field text-xs"}),l.jsxs("div",{className:"sm:col-span-3 flex items-center gap-1",children:[l.jsx("span",{className:"text-[10px] text-muted",children:"Plätze:"}),l.jsx("input",{type:"number",min:"1",value:z.max_participants,onChange:D=>{const H=[...G];H[E].shifts[$].max_participants=parseInt(D.target.value)||1,Y(H)},className:"w-full px-2 py-1 rounded-sm input-field text-xs font-bold"})]}),l.jsx("button",{type:"button",onClick:()=>{const D=[...G];D[E].shifts=D[E].shifts.filter((H,ae)=>ae!==$),Y(D)},className:"sm:col-span-1 p-1 text-muted hover:text-red-400 text-center",children:l.jsx(Ue,{className:"w-3.5 h-3.5 mx-auto"})})]},$))]})]},E))}),l.jsxs("div",{className:"pt-3 flex justify-end gap-2 border-t border-grid",children:[l.jsx("button",{type:"button",onClick:()=>T(!1),className:"px-4 py-2 rounded-sm text-xs font-semibold text-muted hover:bg-surface-hover transition border border-grid",children:"Abbrechen"}),l.jsxs("button",{type:"submit",disabled:y,style:{backgroundColor:"var(--brand-primary)"},className:"px-5 py-2 rounded-sm text-xs font-mono font-bold text-white transition hover:brightness-110 shadow-sm flex items-center gap-1.5",children:[l.jsx(ut,{className:"w-4 h-4"})," Vorlage Speichern"]})]})]}),l.jsxs("div",{className:"space-y-4 font-mono text-xs",children:[l.jsx("h3",{className:"font-serif text-lg font-bold uppercase text-main",children:"Verfügbare Vorlagen"}),o?l.jsx("div",{className:"hallmark-panel p-8 text-center text-muted",children:"Lade Vorlagen..."}):s.length===0?l.jsx("div",{className:"hallmark-panel p-8 text-center text-muted italic",children:'[ Noch keine Vorlagen gespeichert. Klicke oben auf "Neue Vorlage Erstellen" um Vorlagen mit voreingestellten Schichten anzulegen. ]'}):l.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4",children:s.map(g=>{var E;return l.jsxs("div",{onClick:()=>Se(g),className:`hallmark-panel p-5 rounded-sm border cursor-pointer transition space-y-3 ${(h==null?void 0:h.id)===g.id?"bg-indigo-500/10 border-indigo-500 shadow-md":"bg-surface border-grid hover:border-muted"}`,children:[l.jsxs("div",{className:"flex items-center justify-between",children:[l.jsx("h4",{className:"font-serif text-base font-bold text-main uppercase",children:g.name}),(h==null?void 0:h.id)===g.id&&l.jsx("span",{className:"text-[10px] font-mono text-indigo-400 bg-indigo-500/20 px-2 py-0.5 rounded-sm border border-indigo-500/30 font-bold",children:"[ AUSGEWÄHLT ]"})]}),g.description&&l.jsx("p",{className:"text-xs font-sans text-muted",children:g.description}),((E=g.template_data)==null?void 0:E.task_areas)&&g.template_data.task_areas.length>0&&l.jsxs("div",{className:"space-y-2 pt-2 border-t border-grid text-[11px]",children:[l.jsx("div",{className:"font-bold text-muted uppercase text-[10px]",children:"📌 Voreingestellte Schichten:"}),g.template_data.task_areas.map((z,$)=>{var D;return l.jsxs("div",{className:"bg-subtle p-2 rounded-sm border border-grid space-y-1",children:[l.jsxs("div",{className:"font-bold text-main flex items-center justify-between",children:[l.jsx("span",{children:z.name}),l.jsxs("span",{className:"text-[10px] text-muted font-normal",children:[((D=z.shifts)==null?void 0:D.length)||0," Schichten"]})]}),l.jsx("div",{className:"flex flex-wrap gap-1",children:(z.shifts||[]).map((H,ae)=>l.jsxs("span",{className:"px-2 py-0.5 rounded-sm bg-surface border border-grid text-[10px] flex items-center gap-1 font-mono",children:[l.jsx(Sr,{className:"w-3 h-3 text-muted shrink-0"}),l.jsx("strong",{className:"text-main",children:H.title}),l.jsxs("span",{className:"text-muted",children:["(",H.start_time,"-",H.end_time,", ",H.max_participants," Plätze)"]})]},ae))})]},$)})]}),l.jsxs("div",{className:"text-[10px] text-muted pt-2 border-t border-grid flex items-center justify-between",children:[l.jsxs("span",{children:["Erstellt von: ",l.jsx("strong",{children:g.created_by_name||"Admin"})]}),l.jsx("span",{className:"text-indigo-400 font-bold",children:"Klick zum Auswählen"})]})]},g.id)})})]}),h&&l.jsxs("form",{onSubmit:ye,className:"hallmark-panel rounded-sm p-6 border border-grid space-y-4 font-mono text-xs animate-in fade-in duration-200",children:[l.jsxs("h3",{className:"font-serif text-lg font-bold uppercase text-indigo-400 border-b border-grid pb-2",children:['Neue Veranstaltung aus Vorlage "',h.name,'" Erstellen']}),l.jsxs("div",{className:"grid grid-cols-1 sm:grid-cols-2 gap-4",children:[l.jsxs("div",{className:"sm:col-span-2",children:[l.jsx("label",{className:"block text-main mb-1 font-bold",children:"Titel der Veranstaltung"}),l.jsx("input",{type:"text",required:!0,value:x,onChange:g=>S(g.target.value),className:"w-full px-3.5 py-2 rounded-sm input-field text-sm font-bold"})]}),l.jsxs("div",{children:[l.jsx("label",{className:"block text-main mb-1 font-bold",children:"Startdatum"}),l.jsx("input",{type:"date",required:!0,value:N,onChange:g=>k(g.target.value),className:"w-full px-3.5 py-2 rounded-sm input-field text-xs"})]}),l.jsxs("div",{children:[l.jsx("label",{className:"block text-main mb-1 font-bold",children:"Enddatum"}),l.jsx("input",{type:"date",required:!0,value:O,onChange:g=>f(g.target.value),className:"w-full px-3.5 py-2 rounded-sm input-field text-xs"})]}),l.jsxs("div",{className:"sm:col-span-2",children:[l.jsx("label",{className:"block text-main mb-1 font-bold",children:"Ort (optional)"}),l.jsx("input",{type:"text",value:c,onChange:g=>d(g.target.value),placeholder:"z. B. Großer Saal",className:"w-full px-3.5 py-2 rounded-sm input-field text-xs"})]})]}),l.jsx("div",{className:"pt-3 flex justify-end border-t border-grid",children:l.jsxs("button",{type:"submit",disabled:y,style:{backgroundColor:"var(--brand-primary)"},className:"px-6 py-2.5 rounded-sm text-xs font-mono font-bold text-white transition hover:brightness-110 shadow-sm flex items-center gap-2",children:[l.jsx(Tp,{className:"w-4 h-4 fill-white"}),y?"Erstellen...":"Veranstaltung Jetzt Aus Vorlage Erstellen"]})})]})]})}function Kp(){const[e,t]=w.useState(null),[n,r]=w.useState(null),[s,i]=w.useState([]),[o,a]=w.useState([]),[u,m]=w.useState(null),[h,v]=w.useState(null),[x,S]=w.useState(!0),[N,k]=w.useState("home"),[O,f]=w.useState(!1),[c,d]=w.useState(!1),[y,j]=w.useState(null),[b,T]=w.useState(!1),[P,B]=w.useState(!1),[M,q]=w.useState(localStorage.getItem("theme_mode")||"auto"),[G,Y]=w.useState(null),[ge,Se]=w.useState(null);w.useEffect(()=>{window.addEventListener("beforeinstallprompt",C=>{C.preventDefault(),Se(C)}),E()},[]),w.useEffect(()=>{localStorage.setItem("theme_mode",M);const C=()=>{let R=M;M==="auto"&&(R=window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light"),document.documentElement.setAttribute("data-theme",R)};if(C(),M==="auto"){const R=window.matchMedia("(prefers-color-scheme: dark)"),J=()=>C();return R.addEventListener("change",J),()=>R.removeEventListener("change",J)}},[M]),w.useEffect(()=>{n!=null&&n.primary_color&&(document.documentElement.style.setProperty("--brand-primary",n.primary_color),document.documentElement.style.setProperty("--brand-secondary",n.secondary_color||n.primary_color))},[n]);const[ye,Ce]=w.useState(null),[L,I]=w.useState(null),g=C=>{Y(C),setTimeout(()=>Y(null),5e3)},E=async()=>{S(!0);try{try{const K=await V("/branding/");r(K)}catch{}if(Ei())try{const K=await V("/users/me/");t(K),!K.is_admin_user&&!K.is_staff&&!K.is_superuser&&N==="admin"&&k("home")}catch{bn(null),t(null),k("home")}const C=new URLSearchParams(window.location.search),R=C.get("verify_email");if(R)try{const K=await V("/users/verify-email/",{method:"POST",body:JSON.stringify({token:R})});bn(K.token),t(K.user),g(K.message||"✅ E-Mail-Adresse erfolgreich bestätigt!"),window.history.replaceState({},document.title,window.location.pathname)}catch(K){g(`⚠️ E-Mail Bestätigung: ${K.message}`)}const J=C.get("claim_token"),nt=C.get("guest_name");J&&nt&&(Ce(J),I(nt),Ei()||f(!0)),await $(),await D()}catch(C){console.error(C)}finally{S(!1)}},z=async C=>{try{const R=await V(`/users/signups/${C.id}/generate-claim-link/`,{method:"POST"}),J=`${window.location.origin}/?claim_token=${R.token}&guest_name=${encodeURIComponent(R.guest_name)}`;navigator.clipboard?(await navigator.clipboard.writeText(J),g(`✅ Einladungs-Link für ${R.guest_name} in Zwischenablage kopiert!`)):prompt(`Einladungs-Link für ${R.guest_name} kopieren:`,J)}catch(R){alert(R.message||"Fehler beim Erstellen des Links.")}},$=async()=>{try{const C=await V("/skills/");i(C.results||C)}catch{}},D=async()=>{try{const C=await V("/events/"),R=C.results||C;a(R),R.length>0&&!u?(m(R[0].id),H(R[0].id)):u&&H(u)}catch{}},H=async C=>{try{const R=await V(`/events/${C}/matrix/`);v(R)}catch{}},ae=C=>{m(C),H(C),k("schedule")},tt=()=>{bn(null),t(null),k("home"),g("Erfolgreich abgemeldet."),u&&H(u)},Lr=(C,R)=>{t(C),C&&!C.is_admin_user&&!C.is_staff&&!C.is_superuser&&N==="admin"&&k("home"),g(R||"Erfolgreich angemeldet!"),u&&H(u)},zr=async C=>{if(!e)j(C),d(!0);else try{const R=await V(`/shifts/${C.id}/signup/`,{method:"POST"});g(R.message||"Erfolgreich für Schicht eingetragen!"),u&&H(u)}catch(R){g(`Fehler: ${R.message}`)}},Xs=async C=>{if(!y)return;const R=await V(`/shifts/${y.id}/signup/`,{method:"POST",body:JSON.stringify(C)});g(R.message||"Als Gast eingetragen!"),u&&H(u)},Bt=async C=>{try{const R=await V(`/shifts/${C.id}/signup/`,{method:"DELETE"});g(R.message||"Eintragung storniert."),u&&H(u)}catch(R){g(`Fehler: ${R.message}`)}},On=async C=>{if(!(!C||!C.id)&&window.confirm(`Möchtest du die Veranstaltung "${C.title}" und alle zugehörigen Schichten wirklich unwiderruflich löschen?`))try{await V(`/events/${C.id}/`,{method:"DELETE"}),g(`Veranstaltung "${C.title}" wurde erfolgreich gelöscht.`),u===C.id&&m(null),N==="event-editor"&&k("home"),D()}catch(R){g(`Fehler beim Löschen: ${R.message}`)}},[Mr,Ut]=w.useState(null),Ar=async C=>{let R=C.id;R?await V(`/events/${R}/`,{method:"PATCH",body:JSON.stringify({title:C.title,description:C.description,location:C.location,start_date:C.start_date,end_date:C.end_date,co_manager_ids:C.co_manager_ids||[]})}):R=(await V("/events/",{method:"POST",body:JSON.stringify({title:C.title,description:C.description,location:C.location,start_date:C.start_date,end_date:C.end_date,co_manager_ids:C.co_manager_ids||[]})})).id;for(let J of C.task_areas){if(!J.name)continue;let nt=J.id;nt?await V(`/task-areas/${nt}/`,{method:"PATCH",body:JSON.stringify({name:J.name,description:J.description||""})}):nt=(await V("/task-areas/",{method:"POST",body:JSON.stringify({event:R,name:J.name,description:J.description||""})})).id;for(let K of J.shifts){const wt=K.date||C.start_date;K.id?await V(`/shifts/${K.id}/`,{method:"PATCH",body:JSON.stringify({title:K.title,date:wt,start_time:K.start_time,end_time:K.end_time,max_participants:K.max_participants,required_skill_ids:K.required_skill_ids||[]})}):await V("/shifts/",{method:"POST",body:JSON.stringify({task_area:nt,title:K.title,date:wt,start_time:K.start_time,end_time:K.end_time,max_participants:K.max_participants,required_skill_ids:K.required_skill_ids||[]})})}}g(C.id?"Veranstaltung & Schichten aktualisiert!":"Veranstaltung erfolgreich erstellt!"),await D(),ae(R)},el=async(C,R)=>{const J=await V(`/templates/${C}/instantiate/`,{method:"POST",body:JSON.stringify(R)});g("Veranstaltung aus Vorlage erstellt!"),await D(),J.id&&ae(J.id)},Ht=()=>{u&&window.open(`/api/events/${u}/export_pdf/`,"_blank")},tl=()=>{window.print()},Dr=()=>{ge&&(ge.prompt(),ge.userChoice.then(C=>{C.outcome==="accepted"&&g("PWA Installation gestartet!"),Se(null)}))};return l.jsxs("div",{className:"min-h-screen bg-canvas text-main flex flex-col font-sans selection:bg-surface-hover transition-colors duration-200",children:[G&&l.jsxs("div",{className:"fixed bottom-6 right-6 z-50 bg-emerald-600 text-white px-4 py-2.5 rounded-sm shadow-2xl font-mono text-xs flex items-center gap-2 border border-emerald-400 animate-in fade-in slide-in-from-bottom-3 duration-200",children:[l.jsx(ut,{className:"w-4 h-4"}),l.jsx("span",{children:G})]}),l.jsx(Op,{branding:n,user:e,activeTab:N,onChangeTab:k,themeMode:M,onChangeThemeMode:q,onLogout:tt,onOpenAuth:()=>f(!0),onOpenCreateEvent:()=>{Ut(null),k("event-editor")},onOpenTemplates:()=>k("templates"),onOpenProfile:()=>B(!0),onOpenAdmin:()=>k("admin"),pwaInstallPrompt:!!ge,onInstallPwa:Dr}),l.jsx("main",{className:"flex-1 max-w-7xl w-full mx-auto px-4 sm:px-6 lg:px-8 py-8 space-y-6",children:x?l.jsx("div",{className:"hallmark-panel p-16 text-center text-xs text-muted font-mono border border-grid",children:"Lade Daten..."}):N==="home"?l.jsx(Bp,{events:o,user:e,onSelectEvent:ae,onOpenCreateEvent:()=>{Ut(null),k("event-editor")},onToggleEventActive:async C=>{try{await V(`/events/${C.id}/`,{method:"PATCH",body:JSON.stringify({is_active:C.is_active===!1})}),D()}catch(R){alert(R.message||"Aktion fehlgeschlagen.")}},onEditEvent:C=>{Ut(C),k("event-editor")},onDeleteEvent:On,branding:n}):N==="calendar"?l.jsx(Up,{events:o,onSelectEvent:ae,branding:n}):N==="admin"&&e&&(e.is_admin_user||e.is_staff||e.is_superuser)?l.jsx(Hp,{branding:n,onRefreshBranding:async()=>{const C=await V("/branding/");r(C)},onRefreshEvents:D,skills:s,onRefreshSkills:$}):N==="event-editor"?l.jsx(Qp,{eventToEdit:Mr,skills:s,user:e,onBack:()=>k("schedule"),onSubmit:Ar,onDeleteEvent:On}):N==="templates"?l.jsx(Wp,{onBack:()=>k("schedule"),onInstantiateTemplate:el,user:e,skills:s}):l.jsxs("div",{className:"space-y-6",children:[l.jsxs("div",{className:"flex items-center justify-between gap-4 overflow-x-auto pb-2 no-scrollbar font-mono",children:[l.jsxs("div",{className:"flex items-center gap-2",children:[l.jsx("span",{className:"text-xs font-bold text-muted uppercase tracking-wider whitespace-nowrap",children:"Ausgewähltes Event:"}),o.map(C=>{const R=u===C.id;return l.jsx("button",{onClick:()=>ae(C.id),style:{backgroundColor:R?(n==null?void 0:n.primary_color)||"var(--brand-primary)":void 0,borderColor:R?(n==null?void 0:n.primary_color)||"var(--brand-primary)":void 0},className:`px-3.5 py-1.5 rounded-sm text-xs font-bold transition whitespace-nowrap border ${R?"text-white shadow-sm":"bg-subtle text-muted border-grid hover:text-main"}`,children:C.title},C.id)})]}),e&&l.jsxs("button",{onClick:()=>{Ut(null),k("event-editor")},className:"px-3.5 py-1.5 rounded-sm text-xs font-bold bg-subtle hover:bg-surface-hover text-main border border-grid transition flex items-center gap-1.5 shrink-0",children:[l.jsx(at,{className:"w-4 h-4"})," Neues Event"]})]}),l.jsx(Ip,{event:h,user:e,onSignupClick:zr,onCancelClick:Bt,onEditEvent:C=>{Ut(C),k("event-editor")},onDeleteEvent:On,onRemoveUserFromShift:async(C,R)=>{try{const J=await V(`/shifts/${C.id}/signup/${R}/`,{method:"DELETE"});g(J.message||"Eintragung entfernt."),D(),u&&ae(u)}catch(J){alert(J.message||"Entfernen der Person fehlgeschlagen.")}},onGenerateClaimLink:z,onExportPdf:Ht,onPrintView:tl})]})}),l.jsx("footer",{className:"border-t border-grid py-6 text-center text-xs text-muted font-mono no-print",children:l.jsxs("p",{children:[(n==null?void 0:n.app_name)||"Veranstaltungsschichtplaner"," • PWA Enabled • PostgreSQL & Docker Ready"]})}),O&&l.jsx(Fp,{onClose:()=>{f(!1),Ce(null),I(null)},onSuccess:Lr,claimToken:ye,prefilledGuestName:L}),c&&l.jsx($p,{shift:y,onClose:()=>d(!1),onSubmit:Xs})]})}Ml.createRoot(document.getElementById("root")).render(l.jsx(lr.StrictMode,{children:l.jsx(Kp,{})})); diff --git a/frontend/dist/assets/index-CR8RYpZS.css b/frontend/dist/assets/index-CR8RYpZS.css deleted file mode 100644 index 7c8d572..0000000 --- a/frontend/dist/assets/index-CR8RYpZS.css +++ /dev/null @@ -1 +0,0 @@ -*,:before,:after{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }*,:before,:after{box-sizing:border-box;border-width:0;border-style:solid;border-color:#e5e7eb}:before,:after{--tw-content: ""}html,:host{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol,"Noto Color Emoji";font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=until-found])){display:none}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.sticky{position:sticky}.inset-0{top:0;right:0;bottom:0;left:0}.bottom-6{bottom:1.5rem}.left-3{left:.75rem}.left-3\.5{left:.875rem}.right-3{right:.75rem}.right-4{right:1rem}.right-6{right:1.5rem}.top-0{top:0}.top-2\.5{top:.625rem}.top-3{top:.75rem}.top-4{top:1rem}.z-40{z-index:40}.z-50{z-index:50}.mx-1{margin-left:.25rem;margin-right:.25rem}.mx-auto{margin-left:auto;margin-right:auto}.my-8{margin-top:2rem;margin-bottom:2rem}.mb-1{margin-bottom:.25rem}.mb-3{margin-bottom:.75rem}.mb-4{margin-bottom:1rem}.mb-5{margin-bottom:1.25rem}.mb-6{margin-bottom:1.5rem}.mb-8{margin-bottom:2rem}.ml-auto{margin-left:auto}.mr-1{margin-right:.25rem}.mt-0\.5{margin-top:.125rem}.mt-1{margin-top:.25rem}.mt-2{margin-top:.5rem}.mt-4{margin-top:1rem}.mt-6{margin-top:1.5rem}.line-clamp-2{overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2}.block{display:block}.inline-block{display:inline-block}.inline{display:inline}.flex{display:flex}.inline-flex{display:inline-flex}.table{display:table}.grid{display:grid}.hidden{display:none}.h-10{height:2.5rem}.h-16{height:4rem}.h-2\.5{height:.625rem}.h-3{height:.75rem}.h-3\.5{height:.875rem}.h-4{height:1rem}.h-5{height:1.25rem}.h-8{height:2rem}.h-9{height:2.25rem}.max-h-\[70px\]{max-height:70px}.min-h-\[100px\]{min-height:100px}.min-h-screen{min-height:100vh}.w-1\/4{width:25%}.w-1\/6{width:16.666667%}.w-10{width:2.5rem}.w-2\.5{width:.625rem}.w-3{width:.75rem}.w-3\.5{width:.875rem}.w-4{width:1rem}.w-5{width:1.25rem}.w-8{width:2rem}.w-9{width:2.25rem}.w-full{width:100%}.w-px{width:1px}.min-w-\[110px\]{min-width:110px}.min-w-\[260px\]{min-width:260px}.max-w-2xl{max-width:42rem}.max-w-3xl{max-width:48rem}.max-w-4xl{max-width:56rem}.max-w-5xl{max-width:64rem}.max-w-7xl{max-width:80rem}.max-w-\[130px\]{max-width:130px}.max-w-lg{max-width:32rem}.max-w-md{max-width:28rem}.max-w-xl{max-width:36rem}.flex-1{flex:1 1 0%}.shrink-0{flex-shrink:0}.border-collapse{border-collapse:collapse}.cursor-pointer{cursor:pointer}.auto-rows-fr{grid-auto-rows:minmax(0,1fr)}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-7{grid-template-columns:repeat(7,minmax(0,1fr))}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.items-stretch{align-items:stretch}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.justify-around{justify-content:space-around}.gap-1{gap:.25rem}.gap-1\.5{gap:.375rem}.gap-2{gap:.5rem}.gap-3{gap:.75rem}.gap-4{gap:1rem}.gap-6{gap:1.5rem}.space-x-1>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0;margin-right:calc(.25rem * var(--tw-space-x-reverse));margin-left:calc(.25rem * calc(1 - var(--tw-space-x-reverse)))}.space-x-2>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0;margin-right:calc(.5rem * var(--tw-space-x-reverse));margin-left:calc(.5rem * calc(1 - var(--tw-space-x-reverse)))}.space-x-3>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0;margin-right:calc(.75rem * var(--tw-space-x-reverse));margin-left:calc(.75rem * calc(1 - var(--tw-space-x-reverse)))}.space-y-1>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.25rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.25rem * var(--tw-space-y-reverse))}.space-y-1\.5>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.375rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.375rem * var(--tw-space-y-reverse))}.space-y-2>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.5rem * var(--tw-space-y-reverse))}.space-y-3>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.75rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.75rem * var(--tw-space-y-reverse))}.space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1rem * var(--tw-space-y-reverse))}.space-y-5>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1.25rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1.25rem * var(--tw-space-y-reverse))}.space-y-6>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1.5rem * var(--tw-space-y-reverse))}.space-y-8>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(2rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(2rem * var(--tw-space-y-reverse))}.divide-x>:not([hidden])~:not([hidden]){--tw-divide-x-reverse: 0;border-right-width:calc(1px * var(--tw-divide-x-reverse));border-left-width:calc(1px * calc(1 - var(--tw-divide-x-reverse)))}.divide-y>:not([hidden])~:not([hidden]){--tw-divide-y-reverse: 0;border-top-width:calc(1px * calc(1 - var(--tw-divide-y-reverse)));border-bottom-width:calc(1px * var(--tw-divide-y-reverse))}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.whitespace-nowrap{white-space:nowrap}.whitespace-pre-line{white-space:pre-line}.rounded-2xl{border-radius:1rem}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:.5rem}.rounded-sm{border-radius:.125rem}.rounded-xl{border-radius:.75rem}.border{border-width:1px}.border-0{border-width:0px}.border-b{border-bottom-width:1px}.border-l-2{border-left-width:2px}.border-r{border-right-width:1px}.border-t{border-top-width:1px}.border-amber-500\/20{border-color:#f59e0b33}.border-amber-500\/30{border-color:#f59e0b4d}.border-amber-500\/40{border-color:#f59e0b66}.border-blue-500{--tw-border-opacity: 1;border-color:rgb(59 130 246 / var(--tw-border-opacity, 1))}.border-blue-500\/20{border-color:#3b82f633}.border-emerald-400{--tw-border-opacity: 1;border-color:rgb(52 211 153 / var(--tw-border-opacity, 1))}.border-emerald-500{--tw-border-opacity: 1;border-color:rgb(16 185 129 / var(--tw-border-opacity, 1))}.border-emerald-500\/20{border-color:#10b98133}.border-emerald-500\/30{border-color:#10b9814d}.border-indigo-500{--tw-border-opacity: 1;border-color:rgb(99 102 241 / var(--tw-border-opacity, 1))}.border-indigo-500\/20{border-color:#6366f133}.border-indigo-500\/30{border-color:#6366f14d}.border-indigo-500\/40{border-color:#6366f166}.border-indigo-500\/50{border-color:#6366f180}.border-red-500\/20{border-color:#ef444433}.border-red-500\/30{border-color:#ef44444d}.border-red-600\/30{border-color:#dc26264d}.border-slate-700{--tw-border-opacity: 1;border-color:rgb(51 65 85 / var(--tw-border-opacity, 1))}.border-slate-800{--tw-border-opacity: 1;border-color:rgb(30 41 59 / var(--tw-border-opacity, 1))}.border-slate-800\/80{border-color:#1e293bcc}.border-transparent{border-color:transparent}.bg-amber-500\/10{background-color:#f59e0b1a}.bg-amber-500\/20{background-color:#f59e0b33}.bg-amber-500\/5{background-color:#f59e0b0d}.bg-black\/60{background-color:#0009}.bg-blue-500\/10{background-color:#3b82f61a}.bg-blue-600{--tw-bg-opacity: 1;background-color:rgb(37 99 235 / var(--tw-bg-opacity, 1))}.bg-blue-600\/10{background-color:#2563eb1a}.bg-emerald-500\/10{background-color:#10b9811a}.bg-emerald-600{--tw-bg-opacity: 1;background-color:rgb(5 150 105 / var(--tw-bg-opacity, 1))}.bg-indigo-500\/10{background-color:#6366f11a}.bg-indigo-500\/20{background-color:#6366f133}.bg-indigo-600{--tw-bg-opacity: 1;background-color:rgb(79 70 229 / var(--tw-bg-opacity, 1))}.bg-red-500\/10{background-color:#ef44441a}.bg-red-600\/20{background-color:#dc262633}.bg-slate-100{--tw-bg-opacity: 1;background-color:rgb(241 245 249 / var(--tw-bg-opacity, 1))}.bg-slate-800{--tw-bg-opacity: 1;background-color:rgb(30 41 59 / var(--tw-bg-opacity, 1))}.bg-slate-900{--tw-bg-opacity: 1;background-color:rgb(15 23 42 / var(--tw-bg-opacity, 1))}.bg-slate-900\/60{background-color:#0f172a99}.bg-slate-900\/90{background-color:#0f172ae6}.bg-slate-950{--tw-bg-opacity: 1;background-color:rgb(2 6 23 / var(--tw-bg-opacity, 1))}.bg-slate-950\/60{background-color:#02061799}.bg-slate-950\/70{background-color:#020617b3}.bg-slate-950\/80{background-color:#020617cc}.fill-white{fill:#fff}.object-contain{-o-object-fit:contain;object-fit:contain}.p-0\.5{padding:.125rem}.p-1{padding:.25rem}.p-1\.5{padding:.375rem}.p-12{padding:3rem}.p-16{padding:4rem}.p-2{padding:.5rem}.p-2\.5{padding:.625rem}.p-3{padding:.75rem}.p-3\.5{padding:.875rem}.p-4{padding:1rem}.p-5{padding:1.25rem}.p-6{padding:1.5rem}.p-8{padding:2rem}.px-1{padding-left:.25rem;padding-right:.25rem}.px-1\.5{padding-left:.375rem;padding-right:.375rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-2\.5{padding-left:.625rem;padding-right:.625rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-3\.5{padding-left:.875rem;padding-right:.875rem}.px-4{padding-left:1rem;padding-right:1rem}.px-5{padding-left:1.25rem;padding-right:1.25rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.py-0\.5{padding-top:.125rem;padding-bottom:.125rem}.py-1{padding-top:.25rem;padding-bottom:.25rem}.py-1\.5{padding-top:.375rem;padding-bottom:.375rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.py-2\.5{padding-top:.625rem;padding-bottom:.625rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.py-3\.5{padding-top:.875rem;padding-bottom:.875rem}.py-6{padding-top:1.5rem;padding-bottom:1.5rem}.py-8{padding-top:2rem;padding-bottom:2rem}.pb-2{padding-bottom:.5rem}.pb-3{padding-bottom:.75rem}.pb-4{padding-bottom:1rem}.pb-6{padding-bottom:1.5rem}.pl-10{padding-left:2.5rem}.pl-3{padding-left:.75rem}.pl-3\.5{padding-left:.875rem}.pl-9{padding-left:2.25rem}.pr-10{padding-right:2.5rem}.pr-16{padding-right:4rem}.pr-3\.5{padding-right:.875rem}.pt-1{padding-top:.25rem}.pt-1\.5{padding-top:.375rem}.pt-2{padding-top:.5rem}.pt-3{padding-top:.75rem}.pt-4{padding-top:1rem}.pt-5{padding-top:1.25rem}.pt-6{padding-top:1.5rem}.text-left{text-align:left}.text-center{text-align:center}.text-right{text-align:right}.align-top{vertical-align:top}.font-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.font-sans{font-family:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol,"Noto Color Emoji"}.font-serif{font-family:ui-serif,Georgia,Cambria,Times New Roman,Times,serif}.text-2xl{font-size:1.5rem;line-height:2rem}.text-3xl{font-size:1.875rem;line-height:2.25rem}.text-\[10px\]{font-size:10px}.text-\[11px\]{font-size:11px}.text-\[9px\]{font-size:9px}.text-base{font-size:1rem;line-height:1.5rem}.text-lg{font-size:1.125rem;line-height:1.75rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xl{font-size:1.25rem;line-height:1.75rem}.text-xs{font-size:.75rem;line-height:1rem}.font-bold{font-weight:700}.font-medium{font-weight:500}.font-normal{font-weight:400}.font-semibold{font-weight:600}.uppercase{text-transform:uppercase}.italic{font-style:italic}.leading-none{line-height:1}.leading-tight{line-height:1.25}.tracking-tight{letter-spacing:-.025em}.tracking-wide{letter-spacing:.025em}.tracking-wider{letter-spacing:.05em}.tracking-widest{letter-spacing:.1em}.text-amber-300{--tw-text-opacity: 1;color:rgb(252 211 77 / var(--tw-text-opacity, 1))}.text-amber-400{--tw-text-opacity: 1;color:rgb(251 191 36 / var(--tw-text-opacity, 1))}.text-amber-500{--tw-text-opacity: 1;color:rgb(245 158 11 / var(--tw-text-opacity, 1))}.text-blue-400{--tw-text-opacity: 1;color:rgb(96 165 250 / var(--tw-text-opacity, 1))}.text-blue-500{--tw-text-opacity: 1;color:rgb(59 130 246 / var(--tw-text-opacity, 1))}.text-emerald-400{--tw-text-opacity: 1;color:rgb(52 211 153 / var(--tw-text-opacity, 1))}.text-emerald-400\/80{color:#34d399cc}.text-emerald-500{--tw-text-opacity: 1;color:rgb(16 185 129 / var(--tw-text-opacity, 1))}.text-indigo-300{--tw-text-opacity: 1;color:rgb(165 180 252 / var(--tw-text-opacity, 1))}.text-indigo-400{--tw-text-opacity: 1;color:rgb(129 140 248 / var(--tw-text-opacity, 1))}.text-indigo-500{--tw-text-opacity: 1;color:rgb(99 102 241 / var(--tw-text-opacity, 1))}.text-purple-400{--tw-text-opacity: 1;color:rgb(192 132 252 / var(--tw-text-opacity, 1))}.text-red-400{--tw-text-opacity: 1;color:rgb(248 113 113 / var(--tw-text-opacity, 1))}.text-red-500{--tw-text-opacity: 1;color:rgb(239 68 68 / var(--tw-text-opacity, 1))}.text-slate-200{--tw-text-opacity: 1;color:rgb(226 232 240 / var(--tw-text-opacity, 1))}.text-slate-300{--tw-text-opacity: 1;color:rgb(203 213 225 / var(--tw-text-opacity, 1))}.text-slate-400{--tw-text-opacity: 1;color:rgb(148 163 184 / var(--tw-text-opacity, 1))}.text-slate-500{--tw-text-opacity: 1;color:rgb(100 116 139 / var(--tw-text-opacity, 1))}.text-slate-950{--tw-text-opacity: 1;color:rgb(2 6 23 / var(--tw-text-opacity, 1))}.text-white{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.line-through{text-decoration-line:line-through}.antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.opacity-30{opacity:.3}.opacity-40{opacity:.4}.opacity-50{opacity:.5}.opacity-80{opacity:.8}.shadow-2xl{--tw-shadow: 0 25px 50px -12px rgb(0 0 0 / .25);--tw-shadow-colored: 0 25px 50px -12px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-lg{--tw-shadow: 0 10px 15px -3px rgb(0 0 0 / .1), 0 4px 6px -4px rgb(0 0 0 / .1);--tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-md{--tw-shadow: 0 4px 6px -1px rgb(0 0 0 / .1), 0 2px 4px -2px rgb(0 0 0 / .1);--tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-sm{--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-xl{--tw-shadow: 0 20px 25px -5px rgb(0 0 0 / .1), 0 8px 10px -6px rgb(0 0 0 / .1);--tw-shadow-colored: 0 20px 25px -5px var(--tw-shadow-color), 0 8px 10px -6px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-blue-500\/10{--tw-shadow-color: rgb(59 130 246 / .1);--tw-shadow: var(--tw-shadow-colored)}.shadow-blue-600\/30{--tw-shadow-color: rgb(37 99 235 / .3);--tw-shadow: var(--tw-shadow-colored)}.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.backdrop-blur-sm{--tw-backdrop-blur: blur(4px);-webkit-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.transition{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.duration-150{transition-duration:.15s}.duration-200{transition-duration:.2s}:root{--font-display: "Space Grotesk", system-ui, sans-serif;--font-body: "Plus Jakarta Sans", system-ui, sans-serif;--font-mono: "JetBrains Mono", monospace;--color-accent: #E05A47;--brand-primary: var(--color-accent)}:root,[data-theme=dark]{--color-paper: #0E0F12;--color-surface: #15161A;--color-surface-hover: #1C1D23;--color-border-grid: #282932;--color-border-subtle: #1F2026;--color-text: #F0F0EE;--color-text-muted: #9E9FAA;--color-text-dim: #5C5D66;--color-bg-subtle: #090A0C}[data-theme=light]{--color-paper: #F8F7F4;--color-surface: #FFFFFF;--color-surface-hover: #F0EEE8;--color-border-grid: #D8D5CB;--color-border-subtle: #E8E5DC;--color-text: #141518;--color-text-muted: #555660;--color-text-dim: #888994;--color-bg-subtle: #EFECE5}body{background-color:var(--color-paper);color:var(--color-text);font-family:var(--font-body);background-image:radial-gradient(rgba(120,120,120,.08) 1px,transparent 1px);background-size:28px 28px;overflow-x:clip;transition:background-color .15s ease,color .15s ease}.font-display,.font-serif{font-family:var(--font-display)!important;font-style:normal!important}.font-mono{font-family:var(--font-mono)!important}.font-sans{font-family:var(--font-body)!important}.bg-canvas,.bg-paper{background-color:var(--color-paper)!important}.bg-surface{background-color:var(--color-surface)!important}.bg-surface-hover{background-color:var(--color-surface-hover)!important}.bg-subtle{background-color:var(--color-bg-subtle)!important}.text-main{color:var(--color-text)!important}.text-muted{color:var(--color-text-muted)!important}.text-dim{color:var(--color-text-dim)!important}.border-grid{border-color:var(--color-border-grid)!important}.border-subtle{border-color:var(--color-border-subtle)!important}.input-field{background-color:var(--color-bg-subtle)!important;color:var(--color-text)!important;border-color:var(--color-border-grid)!important}.input-field:focus{border-color:var(--color-text-muted)!important;outline:none!important}.hallmark-panel{background-color:var(--color-surface);border:1px solid var(--color-border-grid);box-shadow:0 1px 3px #0000000d}.hallmark-card{background-color:var(--color-surface);border:1px solid var(--color-border-grid)}.hallmark-card:hover{border-color:var(--color-text-muted);background-color:var(--color-surface-hover)}.bg-brand-primary{background-color:var(--brand-primary)!important}.text-brand-primary{color:var(--brand-primary)!important}.border-brand-primary{border-color:var(--brand-primary)!important}@media print{body{background:#fff!important;color:#000!important;background-image:none!important}.no-print{display:none!important}.print-only{display:block!important}.hallmark-panel,.hallmark-card{background:none!important;border:1px solid #000!important;box-shadow:none!important}table{width:100%!important;border-collapse:collapse!important}th,td{border:1px solid #000!important;padding:6px!important;color:#000!important}}.hover\:border-red-500\/20:hover{border-color:#ef444433}.hover\:border-slate-700:hover{--tw-border-opacity: 1;border-color:rgb(51 65 85 / var(--tw-border-opacity, 1))}.hover\:bg-amber-500\/20:hover{background-color:#f59e0b33}.hover\:bg-amber-500\/30:hover{background-color:#f59e0b4d}.hover\:bg-blue-500:hover{--tw-bg-opacity: 1;background-color:rgb(59 130 246 / var(--tw-bg-opacity, 1))}.hover\:bg-blue-500\/20:hover{background-color:#3b82f633}.hover\:bg-emerald-500:hover{--tw-bg-opacity: 1;background-color:rgb(16 185 129 / var(--tw-bg-opacity, 1))}.hover\:bg-emerald-500\/20:hover{background-color:#10b98133}.hover\:bg-indigo-500:hover{--tw-bg-opacity: 1;background-color:rgb(99 102 241 / var(--tw-bg-opacity, 1))}.hover\:bg-indigo-500\/20:hover{background-color:#6366f133}.hover\:bg-red-500\/10:hover{background-color:#ef44441a}.hover\:bg-red-500\/20:hover{background-color:#ef444433}.hover\:bg-red-600\/30:hover{background-color:#dc26264d}.hover\:bg-slate-700:hover{--tw-bg-opacity: 1;background-color:rgb(51 65 85 / var(--tw-bg-opacity, 1))}.hover\:bg-slate-800:hover{--tw-bg-opacity: 1;background-color:rgb(30 41 59 / var(--tw-bg-opacity, 1))}.hover\:bg-slate-900\/40:hover{background-color:#0f172a66}.hover\:bg-white:hover{--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1))}.hover\:text-indigo-300:hover{--tw-text-opacity: 1;color:rgb(165 180 252 / var(--tw-text-opacity, 1))}.hover\:text-red-400:hover{--tw-text-opacity: 1;color:rgb(248 113 113 / var(--tw-text-opacity, 1))}.hover\:text-red-500:hover{--tw-text-opacity: 1;color:rgb(239 68 68 / var(--tw-text-opacity, 1))}.hover\:text-white:hover{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.hover\:underline:hover{text-decoration-line:underline}.hover\:brightness-110:hover{--tw-brightness: brightness(1.1);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.focus\:border-blue-500:focus{--tw-border-opacity: 1;border-color:rgb(59 130 246 / var(--tw-border-opacity, 1))}.focus\:border-slate-600:focus{--tw-border-opacity: 1;border-color:rgb(71 85 105 / var(--tw-border-opacity, 1))}.focus\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}.disabled\:opacity-50:disabled{opacity:.5}.group:hover .group-hover\:text-amber-500{--tw-text-opacity: 1;color:rgb(245 158 11 / var(--tw-text-opacity, 1))}@media (min-width: 640px){.sm\:col-span-1{grid-column:span 1 / span 1}.sm\:col-span-2{grid-column:span 2 / span 2}.sm\:col-span-3{grid-column:span 3 / span 3}.sm\:col-span-4{grid-column:span 4 / span 4}.sm\:flex{display:flex}.sm\:min-h-\[110px\]{min-height:110px}.sm\:grid-cols-12{grid-template-columns:repeat(12,minmax(0,1fr))}.sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.sm\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.sm\:flex-row{flex-direction:row}.sm\:items-center{align-items:center}.sm\:p-10{padding:2.5rem}.sm\:p-8{padding:2rem}.sm\:px-6{padding-left:1.5rem;padding-right:1.5rem}.sm\:text-4xl{font-size:2.25rem;line-height:2.5rem}.sm\:text-5xl{font-size:3rem;line-height:1}.sm\:text-sm{font-size:.875rem;line-height:1.25rem}}@media (min-width: 768px){.md\:flex{display:flex}.md\:hidden{display:none}.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.md\:flex-row{flex-direction:row}.md\:items-center{align-items:center}}@media (min-width: 1024px){.lg\:col-span-3{grid-column:span 3 / span 3}.lg\:col-span-4{grid-column:span 4 / span 4}.lg\:inline{display:inline}.lg\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.lg\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.lg\:px-8{padding-left:2rem;padding-right:2rem}} diff --git a/frontend/dist/assets/index-CeGSMgG7.js b/frontend/dist/assets/index-CeGSMgG7.js new file mode 100644 index 0000000..6c97f37 --- /dev/null +++ b/frontend/dist/assets/index-CeGSMgG7.js @@ -0,0 +1,1268 @@ +var k0=Object.defineProperty;var Bf=e=>{throw TypeError(e)};var _0=(e,t,n)=>t in e?k0(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n;var ne=(e,t,n)=>_0(e,typeof t!="symbol"?t+"":t,n),Nu=(e,t,n)=>t.has(e)||Bf("Cannot "+n);var _=(e,t,n)=>(Nu(e,t,"read from private field"),n?n.call(e):t.get(e)),ie=(e,t,n)=>t.has(e)?Bf("Cannot add the same private member more than once"):t instanceof WeakSet?t.add(e):t.set(e,n),re=(e,t,n,r)=>(Nu(e,t,"write to private field"),r?r.call(e,n):t.set(e,n),n),me=(e,t,n)=>(Nu(e,t,"access private method"),n);(function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const s of document.querySelectorAll('link[rel="modulepreload"]'))r(s);new MutationObserver(s=>{for(const l of s)if(l.type==="childList")for(const a of l.addedNodes)a.tagName==="LINK"&&a.rel==="modulepreload"&&r(a)}).observe(document,{childList:!0,subtree:!0});function n(s){const l={};return s.integrity&&(l.integrity=s.integrity),s.referrerPolicy&&(l.referrerPolicy=s.referrerPolicy),s.crossOrigin==="use-credentials"?l.credentials="include":s.crossOrigin==="anonymous"?l.credentials="omit":l.credentials="same-origin",l}function r(s){if(s.ep)return;s.ep=!0;const l=n(s);fetch(s.href,l)}})();function S0(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var Ep={exports:{}},Wo={},Cp={exports:{}},pe={};/** + * @license React + * react.production.min.js + * + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */var Ji=Symbol.for("react.element"),N0=Symbol.for("react.portal"),j0=Symbol.for("react.fragment"),E0=Symbol.for("react.strict_mode"),C0=Symbol.for("react.profiler"),T0=Symbol.for("react.provider"),A0=Symbol.for("react.context"),P0=Symbol.for("react.forward_ref"),L0=Symbol.for("react.suspense"),M0=Symbol.for("react.memo"),R0=Symbol.for("react.lazy"),Hf=Symbol.iterator;function $0(e){return e===null||typeof e!="object"?null:(e=Hf&&e[Hf]||e["@@iterator"],typeof e=="function"?e:null)}var Tp={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},Ap=Object.assign,Pp={};function Ml(e,t,n){this.props=e,this.context=t,this.refs=Pp,this.updater=n||Tp}Ml.prototype.isReactComponent={};Ml.prototype.setState=function(e,t){if(typeof e!="object"&&typeof e!="function"&&e!=null)throw Error("setState(...): takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,e,t,"setState")};Ml.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this,e,"forceUpdate")};function Lp(){}Lp.prototype=Ml.prototype;function kd(e,t,n){this.props=e,this.context=t,this.refs=Pp,this.updater=n||Tp}var _d=kd.prototype=new Lp;_d.constructor=kd;Ap(_d,Ml.prototype);_d.isPureReactComponent=!0;var Kf=Array.isArray,Mp=Object.prototype.hasOwnProperty,Sd={current:null},Rp={key:!0,ref:!0,__self:!0,__source:!0};function $p(e,t,n){var r,s={},l=null,a=null;if(t!=null)for(r in t.ref!==void 0&&(a=t.ref),t.key!==void 0&&(l=""+t.key),t)Mp.call(t,r)&&!Rp.hasOwnProperty(r)&&(s[r]=t[r]);var o=arguments.length-2;if(o===1)s.children=n;else if(1>>1,I=M[$];if(0>>1;$s(ee,x))Aes(gt,ee)?(M[$]=gt,M[Ae]=x,$=Ae):(M[$]=ee,M[W]=x,$=W);else if(Aes(gt,x))M[$]=gt,M[Ae]=x,$=Ae;else break e}}return U}function s(M,U){var x=M.sortIndex-U.sortIndex;return x!==0?x:M.id-U.id}if(typeof performance=="object"&&typeof performance.now=="function"){var l=performance;e.unstable_now=function(){return l.now()}}else{var a=Date,o=a.now();e.unstable_now=function(){return a.now()-o}}var u=[],c=[],f=1,v=null,d=3,w=!1,y=!1,S=!1,R=typeof setTimeout=="function"?setTimeout:null,g=typeof clearTimeout=="function"?clearTimeout:null,p=typeof setImmediate<"u"?setImmediate:null;typeof navigator<"u"&&navigator.scheduling!==void 0&&navigator.scheduling.isInputPending!==void 0&&navigator.scheduling.isInputPending.bind(navigator.scheduling);function m(M){for(var U=n(c);U!==null;){if(U.callback===null)r(c);else if(U.startTime<=M)r(c),U.sortIndex=U.expirationTime,t(u,U);else break;U=n(c)}}function N(M){if(S=!1,m(M),!y)if(n(u)!==null)y=!0,Te(C);else{var U=n(c);U!==null&&V(N,U.startTime-M)}}function C(M,U){y=!1,S&&(S=!1,g(L),L=-1),w=!0;var x=d;try{for(m(U),v=n(u);v!==null&&(!(v.expirationTime>U)||M&&!Y());){var $=v.callback;if(typeof $=="function"){v.callback=null,d=v.priorityLevel;var I=$(v.expirationTime<=U);U=e.unstable_now(),typeof I=="function"?v.callback=I:v===n(u)&&r(u),m(U)}else r(u);v=n(u)}if(v!==null)var K=!0;else{var W=n(c);W!==null&&V(N,W.startTime-U),K=!1}return K}finally{v=null,d=x,w=!1}}var E=!1,j=null,L=-1,q=5,P=-1;function Y(){return!(e.unstable_now()-PM||125$?(M.sortIndex=x,t(c,M),n(u)===null&&M===n(c)&&(S?(g(L),L=-1):S=!0,V(N,x-$))):(M.sortIndex=I,t(u,M),y||w||(y=!0,Te(C))),M},e.unstable_shouldYield=Y,e.unstable_wrapCallback=function(M){var U=d;return function(){var x=d;d=U;try{return M.apply(this,arguments)}finally{d=x}}}})(Up);Op.exports=Up;var W0=Op.exports;/** + * @license React + * react-dom.production.min.js + * + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */var G0=A,Zt=W0;function D(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,n=1;n"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),ac=Object.prototype.hasOwnProperty,q0=/^[:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD][:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\-.0-9\u00B7\u0300-\u036F\u203F-\u2040]*$/,Gf={},qf={};function Q0(e){return ac.call(qf,e)?!0:ac.call(Gf,e)?!1:q0.test(e)?qf[e]=!0:(Gf[e]=!0,!1)}function Y0(e,t,n,r){if(n!==null&&n.type===0)return!1;switch(typeof t){case"function":case"symbol":return!0;case"boolean":return r?!1:n!==null?!n.acceptsBooleans:(e=e.toLowerCase().slice(0,5),e!=="data-"&&e!=="aria-");default:return!1}}function Z0(e,t,n,r){if(t===null||typeof t>"u"||Y0(e,t,n,r))return!0;if(r)return!1;if(n!==null)switch(n.type){case 3:return!t;case 4:return t===!1;case 5:return isNaN(t);case 6:return isNaN(t)||1>t}return!1}function At(e,t,n,r,s,l,a){this.acceptsBooleans=t===2||t===3||t===4,this.attributeName=r,this.attributeNamespace=s,this.mustUseProperty=n,this.propertyName=e,this.type=t,this.sanitizeURL=l,this.removeEmptyString=a}var pt={};"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style".split(" ").forEach(function(e){pt[e]=new At(e,0,!1,e,null,!1,!1)});[["acceptCharset","accept-charset"],["className","class"],["htmlFor","for"],["httpEquiv","http-equiv"]].forEach(function(e){var t=e[0];pt[t]=new At(t,1,!1,e[1],null,!1,!1)});["contentEditable","draggable","spellCheck","value"].forEach(function(e){pt[e]=new At(e,2,!1,e.toLowerCase(),null,!1,!1)});["autoReverse","externalResourcesRequired","focusable","preserveAlpha"].forEach(function(e){pt[e]=new At(e,2,!1,e,null,!1,!1)});"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture disableRemotePlayback formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope".split(" ").forEach(function(e){pt[e]=new At(e,3,!1,e.toLowerCase(),null,!1,!1)});["checked","multiple","muted","selected"].forEach(function(e){pt[e]=new At(e,3,!0,e,null,!1,!1)});["capture","download"].forEach(function(e){pt[e]=new At(e,4,!1,e,null,!1,!1)});["cols","rows","size","span"].forEach(function(e){pt[e]=new At(e,6,!1,e,null,!1,!1)});["rowSpan","start"].forEach(function(e){pt[e]=new At(e,5,!1,e.toLowerCase(),null,!1,!1)});var jd=/[\-:]([a-z])/g;function Ed(e){return e[1].toUpperCase()}"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height".split(" ").forEach(function(e){var t=e.replace(jd,Ed);pt[t]=new At(t,1,!1,e,null,!1,!1)});"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type".split(" ").forEach(function(e){var t=e.replace(jd,Ed);pt[t]=new At(t,1,!1,e,"http://www.w3.org/1999/xlink",!1,!1)});["xml:base","xml:lang","xml:space"].forEach(function(e){var t=e.replace(jd,Ed);pt[t]=new At(t,1,!1,e,"http://www.w3.org/XML/1998/namespace",!1,!1)});["tabIndex","crossOrigin"].forEach(function(e){pt[e]=new At(e,1,!1,e.toLowerCase(),null,!1,!1)});pt.xlinkHref=new At("xlinkHref",1,!1,"xlink:href","http://www.w3.org/1999/xlink",!0,!1);["src","href","action","formAction"].forEach(function(e){pt[e]=new At(e,1,!1,e.toLowerCase(),null,!0,!0)});function Cd(e,t,n,r){var s=pt.hasOwnProperty(t)?pt[t]:null;(s!==null?s.type!==0:r||!(2o||s[a]!==l[o]){var u=` +`+s[a].replace(" at new "," at ");return e.displayName&&u.includes("")&&(u=u.replace("",e.displayName)),u}while(1<=a&&0<=o);break}}}finally{Cu=!1,Error.prepareStackTrace=n}return(e=e?e.displayName||e.name:"")?ri(e):""}function J0(e){switch(e.tag){case 5:return ri(e.type);case 16:return ri("Lazy");case 13:return ri("Suspense");case 19:return ri("SuspenseList");case 0:case 2:case 15:return e=Tu(e.type,!1),e;case 11:return e=Tu(e.type.render,!1),e;case 1:return e=Tu(e.type,!0),e;default:return""}}function dc(e){if(e==null)return null;if(typeof e=="function")return e.displayName||e.name||null;if(typeof e=="string")return e;switch(e){case Ws:return"Fragment";case Ks:return"Portal";case oc:return"Profiler";case Td:return"StrictMode";case uc:return"Suspense";case cc:return"SuspenseList"}if(typeof e=="object")switch(e.$$typeof){case Bp:return(e.displayName||"Context")+".Consumer";case Vp:return(e._context.displayName||"Context")+".Provider";case Ad:var t=e.render;return e=e.displayName,e||(e=t.displayName||t.name||"",e=e!==""?"ForwardRef("+e+")":"ForwardRef"),e;case Pd:return t=e.displayName||null,t!==null?t:dc(e.type)||"Memo";case Tr:t=e._payload,e=e._init;try{return dc(e(t))}catch{}}return null}function X0(e){var t=e.type;switch(e.tag){case 24:return"Cache";case 9:return(t.displayName||"Context")+".Consumer";case 10:return(t._context.displayName||"Context")+".Provider";case 18:return"DehydratedFragment";case 11:return e=t.render,e=e.displayName||e.name||"",t.displayName||(e!==""?"ForwardRef("+e+")":"ForwardRef");case 7:return"Fragment";case 5:return t;case 4:return"Portal";case 3:return"Root";case 6:return"Text";case 16:return dc(t);case 8:return t===Td?"StrictMode":"Mode";case 22:return"Offscreen";case 12:return"Profiler";case 21:return"Scope";case 13:return"Suspense";case 19:return"SuspenseList";case 25:return"TracingMarker";case 1:case 0:case 17:case 2:case 14:case 15:if(typeof t=="function")return t.displayName||t.name||null;if(typeof t=="string")return t}return null}function Qr(e){switch(typeof e){case"boolean":case"number":case"string":case"undefined":return e;case"object":return e;default:return""}}function Kp(e){var t=e.type;return(e=e.nodeName)&&e.toLowerCase()==="input"&&(t==="checkbox"||t==="radio")}function ex(e){var t=Kp(e)?"checked":"value",n=Object.getOwnPropertyDescriptor(e.constructor.prototype,t),r=""+e[t];if(!e.hasOwnProperty(t)&&typeof n<"u"&&typeof n.get=="function"&&typeof n.set=="function"){var s=n.get,l=n.set;return Object.defineProperty(e,t,{configurable:!0,get:function(){return s.call(this)},set:function(a){r=""+a,l.call(this,a)}}),Object.defineProperty(e,t,{enumerable:n.enumerable}),{getValue:function(){return r},setValue:function(a){r=""+a},stopTracking:function(){e._valueTracker=null,delete e[t]}}}}function Ca(e){e._valueTracker||(e._valueTracker=ex(e))}function Wp(e){if(!e)return!1;var t=e._valueTracker;if(!t)return!0;var n=t.getValue(),r="";return e&&(r=Kp(e)?e.checked?"true":"false":e.value),e=r,e!==n?(t.setValue(e),!0):!1}function ho(e){if(e=e||(typeof document<"u"?document:void 0),typeof e>"u")return null;try{return e.activeElement||e.body}catch{return e.body}}function fc(e,t){var n=t.checked;return Ke({},t,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:n??e._wrapperState.initialChecked})}function Yf(e,t){var n=t.defaultValue==null?"":t.defaultValue,r=t.checked!=null?t.checked:t.defaultChecked;n=Qr(t.value!=null?t.value:n),e._wrapperState={initialChecked:r,initialValue:n,controlled:t.type==="checkbox"||t.type==="radio"?t.checked!=null:t.value!=null}}function Gp(e,t){t=t.checked,t!=null&&Cd(e,"checked",t,!1)}function hc(e,t){Gp(e,t);var n=Qr(t.value),r=t.type;if(n!=null)r==="number"?(n===0&&e.value===""||e.value!=n)&&(e.value=""+n):e.value!==""+n&&(e.value=""+n);else if(r==="submit"||r==="reset"){e.removeAttribute("value");return}t.hasOwnProperty("value")?pc(e,t.type,n):t.hasOwnProperty("defaultValue")&&pc(e,t.type,Qr(t.defaultValue)),t.checked==null&&t.defaultChecked!=null&&(e.defaultChecked=!!t.defaultChecked)}function Zf(e,t,n){if(t.hasOwnProperty("value")||t.hasOwnProperty("defaultValue")){var r=t.type;if(!(r!=="submit"&&r!=="reset"||t.value!==void 0&&t.value!==null))return;t=""+e._wrapperState.initialValue,n||t===e.value||(e.value=t),e.defaultValue=t}n=e.name,n!==""&&(e.name=""),e.defaultChecked=!!e._wrapperState.initialChecked,n!==""&&(e.name=n)}function pc(e,t,n){(t!=="number"||ho(e.ownerDocument)!==e)&&(n==null?e.defaultValue=""+e._wrapperState.initialValue:e.defaultValue!==""+n&&(e.defaultValue=""+n))}var si=Array.isArray;function sl(e,t,n,r){if(e=e.options,t){t={};for(var s=0;s"+t.valueOf().toString()+"",t=Ta.firstChild;e.firstChild;)e.removeChild(e.firstChild);for(;t.firstChild;)e.appendChild(t.firstChild)}});function ji(e,t){if(t){var n=e.firstChild;if(n&&n===e.lastChild&&n.nodeType===3){n.nodeValue=t;return}}e.textContent=t}var ci={animationIterationCount:!0,aspectRatio:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},tx=["Webkit","ms","Moz","O"];Object.keys(ci).forEach(function(e){tx.forEach(function(t){t=t+e.charAt(0).toUpperCase()+e.substring(1),ci[t]=ci[e]})});function Zp(e,t,n){return t==null||typeof t=="boolean"||t===""?"":n||typeof t!="number"||t===0||ci.hasOwnProperty(e)&&ci[e]?(""+t).trim():t+"px"}function Jp(e,t){e=e.style;for(var n in t)if(t.hasOwnProperty(n)){var r=n.indexOf("--")===0,s=Zp(n,t[n],r);n==="float"&&(n="cssFloat"),r?e.setProperty(n,s):e[n]=s}}var nx=Ke({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});function vc(e,t){if(t){if(nx[e]&&(t.children!=null||t.dangerouslySetInnerHTML!=null))throw Error(D(137,e));if(t.dangerouslySetInnerHTML!=null){if(t.children!=null)throw Error(D(60));if(typeof t.dangerouslySetInnerHTML!="object"||!("__html"in t.dangerouslySetInnerHTML))throw Error(D(61))}if(t.style!=null&&typeof t.style!="object")throw Error(D(62))}}function xc(e,t){if(e.indexOf("-")===-1)return typeof t.is=="string";switch(e){case"annotation-xml":case"color-profile":case"font-face":case"font-face-src":case"font-face-uri":case"font-face-format":case"font-face-name":case"missing-glyph":return!1;default:return!0}}var yc=null;function Ld(e){return e=e.target||e.srcElement||window,e.correspondingUseElement&&(e=e.correspondingUseElement),e.nodeType===3?e.parentNode:e}var wc=null,ll=null,il=null;function eh(e){if(e=ta(e)){if(typeof wc!="function")throw Error(D(280));var t=e.stateNode;t&&(t=Zo(t),wc(e.stateNode,e.type,t))}}function Xp(e){ll?il?il.push(e):il=[e]:ll=e}function em(){if(ll){var e=ll,t=il;if(il=ll=null,eh(e),t)for(e=0;e>>=0,e===0?32:31-(hx(e)/px|0)|0}var Aa=64,Pa=4194304;function li(e){switch(e&-e){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return e&4194240;case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:return e&130023424;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 1073741824;default:return e}}function vo(e,t){var n=e.pendingLanes;if(n===0)return 0;var r=0,s=e.suspendedLanes,l=e.pingedLanes,a=n&268435455;if(a!==0){var o=a&~s;o!==0?r=li(o):(l&=a,l!==0&&(r=li(l)))}else a=n&~s,a!==0?r=li(a):l!==0&&(r=li(l));if(r===0)return 0;if(t!==0&&t!==r&&!(t&s)&&(s=r&-r,l=t&-t,s>=l||s===16&&(l&4194240)!==0))return t;if(r&4&&(r|=n&16),t=e.entangledLanes,t!==0)for(e=e.entanglements,t&=r;0n;n++)t.push(e);return t}function Xi(e,t,n){e.pendingLanes|=t,t!==536870912&&(e.suspendedLanes=0,e.pingedLanes=0),e=e.eventTimes,t=31-An(t),e[t]=n}function xx(e,t){var n=e.pendingLanes&~t;e.pendingLanes=t,e.suspendedLanes=0,e.pingedLanes=0,e.expiredLanes&=t,e.mutableReadLanes&=t,e.entangledLanes&=t,t=e.entanglements;var r=e.eventTimes;for(e=e.expirationTimes;0=fi),uh=" ",ch=!1;function wm(e,t){switch(e){case"keyup":return Wx.indexOf(t.keyCode)!==-1;case"keydown":return t.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function bm(e){return e=e.detail,typeof e=="object"&&"data"in e?e.data:null}var Gs=!1;function qx(e,t){switch(e){case"compositionend":return bm(t);case"keypress":return t.which!==32?null:(ch=!0,uh);case"textInput":return e=t.data,e===uh&&ch?null:e;default:return null}}function Qx(e,t){if(Gs)return e==="compositionend"||!Ud&&wm(e,t)?(e=xm(),Qa=zd=Dr=null,Gs=!1,e):null;switch(e){case"paste":return null;case"keypress":if(!(t.ctrlKey||t.altKey||t.metaKey)||t.ctrlKey&&t.altKey){if(t.char&&1=t)return{node:n,offset:t-e};e=r}e:{for(;n;){if(n.nextSibling){n=n.nextSibling;break e}n=n.parentNode}n=void 0}n=ph(n)}}function Nm(e,t){return e&&t?e===t?!0:e&&e.nodeType===3?!1:t&&t.nodeType===3?Nm(e,t.parentNode):"contains"in e?e.contains(t):e.compareDocumentPosition?!!(e.compareDocumentPosition(t)&16):!1:!1}function jm(){for(var e=window,t=ho();t instanceof e.HTMLIFrameElement;){try{var n=typeof t.contentWindow.location.href=="string"}catch{n=!1}if(n)e=t.contentWindow;else break;t=ho(e.document)}return t}function Fd(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return t&&(t==="input"&&(e.type==="text"||e.type==="search"||e.type==="tel"||e.type==="url"||e.type==="password")||t==="textarea"||e.contentEditable==="true")}function s1(e){var t=jm(),n=e.focusedElem,r=e.selectionRange;if(t!==n&&n&&n.ownerDocument&&Nm(n.ownerDocument.documentElement,n)){if(r!==null&&Fd(n)){if(t=r.start,e=r.end,e===void 0&&(e=t),"selectionStart"in n)n.selectionStart=t,n.selectionEnd=Math.min(e,n.value.length);else if(e=(t=n.ownerDocument||document)&&t.defaultView||window,e.getSelection){e=e.getSelection();var s=n.textContent.length,l=Math.min(r.start,s);r=r.end===void 0?l:Math.min(r.end,s),!e.extend&&l>r&&(s=r,r=l,l=s),s=mh(n,l);var a=mh(n,r);s&&a&&(e.rangeCount!==1||e.anchorNode!==s.node||e.anchorOffset!==s.offset||e.focusNode!==a.node||e.focusOffset!==a.offset)&&(t=t.createRange(),t.setStart(s.node,s.offset),e.removeAllRanges(),l>r?(e.addRange(t),e.extend(a.node,a.offset)):(t.setEnd(a.node,a.offset),e.addRange(t)))}}for(t=[],e=n;e=e.parentNode;)e.nodeType===1&&t.push({element:e,left:e.scrollLeft,top:e.scrollTop});for(typeof n.focus=="function"&&n.focus(),n=0;n=document.documentMode,qs=null,jc=null,pi=null,Ec=!1;function gh(e,t,n){var r=n.window===n?n.document:n.nodeType===9?n:n.ownerDocument;Ec||qs==null||qs!==ho(r)||(r=qs,"selectionStart"in r&&Fd(r)?r={start:r.selectionStart,end:r.selectionEnd}:(r=(r.ownerDocument&&r.ownerDocument.defaultView||window).getSelection(),r={anchorNode:r.anchorNode,anchorOffset:r.anchorOffset,focusNode:r.focusNode,focusOffset:r.focusOffset}),pi&&Li(pi,r)||(pi=r,r=wo(jc,"onSelect"),0Zs||(e.current=Mc[Zs],Mc[Zs]=null,Zs--)}function Le(e,t){Zs++,Mc[Zs]=e.current,e.current=t}var Yr={},kt=ts(Yr),zt=ts(!1),Ns=Yr;function kl(e,t){var n=e.type.contextTypes;if(!n)return Yr;var r=e.stateNode;if(r&&r.__reactInternalMemoizedUnmaskedChildContext===t)return r.__reactInternalMemoizedMaskedChildContext;var s={},l;for(l in n)s[l]=t[l];return r&&(e=e.stateNode,e.__reactInternalMemoizedUnmaskedChildContext=t,e.__reactInternalMemoizedMaskedChildContext=s),s}function It(e){return e=e.childContextTypes,e!=null}function ko(){De(zt),De(kt)}function _h(e,t,n){if(kt.current!==Yr)throw Error(D(168));Le(kt,t),Le(zt,n)}function $m(e,t,n){var r=e.stateNode;if(t=t.childContextTypes,typeof r.getChildContext!="function")return n;r=r.getChildContext();for(var s in r)if(!(s in t))throw Error(D(108,X0(e)||"Unknown",s));return Ke({},n,r)}function _o(e){return e=(e=e.stateNode)&&e.__reactInternalMemoizedMergedChildContext||Yr,Ns=kt.current,Le(kt,e),Le(zt,zt.current),!0}function Sh(e,t,n){var r=e.stateNode;if(!r)throw Error(D(169));n?(e=$m(e,t,Ns),r.__reactInternalMemoizedMergedChildContext=e,De(zt),De(kt),Le(kt,e)):De(zt),Le(zt,n)}var lr=null,Jo=!1,Bu=!1;function Dm(e){lr===null?lr=[e]:lr.push(e)}function g1(e){Jo=!0,Dm(e)}function ns(){if(!Bu&&lr!==null){Bu=!0;var e=0,t=je;try{var n=lr;for(je=1;e>=a,s-=a,dr=1<<32-An(t)+s|n<L?(q=j,j=null):q=j.sibling;var P=d(g,j,m[L],N);if(P===null){j===null&&(j=q);break}e&&j&&P.alternate===null&&t(g,j),p=l(P,p,L),E===null?C=P:E.sibling=P,E=P,j=q}if(L===m.length)return n(g,j),Ue&&is(g,L),C;if(j===null){for(;LL?(q=j,j=null):q=j.sibling;var Y=d(g,j,P.value,N);if(Y===null){j===null&&(j=q);break}e&&j&&Y.alternate===null&&t(g,j),p=l(Y,p,L),E===null?C=Y:E.sibling=Y,E=Y,j=q}if(P.done)return n(g,j),Ue&&is(g,L),C;if(j===null){for(;!P.done;L++,P=m.next())P=v(g,P.value,N),P!==null&&(p=l(P,p,L),E===null?C=P:E.sibling=P,E=P);return Ue&&is(g,L),C}for(j=r(g,j);!P.done;L++,P=m.next())P=w(j,g,L,P.value,N),P!==null&&(e&&P.alternate!==null&&j.delete(P.key===null?L:P.key),p=l(P,p,L),E===null?C=P:E.sibling=P,E=P);return e&&j.forEach(function(ae){return t(g,ae)}),Ue&&is(g,L),C}function R(g,p,m,N){if(typeof m=="object"&&m!==null&&m.type===Ws&&m.key===null&&(m=m.props.children),typeof m=="object"&&m!==null){switch(m.$$typeof){case Ea:e:{for(var C=m.key,E=p;E!==null;){if(E.key===C){if(C=m.type,C===Ws){if(E.tag===7){n(g,E.sibling),p=s(E,m.props.children),p.return=g,g=p;break e}}else if(E.elementType===C||typeof C=="object"&&C!==null&&C.$$typeof===Tr&&Eh(C)===E.type){n(g,E.sibling),p=s(E,m.props),p.ref=Jl(g,E,m),p.return=g,g=p;break e}n(g,E);break}else t(g,E);E=E.sibling}m.type===Ws?(p=bs(m.props.children,g.mode,N,m.key),p.return=g,g=p):(N=ro(m.type,m.key,m.props,null,g.mode,N),N.ref=Jl(g,p,m),N.return=g,g=N)}return a(g);case Ks:e:{for(E=m.key;p!==null;){if(p.key===E)if(p.tag===4&&p.stateNode.containerInfo===m.containerInfo&&p.stateNode.implementation===m.implementation){n(g,p.sibling),p=s(p,m.children||[]),p.return=g,g=p;break e}else{n(g,p);break}else t(g,p);p=p.sibling}p=Zu(m,g.mode,N),p.return=g,g=p}return a(g);case Tr:return E=m._init,R(g,p,E(m._payload),N)}if(si(m))return y(g,p,m,N);if(Gl(m))return S(g,p,m,N);Ia(g,m)}return typeof m=="string"&&m!==""||typeof m=="number"?(m=""+m,p!==null&&p.tag===6?(n(g,p.sibling),p=s(p,m),p.return=g,g=p):(n(g,p),p=Yu(m,g.mode,N),p.return=g,g=p),a(g)):n(g,p)}return R}var Sl=Um(!0),Fm=Um(!1),jo=ts(null),Eo=null,el=null,Kd=null;function Wd(){Kd=el=Eo=null}function Gd(e){var t=jo.current;De(jo),e._currentValue=t}function Dc(e,t,n){for(;e!==null;){var r=e.alternate;if((e.childLanes&t)!==t?(e.childLanes|=t,r!==null&&(r.childLanes|=t)):r!==null&&(r.childLanes&t)!==t&&(r.childLanes|=t),e===n)break;e=e.return}}function ol(e,t){Eo=e,Kd=el=null,e=e.dependencies,e!==null&&e.firstContext!==null&&(e.lanes&t&&(Dt=!0),e.firstContext=null)}function gn(e){var t=e._currentValue;if(Kd!==e)if(e={context:e,memoizedValue:t,next:null},el===null){if(Eo===null)throw Error(D(308));el=e,Eo.dependencies={lanes:0,firstContext:e}}else el=el.next=e;return t}var us=null;function qd(e){us===null?us=[e]:us.push(e)}function Vm(e,t,n,r){var s=t.interleaved;return s===null?(n.next=n,qd(t)):(n.next=s.next,s.next=n),t.interleaved=n,xr(e,r)}function xr(e,t){e.lanes|=t;var n=e.alternate;for(n!==null&&(n.lanes|=t),n=e,e=e.return;e!==null;)e.childLanes|=t,n=e.alternate,n!==null&&(n.childLanes|=t),n=e,e=e.return;return n.tag===3?n.stateNode:null}var Ar=!1;function Qd(e){e.updateQueue={baseState:e.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,interleaved:null,lanes:0},effects:null}}function Bm(e,t){e=e.updateQueue,t.updateQueue===e&&(t.updateQueue={baseState:e.baseState,firstBaseUpdate:e.firstBaseUpdate,lastBaseUpdate:e.lastBaseUpdate,shared:e.shared,effects:e.effects})}function pr(e,t){return{eventTime:e,lane:t,tag:0,payload:null,callback:null,next:null}}function Br(e,t,n){var r=e.updateQueue;if(r===null)return null;if(r=r.shared,we&2){var s=r.pending;return s===null?t.next=t:(t.next=s.next,s.next=t),r.pending=t,xr(e,n)}return s=r.interleaved,s===null?(t.next=t,qd(r)):(t.next=s.next,s.next=t),r.interleaved=t,xr(e,n)}function Za(e,t,n){if(t=t.updateQueue,t!==null&&(t=t.shared,(n&4194240)!==0)){var r=t.lanes;r&=e.pendingLanes,n|=r,t.lanes=n,Rd(e,n)}}function Ch(e,t){var n=e.updateQueue,r=e.alternate;if(r!==null&&(r=r.updateQueue,n===r)){var s=null,l=null;if(n=n.firstBaseUpdate,n!==null){do{var a={eventTime:n.eventTime,lane:n.lane,tag:n.tag,payload:n.payload,callback:n.callback,next:null};l===null?s=l=a:l=l.next=a,n=n.next}while(n!==null);l===null?s=l=t:l=l.next=t}else s=l=t;n={baseState:r.baseState,firstBaseUpdate:s,lastBaseUpdate:l,shared:r.shared,effects:r.effects},e.updateQueue=n;return}e=n.lastBaseUpdate,e===null?n.firstBaseUpdate=t:e.next=t,n.lastBaseUpdate=t}function Co(e,t,n,r){var s=e.updateQueue;Ar=!1;var l=s.firstBaseUpdate,a=s.lastBaseUpdate,o=s.shared.pending;if(o!==null){s.shared.pending=null;var u=o,c=u.next;u.next=null,a===null?l=c:a.next=c,a=u;var f=e.alternate;f!==null&&(f=f.updateQueue,o=f.lastBaseUpdate,o!==a&&(o===null?f.firstBaseUpdate=c:o.next=c,f.lastBaseUpdate=u))}if(l!==null){var v=s.baseState;a=0,f=c=u=null,o=l;do{var d=o.lane,w=o.eventTime;if((r&d)===d){f!==null&&(f=f.next={eventTime:w,lane:0,tag:o.tag,payload:o.payload,callback:o.callback,next:null});e:{var y=e,S=o;switch(d=t,w=n,S.tag){case 1:if(y=S.payload,typeof y=="function"){v=y.call(w,v,d);break e}v=y;break e;case 3:y.flags=y.flags&-65537|128;case 0:if(y=S.payload,d=typeof y=="function"?y.call(w,v,d):y,d==null)break e;v=Ke({},v,d);break e;case 2:Ar=!0}}o.callback!==null&&o.lane!==0&&(e.flags|=64,d=s.effects,d===null?s.effects=[o]:d.push(o))}else w={eventTime:w,lane:d,tag:o.tag,payload:o.payload,callback:o.callback,next:null},f===null?(c=f=w,u=v):f=f.next=w,a|=d;if(o=o.next,o===null){if(o=s.shared.pending,o===null)break;d=o,o=d.next,d.next=null,s.lastBaseUpdate=d,s.shared.pending=null}}while(!0);if(f===null&&(u=v),s.baseState=u,s.firstBaseUpdate=c,s.lastBaseUpdate=f,t=s.shared.interleaved,t!==null){s=t;do a|=s.lane,s=s.next;while(s!==t)}else l===null&&(s.shared.lanes=0);Cs|=a,e.lanes=a,e.memoizedState=v}}function Th(e,t,n){if(e=t.effects,t.effects=null,e!==null)for(t=0;tn?n:4,e(!0);var r=Ku.transition;Ku.transition={};try{e(!1),t()}finally{je=n,Ku.transition=r}}function ig(){return vn().memoizedState}function w1(e,t,n){var r=Kr(e);if(n={lane:r,action:n,hasEagerState:!1,eagerState:null,next:null},ag(e))og(t,n);else if(n=Vm(e,t,n,r),n!==null){var s=Et();Pn(n,e,r,s),ug(n,t,r)}}function b1(e,t,n){var r=Kr(e),s={lane:r,action:n,hasEagerState:!1,eagerState:null,next:null};if(ag(e))og(t,s);else{var l=e.alternate;if(e.lanes===0&&(l===null||l.lanes===0)&&(l=t.lastRenderedReducer,l!==null))try{var a=t.lastRenderedState,o=l(a,n);if(s.hasEagerState=!0,s.eagerState=o,Mn(o,a)){var u=t.interleaved;u===null?(s.next=s,qd(t)):(s.next=u.next,u.next=s),t.interleaved=s;return}}catch{}finally{}n=Vm(e,t,s,r),n!==null&&(s=Et(),Pn(n,e,r,s),ug(n,t,r))}}function ag(e){var t=e.alternate;return e===He||t!==null&&t===He}function og(e,t){mi=Ao=!0;var n=e.pending;n===null?t.next=t:(t.next=n.next,n.next=t),e.pending=t}function ug(e,t,n){if(n&4194240){var r=t.lanes;r&=e.pendingLanes,n|=r,t.lanes=n,Rd(e,n)}}var Po={readContext:gn,useCallback:xt,useContext:xt,useEffect:xt,useImperativeHandle:xt,useInsertionEffect:xt,useLayoutEffect:xt,useMemo:xt,useReducer:xt,useRef:xt,useState:xt,useDebugValue:xt,useDeferredValue:xt,useTransition:xt,useMutableSource:xt,useSyncExternalStore:xt,useId:xt,unstable_isNewReconciler:!1},k1={readContext:gn,useCallback:function(e,t){return Fn().memoizedState=[e,t===void 0?null:t],e},useContext:gn,useEffect:Ph,useImperativeHandle:function(e,t,n){return n=n!=null?n.concat([e]):null,Xa(4194308,4,tg.bind(null,t,e),n)},useLayoutEffect:function(e,t){return Xa(4194308,4,e,t)},useInsertionEffect:function(e,t){return Xa(4,2,e,t)},useMemo:function(e,t){var n=Fn();return t=t===void 0?null:t,e=e(),n.memoizedState=[e,t],e},useReducer:function(e,t,n){var r=Fn();return t=n!==void 0?n(t):t,r.memoizedState=r.baseState=t,e={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:e,lastRenderedState:t},r.queue=e,e=e.dispatch=w1.bind(null,He,e),[r.memoizedState,e]},useRef:function(e){var t=Fn();return e={current:e},t.memoizedState=e},useState:Ah,useDebugValue:rf,useDeferredValue:function(e){return Fn().memoizedState=e},useTransition:function(){var e=Ah(!1),t=e[0];return e=y1.bind(null,e[1]),Fn().memoizedState=e,[t,e]},useMutableSource:function(){},useSyncExternalStore:function(e,t,n){var r=He,s=Fn();if(Ue){if(n===void 0)throw Error(D(407));n=n()}else{if(n=t(),ot===null)throw Error(D(349));Es&30||Gm(r,t,n)}s.memoizedState=n;var l={value:n,getSnapshot:t};return s.queue=l,Ph(Qm.bind(null,r,l,e),[e]),r.flags|=2048,Ui(9,qm.bind(null,r,l,n,t),void 0,null),n},useId:function(){var e=Fn(),t=ot.identifierPrefix;if(Ue){var n=fr,r=dr;n=(r&~(1<<32-An(r)-1)).toString(32)+n,t=":"+t+"R"+n,n=Ii++,0<\/script>",e=e.removeChild(e.firstChild)):typeof r.is=="string"?e=a.createElement(n,{is:r.is}):(e=a.createElement(n),n==="select"&&(a=e,r.multiple?a.multiple=!0:r.size&&(a.size=r.size))):e=a.createElementNS(e,n),e[Wn]=t,e[$i]=r,yg(e,t,!1,!1),t.stateNode=e;e:{switch(a=xc(n,r),n){case"dialog":Re("cancel",e),Re("close",e),s=r;break;case"iframe":case"object":case"embed":Re("load",e),s=r;break;case"video":case"audio":for(s=0;sEl&&(t.flags|=128,r=!0,Xl(l,!1),t.lanes=4194304)}else{if(!r)if(e=To(a),e!==null){if(t.flags|=128,r=!0,n=e.updateQueue,n!==null&&(t.updateQueue=n,t.flags|=4),Xl(l,!0),l.tail===null&&l.tailMode==="hidden"&&!a.alternate&&!Ue)return yt(t),null}else 2*qe()-l.renderingStartTime>El&&n!==1073741824&&(t.flags|=128,r=!0,Xl(l,!1),t.lanes=4194304);l.isBackwards?(a.sibling=t.child,t.child=a):(n=l.last,n!==null?n.sibling=a:t.child=a,l.last=a)}return l.tail!==null?(t=l.tail,l.rendering=t,l.tail=t.sibling,l.renderingStartTime=qe(),t.sibling=null,n=Be.current,Le(Be,r?n&1|2:n&1),t):(yt(t),null);case 22:case 23:return cf(),r=t.memoizedState!==null,e!==null&&e.memoizedState!==null!==r&&(t.flags|=8192),r&&t.mode&1?Wt&1073741824&&(yt(t),t.subtreeFlags&6&&(t.flags|=8192)):yt(t),null;case 24:return null;case 25:return null}throw Error(D(156,t.tag))}function A1(e,t){switch(Bd(t),t.tag){case 1:return It(t.type)&&ko(),e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 3:return Nl(),De(zt),De(kt),Jd(),e=t.flags,e&65536&&!(e&128)?(t.flags=e&-65537|128,t):null;case 5:return Zd(t),null;case 13:if(De(Be),e=t.memoizedState,e!==null&&e.dehydrated!==null){if(t.alternate===null)throw Error(D(340));_l()}return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 19:return De(Be),null;case 4:return Nl(),null;case 10:return Gd(t.type._context),null;case 22:case 23:return cf(),null;case 24:return null;default:return null}}var Ua=!1,bt=!1,P1=typeof WeakSet=="function"?WeakSet:Set,H=null;function tl(e,t){var n=e.ref;if(n!==null)if(typeof n=="function")try{n(null)}catch(r){We(e,t,r)}else n.current=null}function Kc(e,t,n){try{n()}catch(r){We(e,t,r)}}var Vh=!1;function L1(e,t){if(Cc=xo,e=jm(),Fd(e)){if("selectionStart"in e)var n={start:e.selectionStart,end:e.selectionEnd};else e:{n=(n=e.ownerDocument)&&n.defaultView||window;var r=n.getSelection&&n.getSelection();if(r&&r.rangeCount!==0){n=r.anchorNode;var s=r.anchorOffset,l=r.focusNode;r=r.focusOffset;try{n.nodeType,l.nodeType}catch{n=null;break e}var a=0,o=-1,u=-1,c=0,f=0,v=e,d=null;t:for(;;){for(var w;v!==n||s!==0&&v.nodeType!==3||(o=a+s),v!==l||r!==0&&v.nodeType!==3||(u=a+r),v.nodeType===3&&(a+=v.nodeValue.length),(w=v.firstChild)!==null;)d=v,v=w;for(;;){if(v===e)break t;if(d===n&&++c===s&&(o=a),d===l&&++f===r&&(u=a),(w=v.nextSibling)!==null)break;v=d,d=v.parentNode}v=w}n=o===-1||u===-1?null:{start:o,end:u}}else n=null}n=n||{start:0,end:0}}else n=null;for(Tc={focusedElem:e,selectionRange:n},xo=!1,H=t;H!==null;)if(t=H,e=t.child,(t.subtreeFlags&1028)!==0&&e!==null)e.return=t,H=e;else for(;H!==null;){t=H;try{var y=t.alternate;if(t.flags&1024)switch(t.tag){case 0:case 11:case 15:break;case 1:if(y!==null){var S=y.memoizedProps,R=y.memoizedState,g=t.stateNode,p=g.getSnapshotBeforeUpdate(t.elementType===t.type?S:_n(t.type,S),R);g.__reactInternalSnapshotBeforeUpdate=p}break;case 3:var m=t.stateNode.containerInfo;m.nodeType===1?m.textContent="":m.nodeType===9&&m.documentElement&&m.removeChild(m.documentElement);break;case 5:case 6:case 4:case 17:break;default:throw Error(D(163))}}catch(N){We(t,t.return,N)}if(e=t.sibling,e!==null){e.return=t.return,H=e;break}H=t.return}return y=Vh,Vh=!1,y}function gi(e,t,n){var r=t.updateQueue;if(r=r!==null?r.lastEffect:null,r!==null){var s=r=r.next;do{if((s.tag&e)===e){var l=s.destroy;s.destroy=void 0,l!==void 0&&Kc(t,n,l)}s=s.next}while(s!==r)}}function tu(e,t){if(t=t.updateQueue,t=t!==null?t.lastEffect:null,t!==null){var n=t=t.next;do{if((n.tag&e)===e){var r=n.create;n.destroy=r()}n=n.next}while(n!==t)}}function Wc(e){var t=e.ref;if(t!==null){var n=e.stateNode;switch(e.tag){case 5:e=n;break;default:e=n}typeof t=="function"?t(e):t.current=e}}function kg(e){var t=e.alternate;t!==null&&(e.alternate=null,kg(t)),e.child=null,e.deletions=null,e.sibling=null,e.tag===5&&(t=e.stateNode,t!==null&&(delete t[Wn],delete t[$i],delete t[Lc],delete t[p1],delete t[m1])),e.stateNode=null,e.return=null,e.dependencies=null,e.memoizedProps=null,e.memoizedState=null,e.pendingProps=null,e.stateNode=null,e.updateQueue=null}function _g(e){return e.tag===5||e.tag===3||e.tag===4}function Bh(e){e:for(;;){for(;e.sibling===null;){if(e.return===null||_g(e.return))return null;e=e.return}for(e.sibling.return=e.return,e=e.sibling;e.tag!==5&&e.tag!==6&&e.tag!==18;){if(e.flags&2||e.child===null||e.tag===4)continue e;e.child.return=e,e=e.child}if(!(e.flags&2))return e.stateNode}}function Gc(e,t,n){var r=e.tag;if(r===5||r===6)e=e.stateNode,t?n.nodeType===8?n.parentNode.insertBefore(e,t):n.insertBefore(e,t):(n.nodeType===8?(t=n.parentNode,t.insertBefore(e,n)):(t=n,t.appendChild(e)),n=n._reactRootContainer,n!=null||t.onclick!==null||(t.onclick=bo));else if(r!==4&&(e=e.child,e!==null))for(Gc(e,t,n),e=e.sibling;e!==null;)Gc(e,t,n),e=e.sibling}function qc(e,t,n){var r=e.tag;if(r===5||r===6)e=e.stateNode,t?n.insertBefore(e,t):n.appendChild(e);else if(r!==4&&(e=e.child,e!==null))for(qc(e,t,n),e=e.sibling;e!==null;)qc(e,t,n),e=e.sibling}var ct=null,jn=!1;function Cr(e,t,n){for(n=n.child;n!==null;)Sg(e,t,n),n=n.sibling}function Sg(e,t,n){if(qn&&typeof qn.onCommitFiberUnmount=="function")try{qn.onCommitFiberUnmount(Go,n)}catch{}switch(n.tag){case 5:bt||tl(n,t);case 6:var r=ct,s=jn;ct=null,Cr(e,t,n),ct=r,jn=s,ct!==null&&(jn?(e=ct,n=n.stateNode,e.nodeType===8?e.parentNode.removeChild(n):e.removeChild(n)):ct.removeChild(n.stateNode));break;case 18:ct!==null&&(jn?(e=ct,n=n.stateNode,e.nodeType===8?Vu(e.parentNode,n):e.nodeType===1&&Vu(e,n),Ai(e)):Vu(ct,n.stateNode));break;case 4:r=ct,s=jn,ct=n.stateNode.containerInfo,jn=!0,Cr(e,t,n),ct=r,jn=s;break;case 0:case 11:case 14:case 15:if(!bt&&(r=n.updateQueue,r!==null&&(r=r.lastEffect,r!==null))){s=r=r.next;do{var l=s,a=l.destroy;l=l.tag,a!==void 0&&(l&2||l&4)&&Kc(n,t,a),s=s.next}while(s!==r)}Cr(e,t,n);break;case 1:if(!bt&&(tl(n,t),r=n.stateNode,typeof r.componentWillUnmount=="function"))try{r.props=n.memoizedProps,r.state=n.memoizedState,r.componentWillUnmount()}catch(o){We(n,t,o)}Cr(e,t,n);break;case 21:Cr(e,t,n);break;case 22:n.mode&1?(bt=(r=bt)||n.memoizedState!==null,Cr(e,t,n),bt=r):Cr(e,t,n);break;default:Cr(e,t,n)}}function Hh(e){var t=e.updateQueue;if(t!==null){e.updateQueue=null;var n=e.stateNode;n===null&&(n=e.stateNode=new P1),t.forEach(function(r){var s=F1.bind(null,e,r);n.has(r)||(n.add(r),r.then(s,s))})}}function bn(e,t){var n=t.deletions;if(n!==null)for(var r=0;rs&&(s=a),r&=~l}if(r=s,r=qe()-r,r=(120>r?120:480>r?480:1080>r?1080:1920>r?1920:3e3>r?3e3:4320>r?4320:1960*R1(r/1960))-r,10e?16:e,zr===null)var r=!1;else{if(e=zr,zr=null,Ro=0,we&6)throw Error(D(331));var s=we;for(we|=4,H=e.current;H!==null;){var l=H,a=l.child;if(H.flags&16){var o=l.deletions;if(o!==null){for(var u=0;uqe()-of?ws(e,0):af|=n),Ot(e,t)}function Lg(e,t){t===0&&(e.mode&1?(t=Pa,Pa<<=1,!(Pa&130023424)&&(Pa=4194304)):t=1);var n=Et();e=xr(e,t),e!==null&&(Xi(e,t,n),Ot(e,n))}function U1(e){var t=e.memoizedState,n=0;t!==null&&(n=t.retryLane),Lg(e,n)}function F1(e,t){var n=0;switch(e.tag){case 13:var r=e.stateNode,s=e.memoizedState;s!==null&&(n=s.retryLane);break;case 19:r=e.stateNode;break;default:throw Error(D(314))}r!==null&&r.delete(t),Lg(e,n)}var Mg;Mg=function(e,t,n){if(e!==null)if(e.memoizedProps!==t.pendingProps||zt.current)Dt=!0;else{if(!(e.lanes&n)&&!(t.flags&128))return Dt=!1,C1(e,t,n);Dt=!!(e.flags&131072)}else Dt=!1,Ue&&t.flags&1048576&&zm(t,No,t.index);switch(t.lanes=0,t.tag){case 2:var r=t.type;eo(e,t),e=t.pendingProps;var s=kl(t,kt.current);ol(t,n),s=ef(null,t,r,e,s,n);var l=tf();return t.flags|=1,typeof s=="object"&&s!==null&&typeof s.render=="function"&&s.$$typeof===void 0?(t.tag=1,t.memoizedState=null,t.updateQueue=null,It(r)?(l=!0,_o(t)):l=!1,t.memoizedState=s.state!==null&&s.state!==void 0?s.state:null,Qd(t),s.updater=eu,t.stateNode=s,s._reactInternals=t,Ic(t,r,e,n),t=Fc(null,t,r,!0,l,n)):(t.tag=0,Ue&&l&&Vd(t),jt(null,t,s,n),t=t.child),t;case 16:r=t.elementType;e:{switch(eo(e,t),e=t.pendingProps,s=r._init,r=s(r._payload),t.type=r,s=t.tag=B1(r),e=_n(r,e),s){case 0:t=Uc(null,t,r,e,n);break e;case 1:t=Oh(null,t,r,e,n);break e;case 11:t=zh(null,t,r,e,n);break e;case 14:t=Ih(null,t,r,_n(r.type,e),n);break e}throw Error(D(306,r,""))}return t;case 0:return r=t.type,s=t.pendingProps,s=t.elementType===r?s:_n(r,s),Uc(e,t,r,s,n);case 1:return r=t.type,s=t.pendingProps,s=t.elementType===r?s:_n(r,s),Oh(e,t,r,s,n);case 3:e:{if(gg(t),e===null)throw Error(D(387));r=t.pendingProps,l=t.memoizedState,s=l.element,Bm(e,t),Co(t,r,null,n);var a=t.memoizedState;if(r=a.element,l.isDehydrated)if(l={element:r,isDehydrated:!1,cache:a.cache,pendingSuspenseBoundaries:a.pendingSuspenseBoundaries,transitions:a.transitions},t.updateQueue.baseState=l,t.memoizedState=l,t.flags&256){s=jl(Error(D(423)),t),t=Uh(e,t,r,n,s);break e}else if(r!==s){s=jl(Error(D(424)),t),t=Uh(e,t,r,n,s);break e}else for(qt=Vr(t.stateNode.containerInfo.firstChild),Qt=t,Ue=!0,En=null,n=Fm(t,null,r,n),t.child=n;n;)n.flags=n.flags&-3|4096,n=n.sibling;else{if(_l(),r===s){t=yr(e,t,n);break e}jt(e,t,r,n)}t=t.child}return t;case 5:return Hm(t),e===null&&$c(t),r=t.type,s=t.pendingProps,l=e!==null?e.memoizedProps:null,a=s.children,Ac(r,s)?a=null:l!==null&&Ac(r,l)&&(t.flags|=32),mg(e,t),jt(e,t,a,n),t.child;case 6:return e===null&&$c(t),null;case 13:return vg(e,t,n);case 4:return Yd(t,t.stateNode.containerInfo),r=t.pendingProps,e===null?t.child=Sl(t,null,r,n):jt(e,t,r,n),t.child;case 11:return r=t.type,s=t.pendingProps,s=t.elementType===r?s:_n(r,s),zh(e,t,r,s,n);case 7:return jt(e,t,t.pendingProps,n),t.child;case 8:return jt(e,t,t.pendingProps.children,n),t.child;case 12:return jt(e,t,t.pendingProps.children,n),t.child;case 10:e:{if(r=t.type._context,s=t.pendingProps,l=t.memoizedProps,a=s.value,Le(jo,r._currentValue),r._currentValue=a,l!==null)if(Mn(l.value,a)){if(l.children===s.children&&!zt.current){t=yr(e,t,n);break e}}else for(l=t.child,l!==null&&(l.return=t);l!==null;){var o=l.dependencies;if(o!==null){a=l.child;for(var u=o.firstContext;u!==null;){if(u.context===r){if(l.tag===1){u=pr(-1,n&-n),u.tag=2;var c=l.updateQueue;if(c!==null){c=c.shared;var f=c.pending;f===null?u.next=u:(u.next=f.next,f.next=u),c.pending=u}}l.lanes|=n,u=l.alternate,u!==null&&(u.lanes|=n),Dc(l.return,n,t),o.lanes|=n;break}u=u.next}}else if(l.tag===10)a=l.type===t.type?null:l.child;else if(l.tag===18){if(a=l.return,a===null)throw Error(D(341));a.lanes|=n,o=a.alternate,o!==null&&(o.lanes|=n),Dc(a,n,t),a=l.sibling}else a=l.child;if(a!==null)a.return=l;else for(a=l;a!==null;){if(a===t){a=null;break}if(l=a.sibling,l!==null){l.return=a.return,a=l;break}a=a.return}l=a}jt(e,t,s.children,n),t=t.child}return t;case 9:return s=t.type,r=t.pendingProps.children,ol(t,n),s=gn(s),r=r(s),t.flags|=1,jt(e,t,r,n),t.child;case 14:return r=t.type,s=_n(r,t.pendingProps),s=_n(r.type,s),Ih(e,t,r,s,n);case 15:return hg(e,t,t.type,t.pendingProps,n);case 17:return r=t.type,s=t.pendingProps,s=t.elementType===r?s:_n(r,s),eo(e,t),t.tag=1,It(r)?(e=!0,_o(t)):e=!1,ol(t,n),cg(t,r,s),Ic(t,r,s,n),Fc(null,t,r,!0,e,n);case 19:return xg(e,t,n);case 22:return pg(e,t,n)}throw Error(D(156,t.tag))};function Rg(e,t){return am(e,t)}function V1(e,t,n,r){this.tag=e,this.key=n,this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null,this.index=0,this.ref=null,this.pendingProps=t,this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null,this.mode=r,this.subtreeFlags=this.flags=0,this.deletions=null,this.childLanes=this.lanes=0,this.alternate=null}function dn(e,t,n,r){return new V1(e,t,n,r)}function ff(e){return e=e.prototype,!(!e||!e.isReactComponent)}function B1(e){if(typeof e=="function")return ff(e)?1:0;if(e!=null){if(e=e.$$typeof,e===Ad)return 11;if(e===Pd)return 14}return 2}function Wr(e,t){var n=e.alternate;return n===null?(n=dn(e.tag,t,e.key,e.mode),n.elementType=e.elementType,n.type=e.type,n.stateNode=e.stateNode,n.alternate=e,e.alternate=n):(n.pendingProps=t,n.type=e.type,n.flags=0,n.subtreeFlags=0,n.deletions=null),n.flags=e.flags&14680064,n.childLanes=e.childLanes,n.lanes=e.lanes,n.child=e.child,n.memoizedProps=e.memoizedProps,n.memoizedState=e.memoizedState,n.updateQueue=e.updateQueue,t=e.dependencies,n.dependencies=t===null?null:{lanes:t.lanes,firstContext:t.firstContext},n.sibling=e.sibling,n.index=e.index,n.ref=e.ref,n}function ro(e,t,n,r,s,l){var a=2;if(r=e,typeof e=="function")ff(e)&&(a=1);else if(typeof e=="string")a=5;else e:switch(e){case Ws:return bs(n.children,s,l,t);case Td:a=8,s|=8;break;case oc:return e=dn(12,n,t,s|2),e.elementType=oc,e.lanes=l,e;case uc:return e=dn(13,n,t,s),e.elementType=uc,e.lanes=l,e;case cc:return e=dn(19,n,t,s),e.elementType=cc,e.lanes=l,e;case Hp:return ru(n,s,l,t);default:if(typeof e=="object"&&e!==null)switch(e.$$typeof){case Vp:a=10;break e;case Bp:a=9;break e;case Ad:a=11;break e;case Pd:a=14;break e;case Tr:a=16,r=null;break e}throw Error(D(130,e==null?e:typeof e,""))}return t=dn(a,n,t,s),t.elementType=e,t.type=r,t.lanes=l,t}function bs(e,t,n,r){return e=dn(7,e,r,t),e.lanes=n,e}function ru(e,t,n,r){return e=dn(22,e,r,t),e.elementType=Hp,e.lanes=n,e.stateNode={isHidden:!1},e}function Yu(e,t,n){return e=dn(6,e,null,t),e.lanes=n,e}function Zu(e,t,n){return t=dn(4,e.children!==null?e.children:[],e.key,t),t.lanes=n,t.stateNode={containerInfo:e.containerInfo,pendingChildren:null,implementation:e.implementation},t}function H1(e,t,n,r,s){this.tag=t,this.containerInfo=e,this.finishedWork=this.pingCache=this.current=this.pendingChildren=null,this.timeoutHandle=-1,this.callbackNode=this.pendingContext=this.context=null,this.callbackPriority=0,this.eventTimes=Pu(0),this.expirationTimes=Pu(-1),this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0,this.entanglements=Pu(0),this.identifierPrefix=r,this.onRecoverableError=s,this.mutableSourceEagerHydrationData=null}function hf(e,t,n,r,s,l,a,o,u){return e=new H1(e,t,n,o,u),t===1?(t=1,l===!0&&(t|=8)):t=0,l=dn(3,null,null,t),e.current=l,l.stateNode=e,l.memoizedState={element:r,isDehydrated:n,cache:null,transitions:null,pendingSuspenseBoundaries:null},Qd(l),e}function K1(e,t,n){var r=3"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(Ig)}catch(e){console.error(e)}}Ig(),Ip.exports=Jt;var Y1=Ip.exports,Jh=Y1;ic.createRoot=Jh.createRoot,ic.hydrateRoot=Jh.hydrateRoot;/** + * @license lucide-react v0.424.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Z1=e=>e.replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase(),Og=(...e)=>e.filter((t,n,r)=>!!t&&r.indexOf(t)===n).join(" ");/** + * @license lucide-react v0.424.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */var J1={xmlns:"http://www.w3.org/2000/svg",width:24,height:24,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round"};/** + * @license lucide-react v0.424.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const X1=A.forwardRef(({color:e="currentColor",size:t=24,strokeWidth:n=2,absoluteStrokeWidth:r,className:s="",children:l,iconNode:a,...o},u)=>A.createElement("svg",{ref:u,...J1,width:t,height:t,stroke:e,strokeWidth:r?Number(n)*24/Number(t):n,className:Og("lucide",s),...o},[...a.map(([c,f])=>A.createElement(c,f)),...Array.isArray(l)?l:[l]]));/** + * @license lucide-react v0.424.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const oe=(e,t)=>{const n=A.forwardRef(({className:r,...s},l)=>A.createElement(X1,{ref:l,iconNode:t,className:Og(`lucide-${Z1(e)}`,r),...s}));return n.displayName=`${e}`,n};/** + * @license lucide-react v0.424.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Ug=oe("ArrowLeft",[["path",{d:"m12 19-7-7 7-7",key:"1l729n"}],["path",{d:"M19 12H5",key:"x3x0zl"}]]);/** + * @license lucide-react v0.424.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Fg=oe("ArrowRight",[["path",{d:"M5 12h14",key:"1ays0h"}],["path",{d:"m12 5 7 7-7 7",key:"xquz4c"}]]);/** + * @license lucide-react v0.424.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const ey=oe("Award",[["path",{d:"m15.477 12.89 1.515 8.526a.5.5 0 0 1-.81.47l-3.58-2.687a1 1 0 0 0-1.197 0l-3.586 2.686a.5.5 0 0 1-.81-.469l1.514-8.526",key:"1yiouv"}],["circle",{cx:"12",cy:"8",r:"6",key:"1vp47v"}]]);/** + * @license lucide-react v0.424.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Xh=oe("CalendarDays",[["path",{d:"M8 2v4",key:"1cmpym"}],["path",{d:"M16 2v4",key:"4m81vk"}],["rect",{width:"18",height:"18",x:"3",y:"4",rx:"2",key:"1hopcy"}],["path",{d:"M3 10h18",key:"8toen8"}],["path",{d:"M8 14h.01",key:"6423bh"}],["path",{d:"M12 14h.01",key:"1etili"}],["path",{d:"M16 14h.01",key:"1gbofw"}],["path",{d:"M8 18h.01",key:"lrp35t"}],["path",{d:"M12 18h.01",key:"mhygvu"}],["path",{d:"M16 18h.01",key:"kzsmim"}]]);/** + * @license lucide-react v0.424.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const ra=oe("Calendar",[["path",{d:"M8 2v4",key:"1cmpym"}],["path",{d:"M16 2v4",key:"4m81vk"}],["rect",{width:"18",height:"18",x:"3",y:"4",rx:"2",key:"1hopcy"}],["path",{d:"M3 10h18",key:"8toen8"}]]);/** + * @license lucide-react v0.424.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const ty=oe("ChevronLeft",[["path",{d:"m15 18-6-6 6-6",key:"1wnfg3"}]]);/** + * @license lucide-react v0.424.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const ny=oe("ChevronRight",[["path",{d:"m9 18 6-6-6-6",key:"mthhwq"}]]);/** + * @license lucide-react v0.424.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Cl=oe("CircleAlert",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["line",{x1:"12",x2:"12",y1:"8",y2:"12",key:"1pkeuh"}],["line",{x1:"12",x2:"12.01",y1:"16",y2:"16",key:"4dfq90"}]]);/** + * @license lucide-react v0.424.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Zn=oe("CircleCheck",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"m9 12 2 2 4-4",key:"dzmm74"}]]);/** + * @license lucide-react v0.424.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Vi=oe("Clock",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["polyline",{points:"12 6 12 12 16 14",key:"68esgv"}]]);/** + * @license lucide-react v0.424.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const ry=oe("Download",[["path",{d:"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4",key:"ih7n3h"}],["polyline",{points:"7 10 12 15 17 10",key:"2ggqvy"}],["line",{x1:"12",x2:"12",y1:"15",y2:"3",key:"1vk2je"}]]);/** + * @license lucide-react v0.424.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Vg=oe("EyeOff",[["path",{d:"M10.733 5.076a10.744 10.744 0 0 1 11.205 6.575 1 1 0 0 1 0 .696 10.747 10.747 0 0 1-1.444 2.49",key:"ct8e1f"}],["path",{d:"M14.084 14.158a3 3 0 0 1-4.242-4.242",key:"151rxh"}],["path",{d:"M17.479 17.499a10.75 10.75 0 0 1-15.417-5.151 1 1 0 0 1 0-.696 10.75 10.75 0 0 1 4.446-5.143",key:"13bj9a"}],["path",{d:"m2 2 20 20",key:"1ooewy"}]]);/** + * @license lucide-react v0.424.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const sy=oe("Eye",[["path",{d:"M2.062 12.348a1 1 0 0 1 0-.696 10.75 10.75 0 0 1 19.876 0 1 1 0 0 1 0 .696 10.75 10.75 0 0 1-19.876 0",key:"1nclc0"}],["circle",{cx:"12",cy:"12",r:"3",key:"1v7zrd"}]]);/** + * @license lucide-react v0.424.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const ep=oe("House",[["path",{d:"M15 21v-8a1 1 0 0 0-1-1h-4a1 1 0 0 0-1 1v8",key:"5wwlr5"}],["path",{d:"M3 10a2 2 0 0 1 .709-1.528l7-5.999a2 2 0 0 1 2.582 0l7 5.999A2 2 0 0 1 21 10v9a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z",key:"1d0kgt"}]]);/** + * @license lucide-react v0.424.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const ou=oe("Layers",[["path",{d:"m12.83 2.18a2 2 0 0 0-1.66 0L2.6 6.08a1 1 0 0 0 0 1.83l8.58 3.91a2 2 0 0 0 1.66 0l8.58-3.9a1 1 0 0 0 0-1.83Z",key:"8b97xw"}],["path",{d:"m22 17.65-9.17 4.16a2 2 0 0 1-1.66 0L2 17.65",key:"dd6zsq"}],["path",{d:"m22 12.65-9.17 4.16a2 2 0 0 1-1.66 0L2 12.65",key:"ep9fru"}]]);/** + * @license lucide-react v0.424.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const ly=oe("Lock",[["rect",{width:"18",height:"11",x:"3",y:"11",rx:"2",ry:"2",key:"1w4ew1"}],["path",{d:"M7 11V7a5 5 0 0 1 10 0v4",key:"fwvmzm"}]]);/** + * @license lucide-react v0.424.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const iy=oe("LogOut",[["path",{d:"M9 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h4",key:"1uf3rs"}],["polyline",{points:"16 17 21 12 16 7",key:"1gabdz"}],["line",{x1:"21",x2:"9",y1:"12",y2:"12",key:"1uyos4"}]]);/** + * @license lucide-react v0.424.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Xc=oe("Mail",[["rect",{width:"20",height:"16",x:"2",y:"4",rx:"2",key:"18n3k1"}],["path",{d:"m22 7-8.97 5.7a1.94 1.94 0 0 1-2.06 0L2 7",key:"1ocrg3"}]]);/** + * @license lucide-react v0.424.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const vf=oe("MapPin",[["path",{d:"M20 10c0 4.993-5.539 10.193-7.399 11.799a1 1 0 0 1-1.202 0C9.539 20.193 4 14.993 4 10a8 8 0 0 1 16 0",key:"1r0f0z"}],["circle",{cx:"12",cy:"10",r:"3",key:"ilqhr7"}]]);/** + * @license lucide-react v0.424.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const ay=oe("Monitor",[["rect",{width:"20",height:"14",x:"2",y:"3",rx:"2",key:"48i651"}],["line",{x1:"8",x2:"16",y1:"21",y2:"21",key:"1svkeh"}],["line",{x1:"12",x2:"12",y1:"17",y2:"21",key:"vw1qmm"}]]);/** + * @license lucide-react v0.424.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const oy=oe("Moon",[["path",{d:"M12 3a6 6 0 0 0 9 9 9 9 0 1 1-9-9Z",key:"a7tn18"}]]);/** + * @license lucide-react v0.424.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const tp=oe("Palette",[["circle",{cx:"13.5",cy:"6.5",r:".5",fill:"currentColor",key:"1okk4w"}],["circle",{cx:"17.5",cy:"10.5",r:".5",fill:"currentColor",key:"f64h9f"}],["circle",{cx:"8.5",cy:"7.5",r:".5",fill:"currentColor",key:"fotxhn"}],["circle",{cx:"6.5",cy:"12.5",r:".5",fill:"currentColor",key:"qy21gx"}],["path",{d:"M12 2C6.5 2 2 6.5 2 12s4.5 10 10 10c.926 0 1.648-.746 1.648-1.688 0-.437-.18-.835-.437-1.125-.29-.289-.438-.652-.438-1.125a1.64 1.64 0 0 1 1.668-1.668h1.996c3.051 0 5.555-2.503 5.555-5.554C21.965 6.012 17.461 2 12 2z",key:"12rzf8"}]]);/** + * @license lucide-react v0.424.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Bi=oe("PenLine",[["path",{d:"M12 20h9",key:"t2du7b"}],["path",{d:"M16.376 3.622a1 1 0 0 1 3.002 3.002L7.368 18.635a2 2 0 0 1-.855.506l-2.872.838a.5.5 0 0 1-.62-.62l.838-2.872a2 2 0 0 1 .506-.854z",key:"1ykcvy"}]]);/** + * @license lucide-react v0.424.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const uy=oe("Play",[["polygon",{points:"6 3 20 12 6 21 6 3",key:"1oa8hb"}]]);/** + * @license lucide-react v0.424.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Yn=oe("Plus",[["path",{d:"M5 12h14",key:"1ays0h"}],["path",{d:"M12 5v14",key:"s699le"}]]);/** + * @license lucide-react v0.424.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const cy=oe("Printer",[["path",{d:"M6 18H4a2 2 0 0 1-2-2v-5a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2v5a2 2 0 0 1-2 2h-2",key:"143wyd"}],["path",{d:"M6 9V3a1 1 0 0 1 1-1h10a1 1 0 0 1 1 1v6",key:"1itne7"}],["rect",{x:"6",y:"14",width:"12",height:"8",rx:"1",key:"1ue0tg"}]]);/** + * @license lucide-react v0.424.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Bg=oe("Search",[["circle",{cx:"11",cy:"11",r:"8",key:"4ej97u"}],["path",{d:"m21 21-4.3-4.3",key:"1qie3q"}]]);/** + * @license lucide-react v0.424.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const dy=oe("Send",[["path",{d:"m22 2-7 20-4-9-9-4Z",key:"1q3vgg"}],["path",{d:"M22 2 11 13",key:"nzbqef"}]]);/** + * @license lucide-react v0.424.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const np=oe("Settings",[["path",{d:"M12.22 2h-.44a2 2 0 0 0-2 2v.18a2 2 0 0 1-1 1.73l-.43.25a2 2 0 0 1-2 0l-.15-.08a2 2 0 0 0-2.73.73l-.22.38a2 2 0 0 0 .73 2.73l.15.1a2 2 0 0 1 1 1.72v.51a2 2 0 0 1-1 1.74l-.15.09a2 2 0 0 0-.73 2.73l.22.38a2 2 0 0 0 2.73.73l.15-.08a2 2 0 0 1 2 0l.43.25a2 2 0 0 1 1 1.73V20a2 2 0 0 0 2 2h.44a2 2 0 0 0 2-2v-.18a2 2 0 0 1 1-1.73l.43-.25a2 2 0 0 1 2 0l.15.08a2 2 0 0 0 2.73-.73l.22-.39a2 2 0 0 0-.73-2.73l-.15-.08a2 2 0 0 1-1-1.74v-.5a2 2 0 0 1 1-1.74l.15-.09a2 2 0 0 0 .73-2.73l-.22-.38a2 2 0 0 0-2.73-.73l-.15.08a2 2 0 0 1-2 0l-.43-.25a2 2 0 0 1-1-1.73V4a2 2 0 0 0-2-2z",key:"1qme2f"}],["circle",{cx:"12",cy:"12",r:"3",key:"1v7zrd"}]]);/** + * @license lucide-react v0.424.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const fy=oe("ShieldAlert",[["path",{d:"M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z",key:"oel41y"}],["path",{d:"M12 8v4",key:"1got3b"}],["path",{d:"M12 16h.01",key:"1drbdi"}]]);/** + * @license lucide-react v0.424.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const hy=oe("ShieldCheck",[["path",{d:"M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z",key:"oel41y"}],["path",{d:"m9 12 2 2 4-4",key:"dzmm74"}]]);/** + * @license lucide-react v0.424.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Hg=oe("Shield",[["path",{d:"M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z",key:"oel41y"}]]);/** + * @license lucide-react v0.424.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Kg=oe("Sparkles",[["path",{d:"M9.937 15.5A2 2 0 0 0 8.5 14.063l-6.135-1.582a.5.5 0 0 1 0-.962L8.5 9.936A2 2 0 0 0 9.937 8.5l1.582-6.135a.5.5 0 0 1 .963 0L14.063 8.5A2 2 0 0 0 15.5 9.937l6.135 1.581a.5.5 0 0 1 0 .964L15.5 14.063a2 2 0 0 0-1.437 1.437l-1.582 6.135a.5.5 0 0 1-.963 0z",key:"4pj2yx"}],["path",{d:"M20 3v4",key:"1olli1"}],["path",{d:"M22 5h-4",key:"1gvqau"}],["path",{d:"M4 17v2",key:"vumght"}],["path",{d:"M5 18H3",key:"zchphs"}]]);/** + * @license lucide-react v0.424.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const py=oe("Sun",[["circle",{cx:"12",cy:"12",r:"4",key:"4exip2"}],["path",{d:"M12 2v2",key:"tus03m"}],["path",{d:"M12 20v2",key:"1lh1kg"}],["path",{d:"m4.93 4.93 1.41 1.41",key:"149t6j"}],["path",{d:"m17.66 17.66 1.41 1.41",key:"ptbguv"}],["path",{d:"M2 12h2",key:"1t8f8n"}],["path",{d:"M20 12h2",key:"1q8mjw"}],["path",{d:"m6.34 17.66-1.41 1.41",key:"1m8zz5"}],["path",{d:"m19.07 4.93-1.41 1.41",key:"1shlcs"}]]);/** + * @license lucide-react v0.424.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const my=oe("TableProperties",[["path",{d:"M15 3v18",key:"14nvp0"}],["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",key:"afitv7"}],["path",{d:"M21 9H3",key:"1338ky"}],["path",{d:"M21 15H3",key:"9uk58r"}]]);/** + * @license lucide-react v0.424.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const cn=oe("Trash2",[["path",{d:"M3 6h18",key:"d0wm0j"}],["path",{d:"M19 6v14c0 1-1 2-2 2H7c-1 0-2-1-2-2V6",key:"4alrt4"}],["path",{d:"M8 6V4c0-1 1-2 2-2h4c1 0 2 1 2 2v2",key:"v07s0e"}],["line",{x1:"10",x2:"10",y1:"11",y2:"17",key:"1uufr5"}],["line",{x1:"14",x2:"14",y1:"11",y2:"17",key:"xtxkd"}]]);/** + * @license lucide-react v0.424.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const xf=oe("UserCheck",[["path",{d:"M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2",key:"1yyitq"}],["circle",{cx:"9",cy:"7",r:"4",key:"nufk8"}],["polyline",{points:"16 11 18 13 22 9",key:"1pwet4"}]]);/** + * @license lucide-react v0.424.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const gy=oe("UserPlus",[["path",{d:"M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2",key:"1yyitq"}],["circle",{cx:"9",cy:"7",r:"4",key:"nufk8"}],["line",{x1:"19",x2:"19",y1:"8",y2:"14",key:"1bvyxn"}],["line",{x1:"22",x2:"16",y1:"11",y2:"11",key:"1shjgl"}]]);/** + * @license lucide-react v0.424.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const rp=oe("UserX",[["path",{d:"M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2",key:"1yyitq"}],["circle",{cx:"9",cy:"7",r:"4",key:"nufk8"}],["line",{x1:"17",x2:"22",y1:"8",y2:"13",key:"3nzzx3"}],["line",{x1:"22",x2:"17",y1:"8",y2:"13",key:"1swrse"}]]);/** + * @license lucide-react v0.424.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const so=oe("User",[["path",{d:"M19 21v-2a4 4 0 0 0-4-4H9a4 4 0 0 0-4 4v2",key:"975kel"}],["circle",{cx:"12",cy:"7",r:"4",key:"17ys0d"}]]);/** + * @license lucide-react v0.424.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Wg=oe("Users",[["path",{d:"M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2",key:"1yyitq"}],["circle",{cx:"9",cy:"7",r:"4",key:"nufk8"}],["path",{d:"M22 21v-2a4 4 0 0 0-3-3.87",key:"kshegd"}],["path",{d:"M16 3.13a4 4 0 0 1 0 7.75",key:"1da9ce"}]]);/** + * @license lucide-react v0.424.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Gg=oe("X",[["path",{d:"M18 6 6 18",key:"1bl5f8"}],["path",{d:"m6 6 12 12",key:"d8bk6v"}]]);function vy({branding:e,user:t,activeTab:n,onChangeTab:r,themeMode:s,onChangeThemeMode:l,onLogout:a,onOpenAuth:o,onOpenCreateEvent:u,onOpenTemplates:c,onOpenProfile:f,onOpenAdmin:v,pwaInstallPrompt:d,onInstallPwa:w}){const y=(e==null?void 0:e.primary_color)||"var(--brand-primary)",[S,R]=Si.useState(()=>localStorage.getItem("guest_display_name")||"");Si.useEffect(()=>{const p=()=>{R(localStorage.getItem("guest_display_name")||"")};return window.addEventListener("guest_name_updated",p),window.addEventListener("storage",p),()=>{window.removeEventListener("guest_name_updated",p),window.removeEventListener("storage",p)}},[]);const g=()=>{l(s==="dark"?"light":s==="light"?"auto":"dark")};return i.jsxs("header",{className:"bg-surface border-b border-grid sticky top-0 z-40",children:[i.jsxs("div",{className:"max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 h-16 flex items-center justify-between gap-4",children:[i.jsxs("div",{className:"flex items-center space-x-3 shrink-0",children:[i.jsx("div",{onClick:()=>r("home"),style:{backgroundColor:y},className:"w-8 h-8 rounded-sm flex items-center justify-center text-white font-bold cursor-pointer shadow-sm",children:e!=null&&e.logo_url?i.jsx("img",{src:e.logo_url,alt:"Logo",className:"w-4 h-4 object-contain"}):i.jsx(ra,{className:"w-4 h-4"})}),i.jsxs("div",{onClick:()=>r("home"),className:"cursor-pointer",children:[i.jsx("h1",{className:"font-serif text-base font-bold tracking-tight text-main leading-none",children:(e==null?void 0:e.app_name)||"Schichtplaner"}),i.jsx("div",{className:"text-[10px] font-mono text-muted mt-1 uppercase tracking-wider flex items-center gap-1.5",children:t?i.jsxs("span",{className:"text-emerald-500 font-semibold",children:["[ ",t.display_name||t.username," ]"]}):S?i.jsxs("span",{className:"text-amber-400 font-semibold flex items-center gap-1",children:["[ 👤 GAST: ",S," ]"]}):i.jsx("span",{className:"text-amber-500 font-semibold",children:"[ GAST-MODUS ]"})})]})]}),i.jsxs("nav",{className:"hidden md:flex items-center gap-2",children:[i.jsxs("button",{onClick:()=>r("home"),className:`px-3 py-1.5 rounded-sm text-xs font-mono transition flex items-center gap-1.5 border ${n==="home"?"bg-surface-hover text-main font-bold border-grid":"text-muted hover:text-main border-transparent"}`,children:[i.jsx(ep,{className:"w-3.5 h-3.5"})," Startseite"]}),i.jsxs("button",{onClick:()=>r("calendar"),className:`px-3 py-1.5 rounded-sm text-xs font-mono transition flex items-center gap-1.5 border ${n==="calendar"?"bg-surface-hover text-main font-bold border-grid":"text-muted hover:text-main border-transparent"}`,children:[i.jsx(Xh,{className:"w-3.5 h-3.5"})," Kalender"]}),((t==null?void 0:t.is_admin_user)||(t==null?void 0:t.is_staff)||(t==null?void 0:t.is_superuser))&&i.jsxs("button",{onClick:()=>r("admin"),className:`px-3 py-1.5 rounded-sm text-xs font-mono transition flex items-center gap-1.5 border ${n==="admin"?"bg-surface-hover text-main font-bold border-grid":"text-muted hover:text-main border-transparent"}`,children:[i.jsx(np,{className:"w-3.5 h-3.5 text-indigo-400"})," Admin"]})]}),i.jsxs("div",{className:"flex items-center space-x-2",children:[i.jsx("button",{onClick:g,className:"h-8 px-2.5 rounded-sm text-xs font-mono bg-subtle hover:bg-surface-hover text-main border border-grid transition flex items-center gap-1.5",title:`Design-Modus: ${s.toUpperCase()}`,children:s==="dark"?i.jsxs(i.Fragment,{children:[i.jsx(oy,{className:"w-3.5 h-3.5 text-indigo-400"}),i.jsx("span",{className:"hidden lg:inline text-[11px] font-bold",children:"DARK"})]}):s==="light"?i.jsxs(i.Fragment,{children:[i.jsx(py,{className:"w-3.5 h-3.5 text-amber-500"}),i.jsx("span",{className:"hidden lg:inline text-[11px] font-bold",children:"LIGHT"})]}):i.jsxs(i.Fragment,{children:[i.jsx(ay,{className:"w-3.5 h-3.5 text-blue-500"}),i.jsx("span",{className:"hidden lg:inline text-[11px] font-bold",children:"AUTO"})]})}),d&&i.jsxs("button",{onClick:w,className:"h-8 px-2.5 rounded-sm text-xs font-mono bg-emerald-500/10 text-emerald-500 border border-emerald-500/20 hover:bg-emerald-500/20 transition flex items-center gap-1",children:[i.jsx(Kg,{className:"w-3 h-3"})," PWA"]}),t?i.jsxs(i.Fragment,{children:[i.jsxs("button",{onClick:u,style:{backgroundColor:y},className:"h-8 px-3 rounded-sm text-xs font-mono font-bold text-white transition flex items-center gap-1 shadow-sm hover:brightness-110",children:[i.jsx(Yn,{className:"w-3.5 h-3.5"})," Event"]}),i.jsxs("button",{onClick:c,className:"h-8 px-2.5 rounded-sm text-xs font-mono bg-subtle hover:bg-surface-hover text-main border border-grid transition hidden sm:flex items-center gap-1",title:"Vorlagen",children:[i.jsx(ou,{className:"w-3.5 h-3.5 text-muted"})," Vorlagen"]}),i.jsxs("button",{onClick:f,className:"h-8 px-2.5 rounded-sm text-xs font-mono bg-subtle hover:bg-surface-hover text-main border border-grid transition flex items-center gap-1",title:"Profil & Namen ändern",children:[i.jsx(Bi,{className:"w-3.5 h-3.5 text-amber-500"})," Profil"]}),(t.is_admin_user||t.is_staff||t.is_superuser)&&i.jsxs("button",{onClick:()=>r("admin"),className:`h-8 px-2.5 rounded-sm text-xs font-mono transition flex items-center gap-1 border ${n==="admin"?"bg-indigo-500/20 text-indigo-300 border-indigo-500/40 font-bold":"bg-indigo-500/10 hover:bg-indigo-500/20 text-indigo-400 border-indigo-500/30"}`,title:"Admin-Zentrale",children:[i.jsx(np,{className:"w-3.5 h-3.5"})," Admin"]}),i.jsx("div",{className:"h-4 w-px bg-grid mx-1"}),i.jsx("button",{onClick:a,className:"h-8 w-8 rounded-sm text-muted hover:text-red-500 hover:bg-red-500/10 border border-transparent hover:border-red-500/20 transition flex items-center justify-center",title:"Abmelden",children:i.jsx(iy,{className:"w-3.5 h-3.5"})})]}):i.jsxs("button",{onClick:o,style:{backgroundColor:y},className:"h-8 px-3.5 rounded-sm text-xs font-mono font-bold text-white transition hover:brightness-110 flex items-center gap-1.5 shadow-sm",children:[i.jsx(so,{className:"w-3.5 h-3.5"})," Anmelden"]})]})]}),i.jsxs("div",{className:"flex md:hidden items-center justify-around border-t border-grid py-2 bg-subtle text-xs font-mono",children:[i.jsxs("button",{onClick:()=>r("home"),className:`flex items-center gap-1 px-3 py-1.5 rounded-sm border ${n==="home"?"text-main font-bold bg-surface border-grid":"text-muted border-transparent"}`,children:[i.jsx(ep,{className:"w-3.5 h-3.5"})," Start"]}),i.jsxs("button",{onClick:()=>r("calendar"),className:`flex items-center gap-1 px-3 py-1.5 rounded-sm border ${n==="calendar"?"text-main font-bold bg-surface border-grid":"text-muted border-transparent"}`,children:[i.jsx(Xh,{className:"w-3.5 h-3.5"})," Termine"]}),i.jsxs("button",{onClick:()=>r("schedule"),className:`flex items-center gap-1 px-3 py-1.5 rounded-sm border ${n==="schedule"?"text-main font-bold bg-surface border-grid":"text-muted border-transparent"}`,children:[i.jsx(my,{className:"w-3.5 h-3.5"})," Schichtplan"]})]})]})}function xy({event:e,user:t,onSignupClick:n,onCancelClick:r,onRemoveUserFromShift:s,onGenerateClaimLink:l,onExportPdf:a,onPrintView:o,onEditEvent:u,onDeleteEvent:c}){var S,R,g;const[f,v]=Si.useState(()=>localStorage.getItem("guest_display_name")||"");if(Si.useEffect(()=>{const p=()=>v(localStorage.getItem("guest_display_name")||"");return window.addEventListener("guest_name_updated",p),window.addEventListener("storage",p),()=>{window.removeEventListener("guest_name_updated",p),window.removeEventListener("storage",p)}},[]),!e||!e.task_areas||e.task_areas.length===0)return i.jsxs("div",{className:"hallmark-panel rounded-sm p-12 text-center border border-grid font-mono",children:[i.jsx(Vi,{className:"w-8 h-8 text-muted mx-auto mb-3"}),i.jsx("h3",{className:"font-serif text-xl font-bold text-main uppercase",children:"Keine Aufgabenfelder vorhanden"}),i.jsx("p",{className:"text-xs text-muted mt-1 mb-4",children:"[ Event hat noch keine definierten Aufgabenfelder oder Schichten ]"}),t&&(t.is_admin_user||t.is_staff||t.is_superuser||(e==null?void 0:e.created_by)===t.id||((S=e==null?void 0:e.created_by)==null?void 0:S.id)===t.id||(e==null?void 0:e.co_managers)&&e.co_managers.some(p=>typeof p=="object"?p.id===t.id:p===t.id))&&u&&i.jsxs("button",{onClick:()=>u(e),className:"px-4 py-2 rounded-sm bg-indigo-500/10 hover:bg-indigo-500/20 text-indigo-400 border border-indigo-500/30 font-bold text-xs inline-flex items-center gap-2",children:[i.jsx(Bi,{className:"w-4 h-4"})," SCHICHTEN & BEREICHE ANLEGEN"]})]});const d=!t,w=t&&(e==null?void 0:e.co_managers)&&e.co_managers.some(p=>typeof p=="object"?p.id===t.id:p===t.id),y=t&&(t.is_admin_user||t.is_staff||t.is_superuser||(e==null?void 0:e.created_by)===t.id||((R=e==null?void 0:e.created_by)==null?void 0:R.id)===t.id||w);return i.jsxs("div",{className:"space-y-6",children:[i.jsxs("div",{className:"hallmark-panel rounded-sm p-6 sm:p-8 border border-grid flex flex-col md:flex-row md:items-center justify-between gap-4",children:[i.jsxs("div",{className:"space-y-1 font-mono",children:[i.jsxs("div",{className:"flex flex-wrap items-center gap-2 text-xs text-muted mb-1",children:[i.jsxs("span",{className:"bg-subtle px-2.5 py-0.5 rounded-sm border border-grid font-bold text-main",children:[new Date(e.start_date).toLocaleDateString("de-DE")," — ",new Date(e.end_date).toLocaleDateString("de-DE")]}),e.location&&i.jsxs("span",{className:"flex items-center gap-1 text-muted",children:[i.jsx(vf,{className:"w-3.5 h-3.5 shrink-0"}),e.location]}),e.is_active===!1&&i.jsx("span",{className:"px-2 py-0.5 rounded-sm bg-amber-500/10 text-amber-500 border border-amber-500/20 font-bold",children:"[ DEAKTIVIERT ]"})]}),i.jsx("h2",{className:"font-serif text-3xl sm:text-4xl font-bold uppercase tracking-tight text-main",children:e.title}),e.description&&i.jsx("p",{className:"text-xs font-sans text-muted max-w-2xl mt-1",children:e.description})]}),i.jsxs("div",{className:"flex items-center gap-2 no-print font-mono text-xs shrink-0",children:[y&&u&&i.jsxs("button",{onClick:()=>u(e),className:"px-3.5 py-1.5 rounded-sm bg-indigo-500/10 hover:bg-indigo-500/20 text-indigo-400 border border-indigo-500/30 transition flex items-center gap-1.5 font-bold",title:"Schichten und Aufgabenbereiche für diese Veranstaltung bearbeiten",children:[i.jsx(Bi,{className:"w-3.5 h-3.5"})," SCHICHTEN BEARBEITEN"]}),t&&(t.is_admin_user||t.is_staff||t.is_superuser||(e==null?void 0:e.created_by)===t.id||((g=e==null?void 0:e.created_by)==null?void 0:g.id)===t.id)&&c&&i.jsxs("button",{onClick:()=>c(e),className:"px-3.5 py-1.5 rounded-sm bg-red-500/10 hover:bg-red-500/20 text-red-400 border border-red-500/30 transition flex items-center gap-1.5 font-bold",title:"Diese Veranstaltung unwiderruflich löschen",children:[i.jsx(cn,{className:"w-3.5 h-3.5"})," LÖSCHEN"]}),i.jsxs("button",{onClick:o,className:"px-3.5 py-1.5 rounded-sm bg-surface hover:bg-surface-hover text-main border border-grid transition flex items-center gap-1.5 font-bold",children:[i.jsx(cy,{className:"w-3.5 h-3.5"})," DRUCKEN"]}),i.jsxs("button",{onClick:a,className:"px-3.5 py-1.5 rounded-sm bg-surface hover:bg-surface-hover text-main border border-grid transition flex items-center gap-1.5 font-bold",children:[i.jsx(ry,{className:"w-3.5 h-3.5"})," PDF"]})]})]}),d&&i.jsxs("div",{className:"p-3.5 rounded-sm bg-amber-500/10 border border-amber-500/20 text-amber-500 text-xs font-mono flex items-center gap-2",children:[i.jsx(Hg,{className:"w-4 h-4 shrink-0 text-amber-500"}),i.jsxs("span",{children:["[ GAST-DATENSCHUTZ ]: Belegungszahlen sichtbar, Namensanzeige aus Datenschutzgründen ",i.jsx("strong",{children:"anonymisiert"}),"."]})]}),i.jsx("div",{className:"hallmark-panel rounded-sm border border-grid overflow-hidden",children:i.jsx("div",{className:"overflow-x-auto",children:i.jsxs("table",{className:"w-full text-left border-collapse",children:[i.jsx("thead",{children:i.jsxs("tr",{className:"bg-subtle border-b border-grid text-[11px] font-mono text-muted uppercase tracking-wider",children:[i.jsx("th",{className:"py-3.5 px-4 w-1/4",children:"Aufgabenfeld"}),i.jsx("th",{className:"py-3.5 px-4 w-1/4",children:"Schicht & Zeitraum"}),i.jsx("th",{className:"py-3.5 px-4 w-1/6",children:"Qualifikation"}),i.jsx("th",{className:"py-3.5 px-4 w-1/4",children:"Belegung & Personen"}),i.jsx("th",{className:"py-3.5 px-4 w-1/6 text-right",children:"Aktion"})]})}),i.jsx("tbody",{className:"divide-y divide-grid text-xs font-sans",children:e.task_areas.map(p=>!p.shifts||p.shifts.length===0?i.jsxs("tr",{children:[i.jsx("td",{className:"py-3.5 px-4 font-serif text-lg font-bold text-main uppercase",children:p.name}),i.jsx("td",{colSpan:4,className:"py-3.5 px-4 text-muted font-mono text-[11px]",children:"[ Keine Schichten angelegt ]"})]},`area-${p.id}`):p.shifts.map((m,N)=>{const C=N===0,E=m.is_full,L=!!(t?m.signups.find(P=>!P.is_guest&&P.display_name===t.display_name):null),q=m.required_skills&&m.required_skills.length>0;return i.jsxs("tr",{className:"hover:bg-surface-hover/60 transition",children:[C?i.jsxs("td",{rowSpan:p.shifts.length,className:"py-3.5 px-4 font-serif text-lg font-bold text-main uppercase bg-subtle/80 align-top border-r border-grid",children:[i.jsx("div",{children:p.name}),p.description&&i.jsx("div",{className:"text-[11px] font-sans font-normal text-muted mt-0.5",children:p.description})]}):null,i.jsxs("td",{className:"py-3.5 px-4",children:[i.jsxs("div",{className:"font-semibold text-main flex items-center gap-2 flex-wrap",children:[i.jsx("span",{children:m.title}),m.date&&i.jsxs("span",{className:"text-[10px] font-mono font-bold text-indigo-400 bg-indigo-500/10 px-2 py-0.5 rounded-sm border border-indigo-500/20",children:["📅 ",new Date(m.date+"T00:00:00").toLocaleDateString("de-DE",{weekday:"short",day:"2-digit",month:"2-digit"})]})]}),i.jsxs("div",{className:"text-[11px] font-mono text-muted flex items-center gap-1 mt-0.5",children:[i.jsx(Vi,{className:"w-3 h-3 text-muted shrink-0"}),i.jsxs("span",{children:[m.start_time," — ",m.end_time," Uhr"]})]})]}),i.jsx("td",{className:"py-3.5 px-4 font-mono",children:q?i.jsx("div",{className:"flex flex-wrap gap-1",children:m.required_skills.map(P=>i.jsxs("span",{style:{backgroundColor:`${P.color}15`,borderColor:`${P.color}35`,color:P.color},className:"px-2 py-0.5 rounded-sm text-[10px] font-semibold border flex items-center gap-1",children:[i.jsx(ey,{className:"w-3 h-3 shrink-0"})," ",P.name]},P.id))}):i.jsx("span",{className:"text-[11px] text-muted",children:"—"})}),i.jsxs("td",{className:"py-3.5 px-4 font-mono",children:[i.jsx("div",{className:"flex items-center gap-2",children:i.jsxs("span",{className:`px-2 py-0.5 rounded-sm text-[11px] font-bold border ${E?"bg-red-500/10 text-red-500 border-red-500/20":"bg-emerald-500/10 text-emerald-500 border-emerald-500/20"}`,children:["[ ",m.signups_count," / ",m.max_participants," BELEGT ]"]})}),i.jsx("div",{className:"mt-2 space-y-1 font-sans",children:m.signups.map(P=>{var ae;const Y=d&&P.is_guest&&f&&((ae=P.display_name)==null?void 0:ae.trim().toLowerCase())===f.trim().toLowerCase();return i.jsxs("div",{className:`text-[11px] text-muted flex items-center justify-between gap-2 p-1.5 rounded-sm border ${Y?"bg-amber-500/10 border-amber-500/30":"bg-subtle border-grid"}`,children:[i.jsxs("div",{className:"flex items-center gap-1.5 truncate",children:[i.jsx(xf,{className:`w-3 h-3 shrink-0 ${Y?"text-amber-400":"text-muted"}`}),i.jsx("span",{className:`truncate ${Y?"font-bold text-amber-300":""}`,children:P.display_name}),P.is_guest&&i.jsx("span",{className:"text-[9px] font-mono text-amber-500 px-1 rounded-sm bg-amber-500/10 border border-amber-500/20 font-bold",children:"GAST"}),Y&&i.jsx("span",{className:"text-[9px] font-mono text-emerald-400 px-1 rounded-sm bg-emerald-500/10 border border-emerald-500/20 font-bold",children:"DU"})]}),i.jsxs("div",{className:"flex items-center gap-1 shrink-0",children:[t&&P.is_guest&&l&&i.jsxs("button",{onClick:()=>l(P),className:"text-indigo-400 hover:text-indigo-300 transition p-1 rounded-sm bg-indigo-500/10 hover:bg-indigo-500/20 border border-indigo-500/20 flex items-center gap-1 text-[10px] font-mono font-bold",title:"Konto-Einladungslink für diese Gast-Eintragung kopieren",children:[i.jsx(gy,{className:"w-3 h-3"})," LINK"]}),y&&s&&i.jsx("button",{onClick:()=>s(m,P.id),className:"text-muted hover:text-red-500 transition p-1 rounded-sm hover:bg-red-500/10",title:"Person aus dieser Schicht entfernen",children:i.jsx(rp,{className:"w-3.5 h-3.5"})})]})]},P.id)})})]}),i.jsx("td",{className:"py-3.5 px-4 text-right font-mono",children:L?i.jsxs("button",{onClick:()=>r(m),className:"px-3 py-1.5 rounded-sm text-xs font-semibold bg-red-500/10 hover:bg-red-500/20 text-red-500 border border-red-500/20 transition flex items-center gap-1 ml-auto",children:[i.jsx(rp,{className:"w-3.5 h-3.5"})," AUSTRAGEN"]}):E?i.jsx("span",{className:"text-xs text-muted font-bold",children:"[ VOLL ]"}):i.jsxs("button",{onClick:()=>n(m),style:{backgroundColor:"var(--brand-primary)"},className:"px-3.5 py-1.5 rounded-sm text-xs font-bold text-white transition hover:brightness-110 flex items-center gap-1 ml-auto shadow-sm",children:[i.jsx(Zn,{className:"w-3.5 h-3.5"})," EINTRAGEN"]})})]},`shift-${m.id}`)}))})]})})})]})}const qg=!1;var Qg=Array.isArray,yy=Array.prototype.indexOf,Tl=Array.prototype.includes,wy=Array.from,zo=Object.keys,Hi=Object.defineProperty,cl=Object.getOwnPropertyDescriptor,by=Object.getOwnPropertyDescriptors,ky=Object.prototype,_y=Array.prototype,Yg=Object.getPrototypeOf,sp=Object.isExtensible;const Gr=()=>{};function Sy(e){for(var t=0;t{e=r,t=s});return{promise:n,resolve:e,reject:t}}const mt=2,Al=4,uu=8,yf=1<<24,Cn=16,Jn=32,wr=64,ed=128,hn=512,et=1024,at=2048,Xn=4096,pn=8192,Ln=16384,rs=32768,td=1<<25,Zr=65536,Io=1<<17,Ny=1<<18,$s=1<<19,jy=1<<20,As=65536,Oo=1<<21,dl=1<<22,qr=1<<23,fl=Symbol("$state"),Ey=Symbol("legacy props"),Cy=Symbol(""),lo=Symbol("attributes"),nd=Symbol("class"),rd=Symbol("style"),ai=Symbol("text"),yi=Symbol("form reset"),cu=new class extends Error{constructor(){super(...arguments);ne(this,"name","StaleReactionError");ne(this,"message","The reaction that called `getAbortSignal()` was re-run or destroyed")}};var Sp;const sa=!!((Sp=globalThis.document)!=null&&Sp.contentType)&&globalThis.document.contentType.includes("xml"),la=3,ia=8;function Jg(e){return e===this.v}function Xg(e,t){return e!=e?t==t:e!==t||e!==null&&typeof e=="object"||typeof e=="function"}function Ty(e){return!Xg(e,this.v)}function Ay(e){throw new Error("https://svelte.dev/e/lifecycle_outside_component")}function Py(){throw new Error("https://svelte.dev/e/async_derived_orphan")}function Ly(e){throw new Error("https://svelte.dev/e/effect_in_teardown")}function My(){throw new Error("https://svelte.dev/e/effect_in_unowned_derived")}function Ry(e){throw new Error("https://svelte.dev/e/effect_orphan")}function $y(){throw new Error("https://svelte.dev/e/effect_update_depth_exceeded")}function Dy(){throw new Error("https://svelte.dev/e/hydration_failed")}function zy(){throw new Error("https://svelte.dev/e/state_descriptors_fixed")}function Iy(){throw new Error("https://svelte.dev/e/state_prototype_fixed")}function Oy(){throw new Error("https://svelte.dev/e/state_unsafe_mutation")}function Uy(){throw new Error("https://svelte.dev/e/svelte_boundary_reset_onerror")}let Fy=!1;const Vy=1,By=2,wf="[",ev="[!",lp="[?",tv="]",Ps={},Qe=Symbol("uninitialized"),nv="http://www.w3.org/1999/xhtml",Hy="http://www.w3.org/2000/svg",Ky="http://www.w3.org/1998/Math/MathML",Wy="@attach";let Ut=null;function Pl(e){Ut=e}function _r(e,t=!1,n){Ut={p:Ut,i:!1,c:null,e:null,s:e,x:null,r:ce,l:null}}function Sr(e){var t=Ut,n=t.e;if(n!==null){t.e=null;for(var r of n)Dv(r)}return e!==void 0&&(t.x=e),t.i=!0,Ut=t.p,e??{}}function rv(){return!0}let ds=[];function sv(){var e=ds;ds=[],Sy(e)}function mr(e){if(ds.length===0&&!bi){var t=ds;queueMicrotask(()=>{t===ds&&sv()})}ds.push(e)}function Gy(){for(;ds.length>0;)sv()}function qy(){console.warn("https://svelte.dev/e/derived_inert")}function aa(e){console.warn("https://svelte.dev/e/hydration_mismatch")}function Qy(){console.warn("https://svelte.dev/e/select_multiple_invalid_value")}function Yy(){console.warn("https://svelte.dev/e/svelte_boundary_reset_noop")}let he=!1;function Gn(e){he=e}let fe;function Ct(e){if(e===null)throw aa(),Ps;return fe=e}function Ls(){return Ct(nr(fe))}function $e(e){if(he){if(nr(fe)!==null)throw aa(),Ps;fe=e}}function bf(e=1){if(he){for(var t=e,n=fe;t--;)n=nr(n);fe=n}}function kf(e=!0){for(var t=0,n=fe;;){if(n.nodeType===ia){var r=n.data;if(r===tv){if(t===0)return n;t-=1}else(r===wf||r===ev||r[0]==="["&&!isNaN(Number(r.slice(1))))&&(t+=1)}var s=nr(n);e&&n.remove(),n=s}}function lv(e){if(!e||e.nodeType!==ia)throw aa(),Ps;return e.data}function hr(e){if(typeof e!="object"||e===null||fl in e)return e;const t=Yg(e);if(t!==ky&&t!==_y)return e;var n=new Map,r=Qg(e),s=ge(0),l=Ss,a=o=>{if(Ss===l)return o();var u=ve,c=Ss;xn(null),fp(l);var f=o();return xn(u),fp(c),f};return r&&n.set("length",ge(e.length)),new Proxy(e,{defineProperty(o,u,c){(!("value"in c)||c.configurable===!1||c.enumerable===!1||c.writable===!1)&&zy();var f=n.get(u);return f===void 0?a(()=>{var v=ge(c.value);return n.set(u,v),v}):Q(f,c.value,!0),!0},deleteProperty(o,u){var c=n.get(u);if(c===void 0){if(u in o){const f=a(()=>ge(Qe));n.set(u,f),ki(s)}}else Q(c,Qe),ki(s);return!0},get(o,u,c){var w;if(u===fl)return e;var f=n.get(u),v=u in o;if(f===void 0&&(!v||(w=cl(o,u))!=null&&w.writable)&&(f=a(()=>{var y=hr(v?o[u]:Qe),S=ge(y);return S}),n.set(u,f)),f!==void 0){var d=h(f);return d===Qe?void 0:d}return Reflect.get(o,u,c)},getOwnPropertyDescriptor(o,u){var c=Reflect.getOwnPropertyDescriptor(o,u);if(c&&"value"in c){var f=n.get(u);f&&(c.value=h(f))}else if(c===void 0){var v=n.get(u),d=v==null?void 0:v.v;if(v!==void 0&&d!==Qe)return{enumerable:!0,configurable:!0,value:d,writable:!0}}return c},has(o,u){var d;if(u===fl)return!0;var c=n.get(u),f=c!==void 0&&c.v!==Qe||Reflect.has(o,u);if(c!==void 0||ce!==null&&(!f||(d=cl(o,u))!=null&&d.writable)){c===void 0&&(c=a(()=>{var w=f?hr(o[u]):Qe,y=ge(w);return y}),n.set(u,c));var v=h(c);if(v===Qe)return!1}return f},set(o,u,c,f){var m;var v=n.get(u),d=u in o;if(r&&u==="length")for(var w=c;wge(Qe)),n.set(w+"",y))}if(v===void 0)(!d||(m=cl(o,u))!=null&&m.writable)&&(v=a(()=>ge(void 0)),Q(v,hr(c)),n.set(u,v));else{d=v.v!==Qe;var S=a(()=>hr(c));Q(v,S)}var R=Reflect.getOwnPropertyDescriptor(o,u);if(R!=null&&R.set&&R.set.call(f,c),!d){if(r&&typeof u=="string"){var g=n.get("length"),p=Number(u);Number.isInteger(p)&&p>=g.v&&Q(g,p+1)}ki(s)}return!0},ownKeys(o){h(s);var u=Reflect.ownKeys(o).filter(v=>{var d=n.get(v);return d===void 0||d.v!==Qe});for(var[c,f]of n)f.v!==Qe&&!(c in o)&&u.push(c);return u},setPrototypeOf(){Iy()}})}function ip(e){try{if(e!==null&&typeof e=="object"&&fl in e)return e[fl]}catch{}return e}function Zy(e,t){return Object.is(ip(e),ip(t))}var ks,sd,iv,av,ov;function ld(){if(ks===void 0){ks=window,sd=document,iv=/Firefox/.test(navigator.userAgent);var e=Element.prototype,t=Node.prototype,n=Text.prototype;av=cl(t,"firstChild").get,ov=cl(t,"nextSibling").get,sp(e)&&(e[nd]=void 0,e[lo]=null,e[rd]=void 0,e.__e=void 0),sp(n)&&(n[ai]=void 0)}}function er(e=""){return document.createTextNode(e)}function Gt(e){return av.call(e)}function nr(e){return ov.call(e)}function Ve(e,t){if(!he)return Gt(e);var n=Gt(fe);if(n===null)n=fe.appendChild(er());else if(t&&n.nodeType!==la){var r=er();return n==null||n.before(r),Ct(r),r}return t&&du(n),Ct(n),n}function Bs(e,t=!1){if(!he){var n=Gt(e);return n instanceof Comment&&n.data===""?nr(n):n}if(t){if((fe==null?void 0:fe.nodeType)!==la){var r=er();return fe==null||fe.before(r),Ct(r),r}du(fe)}return fe}function Ie(e,t=1,n=!1){let r=he?fe:e;for(var s;t--;)s=r,r=nr(r);if(!he)return r;if(n){if((r==null?void 0:r.nodeType)!==la){var l=er();return r===null?s==null||s.after(l):r.before(l),Ct(l),l}du(r)}return Ct(r),r}function Jy(e){e.textContent=""}function _f(e,t,n){return document.createElementNS(t??nv,e,void 0)}function du(e){if(e.nodeValue.length<65536)return;let t=e.nextSibling;for(;t!==null&&t.nodeType===la;)t.remove(),e.nodeValue+=t.nodeValue,t=e.nextSibling}function uv(e){var t=ce;if(t===null)return ve.f|=qr,e;if(!(t.f&rs)&&!(t.f&Al))throw e;Ir(e,t)}function Ir(e,t){for(;t!==null;){if(t.f&ed){if(!(t.f&rs))throw e;try{t.b.error(e);return}catch(n){e=n}}t=t.parent}throw e}const Xy=-7169;function Ge(e,t){e.f=e.f&Xy|t}function Sf(e){e.f&hn||e.deps===null?Ge(e,et):Ge(e,Xn)}function cv(e){if(e!==null)for(const t of e)!(t.f&mt)||!(t.f&As)||(t.f^=As,cv(t.deps))}function dv(e,t,n){e.f&at?t.add(e):e.f&Xn&&n.add(e),cv(e.deps),Ge(e,et)}function fv(e,t,n){if(e==null)return t(void 0),Gr;const r=ca(()=>e.subscribe(t,n));return r.unsubscribe?()=>r.unsubscribe():r}const Fs=[];function ew(e,t=Gr){let n=null;const r=new Set;function s(o){if(Xg(e,o)&&(e=o,n)){const u=!Fs.length;for(const c of r)c[1](),Fs.push(c,e);if(u){for(let c=0;c{r.delete(c),r.size===0&&n&&(n(),n=null)}}return{set:s,update:l,subscribe:a}}function oi(e){let t;return fv(e,n=>t=n)(),t}let id=Symbol("unmounted");function ap(e,t,n){const r=n[t]??(n[t]={store:null,source:jv(void 0),unsubscribe:Gr});if(r.store!==e&&!(id in n))if(r.unsubscribe(),r.store=e??null,e==null)r.source.v=void 0,r.unsubscribe=Gr;else{var s=!0;r.unsubscribe=fv(e,l=>{s?r.source.v=l:Q(r.source,l)}),s=!1}return e&&id in n?oi(e):h(r.source)}function tw(){const e={};function t(){hu(()=>{for(var n in e)e[n].unsubscribe();Hi(e,id,{enumerable:!1,value:!0})})}return[e,t]}let Ju=null,Vs=null,X=null,wi=null,dt=null,ad=null,bi=!1,Xu=!1,rl=null,io=null;var op=0;let nw=1;var pl,Mr,ms,ml,gl,gs,vl,ir,Wi,Bt,Gi,Rr,Bn,Hn,xl,yl,Se,od,ui,ud,hv,pv,ao,rw,cd,Hs;const Bo=class Bo{constructor(){ie(this,Se);ne(this,"id",nw++);ie(this,pl,!1);ne(this,"linked",!0);ie(this,Mr,null);ie(this,ms,null);ne(this,"async_deriveds",new Map);ne(this,"current",new Map);ne(this,"previous",new Map);ne(this,"unblocked",new Set);ie(this,ml,new Set);ie(this,gl,new Set);ie(this,gs,new Set);ie(this,vl,0);ie(this,ir,new Map);ie(this,Wi,null);ie(this,Bt,[]);ie(this,Gi,[]);ie(this,Rr,new Set);ie(this,Bn,new Set);ie(this,Hn,new Map);ie(this,xl,new Set);ne(this,"is_fork",!1);ie(this,yl,!1)}skip_effect(t){_(this,Hn).has(t)||_(this,Hn).set(t,{d:[],m:[]}),_(this,xl).delete(t)}unskip_effect(t,n=r=>this.schedule(r)){var r=_(this,Hn).get(t);if(r){_(this,Hn).delete(t);for(var s of r.d)Ge(s,at),n(s);for(s of r.m)Ge(s,Xn),n(s)}_(this,xl).add(t)}capture(t,n,r=!1){t.v!==Qe&&!this.previous.has(t)&&this.previous.set(t,t.v),t.f&qr||(this.current.set(t,[n,r]),dt==null||dt.set(t,n)),this.is_fork||(t.v=n)}activate(){X=this}deactivate(){X=null,dt=null}flush(){try{Xu=!0,X=this,me(this,Se,ui).call(this)}finally{op=0,ad=null,rl=null,io=null,Xu=!1,X=null,dt=null,_s.clear()}}discard(){for(const t of _(this,gl))t(this);_(this,gl).clear(),_(this,gs).clear(),me(this,Se,Hs).call(this)}register_created_effect(t){_(this,Gi).push(t)}increment(t,n){if(re(this,vl,_(this,vl)+1),t){let r=_(this,ir).get(n)??0;_(this,ir).set(n,r+1)}}decrement(t,n){if(re(this,vl,_(this,vl)-1),t){let r=_(this,ir).get(n)??0;r===1?_(this,ir).delete(n):_(this,ir).set(n,r-1)}_(this,yl)||(re(this,yl,!0),mr(()=>{re(this,yl,!1),this.linked&&this.flush()}))}transfer_effects(t,n){for(const r of t)_(this,Rr).add(r);for(const r of n)_(this,Bn).add(r);t.clear(),n.clear()}oncommit(t){_(this,ml).add(t)}ondiscard(t){_(this,gl).add(t)}on_fork_commit(t){_(this,gs).add(t)}run_fork_commit_callbacks(){for(const t of _(this,gs))t(this);_(this,gs).clear()}settled(){return(_(this,Wi)??re(this,Wi,Zg())).promise}static ensure(){var t;if(X===null){const n=X=new Bo;me(t=n,Se,cd).call(t),!Xu&&!bi&&mr(()=>{_(n,pl)||n.flush()})}return X}apply(){{dt=null;return}}schedule(t){var s;if(ad=t,(s=t.b)!=null&&s.is_pending&&t.f&(Al|uu|yf)&&!(t.f&rs)){t.b.defer_effect(t);return}for(var n=t;n.parent!==null;){n=n.parent;var r=n.f;if(rl!==null&&n===ce&&(ve===null||!(ve.f&mt)))return;if(r&(wr|Jn)){if(!(r&et))return;n.f^=et}}_(this,Bt).push(n)}};pl=new WeakMap,Mr=new WeakMap,ms=new WeakMap,ml=new WeakMap,gl=new WeakMap,gs=new WeakMap,vl=new WeakMap,ir=new WeakMap,Wi=new WeakMap,Bt=new WeakMap,Gi=new WeakMap,Rr=new WeakMap,Bn=new WeakMap,Hn=new WeakMap,xl=new WeakMap,yl=new WeakMap,Se=new WeakSet,od=function(){if(this.is_fork)return!0;for(const r of _(this,ir).keys()){for(var t=r,n=!1;t.parent!==null;){if(_(this,Hn).has(t)){n=!0;break}t=t.parent}if(!n)return!0}return!1},ui=function(){var u,c,f,v;if(re(this,pl,!0),op++>1e3&&(me(this,Se,Hs).call(this),sw()),!me(this,Se,od).call(this)){for(const d of _(this,Rr))_(this,Bn).delete(d),Ge(d,at),this.schedule(d);for(const d of _(this,Bn))Ge(d,Xn),this.schedule(d)}const t=_(this,Bt);re(this,Bt,[]),this.apply();var n=rl=[],r=[],s=io=[];for(const d of t)try{me(this,Se,ud).call(this,d,n,r)}catch(w){throw vv(d),w}if(X=null,s.length>0){var l=Bo.ensure();for(const d of s)l.schedule(d)}if(rl=null,io=null,me(this,Se,od).call(this)){me(this,Se,ao).call(this,r),me(this,Se,ao).call(this,n);for(const[d,w]of _(this,Hn))gv(d,w);s.length>0&&me(u=X,Se,ui).call(u);return}const a=me(this,Se,hv).call(this);if(a){me(c=a,Se,pv).call(c,this);return}_(this,Rr).clear(),_(this,Bn).clear();for(const d of _(this,ml))d(this);_(this,ml).clear(),wi=this,up(r),up(n),wi=null,(f=_(this,Wi))==null||f.resolve();var o=X;if(this.linked&&_(this,vl)===0&&me(this,Se,Hs).call(this),_(this,Bt).length>0){o===null&&(o=this,me(this,Se,cd).call(this));const d=o;_(d,Bt).push(..._(this,Bt).filter(w=>!_(d,Bt).includes(w)))}o!==null&&me(v=o,Se,ui).call(v)},ud=function(t,n,r){t.f^=et;for(var s=t.first;s!==null;){var l=s.f,a=(l&(Jn|wr))!==0,o=a&&(l&et)!==0,u=o||(l&pn)!==0||_(this,Hn).has(s);if(!u&&s.fn!==null){a?s.f^=et:l&Al?n.push(s):ua(s)&&(l&Cn&&_(this,Bn).add(s),Ll(s));var c=s.first;if(c!==null){s=c;continue}}for(;s!==null;){var f=s.next;if(f!==null){s=f;break}s=s.parent}}},hv=function(){for(var t=_(this,Mr);t!==null;){if(!t.is_fork){for(const[n,[,r]]of this.current)if(t.current.has(n)&&!r)return t}t=_(t,Mr)}return null},pv=function(t){var r;for(const[s,l]of t.current)!this.previous.has(s)&&t.previous.has(s)&&this.previous.set(s,t.previous.get(s)),this.current.set(s,l);for(const[s,l]of t.async_deriveds){const a=this.async_deriveds.get(s);a&&l.promise.then(a.resolve)}const n=s=>{var l=s.reactions;if(l!==null)for(const u of l){var a=u.f;if(a&mt)n(u);else{var o=u;a&(dl|Cn)&&!this.async_deriveds.has(o)&&(_(this,Bn).delete(o),Ge(o,at),this.schedule(o))}}};for(const s of this.current.keys())n(s);this.oncommit(()=>t.discard()),me(r=t,Se,Hs).call(r),X=this,me(this,Se,ui).call(this)},ao=function(t){for(var n=0;n!this.current.has(d));if(s.length===0)t&&v.discard();else if(n.length>0){if(t)for(const d of _(this,xl))v.unskip_effect(d,w=>{var y;w.f&(Cn|dl)?v.schedule(w):me(y=v,Se,ao).call(y,[w])});v.activate();var l=new Set,a=new Map;for(var o of n)mv(o,s,l,a);a=new Map;var u=[...v.current.keys()].filter(d=>this.current.has(d)?this.current.get(d)[0]!==d.v:!0);if(u.length>0)for(const d of _(this,Gi))!(d.f&(Ln|pn|Io))&&Nf(d,u,a)&&(d.f&(dl|Cn)?(Ge(d,at),v.schedule(d)):_(v,Rr).add(d));if(_(v,Bt).length>0){v.apply();for(var c of _(v,Bt))me(f=v,Se,ud).call(f,c,[],[]);re(v,Bt,[])}v.deactivate()}}}},cd=function(){Vs===null?Ju=Vs=this:(re(Vs,ms,this),re(this,Mr,Vs)),Vs=this},Hs=function(){var t=_(this,Mr),n=_(this,ms);t===null?Ju=n:re(t,ms,n),n===null?Vs=t:re(n,Mr,t),this.linked=!1};let Jr=Bo;function Pe(e){var t=bi;bi=!0;try{for(var n;;){if(Gy(),X===null)return n;X.flush()}}finally{bi=t}}function sw(){try{$y()}catch(e){Ir(e,ad)}}let kn=null;function up(e){var t=e.length;if(t!==0){for(var n=0;n0)){_s.clear();for(const s of kn){if(s.f&(Ln|pn))continue;const l=[s];let a=s.parent;for(;a!==null;)kn.has(a)&&(kn.delete(a),l.push(a)),a=a.parent;for(let o=l.length-1;o>=0;o--){const u=l[o];u.f&(Ln|pn)||Ll(u)}}kn.clear()}}kn=null}}function mv(e,t,n,r){if(!n.has(e)&&(n.add(e),e.reactions!==null))for(const s of e.reactions){const l=s.f;l&mt?mv(s,t,n,r):l&(dl|Cn)&&!(l&at)&&Nf(s,t,r)&&(Ge(s,at),jf(s))}}function Nf(e,t,n){const r=n.get(e);if(r!==void 0)return r;if(e.deps!==null)for(const s of e.deps){if(Tl.call(t,s))return!0;if(s.f&mt&&Nf(s,t,n))return n.set(s,!0),!0}return n.set(e,!1),!1}function jf(e){X.schedule(e)}function gv(e,t){if(!(e.f&Jn&&e.f&et)){e.f&at?t.d.push(e):e.f&Xn&&t.m.push(e),Ge(e,et);for(var n=e.first;n!==null;)gv(n,t),n=n.next}}function vv(e){Ge(e,et);for(var t=e.first;t!==null;)vv(t),t=t.next}function lw(e){let t=0,n=oa(0),r;return()=>{Tf()&&(h(n),pu(()=>(t===0&&(r=ca(()=>e(()=>ki(n)))),t+=1,()=>{mr(()=>{t-=1,t===0&&(r==null||r(),r=void 0,ki(n))})})))}}var iw=Zr|$s;function aw(e,t,n,r){new ow(e,t,n,r)}var Ht,qi,sn,vs,Mt,ln,Nt,Kt,ar,xs,$r,wl,Qi,Yi,or,Ho,ze,xv,yv,wv,dd,oo,uo,fd,hd;class ow{constructor(t,n,r,s){ie(this,ze);ne(this,"parent");ne(this,"is_pending",!1);ne(this,"transform_error");ie(this,Ht);ie(this,qi,he?fe:null);ie(this,sn);ie(this,vs);ie(this,Mt);ie(this,ln,null);ie(this,Nt,null);ie(this,Kt,null);ie(this,ar,null);ie(this,xs,0);ie(this,$r,0);ie(this,wl,!1);ie(this,Qi,new Set);ie(this,Yi,new Set);ie(this,or,null);ie(this,Ho,lw(()=>(re(this,or,oa(_(this,xs))),()=>{re(this,or,null)})));var l;re(this,Ht,t),re(this,sn,n),re(this,vs,a=>{var o=ce;o.b=this,o.f|=ed,r(a)}),this.parent=ce.b,this.transform_error=s??((l=this.parent)==null?void 0:l.transform_error)??(a=>a),re(this,Mt,da(()=>{if(he){const a=_(this,qi);Ls();const o=a.data===ev;if(a.data.startsWith(lp)){const c=JSON.parse(a.data.slice(lp.length));me(this,ze,yv).call(this,c)}else o?me(this,ze,wv).call(this):me(this,ze,xv).call(this)}else me(this,ze,dd).call(this)},iw)),he&&re(this,Ht,fe)}defer_effect(t){dv(t,_(this,Qi),_(this,Yi))}is_rendered(){return!this.is_pending&&(!this.parent||this.parent.is_rendered())}has_pending_snippet(){return!!_(this,sn).pending}update_pending_count(t,n){me(this,ze,fd).call(this,t,n),re(this,xs,_(this,xs)+t),!(!_(this,or)||_(this,wl))&&(re(this,wl,!0),mr(()=>{re(this,wl,!1),_(this,or)&&Vo(_(this,or),_(this,xs))}))}get_effect_pending(){return _(this,Ho).call(this),h(_(this,or))}error(t){if(!_(this,sn).onerror&&!_(this,sn).failed)throw t;X!=null&&X.is_fork?(_(this,ln)&&X.skip_effect(_(this,ln)),_(this,Nt)&&X.skip_effect(_(this,Nt)),_(this,Kt)&&X.skip_effect(_(this,Kt)),X.on_fork_commit(()=>{me(this,ze,hd).call(this,t)})):me(this,ze,hd).call(this,t)}}Ht=new WeakMap,qi=new WeakMap,sn=new WeakMap,vs=new WeakMap,Mt=new WeakMap,ln=new WeakMap,Nt=new WeakMap,Kt=new WeakMap,ar=new WeakMap,xs=new WeakMap,$r=new WeakMap,wl=new WeakMap,Qi=new WeakMap,Yi=new WeakMap,or=new WeakMap,Ho=new WeakMap,ze=new WeakSet,xv=function(){try{re(this,ln,Vn(()=>_(this,vs).call(this,_(this,Ht))))}catch(t){this.error(t)}},yv=function(t){const n=_(this,sn).failed;n&&re(this,Kt,Vn(()=>{n(_(this,Ht),()=>t,()=>()=>{})}))},wv=function(){const t=_(this,sn).pending;t&&(this.is_pending=!0,re(this,Nt,Vn(()=>t(_(this,Ht)))),mr(()=>{var n=re(this,ar,document.createDocumentFragment()),r=er();n.append(r),re(this,ln,me(this,ze,uo).call(this,()=>Vn(()=>_(this,vs).call(this,r)))),_(this,$r)===0&&(_(this,Ht).before(n),re(this,ar,null),_i(_(this,Nt),()=>{re(this,Nt,null)}),me(this,ze,oo).call(this,X))}))},dd=function(){try{if(this.is_pending=this.has_pending_snippet(),re(this,$r,0),re(this,xs,0),re(this,ln,Vn(()=>{_(this,vs).call(this,_(this,Ht))})),_(this,$r)>0){var t=re(this,ar,document.createDocumentFragment());Bv(_(this,ln),t);const n=_(this,sn).pending;re(this,Nt,Vn(()=>n(_(this,Ht))))}else me(this,ze,oo).call(this,X)}catch(n){this.error(n)}},oo=function(t){this.is_pending=!1,t.transfer_effects(_(this,Qi),_(this,Yi))},uo=function(t){var n=ce,r=ve,s=Ut;tr(_(this,Mt)),xn(_(this,Mt)),Pl(_(this,Mt).ctx);try{return Jr.ensure(),t()}catch(l){return uv(l),null}finally{tr(n),xn(r),Pl(s)}},fd=function(t,n){var r;if(!this.has_pending_snippet()){this.parent&&me(r=this.parent,ze,fd).call(r,t,n);return}re(this,$r,_(this,$r)+t),_(this,$r)===0&&(me(this,ze,oo).call(this,n),_(this,Nt)&&_i(_(this,Nt),()=>{re(this,Nt,null)}),_(this,ar)&&(_(this,Ht).before(_(this,ar)),re(this,ar,null)))},hd=function(t){_(this,ln)&&(ht(_(this,ln)),re(this,ln,null)),_(this,Nt)&&(ht(_(this,Nt)),re(this,Nt,null)),_(this,Kt)&&(ht(_(this,Kt)),re(this,Kt,null)),he&&(Ct(_(this,qi)),bf(),Ct(kf()));var n=_(this,sn).onerror;let r=_(this,sn).failed;var s=!1,l=!1;const a=()=>{if(s){Yy();return}s=!0,l&&Uy(),_(this,Kt)!==null&&_i(_(this,Kt),()=>{re(this,Kt,null)}),me(this,ze,uo).call(this,()=>{me(this,ze,dd).call(this)})},o=u=>{try{l=!0,n==null||n(u,a),l=!1}catch(c){Ir(c,_(this,Mt)&&_(this,Mt).parent)}r&&re(this,Kt,me(this,ze,uo).call(this,()=>{try{return Vn(()=>{var c=ce;c.b=this,c.f|=ed,r(_(this,Ht),()=>u,()=>a)})}catch(c){return Ir(c,_(this,Mt).parent),null}}))};mr(()=>{var u;try{u=this.transform_error(t)}catch(c){Ir(c,_(this,Mt)&&_(this,Mt).parent);return}u!==null&&typeof u=="object"&&typeof u.then=="function"?u.then(o,c=>Ir(c,_(this,Mt)&&_(this,Mt).parent)):o(u)})};function bv(e,t,n,r){const s=Ef;var l=e.filter(d=>!d.settled);if(n.length===0&&l.length===0){r(t.map(s));return}var a=ce,o=uw(),u=l.length===1?l[0].promise:l.length>1?Promise.all(l.map(d=>d.promise)):null;function c(d){if(!(a.f&Ln)){o();try{r(d)}catch(w){Ir(w,a)}Uo()}}var f=kv();if(n.length===0){u.then(()=>c(t.map(s))).finally(f);return}function v(){Promise.all(n.map(d=>cw(d))).then(d=>c([...t.map(s),...d])).catch(d=>Ir(d,a)).finally(f)}u?u.then(()=>{o(),v(),Uo()}):v()}function uw(){var e=ce,t=ve,n=Ut,r=X;return function(l=!0){tr(e),xn(t),Pl(n),l&&!(e.f&Ln)&&(r==null||r.activate(),r==null||r.apply())}}function Uo(e=!0){tr(null),xn(null),Pl(null),e&&(X==null||X.deactivate())}function kv(){var e=ce,t=e.b,n=X,r=t.is_rendered();return t.update_pending_count(1,n),n.increment(r,e),()=>{t.update_pending_count(-1,n),n.decrement(r,e)}}function Ef(e){var t=mt|at;return ce!==null&&(ce.f|=$s),{ctx:Ut,deps:null,effects:null,equals:Jg,f:t,fn:e,reactions:null,rv:0,v:Qe,wv:0,parent:ce,ac:null}}const Ba=Symbol("obsolete");function cw(e,t,n){let r=ce;r===null&&Py();var s=void 0,l=oa(Qe),a=!ve,o=new Set;return kw(()=>{var w;var u=ce,c=Zg();s=c.promise;try{Promise.resolve(e()).then(c.resolve,y=>{y!==cu&&c.reject(y)}).finally(Uo)}catch(y){c.reject(y),Uo()}var f=X;if(a){if(u.f&rs)var v=kv();if(r.b.is_rendered())(w=f.async_deriveds.get(u))==null||w.reject(Ba);else for(const y of o.values())y.reject(Ba);o.add(c),f.async_deriveds.set(u,c)}const d=(y,S=void 0)=>{v==null||v(),o.delete(c),S!==Ba&&(f.activate(),S?(l.f|=qr,Vo(l,S)):(l.f&qr&&(l.f^=qr),Vo(l,y)),f.deactivate())};c.promise.then(d,y=>d(null,y||"unknown"))}),hu(()=>{for(const u of o)u.reject(Ba)}),new Promise(u=>{function c(f){function v(){f===s?u(l):c(s)}f.then(v,v)}c(s)})}function St(e){const t=Ef(e);return Tv(t),t}function dw(e){var t=e.effects;if(t!==null){e.effects=null;for(var n=0;n0&&!Nv&&hw()}return t}function hw(){Nv=!1;for(const e of Fo){e.f&et&&Ge(e,Xn);let t;try{t=ua(e)}catch{t=!0}t&&Ll(e)}Fo.clear()}function ki(e){Q(e,e.v+1)}function Ev(e,t,n){var r=e.reactions;if(r!==null)for(var s=r.length,l=0;l{document.activeElement===n&&e.focus()})}}let cp=!1;function Cv(){cp||(cp=!0,document.addEventListener("reset",e=>{Promise.resolve().then(()=>{var t;if(!e.defaultPrevented)for(const n of e.target.elements)(t=n[yi])==null||t.call(n)})},{capture:!0}))}function fu(e){var t=ve,n=ce;xn(null),tr(null);try{return e()}finally{xn(t),tr(n)}}function mw(e,t,n,r=n){e.addEventListener(t,()=>fu(n));const s=e[yi];s?e[yi]=()=>{s(),r(!0)}:e[yi]=()=>r(!0),Cv()}let co=!1,br=!1;function dp(e){br=e}let ve=null,Tn=!1;function xn(e){ve=e}let ce=null;function tr(e){ce=e}let mn=null;function Tv(e){ve!==null&&(mn===null?mn=[e]:mn.push(e))}let Rt=null,Ft=0,rn=null;function gw(e){rn=e}let Av=1,fs=0,Ss=fs;function fp(e){Ss=e}function Pv(){return++Av}function ua(e){var t=e.f;if(t&at)return!0;if(t&mt&&(e.f&=~As),t&Xn){for(var n=e.deps,r=n.length,s=0;se.wv)return!0}t&hn&&dt===null&&Ge(e,et)}return!1}function Lv(e,t,n=!0){var r=e.reactions;if(r!==null&&!(mn!==null&&Tl.call(mn,e)))for(var s=0;s{e.ac.abort(cu)}),e.ac=null);try{e.f|=Oo;var f=e.fn,v=f();e.f|=rs;var d=e.deps,w=X==null?void 0:X.is_fork;if(Rt!==null){var y;if(w||Ki(e,Ft),d!==null&&Ft>0)for(d.length=Ft+Rt.length,y=0;y{ht(t)}}function bw(e){Jr.ensure();const t=Rn(wr|$s,e);return(n={})=>new Promise(r=>{n.outro?_i(t,()=>{ht(t),r(void 0)}):(ht(t),r(void 0))})}function Af(e){return Rn(Al,e)}function kw(e){return Rn(dl|$s,e)}function pu(e,t=0){return Rn(uu|t,e)}function wt(e,t=[],n=[],r=[]){bv(r,t,n,s=>{Rn(uu,()=>e(...s.map(h)))})}function da(e,t=0){var n=Rn(Cn|t,e);return n}function zv(e,t=0){var n=Rn(yf|t,e);return n}function Vn(e){return Rn(Jn|$s,e)}function Iv(e){var t=e.teardown;if(t!==null){const n=br,r=ve;dp(!0),xn(null);try{t.call(null)}finally{dp(n),xn(r)}}}function Pf(e,t=!1){var n=e.first;for(e.first=e.last=null;n!==null;){const s=n.ac;s!==null&&fu(()=>{s.abort(cu)});var r=n.next;n.f&wr?n.parent=null:ht(n,t),n=r}}function _w(e){for(var t=e.first;t!==null;){var n=t.next;t.f&Jn||ht(t),t=n}}function ht(e,t=!0){var n=!1;(t||e.f&Ny)&&e.nodes!==null&&e.nodes.end!==null&&(Ov(e.nodes.start,e.nodes.end),n=!0),Ge(e,td),Pf(e,t&&!n),Ki(e,0);var r=e.nodes&&e.nodes.t;if(r!==null)for(const l of r)l.stop();Iv(e),e.f^=td,e.f|=Ln;var s=e.parent;s!==null&&s.first!==null&&Uv(e),e.next=e.prev=e.teardown=e.ctx=e.deps=e.fn=e.nodes=e.ac=e.b=null}function Ov(e,t){for(;e!==null;){var n=e===t?null:nr(e);e.remove(),e=n}}function Uv(e){var t=e.parent,n=e.prev,r=e.next;n!==null&&(n.next=r),r!==null&&(r.prev=n),t!==null&&(t.first===e&&(t.first=r),t.last===e&&(t.last=n))}function _i(e,t,n=!0){var r=[];Fv(e,r,!0);var s=()=>{n&&ht(e),t&&t()},l=r.length;if(l>0){var a=()=>--l||s();for(var o of r)o.out(a)}else s()}function Fv(e,t,n){if(!(e.f&pn)){e.f^=pn;var r=e.nodes&&e.nodes.t;if(r!==null)for(const o of r)(o.is_global||n)&&t.push(o);for(var s=e.first;s!==null;){var l=s.next;if(!(s.f&wr)){var a=(s.f&Zr)!==0||(s.f&Jn)!==0&&(e.f&Cn)!==0;Fv(s,t,a?n:!1)}s=l}}}function Sw(e){Vv(e,!0)}function Vv(e,t){if(e.f&pn){e.f^=pn,e.f&et||(Ge(e,at),Jr.ensure().schedule(e));for(var n=e.first;n!==null;){var r=n.next,s=(n.f&Zr)!==0||(n.f&Jn)!==0;Vv(n,s?t:!1),n=r}var l=e.nodes&&e.nodes.t;if(l!==null)for(const a of l)(a.is_global||t)&&a.in()}}function Bv(e,t){if(e.nodes)for(var n=e.nodes.start,r=e.nodes.end;n!==null;){var s=n===r?null:nr(n);t.append(n),n=s}}function hp(e){const t={get:n=>oi(t.store)[n],set:(n,r)=>{typeof n=="string"?Object.assign(oi(t.store),{[n]:r}):Object.assign(oi(t.store),n),t.store.set(oi(t.store))},store:ew(e)};return t}globalThis.$altcha=globalThis.$altcha||{algorithms:new Map,defaults:hp({}),i18n:hp({}),instances:new Set,plugins:new Set};const Nw={ariaLinkLabel:"Altcha (official website)",cancel:"Cancel",enterCode:"Enter code",enterCodeAria:"Enter code you hear. Press Space to play audio.",enterCodeFromImage:"To proceed, please enter the code from the image below.",error:"Verification failed. Try again later.",expired:"Verification expired. Try again.",footer:'Protected by ALTCHA',getAudioChallenge:"Get an audio challenge",label:"I'm not a robot",loading:"Loading...",reload:"Reload",verify:"Verify",verificationRequired:"Verification required!",verified:"Verified",verifying:"Verifying...",waitAlert:"Verifying... please wait."};globalThis.$altcha.i18n.set("en",Nw);const jw="5";var Np;typeof window<"u"&&((Np=window.__svelte??(window.__svelte={})).v??(Np.v=new Set)).add(jw);const ps=Symbol("events"),Hv=new Set,pd=new Set;function Kv(e,t,n,r={}){function s(l){if(r.capture||md.call(t,l),!l.cancelBubble)return fu(()=>n==null?void 0:n.call(this,l))}return e.startsWith("pointer")||e.startsWith("touch")||e==="wheel"?mr(()=>{t.addEventListener(e,s,r)}):t.addEventListener(e,s,r),s}function Je(e,t,n,r,s){var l={capture:r,passive:s},a=Kv(e,t,n,l);(t===document.body||t===window||t===document||t instanceof HTMLMediaElement)&&hu(()=>{t.removeEventListener(e,a,l)})}function mu(e,t,n){(t[ps]??(t[ps]={}))[e]=n}function gu(e){for(var t=0;t{throw p});throw d}}finally{e[ps]=t,delete e.currentTarget,xn(f),tr(v)}}}var jp;const ec=((jp=globalThis==null?void 0:globalThis.window)==null?void 0:jp.trustedTypes)&&globalThis.window.trustedTypes.createPolicy("svelte-trusted-html",{createHTML:e=>e});function Ew(e){return(ec==null?void 0:ec.createHTML(e))??e}function Wv(e){var t=_f("template");return t.innerHTML=Ew(e.replaceAll("","")),t.content}function Yt(e,t){var n=ce;n.nodes===null&&(n.nodes={start:e,end:t,a:null,t:null})}function Fe(e,t){var n=(t&Vy)!==0,r=(t&By)!==0,s,l=!e.startsWith("");return()=>{if(he)return Yt(fe,null),fe;s===void 0&&(s=Wv(l?e:""+e),n||(s=Gt(s)));var a=r||iv?document.importNode(s,!0):s.cloneNode(!0);if(n){var o=Gt(a),u=a.lastChild;Yt(o,u)}else Yt(a,a);return a}}function Cw(e,t,n="svg"){var r=!e.startsWith(""),s=`<${n}>${r?e:""+e}`,l;return()=>{if(he)return Yt(fe,null),fe;if(!l){var a=Wv(s),o=Gt(a);l=Gt(o)}var u=l.cloneNode(!0);return Yt(u,u),u}}function Lf(e,t){return Cw(e,t,"svg")}function Ha(e=""){if(!he){var t=er(e+"");return Yt(t,t),t}var n=fe;return n.nodeType!==la?(n.before(n=er()),Ct(n)):du(n),Yt(n,n),n}function mp(){if(he)return Yt(fe,null),fe;var e=document.createDocumentFragment(),t=document.createComment(""),n=er();return e.append(t,n),Yt(t,n),e}function ye(e,t){if(he){var n=ce;(!(n.f&rs)||n.nodes.end===null)&&(n.nodes.end=fe),Ls();return}e!==null&&e.before(t)}function Tw(e){return e.endsWith("capture")&&e!=="gotpointercapture"&&e!=="lostpointercapture"}const Aw=["beforeinput","click","change","dblclick","contextmenu","focusin","focusout","input","keydown","keyup","mousedown","mousemove","mouseout","mouseover","mouseup","pointerdown","pointermove","pointerout","pointerover","pointerup","touchend","touchmove","touchstart"];function Pw(e){return Aw.includes(e)}const Lw={formnovalidate:"formNoValidate",ismap:"isMap",nomodule:"noModule",playsinline:"playsInline",readonly:"readOnly",defaultvalue:"defaultValue",defaultchecked:"defaultChecked",srcobject:"srcObject",novalidate:"noValidate",allowfullscreen:"allowFullscreen",disablepictureinpicture:"disablePictureInPicture",disableremoteplayback:"disableRemotePlayback"};function Mw(e){return e=e.toLowerCase(),Lw[e]??e}const Rw=["touchstart","touchmove"];function $w(e){return Rw.includes(e)}function Kn(e,t){var n=t==null?"":typeof t=="object"?`${t}`:t;n!==(e[ai]??(e[ai]=e.nodeValue))&&(e[ai]=n,e.nodeValue=`${n}`)}function Gv(e,t){return qv(e,t)}function Dw(e,t){ld(),t.intro=t.intro??!1;const n=t.target,r=he,s=fe;try{for(var l=Gt(n);l&&(l.nodeType!==ia||l.data!==wf);)l=nr(l);if(!l)throw Ps;Gn(!0),Ct(l);const a=qv(e,{...t,anchor:l});return Gn(!1),a}catch(a){if(a instanceof Error&&a.message.split(` +`).some(o=>o.startsWith("https://svelte.dev/e/")))throw a;return a!==Ps&&console.warn("Failed to hydrate: ",a),t.recover===!1&&Dy(),ld(),Jy(n),Gn(!1),Gv(e,t)}finally{Gn(r),Ct(s)}}const Ka=new Map;function qv(e,{target:t,anchor:n,props:r={},events:s,context:l,intro:a=!0,transformError:o}){ld();var u=void 0,c=bw(()=>{var f=n??t.appendChild(er());aw(f,{pending:()=>{}},w=>{_r({});var y=Ut;if(l&&(y.c=l),s&&(r.$$events=s),he&&Yt(w,null),u=e(w,r)||{},he&&(ce.nodes.end=fe,fe===null||fe.nodeType!==ia||fe.data!==tv))throw aa(),Ps;Sr()},o);var v=new Set,d=w=>{for(var y=0;y{var R;for(var w of v)for(const g of[t,document]){var y=Ka.get(g),S=y.get(w);--S==0?(g.removeEventListener(w,md),y.delete(w),y.size===0&&Ka.delete(g)):y.set(w,S)}pd.delete(d),f!==n&&((R=f.parentNode)==null||R.removeChild(f))}});return gd.set(u,c),u}let gd=new WeakMap;function zw(e,t){const n=gd.get(e);return n?(gd.delete(e),n(t)):Promise.resolve()}var Sn,ur,Nn,ys,Zi,Ko,bd;class vu{constructor(t,n=!0){ne(this,"anchor");ie(this,Sn,new Map);ie(this,ur,new Map);ie(this,Nn,new Map);ie(this,ys,new Set);ie(this,Zi,!0);ie(this,Ko,t=>{if(_(this,Sn).has(t)){var n=_(this,Sn).get(t),r=_(this,ur).get(n);if(r)Sw(r),_(this,ys).delete(n);else{var s=_(this,Nn).get(n);s&&(_(this,ur).set(n,s.effect),_(this,Nn).delete(n),s.fragment.lastChild.remove(),this.anchor.before(s.fragment),r=s.effect)}for(const[l,a]of _(this,Sn)){if(_(this,Sn).delete(l),l===t)break;const o=_(this,Nn).get(a);o&&(ht(o.effect),_(this,Nn).delete(a))}for(const[l,a]of _(this,ur)){if(l===n||_(this,ys).has(l))continue;const o=()=>{if(Array.from(_(this,Sn).values()).includes(l)){var c=document.createDocumentFragment();Bv(a,c),c.append(er()),_(this,Nn).set(l,{effect:a,fragment:c})}else ht(a);_(this,ys).delete(l),_(this,ur).delete(l)};_(this,Zi)||!r?(_(this,ys).add(l),_i(a,o,!1)):o()}}});ie(this,bd,t=>{_(this,Sn).delete(t);const n=Array.from(_(this,Sn).values());for(const[r,s]of _(this,Nn))n.includes(r)||(ht(s.effect),_(this,Nn).delete(r))});this.anchor=t,re(this,Zi,n)}ensure(t,n){var r=X;n&&!_(this,ur).has(t)&&!_(this,Nn).has(t)&&_(this,ur).set(t,Vn(()=>n(this.anchor))),_(this,Sn).set(r,t),he&&(this.anchor=fe),_(this,Ko).call(this,r)}}Sn=new WeakMap,ur=new WeakMap,Nn=new WeakMap,ys=new WeakMap,Zi=new WeakMap,Ko=new WeakMap,bd=new WeakMap;function Iw(e,t,...n){var r=new vu(e);da(()=>{const s=t()??null;r.ensure(s,s&&(l=>s(l,...n)))},Zr)}function Mf(e){Ut===null&&Ay(),Vt(()=>{const t=ca(e);if(typeof t=="function")return t})}function Ze(e,t,n=!1){var r;he&&(r=fe,Ls());var s=new vu(e),l=n?Zr:0;function a(o,u){if(he){var c=lv(r);if(o!==parseInt(c.substring(1))){var f=kf();Ct(f),s.anchor=f,Gn(!1),s.ensure(o,u),Gn(!0);return}}s.ensure(o,u)}da(()=>{var o=!1;t((u,c=0)=>{o=!0,a(c,u)}),o||a(-1,null)},l)}const Ow=Symbol("NaN");function Uw(e,t,n){he&&Ls();var r=new vu(e);da(()=>{var s=t();s!==s&&(s=Ow),r.ensure(s,n)})}function Qv(e,t,n=!1,r=!1,s=!1,l=!1){var a=e,o="";if(n){var u=e;he&&(a=Ct(Gt(u)))}wt(()=>{var c=ce;if(o===(o=t()??"")){he&&Ls();return}if(n&&!he){c.nodes=null,u.innerHTML=o,o!==""&&Yt(Gt(u),u.lastChild);return}if(c.nodes!==null&&(Ov(c.nodes.start,c.nodes.end),c.nodes=null),o!==""){if(he){fe.data;for(var f=Ls(),v=f;f!==null&&(f.nodeType!==ia||f.data!=="");)v=f,f=nr(f);if(f===null)throw aa(),Ps;Yt(fe,v),a=Ct(f);return}var d=r?Hy:s?Ky:void 0,w=_f(r?"svg":s?"math":"template",d);w.innerHTML=o;var y=r||s?w:w.content;if(Yt(Gt(y),y.lastChild),r||s)for(;Gt(y);)a.before(Gt(y));else a.before(y)}})}function Fw(e,t,n){var r;he&&(r=fe,Ls());var s=new vu(e);da(()=>{var l=t()??null;if(he){var a=lv(r),o=a===wf,u=l!==null;if(o!==u){var c=kf();Ct(c),s.anchor=c,Gn(!1),s.ensure(l,l&&(f=>n(f,l))),Gn(!0);return}}s.ensure(l,l&&(f=>n(f,l)))},Zr)}function Vw(e,t){var n=void 0,r;zv(()=>{n!==(n=t())&&(r&&(ht(r),r=null),n&&(r=Vn(()=>{Af(()=>n(e))})))})}function Yv(e){var t,n,r="";if(typeof e=="string"||typeof e=="number")r+=e;else if(typeof e=="object")if(Array.isArray(e)){var s=e.length;for(t=0;t=0;){var o=a+l;(a===0||gp.includes(r[a-1]))&&(o===r.length||gp.includes(r[o]))?r=(a===0?"":r.substring(0,a))+r.substring(o+1):a=o}}return r===""?null:r}function vp(e,t=!1){var n=t?" !important;":";",r="";for(var s of Object.keys(e)){var l=e[s];l!=null&&l!==""&&(r+=" "+s+": "+l+n)}return r}function tc(e){return e[0]!=="-"||e[1]!=="-"?e.toLowerCase():e}function Ww(e,t){if(t){var n="",r,s;if(Array.isArray(t)?(r=t[0],s=t[1]):r=t,e){e=String(e).replaceAll(/\s*\/\*.*?\*\/\s*/g,"").trim();var l=!1,a=0,o=!1,u=[];r&&u.push(...Object.keys(r).map(tc)),s&&u.push(...Object.keys(s).map(tc));var c=0,f=-1;const S=e.length;for(var v=0;v{vd(e,e.__value)});t.observe(e,{childList:!0,subtree:!0,attributes:!0,attributeFilter:["value"]}),hu(()=>{t.disconnect()})}function xp(e){return"__value"in e?e.__value:e.value}const ti=Symbol("class"),ni=Symbol("style"),Zv=Symbol("is custom element"),Jv=Symbol("is html"),Yw=sa?"link":"LINK",Zw=sa?"input":"INPUT",Jw=sa?"option":"OPTION",Xw=sa?"select":"SELECT",eb=sa?"progress":"PROGRESS";function Rf(e){if(he){var t=!1,n=()=>{if(!t){if(t=!0,e.hasAttribute("value")){var r=e.value;Ne(e,"value",null),e.value=r}if(e.hasAttribute("checked")){var s=e.checked;Ne(e,"checked",null),e.checked=s}}};e[yi]=n,mr(n),Cv()}}function tb(e,t){var n=$f(e);n.value===(n.value=t??void 0)||e.value===t&&(t!==0||e.nodeName!==eb)||(e.value=t??"")}function nb(e,t){t?e.hasAttribute("selected")||e.setAttribute("selected",""):e.removeAttribute("selected")}function Ne(e,t,n,r){var s=$f(e);he&&(s[t]=e.getAttribute(t),t==="src"||t==="srcset"||t==="href"&&e.nodeName===Yw)||s[t]!==(s[t]=n)&&(t==="loading"&&(e[Cy]=n),n==null?e.removeAttribute(t):typeof n!="string"&&Xv(e).includes(t)?e[t]=n:e.setAttribute(t,n))}function rb(e,t,n,r,s=!1,l=!1){if(he&&s&&e.nodeName===Zw){var a=e,o=a.type==="checkbox"?"defaultChecked":"defaultValue";o in n||Rf(a)}var u=$f(e),c=u[Zv],f=!u[Jv];let v=he&&c;v&&Gn(!1);var d=t||{},w=e.nodeName===Jw;for(var y in t)y in n||(n[y]=null);n.class?n.class=Hw(n.class):n[ti]&&(n.class=null),n[ni]&&(n.style??(n.style=null));var S=Xv(e);for(const E in n){let j=n[E];if(w&&E==="value"&&j==null){e.value=e.__value="",d[E]=j;continue}if(E==="class"){var R=e.namespaceURI==="http://www.w3.org/1999/xhtml";Gw(e,R,j,r,t==null?void 0:t[ti],n[ti]),d[E]=j,d[ti]=n[ti];continue}if(E==="style"){qw(e,j,t==null?void 0:t[ni],n[ni]),d[E]=j,d[ni]=n[ni];continue}var g=d[E];if(!(j===g&&!(j===void 0&&e.hasAttribute(E)))){d[E]=j;var p=E[0]+E[1];if(p!=="$$")if(p==="on"){const L={},q="$$"+E;let P=E.slice(2);var m=Pw(P);if(Tw(P)&&(P=P.slice(0,-7),L.capture=!0),!m&&g){if(j!=null)continue;e.removeEventListener(P,d[q],L),d[q]=null}if(m)mu(P,e,j),gu([P]);else if(j!=null){let Y=function(ae){d[E].call(this,ae)};d[q]=Kv(P,e,Y,L)}}else if(E==="style")Ne(e,E,j);else if(E==="autofocus")pw(e,!!j);else if(!c&&(E==="__value"||E==="value"&&j!=null))e.value=e.__value=j;else if(E==="selected"&&w)nb(e,j);else{var N=E;f||(N=Mw(N));var C=N==="defaultValue"||N==="defaultChecked";if(j==null&&!c&&!C)if(u[E]=null,N==="value"||N==="checked"){let L=e;const q=t===void 0;if(N==="value"){let P=L.defaultValue;L.removeAttribute(N),L.defaultValue=P,L.value=L.__value=q?P:null}else{let P=L.defaultChecked;L.removeAttribute(N),L.defaultChecked=P,L.checked=q?P:!1}}else e.removeAttribute(E);else C||S.includes(N)&&(c||typeof j!="string")?(e[N]=j,N in u&&(u[N]=Qe)):typeof j!="function"&&Ne(e,N,j)}}}return v&&Gn(!0),d}function xu(e,t,n=[],r=[],s=[],l,a=!1,o=!1){bv(s,n,r,u=>{var c=void 0,f={},v=e.nodeName===Xw,d=!1;if(zv(()=>{var y=t(...u.map(h)),S=rb(e,c,y,l,a,o);d&&v&&"value"in y&&vd(e,y.value);for(let g of Object.getOwnPropertySymbols(f))y[g]||ht(f[g]);for(let g of Object.getOwnPropertySymbols(y)){var R=y[g];g.description===Wy&&(!c||R!==c[g])&&(f[g]&&ht(f[g]),f[g]=Vn(()=>Vw(e,()=>R))),S[g]=R}c=S}),v){var w=e;Af(()=>{vd(w,c.value,!0),Qw(w)})}d=!0})}function $f(e){return e[lo]??(e[lo]={[Zv]:e.nodeName.includes("-"),[Jv]:e.namespaceURI===nv})}var yp=new Map;function Xv(e){var t=e.getAttribute("is")||e.nodeName,n=yp.get(t);if(n)return n;yp.set(t,n=[]);for(var r,s=e,l=Element.prototype;l!==s;){r=by(s);for(var a in r)r[a].set&&a!=="innerHTML"&&a!=="textContent"&&a!=="innerText"&&n.push(a);s=Yg(s)}return n}function sb(e,t,n=t){var r=new WeakSet;mw(e,"input",async s=>{var l=s?e.defaultValue:e.value;if(l=rc(e)?sc(l):l,n(l),X!==null&&r.add(X),await hs(),l!==(l=t())){var a=e.selectionStart,o=e.selectionEnd,u=e.value.length;if(e.value=l??"",o!==null){var c=e.value.length;a===o&&o===u&&c>u?(e.selectionStart=c,e.selectionEnd=c):(e.selectionStart=a,e.selectionEnd=Math.min(o,c))}}}),(he&&e.defaultValue!==e.value||ca(t)==null&&e.value)&&(n(rc(e)?sc(e.value):e.value),X!==null&&r.add(X)),pu(()=>{var s=t();if(e===document.activeElement){var l=X;if(r.has(l))return}rc(e)&&s===sc(e.value)||e.type==="date"&&!s&&!e.value||s!==e.value&&(e.value=s??"")})}function rc(e){var t=e.type;return t==="number"||t==="range"}function sc(e){return e===""?null:+e}function lc(e,t){return e===t||(e==null?void 0:e[fl])===t}function Xr(e={},t,n,r){var s=Ut.r,l=ce;return Af(()=>{var a,o;return pu(()=>{a=o,o=[],ca(()=>{lc(n(...o),e)||(t(e,...o),a&&lc(n(...a),e)&&t(null,...a))})}),()=>{let u=l;for(;u!==s&&u.parent!==null&&u.parent.f&td;)u=u.parent;const c=()=>{o&&lc(n(...o),e)&&t(null,...o)},f=u.teardown;u.teardown=()=>{c(),f==null||f()}}}),e}const lb={get(e,t){if(!e.exclude.includes(t))return e.props[t]},set(e,t){return!1},getOwnPropertyDescriptor(e,t){if(!e.exclude.includes(t)&&t in e.props)return{enumerable:!0,configurable:!0,value:e.props[t]}},has(e,t){return e.exclude.includes(t)?!1:t in e.props},ownKeys(e){return Reflect.ownKeys(e.props).filter(t=>!e.exclude.includes(t))}};function yu(e,t,n){return new Proxy({props:e,exclude:t},lb)}function Oe(e,t,n,r){var s=r,l=!0,a=()=>(l&&(l=!1,s=r),s),o;o=e[t],o===void 0&&r!==void 0&&(o=a());var u;u=()=>{var d=e[t];return d===void 0?a():(l=!0,d)};var c=!1,f=Ef(()=>(c=!1,u())),v=ce;return function(d,w){if(arguments.length>0){const y=w?h(f):d;return Q(f,y),c=!0,s!==void 0&&(s=y),d}return br&&c||v.f&Ln?f.v:h(f)}}function ib(e){return new ab(e)}var cr,an;class ab{constructor(t){ie(this,cr);ie(this,an);var l;var n=new Map,r=(a,o)=>{var u=jv(o,!1,!1);return n.set(a,u),u};const s=new Proxy({...t.props||{},$$events:{}},{get(a,o){return h(n.get(o)??r(o,Reflect.get(a,o)))},has(a,o){return o===Ey?!0:(h(n.get(o)??r(o,Reflect.get(a,o))),Reflect.has(a,o))},set(a,o,u){return Q(n.get(o)??r(o,u),u),Reflect.set(a,o,u)}});re(this,an,(t.hydrate?Dw:Gv)(t.component,{target:t.target,anchor:t.anchor,props:s,context:t.context,intro:t.intro??!1,recover:t.recover,transformError:t.transformError})),(!((l=t==null?void 0:t.props)!=null&&l.$$host)||t.sync===!1)&&Pe(),re(this,cr,s.$$events);for(const a of Object.keys(_(this,an)))a==="$set"||a==="$destroy"||a==="$on"||Hi(this,a,{get(){return _(this,an)[a]},set(o){_(this,an)[a]=o},enumerable:!0});_(this,an).$set=a=>{Object.assign(s,a)},_(this,an).$destroy=()=>{zw(_(this,an))}}$set(t){_(this,an).$set(t)}$on(t,n){_(this,cr)[t]=_(this,cr)[t]||[];const r=(...s)=>n.call(this,...s);return _(this,cr)[t].push(r),()=>{_(this,cr)[t]=_(this,cr)[t].filter(s=>s!==r)}}$destroy(){_(this,an).$destroy()}}cr=new WeakMap,an=new WeakMap;let e0=class{};typeof HTMLElement=="function"&&(e0=class extends HTMLElement{constructor(t,n,r){super();ne(this,"$$ctor");ne(this,"$$s");ne(this,"$$c");ne(this,"$$cn",!1);ne(this,"$$d",{});ne(this,"$$r",!1);ne(this,"$$p_d",{});ne(this,"$$l",{});ne(this,"$$l_u",new Map);ne(this,"$$me");ne(this,"$$shadowRoot",null);this.$$ctor=t,this.$$s=n,r&&(this.$$shadowRoot=this.attachShadow(r))}addEventListener(t,n,r){if(this.$$l[t]=this.$$l[t]||[],this.$$l[t].push(n),this.$$c){const s=this.$$c.$on(t,n);this.$$l_u.set(n,s)}super.addEventListener(t,n,r)}removeEventListener(t,n,r){if(super.removeEventListener(t,n,r),this.$$c){const s=this.$$l_u.get(n);s&&(s(),this.$$l_u.delete(n))}}async connectedCallback(){if(this.$$cn=!0,!this.$$c){let t=function(s){return l=>{const a=_f("slot");s!=="default"&&(a.name=s),ye(l,a)}};if(await Promise.resolve(),!this.$$cn||this.$$c)return;const n={},r=ob(this);for(const s of this.$$s)s in r&&(s==="default"&&!this.$$d.children?(this.$$d.children=t(s),n.default=!0):n[s]=t(s));for(const s of this.attributes){const l=this.$$g_p(s.name);l in this.$$d||(this.$$d[l]=fo(l,s.value,this.$$p_d,"toProp"))}for(const s in this.$$p_d)!(s in this.$$d)&&this[s]!==void 0&&(this.$$d[s]=this[s],delete this[s]);this.$$c=ib({component:this.$$ctor,target:this.$$shadowRoot||this,props:{...this.$$d,$$slots:n,$$host:this}}),this.$$me=ww(()=>{pu(()=>{var s;this.$$r=!0;for(const l of zo(this.$$c)){if(!((s=this.$$p_d[l])!=null&&s.reflect))continue;this.$$d[l]=this.$$c[l];const a=fo(l,this.$$d[l],this.$$p_d,"toAttribute");a==null?this.removeAttribute(this.$$p_d[l].attribute||l):this.setAttribute(this.$$p_d[l].attribute||l,a)}this.$$r=!1})});for(const s in this.$$l)for(const l of this.$$l[s]){const a=this.$$c.$on(s,l);this.$$l_u.set(l,a)}this.$$l={}}}attributeChangedCallback(t,n,r){var s;this.$$r||(t=this.$$g_p(t),this.$$d[t]=fo(t,r,this.$$p_d,"toProp"),(s=this.$$c)==null||s.$set({[t]:this.$$d[t]}))}disconnectedCallback(){this.$$cn=!1,Promise.resolve().then(()=>{!this.$$cn&&this.$$c&&(this.$$c.$destroy(),this.$$me(),this.$$c=void 0)})}$$g_p(t){return zo(this.$$p_d).find(n=>this.$$p_d[n].attribute===t||!this.$$p_d[n].attribute&&n.toLowerCase()===t)||t}});function fo(e,t,n,r){var l;const s=(l=n[e])==null?void 0:l.type;if(t=s==="Boolean"&&typeof t!="boolean"?t!=null:t,!r||!n[e])return t;if(r==="toAttribute")switch(s){case"Object":case"Array":return t==null?null:JSON.stringify(t);case"Boolean":return t?"":null;case"Number":return t??null;default:return t}else switch(s){case"Object":case"Array":return t&&JSON.parse(t);case"Boolean":return t;case"Number":return t!=null?+t:t;default:return t}}function ob(e){const t={};return e.childNodes.forEach(n=>{t[n.slot||"default"]=!0}),t}function ss(e,t,n,r,s,l){let a=class extends e0{constructor(){super(e,n,s),this.$$p_d=t}static get observedAttributes(){return zo(t).map(o=>(t[o].attribute||o).toLowerCase())}};return zo(t).forEach(o=>{Hi(a.prototype,o,{get(){return this.$$c&&o in this.$$c?this.$$c[o]:this.$$d[o]},set(u){var v;u=fo(o,u,t),this.$$d[o]=u;var c=this.$$c;if(c){var f=(v=cl(c,o))==null?void 0:v.get;f?c[o]=u:c.$set({[o]:u})}}})}),r.forEach(o=>{Hi(a.prototype,o,{get(){var u;return(u=this.$$c)==null?void 0:u[o]}})}),e.element=a,a}var ub=Fe('
');function t0(e,t){_r(t,!0);let n=Oe(t,"loading"),r=yu(t,["$$slots","$$events","$$legacy","$$host","loading"]),s;function l(){s==null||s.click()}var a={get loading(){return n()},set loading(f){n(f),Pe()}},o=ub(),u=Ve(o);xu(u,()=>({type:"checkbox",...r}),void 0,void 0,void 0,void 0,!0),Xr(u,f=>s=f,()=>s);var c=Ie(u,2);return bf(2),$e(o),wt(()=>Ne(o,"data-loading",n())),mu("click",c,l),ye(e,o),Sr(a)}gu(["click"]);ss(t0,{loading:{}},[],[],{mode:"open"});var cb=Fe('
');function n0(e,t){_r(t,!0);let n=Oe(t,"loading"),r=yu(t,["$$slots","$$events","$$legacy","$$host","loading"]);var s={get loading(){return n()},set loading(o){n(o),Pe()}},l=cb(),a=Ve(l);return xu(a,()=>({type:"checkbox",...r}),void 0,void 0,void 0,void 0,!0),bf(2),$e(l),wt(()=>Ne(l,"data-loading",n())),ye(e,l),Sr(s)}ss(n0,{loading:{}},[],[],{mode:"open"});var db=Fe('
');function Df(e,t){_r(t,!0);let n=Oe(t,"strings");const r="https://altcha.org";var s={get strings(){return n()},set strings(o){n(o),Pe()}},l=db(),a=Ve(l);return Ne(a,"href",r),$e(l),wt(()=>Ne(a,"aria-label",n().ariaLinkLabel)),ye(e,l),Sr(s)}ss(Df,{strings:{}},[],[],{mode:"open"});var fb=Fe('');function xd(e,t){_r(t,!0);let n=Oe(t,"logo"),r=Oe(t,"strings");var s={get logo(){return n()},set logo(c){n(c),Pe()},get strings(){return r()},set strings(c){r(c),Pe()}},l=fb(),a=Ve(l);Qv(a,()=>r().footer,!0),$e(a);var o=Ie(a,2);{var u=c=>{Df(c,{get strings(){return r()}})};Ze(o,c=>{n()&&c(u)})}return $e(l),ye(e,l),Sr(s)}ss(xd,{logo:{},strings:{}},[],[],{mode:"open"});var hb=Fe('
');function r0(e,t){_r(t,!0);let n=Oe(t,"loading"),r=yu(t,["$$slots","$$events","$$legacy","$$host","loading"]),s;function l(){s==null||s.click()}var a={get loading(){return n()},set loading(f){n(f),Pe()}},o=hb(),u=Ve(o);xu(u,()=>({type:"checkbox",...r}),void 0,void 0,void 0,void 0,!0),Xr(u,f=>s=f,()=>s);var c=Ie(u,2);return $e(o),wt(()=>Ne(o,"data-loading",n())),mu("click",c,l),ye(e,o),Sr(a)}gu(["click"]);ss(r0,{loading:{}},[],[],{mode:"open"});var ut=(e=>(e.ERROR="error",e.LOADING="loading",e.PLAYING="playing",e.PAUSED="paused",e.READY="ready",e))(ut||{}),_e=(e=>(e.CODE="code",e.ERROR="error",e.VERIFIED="verified",e.VERIFYING="verifying",e.UNVERIFIED="unverified",e.EXPIRED="expired",e))(_e||{}),pb=Fe('
'),mb=Fe('
'),gb=Lf(''),vb=Lf(''),xb=Lf(''),yb=Fe(''),wb=Fe(''),bb=Fe('
');function s0(e,t){_r(t,!0);let n=Oe(t,"audioUrl"),r=Oe(t,"codeChallenge"),s=Oe(t,"config"),l=Oe(t,"imageUrl"),a=Oe(t,"onCancel"),o=Oe(t,"onReload"),u=Oe(t,"onSubmit"),c=Oe(t,"strings"),f=ge(void 0),v=ge(void 0),d=ge(void 0),w=ge(!1),y=ge(""),S=ge(!1);Mf(()=>(s().disableAutoFocus||hs().then(()=>{var F;(F=h(d))==null||F.focus()}),()=>{h(v)&&(h(v).pause(),Q(v,void 0))}));function R(){Q(f,ut.PAUSED,!0)}function g(F){Q(f,ut.ERROR,!0)}function p(){Q(f,ut.READY,!0)}function m(){Q(f,ut.LOADING,!0)}function N(){Q(f,ut.PLAYING,!0)}function C(){Q(f,ut.PAUSED,!0)}function E(F){var be;F.code==="Space"?(F.preventDefault(),F.stopPropagation(),L()):F.code==="Escape"&&(F.preventDefault(),F.stopPropagation(),(be=a())==null||be())}function j(F){var be;F.preventDefault(),F.stopPropagation(),(be=u())==null||be(h(y))}function L(){h(v)?h(f)===ut.LOADING||(h(v).paused?(n()&&h(v).src!==n()&&(h(v).src=n()),h(v).currentTime=0,h(v).play()):h(v).pause()):(Q(S,!0),requestAnimationFrame(()=>{h(v)&&n()&&(h(v).src=n(),h(v).play())}))}var q={get audioUrl(){return n()},set audioUrl(F){n(F),Pe()},get codeChallenge(){return r()},set codeChallenge(F){r(F),Pe()},get config(){return s()},set config(F){s(F),Pe()},get imageUrl(){return l()},set imageUrl(F){l(F),Pe()},get onCancel(){return a()},set onCancel(F){a(F),Pe()},get onReload(){return o()},set onReload(F){o(F),Pe()},get onSubmit(){return u()},set onSubmit(F){u(F),Pe()},get strings(){return c()},set strings(F){c(F),Pe()}},P=bb(),Y=Ve(P),ae=Ve(Y);{var le=F=>{var be=pb(),_t=Ve(be,!0);$e(be),wt(()=>Kn(_t,c().verificationRequired)),ye(F,be)};Ze(ae,F=>{s().codeChallengeDisplay!=="standard"&&F(le)})}var ke=Ie(ae,2),ue=Ve(ke,!0);$e(ke);var Te=Ie(ke,2),V=Ie(Te,2),M=Ve(V);Rf(M),M.disabled=h(w),Xr(M,F=>Q(d,F),()=>h(d));var U=Ie(M,2);{var x=F=>{var be=yb(),_t=Ve(be);{var rr=nt=>{var rt=mb();ye(nt,rt)},Dn=nt=>{var rt=gb();ye(nt,rt)},yn=nt=>{var rt=vb();ye(nt,rt)},Nr=nt=>{var rt=xb();ye(nt,rt)};Ze(_t,nt=>{h(f)===ut.LOADING?nt(rr):h(f)===ut.ERROR?nt(Dn,1):h(f)===ut.PLAYING?nt(yn,2):nt(Nr,-1)})}$e(be),wt(()=>{Ne(be,"title",c().getAudioChallenge),be.disabled=h(f)===ut.LOADING||h(f)===ut.ERROR,Ne(be,"aria-label",h(f)===ut.LOADING?c().loading:c().getAudioChallenge)}),Je("click",be,()=>L(),!0),ye(F,be)};Ze(U,F=>{r().audio&&F(x)})}var $=Ie(U,2);$e(V);var I=Ie(V,2),K=Ve(I),W=Ve(K,!0);$e(K);var ee=Ie(K,2),Ae=Ve(ee,!0);$e(ee),$e(I),$e(Y);var gt=Ie(Y,2);{var $n=F=>{var be=wb();Xr(be,_t=>Q(v,_t),()=>h(v)),Je("error",be,g),Je("loadstart",be,m),Je("canplay",be,p),Je("pause",be,C),Je("playing",be,N),Je("ended",be,R),ye(F,be)};Ze(gt,F=>{h(S)&&F($n)})}return $e(P),wt(()=>{Kn(ue,c().enterCodeFromImage),Ne(Te,"src",l()),Ne(M,"minlength",r().length||1),Ne(M,"maxlength",r().length),Ne(M,"placeholder",c().enterCode),Ne(M,"aria-label",h(f)===ut.LOADING?c().loading:h(f)===ut.PLAYING?"":c().enterCodeAria),Ne(M,"aria-live",h(f)?"assertive":"polite"),Ne(M,"aria-busy",h(f)===ut.LOADING),Ne($,"title",c().reload),Ne($,"aria-label",c().reload),Ne(K,"aria-label",c().verify),Kn(W,c().verify),Ne(ee,"aria-label",c().cancel),Kn(Ae,c().cancel)}),Je("submit",Y,j,!0),mu("keydown",M,E),sb(M,()=>h(y),F=>Q(y,F)),Je("click",$,()=>{var F;return(F=o())==null?void 0:F()},!0),Je("click",ee,()=>{var F;return(F=a())==null?void 0:F()},!0),ye(e,P),Sr(q)}gu(["keydown"]);ss(s0,{audioUrl:{},codeChallenge:{},config:{},imageUrl:{},onCancel:{},onReload:{},onSubmit:{},strings:{}},[],[],{mode:"open"});var kb=Fe('
'),_b=Fe('
'),Sb=Fe('
×
'),Nb=Fe('
',1);function yd(e,t){_r(t,!0);let n=Oe(t,"anchor"),r=Oe(t,"children"),s=Oe(t,"display",7,"standard"),l=Oe(t,"backdrop",7,!1),a=Oe(t,"onClickOutside"),o=Oe(t,"onClickOutsideDelay",7,600),u=Oe(t,"onClose"),c=Oe(t,"placement",7,"auto"),f=Oe(t,"updateUISignal"),v=Oe(t,"variant",7,"neutral"),d=yu(t,["$$slots","$$events","$$legacy","$$host","anchor","children","display","backdrop","onClickOutside","onClickOutsideDelay","onClose","placement","updateUISignal","variant"]),w=ge(void 0),y=ge(void 0),S=ge(!1),R=ge(0);Vt(()=>{c()!=="auto"&&Q(S,c()==="top")}),Vt(()=>{f()&&C()}),Mf(()=>{const V=s()==="bottomsheet"||s()==="overlay";return V&&(h(y)&&document.body.append(h(y)),h(w)&&document.body.append(h(w))),C(),hs().then(()=>{Q(R,Date.now(),!0)}),()=>{V&&(h(y)&&document.body.removeChild(h(y)),h(w)&&document.body.removeChild(h(w)))}});function g(){var V;(V=u())==null||V()}function p(V){var U,x;const M=V.target;!((U=h(w))!=null&&U.contains(M))&&(!o()||h(R)+o(){var M=kb();Xr(M,U=>Q(y,U),()=>h(y)),ye(V,M)};Ze(L,V=>{l()&&V(q)})}var P=Ie(L,2);xu(P,()=>({...d,class:`altcha-popover ${(t.class||"")??""}`,"data-popover":!0,"data-variant":v(),"data-top":h(S),"data-display":s()}));var Y=Ve(P);{var ae=V=>{var M=_b();ye(V,M)};Ze(Y,V=>{s()==="standard"&&V(ae)})}var le=Ie(Y,2);{var ke=V=>{var M=Sb();Je("click",M,g,!0),ye(V,M)};Ze(le,V=>{s()!=="standard"&&V(ke)})}var ue=Ie(le,2),Te=Ve(ue);return Iw(Te,()=>r()??Gr),$e(ue),$e(P),Xr(P,V=>Q(w,V),()=>h(w)),ye(e,j),Sr(E)}ss(yd,{anchor:{},children:{},display:{},backdrop:{},onClickOutside:{},onClickOutsideDelay:{},onClose:{},placement:{},updateUISignal:{},variant:{}},[],[],{mode:"open"});function jb(e){return Array.from(new Uint8Array(e)).map(t=>t.toString(16).padStart(2,"0")).join("")}function Eb(e,t="altcha-css",n){var r,s;if(typeof document<"u"&&document&&!document.getElementById(t)){const l=document.createElement("style");l.id=t,l.textContent=e;const a=((r=document.currentScript)==null?void 0:r.nonce)??((s=document.querySelector('meta[name="csp-nonce"]'))==null?void 0:s.content);a&&(l.nonce=a),document.head.appendChild(l)}}async function l0(e){var d;const{challenge:t,concurrency:n=navigator.hardwareConcurrency,controller:r=new AbortController,createWorker:s,onOutOfMemory:l=w=>w>1?Math.floor(w/2):0,counterMode:a,timeout:o=9e4}=e,u=Math.min(16,Math.max(1,n)),c=[],f=()=>{for(const w of c)w.terminate()};for(let w=0;w(r.signal.addEventListener("abort",()=>{w.postMessage({type:"abort"})}),new Promise((S,R)=>{w.addEventListener("error",g=>{R(g)}),w.addEventListener("message",g=>{if(g.data){for(const p of c)p!==w&&p.postMessage({type:"abort"});if(g.data.error)return R(new Error(g.data.error))}S(g.data)}),w.postMessage({challenge:t,counterMode:a,counterStart:y,counterStep:u,timeout:o,type:"work"})}))))}catch(w){if(w instanceof Error&&!!((d=w==null?void 0:w.message)!=null&&d.includes("Out of memory"))&&l){f();const S=l(u);if(S)return l0({...e,challenge:t,controller:r,concurrency:S,createWorker:s})}throw w}finally{f()}return r.signal.aborted?null:v||null}class Cb{constructor(t={}){ne(this,"TAG_CODES",{INPUT:1,TEXTAREA:2,SELECT:3,BUTTON:4,A:5,DETAILS:6,SUMMARY:7,IFRAME:8,VIDEO:9,AUDIO:10});ne(this,"maxSamples");ne(this,"sampleInterval");ne(this,"target");ne(this,"focusStartTime",0);ne(this,"focusInteraction",0);ne(this,"focusInteractionTimer",null);ne(this,"lastPointerSample",0);ne(this,"lastTouchSample",0);ne(this,"lastScrollSample",0);ne(this,"pendingPointer",null);ne(this,"pendingTouch",null);ne(this,"focus",[]);ne(this,"pointer",[]);ne(this,"scroll",[]);ne(this,"touch",[]);ne(this,"onFocus",t=>{if(this.focusInteraction===2)return;const n=t.target;if(!(n instanceof Element))return;const r=performance.now();this.focusStartTime===0&&(this.focusStartTime=r),this.focus.push([Math.round(r-this.focusStartTime),n.tabIndex,this.TAG_CODES[n.tagName]??0,this.focusInteraction?1:0]),this.evict(this.focus)});ne(this,"onInteraction",t=>{this.focusInteraction="keyCode"in t?1:2,this.focusInteractionTimer&&clearTimeout(this.focusInteractionTimer),this.focusInteractionTimer=setTimeout(()=>{this.focusInteraction=0},100)});ne(this,"onPointer",t=>{if(t.pointerType==="touch")return;const n=t.timeStamp||performance.now();this.pendingPointer=[Math.round(t.clientX),Math.round(t.clientY),Math.round(n)],n-this.lastPointerSample>=this.sampleInterval&&(this.pointer.push(this.pendingPointer),this.lastPointerSample=n,this.pendingPointer=null,this.evict(this.pointer))});ne(this,"onScroll",()=>{const t=performance.now();t-this.lastScrollSample{const n=t.timeStamp||performance.now(),r=t.touches[0];r&&(this.pendingTouch=[Math.round(r.clientX),Math.round(r.clientY),Math.round(n),Math.round(r.force*1e3)/1e3,Math.round(r.radiusX||0),Math.round(r.radiusY||0)],n-this.lastTouchSample>=this.sampleInterval&&(this.touch.push(this.pendingTouch),this.lastTouchSample=n,this.pendingTouch=null,this.evict(this.touch)))});const{maxSamples:n=60,sampleInterval:r=50,target:s=window}=t;this.maxSamples=n,this.sampleInterval=r,this.target=s,this.attach()}destroy(){const t={capture:!0};this.target.removeEventListener("focusin",this.onFocus,t),this.target.removeEventListener("keydown",this.onInteraction,t),this.target.removeEventListener("pointerdown",this.onInteraction,t),this.target.removeEventListener("pointermove",this.onPointer,t),this.target.removeEventListener("scroll",this.onScroll,t),this.target.removeEventListener("touchmove",this.onTouchMove,t)}export(){return{focus:this.focus,maxTouchPoints:navigator.maxTouchPoints||0,pointer:this.pointer,scroll:this.scroll,time:Date.now(),touch:this.touch}}attach(){const t={passive:!0,capture:!0};this.target.addEventListener("focusin",this.onFocus,t),this.target.addEventListener("keydown",this.onInteraction,t),this.target.addEventListener("pointerdown",this.onInteraction,t),this.target.addEventListener("pointermove",this.onPointer,t),this.target.addEventListener("scroll",this.onScroll,t),this.target.addEventListener("touchmove",this.onTouchMove,t)}evict(t){t.length>this.maxSamples&&t.splice(0,t.length-this.maxSamples)}}var Tb=Fe('
'),Ab=Fe('
'),Pb=Fe('
×
',1),Lb=Fe('
'),Mb=Fe(''),Rb=Fe('
Secure context (HTTPS) required.
'),$b=Fe('
'),Db=Fe('
'),zb=Fe(" ",1),Ib=Fe('
',1);function Ob(e,t){_r(t,!0);const n=()=>ap(f,"$altchaDefaults",s),r=()=>ap(y,"$altchaI18nStore",s),[s,l]=tw(),a='input[type="text"]:not([data-no-spamfilter]), textarea:not([data-no-spamfilter])',o='input[type="submit"], button[type="submit"], button:not([type="button"]):not([type="reset"])',u=["ar","fa","he","ur"],{isSecureContext:c}=globalThis,{store:f}=globalThis.$altcha.defaults,v=navigator.hardwareConcurrency||2,d=navigator.deviceMemory||0,w=d&&d<=4?Math.min(4,v):v,y=globalThis.$altcha.i18n.store,S=t.$$host,R=(b,T)=>{hs().then(()=>{S==null||S.dispatchEvent(new CustomEvent(b,{detail:T}))})};let g=null,p=ge(hr(new URL(location.origin))),m=ge(!1),N=ge(null),C=ge(null),E=ge(null),j=ge(hr(_e.UNVERIFIED)),L=ge(void 0),q=ge(void 0),P=ge(null),Y=ge(void 0),ae=ge(null),le=ge(null),ke=ge(null),ue=ge(null),Te=ge(hr([])),V=ge(0),M=ge(hr({})),U=ge(!0);const x=St(()=>({fetch:(b,T)=>fetch(b,T),audioChallengeLanguage:"",auto:"off",barPlacement:"bottom",challenge:"",codeChallenge:null,codeChallengeDisplay:"standard",credentials:null,debug:!1,disableAutoFocus:!1,display:"standard",floatingAnchor:"",floatingOffset:8,floatingPersist:!1,floatingPlacement:"auto",hideFooter:!1,hideLogo:!1,humanInteractionSignature:!0,language:"",mockError:!1,minDuration:500,overlayContent:"",name:"altcha",popoverPlacement:"auto",retryOnOutOfMemoryError:!0,setCookie:null,serverVerificationFields:!1,serverVerificationTimeZone:!1,test:!1,timeout:9e4,type:"checkbox",validationMessage:"",verifyFunction:null,verifyUrl:"",workers:w,...n(),...h(M)})),$=St(()=>`altcha-checkbox-${t.id||Math.floor(Math.random()*1e12).toString(16)}`),I=St(()=>Ee(h(x).type)),K=St(()=>h(x).auto),W=St(()=>h(j)===_e.VERIFYING),ee=St(()=>!h(x).hideFooter),Ae=St(()=>!h(x).hideLogo&&h(x).display!=="bar"),gt=St(()=>en(r(),[h(x).language,document.documentElement.lang,...navigator.languages])),$n=St(()=>u.includes(h(gt).language)?"rtl":void 0),F=St(()=>({...h(gt).strings})),be=St(()=>{var b,T,B;return(T=(b=h(N))==null?void 0:b.audio)!=null&&T.match(/^(https?:)?\//)?ls(h(N).audio,h(p),{language:h(x).audioChallengeLanguage||h(gt).language}).toString():(B=h(N))==null?void 0:B.audio}),_t=St(()=>{var b,T,B;return(T=(b=h(N))==null?void 0:b.image)!=null&&T.match(/^(https?:)?\//)?ls(h(N).image,h(p)):(B=h(N))==null?void 0:B.image});Vt(()=>{Er({auto:t.auto,challenge:t.challenge,display:t.display,language:t.language,name:t.name,type:t.type,workers:t.workers})}),Vt(()=>{if(t.configuration)try{Er(JSON.parse(t.configuration))}catch{Ce("unable to parse the `configuration` attribute (JSON expected)")}}),Vt(()=>{h(E)!==h(x).display&&jr(h(x).display)}),Vt(()=>{h(m)&&h(j)===_e.VERIFYING&&Q(m,!1)}),Vt(()=>{!h(m)&&h(j)===_e.VERIFIED&&Q(m,!0)}),Vt(()=>{if(!h(m)){const b=G();b&&b.checked&&(b.checked=!1)}}),Vt(()=>{var b;h(j)===_e.VERIFIED&&((b=G())==null||b.setCustomValidity(""))}),Vt(()=>{if(h(K)==="onload"){const b=setTimeout(()=>{In()},1);return()=>{b&&clearTimeout(b)}}}),Vt(()=>{h(le)&&Ce("error:",h(le))}),Vt(()=>{h(ue)&&h(x).setCookie&&wu(h(ue),h(x).setCookie)}),Mf(()=>{var b,T,B,O;return Ce("mounted","3.2.1"),S&&globalThis.$altcha.instances.add(S),Q(P,(b=h(Y))==null?void 0:b.closest("form"),!0),(T=h(P))==null||T.addEventListener("reset",zl),(B=h(P))==null||B.addEventListener("submit",Il,{capture:!0}),(O=h(P))==null||O.addEventListener("focusin",Dl),rr(),h(x).humanInteractionSignature&&(Ce("human interaction signature enabled"),g=new Cb),R("load"),c||Ce("secure context (HTTPS) required"),()=>{var se,te,de;yn(),S&&globalThis.$altcha.instances.delete(S),h(ke)&&clearTimeout(h(ke)),(se=h(P))==null||se.removeEventListener("reset",zl),(te=h(P))==null||te.removeEventListener("submit",Il,{capture:!0}),(de=h(P))==null||de.removeEventListener("focusin",Dl),g==null||g.destroy()}});function rr(){Q(Te,[...globalThis.$altcha.plugins].map(b=>new b(S)),!0),Ce("activating plugins",h(Te).map(b=>b.constructor.name));for(const b of h(Te))b.activate()}async function Dn(b,...T){let B;for(const O of h(Te))B=await O[b].call(O,...T);return B}function yn(){for(const b of h(Te))b.destroy()}function Nr(b){const[T,B]=b.salt.split("?"),O={};if(B)try{Object.assign(O,Object.fromEntries(new URLSearchParams(B).entries()))}catch{}const se={codeChallenge:b.codeChallenge,parameters:{algorithm:b.algorithm,cost:1,data:O,expiresAt:O!=null&&O.expires?parseInt(O.expires,10):void 0,keyLength:b.algorithm==="SHA-512"?64:b.algorithm==="SHA-384"?48:32,nonce:jb(new TextEncoder().encode(b.salt)),keyPrefix:b.challenge,salt:""},signature:b.signature};return Object.defineProperties(se,{_originalSalt:{enumerable:!1,value:b.salt,writable:!1},_version:{enumerable:!1,value:1,writable:!1}}),se}function nt(b,T){return{algorithm:b.parameters.algorithm,challenge:b.parameters.keyPrefix,number:T.counter,salt:"_originalSalt"in b?b._originalSalt:b.parameters.nonce,signature:b.signature,took:T.time||0}}async function rt(b){await new Promise(T=>setTimeout(T,b))}async function Ds(b=h(x).challenge,T){const B=await Dn("onFetchChallenge",b);let O=null;if(B!==void 0)return B;if(typeof b=="string")if(b.startsWith("{")){Ce("parsing JSON challenge");try{O=JSON.parse(b)}catch{throw new Error("Unable to parse JSON challenge.")}}else{Ce("fetching challenge from",(T==null?void 0:T.method)||"GET",b),Q(p,new URL(b,location.origin),!0);const se=await h(x).fetch(b,{credentials:h(x).credentials||void 0,...T});await Vl(se);const te=se.headers.get("x-altcha-config");te&&Ul(te);const de=await se.json();if(de&&"his"in de&&de.his){if(Ce("requested HIS"),!g)throw new Error("Server requested HIS data but collector is disabled.");return Ds(ls(de.his.url,h(p)),{body:JSON.stringify({his:g.export()}),headers:{"content-type":"application/json"},method:"POST"})}de&&"hisResult"in de&&de.hisResult&&Ce("HIS result",de.hisResult),O=de}else if(b&&typeof b=="object")try{O=JSON.parse(JSON.stringify(b))}catch{throw new Error("Unable to parse JSON challenge.")}if(zs(O)&&(O=Nr(O)),!z(O))throw new Error("Challenge validation failed.");return O}function zs(b){return typeof b=="object"&&"challenge"in b}function z(b){return!!b&&typeof b=="object"&&"parameters"in b&&!!b.parameters&&typeof b.parameters=="object"&&"algorithm"in b.parameters&&"nonce"in b.parameters&&"salt"in b.parameters&&"keyPrefix"in b.parameters}function G(){return document.getElementById(h($))}function Ee(b){switch(b){case"checkbox":return t0;case"switch":return r0;case"native":default:return n0}}function en(b,T){const B=Object.keys(b).map(se=>se.toLowerCase());let O=T.reduce((se,te)=>(te=te.toLowerCase(),se||(b[te]?te:null)||B.find(de=>te.split("-")[0]===de.split("-")[0])||null),null);return b[O||""]||(O="en"),{language:O,strings:b[O]}}function xe(b){switch(b){case"bar":return h(x).barPlacement||"bottom";case"floating":return h(x).floatingPlacement||"auto";default:return}}function zn(b){var B;return[...((B=h(P))==null?void 0:B.querySelectorAll(a))||[]].reduce((O,se)=>{const te=se.name,de=se.value;return te&&de&&(O[te]=/\n/.test(de)?de.replace(new RegExp("(?{B&&!h(N)&&hs().then(()=>{Fl(h(ae))})}))}function Ol(b){b.persisted&&(jr(h(x).display),Pt())}function xa(){Is()}function Ul(b){var T,B;try{const O=JSON.parse(b);O&&typeof O=="object"&&Er({serverVerificationFields:(T=O==null?void 0:O.sentinel)==null?void 0:T.fields,serverVerificationTimeZone:(B=O==null?void 0:O.sentinel)==null?void 0:B.timeZone,verifyUrl:O.verifyurl,...O})}catch(O){Ce("unable to configure from x-altcha-config header",O)}}function ya(b=20){var lt;if(!h(Y))return;const T=h(x).floatingPlacement;if(!h(q)&&(Q(q,(h(x).floatingAnchor instanceof HTMLElement?h(x).floatingAnchor:h(x).floatingAnchor?document.querySelector(h(x).floatingAnchor):(lt=h(P))==null?void 0:lt.querySelector(o))||h(P),!0),!h(q))){Ce("unable to find floating anchor element");return}const B=parseInt(h(x).floatingOffset,10)||12,O=h(q).getBoundingClientRect(),se=h(Y).getBoundingClientRect(),te=document.documentElement.clientHeight,de=document.documentElement.clientWidth,vt=!T||T==="auto"?O.bottom+se.height+B+b>te:T==="top",Me=Math.max(b,Math.min(de-b-se.width,O.left+O.width/2-se.width/2));if(h(Y).style.setProperty("--altcha-floating-left",`${Me}px`),h(Y).style.setProperty("--altcha-floating-top",vt?`${O.top-(se.height+B)}px`:`${O.bottom+B}px`),h(Y).setAttribute("data-floating-position",vt?"top":"bottom"),h(L)){const On=h(L).getBoundingClientRect();h(L).style.left=O.left-Me+O.width/2-On.width/2+"px"}}async function wa(b,T){const B=await Dn("onRequestServerVerification",b,T);if(B!==void 0)return B;if(Ce("requesting server verification from",h(x).verifyUrl),!h(x).verifyUrl)throw new Error("Parameter verifyUrl must be set for server verification.");const O=await h(x).fetch(ls(h(x).verifyUrl,h(p)),{body:JSON.stringify({code:T,fields:h(x).serverVerificationFields?zn():void 0,payload:b,timeZone:h(x).serverVerificationTimeZone?fa():void 0}),credentials:h(x).credentials||void 0,headers:{"Content-Type":"application/json"},method:"POST"});await Vl(O);const se=await O.json();return se&&typeof se=="object"&&"payload"in se&&se.payload&&R("serververification",se),se}function Fl(b){var T;h(P)&&"requestSubmit"in h(P)?h(P).requestSubmit(b):(T=h(P))!=null&&T.reportValidity()&&(b?b.click():h(P).submit())}function wu(b,T={}){const{domain:B,name:O=h(x).name,maxAge:se,path:te,sameSite:de,secure:vt}=T;let Me=`${encodeURIComponent(O)}=${encodeURIComponent(b)}`;B&&(Me+=`; Domain=${B}`),se!=null&&(Me+=`; Max-Age=${se}`),te&&(Me+=`; Path=${te}`),de&&(Me+=`; SameSite=${de}`),vt&&(Me+="; Secure"),document.cookie=Me}function jr(b){switch(b){case"bar":case"floating":case"overlay":st(),(!h(K)||h(K)==="off")&&(h(M).auto="onsubmit");break;case"standard":Hl()}h(E)!==b&&Q(E,b,!0)}function bu(b){h(ke)&&clearTimeout(h(ke));const T=()=>{h(j)!==_e.UNVERIFIED?(Q(m,!1),Lt(_e.EXPIRED)):Pt(),R("expired")},B=b*1e3-Date.now();B>=1?Q(ke,setTimeout(T,B),!0):T()}async function Vl(b){var B;if(b.status>=400){if((B=b.headers.get("content-type"))!=null&&B.includes("/json")){let O;try{O=await b.json()}catch{}if(O&&"error"in O)throw new Error(`Server responded with ${b.status} - ${O.error}`)}throw new Error(`Server responded with ${b.status}.`)}const T=b.headers.get("content-type");if(!T||!T.includes("/json"))throw new Error(`Server responded with invalid content-type. Expected application/json, received ${T}.`)}async function Bl(b){var B;if(!h(ue)){Lt(_e.ERROR,"Cannot verify code challenge without PoW payload.");return}Lt(_e.VERIFYING);let T=null;if(h(x).verifyUrl)T=await wa(h(ue),b);else if(h(x).verifyFunction)T=await h(x).verifyFunction(h(ue),b);else{Lt(_e.ERROR,"Parameter verifyUrl is required for code challenge verification.");return}T!=null&&T.payload&&(Q(ue,T.payload,!0),Ce("server payload",h(ue))),(T==null?void 0:T.verified)===!0?(Ce("verified"),Lt(_e.VERIFIED),R("verified",{payload:h(ue)}),h(K)==="onsubmit"&&hs().then(()=>{Fl(h(ae))})):Lt(_e.ERROR,(T==null?void 0:T.reason)||"Verification failed."),h(x).disableAutoFocus||(B=G())==null||B.focus()}function Er(b){Object.assign(h(M),{...Object.fromEntries(Object.entries(b).filter(([T,B])=>B!==void 0))})}function ba(){return{...h(x)}}function ka(){return h(j)}function st(){Q(U,!1)}function Ce(...b){(h(x).debug||b.some(T=>T instanceof Error))&&console[b[0]instanceof Error?"error":"log"]("ALTCHA",`[name=${h(x).name}]`,...b)}function Pt(b=_e.UNVERIFIED,T=null){Q(m,!1),Q(le,T,!0),Q(ue,null),h(C)&&h(C).abort(),h(ke)&&(clearTimeout(h(ke)),Q(ke,null)),Lt(b)}function Lt(b,T=null){Q(j,b,!0),Q(le,T,!0),R("statechange",{payload:h(ue),state:h(j)})}function Hl(){Q(U,!0),hs().then(()=>{Is()})}function Is(){switch(h(x).display){case"floating":return ya()}Q(V,h(V)+1)}async function In(b={}){var lt,On;const{concurrency:T=Math.max(1,h(x).workers),controller:B=new AbortController,minDuration:O=h(x).minDuration}=b,se=performance.now();let te=null,de=null,vt=!1;const Me=await Dn("onVerify",b);if(Me!==void 0)return Me;Pt(_e.VERIFYING),Q(C,B,!0);try{if(!c)throw new Error("Secure context (HTTPS) required.");if(h(x).mockError)throw new Error("Mock error.");if(h(x).test)return Ce("running test mode with null challenge"),await rt(Math.max(0,O-(performance.now()-se))),(lt=h(C))!=null&<.signal.aborted?(Pt(),null):(Q(ue,btoa(JSON.stringify({challenge:null,solution:null,test:!0})),!0),Ce("verified"),Lt(_e.VERIFIED),R("verified",{payload:h(ue)}),{payload:h(ue)});if(te=await Ds(),!te)throw new Error("Failed to fetch challenge.");Ce("challenge",te),"configuration"in te&&(Ce("re-configuring from challenge",te.configuration),Er(te.configuration)),te.parameters.expiresAt&&bu(te.parameters.expiresAt),vt="_version"in te&&te._version===1;const wn=globalThis.$altcha.algorithms.get(te.parameters.algorithm);if(!wn)throw new Error(`Unsupported algorithm ${te.parameters.algorithm}.`);if(de=await l0({challenge:te,concurrency:T,controller:B,createWorker:wn,counterMode:vt?"string":"uint32",onOutOfMemory:Ff=>{if(Ce("out of memory error received"),R("outofmemory"),h(x).retryOnOutOfMemoryError&&Ff>1){const Vf=Math.floor(Ff/2);return Ce(`retrying with ${Vf} workers...`),Vf}},timeout:h(x).timeout}),(On=h(C))!=null&&On.signal.aborted)return Pt(),null;if(!de)throw new Error("Failed to find solution.");Ce("solution",de),await rt(Math.max(0,O-(performance.now()-se))),Q(N,te.codeChallenge||h(x).codeChallenge||null,!0),vt?Q(ue,btoa(JSON.stringify(nt(te,de))),!0):Q(ue,btoa(JSON.stringify({challenge:{parameters:te.parameters,signature:te.signature},solution:de})),!0),h(N)?(Ce("requesting code verification"),Lt(_e.CODE),R("codechallenge",{codeChallenge:h(N)})):h(x).verifyUrl?await Bl():(Ce("verified"),Lt(_e.VERIFIED),R("verified",{payload:h(ue)}))}catch(wn){return Ce("verification failed",wn),Lt(_e.ERROR,String(wn)),null}finally{Q(C,null)}return{challenge:te,payload:h(ue),solution:de}}var ku={configure:Er,getConfiguration:ba,getState:ka,hide:st,log:Ce,reset:Pt,setState:Lt,show:Hl,updateUI:Is,verify:In},_a=Ib();Je("scroll",sd,ga),Je("click",sd,va),Je("pageshow",ks,Ol),Je("resize",ks,xa);var Sa=Bs(_a);{var _u=b=>{var T=Tb();ye(b,T)};Ze(Sa,b=>{h(x).display==="overlay"&&h(U)&&b(_u)})}var tn=Ie(Sa,2),Na=Ve(tn);{var Su=b=>{var T=Pb(),B=Bs(T),O=Ie(B,2);{var se=te=>{var de=Ab();Qv(de,()=>{var vt;return(vt=document.querySelector(h(x).overlayContent))==null?void 0:vt.innerHTML},!0),$e(de),ye(te,de)};Ze(O,te=>{h(x).overlayContent&&te(se)})}Je("click",B,ma,!0),ye(b,T)};Ze(Na,b=>{h(x).display==="overlay"&&h(U)&&b(Su)})}var Kl=Ie(Na,2),Os=Ve(Kl),k=Ve(Os),Z=Ve(k);{let b=St(()=>h(x).display==="standard"&&h(K)!=="onsubmit"||h(j)===_e.VERIFYING);Fw(Z,()=>h(I),(T,B)=>{B(T,{get id(){return h($)},name:"",get required(){return h(b)},get loading(){return h(W)},get checked(){return h(m)},onchange:ha,oninvalid:pa})})}var nn=Ie(Z,2),Wl=Ve(nn);{var o0=b=>{var T=Ha();wt(()=>Kn(T,h(F).verificationRequired)),ye(b,T)},u0=b=>{var T=Ha();wt(()=>Kn(T,h(F).verifying)),ye(b,T)},c0=b=>{var T=Ha();wt(()=>Kn(T,h(F).verified)),ye(b,T)},d0=b=>{var T=Ha();wt(()=>Kn(T,h(F).label)),ye(b,T)};Ze(Wl,b=>{h(j)===_e.CODE&&h(N)?b(o0):h(j)===_e.VERIFYING?b(u0,1):h(j)===_e.VERIFIED?b(c0,2):b(d0,-1)})}$e(nn),$e(k);var f0=Ie(k,2);{var h0=b=>{Df(b,{get strings(){return h(F)}})};Ze(f0,b=>{h(Ae)&&b(h0)})}$e(Os);var Of=Ie(Os,2);{var p0=b=>{{let T=St(()=>h(x).display==="bar"&&h(Ae));xd(b,{get logo(){return h(T)},get strings(){return h(F)}})}};Ze(Of,b=>{h(ee)&&b(p0)})}var Uf=Ie(Of,2);{var m0=b=>{var T=Lb();Xr(T,B=>Q(L,B),()=>h(L)),ye(b,T)};Ze(Uf,b=>{h(x).display==="floating"&&b(m0)})}var g0=Ie(Uf,2);{var v0=b=>{var T=Mb();Rf(T),wt(()=>{Ne(T,"name",h(x).name),tb(T,h(ue))}),ye(b,T)};Ze(g0,b=>{h(x).setCookie||b(v0)})}$e(Kl);var x0=Ie(Kl,2);{var y0=b=>{yd(b,{get anchor(){return h(Y)},onClickOutside:()=>{c&&Pt()},get placement(){return h(x).popoverPlacement},role:"alert",variant:"error",get dir(){return h($n)},get updateUISignal(){return h(V)},children:(T,B)=>{var O=mp(),se=Bs(O);{var te=Me=>{var lt=Rb();ye(Me,lt)},de=Me=>{var lt=$b(),On=Ve(lt,!0);$e(lt),wt(()=>Kn(On,h(F).expired)),ye(Me,lt)},vt=Me=>{var lt=Db(),On=Ve(lt,!0);$e(lt),wt(()=>{Ne(lt,"title",h(le)),Kn(On,h(F).error)}),ye(Me,lt)};Ze(se,Me=>{!h(le)&&!c?Me(te):!h(le)&&h(j)===_e.EXPIRED?Me(de,1):Me(vt,-1)})}ye(T,O)},$$slots:{default:!0}})},w0=b=>{var T=mp(),B=Bs(T);Uw(B,()=>h(N),O=>{{let se=St(()=>h(x).codeChallengeDisplay!=="standard");yd(O,{get anchor(){return h(Y)},get backdrop(){return h(se)},get display(){return h(x).codeChallengeDisplay},onClose:()=>{Pt()},get placement(){return h(x).popoverPlacement},role:"dialog",get"aria-label"(){return h(F).verificationRequired},get dir(){return h($n)},get updateUISignal(){return h(V)},children:(te,de)=>{var vt=zb(),Me=Bs(vt);s0(Me,{get audioUrl(){return h(be)},get imageUrl(){return h(_t)},onCancel:()=>Pt(),onReload:()=>In(),onSubmit:wn=>Bl(wn),get codeChallenge(){return h(N)},get config(){return h(x)},get strings(){return h(F)}});var lt=Ie(Me,2);{var On=wn=>{xd(wn,{get logo(){return h(Ae)},get strings(){return h(F)}})};Ze(lt,wn=>{h(ee)&&h(x).codeChallengeDisplay!=="standard"&&wn(On)})}ye(te,vt)},$$slots:{default:!0}})}}),ye(b,T)};Ze(x0,b=>{h(le)||h(j)===_e.EXPIRED||!c?b(y0):h(N)&&h(j)===_e.CODE&&b(w0,1)})}$e(tn),Xr(tn,b=>Q(Y,b),()=>h(Y)),wt(b=>{Ne(tn,"data-state",h(j)),Ne(tn,"data-display",h(x).display||void 0),Ne(tn,"data-placement",b),Ne(tn,"data-visible",h(U)||void 0),Ne(tn,"dir",h($n)),Ne(nn,"for",h($)),tn.dir=tn.dir},[()=>xe(h(x).display)]),ye(e,_a);var b0=Sr(ku);return l(),b0}typeof window<"u"&&window.customElements&&!customElements.get("altcha-widget")&&customElements.define("altcha-widget",ss(Ob,{auto:{type:"String"},challenge:{type:"String"},configuration:{type:"String"},display:{type:"String"},language:{type:"String"},name:{type:"String"},theme:{type:"String"},type:{type:"String"},workers:{type:"Number"}},[],["configure","getConfiguration","getState","hide","log","reset","setState","show","updateUI","verify"]));const i0=`(function() { + "use strict"; + function bufferStartsWith(buffer, prefix) { + if (prefix.length > buffer.length) { + return false; + } + for (let i = 0; i < prefix.length; i++) { + if (buffer[i] !== prefix[i]) { + return false; + } + } + return true; + } + function bufferToHex(buffer) { + return Array.from(new Uint8Array(buffer)).map((b) => b.toString(16).padStart(2, "0")).join(""); + } + function concatBuffers(a, b) { + const out = new Uint8Array(a.length + b.length); + out.set(a, 0); + out.set(b, a.length); + return out; + } + function hexToBuffer(hex) { + if (hex.length % 2 !== 0) { + throw new Error(\`Hex string must have an even length. Got: \${hex}\`); + } + const buffer = new ArrayBuffer(hex.length / 2); + const view = new DataView(buffer); + for (let i = 0; i < hex.length; i += 2) { + const byteString = hex.substring(i, i + 2); + const byteValue = parseInt(byteString, 16); + view.setUint8(i / 2, byteValue); + } + return new Uint8Array(buffer); + } + async function delay(ms) { + await new Promise((resolve) => setTimeout(resolve, ms)); + } + function timeDuration(start) { + return Math.floor((performance.now() - start) * 10) / 10; + } + class PasswordBuffer { + constructor(nonce, mode = "uint32") { + this.nonce = nonce; + this.mode = mode; + this.buffer = new Uint8Array(this.nonce.length + this.COUNTER_BYTES); + this.buffer.set(this.nonce, 0); + this.dataView = new DataView(this.buffer.buffer); + } + nonce; + mode; + COUNTER_BYTES = 4; + buffer; + dataView; + encoder = new TextEncoder(); + /** + * Appends the counter to the nonce buffer. + * In 'string' mode, encodes the counter as a UTF-8 string. + * In 'uint32' mode, writes the counter as a big-endian 32-bit integer. + */ + setCounter(n) { + if (this.mode === "string") { + return concatBuffers(this.nonce, this.encoder.encode(n.toString())); + } + this.dataView.setUint32(this.nonce.length, n, false); + return this.buffer; + } + } + async function solveChallenge(options) { + const { + challenge, + controller, + counterMode = "uint32", + counterStart = 0, + counterStep = 1, + deriveKey: deriveKey2, + timeout = 9e4 + } = options; + const { nonce, keyPrefix, salt } = challenge.parameters; + const nonceBuf = hexToBuffer(nonce); + const saltBuf = hexToBuffer(salt); + const keyPrefixBuf = keyPrefix.length % 2 === 0 ? hexToBuffer(keyPrefix) : null; + const password = new PasswordBuffer(nonceBuf, counterMode); + const start = performance.now(); + let counter = counterStart; + let iterations = 0; + let derivedKeyHex = ""; + let lastYield = start; + while (true) { + if (controller?.signal.aborted || timeout && iterations % 10 === 0 && performance.now() - start > timeout) { + return null; + } + const { derivedKey } = await deriveKey2( + challenge.parameters, + saltBuf, + password.setCounter(counter) + ); + if (iterations % 10 === 0 && performance.now() - lastYield > 200) { + await delay(0); + lastYield = performance.now(); + } + if (keyPrefixBuf ? bufferStartsWith(derivedKey, keyPrefixBuf) : bufferToHex(derivedKey).startsWith(keyPrefix)) { + derivedKeyHex = bufferToHex(derivedKey); + break; + } + counter = counter + counterStep; + iterations = iterations + 1; + } + return { + counter, + derivedKey: derivedKeyHex, + time: timeDuration(start) + }; + } + function handler(options) { + const { deriveKey: deriveKey2 } = options; + let controller = void 0; + self.onmessage = async (message) => { + const { challenge, counterMode, counterStart, counterStep, timeout, type } = message.data; + if (type === "abort") { + controller?.abort(); + } else if (type === "work") { + controller = new AbortController(); + let solution; + try { + solution = await solveChallenge({ + challenge, + controller, + counterStart, + counterStep, + deriveKey: deriveKey2, + counterMode, + timeout + }); + } catch (err) { + return self.postMessage({ error: err }); + } + self.postMessage(solution); + } + }; + } + function getDigest(algorithm) { + switch (algorithm) { + case "PBKDF2/SHA-512": + return "SHA-512"; + case "PBKDF2/SHA-384": + return "SHA-384"; + case "PBKDF2/SHA-256": + default: + return "SHA-256"; + } + } + async function deriveKey(parameters, salt, password) { + const { algorithm, cost, keyLength = 32 } = parameters; + const passwordKey = await crypto.subtle.importKey( + "raw", + password, + { name: "PBKDF2" }, + false, + ["deriveKey"] + ); + const derivedKey = await crypto.subtle.deriveKey( + { + name: "PBKDF2", + salt, + iterations: cost, + hash: getDigest(algorithm) + }, + passwordKey, + { name: "AES-GCM", length: keyLength * 8 }, + true, + ["encrypt"] + ); + return { + derivedKey: new Uint8Array(await crypto.subtle.exportKey("raw", derivedKey)) + }; + } + handler({ + deriveKey + }); +})(); +`,wp=typeof self<"u"&&self.Blob&&new Blob(["(self.URL || self.webkitURL).revokeObjectURL(self.location.href);",i0],{type:"text/javascript;charset=utf-8"});function zf(e){let t;try{if(t=wp&&(self.URL||self.webkitURL).createObjectURL(wp),!t)throw"";const n=new Worker(t,{name:e==null?void 0:e.name});return n.addEventListener("error",()=>{(self.URL||self.webkitURL).revokeObjectURL(t)}),n}catch{return new Worker("data:text/javascript;charset=utf-8,"+encodeURIComponent(i0),{name:e==null?void 0:e.name})}}const a0=`(function() { + "use strict"; + function bufferStartsWith(buffer, prefix) { + if (prefix.length > buffer.length) { + return false; + } + for (let i = 0; i < prefix.length; i++) { + if (buffer[i] !== prefix[i]) { + return false; + } + } + return true; + } + function bufferToHex(buffer) { + return Array.from(new Uint8Array(buffer)).map((b) => b.toString(16).padStart(2, "0")).join(""); + } + function concatBuffers(a, b) { + const out = new Uint8Array(a.length + b.length); + out.set(a, 0); + out.set(b, a.length); + return out; + } + function hexToBuffer(hex) { + if (hex.length % 2 !== 0) { + throw new Error(\`Hex string must have an even length. Got: \${hex}\`); + } + const buffer = new ArrayBuffer(hex.length / 2); + const view = new DataView(buffer); + for (let i = 0; i < hex.length; i += 2) { + const byteString = hex.substring(i, i + 2); + const byteValue = parseInt(byteString, 16); + view.setUint8(i / 2, byteValue); + } + return new Uint8Array(buffer); + } + async function delay(ms) { + await new Promise((resolve) => setTimeout(resolve, ms)); + } + function timeDuration(start) { + return Math.floor((performance.now() - start) * 10) / 10; + } + class PasswordBuffer { + constructor(nonce, mode = "uint32") { + this.nonce = nonce; + this.mode = mode; + this.buffer = new Uint8Array(this.nonce.length + this.COUNTER_BYTES); + this.buffer.set(this.nonce, 0); + this.dataView = new DataView(this.buffer.buffer); + } + nonce; + mode; + COUNTER_BYTES = 4; + buffer; + dataView; + encoder = new TextEncoder(); + /** + * Appends the counter to the nonce buffer. + * In 'string' mode, encodes the counter as a UTF-8 string. + * In 'uint32' mode, writes the counter as a big-endian 32-bit integer. + */ + setCounter(n) { + if (this.mode === "string") { + return concatBuffers(this.nonce, this.encoder.encode(n.toString())); + } + this.dataView.setUint32(this.nonce.length, n, false); + return this.buffer; + } + } + async function solveChallenge(options) { + const { + challenge, + controller, + counterMode = "uint32", + counterStart = 0, + counterStep = 1, + deriveKey: deriveKey2, + timeout = 9e4 + } = options; + const { nonce, keyPrefix, salt } = challenge.parameters; + const nonceBuf = hexToBuffer(nonce); + const saltBuf = hexToBuffer(salt); + const keyPrefixBuf = keyPrefix.length % 2 === 0 ? hexToBuffer(keyPrefix) : null; + const password = new PasswordBuffer(nonceBuf, counterMode); + const start = performance.now(); + let counter = counterStart; + let iterations = 0; + let derivedKeyHex = ""; + let lastYield = start; + while (true) { + if (controller?.signal.aborted || timeout && iterations % 10 === 0 && performance.now() - start > timeout) { + return null; + } + const { derivedKey } = await deriveKey2( + challenge.parameters, + saltBuf, + password.setCounter(counter) + ); + if (iterations % 10 === 0 && performance.now() - lastYield > 200) { + await delay(0); + lastYield = performance.now(); + } + if (keyPrefixBuf ? bufferStartsWith(derivedKey, keyPrefixBuf) : bufferToHex(derivedKey).startsWith(keyPrefix)) { + derivedKeyHex = bufferToHex(derivedKey); + break; + } + counter = counter + counterStep; + iterations = iterations + 1; + } + return { + counter, + derivedKey: derivedKeyHex, + time: timeDuration(start) + }; + } + function handler(options) { + const { deriveKey: deriveKey2 } = options; + let controller = void 0; + self.onmessage = async (message) => { + const { challenge, counterMode, counterStart, counterStep, timeout, type } = message.data; + if (type === "abort") { + controller?.abort(); + } else if (type === "work") { + controller = new AbortController(); + let solution; + try { + solution = await solveChallenge({ + challenge, + controller, + counterStart, + counterStep, + deriveKey: deriveKey2, + counterMode, + timeout + }); + } catch (err) { + return self.postMessage({ error: err }); + } + self.postMessage(solution); + } + }; + } + async function deriveKey(parameters, salt, password) { + const { algorithm, keyLength = 32 } = parameters; + const iterations = Math.max(1, parameters.cost); + let data = void 0; + let derivedKey = void 0; + for (let i = 0; i < iterations; i++) { + if (i === 0) { + data = concatBuffers(salt, password); + } else { + data = derivedKey; + } + derivedKey = new Uint8Array( + (await crypto.subtle.digest(algorithm, data)).slice(0, keyLength) + ); + } + return { + parameters: {}, + derivedKey + }; + } + handler({ + deriveKey + }); +})(); +`,bp=typeof self<"u"&&self.Blob&&new Blob(["(self.URL || self.webkitURL).revokeObjectURL(self.location.href);",a0],{type:"text/javascript;charset=utf-8"});function If(e){let t;try{if(t=bp&&(self.URL||self.webkitURL).createObjectURL(bp),!t)throw"";const n=new Worker(t,{name:e==null?void 0:e.name});return n.addEventListener("error",()=>{(self.URL||self.webkitURL).revokeObjectURL(t)}),n}catch{return new Worker("data:text/javascript;charset=utf-8,"+encodeURIComponent(a0),{name:e==null?void 0:e.name})}}const Ub=`:root { + --altcha-border-color: var(--altcha-color-neutral); + --altcha-border-width: 1px; + --altcha-border-radius: 6px; + --altcha-color-base: light-dark(oklch(100% 0.00011 271.152), oklch(20.904% 0.00002 271.152)); + --altcha-color-base-content: light-dark( + oklch(20.904% 0.00002 271.152), + oklch(100% 0.00011 271.152) + ); + --altcha-color-error: oklch(51.284% 0.20527 28.678); + --altcha-color-error-content: oklch(100% 0.00011 271.152); + --altcha-color-neutral: light-dark(oklch(83.591% 0.0001 271.152), oklch(46.04% 0.00005 271.152)); + --altcha-color-neutral-content: light-dark( + oklch(46.76% 0.00005 271.152), + oklch(100% 0.00011 271.152) + ); + --altcha-color-primary: oklch(40.279% 0.2449 268.131); + --altcha-color-primary-content: oklch(100% 0.00011 271.152); + --altcha-color-success: oklch(55.748% 0.18968 142.511); + --altcha-color-success-content: oklch(100% 0.00011 271.152); + --altcha-checkbox-border-color: light-dark( + oklch(66.494% 0.00233 15.434), + oklch(51.028% 0.00006 271.152) + ); + --altcha-checkbox-border-radius: 5px; + --altcha-checkbox-border-width: var(--altcha-border-width); + --altcha-checkbox-outline: 2px solid var(--altcha-checkbox-outline-color); + --altcha-checkbox-outline-color: -webkit-focus-ring-color; + --altcha-checkbox-outline-offset: 2px; + --altcha-checkbox-size: 22px; + --altcha-checkbox-transition-duration: var(--altcha-transition-duration); + --altcha-input-background-color: var(--altcha-color-base); + --altcha-input-border-radius: 3px; + --altcha-input-border-width: 1px; + --altcha-input-color: var(--altcha-color-base-content); + --altcha-max-width: 320px; + --altcha-padding: 0.75rem; + --altcha-popover-arrow-size: 6px; + --altcha-popover-color: var(--altcha-border-color); + --altcha-shadow: drop-shadow(3px 3px 6px oklch(0% 0 0 / 0.2)); + --altcha-spinner-color: var(--altcha-color-base-content); + --altcha-switch-background-color: var(--altcha-color-neutral); + --altcha-switch-border-radius: calc(infinity * 1px); + --altcha-switch-height: var(--altcha-checkbox-size); + --altcha-switch-padding: 0.25rem; + --altcha-switch-width: calc(var(--altcha-checkbox-size) * 1.75); + --altcha-switch-toggle-border-radius: 100%; + --altcha-switch-toggle-color: var(--altcha-color-neutral-content); + --altcha-switch-toggle-size: calc( + var(--altcha-switch-height) - calc(var(--altcha-switch-padding) * 2) + ); + --altcha-transition-duration: 0.6s; + --altcha-z-index: 99999999; + --altcha-z-index-popover: 999999999; +} + +@supports (-moz-appearance: none) { + :root { + --altcha-checkbox-outline-color: var(--altcha-color-primary); + } +} +.altcha { + all: revert-layer; + display: none; + font-family: inherit; + font-size: inherit; + position: relative; +} +.altcha[data-visible] { + display: block; +} +.altcha-popover, .altcha-popover * { + all: revert-layer; + box-sizing: border-box; + font-family: inherit; + font-size: inherit; + line-height: 1.25; +} +.altcha * { + all: revert-layer; + box-sizing: border-box; + font-family: inherit; + font-size: inherit; + line-height: 1.25; +} +.altcha a, .altcha-popover a { + color: currentColor; + text-decoration: none; +} +.altcha a:hover, .altcha-popover a:hover { + color: currentColor; +} +.altcha-main { + align-items: start; + background-color: var(--altcha-color-base); + border: var(--altcha-border-width, 1px) solid var(--altcha-border-color); + border-radius: var(--altcha-border-radius, 0); + color: var(--altcha-color-base-content); + display: flex; + flex-direction: column; + gap: 0.5rem; + justify-content: space-between; + padding: var(--altcha-padding); + max-width: var(--altcha-max-width, 100%); +} +.altcha-main > * { + display: flex; + width: 100%; +} +.altcha-main > *:first-child { + flex-grow: 1; +} +.altcha-checkbox-wrap { + align-items: center; + display: flex; + flex-direction: row; + flex-grow: 1; + gap: 0.5rem; +} +.altcha-checkbox-wrap > * { + display: flex; +} +.altcha-logo { + opacity: 0.7; +} +.altcha-footer { + align-items: center; + display: flex; + flex-grow: 1; + gap: 0.5rem; + justify-content: flex-end; + font-size: 0.7rem; + opacity: 0.7; +} +.altcha-footer p { + margin: 0; + padding: 0; +} +.altcha-error { + font-size: 0.85rem; +} +.altcha-button { + align-items: center; + background: var(--altcha-color-primary); + border: var(--altcha-input-border-width) solid var(--altcha-color-primary); + border-radius: var(--altcha-input-border-radius); + color: var(--altcha-color-primary-content); + cursor: pointer; + display: flex; + font-size: 0.9rem; + gap: 0.5rem; + padding: 0.35rem; +} +.altcha-button:focus { + border-color: var(--altcha-color-primary); + outline: var(--altcha-checkbox-outline); + outline-offset: var(--altcha-checkbox-outline-offset); +} +.altcha-button > .altcha-spinner, .altcha-button > svg { + height: 20px; + width: 20px; +} +.altcha-button-secondary { + background: transparent; + border-color: var(--altcha-color-neutral); + color: var(--altcha-color-neutral-content); +} +.altcha-input { + background: var(--altcha-input-background-color); + border: var(--altcha-input-border-width) solid var(--altcha-color-neutral); + border-radius: var(--altcha-input-border-radius); + color: var(--altcha-input-color); + flex-grow: 1; + font-size: 1rem; + min-width: 0; + padding: 0.25rem; + width: auto; +} +.altcha-input:focus { + border-color: var(--altcha-color-primary); + outline: var(--altcha-checkbox-outline); + outline-offset: var(--altcha-checkbox-outline-offset); +} +.altcha-spinner { + animation: altcha-rotate 0.6s linear infinite; + border-radius: 100%; + border: var(--altcha-checkbox-border-width) solid var(--altcha-spinner-color); + border-bottom-color: transparent; + border-right-color: transparent; + opacity: 0.7; +} +.altcha-popover { + background-color: var(--altcha-color-base); + border: var(--altcha-border-width) solid var(--altcha-border-color); + border-radius: var(--altcha-border-radius); + color: var(--altcha-color-base-content); + filter: var(--altcha-shadow); + position: absolute; + left: calc(var(--altcha-padding) / 2); + max-width: calc(var(--altcha-max-width) - var(--altcha-padding)); + top: calc(var(--altcha-padding) + var(--altcha-checkbox-size) + var(--altcha-popover-arrow-size)); + z-index: var(--altcha-z-index-popover); +} +.altcha-popover-arrow { + border: var(--altcha-popover-arrow-size) solid transparent; + border-bottom-color: var(--altcha-popover-color); + content: ""; + height: 0; + left: calc(var(--altcha-checkbox-size) / 2); + position: absolute; + top: calc(var(--altcha-popover-arrow-size) * -2); + width: 0; +} +.altcha-popover-content { + max-height: 100dvh; + overflow: auto; + padding: var(--altcha-padding); +} +.altcha-popover[data-top=true][data-display=standard] { + bottom: calc(100% - (var(--altcha-padding) - var(--altcha-popover-arrow-size))); + top: auto; +} +.altcha-popover[data-top=true][data-display=standard] .altcha-popover-arrow { + border-bottom-color: transparent; + border-top-color: var(--altcha-popover-color); + bottom: calc(var(--altcha-popover-arrow-size) * -2); + top: auto; +} +.altcha-popover[data-variant=error] { + --altcha-popover-color: var(--altcha-color-error); + background-color: var(--altcha-color-error); + border-color: var(--altcha-color-error); + color: var(--altcha-color-error-content); +} +.altcha-popover[data-variant=error] .altcha-popover-content { + padding: calc(var(--altcha-padding) / 1.5) var(--altcha-padding); +} +.altcha-popover[data-display=overlay] { + animation: altcha-overlay-slidein 0.5s forwards; + left: 50%; + position: fixed; + top: 45%; + transform: translate(-50%, -50%); + width: var(--altcha-max-width); + z-index: var(--altcha-z-index); +} +.altcha-popover[data-display=bottomsheet] { + animation: altcha-bottomsheet-slideup 0.5s forwards; + border-bottom-left-radius: 0; + border-bottom-right-radius: 0; + border-bottom: 0; + bottom: -100%; + left: 50%; + position: fixed; + top: auto; + transform: translate(-50%, 0); + width: var(--altcha-max-width); + z-index: var(--altcha-z-index); +} +.altcha-popover[data-display=bottomsheet] .altcha-popover-content { + padding-bottom: calc(var(--altcha-padding) * 2); +} +.altcha-popover-backdrop { + background: var(--altcha-color-base-content); + bottom: 0; + left: 0; + opacity: 0.1; + position: fixed; + right: 0; + top: 0; + transition: opacity 0.5s; + z-index: var(--altcha-z-index); +} +.altcha-popover-close { + color: var(--altcha-color-base-content); + cursor: pointer; + display: inline-block; + font-size: 1rem; + height: 1.25rem; + line-height: 0.95; + position: absolute; + right: 0; + text-align: center; + text-shadow: 0 0 1px var(--altcha-color-base); + top: -1.5rem; + width: 1.25rem; + z-index: var(--altcha-z-index); +} +[dir=rtl] .altcha-popover { + left: auto; + right: calc(var(--altcha-padding) / 2); +} +[dir=rtl] .altcha-popover-arrow { + left: auto; + right: calc(var(--altcha-checkbox-size) / 2); +} +[dir=rtl] .altcha-popover-close { + left: 0; + right: auto; +} +.altcha-popover[data-display=bottomsheet] .altcha-footer, .altcha-popover[data-display=overlay] .altcha-footer { + align-items: center; + justify-content: center; + padding-top: 1rem; + gap: 0.5rem; +} +.altcha-popover[data-display=bottomsheet] .altcha-footer svg, .altcha-popover[data-display=overlay] .altcha-footer svg { + height: 18px; + width: 18px; + vertical-align: middle; +} +.altcha-code-challenge > form { + display: flex; + flex-direction: column; + gap: 0.5rem; +} +.altcha-code-challenge-title { + font-weight: 600; +} +.altcha-code-challenge-text { + font-size: 0.85rem; +} +.altcha-code-challenge-image { + background: white; + border: var(--altcha-input-border-width) solid var(--altcha-color-neutral); + border-radius: var(--altcha-input-border-radius); + object-fit: contain; + height: 50px; +} +.altcha-code-challenge-row { + display: flex; + gap: 0.5rem; +} +.altcha-code-challenge-buttons { + align-items: center; + display: flex; + flex-direction: column; + gap: 0.5rem; + margin-top: var(--altcha-padding); + justify-content: space-between; +} +.altcha-code-challenge-buttons button { + justify-content: center; + width: 100%; +} +.altcha-checkbox { + cursor: pointer; + height: var(--altcha-checkbox-size); + position: relative; + width: var(--altcha-checkbox-size); +} +.altcha-checkbox input { + appearance: none; + background: var(--altcha-input-background-color); + border: var(--altcha-checkbox-border-width, 2px) solid var(--altcha-checkbox-border-color); + border-radius: var(--altcha-checkbox-border-radius); + cursor: pointer; + height: var(--altcha-checkbox-size); + left: 0; + margin: 0; + padding: 0; + position: absolute; + top: 0; + width: var(--altcha-checkbox-size); +} +@supports (hanging-punctuation: first) and (font: -apple-system-body) and (-webkit-appearance: none) { + .altcha-checkbox input { + /* Safari-only: fixes focus outline */ + } + .altcha-checkbox input:focus { + outline-width: 2px; + outline-style: solid; + } +} +.altcha-checkbox input:before { + border-radius: var(--altcha-checkbox-border-radius); + content: ""; + width: 100%; + height: 100%; + background: var(--altcha-color-neutral); + display: block; + transform: scale(0); +} +.altcha-checkbox input:checked { + background-color: var(--altcha-color-success); + border-color: var(--altcha-color-success); +} +.altcha-checkbox input:checked::before { + background-color: var(--altcha-color-success); + opacity: 0; + transform: scale(2.2); + transition: all var(--altcha-checkbox-transition-duration) ease; + transition-delay: 0.1s; +} +.altcha-checkbox svg { + --altcha-radio-svg-size: calc(var(--altcha-checkbox-size) * 0.5); + --altcha-radio-svg-offset: calc(var(--altcha-checkbox-size) * 0.25); + fill: none; + left: var(--altcha-radio-svg-offset); + height: var(--altcha-radio-svg-size); + opacity: 0; + position: absolute; + stroke: currentColor; + stroke-width: 2; + stroke-linecap: round; + stroke-linejoin: round; + stroke-dasharray: 16px; + stroke-dashoffset: 16px; + top: var(--altcha-radio-svg-offset); + transform: translate3d(0, 0, 0); + width: var(--altcha-radio-svg-size); +} +.altcha-checkbox input:checked + svg { + color: var(--altcha-color-success-content); + opacity: 1; + stroke-dashoffset: 0; + transition: all var(--altcha-checkbox-transition-duration) ease; + transition-delay: 0.1s; +} +.altcha-checkbox-spinner { + display: none; + left: 0; + height: var(--altcha-checkbox-size); + position: absolute; + top: 0; + width: var(--altcha-checkbox-size); +} +.altcha-checkbox[data-loading=true] input { + appearance: none; + opacity: 0; + pointer-events: none; +} +.altcha-checkbox[data-loading=true] .altcha-checkbox-spinner { + display: block; +} +.altcha-checkbox-native { + height: var(--altcha-checkbox-size); + position: relative; + width: var(--altcha-checkbox-size); +} +.altcha-checkbox-native input { + height: var(--altcha-checkbox-size); + margin: 0; + width: var(--altcha-checkbox-size); +} +.altcha-checkbox-native-spinner { + display: none; + left: 0; + height: var(--altcha-checkbox-size); + position: absolute; + top: 0; + width: var(--altcha-checkbox-size); +} +.altcha-checkbox-native[data-loading=true] input { + appearance: none; + opacity: 0; + pointer-events: none; +} +.altcha-checkbox-native[data-loading=true] .altcha-checkbox-native-spinner { + display: block; +} +.altcha-switch { + align-items: center; + border-radius: var(--altcha-switch-border-radius); + background-color: var(--altcha-switch-background-color); + display: flex; + height: var(--altcha-switch-height); + padding: var(--altcha-switch-padding); + position: relative; + width: var(--altcha-switch-width); +} +.altcha-switch:focus-within { + outline: var(--altcha-checkbox-outline); + outline-offset: var(--altcha-checkbox-outline-offset); +} +.altcha-switch input { + appearance: none; + cursor: pointer; + height: 100%; + left: 0; + opacity: 0; + position: absolute; + top: 0; + width: 100%; +} +.altcha-switch-toggle { + align-items: center; + background-color: var(--altcha-switch-toggle-color); + border-radius: var(--altcha-switch-toggle-border-radius); + cursor: pointer; + display: flex; + height: var(--altcha-switch-toggle-size); + justify-content: center; + left: var(--altcha-switch-padding); + position: absolute; + transition: width 150ms ease-out, left 150ms ease-out; + width: var(--altcha-switch-toggle-size); +} +.altcha-switch-spinner { + display: none; + height: var(--altcha-switch-toggle-size); + width: var(--altcha-switch-toggle-size); +} +.altcha-switch[data-loading=true] { + pointer-events: none; +} +.altcha-switch[data-loading=true] .altcha-switch-spinner { + display: block; +} +.altcha-switch[data-loading=true] .altcha-switch-toggle { + background-color: transparent; + left: calc(50% - var(--altcha-switch-toggle-size) / 2); +} +[data-state=verified] .altcha-switch { + --altcha-switch-background-color: var(--altcha-color-success); +} +[data-state=verified] .altcha-switch-toggle { + background-color: var(--altcha-color-success-content); + left: calc(100% - var(--altcha-switch-height) + var(--altcha-switch-padding)); +} +[dir=rtl] .altcha-switch-toggle { + left: calc(100% - var(--altcha-switch-height) + var(--altcha-switch-padding)); +} +[dir=rtl][data-state=verified] .altcha-switch-toggle { + left: var(--altcha-switch-padding); +} +.altcha-floating-arrow { + border: 6px solid transparent; + border-bottom-color: var(--altcha-border-color); + content: ""; + height: 0; + left: 12px; + position: absolute; + top: -12px; + width: 0; +} +.altcha-overlay-backdrop { + bottom: 0; + left: 0; + position: fixed; + right: 0; + top: 0; + transition: opacity var(--altcha-transition-duration); + z-index: var(--altcha-z-index); +} +.altcha-overlay-close { + display: inline-block; + color: currentColor; + cursor: pointer; + font-size: 1rem; + height: 1rem; + line-height: 0.85; + position: absolute; + right: 0; + text-align: center; + text-shadow: 0 0 1px var(--altcha-color-base); + top: -1.5rem; + width: 1rem; + z-index: var(--altcha-z-index); +} +.altcha[data-display=overlay] { + animation: altcha-overlay-slidein var(--altcha-transition-duration) forwards; + filter: var(--altcha-shadow); + left: 50%; + opacity: 0; + position: fixed; + top: 45%; + transform: translate(-50%, -50%); + z-index: var(--altcha-z-index); +} +.altcha[data-display=overlay] .altcha-main { + width: var(--altcha-max-width); +} +.altcha[data-display=floating] { + display: none; + filter: var(--altcha-shadow); + left: var(--altcha-floating-left, -100%); + position: fixed; + top: var(--altcha-floating-top, -100%); + z-index: var(--altcha-z-index); +} +.altcha[data-display=floating] .altcha-main { + width: var(--altcha-max-width); +} +.altcha[data-display=floating][data-floating-position=top] .altcha-floating-arrow { + border-bottom-color: transparent; + border-top-color: var(--altcha-border-color); + bottom: -12px; + top: auto; +} +.altcha[data-display=floating][data-visible] { + display: flex; +} +.altcha[data-display=bar] { + bottom: -100%; + filter: var(--altcha-shadow); + left: 0; + position: fixed; + right: 0; + transition: bottom var(--altcha-transition-duration), top var(--altcha-transition-duration); + z-index: var(--altcha-z-index); +} +.altcha[data-display=bar] .altcha-main { + align-items: center; + border-radius: 0; + border-width: var(--altcha-border-width) 0 0 0; + flex-direction: row; + max-width: 100% !important; +} +.altcha[data-display=bar] .altcha-main > * { + width: auto; +} +.altcha[data-display=bar][data-placement=top] { + bottom: auto; + top: -100%; +} +.altcha[data-display=bar][data-placement=top] .altcha-main { + border-width: 0 0 var(--altcha-border-width) 0; +} +.altcha[data-display=bar][data-placement=bottom]:not([data-state=unverified]) { + bottom: 0; +} +.altcha[data-display=bar][data-placement=top]:not([data-state=unverified]) { + top: 0; +} +.altcha[data-display=invisible] { + display: none; +} + +@keyframes altcha-rotate { + 0% { + transform: rotate(0deg); + } + 100% { + transform: rotate(360deg); + } +} +@keyframes altcha-bottomsheet-slideup { + 100% { + bottom: 0; + } +} +@keyframes altcha-overlay-slidein { + 100% { + opacity: 1; + top: 50%; + } +}`;Eb(Ub);$altcha.algorithms.set("SHA-256",()=>new If);$altcha.algorithms.set("SHA-384",()=>new If);$altcha.algorithms.set("SHA-512",()=>new If);$altcha.algorithms.set("PBKDF2/SHA-256",()=>new zf);$altcha.algorithms.set("PBKDF2/SHA-384",()=>new zf);$altcha.algorithms.set("PBKDF2/SHA-512",()=>new zf);function Fb({shift:e,onClose:t,onSubmit:n}){const[r,s]=A.useState(""),[l,a]=A.useState(()=>sessionStorage.getItem("guest_captcha_verified")==="true"),[o,u]=A.useState(()=>sessionStorage.getItem("guest_captcha_verified")==="true"?"altcha-session-verified":""),[c,f]=A.useState(()=>sessionStorage.getItem("guest_captcha_verified")==="true"),[v,d]=A.useState(""),[w,y]=A.useState(!1),S=A.useRef(null);A.useEffect(()=>{const g=localStorage.getItem("guest_display_name")||"";g&&s(g)},[]),A.useEffect(()=>{if(l)return;const g=S.current;if(!g)return;const p=m=>{var E,j;const N=(E=m==null?void 0:m.detail)==null?void 0:E.state,C=(j=m==null?void 0:m.detail)==null?void 0:j.payload;N==="verified"&&(sessionStorage.setItem("guest_captcha_verified","true"),a(!0),f(!0),u(C||"altcha-verified-"+Math.random().toString(36).substring(2,10)))};return g.addEventListener("statechange",p),()=>{g.removeEventListener("statechange",p)}},[l]);const R=async g=>{if(g.preventDefault(),d(""),!r.trim()){d("Bitte gib deinen Namen ein.");return}if(!(l||c)){d("Bitte schließe zuerst den ALTCHA Security Check ab.");return}const m=o||"altcha-session-verified";localStorage.setItem("guest_display_name",r.trim()),window.dispatchEvent(new Event("guest_name_updated")),y(!0);try{await n({guest_name:r.trim(),captcha_token:m}),t()}catch(N){d(N.message||"Eintragen fehlgeschlagen.")}finally{y(!1)}};return i.jsx("div",{className:"fixed inset-0 z-50 flex items-center justify-center p-4 bg-slate-950/80 backdrop-blur-sm",children:i.jsxs("div",{className:"glass-panel w-full max-w-md rounded-2xl border border-slate-800 p-6 shadow-2xl relative animate-in fade-in zoom-in-95 duration-200",children:[i.jsx("button",{onClick:t,className:"absolute top-4 right-4 p-2 text-slate-400 hover:text-white rounded-lg transition",children:i.jsx(Gg,{className:"w-5 h-5"})}),i.jsxs("div",{className:"flex items-center gap-3 mb-4",children:[i.jsx("div",{className:"w-10 h-10 rounded-xl bg-blue-500/10 text-blue-400 border border-blue-500/20 flex items-center justify-center",children:i.jsx(xf,{className:"w-5 h-5"})}),i.jsxs("div",{children:[i.jsx("h3",{className:"font-bold text-lg text-white",children:"Als Gast eintragen"}),i.jsxs("p",{className:"text-xs text-slate-400",children:["Schicht: ",e==null?void 0:e.title," (",e==null?void 0:e.start_time," - ",e==null?void 0:e.end_time,")"]})]})]}),v&&i.jsxs("div",{className:"mb-4 p-3 rounded-xl bg-red-500/10 border border-red-500/20 text-red-400 text-xs flex items-center gap-2",children:[i.jsx(Cl,{className:"w-4 h-4 shrink-0"}),i.jsx("span",{children:v})]}),i.jsxs("form",{onSubmit:R,className:"space-y-4",children:[i.jsxs("div",{children:[i.jsx("label",{className:"block text-xs font-semibold text-slate-300 mb-1",children:"Dein Name / Anzeigename"}),i.jsx("input",{type:"text",required:!0,value:r,onChange:g=>s(g.target.value),placeholder:"z. B. Alex Muster",className:"w-full px-3.5 py-2.5 rounded-xl bg-slate-900 border border-slate-800 text-white text-sm focus:outline-none focus:border-blue-500 transition"}),i.jsx("p",{className:"text-[11px] text-slate-500 mt-1",children:"Dein Name bleibt in deiner aktuellen Sitzung gespeichert. Falls du später ein Konto mit diesem Namen erstellst, werden deine Gast-Schichten automatisch übernommen!"})]}),l?i.jsxs("div",{className:"p-3.5 rounded-xl bg-emerald-500/10 border border-emerald-500/20 text-emerald-400 text-xs flex items-center justify-between font-mono",children:[i.jsxs("span",{className:"flex items-center gap-2 font-semibold",children:[i.jsx(Zn,{className:"w-4 h-4 text-emerald-400 shrink-0"})," ALTCHA Spamschutz verifiziert"]}),i.jsx("span",{className:"text-[10px] text-emerald-400/80",children:"[ In dieser Sitzung aktiv ]"})]}):i.jsxs("div",{className:"p-4 rounded-xl bg-slate-900/90 border border-slate-800 space-y-3",children:[i.jsxs("div",{className:"flex items-center justify-between",children:[i.jsxs("span",{className:"text-xs font-semibold text-slate-300 flex items-center gap-1.5 font-mono",children:[i.jsx(hy,{className:"w-4 h-4 text-emerald-400"})," Security Check (ALTCHA)"]}),i.jsx("a",{href:"https://altcha.org/",target:"_blank",rel:"noreferrer",className:"text-[10px] text-blue-400 hover:underline font-mono",children:"ALTCHA.org"})]}),i.jsxs("div",{className:"border border-slate-700 rounded-lg p-3 bg-slate-950/80 flex flex-col items-center justify-center min-h-[90px]",children:[i.jsx("altcha-widget",{ref:S,test:"true",auto:"onload",hidefooter:"true",style:{width:"100%"}}),c&&i.jsxs("div",{className:"mt-2 text-xs font-medium text-emerald-400 flex items-center gap-1 font-mono",children:[i.jsx(Zn,{className:"w-4 h-4"})," ALTCHA erfolgreich verifiziert!"]})]})]}),i.jsxs("div",{className:"pt-2 flex justify-end gap-2",children:[i.jsx("button",{type:"button",onClick:t,className:"px-4 py-2 rounded-xl text-xs font-semibold text-slate-400 hover:bg-slate-800 transition",children:"Abbrechen"}),i.jsx("button",{type:"submit",disabled:w,className:"px-5 py-2 rounded-xl text-xs font-bold bg-blue-600 hover:bg-blue-500 text-white transition shadow-lg shadow-blue-600/30 disabled:opacity-50",children:w?"Eintragen...":"Jetzt eintragen"})]})]})]})})}const Vb="/api",wd=()=>localStorage.getItem("auth_token"),hl=e=>{e?localStorage.setItem("auth_token",e):localStorage.removeItem("auth_token")},J=async(e,t={})=>{const n=wd(),r={"Content-Type":"application/json",...n?{Authorization:`Token ${n}`}:{},...t.headers},s=await fetch(`${Vb}${e}`,{...t,headers:r}),l=s.headers.get("content-type");let a=null;if(l&&l.includes("application/json")&&(a=await s.json()),!s.ok){s.status===401&&hl(null);let o="Ein Fehler ist aufgetreten.";throw a&&(typeof a.error=="string"?o=a.error:typeof a.detail=="string"?o=a.detail:a.email?o=Array.isArray(a.email)?a.email[0]:a.email:a.username?o=Array.isArray(a.username)?a.username[0]:a.username:a.non_field_errors&&(o=a.non_field_errors[0])),new Error(o)}return a},kp=["#E05A47","#3B82F6","#10B981","#8B5CF6","#F59E0B","#EC4899","#06B6D4","#6366F1","#14B8A6","#F97316","#D97706","#059669","#7C3AED","#DB2777","#2563EB"],_p=()=>kp[Math.floor(Math.random()*kp.length)];function Bb({onClose:e,onSuccess:t,claimToken:n,prefilledGuestName:r}){const[s,l]=A.useState(!!(n||r)),[a,o]=A.useState(""),[u,c]=A.useState(""),[f,v]=A.useState(""),[d,w]=A.useState(r||""),[y,S]=A.useState(null),[R,g]=A.useState(""),[p,m]=A.useState(!1);A.useEffect(()=>{N()},[]);const N=async()=>{try{const E=await J("/users/restriction-setting/");S(E)}catch{}},C=async E=>{E.preventDefault(),g(""),m(!0);try{if(s){const j={username:a,email:u,password:f,display_name:d||a};n&&(j.claim_token=n);const L=await J("/users/register/",{method:"POST",body:JSON.stringify(j)});if(L.requires_verification||L.requires_approval||!L.token){t(null,L.message||"Konto erfolgreich registriert! Bitte schau in deine E-Mail zur Bestätigung oder warte auf die Admin-Freischaltung."),e();return}hl(L.token),t(L.user,L.message)}else{const j=await J("/users/login/",{method:"POST",body:JSON.stringify({username:a,password:f})});hl(j.token),t(j.user,"Erfolgreich angemeldet!")}e()}catch(j){g(j.message||"Authentifizierung fehlgeschlagen.")}finally{m(!1)}};return i.jsx("div",{className:"fixed inset-0 z-50 flex items-center justify-center p-4 bg-black/60 backdrop-blur-sm",children:i.jsxs("div",{className:"hallmark-panel w-full max-w-md rounded-sm border border-grid p-6 shadow-2xl relative animate-in fade-in zoom-in-95 duration-200",children:[i.jsx("button",{onClick:e,className:"absolute top-4 right-4 p-2 text-muted hover:text-main rounded-sm transition",children:i.jsx(Gg,{className:"w-5 h-5"})}),i.jsxs("div",{className:"flex items-center gap-3 mb-6",children:[i.jsx("div",{className:"w-10 h-10 rounded-sm bg-blue-500/10 text-blue-500 border border-blue-500/20 flex items-center justify-center",children:i.jsx(so,{className:"w-5 h-5"})}),i.jsxs("div",{children:[i.jsx("h3",{className:"font-serif font-bold text-lg text-main",children:s?"Konto erstellen":"Anmelden"}),i.jsx("p",{className:"text-xs text-muted font-sans",children:s?"Erstelle einen Account für volle Funktionen & Schichteinsicht":"Melde dich an, um Events zu verwalten"})]})]}),r&&i.jsxs("div",{className:"mb-4 p-3 rounded-sm bg-amber-500/10 border border-amber-500/20 text-amber-500 text-xs flex items-center gap-2 font-mono",children:[i.jsx(Kg,{className:"w-4 h-4 shrink-0 text-amber-500"}),i.jsxs("span",{children:["Einladung für Gast: ",i.jsx("strong",{children:r}),". Die Schicht wird deinem neuen Konto zugewiesen!"]})]}),(y==null?void 0:y.is_restriction_enabled)&&s&&i.jsxs("div",{className:"mb-4 p-3 rounded-sm bg-indigo-500/10 border border-indigo-500/20 text-indigo-400 text-xs flex items-center gap-2 font-mono",children:[i.jsx(fy,{className:"w-4 h-4 shrink-0 text-indigo-400"}),i.jsxs("span",{children:["Registrierungen beschränkt auf: ",i.jsx("strong",{children:y.active_domains.join(", ")})]})]}),R&&i.jsxs("div",{className:"mb-4 p-3 rounded-sm bg-red-500/10 border border-red-500/20 text-red-500 text-xs flex items-center gap-2 font-mono",children:[i.jsx(Cl,{className:"w-4 h-4 shrink-0"}),i.jsx("span",{children:R})]}),!s&&!1,i.jsxs("form",{onSubmit:C,className:"space-y-4 font-sans",children:[i.jsxs("div",{children:[i.jsx("label",{className:"block text-xs font-semibold text-main mb-1 font-mono",children:"Benutzername"}),i.jsxs("div",{className:"relative",children:[i.jsx(so,{className:"w-4 h-4 absolute left-3 top-3 text-muted"}),i.jsx("input",{type:"text",required:!0,value:a,onChange:E=>o(E.target.value),placeholder:"z. B. max_muster",className:"w-full pl-9 pr-3.5 py-2 rounded-sm input-field text-sm font-mono"})]})]}),s&&i.jsxs(i.Fragment,{children:[i.jsxs("div",{children:[i.jsx("label",{className:"block text-xs font-semibold text-main mb-1 font-mono",children:"E-Mail-Adresse"}),i.jsxs("div",{className:"relative",children:[i.jsx(Xc,{className:"w-4 h-4 absolute left-3 top-3 text-muted"}),i.jsx("input",{type:"email",required:!0,value:u,onChange:E=>c(E.target.value),placeholder:"max@beispiel.de",className:"w-full pl-9 pr-3.5 py-2 rounded-sm input-field text-sm font-mono"})]})]}),i.jsxs("div",{children:[i.jsx("label",{className:"block text-xs font-semibold text-main mb-1 font-mono",children:"Anzeigename (für Schichtlisten)"}),i.jsxs("div",{className:"relative",children:[i.jsx(so,{className:"w-4 h-4 absolute left-3 top-3 text-muted"}),i.jsx("input",{type:"text",value:d,onChange:E=>w(E.target.value),placeholder:"z. B. Max M.",className:"w-full pl-9 pr-3.5 py-2 rounded-sm input-field text-sm font-mono"})]})]})]}),i.jsxs("div",{children:[i.jsx("label",{className:"block text-xs font-semibold text-main mb-1 font-mono",children:"Passwort"}),i.jsxs("div",{className:"relative",children:[i.jsx(ly,{className:"w-4 h-4 absolute left-3 top-3 text-muted"}),i.jsx("input",{type:"password",required:!0,value:f,onChange:E=>v(E.target.value),placeholder:"••••••••",className:"w-full pl-9 pr-3.5 py-2 rounded-sm input-field text-sm font-mono"})]})]}),i.jsx("button",{type:"submit",disabled:p,style:{backgroundColor:"var(--brand-primary)"},className:"w-full py-2.5 rounded-sm text-xs font-mono font-bold text-white transition hover:brightness-110 shadow-sm",children:p?"Verarbeite...":s?"Registrieren":"Anmelden"})]}),i.jsx("div",{className:"mt-4 pt-4 border-t border-grid text-center",children:i.jsx("button",{type:"button",onClick:()=>{l(!s),g("")},className:"text-xs font-mono text-muted hover:text-main transition",children:s?"Bereits ein Konto? Hier anmelden":"Noch kein Konto? Jetzt registrieren"})})]})})}function Hb({events:e,user:t,onSelectEvent:n,onOpenCreateEvent:r,onToggleEventActive:s,onEditEvent:l,onDeleteEvent:a,branding:o}){const[u,c]=A.useState(""),[f,v]=A.useState("all"),d=new Date().toISOString().split("T")[0],w=e.filter(m=>m.title.toLowerCase().includes(u.toLowerCase())||m.description&&m.description.toLowerCase().includes(u.toLowerCase())||m.location&&m.location.toLowerCase().includes(u.toLowerCase())?f==="upcoming"?m.end_date>=d:!0:!1),y=(o==null?void 0:o.primary_color)||"var(--brand-primary)",S=(o==null?void 0:o.show_community_info_box)??!0,R=(o==null?void 0:o.show_support_box)??!0,g=S||R,p=t&&(t.is_admin_user||t.is_staff||t.is_superuser);return i.jsxs("div",{className:"space-y-8 animate-in fade-in duration-200",children:[i.jsxs("div",{className:"hallmark-panel rounded-sm p-6 sm:p-10 space-y-6 max-w-5xl mx-auto relative border border-grid",children:[i.jsxs("div",{className:"space-y-2 border-b border-grid pb-6",children:[i.jsxs("div",{className:"flex items-center gap-2",children:[i.jsx("span",{className:"font-mono text-[10px] uppercase tracking-widest text-muted border border-grid px-2.5 py-1 rounded-sm inline-block",children:(o==null?void 0:o.app_name)||"SCHICHT- & EVENTPORTAL"}),(o==null?void 0:o.custom_banner_text)&&i.jsxs("span",{className:"font-mono text-[10px] uppercase tracking-widest text-amber-500 bg-amber-500/10 border border-amber-500/20 px-2.5 py-1 rounded-sm inline-block font-bold",children:["📢 ",o.custom_banner_text]})]}),i.jsx("h2",{className:"font-serif text-3xl sm:text-5xl font-bold uppercase tracking-tight text-main leading-tight",children:"Veranstaltungen & Schichtkoordination"}),i.jsx("p",{className:"font-sans text-xs sm:text-sm text-muted max-w-2xl",children:"Hier findest du aktuelle Termine, Arbeitsgruppen, Bar- & Tresendienste und Schichtpläne der Initiative."})]}),i.jsxs("div",{className:"flex flex-col sm:flex-row items-stretch sm:items-center justify-between gap-3",children:[i.jsxs("div",{className:"relative flex-1",children:[i.jsx(Bg,{className:"w-4 h-4 absolute left-3.5 top-3 text-muted"}),i.jsx("input",{type:"text",value:u,onChange:m=>c(m.target.value),placeholder:"Veranstaltung, Ort oder Suchbegriff...",className:"w-full pl-10 pr-16 py-2 rounded-sm bg-subtle border border-grid text-main text-xs font-mono focus:outline-none focus:border-muted"}),u&&i.jsx("button",{onClick:()=>c(""),className:"absolute right-3 top-2.5 text-[10px] font-mono text-muted hover:text-main",children:"[ CLEAR ]"})]}),i.jsxs("div",{className:"flex items-center gap-1.5 font-mono text-xs shrink-0",children:[i.jsxs("button",{onClick:()=>v("all"),className:`px-3.5 py-1.5 rounded-sm transition border ${f==="all"?"bg-surface-hover text-main border-grid font-bold shadow-sm":"bg-subtle text-muted border-grid hover:text-main"}`,children:["ALLE PROGRAMME (",e.length,")"]}),i.jsxs("button",{onClick:()=>v("upcoming"),className:`px-3.5 py-1.5 rounded-sm transition border ${f==="upcoming"?"bg-surface-hover text-main border-grid font-bold shadow-sm":"bg-subtle text-muted border-grid hover:text-main"}`,children:["ANSTEHEND (",e.filter(m=>m.end_date>=d).length,")"]})]})]})]}),i.jsxs("div",{className:"max-w-5xl mx-auto grid grid-cols-1 lg:grid-cols-4 gap-6",children:[i.jsxs("div",{className:`${g?"lg:col-span-3":"lg:col-span-4"} space-y-4`,children:[i.jsxs("div",{className:"flex items-center justify-between border-b border-grid pb-3 font-mono",children:[i.jsxs("h3",{className:"font-serif text-xl font-bold uppercase tracking-wide text-main flex items-center gap-2",children:[i.jsx(ra,{className:"w-4.5 h-4.5 text-muted"})," Termine & Schichten"]}),t&&i.jsxs("button",{onClick:r,style:{backgroundColor:y},className:"px-3.5 py-1.5 rounded-sm text-xs font-mono font-bold text-white transition flex items-center gap-1 hover:brightness-110 shadow-sm",children:[i.jsx(Yn,{className:"w-3.5 h-3.5"})," EVENT ANLEGEN"]})]}),w.length===0?i.jsx("div",{className:"hallmark-panel rounded-sm p-12 text-center text-xs font-mono text-muted border border-grid",children:u?`[ Keinen Eintrag für "${u}" gefunden ]`:"[ Keine Veranstaltungen vorhanden ]"}):i.jsx("div",{className:`grid grid-cols-1 sm:grid-cols-2 ${g?"":"lg:grid-cols-3"} gap-4`,children:w.map(m=>{var q,P,Y,ae;const N=((q=m.task_areas)==null?void 0:q.length)||0,C=((P=m.task_areas)==null?void 0:P.reduce((le,ke)=>{var ue;return le+(((ue=ke.shifts)==null?void 0:ue.length)||0)},0))||0,E=t&&m.co_managers&&m.co_managers.some(le=>typeof le=="object"?le.id===t.id:le===t.id),j=t&&(m.created_by===t.id||((Y=m.created_by)==null?void 0:Y.id)===t.id||E),L=p||j;return i.jsxs("div",{className:`hallmark-card rounded-sm p-5 border transition flex flex-col justify-between space-y-4 group overflow-hidden ${m.is_active===!1?"border-amber-500/40 opacity-80 bg-subtle":"border-grid"}`,children:[i.jsxs("div",{className:"space-y-3",children:[i.jsxs("div",{className:"flex items-center justify-between text-[11px] font-mono text-muted gap-2",children:[i.jsxs("span",{className:"flex items-center gap-1 bg-subtle px-2 py-0.5 rounded-sm border border-grid font-bold shrink-0",children:[i.jsx(Vi,{className:"w-3 h-3 text-muted"}),new Date(m.start_date).toLocaleDateString("de-DE")]}),m.is_active===!1?i.jsx("span",{className:"text-amber-500 font-bold px-1.5 py-0.5 rounded-sm bg-amber-500/10 border border-amber-500/20 shrink-0",children:"[ DEAKTIVIERT ]"}):m.location?i.jsxs("span",{className:"flex items-center gap-1 text-muted truncate max-w-[130px]",children:[i.jsx(vf,{className:"w-3 h-3 shrink-0"}),i.jsx("span",{className:"truncate",children:m.location})]}):null]}),i.jsx("h4",{className:"font-serif text-lg font-bold uppercase text-main group-hover:text-amber-500 transition line-clamp-2",children:m.title}),m.description&&i.jsx("p",{className:"text-xs text-muted font-sans line-clamp-2",children:m.description}),i.jsxs("div",{className:"text-[10px] font-mono text-muted flex items-center gap-1.5 pt-1",children:[i.jsxs("span",{children:[N," Bereiche"]}),i.jsx("span",{children:"/"}),i.jsxs("span",{children:[C," Schichten"]})]})]}),i.jsx("div",{className:"pt-3 border-t border-grid space-y-2 font-mono",children:i.jsxs("div",{className:"flex flex-wrap items-center gap-1.5",children:[i.jsxs("button",{onClick:()=>n(m.id),className:"flex-1 min-w-[110px] py-1.5 px-3 rounded-sm text-xs font-mono font-bold bg-surface hover:bg-surface-hover text-main border border-grid transition flex items-center justify-center gap-1",children:["Schichtplan ",i.jsx(Fg,{className:"w-3.5 h-3.5"})]}),L&&l&&i.jsxs("button",{onClick:()=>l(m),className:"py-1.5 px-2.5 rounded-sm text-[10px] font-mono font-bold bg-indigo-500/10 text-indigo-400 border border-indigo-500/20 hover:bg-indigo-500/20 transition flex items-center gap-1 shrink-0",title:"Veranstaltung & Schichten bearbeiten",children:[i.jsx(Bi,{className:"w-3.5 h-3.5"})," BEARBEITEN"]}),L&&s&&i.jsx("button",{onClick:()=>s(m),className:`py-1.5 px-2 rounded-sm text-[10px] font-mono font-bold transition flex items-center gap-1 border shrink-0 ${m.is_active!==!1?"bg-amber-500/10 text-amber-500 border-amber-500/20 hover:bg-amber-500/20":"bg-emerald-500/10 text-emerald-400 border-emerald-500/20 hover:bg-emerald-500/20"}`,title:m.is_active!==!1?"Deaktivieren":"Aktivieren",children:m.is_active!==!1?i.jsx(Vg,{className:"w-3.5 h-3.5"}):i.jsx(Zn,{className:"w-3.5 h-3.5"})}),(p||t&&(m.created_by===t.id||((ae=m.created_by)==null?void 0:ae.id)===t.id))&&a&&i.jsx("button",{onClick:()=>a(m),className:"py-1.5 px-2 rounded-sm text-[10px] font-mono font-bold bg-red-500/10 text-red-400 border border-red-500/20 hover:bg-red-500/20 transition flex items-center gap-1 shrink-0",title:"Veranstaltung unwiderruflich löschen",children:i.jsx(cn,{className:"w-3.5 h-3.5"})})]})})]},m.id)})})]}),g&&i.jsxs("div",{className:"space-y-4 font-mono text-xs",children:[S&&i.jsxs("div",{className:"hallmark-panel rounded-sm p-4 border border-grid space-y-3",children:[i.jsx("h4",{className:"font-serif text-sm font-bold uppercase tracking-wide text-main border-b border-grid pb-2",children:(o==null?void 0:o.community_info_title)||"📌 Verein & Infos"}),i.jsx("div",{className:"space-y-2 text-muted text-[11px] whitespace-pre-line",children:(o==null?void 0:o.community_info_text)||`Initiative e.V. Hausverein +Offene Angebote, DIY-Kultur & engagierte Schichten.`})]}),R&&i.jsxs("div",{className:"hallmark-panel rounded-sm p-4 border border-grid space-y-3",children:[i.jsx("h4",{className:"font-serif text-sm font-bold uppercase tracking-wide text-main border-b border-grid pb-2",children:(o==null?void 0:o.support_box_title)||"❤️ Unterstützen"}),i.jsx("p",{className:"text-[11px] text-muted whitespace-pre-line",children:(o==null?void 0:o.support_box_text)||"Hilf mit als Helfer*in an der Bar, beim Essen kochen oder beim Auf- & Abbau."})]})]})]})]})}function Kb({events:e,onSelectEvent:t,branding:n}){const[r,s]=A.useState(new Date),[l,a]=A.useState(null),o=r.getFullYear(),u=r.getMonth(),c=["JANUAR","FEBRUAR","MÄRZ","APRIL","MAI","JUNI","JULI","AUGUST","SEPTEMBER","OKTOBER","NOVEMBER","DEZEMBER"],f=()=>s(new Date(o,u-1,1)),v=()=>s(new Date(o,u+1,1)),d=()=>s(new Date),w=new Date(o,u,1).getDay(),y=w===0?6:w-1,S=new Date(o,u+1,0).getDate(),R=m=>{const N=String(u+1).padStart(2,"0"),C=String(m).padStart(2,"0");return`${o}-${N}-${C}`},g=m=>{const N=R(m);return e.filter(C=>N>=C.start_date&&N<=C.end_date)},p=(n==null?void 0:n.primary_color)||"var(--brand-primary)";return i.jsxs("div",{className:"space-y-6 max-w-5xl mx-auto animate-in fade-in duration-200",children:[i.jsxs("div",{className:"hallmark-panel rounded-sm p-6 sm:p-8 border border-grid flex flex-col sm:flex-row sm:items-center justify-between gap-4 font-mono",children:[i.jsxs("div",{className:"flex items-center gap-3",children:[i.jsx("div",{className:"w-10 h-10 rounded-sm bg-subtle text-main border border-grid flex items-center justify-center font-bold",children:i.jsx(ra,{className:"w-4 h-4 text-amber-500"})}),i.jsxs("div",{children:[i.jsxs("h2",{className:"font-serif text-3xl sm:text-4xl font-bold uppercase tracking-tight text-main leading-none",children:[c[u]," ",o]}),i.jsx("p",{className:"text-[10px] text-muted uppercase tracking-widest mt-1",children:"— INITIATIVE E.V. TERMIN- & SCHICHTÜBERSICHT —"})]})]}),i.jsxs("div",{className:"flex items-center gap-2",children:[i.jsx("button",{onClick:d,className:"px-3.5 py-1.5 rounded-sm text-xs font-mono font-bold bg-surface hover:bg-surface-hover text-main border border-grid transition",children:"[ HEUTE ]"}),i.jsx("button",{onClick:f,className:"p-1.5 rounded-sm text-muted hover:text-main bg-surface border border-grid transition",title:"Vorheriger Monat",children:i.jsx(ty,{className:"w-4 h-4"})}),i.jsx("button",{onClick:v,className:"p-1.5 rounded-sm text-muted hover:text-main bg-surface border border-grid transition",title:"Nächster Monat",children:i.jsx(ny,{className:"w-4 h-4"})})]})]}),i.jsxs("div",{className:"hallmark-panel rounded-sm border border-grid overflow-hidden",children:[i.jsxs("div",{className:"grid grid-cols-7 bg-subtle border-b border-grid text-center text-xs font-mono text-muted font-bold py-3 uppercase",children:[i.jsx("div",{children:"MO"}),i.jsx("div",{children:"DI"}),i.jsx("div",{children:"MI"}),i.jsx("div",{children:"DO"}),i.jsx("div",{children:"FR"}),i.jsx("div",{children:"SA"}),i.jsx("div",{children:"SO"})]}),i.jsxs("div",{className:"grid grid-cols-7 auto-rows-fr divide-x divide-y divide-grid bg-surface text-xs font-mono",children:[Array.from({length:y}).map((m,N)=>i.jsx("div",{className:"min-h-[100px] sm:min-h-[110px] p-2 bg-subtle/50 text-muted opacity-30"},`offset-${N}`)),Array.from({length:S}).map((m,N)=>{const C=N+1,E=g(C),j=new Date().getFullYear()===o&&new Date().getMonth()===u&&new Date().getDate()===C;return i.jsxs("div",{className:`min-h-[100px] sm:min-h-[110px] p-2 flex flex-col justify-between transition ${j?"bg-surface-hover/80 font-bold":"hover:bg-surface-hover/50"}`,children:[i.jsxs("div",{className:"flex items-center justify-between mb-1",children:[i.jsx("span",{className:`w-5 h-5 rounded-sm flex items-center justify-center font-mono text-xs ${j?"bg-main text-paper font-bold shadow-sm":"text-muted"}`,children:C}),E.length>0&&i.jsxs("span",{className:"text-[9px] font-mono text-muted",children:[E.length," ",E.length===1?"Event":"Events"]})]}),i.jsx("div",{className:"space-y-1.5 overflow-y-auto max-h-[70px] no-scrollbar",children:E.map(L=>{const q=(l==null?void 0:l.id)===L.id;return i.jsx("button",{onClick:()=>a(L),style:{backgroundColor:q?p:`${p}15`,borderColor:`${p}40`,color:q?"#ffffff":p},className:`w-full text-left px-2 py-1 rounded-sm text-[10px] font-mono font-bold border truncate block hover:brightness-110 transition shadow-sm ${L.is_active===!1?"opacity-50 line-through":""}`,children:L.title},`evt-${L.id}`)})})]},`day-${C}`)})]})]}),l&&i.jsxs("div",{className:"hallmark-panel rounded-sm p-6 border border-grid flex flex-col sm:flex-row sm:items-center justify-between gap-4 font-mono animate-in fade-in duration-200",children:[i.jsxs("div",{className:"space-y-2",children:[i.jsxs("div",{className:"flex flex-wrap items-center gap-2 text-xs text-muted",children:[i.jsxs("span",{className:"flex items-center gap-1 bg-subtle px-2 py-0.5 rounded-sm border border-grid font-bold text-main",children:[i.jsx(Vi,{className:"w-3 h-3 text-muted"}),new Date(l.start_date).toLocaleDateString("de-DE")," — ",new Date(l.end_date).toLocaleDateString("de-DE")]}),l.location&&i.jsxs("span",{className:"flex items-center gap-1 text-muted",children:[i.jsx(vf,{className:"w-3 h-3"}),l.location]})]}),i.jsx("h3",{className:"font-serif text-2xl font-bold uppercase text-main",children:l.title}),l.description&&i.jsx("p",{className:"text-xs font-sans text-muted max-w-xl",children:l.description})]}),i.jsx("div",{className:"flex items-center gap-2 shrink-0",children:i.jsxs("button",{onClick:()=>t(l.id),style:{backgroundColor:p},className:"px-5 py-2 rounded-sm text-xs font-mono font-bold text-white transition flex items-center gap-1.5 hover:brightness-110 shadow-sm",children:["SCHICHTPLAN ÖFFNEN ",i.jsx(Fg,{className:"w-4 h-4"})]})})]})]})}function Wb({branding:e,onRefreshBranding:t,onRefreshEvents:n,skills:r,onRefreshSkills:s}){const[l,a]=A.useState("users"),[o,u]=A.useState(!0),[c,f]=A.useState(""),[v,d]=A.useState(""),[w,y]=A.useState([]),[S,R]=A.useState(""),[g,p]=A.useState([]),[m,N]=A.useState(!1),[C,E]=A.useState(!1),[j,L]=A.useState(!0),[q,P]=A.useState([]),[Y,ae]=A.useState(""),[le,ke]=A.useState([]),[ue,Te]=A.useState([]),[V,M]=A.useState(""),[U,x]=A.useState(""),[$,I]=A.useState(_p()),[K,W]=A.useState((e==null?void 0:e.app_name)||"Veranstaltungsschichtplaner"),[ee,Ae]=A.useState((e==null?void 0:e.logo_url)||""),[gt,$n]=A.useState((e==null?void 0:e.primary_color)||"#E05A47"),[F,be]=A.useState((e==null?void 0:e.custom_banner_text)||""),[_t,rr]=A.useState((e==null?void 0:e.show_community_info_box)??!0),[Dn,yn]=A.useState((e==null?void 0:e.community_info_title)||"📌 Verein & Infos"),[Nr,nt]=A.useState((e==null?void 0:e.community_info_text)||`Initiative e.V. Hausverein +Offene Angebote, DIY-Kultur & engagierte Schichten.`),[rt,Ds]=A.useState((e==null?void 0:e.show_support_box)??!0),[zs,z]=A.useState((e==null?void 0:e.support_box_title)||"❤️ Unterstützen"),[G,Ee]=A.useState((e==null?void 0:e.support_box_text)||"Hilf mit als Helfer*in an der Bar, beim Essen kochen oder beim Auf- & Abbau."),[en,xe]=A.useState(!1),[zn,fa]=A.useState(!1),[ls,ha]=A.useState("smtp.beispiel.de"),[pa,ma]=A.useState(587),[ga,va]=A.useState(""),[Dl,zl]=A.useState(""),[Il,Ol]=A.useState(!0),[xa,Ul]=A.useState(!1),[ya,wa]=A.useState("noreply@schichtplaner.de"),[Fl,wu]=A.useState(""),[jr,bu]=A.useState(!1),[Vl,Bl]=A.useState(!1),[Er,ba]=A.useState(!1);A.useEffect(()=>{ka()},[]);const ka=async()=>{u(!0);try{try{const k=await J("/users/manage-users/");y(k.results||k)}catch{}try{const k=await J("/users/pending/");p(k.results||k)}catch{}try{const k=await J("/users/restriction-setting/");N(k.is_restriction_enabled),E(k.require_admin_approval),L(k.require_email_verification??!0)}catch{}try{const k=await J("/users/domain-rules/");P(k.results||k)}catch{}try{const k=await J("/events/");ke(k.results||k)}catch{}try{const k=await J("/templates/");Te(k.results||k)}catch{}try{const k=await J("/users/smtp-setting/");k&&(fa(k.is_active??!1),ha(k.host||""),ma(k.port||587),va(k.username||""),zl(k.password||""),Ol(k.use_tls??!0),Ul(k.use_ssl??!1),wa(k.from_email||""))}catch{}}catch(k){f(k.message||"Laden der Admin-Daten fehlgeschlagen.")}finally{u(!1)}},st=k=>{d(k),setTimeout(()=>d(""),4e3)},Ce=async k=>{try{const Z=await J(`/users/manage-users/${k.id}/`,{method:"PATCH",body:JSON.stringify({is_admin_user:!k.is_admin_user})});y(w.map(nn=>nn.id===k.id?Z:nn)),st(`Admin-Rechte für ${k.username} aktualisiert.`)}catch(Z){f(Z.message||"Fehler beim Aktualisieren.")}},Pt=async k=>{try{const Z=await J(`/users/manage-users/${k.id}/`,{method:"PATCH",body:JSON.stringify({is_approved:!k.is_approved})});y(w.map(nn=>nn.id===k.id?Z:nn)),st(`Freischalt-Status für ${k.username} aktualisiert.`)}catch(Z){f(Z.message||"Fehler beim Aktualisieren.")}},Lt=async k=>{if(window.confirm(`Möchtest du das Benutzerkonto "${k.display_name||k.username}" (@${k.username}) wirklich dauerhaft löschen?`))try{await J(`/users/manage-users/${k.id}/`,{method:"DELETE"}),y(w.filter(Z=>Z.id!==k.id)),st(`Benutzerkonto ${k.username} wurde gelöscht.`)}catch(Z){f(Z.message||"Fehler beim Löschen des Benutzers.")}},Hl=async k=>{try{await J(`/users/${k}/approve/`,{method:"POST"}),p(g.filter(Z=>Z.id!==k)),ka(),st("Benutzer erfolgreich freigeschaltet.")}catch(Z){f(Z.message||"Freischalten fehlgeschlagen.")}},Is=async k=>{try{await J(`/users/${k}/approve/`,{method:"DELETE"}),p(g.filter(Z=>Z.id!==k)),st("Benutzer abgelehnt und gelöscht.")}catch(Z){f(Z.message||"Ablehnen fehlgeschlagen.")}},In=async(k,Z)=>{try{const Wl=await J("/users/restriction-setting/",{method:"POST",body:JSON.stringify({is_restriction_enabled:k==="restriction"?Z:m,require_admin_approval:k==="approval"?Z:C,require_email_verification:k==="email_verify"?Z:j})});N(Wl.is_restriction_enabled),E(Wl.require_admin_approval),L(Wl.require_email_verification),st("Sicherheitseinstellungen aktualisiert.")}catch(nn){f(nn.message||"Aktualisierung fehlgeschlagen.")}},ku=async k=>{if(k.preventDefault(),!!Y.trim())try{const Z=await J("/users/domain-rules/",{method:"POST",body:JSON.stringify({domain:Y})});P([...q,Z]),ae(""),st(`Domain-Regel "${Z.domain}" hinzugefügt.`)}catch(Z){f(Z.message||"Fehler beim Hinzufügen.")}},_a=async k=>{try{await J(`/users/domain-rules/${k}/`,{method:"DELETE"}),P(q.filter(Z=>Z.id!==k)),st("Domain-Regel entfernt.")}catch(Z){f(Z.message||"Fehler beim Löschen.")}},Sa=async k=>{if(k.preventDefault(),!!V.trim())try{await J("/skills/",{method:"POST",body:JSON.stringify({name:V,description:U,color:$})}),M(""),x(""),I(_p()),s(),st("Qualifikation angelegt.")}catch(Z){f(Z.message||"Fehler beim Anlegen.")}},_u=async k=>{try{await J(`/skills/${k}/`,{method:"DELETE"}),s(),st("Qualifikation gelöscht.")}catch(Z){f(Z.message||"Fehler beim Löschen.")}},tn=async k=>{try{await J(`/templates/${k}/`,{method:"DELETE"}),Te(ue.filter(Z=>Z.id!==k)),st("Vorlage gelöscht.")}catch(Z){f(Z.message||"Fehler beim Löschen.")}},Na=async k=>{k.preventDefault(),xe(!0);try{await J("/branding/",{method:"POST",body:JSON.stringify({app_name:K,logo_url:ee,primary_color:gt,custom_banner_text:F,show_community_info_box:_t,community_info_title:Dn,community_info_text:Nr,show_support_box:rt,support_box_title:zs,support_box_text:G})}),t(),st("Branding-Einstellungen erfolgreich gespeichert!")}catch(Z){f(Z.message||"Speichern des Brandings fehlgeschlagen.")}finally{xe(!1)}},Su=async k=>{k.preventDefault(),Bl(!0);try{await J("/users/smtp-setting/",{method:"POST",body:JSON.stringify({is_active:zn,host:ls,port:parseInt(pa)||587,username:ga,password:Dl,use_tls:Il,use_ssl:xa,from_email:ya})}),st("✅ SMTP-Einstellungen erfolgreich gespeichert!")}catch(Z){f(Z.message||"Speichern der SMTP-Einstellungen fehlgeschlagen.")}finally{Bl(!1)}},Kl=async()=>{ba(!0);try{const k=await J("/users/smtp-setting/test/",{method:"POST",body:JSON.stringify({email:Fl})});st(`✅ ${k.message||"Test-E-Mail erfolgreich gesendet!"}`)}catch(k){f(k.message||"Test-E-Mail fehlgeschlagen.")}finally{ba(!1)}},Os=w.filter(k=>k.username.toLowerCase().includes(S.toLowerCase())||k.email.toLowerCase().includes(S.toLowerCase())||k.display_name&&k.display_name.toLowerCase().includes(S.toLowerCase()));return i.jsxs("div",{className:"space-y-6 max-w-5xl mx-auto animate-in fade-in duration-200 font-sans",children:[i.jsx("div",{className:"hallmark-panel rounded-sm p-6 sm:p-8 border border-grid space-y-2",children:i.jsxs("div",{className:"flex items-center gap-3",children:[i.jsx("div",{className:"w-10 h-10 rounded-sm bg-indigo-500/10 text-indigo-500 border border-indigo-500/20 flex items-center justify-center font-bold",children:i.jsx(Hg,{className:"w-5 h-5"})}),i.jsxs("div",{children:[i.jsx("h2",{className:"font-serif text-3xl font-bold uppercase tracking-tight text-main",children:"System Administration"}),i.jsx("p",{className:"text-xs text-muted font-mono mt-0.5",children:"Verwaltung von Benutzern, Freischaltungen, Events, Vorlagen, Branding & SMTP-Mailserver"})]})]})}),i.jsx("div",{className:"border-b border-grid pb-2",children:i.jsxs("div",{className:"flex items-center gap-1.5 font-mono text-xs overflow-x-auto no-scrollbar",children:[i.jsxs("button",{onClick:()=>a("users"),className:`px-4 py-2 rounded-sm transition flex items-center gap-2 border ${l==="users"?"bg-surface-hover text-main font-bold border-grid shadow-sm":"bg-subtle text-muted border-transparent hover:text-main"}`,children:[i.jsx(Wg,{className:"w-3.5 h-3.5 text-blue-400"})," [ 01: BENUTZER & SICHERHEIT (",w.length,") ]"]}),i.jsxs("button",{onClick:()=>a("events"),className:`px-4 py-2 rounded-sm transition flex items-center gap-2 border ${l==="events"?"bg-surface-hover text-main font-bold border-grid shadow-sm":"bg-subtle text-muted border-transparent hover:text-main"}`,children:[i.jsx(ra,{className:"w-3.5 h-3.5 text-emerald-400"})," [ 02: VERANSTALTUNGEN (",le.length,") ]"]}),i.jsxs("button",{onClick:()=>a("templates"),className:`px-4 py-2 rounded-sm transition flex items-center gap-2 border ${l==="templates"?"bg-surface-hover text-main font-bold border-grid shadow-sm":"bg-subtle text-muted border-transparent hover:text-main"}`,children:[i.jsx(ou,{className:"w-3.5 h-3.5 text-amber-400"})," [ 03: VORLAGEN & SKILLS ]"]}),i.jsxs("button",{onClick:()=>a("branding"),className:`px-4 py-2 rounded-sm transition flex items-center gap-2 border ${l==="branding"?"bg-surface-hover text-main font-bold border-grid shadow-sm":"bg-subtle text-muted border-transparent hover:text-main"}`,children:[i.jsx(tp,{className:"w-3.5 h-3.5 text-indigo-400"})," [ 04: BRANDING & SYSTEM ]"]}),i.jsxs("button",{onClick:()=>a("smtp"),className:`px-4 py-2 rounded-sm transition flex items-center gap-2 border ${l==="smtp"?"bg-surface-hover text-main font-bold border-grid shadow-sm":"bg-subtle text-muted border-transparent hover:text-main"}`,children:[i.jsx(Xc,{className:"w-3.5 h-3.5 text-purple-400"})," [ 05: E-MAIL & SMTP ]"]})]})}),c&&i.jsxs("div",{className:"p-4 rounded-sm bg-red-500/10 border border-red-500/20 text-red-500 text-xs font-mono flex items-center gap-2",children:[i.jsx(Cl,{className:"w-4 h-4 shrink-0"}),i.jsx("span",{children:c})]}),v&&i.jsxs("div",{className:"p-4 rounded-sm bg-emerald-500/10 border border-emerald-500/20 text-emerald-400 text-xs font-mono flex items-center gap-2",children:[i.jsx(Zn,{className:"w-4 h-4 shrink-0"}),i.jsx("span",{children:v})]}),l==="users"&&i.jsxs("div",{className:"space-y-6 animate-in fade-in duration-150 font-mono",children:[g.length>0&&i.jsxs("div",{className:"hallmark-panel rounded-sm p-5 border border-amber-500/40 bg-amber-500/5 space-y-3",children:[i.jsxs("h3",{className:"font-serif text-lg font-bold uppercase text-amber-500 flex items-center gap-2 border-b border-amber-500/20 pb-2",children:["⚠️ Ausstehende Registrierungen (",g.length,")"]}),i.jsx("div",{className:"space-y-2",children:g.map(k=>i.jsxs("div",{className:"p-3 rounded-sm bg-surface border border-grid flex items-center justify-between text-xs",children:[i.jsxs("div",{children:[i.jsxs("div",{className:"font-bold text-main",children:[k.display_name," (@",k.username,")"]}),i.jsx("div",{className:"text-[11px] text-muted",children:k.email})]}),i.jsxs("div",{className:"flex items-center gap-2",children:[i.jsx("button",{onClick:()=>Hl(k.id),className:"px-3 py-1 rounded-sm bg-emerald-600 hover:bg-emerald-500 text-white font-bold text-xs",children:"[ FREISCHALTEN ]"}),i.jsx("button",{onClick:()=>Is(k.id),className:"px-3 py-1 rounded-sm bg-red-600/20 text-red-400 hover:bg-red-600/30 border border-red-600/30 font-bold text-xs",children:"[ ABLEHNEN ]"})]})]},k.id))})]}),i.jsxs("div",{className:"hallmark-panel rounded-sm p-4 border border-grid flex items-center gap-3",children:[i.jsx(Bg,{className:"w-4 h-4 text-muted shrink-0"}),i.jsx("input",{type:"text",value:S,onChange:k=>R(k.target.value),placeholder:"Nutzer suchen nach Name, Username oder E-Mail...",className:"w-full bg-subtle border border-grid px-3 py-1.5 rounded-sm text-xs font-mono text-main focus:outline-none focus:border-muted"}),S&&i.jsx("button",{onClick:()=>R(""),className:"text-xs text-muted hover:text-main font-mono shrink-0",children:"[ CLEAR ]"})]}),i.jsxs("div",{className:"hallmark-panel rounded-sm p-5 border border-grid space-y-4",children:[i.jsxs("h3",{className:"font-serif text-lg font-bold uppercase text-main border-b border-grid pb-2",children:["Benutzerkonten & Rechtestatus (",Os.length,")"]}),i.jsx("div",{className:"overflow-x-auto",children:i.jsxs("table",{className:"w-full text-left border-collapse text-xs",children:[i.jsx("thead",{children:i.jsxs("tr",{className:"border-b border-grid text-muted uppercase text-[10px]",children:[i.jsx("th",{className:"pb-2 font-bold",children:"Nutzer"}),i.jsx("th",{className:"pb-2 font-bold",children:"E-Mail"}),i.jsx("th",{className:"pb-2 font-bold",children:"Freigeschaltet"}),i.jsx("th",{className:"pb-2 font-bold",children:"E-Mail Bestätigt"}),i.jsx("th",{className:"pb-2 font-bold",children:"Admin-Rolle"}),i.jsx("th",{className:"pb-2 font-bold text-right",children:"Aktionen"})]})}),i.jsx("tbody",{className:"divide-y divide-grid",children:Os.map(k=>i.jsxs("tr",{className:"hover:bg-subtle/50 transition",children:[i.jsxs("td",{className:"py-2.5 font-bold text-main",children:[k.display_name||k.username,i.jsxs("span",{className:"text-[10px] text-muted font-normal block",children:["@",k.username]})]}),i.jsx("td",{className:"py-2.5 text-muted",children:k.email}),i.jsx("td",{className:"py-2.5",children:i.jsx("span",{className:`px-2 py-0.5 rounded-sm text-[10px] font-bold border ${k.is_approved?"bg-emerald-500/10 text-emerald-400 border-emerald-500/20":"bg-amber-500/10 text-amber-400 border-amber-500/20"}`,children:k.is_approved?"JA":"NEIN"})}),i.jsx("td",{className:"py-2.5",children:i.jsx("span",{className:`px-2 py-0.5 rounded-sm text-[10px] font-bold border ${k.is_email_verified?"bg-emerald-500/10 text-emerald-400 border-emerald-500/20":"bg-subtle text-muted border-grid"}`,children:k.is_email_verified?"VERIFIZIERT":"AUSSTEHEND"})}),i.jsx("td",{className:"py-2.5",children:i.jsx("span",{className:`px-2 py-0.5 rounded-sm text-[10px] font-bold border ${k.is_admin_user||k.is_superuser?"bg-indigo-500/10 text-indigo-400 border-indigo-500/20":"bg-subtle text-muted border-grid"}`,children:k.is_superuser?"SUPERUSER":k.is_admin_user?"ADMIN":"USER"})}),i.jsxs("td",{className:"py-2.5 text-right space-x-1",children:[i.jsx("button",{onClick:()=>Pt(k),className:"px-2 py-1 rounded-sm text-[10px] bg-subtle hover:bg-surface-hover border border-grid text-main transition",children:k.is_approved?"Sperren":"Freischalten"}),i.jsx("button",{onClick:()=>Ce(k),className:"px-2 py-1 rounded-sm text-[10px] bg-subtle hover:bg-surface-hover border border-grid text-indigo-400 transition",children:k.is_admin_user?"Admin entziehen":"Zu Admin machen"}),i.jsxs("button",{onClick:()=>Lt(k),className:"px-2 py-1 rounded-sm text-[10px] bg-red-500/10 hover:bg-red-500/20 border border-red-500/20 text-red-400 font-bold transition inline-flex items-center gap-1",title:"Benutzerkonto dauerhaft löschen",children:[i.jsx(cn,{className:"w-3 h-3"})," Löschen"]})]})]},k.id))})]})})]}),i.jsxs("div",{className:"hallmark-panel rounded-sm p-5 border border-grid space-y-4",children:[i.jsx("h3",{className:"font-serif text-lg font-bold uppercase text-main border-b border-grid pb-2",children:"Sicherheit & Registrierungs-Einschränkungen"}),i.jsxs("div",{className:"grid grid-cols-1 sm:grid-cols-3 gap-4",children:[i.jsxs("div",{className:"p-4 rounded-sm bg-subtle border border-grid space-y-2",children:[i.jsxs("div",{className:"flex items-center justify-between",children:[i.jsx("span",{className:"font-bold text-main",children:"E-Mail Bestätigung (Opt-Out)"}),i.jsx("button",{onClick:()=>In("email_verify",!j),className:`px-3 py-1 rounded-sm text-xs font-bold transition border ${j?"bg-emerald-600 text-white border-emerald-500":"bg-amber-500/10 text-amber-500 border-amber-500/20"}`,children:j?"[ PFLICHT ]":"[ DEAKTIVIERT ]"})]}),i.jsx("p",{className:"text-[11px] text-muted font-sans",children:"Bei Pflicht muss die E-Mail vor der Anmeldung verifiziert werden. Bei Deaktivierung ist die Anmeldung direkt möglich."})]}),i.jsxs("div",{className:"p-4 rounded-sm bg-subtle border border-grid space-y-2",children:[i.jsxs("div",{className:"flex items-center justify-between",children:[i.jsx("span",{className:"font-bold text-main",children:"Domain-Einschränkung"}),i.jsx("button",{onClick:()=>In("restriction",!m),className:`px-3 py-1 rounded-sm text-xs font-bold transition border ${m?"bg-emerald-600 text-white border-emerald-500":"bg-surface text-muted border-grid"}`,children:m?"[ AKTIV ]":"[ INAKTIV ]"})]}),i.jsx("p",{className:"text-[11px] text-muted font-sans",children:"Erlaubt nur Registrierungen von festgelegten E-Mail-Domains (z. B. `@verein.de`)."})]}),i.jsxs("div",{className:"p-4 rounded-sm bg-subtle border border-grid space-y-2",children:[i.jsxs("div",{className:"flex items-center justify-between",children:[i.jsx("span",{className:"font-bold text-main",children:"Admin-Freischaltpflicht"}),i.jsx("button",{onClick:()=>In("approval",!C),className:`px-3 py-1 rounded-sm text-xs font-bold transition border ${C?"bg-emerald-600 text-white border-emerald-500":"bg-surface text-muted border-grid"}`,children:C?"[ AKTIV ]":"[ INAKTIV ]"})]}),i.jsx("p",{className:"text-[11px] text-muted font-sans",children:"Erfordert die manuelle Freischaltung durch einen Admin vor der ersten Anmeldung."})]})]}),m&&i.jsxs("div",{className:"space-y-3 pt-3 border-t border-grid",children:[i.jsx("h4",{className:"font-serif text-sm font-bold uppercase text-main",children:"Erlaubte E-Mail-Domains"}),i.jsxs("form",{onSubmit:ku,className:"flex gap-2",children:[i.jsx("input",{type:"text",placeholder:"z. B. verein.de oder @beispiel.org",value:Y,onChange:k=>ae(k.target.value),className:"flex-1 px-3 py-1.5 rounded-sm input-field text-xs font-mono"}),i.jsxs("button",{type:"submit",className:"px-4 py-1.5 rounded-sm bg-indigo-600 hover:bg-indigo-500 text-white font-bold text-xs",children:[i.jsx(Yn,{className:"w-3.5 h-3.5 inline"})," Domain Hinzufügen"]})]}),i.jsx("div",{className:"flex flex-wrap gap-2",children:q.map(k=>i.jsxs("span",{className:"px-2.5 py-1 rounded-sm bg-subtle border border-grid text-xs flex items-center gap-2",children:[i.jsx("strong",{className:"text-main",children:k.domain}),i.jsx("button",{onClick:()=>_a(k.id),className:"text-muted hover:text-red-400",children:i.jsx(cn,{className:"w-3.5 h-3.5"})})]},k.id))})]})]})]}),l==="events"&&i.jsx("div",{className:"space-y-6 animate-in fade-in duration-150 font-mono",children:i.jsxs("div",{className:"hallmark-panel rounded-sm p-5 border border-grid space-y-4",children:[i.jsxs("h3",{className:"font-serif text-lg font-bold uppercase text-main border-b border-grid pb-2",children:["Alle Veranstaltungen (",le.length,")"]}),i.jsx("div",{className:"space-y-3",children:le.map(k=>i.jsxs("div",{className:"p-4 rounded-sm bg-subtle border border-grid flex items-center justify-between text-xs",children:[i.jsxs("div",{children:[i.jsx("h4",{className:"font-serif font-bold text-main text-sm",children:k.title}),i.jsxs("p",{className:"text-muted text-[11px]",children:[new Date(k.start_date).toLocaleDateString("de-DE")," — ",k.location||"Kein Ort"," | Erstellt von: ",k.created_by_name||"Admin"]})]}),i.jsxs("div",{className:"flex items-center gap-2",children:[i.jsx("span",{className:`px-2 py-0.5 rounded-sm text-[10px] font-bold border ${k.is_active!==!1?"bg-emerald-500/10 text-emerald-400 border-emerald-500/20":"bg-amber-500/10 text-amber-400 border-amber-500/20"}`,children:k.is_active!==!1?"AKTIV":"DEAKTIVIERT"}),i.jsxs("button",{onClick:async()=>{if(window.confirm(`Möchtest du "${k.title}" und alle Schichten wirklich unwiderruflich löschen?`))try{await J(`/events/${k.id}/`,{method:"DELETE"}),n()}catch(Z){alert(Z.message)}},className:"px-2.5 py-1 rounded-sm text-[10px] font-bold bg-red-500/10 hover:bg-red-500/20 text-red-400 border border-red-500/20 transition flex items-center gap-1",title:"Veranstaltung löschen",children:[i.jsx(cn,{className:"w-3 h-3"})," LÖSCHEN"]})]})]},k.id))})]})}),l==="templates"&&i.jsxs("div",{className:"space-y-6 animate-in fade-in duration-150 font-mono",children:[i.jsxs("div",{className:"hallmark-panel rounded-sm p-5 border border-grid space-y-4",children:[i.jsx("h3",{className:"font-serif text-lg font-bold uppercase text-main border-b border-grid pb-2",children:"Erforderliche Qualifikationen (Skills)"}),i.jsxs("form",{onSubmit:Sa,className:"grid grid-cols-1 sm:grid-cols-3 gap-3",children:[i.jsx("input",{type:"text",placeholder:"Skill Name (z. B. Bar-Erfahrung)",required:!0,value:V,onChange:k=>M(k.target.value),className:"px-3 py-1.5 rounded-sm input-field text-xs font-mono"}),i.jsx("input",{type:"text",placeholder:"Beschreibung (optional)",value:U,onChange:k=>x(k.target.value),className:"px-3 py-1.5 rounded-sm input-field text-xs font-mono"}),i.jsxs("div",{className:"flex gap-2",children:[i.jsx("input",{type:"color",value:$,onChange:k=>I(k.target.value),className:"w-8 h-8 rounded-sm border-0 cursor-pointer bg-subtle p-0.5"}),i.jsxs("button",{type:"submit",className:"flex-1 px-3 py-1.5 rounded-sm bg-emerald-600 hover:bg-emerald-500 text-white font-bold text-xs",children:[i.jsx(Yn,{className:"w-3.5 h-3.5 inline"})," Anlegen"]})]})]}),i.jsx("div",{className:"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-3 pt-2",children:r.map(k=>i.jsxs("div",{className:"p-3 rounded-sm bg-subtle border border-grid flex items-center justify-between text-xs",children:[i.jsxs("div",{children:[i.jsx("span",{style:{color:k.color},className:"font-bold",children:k.name}),k.description&&i.jsx("p",{className:"text-[11px] text-muted",children:k.description})]}),i.jsx("button",{onClick:()=>_u(k.id),className:"text-muted hover:text-red-400",children:i.jsx(cn,{className:"w-3.5 h-3.5"})})]},k.id))})]}),i.jsxs("div",{className:"hallmark-panel rounded-sm p-5 border border-grid space-y-4",children:[i.jsxs("h3",{className:"font-serif text-lg font-bold uppercase text-main border-b border-grid pb-2",children:["Gespeicherte Event-Vorlagen (",ue.length,")"]}),i.jsx("div",{className:"space-y-2",children:ue.map(k=>i.jsxs("div",{className:"p-3 rounded-sm bg-subtle border border-grid flex items-center justify-between text-xs",children:[i.jsxs("div",{children:[i.jsx("div",{className:"font-bold text-main",children:k.name}),i.jsx("div",{className:"text-[11px] text-muted",children:k.description||"Keine Beschreibung"})]}),i.jsx("button",{onClick:()=>tn(k.id),className:"text-muted hover:text-red-400",children:i.jsx(cn,{className:"w-4 h-4"})})]},k.id))})]})]}),l==="branding"&&i.jsx("div",{className:"space-y-6 animate-in fade-in duration-150 font-mono",children:i.jsxs("form",{onSubmit:Na,className:"hallmark-panel rounded-sm p-6 border border-grid space-y-6",children:[i.jsxs("h3",{className:"font-serif text-lg font-bold uppercase text-main border-b border-grid pb-2 flex items-center gap-2",children:[i.jsx(tp,{className:"w-5 h-5 text-indigo-400"})," Portal Branding & Erscheinungsbild"]}),i.jsxs("div",{className:"grid grid-cols-1 sm:grid-cols-2 gap-4 text-xs",children:[i.jsxs("div",{children:[i.jsx("label",{className:"block text-muted mb-1",children:"Anwendungs-Name"}),i.jsx("input",{type:"text",required:!0,value:K,onChange:k=>W(k.target.value),className:"w-full px-3 py-1.5 rounded-sm input-field font-bold"})]}),i.jsxs("div",{children:[i.jsx("label",{className:"block text-muted mb-1",children:"Primärfarbe (Brand Accent)"}),i.jsxs("div",{className:"flex gap-2",children:[i.jsx("input",{type:"color",value:gt,onChange:k=>$n(k.target.value),className:"w-9 h-9 rounded-sm border-0 cursor-pointer bg-subtle p-0.5"}),i.jsx("input",{type:"text",value:gt,onChange:k=>$n(k.target.value),className:"flex-1 px-3 py-1.5 rounded-sm input-field font-mono"})]})]}),i.jsxs("div",{className:"sm:col-span-2",children:[i.jsx("label",{className:"block text-muted mb-1",children:"Logo Bild-URL (optional)"}),i.jsx("input",{type:"text",placeholder:"https://beispiel.de/logo.png",value:ee,onChange:k=>Ae(k.target.value),className:"w-full px-3 py-1.5 rounded-sm input-field"})]}),i.jsxs("div",{className:"sm:col-span-2",children:[i.jsx("label",{className:"block text-muted mb-1",children:"Ankündigung (Banner-Text)"}),i.jsx("textarea",{rows:2,placeholder:"z. B. Willkommen beim Sommerfest Schichtplaner!",value:F,onChange:k=>be(k.target.value),className:"w-full px-3 py-1.5 rounded-sm input-field"})]})]}),i.jsx("h4",{className:"font-serif text-base font-bold uppercase text-main pt-4 border-t border-grid",children:"Startseiten Sidebar Boxen"}),i.jsxs("div",{className:"p-4 rounded-sm bg-subtle border border-grid space-y-3",children:[i.jsxs("div",{className:"flex items-center justify-between border-b border-grid pb-2",children:[i.jsx("span",{className:"font-bold text-xs uppercase text-main",children:"📌 Verein & Infos Box"}),i.jsx("button",{type:"button",onClick:()=>rr(!_t),className:`px-3 py-1 rounded-sm text-xs font-bold transition border ${_t?"bg-emerald-600 text-white border-emerald-500":"bg-surface text-muted border-grid"}`,children:_t?"[ AN ]":"[ AUS ]"})]}),_t&&i.jsxs("div",{className:"space-y-3 text-xs",children:[i.jsxs("div",{children:[i.jsx("label",{className:"block text-muted mb-1",children:"Titel"}),i.jsx("input",{type:"text",value:Dn,onChange:k=>yn(k.target.value),className:"w-full px-3 py-1.5 rounded-sm input-field"})]}),i.jsxs("div",{children:[i.jsx("label",{className:"block text-muted mb-1",children:"Inhalt"}),i.jsx("textarea",{rows:3,value:Nr,onChange:k=>nt(k.target.value),className:"w-full px-3 py-1.5 rounded-sm input-field"})]})]})]}),i.jsxs("div",{className:"p-4 rounded-sm bg-subtle border border-grid space-y-3",children:[i.jsxs("div",{className:"flex items-center justify-between border-b border-grid pb-2",children:[i.jsx("span",{className:"font-bold text-xs uppercase text-main",children:"❤️ Unterstützen Box"}),i.jsx("button",{type:"button",onClick:()=>Ds(!rt),className:`px-3 py-1 rounded-sm text-xs font-bold transition border ${rt?"bg-emerald-600 text-white border-emerald-500":"bg-surface text-muted border-grid"}`,children:rt?"[ AN ]":"[ AUS ]"})]}),rt&&i.jsxs("div",{className:"space-y-3 text-xs",children:[i.jsxs("div",{children:[i.jsx("label",{className:"block text-muted mb-1",children:"Titel"}),i.jsx("input",{type:"text",value:zs,onChange:k=>z(k.target.value),className:"w-full px-3 py-1.5 rounded-sm input-field"})]}),i.jsxs("div",{children:[i.jsx("label",{className:"block text-muted mb-1",children:"Inhalt"}),i.jsx("textarea",{rows:3,value:G,onChange:k=>Ee(k.target.value),className:"w-full px-3 py-1.5 rounded-sm input-field"})]})]})]}),i.jsx("div",{className:"pt-3 flex justify-end border-t border-grid",children:i.jsx("button",{type:"submit",disabled:en,style:{backgroundColor:"var(--brand-primary)"},className:"px-6 py-2.5 rounded-sm text-xs font-mono font-bold text-white transition hover:brightness-110 shadow-sm",children:en?"Speichern...":"Einstellungen speichern"})})]})}),l==="smtp"&&i.jsx("div",{className:"space-y-6 animate-in fade-in duration-150 font-mono",children:i.jsxs("form",{onSubmit:Su,className:"hallmark-panel rounded-sm p-6 border border-grid space-y-6",children:[i.jsxs("div",{className:"flex items-center justify-between border-b border-grid pb-3",children:[i.jsxs("h3",{className:"font-serif text-lg font-bold uppercase text-main flex items-center gap-2",children:[i.jsx(Xc,{className:"w-5 h-5 text-indigo-400"})," SMTP Server & E-Mail-Versand"]}),i.jsxs("div",{className:"flex items-center gap-2",children:[i.jsx("span",{className:"text-xs text-muted font-bold",children:"SMTP-Versand:"}),i.jsx("button",{type:"button",onClick:()=>fa(!zn),className:`px-3 py-1 rounded-sm text-xs font-bold transition border ${zn?"bg-emerald-600 text-white border-emerald-500 shadow-sm":"bg-subtle text-muted border-grid hover:text-main"}`,children:zn?"[ AKTIV ]":"[ INAKTIV (Dev Mode) ]"})]})]}),!zn&&i.jsxs("div",{className:"p-3.5 rounded-sm bg-amber-500/10 border border-amber-500/20 text-amber-500 text-xs flex items-center gap-2",children:[i.jsx(Cl,{className:"w-4 h-4 shrink-0"}),i.jsx("span",{children:"Hinweis: Im inaktiven Modus werden Bestätigungs-Links in der Entwickler-Konsole / Logs ausgegeben."})]}),i.jsxs("div",{className:"grid grid-cols-1 sm:grid-cols-2 gap-4 text-xs",children:[i.jsxs("div",{className:"sm:col-span-2",children:[i.jsx("label",{className:"block text-main mb-1 font-bold",children:"SMTP Host / Server Adresse"}),i.jsx("input",{type:"text",placeholder:"z. B. smtp.domain.de oder mail.gmx.net",value:ls,onChange:k=>ha(k.target.value),className:"w-full px-3.5 py-2 rounded-sm input-field font-mono"})]}),i.jsxs("div",{children:[i.jsx("label",{className:"block text-main mb-1 font-bold",children:"SMTP Port"}),i.jsx("input",{type:"number",placeholder:"587 oder 465",value:pa,onChange:k=>ma(k.target.value),className:"w-full px-3.5 py-2 rounded-sm input-field font-mono"})]}),i.jsxs("div",{children:[i.jsx("label",{className:"block text-main mb-1 font-bold",children:"Absender E-Mail-Adresse (From)"}),i.jsx("input",{type:"email",placeholder:"noreply@verein.de",value:ya,onChange:k=>wa(k.target.value),className:"w-full px-3.5 py-2 rounded-sm input-field font-mono"})]}),i.jsxs("div",{children:[i.jsx("label",{className:"block text-main mb-1 font-bold",children:"SMTP Benutzername / Login E-Mail"}),i.jsx("input",{type:"text",placeholder:"z. B. noreply@verein.de",value:ga,onChange:k=>va(k.target.value),className:"w-full px-3.5 py-2 rounded-sm input-field font-mono"})]}),i.jsxs("div",{children:[i.jsx("label",{className:"block text-main mb-1 font-bold",children:"SMTP Passwort"}),i.jsxs("div",{className:"relative",children:[i.jsx("input",{type:jr?"text":"password",placeholder:"••••••••",value:Dl,onChange:k=>zl(k.target.value),className:"w-full pl-3.5 pr-10 py-2 rounded-sm input-field font-mono"}),i.jsx("button",{type:"button",onClick:()=>bu(!jr),className:"absolute right-3 top-2.5 text-muted hover:text-main",children:jr?i.jsx(Vg,{className:"w-4 h-4"}):i.jsx(sy,{className:"w-4 h-4"})})]})]}),i.jsxs("div",{className:"sm:col-span-2 flex items-center gap-6 pt-2",children:[i.jsxs("label",{className:"flex items-center gap-2 cursor-pointer text-main font-bold",children:[i.jsx("input",{type:"checkbox",checked:Il,onChange:k=>{Ol(k.target.checked),k.target.checked&&Ul(!1)},className:"rounded-sm"}),i.jsx("span",{children:"STARTTLS verwenden (Empfohlen für Port 587)"})]}),i.jsxs("label",{className:"flex items-center gap-2 cursor-pointer text-main font-bold",children:[i.jsx("input",{type:"checkbox",checked:xa,onChange:k=>{Ul(k.target.checked),k.target.checked&&Ol(!1)},className:"rounded-sm"}),i.jsx("span",{children:"SSL/TLS verwenden (Empfohlen für Port 465)"})]})]})]}),i.jsxs("div",{className:"pt-4 border-t border-grid flex flex-wrap items-center justify-between gap-3",children:[i.jsxs("div",{className:"flex items-center gap-2 flex-1 min-w-[260px]",children:[i.jsx("input",{type:"email",placeholder:"Empfänger für Test-E-Mail...",value:Fl,onChange:k=>wu(k.target.value),className:"px-3 py-1.5 rounded-sm input-field text-xs flex-1 font-mono"}),i.jsxs("button",{type:"button",disabled:Er,onClick:Kl,className:"px-3.5 py-1.5 rounded-sm text-xs font-mono font-bold bg-indigo-500/10 text-indigo-400 border border-indigo-500/20 hover:bg-indigo-500/20 transition flex items-center gap-1.5 shrink-0",children:[i.jsx(dy,{className:"w-3.5 h-3.5"}),Er?"Sende...":"Test-Mail Senden"]})]}),i.jsxs("button",{type:"submit",disabled:Vl,style:{backgroundColor:"var(--brand-primary)"},className:"px-6 py-2.5 rounded-sm text-xs font-mono font-bold text-white transition hover:brightness-110 shadow-sm flex items-center gap-2",children:[i.jsx(Zn,{className:"w-4 h-4"}),Vl?"Speichern...":"SMTP-Einstellungen Speichern"]})]})]})})]})}function Gb({eventToEdit:e,skills:t,user:n,onBack:r,onSubmit:s,onDeleteEvent:l}){var U;const[a,o]=A.useState((e==null?void 0:e.title)||""),[u,c]=A.useState((e==null?void 0:e.description)||""),[f,v]=A.useState((e==null?void 0:e.location)||""),[d,w]=A.useState((e==null?void 0:e.start_date)||new Date().toISOString().split("T")[0]),[y,S]=A.useState((e==null?void 0:e.end_date)||new Date().toISOString().split("T")[0]),[R,g]=A.useState(e!=null&&e.co_managers?e.co_managers.map(x=>x.id):[]),[p,m]=A.useState([]),[N,C]=A.useState([]),[E,j]=A.useState(!1),[L,q]=A.useState("");A.useEffect(()=>{if(P(),e&&e.task_areas&&e.task_areas.length>0){const x=e.task_areas.map($=>({id:$.id,name:$.name,description:$.description||"",shifts:($.shifts||[]).map(I=>({id:I.id,title:I.title,date:I.date||(e?e.start_date:new Date().toISOString().split("T")[0]),start_time:I.start_time,end_time:I.end_time,max_participants:I.max_participants||1,required_skill_ids:I.required_skills?I.required_skills.map(K=>K.id):[]}))}));C(x)}else e||C([{name:"Tresendienst",description:"Getränke- und Barverkauf",shifts:[{title:"Schicht 1",start_time:"18:00",end_time:"22:00",max_participants:2,required_skill_ids:[]}]},{name:"Essen kochen",description:"Zubereitung von Speisen",shifts:[{title:"Frühschicht",start_time:"15:00",end_time:"19:00",max_participants:3,required_skill_ids:[]}]},{name:"Aufbau & Aufräumen",description:"Tische, Stühle & Technik",shifts:[{title:"Aufbau",start_time:"12:00",end_time:"15:00",max_participants:4,required_skill_ids:[]}]}])},[e]);const P=async()=>{try{const x=await J("/users/all/");m(x.results||x)}catch{}},Y=()=>{C([...N,{name:"",description:"",shifts:[{title:"Schicht 1",start_time:"10:00",end_time:"14:00",max_participants:1,required_skill_ids:[]}]}])},ae=x=>{C(N.filter(($,I)=>I!==x))},le=(x,$,I)=>{const K=[...N];K[x][$]=I,C(K)},ke=x=>{const $=[...N];$[x].shifts.push({title:`Schicht ${$[x].shifts.length+1}`,date:d,start_time:"14:00",end_time:"18:00",max_participants:1,required_skill_ids:[]}),C($)},ue=(x,$)=>{const I=[...N];I[x].shifts=I[x].shifts.filter((K,W)=>W!==$),C(I)},Te=(x,$,I,K)=>{const W=[...N];W[x].shifts[$][I]=K,C(W)},V=(x,$,I)=>{const K=[...N],W=K[x].shifts[$].required_skill_ids||[];W.includes(I)?K[x].shifts[$].required_skill_ids=W.filter(ee=>ee!==I):K[x].shifts[$].required_skill_ids=[...W,I],C(K)},M=async x=>{if(x.preventDefault(),q(""),!a.trim()){q("Bitte gib einen Veranstaltungstitel an.");return}j(!0);try{await s({id:e==null?void 0:e.id,title:a,description:u,location:f,start_date:d,end_date:y,co_manager_ids:R,task_areas:N})}catch($){q($.message||"Speichern der Veranstaltung fehlgeschlagen.")}finally{j(!1)}};return i.jsxs("div",{className:"space-y-6 max-w-4xl mx-auto animate-in fade-in duration-200 font-sans",children:[i.jsxs("div",{className:"flex items-center justify-between font-mono text-xs",children:[i.jsxs("button",{onClick:r,className:"px-3.5 py-1.5 rounded-sm bg-subtle hover:bg-surface-hover text-main border border-grid transition flex items-center gap-2 font-bold",children:[i.jsx(Ug,{className:"w-4 h-4"})," [ ZURÜCK ZUR ÜBERSICHT ]"]}),i.jsxs("span",{className:"text-muted border border-grid px-2.5 py-0.5 rounded-sm",children:["MODE: ",e?"EVENT EDIT":"NEW EVENT"]})]}),i.jsx("div",{className:"hallmark-panel rounded-sm p-6 sm:p-8 border border-grid space-y-2",children:i.jsxs("div",{className:"flex items-center gap-3",children:[i.jsx("div",{className:"w-10 h-10 rounded-sm bg-blue-500/10 text-blue-500 border border-blue-500/20 flex items-center justify-center font-bold",children:e?i.jsx(Bi,{className:"w-5 h-5"}):i.jsx(ra,{className:"w-5 h-5"})}),i.jsxs("div",{children:[i.jsx("h2",{className:"font-serif text-3xl font-bold uppercase tracking-tight text-main",children:e?"Veranstaltung & Schichten Bearbeiten":"Neue Veranstaltung Erstellen"}),i.jsx("p",{className:"text-xs text-muted font-mono mt-0.5",children:"Konfiguriere Stammdaten, Co-Verwalter, Aufgabenfelder, Schichtzeiten & Qualifikationen"})]})]})}),L&&i.jsxs("div",{className:"p-4 rounded-sm bg-red-500/10 border border-red-500/20 text-red-500 text-xs font-mono flex items-center gap-2",children:[i.jsx(Cl,{className:"w-4 h-4 shrink-0"}),i.jsx("span",{children:L})]}),i.jsxs("form",{onSubmit:M,className:"space-y-6",children:[i.jsxs("div",{className:"hallmark-panel rounded-sm p-6 border border-grid space-y-4 font-mono text-xs",children:[i.jsx("h3",{className:"font-serif text-lg font-bold uppercase text-main border-b border-grid pb-2",children:"1. Stammdaten & Verwalter der Veranstaltung"}),i.jsxs("div",{className:"grid grid-cols-1 sm:grid-cols-2 gap-4",children:[i.jsxs("div",{className:"sm:col-span-2",children:[i.jsx("label",{className:"block text-main mb-1 font-bold",children:"Titel der Veranstaltung"}),i.jsx("input",{type:"text",required:!0,value:a,onChange:x=>o(x.target.value),placeholder:"z. B. Sommerfest 2026",className:"w-full px-3.5 py-2 rounded-sm input-field text-sm"})]}),i.jsxs("div",{children:[i.jsx("label",{className:"block text-main mb-1 font-bold",children:"Startdatum"}),i.jsx("input",{type:"date",required:!0,value:d,onChange:x=>w(x.target.value),className:"w-full px-3.5 py-2 rounded-sm input-field text-sm"})]}),i.jsxs("div",{children:[i.jsx("label",{className:"block text-main mb-1 font-bold",children:"Enddatum"}),i.jsx("input",{type:"date",required:!0,value:y,onChange:x=>S(x.target.value),className:"w-full px-3.5 py-2 rounded-sm input-field text-sm"})]}),i.jsxs("div",{className:"sm:col-span-2",children:[i.jsx("label",{className:"block text-main mb-1 font-bold",children:"Ort (optional)"}),i.jsx("input",{type:"text",value:f,onChange:x=>v(x.target.value),placeholder:"z. B. Vereinsheim, Großer Saal",className:"w-full px-3.5 py-2 rounded-sm input-field text-xs"})]}),i.jsxs("div",{className:"sm:col-span-2",children:[i.jsx("label",{className:"block text-main mb-1 font-bold",children:"Beschreibung (optional)"}),i.jsx("textarea",{rows:2,value:u,onChange:x=>c(x.target.value),placeholder:"Details zur Veranstaltung...",className:"w-full px-3.5 py-2 rounded-sm input-field text-xs font-sans"})]}),p.length>0&&i.jsxs("div",{className:"sm:col-span-2 pt-3 border-t border-grid space-y-2",children:[i.jsxs("label",{className:"block text-main font-bold flex items-center gap-1.5",children:[i.jsx(Wg,{className:"w-4 h-4 text-indigo-400"})," Co-Verwalter / Mit-Organisatoren (optional)"]}),i.jsx("p",{className:"text-[11px] text-muted font-sans",children:"Wähle registrierte Benutzer aus, die dieses Event ebenfalls verwalten, bearbeiten und Gäste eintragen dürfen:"}),i.jsx("div",{className:"flex flex-wrap gap-2 pt-1",children:p.map(x=>{const $=R.includes(x.id);return i.jsxs("button",{type:"button",onClick:()=>{g($?R.filter(I=>I!==x.id):[...R,x.id])},className:`px-3 py-1.5 rounded-sm text-xs font-mono font-bold transition flex items-center gap-1.5 border ${$?"bg-indigo-500/20 text-indigo-300 border-indigo-500/50 shadow-sm":"bg-subtle text-muted border-grid hover:text-main"}`,children:[i.jsx(xf,{className:`w-3.5 h-3.5 ${$?"text-indigo-400":"opacity-40"}`}),i.jsx("span",{children:x.display_name||x.username})]},x.id)})})]})]})]}),i.jsxs("div",{className:"hallmark-panel rounded-sm p-6 border border-grid space-y-4 font-mono text-xs",children:[i.jsxs("div",{className:"flex items-center justify-between border-b border-grid pb-2",children:[i.jsxs("h3",{className:"font-serif text-lg font-bold uppercase text-main flex items-center gap-2",children:[i.jsx(ou,{className:"w-4 h-4 text-blue-500"})," 2. Aufgabenfelder & Schichten"]}),i.jsxs("button",{type:"button",onClick:Y,className:"px-3.5 py-1.5 rounded-sm text-xs font-mono font-bold bg-blue-500/10 text-blue-500 border border-blue-500/20 hover:bg-blue-500/20 transition flex items-center gap-1",children:[i.jsx(Yn,{className:"w-3.5 h-3.5"})," BEREICH HINZUFÜGEN"]})]}),N.map((x,$)=>i.jsxs("div",{className:"p-4 rounded-sm bg-subtle border border-grid space-y-3",children:[i.jsxs("div",{className:"flex items-center justify-between gap-3",children:[i.jsx("input",{type:"text",required:!0,placeholder:"Name des Aufgabenfeldes (z. B. Tresendienst)",value:x.name,onChange:I=>le($,"name",I.target.value),className:"flex-1 px-3 py-1.5 rounded-sm input-field text-xs font-bold"}),i.jsx("button",{type:"button",onClick:()=>ae($),className:"p-1.5 text-muted hover:text-red-400 transition",title:"Bereich entfernen",children:i.jsx(cn,{className:"w-4 h-4"})})]}),i.jsxs("div",{className:"pl-3 border-l-2 border-grid space-y-3",children:[i.jsxs("div",{className:"flex items-center justify-between text-xs text-muted font-bold",children:[i.jsx("span",{children:"Schichten & Zeitfenster"}),i.jsxs("button",{type:"button",onClick:()=>ke($),className:"text-blue-500 hover:underline flex items-center gap-1",children:[i.jsx(Yn,{className:"w-3 h-3"})," Schicht hinzufügen"]})]}),x.shifts.map((I,K)=>i.jsxs("div",{className:"p-3 rounded-sm bg-surface border border-grid space-y-2",children:[i.jsxs("div",{className:"grid grid-cols-1 sm:grid-cols-12 gap-2 items-center text-xs",children:[i.jsx("input",{type:"text",placeholder:"Titel",value:I.title,onChange:W=>Te($,K,"title",W.target.value),className:"sm:col-span-3 px-2.5 py-1 rounded-sm input-field text-xs"}),i.jsx("input",{type:"date",title:"Schichtdatum",min:d,max:y,value:I.date||d,onChange:W=>Te($,K,"date",W.target.value),className:"sm:col-span-3 px-2 py-1 rounded-sm input-field text-xs font-mono text-indigo-400 font-bold"}),i.jsx("input",{type:"text",placeholder:"Start (14:00)",value:I.start_time,onChange:W=>Te($,K,"start_time",W.target.value),className:"sm:col-span-2 px-2.5 py-1 rounded-sm input-field text-xs"}),i.jsx("input",{type:"text",placeholder:"Ende (18:00)",value:I.end_time,onChange:W=>Te($,K,"end_time",W.target.value),className:"sm:col-span-2 px-2.5 py-1 rounded-sm input-field text-xs"}),i.jsx("div",{className:"sm:col-span-1 flex items-center gap-1",children:i.jsx("input",{type:"number",min:"1",title:"Max. Plätze",value:I.max_participants,onChange:W=>Te($,K,"max_participants",parseInt(W.target.value)||1),className:"w-full px-1.5 py-1 rounded-sm input-field text-xs font-bold text-center"})}),i.jsx("button",{type:"button",onClick:()=>ue($,K),className:"sm:col-span-1 p-1 text-muted hover:text-red-400 text-center",title:"Schicht löschen",children:i.jsx(cn,{className:"w-3.5 h-3.5 mx-auto"})})]}),t&&t.length>0&&i.jsxs("div",{className:"pt-2 border-t border-grid flex flex-wrap items-center gap-1.5",children:[i.jsx("span",{className:"text-[10px] text-muted font-bold mr-1",children:"Erforderlich:"}),t.map(W=>{const ee=(I.required_skill_ids||[]).includes(W.id);return i.jsxs("button",{type:"button",onClick:()=>V($,K,W.id),style:{backgroundColor:ee?`${W.color}25`:"transparent",borderColor:ee?W.color:"var(--color-border-grid)",color:ee?W.color:"var(--color-text-muted)"},className:"px-2 py-0.5 rounded-sm text-[10px] border font-bold transition flex items-center gap-1",children:[i.jsx("span",{children:W.name}),ee&&i.jsx(Zn,{className:"w-3 h-3"})]},W.id)})]})]},K))]})]},$))]}),i.jsxs("div",{className:"flex items-center justify-between gap-3 pt-2 font-mono",children:[e&&l&&n&&(n.is_admin_user||n.is_staff||n.is_superuser||e.created_by===n.id||((U=e.created_by)==null?void 0:U.id)===n.id)?i.jsxs("button",{type:"button",onClick:()=>l(e),className:"px-4 py-2.5 rounded-sm text-xs font-bold bg-red-500/10 hover:bg-red-500/20 text-red-400 border border-red-500/20 transition flex items-center gap-1.5",children:[i.jsx(cn,{className:"w-4 h-4"})," VERANSTALTUNG LÖSCHEN"]}):i.jsx("div",{}),i.jsxs("div",{className:"flex items-center gap-3",children:[i.jsx("button",{type:"button",onClick:r,className:"px-5 py-2.5 rounded-sm text-xs font-semibold text-muted hover:bg-surface-hover transition border border-grid",children:"Abbrechen"}),i.jsxs("button",{type:"submit",disabled:E,style:{backgroundColor:"var(--brand-primary)"},className:"px-6 py-2.5 rounded-sm text-xs font-bold text-white transition hover:brightness-110 shadow-sm flex items-center gap-2",children:[i.jsx(Zn,{className:"w-4 h-4"}),E?"Speichern...":"Veranstaltung Speichern"]})]})]})]})]})}function qb({onBack:e,onInstantiateTemplate:t,user:n,skills:r}){const[s,l]=A.useState([]),[a,o]=A.useState(!0),[u,c]=A.useState(""),[f,v]=A.useState(null),[d,w]=A.useState(""),[y,S]=A.useState(new Date().toISOString().split("T")[0]),[R,g]=A.useState(new Date().toISOString().split("T")[0]),[p,m]=A.useState(""),[N,C]=A.useState(!1),[E,j]=A.useState(!1),[L,q]=A.useState(""),[P,Y]=A.useState(""),[ae,le]=A.useState([{name:"Tresendienst",description:"Getränkeausschank und Bar",shifts:[{title:"Frühschicht",start_time:"18:00",end_time:"22:00",max_participants:2,required_skill_ids:[]},{title:"Spätschicht",start_time:"22:00",end_time:"02:00",max_participants:3,required_skill_ids:[]}]}]);A.useEffect(()=>{ke()},[]);const ke=async()=>{o(!0);try{const x=await J("/templates/");l(x.results||x)}catch(x){c(x.message||"Laden der Vorlagen fehlgeschlagen.")}finally{o(!1)}},ue=x=>{v(x),w(x.name)},Te=async x=>{if(x.preventDefault(),!!f){C(!0);try{await t(f.id,{title:d,start_date:y,end_date:R,location:p})}catch($){c($.message||"Erstellen der Veranstaltung aus Vorlage fehlgeschlagen.")}finally{C(!1)}}},V=async x=>{if(x.preventDefault(),!L.trim()){c("Bitte gib einen Vorlagen-Namen an.");return}C(!0);try{const $={name:L,description:P,template_data:{task_areas:ae.map(I=>({name:I.name,description:I.description,shifts:(I.shifts||[]).map(K=>({title:K.title,start_time:K.start_time,end_time:K.end_time,max_participants:K.max_participants,required_skill_ids:K.required_skill_ids}))}))}};await J("/templates/",{method:"POST",body:JSON.stringify($)}),j(!1),q(""),Y(""),ke()}catch($){c($.message||"Erstellen der Vorlage fehlgeschlagen.")}finally{C(!1)}},M=()=>{le([...ae,{name:"Neuer Bereich",description:"",shifts:[{title:"Schicht 1",start_time:"14:00",end_time:"18:00",max_participants:2,required_skill_ids:[]}]}])},U=x=>{const $=[...ae];$[x].shifts.push({title:`Schicht ${$[x].shifts.length+1}`,start_time:"18:00",end_time:"22:00",max_participants:2,required_skill_ids:[]}),le($)};return i.jsxs("div",{className:"space-y-6 max-w-4xl mx-auto animate-in fade-in duration-200 font-sans",children:[i.jsxs("div",{className:"flex items-center justify-between font-mono text-xs",children:[i.jsxs("button",{onClick:e,className:"px-3.5 py-1.5 rounded-sm bg-subtle hover:bg-surface-hover text-main border border-grid transition flex items-center gap-2 font-bold",children:[i.jsx(Ug,{className:"w-4 h-4"})," [ ZURÜCK ZUR ÜBERSICHT ]"]}),i.jsxs("span",{className:"text-muted border border-grid px-2.5 py-0.5 rounded-sm uppercase",children:["SYSTEM VORLAGEN (",s.length,")"]})]}),i.jsx("div",{className:"hallmark-panel rounded-sm p-6 sm:p-8 border border-grid space-y-4",children:i.jsxs("div",{className:"flex items-center justify-between gap-3",children:[i.jsxs("div",{className:"flex items-center gap-3",children:[i.jsx("div",{className:"w-10 h-10 rounded-sm bg-indigo-500/10 text-indigo-400 border border-indigo-500/20 flex items-center justify-center font-bold",children:i.jsx(ou,{className:"w-5 h-5"})}),i.jsxs("div",{children:[i.jsx("h2",{className:"font-serif text-3xl font-bold uppercase tracking-tight text-main",children:"Veranstaltungs-Vorlagen Zentrale"}),i.jsx("p",{className:"text-xs text-muted font-mono mt-0.5",children:"Erstelle neue Veranstaltungen mit voreingestellten Schichten und Aufgabenbereichen"})]})]}),n&&i.jsxs("button",{onClick:()=>j(!E),className:"px-3.5 py-2 rounded-sm text-xs font-mono font-bold bg-indigo-500/10 text-indigo-400 border border-indigo-500/20 hover:bg-indigo-500/20 transition flex items-center gap-1.5 shrink-0",children:[i.jsx(Yn,{className:"w-4 h-4"}),E?"Schließen":"Neue Vorlage Erstellen"]})]})}),u&&i.jsxs("div",{className:"p-4 rounded-sm bg-red-500/10 border border-red-500/20 text-red-500 text-xs font-mono flex items-center gap-2",children:[i.jsx(Cl,{className:"w-4 h-4 shrink-0"}),i.jsx("span",{children:u})]}),E&&i.jsxs("form",{onSubmit:V,className:"hallmark-panel rounded-sm p-6 border border-grid space-y-4 font-mono text-xs animate-in fade-in duration-200",children:[i.jsxs("h3",{className:"font-serif text-lg font-bold uppercase text-indigo-400 border-b border-grid pb-2 flex items-center justify-between",children:[i.jsx("span",{children:"Neue Vorlage mit voreingestellten Schichten anlegen"}),i.jsxs("button",{type:"button",onClick:M,className:"text-xs font-mono font-bold bg-indigo-500/20 text-indigo-300 px-3 py-1 rounded-sm border border-indigo-500/30 flex items-center gap-1",children:[i.jsx(Yn,{className:"w-3.5 h-3.5"})," Bereich Hinzufügen"]})]}),i.jsxs("div",{className:"grid grid-cols-1 sm:grid-cols-2 gap-4",children:[i.jsxs("div",{className:"sm:col-span-2",children:[i.jsx("label",{className:"block text-main mb-1 font-bold",children:"Vorlagen Name"}),i.jsx("input",{type:"text",required:!0,placeholder:"z. B. Standard Kneipenabend / Bar-Event",value:L,onChange:x=>q(x.target.value),className:"w-full px-3.5 py-2 rounded-sm input-field text-sm font-bold"})]}),i.jsxs("div",{className:"sm:col-span-2",children:[i.jsx("label",{className:"block text-main mb-1 font-bold",children:"Beschreibung (optional)"}),i.jsx("input",{type:"text",placeholder:"z. B. Inklusive 2 Barschichten und Aufbau",value:P,onChange:x=>Y(x.target.value),className:"w-full px-3.5 py-2 rounded-sm input-field text-xs"})]})]}),i.jsx("div",{className:"space-y-4 pt-2",children:ae.map((x,$)=>i.jsxs("div",{className:"p-4 rounded-sm bg-subtle border border-grid space-y-3",children:[i.jsxs("div",{className:"flex items-center justify-between gap-2",children:[i.jsx("input",{type:"text",required:!0,placeholder:"Bereichs-Name (z. B. Bar)",value:x.name,onChange:I=>{const K=[...ae];K[$].name=I.target.value,le(K)},className:"flex-1 px-3 py-1 rounded-sm input-field text-xs font-bold"}),i.jsx("button",{type:"button",onClick:()=>{le(ae.filter((I,K)=>K!==$))},className:"text-muted hover:text-red-400 p-1",children:i.jsx(cn,{className:"w-4 h-4"})})]}),i.jsxs("div",{className:"pl-3 border-l-2 border-grid space-y-2",children:[i.jsxs("div",{className:"flex items-center justify-between text-muted text-[11px] font-bold",children:[i.jsx("span",{children:"Voreingestellte Schichten"}),i.jsxs("button",{type:"button",onClick:()=>U($),className:"text-indigo-400 hover:underline flex items-center gap-1",children:[i.jsx(Yn,{className:"w-3 h-3"})," Schicht hinzufügen"]})]}),x.shifts.map((I,K)=>i.jsxs("div",{className:"p-2.5 rounded-sm bg-surface border border-grid grid grid-cols-1 sm:grid-cols-12 gap-2 items-center text-xs",children:[i.jsx("input",{type:"text",placeholder:"Schichtname",value:I.title,onChange:W=>{const ee=[...ae];ee[$].shifts[K].title=W.target.value,le(ee)},className:"sm:col-span-4 px-2 py-1 rounded-sm input-field text-xs"}),i.jsx("input",{type:"text",placeholder:"Start (18:00)",value:I.start_time,onChange:W=>{const ee=[...ae];ee[$].shifts[K].start_time=W.target.value,le(ee)},className:"sm:col-span-2 px-2 py-1 rounded-sm input-field text-xs"}),i.jsx("input",{type:"text",placeholder:"Ende (22:00)",value:I.end_time,onChange:W=>{const ee=[...ae];ee[$].shifts[K].end_time=W.target.value,le(ee)},className:"sm:col-span-2 px-2 py-1 rounded-sm input-field text-xs"}),i.jsxs("div",{className:"sm:col-span-3 flex items-center gap-1",children:[i.jsx("span",{className:"text-[10px] text-muted",children:"Plätze:"}),i.jsx("input",{type:"number",min:"1",value:I.max_participants,onChange:W=>{const ee=[...ae];ee[$].shifts[K].max_participants=parseInt(W.target.value)||1,le(ee)},className:"w-full px-2 py-1 rounded-sm input-field text-xs font-bold"})]}),i.jsx("button",{type:"button",onClick:()=>{const W=[...ae];W[$].shifts=W[$].shifts.filter((ee,Ae)=>Ae!==K),le(W)},className:"sm:col-span-1 p-1 text-muted hover:text-red-400 text-center",children:i.jsx(cn,{className:"w-3.5 h-3.5 mx-auto"})})]},K))]})]},$))}),i.jsxs("div",{className:"pt-3 flex justify-end gap-2 border-t border-grid",children:[i.jsx("button",{type:"button",onClick:()=>j(!1),className:"px-4 py-2 rounded-sm text-xs font-semibold text-muted hover:bg-surface-hover transition border border-grid",children:"Abbrechen"}),i.jsxs("button",{type:"submit",disabled:N,style:{backgroundColor:"var(--brand-primary)"},className:"px-5 py-2 rounded-sm text-xs font-mono font-bold text-white transition hover:brightness-110 shadow-sm flex items-center gap-1.5",children:[i.jsx(Zn,{className:"w-4 h-4"})," Vorlage Speichern"]})]})]}),i.jsxs("div",{className:"space-y-4 font-mono text-xs",children:[i.jsx("h3",{className:"font-serif text-lg font-bold uppercase text-main",children:"Verfügbare Vorlagen"}),a?i.jsx("div",{className:"hallmark-panel p-8 text-center text-muted",children:"Lade Vorlagen..."}):s.length===0?i.jsx("div",{className:"hallmark-panel p-8 text-center text-muted italic",children:'[ Noch keine Vorlagen gespeichert. Klicke oben auf "Neue Vorlage Erstellen" um Vorlagen mit voreingestellten Schichten anzulegen. ]'}):i.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4",children:s.map(x=>{var $;return i.jsxs("div",{onClick:()=>ue(x),className:`hallmark-panel p-5 rounded-sm border cursor-pointer transition space-y-3 ${(f==null?void 0:f.id)===x.id?"bg-indigo-500/10 border-indigo-500 shadow-md":"bg-surface border-grid hover:border-muted"}`,children:[i.jsxs("div",{className:"flex items-center justify-between",children:[i.jsx("h4",{className:"font-serif text-base font-bold text-main uppercase",children:x.name}),(f==null?void 0:f.id)===x.id&&i.jsx("span",{className:"text-[10px] font-mono text-indigo-400 bg-indigo-500/20 px-2 py-0.5 rounded-sm border border-indigo-500/30 font-bold",children:"[ AUSGEWÄHLT ]"})]}),x.description&&i.jsx("p",{className:"text-xs font-sans text-muted",children:x.description}),(($=x.template_data)==null?void 0:$.task_areas)&&x.template_data.task_areas.length>0&&i.jsxs("div",{className:"space-y-2 pt-2 border-t border-grid text-[11px]",children:[i.jsx("div",{className:"font-bold text-muted uppercase text-[10px]",children:"📌 Voreingestellte Schichten:"}),x.template_data.task_areas.map((I,K)=>{var W;return i.jsxs("div",{className:"bg-subtle p-2 rounded-sm border border-grid space-y-1",children:[i.jsxs("div",{className:"font-bold text-main flex items-center justify-between",children:[i.jsx("span",{children:I.name}),i.jsxs("span",{className:"text-[10px] text-muted font-normal",children:[((W=I.shifts)==null?void 0:W.length)||0," Schichten"]})]}),i.jsx("div",{className:"flex flex-wrap gap-1",children:(I.shifts||[]).map((ee,Ae)=>i.jsxs("span",{className:"px-2 py-0.5 rounded-sm bg-surface border border-grid text-[10px] flex items-center gap-1 font-mono",children:[i.jsx(Vi,{className:"w-3 h-3 text-muted shrink-0"}),i.jsx("strong",{className:"text-main",children:ee.title}),i.jsxs("span",{className:"text-muted",children:["(",ee.start_time,"-",ee.end_time,", ",ee.max_participants," Plätze)"]})]},Ae))})]},K)})]}),i.jsxs("div",{className:"text-[10px] text-muted pt-2 border-t border-grid flex items-center justify-between",children:[i.jsxs("span",{children:["Erstellt von: ",i.jsx("strong",{children:x.created_by_name||"Admin"})]}),i.jsx("span",{className:"text-indigo-400 font-bold",children:"Klick zum Auswählen"})]})]},x.id)})})]}),f&&i.jsxs("form",{onSubmit:Te,className:"hallmark-panel rounded-sm p-6 border border-grid space-y-4 font-mono text-xs animate-in fade-in duration-200",children:[i.jsxs("h3",{className:"font-serif text-lg font-bold uppercase text-indigo-400 border-b border-grid pb-2",children:['Neue Veranstaltung aus Vorlage "',f.name,'" Erstellen']}),i.jsxs("div",{className:"grid grid-cols-1 sm:grid-cols-2 gap-4",children:[i.jsxs("div",{className:"sm:col-span-2",children:[i.jsx("label",{className:"block text-main mb-1 font-bold",children:"Titel der Veranstaltung"}),i.jsx("input",{type:"text",required:!0,value:d,onChange:x=>w(x.target.value),className:"w-full px-3.5 py-2 rounded-sm input-field text-sm font-bold"})]}),i.jsxs("div",{children:[i.jsx("label",{className:"block text-main mb-1 font-bold",children:"Startdatum"}),i.jsx("input",{type:"date",required:!0,value:y,onChange:x=>S(x.target.value),className:"w-full px-3.5 py-2 rounded-sm input-field text-xs"})]}),i.jsxs("div",{children:[i.jsx("label",{className:"block text-main mb-1 font-bold",children:"Enddatum"}),i.jsx("input",{type:"date",required:!0,value:R,onChange:x=>g(x.target.value),className:"w-full px-3.5 py-2 rounded-sm input-field text-xs"})]}),i.jsxs("div",{className:"sm:col-span-2",children:[i.jsx("label",{className:"block text-main mb-1 font-bold",children:"Ort (optional)"}),i.jsx("input",{type:"text",value:p,onChange:x=>m(x.target.value),placeholder:"z. B. Großer Saal",className:"w-full px-3.5 py-2 rounded-sm input-field text-xs"})]})]}),i.jsx("div",{className:"pt-3 flex justify-end border-t border-grid",children:i.jsxs("button",{type:"submit",disabled:N,style:{backgroundColor:"var(--brand-primary)"},className:"px-6 py-2.5 rounded-sm text-xs font-mono font-bold text-white transition hover:brightness-110 shadow-sm flex items-center gap-2",children:[i.jsx(uy,{className:"w-4 h-4 fill-white"}),N?"Erstellen...":"Veranstaltung Jetzt Aus Vorlage Erstellen"]})})]})]})}function Qb(){const[e,t]=A.useState(null),[n,r]=A.useState(null),[s,l]=A.useState([]),[a,o]=A.useState([]),[u,c]=A.useState(null),[f,v]=A.useState(null),[d,w]=A.useState(!0),[y,S]=A.useState("home"),[R,g]=A.useState(!1),[p,m]=A.useState(!1),[N,C]=A.useState(null),[E,j]=A.useState(!1),[L,q]=A.useState(!1),[P,Y]=A.useState(localStorage.getItem("theme_mode")||"auto"),[ae,le]=A.useState(null),[ke,ue]=A.useState(null);A.useEffect(()=>{window.addEventListener("beforeinstallprompt",z=>{z.preventDefault(),ue(z)}),$()},[]),A.useEffect(()=>{localStorage.setItem("theme_mode",P);const z=()=>{let G=P;P==="auto"&&(G=window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light"),document.documentElement.setAttribute("data-theme",G)};if(z(),P==="auto"){const G=window.matchMedia("(prefers-color-scheme: dark)"),Ee=()=>z();return G.addEventListener("change",Ee),()=>G.removeEventListener("change",Ee)}},[P]),A.useEffect(()=>{n!=null&&n.primary_color&&(document.documentElement.style.setProperty("--brand-primary",n.primary_color),document.documentElement.style.setProperty("--brand-secondary",n.secondary_color||n.primary_color))},[n]);const[Te,V]=A.useState(null),[M,U]=A.useState(null),x=z=>{le(z),setTimeout(()=>le(null),5e3)},$=async()=>{w(!0);try{try{const xe=await J("/branding/");r(xe)}catch{}if(wd())try{const xe=await J("/users/me/");t(xe),!xe.is_admin_user&&!xe.is_staff&&!xe.is_superuser&&y==="admin"&&S("home")}catch{hl(null),t(null),S("home")}const z=new URLSearchParams(window.location.search),G=z.get("verify_email");if(G)try{const xe=await J("/users/verify-email/",{method:"POST",body:JSON.stringify({token:G})});hl(xe.token),t(xe.user),x(xe.message||"✅ E-Mail-Adresse erfolgreich bestätigt!"),window.history.replaceState({},document.title,window.location.pathname)}catch(xe){x(`⚠️ E-Mail Bestätigung: ${xe.message}`)}const Ee=z.get("claim_token"),en=z.get("guest_name");Ee&&en&&(V(Ee),U(en),wd()||g(!0)),await K(),await W()}catch(z){console.error(z)}finally{w(!1)}},I=async z=>{try{const G=await J(`/users/signups/${z.id}/generate-claim-link/`,{method:"POST"}),Ee=`${window.location.origin}/?claim_token=${G.token}&guest_name=${encodeURIComponent(G.guest_name)}`;navigator.clipboard?(await navigator.clipboard.writeText(Ee),x(`✅ Einladungs-Link für ${G.guest_name} in Zwischenablage kopiert!`)):prompt(`Einladungs-Link für ${G.guest_name} kopieren:`,Ee)}catch(G){alert(G.message||"Fehler beim Erstellen des Links.")}},K=async()=>{try{const z=await J("/skills/");l(z.results||z)}catch{}},W=async()=>{try{const z=await J("/events/"),G=z.results||z;o(G),G.length>0&&!u?(c(G[0].id),ee(G[0].id)):u&&ee(u)}catch{}},ee=async z=>{try{const G=await J(`/events/${z}/matrix/`);v(G)}catch{}},Ae=z=>{c(z),ee(z),S("schedule")},gt=()=>{hl(null),t(null),S("home"),x("Erfolgreich abgemeldet."),u&&ee(u)},$n=(z,G)=>{t(z),z&&!z.is_admin_user&&!z.is_staff&&!z.is_superuser&&y==="admin"&&S("home"),x(G||"Erfolgreich angemeldet!"),u&&ee(u)},F=async z=>{if(!e)C(z),m(!0);else try{const G=await J(`/shifts/${z.id}/signup/`,{method:"POST"});x(G.message||"Erfolgreich für Schicht eingetragen!"),u&&ee(u)}catch(G){x(`Fehler: ${G.message}`)}},be=async z=>{if(!N)return;const G=await J(`/shifts/${N.id}/signup/`,{method:"POST",body:JSON.stringify(z)});x(G.message||"Als Gast eingetragen!"),u&&ee(u)},_t=async z=>{try{const G=await J(`/shifts/${z.id}/signup/`,{method:"DELETE"});x(G.message||"Eintragung storniert."),u&&ee(u)}catch(G){x(`Fehler: ${G.message}`)}},rr=async z=>{if(!(!z||!z.id)&&window.confirm(`Möchtest du die Veranstaltung "${z.title}" und alle zugehörigen Schichten wirklich unwiderruflich löschen?`))try{await J(`/events/${z.id}/`,{method:"DELETE"}),x(`Veranstaltung "${z.title}" wurde erfolgreich gelöscht.`),u===z.id&&c(null),y==="event-editor"&&S("home"),W()}catch(G){x(`Fehler beim Löschen: ${G.message}`)}},[Dn,yn]=A.useState(null),Nr=async z=>{let G=z.id;G?await J(`/events/${G}/`,{method:"PATCH",body:JSON.stringify({title:z.title,description:z.description,location:z.location,start_date:z.start_date,end_date:z.end_date,co_manager_ids:z.co_manager_ids||[]})}):G=(await J("/events/",{method:"POST",body:JSON.stringify({title:z.title,description:z.description,location:z.location,start_date:z.start_date,end_date:z.end_date,co_manager_ids:z.co_manager_ids||[]})})).id;for(let Ee of z.task_areas){if(!Ee.name)continue;let en=Ee.id;en?await J(`/task-areas/${en}/`,{method:"PATCH",body:JSON.stringify({name:Ee.name,description:Ee.description||""})}):en=(await J("/task-areas/",{method:"POST",body:JSON.stringify({event:G,name:Ee.name,description:Ee.description||""})})).id;for(let xe of Ee.shifts){const zn=xe.date||z.start_date;xe.id?await J(`/shifts/${xe.id}/`,{method:"PATCH",body:JSON.stringify({title:xe.title,date:zn,start_time:xe.start_time,end_time:xe.end_time,max_participants:xe.max_participants,required_skill_ids:xe.required_skill_ids||[]})}):await J("/shifts/",{method:"POST",body:JSON.stringify({task_area:en,title:xe.title,date:zn,start_time:xe.start_time,end_time:xe.end_time,max_participants:xe.max_participants,required_skill_ids:xe.required_skill_ids||[]})})}}x(z.id?"Veranstaltung & Schichten aktualisiert!":"Veranstaltung erfolgreich erstellt!"),await W(),Ae(G)},nt=async(z,G)=>{const Ee=await J(`/templates/${z}/instantiate/`,{method:"POST",body:JSON.stringify(G)});x("Veranstaltung aus Vorlage erstellt!"),await W(),Ee.id&&Ae(Ee.id)},rt=()=>{u&&window.open(`/api/events/${u}/export_pdf/`,"_blank")},Ds=()=>{window.print()},zs=()=>{ke&&(ke.prompt(),ke.userChoice.then(z=>{z.outcome==="accepted"&&x("PWA Installation gestartet!"),ue(null)}))};return i.jsxs("div",{className:"min-h-screen bg-canvas text-main flex flex-col font-sans selection:bg-surface-hover transition-colors duration-200",children:[ae&&i.jsxs("div",{className:"fixed bottom-6 right-6 z-50 bg-emerald-600 text-white px-4 py-2.5 rounded-sm shadow-2xl font-mono text-xs flex items-center gap-2 border border-emerald-400 animate-in fade-in slide-in-from-bottom-3 duration-200",children:[i.jsx(Zn,{className:"w-4 h-4"}),i.jsx("span",{children:ae})]}),i.jsx(vy,{branding:n,user:e,activeTab:y,onChangeTab:S,themeMode:P,onChangeThemeMode:Y,onLogout:gt,onOpenAuth:()=>g(!0),onOpenCreateEvent:()=>{yn(null),S("event-editor")},onOpenTemplates:()=>S("templates"),onOpenProfile:()=>q(!0),onOpenAdmin:()=>S("admin"),pwaInstallPrompt:!!ke,onInstallPwa:zs}),i.jsx("main",{className:"flex-1 max-w-7xl w-full mx-auto px-4 sm:px-6 lg:px-8 py-8 space-y-6",children:d?i.jsx("div",{className:"hallmark-panel p-16 text-center text-xs text-muted font-mono border border-grid",children:"Lade Daten..."}):y==="home"?i.jsx(Hb,{events:a,user:e,onSelectEvent:Ae,onOpenCreateEvent:()=>{yn(null),S("event-editor")},onToggleEventActive:async z=>{try{await J(`/events/${z.id}/`,{method:"PATCH",body:JSON.stringify({is_active:z.is_active===!1})}),W()}catch(G){alert(G.message||"Aktion fehlgeschlagen.")}},onEditEvent:z=>{yn(z),S("event-editor")},onDeleteEvent:rr,branding:n}):y==="calendar"?i.jsx(Kb,{events:a,onSelectEvent:Ae,branding:n}):y==="admin"&&e&&(e.is_admin_user||e.is_staff||e.is_superuser)?i.jsx(Wb,{branding:n,onRefreshBranding:async()=>{const z=await J("/branding/");r(z)},onRefreshEvents:W,skills:s,onRefreshSkills:K}):y==="event-editor"?i.jsx(Gb,{eventToEdit:Dn,skills:s,user:e,onBack:()=>S("schedule"),onSubmit:Nr,onDeleteEvent:rr}):y==="templates"?i.jsx(qb,{onBack:()=>S("schedule"),onInstantiateTemplate:nt,user:e,skills:s}):i.jsxs("div",{className:"space-y-6",children:[i.jsxs("div",{className:"flex items-center justify-between gap-4 overflow-x-auto pb-2 no-scrollbar font-mono",children:[i.jsxs("div",{className:"flex items-center gap-2",children:[i.jsx("span",{className:"text-xs font-bold text-muted uppercase tracking-wider whitespace-nowrap",children:"Ausgewähltes Event:"}),a.map(z=>{const G=u===z.id;return i.jsx("button",{onClick:()=>Ae(z.id),style:{backgroundColor:G?(n==null?void 0:n.primary_color)||"var(--brand-primary)":void 0,borderColor:G?(n==null?void 0:n.primary_color)||"var(--brand-primary)":void 0},className:`px-3.5 py-1.5 rounded-sm text-xs font-bold transition whitespace-nowrap border ${G?"text-white shadow-sm":"bg-subtle text-muted border-grid hover:text-main"}`,children:z.title},z.id)})]}),e&&i.jsxs("button",{onClick:()=>{yn(null),S("event-editor")},className:"px-3.5 py-1.5 rounded-sm text-xs font-bold bg-subtle hover:bg-surface-hover text-main border border-grid transition flex items-center gap-1.5 shrink-0",children:[i.jsx(Yn,{className:"w-4 h-4"})," Neues Event"]})]}),i.jsx(xy,{event:f,user:e,onSignupClick:F,onCancelClick:_t,onEditEvent:z=>{yn(z),S("event-editor")},onDeleteEvent:rr,onRemoveUserFromShift:async(z,G)=>{try{const Ee=await J(`/shifts/${z.id}/signup/${G}/`,{method:"DELETE"});x(Ee.message||"Eintragung entfernt."),W(),u&&Ae(u)}catch(Ee){alert(Ee.message||"Entfernen der Person fehlgeschlagen.")}},onGenerateClaimLink:I,onExportPdf:rt,onPrintView:Ds})]})}),i.jsx("footer",{className:"border-t border-grid py-6 text-center text-xs text-muted font-mono no-print",children:i.jsxs("p",{children:[(n==null?void 0:n.app_name)||"Veranstaltungsschichtplaner"," • PWA Enabled • PostgreSQL & Docker Ready"]})}),R&&i.jsx(Bb,{onClose:()=>{g(!1),V(null),U(null)},onSuccess:$n,claimToken:Te,prefilledGuestName:M}),p&&i.jsx(Fb,{shift:N,onClose:()=>m(!1),onSubmit:be})]})}ic.createRoot(document.getElementById("root")).render(i.jsx(Si.StrictMode,{children:i.jsx(Qb,{})})); diff --git a/frontend/dist/assets/index-DXNVMwNg.css b/frontend/dist/assets/index-DXNVMwNg.css new file mode 100644 index 0000000..57a4d9e --- /dev/null +++ b/frontend/dist/assets/index-DXNVMwNg.css @@ -0,0 +1 @@ +*,:before,:after{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }*,:before,:after{box-sizing:border-box;border-width:0;border-style:solid;border-color:#e5e7eb}:before,:after{--tw-content: ""}html,:host{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol,"Noto Color Emoji";font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=until-found])){display:none}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.sticky{position:sticky}.inset-0{top:0;right:0;bottom:0;left:0}.bottom-6{bottom:1.5rem}.left-3{left:.75rem}.left-3\.5{left:.875rem}.right-3{right:.75rem}.right-4{right:1rem}.right-6{right:1.5rem}.top-0{top:0}.top-2\.5{top:.625rem}.top-3{top:.75rem}.top-4{top:1rem}.z-40{z-index:40}.z-50{z-index:50}.mx-1{margin-left:.25rem;margin-right:.25rem}.mx-auto{margin-left:auto;margin-right:auto}.my-8{margin-top:2rem;margin-bottom:2rem}.mb-1{margin-bottom:.25rem}.mb-3{margin-bottom:.75rem}.mb-4{margin-bottom:1rem}.mb-5{margin-bottom:1.25rem}.mb-6{margin-bottom:1.5rem}.mb-8{margin-bottom:2rem}.ml-auto{margin-left:auto}.mr-1{margin-right:.25rem}.mt-0\.5{margin-top:.125rem}.mt-1{margin-top:.25rem}.mt-2{margin-top:.5rem}.mt-4{margin-top:1rem}.mt-6{margin-top:1.5rem}.line-clamp-2{overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2}.block{display:block}.inline-block{display:inline-block}.inline{display:inline}.flex{display:flex}.inline-flex{display:inline-flex}.table{display:table}.grid{display:grid}.hidden{display:none}.h-10{height:2.5rem}.h-16{height:4rem}.h-2\.5{height:.625rem}.h-3{height:.75rem}.h-3\.5{height:.875rem}.h-4{height:1rem}.h-5{height:1.25rem}.h-8{height:2rem}.h-9{height:2.25rem}.max-h-\[70px\]{max-height:70px}.min-h-\[100px\]{min-height:100px}.min-h-\[90px\]{min-height:90px}.min-h-screen{min-height:100vh}.w-1\/4{width:25%}.w-1\/6{width:16.666667%}.w-10{width:2.5rem}.w-2\.5{width:.625rem}.w-3{width:.75rem}.w-3\.5{width:.875rem}.w-4{width:1rem}.w-5{width:1.25rem}.w-8{width:2rem}.w-9{width:2.25rem}.w-full{width:100%}.w-px{width:1px}.min-w-\[110px\]{min-width:110px}.min-w-\[260px\]{min-width:260px}.max-w-2xl{max-width:42rem}.max-w-3xl{max-width:48rem}.max-w-4xl{max-width:56rem}.max-w-5xl{max-width:64rem}.max-w-7xl{max-width:80rem}.max-w-\[130px\]{max-width:130px}.max-w-lg{max-width:32rem}.max-w-md{max-width:28rem}.max-w-xl{max-width:36rem}.flex-1{flex:1 1 0%}.shrink-0{flex-shrink:0}.border-collapse{border-collapse:collapse}.cursor-pointer{cursor:pointer}.auto-rows-fr{grid-auto-rows:minmax(0,1fr)}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-7{grid-template-columns:repeat(7,minmax(0,1fr))}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.items-stretch{align-items:stretch}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.justify-around{justify-content:space-around}.gap-1{gap:.25rem}.gap-1\.5{gap:.375rem}.gap-2{gap:.5rem}.gap-3{gap:.75rem}.gap-4{gap:1rem}.gap-6{gap:1.5rem}.space-x-1>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0;margin-right:calc(.25rem * var(--tw-space-x-reverse));margin-left:calc(.25rem * calc(1 - var(--tw-space-x-reverse)))}.space-x-2>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0;margin-right:calc(.5rem * var(--tw-space-x-reverse));margin-left:calc(.5rem * calc(1 - var(--tw-space-x-reverse)))}.space-x-3>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0;margin-right:calc(.75rem * var(--tw-space-x-reverse));margin-left:calc(.75rem * calc(1 - var(--tw-space-x-reverse)))}.space-y-1>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.25rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.25rem * var(--tw-space-y-reverse))}.space-y-1\.5>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.375rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.375rem * var(--tw-space-y-reverse))}.space-y-2>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.5rem * var(--tw-space-y-reverse))}.space-y-3>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.75rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.75rem * var(--tw-space-y-reverse))}.space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1rem * var(--tw-space-y-reverse))}.space-y-5>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1.25rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1.25rem * var(--tw-space-y-reverse))}.space-y-6>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1.5rem * var(--tw-space-y-reverse))}.space-y-8>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(2rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(2rem * var(--tw-space-y-reverse))}.divide-x>:not([hidden])~:not([hidden]){--tw-divide-x-reverse: 0;border-right-width:calc(1px * var(--tw-divide-x-reverse));border-left-width:calc(1px * calc(1 - var(--tw-divide-x-reverse)))}.divide-y>:not([hidden])~:not([hidden]){--tw-divide-y-reverse: 0;border-top-width:calc(1px * calc(1 - var(--tw-divide-y-reverse)));border-bottom-width:calc(1px * var(--tw-divide-y-reverse))}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.whitespace-nowrap{white-space:nowrap}.whitespace-pre-line{white-space:pre-line}.rounded-2xl{border-radius:1rem}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:.5rem}.rounded-sm{border-radius:.125rem}.rounded-xl{border-radius:.75rem}.border{border-width:1px}.border-0{border-width:0px}.border-b{border-bottom-width:1px}.border-l-2{border-left-width:2px}.border-r{border-right-width:1px}.border-t{border-top-width:1px}.border-amber-500\/20{border-color:#f59e0b33}.border-amber-500\/30{border-color:#f59e0b4d}.border-amber-500\/40{border-color:#f59e0b66}.border-blue-500{--tw-border-opacity: 1;border-color:rgb(59 130 246 / var(--tw-border-opacity, 1))}.border-blue-500\/20{border-color:#3b82f633}.border-emerald-400{--tw-border-opacity: 1;border-color:rgb(52 211 153 / var(--tw-border-opacity, 1))}.border-emerald-500{--tw-border-opacity: 1;border-color:rgb(16 185 129 / var(--tw-border-opacity, 1))}.border-emerald-500\/20{border-color:#10b98133}.border-emerald-500\/30{border-color:#10b9814d}.border-indigo-500{--tw-border-opacity: 1;border-color:rgb(99 102 241 / var(--tw-border-opacity, 1))}.border-indigo-500\/20{border-color:#6366f133}.border-indigo-500\/30{border-color:#6366f14d}.border-indigo-500\/40{border-color:#6366f166}.border-indigo-500\/50{border-color:#6366f180}.border-red-500\/20{border-color:#ef444433}.border-red-500\/30{border-color:#ef44444d}.border-red-600\/30{border-color:#dc26264d}.border-slate-700{--tw-border-opacity: 1;border-color:rgb(51 65 85 / var(--tw-border-opacity, 1))}.border-slate-800{--tw-border-opacity: 1;border-color:rgb(30 41 59 / var(--tw-border-opacity, 1))}.border-slate-800\/80{border-color:#1e293bcc}.border-transparent{border-color:transparent}.bg-amber-500\/10{background-color:#f59e0b1a}.bg-amber-500\/20{background-color:#f59e0b33}.bg-amber-500\/5{background-color:#f59e0b0d}.bg-black\/60{background-color:#0009}.bg-blue-500\/10{background-color:#3b82f61a}.bg-blue-600{--tw-bg-opacity: 1;background-color:rgb(37 99 235 / var(--tw-bg-opacity, 1))}.bg-blue-600\/10{background-color:#2563eb1a}.bg-emerald-500\/10{background-color:#10b9811a}.bg-emerald-600{--tw-bg-opacity: 1;background-color:rgb(5 150 105 / var(--tw-bg-opacity, 1))}.bg-indigo-500\/10{background-color:#6366f11a}.bg-indigo-500\/20{background-color:#6366f133}.bg-indigo-600{--tw-bg-opacity: 1;background-color:rgb(79 70 229 / var(--tw-bg-opacity, 1))}.bg-red-500\/10{background-color:#ef44441a}.bg-red-600\/20{background-color:#dc262633}.bg-slate-100{--tw-bg-opacity: 1;background-color:rgb(241 245 249 / var(--tw-bg-opacity, 1))}.bg-slate-800{--tw-bg-opacity: 1;background-color:rgb(30 41 59 / var(--tw-bg-opacity, 1))}.bg-slate-900{--tw-bg-opacity: 1;background-color:rgb(15 23 42 / var(--tw-bg-opacity, 1))}.bg-slate-900\/60{background-color:#0f172a99}.bg-slate-900\/90{background-color:#0f172ae6}.bg-slate-950{--tw-bg-opacity: 1;background-color:rgb(2 6 23 / var(--tw-bg-opacity, 1))}.bg-slate-950\/60{background-color:#02061799}.bg-slate-950\/70{background-color:#020617b3}.bg-slate-950\/80{background-color:#020617cc}.fill-white{fill:#fff}.object-contain{-o-object-fit:contain;object-fit:contain}.p-0\.5{padding:.125rem}.p-1{padding:.25rem}.p-1\.5{padding:.375rem}.p-12{padding:3rem}.p-16{padding:4rem}.p-2{padding:.5rem}.p-2\.5{padding:.625rem}.p-3{padding:.75rem}.p-3\.5{padding:.875rem}.p-4{padding:1rem}.p-5{padding:1.25rem}.p-6{padding:1.5rem}.p-8{padding:2rem}.px-1{padding-left:.25rem;padding-right:.25rem}.px-1\.5{padding-left:.375rem;padding-right:.375rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-2\.5{padding-left:.625rem;padding-right:.625rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-3\.5{padding-left:.875rem;padding-right:.875rem}.px-4{padding-left:1rem;padding-right:1rem}.px-5{padding-left:1.25rem;padding-right:1.25rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.py-0\.5{padding-top:.125rem;padding-bottom:.125rem}.py-1{padding-top:.25rem;padding-bottom:.25rem}.py-1\.5{padding-top:.375rem;padding-bottom:.375rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.py-2\.5{padding-top:.625rem;padding-bottom:.625rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.py-3\.5{padding-top:.875rem;padding-bottom:.875rem}.py-6{padding-top:1.5rem;padding-bottom:1.5rem}.py-8{padding-top:2rem;padding-bottom:2rem}.pb-2{padding-bottom:.5rem}.pb-3{padding-bottom:.75rem}.pb-4{padding-bottom:1rem}.pb-6{padding-bottom:1.5rem}.pl-10{padding-left:2.5rem}.pl-3{padding-left:.75rem}.pl-3\.5{padding-left:.875rem}.pl-9{padding-left:2.25rem}.pr-10{padding-right:2.5rem}.pr-16{padding-right:4rem}.pr-3\.5{padding-right:.875rem}.pt-1{padding-top:.25rem}.pt-1\.5{padding-top:.375rem}.pt-2{padding-top:.5rem}.pt-3{padding-top:.75rem}.pt-4{padding-top:1rem}.pt-5{padding-top:1.25rem}.pt-6{padding-top:1.5rem}.text-left{text-align:left}.text-center{text-align:center}.text-right{text-align:right}.align-top{vertical-align:top}.font-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.font-sans{font-family:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol,"Noto Color Emoji"}.font-serif{font-family:ui-serif,Georgia,Cambria,Times New Roman,Times,serif}.text-2xl{font-size:1.5rem;line-height:2rem}.text-3xl{font-size:1.875rem;line-height:2.25rem}.text-\[10px\]{font-size:10px}.text-\[11px\]{font-size:11px}.text-\[9px\]{font-size:9px}.text-base{font-size:1rem;line-height:1.5rem}.text-lg{font-size:1.125rem;line-height:1.75rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xl{font-size:1.25rem;line-height:1.75rem}.text-xs{font-size:.75rem;line-height:1rem}.font-bold{font-weight:700}.font-medium{font-weight:500}.font-normal{font-weight:400}.font-semibold{font-weight:600}.uppercase{text-transform:uppercase}.italic{font-style:italic}.leading-none{line-height:1}.leading-tight{line-height:1.25}.tracking-tight{letter-spacing:-.025em}.tracking-wide{letter-spacing:.025em}.tracking-wider{letter-spacing:.05em}.tracking-widest{letter-spacing:.1em}.text-amber-300{--tw-text-opacity: 1;color:rgb(252 211 77 / var(--tw-text-opacity, 1))}.text-amber-400{--tw-text-opacity: 1;color:rgb(251 191 36 / var(--tw-text-opacity, 1))}.text-amber-500{--tw-text-opacity: 1;color:rgb(245 158 11 / var(--tw-text-opacity, 1))}.text-blue-400{--tw-text-opacity: 1;color:rgb(96 165 250 / var(--tw-text-opacity, 1))}.text-blue-500{--tw-text-opacity: 1;color:rgb(59 130 246 / var(--tw-text-opacity, 1))}.text-emerald-400{--tw-text-opacity: 1;color:rgb(52 211 153 / var(--tw-text-opacity, 1))}.text-emerald-400\/80{color:#34d399cc}.text-emerald-500{--tw-text-opacity: 1;color:rgb(16 185 129 / var(--tw-text-opacity, 1))}.text-indigo-300{--tw-text-opacity: 1;color:rgb(165 180 252 / var(--tw-text-opacity, 1))}.text-indigo-400{--tw-text-opacity: 1;color:rgb(129 140 248 / var(--tw-text-opacity, 1))}.text-indigo-500{--tw-text-opacity: 1;color:rgb(99 102 241 / var(--tw-text-opacity, 1))}.text-purple-400{--tw-text-opacity: 1;color:rgb(192 132 252 / var(--tw-text-opacity, 1))}.text-red-400{--tw-text-opacity: 1;color:rgb(248 113 113 / var(--tw-text-opacity, 1))}.text-red-500{--tw-text-opacity: 1;color:rgb(239 68 68 / var(--tw-text-opacity, 1))}.text-slate-200{--tw-text-opacity: 1;color:rgb(226 232 240 / var(--tw-text-opacity, 1))}.text-slate-300{--tw-text-opacity: 1;color:rgb(203 213 225 / var(--tw-text-opacity, 1))}.text-slate-400{--tw-text-opacity: 1;color:rgb(148 163 184 / var(--tw-text-opacity, 1))}.text-slate-500{--tw-text-opacity: 1;color:rgb(100 116 139 / var(--tw-text-opacity, 1))}.text-slate-950{--tw-text-opacity: 1;color:rgb(2 6 23 / var(--tw-text-opacity, 1))}.text-white{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.line-through{text-decoration-line:line-through}.antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.opacity-30{opacity:.3}.opacity-40{opacity:.4}.opacity-50{opacity:.5}.opacity-80{opacity:.8}.shadow-2xl{--tw-shadow: 0 25px 50px -12px rgb(0 0 0 / .25);--tw-shadow-colored: 0 25px 50px -12px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-lg{--tw-shadow: 0 10px 15px -3px rgb(0 0 0 / .1), 0 4px 6px -4px rgb(0 0 0 / .1);--tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-md{--tw-shadow: 0 4px 6px -1px rgb(0 0 0 / .1), 0 2px 4px -2px rgb(0 0 0 / .1);--tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-sm{--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-xl{--tw-shadow: 0 20px 25px -5px rgb(0 0 0 / .1), 0 8px 10px -6px rgb(0 0 0 / .1);--tw-shadow-colored: 0 20px 25px -5px var(--tw-shadow-color), 0 8px 10px -6px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-blue-500\/10{--tw-shadow-color: rgb(59 130 246 / .1);--tw-shadow: var(--tw-shadow-colored)}.shadow-blue-600\/30{--tw-shadow-color: rgb(37 99 235 / .3);--tw-shadow: var(--tw-shadow-colored)}.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.backdrop-blur-sm{--tw-backdrop-blur: blur(4px);-webkit-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.transition{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.duration-150{transition-duration:.15s}.duration-200{transition-duration:.2s}:root{--font-display: "Space Grotesk", system-ui, sans-serif;--font-body: "Plus Jakarta Sans", system-ui, sans-serif;--font-mono: "JetBrains Mono", monospace;--color-accent: #E05A47;--brand-primary: var(--color-accent)}:root,[data-theme=dark]{--color-paper: #0E0F12;--color-surface: #15161A;--color-surface-hover: #1C1D23;--color-border-grid: #282932;--color-border-subtle: #1F2026;--color-text: #F0F0EE;--color-text-muted: #9E9FAA;--color-text-dim: #5C5D66;--color-bg-subtle: #090A0C}[data-theme=light]{--color-paper: #F8F7F4;--color-surface: #FFFFFF;--color-surface-hover: #F0EEE8;--color-border-grid: #D8D5CB;--color-border-subtle: #E8E5DC;--color-text: #141518;--color-text-muted: #555660;--color-text-dim: #888994;--color-bg-subtle: #EFECE5}body{background-color:var(--color-paper);color:var(--color-text);font-family:var(--font-body);background-image:radial-gradient(rgba(120,120,120,.08) 1px,transparent 1px);background-size:28px 28px;overflow-x:clip;transition:background-color .15s ease,color .15s ease}.font-display,.font-serif{font-family:var(--font-display)!important;font-style:normal!important}.font-mono{font-family:var(--font-mono)!important}.font-sans{font-family:var(--font-body)!important}.bg-canvas,.bg-paper{background-color:var(--color-paper)!important}.bg-surface{background-color:var(--color-surface)!important}.bg-surface-hover{background-color:var(--color-surface-hover)!important}.bg-subtle{background-color:var(--color-bg-subtle)!important}.text-main{color:var(--color-text)!important}.text-muted{color:var(--color-text-muted)!important}.text-dim{color:var(--color-text-dim)!important}.border-grid{border-color:var(--color-border-grid)!important}.border-subtle{border-color:var(--color-border-subtle)!important}.input-field{background-color:var(--color-bg-subtle)!important;color:var(--color-text)!important;border-color:var(--color-border-grid)!important}.input-field:focus{border-color:var(--color-text-muted)!important;outline:none!important}.hallmark-panel{background-color:var(--color-surface);border:1px solid var(--color-border-grid);box-shadow:0 1px 3px #0000000d}.hallmark-card{background-color:var(--color-surface);border:1px solid var(--color-border-grid)}.hallmark-card:hover{border-color:var(--color-text-muted);background-color:var(--color-surface-hover)}.bg-brand-primary{background-color:var(--brand-primary)!important}.text-brand-primary{color:var(--brand-primary)!important}.border-brand-primary{border-color:var(--brand-primary)!important}@media print{body{background:#fff!important;color:#000!important;background-image:none!important}.no-print{display:none!important}.print-only{display:block!important}.hallmark-panel,.hallmark-card{background:none!important;border:1px solid #000!important;box-shadow:none!important}table{width:100%!important;border-collapse:collapse!important}th,td{border:1px solid #000!important;padding:6px!important;color:#000!important}}.hover\:border-red-500\/20:hover{border-color:#ef444433}.hover\:border-slate-700:hover{--tw-border-opacity: 1;border-color:rgb(51 65 85 / var(--tw-border-opacity, 1))}.hover\:bg-amber-500\/20:hover{background-color:#f59e0b33}.hover\:bg-amber-500\/30:hover{background-color:#f59e0b4d}.hover\:bg-blue-500:hover{--tw-bg-opacity: 1;background-color:rgb(59 130 246 / var(--tw-bg-opacity, 1))}.hover\:bg-blue-500\/20:hover{background-color:#3b82f633}.hover\:bg-emerald-500:hover{--tw-bg-opacity: 1;background-color:rgb(16 185 129 / var(--tw-bg-opacity, 1))}.hover\:bg-emerald-500\/20:hover{background-color:#10b98133}.hover\:bg-indigo-500:hover{--tw-bg-opacity: 1;background-color:rgb(99 102 241 / var(--tw-bg-opacity, 1))}.hover\:bg-indigo-500\/20:hover{background-color:#6366f133}.hover\:bg-red-500\/10:hover{background-color:#ef44441a}.hover\:bg-red-500\/20:hover{background-color:#ef444433}.hover\:bg-red-600\/30:hover{background-color:#dc26264d}.hover\:bg-slate-700:hover{--tw-bg-opacity: 1;background-color:rgb(51 65 85 / var(--tw-bg-opacity, 1))}.hover\:bg-slate-800:hover{--tw-bg-opacity: 1;background-color:rgb(30 41 59 / var(--tw-bg-opacity, 1))}.hover\:bg-slate-900\/40:hover{background-color:#0f172a66}.hover\:bg-white:hover{--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1))}.hover\:text-indigo-300:hover{--tw-text-opacity: 1;color:rgb(165 180 252 / var(--tw-text-opacity, 1))}.hover\:text-red-400:hover{--tw-text-opacity: 1;color:rgb(248 113 113 / var(--tw-text-opacity, 1))}.hover\:text-red-500:hover{--tw-text-opacity: 1;color:rgb(239 68 68 / var(--tw-text-opacity, 1))}.hover\:text-white:hover{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.hover\:underline:hover{text-decoration-line:underline}.hover\:brightness-110:hover{--tw-brightness: brightness(1.1);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.focus\:border-blue-500:focus{--tw-border-opacity: 1;border-color:rgb(59 130 246 / var(--tw-border-opacity, 1))}.focus\:border-slate-600:focus{--tw-border-opacity: 1;border-color:rgb(71 85 105 / var(--tw-border-opacity, 1))}.focus\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}.disabled\:opacity-50:disabled{opacity:.5}.group:hover .group-hover\:text-amber-500{--tw-text-opacity: 1;color:rgb(245 158 11 / var(--tw-text-opacity, 1))}@media (min-width: 640px){.sm\:col-span-1{grid-column:span 1 / span 1}.sm\:col-span-2{grid-column:span 2 / span 2}.sm\:col-span-3{grid-column:span 3 / span 3}.sm\:col-span-4{grid-column:span 4 / span 4}.sm\:flex{display:flex}.sm\:min-h-\[110px\]{min-height:110px}.sm\:grid-cols-12{grid-template-columns:repeat(12,minmax(0,1fr))}.sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.sm\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.sm\:flex-row{flex-direction:row}.sm\:items-center{align-items:center}.sm\:p-10{padding:2.5rem}.sm\:p-8{padding:2rem}.sm\:px-6{padding-left:1.5rem;padding-right:1.5rem}.sm\:text-4xl{font-size:2.25rem;line-height:2.5rem}.sm\:text-5xl{font-size:3rem;line-height:1}.sm\:text-sm{font-size:.875rem;line-height:1.25rem}}@media (min-width: 768px){.md\:flex{display:flex}.md\:hidden{display:none}.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.md\:flex-row{flex-direction:row}.md\:items-center{align-items:center}}@media (min-width: 1024px){.lg\:col-span-3{grid-column:span 3 / span 3}.lg\:col-span-4{grid-column:span 4 / span 4}.lg\:inline{display:inline}.lg\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.lg\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.lg\:px-8{padding-left:2rem;padding-right:2rem}} diff --git a/frontend/dist/index.html b/frontend/dist/index.html index bc703ae..e4f851d 100644 --- a/frontend/dist/index.html +++ b/frontend/dist/index.html @@ -10,10 +10,9 @@ - Schichtplaner — Veranstaltungsschichtpläne - - + +
diff --git a/frontend/index.html b/frontend/index.html index a552586..3b22f47 100644 --- a/frontend/index.html +++ b/frontend/index.html @@ -10,7 +10,6 @@ - Schichtplaner — Veranstaltungsschichtpläne diff --git a/frontend/node_modules/.package-lock.json b/frontend/node_modules/.package-lock.json index beb59fc..e291977 100644 --- a/frontend/node_modules/.package-lock.json +++ b/frontend/node_modules/.package-lock.json @@ -526,6 +526,15 @@ "vite": "^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0" } }, + "node_modules/altcha": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/altcha/-/altcha-3.2.1.tgz", + "integrity": "sha512-MXsnNmgg3BGJja0DXbflv9Bp29uyGv6wUImaaT1yLxCKOj+x9QBMpi/Vdh6XbP4Uf0PykaeQwl8ivJAvIhoo0A==", + "license": "MIT", + "dependencies": { + "hash-wasm": "^4.12.0" + } + }, "node_modules/any-promise": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", @@ -935,6 +944,21 @@ "url": "https://github.com/sponsors/rawify" } }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, "node_modules/function-bind": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", @@ -968,6 +992,12 @@ "node": ">=10.13.0" } }, + "node_modules/hash-wasm": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/hash-wasm/-/hash-wasm-4.12.0.tgz", + "integrity": "sha512-+/2B2rYLb48I/evdOIhP+K/DD2ca2fgBjp6O+GBEnCDk2e4rpeXIK8GvIyRPjTezgmWn9gmKwkQjjx6BtqDHVQ==", + "license": "MIT" + }, "node_modules/hasown": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.4.tgz", diff --git a/frontend/node_modules/altcha/LICENSE.txt b/frontend/node_modules/altcha/LICENSE.txt new file mode 100644 index 0000000..9bcb471 --- /dev/null +++ b/frontend/node_modules/altcha/LICENSE.txt @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2023-2026 Daniel Regeci, BAU Software s.r.o. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. \ No newline at end of file diff --git a/frontend/node_modules/altcha/README.md b/frontend/node_modules/altcha/README.md new file mode 100644 index 0000000..d88c2bb --- /dev/null +++ b/frontend/node_modules/altcha/README.md @@ -0,0 +1,487 @@ +# ALTCHA + +ALTCHA is a self-hosted, privacy-first security solution that protects your websites, APIs, and online services from spam and abuse through an innovative proof-of-work mechanism. Unlike traditional CAPTCHAs that depend on intrusive methods like cookies or fingerprinting, ALTCHA delivers robust protection while respecting user privacy. + +ALTCHA is fully compliant with: + +- **Global privacy regulations**: GDPR, HIPAA, CCPA, PIPEDA/CPPA, LGPD, DPDPA, and PIPL +- **Accessibility standards**: [WCAG 2.2 AA-level](https://altcha.org/docs/v2/compliance/wcag/) and the [European Accessibility Act](https://altcha.org/docs/v2/compliance/european-accessibility-act-2025/) + +For more details, visit [altcha.org](https://altcha.org). + +## Playground + +Want to see it in action? Visit the official ALTCHA Playground to experiment with widget configurations, fine-tune the Proof-of-Work (PoW) settings, and see how the security mechanisms hold up in real-time. + +[Open ALTCHA Playground](https://playground.altcha.org) + +## Features + +- **Frictionless Experience**: Eliminates frustrating visual puzzles by using background **Proof-of-Work (PoW)** for a seamless user journey. +- **Hardware-Resistant Security**: Leverages **Argon2 and Scrypt** memory-bound algorithms to neutralize hardware acceleration (ASICs/GPUs) and sophisticated bot farms. +- **Accessible Code Challenges**: Provides "Enter code from image" fallbacks with built-in **audio support** for visually impaired users. +- **Privacy by Design**: Fully **GDPR compliant** and cookie-free—no tracking, no fingerprinting, and no data collection. +- **Universal Accessibility**: Engineered to exceed **WCAG 2.2 AA** standards, ensuring compliance with the **European Accessibility Act (EAA)**. +- **Lightweight**: Minimal footprint, optimized for rapid page loads and high-performance environments. +- **100% Self-Hosted**: Maintain full sovereignty over your infrastructure with no reliance on third-party API availability. + +## What’s New in v3 + +- **Next-Gen PoW**: Significant performance gains and reduced CPU overhead through an optimized verification mechanism. +- **Advanced Bot Defense**: Native support for **Argon2 and Scrypt**, raising the cost of attack for automated scripts and specialized hardware. +- **Modern UI**: Refined styling options, including a suite of new built-in themes and improved CSS custom property support. +- **Developer Experience**: Improved TypeScript support and streamlined integration. + +### Migrating from v2 + +See [MIGRATION-v2.md](https://github.com/altcha-org/altcha/blob/v3/MIGRATION-v2.md). + +## Examples + +Explore starter templates for popular frameworks: + +- [React](https://github.com/altcha-org/altcha-starter-react-ts) +- [Vue](https://github.com/altcha-org/altcha-starter-vue-ts) +- [Svelte](https://github.com/altcha-org/altcha-starter-svelte-ts) +- [Solid](https://github.com/altcha-org/altcha-starter-solid-ts) +- [Lit](https://github.com/altcha-org/altcha-starter-lit-ts) +- [Angular](https://github.com/altcha-org/altcha-starter-angular) + +## Server Integrations + +- [TypeScript](https://github.com/altcha-org/altcha-lib) +- [Dart](https://github.com/altcha-org/altcha-lib-dart) +- [PHP](https://github.com/altcha-org/altcha-lib-php) +- [Go](https://github.com/altcha-org/altcha-lib-go) +- [Python](https://github.com/altcha-org/altcha-lib-py) +- [Java](https://github.com/altcha-org/altcha-lib-java) +- [Ruby](https://github.com/altcha-org/altcha-lib-rb) +- [Elixir](https://github.com/altcha-org/altcha-lib-ex) +- [Rust](https://github.com/altcha-org/altcha-lib-rs) +- [C++](https://github.com/altcha-org/altcha-lib-cpp) + +## Plugins & CMS + +- [Libraries and plugins](https://altcha.org/docs/v2/libraries/) + +## Usage + +The ALTCHA widget is distributed as a **Web Component**. + +### 1. Install ALTCHA + +```sh +npm install altcha +``` + +Import in your main file: + +```js +import 'altcha'; +``` + +Or load via ` +``` + +### 2. Add `` to Your Forms + +```html +
+ +
+``` + +See [configuration options](#configuration) or the [website integration docs](https://altcha.org/docs/v2/widget-integration). + +### 3. Integrate with Your Server + +Refer to the [server documentation](https://altcha.org/docs/v2/server-integration) for implementation details. + +## Supported Browsers + +ALTCHA works on modern browsers with **Web Crypto API** support (specifically `crypto.subtle` - [caniuse.com](https://caniuse.com/?search=subtle)). + +**Supported**: + +- Chrome 67+ (desktop & Android) +- Edge 79+ +- Firefox 63+ (desktop & Android) +- Safari 11+ (macOS & iOS) +- Any browser supporting Web Components + Web Crypto + +**Not Supported**: + +- Internet Explorer 11 (or older) + +## Bundle Size + +ALTCHA is optimized for performance: + +| Distribution | Size (GZIPped) | +| ---------------------------- | -------------- | +| ALTCHA | 34 kB | +| ALTCHA with all translations | 52 kB | +| Cloudflare Turnstile | 85+ kB | +| hCaptcha | 250+ kB | +| reCAPTCHA | 300+ kB | + +When GZIPped, it totals about 34 kB, making ALTCHA’s widget about ~90% smaller than reCAPTCHA. + +## Content Security Policy (CSP) + +The default bundle includes styles and workers in a single file. For strict CSP compliance, use scripts from `/dist/external`. Learn more in the [documentation](https://altcha.org/docs/v2/widget-integration). + +## Configuration + +### Programmatic Configuration + +The widget provides a global `$altcha` object to manage defaults, register new algorithms, or add custom translations. + +To update an existing widget instance, use the `.configure()` [method](). This is the preferred way to handle complex objects or functions that cannot be passed via HTML attributes. + +```ts +// Set defaults for all future widget instances: +$altcha.defaults.set({ + challenge: 'https://api.example.com/challenge', + debug: true +}); + +// Update a specific instance dynamically: +const widget = document.querySelector('altcha-widget'); +widget.configure({ + workers: 2, + language: 'fr' +}); +``` + +### Attribute Configuration + +For simple implementations, the widget supports a subset of configuration options directly as HTML attributes. For more advanced properties, use the programmatic approach above. + +**Supported Attributes:** + +```html + +``` + +> [!TIP] +> The `configuration` attribute accepts a JSON-encoded string, allowing you to pass complex settings directly in your HTML markup. + +### Core Settings + +- **`name`**: The `name` attribute of the hidden input field containing the payload. (Default: `"altcha"`) +- **`challenge`**: The challenge data or the URL to fetch a new challenge from. +- **`type`**: Visual style of the interaction element (`'native'`, `'checkbox'`, or `'switch'`). +- **`language`**: The ISO alpha-2 language code for localization (requires corresponding i18n file). +- **`workers`**: The number of Web Workers to spawn for proof-of-work calculations. + +### Automation & Timing + +- **`auto`**: Determines when verification triggers automatically (`'off'`, `'onfocus'`, `'onload'`, or `'onsubmit'`). +- **`minDuration`**: The minimum verification time in milliseconds; adds an artificial delay if the PoW is faster. (Default: `500`) +- **`retryOnOutOfMemoryError`**: Automatically attempts to restart verification with fewer workers if the browser runs out of memory (Argon2 and Scrypt only). + +### UI & Display + +- **`display`**: The visual layout mode (`'standard'`, `'bar'`, `'floating'`, `'overlay'`, or `'invisible'`). +- **`barPlacement`**: Vertical position of the widget when `display` is set to `bar` (`'bottom'` or `'top'`). +- **`hideLogo`**: Hides the ALTCHA logo icon. +- **`hideFooter`**: Hides the "ALTCHA" attribution link. +- **`validationMessage`**: Custom validation message for the HTML5 `setCustomValidity` API. + +### Floating Widget Settings + +- **`floatingAnchor`**: The element or CSS selector the floating UI attaches to. Defaults to the first submit button. +- **`floatingPlacement`**: Preferred position relative to the anchor (`'auto'`, `'bottom'`, or `'top'`). +- **`floatingOffset`**: Vertical offset in pixels between the UI and its anchor. (Default: `12`) +- **`floatingPersist`**: Whether the floating widget remains visible after successful verification. +- **`popoverPlacement`**: Preferred position of popovers relative to the widget (`'auto'`, `'bottom'`, or `'top'`). + +### Modal & Challenge Settings + +- **`codeChallengeDisplay`**: UI layout for the code-challenge modal (`'standard'`, `'overlay'`, or `'bottomsheet'`). +- **`overlayContent`**: CSS selector for an element to be mirrored inside the overlay modal. +- **`audioChallengeLanguage`**: Forces a specific language for audio-based challenges. +- **`disableAutoFocus`**: Prevents the code-challenge modal from stealing focus when opened. + +### Advanced & Debugging + +- **`debug`**: Enables verbose logging in the browser console. +- **`test`**: Mocks a successful verification for testing environments. +- **`mockError`**: Forces the widget into a failed state for UI testing. +- **`fetch`**: A custom `fetch` implementation for network requests. +- **`humanInteractionSignature`**: Whether the collector for HIS is enabled (Default: `true`). +- **`setCookie`**: When configured, sends the payload as a cookie. +- **`timeout`**: Verification timeout in milliseconds (Default: `90_000`). +- **`verifyFunction`**: A custom verification handler that overrides default network verification. + +## Algorithms + +ALTCHA supports multiple proof-of-work algorithms. `PBKDF2/*` and `SHA-*` are bundled with the main widget by default. `Argon2` and `Scrypt` are memory-bound algorithms that resist hardware acceleration (ASICs/GPUs) but require importing their workers separately. + +**Supported algorithms:** + +- `PBKDF2/SHA-256` (default, bundled) +- `PBKDF2/SHA-384` (bundled) +- `PBKDF2/SHA-512` (bundled) +- `SHA-256` (bundled) +- `SHA-384` (bundled) +- `SHA-512` (bundled) +- `ARGON2ID` (requires separate worker import) +- `SCRYPT` (requires separate worker import) + +If you use `Argon2` or `Scrypt`, import their workers and register them via the `$altcha.algorithms` global before the widget initializes. + +### Adding Argon2 / Scrypt Workers (Vite) + +Works with both `altcha` and `altcha/external`: + +```ts +import 'altcha'; // or 'altcha/external' +import Argon2idWorker from 'altcha/workers/argon2id?worker'; +import ScryptWorker from 'altcha/workers/scrypt?worker'; + +$altcha.algorithms.set('ARGON2ID', () => new Argon2idWorker()); +$altcha.algorithms.set('SCRYPT', () => new ScryptWorker()); +``` + +### Without Bundler Worker Import Support + +If your environment does not support `?worker` imports, load the prebuilt worker files directly: + +```ts +import 'altcha'; + +$altcha.algorithms.set( + 'ARGON2ID', + () => new Worker('/path/to/node_modules/altcha/dist/workers/argon2id.js') +); +$altcha.algorithms.set( + 'SCRYPT', + () => new Worker('/path/to/node_modules/altcha/dist/workers/scrypt.js') +); +``` + +### Using `altcha/external` + +`altcha/external` excludes all bundled workers, requiring you to register every algorithm explicitly. Use this for full control over which workers are loaded: + +```ts +import 'altcha/external'; +import Argon2idWorker from 'altcha/workers/argon2id?worker'; +import Pbkdf2Worker from 'altcha/workers/pbkdf2?worker'; +import ScryptWorker from 'altcha/workers/scrypt?worker'; +import ShaWorker from 'altcha/workers/sha?worker'; + +$altcha.algorithms.set('PBKDF2/SHA-256', () => new Pbkdf2Worker()); +$altcha.algorithms.set('PBKDF2/SHA-384', () => new Pbkdf2Worker()); +$altcha.algorithms.set('PBKDF2/SHA-512', () => new Pbkdf2Worker()); +$altcha.algorithms.set('SHA-256', () => new ShaWorker()); +$altcha.algorithms.set('SHA-384', () => new ShaWorker()); +$altcha.algorithms.set('SHA-512', () => new ShaWorker()); +$altcha.algorithms.set('ARGON2ID', () => new Argon2idWorker()); +$altcha.algorithms.set('SCRYPT', () => new ScryptWorker()); +``` + +## Cookies + +By default, the widget sends the ALTCHA payload as a form field by creating a hidden input. It can also be configured to send the payload via a cookie. + +To enable this behavior, use the `setCookie` configuration option: + +```ts +widget.configure({ + setCookie: { + name: 'altcha', + path: '/' + } +}); +``` + +`setCookie` accepts the following cookie options: + +```ts +interface SetCookieOptions { + domain?: string; + name?: string; + maxAge?: number; + path?: string; + sameSite?: string; + secure?: boolean; +} +``` + +## Server Configuration + +When the widget fetches a challenge from the server, the server can override widget configuration using either the `X-Altcha-Config` response header or the `configuration` property in the challenge response. + +Example using the `configuration` property in the challenge JSON response to force cookie usage: + +```json +{ + "configuration": { + "setCookie": { + "name": "altcha", + "path": "/submit" + } + }, + "parameters": {}, + "signature": "..." +} +``` + +The `X-Altcha-Config` header must contain a JSON-encoded object with configuration options. + +## Internationalization (i18n) + +ALTCHA supports **50+ languages**. You can import individual language translations or a bundle that includes all of them. + +### Importing Translations + +To import all translations: + +```js +import 'altcha/i18n/all'; +``` + +To import specific languages only: + +```js +import 'altcha/i18n/de'; +import 'altcha/i18n/fr-fr'; +``` + +Alternatively, you can import the combined bundle, which includes both the widget and all translations: + +```js +import 'altcha/i18n'; +``` + +### Language Detection + +The widget automatically detects the language from: + +- The `` attribute +- The user's browser settings (`navigator.languages`) + +To override the language manually, use the `language` attribute: + +```html + +``` + +### Customizing Translations + +You can override default translations by updating the global `$altcha` registry (`globalThis.$altcha.i18n`): + +```js +import 'altcha/i18n/de'; + +$altcha.i18n.set('de', { + ...$altcha.i18n.get('de'), + label: 'Ich bin ein Mensch' // Custom label +}); +``` + +## Code Challenges + +For additional verification, ALTCHA supports **image/audio code challenges** (e.g., "Enter the code from the image"). This feature requires [ALTCHA Sentinel](https://altcha.org/docs/v2/sentinel) or a custom server implementation. + +## Data Obfuscation + +[Data obfuscation]() is supported via an official plugin, which must be imported alongside the widget. This is ideal for protecting sensitive information, such as email addresses, from scrapers until the challenge is solved. + +To obfuscate data, run: + +```sh +npx altcha-lib obfuscate [data] +``` + +### Programmatic Usage + +The plugin exports `ObfuscationPlugin` with static methods `obfuscate` and `deobfuscate` for manual data handling: + +```ts +import { ObfuscationPlugin } from 'altcha/plugins/obfuscation'; + +const obfuscatedData = await ObfuscationPlugin.obfuscate('mailto:hello@example.com'); +``` + +### Widget Integration + +To use the plugin with the widget, ensure `altcha/plugins/obfuscation` is imported before the main library. Use the `data-obfuscated` attribute to provide the Base64-encoded payload: + +```html + + + +``` + +## Methods + +- `configure(options)` - Configures the widget with the given options. See Configuration options above. +- `getConfiguration()` - Returns the current configuration. +- `getState()` - Returns the current `state` of the widget. +- `show()` - Displays the widget (used in some display modes). +- `hide()` - Hides the widget (used in some display modes). +- `reset(state?, err?)` - Resets the internal `state`, optionally with an error. +- `setState(state, err?)` - Manually sets the specified `state`, optionally with an error. +- `updateUI()` - Force UI update or reposition, for example for the floating display mode. +- `verify()` - Initiates the verification process. + +## Events + +- **codechallenge** - Triggers when code-challenge verification is requested. +- **expired** - Triggers when the challenge expires. +- **load** - Triggers when the widget loads. The exported methods become available after this event. +- **outofmemory** - Triggers when an Out-Of-Memory error is received (Argon2 and Scrypt only). +- **serververification** -Triggers upon a server verification. +- **statechange** - Triggers whenever an internal `state` changes. +- **verified** - Triggers when the challenge is verified. + +```ts +enum State { + CODE = 'code', + ERROR = 'error', + VERIFIED = 'verified', + VERIFYING = 'verifying', + UNVERIFIED = 'unverified', + EXPIRED = 'expired' +} +``` + +Using events: + +```js +document.querySelector('altcha-widget').addEventListener('statechange', (ev) => { + // See enum State above + console.log('state:', ev.detail.state); +}); +``` + +> [!IMPORTANT] +> Both programmatic configuration and event listeners have to called/attached after the ALTCHA script loads, such as within `window.addEventListener('load', ...)`. + +## Contributing + +See [Contributing Guide](https://github.com/altcha-org/altcha/blob/main/CONTRIBUTING.md) and please follow our [Code of Conduct](https://github.com/altcha-org/altcha/blob/main/CODE_OF_CONDUCT.md). + +## License + +MIT diff --git a/frontend/node_modules/altcha/dist/external/altcha.css b/frontend/node_modules/altcha/dist/external/altcha.css new file mode 100644 index 0000000..0e78306 --- /dev/null +++ b/frontend/node_modules/altcha/dist/external/altcha.css @@ -0,0 +1 @@ +:root{--altcha-border-color:var(--altcha-color-neutral);--altcha-border-width:1px;--altcha-border-radius:6px;--altcha-color-base:light-dark(oklch(100% 0.00011 271.152),oklch(20.904% 0.00002 271.152));--altcha-color-base-content:light-dark(oklch(20.904% 0.00002 271.152),oklch(100% 0.00011 271.152));--altcha-color-error:oklch(51.284% 0.20527 28.678);--altcha-color-error-content:oklch(100% 0.00011 271.152);--altcha-color-neutral:light-dark(oklch(83.591% 0.0001 271.152),oklch(46.04% 0.00005 271.152));--altcha-color-neutral-content:light-dark(oklch(46.76% 0.00005 271.152),oklch(100% 0.00011 271.152));--altcha-color-primary:oklch(40.279% 0.2449 268.131);--altcha-color-primary-content:oklch(100% 0.00011 271.152);--altcha-color-success:oklch(55.748% 0.18968 142.511);--altcha-color-success-content:oklch(100% 0.00011 271.152);--altcha-checkbox-border-color:light-dark(oklch(66.494% 0.00233 15.434),oklch(51.028% 0.00006 271.152));--altcha-checkbox-border-radius:5px;--altcha-checkbox-border-width:var(--altcha-border-width);--altcha-checkbox-outline:2px solid var(--altcha-checkbox-outline-color);--altcha-checkbox-outline-color:-webkit-focus-ring-color;--altcha-checkbox-outline-offset:2px;--altcha-checkbox-size:22px;--altcha-checkbox-transition-duration:var(--altcha-transition-duration);--altcha-input-background-color:var(--altcha-color-base);--altcha-input-border-radius:3px;--altcha-input-border-width:1px;--altcha-input-color:var(--altcha-color-base-content);--altcha-max-width:320px;--altcha-padding:0.75rem;--altcha-popover-arrow-size:6px;--altcha-popover-color:var(--altcha-border-color);--altcha-shadow:drop-shadow(3px 3px 6px oklch(0% 0 0/0.2));--altcha-spinner-color:var(--altcha-color-base-content);--altcha-switch-background-color:var(--altcha-color-neutral);--altcha-switch-border-radius:calc(infinity*1px);--altcha-switch-height:var(--altcha-checkbox-size);--altcha-switch-padding:0.25rem;--altcha-switch-width:calc(var(--altcha-checkbox-size)*1.75);--altcha-switch-toggle-border-radius:100%;--altcha-switch-toggle-color:var(--altcha-color-neutral-content);--altcha-switch-toggle-size:calc(var(--altcha-switch-height) - var(--altcha-switch-padding)*2);--altcha-transition-duration:0.6s;--altcha-z-index:99999999;--altcha-z-index-popover:999999999}@supports (-moz-appearance:none){:root{--altcha-checkbox-outline-color:var(--altcha-color-primary)}}.altcha{all:revert-layer;display:none;font-family:inherit;font-size:inherit;position:relative}.altcha[data-visible]{display:block}.altcha *,.altcha-popover,.altcha-popover *{all:revert-layer;box-sizing:border-box;font-family:inherit;font-size:inherit;line-height:1.25}.altcha a,.altcha-popover a{color:currentColor;text-decoration:none}.altcha a:hover,.altcha-popover a:hover{color:currentColor}.altcha-main{align-items:start;background-color:var(--altcha-color-base);border:var(--altcha-border-width,1px) solid var(--altcha-border-color);border-radius:var(--altcha-border-radius,0);color:var(--altcha-color-base-content);display:flex;flex-direction:column;gap:.5rem;justify-content:space-between;max-width:var(--altcha-max-width,100%);padding:var(--altcha-padding)}.altcha-main>*{display:flex;width:100%}.altcha-main>:first-child{flex-grow:1}.altcha-checkbox-wrap{align-items:center;display:flex;flex-direction:row;flex-grow:1;gap:.5rem}.altcha-checkbox-wrap>*{display:flex}.altcha-logo{opacity:.7}.altcha-footer{align-items:center;display:flex;flex-grow:1;font-size:.7rem;gap:.5rem;justify-content:flex-end;opacity:.7}.altcha-footer p{margin:0;padding:0}.altcha-error{font-size:.85rem}.altcha-button{align-items:center;background:var(--altcha-color-primary);border:var(--altcha-input-border-width) solid var(--altcha-color-primary);border-radius:var(--altcha-input-border-radius);color:var(--altcha-color-primary-content);cursor:pointer;display:flex;font-size:.9rem;gap:.5rem;padding:.35rem}.altcha-button:focus{border-color:var(--altcha-color-primary);outline:var(--altcha-checkbox-outline);outline-offset:var(--altcha-checkbox-outline-offset)}.altcha-button>.altcha-spinner,.altcha-button>svg{height:20px;width:20px}.altcha-button-secondary{background:transparent;border-color:var(--altcha-color-neutral);color:var(--altcha-color-neutral-content)}.altcha-input{background:var(--altcha-input-background-color);border:var(--altcha-input-border-width) solid var(--altcha-color-neutral);border-radius:var(--altcha-input-border-radius);color:var(--altcha-input-color);flex-grow:1;font-size:1rem;min-width:0;padding:.25rem;width:auto}.altcha-input:focus{border-color:var(--altcha-color-primary);outline:var(--altcha-checkbox-outline);outline-offset:var(--altcha-checkbox-outline-offset)}.altcha-spinner{animation:altcha-rotate .6s linear infinite;border:var(--altcha-checkbox-border-width) solid var(--altcha-spinner-color);border-bottom-color:transparent;border-radius:100%;border-right-color:transparent;opacity:.7}.altcha-popover{background-color:var(--altcha-color-base);border:var(--altcha-border-width) solid var(--altcha-border-color);border-radius:var(--altcha-border-radius);color:var(--altcha-color-base-content);filter:var(--altcha-shadow);left:calc(var(--altcha-padding)/2);max-width:calc(var(--altcha-max-width) - var(--altcha-padding));position:absolute;top:calc(var(--altcha-padding) + var(--altcha-checkbox-size) + var(--altcha-popover-arrow-size));z-index:var(--altcha-z-index-popover)}.altcha-popover-arrow{border-bottom-color:transparent;border:var(--altcha-popover-arrow-size) solid transparent;border-bottom:var(--altcha-popover-arrow-size) solid var(--altcha-popover-color);content:"";height:0;left:calc(var(--altcha-checkbox-size)/2);position:absolute;top:calc(var(--altcha-popover-arrow-size)*-2);width:0}.altcha-popover-content{max-height:100dvh;overflow:auto;padding:var(--altcha-padding)}.altcha-popover[data-top=true][data-display=standard]{bottom:calc(100% - var(--altcha-padding) + var(--altcha-popover-arrow-size));top:auto}.altcha-popover[data-top=true][data-display=standard] .altcha-popover-arrow{border-bottom-color:transparent;border-top-color:var(--altcha-popover-color);bottom:calc(var(--altcha-popover-arrow-size)*-2);top:auto}.altcha-popover[data-variant=error]{--altcha-popover-color:var(--altcha-color-error);background-color:var(--altcha-color-error);border-color:var(--altcha-color-error);color:var(--altcha-color-error-content)}.altcha-popover[data-variant=error] .altcha-popover-content{padding:calc(var(--altcha-padding)/1.5) var(--altcha-padding)}.altcha-popover[data-display=overlay]{animation:altcha-overlay-slidein .5s forwards;top:45%;transform:translate(-50%,-50%)}.altcha-popover[data-display=bottomsheet],.altcha-popover[data-display=overlay]{left:50%;position:fixed;width:var(--altcha-max-width);z-index:var(--altcha-z-index)}.altcha-popover[data-display=bottomsheet]{animation:altcha-bottomsheet-slideup .5s forwards;border-bottom:0;border-bottom-left-radius:0;border-bottom-right-radius:0;bottom:-100%;top:auto;transform:translate(-50%)}.altcha-popover[data-display=bottomsheet] .altcha-popover-content{padding-bottom:calc(var(--altcha-padding)*2)}.altcha-popover-backdrop{background:var(--altcha-color-base-content);bottom:0;left:0;opacity:.1;position:fixed;right:0;top:0;transition:opacity .5s;z-index:var(--altcha-z-index)}.altcha-popover-close{color:var(--altcha-color-base-content);cursor:pointer;display:inline-block;font-size:1rem;height:1.25rem;line-height:.95;position:absolute;right:0;text-align:center;text-shadow:0 0 1px var(--altcha-color-base);top:-1.5rem;width:1.25rem;z-index:var(--altcha-z-index)}[dir=rtl] .altcha-popover{left:auto;right:calc(var(--altcha-padding)/2)}[dir=rtl] .altcha-popover-arrow{left:auto;right:calc(var(--altcha-checkbox-size)/2)}[dir=rtl] .altcha-popover-close{left:0;right:auto}.altcha-popover[data-display=bottomsheet] .altcha-footer,.altcha-popover[data-display=overlay] .altcha-footer{align-items:center;gap:.5rem;justify-content:center;padding-top:1rem}.altcha-popover[data-display=bottomsheet] .altcha-footer svg,.altcha-popover[data-display=overlay] .altcha-footer svg{height:18px;vertical-align:middle;width:18px}.altcha-code-challenge>form{display:flex;flex-direction:column;gap:.5rem}.altcha-code-challenge-title{font-weight:600}.altcha-code-challenge-text{font-size:.85rem}.altcha-code-challenge-image{background:#fff;border:var(--altcha-input-border-width) solid var(--altcha-color-neutral);border-radius:var(--altcha-input-border-radius);height:50px;object-fit:contain}.altcha-code-challenge-row{display:flex;gap:.5rem}.altcha-code-challenge-buttons{align-items:center;display:flex;flex-direction:column;gap:.5rem;justify-content:space-between;margin-top:var(--altcha-padding)}.altcha-code-challenge-buttons button{justify-content:center;width:100%}.altcha-checkbox{position:relative}.altcha-checkbox,.altcha-checkbox input{cursor:pointer;height:var(--altcha-checkbox-size);width:var(--altcha-checkbox-size)}.altcha-checkbox input{appearance:none;background:var(--altcha-input-background-color);border:var(--altcha-checkbox-border-width,2px) solid var(--altcha-checkbox-border-color);border-radius:var(--altcha-checkbox-border-radius);left:0;margin:0;padding:0;position:absolute;top:0}@supports (hanging-punctuation:first) and (font:-apple-system-body) and (-webkit-appearance:none){.altcha-checkbox input:focus{outline-style:solid;outline-width:2px}}.altcha-checkbox input:before{background:var(--altcha-color-neutral);border-radius:var(--altcha-checkbox-border-radius);content:"";display:block;height:100%;transform:scale(0);width:100%}.altcha-checkbox input:checked{background-color:var(--altcha-color-success);border-color:var(--altcha-color-success)}.altcha-checkbox input:checked:before{background-color:var(--altcha-color-success);opacity:0;transform:scale(2.2);transition:all var(--altcha-checkbox-transition-duration) ease;transition-delay:.1s}.altcha-checkbox svg{--altcha-radio-svg-size:calc(var(--altcha-checkbox-size)*0.5);--altcha-radio-svg-offset:calc(var(--altcha-checkbox-size)*0.25);fill:none;height:var(--altcha-radio-svg-size);left:var(--altcha-radio-svg-offset);opacity:0;position:absolute;stroke:currentColor;stroke-dasharray:16px;stroke-dashoffset:16px;stroke-linecap:round;stroke-linejoin:round;stroke-width:2;top:var(--altcha-radio-svg-offset);transform:translateZ(0);width:var(--altcha-radio-svg-size)}.altcha-checkbox input:checked+svg{color:var(--altcha-color-success-content);opacity:1;stroke-dashoffset:0;transition:all var(--altcha-checkbox-transition-duration) ease;transition-delay:.1s}.altcha-checkbox-spinner{display:none;height:var(--altcha-checkbox-size);left:0;position:absolute;top:0;width:var(--altcha-checkbox-size)}.altcha-checkbox[data-loading=true] input{appearance:none;opacity:0;pointer-events:none}.altcha-checkbox[data-loading=true] .altcha-checkbox-spinner{display:block}.altcha-checkbox-native{position:relative}.altcha-checkbox-native,.altcha-checkbox-native input{height:var(--altcha-checkbox-size);width:var(--altcha-checkbox-size)}.altcha-checkbox-native input{margin:0}.altcha-checkbox-native-spinner{display:none;height:var(--altcha-checkbox-size);left:0;position:absolute;top:0;width:var(--altcha-checkbox-size)}.altcha-checkbox-native[data-loading=true] input{appearance:none;opacity:0;pointer-events:none}.altcha-checkbox-native[data-loading=true] .altcha-checkbox-native-spinner{display:block}.altcha-switch{align-items:center;background-color:var(--altcha-switch-background-color);border-radius:var(--altcha-switch-border-radius);display:flex;height:var(--altcha-switch-height);padding:var(--altcha-switch-padding);position:relative;width:var(--altcha-switch-width)}.altcha-switch:focus-within{outline:var(--altcha-checkbox-outline);outline-offset:var(--altcha-checkbox-outline-offset)}.altcha-switch input{appearance:none;cursor:pointer;height:100%;left:0;opacity:0;position:absolute;top:0;width:100%}.altcha-switch-toggle{align-items:center;background-color:var(--altcha-switch-toggle-color);border-radius:var(--altcha-switch-toggle-border-radius);cursor:pointer;display:flex;justify-content:center;left:var(--altcha-switch-padding);position:absolute;transition:width .15s ease-out,left .15s ease-out}.altcha-switch-spinner,.altcha-switch-toggle{height:var(--altcha-switch-toggle-size);width:var(--altcha-switch-toggle-size)}.altcha-switch-spinner{display:none}.altcha-switch[data-loading=true]{pointer-events:none}.altcha-switch[data-loading=true] .altcha-switch-spinner{display:block}.altcha-switch[data-loading=true] .altcha-switch-toggle{background-color:transparent;left:calc(50% - var(--altcha-switch-toggle-size)/2)}[data-state=verified] .altcha-switch{--altcha-switch-background-color:var(--altcha-color-success)}[data-state=verified] .altcha-switch-toggle{background-color:var(--altcha-color-success-content)}[data-state=verified] .altcha-switch-toggle,[dir=rtl] .altcha-switch-toggle{left:calc(100% - var(--altcha-switch-height) + var(--altcha-switch-padding))}[dir=rtl][data-state=verified] .altcha-switch-toggle{left:var(--altcha-switch-padding)}.altcha-floating-arrow{border:6px solid transparent;border-bottom:6px solid var(--altcha-border-color);content:"";height:0;left:12px;position:absolute;top:-12px;width:0}.altcha-overlay-backdrop{bottom:0;left:0;position:fixed;right:0;top:0;transition:opacity var(--altcha-transition-duration);z-index:var(--altcha-z-index)}.altcha-overlay-close{color:currentColor;cursor:pointer;display:inline-block;font-size:1rem;height:1rem;line-height:.85;position:absolute;right:0;text-align:center;text-shadow:0 0 1px var(--altcha-color-base);top:-1.5rem;width:1rem;z-index:var(--altcha-z-index)}.altcha[data-display=overlay]{animation:altcha-overlay-slidein var(--altcha-transition-duration) forwards;filter:var(--altcha-shadow);left:50%;opacity:0;position:fixed;top:45%;transform:translate(-50%,-50%);z-index:var(--altcha-z-index)}.altcha[data-display=overlay] .altcha-main{width:var(--altcha-max-width)}.altcha[data-display=floating]{display:none;filter:var(--altcha-shadow);left:var(--altcha-floating-left,-100%);position:fixed;top:var(--altcha-floating-top,-100%);z-index:var(--altcha-z-index)}.altcha[data-display=floating] .altcha-main{width:var(--altcha-max-width)}.altcha[data-display=floating][data-floating-position=top] .altcha-floating-arrow{border-bottom-color:transparent;border-top-color:var(--altcha-border-color);bottom:-12px;top:auto}.altcha[data-display=floating][data-visible]{display:flex}.altcha[data-display=bar]{bottom:-100%;filter:var(--altcha-shadow);left:0;position:fixed;right:0;transition:bottom var(--altcha-transition-duration),top var(--altcha-transition-duration);z-index:var(--altcha-z-index)}.altcha[data-display=bar] .altcha-main{align-items:center;border-radius:0;border-width:var(--altcha-border-width) 0 0 0;flex-direction:row;max-width:100%!important}.altcha[data-display=bar] .altcha-main>*{width:auto}.altcha[data-display=bar][data-placement=top]{bottom:auto;top:-100%}.altcha[data-display=bar][data-placement=top] .altcha-main{border-width:0 0 var(--altcha-border-width) 0}.altcha[data-display=bar][data-placement=bottom]:not([data-state=unverified]){bottom:0}.altcha[data-display=bar][data-placement=top]:not([data-state=unverified]){top:0}.altcha[data-display=invisible]{display:none}@keyframes altcha-rotate{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}@keyframes altcha-bottomsheet-slideup{to{bottom:0}}@keyframes altcha-overlay-slidein{to{opacity:1;top:50%}} \ No newline at end of file diff --git a/frontend/node_modules/altcha/dist/external/altcha.js b/frontend/node_modules/altcha/dist/external/altcha.js new file mode 100644 index 0000000..4a497cb --- /dev/null +++ b/frontend/node_modules/altcha/dist/external/altcha.js @@ -0,0 +1,7352 @@ +const DEV = false; +var is_array = Array.isArray; +var index_of = Array.prototype.indexOf; +var includes = Array.prototype.includes; +var array_from = Array.from; +var object_keys = Object.keys; +var define_property = Object.defineProperty; +var get_descriptor = Object.getOwnPropertyDescriptor; +var get_descriptors = Object.getOwnPropertyDescriptors; +var object_prototype = Object.prototype; +var array_prototype = Array.prototype; +var get_prototype_of = Object.getPrototypeOf; +var is_extensible = Object.isExtensible; +const noop = () => { +}; +function run_all(arr) { + for (var i = 0; i < arr.length; i++) { + arr[i](); + } +} +function deferred() { + var resolve; + var reject; + var promise = new Promise((res, rej) => { + resolve = res; + reject = rej; + }); + return { promise, resolve, reject }; +} +const DERIVED = 1 << 1; +const EFFECT = 1 << 2; +const RENDER_EFFECT = 1 << 3; +const MANAGED_EFFECT = 1 << 24; +const BLOCK_EFFECT = 1 << 4; +const BRANCH_EFFECT = 1 << 5; +const ROOT_EFFECT = 1 << 6; +const BOUNDARY_EFFECT = 1 << 7; +const CONNECTED = 1 << 9; +const CLEAN = 1 << 10; +const DIRTY = 1 << 11; +const MAYBE_DIRTY = 1 << 12; +const INERT = 1 << 13; +const DESTROYED = 1 << 14; +const REACTION_RAN = 1 << 15; +const DESTROYING = 1 << 25; +const EFFECT_TRANSPARENT = 1 << 16; +const EAGER_EFFECT = 1 << 17; +const HEAD_EFFECT = 1 << 18; +const EFFECT_PRESERVED = 1 << 19; +const USER_EFFECT = 1 << 20; +const WAS_MARKED = 1 << 16; +const REACTION_IS_UPDATING = 1 << 21; +const ASYNC = 1 << 22; +const ERROR_VALUE = 1 << 23; +const STATE_SYMBOL = /* @__PURE__ */ Symbol("$state"); +const LEGACY_PROPS = /* @__PURE__ */ Symbol("legacy props"); +const LOADING_ATTR_SYMBOL = /* @__PURE__ */ Symbol(""); +const ATTRIBUTES_CACHE = /* @__PURE__ */ Symbol("attributes"); +const CLASS_CACHE = /* @__PURE__ */ Symbol("class"); +const STYLE_CACHE = /* @__PURE__ */ Symbol("style"); +const TEXT_CACHE = /* @__PURE__ */ Symbol("text"); +const FORM_RESET_HANDLER = /* @__PURE__ */ Symbol("form reset"); +const STALE_REACTION = new class StaleReactionError extends Error { + name = "StaleReactionError"; + message = "The reaction that called `getAbortSignal()` was re-run or destroyed"; +}(); +const IS_XHTML = ( + // We gotta write it like this because after downleveling the pure comment may end up in the wrong location + !!globalThis.document?.contentType && /* @__PURE__ */ globalThis.document.contentType.includes("xml") +); +const TEXT_NODE = 3; +const COMMENT_NODE = 8; +function equals(value) { + return value === this.v; +} +function safe_not_equal(a, b) { + return a != a ? b == b : a !== b || a !== null && typeof a === "object" || typeof a === "function"; +} +function safe_equals(value) { + return !safe_not_equal(value, this.v); +} +function lifecycle_outside_component(name) { + { + throw new Error(`https://svelte.dev/e/lifecycle_outside_component`); + } +} +function async_derived_orphan() { + { + throw new Error(`https://svelte.dev/e/async_derived_orphan`); + } +} +function effect_in_teardown(rune) { + { + throw new Error(`https://svelte.dev/e/effect_in_teardown`); + } +} +function effect_in_unowned_derived() { + { + throw new Error(`https://svelte.dev/e/effect_in_unowned_derived`); + } +} +function effect_orphan(rune) { + { + throw new Error(`https://svelte.dev/e/effect_orphan`); + } +} +function effect_update_depth_exceeded() { + { + throw new Error(`https://svelte.dev/e/effect_update_depth_exceeded`); + } +} +function hydration_failed() { + { + throw new Error(`https://svelte.dev/e/hydration_failed`); + } +} +function state_descriptors_fixed() { + { + throw new Error(`https://svelte.dev/e/state_descriptors_fixed`); + } +} +function state_prototype_fixed() { + { + throw new Error(`https://svelte.dev/e/state_prototype_fixed`); + } +} +function state_unsafe_mutation() { + { + throw new Error(`https://svelte.dev/e/state_unsafe_mutation`); + } +} +function svelte_boundary_reset_onerror() { + { + throw new Error(`https://svelte.dev/e/svelte_boundary_reset_onerror`); + } +} +let tracing_mode_flag = false; +const TEMPLATE_FRAGMENT = 1; +const TEMPLATE_USE_IMPORT_NODE = 1 << 1; +const HYDRATION_START = "["; +const HYDRATION_START_ELSE = "[!"; +const HYDRATION_START_FAILED = "[?"; +const HYDRATION_END = "]"; +const HYDRATION_ERROR = {}; +const UNINITIALIZED = /* @__PURE__ */ Symbol("uninitialized"); +const NAMESPACE_HTML = "http://www.w3.org/1999/xhtml"; +const NAMESPACE_SVG = "http://www.w3.org/2000/svg"; +const NAMESPACE_MATHML = "http://www.w3.org/1998/Math/MathML"; +const ATTACHMENT_KEY = "@attach"; +let component_context = null; +function set_component_context(context) { + component_context = context; +} +function push(props, runes = false, fn) { + component_context = { + p: component_context, + i: false, + c: null, + e: null, + s: props, + x: null, + r: ( + /** @type {Effect} */ + active_effect + ), + l: null + }; +} +function pop(component2) { + var context = ( + /** @type {ComponentContext} */ + component_context + ); + var effects = context.e; + if (effects !== null) { + context.e = null; + for (var fn of effects) { + create_user_effect(fn); + } + } + if (component2 !== void 0) { + context.x = component2; + } + context.i = true; + component_context = context.p; + return component2 ?? /** @type {T} */ + {}; +} +function is_runes() { + return true; +} +let micro_tasks = []; +function run_micro_tasks() { + var tasks = micro_tasks; + micro_tasks = []; + run_all(tasks); +} +function queue_micro_task(fn) { + if (micro_tasks.length === 0 && !is_flushing_sync) { + var tasks = micro_tasks; + queueMicrotask(() => { + if (tasks === micro_tasks) run_micro_tasks(); + }); + } + micro_tasks.push(fn); +} +function flush_tasks() { + while (micro_tasks.length > 0) { + run_micro_tasks(); + } +} +function derived_inert() { + { + console.warn(`https://svelte.dev/e/derived_inert`); + } +} +function hydration_mismatch(location2) { + { + console.warn(`https://svelte.dev/e/hydration_mismatch`); + } +} +function select_multiple_invalid_value() { + { + console.warn(`https://svelte.dev/e/select_multiple_invalid_value`); + } +} +function svelte_boundary_reset_noop() { + { + console.warn(`https://svelte.dev/e/svelte_boundary_reset_noop`); + } +} +let hydrating = false; +function set_hydrating(value) { + hydrating = value; +} +let hydrate_node; +function set_hydrate_node(node) { + if (node === null) { + hydration_mismatch(); + throw HYDRATION_ERROR; + } + return hydrate_node = node; +} +function hydrate_next() { + return set_hydrate_node(/* @__PURE__ */ get_next_sibling(hydrate_node)); +} +function reset(node) { + if (!hydrating) return; + if (/* @__PURE__ */ get_next_sibling(hydrate_node) !== null) { + hydration_mismatch(); + throw HYDRATION_ERROR; + } + hydrate_node = node; +} +function next(count = 1) { + if (hydrating) { + var i = count; + var node = hydrate_node; + while (i--) { + node = /** @type {TemplateNode} */ + /* @__PURE__ */ get_next_sibling(node); + } + hydrate_node = node; + } +} +function skip_nodes(remove = true) { + var depth = 0; + var node = hydrate_node; + while (true) { + if (node.nodeType === COMMENT_NODE) { + var data = ( + /** @type {Comment} */ + node.data + ); + if (data === HYDRATION_END) { + if (depth === 0) return node; + depth -= 1; + } else if (data === HYDRATION_START || data === HYDRATION_START_ELSE || // "[1", "[2", etc. for if blocks + data[0] === "[" && !isNaN(Number(data.slice(1)))) { + depth += 1; + } + } + var next2 = ( + /** @type {TemplateNode} */ + /* @__PURE__ */ get_next_sibling(node) + ); + if (remove) node.remove(); + node = next2; + } +} +function read_hydration_instruction(node) { + if (!node || node.nodeType !== COMMENT_NODE) { + hydration_mismatch(); + throw HYDRATION_ERROR; + } + return ( + /** @type {Comment} */ + node.data + ); +} +function proxy(value) { + if (typeof value !== "object" || value === null || STATE_SYMBOL in value) { + return value; + } + const prototype = get_prototype_of(value); + if (prototype !== object_prototype && prototype !== array_prototype) { + return value; + } + var sources = /* @__PURE__ */ new Map(); + var is_proxied_array = is_array(value); + var version = /* @__PURE__ */ state(0); + var parent_version = update_version; + var with_parent = (fn) => { + if (update_version === parent_version) { + return fn(); + } + var reaction = active_reaction; + var version2 = update_version; + set_active_reaction(null); + set_update_version(parent_version); + var result = fn(); + set_active_reaction(reaction); + set_update_version(version2); + return result; + }; + if (is_proxied_array) { + sources.set("length", /* @__PURE__ */ state( + /** @type {any[]} */ + value.length + )); + } + return new Proxy( + /** @type {any} */ + value, + { + defineProperty(_, prop2, descriptor) { + if (!("value" in descriptor) || descriptor.configurable === false || descriptor.enumerable === false || descriptor.writable === false) { + state_descriptors_fixed(); + } + var s = sources.get(prop2); + if (s === void 0) { + with_parent(() => { + var s2 = /* @__PURE__ */ state(descriptor.value); + sources.set(prop2, s2); + return s2; + }); + } else { + set(s, descriptor.value, true); + } + return true; + }, + deleteProperty(target, prop2) { + var s = sources.get(prop2); + if (s === void 0) { + if (prop2 in target) { + const s2 = with_parent(() => /* @__PURE__ */ state(UNINITIALIZED)); + sources.set(prop2, s2); + increment(version); + } + } else { + set(s, UNINITIALIZED); + increment(version); + } + return true; + }, + get(target, prop2, receiver) { + if (prop2 === STATE_SYMBOL) { + return value; + } + var s = sources.get(prop2); + var exists = prop2 in target; + if (s === void 0 && (!exists || get_descriptor(target, prop2)?.writable)) { + s = with_parent(() => { + var p = proxy(exists ? target[prop2] : UNINITIALIZED); + var s2 = /* @__PURE__ */ state(p); + return s2; + }); + sources.set(prop2, s); + } + if (s !== void 0) { + var v = get(s); + return v === UNINITIALIZED ? void 0 : v; + } + return Reflect.get(target, prop2, receiver); + }, + getOwnPropertyDescriptor(target, prop2) { + var descriptor = Reflect.getOwnPropertyDescriptor(target, prop2); + if (descriptor && "value" in descriptor) { + var s = sources.get(prop2); + if (s) descriptor.value = get(s); + } else if (descriptor === void 0) { + var source2 = sources.get(prop2); + var value2 = source2?.v; + if (source2 !== void 0 && value2 !== UNINITIALIZED) { + return { + enumerable: true, + configurable: true, + value: value2, + writable: true + }; + } + } + return descriptor; + }, + has(target, prop2) { + if (prop2 === STATE_SYMBOL) { + return true; + } + var s = sources.get(prop2); + var has = s !== void 0 && s.v !== UNINITIALIZED || Reflect.has(target, prop2); + if (s !== void 0 || active_effect !== null && (!has || get_descriptor(target, prop2)?.writable)) { + if (s === void 0) { + s = with_parent(() => { + var p = has ? proxy(target[prop2]) : UNINITIALIZED; + var s2 = /* @__PURE__ */ state(p); + return s2; + }); + sources.set(prop2, s); + } + var value2 = get(s); + if (value2 === UNINITIALIZED) { + return false; + } + } + return has; + }, + set(target, prop2, value2, receiver) { + var s = sources.get(prop2); + var has = prop2 in target; + if (is_proxied_array && prop2 === "length") { + for (var i = value2; i < /** @type {Source} */ + s.v; i += 1) { + var other_s = sources.get(i + ""); + if (other_s !== void 0) { + set(other_s, UNINITIALIZED); + } else if (i in target) { + other_s = with_parent(() => /* @__PURE__ */ state(UNINITIALIZED)); + sources.set(i + "", other_s); + } + } + } + if (s === void 0) { + if (!has || get_descriptor(target, prop2)?.writable) { + s = with_parent(() => /* @__PURE__ */ state(void 0)); + set(s, proxy(value2)); + sources.set(prop2, s); + } + } else { + has = s.v !== UNINITIALIZED; + var p = with_parent(() => proxy(value2)); + set(s, p); + } + var descriptor = Reflect.getOwnPropertyDescriptor(target, prop2); + if (descriptor?.set) { + descriptor.set.call(receiver, value2); + } + if (!has) { + if (is_proxied_array && typeof prop2 === "string") { + var ls = ( + /** @type {Source} */ + sources.get("length") + ); + var n = Number(prop2); + if (Number.isInteger(n) && n >= ls.v) { + set(ls, n + 1); + } + } + increment(version); + } + return true; + }, + ownKeys(target) { + get(version); + var own_keys = Reflect.ownKeys(target).filter((key3) => { + var source3 = sources.get(key3); + return source3 === void 0 || source3.v !== UNINITIALIZED; + }); + for (var [key2, source2] of sources) { + if (source2.v !== UNINITIALIZED && !(key2 in target)) { + own_keys.push(key2); + } + } + return own_keys; + }, + setPrototypeOf() { + state_prototype_fixed(); + } + } + ); +} +function get_proxied_value(value) { + try { + if (value !== null && typeof value === "object" && STATE_SYMBOL in value) { + return value[STATE_SYMBOL]; + } + } catch { + } + return value; +} +function is(a, b) { + return Object.is(get_proxied_value(a), get_proxied_value(b)); +} +var $window; +var $document; +var is_firefox; +var first_child_getter; +var next_sibling_getter; +function init_operations() { + if ($window !== void 0) { + return; + } + $window = window; + $document = document; + is_firefox = /Firefox/.test(navigator.userAgent); + var element_prototype = Element.prototype; + var node_prototype = Node.prototype; + var text_prototype = Text.prototype; + first_child_getter = get_descriptor(node_prototype, "firstChild").get; + next_sibling_getter = get_descriptor(node_prototype, "nextSibling").get; + if (is_extensible(element_prototype)) { + element_prototype[CLASS_CACHE] = void 0; + element_prototype[ATTRIBUTES_CACHE] = null; + element_prototype[STYLE_CACHE] = void 0; + element_prototype.__e = void 0; + } + if (is_extensible(text_prototype)) { + text_prototype[TEXT_CACHE] = void 0; + } +} +function create_text(value = "") { + return document.createTextNode(value); +} +// @__NO_SIDE_EFFECTS__ +function get_first_child(node) { + return ( + /** @type {TemplateNode | null} */ + first_child_getter.call(node) + ); +} +// @__NO_SIDE_EFFECTS__ +function get_next_sibling(node) { + return ( + /** @type {TemplateNode | null} */ + next_sibling_getter.call(node) + ); +} +function child(node, is_text) { + if (!hydrating) { + return /* @__PURE__ */ get_first_child(node); + } + var child2 = /* @__PURE__ */ get_first_child(hydrate_node); + if (child2 === null) { + child2 = hydrate_node.appendChild(create_text()); + } else if (is_text && child2.nodeType !== TEXT_NODE) { + var text2 = create_text(); + child2?.before(text2); + set_hydrate_node(text2); + return text2; + } + if (is_text) { + merge_text_nodes( + /** @type {Text} */ + child2 + ); + } + set_hydrate_node(child2); + return child2; +} +function first_child(node, is_text = false) { + if (!hydrating) { + var first = /* @__PURE__ */ get_first_child(node); + if (first instanceof Comment && first.data === "") return /* @__PURE__ */ get_next_sibling(first); + return first; + } + if (is_text) { + if (hydrate_node?.nodeType !== TEXT_NODE) { + var text2 = create_text(); + hydrate_node?.before(text2); + set_hydrate_node(text2); + return text2; + } + merge_text_nodes( + /** @type {Text} */ + hydrate_node + ); + } + return hydrate_node; +} +function sibling(node, count = 1, is_text = false) { + let next_sibling = hydrating ? hydrate_node : node; + var last_sibling; + while (count--) { + last_sibling = next_sibling; + next_sibling = /** @type {TemplateNode} */ + /* @__PURE__ */ get_next_sibling(next_sibling); + } + if (!hydrating) { + return next_sibling; + } + if (is_text) { + if (next_sibling?.nodeType !== TEXT_NODE) { + var text2 = create_text(); + if (next_sibling === null) { + last_sibling?.after(text2); + } else { + next_sibling.before(text2); + } + set_hydrate_node(text2); + return text2; + } + merge_text_nodes( + /** @type {Text} */ + next_sibling + ); + } + set_hydrate_node(next_sibling); + return next_sibling; +} +function clear_text_content(node) { + node.textContent = ""; +} +function should_defer_append() { + return false; +} +function create_element(tag, namespace, is2) { + let options = void 0; + return ( + /** @type {T extends keyof HTMLElementTagNameMap ? HTMLElementTagNameMap[T] : Element} */ + document.createElementNS(namespace ?? NAMESPACE_HTML, tag, options) + ); +} +function merge_text_nodes(text2) { + if ( + /** @type {string} */ + text2.nodeValue.length < 65536 + ) { + return; + } + let next2 = text2.nextSibling; + while (next2 !== null && next2.nodeType === TEXT_NODE) { + next2.remove(); + text2.nodeValue += /** @type {string} */ + next2.nodeValue; + next2 = text2.nextSibling; + } +} +function handle_error(error) { + var effect2 = active_effect; + if (effect2 === null) { + active_reaction.f |= ERROR_VALUE; + return error; + } + if ((effect2.f & REACTION_RAN) === 0 && (effect2.f & EFFECT) === 0) { + throw error; + } + invoke_error_boundary(error, effect2); +} +function invoke_error_boundary(error, effect2) { + while (effect2 !== null) { + if ((effect2.f & BOUNDARY_EFFECT) !== 0) { + if ((effect2.f & REACTION_RAN) === 0) { + throw error; + } + try { + effect2.b.error(error); + return; + } catch (e) { + error = e; + } + } + effect2 = effect2.parent; + } + throw error; +} +const STATUS_MASK = -7169; +function set_signal_status(signal, status) { + signal.f = signal.f & STATUS_MASK | status; +} +function update_derived_status(derived2) { + if ((derived2.f & CONNECTED) !== 0 || derived2.deps === null) { + set_signal_status(derived2, CLEAN); + } else { + set_signal_status(derived2, MAYBE_DIRTY); + } +} +function clear_marked(deps) { + if (deps === null) return; + for (const dep of deps) { + if ((dep.f & DERIVED) === 0 || (dep.f & WAS_MARKED) === 0) { + continue; + } + dep.f ^= WAS_MARKED; + clear_marked( + /** @type {Derived} */ + dep.deps + ); + } +} +function defer_effect(effect2, dirty_effects, maybe_dirty_effects) { + if ((effect2.f & DIRTY) !== 0) { + dirty_effects.add(effect2); + } else if ((effect2.f & MAYBE_DIRTY) !== 0) { + maybe_dirty_effects.add(effect2); + } + clear_marked(effect2.deps); + set_signal_status(effect2, CLEAN); +} +function subscribe_to_store(store2, run, invalidate) { + if (store2 == null) { + run(void 0); + return noop; + } + const unsub = untrack( + () => store2.subscribe( + run, + // @ts-expect-error + invalidate + ) + ); + return unsub.unsubscribe ? () => unsub.unsubscribe() : unsub; +} +const subscriber_queue = []; +function writable(value, start = noop) { + let stop = null; + const subscribers = /* @__PURE__ */ new Set(); + function set2(new_value) { + if (safe_not_equal(value, new_value)) { + value = new_value; + if (stop) { + const run_queue = !subscriber_queue.length; + for (const subscriber of subscribers) { + subscriber[1](); + subscriber_queue.push(subscriber, value); + } + if (run_queue) { + for (let i = 0; i < subscriber_queue.length; i += 2) { + subscriber_queue[i][0](subscriber_queue[i + 1]); + } + subscriber_queue.length = 0; + } + } + } + } + function update(fn) { + set2(fn( + /** @type {T} */ + value + )); + } + function subscribe(run, invalidate = noop) { + const subscriber = [run, invalidate]; + subscribers.add(subscriber); + if (subscribers.size === 1) { + stop = start(set2, update) || noop; + } + run( + /** @type {T} */ + value + ); + return () => { + subscribers.delete(subscriber); + if (subscribers.size === 0 && stop) { + stop(); + stop = null; + } + }; + } + return { set: set2, update, subscribe }; +} +function get$1(store2) { + let value; + subscribe_to_store(store2, (_) => value = _)(); + return value; +} +let IS_UNMOUNTED = /* @__PURE__ */ Symbol("unmounted"); +function store_get(store2, store_name, stores) { + const entry = stores[store_name] ??= { + store: null, + source: /* @__PURE__ */ mutable_source(void 0), + unsubscribe: noop + }; + if (entry.store !== store2 && !(IS_UNMOUNTED in stores)) { + entry.unsubscribe(); + entry.store = store2 ?? null; + if (store2 == null) { + entry.source.v = void 0; + entry.unsubscribe = noop; + } else { + var is_synchronous_callback = true; + entry.unsubscribe = subscribe_to_store(store2, (v) => { + if (is_synchronous_callback) { + entry.source.v = v; + } else { + set(entry.source, v); + } + }); + is_synchronous_callback = false; + } + } + if (store2 && IS_UNMOUNTED in stores) { + return get$1(store2); + } + return get(entry.source); +} +function setup_stores() { + const stores = {}; + function cleanup() { + teardown(() => { + for (var store_name in stores) { + const ref = stores[store_name]; + ref.unsubscribe(); + } + define_property(stores, IS_UNMOUNTED, { + enumerable: false, + value: true + }); + }); + } + return [stores, cleanup]; +} +let first_batch = null; +let last_batch = null; +let current_batch = null; +let previous_batch = null; +let batch_values = null; +let last_scheduled_effect = null; +let is_flushing_sync = false; +let is_processing = false; +let collected_effects = null; +let legacy_updates = null; +var flush_count = 0; +var source_stacks = /* @__PURE__ */ new Set(); +let uid = 1; +class Batch { + id = uid++; + /** True as soon as `#process` was called */ + #started = false; + linked = true; + /** @type {Batch | null} */ + #prev = null; + /** @type {Batch | null} */ + #next = null; + /** @type {Map>>} */ + async_deriveds = /* @__PURE__ */ new Map(); + /** + * The current values of any signals that are updated in this batch. + * Tuple format: [value, is_derived] (note: is_derived is false for deriveds, too, if they were overridden via assignment) + * They keys of this map are identical to `this.#previous` + * @type {Map} + */ + current = /* @__PURE__ */ new Map(); + /** + * The values of any signals (sources and deriveds) that are updated in this batch _before_ those updates took place. + * They keys of this map are identical to `this.#current` + * @type {Map} + */ + previous = /* @__PURE__ */ new Map(); + /** + * Async effects which this batch doesn't take into account anymore when calculating blockers, + * as it has a value for it already. + * @type {Set} + */ + unblocked = /* @__PURE__ */ new Set(); + /** + * When the batch is committed (and the DOM is updated), we need to remove old branches + * and append new ones by calling the functions added inside (if/each/key/etc) blocks + * @type {Set<(batch: Batch) => void>} + */ + #commit_callbacks = /* @__PURE__ */ new Set(); + /** + * If a fork is discarded, we need to destroy any effects that are no longer needed + * @type {Set<(batch: Batch) => void>} + */ + #discard_callbacks = /* @__PURE__ */ new Set(); + /** + * Callbacks that should run only when a fork is committed. + * @type {Set<(batch: Batch) => void>} + */ + #fork_commit_callbacks = /* @__PURE__ */ new Set(); + /** + * The number of async effects that are currently in flight + */ + #pending = 0; + /** + * Async effects that are currently in flight, _not_ inside a pending boundary + * @type {Map} + */ + #blocking_pending = /* @__PURE__ */ new Map(); + /** + * A deferred that resolves when the batch is committed, used with `settled()` + * TODO replace with Promise.withResolvers once supported widely enough + * @type {{ promise: Promise, resolve: (value?: any) => void, reject: (reason: unknown) => void } | null} + */ + #deferred = null; + /** + * The root effects that need to be flushed + * @type {Effect[]} + */ + #roots = []; + /** + * Effects created while this batch was active. + * @type {Effect[]} + */ + #new_effects = []; + /** + * Deferred effects (which run after async work has completed) that are DIRTY + * @type {Set} + */ + #dirty_effects = /* @__PURE__ */ new Set(); + /** + * Deferred effects that are MAYBE_DIRTY + * @type {Set} + */ + #maybe_dirty_effects = /* @__PURE__ */ new Set(); + /** + * A map of branches that still exist, but will be destroyed when this batch + * is committed — we skip over these during `process`. + * The value contains child effects that were dirty/maybe_dirty before being reset, + * so they can be rescheduled if the branch survives. + * @type {Map} + */ + #skipped_branches = /* @__PURE__ */ new Map(); + /** + * Inverse of #skipped_branches which we need to tell prior batches to unskip them when committing + * @type {Set} + */ + #unskipped_branches = /* @__PURE__ */ new Set(); + is_fork = false; + #decrement_queued = false; + #is_deferred() { + if (this.is_fork) return true; + for (const effect2 of this.#blocking_pending.keys()) { + var e = effect2; + var skipped = false; + while (e.parent !== null) { + if (this.#skipped_branches.has(e)) { + skipped = true; + break; + } + e = e.parent; + } + if (!skipped) { + return true; + } + } + return false; + } + /** + * Add an effect to the #skipped_branches map and reset its children + * @param {Effect} effect + */ + skip_effect(effect2) { + if (!this.#skipped_branches.has(effect2)) { + this.#skipped_branches.set(effect2, { d: [], m: [] }); + } + this.#unskipped_branches.delete(effect2); + } + /** + * Remove an effect from the #skipped_branches map and reschedule + * any tracked dirty/maybe_dirty child effects + * @param {Effect} effect + * @param {(e: Effect) => void} callback + */ + unskip_effect(effect2, callback = (e) => this.schedule(e)) { + var tracked = this.#skipped_branches.get(effect2); + if (tracked) { + this.#skipped_branches.delete(effect2); + for (var e of tracked.d) { + set_signal_status(e, DIRTY); + callback(e); + } + for (e of tracked.m) { + set_signal_status(e, MAYBE_DIRTY); + callback(e); + } + } + this.#unskipped_branches.add(effect2); + } + #process() { + this.#started = true; + if (flush_count++ > 1e3) { + this.#unlink(); + infinite_loop_guard(); + } + if (!this.#is_deferred()) { + for (const e of this.#dirty_effects) { + this.#maybe_dirty_effects.delete(e); + set_signal_status(e, DIRTY); + this.schedule(e); + } + for (const e of this.#maybe_dirty_effects) { + set_signal_status(e, MAYBE_DIRTY); + this.schedule(e); + } + } + const roots = this.#roots; + this.#roots = []; + this.apply(); + var effects = collected_effects = []; + var render_effects = []; + var updates = legacy_updates = []; + for (const root2 of roots) { + try { + this.#traverse(root2, effects, render_effects); + } catch (e) { + reset_all(root2); + throw e; + } + } + current_batch = null; + if (updates.length > 0) { + var batch = Batch.ensure(); + for (const e of updates) { + batch.schedule(e); + } + } + collected_effects = null; + legacy_updates = null; + if (this.#is_deferred()) { + this.#defer_effects(render_effects); + this.#defer_effects(effects); + for (const [e, t] of this.#skipped_branches) { + reset_branch(e, t); + } + if (updates.length > 0) { + /** @type {unknown} */ + current_batch.#process(); + } + return; + } + const earlier_batch = this.#find_earlier_batch(); + if (earlier_batch) { + earlier_batch.#merge(this); + return; + } + this.#dirty_effects.clear(); + this.#maybe_dirty_effects.clear(); + for (const fn of this.#commit_callbacks) fn(this); + this.#commit_callbacks.clear(); + previous_batch = this; + flush_queued_effects(render_effects); + flush_queued_effects(effects); + previous_batch = null; + this.#deferred?.resolve(); + var next_batch = ( + /** @type {Batch | null} */ + /** @type {unknown} */ + current_batch + ); + if (this.linked && this.#pending === 0) { + this.#unlink(); + } + if (this.#roots.length > 0) { + if (next_batch === null) { + next_batch = this; + this.#link(); + } + const batch2 = next_batch; + batch2.#roots.push(...this.#roots.filter((r2) => !batch2.#roots.includes(r2))); + } + if (next_batch !== null) { + next_batch.#process(); + } + } + /** + * Traverse the effect tree, executing effects or stashing + * them for later execution as appropriate + * @param {Effect} root + * @param {Effect[]} effects + * @param {Effect[]} render_effects + */ + #traverse(root2, effects, render_effects) { + root2.f ^= CLEAN; + var effect2 = root2.first; + while (effect2 !== null) { + var flags2 = effect2.f; + var is_branch = (flags2 & (BRANCH_EFFECT | ROOT_EFFECT)) !== 0; + var is_skippable_branch = is_branch && (flags2 & CLEAN) !== 0; + var skip = is_skippable_branch || (flags2 & INERT) !== 0 || this.#skipped_branches.has(effect2); + if (!skip && effect2.fn !== null) { + if (is_branch) { + effect2.f ^= CLEAN; + } else if ((flags2 & EFFECT) !== 0) { + effects.push(effect2); + } else if (is_dirty(effect2)) { + if ((flags2 & BLOCK_EFFECT) !== 0) this.#maybe_dirty_effects.add(effect2); + update_effect(effect2); + } + var child2 = effect2.first; + if (child2 !== null) { + effect2 = child2; + continue; + } + } + while (effect2 !== null) { + var next2 = effect2.next; + if (next2 !== null) { + effect2 = next2; + break; + } + effect2 = effect2.parent; + } + } + } + #find_earlier_batch() { + var batch = this.#prev; + while (batch !== null) { + if (!batch.is_fork) { + for (const [value, [, is_derived]] of this.current) { + if (batch.current.has(value) && !is_derived) { + return batch; + } + } + } + batch = batch.#prev; + } + return null; + } + /** + * @param {Batch} batch + */ + #merge(batch) { + for (const [source2, value] of batch.current) { + if (!this.previous.has(source2) && batch.previous.has(source2)) { + this.previous.set(source2, batch.previous.get(source2)); + } + this.current.set(source2, value); + } + for (const [effect2, deferred2] of batch.async_deriveds) { + const d = this.async_deriveds.get(effect2); + if (d) deferred2.promise.then(d.resolve); + } + const mark = (value) => { + var reactions = value.reactions; + if (reactions === null) return; + for (const reaction of reactions) { + var flags2 = reaction.f; + if ((flags2 & DERIVED) !== 0) { + mark( + /** @type {Derived} */ + reaction + ); + } else { + var effect2 = ( + /** @type {Effect} */ + reaction + ); + if (flags2 & (ASYNC | BLOCK_EFFECT) && !this.async_deriveds.has(effect2)) { + this.#maybe_dirty_effects.delete(effect2); + set_signal_status(effect2, DIRTY); + this.schedule(effect2); + } + } + } + }; + for (const source2 of this.current.keys()) { + mark(source2); + } + this.oncommit(() => batch.discard()); + batch.#unlink(); + current_batch = this; + this.#process(); + } + /** + * @param {Effect[]} effects + */ + #defer_effects(effects) { + for (var i = 0; i < effects.length; i += 1) { + defer_effect(effects[i], this.#dirty_effects, this.#maybe_dirty_effects); + } + } + /** + * Associate a change to a given source with the current + * batch, noting its previous and current values + * @param {Value} source + * @param {any} value + * @param {boolean} [is_derived] + */ + capture(source2, value, is_derived = false) { + if (source2.v !== UNINITIALIZED && !this.previous.has(source2)) { + this.previous.set(source2, source2.v); + } + if ((source2.f & ERROR_VALUE) === 0) { + this.current.set(source2, [value, is_derived]); + batch_values?.set(source2, value); + } + if (!this.is_fork) { + source2.v = value; + } + } + activate() { + current_batch = this; + } + deactivate() { + current_batch = null; + batch_values = null; + } + flush() { + try { + if (DEV) ; + is_processing = true; + current_batch = this; + this.#process(); + } finally { + flush_count = 0; + last_scheduled_effect = null; + collected_effects = null; + legacy_updates = null; + is_processing = false; + current_batch = null; + batch_values = null; + old_values.clear(); + } + } + discard() { + for (const fn of this.#discard_callbacks) fn(this); + this.#discard_callbacks.clear(); + this.#fork_commit_callbacks.clear(); + this.#unlink(); + } + /** + * @param {Effect} effect + */ + register_created_effect(effect2) { + this.#new_effects.push(effect2); + } + #commit() { + this.#unlink(); + for (let batch = first_batch; batch !== null; batch = batch.#next) { + var is_earlier = batch.id < this.id; + var sources = []; + for (const [source3, [value, is_derived]] of this.current) { + if (batch.current.has(source3)) { + var batch_value = ( + /** @type {[any, boolean]} */ + batch.current.get(source3)[0] + ); + if (is_earlier && value !== batch_value) { + batch.current.set(source3, [value, is_derived]); + } else { + continue; + } + } + sources.push(source3); + } + if (is_earlier) { + for (const [effect2, deferred2] of this.async_deriveds) { + const d = batch.async_deriveds.get(effect2); + if (d) deferred2.promise.then(d.resolve); + } + } + if (!batch.#started) continue; + var others = [...batch.current.keys()].filter((s) => !this.current.has(s)); + if (others.length === 0) { + if (is_earlier) { + batch.discard(); + } + } else if (sources.length > 0) { + if (is_earlier) { + for (const unskipped of this.#unskipped_branches) { + batch.unskip_effect(unskipped, (e) => { + if ((e.f & (BLOCK_EFFECT | ASYNC)) !== 0) { + batch.schedule(e); + } else { + batch.#defer_effects([e]); + } + }); + } + } + batch.activate(); + var marked = /* @__PURE__ */ new Set(); + var checked = /* @__PURE__ */ new Map(); + for (var source2 of sources) { + mark_effects(source2, others, marked, checked); + } + checked = /* @__PURE__ */ new Map(); + var current_unequal = [...batch.current.keys()].filter( + (c) => this.current.has(c) ? ( + /** @type {[any, boolean]} */ + this.current.get(c)[0] !== c.v + ) : true + ); + if (current_unequal.length > 0) { + for (const effect2 of this.#new_effects) { + if ((effect2.f & (DESTROYED | INERT | EAGER_EFFECT)) === 0 && depends_on(effect2, current_unequal, checked)) { + if ((effect2.f & (ASYNC | BLOCK_EFFECT)) !== 0) { + set_signal_status(effect2, DIRTY); + batch.schedule(effect2); + } else { + batch.#dirty_effects.add(effect2); + } + } + } + } + if (batch.#roots.length > 0) { + batch.apply(); + for (var root2 of batch.#roots) { + batch.#traverse(root2, [], []); + } + batch.#roots = []; + } + batch.deactivate(); + } + } + } + /** + * @param {boolean} blocking + * @param {Effect} effect + */ + increment(blocking, effect2) { + this.#pending += 1; + if (blocking) { + let blocking_pending_count = this.#blocking_pending.get(effect2) ?? 0; + this.#blocking_pending.set(effect2, blocking_pending_count + 1); + } + } + /** + * @param {boolean} blocking + * @param {Effect} effect + */ + decrement(blocking, effect2) { + this.#pending -= 1; + if (blocking) { + let blocking_pending_count = this.#blocking_pending.get(effect2) ?? 0; + if (blocking_pending_count === 1) { + this.#blocking_pending.delete(effect2); + } else { + this.#blocking_pending.set(effect2, blocking_pending_count - 1); + } + } + if (this.#decrement_queued) return; + this.#decrement_queued = true; + queue_micro_task(() => { + this.#decrement_queued = false; + if (this.linked) { + this.flush(); + } + }); + } + /** + * @param {Set} dirty_effects + * @param {Set} maybe_dirty_effects + */ + transfer_effects(dirty_effects, maybe_dirty_effects) { + for (const e of dirty_effects) { + this.#dirty_effects.add(e); + } + for (const e of maybe_dirty_effects) { + this.#maybe_dirty_effects.add(e); + } + dirty_effects.clear(); + maybe_dirty_effects.clear(); + } + /** @param {(batch: Batch) => void} fn */ + oncommit(fn) { + this.#commit_callbacks.add(fn); + } + /** @param {(batch: Batch) => void} fn */ + ondiscard(fn) { + this.#discard_callbacks.add(fn); + } + /** @param {(batch: Batch) => void} fn */ + on_fork_commit(fn) { + this.#fork_commit_callbacks.add(fn); + } + run_fork_commit_callbacks() { + for (const fn of this.#fork_commit_callbacks) fn(this); + this.#fork_commit_callbacks.clear(); + } + settled() { + return (this.#deferred ??= deferred()).promise; + } + static ensure() { + if (current_batch === null) { + const batch = current_batch = new Batch(); + batch.#link(); + if (!is_processing && !is_flushing_sync) { + queue_micro_task(() => { + if (!batch.#started) { + batch.flush(); + } + }); + } + } + return current_batch; + } + apply() { + { + batch_values = null; + return; + } + } + /** + * + * @param {Effect} effect + */ + schedule(effect2) { + last_scheduled_effect = effect2; + if (effect2.b?.is_pending && (effect2.f & (EFFECT | RENDER_EFFECT | MANAGED_EFFECT)) !== 0 && (effect2.f & REACTION_RAN) === 0) { + effect2.b.defer_effect(effect2); + return; + } + var e = effect2; + while (e.parent !== null) { + e = e.parent; + var flags2 = e.f; + if (collected_effects !== null && e === active_effect) { + if ((active_reaction === null || (active_reaction.f & DERIVED) === 0) && true) { + return; + } + } + if ((flags2 & (ROOT_EFFECT | BRANCH_EFFECT)) !== 0) { + if ((flags2 & CLEAN) === 0) { + return; + } + e.f ^= CLEAN; + } + } + this.#roots.push(e); + } + #link() { + if (last_batch === null) { + first_batch = last_batch = this; + } else { + last_batch.#next = this; + this.#prev = last_batch; + } + last_batch = this; + } + #unlink() { + var prev = this.#prev; + var next2 = this.#next; + if (prev === null) { + first_batch = next2; + } else { + prev.#next = next2; + } + if (next2 === null) { + last_batch = prev; + } else { + next2.#prev = prev; + } + this.linked = false; + } +} +function flushSync(fn) { + var was_flushing_sync = is_flushing_sync; + is_flushing_sync = true; + try { + var result; + if (fn) ; + while (true) { + flush_tasks(); + if (current_batch === null) { + return ( + /** @type {T} */ + result + ); + } + current_batch.flush(); + } + } finally { + is_flushing_sync = was_flushing_sync; + } +} +function infinite_loop_guard() { + try { + effect_update_depth_exceeded(); + } catch (error) { + invoke_error_boundary(error, last_scheduled_effect); + } +} +let eager_block_effects = null; +function flush_queued_effects(effects) { + var length = effects.length; + if (length === 0) return; + var i = 0; + while (i < length) { + var effect2 = effects[i++]; + if ((effect2.f & (DESTROYED | INERT)) === 0 && is_dirty(effect2)) { + eager_block_effects = /* @__PURE__ */ new Set(); + update_effect(effect2); + if (effect2.deps === null && effect2.first === null && effect2.nodes === null && effect2.teardown === null && effect2.ac === null) { + unlink_effect(effect2); + } + if (eager_block_effects?.size > 0) { + old_values.clear(); + for (const e of eager_block_effects) { + if ((e.f & (DESTROYED | INERT)) !== 0) continue; + const ordered_effects = [e]; + let ancestor = e.parent; + while (ancestor !== null) { + if (eager_block_effects.has(ancestor)) { + eager_block_effects.delete(ancestor); + ordered_effects.push(ancestor); + } + ancestor = ancestor.parent; + } + for (let j = ordered_effects.length - 1; j >= 0; j--) { + const e2 = ordered_effects[j]; + if ((e2.f & (DESTROYED | INERT)) !== 0) continue; + update_effect(e2); + } + } + eager_block_effects.clear(); + } + } + } + eager_block_effects = null; +} +function mark_effects(value, sources, marked, checked) { + if (marked.has(value)) return; + marked.add(value); + if (value.reactions !== null) { + for (const reaction of value.reactions) { + const flags2 = reaction.f; + if ((flags2 & DERIVED) !== 0) { + mark_effects( + /** @type {Derived} */ + reaction, + sources, + marked, + checked + ); + } else if ((flags2 & (ASYNC | BLOCK_EFFECT)) !== 0 && (flags2 & DIRTY) === 0 && depends_on(reaction, sources, checked)) { + set_signal_status(reaction, DIRTY); + schedule_effect( + /** @type {Effect} */ + reaction + ); + } + } + } +} +function depends_on(reaction, sources, checked) { + const depends = checked.get(reaction); + if (depends !== void 0) return depends; + if (reaction.deps !== null) { + for (const dep of reaction.deps) { + if (includes.call(sources, dep)) { + return true; + } + if ((dep.f & DERIVED) !== 0 && depends_on( + /** @type {Derived} */ + dep, + sources, + checked + )) { + checked.set( + /** @type {Derived} */ + dep, + true + ); + return true; + } + } + } + checked.set(reaction, false); + return false; +} +function schedule_effect(effect2) { + current_batch.schedule(effect2); +} +function reset_branch(effect2, tracked) { + if ((effect2.f & BRANCH_EFFECT) !== 0 && (effect2.f & CLEAN) !== 0) { + return; + } + if ((effect2.f & DIRTY) !== 0) { + tracked.d.push(effect2); + } else if ((effect2.f & MAYBE_DIRTY) !== 0) { + tracked.m.push(effect2); + } + set_signal_status(effect2, CLEAN); + var e = effect2.first; + while (e !== null) { + reset_branch(e, tracked); + e = e.next; + } +} +function reset_all(effect2) { + set_signal_status(effect2, CLEAN); + var e = effect2.first; + while (e !== null) { + reset_all(e); + e = e.next; + } +} +function createSubscriber(start) { + let subscribers = 0; + let version = source(0); + let stop; + return () => { + if (effect_tracking()) { + get(version); + render_effect(() => { + if (subscribers === 0) { + stop = untrack(() => start(() => increment(version))); + } + subscribers += 1; + return () => { + queue_micro_task(() => { + subscribers -= 1; + if (subscribers === 0) { + stop?.(); + stop = void 0; + increment(version); + } + }); + }; + }); + } + }; +} +var flags = EFFECT_TRANSPARENT | EFFECT_PRESERVED; +function boundary(node, props, children, transform_error) { + new Boundary(node, props, children, transform_error); +} +class Boundary { + /** @type {Boundary | null} */ + parent; + is_pending = false; + /** + * API-level transformError transform function. Transforms errors before they reach the `failed` snippet. + * Inherited from parent boundary, or defaults to identity. + * @type {(error: unknown) => unknown} + */ + transform_error; + /** @type {TemplateNode} */ + #anchor; + /** @type {TemplateNode | null} */ + #hydrate_open = hydrating ? hydrate_node : null; + /** @type {BoundaryProps} */ + #props; + /** @type {((anchor: Node) => void)} */ + #children; + /** @type {Effect} */ + #effect; + /** @type {Effect | null} */ + #main_effect = null; + /** @type {Effect | null} */ + #pending_effect = null; + /** @type {Effect | null} */ + #failed_effect = null; + /** @type {DocumentFragment | null} */ + #offscreen_fragment = null; + #local_pending_count = 0; + #pending_count = 0; + #pending_count_update_queued = false; + /** @type {Set} */ + #dirty_effects = /* @__PURE__ */ new Set(); + /** @type {Set} */ + #maybe_dirty_effects = /* @__PURE__ */ new Set(); + /** + * A source containing the number of pending async deriveds/expressions. + * Only created if `$effect.pending()` is used inside the boundary, + * otherwise updating the source results in needless `Batch.ensure()` + * calls followed by no-op flushes + * @type {Source | null} + */ + #effect_pending = null; + #effect_pending_subscriber = createSubscriber(() => { + this.#effect_pending = source(this.#local_pending_count); + return () => { + this.#effect_pending = null; + }; + }); + /** + * @param {TemplateNode} node + * @param {BoundaryProps} props + * @param {((anchor: Node) => void)} children + * @param {((error: unknown) => unknown) | undefined} [transform_error] + */ + constructor(node, props, children, transform_error) { + this.#anchor = node; + this.#props = props; + this.#children = (anchor) => { + var effect2 = ( + /** @type {Effect} */ + active_effect + ); + effect2.b = this; + effect2.f |= BOUNDARY_EFFECT; + children(anchor); + }; + this.parent = /** @type {Effect} */ + active_effect.b; + this.transform_error = transform_error ?? this.parent?.transform_error ?? ((e) => e); + this.#effect = block(() => { + if (hydrating) { + const comment2 = ( + /** @type {Comment} */ + this.#hydrate_open + ); + hydrate_next(); + const server_rendered_pending = comment2.data === HYDRATION_START_ELSE; + const server_rendered_failed = comment2.data.startsWith(HYDRATION_START_FAILED); + if (server_rendered_failed) { + const serialized_error = JSON.parse(comment2.data.slice(HYDRATION_START_FAILED.length)); + this.#hydrate_failed_content(serialized_error); + } else if (server_rendered_pending) { + this.#hydrate_pending_content(); + } else { + this.#hydrate_resolved_content(); + } + } else { + this.#render(); + } + }, flags); + if (hydrating) { + this.#anchor = hydrate_node; + } + } + #hydrate_resolved_content() { + try { + this.#main_effect = branch(() => this.#children(this.#anchor)); + } catch (error) { + this.error(error); + } + } + /** + * @param {unknown} error The deserialized error from the server's hydration comment + */ + #hydrate_failed_content(error) { + const failed = this.#props.failed; + if (!failed) return; + this.#failed_effect = branch(() => { + failed( + this.#anchor, + () => error, + () => () => { + } + ); + }); + } + #hydrate_pending_content() { + const pending = this.#props.pending; + if (!pending) return; + this.is_pending = true; + this.#pending_effect = branch(() => pending(this.#anchor)); + queue_micro_task(() => { + var fragment = this.#offscreen_fragment = document.createDocumentFragment(); + var anchor = create_text(); + fragment.append(anchor); + this.#main_effect = this.#run(() => { + return branch(() => this.#children(anchor)); + }); + if (this.#pending_count === 0) { + this.#anchor.before(fragment); + this.#offscreen_fragment = null; + pause_effect( + /** @type {Effect} */ + this.#pending_effect, + () => { + this.#pending_effect = null; + } + ); + this.#resolve( + /** @type {Batch} */ + current_batch + ); + } + }); + } + #render() { + try { + this.is_pending = this.has_pending_snippet(); + this.#pending_count = 0; + this.#local_pending_count = 0; + this.#main_effect = branch(() => { + this.#children(this.#anchor); + }); + if (this.#pending_count > 0) { + var fragment = this.#offscreen_fragment = document.createDocumentFragment(); + move_effect(this.#main_effect, fragment); + const pending = ( + /** @type {(anchor: Node) => void} */ + this.#props.pending + ); + this.#pending_effect = branch(() => pending(this.#anchor)); + } else { + this.#resolve( + /** @type {Batch} */ + current_batch + ); + } + } catch (error) { + this.error(error); + } + } + /** + * @param {Batch} batch + */ + #resolve(batch) { + this.is_pending = false; + batch.transfer_effects(this.#dirty_effects, this.#maybe_dirty_effects); + } + /** + * Defer an effect inside a pending boundary until the boundary resolves + * @param {Effect} effect + */ + defer_effect(effect2) { + defer_effect(effect2, this.#dirty_effects, this.#maybe_dirty_effects); + } + /** + * Returns `false` if the effect exists inside a boundary whose pending snippet is shown + * @returns {boolean} + */ + is_rendered() { + return !this.is_pending && (!this.parent || this.parent.is_rendered()); + } + has_pending_snippet() { + return !!this.#props.pending; + } + /** + * @template T + * @param {() => T} fn + */ + #run(fn) { + var previous_effect = active_effect; + var previous_reaction = active_reaction; + var previous_ctx = component_context; + set_active_effect(this.#effect); + set_active_reaction(this.#effect); + set_component_context(this.#effect.ctx); + try { + Batch.ensure(); + return fn(); + } catch (e) { + handle_error(e); + return null; + } finally { + set_active_effect(previous_effect); + set_active_reaction(previous_reaction); + set_component_context(previous_ctx); + } + } + /** + * Updates the pending count associated with the currently visible pending snippet, + * if any, such that we can replace the snippet with content once work is done + * @param {1 | -1} d + * @param {Batch} batch + */ + #update_pending_count(d, batch) { + if (!this.has_pending_snippet()) { + if (this.parent) { + this.parent.#update_pending_count(d, batch); + } + return; + } + this.#pending_count += d; + if (this.#pending_count === 0) { + this.#resolve(batch); + if (this.#pending_effect) { + pause_effect(this.#pending_effect, () => { + this.#pending_effect = null; + }); + } + if (this.#offscreen_fragment) { + this.#anchor.before(this.#offscreen_fragment); + this.#offscreen_fragment = null; + } + } + } + /** + * Update the source that powers `$effect.pending()` inside this boundary, + * and controls when the current `pending` snippet (if any) is removed. + * Do not call from inside the class + * @param {1 | -1} d + * @param {Batch} batch + */ + update_pending_count(d, batch) { + this.#update_pending_count(d, batch); + this.#local_pending_count += d; + if (!this.#effect_pending || this.#pending_count_update_queued) return; + this.#pending_count_update_queued = true; + queue_micro_task(() => { + this.#pending_count_update_queued = false; + if (this.#effect_pending) { + internal_set(this.#effect_pending, this.#local_pending_count); + } + }); + } + get_effect_pending() { + this.#effect_pending_subscriber(); + return get( + /** @type {Source} */ + this.#effect_pending + ); + } + /** @param {unknown} error */ + error(error) { + if (!this.#props.onerror && !this.#props.failed) { + throw error; + } + if (current_batch?.is_fork) { + if (this.#main_effect) current_batch.skip_effect(this.#main_effect); + if (this.#pending_effect) current_batch.skip_effect(this.#pending_effect); + if (this.#failed_effect) current_batch.skip_effect(this.#failed_effect); + current_batch.on_fork_commit(() => { + this.#handle_error(error); + }); + } else { + this.#handle_error(error); + } + } + /** + * @param {unknown} error + */ + #handle_error(error) { + if (this.#main_effect) { + destroy_effect(this.#main_effect); + this.#main_effect = null; + } + if (this.#pending_effect) { + destroy_effect(this.#pending_effect); + this.#pending_effect = null; + } + if (this.#failed_effect) { + destroy_effect(this.#failed_effect); + this.#failed_effect = null; + } + if (hydrating) { + set_hydrate_node( + /** @type {TemplateNode} */ + this.#hydrate_open + ); + next(); + set_hydrate_node(skip_nodes()); + } + var onerror = this.#props.onerror; + let failed = this.#props.failed; + var did_reset = false; + var calling_on_error = false; + const reset2 = () => { + if (did_reset) { + svelte_boundary_reset_noop(); + return; + } + did_reset = true; + if (calling_on_error) { + svelte_boundary_reset_onerror(); + } + if (this.#failed_effect !== null) { + pause_effect(this.#failed_effect, () => { + this.#failed_effect = null; + }); + } + this.#run(() => { + this.#render(); + }); + }; + const handle_error_result = (transformed_error) => { + try { + calling_on_error = true; + onerror?.(transformed_error, reset2); + calling_on_error = false; + } catch (error2) { + invoke_error_boundary(error2, this.#effect && this.#effect.parent); + } + if (failed) { + this.#failed_effect = this.#run(() => { + try { + return branch(() => { + var effect2 = ( + /** @type {Effect} */ + active_effect + ); + effect2.b = this; + effect2.f |= BOUNDARY_EFFECT; + failed( + this.#anchor, + () => transformed_error, + () => reset2 + ); + }); + } catch (error2) { + invoke_error_boundary( + error2, + /** @type {Effect} */ + this.#effect.parent + ); + return null; + } + }); + } + }; + queue_micro_task(() => { + var result; + try { + result = this.transform_error(error); + } catch (e) { + invoke_error_boundary(e, this.#effect && this.#effect.parent); + return; + } + if (result !== null && typeof result === "object" && typeof /** @type {any} */ + result.then === "function") { + result.then( + handle_error_result, + /** @param {unknown} e */ + (e) => invoke_error_boundary(e, this.#effect && this.#effect.parent) + ); + } else { + handle_error_result(result); + } + }); + } +} +function flatten(blockers, sync, async, fn) { + const d = derived; + var pending = blockers.filter((b) => !b.settled); + if (async.length === 0 && pending.length === 0) { + fn(sync.map(d)); + return; + } + var parent = ( + /** @type {Effect} */ + active_effect + ); + var restore = capture(); + var blocker_promise = pending.length === 1 ? pending[0].promise : pending.length > 1 ? Promise.all(pending.map((b) => b.promise)) : null; + function finish(values) { + if ((parent.f & DESTROYED) !== 0) { + return; + } + restore(); + try { + fn(values); + } catch (error) { + invoke_error_boundary(error, parent); + } + unset_context(); + } + var decrement_pending = increment_pending(); + if (async.length === 0) { + blocker_promise.then(() => finish(sync.map(d))).finally(decrement_pending); + return; + } + function run() { + Promise.all(async.map((expression) => /* @__PURE__ */ async_derived(expression))).then((result) => finish([...sync.map(d), ...result])).catch((error) => invoke_error_boundary(error, parent)).finally(decrement_pending); + } + if (blocker_promise) { + blocker_promise.then(() => { + restore(); + run(); + unset_context(); + }); + } else { + run(); + } +} +function capture() { + var previous_effect = ( + /** @type {Effect} */ + active_effect + ); + var previous_reaction = active_reaction; + var previous_component_context = component_context; + var previous_batch2 = ( + /** @type {Batch} */ + current_batch + ); + return function restore(activate_batch = true) { + set_active_effect(previous_effect); + set_active_reaction(previous_reaction); + set_component_context(previous_component_context); + if (activate_batch && (previous_effect.f & DESTROYED) === 0) { + previous_batch2?.activate(); + previous_batch2?.apply(); + } + }; +} +function unset_context(deactivate_batch = true) { + set_active_effect(null); + set_active_reaction(null); + set_component_context(null); + if (deactivate_batch) current_batch?.deactivate(); +} +function increment_pending() { + var effect2 = ( + /** @type {Effect} */ + active_effect + ); + var boundary2 = ( + /** @type {Boundary} */ + effect2.b + ); + var batch = ( + /** @type {Batch} */ + current_batch + ); + var blocking = boundary2.is_rendered(); + boundary2.update_pending_count(1, batch); + batch.increment(blocking, effect2); + return () => { + boundary2.update_pending_count(-1, batch); + batch.decrement(blocking, effect2); + }; +} +// @__NO_SIDE_EFFECTS__ +function derived(fn) { + var flags2 = DERIVED | DIRTY; + if (active_effect !== null) { + active_effect.f |= EFFECT_PRESERVED; + } + const signal = { + ctx: component_context, + deps: null, + effects: null, + equals, + f: flags2, + fn, + reactions: null, + rv: 0, + v: ( + /** @type {V} */ + UNINITIALIZED + ), + wv: 0, + parent: active_effect, + ac: null + }; + return signal; +} +const OBSOLETE = /* @__PURE__ */ Symbol("obsolete"); +// @__NO_SIDE_EFFECTS__ +function async_derived(fn, label, location2) { + let parent = ( + /** @type {Effect | null} */ + active_effect + ); + if (parent === null) { + async_derived_orphan(); + } + var promise = ( + /** @type {Promise} */ + /** @type {unknown} */ + void 0 + ); + var signal = source( + /** @type {V} */ + UNINITIALIZED + ); + var should_suspend = !active_reaction; + var deferreds = /* @__PURE__ */ new Set(); + async_effect(() => { + var effect2 = ( + /** @type {Effect} */ + active_effect + ); + var d = deferred(); + promise = d.promise; + try { + Promise.resolve(fn()).then(d.resolve, (e) => { + if (e !== STALE_REACTION) d.reject(e); + }).finally(unset_context); + } catch (error) { + d.reject(error); + unset_context(); + } + var batch = ( + /** @type {Batch} */ + current_batch + ); + if (should_suspend) { + if ((effect2.f & REACTION_RAN) !== 0) { + var decrement_pending = increment_pending(); + } + if ( + /** @type {Boundary} */ + parent.b.is_rendered() + ) { + batch.async_deriveds.get(effect2)?.reject(OBSOLETE); + } else { + for (const d2 of deferreds.values()) { + d2.reject(OBSOLETE); + } + } + deferreds.add(d); + batch.async_deriveds.set(effect2, d); + } + const handler = (value, error = void 0) => { + decrement_pending?.(); + deferreds.delete(d); + if (error === OBSOLETE) return; + batch.activate(); + if (error) { + signal.f |= ERROR_VALUE; + internal_set(signal, error); + } else { + if ((signal.f & ERROR_VALUE) !== 0) { + signal.f ^= ERROR_VALUE; + } + internal_set(signal, value); + } + batch.deactivate(); + }; + d.promise.then(handler, (e) => handler(null, e || "unknown")); + }); + teardown(() => { + for (const d of deferreds) { + d.reject(OBSOLETE); + } + }); + return new Promise((fulfil) => { + function next2(p) { + function go() { + if (p === promise) { + fulfil(signal); + } else { + next2(promise); + } + } + p.then(go, go); + } + next2(promise); + }); +} +// @__NO_SIDE_EFFECTS__ +function user_derived(fn) { + const d = /* @__PURE__ */ derived(fn); + push_reaction_value(d); + return d; +} +function destroy_derived_effects(derived2) { + var effects = derived2.effects; + if (effects !== null) { + derived2.effects = null; + for (var i = 0; i < effects.length; i += 1) { + destroy_effect( + /** @type {Effect} */ + effects[i] + ); + } + } +} +function execute_derived(derived2) { + var value; + var prev_active_effect = active_effect; + var parent = derived2.parent; + if (!is_destroying_effect && parent !== null && derived2.v !== UNINITIALIZED && // if it was never evaluated before, it's guaranteed to fail downstream, so we try to execute instead + (parent.f & (DESTROYED | INERT)) !== 0) { + derived_inert(); + return derived2.v; + } + set_active_effect(parent); + { + try { + derived2.f &= ~WAS_MARKED; + destroy_derived_effects(derived2); + value = update_reaction(derived2); + } finally { + set_active_effect(prev_active_effect); + } + } + return value; +} +function update_derived(derived2) { + var value = execute_derived(derived2); + if (!derived2.equals(value)) { + derived2.wv = increment_write_version(); + if (!current_batch?.is_fork || derived2.deps === null) { + if (current_batch !== null) { + current_batch.capture(derived2, value, true); + previous_batch?.capture(derived2, value, true); + } else { + derived2.v = value; + } + if (derived2.deps === null) { + set_signal_status(derived2, CLEAN); + return; + } + } + } + if (is_destroying_effect) { + return; + } + if (batch_values !== null) { + if (effect_tracking() || current_batch?.is_fork) { + batch_values.set(derived2, value); + } + } else { + update_derived_status(derived2); + } +} +function freeze_derived_effects(derived2) { + if (derived2.effects === null) return; + for (const e of derived2.effects) { + if (e.teardown || e.ac) { + e.teardown?.(); + e.ac?.abort(STALE_REACTION); + if (e.fn !== null) e.teardown = noop; + e.ac = null; + remove_reactions(e, 0); + destroy_effect_children(e); + } + } +} +function unfreeze_derived_effects(derived2) { + if (derived2.effects === null) return; + for (const e of derived2.effects) { + if (e.teardown && e.fn !== null) { + update_effect(e); + } + } +} +let eager_effects = /* @__PURE__ */ new Set(); +const old_values = /* @__PURE__ */ new Map(); +let eager_effects_deferred = false; +function source(v, stack) { + var signal = { + f: 0, + // TODO ideally we could skip this altogether, but it causes type errors + v, + reactions: null, + equals, + rv: 0, + wv: 0 + }; + return signal; +} +// @__NO_SIDE_EFFECTS__ +function state(v, stack) { + const s = source(v); + push_reaction_value(s); + return s; +} +// @__NO_SIDE_EFFECTS__ +function mutable_source(initial_value, immutable = false, trackable = true) { + const s = source(initial_value); + if (!immutable) { + s.equals = safe_equals; + } + return s; +} +function set(source2, value, should_proxy = false) { + if (active_reaction !== null && // since we are untracking the function inside `$inspect.with` we need to add this check + // to ensure we error if state is set inside an inspect effect + (!untracking || (active_reaction.f & EAGER_EFFECT) !== 0) && is_runes() && (active_reaction.f & (DERIVED | BLOCK_EFFECT | ASYNC | EAGER_EFFECT)) !== 0 && (current_sources === null || !includes.call(current_sources, source2))) { + state_unsafe_mutation(); + } + let new_value = should_proxy ? proxy(value) : value; + return internal_set(source2, new_value, legacy_updates); +} +function internal_set(source2, value, updated_during_traversal = null) { + if (!source2.equals(value)) { + old_values.set(source2, is_destroying_effect ? value : source2.v); + var batch = Batch.ensure(); + batch.capture(source2, value); + if ((source2.f & DERIVED) !== 0) { + const derived2 = ( + /** @type {Derived} */ + source2 + ); + if ((source2.f & DIRTY) !== 0) { + execute_derived(derived2); + } + if (batch_values === null) { + update_derived_status(derived2); + } + } + source2.wv = increment_write_version(); + mark_reactions(source2, DIRTY, updated_during_traversal); + if (active_effect !== null && (active_effect.f & CLEAN) !== 0 && (active_effect.f & (BRANCH_EFFECT | ROOT_EFFECT)) === 0) { + if (untracked_writes === null) { + set_untracked_writes([source2]); + } else { + untracked_writes.push(source2); + } + } + if (!batch.is_fork && eager_effects.size > 0 && !eager_effects_deferred) { + flush_eager_effects(); + } + } + return value; +} +function flush_eager_effects() { + eager_effects_deferred = false; + for (const effect2 of eager_effects) { + if ((effect2.f & CLEAN) !== 0) { + set_signal_status(effect2, MAYBE_DIRTY); + } + let dirty; + try { + dirty = is_dirty(effect2); + } catch { + dirty = true; + } + if (dirty) { + update_effect(effect2); + } + } + eager_effects.clear(); +} +function increment(source2) { + set(source2, source2.v + 1); +} +function mark_reactions(signal, status, updated_during_traversal) { + var reactions = signal.reactions; + if (reactions === null) return; + var length = reactions.length; + for (var i = 0; i < length; i++) { + var reaction = reactions[i]; + var flags2 = reaction.f; + var not_dirty = (flags2 & DIRTY) === 0; + if (not_dirty) { + set_signal_status(reaction, status); + } + if ((flags2 & EAGER_EFFECT) !== 0) { + eager_effects.add( + /** @type {Effect} */ + reaction + ); + } else if ((flags2 & DERIVED) !== 0) { + var derived2 = ( + /** @type {Derived} */ + reaction + ); + batch_values?.delete(derived2); + if ((flags2 & WAS_MARKED) === 0) { + if (flags2 & CONNECTED && (active_effect === null || (active_effect.f & REACTION_IS_UPDATING) === 0)) { + reaction.f |= WAS_MARKED; + } + mark_reactions(derived2, MAYBE_DIRTY, updated_during_traversal); + } + } else if (not_dirty) { + var effect2 = ( + /** @type {Effect} */ + reaction + ); + if ((flags2 & BLOCK_EFFECT) !== 0 && eager_block_effects !== null) { + eager_block_effects.add(effect2); + } + if (updated_during_traversal !== null) { + updated_during_traversal.push(effect2); + } else { + schedule_effect(effect2); + } + } + } +} +function autofocus(dom, value) { + if (value) { + const body = document.body; + dom.autofocus = true; + queue_micro_task(() => { + if (document.activeElement === body) { + dom.focus(); + } + }); + } +} +let listening_to_form_reset = false; +function add_form_reset_listener() { + if (!listening_to_form_reset) { + listening_to_form_reset = true; + document.addEventListener( + "reset", + (evt) => { + Promise.resolve().then(() => { + if (!evt.defaultPrevented) { + for ( + const e of + /**@type {HTMLFormElement} */ + evt.target.elements + ) { + e[FORM_RESET_HANDLER]?.(); + } + } + }); + }, + // In the capture phase to guarantee we get noticed of it (no possibility of stopPropagation) + { capture: true } + ); + } +} +function without_reactive_context(fn) { + var previous_reaction = active_reaction; + var previous_effect = active_effect; + set_active_reaction(null); + set_active_effect(null); + try { + return fn(); + } finally { + set_active_reaction(previous_reaction); + set_active_effect(previous_effect); + } +} +function listen_to_event_and_reset_event(element, event2, handler, on_reset = handler) { + element.addEventListener(event2, () => without_reactive_context(handler)); + const prev = ( + /** @type {any} */ + element[FORM_RESET_HANDLER] + ); + if (prev) { + element[FORM_RESET_HANDLER] = () => { + prev(); + on_reset(true); + }; + } else { + element[FORM_RESET_HANDLER] = () => on_reset(true); + } + add_form_reset_listener(); +} +let is_updating_effect = false; +let is_destroying_effect = false; +function set_is_destroying_effect(value) { + is_destroying_effect = value; +} +let active_reaction = null; +let untracking = false; +function set_active_reaction(reaction) { + active_reaction = reaction; +} +let active_effect = null; +function set_active_effect(effect2) { + active_effect = effect2; +} +let current_sources = null; +function push_reaction_value(value) { + if (active_reaction !== null && true) { + if (current_sources === null) { + current_sources = [value]; + } else { + current_sources.push(value); + } + } +} +let new_deps = null; +let skipped_deps = 0; +let untracked_writes = null; +function set_untracked_writes(value) { + untracked_writes = value; +} +let write_version = 1; +let read_version = 0; +let update_version = read_version; +function set_update_version(value) { + update_version = value; +} +function increment_write_version() { + return ++write_version; +} +function is_dirty(reaction) { + var flags2 = reaction.f; + if ((flags2 & DIRTY) !== 0) { + return true; + } + if (flags2 & DERIVED) { + reaction.f &= ~WAS_MARKED; + } + if ((flags2 & MAYBE_DIRTY) !== 0) { + var dependencies = ( + /** @type {Value[]} */ + reaction.deps + ); + var length = dependencies.length; + for (var i = 0; i < length; i++) { + var dependency = dependencies[i]; + if (is_dirty( + /** @type {Derived} */ + dependency + )) { + update_derived( + /** @type {Derived} */ + dependency + ); + } + if (dependency.wv > reaction.wv) { + return true; + } + } + if ((flags2 & CONNECTED) !== 0 && // During time traveling we don't want to reset the status so that + // traversal of the graph in the other batches still happens + batch_values === null) { + set_signal_status(reaction, CLEAN); + } + } + return false; +} +function schedule_possible_effect_self_invalidation(signal, effect2, root2 = true) { + var reactions = signal.reactions; + if (reactions === null) return; + if (current_sources !== null && includes.call(current_sources, signal)) { + return; + } + for (var i = 0; i < reactions.length; i++) { + var reaction = reactions[i]; + if ((reaction.f & DERIVED) !== 0) { + schedule_possible_effect_self_invalidation( + /** @type {Derived} */ + reaction, + effect2, + false + ); + } else if (effect2 === reaction) { + if (root2) { + set_signal_status(reaction, DIRTY); + } else if ((reaction.f & CLEAN) !== 0) { + set_signal_status(reaction, MAYBE_DIRTY); + } + schedule_effect( + /** @type {Effect} */ + reaction + ); + } + } +} +function update_reaction(reaction) { + var previous_deps = new_deps; + var previous_skipped_deps = skipped_deps; + var previous_untracked_writes = untracked_writes; + var previous_reaction = active_reaction; + var previous_sources = current_sources; + var previous_component_context = component_context; + var previous_untracking = untracking; + var previous_update_version = update_version; + var flags2 = reaction.f; + new_deps = /** @type {null | Value[]} */ + null; + skipped_deps = 0; + untracked_writes = null; + active_reaction = (flags2 & (BRANCH_EFFECT | ROOT_EFFECT)) === 0 ? reaction : null; + current_sources = null; + set_component_context(reaction.ctx); + untracking = false; + update_version = ++read_version; + if (reaction.ac !== null) { + without_reactive_context(() => { + reaction.ac.abort(STALE_REACTION); + }); + reaction.ac = null; + } + try { + reaction.f |= REACTION_IS_UPDATING; + var fn = ( + /** @type {Function} */ + reaction.fn + ); + var result = fn(); + reaction.f |= REACTION_RAN; + var deps = reaction.deps; + var is_fork = current_batch?.is_fork; + if (new_deps !== null) { + var i; + if (!is_fork) { + remove_reactions(reaction, skipped_deps); + } + if (deps !== null && skipped_deps > 0) { + deps.length = skipped_deps + new_deps.length; + for (i = 0; i < new_deps.length; i++) { + deps[skipped_deps + i] = new_deps[i]; + } + } else { + reaction.deps = deps = new_deps; + } + if (effect_tracking() && (reaction.f & CONNECTED) !== 0) { + for (i = skipped_deps; i < deps.length; i++) { + (deps[i].reactions ??= []).push(reaction); + } + } + } else if (!is_fork && deps !== null && skipped_deps < deps.length) { + remove_reactions(reaction, skipped_deps); + deps.length = skipped_deps; + } + if (is_runes() && untracked_writes !== null && !untracking && deps !== null && (reaction.f & (DERIVED | MAYBE_DIRTY | DIRTY)) === 0) { + for (i = 0; i < /** @type {Source[]} */ + untracked_writes.length; i++) { + schedule_possible_effect_self_invalidation( + untracked_writes[i], + /** @type {Effect} */ + reaction + ); + } + } + if (previous_reaction !== null && previous_reaction !== reaction) { + read_version++; + if (previous_reaction.deps !== null) { + for (let i2 = 0; i2 < previous_skipped_deps; i2 += 1) { + previous_reaction.deps[i2].rv = read_version; + } + } + if (previous_deps !== null) { + for (const dep of previous_deps) { + dep.rv = read_version; + } + } + if (untracked_writes !== null) { + if (previous_untracked_writes === null) { + previous_untracked_writes = untracked_writes; + } else { + previous_untracked_writes.push(.../** @type {Source[]} */ + untracked_writes); + } + } + } + if ((reaction.f & ERROR_VALUE) !== 0) { + reaction.f ^= ERROR_VALUE; + } + return result; + } catch (error) { + return handle_error(error); + } finally { + reaction.f ^= REACTION_IS_UPDATING; + new_deps = previous_deps; + skipped_deps = previous_skipped_deps; + untracked_writes = previous_untracked_writes; + active_reaction = previous_reaction; + current_sources = previous_sources; + set_component_context(previous_component_context); + untracking = previous_untracking; + update_version = previous_update_version; + } +} +function remove_reaction(signal, dependency) { + let reactions = dependency.reactions; + if (reactions !== null) { + var index = index_of.call(reactions, signal); + if (index !== -1) { + var new_length = reactions.length - 1; + if (new_length === 0) { + reactions = dependency.reactions = null; + } else { + reactions[index] = reactions[new_length]; + reactions.pop(); + } + } + } + if (reactions === null && (dependency.f & DERIVED) !== 0 && // Destroying a child effect while updating a parent effect can cause a dependency to appear + // to be unused, when in fact it is used by the currently-updating parent. Checking `new_deps` + // allows us to skip the expensive work of disconnecting and immediately reconnecting it + (new_deps === null || !includes.call(new_deps, dependency))) { + var derived2 = ( + /** @type {Derived} */ + dependency + ); + if ((derived2.f & CONNECTED) !== 0) { + derived2.f ^= CONNECTED; + derived2.f &= ~WAS_MARKED; + } + if (derived2.v !== UNINITIALIZED) { + update_derived_status(derived2); + } + freeze_derived_effects(derived2); + remove_reactions(derived2, 0); + } +} +function remove_reactions(signal, start_index) { + var dependencies = signal.deps; + if (dependencies === null) return; + for (var i = start_index; i < dependencies.length; i++) { + remove_reaction(signal, dependencies[i]); + } +} +function update_effect(effect2) { + var flags2 = effect2.f; + if ((flags2 & DESTROYED) !== 0) { + return; + } + set_signal_status(effect2, CLEAN); + var previous_effect = active_effect; + var was_updating_effect = is_updating_effect; + active_effect = effect2; + is_updating_effect = true; + try { + if ((flags2 & (BLOCK_EFFECT | MANAGED_EFFECT)) !== 0) { + destroy_block_effect_children(effect2); + } else { + destroy_effect_children(effect2); + } + execute_effect_teardown(effect2); + var teardown2 = update_reaction(effect2); + effect2.teardown = typeof teardown2 === "function" ? teardown2 : null; + effect2.wv = write_version; + var dep; + if (DEV && tracing_mode_flag && (effect2.f & DIRTY) !== 0 && effect2.deps !== null) ; + } finally { + is_updating_effect = was_updating_effect; + active_effect = previous_effect; + } +} +async function tick() { + await Promise.resolve(); + flushSync(); +} +function get(signal) { + var flags2 = signal.f; + var is_derived = (flags2 & DERIVED) !== 0; + if (active_reaction !== null && !untracking) { + var destroyed = active_effect !== null && (active_effect.f & DESTROYED) !== 0; + if (!destroyed && (current_sources === null || !includes.call(current_sources, signal))) { + var deps = active_reaction.deps; + if ((active_reaction.f & REACTION_IS_UPDATING) !== 0) { + if (signal.rv < read_version) { + signal.rv = read_version; + if (new_deps === null && deps !== null && deps[skipped_deps] === signal) { + skipped_deps++; + } else if (new_deps === null) { + new_deps = [signal]; + } else { + new_deps.push(signal); + } + } + } else { + (active_reaction.deps ??= []).push(signal); + var reactions = signal.reactions; + if (reactions === null) { + signal.reactions = [active_reaction]; + } else if (!includes.call(reactions, active_reaction)) { + reactions.push(active_reaction); + } + } + } + } + if (is_destroying_effect && old_values.has(signal)) { + return old_values.get(signal); + } + if (is_derived) { + var derived2 = ( + /** @type {Derived} */ + signal + ); + if (is_destroying_effect) { + var value = derived2.v; + if ((derived2.f & CLEAN) === 0 && derived2.reactions !== null || depends_on_old_values(derived2)) { + value = execute_derived(derived2); + } + old_values.set(derived2, value); + return value; + } + var should_connect = (derived2.f & CONNECTED) === 0 && !untracking && active_reaction !== null && (is_updating_effect || (active_reaction.f & CONNECTED) !== 0); + var is_new = (derived2.f & REACTION_RAN) === 0; + if (is_dirty(derived2)) { + if (should_connect) { + derived2.f |= CONNECTED; + } + update_derived(derived2); + } + if (should_connect && !is_new) { + unfreeze_derived_effects(derived2); + reconnect(derived2); + } + } + if (batch_values?.has(signal)) { + return batch_values.get(signal); + } + if ((signal.f & ERROR_VALUE) !== 0) { + throw signal.v; + } + return signal.v; +} +function reconnect(derived2) { + derived2.f |= CONNECTED; + if (derived2.deps === null) return; + for (const dep of derived2.deps) { + (dep.reactions ??= []).push(derived2); + if ((dep.f & DERIVED) !== 0 && (dep.f & CONNECTED) === 0) { + unfreeze_derived_effects( + /** @type {Derived} */ + dep + ); + reconnect( + /** @type {Derived} */ + dep + ); + } + } +} +function depends_on_old_values(derived2) { + if (derived2.v === UNINITIALIZED) return true; + if (derived2.deps === null) return false; + for (const dep of derived2.deps) { + if (old_values.has(dep)) { + return true; + } + if ((dep.f & DERIVED) !== 0 && depends_on_old_values( + /** @type {Derived} */ + dep + )) { + return true; + } + } + return false; +} +function untrack(fn) { + var previous_untracking = untracking; + try { + untracking = true; + return fn(); + } finally { + untracking = previous_untracking; + } +} +function validate_effect(rune) { + if (active_effect === null) { + if (active_reaction === null) { + effect_orphan(); + } + effect_in_unowned_derived(); + } + if (is_destroying_effect) { + effect_in_teardown(); + } +} +function push_effect(effect2, parent_effect) { + var parent_last = parent_effect.last; + if (parent_last === null) { + parent_effect.last = parent_effect.first = effect2; + } else { + parent_last.next = effect2; + effect2.prev = parent_last; + parent_effect.last = effect2; + } +} +function create_effect(type, fn) { + var parent = active_effect; + if (parent !== null && (parent.f & INERT) !== 0) { + type |= INERT; + } + var effect2 = { + ctx: component_context, + deps: null, + nodes: null, + f: type | DIRTY | CONNECTED, + first: null, + fn, + last: null, + next: null, + parent, + b: parent && parent.b, + prev: null, + teardown: null, + wv: 0, + ac: null + }; + current_batch?.register_created_effect(effect2); + var e = effect2; + if ((type & EFFECT) !== 0) { + if (collected_effects !== null) { + collected_effects.push(effect2); + } else { + Batch.ensure().schedule(effect2); + } + } else if (fn !== null) { + try { + update_effect(effect2); + } catch (e2) { + destroy_effect(effect2); + throw e2; + } + if (e.deps === null && e.teardown === null && e.nodes === null && e.first === e.last && // either `null`, or a singular child + (e.f & EFFECT_PRESERVED) === 0) { + e = e.first; + if ((type & BLOCK_EFFECT) !== 0 && (type & EFFECT_TRANSPARENT) !== 0 && e !== null) { + e.f |= EFFECT_TRANSPARENT; + } + } + } + if (e !== null) { + e.parent = parent; + if (parent !== null) { + push_effect(e, parent); + } + if (active_reaction !== null && (active_reaction.f & DERIVED) !== 0 && (type & ROOT_EFFECT) === 0) { + var derived2 = ( + /** @type {Derived} */ + active_reaction + ); + (derived2.effects ??= []).push(e); + } + } + return effect2; +} +function effect_tracking() { + return active_reaction !== null && !untracking; +} +function teardown(fn) { + const effect2 = create_effect(RENDER_EFFECT, null); + set_signal_status(effect2, CLEAN); + effect2.teardown = fn; + return effect2; +} +function user_effect(fn) { + validate_effect(); + var flags2 = ( + /** @type {Effect} */ + active_effect.f + ); + var defer = !active_reaction && (flags2 & BRANCH_EFFECT) !== 0 && (flags2 & REACTION_RAN) === 0; + if (defer) { + var context = ( + /** @type {ComponentContext} */ + component_context + ); + (context.e ??= []).push(fn); + } else { + return create_user_effect(fn); + } +} +function create_user_effect(fn) { + return create_effect(EFFECT | USER_EFFECT, fn); +} +function effect_root(fn) { + Batch.ensure(); + const effect2 = create_effect(ROOT_EFFECT | EFFECT_PRESERVED, fn); + return () => { + destroy_effect(effect2); + }; +} +function component_root(fn) { + Batch.ensure(); + const effect2 = create_effect(ROOT_EFFECT | EFFECT_PRESERVED, fn); + return (options = {}) => { + return new Promise((fulfil) => { + if (options.outro) { + pause_effect(effect2, () => { + destroy_effect(effect2); + fulfil(void 0); + }); + } else { + destroy_effect(effect2); + fulfil(void 0); + } + }); + }; +} +function effect(fn) { + return create_effect(EFFECT, fn); +} +function async_effect(fn) { + return create_effect(ASYNC | EFFECT_PRESERVED, fn); +} +function render_effect(fn, flags2 = 0) { + return create_effect(RENDER_EFFECT | flags2, fn); +} +function template_effect(fn, sync = [], async = [], blockers = []) { + flatten(blockers, sync, async, (values) => { + create_effect(RENDER_EFFECT, () => fn(...values.map(get))); + }); +} +function block(fn, flags2 = 0) { + var effect2 = create_effect(BLOCK_EFFECT | flags2, fn); + return effect2; +} +function managed(fn, flags2 = 0) { + var effect2 = create_effect(MANAGED_EFFECT | flags2, fn); + return effect2; +} +function branch(fn) { + return create_effect(BRANCH_EFFECT | EFFECT_PRESERVED, fn); +} +function execute_effect_teardown(effect2) { + var teardown2 = effect2.teardown; + if (teardown2 !== null) { + const previously_destroying_effect = is_destroying_effect; + const previous_reaction = active_reaction; + set_is_destroying_effect(true); + set_active_reaction(null); + try { + teardown2.call(null); + } finally { + set_is_destroying_effect(previously_destroying_effect); + set_active_reaction(previous_reaction); + } + } +} +function destroy_effect_children(signal, remove_dom = false) { + var effect2 = signal.first; + signal.first = signal.last = null; + while (effect2 !== null) { + const controller = effect2.ac; + if (controller !== null) { + without_reactive_context(() => { + controller.abort(STALE_REACTION); + }); + } + var next2 = effect2.next; + if ((effect2.f & ROOT_EFFECT) !== 0) { + effect2.parent = null; + } else { + destroy_effect(effect2, remove_dom); + } + effect2 = next2; + } +} +function destroy_block_effect_children(signal) { + var effect2 = signal.first; + while (effect2 !== null) { + var next2 = effect2.next; + if ((effect2.f & BRANCH_EFFECT) === 0) { + destroy_effect(effect2); + } + effect2 = next2; + } +} +function destroy_effect(effect2, remove_dom = true) { + var removed = false; + if ((remove_dom || (effect2.f & HEAD_EFFECT) !== 0) && effect2.nodes !== null && effect2.nodes.end !== null) { + remove_effect_dom( + effect2.nodes.start, + /** @type {TemplateNode} */ + effect2.nodes.end + ); + removed = true; + } + set_signal_status(effect2, DESTROYING); + destroy_effect_children(effect2, remove_dom && !removed); + remove_reactions(effect2, 0); + var transitions = effect2.nodes && effect2.nodes.t; + if (transitions !== null) { + for (const transition of transitions) { + transition.stop(); + } + } + execute_effect_teardown(effect2); + effect2.f ^= DESTROYING; + effect2.f |= DESTROYED; + var parent = effect2.parent; + if (parent !== null && parent.first !== null) { + unlink_effect(effect2); + } + effect2.next = effect2.prev = effect2.teardown = effect2.ctx = effect2.deps = effect2.fn = effect2.nodes = effect2.ac = effect2.b = null; +} +function remove_effect_dom(node, end) { + while (node !== null) { + var next2 = node === end ? null : /* @__PURE__ */ get_next_sibling(node); + node.remove(); + node = next2; + } +} +function unlink_effect(effect2) { + var parent = effect2.parent; + var prev = effect2.prev; + var next2 = effect2.next; + if (prev !== null) prev.next = next2; + if (next2 !== null) next2.prev = prev; + if (parent !== null) { + if (parent.first === effect2) parent.first = next2; + if (parent.last === effect2) parent.last = prev; + } +} +function pause_effect(effect2, callback, destroy = true) { + var transitions = []; + pause_children(effect2, transitions, true); + var fn = () => { + if (destroy) destroy_effect(effect2); + if (callback) callback(); + }; + var remaining = transitions.length; + if (remaining > 0) { + var check = () => --remaining || fn(); + for (var transition of transitions) { + transition.out(check); + } + } else { + fn(); + } +} +function pause_children(effect2, transitions, local) { + if ((effect2.f & INERT) !== 0) return; + effect2.f ^= INERT; + var t = effect2.nodes && effect2.nodes.t; + if (t !== null) { + for (const transition of t) { + if (transition.is_global || local) { + transitions.push(transition); + } + } + } + var child2 = effect2.first; + while (child2 !== null) { + var sibling2 = child2.next; + if ((child2.f & ROOT_EFFECT) === 0) { + var transparent = (child2.f & EFFECT_TRANSPARENT) !== 0 || // If this is a branch effect without a block effect parent, + // it means the parent block effect was pruned. In that case, + // transparency information was transferred to the branch effect. + (child2.f & BRANCH_EFFECT) !== 0 && (effect2.f & BLOCK_EFFECT) !== 0; + pause_children(child2, transitions, transparent ? local : false); + } + child2 = sibling2; + } +} +function resume_effect(effect2) { + resume_children(effect2, true); +} +function resume_children(effect2, local) { + if ((effect2.f & INERT) === 0) return; + effect2.f ^= INERT; + if ((effect2.f & CLEAN) === 0) { + set_signal_status(effect2, DIRTY); + Batch.ensure().schedule(effect2); + } + var child2 = effect2.first; + while (child2 !== null) { + var sibling2 = child2.next; + var transparent = (child2.f & EFFECT_TRANSPARENT) !== 0 || (child2.f & BRANCH_EFFECT) !== 0; + resume_children(child2, transparent ? local : false); + child2 = sibling2; + } + var t = effect2.nodes && effect2.nodes.t; + if (t !== null) { + for (const transition of t) { + if (transition.is_global || local) { + transition.in(); + } + } + } +} +function move_effect(effect2, fragment) { + if (!effect2.nodes) return; + var node = effect2.nodes.start; + var end = effect2.nodes.end; + while (node !== null) { + var next2 = node === end ? null : /* @__PURE__ */ get_next_sibling(node); + fragment.append(node); + node = next2; + } +} +function store(defaultValue) { + const scope = { + get: (name) => { + return get$1(scope.store)[name]; + }, + set: (name, value) => { + if (typeof name === "string") { + Object.assign(get$1(scope.store), { + [name]: value + }); + } else { + Object.assign(get$1(scope.store), name); + } + scope.store.set(get$1(scope.store)); + }, + store: writable(defaultValue) + }; + return scope; +} +globalThis.$altcha = globalThis.$altcha || { + algorithms: /* @__PURE__ */ new Map(), + defaults: store({}), + i18n: store({}), + instances: /* @__PURE__ */ new Set(), + plugins: /* @__PURE__ */ new Set() +}; +const i18n = { + ariaLinkLabel: "Altcha (official website)", + cancel: "Cancel", + enterCode: "Enter code", + enterCodeAria: "Enter code you hear. Press Space to play audio.", + enterCodeFromImage: "To proceed, please enter the code from the image below.", + error: "Verification failed. Try again later.", + expired: "Verification expired. Try again.", + footer: 'Protected by ALTCHA', + getAudioChallenge: "Get an audio challenge", + label: "I'm not a robot", + loading: "Loading...", + reload: "Reload", + verify: "Verify", + verificationRequired: "Verification required!", + verified: "Verified", + verifying: "Verifying...", + waitAlert: "Verifying... please wait." +}; +globalThis.$altcha.i18n.set("en", i18n); +const PUBLIC_VERSION = "5"; +if (typeof window !== "undefined") { + ((window.__svelte ??= {}).v ??= /* @__PURE__ */ new Set()).add(PUBLIC_VERSION); +} +const event_symbol = /* @__PURE__ */ Symbol("events"); +const all_registered_events = /* @__PURE__ */ new Set(); +const root_event_handles = /* @__PURE__ */ new Set(); +function create_event(event_name, dom, handler, options = {}) { + function target_handler(event2) { + if (!options.capture) { + handle_event_propagation.call(dom, event2); + } + if (!event2.cancelBubble) { + return without_reactive_context(() => { + return handler?.call(this, event2); + }); + } + } + if (event_name.startsWith("pointer") || event_name.startsWith("touch") || event_name === "wheel") { + queue_micro_task(() => { + dom.addEventListener(event_name, target_handler, options); + }); + } else { + dom.addEventListener(event_name, target_handler, options); + } + return target_handler; +} +function event(event_name, dom, handler, capture2, passive) { + var options = { capture: capture2, passive }; + var target_handler = create_event(event_name, dom, handler, options); + if (dom === document.body || // @ts-ignore + dom === window || // @ts-ignore + dom === document || // Firefox has quirky behavior, it can happen that we still get "canplay" events when the element is already removed + dom instanceof HTMLMediaElement) { + teardown(() => { + dom.removeEventListener(event_name, target_handler, options); + }); + } +} +function delegated(event_name, element, handler) { + (element[event_symbol] ??= {})[event_name] = handler; +} +function delegate(events) { + for (var i = 0; i < events.length; i++) { + all_registered_events.add(events[i]); + } + for (var fn of root_event_handles) { + fn(events); + } +} +let last_propagated_event = null; +function handle_event_propagation(event2) { + var handler_element = this; + var owner_document = ( + /** @type {Node} */ + handler_element.ownerDocument + ); + var event_name = event2.type; + var path = event2.composedPath?.() || []; + var current_target = ( + /** @type {null | Element} */ + path[0] || event2.target + ); + last_propagated_event = event2; + var path_idx = 0; + var handled_at = last_propagated_event === event2 && event2[event_symbol]; + if (handled_at) { + var at_idx = path.indexOf(handled_at); + if (at_idx !== -1 && (handler_element === document || handler_element === /** @type {any} */ + window)) { + event2[event_symbol] = handler_element; + return; + } + var handler_idx = path.indexOf(handler_element); + if (handler_idx === -1) { + return; + } + if (at_idx <= handler_idx) { + path_idx = at_idx; + } + } + current_target = /** @type {Element} */ + path[path_idx] || event2.target; + if (current_target === handler_element) return; + define_property(event2, "currentTarget", { + configurable: true, + get() { + return current_target || owner_document; + } + }); + var previous_reaction = active_reaction; + var previous_effect = active_effect; + set_active_reaction(null); + set_active_effect(null); + try { + var throw_error; + var other_errors = []; + while (current_target !== null) { + var parent_element = current_target.assignedSlot || current_target.parentNode || /** @type {any} */ + current_target.host || null; + try { + var delegated2 = current_target[event_symbol]?.[event_name]; + if (delegated2 != null && (!/** @type {any} */ + current_target.disabled || // DOM could've been updated already by the time this is reached, so we check this as well + // -> the target could not have been disabled because it emits the event in the first place + event2.target === current_target)) { + delegated2.call(current_target, event2); + } + } catch (error) { + if (throw_error) { + other_errors.push(error); + } else { + throw_error = error; + } + } + if (event2.cancelBubble || parent_element === handler_element || parent_element === null) { + break; + } + current_target = parent_element; + } + if (throw_error) { + for (let error of other_errors) { + queueMicrotask(() => { + throw error; + }); + } + throw throw_error; + } + } finally { + event2[event_symbol] = handler_element; + delete event2.currentTarget; + set_active_reaction(previous_reaction); + set_active_effect(previous_effect); + } +} +const policy = ( + // We gotta write it like this because after downleveling the pure comment may end up in the wrong location + globalThis?.window?.trustedTypes && /* @__PURE__ */ globalThis.window.trustedTypes.createPolicy("svelte-trusted-html", { + /** @param {string} html */ + createHTML: (html2) => { + return html2; + } + }) +); +function create_trusted_html(html2) { + return ( + /** @type {string} */ + policy?.createHTML(html2) ?? html2 + ); +} +function create_fragment_from_html(html2) { + var elem = create_element("template"); + elem.innerHTML = create_trusted_html(html2.replaceAll("", "")); + return elem.content; +} +function assign_nodes(start, end) { + var effect2 = ( + /** @type {Effect} */ + active_effect + ); + if (effect2.nodes === null) { + effect2.nodes = { start, end, a: null, t: null }; + } +} +// @__NO_SIDE_EFFECTS__ +function from_html(content, flags2) { + var is_fragment = (flags2 & TEMPLATE_FRAGMENT) !== 0; + var use_import_node = (flags2 & TEMPLATE_USE_IMPORT_NODE) !== 0; + var node; + var has_start = !content.startsWith(""); + return () => { + if (hydrating) { + assign_nodes(hydrate_node, null); + return hydrate_node; + } + if (node === void 0) { + node = create_fragment_from_html(has_start ? content : "" + content); + if (!is_fragment) node = /** @type {TemplateNode} */ + /* @__PURE__ */ get_first_child(node); + } + var clone = ( + /** @type {TemplateNode} */ + use_import_node || is_firefox ? document.importNode(node, true) : node.cloneNode(true) + ); + if (is_fragment) { + var start = ( + /** @type {TemplateNode} */ + /* @__PURE__ */ get_first_child(clone) + ); + var end = ( + /** @type {TemplateNode} */ + clone.lastChild + ); + assign_nodes(start, end); + } else { + assign_nodes(clone, clone); + } + return clone; + }; +} +// @__NO_SIDE_EFFECTS__ +function from_namespace(content, flags2, ns = "svg") { + var has_start = !content.startsWith(""); + var wrapped = `<${ns}>${has_start ? content : "" + content}`; + var node; + return () => { + if (hydrating) { + assign_nodes(hydrate_node, null); + return hydrate_node; + } + if (!node) { + var fragment = ( + /** @type {DocumentFragment} */ + create_fragment_from_html(wrapped) + ); + var root2 = ( + /** @type {Element} */ + /* @__PURE__ */ get_first_child(fragment) + ); + { + node = /** @type {Element} */ + /* @__PURE__ */ get_first_child(root2); + } + } + var clone = ( + /** @type {TemplateNode} */ + node.cloneNode(true) + ); + { + assign_nodes(clone, clone); + } + return clone; + }; +} +// @__NO_SIDE_EFFECTS__ +function from_svg(content, flags2) { + return /* @__PURE__ */ from_namespace(content, flags2, "svg"); +} +function text(value = "") { + if (!hydrating) { + var t = create_text(value + ""); + assign_nodes(t, t); + return t; + } + var node = hydrate_node; + if (node.nodeType !== TEXT_NODE) { + node.before(node = create_text()); + set_hydrate_node(node); + } else { + merge_text_nodes( + /** @type {Text} */ + node + ); + } + assign_nodes(node, node); + return node; +} +function comment() { + if (hydrating) { + assign_nodes(hydrate_node, null); + return hydrate_node; + } + var frag = document.createDocumentFragment(); + var start = document.createComment(""); + var anchor = create_text(); + frag.append(start, anchor); + assign_nodes(start, anchor); + return frag; +} +function append(anchor, dom) { + if (hydrating) { + var effect2 = ( + /** @type {Effect & { nodes: EffectNodes }} */ + active_effect + ); + if ((effect2.f & REACTION_RAN) === 0 || effect2.nodes.end === null) { + effect2.nodes.end = hydrate_node; + } + hydrate_next(); + return; + } + if (anchor === null) { + return; + } + anchor.before( + /** @type {Node} */ + dom + ); +} +function is_capture_event(name) { + return name.endsWith("capture") && name !== "gotpointercapture" && name !== "lostpointercapture"; +} +const DELEGATED_EVENTS = [ + "beforeinput", + "click", + "change", + "dblclick", + "contextmenu", + "focusin", + "focusout", + "input", + "keydown", + "keyup", + "mousedown", + "mousemove", + "mouseout", + "mouseover", + "mouseup", + "pointerdown", + "pointermove", + "pointerout", + "pointerover", + "pointerup", + "touchend", + "touchmove", + "touchstart" +]; +function can_delegate_event(event_name) { + return DELEGATED_EVENTS.includes(event_name); +} +const ATTRIBUTE_ALIASES = { + // no `class: 'className'` because we handle that separately + formnovalidate: "formNoValidate", + ismap: "isMap", + nomodule: "noModule", + playsinline: "playsInline", + readonly: "readOnly", + defaultvalue: "defaultValue", + defaultchecked: "defaultChecked", + srcobject: "srcObject", + novalidate: "noValidate", + allowfullscreen: "allowFullscreen", + disablepictureinpicture: "disablePictureInPicture", + disableremoteplayback: "disableRemotePlayback" +}; +function normalize_attribute(name) { + name = name.toLowerCase(); + return ATTRIBUTE_ALIASES[name] ?? name; +} +const PASSIVE_EVENTS = ["touchstart", "touchmove"]; +function is_passive_event(name) { + return PASSIVE_EVENTS.includes(name); +} +function set_text(text2, value) { + var str = value == null ? "" : typeof value === "object" ? `${value}` : value; + if (str !== /** @type {any} */ + (text2[TEXT_CACHE] ??= text2.nodeValue)) { + text2[TEXT_CACHE] = str; + text2.nodeValue = `${str}`; + } +} +function mount(component2, options) { + return _mount(component2, options); +} +function hydrate(component2, options) { + init_operations(); + options.intro = options.intro ?? false; + const target = options.target; + const was_hydrating = hydrating; + const previous_hydrate_node = hydrate_node; + try { + var anchor = /* @__PURE__ */ get_first_child(target); + while (anchor && (anchor.nodeType !== COMMENT_NODE || /** @type {Comment} */ + anchor.data !== HYDRATION_START)) { + anchor = /* @__PURE__ */ get_next_sibling(anchor); + } + if (!anchor) { + throw HYDRATION_ERROR; + } + set_hydrating(true); + set_hydrate_node( + /** @type {Comment} */ + anchor + ); + const instance = _mount(component2, { ...options, anchor }); + set_hydrating(false); + return ( + /** @type {Exports} */ + instance + ); + } catch (error) { + if (error instanceof Error && error.message.split("\n").some((line) => line.startsWith("https://svelte.dev/e/"))) { + throw error; + } + if (error !== HYDRATION_ERROR) { + console.warn("Failed to hydrate: ", error); + } + if (options.recover === false) { + hydration_failed(); + } + init_operations(); + clear_text_content(target); + set_hydrating(false); + return mount(component2, options); + } finally { + set_hydrating(was_hydrating); + set_hydrate_node(previous_hydrate_node); + } +} +const listeners = /* @__PURE__ */ new Map(); +function _mount(Component, { target, anchor, props = {}, events, context, intro = true, transformError }) { + init_operations(); + var component2 = void 0; + var unmount2 = component_root(() => { + var anchor_node = anchor ?? target.appendChild(create_text()); + boundary( + /** @type {TemplateNode} */ + anchor_node, + { + pending: () => { + } + }, + (anchor_node2) => { + push({}); + var ctx = ( + /** @type {ComponentContext} */ + component_context + ); + if (context) ctx.c = context; + if (events) { + props.$$events = events; + } + if (hydrating) { + assign_nodes( + /** @type {TemplateNode} */ + anchor_node2, + null + ); + } + component2 = Component(anchor_node2, props) || {}; + if (hydrating) { + active_effect.nodes.end = hydrate_node; + if (hydrate_node === null || hydrate_node.nodeType !== COMMENT_NODE || /** @type {Comment} */ + hydrate_node.data !== HYDRATION_END) { + hydration_mismatch(); + throw HYDRATION_ERROR; + } + } + pop(); + }, + transformError + ); + var registered_events = /* @__PURE__ */ new Set(); + var event_handle = (events2) => { + for (var i = 0; i < events2.length; i++) { + var event_name = events2[i]; + if (registered_events.has(event_name)) continue; + registered_events.add(event_name); + var passive = is_passive_event(event_name); + for (const node of [target, document]) { + var counts = listeners.get(node); + if (counts === void 0) { + counts = /* @__PURE__ */ new Map(); + listeners.set(node, counts); + } + var count = counts.get(event_name); + if (count === void 0) { + node.addEventListener(event_name, handle_event_propagation, { passive }); + counts.set(event_name, 1); + } else { + counts.set(event_name, count + 1); + } + } + } + }; + event_handle(array_from(all_registered_events)); + root_event_handles.add(event_handle); + return () => { + for (var event_name of registered_events) { + for (const node of [target, document]) { + var counts = ( + /** @type {Map} */ + listeners.get(node) + ); + var count = ( + /** @type {number} */ + counts.get(event_name) + ); + if (--count == 0) { + node.removeEventListener(event_name, handle_event_propagation); + counts.delete(event_name); + if (counts.size === 0) { + listeners.delete(node); + } + } else { + counts.set(event_name, count); + } + } + } + root_event_handles.delete(event_handle); + if (anchor_node !== anchor) { + anchor_node.parentNode?.removeChild(anchor_node); + } + }; + }); + mounted_components.set(component2, unmount2); + return component2; +} +let mounted_components = /* @__PURE__ */ new WeakMap(); +function unmount(component2, options) { + const fn = mounted_components.get(component2); + if (fn) { + mounted_components.delete(component2); + return fn(options); + } + return Promise.resolve(); +} +class BranchManager { + /** @type {TemplateNode} */ + anchor; + /** @type {Map} */ + #batches = /* @__PURE__ */ new Map(); + /** + * Map of keys to effects that are currently rendered in the DOM. + * These effects are visible and actively part of the document tree. + * Example: + * ``` + * {#if condition} + * foo + * {:else} + * bar + * {/if} + * ``` + * Can result in the entries `true->Effect` and `false->Effect` + * @type {Map} + */ + #onscreen = /* @__PURE__ */ new Map(); + /** + * Similar to #onscreen with respect to the keys, but contains branches that are not yet + * in the DOM, because their insertion is deferred. + * @type {Map} + */ + #offscreen = /* @__PURE__ */ new Map(); + /** + * Keys of effects that are currently outroing + * @type {Set} + */ + #outroing = /* @__PURE__ */ new Set(); + /** + * Whether to pause (i.e. outro) on change, or destroy immediately. + * This is necessary for `` + */ + #transition = true; + /** + * @param {TemplateNode} anchor + * @param {boolean} transition + */ + constructor(anchor, transition = true) { + this.anchor = anchor; + this.#transition = transition; + } + /** + * @param {Batch} batch + */ + #commit = (batch) => { + if (!this.#batches.has(batch)) return; + var key2 = ( + /** @type {Key} */ + this.#batches.get(batch) + ); + var onscreen = this.#onscreen.get(key2); + if (onscreen) { + resume_effect(onscreen); + this.#outroing.delete(key2); + } else { + var offscreen = this.#offscreen.get(key2); + if (offscreen) { + this.#onscreen.set(key2, offscreen.effect); + this.#offscreen.delete(key2); + offscreen.fragment.lastChild.remove(); + this.anchor.before(offscreen.fragment); + onscreen = offscreen.effect; + } + } + for (const [b, k] of this.#batches) { + this.#batches.delete(b); + if (b === batch) { + break; + } + const offscreen2 = this.#offscreen.get(k); + if (offscreen2) { + destroy_effect(offscreen2.effect); + this.#offscreen.delete(k); + } + } + for (const [k, effect2] of this.#onscreen) { + if (k === key2 || this.#outroing.has(k)) continue; + const on_destroy = () => { + const keys = Array.from(this.#batches.values()); + if (keys.includes(k)) { + var fragment = document.createDocumentFragment(); + move_effect(effect2, fragment); + fragment.append(create_text()); + this.#offscreen.set(k, { effect: effect2, fragment }); + } else { + destroy_effect(effect2); + } + this.#outroing.delete(k); + this.#onscreen.delete(k); + }; + if (this.#transition || !onscreen) { + this.#outroing.add(k); + pause_effect(effect2, on_destroy, false); + } else { + on_destroy(); + } + } + }; + /** + * @param {Batch} batch + */ + #discard = (batch) => { + this.#batches.delete(batch); + const keys = Array.from(this.#batches.values()); + for (const [k, branch2] of this.#offscreen) { + if (!keys.includes(k)) { + destroy_effect(branch2.effect); + this.#offscreen.delete(k); + } + } + }; + /** + * + * @param {any} key + * @param {null | ((target: TemplateNode) => void)} fn + */ + ensure(key2, fn) { + var batch = ( + /** @type {Batch} */ + current_batch + ); + var defer = should_defer_append(); + if (fn && !this.#onscreen.has(key2) && !this.#offscreen.has(key2)) { + if (defer) { + var fragment = document.createDocumentFragment(); + var target = create_text(); + fragment.append(target); + this.#offscreen.set(key2, { + effect: branch(() => fn(target)), + fragment + }); + } else { + this.#onscreen.set( + key2, + branch(() => fn(this.anchor)) + ); + } + } + this.#batches.set(batch, key2); + if (defer) { + for (const [k, effect2] of this.#onscreen) { + if (k === key2) { + batch.unskip_effect(effect2); + } else { + batch.skip_effect(effect2); + } + } + for (const [k, branch2] of this.#offscreen) { + if (k === key2) { + batch.unskip_effect(branch2.effect); + } else { + batch.skip_effect(branch2.effect); + } + } + batch.oncommit(this.#commit); + batch.ondiscard(this.#discard); + } else { + if (hydrating) { + this.anchor = hydrate_node; + } + this.#commit(batch); + } + } +} +function snippet(node, get_snippet, ...args) { + var branches = new BranchManager(node); + block(() => { + const snippet2 = get_snippet() ?? null; + branches.ensure(snippet2, snippet2 && ((anchor) => snippet2(anchor, ...args))); + }, EFFECT_TRANSPARENT); +} +function onMount(fn) { + if (component_context === null) { + lifecycle_outside_component(); + } + { + user_effect(() => { + const cleanup = untrack(fn); + if (typeof cleanup === "function") return ( + /** @type {() => void} */ + cleanup + ); + }); + } +} +function if_block(node, fn, elseif = false) { + var marker; + if (hydrating) { + marker = hydrate_node; + hydrate_next(); + } + var branches = new BranchManager(node); + var flags2 = elseif ? EFFECT_TRANSPARENT : 0; + function update_branch(key2, fn2) { + if (hydrating) { + var data = read_hydration_instruction( + /** @type {TemplateNode} */ + marker + ); + if (key2 !== parseInt(data.substring(1))) { + var anchor = skip_nodes(); + set_hydrate_node(anchor); + branches.anchor = anchor; + set_hydrating(false); + branches.ensure(key2, fn2); + set_hydrating(true); + return; + } + } + branches.ensure(key2, fn2); + } + block(() => { + var has_branch = false; + fn((fn2, key2 = 0) => { + has_branch = true; + update_branch(key2, fn2); + }); + if (!has_branch) { + update_branch(-1, null); + } + }, flags2); +} +const NAN = /* @__PURE__ */ Symbol("NaN"); +function key(node, get_key, render_fn) { + if (hydrating) { + hydrate_next(); + } + var branches = new BranchManager(node); + block(() => { + var key2 = get_key(); + if (key2 !== key2) { + key2 = /** @type {any} */ + NAN; + } + branches.ensure(key2, render_fn); + }); +} +function html(node, get_value, is_controlled = false, svg = false, mathml = false, skip_warning = false) { + var anchor = node; + var value = ""; + if (is_controlled) { + var parent_node = ( + /** @type {Element} */ + node + ); + if (hydrating) { + anchor = set_hydrate_node(/* @__PURE__ */ get_first_child(parent_node)); + } + } + template_effect(() => { + var effect2 = ( + /** @type {Effect} */ + active_effect + ); + if (value === (value = get_value() ?? "")) { + if (hydrating) hydrate_next(); + return; + } + if (is_controlled && !hydrating) { + effect2.nodes = null; + parent_node.innerHTML = /** @type {string} */ + value; + if (value !== "") { + assign_nodes( + /** @type {TemplateNode} */ + /* @__PURE__ */ get_first_child(parent_node), + /** @type {TemplateNode} */ + parent_node.lastChild + ); + } + return; + } + if (effect2.nodes !== null) { + remove_effect_dom( + effect2.nodes.start, + /** @type {TemplateNode} */ + effect2.nodes.end + ); + effect2.nodes = null; + } + if (value === "") return; + if (hydrating) { + hydrate_node.data; + var next2 = hydrate_next(); + var last = next2; + while (next2 !== null && (next2.nodeType !== COMMENT_NODE || /** @type {Comment} */ + next2.data !== "")) { + last = next2; + next2 = /* @__PURE__ */ get_next_sibling(next2); + } + if (next2 === null) { + hydration_mismatch(); + throw HYDRATION_ERROR; + } + assign_nodes(hydrate_node, last); + anchor = set_hydrate_node(next2); + return; + } + var ns = svg ? NAMESPACE_SVG : mathml ? NAMESPACE_MATHML : void 0; + var wrapper = ( + /** @type {HTMLTemplateElement | SVGElement | MathMLElement} */ + create_element(svg ? "svg" : mathml ? "math" : "template", ns) + ); + wrapper.innerHTML = /** @type {any} */ + value; + var node2 = svg || mathml ? wrapper : ( + /** @type {HTMLTemplateElement} */ + wrapper.content + ); + assign_nodes( + /** @type {TemplateNode} */ + /* @__PURE__ */ get_first_child(node2), + /** @type {TemplateNode} */ + node2.lastChild + ); + if (svg || mathml) { + while (/* @__PURE__ */ get_first_child(node2)) { + anchor.before( + /** @type {TemplateNode} */ + /* @__PURE__ */ get_first_child(node2) + ); + } + } else { + anchor.before(node2); + } + }); +} +function component(node, get_component, render_fn) { + var hydration_start_node; + if (hydrating) { + hydration_start_node = hydrate_node; + hydrate_next(); + } + var branches = new BranchManager(node); + block(() => { + var component2 = get_component() ?? null; + if (hydrating) { + var data = read_hydration_instruction( + /** @type {TemplateNode} */ + hydration_start_node + ); + var server_had_component = data === HYDRATION_START; + var client_has_component = component2 !== null; + if (server_had_component !== client_has_component) { + var anchor = skip_nodes(); + set_hydrate_node(anchor); + branches.anchor = anchor; + set_hydrating(false); + branches.ensure(component2, component2 && ((target) => render_fn(target, component2))); + set_hydrating(true); + return; + } + } + branches.ensure(component2, component2 && ((target) => render_fn(target, component2))); + }, EFFECT_TRANSPARENT); +} +function attach(node, get_fn) { + var fn = void 0; + var e; + managed(() => { + if (fn !== (fn = get_fn())) { + if (e) { + destroy_effect(e); + e = null; + } + if (fn) { + e = branch(() => { + effect(() => ( + /** @type {(node: Element) => void} */ + fn(node) + )); + }); + } + } + }); +} +function r(e) { + var t, f, n = ""; + if ("string" == typeof e || "number" == typeof e) n += e; + else if ("object" == typeof e) if (Array.isArray(e)) { + var o = e.length; + for (t = 0; t < o; t++) e[t] && (f = r(e[t])) && (n && (n += " "), n += f); + } else for (f in e) e[f] && (n && (n += " "), n += f); + return n; +} +function clsx$1() { + for (var e, t, f = 0, n = "", o = arguments.length; f < o; f++) (e = arguments[f]) && (t = r(e)) && (n && (n += " "), n += t); + return n; +} +function clsx(value) { + if (typeof value === "object") { + return clsx$1(value); + } else { + return value ?? ""; + } +} +const whitespace = [..." \n\r\f \v\uFEFF"]; +function to_class(value, hash, directives) { + var classname = value == null ? "" : "" + value; + if (directives) { + for (var key2 of Object.keys(directives)) { + if (directives[key2]) { + classname = classname ? classname + " " + key2 : key2; + } else if (classname.length) { + var len = key2.length; + var a = 0; + while ((a = classname.indexOf(key2, a)) >= 0) { + var b = a + len; + if ((a === 0 || whitespace.includes(classname[a - 1])) && (b === classname.length || whitespace.includes(classname[b]))) { + classname = (a === 0 ? "" : classname.substring(0, a)) + classname.substring(b + 1); + } else { + a = b; + } + } + } + } + } + return classname === "" ? null : classname; +} +function append_styles(styles, important = false) { + var separator = important ? " !important;" : ";"; + var css = ""; + for (var key2 of Object.keys(styles)) { + var value = styles[key2]; + if (value != null && value !== "") { + css += " " + key2 + ": " + value + separator; + } + } + return css; +} +function to_css_name(name) { + if (name[0] !== "-" || name[1] !== "-") { + return name.toLowerCase(); + } + return name; +} +function to_style(value, styles) { + if (styles) { + var new_style = ""; + var normal_styles; + var important_styles; + if (Array.isArray(styles)) { + normal_styles = styles[0]; + important_styles = styles[1]; + } else { + normal_styles = styles; + } + if (value) { + value = String(value).replaceAll(/\s*\/\*.*?\*\/\s*/g, "").trim(); + var in_str = false; + var in_apo = 0; + var in_comment = false; + var reserved_names = []; + if (normal_styles) { + reserved_names.push(...Object.keys(normal_styles).map(to_css_name)); + } + if (important_styles) { + reserved_names.push(...Object.keys(important_styles).map(to_css_name)); + } + var start_index = 0; + var name_index = -1; + const len = value.length; + for (var i = 0; i < len; i++) { + var c = value[i]; + if (in_comment) { + if (c === "/" && value[i - 1] === "*") { + in_comment = false; + } + } else if (in_str) { + if (in_str === c) { + in_str = false; + } + } else if (c === "/" && value[i + 1] === "*") { + in_comment = true; + } else if (c === '"' || c === "'") { + in_str = c; + } else if (c === "(") { + in_apo++; + } else if (c === ")") { + in_apo--; + } + if (!in_comment && in_str === false && in_apo === 0) { + if (c === ":" && name_index === -1) { + name_index = i; + } else if (c === ";" || i === len - 1) { + if (name_index !== -1) { + var name = to_css_name(value.substring(start_index, name_index).trim()); + if (!reserved_names.includes(name)) { + if (c !== ";") { + i++; + } + var property = value.substring(start_index, i).trim(); + new_style += " " + property + ";"; + } + } + start_index = i + 1; + name_index = -1; + } + } + } + } + if (normal_styles) { + new_style += append_styles(normal_styles); + } + if (important_styles) { + new_style += append_styles(important_styles, true); + } + new_style = new_style.trim(); + return new_style === "" ? null : new_style; + } + return value == null ? null : String(value); +} +function set_class(dom, is_html, value, hash, prev_classes, next_classes) { + var prev = ( + /** @type {any} */ + dom[CLASS_CACHE] + ); + if (hydrating || prev !== value || prev === void 0) { + var next_class_name = to_class(value, hash, next_classes); + if (!hydrating || next_class_name !== dom.getAttribute("class")) { + if (next_class_name == null) { + dom.removeAttribute("class"); + } else if (is_html) { + dom.className = next_class_name; + } else { + dom.setAttribute("class", next_class_name); + } + } + dom[CLASS_CACHE] = value; + } else if (next_classes && prev_classes !== next_classes) { + for (var key2 in next_classes) { + var is_present = !!next_classes[key2]; + if (prev_classes == null || is_present !== !!prev_classes[key2]) { + dom.classList.toggle(key2, is_present); + } + } + } + return next_classes; +} +function update_styles(dom, prev = {}, next2, priority) { + for (var key2 in next2) { + var value = next2[key2]; + if (prev[key2] !== value) { + if (next2[key2] == null) { + dom.style.removeProperty(key2); + } else { + dom.style.setProperty(key2, value, priority); + } + } + } +} +function set_style(dom, value, prev_styles, next_styles) { + var prev = ( + /** @type {any} */ + dom[STYLE_CACHE] + ); + if (hydrating || prev !== value) { + var next_style_attr = to_style(value, next_styles); + if (!hydrating || next_style_attr !== dom.getAttribute("style")) { + if (next_style_attr == null) { + dom.removeAttribute("style"); + } else { + dom.style.cssText = next_style_attr; + } + } + dom[STYLE_CACHE] = value; + } else if (next_styles) { + if (Array.isArray(next_styles)) { + update_styles(dom, prev_styles?.[0], next_styles[0]); + update_styles(dom, prev_styles?.[1], next_styles[1], "important"); + } else { + update_styles(dom, prev_styles, next_styles); + } + } + return next_styles; +} +function select_option(select, value, mounting = false) { + if (select.multiple) { + if (value == void 0) { + return; + } + if (!is_array(value)) { + return select_multiple_invalid_value(); + } + for (var option of select.options) { + option.selected = value.includes(get_option_value(option)); + } + return; + } + for (option of select.options) { + var option_value = get_option_value(option); + if (is(option_value, value)) { + option.selected = true; + return; + } + } + if (!mounting || value !== void 0) { + select.selectedIndex = -1; + } +} +function init_select(select) { + var observer = new MutationObserver(() => { + select_option(select, select.__value); + }); + observer.observe(select, { + // Listen to option element changes + childList: true, + subtree: true, + // because of + // Listen to option element value attribute changes + // (doesn't get notified of select value changes, + // because that property is not reflected as an attribute) + attributes: true, + attributeFilter: ["value"] + }); + teardown(() => { + observer.disconnect(); + }); +} +function get_option_value(option) { + if ("__value" in option) { + return option.__value; + } else { + return option.value; + } +} +const CLASS = /* @__PURE__ */ Symbol("class"); +const STYLE = /* @__PURE__ */ Symbol("style"); +const IS_CUSTOM_ELEMENT = /* @__PURE__ */ Symbol("is custom element"); +const IS_HTML = /* @__PURE__ */ Symbol("is html"); +const LINK_TAG = IS_XHTML ? "link" : "LINK"; +const INPUT_TAG = IS_XHTML ? "input" : "INPUT"; +const OPTION_TAG = IS_XHTML ? "option" : "OPTION"; +const SELECT_TAG = IS_XHTML ? "select" : "SELECT"; +const PROGRESS_TAG = IS_XHTML ? "progress" : "PROGRESS"; +function remove_input_defaults(input) { + if (!hydrating) return; + var already_removed = false; + var remove_defaults = () => { + if (already_removed) return; + already_removed = true; + if (input.hasAttribute("value")) { + var value = input.value; + set_attribute(input, "value", null); + input.value = value; + } + if (input.hasAttribute("checked")) { + var checked = input.checked; + set_attribute(input, "checked", null); + input.checked = checked; + } + }; + input[FORM_RESET_HANDLER] = remove_defaults; + queue_micro_task(remove_defaults); + add_form_reset_listener(); +} +function set_value(element, value) { + var attributes = get_attributes(element); + if (attributes.value === (attributes.value = // treat null and undefined the same for the initial value + value ?? void 0) || // @ts-expect-error + // `progress` elements always need their value set when it's `0` + element.value === value && (value !== 0 || element.nodeName !== PROGRESS_TAG)) { + return; + } + element.value = value ?? ""; +} +function set_selected(element, selected) { + if (selected) { + if (!element.hasAttribute("selected")) { + element.setAttribute("selected", ""); + } + } else { + element.removeAttribute("selected"); + } +} +function set_attribute(element, attribute, value, skip_warning) { + var attributes = get_attributes(element); + if (hydrating) { + attributes[attribute] = element.getAttribute(attribute); + if (attribute === "src" || attribute === "srcset" || attribute === "href" && element.nodeName === LINK_TAG) { + return; + } + } + if (attributes[attribute] === (attributes[attribute] = value)) return; + if (attribute === "loading") { + element[LOADING_ATTR_SYMBOL] = value; + } + if (value == null) { + element.removeAttribute(attribute); + } else if (typeof value !== "string" && get_setters(element).includes(attribute)) { + element[attribute] = value; + } else { + element.setAttribute(attribute, value); + } +} +function set_attributes(element, prev, next2, css_hash, should_remove_defaults = false, skip_warning = false) { + if (hydrating && should_remove_defaults && element.nodeName === INPUT_TAG) { + var input = ( + /** @type {HTMLInputElement} */ + element + ); + var attribute = input.type === "checkbox" ? "defaultChecked" : "defaultValue"; + if (!(attribute in next2)) { + remove_input_defaults(input); + } + } + var attributes = get_attributes(element); + var is_custom_element = attributes[IS_CUSTOM_ELEMENT]; + var preserve_attribute_case = !attributes[IS_HTML]; + let is_hydrating_custom_element = hydrating && is_custom_element; + if (is_hydrating_custom_element) { + set_hydrating(false); + } + var current = prev || {}; + var is_option_element = element.nodeName === OPTION_TAG; + for (var key2 in prev) { + if (!(key2 in next2)) { + next2[key2] = null; + } + } + if (next2.class) { + next2.class = clsx(next2.class); + } else if (next2[CLASS]) { + next2.class = null; + } + if (next2[STYLE]) { + next2.style ??= null; + } + var setters = get_setters(element); + for (const key3 in next2) { + let value = next2[key3]; + if (is_option_element && key3 === "value" && value == null) { + element.value = element.__value = ""; + current[key3] = value; + continue; + } + if (key3 === "class") { + var is_html = element.namespaceURI === "http://www.w3.org/1999/xhtml"; + set_class(element, is_html, value, css_hash, prev?.[CLASS], next2[CLASS]); + current[key3] = value; + current[CLASS] = next2[CLASS]; + continue; + } + if (key3 === "style") { + set_style(element, value, prev?.[STYLE], next2[STYLE]); + current[key3] = value; + current[STYLE] = next2[STYLE]; + continue; + } + var prev_value = current[key3]; + if (value === prev_value && !(value === void 0 && element.hasAttribute(key3))) { + continue; + } + current[key3] = value; + var prefix = key3[0] + key3[1]; + if (prefix === "$$") continue; + if (prefix === "on") { + const opts = {}; + const event_handle_key = "$$" + key3; + let event_name = key3.slice(2); + var is_delegated = can_delegate_event(event_name); + if (is_capture_event(event_name)) { + event_name = event_name.slice(0, -7); + opts.capture = true; + } + if (!is_delegated && prev_value) { + if (value != null) continue; + element.removeEventListener(event_name, current[event_handle_key], opts); + current[event_handle_key] = null; + } + if (is_delegated) { + delegated(event_name, element, value); + delegate([event_name]); + } else if (value != null) { + let handle2 = function(evt) { + current[key3].call(this, evt); + }; + var handle = handle2; + current[event_handle_key] = create_event(event_name, element, handle2, opts); + } + } else if (key3 === "style") { + set_attribute(element, key3, value); + } else if (key3 === "autofocus") { + autofocus( + /** @type {HTMLElement} */ + element, + Boolean(value) + ); + } else if (!is_custom_element && (key3 === "__value" || key3 === "value" && value != null)) { + element.value = element.__value = value; + } else if (key3 === "selected" && is_option_element) { + set_selected( + /** @type {HTMLOptionElement} */ + element, + value + ); + } else { + var name = key3; + if (!preserve_attribute_case) { + name = normalize_attribute(name); + } + var is_default = name === "defaultValue" || name === "defaultChecked"; + if (value == null && !is_custom_element && !is_default) { + attributes[key3] = null; + if (name === "value" || name === "checked") { + let input2 = ( + /** @type {HTMLInputElement} */ + element + ); + const use_default = prev === void 0; + if (name === "value") { + let previous = input2.defaultValue; + input2.removeAttribute(name); + input2.defaultValue = previous; + input2.value = input2.__value = use_default ? previous : null; + } else { + let previous = input2.defaultChecked; + input2.removeAttribute(name); + input2.defaultChecked = previous; + input2.checked = use_default ? previous : false; + } + } else { + element.removeAttribute(key3); + } + } else if (is_default || setters.includes(name) && (is_custom_element || typeof value !== "string")) { + element[name] = value; + if (name in attributes) attributes[name] = UNINITIALIZED; + } else if (typeof value !== "function") { + set_attribute(element, name, value); + } + } + } + if (is_hydrating_custom_element) { + set_hydrating(true); + } + return current; +} +function attribute_effect(element, fn, sync = [], async = [], blockers = [], css_hash, should_remove_defaults = false, skip_warning = false) { + flatten(blockers, sync, async, (values) => { + var prev = void 0; + var effects = {}; + var is_select = element.nodeName === SELECT_TAG; + var inited = false; + managed(() => { + var next2 = fn(...values.map(get)); + var current = set_attributes( + element, + prev, + next2, + css_hash, + should_remove_defaults, + skip_warning + ); + if (inited && is_select && "value" in next2) { + select_option( + /** @type {HTMLSelectElement} */ + element, + next2.value + ); + } + for (let symbol of Object.getOwnPropertySymbols(effects)) { + if (!next2[symbol]) destroy_effect(effects[symbol]); + } + for (let symbol of Object.getOwnPropertySymbols(next2)) { + var n = next2[symbol]; + if (symbol.description === ATTACHMENT_KEY && (!prev || n !== prev[symbol])) { + if (effects[symbol]) destroy_effect(effects[symbol]); + effects[symbol] = branch(() => attach(element, () => n)); + } + current[symbol] = n; + } + prev = current; + }); + if (is_select) { + var select = ( + /** @type {HTMLSelectElement} */ + element + ); + effect(() => { + select_option( + select, + /** @type {Record} */ + prev.value, + true + ); + init_select(select); + }); + } + inited = true; + }); +} +function get_attributes(element) { + return ( + /** @type {Record} **/ + /** @type {any} */ + element[ATTRIBUTES_CACHE] ??= { + [IS_CUSTOM_ELEMENT]: element.nodeName.includes("-"), + [IS_HTML]: element.namespaceURI === NAMESPACE_HTML + } + ); +} +var setters_cache = /* @__PURE__ */ new Map(); +function get_setters(element) { + var cache_key = element.getAttribute("is") || element.nodeName; + var setters = setters_cache.get(cache_key); + if (setters) return setters; + setters_cache.set(cache_key, setters = []); + var descriptors; + var proto = element; + var element_proto = Element.prototype; + while (element_proto !== proto) { + descriptors = get_descriptors(proto); + for (var key2 in descriptors) { + if (descriptors[key2].set && // better safe than sorry, we don't want spread attributes to mess with HTML content + key2 !== "innerHTML" && key2 !== "textContent" && key2 !== "innerText") { + setters.push(key2); + } + } + proto = get_prototype_of(proto); + } + return setters; +} +function bind_value(input, get2, set2 = get2) { + var batches = /* @__PURE__ */ new WeakSet(); + listen_to_event_and_reset_event(input, "input", async (is_reset) => { + var value = is_reset ? input.defaultValue : input.value; + value = is_numberlike_input(input) ? to_number(value) : value; + set2(value); + if (current_batch !== null) { + batches.add(current_batch); + } + await tick(); + if (value !== (value = get2())) { + var start = input.selectionStart; + var end = input.selectionEnd; + var length = input.value.length; + input.value = value ?? ""; + if (end !== null) { + var new_length = input.value.length; + if (start === end && end === length && new_length > length) { + input.selectionStart = new_length; + input.selectionEnd = new_length; + } else { + input.selectionStart = start; + input.selectionEnd = Math.min(end, new_length); + } + } + } + }); + if ( + // If we are hydrating and the value has since changed, + // then use the updated value from the input instead. + hydrating && input.defaultValue !== input.value || // If defaultValue is set, then value == defaultValue + // TODO Svelte 6: remove input.value check and set to empty string? + untrack(get2) == null && input.value + ) { + set2(is_numberlike_input(input) ? to_number(input.value) : input.value); + if (current_batch !== null) { + batches.add(current_batch); + } + } + render_effect(() => { + var value = get2(); + if (input === document.activeElement) { + var batch = ( + /** @type {Batch} */ + current_batch + ); + if (batches.has(batch)) { + return; + } + } + if (is_numberlike_input(input) && value === to_number(input.value)) { + return; + } + if (input.type === "date" && !value && !input.value) { + return; + } + if (value !== input.value) { + input.value = value ?? ""; + } + }); +} +function is_numberlike_input(input) { + var type = input.type; + return type === "number" || type === "range"; +} +function to_number(value) { + return value === "" ? null : +value; +} +function is_bound_this(bound_value, element_or_component) { + return bound_value === element_or_component || bound_value?.[STATE_SYMBOL] === element_or_component; +} +function bind_this(element_or_component = {}, update, get_value, get_parts) { + var component_effect = ( + /** @type {ComponentContext} */ + component_context.r + ); + var parent = ( + /** @type {Effect} */ + active_effect + ); + effect(() => { + var old_parts; + var parts; + render_effect(() => { + old_parts = parts; + parts = []; + untrack(() => { + if (!is_bound_this(get_value(...parts), element_or_component)) { + update(element_or_component, ...parts); + if (old_parts && is_bound_this(get_value(...old_parts), element_or_component)) { + update(null, ...old_parts); + } + } + }); + }); + return () => { + let p = parent; + while (p !== component_effect && p.parent !== null && p.parent.f & DESTROYING) { + p = p.parent; + } + const teardown2 = () => { + if (parts && is_bound_this(get_value(...parts), element_or_component)) { + update(null, ...parts); + } + }; + const original_teardown = p.teardown; + p.teardown = () => { + teardown2(); + original_teardown?.(); + }; + }; + }); + return element_or_component; +} +const rest_props_handler = { + get(target, key2) { + if (target.exclude.includes(key2)) return; + return target.props[key2]; + }, + set(target, key2) { + return false; + }, + getOwnPropertyDescriptor(target, key2) { + if (target.exclude.includes(key2)) return; + if (key2 in target.props) { + return { + enumerable: true, + configurable: true, + value: target.props[key2] + }; + } + }, + has(target, key2) { + if (target.exclude.includes(key2)) return false; + return key2 in target.props; + }, + ownKeys(target) { + return Reflect.ownKeys(target.props).filter((key2) => !target.exclude.includes(key2)); + } +}; +// @__NO_SIDE_EFFECTS__ +function rest_props(props, exclude, name) { + return new Proxy( + { props, exclude }, + rest_props_handler + ); +} +function prop(props, key2, flags2, fallback) { + var fallback_value = ( + /** @type {V} */ + fallback + ); + var fallback_dirty = true; + var get_fallback = () => { + if (fallback_dirty) { + fallback_dirty = false; + fallback_value = /** @type {V} */ + fallback; + } + return fallback_value; + }; + var initial_value; + { + initial_value = /** @type {V} */ + props[key2]; + } + if (initial_value === void 0 && fallback !== void 0) { + initial_value = get_fallback(); + } + var getter; + { + getter = () => { + var value = ( + /** @type {V} */ + props[key2] + ); + if (value === void 0) return get_fallback(); + fallback_dirty = true; + return value; + }; + } + var overridden = false; + var d = /* @__PURE__ */ derived(() => { + overridden = false; + return getter(); + }); + var parent_effect = ( + /** @type {Effect} */ + active_effect + ); + return ( + /** @type {() => V} */ + (function(value, mutation) { + if (arguments.length > 0) { + const new_value = mutation ? get(d) : value; + set(d, new_value); + overridden = true; + if (fallback_value !== void 0) { + fallback_value = new_value; + } + return value; + } + if (is_destroying_effect && overridden || (parent_effect.f & DESTROYED) !== 0) { + return d.v; + } + return get(d); + }) + ); +} +function createClassComponent(options) { + return new Svelte4Component(options); +} +class Svelte4Component { + /** @type {any} */ + #events; + /** @type {Record} */ + #instance; + /** + * @param {ComponentConstructorOptions & { + * component: any; + * }} options + */ + constructor(options) { + var sources = /* @__PURE__ */ new Map(); + var add_source = (key2, value) => { + var s = /* @__PURE__ */ mutable_source(value, false, false); + sources.set(key2, s); + return s; + }; + const props = new Proxy( + { ...options.props || {}, $$events: {} }, + { + get(target, prop2) { + return get(sources.get(prop2) ?? add_source(prop2, Reflect.get(target, prop2))); + }, + has(target, prop2) { + if (prop2 === LEGACY_PROPS) return true; + get(sources.get(prop2) ?? add_source(prop2, Reflect.get(target, prop2))); + return Reflect.has(target, prop2); + }, + set(target, prop2, value) { + set(sources.get(prop2) ?? add_source(prop2, value), value); + return Reflect.set(target, prop2, value); + } + } + ); + this.#instance = (options.hydrate ? hydrate : mount)(options.component, { + target: options.target, + anchor: options.anchor, + props, + context: options.context, + intro: options.intro ?? false, + recover: options.recover, + transformError: options.transformError + }); + if (!options?.props?.$$host || options.sync === false) { + flushSync(); + } + this.#events = props.$$events; + for (const key2 of Object.keys(this.#instance)) { + if (key2 === "$set" || key2 === "$destroy" || key2 === "$on") continue; + define_property(this, key2, { + get() { + return this.#instance[key2]; + }, + /** @param {any} value */ + set(value) { + this.#instance[key2] = value; + }, + enumerable: true + }); + } + this.#instance.$set = /** @param {Record} next */ + (next2) => { + Object.assign(props, next2); + }; + this.#instance.$destroy = () => { + unmount(this.#instance); + }; + } + /** @param {Record} props */ + $set(props) { + this.#instance.$set(props); + } + /** + * @param {string} event + * @param {(...args: any[]) => any} callback + * @returns {any} + */ + $on(event2, callback) { + this.#events[event2] = this.#events[event2] || []; + const cb = (...args) => callback.call(this, ...args); + this.#events[event2].push(cb); + return () => { + this.#events[event2] = this.#events[event2].filter( + /** @param {any} fn */ + (fn) => fn !== cb + ); + }; + } + $destroy() { + this.#instance.$destroy(); + } +} +let SvelteElement = class { +}; +if (typeof HTMLElement === "function") { + SvelteElement = class extends HTMLElement { + /** The Svelte component constructor */ + $$ctor; + /** Slots */ + $$s; + /** @type {any} The Svelte component instance */ + $$c; + /** Whether or not the custom element is connected */ + $$cn = false; + /** @type {Record} Component props data */ + $$d = {}; + /** `true` if currently in the process of reflecting component props back to attributes */ + $$r = false; + /** @type {Record} Props definition (name, reflected, type etc) */ + $$p_d = {}; + /** @type {Record} Event listeners */ + $$l = {}; + /** @type {Map} Event listener unsubscribe functions */ + $$l_u = /* @__PURE__ */ new Map(); + /** @type {any} The managed render effect for reflecting attributes */ + $$me; + /** @type {ShadowRoot | null} The ShadowRoot of the custom element */ + $$shadowRoot = null; + /** + * @param {*} $$componentCtor + * @param {*} $$slots + * @param {ShadowRootInit | undefined} shadow_root_init + */ + constructor($$componentCtor, $$slots, shadow_root_init) { + super(); + this.$$ctor = $$componentCtor; + this.$$s = $$slots; + if (shadow_root_init) { + this.$$shadowRoot = this.attachShadow(shadow_root_init); + } + } + /** + * @param {string} type + * @param {EventListenerOrEventListenerObject} listener + * @param {boolean | AddEventListenerOptions} [options] + */ + addEventListener(type, listener, options) { + this.$$l[type] = this.$$l[type] || []; + this.$$l[type].push(listener); + if (this.$$c) { + const unsub = this.$$c.$on(type, listener); + this.$$l_u.set(listener, unsub); + } + super.addEventListener(type, listener, options); + } + /** + * @param {string} type + * @param {EventListenerOrEventListenerObject} listener + * @param {boolean | AddEventListenerOptions} [options] + */ + removeEventListener(type, listener, options) { + super.removeEventListener(type, listener, options); + if (this.$$c) { + const unsub = this.$$l_u.get(listener); + if (unsub) { + unsub(); + this.$$l_u.delete(listener); + } + } + } + async connectedCallback() { + this.$$cn = true; + if (!this.$$c) { + let create_slot2 = function(name) { + return (anchor) => { + const slot = create_element("slot"); + if (name !== "default") slot.name = name; + append(anchor, slot); + }; + }; + var create_slot = create_slot2; + await Promise.resolve(); + if (!this.$$cn || this.$$c) { + return; + } + const $$slots = {}; + const existing_slots = get_custom_elements_slots(this); + for (const name of this.$$s) { + if (name in existing_slots) { + if (name === "default" && !this.$$d.children) { + this.$$d.children = create_slot2(name); + $$slots.default = true; + } else { + $$slots[name] = create_slot2(name); + } + } + } + for (const attribute of this.attributes) { + const name = this.$$g_p(attribute.name); + if (!(name in this.$$d)) { + this.$$d[name] = get_custom_element_value(name, attribute.value, this.$$p_d, "toProp"); + } + } + for (const key2 in this.$$p_d) { + if (!(key2 in this.$$d) && this[key2] !== void 0) { + this.$$d[key2] = this[key2]; + delete this[key2]; + } + } + this.$$c = createClassComponent({ + component: this.$$ctor, + target: this.$$shadowRoot || this, + props: { + ...this.$$d, + $$slots, + $$host: this + } + }); + this.$$me = effect_root(() => { + render_effect(() => { + this.$$r = true; + for (const key2 of object_keys(this.$$c)) { + if (!this.$$p_d[key2]?.reflect) continue; + this.$$d[key2] = this.$$c[key2]; + const attribute_value = get_custom_element_value( + key2, + this.$$d[key2], + this.$$p_d, + "toAttribute" + ); + if (attribute_value == null) { + this.removeAttribute(this.$$p_d[key2].attribute || key2); + } else { + this.setAttribute(this.$$p_d[key2].attribute || key2, attribute_value); + } + } + this.$$r = false; + }); + }); + for (const type in this.$$l) { + for (const listener of this.$$l[type]) { + const unsub = this.$$c.$on(type, listener); + this.$$l_u.set(listener, unsub); + } + } + this.$$l = {}; + } + } + // We don't need this when working within Svelte code, but for compatibility of people using this outside of Svelte + // and setting attributes through setAttribute etc, this is helpful + /** + * @param {string} attr + * @param {string} _oldValue + * @param {string} newValue + */ + attributeChangedCallback(attr, _oldValue, newValue) { + if (this.$$r) return; + attr = this.$$g_p(attr); + this.$$d[attr] = get_custom_element_value(attr, newValue, this.$$p_d, "toProp"); + this.$$c?.$set({ [attr]: this.$$d[attr] }); + } + disconnectedCallback() { + this.$$cn = false; + Promise.resolve().then(() => { + if (!this.$$cn && this.$$c) { + this.$$c.$destroy(); + this.$$me(); + this.$$c = void 0; + } + }); + } + /** + * @param {string} attribute_name + */ + $$g_p(attribute_name) { + return object_keys(this.$$p_d).find( + (key2) => this.$$p_d[key2].attribute === attribute_name || !this.$$p_d[key2].attribute && key2.toLowerCase() === attribute_name + ) || attribute_name; + } + }; +} +function get_custom_element_value(prop2, value, props_definition, transform) { + const type = props_definition[prop2]?.type; + value = type === "Boolean" && typeof value !== "boolean" ? value != null : value; + if (!transform || !props_definition[prop2]) { + return value; + } else if (transform === "toAttribute") { + switch (type) { + case "Object": + case "Array": + return value == null ? null : JSON.stringify(value); + case "Boolean": + return value ? "" : null; + case "Number": + return value == null ? null : value; + default: + return value; + } + } else { + switch (type) { + case "Object": + case "Array": + return value && JSON.parse(value); + case "Boolean": + return value; + // conversion already handled above + case "Number": + return value != null ? +value : value; + default: + return value; + } + } +} +function get_custom_elements_slots(element) { + const result = {}; + element.childNodes.forEach((node) => { + result[ + /** @type {Element} node */ + node.slot || "default" + ] = true; + }); + return result; +} +function create_custom_element(Component, props_definition, slots, exports$1, shadow_root_init, extend) { + let Class = class extends SvelteElement { + constructor() { + super(Component, slots, shadow_root_init); + this.$$p_d = props_definition; + } + static get observedAttributes() { + return object_keys(props_definition).map( + (key2) => (props_definition[key2].attribute || key2).toLowerCase() + ); + } + }; + object_keys(props_definition).forEach((prop2) => { + define_property(Class.prototype, prop2, { + get() { + return this.$$c && prop2 in this.$$c ? this.$$c[prop2] : this.$$d[prop2]; + }, + set(value) { + value = get_custom_element_value(prop2, value, props_definition); + this.$$d[prop2] = value; + var component2 = this.$$c; + if (component2) { + var setter = get_descriptor(component2, prop2)?.get; + if (setter) { + component2[prop2] = value; + } else { + component2.$set({ [prop2]: value }); + } + } + } + }); + }); + exports$1.forEach((property) => { + define_property(Class.prototype, property, { + get() { + return this.$$c?.[property]; + } + }); + }); + Component.element = /** @type {any} */ + Class; + return Class; +} +var root$7 = /* @__PURE__ */ from_html(`
`); +function Checkbox($$anchor, $$props) { + push($$props, true); + let loading = prop($$props, "loading"), rest = /* @__PURE__ */ rest_props($$props, ["$$slots", "$$events", "$$legacy", "$$host", "loading"]); + let inputEl; + function onClick() { + inputEl?.click(); + } + var $$exports = { + get loading() { + return loading(); + }, + set loading($$value) { + loading($$value); + flushSync(); + } + }; + var div = root$7(); + var input = child(div); + attribute_effect(input, () => ({ type: "checkbox", ...rest }), void 0, void 0, void 0, void 0, true); + bind_this(input, ($$value) => inputEl = $$value, () => inputEl); + var svg = sibling(input, 2); + next(2); + reset(div); + template_effect(() => set_attribute(div, "data-loading", loading())); + delegated("click", svg, onClick); + append($$anchor, div); + return pop($$exports); +} +delegate(["click"]); +create_custom_element(Checkbox, { loading: {} }, [], [], { mode: "open" }); +var root$6 = /* @__PURE__ */ from_html(`
`); +function CheckboxNative($$anchor, $$props) { + push($$props, true); + let loading = prop($$props, "loading"), rest = /* @__PURE__ */ rest_props($$props, ["$$slots", "$$events", "$$legacy", "$$host", "loading"]); + var $$exports = { + get loading() { + return loading(); + }, + set loading($$value) { + loading($$value); + flushSync(); + } + }; + var div = root$6(); + var input = child(div); + attribute_effect(input, () => ({ type: "checkbox", ...rest }), void 0, void 0, void 0, void 0, true); + next(2); + reset(div); + template_effect(() => set_attribute(div, "data-loading", loading())); + append($$anchor, div); + return pop($$exports); +} +create_custom_element(CheckboxNative, { loading: {} }, [], [], { mode: "open" }); +var root$5 = /* @__PURE__ */ from_html(`
`); +function Logo($$anchor, $$props) { + push($$props, true); + let strings = prop($$props, "strings"); + const website = "https://altcha.org"; + var $$exports = { + get strings() { + return strings(); + }, + set strings($$value) { + strings($$value); + flushSync(); + } + }; + var div = root$5(); + var a = child(div); + set_attribute(a, "href", website); + reset(div); + template_effect(() => set_attribute(a, "aria-label", strings().ariaLinkLabel)); + append($$anchor, div); + return pop($$exports); +} +create_custom_element(Logo, { strings: {} }, [], [], { mode: "open" }); +var root$4 = /* @__PURE__ */ from_html(``); +function Footer($$anchor, $$props) { + push($$props, true); + let logo = prop($$props, "logo"), strings = prop($$props, "strings"); + var $$exports = { + get logo() { + return logo(); + }, + set logo($$value) { + logo($$value); + flushSync(); + }, + get strings() { + return strings(); + }, + set strings($$value) { + strings($$value); + flushSync(); + } + }; + var div = root$4(); + var p = child(div); + html(p, () => strings().footer, true); + reset(p); + var node = sibling(p, 2); + { + var consequent = ($$anchor2) => { + Logo($$anchor2, { + get strings() { + return strings(); + } + }); + }; + if_block(node, ($$render) => { + if (logo()) $$render(consequent); + }); + } + reset(div); + append($$anchor, div); + return pop($$exports); +} +create_custom_element(Footer, { logo: {}, strings: {} }, [], [], { mode: "open" }); +var root$3 = /* @__PURE__ */ from_html(`
`); +function Switch($$anchor, $$props) { + push($$props, true); + let loading = prop($$props, "loading"), rest = /* @__PURE__ */ rest_props($$props, ["$$slots", "$$events", "$$legacy", "$$host", "loading"]); + let inputEl; + function onClick() { + inputEl?.click(); + } + var $$exports = { + get loading() { + return loading(); + }, + set loading($$value) { + loading($$value); + flushSync(); + } + }; + var div = root$3(); + var input = child(div); + attribute_effect(input, () => ({ type: "checkbox", ...rest }), void 0, void 0, void 0, void 0, true); + bind_this(input, ($$value) => inputEl = $$value, () => inputEl); + var div_1 = sibling(input, 2); + reset(div); + template_effect(() => set_attribute(div, "data-loading", loading())); + delegated("click", div_1, onClick); + append($$anchor, div); + return pop($$exports); +} +delegate(["click"]); +create_custom_element(Switch, { loading: {} }, [], [], { mode: "open" }); +var AudioState = /* @__PURE__ */ ((AudioState2) => { + AudioState2["ERROR"] = "error"; + AudioState2["LOADING"] = "loading"; + AudioState2["PLAYING"] = "playing"; + AudioState2["PAUSED"] = "paused"; + AudioState2["READY"] = "ready"; + return AudioState2; +})(AudioState || {}); +var State = /* @__PURE__ */ ((State2) => { + State2["CODE"] = "code"; + State2["ERROR"] = "error"; + State2["VERIFIED"] = "verified"; + State2["VERIFYING"] = "verifying"; + State2["UNVERIFIED"] = "unverified"; + State2["EXPIRED"] = "expired"; + return State2; +})(State || {}); +var root_1$2 = /* @__PURE__ */ from_html(`
`); +var root_3$2 = /* @__PURE__ */ from_html(`
`); +var root_4 = /* @__PURE__ */ from_svg(``); +var root_5 = /* @__PURE__ */ from_svg(``); +var root_6 = /* @__PURE__ */ from_svg(``); +var root_2$2 = /* @__PURE__ */ from_html(``); +var root_7 = /* @__PURE__ */ from_html(``); +var root$2 = /* @__PURE__ */ from_html(`
`); +function Code($$anchor, $$props) { + push($$props, true); + let audioUrl = prop($$props, "audioUrl"), codeChallenge = prop($$props, "codeChallenge"), config = prop($$props, "config"), imageUrl = prop($$props, "imageUrl"), onCancel = prop($$props, "onCancel"), onReload = prop($$props, "onReload"), onSubmit = prop($$props, "onSubmit"), strings = prop($$props, "strings"); + let audioState = /* @__PURE__ */ state(void 0); + let elAudio = /* @__PURE__ */ state(void 0); + let elInput = /* @__PURE__ */ state(void 0); + let loading = /* @__PURE__ */ state(false); + let code = /* @__PURE__ */ state(""); + let playAudio = /* @__PURE__ */ state(false); + onMount(() => { + if (!config().disableAutoFocus) { + tick().then(() => { + get(elInput)?.focus(); + }); + } + return () => { + if (get(elAudio)) { + get(elAudio).pause(); + set(elAudio, void 0); + } + }; + }); + function onAudioEnded() { + set(audioState, AudioState.PAUSED, true); + } + function onAudioError(ev) { + set(audioState, AudioState.ERROR, true); + } + function onAudioCanPlay() { + set(audioState, AudioState.READY, true); + } + function onAudioLoadStart() { + set(audioState, AudioState.LOADING, true); + } + function onAudioPlaying() { + set(audioState, AudioState.PLAYING, true); + } + function onAudioPause() { + set(audioState, AudioState.PAUSED, true); + } + function onInputKeyDown(ev) { + if (ev.code === "Space") { + ev.preventDefault(); + ev.stopPropagation(); + onPlayAudio(); + } else if (ev.code === "Escape") { + ev.preventDefault(); + ev.stopPropagation(); + onCancel()?.(); + } + } + function onSubmitCapture(ev) { + ev.preventDefault(); + ev.stopPropagation(); + onSubmit()?.(get(code)); + } + function onPlayAudio() { + if (get(elAudio)) { + if (get(audioState) === AudioState.LOADING) ; + else if (!get(elAudio).paused) { + get(elAudio).pause(); + } else { + if (audioUrl() && get(elAudio).src !== audioUrl()) { + get(elAudio).src = audioUrl(); + } + get(elAudio).currentTime = 0; + get(elAudio).play(); + } + } else { + set(playAudio, true); + requestAnimationFrame(() => { + if (get(elAudio) && audioUrl()) { + get(elAudio).src = audioUrl(); + get(elAudio).play(); + } + }); + } + } + var $$exports = { + get audioUrl() { + return audioUrl(); + }, + set audioUrl($$value) { + audioUrl($$value); + flushSync(); + }, + get codeChallenge() { + return codeChallenge(); + }, + set codeChallenge($$value) { + codeChallenge($$value); + flushSync(); + }, + get config() { + return config(); + }, + set config($$value) { + config($$value); + flushSync(); + }, + get imageUrl() { + return imageUrl(); + }, + set imageUrl($$value) { + imageUrl($$value); + flushSync(); + }, + get onCancel() { + return onCancel(); + }, + set onCancel($$value) { + onCancel($$value); + flushSync(); + }, + get onReload() { + return onReload(); + }, + set onReload($$value) { + onReload($$value); + flushSync(); + }, + get onSubmit() { + return onSubmit(); + }, + set onSubmit($$value) { + onSubmit($$value); + flushSync(); + }, + get strings() { + return strings(); + }, + set strings($$value) { + strings($$value); + flushSync(); + } + }; + var div = root$2(); + var form = child(div); + var node = child(form); + { + var consequent = ($$anchor2) => { + var div_1 = root_1$2(); + var text2 = child(div_1, true); + reset(div_1); + template_effect(() => set_text(text2, strings().verificationRequired)); + append($$anchor2, div_1); + }; + if_block(node, ($$render) => { + if (config().codeChallengeDisplay !== "standard") $$render(consequent); + }); + } + var div_2 = sibling(node, 2); + var text_1 = child(div_2, true); + reset(div_2); + var img = sibling(div_2, 2); + var div_3 = sibling(img, 2); + var input = child(div_3); + remove_input_defaults(input); + input.disabled = get(loading); + bind_this(input, ($$value) => set(elInput, $$value), () => get(elInput)); + var node_1 = sibling(input, 2); + { + var consequent_4 = ($$anchor2) => { + var button = root_2$2(); + var node_2 = child(button); + { + var consequent_1 = ($$anchor3) => { + var div_4 = root_3$2(); + append($$anchor3, div_4); + }; + var consequent_2 = ($$anchor3) => { + var svg = root_4(); + append($$anchor3, svg); + }; + var consequent_3 = ($$anchor3) => { + var svg_1 = root_5(); + append($$anchor3, svg_1); + }; + var alternate = ($$anchor3) => { + var svg_2 = root_6(); + append($$anchor3, svg_2); + }; + if_block(node_2, ($$render) => { + if (get(audioState) === AudioState.LOADING) $$render(consequent_1); + else if (get(audioState) === AudioState.ERROR) $$render(consequent_2, 1); + else if (get(audioState) === AudioState.PLAYING) $$render(consequent_3, 2); + else $$render(alternate, -1); + }); + } + reset(button); + template_effect(() => { + set_attribute(button, "title", strings().getAudioChallenge); + button.disabled = get(audioState) === AudioState.LOADING || get(audioState) === AudioState.ERROR; + set_attribute(button, "aria-label", get(audioState) === AudioState.LOADING ? strings().loading : strings().getAudioChallenge); + }); + event("click", button, () => onPlayAudio(), true); + append($$anchor2, button); + }; + if_block(node_1, ($$render) => { + if (codeChallenge().audio) $$render(consequent_4); + }); + } + var button_1 = sibling(node_1, 2); + reset(div_3); + var div_5 = sibling(div_3, 2); + var button_2 = child(div_5); + var text_2 = child(button_2, true); + reset(button_2); + var button_3 = sibling(button_2, 2); + var text_3 = child(button_3, true); + reset(button_3); + reset(div_5); + reset(form); + var node_3 = sibling(form, 2); + { + var consequent_5 = ($$anchor2) => { + var audio = root_7(); + bind_this(audio, ($$value) => set(elAudio, $$value), () => get(elAudio)); + event("error", audio, onAudioError); + event("loadstart", audio, onAudioLoadStart); + event("canplay", audio, onAudioCanPlay); + event("pause", audio, onAudioPause); + event("playing", audio, onAudioPlaying); + event("ended", audio, onAudioEnded); + append($$anchor2, audio); + }; + if_block(node_3, ($$render) => { + if (get(playAudio)) $$render(consequent_5); + }); + } + reset(div); + template_effect(() => { + set_text(text_1, strings().enterCodeFromImage); + set_attribute(img, "src", imageUrl()); + set_attribute(input, "minlength", codeChallenge().length || 1); + set_attribute(input, "maxlength", codeChallenge().length); + set_attribute(input, "placeholder", strings().enterCode); + set_attribute(input, "aria-label", get(audioState) === AudioState.LOADING ? strings().loading : get(audioState) === AudioState.PLAYING ? "" : strings().enterCodeAria); + set_attribute(input, "aria-live", get(audioState) ? "assertive" : "polite"); + set_attribute(input, "aria-busy", get(audioState) === AudioState.LOADING); + set_attribute(button_1, "title", strings().reload); + set_attribute(button_1, "aria-label", strings().reload); + set_attribute(button_2, "aria-label", strings().verify); + set_text(text_2, strings().verify); + set_attribute(button_3, "aria-label", strings().cancel); + set_text(text_3, strings().cancel); + }); + event("submit", form, onSubmitCapture, true); + delegated("keydown", input, onInputKeyDown); + bind_value(input, () => get(code), ($$value) => set(code, $$value)); + event("click", button_1, () => onReload()?.(), true); + event("click", button_3, () => onCancel()?.(), true); + append($$anchor, div); + return pop($$exports); +} +delegate(["keydown"]); +create_custom_element( + Code, + { + audioUrl: {}, + codeChallenge: {}, + config: {}, + imageUrl: {}, + onCancel: {}, + onReload: {}, + onSubmit: {}, + strings: {} + }, + [], + [], + { mode: "open" } +); +var root_1$1 = /* @__PURE__ */ from_html(`
`); +var root_2$1 = /* @__PURE__ */ from_html(`
`); +var root_3$1 = /* @__PURE__ */ from_html(`
×
`); +var root$1 = /* @__PURE__ */ from_html(`
`, 1); +function Popover($$anchor, $$props) { + push($$props, true); + let anchor = prop($$props, "anchor"), children = prop($$props, "children"), display = prop($$props, "display", 7, "standard"), backdrop = prop($$props, "backdrop", 7, false), onClickOutside = prop($$props, "onClickOutside"), onClickOutsideDelay = prop($$props, "onClickOutsideDelay", 7, 600), onClose = prop($$props, "onClose"), placement = prop($$props, "placement", 7, "auto"), updateUISignal = prop($$props, "updateUISignal"), variant = prop($$props, "variant", 7, "neutral"), rest = /* @__PURE__ */ rest_props($$props, [ + "$$slots", + "$$events", + "$$legacy", + "$$host", + "anchor", + "children", + "display", + "backdrop", + "onClickOutside", + "onClickOutsideDelay", + "onClose", + "placement", + "updateUISignal", + "variant" + ]); + let el = /* @__PURE__ */ state(void 0); + let elBackdrop = /* @__PURE__ */ state(void 0); + let top = /* @__PURE__ */ state(false); + let mountedAt = /* @__PURE__ */ state(0); + user_effect(() => { + if (placement() !== "auto") { + set(top, placement() === "top"); + } + }); + user_effect(() => { + if (updateUISignal()) { + reposition(); + } + }); + onMount(() => { + const moveToBody = display() === "bottomsheet" || display() === "overlay"; + if (moveToBody) { + get(elBackdrop) && document.body.append(get(elBackdrop)); + get(el) && document.body.append(get(el)); + } + reposition(); + tick().then(() => { + set(mountedAt, Date.now(), true); + }); + return () => { + if (moveToBody) { + get(elBackdrop) && document.body.removeChild(get(elBackdrop)); + get(el) && document.body.removeChild(get(el)); + } + }; + }); + function onCloseClick() { + onClose()?.(); + } + function onWindowClick(ev) { + const target = ev.target; + if (!get(el)?.contains(target) && (!onClickOutsideDelay() || get(mountedAt) + onClickOutsideDelay() < Date.now())) { + onClickOutside()?.(); + } + } + function onWindowResize() { + reposition(); + } + function onWindowScroll() { + reposition(); + } + function reposition() { + if (anchor() && placement() === "auto" && get(el)) { + const boundary2 = anchor().getBoundingClientRect(); + const bottomGap = document.documentElement.clientHeight - (boundary2.top + boundary2.height); + const newTop = bottomGap < get(el).clientHeight; + if (get(top) !== newTop) { + set(top, newTop); + } + } + } + var $$exports = { + get anchor() { + return anchor(); + }, + set anchor($$value) { + anchor($$value); + flushSync(); + }, + get children() { + return children(); + }, + set children($$value) { + children($$value); + flushSync(); + }, + get display() { + return display(); + }, + set display($$value = "standard") { + display($$value); + flushSync(); + }, + get backdrop() { + return backdrop(); + }, + set backdrop($$value = false) { + backdrop($$value); + flushSync(); + }, + get onClickOutside() { + return onClickOutside(); + }, + set onClickOutside($$value) { + onClickOutside($$value); + flushSync(); + }, + get onClickOutsideDelay() { + return onClickOutsideDelay(); + }, + set onClickOutsideDelay($$value = 600) { + onClickOutsideDelay($$value); + flushSync(); + }, + get onClose() { + return onClose(); + }, + set onClose($$value) { + onClose($$value); + flushSync(); + }, + get placement() { + return placement(); + }, + set placement($$value = "auto") { + placement($$value); + flushSync(); + }, + get updateUISignal() { + return updateUISignal(); + }, + set updateUISignal($$value) { + updateUISignal($$value); + flushSync(); + }, + get variant() { + return variant(); + }, + set variant($$value = "neutral") { + variant($$value); + flushSync(); + } + }; + var fragment = root$1(); + event("click", $window, onWindowClick, true); + event("resize", $window, onWindowResize); + event("scroll", $window, onWindowScroll); + var node = first_child(fragment); + { + var consequent = ($$anchor2) => { + var div = root_1$1(); + bind_this(div, ($$value) => set(elBackdrop, $$value), () => get(elBackdrop)); + append($$anchor2, div); + }; + if_block(node, ($$render) => { + if (backdrop()) $$render(consequent); + }); + } + var div_1 = sibling(node, 2); + attribute_effect(div_1, () => ({ + ...rest, + class: `altcha-popover ${($$props.class || "") ?? ""}`, + "data-popover": true, + "data-variant": variant(), + "data-top": get(top), + "data-display": display() + })); + var node_1 = child(div_1); + { + var consequent_1 = ($$anchor2) => { + var div_2 = root_2$1(); + append($$anchor2, div_2); + }; + if_block(node_1, ($$render) => { + if (display() === "standard") $$render(consequent_1); + }); + } + var node_2 = sibling(node_1, 2); + { + var consequent_2 = ($$anchor2) => { + var div_3 = root_3$1(); + event("click", div_3, onCloseClick, true); + append($$anchor2, div_3); + }; + if_block(node_2, ($$render) => { + if (display() !== "standard") $$render(consequent_2); + }); + } + var div_4 = sibling(node_2, 2); + var node_3 = child(div_4); + snippet(node_3, () => children() ?? noop); + reset(div_4); + reset(div_1); + bind_this(div_1, ($$value) => set(el, $$value), () => get(el)); + append($$anchor, fragment); + return pop($$exports); +} +create_custom_element( + Popover, + { + anchor: {}, + children: {}, + display: {}, + backdrop: {}, + onClickOutside: {}, + onClickOutsideDelay: {}, + onClose: {}, + placement: {}, + updateUISignal: {}, + variant: {} + }, + [], + [], + { mode: "open" } +); +function bufferToHex(buffer) { + return Array.from(new Uint8Array(buffer)).map((b) => b.toString(16).padStart(2, "0")).join(""); +} +async function solveChallengeWorkers(options) { + const { + challenge, + concurrency = navigator.hardwareConcurrency, + controller = new AbortController(), + createWorker, + onOutOfMemory = (c) => c > 1 ? Math.floor(c / 2) : 0, + counterMode, + timeout = 9e4 + } = options; + const workersConcurrency = Math.min(16, Math.max(1, concurrency)); + const workersInstances = []; + const terminate = () => { + for (const worker of workersInstances) { + worker.terminate(); + } + }; + for (let i = 0; i < workersConcurrency; i++) { + workersInstances.push(await createWorker(challenge.parameters.algorithm)); + } + let solution = null; + try { + solution = await Promise.race( + workersInstances.map((worker, i) => { + controller.signal.addEventListener("abort", () => { + worker.postMessage({ type: "abort" }); + }); + return new Promise((resolve, reject) => { + worker.addEventListener("error", (err) => { + reject(err); + }); + worker.addEventListener("message", (message) => { + if (message.data) { + for (const w of workersInstances) { + if (w !== worker) { + w.postMessage({ type: "abort" }); + } + } + if (message.data.error) { + return reject(new Error(message.data.error)); + } + } + resolve(message.data); + }); + worker.postMessage({ + challenge, + counterMode, + counterStart: i, + counterStep: workersConcurrency, + timeout, + type: "work" + }); + }); + }) + ); + } catch (err) { + const isOOM = err instanceof Error && !!err?.message?.includes("Out of memory"); + if (isOOM) { + if (onOutOfMemory) { + terminate(); + const retryConcurrency = onOutOfMemory(workersConcurrency); + if (retryConcurrency) { + return solveChallengeWorkers({ + ...options, + challenge, + controller, + concurrency: retryConcurrency, + createWorker + }); + } + } + } + throw err; + } finally { + terminate(); + } + if (controller.signal.aborted) { + return null; + } + return solution || null; +} +class Collector { + TAG_CODES = { + INPUT: 1, + TEXTAREA: 2, + SELECT: 3, + BUTTON: 4, + A: 5, + DETAILS: 6, + SUMMARY: 7, + IFRAME: 8, + VIDEO: 9, + AUDIO: 10 + }; + maxSamples; + sampleInterval; + target; + focusStartTime = 0; + focusInteraction = 0; + focusInteractionTimer = null; + lastPointerSample = 0; + lastTouchSample = 0; + lastScrollSample = 0; + pendingPointer = null; + pendingTouch = null; + focus = []; + pointer = []; + scroll = []; + touch = []; + constructor(options = {}) { + const { maxSamples = 60, sampleInterval = 50, target = window } = options; + this.maxSamples = maxSamples; + this.sampleInterval = sampleInterval; + this.target = target; + this.attach(); + } + destroy() { + const o = { capture: true }; + this.target.removeEventListener("focusin", this.onFocus, o); + this.target.removeEventListener("keydown", this.onInteraction, o); + this.target.removeEventListener("pointerdown", this.onInteraction, o); + this.target.removeEventListener("pointermove", this.onPointer, o); + this.target.removeEventListener("scroll", this.onScroll, o); + this.target.removeEventListener("touchmove", this.onTouchMove, o); + } + export() { + return { + focus: this.focus, + maxTouchPoints: navigator.maxTouchPoints || 0, + pointer: this.pointer, + scroll: this.scroll, + time: Date.now(), + touch: this.touch + }; + } + attach() { + const o = { passive: true, capture: true }; + this.target.addEventListener("focusin", this.onFocus, o); + this.target.addEventListener("keydown", this.onInteraction, o); + this.target.addEventListener("pointerdown", this.onInteraction, o); + this.target.addEventListener("pointermove", this.onPointer, o); + this.target.addEventListener("scroll", this.onScroll, o); + this.target.addEventListener("touchmove", this.onTouchMove, o); + } + evict(buffer) { + if (buffer.length > this.maxSamples) { + buffer.splice(0, buffer.length - this.maxSamples); + } + } + onFocus = (e) => { + if (this.focusInteraction === 2) { + return; + } + const el = e.target; + if (!(el instanceof Element)) { + return; + } + const now = performance.now(); + if (this.focusStartTime === 0) { + this.focusStartTime = now; + } + this.focus.push([ + Math.round(now - this.focusStartTime), + el.tabIndex, + this.TAG_CODES[el.tagName] ?? 0, + this.focusInteraction ? 1 : 0 + ]); + this.evict(this.focus); + }; + onInteraction = (e) => { + this.focusInteraction = "keyCode" in e ? 1 : 2; + if (this.focusInteractionTimer) { + clearTimeout(this.focusInteractionTimer); + } + this.focusInteractionTimer = setTimeout(() => { + this.focusInteraction = 0; + }, 100); + }; + onPointer = (e) => { + if (e.pointerType === "touch") { + return; + } + const now = e.timeStamp || performance.now(); + this.pendingPointer = [Math.round(e.clientX), Math.round(e.clientY), Math.round(now)]; + if (now - this.lastPointerSample >= this.sampleInterval) { + this.pointer.push(this.pendingPointer); + this.lastPointerSample = now; + this.pendingPointer = null; + this.evict(this.pointer); + } + }; + onScroll = () => { + const now = performance.now(); + if (now - this.lastScrollSample < this.sampleInterval) { + return; + } + this.scroll.push([Math.round(window.scrollY), Math.round(now)]); + this.lastScrollSample = now; + this.evict(this.scroll); + }; + onTouchMove = (e) => { + const now = e.timeStamp || performance.now(); + const t = e.touches[0]; + if (!t) { + return; + } + this.pendingTouch = [ + Math.round(t.clientX), + Math.round(t.clientY), + Math.round(now), + Math.round(t.force * 1e3) / 1e3, + Math.round(t.radiusX || 0), + Math.round(t.radiusY || 0) + ]; + if (now - this.lastTouchSample >= this.sampleInterval) { + this.touch.push(this.pendingTouch); + this.lastTouchSample = now; + this.pendingTouch = null; + this.evict(this.touch); + } + }; +} +var root_1 = /* @__PURE__ */ from_html(`
`); +var root_3 = /* @__PURE__ */ from_html(`
`); +var root_2 = /* @__PURE__ */ from_html(`
×
`, 1); +var root_10 = /* @__PURE__ */ from_html(`
`); +var root_11 = /* @__PURE__ */ from_html(``); +var root_14 = /* @__PURE__ */ from_html(`
Secure context (HTTPS) required.
`); +var root_15 = /* @__PURE__ */ from_html(`
`); +var root_16 = /* @__PURE__ */ from_html(`
`); +var root_19 = /* @__PURE__ */ from_html(` `, 1); +var root = /* @__PURE__ */ from_html(`
`, 1); +function Widget($$anchor, $$props) { + push($$props, true); + const $altchaDefaults = () => store_get(altchaDefaults, "$altchaDefaults", $$stores); + const $altchaI18nStore = () => store_get(altchaI18nStore, "$altchaI18nStore", $$stores); + const [$$stores, $$cleanup] = setup_stores(); + const fieldsSelector = 'input[type="text"]:not([data-no-spamfilter]), textarea:not([data-no-spamfilter])'; + const submitButtonSelector = 'input[type="submit"], button[type="submit"], button:not([type="button"]):not([type="reset"])'; + const rtlLanguages = ["ar", "fa", "he", "ur"]; + const { isSecureContext } = globalThis; + const { store: altchaDefaults } = globalThis.$altcha.defaults; + const hardwareConcurrency = navigator.hardwareConcurrency || 2; + const deviceMemory = navigator.deviceMemory || 0; + const defaultWorkers = deviceMemory && deviceMemory <= 4 ? Math.min(4, hardwareConcurrency) : hardwareConcurrency; + const altchaI18nStore = globalThis.$altcha.i18n.store; + const instance = $$props.$$host; + const dispatch = (event2, detail) => { + tick().then(() => { + instance?.dispatchEvent(new CustomEvent(event2, { detail })); + }); + }; + let hisCollector = null; + let baseUrl = /* @__PURE__ */ state(proxy(new URL(location.origin))); + let checked = /* @__PURE__ */ state(false); + let codeChallenge = /* @__PURE__ */ state(null); + let currentController = /* @__PURE__ */ state(null); + let currentDisplay = /* @__PURE__ */ state(null); + let currentState = /* @__PURE__ */ state(proxy(State.UNVERIFIED)); + let elAnchorArrow = /* @__PURE__ */ state(void 0); + let elFloatingAnchor = /* @__PURE__ */ state(void 0); + let elForm = /* @__PURE__ */ state(null); + let elRoot = /* @__PURE__ */ state(void 0); + let elSubmitter = /* @__PURE__ */ state(null); + let error = /* @__PURE__ */ state(null); + let expirationTimeout = /* @__PURE__ */ state(null); + let payload = /* @__PURE__ */ state(null); + let plugins = /* @__PURE__ */ state(proxy([])); + let updateUISignal = /* @__PURE__ */ state(0); + let userConfig = /* @__PURE__ */ state(proxy({})); + let visible = /* @__PURE__ */ state(true); + const config = /* @__PURE__ */ user_derived(() => ({ + fetch: (input, init) => fetch(input, init), + audioChallengeLanguage: "", + auto: "off", + barPlacement: "bottom", + challenge: "", + codeChallenge: null, + codeChallengeDisplay: "standard", + credentials: null, + debug: false, + disableAutoFocus: false, + display: "standard", + floatingAnchor: "", + floatingOffset: 8, + floatingPersist: false, + floatingPlacement: "auto", + hideFooter: false, + hideLogo: false, + humanInteractionSignature: true, + language: "", + mockError: false, + minDuration: 500, + overlayContent: "", + name: "altcha", + popoverPlacement: "auto", + retryOnOutOfMemoryError: true, + setCookie: null, + serverVerificationFields: false, + serverVerificationTimeZone: false, + test: false, + timeout: 9e4, + type: "checkbox", + validationMessage: "", + verifyFunction: null, + verifyUrl: "", + workers: defaultWorkers, + ...$altchaDefaults(), + ...get(userConfig) + })); + const checkboxId = /* @__PURE__ */ user_derived(() => `altcha-checkbox-${$$props.id || Math.floor(Math.random() * 1e12).toString(16)}`); + const CheckboxComponent = /* @__PURE__ */ user_derived(() => getCheckboxComponent(get(config).type)); + const auto = /* @__PURE__ */ user_derived(() => get(config).auto); + const loading = /* @__PURE__ */ user_derived(() => get(currentState) === State.VERIFYING); + const showFooter = /* @__PURE__ */ user_derived(() => !get(config).hideFooter); + const showLogo = /* @__PURE__ */ user_derived(() => !get(config).hideLogo && get(config).display !== "bar"); + const locale = /* @__PURE__ */ user_derived(() => getI18nStrings($altchaI18nStore(), [ + get(config).language, + document.documentElement.lang, + ...navigator.languages + ])); + const dir = /* @__PURE__ */ user_derived(() => rtlLanguages.includes(get(locale).language) ? "rtl" : void 0); + const strings = /* @__PURE__ */ user_derived(() => ({ ...get(locale).strings })); + const codeChallengeAudioUrl = /* @__PURE__ */ user_derived(() => get(codeChallenge)?.audio?.match(/^(https?:)?\//) ? getUrl(get(codeChallenge).audio, get(baseUrl), { + language: get(config).audioChallengeLanguage || get(locale).language + }).toString() : get(codeChallenge)?.audio); + const codeChallengeImageUrl = /* @__PURE__ */ user_derived(() => get(codeChallenge)?.image?.match(/^(https?:)?\//) ? getUrl(get(codeChallenge).image, get(baseUrl)) : get(codeChallenge)?.image); + user_effect(() => { + configure({ + auto: $$props.auto, + challenge: $$props.challenge, + display: $$props.display, + language: $$props.language, + name: $$props.name, + type: $$props.type, + workers: $$props.workers + }); + }); + user_effect(() => { + if ($$props.configuration) { + try { + configure(JSON.parse($$props.configuration)); + } catch { + log("unable to parse the `configuration` attribute (JSON expected)"); + } + } + }); + user_effect(() => { + if (get(currentDisplay) !== get(config).display) { + setDisplay(get(config).display); + } + }); + user_effect(() => { + if (get(checked) && get(currentState) === State.VERIFYING) { + set(checked, false); + } + }); + user_effect(() => { + if (!get(checked) && get(currentState) === State.VERIFIED) { + set(checked, true); + } + }); + user_effect(() => { + if (!get(checked)) { + const checkbox = getCheckboxElement(); + if (checkbox && checkbox.checked) { + checkbox.checked = false; + } + } + }); + user_effect(() => { + if (get(currentState) === State.VERIFIED) { + getCheckboxElement()?.setCustomValidity(""); + } + }); + user_effect(() => { + if (get(auto) === "onload") { + const tm = setTimeout( + () => { + verify(); + }, + 1 + ); + return () => { + if (tm) { + clearTimeout(tm); + } + }; + } + }); + user_effect(() => { + if (get(error)) { + log("error:", get(error)); + } + }); + user_effect(() => { + if (get(payload) && get(config).setCookie) { + setCookie(get(payload), get(config).setCookie); + } + }); + onMount(() => { + log("mounted", "3.2.1"); + if (instance) { + globalThis.$altcha.instances.add(instance); + } + set(elForm, get(elRoot)?.closest("form"), true); + get(elForm)?.addEventListener("reset", onFormReset); + get(elForm)?.addEventListener("submit", onFormSubmit, { capture: true }); + get(elForm)?.addEventListener("focusin", onFormFocusIn); + activatePlugins(); + if (get(config).humanInteractionSignature) { + log("human interaction signature enabled"); + hisCollector = new Collector(); + } + dispatch("load"); + if (!isSecureContext) { + log("secure context (HTTPS) required"); + } + return () => { + destroyPlugins(); + if (instance) { + globalThis.$altcha.instances.delete(instance); + } + if (get(expirationTimeout)) { + clearTimeout(get(expirationTimeout)); + } + get(elForm)?.removeEventListener("reset", onFormReset); + get(elForm)?.removeEventListener("submit", onFormSubmit, { capture: true }); + get(elForm)?.removeEventListener("focusin", onFormFocusIn); + hisCollector?.destroy(); + }; + }); + function activatePlugins() { + set(plugins, [...globalThis.$altcha.plugins].map((PluginCls) => new PluginCls(instance)), true); + log("activating plugins", get(plugins).map((plugin) => plugin.constructor.name)); + for (const plugin of get(plugins)) { + plugin.activate(); + } + } + async function callHook(hook, ...args) { + let result = void 0; + for (const plugin of get(plugins)) { + result = await plugin[hook].call(plugin, ...args); + } + return result; + } + function destroyPlugins() { + for (const plugin of get(plugins)) { + plugin.destroy(); + } + } + function createChallengeFromV1(challenge) { + const [_, queryParams] = challenge.salt.split("?"); + const data = {}; + if (queryParams) { + try { + Object.assign(data, Object.fromEntries(new URLSearchParams(queryParams).entries())); + } catch { + } + } + const result = { + codeChallenge: challenge.codeChallenge, + parameters: { + algorithm: challenge.algorithm, + cost: 1, + data, + expiresAt: data?.expires ? parseInt(data.expires, 10) : void 0, + keyLength: challenge.algorithm === "SHA-512" ? 64 : challenge.algorithm === "SHA-384" ? 48 : 32, + nonce: bufferToHex(new TextEncoder().encode(challenge.salt)), + keyPrefix: challenge.challenge, + salt: "" + }, + signature: challenge.signature + }; + Object.defineProperties(result, { + _originalSalt: { enumerable: false, value: challenge.salt, writable: false }, + _version: { enumerable: false, value: 1, writable: false } + }); + return result; + } + function createPayloadV1(challenge, solution) { + return { + algorithm: challenge.parameters.algorithm, + challenge: challenge.parameters.keyPrefix, + number: solution.counter, + salt: "_originalSalt" in challenge ? challenge._originalSalt : challenge.parameters.nonce, + signature: challenge.signature, + took: solution.time || 0 + }; + } + async function delay(ms) { + await new Promise((resolve) => setTimeout(resolve, ms)); + } + async function fetchChallenge(source2 = get(config).challenge, requestOptions) { + const hook = await callHook("onFetchChallenge", source2); + let challenge = null; + if (hook !== void 0) { + return hook; + } + if (typeof source2 === "string") { + if (source2.startsWith("{")) { + log("parsing JSON challenge"); + try { + challenge = JSON.parse(source2); + } catch { + throw new Error(`Unable to parse JSON challenge.`); + } + } else { + log("fetching challenge from", requestOptions?.method || "GET", source2); + set(baseUrl, new URL(source2, location.origin), true); + const resp = await get(config).fetch(source2, { + credentials: get(config).credentials || void 0, + ...requestOptions + }); + await validateResponse(resp); + const configHeader = resp.headers.get("x-altcha-config"); + if (configHeader) { + processConfigHeader(configHeader); + } + const json = await resp.json(); + if (json && "his" in json && json.his) { + log("requested HIS"); + if (!hisCollector) { + throw new Error("Server requested HIS data but collector is disabled."); + } + return fetchChallenge(getUrl(json.his.url, get(baseUrl)), { + body: JSON.stringify({ his: hisCollector.export() }), + headers: { "content-type": "application/json" }, + method: "POST" + }); + } + if (json && "hisResult" in json && json.hisResult) { + log("HIS result", json.hisResult); + } + challenge = json; + } + } else if (source2 && typeof source2 === "object") { + try { + challenge = JSON.parse(JSON.stringify(source2)); + } catch { + throw new Error(`Unable to parse JSON challenge.`); + } + } + if (isChallengeV1(challenge)) { + challenge = createChallengeFromV1(challenge); + } + if (!isChallengeValid(challenge)) { + throw new Error(`Challenge validation failed.`); + } + return challenge; + } + function isChallengeV1(challenge) { + return typeof challenge === "object" && "challenge" in challenge; + } + function isChallengeValid(challenge) { + return !!challenge && typeof challenge === "object" && "parameters" in challenge && !!challenge.parameters && typeof challenge.parameters === "object" && "algorithm" in challenge.parameters && "nonce" in challenge.parameters && "salt" in challenge.parameters && "keyPrefix" in challenge.parameters; + } + function getCheckboxElement() { + return document.getElementById(get(checkboxId)); + } + function getCheckboxComponent(type) { + switch (type) { + case "checkbox": + return Checkbox; + case "switch": + return Switch; + case "native": + default: + return CheckboxNative; + } + } + function getI18nStrings(i18n2, languages) { + const codes = Object.keys(i18n2).map((code) => code.toLowerCase()); + let language = languages.reduce( + (acc, lang) => { + lang = lang.toLowerCase(); + return acc || (i18n2[lang] ? lang : null) || codes.find((code) => lang.split("-")[0] === code.split("-")[0]) || null; + }, + null + ); + if (!i18n2[language || ""]) { + language = "en"; + } + return { language, strings: i18n2[language] }; + } + function getPlacement(display) { + switch (display) { + case "bar": + return get(config).barPlacement || "bottom"; + case "floating": + return get(config).floatingPlacement || "auto"; + default: + return void 0; + } + } + function getTextFields(names) { + const elInputs = [ + ...get(elForm)?.querySelectorAll(fieldsSelector) || [] + ]; + return elInputs.reduce( + (acc, el) => { + const name = el.name; + const value = el.value; + if (name && value) { + acc[name] = /\n/.test(value) ? value.replace(new RegExp("(? { + if (result && !get(codeChallenge)) { + tick().then(() => { + requestSubmit(get(elSubmitter)); + }); + } + }); + } + } + function onWindowPageshow(ev) { + if (ev.persisted) { + setDisplay(get(config).display); + reset$1(); + } + } + function onWindowResize() { + updateUI(); + } + function processConfigHeader(jsonConfig) { + try { + const json = JSON.parse(jsonConfig); + if (json && typeof json === "object") { + configure({ + // Backward compatibility mappings + serverVerificationFields: json?.sentinel?.fields, + serverVerificationTimeZone: json?.sentinel?.timeZone, + verifyUrl: json.verifyurl, + ...json + }); + } + } catch (err) { + log("unable to configure from x-altcha-config header", err); + } + } + function repositionFloating(viewportOffset = 20) { + if (!get(elRoot)) { + return; + } + const floatingPlacement = get(config).floatingPlacement; + if (!get(elFloatingAnchor)) { + set( + elFloatingAnchor, + (get(config).floatingAnchor instanceof HTMLElement ? get(config).floatingAnchor : get(config).floatingAnchor ? document.querySelector(get(config).floatingAnchor) : get(elForm)?.querySelector(submitButtonSelector)) || get(elForm), + true + ); + if (!get(elFloatingAnchor)) { + log("unable to find floating anchor element"); + return; + } + } + const offsetY = parseInt(get(config).floatingOffset, 10) || 12; + const anchorBoundry = get(elFloatingAnchor).getBoundingClientRect(); + const elBoundary = get(elRoot).getBoundingClientRect(); + const docHeight = document.documentElement.clientHeight; + const docWidth = document.documentElement.clientWidth; + const showOnTop = !floatingPlacement || floatingPlacement === "auto" ? anchorBoundry.bottom + elBoundary.height + offsetY + viewportOffset > docHeight : floatingPlacement === "top"; + const left = Math.max(viewportOffset, Math.min(docWidth - viewportOffset - elBoundary.width, anchorBoundry.left + anchorBoundry.width / 2 - elBoundary.width / 2)); + get(elRoot).style.setProperty("--altcha-floating-left", `${left}px`); + get(elRoot).style.setProperty("--altcha-floating-top", showOnTop ? `${anchorBoundry.top - (elBoundary.height + offsetY)}px` : `${anchorBoundry.bottom + offsetY}px`); + get(elRoot).setAttribute("data-floating-position", showOnTop ? "top" : "bottom"); + if (get(elAnchorArrow)) { + const anchorArrowBoundry = get(elAnchorArrow).getBoundingClientRect(); + get(elAnchorArrow).style.left = anchorBoundry.left - left + anchorBoundry.width / 2 - anchorArrowBoundry.width / 2 + "px"; + } + } + async function requestServerVerification(verificationPayload, code) { + const hook = await callHook("onRequestServerVerification", verificationPayload, code); + if (hook !== void 0) { + return hook; + } + log("requesting server verification from", get(config).verifyUrl); + if (!get(config).verifyUrl) { + throw new Error(`Parameter verifyUrl must be set for server verification.`); + } + const resp = await get(config).fetch(getUrl(get(config).verifyUrl, get(baseUrl)), { + body: JSON.stringify({ + code, + fields: get(config).serverVerificationFields ? getTextFields() : void 0, + payload: verificationPayload, + timeZone: get(config).serverVerificationTimeZone ? getTimeZone() : void 0 + }), + credentials: get(config).credentials || void 0, + headers: { "Content-Type": "application/json" }, + method: "POST" + }); + await validateResponse(resp); + const json = await resp.json(); + if (json && typeof json === "object" && "payload" in json && !!json.payload) { + dispatch("serververification", json); + } + return json; + } + function requestSubmit(submitter) { + if (get(elForm) && "requestSubmit" in get(elForm)) { + get(elForm).requestSubmit(submitter); + } else if (get(elForm)?.reportValidity()) { + if (submitter) { + submitter.click(); + } else { + get(elForm).submit(); + } + } + } + function setCookie(value, options = {}) { + const { + domain, + name = get(config).name, + maxAge, + path, + sameSite, + secure + } = options; + let cookie = `${encodeURIComponent(name)}=${encodeURIComponent(value)}`; + if (domain) cookie += `; Domain=${domain}`; + if (maxAge != null) cookie += `; Max-Age=${maxAge}`; + if (path) cookie += `; Path=${path}`; + if (sameSite) cookie += `; SameSite=${sameSite}`; + if (secure) cookie += `; Secure`; + document.cookie = cookie; + } + function setDisplay(value) { + switch (value) { + case "bar": + case "floating": + case "overlay": + hide(); + if (!get(auto) || get(auto) === "off") { + get(userConfig).auto = "onsubmit"; + } + break; + case "standard": + show(); + } + if (get(currentDisplay) !== value) { + set(currentDisplay, value, true); + } + } + function setChallengeExpiration(expiresAt) { + if (get(expirationTimeout)) { + clearTimeout(get(expirationTimeout)); + } + const onExpired = () => { + if (get(currentState) !== State.UNVERIFIED) { + set(checked, false); + setState(State.EXPIRED); + } else { + reset$1(); + } + dispatch("expired"); + }; + const duration = expiresAt * 1e3 - Date.now(); + if (duration >= 1) { + set(expirationTimeout, setTimeout(onExpired, duration), true); + } else { + onExpired(); + } + } + async function validateResponse(resp) { + if (resp.status >= 400) { + if (resp.headers.get("content-type")?.includes("/json")) { + let json; + try { + json = await resp.json(); + } catch { + } + if (json && "error" in json) { + throw new Error(`Server responded with ${resp.status} - ${json.error}`); + } + } + throw new Error(`Server responded with ${resp.status}.`); + } + const contentType = resp.headers.get("content-type"); + if (!contentType || !contentType.includes("/json")) { + throw new Error(`Server responded with invalid content-type. Expected application/json, received ${contentType}.`); + } + } + async function verifyServer(code) { + if (!get(payload)) { + setState(State.ERROR, "Cannot verify code challenge without PoW payload."); + return; + } + setState(State.VERIFYING); + let result = null; + if (get(config).verifyUrl) { + result = await requestServerVerification(get(payload), code); + } else if (get(config).verifyFunction) { + result = await get(config).verifyFunction(get(payload), code); + } else { + setState(State.ERROR, "Parameter verifyUrl is required for code challenge verification."); + return; + } + if (result?.payload) { + set(payload, result.payload, true); + log("server payload", get(payload)); + } + if (result?.verified === true) { + log("verified"); + setState(State.VERIFIED); + dispatch("verified", { payload: get(payload) }); + if (get(auto) === "onsubmit") { + tick().then(() => { + requestSubmit(get(elSubmitter)); + }); + } + } else { + setState(State.ERROR, result?.reason || "Verification failed."); + } + if (!get(config).disableAutoFocus) { + getCheckboxElement()?.focus(); + } + } + function configure(newConfig) { + Object.assign(get(userConfig), { + ...Object.fromEntries(Object.entries(newConfig).filter(([_, value]) => value !== void 0)) + }); + } + function getConfiguration() { + return { ...get(config) }; + } + function getState() { + return get(currentState); + } + function hide() { + set(visible, false); + } + function log(...args) { + if (get(config).debug || args.some((a) => a instanceof Error)) { + console[args[0] instanceof Error ? "error" : "log"]("ALTCHA", `[name=${get(config).name}]`, ...args); + } + } + function reset$1(newState = State.UNVERIFIED, err = null) { + set(checked, false); + set(error, err, true); + set(payload, null); + if (get(currentController)) { + get(currentController).abort(); + } + if (get(expirationTimeout)) { + clearTimeout(get(expirationTimeout)); + set(expirationTimeout, null); + } + setState(newState); + } + function setState(newState, err = null) { + set(currentState, newState, true); + set(error, err, true); + dispatch("statechange", { payload: get(payload), state: get(currentState) }); + } + function show() { + set(visible, true); + tick().then(() => { + updateUI(); + }); + } + function updateUI() { + switch (get(config).display) { + case "floating": + return repositionFloating(); + } + set(updateUISignal, get(updateUISignal) + 1); + } + async function verify(options = {}) { + const { + concurrency = Math.max(1, get(config).workers), + controller = new AbortController(), + minDuration = get(config).minDuration + } = options; + const start = performance.now(); + let challenge = null; + let solution = null; + let isChallengeV12 = false; + const hook = await callHook("onVerify", options); + if (hook !== void 0) { + return hook; + } + reset$1(State.VERIFYING); + set(currentController, controller, true); + try { + if (!isSecureContext) { + throw new Error("Secure context (HTTPS) required."); + } + if (get(config).mockError) { + throw new Error("Mock error."); + } + if (get(config).test) { + log("running test mode with null challenge"); + await delay(Math.max(0, minDuration - (performance.now() - start))); + if (get(currentController)?.signal.aborted) { + reset$1(); + return null; + } + set(payload, btoa(JSON.stringify({ challenge: null, solution: null, test: true })), true); + log("verified"); + setState(State.VERIFIED); + dispatch("verified", { payload: get(payload) }); + return { payload: get(payload) }; + } + challenge = await fetchChallenge(); + if (!challenge) { + throw new Error("Failed to fetch challenge."); + } + log("challenge", challenge); + if ("configuration" in challenge) { + log("re-configuring from challenge", challenge.configuration); + configure(challenge.configuration); + } + if (challenge.parameters.expiresAt) { + setChallengeExpiration(challenge.parameters.expiresAt); + } + isChallengeV12 = "_version" in challenge && challenge._version === 1; + const createWorker = globalThis.$altcha.algorithms.get(challenge.parameters.algorithm); + if (!createWorker) { + throw new Error(`Unsupported algorithm ${challenge.parameters.algorithm}.`); + } + solution = await solveChallengeWorkers({ + challenge, + concurrency, + controller, + createWorker, + counterMode: isChallengeV12 ? "string" : "uint32", + onOutOfMemory: (c) => { + log("out of memory error received"); + dispatch("outofmemory"); + if (get(config).retryOnOutOfMemoryError && c > 1) { + const retryConcurrency = Math.floor(c / 2); + log(`retrying with ${retryConcurrency} workers...`); + return retryConcurrency; + } + }, + timeout: get(config).timeout + }); + if (get(currentController)?.signal.aborted) { + reset$1(); + return null; + } + if (!solution) { + throw new Error("Failed to find solution."); + } + log("solution", solution); + await delay(Math.max(0, minDuration - (performance.now() - start))); + set(codeChallenge, challenge.codeChallenge || get(config).codeChallenge || null, true); + if (isChallengeV12) { + set(payload, btoa(JSON.stringify(createPayloadV1(challenge, solution))), true); + } else { + set( + payload, + btoa(JSON.stringify({ + challenge: { + parameters: challenge.parameters, + signature: challenge.signature + }, + solution + })), + true + ); + } + if (get(codeChallenge)) { + log("requesting code verification"); + setState(State.CODE); + dispatch("codechallenge", { codeChallenge: get(codeChallenge) }); + } else if (get(config).verifyUrl) { + await verifyServer(); + } else { + log("verified"); + setState(State.VERIFIED); + dispatch("verified", { payload: get(payload) }); + } + } catch (err) { + log("verification failed", err); + setState(State.ERROR, String(err)); + return null; + } finally { + set(currentController, null); + } + return { challenge, payload: get(payload), solution }; + } + var $$exports = { + configure, + getConfiguration, + getState, + hide, + log, + reset: reset$1, + setState, + show, + updateUI, + verify + }; + var fragment = root(); + event("scroll", $document, onDocumentScroll); + event("click", $document, onDocumentClick); + event("pageshow", $window, onWindowPageshow); + event("resize", $window, onWindowResize); + var node = first_child(fragment); + { + var consequent = ($$anchor2) => { + var div = root_1(); + append($$anchor2, div); + }; + if_block(node, ($$render) => { + if (get(config).display === "overlay" && get(visible)) $$render(consequent); + }); + } + var div_1 = sibling(node, 2); + var node_1 = child(div_1); + { + var consequent_2 = ($$anchor2) => { + var fragment_1 = root_2(); + var div_2 = first_child(fragment_1); + var node_2 = sibling(div_2, 2); + { + var consequent_1 = ($$anchor3) => { + var div_3 = root_3(); + html(div_3, () => document.querySelector(get(config).overlayContent)?.innerHTML, true); + reset(div_3); + append($$anchor3, div_3); + }; + if_block(node_2, ($$render) => { + if (get(config).overlayContent) $$render(consequent_1); + }); + } + event("click", div_2, onCloseClick, true); + append($$anchor2, fragment_1); + }; + if_block(node_1, ($$render) => { + if (get(config).display === "overlay" && get(visible)) $$render(consequent_2); + }); + } + var div_4 = sibling(node_1, 2); + var div_5 = child(div_4); + var div_6 = child(div_5); + var node_3 = child(div_6); + { + let $0 = /* @__PURE__ */ user_derived(() => get(config).display === "standard" && get(auto) !== "onsubmit" || get(currentState) === State.VERIFYING); + component(node_3, () => get(CheckboxComponent), ($$anchor2, CheckboxComponent_1) => { + CheckboxComponent_1($$anchor2, { + get id() { + return get(checkboxId); + }, + name: "", + get required() { + return get($0); + }, + get loading() { + return get(loading); + }, + get checked() { + return get(checked); + }, + onchange: onCheckboxChange, + oninvalid: onCheckboxInvalid + }); + }); + } + var label = sibling(node_3, 2); + var node_4 = child(label); + { + var consequent_3 = ($$anchor2) => { + var text$1 = text(); + template_effect(() => set_text(text$1, get(strings).verificationRequired)); + append($$anchor2, text$1); + }; + var consequent_4 = ($$anchor2) => { + var text_1 = text(); + template_effect(() => set_text(text_1, get(strings).verifying)); + append($$anchor2, text_1); + }; + var consequent_5 = ($$anchor2) => { + var text_2 = text(); + template_effect(() => set_text(text_2, get(strings).verified)); + append($$anchor2, text_2); + }; + var alternate = ($$anchor2) => { + var text_3 = text(); + template_effect(() => set_text(text_3, get(strings).label)); + append($$anchor2, text_3); + }; + if_block(node_4, ($$render) => { + if (get(currentState) === State.CODE && get(codeChallenge)) $$render(consequent_3); + else if (get(currentState) === State.VERIFYING) $$render(consequent_4, 1); + else if (get(currentState) === State.VERIFIED) $$render(consequent_5, 2); + else $$render(alternate, -1); + }); + } + reset(label); + reset(div_6); + var node_5 = sibling(div_6, 2); + { + var consequent_6 = ($$anchor2) => { + Logo($$anchor2, { + get strings() { + return get(strings); + } + }); + }; + if_block(node_5, ($$render) => { + if (get(showLogo)) $$render(consequent_6); + }); + } + reset(div_5); + var node_6 = sibling(div_5, 2); + { + var consequent_7 = ($$anchor2) => { + { + let $0 = /* @__PURE__ */ user_derived(() => get(config).display === "bar" && get(showLogo)); + Footer($$anchor2, { + get logo() { + return get($0); + }, + get strings() { + return get(strings); + } + }); + } + }; + if_block(node_6, ($$render) => { + if (get(showFooter)) $$render(consequent_7); + }); + } + var node_7 = sibling(node_6, 2); + { + var consequent_8 = ($$anchor2) => { + var div_7 = root_10(); + bind_this(div_7, ($$value) => set(elAnchorArrow, $$value), () => get(elAnchorArrow)); + append($$anchor2, div_7); + }; + if_block(node_7, ($$render) => { + if (get(config).display === "floating") $$render(consequent_8); + }); + } + var node_8 = sibling(node_7, 2); + { + var consequent_9 = ($$anchor2) => { + var input_1 = root_11(); + remove_input_defaults(input_1); + template_effect(() => { + set_attribute(input_1, "name", get(config).name); + set_value(input_1, get(payload)); + }); + append($$anchor2, input_1); + }; + if_block(node_8, ($$render) => { + if (!get(config).setCookie) $$render(consequent_9); + }); + } + reset(div_4); + var node_9 = sibling(div_4, 2); + { + var consequent_12 = ($$anchor2) => { + Popover($$anchor2, { + get anchor() { + return get(elRoot); + }, + onClickOutside: () => { + if (isSecureContext) { + reset$1(); + } + }, + get placement() { + return get(config).popoverPlacement; + }, + role: "alert", + variant: "error", + get dir() { + return get(dir); + }, + get updateUISignal() { + return get(updateUISignal); + }, + children: ($$anchor3, $$slotProps) => { + var fragment_9 = comment(); + var node_10 = first_child(fragment_9); + { + var consequent_10 = ($$anchor4) => { + var div_8 = root_14(); + append($$anchor4, div_8); + }; + var consequent_11 = ($$anchor4) => { + var div_9 = root_15(); + var text_4 = child(div_9, true); + reset(div_9); + template_effect(() => set_text(text_4, get(strings).expired)); + append($$anchor4, div_9); + }; + var alternate_1 = ($$anchor4) => { + var div_10 = root_16(); + var text_5 = child(div_10, true); + reset(div_10); + template_effect(() => { + set_attribute(div_10, "title", get(error)); + set_text(text_5, get(strings).error); + }); + append($$anchor4, div_10); + }; + if_block(node_10, ($$render) => { + if (!get(error) && !isSecureContext) $$render(consequent_10); + else if (!get(error) && get(currentState) === State.EXPIRED) $$render(consequent_11, 1); + else $$render(alternate_1, -1); + }); + } + append($$anchor3, fragment_9); + }, + $$slots: { default: true } + }); + }; + var consequent_14 = ($$anchor2) => { + var fragment_10 = comment(); + var node_11 = first_child(fragment_10); + key(node_11, () => get(codeChallenge), ($$anchor3) => { + { + let $0 = /* @__PURE__ */ user_derived(() => get(config).codeChallengeDisplay !== "standard"); + Popover($$anchor3, { + get anchor() { + return get(elRoot); + }, + get backdrop() { + return get($0); + }, + get display() { + return get(config).codeChallengeDisplay; + }, + onClose: () => { + reset$1(); + }, + get placement() { + return get(config).popoverPlacement; + }, + role: "dialog", + get "aria-label"() { + return get(strings).verificationRequired; + }, + get dir() { + return get(dir); + }, + get updateUISignal() { + return get(updateUISignal); + }, + children: ($$anchor4, $$slotProps) => { + var fragment_12 = root_19(); + var node_12 = first_child(fragment_12); + Code(node_12, { + get audioUrl() { + return get(codeChallengeAudioUrl); + }, + get imageUrl() { + return get(codeChallengeImageUrl); + }, + onCancel: () => reset$1(), + onReload: () => verify(), + onSubmit: (code) => verifyServer(code), + get codeChallenge() { + return get(codeChallenge); + }, + get config() { + return get(config); + }, + get strings() { + return get(strings); + } + }); + var node_13 = sibling(node_12, 2); + { + var consequent_13 = ($$anchor5) => { + Footer($$anchor5, { + get logo() { + return get(showLogo); + }, + get strings() { + return get(strings); + } + }); + }; + if_block(node_13, ($$render) => { + if (get(showFooter) && get(config).codeChallengeDisplay !== "standard") $$render(consequent_13); + }); + } + append($$anchor4, fragment_12); + }, + $$slots: { default: true } + }); + } + }); + append($$anchor2, fragment_10); + }; + if_block(node_9, ($$render) => { + if (get(error) || get(currentState) === State.EXPIRED || !isSecureContext) $$render(consequent_12); + else if (get(codeChallenge) && get(currentState) === State.CODE) $$render(consequent_14, 1); + }); + } + reset(div_1); + bind_this(div_1, ($$value) => set(elRoot, $$value), () => get(elRoot)); + template_effect( + ($0) => { + set_attribute(div_1, "data-state", get(currentState)); + set_attribute(div_1, "data-display", get(config).display || void 0); + set_attribute(div_1, "data-placement", $0); + set_attribute(div_1, "data-visible", get(visible) || void 0); + set_attribute(div_1, "dir", get(dir)); + set_attribute(label, "for", get(checkboxId)); + div_1.dir = div_1.dir; + }, + [() => getPlacement(get(config).display)] + ); + append($$anchor, fragment); + var $$pop = pop($$exports); + $$cleanup(); + return $$pop; +} +if (typeof window !== "undefined" && window.customElements && !customElements.get("altcha-widget")) customElements.define("altcha-widget", create_custom_element( + Widget, + { + auto: { type: "String" }, + challenge: { type: "String" }, + configuration: { type: "String" }, + display: { type: "String" }, + language: { type: "String" }, + name: { type: "String" }, + theme: { type: "String" }, + type: { type: "String" }, + workers: { type: "Number" } + }, + [], + [ + "configure", + "getConfiguration", + "getState", + "hide", + "log", + "reset", + "setState", + "show", + "updateUI", + "verify" + ] +)); diff --git a/frontend/node_modules/altcha/dist/external/altcha.min.js b/frontend/node_modules/altcha/dist/external/altcha.min.js new file mode 100644 index 0000000..c2dd603 --- /dev/null +++ b/frontend/node_modules/altcha/dist/external/altcha.min.js @@ -0,0 +1 @@ +const e=!1;var t=Array.isArray,n=Array.prototype.indexOf,r=Array.prototype.includes,i=Array.from,o=Object.keys,a=Object.defineProperty,s=Object.getOwnPropertyDescriptor,l=Object.getOwnPropertyDescriptors,c=Object.prototype,u=Array.prototype,f=Object.getPrototypeOf,d=Object.isExtensible;const h=()=>{};function v(){var e,t;return{promise:new Promise((n,r)=>{e=n,t=r}),resolve:e,reject:t}}const p=1<<24,g=16,m=32,y=64,b=512,w=1024,_=2048,$=4096,k=8192,E=16384,S=32768,C=1<<25,x=65536,I=1<<17,O=1<<19,T=65536,A=1<<21,R=1<<23,P=Symbol("$state"),M=Symbol("legacy props"),L=Symbol(""),N=Symbol("attributes"),D=Symbol("class"),V=Symbol("style"),j=Symbol("text"),U=Symbol("form reset"),F=new class extends Error{name="StaleReactionError";message="The reaction that called `getAbortSignal()` was re-run or destroyed"},q=!!globalThis.document?.contentType&&globalThis.document.contentType.includes("xml");function H(e){return e===this.v}function G(e,t){return e!=e?t==t:e!==t||null!==e&&"object"==typeof e||"function"==typeof e}function Y(e){return!G(e,this.v)}const B={},J=Symbol("uninitialized"),Z="http://www.w3.org/1999/xhtml";let W=null;function z(e){W=e}function X(e,t=!1,n){W={p:W,i:!1,c:null,e:null,s:e,x:null,r:Ft,l:null}}function K(e){var t=W,n=t.e;if(null!==n)for(var r of(t.e=null,n))gn(r);return void 0!==e&&(t.x=e),t.i=!0,W=t.p,e??{}}let Q=[];function ee(){var e=Q;Q=[],function(e){for(var t=0;t{t===Q&&ee()})}Q.push(e)}function ne(){for(;Q.length>0;)ee()}function re(e){console.warn("https://svelte.dev/e/hydration_mismatch")}let ie,oe=!1;function ae(e){oe=e}function se(e){if(null===e)throw re(),B;return ie=e}function le(){return se(Ee(ie))}function ce(e){if(oe){if(null!==Ee(ie))throw re(),B;ie=e}}function ue(e=1){if(oe){for(var t=e,n=ie;t--;)n=Ee(n);ie=n}}function fe(e=!0){for(var t=0,n=ie;;){if(8===n.nodeType){var r=n.data;if("]"===r){if(0===t)return n;t-=1}else("["===r||"[!"===r||"["===r[0]&&!isNaN(Number(r.slice(1))))&&(t+=1)}var i=Ee(n);e&&n.remove(),n=i}}function de(e){if(!e||8!==e.nodeType)throw re(),B;return e.data}function he(e){if("object"!=typeof e||null===e||P in e)return e;const n=f(e);if(n!==c&&n!==u)return e;var r=new Map,i=t(e),o=St(0),a=zt,l=e=>{if(zt===a)return e();var t=Vt,n=zt;Ut(null),Xt(a);var r=e();return Ut(t),Xt(n),r};return i&&r.set("length",St(e.length)),new Proxy(e,{defineProperty(e,t,n){"value"in n&&!1!==n.configurable&&!1!==n.enumerable&&!1!==n.writable||function(){throw new Error("https://svelte.dev/e/state_descriptors_fixed")}();var i=r.get(t);return void 0===i?l(()=>{var e=St(n.value);return r.set(t,e),e}):xt(i,n.value,!0),!0},deleteProperty(e,t){var n=r.get(t);if(void 0===n){if(t in e){const e=l(()=>St(J));r.set(t,e),Ot(o)}}else xt(n,J),Ot(o);return!0},get(t,n,i){if(n===P)return e;var o=r.get(n),a=n in t;if(void 0!==o||a&&!s(t,n)?.writable||(o=l(()=>St(he(a?t[n]:J))),r.set(n,o)),void 0!==o){var c=sn(o);return c===J?void 0:c}return Reflect.get(t,n,i)},getOwnPropertyDescriptor(e,t){var n=Reflect.getOwnPropertyDescriptor(e,t);if(n&&"value"in n){var i=r.get(t);i&&(n.value=sn(i))}else if(void 0===n){var o=r.get(t),a=o?.v;if(void 0!==o&&a!==J)return{enumerable:!0,configurable:!0,value:a,writable:!0}}return n},has(e,t){if(t===P)return!0;var n=r.get(t),i=void 0!==n&&n.v!==J||Reflect.has(e,t);if((void 0!==n||null!==Ft&&(!i||s(e,t)?.writable))&&(void 0===n&&(n=l(()=>St(i?he(e[t]):J)),r.set(t,n)),sn(n)===J))return!1;return i},set(e,t,n,a){var c=r.get(t),u=t in e;if(i&&"length"===t)for(var f=n;fSt(J)),r.set(f+"",d))}void 0===c?u&&!s(e,t)?.writable||(xt(c=l(()=>St(void 0)),he(n)),r.set(t,c)):(u=c.v!==J,xt(c,l(()=>he(n))));var h=Reflect.getOwnPropertyDescriptor(e,t);if(h?.set&&h.set.call(a,n),!u){if(i&&"string"==typeof t){var v=r.get("length"),p=Number(t);Number.isInteger(p)&&p>=v.v&&xt(v,p+1)}Ot(o)}return!0},ownKeys(e){sn(o);var t=Reflect.ownKeys(e).filter(e=>{var t=r.get(e);return void 0===t||t.v!==J});for(var[n,i]of r)i.v===J||n in e||t.push(n);return t},setPrototypeOf(){!function(){throw new Error("https://svelte.dev/e/state_prototype_fixed")}()}})}function ve(e){try{if(null!==e&&"object"==typeof e&&P in e)return e[P]}catch{}return e}function pe(e,t){return Object.is(ve(e),ve(t))}var ge,me,ye,be,we;function _e(){if(void 0===ge){ge=window,me=document,ye=/Firefox/.test(navigator.userAgent);var e=Element.prototype,t=Node.prototype,n=Text.prototype;be=s(t,"firstChild").get,we=s(t,"nextSibling").get,d(e)&&(e[D]=void 0,e[N]=null,e[V]=void 0,e.__e=void 0),d(n)&&(n[j]=void 0)}}function $e(e=""){return document.createTextNode(e)}function ke(e){return be.call(e)}function Ee(e){return we.call(e)}function Se(e,t){if(!oe)return ke(e);var n=ke(ie);if(null===n)n=ie.appendChild($e());else if(t&&3!==n.nodeType){var r=$e();return n?.before(r),se(r),r}return t&&Oe(n),se(n),n}function Ce(e,t=!1){if(!oe){var n=ke(e);return n instanceof Comment&&""===n.data?Ee(n):n}if(t){if(3!==ie?.nodeType){var r=$e();return ie?.before(r),se(r),r}Oe(ie)}return ie}function xe(e,t=1,n=!1){let r=oe?ie:e;for(var i;t--;)i=r,r=Ee(r);if(!oe)return r;if(n){if(3!==r?.nodeType){var o=$e();return null===r?i?.after(o):r.before(o),se(o),o}Oe(r)}return se(r),r}function Ie(e,t,n){let r;return document.createElementNS(t??Z,e,r)}function Oe(e){if(e.nodeValue.length<65536)return;let t=e.nextSibling;for(;null!==t&&3===t.nodeType;)t.remove(),e.nodeValue+=t.nodeValue,t=e.nextSibling}function Te(e){var t=Ft;if(null===t)return Vt.f|=R,e;if(0===(t.f&S)&&!(4&t.f))throw e;Ae(e,t)}function Ae(e,t){for(;null!==t;){if(128&t.f){if(0===(t.f&S))throw e;try{return void t.b.error(e)}catch(t){e=t}}t=t.parent}throw e}const Re=-7169;function Pe(e,t){e.f=e.f&Re|t}function Me(e){0!==(e.f&b)||null===e.deps?Pe(e,w):Pe(e,$)}function Le(e){if(null!==e)for(const t of e)2&t.f&&0!==(t.f&T)&&(t.f^=T,Le(t.deps))}function Ne(e,t,n){0!==(e.f&_)?t.add(e):0!==(e.f&$)&&n.add(e),Le(e.deps),Pe(e,w)}function De(e,t,n){if(null==e)return t(void 0),h;const r=un(()=>e.subscribe(t,n));return r.unsubscribe?()=>r.unsubscribe():r}const Ve=[];function je(e,t=h){let n=null;const r=new Set;function i(t){if(G(e,t)&&(e=t,n)){const t=!Ve.length;for(const t of r)t[1](),Ve.push(t,e);if(t){for(let e=0;e{r.delete(l),0===r.size&&n&&(n(),n=null)}}}}function Ue(e){let t;return De(e,e=>t=e)(),t}let Fe=Symbol("unmounted");function qe(e,t,n){const r=n[t]??={store:null,source:Ct(void 0),unsubscribe:h};if(r.store!==e&&!(Fe in n))if(r.unsubscribe(),r.store=e??null,null==e)r.source.v=void 0,r.unsubscribe=h;else{var i=!0;r.unsubscribe=De(e,e=>{i?r.source.v=e:xt(r.source,e)}),i=!1}return e&&Fe in n?Ue(e):sn(r.source)}let He=null,Ge=null,Ye=null,Be=null,Je=null,Ze=null,We=!1,ze=!1,Xe=null,Ke=null;var Qe=0;let et=1;class tt{id=et++;#e=!1;linked=!0;#t=null;#n=null;async_deriveds=new Map;current=new Map;previous=new Map;unblocked=new Set;#r=new Set;#i=new Set;#o=new Set;#a=0;#s=new Map;#l=null;#c=[];#u=[];#f=new Set;#d=new Set;#h=new Map;#v=new Set;is_fork=!1;#p=!1;#g(){if(this.is_fork)return!0;for(const n of this.#s.keys()){for(var e=n,t=!1;null!==e.parent;){if(this.#h.has(e)){t=!0;break}e=e.parent}if(!t)return!0}return!1}skip_effect(e){this.#h.has(e)||this.#h.set(e,{d:[],m:[]}),this.#v.delete(e)}unskip_effect(e,t=e=>this.schedule(e)){var n=this.#h.get(e);if(n){for(var r of(this.#h.delete(e),n.d))Pe(r,_),t(r);for(r of n.m)Pe(r,$),t(r)}this.#v.add(e)}#m(){if(this.#e=!0,Qe++>1e3&&(this.#y(),function(){try{!function(){throw new Error("https://svelte.dev/e/effect_update_depth_exceeded")}()}catch(e){Ae(e,Ze)}}()),!this.#g()){for(const e of this.#f)this.#d.delete(e),Pe(e,_),this.schedule(e);for(const e of this.#d)Pe(e,$),this.schedule(e)}const e=this.#c;this.#c=[],this.apply();var t=Xe=[],n=[],r=Ke=[];for(const r of e)try{this.#b(r,t,n)}catch(e){throw ct(r),e}if(Ye=null,r.length>0){var i=tt.ensure();for(const e of r)i.schedule(e)}if(Xe=null,Ke=null,this.#g()){this.#w(n),this.#w(t);for(const[e,t]of this.#h)lt(e,t);return void(r.length>0&&Ye.#m())}const o=this.#_();if(o)o.#$(this);else{this.#f.clear(),this.#d.clear();for(const e of this.#r)e(this);this.#r.clear(),Be=this,it(n),it(t),Be=null,this.#l?.resolve();var a=Ye;if(this.linked&&0===this.#a&&this.#y(),this.#c.length>0){null===a&&(a=this,this.#k());const e=a;e.#c.push(...this.#c.filter(t=>!e.#c.includes(t)))}null!==a&&a.#m()}}#b(e,t,n){e.f^=w;for(var r=e.first;null!==r;){var i=r.f,o=!!(96&i);if(!(o&&0!==(i&w)||0!==(i&k)||this.#h.has(r))&&null!==r.fn){o?r.f^=w:4&i?t.push(r):Qt(r)&&(0!==(i&g)&&this.#d.add(r),on(r));var a=r.first;if(null!==a){r=a;continue}}for(;null!==r;){var s=r.next;if(null!==s){r=s;break}r=r.parent}}}#_(){for(var e=this.#t;null!==e;){if(!e.is_fork)for(const[t,[,n]]of this.current)if(e.current.has(t)&&!n)return e;e=e.#t}return null}#$(e){for(const[t,n]of e.current)!this.previous.has(t)&&e.previous.has(t)&&this.previous.set(t,e.previous.get(t)),this.current.set(t,n);for(const[t,n]of e.async_deriveds){const e=this.async_deriveds.get(t);e&&n.promise.then(e.resolve)}const t=e=>{var n=e.reactions;if(null!==n)for(const e of n){var r=e.f;if(2&r)t(e);else{var i=e;4194320&r&&!this.async_deriveds.has(i)&&(this.#d.delete(i),Pe(i,_),this.schedule(i))}}};for(const e of this.current.keys())t(e);this.oncommit(()=>e.discard()),e.#y(),Ye=this,this.#m()}#w(e){for(var t=0;t!this.current.has(e));if(0===r.length)e&&c.discard();else if(t.length>0){if(e)for(const e of this.#v)c.unskip_effect(e,e=>{4194320&e.f?c.schedule(e):c.#w([e])});c.activate();var i=new Set,o=new Map;for(var a of t)ot(a,r,i,o);o=new Map;var s=[...c.current.keys()].filter(e=>!this.current.has(e)||this.current.get(e)[0]!==e.v);if(s.length>0)for(const e of this.#u)155648&e.f||!at(e,s,o)||(4194320&e.f?(Pe(e,_),c.schedule(e)):c.#f.add(e));if(c.#c.length>0){for(var l of(c.apply(),c.#c))c.#b(l,[],[]);c.#c=[]}c.deactivate()}}}}increment(e,t){if(this.#a+=1,e){let e=this.#s.get(t)??0;this.#s.set(t,e+1)}}decrement(e,t){if(this.#a-=1,e){let e=this.#s.get(t)??0;1===e?this.#s.delete(t):this.#s.set(t,e-1)}this.#p||(this.#p=!0,te(()=>{this.#p=!1,this.linked&&this.flush()}))}transfer_effects(e,t){for(const t of e)this.#f.add(t);for(const e of t)this.#d.add(e);e.clear(),t.clear()}oncommit(e){this.#r.add(e)}ondiscard(e){this.#i.add(e)}on_fork_commit(e){this.#o.add(e)}run_fork_commit_callbacks(){for(const e of this.#o)e(this);this.#o.clear()}settled(){return(this.#l??=v()).promise}static ensure(){if(null===Ye){const e=Ye=new tt;e.#k(),ze||We||te(()=>{e.#e||e.flush()})}return Ye}apply(){Je=null}schedule(e){if(Ze=e,e.b?.is_pending&&16777228&e.f&&0===(e.f&S))e.b.defer_effect(e);else{for(var t=e;null!==t.parent;){var n=(t=t.parent).f;if(!(null===Xe||t!==Ft||null!==Vt&&2&Vt.f))return;if(96&n){if(0===(n&w))return;t.f^=w}}this.#c.push(t)}}#k(){null===Ge?He=Ge=this:(Ge.#n=this,this.#t=Ge),Ge=this}#y(){var e=this.#t,t=this.#n;null===e?He=t:e.#n=t,null===t?Ge=e:t.#t=e,this.linked=!1}}function nt(e){var t=We;We=!0;try{for(;;){if(ne(),null===Ye)return;Ye.flush()}}finally{We=t}}let rt=null;function it(e){var t=e.length;if(0!==t){for(var n=0;n0)){$t.clear();for(const e of rt){if(24576&e.f)continue;const t=[e];let n=e.parent;for(;null!==n;)rt.has(n)&&(rt.delete(n),t.push(n)),n=n.parent;for(let e=t.length-1;e>=0;e--){const n=t[e];24576&n.f||on(n)}}rt.clear()}}rt=null}}function ot(e,t,n,r){if(!n.has(e)&&(n.add(e),null!==e.reactions))for(const i of e.reactions){const e=i.f;2&e?ot(i,t,n,r):4194320&e&&0===(e&_)&&at(i,t,r)&&(Pe(i,_),st(i))}}function at(e,t,n){const i=n.get(e);if(void 0!==i)return i;if(null!==e.deps)for(const i of e.deps){if(r.call(t,i))return!0;if(2&i.f&&at(i,t,n))return n.set(i,!0),!0}return n.set(e,!1),!1}function st(e){Ye.schedule(e)}function lt(e,t){if(0===(e.f&m)||0===(e.f&w)){0!==(e.f&_)?t.d.push(e):0!==(e.f&$)&&t.m.push(e),Pe(e,w);for(var n=e.first;null!==n;)lt(n,t),n=n.next}}function ct(e){Pe(e,w);for(var t=e.first;null!==t;)ct(t),t=t.next}class ut{parent;is_pending=!1;transform_error;#S;#C=oe?ie:null;#x;#I;#O;#T=null;#A=null;#R=null;#P=null;#M=0;#L=0;#N=!1;#f=new Set;#d=new Set;#D=null;#V=function(e){let t,n=0,r=Et(0);return()=>{hn()&&(sn(r),yn(()=>(0===n&&(t=un(()=>e(()=>Ot(r)))),n+=1,()=>{te(()=>{n-=1,0===n&&(t?.(),t=void 0,Ot(r))})})))}}(()=>(this.#D=Et(this.#M),()=>{this.#D=null}));constructor(e,t,n,r){this.#S=e,this.#x=t,this.#I=e=>{var t=Ft;t.b=this,t.f|=128,n(e)},this.parent=Ft.b,this.transform_error=r??this.parent?.transform_error??(e=>e),this.#O=wn(()=>{if(oe){const e=this.#C;le();const t="[!"===e.data;if(e.data.startsWith("[?")){const t=JSON.parse(e.data.slice(2));this.#j(t)}else t?this.#U():this.#F()}else this.#q()},589824),oe&&(this.#S=ie)}#F(){try{this.#T=$n(()=>this.#I(this.#S))}catch(e){this.error(e)}}#j(e){const t=this.#x.failed;t&&(this.#R=$n(()=>{t(this.#S,()=>e,()=>()=>{})}))}#U(){const e=this.#x.pending;e&&(this.is_pending=!0,this.#A=$n(()=>e(this.#S)),te(()=>{var e=this.#P=document.createDocumentFragment(),t=$e();e.append(t),this.#T=this.#H(()=>$n(()=>this.#I(t))),0===this.#L&&(this.#S.before(e),this.#P=null,In(this.#A,()=>{this.#A=null}),this.#G(Ye))}))}#q(){try{if(this.is_pending=this.has_pending_snippet(),this.#L=0,this.#M=0,this.#T=$n(()=>{this.#I(this.#S)}),this.#L>0){var e=this.#P=document.createDocumentFragment();Rn(this.#T,e);const t=this.#x.pending;this.#A=$n(()=>t(this.#S))}else this.#G(Ye)}catch(e){this.error(e)}}#G(e){this.is_pending=!1,e.transfer_effects(this.#f,this.#d)}defer_effect(e){Ne(e,this.#f,this.#d)}is_rendered(){return!this.is_pending&&(!this.parent||this.parent.is_rendered())}has_pending_snippet(){return!!this.#x.pending}#H(e){var t=Ft,n=Vt,r=W;qt(this.#O),Ut(this.#O),z(this.#O.ctx);try{return tt.ensure(),e()}catch(e){return Te(e),null}finally{qt(t),Ut(n),z(r)}}#Y(e,t){this.has_pending_snippet()?(this.#L+=e,0===this.#L&&(this.#G(t),this.#A&&In(this.#A,()=>{this.#A=null}),this.#P&&(this.#S.before(this.#P),this.#P=null))):this.parent&&this.parent.#Y(e,t)}update_pending_count(e,t){this.#Y(e,t),this.#M+=e,this.#D&&!this.#N&&(this.#N=!0,te(()=>{this.#N=!1,this.#D&&It(this.#D,this.#M)}))}get_effect_pending(){return this.#V(),sn(this.#D)}error(e){if(!this.#x.onerror&&!this.#x.failed)throw e;Ye?.is_fork?(this.#T&&Ye.skip_effect(this.#T),this.#A&&Ye.skip_effect(this.#A),this.#R&&Ye.skip_effect(this.#R),Ye.on_fork_commit(()=>{this.#B(e)})):this.#B(e)}#B(e){this.#T&&(Sn(this.#T),this.#T=null),this.#A&&(Sn(this.#A),this.#A=null),this.#R&&(Sn(this.#R),this.#R=null),oe&&(se(this.#C),ue(),se(fe()));var t=this.#x.onerror;let n=this.#x.failed;var r=!1,i=!1;const o=()=>{r?console.warn("https://svelte.dev/e/svelte_boundary_reset_noop"):(r=!0,i&&function(){throw new Error("https://svelte.dev/e/svelte_boundary_reset_onerror")}(),null!==this.#R&&In(this.#R,()=>{this.#R=null}),this.#H(()=>{this.#q()}))},a=e=>{try{i=!0,t?.(e,o),i=!1}catch(e){Ae(e,this.#O&&this.#O.parent)}n&&(this.#R=this.#H(()=>{try{return $n(()=>{var t=Ft;t.b=this,t.f|=128,n(this.#S,()=>e,()=>o)})}catch(e){return Ae(e,this.#O.parent),null}}))};te(()=>{var t;try{t=this.transform_error(e)}catch(e){return void Ae(e,this.#O&&this.#O.parent)}null!==t&&"object"==typeof t&&"function"==typeof t.then?t.then(a,e=>Ae(e,this.#O&&this.#O.parent)):a(t)})}}function ft(e,t,n,r){const i=vt;var o=e.filter(e=>!e.settled);if(0!==n.length||0!==o.length){var a,s,l,c,u=Ft,f=(a=Ft,s=Vt,l=W,c=Ye,function(e=!0){qt(a),Ut(s),z(l),e&&0===(a.f&E)&&(c?.activate(),c?.apply())}),d=1===o.length?o[0].promise:o.length>1?Promise.all(o.map(e=>e.promise)):null,h=ht();0!==n.length?d?d.then(()=>{f(),p(),dt()}):p():d.then(()=>v(t.map(i))).finally(h)}else r(t.map(i));function v(e){if(0===(u.f&E)){f();try{r(e)}catch(e){Ae(e,u)}dt()}}function p(){Promise.all(n.map(e=>gt(e))).then(e=>v([...t.map(i),...e])).catch(e=>Ae(e,u)).finally(h)}}function dt(e=!0){qt(null),Ut(null),z(null),e&&Ye?.deactivate()}function ht(){var e=Ft,t=e.b,n=Ye,r=t.is_rendered();return t.update_pending_count(1,n),n.increment(r,e),()=>{t.update_pending_count(-1,n),n.decrement(r,e)}}function vt(e){null!==Ft&&(Ft.f|=O);return{ctx:W,deps:null,effects:null,equals:H,f:2050,fn:e,reactions:null,rv:0,v:J,wv:0,parent:Ft,ac:null}}const pt=Symbol("obsolete");function gt(e,t,n){let r=Ft;null===r&&function(){throw new Error("https://svelte.dev/e/async_derived_orphan")}();var i=void 0,o=Et(J),a=!Vt,s=new Set;return function(e){dn(4718592,e)}(()=>{var t=Ft,n=v();i=n.promise;try{Promise.resolve(e()).then(n.resolve,e=>{e!==F&&n.reject(e)}).finally(dt)}catch(e){n.reject(e),dt()}var l=Ye;if(a){if(0!==(t.f&S))var c=ht();if(r.b.is_rendered())l.async_deriveds.get(t)?.reject(pt);else for(const e of s.values())e.reject(pt);s.add(n),l.async_deriveds.set(t,n)}const u=(e,t=void 0)=>{c?.(),s.delete(n),t!==pt&&(l.activate(),t?(o.f|=R,It(o,t)):(0!==(o.f&R)&&(o.f^=R),It(o,e)),l.deactivate())};n.promise.then(u,e=>u(null,e||"unknown"))}),vn(()=>{for(const e of s)e.reject(pt)}),new Promise(e=>{!function t(n){function r(){n===i?e(o):t(i)}n.then(r,r)}(i)})}function mt(e){const t=vt(e);return Gt(t),t}function yt(e){var t,n=Ft,r=e.parent;if(!Nt&&null!==r&&e.v!==J&&24576&r.f)return console.warn("https://svelte.dev/e/derived_inert"),e.v;qt(r);try{e.f&=-65537,function(e){var t=e.effects;if(null!==t){e.effects=null;for(var n=0;n0&&!kt&&function(){kt=!1;for(const e of _t){let t;0!==(e.f&w)&&Pe(e,$);try{t=Qt(e)}catch{t=!0}t&&on(e)}_t.clear()}()}return t}function Ot(e){xt(e,e.v+1)}function Tt(e,t,n){var r=e.reactions;if(null!==r)for(var i=r.length,o=0;o{document.activeElement===t&&e.focus()})}}let Rt=!1;function Pt(){Rt||(Rt=!0,document.addEventListener("reset",e=>{Promise.resolve().then(()=>{if(!e.defaultPrevented)for(const t of e.target.elements)t[U]?.()})},{capture:!0}))}function Mt(e){var t=Vt,n=Ft;Ut(null),qt(null);try{return e()}finally{Ut(t),qt(n)}}let Lt=!1,Nt=!1;function Dt(e){Nt=e}let Vt=null,jt=!1;function Ut(e){Vt=e}let Ft=null;function qt(e){Ft=e}let Ht=null;function Gt(e){null!==Vt&&(null===Ht?Ht=[e]:Ht.push(e))}let Yt=null,Bt=0,Jt=null;let Zt=1,Wt=0,zt=Wt;function Xt(e){zt=e}function Kt(){return++Zt}function Qt(e){var t=e.f;if(0!==(t&_))return!0;if(2&t&&(e.f&=-65537),0!==(t&$)){for(var n=e.deps,r=n.length,i=0;ie.wv)return!0}0!==(t&b)&&null===Je&&Pe(e,w)}return!1}function en(e,t,n=!0){var i=e.reactions;if(null!==i&&(null===Ht||!r.call(Ht,e)))for(var o=0;o{e.ac.abort(F)}),e.ac=null);try{e.f|=A;var u=(0,e.fn)();e.f|=S;var f=e.deps,d=Ye?.is_fork;if(null!==Yt){var h;if(d||rn(e,Bt),null!==f&&Bt>0)for(f.length=Bt+Yt.length,h=0;h{dn(8,()=>e(...t.map(sn)))})}function wn(e,t=0){return dn(g|t,e)}function _n(e,t=0){return dn(p|t,e)}function $n(e){return dn(524320,e)}function kn(e){var t=e.teardown;if(null!==t){const e=Nt,n=Vt;Dt(!0),Ut(null);try{t.call(null)}finally{Dt(e),Ut(n)}}}function En(e,t=!1){var n=e.first;for(e.first=e.last=null;null!==n;){const e=n.ac;null!==e&&Mt(()=>{e.abort(F)});var r=n.next;0!==(n.f&y)?n.parent=null:Sn(n,t),n=r}}function Sn(e,t=!0){var n=!1;(t||262144&e.f)&&null!==e.nodes&&null!==e.nodes.end&&(Cn(e.nodes.start,e.nodes.end),n=!0),Pe(e,C),En(e,t&&!n),rn(e,0);var r=e.nodes&&e.nodes.t;if(null!==r)for(const e of r)e.stop();kn(e),e.f^=C,e.f|=E;var i=e.parent;null!==i&&null!==i.first&&xn(e),e.next=e.prev=e.teardown=e.ctx=e.deps=e.fn=e.nodes=e.ac=e.b=null}function Cn(e,t){for(;null!==e;){var n=e===t?null:Ee(e);e.remove(),e=n}}function xn(e){var t=e.parent,n=e.prev,r=e.next;null!==n&&(n.next=r),null!==r&&(r.prev=n),null!==t&&(t.first===e&&(t.first=r),t.last===e&&(t.last=n))}function In(e,t,n=!0){var r=[];On(e,r,!0);var i=()=>{n&&Sn(e),t&&t()},o=r.length;if(o>0){var a=()=>--o||i();for(var s of r)s.out(a)}else i()}function On(e,t,n){if(0===(e.f&k)){e.f^=k;var r=e.nodes&&e.nodes.t;if(null!==r)for(const e of r)(e.is_global||n)&&t.push(e);for(var i=e.first;null!==i;){var o=i.next;if(0===(i.f&y))On(i,t,!!(0!==(i.f&x)||0!==(i.f&m)&&0!==(e.f&g))&&n);i=o}}}function Tn(e){An(e,!0)}function An(e,t){if(0!==(e.f&k)){e.f^=k,0===(e.f&w)&&(Pe(e,_),tt.ensure().schedule(e));for(var n=e.first;null!==n;){var r=n.next;An(n,!!(0!==(n.f&x)||0!==(n.f&m))&&t),n=r}var i=e.nodes&&e.nodes.t;if(null!==i)for(const e of i)(e.is_global||t)&&e.in()}}function Rn(e,t){if(e.nodes)for(var n=e.nodes.start,r=e.nodes.end;null!==n;){var i=n===r?null:Ee(n);t.append(n),n=i}}function Pn(e){const t={get:e=>Ue(t.store)[e],set:(e,n)=>{"string"==typeof e?Object.assign(Ue(t.store),{[e]:n}):Object.assign(Ue(t.store),e),t.store.set(Ue(t.store))},store:je(e)};return t}globalThis.$altcha=globalThis.$altcha||{algorithms:new Map,defaults:Pn({}),i18n:Pn({}),instances:new Set,plugins:new Set};globalThis.$altcha.i18n.set("en",{ariaLinkLabel:"Altcha (official website)",cancel:"Cancel",enterCode:"Enter code",enterCodeAria:"Enter code you hear. Press Space to play audio.",enterCodeFromImage:"To proceed, please enter the code from the image below.",error:"Verification failed. Try again later.",expired:"Verification expired. Try again.",footer:'Protected by ALTCHA',getAudioChallenge:"Get an audio challenge",label:"I'm not a robot",loading:"Loading...",reload:"Reload",verify:"Verify",verificationRequired:"Verification required!",verified:"Verified",verifying:"Verifying...",waitAlert:"Verifying... please wait."});"undefined"!=typeof window&&((window.__svelte??={}).v??=new Set).add("5");const Mn=Symbol("events"),Ln=new Set,Nn=new Set;function Dn(e,t,n,r={}){function i(e){if(r.capture||qn.call(t,e),!e.cancelBubble)return Mt(()=>n?.call(this,e))}return e.startsWith("pointer")||e.startsWith("touch")||"wheel"===e?te(()=>{t.addEventListener(e,i,r)}):t.addEventListener(e,i,r),i}function Vn(e,t,n,r,i){var o={capture:r,passive:i},a=Dn(e,t,n,o);(t===document.body||t===window||t===document||t instanceof HTMLMediaElement)&&vn(()=>{t.removeEventListener(e,a,o)})}function jn(e,t,n){(t[Mn]??={})[e]=n}function Un(e){for(var t=0;to||n});var f=Vt,d=Ft;Ut(null),qt(null);try{for(var h,v=[];null!==o;){var p=o.assignedSlot||o.parentNode||o.host||null;try{var g=o[Mn]?.[r];null==g||o.disabled&&e.target!==o||g.call(o,e)}catch(e){h?v.push(e):h=e}if(e.cancelBubble||p===t||null===p)break;o=p}if(h){for(let e of v)queueMicrotask(()=>{throw e});throw h}}finally{e[Mn]=t,delete e.currentTarget,Ut(f),qt(d)}}}const Hn=globalThis?.window?.trustedTypes&&globalThis.window.trustedTypes.createPolicy("svelte-trusted-html",{createHTML:e=>e});function Gn(e){var t=Ie("template");return t.innerHTML=function(e){return Hn?.createHTML(e)??e}(e.replaceAll("","\x3c!----\x3e")),t.content}function Yn(e,t){var n=Ft;null===n.nodes&&(n.nodes={start:e,end:t,a:null,t:null})}function Bn(e,t){var n,r=!!(1&t),i=!!(2&t),o=!e.startsWith("");return()=>{if(oe)return Yn(ie,null),ie;void 0===n&&(n=Gn(o?e:""+e),r||(n=ke(n)));var t=i||ye?document.importNode(n,!0):n.cloneNode(!0);r?Yn(ke(t),t.lastChild):Yn(t,t);return t}}function Jn(e,t,n="svg"){var r,i=`<${n}>${!e.startsWith("")?e:""+e}`;return()=>{if(oe)return Yn(ie,null),ie;if(!r){var e=Gn(i);r=ke(ke(e))}var t=r.cloneNode(!0);return Yn(t,t),t}}function Zn(e,t){return Jn(e,0,"svg")}function Wn(e=""){if(!oe){var t=$e(e+"");return Yn(t,t),t}var n=ie;return 3!==n.nodeType?(n.before(n=$e()),se(n)):Oe(n),Yn(n,n),n}function zn(){if(oe)return Yn(ie,null),ie;var e=document.createDocumentFragment(),t=document.createComment(""),n=$e();return e.append(t,n),Yn(t,n),e}function Xn(e,t){if(oe){var n=Ft;return 0!==(n.f&S)&&null!==n.nodes.end||(n.nodes.end=ie),void le()}null!==e&&e.before(t)}function Kn(e){return e.endsWith("capture")&&"gotpointercapture"!==e&&"lostpointercapture"!==e}const Qn=["beforeinput","click","change","dblclick","contextmenu","focusin","focusout","input","keydown","keyup","mousedown","mousemove","mouseout","mouseover","mouseup","pointerdown","pointermove","pointerout","pointerover","pointerup","touchend","touchmove","touchstart"];function er(e){return Qn.includes(e)}const tr={formnovalidate:"formNoValidate",ismap:"isMap",nomodule:"noModule",playsinline:"playsInline",readonly:"readOnly",defaultvalue:"defaultValue",defaultchecked:"defaultChecked",srcobject:"srcObject",novalidate:"noValidate",allowfullscreen:"allowFullscreen",disablepictureinpicture:"disablePictureInPicture",disableremoteplayback:"disableRemotePlayback"};function nr(e){return e=e.toLowerCase(),tr[e]??e}const rr=["touchstart","touchmove"];function ir(e){return rr.includes(e)}function or(e,t){var n=null==t?"":"object"==typeof t?`${t}`:t;n!==(e[j]??=e.nodeValue)&&(e[j]=n,e.nodeValue=`${n}`)}function ar(e,t){return cr(e,t)}function sr(e,t){_e(),t.intro=t.intro??!1;const n=t.target,r=oe,i=ie;try{for(var o=ke(n);o&&(8!==o.nodeType||"["!==o.data);)o=Ee(o);if(!o)throw B;ae(!0),se(o);const r=cr(e,{...t,anchor:o});return ae(!1),r}catch(r){if(r instanceof Error&&r.message.split("\n").some(e=>e.startsWith("https://svelte.dev/e/")))throw r;return r!==B&&console.warn("Failed to hydrate: ",r),!1===t.recover&&function(){throw new Error("https://svelte.dev/e/hydration_failed")}(),_e(),n.textContent="",ae(!1),ar(e,t)}finally{ae(r),se(i)}}const lr=new Map;function cr(e,{target:t,anchor:n,props:r={},events:o,context:a,intro:s=!0,transformError:l}){_e();var c=void 0,u=function(e){tt.ensure();const t=dn(524352,e);return(e={})=>new Promise(n=>{e.outro?In(t,()=>{Sn(t),n(void 0)}):(Sn(t),n(void 0))})}(()=>{var s=n??t.appendChild($e());!function(e,t,n,r){new ut(e,t,n,r)}(s,{pending:()=>{}},t=>{if(X({}),a&&(W.c=a),o&&(r.$$events=o),oe&&Yn(t,null),c=e(t,r)||{},oe&&(Ft.nodes.end=ie,null===ie||8!==ie.nodeType||"]"!==ie.data))throw re(),B;K()},l);var u=new Set,f=e=>{for(var n=0;n{for(var e of u)for(const n of[t,document]){var r=lr.get(n),i=r.get(e);0==--i?(n.removeEventListener(e,qn),r.delete(e),0===r.size&&lr.delete(n)):r.set(e,i)}Nn.delete(f),s!==n&&s.parentNode?.removeChild(s)}});return ur.set(c,u),c}let ur=new WeakMap;class fr{anchor;#J=new Map;#Z=new Map;#W=new Map;#z=new Set;#X=!0;constructor(e,t=!0){this.anchor=e,this.#X=t}#E=e=>{if(this.#J.has(e)){var t=this.#J.get(e),n=this.#Z.get(t);if(n)Tn(n),this.#z.delete(t);else{var r=this.#W.get(t);r&&(this.#Z.set(t,r.effect),this.#W.delete(t),r.fragment.lastChild.remove(),this.anchor.before(r.fragment),n=r.effect)}for(const[t,n]of this.#J){if(this.#J.delete(t),t===e)break;const r=this.#W.get(n);r&&(Sn(r.effect),this.#W.delete(n))}for(const[e,r]of this.#Z){if(e===t||this.#z.has(e))continue;const i=()=>{if(Array.from(this.#J.values()).includes(e)){var t=document.createDocumentFragment();Rn(r,t),t.append($e()),this.#W.set(e,{effect:r,fragment:t})}else Sn(r);this.#z.delete(e),this.#Z.delete(e)};this.#X||!n?(this.#z.add(e),In(r,i,!1)):i()}}};#K=e=>{this.#J.delete(e);const t=Array.from(this.#J.values());for(const[e,n]of this.#W)t.includes(e)||(Sn(n.effect),this.#W.delete(e))};ensure(e,t){var n=Ye;!t||this.#Z.has(e)||this.#W.has(e)||this.#Z.set(e,$n(()=>t(this.anchor)));this.#J.set(n,e),oe&&(this.anchor=ie),this.#E(n)}}function dr(e){null===W&&function(){throw new Error("https://svelte.dev/e/lifecycle_outside_component")}(),pn(()=>{const t=un(e);if("function"==typeof t)return t})}function hr(e,t,n=!1){var r;oe&&(r=ie,le());var i=new fr(e);function o(e,t){if(oe){var n=de(r);if(e!==parseInt(n.substring(1))){var o=fe();return se(o),i.anchor=o,ae(!1),i.ensure(e,t),void ae(!0)}}i.ensure(e,t)}wn(()=>{var e=!1;t((t,n=0)=>{e=!0,o(n,t)}),e||o(-1,null)},n?x:0)}const vr=Symbol("NaN");function pr(e,t,n=!1,r=!1,i=!1,o=!1){var a=e,s="";if(n){var l=e;oe&&(a=se(ke(l)))}bn(()=>{var e=Ft;if(s!==(s=t()??"")){if(n&&!oe)return e.nodes=null,l.innerHTML=s,void(""!==s&&Yn(ke(l),l.lastChild));if(null!==e.nodes&&(Cn(e.nodes.start,e.nodes.end),e.nodes=null),""!==s){if(oe){ie.data;for(var o=le(),c=o;null!==o&&(8!==o.nodeType||""!==o.data);)c=o,o=Ee(o);if(null===o)throw re(),B;return Yn(ie,c),void(a=se(o))}var u=Ie(r?"svg":i?"math":"template",r?"http://www.w3.org/2000/svg":i?"http://www.w3.org/1998/Math/MathML":void 0);u.innerHTML=s;var f=r||i?u:u.content;if(Yn(ke(f),f.lastChild),r||i)for(;ke(f);)a.before(ke(f));else a.before(f)}}else oe&&le()})}function gr(e,t){var n,r=void 0;_n(()=>{r!==(r=t())&&(n&&(Sn(n),n=null),r&&(n=$n(()=>{mn(()=>r(e))})))})}function mr(e){var t,n,r="";if("string"==typeof e||"number"==typeof e)r+=e;else if("object"==typeof e)if(Array.isArray(e)){var i=e.length;for(t=0;t=0;){var s=a+o;0!==a&&!br.includes(r[a-1])||s!==r.length&&!br.includes(r[s])?a=s:r=(0===a?"":r.substring(0,a))+r.substring(s+1)}return""===r?null:r}(n,0,o);oe&&s===e.getAttribute("class")||(null==s?e.removeAttribute("class"):t?e.className=s:e.setAttribute("class",s)),e[D]=n}else if(o&&i!==o)for(var l in o){var c=!!o[l];null!=i&&c===!!i[l]||e.classList.toggle(l,c)}return o}function kr(e,t={},n,r){for(var i in n){var o=n[i];t[i]!==o&&(null==n[i]?e.style.removeProperty(i):e.style.setProperty(i,o,r))}}function Er(e,t,n,r){var i=e[V];if(oe||i!==t){var o=function(e,t){if(t){var n,r,i="";if(Array.isArray(t)?(n=t[0],r=t[1]):n=t,e){e=String(e).replaceAll(/\s*\/\*.*?\*\/\s*/g,"").trim();var o=!1,a=0,s=!1,l=[];n&&l.push(...Object.keys(n).map(_r)),r&&l.push(...Object.keys(r).map(_r));var c=0,u=-1;const t=e.length;for(var f=0;f{if(!t){if(t=!0,e.hasAttribute("value")){var n=e.value;Vr(e,"value",null),e.value=n}if(e.hasAttribute("checked")){var r=e.checked;Vr(e,"checked",null),e.checked=r}}};e[U]=n,te(n),Pt()}}function Dr(e,t){t?e.hasAttribute("selected")||e.setAttribute("selected",""):e.removeAttribute("selected")}function Vr(e,t,n,r){var i=Ur(e);oe&&(i[t]=e.getAttribute(t),"src"===t||"srcset"===t||"href"===t&&e.nodeName===Ar)||i[t]!==(i[t]=n)&&("loading"===t&&(e[L]=n),null==n?e.removeAttribute(t):"string"!=typeof n&&qr(e).includes(t)?e[t]=n:e.setAttribute(t,n))}function jr(e,t,n=[],r=[],i=[],o,a=!1,s=!1){ft(i,n,r,n=>{var r=void 0,i={},o=e.nodeName===Mr,l=!1;if(_n(()=>{var c=t(...n.map(sn)),u=function(e,t,n,r,i=!1){if(oe&&i&&e.nodeName===Rr){var o=e;("checkbox"===o.type?"defaultChecked":"defaultValue")in n||Nr(o)}var a=Ur(e),s=a[Or],l=!a[Tr];let c=oe&&s;c&&ae(!1);var u=t||{},f=e.nodeName===Pr;for(var d in t)d in n||(n[d]=null);n.class?n.class=yr(n.class):n[xr]&&(n.class=null),n[Ir]&&(n.style??=null);var h=qr(e);for(const r in n){let i=n[r];if(f&&"value"===r&&null==i)e.value=e.__value="",u[r]=i;else if("class"!==r)if("style"!==r){var v=u[r];if(i!==v||void 0===i&&e.hasAttribute(r)){u[r]=i;var p=r[0]+r[1];if("$$"!==p)if("on"===p){const t={},n="$$"+r;let o=r.slice(2);var g=er(o);if(Kn(o)&&(o=o.slice(0,-7),t.capture=!0),!g&&v){if(null!=i)continue;e.removeEventListener(o,u[n],t),u[n]=null}if(g)jn(o,e,i),Un([o]);else if(null!=i){let i=function(e){u[r].call(this,e)};u[n]=Dn(o,e,i,t)}}else if("style"===r)Vr(e,r,i);else if("autofocus"===r)At(e,Boolean(i));else if(s||"__value"!==r&&("value"!==r||null==i))if("selected"===r&&f)Dr(e,i);else{var m=r;l||(m=nr(m));var y="defaultValue"===m||"defaultChecked"===m;if(null!=i||s||y)y||h.includes(m)&&(s||"string"!=typeof i)?(e[m]=i,m in a&&(a[m]=J)):"function"!=typeof i&&Vr(e,m,i);else if(a[r]=null,"value"===m||"checked"===m){let n=e;const r=void 0===t;if("value"===m){let e=n.defaultValue;n.removeAttribute(m),n.defaultValue=e,n.value=n.__value=r?e:null}else{let e=n.defaultChecked;n.removeAttribute(m),n.defaultChecked=e,n.checked=!!r&&e}}else e.removeAttribute(r)}else e.value=e.__value=i}}else Er(e,i,t?.[Ir],n[Ir]),u[r]=i,u[Ir]=n[Ir];else $r(e,"http://www.w3.org/1999/xhtml"===e.namespaceURI,i,0,t?.[xr],n[xr]),u[r]=i,u[xr]=n[xr]}return c&&ae(!0),u}(e,r,c,0,a,s);l&&o&&"value"in c&&Sr(e,c.value);for(let e of Object.getOwnPropertySymbols(i))c[e]||Sn(i[e]);for(let t of Object.getOwnPropertySymbols(c)){var f=c[t];"@attach"!==t.description||r&&f===r[t]||(i[t]&&Sn(i[t]),i[t]=$n(()=>gr(e,()=>f))),u[t]=f}r=u}),o){var c=e;mn(()=>{Sr(c,r.value,!0),function(e){var t=new MutationObserver(()=>{Sr(e,e.__value)});t.observe(e,{childList:!0,subtree:!0,attributes:!0,attributeFilter:["value"]}),vn(()=>{t.disconnect()})}(c)})}l=!0})}function Ur(e){return e[N]??={[Or]:e.nodeName.includes("-"),[Tr]:e.namespaceURI===Z}}var Fr=new Map;function qr(e){var t,n=e.getAttribute("is")||e.nodeName,r=Fr.get(n);if(r)return r;Fr.set(n,r=[]);for(var i=e,o=Element.prototype;o!==i;){for(var a in t=l(i))t[a].set&&"innerHTML"!==a&&"textContent"!==a&&"innerText"!==a&&r.push(a);i=f(i)}return r}function Hr(e,t,n=t){var r=new WeakSet;!function(e,t,n,r=n){e.addEventListener(t,()=>Mt(n));const i=e[U];e[U]=i?()=>{i(),r(!0)}:()=>r(!0),Pt()}(e,"input",async i=>{var o=i?e.defaultValue:e.value;if(o=Gr(e)?Yr(o):o,n(o),null!==Ye&&r.add(Ye),await an(),o!==(o=t())){var a=e.selectionStart,s=e.selectionEnd,l=e.value.length;if(e.value=o??"",null!==s){var c=e.value.length;a===s&&s===l&&c>l?(e.selectionStart=c,e.selectionEnd=c):(e.selectionStart=a,e.selectionEnd=Math.min(s,c))}}}),(oe&&e.defaultValue!==e.value||null==un(t)&&e.value)&&(n(Gr(e)?Yr(e.value):e.value),null!==Ye&&r.add(Ye)),yn(()=>{var n=t();if(e===document.activeElement){var i=Ye;if(r.has(i))return}Gr(e)&&n===Yr(e.value)||("date"!==e.type||n||e.value)&&n!==e.value&&(e.value=n??"")})}function Gr(e){var t=e.type;return"number"===t||"range"===t}function Yr(e){return""===e?null:+e}function Br(e,t){return e===t||e?.[P]===t}function Jr(e={},t,n,r){var i=W.r,o=Ft;return mn(()=>{var r,a;return yn(()=>{r=a,a=[],un(()=>{Br(n(...a),e)||(t(e,...a),r&&Br(n(...r),e)&&t(null,...r))})}),()=>{let r=o;for(;r!==i&&null!==r.parent&&r.parent.f&C;)r=r.parent;const s=r.teardown;r.teardown=()=>{a&&Br(n(...a),e)&&t(null,...a),s?.()}}}),e}const Zr={get(e,t){if(!e.exclude.includes(t))return e.props[t]},set:(e,t)=>!1,getOwnPropertyDescriptor(e,t){if(!e.exclude.includes(t))return t in e.props?{enumerable:!0,configurable:!0,value:e.props[t]}:void 0},has:(e,t)=>!e.exclude.includes(t)&&t in e.props,ownKeys:e=>Reflect.ownKeys(e.props).filter(t=>!e.exclude.includes(t))};function Wr(e,t,n){return new Proxy({props:e,exclude:t},Zr)}function zr(e,t,n,r){var i,o=r,a=!0,s=()=>(a&&(a=!1,o=r),o);void 0===e[t]&&void 0!==r&&s(),i=()=>{var n=e[t];return void 0===n?s():(a=!0,n)};var l=!1,c=vt(()=>(l=!1,i())),u=Ft;return function(e,t){if(arguments.length>0){const n=t?sn(c):e;return xt(c,n),l=!0,void 0!==o&&(o=n),e}return Nt&&l||0!==(u.f&E)?c.v:sn(c)}}class Xr{#Q;#ee;constructor(e){var t=new Map,n=(e,n)=>{var r=Ct(n,!1,!1);return t.set(e,r),r};const r=new Proxy({...e.props||{},$$events:{}},{get:(e,r)=>sn(t.get(r)??n(r,Reflect.get(e,r))),has:(e,r)=>r===M||(sn(t.get(r)??n(r,Reflect.get(e,r))),Reflect.has(e,r)),set:(e,r,i)=>(xt(t.get(r)??n(r,i),i),Reflect.set(e,r,i))});this.#ee=(e.hydrate?sr:ar)(e.component,{target:e.target,anchor:e.anchor,props:r,context:e.context,intro:e.intro??!1,recover:e.recover,transformError:e.transformError}),e?.props?.$$host&&!1!==e.sync||nt(),this.#Q=r.$$events;for(const e of Object.keys(this.#ee))"$set"!==e&&"$destroy"!==e&&"$on"!==e&&a(this,e,{get(){return this.#ee[e]},set(t){this.#ee[e]=t},enumerable:!0});this.#ee.$set=e=>{Object.assign(r,e)},this.#ee.$destroy=()=>{!function(e,t){const n=ur.get(e);n?(ur.delete(e),n(t)):Promise.resolve()}(this.#ee)}}$set(e){this.#ee.$set(e)}$on(e,t){this.#Q[e]=this.#Q[e]||[];const n=(...e)=>t.call(this,...e);return this.#Q[e].push(n),()=>{this.#Q[e]=this.#Q[e].filter(e=>e!==n)}}$destroy(){this.#ee.$destroy()}}let Kr=class{};function Qr(e,t,n,r){const i=n[e]?.type;if(t="Boolean"===i&&"boolean"!=typeof t?null!=t:t,!r||!n[e])return t;if("toAttribute"===r)switch(i){case"Object":case"Array":return null==t?null:JSON.stringify(t);case"Boolean":return t?"":null;case"Number":return null==t?null:t;default:return t}else switch(i){case"Object":case"Array":return t&&JSON.parse(t);case"Boolean":default:return t;case"Number":return null!=t?+t:t}}function ei(e,t,n,r,i,l){let c=class extends Kr{constructor(){super(e,n,i),this.$$p_d=t}static get observedAttributes(){return o(t).map(e=>(t[e].attribute||e).toLowerCase())}};return o(t).forEach(e=>{a(c.prototype,e,{get(){return this.$$c&&e in this.$$c?this.$$c[e]:this.$$d[e]},set(n){n=Qr(e,n,t),this.$$d[e]=n;var r=this.$$c;if(r){var i=s(r,e)?.get;i?r[e]=n:r.$set({[e]:n})}}})}),r.forEach(e=>{a(c.prototype,e,{get(){return this.$$c?.[e]}})}),e.element=c,c}"function"==typeof HTMLElement&&(Kr=class extends HTMLElement{$$ctor;$$s;$$c;$$cn=!1;$$d={};$$r=!1;$$p_d={};$$l={};$$l_u=new Map;$$me;$$shadowRoot=null;constructor(e,t,n){super(),this.$$ctor=e,this.$$s=t,n&&(this.$$shadowRoot=this.attachShadow(n))}addEventListener(e,t,n){if(this.$$l[e]=this.$$l[e]||[],this.$$l[e].push(t),this.$$c){const n=this.$$c.$on(e,t);this.$$l_u.set(t,n)}super.addEventListener(e,t,n)}removeEventListener(e,t,n){if(super.removeEventListener(e,t,n),this.$$c){const e=this.$$l_u.get(t);e&&(e(),this.$$l_u.delete(t))}}async connectedCallback(){if(this.$$cn=!0,!this.$$c){let t=function(e){return t=>{const n=Ie("slot");"default"!==e&&(n.name=e),Xn(t,n)}};if(await Promise.resolve(),!this.$$cn||this.$$c)return;const n={},r=function(e){const t={};return e.childNodes.forEach(e=>{t[e.slot||"default"]=!0}),t}(this);for(const e of this.$$s)e in r&&("default"!==e||this.$$d.children?n[e]=t(e):(this.$$d.children=t(e),n.default=!0));for(const e of this.attributes){const t=this.$$g_p(e.name);t in this.$$d||(this.$$d[t]=Qr(t,e.value,this.$$p_d,"toProp"))}for(const e in this.$$p_d)e in this.$$d||void 0===this[e]||(this.$$d[e]=this[e],delete this[e]);this.$$c=(e={component:this.$$ctor,target:this.$$shadowRoot||this,props:{...this.$$d,$$slots:n,$$host:this}},new Xr(e)),this.$$me=function(e){tt.ensure();const t=dn(524352,e);return()=>{Sn(t)}}(()=>{yn(()=>{this.$$r=!0;for(const e of o(this.$$c)){if(!this.$$p_d[e]?.reflect)continue;this.$$d[e]=this.$$c[e];const t=Qr(e,this.$$d[e],this.$$p_d,"toAttribute");null==t?this.removeAttribute(this.$$p_d[e].attribute||e):this.setAttribute(this.$$p_d[e].attribute||e,t)}this.$$r=!1})});for(const e in this.$$l)for(const t of this.$$l[e]){const n=this.$$c.$on(e,t);this.$$l_u.set(t,n)}this.$$l={}}var e}attributeChangedCallback(e,t,n){this.$$r||(e=this.$$g_p(e),this.$$d[e]=Qr(e,n,this.$$p_d,"toProp"),this.$$c?.$set({[e]:this.$$d[e]}))}disconnectedCallback(){this.$$cn=!1,Promise.resolve().then(()=>{!this.$$cn&&this.$$c&&(this.$$c.$destroy(),this.$$me(),this.$$c=void 0)})}$$g_p(e){return o(this.$$p_d).find(t=>this.$$p_d[t].attribute===e||!this.$$p_d[t].attribute&&t.toLowerCase()===e)||e}});var ti=Bn('
');function ni(e,t){X(t,!0);let n,r=zr(t,"loading"),i=Wr(t,["$$slots","$$events","$$legacy","$$host","loading"]);var o={get loading(){return r()},set loading(e){r(e),nt()}},a=ti(),s=Se(a);jr(s,()=>({type:"checkbox",...i}),void 0,void 0,void 0,0,!0),Jr(s,e=>n=e,()=>n);var l=xe(s,2);return ue(2),ce(a),bn(()=>Vr(a,"data-loading",r())),jn("click",l,function(){n?.click()}),Xn(e,a),K(o)}Un(["click"]),ei(ni,{loading:{}},[],[],{mode:"open"});var ri=Bn('
');function ii(e,t){X(t,!0);let n=zr(t,"loading"),r=Wr(t,["$$slots","$$events","$$legacy","$$host","loading"]);var i={get loading(){return n()},set loading(e){n(e),nt()}},o=ri();return jr(Se(o),()=>({type:"checkbox",...r}),void 0,void 0,void 0,0,!0),ue(2),ce(o),bn(()=>Vr(o,"data-loading",n())),Xn(e,o),K(i)}ei(ii,{loading:{}},[],[],{mode:"open"});var oi=Bn('
');function ai(e,t){X(t,!0);let n=zr(t,"strings");var r={get strings(){return n()},set strings(e){n(e),nt()}},i=oi(),o=Se(i);return Vr(o,"href","https://altcha.org"),ce(i),bn(()=>Vr(o,"aria-label",n().ariaLinkLabel)),Xn(e,i),K(r)}ei(ai,{strings:{}},[],[],{mode:"open"});var si=Bn('');function li(e,t){X(t,!0);let n=zr(t,"logo"),r=zr(t,"strings");var i={get logo(){return n()},set logo(e){n(e),nt()},get strings(){return r()},set strings(e){r(e),nt()}},o=si(),a=Se(o);pr(a,()=>r().footer,!0),ce(a);var s=xe(a,2),l=e=>{ai(e,{get strings(){return r()}})};return hr(s,e=>{n()&&e(l)}),ce(o),Xn(e,o),K(i)}ei(li,{logo:{},strings:{}},[],[],{mode:"open"});var ci=Bn('
');function ui(e,t){X(t,!0);let n,r=zr(t,"loading"),i=Wr(t,["$$slots","$$events","$$legacy","$$host","loading"]);var o={get loading(){return r()},set loading(e){r(e),nt()}},a=ci(),s=Se(a);jr(s,()=>({type:"checkbox",...i}),void 0,void 0,void 0,0,!0),Jr(s,e=>n=e,()=>n);var l=xe(s,2);return ce(a),bn(()=>Vr(a,"data-loading",r())),jn("click",l,function(){n?.click()}),Xn(e,a),K(o)}Un(["click"]),ei(ui,{loading:{}},[],[],{mode:"open"});var fi=(e=>(e.ERROR="error",e.LOADING="loading",e.PLAYING="playing",e.PAUSED="paused",e.READY="ready",e))(fi||{}),di=(e=>(e.CODE="code",e.ERROR="error",e.VERIFIED="verified",e.VERIFYING="verifying",e.UNVERIFIED="unverified",e.EXPIRED="expired",e))(di||{}),hi=Bn('
'),vi=Bn('
'),pi=Zn(''),gi=Zn(''),mi=Zn(''),yi=Bn(''),bi=Bn(''),wi=Bn('
');function _i(e,t){X(t,!0);let n=zr(t,"audioUrl"),r=zr(t,"codeChallenge"),i=zr(t,"config"),o=zr(t,"imageUrl"),a=zr(t,"onCancel"),s=zr(t,"onReload"),l=zr(t,"onSubmit"),c=zr(t,"strings"),u=St(void 0),f=St(void 0),d=St(void 0),h=St(!1),v=St(""),p=St(!1);function g(){xt(u,fi.PAUSED,!0)}function m(e){xt(u,fi.ERROR,!0)}function y(){xt(u,fi.READY,!0)}function b(){xt(u,fi.LOADING,!0)}function w(){xt(u,fi.PLAYING,!0)}function _(){xt(u,fi.PAUSED,!0)}function $(){sn(f)?sn(u)===fi.LOADING||(sn(f).paused?(n()&&sn(f).src!==n()&&(sn(f).src=n()),sn(f).currentTime=0,sn(f).play()):sn(f).pause()):(xt(p,!0),requestAnimationFrame(()=>{sn(f)&&n()&&(sn(f).src=n(),sn(f).play())}))}dr(()=>(i().disableAutoFocus||an().then(()=>{sn(d)?.focus()}),()=>{sn(f)&&(sn(f).pause(),xt(f,void 0))}));var k={get audioUrl(){return n()},set audioUrl(e){n(e),nt()},get codeChallenge(){return r()},set codeChallenge(e){r(e),nt()},get config(){return i()},set config(e){i(e),nt()},get imageUrl(){return o()},set imageUrl(e){o(e),nt()},get onCancel(){return a()},set onCancel(e){a(e),nt()},get onReload(){return s()},set onReload(e){s(e),nt()},get onSubmit(){return l()},set onSubmit(e){l(e),nt()},get strings(){return c()},set strings(e){c(e),nt()}},E=wi(),S=Se(E),C=Se(S),x=e=>{var t=hi(),n=Se(t,!0);ce(t),bn(()=>or(n,c().verificationRequired)),Xn(e,t)};hr(C,e=>{"standard"!==i().codeChallengeDisplay&&e(x)});var I=xe(C,2),O=Se(I,!0);ce(I);var T=xe(I,2),A=xe(T,2),R=Se(A);Nr(R),R.disabled=sn(h),Jr(R,e=>xt(d,e),()=>sn(d));var P=xe(R,2),M=e=>{var t=yi(),n=Se(t),r=e=>{Xn(e,vi())},i=e=>{Xn(e,pi())},o=e=>{Xn(e,gi())},a=e=>{Xn(e,mi())};hr(n,e=>{sn(u)===fi.LOADING?e(r):sn(u)===fi.ERROR?e(i,1):sn(u)===fi.PLAYING?e(o,2):e(a,-1)}),ce(t),bn(()=>{Vr(t,"title",c().getAudioChallenge),t.disabled=sn(u)===fi.LOADING||sn(u)===fi.ERROR,Vr(t,"aria-label",sn(u)===fi.LOADING?c().loading:c().getAudioChallenge)}),Vn("click",t,()=>$(),!0),Xn(e,t)};hr(P,e=>{r().audio&&e(M)});var L=xe(P,2);ce(A);var N=xe(A,2),D=Se(N),V=Se(D,!0);ce(D);var j=xe(D,2),U=Se(j,!0);ce(j),ce(N),ce(S);var F=xe(S,2),q=e=>{var t=bi();Jr(t,e=>xt(f,e),()=>sn(f)),Vn("error",t,m),Vn("loadstart",t,b),Vn("canplay",t,y),Vn("pause",t,_),Vn("playing",t,w),Vn("ended",t,g),Xn(e,t)};return hr(F,e=>{sn(p)&&e(q)}),ce(E),bn(()=>{or(O,c().enterCodeFromImage),Vr(T,"src",o()),Vr(R,"minlength",r().length||1),Vr(R,"maxlength",r().length),Vr(R,"placeholder",c().enterCode),Vr(R,"aria-label",sn(u)===fi.LOADING?c().loading:sn(u)===fi.PLAYING?"":c().enterCodeAria),Vr(R,"aria-live",sn(u)?"assertive":"polite"),Vr(R,"aria-busy",sn(u)===fi.LOADING),Vr(L,"title",c().reload),Vr(L,"aria-label",c().reload),Vr(D,"aria-label",c().verify),or(V,c().verify),Vr(j,"aria-label",c().cancel),or(U,c().cancel)}),Vn("submit",S,function(e){e.preventDefault(),e.stopPropagation(),l()?.(sn(v))},!0),jn("keydown",R,function(e){"Space"===e.code?(e.preventDefault(),e.stopPropagation(),$()):"Escape"===e.code&&(e.preventDefault(),e.stopPropagation(),a()?.())}),Hr(R,()=>sn(v),e=>xt(v,e)),Vn("click",L,()=>s()?.(),!0),Vn("click",j,()=>a()?.(),!0),Xn(e,E),K(k)}Un(["keydown"]),ei(_i,{audioUrl:{},codeChallenge:{},config:{},imageUrl:{},onCancel:{},onReload:{},onSubmit:{},strings:{}},[],[],{mode:"open"});var $i=Bn('
'),ki=Bn('
'),Ei=Bn('
×
'),Si=Bn('
',1);function Ci(e,t){X(t,!0);let n=zr(t,"anchor"),r=zr(t,"children"),i=zr(t,"display",0,"standard"),o=zr(t,"backdrop",0,!1),a=zr(t,"onClickOutside"),s=zr(t,"onClickOutsideDelay",0,600),l=zr(t,"onClose"),c=zr(t,"placement",0,"auto"),u=zr(t,"updateUISignal"),f=zr(t,"variant",0,"neutral"),d=Wr(t,["$$slots","$$events","$$legacy","$$host","anchor","children","display","backdrop","onClickOutside","onClickOutsideDelay","onClose","placement","updateUISignal","variant"]),v=St(void 0),p=St(void 0),g=St(!1),m=St(0);function y(){l()?.()}function b(){if(n()&&"auto"===c()&&sn(v)){const e=n().getBoundingClientRect(),t=document.documentElement.clientHeight-(e.top+e.height){"auto"!==c()&&xt(g,"top"===c())}),pn(()=>{u()&&b()}),dr(()=>{const e="bottomsheet"===i()||"overlay"===i();return e&&(sn(p)&&document.body.append(sn(p)),sn(v)&&document.body.append(sn(v))),b(),an().then(()=>{xt(m,Date.now(),!0)}),()=>{e&&(sn(p)&&document.body.removeChild(sn(p)),sn(v)&&document.body.removeChild(sn(v)))}});var w={get anchor(){return n()},set anchor(e){n(e),nt()},get children(){return r()},set children(e){r(e),nt()},get display(){return i()},set display(e="standard"){i(e),nt()},get backdrop(){return o()},set backdrop(e=!1){o(e),nt()},get onClickOutside(){return a()},set onClickOutside(e){a(e),nt()},get onClickOutsideDelay(){return s()},set onClickOutsideDelay(e=600){s(e),nt()},get onClose(){return l()},set onClose(e){l(e),nt()},get placement(){return c()},set placement(e="auto"){c(e),nt()},get updateUISignal(){return u()},set updateUISignal(e){u(e),nt()},get variant(){return f()},set variant(e="neutral"){f(e),nt()}},_=Si();Vn("click",ge,function(e){const t=e.target;sn(v)?.contains(t)||s()&&!(sn(m)+s(){var t=$i();Jr(t,e=>xt(p,e),()=>sn(p)),Xn(e,t)};hr($,e=>{o()&&e(k)});var E=xe($,2);jr(E,()=>({...d,class:`altcha-popover ${(t.class||"")??""}`,"data-popover":!0,"data-variant":f(),"data-top":sn(g),"data-display":i()}));var S=Se(E),C=e=>{Xn(e,ki())};hr(S,e=>{"standard"===i()&&e(C)});var I=xe(S,2),O=e=>{var t=Ei();Vn("click",t,y,!0),Xn(e,t)};hr(I,e=>{"standard"!==i()&&e(O)});var T=xe(I,2);return function(e,t,...n){var r=new fr(e);wn(()=>{const e=t()??null;r.ensure(e,e&&(t=>e(t,...n)))},x)}(Se(T),()=>r()??h),ce(T),ce(E),Jr(E,e=>xt(v,e),()=>sn(v)),Xn(e,_),K(w)}async function xi(e){const{challenge:t,concurrency:n=navigator.hardwareConcurrency,controller:r=new AbortController,createWorker:i,onOutOfMemory:o=e=>e>1?Math.floor(e/2):0,counterMode:a,timeout:s=9e4}=e,l=Math.min(16,Math.max(1,n)),c=[],u=()=>{for(const e of c)e.terminate()};for(let e=0;e(r.signal.addEventListener("abort",()=>{e.postMessage({type:"abort"})}),new Promise((r,i)=>{e.addEventListener("error",e=>{i(e)}),e.addEventListener("message",t=>{if(t.data){for(const t of c)t!==e&&t.postMessage({type:"abort"});if(t.data.error)return i(new Error(t.data.error))}r(t.data)}),e.postMessage({challenge:t,counterMode:a,counterStart:n,counterStep:l,timeout:s,type:"work"})}))))}catch(n){if(n instanceof Error&&!!n?.message?.includes("Out of memory")&&o){u();const n=o(l);if(n)return xi({...e,challenge:t,controller:r,concurrency:n,createWorker:i})}throw n}finally{u()}return r.signal.aborted?null:f||null}ei(Ci,{anchor:{},children:{},display:{},backdrop:{},onClickOutside:{},onClickOutsideDelay:{},onClose:{},placement:{},updateUISignal:{},variant:{}},[],[],{mode:"open"});class Ii{TAG_CODES={INPUT:1,TEXTAREA:2,SELECT:3,BUTTON:4,A:5,DETAILS:6,SUMMARY:7,IFRAME:8,VIDEO:9,AUDIO:10};maxSamples;sampleInterval;target;focusStartTime=0;focusInteraction=0;focusInteractionTimer=null;lastPointerSample=0;lastTouchSample=0;lastScrollSample=0;pendingPointer=null;pendingTouch=null;focus=[];pointer=[];scroll=[];touch=[];constructor(e={}){const{maxSamples:t=60,sampleInterval:n=50,target:r=window}=e;this.maxSamples=t,this.sampleInterval=n,this.target=r,this.attach()}destroy(){const e={capture:!0};this.target.removeEventListener("focusin",this.onFocus,e),this.target.removeEventListener("keydown",this.onInteraction,e),this.target.removeEventListener("pointerdown",this.onInteraction,e),this.target.removeEventListener("pointermove",this.onPointer,e),this.target.removeEventListener("scroll",this.onScroll,e),this.target.removeEventListener("touchmove",this.onTouchMove,e)}export(){return{focus:this.focus,maxTouchPoints:navigator.maxTouchPoints||0,pointer:this.pointer,scroll:this.scroll,time:Date.now(),touch:this.touch}}attach(){const e={passive:!0,capture:!0};this.target.addEventListener("focusin",this.onFocus,e),this.target.addEventListener("keydown",this.onInteraction,e),this.target.addEventListener("pointerdown",this.onInteraction,e),this.target.addEventListener("pointermove",this.onPointer,e),this.target.addEventListener("scroll",this.onScroll,e),this.target.addEventListener("touchmove",this.onTouchMove,e)}evict(e){e.length>this.maxSamples&&e.splice(0,e.length-this.maxSamples)}onFocus=e=>{if(2===this.focusInteraction)return;const t=e.target;if(!(t instanceof Element))return;const n=performance.now();0===this.focusStartTime&&(this.focusStartTime=n),this.focus.push([Math.round(n-this.focusStartTime),t.tabIndex,this.TAG_CODES[t.tagName]??0,this.focusInteraction?1:0]),this.evict(this.focus)};onInteraction=e=>{this.focusInteraction="keyCode"in e?1:2,this.focusInteractionTimer&&clearTimeout(this.focusInteractionTimer),this.focusInteractionTimer=setTimeout(()=>{this.focusInteraction=0},100)};onPointer=e=>{if("touch"===e.pointerType)return;const t=e.timeStamp||performance.now();this.pendingPointer=[Math.round(e.clientX),Math.round(e.clientY),Math.round(t)],t-this.lastPointerSample>=this.sampleInterval&&(this.pointer.push(this.pendingPointer),this.lastPointerSample=t,this.pendingPointer=null,this.evict(this.pointer))};onScroll=()=>{const e=performance.now();e-this.lastScrollSample{const t=e.timeStamp||performance.now(),n=e.touches[0];n&&(this.pendingTouch=[Math.round(n.clientX),Math.round(n.clientY),Math.round(t),Math.round(1e3*n.force)/1e3,Math.round(n.radiusX||0),Math.round(n.radiusY||0)],t-this.lastTouchSample>=this.sampleInterval&&(this.touch.push(this.pendingTouch),this.lastTouchSample=t,this.pendingTouch=null,this.evict(this.touch)))}}var Oi=Bn('
'),Ti=Bn('
'),Ai=Bn('
×
',1),Ri=Bn('
'),Pi=Bn(''),Mi=Bn('
Secure context (HTTPS) required.
'),Li=Bn('
'),Ni=Bn('
'),Di=Bn(" ",1),Vi=Bn('
',1);"undefined"!=typeof window&&window.customElements&&!customElements.get("altcha-widget")&&customElements.define("altcha-widget",ei(function(e,t){X(t,!0);const[n,r]=function(){const e={};return[e,function(){vn(()=>{for(var t in e)e[t].unsubscribe();a(e,Fe,{enumerable:!1,value:!0})})}]}(),i=["ar","fa","he","ur"],{isSecureContext:o}=globalThis,{store:s}=globalThis.$altcha.defaults,l=navigator.hardwareConcurrency||2,c=navigator.deviceMemory||0,u=c&&c<=4?Math.min(4,l):l,f=globalThis.$altcha.i18n.store,d=t.$$host,h=(e,t)=>{an().then(()=>{d?.dispatchEvent(new CustomEvent(e,{detail:t}))})};let v=null,p=St(he(new URL(location.origin))),g=St(!1),m=St(null),y=St(null),b=St(null),w=St(he(di.UNVERIFIED)),_=St(void 0),$=St(void 0),k=St(null),E=St(void 0),S=St(null),C=St(null),I=St(null),O=St(null),T=St(he([])),A=St(0),R=St(he({})),P=St(!0);const M=mt(()=>({fetch:(e,t)=>fetch(e,t),audioChallengeLanguage:"",auto:"off",barPlacement:"bottom",challenge:"",codeChallenge:null,codeChallengeDisplay:"standard",credentials:null,debug:!1,disableAutoFocus:!1,display:"standard",floatingAnchor:"",floatingOffset:8,floatingPersist:!1,floatingPlacement:"auto",hideFooter:!1,hideLogo:!1,humanInteractionSignature:!0,language:"",mockError:!1,minDuration:500,overlayContent:"",name:"altcha",popoverPlacement:"auto",retryOnOutOfMemoryError:!0,setCookie:null,serverVerificationFields:!1,serverVerificationTimeZone:!1,test:!1,timeout:9e4,type:"checkbox",validationMessage:"",verifyFunction:null,verifyUrl:"",workers:u,...qe(s,"$altchaDefaults",n),...sn(R)})),L=mt(()=>`altcha-checkbox-${t.id||Math.floor(1e12*Math.random()).toString(16)}`),N=mt(()=>function(e){switch(e){case"checkbox":return ni;case"switch":return ui;default:return ii}}(sn(M).type)),D=mt(()=>sn(M).auto),V=mt(()=>sn(w)===di.VERIFYING),j=mt(()=>!sn(M).hideFooter),U=mt(()=>!sn(M).hideLogo&&"bar"!==sn(M).display),F=mt(()=>function(e,t){const n=Object.keys(e).map(e=>e.toLowerCase());let r=t.reduce((t,r)=>(r=r.toLowerCase(),t||(e[r]?r:null)||n.find(e=>r.split("-")[0]===e.split("-")[0])||null),null);e[r||""]||(r="en");return{language:r,strings:e[r]}}(qe(f,"$altchaI18nStore",n),[sn(M).language,document.documentElement.lang,...navigator.languages])),q=mt(()=>i.includes(sn(F).language)?"rtl":void 0),H=mt(()=>({...sn(F).strings})),G=mt(()=>sn(m)?.audio?.match(/^(https?:)?\//)?Q(sn(m).audio,sn(p),{language:sn(M).audioChallengeLanguage||sn(F).language}).toString():sn(m)?.audio),Y=mt(()=>sn(m)?.image?.match(/^(https?:)?\//)?Q(sn(m).image,sn(p)):sn(m)?.image);async function B(e,...t){let n;for(const r of sn(T))n=await r[e].call(r,...t);return n}async function J(e){await new Promise(t=>setTimeout(t,e))}async function Z(e=sn(M).challenge,t){const n=await B("onFetchChallenge",e);let r=null;if(void 0!==n)return n;if("string"==typeof e)if(e.startsWith("{")){ke("parsing JSON challenge");try{r=JSON.parse(e)}catch{throw new Error("Unable to parse JSON challenge.")}}else{ke("fetching challenge from",t?.method||"GET",e),xt(p,new URL(e,location.origin),!0);const n=await sn(M).fetch(e,{credentials:sn(M).credentials||void 0,...t});await be(n);const i=n.headers.get("x-altcha-config");i&&function(e){try{const t=JSON.parse(e);t&&"object"==typeof t&&_e({serverVerificationFields:t?.sentinel?.fields,serverVerificationTimeZone:t?.sentinel?.timeZone,verifyUrl:t.verifyurl,...t})}catch(e){ke("unable to configure from x-altcha-config header",e)}}(i);const o=await n.json();if(o&&"his"in o&&o.his){if(ke("requested HIS"),!v)throw new Error("Server requested HIS data but collector is disabled.");return Z(Q(o.his.url,sn(p)),{body:JSON.stringify({his:v.export()}),headers:{"content-type":"application/json"},method:"POST"})}o&&"hisResult"in o&&o.hisResult&&ke("HIS result",o.hisResult),r=o}else if(e&&"object"==typeof e)try{r=JSON.parse(JSON.stringify(e))}catch{throw new Error("Unable to parse JSON challenge.")}if(function(e){return"object"==typeof e&&"challenge"in e}(r)&&(r=function(e){const[t,n]=e.salt.split("?"),r={};if(n)try{Object.assign(r,Object.fromEntries(new URLSearchParams(n).entries()))}catch{}const i={codeChallenge:e.codeChallenge,parameters:{algorithm:e.algorithm,cost:1,data:r,expiresAt:r?.expires?parseInt(r.expires,10):void 0,keyLength:"SHA-512"===e.algorithm?64:"SHA-384"===e.algorithm?48:32,nonce:(o=(new TextEncoder).encode(e.salt),Array.from(new Uint8Array(o)).map(e=>e.toString(16).padStart(2,"0")).join("")),keyPrefix:e.challenge,salt:""},signature:e.signature};var o;return Object.defineProperties(i,{_originalSalt:{enumerable:!1,value:e.salt,writable:!1},_version:{enumerable:!1,value:1,writable:!1}}),i}(r)),!function(e){return!!e&&"object"==typeof e&&"parameters"in e&&!!e.parameters&&"object"==typeof e.parameters&&"algorithm"in e.parameters&&"nonce"in e.parameters&&"salt"in e.parameters&&"keyPrefix"in e.parameters}(r))throw new Error("Challenge validation failed.");return r}function W(){return document.getElementById(sn(L))}function z(){try{return Intl.DateTimeFormat().resolvedOptions().timeZone}catch{}}function Q(e,t,n){const r=new URL(e,t);if(r.search||(r.search=t.search),n)for(const e in n)void 0!==n[e]&&null!==n[e]&&r.searchParams.set(e,n[e]);return r.toString()}function ee(e){!sn(g)&&e.currentTarget.checked?(e.preventDefault(),e.currentTarget.checked=!1,sn(w)!==di.VERIFYING&&Ae()):e.currentTarget.checked||(e.preventDefault(),Ee())}function te(e){sn(w)===di.VERIFYING?e.currentTarget.setCustomValidity(sn(H).waitAlert):sn(M).validationMessage&&e.currentTarget.setCustomValidity(sn(M).validationMessage)}function ne(){ye(sn(M).display),Ee()}function re(e){"onfocus"===sn(D)&&sn(w)===di.UNVERIFIED&&Ae()}function ue(){ye(sn(M).display),Ee()}function ve(e){const t=e.target;"true"!==t?.getAttribute("data-code-challenge")&&"onsubmit"===sn(D)&&sn(w)===di.UNVERIFIED&&(e.preventDefault(),e.stopPropagation(),xt(S,e.submitter,!0),Oe(),Ae().then(e=>{e&&!sn(m)&&an().then(()=>{pe(sn(S))})}))}function pe(e){sn(k)&&"requestSubmit"in sn(k)?sn(k).requestSubmit(e):sn(k)?.reportValidity()&&(e?e.click():sn(k).submit())}function ye(e){switch(e){case"bar":case"floating":case"overlay":$e(),sn(D)&&"off"!==sn(D)||(sn(R).auto="onsubmit");break;case"standard":Oe()}sn(b)!==e&&xt(b,e,!0)}async function be(e){if(e.status>=400){if(e.headers.get("content-type")?.includes("/json")){let t;try{t=await e.json()}catch{}if(t&&"error"in t)throw new Error(`Server responded with ${e.status} - ${t.error}`)}throw new Error(`Server responded with ${e.status}.`)}const t=e.headers.get("content-type");if(!t||!t.includes("/json"))throw new Error(`Server responded with invalid content-type. Expected application/json, received ${t}.`)}async function we(e){if(!sn(O))return void Ie(di.ERROR,"Cannot verify code challenge without PoW payload.");Ie(di.VERIFYING);let t=null;if(sn(M).verifyUrl)t=await async function(e,t){const n=await B("onRequestServerVerification",e,t);if(void 0!==n)return n;if(ke("requesting server verification from",sn(M).verifyUrl),!sn(M).verifyUrl)throw new Error("Parameter verifyUrl must be set for server verification.");const r=await sn(M).fetch(Q(sn(M).verifyUrl,sn(p)),{body:JSON.stringify({code:t,fields:sn(M).serverVerificationFields?[...sn(k)?.querySelectorAll('input[type="text"]:not([data-no-spamfilter]), textarea:not([data-no-spamfilter])')||[]].reduce((e,t)=>{const n=t.name,r=t.value;return n&&r&&(e[n]=/\n/.test(r)?r.replace(new RegExp("(?{pe(sn(S))})):Ie(di.ERROR,t?.reason||"Verification failed."),sn(M).disableAutoFocus||W()?.focus()}function _e(e){Object.assign(sn(R),{...Object.fromEntries(Object.entries(e).filter(([e,t])=>void 0!==t))})}function $e(){xt(P,!1)}function ke(...e){(sn(M).debug||e.some(e=>e instanceof Error))&&console[e[0]instanceof Error?"error":"log"]("ALTCHA",`[name=${sn(M).name}]`,...e)}function Ee(e=di.UNVERIFIED,t=null){xt(g,!1),xt(C,t,!0),xt(O,null),sn(y)&&sn(y).abort(),sn(I)&&(clearTimeout(sn(I)),xt(I,null)),Ie(e)}function Ie(e,t=null){xt(w,e,!0),xt(C,t,!0),h("statechange",{payload:sn(O),state:sn(w)})}function Oe(){xt(P,!0),an().then(()=>{Te()})}function Te(){if("floating"===sn(M).display)return function(e=20){if(!sn(E))return;const t=sn(M).floatingPlacement;if(!sn($)&&(xt($,(sn(M).floatingAnchor instanceof HTMLElement?sn(M).floatingAnchor:sn(M).floatingAnchor?document.querySelector(sn(M).floatingAnchor):sn(k)?.querySelector('input[type="submit"], button[type="submit"], button:not([type="button"]):not([type="reset"])'))||sn(k),!0),!sn($)))return void ke("unable to find floating anchor element");const n=parseInt(sn(M).floatingOffset,10)||12,r=sn($).getBoundingClientRect(),i=sn(E).getBoundingClientRect(),o=document.documentElement.clientHeight,a=document.documentElement.clientWidth,s=t&&"auto"!==t?"top"===t:r.bottom+i.height+n+e>o,l=Math.max(e,Math.min(a-e-i.width,r.left+r.width/2-i.width/2));if(sn(E).style.setProperty("--altcha-floating-left",`${l}px`),sn(E).style.setProperty("--altcha-floating-top",s?r.top-(i.height+n)+"px":`${r.bottom+n}px`),sn(E).setAttribute("data-floating-position",s?"top":"bottom"),sn(_)){const e=sn(_).getBoundingClientRect();sn(_).style.left=r.left-l+r.width/2-e.width/2+"px"}}();xt(A,sn(A)+1)}async function Ae(e={}){const{concurrency:t=Math.max(1,sn(M).workers),controller:n=new AbortController,minDuration:r=sn(M).minDuration}=e,i=performance.now();let a=null,s=null,l=!1;const c=await B("onVerify",e);if(void 0!==c)return c;Ee(di.VERIFYING),xt(y,n,!0);try{if(!o)throw new Error("Secure context (HTTPS) required.");if(sn(M).mockError)throw new Error("Mock error.");if(sn(M).test)return ke("running test mode with null challenge"),await J(Math.max(0,r-(performance.now()-i))),sn(y)?.signal.aborted?(Ee(),null):(xt(O,btoa(JSON.stringify({challenge:null,solution:null,test:!0})),!0),ke("verified"),Ie(di.VERIFIED),h("verified",{payload:sn(O)}),{payload:sn(O)});if(a=await Z(),!a)throw new Error("Failed to fetch challenge.");ke("challenge",a),"configuration"in a&&(ke("re-configuring from challenge",a.configuration),_e(a.configuration)),a.parameters.expiresAt&&function(e){sn(I)&&clearTimeout(sn(I));const t=()=>{sn(w)!==di.UNVERIFIED?(xt(g,!1),Ie(di.EXPIRED)):Ee(),h("expired")},n=1e3*e-Date.now();n>=1?xt(I,setTimeout(t,n),!0):t()}(a.parameters.expiresAt),l="_version"in a&&1===a._version;const e=globalThis.$altcha.algorithms.get(a.parameters.algorithm);if(!e)throw new Error(`Unsupported algorithm ${a.parameters.algorithm}.`);if(s=await xi({challenge:a,concurrency:t,controller:n,createWorker:e,counterMode:l?"string":"uint32",onOutOfMemory:e=>{if(ke("out of memory error received"),h("outofmemory"),sn(M).retryOnOutOfMemoryError&&e>1){const t=Math.floor(e/2);return ke(`retrying with ${t} workers...`),t}},timeout:sn(M).timeout}),sn(y)?.signal.aborted)return Ee(),null;if(!s)throw new Error("Failed to find solution.");ke("solution",s),await J(Math.max(0,r-(performance.now()-i))),xt(m,a.codeChallenge||sn(M).codeChallenge||null,!0),xt(O,l?btoa(JSON.stringify(function(e,t){return{algorithm:e.parameters.algorithm,challenge:e.parameters.keyPrefix,number:t.counter,salt:"_originalSalt"in e?e._originalSalt:e.parameters.nonce,signature:e.signature,took:t.time||0}}(a,s))):btoa(JSON.stringify({challenge:{parameters:a.parameters,signature:a.signature},solution:s})),!0),sn(m)?(ke("requesting code verification"),Ie(di.CODE),h("codechallenge",{codeChallenge:sn(m)})):sn(M).verifyUrl?await we():(ke("verified"),Ie(di.VERIFIED),h("verified",{payload:sn(O)}))}catch(e){return ke("verification failed",e),Ie(di.ERROR,String(e)),null}finally{xt(y,null)}return{challenge:a,payload:sn(O),solution:s}}pn(()=>{_e({auto:t.auto,challenge:t.challenge,display:t.display,language:t.language,name:t.name,type:t.type,workers:t.workers})}),pn(()=>{if(t.configuration)try{_e(JSON.parse(t.configuration))}catch{ke("unable to parse the `configuration` attribute (JSON expected)")}}),pn(()=>{sn(b)!==sn(M).display&&ye(sn(M).display)}),pn(()=>{sn(g)&&sn(w)===di.VERIFYING&&xt(g,!1)}),pn(()=>{sn(g)||sn(w)!==di.VERIFIED||xt(g,!0)}),pn(()=>{if(!sn(g)){const e=W();e&&e.checked&&(e.checked=!1)}}),pn(()=>{sn(w)===di.VERIFIED&&W()?.setCustomValidity("")}),pn(()=>{if("onload"===sn(D)){const e=setTimeout(()=>{Ae()},1);return()=>{e&&clearTimeout(e)}}}),pn(()=>{sn(C)&&ke("error:",sn(C))}),pn(()=>{sn(O)&&sn(M).setCookie&&function(e,t={}){const{domain:n,name:r=sn(M).name,maxAge:i,path:o,sameSite:a,secure:s}=t;let l=`${encodeURIComponent(r)}=${encodeURIComponent(e)}`;n&&(l+=`; Domain=${n}`);null!=i&&(l+=`; Max-Age=${i}`);o&&(l+=`; Path=${o}`);a&&(l+=`; SameSite=${a}`);s&&(l+="; Secure");document.cookie=l}(sn(O),sn(M).setCookie)}),dr(()=>(ke("mounted","3.2.1"),d&&globalThis.$altcha.instances.add(d),xt(k,sn(E)?.closest("form"),!0),sn(k)?.addEventListener("reset",ue),sn(k)?.addEventListener("submit",ve,{capture:!0}),sn(k)?.addEventListener("focusin",re),function(){xt(T,[...globalThis.$altcha.plugins].map(e=>new e(d)),!0),ke("activating plugins",sn(T).map(e=>e.constructor.name));for(const e of sn(T))e.activate()}(),sn(M).humanInteractionSignature&&(ke("human interaction signature enabled"),v=new Ii),h("load"),o||ke("secure context (HTTPS) required"),()=>{!function(){for(const e of sn(T))e.destroy()}(),d&&globalThis.$altcha.instances.delete(d),sn(I)&&clearTimeout(sn(I)),sn(k)?.removeEventListener("reset",ue),sn(k)?.removeEventListener("submit",ve,{capture:!0}),sn(k)?.removeEventListener("focusin",re),v?.destroy()}));var Re={configure:_e,getConfiguration:function(){return{...sn(M)}},getState:function(){return sn(w)},hide:$e,log:ke,reset:Ee,setState:Ie,show:Oe,updateUI:Te,verify:Ae},Pe=Vi();Vn("scroll",me,function(){Te()}),Vn("click",me,function(e){const t=e.target;"floating"!==sn(M).display||!t||d?.contains(t)||t.hasAttribute("data-backdrop")||t.closest("[data-popover]")||sn(w)===di.VERIFIED||sn(M).floatingPersist||$e()}),Vn("pageshow",ge,function(e){e.persisted&&(ye(sn(M).display),Ee())}),Vn("resize",ge,function(){Te()});var Me=Ce(Pe),Le=e=>{Xn(e,Oi())};hr(Me,e=>{"overlay"===sn(M).display&&sn(P)&&e(Le)});var Ne=xe(Me,2),De=Se(Ne),Ve=e=>{var t=Ai(),n=Ce(t),r=xe(n,2),i=e=>{var t=Ti();pr(t,()=>document.querySelector(sn(M).overlayContent)?.innerHTML,!0),ce(t),Xn(e,t)};hr(r,e=>{sn(M).overlayContent&&e(i)}),Vn("click",n,ne,!0),Xn(e,t)};hr(De,e=>{"overlay"===sn(M).display&&sn(P)&&e(Ve)});var je=xe(De,2),Ue=Se(je),He=Se(Ue),Ge=Se(He);{let e=mt(()=>"standard"===sn(M).display&&"onsubmit"!==sn(D)||sn(w)===di.VERIFYING);!function(e,t,n){var r;oe&&(r=ie,le());var i=new fr(e);wn(()=>{var e=t()??null;if(oe&&"["===de(r)!=(null!==e)){var o=fe();return se(o),i.anchor=o,ae(!1),i.ensure(e,e&&(t=>n(t,e))),void ae(!0)}i.ensure(e,e&&(t=>n(t,e)))},x)}(Ge,()=>sn(N),(t,n)=>{n(t,{get id(){return sn(L)},name:"",get required(){return sn(e)},get loading(){return sn(V)},get checked(){return sn(g)},onchange:ee,oninvalid:te})})}var Ye=xe(Ge,2),Be=Se(Ye),Je=e=>{var t=Wn();bn(()=>or(t,sn(H).verificationRequired)),Xn(e,t)},Ze=e=>{var t=Wn();bn(()=>or(t,sn(H).verifying)),Xn(e,t)},We=e=>{var t=Wn();bn(()=>or(t,sn(H).verified)),Xn(e,t)},ze=e=>{var t=Wn();bn(()=>or(t,sn(H).label)),Xn(e,t)};hr(Be,e=>{sn(w)===di.CODE&&sn(m)?e(Je):sn(w)===di.VERIFYING?e(Ze,1):sn(w)===di.VERIFIED?e(We,2):e(ze,-1)}),ce(Ye),ce(He);var Xe=xe(He,2),Ke=e=>{ai(e,{get strings(){return sn(H)}})};hr(Xe,e=>{sn(U)&&e(Ke)}),ce(Ue);var Qe=xe(Ue,2),et=e=>{{let t=mt(()=>"bar"===sn(M).display&&sn(U));li(e,{get logo(){return sn(t)},get strings(){return sn(H)}})}};hr(Qe,e=>{sn(j)&&e(et)});var tt=xe(Qe,2),nt=e=>{var t=Ri();Jr(t,e=>xt(_,e),()=>sn(_)),Xn(e,t)};hr(tt,e=>{"floating"===sn(M).display&&e(nt)});var rt=xe(tt,2),it=e=>{var t=Pi();Nr(t),bn(()=>{var e,n,r;Vr(t,"name",sn(M).name),e=t,n=sn(O),(r=Ur(e)).value!==(r.value=n??void 0)&&(e.value!==n||0===n&&e.nodeName===Lr)&&(e.value=n??"")}),Xn(e,t)};hr(rt,e=>{sn(M).setCookie||e(it)}),ce(je);var ot=xe(je,2),at=e=>{Ci(e,{get anchor(){return sn(E)},onClickOutside:()=>{o&&Ee()},get placement(){return sn(M).popoverPlacement},role:"alert",variant:"error",get dir(){return sn(q)},get updateUISignal(){return sn(A)},children:(e,t)=>{var n=zn(),r=Ce(n),i=e=>{Xn(e,Mi())},a=e=>{var t=Li(),n=Se(t,!0);ce(t),bn(()=>or(n,sn(H).expired)),Xn(e,t)},s=e=>{var t=Ni(),n=Se(t,!0);ce(t),bn(()=>{Vr(t,"title",sn(C)),or(n,sn(H).error)}),Xn(e,t)};hr(r,e=>{sn(C)||o?sn(C)||sn(w)!==di.EXPIRED?e(s,-1):e(a,1):e(i)}),Xn(e,n)},$$slots:{default:!0}})},st=e=>{var t=zn();!function(e,t,n){oe&&le();var r=new fr(e);wn(()=>{var e=t();e!=e&&(e=vr),r.ensure(e,n)})}(Ce(t),()=>sn(m),e=>{{let t=mt(()=>"standard"!==sn(M).codeChallengeDisplay);Ci(e,{get anchor(){return sn(E)},get backdrop(){return sn(t)},get display(){return sn(M).codeChallengeDisplay},onClose:()=>{Ee()},get placement(){return sn(M).popoverPlacement},role:"dialog",get"aria-label"(){return sn(H).verificationRequired},get dir(){return sn(q)},get updateUISignal(){return sn(A)},children:(e,t)=>{var n=Di(),r=Ce(n);_i(r,{get audioUrl(){return sn(G)},get imageUrl(){return sn(Y)},onCancel:()=>Ee(),onReload:()=>Ae(),onSubmit:e=>we(e),get codeChallenge(){return sn(m)},get config(){return sn(M)},get strings(){return sn(H)}});var i=xe(r,2),o=e=>{li(e,{get logo(){return sn(U)},get strings(){return sn(H)}})};hr(i,e=>{sn(j)&&"standard"!==sn(M).codeChallengeDisplay&&e(o)}),Xn(e,n)},$$slots:{default:!0}})}}),Xn(e,t)};hr(ot,e=>{sn(C)||sn(w)===di.EXPIRED||!o?e(at):sn(m)&&sn(w)===di.CODE&&e(st,1)}),ce(Ne),Jr(Ne,e=>xt(E,e),()=>sn(E)),bn(e=>{Vr(Ne,"data-state",sn(w)),Vr(Ne,"data-display",sn(M).display||void 0),Vr(Ne,"data-placement",e),Vr(Ne,"data-visible",sn(P)||void 0),Vr(Ne,"dir",sn(q)),Vr(Ye,"for",sn(L)),Ne.dir=Ne.dir},[()=>function(e){switch(e){case"bar":return sn(M).barPlacement||"bottom";case"floating":return sn(M).floatingPlacement||"auto";default:return}}(sn(M).display)]),Xn(e,Pe);var lt=K(Re);return r(),lt},{auto:{type:"String"},challenge:{type:"String"},configuration:{type:"String"},display:{type:"String"},language:{type:"String"},name:{type:"String"},theme:{type:"String"},type:{type:"String"},workers:{type:"Number"}},[],["configure","getConfiguration","getState","hide","log","reset","setState","show","updateUI","verify"])); diff --git a/frontend/node_modules/altcha/dist/external/altcha.umd.cjs b/frontend/node_modules/altcha/dist/external/altcha.umd.cjs new file mode 100644 index 0000000..6b8b8b7 --- /dev/null +++ b/frontend/node_modules/altcha/dist/external/altcha.umd.cjs @@ -0,0 +1,7358 @@ +(function(factory) { + typeof define === "function" && define.amd ? define(factory) : factory(); +})((function() { + "use strict"; + var __vite_style__ = document.createElement("style"); + __vite_style__.textContent = ':root {\n --altcha-border-color: var(--altcha-color-neutral);\n --altcha-border-width: 1px;\n --altcha-border-radius: 6px;\n --altcha-color-base: light-dark(oklch(100% 0.00011 271.152), oklch(20.904% 0.00002 271.152));\n --altcha-color-base-content: light-dark(\n oklch(20.904% 0.00002 271.152),\n oklch(100% 0.00011 271.152)\n );\n --altcha-color-error: oklch(51.284% 0.20527 28.678);\n --altcha-color-error-content: oklch(100% 0.00011 271.152);\n --altcha-color-neutral: light-dark(oklch(83.591% 0.0001 271.152), oklch(46.04% 0.00005 271.152));\n --altcha-color-neutral-content: light-dark(\n oklch(46.76% 0.00005 271.152),\n oklch(100% 0.00011 271.152)\n );\n --altcha-color-primary: oklch(40.279% 0.2449 268.131);\n --altcha-color-primary-content: oklch(100% 0.00011 271.152);\n --altcha-color-success: oklch(55.748% 0.18968 142.511);\n --altcha-color-success-content: oklch(100% 0.00011 271.152);\n --altcha-checkbox-border-color: light-dark(\n oklch(66.494% 0.00233 15.434),\n oklch(51.028% 0.00006 271.152)\n );\n --altcha-checkbox-border-radius: 5px;\n --altcha-checkbox-border-width: var(--altcha-border-width);\n --altcha-checkbox-outline: 2px solid var(--altcha-checkbox-outline-color);\n --altcha-checkbox-outline-color: -webkit-focus-ring-color;\n --altcha-checkbox-outline-offset: 2px;\n --altcha-checkbox-size: 22px;\n --altcha-checkbox-transition-duration: var(--altcha-transition-duration);\n --altcha-input-background-color: var(--altcha-color-base);\n --altcha-input-border-radius: 3px;\n --altcha-input-border-width: 1px;\n --altcha-input-color: var(--altcha-color-base-content);\n --altcha-max-width: 320px;\n --altcha-padding: 0.75rem;\n --altcha-popover-arrow-size: 6px;\n --altcha-popover-color: var(--altcha-border-color);\n --altcha-shadow: drop-shadow(3px 3px 6px oklch(0% 0 0 / 0.2));\n --altcha-spinner-color: var(--altcha-color-base-content);\n --altcha-switch-background-color: var(--altcha-color-neutral);\n --altcha-switch-border-radius: calc(infinity * 1px);\n --altcha-switch-height: var(--altcha-checkbox-size);\n --altcha-switch-padding: 0.25rem;\n --altcha-switch-width: calc(var(--altcha-checkbox-size) * 1.75);\n --altcha-switch-toggle-border-radius: 100%;\n --altcha-switch-toggle-color: var(--altcha-color-neutral-content);\n --altcha-switch-toggle-size: calc(\n var(--altcha-switch-height) - calc(var(--altcha-switch-padding) * 2)\n );\n --altcha-transition-duration: 0.6s;\n --altcha-z-index: 99999999;\n --altcha-z-index-popover: 999999999;\n}\n\n@supports (-moz-appearance: none) {\n :root {\n --altcha-checkbox-outline-color: var(--altcha-color-primary);\n }\n}\n.altcha {\n all: revert-layer;\n display: none;\n font-family: inherit;\n font-size: inherit;\n position: relative;\n}\n.altcha[data-visible] {\n display: block;\n}\n.altcha-popover, .altcha-popover * {\n all: revert-layer;\n box-sizing: border-box;\n font-family: inherit;\n font-size: inherit;\n line-height: 1.25;\n}\n.altcha * {\n all: revert-layer;\n box-sizing: border-box;\n font-family: inherit;\n font-size: inherit;\n line-height: 1.25;\n}\n.altcha a, .altcha-popover a {\n color: currentColor;\n text-decoration: none;\n}\n.altcha a:hover, .altcha-popover a:hover {\n color: currentColor;\n}\n.altcha-main {\n align-items: start;\n background-color: var(--altcha-color-base);\n border: var(--altcha-border-width, 1px) solid var(--altcha-border-color);\n border-radius: var(--altcha-border-radius, 0);\n color: var(--altcha-color-base-content);\n display: flex;\n flex-direction: column;\n gap: 0.5rem;\n justify-content: space-between;\n padding: var(--altcha-padding);\n max-width: var(--altcha-max-width, 100%);\n}\n.altcha-main > * {\n display: flex;\n width: 100%;\n}\n.altcha-main > *:first-child {\n flex-grow: 1;\n}\n.altcha-checkbox-wrap {\n align-items: center;\n display: flex;\n flex-direction: row;\n flex-grow: 1;\n gap: 0.5rem;\n}\n.altcha-checkbox-wrap > * {\n display: flex;\n}\n.altcha-logo {\n opacity: 0.7;\n}\n.altcha-footer {\n align-items: center;\n display: flex;\n flex-grow: 1;\n gap: 0.5rem;\n justify-content: flex-end;\n font-size: 0.7rem;\n opacity: 0.7;\n}\n.altcha-footer p {\n margin: 0;\n padding: 0;\n}\n.altcha-error {\n font-size: 0.85rem;\n}\n.altcha-button {\n align-items: center;\n background: var(--altcha-color-primary);\n border: var(--altcha-input-border-width) solid var(--altcha-color-primary);\n border-radius: var(--altcha-input-border-radius);\n color: var(--altcha-color-primary-content);\n cursor: pointer;\n display: flex;\n font-size: 0.9rem;\n gap: 0.5rem;\n padding: 0.35rem;\n}\n.altcha-button:focus {\n border-color: var(--altcha-color-primary);\n outline: var(--altcha-checkbox-outline);\n outline-offset: var(--altcha-checkbox-outline-offset);\n}\n.altcha-button > .altcha-spinner, .altcha-button > svg {\n height: 20px;\n width: 20px;\n}\n.altcha-button-secondary {\n background: transparent;\n border-color: var(--altcha-color-neutral);\n color: var(--altcha-color-neutral-content);\n}\n.altcha-input {\n background: var(--altcha-input-background-color);\n border: var(--altcha-input-border-width) solid var(--altcha-color-neutral);\n border-radius: var(--altcha-input-border-radius);\n color: var(--altcha-input-color);\n flex-grow: 1;\n font-size: 1rem;\n min-width: 0;\n padding: 0.25rem;\n width: auto;\n}\n.altcha-input:focus {\n border-color: var(--altcha-color-primary);\n outline: var(--altcha-checkbox-outline);\n outline-offset: var(--altcha-checkbox-outline-offset);\n}\n.altcha-spinner {\n animation: altcha-rotate 0.6s linear infinite;\n border-radius: 100%;\n border: var(--altcha-checkbox-border-width) solid var(--altcha-spinner-color);\n border-bottom-color: transparent;\n border-right-color: transparent;\n opacity: 0.7;\n}\n.altcha-popover {\n background-color: var(--altcha-color-base);\n border: var(--altcha-border-width) solid var(--altcha-border-color);\n border-radius: var(--altcha-border-radius);\n color: var(--altcha-color-base-content);\n filter: var(--altcha-shadow);\n position: absolute;\n left: calc(var(--altcha-padding) / 2);\n max-width: calc(var(--altcha-max-width) - var(--altcha-padding));\n top: calc(var(--altcha-padding) + var(--altcha-checkbox-size) + var(--altcha-popover-arrow-size));\n z-index: var(--altcha-z-index-popover);\n}\n.altcha-popover-arrow {\n border: var(--altcha-popover-arrow-size) solid transparent;\n border-bottom-color: var(--altcha-popover-color);\n content: "";\n height: 0;\n left: calc(var(--altcha-checkbox-size) / 2);\n position: absolute;\n top: calc(var(--altcha-popover-arrow-size) * -2);\n width: 0;\n}\n.altcha-popover-content {\n max-height: 100dvh;\n overflow: auto;\n padding: var(--altcha-padding);\n}\n.altcha-popover[data-top=true][data-display=standard] {\n bottom: calc(100% - (var(--altcha-padding) - var(--altcha-popover-arrow-size)));\n top: auto;\n}\n.altcha-popover[data-top=true][data-display=standard] .altcha-popover-arrow {\n border-bottom-color: transparent;\n border-top-color: var(--altcha-popover-color);\n bottom: calc(var(--altcha-popover-arrow-size) * -2);\n top: auto;\n}\n.altcha-popover[data-variant=error] {\n --altcha-popover-color: var(--altcha-color-error);\n background-color: var(--altcha-color-error);\n border-color: var(--altcha-color-error);\n color: var(--altcha-color-error-content);\n}\n.altcha-popover[data-variant=error] .altcha-popover-content {\n padding: calc(var(--altcha-padding) / 1.5) var(--altcha-padding);\n}\n.altcha-popover[data-display=overlay] {\n animation: altcha-overlay-slidein 0.5s forwards;\n left: 50%;\n position: fixed;\n top: 45%;\n transform: translate(-50%, -50%);\n width: var(--altcha-max-width);\n z-index: var(--altcha-z-index);\n}\n.altcha-popover[data-display=bottomsheet] {\n animation: altcha-bottomsheet-slideup 0.5s forwards;\n border-bottom-left-radius: 0;\n border-bottom-right-radius: 0;\n border-bottom: 0;\n bottom: -100%;\n left: 50%;\n position: fixed;\n top: auto;\n transform: translate(-50%, 0);\n width: var(--altcha-max-width);\n z-index: var(--altcha-z-index);\n}\n.altcha-popover[data-display=bottomsheet] .altcha-popover-content {\n padding-bottom: calc(var(--altcha-padding) * 2);\n}\n.altcha-popover-backdrop {\n background: var(--altcha-color-base-content);\n bottom: 0;\n left: 0;\n opacity: 0.1;\n position: fixed;\n right: 0;\n top: 0;\n transition: opacity 0.5s;\n z-index: var(--altcha-z-index);\n}\n.altcha-popover-close {\n color: var(--altcha-color-base-content);\n cursor: pointer;\n display: inline-block;\n font-size: 1rem;\n height: 1.25rem;\n line-height: 0.95;\n position: absolute;\n right: 0;\n text-align: center;\n text-shadow: 0 0 1px var(--altcha-color-base);\n top: -1.5rem;\n width: 1.25rem;\n z-index: var(--altcha-z-index);\n}\n[dir=rtl] .altcha-popover {\n left: auto;\n right: calc(var(--altcha-padding) / 2);\n}\n[dir=rtl] .altcha-popover-arrow {\n left: auto;\n right: calc(var(--altcha-checkbox-size) / 2);\n}\n[dir=rtl] .altcha-popover-close {\n left: 0;\n right: auto;\n}\n.altcha-popover[data-display=bottomsheet] .altcha-footer, .altcha-popover[data-display=overlay] .altcha-footer {\n align-items: center;\n justify-content: center;\n padding-top: 1rem;\n gap: 0.5rem;\n}\n.altcha-popover[data-display=bottomsheet] .altcha-footer svg, .altcha-popover[data-display=overlay] .altcha-footer svg {\n height: 18px;\n width: 18px;\n vertical-align: middle;\n}\n.altcha-code-challenge > form {\n display: flex;\n flex-direction: column;\n gap: 0.5rem;\n}\n.altcha-code-challenge-title {\n font-weight: 600;\n}\n.altcha-code-challenge-text {\n font-size: 0.85rem;\n}\n.altcha-code-challenge-image {\n background: white;\n border: var(--altcha-input-border-width) solid var(--altcha-color-neutral);\n border-radius: var(--altcha-input-border-radius);\n object-fit: contain;\n height: 50px;\n}\n.altcha-code-challenge-row {\n display: flex;\n gap: 0.5rem;\n}\n.altcha-code-challenge-buttons {\n align-items: center;\n display: flex;\n flex-direction: column;\n gap: 0.5rem;\n margin-top: var(--altcha-padding);\n justify-content: space-between;\n}\n.altcha-code-challenge-buttons button {\n justify-content: center;\n width: 100%;\n}\n.altcha-checkbox {\n cursor: pointer;\n height: var(--altcha-checkbox-size);\n position: relative;\n width: var(--altcha-checkbox-size);\n}\n.altcha-checkbox input {\n appearance: none;\n background: var(--altcha-input-background-color);\n border: var(--altcha-checkbox-border-width, 2px) solid var(--altcha-checkbox-border-color);\n border-radius: var(--altcha-checkbox-border-radius);\n cursor: pointer;\n height: var(--altcha-checkbox-size);\n left: 0;\n margin: 0;\n padding: 0;\n position: absolute;\n top: 0;\n width: var(--altcha-checkbox-size);\n}\n@supports (hanging-punctuation: first) and (font: -apple-system-body) and (-webkit-appearance: none) {\n .altcha-checkbox input {\n /* Safari-only: fixes focus outline */\n }\n .altcha-checkbox input:focus {\n outline-width: 2px;\n outline-style: solid;\n }\n}\n.altcha-checkbox input:before {\n border-radius: var(--altcha-checkbox-border-radius);\n content: "";\n width: 100%;\n height: 100%;\n background: var(--altcha-color-neutral);\n display: block;\n transform: scale(0);\n}\n.altcha-checkbox input:checked {\n background-color: var(--altcha-color-success);\n border-color: var(--altcha-color-success);\n}\n.altcha-checkbox input:checked::before {\n background-color: var(--altcha-color-success);\n opacity: 0;\n transform: scale(2.2);\n transition: all var(--altcha-checkbox-transition-duration) ease;\n transition-delay: 0.1s;\n}\n.altcha-checkbox svg {\n --altcha-radio-svg-size: calc(var(--altcha-checkbox-size) * 0.5);\n --altcha-radio-svg-offset: calc(var(--altcha-checkbox-size) * 0.25);\n fill: none;\n left: var(--altcha-radio-svg-offset);\n height: var(--altcha-radio-svg-size);\n opacity: 0;\n position: absolute;\n stroke: currentColor;\n stroke-width: 2;\n stroke-linecap: round;\n stroke-linejoin: round;\n stroke-dasharray: 16px;\n stroke-dashoffset: 16px;\n top: var(--altcha-radio-svg-offset);\n transform: translate3d(0, 0, 0);\n width: var(--altcha-radio-svg-size);\n}\n.altcha-checkbox input:checked + svg {\n color: var(--altcha-color-success-content);\n opacity: 1;\n stroke-dashoffset: 0;\n transition: all var(--altcha-checkbox-transition-duration) ease;\n transition-delay: 0.1s;\n}\n.altcha-checkbox-spinner {\n display: none;\n left: 0;\n height: var(--altcha-checkbox-size);\n position: absolute;\n top: 0;\n width: var(--altcha-checkbox-size);\n}\n.altcha-checkbox[data-loading=true] input {\n appearance: none;\n opacity: 0;\n pointer-events: none;\n}\n.altcha-checkbox[data-loading=true] .altcha-checkbox-spinner {\n display: block;\n}\n.altcha-checkbox-native {\n height: var(--altcha-checkbox-size);\n position: relative;\n width: var(--altcha-checkbox-size);\n}\n.altcha-checkbox-native input {\n height: var(--altcha-checkbox-size);\n margin: 0;\n width: var(--altcha-checkbox-size);\n}\n.altcha-checkbox-native-spinner {\n display: none;\n left: 0;\n height: var(--altcha-checkbox-size);\n position: absolute;\n top: 0;\n width: var(--altcha-checkbox-size);\n}\n.altcha-checkbox-native[data-loading=true] input {\n appearance: none;\n opacity: 0;\n pointer-events: none;\n}\n.altcha-checkbox-native[data-loading=true] .altcha-checkbox-native-spinner {\n display: block;\n}\n.altcha-switch {\n align-items: center;\n border-radius: var(--altcha-switch-border-radius);\n background-color: var(--altcha-switch-background-color);\n display: flex;\n height: var(--altcha-switch-height);\n padding: var(--altcha-switch-padding);\n position: relative;\n width: var(--altcha-switch-width);\n}\n.altcha-switch:focus-within {\n outline: var(--altcha-checkbox-outline);\n outline-offset: var(--altcha-checkbox-outline-offset);\n}\n.altcha-switch input {\n appearance: none;\n cursor: pointer;\n height: 100%;\n left: 0;\n opacity: 0;\n position: absolute;\n top: 0;\n width: 100%;\n}\n.altcha-switch-toggle {\n align-items: center;\n background-color: var(--altcha-switch-toggle-color);\n border-radius: var(--altcha-switch-toggle-border-radius);\n cursor: pointer;\n display: flex;\n height: var(--altcha-switch-toggle-size);\n justify-content: center;\n left: var(--altcha-switch-padding);\n position: absolute;\n transition: width 150ms ease-out, left 150ms ease-out;\n width: var(--altcha-switch-toggle-size);\n}\n.altcha-switch-spinner {\n display: none;\n height: var(--altcha-switch-toggle-size);\n width: var(--altcha-switch-toggle-size);\n}\n.altcha-switch[data-loading=true] {\n pointer-events: none;\n}\n.altcha-switch[data-loading=true] .altcha-switch-spinner {\n display: block;\n}\n.altcha-switch[data-loading=true] .altcha-switch-toggle {\n background-color: transparent;\n left: calc(50% - var(--altcha-switch-toggle-size) / 2);\n}\n[data-state=verified] .altcha-switch {\n --altcha-switch-background-color: var(--altcha-color-success);\n}\n[data-state=verified] .altcha-switch-toggle {\n background-color: var(--altcha-color-success-content);\n left: calc(100% - var(--altcha-switch-height) + var(--altcha-switch-padding));\n}\n[dir=rtl] .altcha-switch-toggle {\n left: calc(100% - var(--altcha-switch-height) + var(--altcha-switch-padding));\n}\n[dir=rtl][data-state=verified] .altcha-switch-toggle {\n left: var(--altcha-switch-padding);\n}\n.altcha-floating-arrow {\n border: 6px solid transparent;\n border-bottom-color: var(--altcha-border-color);\n content: "";\n height: 0;\n left: 12px;\n position: absolute;\n top: -12px;\n width: 0;\n}\n.altcha-overlay-backdrop {\n bottom: 0;\n left: 0;\n position: fixed;\n right: 0;\n top: 0;\n transition: opacity var(--altcha-transition-duration);\n z-index: var(--altcha-z-index);\n}\n.altcha-overlay-close {\n display: inline-block;\n color: currentColor;\n cursor: pointer;\n font-size: 1rem;\n height: 1rem;\n line-height: 0.85;\n position: absolute;\n right: 0;\n text-align: center;\n text-shadow: 0 0 1px var(--altcha-color-base);\n top: -1.5rem;\n width: 1rem;\n z-index: var(--altcha-z-index);\n}\n.altcha[data-display=overlay] {\n animation: altcha-overlay-slidein var(--altcha-transition-duration) forwards;\n filter: var(--altcha-shadow);\n left: 50%;\n opacity: 0;\n position: fixed;\n top: 45%;\n transform: translate(-50%, -50%);\n z-index: var(--altcha-z-index);\n}\n.altcha[data-display=overlay] .altcha-main {\n width: var(--altcha-max-width);\n}\n.altcha[data-display=floating] {\n display: none;\n filter: var(--altcha-shadow);\n left: var(--altcha-floating-left, -100%);\n position: fixed;\n top: var(--altcha-floating-top, -100%);\n z-index: var(--altcha-z-index);\n}\n.altcha[data-display=floating] .altcha-main {\n width: var(--altcha-max-width);\n}\n.altcha[data-display=floating][data-floating-position=top] .altcha-floating-arrow {\n border-bottom-color: transparent;\n border-top-color: var(--altcha-border-color);\n bottom: -12px;\n top: auto;\n}\n.altcha[data-display=floating][data-visible] {\n display: flex;\n}\n.altcha[data-display=bar] {\n bottom: -100%;\n filter: var(--altcha-shadow);\n left: 0;\n position: fixed;\n right: 0;\n transition: bottom var(--altcha-transition-duration), top var(--altcha-transition-duration);\n z-index: var(--altcha-z-index);\n}\n.altcha[data-display=bar] .altcha-main {\n align-items: center;\n border-radius: 0;\n border-width: var(--altcha-border-width) 0 0 0;\n flex-direction: row;\n max-width: 100% !important;\n}\n.altcha[data-display=bar] .altcha-main > * {\n width: auto;\n}\n.altcha[data-display=bar][data-placement=top] {\n bottom: auto;\n top: -100%;\n}\n.altcha[data-display=bar][data-placement=top] .altcha-main {\n border-width: 0 0 var(--altcha-border-width) 0;\n}\n.altcha[data-display=bar][data-placement=bottom]:not([data-state=unverified]) {\n bottom: 0;\n}\n.altcha[data-display=bar][data-placement=top]:not([data-state=unverified]) {\n top: 0;\n}\n.altcha[data-display=invisible] {\n display: none;\n}\n\n@keyframes altcha-rotate {\n 0% {\n transform: rotate(0deg);\n }\n 100% {\n transform: rotate(360deg);\n }\n}\n@keyframes altcha-bottomsheet-slideup {\n 100% {\n bottom: 0;\n }\n}\n@keyframes altcha-overlay-slidein {\n 100% {\n opacity: 1;\n top: 50%;\n }\n}/*$vite$:1*/'; + document.head.appendChild(__vite_style__); + const DEV = false; + var is_array = Array.isArray; + var index_of = Array.prototype.indexOf; + var includes = Array.prototype.includes; + var array_from = Array.from; + var object_keys = Object.keys; + var define_property = Object.defineProperty; + var get_descriptor = Object.getOwnPropertyDescriptor; + var get_descriptors = Object.getOwnPropertyDescriptors; + var object_prototype = Object.prototype; + var array_prototype = Array.prototype; + var get_prototype_of = Object.getPrototypeOf; + var is_extensible = Object.isExtensible; + const noop = () => { + }; + function run_all(arr) { + for (var i = 0; i < arr.length; i++) { + arr[i](); + } + } + function deferred() { + var resolve; + var reject; + var promise = new Promise((res, rej) => { + resolve = res; + reject = rej; + }); + return { promise, resolve, reject }; + } + const DERIVED = 1 << 1; + const EFFECT = 1 << 2; + const RENDER_EFFECT = 1 << 3; + const MANAGED_EFFECT = 1 << 24; + const BLOCK_EFFECT = 1 << 4; + const BRANCH_EFFECT = 1 << 5; + const ROOT_EFFECT = 1 << 6; + const BOUNDARY_EFFECT = 1 << 7; + const CONNECTED = 1 << 9; + const CLEAN = 1 << 10; + const DIRTY = 1 << 11; + const MAYBE_DIRTY = 1 << 12; + const INERT = 1 << 13; + const DESTROYED = 1 << 14; + const REACTION_RAN = 1 << 15; + const DESTROYING = 1 << 25; + const EFFECT_TRANSPARENT = 1 << 16; + const EAGER_EFFECT = 1 << 17; + const HEAD_EFFECT = 1 << 18; + const EFFECT_PRESERVED = 1 << 19; + const USER_EFFECT = 1 << 20; + const WAS_MARKED = 1 << 16; + const REACTION_IS_UPDATING = 1 << 21; + const ASYNC = 1 << 22; + const ERROR_VALUE = 1 << 23; + const STATE_SYMBOL = /* @__PURE__ */ Symbol("$state"); + const LEGACY_PROPS = /* @__PURE__ */ Symbol("legacy props"); + const LOADING_ATTR_SYMBOL = /* @__PURE__ */ Symbol(""); + const ATTRIBUTES_CACHE = /* @__PURE__ */ Symbol("attributes"); + const CLASS_CACHE = /* @__PURE__ */ Symbol("class"); + const STYLE_CACHE = /* @__PURE__ */ Symbol("style"); + const TEXT_CACHE = /* @__PURE__ */ Symbol("text"); + const FORM_RESET_HANDLER = /* @__PURE__ */ Symbol("form reset"); + const STALE_REACTION = new class StaleReactionError extends Error { + name = "StaleReactionError"; + message = "The reaction that called `getAbortSignal()` was re-run or destroyed"; + }(); + const IS_XHTML = ( + // We gotta write it like this because after downleveling the pure comment may end up in the wrong location + !!globalThis.document?.contentType && /* @__PURE__ */ globalThis.document.contentType.includes("xml") + ); + const TEXT_NODE = 3; + const COMMENT_NODE = 8; + function equals(value) { + return value === this.v; + } + function safe_not_equal(a, b) { + return a != a ? b == b : a !== b || a !== null && typeof a === "object" || typeof a === "function"; + } + function safe_equals(value) { + return !safe_not_equal(value, this.v); + } + function lifecycle_outside_component(name) { + { + throw new Error(`https://svelte.dev/e/lifecycle_outside_component`); + } + } + function async_derived_orphan() { + { + throw new Error(`https://svelte.dev/e/async_derived_orphan`); + } + } + function effect_in_teardown(rune) { + { + throw new Error(`https://svelte.dev/e/effect_in_teardown`); + } + } + function effect_in_unowned_derived() { + { + throw new Error(`https://svelte.dev/e/effect_in_unowned_derived`); + } + } + function effect_orphan(rune) { + { + throw new Error(`https://svelte.dev/e/effect_orphan`); + } + } + function effect_update_depth_exceeded() { + { + throw new Error(`https://svelte.dev/e/effect_update_depth_exceeded`); + } + } + function hydration_failed() { + { + throw new Error(`https://svelte.dev/e/hydration_failed`); + } + } + function state_descriptors_fixed() { + { + throw new Error(`https://svelte.dev/e/state_descriptors_fixed`); + } + } + function state_prototype_fixed() { + { + throw new Error(`https://svelte.dev/e/state_prototype_fixed`); + } + } + function state_unsafe_mutation() { + { + throw new Error(`https://svelte.dev/e/state_unsafe_mutation`); + } + } + function svelte_boundary_reset_onerror() { + { + throw new Error(`https://svelte.dev/e/svelte_boundary_reset_onerror`); + } + } + let tracing_mode_flag = false; + const TEMPLATE_FRAGMENT = 1; + const TEMPLATE_USE_IMPORT_NODE = 1 << 1; + const HYDRATION_START = "["; + const HYDRATION_START_ELSE = "[!"; + const HYDRATION_START_FAILED = "[?"; + const HYDRATION_END = "]"; + const HYDRATION_ERROR = {}; + const UNINITIALIZED = /* @__PURE__ */ Symbol("uninitialized"); + const NAMESPACE_HTML = "http://www.w3.org/1999/xhtml"; + const NAMESPACE_SVG = "http://www.w3.org/2000/svg"; + const NAMESPACE_MATHML = "http://www.w3.org/1998/Math/MathML"; + const ATTACHMENT_KEY = "@attach"; + let component_context = null; + function set_component_context(context) { + component_context = context; + } + function push(props, runes = false, fn) { + component_context = { + p: component_context, + i: false, + c: null, + e: null, + s: props, + x: null, + r: ( + /** @type {Effect} */ + active_effect + ), + l: null + }; + } + function pop(component2) { + var context = ( + /** @type {ComponentContext} */ + component_context + ); + var effects = context.e; + if (effects !== null) { + context.e = null; + for (var fn of effects) { + create_user_effect(fn); + } + } + if (component2 !== void 0) { + context.x = component2; + } + context.i = true; + component_context = context.p; + return component2 ?? /** @type {T} */ + {}; + } + function is_runes() { + return true; + } + let micro_tasks = []; + function run_micro_tasks() { + var tasks = micro_tasks; + micro_tasks = []; + run_all(tasks); + } + function queue_micro_task(fn) { + if (micro_tasks.length === 0 && !is_flushing_sync) { + var tasks = micro_tasks; + queueMicrotask(() => { + if (tasks === micro_tasks) run_micro_tasks(); + }); + } + micro_tasks.push(fn); + } + function flush_tasks() { + while (micro_tasks.length > 0) { + run_micro_tasks(); + } + } + function derived_inert() { + { + console.warn(`https://svelte.dev/e/derived_inert`); + } + } + function hydration_mismatch(location2) { + { + console.warn(`https://svelte.dev/e/hydration_mismatch`); + } + } + function select_multiple_invalid_value() { + { + console.warn(`https://svelte.dev/e/select_multiple_invalid_value`); + } + } + function svelte_boundary_reset_noop() { + { + console.warn(`https://svelte.dev/e/svelte_boundary_reset_noop`); + } + } + let hydrating = false; + function set_hydrating(value) { + hydrating = value; + } + let hydrate_node; + function set_hydrate_node(node) { + if (node === null) { + hydration_mismatch(); + throw HYDRATION_ERROR; + } + return hydrate_node = node; + } + function hydrate_next() { + return set_hydrate_node(/* @__PURE__ */ get_next_sibling(hydrate_node)); + } + function reset(node) { + if (!hydrating) return; + if (/* @__PURE__ */ get_next_sibling(hydrate_node) !== null) { + hydration_mismatch(); + throw HYDRATION_ERROR; + } + hydrate_node = node; + } + function next(count = 1) { + if (hydrating) { + var i = count; + var node = hydrate_node; + while (i--) { + node = /** @type {TemplateNode} */ + /* @__PURE__ */ get_next_sibling(node); + } + hydrate_node = node; + } + } + function skip_nodes(remove = true) { + var depth = 0; + var node = hydrate_node; + while (true) { + if (node.nodeType === COMMENT_NODE) { + var data = ( + /** @type {Comment} */ + node.data + ); + if (data === HYDRATION_END) { + if (depth === 0) return node; + depth -= 1; + } else if (data === HYDRATION_START || data === HYDRATION_START_ELSE || // "[1", "[2", etc. for if blocks + data[0] === "[" && !isNaN(Number(data.slice(1)))) { + depth += 1; + } + } + var next2 = ( + /** @type {TemplateNode} */ + /* @__PURE__ */ get_next_sibling(node) + ); + if (remove) node.remove(); + node = next2; + } + } + function read_hydration_instruction(node) { + if (!node || node.nodeType !== COMMENT_NODE) { + hydration_mismatch(); + throw HYDRATION_ERROR; + } + return ( + /** @type {Comment} */ + node.data + ); + } + function proxy(value) { + if (typeof value !== "object" || value === null || STATE_SYMBOL in value) { + return value; + } + const prototype = get_prototype_of(value); + if (prototype !== object_prototype && prototype !== array_prototype) { + return value; + } + var sources = /* @__PURE__ */ new Map(); + var is_proxied_array = is_array(value); + var version = /* @__PURE__ */ state(0); + var parent_version = update_version; + var with_parent = (fn) => { + if (update_version === parent_version) { + return fn(); + } + var reaction = active_reaction; + var version2 = update_version; + set_active_reaction(null); + set_update_version(parent_version); + var result = fn(); + set_active_reaction(reaction); + set_update_version(version2); + return result; + }; + if (is_proxied_array) { + sources.set("length", /* @__PURE__ */ state( + /** @type {any[]} */ + value.length + )); + } + return new Proxy( + /** @type {any} */ + value, + { + defineProperty(_, prop2, descriptor) { + if (!("value" in descriptor) || descriptor.configurable === false || descriptor.enumerable === false || descriptor.writable === false) { + state_descriptors_fixed(); + } + var s = sources.get(prop2); + if (s === void 0) { + with_parent(() => { + var s2 = /* @__PURE__ */ state(descriptor.value); + sources.set(prop2, s2); + return s2; + }); + } else { + set(s, descriptor.value, true); + } + return true; + }, + deleteProperty(target, prop2) { + var s = sources.get(prop2); + if (s === void 0) { + if (prop2 in target) { + const s2 = with_parent(() => /* @__PURE__ */ state(UNINITIALIZED)); + sources.set(prop2, s2); + increment(version); + } + } else { + set(s, UNINITIALIZED); + increment(version); + } + return true; + }, + get(target, prop2, receiver) { + if (prop2 === STATE_SYMBOL) { + return value; + } + var s = sources.get(prop2); + var exists = prop2 in target; + if (s === void 0 && (!exists || get_descriptor(target, prop2)?.writable)) { + s = with_parent(() => { + var p = proxy(exists ? target[prop2] : UNINITIALIZED); + var s2 = /* @__PURE__ */ state(p); + return s2; + }); + sources.set(prop2, s); + } + if (s !== void 0) { + var v = get(s); + return v === UNINITIALIZED ? void 0 : v; + } + return Reflect.get(target, prop2, receiver); + }, + getOwnPropertyDescriptor(target, prop2) { + var descriptor = Reflect.getOwnPropertyDescriptor(target, prop2); + if (descriptor && "value" in descriptor) { + var s = sources.get(prop2); + if (s) descriptor.value = get(s); + } else if (descriptor === void 0) { + var source2 = sources.get(prop2); + var value2 = source2?.v; + if (source2 !== void 0 && value2 !== UNINITIALIZED) { + return { + enumerable: true, + configurable: true, + value: value2, + writable: true + }; + } + } + return descriptor; + }, + has(target, prop2) { + if (prop2 === STATE_SYMBOL) { + return true; + } + var s = sources.get(prop2); + var has = s !== void 0 && s.v !== UNINITIALIZED || Reflect.has(target, prop2); + if (s !== void 0 || active_effect !== null && (!has || get_descriptor(target, prop2)?.writable)) { + if (s === void 0) { + s = with_parent(() => { + var p = has ? proxy(target[prop2]) : UNINITIALIZED; + var s2 = /* @__PURE__ */ state(p); + return s2; + }); + sources.set(prop2, s); + } + var value2 = get(s); + if (value2 === UNINITIALIZED) { + return false; + } + } + return has; + }, + set(target, prop2, value2, receiver) { + var s = sources.get(prop2); + var has = prop2 in target; + if (is_proxied_array && prop2 === "length") { + for (var i = value2; i < /** @type {Source} */ + s.v; i += 1) { + var other_s = sources.get(i + ""); + if (other_s !== void 0) { + set(other_s, UNINITIALIZED); + } else if (i in target) { + other_s = with_parent(() => /* @__PURE__ */ state(UNINITIALIZED)); + sources.set(i + "", other_s); + } + } + } + if (s === void 0) { + if (!has || get_descriptor(target, prop2)?.writable) { + s = with_parent(() => /* @__PURE__ */ state(void 0)); + set(s, proxy(value2)); + sources.set(prop2, s); + } + } else { + has = s.v !== UNINITIALIZED; + var p = with_parent(() => proxy(value2)); + set(s, p); + } + var descriptor = Reflect.getOwnPropertyDescriptor(target, prop2); + if (descriptor?.set) { + descriptor.set.call(receiver, value2); + } + if (!has) { + if (is_proxied_array && typeof prop2 === "string") { + var ls = ( + /** @type {Source} */ + sources.get("length") + ); + var n = Number(prop2); + if (Number.isInteger(n) && n >= ls.v) { + set(ls, n + 1); + } + } + increment(version); + } + return true; + }, + ownKeys(target) { + get(version); + var own_keys = Reflect.ownKeys(target).filter((key3) => { + var source3 = sources.get(key3); + return source3 === void 0 || source3.v !== UNINITIALIZED; + }); + for (var [key2, source2] of sources) { + if (source2.v !== UNINITIALIZED && !(key2 in target)) { + own_keys.push(key2); + } + } + return own_keys; + }, + setPrototypeOf() { + state_prototype_fixed(); + } + } + ); + } + function get_proxied_value(value) { + try { + if (value !== null && typeof value === "object" && STATE_SYMBOL in value) { + return value[STATE_SYMBOL]; + } + } catch { + } + return value; + } + function is(a, b) { + return Object.is(get_proxied_value(a), get_proxied_value(b)); + } + var $window; + var $document; + var is_firefox; + var first_child_getter; + var next_sibling_getter; + function init_operations() { + if ($window !== void 0) { + return; + } + $window = window; + $document = document; + is_firefox = /Firefox/.test(navigator.userAgent); + var element_prototype = Element.prototype; + var node_prototype = Node.prototype; + var text_prototype = Text.prototype; + first_child_getter = get_descriptor(node_prototype, "firstChild").get; + next_sibling_getter = get_descriptor(node_prototype, "nextSibling").get; + if (is_extensible(element_prototype)) { + element_prototype[CLASS_CACHE] = void 0; + element_prototype[ATTRIBUTES_CACHE] = null; + element_prototype[STYLE_CACHE] = void 0; + element_prototype.__e = void 0; + } + if (is_extensible(text_prototype)) { + text_prototype[TEXT_CACHE] = void 0; + } + } + function create_text(value = "") { + return document.createTextNode(value); + } + // @__NO_SIDE_EFFECTS__ + function get_first_child(node) { + return ( + /** @type {TemplateNode | null} */ + first_child_getter.call(node) + ); + } + // @__NO_SIDE_EFFECTS__ + function get_next_sibling(node) { + return ( + /** @type {TemplateNode | null} */ + next_sibling_getter.call(node) + ); + } + function child(node, is_text) { + if (!hydrating) { + return /* @__PURE__ */ get_first_child(node); + } + var child2 = /* @__PURE__ */ get_first_child(hydrate_node); + if (child2 === null) { + child2 = hydrate_node.appendChild(create_text()); + } else if (is_text && child2.nodeType !== TEXT_NODE) { + var text2 = create_text(); + child2?.before(text2); + set_hydrate_node(text2); + return text2; + } + if (is_text) { + merge_text_nodes( + /** @type {Text} */ + child2 + ); + } + set_hydrate_node(child2); + return child2; + } + function first_child(node, is_text = false) { + if (!hydrating) { + var first = /* @__PURE__ */ get_first_child(node); + if (first instanceof Comment && first.data === "") return /* @__PURE__ */ get_next_sibling(first); + return first; + } + if (is_text) { + if (hydrate_node?.nodeType !== TEXT_NODE) { + var text2 = create_text(); + hydrate_node?.before(text2); + set_hydrate_node(text2); + return text2; + } + merge_text_nodes( + /** @type {Text} */ + hydrate_node + ); + } + return hydrate_node; + } + function sibling(node, count = 1, is_text = false) { + let next_sibling = hydrating ? hydrate_node : node; + var last_sibling; + while (count--) { + last_sibling = next_sibling; + next_sibling = /** @type {TemplateNode} */ + /* @__PURE__ */ get_next_sibling(next_sibling); + } + if (!hydrating) { + return next_sibling; + } + if (is_text) { + if (next_sibling?.nodeType !== TEXT_NODE) { + var text2 = create_text(); + if (next_sibling === null) { + last_sibling?.after(text2); + } else { + next_sibling.before(text2); + } + set_hydrate_node(text2); + return text2; + } + merge_text_nodes( + /** @type {Text} */ + next_sibling + ); + } + set_hydrate_node(next_sibling); + return next_sibling; + } + function clear_text_content(node) { + node.textContent = ""; + } + function should_defer_append() { + return false; + } + function create_element(tag, namespace, is2) { + let options = void 0; + return ( + /** @type {T extends keyof HTMLElementTagNameMap ? HTMLElementTagNameMap[T] : Element} */ + document.createElementNS(namespace ?? NAMESPACE_HTML, tag, options) + ); + } + function merge_text_nodes(text2) { + if ( + /** @type {string} */ + text2.nodeValue.length < 65536 + ) { + return; + } + let next2 = text2.nextSibling; + while (next2 !== null && next2.nodeType === TEXT_NODE) { + next2.remove(); + text2.nodeValue += /** @type {string} */ + next2.nodeValue; + next2 = text2.nextSibling; + } + } + function handle_error(error) { + var effect2 = active_effect; + if (effect2 === null) { + active_reaction.f |= ERROR_VALUE; + return error; + } + if ((effect2.f & REACTION_RAN) === 0 && (effect2.f & EFFECT) === 0) { + throw error; + } + invoke_error_boundary(error, effect2); + } + function invoke_error_boundary(error, effect2) { + while (effect2 !== null) { + if ((effect2.f & BOUNDARY_EFFECT) !== 0) { + if ((effect2.f & REACTION_RAN) === 0) { + throw error; + } + try { + effect2.b.error(error); + return; + } catch (e) { + error = e; + } + } + effect2 = effect2.parent; + } + throw error; + } + const STATUS_MASK = -7169; + function set_signal_status(signal, status) { + signal.f = signal.f & STATUS_MASK | status; + } + function update_derived_status(derived2) { + if ((derived2.f & CONNECTED) !== 0 || derived2.deps === null) { + set_signal_status(derived2, CLEAN); + } else { + set_signal_status(derived2, MAYBE_DIRTY); + } + } + function clear_marked(deps) { + if (deps === null) return; + for (const dep of deps) { + if ((dep.f & DERIVED) === 0 || (dep.f & WAS_MARKED) === 0) { + continue; + } + dep.f ^= WAS_MARKED; + clear_marked( + /** @type {Derived} */ + dep.deps + ); + } + } + function defer_effect(effect2, dirty_effects, maybe_dirty_effects) { + if ((effect2.f & DIRTY) !== 0) { + dirty_effects.add(effect2); + } else if ((effect2.f & MAYBE_DIRTY) !== 0) { + maybe_dirty_effects.add(effect2); + } + clear_marked(effect2.deps); + set_signal_status(effect2, CLEAN); + } + function subscribe_to_store(store2, run, invalidate) { + if (store2 == null) { + run(void 0); + return noop; + } + const unsub = untrack( + () => store2.subscribe( + run, + // @ts-expect-error + invalidate + ) + ); + return unsub.unsubscribe ? () => unsub.unsubscribe() : unsub; + } + const subscriber_queue = []; + function writable(value, start = noop) { + let stop = null; + const subscribers = /* @__PURE__ */ new Set(); + function set2(new_value) { + if (safe_not_equal(value, new_value)) { + value = new_value; + if (stop) { + const run_queue = !subscriber_queue.length; + for (const subscriber of subscribers) { + subscriber[1](); + subscriber_queue.push(subscriber, value); + } + if (run_queue) { + for (let i = 0; i < subscriber_queue.length; i += 2) { + subscriber_queue[i][0](subscriber_queue[i + 1]); + } + subscriber_queue.length = 0; + } + } + } + } + function update(fn) { + set2(fn( + /** @type {T} */ + value + )); + } + function subscribe(run, invalidate = noop) { + const subscriber = [run, invalidate]; + subscribers.add(subscriber); + if (subscribers.size === 1) { + stop = start(set2, update) || noop; + } + run( + /** @type {T} */ + value + ); + return () => { + subscribers.delete(subscriber); + if (subscribers.size === 0 && stop) { + stop(); + stop = null; + } + }; + } + return { set: set2, update, subscribe }; + } + function get$1(store2) { + let value; + subscribe_to_store(store2, (_) => value = _)(); + return value; + } + let IS_UNMOUNTED = /* @__PURE__ */ Symbol("unmounted"); + function store_get(store2, store_name, stores) { + const entry = stores[store_name] ??= { + store: null, + source: /* @__PURE__ */ mutable_source(void 0), + unsubscribe: noop + }; + if (entry.store !== store2 && !(IS_UNMOUNTED in stores)) { + entry.unsubscribe(); + entry.store = store2 ?? null; + if (store2 == null) { + entry.source.v = void 0; + entry.unsubscribe = noop; + } else { + var is_synchronous_callback = true; + entry.unsubscribe = subscribe_to_store(store2, (v) => { + if (is_synchronous_callback) { + entry.source.v = v; + } else { + set(entry.source, v); + } + }); + is_synchronous_callback = false; + } + } + if (store2 && IS_UNMOUNTED in stores) { + return get$1(store2); + } + return get(entry.source); + } + function setup_stores() { + const stores = {}; + function cleanup() { + teardown(() => { + for (var store_name in stores) { + const ref = stores[store_name]; + ref.unsubscribe(); + } + define_property(stores, IS_UNMOUNTED, { + enumerable: false, + value: true + }); + }); + } + return [stores, cleanup]; + } + let first_batch = null; + let last_batch = null; + let current_batch = null; + let previous_batch = null; + let batch_values = null; + let last_scheduled_effect = null; + let is_flushing_sync = false; + let is_processing = false; + let collected_effects = null; + let legacy_updates = null; + var flush_count = 0; + var source_stacks = /* @__PURE__ */ new Set(); + let uid = 1; + class Batch { + id = uid++; + /** True as soon as `#process` was called */ + #started = false; + linked = true; + /** @type {Batch | null} */ + #prev = null; + /** @type {Batch | null} */ + #next = null; + /** @type {Map>>} */ + async_deriveds = /* @__PURE__ */ new Map(); + /** + * The current values of any signals that are updated in this batch. + * Tuple format: [value, is_derived] (note: is_derived is false for deriveds, too, if they were overridden via assignment) + * They keys of this map are identical to `this.#previous` + * @type {Map} + */ + current = /* @__PURE__ */ new Map(); + /** + * The values of any signals (sources and deriveds) that are updated in this batch _before_ those updates took place. + * They keys of this map are identical to `this.#current` + * @type {Map} + */ + previous = /* @__PURE__ */ new Map(); + /** + * Async effects which this batch doesn't take into account anymore when calculating blockers, + * as it has a value for it already. + * @type {Set} + */ + unblocked = /* @__PURE__ */ new Set(); + /** + * When the batch is committed (and the DOM is updated), we need to remove old branches + * and append new ones by calling the functions added inside (if/each/key/etc) blocks + * @type {Set<(batch: Batch) => void>} + */ + #commit_callbacks = /* @__PURE__ */ new Set(); + /** + * If a fork is discarded, we need to destroy any effects that are no longer needed + * @type {Set<(batch: Batch) => void>} + */ + #discard_callbacks = /* @__PURE__ */ new Set(); + /** + * Callbacks that should run only when a fork is committed. + * @type {Set<(batch: Batch) => void>} + */ + #fork_commit_callbacks = /* @__PURE__ */ new Set(); + /** + * The number of async effects that are currently in flight + */ + #pending = 0; + /** + * Async effects that are currently in flight, _not_ inside a pending boundary + * @type {Map} + */ + #blocking_pending = /* @__PURE__ */ new Map(); + /** + * A deferred that resolves when the batch is committed, used with `settled()` + * TODO replace with Promise.withResolvers once supported widely enough + * @type {{ promise: Promise, resolve: (value?: any) => void, reject: (reason: unknown) => void } | null} + */ + #deferred = null; + /** + * The root effects that need to be flushed + * @type {Effect[]} + */ + #roots = []; + /** + * Effects created while this batch was active. + * @type {Effect[]} + */ + #new_effects = []; + /** + * Deferred effects (which run after async work has completed) that are DIRTY + * @type {Set} + */ + #dirty_effects = /* @__PURE__ */ new Set(); + /** + * Deferred effects that are MAYBE_DIRTY + * @type {Set} + */ + #maybe_dirty_effects = /* @__PURE__ */ new Set(); + /** + * A map of branches that still exist, but will be destroyed when this batch + * is committed — we skip over these during `process`. + * The value contains child effects that were dirty/maybe_dirty before being reset, + * so they can be rescheduled if the branch survives. + * @type {Map} + */ + #skipped_branches = /* @__PURE__ */ new Map(); + /** + * Inverse of #skipped_branches which we need to tell prior batches to unskip them when committing + * @type {Set} + */ + #unskipped_branches = /* @__PURE__ */ new Set(); + is_fork = false; + #decrement_queued = false; + #is_deferred() { + if (this.is_fork) return true; + for (const effect2 of this.#blocking_pending.keys()) { + var e = effect2; + var skipped = false; + while (e.parent !== null) { + if (this.#skipped_branches.has(e)) { + skipped = true; + break; + } + e = e.parent; + } + if (!skipped) { + return true; + } + } + return false; + } + /** + * Add an effect to the #skipped_branches map and reset its children + * @param {Effect} effect + */ + skip_effect(effect2) { + if (!this.#skipped_branches.has(effect2)) { + this.#skipped_branches.set(effect2, { d: [], m: [] }); + } + this.#unskipped_branches.delete(effect2); + } + /** + * Remove an effect from the #skipped_branches map and reschedule + * any tracked dirty/maybe_dirty child effects + * @param {Effect} effect + * @param {(e: Effect) => void} callback + */ + unskip_effect(effect2, callback = (e) => this.schedule(e)) { + var tracked = this.#skipped_branches.get(effect2); + if (tracked) { + this.#skipped_branches.delete(effect2); + for (var e of tracked.d) { + set_signal_status(e, DIRTY); + callback(e); + } + for (e of tracked.m) { + set_signal_status(e, MAYBE_DIRTY); + callback(e); + } + } + this.#unskipped_branches.add(effect2); + } + #process() { + this.#started = true; + if (flush_count++ > 1e3) { + this.#unlink(); + infinite_loop_guard(); + } + if (!this.#is_deferred()) { + for (const e of this.#dirty_effects) { + this.#maybe_dirty_effects.delete(e); + set_signal_status(e, DIRTY); + this.schedule(e); + } + for (const e of this.#maybe_dirty_effects) { + set_signal_status(e, MAYBE_DIRTY); + this.schedule(e); + } + } + const roots = this.#roots; + this.#roots = []; + this.apply(); + var effects = collected_effects = []; + var render_effects = []; + var updates = legacy_updates = []; + for (const root2 of roots) { + try { + this.#traverse(root2, effects, render_effects); + } catch (e) { + reset_all(root2); + throw e; + } + } + current_batch = null; + if (updates.length > 0) { + var batch = Batch.ensure(); + for (const e of updates) { + batch.schedule(e); + } + } + collected_effects = null; + legacy_updates = null; + if (this.#is_deferred()) { + this.#defer_effects(render_effects); + this.#defer_effects(effects); + for (const [e, t] of this.#skipped_branches) { + reset_branch(e, t); + } + if (updates.length > 0) { + /** @type {unknown} */ + current_batch.#process(); + } + return; + } + const earlier_batch = this.#find_earlier_batch(); + if (earlier_batch) { + earlier_batch.#merge(this); + return; + } + this.#dirty_effects.clear(); + this.#maybe_dirty_effects.clear(); + for (const fn of this.#commit_callbacks) fn(this); + this.#commit_callbacks.clear(); + previous_batch = this; + flush_queued_effects(render_effects); + flush_queued_effects(effects); + previous_batch = null; + this.#deferred?.resolve(); + var next_batch = ( + /** @type {Batch | null} */ + /** @type {unknown} */ + current_batch + ); + if (this.linked && this.#pending === 0) { + this.#unlink(); + } + if (this.#roots.length > 0) { + if (next_batch === null) { + next_batch = this; + this.#link(); + } + const batch2 = next_batch; + batch2.#roots.push(...this.#roots.filter((r2) => !batch2.#roots.includes(r2))); + } + if (next_batch !== null) { + next_batch.#process(); + } + } + /** + * Traverse the effect tree, executing effects or stashing + * them for later execution as appropriate + * @param {Effect} root + * @param {Effect[]} effects + * @param {Effect[]} render_effects + */ + #traverse(root2, effects, render_effects) { + root2.f ^= CLEAN; + var effect2 = root2.first; + while (effect2 !== null) { + var flags2 = effect2.f; + var is_branch = (flags2 & (BRANCH_EFFECT | ROOT_EFFECT)) !== 0; + var is_skippable_branch = is_branch && (flags2 & CLEAN) !== 0; + var skip = is_skippable_branch || (flags2 & INERT) !== 0 || this.#skipped_branches.has(effect2); + if (!skip && effect2.fn !== null) { + if (is_branch) { + effect2.f ^= CLEAN; + } else if ((flags2 & EFFECT) !== 0) { + effects.push(effect2); + } else if (is_dirty(effect2)) { + if ((flags2 & BLOCK_EFFECT) !== 0) this.#maybe_dirty_effects.add(effect2); + update_effect(effect2); + } + var child2 = effect2.first; + if (child2 !== null) { + effect2 = child2; + continue; + } + } + while (effect2 !== null) { + var next2 = effect2.next; + if (next2 !== null) { + effect2 = next2; + break; + } + effect2 = effect2.parent; + } + } + } + #find_earlier_batch() { + var batch = this.#prev; + while (batch !== null) { + if (!batch.is_fork) { + for (const [value, [, is_derived]] of this.current) { + if (batch.current.has(value) && !is_derived) { + return batch; + } + } + } + batch = batch.#prev; + } + return null; + } + /** + * @param {Batch} batch + */ + #merge(batch) { + for (const [source2, value] of batch.current) { + if (!this.previous.has(source2) && batch.previous.has(source2)) { + this.previous.set(source2, batch.previous.get(source2)); + } + this.current.set(source2, value); + } + for (const [effect2, deferred2] of batch.async_deriveds) { + const d = this.async_deriveds.get(effect2); + if (d) deferred2.promise.then(d.resolve); + } + const mark = (value) => { + var reactions = value.reactions; + if (reactions === null) return; + for (const reaction of reactions) { + var flags2 = reaction.f; + if ((flags2 & DERIVED) !== 0) { + mark( + /** @type {Derived} */ + reaction + ); + } else { + var effect2 = ( + /** @type {Effect} */ + reaction + ); + if (flags2 & (ASYNC | BLOCK_EFFECT) && !this.async_deriveds.has(effect2)) { + this.#maybe_dirty_effects.delete(effect2); + set_signal_status(effect2, DIRTY); + this.schedule(effect2); + } + } + } + }; + for (const source2 of this.current.keys()) { + mark(source2); + } + this.oncommit(() => batch.discard()); + batch.#unlink(); + current_batch = this; + this.#process(); + } + /** + * @param {Effect[]} effects + */ + #defer_effects(effects) { + for (var i = 0; i < effects.length; i += 1) { + defer_effect(effects[i], this.#dirty_effects, this.#maybe_dirty_effects); + } + } + /** + * Associate a change to a given source with the current + * batch, noting its previous and current values + * @param {Value} source + * @param {any} value + * @param {boolean} [is_derived] + */ + capture(source2, value, is_derived = false) { + if (source2.v !== UNINITIALIZED && !this.previous.has(source2)) { + this.previous.set(source2, source2.v); + } + if ((source2.f & ERROR_VALUE) === 0) { + this.current.set(source2, [value, is_derived]); + batch_values?.set(source2, value); + } + if (!this.is_fork) { + source2.v = value; + } + } + activate() { + current_batch = this; + } + deactivate() { + current_batch = null; + batch_values = null; + } + flush() { + try { + if (DEV) ; + is_processing = true; + current_batch = this; + this.#process(); + } finally { + flush_count = 0; + last_scheduled_effect = null; + collected_effects = null; + legacy_updates = null; + is_processing = false; + current_batch = null; + batch_values = null; + old_values.clear(); + } + } + discard() { + for (const fn of this.#discard_callbacks) fn(this); + this.#discard_callbacks.clear(); + this.#fork_commit_callbacks.clear(); + this.#unlink(); + } + /** + * @param {Effect} effect + */ + register_created_effect(effect2) { + this.#new_effects.push(effect2); + } + #commit() { + this.#unlink(); + for (let batch = first_batch; batch !== null; batch = batch.#next) { + var is_earlier = batch.id < this.id; + var sources = []; + for (const [source3, [value, is_derived]] of this.current) { + if (batch.current.has(source3)) { + var batch_value = ( + /** @type {[any, boolean]} */ + batch.current.get(source3)[0] + ); + if (is_earlier && value !== batch_value) { + batch.current.set(source3, [value, is_derived]); + } else { + continue; + } + } + sources.push(source3); + } + if (is_earlier) { + for (const [effect2, deferred2] of this.async_deriveds) { + const d = batch.async_deriveds.get(effect2); + if (d) deferred2.promise.then(d.resolve); + } + } + if (!batch.#started) continue; + var others = [...batch.current.keys()].filter((s) => !this.current.has(s)); + if (others.length === 0) { + if (is_earlier) { + batch.discard(); + } + } else if (sources.length > 0) { + if (is_earlier) { + for (const unskipped of this.#unskipped_branches) { + batch.unskip_effect(unskipped, (e) => { + if ((e.f & (BLOCK_EFFECT | ASYNC)) !== 0) { + batch.schedule(e); + } else { + batch.#defer_effects([e]); + } + }); + } + } + batch.activate(); + var marked = /* @__PURE__ */ new Set(); + var checked = /* @__PURE__ */ new Map(); + for (var source2 of sources) { + mark_effects(source2, others, marked, checked); + } + checked = /* @__PURE__ */ new Map(); + var current_unequal = [...batch.current.keys()].filter( + (c) => this.current.has(c) ? ( + /** @type {[any, boolean]} */ + this.current.get(c)[0] !== c.v + ) : true + ); + if (current_unequal.length > 0) { + for (const effect2 of this.#new_effects) { + if ((effect2.f & (DESTROYED | INERT | EAGER_EFFECT)) === 0 && depends_on(effect2, current_unequal, checked)) { + if ((effect2.f & (ASYNC | BLOCK_EFFECT)) !== 0) { + set_signal_status(effect2, DIRTY); + batch.schedule(effect2); + } else { + batch.#dirty_effects.add(effect2); + } + } + } + } + if (batch.#roots.length > 0) { + batch.apply(); + for (var root2 of batch.#roots) { + batch.#traverse(root2, [], []); + } + batch.#roots = []; + } + batch.deactivate(); + } + } + } + /** + * @param {boolean} blocking + * @param {Effect} effect + */ + increment(blocking, effect2) { + this.#pending += 1; + if (blocking) { + let blocking_pending_count = this.#blocking_pending.get(effect2) ?? 0; + this.#blocking_pending.set(effect2, blocking_pending_count + 1); + } + } + /** + * @param {boolean} blocking + * @param {Effect} effect + */ + decrement(blocking, effect2) { + this.#pending -= 1; + if (blocking) { + let blocking_pending_count = this.#blocking_pending.get(effect2) ?? 0; + if (blocking_pending_count === 1) { + this.#blocking_pending.delete(effect2); + } else { + this.#blocking_pending.set(effect2, blocking_pending_count - 1); + } + } + if (this.#decrement_queued) return; + this.#decrement_queued = true; + queue_micro_task(() => { + this.#decrement_queued = false; + if (this.linked) { + this.flush(); + } + }); + } + /** + * @param {Set} dirty_effects + * @param {Set} maybe_dirty_effects + */ + transfer_effects(dirty_effects, maybe_dirty_effects) { + for (const e of dirty_effects) { + this.#dirty_effects.add(e); + } + for (const e of maybe_dirty_effects) { + this.#maybe_dirty_effects.add(e); + } + dirty_effects.clear(); + maybe_dirty_effects.clear(); + } + /** @param {(batch: Batch) => void} fn */ + oncommit(fn) { + this.#commit_callbacks.add(fn); + } + /** @param {(batch: Batch) => void} fn */ + ondiscard(fn) { + this.#discard_callbacks.add(fn); + } + /** @param {(batch: Batch) => void} fn */ + on_fork_commit(fn) { + this.#fork_commit_callbacks.add(fn); + } + run_fork_commit_callbacks() { + for (const fn of this.#fork_commit_callbacks) fn(this); + this.#fork_commit_callbacks.clear(); + } + settled() { + return (this.#deferred ??= deferred()).promise; + } + static ensure() { + if (current_batch === null) { + const batch = current_batch = new Batch(); + batch.#link(); + if (!is_processing && !is_flushing_sync) { + queue_micro_task(() => { + if (!batch.#started) { + batch.flush(); + } + }); + } + } + return current_batch; + } + apply() { + { + batch_values = null; + return; + } + } + /** + * + * @param {Effect} effect + */ + schedule(effect2) { + last_scheduled_effect = effect2; + if (effect2.b?.is_pending && (effect2.f & (EFFECT | RENDER_EFFECT | MANAGED_EFFECT)) !== 0 && (effect2.f & REACTION_RAN) === 0) { + effect2.b.defer_effect(effect2); + return; + } + var e = effect2; + while (e.parent !== null) { + e = e.parent; + var flags2 = e.f; + if (collected_effects !== null && e === active_effect) { + if ((active_reaction === null || (active_reaction.f & DERIVED) === 0) && true) { + return; + } + } + if ((flags2 & (ROOT_EFFECT | BRANCH_EFFECT)) !== 0) { + if ((flags2 & CLEAN) === 0) { + return; + } + e.f ^= CLEAN; + } + } + this.#roots.push(e); + } + #link() { + if (last_batch === null) { + first_batch = last_batch = this; + } else { + last_batch.#next = this; + this.#prev = last_batch; + } + last_batch = this; + } + #unlink() { + var prev = this.#prev; + var next2 = this.#next; + if (prev === null) { + first_batch = next2; + } else { + prev.#next = next2; + } + if (next2 === null) { + last_batch = prev; + } else { + next2.#prev = prev; + } + this.linked = false; + } + } + function flushSync(fn) { + var was_flushing_sync = is_flushing_sync; + is_flushing_sync = true; + try { + var result; + if (fn) ; + while (true) { + flush_tasks(); + if (current_batch === null) { + return ( + /** @type {T} */ + result + ); + } + current_batch.flush(); + } + } finally { + is_flushing_sync = was_flushing_sync; + } + } + function infinite_loop_guard() { + try { + effect_update_depth_exceeded(); + } catch (error) { + invoke_error_boundary(error, last_scheduled_effect); + } + } + let eager_block_effects = null; + function flush_queued_effects(effects) { + var length = effects.length; + if (length === 0) return; + var i = 0; + while (i < length) { + var effect2 = effects[i++]; + if ((effect2.f & (DESTROYED | INERT)) === 0 && is_dirty(effect2)) { + eager_block_effects = /* @__PURE__ */ new Set(); + update_effect(effect2); + if (effect2.deps === null && effect2.first === null && effect2.nodes === null && effect2.teardown === null && effect2.ac === null) { + unlink_effect(effect2); + } + if (eager_block_effects?.size > 0) { + old_values.clear(); + for (const e of eager_block_effects) { + if ((e.f & (DESTROYED | INERT)) !== 0) continue; + const ordered_effects = [e]; + let ancestor = e.parent; + while (ancestor !== null) { + if (eager_block_effects.has(ancestor)) { + eager_block_effects.delete(ancestor); + ordered_effects.push(ancestor); + } + ancestor = ancestor.parent; + } + for (let j = ordered_effects.length - 1; j >= 0; j--) { + const e2 = ordered_effects[j]; + if ((e2.f & (DESTROYED | INERT)) !== 0) continue; + update_effect(e2); + } + } + eager_block_effects.clear(); + } + } + } + eager_block_effects = null; + } + function mark_effects(value, sources, marked, checked) { + if (marked.has(value)) return; + marked.add(value); + if (value.reactions !== null) { + for (const reaction of value.reactions) { + const flags2 = reaction.f; + if ((flags2 & DERIVED) !== 0) { + mark_effects( + /** @type {Derived} */ + reaction, + sources, + marked, + checked + ); + } else if ((flags2 & (ASYNC | BLOCK_EFFECT)) !== 0 && (flags2 & DIRTY) === 0 && depends_on(reaction, sources, checked)) { + set_signal_status(reaction, DIRTY); + schedule_effect( + /** @type {Effect} */ + reaction + ); + } + } + } + } + function depends_on(reaction, sources, checked) { + const depends = checked.get(reaction); + if (depends !== void 0) return depends; + if (reaction.deps !== null) { + for (const dep of reaction.deps) { + if (includes.call(sources, dep)) { + return true; + } + if ((dep.f & DERIVED) !== 0 && depends_on( + /** @type {Derived} */ + dep, + sources, + checked + )) { + checked.set( + /** @type {Derived} */ + dep, + true + ); + return true; + } + } + } + checked.set(reaction, false); + return false; + } + function schedule_effect(effect2) { + current_batch.schedule(effect2); + } + function reset_branch(effect2, tracked) { + if ((effect2.f & BRANCH_EFFECT) !== 0 && (effect2.f & CLEAN) !== 0) { + return; + } + if ((effect2.f & DIRTY) !== 0) { + tracked.d.push(effect2); + } else if ((effect2.f & MAYBE_DIRTY) !== 0) { + tracked.m.push(effect2); + } + set_signal_status(effect2, CLEAN); + var e = effect2.first; + while (e !== null) { + reset_branch(e, tracked); + e = e.next; + } + } + function reset_all(effect2) { + set_signal_status(effect2, CLEAN); + var e = effect2.first; + while (e !== null) { + reset_all(e); + e = e.next; + } + } + function createSubscriber(start) { + let subscribers = 0; + let version = source(0); + let stop; + return () => { + if (effect_tracking()) { + get(version); + render_effect(() => { + if (subscribers === 0) { + stop = untrack(() => start(() => increment(version))); + } + subscribers += 1; + return () => { + queue_micro_task(() => { + subscribers -= 1; + if (subscribers === 0) { + stop?.(); + stop = void 0; + increment(version); + } + }); + }; + }); + } + }; + } + var flags = EFFECT_TRANSPARENT | EFFECT_PRESERVED; + function boundary(node, props, children, transform_error) { + new Boundary(node, props, children, transform_error); + } + class Boundary { + /** @type {Boundary | null} */ + parent; + is_pending = false; + /** + * API-level transformError transform function. Transforms errors before they reach the `failed` snippet. + * Inherited from parent boundary, or defaults to identity. + * @type {(error: unknown) => unknown} + */ + transform_error; + /** @type {TemplateNode} */ + #anchor; + /** @type {TemplateNode | null} */ + #hydrate_open = hydrating ? hydrate_node : null; + /** @type {BoundaryProps} */ + #props; + /** @type {((anchor: Node) => void)} */ + #children; + /** @type {Effect} */ + #effect; + /** @type {Effect | null} */ + #main_effect = null; + /** @type {Effect | null} */ + #pending_effect = null; + /** @type {Effect | null} */ + #failed_effect = null; + /** @type {DocumentFragment | null} */ + #offscreen_fragment = null; + #local_pending_count = 0; + #pending_count = 0; + #pending_count_update_queued = false; + /** @type {Set} */ + #dirty_effects = /* @__PURE__ */ new Set(); + /** @type {Set} */ + #maybe_dirty_effects = /* @__PURE__ */ new Set(); + /** + * A source containing the number of pending async deriveds/expressions. + * Only created if `$effect.pending()` is used inside the boundary, + * otherwise updating the source results in needless `Batch.ensure()` + * calls followed by no-op flushes + * @type {Source | null} + */ + #effect_pending = null; + #effect_pending_subscriber = createSubscriber(() => { + this.#effect_pending = source(this.#local_pending_count); + return () => { + this.#effect_pending = null; + }; + }); + /** + * @param {TemplateNode} node + * @param {BoundaryProps} props + * @param {((anchor: Node) => void)} children + * @param {((error: unknown) => unknown) | undefined} [transform_error] + */ + constructor(node, props, children, transform_error) { + this.#anchor = node; + this.#props = props; + this.#children = (anchor) => { + var effect2 = ( + /** @type {Effect} */ + active_effect + ); + effect2.b = this; + effect2.f |= BOUNDARY_EFFECT; + children(anchor); + }; + this.parent = /** @type {Effect} */ + active_effect.b; + this.transform_error = transform_error ?? this.parent?.transform_error ?? ((e) => e); + this.#effect = block(() => { + if (hydrating) { + const comment2 = ( + /** @type {Comment} */ + this.#hydrate_open + ); + hydrate_next(); + const server_rendered_pending = comment2.data === HYDRATION_START_ELSE; + const server_rendered_failed = comment2.data.startsWith(HYDRATION_START_FAILED); + if (server_rendered_failed) { + const serialized_error = JSON.parse(comment2.data.slice(HYDRATION_START_FAILED.length)); + this.#hydrate_failed_content(serialized_error); + } else if (server_rendered_pending) { + this.#hydrate_pending_content(); + } else { + this.#hydrate_resolved_content(); + } + } else { + this.#render(); + } + }, flags); + if (hydrating) { + this.#anchor = hydrate_node; + } + } + #hydrate_resolved_content() { + try { + this.#main_effect = branch(() => this.#children(this.#anchor)); + } catch (error) { + this.error(error); + } + } + /** + * @param {unknown} error The deserialized error from the server's hydration comment + */ + #hydrate_failed_content(error) { + const failed = this.#props.failed; + if (!failed) return; + this.#failed_effect = branch(() => { + failed( + this.#anchor, + () => error, + () => () => { + } + ); + }); + } + #hydrate_pending_content() { + const pending = this.#props.pending; + if (!pending) return; + this.is_pending = true; + this.#pending_effect = branch(() => pending(this.#anchor)); + queue_micro_task(() => { + var fragment = this.#offscreen_fragment = document.createDocumentFragment(); + var anchor = create_text(); + fragment.append(anchor); + this.#main_effect = this.#run(() => { + return branch(() => this.#children(anchor)); + }); + if (this.#pending_count === 0) { + this.#anchor.before(fragment); + this.#offscreen_fragment = null; + pause_effect( + /** @type {Effect} */ + this.#pending_effect, + () => { + this.#pending_effect = null; + } + ); + this.#resolve( + /** @type {Batch} */ + current_batch + ); + } + }); + } + #render() { + try { + this.is_pending = this.has_pending_snippet(); + this.#pending_count = 0; + this.#local_pending_count = 0; + this.#main_effect = branch(() => { + this.#children(this.#anchor); + }); + if (this.#pending_count > 0) { + var fragment = this.#offscreen_fragment = document.createDocumentFragment(); + move_effect(this.#main_effect, fragment); + const pending = ( + /** @type {(anchor: Node) => void} */ + this.#props.pending + ); + this.#pending_effect = branch(() => pending(this.#anchor)); + } else { + this.#resolve( + /** @type {Batch} */ + current_batch + ); + } + } catch (error) { + this.error(error); + } + } + /** + * @param {Batch} batch + */ + #resolve(batch) { + this.is_pending = false; + batch.transfer_effects(this.#dirty_effects, this.#maybe_dirty_effects); + } + /** + * Defer an effect inside a pending boundary until the boundary resolves + * @param {Effect} effect + */ + defer_effect(effect2) { + defer_effect(effect2, this.#dirty_effects, this.#maybe_dirty_effects); + } + /** + * Returns `false` if the effect exists inside a boundary whose pending snippet is shown + * @returns {boolean} + */ + is_rendered() { + return !this.is_pending && (!this.parent || this.parent.is_rendered()); + } + has_pending_snippet() { + return !!this.#props.pending; + } + /** + * @template T + * @param {() => T} fn + */ + #run(fn) { + var previous_effect = active_effect; + var previous_reaction = active_reaction; + var previous_ctx = component_context; + set_active_effect(this.#effect); + set_active_reaction(this.#effect); + set_component_context(this.#effect.ctx); + try { + Batch.ensure(); + return fn(); + } catch (e) { + handle_error(e); + return null; + } finally { + set_active_effect(previous_effect); + set_active_reaction(previous_reaction); + set_component_context(previous_ctx); + } + } + /** + * Updates the pending count associated with the currently visible pending snippet, + * if any, such that we can replace the snippet with content once work is done + * @param {1 | -1} d + * @param {Batch} batch + */ + #update_pending_count(d, batch) { + if (!this.has_pending_snippet()) { + if (this.parent) { + this.parent.#update_pending_count(d, batch); + } + return; + } + this.#pending_count += d; + if (this.#pending_count === 0) { + this.#resolve(batch); + if (this.#pending_effect) { + pause_effect(this.#pending_effect, () => { + this.#pending_effect = null; + }); + } + if (this.#offscreen_fragment) { + this.#anchor.before(this.#offscreen_fragment); + this.#offscreen_fragment = null; + } + } + } + /** + * Update the source that powers `$effect.pending()` inside this boundary, + * and controls when the current `pending` snippet (if any) is removed. + * Do not call from inside the class + * @param {1 | -1} d + * @param {Batch} batch + */ + update_pending_count(d, batch) { + this.#update_pending_count(d, batch); + this.#local_pending_count += d; + if (!this.#effect_pending || this.#pending_count_update_queued) return; + this.#pending_count_update_queued = true; + queue_micro_task(() => { + this.#pending_count_update_queued = false; + if (this.#effect_pending) { + internal_set(this.#effect_pending, this.#local_pending_count); + } + }); + } + get_effect_pending() { + this.#effect_pending_subscriber(); + return get( + /** @type {Source} */ + this.#effect_pending + ); + } + /** @param {unknown} error */ + error(error) { + if (!this.#props.onerror && !this.#props.failed) { + throw error; + } + if (current_batch?.is_fork) { + if (this.#main_effect) current_batch.skip_effect(this.#main_effect); + if (this.#pending_effect) current_batch.skip_effect(this.#pending_effect); + if (this.#failed_effect) current_batch.skip_effect(this.#failed_effect); + current_batch.on_fork_commit(() => { + this.#handle_error(error); + }); + } else { + this.#handle_error(error); + } + } + /** + * @param {unknown} error + */ + #handle_error(error) { + if (this.#main_effect) { + destroy_effect(this.#main_effect); + this.#main_effect = null; + } + if (this.#pending_effect) { + destroy_effect(this.#pending_effect); + this.#pending_effect = null; + } + if (this.#failed_effect) { + destroy_effect(this.#failed_effect); + this.#failed_effect = null; + } + if (hydrating) { + set_hydrate_node( + /** @type {TemplateNode} */ + this.#hydrate_open + ); + next(); + set_hydrate_node(skip_nodes()); + } + var onerror = this.#props.onerror; + let failed = this.#props.failed; + var did_reset = false; + var calling_on_error = false; + const reset2 = () => { + if (did_reset) { + svelte_boundary_reset_noop(); + return; + } + did_reset = true; + if (calling_on_error) { + svelte_boundary_reset_onerror(); + } + if (this.#failed_effect !== null) { + pause_effect(this.#failed_effect, () => { + this.#failed_effect = null; + }); + } + this.#run(() => { + this.#render(); + }); + }; + const handle_error_result = (transformed_error) => { + try { + calling_on_error = true; + onerror?.(transformed_error, reset2); + calling_on_error = false; + } catch (error2) { + invoke_error_boundary(error2, this.#effect && this.#effect.parent); + } + if (failed) { + this.#failed_effect = this.#run(() => { + try { + return branch(() => { + var effect2 = ( + /** @type {Effect} */ + active_effect + ); + effect2.b = this; + effect2.f |= BOUNDARY_EFFECT; + failed( + this.#anchor, + () => transformed_error, + () => reset2 + ); + }); + } catch (error2) { + invoke_error_boundary( + error2, + /** @type {Effect} */ + this.#effect.parent + ); + return null; + } + }); + } + }; + queue_micro_task(() => { + var result; + try { + result = this.transform_error(error); + } catch (e) { + invoke_error_boundary(e, this.#effect && this.#effect.parent); + return; + } + if (result !== null && typeof result === "object" && typeof /** @type {any} */ + result.then === "function") { + result.then( + handle_error_result, + /** @param {unknown} e */ + (e) => invoke_error_boundary(e, this.#effect && this.#effect.parent) + ); + } else { + handle_error_result(result); + } + }); + } + } + function flatten(blockers, sync, async, fn) { + const d = derived; + var pending = blockers.filter((b) => !b.settled); + if (async.length === 0 && pending.length === 0) { + fn(sync.map(d)); + return; + } + var parent = ( + /** @type {Effect} */ + active_effect + ); + var restore = capture(); + var blocker_promise = pending.length === 1 ? pending[0].promise : pending.length > 1 ? Promise.all(pending.map((b) => b.promise)) : null; + function finish(values) { + if ((parent.f & DESTROYED) !== 0) { + return; + } + restore(); + try { + fn(values); + } catch (error) { + invoke_error_boundary(error, parent); + } + unset_context(); + } + var decrement_pending = increment_pending(); + if (async.length === 0) { + blocker_promise.then(() => finish(sync.map(d))).finally(decrement_pending); + return; + } + function run() { + Promise.all(async.map((expression) => /* @__PURE__ */ async_derived(expression))).then((result) => finish([...sync.map(d), ...result])).catch((error) => invoke_error_boundary(error, parent)).finally(decrement_pending); + } + if (blocker_promise) { + blocker_promise.then(() => { + restore(); + run(); + unset_context(); + }); + } else { + run(); + } + } + function capture() { + var previous_effect = ( + /** @type {Effect} */ + active_effect + ); + var previous_reaction = active_reaction; + var previous_component_context = component_context; + var previous_batch2 = ( + /** @type {Batch} */ + current_batch + ); + return function restore(activate_batch = true) { + set_active_effect(previous_effect); + set_active_reaction(previous_reaction); + set_component_context(previous_component_context); + if (activate_batch && (previous_effect.f & DESTROYED) === 0) { + previous_batch2?.activate(); + previous_batch2?.apply(); + } + }; + } + function unset_context(deactivate_batch = true) { + set_active_effect(null); + set_active_reaction(null); + set_component_context(null); + if (deactivate_batch) current_batch?.deactivate(); + } + function increment_pending() { + var effect2 = ( + /** @type {Effect} */ + active_effect + ); + var boundary2 = ( + /** @type {Boundary} */ + effect2.b + ); + var batch = ( + /** @type {Batch} */ + current_batch + ); + var blocking = boundary2.is_rendered(); + boundary2.update_pending_count(1, batch); + batch.increment(blocking, effect2); + return () => { + boundary2.update_pending_count(-1, batch); + batch.decrement(blocking, effect2); + }; + } + // @__NO_SIDE_EFFECTS__ + function derived(fn) { + var flags2 = DERIVED | DIRTY; + if (active_effect !== null) { + active_effect.f |= EFFECT_PRESERVED; + } + const signal = { + ctx: component_context, + deps: null, + effects: null, + equals, + f: flags2, + fn, + reactions: null, + rv: 0, + v: ( + /** @type {V} */ + UNINITIALIZED + ), + wv: 0, + parent: active_effect, + ac: null + }; + return signal; + } + const OBSOLETE = /* @__PURE__ */ Symbol("obsolete"); + // @__NO_SIDE_EFFECTS__ + function async_derived(fn, label, location2) { + let parent = ( + /** @type {Effect | null} */ + active_effect + ); + if (parent === null) { + async_derived_orphan(); + } + var promise = ( + /** @type {Promise} */ + /** @type {unknown} */ + void 0 + ); + var signal = source( + /** @type {V} */ + UNINITIALIZED + ); + var should_suspend = !active_reaction; + var deferreds = /* @__PURE__ */ new Set(); + async_effect(() => { + var effect2 = ( + /** @type {Effect} */ + active_effect + ); + var d = deferred(); + promise = d.promise; + try { + Promise.resolve(fn()).then(d.resolve, (e) => { + if (e !== STALE_REACTION) d.reject(e); + }).finally(unset_context); + } catch (error) { + d.reject(error); + unset_context(); + } + var batch = ( + /** @type {Batch} */ + current_batch + ); + if (should_suspend) { + if ((effect2.f & REACTION_RAN) !== 0) { + var decrement_pending = increment_pending(); + } + if ( + /** @type {Boundary} */ + parent.b.is_rendered() + ) { + batch.async_deriveds.get(effect2)?.reject(OBSOLETE); + } else { + for (const d2 of deferreds.values()) { + d2.reject(OBSOLETE); + } + } + deferreds.add(d); + batch.async_deriveds.set(effect2, d); + } + const handler = (value, error = void 0) => { + decrement_pending?.(); + deferreds.delete(d); + if (error === OBSOLETE) return; + batch.activate(); + if (error) { + signal.f |= ERROR_VALUE; + internal_set(signal, error); + } else { + if ((signal.f & ERROR_VALUE) !== 0) { + signal.f ^= ERROR_VALUE; + } + internal_set(signal, value); + } + batch.deactivate(); + }; + d.promise.then(handler, (e) => handler(null, e || "unknown")); + }); + teardown(() => { + for (const d of deferreds) { + d.reject(OBSOLETE); + } + }); + return new Promise((fulfil) => { + function next2(p) { + function go() { + if (p === promise) { + fulfil(signal); + } else { + next2(promise); + } + } + p.then(go, go); + } + next2(promise); + }); + } + // @__NO_SIDE_EFFECTS__ + function user_derived(fn) { + const d = /* @__PURE__ */ derived(fn); + push_reaction_value(d); + return d; + } + function destroy_derived_effects(derived2) { + var effects = derived2.effects; + if (effects !== null) { + derived2.effects = null; + for (var i = 0; i < effects.length; i += 1) { + destroy_effect( + /** @type {Effect} */ + effects[i] + ); + } + } + } + function execute_derived(derived2) { + var value; + var prev_active_effect = active_effect; + var parent = derived2.parent; + if (!is_destroying_effect && parent !== null && derived2.v !== UNINITIALIZED && // if it was never evaluated before, it's guaranteed to fail downstream, so we try to execute instead + (parent.f & (DESTROYED | INERT)) !== 0) { + derived_inert(); + return derived2.v; + } + set_active_effect(parent); + { + try { + derived2.f &= ~WAS_MARKED; + destroy_derived_effects(derived2); + value = update_reaction(derived2); + } finally { + set_active_effect(prev_active_effect); + } + } + return value; + } + function update_derived(derived2) { + var value = execute_derived(derived2); + if (!derived2.equals(value)) { + derived2.wv = increment_write_version(); + if (!current_batch?.is_fork || derived2.deps === null) { + if (current_batch !== null) { + current_batch.capture(derived2, value, true); + previous_batch?.capture(derived2, value, true); + } else { + derived2.v = value; + } + if (derived2.deps === null) { + set_signal_status(derived2, CLEAN); + return; + } + } + } + if (is_destroying_effect) { + return; + } + if (batch_values !== null) { + if (effect_tracking() || current_batch?.is_fork) { + batch_values.set(derived2, value); + } + } else { + update_derived_status(derived2); + } + } + function freeze_derived_effects(derived2) { + if (derived2.effects === null) return; + for (const e of derived2.effects) { + if (e.teardown || e.ac) { + e.teardown?.(); + e.ac?.abort(STALE_REACTION); + if (e.fn !== null) e.teardown = noop; + e.ac = null; + remove_reactions(e, 0); + destroy_effect_children(e); + } + } + } + function unfreeze_derived_effects(derived2) { + if (derived2.effects === null) return; + for (const e of derived2.effects) { + if (e.teardown && e.fn !== null) { + update_effect(e); + } + } + } + let eager_effects = /* @__PURE__ */ new Set(); + const old_values = /* @__PURE__ */ new Map(); + let eager_effects_deferred = false; + function source(v, stack) { + var signal = { + f: 0, + // TODO ideally we could skip this altogether, but it causes type errors + v, + reactions: null, + equals, + rv: 0, + wv: 0 + }; + return signal; + } + // @__NO_SIDE_EFFECTS__ + function state(v, stack) { + const s = source(v); + push_reaction_value(s); + return s; + } + // @__NO_SIDE_EFFECTS__ + function mutable_source(initial_value, immutable = false, trackable = true) { + const s = source(initial_value); + if (!immutable) { + s.equals = safe_equals; + } + return s; + } + function set(source2, value, should_proxy = false) { + if (active_reaction !== null && // since we are untracking the function inside `$inspect.with` we need to add this check + // to ensure we error if state is set inside an inspect effect + (!untracking || (active_reaction.f & EAGER_EFFECT) !== 0) && is_runes() && (active_reaction.f & (DERIVED | BLOCK_EFFECT | ASYNC | EAGER_EFFECT)) !== 0 && (current_sources === null || !includes.call(current_sources, source2))) { + state_unsafe_mutation(); + } + let new_value = should_proxy ? proxy(value) : value; + return internal_set(source2, new_value, legacy_updates); + } + function internal_set(source2, value, updated_during_traversal = null) { + if (!source2.equals(value)) { + old_values.set(source2, is_destroying_effect ? value : source2.v); + var batch = Batch.ensure(); + batch.capture(source2, value); + if ((source2.f & DERIVED) !== 0) { + const derived2 = ( + /** @type {Derived} */ + source2 + ); + if ((source2.f & DIRTY) !== 0) { + execute_derived(derived2); + } + if (batch_values === null) { + update_derived_status(derived2); + } + } + source2.wv = increment_write_version(); + mark_reactions(source2, DIRTY, updated_during_traversal); + if (active_effect !== null && (active_effect.f & CLEAN) !== 0 && (active_effect.f & (BRANCH_EFFECT | ROOT_EFFECT)) === 0) { + if (untracked_writes === null) { + set_untracked_writes([source2]); + } else { + untracked_writes.push(source2); + } + } + if (!batch.is_fork && eager_effects.size > 0 && !eager_effects_deferred) { + flush_eager_effects(); + } + } + return value; + } + function flush_eager_effects() { + eager_effects_deferred = false; + for (const effect2 of eager_effects) { + if ((effect2.f & CLEAN) !== 0) { + set_signal_status(effect2, MAYBE_DIRTY); + } + let dirty; + try { + dirty = is_dirty(effect2); + } catch { + dirty = true; + } + if (dirty) { + update_effect(effect2); + } + } + eager_effects.clear(); + } + function increment(source2) { + set(source2, source2.v + 1); + } + function mark_reactions(signal, status, updated_during_traversal) { + var reactions = signal.reactions; + if (reactions === null) return; + var length = reactions.length; + for (var i = 0; i < length; i++) { + var reaction = reactions[i]; + var flags2 = reaction.f; + var not_dirty = (flags2 & DIRTY) === 0; + if (not_dirty) { + set_signal_status(reaction, status); + } + if ((flags2 & EAGER_EFFECT) !== 0) { + eager_effects.add( + /** @type {Effect} */ + reaction + ); + } else if ((flags2 & DERIVED) !== 0) { + var derived2 = ( + /** @type {Derived} */ + reaction + ); + batch_values?.delete(derived2); + if ((flags2 & WAS_MARKED) === 0) { + if (flags2 & CONNECTED && (active_effect === null || (active_effect.f & REACTION_IS_UPDATING) === 0)) { + reaction.f |= WAS_MARKED; + } + mark_reactions(derived2, MAYBE_DIRTY, updated_during_traversal); + } + } else if (not_dirty) { + var effect2 = ( + /** @type {Effect} */ + reaction + ); + if ((flags2 & BLOCK_EFFECT) !== 0 && eager_block_effects !== null) { + eager_block_effects.add(effect2); + } + if (updated_during_traversal !== null) { + updated_during_traversal.push(effect2); + } else { + schedule_effect(effect2); + } + } + } + } + function autofocus(dom, value) { + if (value) { + const body = document.body; + dom.autofocus = true; + queue_micro_task(() => { + if (document.activeElement === body) { + dom.focus(); + } + }); + } + } + let listening_to_form_reset = false; + function add_form_reset_listener() { + if (!listening_to_form_reset) { + listening_to_form_reset = true; + document.addEventListener( + "reset", + (evt) => { + Promise.resolve().then(() => { + if (!evt.defaultPrevented) { + for ( + const e of + /**@type {HTMLFormElement} */ + evt.target.elements + ) { + e[FORM_RESET_HANDLER]?.(); + } + } + }); + }, + // In the capture phase to guarantee we get noticed of it (no possibility of stopPropagation) + { capture: true } + ); + } + } + function without_reactive_context(fn) { + var previous_reaction = active_reaction; + var previous_effect = active_effect; + set_active_reaction(null); + set_active_effect(null); + try { + return fn(); + } finally { + set_active_reaction(previous_reaction); + set_active_effect(previous_effect); + } + } + function listen_to_event_and_reset_event(element, event2, handler, on_reset = handler) { + element.addEventListener(event2, () => without_reactive_context(handler)); + const prev = ( + /** @type {any} */ + element[FORM_RESET_HANDLER] + ); + if (prev) { + element[FORM_RESET_HANDLER] = () => { + prev(); + on_reset(true); + }; + } else { + element[FORM_RESET_HANDLER] = () => on_reset(true); + } + add_form_reset_listener(); + } + let is_updating_effect = false; + let is_destroying_effect = false; + function set_is_destroying_effect(value) { + is_destroying_effect = value; + } + let active_reaction = null; + let untracking = false; + function set_active_reaction(reaction) { + active_reaction = reaction; + } + let active_effect = null; + function set_active_effect(effect2) { + active_effect = effect2; + } + let current_sources = null; + function push_reaction_value(value) { + if (active_reaction !== null && true) { + if (current_sources === null) { + current_sources = [value]; + } else { + current_sources.push(value); + } + } + } + let new_deps = null; + let skipped_deps = 0; + let untracked_writes = null; + function set_untracked_writes(value) { + untracked_writes = value; + } + let write_version = 1; + let read_version = 0; + let update_version = read_version; + function set_update_version(value) { + update_version = value; + } + function increment_write_version() { + return ++write_version; + } + function is_dirty(reaction) { + var flags2 = reaction.f; + if ((flags2 & DIRTY) !== 0) { + return true; + } + if (flags2 & DERIVED) { + reaction.f &= ~WAS_MARKED; + } + if ((flags2 & MAYBE_DIRTY) !== 0) { + var dependencies = ( + /** @type {Value[]} */ + reaction.deps + ); + var length = dependencies.length; + for (var i = 0; i < length; i++) { + var dependency = dependencies[i]; + if (is_dirty( + /** @type {Derived} */ + dependency + )) { + update_derived( + /** @type {Derived} */ + dependency + ); + } + if (dependency.wv > reaction.wv) { + return true; + } + } + if ((flags2 & CONNECTED) !== 0 && // During time traveling we don't want to reset the status so that + // traversal of the graph in the other batches still happens + batch_values === null) { + set_signal_status(reaction, CLEAN); + } + } + return false; + } + function schedule_possible_effect_self_invalidation(signal, effect2, root2 = true) { + var reactions = signal.reactions; + if (reactions === null) return; + if (current_sources !== null && includes.call(current_sources, signal)) { + return; + } + for (var i = 0; i < reactions.length; i++) { + var reaction = reactions[i]; + if ((reaction.f & DERIVED) !== 0) { + schedule_possible_effect_self_invalidation( + /** @type {Derived} */ + reaction, + effect2, + false + ); + } else if (effect2 === reaction) { + if (root2) { + set_signal_status(reaction, DIRTY); + } else if ((reaction.f & CLEAN) !== 0) { + set_signal_status(reaction, MAYBE_DIRTY); + } + schedule_effect( + /** @type {Effect} */ + reaction + ); + } + } + } + function update_reaction(reaction) { + var previous_deps = new_deps; + var previous_skipped_deps = skipped_deps; + var previous_untracked_writes = untracked_writes; + var previous_reaction = active_reaction; + var previous_sources = current_sources; + var previous_component_context = component_context; + var previous_untracking = untracking; + var previous_update_version = update_version; + var flags2 = reaction.f; + new_deps = /** @type {null | Value[]} */ + null; + skipped_deps = 0; + untracked_writes = null; + active_reaction = (flags2 & (BRANCH_EFFECT | ROOT_EFFECT)) === 0 ? reaction : null; + current_sources = null; + set_component_context(reaction.ctx); + untracking = false; + update_version = ++read_version; + if (reaction.ac !== null) { + without_reactive_context(() => { + reaction.ac.abort(STALE_REACTION); + }); + reaction.ac = null; + } + try { + reaction.f |= REACTION_IS_UPDATING; + var fn = ( + /** @type {Function} */ + reaction.fn + ); + var result = fn(); + reaction.f |= REACTION_RAN; + var deps = reaction.deps; + var is_fork = current_batch?.is_fork; + if (new_deps !== null) { + var i; + if (!is_fork) { + remove_reactions(reaction, skipped_deps); + } + if (deps !== null && skipped_deps > 0) { + deps.length = skipped_deps + new_deps.length; + for (i = 0; i < new_deps.length; i++) { + deps[skipped_deps + i] = new_deps[i]; + } + } else { + reaction.deps = deps = new_deps; + } + if (effect_tracking() && (reaction.f & CONNECTED) !== 0) { + for (i = skipped_deps; i < deps.length; i++) { + (deps[i].reactions ??= []).push(reaction); + } + } + } else if (!is_fork && deps !== null && skipped_deps < deps.length) { + remove_reactions(reaction, skipped_deps); + deps.length = skipped_deps; + } + if (is_runes() && untracked_writes !== null && !untracking && deps !== null && (reaction.f & (DERIVED | MAYBE_DIRTY | DIRTY)) === 0) { + for (i = 0; i < /** @type {Source[]} */ + untracked_writes.length; i++) { + schedule_possible_effect_self_invalidation( + untracked_writes[i], + /** @type {Effect} */ + reaction + ); + } + } + if (previous_reaction !== null && previous_reaction !== reaction) { + read_version++; + if (previous_reaction.deps !== null) { + for (let i2 = 0; i2 < previous_skipped_deps; i2 += 1) { + previous_reaction.deps[i2].rv = read_version; + } + } + if (previous_deps !== null) { + for (const dep of previous_deps) { + dep.rv = read_version; + } + } + if (untracked_writes !== null) { + if (previous_untracked_writes === null) { + previous_untracked_writes = untracked_writes; + } else { + previous_untracked_writes.push(.../** @type {Source[]} */ + untracked_writes); + } + } + } + if ((reaction.f & ERROR_VALUE) !== 0) { + reaction.f ^= ERROR_VALUE; + } + return result; + } catch (error) { + return handle_error(error); + } finally { + reaction.f ^= REACTION_IS_UPDATING; + new_deps = previous_deps; + skipped_deps = previous_skipped_deps; + untracked_writes = previous_untracked_writes; + active_reaction = previous_reaction; + current_sources = previous_sources; + set_component_context(previous_component_context); + untracking = previous_untracking; + update_version = previous_update_version; + } + } + function remove_reaction(signal, dependency) { + let reactions = dependency.reactions; + if (reactions !== null) { + var index = index_of.call(reactions, signal); + if (index !== -1) { + var new_length = reactions.length - 1; + if (new_length === 0) { + reactions = dependency.reactions = null; + } else { + reactions[index] = reactions[new_length]; + reactions.pop(); + } + } + } + if (reactions === null && (dependency.f & DERIVED) !== 0 && // Destroying a child effect while updating a parent effect can cause a dependency to appear + // to be unused, when in fact it is used by the currently-updating parent. Checking `new_deps` + // allows us to skip the expensive work of disconnecting and immediately reconnecting it + (new_deps === null || !includes.call(new_deps, dependency))) { + var derived2 = ( + /** @type {Derived} */ + dependency + ); + if ((derived2.f & CONNECTED) !== 0) { + derived2.f ^= CONNECTED; + derived2.f &= ~WAS_MARKED; + } + if (derived2.v !== UNINITIALIZED) { + update_derived_status(derived2); + } + freeze_derived_effects(derived2); + remove_reactions(derived2, 0); + } + } + function remove_reactions(signal, start_index) { + var dependencies = signal.deps; + if (dependencies === null) return; + for (var i = start_index; i < dependencies.length; i++) { + remove_reaction(signal, dependencies[i]); + } + } + function update_effect(effect2) { + var flags2 = effect2.f; + if ((flags2 & DESTROYED) !== 0) { + return; + } + set_signal_status(effect2, CLEAN); + var previous_effect = active_effect; + var was_updating_effect = is_updating_effect; + active_effect = effect2; + is_updating_effect = true; + try { + if ((flags2 & (BLOCK_EFFECT | MANAGED_EFFECT)) !== 0) { + destroy_block_effect_children(effect2); + } else { + destroy_effect_children(effect2); + } + execute_effect_teardown(effect2); + var teardown2 = update_reaction(effect2); + effect2.teardown = typeof teardown2 === "function" ? teardown2 : null; + effect2.wv = write_version; + var dep; + if (DEV && tracing_mode_flag && (effect2.f & DIRTY) !== 0 && effect2.deps !== null) ; + } finally { + is_updating_effect = was_updating_effect; + active_effect = previous_effect; + } + } + async function tick() { + await Promise.resolve(); + flushSync(); + } + function get(signal) { + var flags2 = signal.f; + var is_derived = (flags2 & DERIVED) !== 0; + if (active_reaction !== null && !untracking) { + var destroyed = active_effect !== null && (active_effect.f & DESTROYED) !== 0; + if (!destroyed && (current_sources === null || !includes.call(current_sources, signal))) { + var deps = active_reaction.deps; + if ((active_reaction.f & REACTION_IS_UPDATING) !== 0) { + if (signal.rv < read_version) { + signal.rv = read_version; + if (new_deps === null && deps !== null && deps[skipped_deps] === signal) { + skipped_deps++; + } else if (new_deps === null) { + new_deps = [signal]; + } else { + new_deps.push(signal); + } + } + } else { + (active_reaction.deps ??= []).push(signal); + var reactions = signal.reactions; + if (reactions === null) { + signal.reactions = [active_reaction]; + } else if (!includes.call(reactions, active_reaction)) { + reactions.push(active_reaction); + } + } + } + } + if (is_destroying_effect && old_values.has(signal)) { + return old_values.get(signal); + } + if (is_derived) { + var derived2 = ( + /** @type {Derived} */ + signal + ); + if (is_destroying_effect) { + var value = derived2.v; + if ((derived2.f & CLEAN) === 0 && derived2.reactions !== null || depends_on_old_values(derived2)) { + value = execute_derived(derived2); + } + old_values.set(derived2, value); + return value; + } + var should_connect = (derived2.f & CONNECTED) === 0 && !untracking && active_reaction !== null && (is_updating_effect || (active_reaction.f & CONNECTED) !== 0); + var is_new = (derived2.f & REACTION_RAN) === 0; + if (is_dirty(derived2)) { + if (should_connect) { + derived2.f |= CONNECTED; + } + update_derived(derived2); + } + if (should_connect && !is_new) { + unfreeze_derived_effects(derived2); + reconnect(derived2); + } + } + if (batch_values?.has(signal)) { + return batch_values.get(signal); + } + if ((signal.f & ERROR_VALUE) !== 0) { + throw signal.v; + } + return signal.v; + } + function reconnect(derived2) { + derived2.f |= CONNECTED; + if (derived2.deps === null) return; + for (const dep of derived2.deps) { + (dep.reactions ??= []).push(derived2); + if ((dep.f & DERIVED) !== 0 && (dep.f & CONNECTED) === 0) { + unfreeze_derived_effects( + /** @type {Derived} */ + dep + ); + reconnect( + /** @type {Derived} */ + dep + ); + } + } + } + function depends_on_old_values(derived2) { + if (derived2.v === UNINITIALIZED) return true; + if (derived2.deps === null) return false; + for (const dep of derived2.deps) { + if (old_values.has(dep)) { + return true; + } + if ((dep.f & DERIVED) !== 0 && depends_on_old_values( + /** @type {Derived} */ + dep + )) { + return true; + } + } + return false; + } + function untrack(fn) { + var previous_untracking = untracking; + try { + untracking = true; + return fn(); + } finally { + untracking = previous_untracking; + } + } + function validate_effect(rune) { + if (active_effect === null) { + if (active_reaction === null) { + effect_orphan(); + } + effect_in_unowned_derived(); + } + if (is_destroying_effect) { + effect_in_teardown(); + } + } + function push_effect(effect2, parent_effect) { + var parent_last = parent_effect.last; + if (parent_last === null) { + parent_effect.last = parent_effect.first = effect2; + } else { + parent_last.next = effect2; + effect2.prev = parent_last; + parent_effect.last = effect2; + } + } + function create_effect(type, fn) { + var parent = active_effect; + if (parent !== null && (parent.f & INERT) !== 0) { + type |= INERT; + } + var effect2 = { + ctx: component_context, + deps: null, + nodes: null, + f: type | DIRTY | CONNECTED, + first: null, + fn, + last: null, + next: null, + parent, + b: parent && parent.b, + prev: null, + teardown: null, + wv: 0, + ac: null + }; + current_batch?.register_created_effect(effect2); + var e = effect2; + if ((type & EFFECT) !== 0) { + if (collected_effects !== null) { + collected_effects.push(effect2); + } else { + Batch.ensure().schedule(effect2); + } + } else if (fn !== null) { + try { + update_effect(effect2); + } catch (e2) { + destroy_effect(effect2); + throw e2; + } + if (e.deps === null && e.teardown === null && e.nodes === null && e.first === e.last && // either `null`, or a singular child + (e.f & EFFECT_PRESERVED) === 0) { + e = e.first; + if ((type & BLOCK_EFFECT) !== 0 && (type & EFFECT_TRANSPARENT) !== 0 && e !== null) { + e.f |= EFFECT_TRANSPARENT; + } + } + } + if (e !== null) { + e.parent = parent; + if (parent !== null) { + push_effect(e, parent); + } + if (active_reaction !== null && (active_reaction.f & DERIVED) !== 0 && (type & ROOT_EFFECT) === 0) { + var derived2 = ( + /** @type {Derived} */ + active_reaction + ); + (derived2.effects ??= []).push(e); + } + } + return effect2; + } + function effect_tracking() { + return active_reaction !== null && !untracking; + } + function teardown(fn) { + const effect2 = create_effect(RENDER_EFFECT, null); + set_signal_status(effect2, CLEAN); + effect2.teardown = fn; + return effect2; + } + function user_effect(fn) { + validate_effect(); + var flags2 = ( + /** @type {Effect} */ + active_effect.f + ); + var defer = !active_reaction && (flags2 & BRANCH_EFFECT) !== 0 && (flags2 & REACTION_RAN) === 0; + if (defer) { + var context = ( + /** @type {ComponentContext} */ + component_context + ); + (context.e ??= []).push(fn); + } else { + return create_user_effect(fn); + } + } + function create_user_effect(fn) { + return create_effect(EFFECT | USER_EFFECT, fn); + } + function effect_root(fn) { + Batch.ensure(); + const effect2 = create_effect(ROOT_EFFECT | EFFECT_PRESERVED, fn); + return () => { + destroy_effect(effect2); + }; + } + function component_root(fn) { + Batch.ensure(); + const effect2 = create_effect(ROOT_EFFECT | EFFECT_PRESERVED, fn); + return (options = {}) => { + return new Promise((fulfil) => { + if (options.outro) { + pause_effect(effect2, () => { + destroy_effect(effect2); + fulfil(void 0); + }); + } else { + destroy_effect(effect2); + fulfil(void 0); + } + }); + }; + } + function effect(fn) { + return create_effect(EFFECT, fn); + } + function async_effect(fn) { + return create_effect(ASYNC | EFFECT_PRESERVED, fn); + } + function render_effect(fn, flags2 = 0) { + return create_effect(RENDER_EFFECT | flags2, fn); + } + function template_effect(fn, sync = [], async = [], blockers = []) { + flatten(blockers, sync, async, (values) => { + create_effect(RENDER_EFFECT, () => fn(...values.map(get))); + }); + } + function block(fn, flags2 = 0) { + var effect2 = create_effect(BLOCK_EFFECT | flags2, fn); + return effect2; + } + function managed(fn, flags2 = 0) { + var effect2 = create_effect(MANAGED_EFFECT | flags2, fn); + return effect2; + } + function branch(fn) { + return create_effect(BRANCH_EFFECT | EFFECT_PRESERVED, fn); + } + function execute_effect_teardown(effect2) { + var teardown2 = effect2.teardown; + if (teardown2 !== null) { + const previously_destroying_effect = is_destroying_effect; + const previous_reaction = active_reaction; + set_is_destroying_effect(true); + set_active_reaction(null); + try { + teardown2.call(null); + } finally { + set_is_destroying_effect(previously_destroying_effect); + set_active_reaction(previous_reaction); + } + } + } + function destroy_effect_children(signal, remove_dom = false) { + var effect2 = signal.first; + signal.first = signal.last = null; + while (effect2 !== null) { + const controller = effect2.ac; + if (controller !== null) { + without_reactive_context(() => { + controller.abort(STALE_REACTION); + }); + } + var next2 = effect2.next; + if ((effect2.f & ROOT_EFFECT) !== 0) { + effect2.parent = null; + } else { + destroy_effect(effect2, remove_dom); + } + effect2 = next2; + } + } + function destroy_block_effect_children(signal) { + var effect2 = signal.first; + while (effect2 !== null) { + var next2 = effect2.next; + if ((effect2.f & BRANCH_EFFECT) === 0) { + destroy_effect(effect2); + } + effect2 = next2; + } + } + function destroy_effect(effect2, remove_dom = true) { + var removed = false; + if ((remove_dom || (effect2.f & HEAD_EFFECT) !== 0) && effect2.nodes !== null && effect2.nodes.end !== null) { + remove_effect_dom( + effect2.nodes.start, + /** @type {TemplateNode} */ + effect2.nodes.end + ); + removed = true; + } + set_signal_status(effect2, DESTROYING); + destroy_effect_children(effect2, remove_dom && !removed); + remove_reactions(effect2, 0); + var transitions = effect2.nodes && effect2.nodes.t; + if (transitions !== null) { + for (const transition of transitions) { + transition.stop(); + } + } + execute_effect_teardown(effect2); + effect2.f ^= DESTROYING; + effect2.f |= DESTROYED; + var parent = effect2.parent; + if (parent !== null && parent.first !== null) { + unlink_effect(effect2); + } + effect2.next = effect2.prev = effect2.teardown = effect2.ctx = effect2.deps = effect2.fn = effect2.nodes = effect2.ac = effect2.b = null; + } + function remove_effect_dom(node, end) { + while (node !== null) { + var next2 = node === end ? null : /* @__PURE__ */ get_next_sibling(node); + node.remove(); + node = next2; + } + } + function unlink_effect(effect2) { + var parent = effect2.parent; + var prev = effect2.prev; + var next2 = effect2.next; + if (prev !== null) prev.next = next2; + if (next2 !== null) next2.prev = prev; + if (parent !== null) { + if (parent.first === effect2) parent.first = next2; + if (parent.last === effect2) parent.last = prev; + } + } + function pause_effect(effect2, callback, destroy = true) { + var transitions = []; + pause_children(effect2, transitions, true); + var fn = () => { + if (destroy) destroy_effect(effect2); + if (callback) callback(); + }; + var remaining = transitions.length; + if (remaining > 0) { + var check = () => --remaining || fn(); + for (var transition of transitions) { + transition.out(check); + } + } else { + fn(); + } + } + function pause_children(effect2, transitions, local) { + if ((effect2.f & INERT) !== 0) return; + effect2.f ^= INERT; + var t = effect2.nodes && effect2.nodes.t; + if (t !== null) { + for (const transition of t) { + if (transition.is_global || local) { + transitions.push(transition); + } + } + } + var child2 = effect2.first; + while (child2 !== null) { + var sibling2 = child2.next; + if ((child2.f & ROOT_EFFECT) === 0) { + var transparent = (child2.f & EFFECT_TRANSPARENT) !== 0 || // If this is a branch effect without a block effect parent, + // it means the parent block effect was pruned. In that case, + // transparency information was transferred to the branch effect. + (child2.f & BRANCH_EFFECT) !== 0 && (effect2.f & BLOCK_EFFECT) !== 0; + pause_children(child2, transitions, transparent ? local : false); + } + child2 = sibling2; + } + } + function resume_effect(effect2) { + resume_children(effect2, true); + } + function resume_children(effect2, local) { + if ((effect2.f & INERT) === 0) return; + effect2.f ^= INERT; + if ((effect2.f & CLEAN) === 0) { + set_signal_status(effect2, DIRTY); + Batch.ensure().schedule(effect2); + } + var child2 = effect2.first; + while (child2 !== null) { + var sibling2 = child2.next; + var transparent = (child2.f & EFFECT_TRANSPARENT) !== 0 || (child2.f & BRANCH_EFFECT) !== 0; + resume_children(child2, transparent ? local : false); + child2 = sibling2; + } + var t = effect2.nodes && effect2.nodes.t; + if (t !== null) { + for (const transition of t) { + if (transition.is_global || local) { + transition.in(); + } + } + } + } + function move_effect(effect2, fragment) { + if (!effect2.nodes) return; + var node = effect2.nodes.start; + var end = effect2.nodes.end; + while (node !== null) { + var next2 = node === end ? null : /* @__PURE__ */ get_next_sibling(node); + fragment.append(node); + node = next2; + } + } + function store(defaultValue) { + const scope = { + get: (name) => { + return get$1(scope.store)[name]; + }, + set: (name, value) => { + if (typeof name === "string") { + Object.assign(get$1(scope.store), { + [name]: value + }); + } else { + Object.assign(get$1(scope.store), name); + } + scope.store.set(get$1(scope.store)); + }, + store: writable(defaultValue) + }; + return scope; + } + globalThis.$altcha = globalThis.$altcha || { + algorithms: /* @__PURE__ */ new Map(), + defaults: store({}), + i18n: store({}), + instances: /* @__PURE__ */ new Set(), + plugins: /* @__PURE__ */ new Set() + }; + const i18n = { + ariaLinkLabel: "Altcha (official website)", + cancel: "Cancel", + enterCode: "Enter code", + enterCodeAria: "Enter code you hear. Press Space to play audio.", + enterCodeFromImage: "To proceed, please enter the code from the image below.", + error: "Verification failed. Try again later.", + expired: "Verification expired. Try again.", + footer: 'Protected by ALTCHA', + getAudioChallenge: "Get an audio challenge", + label: "I'm not a robot", + loading: "Loading...", + reload: "Reload", + verify: "Verify", + verificationRequired: "Verification required!", + verified: "Verified", + verifying: "Verifying...", + waitAlert: "Verifying... please wait." + }; + globalThis.$altcha.i18n.set("en", i18n); + const PUBLIC_VERSION = "5"; + if (typeof window !== "undefined") { + ((window.__svelte ??= {}).v ??= /* @__PURE__ */ new Set()).add(PUBLIC_VERSION); + } + const event_symbol = /* @__PURE__ */ Symbol("events"); + const all_registered_events = /* @__PURE__ */ new Set(); + const root_event_handles = /* @__PURE__ */ new Set(); + function create_event(event_name, dom, handler, options = {}) { + function target_handler(event2) { + if (!options.capture) { + handle_event_propagation.call(dom, event2); + } + if (!event2.cancelBubble) { + return without_reactive_context(() => { + return handler?.call(this, event2); + }); + } + } + if (event_name.startsWith("pointer") || event_name.startsWith("touch") || event_name === "wheel") { + queue_micro_task(() => { + dom.addEventListener(event_name, target_handler, options); + }); + } else { + dom.addEventListener(event_name, target_handler, options); + } + return target_handler; + } + function event(event_name, dom, handler, capture2, passive) { + var options = { capture: capture2, passive }; + var target_handler = create_event(event_name, dom, handler, options); + if (dom === document.body || // @ts-ignore + dom === window || // @ts-ignore + dom === document || // Firefox has quirky behavior, it can happen that we still get "canplay" events when the element is already removed + dom instanceof HTMLMediaElement) { + teardown(() => { + dom.removeEventListener(event_name, target_handler, options); + }); + } + } + function delegated(event_name, element, handler) { + (element[event_symbol] ??= {})[event_name] = handler; + } + function delegate(events) { + for (var i = 0; i < events.length; i++) { + all_registered_events.add(events[i]); + } + for (var fn of root_event_handles) { + fn(events); + } + } + let last_propagated_event = null; + function handle_event_propagation(event2) { + var handler_element = this; + var owner_document = ( + /** @type {Node} */ + handler_element.ownerDocument + ); + var event_name = event2.type; + var path = event2.composedPath?.() || []; + var current_target = ( + /** @type {null | Element} */ + path[0] || event2.target + ); + last_propagated_event = event2; + var path_idx = 0; + var handled_at = last_propagated_event === event2 && event2[event_symbol]; + if (handled_at) { + var at_idx = path.indexOf(handled_at); + if (at_idx !== -1 && (handler_element === document || handler_element === /** @type {any} */ + window)) { + event2[event_symbol] = handler_element; + return; + } + var handler_idx = path.indexOf(handler_element); + if (handler_idx === -1) { + return; + } + if (at_idx <= handler_idx) { + path_idx = at_idx; + } + } + current_target = /** @type {Element} */ + path[path_idx] || event2.target; + if (current_target === handler_element) return; + define_property(event2, "currentTarget", { + configurable: true, + get() { + return current_target || owner_document; + } + }); + var previous_reaction = active_reaction; + var previous_effect = active_effect; + set_active_reaction(null); + set_active_effect(null); + try { + var throw_error; + var other_errors = []; + while (current_target !== null) { + var parent_element = current_target.assignedSlot || current_target.parentNode || /** @type {any} */ + current_target.host || null; + try { + var delegated2 = current_target[event_symbol]?.[event_name]; + if (delegated2 != null && (!/** @type {any} */ + current_target.disabled || // DOM could've been updated already by the time this is reached, so we check this as well + // -> the target could not have been disabled because it emits the event in the first place + event2.target === current_target)) { + delegated2.call(current_target, event2); + } + } catch (error) { + if (throw_error) { + other_errors.push(error); + } else { + throw_error = error; + } + } + if (event2.cancelBubble || parent_element === handler_element || parent_element === null) { + break; + } + current_target = parent_element; + } + if (throw_error) { + for (let error of other_errors) { + queueMicrotask(() => { + throw error; + }); + } + throw throw_error; + } + } finally { + event2[event_symbol] = handler_element; + delete event2.currentTarget; + set_active_reaction(previous_reaction); + set_active_effect(previous_effect); + } + } + const policy = ( + // We gotta write it like this because after downleveling the pure comment may end up in the wrong location + globalThis?.window?.trustedTypes && /* @__PURE__ */ globalThis.window.trustedTypes.createPolicy("svelte-trusted-html", { + /** @param {string} html */ + createHTML: (html2) => { + return html2; + } + }) + ); + function create_trusted_html(html2) { + return ( + /** @type {string} */ + policy?.createHTML(html2) ?? html2 + ); + } + function create_fragment_from_html(html2) { + var elem = create_element("template"); + elem.innerHTML = create_trusted_html(html2.replaceAll("", "")); + return elem.content; + } + function assign_nodes(start, end) { + var effect2 = ( + /** @type {Effect} */ + active_effect + ); + if (effect2.nodes === null) { + effect2.nodes = { start, end, a: null, t: null }; + } + } + // @__NO_SIDE_EFFECTS__ + function from_html(content, flags2) { + var is_fragment = (flags2 & TEMPLATE_FRAGMENT) !== 0; + var use_import_node = (flags2 & TEMPLATE_USE_IMPORT_NODE) !== 0; + var node; + var has_start = !content.startsWith(""); + return () => { + if (hydrating) { + assign_nodes(hydrate_node, null); + return hydrate_node; + } + if (node === void 0) { + node = create_fragment_from_html(has_start ? content : "" + content); + if (!is_fragment) node = /** @type {TemplateNode} */ + /* @__PURE__ */ get_first_child(node); + } + var clone = ( + /** @type {TemplateNode} */ + use_import_node || is_firefox ? document.importNode(node, true) : node.cloneNode(true) + ); + if (is_fragment) { + var start = ( + /** @type {TemplateNode} */ + /* @__PURE__ */ get_first_child(clone) + ); + var end = ( + /** @type {TemplateNode} */ + clone.lastChild + ); + assign_nodes(start, end); + } else { + assign_nodes(clone, clone); + } + return clone; + }; + } + // @__NO_SIDE_EFFECTS__ + function from_namespace(content, flags2, ns = "svg") { + var has_start = !content.startsWith(""); + var wrapped = `<${ns}>${has_start ? content : "" + content}`; + var node; + return () => { + if (hydrating) { + assign_nodes(hydrate_node, null); + return hydrate_node; + } + if (!node) { + var fragment = ( + /** @type {DocumentFragment} */ + create_fragment_from_html(wrapped) + ); + var root2 = ( + /** @type {Element} */ + /* @__PURE__ */ get_first_child(fragment) + ); + { + node = /** @type {Element} */ + /* @__PURE__ */ get_first_child(root2); + } + } + var clone = ( + /** @type {TemplateNode} */ + node.cloneNode(true) + ); + { + assign_nodes(clone, clone); + } + return clone; + }; + } + // @__NO_SIDE_EFFECTS__ + function from_svg(content, flags2) { + return /* @__PURE__ */ from_namespace(content, flags2, "svg"); + } + function text(value = "") { + if (!hydrating) { + var t = create_text(value + ""); + assign_nodes(t, t); + return t; + } + var node = hydrate_node; + if (node.nodeType !== TEXT_NODE) { + node.before(node = create_text()); + set_hydrate_node(node); + } else { + merge_text_nodes( + /** @type {Text} */ + node + ); + } + assign_nodes(node, node); + return node; + } + function comment() { + if (hydrating) { + assign_nodes(hydrate_node, null); + return hydrate_node; + } + var frag = document.createDocumentFragment(); + var start = document.createComment(""); + var anchor = create_text(); + frag.append(start, anchor); + assign_nodes(start, anchor); + return frag; + } + function append(anchor, dom) { + if (hydrating) { + var effect2 = ( + /** @type {Effect & { nodes: EffectNodes }} */ + active_effect + ); + if ((effect2.f & REACTION_RAN) === 0 || effect2.nodes.end === null) { + effect2.nodes.end = hydrate_node; + } + hydrate_next(); + return; + } + if (anchor === null) { + return; + } + anchor.before( + /** @type {Node} */ + dom + ); + } + function is_capture_event(name) { + return name.endsWith("capture") && name !== "gotpointercapture" && name !== "lostpointercapture"; + } + const DELEGATED_EVENTS = [ + "beforeinput", + "click", + "change", + "dblclick", + "contextmenu", + "focusin", + "focusout", + "input", + "keydown", + "keyup", + "mousedown", + "mousemove", + "mouseout", + "mouseover", + "mouseup", + "pointerdown", + "pointermove", + "pointerout", + "pointerover", + "pointerup", + "touchend", + "touchmove", + "touchstart" + ]; + function can_delegate_event(event_name) { + return DELEGATED_EVENTS.includes(event_name); + } + const ATTRIBUTE_ALIASES = { + // no `class: 'className'` because we handle that separately + formnovalidate: "formNoValidate", + ismap: "isMap", + nomodule: "noModule", + playsinline: "playsInline", + readonly: "readOnly", + defaultvalue: "defaultValue", + defaultchecked: "defaultChecked", + srcobject: "srcObject", + novalidate: "noValidate", + allowfullscreen: "allowFullscreen", + disablepictureinpicture: "disablePictureInPicture", + disableremoteplayback: "disableRemotePlayback" + }; + function normalize_attribute(name) { + name = name.toLowerCase(); + return ATTRIBUTE_ALIASES[name] ?? name; + } + const PASSIVE_EVENTS = ["touchstart", "touchmove"]; + function is_passive_event(name) { + return PASSIVE_EVENTS.includes(name); + } + function set_text(text2, value) { + var str = value == null ? "" : typeof value === "object" ? `${value}` : value; + if (str !== /** @type {any} */ + (text2[TEXT_CACHE] ??= text2.nodeValue)) { + text2[TEXT_CACHE] = str; + text2.nodeValue = `${str}`; + } + } + function mount(component2, options) { + return _mount(component2, options); + } + function hydrate(component2, options) { + init_operations(); + options.intro = options.intro ?? false; + const target = options.target; + const was_hydrating = hydrating; + const previous_hydrate_node = hydrate_node; + try { + var anchor = /* @__PURE__ */ get_first_child(target); + while (anchor && (anchor.nodeType !== COMMENT_NODE || /** @type {Comment} */ + anchor.data !== HYDRATION_START)) { + anchor = /* @__PURE__ */ get_next_sibling(anchor); + } + if (!anchor) { + throw HYDRATION_ERROR; + } + set_hydrating(true); + set_hydrate_node( + /** @type {Comment} */ + anchor + ); + const instance = _mount(component2, { ...options, anchor }); + set_hydrating(false); + return ( + /** @type {Exports} */ + instance + ); + } catch (error) { + if (error instanceof Error && error.message.split("\n").some((line) => line.startsWith("https://svelte.dev/e/"))) { + throw error; + } + if (error !== HYDRATION_ERROR) { + console.warn("Failed to hydrate: ", error); + } + if (options.recover === false) { + hydration_failed(); + } + init_operations(); + clear_text_content(target); + set_hydrating(false); + return mount(component2, options); + } finally { + set_hydrating(was_hydrating); + set_hydrate_node(previous_hydrate_node); + } + } + const listeners = /* @__PURE__ */ new Map(); + function _mount(Component, { target, anchor, props = {}, events, context, intro = true, transformError }) { + init_operations(); + var component2 = void 0; + var unmount2 = component_root(() => { + var anchor_node = anchor ?? target.appendChild(create_text()); + boundary( + /** @type {TemplateNode} */ + anchor_node, + { + pending: () => { + } + }, + (anchor_node2) => { + push({}); + var ctx = ( + /** @type {ComponentContext} */ + component_context + ); + if (context) ctx.c = context; + if (events) { + props.$$events = events; + } + if (hydrating) { + assign_nodes( + /** @type {TemplateNode} */ + anchor_node2, + null + ); + } + component2 = Component(anchor_node2, props) || {}; + if (hydrating) { + active_effect.nodes.end = hydrate_node; + if (hydrate_node === null || hydrate_node.nodeType !== COMMENT_NODE || /** @type {Comment} */ + hydrate_node.data !== HYDRATION_END) { + hydration_mismatch(); + throw HYDRATION_ERROR; + } + } + pop(); + }, + transformError + ); + var registered_events = /* @__PURE__ */ new Set(); + var event_handle = (events2) => { + for (var i = 0; i < events2.length; i++) { + var event_name = events2[i]; + if (registered_events.has(event_name)) continue; + registered_events.add(event_name); + var passive = is_passive_event(event_name); + for (const node of [target, document]) { + var counts = listeners.get(node); + if (counts === void 0) { + counts = /* @__PURE__ */ new Map(); + listeners.set(node, counts); + } + var count = counts.get(event_name); + if (count === void 0) { + node.addEventListener(event_name, handle_event_propagation, { passive }); + counts.set(event_name, 1); + } else { + counts.set(event_name, count + 1); + } + } + } + }; + event_handle(array_from(all_registered_events)); + root_event_handles.add(event_handle); + return () => { + for (var event_name of registered_events) { + for (const node of [target, document]) { + var counts = ( + /** @type {Map} */ + listeners.get(node) + ); + var count = ( + /** @type {number} */ + counts.get(event_name) + ); + if (--count == 0) { + node.removeEventListener(event_name, handle_event_propagation); + counts.delete(event_name); + if (counts.size === 0) { + listeners.delete(node); + } + } else { + counts.set(event_name, count); + } + } + } + root_event_handles.delete(event_handle); + if (anchor_node !== anchor) { + anchor_node.parentNode?.removeChild(anchor_node); + } + }; + }); + mounted_components.set(component2, unmount2); + return component2; + } + let mounted_components = /* @__PURE__ */ new WeakMap(); + function unmount(component2, options) { + const fn = mounted_components.get(component2); + if (fn) { + mounted_components.delete(component2); + return fn(options); + } + return Promise.resolve(); + } + class BranchManager { + /** @type {TemplateNode} */ + anchor; + /** @type {Map} */ + #batches = /* @__PURE__ */ new Map(); + /** + * Map of keys to effects that are currently rendered in the DOM. + * These effects are visible and actively part of the document tree. + * Example: + * ``` + * {#if condition} + * foo + * {:else} + * bar + * {/if} + * ``` + * Can result in the entries `true->Effect` and `false->Effect` + * @type {Map} + */ + #onscreen = /* @__PURE__ */ new Map(); + /** + * Similar to #onscreen with respect to the keys, but contains branches that are not yet + * in the DOM, because their insertion is deferred. + * @type {Map} + */ + #offscreen = /* @__PURE__ */ new Map(); + /** + * Keys of effects that are currently outroing + * @type {Set} + */ + #outroing = /* @__PURE__ */ new Set(); + /** + * Whether to pause (i.e. outro) on change, or destroy immediately. + * This is necessary for `` + */ + #transition = true; + /** + * @param {TemplateNode} anchor + * @param {boolean} transition + */ + constructor(anchor, transition = true) { + this.anchor = anchor; + this.#transition = transition; + } + /** + * @param {Batch} batch + */ + #commit = (batch) => { + if (!this.#batches.has(batch)) return; + var key2 = ( + /** @type {Key} */ + this.#batches.get(batch) + ); + var onscreen = this.#onscreen.get(key2); + if (onscreen) { + resume_effect(onscreen); + this.#outroing.delete(key2); + } else { + var offscreen = this.#offscreen.get(key2); + if (offscreen) { + this.#onscreen.set(key2, offscreen.effect); + this.#offscreen.delete(key2); + offscreen.fragment.lastChild.remove(); + this.anchor.before(offscreen.fragment); + onscreen = offscreen.effect; + } + } + for (const [b, k] of this.#batches) { + this.#batches.delete(b); + if (b === batch) { + break; + } + const offscreen2 = this.#offscreen.get(k); + if (offscreen2) { + destroy_effect(offscreen2.effect); + this.#offscreen.delete(k); + } + } + for (const [k, effect2] of this.#onscreen) { + if (k === key2 || this.#outroing.has(k)) continue; + const on_destroy = () => { + const keys = Array.from(this.#batches.values()); + if (keys.includes(k)) { + var fragment = document.createDocumentFragment(); + move_effect(effect2, fragment); + fragment.append(create_text()); + this.#offscreen.set(k, { effect: effect2, fragment }); + } else { + destroy_effect(effect2); + } + this.#outroing.delete(k); + this.#onscreen.delete(k); + }; + if (this.#transition || !onscreen) { + this.#outroing.add(k); + pause_effect(effect2, on_destroy, false); + } else { + on_destroy(); + } + } + }; + /** + * @param {Batch} batch + */ + #discard = (batch) => { + this.#batches.delete(batch); + const keys = Array.from(this.#batches.values()); + for (const [k, branch2] of this.#offscreen) { + if (!keys.includes(k)) { + destroy_effect(branch2.effect); + this.#offscreen.delete(k); + } + } + }; + /** + * + * @param {any} key + * @param {null | ((target: TemplateNode) => void)} fn + */ + ensure(key2, fn) { + var batch = ( + /** @type {Batch} */ + current_batch + ); + var defer = should_defer_append(); + if (fn && !this.#onscreen.has(key2) && !this.#offscreen.has(key2)) { + if (defer) { + var fragment = document.createDocumentFragment(); + var target = create_text(); + fragment.append(target); + this.#offscreen.set(key2, { + effect: branch(() => fn(target)), + fragment + }); + } else { + this.#onscreen.set( + key2, + branch(() => fn(this.anchor)) + ); + } + } + this.#batches.set(batch, key2); + if (defer) { + for (const [k, effect2] of this.#onscreen) { + if (k === key2) { + batch.unskip_effect(effect2); + } else { + batch.skip_effect(effect2); + } + } + for (const [k, branch2] of this.#offscreen) { + if (k === key2) { + batch.unskip_effect(branch2.effect); + } else { + batch.skip_effect(branch2.effect); + } + } + batch.oncommit(this.#commit); + batch.ondiscard(this.#discard); + } else { + if (hydrating) { + this.anchor = hydrate_node; + } + this.#commit(batch); + } + } + } + function snippet(node, get_snippet, ...args) { + var branches = new BranchManager(node); + block(() => { + const snippet2 = get_snippet() ?? null; + branches.ensure(snippet2, snippet2 && ((anchor) => snippet2(anchor, ...args))); + }, EFFECT_TRANSPARENT); + } + function onMount(fn) { + if (component_context === null) { + lifecycle_outside_component(); + } + { + user_effect(() => { + const cleanup = untrack(fn); + if (typeof cleanup === "function") return ( + /** @type {() => void} */ + cleanup + ); + }); + } + } + function if_block(node, fn, elseif = false) { + var marker; + if (hydrating) { + marker = hydrate_node; + hydrate_next(); + } + var branches = new BranchManager(node); + var flags2 = elseif ? EFFECT_TRANSPARENT : 0; + function update_branch(key2, fn2) { + if (hydrating) { + var data = read_hydration_instruction( + /** @type {TemplateNode} */ + marker + ); + if (key2 !== parseInt(data.substring(1))) { + var anchor = skip_nodes(); + set_hydrate_node(anchor); + branches.anchor = anchor; + set_hydrating(false); + branches.ensure(key2, fn2); + set_hydrating(true); + return; + } + } + branches.ensure(key2, fn2); + } + block(() => { + var has_branch = false; + fn((fn2, key2 = 0) => { + has_branch = true; + update_branch(key2, fn2); + }); + if (!has_branch) { + update_branch(-1, null); + } + }, flags2); + } + const NAN = /* @__PURE__ */ Symbol("NaN"); + function key(node, get_key, render_fn) { + if (hydrating) { + hydrate_next(); + } + var branches = new BranchManager(node); + block(() => { + var key2 = get_key(); + if (key2 !== key2) { + key2 = /** @type {any} */ + NAN; + } + branches.ensure(key2, render_fn); + }); + } + function html(node, get_value, is_controlled = false, svg = false, mathml = false, skip_warning = false) { + var anchor = node; + var value = ""; + if (is_controlled) { + var parent_node = ( + /** @type {Element} */ + node + ); + if (hydrating) { + anchor = set_hydrate_node(/* @__PURE__ */ get_first_child(parent_node)); + } + } + template_effect(() => { + var effect2 = ( + /** @type {Effect} */ + active_effect + ); + if (value === (value = get_value() ?? "")) { + if (hydrating) hydrate_next(); + return; + } + if (is_controlled && !hydrating) { + effect2.nodes = null; + parent_node.innerHTML = /** @type {string} */ + value; + if (value !== "") { + assign_nodes( + /** @type {TemplateNode} */ + /* @__PURE__ */ get_first_child(parent_node), + /** @type {TemplateNode} */ + parent_node.lastChild + ); + } + return; + } + if (effect2.nodes !== null) { + remove_effect_dom( + effect2.nodes.start, + /** @type {TemplateNode} */ + effect2.nodes.end + ); + effect2.nodes = null; + } + if (value === "") return; + if (hydrating) { + hydrate_node.data; + var next2 = hydrate_next(); + var last = next2; + while (next2 !== null && (next2.nodeType !== COMMENT_NODE || /** @type {Comment} */ + next2.data !== "")) { + last = next2; + next2 = /* @__PURE__ */ get_next_sibling(next2); + } + if (next2 === null) { + hydration_mismatch(); + throw HYDRATION_ERROR; + } + assign_nodes(hydrate_node, last); + anchor = set_hydrate_node(next2); + return; + } + var ns = svg ? NAMESPACE_SVG : mathml ? NAMESPACE_MATHML : void 0; + var wrapper = ( + /** @type {HTMLTemplateElement | SVGElement | MathMLElement} */ + create_element(svg ? "svg" : mathml ? "math" : "template", ns) + ); + wrapper.innerHTML = /** @type {any} */ + value; + var node2 = svg || mathml ? wrapper : ( + /** @type {HTMLTemplateElement} */ + wrapper.content + ); + assign_nodes( + /** @type {TemplateNode} */ + /* @__PURE__ */ get_first_child(node2), + /** @type {TemplateNode} */ + node2.lastChild + ); + if (svg || mathml) { + while (/* @__PURE__ */ get_first_child(node2)) { + anchor.before( + /** @type {TemplateNode} */ + /* @__PURE__ */ get_first_child(node2) + ); + } + } else { + anchor.before(node2); + } + }); + } + function component(node, get_component, render_fn) { + var hydration_start_node; + if (hydrating) { + hydration_start_node = hydrate_node; + hydrate_next(); + } + var branches = new BranchManager(node); + block(() => { + var component2 = get_component() ?? null; + if (hydrating) { + var data = read_hydration_instruction( + /** @type {TemplateNode} */ + hydration_start_node + ); + var server_had_component = data === HYDRATION_START; + var client_has_component = component2 !== null; + if (server_had_component !== client_has_component) { + var anchor = skip_nodes(); + set_hydrate_node(anchor); + branches.anchor = anchor; + set_hydrating(false); + branches.ensure(component2, component2 && ((target) => render_fn(target, component2))); + set_hydrating(true); + return; + } + } + branches.ensure(component2, component2 && ((target) => render_fn(target, component2))); + }, EFFECT_TRANSPARENT); + } + function attach(node, get_fn) { + var fn = void 0; + var e; + managed(() => { + if (fn !== (fn = get_fn())) { + if (e) { + destroy_effect(e); + e = null; + } + if (fn) { + e = branch(() => { + effect(() => ( + /** @type {(node: Element) => void} */ + fn(node) + )); + }); + } + } + }); + } + function r(e) { + var t, f, n = ""; + if ("string" == typeof e || "number" == typeof e) n += e; + else if ("object" == typeof e) if (Array.isArray(e)) { + var o = e.length; + for (t = 0; t < o; t++) e[t] && (f = r(e[t])) && (n && (n += " "), n += f); + } else for (f in e) e[f] && (n && (n += " "), n += f); + return n; + } + function clsx$1() { + for (var e, t, f = 0, n = "", o = arguments.length; f < o; f++) (e = arguments[f]) && (t = r(e)) && (n && (n += " "), n += t); + return n; + } + function clsx(value) { + if (typeof value === "object") { + return clsx$1(value); + } else { + return value ?? ""; + } + } + const whitespace = [..." \n\r\f \v\uFEFF"]; + function to_class(value, hash, directives) { + var classname = value == null ? "" : "" + value; + if (directives) { + for (var key2 of Object.keys(directives)) { + if (directives[key2]) { + classname = classname ? classname + " " + key2 : key2; + } else if (classname.length) { + var len = key2.length; + var a = 0; + while ((a = classname.indexOf(key2, a)) >= 0) { + var b = a + len; + if ((a === 0 || whitespace.includes(classname[a - 1])) && (b === classname.length || whitespace.includes(classname[b]))) { + classname = (a === 0 ? "" : classname.substring(0, a)) + classname.substring(b + 1); + } else { + a = b; + } + } + } + } + } + return classname === "" ? null : classname; + } + function append_styles(styles, important = false) { + var separator = important ? " !important;" : ";"; + var css = ""; + for (var key2 of Object.keys(styles)) { + var value = styles[key2]; + if (value != null && value !== "") { + css += " " + key2 + ": " + value + separator; + } + } + return css; + } + function to_css_name(name) { + if (name[0] !== "-" || name[1] !== "-") { + return name.toLowerCase(); + } + return name; + } + function to_style(value, styles) { + if (styles) { + var new_style = ""; + var normal_styles; + var important_styles; + if (Array.isArray(styles)) { + normal_styles = styles[0]; + important_styles = styles[1]; + } else { + normal_styles = styles; + } + if (value) { + value = String(value).replaceAll(/\s*\/\*.*?\*\/\s*/g, "").trim(); + var in_str = false; + var in_apo = 0; + var in_comment = false; + var reserved_names = []; + if (normal_styles) { + reserved_names.push(...Object.keys(normal_styles).map(to_css_name)); + } + if (important_styles) { + reserved_names.push(...Object.keys(important_styles).map(to_css_name)); + } + var start_index = 0; + var name_index = -1; + const len = value.length; + for (var i = 0; i < len; i++) { + var c = value[i]; + if (in_comment) { + if (c === "/" && value[i - 1] === "*") { + in_comment = false; + } + } else if (in_str) { + if (in_str === c) { + in_str = false; + } + } else if (c === "/" && value[i + 1] === "*") { + in_comment = true; + } else if (c === '"' || c === "'") { + in_str = c; + } else if (c === "(") { + in_apo++; + } else if (c === ")") { + in_apo--; + } + if (!in_comment && in_str === false && in_apo === 0) { + if (c === ":" && name_index === -1) { + name_index = i; + } else if (c === ";" || i === len - 1) { + if (name_index !== -1) { + var name = to_css_name(value.substring(start_index, name_index).trim()); + if (!reserved_names.includes(name)) { + if (c !== ";") { + i++; + } + var property = value.substring(start_index, i).trim(); + new_style += " " + property + ";"; + } + } + start_index = i + 1; + name_index = -1; + } + } + } + } + if (normal_styles) { + new_style += append_styles(normal_styles); + } + if (important_styles) { + new_style += append_styles(important_styles, true); + } + new_style = new_style.trim(); + return new_style === "" ? null : new_style; + } + return value == null ? null : String(value); + } + function set_class(dom, is_html, value, hash, prev_classes, next_classes) { + var prev = ( + /** @type {any} */ + dom[CLASS_CACHE] + ); + if (hydrating || prev !== value || prev === void 0) { + var next_class_name = to_class(value, hash, next_classes); + if (!hydrating || next_class_name !== dom.getAttribute("class")) { + if (next_class_name == null) { + dom.removeAttribute("class"); + } else if (is_html) { + dom.className = next_class_name; + } else { + dom.setAttribute("class", next_class_name); + } + } + dom[CLASS_CACHE] = value; + } else if (next_classes && prev_classes !== next_classes) { + for (var key2 in next_classes) { + var is_present = !!next_classes[key2]; + if (prev_classes == null || is_present !== !!prev_classes[key2]) { + dom.classList.toggle(key2, is_present); + } + } + } + return next_classes; + } + function update_styles(dom, prev = {}, next2, priority) { + for (var key2 in next2) { + var value = next2[key2]; + if (prev[key2] !== value) { + if (next2[key2] == null) { + dom.style.removeProperty(key2); + } else { + dom.style.setProperty(key2, value, priority); + } + } + } + } + function set_style(dom, value, prev_styles, next_styles) { + var prev = ( + /** @type {any} */ + dom[STYLE_CACHE] + ); + if (hydrating || prev !== value) { + var next_style_attr = to_style(value, next_styles); + if (!hydrating || next_style_attr !== dom.getAttribute("style")) { + if (next_style_attr == null) { + dom.removeAttribute("style"); + } else { + dom.style.cssText = next_style_attr; + } + } + dom[STYLE_CACHE] = value; + } else if (next_styles) { + if (Array.isArray(next_styles)) { + update_styles(dom, prev_styles?.[0], next_styles[0]); + update_styles(dom, prev_styles?.[1], next_styles[1], "important"); + } else { + update_styles(dom, prev_styles, next_styles); + } + } + return next_styles; + } + function select_option(select, value, mounting = false) { + if (select.multiple) { + if (value == void 0) { + return; + } + if (!is_array(value)) { + return select_multiple_invalid_value(); + } + for (var option of select.options) { + option.selected = value.includes(get_option_value(option)); + } + return; + } + for (option of select.options) { + var option_value = get_option_value(option); + if (is(option_value, value)) { + option.selected = true; + return; + } + } + if (!mounting || value !== void 0) { + select.selectedIndex = -1; + } + } + function init_select(select) { + var observer = new MutationObserver(() => { + select_option(select, select.__value); + }); + observer.observe(select, { + // Listen to option element changes + childList: true, + subtree: true, + // because of + // Listen to option element value attribute changes + // (doesn't get notified of select value changes, + // because that property is not reflected as an attribute) + attributes: true, + attributeFilter: ["value"] + }); + teardown(() => { + observer.disconnect(); + }); + } + function get_option_value(option) { + if ("__value" in option) { + return option.__value; + } else { + return option.value; + } + } + const CLASS = /* @__PURE__ */ Symbol("class"); + const STYLE = /* @__PURE__ */ Symbol("style"); + const IS_CUSTOM_ELEMENT = /* @__PURE__ */ Symbol("is custom element"); + const IS_HTML = /* @__PURE__ */ Symbol("is html"); + const LINK_TAG = IS_XHTML ? "link" : "LINK"; + const INPUT_TAG = IS_XHTML ? "input" : "INPUT"; + const OPTION_TAG = IS_XHTML ? "option" : "OPTION"; + const SELECT_TAG = IS_XHTML ? "select" : "SELECT"; + const PROGRESS_TAG = IS_XHTML ? "progress" : "PROGRESS"; + function remove_input_defaults(input) { + if (!hydrating) return; + var already_removed = false; + var remove_defaults = () => { + if (already_removed) return; + already_removed = true; + if (input.hasAttribute("value")) { + var value = input.value; + set_attribute(input, "value", null); + input.value = value; + } + if (input.hasAttribute("checked")) { + var checked = input.checked; + set_attribute(input, "checked", null); + input.checked = checked; + } + }; + input[FORM_RESET_HANDLER] = remove_defaults; + queue_micro_task(remove_defaults); + add_form_reset_listener(); + } + function set_value(element, value) { + var attributes = get_attributes(element); + if (attributes.value === (attributes.value = // treat null and undefined the same for the initial value + value ?? void 0) || // @ts-expect-error + // `progress` elements always need their value set when it's `0` + element.value === value && (value !== 0 || element.nodeName !== PROGRESS_TAG)) { + return; + } + element.value = value ?? ""; + } + function set_selected(element, selected) { + if (selected) { + if (!element.hasAttribute("selected")) { + element.setAttribute("selected", ""); + } + } else { + element.removeAttribute("selected"); + } + } + function set_attribute(element, attribute, value, skip_warning) { + var attributes = get_attributes(element); + if (hydrating) { + attributes[attribute] = element.getAttribute(attribute); + if (attribute === "src" || attribute === "srcset" || attribute === "href" && element.nodeName === LINK_TAG) { + return; + } + } + if (attributes[attribute] === (attributes[attribute] = value)) return; + if (attribute === "loading") { + element[LOADING_ATTR_SYMBOL] = value; + } + if (value == null) { + element.removeAttribute(attribute); + } else if (typeof value !== "string" && get_setters(element).includes(attribute)) { + element[attribute] = value; + } else { + element.setAttribute(attribute, value); + } + } + function set_attributes(element, prev, next2, css_hash, should_remove_defaults = false, skip_warning = false) { + if (hydrating && should_remove_defaults && element.nodeName === INPUT_TAG) { + var input = ( + /** @type {HTMLInputElement} */ + element + ); + var attribute = input.type === "checkbox" ? "defaultChecked" : "defaultValue"; + if (!(attribute in next2)) { + remove_input_defaults(input); + } + } + var attributes = get_attributes(element); + var is_custom_element = attributes[IS_CUSTOM_ELEMENT]; + var preserve_attribute_case = !attributes[IS_HTML]; + let is_hydrating_custom_element = hydrating && is_custom_element; + if (is_hydrating_custom_element) { + set_hydrating(false); + } + var current = prev || {}; + var is_option_element = element.nodeName === OPTION_TAG; + for (var key2 in prev) { + if (!(key2 in next2)) { + next2[key2] = null; + } + } + if (next2.class) { + next2.class = clsx(next2.class); + } else if (next2[CLASS]) { + next2.class = null; + } + if (next2[STYLE]) { + next2.style ??= null; + } + var setters = get_setters(element); + for (const key3 in next2) { + let value = next2[key3]; + if (is_option_element && key3 === "value" && value == null) { + element.value = element.__value = ""; + current[key3] = value; + continue; + } + if (key3 === "class") { + var is_html = element.namespaceURI === "http://www.w3.org/1999/xhtml"; + set_class(element, is_html, value, css_hash, prev?.[CLASS], next2[CLASS]); + current[key3] = value; + current[CLASS] = next2[CLASS]; + continue; + } + if (key3 === "style") { + set_style(element, value, prev?.[STYLE], next2[STYLE]); + current[key3] = value; + current[STYLE] = next2[STYLE]; + continue; + } + var prev_value = current[key3]; + if (value === prev_value && !(value === void 0 && element.hasAttribute(key3))) { + continue; + } + current[key3] = value; + var prefix = key3[0] + key3[1]; + if (prefix === "$$") continue; + if (prefix === "on") { + const opts = {}; + const event_handle_key = "$$" + key3; + let event_name = key3.slice(2); + var is_delegated = can_delegate_event(event_name); + if (is_capture_event(event_name)) { + event_name = event_name.slice(0, -7); + opts.capture = true; + } + if (!is_delegated && prev_value) { + if (value != null) continue; + element.removeEventListener(event_name, current[event_handle_key], opts); + current[event_handle_key] = null; + } + if (is_delegated) { + delegated(event_name, element, value); + delegate([event_name]); + } else if (value != null) { + let handle = function(evt) { + current[key3].call(this, evt); + }; + current[event_handle_key] = create_event(event_name, element, handle, opts); + } + } else if (key3 === "style") { + set_attribute(element, key3, value); + } else if (key3 === "autofocus") { + autofocus( + /** @type {HTMLElement} */ + element, + Boolean(value) + ); + } else if (!is_custom_element && (key3 === "__value" || key3 === "value" && value != null)) { + element.value = element.__value = value; + } else if (key3 === "selected" && is_option_element) { + set_selected( + /** @type {HTMLOptionElement} */ + element, + value + ); + } else { + var name = key3; + if (!preserve_attribute_case) { + name = normalize_attribute(name); + } + var is_default = name === "defaultValue" || name === "defaultChecked"; + if (value == null && !is_custom_element && !is_default) { + attributes[key3] = null; + if (name === "value" || name === "checked") { + let input2 = ( + /** @type {HTMLInputElement} */ + element + ); + const use_default = prev === void 0; + if (name === "value") { + let previous = input2.defaultValue; + input2.removeAttribute(name); + input2.defaultValue = previous; + input2.value = input2.__value = use_default ? previous : null; + } else { + let previous = input2.defaultChecked; + input2.removeAttribute(name); + input2.defaultChecked = previous; + input2.checked = use_default ? previous : false; + } + } else { + element.removeAttribute(key3); + } + } else if (is_default || setters.includes(name) && (is_custom_element || typeof value !== "string")) { + element[name] = value; + if (name in attributes) attributes[name] = UNINITIALIZED; + } else if (typeof value !== "function") { + set_attribute(element, name, value); + } + } + } + if (is_hydrating_custom_element) { + set_hydrating(true); + } + return current; + } + function attribute_effect(element, fn, sync = [], async = [], blockers = [], css_hash, should_remove_defaults = false, skip_warning = false) { + flatten(blockers, sync, async, (values) => { + var prev = void 0; + var effects = {}; + var is_select = element.nodeName === SELECT_TAG; + var inited = false; + managed(() => { + var next2 = fn(...values.map(get)); + var current = set_attributes( + element, + prev, + next2, + css_hash, + should_remove_defaults, + skip_warning + ); + if (inited && is_select && "value" in next2) { + select_option( + /** @type {HTMLSelectElement} */ + element, + next2.value + ); + } + for (let symbol of Object.getOwnPropertySymbols(effects)) { + if (!next2[symbol]) destroy_effect(effects[symbol]); + } + for (let symbol of Object.getOwnPropertySymbols(next2)) { + var n = next2[symbol]; + if (symbol.description === ATTACHMENT_KEY && (!prev || n !== prev[symbol])) { + if (effects[symbol]) destroy_effect(effects[symbol]); + effects[symbol] = branch(() => attach(element, () => n)); + } + current[symbol] = n; + } + prev = current; + }); + if (is_select) { + var select = ( + /** @type {HTMLSelectElement} */ + element + ); + effect(() => { + select_option( + select, + /** @type {Record} */ + prev.value, + true + ); + init_select(select); + }); + } + inited = true; + }); + } + function get_attributes(element) { + return ( + /** @type {Record} **/ + /** @type {any} */ + element[ATTRIBUTES_CACHE] ??= { + [IS_CUSTOM_ELEMENT]: element.nodeName.includes("-"), + [IS_HTML]: element.namespaceURI === NAMESPACE_HTML + } + ); + } + var setters_cache = /* @__PURE__ */ new Map(); + function get_setters(element) { + var cache_key = element.getAttribute("is") || element.nodeName; + var setters = setters_cache.get(cache_key); + if (setters) return setters; + setters_cache.set(cache_key, setters = []); + var descriptors; + var proto = element; + var element_proto = Element.prototype; + while (element_proto !== proto) { + descriptors = get_descriptors(proto); + for (var key2 in descriptors) { + if (descriptors[key2].set && // better safe than sorry, we don't want spread attributes to mess with HTML content + key2 !== "innerHTML" && key2 !== "textContent" && key2 !== "innerText") { + setters.push(key2); + } + } + proto = get_prototype_of(proto); + } + return setters; + } + function bind_value(input, get2, set2 = get2) { + var batches = /* @__PURE__ */ new WeakSet(); + listen_to_event_and_reset_event(input, "input", async (is_reset) => { + var value = is_reset ? input.defaultValue : input.value; + value = is_numberlike_input(input) ? to_number(value) : value; + set2(value); + if (current_batch !== null) { + batches.add(current_batch); + } + await tick(); + if (value !== (value = get2())) { + var start = input.selectionStart; + var end = input.selectionEnd; + var length = input.value.length; + input.value = value ?? ""; + if (end !== null) { + var new_length = input.value.length; + if (start === end && end === length && new_length > length) { + input.selectionStart = new_length; + input.selectionEnd = new_length; + } else { + input.selectionStart = start; + input.selectionEnd = Math.min(end, new_length); + } + } + } + }); + if ( + // If we are hydrating and the value has since changed, + // then use the updated value from the input instead. + hydrating && input.defaultValue !== input.value || // If defaultValue is set, then value == defaultValue + // TODO Svelte 6: remove input.value check and set to empty string? + untrack(get2) == null && input.value + ) { + set2(is_numberlike_input(input) ? to_number(input.value) : input.value); + if (current_batch !== null) { + batches.add(current_batch); + } + } + render_effect(() => { + var value = get2(); + if (input === document.activeElement) { + var batch = ( + /** @type {Batch} */ + current_batch + ); + if (batches.has(batch)) { + return; + } + } + if (is_numberlike_input(input) && value === to_number(input.value)) { + return; + } + if (input.type === "date" && !value && !input.value) { + return; + } + if (value !== input.value) { + input.value = value ?? ""; + } + }); + } + function is_numberlike_input(input) { + var type = input.type; + return type === "number" || type === "range"; + } + function to_number(value) { + return value === "" ? null : +value; + } + function is_bound_this(bound_value, element_or_component) { + return bound_value === element_or_component || bound_value?.[STATE_SYMBOL] === element_or_component; + } + function bind_this(element_or_component = {}, update, get_value, get_parts) { + var component_effect = ( + /** @type {ComponentContext} */ + component_context.r + ); + var parent = ( + /** @type {Effect} */ + active_effect + ); + effect(() => { + var old_parts; + var parts; + render_effect(() => { + old_parts = parts; + parts = []; + untrack(() => { + if (!is_bound_this(get_value(...parts), element_or_component)) { + update(element_or_component, ...parts); + if (old_parts && is_bound_this(get_value(...old_parts), element_or_component)) { + update(null, ...old_parts); + } + } + }); + }); + return () => { + let p = parent; + while (p !== component_effect && p.parent !== null && p.parent.f & DESTROYING) { + p = p.parent; + } + const teardown2 = () => { + if (parts && is_bound_this(get_value(...parts), element_or_component)) { + update(null, ...parts); + } + }; + const original_teardown = p.teardown; + p.teardown = () => { + teardown2(); + original_teardown?.(); + }; + }; + }); + return element_or_component; + } + const rest_props_handler = { + get(target, key2) { + if (target.exclude.includes(key2)) return; + return target.props[key2]; + }, + set(target, key2) { + return false; + }, + getOwnPropertyDescriptor(target, key2) { + if (target.exclude.includes(key2)) return; + if (key2 in target.props) { + return { + enumerable: true, + configurable: true, + value: target.props[key2] + }; + } + }, + has(target, key2) { + if (target.exclude.includes(key2)) return false; + return key2 in target.props; + }, + ownKeys(target) { + return Reflect.ownKeys(target.props).filter((key2) => !target.exclude.includes(key2)); + } + }; + // @__NO_SIDE_EFFECTS__ + function rest_props(props, exclude, name) { + return new Proxy( + { props, exclude }, + rest_props_handler + ); + } + function prop(props, key2, flags2, fallback) { + var fallback_value = ( + /** @type {V} */ + fallback + ); + var fallback_dirty = true; + var get_fallback = () => { + if (fallback_dirty) { + fallback_dirty = false; + fallback_value = /** @type {V} */ + fallback; + } + return fallback_value; + }; + var initial_value; + { + initial_value = /** @type {V} */ + props[key2]; + } + if (initial_value === void 0 && fallback !== void 0) { + initial_value = get_fallback(); + } + var getter; + { + getter = () => { + var value = ( + /** @type {V} */ + props[key2] + ); + if (value === void 0) return get_fallback(); + fallback_dirty = true; + return value; + }; + } + var overridden = false; + var d = /* @__PURE__ */ derived(() => { + overridden = false; + return getter(); + }); + var parent_effect = ( + /** @type {Effect} */ + active_effect + ); + return ( + /** @type {() => V} */ + (function(value, mutation) { + if (arguments.length > 0) { + const new_value = mutation ? get(d) : value; + set(d, new_value); + overridden = true; + if (fallback_value !== void 0) { + fallback_value = new_value; + } + return value; + } + if (is_destroying_effect && overridden || (parent_effect.f & DESTROYED) !== 0) { + return d.v; + } + return get(d); + }) + ); + } + function createClassComponent(options) { + return new Svelte4Component(options); + } + class Svelte4Component { + /** @type {any} */ + #events; + /** @type {Record} */ + #instance; + /** + * @param {ComponentConstructorOptions & { + * component: any; + * }} options + */ + constructor(options) { + var sources = /* @__PURE__ */ new Map(); + var add_source = (key2, value) => { + var s = /* @__PURE__ */ mutable_source(value, false, false); + sources.set(key2, s); + return s; + }; + const props = new Proxy( + { ...options.props || {}, $$events: {} }, + { + get(target, prop2) { + return get(sources.get(prop2) ?? add_source(prop2, Reflect.get(target, prop2))); + }, + has(target, prop2) { + if (prop2 === LEGACY_PROPS) return true; + get(sources.get(prop2) ?? add_source(prop2, Reflect.get(target, prop2))); + return Reflect.has(target, prop2); + }, + set(target, prop2, value) { + set(sources.get(prop2) ?? add_source(prop2, value), value); + return Reflect.set(target, prop2, value); + } + } + ); + this.#instance = (options.hydrate ? hydrate : mount)(options.component, { + target: options.target, + anchor: options.anchor, + props, + context: options.context, + intro: options.intro ?? false, + recover: options.recover, + transformError: options.transformError + }); + if (!options?.props?.$$host || options.sync === false) { + flushSync(); + } + this.#events = props.$$events; + for (const key2 of Object.keys(this.#instance)) { + if (key2 === "$set" || key2 === "$destroy" || key2 === "$on") continue; + define_property(this, key2, { + get() { + return this.#instance[key2]; + }, + /** @param {any} value */ + set(value) { + this.#instance[key2] = value; + }, + enumerable: true + }); + } + this.#instance.$set = /** @param {Record} next */ + (next2) => { + Object.assign(props, next2); + }; + this.#instance.$destroy = () => { + unmount(this.#instance); + }; + } + /** @param {Record} props */ + $set(props) { + this.#instance.$set(props); + } + /** + * @param {string} event + * @param {(...args: any[]) => any} callback + * @returns {any} + */ + $on(event2, callback) { + this.#events[event2] = this.#events[event2] || []; + const cb = (...args) => callback.call(this, ...args); + this.#events[event2].push(cb); + return () => { + this.#events[event2] = this.#events[event2].filter( + /** @param {any} fn */ + (fn) => fn !== cb + ); + }; + } + $destroy() { + this.#instance.$destroy(); + } + } + let SvelteElement = class { + }; + if (typeof HTMLElement === "function") { + SvelteElement = class extends HTMLElement { + /** The Svelte component constructor */ + $$ctor; + /** Slots */ + $$s; + /** @type {any} The Svelte component instance */ + $$c; + /** Whether or not the custom element is connected */ + $$cn = false; + /** @type {Record} Component props data */ + $$d = {}; + /** `true` if currently in the process of reflecting component props back to attributes */ + $$r = false; + /** @type {Record} Props definition (name, reflected, type etc) */ + $$p_d = {}; + /** @type {Record} Event listeners */ + $$l = {}; + /** @type {Map} Event listener unsubscribe functions */ + $$l_u = /* @__PURE__ */ new Map(); + /** @type {any} The managed render effect for reflecting attributes */ + $$me; + /** @type {ShadowRoot | null} The ShadowRoot of the custom element */ + $$shadowRoot = null; + /** + * @param {*} $$componentCtor + * @param {*} $$slots + * @param {ShadowRootInit | undefined} shadow_root_init + */ + constructor($$componentCtor, $$slots, shadow_root_init) { + super(); + this.$$ctor = $$componentCtor; + this.$$s = $$slots; + if (shadow_root_init) { + this.$$shadowRoot = this.attachShadow(shadow_root_init); + } + } + /** + * @param {string} type + * @param {EventListenerOrEventListenerObject} listener + * @param {boolean | AddEventListenerOptions} [options] + */ + addEventListener(type, listener, options) { + this.$$l[type] = this.$$l[type] || []; + this.$$l[type].push(listener); + if (this.$$c) { + const unsub = this.$$c.$on(type, listener); + this.$$l_u.set(listener, unsub); + } + super.addEventListener(type, listener, options); + } + /** + * @param {string} type + * @param {EventListenerOrEventListenerObject} listener + * @param {boolean | AddEventListenerOptions} [options] + */ + removeEventListener(type, listener, options) { + super.removeEventListener(type, listener, options); + if (this.$$c) { + const unsub = this.$$l_u.get(listener); + if (unsub) { + unsub(); + this.$$l_u.delete(listener); + } + } + } + async connectedCallback() { + this.$$cn = true; + if (!this.$$c) { + let create_slot = function(name) { + return (anchor) => { + const slot = create_element("slot"); + if (name !== "default") slot.name = name; + append(anchor, slot); + }; + }; + await Promise.resolve(); + if (!this.$$cn || this.$$c) { + return; + } + const $$slots = {}; + const existing_slots = get_custom_elements_slots(this); + for (const name of this.$$s) { + if (name in existing_slots) { + if (name === "default" && !this.$$d.children) { + this.$$d.children = create_slot(name); + $$slots.default = true; + } else { + $$slots[name] = create_slot(name); + } + } + } + for (const attribute of this.attributes) { + const name = this.$$g_p(attribute.name); + if (!(name in this.$$d)) { + this.$$d[name] = get_custom_element_value(name, attribute.value, this.$$p_d, "toProp"); + } + } + for (const key2 in this.$$p_d) { + if (!(key2 in this.$$d) && this[key2] !== void 0) { + this.$$d[key2] = this[key2]; + delete this[key2]; + } + } + this.$$c = createClassComponent({ + component: this.$$ctor, + target: this.$$shadowRoot || this, + props: { + ...this.$$d, + $$slots, + $$host: this + } + }); + this.$$me = effect_root(() => { + render_effect(() => { + this.$$r = true; + for (const key2 of object_keys(this.$$c)) { + if (!this.$$p_d[key2]?.reflect) continue; + this.$$d[key2] = this.$$c[key2]; + const attribute_value = get_custom_element_value( + key2, + this.$$d[key2], + this.$$p_d, + "toAttribute" + ); + if (attribute_value == null) { + this.removeAttribute(this.$$p_d[key2].attribute || key2); + } else { + this.setAttribute(this.$$p_d[key2].attribute || key2, attribute_value); + } + } + this.$$r = false; + }); + }); + for (const type in this.$$l) { + for (const listener of this.$$l[type]) { + const unsub = this.$$c.$on(type, listener); + this.$$l_u.set(listener, unsub); + } + } + this.$$l = {}; + } + } + // We don't need this when working within Svelte code, but for compatibility of people using this outside of Svelte + // and setting attributes through setAttribute etc, this is helpful + /** + * @param {string} attr + * @param {string} _oldValue + * @param {string} newValue + */ + attributeChangedCallback(attr, _oldValue, newValue) { + if (this.$$r) return; + attr = this.$$g_p(attr); + this.$$d[attr] = get_custom_element_value(attr, newValue, this.$$p_d, "toProp"); + this.$$c?.$set({ [attr]: this.$$d[attr] }); + } + disconnectedCallback() { + this.$$cn = false; + Promise.resolve().then(() => { + if (!this.$$cn && this.$$c) { + this.$$c.$destroy(); + this.$$me(); + this.$$c = void 0; + } + }); + } + /** + * @param {string} attribute_name + */ + $$g_p(attribute_name) { + return object_keys(this.$$p_d).find( + (key2) => this.$$p_d[key2].attribute === attribute_name || !this.$$p_d[key2].attribute && key2.toLowerCase() === attribute_name + ) || attribute_name; + } + }; + } + function get_custom_element_value(prop2, value, props_definition, transform) { + const type = props_definition[prop2]?.type; + value = type === "Boolean" && typeof value !== "boolean" ? value != null : value; + if (!transform || !props_definition[prop2]) { + return value; + } else if (transform === "toAttribute") { + switch (type) { + case "Object": + case "Array": + return value == null ? null : JSON.stringify(value); + case "Boolean": + return value ? "" : null; + case "Number": + return value == null ? null : value; + default: + return value; + } + } else { + switch (type) { + case "Object": + case "Array": + return value && JSON.parse(value); + case "Boolean": + return value; + // conversion already handled above + case "Number": + return value != null ? +value : value; + default: + return value; + } + } + } + function get_custom_elements_slots(element) { + const result = {}; + element.childNodes.forEach((node) => { + result[ + /** @type {Element} node */ + node.slot || "default" + ] = true; + }); + return result; + } + function create_custom_element(Component, props_definition, slots, exports$1, shadow_root_init, extend) { + let Class = class extends SvelteElement { + constructor() { + super(Component, slots, shadow_root_init); + this.$$p_d = props_definition; + } + static get observedAttributes() { + return object_keys(props_definition).map( + (key2) => (props_definition[key2].attribute || key2).toLowerCase() + ); + } + }; + object_keys(props_definition).forEach((prop2) => { + define_property(Class.prototype, prop2, { + get() { + return this.$$c && prop2 in this.$$c ? this.$$c[prop2] : this.$$d[prop2]; + }, + set(value) { + value = get_custom_element_value(prop2, value, props_definition); + this.$$d[prop2] = value; + var component2 = this.$$c; + if (component2) { + var setter = get_descriptor(component2, prop2)?.get; + if (setter) { + component2[prop2] = value; + } else { + component2.$set({ [prop2]: value }); + } + } + } + }); + }); + exports$1.forEach((property) => { + define_property(Class.prototype, property, { + get() { + return this.$$c?.[property]; + } + }); + }); + Component.element = /** @type {any} */ + Class; + return Class; + } + var root$7 = /* @__PURE__ */ from_html(`
`); + function Checkbox($$anchor, $$props) { + push($$props, true); + let loading = prop($$props, "loading"), rest = /* @__PURE__ */ rest_props($$props, ["$$slots", "$$events", "$$legacy", "$$host", "loading"]); + let inputEl; + function onClick() { + inputEl?.click(); + } + var $$exports = { + get loading() { + return loading(); + }, + set loading($$value) { + loading($$value); + flushSync(); + } + }; + var div = root$7(); + var input = child(div); + attribute_effect(input, () => ({ type: "checkbox", ...rest }), void 0, void 0, void 0, void 0, true); + bind_this(input, ($$value) => inputEl = $$value, () => inputEl); + var svg = sibling(input, 2); + next(2); + reset(div); + template_effect(() => set_attribute(div, "data-loading", loading())); + delegated("click", svg, onClick); + append($$anchor, div); + return pop($$exports); + } + delegate(["click"]); + create_custom_element(Checkbox, { loading: {} }, [], [], { mode: "open" }); + var root$6 = /* @__PURE__ */ from_html(`
`); + function CheckboxNative($$anchor, $$props) { + push($$props, true); + let loading = prop($$props, "loading"), rest = /* @__PURE__ */ rest_props($$props, ["$$slots", "$$events", "$$legacy", "$$host", "loading"]); + var $$exports = { + get loading() { + return loading(); + }, + set loading($$value) { + loading($$value); + flushSync(); + } + }; + var div = root$6(); + var input = child(div); + attribute_effect(input, () => ({ type: "checkbox", ...rest }), void 0, void 0, void 0, void 0, true); + next(2); + reset(div); + template_effect(() => set_attribute(div, "data-loading", loading())); + append($$anchor, div); + return pop($$exports); + } + create_custom_element(CheckboxNative, { loading: {} }, [], [], { mode: "open" }); + var root$5 = /* @__PURE__ */ from_html(`
`); + function Logo($$anchor, $$props) { + push($$props, true); + let strings = prop($$props, "strings"); + const website = "https://altcha.org"; + var $$exports = { + get strings() { + return strings(); + }, + set strings($$value) { + strings($$value); + flushSync(); + } + }; + var div = root$5(); + var a = child(div); + set_attribute(a, "href", website); + reset(div); + template_effect(() => set_attribute(a, "aria-label", strings().ariaLinkLabel)); + append($$anchor, div); + return pop($$exports); + } + create_custom_element(Logo, { strings: {} }, [], [], { mode: "open" }); + var root$4 = /* @__PURE__ */ from_html(``); + function Footer($$anchor, $$props) { + push($$props, true); + let logo = prop($$props, "logo"), strings = prop($$props, "strings"); + var $$exports = { + get logo() { + return logo(); + }, + set logo($$value) { + logo($$value); + flushSync(); + }, + get strings() { + return strings(); + }, + set strings($$value) { + strings($$value); + flushSync(); + } + }; + var div = root$4(); + var p = child(div); + html(p, () => strings().footer, true); + reset(p); + var node = sibling(p, 2); + { + var consequent = ($$anchor2) => { + Logo($$anchor2, { + get strings() { + return strings(); + } + }); + }; + if_block(node, ($$render) => { + if (logo()) $$render(consequent); + }); + } + reset(div); + append($$anchor, div); + return pop($$exports); + } + create_custom_element(Footer, { logo: {}, strings: {} }, [], [], { mode: "open" }); + var root$3 = /* @__PURE__ */ from_html(`
`); + function Switch($$anchor, $$props) { + push($$props, true); + let loading = prop($$props, "loading"), rest = /* @__PURE__ */ rest_props($$props, ["$$slots", "$$events", "$$legacy", "$$host", "loading"]); + let inputEl; + function onClick() { + inputEl?.click(); + } + var $$exports = { + get loading() { + return loading(); + }, + set loading($$value) { + loading($$value); + flushSync(); + } + }; + var div = root$3(); + var input = child(div); + attribute_effect(input, () => ({ type: "checkbox", ...rest }), void 0, void 0, void 0, void 0, true); + bind_this(input, ($$value) => inputEl = $$value, () => inputEl); + var div_1 = sibling(input, 2); + reset(div); + template_effect(() => set_attribute(div, "data-loading", loading())); + delegated("click", div_1, onClick); + append($$anchor, div); + return pop($$exports); + } + delegate(["click"]); + create_custom_element(Switch, { loading: {} }, [], [], { mode: "open" }); + var AudioState = /* @__PURE__ */ ((AudioState2) => { + AudioState2["ERROR"] = "error"; + AudioState2["LOADING"] = "loading"; + AudioState2["PLAYING"] = "playing"; + AudioState2["PAUSED"] = "paused"; + AudioState2["READY"] = "ready"; + return AudioState2; + })(AudioState || {}); + var State = /* @__PURE__ */ ((State2) => { + State2["CODE"] = "code"; + State2["ERROR"] = "error"; + State2["VERIFIED"] = "verified"; + State2["VERIFYING"] = "verifying"; + State2["UNVERIFIED"] = "unverified"; + State2["EXPIRED"] = "expired"; + return State2; + })(State || {}); + var root_1$2 = /* @__PURE__ */ from_html(`
`); + var root_3$2 = /* @__PURE__ */ from_html(`
`); + var root_4 = /* @__PURE__ */ from_svg(``); + var root_5 = /* @__PURE__ */ from_svg(``); + var root_6 = /* @__PURE__ */ from_svg(``); + var root_2$2 = /* @__PURE__ */ from_html(``); + var root_7 = /* @__PURE__ */ from_html(``); + var root$2 = /* @__PURE__ */ from_html(`
`); + function Code($$anchor, $$props) { + push($$props, true); + let audioUrl = prop($$props, "audioUrl"), codeChallenge = prop($$props, "codeChallenge"), config = prop($$props, "config"), imageUrl = prop($$props, "imageUrl"), onCancel = prop($$props, "onCancel"), onReload = prop($$props, "onReload"), onSubmit = prop($$props, "onSubmit"), strings = prop($$props, "strings"); + let audioState = /* @__PURE__ */ state(void 0); + let elAudio = /* @__PURE__ */ state(void 0); + let elInput = /* @__PURE__ */ state(void 0); + let loading = /* @__PURE__ */ state(false); + let code = /* @__PURE__ */ state(""); + let playAudio = /* @__PURE__ */ state(false); + onMount(() => { + if (!config().disableAutoFocus) { + tick().then(() => { + get(elInput)?.focus(); + }); + } + return () => { + if (get(elAudio)) { + get(elAudio).pause(); + set(elAudio, void 0); + } + }; + }); + function onAudioEnded() { + set(audioState, AudioState.PAUSED, true); + } + function onAudioError(ev) { + set(audioState, AudioState.ERROR, true); + } + function onAudioCanPlay() { + set(audioState, AudioState.READY, true); + } + function onAudioLoadStart() { + set(audioState, AudioState.LOADING, true); + } + function onAudioPlaying() { + set(audioState, AudioState.PLAYING, true); + } + function onAudioPause() { + set(audioState, AudioState.PAUSED, true); + } + function onInputKeyDown(ev) { + if (ev.code === "Space") { + ev.preventDefault(); + ev.stopPropagation(); + onPlayAudio(); + } else if (ev.code === "Escape") { + ev.preventDefault(); + ev.stopPropagation(); + onCancel()?.(); + } + } + function onSubmitCapture(ev) { + ev.preventDefault(); + ev.stopPropagation(); + onSubmit()?.(get(code)); + } + function onPlayAudio() { + if (get(elAudio)) { + if (get(audioState) === AudioState.LOADING) ; + else if (!get(elAudio).paused) { + get(elAudio).pause(); + } else { + if (audioUrl() && get(elAudio).src !== audioUrl()) { + get(elAudio).src = audioUrl(); + } + get(elAudio).currentTime = 0; + get(elAudio).play(); + } + } else { + set(playAudio, true); + requestAnimationFrame(() => { + if (get(elAudio) && audioUrl()) { + get(elAudio).src = audioUrl(); + get(elAudio).play(); + } + }); + } + } + var $$exports = { + get audioUrl() { + return audioUrl(); + }, + set audioUrl($$value) { + audioUrl($$value); + flushSync(); + }, + get codeChallenge() { + return codeChallenge(); + }, + set codeChallenge($$value) { + codeChallenge($$value); + flushSync(); + }, + get config() { + return config(); + }, + set config($$value) { + config($$value); + flushSync(); + }, + get imageUrl() { + return imageUrl(); + }, + set imageUrl($$value) { + imageUrl($$value); + flushSync(); + }, + get onCancel() { + return onCancel(); + }, + set onCancel($$value) { + onCancel($$value); + flushSync(); + }, + get onReload() { + return onReload(); + }, + set onReload($$value) { + onReload($$value); + flushSync(); + }, + get onSubmit() { + return onSubmit(); + }, + set onSubmit($$value) { + onSubmit($$value); + flushSync(); + }, + get strings() { + return strings(); + }, + set strings($$value) { + strings($$value); + flushSync(); + } + }; + var div = root$2(); + var form = child(div); + var node = child(form); + { + var consequent = ($$anchor2) => { + var div_1 = root_1$2(); + var text2 = child(div_1, true); + reset(div_1); + template_effect(() => set_text(text2, strings().verificationRequired)); + append($$anchor2, div_1); + }; + if_block(node, ($$render) => { + if (config().codeChallengeDisplay !== "standard") $$render(consequent); + }); + } + var div_2 = sibling(node, 2); + var text_1 = child(div_2, true); + reset(div_2); + var img = sibling(div_2, 2); + var div_3 = sibling(img, 2); + var input = child(div_3); + remove_input_defaults(input); + input.disabled = get(loading); + bind_this(input, ($$value) => set(elInput, $$value), () => get(elInput)); + var node_1 = sibling(input, 2); + { + var consequent_4 = ($$anchor2) => { + var button = root_2$2(); + var node_2 = child(button); + { + var consequent_1 = ($$anchor3) => { + var div_4 = root_3$2(); + append($$anchor3, div_4); + }; + var consequent_2 = ($$anchor3) => { + var svg = root_4(); + append($$anchor3, svg); + }; + var consequent_3 = ($$anchor3) => { + var svg_1 = root_5(); + append($$anchor3, svg_1); + }; + var alternate = ($$anchor3) => { + var svg_2 = root_6(); + append($$anchor3, svg_2); + }; + if_block(node_2, ($$render) => { + if (get(audioState) === AudioState.LOADING) $$render(consequent_1); + else if (get(audioState) === AudioState.ERROR) $$render(consequent_2, 1); + else if (get(audioState) === AudioState.PLAYING) $$render(consequent_3, 2); + else $$render(alternate, -1); + }); + } + reset(button); + template_effect(() => { + set_attribute(button, "title", strings().getAudioChallenge); + button.disabled = get(audioState) === AudioState.LOADING || get(audioState) === AudioState.ERROR; + set_attribute(button, "aria-label", get(audioState) === AudioState.LOADING ? strings().loading : strings().getAudioChallenge); + }); + event("click", button, () => onPlayAudio(), true); + append($$anchor2, button); + }; + if_block(node_1, ($$render) => { + if (codeChallenge().audio) $$render(consequent_4); + }); + } + var button_1 = sibling(node_1, 2); + reset(div_3); + var div_5 = sibling(div_3, 2); + var button_2 = child(div_5); + var text_2 = child(button_2, true); + reset(button_2); + var button_3 = sibling(button_2, 2); + var text_3 = child(button_3, true); + reset(button_3); + reset(div_5); + reset(form); + var node_3 = sibling(form, 2); + { + var consequent_5 = ($$anchor2) => { + var audio = root_7(); + bind_this(audio, ($$value) => set(elAudio, $$value), () => get(elAudio)); + event("error", audio, onAudioError); + event("loadstart", audio, onAudioLoadStart); + event("canplay", audio, onAudioCanPlay); + event("pause", audio, onAudioPause); + event("playing", audio, onAudioPlaying); + event("ended", audio, onAudioEnded); + append($$anchor2, audio); + }; + if_block(node_3, ($$render) => { + if (get(playAudio)) $$render(consequent_5); + }); + } + reset(div); + template_effect(() => { + set_text(text_1, strings().enterCodeFromImage); + set_attribute(img, "src", imageUrl()); + set_attribute(input, "minlength", codeChallenge().length || 1); + set_attribute(input, "maxlength", codeChallenge().length); + set_attribute(input, "placeholder", strings().enterCode); + set_attribute(input, "aria-label", get(audioState) === AudioState.LOADING ? strings().loading : get(audioState) === AudioState.PLAYING ? "" : strings().enterCodeAria); + set_attribute(input, "aria-live", get(audioState) ? "assertive" : "polite"); + set_attribute(input, "aria-busy", get(audioState) === AudioState.LOADING); + set_attribute(button_1, "title", strings().reload); + set_attribute(button_1, "aria-label", strings().reload); + set_attribute(button_2, "aria-label", strings().verify); + set_text(text_2, strings().verify); + set_attribute(button_3, "aria-label", strings().cancel); + set_text(text_3, strings().cancel); + }); + event("submit", form, onSubmitCapture, true); + delegated("keydown", input, onInputKeyDown); + bind_value(input, () => get(code), ($$value) => set(code, $$value)); + event("click", button_1, () => onReload()?.(), true); + event("click", button_3, () => onCancel()?.(), true); + append($$anchor, div); + return pop($$exports); + } + delegate(["keydown"]); + create_custom_element( + Code, + { + audioUrl: {}, + codeChallenge: {}, + config: {}, + imageUrl: {}, + onCancel: {}, + onReload: {}, + onSubmit: {}, + strings: {} + }, + [], + [], + { mode: "open" } + ); + var root_1$1 = /* @__PURE__ */ from_html(`
`); + var root_2$1 = /* @__PURE__ */ from_html(`
`); + var root_3$1 = /* @__PURE__ */ from_html(`
×
`); + var root$1 = /* @__PURE__ */ from_html(`
`, 1); + function Popover($$anchor, $$props) { + push($$props, true); + let anchor = prop($$props, "anchor"), children = prop($$props, "children"), display = prop($$props, "display", 7, "standard"), backdrop = prop($$props, "backdrop", 7, false), onClickOutside = prop($$props, "onClickOutside"), onClickOutsideDelay = prop($$props, "onClickOutsideDelay", 7, 600), onClose = prop($$props, "onClose"), placement = prop($$props, "placement", 7, "auto"), updateUISignal = prop($$props, "updateUISignal"), variant = prop($$props, "variant", 7, "neutral"), rest = /* @__PURE__ */ rest_props($$props, [ + "$$slots", + "$$events", + "$$legacy", + "$$host", + "anchor", + "children", + "display", + "backdrop", + "onClickOutside", + "onClickOutsideDelay", + "onClose", + "placement", + "updateUISignal", + "variant" + ]); + let el = /* @__PURE__ */ state(void 0); + let elBackdrop = /* @__PURE__ */ state(void 0); + let top = /* @__PURE__ */ state(false); + let mountedAt = /* @__PURE__ */ state(0); + user_effect(() => { + if (placement() !== "auto") { + set(top, placement() === "top"); + } + }); + user_effect(() => { + if (updateUISignal()) { + reposition(); + } + }); + onMount(() => { + const moveToBody = display() === "bottomsheet" || display() === "overlay"; + if (moveToBody) { + get(elBackdrop) && document.body.append(get(elBackdrop)); + get(el) && document.body.append(get(el)); + } + reposition(); + tick().then(() => { + set(mountedAt, Date.now(), true); + }); + return () => { + if (moveToBody) { + get(elBackdrop) && document.body.removeChild(get(elBackdrop)); + get(el) && document.body.removeChild(get(el)); + } + }; + }); + function onCloseClick() { + onClose()?.(); + } + function onWindowClick(ev) { + const target = ev.target; + if (!get(el)?.contains(target) && (!onClickOutsideDelay() || get(mountedAt) + onClickOutsideDelay() < Date.now())) { + onClickOutside()?.(); + } + } + function onWindowResize() { + reposition(); + } + function onWindowScroll() { + reposition(); + } + function reposition() { + if (anchor() && placement() === "auto" && get(el)) { + const boundary2 = anchor().getBoundingClientRect(); + const bottomGap = document.documentElement.clientHeight - (boundary2.top + boundary2.height); + const newTop = bottomGap < get(el).clientHeight; + if (get(top) !== newTop) { + set(top, newTop); + } + } + } + var $$exports = { + get anchor() { + return anchor(); + }, + set anchor($$value) { + anchor($$value); + flushSync(); + }, + get children() { + return children(); + }, + set children($$value) { + children($$value); + flushSync(); + }, + get display() { + return display(); + }, + set display($$value = "standard") { + display($$value); + flushSync(); + }, + get backdrop() { + return backdrop(); + }, + set backdrop($$value = false) { + backdrop($$value); + flushSync(); + }, + get onClickOutside() { + return onClickOutside(); + }, + set onClickOutside($$value) { + onClickOutside($$value); + flushSync(); + }, + get onClickOutsideDelay() { + return onClickOutsideDelay(); + }, + set onClickOutsideDelay($$value = 600) { + onClickOutsideDelay($$value); + flushSync(); + }, + get onClose() { + return onClose(); + }, + set onClose($$value) { + onClose($$value); + flushSync(); + }, + get placement() { + return placement(); + }, + set placement($$value = "auto") { + placement($$value); + flushSync(); + }, + get updateUISignal() { + return updateUISignal(); + }, + set updateUISignal($$value) { + updateUISignal($$value); + flushSync(); + }, + get variant() { + return variant(); + }, + set variant($$value = "neutral") { + variant($$value); + flushSync(); + } + }; + var fragment = root$1(); + event("click", $window, onWindowClick, true); + event("resize", $window, onWindowResize); + event("scroll", $window, onWindowScroll); + var node = first_child(fragment); + { + var consequent = ($$anchor2) => { + var div = root_1$1(); + bind_this(div, ($$value) => set(elBackdrop, $$value), () => get(elBackdrop)); + append($$anchor2, div); + }; + if_block(node, ($$render) => { + if (backdrop()) $$render(consequent); + }); + } + var div_1 = sibling(node, 2); + attribute_effect(div_1, () => ({ + ...rest, + class: `altcha-popover ${($$props.class || "") ?? ""}`, + "data-popover": true, + "data-variant": variant(), + "data-top": get(top), + "data-display": display() + })); + var node_1 = child(div_1); + { + var consequent_1 = ($$anchor2) => { + var div_2 = root_2$1(); + append($$anchor2, div_2); + }; + if_block(node_1, ($$render) => { + if (display() === "standard") $$render(consequent_1); + }); + } + var node_2 = sibling(node_1, 2); + { + var consequent_2 = ($$anchor2) => { + var div_3 = root_3$1(); + event("click", div_3, onCloseClick, true); + append($$anchor2, div_3); + }; + if_block(node_2, ($$render) => { + if (display() !== "standard") $$render(consequent_2); + }); + } + var div_4 = sibling(node_2, 2); + var node_3 = child(div_4); + snippet(node_3, () => children() ?? noop); + reset(div_4); + reset(div_1); + bind_this(div_1, ($$value) => set(el, $$value), () => get(el)); + append($$anchor, fragment); + return pop($$exports); + } + create_custom_element( + Popover, + { + anchor: {}, + children: {}, + display: {}, + backdrop: {}, + onClickOutside: {}, + onClickOutsideDelay: {}, + onClose: {}, + placement: {}, + updateUISignal: {}, + variant: {} + }, + [], + [], + { mode: "open" } + ); + function bufferToHex(buffer) { + return Array.from(new Uint8Array(buffer)).map((b) => b.toString(16).padStart(2, "0")).join(""); + } + async function solveChallengeWorkers(options) { + const { + challenge, + concurrency = navigator.hardwareConcurrency, + controller = new AbortController(), + createWorker, + onOutOfMemory = (c) => c > 1 ? Math.floor(c / 2) : 0, + counterMode, + timeout = 9e4 + } = options; + const workersConcurrency = Math.min(16, Math.max(1, concurrency)); + const workersInstances = []; + const terminate = () => { + for (const worker of workersInstances) { + worker.terminate(); + } + }; + for (let i = 0; i < workersConcurrency; i++) { + workersInstances.push(await createWorker(challenge.parameters.algorithm)); + } + let solution = null; + try { + solution = await Promise.race( + workersInstances.map((worker, i) => { + controller.signal.addEventListener("abort", () => { + worker.postMessage({ type: "abort" }); + }); + return new Promise((resolve, reject) => { + worker.addEventListener("error", (err) => { + reject(err); + }); + worker.addEventListener("message", (message) => { + if (message.data) { + for (const w of workersInstances) { + if (w !== worker) { + w.postMessage({ type: "abort" }); + } + } + if (message.data.error) { + return reject(new Error(message.data.error)); + } + } + resolve(message.data); + }); + worker.postMessage({ + challenge, + counterMode, + counterStart: i, + counterStep: workersConcurrency, + timeout, + type: "work" + }); + }); + }) + ); + } catch (err) { + const isOOM = err instanceof Error && !!err?.message?.includes("Out of memory"); + if (isOOM) { + if (onOutOfMemory) { + terminate(); + const retryConcurrency = onOutOfMemory(workersConcurrency); + if (retryConcurrency) { + return solveChallengeWorkers({ + ...options, + challenge, + controller, + concurrency: retryConcurrency, + createWorker + }); + } + } + } + throw err; + } finally { + terminate(); + } + if (controller.signal.aborted) { + return null; + } + return solution || null; + } + class Collector { + TAG_CODES = { + INPUT: 1, + TEXTAREA: 2, + SELECT: 3, + BUTTON: 4, + A: 5, + DETAILS: 6, + SUMMARY: 7, + IFRAME: 8, + VIDEO: 9, + AUDIO: 10 + }; + maxSamples; + sampleInterval; + target; + focusStartTime = 0; + focusInteraction = 0; + focusInteractionTimer = null; + lastPointerSample = 0; + lastTouchSample = 0; + lastScrollSample = 0; + pendingPointer = null; + pendingTouch = null; + focus = []; + pointer = []; + scroll = []; + touch = []; + constructor(options = {}) { + const { maxSamples = 60, sampleInterval = 50, target = window } = options; + this.maxSamples = maxSamples; + this.sampleInterval = sampleInterval; + this.target = target; + this.attach(); + } + destroy() { + const o = { capture: true }; + this.target.removeEventListener("focusin", this.onFocus, o); + this.target.removeEventListener("keydown", this.onInteraction, o); + this.target.removeEventListener("pointerdown", this.onInteraction, o); + this.target.removeEventListener("pointermove", this.onPointer, o); + this.target.removeEventListener("scroll", this.onScroll, o); + this.target.removeEventListener("touchmove", this.onTouchMove, o); + } + export() { + return { + focus: this.focus, + maxTouchPoints: navigator.maxTouchPoints || 0, + pointer: this.pointer, + scroll: this.scroll, + time: Date.now(), + touch: this.touch + }; + } + attach() { + const o = { passive: true, capture: true }; + this.target.addEventListener("focusin", this.onFocus, o); + this.target.addEventListener("keydown", this.onInteraction, o); + this.target.addEventListener("pointerdown", this.onInteraction, o); + this.target.addEventListener("pointermove", this.onPointer, o); + this.target.addEventListener("scroll", this.onScroll, o); + this.target.addEventListener("touchmove", this.onTouchMove, o); + } + evict(buffer) { + if (buffer.length > this.maxSamples) { + buffer.splice(0, buffer.length - this.maxSamples); + } + } + onFocus = (e) => { + if (this.focusInteraction === 2) { + return; + } + const el = e.target; + if (!(el instanceof Element)) { + return; + } + const now = performance.now(); + if (this.focusStartTime === 0) { + this.focusStartTime = now; + } + this.focus.push([ + Math.round(now - this.focusStartTime), + el.tabIndex, + this.TAG_CODES[el.tagName] ?? 0, + this.focusInteraction ? 1 : 0 + ]); + this.evict(this.focus); + }; + onInteraction = (e) => { + this.focusInteraction = "keyCode" in e ? 1 : 2; + if (this.focusInteractionTimer) { + clearTimeout(this.focusInteractionTimer); + } + this.focusInteractionTimer = setTimeout(() => { + this.focusInteraction = 0; + }, 100); + }; + onPointer = (e) => { + if (e.pointerType === "touch") { + return; + } + const now = e.timeStamp || performance.now(); + this.pendingPointer = [Math.round(e.clientX), Math.round(e.clientY), Math.round(now)]; + if (now - this.lastPointerSample >= this.sampleInterval) { + this.pointer.push(this.pendingPointer); + this.lastPointerSample = now; + this.pendingPointer = null; + this.evict(this.pointer); + } + }; + onScroll = () => { + const now = performance.now(); + if (now - this.lastScrollSample < this.sampleInterval) { + return; + } + this.scroll.push([Math.round(window.scrollY), Math.round(now)]); + this.lastScrollSample = now; + this.evict(this.scroll); + }; + onTouchMove = (e) => { + const now = e.timeStamp || performance.now(); + const t = e.touches[0]; + if (!t) { + return; + } + this.pendingTouch = [ + Math.round(t.clientX), + Math.round(t.clientY), + Math.round(now), + Math.round(t.force * 1e3) / 1e3, + Math.round(t.radiusX || 0), + Math.round(t.radiusY || 0) + ]; + if (now - this.lastTouchSample >= this.sampleInterval) { + this.touch.push(this.pendingTouch); + this.lastTouchSample = now; + this.pendingTouch = null; + this.evict(this.touch); + } + }; + } + var root_1 = /* @__PURE__ */ from_html(`
`); + var root_3 = /* @__PURE__ */ from_html(`
`); + var root_2 = /* @__PURE__ */ from_html(`
×
`, 1); + var root_10 = /* @__PURE__ */ from_html(`
`); + var root_11 = /* @__PURE__ */ from_html(``); + var root_14 = /* @__PURE__ */ from_html(`
Secure context (HTTPS) required.
`); + var root_15 = /* @__PURE__ */ from_html(`
`); + var root_16 = /* @__PURE__ */ from_html(`
`); + var root_19 = /* @__PURE__ */ from_html(` `, 1); + var root = /* @__PURE__ */ from_html(`
`, 1); + function Widget($$anchor, $$props) { + push($$props, true); + const $altchaDefaults = () => store_get(altchaDefaults, "$altchaDefaults", $$stores); + const $altchaI18nStore = () => store_get(altchaI18nStore, "$altchaI18nStore", $$stores); + const [$$stores, $$cleanup] = setup_stores(); + const fieldsSelector = 'input[type="text"]:not([data-no-spamfilter]), textarea:not([data-no-spamfilter])'; + const submitButtonSelector = 'input[type="submit"], button[type="submit"], button:not([type="button"]):not([type="reset"])'; + const rtlLanguages = ["ar", "fa", "he", "ur"]; + const { isSecureContext } = globalThis; + const { store: altchaDefaults } = globalThis.$altcha.defaults; + const hardwareConcurrency = navigator.hardwareConcurrency || 2; + const deviceMemory = navigator.deviceMemory || 0; + const defaultWorkers = deviceMemory && deviceMemory <= 4 ? Math.min(4, hardwareConcurrency) : hardwareConcurrency; + const altchaI18nStore = globalThis.$altcha.i18n.store; + const instance = $$props.$$host; + const dispatch = (event2, detail) => { + tick().then(() => { + instance?.dispatchEvent(new CustomEvent(event2, { detail })); + }); + }; + let hisCollector = null; + let baseUrl = /* @__PURE__ */ state(proxy(new URL(location.origin))); + let checked = /* @__PURE__ */ state(false); + let codeChallenge = /* @__PURE__ */ state(null); + let currentController = /* @__PURE__ */ state(null); + let currentDisplay = /* @__PURE__ */ state(null); + let currentState = /* @__PURE__ */ state(proxy(State.UNVERIFIED)); + let elAnchorArrow = /* @__PURE__ */ state(void 0); + let elFloatingAnchor = /* @__PURE__ */ state(void 0); + let elForm = /* @__PURE__ */ state(null); + let elRoot = /* @__PURE__ */ state(void 0); + let elSubmitter = /* @__PURE__ */ state(null); + let error = /* @__PURE__ */ state(null); + let expirationTimeout = /* @__PURE__ */ state(null); + let payload = /* @__PURE__ */ state(null); + let plugins = /* @__PURE__ */ state(proxy([])); + let updateUISignal = /* @__PURE__ */ state(0); + let userConfig = /* @__PURE__ */ state(proxy({})); + let visible = /* @__PURE__ */ state(true); + const config = /* @__PURE__ */ user_derived(() => ({ + fetch: (input, init) => fetch(input, init), + audioChallengeLanguage: "", + auto: "off", + barPlacement: "bottom", + challenge: "", + codeChallenge: null, + codeChallengeDisplay: "standard", + credentials: null, + debug: false, + disableAutoFocus: false, + display: "standard", + floatingAnchor: "", + floatingOffset: 8, + floatingPersist: false, + floatingPlacement: "auto", + hideFooter: false, + hideLogo: false, + humanInteractionSignature: true, + language: "", + mockError: false, + minDuration: 500, + overlayContent: "", + name: "altcha", + popoverPlacement: "auto", + retryOnOutOfMemoryError: true, + setCookie: null, + serverVerificationFields: false, + serverVerificationTimeZone: false, + test: false, + timeout: 9e4, + type: "checkbox", + validationMessage: "", + verifyFunction: null, + verifyUrl: "", + workers: defaultWorkers, + ...$altchaDefaults(), + ...get(userConfig) + })); + const checkboxId = /* @__PURE__ */ user_derived(() => `altcha-checkbox-${$$props.id || Math.floor(Math.random() * 1e12).toString(16)}`); + const CheckboxComponent = /* @__PURE__ */ user_derived(() => getCheckboxComponent(get(config).type)); + const auto = /* @__PURE__ */ user_derived(() => get(config).auto); + const loading = /* @__PURE__ */ user_derived(() => get(currentState) === State.VERIFYING); + const showFooter = /* @__PURE__ */ user_derived(() => !get(config).hideFooter); + const showLogo = /* @__PURE__ */ user_derived(() => !get(config).hideLogo && get(config).display !== "bar"); + const locale = /* @__PURE__ */ user_derived(() => getI18nStrings($altchaI18nStore(), [ + get(config).language, + document.documentElement.lang, + ...navigator.languages + ])); + const dir = /* @__PURE__ */ user_derived(() => rtlLanguages.includes(get(locale).language) ? "rtl" : void 0); + const strings = /* @__PURE__ */ user_derived(() => ({ ...get(locale).strings })); + const codeChallengeAudioUrl = /* @__PURE__ */ user_derived(() => get(codeChallenge)?.audio?.match(/^(https?:)?\//) ? getUrl(get(codeChallenge).audio, get(baseUrl), { + language: get(config).audioChallengeLanguage || get(locale).language + }).toString() : get(codeChallenge)?.audio); + const codeChallengeImageUrl = /* @__PURE__ */ user_derived(() => get(codeChallenge)?.image?.match(/^(https?:)?\//) ? getUrl(get(codeChallenge).image, get(baseUrl)) : get(codeChallenge)?.image); + user_effect(() => { + configure({ + auto: $$props.auto, + challenge: $$props.challenge, + display: $$props.display, + language: $$props.language, + name: $$props.name, + type: $$props.type, + workers: $$props.workers + }); + }); + user_effect(() => { + if ($$props.configuration) { + try { + configure(JSON.parse($$props.configuration)); + } catch { + log("unable to parse the `configuration` attribute (JSON expected)"); + } + } + }); + user_effect(() => { + if (get(currentDisplay) !== get(config).display) { + setDisplay(get(config).display); + } + }); + user_effect(() => { + if (get(checked) && get(currentState) === State.VERIFYING) { + set(checked, false); + } + }); + user_effect(() => { + if (!get(checked) && get(currentState) === State.VERIFIED) { + set(checked, true); + } + }); + user_effect(() => { + if (!get(checked)) { + const checkbox = getCheckboxElement(); + if (checkbox && checkbox.checked) { + checkbox.checked = false; + } + } + }); + user_effect(() => { + if (get(currentState) === State.VERIFIED) { + getCheckboxElement()?.setCustomValidity(""); + } + }); + user_effect(() => { + if (get(auto) === "onload") { + const tm = setTimeout( + () => { + verify(); + }, + 1 + ); + return () => { + if (tm) { + clearTimeout(tm); + } + }; + } + }); + user_effect(() => { + if (get(error)) { + log("error:", get(error)); + } + }); + user_effect(() => { + if (get(payload) && get(config).setCookie) { + setCookie(get(payload), get(config).setCookie); + } + }); + onMount(() => { + log("mounted", "3.2.1"); + if (instance) { + globalThis.$altcha.instances.add(instance); + } + set(elForm, get(elRoot)?.closest("form"), true); + get(elForm)?.addEventListener("reset", onFormReset); + get(elForm)?.addEventListener("submit", onFormSubmit, { capture: true }); + get(elForm)?.addEventListener("focusin", onFormFocusIn); + activatePlugins(); + if (get(config).humanInteractionSignature) { + log("human interaction signature enabled"); + hisCollector = new Collector(); + } + dispatch("load"); + if (!isSecureContext) { + log("secure context (HTTPS) required"); + } + return () => { + destroyPlugins(); + if (instance) { + globalThis.$altcha.instances.delete(instance); + } + if (get(expirationTimeout)) { + clearTimeout(get(expirationTimeout)); + } + get(elForm)?.removeEventListener("reset", onFormReset); + get(elForm)?.removeEventListener("submit", onFormSubmit, { capture: true }); + get(elForm)?.removeEventListener("focusin", onFormFocusIn); + hisCollector?.destroy(); + }; + }); + function activatePlugins() { + set(plugins, [...globalThis.$altcha.plugins].map((PluginCls) => new PluginCls(instance)), true); + log("activating plugins", get(plugins).map((plugin) => plugin.constructor.name)); + for (const plugin of get(plugins)) { + plugin.activate(); + } + } + async function callHook(hook, ...args) { + let result = void 0; + for (const plugin of get(plugins)) { + result = await plugin[hook].call(plugin, ...args); + } + return result; + } + function destroyPlugins() { + for (const plugin of get(plugins)) { + plugin.destroy(); + } + } + function createChallengeFromV1(challenge) { + const [_, queryParams] = challenge.salt.split("?"); + const data = {}; + if (queryParams) { + try { + Object.assign(data, Object.fromEntries(new URLSearchParams(queryParams).entries())); + } catch { + } + } + const result = { + codeChallenge: challenge.codeChallenge, + parameters: { + algorithm: challenge.algorithm, + cost: 1, + data, + expiresAt: data?.expires ? parseInt(data.expires, 10) : void 0, + keyLength: challenge.algorithm === "SHA-512" ? 64 : challenge.algorithm === "SHA-384" ? 48 : 32, + nonce: bufferToHex(new TextEncoder().encode(challenge.salt)), + keyPrefix: challenge.challenge, + salt: "" + }, + signature: challenge.signature + }; + Object.defineProperties(result, { + _originalSalt: { enumerable: false, value: challenge.salt, writable: false }, + _version: { enumerable: false, value: 1, writable: false } + }); + return result; + } + function createPayloadV1(challenge, solution) { + return { + algorithm: challenge.parameters.algorithm, + challenge: challenge.parameters.keyPrefix, + number: solution.counter, + salt: "_originalSalt" in challenge ? challenge._originalSalt : challenge.parameters.nonce, + signature: challenge.signature, + took: solution.time || 0 + }; + } + async function delay(ms) { + await new Promise((resolve) => setTimeout(resolve, ms)); + } + async function fetchChallenge(source2 = get(config).challenge, requestOptions) { + const hook = await callHook("onFetchChallenge", source2); + let challenge = null; + if (hook !== void 0) { + return hook; + } + if (typeof source2 === "string") { + if (source2.startsWith("{")) { + log("parsing JSON challenge"); + try { + challenge = JSON.parse(source2); + } catch { + throw new Error(`Unable to parse JSON challenge.`); + } + } else { + log("fetching challenge from", requestOptions?.method || "GET", source2); + set(baseUrl, new URL(source2, location.origin), true); + const resp = await get(config).fetch(source2, { + credentials: get(config).credentials || void 0, + ...requestOptions + }); + await validateResponse(resp); + const configHeader = resp.headers.get("x-altcha-config"); + if (configHeader) { + processConfigHeader(configHeader); + } + const json = await resp.json(); + if (json && "his" in json && json.his) { + log("requested HIS"); + if (!hisCollector) { + throw new Error("Server requested HIS data but collector is disabled."); + } + return fetchChallenge(getUrl(json.his.url, get(baseUrl)), { + body: JSON.stringify({ his: hisCollector.export() }), + headers: { "content-type": "application/json" }, + method: "POST" + }); + } + if (json && "hisResult" in json && json.hisResult) { + log("HIS result", json.hisResult); + } + challenge = json; + } + } else if (source2 && typeof source2 === "object") { + try { + challenge = JSON.parse(JSON.stringify(source2)); + } catch { + throw new Error(`Unable to parse JSON challenge.`); + } + } + if (isChallengeV1(challenge)) { + challenge = createChallengeFromV1(challenge); + } + if (!isChallengeValid(challenge)) { + throw new Error(`Challenge validation failed.`); + } + return challenge; + } + function isChallengeV1(challenge) { + return typeof challenge === "object" && "challenge" in challenge; + } + function isChallengeValid(challenge) { + return !!challenge && typeof challenge === "object" && "parameters" in challenge && !!challenge.parameters && typeof challenge.parameters === "object" && "algorithm" in challenge.parameters && "nonce" in challenge.parameters && "salt" in challenge.parameters && "keyPrefix" in challenge.parameters; + } + function getCheckboxElement() { + return document.getElementById(get(checkboxId)); + } + function getCheckboxComponent(type) { + switch (type) { + case "checkbox": + return Checkbox; + case "switch": + return Switch; + case "native": + default: + return CheckboxNative; + } + } + function getI18nStrings(i18n2, languages) { + const codes = Object.keys(i18n2).map((code) => code.toLowerCase()); + let language = languages.reduce( + (acc, lang) => { + lang = lang.toLowerCase(); + return acc || (i18n2[lang] ? lang : null) || codes.find((code) => lang.split("-")[0] === code.split("-")[0]) || null; + }, + null + ); + if (!i18n2[language || ""]) { + language = "en"; + } + return { language, strings: i18n2[language] }; + } + function getPlacement(display) { + switch (display) { + case "bar": + return get(config).barPlacement || "bottom"; + case "floating": + return get(config).floatingPlacement || "auto"; + default: + return void 0; + } + } + function getTextFields(names) { + const elInputs = [ + ...get(elForm)?.querySelectorAll(fieldsSelector) || [] + ]; + return elInputs.reduce( + (acc, el) => { + const name = el.name; + const value = el.value; + if (name && value) { + acc[name] = /\n/.test(value) ? value.replace(new RegExp("(? { + if (result && !get(codeChallenge)) { + tick().then(() => { + requestSubmit(get(elSubmitter)); + }); + } + }); + } + } + function onWindowPageshow(ev) { + if (ev.persisted) { + setDisplay(get(config).display); + reset$1(); + } + } + function onWindowResize() { + updateUI(); + } + function processConfigHeader(jsonConfig) { + try { + const json = JSON.parse(jsonConfig); + if (json && typeof json === "object") { + configure({ + // Backward compatibility mappings + serverVerificationFields: json?.sentinel?.fields, + serverVerificationTimeZone: json?.sentinel?.timeZone, + verifyUrl: json.verifyurl, + ...json + }); + } + } catch (err) { + log("unable to configure from x-altcha-config header", err); + } + } + function repositionFloating(viewportOffset = 20) { + if (!get(elRoot)) { + return; + } + const floatingPlacement = get(config).floatingPlacement; + if (!get(elFloatingAnchor)) { + set( + elFloatingAnchor, + (get(config).floatingAnchor instanceof HTMLElement ? get(config).floatingAnchor : get(config).floatingAnchor ? document.querySelector(get(config).floatingAnchor) : get(elForm)?.querySelector(submitButtonSelector)) || get(elForm), + true + ); + if (!get(elFloatingAnchor)) { + log("unable to find floating anchor element"); + return; + } + } + const offsetY = parseInt(get(config).floatingOffset, 10) || 12; + const anchorBoundry = get(elFloatingAnchor).getBoundingClientRect(); + const elBoundary = get(elRoot).getBoundingClientRect(); + const docHeight = document.documentElement.clientHeight; + const docWidth = document.documentElement.clientWidth; + const showOnTop = !floatingPlacement || floatingPlacement === "auto" ? anchorBoundry.bottom + elBoundary.height + offsetY + viewportOffset > docHeight : floatingPlacement === "top"; + const left = Math.max(viewportOffset, Math.min(docWidth - viewportOffset - elBoundary.width, anchorBoundry.left + anchorBoundry.width / 2 - elBoundary.width / 2)); + get(elRoot).style.setProperty("--altcha-floating-left", `${left}px`); + get(elRoot).style.setProperty("--altcha-floating-top", showOnTop ? `${anchorBoundry.top - (elBoundary.height + offsetY)}px` : `${anchorBoundry.bottom + offsetY}px`); + get(elRoot).setAttribute("data-floating-position", showOnTop ? "top" : "bottom"); + if (get(elAnchorArrow)) { + const anchorArrowBoundry = get(elAnchorArrow).getBoundingClientRect(); + get(elAnchorArrow).style.left = anchorBoundry.left - left + anchorBoundry.width / 2 - anchorArrowBoundry.width / 2 + "px"; + } + } + async function requestServerVerification(verificationPayload, code) { + const hook = await callHook("onRequestServerVerification", verificationPayload, code); + if (hook !== void 0) { + return hook; + } + log("requesting server verification from", get(config).verifyUrl); + if (!get(config).verifyUrl) { + throw new Error(`Parameter verifyUrl must be set for server verification.`); + } + const resp = await get(config).fetch(getUrl(get(config).verifyUrl, get(baseUrl)), { + body: JSON.stringify({ + code, + fields: get(config).serverVerificationFields ? getTextFields() : void 0, + payload: verificationPayload, + timeZone: get(config).serverVerificationTimeZone ? getTimeZone() : void 0 + }), + credentials: get(config).credentials || void 0, + headers: { "Content-Type": "application/json" }, + method: "POST" + }); + await validateResponse(resp); + const json = await resp.json(); + if (json && typeof json === "object" && "payload" in json && !!json.payload) { + dispatch("serververification", json); + } + return json; + } + function requestSubmit(submitter) { + if (get(elForm) && "requestSubmit" in get(elForm)) { + get(elForm).requestSubmit(submitter); + } else if (get(elForm)?.reportValidity()) { + if (submitter) { + submitter.click(); + } else { + get(elForm).submit(); + } + } + } + function setCookie(value, options = {}) { + const { + domain, + name = get(config).name, + maxAge, + path, + sameSite, + secure + } = options; + let cookie = `${encodeURIComponent(name)}=${encodeURIComponent(value)}`; + if (domain) cookie += `; Domain=${domain}`; + if (maxAge != null) cookie += `; Max-Age=${maxAge}`; + if (path) cookie += `; Path=${path}`; + if (sameSite) cookie += `; SameSite=${sameSite}`; + if (secure) cookie += `; Secure`; + document.cookie = cookie; + } + function setDisplay(value) { + switch (value) { + case "bar": + case "floating": + case "overlay": + hide(); + if (!get(auto) || get(auto) === "off") { + get(userConfig).auto = "onsubmit"; + } + break; + case "standard": + show(); + } + if (get(currentDisplay) !== value) { + set(currentDisplay, value, true); + } + } + function setChallengeExpiration(expiresAt) { + if (get(expirationTimeout)) { + clearTimeout(get(expirationTimeout)); + } + const onExpired = () => { + if (get(currentState) !== State.UNVERIFIED) { + set(checked, false); + setState(State.EXPIRED); + } else { + reset$1(); + } + dispatch("expired"); + }; + const duration = expiresAt * 1e3 - Date.now(); + if (duration >= 1) { + set(expirationTimeout, setTimeout(onExpired, duration), true); + } else { + onExpired(); + } + } + async function validateResponse(resp) { + if (resp.status >= 400) { + if (resp.headers.get("content-type")?.includes("/json")) { + let json; + try { + json = await resp.json(); + } catch { + } + if (json && "error" in json) { + throw new Error(`Server responded with ${resp.status} - ${json.error}`); + } + } + throw new Error(`Server responded with ${resp.status}.`); + } + const contentType = resp.headers.get("content-type"); + if (!contentType || !contentType.includes("/json")) { + throw new Error(`Server responded with invalid content-type. Expected application/json, received ${contentType}.`); + } + } + async function verifyServer(code) { + if (!get(payload)) { + setState(State.ERROR, "Cannot verify code challenge without PoW payload."); + return; + } + setState(State.VERIFYING); + let result = null; + if (get(config).verifyUrl) { + result = await requestServerVerification(get(payload), code); + } else if (get(config).verifyFunction) { + result = await get(config).verifyFunction(get(payload), code); + } else { + setState(State.ERROR, "Parameter verifyUrl is required for code challenge verification."); + return; + } + if (result?.payload) { + set(payload, result.payload, true); + log("server payload", get(payload)); + } + if (result?.verified === true) { + log("verified"); + setState(State.VERIFIED); + dispatch("verified", { payload: get(payload) }); + if (get(auto) === "onsubmit") { + tick().then(() => { + requestSubmit(get(elSubmitter)); + }); + } + } else { + setState(State.ERROR, result?.reason || "Verification failed."); + } + if (!get(config).disableAutoFocus) { + getCheckboxElement()?.focus(); + } + } + function configure(newConfig) { + Object.assign(get(userConfig), { + ...Object.fromEntries(Object.entries(newConfig).filter(([_, value]) => value !== void 0)) + }); + } + function getConfiguration() { + return { ...get(config) }; + } + function getState() { + return get(currentState); + } + function hide() { + set(visible, false); + } + function log(...args) { + if (get(config).debug || args.some((a) => a instanceof Error)) { + console[args[0] instanceof Error ? "error" : "log"]("ALTCHA", `[name=${get(config).name}]`, ...args); + } + } + function reset$1(newState = State.UNVERIFIED, err = null) { + set(checked, false); + set(error, err, true); + set(payload, null); + if (get(currentController)) { + get(currentController).abort(); + } + if (get(expirationTimeout)) { + clearTimeout(get(expirationTimeout)); + set(expirationTimeout, null); + } + setState(newState); + } + function setState(newState, err = null) { + set(currentState, newState, true); + set(error, err, true); + dispatch("statechange", { payload: get(payload), state: get(currentState) }); + } + function show() { + set(visible, true); + tick().then(() => { + updateUI(); + }); + } + function updateUI() { + switch (get(config).display) { + case "floating": + return repositionFloating(); + } + set(updateUISignal, get(updateUISignal) + 1); + } + async function verify(options = {}) { + const { + concurrency = Math.max(1, get(config).workers), + controller = new AbortController(), + minDuration = get(config).minDuration + } = options; + const start = performance.now(); + let challenge = null; + let solution = null; + let isChallengeV12 = false; + const hook = await callHook("onVerify", options); + if (hook !== void 0) { + return hook; + } + reset$1(State.VERIFYING); + set(currentController, controller, true); + try { + if (!isSecureContext) { + throw new Error("Secure context (HTTPS) required."); + } + if (get(config).mockError) { + throw new Error("Mock error."); + } + if (get(config).test) { + log("running test mode with null challenge"); + await delay(Math.max(0, minDuration - (performance.now() - start))); + if (get(currentController)?.signal.aborted) { + reset$1(); + return null; + } + set(payload, btoa(JSON.stringify({ challenge: null, solution: null, test: true })), true); + log("verified"); + setState(State.VERIFIED); + dispatch("verified", { payload: get(payload) }); + return { payload: get(payload) }; + } + challenge = await fetchChallenge(); + if (!challenge) { + throw new Error("Failed to fetch challenge."); + } + log("challenge", challenge); + if ("configuration" in challenge) { + log("re-configuring from challenge", challenge.configuration); + configure(challenge.configuration); + } + if (challenge.parameters.expiresAt) { + setChallengeExpiration(challenge.parameters.expiresAt); + } + isChallengeV12 = "_version" in challenge && challenge._version === 1; + const createWorker = globalThis.$altcha.algorithms.get(challenge.parameters.algorithm); + if (!createWorker) { + throw new Error(`Unsupported algorithm ${challenge.parameters.algorithm}.`); + } + solution = await solveChallengeWorkers({ + challenge, + concurrency, + controller, + createWorker, + counterMode: isChallengeV12 ? "string" : "uint32", + onOutOfMemory: (c) => { + log("out of memory error received"); + dispatch("outofmemory"); + if (get(config).retryOnOutOfMemoryError && c > 1) { + const retryConcurrency = Math.floor(c / 2); + log(`retrying with ${retryConcurrency} workers...`); + return retryConcurrency; + } + }, + timeout: get(config).timeout + }); + if (get(currentController)?.signal.aborted) { + reset$1(); + return null; + } + if (!solution) { + throw new Error("Failed to find solution."); + } + log("solution", solution); + await delay(Math.max(0, minDuration - (performance.now() - start))); + set(codeChallenge, challenge.codeChallenge || get(config).codeChallenge || null, true); + if (isChallengeV12) { + set(payload, btoa(JSON.stringify(createPayloadV1(challenge, solution))), true); + } else { + set( + payload, + btoa(JSON.stringify({ + challenge: { + parameters: challenge.parameters, + signature: challenge.signature + }, + solution + })), + true + ); + } + if (get(codeChallenge)) { + log("requesting code verification"); + setState(State.CODE); + dispatch("codechallenge", { codeChallenge: get(codeChallenge) }); + } else if (get(config).verifyUrl) { + await verifyServer(); + } else { + log("verified"); + setState(State.VERIFIED); + dispatch("verified", { payload: get(payload) }); + } + } catch (err) { + log("verification failed", err); + setState(State.ERROR, String(err)); + return null; + } finally { + set(currentController, null); + } + return { challenge, payload: get(payload), solution }; + } + var $$exports = { + configure, + getConfiguration, + getState, + hide, + log, + reset: reset$1, + setState, + show, + updateUI, + verify + }; + var fragment = root(); + event("scroll", $document, onDocumentScroll); + event("click", $document, onDocumentClick); + event("pageshow", $window, onWindowPageshow); + event("resize", $window, onWindowResize); + var node = first_child(fragment); + { + var consequent = ($$anchor2) => { + var div = root_1(); + append($$anchor2, div); + }; + if_block(node, ($$render) => { + if (get(config).display === "overlay" && get(visible)) $$render(consequent); + }); + } + var div_1 = sibling(node, 2); + var node_1 = child(div_1); + { + var consequent_2 = ($$anchor2) => { + var fragment_1 = root_2(); + var div_2 = first_child(fragment_1); + var node_2 = sibling(div_2, 2); + { + var consequent_1 = ($$anchor3) => { + var div_3 = root_3(); + html(div_3, () => document.querySelector(get(config).overlayContent)?.innerHTML, true); + reset(div_3); + append($$anchor3, div_3); + }; + if_block(node_2, ($$render) => { + if (get(config).overlayContent) $$render(consequent_1); + }); + } + event("click", div_2, onCloseClick, true); + append($$anchor2, fragment_1); + }; + if_block(node_1, ($$render) => { + if (get(config).display === "overlay" && get(visible)) $$render(consequent_2); + }); + } + var div_4 = sibling(node_1, 2); + var div_5 = child(div_4); + var div_6 = child(div_5); + var node_3 = child(div_6); + { + let $0 = /* @__PURE__ */ user_derived(() => get(config).display === "standard" && get(auto) !== "onsubmit" || get(currentState) === State.VERIFYING); + component(node_3, () => get(CheckboxComponent), ($$anchor2, CheckboxComponent_1) => { + CheckboxComponent_1($$anchor2, { + get id() { + return get(checkboxId); + }, + name: "", + get required() { + return get($0); + }, + get loading() { + return get(loading); + }, + get checked() { + return get(checked); + }, + onchange: onCheckboxChange, + oninvalid: onCheckboxInvalid + }); + }); + } + var label = sibling(node_3, 2); + var node_4 = child(label); + { + var consequent_3 = ($$anchor2) => { + var text$1 = text(); + template_effect(() => set_text(text$1, get(strings).verificationRequired)); + append($$anchor2, text$1); + }; + var consequent_4 = ($$anchor2) => { + var text_1 = text(); + template_effect(() => set_text(text_1, get(strings).verifying)); + append($$anchor2, text_1); + }; + var consequent_5 = ($$anchor2) => { + var text_2 = text(); + template_effect(() => set_text(text_2, get(strings).verified)); + append($$anchor2, text_2); + }; + var alternate = ($$anchor2) => { + var text_3 = text(); + template_effect(() => set_text(text_3, get(strings).label)); + append($$anchor2, text_3); + }; + if_block(node_4, ($$render) => { + if (get(currentState) === State.CODE && get(codeChallenge)) $$render(consequent_3); + else if (get(currentState) === State.VERIFYING) $$render(consequent_4, 1); + else if (get(currentState) === State.VERIFIED) $$render(consequent_5, 2); + else $$render(alternate, -1); + }); + } + reset(label); + reset(div_6); + var node_5 = sibling(div_6, 2); + { + var consequent_6 = ($$anchor2) => { + Logo($$anchor2, { + get strings() { + return get(strings); + } + }); + }; + if_block(node_5, ($$render) => { + if (get(showLogo)) $$render(consequent_6); + }); + } + reset(div_5); + var node_6 = sibling(div_5, 2); + { + var consequent_7 = ($$anchor2) => { + { + let $0 = /* @__PURE__ */ user_derived(() => get(config).display === "bar" && get(showLogo)); + Footer($$anchor2, { + get logo() { + return get($0); + }, + get strings() { + return get(strings); + } + }); + } + }; + if_block(node_6, ($$render) => { + if (get(showFooter)) $$render(consequent_7); + }); + } + var node_7 = sibling(node_6, 2); + { + var consequent_8 = ($$anchor2) => { + var div_7 = root_10(); + bind_this(div_7, ($$value) => set(elAnchorArrow, $$value), () => get(elAnchorArrow)); + append($$anchor2, div_7); + }; + if_block(node_7, ($$render) => { + if (get(config).display === "floating") $$render(consequent_8); + }); + } + var node_8 = sibling(node_7, 2); + { + var consequent_9 = ($$anchor2) => { + var input_1 = root_11(); + remove_input_defaults(input_1); + template_effect(() => { + set_attribute(input_1, "name", get(config).name); + set_value(input_1, get(payload)); + }); + append($$anchor2, input_1); + }; + if_block(node_8, ($$render) => { + if (!get(config).setCookie) $$render(consequent_9); + }); + } + reset(div_4); + var node_9 = sibling(div_4, 2); + { + var consequent_12 = ($$anchor2) => { + Popover($$anchor2, { + get anchor() { + return get(elRoot); + }, + onClickOutside: () => { + if (isSecureContext) { + reset$1(); + } + }, + get placement() { + return get(config).popoverPlacement; + }, + role: "alert", + variant: "error", + get dir() { + return get(dir); + }, + get updateUISignal() { + return get(updateUISignal); + }, + children: ($$anchor3, $$slotProps) => { + var fragment_9 = comment(); + var node_10 = first_child(fragment_9); + { + var consequent_10 = ($$anchor4) => { + var div_8 = root_14(); + append($$anchor4, div_8); + }; + var consequent_11 = ($$anchor4) => { + var div_9 = root_15(); + var text_4 = child(div_9, true); + reset(div_9); + template_effect(() => set_text(text_4, get(strings).expired)); + append($$anchor4, div_9); + }; + var alternate_1 = ($$anchor4) => { + var div_10 = root_16(); + var text_5 = child(div_10, true); + reset(div_10); + template_effect(() => { + set_attribute(div_10, "title", get(error)); + set_text(text_5, get(strings).error); + }); + append($$anchor4, div_10); + }; + if_block(node_10, ($$render) => { + if (!get(error) && !isSecureContext) $$render(consequent_10); + else if (!get(error) && get(currentState) === State.EXPIRED) $$render(consequent_11, 1); + else $$render(alternate_1, -1); + }); + } + append($$anchor3, fragment_9); + }, + $$slots: { default: true } + }); + }; + var consequent_14 = ($$anchor2) => { + var fragment_10 = comment(); + var node_11 = first_child(fragment_10); + key(node_11, () => get(codeChallenge), ($$anchor3) => { + { + let $0 = /* @__PURE__ */ user_derived(() => get(config).codeChallengeDisplay !== "standard"); + Popover($$anchor3, { + get anchor() { + return get(elRoot); + }, + get backdrop() { + return get($0); + }, + get display() { + return get(config).codeChallengeDisplay; + }, + onClose: () => { + reset$1(); + }, + get placement() { + return get(config).popoverPlacement; + }, + role: "dialog", + get "aria-label"() { + return get(strings).verificationRequired; + }, + get dir() { + return get(dir); + }, + get updateUISignal() { + return get(updateUISignal); + }, + children: ($$anchor4, $$slotProps) => { + var fragment_12 = root_19(); + var node_12 = first_child(fragment_12); + Code(node_12, { + get audioUrl() { + return get(codeChallengeAudioUrl); + }, + get imageUrl() { + return get(codeChallengeImageUrl); + }, + onCancel: () => reset$1(), + onReload: () => verify(), + onSubmit: (code) => verifyServer(code), + get codeChallenge() { + return get(codeChallenge); + }, + get config() { + return get(config); + }, + get strings() { + return get(strings); + } + }); + var node_13 = sibling(node_12, 2); + { + var consequent_13 = ($$anchor5) => { + Footer($$anchor5, { + get logo() { + return get(showLogo); + }, + get strings() { + return get(strings); + } + }); + }; + if_block(node_13, ($$render) => { + if (get(showFooter) && get(config).codeChallengeDisplay !== "standard") $$render(consequent_13); + }); + } + append($$anchor4, fragment_12); + }, + $$slots: { default: true } + }); + } + }); + append($$anchor2, fragment_10); + }; + if_block(node_9, ($$render) => { + if (get(error) || get(currentState) === State.EXPIRED || !isSecureContext) $$render(consequent_12); + else if (get(codeChallenge) && get(currentState) === State.CODE) $$render(consequent_14, 1); + }); + } + reset(div_1); + bind_this(div_1, ($$value) => set(elRoot, $$value), () => get(elRoot)); + template_effect( + ($0) => { + set_attribute(div_1, "data-state", get(currentState)); + set_attribute(div_1, "data-display", get(config).display || void 0); + set_attribute(div_1, "data-placement", $0); + set_attribute(div_1, "data-visible", get(visible) || void 0); + set_attribute(div_1, "dir", get(dir)); + set_attribute(label, "for", get(checkboxId)); + div_1.dir = div_1.dir; + }, + [() => getPlacement(get(config).display)] + ); + append($$anchor, fragment); + var $$pop = pop($$exports); + $$cleanup(); + return $$pop; + } + if (typeof window !== "undefined" && window.customElements && !customElements.get("altcha-widget")) customElements.define("altcha-widget", create_custom_element( + Widget, + { + auto: { type: "String" }, + challenge: { type: "String" }, + configuration: { type: "String" }, + display: { type: "String" }, + language: { type: "String" }, + name: { type: "String" }, + theme: { type: "String" }, + type: { type: "String" }, + workers: { type: "Number" } + }, + [], + [ + "configure", + "getConfiguration", + "getState", + "hide", + "log", + "reset", + "setState", + "show", + "updateUI", + "verify" + ] + )); +})); diff --git a/frontend/node_modules/altcha/dist/external/altcha.umd.min.cjs b/frontend/node_modules/altcha/dist/external/altcha.umd.min.cjs new file mode 100644 index 0000000..9798c7e --- /dev/null +++ b/frontend/node_modules/altcha/dist/external/altcha.umd.min.cjs @@ -0,0 +1 @@ +!function(t){"function"==typeof define&&define.amd?define(t):t()}(function(){"use strict";var t=document.createElement("style");t.textContent=':root {\n --altcha-border-color: var(--altcha-color-neutral);\n --altcha-border-width: 1px;\n --altcha-border-radius: 6px;\n --altcha-color-base: light-dark(oklch(100% 0.00011 271.152), oklch(20.904% 0.00002 271.152));\n --altcha-color-base-content: light-dark(\n \toklch(20.904% 0.00002 271.152),\n \toklch(100% 0.00011 271.152)\n );\n --altcha-color-error: oklch(51.284% 0.20527 28.678);\n --altcha-color-error-content: oklch(100% 0.00011 271.152);\n --altcha-color-neutral: light-dark(oklch(83.591% 0.0001 271.152), oklch(46.04% 0.00005 271.152));\n --altcha-color-neutral-content: light-dark(\n \toklch(46.76% 0.00005 271.152),\n \toklch(100% 0.00011 271.152)\n );\n --altcha-color-primary: oklch(40.279% 0.2449 268.131);\n --altcha-color-primary-content: oklch(100% 0.00011 271.152);\n --altcha-color-success: oklch(55.748% 0.18968 142.511);\n --altcha-color-success-content: oklch(100% 0.00011 271.152);\n --altcha-checkbox-border-color: light-dark(\n \toklch(66.494% 0.00233 15.434),\n \toklch(51.028% 0.00006 271.152)\n );\n --altcha-checkbox-border-radius: 5px;\n --altcha-checkbox-border-width: var(--altcha-border-width);\n --altcha-checkbox-outline: 2px solid var(--altcha-checkbox-outline-color);\n --altcha-checkbox-outline-color: -webkit-focus-ring-color;\n --altcha-checkbox-outline-offset: 2px;\n --altcha-checkbox-size: 22px;\n --altcha-checkbox-transition-duration: var(--altcha-transition-duration);\n --altcha-input-background-color: var(--altcha-color-base);\n --altcha-input-border-radius: 3px;\n --altcha-input-border-width: 1px;\n --altcha-input-color: var(--altcha-color-base-content);\n --altcha-max-width: 320px;\n --altcha-padding: 0.75rem;\n --altcha-popover-arrow-size: 6px;\n --altcha-popover-color: var(--altcha-border-color);\n --altcha-shadow: drop-shadow(3px 3px 6px oklch(0% 0 0 / 0.2));\n --altcha-spinner-color: var(--altcha-color-base-content);\n --altcha-switch-background-color: var(--altcha-color-neutral);\n --altcha-switch-border-radius: calc(infinity * 1px);\n --altcha-switch-height: var(--altcha-checkbox-size);\n --altcha-switch-padding: 0.25rem;\n --altcha-switch-width: calc(var(--altcha-checkbox-size) * 1.75);\n --altcha-switch-toggle-border-radius: 100%;\n --altcha-switch-toggle-color: var(--altcha-color-neutral-content);\n --altcha-switch-toggle-size: calc(\n \tvar(--altcha-switch-height) - calc(var(--altcha-switch-padding) * 2)\n );\n --altcha-transition-duration: 0.6s;\n --altcha-z-index: 99999999;\n --altcha-z-index-popover: 999999999;\n}\n\n@supports (-moz-appearance: none) {\n :root {\n --altcha-checkbox-outline-color: var(--altcha-color-primary);\n }\n}\n.altcha {\n all: revert-layer;\n display: none;\n font-family: inherit;\n font-size: inherit;\n position: relative;\n}\n.altcha[data-visible] {\n display: block;\n}\n.altcha-popover, .altcha-popover * {\n all: revert-layer;\n box-sizing: border-box;\n font-family: inherit;\n font-size: inherit;\n line-height: 1.25;\n}\n.altcha * {\n all: revert-layer;\n box-sizing: border-box;\n font-family: inherit;\n font-size: inherit;\n line-height: 1.25;\n}\n.altcha a, .altcha-popover a {\n color: currentColor;\n text-decoration: none;\n}\n.altcha a:hover, .altcha-popover a:hover {\n color: currentColor;\n}\n.altcha-main {\n align-items: start;\n background-color: var(--altcha-color-base);\n border: var(--altcha-border-width, 1px) solid var(--altcha-border-color);\n border-radius: var(--altcha-border-radius, 0);\n color: var(--altcha-color-base-content);\n display: flex;\n flex-direction: column;\n gap: 0.5rem;\n justify-content: space-between;\n padding: var(--altcha-padding);\n max-width: var(--altcha-max-width, 100%);\n}\n.altcha-main > * {\n display: flex;\n width: 100%;\n}\n.altcha-main > *:first-child {\n flex-grow: 1;\n}\n.altcha-checkbox-wrap {\n align-items: center;\n display: flex;\n flex-direction: row;\n flex-grow: 1;\n gap: 0.5rem;\n}\n.altcha-checkbox-wrap > * {\n display: flex;\n}\n.altcha-logo {\n opacity: 0.7;\n}\n.altcha-footer {\n align-items: center;\n display: flex;\n flex-grow: 1;\n gap: 0.5rem;\n justify-content: flex-end;\n font-size: 0.7rem;\n opacity: 0.7;\n}\n.altcha-footer p {\n margin: 0;\n padding: 0;\n}\n.altcha-error {\n font-size: 0.85rem;\n}\n.altcha-button {\n align-items: center;\n background: var(--altcha-color-primary);\n border: var(--altcha-input-border-width) solid var(--altcha-color-primary);\n border-radius: var(--altcha-input-border-radius);\n color: var(--altcha-color-primary-content);\n cursor: pointer;\n display: flex;\n font-size: 0.9rem;\n gap: 0.5rem;\n padding: 0.35rem;\n}\n.altcha-button:focus {\n border-color: var(--altcha-color-primary);\n outline: var(--altcha-checkbox-outline);\n outline-offset: var(--altcha-checkbox-outline-offset);\n}\n.altcha-button > .altcha-spinner, .altcha-button > svg {\n height: 20px;\n width: 20px;\n}\n.altcha-button-secondary {\n background: transparent;\n border-color: var(--altcha-color-neutral);\n color: var(--altcha-color-neutral-content);\n}\n.altcha-input {\n background: var(--altcha-input-background-color);\n border: var(--altcha-input-border-width) solid var(--altcha-color-neutral);\n border-radius: var(--altcha-input-border-radius);\n color: var(--altcha-input-color);\n flex-grow: 1;\n font-size: 1rem;\n min-width: 0;\n padding: 0.25rem;\n width: auto;\n}\n.altcha-input:focus {\n border-color: var(--altcha-color-primary);\n outline: var(--altcha-checkbox-outline);\n outline-offset: var(--altcha-checkbox-outline-offset);\n}\n.altcha-spinner {\n animation: altcha-rotate 0.6s linear infinite;\n border-radius: 100%;\n border: var(--altcha-checkbox-border-width) solid var(--altcha-spinner-color);\n border-bottom-color: transparent;\n border-right-color: transparent;\n opacity: 0.7;\n}\n.altcha-popover {\n background-color: var(--altcha-color-base);\n border: var(--altcha-border-width) solid var(--altcha-border-color);\n border-radius: var(--altcha-border-radius);\n color: var(--altcha-color-base-content);\n filter: var(--altcha-shadow);\n position: absolute;\n left: calc(var(--altcha-padding) / 2);\n max-width: calc(var(--altcha-max-width) - var(--altcha-padding));\n top: calc(var(--altcha-padding) + var(--altcha-checkbox-size) + var(--altcha-popover-arrow-size));\n z-index: var(--altcha-z-index-popover);\n}\n.altcha-popover-arrow {\n border: var(--altcha-popover-arrow-size) solid transparent;\n border-bottom-color: var(--altcha-popover-color);\n content: "";\n height: 0;\n left: calc(var(--altcha-checkbox-size) / 2);\n position: absolute;\n top: calc(var(--altcha-popover-arrow-size) * -2);\n width: 0;\n}\n.altcha-popover-content {\n max-height: 100dvh;\n overflow: auto;\n padding: var(--altcha-padding);\n}\n.altcha-popover[data-top=true][data-display=standard] {\n bottom: calc(100% - (var(--altcha-padding) - var(--altcha-popover-arrow-size)));\n top: auto;\n}\n.altcha-popover[data-top=true][data-display=standard] .altcha-popover-arrow {\n border-bottom-color: transparent;\n border-top-color: var(--altcha-popover-color);\n bottom: calc(var(--altcha-popover-arrow-size) * -2);\n top: auto;\n}\n.altcha-popover[data-variant=error] {\n --altcha-popover-color: var(--altcha-color-error);\n background-color: var(--altcha-color-error);\n border-color: var(--altcha-color-error);\n color: var(--altcha-color-error-content);\n}\n.altcha-popover[data-variant=error] .altcha-popover-content {\n padding: calc(var(--altcha-padding) / 1.5) var(--altcha-padding);\n}\n.altcha-popover[data-display=overlay] {\n animation: altcha-overlay-slidein 0.5s forwards;\n left: 50%;\n position: fixed;\n top: 45%;\n transform: translate(-50%, -50%);\n width: var(--altcha-max-width);\n z-index: var(--altcha-z-index);\n}\n.altcha-popover[data-display=bottomsheet] {\n animation: altcha-bottomsheet-slideup 0.5s forwards;\n border-bottom-left-radius: 0;\n border-bottom-right-radius: 0;\n border-bottom: 0;\n bottom: -100%;\n left: 50%;\n position: fixed;\n top: auto;\n transform: translate(-50%, 0);\n width: var(--altcha-max-width);\n z-index: var(--altcha-z-index);\n}\n.altcha-popover[data-display=bottomsheet] .altcha-popover-content {\n padding-bottom: calc(var(--altcha-padding) * 2);\n}\n.altcha-popover-backdrop {\n background: var(--altcha-color-base-content);\n bottom: 0;\n left: 0;\n opacity: 0.1;\n position: fixed;\n right: 0;\n top: 0;\n transition: opacity 0.5s;\n z-index: var(--altcha-z-index);\n}\n.altcha-popover-close {\n color: var(--altcha-color-base-content);\n cursor: pointer;\n display: inline-block;\n font-size: 1rem;\n height: 1.25rem;\n line-height: 0.95;\n position: absolute;\n right: 0;\n text-align: center;\n text-shadow: 0 0 1px var(--altcha-color-base);\n top: -1.5rem;\n width: 1.25rem;\n z-index: var(--altcha-z-index);\n}\n[dir=rtl] .altcha-popover {\n left: auto;\n right: calc(var(--altcha-padding) / 2);\n}\n[dir=rtl] .altcha-popover-arrow {\n left: auto;\n right: calc(var(--altcha-checkbox-size) / 2);\n}\n[dir=rtl] .altcha-popover-close {\n left: 0;\n right: auto;\n}\n.altcha-popover[data-display=bottomsheet] .altcha-footer, .altcha-popover[data-display=overlay] .altcha-footer {\n align-items: center;\n justify-content: center;\n padding-top: 1rem;\n gap: 0.5rem;\n}\n.altcha-popover[data-display=bottomsheet] .altcha-footer svg, .altcha-popover[data-display=overlay] .altcha-footer svg {\n height: 18px;\n width: 18px;\n vertical-align: middle;\n}\n.altcha-code-challenge > form {\n display: flex;\n flex-direction: column;\n gap: 0.5rem;\n}\n.altcha-code-challenge-title {\n font-weight: 600;\n}\n.altcha-code-challenge-text {\n font-size: 0.85rem;\n}\n.altcha-code-challenge-image {\n background: white;\n border: var(--altcha-input-border-width) solid var(--altcha-color-neutral);\n border-radius: var(--altcha-input-border-radius);\n object-fit: contain;\n height: 50px;\n}\n.altcha-code-challenge-row {\n display: flex;\n gap: 0.5rem;\n}\n.altcha-code-challenge-buttons {\n align-items: center;\n display: flex;\n flex-direction: column;\n gap: 0.5rem;\n margin-top: var(--altcha-padding);\n justify-content: space-between;\n}\n.altcha-code-challenge-buttons button {\n justify-content: center;\n width: 100%;\n}\n.altcha-checkbox {\n cursor: pointer;\n height: var(--altcha-checkbox-size);\n position: relative;\n width: var(--altcha-checkbox-size);\n}\n.altcha-checkbox input {\n appearance: none;\n background: var(--altcha-input-background-color);\n border: var(--altcha-checkbox-border-width, 2px) solid var(--altcha-checkbox-border-color);\n border-radius: var(--altcha-checkbox-border-radius);\n cursor: pointer;\n height: var(--altcha-checkbox-size);\n left: 0;\n margin: 0;\n padding: 0;\n position: absolute;\n top: 0;\n width: var(--altcha-checkbox-size);\n}\n@supports (hanging-punctuation: first) and (font: -apple-system-body) and (-webkit-appearance: none) {\n .altcha-checkbox input {\n /* Safari-only: fixes focus outline */\n }\n .altcha-checkbox input:focus {\n outline-width: 2px;\n outline-style: solid;\n }\n}\n.altcha-checkbox input:before {\n border-radius: var(--altcha-checkbox-border-radius);\n content: "";\n width: 100%;\n height: 100%;\n background: var(--altcha-color-neutral);\n display: block;\n transform: scale(0);\n}\n.altcha-checkbox input:checked {\n background-color: var(--altcha-color-success);\n border-color: var(--altcha-color-success);\n}\n.altcha-checkbox input:checked::before {\n background-color: var(--altcha-color-success);\n opacity: 0;\n transform: scale(2.2);\n transition: all var(--altcha-checkbox-transition-duration) ease;\n transition-delay: 0.1s;\n}\n.altcha-checkbox svg {\n --altcha-radio-svg-size: calc(var(--altcha-checkbox-size) * 0.5);\n --altcha-radio-svg-offset: calc(var(--altcha-checkbox-size) * 0.25);\n fill: none;\n left: var(--altcha-radio-svg-offset);\n height: var(--altcha-radio-svg-size);\n opacity: 0;\n position: absolute;\n stroke: currentColor;\n stroke-width: 2;\n stroke-linecap: round;\n stroke-linejoin: round;\n stroke-dasharray: 16px;\n stroke-dashoffset: 16px;\n top: var(--altcha-radio-svg-offset);\n transform: translate3d(0, 0, 0);\n width: var(--altcha-radio-svg-size);\n}\n.altcha-checkbox input:checked + svg {\n color: var(--altcha-color-success-content);\n opacity: 1;\n stroke-dashoffset: 0;\n transition: all var(--altcha-checkbox-transition-duration) ease;\n transition-delay: 0.1s;\n}\n.altcha-checkbox-spinner {\n display: none;\n left: 0;\n height: var(--altcha-checkbox-size);\n position: absolute;\n top: 0;\n width: var(--altcha-checkbox-size);\n}\n.altcha-checkbox[data-loading=true] input {\n appearance: none;\n opacity: 0;\n pointer-events: none;\n}\n.altcha-checkbox[data-loading=true] .altcha-checkbox-spinner {\n display: block;\n}\n.altcha-checkbox-native {\n height: var(--altcha-checkbox-size);\n position: relative;\n width: var(--altcha-checkbox-size);\n}\n.altcha-checkbox-native input {\n height: var(--altcha-checkbox-size);\n margin: 0;\n width: var(--altcha-checkbox-size);\n}\n.altcha-checkbox-native-spinner {\n display: none;\n left: 0;\n height: var(--altcha-checkbox-size);\n position: absolute;\n top: 0;\n width: var(--altcha-checkbox-size);\n}\n.altcha-checkbox-native[data-loading=true] input {\n appearance: none;\n opacity: 0;\n pointer-events: none;\n}\n.altcha-checkbox-native[data-loading=true] .altcha-checkbox-native-spinner {\n display: block;\n}\n.altcha-switch {\n align-items: center;\n border-radius: var(--altcha-switch-border-radius);\n background-color: var(--altcha-switch-background-color);\n display: flex;\n height: var(--altcha-switch-height);\n padding: var(--altcha-switch-padding);\n position: relative;\n width: var(--altcha-switch-width);\n}\n.altcha-switch:focus-within {\n outline: var(--altcha-checkbox-outline);\n outline-offset: var(--altcha-checkbox-outline-offset);\n}\n.altcha-switch input {\n appearance: none;\n cursor: pointer;\n height: 100%;\n left: 0;\n opacity: 0;\n position: absolute;\n top: 0;\n width: 100%;\n}\n.altcha-switch-toggle {\n align-items: center;\n background-color: var(--altcha-switch-toggle-color);\n border-radius: var(--altcha-switch-toggle-border-radius);\n cursor: pointer;\n display: flex;\n height: var(--altcha-switch-toggle-size);\n justify-content: center;\n left: var(--altcha-switch-padding);\n position: absolute;\n transition: width 150ms ease-out, left 150ms ease-out;\n width: var(--altcha-switch-toggle-size);\n}\n.altcha-switch-spinner {\n display: none;\n height: var(--altcha-switch-toggle-size);\n width: var(--altcha-switch-toggle-size);\n}\n.altcha-switch[data-loading=true] {\n pointer-events: none;\n}\n.altcha-switch[data-loading=true] .altcha-switch-spinner {\n display: block;\n}\n.altcha-switch[data-loading=true] .altcha-switch-toggle {\n background-color: transparent;\n left: calc(50% - var(--altcha-switch-toggle-size) / 2);\n}\n[data-state=verified] .altcha-switch {\n --altcha-switch-background-color: var(--altcha-color-success);\n}\n[data-state=verified] .altcha-switch-toggle {\n background-color: var(--altcha-color-success-content);\n left: calc(100% - var(--altcha-switch-height) + var(--altcha-switch-padding));\n}\n[dir=rtl] .altcha-switch-toggle {\n left: calc(100% - var(--altcha-switch-height) + var(--altcha-switch-padding));\n}\n[dir=rtl][data-state=verified] .altcha-switch-toggle {\n left: var(--altcha-switch-padding);\n}\n.altcha-floating-arrow {\n border: 6px solid transparent;\n border-bottom-color: var(--altcha-border-color);\n content: "";\n height: 0;\n left: 12px;\n position: absolute;\n top: -12px;\n width: 0;\n}\n.altcha-overlay-backdrop {\n bottom: 0;\n left: 0;\n position: fixed;\n right: 0;\n top: 0;\n transition: opacity var(--altcha-transition-duration);\n z-index: var(--altcha-z-index);\n}\n.altcha-overlay-close {\n display: inline-block;\n color: currentColor;\n cursor: pointer;\n font-size: 1rem;\n height: 1rem;\n line-height: 0.85;\n position: absolute;\n right: 0;\n text-align: center;\n text-shadow: 0 0 1px var(--altcha-color-base);\n top: -1.5rem;\n width: 1rem;\n z-index: var(--altcha-z-index);\n}\n.altcha[data-display=overlay] {\n animation: altcha-overlay-slidein var(--altcha-transition-duration) forwards;\n filter: var(--altcha-shadow);\n left: 50%;\n opacity: 0;\n position: fixed;\n top: 45%;\n transform: translate(-50%, -50%);\n z-index: var(--altcha-z-index);\n}\n.altcha[data-display=overlay] .altcha-main {\n width: var(--altcha-max-width);\n}\n.altcha[data-display=floating] {\n display: none;\n filter: var(--altcha-shadow);\n left: var(--altcha-floating-left, -100%);\n position: fixed;\n top: var(--altcha-floating-top, -100%);\n z-index: var(--altcha-z-index);\n}\n.altcha[data-display=floating] .altcha-main {\n width: var(--altcha-max-width);\n}\n.altcha[data-display=floating][data-floating-position=top] .altcha-floating-arrow {\n border-bottom-color: transparent;\n border-top-color: var(--altcha-border-color);\n bottom: -12px;\n top: auto;\n}\n.altcha[data-display=floating][data-visible] {\n display: flex;\n}\n.altcha[data-display=bar] {\n bottom: -100%;\n filter: var(--altcha-shadow);\n left: 0;\n position: fixed;\n right: 0;\n transition: bottom var(--altcha-transition-duration), top var(--altcha-transition-duration);\n z-index: var(--altcha-z-index);\n}\n.altcha[data-display=bar] .altcha-main {\n align-items: center;\n border-radius: 0;\n border-width: var(--altcha-border-width) 0 0 0;\n flex-direction: row;\n max-width: 100% !important;\n}\n.altcha[data-display=bar] .altcha-main > * {\n width: auto;\n}\n.altcha[data-display=bar][data-placement=top] {\n bottom: auto;\n top: -100%;\n}\n.altcha[data-display=bar][data-placement=top] .altcha-main {\n border-width: 0 0 var(--altcha-border-width) 0;\n}\n.altcha[data-display=bar][data-placement=bottom]:not([data-state=unverified]) {\n bottom: 0;\n}\n.altcha[data-display=bar][data-placement=top]:not([data-state=unverified]) {\n top: 0;\n}\n.altcha[data-display=invisible] {\n display: none;\n}\n\n@keyframes altcha-rotate {\n 0% {\n transform: rotate(0deg);\n }\n 100% {\n transform: rotate(360deg);\n }\n}\n@keyframes altcha-bottomsheet-slideup {\n 100% {\n bottom: 0;\n }\n}\n@keyframes altcha-overlay-slidein {\n 100% {\n opacity: 1;\n top: 50%;\n }\n}/*$vite$:1*/',document.head.appendChild(t);const e=!1;var n=Array.isArray,r=Array.prototype.indexOf,a=Array.prototype.includes,o=Array.from,i=Object.keys,l=Object.defineProperty,c=Object.getOwnPropertyDescriptor,s=Object.getOwnPropertyDescriptors,u=Object.prototype,d=Array.prototype,h=Object.getPrototypeOf,f=Object.isExtensible;const p=()=>{};function v(){var t,e;return{promise:new Promise((n,r)=>{t=n,e=r}),resolve:t,reject:e}}const g=1<<24,m=16,b=32,y=64,w=512,_=1024,k=2048,x=4096,$=8192,E=16384,C=32768,S=1<<25,I=65536,O=1<<17,T=1<<19,A=65536,R=1<<21,P=1<<23,M=Symbol("$state"),L=Symbol("legacy props"),z=Symbol(""),N=Symbol("attributes"),D=Symbol("class"),V=Symbol("style"),j=Symbol("text"),U=Symbol("form reset"),F=new class extends Error{name="StaleReactionError";message="The reaction that called `getAbortSignal()` was re-run or destroyed"},q=!!globalThis.document?.contentType&&globalThis.document.contentType.includes("xml");function H(t){return t===this.v}function G(t,e){return t!=t?e==e:t!==e||null!==t&&"object"==typeof t||"function"==typeof t}function Y(t){return!G(t,this.v)}const B={},J=Symbol("uninitialized"),Z="http://www.w3.org/1999/xhtml";let W=null;function X(t){W=t}function K(t,e=!1,n){W={p:W,i:!1,c:null,e:null,s:t,x:null,r:Fe,l:null}}function Q(t){var e=W,n=e.e;if(null!==n)for(var r of(e.e=null,n))mn(r);return void 0!==t&&(e.x=t),e.i=!0,W=e.p,t??{}}let tt=[];function et(){var t=tt;tt=[],function(t){for(var e=0;e{e===tt&&et()})}tt.push(t)}function rt(){for(;tt.length>0;)et()}function at(t){console.warn("https://svelte.dev/e/hydration_mismatch")}let ot,it=!1;function lt(t){it=t}function ct(t){if(null===t)throw at(),B;return ot=t}function st(){return ct(Et(ot))}function ut(t){if(it){if(null!==Et(ot))throw at(),B;ot=t}}function dt(t=1){if(it){for(var e=t,n=ot;e--;)n=Et(n);ot=n}}function ht(t=!0){for(var e=0,n=ot;;){if(8===n.nodeType){var r=n.data;if("]"===r){if(0===e)return n;e-=1}else("["===r||"[!"===r||"["===r[0]&&!isNaN(Number(r.slice(1))))&&(e+=1)}var a=Et(n);t&&n.remove(),n=a}}function ft(t){if(!t||8!==t.nodeType)throw at(),B;return t.data}function pt(t){if("object"!=typeof t||null===t||M in t)return t;const e=h(t);if(e!==u&&e!==d)return t;var r=new Map,a=n(t),o=Ce(0),i=Xe,l=t=>{if(Xe===i)return t();var e=Ve,n=Xe;Ue(null),Ke(i);var r=t();return Ue(e),Ke(n),r};return a&&r.set("length",Ce(t.length)),new Proxy(t,{defineProperty(t,e,n){"value"in n&&!1!==n.configurable&&!1!==n.enumerable&&!1!==n.writable||function(){throw new Error("https://svelte.dev/e/state_descriptors_fixed")}();var a=r.get(e);return void 0===a?l(()=>{var t=Ce(n.value);return r.set(e,t),t}):Ie(a,n.value,!0),!0},deleteProperty(t,e){var n=r.get(e);if(void 0===n){if(e in t){const t=l(()=>Ce(J));r.set(e,t),Te(o)}}else Ie(n,J),Te(o);return!0},get(e,n,a){if(n===M)return t;var o=r.get(n),i=n in e;if(void 0!==o||i&&!c(e,n)?.writable||(o=l(()=>Ce(pt(i?e[n]:J))),r.set(n,o)),void 0!==o){var s=cn(o);return s===J?void 0:s}return Reflect.get(e,n,a)},getOwnPropertyDescriptor(t,e){var n=Reflect.getOwnPropertyDescriptor(t,e);if(n&&"value"in n){var a=r.get(e);a&&(n.value=cn(a))}else if(void 0===n){var o=r.get(e),i=o?.v;if(void 0!==o&&i!==J)return{enumerable:!0,configurable:!0,value:i,writable:!0}}return n},has(t,e){if(e===M)return!0;var n=r.get(e),a=void 0!==n&&n.v!==J||Reflect.has(t,e);if((void 0!==n||null!==Fe&&(!a||c(t,e)?.writable))&&(void 0===n&&(n=l(()=>Ce(a?pt(t[e]):J)),r.set(e,n)),cn(n)===J))return!1;return a},set(t,e,n,i){var s=r.get(e),u=e in t;if(a&&"length"===e)for(var d=n;dCe(J)),r.set(d+"",h))}void 0===s?u&&!c(t,e)?.writable||(Ie(s=l(()=>Ce(void 0)),pt(n)),r.set(e,s)):(u=s.v!==J,Ie(s,l(()=>pt(n))));var f=Reflect.getOwnPropertyDescriptor(t,e);if(f?.set&&f.set.call(i,n),!u){if(a&&"string"==typeof e){var p=r.get("length"),v=Number(e);Number.isInteger(v)&&v>=p.v&&Ie(p,v+1)}Te(o)}return!0},ownKeys(t){cn(o);var e=Reflect.ownKeys(t).filter(t=>{var e=r.get(t);return void 0===e||e.v!==J});for(var[n,a]of r)a.v===J||n in t||e.push(n);return e},setPrototypeOf(){!function(){throw new Error("https://svelte.dev/e/state_prototype_fixed")}()}})}function vt(t){try{if(null!==t&&"object"==typeof t&&M in t)return t[M]}catch{}return t}function gt(t,e){return Object.is(vt(t),vt(e))}var mt,bt,yt,wt,_t;function kt(){if(void 0===mt){mt=window,bt=document,yt=/Firefox/.test(navigator.userAgent);var t=Element.prototype,e=Node.prototype,n=Text.prototype;wt=c(e,"firstChild").get,_t=c(e,"nextSibling").get,f(t)&&(t[D]=void 0,t[N]=null,t[V]=void 0,t.__e=void 0),f(n)&&(n[j]=void 0)}}function xt(t=""){return document.createTextNode(t)}function $t(t){return wt.call(t)}function Et(t){return _t.call(t)}function Ct(t,e){if(!it)return $t(t);var n=$t(ot);if(null===n)n=ot.appendChild(xt());else if(e&&3!==n.nodeType){var r=xt();return n?.before(r),ct(r),r}return e&&Tt(n),ct(n),n}function St(t,e=!1){if(!it){var n=$t(t);return n instanceof Comment&&""===n.data?Et(n):n}if(e){if(3!==ot?.nodeType){var r=xt();return ot?.before(r),ct(r),r}Tt(ot)}return ot}function It(t,e=1,n=!1){let r=it?ot:t;for(var a;e--;)a=r,r=Et(r);if(!it)return r;if(n){if(3!==r?.nodeType){var o=xt();return null===r?a?.after(o):r.before(o),ct(o),o}Tt(r)}return ct(r),r}function Ot(t,e,n){let r;return document.createElementNS(e??Z,t,r)}function Tt(t){if(t.nodeValue.length<65536)return;let e=t.nextSibling;for(;null!==e&&3===e.nodeType;)e.remove(),t.nodeValue+=e.nodeValue,e=t.nextSibling}function At(t){var e=Fe;if(null===e)return Ve.f|=P,t;if(0===(e.f&C)&&!(4&e.f))throw t;Rt(t,e)}function Rt(t,e){for(;null!==e;){if(128&e.f){if(0===(e.f&C))throw t;try{return void e.b.error(t)}catch(e){t=e}}e=e.parent}throw t}const Pt=-7169;function Mt(t,e){t.f=t.f&Pt|e}function Lt(t){0!==(t.f&w)||null===t.deps?Mt(t,_):Mt(t,x)}function zt(t){if(null!==t)for(const e of t)2&e.f&&0!==(e.f&A)&&(e.f^=A,zt(e.deps))}function Nt(t,e,n){0!==(t.f&k)?e.add(t):0!==(t.f&x)&&n.add(t),zt(t.deps),Mt(t,_)}function Dt(t,e,n){if(null==t)return e(void 0),p;const r=dn(()=>t.subscribe(e,n));return r.unsubscribe?()=>r.unsubscribe():r}const Vt=[];function jt(t,e=p){let n=null;const r=new Set;function a(e){if(G(t,e)&&(t=e,n)){const e=!Vt.length;for(const e of r)e[1](),Vt.push(e,t);if(e){for(let t=0;t{r.delete(c),0===r.size&&n&&(n(),n=null)}}}}function Ut(t){let e;return Dt(t,t=>e=t)(),e}let Ft=Symbol("unmounted");function qt(t,e,n){const r=n[e]??={store:null,source:Se(void 0),unsubscribe:p};if(r.store!==t&&!(Ft in n))if(r.unsubscribe(),r.store=t??null,null==t)r.source.v=void 0,r.unsubscribe=p;else{var a=!0;r.unsubscribe=Dt(t,t=>{a?r.source.v=t:Ie(r.source,t)}),a=!1}return t&&Ft in n?Ut(t):cn(r.source)}let Ht=null,Gt=null,Yt=null,Bt=null,Jt=null,Zt=null,Wt=!1,Xt=!1,Kt=null,Qt=null;var te=0;let ee=1;class ne{id=ee++;#t=!1;linked=!0;#e=null;#n=null;async_deriveds=new Map;current=new Map;previous=new Map;unblocked=new Set;#r=new Set;#a=new Set;#o=new Set;#i=0;#l=new Map;#c=null;#s=[];#u=[];#d=new Set;#h=new Set;#f=new Map;#p=new Set;is_fork=!1;#v=!1;#g(){if(this.is_fork)return!0;for(const n of this.#l.keys()){for(var t=n,e=!1;null!==t.parent;){if(this.#f.has(t)){e=!0;break}t=t.parent}if(!e)return!0}return!1}skip_effect(t){this.#f.has(t)||this.#f.set(t,{d:[],m:[]}),this.#p.delete(t)}unskip_effect(t,e=t=>this.schedule(t)){var n=this.#f.get(t);if(n){for(var r of(this.#f.delete(t),n.d))Mt(r,k),e(r);for(r of n.m)Mt(r,x),e(r)}this.#p.add(t)}#m(){if(this.#t=!0,te++>1e3&&(this.#b(),function(){try{!function(){throw new Error("https://svelte.dev/e/effect_update_depth_exceeded")}()}catch(t){Rt(t,Zt)}}()),!this.#g()){for(const t of this.#d)this.#h.delete(t),Mt(t,k),this.schedule(t);for(const t of this.#h)Mt(t,x),this.schedule(t)}const t=this.#s;this.#s=[],this.apply();var e=Kt=[],n=[],r=Qt=[];for(const r of t)try{this.#y(r,e,n)}catch(t){throw ue(r),t}if(Yt=null,r.length>0){var a=ne.ensure();for(const t of r)a.schedule(t)}if(Kt=null,Qt=null,this.#g()){this.#w(n),this.#w(e);for(const[t,e]of this.#f)se(t,e);return void(r.length>0&&Yt.#m())}const o=this.#_();if(o)o.#k(this);else{this.#d.clear(),this.#h.clear();for(const t of this.#r)t(this);this.#r.clear(),Bt=this,oe(n),oe(e),Bt=null,this.#c?.resolve();var i=Yt;if(this.linked&&0===this.#i&&this.#b(),this.#s.length>0){null===i&&(i=this,this.#x());const t=i;t.#s.push(...this.#s.filter(e=>!t.#s.includes(e)))}null!==i&&i.#m()}}#y(t,e,n){t.f^=_;for(var r=t.first;null!==r;){var a=r.f,o=!!(96&a);if(!(o&&0!==(a&_)||0!==(a&$)||this.#f.has(r))&&null!==r.fn){o?r.f^=_:4&a?e.push(r):tn(r)&&(0!==(a&m)&&this.#h.add(r),on(r));var i=r.first;if(null!==i){r=i;continue}}for(;null!==r;){var l=r.next;if(null!==l){r=l;break}r=r.parent}}}#_(){for(var t=this.#e;null!==t;){if(!t.is_fork)for(const[e,[,n]]of this.current)if(t.current.has(e)&&!n)return t;t=t.#e}return null}#k(t){for(const[e,n]of t.current)!this.previous.has(e)&&t.previous.has(e)&&this.previous.set(e,t.previous.get(e)),this.current.set(e,n);for(const[e,n]of t.async_deriveds){const t=this.async_deriveds.get(e);t&&n.promise.then(t.resolve)}const e=t=>{var n=t.reactions;if(null!==n)for(const t of n){var r=t.f;if(2&r)e(t);else{var a=t;4194320&r&&!this.async_deriveds.has(a)&&(this.#h.delete(a),Mt(a,k),this.schedule(a))}}};for(const t of this.current.keys())e(t);this.oncommit(()=>t.discard()),t.#b(),Yt=this,this.#m()}#w(t){for(var e=0;e!this.current.has(t));if(0===r.length)t&&s.discard();else if(e.length>0){if(t)for(const t of this.#p)s.unskip_effect(t,t=>{4194320&t.f?s.schedule(t):s.#w([t])});s.activate();var a=new Set,o=new Map;for(var i of e)ie(i,r,a,o);o=new Map;var l=[...s.current.keys()].filter(t=>!this.current.has(t)||this.current.get(t)[0]!==t.v);if(l.length>0)for(const t of this.#u)155648&t.f||!le(t,l,o)||(4194320&t.f?(Mt(t,k),s.schedule(t)):s.#d.add(t));if(s.#s.length>0){for(var c of(s.apply(),s.#s))s.#y(c,[],[]);s.#s=[]}s.deactivate()}}}}increment(t,e){if(this.#i+=1,t){let t=this.#l.get(e)??0;this.#l.set(e,t+1)}}decrement(t,e){if(this.#i-=1,t){let t=this.#l.get(e)??0;1===t?this.#l.delete(e):this.#l.set(e,t-1)}this.#v||(this.#v=!0,nt(()=>{this.#v=!1,this.linked&&this.flush()}))}transfer_effects(t,e){for(const e of t)this.#d.add(e);for(const t of e)this.#h.add(t);t.clear(),e.clear()}oncommit(t){this.#r.add(t)}ondiscard(t){this.#a.add(t)}on_fork_commit(t){this.#o.add(t)}run_fork_commit_callbacks(){for(const t of this.#o)t(this);this.#o.clear()}settled(){return(this.#c??=v()).promise}static ensure(){if(null===Yt){const t=Yt=new ne;t.#x(),Xt||Wt||nt(()=>{t.#t||t.flush()})}return Yt}apply(){Jt=null}schedule(t){if(Zt=t,t.b?.is_pending&&16777228&t.f&&0===(t.f&C))t.b.defer_effect(t);else{for(var e=t;null!==e.parent;){var n=(e=e.parent).f;if(!(null===Kt||e!==Fe||null!==Ve&&2&Ve.f))return;if(96&n){if(0===(n&_))return;e.f^=_}}this.#s.push(e)}}#x(){null===Gt?Ht=Gt=this:(Gt.#n=this,this.#e=Gt),Gt=this}#b(){var t=this.#e,e=this.#n;null===t?Ht=e:t.#n=e,null===e?Gt=t:e.#e=t,this.linked=!1}}function re(t){var e=Wt;Wt=!0;try{for(;;){if(rt(),null===Yt)return;Yt.flush()}}finally{Wt=e}}let ae=null;function oe(t){var e=t.length;if(0!==e){for(var n=0;n0)){xe.clear();for(const t of ae){if(24576&t.f)continue;const e=[t];let n=t.parent;for(;null!==n;)ae.has(n)&&(ae.delete(n),e.push(n)),n=n.parent;for(let t=e.length-1;t>=0;t--){const n=e[t];24576&n.f||on(n)}}ae.clear()}}ae=null}}function ie(t,e,n,r){if(!n.has(t)&&(n.add(t),null!==t.reactions))for(const a of t.reactions){const t=a.f;2&t?ie(a,e,n,r):4194320&t&&0===(t&k)&&le(a,e,r)&&(Mt(a,k),ce(a))}}function le(t,e,n){const r=n.get(t);if(void 0!==r)return r;if(null!==t.deps)for(const r of t.deps){if(a.call(e,r))return!0;if(2&r.f&&le(r,e,n))return n.set(r,!0),!0}return n.set(t,!1),!1}function ce(t){Yt.schedule(t)}function se(t,e){if(0===(t.f&b)||0===(t.f&_)){0!==(t.f&k)?e.d.push(t):0!==(t.f&x)&&e.m.push(t),Mt(t,_);for(var n=t.first;null!==n;)se(n,e),n=n.next}}function ue(t){Mt(t,_);for(var e=t.first;null!==e;)ue(e),e=e.next}class de{parent;is_pending=!1;transform_error;#E;#C=it?ot:null;#S;#I;#O;#T=null;#A=null;#R=null;#P=null;#M=0;#L=0;#z=!1;#d=new Set;#h=new Set;#N=null;#D=function(t){let e,n=0,r=Ee(0);return()=>{pn()&&(cn(r),yn(()=>(0===n&&(e=dn(()=>t(()=>Te(r)))),n+=1,()=>{nt(()=>{n-=1,0===n&&(e?.(),e=void 0,Te(r))})})))}}(()=>(this.#N=Ee(this.#M),()=>{this.#N=null}));constructor(t,e,n,r){this.#E=t,this.#S=e,this.#I=t=>{var e=Fe;e.b=this,e.f|=128,n(t)},this.parent=Fe.b,this.transform_error=r??this.parent?.transform_error??(t=>t),this.#O=_n(()=>{if(it){const t=this.#C;st();const e="[!"===t.data;if(t.data.startsWith("[?")){const e=JSON.parse(t.data.slice(2));this.#V(e)}else e?this.#j():this.#U()}else this.#F()},589824),it&&(this.#E=ot)}#U(){try{this.#T=xn(()=>this.#I(this.#E))}catch(t){this.error(t)}}#V(t){const e=this.#S.failed;e&&(this.#R=xn(()=>{e(this.#E,()=>t,()=>()=>{})}))}#j(){const t=this.#S.pending;t&&(this.is_pending=!0,this.#A=xn(()=>t(this.#E)),nt(()=>{var t=this.#P=document.createDocumentFragment(),e=xt();t.append(e),this.#T=this.#q(()=>xn(()=>this.#I(e))),0===this.#L&&(this.#E.before(t),this.#P=null,On(this.#A,()=>{this.#A=null}),this.#H(Yt))}))}#F(){try{if(this.is_pending=this.has_pending_snippet(),this.#L=0,this.#M=0,this.#T=xn(()=>{this.#I(this.#E)}),this.#L>0){var t=this.#P=document.createDocumentFragment();Pn(this.#T,t);const e=this.#S.pending;this.#A=xn(()=>e(this.#E))}else this.#H(Yt)}catch(t){this.error(t)}}#H(t){this.is_pending=!1,t.transfer_effects(this.#d,this.#h)}defer_effect(t){Nt(t,this.#d,this.#h)}is_rendered(){return!this.is_pending&&(!this.parent||this.parent.is_rendered())}has_pending_snippet(){return!!this.#S.pending}#q(t){var e=Fe,n=Ve,r=W;qe(this.#O),Ue(this.#O),X(this.#O.ctx);try{return ne.ensure(),t()}catch(t){return At(t),null}finally{qe(e),Ue(n),X(r)}}#G(t,e){this.has_pending_snippet()?(this.#L+=t,0===this.#L&&(this.#H(e),this.#A&&On(this.#A,()=>{this.#A=null}),this.#P&&(this.#E.before(this.#P),this.#P=null))):this.parent&&this.parent.#G(t,e)}update_pending_count(t,e){this.#G(t,e),this.#M+=t,this.#N&&!this.#z&&(this.#z=!0,nt(()=>{this.#z=!1,this.#N&&Oe(this.#N,this.#M)}))}get_effect_pending(){return this.#D(),cn(this.#N)}error(t){if(!this.#S.onerror&&!this.#S.failed)throw t;Yt?.is_fork?(this.#T&&Yt.skip_effect(this.#T),this.#A&&Yt.skip_effect(this.#A),this.#R&&Yt.skip_effect(this.#R),Yt.on_fork_commit(()=>{this.#Y(t)})):this.#Y(t)}#Y(t){this.#T&&(Cn(this.#T),this.#T=null),this.#A&&(Cn(this.#A),this.#A=null),this.#R&&(Cn(this.#R),this.#R=null),it&&(ct(this.#C),dt(),ct(ht()));var e=this.#S.onerror;let n=this.#S.failed;var r=!1,a=!1;const o=()=>{r?console.warn("https://svelte.dev/e/svelte_boundary_reset_noop"):(r=!0,a&&function(){throw new Error("https://svelte.dev/e/svelte_boundary_reset_onerror")}(),null!==this.#R&&On(this.#R,()=>{this.#R=null}),this.#q(()=>{this.#F()}))},i=t=>{try{a=!0,e?.(t,o),a=!1}catch(t){Rt(t,this.#O&&this.#O.parent)}n&&(this.#R=this.#q(()=>{try{return xn(()=>{var e=Fe;e.b=this,e.f|=128,n(this.#E,()=>t,()=>o)})}catch(t){return Rt(t,this.#O.parent),null}}))};nt(()=>{var e;try{e=this.transform_error(t)}catch(t){return void Rt(t,this.#O&&this.#O.parent)}null!==e&&"object"==typeof e&&"function"==typeof e.then?e.then(i,t=>Rt(t,this.#O&&this.#O.parent)):i(e)})}}function he(t,e,n,r){const a=ve;var o=t.filter(t=>!t.settled);if(0!==n.length||0!==o.length){var i,l,c,s,u=Fe,d=(i=Fe,l=Ve,c=W,s=Yt,function(t=!0){qe(i),Ue(l),X(c),t&&0===(i.f&E)&&(s?.activate(),s?.apply())}),h=1===o.length?o[0].promise:o.length>1?Promise.all(o.map(t=>t.promise)):null,f=pe();0!==n.length?h?h.then(()=>{d(),v(),fe()}):v():h.then(()=>p(e.map(a))).finally(f)}else r(e.map(a));function p(t){if(0===(u.f&E)){d();try{r(t)}catch(t){Rt(t,u)}fe()}}function v(){Promise.all(n.map(t=>me(t))).then(t=>p([...e.map(a),...t])).catch(t=>Rt(t,u)).finally(f)}}function fe(t=!0){qe(null),Ue(null),X(null),t&&Yt?.deactivate()}function pe(){var t=Fe,e=t.b,n=Yt,r=e.is_rendered();return e.update_pending_count(1,n),n.increment(r,t),()=>{e.update_pending_count(-1,n),n.decrement(r,t)}}function ve(t){null!==Fe&&(Fe.f|=T);return{ctx:W,deps:null,effects:null,equals:H,f:2050,fn:t,reactions:null,rv:0,v:J,wv:0,parent:Fe,ac:null}}const ge=Symbol("obsolete");function me(t,e,n){let r=Fe;null===r&&function(){throw new Error("https://svelte.dev/e/async_derived_orphan")}();var a=void 0,o=Ee(J),i=!Ve,l=new Set;return function(t){fn(4718592,t)}(()=>{var e=Fe,n=v();a=n.promise;try{Promise.resolve(t()).then(n.resolve,t=>{t!==F&&n.reject(t)}).finally(fe)}catch(t){n.reject(t),fe()}var c=Yt;if(i){if(0!==(e.f&C))var s=pe();if(r.b.is_rendered())c.async_deriveds.get(e)?.reject(ge);else for(const t of l.values())t.reject(ge);l.add(n),c.async_deriveds.set(e,n)}const u=(t,e=void 0)=>{s?.(),l.delete(n),e!==ge&&(c.activate(),e?(o.f|=P,Oe(o,e)):(0!==(o.f&P)&&(o.f^=P),Oe(o,t)),c.deactivate())};n.promise.then(u,t=>u(null,t||"unknown"))}),vn(()=>{for(const t of l)t.reject(ge)}),new Promise(t=>{!function e(n){function r(){n===a?t(o):e(a)}n.then(r,r)}(a)})}function be(t){const e=ve(t);return Ge(e),e}function ye(t){var e,n=Fe,r=t.parent;if(!Ne&&null!==r&&t.v!==J&&24576&r.f)return console.warn("https://svelte.dev/e/derived_inert"),t.v;qe(r);try{t.f&=-65537,function(t){var e=t.effects;if(null!==e){t.effects=null;for(var n=0;n0&&!$e&&function(){$e=!1;for(const t of ke){let e;0!==(t.f&_)&&Mt(t,x);try{e=tn(t)}catch{e=!0}e&&on(t)}ke.clear()}()}return e}function Te(t){Ie(t,t.v+1)}function Ae(t,e,n){var r=t.reactions;if(null!==r)for(var a=r.length,o=0;o{document.activeElement===e&&t.focus()})}}let Pe=!1;function Me(){Pe||(Pe=!0,document.addEventListener("reset",t=>{Promise.resolve().then(()=>{if(!t.defaultPrevented)for(const e of t.target.elements)e[U]?.()})},{capture:!0}))}function Le(t){var e=Ve,n=Fe;Ue(null),qe(null);try{return t()}finally{Ue(e),qe(n)}}let ze=!1,Ne=!1;function De(t){Ne=t}let Ve=null,je=!1;function Ue(t){Ve=t}let Fe=null;function qe(t){Fe=t}let He=null;function Ge(t){null!==Ve&&(null===He?He=[t]:He.push(t))}let Ye=null,Be=0,Je=null;let Ze=1,We=0,Xe=We;function Ke(t){Xe=t}function Qe(){return++Ze}function tn(t){var e=t.f;if(0!==(e&k))return!0;if(2&e&&(t.f&=-65537),0!==(e&x)){for(var n=t.deps,r=n.length,a=0;at.wv)return!0}0!==(e&w)&&null===Jt&&Mt(t,_)}return!1}function en(t,e,n=!0){var r=t.reactions;if(null!==r&&(null===He||!a.call(He,t)))for(var o=0;o{t.ac.abort(F)}),t.ac=null);try{t.f|=R;var u=(0,t.fn)();t.f|=C;var d=t.deps,h=Yt?.is_fork;if(null!==Ye){var f;if(h||an(t,Be),null!==d&&Be>0)for(d.length=Be+Ye.length,f=0;f{fn(8,()=>t(...e.map(cn)))})}function _n(t,e=0){return fn(m|e,t)}function kn(t,e=0){return fn(g|e,t)}function xn(t){return fn(524320,t)}function $n(t){var e=t.teardown;if(null!==e){const t=Ne,n=Ve;De(!0),Ue(null);try{e.call(null)}finally{De(t),Ue(n)}}}function En(t,e=!1){var n=t.first;for(t.first=t.last=null;null!==n;){const t=n.ac;null!==t&&Le(()=>{t.abort(F)});var r=n.next;0!==(n.f&y)?n.parent=null:Cn(n,e),n=r}}function Cn(t,e=!0){var n=!1;(e||262144&t.f)&&null!==t.nodes&&null!==t.nodes.end&&(Sn(t.nodes.start,t.nodes.end),n=!0),Mt(t,S),En(t,e&&!n),an(t,0);var r=t.nodes&&t.nodes.t;if(null!==r)for(const t of r)t.stop();$n(t),t.f^=S,t.f|=E;var a=t.parent;null!==a&&null!==a.first&&In(t),t.next=t.prev=t.teardown=t.ctx=t.deps=t.fn=t.nodes=t.ac=t.b=null}function Sn(t,e){for(;null!==t;){var n=t===e?null:Et(t);t.remove(),t=n}}function In(t){var e=t.parent,n=t.prev,r=t.next;null!==n&&(n.next=r),null!==r&&(r.prev=n),null!==e&&(e.first===t&&(e.first=r),e.last===t&&(e.last=n))}function On(t,e,n=!0){var r=[];Tn(t,r,!0);var a=()=>{n&&Cn(t),e&&e()},o=r.length;if(o>0){var i=()=>--o||a();for(var l of r)l.out(i)}else a()}function Tn(t,e,n){if(0===(t.f&$)){t.f^=$;var r=t.nodes&&t.nodes.t;if(null!==r)for(const t of r)(t.is_global||n)&&e.push(t);for(var a=t.first;null!==a;){var o=a.next;if(0===(a.f&y))Tn(a,e,!!(0!==(a.f&I)||0!==(a.f&b)&&0!==(t.f&m))&&n);a=o}}}function An(t){Rn(t,!0)}function Rn(t,e){if(0!==(t.f&$)){t.f^=$,0===(t.f&_)&&(Mt(t,k),ne.ensure().schedule(t));for(var n=t.first;null!==n;){var r=n.next;Rn(n,!!(0!==(n.f&I)||0!==(n.f&b))&&e),n=r}var a=t.nodes&&t.nodes.t;if(null!==a)for(const t of a)(t.is_global||e)&&t.in()}}function Pn(t,e){if(t.nodes)for(var n=t.nodes.start,r=t.nodes.end;null!==n;){var a=n===r?null:Et(n);e.append(n),n=a}}function Mn(t){const e={get:t=>Ut(e.store)[t],set:(t,n)=>{"string"==typeof t?Object.assign(Ut(e.store),{[t]:n}):Object.assign(Ut(e.store),t),e.store.set(Ut(e.store))},store:jt(t)};return e}globalThis.$altcha=globalThis.$altcha||{algorithms:new Map,defaults:Mn({}),i18n:Mn({}),instances:new Set,plugins:new Set};globalThis.$altcha.i18n.set("en",{ariaLinkLabel:"Altcha (official website)",cancel:"Cancel",enterCode:"Enter code",enterCodeAria:"Enter code you hear. Press Space to play audio.",enterCodeFromImage:"To proceed, please enter the code from the image below.",error:"Verification failed. Try again later.",expired:"Verification expired. Try again.",footer:'Protected by ALTCHA',getAudioChallenge:"Get an audio challenge",label:"I'm not a robot",loading:"Loading...",reload:"Reload",verify:"Verify",verificationRequired:"Verification required!",verified:"Verified",verifying:"Verifying...",waitAlert:"Verifying... please wait."});"undefined"!=typeof window&&((window.__svelte??={}).v??=new Set).add("5");const Ln=Symbol("events"),zn=new Set,Nn=new Set;function Dn(t,e,n,r={}){function a(t){if(r.capture||qn.call(e,t),!t.cancelBubble)return Le(()=>n?.call(this,t))}return t.startsWith("pointer")||t.startsWith("touch")||"wheel"===t?nt(()=>{e.addEventListener(t,a,r)}):e.addEventListener(t,a,r),a}function Vn(t,e,n,r,a){var o={capture:r,passive:a},i=Dn(t,e,n,o);(e===document.body||e===window||e===document||e instanceof HTMLMediaElement)&&vn(()=>{e.removeEventListener(t,i,o)})}function jn(t,e,n){(e[Ln]??={})[t]=n}function Un(t){for(var e=0;eo||n});var d=Ve,h=Fe;Ue(null),qe(null);try{for(var f,p=[];null!==o;){var v=o.assignedSlot||o.parentNode||o.host||null;try{var g=o[Ln]?.[r];null==g||o.disabled&&t.target!==o||g.call(o,t)}catch(t){f?p.push(t):f=t}if(t.cancelBubble||v===e||null===v)break;o=v}if(f){for(let t of p)queueMicrotask(()=>{throw t});throw f}}finally{t[Ln]=e,delete t.currentTarget,Ue(d),qe(h)}}}const Hn=globalThis?.window?.trustedTypes&&globalThis.window.trustedTypes.createPolicy("svelte-trusted-html",{createHTML:t=>t});function Gn(t){var e=Ot("template");return e.innerHTML=function(t){return Hn?.createHTML(t)??t}(t.replaceAll("","\x3c!----\x3e")),e.content}function Yn(t,e){var n=Fe;null===n.nodes&&(n.nodes={start:t,end:e,a:null,t:null})}function Bn(t,e){var n,r=!!(1&e),a=!!(2&e),o=!t.startsWith("");return()=>{if(it)return Yn(ot,null),ot;void 0===n&&(n=Gn(o?t:""+t),r||(n=$t(n)));var e=a||yt?document.importNode(n,!0):n.cloneNode(!0);r?Yn($t(e),e.lastChild):Yn(e,e);return e}}function Jn(t,e,n="svg"){var r,a=`<${n}>${!t.startsWith("")?t:""+t}`;return()=>{if(it)return Yn(ot,null),ot;if(!r){var t=Gn(a);r=$t($t(t))}var e=r.cloneNode(!0);return Yn(e,e),e}}function Zn(t,e){return Jn(t,0,"svg")}function Wn(t=""){if(!it){var e=xt(t+"");return Yn(e,e),e}var n=ot;return 3!==n.nodeType?(n.before(n=xt()),ct(n)):Tt(n),Yn(n,n),n}function Xn(){if(it)return Yn(ot,null),ot;var t=document.createDocumentFragment(),e=document.createComment(""),n=xt();return t.append(e,n),Yn(e,n),t}function Kn(t,e){if(it){var n=Fe;return 0!==(n.f&C)&&null!==n.nodes.end||(n.nodes.end=ot),void st()}null!==t&&t.before(e)}function Qn(t){return t.endsWith("capture")&&"gotpointercapture"!==t&&"lostpointercapture"!==t}const tr=["beforeinput","click","change","dblclick","contextmenu","focusin","focusout","input","keydown","keyup","mousedown","mousemove","mouseout","mouseover","mouseup","pointerdown","pointermove","pointerout","pointerover","pointerup","touchend","touchmove","touchstart"];function er(t){return tr.includes(t)}const nr={formnovalidate:"formNoValidate",ismap:"isMap",nomodule:"noModule",playsinline:"playsInline",readonly:"readOnly",defaultvalue:"defaultValue",defaultchecked:"defaultChecked",srcobject:"srcObject",novalidate:"noValidate",allowfullscreen:"allowFullscreen",disablepictureinpicture:"disablePictureInPicture",disableremoteplayback:"disableRemotePlayback"};function rr(t){return t=t.toLowerCase(),nr[t]??t}const ar=["touchstart","touchmove"];function or(t){return ar.includes(t)}function ir(t,e){var n=null==e?"":"object"==typeof e?`${e}`:e;n!==(t[j]??=t.nodeValue)&&(t[j]=n,t.nodeValue=`${n}`)}function lr(t,e){return ur(t,e)}function cr(t,e){kt(),e.intro=e.intro??!1;const n=e.target,r=it,a=ot;try{for(var o=$t(n);o&&(8!==o.nodeType||"["!==o.data);)o=Et(o);if(!o)throw B;lt(!0),ct(o);const r=ur(t,{...e,anchor:o});return lt(!1),r}catch(r){if(r instanceof Error&&r.message.split("\n").some(t=>t.startsWith("https://svelte.dev/e/")))throw r;return r!==B&&console.warn("Failed to hydrate: ",r),!1===e.recover&&function(){throw new Error("https://svelte.dev/e/hydration_failed")}(),kt(),n.textContent="",lt(!1),lr(t,e)}finally{lt(r),ct(a)}}const sr=new Map;function ur(t,{target:e,anchor:n,props:r={},events:a,context:i,intro:l=!0,transformError:c}){kt();var s=void 0,u=function(t){ne.ensure();const e=fn(524352,t);return(t={})=>new Promise(n=>{t.outro?On(e,()=>{Cn(e),n(void 0)}):(Cn(e),n(void 0))})}(()=>{var l=n??e.appendChild(xt());!function(t,e,n,r){new de(t,e,n,r)}(l,{pending:()=>{}},e=>{if(K({}),i&&(W.c=i),a&&(r.$$events=a),it&&Yn(e,null),s=t(e,r)||{},it&&(Fe.nodes.end=ot,null===ot||8!==ot.nodeType||"]"!==ot.data))throw at(),B;Q()},c);var u=new Set,d=t=>{for(var n=0;n{for(var t of u)for(const n of[e,document]){var r=sr.get(n),a=r.get(t);0==--a?(n.removeEventListener(t,qn),r.delete(t),0===r.size&&sr.delete(n)):r.set(t,a)}Nn.delete(d),l!==n&&l.parentNode?.removeChild(l)}});return dr.set(s,u),s}let dr=new WeakMap;class hr{anchor;#B=new Map;#J=new Map;#Z=new Map;#W=new Set;#X=!0;constructor(t,e=!0){this.anchor=t,this.#X=e}#$=t=>{if(this.#B.has(t)){var e=this.#B.get(t),n=this.#J.get(e);if(n)An(n),this.#W.delete(e);else{var r=this.#Z.get(e);r&&(this.#J.set(e,r.effect),this.#Z.delete(e),r.fragment.lastChild.remove(),this.anchor.before(r.fragment),n=r.effect)}for(const[e,n]of this.#B){if(this.#B.delete(e),e===t)break;const r=this.#Z.get(n);r&&(Cn(r.effect),this.#Z.delete(n))}for(const[t,r]of this.#J){if(t===e||this.#W.has(t))continue;const a=()=>{if(Array.from(this.#B.values()).includes(t)){var e=document.createDocumentFragment();Pn(r,e),e.append(xt()),this.#Z.set(t,{effect:r,fragment:e})}else Cn(r);this.#W.delete(t),this.#J.delete(t)};this.#X||!n?(this.#W.add(t),On(r,a,!1)):a()}}};#K=t=>{this.#B.delete(t);const e=Array.from(this.#B.values());for(const[t,n]of this.#Z)e.includes(t)||(Cn(n.effect),this.#Z.delete(t))};ensure(t,e){var n=Yt;!e||this.#J.has(t)||this.#Z.has(t)||this.#J.set(t,xn(()=>e(this.anchor)));this.#B.set(n,t),it&&(this.anchor=ot),this.#$(n)}}function fr(t){null===W&&function(){throw new Error("https://svelte.dev/e/lifecycle_outside_component")}(),gn(()=>{const e=dn(t);if("function"==typeof e)return e})}function pr(t,e,n=!1){var r;it&&(r=ot,st());var a=new hr(t);function o(t,e){if(it){var n=ft(r);if(t!==parseInt(n.substring(1))){var o=ht();return ct(o),a.anchor=o,lt(!1),a.ensure(t,e),void lt(!0)}}a.ensure(t,e)}_n(()=>{var t=!1;e((e,n=0)=>{t=!0,o(n,e)}),t||o(-1,null)},n?I:0)}const vr=Symbol("NaN");function gr(t,e,n=!1,r=!1,a=!1,o=!1){var i=t,l="";if(n){var c=t;it&&(i=ct($t(c)))}wn(()=>{var t=Fe;if(l!==(l=e()??"")){if(n&&!it)return t.nodes=null,c.innerHTML=l,void(""!==l&&Yn($t(c),c.lastChild));if(null!==t.nodes&&(Sn(t.nodes.start,t.nodes.end),t.nodes=null),""!==l){if(it){ot.data;for(var o=st(),s=o;null!==o&&(8!==o.nodeType||""!==o.data);)s=o,o=Et(o);if(null===o)throw at(),B;return Yn(ot,s),void(i=ct(o))}var u=Ot(r?"svg":a?"math":"template",r?"http://www.w3.org/2000/svg":a?"http://www.w3.org/1998/Math/MathML":void 0);u.innerHTML=l;var d=r||a?u:u.content;if(Yn($t(d),d.lastChild),r||a)for(;$t(d);)i.before($t(d));else i.before(d)}}else it&&st()})}function mr(t,e){var n,r=void 0;kn(()=>{r!==(r=e())&&(n&&(Cn(n),n=null),r&&(n=xn(()=>{bn(()=>r(t))})))})}function br(t){var e,n,r="";if("string"==typeof t||"number"==typeof t)r+=t;else if("object"==typeof t)if(Array.isArray(t)){var a=t.length;for(e=0;e=0;){var l=i+o;0!==i&&!wr.includes(r[i-1])||l!==r.length&&!wr.includes(r[l])?i=l:r=(0===i?"":r.substring(0,i))+r.substring(l+1)}return""===r?null:r}(n,0,o);it&&l===t.getAttribute("class")||(null==l?t.removeAttribute("class"):e?t.className=l:t.setAttribute("class",l)),t[D]=n}else if(o&&a!==o)for(var c in o){var s=!!o[c];null!=a&&s===!!a[c]||t.classList.toggle(c,s)}return o}function $r(t,e={},n,r){for(var a in n){var o=n[a];e[a]!==o&&(null==n[a]?t.style.removeProperty(a):t.style.setProperty(a,o,r))}}function Er(t,e,n,r){var a=t[V];if(it||a!==e){var o=function(t,e){if(e){var n,r,a="";if(Array.isArray(e)?(n=e[0],r=e[1]):n=e,t){t=String(t).replaceAll(/\s*\/\*.*?\*\/\s*/g,"").trim();var o=!1,i=0,l=!1,c=[];n&&c.push(...Object.keys(n).map(kr)),r&&c.push(...Object.keys(r).map(kr));var s=0,u=-1;const e=t.length;for(var d=0;d{if(!e){if(e=!0,t.hasAttribute("value")){var n=t.value;Vr(t,"value",null),t.value=n}if(t.hasAttribute("checked")){var r=t.checked;Vr(t,"checked",null),t.checked=r}}};t[U]=n,nt(n),Me()}}function Dr(t,e){e?t.hasAttribute("selected")||t.setAttribute("selected",""):t.removeAttribute("selected")}function Vr(t,e,n,r){var a=Ur(t);it&&(a[e]=t.getAttribute(e),"src"===e||"srcset"===e||"href"===e&&t.nodeName===Rr)||a[e]!==(a[e]=n)&&("loading"===e&&(t[z]=n),null==n?t.removeAttribute(e):"string"!=typeof n&&qr(t).includes(e)?t[e]=n:t.setAttribute(e,n))}function jr(t,e,n=[],r=[],a=[],o,i=!1,l=!1){he(a,n,r,n=>{var r=void 0,a={},o=t.nodeName===Lr,c=!1;if(kn(()=>{var s=e(...n.map(cn)),u=function(t,e,n,r,a=!1){if(it&&a&&t.nodeName===Pr){var o=t;("checkbox"===o.type?"defaultChecked":"defaultValue")in n||Nr(o)}var i=Ur(t),l=i[Tr],c=!i[Ar];let s=it&&l;s&<(!1);var u=e||{},d=t.nodeName===Mr;for(var h in e)h in n||(n[h]=null);n.class?n.class=yr(n.class):n[Ir]&&(n.class=null),n[Or]&&(n.style??=null);var f=qr(t);for(const r in n){let a=n[r];if(d&&"value"===r&&null==a)t.value=t.__value="",u[r]=a;else if("class"!==r)if("style"!==r){var p=u[r];if(a!==p||void 0===a&&t.hasAttribute(r)){u[r]=a;var v=r[0]+r[1];if("$$"!==v)if("on"===v){const e={},n="$$"+r;let o=r.slice(2);var g=er(o);if(Qn(o)&&(o=o.slice(0,-7),e.capture=!0),!g&&p){if(null!=a)continue;t.removeEventListener(o,u[n],e),u[n]=null}if(g)jn(o,t,a),Un([o]);else if(null!=a){let a=function(t){u[r].call(this,t)};u[n]=Dn(o,t,a,e)}}else if("style"===r)Vr(t,r,a);else if("autofocus"===r)Re(t,Boolean(a));else if(l||"__value"!==r&&("value"!==r||null==a))if("selected"===r&&d)Dr(t,a);else{var m=r;c||(m=rr(m));var b="defaultValue"===m||"defaultChecked"===m;if(null!=a||l||b)b||f.includes(m)&&(l||"string"!=typeof a)?(t[m]=a,m in i&&(i[m]=J)):"function"!=typeof a&&Vr(t,m,a);else if(i[r]=null,"value"===m||"checked"===m){let n=t;const r=void 0===e;if("value"===m){let t=n.defaultValue;n.removeAttribute(m),n.defaultValue=t,n.value=n.__value=r?t:null}else{let t=n.defaultChecked;n.removeAttribute(m),n.defaultChecked=t,n.checked=!!r&&t}}else t.removeAttribute(r)}else t.value=t.__value=a}}else Er(t,a,e?.[Or],n[Or]),u[r]=a,u[Or]=n[Or];else xr(t,"http://www.w3.org/1999/xhtml"===t.namespaceURI,a,0,e?.[Ir],n[Ir]),u[r]=a,u[Ir]=n[Ir]}return s&<(!0),u}(t,r,s,0,i,l);c&&o&&"value"in s&&Cr(t,s.value);for(let t of Object.getOwnPropertySymbols(a))s[t]||Cn(a[t]);for(let e of Object.getOwnPropertySymbols(s)){var d=s[e];"@attach"!==e.description||r&&d===r[e]||(a[e]&&Cn(a[e]),a[e]=xn(()=>mr(t,()=>d))),u[e]=d}r=u}),o){var s=t;bn(()=>{Cr(s,r.value,!0),function(t){var e=new MutationObserver(()=>{Cr(t,t.__value)});e.observe(t,{childList:!0,subtree:!0,attributes:!0,attributeFilter:["value"]}),vn(()=>{e.disconnect()})}(s)})}c=!0})}function Ur(t){return t[N]??={[Tr]:t.nodeName.includes("-"),[Ar]:t.namespaceURI===Z}}var Fr=new Map;function qr(t){var e,n=t.getAttribute("is")||t.nodeName,r=Fr.get(n);if(r)return r;Fr.set(n,r=[]);for(var a=t,o=Element.prototype;o!==a;){for(var i in e=s(a))e[i].set&&"innerHTML"!==i&&"textContent"!==i&&"innerText"!==i&&r.push(i);a=h(a)}return r}function Hr(t,e,n=e){var r=new WeakSet;!function(t,e,n,r=n){t.addEventListener(e,()=>Le(n));const a=t[U];t[U]=a?()=>{a(),r(!0)}:()=>r(!0),Me()}(t,"input",async a=>{var o=a?t.defaultValue:t.value;if(o=Gr(t)?Yr(o):o,n(o),null!==Yt&&r.add(Yt),await ln(),o!==(o=e())){var i=t.selectionStart,l=t.selectionEnd,c=t.value.length;if(t.value=o??"",null!==l){var s=t.value.length;i===l&&l===c&&s>c?(t.selectionStart=s,t.selectionEnd=s):(t.selectionStart=i,t.selectionEnd=Math.min(l,s))}}}),(it&&t.defaultValue!==t.value||null==dn(e)&&t.value)&&(n(Gr(t)?Yr(t.value):t.value),null!==Yt&&r.add(Yt)),yn(()=>{var n=e();if(t===document.activeElement){var a=Yt;if(r.has(a))return}Gr(t)&&n===Yr(t.value)||("date"!==t.type||n||t.value)&&n!==t.value&&(t.value=n??"")})}function Gr(t){var e=t.type;return"number"===e||"range"===e}function Yr(t){return""===t?null:+t}function Br(t,e){return t===e||t?.[M]===e}function Jr(t={},e,n,r){var a=W.r,o=Fe;return bn(()=>{var r,i;return yn(()=>{r=i,i=[],dn(()=>{Br(n(...i),t)||(e(t,...i),r&&Br(n(...r),t)&&e(null,...r))})}),()=>{let r=o;for(;r!==a&&null!==r.parent&&r.parent.f&S;)r=r.parent;const l=r.teardown;r.teardown=()=>{i&&Br(n(...i),t)&&e(null,...i),l?.()}}}),t}const Zr={get(t,e){if(!t.exclude.includes(e))return t.props[e]},set:(t,e)=>!1,getOwnPropertyDescriptor(t,e){if(!t.exclude.includes(e))return e in t.props?{enumerable:!0,configurable:!0,value:t.props[e]}:void 0},has:(t,e)=>!t.exclude.includes(e)&&e in t.props,ownKeys:t=>Reflect.ownKeys(t.props).filter(e=>!t.exclude.includes(e))};function Wr(t,e,n){return new Proxy({props:t,exclude:e},Zr)}function Xr(t,e,n,r){var a,o=r,i=!0,l=()=>(i&&(i=!1,o=r),o);void 0===t[e]&&void 0!==r&&l(),a=()=>{var n=t[e];return void 0===n?l():(i=!0,n)};var c=!1,s=ve(()=>(c=!1,a())),u=Fe;return function(t,e){if(arguments.length>0){const n=e?cn(s):t;return Ie(s,n),c=!0,void 0!==o&&(o=n),t}return Ne&&c||0!==(u.f&E)?s.v:cn(s)}}class Kr{#Q;#tt;constructor(t){var e=new Map,n=(t,n)=>{var r=Se(n,!1,!1);return e.set(t,r),r};const r=new Proxy({...t.props||{},$$events:{}},{get:(t,r)=>cn(e.get(r)??n(r,Reflect.get(t,r))),has:(t,r)=>r===L||(cn(e.get(r)??n(r,Reflect.get(t,r))),Reflect.has(t,r)),set:(t,r,a)=>(Ie(e.get(r)??n(r,a),a),Reflect.set(t,r,a))});this.#tt=(t.hydrate?cr:lr)(t.component,{target:t.target,anchor:t.anchor,props:r,context:t.context,intro:t.intro??!1,recover:t.recover,transformError:t.transformError}),t?.props?.$$host&&!1!==t.sync||re(),this.#Q=r.$$events;for(const t of Object.keys(this.#tt))"$set"!==t&&"$destroy"!==t&&"$on"!==t&&l(this,t,{get(){return this.#tt[t]},set(e){this.#tt[t]=e},enumerable:!0});this.#tt.$set=t=>{Object.assign(r,t)},this.#tt.$destroy=()=>{!function(t,e){const n=dr.get(t);n?(dr.delete(t),n(e)):Promise.resolve()}(this.#tt)}}$set(t){this.#tt.$set(t)}$on(t,e){this.#Q[t]=this.#Q[t]||[];const n=(...t)=>e.call(this,...t);return this.#Q[t].push(n),()=>{this.#Q[t]=this.#Q[t].filter(t=>t!==n)}}$destroy(){this.#tt.$destroy()}}let Qr=class{};function ta(t,e,n,r){const a=n[t]?.type;if(e="Boolean"===a&&"boolean"!=typeof e?null!=e:e,!r||!n[t])return e;if("toAttribute"===r)switch(a){case"Object":case"Array":return null==e?null:JSON.stringify(e);case"Boolean":return e?"":null;case"Number":return null==e?null:e;default:return e}else switch(a){case"Object":case"Array":return e&&JSON.parse(e);case"Boolean":default:return e;case"Number":return null!=e?+e:e}}function ea(t,e,n,r,a,o){let s=class extends Qr{constructor(){super(t,n,a),this.$$p_d=e}static get observedAttributes(){return i(e).map(t=>(e[t].attribute||t).toLowerCase())}};return i(e).forEach(t=>{l(s.prototype,t,{get(){return this.$$c&&t in this.$$c?this.$$c[t]:this.$$d[t]},set(n){n=ta(t,n,e),this.$$d[t]=n;var r=this.$$c;if(r){var a=c(r,t)?.get;a?r[t]=n:r.$set({[t]:n})}}})}),r.forEach(t=>{l(s.prototype,t,{get(){return this.$$c?.[t]}})}),t.element=s,s}"function"==typeof HTMLElement&&(Qr=class extends HTMLElement{$$ctor;$$s;$$c;$$cn=!1;$$d={};$$r=!1;$$p_d={};$$l={};$$l_u=new Map;$$me;$$shadowRoot=null;constructor(t,e,n){super(),this.$$ctor=t,this.$$s=e,n&&(this.$$shadowRoot=this.attachShadow(n))}addEventListener(t,e,n){if(this.$$l[t]=this.$$l[t]||[],this.$$l[t].push(e),this.$$c){const n=this.$$c.$on(t,e);this.$$l_u.set(e,n)}super.addEventListener(t,e,n)}removeEventListener(t,e,n){if(super.removeEventListener(t,e,n),this.$$c){const t=this.$$l_u.get(e);t&&(t(),this.$$l_u.delete(e))}}async connectedCallback(){if(this.$$cn=!0,!this.$$c){let e=function(t){return e=>{const n=Ot("slot");"default"!==t&&(n.name=t),Kn(e,n)}};if(await Promise.resolve(),!this.$$cn||this.$$c)return;const n={},r=function(t){const e={};return t.childNodes.forEach(t=>{e[t.slot||"default"]=!0}),e}(this);for(const t of this.$$s)t in r&&("default"!==t||this.$$d.children?n[t]=e(t):(this.$$d.children=e(t),n.default=!0));for(const t of this.attributes){const e=this.$$g_p(t.name);e in this.$$d||(this.$$d[e]=ta(e,t.value,this.$$p_d,"toProp"))}for(const t in this.$$p_d)t in this.$$d||void 0===this[t]||(this.$$d[t]=this[t],delete this[t]);this.$$c=(t={component:this.$$ctor,target:this.$$shadowRoot||this,props:{...this.$$d,$$slots:n,$$host:this}},new Kr(t)),this.$$me=function(t){ne.ensure();const e=fn(524352,t);return()=>{Cn(e)}}(()=>{yn(()=>{this.$$r=!0;for(const t of i(this.$$c)){if(!this.$$p_d[t]?.reflect)continue;this.$$d[t]=this.$$c[t];const e=ta(t,this.$$d[t],this.$$p_d,"toAttribute");null==e?this.removeAttribute(this.$$p_d[t].attribute||t):this.setAttribute(this.$$p_d[t].attribute||t,e)}this.$$r=!1})});for(const t in this.$$l)for(const e of this.$$l[t]){const n=this.$$c.$on(t,e);this.$$l_u.set(e,n)}this.$$l={}}var t}attributeChangedCallback(t,e,n){this.$$r||(t=this.$$g_p(t),this.$$d[t]=ta(t,n,this.$$p_d,"toProp"),this.$$c?.$set({[t]:this.$$d[t]}))}disconnectedCallback(){this.$$cn=!1,Promise.resolve().then(()=>{!this.$$cn&&this.$$c&&(this.$$c.$destroy(),this.$$me(),this.$$c=void 0)})}$$g_p(t){return i(this.$$p_d).find(e=>this.$$p_d[e].attribute===t||!this.$$p_d[e].attribute&&e.toLowerCase()===t)||t}});var na=Bn('
');function ra(t,e){K(e,!0);let n,r=Xr(e,"loading"),a=Wr(e,["$$slots","$$events","$$legacy","$$host","loading"]);var o={get loading(){return r()},set loading(t){r(t),re()}},i=na(),l=Ct(i);jr(l,()=>({type:"checkbox",...a}),void 0,void 0,void 0,0,!0),Jr(l,t=>n=t,()=>n);var c=It(l,2);return dt(2),ut(i),wn(()=>Vr(i,"data-loading",r())),jn("click",c,function(){n?.click()}),Kn(t,i),Q(o)}Un(["click"]),ea(ra,{loading:{}},[],[],{mode:"open"});var aa=Bn('
');function oa(t,e){K(e,!0);let n=Xr(e,"loading"),r=Wr(e,["$$slots","$$events","$$legacy","$$host","loading"]);var a={get loading(){return n()},set loading(t){n(t),re()}},o=aa();return jr(Ct(o),()=>({type:"checkbox",...r}),void 0,void 0,void 0,0,!0),dt(2),ut(o),wn(()=>Vr(o,"data-loading",n())),Kn(t,o),Q(a)}ea(oa,{loading:{}},[],[],{mode:"open"});var ia=Bn('
');function la(t,e){K(e,!0);let n=Xr(e,"strings");var r={get strings(){return n()},set strings(t){n(t),re()}},a=ia(),o=Ct(a);return Vr(o,"href","https://altcha.org"),ut(a),wn(()=>Vr(o,"aria-label",n().ariaLinkLabel)),Kn(t,a),Q(r)}ea(la,{strings:{}},[],[],{mode:"open"});var ca=Bn('');function sa(t,e){K(e,!0);let n=Xr(e,"logo"),r=Xr(e,"strings");var a={get logo(){return n()},set logo(t){n(t),re()},get strings(){return r()},set strings(t){r(t),re()}},o=ca(),i=Ct(o);gr(i,()=>r().footer,!0),ut(i);var l=It(i,2),c=t=>{la(t,{get strings(){return r()}})};return pr(l,t=>{n()&&t(c)}),ut(o),Kn(t,o),Q(a)}ea(sa,{logo:{},strings:{}},[],[],{mode:"open"});var ua=Bn('
');function da(t,e){K(e,!0);let n,r=Xr(e,"loading"),a=Wr(e,["$$slots","$$events","$$legacy","$$host","loading"]);var o={get loading(){return r()},set loading(t){r(t),re()}},i=ua(),l=Ct(i);jr(l,()=>({type:"checkbox",...a}),void 0,void 0,void 0,0,!0),Jr(l,t=>n=t,()=>n);var c=It(l,2);return ut(i),wn(()=>Vr(i,"data-loading",r())),jn("click",c,function(){n?.click()}),Kn(t,i),Q(o)}Un(["click"]),ea(da,{loading:{}},[],[],{mode:"open"});var ha=(t=>(t.ERROR="error",t.LOADING="loading",t.PLAYING="playing",t.PAUSED="paused",t.READY="ready",t))(ha||{}),fa=(t=>(t.CODE="code",t.ERROR="error",t.VERIFIED="verified",t.VERIFYING="verifying",t.UNVERIFIED="unverified",t.EXPIRED="expired",t))(fa||{}),pa=Bn('
'),va=Bn('
'),ga=Zn(''),ma=Zn(''),ba=Zn(''),ya=Bn(''),wa=Bn(''),_a=Bn('
');function ka(t,e){K(e,!0);let n=Xr(e,"audioUrl"),r=Xr(e,"codeChallenge"),a=Xr(e,"config"),o=Xr(e,"imageUrl"),i=Xr(e,"onCancel"),l=Xr(e,"onReload"),c=Xr(e,"onSubmit"),s=Xr(e,"strings"),u=Ce(void 0),d=Ce(void 0),h=Ce(void 0),f=Ce(!1),p=Ce(""),v=Ce(!1);function g(){Ie(u,ha.PAUSED,!0)}function m(t){Ie(u,ha.ERROR,!0)}function b(){Ie(u,ha.READY,!0)}function y(){Ie(u,ha.LOADING,!0)}function w(){Ie(u,ha.PLAYING,!0)}function _(){Ie(u,ha.PAUSED,!0)}function k(){cn(d)?cn(u)===ha.LOADING||(cn(d).paused?(n()&&cn(d).src!==n()&&(cn(d).src=n()),cn(d).currentTime=0,cn(d).play()):cn(d).pause()):(Ie(v,!0),requestAnimationFrame(()=>{cn(d)&&n()&&(cn(d).src=n(),cn(d).play())}))}fr(()=>(a().disableAutoFocus||ln().then(()=>{cn(h)?.focus()}),()=>{cn(d)&&(cn(d).pause(),Ie(d,void 0))}));var x={get audioUrl(){return n()},set audioUrl(t){n(t),re()},get codeChallenge(){return r()},set codeChallenge(t){r(t),re()},get config(){return a()},set config(t){a(t),re()},get imageUrl(){return o()},set imageUrl(t){o(t),re()},get onCancel(){return i()},set onCancel(t){i(t),re()},get onReload(){return l()},set onReload(t){l(t),re()},get onSubmit(){return c()},set onSubmit(t){c(t),re()},get strings(){return s()},set strings(t){s(t),re()}},$=_a(),E=Ct($),C=Ct(E),S=t=>{var e=pa(),n=Ct(e,!0);ut(e),wn(()=>ir(n,s().verificationRequired)),Kn(t,e)};pr(C,t=>{"standard"!==a().codeChallengeDisplay&&t(S)});var I=It(C,2),O=Ct(I,!0);ut(I);var T=It(I,2),A=It(T,2),R=Ct(A);Nr(R),R.disabled=cn(f),Jr(R,t=>Ie(h,t),()=>cn(h));var P=It(R,2),M=t=>{var e=ya(),n=Ct(e),r=t=>{Kn(t,va())},a=t=>{Kn(t,ga())},o=t=>{Kn(t,ma())},i=t=>{Kn(t,ba())};pr(n,t=>{cn(u)===ha.LOADING?t(r):cn(u)===ha.ERROR?t(a,1):cn(u)===ha.PLAYING?t(o,2):t(i,-1)}),ut(e),wn(()=>{Vr(e,"title",s().getAudioChallenge),e.disabled=cn(u)===ha.LOADING||cn(u)===ha.ERROR,Vr(e,"aria-label",cn(u)===ha.LOADING?s().loading:s().getAudioChallenge)}),Vn("click",e,()=>k(),!0),Kn(t,e)};pr(P,t=>{r().audio&&t(M)});var L=It(P,2);ut(A);var z=It(A,2),N=Ct(z),D=Ct(N,!0);ut(N);var V=It(N,2),j=Ct(V,!0);ut(V),ut(z),ut(E);var U=It(E,2),F=t=>{var e=wa();Jr(e,t=>Ie(d,t),()=>cn(d)),Vn("error",e,m),Vn("loadstart",e,y),Vn("canplay",e,b),Vn("pause",e,_),Vn("playing",e,w),Vn("ended",e,g),Kn(t,e)};return pr(U,t=>{cn(v)&&t(F)}),ut($),wn(()=>{ir(O,s().enterCodeFromImage),Vr(T,"src",o()),Vr(R,"minlength",r().length||1),Vr(R,"maxlength",r().length),Vr(R,"placeholder",s().enterCode),Vr(R,"aria-label",cn(u)===ha.LOADING?s().loading:cn(u)===ha.PLAYING?"":s().enterCodeAria),Vr(R,"aria-live",cn(u)?"assertive":"polite"),Vr(R,"aria-busy",cn(u)===ha.LOADING),Vr(L,"title",s().reload),Vr(L,"aria-label",s().reload),Vr(N,"aria-label",s().verify),ir(D,s().verify),Vr(V,"aria-label",s().cancel),ir(j,s().cancel)}),Vn("submit",E,function(t){t.preventDefault(),t.stopPropagation(),c()?.(cn(p))},!0),jn("keydown",R,function(t){"Space"===t.code?(t.preventDefault(),t.stopPropagation(),k()):"Escape"===t.code&&(t.preventDefault(),t.stopPropagation(),i()?.())}),Hr(R,()=>cn(p),t=>Ie(p,t)),Vn("click",L,()=>l()?.(),!0),Vn("click",V,()=>i()?.(),!0),Kn(t,$),Q(x)}Un(["keydown"]),ea(ka,{audioUrl:{},codeChallenge:{},config:{},imageUrl:{},onCancel:{},onReload:{},onSubmit:{},strings:{}},[],[],{mode:"open"});var xa=Bn('
'),$a=Bn('
'),Ea=Bn('
×
'),Ca=Bn('
',1);function Sa(t,e){K(e,!0);let n=Xr(e,"anchor"),r=Xr(e,"children"),a=Xr(e,"display",0,"standard"),o=Xr(e,"backdrop",0,!1),i=Xr(e,"onClickOutside"),l=Xr(e,"onClickOutsideDelay",0,600),c=Xr(e,"onClose"),s=Xr(e,"placement",0,"auto"),u=Xr(e,"updateUISignal"),d=Xr(e,"variant",0,"neutral"),h=Wr(e,["$$slots","$$events","$$legacy","$$host","anchor","children","display","backdrop","onClickOutside","onClickOutsideDelay","onClose","placement","updateUISignal","variant"]),f=Ce(void 0),v=Ce(void 0),g=Ce(!1),m=Ce(0);function b(){c()?.()}function y(){if(n()&&"auto"===s()&&cn(f)){const t=n().getBoundingClientRect(),e=document.documentElement.clientHeight-(t.top+t.height){"auto"!==s()&&Ie(g,"top"===s())}),gn(()=>{u()&&y()}),fr(()=>{const t="bottomsheet"===a()||"overlay"===a();return t&&(cn(v)&&document.body.append(cn(v)),cn(f)&&document.body.append(cn(f))),y(),ln().then(()=>{Ie(m,Date.now(),!0)}),()=>{t&&(cn(v)&&document.body.removeChild(cn(v)),cn(f)&&document.body.removeChild(cn(f)))}});var w={get anchor(){return n()},set anchor(t){n(t),re()},get children(){return r()},set children(t){r(t),re()},get display(){return a()},set display(t="standard"){a(t),re()},get backdrop(){return o()},set backdrop(t=!1){o(t),re()},get onClickOutside(){return i()},set onClickOutside(t){i(t),re()},get onClickOutsideDelay(){return l()},set onClickOutsideDelay(t=600){l(t),re()},get onClose(){return c()},set onClose(t){c(t),re()},get placement(){return s()},set placement(t="auto"){s(t),re()},get updateUISignal(){return u()},set updateUISignal(t){u(t),re()},get variant(){return d()},set variant(t="neutral"){d(t),re()}},_=Ca();Vn("click",mt,function(t){const e=t.target;cn(f)?.contains(e)||l()&&!(cn(m)+l(){var e=xa();Jr(e,t=>Ie(v,t),()=>cn(v)),Kn(t,e)};pr(k,t=>{o()&&t(x)});var $=It(k,2);jr($,()=>({...h,class:`altcha-popover ${(e.class||"")??""}`,"data-popover":!0,"data-variant":d(),"data-top":cn(g),"data-display":a()}));var E=Ct($),C=t=>{Kn(t,$a())};pr(E,t=>{"standard"===a()&&t(C)});var S=It(E,2),O=t=>{var e=Ea();Vn("click",e,b,!0),Kn(t,e)};pr(S,t=>{"standard"!==a()&&t(O)});var T=It(S,2);return function(t,e,...n){var r=new hr(t);_n(()=>{const t=e()??null;r.ensure(t,t&&(e=>t(e,...n)))},I)}(Ct(T),()=>r()??p),ut(T),ut($),Jr($,t=>Ie(f,t),()=>cn(f)),Kn(t,_),Q(w)}async function Ia(t){const{challenge:e,concurrency:n=navigator.hardwareConcurrency,controller:r=new AbortController,createWorker:a,onOutOfMemory:o=t=>t>1?Math.floor(t/2):0,counterMode:i,timeout:l=9e4}=t,c=Math.min(16,Math.max(1,n)),s=[],u=()=>{for(const t of s)t.terminate()};for(let t=0;t(r.signal.addEventListener("abort",()=>{t.postMessage({type:"abort"})}),new Promise((r,a)=>{t.addEventListener("error",t=>{a(t)}),t.addEventListener("message",e=>{if(e.data){for(const e of s)e!==t&&e.postMessage({type:"abort"});if(e.data.error)return a(new Error(e.data.error))}r(e.data)}),t.postMessage({challenge:e,counterMode:i,counterStart:n,counterStep:c,timeout:l,type:"work"})}))))}catch(n){if(n instanceof Error&&!!n?.message?.includes("Out of memory")&&o){u();const n=o(c);if(n)return Ia({...t,challenge:e,controller:r,concurrency:n,createWorker:a})}throw n}finally{u()}return r.signal.aborted?null:d||null}ea(Sa,{anchor:{},children:{},display:{},backdrop:{},onClickOutside:{},onClickOutsideDelay:{},onClose:{},placement:{},updateUISignal:{},variant:{}},[],[],{mode:"open"});class Oa{TAG_CODES={INPUT:1,TEXTAREA:2,SELECT:3,BUTTON:4,A:5,DETAILS:6,SUMMARY:7,IFRAME:8,VIDEO:9,AUDIO:10};maxSamples;sampleInterval;target;focusStartTime=0;focusInteraction=0;focusInteractionTimer=null;lastPointerSample=0;lastTouchSample=0;lastScrollSample=0;pendingPointer=null;pendingTouch=null;focus=[];pointer=[];scroll=[];touch=[];constructor(t={}){const{maxSamples:e=60,sampleInterval:n=50,target:r=window}=t;this.maxSamples=e,this.sampleInterval=n,this.target=r,this.attach()}destroy(){const t={capture:!0};this.target.removeEventListener("focusin",this.onFocus,t),this.target.removeEventListener("keydown",this.onInteraction,t),this.target.removeEventListener("pointerdown",this.onInteraction,t),this.target.removeEventListener("pointermove",this.onPointer,t),this.target.removeEventListener("scroll",this.onScroll,t),this.target.removeEventListener("touchmove",this.onTouchMove,t)}export(){return{focus:this.focus,maxTouchPoints:navigator.maxTouchPoints||0,pointer:this.pointer,scroll:this.scroll,time:Date.now(),touch:this.touch}}attach(){const t={passive:!0,capture:!0};this.target.addEventListener("focusin",this.onFocus,t),this.target.addEventListener("keydown",this.onInteraction,t),this.target.addEventListener("pointerdown",this.onInteraction,t),this.target.addEventListener("pointermove",this.onPointer,t),this.target.addEventListener("scroll",this.onScroll,t),this.target.addEventListener("touchmove",this.onTouchMove,t)}evict(t){t.length>this.maxSamples&&t.splice(0,t.length-this.maxSamples)}onFocus=t=>{if(2===this.focusInteraction)return;const e=t.target;if(!(e instanceof Element))return;const n=performance.now();0===this.focusStartTime&&(this.focusStartTime=n),this.focus.push([Math.round(n-this.focusStartTime),e.tabIndex,this.TAG_CODES[e.tagName]??0,this.focusInteraction?1:0]),this.evict(this.focus)};onInteraction=t=>{this.focusInteraction="keyCode"in t?1:2,this.focusInteractionTimer&&clearTimeout(this.focusInteractionTimer),this.focusInteractionTimer=setTimeout(()=>{this.focusInteraction=0},100)};onPointer=t=>{if("touch"===t.pointerType)return;const e=t.timeStamp||performance.now();this.pendingPointer=[Math.round(t.clientX),Math.round(t.clientY),Math.round(e)],e-this.lastPointerSample>=this.sampleInterval&&(this.pointer.push(this.pendingPointer),this.lastPointerSample=e,this.pendingPointer=null,this.evict(this.pointer))};onScroll=()=>{const t=performance.now();t-this.lastScrollSample{const e=t.timeStamp||performance.now(),n=t.touches[0];n&&(this.pendingTouch=[Math.round(n.clientX),Math.round(n.clientY),Math.round(e),Math.round(1e3*n.force)/1e3,Math.round(n.radiusX||0),Math.round(n.radiusY||0)],e-this.lastTouchSample>=this.sampleInterval&&(this.touch.push(this.pendingTouch),this.lastTouchSample=e,this.pendingTouch=null,this.evict(this.touch)))}}var Ta=Bn('
'),Aa=Bn('
'),Ra=Bn('
×
',1),Pa=Bn('
'),Ma=Bn(''),La=Bn('
Secure context (HTTPS) required.
'),za=Bn('
'),Na=Bn('
'),Da=Bn(" ",1),Va=Bn('
',1);"undefined"!=typeof window&&window.customElements&&!customElements.get("altcha-widget")&&customElements.define("altcha-widget",ea(function(t,e){K(e,!0);const[n,r]=function(){const t={};return[t,function(){vn(()=>{for(var e in t)t[e].unsubscribe();l(t,Ft,{enumerable:!1,value:!0})})}]}(),a=["ar","fa","he","ur"],{isSecureContext:o}=globalThis,{store:i}=globalThis.$altcha.defaults,c=navigator.hardwareConcurrency||2,s=navigator.deviceMemory||0,u=s&&s<=4?Math.min(4,c):c,d=globalThis.$altcha.i18n.store,h=e.$$host,f=(t,e)=>{ln().then(()=>{h?.dispatchEvent(new CustomEvent(t,{detail:e}))})};let p=null,v=Ce(pt(new URL(location.origin))),g=Ce(!1),m=Ce(null),b=Ce(null),y=Ce(null),w=Ce(pt(fa.UNVERIFIED)),_=Ce(void 0),k=Ce(void 0),x=Ce(null),$=Ce(void 0),E=Ce(null),C=Ce(null),S=Ce(null),O=Ce(null),T=Ce(pt([])),A=Ce(0),R=Ce(pt({})),P=Ce(!0);const M=be(()=>({fetch:(t,e)=>fetch(t,e),audioChallengeLanguage:"",auto:"off",barPlacement:"bottom",challenge:"",codeChallenge:null,codeChallengeDisplay:"standard",credentials:null,debug:!1,disableAutoFocus:!1,display:"standard",floatingAnchor:"",floatingOffset:8,floatingPersist:!1,floatingPlacement:"auto",hideFooter:!1,hideLogo:!1,humanInteractionSignature:!0,language:"",mockError:!1,minDuration:500,overlayContent:"",name:"altcha",popoverPlacement:"auto",retryOnOutOfMemoryError:!0,setCookie:null,serverVerificationFields:!1,serverVerificationTimeZone:!1,test:!1,timeout:9e4,type:"checkbox",validationMessage:"",verifyFunction:null,verifyUrl:"",workers:u,...qt(i,"$altchaDefaults",n),...cn(R)})),L=be(()=>`altcha-checkbox-${e.id||Math.floor(1e12*Math.random()).toString(16)}`),z=be(()=>function(t){switch(t){case"checkbox":return ra;case"switch":return da;default:return oa}}(cn(M).type)),N=be(()=>cn(M).auto),D=be(()=>cn(w)===fa.VERIFYING),V=be(()=>!cn(M).hideFooter),j=be(()=>!cn(M).hideLogo&&"bar"!==cn(M).display),U=be(()=>function(t,e){const n=Object.keys(t).map(t=>t.toLowerCase());let r=e.reduce((e,r)=>(r=r.toLowerCase(),e||(t[r]?r:null)||n.find(t=>r.split("-")[0]===t.split("-")[0])||null),null);t[r||""]||(r="en");return{language:r,strings:t[r]}}(qt(d,"$altchaI18nStore",n),[cn(M).language,document.documentElement.lang,...navigator.languages])),F=be(()=>a.includes(cn(U).language)?"rtl":void 0),q=be(()=>({...cn(U).strings})),H=be(()=>cn(m)?.audio?.match(/^(https?:)?\//)?X(cn(m).audio,cn(v),{language:cn(M).audioChallengeLanguage||cn(U).language}).toString():cn(m)?.audio),G=be(()=>cn(m)?.image?.match(/^(https?:)?\//)?X(cn(m).image,cn(v)):cn(m)?.image);async function Y(t,...e){let n;for(const r of cn(T))n=await r[t].call(r,...e);return n}async function B(t){await new Promise(e=>setTimeout(e,t))}async function J(t=cn(M).challenge,e){const n=await Y("onFetchChallenge",t);let r=null;if(void 0!==n)return n;if("string"==typeof t)if(t.startsWith("{")){xt("parsing JSON challenge");try{r=JSON.parse(t)}catch{throw new Error("Unable to parse JSON challenge.")}}else{xt("fetching challenge from",e?.method||"GET",t),Ie(v,new URL(t,location.origin),!0);const n=await cn(M).fetch(t,{credentials:cn(M).credentials||void 0,...e});await yt(n);const a=n.headers.get("x-altcha-config");a&&function(t){try{const e=JSON.parse(t);e&&"object"==typeof e&&_t({serverVerificationFields:e?.sentinel?.fields,serverVerificationTimeZone:e?.sentinel?.timeZone,verifyUrl:e.verifyurl,...e})}catch(t){xt("unable to configure from x-altcha-config header",t)}}(a);const o=await n.json();if(o&&"his"in o&&o.his){if(xt("requested HIS"),!p)throw new Error("Server requested HIS data but collector is disabled.");return J(X(o.his.url,cn(v)),{body:JSON.stringify({his:p.export()}),headers:{"content-type":"application/json"},method:"POST"})}o&&"hisResult"in o&&o.hisResult&&xt("HIS result",o.hisResult),r=o}else if(t&&"object"==typeof t)try{r=JSON.parse(JSON.stringify(t))}catch{throw new Error("Unable to parse JSON challenge.")}if(function(t){return"object"==typeof t&&"challenge"in t}(r)&&(r=function(t){const[e,n]=t.salt.split("?"),r={};if(n)try{Object.assign(r,Object.fromEntries(new URLSearchParams(n).entries()))}catch{}const a={codeChallenge:t.codeChallenge,parameters:{algorithm:t.algorithm,cost:1,data:r,expiresAt:r?.expires?parseInt(r.expires,10):void 0,keyLength:"SHA-512"===t.algorithm?64:"SHA-384"===t.algorithm?48:32,nonce:(o=(new TextEncoder).encode(t.salt),Array.from(new Uint8Array(o)).map(t=>t.toString(16).padStart(2,"0")).join("")),keyPrefix:t.challenge,salt:""},signature:t.signature};var o;return Object.defineProperties(a,{_originalSalt:{enumerable:!1,value:t.salt,writable:!1},_version:{enumerable:!1,value:1,writable:!1}}),a}(r)),!function(t){return!!t&&"object"==typeof t&&"parameters"in t&&!!t.parameters&&"object"==typeof t.parameters&&"algorithm"in t.parameters&&"nonce"in t.parameters&&"salt"in t.parameters&&"keyPrefix"in t.parameters}(r))throw new Error("Challenge validation failed.");return r}function Z(){return document.getElementById(cn(L))}function W(){try{return Intl.DateTimeFormat().resolvedOptions().timeZone}catch{}}function X(t,e,n){const r=new URL(t,e);if(r.search||(r.search=e.search),n)for(const t in n)void 0!==n[t]&&null!==n[t]&&r.searchParams.set(t,n[t]);return r.toString()}function tt(t){!cn(g)&&t.currentTarget.checked?(t.preventDefault(),t.currentTarget.checked=!1,cn(w)!==fa.VERIFYING&&At()):t.currentTarget.checked||(t.preventDefault(),$t())}function et(t){cn(w)===fa.VERIFYING?t.currentTarget.setCustomValidity(cn(q).waitAlert):cn(M).validationMessage&&t.currentTarget.setCustomValidity(cn(M).validationMessage)}function nt(){gt(cn(M).display),$t()}function rt(t){"onfocus"===cn(N)&&cn(w)===fa.UNVERIFIED&&At()}function at(){gt(cn(M).display),$t()}function dt(t){const e=t.target;"true"!==e?.getAttribute("data-code-challenge")&&"onsubmit"===cn(N)&&cn(w)===fa.UNVERIFIED&&(t.preventDefault(),t.stopPropagation(),Ie(E,t.submitter,!0),Ot(),At().then(t=>{t&&!cn(m)&&ln().then(()=>{vt(cn(E))})}))}function vt(t){cn(x)&&"requestSubmit"in cn(x)?cn(x).requestSubmit(t):cn(x)?.reportValidity()&&(t?t.click():cn(x).submit())}function gt(t){switch(t){case"bar":case"floating":case"overlay":kt(),cn(N)&&"off"!==cn(N)||(cn(R).auto="onsubmit");break;case"standard":Ot()}cn(y)!==t&&Ie(y,t,!0)}async function yt(t){if(t.status>=400){if(t.headers.get("content-type")?.includes("/json")){let e;try{e=await t.json()}catch{}if(e&&"error"in e)throw new Error(`Server responded with ${t.status} - ${e.error}`)}throw new Error(`Server responded with ${t.status}.`)}const e=t.headers.get("content-type");if(!e||!e.includes("/json"))throw new Error(`Server responded with invalid content-type. Expected application/json, received ${e}.`)}async function wt(t){if(!cn(O))return void Et(fa.ERROR,"Cannot verify code challenge without PoW payload.");Et(fa.VERIFYING);let e=null;if(cn(M).verifyUrl)e=await async function(t,e){const n=await Y("onRequestServerVerification",t,e);if(void 0!==n)return n;if(xt("requesting server verification from",cn(M).verifyUrl),!cn(M).verifyUrl)throw new Error("Parameter verifyUrl must be set for server verification.");const r=await cn(M).fetch(X(cn(M).verifyUrl,cn(v)),{body:JSON.stringify({code:e,fields:cn(M).serverVerificationFields?[...cn(x)?.querySelectorAll('input[type="text"]:not([data-no-spamfilter]), textarea:not([data-no-spamfilter])')||[]].reduce((t,e)=>{const n=e.name,r=e.value;return n&&r&&(t[n]=/\n/.test(r)?r.replace(new RegExp("(?{vt(cn(E))})):Et(fa.ERROR,e?.reason||"Verification failed."),cn(M).disableAutoFocus||Z()?.focus()}function _t(t){Object.assign(cn(R),{...Object.fromEntries(Object.entries(t).filter(([t,e])=>void 0!==e))})}function kt(){Ie(P,!1)}function xt(...t){(cn(M).debug||t.some(t=>t instanceof Error))&&console[t[0]instanceof Error?"error":"log"]("ALTCHA",`[name=${cn(M).name}]`,...t)}function $t(t=fa.UNVERIFIED,e=null){Ie(g,!1),Ie(C,e,!0),Ie(O,null),cn(b)&&cn(b).abort(),cn(S)&&(clearTimeout(cn(S)),Ie(S,null)),Et(t)}function Et(t,e=null){Ie(w,t,!0),Ie(C,e,!0),f("statechange",{payload:cn(O),state:cn(w)})}function Ot(){Ie(P,!0),ln().then(()=>{Tt()})}function Tt(){if("floating"===cn(M).display)return function(t=20){if(!cn($))return;const e=cn(M).floatingPlacement;if(!cn(k)&&(Ie(k,(cn(M).floatingAnchor instanceof HTMLElement?cn(M).floatingAnchor:cn(M).floatingAnchor?document.querySelector(cn(M).floatingAnchor):cn(x)?.querySelector('input[type="submit"], button[type="submit"], button:not([type="button"]):not([type="reset"])'))||cn(x),!0),!cn(k)))return void xt("unable to find floating anchor element");const n=parseInt(cn(M).floatingOffset,10)||12,r=cn(k).getBoundingClientRect(),a=cn($).getBoundingClientRect(),o=document.documentElement.clientHeight,i=document.documentElement.clientWidth,l=e&&"auto"!==e?"top"===e:r.bottom+a.height+n+t>o,c=Math.max(t,Math.min(i-t-a.width,r.left+r.width/2-a.width/2));if(cn($).style.setProperty("--altcha-floating-left",`${c}px`),cn($).style.setProperty("--altcha-floating-top",l?r.top-(a.height+n)+"px":`${r.bottom+n}px`),cn($).setAttribute("data-floating-position",l?"top":"bottom"),cn(_)){const t=cn(_).getBoundingClientRect();cn(_).style.left=r.left-c+r.width/2-t.width/2+"px"}}();Ie(A,cn(A)+1)}async function At(t={}){const{concurrency:e=Math.max(1,cn(M).workers),controller:n=new AbortController,minDuration:r=cn(M).minDuration}=t,a=performance.now();let i=null,l=null,c=!1;const s=await Y("onVerify",t);if(void 0!==s)return s;$t(fa.VERIFYING),Ie(b,n,!0);try{if(!o)throw new Error("Secure context (HTTPS) required.");if(cn(M).mockError)throw new Error("Mock error.");if(cn(M).test)return xt("running test mode with null challenge"),await B(Math.max(0,r-(performance.now()-a))),cn(b)?.signal.aborted?($t(),null):(Ie(O,btoa(JSON.stringify({challenge:null,solution:null,test:!0})),!0),xt("verified"),Et(fa.VERIFIED),f("verified",{payload:cn(O)}),{payload:cn(O)});if(i=await J(),!i)throw new Error("Failed to fetch challenge.");xt("challenge",i),"configuration"in i&&(xt("re-configuring from challenge",i.configuration),_t(i.configuration)),i.parameters.expiresAt&&function(t){cn(S)&&clearTimeout(cn(S));const e=()=>{cn(w)!==fa.UNVERIFIED?(Ie(g,!1),Et(fa.EXPIRED)):$t(),f("expired")},n=1e3*t-Date.now();n>=1?Ie(S,setTimeout(e,n),!0):e()}(i.parameters.expiresAt),c="_version"in i&&1===i._version;const t=globalThis.$altcha.algorithms.get(i.parameters.algorithm);if(!t)throw new Error(`Unsupported algorithm ${i.parameters.algorithm}.`);if(l=await Ia({challenge:i,concurrency:e,controller:n,createWorker:t,counterMode:c?"string":"uint32",onOutOfMemory:t=>{if(xt("out of memory error received"),f("outofmemory"),cn(M).retryOnOutOfMemoryError&&t>1){const e=Math.floor(t/2);return xt(`retrying with ${e} workers...`),e}},timeout:cn(M).timeout}),cn(b)?.signal.aborted)return $t(),null;if(!l)throw new Error("Failed to find solution.");xt("solution",l),await B(Math.max(0,r-(performance.now()-a))),Ie(m,i.codeChallenge||cn(M).codeChallenge||null,!0),Ie(O,c?btoa(JSON.stringify(function(t,e){return{algorithm:t.parameters.algorithm,challenge:t.parameters.keyPrefix,number:e.counter,salt:"_originalSalt"in t?t._originalSalt:t.parameters.nonce,signature:t.signature,took:e.time||0}}(i,l))):btoa(JSON.stringify({challenge:{parameters:i.parameters,signature:i.signature},solution:l})),!0),cn(m)?(xt("requesting code verification"),Et(fa.CODE),f("codechallenge",{codeChallenge:cn(m)})):cn(M).verifyUrl?await wt():(xt("verified"),Et(fa.VERIFIED),f("verified",{payload:cn(O)}))}catch(t){return xt("verification failed",t),Et(fa.ERROR,String(t)),null}finally{Ie(b,null)}return{challenge:i,payload:cn(O),solution:l}}gn(()=>{_t({auto:e.auto,challenge:e.challenge,display:e.display,language:e.language,name:e.name,type:e.type,workers:e.workers})}),gn(()=>{if(e.configuration)try{_t(JSON.parse(e.configuration))}catch{xt("unable to parse the `configuration` attribute (JSON expected)")}}),gn(()=>{cn(y)!==cn(M).display&>(cn(M).display)}),gn(()=>{cn(g)&&cn(w)===fa.VERIFYING&&Ie(g,!1)}),gn(()=>{cn(g)||cn(w)!==fa.VERIFIED||Ie(g,!0)}),gn(()=>{if(!cn(g)){const t=Z();t&&t.checked&&(t.checked=!1)}}),gn(()=>{cn(w)===fa.VERIFIED&&Z()?.setCustomValidity("")}),gn(()=>{if("onload"===cn(N)){const t=setTimeout(()=>{At()},1);return()=>{t&&clearTimeout(t)}}}),gn(()=>{cn(C)&&xt("error:",cn(C))}),gn(()=>{cn(O)&&cn(M).setCookie&&function(t,e={}){const{domain:n,name:r=cn(M).name,maxAge:a,path:o,sameSite:i,secure:l}=e;let c=`${encodeURIComponent(r)}=${encodeURIComponent(t)}`;n&&(c+=`; Domain=${n}`);null!=a&&(c+=`; Max-Age=${a}`);o&&(c+=`; Path=${o}`);i&&(c+=`; SameSite=${i}`);l&&(c+="; Secure");document.cookie=c}(cn(O),cn(M).setCookie)}),fr(()=>(xt("mounted","3.2.1"),h&&globalThis.$altcha.instances.add(h),Ie(x,cn($)?.closest("form"),!0),cn(x)?.addEventListener("reset",at),cn(x)?.addEventListener("submit",dt,{capture:!0}),cn(x)?.addEventListener("focusin",rt),function(){Ie(T,[...globalThis.$altcha.plugins].map(t=>new t(h)),!0),xt("activating plugins",cn(T).map(t=>t.constructor.name));for(const t of cn(T))t.activate()}(),cn(M).humanInteractionSignature&&(xt("human interaction signature enabled"),p=new Oa),f("load"),o||xt("secure context (HTTPS) required"),()=>{!function(){for(const t of cn(T))t.destroy()}(),h&&globalThis.$altcha.instances.delete(h),cn(S)&&clearTimeout(cn(S)),cn(x)?.removeEventListener("reset",at),cn(x)?.removeEventListener("submit",dt,{capture:!0}),cn(x)?.removeEventListener("focusin",rt),p?.destroy()}));var Rt={configure:_t,getConfiguration:function(){return{...cn(M)}},getState:function(){return cn(w)},hide:kt,log:xt,reset:$t,setState:Et,show:Ot,updateUI:Tt,verify:At},Pt=Va();Vn("scroll",bt,function(){Tt()}),Vn("click",bt,function(t){const e=t.target;"floating"!==cn(M).display||!e||h?.contains(e)||e.hasAttribute("data-backdrop")||e.closest("[data-popover]")||cn(w)===fa.VERIFIED||cn(M).floatingPersist||kt()}),Vn("pageshow",mt,function(t){t.persisted&&(gt(cn(M).display),$t())}),Vn("resize",mt,function(){Tt()});var Mt=St(Pt),Lt=t=>{Kn(t,Ta())};pr(Mt,t=>{"overlay"===cn(M).display&&cn(P)&&t(Lt)});var zt=It(Mt,2),Nt=Ct(zt),Dt=t=>{var e=Ra(),n=St(e),r=It(n,2),a=t=>{var e=Aa();gr(e,()=>document.querySelector(cn(M).overlayContent)?.innerHTML,!0),ut(e),Kn(t,e)};pr(r,t=>{cn(M).overlayContent&&t(a)}),Vn("click",n,nt,!0),Kn(t,e)};pr(Nt,t=>{"overlay"===cn(M).display&&cn(P)&&t(Dt)});var Vt=It(Nt,2),jt=Ct(Vt),Ut=Ct(jt),Ht=Ct(Ut);{let t=be(()=>"standard"===cn(M).display&&"onsubmit"!==cn(N)||cn(w)===fa.VERIFYING);!function(t,e,n){var r;it&&(r=ot,st());var a=new hr(t);_n(()=>{var t=e()??null;if(it&&"["===ft(r)!=(null!==t)){var o=ht();return ct(o),a.anchor=o,lt(!1),a.ensure(t,t&&(e=>n(e,t))),void lt(!0)}a.ensure(t,t&&(e=>n(e,t)))},I)}(Ht,()=>cn(z),(e,n)=>{n(e,{get id(){return cn(L)},name:"",get required(){return cn(t)},get loading(){return cn(D)},get checked(){return cn(g)},onchange:tt,oninvalid:et})})}var Gt=It(Ht,2),Yt=Ct(Gt),Bt=t=>{var e=Wn();wn(()=>ir(e,cn(q).verificationRequired)),Kn(t,e)},Jt=t=>{var e=Wn();wn(()=>ir(e,cn(q).verifying)),Kn(t,e)},Zt=t=>{var e=Wn();wn(()=>ir(e,cn(q).verified)),Kn(t,e)},Wt=t=>{var e=Wn();wn(()=>ir(e,cn(q).label)),Kn(t,e)};pr(Yt,t=>{cn(w)===fa.CODE&&cn(m)?t(Bt):cn(w)===fa.VERIFYING?t(Jt,1):cn(w)===fa.VERIFIED?t(Zt,2):t(Wt,-1)}),ut(Gt),ut(Ut);var Xt=It(Ut,2),Kt=t=>{la(t,{get strings(){return cn(q)}})};pr(Xt,t=>{cn(j)&&t(Kt)}),ut(jt);var Qt=It(jt,2),te=t=>{{let e=be(()=>"bar"===cn(M).display&&cn(j));sa(t,{get logo(){return cn(e)},get strings(){return cn(q)}})}};pr(Qt,t=>{cn(V)&&t(te)});var ee=It(Qt,2),ne=t=>{var e=Pa();Jr(e,t=>Ie(_,t),()=>cn(_)),Kn(t,e)};pr(ee,t=>{"floating"===cn(M).display&&t(ne)});var re=It(ee,2),ae=t=>{var e=Ma();Nr(e),wn(()=>{var t,n,r;Vr(e,"name",cn(M).name),t=e,n=cn(O),(r=Ur(t)).value!==(r.value=n??void 0)&&(t.value!==n||0===n&&t.nodeName===zr)&&(t.value=n??"")}),Kn(t,e)};pr(re,t=>{cn(M).setCookie||t(ae)}),ut(Vt);var oe=It(Vt,2),ie=t=>{Sa(t,{get anchor(){return cn($)},onClickOutside:()=>{o&&$t()},get placement(){return cn(M).popoverPlacement},role:"alert",variant:"error",get dir(){return cn(F)},get updateUISignal(){return cn(A)},children:(t,e)=>{var n=Xn(),r=St(n),a=t=>{Kn(t,La())},i=t=>{var e=za(),n=Ct(e,!0);ut(e),wn(()=>ir(n,cn(q).expired)),Kn(t,e)},l=t=>{var e=Na(),n=Ct(e,!0);ut(e),wn(()=>{Vr(e,"title",cn(C)),ir(n,cn(q).error)}),Kn(t,e)};pr(r,t=>{cn(C)||o?cn(C)||cn(w)!==fa.EXPIRED?t(l,-1):t(i,1):t(a)}),Kn(t,n)},$$slots:{default:!0}})},le=t=>{var e=Xn();!function(t,e,n){it&&st();var r=new hr(t);_n(()=>{var t=e();t!=t&&(t=vr),r.ensure(t,n)})}(St(e),()=>cn(m),t=>{{let e=be(()=>"standard"!==cn(M).codeChallengeDisplay);Sa(t,{get anchor(){return cn($)},get backdrop(){return cn(e)},get display(){return cn(M).codeChallengeDisplay},onClose:()=>{$t()},get placement(){return cn(M).popoverPlacement},role:"dialog",get"aria-label"(){return cn(q).verificationRequired},get dir(){return cn(F)},get updateUISignal(){return cn(A)},children:(t,e)=>{var n=Da(),r=St(n);ka(r,{get audioUrl(){return cn(H)},get imageUrl(){return cn(G)},onCancel:()=>$t(),onReload:()=>At(),onSubmit:t=>wt(t),get codeChallenge(){return cn(m)},get config(){return cn(M)},get strings(){return cn(q)}});var a=It(r,2),o=t=>{sa(t,{get logo(){return cn(j)},get strings(){return cn(q)}})};pr(a,t=>{cn(V)&&"standard"!==cn(M).codeChallengeDisplay&&t(o)}),Kn(t,n)},$$slots:{default:!0}})}}),Kn(t,e)};pr(oe,t=>{cn(C)||cn(w)===fa.EXPIRED||!o?t(ie):cn(m)&&cn(w)===fa.CODE&&t(le,1)}),ut(zt),Jr(zt,t=>Ie($,t),()=>cn($)),wn(t=>{Vr(zt,"data-state",cn(w)),Vr(zt,"data-display",cn(M).display||void 0),Vr(zt,"data-placement",t),Vr(zt,"data-visible",cn(P)||void 0),Vr(zt,"dir",cn(F)),Vr(Gt,"for",cn(L)),zt.dir=zt.dir},[()=>function(t){switch(t){case"bar":return cn(M).barPlacement||"bottom";case"floating":return cn(M).floatingPlacement||"auto";default:return}}(cn(M).display)]),Kn(t,Pt);var ce=Q(Rt);return r(),ce},{auto:{type:"String"},challenge:{type:"String"},configuration:{type:"String"},display:{type:"String"},language:{type:"String"},name:{type:"String"},theme:{type:"String"},type:{type:"String"},workers:{type:"Number"}},[],["configure","getConfiguration","getState","hide","log","reset","setState","show","updateUI","verify"]))}); diff --git a/frontend/node_modules/altcha/dist/i18n/419.d.ts b/frontend/node_modules/altcha/dist/i18n/419.d.ts new file mode 100644 index 0000000..620ad78 --- /dev/null +++ b/frontend/node_modules/altcha/dist/i18n/419.d.ts @@ -0,0 +1 @@ +declare module 'altcha/i18n/419'; export {}; diff --git a/frontend/node_modules/altcha/dist/i18n/af.d.ts b/frontend/node_modules/altcha/dist/i18n/af.d.ts new file mode 100644 index 0000000..5e9b6cd --- /dev/null +++ b/frontend/node_modules/altcha/dist/i18n/af.d.ts @@ -0,0 +1 @@ +declare module 'altcha/i18n/af'; export {}; diff --git a/frontend/node_modules/altcha/dist/i18n/af.js b/frontend/node_modules/altcha/dist/i18n/af.js new file mode 100644 index 0000000..15951c5 --- /dev/null +++ b/frontend/node_modules/altcha/dist/i18n/af.js @@ -0,0 +1,128 @@ +const noop = () => { +}; +function safe_not_equal(a, b) { + return a != a ? b == b : a !== b || a !== null && typeof a === "object" || typeof a === "function"; +} +function subscribe_to_store(store2, run, invalidate) { + if (store2 == null) { + run(void 0); + return noop; + } + const unsub = untrack( + () => store2.subscribe( + run, + // @ts-expect-error + invalidate + ) + ); + return unsub.unsubscribe ? () => unsub.unsubscribe() : unsub; +} +const subscriber_queue = []; +function writable(value, start = noop) { + let stop = null; + const subscribers = /* @__PURE__ */ new Set(); + function set(new_value) { + if (safe_not_equal(value, new_value)) { + value = new_value; + if (stop) { + const run_queue = !subscriber_queue.length; + for (const subscriber of subscribers) { + subscriber[1](); + subscriber_queue.push(subscriber, value); + } + if (run_queue) { + for (let i = 0; i < subscriber_queue.length; i += 2) { + subscriber_queue[i][0](subscriber_queue[i + 1]); + } + subscriber_queue.length = 0; + } + } + } + } + function update(fn) { + set(fn( + /** @type {T} */ + value + )); + } + function subscribe(run, invalidate = noop) { + const subscriber = [run, invalidate]; + subscribers.add(subscriber); + if (subscribers.size === 1) { + stop = start(set, update) || noop; + } + run( + /** @type {T} */ + value + ); + return () => { + subscribers.delete(subscriber); + if (subscribers.size === 0 && stop) { + stop(); + stop = null; + } + }; + } + return { set, update, subscribe }; +} +function get(store2) { + let value; + subscribe_to_store(store2, (_) => value = _)(); + return value; +} +let untracking = false; +function untrack(fn) { + var previous_untracking = untracking; + try { + untracking = true; + return fn(); + } finally { + untracking = previous_untracking; + } +} +function store(defaultValue) { + const scope = { + get: (name) => { + return get(scope.store)[name]; + }, + set: (name, value) => { + if (typeof name === "string") { + Object.assign(get(scope.store), { + [name]: value + }); + } else { + Object.assign(get(scope.store), name); + } + scope.store.set(get(scope.store)); + }, + store: writable(defaultValue) + }; + return scope; +} +globalThis.$altcha = globalThis.$altcha || { + algorithms: /* @__PURE__ */ new Map(), + defaults: store({}), + i18n: store({}), + instances: /* @__PURE__ */ new Set(), + plugins: /* @__PURE__ */ new Set() +}; +const i18n = { + ariaLinkLabel: "Altcha (amptelike webwerf)", + enterCode: "Voer kode in", + enterCodeAria: "Voer die kode in wat jy hoor. Druk Spasie om die klank af te speel.", + error: "Verifikasie het misluk. Probeer later weer.", + expired: "Verifikasie het verval. Probeer weer.", + footer: 'Beskerm deur ALTCHA', + getAudioChallenge: "Kry 'n klankuitdaging", + label: "Ek is nie 'n robot nie", + loading: "Laai...", + reload: "Laai weer", + verify: "Verifieer", + verificationRequired: "Verifikasie is vereis!", + verified: "Geverifieer", + verifying: "Verifieer...", + waitAlert: "Verifieer... wag asseblief.", + cancel: "Kanselleer", + enterCodeFromImage: "Om voort te gaan, voer asseblief die kode vanaf die onderstaande prentjie in." +}; +globalThis.$altcha.i18n.set("af", i18n); diff --git a/frontend/node_modules/altcha/dist/i18n/af.umd.cjs b/frontend/node_modules/altcha/dist/i18n/af.umd.cjs new file mode 100644 index 0000000..1688b1d --- /dev/null +++ b/frontend/node_modules/altcha/dist/i18n/af.umd.cjs @@ -0,0 +1,133 @@ +(function(factory) { + typeof define === "function" && define.amd ? define(factory) : factory(); +})((function() { + "use strict"; + const noop = () => { + }; + function safe_not_equal(a, b) { + return a != a ? b == b : a !== b || a !== null && typeof a === "object" || typeof a === "function"; + } + function subscribe_to_store(store2, run, invalidate) { + if (store2 == null) { + run(void 0); + return noop; + } + const unsub = untrack( + () => store2.subscribe( + run, + // @ts-expect-error + invalidate + ) + ); + return unsub.unsubscribe ? () => unsub.unsubscribe() : unsub; + } + const subscriber_queue = []; + function writable(value, start = noop) { + let stop = null; + const subscribers = /* @__PURE__ */ new Set(); + function set(new_value) { + if (safe_not_equal(value, new_value)) { + value = new_value; + if (stop) { + const run_queue = !subscriber_queue.length; + for (const subscriber of subscribers) { + subscriber[1](); + subscriber_queue.push(subscriber, value); + } + if (run_queue) { + for (let i = 0; i < subscriber_queue.length; i += 2) { + subscriber_queue[i][0](subscriber_queue[i + 1]); + } + subscriber_queue.length = 0; + } + } + } + } + function update(fn) { + set(fn( + /** @type {T} */ + value + )); + } + function subscribe(run, invalidate = noop) { + const subscriber = [run, invalidate]; + subscribers.add(subscriber); + if (subscribers.size === 1) { + stop = start(set, update) || noop; + } + run( + /** @type {T} */ + value + ); + return () => { + subscribers.delete(subscriber); + if (subscribers.size === 0 && stop) { + stop(); + stop = null; + } + }; + } + return { set, update, subscribe }; + } + function get(store2) { + let value; + subscribe_to_store(store2, (_) => value = _)(); + return value; + } + let untracking = false; + function untrack(fn) { + var previous_untracking = untracking; + try { + untracking = true; + return fn(); + } finally { + untracking = previous_untracking; + } + } + function store(defaultValue) { + const scope = { + get: (name) => { + return get(scope.store)[name]; + }, + set: (name, value) => { + if (typeof name === "string") { + Object.assign(get(scope.store), { + [name]: value + }); + } else { + Object.assign(get(scope.store), name); + } + scope.store.set(get(scope.store)); + }, + store: writable(defaultValue) + }; + return scope; + } + globalThis.$altcha = globalThis.$altcha || { + algorithms: /* @__PURE__ */ new Map(), + defaults: store({}), + i18n: store({}), + instances: /* @__PURE__ */ new Set(), + plugins: /* @__PURE__ */ new Set() + }; + const i18n = { + ariaLinkLabel: "Altcha (amptelike webwerf)", + enterCode: "Voer kode in", + enterCodeAria: "Voer die kode in wat jy hoor. Druk Spasie om die klank af te speel.", + error: "Verifikasie het misluk. Probeer later weer.", + expired: "Verifikasie het verval. Probeer weer.", + footer: 'Beskerm deur ALTCHA', + getAudioChallenge: "Kry 'n klankuitdaging", + label: "Ek is nie 'n robot nie", + loading: "Laai...", + reload: "Laai weer", + verify: "Verifieer", + verificationRequired: "Verifikasie is vereis!", + verified: "Geverifieer", + verifying: "Verifieer...", + waitAlert: "Verifieer... wag asseblief.", + cancel: "Kanselleer", + enterCodeFromImage: "Om voort te gaan, voer asseblief die kode vanaf die onderstaande prentjie in." + }; + globalThis.$altcha.i18n.set("af", i18n); +})); diff --git a/frontend/node_modules/altcha/dist/i18n/africa.d.ts b/frontend/node_modules/altcha/dist/i18n/africa.d.ts new file mode 100644 index 0000000..c4ecb70 --- /dev/null +++ b/frontend/node_modules/altcha/dist/i18n/africa.d.ts @@ -0,0 +1 @@ +declare module 'altcha/i18n/africa'; export {}; diff --git a/frontend/node_modules/altcha/dist/i18n/africa.js b/frontend/node_modules/altcha/dist/i18n/africa.js new file mode 100644 index 0000000..449dde9 --- /dev/null +++ b/frontend/node_modules/altcha/dist/i18n/africa.js @@ -0,0 +1,248 @@ +const noop = () => { +}; +function safe_not_equal(a, b) { + return a != a ? b == b : a !== b || a !== null && typeof a === "object" || typeof a === "function"; +} +function subscribe_to_store(store2, run, invalidate) { + if (store2 == null) { + run(void 0); + return noop; + } + const unsub = untrack( + () => store2.subscribe( + run, + // @ts-expect-error + invalidate + ) + ); + return unsub.unsubscribe ? () => unsub.unsubscribe() : unsub; +} +const subscriber_queue = []; +function writable(value, start = noop) { + let stop = null; + const subscribers = /* @__PURE__ */ new Set(); + function set(new_value) { + if (safe_not_equal(value, new_value)) { + value = new_value; + if (stop) { + const run_queue = !subscriber_queue.length; + for (const subscriber of subscribers) { + subscriber[1](); + subscriber_queue.push(subscriber, value); + } + if (run_queue) { + for (let i = 0; i < subscriber_queue.length; i += 2) { + subscriber_queue[i][0](subscriber_queue[i + 1]); + } + subscriber_queue.length = 0; + } + } + } + } + function update(fn) { + set(fn( + /** @type {T} */ + value + )); + } + function subscribe(run, invalidate = noop) { + const subscriber = [run, invalidate]; + subscribers.add(subscriber); + if (subscribers.size === 1) { + stop = start(set, update) || noop; + } + run( + /** @type {T} */ + value + ); + return () => { + subscribers.delete(subscriber); + if (subscribers.size === 0 && stop) { + stop(); + stop = null; + } + }; + } + return { set, update, subscribe }; +} +function get(store2) { + let value; + subscribe_to_store(store2, (_) => value = _)(); + return value; +} +let untracking = false; +function untrack(fn) { + var previous_untracking = untracking; + try { + untracking = true; + return fn(); + } finally { + untracking = previous_untracking; + } +} +function store(defaultValue) { + const scope = { + get: (name) => { + return get(scope.store)[name]; + }, + set: (name, value) => { + if (typeof name === "string") { + Object.assign(get(scope.store), { + [name]: value + }); + } else { + Object.assign(get(scope.store), name); + } + scope.store.set(get(scope.store)); + }, + store: writable(defaultValue) + }; + return scope; +} +globalThis.$altcha = globalThis.$altcha || { + algorithms: /* @__PURE__ */ new Map(), + defaults: store({}), + i18n: store({}), + instances: /* @__PURE__ */ new Set(), + plugins: /* @__PURE__ */ new Set() +}; +const i18n$6 = { + ariaLinkLabel: "Altcha (amptelike webwerf)", + enterCode: "Voer kode in", + enterCodeAria: "Voer die kode in wat jy hoor. Druk Spasie om die klank af te speel.", + error: "Verifikasie het misluk. Probeer later weer.", + expired: "Verifikasie het verval. Probeer weer.", + footer: 'Beskerm deur ALTCHA', + getAudioChallenge: "Kry 'n klankuitdaging", + label: "Ek is nie 'n robot nie", + loading: "Laai...", + reload: "Laai weer", + verify: "Verifieer", + verificationRequired: "Verifikasie is vereis!", + verified: "Geverifieer", + verifying: "Verifieer...", + waitAlert: "Verifieer... wag asseblief.", + cancel: "Kanselleer", + enterCodeFromImage: "Om voort te gaan, voer asseblief die kode vanaf die onderstaande prentjie in." +}; +globalThis.$altcha.i18n.set("af", i18n$6); +const i18n$5 = { + ariaLinkLabel: "Altcha (ዋናው ድህረ ገጽ)", + enterCode: "ኮድ አስገባ", + enterCodeAria: "የሚሰማዎትን ኮድ ያስገቡ። ድምጽ ለመጫወት Space ን ይጫኑ።", + error: "ማረጋገጫ አልተሳካም። በኋላ ላይ እንደገና ይሞክሩ።", + expired: "ማረጋገጫው ጊዜው አልፏል። እንደገና ይሞክሩ።", + footer: 'በ ALTCHA የተጠበቀ', + getAudioChallenge: "የድምጽ ፈተና ያግኙ", + label: "እኔ ሮቦት አይደለሁም", + loading: "በመጫን ላይ...", + reload: "እንደገና ጫን", + verify: "አረጋግጥ", + verificationRequired: "ማረጋገጫ ያስፈልጋል!", + verified: "ተረጋግጧል", + verifying: "በማረጋገጥ ላይ...", + waitAlert: "በማረጋገጥ ላይ... እባክዎ ይጠብቁ።", + cancel: "ይቅር", + enterCodeFromImage: "ለመቀጠል፣ እባክዎን ከታች ካለው ምስል ኮዱን ያስገቡ።" +}; +globalThis.$altcha.i18n.set("am", i18n$5); +const i18n$4 = { + ariaLinkLabel: "Altcha (الموقع الرسمي)", + enterCode: "أدخل الرمز", + enterCodeAria: "أدخل الرمز الذي تسمعه. اضغط على المسافة لتشغيل الصوت.", + error: "فشل التحقق. حاول مرة أخرى لاحقاً.", + expired: "انتهت صلاحية التحقق. حاول مرة أخرى.", + footer: 'محمي بواسطة ALTCHA', + getAudioChallenge: "احصل على تحدي صوتي", + label: "أنا لست روبوتاً", + loading: "جارٍ التحميل...", + reload: "إعادة تحميل", + verify: "تحقق", + verificationRequired: "مطلوب التحقق!", + verified: "تم التحقق", + verifying: "جارٍ التحقق...", + waitAlert: "جارٍ التحقق... يرجى الانتظار.", + cancel: "إلغاء", + enterCodeFromImage: "للمتابعة، يرجى إدخال الرمز من الصورة أدناه." +}; +globalThis.$altcha.i18n.set("ar", i18n$4); +const i18n$3 = { + ariaLinkLabel: "Altcha (site officiel)", + enterCode: "Entrez le code", + enterCodeAria: "Entrez le code que vous entendez. Appuyez sur Espace pour écouter l'audio.", + error: "Échec de la vérification. Essayez à nouveau plus tard.", + expired: "La vérification a expiré. Essayez à nouveau.", + footer: 'Protégé par ALTCHA', + getAudioChallenge: "Obtenir un défi audio", + label: "Je ne suis pas un robot", + loading: "Chargement...", + reload: "Recharger", + verify: "Vérifier", + verificationRequired: "Vérification requise !", + verified: "Vérifié", + verifying: "Vérification en cours...", + waitAlert: "Vérification en cours... veuillez patienter.", + cancel: "Annuler", + enterCodeFromImage: "Pour continuer, veuillez entrer le code de l'image ci-dessous." +}; +globalThis.$altcha.i18n.set("fr-fr", i18n$3); +const i18n$2 = { + ariaLinkLabel: "Altcha (site oficial)", + enterCode: "Introduza o código", + enterCodeAria: "Introduza o código que ouve. Prima Espaço para reproduzir o áudio.", + error: "A verificação falhou. Por favor, tente novamente mais tarde.", + expired: "Verificação expirada. Por favor, tente novamente.", + footer: 'Protegido por ALTCHA', + getAudioChallenge: "Obter desafio de áudio", + label: "Não sou um robô", + loading: "A carregar...", + reload: "Recarregar", + verify: "Verificar", + verificationRequired: "Verificação necessária!", + verified: "Verificado", + verifying: "A verificar...", + waitAlert: "A verificar... por favor aguarde.", + cancel: "Cancelar", + enterCodeFromImage: "Para prosseguir, introduza o código da imagem abaixo." +}; +globalThis.$altcha.i18n.set("pt-pt", i18n$2); +const i18n$1 = { + ariaLinkLabel: "Altcha (tovuti rasmi)", + enterCode: "Weka nambari", + enterCodeAria: "Weka nambari unayosikia. Bonyeza Space kucheza sauti.", + error: "Uthibitishaji umeshindwa. Jaribu tena baadaye.", + expired: "Uthibitishaji umeisha. Jaribu tena.", + footer: 'Imealindwa na ALTCHA', + getAudioChallenge: "Pata changamoto ya sauti", + label: "Mimi sio roboti", + loading: "Inapakia...", + reload: "Pakia tena", + verify: "Thibitisha", + verificationRequired: "Uthibitishaji unahitajika!", + verified: "Imethibitishwa", + verifying: "Inathibitisha...", + waitAlert: "Inathibitisha... tafadhali subiri.", + cancel: "Ghairi", + enterCodeFromImage: "Ili kuendelea, tafadhali weka nambari kutoka kwa picha hapa chini." +}; +globalThis.$altcha.i18n.set("sw", i18n$1); +const i18n = { + ariaLinkLabel: "Altcha (oju opo wẹẹbu osise)", + enterCode: "Tẹ koodu sii", + enterCodeAria: "Tẹ koodu ti o ngbọ sii. Tẹ Space lati ṣe ohun orin.", + error: "Ìdájọ́kòwò kò ṣẹ́ṣe. Gbiyanju lẹẹkansi ni ọjọ́ iwájú.", + expired: "Ìdájọ́kòwò ti pari. Gbiyanju lẹẹkansi.", + footer: 'Ti wa ni ààbò nipasẹ ALTCHA', + getAudioChallenge: "Gba ìjàdú ohùn", + label: "Emi kii ṣe ẹrọ", + loading: "Ó ń gbé sílẹ̀...", + reload: "Tún gbé wọlé", + verify: "Ṣàdájọ́", + verificationRequired: "Ìdájọ́kòwò ni a nílò!", + verified: "A ti dájọ́", + verifying: "Ó ń ṣàdájọ́...", + waitAlert: "Ó ń ṣàdájọ́... ẹ jọ̀ọ́ ẹ duro.", + cancel: "Fagbọsẹ", + enterCodeFromImage: "Lati tẹsiwaju, jọwọ tẹ koodu ti o wa lati aworan isalẹ sii." +}; +globalThis.$altcha.i18n.set("yo", i18n); diff --git a/frontend/node_modules/altcha/dist/i18n/africa.umd.cjs b/frontend/node_modules/altcha/dist/i18n/africa.umd.cjs new file mode 100644 index 0000000..9bc0859 --- /dev/null +++ b/frontend/node_modules/altcha/dist/i18n/africa.umd.cjs @@ -0,0 +1,253 @@ +(function(factory) { + typeof define === "function" && define.amd ? define(factory) : factory(); +})((function() { + "use strict"; + const noop = () => { + }; + function safe_not_equal(a, b) { + return a != a ? b == b : a !== b || a !== null && typeof a === "object" || typeof a === "function"; + } + function subscribe_to_store(store2, run, invalidate) { + if (store2 == null) { + run(void 0); + return noop; + } + const unsub = untrack( + () => store2.subscribe( + run, + // @ts-expect-error + invalidate + ) + ); + return unsub.unsubscribe ? () => unsub.unsubscribe() : unsub; + } + const subscriber_queue = []; + function writable(value, start = noop) { + let stop = null; + const subscribers = /* @__PURE__ */ new Set(); + function set(new_value) { + if (safe_not_equal(value, new_value)) { + value = new_value; + if (stop) { + const run_queue = !subscriber_queue.length; + for (const subscriber of subscribers) { + subscriber[1](); + subscriber_queue.push(subscriber, value); + } + if (run_queue) { + for (let i = 0; i < subscriber_queue.length; i += 2) { + subscriber_queue[i][0](subscriber_queue[i + 1]); + } + subscriber_queue.length = 0; + } + } + } + } + function update(fn) { + set(fn( + /** @type {T} */ + value + )); + } + function subscribe(run, invalidate = noop) { + const subscriber = [run, invalidate]; + subscribers.add(subscriber); + if (subscribers.size === 1) { + stop = start(set, update) || noop; + } + run( + /** @type {T} */ + value + ); + return () => { + subscribers.delete(subscriber); + if (subscribers.size === 0 && stop) { + stop(); + stop = null; + } + }; + } + return { set, update, subscribe }; + } + function get(store2) { + let value; + subscribe_to_store(store2, (_) => value = _)(); + return value; + } + let untracking = false; + function untrack(fn) { + var previous_untracking = untracking; + try { + untracking = true; + return fn(); + } finally { + untracking = previous_untracking; + } + } + function store(defaultValue) { + const scope = { + get: (name) => { + return get(scope.store)[name]; + }, + set: (name, value) => { + if (typeof name === "string") { + Object.assign(get(scope.store), { + [name]: value + }); + } else { + Object.assign(get(scope.store), name); + } + scope.store.set(get(scope.store)); + }, + store: writable(defaultValue) + }; + return scope; + } + globalThis.$altcha = globalThis.$altcha || { + algorithms: /* @__PURE__ */ new Map(), + defaults: store({}), + i18n: store({}), + instances: /* @__PURE__ */ new Set(), + plugins: /* @__PURE__ */ new Set() + }; + const i18n$6 = { + ariaLinkLabel: "Altcha (amptelike webwerf)", + enterCode: "Voer kode in", + enterCodeAria: "Voer die kode in wat jy hoor. Druk Spasie om die klank af te speel.", + error: "Verifikasie het misluk. Probeer later weer.", + expired: "Verifikasie het verval. Probeer weer.", + footer: 'Beskerm deur ALTCHA', + getAudioChallenge: "Kry 'n klankuitdaging", + label: "Ek is nie 'n robot nie", + loading: "Laai...", + reload: "Laai weer", + verify: "Verifieer", + verificationRequired: "Verifikasie is vereis!", + verified: "Geverifieer", + verifying: "Verifieer...", + waitAlert: "Verifieer... wag asseblief.", + cancel: "Kanselleer", + enterCodeFromImage: "Om voort te gaan, voer asseblief die kode vanaf die onderstaande prentjie in." + }; + globalThis.$altcha.i18n.set("af", i18n$6); + const i18n$5 = { + ariaLinkLabel: "Altcha (ዋናው ድህረ ገጽ)", + enterCode: "ኮድ አስገባ", + enterCodeAria: "የሚሰማዎትን ኮድ ያስገቡ። ድምጽ ለመጫወት Space ን ይጫኑ።", + error: "ማረጋገጫ አልተሳካም። በኋላ ላይ እንደገና ይሞክሩ።", + expired: "ማረጋገጫው ጊዜው አልፏል። እንደገና ይሞክሩ።", + footer: 'በ ALTCHA የተጠበቀ', + getAudioChallenge: "የድምጽ ፈተና ያግኙ", + label: "እኔ ሮቦት አይደለሁም", + loading: "በመጫን ላይ...", + reload: "እንደገና ጫን", + verify: "አረጋግጥ", + verificationRequired: "ማረጋገጫ ያስፈልጋል!", + verified: "ተረጋግጧል", + verifying: "በማረጋገጥ ላይ...", + waitAlert: "በማረጋገጥ ላይ... እባክዎ ይጠብቁ።", + cancel: "ይቅር", + enterCodeFromImage: "ለመቀጠል፣ እባክዎን ከታች ካለው ምስል ኮዱን ያስገቡ።" + }; + globalThis.$altcha.i18n.set("am", i18n$5); + const i18n$4 = { + ariaLinkLabel: "Altcha (الموقع الرسمي)", + enterCode: "أدخل الرمز", + enterCodeAria: "أدخل الرمز الذي تسمعه. اضغط على المسافة لتشغيل الصوت.", + error: "فشل التحقق. حاول مرة أخرى لاحقاً.", + expired: "انتهت صلاحية التحقق. حاول مرة أخرى.", + footer: 'محمي بواسطة ALTCHA', + getAudioChallenge: "احصل على تحدي صوتي", + label: "أنا لست روبوتاً", + loading: "جارٍ التحميل...", + reload: "إعادة تحميل", + verify: "تحقق", + verificationRequired: "مطلوب التحقق!", + verified: "تم التحقق", + verifying: "جارٍ التحقق...", + waitAlert: "جارٍ التحقق... يرجى الانتظار.", + cancel: "إلغاء", + enterCodeFromImage: "للمتابعة، يرجى إدخال الرمز من الصورة أدناه." + }; + globalThis.$altcha.i18n.set("ar", i18n$4); + const i18n$3 = { + ariaLinkLabel: "Altcha (site officiel)", + enterCode: "Entrez le code", + enterCodeAria: "Entrez le code que vous entendez. Appuyez sur Espace pour écouter l'audio.", + error: "Échec de la vérification. Essayez à nouveau plus tard.", + expired: "La vérification a expiré. Essayez à nouveau.", + footer: 'Protégé par ALTCHA', + getAudioChallenge: "Obtenir un défi audio", + label: "Je ne suis pas un robot", + loading: "Chargement...", + reload: "Recharger", + verify: "Vérifier", + verificationRequired: "Vérification requise !", + verified: "Vérifié", + verifying: "Vérification en cours...", + waitAlert: "Vérification en cours... veuillez patienter.", + cancel: "Annuler", + enterCodeFromImage: "Pour continuer, veuillez entrer le code de l'image ci-dessous." + }; + globalThis.$altcha.i18n.set("fr-fr", i18n$3); + const i18n$2 = { + ariaLinkLabel: "Altcha (site oficial)", + enterCode: "Introduza o código", + enterCodeAria: "Introduza o código que ouve. Prima Espaço para reproduzir o áudio.", + error: "A verificação falhou. Por favor, tente novamente mais tarde.", + expired: "Verificação expirada. Por favor, tente novamente.", + footer: 'Protegido por ALTCHA', + getAudioChallenge: "Obter desafio de áudio", + label: "Não sou um robô", + loading: "A carregar...", + reload: "Recarregar", + verify: "Verificar", + verificationRequired: "Verificação necessária!", + verified: "Verificado", + verifying: "A verificar...", + waitAlert: "A verificar... por favor aguarde.", + cancel: "Cancelar", + enterCodeFromImage: "Para prosseguir, introduza o código da imagem abaixo." + }; + globalThis.$altcha.i18n.set("pt-pt", i18n$2); + const i18n$1 = { + ariaLinkLabel: "Altcha (tovuti rasmi)", + enterCode: "Weka nambari", + enterCodeAria: "Weka nambari unayosikia. Bonyeza Space kucheza sauti.", + error: "Uthibitishaji umeshindwa. Jaribu tena baadaye.", + expired: "Uthibitishaji umeisha. Jaribu tena.", + footer: 'Imealindwa na ALTCHA', + getAudioChallenge: "Pata changamoto ya sauti", + label: "Mimi sio roboti", + loading: "Inapakia...", + reload: "Pakia tena", + verify: "Thibitisha", + verificationRequired: "Uthibitishaji unahitajika!", + verified: "Imethibitishwa", + verifying: "Inathibitisha...", + waitAlert: "Inathibitisha... tafadhali subiri.", + cancel: "Ghairi", + enterCodeFromImage: "Ili kuendelea, tafadhali weka nambari kutoka kwa picha hapa chini." + }; + globalThis.$altcha.i18n.set("sw", i18n$1); + const i18n = { + ariaLinkLabel: "Altcha (oju opo wẹẹbu osise)", + enterCode: "Tẹ koodu sii", + enterCodeAria: "Tẹ koodu ti o ngbọ sii. Tẹ Space lati ṣe ohun orin.", + error: "Ìdájọ́kòwò kò ṣẹ́ṣe. Gbiyanju lẹẹkansi ni ọjọ́ iwájú.", + expired: "Ìdájọ́kòwò ti pari. Gbiyanju lẹẹkansi.", + footer: 'Ti wa ni ààbò nipasẹ ALTCHA', + getAudioChallenge: "Gba ìjàdú ohùn", + label: "Emi kii ṣe ẹrọ", + loading: "Ó ń gbé sílẹ̀...", + reload: "Tún gbé wọlé", + verify: "Ṣàdájọ́", + verificationRequired: "Ìdájọ́kòwò ni a nílò!", + verified: "A ti dájọ́", + verifying: "Ó ń ṣàdájọ́...", + waitAlert: "Ó ń ṣàdájọ́... ẹ jọ̀ọ́ ẹ duro.", + cancel: "Fagbọsẹ", + enterCodeFromImage: "Lati tẹsiwaju, jọwọ tẹ koodu ti o wa lati aworan isalẹ sii." + }; + globalThis.$altcha.i18n.set("yo", i18n); +})); diff --git a/frontend/node_modules/altcha/dist/i18n/all.d.ts b/frontend/node_modules/altcha/dist/i18n/all.d.ts new file mode 100644 index 0000000..cae1c6e --- /dev/null +++ b/frontend/node_modules/altcha/dist/i18n/all.d.ts @@ -0,0 +1 @@ +declare module 'altcha/i18n/all'; export {}; diff --git a/frontend/node_modules/altcha/dist/i18n/all.js b/frontend/node_modules/altcha/dist/i18n/all.js new file mode 100644 index 0000000..0079cd5 --- /dev/null +++ b/frontend/node_modules/altcha/dist/i18n/all.js @@ -0,0 +1,1328 @@ +const noop = () => { +}; +function safe_not_equal(a, b) { + return a != a ? b == b : a !== b || a !== null && typeof a === "object" || typeof a === "function"; +} +function subscribe_to_store(store2, run, invalidate) { + if (store2 == null) { + run(void 0); + return noop; + } + const unsub = untrack( + () => store2.subscribe( + run, + // @ts-expect-error + invalidate + ) + ); + return unsub.unsubscribe ? () => unsub.unsubscribe() : unsub; +} +const subscriber_queue = []; +function writable(value, start = noop) { + let stop = null; + const subscribers = /* @__PURE__ */ new Set(); + function set(new_value) { + if (safe_not_equal(value, new_value)) { + value = new_value; + if (stop) { + const run_queue = !subscriber_queue.length; + for (const subscriber of subscribers) { + subscriber[1](); + subscriber_queue.push(subscriber, value); + } + if (run_queue) { + for (let i = 0; i < subscriber_queue.length; i += 2) { + subscriber_queue[i][0](subscriber_queue[i + 1]); + } + subscriber_queue.length = 0; + } + } + } + } + function update(fn) { + set(fn( + /** @type {T} */ + value + )); + } + function subscribe(run, invalidate = noop) { + const subscriber = [run, invalidate]; + subscribers.add(subscriber); + if (subscribers.size === 1) { + stop = start(set, update) || noop; + } + run( + /** @type {T} */ + value + ); + return () => { + subscribers.delete(subscriber); + if (subscribers.size === 0 && stop) { + stop(); + stop = null; + } + }; + } + return { set, update, subscribe }; +} +function get(store2) { + let value; + subscribe_to_store(store2, (_) => value = _)(); + return value; +} +let untracking = false; +function untrack(fn) { + var previous_untracking = untracking; + try { + untracking = true; + return fn(); + } finally { + untracking = previous_untracking; + } +} +function store(defaultValue) { + const scope = { + get: (name) => { + return get(scope.store)[name]; + }, + set: (name, value) => { + if (typeof name === "string") { + Object.assign(get(scope.store), { + [name]: value + }); + } else { + Object.assign(get(scope.store), name); + } + scope.store.set(get(scope.store)); + }, + store: writable(defaultValue) + }; + return scope; +} +globalThis.$altcha = globalThis.$altcha || { + algorithms: /* @__PURE__ */ new Map(), + defaults: store({}), + i18n: store({}), + instances: /* @__PURE__ */ new Set(), + plugins: /* @__PURE__ */ new Set() +}; +const i18n$Y = { + ariaLinkLabel: "Altcha (الموقع الرسمي)", + enterCode: "أدخل الرمز", + enterCodeAria: "أدخل الرمز الذي تسمعه. اضغط على المسافة لتشغيل الصوت.", + error: "فشل التحقق. حاول مرة أخرى لاحقاً.", + expired: "انتهت صلاحية التحقق. حاول مرة أخرى.", + footer: 'محمي بواسطة ALTCHA', + getAudioChallenge: "احصل على تحدي صوتي", + label: "أنا لست روبوتاً", + loading: "جارٍ التحميل...", + reload: "إعادة تحميل", + verify: "تحقق", + verificationRequired: "مطلوب التحقق!", + verified: "تم التحقق", + verifying: "جارٍ التحقق...", + waitAlert: "جارٍ التحقق... يرجى الانتظار.", + cancel: "إلغاء", + enterCodeFromImage: "للمتابعة، يرجى إدخال الرمز من الصورة أدناه." +}; +globalThis.$altcha.i18n.set("ar", i18n$Y); +const i18n$X = { + ariaLinkLabel: "Altcha (официален уебсайт)", + enterCode: "Въведете код", + enterCodeAria: "Въведете кода, който чувате. Натиснете Space за възпроизвеждане на аудио.", + error: "Проверката неуспешна. Моля, опитайте по-късно.", + expired: "Времето за проверка изтече. Моля, опитайте отново.", + footer: 'Защитено от ALTCHA', + getAudioChallenge: "Аудио проверка", + label: "Аз не съм робот", + loading: "Зареждане...", + reload: "Презареди", + verify: "Провери", + verificationRequired: "Изисква се проверка!", + verified: "Проверено", + verifying: "Проверява се...", + waitAlert: "Проверката е в процес... моля изчакайте.", + cancel: "Отказ", + enterCodeFromImage: "За да продължите, моля, въведете кода от изображението по-долу." +}; +globalThis.$altcha.i18n.set("bg", i18n$X); +const i18n$W = { + ariaLinkLabel: "Altcha (афіцыйны сайт)", + enterCode: "Увядзіце код", + enterCodeAria: "Увядзіце код, які вы чуеце. Націсніце прабел, каб прайграць аўдыё.", + error: "Праверка не прайшла. Паспрабуйце пазней.", + expired: "Тэрмін праверкі скончыўся. Паспрабуйце зноў.", + footer: 'Абаронена ALTCHA', + getAudioChallenge: "Атрымаць аўдыё выклік", + label: "Я не робат", + loading: "Загрузка...", + reload: "Перазагрузіць", + verify: "Праверыць", + verificationRequired: "Патрабуецца праверка!", + verified: "Праверана", + verifying: "Правяраем...", + waitAlert: "Праверка... калі ласка, пачакайце.", + cancel: "Скасаваць", + enterCodeFromImage: "Каб працягнуць, увядзіце код з малюнка ніжэй." +}; +globalThis.$altcha.i18n.set("be", i18n$W); +const i18n$V = { + ariaLinkLabel: "Altcha (službena web stranica)", + enterCode: "Unesite kod", + enterCodeAria: "Unesite kod koji čujete. Pritisnite Space da biste pustili zvuk.", + error: "Verifikacija nije uspjela. Pokušajte ponovo kasnije.", + expired: "Verifikacija je istekla. Pokušajte ponovo.", + footer: 'Zaštićeno od strane ALTCHA', + getAudioChallenge: "Dohvatite audio izazov", + label: "Nisam robot", + loading: "Učitavanje...", + reload: "Ponovno učitaj", + verify: "Verifikuj", + verificationRequired: "Verifikacija je obavezna!", + verified: "Verifikovano", + verifying: "Verifikacija u toku...", + waitAlert: "Verifikacija u toku... molimo vas da sačekate.", + cancel: "Odustani", + enterCodeFromImage: "Za nastavak, molimo unesite kod sa slike ispod." +}; +globalThis.$altcha.i18n.set("bs", i18n$V); +const i18n$U = { + ariaLinkLabel: "Altcha (lloc web oficial)", + enterCode: "Introdueix el codi", + enterCodeAria: "Introdueix el codi que escoltes. Prem Espai per reproduir l’àudio.", + error: "Verificació fallida. Torna-ho a provar més tard.", + expired: "Verificació expirada. Torna-ho a provar.", + footer: 'Protegit per ALTCHA', + getAudioChallenge: "Obtenir un desafiament d’àudio", + label: "No sóc un robot", + loading: "Carregant...", + reload: "Torna a carregar", + verify: "Verificar", + verificationRequired: "Es requereix verificació!", + verified: "Verificat", + verifying: "Verificant...", + waitAlert: "Verificant... si us plau, espera.", + cancel: "Cancel·la", + enterCodeFromImage: "Per continuar, si us plau, introdueix el codi de la imatge següent." +}; +globalThis.$altcha.i18n.set("ca", i18n$U); +const i18n$T = { + ariaLinkLabel: "Altcha (oficiální web)", + enterCode: "Zadejte kód", + enterCodeAria: "Zadejte kód, který slyšíte. Stisknutím mezerníku přehrajete zvuk.", + error: "Ověření selhalo. Zkuste to prosím později.", + expired: "Ověření vypršelo. Zkuste to prosím znovu.", + footer: 'Chráněno pomocí ALTCHA', + getAudioChallenge: "Získat audio výzvu", + label: "Nejsem robot", + loading: "Načítání...", + reload: "Znovu načíst", + verify: "Ověřit", + verificationRequired: "Vyžaduje se ověření!", + verified: "Ověřeno", + verifying: "Ověřování...", + waitAlert: "Probíhá ověření... prosím počkejte.", + cancel: "Zrušit", + enterCodeFromImage: "Pro pokračování zadejte kód z obrázku níže." +}; +globalThis.$altcha.i18n.set("cs", i18n$T); +const i18n$S = { + ariaLinkLabel: "Altcha (officiel hjemmeside)", + enterCode: "Indtast kode", + enterCodeAria: "Indtast den kode, du hører. Tryk på mellemrumstasten for at afspille lyd.", + error: "Verificering mislykkedes. Prøv venligst igen senere.", + expired: "Verificering udløbet. Prøv venligst igen.", + footer: 'Beskyttet af ALTCHA', + getAudioChallenge: "Hent lydudfordring", + label: "Jeg er ikke en robot", + loading: "Indlæser...", + reload: "Genindlæs", + verify: "Verificer", + verificationRequired: "Verificering kræves!", + verified: "Verificeret", + verifying: "Verificerer...", + waitAlert: "Verificerer... vent venligst.", + cancel: "Annuller", + enterCodeFromImage: "For at fortsætte, bedes du indtaste koden fra billedet herunder." +}; +globalThis.$altcha.i18n.set("da", i18n$S); +const i18n$R = { + ariaLinkLabel: "Altcha (offizielle Website)", + enterCode: "Code eingeben", + enterCodeAria: "Geben Sie den Code ein, den Sie hören. Drücken Sie die Leertaste, um die Audio abzuspielen.", + error: "Überprüfung fehlgeschlagen. Bitte versuchen Sie es später erneut.", + expired: "Überprüfung abgelaufen. Bitte versuchen Sie es erneut.", + footer: 'Geschützt durch ALTCHA', + getAudioChallenge: "Audio-Herausforderung anfordern", + label: "Ich bin kein Roboter", + loading: "Lade...", + reload: "Neu laden", + verify: "Überprüfen", + verificationRequired: "Überprüfung erforderlich!", + verified: "Überprüft", + verifying: "Wird überprüft...", + waitAlert: "Überprüfung läuft... bitte warten.", + cancel: "Abbrechen", + enterCodeFromImage: "Um fortzufahren, geben Sie bitte den Code aus dem Bild unten ein." +}; +globalThis.$altcha.i18n.set("de", i18n$R); +const i18n$Q = { + ariaLinkLabel: "Altcha (επίσημος ιστότοπος)", + enterCode: "Εισαγάγετε κωδικό", + enterCodeAria: "Εισαγάγετε τον κωδικό που ακούτε. Πατήστε Space για να παίξετε τον ήχο.", + error: "Η επαλήθευση απέτυχε. Δοκιμάστε ξανά αργότερα.", + expired: "Η επαλήθευση έληξε. Δοκιμάστε ξανά.", + footer: 'Προστατεύεται από το ALTCHA', + getAudioChallenge: "Λήψη ηχητικής δοκιμασίας", + label: "Δεν είμαι ρομπότ", + loading: "Φόρτωση...", + reload: "Επαναφόρτωση", + verify: "Επαλήθευση", + verificationRequired: "Απαιτείται έλεγχος!", + verified: "Επαληθεύτηκε", + verifying: "Γίνεται επαλήθευση...", + waitAlert: "Γίνεται επαλήθευση... παρακαλώ περιμένετε.", + cancel: "Ακύρωση", + enterCodeFromImage: "Για να συνεχίσετε, εισάγετε τον κωδικό από την παρακάτω εικόνα." +}; +globalThis.$altcha.i18n.set("el", i18n$Q); +const i18n$P = { + ariaLinkLabel: "Altcha (sitio web oficial)", + enterCode: "Introduce el código", + enterCodeAria: "Introduce el código que escuchas. Pulsa Espacio para reproducir el audio.", + error: "Falló la verificación. Por favor intente nuevamente más tarde.", + expired: "Verificación expirada. Por favor intente nuevamente.", + footer: 'Protegido por ALTCHA', + getAudioChallenge: "Obtener un desafío de audio", + label: "No soy un robot", + loading: "Cargando...", + reload: "Recargar", + verify: "Verificar", + verificationRequired: "¡Verificación requerida!", + verified: "Verificado", + verifying: "Verificando...", + waitAlert: "Verificando... por favor espere.", + cancel: "Cancelar", + enterCodeFromImage: "Para continuar, introduzca el código de la imagen de abajo." +}; +globalThis.$altcha.i18n.set("es-es", i18n$P); +const i18n$O = { + ariaLinkLabel: "Altcha (sitio web oficial)", + enterCode: "Ingresa el código", + enterCodeAria: "Ingresa el código que escuchas. Presiona Espacio para reproducir el audio.", + error: "Falló la verificación. Por favor vuelve a intentarlo más tarde.", + expired: "La verificación expiró. Por favor inténtalo de nuevo.", + footer: 'Protegido por ALTCHA', + getAudioChallenge: "Obtener un reto de audio", + label: "No soy un robot", + loading: "Cargando...", + reload: "Volver a cargar", + verify: "Verificar", + verificationRequired: "¡Verificación requerida!", + verified: "Verificado", + verifying: "Verificando...", + waitAlert: "Verificando... por favor espera.", + cancel: "Cancelar", + enterCodeFromImage: "Para continuar, ingresa el código de la imagen a continuación." +}; +globalThis.$altcha.i18n.set("es-419", i18n$O); +const i18n$N = { + ariaLinkLabel: "Altcha (ametlik veebisait)", + enterCode: "Sisesta kood", + enterCodeAria: "Sisestage kuuldu kood. Vajutage tühikut, et esitada heli.", + error: "Kinnitamine ebaõnnestus. Proovi hiljem uuesti.", + expired: "Kinnitamine aegus. Proovi uuesti.", + footer: 'Kaitstud ALTCHA poolt', + getAudioChallenge: "Hangi heliülesanne", + label: "Ma ei ole robot", + loading: "Laadimine...", + reload: "Laadi uuesti", + verify: "Kinnita", + verificationRequired: "Kontroll on vajalik!", + verified: "Kinnitatud", + verifying: "Kinnitamine...", + waitAlert: "Kinnitamine... palun oota.", + cancel: "Tühista", + enterCodeFromImage: "Jätkamiseks sisestage alloleval pildil olev kood." +}; +globalThis.$altcha.i18n.set("et", i18n$N); +const i18n$M = { + ariaLinkLabel: "Altcha (webgune ofiziala)", + enterCode: "Sartu kodea", + enterCodeAria: "Sartu entzun duzun kodea. Sakatu Espazioa audioa erreproduzitzeko.", + error: "Egiaztatzeak huts egin du. Saiatu berriro geroago.", + expired: "Egiaztatzea iraungi da. Saiatu berriro.", + footer: 'ALTCHAk babestuta', + getAudioChallenge: "Jaso audio-erronka bat", + label: "Ez naiz robot bat", + loading: "Kargatzen...", + reload: "Birkargatu", + verify: "Egiaztatu", + verificationRequired: "Egiaztatzea beharrezkoa da!", + verified: "Egiaztatuta", + verifying: "Egiaztatzen...", + waitAlert: "Egiaztatzen... itxaron mesedez.", + cancel: "Utzi", + enterCodeFromImage: "Jarraitzeko, idatzi beheko irudiko kodea." +}; +globalThis.$altcha.i18n.set("eu", i18n$M); +const i18n$L = { + ariaLinkLabel: "Altcha (وب‌سایت رسمی)", + enterCode: "کد را وارد کنید", + enterCodeAria: "کدی که می‌شنوید را وارد کنید. برای پخش صدا Space را فشار دهید.", + error: "احراز هویت ناموفق بود. بعداً دوباره تلاش کنید.", + expired: "احراز هویت منقضی شد. دوباره تلاش کنید.", + footer: 'محافظت شده توسط ALTCHA', + getAudioChallenge: "دریافت چالش صوتی", + label: "من ربات نیستم", + loading: "در حال بارگذاری...", + reload: "بارگذاری مجدد", + verify: "تایید", + verificationRequired: "احراز هویت لازم است!", + verified: "تایید شد", + verifying: "در حال تایید...", + waitAlert: "در حال تایید... لطفا منتظر بمانید.", + cancel: "لغو کردن", + enterCodeFromImage: "برای ادامه، لطفاً کد تصویر زیر را وارد کنید." +}; +globalThis.$altcha.i18n.set("fa", i18n$L); +const i18n$K = { + ariaLinkLabel: "Altcha (offiziell Websäit)", + enterCode: "Code aginn", + enterCodeAria: "Gitt de Code an deen dir héiert. Dréckt op d'Weltraumtast fir Audio ofzespillen.", + error: "Verifikatioun ass feelgeschloen. Probéiert méi spéit nach emol.", + expired: "Verifikatioun ofgelaf. Probéiert nach emol.", + footer: 'Geschützt vun ALTCHA', + getAudioChallenge: "Kritt eng Audio-Herausfuerderung", + label: "Ech sinn keen Robot", + loading: "Lueden...", + reload: "Nei lueden", + verify: "Verifizéieren", + verificationRequired: "Verifikatioun néideg!", + verified: "Verifizéiert", + verifying: "Verifizéieren...", + waitAlert: "Verifizéieren... waart wgl.", + cancel: "Ofbriechen", + enterCodeFromImage: "Fir virun ze fueren, gitt wgl. de Code aus dem Bild hei drënner an." +}; +globalThis.$altcha.i18n.set("lb", i18n$K); +const i18n$J = { + ariaLinkLabel: "Altcha (virallinen verkkosivusto)", + enterCode: "Syötä koodi", + enterCodeAria: "Kirjoita kuulemasi koodi. Paina välilyöntiä toistaaksesi äänen.", + error: "Varmennus epäonnistui. Yritä myöhemmin uudelleen.", + expired: "Varmennus vanhentui. Yritä uudelleen.", + footer: 'Suojattu ALTCHA:lla', + getAudioChallenge: "Hae äänitehtävä", + label: "En ole robotti", + loading: "Ladataan...", + reload: "Lataa uudelleen", + verify: "Vahvista", + verificationRequired: "Vahvistus vaaditaan!", + verified: "Vahvistettu", + verifying: "Vahvistetaan...", + waitAlert: "Vahvistetaan... odota hetki.", + cancel: "Peruuta", + enterCodeFromImage: "Jatkaaksesi, syötä alla olevan kuvan koodi." +}; +globalThis.$altcha.i18n.set("fi", i18n$J); +const i18n$I = { + ariaLinkLabel: "Altcha (site officiel)", + enterCode: "Entrez le code", + enterCodeAria: "Entrez le code que vous entendez. Appuyez sur la barre d'espace pour écouter l'audio.", + error: "Échec de la vérification. Réessayez plus tard.", + expired: "La vérification a expiré. Réessayez.", + footer: 'Protégé par ALTCHA', + getAudioChallenge: "Obtenir un défi audio", + label: "Je ne suis pas un robot", + loading: "Chargement...", + reload: "Recharger", + verify: "Vérifier", + verificationRequired: "Vérification requise !", + verified: "Vérifié", + verifying: "Vérification en cours...", + waitAlert: "Vérification en cours... veuillez patienter.", + cancel: "Annuler", + enterCodeFromImage: "Pour continuer, veuillez entrer le code de l'image ci-dessous." +}; +globalThis.$altcha.i18n.set("fr-ca", i18n$I); +const i18n$H = { + ariaLinkLabel: "Altcha (site officiel)", + enterCode: "Entrez le code", + enterCodeAria: "Entrez le code que vous entendez. Appuyez sur Espace pour écouter l'audio.", + error: "Échec de la vérification. Essayez à nouveau plus tard.", + expired: "La vérification a expiré. Essayez à nouveau.", + footer: 'Protégé par ALTCHA', + getAudioChallenge: "Obtenir un défi audio", + label: "Je ne suis pas un robot", + loading: "Chargement...", + reload: "Recharger", + verify: "Vérifier", + verificationRequired: "Vérification requise !", + verified: "Vérifié", + verifying: "Vérification en cours...", + waitAlert: "Vérification en cours... veuillez patienter.", + cancel: "Annuler", + enterCodeFromImage: "Pour continuer, veuillez entrer le code de l'image ci-dessous." +}; +globalThis.$altcha.i18n.set("fr-fr", i18n$H); +const i18n$G = { + ariaLinkLabel: "Altcha (láithreán gréasáin oifigiúil)", + enterCode: "Iontráil cód", + enterCodeAria: "Cuir isteach an cód a chloiseann tú. Brúigh Spás chun an fuaime a sheinm.", + error: "Theip ar an bhfíorú. Bain triail eile as níos déanaí.", + expired: "Tá an fíorú as feidhm. Bain triail eile as.", + footer: 'Cosanta ag ALTCHA', + getAudioChallenge: "Faigh dúshlán fuaime", + label: "Níl mé i mo róbat", + loading: "Á luchtú...", + reload: "Athluchtaigh", + verify: "Fíoraigh", + verificationRequired: "Fíorú riachtanach!", + verified: "Fíoraithe", + verifying: "Fíorú ar siúl...", + waitAlert: "Fíorú ar siúl... fan go fóill.", + cancel: "Cealaigh", + enterCodeFromImage: "Chun dul ar aghaidh, le do thoil cuir isteach an cód ón íomhá thíos." +}; +globalThis.$altcha.i18n.set("ga", i18n$G); +const i18n$F = { + ariaLinkLabel: "Altcha (službena web stranica)", + enterCode: "Unesite kod", + enterCodeAria: "Unesite kod koji čujete. Pritisnite razmaknicu za reprodukciju zvuka.", + error: "Provjera nije uspjela. Molimo pokušajte kasnije.", + expired: "Provjera je istekla. Molimo pokušajte ponovo.", + footer: 'Zaštićeno od strane ALTCHA', + getAudioChallenge: "Audio provjera", + label: "Ja nisam robot", + loading: "Učitavanje...", + reload: "Ponovno učitaj", + verify: "Provjeri", + verificationRequired: "Potrebna je provjera!", + verified: "Provjereno", + verifying: "Provjeravanje...", + waitAlert: "Provjera je u tijeku... molimo pričekajte.", + cancel: "Odustani", + enterCodeFromImage: "Za nastavak molimo unesite kod sa slike ispod." +}; +globalThis.$altcha.i18n.set("hr", i18n$F); +const i18n$E = { + ariaLinkLabel: "Altcha (hivatalos weboldal)", + enterCode: "Írja be a kódot", + enterCodeAria: "Írja be a hallott kódot. Nyomja meg a Szóköz billentyűt a hang lejátszásához.", + error: "A hitelesítés nem sikerült. Próbáld meg később újra.", + expired: "A hitelesítés lejárt. Próbáld újra.", + footer: 'Védve a következő által: ALTCHA', + getAudioChallenge: "Hangalapú kihívás kérése", + label: "Nem vagyok robot", + loading: "Betöltés...", + reload: "Újratöltés", + verify: "Ellenőrzés", + verificationRequired: "Ellenőrzés szükséges!", + verified: "Ellenőrizve", + verifying: "Ellenőrzés folyamatban...", + waitAlert: "Ellenőrzés folyamatban... kérlek várj.", + cancel: "Mégse", + enterCodeFromImage: "A folytatáshoz, kérjük, adja meg az alábbi kép kódját." +}; +globalThis.$altcha.i18n.set("hu", i18n$E); +const i18n$D = { + ariaLinkLabel: "Altcha (opinber vefsíða)", + enterCode: "Sláðu inn kóða", + enterCodeAria: "Sláðu inn kóðann sem þú heyrir. Ýttu á Space til að spila hljóðið.", + error: "Staðfesting mistókst. Reyndu aftur síðar.", + expired: "Staðfesting er útrunnin. Reyndu aftur.", + footer: 'Verndað af ALTCHA', + getAudioChallenge: "Fá hljóðáskorun", + label: "Ég er ekki robot", + loading: "Hleður...", + reload: "Hleð aftur", + verify: "Staðfesta", + verificationRequired: "Staðfesting er nauðsynleg!", + verified: "Staðfest", + verifying: "Að staðfesta...", + waitAlert: "Að staðfesta... vinsamlegast bíða.", + cancel: "Hætta við", + enterCodeFromImage: "Til að halda áfram, vinsamlegast sláðu inn kóðann af myndinni hér að neðan." +}; +globalThis.$altcha.i18n.set("is", i18n$D); +const i18n$C = { + ariaLinkLabel: "Altcha (sito ufficiale)", + enterCode: "Inserisci il codice", + enterCodeAria: "Inserisci il codice che senti. Premi Spazio per riprodurre l'audio.", + error: "Verifica fallita. Riprova più tardi.", + expired: "Verifica scaduta. Riprova.", + footer: 'Protetto da ALTCHA', + getAudioChallenge: "Ottieni una sfida audio", + label: "Non sono un robot", + loading: "Caricamento...", + reload: "Ricarica", + verify: "Verifica", + verificationRequired: "Verifica richiesta!", + verified: "Verificato", + verifying: "Verifica in corso...", + waitAlert: "Verifica in corso... attendere.", + cancel: "Annulla", + enterCodeFromImage: "Per procedere, inserisci il codice dall'immagine sottostante." +}; +globalThis.$altcha.i18n.set("it", i18n$C); +const i18n$B = { + ariaLinkLabel: "Altcha (oficiali svetainė)", + enterCode: "Įveskite kodą", + enterCodeAria: "Įveskite girdimą kodą. Paspauskite tarpo klavišą, kad grotumėte garso įrašą.", + error: "Patvirtinimas nepavyko. Bandykite vėliau.", + expired: "Patvirtinimo laikas baigėsi. Bandykite dar kartą.", + footer: 'Apsaugota ALTCHA', + getAudioChallenge: "Gauti garso užduotį", + label: "Aš nesu robotas", + loading: "Įkeliama...", + reload: "Įkelti iš naujo", + verify: "Patvirtinti", + verificationRequired: "Reikalingas patvirtinimas!", + verified: "Patvirtinta", + verifying: "Tikrinama...", + waitAlert: "Tikrinama... prašome palaukti.", + cancel: "Atšaukti", + enterCodeFromImage: "Norėdami tęsti, įveskite kodą iš paveikslėlio žemiau." +}; +globalThis.$altcha.i18n.set("lt", i18n$B); +const i18n$A = { + ariaLinkLabel: "Altcha (oficiālā tīmekļa vietne)", + enterCode: "Ievadiet kodu", + enterCodeAria: "Ievadiet dzirdamo kodu. Nospiediet atstarpes taustiņu, lai atskaņotu audio.", + error: "Verifikācija neizdevās. Mēģiniet vēlāk vēlreiz.", + expired: "Verifikācijas laiks ir beidzies. Mēģiniet vēlreiz.", + footer: 'Aizsargāts ar ALTCHA', + getAudioChallenge: "Saņemt audio izaicinājumu", + label: "Es neesmu robots", + loading: "Notiek ielāde...", + reload: "Pārlādēt", + verify: "Verificēt", + verificationRequired: "Nepieciešama verifikācija!", + verified: "Verificēts", + verifying: "Notiek verifikācija...", + waitAlert: "Notiek verifikācija... lūdzu, uzgaidiet.", + cancel: "Atcelt", + enterCodeFromImage: "Lai turpinātu, lūdzu, ievadiet zemāk redzamo attēlu kodu." +}; +globalThis.$altcha.i18n.set("lv", i18n$A); +const i18n$z = { + ariaLinkLabel: "Altcha (sit uffiċjali)", + enterCode: "Idħol il-kodiċi", + enterCodeAria: "Idħol il-kodiċi li tisma'. Agħfas Spazju biex tindaqq l-awdjo.", + error: "Il-verifika falliet. Erġa’ pprova aktar tard.", + expired: "Il-verifika skadiet. Erġa’ pprova.", + footer: 'Protett minn ALTCHA', + getAudioChallenge: "Ikseb sfida bl-awdjo", + label: "M’inix robot", + loading: "Qed jitgħabba...", + reload: "Ittella’ mill-ġdid", + verify: "Ivverifika", + verificationRequired: "Verifika meħtieġa!", + verified: "Ivverifikat", + verifying: "Verifika għaddejja...", + waitAlert: "Verifika għaddejja... stenna ftit.", + cancel: "Ikkanċella", + enterCodeFromImage: "Biex tipproċedi, jekk jogħġbok daħħal il-kodiċi mill-immaġni hawn taħt." +}; +globalThis.$altcha.i18n.set("mt", i18n$z); +const i18n$y = { + ariaLinkLabel: "Altcha (offisiell nettside)", + enterCode: "Skriv inn kode", + enterCodeAria: "Skriv inn koden du hører. Trykk på Space for å spille av lyden.", + error: "Verifisering mislyktes. Prøv igjen senere.", + expired: "Verifiseringen utløp. Prøv igjen.", + footer: 'Beskyttet av ALTCHA', + getAudioChallenge: "Få en lydutfordring", + label: "Jeg er ikke en robot", + loading: "Laster...", + reload: "Last på nytt", + verify: "Verifiser", + verificationRequired: "Verifisering kreves!", + verified: "Verifisert", + verifying: "Verifiserer...", + waitAlert: "Verifiserer... vennligst vent.", + cancel: "Avbryt", + enterCodeFromImage: "For å fortsette, vennligst skriv inn koden fra bildet nedenfor." +}; +globalThis.$altcha.i18n.set("nb", i18n$y); +const i18n$x = { + ariaLinkLabel: "Altcha (officiële website)", + enterCode: "Voer code in", + enterCodeAria: "Voer de code in die je hoort. Druk op Spatie om de audio af te spelen.", + error: "Verificatie mislukt. Probeer het later opnieuw.", + expired: "Verificatie verlopen. Probeer het opnieuw.", + footer: 'Beschermd door ALTCHA', + getAudioChallenge: "Audio-uitdaging ontvangen", + label: "Ik ben geen robot", + loading: "Laden...", + reload: "Herladen", + verify: "Verifiëren", + verificationRequired: "Verificatie vereist!", + verified: "Geverifieerd", + verifying: "Bezig met verifiëren...", + waitAlert: "Bezig met verifiëren... even geduld a.u.b.", + cancel: "Annuleren", + enterCodeFromImage: "Om door te gaan, voert u de code uit de onderstaande afbeelding in." +}; +globalThis.$altcha.i18n.set("nl", i18n$x); +const i18n$w = { + ariaLinkLabel: "Altcha (oficjalna strona internetowa)", + enterCode: "Wprowadź kod", + enterCodeAria: "Wpisz kod, który słyszysz. Naciśnij Spację, aby odtworzyć dźwięk.", + error: "Weryfikacja nie powiodła się. Spróbuj ponownie później.", + expired: "Weryfikacja wygasła. Spróbuj ponownie.", + footer: 'Chronione przez ALTCHA', + getAudioChallenge: "Pobierz zadanie dźwiękowe", + label: "Nie jestem robotem", + loading: "Ładowanie...", + reload: "Odśwież", + verify: "Zweryfikuj", + verificationRequired: "Wymagana weryfikacja!", + verified: "Zweryfikowano", + verifying: "Weryfikacja...", + waitAlert: "Trwa weryfikacja... proszę czekać.", + cancel: "Anuluj", + enterCodeFromImage: "Aby kontynuować, wprowadź kod z poniższego obrazka." +}; +globalThis.$altcha.i18n.set("pl", i18n$w); +const i18n$v = { + ariaLinkLabel: "Altcha (site oficial)", + enterCode: "Introduza o código", + enterCodeAria: "Introduza o código que ouve. Prima Espaço para reproduzir o áudio.", + error: "A verificação falhou. Por favor, tente novamente mais tarde.", + expired: "Verificação expirada. Por favor, tente novamente.", + footer: 'Protegido por ALTCHA', + getAudioChallenge: "Obter desafio de áudio", + label: "Não sou um robô", + loading: "A carregar...", + reload: "Recarregar", + verify: "Verificar", + verificationRequired: "Verificação necessária!", + verified: "Verificado", + verifying: "A verificar...", + waitAlert: "A verificar... por favor aguarde.", + cancel: "Cancelar", + enterCodeFromImage: "Para prosseguir, introduza o código da imagem abaixo." +}; +globalThis.$altcha.i18n.set("pt-pt", i18n$v); +const i18n$u = { + ariaLinkLabel: "Altcha (site oficial)", + enterCode: "Digite o código", + enterCodeAria: "Digite o código que você ouve. Pressione Espaço para reproduzir o áudio.", + error: "Falha na verificação. Por favor, tente novamente mais tarde.", + expired: "Verificação expirada. Por favor, tente novamente.", + footer: 'Protegido por ALTCHA', + getAudioChallenge: "Obter desafio de áudio", + label: "Eu não sou um robô", + loading: "Carregando...", + reload: "Recarregar", + verify: "Verificar", + verificationRequired: "Verificação necessária!", + verified: "Verificado", + verifying: "Verificando...", + waitAlert: "Verificando... por favor aguarde.", + cancel: "Cancelar", + enterCodeFromImage: "Para prosseguir, digite o código da imagem abaixo." +}; +globalThis.$altcha.i18n.set("pt-br", i18n$u); +const i18n$t = { + ariaLinkLabel: "Altcha (site oficial)", + enterCode: "Introduceți codul", + enterCodeAria: "Introduceți codul pe care îl auziți. Apăsați Spațiu pentru a reda audio.", + error: "Verificarea a eșuat. Încearcă din nou mai târziu.", + expired: "Verificarea a expirat. Încearcă din nou.", + footer: 'Protejat de ALTCHA', + getAudioChallenge: "Obține o provocare audio", + label: "Nu sunt un robot", + loading: "Se încarcă...", + reload: "Reîncarcă", + verify: "Verifică", + verificationRequired: "Verificare necesară!", + verified: "Verificat", + verifying: "Se verifică...", + waitAlert: "Se verifică... te rugăm să aștepți.", + cancel: "Anulare", + enterCodeFromImage: "Pentru a continua, vă rugăm să introduceți codul din imaginea de mai jos." +}; +globalThis.$altcha.i18n.set("ro", i18n$t); +const i18n$s = { + ariaLinkLabel: "Altcha (официальный сайт)", + enterCode: "Введите код", + enterCodeAria: "Введите код, который слышите. Нажмите пробел для воспроизведения аудио.", + error: "Ошибка верификации. Попробуйте позже.", + expired: "Срок действия верификации истек. Попробуйте снова.", + footer: 'Защищено ALTCHA', + getAudioChallenge: "Получить аудио задачу", + label: "Я не робот", + loading: "Загрузка...", + reload: "Перезагрузить", + verify: "Проверить", + verificationRequired: "Требуется проверка!", + verified: "Проверено", + verifying: "Идет проверка...", + waitAlert: "Идет проверка... Пожалуйста, подождите.", + cancel: "Отмена", + enterCodeFromImage: "Чтобы продолжить, пожалуйста, введите код с изображения ниже." +}; +globalThis.$altcha.i18n.set("ru", i18n$s); +const i18n$r = { + ariaLinkLabel: "Altcha (oficiálna webová stránka)", + enterCode: "Zadajte kód", + enterCodeAria: "Zadajte kód, ktorý počujete. Stlačením medzerníka prehráte zvuk.", + error: "Verifikácia zlyhala. Skúste to znova neskôr.", + expired: "Verifikácia vypršala. Skúste to znova.", + footer: 'Chránené ALTCHA', + getAudioChallenge: "Získať audio výzvu", + label: "Nie som robot", + loading: "Načítava sa...", + reload: "Obnoviť", + verify: "Verifikovať", + verificationRequired: "Vyžaduje sa overenie!", + verified: "Verifikované", + verifying: "Prebieha verifikácia...", + waitAlert: "Prebieha verifikácia... prosím čakajte.", + cancel: "Zrušiť", + enterCodeFromImage: "Na pokračovanie, prosím, zadajte kód z obrázka nižšie." +}; +globalThis.$altcha.i18n.set("sk", i18n$r); +const i18n$q = { + ariaLinkLabel: "Altcha (uradna spletna stran)", + enterCode: "Vnesite kodo", + enterCodeAria: "Vnesite kodo, ki jo slišite. Pritisnite preslednico za predvajanje zvoka.", + error: "Preverjanje ni uspelo. Poskusite znova kasneje.", + expired: "Preverjanje je poteklo. Poskusite znova.", + footer: 'Zaščiteno z ALTCHA', + getAudioChallenge: "Pridobite zvočni izziv", + label: "Nisem robot", + loading: "Nalagam...", + reload: "Ponovno naloži", + verify: "Preveri", + verificationRequired: "Potrebna je preveritev!", + verified: "Preverjeno", + verifying: "Preverjanje...", + waitAlert: "Preverjanje... prosim počakajte.", + cancel: "Preklic", + enterCodeFromImage: "Za nadaljevanje, prosimo, vnesite kodo s slike spodaj." +}; +globalThis.$altcha.i18n.set("sl", i18n$q); +const i18n$p = { + ariaLinkLabel: "Altcha (faqja zyrtare)", + enterCode: "Fut kodin", + enterCodeAria: "Fut kodin që dëgjon. Shtypni Hapësirë për të luajtur audio.", + error: "Verifikimi dështoi. Provoni përsëri më vonë.", + expired: "Verifikimi ka skaduar. Provoni përsëri.", + footer: 'I mbrojtur nga ALTCHA', + getAudioChallenge: "Merr një sfidë audio", + label: "Unë nuk jam një robot", + loading: "Duke u ngarkuar...", + reload: "Ringarko", + verify: "Verifiko", + verificationRequired: "Kërkohet verifikimi!", + verified: "I verifikuar", + verifying: "Duke verifikuar...", + waitAlert: "Duke verifikuar... ju lutem prisni.", + cancel: "Anuloje", + enterCodeFromImage: "Për të vazhduar, ju lutemi fusni kodin nga imazhi më poshtë." +}; +globalThis.$altcha.i18n.set("sq", i18n$p); +const i18n$o = { + ariaLinkLabel: "Altcha (zvanična web stranica)", + enterCode: "Unesite kod", + enterCodeAria: "Unesite kod koji čujete. Pritisnite Space da biste pustili zvuk.", + error: "Verifikacija nije uspela. Pokušajte ponovo kasnije.", + expired: "Verifikacija je istekla. Pokušajte ponovo.", + footer: 'Zaštićeno od strane ALTCHA', + getAudioChallenge: "Dohvatite audio izazov", + label: "Nisam robot", + loading: "Učitavanje...", + reload: "Ponovo učitaj", + verify: "Verifikuj", + verificationRequired: "Verifikacija je obavezna!", + verified: "Verifikovano", + verifying: "Verifikacija u toku...", + waitAlert: "Verifikacija u toku... molimo vas da sačekate.", + cancel: "Откажи", + enterCodeFromImage: "Да бисте наставили, унесите код са слике испод." +}; +globalThis.$altcha.i18n.set("sr", i18n$o); +const i18n$n = { + ariaLinkLabel: "Altcha (officiell webbplats)", + enterCode: "Ange kod", + enterCodeAria: "Ange koden du hör. Tryck på mellanslag för att spela upp ljudet.", + error: "Verifiering misslyckades. Försök igen senare.", + expired: "Verifieringen har gått ut. Försök igen.", + footer: 'Skyddad av ALTCHA', + getAudioChallenge: "Få ljudutmaning", + label: "Jag är inte en robot", + loading: "Laddar...", + reload: "Ladda om", + verify: "Verifiera", + verificationRequired: "Verifiering krävs!", + verified: "Verifierad", + verifying: "Verifierar...", + waitAlert: "Verifierar... vänligen vänta.", + cancel: "Avbryt", + enterCodeFromImage: "För att fortsätta, ange koden från bilden nedan." +}; +globalThis.$altcha.i18n.set("sv", i18n$n); +const i18n$m = { + ariaLinkLabel: "Altcha (resmi web sitesi)", + enterCode: "Kodu girin", + enterCodeAria: "Duyduğunuz kodu girin. Ses dosyasını oynatmak için Boşluk tuşuna basın.", + error: "Doğrulama başarısız oldu. Lütfen daha sonra tekrar deneyin.", + expired: "Doğrulama süresi doldu. Lütfen tekrar deneyin.", + footer: 'ALTCHA tarafından korunuyor ALTCHA', + getAudioChallenge: "Sesli doğrulama al", + label: "Ben robot değilim", + loading: "Yükleniyor...", + reload: "Yeniden yükle", + verify: "Doğrula", + verificationRequired: "Doğrulama gerekli!", + verified: "Doğrulandı", + verifying: "Doğrulama yapılıyor...", + waitAlert: "Doğrulama yapılıyor... lütfen bekleyin.", + cancel: "İptal", + enterCodeFromImage: "Devam etmek için lütfen aşağıdaki resimdeki kodu girin." +}; +globalThis.$altcha.i18n.set("tr", i18n$m); +const i18n$l = { + ariaLinkLabel: "Altcha (офіційний сайт)", + enterCode: "Введіть код", + enterCodeAria: "Введіть код, який ви чуєте. Натисніть пробіл, щоб відтворити аудіо.", + error: "Перевірка не вдалася. Спробуйте пізніше.", + expired: "Перевірка прострочена. Спробуйте знову.", + footer: 'Захищено ALTCHA', + getAudioChallenge: "Отримати аудіо-челлендж", + label: "Я не робот", + loading: "Завантаження...", + reload: "Перезавантажити", + verify: "Перевірити", + verificationRequired: "Потрібна перевірка!", + verified: "Перевірено", + verifying: "Перевіряється...", + waitAlert: "Перевірка... будь ласка, зачекайте.", + cancel: "Скасувати", + enterCodeFromImage: "Щоб продовжити, введіть код із зображення нижче." +}; +globalThis.$altcha.i18n.set("uk", i18n$l); +const i18n$k = { + ariaLinkLabel: "Altcha (amptelike webwerf)", + enterCode: "Voer kode in", + enterCodeAria: "Voer die kode in wat jy hoor. Druk Spasie om die klank af te speel.", + error: "Verifikasie het misluk. Probeer later weer.", + expired: "Verifikasie het verval. Probeer weer.", + footer: 'Beskerm deur ALTCHA', + getAudioChallenge: "Kry 'n klankuitdaging", + label: "Ek is nie 'n robot nie", + loading: "Laai...", + reload: "Laai weer", + verify: "Verifieer", + verificationRequired: "Verifikasie is vereis!", + verified: "Geverifieer", + verifying: "Verifieer...", + waitAlert: "Verifieer... wag asseblief.", + cancel: "Kanselleer", + enterCodeFromImage: "Om voort te gaan, voer asseblief die kode vanaf die onderstaande prentjie in." +}; +globalThis.$altcha.i18n.set("af", i18n$k); +const i18n$j = { + ariaLinkLabel: "Altcha (ዋናው ድህረ ገጽ)", + enterCode: "ኮድ አስገባ", + enterCodeAria: "የሚሰማዎትን ኮድ ያስገቡ። ድምጽ ለመጫወት Space ን ይጫኑ።", + error: "ማረጋገጫ አልተሳካም። በኋላ ላይ እንደገና ይሞክሩ።", + expired: "ማረጋገጫው ጊዜው አልፏል። እንደገና ይሞክሩ።", + footer: 'በ ALTCHA የተጠበቀ', + getAudioChallenge: "የድምጽ ፈተና ያግኙ", + label: "እኔ ሮቦት አይደለሁም", + loading: "በመጫን ላይ...", + reload: "እንደገና ጫን", + verify: "አረጋግጥ", + verificationRequired: "ማረጋገጫ ያስፈልጋል!", + verified: "ተረጋግጧል", + verifying: "በማረጋገጥ ላይ...", + waitAlert: "በማረጋገጥ ላይ... እባክዎ ይጠብቁ።", + cancel: "ይቅር", + enterCodeFromImage: "ለመቀጠል፣ እባክዎን ከታች ካለው ምስል ኮዱን ያስገቡ።" +}; +globalThis.$altcha.i18n.set("am", i18n$j); +const i18n$i = { + ariaLinkLabel: "Altcha (tovuti rasmi)", + enterCode: "Weka nambari", + enterCodeAria: "Weka nambari unayosikia. Bonyeza Space kucheza sauti.", + error: "Uthibitishaji umeshindwa. Jaribu tena baadaye.", + expired: "Uthibitishaji umeisha. Jaribu tena.", + footer: 'Imealindwa na ALTCHA', + getAudioChallenge: "Pata changamoto ya sauti", + label: "Mimi sio roboti", + loading: "Inapakia...", + reload: "Pakia tena", + verify: "Thibitisha", + verificationRequired: "Uthibitishaji unahitajika!", + verified: "Imethibitishwa", + verifying: "Inathibitisha...", + waitAlert: "Inathibitisha... tafadhali subiri.", + cancel: "Ghairi", + enterCodeFromImage: "Ili kuendelea, tafadhali weka nambari kutoka kwa picha hapa chini." +}; +globalThis.$altcha.i18n.set("sw", i18n$i); +const i18n$h = { + ariaLinkLabel: "Altcha (oju opo wẹẹbu osise)", + enterCode: "Tẹ koodu sii", + enterCodeAria: "Tẹ koodu ti o ngbọ sii. Tẹ Space lati ṣe ohun orin.", + error: "Ìdájọ́kòwò kò ṣẹ́ṣe. Gbiyanju lẹẹkansi ni ọjọ́ iwájú.", + expired: "Ìdájọ́kòwò ti pari. Gbiyanju lẹẹkansi.", + footer: 'Ti wa ni ààbò nipasẹ ALTCHA', + getAudioChallenge: "Gba ìjàdú ohùn", + label: "Emi kii ṣe ẹrọ", + loading: "Ó ń gbé sílẹ̀...", + reload: "Tún gbé wọlé", + verify: "Ṣàdájọ́", + verificationRequired: "Ìdájọ́kòwò ni a nílò!", + verified: "A ti dájọ́", + verifying: "Ó ń ṣàdájọ́...", + waitAlert: "Ó ń ṣàdájọ́... ẹ jọ̀ọ́ ẹ duro.", + cancel: "Fagbọsẹ", + enterCodeFromImage: "Lati tẹsiwaju, jọwọ tẹ koodu ti o wa lati aworan isalẹ sii." +}; +globalThis.$altcha.i18n.set("yo", i18n$h); +const i18n$g = { + ariaLinkLabel: "Altcha (অফিসিয়াল ওয়েবসাইট)", + enterCode: "কোড লিখুন", + enterCodeAria: "আপনি যে কোড শুনতে পান তা লিখুন। অডিও প্লে করতে স্পেস বাটন টিপুন।", + error: "যাচাইকরণ ব্যর্থ হয়েছে। পরে আবার চেষ্টা করুন।", + expired: "যাচাইকরণ সময়সীমা শেষ হয়েছে। আবার চেষ্টা করুন।", + footer: 'দ্বারা সুরক্ষিত ALTCHA', + getAudioChallenge: "অডিও চ্যালেঞ্জ নিন", + label: "আমি রোবট নই", + loading: "লোড হচ্ছে...", + reload: "পুনরায় লোড করুন", + verify: "যাচাই করুন", + verificationRequired: "যাচাই প্রয়োজন!", + verified: "যাচাই করা হয়েছে", + verifying: "যাচাই করা হচ্ছে...", + waitAlert: "যাচাই করা হচ্ছে... দয়া করে অপেক্ষা করুন।", + cancel: "বাতিল করুন", + enterCodeFromImage: "এগিয়ে যেতে, অনুগ্রহ করে নীচের চিত্র থেকে কোডটি প্রবেশ করান।" +}; +globalThis.$altcha.i18n.set("bn", i18n$g); +const i18n$f = { + ariaLinkLabel: "Altcha (אתר רשמי)", + enterCode: "הזן קוד", + enterCodeAria: "הזן את הקוד שאתה שומע. לחץ על רווח להפעלת השמע.", + error: "האימות נכשל. נסה שוב מאוחר יותר.", + expired: "תוקף האימות פג. נסה שוב.", + footer: 'מוגן על ידי ALTCHA', + getAudioChallenge: "קבל אתגר שמע", + label: "אני לא רובוט", + loading: "טוען...", + reload: "טען מחדש", + verify: "אמת", + verificationRequired: "נדרש אימות!", + verified: "אומת", + verifying: "מאמת...", + waitAlert: "מבצע אימות... אנא המתן.", + cancel: "ביטול", + enterCodeFromImage: "כדי להמשיך, אנא הזן את הקוד מהתמונה למטה." +}; +globalThis.$altcha.i18n.set("he", i18n$f); +const i18n$e = { + ariaLinkLabel: "Altcha (आधिकारिक वेबसाइट)", + enterCode: "कोड दर्ज करेंं", + enterCodeAria: "आप जो कोड सुनते हैं उसे दर्ज करें। ऑडियो चलाने के लिए स्पेस दबाएं।", + error: "सत्यापन विफल। कृपया बाद में फिर से प्रयास करें।", + expired: "सत्यापन समाप्त हो गया है। कृपया पुनः प्रयास करें।", + footer: 'द्वारा संरक्षित ALTCHA', + getAudioChallenge: "ऑडियो चुनौती प्राप्त करें", + label: "मैं रोबोट नहीं हूँ", + loading: "लोड हो रहा है...", + reload: "पुनः लोड करें", + verify: "सत्यापित करें", + verificationRequired: "सत्यापन आवश्यक है!", + verified: "सत्यापित", + verifying: "सत्यापित कर रहे हैं...", + waitAlert: "सत्यापित किया जा रहा है... कृपया प्रतीक्षा करें।", + cancel: "रद्द करें", + enterCodeFromImage: "आगे बढ़ने के लिए, कृपया नीचे दी गई छवि से कोड दर्ज करें।" +}; +globalThis.$altcha.i18n.set("hi", i18n$e); +const i18n$d = { + ariaLinkLabel: "Altcha (situs web resmi)", + enterCode: "Masukkan kode", + enterCodeAria: "Masukkan kode yang Anda dengar. Tekan Spasi untuk memutar audio.", + error: "Verifikasi gagal. Coba lagi nanti.", + expired: "Verifikasi telah kedaluwarsa. Coba lagi.", + footer: 'Dilindungi oleh ALTCHA', + getAudioChallenge: "Dapatkan tantangan audio", + label: "Saya bukan robot", + loading: "Memuat...", + reload: "Muat ulang", + verify: "Verifikasi", + verificationRequired: "Verifikasi diperlukan!", + verified: "Terverifikasi", + verifying: "Memverifikasi...", + waitAlert: "Memverifikasi... harap tunggu.", + cancel: "Batal", + enterCodeFromImage: "Untuk melanjutkan, silakan masukkan kode dari gambar di bawah ini." +}; +globalThis.$altcha.i18n.set("id", i18n$d); +const i18n$c = { + ariaLinkLabel: "Altcha (公式ウェブサイト)", + enterCode: "コードを入力", + enterCodeAria: "聞こえるコードを入力してください。スペースキーを押して音声を再生します。", + error: "認証に失敗しました。後でもう一度試してください。", + expired: "認証が期限切れです。再試行してください。", + footer: '保護されています ALTCHA', + getAudioChallenge: "音声チャレンジを取得", + label: "私はロボットではありません", + loading: "読み込み中...", + reload: "再読み込み", + verify: "確認", + verificationRequired: "認証が必要です!", + verified: "確認済み", + verifying: "確認中...", + waitAlert: "確認中...少々お待ちください。", + cancel: "キャンセル", + enterCodeFromImage: "続行するには、以下の画像からコードを入力してください。" +}; +globalThis.$altcha.i18n.set("ja", i18n$c); +const i18n$b = { + ariaLinkLabel: "Altcha (공식 웹사이트)", + enterCode: "코드 입력", + enterCodeAria: "들리는 코드를 입력하세요. 스페이스 바를 눌러 오디오를 재생합니다.", + error: "인증 실패. 나중에 다시 시도해주세요.", + expired: "인증이 만료되었습니다. 다시 시도해주세요.", + footer: 'ALTCHA에서 보호됨 ALTCHA', + getAudioChallenge: "오디오 챌린지 받기", + label: "저는 로봇이 아닙니다", + loading: "로딩 중...", + reload: "새로 고침", + verify: "확인", + verificationRequired: "인증이 필요합니다!", + verified: "확인됨", + verifying: "확인 중...", + waitAlert: "확인 중... 잠시만 기다려주세요.", + cancel: "취소", + enterCodeFromImage: "계속 진행하려면 아래 이미지에서 코드를 입력하세요." +}; +globalThis.$altcha.i18n.set("ko", i18n$b); +const i18n$a = { + ariaLinkLabel: "Altcha (ресми веб-сайт)", + enterCode: "Кодты енгізіңіз", + enterCodeAria: "Естіген кодыңызды енгізіңіз. Аудионы ойнату үшін Бос орынды басыңыз.", + error: "Тексеру сәтсіз аяқталды. Кейінірек қайталаңыз.", + expired: "Тексеру мерзімі аяқталды. Қайталаңыз.", + footer: 'ALTCHA қорғайды', + getAudioChallenge: "Аудио сынақ алу", + label: "Мен робот емеспін", + loading: "Жүктелуде...", + reload: "Қайта жүктеу", + verify: "Тексеру", + verificationRequired: "Тексеру талап етіледі!", + verified: "Тексерілді", + verifying: "Тексеруде...", + waitAlert: "Тексерілуде... күте тұрыңыз.", + cancel: "Болдыру", + enterCodeFromImage: "Жалғастыру үшін төмендегі суреттегі кодты енгізіңіз." +}; +globalThis.$altcha.i18n.set("kk", i18n$a); +const i18n$9 = { + ariaLinkLabel: "Altcha (अधिकृत संकेतस्थळ)", + enterCode: "कोड टाकाा", + enterCodeAria: "तुम्ही ऐकत असलेला कोड टाका. ऑडिओ प्ले करण्यासाठी स्पेस दाबा.", + error: "पुष्टीकरण अयशस्वी झाले. कृपया नंतर पुन्हा प्रयत्न करा.", + expired: "पुष्टीकरण कालबाह्य झाले आहे. कृपया पुन्हा प्रयत्न करा.", + footer: 'द्वारे संरक्षित ALTCHA', + getAudioChallenge: "ऑडिओ चॅलेंज मिळवा", + label: "मी रोबोट नाही", + loading: "लोड होत आहे...", + reload: "पुन्हा लोड करा", + verify: "पुष्टीकरण करा", + verificationRequired: "पडताळणी आवश्यक आहे!", + verified: "पुष्टीकरण झाले", + verifying: "पुष्टीकरण करत आहे...", + waitAlert: "पुष्टीकरण करत आहे... कृपया थोडा वेळ थांबा.", + cancel: "रद्द करा", + enterCodeFromImage: "पुढे जाण्यासाठी, कृपया खालील प्रतिमेतील कोड प्रविष्ट करा." +}; +globalThis.$altcha.i18n.set("mr", i18n$9); +const i18n$8 = { + ariaLinkLabel: "Altcha (அதிகாரப்பூர்வ வலைத்தளம்)", + enterCode: "குறியீட்டை உள்ளிடவும்", + enterCodeAria: "நீங்கள் கேட்கும் குறியீட்டை உள்ளிடவும். ஆடியோவை இயக்க Space ஐ அழுத்தவும்.", + error: "சரிபார்ப்பு தோல்வி. பிறகு மீண்டும் முயற்சிக்கவும்.", + expired: "சரிபார்ப்பு காலாவதியானது. மீண்டும் முயற்சிக்கவும்.", + footer: 'மூலமாக பாதுகாக்கப்பட்டவை ALTCHA', + getAudioChallenge: "ஒலி சவாலை பெறவும்", + label: "நான் ரோபோடான அல்ல", + loading: "செயலாக்கம்...", + reload: "மீண்டும் புதுப்பிக்கவும்", + verify: "சரிபார்க்கவும்", + verificationRequired: "சரிபார்ப்பு தேவை!", + verified: "சரிபார்க்கப்பட்டது", + verifying: "சரிபார்க்கப்படுகிறது...", + waitAlert: "சரிபார்க்கப்படுகிறது... தயவுசெய்து காத்திருக்கவும்.", + cancel: "ரத்துசெய்", + enterCodeFromImage: "தொடர, கீழே உள்ள படத்திலிருந்து குறியீட்டை உள்ளிடவும்." +}; +globalThis.$altcha.i18n.set("ta", i18n$8); +const i18n$7 = { + ariaLinkLabel: "Altcha (అధికారిక వెబ్‌సైట్)", + enterCode: "కోడ్‌ని నమోదు చేయండి", + enterCodeAria: "మీరు విన్న కోడ్‌ని నమోదు చేయండి. ఆడియో ప్లే చేయడానికి స్పేస్‌ను నొక్కండి.", + error: "చెకింగ్ విఫలమైంది. దయచేసి మరల ప్రయత్నించండి.", + expired: "చెకింగ్ కాలం ముగిసింది. దయచేసి మరల ప్రయత్నించండి.", + footer: 'ఈ సైట్ రక్షించబడింది ALTCHA', + getAudioChallenge: "ఆడియో ఛాలెంజ్ పొందండి", + label: "నేను రోబోట్ కాదు", + loading: "లోడ్ అవుతోంది...", + reload: "మళ్ళీ లోడ్ చేయండి", + verify: "ధ్రువీకరించు", + verificationRequired: "ధృవీకరణ అవసరం!", + verified: "ధ్రువీకరించబడింది", + verifying: "ధ్రువీకరణ జరుగుతుంది...", + waitAlert: "ధ్రువీకరణ జరుగుతుంది... దయచేసి వేచి ఉండండి.", + cancel: "రద్దు చేయండి", + enterCodeFromImage: "కొనసాగడానికి, దయచేసి క్రింది చిత్రంలో ఉన్న కోడ్‌ను నమోదు చేయండి." +}; +globalThis.$altcha.i18n.set("te", i18n$7); +const i18n$6 = { + ariaLinkLabel: "Altcha (เว็บไซต์ทางการ)", + enterCode: "ป้อนรหัส", + enterCodeAria: "ป้อนรหัสที่คุณได้ยิน กด Space เพื่อเล่นเสียง", + error: "การตรวจสอบล้มเหลว กรุณาลองอีกครั้งภายหลัง", + expired: "การตรวจสอบหมดอายุ กรุณาลองใหม่", + footer: 'ป้องกันโดย ALTCHA', + getAudioChallenge: "รับการท้าทายเสียง", + label: "ฉันไม่ใช่บอท", + loading: "กำลังโหลด...", + reload: "โหลดใหม่", + verify: "ตรวจสอบ", + verificationRequired: "จำเป็นต้องตรวจสอบ!", + verified: "ตรวจสอบแล้ว", + verifying: "กำลังตรวจสอบ...", + waitAlert: "กำลังตรวจสอบ... กรุณารอ", + cancel: "ยกเลิก", + enterCodeFromImage: "เพื่อดำเนินการต่อ โปรดป้อนรหัสจากรูปภาพด้านล่าง" +}; +globalThis.$altcha.i18n.set("th", i18n$6); +const i18n$5 = { + ariaLinkLabel: "Altcha (سرکاری ویب سائٹ)", + enterCode: "کوڈ درج کریں", + enterCodeAria: "جو کوڈ آپ سنتے ہیں وہ درج کریں۔ آڈیو چلانے کے لیے اسپیس دبائیں۔", + error: "توثیق ناکام ہو گئی۔ براہ کرم بعد میں دوبارہ کوشش کریں۔", + expired: "توثیق کی مدت ختم ہو گئی ہے۔ براہ کرم دوبارہ کوشش کریں۔", + footer: 'کے ذریعے محفوظ ALTCHA', + getAudioChallenge: "آڈیو چیلنج حاصل کریں", + label: "میں روبوٹ نہیں ہوں", + loading: "لوڈ ہو رہا ہے...", + reload: "دوبارہ لوڈ کریں", + verify: "توثیق کریں", + verificationRequired: "تصدیق ضروری ہے!", + verified: "توثیق شدہ", + verifying: "توثیق ہو رہی ہے...", + waitAlert: "توثیق ہو رہی ہے... براہ کرم انتظار کریں۔", + cancel: "منسوخ کریں", + enterCodeFromImage: "اگلے مرحلے پر جانے کے لیے، براہ کرم نیچے دی گئی تصویر سے کوڈ درج کریں۔" +}; +globalThis.$altcha.i18n.set("ur", i18n$5); +const i18n$4 = { + ariaLinkLabel: "Altcha (rasmiy veb-sayt)", + enterCode: "Kodni kiriting", + enterCodeAria: "Eshitgan kodingizni kiriting. Audioni ijro etish uchun Bo'sh joy tugmasini bosing.", + error: "Tekshiruv muvaffaqiyatsiz tugadi. Keyinroq qayta urinib ko'ring.", + expired: "Tekshiruv muddati tugadi. Qayta urinib ko'ring.", + footer: 'ALTCHA tomonidan himoyalangan', + getAudioChallenge: "Audio sinovni olish", + label: "Men robot emasman", + loading: "Yuklanmoqda...", + reload: "Qayta yuklash", + verify: "Tekshirish", + verificationRequired: "Tekshiruv talab qilinadi!", + verified: "Tekshirildi", + verifying: "Tekshirilmoqda...", + waitAlert: "Tekshirilmoqda... iltimos kuting.", + cancel: "Bekor qilish", + enterCodeFromImage: "Davom etish uchun, iltimos, quyidagi rasmda ko'rsatilgan kodni kiriting." +}; +globalThis.$altcha.i18n.set("uz", i18n$4); +const i18n$3 = { + ariaLinkLabel: "Altcha (trang web chính thức)", + enterCode: "Nhập mã", + enterCodeAria: "Nhập mã bạn nghe được. Nhấn Phím cách để phát âm thanh.", + error: "Xác minh thất bại. Vui lòng thử lại sau.", + expired: "Xác minh đã hết hạn. Vui lòng thử lại.", + footer: 'Được bảo vệ bởi ALTCHA', + getAudioChallenge: "Nhận thử thách âm thanh", + label: "Tôi không phải là robot", + loading: "Đang tải...", + reload: "Tải lại", + verify: "Xác minh", + verificationRequired: "Yêu cầu xác minh!", + verified: "Đã xác minh", + verifying: "Đang xác minh...", + waitAlert: "Đang xác minh... vui lòng chờ.", + cancel: "Hủy bỏ", + enterCodeFromImage: "Để tiếp tục, vui lòng nhập mã từ hình ảnh bên dưới." +}; +globalThis.$altcha.i18n.set("vi", i18n$3); +const i18n$2 = { + ariaLinkLabel: "Altcha (官方网站)", + enterCode: "输入代码", + enterCodeAria: "输入您听到的代码。按空格键播放音频。", + error: "验证失败。稍后再试。", + expired: "验证已过期。请重试。", + footer: '由 ALTCHA 保护', + getAudioChallenge: "获取音频挑战", + label: "我不是机器人", + loading: "加载中...", + reload: "重新加载", + verify: "验证", + verificationRequired: "需要验证!", + verified: "已验证", + verifying: "正在验证...", + waitAlert: "正在验证... 请稍等。", + cancel: "取消", + enterCodeFromImage: "为继续操作,请输入下图中显示的验证码。" +}; +globalThis.$altcha.i18n.set("zh-cn", i18n$2); +const i18n$1 = { + ariaLinkLabel: "Altcha (官方網站)", + cancel: "取消", + enterCode: "輸入代碼", + enterCodeAria: "輸入你聽到嘅代碼。按空格鍵播放音訊。", + enterCodeFromImage: "要繼續,請輸入下面圖片入面嘅代碼。", + error: "驗證失敗。請稍後再試。", + expired: "驗證已過期。請再試一次。", + footer: '由 ALTCHA 提供保護', + getAudioChallenge: "取得音訊驗證", + label: "我唔係機械人", + loading: "載入中...", + reload: "重新載入", + verify: "驗證", + verificationRequired: "需要驗證!", + verified: "已驗證", + verifying: "驗證中...", + waitAlert: "驗證中... 請稍候。" +}; +globalThis.$altcha.i18n.set("zh-hk", i18n$1); +const i18n = { + ariaLinkLabel: "Altcha (官方網站)", + enterCode: "輸入代碼", + enterCodeAria: "輸入您聽到的代碼。按空格鍵播放音頻。", + error: "驗證失敗。稍後再試。", + expired: "驗證已過期。請重試。", + footer: '由 ALTCHA 保護', + getAudioChallenge: "獲取音頻挑戰", + label: "我不是機器人", + loading: "載入中...", + reload: "重新載入", + verify: "驗證", + verificationRequired: "需要驗證!", + verified: "已驗證", + verifying: "正在驗證...", + waitAlert: "正在驗證... 請稍等。", + cancel: "取消", + enterCodeFromImage: "若要繼續,請輸入下方的圖片驗證碼。" +}; +globalThis.$altcha.i18n.set("zh-tw", i18n); diff --git a/frontend/node_modules/altcha/dist/i18n/all.umd.cjs b/frontend/node_modules/altcha/dist/i18n/all.umd.cjs new file mode 100644 index 0000000..6ee764e --- /dev/null +++ b/frontend/node_modules/altcha/dist/i18n/all.umd.cjs @@ -0,0 +1,1333 @@ +(function(factory) { + typeof define === "function" && define.amd ? define(factory) : factory(); +})((function() { + "use strict"; + const noop = () => { + }; + function safe_not_equal(a, b) { + return a != a ? b == b : a !== b || a !== null && typeof a === "object" || typeof a === "function"; + } + function subscribe_to_store(store2, run, invalidate) { + if (store2 == null) { + run(void 0); + return noop; + } + const unsub = untrack( + () => store2.subscribe( + run, + // @ts-expect-error + invalidate + ) + ); + return unsub.unsubscribe ? () => unsub.unsubscribe() : unsub; + } + const subscriber_queue = []; + function writable(value, start = noop) { + let stop = null; + const subscribers = /* @__PURE__ */ new Set(); + function set(new_value) { + if (safe_not_equal(value, new_value)) { + value = new_value; + if (stop) { + const run_queue = !subscriber_queue.length; + for (const subscriber of subscribers) { + subscriber[1](); + subscriber_queue.push(subscriber, value); + } + if (run_queue) { + for (let i = 0; i < subscriber_queue.length; i += 2) { + subscriber_queue[i][0](subscriber_queue[i + 1]); + } + subscriber_queue.length = 0; + } + } + } + } + function update(fn) { + set(fn( + /** @type {T} */ + value + )); + } + function subscribe(run, invalidate = noop) { + const subscriber = [run, invalidate]; + subscribers.add(subscriber); + if (subscribers.size === 1) { + stop = start(set, update) || noop; + } + run( + /** @type {T} */ + value + ); + return () => { + subscribers.delete(subscriber); + if (subscribers.size === 0 && stop) { + stop(); + stop = null; + } + }; + } + return { set, update, subscribe }; + } + function get(store2) { + let value; + subscribe_to_store(store2, (_) => value = _)(); + return value; + } + let untracking = false; + function untrack(fn) { + var previous_untracking = untracking; + try { + untracking = true; + return fn(); + } finally { + untracking = previous_untracking; + } + } + function store(defaultValue) { + const scope = { + get: (name) => { + return get(scope.store)[name]; + }, + set: (name, value) => { + if (typeof name === "string") { + Object.assign(get(scope.store), { + [name]: value + }); + } else { + Object.assign(get(scope.store), name); + } + scope.store.set(get(scope.store)); + }, + store: writable(defaultValue) + }; + return scope; + } + globalThis.$altcha = globalThis.$altcha || { + algorithms: /* @__PURE__ */ new Map(), + defaults: store({}), + i18n: store({}), + instances: /* @__PURE__ */ new Set(), + plugins: /* @__PURE__ */ new Set() + }; + const i18n$Y = { + ariaLinkLabel: "Altcha (الموقع الرسمي)", + enterCode: "أدخل الرمز", + enterCodeAria: "أدخل الرمز الذي تسمعه. اضغط على المسافة لتشغيل الصوت.", + error: "فشل التحقق. حاول مرة أخرى لاحقاً.", + expired: "انتهت صلاحية التحقق. حاول مرة أخرى.", + footer: 'محمي بواسطة ALTCHA', + getAudioChallenge: "احصل على تحدي صوتي", + label: "أنا لست روبوتاً", + loading: "جارٍ التحميل...", + reload: "إعادة تحميل", + verify: "تحقق", + verificationRequired: "مطلوب التحقق!", + verified: "تم التحقق", + verifying: "جارٍ التحقق...", + waitAlert: "جارٍ التحقق... يرجى الانتظار.", + cancel: "إلغاء", + enterCodeFromImage: "للمتابعة، يرجى إدخال الرمز من الصورة أدناه." + }; + globalThis.$altcha.i18n.set("ar", i18n$Y); + const i18n$X = { + ariaLinkLabel: "Altcha (официален уебсайт)", + enterCode: "Въведете код", + enterCodeAria: "Въведете кода, който чувате. Натиснете Space за възпроизвеждане на аудио.", + error: "Проверката неуспешна. Моля, опитайте по-късно.", + expired: "Времето за проверка изтече. Моля, опитайте отново.", + footer: 'Защитено от ALTCHA', + getAudioChallenge: "Аудио проверка", + label: "Аз не съм робот", + loading: "Зареждане...", + reload: "Презареди", + verify: "Провери", + verificationRequired: "Изисква се проверка!", + verified: "Проверено", + verifying: "Проверява се...", + waitAlert: "Проверката е в процес... моля изчакайте.", + cancel: "Отказ", + enterCodeFromImage: "За да продължите, моля, въведете кода от изображението по-долу." + }; + globalThis.$altcha.i18n.set("bg", i18n$X); + const i18n$W = { + ariaLinkLabel: "Altcha (афіцыйны сайт)", + enterCode: "Увядзіце код", + enterCodeAria: "Увядзіце код, які вы чуеце. Націсніце прабел, каб прайграць аўдыё.", + error: "Праверка не прайшла. Паспрабуйце пазней.", + expired: "Тэрмін праверкі скончыўся. Паспрабуйце зноў.", + footer: 'Абаронена ALTCHA', + getAudioChallenge: "Атрымаць аўдыё выклік", + label: "Я не робат", + loading: "Загрузка...", + reload: "Перазагрузіць", + verify: "Праверыць", + verificationRequired: "Патрабуецца праверка!", + verified: "Праверана", + verifying: "Правяраем...", + waitAlert: "Праверка... калі ласка, пачакайце.", + cancel: "Скасаваць", + enterCodeFromImage: "Каб працягнуць, увядзіце код з малюнка ніжэй." + }; + globalThis.$altcha.i18n.set("be", i18n$W); + const i18n$V = { + ariaLinkLabel: "Altcha (službena web stranica)", + enterCode: "Unesite kod", + enterCodeAria: "Unesite kod koji čujete. Pritisnite Space da biste pustili zvuk.", + error: "Verifikacija nije uspjela. Pokušajte ponovo kasnije.", + expired: "Verifikacija je istekla. Pokušajte ponovo.", + footer: 'Zaštićeno od strane ALTCHA', + getAudioChallenge: "Dohvatite audio izazov", + label: "Nisam robot", + loading: "Učitavanje...", + reload: "Ponovno učitaj", + verify: "Verifikuj", + verificationRequired: "Verifikacija je obavezna!", + verified: "Verifikovano", + verifying: "Verifikacija u toku...", + waitAlert: "Verifikacija u toku... molimo vas da sačekate.", + cancel: "Odustani", + enterCodeFromImage: "Za nastavak, molimo unesite kod sa slike ispod." + }; + globalThis.$altcha.i18n.set("bs", i18n$V); + const i18n$U = { + ariaLinkLabel: "Altcha (lloc web oficial)", + enterCode: "Introdueix el codi", + enterCodeAria: "Introdueix el codi que escoltes. Prem Espai per reproduir l’àudio.", + error: "Verificació fallida. Torna-ho a provar més tard.", + expired: "Verificació expirada. Torna-ho a provar.", + footer: 'Protegit per ALTCHA', + getAudioChallenge: "Obtenir un desafiament d’àudio", + label: "No sóc un robot", + loading: "Carregant...", + reload: "Torna a carregar", + verify: "Verificar", + verificationRequired: "Es requereix verificació!", + verified: "Verificat", + verifying: "Verificant...", + waitAlert: "Verificant... si us plau, espera.", + cancel: "Cancel·la", + enterCodeFromImage: "Per continuar, si us plau, introdueix el codi de la imatge següent." + }; + globalThis.$altcha.i18n.set("ca", i18n$U); + const i18n$T = { + ariaLinkLabel: "Altcha (oficiální web)", + enterCode: "Zadejte kód", + enterCodeAria: "Zadejte kód, který slyšíte. Stisknutím mezerníku přehrajete zvuk.", + error: "Ověření selhalo. Zkuste to prosím později.", + expired: "Ověření vypršelo. Zkuste to prosím znovu.", + footer: 'Chráněno pomocí ALTCHA', + getAudioChallenge: "Získat audio výzvu", + label: "Nejsem robot", + loading: "Načítání...", + reload: "Znovu načíst", + verify: "Ověřit", + verificationRequired: "Vyžaduje se ověření!", + verified: "Ověřeno", + verifying: "Ověřování...", + waitAlert: "Probíhá ověření... prosím počkejte.", + cancel: "Zrušit", + enterCodeFromImage: "Pro pokračování zadejte kód z obrázku níže." + }; + globalThis.$altcha.i18n.set("cs", i18n$T); + const i18n$S = { + ariaLinkLabel: "Altcha (officiel hjemmeside)", + enterCode: "Indtast kode", + enterCodeAria: "Indtast den kode, du hører. Tryk på mellemrumstasten for at afspille lyd.", + error: "Verificering mislykkedes. Prøv venligst igen senere.", + expired: "Verificering udløbet. Prøv venligst igen.", + footer: 'Beskyttet af ALTCHA', + getAudioChallenge: "Hent lydudfordring", + label: "Jeg er ikke en robot", + loading: "Indlæser...", + reload: "Genindlæs", + verify: "Verificer", + verificationRequired: "Verificering kræves!", + verified: "Verificeret", + verifying: "Verificerer...", + waitAlert: "Verificerer... vent venligst.", + cancel: "Annuller", + enterCodeFromImage: "For at fortsætte, bedes du indtaste koden fra billedet herunder." + }; + globalThis.$altcha.i18n.set("da", i18n$S); + const i18n$R = { + ariaLinkLabel: "Altcha (offizielle Website)", + enterCode: "Code eingeben", + enterCodeAria: "Geben Sie den Code ein, den Sie hören. Drücken Sie die Leertaste, um die Audio abzuspielen.", + error: "Überprüfung fehlgeschlagen. Bitte versuchen Sie es später erneut.", + expired: "Überprüfung abgelaufen. Bitte versuchen Sie es erneut.", + footer: 'Geschützt durch ALTCHA', + getAudioChallenge: "Audio-Herausforderung anfordern", + label: "Ich bin kein Roboter", + loading: "Lade...", + reload: "Neu laden", + verify: "Überprüfen", + verificationRequired: "Überprüfung erforderlich!", + verified: "Überprüft", + verifying: "Wird überprüft...", + waitAlert: "Überprüfung läuft... bitte warten.", + cancel: "Abbrechen", + enterCodeFromImage: "Um fortzufahren, geben Sie bitte den Code aus dem Bild unten ein." + }; + globalThis.$altcha.i18n.set("de", i18n$R); + const i18n$Q = { + ariaLinkLabel: "Altcha (επίσημος ιστότοπος)", + enterCode: "Εισαγάγετε κωδικό", + enterCodeAria: "Εισαγάγετε τον κωδικό που ακούτε. Πατήστε Space για να παίξετε τον ήχο.", + error: "Η επαλήθευση απέτυχε. Δοκιμάστε ξανά αργότερα.", + expired: "Η επαλήθευση έληξε. Δοκιμάστε ξανά.", + footer: 'Προστατεύεται από το ALTCHA', + getAudioChallenge: "Λήψη ηχητικής δοκιμασίας", + label: "Δεν είμαι ρομπότ", + loading: "Φόρτωση...", + reload: "Επαναφόρτωση", + verify: "Επαλήθευση", + verificationRequired: "Απαιτείται έλεγχος!", + verified: "Επαληθεύτηκε", + verifying: "Γίνεται επαλήθευση...", + waitAlert: "Γίνεται επαλήθευση... παρακαλώ περιμένετε.", + cancel: "Ακύρωση", + enterCodeFromImage: "Για να συνεχίσετε, εισάγετε τον κωδικό από την παρακάτω εικόνα." + }; + globalThis.$altcha.i18n.set("el", i18n$Q); + const i18n$P = { + ariaLinkLabel: "Altcha (sitio web oficial)", + enterCode: "Introduce el código", + enterCodeAria: "Introduce el código que escuchas. Pulsa Espacio para reproducir el audio.", + error: "Falló la verificación. Por favor intente nuevamente más tarde.", + expired: "Verificación expirada. Por favor intente nuevamente.", + footer: 'Protegido por ALTCHA', + getAudioChallenge: "Obtener un desafío de audio", + label: "No soy un robot", + loading: "Cargando...", + reload: "Recargar", + verify: "Verificar", + verificationRequired: "¡Verificación requerida!", + verified: "Verificado", + verifying: "Verificando...", + waitAlert: "Verificando... por favor espere.", + cancel: "Cancelar", + enterCodeFromImage: "Para continuar, introduzca el código de la imagen de abajo." + }; + globalThis.$altcha.i18n.set("es-es", i18n$P); + const i18n$O = { + ariaLinkLabel: "Altcha (sitio web oficial)", + enterCode: "Ingresa el código", + enterCodeAria: "Ingresa el código que escuchas. Presiona Espacio para reproducir el audio.", + error: "Falló la verificación. Por favor vuelve a intentarlo más tarde.", + expired: "La verificación expiró. Por favor inténtalo de nuevo.", + footer: 'Protegido por ALTCHA', + getAudioChallenge: "Obtener un reto de audio", + label: "No soy un robot", + loading: "Cargando...", + reload: "Volver a cargar", + verify: "Verificar", + verificationRequired: "¡Verificación requerida!", + verified: "Verificado", + verifying: "Verificando...", + waitAlert: "Verificando... por favor espera.", + cancel: "Cancelar", + enterCodeFromImage: "Para continuar, ingresa el código de la imagen a continuación." + }; + globalThis.$altcha.i18n.set("es-419", i18n$O); + const i18n$N = { + ariaLinkLabel: "Altcha (ametlik veebisait)", + enterCode: "Sisesta kood", + enterCodeAria: "Sisestage kuuldu kood. Vajutage tühikut, et esitada heli.", + error: "Kinnitamine ebaõnnestus. Proovi hiljem uuesti.", + expired: "Kinnitamine aegus. Proovi uuesti.", + footer: 'Kaitstud ALTCHA poolt', + getAudioChallenge: "Hangi heliülesanne", + label: "Ma ei ole robot", + loading: "Laadimine...", + reload: "Laadi uuesti", + verify: "Kinnita", + verificationRequired: "Kontroll on vajalik!", + verified: "Kinnitatud", + verifying: "Kinnitamine...", + waitAlert: "Kinnitamine... palun oota.", + cancel: "Tühista", + enterCodeFromImage: "Jätkamiseks sisestage alloleval pildil olev kood." + }; + globalThis.$altcha.i18n.set("et", i18n$N); + const i18n$M = { + ariaLinkLabel: "Altcha (webgune ofiziala)", + enterCode: "Sartu kodea", + enterCodeAria: "Sartu entzun duzun kodea. Sakatu Espazioa audioa erreproduzitzeko.", + error: "Egiaztatzeak huts egin du. Saiatu berriro geroago.", + expired: "Egiaztatzea iraungi da. Saiatu berriro.", + footer: 'ALTCHAk babestuta', + getAudioChallenge: "Jaso audio-erronka bat", + label: "Ez naiz robot bat", + loading: "Kargatzen...", + reload: "Birkargatu", + verify: "Egiaztatu", + verificationRequired: "Egiaztatzea beharrezkoa da!", + verified: "Egiaztatuta", + verifying: "Egiaztatzen...", + waitAlert: "Egiaztatzen... itxaron mesedez.", + cancel: "Utzi", + enterCodeFromImage: "Jarraitzeko, idatzi beheko irudiko kodea." + }; + globalThis.$altcha.i18n.set("eu", i18n$M); + const i18n$L = { + ariaLinkLabel: "Altcha (وب‌سایت رسمی)", + enterCode: "کد را وارد کنید", + enterCodeAria: "کدی که می‌شنوید را وارد کنید. برای پخش صدا Space را فشار دهید.", + error: "احراز هویت ناموفق بود. بعداً دوباره تلاش کنید.", + expired: "احراز هویت منقضی شد. دوباره تلاش کنید.", + footer: 'محافظت شده توسط ALTCHA', + getAudioChallenge: "دریافت چالش صوتی", + label: "من ربات نیستم", + loading: "در حال بارگذاری...", + reload: "بارگذاری مجدد", + verify: "تایید", + verificationRequired: "احراز هویت لازم است!", + verified: "تایید شد", + verifying: "در حال تایید...", + waitAlert: "در حال تایید... لطفا منتظر بمانید.", + cancel: "لغو کردن", + enterCodeFromImage: "برای ادامه، لطفاً کد تصویر زیر را وارد کنید." + }; + globalThis.$altcha.i18n.set("fa", i18n$L); + const i18n$K = { + ariaLinkLabel: "Altcha (offiziell Websäit)", + enterCode: "Code aginn", + enterCodeAria: "Gitt de Code an deen dir héiert. Dréckt op d'Weltraumtast fir Audio ofzespillen.", + error: "Verifikatioun ass feelgeschloen. Probéiert méi spéit nach emol.", + expired: "Verifikatioun ofgelaf. Probéiert nach emol.", + footer: 'Geschützt vun ALTCHA', + getAudioChallenge: "Kritt eng Audio-Herausfuerderung", + label: "Ech sinn keen Robot", + loading: "Lueden...", + reload: "Nei lueden", + verify: "Verifizéieren", + verificationRequired: "Verifikatioun néideg!", + verified: "Verifizéiert", + verifying: "Verifizéieren...", + waitAlert: "Verifizéieren... waart wgl.", + cancel: "Ofbriechen", + enterCodeFromImage: "Fir virun ze fueren, gitt wgl. de Code aus dem Bild hei drënner an." + }; + globalThis.$altcha.i18n.set("lb", i18n$K); + const i18n$J = { + ariaLinkLabel: "Altcha (virallinen verkkosivusto)", + enterCode: "Syötä koodi", + enterCodeAria: "Kirjoita kuulemasi koodi. Paina välilyöntiä toistaaksesi äänen.", + error: "Varmennus epäonnistui. Yritä myöhemmin uudelleen.", + expired: "Varmennus vanhentui. Yritä uudelleen.", + footer: 'Suojattu ALTCHA:lla', + getAudioChallenge: "Hae äänitehtävä", + label: "En ole robotti", + loading: "Ladataan...", + reload: "Lataa uudelleen", + verify: "Vahvista", + verificationRequired: "Vahvistus vaaditaan!", + verified: "Vahvistettu", + verifying: "Vahvistetaan...", + waitAlert: "Vahvistetaan... odota hetki.", + cancel: "Peruuta", + enterCodeFromImage: "Jatkaaksesi, syötä alla olevan kuvan koodi." + }; + globalThis.$altcha.i18n.set("fi", i18n$J); + const i18n$I = { + ariaLinkLabel: "Altcha (site officiel)", + enterCode: "Entrez le code", + enterCodeAria: "Entrez le code que vous entendez. Appuyez sur la barre d'espace pour écouter l'audio.", + error: "Échec de la vérification. Réessayez plus tard.", + expired: "La vérification a expiré. Réessayez.", + footer: 'Protégé par ALTCHA', + getAudioChallenge: "Obtenir un défi audio", + label: "Je ne suis pas un robot", + loading: "Chargement...", + reload: "Recharger", + verify: "Vérifier", + verificationRequired: "Vérification requise !", + verified: "Vérifié", + verifying: "Vérification en cours...", + waitAlert: "Vérification en cours... veuillez patienter.", + cancel: "Annuler", + enterCodeFromImage: "Pour continuer, veuillez entrer le code de l'image ci-dessous." + }; + globalThis.$altcha.i18n.set("fr-ca", i18n$I); + const i18n$H = { + ariaLinkLabel: "Altcha (site officiel)", + enterCode: "Entrez le code", + enterCodeAria: "Entrez le code que vous entendez. Appuyez sur Espace pour écouter l'audio.", + error: "Échec de la vérification. Essayez à nouveau plus tard.", + expired: "La vérification a expiré. Essayez à nouveau.", + footer: 'Protégé par ALTCHA', + getAudioChallenge: "Obtenir un défi audio", + label: "Je ne suis pas un robot", + loading: "Chargement...", + reload: "Recharger", + verify: "Vérifier", + verificationRequired: "Vérification requise !", + verified: "Vérifié", + verifying: "Vérification en cours...", + waitAlert: "Vérification en cours... veuillez patienter.", + cancel: "Annuler", + enterCodeFromImage: "Pour continuer, veuillez entrer le code de l'image ci-dessous." + }; + globalThis.$altcha.i18n.set("fr-fr", i18n$H); + const i18n$G = { + ariaLinkLabel: "Altcha (láithreán gréasáin oifigiúil)", + enterCode: "Iontráil cód", + enterCodeAria: "Cuir isteach an cód a chloiseann tú. Brúigh Spás chun an fuaime a sheinm.", + error: "Theip ar an bhfíorú. Bain triail eile as níos déanaí.", + expired: "Tá an fíorú as feidhm. Bain triail eile as.", + footer: 'Cosanta ag ALTCHA', + getAudioChallenge: "Faigh dúshlán fuaime", + label: "Níl mé i mo róbat", + loading: "Á luchtú...", + reload: "Athluchtaigh", + verify: "Fíoraigh", + verificationRequired: "Fíorú riachtanach!", + verified: "Fíoraithe", + verifying: "Fíorú ar siúl...", + waitAlert: "Fíorú ar siúl... fan go fóill.", + cancel: "Cealaigh", + enterCodeFromImage: "Chun dul ar aghaidh, le do thoil cuir isteach an cód ón íomhá thíos." + }; + globalThis.$altcha.i18n.set("ga", i18n$G); + const i18n$F = { + ariaLinkLabel: "Altcha (službena web stranica)", + enterCode: "Unesite kod", + enterCodeAria: "Unesite kod koji čujete. Pritisnite razmaknicu za reprodukciju zvuka.", + error: "Provjera nije uspjela. Molimo pokušajte kasnije.", + expired: "Provjera je istekla. Molimo pokušajte ponovo.", + footer: 'Zaštićeno od strane ALTCHA', + getAudioChallenge: "Audio provjera", + label: "Ja nisam robot", + loading: "Učitavanje...", + reload: "Ponovno učitaj", + verify: "Provjeri", + verificationRequired: "Potrebna je provjera!", + verified: "Provjereno", + verifying: "Provjeravanje...", + waitAlert: "Provjera je u tijeku... molimo pričekajte.", + cancel: "Odustani", + enterCodeFromImage: "Za nastavak molimo unesite kod sa slike ispod." + }; + globalThis.$altcha.i18n.set("hr", i18n$F); + const i18n$E = { + ariaLinkLabel: "Altcha (hivatalos weboldal)", + enterCode: "Írja be a kódot", + enterCodeAria: "Írja be a hallott kódot. Nyomja meg a Szóköz billentyűt a hang lejátszásához.", + error: "A hitelesítés nem sikerült. Próbáld meg később újra.", + expired: "A hitelesítés lejárt. Próbáld újra.", + footer: 'Védve a következő által: ALTCHA', + getAudioChallenge: "Hangalapú kihívás kérése", + label: "Nem vagyok robot", + loading: "Betöltés...", + reload: "Újratöltés", + verify: "Ellenőrzés", + verificationRequired: "Ellenőrzés szükséges!", + verified: "Ellenőrizve", + verifying: "Ellenőrzés folyamatban...", + waitAlert: "Ellenőrzés folyamatban... kérlek várj.", + cancel: "Mégse", + enterCodeFromImage: "A folytatáshoz, kérjük, adja meg az alábbi kép kódját." + }; + globalThis.$altcha.i18n.set("hu", i18n$E); + const i18n$D = { + ariaLinkLabel: "Altcha (opinber vefsíða)", + enterCode: "Sláðu inn kóða", + enterCodeAria: "Sláðu inn kóðann sem þú heyrir. Ýttu á Space til að spila hljóðið.", + error: "Staðfesting mistókst. Reyndu aftur síðar.", + expired: "Staðfesting er útrunnin. Reyndu aftur.", + footer: 'Verndað af ALTCHA', + getAudioChallenge: "Fá hljóðáskorun", + label: "Ég er ekki robot", + loading: "Hleður...", + reload: "Hleð aftur", + verify: "Staðfesta", + verificationRequired: "Staðfesting er nauðsynleg!", + verified: "Staðfest", + verifying: "Að staðfesta...", + waitAlert: "Að staðfesta... vinsamlegast bíða.", + cancel: "Hætta við", + enterCodeFromImage: "Til að halda áfram, vinsamlegast sláðu inn kóðann af myndinni hér að neðan." + }; + globalThis.$altcha.i18n.set("is", i18n$D); + const i18n$C = { + ariaLinkLabel: "Altcha (sito ufficiale)", + enterCode: "Inserisci il codice", + enterCodeAria: "Inserisci il codice che senti. Premi Spazio per riprodurre l'audio.", + error: "Verifica fallita. Riprova più tardi.", + expired: "Verifica scaduta. Riprova.", + footer: 'Protetto da ALTCHA', + getAudioChallenge: "Ottieni una sfida audio", + label: "Non sono un robot", + loading: "Caricamento...", + reload: "Ricarica", + verify: "Verifica", + verificationRequired: "Verifica richiesta!", + verified: "Verificato", + verifying: "Verifica in corso...", + waitAlert: "Verifica in corso... attendere.", + cancel: "Annulla", + enterCodeFromImage: "Per procedere, inserisci il codice dall'immagine sottostante." + }; + globalThis.$altcha.i18n.set("it", i18n$C); + const i18n$B = { + ariaLinkLabel: "Altcha (oficiali svetainė)", + enterCode: "Įveskite kodą", + enterCodeAria: "Įveskite girdimą kodą. Paspauskite tarpo klavišą, kad grotumėte garso įrašą.", + error: "Patvirtinimas nepavyko. Bandykite vėliau.", + expired: "Patvirtinimo laikas baigėsi. Bandykite dar kartą.", + footer: 'Apsaugota ALTCHA', + getAudioChallenge: "Gauti garso užduotį", + label: "Aš nesu robotas", + loading: "Įkeliama...", + reload: "Įkelti iš naujo", + verify: "Patvirtinti", + verificationRequired: "Reikalingas patvirtinimas!", + verified: "Patvirtinta", + verifying: "Tikrinama...", + waitAlert: "Tikrinama... prašome palaukti.", + cancel: "Atšaukti", + enterCodeFromImage: "Norėdami tęsti, įveskite kodą iš paveikslėlio žemiau." + }; + globalThis.$altcha.i18n.set("lt", i18n$B); + const i18n$A = { + ariaLinkLabel: "Altcha (oficiālā tīmekļa vietne)", + enterCode: "Ievadiet kodu", + enterCodeAria: "Ievadiet dzirdamo kodu. Nospiediet atstarpes taustiņu, lai atskaņotu audio.", + error: "Verifikācija neizdevās. Mēģiniet vēlāk vēlreiz.", + expired: "Verifikācijas laiks ir beidzies. Mēģiniet vēlreiz.", + footer: 'Aizsargāts ar ALTCHA', + getAudioChallenge: "Saņemt audio izaicinājumu", + label: "Es neesmu robots", + loading: "Notiek ielāde...", + reload: "Pārlādēt", + verify: "Verificēt", + verificationRequired: "Nepieciešama verifikācija!", + verified: "Verificēts", + verifying: "Notiek verifikācija...", + waitAlert: "Notiek verifikācija... lūdzu, uzgaidiet.", + cancel: "Atcelt", + enterCodeFromImage: "Lai turpinātu, lūdzu, ievadiet zemāk redzamo attēlu kodu." + }; + globalThis.$altcha.i18n.set("lv", i18n$A); + const i18n$z = { + ariaLinkLabel: "Altcha (sit uffiċjali)", + enterCode: "Idħol il-kodiċi", + enterCodeAria: "Idħol il-kodiċi li tisma'. Agħfas Spazju biex tindaqq l-awdjo.", + error: "Il-verifika falliet. Erġa’ pprova aktar tard.", + expired: "Il-verifika skadiet. Erġa’ pprova.", + footer: 'Protett minn ALTCHA', + getAudioChallenge: "Ikseb sfida bl-awdjo", + label: "M’inix robot", + loading: "Qed jitgħabba...", + reload: "Ittella’ mill-ġdid", + verify: "Ivverifika", + verificationRequired: "Verifika meħtieġa!", + verified: "Ivverifikat", + verifying: "Verifika għaddejja...", + waitAlert: "Verifika għaddejja... stenna ftit.", + cancel: "Ikkanċella", + enterCodeFromImage: "Biex tipproċedi, jekk jogħġbok daħħal il-kodiċi mill-immaġni hawn taħt." + }; + globalThis.$altcha.i18n.set("mt", i18n$z); + const i18n$y = { + ariaLinkLabel: "Altcha (offisiell nettside)", + enterCode: "Skriv inn kode", + enterCodeAria: "Skriv inn koden du hører. Trykk på Space for å spille av lyden.", + error: "Verifisering mislyktes. Prøv igjen senere.", + expired: "Verifiseringen utløp. Prøv igjen.", + footer: 'Beskyttet av ALTCHA', + getAudioChallenge: "Få en lydutfordring", + label: "Jeg er ikke en robot", + loading: "Laster...", + reload: "Last på nytt", + verify: "Verifiser", + verificationRequired: "Verifisering kreves!", + verified: "Verifisert", + verifying: "Verifiserer...", + waitAlert: "Verifiserer... vennligst vent.", + cancel: "Avbryt", + enterCodeFromImage: "For å fortsette, vennligst skriv inn koden fra bildet nedenfor." + }; + globalThis.$altcha.i18n.set("nb", i18n$y); + const i18n$x = { + ariaLinkLabel: "Altcha (officiële website)", + enterCode: "Voer code in", + enterCodeAria: "Voer de code in die je hoort. Druk op Spatie om de audio af te spelen.", + error: "Verificatie mislukt. Probeer het later opnieuw.", + expired: "Verificatie verlopen. Probeer het opnieuw.", + footer: 'Beschermd door ALTCHA', + getAudioChallenge: "Audio-uitdaging ontvangen", + label: "Ik ben geen robot", + loading: "Laden...", + reload: "Herladen", + verify: "Verifiëren", + verificationRequired: "Verificatie vereist!", + verified: "Geverifieerd", + verifying: "Bezig met verifiëren...", + waitAlert: "Bezig met verifiëren... even geduld a.u.b.", + cancel: "Annuleren", + enterCodeFromImage: "Om door te gaan, voert u de code uit de onderstaande afbeelding in." + }; + globalThis.$altcha.i18n.set("nl", i18n$x); + const i18n$w = { + ariaLinkLabel: "Altcha (oficjalna strona internetowa)", + enterCode: "Wprowadź kod", + enterCodeAria: "Wpisz kod, który słyszysz. Naciśnij Spację, aby odtworzyć dźwięk.", + error: "Weryfikacja nie powiodła się. Spróbuj ponownie później.", + expired: "Weryfikacja wygasła. Spróbuj ponownie.", + footer: 'Chronione przez ALTCHA', + getAudioChallenge: "Pobierz zadanie dźwiękowe", + label: "Nie jestem robotem", + loading: "Ładowanie...", + reload: "Odśwież", + verify: "Zweryfikuj", + verificationRequired: "Wymagana weryfikacja!", + verified: "Zweryfikowano", + verifying: "Weryfikacja...", + waitAlert: "Trwa weryfikacja... proszę czekać.", + cancel: "Anuluj", + enterCodeFromImage: "Aby kontynuować, wprowadź kod z poniższego obrazka." + }; + globalThis.$altcha.i18n.set("pl", i18n$w); + const i18n$v = { + ariaLinkLabel: "Altcha (site oficial)", + enterCode: "Introduza o código", + enterCodeAria: "Introduza o código que ouve. Prima Espaço para reproduzir o áudio.", + error: "A verificação falhou. Por favor, tente novamente mais tarde.", + expired: "Verificação expirada. Por favor, tente novamente.", + footer: 'Protegido por ALTCHA', + getAudioChallenge: "Obter desafio de áudio", + label: "Não sou um robô", + loading: "A carregar...", + reload: "Recarregar", + verify: "Verificar", + verificationRequired: "Verificação necessária!", + verified: "Verificado", + verifying: "A verificar...", + waitAlert: "A verificar... por favor aguarde.", + cancel: "Cancelar", + enterCodeFromImage: "Para prosseguir, introduza o código da imagem abaixo." + }; + globalThis.$altcha.i18n.set("pt-pt", i18n$v); + const i18n$u = { + ariaLinkLabel: "Altcha (site oficial)", + enterCode: "Digite o código", + enterCodeAria: "Digite o código que você ouve. Pressione Espaço para reproduzir o áudio.", + error: "Falha na verificação. Por favor, tente novamente mais tarde.", + expired: "Verificação expirada. Por favor, tente novamente.", + footer: 'Protegido por ALTCHA', + getAudioChallenge: "Obter desafio de áudio", + label: "Eu não sou um robô", + loading: "Carregando...", + reload: "Recarregar", + verify: "Verificar", + verificationRequired: "Verificação necessária!", + verified: "Verificado", + verifying: "Verificando...", + waitAlert: "Verificando... por favor aguarde.", + cancel: "Cancelar", + enterCodeFromImage: "Para prosseguir, digite o código da imagem abaixo." + }; + globalThis.$altcha.i18n.set("pt-br", i18n$u); + const i18n$t = { + ariaLinkLabel: "Altcha (site oficial)", + enterCode: "Introduceți codul", + enterCodeAria: "Introduceți codul pe care îl auziți. Apăsați Spațiu pentru a reda audio.", + error: "Verificarea a eșuat. Încearcă din nou mai târziu.", + expired: "Verificarea a expirat. Încearcă din nou.", + footer: 'Protejat de ALTCHA', + getAudioChallenge: "Obține o provocare audio", + label: "Nu sunt un robot", + loading: "Se încarcă...", + reload: "Reîncarcă", + verify: "Verifică", + verificationRequired: "Verificare necesară!", + verified: "Verificat", + verifying: "Se verifică...", + waitAlert: "Se verifică... te rugăm să aștepți.", + cancel: "Anulare", + enterCodeFromImage: "Pentru a continua, vă rugăm să introduceți codul din imaginea de mai jos." + }; + globalThis.$altcha.i18n.set("ro", i18n$t); + const i18n$s = { + ariaLinkLabel: "Altcha (официальный сайт)", + enterCode: "Введите код", + enterCodeAria: "Введите код, который слышите. Нажмите пробел для воспроизведения аудио.", + error: "Ошибка верификации. Попробуйте позже.", + expired: "Срок действия верификации истек. Попробуйте снова.", + footer: 'Защищено ALTCHA', + getAudioChallenge: "Получить аудио задачу", + label: "Я не робот", + loading: "Загрузка...", + reload: "Перезагрузить", + verify: "Проверить", + verificationRequired: "Требуется проверка!", + verified: "Проверено", + verifying: "Идет проверка...", + waitAlert: "Идет проверка... Пожалуйста, подождите.", + cancel: "Отмена", + enterCodeFromImage: "Чтобы продолжить, пожалуйста, введите код с изображения ниже." + }; + globalThis.$altcha.i18n.set("ru", i18n$s); + const i18n$r = { + ariaLinkLabel: "Altcha (oficiálna webová stránka)", + enterCode: "Zadajte kód", + enterCodeAria: "Zadajte kód, ktorý počujete. Stlačením medzerníka prehráte zvuk.", + error: "Verifikácia zlyhala. Skúste to znova neskôr.", + expired: "Verifikácia vypršala. Skúste to znova.", + footer: 'Chránené ALTCHA', + getAudioChallenge: "Získať audio výzvu", + label: "Nie som robot", + loading: "Načítava sa...", + reload: "Obnoviť", + verify: "Verifikovať", + verificationRequired: "Vyžaduje sa overenie!", + verified: "Verifikované", + verifying: "Prebieha verifikácia...", + waitAlert: "Prebieha verifikácia... prosím čakajte.", + cancel: "Zrušiť", + enterCodeFromImage: "Na pokračovanie, prosím, zadajte kód z obrázka nižšie." + }; + globalThis.$altcha.i18n.set("sk", i18n$r); + const i18n$q = { + ariaLinkLabel: "Altcha (uradna spletna stran)", + enterCode: "Vnesite kodo", + enterCodeAria: "Vnesite kodo, ki jo slišite. Pritisnite preslednico za predvajanje zvoka.", + error: "Preverjanje ni uspelo. Poskusite znova kasneje.", + expired: "Preverjanje je poteklo. Poskusite znova.", + footer: 'Zaščiteno z ALTCHA', + getAudioChallenge: "Pridobite zvočni izziv", + label: "Nisem robot", + loading: "Nalagam...", + reload: "Ponovno naloži", + verify: "Preveri", + verificationRequired: "Potrebna je preveritev!", + verified: "Preverjeno", + verifying: "Preverjanje...", + waitAlert: "Preverjanje... prosim počakajte.", + cancel: "Preklic", + enterCodeFromImage: "Za nadaljevanje, prosimo, vnesite kodo s slike spodaj." + }; + globalThis.$altcha.i18n.set("sl", i18n$q); + const i18n$p = { + ariaLinkLabel: "Altcha (faqja zyrtare)", + enterCode: "Fut kodin", + enterCodeAria: "Fut kodin që dëgjon. Shtypni Hapësirë për të luajtur audio.", + error: "Verifikimi dështoi. Provoni përsëri më vonë.", + expired: "Verifikimi ka skaduar. Provoni përsëri.", + footer: 'I mbrojtur nga ALTCHA', + getAudioChallenge: "Merr një sfidë audio", + label: "Unë nuk jam një robot", + loading: "Duke u ngarkuar...", + reload: "Ringarko", + verify: "Verifiko", + verificationRequired: "Kërkohet verifikimi!", + verified: "I verifikuar", + verifying: "Duke verifikuar...", + waitAlert: "Duke verifikuar... ju lutem prisni.", + cancel: "Anuloje", + enterCodeFromImage: "Për të vazhduar, ju lutemi fusni kodin nga imazhi më poshtë." + }; + globalThis.$altcha.i18n.set("sq", i18n$p); + const i18n$o = { + ariaLinkLabel: "Altcha (zvanična web stranica)", + enterCode: "Unesite kod", + enterCodeAria: "Unesite kod koji čujete. Pritisnite Space da biste pustili zvuk.", + error: "Verifikacija nije uspela. Pokušajte ponovo kasnije.", + expired: "Verifikacija je istekla. Pokušajte ponovo.", + footer: 'Zaštićeno od strane ALTCHA', + getAudioChallenge: "Dohvatite audio izazov", + label: "Nisam robot", + loading: "Učitavanje...", + reload: "Ponovo učitaj", + verify: "Verifikuj", + verificationRequired: "Verifikacija je obavezna!", + verified: "Verifikovano", + verifying: "Verifikacija u toku...", + waitAlert: "Verifikacija u toku... molimo vas da sačekate.", + cancel: "Откажи", + enterCodeFromImage: "Да бисте наставили, унесите код са слике испод." + }; + globalThis.$altcha.i18n.set("sr", i18n$o); + const i18n$n = { + ariaLinkLabel: "Altcha (officiell webbplats)", + enterCode: "Ange kod", + enterCodeAria: "Ange koden du hör. Tryck på mellanslag för att spela upp ljudet.", + error: "Verifiering misslyckades. Försök igen senare.", + expired: "Verifieringen har gått ut. Försök igen.", + footer: 'Skyddad av ALTCHA', + getAudioChallenge: "Få ljudutmaning", + label: "Jag är inte en robot", + loading: "Laddar...", + reload: "Ladda om", + verify: "Verifiera", + verificationRequired: "Verifiering krävs!", + verified: "Verifierad", + verifying: "Verifierar...", + waitAlert: "Verifierar... vänligen vänta.", + cancel: "Avbryt", + enterCodeFromImage: "För att fortsätta, ange koden från bilden nedan." + }; + globalThis.$altcha.i18n.set("sv", i18n$n); + const i18n$m = { + ariaLinkLabel: "Altcha (resmi web sitesi)", + enterCode: "Kodu girin", + enterCodeAria: "Duyduğunuz kodu girin. Ses dosyasını oynatmak için Boşluk tuşuna basın.", + error: "Doğrulama başarısız oldu. Lütfen daha sonra tekrar deneyin.", + expired: "Doğrulama süresi doldu. Lütfen tekrar deneyin.", + footer: 'ALTCHA tarafından korunuyor ALTCHA', + getAudioChallenge: "Sesli doğrulama al", + label: "Ben robot değilim", + loading: "Yükleniyor...", + reload: "Yeniden yükle", + verify: "Doğrula", + verificationRequired: "Doğrulama gerekli!", + verified: "Doğrulandı", + verifying: "Doğrulama yapılıyor...", + waitAlert: "Doğrulama yapılıyor... lütfen bekleyin.", + cancel: "İptal", + enterCodeFromImage: "Devam etmek için lütfen aşağıdaki resimdeki kodu girin." + }; + globalThis.$altcha.i18n.set("tr", i18n$m); + const i18n$l = { + ariaLinkLabel: "Altcha (офіційний сайт)", + enterCode: "Введіть код", + enterCodeAria: "Введіть код, який ви чуєте. Натисніть пробіл, щоб відтворити аудіо.", + error: "Перевірка не вдалася. Спробуйте пізніше.", + expired: "Перевірка прострочена. Спробуйте знову.", + footer: 'Захищено ALTCHA', + getAudioChallenge: "Отримати аудіо-челлендж", + label: "Я не робот", + loading: "Завантаження...", + reload: "Перезавантажити", + verify: "Перевірити", + verificationRequired: "Потрібна перевірка!", + verified: "Перевірено", + verifying: "Перевіряється...", + waitAlert: "Перевірка... будь ласка, зачекайте.", + cancel: "Скасувати", + enterCodeFromImage: "Щоб продовжити, введіть код із зображення нижче." + }; + globalThis.$altcha.i18n.set("uk", i18n$l); + const i18n$k = { + ariaLinkLabel: "Altcha (amptelike webwerf)", + enterCode: "Voer kode in", + enterCodeAria: "Voer die kode in wat jy hoor. Druk Spasie om die klank af te speel.", + error: "Verifikasie het misluk. Probeer later weer.", + expired: "Verifikasie het verval. Probeer weer.", + footer: 'Beskerm deur ALTCHA', + getAudioChallenge: "Kry 'n klankuitdaging", + label: "Ek is nie 'n robot nie", + loading: "Laai...", + reload: "Laai weer", + verify: "Verifieer", + verificationRequired: "Verifikasie is vereis!", + verified: "Geverifieer", + verifying: "Verifieer...", + waitAlert: "Verifieer... wag asseblief.", + cancel: "Kanselleer", + enterCodeFromImage: "Om voort te gaan, voer asseblief die kode vanaf die onderstaande prentjie in." + }; + globalThis.$altcha.i18n.set("af", i18n$k); + const i18n$j = { + ariaLinkLabel: "Altcha (ዋናው ድህረ ገጽ)", + enterCode: "ኮድ አስገባ", + enterCodeAria: "የሚሰማዎትን ኮድ ያስገቡ። ድምጽ ለመጫወት Space ን ይጫኑ።", + error: "ማረጋገጫ አልተሳካም። በኋላ ላይ እንደገና ይሞክሩ።", + expired: "ማረጋገጫው ጊዜው አልፏል። እንደገና ይሞክሩ።", + footer: 'በ ALTCHA የተጠበቀ', + getAudioChallenge: "የድምጽ ፈተና ያግኙ", + label: "እኔ ሮቦት አይደለሁም", + loading: "በመጫን ላይ...", + reload: "እንደገና ጫን", + verify: "አረጋግጥ", + verificationRequired: "ማረጋገጫ ያስፈልጋል!", + verified: "ተረጋግጧል", + verifying: "በማረጋገጥ ላይ...", + waitAlert: "በማረጋገጥ ላይ... እባክዎ ይጠብቁ።", + cancel: "ይቅር", + enterCodeFromImage: "ለመቀጠል፣ እባክዎን ከታች ካለው ምስል ኮዱን ያስገቡ።" + }; + globalThis.$altcha.i18n.set("am", i18n$j); + const i18n$i = { + ariaLinkLabel: "Altcha (tovuti rasmi)", + enterCode: "Weka nambari", + enterCodeAria: "Weka nambari unayosikia. Bonyeza Space kucheza sauti.", + error: "Uthibitishaji umeshindwa. Jaribu tena baadaye.", + expired: "Uthibitishaji umeisha. Jaribu tena.", + footer: 'Imealindwa na ALTCHA', + getAudioChallenge: "Pata changamoto ya sauti", + label: "Mimi sio roboti", + loading: "Inapakia...", + reload: "Pakia tena", + verify: "Thibitisha", + verificationRequired: "Uthibitishaji unahitajika!", + verified: "Imethibitishwa", + verifying: "Inathibitisha...", + waitAlert: "Inathibitisha... tafadhali subiri.", + cancel: "Ghairi", + enterCodeFromImage: "Ili kuendelea, tafadhali weka nambari kutoka kwa picha hapa chini." + }; + globalThis.$altcha.i18n.set("sw", i18n$i); + const i18n$h = { + ariaLinkLabel: "Altcha (oju opo wẹẹbu osise)", + enterCode: "Tẹ koodu sii", + enterCodeAria: "Tẹ koodu ti o ngbọ sii. Tẹ Space lati ṣe ohun orin.", + error: "Ìdájọ́kòwò kò ṣẹ́ṣe. Gbiyanju lẹẹkansi ni ọjọ́ iwájú.", + expired: "Ìdájọ́kòwò ti pari. Gbiyanju lẹẹkansi.", + footer: 'Ti wa ni ààbò nipasẹ ALTCHA', + getAudioChallenge: "Gba ìjàdú ohùn", + label: "Emi kii ṣe ẹrọ", + loading: "Ó ń gbé sílẹ̀...", + reload: "Tún gbé wọlé", + verify: "Ṣàdájọ́", + verificationRequired: "Ìdájọ́kòwò ni a nílò!", + verified: "A ti dájọ́", + verifying: "Ó ń ṣàdájọ́...", + waitAlert: "Ó ń ṣàdájọ́... ẹ jọ̀ọ́ ẹ duro.", + cancel: "Fagbọsẹ", + enterCodeFromImage: "Lati tẹsiwaju, jọwọ tẹ koodu ti o wa lati aworan isalẹ sii." + }; + globalThis.$altcha.i18n.set("yo", i18n$h); + const i18n$g = { + ariaLinkLabel: "Altcha (অফিসিয়াল ওয়েবসাইট)", + enterCode: "কোড লিখুন", + enterCodeAria: "আপনি যে কোড শুনতে পান তা লিখুন। অডিও প্লে করতে স্পেস বাটন টিপুন।", + error: "যাচাইকরণ ব্যর্থ হয়েছে। পরে আবার চেষ্টা করুন।", + expired: "যাচাইকরণ সময়সীমা শেষ হয়েছে। আবার চেষ্টা করুন।", + footer: 'দ্বারা সুরক্ষিত ALTCHA', + getAudioChallenge: "অডিও চ্যালেঞ্জ নিন", + label: "আমি রোবট নই", + loading: "লোড হচ্ছে...", + reload: "পুনরায় লোড করুন", + verify: "যাচাই করুন", + verificationRequired: "যাচাই প্রয়োজন!", + verified: "যাচাই করা হয়েছে", + verifying: "যাচাই করা হচ্ছে...", + waitAlert: "যাচাই করা হচ্ছে... দয়া করে অপেক্ষা করুন।", + cancel: "বাতিল করুন", + enterCodeFromImage: "এগিয়ে যেতে, অনুগ্রহ করে নীচের চিত্র থেকে কোডটি প্রবেশ করান।" + }; + globalThis.$altcha.i18n.set("bn", i18n$g); + const i18n$f = { + ariaLinkLabel: "Altcha (אתר רשמי)", + enterCode: "הזן קוד", + enterCodeAria: "הזן את הקוד שאתה שומע. לחץ על רווח להפעלת השמע.", + error: "האימות נכשל. נסה שוב מאוחר יותר.", + expired: "תוקף האימות פג. נסה שוב.", + footer: 'מוגן על ידי ALTCHA', + getAudioChallenge: "קבל אתגר שמע", + label: "אני לא רובוט", + loading: "טוען...", + reload: "טען מחדש", + verify: "אמת", + verificationRequired: "נדרש אימות!", + verified: "אומת", + verifying: "מאמת...", + waitAlert: "מבצע אימות... אנא המתן.", + cancel: "ביטול", + enterCodeFromImage: "כדי להמשיך, אנא הזן את הקוד מהתמונה למטה." + }; + globalThis.$altcha.i18n.set("he", i18n$f); + const i18n$e = { + ariaLinkLabel: "Altcha (आधिकारिक वेबसाइट)", + enterCode: "कोड दर्ज करेंं", + enterCodeAria: "आप जो कोड सुनते हैं उसे दर्ज करें। ऑडियो चलाने के लिए स्पेस दबाएं।", + error: "सत्यापन विफल। कृपया बाद में फिर से प्रयास करें।", + expired: "सत्यापन समाप्त हो गया है। कृपया पुनः प्रयास करें।", + footer: 'द्वारा संरक्षित ALTCHA', + getAudioChallenge: "ऑडियो चुनौती प्राप्त करें", + label: "मैं रोबोट नहीं हूँ", + loading: "लोड हो रहा है...", + reload: "पुनः लोड करें", + verify: "सत्यापित करें", + verificationRequired: "सत्यापन आवश्यक है!", + verified: "सत्यापित", + verifying: "सत्यापित कर रहे हैं...", + waitAlert: "सत्यापित किया जा रहा है... कृपया प्रतीक्षा करें।", + cancel: "रद्द करें", + enterCodeFromImage: "आगे बढ़ने के लिए, कृपया नीचे दी गई छवि से कोड दर्ज करें।" + }; + globalThis.$altcha.i18n.set("hi", i18n$e); + const i18n$d = { + ariaLinkLabel: "Altcha (situs web resmi)", + enterCode: "Masukkan kode", + enterCodeAria: "Masukkan kode yang Anda dengar. Tekan Spasi untuk memutar audio.", + error: "Verifikasi gagal. Coba lagi nanti.", + expired: "Verifikasi telah kedaluwarsa. Coba lagi.", + footer: 'Dilindungi oleh ALTCHA', + getAudioChallenge: "Dapatkan tantangan audio", + label: "Saya bukan robot", + loading: "Memuat...", + reload: "Muat ulang", + verify: "Verifikasi", + verificationRequired: "Verifikasi diperlukan!", + verified: "Terverifikasi", + verifying: "Memverifikasi...", + waitAlert: "Memverifikasi... harap tunggu.", + cancel: "Batal", + enterCodeFromImage: "Untuk melanjutkan, silakan masukkan kode dari gambar di bawah ini." + }; + globalThis.$altcha.i18n.set("id", i18n$d); + const i18n$c = { + ariaLinkLabel: "Altcha (公式ウェブサイト)", + enterCode: "コードを入力", + enterCodeAria: "聞こえるコードを入力してください。スペースキーを押して音声を再生します。", + error: "認証に失敗しました。後でもう一度試してください。", + expired: "認証が期限切れです。再試行してください。", + footer: '保護されています ALTCHA', + getAudioChallenge: "音声チャレンジを取得", + label: "私はロボットではありません", + loading: "読み込み中...", + reload: "再読み込み", + verify: "確認", + verificationRequired: "認証が必要です!", + verified: "確認済み", + verifying: "確認中...", + waitAlert: "確認中...少々お待ちください。", + cancel: "キャンセル", + enterCodeFromImage: "続行するには、以下の画像からコードを入力してください。" + }; + globalThis.$altcha.i18n.set("ja", i18n$c); + const i18n$b = { + ariaLinkLabel: "Altcha (공식 웹사이트)", + enterCode: "코드 입력", + enterCodeAria: "들리는 코드를 입력하세요. 스페이스 바를 눌러 오디오를 재생합니다.", + error: "인증 실패. 나중에 다시 시도해주세요.", + expired: "인증이 만료되었습니다. 다시 시도해주세요.", + footer: 'ALTCHA에서 보호됨 ALTCHA', + getAudioChallenge: "오디오 챌린지 받기", + label: "저는 로봇이 아닙니다", + loading: "로딩 중...", + reload: "새로 고침", + verify: "확인", + verificationRequired: "인증이 필요합니다!", + verified: "확인됨", + verifying: "확인 중...", + waitAlert: "확인 중... 잠시만 기다려주세요.", + cancel: "취소", + enterCodeFromImage: "계속 진행하려면 아래 이미지에서 코드를 입력하세요." + }; + globalThis.$altcha.i18n.set("ko", i18n$b); + const i18n$a = { + ariaLinkLabel: "Altcha (ресми веб-сайт)", + enterCode: "Кодты енгізіңіз", + enterCodeAria: "Естіген кодыңызды енгізіңіз. Аудионы ойнату үшін Бос орынды басыңыз.", + error: "Тексеру сәтсіз аяқталды. Кейінірек қайталаңыз.", + expired: "Тексеру мерзімі аяқталды. Қайталаңыз.", + footer: 'ALTCHA қорғайды', + getAudioChallenge: "Аудио сынақ алу", + label: "Мен робот емеспін", + loading: "Жүктелуде...", + reload: "Қайта жүктеу", + verify: "Тексеру", + verificationRequired: "Тексеру талап етіледі!", + verified: "Тексерілді", + verifying: "Тексеруде...", + waitAlert: "Тексерілуде... күте тұрыңыз.", + cancel: "Болдыру", + enterCodeFromImage: "Жалғастыру үшін төмендегі суреттегі кодты енгізіңіз." + }; + globalThis.$altcha.i18n.set("kk", i18n$a); + const i18n$9 = { + ariaLinkLabel: "Altcha (अधिकृत संकेतस्थळ)", + enterCode: "कोड टाकाा", + enterCodeAria: "तुम्ही ऐकत असलेला कोड टाका. ऑडिओ प्ले करण्यासाठी स्पेस दाबा.", + error: "पुष्टीकरण अयशस्वी झाले. कृपया नंतर पुन्हा प्रयत्न करा.", + expired: "पुष्टीकरण कालबाह्य झाले आहे. कृपया पुन्हा प्रयत्न करा.", + footer: 'द्वारे संरक्षित ALTCHA', + getAudioChallenge: "ऑडिओ चॅलेंज मिळवा", + label: "मी रोबोट नाही", + loading: "लोड होत आहे...", + reload: "पुन्हा लोड करा", + verify: "पुष्टीकरण करा", + verificationRequired: "पडताळणी आवश्यक आहे!", + verified: "पुष्टीकरण झाले", + verifying: "पुष्टीकरण करत आहे...", + waitAlert: "पुष्टीकरण करत आहे... कृपया थोडा वेळ थांबा.", + cancel: "रद्द करा", + enterCodeFromImage: "पुढे जाण्यासाठी, कृपया खालील प्रतिमेतील कोड प्रविष्ट करा." + }; + globalThis.$altcha.i18n.set("mr", i18n$9); + const i18n$8 = { + ariaLinkLabel: "Altcha (அதிகாரப்பூர்வ வலைத்தளம்)", + enterCode: "குறியீட்டை உள்ளிடவும்", + enterCodeAria: "நீங்கள் கேட்கும் குறியீட்டை உள்ளிடவும். ஆடியோவை இயக்க Space ஐ அழுத்தவும்.", + error: "சரிபார்ப்பு தோல்வி. பிறகு மீண்டும் முயற்சிக்கவும்.", + expired: "சரிபார்ப்பு காலாவதியானது. மீண்டும் முயற்சிக்கவும்.", + footer: 'மூலமாக பாதுகாக்கப்பட்டவை ALTCHA', + getAudioChallenge: "ஒலி சவாலை பெறவும்", + label: "நான் ரோபோடான அல்ல", + loading: "செயலாக்கம்...", + reload: "மீண்டும் புதுப்பிக்கவும்", + verify: "சரிபார்க்கவும்", + verificationRequired: "சரிபார்ப்பு தேவை!", + verified: "சரிபார்க்கப்பட்டது", + verifying: "சரிபார்க்கப்படுகிறது...", + waitAlert: "சரிபார்க்கப்படுகிறது... தயவுசெய்து காத்திருக்கவும்.", + cancel: "ரத்துசெய்", + enterCodeFromImage: "தொடர, கீழே உள்ள படத்திலிருந்து குறியீட்டை உள்ளிடவும்." + }; + globalThis.$altcha.i18n.set("ta", i18n$8); + const i18n$7 = { + ariaLinkLabel: "Altcha (అధికారిక వెబ్‌సైట్)", + enterCode: "కోడ్‌ని నమోదు చేయండి", + enterCodeAria: "మీరు విన్న కోడ్‌ని నమోదు చేయండి. ఆడియో ప్లే చేయడానికి స్పేస్‌ను నొక్కండి.", + error: "చెకింగ్ విఫలమైంది. దయచేసి మరల ప్రయత్నించండి.", + expired: "చెకింగ్ కాలం ముగిసింది. దయచేసి మరల ప్రయత్నించండి.", + footer: 'ఈ సైట్ రక్షించబడింది ALTCHA', + getAudioChallenge: "ఆడియో ఛాలెంజ్ పొందండి", + label: "నేను రోబోట్ కాదు", + loading: "లోడ్ అవుతోంది...", + reload: "మళ్ళీ లోడ్ చేయండి", + verify: "ధ్రువీకరించు", + verificationRequired: "ధృవీకరణ అవసరం!", + verified: "ధ్రువీకరించబడింది", + verifying: "ధ్రువీకరణ జరుగుతుంది...", + waitAlert: "ధ్రువీకరణ జరుగుతుంది... దయచేసి వేచి ఉండండి.", + cancel: "రద్దు చేయండి", + enterCodeFromImage: "కొనసాగడానికి, దయచేసి క్రింది చిత్రంలో ఉన్న కోడ్‌ను నమోదు చేయండి." + }; + globalThis.$altcha.i18n.set("te", i18n$7); + const i18n$6 = { + ariaLinkLabel: "Altcha (เว็บไซต์ทางการ)", + enterCode: "ป้อนรหัส", + enterCodeAria: "ป้อนรหัสที่คุณได้ยิน กด Space เพื่อเล่นเสียง", + error: "การตรวจสอบล้มเหลว กรุณาลองอีกครั้งภายหลัง", + expired: "การตรวจสอบหมดอายุ กรุณาลองใหม่", + footer: 'ป้องกันโดย ALTCHA', + getAudioChallenge: "รับการท้าทายเสียง", + label: "ฉันไม่ใช่บอท", + loading: "กำลังโหลด...", + reload: "โหลดใหม่", + verify: "ตรวจสอบ", + verificationRequired: "จำเป็นต้องตรวจสอบ!", + verified: "ตรวจสอบแล้ว", + verifying: "กำลังตรวจสอบ...", + waitAlert: "กำลังตรวจสอบ... กรุณารอ", + cancel: "ยกเลิก", + enterCodeFromImage: "เพื่อดำเนินการต่อ โปรดป้อนรหัสจากรูปภาพด้านล่าง" + }; + globalThis.$altcha.i18n.set("th", i18n$6); + const i18n$5 = { + ariaLinkLabel: "Altcha (سرکاری ویب سائٹ)", + enterCode: "کوڈ درج کریں", + enterCodeAria: "جو کوڈ آپ سنتے ہیں وہ درج کریں۔ آڈیو چلانے کے لیے اسپیس دبائیں۔", + error: "توثیق ناکام ہو گئی۔ براہ کرم بعد میں دوبارہ کوشش کریں۔", + expired: "توثیق کی مدت ختم ہو گئی ہے۔ براہ کرم دوبارہ کوشش کریں۔", + footer: 'کے ذریعے محفوظ ALTCHA', + getAudioChallenge: "آڈیو چیلنج حاصل کریں", + label: "میں روبوٹ نہیں ہوں", + loading: "لوڈ ہو رہا ہے...", + reload: "دوبارہ لوڈ کریں", + verify: "توثیق کریں", + verificationRequired: "تصدیق ضروری ہے!", + verified: "توثیق شدہ", + verifying: "توثیق ہو رہی ہے...", + waitAlert: "توثیق ہو رہی ہے... براہ کرم انتظار کریں۔", + cancel: "منسوخ کریں", + enterCodeFromImage: "اگلے مرحلے پر جانے کے لیے، براہ کرم نیچے دی گئی تصویر سے کوڈ درج کریں۔" + }; + globalThis.$altcha.i18n.set("ur", i18n$5); + const i18n$4 = { + ariaLinkLabel: "Altcha (rasmiy veb-sayt)", + enterCode: "Kodni kiriting", + enterCodeAria: "Eshitgan kodingizni kiriting. Audioni ijro etish uchun Bo'sh joy tugmasini bosing.", + error: "Tekshiruv muvaffaqiyatsiz tugadi. Keyinroq qayta urinib ko'ring.", + expired: "Tekshiruv muddati tugadi. Qayta urinib ko'ring.", + footer: 'ALTCHA tomonidan himoyalangan', + getAudioChallenge: "Audio sinovni olish", + label: "Men robot emasman", + loading: "Yuklanmoqda...", + reload: "Qayta yuklash", + verify: "Tekshirish", + verificationRequired: "Tekshiruv talab qilinadi!", + verified: "Tekshirildi", + verifying: "Tekshirilmoqda...", + waitAlert: "Tekshirilmoqda... iltimos kuting.", + cancel: "Bekor qilish", + enterCodeFromImage: "Davom etish uchun, iltimos, quyidagi rasmda ko'rsatilgan kodni kiriting." + }; + globalThis.$altcha.i18n.set("uz", i18n$4); + const i18n$3 = { + ariaLinkLabel: "Altcha (trang web chính thức)", + enterCode: "Nhập mã", + enterCodeAria: "Nhập mã bạn nghe được. Nhấn Phím cách để phát âm thanh.", + error: "Xác minh thất bại. Vui lòng thử lại sau.", + expired: "Xác minh đã hết hạn. Vui lòng thử lại.", + footer: 'Được bảo vệ bởi ALTCHA', + getAudioChallenge: "Nhận thử thách âm thanh", + label: "Tôi không phải là robot", + loading: "Đang tải...", + reload: "Tải lại", + verify: "Xác minh", + verificationRequired: "Yêu cầu xác minh!", + verified: "Đã xác minh", + verifying: "Đang xác minh...", + waitAlert: "Đang xác minh... vui lòng chờ.", + cancel: "Hủy bỏ", + enterCodeFromImage: "Để tiếp tục, vui lòng nhập mã từ hình ảnh bên dưới." + }; + globalThis.$altcha.i18n.set("vi", i18n$3); + const i18n$2 = { + ariaLinkLabel: "Altcha (官方网站)", + enterCode: "输入代码", + enterCodeAria: "输入您听到的代码。按空格键播放音频。", + error: "验证失败。稍后再试。", + expired: "验证已过期。请重试。", + footer: '由 ALTCHA 保护', + getAudioChallenge: "获取音频挑战", + label: "我不是机器人", + loading: "加载中...", + reload: "重新加载", + verify: "验证", + verificationRequired: "需要验证!", + verified: "已验证", + verifying: "正在验证...", + waitAlert: "正在验证... 请稍等。", + cancel: "取消", + enterCodeFromImage: "为继续操作,请输入下图中显示的验证码。" + }; + globalThis.$altcha.i18n.set("zh-cn", i18n$2); + const i18n$1 = { + ariaLinkLabel: "Altcha (官方網站)", + cancel: "取消", + enterCode: "輸入代碼", + enterCodeAria: "輸入你聽到嘅代碼。按空格鍵播放音訊。", + enterCodeFromImage: "要繼續,請輸入下面圖片入面嘅代碼。", + error: "驗證失敗。請稍後再試。", + expired: "驗證已過期。請再試一次。", + footer: '由 ALTCHA 提供保護', + getAudioChallenge: "取得音訊驗證", + label: "我唔係機械人", + loading: "載入中...", + reload: "重新載入", + verify: "驗證", + verificationRequired: "需要驗證!", + verified: "已驗證", + verifying: "驗證中...", + waitAlert: "驗證中... 請稍候。" + }; + globalThis.$altcha.i18n.set("zh-hk", i18n$1); + const i18n = { + ariaLinkLabel: "Altcha (官方網站)", + enterCode: "輸入代碼", + enterCodeAria: "輸入您聽到的代碼。按空格鍵播放音頻。", + error: "驗證失敗。稍後再試。", + expired: "驗證已過期。請重試。", + footer: '由 ALTCHA 保護', + getAudioChallenge: "獲取音頻挑戰", + label: "我不是機器人", + loading: "載入中...", + reload: "重新載入", + verify: "驗證", + verificationRequired: "需要驗證!", + verified: "已驗證", + verifying: "正在驗證...", + waitAlert: "正在驗證... 請稍等。", + cancel: "取消", + enterCodeFromImage: "若要繼續,請輸入下方的圖片驗證碼。" + }; + globalThis.$altcha.i18n.set("zh-tw", i18n); +})); diff --git a/frontend/node_modules/altcha/dist/i18n/am.d.ts b/frontend/node_modules/altcha/dist/i18n/am.d.ts new file mode 100644 index 0000000..5eefbba --- /dev/null +++ b/frontend/node_modules/altcha/dist/i18n/am.d.ts @@ -0,0 +1 @@ +declare module 'altcha/i18n/am'; export {}; diff --git a/frontend/node_modules/altcha/dist/i18n/am.js b/frontend/node_modules/altcha/dist/i18n/am.js new file mode 100644 index 0000000..bc0a805 --- /dev/null +++ b/frontend/node_modules/altcha/dist/i18n/am.js @@ -0,0 +1,128 @@ +const noop = () => { +}; +function safe_not_equal(a, b) { + return a != a ? b == b : a !== b || a !== null && typeof a === "object" || typeof a === "function"; +} +function subscribe_to_store(store2, run, invalidate) { + if (store2 == null) { + run(void 0); + return noop; + } + const unsub = untrack( + () => store2.subscribe( + run, + // @ts-expect-error + invalidate + ) + ); + return unsub.unsubscribe ? () => unsub.unsubscribe() : unsub; +} +const subscriber_queue = []; +function writable(value, start = noop) { + let stop = null; + const subscribers = /* @__PURE__ */ new Set(); + function set(new_value) { + if (safe_not_equal(value, new_value)) { + value = new_value; + if (stop) { + const run_queue = !subscriber_queue.length; + for (const subscriber of subscribers) { + subscriber[1](); + subscriber_queue.push(subscriber, value); + } + if (run_queue) { + for (let i = 0; i < subscriber_queue.length; i += 2) { + subscriber_queue[i][0](subscriber_queue[i + 1]); + } + subscriber_queue.length = 0; + } + } + } + } + function update(fn) { + set(fn( + /** @type {T} */ + value + )); + } + function subscribe(run, invalidate = noop) { + const subscriber = [run, invalidate]; + subscribers.add(subscriber); + if (subscribers.size === 1) { + stop = start(set, update) || noop; + } + run( + /** @type {T} */ + value + ); + return () => { + subscribers.delete(subscriber); + if (subscribers.size === 0 && stop) { + stop(); + stop = null; + } + }; + } + return { set, update, subscribe }; +} +function get(store2) { + let value; + subscribe_to_store(store2, (_) => value = _)(); + return value; +} +let untracking = false; +function untrack(fn) { + var previous_untracking = untracking; + try { + untracking = true; + return fn(); + } finally { + untracking = previous_untracking; + } +} +function store(defaultValue) { + const scope = { + get: (name) => { + return get(scope.store)[name]; + }, + set: (name, value) => { + if (typeof name === "string") { + Object.assign(get(scope.store), { + [name]: value + }); + } else { + Object.assign(get(scope.store), name); + } + scope.store.set(get(scope.store)); + }, + store: writable(defaultValue) + }; + return scope; +} +globalThis.$altcha = globalThis.$altcha || { + algorithms: /* @__PURE__ */ new Map(), + defaults: store({}), + i18n: store({}), + instances: /* @__PURE__ */ new Set(), + plugins: /* @__PURE__ */ new Set() +}; +const i18n = { + ariaLinkLabel: "Altcha (ዋናው ድህረ ገጽ)", + enterCode: "ኮድ አስገባ", + enterCodeAria: "የሚሰማዎትን ኮድ ያስገቡ። ድምጽ ለመጫወት Space ን ይጫኑ።", + error: "ማረጋገጫ አልተሳካም። በኋላ ላይ እንደገና ይሞክሩ።", + expired: "ማረጋገጫው ጊዜው አልፏል። እንደገና ይሞክሩ።", + footer: 'በ ALTCHA የተጠበቀ', + getAudioChallenge: "የድምጽ ፈተና ያግኙ", + label: "እኔ ሮቦት አይደለሁም", + loading: "በመጫን ላይ...", + reload: "እንደገና ጫን", + verify: "አረጋግጥ", + verificationRequired: "ማረጋገጫ ያስፈልጋል!", + verified: "ተረጋግጧል", + verifying: "በማረጋገጥ ላይ...", + waitAlert: "በማረጋገጥ ላይ... እባክዎ ይጠብቁ።", + cancel: "ይቅር", + enterCodeFromImage: "ለመቀጠል፣ እባክዎን ከታች ካለው ምስል ኮዱን ያስገቡ።" +}; +globalThis.$altcha.i18n.set("am", i18n); diff --git a/frontend/node_modules/altcha/dist/i18n/am.umd.cjs b/frontend/node_modules/altcha/dist/i18n/am.umd.cjs new file mode 100644 index 0000000..b65c13f --- /dev/null +++ b/frontend/node_modules/altcha/dist/i18n/am.umd.cjs @@ -0,0 +1,133 @@ +(function(factory) { + typeof define === "function" && define.amd ? define(factory) : factory(); +})((function() { + "use strict"; + const noop = () => { + }; + function safe_not_equal(a, b) { + return a != a ? b == b : a !== b || a !== null && typeof a === "object" || typeof a === "function"; + } + function subscribe_to_store(store2, run, invalidate) { + if (store2 == null) { + run(void 0); + return noop; + } + const unsub = untrack( + () => store2.subscribe( + run, + // @ts-expect-error + invalidate + ) + ); + return unsub.unsubscribe ? () => unsub.unsubscribe() : unsub; + } + const subscriber_queue = []; + function writable(value, start = noop) { + let stop = null; + const subscribers = /* @__PURE__ */ new Set(); + function set(new_value) { + if (safe_not_equal(value, new_value)) { + value = new_value; + if (stop) { + const run_queue = !subscriber_queue.length; + for (const subscriber of subscribers) { + subscriber[1](); + subscriber_queue.push(subscriber, value); + } + if (run_queue) { + for (let i = 0; i < subscriber_queue.length; i += 2) { + subscriber_queue[i][0](subscriber_queue[i + 1]); + } + subscriber_queue.length = 0; + } + } + } + } + function update(fn) { + set(fn( + /** @type {T} */ + value + )); + } + function subscribe(run, invalidate = noop) { + const subscriber = [run, invalidate]; + subscribers.add(subscriber); + if (subscribers.size === 1) { + stop = start(set, update) || noop; + } + run( + /** @type {T} */ + value + ); + return () => { + subscribers.delete(subscriber); + if (subscribers.size === 0 && stop) { + stop(); + stop = null; + } + }; + } + return { set, update, subscribe }; + } + function get(store2) { + let value; + subscribe_to_store(store2, (_) => value = _)(); + return value; + } + let untracking = false; + function untrack(fn) { + var previous_untracking = untracking; + try { + untracking = true; + return fn(); + } finally { + untracking = previous_untracking; + } + } + function store(defaultValue) { + const scope = { + get: (name) => { + return get(scope.store)[name]; + }, + set: (name, value) => { + if (typeof name === "string") { + Object.assign(get(scope.store), { + [name]: value + }); + } else { + Object.assign(get(scope.store), name); + } + scope.store.set(get(scope.store)); + }, + store: writable(defaultValue) + }; + return scope; + } + globalThis.$altcha = globalThis.$altcha || { + algorithms: /* @__PURE__ */ new Map(), + defaults: store({}), + i18n: store({}), + instances: /* @__PURE__ */ new Set(), + plugins: /* @__PURE__ */ new Set() + }; + const i18n = { + ariaLinkLabel: "Altcha (ዋናው ድህረ ገጽ)", + enterCode: "ኮድ አስገባ", + enterCodeAria: "የሚሰማዎትን ኮድ ያስገቡ። ድምጽ ለመጫወት Space ን ይጫኑ።", + error: "ማረጋገጫ አልተሳካም። በኋላ ላይ እንደገና ይሞክሩ።", + expired: "ማረጋገጫው ጊዜው አልፏል። እንደገና ይሞክሩ።", + footer: 'በ ALTCHA የተጠበቀ', + getAudioChallenge: "የድምጽ ፈተና ያግኙ", + label: "እኔ ሮቦት አይደለሁም", + loading: "በመጫን ላይ...", + reload: "እንደገና ጫን", + verify: "አረጋግጥ", + verificationRequired: "ማረጋገጫ ያስፈልጋል!", + verified: "ተረጋግጧል", + verifying: "በማረጋገጥ ላይ...", + waitAlert: "በማረጋገጥ ላይ... እባክዎ ይጠብቁ።", + cancel: "ይቅር", + enterCodeFromImage: "ለመቀጠል፣ እባክዎን ከታች ካለው ምስል ኮዱን ያስገቡ።" + }; + globalThis.$altcha.i18n.set("am", i18n); +})); diff --git a/frontend/node_modules/altcha/dist/i18n/americas.d.ts b/frontend/node_modules/altcha/dist/i18n/americas.d.ts new file mode 100644 index 0000000..d6cf68c --- /dev/null +++ b/frontend/node_modules/altcha/dist/i18n/americas.d.ts @@ -0,0 +1 @@ +declare module 'altcha/i18n/americas'; export {}; diff --git a/frontend/node_modules/altcha/dist/i18n/americas.js b/frontend/node_modules/altcha/dist/i18n/americas.js new file mode 100644 index 0000000..4052ff6 --- /dev/null +++ b/frontend/node_modules/altcha/dist/i18n/americas.js @@ -0,0 +1,168 @@ +const noop = () => { +}; +function safe_not_equal(a, b) { + return a != a ? b == b : a !== b || a !== null && typeof a === "object" || typeof a === "function"; +} +function subscribe_to_store(store2, run, invalidate) { + if (store2 == null) { + run(void 0); + return noop; + } + const unsub = untrack( + () => store2.subscribe( + run, + // @ts-expect-error + invalidate + ) + ); + return unsub.unsubscribe ? () => unsub.unsubscribe() : unsub; +} +const subscriber_queue = []; +function writable(value, start = noop) { + let stop = null; + const subscribers = /* @__PURE__ */ new Set(); + function set(new_value) { + if (safe_not_equal(value, new_value)) { + value = new_value; + if (stop) { + const run_queue = !subscriber_queue.length; + for (const subscriber of subscribers) { + subscriber[1](); + subscriber_queue.push(subscriber, value); + } + if (run_queue) { + for (let i = 0; i < subscriber_queue.length; i += 2) { + subscriber_queue[i][0](subscriber_queue[i + 1]); + } + subscriber_queue.length = 0; + } + } + } + } + function update(fn) { + set(fn( + /** @type {T} */ + value + )); + } + function subscribe(run, invalidate = noop) { + const subscriber = [run, invalidate]; + subscribers.add(subscriber); + if (subscribers.size === 1) { + stop = start(set, update) || noop; + } + run( + /** @type {T} */ + value + ); + return () => { + subscribers.delete(subscriber); + if (subscribers.size === 0 && stop) { + stop(); + stop = null; + } + }; + } + return { set, update, subscribe }; +} +function get(store2) { + let value; + subscribe_to_store(store2, (_) => value = _)(); + return value; +} +let untracking = false; +function untrack(fn) { + var previous_untracking = untracking; + try { + untracking = true; + return fn(); + } finally { + untracking = previous_untracking; + } +} +function store(defaultValue) { + const scope = { + get: (name) => { + return get(scope.store)[name]; + }, + set: (name, value) => { + if (typeof name === "string") { + Object.assign(get(scope.store), { + [name]: value + }); + } else { + Object.assign(get(scope.store), name); + } + scope.store.set(get(scope.store)); + }, + store: writable(defaultValue) + }; + return scope; +} +globalThis.$altcha = globalThis.$altcha || { + algorithms: /* @__PURE__ */ new Map(), + defaults: store({}), + i18n: store({}), + instances: /* @__PURE__ */ new Set(), + plugins: /* @__PURE__ */ new Set() +}; +const i18n$2 = { + ariaLinkLabel: "Altcha (site officiel)", + enterCode: "Entrez le code", + enterCodeAria: "Entrez le code que vous entendez. Appuyez sur la barre d'espace pour écouter l'audio.", + error: "Échec de la vérification. Réessayez plus tard.", + expired: "La vérification a expiré. Réessayez.", + footer: 'Protégé par ALTCHA', + getAudioChallenge: "Obtenir un défi audio", + label: "Je ne suis pas un robot", + loading: "Chargement...", + reload: "Recharger", + verify: "Vérifier", + verificationRequired: "Vérification requise !", + verified: "Vérifié", + verifying: "Vérification en cours...", + waitAlert: "Vérification en cours... veuillez patienter.", + cancel: "Annuler", + enterCodeFromImage: "Pour continuer, veuillez entrer le code de l'image ci-dessous." +}; +globalThis.$altcha.i18n.set("fr-ca", i18n$2); +const i18n$1 = { + ariaLinkLabel: "Altcha (sitio web oficial)", + enterCode: "Ingresa el código", + enterCodeAria: "Ingresa el código que escuchas. Presiona Espacio para reproducir el audio.", + error: "Falló la verificación. Por favor vuelve a intentarlo más tarde.", + expired: "La verificación expiró. Por favor inténtalo de nuevo.", + footer: 'Protegido por ALTCHA', + getAudioChallenge: "Obtener un reto de audio", + label: "No soy un robot", + loading: "Cargando...", + reload: "Volver a cargar", + verify: "Verificar", + verificationRequired: "¡Verificación requerida!", + verified: "Verificado", + verifying: "Verificando...", + waitAlert: "Verificando... por favor espera.", + cancel: "Cancelar", + enterCodeFromImage: "Para continuar, ingresa el código de la imagen a continuación." +}; +globalThis.$altcha.i18n.set("es-419", i18n$1); +const i18n = { + ariaLinkLabel: "Altcha (site oficial)", + enterCode: "Digite o código", + enterCodeAria: "Digite o código que você ouve. Pressione Espaço para reproduzir o áudio.", + error: "Falha na verificação. Por favor, tente novamente mais tarde.", + expired: "Verificação expirada. Por favor, tente novamente.", + footer: 'Protegido por ALTCHA', + getAudioChallenge: "Obter desafio de áudio", + label: "Eu não sou um robô", + loading: "Carregando...", + reload: "Recarregar", + verify: "Verificar", + verificationRequired: "Verificação necessária!", + verified: "Verificado", + verifying: "Verificando...", + waitAlert: "Verificando... por favor aguarde.", + cancel: "Cancelar", + enterCodeFromImage: "Para prosseguir, digite o código da imagem abaixo." +}; +globalThis.$altcha.i18n.set("pt-br", i18n); diff --git a/frontend/node_modules/altcha/dist/i18n/americas.umd.cjs b/frontend/node_modules/altcha/dist/i18n/americas.umd.cjs new file mode 100644 index 0000000..199917f --- /dev/null +++ b/frontend/node_modules/altcha/dist/i18n/americas.umd.cjs @@ -0,0 +1,173 @@ +(function(factory) { + typeof define === "function" && define.amd ? define(factory) : factory(); +})((function() { + "use strict"; + const noop = () => { + }; + function safe_not_equal(a, b) { + return a != a ? b == b : a !== b || a !== null && typeof a === "object" || typeof a === "function"; + } + function subscribe_to_store(store2, run, invalidate) { + if (store2 == null) { + run(void 0); + return noop; + } + const unsub = untrack( + () => store2.subscribe( + run, + // @ts-expect-error + invalidate + ) + ); + return unsub.unsubscribe ? () => unsub.unsubscribe() : unsub; + } + const subscriber_queue = []; + function writable(value, start = noop) { + let stop = null; + const subscribers = /* @__PURE__ */ new Set(); + function set(new_value) { + if (safe_not_equal(value, new_value)) { + value = new_value; + if (stop) { + const run_queue = !subscriber_queue.length; + for (const subscriber of subscribers) { + subscriber[1](); + subscriber_queue.push(subscriber, value); + } + if (run_queue) { + for (let i = 0; i < subscriber_queue.length; i += 2) { + subscriber_queue[i][0](subscriber_queue[i + 1]); + } + subscriber_queue.length = 0; + } + } + } + } + function update(fn) { + set(fn( + /** @type {T} */ + value + )); + } + function subscribe(run, invalidate = noop) { + const subscriber = [run, invalidate]; + subscribers.add(subscriber); + if (subscribers.size === 1) { + stop = start(set, update) || noop; + } + run( + /** @type {T} */ + value + ); + return () => { + subscribers.delete(subscriber); + if (subscribers.size === 0 && stop) { + stop(); + stop = null; + } + }; + } + return { set, update, subscribe }; + } + function get(store2) { + let value; + subscribe_to_store(store2, (_) => value = _)(); + return value; + } + let untracking = false; + function untrack(fn) { + var previous_untracking = untracking; + try { + untracking = true; + return fn(); + } finally { + untracking = previous_untracking; + } + } + function store(defaultValue) { + const scope = { + get: (name) => { + return get(scope.store)[name]; + }, + set: (name, value) => { + if (typeof name === "string") { + Object.assign(get(scope.store), { + [name]: value + }); + } else { + Object.assign(get(scope.store), name); + } + scope.store.set(get(scope.store)); + }, + store: writable(defaultValue) + }; + return scope; + } + globalThis.$altcha = globalThis.$altcha || { + algorithms: /* @__PURE__ */ new Map(), + defaults: store({}), + i18n: store({}), + instances: /* @__PURE__ */ new Set(), + plugins: /* @__PURE__ */ new Set() + }; + const i18n$2 = { + ariaLinkLabel: "Altcha (site officiel)", + enterCode: "Entrez le code", + enterCodeAria: "Entrez le code que vous entendez. Appuyez sur la barre d'espace pour écouter l'audio.", + error: "Échec de la vérification. Réessayez plus tard.", + expired: "La vérification a expiré. Réessayez.", + footer: 'Protégé par ALTCHA', + getAudioChallenge: "Obtenir un défi audio", + label: "Je ne suis pas un robot", + loading: "Chargement...", + reload: "Recharger", + verify: "Vérifier", + verificationRequired: "Vérification requise !", + verified: "Vérifié", + verifying: "Vérification en cours...", + waitAlert: "Vérification en cours... veuillez patienter.", + cancel: "Annuler", + enterCodeFromImage: "Pour continuer, veuillez entrer le code de l'image ci-dessous." + }; + globalThis.$altcha.i18n.set("fr-ca", i18n$2); + const i18n$1 = { + ariaLinkLabel: "Altcha (sitio web oficial)", + enterCode: "Ingresa el código", + enterCodeAria: "Ingresa el código que escuchas. Presiona Espacio para reproducir el audio.", + error: "Falló la verificación. Por favor vuelve a intentarlo más tarde.", + expired: "La verificación expiró. Por favor inténtalo de nuevo.", + footer: 'Protegido por ALTCHA', + getAudioChallenge: "Obtener un reto de audio", + label: "No soy un robot", + loading: "Cargando...", + reload: "Volver a cargar", + verify: "Verificar", + verificationRequired: "¡Verificación requerida!", + verified: "Verificado", + verifying: "Verificando...", + waitAlert: "Verificando... por favor espera.", + cancel: "Cancelar", + enterCodeFromImage: "Para continuar, ingresa el código de la imagen a continuación." + }; + globalThis.$altcha.i18n.set("es-419", i18n$1); + const i18n = { + ariaLinkLabel: "Altcha (site oficial)", + enterCode: "Digite o código", + enterCodeAria: "Digite o código que você ouve. Pressione Espaço para reproduzir o áudio.", + error: "Falha na verificação. Por favor, tente novamente mais tarde.", + expired: "Verificação expirada. Por favor, tente novamente.", + footer: 'Protegido por ALTCHA', + getAudioChallenge: "Obter desafio de áudio", + label: "Eu não sou um robô", + loading: "Carregando...", + reload: "Recarregar", + verify: "Verificar", + verificationRequired: "Verificação necessária!", + verified: "Verificado", + verifying: "Verificando...", + waitAlert: "Verificando... por favor aguarde.", + cancel: "Cancelar", + enterCodeFromImage: "Para prosseguir, digite o código da imagem abaixo." + }; + globalThis.$altcha.i18n.set("pt-br", i18n); +})); diff --git a/frontend/node_modules/altcha/dist/i18n/ar.d.ts b/frontend/node_modules/altcha/dist/i18n/ar.d.ts new file mode 100644 index 0000000..2d34296 --- /dev/null +++ b/frontend/node_modules/altcha/dist/i18n/ar.d.ts @@ -0,0 +1 @@ +declare module 'altcha/i18n/ar'; export {}; diff --git a/frontend/node_modules/altcha/dist/i18n/ar.js b/frontend/node_modules/altcha/dist/i18n/ar.js new file mode 100644 index 0000000..c23bfbb --- /dev/null +++ b/frontend/node_modules/altcha/dist/i18n/ar.js @@ -0,0 +1,128 @@ +const noop = () => { +}; +function safe_not_equal(a, b) { + return a != a ? b == b : a !== b || a !== null && typeof a === "object" || typeof a === "function"; +} +function subscribe_to_store(store2, run, invalidate) { + if (store2 == null) { + run(void 0); + return noop; + } + const unsub = untrack( + () => store2.subscribe( + run, + // @ts-expect-error + invalidate + ) + ); + return unsub.unsubscribe ? () => unsub.unsubscribe() : unsub; +} +const subscriber_queue = []; +function writable(value, start = noop) { + let stop = null; + const subscribers = /* @__PURE__ */ new Set(); + function set(new_value) { + if (safe_not_equal(value, new_value)) { + value = new_value; + if (stop) { + const run_queue = !subscriber_queue.length; + for (const subscriber of subscribers) { + subscriber[1](); + subscriber_queue.push(subscriber, value); + } + if (run_queue) { + for (let i = 0; i < subscriber_queue.length; i += 2) { + subscriber_queue[i][0](subscriber_queue[i + 1]); + } + subscriber_queue.length = 0; + } + } + } + } + function update(fn) { + set(fn( + /** @type {T} */ + value + )); + } + function subscribe(run, invalidate = noop) { + const subscriber = [run, invalidate]; + subscribers.add(subscriber); + if (subscribers.size === 1) { + stop = start(set, update) || noop; + } + run( + /** @type {T} */ + value + ); + return () => { + subscribers.delete(subscriber); + if (subscribers.size === 0 && stop) { + stop(); + stop = null; + } + }; + } + return { set, update, subscribe }; +} +function get(store2) { + let value; + subscribe_to_store(store2, (_) => value = _)(); + return value; +} +let untracking = false; +function untrack(fn) { + var previous_untracking = untracking; + try { + untracking = true; + return fn(); + } finally { + untracking = previous_untracking; + } +} +function store(defaultValue) { + const scope = { + get: (name) => { + return get(scope.store)[name]; + }, + set: (name, value) => { + if (typeof name === "string") { + Object.assign(get(scope.store), { + [name]: value + }); + } else { + Object.assign(get(scope.store), name); + } + scope.store.set(get(scope.store)); + }, + store: writable(defaultValue) + }; + return scope; +} +globalThis.$altcha = globalThis.$altcha || { + algorithms: /* @__PURE__ */ new Map(), + defaults: store({}), + i18n: store({}), + instances: /* @__PURE__ */ new Set(), + plugins: /* @__PURE__ */ new Set() +}; +const i18n = { + ariaLinkLabel: "Altcha (الموقع الرسمي)", + enterCode: "أدخل الرمز", + enterCodeAria: "أدخل الرمز الذي تسمعه. اضغط على المسافة لتشغيل الصوت.", + error: "فشل التحقق. حاول مرة أخرى لاحقاً.", + expired: "انتهت صلاحية التحقق. حاول مرة أخرى.", + footer: 'محمي بواسطة ALTCHA', + getAudioChallenge: "احصل على تحدي صوتي", + label: "أنا لست روبوتاً", + loading: "جارٍ التحميل...", + reload: "إعادة تحميل", + verify: "تحقق", + verificationRequired: "مطلوب التحقق!", + verified: "تم التحقق", + verifying: "جارٍ التحقق...", + waitAlert: "جارٍ التحقق... يرجى الانتظار.", + cancel: "إلغاء", + enterCodeFromImage: "للمتابعة، يرجى إدخال الرمز من الصورة أدناه." +}; +globalThis.$altcha.i18n.set("ar", i18n); diff --git a/frontend/node_modules/altcha/dist/i18n/ar.umd.cjs b/frontend/node_modules/altcha/dist/i18n/ar.umd.cjs new file mode 100644 index 0000000..2b1c478 --- /dev/null +++ b/frontend/node_modules/altcha/dist/i18n/ar.umd.cjs @@ -0,0 +1,133 @@ +(function(factory) { + typeof define === "function" && define.amd ? define(factory) : factory(); +})((function() { + "use strict"; + const noop = () => { + }; + function safe_not_equal(a, b) { + return a != a ? b == b : a !== b || a !== null && typeof a === "object" || typeof a === "function"; + } + function subscribe_to_store(store2, run, invalidate) { + if (store2 == null) { + run(void 0); + return noop; + } + const unsub = untrack( + () => store2.subscribe( + run, + // @ts-expect-error + invalidate + ) + ); + return unsub.unsubscribe ? () => unsub.unsubscribe() : unsub; + } + const subscriber_queue = []; + function writable(value, start = noop) { + let stop = null; + const subscribers = /* @__PURE__ */ new Set(); + function set(new_value) { + if (safe_not_equal(value, new_value)) { + value = new_value; + if (stop) { + const run_queue = !subscriber_queue.length; + for (const subscriber of subscribers) { + subscriber[1](); + subscriber_queue.push(subscriber, value); + } + if (run_queue) { + for (let i = 0; i < subscriber_queue.length; i += 2) { + subscriber_queue[i][0](subscriber_queue[i + 1]); + } + subscriber_queue.length = 0; + } + } + } + } + function update(fn) { + set(fn( + /** @type {T} */ + value + )); + } + function subscribe(run, invalidate = noop) { + const subscriber = [run, invalidate]; + subscribers.add(subscriber); + if (subscribers.size === 1) { + stop = start(set, update) || noop; + } + run( + /** @type {T} */ + value + ); + return () => { + subscribers.delete(subscriber); + if (subscribers.size === 0 && stop) { + stop(); + stop = null; + } + }; + } + return { set, update, subscribe }; + } + function get(store2) { + let value; + subscribe_to_store(store2, (_) => value = _)(); + return value; + } + let untracking = false; + function untrack(fn) { + var previous_untracking = untracking; + try { + untracking = true; + return fn(); + } finally { + untracking = previous_untracking; + } + } + function store(defaultValue) { + const scope = { + get: (name) => { + return get(scope.store)[name]; + }, + set: (name, value) => { + if (typeof name === "string") { + Object.assign(get(scope.store), { + [name]: value + }); + } else { + Object.assign(get(scope.store), name); + } + scope.store.set(get(scope.store)); + }, + store: writable(defaultValue) + }; + return scope; + } + globalThis.$altcha = globalThis.$altcha || { + algorithms: /* @__PURE__ */ new Map(), + defaults: store({}), + i18n: store({}), + instances: /* @__PURE__ */ new Set(), + plugins: /* @__PURE__ */ new Set() + }; + const i18n = { + ariaLinkLabel: "Altcha (الموقع الرسمي)", + enterCode: "أدخل الرمز", + enterCodeAria: "أدخل الرمز الذي تسمعه. اضغط على المسافة لتشغيل الصوت.", + error: "فشل التحقق. حاول مرة أخرى لاحقاً.", + expired: "انتهت صلاحية التحقق. حاول مرة أخرى.", + footer: 'محمي بواسطة ALTCHA', + getAudioChallenge: "احصل على تحدي صوتي", + label: "أنا لست روبوتاً", + loading: "جارٍ التحميل...", + reload: "إعادة تحميل", + verify: "تحقق", + verificationRequired: "مطلوب التحقق!", + verified: "تم التحقق", + verifying: "جارٍ التحقق...", + waitAlert: "جارٍ التحقق... يرجى الانتظار.", + cancel: "إلغاء", + enterCodeFromImage: "للمتابعة، يرجى إدخال الرمز من الصورة أدناه." + }; + globalThis.$altcha.i18n.set("ar", i18n); +})); diff --git a/frontend/node_modules/altcha/dist/i18n/asia.d.ts b/frontend/node_modules/altcha/dist/i18n/asia.d.ts new file mode 100644 index 0000000..43d2b06 --- /dev/null +++ b/frontend/node_modules/altcha/dist/i18n/asia.d.ts @@ -0,0 +1 @@ +declare module 'altcha/i18n/asia'; export {}; diff --git a/frontend/node_modules/altcha/dist/i18n/asia.js b/frontend/node_modules/altcha/dist/i18n/asia.js new file mode 100644 index 0000000..994bee7 --- /dev/null +++ b/frontend/node_modules/altcha/dist/i18n/asia.js @@ -0,0 +1,588 @@ +const noop = () => { +}; +function safe_not_equal(a, b) { + return a != a ? b == b : a !== b || a !== null && typeof a === "object" || typeof a === "function"; +} +function subscribe_to_store(store2, run, invalidate) { + if (store2 == null) { + run(void 0); + return noop; + } + const unsub = untrack( + () => store2.subscribe( + run, + // @ts-expect-error + invalidate + ) + ); + return unsub.unsubscribe ? () => unsub.unsubscribe() : unsub; +} +const subscriber_queue = []; +function writable(value, start = noop) { + let stop = null; + const subscribers = /* @__PURE__ */ new Set(); + function set(new_value) { + if (safe_not_equal(value, new_value)) { + value = new_value; + if (stop) { + const run_queue = !subscriber_queue.length; + for (const subscriber of subscribers) { + subscriber[1](); + subscriber_queue.push(subscriber, value); + } + if (run_queue) { + for (let i = 0; i < subscriber_queue.length; i += 2) { + subscriber_queue[i][0](subscriber_queue[i + 1]); + } + subscriber_queue.length = 0; + } + } + } + } + function update(fn) { + set(fn( + /** @type {T} */ + value + )); + } + function subscribe(run, invalidate = noop) { + const subscriber = [run, invalidate]; + subscribers.add(subscriber); + if (subscribers.size === 1) { + stop = start(set, update) || noop; + } + run( + /** @type {T} */ + value + ); + return () => { + subscribers.delete(subscriber); + if (subscribers.size === 0 && stop) { + stop(); + stop = null; + } + }; + } + return { set, update, subscribe }; +} +function get(store2) { + let value; + subscribe_to_store(store2, (_) => value = _)(); + return value; +} +let untracking = false; +function untrack(fn) { + var previous_untracking = untracking; + try { + untracking = true; + return fn(); + } finally { + untracking = previous_untracking; + } +} +function store(defaultValue) { + const scope = { + get: (name) => { + return get(scope.store)[name]; + }, + set: (name, value) => { + if (typeof name === "string") { + Object.assign(get(scope.store), { + [name]: value + }); + } else { + Object.assign(get(scope.store), name); + } + scope.store.set(get(scope.store)); + }, + store: writable(defaultValue) + }; + return scope; +} +globalThis.$altcha = globalThis.$altcha || { + algorithms: /* @__PURE__ */ new Map(), + defaults: store({}), + i18n: store({}), + instances: /* @__PURE__ */ new Set(), + plugins: /* @__PURE__ */ new Set() +}; +const i18n$n = { + ariaLinkLabel: "Altcha (官方网站)", + enterCode: "输入代码", + enterCodeAria: "输入您听到的代码。按空格键播放音频。", + error: "验证失败。稍后再试。", + expired: "验证已过期。请重试。", + footer: '由 ALTCHA 保护', + getAudioChallenge: "获取音频挑战", + label: "我不是机器人", + loading: "加载中...", + reload: "重新加载", + verify: "验证", + verificationRequired: "需要验证!", + verified: "已验证", + verifying: "正在验证...", + waitAlert: "正在验证... 请稍等。", + cancel: "取消", + enterCodeFromImage: "为继续操作,请输入下图中显示的验证码。" +}; +globalThis.$altcha.i18n.set("zh-cn", i18n$n); +const i18n$m = { + ariaLinkLabel: "Altcha (官方網站)", + cancel: "取消", + enterCode: "輸入代碼", + enterCodeAria: "輸入你聽到嘅代碼。按空格鍵播放音訊。", + enterCodeFromImage: "要繼續,請輸入下面圖片入面嘅代碼。", + error: "驗證失敗。請稍後再試。", + expired: "驗證已過期。請再試一次。", + footer: '由 ALTCHA 提供保護', + getAudioChallenge: "取得音訊驗證", + label: "我唔係機械人", + loading: "載入中...", + reload: "重新載入", + verify: "驗證", + verificationRequired: "需要驗證!", + verified: "已驗證", + verifying: "驗證中...", + waitAlert: "驗證中... 請稍候。" +}; +globalThis.$altcha.i18n.set("zh-hk", i18n$m); +const i18n$l = { + ariaLinkLabel: "Altcha (官方網站)", + enterCode: "輸入代碼", + enterCodeAria: "輸入您聽到的代碼。按空格鍵播放音頻。", + error: "驗證失敗。稍後再試。", + expired: "驗證已過期。請重試。", + footer: '由 ALTCHA 保護', + getAudioChallenge: "獲取音頻挑戰", + label: "我不是機器人", + loading: "載入中...", + reload: "重新載入", + verify: "驗證", + verificationRequired: "需要驗證!", + verified: "已驗證", + verifying: "正在驗證...", + waitAlert: "正在驗證... 請稍等。", + cancel: "取消", + enterCodeFromImage: "若要繼續,請輸入下方的圖片驗證碼。" +}; +globalThis.$altcha.i18n.set("zh-tw", i18n$l); +const i18n$k = { + ariaLinkLabel: "Altcha (公式ウェブサイト)", + enterCode: "コードを入力", + enterCodeAria: "聞こえるコードを入力してください。スペースキーを押して音声を再生します。", + error: "認証に失敗しました。後でもう一度試してください。", + expired: "認証が期限切れです。再試行してください。", + footer: '保護されています ALTCHA', + getAudioChallenge: "音声チャレンジを取得", + label: "私はロボットではありません", + loading: "読み込み中...", + reload: "再読み込み", + verify: "確認", + verificationRequired: "認証が必要です!", + verified: "確認済み", + verifying: "確認中...", + waitAlert: "確認中...少々お待ちください。", + cancel: "キャンセル", + enterCodeFromImage: "続行するには、以下の画像からコードを入力してください。" +}; +globalThis.$altcha.i18n.set("ja", i18n$k); +const i18n$j = { + ariaLinkLabel: "Altcha (공식 웹사이트)", + enterCode: "코드 입력", + enterCodeAria: "들리는 코드를 입력하세요. 스페이스 바를 눌러 오디오를 재생합니다.", + error: "인증 실패. 나중에 다시 시도해주세요.", + expired: "인증이 만료되었습니다. 다시 시도해주세요.", + footer: 'ALTCHA에서 보호됨 ALTCHA', + getAudioChallenge: "오디오 챌린지 받기", + label: "저는 로봇이 아닙니다", + loading: "로딩 중...", + reload: "새로 고침", + verify: "확인", + verificationRequired: "인증이 필요합니다!", + verified: "확인됨", + verifying: "확인 중...", + waitAlert: "확인 중... 잠시만 기다려주세요.", + cancel: "취소", + enterCodeFromImage: "계속 진행하려면 아래 이미지에서 코드를 입력하세요." +}; +globalThis.$altcha.i18n.set("ko", i18n$j); +const i18n$i = { + ariaLinkLabel: "Altcha (आधिकारिक वेबसाइट)", + enterCode: "कोड दर्ज करेंं", + enterCodeAria: "आप जो कोड सुनते हैं उसे दर्ज करें। ऑडियो चलाने के लिए स्पेस दबाएं।", + error: "सत्यापन विफल। कृपया बाद में फिर से प्रयास करें।", + expired: "सत्यापन समाप्त हो गया है। कृपया पुनः प्रयास करें।", + footer: 'द्वारा संरक्षित ALTCHA', + getAudioChallenge: "ऑडियो चुनौती प्राप्त करें", + label: "मैं रोबोट नहीं हूँ", + loading: "लोड हो रहा है...", + reload: "पुनः लोड करें", + verify: "सत्यापित करें", + verificationRequired: "सत्यापन आवश्यक है!", + verified: "सत्यापित", + verifying: "सत्यापित कर रहे हैं...", + waitAlert: "सत्यापित किया जा रहा है... कृपया प्रतीक्षा करें।", + cancel: "रद्द करें", + enterCodeFromImage: "आगे बढ़ने के लिए, कृपया नीचे दी गई छवि से कोड दर्ज करें।" +}; +globalThis.$altcha.i18n.set("hi", i18n$i); +const i18n$h = { + ariaLinkLabel: "Altcha (অফিসিয়াল ওয়েবসাইট)", + enterCode: "কোড লিখুন", + enterCodeAria: "আপনি যে কোড শুনতে পান তা লিখুন। অডিও প্লে করতে স্পেস বাটন টিপুন।", + error: "যাচাইকরণ ব্যর্থ হয়েছে। পরে আবার চেষ্টা করুন।", + expired: "যাচাইকরণ সময়সীমা শেষ হয়েছে। আবার চেষ্টা করুন।", + footer: 'দ্বারা সুরক্ষিত ALTCHA', + getAudioChallenge: "অডিও চ্যালেঞ্জ নিন", + label: "আমি রোবট নই", + loading: "লোড হচ্ছে...", + reload: "পুনরায় লোড করুন", + verify: "যাচাই করুন", + verificationRequired: "যাচাই প্রয়োজন!", + verified: "যাচাই করা হয়েছে", + verifying: "যাচাই করা হচ্ছে...", + waitAlert: "যাচাই করা হচ্ছে... দয়া করে অপেক্ষা করুন।", + cancel: "বাতিল করুন", + enterCodeFromImage: "এগিয়ে যেতে, অনুগ্রহ করে নীচের চিত্র থেকে কোডটি প্রবেশ করান।" +}; +globalThis.$altcha.i18n.set("bn", i18n$h); +const i18n$g = { + ariaLinkLabel: "Altcha (अधिकृत संकेतस्थळ)", + enterCode: "कोड टाकाा", + enterCodeAria: "तुम्ही ऐकत असलेला कोड टाका. ऑडिओ प्ले करण्यासाठी स्पेस दाबा.", + error: "पुष्टीकरण अयशस्वी झाले. कृपया नंतर पुन्हा प्रयत्न करा.", + expired: "पुष्टीकरण कालबाह्य झाले आहे. कृपया पुन्हा प्रयत्न करा.", + footer: 'द्वारे संरक्षित ALTCHA', + getAudioChallenge: "ऑडिओ चॅलेंज मिळवा", + label: "मी रोबोट नाही", + loading: "लोड होत आहे...", + reload: "पुन्हा लोड करा", + verify: "पुष्टीकरण करा", + verificationRequired: "पडताळणी आवश्यक आहे!", + verified: "पुष्टीकरण झाले", + verifying: "पुष्टीकरण करत आहे...", + waitAlert: "पुष्टीकरण करत आहे... कृपया थोडा वेळ थांबा.", + cancel: "रद्द करा", + enterCodeFromImage: "पुढे जाण्यासाठी, कृपया खालील प्रतिमेतील कोड प्रविष्ट करा." +}; +globalThis.$altcha.i18n.set("mr", i18n$g); +const i18n$f = { + ariaLinkLabel: "Altcha (అధికారిక వెబ్‌సైట్)", + enterCode: "కోడ్‌ని నమోదు చేయండి", + enterCodeAria: "మీరు విన్న కోడ్‌ని నమోదు చేయండి. ఆడియో ప్లే చేయడానికి స్పేస్‌ను నొక్కండి.", + error: "చెకింగ్ విఫలమైంది. దయచేసి మరల ప్రయత్నించండి.", + expired: "చెకింగ్ కాలం ముగిసింది. దయచేసి మరల ప్రయత్నించండి.", + footer: 'ఈ సైట్ రక్షించబడింది ALTCHA', + getAudioChallenge: "ఆడియో ఛాలెంజ్ పొందండి", + label: "నేను రోబోట్ కాదు", + loading: "లోడ్ అవుతోంది...", + reload: "మళ్ళీ లోడ్ చేయండి", + verify: "ధ్రువీకరించు", + verificationRequired: "ధృవీకరణ అవసరం!", + verified: "ధ్రువీకరించబడింది", + verifying: "ధ్రువీకరణ జరుగుతుంది...", + waitAlert: "ధ్రువీకరణ జరుగుతుంది... దయచేసి వేచి ఉండండి.", + cancel: "రద్దు చేయండి", + enterCodeFromImage: "కొనసాగడానికి, దయచేసి క్రింది చిత్రంలో ఉన్న కోడ్‌ను నమోదు చేయండి." +}; +globalThis.$altcha.i18n.set("te", i18n$f); +const i18n$e = { + ariaLinkLabel: "Altcha (அதிகாரப்பூர்வ வலைத்தளம்)", + enterCode: "குறியீட்டை உள்ளிடவும்", + enterCodeAria: "நீங்கள் கேட்கும் குறியீட்டை உள்ளிடவும். ஆடியோவை இயக்க Space ஐ அழுத்தவும்.", + error: "சரிபார்ப்பு தோல்வி. பிறகு மீண்டும் முயற்சிக்கவும்.", + expired: "சரிபார்ப்பு காலாவதியானது. மீண்டும் முயற்சிக்கவும்.", + footer: 'மூலமாக பாதுகாக்கப்பட்டவை ALTCHA', + getAudioChallenge: "ஒலி சவாலை பெறவும்", + label: "நான் ரோபோடான அல்ல", + loading: "செயலாக்கம்...", + reload: "மீண்டும் புதுப்பிக்கவும்", + verify: "சரிபார்க்கவும்", + verificationRequired: "சரிபார்ப்பு தேவை!", + verified: "சரிபார்க்கப்பட்டது", + verifying: "சரிபார்க்கப்படுகிறது...", + waitAlert: "சரிபார்க்கப்படுகிறது... தயவுசெய்து காத்திருக்கவும்.", + cancel: "ரத்துசெய்", + enterCodeFromImage: "தொடர, கீழே உள்ள படத்திலிருந்து குறியீட்டை உள்ளிடவும்." +}; +globalThis.$altcha.i18n.set("ta", i18n$e); +const i18n$d = { + ariaLinkLabel: "Altcha (سرکاری ویب سائٹ)", + enterCode: "کوڈ درج کریں", + enterCodeAria: "جو کوڈ آپ سنتے ہیں وہ درج کریں۔ آڈیو چلانے کے لیے اسپیس دبائیں۔", + error: "توثیق ناکام ہو گئی۔ براہ کرم بعد میں دوبارہ کوشش کریں۔", + expired: "توثیق کی مدت ختم ہو گئی ہے۔ براہ کرم دوبارہ کوشش کریں۔", + footer: 'کے ذریعے محفوظ ALTCHA', + getAudioChallenge: "آڈیو چیلنج حاصل کریں", + label: "میں روبوٹ نہیں ہوں", + loading: "لوڈ ہو رہا ہے...", + reload: "دوبارہ لوڈ کریں", + verify: "توثیق کریں", + verificationRequired: "تصدیق ضروری ہے!", + verified: "توثیق شدہ", + verifying: "توثیق ہو رہی ہے...", + waitAlert: "توثیق ہو رہی ہے... براہ کرم انتظار کریں۔", + cancel: "منسوخ کریں", + enterCodeFromImage: "اگلے مرحلے پر جانے کے لیے، براہ کرم نیچے دی گئی تصویر سے کوڈ درج کریں۔" +}; +globalThis.$altcha.i18n.set("ur", i18n$d); +const i18n$c = { + ariaLinkLabel: "Altcha (situs web resmi)", + enterCode: "Masukkan kode", + enterCodeAria: "Masukkan kode yang Anda dengar. Tekan Spasi untuk memutar audio.", + error: "Verifikasi gagal. Coba lagi nanti.", + expired: "Verifikasi telah kedaluwarsa. Coba lagi.", + footer: 'Dilindungi oleh ALTCHA', + getAudioChallenge: "Dapatkan tantangan audio", + label: "Saya bukan robot", + loading: "Memuat...", + reload: "Muat ulang", + verify: "Verifikasi", + verificationRequired: "Verifikasi diperlukan!", + verified: "Terverifikasi", + verifying: "Memverifikasi...", + waitAlert: "Memverifikasi... harap tunggu.", + cancel: "Batal", + enterCodeFromImage: "Untuk melanjutkan, silakan masukkan kode dari gambar di bawah ini." +}; +globalThis.$altcha.i18n.set("id", i18n$c); +const i18n$b = { + ariaLinkLabel: "Altcha (เว็บไซต์ทางการ)", + enterCode: "ป้อนรหัส", + enterCodeAria: "ป้อนรหัสที่คุณได้ยิน กด Space เพื่อเล่นเสียง", + error: "การตรวจสอบล้มเหลว กรุณาลองอีกครั้งภายหลัง", + expired: "การตรวจสอบหมดอายุ กรุณาลองใหม่", + footer: 'ป้องกันโดย ALTCHA', + getAudioChallenge: "รับการท้าทายเสียง", + label: "ฉันไม่ใช่บอท", + loading: "กำลังโหลด...", + reload: "โหลดใหม่", + verify: "ตรวจสอบ", + verificationRequired: "จำเป็นต้องตรวจสอบ!", + verified: "ตรวจสอบแล้ว", + verifying: "กำลังตรวจสอบ...", + waitAlert: "กำลังตรวจสอบ... กรุณารอ", + cancel: "ยกเลิก", + enterCodeFromImage: "เพื่อดำเนินการต่อ โปรดป้อนรหัสจากรูปภาพด้านล่าง" +}; +globalThis.$altcha.i18n.set("th", i18n$b); +const i18n$a = { + ariaLinkLabel: "Altcha (trang web chính thức)", + enterCode: "Nhập mã", + enterCodeAria: "Nhập mã bạn nghe được. Nhấn Phím cách để phát âm thanh.", + error: "Xác minh thất bại. Vui lòng thử lại sau.", + expired: "Xác minh đã hết hạn. Vui lòng thử lại.", + footer: 'Được bảo vệ bởi ALTCHA', + getAudioChallenge: "Nhận thử thách âm thanh", + label: "Tôi không phải là robot", + loading: "Đang tải...", + reload: "Tải lại", + verify: "Xác minh", + verificationRequired: "Yêu cầu xác minh!", + verified: "Đã xác minh", + verifying: "Đang xác minh...", + waitAlert: "Đang xác minh... vui lòng chờ.", + cancel: "Hủy bỏ", + enterCodeFromImage: "Để tiếp tục, vui lòng nhập mã từ hình ảnh bên dưới." +}; +globalThis.$altcha.i18n.set("vi", i18n$a); +const i18n$9 = { + ariaLinkLabel: "Altcha (الموقع الرسمي)", + enterCode: "أدخل الرمز", + enterCodeAria: "أدخل الرمز الذي تسمعه. اضغط على المسافة لتشغيل الصوت.", + error: "فشل التحقق. حاول مرة أخرى لاحقاً.", + expired: "انتهت صلاحية التحقق. حاول مرة أخرى.", + footer: 'محمي بواسطة ALTCHA', + getAudioChallenge: "احصل على تحدي صوتي", + label: "أنا لست روبوتاً", + loading: "جارٍ التحميل...", + reload: "إعادة تحميل", + verify: "تحقق", + verificationRequired: "مطلوب التحقق!", + verified: "تم التحقق", + verifying: "جارٍ التحقق...", + waitAlert: "جارٍ التحقق... يرجى الانتظار.", + cancel: "إلغاء", + enterCodeFromImage: "للمتابعة، يرجى إدخال الرمز من الصورة أدناه." +}; +globalThis.$altcha.i18n.set("ar", i18n$9); +const i18n$8 = { + ariaLinkLabel: "Altcha (وب‌سایت رسمی)", + enterCode: "کد را وارد کنید", + enterCodeAria: "کدی که می‌شنوید را وارد کنید. برای پخش صدا Space را فشار دهید.", + error: "احراز هویت ناموفق بود. بعداً دوباره تلاش کنید.", + expired: "احراز هویت منقضی شد. دوباره تلاش کنید.", + footer: 'محافظت شده توسط ALTCHA', + getAudioChallenge: "دریافت چالش صوتی", + label: "من ربات نیستم", + loading: "در حال بارگذاری...", + reload: "بارگذاری مجدد", + verify: "تایید", + verificationRequired: "احراز هویت لازم است!", + verified: "تایید شد", + verifying: "در حال تایید...", + waitAlert: "در حال تایید... لطفا منتظر بمانید.", + cancel: "لغو کردن", + enterCodeFromImage: "برای ادامه، لطفاً کد تصویر زیر را وارد کنید." +}; +globalThis.$altcha.i18n.set("fa", i18n$8); +const i18n$7 = { + ariaLinkLabel: "Altcha (אתר רשמי)", + enterCode: "הזן קוד", + enterCodeAria: "הזן את הקוד שאתה שומע. לחץ על רווח להפעלת השמע.", + error: "האימות נכשל. נסה שוב מאוחר יותר.", + expired: "תוקף האימות פג. נסה שוב.", + footer: 'מוגן על ידי ALTCHA', + getAudioChallenge: "קבל אתגר שמע", + label: "אני לא רובוט", + loading: "טוען...", + reload: "טען מחדש", + verify: "אמת", + verificationRequired: "נדרש אימות!", + verified: "אומת", + verifying: "מאמת...", + waitAlert: "מבצע אימות... אנא המתן.", + cancel: "ביטול", + enterCodeFromImage: "כדי להמשיך, אנא הזן את הקוד מהתמונה למטה." +}; +globalThis.$altcha.i18n.set("he", i18n$7); +const i18n$6 = { + ariaLinkLabel: "Altcha (resmi web sitesi)", + enterCode: "Kodu girin", + enterCodeAria: "Duyduğunuz kodu girin. Ses dosyasını oynatmak için Boşluk tuşuna basın.", + error: "Doğrulama başarısız oldu. Lütfen daha sonra tekrar deneyin.", + expired: "Doğrulama süresi doldu. Lütfen tekrar deneyin.", + footer: 'ALTCHA tarafından korunuyor ALTCHA', + getAudioChallenge: "Sesli doğrulama al", + label: "Ben robot değilim", + loading: "Yükleniyor...", + reload: "Yeniden yükle", + verify: "Doğrula", + verificationRequired: "Doğrulama gerekli!", + verified: "Doğrulandı", + verifying: "Doğrulama yapılıyor...", + waitAlert: "Doğrulama yapılıyor... lütfen bekleyin.", + cancel: "İptal", + enterCodeFromImage: "Devam etmek için lütfen aşağıdaki resimdeki kodu girin." +}; +globalThis.$altcha.i18n.set("tr", i18n$6); +const i18n$5 = { + ariaLinkLabel: "Altcha (rəsmi vebsayt)", + enterCode: "Kodu daxil edin", + enterCodeAria: "Eşitdiyiniz kodu daxil edin. Səsi dinləmək üçün Boşluq düyməsinə basın.", + error: "Təsdiqləmə uğursuz oldu. Daha sonra yenidən cəhd edin.", + expired: "Təsdiqləmə vaxtı bitdi. Yenidən cəhd edin.", + footer: 'Qorunur ALTCHA tərəfindən', + getAudioChallenge: "Audio tapşırıq alın", + label: "Mən robot deyiləm", + loading: "Yüklənir...", + reload: "Yenilə", + verify: "Təsdiqlə", + verificationRequired: "Təsdiqləmə tələb olunur!", + verified: "Təsdiqləndi", + verifying: "Təsdiqlənir...", + waitAlert: "Təsdiqlənir... zəhmət olmasa gözləyin.", + cancel: "İmtina et", + enterCodeFromImage: "Davam etmək üçün, zəhmət olmasa aşağıdakı şəkildəki kodu daxil edin." +}; +globalThis.$altcha.i18n.set("az", i18n$5); +const i18n$4 = { + ariaLinkLabel: "Altcha (պաշտոնական կայք)", + enterCode: "Մուտքագրեք կոդը", + enterCodeAria: "Մուտքագրեք այն կոդը, որը լսում եք։ Ձայնը նվագելու համար սեղմեք բացատ (Space):", + error: "Հաստատումը ձախողվեց։ Փորձեք ավելի ուշ։", + expired: "Հաստատման ժամկետը լրացել է։ Փորձեք կրկին։", + footer: 'Պաշտպանված է ALTCHA-ի կողմից', + getAudioChallenge: "Ստանալ ձայնային առաջադրանք", + label: "Ես ռոբոտ չեմ", + loading: "Բեռնվում է...", + reload: "Թարմացնել", + verify: "Հաստատել", + verificationRequired: "Պահանջվում է հաստատում։", + verified: "Հաստատված է", + verifying: "Հաստատվում է...", + waitAlert: "Հաստատվում է... խնդրում ենք սպասել։", + cancel: "Չեղարկել", + enterCodeFromImage: "Շարունակելու համար, խնդրում ենք մուտագրել ստորև պատկերից վերցված կոդը:" +}; +globalThis.$altcha.i18n.set("hy", i18n$4); +const i18n$3 = { + ariaLinkLabel: "Altcha (ოფიციალური ვებსაიტი)", + enterCode: "შეიყვანეთ კოდი", + enterCodeAria: "შეიყვანეთ კოდი, რომელსაც გაიგონებთ. აუდიოს მოსასმენად დააჭირეთ Space-ს.", + error: "ვერიფიკაცია ჩაიშალა. სცადეთ მოგვიანებით.", + expired: "ვერიფიკაციის ვადა გავიდა. სცადეთ ხელახლა.", + footer: 'დაცულია ALTCHA-ით', + getAudioChallenge: "მიიღეთ აუდიო გამოწვევა", + label: "მე არ ვარ რობოტი", + loading: "იტვირთება...", + reload: "განახლება", + verify: "დადასტურება", + verificationRequired: "საჭიროა ვერიფიკაცია!", + verified: "დადასტურებულია", + verifying: "დადასტურება მიმდინარეობს...", + waitAlert: "დადასტურება მიმდინარეობს... გთხოვთ, დაიცადეთ.", + cancel: "გაუქმება", + enterCodeFromImage: "გაგრძელების მიზნით, გთხოვთ შეიყვანოთ კოდი ქვემოთ მოცემული სურათიდან." +}; +globalThis.$altcha.i18n.set("ka", i18n$3); +const i18n$2 = { + ariaLinkLabel: "Altcha (ресми веб-сайт)", + enterCode: "Кодты енгізіңіз", + enterCodeAria: "Естіген кодыңызды енгізіңіз. Аудионы ойнату үшін Бос орынды басыңыз.", + error: "Тексеру сәтсіз аяқталды. Кейінірек қайталаңыз.", + expired: "Тексеру мерзімі аяқталды. Қайталаңыз.", + footer: 'ALTCHA қорғайды', + getAudioChallenge: "Аудио сынақ алу", + label: "Мен робот емеспін", + loading: "Жүктелуде...", + reload: "Қайта жүктеу", + verify: "Тексеру", + verificationRequired: "Тексеру талап етіледі!", + verified: "Тексерілді", + verifying: "Тексеруде...", + waitAlert: "Тексерілуде... күте тұрыңыз.", + cancel: "Болдыру", + enterCodeFromImage: "Жалғастыру үшін төмендегі суреттегі кодты енгізіңіз." +}; +globalThis.$altcha.i18n.set("kk", i18n$2); +const i18n$1 = { + ariaLinkLabel: "Altcha (resmi web sahypa)", + enterCode: "Kody giriziň", + enterCodeAria: "Eşiden kodyňyzy giriziň. Sesli görkezmäni diňlemek üçin Space basyň.", + error: "Barlamak şowsuz boldy. Has soňrak synanyşyň.", + expired: "Barlamanyň möhleti gutardy. Gaýtadan synanyşyň.", + footer: 'Goralan ALTCHA tarapyndan', + getAudioChallenge: "Sesli tabşyryk alyň", + label: "Men robot däl", + loading: "Ýüklenýär...", + reload: "Täzeden ýükle", + verify: "Barla", + verificationRequired: "Barlamak zerurdyr!", + verified: "Barlandy", + verifying: "Barlanýar...", + waitAlert: "Barlanýar... garaşyň.", + cancel: "Ýapmak", + enterCodeFromImage: "Dowam etmek üçin, aşakdaky suratyň koduny giriziň." +}; +globalThis.$altcha.i18n.set("tk", i18n$1); +const i18n = { + ariaLinkLabel: "Altcha (rasmiy veb-sayt)", + enterCode: "Kodni kiriting", + enterCodeAria: "Eshitgan kodingizni kiriting. Audioni ijro etish uchun Bo'sh joy tugmasini bosing.", + error: "Tekshiruv muvaffaqiyatsiz tugadi. Keyinroq qayta urinib ko'ring.", + expired: "Tekshiruv muddati tugadi. Qayta urinib ko'ring.", + footer: 'ALTCHA tomonidan himoyalangan', + getAudioChallenge: "Audio sinovni olish", + label: "Men robot emasman", + loading: "Yuklanmoqda...", + reload: "Qayta yuklash", + verify: "Tekshirish", + verificationRequired: "Tekshiruv talab qilinadi!", + verified: "Tekshirildi", + verifying: "Tekshirilmoqda...", + waitAlert: "Tekshirilmoqda... iltimos kuting.", + cancel: "Bekor qilish", + enterCodeFromImage: "Davom etish uchun, iltimos, quyidagi rasmda ko'rsatilgan kodni kiriting." +}; +globalThis.$altcha.i18n.set("uz", i18n); diff --git a/frontend/node_modules/altcha/dist/i18n/asia.umd.cjs b/frontend/node_modules/altcha/dist/i18n/asia.umd.cjs new file mode 100644 index 0000000..0cd611f --- /dev/null +++ b/frontend/node_modules/altcha/dist/i18n/asia.umd.cjs @@ -0,0 +1,593 @@ +(function(factory) { + typeof define === "function" && define.amd ? define(factory) : factory(); +})((function() { + "use strict"; + const noop = () => { + }; + function safe_not_equal(a, b) { + return a != a ? b == b : a !== b || a !== null && typeof a === "object" || typeof a === "function"; + } + function subscribe_to_store(store2, run, invalidate) { + if (store2 == null) { + run(void 0); + return noop; + } + const unsub = untrack( + () => store2.subscribe( + run, + // @ts-expect-error + invalidate + ) + ); + return unsub.unsubscribe ? () => unsub.unsubscribe() : unsub; + } + const subscriber_queue = []; + function writable(value, start = noop) { + let stop = null; + const subscribers = /* @__PURE__ */ new Set(); + function set(new_value) { + if (safe_not_equal(value, new_value)) { + value = new_value; + if (stop) { + const run_queue = !subscriber_queue.length; + for (const subscriber of subscribers) { + subscriber[1](); + subscriber_queue.push(subscriber, value); + } + if (run_queue) { + for (let i = 0; i < subscriber_queue.length; i += 2) { + subscriber_queue[i][0](subscriber_queue[i + 1]); + } + subscriber_queue.length = 0; + } + } + } + } + function update(fn) { + set(fn( + /** @type {T} */ + value + )); + } + function subscribe(run, invalidate = noop) { + const subscriber = [run, invalidate]; + subscribers.add(subscriber); + if (subscribers.size === 1) { + stop = start(set, update) || noop; + } + run( + /** @type {T} */ + value + ); + return () => { + subscribers.delete(subscriber); + if (subscribers.size === 0 && stop) { + stop(); + stop = null; + } + }; + } + return { set, update, subscribe }; + } + function get(store2) { + let value; + subscribe_to_store(store2, (_) => value = _)(); + return value; + } + let untracking = false; + function untrack(fn) { + var previous_untracking = untracking; + try { + untracking = true; + return fn(); + } finally { + untracking = previous_untracking; + } + } + function store(defaultValue) { + const scope = { + get: (name) => { + return get(scope.store)[name]; + }, + set: (name, value) => { + if (typeof name === "string") { + Object.assign(get(scope.store), { + [name]: value + }); + } else { + Object.assign(get(scope.store), name); + } + scope.store.set(get(scope.store)); + }, + store: writable(defaultValue) + }; + return scope; + } + globalThis.$altcha = globalThis.$altcha || { + algorithms: /* @__PURE__ */ new Map(), + defaults: store({}), + i18n: store({}), + instances: /* @__PURE__ */ new Set(), + plugins: /* @__PURE__ */ new Set() + }; + const i18n$n = { + ariaLinkLabel: "Altcha (官方网站)", + enterCode: "输入代码", + enterCodeAria: "输入您听到的代码。按空格键播放音频。", + error: "验证失败。稍后再试。", + expired: "验证已过期。请重试。", + footer: '由 ALTCHA 保护', + getAudioChallenge: "获取音频挑战", + label: "我不是机器人", + loading: "加载中...", + reload: "重新加载", + verify: "验证", + verificationRequired: "需要验证!", + verified: "已验证", + verifying: "正在验证...", + waitAlert: "正在验证... 请稍等。", + cancel: "取消", + enterCodeFromImage: "为继续操作,请输入下图中显示的验证码。" + }; + globalThis.$altcha.i18n.set("zh-cn", i18n$n); + const i18n$m = { + ariaLinkLabel: "Altcha (官方網站)", + cancel: "取消", + enterCode: "輸入代碼", + enterCodeAria: "輸入你聽到嘅代碼。按空格鍵播放音訊。", + enterCodeFromImage: "要繼續,請輸入下面圖片入面嘅代碼。", + error: "驗證失敗。請稍後再試。", + expired: "驗證已過期。請再試一次。", + footer: '由 ALTCHA 提供保護', + getAudioChallenge: "取得音訊驗證", + label: "我唔係機械人", + loading: "載入中...", + reload: "重新載入", + verify: "驗證", + verificationRequired: "需要驗證!", + verified: "已驗證", + verifying: "驗證中...", + waitAlert: "驗證中... 請稍候。" + }; + globalThis.$altcha.i18n.set("zh-hk", i18n$m); + const i18n$l = { + ariaLinkLabel: "Altcha (官方網站)", + enterCode: "輸入代碼", + enterCodeAria: "輸入您聽到的代碼。按空格鍵播放音頻。", + error: "驗證失敗。稍後再試。", + expired: "驗證已過期。請重試。", + footer: '由 ALTCHA 保護', + getAudioChallenge: "獲取音頻挑戰", + label: "我不是機器人", + loading: "載入中...", + reload: "重新載入", + verify: "驗證", + verificationRequired: "需要驗證!", + verified: "已驗證", + verifying: "正在驗證...", + waitAlert: "正在驗證... 請稍等。", + cancel: "取消", + enterCodeFromImage: "若要繼續,請輸入下方的圖片驗證碼。" + }; + globalThis.$altcha.i18n.set("zh-tw", i18n$l); + const i18n$k = { + ariaLinkLabel: "Altcha (公式ウェブサイト)", + enterCode: "コードを入力", + enterCodeAria: "聞こえるコードを入力してください。スペースキーを押して音声を再生します。", + error: "認証に失敗しました。後でもう一度試してください。", + expired: "認証が期限切れです。再試行してください。", + footer: '保護されています ALTCHA', + getAudioChallenge: "音声チャレンジを取得", + label: "私はロボットではありません", + loading: "読み込み中...", + reload: "再読み込み", + verify: "確認", + verificationRequired: "認証が必要です!", + verified: "確認済み", + verifying: "確認中...", + waitAlert: "確認中...少々お待ちください。", + cancel: "キャンセル", + enterCodeFromImage: "続行するには、以下の画像からコードを入力してください。" + }; + globalThis.$altcha.i18n.set("ja", i18n$k); + const i18n$j = { + ariaLinkLabel: "Altcha (공식 웹사이트)", + enterCode: "코드 입력", + enterCodeAria: "들리는 코드를 입력하세요. 스페이스 바를 눌러 오디오를 재생합니다.", + error: "인증 실패. 나중에 다시 시도해주세요.", + expired: "인증이 만료되었습니다. 다시 시도해주세요.", + footer: 'ALTCHA에서 보호됨 ALTCHA', + getAudioChallenge: "오디오 챌린지 받기", + label: "저는 로봇이 아닙니다", + loading: "로딩 중...", + reload: "새로 고침", + verify: "확인", + verificationRequired: "인증이 필요합니다!", + verified: "확인됨", + verifying: "확인 중...", + waitAlert: "확인 중... 잠시만 기다려주세요.", + cancel: "취소", + enterCodeFromImage: "계속 진행하려면 아래 이미지에서 코드를 입력하세요." + }; + globalThis.$altcha.i18n.set("ko", i18n$j); + const i18n$i = { + ariaLinkLabel: "Altcha (आधिकारिक वेबसाइट)", + enterCode: "कोड दर्ज करेंं", + enterCodeAria: "आप जो कोड सुनते हैं उसे दर्ज करें। ऑडियो चलाने के लिए स्पेस दबाएं।", + error: "सत्यापन विफल। कृपया बाद में फिर से प्रयास करें।", + expired: "सत्यापन समाप्त हो गया है। कृपया पुनः प्रयास करें।", + footer: 'द्वारा संरक्षित ALTCHA', + getAudioChallenge: "ऑडियो चुनौती प्राप्त करें", + label: "मैं रोबोट नहीं हूँ", + loading: "लोड हो रहा है...", + reload: "पुनः लोड करें", + verify: "सत्यापित करें", + verificationRequired: "सत्यापन आवश्यक है!", + verified: "सत्यापित", + verifying: "सत्यापित कर रहे हैं...", + waitAlert: "सत्यापित किया जा रहा है... कृपया प्रतीक्षा करें।", + cancel: "रद्द करें", + enterCodeFromImage: "आगे बढ़ने के लिए, कृपया नीचे दी गई छवि से कोड दर्ज करें।" + }; + globalThis.$altcha.i18n.set("hi", i18n$i); + const i18n$h = { + ariaLinkLabel: "Altcha (অফিসিয়াল ওয়েবসাইট)", + enterCode: "কোড লিখুন", + enterCodeAria: "আপনি যে কোড শুনতে পান তা লিখুন। অডিও প্লে করতে স্পেস বাটন টিপুন।", + error: "যাচাইকরণ ব্যর্থ হয়েছে। পরে আবার চেষ্টা করুন।", + expired: "যাচাইকরণ সময়সীমা শেষ হয়েছে। আবার চেষ্টা করুন।", + footer: 'দ্বারা সুরক্ষিত ALTCHA', + getAudioChallenge: "অডিও চ্যালেঞ্জ নিন", + label: "আমি রোবট নই", + loading: "লোড হচ্ছে...", + reload: "পুনরায় লোড করুন", + verify: "যাচাই করুন", + verificationRequired: "যাচাই প্রয়োজন!", + verified: "যাচাই করা হয়েছে", + verifying: "যাচাই করা হচ্ছে...", + waitAlert: "যাচাই করা হচ্ছে... দয়া করে অপেক্ষা করুন।", + cancel: "বাতিল করুন", + enterCodeFromImage: "এগিয়ে যেতে, অনুগ্রহ করে নীচের চিত্র থেকে কোডটি প্রবেশ করান।" + }; + globalThis.$altcha.i18n.set("bn", i18n$h); + const i18n$g = { + ariaLinkLabel: "Altcha (अधिकृत संकेतस्थळ)", + enterCode: "कोड टाकाा", + enterCodeAria: "तुम्ही ऐकत असलेला कोड टाका. ऑडिओ प्ले करण्यासाठी स्पेस दाबा.", + error: "पुष्टीकरण अयशस्वी झाले. कृपया नंतर पुन्हा प्रयत्न करा.", + expired: "पुष्टीकरण कालबाह्य झाले आहे. कृपया पुन्हा प्रयत्न करा.", + footer: 'द्वारे संरक्षित ALTCHA', + getAudioChallenge: "ऑडिओ चॅलेंज मिळवा", + label: "मी रोबोट नाही", + loading: "लोड होत आहे...", + reload: "पुन्हा लोड करा", + verify: "पुष्टीकरण करा", + verificationRequired: "पडताळणी आवश्यक आहे!", + verified: "पुष्टीकरण झाले", + verifying: "पुष्टीकरण करत आहे...", + waitAlert: "पुष्टीकरण करत आहे... कृपया थोडा वेळ थांबा.", + cancel: "रद्द करा", + enterCodeFromImage: "पुढे जाण्यासाठी, कृपया खालील प्रतिमेतील कोड प्रविष्ट करा." + }; + globalThis.$altcha.i18n.set("mr", i18n$g); + const i18n$f = { + ariaLinkLabel: "Altcha (అధికారిక వెబ్‌సైట్)", + enterCode: "కోడ్‌ని నమోదు చేయండి", + enterCodeAria: "మీరు విన్న కోడ్‌ని నమోదు చేయండి. ఆడియో ప్లే చేయడానికి స్పేస్‌ను నొక్కండి.", + error: "చెకింగ్ విఫలమైంది. దయచేసి మరల ప్రయత్నించండి.", + expired: "చెకింగ్ కాలం ముగిసింది. దయచేసి మరల ప్రయత్నించండి.", + footer: 'ఈ సైట్ రక్షించబడింది ALTCHA', + getAudioChallenge: "ఆడియో ఛాలెంజ్ పొందండి", + label: "నేను రోబోట్ కాదు", + loading: "లోడ్ అవుతోంది...", + reload: "మళ్ళీ లోడ్ చేయండి", + verify: "ధ్రువీకరించు", + verificationRequired: "ధృవీకరణ అవసరం!", + verified: "ధ్రువీకరించబడింది", + verifying: "ధ్రువీకరణ జరుగుతుంది...", + waitAlert: "ధ్రువీకరణ జరుగుతుంది... దయచేసి వేచి ఉండండి.", + cancel: "రద్దు చేయండి", + enterCodeFromImage: "కొనసాగడానికి, దయచేసి క్రింది చిత్రంలో ఉన్న కోడ్‌ను నమోదు చేయండి." + }; + globalThis.$altcha.i18n.set("te", i18n$f); + const i18n$e = { + ariaLinkLabel: "Altcha (அதிகாரப்பூர்வ வலைத்தளம்)", + enterCode: "குறியீட்டை உள்ளிடவும்", + enterCodeAria: "நீங்கள் கேட்கும் குறியீட்டை உள்ளிடவும். ஆடியோவை இயக்க Space ஐ அழுத்தவும்.", + error: "சரிபார்ப்பு தோல்வி. பிறகு மீண்டும் முயற்சிக்கவும்.", + expired: "சரிபார்ப்பு காலாவதியானது. மீண்டும் முயற்சிக்கவும்.", + footer: 'மூலமாக பாதுகாக்கப்பட்டவை ALTCHA', + getAudioChallenge: "ஒலி சவாலை பெறவும்", + label: "நான் ரோபோடான அல்ல", + loading: "செயலாக்கம்...", + reload: "மீண்டும் புதுப்பிக்கவும்", + verify: "சரிபார்க்கவும்", + verificationRequired: "சரிபார்ப்பு தேவை!", + verified: "சரிபார்க்கப்பட்டது", + verifying: "சரிபார்க்கப்படுகிறது...", + waitAlert: "சரிபார்க்கப்படுகிறது... தயவுசெய்து காத்திருக்கவும்.", + cancel: "ரத்துசெய்", + enterCodeFromImage: "தொடர, கீழே உள்ள படத்திலிருந்து குறியீட்டை உள்ளிடவும்." + }; + globalThis.$altcha.i18n.set("ta", i18n$e); + const i18n$d = { + ariaLinkLabel: "Altcha (سرکاری ویب سائٹ)", + enterCode: "کوڈ درج کریں", + enterCodeAria: "جو کوڈ آپ سنتے ہیں وہ درج کریں۔ آڈیو چلانے کے لیے اسپیس دبائیں۔", + error: "توثیق ناکام ہو گئی۔ براہ کرم بعد میں دوبارہ کوشش کریں۔", + expired: "توثیق کی مدت ختم ہو گئی ہے۔ براہ کرم دوبارہ کوشش کریں۔", + footer: 'کے ذریعے محفوظ ALTCHA', + getAudioChallenge: "آڈیو چیلنج حاصل کریں", + label: "میں روبوٹ نہیں ہوں", + loading: "لوڈ ہو رہا ہے...", + reload: "دوبارہ لوڈ کریں", + verify: "توثیق کریں", + verificationRequired: "تصدیق ضروری ہے!", + verified: "توثیق شدہ", + verifying: "توثیق ہو رہی ہے...", + waitAlert: "توثیق ہو رہی ہے... براہ کرم انتظار کریں۔", + cancel: "منسوخ کریں", + enterCodeFromImage: "اگلے مرحلے پر جانے کے لیے، براہ کرم نیچے دی گئی تصویر سے کوڈ درج کریں۔" + }; + globalThis.$altcha.i18n.set("ur", i18n$d); + const i18n$c = { + ariaLinkLabel: "Altcha (situs web resmi)", + enterCode: "Masukkan kode", + enterCodeAria: "Masukkan kode yang Anda dengar. Tekan Spasi untuk memutar audio.", + error: "Verifikasi gagal. Coba lagi nanti.", + expired: "Verifikasi telah kedaluwarsa. Coba lagi.", + footer: 'Dilindungi oleh ALTCHA', + getAudioChallenge: "Dapatkan tantangan audio", + label: "Saya bukan robot", + loading: "Memuat...", + reload: "Muat ulang", + verify: "Verifikasi", + verificationRequired: "Verifikasi diperlukan!", + verified: "Terverifikasi", + verifying: "Memverifikasi...", + waitAlert: "Memverifikasi... harap tunggu.", + cancel: "Batal", + enterCodeFromImage: "Untuk melanjutkan, silakan masukkan kode dari gambar di bawah ini." + }; + globalThis.$altcha.i18n.set("id", i18n$c); + const i18n$b = { + ariaLinkLabel: "Altcha (เว็บไซต์ทางการ)", + enterCode: "ป้อนรหัส", + enterCodeAria: "ป้อนรหัสที่คุณได้ยิน กด Space เพื่อเล่นเสียง", + error: "การตรวจสอบล้มเหลว กรุณาลองอีกครั้งภายหลัง", + expired: "การตรวจสอบหมดอายุ กรุณาลองใหม่", + footer: 'ป้องกันโดย ALTCHA', + getAudioChallenge: "รับการท้าทายเสียง", + label: "ฉันไม่ใช่บอท", + loading: "กำลังโหลด...", + reload: "โหลดใหม่", + verify: "ตรวจสอบ", + verificationRequired: "จำเป็นต้องตรวจสอบ!", + verified: "ตรวจสอบแล้ว", + verifying: "กำลังตรวจสอบ...", + waitAlert: "กำลังตรวจสอบ... กรุณารอ", + cancel: "ยกเลิก", + enterCodeFromImage: "เพื่อดำเนินการต่อ โปรดป้อนรหัสจากรูปภาพด้านล่าง" + }; + globalThis.$altcha.i18n.set("th", i18n$b); + const i18n$a = { + ariaLinkLabel: "Altcha (trang web chính thức)", + enterCode: "Nhập mã", + enterCodeAria: "Nhập mã bạn nghe được. Nhấn Phím cách để phát âm thanh.", + error: "Xác minh thất bại. Vui lòng thử lại sau.", + expired: "Xác minh đã hết hạn. Vui lòng thử lại.", + footer: 'Được bảo vệ bởi ALTCHA', + getAudioChallenge: "Nhận thử thách âm thanh", + label: "Tôi không phải là robot", + loading: "Đang tải...", + reload: "Tải lại", + verify: "Xác minh", + verificationRequired: "Yêu cầu xác minh!", + verified: "Đã xác minh", + verifying: "Đang xác minh...", + waitAlert: "Đang xác minh... vui lòng chờ.", + cancel: "Hủy bỏ", + enterCodeFromImage: "Để tiếp tục, vui lòng nhập mã từ hình ảnh bên dưới." + }; + globalThis.$altcha.i18n.set("vi", i18n$a); + const i18n$9 = { + ariaLinkLabel: "Altcha (الموقع الرسمي)", + enterCode: "أدخل الرمز", + enterCodeAria: "أدخل الرمز الذي تسمعه. اضغط على المسافة لتشغيل الصوت.", + error: "فشل التحقق. حاول مرة أخرى لاحقاً.", + expired: "انتهت صلاحية التحقق. حاول مرة أخرى.", + footer: 'محمي بواسطة ALTCHA', + getAudioChallenge: "احصل على تحدي صوتي", + label: "أنا لست روبوتاً", + loading: "جارٍ التحميل...", + reload: "إعادة تحميل", + verify: "تحقق", + verificationRequired: "مطلوب التحقق!", + verified: "تم التحقق", + verifying: "جارٍ التحقق...", + waitAlert: "جارٍ التحقق... يرجى الانتظار.", + cancel: "إلغاء", + enterCodeFromImage: "للمتابعة، يرجى إدخال الرمز من الصورة أدناه." + }; + globalThis.$altcha.i18n.set("ar", i18n$9); + const i18n$8 = { + ariaLinkLabel: "Altcha (وب‌سایت رسمی)", + enterCode: "کد را وارد کنید", + enterCodeAria: "کدی که می‌شنوید را وارد کنید. برای پخش صدا Space را فشار دهید.", + error: "احراز هویت ناموفق بود. بعداً دوباره تلاش کنید.", + expired: "احراز هویت منقضی شد. دوباره تلاش کنید.", + footer: 'محافظت شده توسط ALTCHA', + getAudioChallenge: "دریافت چالش صوتی", + label: "من ربات نیستم", + loading: "در حال بارگذاری...", + reload: "بارگذاری مجدد", + verify: "تایید", + verificationRequired: "احراز هویت لازم است!", + verified: "تایید شد", + verifying: "در حال تایید...", + waitAlert: "در حال تایید... لطفا منتظر بمانید.", + cancel: "لغو کردن", + enterCodeFromImage: "برای ادامه، لطفاً کد تصویر زیر را وارد کنید." + }; + globalThis.$altcha.i18n.set("fa", i18n$8); + const i18n$7 = { + ariaLinkLabel: "Altcha (אתר רשמי)", + enterCode: "הזן קוד", + enterCodeAria: "הזן את הקוד שאתה שומע. לחץ על רווח להפעלת השמע.", + error: "האימות נכשל. נסה שוב מאוחר יותר.", + expired: "תוקף האימות פג. נסה שוב.", + footer: 'מוגן על ידי ALTCHA', + getAudioChallenge: "קבל אתגר שמע", + label: "אני לא רובוט", + loading: "טוען...", + reload: "טען מחדש", + verify: "אמת", + verificationRequired: "נדרש אימות!", + verified: "אומת", + verifying: "מאמת...", + waitAlert: "מבצע אימות... אנא המתן.", + cancel: "ביטול", + enterCodeFromImage: "כדי להמשיך, אנא הזן את הקוד מהתמונה למטה." + }; + globalThis.$altcha.i18n.set("he", i18n$7); + const i18n$6 = { + ariaLinkLabel: "Altcha (resmi web sitesi)", + enterCode: "Kodu girin", + enterCodeAria: "Duyduğunuz kodu girin. Ses dosyasını oynatmak için Boşluk tuşuna basın.", + error: "Doğrulama başarısız oldu. Lütfen daha sonra tekrar deneyin.", + expired: "Doğrulama süresi doldu. Lütfen tekrar deneyin.", + footer: 'ALTCHA tarafından korunuyor ALTCHA', + getAudioChallenge: "Sesli doğrulama al", + label: "Ben robot değilim", + loading: "Yükleniyor...", + reload: "Yeniden yükle", + verify: "Doğrula", + verificationRequired: "Doğrulama gerekli!", + verified: "Doğrulandı", + verifying: "Doğrulama yapılıyor...", + waitAlert: "Doğrulama yapılıyor... lütfen bekleyin.", + cancel: "İptal", + enterCodeFromImage: "Devam etmek için lütfen aşağıdaki resimdeki kodu girin." + }; + globalThis.$altcha.i18n.set("tr", i18n$6); + const i18n$5 = { + ariaLinkLabel: "Altcha (rəsmi vebsayt)", + enterCode: "Kodu daxil edin", + enterCodeAria: "Eşitdiyiniz kodu daxil edin. Səsi dinləmək üçün Boşluq düyməsinə basın.", + error: "Təsdiqləmə uğursuz oldu. Daha sonra yenidən cəhd edin.", + expired: "Təsdiqləmə vaxtı bitdi. Yenidən cəhd edin.", + footer: 'Qorunur ALTCHA tərəfindən', + getAudioChallenge: "Audio tapşırıq alın", + label: "Mən robot deyiləm", + loading: "Yüklənir...", + reload: "Yenilə", + verify: "Təsdiqlə", + verificationRequired: "Təsdiqləmə tələb olunur!", + verified: "Təsdiqləndi", + verifying: "Təsdiqlənir...", + waitAlert: "Təsdiqlənir... zəhmət olmasa gözləyin.", + cancel: "İmtina et", + enterCodeFromImage: "Davam etmək üçün, zəhmət olmasa aşağıdakı şəkildəki kodu daxil edin." + }; + globalThis.$altcha.i18n.set("az", i18n$5); + const i18n$4 = { + ariaLinkLabel: "Altcha (պաշտոնական կայք)", + enterCode: "Մուտքագրեք կոդը", + enterCodeAria: "Մուտքագրեք այն կոդը, որը լսում եք։ Ձայնը նվագելու համար սեղմեք բացատ (Space):", + error: "Հաստատումը ձախողվեց։ Փորձեք ավելի ուշ։", + expired: "Հաստատման ժամկետը լրացել է։ Փորձեք կրկին։", + footer: 'Պաշտպանված է ALTCHA-ի կողմից', + getAudioChallenge: "Ստանալ ձայնային առաջադրանք", + label: "Ես ռոբոտ չեմ", + loading: "Բեռնվում է...", + reload: "Թարմացնել", + verify: "Հաստատել", + verificationRequired: "Պահանջվում է հաստատում։", + verified: "Հաստատված է", + verifying: "Հաստատվում է...", + waitAlert: "Հաստատվում է... խնդրում ենք սպասել։", + cancel: "Չեղարկել", + enterCodeFromImage: "Շարունակելու համար, խնդրում ենք մուտագրել ստորև պատկերից վերցված կոդը:" + }; + globalThis.$altcha.i18n.set("hy", i18n$4); + const i18n$3 = { + ariaLinkLabel: "Altcha (ოფიციალური ვებსაიტი)", + enterCode: "შეიყვანეთ კოდი", + enterCodeAria: "შეიყვანეთ კოდი, რომელსაც გაიგონებთ. აუდიოს მოსასმენად დააჭირეთ Space-ს.", + error: "ვერიფიკაცია ჩაიშალა. სცადეთ მოგვიანებით.", + expired: "ვერიფიკაციის ვადა გავიდა. სცადეთ ხელახლა.", + footer: 'დაცულია ALTCHA-ით', + getAudioChallenge: "მიიღეთ აუდიო გამოწვევა", + label: "მე არ ვარ რობოტი", + loading: "იტვირთება...", + reload: "განახლება", + verify: "დადასტურება", + verificationRequired: "საჭიროა ვერიფიკაცია!", + verified: "დადასტურებულია", + verifying: "დადასტურება მიმდინარეობს...", + waitAlert: "დადასტურება მიმდინარეობს... გთხოვთ, დაიცადეთ.", + cancel: "გაუქმება", + enterCodeFromImage: "გაგრძელების მიზნით, გთხოვთ შეიყვანოთ კოდი ქვემოთ მოცემული სურათიდან." + }; + globalThis.$altcha.i18n.set("ka", i18n$3); + const i18n$2 = { + ariaLinkLabel: "Altcha (ресми веб-сайт)", + enterCode: "Кодты енгізіңіз", + enterCodeAria: "Естіген кодыңызды енгізіңіз. Аудионы ойнату үшін Бос орынды басыңыз.", + error: "Тексеру сәтсіз аяқталды. Кейінірек қайталаңыз.", + expired: "Тексеру мерзімі аяқталды. Қайталаңыз.", + footer: 'ALTCHA қорғайды', + getAudioChallenge: "Аудио сынақ алу", + label: "Мен робот емеспін", + loading: "Жүктелуде...", + reload: "Қайта жүктеу", + verify: "Тексеру", + verificationRequired: "Тексеру талап етіледі!", + verified: "Тексерілді", + verifying: "Тексеруде...", + waitAlert: "Тексерілуде... күте тұрыңыз.", + cancel: "Болдыру", + enterCodeFromImage: "Жалғастыру үшін төмендегі суреттегі кодты енгізіңіз." + }; + globalThis.$altcha.i18n.set("kk", i18n$2); + const i18n$1 = { + ariaLinkLabel: "Altcha (resmi web sahypa)", + enterCode: "Kody giriziň", + enterCodeAria: "Eşiden kodyňyzy giriziň. Sesli görkezmäni diňlemek üçin Space basyň.", + error: "Barlamak şowsuz boldy. Has soňrak synanyşyň.", + expired: "Barlamanyň möhleti gutardy. Gaýtadan synanyşyň.", + footer: 'Goralan ALTCHA tarapyndan', + getAudioChallenge: "Sesli tabşyryk alyň", + label: "Men robot däl", + loading: "Ýüklenýär...", + reload: "Täzeden ýükle", + verify: "Barla", + verificationRequired: "Barlamak zerurdyr!", + verified: "Barlandy", + verifying: "Barlanýar...", + waitAlert: "Barlanýar... garaşyň.", + cancel: "Ýapmak", + enterCodeFromImage: "Dowam etmek üçin, aşakdaky suratyň koduny giriziň." + }; + globalThis.$altcha.i18n.set("tk", i18n$1); + const i18n = { + ariaLinkLabel: "Altcha (rasmiy veb-sayt)", + enterCode: "Kodni kiriting", + enterCodeAria: "Eshitgan kodingizni kiriting. Audioni ijro etish uchun Bo'sh joy tugmasini bosing.", + error: "Tekshiruv muvaffaqiyatsiz tugadi. Keyinroq qayta urinib ko'ring.", + expired: "Tekshiruv muddati tugadi. Qayta urinib ko'ring.", + footer: 'ALTCHA tomonidan himoyalangan', + getAudioChallenge: "Audio sinovni olish", + label: "Men robot emasman", + loading: "Yuklanmoqda...", + reload: "Qayta yuklash", + verify: "Tekshirish", + verificationRequired: "Tekshiruv talab qilinadi!", + verified: "Tekshirildi", + verifying: "Tekshirilmoqda...", + waitAlert: "Tekshirilmoqda... iltimos kuting.", + cancel: "Bekor qilish", + enterCodeFromImage: "Davom etish uchun, iltimos, quyidagi rasmda ko'rsatilgan kodni kiriting." + }; + globalThis.$altcha.i18n.set("uz", i18n); +})); diff --git a/frontend/node_modules/altcha/dist/i18n/az.d.ts b/frontend/node_modules/altcha/dist/i18n/az.d.ts new file mode 100644 index 0000000..312bc94 --- /dev/null +++ b/frontend/node_modules/altcha/dist/i18n/az.d.ts @@ -0,0 +1 @@ +declare module 'altcha/i18n/az'; export {}; diff --git a/frontend/node_modules/altcha/dist/i18n/az.js b/frontend/node_modules/altcha/dist/i18n/az.js new file mode 100644 index 0000000..aa33c9b --- /dev/null +++ b/frontend/node_modules/altcha/dist/i18n/az.js @@ -0,0 +1,128 @@ +const noop = () => { +}; +function safe_not_equal(a, b) { + return a != a ? b == b : a !== b || a !== null && typeof a === "object" || typeof a === "function"; +} +function subscribe_to_store(store2, run, invalidate) { + if (store2 == null) { + run(void 0); + return noop; + } + const unsub = untrack( + () => store2.subscribe( + run, + // @ts-expect-error + invalidate + ) + ); + return unsub.unsubscribe ? () => unsub.unsubscribe() : unsub; +} +const subscriber_queue = []; +function writable(value, start = noop) { + let stop = null; + const subscribers = /* @__PURE__ */ new Set(); + function set(new_value) { + if (safe_not_equal(value, new_value)) { + value = new_value; + if (stop) { + const run_queue = !subscriber_queue.length; + for (const subscriber of subscribers) { + subscriber[1](); + subscriber_queue.push(subscriber, value); + } + if (run_queue) { + for (let i = 0; i < subscriber_queue.length; i += 2) { + subscriber_queue[i][0](subscriber_queue[i + 1]); + } + subscriber_queue.length = 0; + } + } + } + } + function update(fn) { + set(fn( + /** @type {T} */ + value + )); + } + function subscribe(run, invalidate = noop) { + const subscriber = [run, invalidate]; + subscribers.add(subscriber); + if (subscribers.size === 1) { + stop = start(set, update) || noop; + } + run( + /** @type {T} */ + value + ); + return () => { + subscribers.delete(subscriber); + if (subscribers.size === 0 && stop) { + stop(); + stop = null; + } + }; + } + return { set, update, subscribe }; +} +function get(store2) { + let value; + subscribe_to_store(store2, (_) => value = _)(); + return value; +} +let untracking = false; +function untrack(fn) { + var previous_untracking = untracking; + try { + untracking = true; + return fn(); + } finally { + untracking = previous_untracking; + } +} +function store(defaultValue) { + const scope = { + get: (name) => { + return get(scope.store)[name]; + }, + set: (name, value) => { + if (typeof name === "string") { + Object.assign(get(scope.store), { + [name]: value + }); + } else { + Object.assign(get(scope.store), name); + } + scope.store.set(get(scope.store)); + }, + store: writable(defaultValue) + }; + return scope; +} +globalThis.$altcha = globalThis.$altcha || { + algorithms: /* @__PURE__ */ new Map(), + defaults: store({}), + i18n: store({}), + instances: /* @__PURE__ */ new Set(), + plugins: /* @__PURE__ */ new Set() +}; +const i18n = { + ariaLinkLabel: "Altcha (rəsmi vebsayt)", + enterCode: "Kodu daxil edin", + enterCodeAria: "Eşitdiyiniz kodu daxil edin. Səsi dinləmək üçün Boşluq düyməsinə basın.", + error: "Təsdiqləmə uğursuz oldu. Daha sonra yenidən cəhd edin.", + expired: "Təsdiqləmə vaxtı bitdi. Yenidən cəhd edin.", + footer: 'Qorunur ALTCHA tərəfindən', + getAudioChallenge: "Audio tapşırıq alın", + label: "Mən robot deyiləm", + loading: "Yüklənir...", + reload: "Yenilə", + verify: "Təsdiqlə", + verificationRequired: "Təsdiqləmə tələb olunur!", + verified: "Təsdiqləndi", + verifying: "Təsdiqlənir...", + waitAlert: "Təsdiqlənir... zəhmət olmasa gözləyin.", + cancel: "İmtina et", + enterCodeFromImage: "Davam etmək üçün, zəhmət olmasa aşağıdakı şəkildəki kodu daxil edin." +}; +globalThis.$altcha.i18n.set("az", i18n); diff --git a/frontend/node_modules/altcha/dist/i18n/az.umd.cjs b/frontend/node_modules/altcha/dist/i18n/az.umd.cjs new file mode 100644 index 0000000..59e9ee3 --- /dev/null +++ b/frontend/node_modules/altcha/dist/i18n/az.umd.cjs @@ -0,0 +1,133 @@ +(function(factory) { + typeof define === "function" && define.amd ? define(factory) : factory(); +})((function() { + "use strict"; + const noop = () => { + }; + function safe_not_equal(a, b) { + return a != a ? b == b : a !== b || a !== null && typeof a === "object" || typeof a === "function"; + } + function subscribe_to_store(store2, run, invalidate) { + if (store2 == null) { + run(void 0); + return noop; + } + const unsub = untrack( + () => store2.subscribe( + run, + // @ts-expect-error + invalidate + ) + ); + return unsub.unsubscribe ? () => unsub.unsubscribe() : unsub; + } + const subscriber_queue = []; + function writable(value, start = noop) { + let stop = null; + const subscribers = /* @__PURE__ */ new Set(); + function set(new_value) { + if (safe_not_equal(value, new_value)) { + value = new_value; + if (stop) { + const run_queue = !subscriber_queue.length; + for (const subscriber of subscribers) { + subscriber[1](); + subscriber_queue.push(subscriber, value); + } + if (run_queue) { + for (let i = 0; i < subscriber_queue.length; i += 2) { + subscriber_queue[i][0](subscriber_queue[i + 1]); + } + subscriber_queue.length = 0; + } + } + } + } + function update(fn) { + set(fn( + /** @type {T} */ + value + )); + } + function subscribe(run, invalidate = noop) { + const subscriber = [run, invalidate]; + subscribers.add(subscriber); + if (subscribers.size === 1) { + stop = start(set, update) || noop; + } + run( + /** @type {T} */ + value + ); + return () => { + subscribers.delete(subscriber); + if (subscribers.size === 0 && stop) { + stop(); + stop = null; + } + }; + } + return { set, update, subscribe }; + } + function get(store2) { + let value; + subscribe_to_store(store2, (_) => value = _)(); + return value; + } + let untracking = false; + function untrack(fn) { + var previous_untracking = untracking; + try { + untracking = true; + return fn(); + } finally { + untracking = previous_untracking; + } + } + function store(defaultValue) { + const scope = { + get: (name) => { + return get(scope.store)[name]; + }, + set: (name, value) => { + if (typeof name === "string") { + Object.assign(get(scope.store), { + [name]: value + }); + } else { + Object.assign(get(scope.store), name); + } + scope.store.set(get(scope.store)); + }, + store: writable(defaultValue) + }; + return scope; + } + globalThis.$altcha = globalThis.$altcha || { + algorithms: /* @__PURE__ */ new Map(), + defaults: store({}), + i18n: store({}), + instances: /* @__PURE__ */ new Set(), + plugins: /* @__PURE__ */ new Set() + }; + const i18n = { + ariaLinkLabel: "Altcha (rəsmi vebsayt)", + enterCode: "Kodu daxil edin", + enterCodeAria: "Eşitdiyiniz kodu daxil edin. Səsi dinləmək üçün Boşluq düyməsinə basın.", + error: "Təsdiqləmə uğursuz oldu. Daha sonra yenidən cəhd edin.", + expired: "Təsdiqləmə vaxtı bitdi. Yenidən cəhd edin.", + footer: 'Qorunur ALTCHA tərəfindən', + getAudioChallenge: "Audio tapşırıq alın", + label: "Mən robot deyiləm", + loading: "Yüklənir...", + reload: "Yenilə", + verify: "Təsdiqlə", + verificationRequired: "Təsdiqləmə tələb olunur!", + verified: "Təsdiqləndi", + verifying: "Təsdiqlənir...", + waitAlert: "Təsdiqlənir... zəhmət olmasa gözləyin.", + cancel: "İmtina et", + enterCodeFromImage: "Davam etmək üçün, zəhmət olmasa aşağıdakı şəkildəki kodu daxil edin." + }; + globalThis.$altcha.i18n.set("az", i18n); +})); diff --git a/frontend/node_modules/altcha/dist/i18n/be.d.ts b/frontend/node_modules/altcha/dist/i18n/be.d.ts new file mode 100644 index 0000000..079325c --- /dev/null +++ b/frontend/node_modules/altcha/dist/i18n/be.d.ts @@ -0,0 +1 @@ +declare module 'altcha/i18n/be'; export {}; diff --git a/frontend/node_modules/altcha/dist/i18n/be.js b/frontend/node_modules/altcha/dist/i18n/be.js new file mode 100644 index 0000000..2bb3512 --- /dev/null +++ b/frontend/node_modules/altcha/dist/i18n/be.js @@ -0,0 +1,128 @@ +const noop = () => { +}; +function safe_not_equal(a, b) { + return a != a ? b == b : a !== b || a !== null && typeof a === "object" || typeof a === "function"; +} +function subscribe_to_store(store2, run, invalidate) { + if (store2 == null) { + run(void 0); + return noop; + } + const unsub = untrack( + () => store2.subscribe( + run, + // @ts-expect-error + invalidate + ) + ); + return unsub.unsubscribe ? () => unsub.unsubscribe() : unsub; +} +const subscriber_queue = []; +function writable(value, start = noop) { + let stop = null; + const subscribers = /* @__PURE__ */ new Set(); + function set(new_value) { + if (safe_not_equal(value, new_value)) { + value = new_value; + if (stop) { + const run_queue = !subscriber_queue.length; + for (const subscriber of subscribers) { + subscriber[1](); + subscriber_queue.push(subscriber, value); + } + if (run_queue) { + for (let i = 0; i < subscriber_queue.length; i += 2) { + subscriber_queue[i][0](subscriber_queue[i + 1]); + } + subscriber_queue.length = 0; + } + } + } + } + function update(fn) { + set(fn( + /** @type {T} */ + value + )); + } + function subscribe(run, invalidate = noop) { + const subscriber = [run, invalidate]; + subscribers.add(subscriber); + if (subscribers.size === 1) { + stop = start(set, update) || noop; + } + run( + /** @type {T} */ + value + ); + return () => { + subscribers.delete(subscriber); + if (subscribers.size === 0 && stop) { + stop(); + stop = null; + } + }; + } + return { set, update, subscribe }; +} +function get(store2) { + let value; + subscribe_to_store(store2, (_) => value = _)(); + return value; +} +let untracking = false; +function untrack(fn) { + var previous_untracking = untracking; + try { + untracking = true; + return fn(); + } finally { + untracking = previous_untracking; + } +} +function store(defaultValue) { + const scope = { + get: (name) => { + return get(scope.store)[name]; + }, + set: (name, value) => { + if (typeof name === "string") { + Object.assign(get(scope.store), { + [name]: value + }); + } else { + Object.assign(get(scope.store), name); + } + scope.store.set(get(scope.store)); + }, + store: writable(defaultValue) + }; + return scope; +} +globalThis.$altcha = globalThis.$altcha || { + algorithms: /* @__PURE__ */ new Map(), + defaults: store({}), + i18n: store({}), + instances: /* @__PURE__ */ new Set(), + plugins: /* @__PURE__ */ new Set() +}; +const i18n = { + ariaLinkLabel: "Altcha (афіцыйны сайт)", + enterCode: "Увядзіце код", + enterCodeAria: "Увядзіце код, які вы чуеце. Націсніце прабел, каб прайграць аўдыё.", + error: "Праверка не прайшла. Паспрабуйце пазней.", + expired: "Тэрмін праверкі скончыўся. Паспрабуйце зноў.", + footer: 'Абаронена ALTCHA', + getAudioChallenge: "Атрымаць аўдыё выклік", + label: "Я не робат", + loading: "Загрузка...", + reload: "Перазагрузіць", + verify: "Праверыць", + verificationRequired: "Патрабуецца праверка!", + verified: "Праверана", + verifying: "Правяраем...", + waitAlert: "Праверка... калі ласка, пачакайце.", + cancel: "Скасаваць", + enterCodeFromImage: "Каб працягнуць, увядзіце код з малюнка ніжэй." +}; +globalThis.$altcha.i18n.set("be", i18n); diff --git a/frontend/node_modules/altcha/dist/i18n/be.umd.cjs b/frontend/node_modules/altcha/dist/i18n/be.umd.cjs new file mode 100644 index 0000000..1dae49f --- /dev/null +++ b/frontend/node_modules/altcha/dist/i18n/be.umd.cjs @@ -0,0 +1,133 @@ +(function(factory) { + typeof define === "function" && define.amd ? define(factory) : factory(); +})((function() { + "use strict"; + const noop = () => { + }; + function safe_not_equal(a, b) { + return a != a ? b == b : a !== b || a !== null && typeof a === "object" || typeof a === "function"; + } + function subscribe_to_store(store2, run, invalidate) { + if (store2 == null) { + run(void 0); + return noop; + } + const unsub = untrack( + () => store2.subscribe( + run, + // @ts-expect-error + invalidate + ) + ); + return unsub.unsubscribe ? () => unsub.unsubscribe() : unsub; + } + const subscriber_queue = []; + function writable(value, start = noop) { + let stop = null; + const subscribers = /* @__PURE__ */ new Set(); + function set(new_value) { + if (safe_not_equal(value, new_value)) { + value = new_value; + if (stop) { + const run_queue = !subscriber_queue.length; + for (const subscriber of subscribers) { + subscriber[1](); + subscriber_queue.push(subscriber, value); + } + if (run_queue) { + for (let i = 0; i < subscriber_queue.length; i += 2) { + subscriber_queue[i][0](subscriber_queue[i + 1]); + } + subscriber_queue.length = 0; + } + } + } + } + function update(fn) { + set(fn( + /** @type {T} */ + value + )); + } + function subscribe(run, invalidate = noop) { + const subscriber = [run, invalidate]; + subscribers.add(subscriber); + if (subscribers.size === 1) { + stop = start(set, update) || noop; + } + run( + /** @type {T} */ + value + ); + return () => { + subscribers.delete(subscriber); + if (subscribers.size === 0 && stop) { + stop(); + stop = null; + } + }; + } + return { set, update, subscribe }; + } + function get(store2) { + let value; + subscribe_to_store(store2, (_) => value = _)(); + return value; + } + let untracking = false; + function untrack(fn) { + var previous_untracking = untracking; + try { + untracking = true; + return fn(); + } finally { + untracking = previous_untracking; + } + } + function store(defaultValue) { + const scope = { + get: (name) => { + return get(scope.store)[name]; + }, + set: (name, value) => { + if (typeof name === "string") { + Object.assign(get(scope.store), { + [name]: value + }); + } else { + Object.assign(get(scope.store), name); + } + scope.store.set(get(scope.store)); + }, + store: writable(defaultValue) + }; + return scope; + } + globalThis.$altcha = globalThis.$altcha || { + algorithms: /* @__PURE__ */ new Map(), + defaults: store({}), + i18n: store({}), + instances: /* @__PURE__ */ new Set(), + plugins: /* @__PURE__ */ new Set() + }; + const i18n = { + ariaLinkLabel: "Altcha (афіцыйны сайт)", + enterCode: "Увядзіце код", + enterCodeAria: "Увядзіце код, які вы чуеце. Націсніце прабел, каб прайграць аўдыё.", + error: "Праверка не прайшла. Паспрабуйце пазней.", + expired: "Тэрмін праверкі скончыўся. Паспрабуйце зноў.", + footer: 'Абаронена ALTCHA', + getAudioChallenge: "Атрымаць аўдыё выклік", + label: "Я не робат", + loading: "Загрузка...", + reload: "Перазагрузіць", + verify: "Праверыць", + verificationRequired: "Патрабуецца праверка!", + verified: "Праверана", + verifying: "Правяраем...", + waitAlert: "Праверка... калі ласка, пачакайце.", + cancel: "Скасаваць", + enterCodeFromImage: "Каб працягнуць, увядзіце код з малюнка ніжэй." + }; + globalThis.$altcha.i18n.set("be", i18n); +})); diff --git a/frontend/node_modules/altcha/dist/i18n/bg.d.ts b/frontend/node_modules/altcha/dist/i18n/bg.d.ts new file mode 100644 index 0000000..dc462db --- /dev/null +++ b/frontend/node_modules/altcha/dist/i18n/bg.d.ts @@ -0,0 +1 @@ +declare module 'altcha/i18n/bg'; export {}; diff --git a/frontend/node_modules/altcha/dist/i18n/bg.js b/frontend/node_modules/altcha/dist/i18n/bg.js new file mode 100644 index 0000000..9482e11 --- /dev/null +++ b/frontend/node_modules/altcha/dist/i18n/bg.js @@ -0,0 +1,128 @@ +const noop = () => { +}; +function safe_not_equal(a, b) { + return a != a ? b == b : a !== b || a !== null && typeof a === "object" || typeof a === "function"; +} +function subscribe_to_store(store2, run, invalidate) { + if (store2 == null) { + run(void 0); + return noop; + } + const unsub = untrack( + () => store2.subscribe( + run, + // @ts-expect-error + invalidate + ) + ); + return unsub.unsubscribe ? () => unsub.unsubscribe() : unsub; +} +const subscriber_queue = []; +function writable(value, start = noop) { + let stop = null; + const subscribers = /* @__PURE__ */ new Set(); + function set(new_value) { + if (safe_not_equal(value, new_value)) { + value = new_value; + if (stop) { + const run_queue = !subscriber_queue.length; + for (const subscriber of subscribers) { + subscriber[1](); + subscriber_queue.push(subscriber, value); + } + if (run_queue) { + for (let i = 0; i < subscriber_queue.length; i += 2) { + subscriber_queue[i][0](subscriber_queue[i + 1]); + } + subscriber_queue.length = 0; + } + } + } + } + function update(fn) { + set(fn( + /** @type {T} */ + value + )); + } + function subscribe(run, invalidate = noop) { + const subscriber = [run, invalidate]; + subscribers.add(subscriber); + if (subscribers.size === 1) { + stop = start(set, update) || noop; + } + run( + /** @type {T} */ + value + ); + return () => { + subscribers.delete(subscriber); + if (subscribers.size === 0 && stop) { + stop(); + stop = null; + } + }; + } + return { set, update, subscribe }; +} +function get(store2) { + let value; + subscribe_to_store(store2, (_) => value = _)(); + return value; +} +let untracking = false; +function untrack(fn) { + var previous_untracking = untracking; + try { + untracking = true; + return fn(); + } finally { + untracking = previous_untracking; + } +} +function store(defaultValue) { + const scope = { + get: (name) => { + return get(scope.store)[name]; + }, + set: (name, value) => { + if (typeof name === "string") { + Object.assign(get(scope.store), { + [name]: value + }); + } else { + Object.assign(get(scope.store), name); + } + scope.store.set(get(scope.store)); + }, + store: writable(defaultValue) + }; + return scope; +} +globalThis.$altcha = globalThis.$altcha || { + algorithms: /* @__PURE__ */ new Map(), + defaults: store({}), + i18n: store({}), + instances: /* @__PURE__ */ new Set(), + plugins: /* @__PURE__ */ new Set() +}; +const i18n = { + ariaLinkLabel: "Altcha (официален уебсайт)", + enterCode: "Въведете код", + enterCodeAria: "Въведете кода, който чувате. Натиснете Space за възпроизвеждане на аудио.", + error: "Проверката неуспешна. Моля, опитайте по-късно.", + expired: "Времето за проверка изтече. Моля, опитайте отново.", + footer: 'Защитено от ALTCHA', + getAudioChallenge: "Аудио проверка", + label: "Аз не съм робот", + loading: "Зареждане...", + reload: "Презареди", + verify: "Провери", + verificationRequired: "Изисква се проверка!", + verified: "Проверено", + verifying: "Проверява се...", + waitAlert: "Проверката е в процес... моля изчакайте.", + cancel: "Отказ", + enterCodeFromImage: "За да продължите, моля, въведете кода от изображението по-долу." +}; +globalThis.$altcha.i18n.set("bg", i18n); diff --git a/frontend/node_modules/altcha/dist/i18n/bg.umd.cjs b/frontend/node_modules/altcha/dist/i18n/bg.umd.cjs new file mode 100644 index 0000000..4981ffe --- /dev/null +++ b/frontend/node_modules/altcha/dist/i18n/bg.umd.cjs @@ -0,0 +1,133 @@ +(function(factory) { + typeof define === "function" && define.amd ? define(factory) : factory(); +})((function() { + "use strict"; + const noop = () => { + }; + function safe_not_equal(a, b) { + return a != a ? b == b : a !== b || a !== null && typeof a === "object" || typeof a === "function"; + } + function subscribe_to_store(store2, run, invalidate) { + if (store2 == null) { + run(void 0); + return noop; + } + const unsub = untrack( + () => store2.subscribe( + run, + // @ts-expect-error + invalidate + ) + ); + return unsub.unsubscribe ? () => unsub.unsubscribe() : unsub; + } + const subscriber_queue = []; + function writable(value, start = noop) { + let stop = null; + const subscribers = /* @__PURE__ */ new Set(); + function set(new_value) { + if (safe_not_equal(value, new_value)) { + value = new_value; + if (stop) { + const run_queue = !subscriber_queue.length; + for (const subscriber of subscribers) { + subscriber[1](); + subscriber_queue.push(subscriber, value); + } + if (run_queue) { + for (let i = 0; i < subscriber_queue.length; i += 2) { + subscriber_queue[i][0](subscriber_queue[i + 1]); + } + subscriber_queue.length = 0; + } + } + } + } + function update(fn) { + set(fn( + /** @type {T} */ + value + )); + } + function subscribe(run, invalidate = noop) { + const subscriber = [run, invalidate]; + subscribers.add(subscriber); + if (subscribers.size === 1) { + stop = start(set, update) || noop; + } + run( + /** @type {T} */ + value + ); + return () => { + subscribers.delete(subscriber); + if (subscribers.size === 0 && stop) { + stop(); + stop = null; + } + }; + } + return { set, update, subscribe }; + } + function get(store2) { + let value; + subscribe_to_store(store2, (_) => value = _)(); + return value; + } + let untracking = false; + function untrack(fn) { + var previous_untracking = untracking; + try { + untracking = true; + return fn(); + } finally { + untracking = previous_untracking; + } + } + function store(defaultValue) { + const scope = { + get: (name) => { + return get(scope.store)[name]; + }, + set: (name, value) => { + if (typeof name === "string") { + Object.assign(get(scope.store), { + [name]: value + }); + } else { + Object.assign(get(scope.store), name); + } + scope.store.set(get(scope.store)); + }, + store: writable(defaultValue) + }; + return scope; + } + globalThis.$altcha = globalThis.$altcha || { + algorithms: /* @__PURE__ */ new Map(), + defaults: store({}), + i18n: store({}), + instances: /* @__PURE__ */ new Set(), + plugins: /* @__PURE__ */ new Set() + }; + const i18n = { + ariaLinkLabel: "Altcha (официален уебсайт)", + enterCode: "Въведете код", + enterCodeAria: "Въведете кода, който чувате. Натиснете Space за възпроизвеждане на аудио.", + error: "Проверката неуспешна. Моля, опитайте по-късно.", + expired: "Времето за проверка изтече. Моля, опитайте отново.", + footer: 'Защитено от ALTCHA', + getAudioChallenge: "Аудио проверка", + label: "Аз не съм робот", + loading: "Зареждане...", + reload: "Презареди", + verify: "Провери", + verificationRequired: "Изисква се проверка!", + verified: "Проверено", + verifying: "Проверява се...", + waitAlert: "Проверката е в процес... моля изчакайте.", + cancel: "Отказ", + enterCodeFromImage: "За да продължите, моля, въведете кода от изображението по-долу." + }; + globalThis.$altcha.i18n.set("bg", i18n); +})); diff --git a/frontend/node_modules/altcha/dist/i18n/bn.d.ts b/frontend/node_modules/altcha/dist/i18n/bn.d.ts new file mode 100644 index 0000000..07d4450 --- /dev/null +++ b/frontend/node_modules/altcha/dist/i18n/bn.d.ts @@ -0,0 +1 @@ +declare module 'altcha/i18n/bn'; export {}; diff --git a/frontend/node_modules/altcha/dist/i18n/bn.js b/frontend/node_modules/altcha/dist/i18n/bn.js new file mode 100644 index 0000000..2a7d3b8 --- /dev/null +++ b/frontend/node_modules/altcha/dist/i18n/bn.js @@ -0,0 +1,128 @@ +const noop = () => { +}; +function safe_not_equal(a, b) { + return a != a ? b == b : a !== b || a !== null && typeof a === "object" || typeof a === "function"; +} +function subscribe_to_store(store2, run, invalidate) { + if (store2 == null) { + run(void 0); + return noop; + } + const unsub = untrack( + () => store2.subscribe( + run, + // @ts-expect-error + invalidate + ) + ); + return unsub.unsubscribe ? () => unsub.unsubscribe() : unsub; +} +const subscriber_queue = []; +function writable(value, start = noop) { + let stop = null; + const subscribers = /* @__PURE__ */ new Set(); + function set(new_value) { + if (safe_not_equal(value, new_value)) { + value = new_value; + if (stop) { + const run_queue = !subscriber_queue.length; + for (const subscriber of subscribers) { + subscriber[1](); + subscriber_queue.push(subscriber, value); + } + if (run_queue) { + for (let i = 0; i < subscriber_queue.length; i += 2) { + subscriber_queue[i][0](subscriber_queue[i + 1]); + } + subscriber_queue.length = 0; + } + } + } + } + function update(fn) { + set(fn( + /** @type {T} */ + value + )); + } + function subscribe(run, invalidate = noop) { + const subscriber = [run, invalidate]; + subscribers.add(subscriber); + if (subscribers.size === 1) { + stop = start(set, update) || noop; + } + run( + /** @type {T} */ + value + ); + return () => { + subscribers.delete(subscriber); + if (subscribers.size === 0 && stop) { + stop(); + stop = null; + } + }; + } + return { set, update, subscribe }; +} +function get(store2) { + let value; + subscribe_to_store(store2, (_) => value = _)(); + return value; +} +let untracking = false; +function untrack(fn) { + var previous_untracking = untracking; + try { + untracking = true; + return fn(); + } finally { + untracking = previous_untracking; + } +} +function store(defaultValue) { + const scope = { + get: (name) => { + return get(scope.store)[name]; + }, + set: (name, value) => { + if (typeof name === "string") { + Object.assign(get(scope.store), { + [name]: value + }); + } else { + Object.assign(get(scope.store), name); + } + scope.store.set(get(scope.store)); + }, + store: writable(defaultValue) + }; + return scope; +} +globalThis.$altcha = globalThis.$altcha || { + algorithms: /* @__PURE__ */ new Map(), + defaults: store({}), + i18n: store({}), + instances: /* @__PURE__ */ new Set(), + plugins: /* @__PURE__ */ new Set() +}; +const i18n = { + ariaLinkLabel: "Altcha (অফিসিয়াল ওয়েবসাইট)", + enterCode: "কোড লিখুন", + enterCodeAria: "আপনি যে কোড শুনতে পান তা লিখুন। অডিও প্লে করতে স্পেস বাটন টিপুন।", + error: "যাচাইকরণ ব্যর্থ হয়েছে। পরে আবার চেষ্টা করুন।", + expired: "যাচাইকরণ সময়সীমা শেষ হয়েছে। আবার চেষ্টা করুন।", + footer: 'দ্বারা সুরক্ষিত ALTCHA', + getAudioChallenge: "অডিও চ্যালেঞ্জ নিন", + label: "আমি রোবট নই", + loading: "লোড হচ্ছে...", + reload: "পুনরায় লোড করুন", + verify: "যাচাই করুন", + verificationRequired: "যাচাই প্রয়োজন!", + verified: "যাচাই করা হয়েছে", + verifying: "যাচাই করা হচ্ছে...", + waitAlert: "যাচাই করা হচ্ছে... দয়া করে অপেক্ষা করুন।", + cancel: "বাতিল করুন", + enterCodeFromImage: "এগিয়ে যেতে, অনুগ্রহ করে নীচের চিত্র থেকে কোডটি প্রবেশ করান।" +}; +globalThis.$altcha.i18n.set("bn", i18n); diff --git a/frontend/node_modules/altcha/dist/i18n/bn.umd.cjs b/frontend/node_modules/altcha/dist/i18n/bn.umd.cjs new file mode 100644 index 0000000..0b91c4b --- /dev/null +++ b/frontend/node_modules/altcha/dist/i18n/bn.umd.cjs @@ -0,0 +1,133 @@ +(function(factory) { + typeof define === "function" && define.amd ? define(factory) : factory(); +})((function() { + "use strict"; + const noop = () => { + }; + function safe_not_equal(a, b) { + return a != a ? b == b : a !== b || a !== null && typeof a === "object" || typeof a === "function"; + } + function subscribe_to_store(store2, run, invalidate) { + if (store2 == null) { + run(void 0); + return noop; + } + const unsub = untrack( + () => store2.subscribe( + run, + // @ts-expect-error + invalidate + ) + ); + return unsub.unsubscribe ? () => unsub.unsubscribe() : unsub; + } + const subscriber_queue = []; + function writable(value, start = noop) { + let stop = null; + const subscribers = /* @__PURE__ */ new Set(); + function set(new_value) { + if (safe_not_equal(value, new_value)) { + value = new_value; + if (stop) { + const run_queue = !subscriber_queue.length; + for (const subscriber of subscribers) { + subscriber[1](); + subscriber_queue.push(subscriber, value); + } + if (run_queue) { + for (let i = 0; i < subscriber_queue.length; i += 2) { + subscriber_queue[i][0](subscriber_queue[i + 1]); + } + subscriber_queue.length = 0; + } + } + } + } + function update(fn) { + set(fn( + /** @type {T} */ + value + )); + } + function subscribe(run, invalidate = noop) { + const subscriber = [run, invalidate]; + subscribers.add(subscriber); + if (subscribers.size === 1) { + stop = start(set, update) || noop; + } + run( + /** @type {T} */ + value + ); + return () => { + subscribers.delete(subscriber); + if (subscribers.size === 0 && stop) { + stop(); + stop = null; + } + }; + } + return { set, update, subscribe }; + } + function get(store2) { + let value; + subscribe_to_store(store2, (_) => value = _)(); + return value; + } + let untracking = false; + function untrack(fn) { + var previous_untracking = untracking; + try { + untracking = true; + return fn(); + } finally { + untracking = previous_untracking; + } + } + function store(defaultValue) { + const scope = { + get: (name) => { + return get(scope.store)[name]; + }, + set: (name, value) => { + if (typeof name === "string") { + Object.assign(get(scope.store), { + [name]: value + }); + } else { + Object.assign(get(scope.store), name); + } + scope.store.set(get(scope.store)); + }, + store: writable(defaultValue) + }; + return scope; + } + globalThis.$altcha = globalThis.$altcha || { + algorithms: /* @__PURE__ */ new Map(), + defaults: store({}), + i18n: store({}), + instances: /* @__PURE__ */ new Set(), + plugins: /* @__PURE__ */ new Set() + }; + const i18n = { + ariaLinkLabel: "Altcha (অফিসিয়াল ওয়েবসাইট)", + enterCode: "কোড লিখুন", + enterCodeAria: "আপনি যে কোড শুনতে পান তা লিখুন। অডিও প্লে করতে স্পেস বাটন টিপুন।", + error: "যাচাইকরণ ব্যর্থ হয়েছে। পরে আবার চেষ্টা করুন।", + expired: "যাচাইকরণ সময়সীমা শেষ হয়েছে। আবার চেষ্টা করুন।", + footer: 'দ্বারা সুরক্ষিত ALTCHA', + getAudioChallenge: "অডিও চ্যালেঞ্জ নিন", + label: "আমি রোবট নই", + loading: "লোড হচ্ছে...", + reload: "পুনরায় লোড করুন", + verify: "যাচাই করুন", + verificationRequired: "যাচাই প্রয়োজন!", + verified: "যাচাই করা হয়েছে", + verifying: "যাচাই করা হচ্ছে...", + waitAlert: "যাচাই করা হচ্ছে... দয়া করে অপেক্ষা করুন।", + cancel: "বাতিল করুন", + enterCodeFromImage: "এগিয়ে যেতে, অনুগ্রহ করে নীচের চিত্র থেকে কোডটি প্রবেশ করান।" + }; + globalThis.$altcha.i18n.set("bn", i18n); +})); diff --git a/frontend/node_modules/altcha/dist/i18n/br.d.ts b/frontend/node_modules/altcha/dist/i18n/br.d.ts new file mode 100644 index 0000000..024a263 --- /dev/null +++ b/frontend/node_modules/altcha/dist/i18n/br.d.ts @@ -0,0 +1 @@ +declare module 'altcha/i18n/br'; export {}; diff --git a/frontend/node_modules/altcha/dist/i18n/bs.d.ts b/frontend/node_modules/altcha/dist/i18n/bs.d.ts new file mode 100644 index 0000000..9055afd --- /dev/null +++ b/frontend/node_modules/altcha/dist/i18n/bs.d.ts @@ -0,0 +1 @@ +declare module 'altcha/i18n/bs'; export {}; diff --git a/frontend/node_modules/altcha/dist/i18n/bs.js b/frontend/node_modules/altcha/dist/i18n/bs.js new file mode 100644 index 0000000..c5222f2 --- /dev/null +++ b/frontend/node_modules/altcha/dist/i18n/bs.js @@ -0,0 +1,128 @@ +const noop = () => { +}; +function safe_not_equal(a, b) { + return a != a ? b == b : a !== b || a !== null && typeof a === "object" || typeof a === "function"; +} +function subscribe_to_store(store2, run, invalidate) { + if (store2 == null) { + run(void 0); + return noop; + } + const unsub = untrack( + () => store2.subscribe( + run, + // @ts-expect-error + invalidate + ) + ); + return unsub.unsubscribe ? () => unsub.unsubscribe() : unsub; +} +const subscriber_queue = []; +function writable(value, start = noop) { + let stop = null; + const subscribers = /* @__PURE__ */ new Set(); + function set(new_value) { + if (safe_not_equal(value, new_value)) { + value = new_value; + if (stop) { + const run_queue = !subscriber_queue.length; + for (const subscriber of subscribers) { + subscriber[1](); + subscriber_queue.push(subscriber, value); + } + if (run_queue) { + for (let i = 0; i < subscriber_queue.length; i += 2) { + subscriber_queue[i][0](subscriber_queue[i + 1]); + } + subscriber_queue.length = 0; + } + } + } + } + function update(fn) { + set(fn( + /** @type {T} */ + value + )); + } + function subscribe(run, invalidate = noop) { + const subscriber = [run, invalidate]; + subscribers.add(subscriber); + if (subscribers.size === 1) { + stop = start(set, update) || noop; + } + run( + /** @type {T} */ + value + ); + return () => { + subscribers.delete(subscriber); + if (subscribers.size === 0 && stop) { + stop(); + stop = null; + } + }; + } + return { set, update, subscribe }; +} +function get(store2) { + let value; + subscribe_to_store(store2, (_) => value = _)(); + return value; +} +let untracking = false; +function untrack(fn) { + var previous_untracking = untracking; + try { + untracking = true; + return fn(); + } finally { + untracking = previous_untracking; + } +} +function store(defaultValue) { + const scope = { + get: (name) => { + return get(scope.store)[name]; + }, + set: (name, value) => { + if (typeof name === "string") { + Object.assign(get(scope.store), { + [name]: value + }); + } else { + Object.assign(get(scope.store), name); + } + scope.store.set(get(scope.store)); + }, + store: writable(defaultValue) + }; + return scope; +} +globalThis.$altcha = globalThis.$altcha || { + algorithms: /* @__PURE__ */ new Map(), + defaults: store({}), + i18n: store({}), + instances: /* @__PURE__ */ new Set(), + plugins: /* @__PURE__ */ new Set() +}; +const i18n = { + ariaLinkLabel: "Altcha (službena web stranica)", + enterCode: "Unesite kod", + enterCodeAria: "Unesite kod koji čujete. Pritisnite Space da biste pustili zvuk.", + error: "Verifikacija nije uspjela. Pokušajte ponovo kasnije.", + expired: "Verifikacija je istekla. Pokušajte ponovo.", + footer: 'Zaštićeno od strane ALTCHA', + getAudioChallenge: "Dohvatite audio izazov", + label: "Nisam robot", + loading: "Učitavanje...", + reload: "Ponovno učitaj", + verify: "Verifikuj", + verificationRequired: "Verifikacija je obavezna!", + verified: "Verifikovano", + verifying: "Verifikacija u toku...", + waitAlert: "Verifikacija u toku... molimo vas da sačekate.", + cancel: "Odustani", + enterCodeFromImage: "Za nastavak, molimo unesite kod sa slike ispod." +}; +globalThis.$altcha.i18n.set("bs", i18n); diff --git a/frontend/node_modules/altcha/dist/i18n/bs.umd.cjs b/frontend/node_modules/altcha/dist/i18n/bs.umd.cjs new file mode 100644 index 0000000..7116cf2 --- /dev/null +++ b/frontend/node_modules/altcha/dist/i18n/bs.umd.cjs @@ -0,0 +1,133 @@ +(function(factory) { + typeof define === "function" && define.amd ? define(factory) : factory(); +})((function() { + "use strict"; + const noop = () => { + }; + function safe_not_equal(a, b) { + return a != a ? b == b : a !== b || a !== null && typeof a === "object" || typeof a === "function"; + } + function subscribe_to_store(store2, run, invalidate) { + if (store2 == null) { + run(void 0); + return noop; + } + const unsub = untrack( + () => store2.subscribe( + run, + // @ts-expect-error + invalidate + ) + ); + return unsub.unsubscribe ? () => unsub.unsubscribe() : unsub; + } + const subscriber_queue = []; + function writable(value, start = noop) { + let stop = null; + const subscribers = /* @__PURE__ */ new Set(); + function set(new_value) { + if (safe_not_equal(value, new_value)) { + value = new_value; + if (stop) { + const run_queue = !subscriber_queue.length; + for (const subscriber of subscribers) { + subscriber[1](); + subscriber_queue.push(subscriber, value); + } + if (run_queue) { + for (let i = 0; i < subscriber_queue.length; i += 2) { + subscriber_queue[i][0](subscriber_queue[i + 1]); + } + subscriber_queue.length = 0; + } + } + } + } + function update(fn) { + set(fn( + /** @type {T} */ + value + )); + } + function subscribe(run, invalidate = noop) { + const subscriber = [run, invalidate]; + subscribers.add(subscriber); + if (subscribers.size === 1) { + stop = start(set, update) || noop; + } + run( + /** @type {T} */ + value + ); + return () => { + subscribers.delete(subscriber); + if (subscribers.size === 0 && stop) { + stop(); + stop = null; + } + }; + } + return { set, update, subscribe }; + } + function get(store2) { + let value; + subscribe_to_store(store2, (_) => value = _)(); + return value; + } + let untracking = false; + function untrack(fn) { + var previous_untracking = untracking; + try { + untracking = true; + return fn(); + } finally { + untracking = previous_untracking; + } + } + function store(defaultValue) { + const scope = { + get: (name) => { + return get(scope.store)[name]; + }, + set: (name, value) => { + if (typeof name === "string") { + Object.assign(get(scope.store), { + [name]: value + }); + } else { + Object.assign(get(scope.store), name); + } + scope.store.set(get(scope.store)); + }, + store: writable(defaultValue) + }; + return scope; + } + globalThis.$altcha = globalThis.$altcha || { + algorithms: /* @__PURE__ */ new Map(), + defaults: store({}), + i18n: store({}), + instances: /* @__PURE__ */ new Set(), + plugins: /* @__PURE__ */ new Set() + }; + const i18n = { + ariaLinkLabel: "Altcha (službena web stranica)", + enterCode: "Unesite kod", + enterCodeAria: "Unesite kod koji čujete. Pritisnite Space da biste pustili zvuk.", + error: "Verifikacija nije uspjela. Pokušajte ponovo kasnije.", + expired: "Verifikacija je istekla. Pokušajte ponovo.", + footer: 'Zaštićeno od strane ALTCHA', + getAudioChallenge: "Dohvatite audio izazov", + label: "Nisam robot", + loading: "Učitavanje...", + reload: "Ponovno učitaj", + verify: "Verifikuj", + verificationRequired: "Verifikacija je obavezna!", + verified: "Verifikovano", + verifying: "Verifikacija u toku...", + waitAlert: "Verifikacija u toku... molimo vas da sačekate.", + cancel: "Odustani", + enterCodeFromImage: "Za nastavak, molimo unesite kod sa slike ispod." + }; + globalThis.$altcha.i18n.set("bs", i18n); +})); diff --git a/frontend/node_modules/altcha/dist/i18n/ca.d.ts b/frontend/node_modules/altcha/dist/i18n/ca.d.ts new file mode 100644 index 0000000..f7e2fab --- /dev/null +++ b/frontend/node_modules/altcha/dist/i18n/ca.d.ts @@ -0,0 +1 @@ +declare module 'altcha/i18n/ca'; export {}; diff --git a/frontend/node_modules/altcha/dist/i18n/ca.js b/frontend/node_modules/altcha/dist/i18n/ca.js new file mode 100644 index 0000000..f57f17b --- /dev/null +++ b/frontend/node_modules/altcha/dist/i18n/ca.js @@ -0,0 +1,128 @@ +const noop = () => { +}; +function safe_not_equal(a, b) { + return a != a ? b == b : a !== b || a !== null && typeof a === "object" || typeof a === "function"; +} +function subscribe_to_store(store2, run, invalidate) { + if (store2 == null) { + run(void 0); + return noop; + } + const unsub = untrack( + () => store2.subscribe( + run, + // @ts-expect-error + invalidate + ) + ); + return unsub.unsubscribe ? () => unsub.unsubscribe() : unsub; +} +const subscriber_queue = []; +function writable(value, start = noop) { + let stop = null; + const subscribers = /* @__PURE__ */ new Set(); + function set(new_value) { + if (safe_not_equal(value, new_value)) { + value = new_value; + if (stop) { + const run_queue = !subscriber_queue.length; + for (const subscriber of subscribers) { + subscriber[1](); + subscriber_queue.push(subscriber, value); + } + if (run_queue) { + for (let i = 0; i < subscriber_queue.length; i += 2) { + subscriber_queue[i][0](subscriber_queue[i + 1]); + } + subscriber_queue.length = 0; + } + } + } + } + function update(fn) { + set(fn( + /** @type {T} */ + value + )); + } + function subscribe(run, invalidate = noop) { + const subscriber = [run, invalidate]; + subscribers.add(subscriber); + if (subscribers.size === 1) { + stop = start(set, update) || noop; + } + run( + /** @type {T} */ + value + ); + return () => { + subscribers.delete(subscriber); + if (subscribers.size === 0 && stop) { + stop(); + stop = null; + } + }; + } + return { set, update, subscribe }; +} +function get(store2) { + let value; + subscribe_to_store(store2, (_) => value = _)(); + return value; +} +let untracking = false; +function untrack(fn) { + var previous_untracking = untracking; + try { + untracking = true; + return fn(); + } finally { + untracking = previous_untracking; + } +} +function store(defaultValue) { + const scope = { + get: (name) => { + return get(scope.store)[name]; + }, + set: (name, value) => { + if (typeof name === "string") { + Object.assign(get(scope.store), { + [name]: value + }); + } else { + Object.assign(get(scope.store), name); + } + scope.store.set(get(scope.store)); + }, + store: writable(defaultValue) + }; + return scope; +} +globalThis.$altcha = globalThis.$altcha || { + algorithms: /* @__PURE__ */ new Map(), + defaults: store({}), + i18n: store({}), + instances: /* @__PURE__ */ new Set(), + plugins: /* @__PURE__ */ new Set() +}; +const i18n = { + ariaLinkLabel: "Altcha (lloc web oficial)", + enterCode: "Introdueix el codi", + enterCodeAria: "Introdueix el codi que escoltes. Prem Espai per reproduir l’àudio.", + error: "Verificació fallida. Torna-ho a provar més tard.", + expired: "Verificació expirada. Torna-ho a provar.", + footer: 'Protegit per ALTCHA', + getAudioChallenge: "Obtenir un desafiament d’àudio", + label: "No sóc un robot", + loading: "Carregant...", + reload: "Torna a carregar", + verify: "Verificar", + verificationRequired: "Es requereix verificació!", + verified: "Verificat", + verifying: "Verificant...", + waitAlert: "Verificant... si us plau, espera.", + cancel: "Cancel·la", + enterCodeFromImage: "Per continuar, si us plau, introdueix el codi de la imatge següent." +}; +globalThis.$altcha.i18n.set("ca", i18n); diff --git a/frontend/node_modules/altcha/dist/i18n/ca.umd.cjs b/frontend/node_modules/altcha/dist/i18n/ca.umd.cjs new file mode 100644 index 0000000..6ccd81c --- /dev/null +++ b/frontend/node_modules/altcha/dist/i18n/ca.umd.cjs @@ -0,0 +1,133 @@ +(function(factory) { + typeof define === "function" && define.amd ? define(factory) : factory(); +})((function() { + "use strict"; + const noop = () => { + }; + function safe_not_equal(a, b) { + return a != a ? b == b : a !== b || a !== null && typeof a === "object" || typeof a === "function"; + } + function subscribe_to_store(store2, run, invalidate) { + if (store2 == null) { + run(void 0); + return noop; + } + const unsub = untrack( + () => store2.subscribe( + run, + // @ts-expect-error + invalidate + ) + ); + return unsub.unsubscribe ? () => unsub.unsubscribe() : unsub; + } + const subscriber_queue = []; + function writable(value, start = noop) { + let stop = null; + const subscribers = /* @__PURE__ */ new Set(); + function set(new_value) { + if (safe_not_equal(value, new_value)) { + value = new_value; + if (stop) { + const run_queue = !subscriber_queue.length; + for (const subscriber of subscribers) { + subscriber[1](); + subscriber_queue.push(subscriber, value); + } + if (run_queue) { + for (let i = 0; i < subscriber_queue.length; i += 2) { + subscriber_queue[i][0](subscriber_queue[i + 1]); + } + subscriber_queue.length = 0; + } + } + } + } + function update(fn) { + set(fn( + /** @type {T} */ + value + )); + } + function subscribe(run, invalidate = noop) { + const subscriber = [run, invalidate]; + subscribers.add(subscriber); + if (subscribers.size === 1) { + stop = start(set, update) || noop; + } + run( + /** @type {T} */ + value + ); + return () => { + subscribers.delete(subscriber); + if (subscribers.size === 0 && stop) { + stop(); + stop = null; + } + }; + } + return { set, update, subscribe }; + } + function get(store2) { + let value; + subscribe_to_store(store2, (_) => value = _)(); + return value; + } + let untracking = false; + function untrack(fn) { + var previous_untracking = untracking; + try { + untracking = true; + return fn(); + } finally { + untracking = previous_untracking; + } + } + function store(defaultValue) { + const scope = { + get: (name) => { + return get(scope.store)[name]; + }, + set: (name, value) => { + if (typeof name === "string") { + Object.assign(get(scope.store), { + [name]: value + }); + } else { + Object.assign(get(scope.store), name); + } + scope.store.set(get(scope.store)); + }, + store: writable(defaultValue) + }; + return scope; + } + globalThis.$altcha = globalThis.$altcha || { + algorithms: /* @__PURE__ */ new Map(), + defaults: store({}), + i18n: store({}), + instances: /* @__PURE__ */ new Set(), + plugins: /* @__PURE__ */ new Set() + }; + const i18n = { + ariaLinkLabel: "Altcha (lloc web oficial)", + enterCode: "Introdueix el codi", + enterCodeAria: "Introdueix el codi que escoltes. Prem Espai per reproduir l’àudio.", + error: "Verificació fallida. Torna-ho a provar més tard.", + expired: "Verificació expirada. Torna-ho a provar.", + footer: 'Protegit per ALTCHA', + getAudioChallenge: "Obtenir un desafiament d’àudio", + label: "No sóc un robot", + loading: "Carregant...", + reload: "Torna a carregar", + verify: "Verificar", + verificationRequired: "Es requereix verificació!", + verified: "Verificat", + verifying: "Verificant...", + waitAlert: "Verificant... si us plau, espera.", + cancel: "Cancel·la", + enterCodeFromImage: "Per continuar, si us plau, introdueix el codi de la imatge següent." + }; + globalThis.$altcha.i18n.set("ca", i18n); +})); diff --git a/frontend/node_modules/altcha/dist/i18n/cn.d.ts b/frontend/node_modules/altcha/dist/i18n/cn.d.ts new file mode 100644 index 0000000..ec29787 --- /dev/null +++ b/frontend/node_modules/altcha/dist/i18n/cn.d.ts @@ -0,0 +1 @@ +declare module 'altcha/i18n/cn'; export {}; diff --git a/frontend/node_modules/altcha/dist/i18n/cs.d.ts b/frontend/node_modules/altcha/dist/i18n/cs.d.ts new file mode 100644 index 0000000..7da0e66 --- /dev/null +++ b/frontend/node_modules/altcha/dist/i18n/cs.d.ts @@ -0,0 +1 @@ +declare module 'altcha/i18n/cs'; export {}; diff --git a/frontend/node_modules/altcha/dist/i18n/cs.js b/frontend/node_modules/altcha/dist/i18n/cs.js new file mode 100644 index 0000000..02e486d --- /dev/null +++ b/frontend/node_modules/altcha/dist/i18n/cs.js @@ -0,0 +1,128 @@ +const noop = () => { +}; +function safe_not_equal(a, b) { + return a != a ? b == b : a !== b || a !== null && typeof a === "object" || typeof a === "function"; +} +function subscribe_to_store(store2, run, invalidate) { + if (store2 == null) { + run(void 0); + return noop; + } + const unsub = untrack( + () => store2.subscribe( + run, + // @ts-expect-error + invalidate + ) + ); + return unsub.unsubscribe ? () => unsub.unsubscribe() : unsub; +} +const subscriber_queue = []; +function writable(value, start = noop) { + let stop = null; + const subscribers = /* @__PURE__ */ new Set(); + function set(new_value) { + if (safe_not_equal(value, new_value)) { + value = new_value; + if (stop) { + const run_queue = !subscriber_queue.length; + for (const subscriber of subscribers) { + subscriber[1](); + subscriber_queue.push(subscriber, value); + } + if (run_queue) { + for (let i = 0; i < subscriber_queue.length; i += 2) { + subscriber_queue[i][0](subscriber_queue[i + 1]); + } + subscriber_queue.length = 0; + } + } + } + } + function update(fn) { + set(fn( + /** @type {T} */ + value + )); + } + function subscribe(run, invalidate = noop) { + const subscriber = [run, invalidate]; + subscribers.add(subscriber); + if (subscribers.size === 1) { + stop = start(set, update) || noop; + } + run( + /** @type {T} */ + value + ); + return () => { + subscribers.delete(subscriber); + if (subscribers.size === 0 && stop) { + stop(); + stop = null; + } + }; + } + return { set, update, subscribe }; +} +function get(store2) { + let value; + subscribe_to_store(store2, (_) => value = _)(); + return value; +} +let untracking = false; +function untrack(fn) { + var previous_untracking = untracking; + try { + untracking = true; + return fn(); + } finally { + untracking = previous_untracking; + } +} +function store(defaultValue) { + const scope = { + get: (name) => { + return get(scope.store)[name]; + }, + set: (name, value) => { + if (typeof name === "string") { + Object.assign(get(scope.store), { + [name]: value + }); + } else { + Object.assign(get(scope.store), name); + } + scope.store.set(get(scope.store)); + }, + store: writable(defaultValue) + }; + return scope; +} +globalThis.$altcha = globalThis.$altcha || { + algorithms: /* @__PURE__ */ new Map(), + defaults: store({}), + i18n: store({}), + instances: /* @__PURE__ */ new Set(), + plugins: /* @__PURE__ */ new Set() +}; +const i18n = { + ariaLinkLabel: "Altcha (oficiální web)", + enterCode: "Zadejte kód", + enterCodeAria: "Zadejte kód, který slyšíte. Stisknutím mezerníku přehrajete zvuk.", + error: "Ověření selhalo. Zkuste to prosím později.", + expired: "Ověření vypršelo. Zkuste to prosím znovu.", + footer: 'Chráněno pomocí ALTCHA', + getAudioChallenge: "Získat audio výzvu", + label: "Nejsem robot", + loading: "Načítání...", + reload: "Znovu načíst", + verify: "Ověřit", + verificationRequired: "Vyžaduje se ověření!", + verified: "Ověřeno", + verifying: "Ověřování...", + waitAlert: "Probíhá ověření... prosím počkejte.", + cancel: "Zrušit", + enterCodeFromImage: "Pro pokračování zadejte kód z obrázku níže." +}; +globalThis.$altcha.i18n.set("cs", i18n); diff --git a/frontend/node_modules/altcha/dist/i18n/cs.umd.cjs b/frontend/node_modules/altcha/dist/i18n/cs.umd.cjs new file mode 100644 index 0000000..724aa55 --- /dev/null +++ b/frontend/node_modules/altcha/dist/i18n/cs.umd.cjs @@ -0,0 +1,133 @@ +(function(factory) { + typeof define === "function" && define.amd ? define(factory) : factory(); +})((function() { + "use strict"; + const noop = () => { + }; + function safe_not_equal(a, b) { + return a != a ? b == b : a !== b || a !== null && typeof a === "object" || typeof a === "function"; + } + function subscribe_to_store(store2, run, invalidate) { + if (store2 == null) { + run(void 0); + return noop; + } + const unsub = untrack( + () => store2.subscribe( + run, + // @ts-expect-error + invalidate + ) + ); + return unsub.unsubscribe ? () => unsub.unsubscribe() : unsub; + } + const subscriber_queue = []; + function writable(value, start = noop) { + let stop = null; + const subscribers = /* @__PURE__ */ new Set(); + function set(new_value) { + if (safe_not_equal(value, new_value)) { + value = new_value; + if (stop) { + const run_queue = !subscriber_queue.length; + for (const subscriber of subscribers) { + subscriber[1](); + subscriber_queue.push(subscriber, value); + } + if (run_queue) { + for (let i = 0; i < subscriber_queue.length; i += 2) { + subscriber_queue[i][0](subscriber_queue[i + 1]); + } + subscriber_queue.length = 0; + } + } + } + } + function update(fn) { + set(fn( + /** @type {T} */ + value + )); + } + function subscribe(run, invalidate = noop) { + const subscriber = [run, invalidate]; + subscribers.add(subscriber); + if (subscribers.size === 1) { + stop = start(set, update) || noop; + } + run( + /** @type {T} */ + value + ); + return () => { + subscribers.delete(subscriber); + if (subscribers.size === 0 && stop) { + stop(); + stop = null; + } + }; + } + return { set, update, subscribe }; + } + function get(store2) { + let value; + subscribe_to_store(store2, (_) => value = _)(); + return value; + } + let untracking = false; + function untrack(fn) { + var previous_untracking = untracking; + try { + untracking = true; + return fn(); + } finally { + untracking = previous_untracking; + } + } + function store(defaultValue) { + const scope = { + get: (name) => { + return get(scope.store)[name]; + }, + set: (name, value) => { + if (typeof name === "string") { + Object.assign(get(scope.store), { + [name]: value + }); + } else { + Object.assign(get(scope.store), name); + } + scope.store.set(get(scope.store)); + }, + store: writable(defaultValue) + }; + return scope; + } + globalThis.$altcha = globalThis.$altcha || { + algorithms: /* @__PURE__ */ new Map(), + defaults: store({}), + i18n: store({}), + instances: /* @__PURE__ */ new Set(), + plugins: /* @__PURE__ */ new Set() + }; + const i18n = { + ariaLinkLabel: "Altcha (oficiální web)", + enterCode: "Zadejte kód", + enterCodeAria: "Zadejte kód, který slyšíte. Stisknutím mezerníku přehrajete zvuk.", + error: "Ověření selhalo. Zkuste to prosím později.", + expired: "Ověření vypršelo. Zkuste to prosím znovu.", + footer: 'Chráněno pomocí ALTCHA', + getAudioChallenge: "Získat audio výzvu", + label: "Nejsem robot", + loading: "Načítání...", + reload: "Znovu načíst", + verify: "Ověřit", + verificationRequired: "Vyžaduje se ověření!", + verified: "Ověřeno", + verifying: "Ověřování...", + waitAlert: "Probíhá ověření... prosím počkejte.", + cancel: "Zrušit", + enterCodeFromImage: "Pro pokračování zadejte kód z obrázku níže." + }; + globalThis.$altcha.i18n.set("cs", i18n); +})); diff --git a/frontend/node_modules/altcha/dist/i18n/da.d.ts b/frontend/node_modules/altcha/dist/i18n/da.d.ts new file mode 100644 index 0000000..0c31d33 --- /dev/null +++ b/frontend/node_modules/altcha/dist/i18n/da.d.ts @@ -0,0 +1 @@ +declare module 'altcha/i18n/da'; export {}; diff --git a/frontend/node_modules/altcha/dist/i18n/da.js b/frontend/node_modules/altcha/dist/i18n/da.js new file mode 100644 index 0000000..80270de --- /dev/null +++ b/frontend/node_modules/altcha/dist/i18n/da.js @@ -0,0 +1,128 @@ +const noop = () => { +}; +function safe_not_equal(a, b) { + return a != a ? b == b : a !== b || a !== null && typeof a === "object" || typeof a === "function"; +} +function subscribe_to_store(store2, run, invalidate) { + if (store2 == null) { + run(void 0); + return noop; + } + const unsub = untrack( + () => store2.subscribe( + run, + // @ts-expect-error + invalidate + ) + ); + return unsub.unsubscribe ? () => unsub.unsubscribe() : unsub; +} +const subscriber_queue = []; +function writable(value, start = noop) { + let stop = null; + const subscribers = /* @__PURE__ */ new Set(); + function set(new_value) { + if (safe_not_equal(value, new_value)) { + value = new_value; + if (stop) { + const run_queue = !subscriber_queue.length; + for (const subscriber of subscribers) { + subscriber[1](); + subscriber_queue.push(subscriber, value); + } + if (run_queue) { + for (let i = 0; i < subscriber_queue.length; i += 2) { + subscriber_queue[i][0](subscriber_queue[i + 1]); + } + subscriber_queue.length = 0; + } + } + } + } + function update(fn) { + set(fn( + /** @type {T} */ + value + )); + } + function subscribe(run, invalidate = noop) { + const subscriber = [run, invalidate]; + subscribers.add(subscriber); + if (subscribers.size === 1) { + stop = start(set, update) || noop; + } + run( + /** @type {T} */ + value + ); + return () => { + subscribers.delete(subscriber); + if (subscribers.size === 0 && stop) { + stop(); + stop = null; + } + }; + } + return { set, update, subscribe }; +} +function get(store2) { + let value; + subscribe_to_store(store2, (_) => value = _)(); + return value; +} +let untracking = false; +function untrack(fn) { + var previous_untracking = untracking; + try { + untracking = true; + return fn(); + } finally { + untracking = previous_untracking; + } +} +function store(defaultValue) { + const scope = { + get: (name) => { + return get(scope.store)[name]; + }, + set: (name, value) => { + if (typeof name === "string") { + Object.assign(get(scope.store), { + [name]: value + }); + } else { + Object.assign(get(scope.store), name); + } + scope.store.set(get(scope.store)); + }, + store: writable(defaultValue) + }; + return scope; +} +globalThis.$altcha = globalThis.$altcha || { + algorithms: /* @__PURE__ */ new Map(), + defaults: store({}), + i18n: store({}), + instances: /* @__PURE__ */ new Set(), + plugins: /* @__PURE__ */ new Set() +}; +const i18n = { + ariaLinkLabel: "Altcha (officiel hjemmeside)", + enterCode: "Indtast kode", + enterCodeAria: "Indtast den kode, du hører. Tryk på mellemrumstasten for at afspille lyd.", + error: "Verificering mislykkedes. Prøv venligst igen senere.", + expired: "Verificering udløbet. Prøv venligst igen.", + footer: 'Beskyttet af ALTCHA', + getAudioChallenge: "Hent lydudfordring", + label: "Jeg er ikke en robot", + loading: "Indlæser...", + reload: "Genindlæs", + verify: "Verificer", + verificationRequired: "Verificering kræves!", + verified: "Verificeret", + verifying: "Verificerer...", + waitAlert: "Verificerer... vent venligst.", + cancel: "Annuller", + enterCodeFromImage: "For at fortsætte, bedes du indtaste koden fra billedet herunder." +}; +globalThis.$altcha.i18n.set("da", i18n); diff --git a/frontend/node_modules/altcha/dist/i18n/da.umd.cjs b/frontend/node_modules/altcha/dist/i18n/da.umd.cjs new file mode 100644 index 0000000..3308d79 --- /dev/null +++ b/frontend/node_modules/altcha/dist/i18n/da.umd.cjs @@ -0,0 +1,133 @@ +(function(factory) { + typeof define === "function" && define.amd ? define(factory) : factory(); +})((function() { + "use strict"; + const noop = () => { + }; + function safe_not_equal(a, b) { + return a != a ? b == b : a !== b || a !== null && typeof a === "object" || typeof a === "function"; + } + function subscribe_to_store(store2, run, invalidate) { + if (store2 == null) { + run(void 0); + return noop; + } + const unsub = untrack( + () => store2.subscribe( + run, + // @ts-expect-error + invalidate + ) + ); + return unsub.unsubscribe ? () => unsub.unsubscribe() : unsub; + } + const subscriber_queue = []; + function writable(value, start = noop) { + let stop = null; + const subscribers = /* @__PURE__ */ new Set(); + function set(new_value) { + if (safe_not_equal(value, new_value)) { + value = new_value; + if (stop) { + const run_queue = !subscriber_queue.length; + for (const subscriber of subscribers) { + subscriber[1](); + subscriber_queue.push(subscriber, value); + } + if (run_queue) { + for (let i = 0; i < subscriber_queue.length; i += 2) { + subscriber_queue[i][0](subscriber_queue[i + 1]); + } + subscriber_queue.length = 0; + } + } + } + } + function update(fn) { + set(fn( + /** @type {T} */ + value + )); + } + function subscribe(run, invalidate = noop) { + const subscriber = [run, invalidate]; + subscribers.add(subscriber); + if (subscribers.size === 1) { + stop = start(set, update) || noop; + } + run( + /** @type {T} */ + value + ); + return () => { + subscribers.delete(subscriber); + if (subscribers.size === 0 && stop) { + stop(); + stop = null; + } + }; + } + return { set, update, subscribe }; + } + function get(store2) { + let value; + subscribe_to_store(store2, (_) => value = _)(); + return value; + } + let untracking = false; + function untrack(fn) { + var previous_untracking = untracking; + try { + untracking = true; + return fn(); + } finally { + untracking = previous_untracking; + } + } + function store(defaultValue) { + const scope = { + get: (name) => { + return get(scope.store)[name]; + }, + set: (name, value) => { + if (typeof name === "string") { + Object.assign(get(scope.store), { + [name]: value + }); + } else { + Object.assign(get(scope.store), name); + } + scope.store.set(get(scope.store)); + }, + store: writable(defaultValue) + }; + return scope; + } + globalThis.$altcha = globalThis.$altcha || { + algorithms: /* @__PURE__ */ new Map(), + defaults: store({}), + i18n: store({}), + instances: /* @__PURE__ */ new Set(), + plugins: /* @__PURE__ */ new Set() + }; + const i18n = { + ariaLinkLabel: "Altcha (officiel hjemmeside)", + enterCode: "Indtast kode", + enterCodeAria: "Indtast den kode, du hører. Tryk på mellemrumstasten for at afspille lyd.", + error: "Verificering mislykkedes. Prøv venligst igen senere.", + expired: "Verificering udløbet. Prøv venligst igen.", + footer: 'Beskyttet af ALTCHA', + getAudioChallenge: "Hent lydudfordring", + label: "Jeg er ikke en robot", + loading: "Indlæser...", + reload: "Genindlæs", + verify: "Verificer", + verificationRequired: "Verificering kræves!", + verified: "Verificeret", + verifying: "Verificerer...", + waitAlert: "Verificerer... vent venligst.", + cancel: "Annuller", + enterCodeFromImage: "For at fortsætte, bedes du indtaste koden fra billedet herunder." + }; + globalThis.$altcha.i18n.set("da", i18n); +})); diff --git a/frontend/node_modules/altcha/dist/i18n/de.d.ts b/frontend/node_modules/altcha/dist/i18n/de.d.ts new file mode 100644 index 0000000..83ace35 --- /dev/null +++ b/frontend/node_modules/altcha/dist/i18n/de.d.ts @@ -0,0 +1 @@ +declare module 'altcha/i18n/de'; export {}; diff --git a/frontend/node_modules/altcha/dist/i18n/de.js b/frontend/node_modules/altcha/dist/i18n/de.js new file mode 100644 index 0000000..f4a194d --- /dev/null +++ b/frontend/node_modules/altcha/dist/i18n/de.js @@ -0,0 +1,128 @@ +const noop = () => { +}; +function safe_not_equal(a, b) { + return a != a ? b == b : a !== b || a !== null && typeof a === "object" || typeof a === "function"; +} +function subscribe_to_store(store2, run, invalidate) { + if (store2 == null) { + run(void 0); + return noop; + } + const unsub = untrack( + () => store2.subscribe( + run, + // @ts-expect-error + invalidate + ) + ); + return unsub.unsubscribe ? () => unsub.unsubscribe() : unsub; +} +const subscriber_queue = []; +function writable(value, start = noop) { + let stop = null; + const subscribers = /* @__PURE__ */ new Set(); + function set(new_value) { + if (safe_not_equal(value, new_value)) { + value = new_value; + if (stop) { + const run_queue = !subscriber_queue.length; + for (const subscriber of subscribers) { + subscriber[1](); + subscriber_queue.push(subscriber, value); + } + if (run_queue) { + for (let i = 0; i < subscriber_queue.length; i += 2) { + subscriber_queue[i][0](subscriber_queue[i + 1]); + } + subscriber_queue.length = 0; + } + } + } + } + function update(fn) { + set(fn( + /** @type {T} */ + value + )); + } + function subscribe(run, invalidate = noop) { + const subscriber = [run, invalidate]; + subscribers.add(subscriber); + if (subscribers.size === 1) { + stop = start(set, update) || noop; + } + run( + /** @type {T} */ + value + ); + return () => { + subscribers.delete(subscriber); + if (subscribers.size === 0 && stop) { + stop(); + stop = null; + } + }; + } + return { set, update, subscribe }; +} +function get(store2) { + let value; + subscribe_to_store(store2, (_) => value = _)(); + return value; +} +let untracking = false; +function untrack(fn) { + var previous_untracking = untracking; + try { + untracking = true; + return fn(); + } finally { + untracking = previous_untracking; + } +} +function store(defaultValue) { + const scope = { + get: (name) => { + return get(scope.store)[name]; + }, + set: (name, value) => { + if (typeof name === "string") { + Object.assign(get(scope.store), { + [name]: value + }); + } else { + Object.assign(get(scope.store), name); + } + scope.store.set(get(scope.store)); + }, + store: writable(defaultValue) + }; + return scope; +} +globalThis.$altcha = globalThis.$altcha || { + algorithms: /* @__PURE__ */ new Map(), + defaults: store({}), + i18n: store({}), + instances: /* @__PURE__ */ new Set(), + plugins: /* @__PURE__ */ new Set() +}; +const i18n = { + ariaLinkLabel: "Altcha (offizielle Website)", + enterCode: "Code eingeben", + enterCodeAria: "Geben Sie den Code ein, den Sie hören. Drücken Sie die Leertaste, um die Audio abzuspielen.", + error: "Überprüfung fehlgeschlagen. Bitte versuchen Sie es später erneut.", + expired: "Überprüfung abgelaufen. Bitte versuchen Sie es erneut.", + footer: 'Geschützt durch ALTCHA', + getAudioChallenge: "Audio-Herausforderung anfordern", + label: "Ich bin kein Roboter", + loading: "Lade...", + reload: "Neu laden", + verify: "Überprüfen", + verificationRequired: "Überprüfung erforderlich!", + verified: "Überprüft", + verifying: "Wird überprüft...", + waitAlert: "Überprüfung läuft... bitte warten.", + cancel: "Abbrechen", + enterCodeFromImage: "Um fortzufahren, geben Sie bitte den Code aus dem Bild unten ein." +}; +globalThis.$altcha.i18n.set("de", i18n); diff --git a/frontend/node_modules/altcha/dist/i18n/de.umd.cjs b/frontend/node_modules/altcha/dist/i18n/de.umd.cjs new file mode 100644 index 0000000..b5a4f63 --- /dev/null +++ b/frontend/node_modules/altcha/dist/i18n/de.umd.cjs @@ -0,0 +1,133 @@ +(function(factory) { + typeof define === "function" && define.amd ? define(factory) : factory(); +})((function() { + "use strict"; + const noop = () => { + }; + function safe_not_equal(a, b) { + return a != a ? b == b : a !== b || a !== null && typeof a === "object" || typeof a === "function"; + } + function subscribe_to_store(store2, run, invalidate) { + if (store2 == null) { + run(void 0); + return noop; + } + const unsub = untrack( + () => store2.subscribe( + run, + // @ts-expect-error + invalidate + ) + ); + return unsub.unsubscribe ? () => unsub.unsubscribe() : unsub; + } + const subscriber_queue = []; + function writable(value, start = noop) { + let stop = null; + const subscribers = /* @__PURE__ */ new Set(); + function set(new_value) { + if (safe_not_equal(value, new_value)) { + value = new_value; + if (stop) { + const run_queue = !subscriber_queue.length; + for (const subscriber of subscribers) { + subscriber[1](); + subscriber_queue.push(subscriber, value); + } + if (run_queue) { + for (let i = 0; i < subscriber_queue.length; i += 2) { + subscriber_queue[i][0](subscriber_queue[i + 1]); + } + subscriber_queue.length = 0; + } + } + } + } + function update(fn) { + set(fn( + /** @type {T} */ + value + )); + } + function subscribe(run, invalidate = noop) { + const subscriber = [run, invalidate]; + subscribers.add(subscriber); + if (subscribers.size === 1) { + stop = start(set, update) || noop; + } + run( + /** @type {T} */ + value + ); + return () => { + subscribers.delete(subscriber); + if (subscribers.size === 0 && stop) { + stop(); + stop = null; + } + }; + } + return { set, update, subscribe }; + } + function get(store2) { + let value; + subscribe_to_store(store2, (_) => value = _)(); + return value; + } + let untracking = false; + function untrack(fn) { + var previous_untracking = untracking; + try { + untracking = true; + return fn(); + } finally { + untracking = previous_untracking; + } + } + function store(defaultValue) { + const scope = { + get: (name) => { + return get(scope.store)[name]; + }, + set: (name, value) => { + if (typeof name === "string") { + Object.assign(get(scope.store), { + [name]: value + }); + } else { + Object.assign(get(scope.store), name); + } + scope.store.set(get(scope.store)); + }, + store: writable(defaultValue) + }; + return scope; + } + globalThis.$altcha = globalThis.$altcha || { + algorithms: /* @__PURE__ */ new Map(), + defaults: store({}), + i18n: store({}), + instances: /* @__PURE__ */ new Set(), + plugins: /* @__PURE__ */ new Set() + }; + const i18n = { + ariaLinkLabel: "Altcha (offizielle Website)", + enterCode: "Code eingeben", + enterCodeAria: "Geben Sie den Code ein, den Sie hören. Drücken Sie die Leertaste, um die Audio abzuspielen.", + error: "Überprüfung fehlgeschlagen. Bitte versuchen Sie es später erneut.", + expired: "Überprüfung abgelaufen. Bitte versuchen Sie es erneut.", + footer: 'Geschützt durch ALTCHA', + getAudioChallenge: "Audio-Herausforderung anfordern", + label: "Ich bin kein Roboter", + loading: "Lade...", + reload: "Neu laden", + verify: "Überprüfen", + verificationRequired: "Überprüfung erforderlich!", + verified: "Überprüft", + verifying: "Wird überprüft...", + waitAlert: "Überprüfung läuft... bitte warten.", + cancel: "Abbrechen", + enterCodeFromImage: "Um fortzufahren, geben Sie bitte den Code aus dem Bild unten ein." + }; + globalThis.$altcha.i18n.set("de", i18n); +})); diff --git a/frontend/node_modules/altcha/dist/i18n/el.d.ts b/frontend/node_modules/altcha/dist/i18n/el.d.ts new file mode 100644 index 0000000..ea96e64 --- /dev/null +++ b/frontend/node_modules/altcha/dist/i18n/el.d.ts @@ -0,0 +1 @@ +declare module 'altcha/i18n/el'; export {}; diff --git a/frontend/node_modules/altcha/dist/i18n/el.js b/frontend/node_modules/altcha/dist/i18n/el.js new file mode 100644 index 0000000..c6ed147 --- /dev/null +++ b/frontend/node_modules/altcha/dist/i18n/el.js @@ -0,0 +1,128 @@ +const noop = () => { +}; +function safe_not_equal(a, b) { + return a != a ? b == b : a !== b || a !== null && typeof a === "object" || typeof a === "function"; +} +function subscribe_to_store(store2, run, invalidate) { + if (store2 == null) { + run(void 0); + return noop; + } + const unsub = untrack( + () => store2.subscribe( + run, + // @ts-expect-error + invalidate + ) + ); + return unsub.unsubscribe ? () => unsub.unsubscribe() : unsub; +} +const subscriber_queue = []; +function writable(value, start = noop) { + let stop = null; + const subscribers = /* @__PURE__ */ new Set(); + function set(new_value) { + if (safe_not_equal(value, new_value)) { + value = new_value; + if (stop) { + const run_queue = !subscriber_queue.length; + for (const subscriber of subscribers) { + subscriber[1](); + subscriber_queue.push(subscriber, value); + } + if (run_queue) { + for (let i = 0; i < subscriber_queue.length; i += 2) { + subscriber_queue[i][0](subscriber_queue[i + 1]); + } + subscriber_queue.length = 0; + } + } + } + } + function update(fn) { + set(fn( + /** @type {T} */ + value + )); + } + function subscribe(run, invalidate = noop) { + const subscriber = [run, invalidate]; + subscribers.add(subscriber); + if (subscribers.size === 1) { + stop = start(set, update) || noop; + } + run( + /** @type {T} */ + value + ); + return () => { + subscribers.delete(subscriber); + if (subscribers.size === 0 && stop) { + stop(); + stop = null; + } + }; + } + return { set, update, subscribe }; +} +function get(store2) { + let value; + subscribe_to_store(store2, (_) => value = _)(); + return value; +} +let untracking = false; +function untrack(fn) { + var previous_untracking = untracking; + try { + untracking = true; + return fn(); + } finally { + untracking = previous_untracking; + } +} +function store(defaultValue) { + const scope = { + get: (name) => { + return get(scope.store)[name]; + }, + set: (name, value) => { + if (typeof name === "string") { + Object.assign(get(scope.store), { + [name]: value + }); + } else { + Object.assign(get(scope.store), name); + } + scope.store.set(get(scope.store)); + }, + store: writable(defaultValue) + }; + return scope; +} +globalThis.$altcha = globalThis.$altcha || { + algorithms: /* @__PURE__ */ new Map(), + defaults: store({}), + i18n: store({}), + instances: /* @__PURE__ */ new Set(), + plugins: /* @__PURE__ */ new Set() +}; +const i18n = { + ariaLinkLabel: "Altcha (επίσημος ιστότοπος)", + enterCode: "Εισαγάγετε κωδικό", + enterCodeAria: "Εισαγάγετε τον κωδικό που ακούτε. Πατήστε Space για να παίξετε τον ήχο.", + error: "Η επαλήθευση απέτυχε. Δοκιμάστε ξανά αργότερα.", + expired: "Η επαλήθευση έληξε. Δοκιμάστε ξανά.", + footer: 'Προστατεύεται από το ALTCHA', + getAudioChallenge: "Λήψη ηχητικής δοκιμασίας", + label: "Δεν είμαι ρομπότ", + loading: "Φόρτωση...", + reload: "Επαναφόρτωση", + verify: "Επαλήθευση", + verificationRequired: "Απαιτείται έλεγχος!", + verified: "Επαληθεύτηκε", + verifying: "Γίνεται επαλήθευση...", + waitAlert: "Γίνεται επαλήθευση... παρακαλώ περιμένετε.", + cancel: "Ακύρωση", + enterCodeFromImage: "Για να συνεχίσετε, εισάγετε τον κωδικό από την παρακάτω εικόνα." +}; +globalThis.$altcha.i18n.set("el", i18n); diff --git a/frontend/node_modules/altcha/dist/i18n/el.umd.cjs b/frontend/node_modules/altcha/dist/i18n/el.umd.cjs new file mode 100644 index 0000000..a7bbff6 --- /dev/null +++ b/frontend/node_modules/altcha/dist/i18n/el.umd.cjs @@ -0,0 +1,133 @@ +(function(factory) { + typeof define === "function" && define.amd ? define(factory) : factory(); +})((function() { + "use strict"; + const noop = () => { + }; + function safe_not_equal(a, b) { + return a != a ? b == b : a !== b || a !== null && typeof a === "object" || typeof a === "function"; + } + function subscribe_to_store(store2, run, invalidate) { + if (store2 == null) { + run(void 0); + return noop; + } + const unsub = untrack( + () => store2.subscribe( + run, + // @ts-expect-error + invalidate + ) + ); + return unsub.unsubscribe ? () => unsub.unsubscribe() : unsub; + } + const subscriber_queue = []; + function writable(value, start = noop) { + let stop = null; + const subscribers = /* @__PURE__ */ new Set(); + function set(new_value) { + if (safe_not_equal(value, new_value)) { + value = new_value; + if (stop) { + const run_queue = !subscriber_queue.length; + for (const subscriber of subscribers) { + subscriber[1](); + subscriber_queue.push(subscriber, value); + } + if (run_queue) { + for (let i = 0; i < subscriber_queue.length; i += 2) { + subscriber_queue[i][0](subscriber_queue[i + 1]); + } + subscriber_queue.length = 0; + } + } + } + } + function update(fn) { + set(fn( + /** @type {T} */ + value + )); + } + function subscribe(run, invalidate = noop) { + const subscriber = [run, invalidate]; + subscribers.add(subscriber); + if (subscribers.size === 1) { + stop = start(set, update) || noop; + } + run( + /** @type {T} */ + value + ); + return () => { + subscribers.delete(subscriber); + if (subscribers.size === 0 && stop) { + stop(); + stop = null; + } + }; + } + return { set, update, subscribe }; + } + function get(store2) { + let value; + subscribe_to_store(store2, (_) => value = _)(); + return value; + } + let untracking = false; + function untrack(fn) { + var previous_untracking = untracking; + try { + untracking = true; + return fn(); + } finally { + untracking = previous_untracking; + } + } + function store(defaultValue) { + const scope = { + get: (name) => { + return get(scope.store)[name]; + }, + set: (name, value) => { + if (typeof name === "string") { + Object.assign(get(scope.store), { + [name]: value + }); + } else { + Object.assign(get(scope.store), name); + } + scope.store.set(get(scope.store)); + }, + store: writable(defaultValue) + }; + return scope; + } + globalThis.$altcha = globalThis.$altcha || { + algorithms: /* @__PURE__ */ new Map(), + defaults: store({}), + i18n: store({}), + instances: /* @__PURE__ */ new Set(), + plugins: /* @__PURE__ */ new Set() + }; + const i18n = { + ariaLinkLabel: "Altcha (επίσημος ιστότοπος)", + enterCode: "Εισαγάγετε κωδικό", + enterCodeAria: "Εισαγάγετε τον κωδικό που ακούτε. Πατήστε Space για να παίξετε τον ήχο.", + error: "Η επαλήθευση απέτυχε. Δοκιμάστε ξανά αργότερα.", + expired: "Η επαλήθευση έληξε. Δοκιμάστε ξανά.", + footer: 'Προστατεύεται από το ALTCHA', + getAudioChallenge: "Λήψη ηχητικής δοκιμασίας", + label: "Δεν είμαι ρομπότ", + loading: "Φόρτωση...", + reload: "Επαναφόρτωση", + verify: "Επαλήθευση", + verificationRequired: "Απαιτείται έλεγχος!", + verified: "Επαληθεύτηκε", + verifying: "Γίνεται επαλήθευση...", + waitAlert: "Γίνεται επαλήθευση... παρακαλώ περιμένετε.", + cancel: "Ακύρωση", + enterCodeFromImage: "Για να συνεχίσετε, εισάγετε τον κωδικό από την παρακάτω εικόνα." + }; + globalThis.$altcha.i18n.set("el", i18n); +})); diff --git a/frontend/node_modules/altcha/dist/i18n/en.d.ts b/frontend/node_modules/altcha/dist/i18n/en.d.ts new file mode 100644 index 0000000..a4acab5 --- /dev/null +++ b/frontend/node_modules/altcha/dist/i18n/en.d.ts @@ -0,0 +1 @@ +declare module 'altcha/i18n/en'; export {}; diff --git a/frontend/node_modules/altcha/dist/i18n/en.js b/frontend/node_modules/altcha/dist/i18n/en.js new file mode 100644 index 0000000..f41d833 --- /dev/null +++ b/frontend/node_modules/altcha/dist/i18n/en.js @@ -0,0 +1,128 @@ +const noop = () => { +}; +function safe_not_equal(a, b) { + return a != a ? b == b : a !== b || a !== null && typeof a === "object" || typeof a === "function"; +} +function subscribe_to_store(store2, run, invalidate) { + if (store2 == null) { + run(void 0); + return noop; + } + const unsub = untrack( + () => store2.subscribe( + run, + // @ts-expect-error + invalidate + ) + ); + return unsub.unsubscribe ? () => unsub.unsubscribe() : unsub; +} +const subscriber_queue = []; +function writable(value, start = noop) { + let stop = null; + const subscribers = /* @__PURE__ */ new Set(); + function set(new_value) { + if (safe_not_equal(value, new_value)) { + value = new_value; + if (stop) { + const run_queue = !subscriber_queue.length; + for (const subscriber of subscribers) { + subscriber[1](); + subscriber_queue.push(subscriber, value); + } + if (run_queue) { + for (let i = 0; i < subscriber_queue.length; i += 2) { + subscriber_queue[i][0](subscriber_queue[i + 1]); + } + subscriber_queue.length = 0; + } + } + } + } + function update(fn) { + set(fn( + /** @type {T} */ + value + )); + } + function subscribe(run, invalidate = noop) { + const subscriber = [run, invalidate]; + subscribers.add(subscriber); + if (subscribers.size === 1) { + stop = start(set, update) || noop; + } + run( + /** @type {T} */ + value + ); + return () => { + subscribers.delete(subscriber); + if (subscribers.size === 0 && stop) { + stop(); + stop = null; + } + }; + } + return { set, update, subscribe }; +} +function get(store2) { + let value; + subscribe_to_store(store2, (_) => value = _)(); + return value; +} +let untracking = false; +function untrack(fn) { + var previous_untracking = untracking; + try { + untracking = true; + return fn(); + } finally { + untracking = previous_untracking; + } +} +function store(defaultValue) { + const scope = { + get: (name) => { + return get(scope.store)[name]; + }, + set: (name, value) => { + if (typeof name === "string") { + Object.assign(get(scope.store), { + [name]: value + }); + } else { + Object.assign(get(scope.store), name); + } + scope.store.set(get(scope.store)); + }, + store: writable(defaultValue) + }; + return scope; +} +globalThis.$altcha = globalThis.$altcha || { + algorithms: /* @__PURE__ */ new Map(), + defaults: store({}), + i18n: store({}), + instances: /* @__PURE__ */ new Set(), + plugins: /* @__PURE__ */ new Set() +}; +const i18n = { + ariaLinkLabel: "Altcha (official website)", + cancel: "Cancel", + enterCode: "Enter code", + enterCodeAria: "Enter code you hear. Press Space to play audio.", + enterCodeFromImage: "To proceed, please enter the code from the image below.", + error: "Verification failed. Try again later.", + expired: "Verification expired. Try again.", + footer: 'Protected by ALTCHA', + getAudioChallenge: "Get an audio challenge", + label: "I'm not a robot", + loading: "Loading...", + reload: "Reload", + verify: "Verify", + verificationRequired: "Verification required!", + verified: "Verified", + verifying: "Verifying...", + waitAlert: "Verifying... please wait." +}; +globalThis.$altcha.i18n.set("en", i18n); diff --git a/frontend/node_modules/altcha/dist/i18n/en.umd.cjs b/frontend/node_modules/altcha/dist/i18n/en.umd.cjs new file mode 100644 index 0000000..9d40bd6 --- /dev/null +++ b/frontend/node_modules/altcha/dist/i18n/en.umd.cjs @@ -0,0 +1,133 @@ +(function(factory) { + typeof define === "function" && define.amd ? define(factory) : factory(); +})((function() { + "use strict"; + const noop = () => { + }; + function safe_not_equal(a, b) { + return a != a ? b == b : a !== b || a !== null && typeof a === "object" || typeof a === "function"; + } + function subscribe_to_store(store2, run, invalidate) { + if (store2 == null) { + run(void 0); + return noop; + } + const unsub = untrack( + () => store2.subscribe( + run, + // @ts-expect-error + invalidate + ) + ); + return unsub.unsubscribe ? () => unsub.unsubscribe() : unsub; + } + const subscriber_queue = []; + function writable(value, start = noop) { + let stop = null; + const subscribers = /* @__PURE__ */ new Set(); + function set(new_value) { + if (safe_not_equal(value, new_value)) { + value = new_value; + if (stop) { + const run_queue = !subscriber_queue.length; + for (const subscriber of subscribers) { + subscriber[1](); + subscriber_queue.push(subscriber, value); + } + if (run_queue) { + for (let i = 0; i < subscriber_queue.length; i += 2) { + subscriber_queue[i][0](subscriber_queue[i + 1]); + } + subscriber_queue.length = 0; + } + } + } + } + function update(fn) { + set(fn( + /** @type {T} */ + value + )); + } + function subscribe(run, invalidate = noop) { + const subscriber = [run, invalidate]; + subscribers.add(subscriber); + if (subscribers.size === 1) { + stop = start(set, update) || noop; + } + run( + /** @type {T} */ + value + ); + return () => { + subscribers.delete(subscriber); + if (subscribers.size === 0 && stop) { + stop(); + stop = null; + } + }; + } + return { set, update, subscribe }; + } + function get(store2) { + let value; + subscribe_to_store(store2, (_) => value = _)(); + return value; + } + let untracking = false; + function untrack(fn) { + var previous_untracking = untracking; + try { + untracking = true; + return fn(); + } finally { + untracking = previous_untracking; + } + } + function store(defaultValue) { + const scope = { + get: (name) => { + return get(scope.store)[name]; + }, + set: (name, value) => { + if (typeof name === "string") { + Object.assign(get(scope.store), { + [name]: value + }); + } else { + Object.assign(get(scope.store), name); + } + scope.store.set(get(scope.store)); + }, + store: writable(defaultValue) + }; + return scope; + } + globalThis.$altcha = globalThis.$altcha || { + algorithms: /* @__PURE__ */ new Map(), + defaults: store({}), + i18n: store({}), + instances: /* @__PURE__ */ new Set(), + plugins: /* @__PURE__ */ new Set() + }; + const i18n = { + ariaLinkLabel: "Altcha (official website)", + cancel: "Cancel", + enterCode: "Enter code", + enterCodeAria: "Enter code you hear. Press Space to play audio.", + enterCodeFromImage: "To proceed, please enter the code from the image below.", + error: "Verification failed. Try again later.", + expired: "Verification expired. Try again.", + footer: 'Protected by ALTCHA', + getAudioChallenge: "Get an audio challenge", + label: "I'm not a robot", + loading: "Loading...", + reload: "Reload", + verify: "Verify", + verificationRequired: "Verification required!", + verified: "Verified", + verifying: "Verifying...", + waitAlert: "Verifying... please wait." + }; + globalThis.$altcha.i18n.set("en", i18n); +})); diff --git a/frontend/node_modules/altcha/dist/i18n/es-419.js b/frontend/node_modules/altcha/dist/i18n/es-419.js new file mode 100644 index 0000000..c2e2c89 --- /dev/null +++ b/frontend/node_modules/altcha/dist/i18n/es-419.js @@ -0,0 +1,128 @@ +const noop = () => { +}; +function safe_not_equal(a, b) { + return a != a ? b == b : a !== b || a !== null && typeof a === "object" || typeof a === "function"; +} +function subscribe_to_store(store2, run, invalidate) { + if (store2 == null) { + run(void 0); + return noop; + } + const unsub = untrack( + () => store2.subscribe( + run, + // @ts-expect-error + invalidate + ) + ); + return unsub.unsubscribe ? () => unsub.unsubscribe() : unsub; +} +const subscriber_queue = []; +function writable(value, start = noop) { + let stop = null; + const subscribers = /* @__PURE__ */ new Set(); + function set(new_value) { + if (safe_not_equal(value, new_value)) { + value = new_value; + if (stop) { + const run_queue = !subscriber_queue.length; + for (const subscriber of subscribers) { + subscriber[1](); + subscriber_queue.push(subscriber, value); + } + if (run_queue) { + for (let i = 0; i < subscriber_queue.length; i += 2) { + subscriber_queue[i][0](subscriber_queue[i + 1]); + } + subscriber_queue.length = 0; + } + } + } + } + function update(fn) { + set(fn( + /** @type {T} */ + value + )); + } + function subscribe(run, invalidate = noop) { + const subscriber = [run, invalidate]; + subscribers.add(subscriber); + if (subscribers.size === 1) { + stop = start(set, update) || noop; + } + run( + /** @type {T} */ + value + ); + return () => { + subscribers.delete(subscriber); + if (subscribers.size === 0 && stop) { + stop(); + stop = null; + } + }; + } + return { set, update, subscribe }; +} +function get(store2) { + let value; + subscribe_to_store(store2, (_) => value = _)(); + return value; +} +let untracking = false; +function untrack(fn) { + var previous_untracking = untracking; + try { + untracking = true; + return fn(); + } finally { + untracking = previous_untracking; + } +} +function store(defaultValue) { + const scope = { + get: (name) => { + return get(scope.store)[name]; + }, + set: (name, value) => { + if (typeof name === "string") { + Object.assign(get(scope.store), { + [name]: value + }); + } else { + Object.assign(get(scope.store), name); + } + scope.store.set(get(scope.store)); + }, + store: writable(defaultValue) + }; + return scope; +} +globalThis.$altcha = globalThis.$altcha || { + algorithms: /* @__PURE__ */ new Map(), + defaults: store({}), + i18n: store({}), + instances: /* @__PURE__ */ new Set(), + plugins: /* @__PURE__ */ new Set() +}; +const i18n = { + ariaLinkLabel: "Altcha (sitio web oficial)", + enterCode: "Ingresa el código", + enterCodeAria: "Ingresa el código que escuchas. Presiona Espacio para reproducir el audio.", + error: "Falló la verificación. Por favor vuelve a intentarlo más tarde.", + expired: "La verificación expiró. Por favor inténtalo de nuevo.", + footer: 'Protegido por ALTCHA', + getAudioChallenge: "Obtener un reto de audio", + label: "No soy un robot", + loading: "Cargando...", + reload: "Volver a cargar", + verify: "Verificar", + verificationRequired: "¡Verificación requerida!", + verified: "Verificado", + verifying: "Verificando...", + waitAlert: "Verificando... por favor espera.", + cancel: "Cancelar", + enterCodeFromImage: "Para continuar, ingresa el código de la imagen a continuación." +}; +globalThis.$altcha.i18n.set("es-419", i18n); diff --git a/frontend/node_modules/altcha/dist/i18n/es-419.umd.cjs b/frontend/node_modules/altcha/dist/i18n/es-419.umd.cjs new file mode 100644 index 0000000..0fbe46c --- /dev/null +++ b/frontend/node_modules/altcha/dist/i18n/es-419.umd.cjs @@ -0,0 +1,133 @@ +(function(factory) { + typeof define === "function" && define.amd ? define(factory) : factory(); +})((function() { + "use strict"; + const noop = () => { + }; + function safe_not_equal(a, b) { + return a != a ? b == b : a !== b || a !== null && typeof a === "object" || typeof a === "function"; + } + function subscribe_to_store(store2, run, invalidate) { + if (store2 == null) { + run(void 0); + return noop; + } + const unsub = untrack( + () => store2.subscribe( + run, + // @ts-expect-error + invalidate + ) + ); + return unsub.unsubscribe ? () => unsub.unsubscribe() : unsub; + } + const subscriber_queue = []; + function writable(value, start = noop) { + let stop = null; + const subscribers = /* @__PURE__ */ new Set(); + function set(new_value) { + if (safe_not_equal(value, new_value)) { + value = new_value; + if (stop) { + const run_queue = !subscriber_queue.length; + for (const subscriber of subscribers) { + subscriber[1](); + subscriber_queue.push(subscriber, value); + } + if (run_queue) { + for (let i = 0; i < subscriber_queue.length; i += 2) { + subscriber_queue[i][0](subscriber_queue[i + 1]); + } + subscriber_queue.length = 0; + } + } + } + } + function update(fn) { + set(fn( + /** @type {T} */ + value + )); + } + function subscribe(run, invalidate = noop) { + const subscriber = [run, invalidate]; + subscribers.add(subscriber); + if (subscribers.size === 1) { + stop = start(set, update) || noop; + } + run( + /** @type {T} */ + value + ); + return () => { + subscribers.delete(subscriber); + if (subscribers.size === 0 && stop) { + stop(); + stop = null; + } + }; + } + return { set, update, subscribe }; + } + function get(store2) { + let value; + subscribe_to_store(store2, (_) => value = _)(); + return value; + } + let untracking = false; + function untrack(fn) { + var previous_untracking = untracking; + try { + untracking = true; + return fn(); + } finally { + untracking = previous_untracking; + } + } + function store(defaultValue) { + const scope = { + get: (name) => { + return get(scope.store)[name]; + }, + set: (name, value) => { + if (typeof name === "string") { + Object.assign(get(scope.store), { + [name]: value + }); + } else { + Object.assign(get(scope.store), name); + } + scope.store.set(get(scope.store)); + }, + store: writable(defaultValue) + }; + return scope; + } + globalThis.$altcha = globalThis.$altcha || { + algorithms: /* @__PURE__ */ new Map(), + defaults: store({}), + i18n: store({}), + instances: /* @__PURE__ */ new Set(), + plugins: /* @__PURE__ */ new Set() + }; + const i18n = { + ariaLinkLabel: "Altcha (sitio web oficial)", + enterCode: "Ingresa el código", + enterCodeAria: "Ingresa el código que escuchas. Presiona Espacio para reproducir el audio.", + error: "Falló la verificación. Por favor vuelve a intentarlo más tarde.", + expired: "La verificación expiró. Por favor inténtalo de nuevo.", + footer: 'Protegido por ALTCHA', + getAudioChallenge: "Obtener un reto de audio", + label: "No soy un robot", + loading: "Cargando...", + reload: "Volver a cargar", + verify: "Verificar", + verificationRequired: "¡Verificación requerida!", + verified: "Verificado", + verifying: "Verificando...", + waitAlert: "Verificando... por favor espera.", + cancel: "Cancelar", + enterCodeFromImage: "Para continuar, ingresa el código de la imagen a continuación." + }; + globalThis.$altcha.i18n.set("es-419", i18n); +})); diff --git a/frontend/node_modules/altcha/dist/i18n/es-es.js b/frontend/node_modules/altcha/dist/i18n/es-es.js new file mode 100644 index 0000000..4e7a52e --- /dev/null +++ b/frontend/node_modules/altcha/dist/i18n/es-es.js @@ -0,0 +1,128 @@ +const noop = () => { +}; +function safe_not_equal(a, b) { + return a != a ? b == b : a !== b || a !== null && typeof a === "object" || typeof a === "function"; +} +function subscribe_to_store(store2, run, invalidate) { + if (store2 == null) { + run(void 0); + return noop; + } + const unsub = untrack( + () => store2.subscribe( + run, + // @ts-expect-error + invalidate + ) + ); + return unsub.unsubscribe ? () => unsub.unsubscribe() : unsub; +} +const subscriber_queue = []; +function writable(value, start = noop) { + let stop = null; + const subscribers = /* @__PURE__ */ new Set(); + function set(new_value) { + if (safe_not_equal(value, new_value)) { + value = new_value; + if (stop) { + const run_queue = !subscriber_queue.length; + for (const subscriber of subscribers) { + subscriber[1](); + subscriber_queue.push(subscriber, value); + } + if (run_queue) { + for (let i = 0; i < subscriber_queue.length; i += 2) { + subscriber_queue[i][0](subscriber_queue[i + 1]); + } + subscriber_queue.length = 0; + } + } + } + } + function update(fn) { + set(fn( + /** @type {T} */ + value + )); + } + function subscribe(run, invalidate = noop) { + const subscriber = [run, invalidate]; + subscribers.add(subscriber); + if (subscribers.size === 1) { + stop = start(set, update) || noop; + } + run( + /** @type {T} */ + value + ); + return () => { + subscribers.delete(subscriber); + if (subscribers.size === 0 && stop) { + stop(); + stop = null; + } + }; + } + return { set, update, subscribe }; +} +function get(store2) { + let value; + subscribe_to_store(store2, (_) => value = _)(); + return value; +} +let untracking = false; +function untrack(fn) { + var previous_untracking = untracking; + try { + untracking = true; + return fn(); + } finally { + untracking = previous_untracking; + } +} +function store(defaultValue) { + const scope = { + get: (name) => { + return get(scope.store)[name]; + }, + set: (name, value) => { + if (typeof name === "string") { + Object.assign(get(scope.store), { + [name]: value + }); + } else { + Object.assign(get(scope.store), name); + } + scope.store.set(get(scope.store)); + }, + store: writable(defaultValue) + }; + return scope; +} +globalThis.$altcha = globalThis.$altcha || { + algorithms: /* @__PURE__ */ new Map(), + defaults: store({}), + i18n: store({}), + instances: /* @__PURE__ */ new Set(), + plugins: /* @__PURE__ */ new Set() +}; +const i18n = { + ariaLinkLabel: "Altcha (sitio web oficial)", + enterCode: "Introduce el código", + enterCodeAria: "Introduce el código que escuchas. Pulsa Espacio para reproducir el audio.", + error: "Falló la verificación. Por favor intente nuevamente más tarde.", + expired: "Verificación expirada. Por favor intente nuevamente.", + footer: 'Protegido por ALTCHA', + getAudioChallenge: "Obtener un desafío de audio", + label: "No soy un robot", + loading: "Cargando...", + reload: "Recargar", + verify: "Verificar", + verificationRequired: "¡Verificación requerida!", + verified: "Verificado", + verifying: "Verificando...", + waitAlert: "Verificando... por favor espere.", + cancel: "Cancelar", + enterCodeFromImage: "Para continuar, introduzca el código de la imagen de abajo." +}; +globalThis.$altcha.i18n.set("es-es", i18n); diff --git a/frontend/node_modules/altcha/dist/i18n/es-es.umd.cjs b/frontend/node_modules/altcha/dist/i18n/es-es.umd.cjs new file mode 100644 index 0000000..d417ac6 --- /dev/null +++ b/frontend/node_modules/altcha/dist/i18n/es-es.umd.cjs @@ -0,0 +1,133 @@ +(function(factory) { + typeof define === "function" && define.amd ? define(factory) : factory(); +})((function() { + "use strict"; + const noop = () => { + }; + function safe_not_equal(a, b) { + return a != a ? b == b : a !== b || a !== null && typeof a === "object" || typeof a === "function"; + } + function subscribe_to_store(store2, run, invalidate) { + if (store2 == null) { + run(void 0); + return noop; + } + const unsub = untrack( + () => store2.subscribe( + run, + // @ts-expect-error + invalidate + ) + ); + return unsub.unsubscribe ? () => unsub.unsubscribe() : unsub; + } + const subscriber_queue = []; + function writable(value, start = noop) { + let stop = null; + const subscribers = /* @__PURE__ */ new Set(); + function set(new_value) { + if (safe_not_equal(value, new_value)) { + value = new_value; + if (stop) { + const run_queue = !subscriber_queue.length; + for (const subscriber of subscribers) { + subscriber[1](); + subscriber_queue.push(subscriber, value); + } + if (run_queue) { + for (let i = 0; i < subscriber_queue.length; i += 2) { + subscriber_queue[i][0](subscriber_queue[i + 1]); + } + subscriber_queue.length = 0; + } + } + } + } + function update(fn) { + set(fn( + /** @type {T} */ + value + )); + } + function subscribe(run, invalidate = noop) { + const subscriber = [run, invalidate]; + subscribers.add(subscriber); + if (subscribers.size === 1) { + stop = start(set, update) || noop; + } + run( + /** @type {T} */ + value + ); + return () => { + subscribers.delete(subscriber); + if (subscribers.size === 0 && stop) { + stop(); + stop = null; + } + }; + } + return { set, update, subscribe }; + } + function get(store2) { + let value; + subscribe_to_store(store2, (_) => value = _)(); + return value; + } + let untracking = false; + function untrack(fn) { + var previous_untracking = untracking; + try { + untracking = true; + return fn(); + } finally { + untracking = previous_untracking; + } + } + function store(defaultValue) { + const scope = { + get: (name) => { + return get(scope.store)[name]; + }, + set: (name, value) => { + if (typeof name === "string") { + Object.assign(get(scope.store), { + [name]: value + }); + } else { + Object.assign(get(scope.store), name); + } + scope.store.set(get(scope.store)); + }, + store: writable(defaultValue) + }; + return scope; + } + globalThis.$altcha = globalThis.$altcha || { + algorithms: /* @__PURE__ */ new Map(), + defaults: store({}), + i18n: store({}), + instances: /* @__PURE__ */ new Set(), + plugins: /* @__PURE__ */ new Set() + }; + const i18n = { + ariaLinkLabel: "Altcha (sitio web oficial)", + enterCode: "Introduce el código", + enterCodeAria: "Introduce el código que escuchas. Pulsa Espacio para reproducir el audio.", + error: "Falló la verificación. Por favor intente nuevamente más tarde.", + expired: "Verificación expirada. Por favor intente nuevamente.", + footer: 'Protegido por ALTCHA', + getAudioChallenge: "Obtener un desafío de audio", + label: "No soy un robot", + loading: "Cargando...", + reload: "Recargar", + verify: "Verificar", + verificationRequired: "¡Verificación requerida!", + verified: "Verificado", + verifying: "Verificando...", + waitAlert: "Verificando... por favor espere.", + cancel: "Cancelar", + enterCodeFromImage: "Para continuar, introduzca el código de la imagen de abajo." + }; + globalThis.$altcha.i18n.set("es-es", i18n); +})); diff --git a/frontend/node_modules/altcha/dist/i18n/es.d.ts b/frontend/node_modules/altcha/dist/i18n/es.d.ts new file mode 100644 index 0000000..1b43516 --- /dev/null +++ b/frontend/node_modules/altcha/dist/i18n/es.d.ts @@ -0,0 +1 @@ +declare module 'altcha/i18n/es'; export {}; diff --git a/frontend/node_modules/altcha/dist/i18n/et.d.ts b/frontend/node_modules/altcha/dist/i18n/et.d.ts new file mode 100644 index 0000000..b1923cd --- /dev/null +++ b/frontend/node_modules/altcha/dist/i18n/et.d.ts @@ -0,0 +1 @@ +declare module 'altcha/i18n/et'; export {}; diff --git a/frontend/node_modules/altcha/dist/i18n/et.js b/frontend/node_modules/altcha/dist/i18n/et.js new file mode 100644 index 0000000..f98cf60 --- /dev/null +++ b/frontend/node_modules/altcha/dist/i18n/et.js @@ -0,0 +1,128 @@ +const noop = () => { +}; +function safe_not_equal(a, b) { + return a != a ? b == b : a !== b || a !== null && typeof a === "object" || typeof a === "function"; +} +function subscribe_to_store(store2, run, invalidate) { + if (store2 == null) { + run(void 0); + return noop; + } + const unsub = untrack( + () => store2.subscribe( + run, + // @ts-expect-error + invalidate + ) + ); + return unsub.unsubscribe ? () => unsub.unsubscribe() : unsub; +} +const subscriber_queue = []; +function writable(value, start = noop) { + let stop = null; + const subscribers = /* @__PURE__ */ new Set(); + function set(new_value) { + if (safe_not_equal(value, new_value)) { + value = new_value; + if (stop) { + const run_queue = !subscriber_queue.length; + for (const subscriber of subscribers) { + subscriber[1](); + subscriber_queue.push(subscriber, value); + } + if (run_queue) { + for (let i = 0; i < subscriber_queue.length; i += 2) { + subscriber_queue[i][0](subscriber_queue[i + 1]); + } + subscriber_queue.length = 0; + } + } + } + } + function update(fn) { + set(fn( + /** @type {T} */ + value + )); + } + function subscribe(run, invalidate = noop) { + const subscriber = [run, invalidate]; + subscribers.add(subscriber); + if (subscribers.size === 1) { + stop = start(set, update) || noop; + } + run( + /** @type {T} */ + value + ); + return () => { + subscribers.delete(subscriber); + if (subscribers.size === 0 && stop) { + stop(); + stop = null; + } + }; + } + return { set, update, subscribe }; +} +function get(store2) { + let value; + subscribe_to_store(store2, (_) => value = _)(); + return value; +} +let untracking = false; +function untrack(fn) { + var previous_untracking = untracking; + try { + untracking = true; + return fn(); + } finally { + untracking = previous_untracking; + } +} +function store(defaultValue) { + const scope = { + get: (name) => { + return get(scope.store)[name]; + }, + set: (name, value) => { + if (typeof name === "string") { + Object.assign(get(scope.store), { + [name]: value + }); + } else { + Object.assign(get(scope.store), name); + } + scope.store.set(get(scope.store)); + }, + store: writable(defaultValue) + }; + return scope; +} +globalThis.$altcha = globalThis.$altcha || { + algorithms: /* @__PURE__ */ new Map(), + defaults: store({}), + i18n: store({}), + instances: /* @__PURE__ */ new Set(), + plugins: /* @__PURE__ */ new Set() +}; +const i18n = { + ariaLinkLabel: "Altcha (ametlik veebisait)", + enterCode: "Sisesta kood", + enterCodeAria: "Sisestage kuuldu kood. Vajutage tühikut, et esitada heli.", + error: "Kinnitamine ebaõnnestus. Proovi hiljem uuesti.", + expired: "Kinnitamine aegus. Proovi uuesti.", + footer: 'Kaitstud ALTCHA poolt', + getAudioChallenge: "Hangi heliülesanne", + label: "Ma ei ole robot", + loading: "Laadimine...", + reload: "Laadi uuesti", + verify: "Kinnita", + verificationRequired: "Kontroll on vajalik!", + verified: "Kinnitatud", + verifying: "Kinnitamine...", + waitAlert: "Kinnitamine... palun oota.", + cancel: "Tühista", + enterCodeFromImage: "Jätkamiseks sisestage alloleval pildil olev kood." +}; +globalThis.$altcha.i18n.set("et", i18n); diff --git a/frontend/node_modules/altcha/dist/i18n/et.umd.cjs b/frontend/node_modules/altcha/dist/i18n/et.umd.cjs new file mode 100644 index 0000000..d34f8a5 --- /dev/null +++ b/frontend/node_modules/altcha/dist/i18n/et.umd.cjs @@ -0,0 +1,133 @@ +(function(factory) { + typeof define === "function" && define.amd ? define(factory) : factory(); +})((function() { + "use strict"; + const noop = () => { + }; + function safe_not_equal(a, b) { + return a != a ? b == b : a !== b || a !== null && typeof a === "object" || typeof a === "function"; + } + function subscribe_to_store(store2, run, invalidate) { + if (store2 == null) { + run(void 0); + return noop; + } + const unsub = untrack( + () => store2.subscribe( + run, + // @ts-expect-error + invalidate + ) + ); + return unsub.unsubscribe ? () => unsub.unsubscribe() : unsub; + } + const subscriber_queue = []; + function writable(value, start = noop) { + let stop = null; + const subscribers = /* @__PURE__ */ new Set(); + function set(new_value) { + if (safe_not_equal(value, new_value)) { + value = new_value; + if (stop) { + const run_queue = !subscriber_queue.length; + for (const subscriber of subscribers) { + subscriber[1](); + subscriber_queue.push(subscriber, value); + } + if (run_queue) { + for (let i = 0; i < subscriber_queue.length; i += 2) { + subscriber_queue[i][0](subscriber_queue[i + 1]); + } + subscriber_queue.length = 0; + } + } + } + } + function update(fn) { + set(fn( + /** @type {T} */ + value + )); + } + function subscribe(run, invalidate = noop) { + const subscriber = [run, invalidate]; + subscribers.add(subscriber); + if (subscribers.size === 1) { + stop = start(set, update) || noop; + } + run( + /** @type {T} */ + value + ); + return () => { + subscribers.delete(subscriber); + if (subscribers.size === 0 && stop) { + stop(); + stop = null; + } + }; + } + return { set, update, subscribe }; + } + function get(store2) { + let value; + subscribe_to_store(store2, (_) => value = _)(); + return value; + } + let untracking = false; + function untrack(fn) { + var previous_untracking = untracking; + try { + untracking = true; + return fn(); + } finally { + untracking = previous_untracking; + } + } + function store(defaultValue) { + const scope = { + get: (name) => { + return get(scope.store)[name]; + }, + set: (name, value) => { + if (typeof name === "string") { + Object.assign(get(scope.store), { + [name]: value + }); + } else { + Object.assign(get(scope.store), name); + } + scope.store.set(get(scope.store)); + }, + store: writable(defaultValue) + }; + return scope; + } + globalThis.$altcha = globalThis.$altcha || { + algorithms: /* @__PURE__ */ new Map(), + defaults: store({}), + i18n: store({}), + instances: /* @__PURE__ */ new Set(), + plugins: /* @__PURE__ */ new Set() + }; + const i18n = { + ariaLinkLabel: "Altcha (ametlik veebisait)", + enterCode: "Sisesta kood", + enterCodeAria: "Sisestage kuuldu kood. Vajutage tühikut, et esitada heli.", + error: "Kinnitamine ebaõnnestus. Proovi hiljem uuesti.", + expired: "Kinnitamine aegus. Proovi uuesti.", + footer: 'Kaitstud ALTCHA poolt', + getAudioChallenge: "Hangi heliülesanne", + label: "Ma ei ole robot", + loading: "Laadimine...", + reload: "Laadi uuesti", + verify: "Kinnita", + verificationRequired: "Kontroll on vajalik!", + verified: "Kinnitatud", + verifying: "Kinnitamine...", + waitAlert: "Kinnitamine... palun oota.", + cancel: "Tühista", + enterCodeFromImage: "Jätkamiseks sisestage alloleval pildil olev kood." + }; + globalThis.$altcha.i18n.set("et", i18n); +})); diff --git a/frontend/node_modules/altcha/dist/i18n/eu.d.ts b/frontend/node_modules/altcha/dist/i18n/eu.d.ts new file mode 100644 index 0000000..89cebb6 --- /dev/null +++ b/frontend/node_modules/altcha/dist/i18n/eu.d.ts @@ -0,0 +1 @@ +declare module 'altcha/i18n/eu'; export {}; diff --git a/frontend/node_modules/altcha/dist/i18n/eu.js b/frontend/node_modules/altcha/dist/i18n/eu.js new file mode 100644 index 0000000..1dbaf4f --- /dev/null +++ b/frontend/node_modules/altcha/dist/i18n/eu.js @@ -0,0 +1,128 @@ +const noop = () => { +}; +function safe_not_equal(a, b) { + return a != a ? b == b : a !== b || a !== null && typeof a === "object" || typeof a === "function"; +} +function subscribe_to_store(store2, run, invalidate) { + if (store2 == null) { + run(void 0); + return noop; + } + const unsub = untrack( + () => store2.subscribe( + run, + // @ts-expect-error + invalidate + ) + ); + return unsub.unsubscribe ? () => unsub.unsubscribe() : unsub; +} +const subscriber_queue = []; +function writable(value, start = noop) { + let stop = null; + const subscribers = /* @__PURE__ */ new Set(); + function set(new_value) { + if (safe_not_equal(value, new_value)) { + value = new_value; + if (stop) { + const run_queue = !subscriber_queue.length; + for (const subscriber of subscribers) { + subscriber[1](); + subscriber_queue.push(subscriber, value); + } + if (run_queue) { + for (let i = 0; i < subscriber_queue.length; i += 2) { + subscriber_queue[i][0](subscriber_queue[i + 1]); + } + subscriber_queue.length = 0; + } + } + } + } + function update(fn) { + set(fn( + /** @type {T} */ + value + )); + } + function subscribe(run, invalidate = noop) { + const subscriber = [run, invalidate]; + subscribers.add(subscriber); + if (subscribers.size === 1) { + stop = start(set, update) || noop; + } + run( + /** @type {T} */ + value + ); + return () => { + subscribers.delete(subscriber); + if (subscribers.size === 0 && stop) { + stop(); + stop = null; + } + }; + } + return { set, update, subscribe }; +} +function get(store2) { + let value; + subscribe_to_store(store2, (_) => value = _)(); + return value; +} +let untracking = false; +function untrack(fn) { + var previous_untracking = untracking; + try { + untracking = true; + return fn(); + } finally { + untracking = previous_untracking; + } +} +function store(defaultValue) { + const scope = { + get: (name) => { + return get(scope.store)[name]; + }, + set: (name, value) => { + if (typeof name === "string") { + Object.assign(get(scope.store), { + [name]: value + }); + } else { + Object.assign(get(scope.store), name); + } + scope.store.set(get(scope.store)); + }, + store: writable(defaultValue) + }; + return scope; +} +globalThis.$altcha = globalThis.$altcha || { + algorithms: /* @__PURE__ */ new Map(), + defaults: store({}), + i18n: store({}), + instances: /* @__PURE__ */ new Set(), + plugins: /* @__PURE__ */ new Set() +}; +const i18n = { + ariaLinkLabel: "Altcha (webgune ofiziala)", + enterCode: "Sartu kodea", + enterCodeAria: "Sartu entzun duzun kodea. Sakatu Espazioa audioa erreproduzitzeko.", + error: "Egiaztatzeak huts egin du. Saiatu berriro geroago.", + expired: "Egiaztatzea iraungi da. Saiatu berriro.", + footer: 'ALTCHAk babestuta', + getAudioChallenge: "Jaso audio-erronka bat", + label: "Ez naiz robot bat", + loading: "Kargatzen...", + reload: "Birkargatu", + verify: "Egiaztatu", + verificationRequired: "Egiaztatzea beharrezkoa da!", + verified: "Egiaztatuta", + verifying: "Egiaztatzen...", + waitAlert: "Egiaztatzen... itxaron mesedez.", + cancel: "Utzi", + enterCodeFromImage: "Jarraitzeko, idatzi beheko irudiko kodea." +}; +globalThis.$altcha.i18n.set("eu", i18n); diff --git a/frontend/node_modules/altcha/dist/i18n/eu.umd.cjs b/frontend/node_modules/altcha/dist/i18n/eu.umd.cjs new file mode 100644 index 0000000..5d9bdb1 --- /dev/null +++ b/frontend/node_modules/altcha/dist/i18n/eu.umd.cjs @@ -0,0 +1,133 @@ +(function(factory) { + typeof define === "function" && define.amd ? define(factory) : factory(); +})((function() { + "use strict"; + const noop = () => { + }; + function safe_not_equal(a, b) { + return a != a ? b == b : a !== b || a !== null && typeof a === "object" || typeof a === "function"; + } + function subscribe_to_store(store2, run, invalidate) { + if (store2 == null) { + run(void 0); + return noop; + } + const unsub = untrack( + () => store2.subscribe( + run, + // @ts-expect-error + invalidate + ) + ); + return unsub.unsubscribe ? () => unsub.unsubscribe() : unsub; + } + const subscriber_queue = []; + function writable(value, start = noop) { + let stop = null; + const subscribers = /* @__PURE__ */ new Set(); + function set(new_value) { + if (safe_not_equal(value, new_value)) { + value = new_value; + if (stop) { + const run_queue = !subscriber_queue.length; + for (const subscriber of subscribers) { + subscriber[1](); + subscriber_queue.push(subscriber, value); + } + if (run_queue) { + for (let i = 0; i < subscriber_queue.length; i += 2) { + subscriber_queue[i][0](subscriber_queue[i + 1]); + } + subscriber_queue.length = 0; + } + } + } + } + function update(fn) { + set(fn( + /** @type {T} */ + value + )); + } + function subscribe(run, invalidate = noop) { + const subscriber = [run, invalidate]; + subscribers.add(subscriber); + if (subscribers.size === 1) { + stop = start(set, update) || noop; + } + run( + /** @type {T} */ + value + ); + return () => { + subscribers.delete(subscriber); + if (subscribers.size === 0 && stop) { + stop(); + stop = null; + } + }; + } + return { set, update, subscribe }; + } + function get(store2) { + let value; + subscribe_to_store(store2, (_) => value = _)(); + return value; + } + let untracking = false; + function untrack(fn) { + var previous_untracking = untracking; + try { + untracking = true; + return fn(); + } finally { + untracking = previous_untracking; + } + } + function store(defaultValue) { + const scope = { + get: (name) => { + return get(scope.store)[name]; + }, + set: (name, value) => { + if (typeof name === "string") { + Object.assign(get(scope.store), { + [name]: value + }); + } else { + Object.assign(get(scope.store), name); + } + scope.store.set(get(scope.store)); + }, + store: writable(defaultValue) + }; + return scope; + } + globalThis.$altcha = globalThis.$altcha || { + algorithms: /* @__PURE__ */ new Map(), + defaults: store({}), + i18n: store({}), + instances: /* @__PURE__ */ new Set(), + plugins: /* @__PURE__ */ new Set() + }; + const i18n = { + ariaLinkLabel: "Altcha (webgune ofiziala)", + enterCode: "Sartu kodea", + enterCodeAria: "Sartu entzun duzun kodea. Sakatu Espazioa audioa erreproduzitzeko.", + error: "Egiaztatzeak huts egin du. Saiatu berriro geroago.", + expired: "Egiaztatzea iraungi da. Saiatu berriro.", + footer: 'ALTCHAk babestuta', + getAudioChallenge: "Jaso audio-erronka bat", + label: "Ez naiz robot bat", + loading: "Kargatzen...", + reload: "Birkargatu", + verify: "Egiaztatu", + verificationRequired: "Egiaztatzea beharrezkoa da!", + verified: "Egiaztatuta", + verifying: "Egiaztatzen...", + waitAlert: "Egiaztatzen... itxaron mesedez.", + cancel: "Utzi", + enterCodeFromImage: "Jarraitzeko, idatzi beheko irudiko kodea." + }; + globalThis.$altcha.i18n.set("eu", i18n); +})); diff --git a/frontend/node_modules/altcha/dist/i18n/europe.d.ts b/frontend/node_modules/altcha/dist/i18n/europe.d.ts new file mode 100644 index 0000000..679159c --- /dev/null +++ b/frontend/node_modules/altcha/dist/i18n/europe.d.ts @@ -0,0 +1 @@ +declare module 'altcha/i18n/europe'; export {}; diff --git a/frontend/node_modules/altcha/dist/i18n/europe.js b/frontend/node_modules/altcha/dist/i18n/europe.js new file mode 100644 index 0000000..6923aa4 --- /dev/null +++ b/frontend/node_modules/altcha/dist/i18n/europe.js @@ -0,0 +1,848 @@ +const noop = () => { +}; +function safe_not_equal(a, b) { + return a != a ? b == b : a !== b || a !== null && typeof a === "object" || typeof a === "function"; +} +function subscribe_to_store(store2, run, invalidate) { + if (store2 == null) { + run(void 0); + return noop; + } + const unsub = untrack( + () => store2.subscribe( + run, + // @ts-expect-error + invalidate + ) + ); + return unsub.unsubscribe ? () => unsub.unsubscribe() : unsub; +} +const subscriber_queue = []; +function writable(value, start = noop) { + let stop = null; + const subscribers = /* @__PURE__ */ new Set(); + function set(new_value) { + if (safe_not_equal(value, new_value)) { + value = new_value; + if (stop) { + const run_queue = !subscriber_queue.length; + for (const subscriber of subscribers) { + subscriber[1](); + subscriber_queue.push(subscriber, value); + } + if (run_queue) { + for (let i = 0; i < subscriber_queue.length; i += 2) { + subscriber_queue[i][0](subscriber_queue[i + 1]); + } + subscriber_queue.length = 0; + } + } + } + } + function update(fn) { + set(fn( + /** @type {T} */ + value + )); + } + function subscribe(run, invalidate = noop) { + const subscriber = [run, invalidate]; + subscribers.add(subscriber); + if (subscribers.size === 1) { + stop = start(set, update) || noop; + } + run( + /** @type {T} */ + value + ); + return () => { + subscribers.delete(subscriber); + if (subscribers.size === 0 && stop) { + stop(); + stop = null; + } + }; + } + return { set, update, subscribe }; +} +function get(store2) { + let value; + subscribe_to_store(store2, (_) => value = _)(); + return value; +} +let untracking = false; +function untrack(fn) { + var previous_untracking = untracking; + try { + untracking = true; + return fn(); + } finally { + untracking = previous_untracking; + } +} +function store(defaultValue) { + const scope = { + get: (name) => { + return get(scope.store)[name]; + }, + set: (name, value) => { + if (typeof name === "string") { + Object.assign(get(scope.store), { + [name]: value + }); + } else { + Object.assign(get(scope.store), name); + } + scope.store.set(get(scope.store)); + }, + store: writable(defaultValue) + }; + return scope; +} +globalThis.$altcha = globalThis.$altcha || { + algorithms: /* @__PURE__ */ new Map(), + defaults: store({}), + i18n: store({}), + instances: /* @__PURE__ */ new Set(), + plugins: /* @__PURE__ */ new Set() +}; +const i18n$A = { + ariaLinkLabel: "Altcha (lloc web oficial)", + enterCode: "Introdueix el codi", + enterCodeAria: "Introdueix el codi que escoltes. Prem Espai per reproduir l’àudio.", + error: "Verificació fallida. Torna-ho a provar més tard.", + expired: "Verificació expirada. Torna-ho a provar.", + footer: 'Protegit per ALTCHA', + getAudioChallenge: "Obtenir un desafiament d’àudio", + label: "No sóc un robot", + loading: "Carregant...", + reload: "Torna a carregar", + verify: "Verificar", + verificationRequired: "Es requereix verificació!", + verified: "Verificat", + verifying: "Verificant...", + waitAlert: "Verificant... si us plau, espera.", + cancel: "Cancel·la", + enterCodeFromImage: "Per continuar, si us plau, introdueix el codi de la imatge següent." +}; +globalThis.$altcha.i18n.set("ca", i18n$A); +const i18n$z = { + ariaLinkLabel: "Altcha (site officiel)", + enterCode: "Entrez le code", + enterCodeAria: "Entrez le code que vous entendez. Appuyez sur Espace pour écouter l'audio.", + error: "Échec de la vérification. Essayez à nouveau plus tard.", + expired: "La vérification a expiré. Essayez à nouveau.", + footer: 'Protégé par ALTCHA', + getAudioChallenge: "Obtenir un défi audio", + label: "Je ne suis pas un robot", + loading: "Chargement...", + reload: "Recharger", + verify: "Vérifier", + verificationRequired: "Vérification requise !", + verified: "Vérifié", + verifying: "Vérification en cours...", + waitAlert: "Vérification en cours... veuillez patienter.", + cancel: "Annuler", + enterCodeFromImage: "Pour continuer, veuillez entrer le code de l'image ci-dessous." +}; +globalThis.$altcha.i18n.set("fr-fr", i18n$z); +const i18n$y = { + ariaLinkLabel: "Altcha (offizielle Website)", + enterCode: "Code eingeben", + enterCodeAria: "Geben Sie den Code ein, den Sie hören. Drücken Sie die Leertaste, um die Audio abzuspielen.", + error: "Überprüfung fehlgeschlagen. Bitte versuchen Sie es später erneut.", + expired: "Überprüfung abgelaufen. Bitte versuchen Sie es erneut.", + footer: 'Geschützt durch ALTCHA', + getAudioChallenge: "Audio-Herausforderung anfordern", + label: "Ich bin kein Roboter", + loading: "Lade...", + reload: "Neu laden", + verify: "Überprüfen", + verificationRequired: "Überprüfung erforderlich!", + verified: "Überprüft", + verifying: "Wird überprüft...", + waitAlert: "Überprüfung läuft... bitte warten.", + cancel: "Abbrechen", + enterCodeFromImage: "Um fortzufahren, geben Sie bitte den Code aus dem Bild unten ein." +}; +globalThis.$altcha.i18n.set("de", i18n$y); +const i18n$x = { + ariaLinkLabel: "Altcha (offiziell Websäit)", + enterCode: "Code aginn", + enterCodeAria: "Gitt de Code an deen dir héiert. Dréckt op d'Weltraumtast fir Audio ofzespillen.", + error: "Verifikatioun ass feelgeschloen. Probéiert méi spéit nach emol.", + expired: "Verifikatioun ofgelaf. Probéiert nach emol.", + footer: 'Geschützt vun ALTCHA', + getAudioChallenge: "Kritt eng Audio-Herausfuerderung", + label: "Ech sinn keen Robot", + loading: "Lueden...", + reload: "Nei lueden", + verify: "Verifizéieren", + verificationRequired: "Verifikatioun néideg!", + verified: "Verifizéiert", + verifying: "Verifizéieren...", + waitAlert: "Verifizéieren... waart wgl.", + cancel: "Ofbriechen", + enterCodeFromImage: "Fir virun ze fueren, gitt wgl. de Code aus dem Bild hei drënner an." +}; +globalThis.$altcha.i18n.set("lb", i18n$x); +const i18n$w = { + ariaLinkLabel: "Altcha (officiële website)", + enterCode: "Voer code in", + enterCodeAria: "Voer de code in die je hoort. Druk op Spatie om de audio af te spelen.", + error: "Verificatie mislukt. Probeer het later opnieuw.", + expired: "Verificatie verlopen. Probeer het opnieuw.", + footer: 'Beschermd door ALTCHA', + getAudioChallenge: "Audio-uitdaging ontvangen", + label: "Ik ben geen robot", + loading: "Laden...", + reload: "Herladen", + verify: "Verifiëren", + verificationRequired: "Verificatie vereist!", + verified: "Geverifieerd", + verifying: "Bezig met verifiëren...", + waitAlert: "Bezig met verifiëren... even geduld a.u.b.", + cancel: "Annuleren", + enterCodeFromImage: "Om door te gaan, voert u de code uit de onderstaande afbeelding in." +}; +globalThis.$altcha.i18n.set("nl", i18n$w); +const i18n$v = { + ariaLinkLabel: "Altcha (láithreán gréasáin oifigiúil)", + enterCode: "Iontráil cód", + enterCodeAria: "Cuir isteach an cód a chloiseann tú. Brúigh Spás chun an fuaime a sheinm.", + error: "Theip ar an bhfíorú. Bain triail eile as níos déanaí.", + expired: "Tá an fíorú as feidhm. Bain triail eile as.", + footer: 'Cosanta ag ALTCHA', + getAudioChallenge: "Faigh dúshlán fuaime", + label: "Níl mé i mo róbat", + loading: "Á luchtú...", + reload: "Athluchtaigh", + verify: "Fíoraigh", + verificationRequired: "Fíorú riachtanach!", + verified: "Fíoraithe", + verifying: "Fíorú ar siúl...", + waitAlert: "Fíorú ar siúl... fan go fóill.", + cancel: "Cealaigh", + enterCodeFromImage: "Chun dul ar aghaidh, le do thoil cuir isteach an cód ón íomhá thíos." +}; +globalThis.$altcha.i18n.set("ga", i18n$v); +const i18n$u = { + ariaLinkLabel: "Altcha (sito ufficiale)", + enterCode: "Inserisci il codice", + enterCodeAria: "Inserisci il codice che senti. Premi Spazio per riprodurre l'audio.", + error: "Verifica fallita. Riprova più tardi.", + expired: "Verifica scaduta. Riprova.", + footer: 'Protetto da ALTCHA', + getAudioChallenge: "Ottieni una sfida audio", + label: "Non sono un robot", + loading: "Caricamento...", + reload: "Ricarica", + verify: "Verifica", + verificationRequired: "Verifica richiesta!", + verified: "Verificato", + verifying: "Verifica in corso...", + waitAlert: "Verifica in corso... attendere.", + cancel: "Annulla", + enterCodeFromImage: "Per procedere, inserisci il codice dall'immagine sottostante." +}; +globalThis.$altcha.i18n.set("it", i18n$u); +const i18n$t = { + ariaLinkLabel: "Altcha (site oficial)", + enterCode: "Introduza o código", + enterCodeAria: "Introduza o código que ouve. Prima Espaço para reproduzir o áudio.", + error: "A verificação falhou. Por favor, tente novamente mais tarde.", + expired: "Verificação expirada. Por favor, tente novamente.", + footer: 'Protegido por ALTCHA', + getAudioChallenge: "Obter desafio de áudio", + label: "Não sou um robô", + loading: "A carregar...", + reload: "Recarregar", + verify: "Verificar", + verificationRequired: "Verificação necessária!", + verified: "Verificado", + verifying: "A verificar...", + waitAlert: "A verificar... por favor aguarde.", + cancel: "Cancelar", + enterCodeFromImage: "Para prosseguir, introduza o código da imagem abaixo." +}; +globalThis.$altcha.i18n.set("pt-pt", i18n$t); +const i18n$s = { + ariaLinkLabel: "Altcha (sitio web oficial)", + enterCode: "Introduce el código", + enterCodeAria: "Introduce el código que escuchas. Pulsa Espacio para reproducir el audio.", + error: "Falló la verificación. Por favor intente nuevamente más tarde.", + expired: "Verificación expirada. Por favor intente nuevamente.", + footer: 'Protegido por ALTCHA', + getAudioChallenge: "Obtener un desafío de audio", + label: "No soy un robot", + loading: "Cargando...", + reload: "Recargar", + verify: "Verificar", + verificationRequired: "¡Verificación requerida!", + verified: "Verificado", + verifying: "Verificando...", + waitAlert: "Verificando... por favor espere.", + cancel: "Cancelar", + enterCodeFromImage: "Para continuar, introduzca el código de la imagen de abajo." +}; +globalThis.$altcha.i18n.set("es-es", i18n$s); +const i18n$r = { + ariaLinkLabel: "Altcha (webgune ofiziala)", + enterCode: "Sartu kodea", + enterCodeAria: "Sartu entzun duzun kodea. Sakatu Espazioa audioa erreproduzitzeko.", + error: "Egiaztatzeak huts egin du. Saiatu berriro geroago.", + expired: "Egiaztatzea iraungi da. Saiatu berriro.", + footer: 'ALTCHAk babestuta', + getAudioChallenge: "Jaso audio-erronka bat", + label: "Ez naiz robot bat", + loading: "Kargatzen...", + reload: "Birkargatu", + verify: "Egiaztatu", + verificationRequired: "Egiaztatzea beharrezkoa da!", + verified: "Egiaztatuta", + verifying: "Egiaztatzen...", + waitAlert: "Egiaztatzen... itxaron mesedez.", + cancel: "Utzi", + enterCodeFromImage: "Jarraitzeko, idatzi beheko irudiko kodea." +}; +globalThis.$altcha.i18n.set("eu", i18n$r); +const i18n$q = { + ariaLinkLabel: "Altcha (official website)", + cancel: "Cancel", + enterCode: "Enter code", + enterCodeAria: "Enter code you hear. Press Space to play audio.", + enterCodeFromImage: "To proceed, please enter the code from the image below.", + error: "Verification failed. Try again later.", + expired: "Verification expired. Try again.", + footer: 'Protected by ALTCHA', + getAudioChallenge: "Get an audio challenge", + label: "I'm not a robot", + loading: "Loading...", + reload: "Reload", + verify: "Verify", + verificationRequired: "Verification required!", + verified: "Verified", + verifying: "Verifying...", + waitAlert: "Verifying... please wait." +}; +globalThis.$altcha.i18n.set("en", i18n$q); +const i18n$p = { + ariaLinkLabel: "Altcha (officiel hjemmeside)", + enterCode: "Indtast kode", + enterCodeAria: "Indtast den kode, du hører. Tryk på mellemrumstasten for at afspille lyd.", + error: "Verificering mislykkedes. Prøv venligst igen senere.", + expired: "Verificering udløbet. Prøv venligst igen.", + footer: 'Beskyttet af ALTCHA', + getAudioChallenge: "Hent lydudfordring", + label: "Jeg er ikke en robot", + loading: "Indlæser...", + reload: "Genindlæs", + verify: "Verificer", + verificationRequired: "Verificering kræves!", + verified: "Verificeret", + verifying: "Verificerer...", + waitAlert: "Verificerer... vent venligst.", + cancel: "Annuller", + enterCodeFromImage: "For at fortsætte, bedes du indtaste koden fra billedet herunder." +}; +globalThis.$altcha.i18n.set("da", i18n$p); +const i18n$o = { + ariaLinkLabel: "Altcha (officiell webbplats)", + enterCode: "Ange kod", + enterCodeAria: "Ange koden du hör. Tryck på mellanslag för att spela upp ljudet.", + error: "Verifiering misslyckades. Försök igen senare.", + expired: "Verifieringen har gått ut. Försök igen.", + footer: 'Skyddad av ALTCHA', + getAudioChallenge: "Få ljudutmaning", + label: "Jag är inte en robot", + loading: "Laddar...", + reload: "Ladda om", + verify: "Verifiera", + verificationRequired: "Verifiering krävs!", + verified: "Verifierad", + verifying: "Verifierar...", + waitAlert: "Verifierar... vänligen vänta.", + cancel: "Avbryt", + enterCodeFromImage: "För att fortsätta, ange koden från bilden nedan." +}; +globalThis.$altcha.i18n.set("sv", i18n$o); +const i18n$n = { + ariaLinkLabel: "Altcha (virallinen verkkosivusto)", + enterCode: "Syötä koodi", + enterCodeAria: "Kirjoita kuulemasi koodi. Paina välilyöntiä toistaaksesi äänen.", + error: "Varmennus epäonnistui. Yritä myöhemmin uudelleen.", + expired: "Varmennus vanhentui. Yritä uudelleen.", + footer: 'Suojattu ALTCHA:lla', + getAudioChallenge: "Hae äänitehtävä", + label: "En ole robotti", + loading: "Ladataan...", + reload: "Lataa uudelleen", + verify: "Vahvista", + verificationRequired: "Vahvistus vaaditaan!", + verified: "Vahvistettu", + verifying: "Vahvistetaan...", + waitAlert: "Vahvistetaan... odota hetki.", + cancel: "Peruuta", + enterCodeFromImage: "Jatkaaksesi, syötä alla olevan kuvan koodi." +}; +globalThis.$altcha.i18n.set("fi", i18n$n); +const i18n$m = { + ariaLinkLabel: "Altcha (ametlik veebisait)", + enterCode: "Sisesta kood", + enterCodeAria: "Sisestage kuuldu kood. Vajutage tühikut, et esitada heli.", + error: "Kinnitamine ebaõnnestus. Proovi hiljem uuesti.", + expired: "Kinnitamine aegus. Proovi uuesti.", + footer: 'Kaitstud ALTCHA poolt', + getAudioChallenge: "Hangi heliülesanne", + label: "Ma ei ole robot", + loading: "Laadimine...", + reload: "Laadi uuesti", + verify: "Kinnita", + verificationRequired: "Kontroll on vajalik!", + verified: "Kinnitatud", + verifying: "Kinnitamine...", + waitAlert: "Kinnitamine... palun oota.", + cancel: "Tühista", + enterCodeFromImage: "Jätkamiseks sisestage alloleval pildil olev kood." +}; +globalThis.$altcha.i18n.set("et", i18n$m); +const i18n$l = { + ariaLinkLabel: "Altcha (offisiell nettside)", + enterCode: "Skriv inn kode", + enterCodeAria: "Skriv inn koden du hører. Trykk på Space for å spille av lyden.", + error: "Verifisering mislyktes. Prøv igjen senere.", + expired: "Verifiseringen utløp. Prøv igjen.", + footer: 'Beskyttet av ALTCHA', + getAudioChallenge: "Få en lydutfordring", + label: "Jeg er ikke en robot", + loading: "Laster...", + reload: "Last på nytt", + verify: "Verifiser", + verificationRequired: "Verifisering kreves!", + verified: "Verifisert", + verifying: "Verifiserer...", + waitAlert: "Verifiserer... vennligst vent.", + cancel: "Avbryt", + enterCodeFromImage: "For å fortsette, vennligst skriv inn koden fra bildet nedenfor." +}; +globalThis.$altcha.i18n.set("nb", i18n$l); +const i18n$k = { + ariaLinkLabel: "Altcha (opinber vefsíða)", + enterCode: "Sláðu inn kóða", + enterCodeAria: "Sláðu inn kóðann sem þú heyrir. Ýttu á Space til að spila hljóðið.", + error: "Staðfesting mistókst. Reyndu aftur síðar.", + expired: "Staðfesting er útrunnin. Reyndu aftur.", + footer: 'Verndað af ALTCHA', + getAudioChallenge: "Fá hljóðáskorun", + label: "Ég er ekki robot", + loading: "Hleður...", + reload: "Hleð aftur", + verify: "Staðfesta", + verificationRequired: "Staðfesting er nauðsynleg!", + verified: "Staðfest", + verifying: "Að staðfesta...", + waitAlert: "Að staðfesta... vinsamlegast bíða.", + cancel: "Hætta við", + enterCodeFromImage: "Til að halda áfram, vinsamlegast sláðu inn kóðann af myndinni hér að neðan." +}; +globalThis.$altcha.i18n.set("is", i18n$k); +const i18n$j = { + ariaLinkLabel: "Altcha (oficiali svetainė)", + enterCode: "Įveskite kodą", + enterCodeAria: "Įveskite girdimą kodą. Paspauskite tarpo klavišą, kad grotumėte garso įrašą.", + error: "Patvirtinimas nepavyko. Bandykite vėliau.", + expired: "Patvirtinimo laikas baigėsi. Bandykite dar kartą.", + footer: 'Apsaugota ALTCHA', + getAudioChallenge: "Gauti garso užduotį", + label: "Aš nesu robotas", + loading: "Įkeliama...", + reload: "Įkelti iš naujo", + verify: "Patvirtinti", + verificationRequired: "Reikalingas patvirtinimas!", + verified: "Patvirtinta", + verifying: "Tikrinama...", + waitAlert: "Tikrinama... prašome palaukti.", + cancel: "Atšaukti", + enterCodeFromImage: "Norėdami tęsti, įveskite kodą iš paveikslėlio žemiau." +}; +globalThis.$altcha.i18n.set("lt", i18n$j); +const i18n$i = { + ariaLinkLabel: "Altcha (oficiālā tīmekļa vietne)", + enterCode: "Ievadiet kodu", + enterCodeAria: "Ievadiet dzirdamo kodu. Nospiediet atstarpes taustiņu, lai atskaņotu audio.", + error: "Verifikācija neizdevās. Mēģiniet vēlāk vēlreiz.", + expired: "Verifikācijas laiks ir beidzies. Mēģiniet vēlreiz.", + footer: 'Aizsargāts ar ALTCHA', + getAudioChallenge: "Saņemt audio izaicinājumu", + label: "Es neesmu robots", + loading: "Notiek ielāde...", + reload: "Pārlādēt", + verify: "Verificēt", + verificationRequired: "Nepieciešama verifikācija!", + verified: "Verificēts", + verifying: "Notiek verifikācija...", + waitAlert: "Notiek verifikācija... lūdzu, uzgaidiet.", + cancel: "Atcelt", + enterCodeFromImage: "Lai turpinātu, lūdzu, ievadiet zemāk redzamo attēlu kodu." +}; +globalThis.$altcha.i18n.set("lv", i18n$i); +const i18n$h = { + ariaLinkLabel: "Altcha (афіцыйны сайт)", + enterCode: "Увядзіце код", + enterCodeAria: "Увядзіце код, які вы чуеце. Націсніце прабел, каб прайграць аўдыё.", + error: "Праверка не прайшла. Паспрабуйце пазней.", + expired: "Тэрмін праверкі скончыўся. Паспрабуйце зноў.", + footer: 'Абаронена ALTCHA', + getAudioChallenge: "Атрымаць аўдыё выклік", + label: "Я не робат", + loading: "Загрузка...", + reload: "Перазагрузіць", + verify: "Праверыць", + verificationRequired: "Патрабуецца праверка!", + verified: "Праверана", + verifying: "Правяраем...", + waitAlert: "Праверка... калі ласка, пачакайце.", + cancel: "Скасаваць", + enterCodeFromImage: "Каб працягнуць, увядзіце код з малюнка ніжэй." +}; +globalThis.$altcha.i18n.set("be", i18n$h); +const i18n$g = { + ariaLinkLabel: "Altcha (službena web stranica)", + enterCode: "Unesite kod", + enterCodeAria: "Unesite kod koji čujete. Pritisnite Space da biste pustili zvuk.", + error: "Verifikacija nije uspjela. Pokušajte ponovo kasnije.", + expired: "Verifikacija je istekla. Pokušajte ponovo.", + footer: 'Zaštićeno od strane ALTCHA', + getAudioChallenge: "Dohvatite audio izazov", + label: "Nisam robot", + loading: "Učitavanje...", + reload: "Ponovno učitaj", + verify: "Verifikuj", + verificationRequired: "Verifikacija je obavezna!", + verified: "Verifikovano", + verifying: "Verifikacija u toku...", + waitAlert: "Verifikacija u toku... molimo vas da sačekate.", + cancel: "Odustani", + enterCodeFromImage: "Za nastavak, molimo unesite kod sa slike ispod." +}; +globalThis.$altcha.i18n.set("bs", i18n$g); +const i18n$f = { + ariaLinkLabel: "Altcha (oficiální web)", + enterCode: "Zadejte kód", + enterCodeAria: "Zadejte kód, který slyšíte. Stisknutím mezerníku přehrajete zvuk.", + error: "Ověření selhalo. Zkuste to prosím později.", + expired: "Ověření vypršelo. Zkuste to prosím znovu.", + footer: 'Chráněno pomocí ALTCHA', + getAudioChallenge: "Získat audio výzvu", + label: "Nejsem robot", + loading: "Načítání...", + reload: "Znovu načíst", + verify: "Ověřit", + verificationRequired: "Vyžaduje se ověření!", + verified: "Ověřeno", + verifying: "Ověřování...", + waitAlert: "Probíhá ověření... prosím počkejte.", + cancel: "Zrušit", + enterCodeFromImage: "Pro pokračování zadejte kód z obrázku níže." +}; +globalThis.$altcha.i18n.set("cs", i18n$f); +const i18n$e = { + ariaLinkLabel: "Altcha (oficjalna strona internetowa)", + enterCode: "Wprowadź kod", + enterCodeAria: "Wpisz kod, który słyszysz. Naciśnij Spację, aby odtworzyć dźwięk.", + error: "Weryfikacja nie powiodła się. Spróbuj ponownie później.", + expired: "Weryfikacja wygasła. Spróbuj ponownie.", + footer: 'Chronione przez ALTCHA', + getAudioChallenge: "Pobierz zadanie dźwiękowe", + label: "Nie jestem robotem", + loading: "Ładowanie...", + reload: "Odśwież", + verify: "Zweryfikuj", + verificationRequired: "Wymagana weryfikacja!", + verified: "Zweryfikowano", + verifying: "Weryfikacja...", + waitAlert: "Trwa weryfikacja... proszę czekać.", + cancel: "Anuluj", + enterCodeFromImage: "Aby kontynuować, wprowadź kod z poniższego obrazka." +}; +globalThis.$altcha.i18n.set("pl", i18n$e); +const i18n$d = { + ariaLinkLabel: "Altcha (hivatalos weboldal)", + enterCode: "Írja be a kódot", + enterCodeAria: "Írja be a hallott kódot. Nyomja meg a Szóköz billentyűt a hang lejátszásához.", + error: "A hitelesítés nem sikerült. Próbáld meg később újra.", + expired: "A hitelesítés lejárt. Próbáld újra.", + footer: 'Védve a következő által: ALTCHA', + getAudioChallenge: "Hangalapú kihívás kérése", + label: "Nem vagyok robot", + loading: "Betöltés...", + reload: "Újratöltés", + verify: "Ellenőrzés", + verificationRequired: "Ellenőrzés szükséges!", + verified: "Ellenőrizve", + verifying: "Ellenőrzés folyamatban...", + waitAlert: "Ellenőrzés folyamatban... kérlek várj.", + cancel: "Mégse", + enterCodeFromImage: "A folytatáshoz, kérjük, adja meg az alábbi kép kódját." +}; +globalThis.$altcha.i18n.set("hu", i18n$d); +const i18n$c = { + ariaLinkLabel: "Altcha (oficiálna webová stránka)", + enterCode: "Zadajte kód", + enterCodeAria: "Zadajte kód, ktorý počujete. Stlačením medzerníka prehráte zvuk.", + error: "Verifikácia zlyhala. Skúste to znova neskôr.", + expired: "Verifikácia vypršala. Skúste to znova.", + footer: 'Chránené ALTCHA', + getAudioChallenge: "Získať audio výzvu", + label: "Nie som robot", + loading: "Načítava sa...", + reload: "Obnoviť", + verify: "Verifikovať", + verificationRequired: "Vyžaduje sa overenie!", + verified: "Verifikované", + verifying: "Prebieha verifikácia...", + waitAlert: "Prebieha verifikácia... prosím čakajte.", + cancel: "Zrušiť", + enterCodeFromImage: "Na pokračovanie, prosím, zadajte kód z obrázka nižšie." +}; +globalThis.$altcha.i18n.set("sk", i18n$c); +const i18n$b = { + ariaLinkLabel: "Altcha (uradna spletna stran)", + enterCode: "Vnesite kodo", + enterCodeAria: "Vnesite kodo, ki jo slišite. Pritisnite preslednico za predvajanje zvoka.", + error: "Preverjanje ni uspelo. Poskusite znova kasneje.", + expired: "Preverjanje je poteklo. Poskusite znova.", + footer: 'Zaščiteno z ALTCHA', + getAudioChallenge: "Pridobite zvočni izziv", + label: "Nisem robot", + loading: "Nalagam...", + reload: "Ponovno naloži", + verify: "Preveri", + verificationRequired: "Potrebna je preveritev!", + verified: "Preverjeno", + verifying: "Preverjanje...", + waitAlert: "Preverjanje... prosim počakajte.", + cancel: "Preklic", + enterCodeFromImage: "Za nadaljevanje, prosimo, vnesite kodo s slike spodaj." +}; +globalThis.$altcha.i18n.set("sl", i18n$b); +const i18n$a = { + ariaLinkLabel: "Altcha (službena web stranica)", + enterCode: "Unesite kod", + enterCodeAria: "Unesite kod koji čujete. Pritisnite razmaknicu za reprodukciju zvuka.", + error: "Provjera nije uspjela. Molimo pokušajte kasnije.", + expired: "Provjera je istekla. Molimo pokušajte ponovo.", + footer: 'Zaštićeno od strane ALTCHA', + getAudioChallenge: "Audio provjera", + label: "Ja nisam robot", + loading: "Učitavanje...", + reload: "Ponovno učitaj", + verify: "Provjeri", + verificationRequired: "Potrebna je provjera!", + verified: "Provjereno", + verifying: "Provjeravanje...", + waitAlert: "Provjera je u tijeku... molimo pričekajte.", + cancel: "Odustani", + enterCodeFromImage: "Za nastavak molimo unesite kod sa slike ispod." +}; +globalThis.$altcha.i18n.set("hr", i18n$a); +const i18n$9 = { + ariaLinkLabel: "Altcha (site oficial)", + enterCode: "Introduceți codul", + enterCodeAria: "Introduceți codul pe care îl auziți. Apăsați Spațiu pentru a reda audio.", + error: "Verificarea a eșuat. Încearcă din nou mai târziu.", + expired: "Verificarea a expirat. Încearcă din nou.", + footer: 'Protejat de ALTCHA', + getAudioChallenge: "Obține o provocare audio", + label: "Nu sunt un robot", + loading: "Se încarcă...", + reload: "Reîncarcă", + verify: "Verifică", + verificationRequired: "Verificare necesară!", + verified: "Verificat", + verifying: "Se verifică...", + waitAlert: "Se verifică... te rugăm să aștepți.", + cancel: "Anulare", + enterCodeFromImage: "Pentru a continua, vă rugăm să introduceți codul din imaginea de mai jos." +}; +globalThis.$altcha.i18n.set("ro", i18n$9); +const i18n$8 = { + ariaLinkLabel: "Altcha (официален уебсайт)", + enterCode: "Въведете код", + enterCodeAria: "Въведете кода, който чувате. Натиснете Space за възпроизвеждане на аудио.", + error: "Проверката неуспешна. Моля, опитайте по-късно.", + expired: "Времето за проверка изтече. Моля, опитайте отново.", + footer: 'Защитено от ALTCHA', + getAudioChallenge: "Аудио проверка", + label: "Аз не съм робот", + loading: "Зареждане...", + reload: "Презареди", + verify: "Провери", + verificationRequired: "Изисква се проверка!", + verified: "Проверено", + verifying: "Проверява се...", + waitAlert: "Проверката е в процес... моля изчакайте.", + cancel: "Отказ", + enterCodeFromImage: "За да продължите, моля, въведете кода от изображението по-долу." +}; +globalThis.$altcha.i18n.set("bg", i18n$8); +const i18n$7 = { + ariaLinkLabel: "Altcha (επίσημος ιστότοπος)", + enterCode: "Εισαγάγετε κωδικό", + enterCodeAria: "Εισαγάγετε τον κωδικό που ακούτε. Πατήστε Space για να παίξετε τον ήχο.", + error: "Η επαλήθευση απέτυχε. Δοκιμάστε ξανά αργότερα.", + expired: "Η επαλήθευση έληξε. Δοκιμάστε ξανά.", + footer: 'Προστατεύεται από το ALTCHA', + getAudioChallenge: "Λήψη ηχητικής δοκιμασίας", + label: "Δεν είμαι ρομπότ", + loading: "Φόρτωση...", + reload: "Επαναφόρτωση", + verify: "Επαλήθευση", + verificationRequired: "Απαιτείται έλεγχος!", + verified: "Επαληθεύτηκε", + verifying: "Γίνεται επαλήθευση...", + waitAlert: "Γίνεται επαλήθευση... παρακαλώ περιμένετε.", + cancel: "Ακύρωση", + enterCodeFromImage: "Για να συνεχίσετε, εισάγετε τον κωδικό από την παρακάτω εικόνα." +}; +globalThis.$altcha.i18n.set("el", i18n$7); +const i18n$6 = { + ariaLinkLabel: "Altcha (zvanična web stranica)", + enterCode: "Unesite kod", + enterCodeAria: "Unesite kod koji čujete. Pritisnite Space da biste pustili zvuk.", + error: "Verifikacija nije uspela. Pokušajte ponovo kasnije.", + expired: "Verifikacija je istekla. Pokušajte ponovo.", + footer: 'Zaštićeno od strane ALTCHA', + getAudioChallenge: "Dohvatite audio izazov", + label: "Nisam robot", + loading: "Učitavanje...", + reload: "Ponovo učitaj", + verify: "Verifikuj", + verificationRequired: "Verifikacija je obavezna!", + verified: "Verifikovano", + verifying: "Verifikacija u toku...", + waitAlert: "Verifikacija u toku... molimo vas da sačekate.", + cancel: "Откажи", + enterCodeFromImage: "Да бисте наставили, унесите код са слике испод." +}; +globalThis.$altcha.i18n.set("sr", i18n$6); +const i18n$5 = { + ariaLinkLabel: "Altcha (официальный сайт)", + enterCode: "Введите код", + enterCodeAria: "Введите код, который слышите. Нажмите пробел для воспроизведения аудио.", + error: "Ошибка верификации. Попробуйте позже.", + expired: "Срок действия верификации истек. Попробуйте снова.", + footer: 'Защищено ALTCHA', + getAudioChallenge: "Получить аудио задачу", + label: "Я не робот", + loading: "Загрузка...", + reload: "Перезагрузить", + verify: "Проверить", + verificationRequired: "Требуется проверка!", + verified: "Проверено", + verifying: "Идет проверка...", + waitAlert: "Идет проверка... Пожалуйста, подождите.", + cancel: "Отмена", + enterCodeFromImage: "Чтобы продолжить, пожалуйста, введите код с изображения ниже." +}; +globalThis.$altcha.i18n.set("ru", i18n$5); +const i18n$4 = { + ariaLinkLabel: "Altcha (zvanična web stranica)", + enterCode: "Unesite kod", + enterCodeAria: "Unesite kod koji čujete. Pritisnite Space za puštanje zvuka.", + error: "Verifikacija nije uspjela. Pokušajte ponovo kasnije.", + expired: "Verifikacija je istekla. Pokušajte ponovo.", + footer: 'Zaštićeno putem ALTCHA', + getAudioChallenge: "Preuzmi audio izazov", + label: "Nijesam robot", + loading: "Učitavanje...", + reload: "Ponovo učitaj", + verify: "Verifikuj", + verificationRequired: "Potrebna je verifikacija!", + verified: "Verifikovano", + verifying: "Verifikacija u toku...", + waitAlert: "Verifikujem... molimo sačekajte.", + cancel: "Odustani", + enterCodeFromImage: "Za nastavak, molimo unesite kod sa slike ispod." +}; +globalThis.$altcha.i18n.set("me", i18n$4); +const i18n$3 = { + ariaLinkLabel: "Altcha (официјален веб-сајт)", + enterCode: "Внесете код", + enterCodeAria: "Внесете го кодот што го слушате. Притиснете Space за да ја пуштите аудио снимката.", + error: "Проверката не успеа. Обидете се подоцна.", + expired: "Проверката истече. Обидете се повторно.", + footer: 'Заштитено со ALTCHA', + getAudioChallenge: "Земете аудио предизвик", + label: "Јас не сум робот", + loading: "Се вчитува...", + reload: "Превчитај", + verify: "Провери", + verificationRequired: "Потребна е проверка!", + verified: "Потврдено", + verifying: "Се проверува...", + waitAlert: "Се проверува... ве молиме почекајте.", + cancel: "Откажи", + enterCodeFromImage: "За да продолжите, ве молиме внесете го кодот од сликата подолу." +}; +globalThis.$altcha.i18n.set("mk", i18n$3); +const i18n$2 = { + ariaLinkLabel: "Altcha (faqja zyrtare)", + enterCode: "Fut kodin", + enterCodeAria: "Fut kodin që dëgjon. Shtypni Hapësirë për të luajtur audio.", + error: "Verifikimi dështoi. Provoni përsëri më vonë.", + expired: "Verifikimi ka skaduar. Provoni përsëri.", + footer: 'I mbrojtur nga ALTCHA', + getAudioChallenge: "Merr një sfidë audio", + label: "Unë nuk jam një robot", + loading: "Duke u ngarkuar...", + reload: "Ringarko", + verify: "Verifiko", + verificationRequired: "Kërkohet verifikimi!", + verified: "I verifikuar", + verifying: "Duke verifikuar...", + waitAlert: "Duke verifikuar... ju lutem prisni.", + cancel: "Anuloje", + enterCodeFromImage: "Për të vazhduar, ju lutemi fusni kodin nga imazhi më poshtë." +}; +globalThis.$altcha.i18n.set("sq", i18n$2); +const i18n$1 = { + ariaLinkLabel: "Altcha (amptelike webwerf)", + enterCode: "Voer kode in", + enterCodeAria: "Voer die kode in wat jy hoor. Druk Spasie om die klank af te speel.", + error: "Verifikasie het misluk. Probeer later weer.", + expired: "Verifikasie het verval. Probeer weer.", + footer: 'Beskerm deur ALTCHA', + getAudioChallenge: "Kry 'n klankuitdaging", + label: "Ek is nie 'n robot nie", + loading: "Laai...", + reload: "Laai weer", + verify: "Verifieer", + verificationRequired: "Verifikasie is vereis!", + verified: "Geverifieer", + verifying: "Verifieer...", + waitAlert: "Verifieer... wag asseblief.", + cancel: "Kanselleer", + enterCodeFromImage: "Om voort te gaan, voer asseblief die kode vanaf die onderstaande prentjie in." +}; +globalThis.$altcha.i18n.set("af", i18n$1); +const i18n = { + ariaLinkLabel: "Altcha (sit uffiċjali)", + enterCode: "Idħol il-kodiċi", + enterCodeAria: "Idħol il-kodiċi li tisma'. Agħfas Spazju biex tindaqq l-awdjo.", + error: "Il-verifika falliet. Erġa’ pprova aktar tard.", + expired: "Il-verifika skadiet. Erġa’ pprova.", + footer: 'Protett minn ALTCHA', + getAudioChallenge: "Ikseb sfida bl-awdjo", + label: "M’inix robot", + loading: "Qed jitgħabba...", + reload: "Ittella’ mill-ġdid", + verify: "Ivverifika", + verificationRequired: "Verifika meħtieġa!", + verified: "Ivverifikat", + verifying: "Verifika għaddejja...", + waitAlert: "Verifika għaddejja... stenna ftit.", + cancel: "Ikkanċella", + enterCodeFromImage: "Biex tipproċedi, jekk jogħġbok daħħal il-kodiċi mill-immaġni hawn taħt." +}; +globalThis.$altcha.i18n.set("mt", i18n); diff --git a/frontend/node_modules/altcha/dist/i18n/europe.umd.cjs b/frontend/node_modules/altcha/dist/i18n/europe.umd.cjs new file mode 100644 index 0000000..56df3cf --- /dev/null +++ b/frontend/node_modules/altcha/dist/i18n/europe.umd.cjs @@ -0,0 +1,853 @@ +(function(factory) { + typeof define === "function" && define.amd ? define(factory) : factory(); +})((function() { + "use strict"; + const noop = () => { + }; + function safe_not_equal(a, b) { + return a != a ? b == b : a !== b || a !== null && typeof a === "object" || typeof a === "function"; + } + function subscribe_to_store(store2, run, invalidate) { + if (store2 == null) { + run(void 0); + return noop; + } + const unsub = untrack( + () => store2.subscribe( + run, + // @ts-expect-error + invalidate + ) + ); + return unsub.unsubscribe ? () => unsub.unsubscribe() : unsub; + } + const subscriber_queue = []; + function writable(value, start = noop) { + let stop = null; + const subscribers = /* @__PURE__ */ new Set(); + function set(new_value) { + if (safe_not_equal(value, new_value)) { + value = new_value; + if (stop) { + const run_queue = !subscriber_queue.length; + for (const subscriber of subscribers) { + subscriber[1](); + subscriber_queue.push(subscriber, value); + } + if (run_queue) { + for (let i = 0; i < subscriber_queue.length; i += 2) { + subscriber_queue[i][0](subscriber_queue[i + 1]); + } + subscriber_queue.length = 0; + } + } + } + } + function update(fn) { + set(fn( + /** @type {T} */ + value + )); + } + function subscribe(run, invalidate = noop) { + const subscriber = [run, invalidate]; + subscribers.add(subscriber); + if (subscribers.size === 1) { + stop = start(set, update) || noop; + } + run( + /** @type {T} */ + value + ); + return () => { + subscribers.delete(subscriber); + if (subscribers.size === 0 && stop) { + stop(); + stop = null; + } + }; + } + return { set, update, subscribe }; + } + function get(store2) { + let value; + subscribe_to_store(store2, (_) => value = _)(); + return value; + } + let untracking = false; + function untrack(fn) { + var previous_untracking = untracking; + try { + untracking = true; + return fn(); + } finally { + untracking = previous_untracking; + } + } + function store(defaultValue) { + const scope = { + get: (name) => { + return get(scope.store)[name]; + }, + set: (name, value) => { + if (typeof name === "string") { + Object.assign(get(scope.store), { + [name]: value + }); + } else { + Object.assign(get(scope.store), name); + } + scope.store.set(get(scope.store)); + }, + store: writable(defaultValue) + }; + return scope; + } + globalThis.$altcha = globalThis.$altcha || { + algorithms: /* @__PURE__ */ new Map(), + defaults: store({}), + i18n: store({}), + instances: /* @__PURE__ */ new Set(), + plugins: /* @__PURE__ */ new Set() + }; + const i18n$A = { + ariaLinkLabel: "Altcha (lloc web oficial)", + enterCode: "Introdueix el codi", + enterCodeAria: "Introdueix el codi que escoltes. Prem Espai per reproduir l’àudio.", + error: "Verificació fallida. Torna-ho a provar més tard.", + expired: "Verificació expirada. Torna-ho a provar.", + footer: 'Protegit per ALTCHA', + getAudioChallenge: "Obtenir un desafiament d’àudio", + label: "No sóc un robot", + loading: "Carregant...", + reload: "Torna a carregar", + verify: "Verificar", + verificationRequired: "Es requereix verificació!", + verified: "Verificat", + verifying: "Verificant...", + waitAlert: "Verificant... si us plau, espera.", + cancel: "Cancel·la", + enterCodeFromImage: "Per continuar, si us plau, introdueix el codi de la imatge següent." + }; + globalThis.$altcha.i18n.set("ca", i18n$A); + const i18n$z = { + ariaLinkLabel: "Altcha (site officiel)", + enterCode: "Entrez le code", + enterCodeAria: "Entrez le code que vous entendez. Appuyez sur Espace pour écouter l'audio.", + error: "Échec de la vérification. Essayez à nouveau plus tard.", + expired: "La vérification a expiré. Essayez à nouveau.", + footer: 'Protégé par ALTCHA', + getAudioChallenge: "Obtenir un défi audio", + label: "Je ne suis pas un robot", + loading: "Chargement...", + reload: "Recharger", + verify: "Vérifier", + verificationRequired: "Vérification requise !", + verified: "Vérifié", + verifying: "Vérification en cours...", + waitAlert: "Vérification en cours... veuillez patienter.", + cancel: "Annuler", + enterCodeFromImage: "Pour continuer, veuillez entrer le code de l'image ci-dessous." + }; + globalThis.$altcha.i18n.set("fr-fr", i18n$z); + const i18n$y = { + ariaLinkLabel: "Altcha (offizielle Website)", + enterCode: "Code eingeben", + enterCodeAria: "Geben Sie den Code ein, den Sie hören. Drücken Sie die Leertaste, um die Audio abzuspielen.", + error: "Überprüfung fehlgeschlagen. Bitte versuchen Sie es später erneut.", + expired: "Überprüfung abgelaufen. Bitte versuchen Sie es erneut.", + footer: 'Geschützt durch ALTCHA', + getAudioChallenge: "Audio-Herausforderung anfordern", + label: "Ich bin kein Roboter", + loading: "Lade...", + reload: "Neu laden", + verify: "Überprüfen", + verificationRequired: "Überprüfung erforderlich!", + verified: "Überprüft", + verifying: "Wird überprüft...", + waitAlert: "Überprüfung läuft... bitte warten.", + cancel: "Abbrechen", + enterCodeFromImage: "Um fortzufahren, geben Sie bitte den Code aus dem Bild unten ein." + }; + globalThis.$altcha.i18n.set("de", i18n$y); + const i18n$x = { + ariaLinkLabel: "Altcha (offiziell Websäit)", + enterCode: "Code aginn", + enterCodeAria: "Gitt de Code an deen dir héiert. Dréckt op d'Weltraumtast fir Audio ofzespillen.", + error: "Verifikatioun ass feelgeschloen. Probéiert méi spéit nach emol.", + expired: "Verifikatioun ofgelaf. Probéiert nach emol.", + footer: 'Geschützt vun ALTCHA', + getAudioChallenge: "Kritt eng Audio-Herausfuerderung", + label: "Ech sinn keen Robot", + loading: "Lueden...", + reload: "Nei lueden", + verify: "Verifizéieren", + verificationRequired: "Verifikatioun néideg!", + verified: "Verifizéiert", + verifying: "Verifizéieren...", + waitAlert: "Verifizéieren... waart wgl.", + cancel: "Ofbriechen", + enterCodeFromImage: "Fir virun ze fueren, gitt wgl. de Code aus dem Bild hei drënner an." + }; + globalThis.$altcha.i18n.set("lb", i18n$x); + const i18n$w = { + ariaLinkLabel: "Altcha (officiële website)", + enterCode: "Voer code in", + enterCodeAria: "Voer de code in die je hoort. Druk op Spatie om de audio af te spelen.", + error: "Verificatie mislukt. Probeer het later opnieuw.", + expired: "Verificatie verlopen. Probeer het opnieuw.", + footer: 'Beschermd door ALTCHA', + getAudioChallenge: "Audio-uitdaging ontvangen", + label: "Ik ben geen robot", + loading: "Laden...", + reload: "Herladen", + verify: "Verifiëren", + verificationRequired: "Verificatie vereist!", + verified: "Geverifieerd", + verifying: "Bezig met verifiëren...", + waitAlert: "Bezig met verifiëren... even geduld a.u.b.", + cancel: "Annuleren", + enterCodeFromImage: "Om door te gaan, voert u de code uit de onderstaande afbeelding in." + }; + globalThis.$altcha.i18n.set("nl", i18n$w); + const i18n$v = { + ariaLinkLabel: "Altcha (láithreán gréasáin oifigiúil)", + enterCode: "Iontráil cód", + enterCodeAria: "Cuir isteach an cód a chloiseann tú. Brúigh Spás chun an fuaime a sheinm.", + error: "Theip ar an bhfíorú. Bain triail eile as níos déanaí.", + expired: "Tá an fíorú as feidhm. Bain triail eile as.", + footer: 'Cosanta ag ALTCHA', + getAudioChallenge: "Faigh dúshlán fuaime", + label: "Níl mé i mo róbat", + loading: "Á luchtú...", + reload: "Athluchtaigh", + verify: "Fíoraigh", + verificationRequired: "Fíorú riachtanach!", + verified: "Fíoraithe", + verifying: "Fíorú ar siúl...", + waitAlert: "Fíorú ar siúl... fan go fóill.", + cancel: "Cealaigh", + enterCodeFromImage: "Chun dul ar aghaidh, le do thoil cuir isteach an cód ón íomhá thíos." + }; + globalThis.$altcha.i18n.set("ga", i18n$v); + const i18n$u = { + ariaLinkLabel: "Altcha (sito ufficiale)", + enterCode: "Inserisci il codice", + enterCodeAria: "Inserisci il codice che senti. Premi Spazio per riprodurre l'audio.", + error: "Verifica fallita. Riprova più tardi.", + expired: "Verifica scaduta. Riprova.", + footer: 'Protetto da ALTCHA', + getAudioChallenge: "Ottieni una sfida audio", + label: "Non sono un robot", + loading: "Caricamento...", + reload: "Ricarica", + verify: "Verifica", + verificationRequired: "Verifica richiesta!", + verified: "Verificato", + verifying: "Verifica in corso...", + waitAlert: "Verifica in corso... attendere.", + cancel: "Annulla", + enterCodeFromImage: "Per procedere, inserisci il codice dall'immagine sottostante." + }; + globalThis.$altcha.i18n.set("it", i18n$u); + const i18n$t = { + ariaLinkLabel: "Altcha (site oficial)", + enterCode: "Introduza o código", + enterCodeAria: "Introduza o código que ouve. Prima Espaço para reproduzir o áudio.", + error: "A verificação falhou. Por favor, tente novamente mais tarde.", + expired: "Verificação expirada. Por favor, tente novamente.", + footer: 'Protegido por ALTCHA', + getAudioChallenge: "Obter desafio de áudio", + label: "Não sou um robô", + loading: "A carregar...", + reload: "Recarregar", + verify: "Verificar", + verificationRequired: "Verificação necessária!", + verified: "Verificado", + verifying: "A verificar...", + waitAlert: "A verificar... por favor aguarde.", + cancel: "Cancelar", + enterCodeFromImage: "Para prosseguir, introduza o código da imagem abaixo." + }; + globalThis.$altcha.i18n.set("pt-pt", i18n$t); + const i18n$s = { + ariaLinkLabel: "Altcha (sitio web oficial)", + enterCode: "Introduce el código", + enterCodeAria: "Introduce el código que escuchas. Pulsa Espacio para reproducir el audio.", + error: "Falló la verificación. Por favor intente nuevamente más tarde.", + expired: "Verificación expirada. Por favor intente nuevamente.", + footer: 'Protegido por ALTCHA', + getAudioChallenge: "Obtener un desafío de audio", + label: "No soy un robot", + loading: "Cargando...", + reload: "Recargar", + verify: "Verificar", + verificationRequired: "¡Verificación requerida!", + verified: "Verificado", + verifying: "Verificando...", + waitAlert: "Verificando... por favor espere.", + cancel: "Cancelar", + enterCodeFromImage: "Para continuar, introduzca el código de la imagen de abajo." + }; + globalThis.$altcha.i18n.set("es-es", i18n$s); + const i18n$r = { + ariaLinkLabel: "Altcha (webgune ofiziala)", + enterCode: "Sartu kodea", + enterCodeAria: "Sartu entzun duzun kodea. Sakatu Espazioa audioa erreproduzitzeko.", + error: "Egiaztatzeak huts egin du. Saiatu berriro geroago.", + expired: "Egiaztatzea iraungi da. Saiatu berriro.", + footer: 'ALTCHAk babestuta', + getAudioChallenge: "Jaso audio-erronka bat", + label: "Ez naiz robot bat", + loading: "Kargatzen...", + reload: "Birkargatu", + verify: "Egiaztatu", + verificationRequired: "Egiaztatzea beharrezkoa da!", + verified: "Egiaztatuta", + verifying: "Egiaztatzen...", + waitAlert: "Egiaztatzen... itxaron mesedez.", + cancel: "Utzi", + enterCodeFromImage: "Jarraitzeko, idatzi beheko irudiko kodea." + }; + globalThis.$altcha.i18n.set("eu", i18n$r); + const i18n$q = { + ariaLinkLabel: "Altcha (official website)", + cancel: "Cancel", + enterCode: "Enter code", + enterCodeAria: "Enter code you hear. Press Space to play audio.", + enterCodeFromImage: "To proceed, please enter the code from the image below.", + error: "Verification failed. Try again later.", + expired: "Verification expired. Try again.", + footer: 'Protected by ALTCHA', + getAudioChallenge: "Get an audio challenge", + label: "I'm not a robot", + loading: "Loading...", + reload: "Reload", + verify: "Verify", + verificationRequired: "Verification required!", + verified: "Verified", + verifying: "Verifying...", + waitAlert: "Verifying... please wait." + }; + globalThis.$altcha.i18n.set("en", i18n$q); + const i18n$p = { + ariaLinkLabel: "Altcha (officiel hjemmeside)", + enterCode: "Indtast kode", + enterCodeAria: "Indtast den kode, du hører. Tryk på mellemrumstasten for at afspille lyd.", + error: "Verificering mislykkedes. Prøv venligst igen senere.", + expired: "Verificering udløbet. Prøv venligst igen.", + footer: 'Beskyttet af ALTCHA', + getAudioChallenge: "Hent lydudfordring", + label: "Jeg er ikke en robot", + loading: "Indlæser...", + reload: "Genindlæs", + verify: "Verificer", + verificationRequired: "Verificering kræves!", + verified: "Verificeret", + verifying: "Verificerer...", + waitAlert: "Verificerer... vent venligst.", + cancel: "Annuller", + enterCodeFromImage: "For at fortsætte, bedes du indtaste koden fra billedet herunder." + }; + globalThis.$altcha.i18n.set("da", i18n$p); + const i18n$o = { + ariaLinkLabel: "Altcha (officiell webbplats)", + enterCode: "Ange kod", + enterCodeAria: "Ange koden du hör. Tryck på mellanslag för att spela upp ljudet.", + error: "Verifiering misslyckades. Försök igen senare.", + expired: "Verifieringen har gått ut. Försök igen.", + footer: 'Skyddad av ALTCHA', + getAudioChallenge: "Få ljudutmaning", + label: "Jag är inte en robot", + loading: "Laddar...", + reload: "Ladda om", + verify: "Verifiera", + verificationRequired: "Verifiering krävs!", + verified: "Verifierad", + verifying: "Verifierar...", + waitAlert: "Verifierar... vänligen vänta.", + cancel: "Avbryt", + enterCodeFromImage: "För att fortsätta, ange koden från bilden nedan." + }; + globalThis.$altcha.i18n.set("sv", i18n$o); + const i18n$n = { + ariaLinkLabel: "Altcha (virallinen verkkosivusto)", + enterCode: "Syötä koodi", + enterCodeAria: "Kirjoita kuulemasi koodi. Paina välilyöntiä toistaaksesi äänen.", + error: "Varmennus epäonnistui. Yritä myöhemmin uudelleen.", + expired: "Varmennus vanhentui. Yritä uudelleen.", + footer: 'Suojattu ALTCHA:lla', + getAudioChallenge: "Hae äänitehtävä", + label: "En ole robotti", + loading: "Ladataan...", + reload: "Lataa uudelleen", + verify: "Vahvista", + verificationRequired: "Vahvistus vaaditaan!", + verified: "Vahvistettu", + verifying: "Vahvistetaan...", + waitAlert: "Vahvistetaan... odota hetki.", + cancel: "Peruuta", + enterCodeFromImage: "Jatkaaksesi, syötä alla olevan kuvan koodi." + }; + globalThis.$altcha.i18n.set("fi", i18n$n); + const i18n$m = { + ariaLinkLabel: "Altcha (ametlik veebisait)", + enterCode: "Sisesta kood", + enterCodeAria: "Sisestage kuuldu kood. Vajutage tühikut, et esitada heli.", + error: "Kinnitamine ebaõnnestus. Proovi hiljem uuesti.", + expired: "Kinnitamine aegus. Proovi uuesti.", + footer: 'Kaitstud ALTCHA poolt', + getAudioChallenge: "Hangi heliülesanne", + label: "Ma ei ole robot", + loading: "Laadimine...", + reload: "Laadi uuesti", + verify: "Kinnita", + verificationRequired: "Kontroll on vajalik!", + verified: "Kinnitatud", + verifying: "Kinnitamine...", + waitAlert: "Kinnitamine... palun oota.", + cancel: "Tühista", + enterCodeFromImage: "Jätkamiseks sisestage alloleval pildil olev kood." + }; + globalThis.$altcha.i18n.set("et", i18n$m); + const i18n$l = { + ariaLinkLabel: "Altcha (offisiell nettside)", + enterCode: "Skriv inn kode", + enterCodeAria: "Skriv inn koden du hører. Trykk på Space for å spille av lyden.", + error: "Verifisering mislyktes. Prøv igjen senere.", + expired: "Verifiseringen utløp. Prøv igjen.", + footer: 'Beskyttet av ALTCHA', + getAudioChallenge: "Få en lydutfordring", + label: "Jeg er ikke en robot", + loading: "Laster...", + reload: "Last på nytt", + verify: "Verifiser", + verificationRequired: "Verifisering kreves!", + verified: "Verifisert", + verifying: "Verifiserer...", + waitAlert: "Verifiserer... vennligst vent.", + cancel: "Avbryt", + enterCodeFromImage: "For å fortsette, vennligst skriv inn koden fra bildet nedenfor." + }; + globalThis.$altcha.i18n.set("nb", i18n$l); + const i18n$k = { + ariaLinkLabel: "Altcha (opinber vefsíða)", + enterCode: "Sláðu inn kóða", + enterCodeAria: "Sláðu inn kóðann sem þú heyrir. Ýttu á Space til að spila hljóðið.", + error: "Staðfesting mistókst. Reyndu aftur síðar.", + expired: "Staðfesting er útrunnin. Reyndu aftur.", + footer: 'Verndað af ALTCHA', + getAudioChallenge: "Fá hljóðáskorun", + label: "Ég er ekki robot", + loading: "Hleður...", + reload: "Hleð aftur", + verify: "Staðfesta", + verificationRequired: "Staðfesting er nauðsynleg!", + verified: "Staðfest", + verifying: "Að staðfesta...", + waitAlert: "Að staðfesta... vinsamlegast bíða.", + cancel: "Hætta við", + enterCodeFromImage: "Til að halda áfram, vinsamlegast sláðu inn kóðann af myndinni hér að neðan." + }; + globalThis.$altcha.i18n.set("is", i18n$k); + const i18n$j = { + ariaLinkLabel: "Altcha (oficiali svetainė)", + enterCode: "Įveskite kodą", + enterCodeAria: "Įveskite girdimą kodą. Paspauskite tarpo klavišą, kad grotumėte garso įrašą.", + error: "Patvirtinimas nepavyko. Bandykite vėliau.", + expired: "Patvirtinimo laikas baigėsi. Bandykite dar kartą.", + footer: 'Apsaugota ALTCHA', + getAudioChallenge: "Gauti garso užduotį", + label: "Aš nesu robotas", + loading: "Įkeliama...", + reload: "Įkelti iš naujo", + verify: "Patvirtinti", + verificationRequired: "Reikalingas patvirtinimas!", + verified: "Patvirtinta", + verifying: "Tikrinama...", + waitAlert: "Tikrinama... prašome palaukti.", + cancel: "Atšaukti", + enterCodeFromImage: "Norėdami tęsti, įveskite kodą iš paveikslėlio žemiau." + }; + globalThis.$altcha.i18n.set("lt", i18n$j); + const i18n$i = { + ariaLinkLabel: "Altcha (oficiālā tīmekļa vietne)", + enterCode: "Ievadiet kodu", + enterCodeAria: "Ievadiet dzirdamo kodu. Nospiediet atstarpes taustiņu, lai atskaņotu audio.", + error: "Verifikācija neizdevās. Mēģiniet vēlāk vēlreiz.", + expired: "Verifikācijas laiks ir beidzies. Mēģiniet vēlreiz.", + footer: 'Aizsargāts ar ALTCHA', + getAudioChallenge: "Saņemt audio izaicinājumu", + label: "Es neesmu robots", + loading: "Notiek ielāde...", + reload: "Pārlādēt", + verify: "Verificēt", + verificationRequired: "Nepieciešama verifikācija!", + verified: "Verificēts", + verifying: "Notiek verifikācija...", + waitAlert: "Notiek verifikācija... lūdzu, uzgaidiet.", + cancel: "Atcelt", + enterCodeFromImage: "Lai turpinātu, lūdzu, ievadiet zemāk redzamo attēlu kodu." + }; + globalThis.$altcha.i18n.set("lv", i18n$i); + const i18n$h = { + ariaLinkLabel: "Altcha (афіцыйны сайт)", + enterCode: "Увядзіце код", + enterCodeAria: "Увядзіце код, які вы чуеце. Націсніце прабел, каб прайграць аўдыё.", + error: "Праверка не прайшла. Паспрабуйце пазней.", + expired: "Тэрмін праверкі скончыўся. Паспрабуйце зноў.", + footer: 'Абаронена ALTCHA', + getAudioChallenge: "Атрымаць аўдыё выклік", + label: "Я не робат", + loading: "Загрузка...", + reload: "Перазагрузіць", + verify: "Праверыць", + verificationRequired: "Патрабуецца праверка!", + verified: "Праверана", + verifying: "Правяраем...", + waitAlert: "Праверка... калі ласка, пачакайце.", + cancel: "Скасаваць", + enterCodeFromImage: "Каб працягнуць, увядзіце код з малюнка ніжэй." + }; + globalThis.$altcha.i18n.set("be", i18n$h); + const i18n$g = { + ariaLinkLabel: "Altcha (službena web stranica)", + enterCode: "Unesite kod", + enterCodeAria: "Unesite kod koji čujete. Pritisnite Space da biste pustili zvuk.", + error: "Verifikacija nije uspjela. Pokušajte ponovo kasnije.", + expired: "Verifikacija je istekla. Pokušajte ponovo.", + footer: 'Zaštićeno od strane ALTCHA', + getAudioChallenge: "Dohvatite audio izazov", + label: "Nisam robot", + loading: "Učitavanje...", + reload: "Ponovno učitaj", + verify: "Verifikuj", + verificationRequired: "Verifikacija je obavezna!", + verified: "Verifikovano", + verifying: "Verifikacija u toku...", + waitAlert: "Verifikacija u toku... molimo vas da sačekate.", + cancel: "Odustani", + enterCodeFromImage: "Za nastavak, molimo unesite kod sa slike ispod." + }; + globalThis.$altcha.i18n.set("bs", i18n$g); + const i18n$f = { + ariaLinkLabel: "Altcha (oficiální web)", + enterCode: "Zadejte kód", + enterCodeAria: "Zadejte kód, který slyšíte. Stisknutím mezerníku přehrajete zvuk.", + error: "Ověření selhalo. Zkuste to prosím později.", + expired: "Ověření vypršelo. Zkuste to prosím znovu.", + footer: 'Chráněno pomocí ALTCHA', + getAudioChallenge: "Získat audio výzvu", + label: "Nejsem robot", + loading: "Načítání...", + reload: "Znovu načíst", + verify: "Ověřit", + verificationRequired: "Vyžaduje se ověření!", + verified: "Ověřeno", + verifying: "Ověřování...", + waitAlert: "Probíhá ověření... prosím počkejte.", + cancel: "Zrušit", + enterCodeFromImage: "Pro pokračování zadejte kód z obrázku níže." + }; + globalThis.$altcha.i18n.set("cs", i18n$f); + const i18n$e = { + ariaLinkLabel: "Altcha (oficjalna strona internetowa)", + enterCode: "Wprowadź kod", + enterCodeAria: "Wpisz kod, który słyszysz. Naciśnij Spację, aby odtworzyć dźwięk.", + error: "Weryfikacja nie powiodła się. Spróbuj ponownie później.", + expired: "Weryfikacja wygasła. Spróbuj ponownie.", + footer: 'Chronione przez ALTCHA', + getAudioChallenge: "Pobierz zadanie dźwiękowe", + label: "Nie jestem robotem", + loading: "Ładowanie...", + reload: "Odśwież", + verify: "Zweryfikuj", + verificationRequired: "Wymagana weryfikacja!", + verified: "Zweryfikowano", + verifying: "Weryfikacja...", + waitAlert: "Trwa weryfikacja... proszę czekać.", + cancel: "Anuluj", + enterCodeFromImage: "Aby kontynuować, wprowadź kod z poniższego obrazka." + }; + globalThis.$altcha.i18n.set("pl", i18n$e); + const i18n$d = { + ariaLinkLabel: "Altcha (hivatalos weboldal)", + enterCode: "Írja be a kódot", + enterCodeAria: "Írja be a hallott kódot. Nyomja meg a Szóköz billentyűt a hang lejátszásához.", + error: "A hitelesítés nem sikerült. Próbáld meg később újra.", + expired: "A hitelesítés lejárt. Próbáld újra.", + footer: 'Védve a következő által: ALTCHA', + getAudioChallenge: "Hangalapú kihívás kérése", + label: "Nem vagyok robot", + loading: "Betöltés...", + reload: "Újratöltés", + verify: "Ellenőrzés", + verificationRequired: "Ellenőrzés szükséges!", + verified: "Ellenőrizve", + verifying: "Ellenőrzés folyamatban...", + waitAlert: "Ellenőrzés folyamatban... kérlek várj.", + cancel: "Mégse", + enterCodeFromImage: "A folytatáshoz, kérjük, adja meg az alábbi kép kódját." + }; + globalThis.$altcha.i18n.set("hu", i18n$d); + const i18n$c = { + ariaLinkLabel: "Altcha (oficiálna webová stránka)", + enterCode: "Zadajte kód", + enterCodeAria: "Zadajte kód, ktorý počujete. Stlačením medzerníka prehráte zvuk.", + error: "Verifikácia zlyhala. Skúste to znova neskôr.", + expired: "Verifikácia vypršala. Skúste to znova.", + footer: 'Chránené ALTCHA', + getAudioChallenge: "Získať audio výzvu", + label: "Nie som robot", + loading: "Načítava sa...", + reload: "Obnoviť", + verify: "Verifikovať", + verificationRequired: "Vyžaduje sa overenie!", + verified: "Verifikované", + verifying: "Prebieha verifikácia...", + waitAlert: "Prebieha verifikácia... prosím čakajte.", + cancel: "Zrušiť", + enterCodeFromImage: "Na pokračovanie, prosím, zadajte kód z obrázka nižšie." + }; + globalThis.$altcha.i18n.set("sk", i18n$c); + const i18n$b = { + ariaLinkLabel: "Altcha (uradna spletna stran)", + enterCode: "Vnesite kodo", + enterCodeAria: "Vnesite kodo, ki jo slišite. Pritisnite preslednico za predvajanje zvoka.", + error: "Preverjanje ni uspelo. Poskusite znova kasneje.", + expired: "Preverjanje je poteklo. Poskusite znova.", + footer: 'Zaščiteno z ALTCHA', + getAudioChallenge: "Pridobite zvočni izziv", + label: "Nisem robot", + loading: "Nalagam...", + reload: "Ponovno naloži", + verify: "Preveri", + verificationRequired: "Potrebna je preveritev!", + verified: "Preverjeno", + verifying: "Preverjanje...", + waitAlert: "Preverjanje... prosim počakajte.", + cancel: "Preklic", + enterCodeFromImage: "Za nadaljevanje, prosimo, vnesite kodo s slike spodaj." + }; + globalThis.$altcha.i18n.set("sl", i18n$b); + const i18n$a = { + ariaLinkLabel: "Altcha (službena web stranica)", + enterCode: "Unesite kod", + enterCodeAria: "Unesite kod koji čujete. Pritisnite razmaknicu za reprodukciju zvuka.", + error: "Provjera nije uspjela. Molimo pokušajte kasnije.", + expired: "Provjera je istekla. Molimo pokušajte ponovo.", + footer: 'Zaštićeno od strane ALTCHA', + getAudioChallenge: "Audio provjera", + label: "Ja nisam robot", + loading: "Učitavanje...", + reload: "Ponovno učitaj", + verify: "Provjeri", + verificationRequired: "Potrebna je provjera!", + verified: "Provjereno", + verifying: "Provjeravanje...", + waitAlert: "Provjera je u tijeku... molimo pričekajte.", + cancel: "Odustani", + enterCodeFromImage: "Za nastavak molimo unesite kod sa slike ispod." + }; + globalThis.$altcha.i18n.set("hr", i18n$a); + const i18n$9 = { + ariaLinkLabel: "Altcha (site oficial)", + enterCode: "Introduceți codul", + enterCodeAria: "Introduceți codul pe care îl auziți. Apăsați Spațiu pentru a reda audio.", + error: "Verificarea a eșuat. Încearcă din nou mai târziu.", + expired: "Verificarea a expirat. Încearcă din nou.", + footer: 'Protejat de ALTCHA', + getAudioChallenge: "Obține o provocare audio", + label: "Nu sunt un robot", + loading: "Se încarcă...", + reload: "Reîncarcă", + verify: "Verifică", + verificationRequired: "Verificare necesară!", + verified: "Verificat", + verifying: "Se verifică...", + waitAlert: "Se verifică... te rugăm să aștepți.", + cancel: "Anulare", + enterCodeFromImage: "Pentru a continua, vă rugăm să introduceți codul din imaginea de mai jos." + }; + globalThis.$altcha.i18n.set("ro", i18n$9); + const i18n$8 = { + ariaLinkLabel: "Altcha (официален уебсайт)", + enterCode: "Въведете код", + enterCodeAria: "Въведете кода, който чувате. Натиснете Space за възпроизвеждане на аудио.", + error: "Проверката неуспешна. Моля, опитайте по-късно.", + expired: "Времето за проверка изтече. Моля, опитайте отново.", + footer: 'Защитено от ALTCHA', + getAudioChallenge: "Аудио проверка", + label: "Аз не съм робот", + loading: "Зареждане...", + reload: "Презареди", + verify: "Провери", + verificationRequired: "Изисква се проверка!", + verified: "Проверено", + verifying: "Проверява се...", + waitAlert: "Проверката е в процес... моля изчакайте.", + cancel: "Отказ", + enterCodeFromImage: "За да продължите, моля, въведете кода от изображението по-долу." + }; + globalThis.$altcha.i18n.set("bg", i18n$8); + const i18n$7 = { + ariaLinkLabel: "Altcha (επίσημος ιστότοπος)", + enterCode: "Εισαγάγετε κωδικό", + enterCodeAria: "Εισαγάγετε τον κωδικό που ακούτε. Πατήστε Space για να παίξετε τον ήχο.", + error: "Η επαλήθευση απέτυχε. Δοκιμάστε ξανά αργότερα.", + expired: "Η επαλήθευση έληξε. Δοκιμάστε ξανά.", + footer: 'Προστατεύεται από το ALTCHA', + getAudioChallenge: "Λήψη ηχητικής δοκιμασίας", + label: "Δεν είμαι ρομπότ", + loading: "Φόρτωση...", + reload: "Επαναφόρτωση", + verify: "Επαλήθευση", + verificationRequired: "Απαιτείται έλεγχος!", + verified: "Επαληθεύτηκε", + verifying: "Γίνεται επαλήθευση...", + waitAlert: "Γίνεται επαλήθευση... παρακαλώ περιμένετε.", + cancel: "Ακύρωση", + enterCodeFromImage: "Για να συνεχίσετε, εισάγετε τον κωδικό από την παρακάτω εικόνα." + }; + globalThis.$altcha.i18n.set("el", i18n$7); + const i18n$6 = { + ariaLinkLabel: "Altcha (zvanična web stranica)", + enterCode: "Unesite kod", + enterCodeAria: "Unesite kod koji čujete. Pritisnite Space da biste pustili zvuk.", + error: "Verifikacija nije uspela. Pokušajte ponovo kasnije.", + expired: "Verifikacija je istekla. Pokušajte ponovo.", + footer: 'Zaštićeno od strane ALTCHA', + getAudioChallenge: "Dohvatite audio izazov", + label: "Nisam robot", + loading: "Učitavanje...", + reload: "Ponovo učitaj", + verify: "Verifikuj", + verificationRequired: "Verifikacija je obavezna!", + verified: "Verifikovano", + verifying: "Verifikacija u toku...", + waitAlert: "Verifikacija u toku... molimo vas da sačekate.", + cancel: "Откажи", + enterCodeFromImage: "Да бисте наставили, унесите код са слике испод." + }; + globalThis.$altcha.i18n.set("sr", i18n$6); + const i18n$5 = { + ariaLinkLabel: "Altcha (официальный сайт)", + enterCode: "Введите код", + enterCodeAria: "Введите код, который слышите. Нажмите пробел для воспроизведения аудио.", + error: "Ошибка верификации. Попробуйте позже.", + expired: "Срок действия верификации истек. Попробуйте снова.", + footer: 'Защищено ALTCHA', + getAudioChallenge: "Получить аудио задачу", + label: "Я не робот", + loading: "Загрузка...", + reload: "Перезагрузить", + verify: "Проверить", + verificationRequired: "Требуется проверка!", + verified: "Проверено", + verifying: "Идет проверка...", + waitAlert: "Идет проверка... Пожалуйста, подождите.", + cancel: "Отмена", + enterCodeFromImage: "Чтобы продолжить, пожалуйста, введите код с изображения ниже." + }; + globalThis.$altcha.i18n.set("ru", i18n$5); + const i18n$4 = { + ariaLinkLabel: "Altcha (zvanična web stranica)", + enterCode: "Unesite kod", + enterCodeAria: "Unesite kod koji čujete. Pritisnite Space za puštanje zvuka.", + error: "Verifikacija nije uspjela. Pokušajte ponovo kasnije.", + expired: "Verifikacija je istekla. Pokušajte ponovo.", + footer: 'Zaštićeno putem ALTCHA', + getAudioChallenge: "Preuzmi audio izazov", + label: "Nijesam robot", + loading: "Učitavanje...", + reload: "Ponovo učitaj", + verify: "Verifikuj", + verificationRequired: "Potrebna je verifikacija!", + verified: "Verifikovano", + verifying: "Verifikacija u toku...", + waitAlert: "Verifikujem... molimo sačekajte.", + cancel: "Odustani", + enterCodeFromImage: "Za nastavak, molimo unesite kod sa slike ispod." + }; + globalThis.$altcha.i18n.set("me", i18n$4); + const i18n$3 = { + ariaLinkLabel: "Altcha (официјален веб-сајт)", + enterCode: "Внесете код", + enterCodeAria: "Внесете го кодот што го слушате. Притиснете Space за да ја пуштите аудио снимката.", + error: "Проверката не успеа. Обидете се подоцна.", + expired: "Проверката истече. Обидете се повторно.", + footer: 'Заштитено со ALTCHA', + getAudioChallenge: "Земете аудио предизвик", + label: "Јас не сум робот", + loading: "Се вчитува...", + reload: "Превчитај", + verify: "Провери", + verificationRequired: "Потребна е проверка!", + verified: "Потврдено", + verifying: "Се проверува...", + waitAlert: "Се проверува... ве молиме почекајте.", + cancel: "Откажи", + enterCodeFromImage: "За да продолжите, ве молиме внесете го кодот од сликата подолу." + }; + globalThis.$altcha.i18n.set("mk", i18n$3); + const i18n$2 = { + ariaLinkLabel: "Altcha (faqja zyrtare)", + enterCode: "Fut kodin", + enterCodeAria: "Fut kodin që dëgjon. Shtypni Hapësirë për të luajtur audio.", + error: "Verifikimi dështoi. Provoni përsëri më vonë.", + expired: "Verifikimi ka skaduar. Provoni përsëri.", + footer: 'I mbrojtur nga ALTCHA', + getAudioChallenge: "Merr një sfidë audio", + label: "Unë nuk jam një robot", + loading: "Duke u ngarkuar...", + reload: "Ringarko", + verify: "Verifiko", + verificationRequired: "Kërkohet verifikimi!", + verified: "I verifikuar", + verifying: "Duke verifikuar...", + waitAlert: "Duke verifikuar... ju lutem prisni.", + cancel: "Anuloje", + enterCodeFromImage: "Për të vazhduar, ju lutemi fusni kodin nga imazhi më poshtë." + }; + globalThis.$altcha.i18n.set("sq", i18n$2); + const i18n$1 = { + ariaLinkLabel: "Altcha (amptelike webwerf)", + enterCode: "Voer kode in", + enterCodeAria: "Voer die kode in wat jy hoor. Druk Spasie om die klank af te speel.", + error: "Verifikasie het misluk. Probeer later weer.", + expired: "Verifikasie het verval. Probeer weer.", + footer: 'Beskerm deur ALTCHA', + getAudioChallenge: "Kry 'n klankuitdaging", + label: "Ek is nie 'n robot nie", + loading: "Laai...", + reload: "Laai weer", + verify: "Verifieer", + verificationRequired: "Verifikasie is vereis!", + verified: "Geverifieer", + verifying: "Verifieer...", + waitAlert: "Verifieer... wag asseblief.", + cancel: "Kanselleer", + enterCodeFromImage: "Om voort te gaan, voer asseblief die kode vanaf die onderstaande prentjie in." + }; + globalThis.$altcha.i18n.set("af", i18n$1); + const i18n = { + ariaLinkLabel: "Altcha (sit uffiċjali)", + enterCode: "Idħol il-kodiċi", + enterCodeAria: "Idħol il-kodiċi li tisma'. Agħfas Spazju biex tindaqq l-awdjo.", + error: "Il-verifika falliet. Erġa’ pprova aktar tard.", + expired: "Il-verifika skadiet. Erġa’ pprova.", + footer: 'Protett minn ALTCHA', + getAudioChallenge: "Ikseb sfida bl-awdjo", + label: "M’inix robot", + loading: "Qed jitgħabba...", + reload: "Ittella’ mill-ġdid", + verify: "Ivverifika", + verificationRequired: "Verifika meħtieġa!", + verified: "Ivverifikat", + verifying: "Verifika għaddejja...", + waitAlert: "Verifika għaddejja... stenna ftit.", + cancel: "Ikkanċella", + enterCodeFromImage: "Biex tipproċedi, jekk jogħġbok daħħal il-kodiċi mill-immaġni hawn taħt." + }; + globalThis.$altcha.i18n.set("mt", i18n); +})); diff --git a/frontend/node_modules/altcha/dist/i18n/fa.d.ts b/frontend/node_modules/altcha/dist/i18n/fa.d.ts new file mode 100644 index 0000000..b8a904e --- /dev/null +++ b/frontend/node_modules/altcha/dist/i18n/fa.d.ts @@ -0,0 +1 @@ +declare module 'altcha/i18n/fa'; export {}; diff --git a/frontend/node_modules/altcha/dist/i18n/fa.js b/frontend/node_modules/altcha/dist/i18n/fa.js new file mode 100644 index 0000000..96a1d59 --- /dev/null +++ b/frontend/node_modules/altcha/dist/i18n/fa.js @@ -0,0 +1,128 @@ +const noop = () => { +}; +function safe_not_equal(a, b) { + return a != a ? b == b : a !== b || a !== null && typeof a === "object" || typeof a === "function"; +} +function subscribe_to_store(store2, run, invalidate) { + if (store2 == null) { + run(void 0); + return noop; + } + const unsub = untrack( + () => store2.subscribe( + run, + // @ts-expect-error + invalidate + ) + ); + return unsub.unsubscribe ? () => unsub.unsubscribe() : unsub; +} +const subscriber_queue = []; +function writable(value, start = noop) { + let stop = null; + const subscribers = /* @__PURE__ */ new Set(); + function set(new_value) { + if (safe_not_equal(value, new_value)) { + value = new_value; + if (stop) { + const run_queue = !subscriber_queue.length; + for (const subscriber of subscribers) { + subscriber[1](); + subscriber_queue.push(subscriber, value); + } + if (run_queue) { + for (let i = 0; i < subscriber_queue.length; i += 2) { + subscriber_queue[i][0](subscriber_queue[i + 1]); + } + subscriber_queue.length = 0; + } + } + } + } + function update(fn) { + set(fn( + /** @type {T} */ + value + )); + } + function subscribe(run, invalidate = noop) { + const subscriber = [run, invalidate]; + subscribers.add(subscriber); + if (subscribers.size === 1) { + stop = start(set, update) || noop; + } + run( + /** @type {T} */ + value + ); + return () => { + subscribers.delete(subscriber); + if (subscribers.size === 0 && stop) { + stop(); + stop = null; + } + }; + } + return { set, update, subscribe }; +} +function get(store2) { + let value; + subscribe_to_store(store2, (_) => value = _)(); + return value; +} +let untracking = false; +function untrack(fn) { + var previous_untracking = untracking; + try { + untracking = true; + return fn(); + } finally { + untracking = previous_untracking; + } +} +function store(defaultValue) { + const scope = { + get: (name) => { + return get(scope.store)[name]; + }, + set: (name, value) => { + if (typeof name === "string") { + Object.assign(get(scope.store), { + [name]: value + }); + } else { + Object.assign(get(scope.store), name); + } + scope.store.set(get(scope.store)); + }, + store: writable(defaultValue) + }; + return scope; +} +globalThis.$altcha = globalThis.$altcha || { + algorithms: /* @__PURE__ */ new Map(), + defaults: store({}), + i18n: store({}), + instances: /* @__PURE__ */ new Set(), + plugins: /* @__PURE__ */ new Set() +}; +const i18n = { + ariaLinkLabel: "Altcha (وب‌سایت رسمی)", + enterCode: "کد را وارد کنید", + enterCodeAria: "کدی که می‌شنوید را وارد کنید. برای پخش صدا Space را فشار دهید.", + error: "احراز هویت ناموفق بود. بعداً دوباره تلاش کنید.", + expired: "احراز هویت منقضی شد. دوباره تلاش کنید.", + footer: 'محافظت شده توسط ALTCHA', + getAudioChallenge: "دریافت چالش صوتی", + label: "من ربات نیستم", + loading: "در حال بارگذاری...", + reload: "بارگذاری مجدد", + verify: "تایید", + verificationRequired: "احراز هویت لازم است!", + verified: "تایید شد", + verifying: "در حال تایید...", + waitAlert: "در حال تایید... لطفا منتظر بمانید.", + cancel: "لغو کردن", + enterCodeFromImage: "برای ادامه، لطفاً کد تصویر زیر را وارد کنید." +}; +globalThis.$altcha.i18n.set("fa", i18n); diff --git a/frontend/node_modules/altcha/dist/i18n/fa.umd.cjs b/frontend/node_modules/altcha/dist/i18n/fa.umd.cjs new file mode 100644 index 0000000..2cf866e --- /dev/null +++ b/frontend/node_modules/altcha/dist/i18n/fa.umd.cjs @@ -0,0 +1,133 @@ +(function(factory) { + typeof define === "function" && define.amd ? define(factory) : factory(); +})((function() { + "use strict"; + const noop = () => { + }; + function safe_not_equal(a, b) { + return a != a ? b == b : a !== b || a !== null && typeof a === "object" || typeof a === "function"; + } + function subscribe_to_store(store2, run, invalidate) { + if (store2 == null) { + run(void 0); + return noop; + } + const unsub = untrack( + () => store2.subscribe( + run, + // @ts-expect-error + invalidate + ) + ); + return unsub.unsubscribe ? () => unsub.unsubscribe() : unsub; + } + const subscriber_queue = []; + function writable(value, start = noop) { + let stop = null; + const subscribers = /* @__PURE__ */ new Set(); + function set(new_value) { + if (safe_not_equal(value, new_value)) { + value = new_value; + if (stop) { + const run_queue = !subscriber_queue.length; + for (const subscriber of subscribers) { + subscriber[1](); + subscriber_queue.push(subscriber, value); + } + if (run_queue) { + for (let i = 0; i < subscriber_queue.length; i += 2) { + subscriber_queue[i][0](subscriber_queue[i + 1]); + } + subscriber_queue.length = 0; + } + } + } + } + function update(fn) { + set(fn( + /** @type {T} */ + value + )); + } + function subscribe(run, invalidate = noop) { + const subscriber = [run, invalidate]; + subscribers.add(subscriber); + if (subscribers.size === 1) { + stop = start(set, update) || noop; + } + run( + /** @type {T} */ + value + ); + return () => { + subscribers.delete(subscriber); + if (subscribers.size === 0 && stop) { + stop(); + stop = null; + } + }; + } + return { set, update, subscribe }; + } + function get(store2) { + let value; + subscribe_to_store(store2, (_) => value = _)(); + return value; + } + let untracking = false; + function untrack(fn) { + var previous_untracking = untracking; + try { + untracking = true; + return fn(); + } finally { + untracking = previous_untracking; + } + } + function store(defaultValue) { + const scope = { + get: (name) => { + return get(scope.store)[name]; + }, + set: (name, value) => { + if (typeof name === "string") { + Object.assign(get(scope.store), { + [name]: value + }); + } else { + Object.assign(get(scope.store), name); + } + scope.store.set(get(scope.store)); + }, + store: writable(defaultValue) + }; + return scope; + } + globalThis.$altcha = globalThis.$altcha || { + algorithms: /* @__PURE__ */ new Map(), + defaults: store({}), + i18n: store({}), + instances: /* @__PURE__ */ new Set(), + plugins: /* @__PURE__ */ new Set() + }; + const i18n = { + ariaLinkLabel: "Altcha (وب‌سایت رسمی)", + enterCode: "کد را وارد کنید", + enterCodeAria: "کدی که می‌شنوید را وارد کنید. برای پخش صدا Space را فشار دهید.", + error: "احراز هویت ناموفق بود. بعداً دوباره تلاش کنید.", + expired: "احراز هویت منقضی شد. دوباره تلاش کنید.", + footer: 'محافظت شده توسط ALTCHA', + getAudioChallenge: "دریافت چالش صوتی", + label: "من ربات نیستم", + loading: "در حال بارگذاری...", + reload: "بارگذاری مجدد", + verify: "تایید", + verificationRequired: "احراز هویت لازم است!", + verified: "تایید شد", + verifying: "در حال تایید...", + waitAlert: "در حال تایید... لطفا منتظر بمانید.", + cancel: "لغو کردن", + enterCodeFromImage: "برای ادامه، لطفاً کد تصویر زیر را وارد کنید." + }; + globalThis.$altcha.i18n.set("fa", i18n); +})); diff --git a/frontend/node_modules/altcha/dist/i18n/fi.d.ts b/frontend/node_modules/altcha/dist/i18n/fi.d.ts new file mode 100644 index 0000000..5eeb9a6 --- /dev/null +++ b/frontend/node_modules/altcha/dist/i18n/fi.d.ts @@ -0,0 +1 @@ +declare module 'altcha/i18n/fi'; export {}; diff --git a/frontend/node_modules/altcha/dist/i18n/fi.js b/frontend/node_modules/altcha/dist/i18n/fi.js new file mode 100644 index 0000000..0ce1f68 --- /dev/null +++ b/frontend/node_modules/altcha/dist/i18n/fi.js @@ -0,0 +1,128 @@ +const noop = () => { +}; +function safe_not_equal(a, b) { + return a != a ? b == b : a !== b || a !== null && typeof a === "object" || typeof a === "function"; +} +function subscribe_to_store(store2, run, invalidate) { + if (store2 == null) { + run(void 0); + return noop; + } + const unsub = untrack( + () => store2.subscribe( + run, + // @ts-expect-error + invalidate + ) + ); + return unsub.unsubscribe ? () => unsub.unsubscribe() : unsub; +} +const subscriber_queue = []; +function writable(value, start = noop) { + let stop = null; + const subscribers = /* @__PURE__ */ new Set(); + function set(new_value) { + if (safe_not_equal(value, new_value)) { + value = new_value; + if (stop) { + const run_queue = !subscriber_queue.length; + for (const subscriber of subscribers) { + subscriber[1](); + subscriber_queue.push(subscriber, value); + } + if (run_queue) { + for (let i = 0; i < subscriber_queue.length; i += 2) { + subscriber_queue[i][0](subscriber_queue[i + 1]); + } + subscriber_queue.length = 0; + } + } + } + } + function update(fn) { + set(fn( + /** @type {T} */ + value + )); + } + function subscribe(run, invalidate = noop) { + const subscriber = [run, invalidate]; + subscribers.add(subscriber); + if (subscribers.size === 1) { + stop = start(set, update) || noop; + } + run( + /** @type {T} */ + value + ); + return () => { + subscribers.delete(subscriber); + if (subscribers.size === 0 && stop) { + stop(); + stop = null; + } + }; + } + return { set, update, subscribe }; +} +function get(store2) { + let value; + subscribe_to_store(store2, (_) => value = _)(); + return value; +} +let untracking = false; +function untrack(fn) { + var previous_untracking = untracking; + try { + untracking = true; + return fn(); + } finally { + untracking = previous_untracking; + } +} +function store(defaultValue) { + const scope = { + get: (name) => { + return get(scope.store)[name]; + }, + set: (name, value) => { + if (typeof name === "string") { + Object.assign(get(scope.store), { + [name]: value + }); + } else { + Object.assign(get(scope.store), name); + } + scope.store.set(get(scope.store)); + }, + store: writable(defaultValue) + }; + return scope; +} +globalThis.$altcha = globalThis.$altcha || { + algorithms: /* @__PURE__ */ new Map(), + defaults: store({}), + i18n: store({}), + instances: /* @__PURE__ */ new Set(), + plugins: /* @__PURE__ */ new Set() +}; +const i18n = { + ariaLinkLabel: "Altcha (virallinen verkkosivusto)", + enterCode: "Syötä koodi", + enterCodeAria: "Kirjoita kuulemasi koodi. Paina välilyöntiä toistaaksesi äänen.", + error: "Varmennus epäonnistui. Yritä myöhemmin uudelleen.", + expired: "Varmennus vanhentui. Yritä uudelleen.", + footer: 'Suojattu ALTCHA:lla', + getAudioChallenge: "Hae äänitehtävä", + label: "En ole robotti", + loading: "Ladataan...", + reload: "Lataa uudelleen", + verify: "Vahvista", + verificationRequired: "Vahvistus vaaditaan!", + verified: "Vahvistettu", + verifying: "Vahvistetaan...", + waitAlert: "Vahvistetaan... odota hetki.", + cancel: "Peruuta", + enterCodeFromImage: "Jatkaaksesi, syötä alla olevan kuvan koodi." +}; +globalThis.$altcha.i18n.set("fi", i18n); diff --git a/frontend/node_modules/altcha/dist/i18n/fi.umd.cjs b/frontend/node_modules/altcha/dist/i18n/fi.umd.cjs new file mode 100644 index 0000000..8ec6696 --- /dev/null +++ b/frontend/node_modules/altcha/dist/i18n/fi.umd.cjs @@ -0,0 +1,133 @@ +(function(factory) { + typeof define === "function" && define.amd ? define(factory) : factory(); +})((function() { + "use strict"; + const noop = () => { + }; + function safe_not_equal(a, b) { + return a != a ? b == b : a !== b || a !== null && typeof a === "object" || typeof a === "function"; + } + function subscribe_to_store(store2, run, invalidate) { + if (store2 == null) { + run(void 0); + return noop; + } + const unsub = untrack( + () => store2.subscribe( + run, + // @ts-expect-error + invalidate + ) + ); + return unsub.unsubscribe ? () => unsub.unsubscribe() : unsub; + } + const subscriber_queue = []; + function writable(value, start = noop) { + let stop = null; + const subscribers = /* @__PURE__ */ new Set(); + function set(new_value) { + if (safe_not_equal(value, new_value)) { + value = new_value; + if (stop) { + const run_queue = !subscriber_queue.length; + for (const subscriber of subscribers) { + subscriber[1](); + subscriber_queue.push(subscriber, value); + } + if (run_queue) { + for (let i = 0; i < subscriber_queue.length; i += 2) { + subscriber_queue[i][0](subscriber_queue[i + 1]); + } + subscriber_queue.length = 0; + } + } + } + } + function update(fn) { + set(fn( + /** @type {T} */ + value + )); + } + function subscribe(run, invalidate = noop) { + const subscriber = [run, invalidate]; + subscribers.add(subscriber); + if (subscribers.size === 1) { + stop = start(set, update) || noop; + } + run( + /** @type {T} */ + value + ); + return () => { + subscribers.delete(subscriber); + if (subscribers.size === 0 && stop) { + stop(); + stop = null; + } + }; + } + return { set, update, subscribe }; + } + function get(store2) { + let value; + subscribe_to_store(store2, (_) => value = _)(); + return value; + } + let untracking = false; + function untrack(fn) { + var previous_untracking = untracking; + try { + untracking = true; + return fn(); + } finally { + untracking = previous_untracking; + } + } + function store(defaultValue) { + const scope = { + get: (name) => { + return get(scope.store)[name]; + }, + set: (name, value) => { + if (typeof name === "string") { + Object.assign(get(scope.store), { + [name]: value + }); + } else { + Object.assign(get(scope.store), name); + } + scope.store.set(get(scope.store)); + }, + store: writable(defaultValue) + }; + return scope; + } + globalThis.$altcha = globalThis.$altcha || { + algorithms: /* @__PURE__ */ new Map(), + defaults: store({}), + i18n: store({}), + instances: /* @__PURE__ */ new Set(), + plugins: /* @__PURE__ */ new Set() + }; + const i18n = { + ariaLinkLabel: "Altcha (virallinen verkkosivusto)", + enterCode: "Syötä koodi", + enterCodeAria: "Kirjoita kuulemasi koodi. Paina välilyöntiä toistaaksesi äänen.", + error: "Varmennus epäonnistui. Yritä myöhemmin uudelleen.", + expired: "Varmennus vanhentui. Yritä uudelleen.", + footer: 'Suojattu ALTCHA:lla', + getAudioChallenge: "Hae äänitehtävä", + label: "En ole robotti", + loading: "Ladataan...", + reload: "Lataa uudelleen", + verify: "Vahvista", + verificationRequired: "Vahvistus vaaditaan!", + verified: "Vahvistettu", + verifying: "Vahvistetaan...", + waitAlert: "Vahvistetaan... odota hetki.", + cancel: "Peruuta", + enterCodeFromImage: "Jatkaaksesi, syötä alla olevan kuvan koodi." + }; + globalThis.$altcha.i18n.set("fi", i18n); +})); diff --git a/frontend/node_modules/altcha/dist/i18n/fr-ca.js b/frontend/node_modules/altcha/dist/i18n/fr-ca.js new file mode 100644 index 0000000..1305b05 --- /dev/null +++ b/frontend/node_modules/altcha/dist/i18n/fr-ca.js @@ -0,0 +1,128 @@ +const noop = () => { +}; +function safe_not_equal(a, b) { + return a != a ? b == b : a !== b || a !== null && typeof a === "object" || typeof a === "function"; +} +function subscribe_to_store(store2, run, invalidate) { + if (store2 == null) { + run(void 0); + return noop; + } + const unsub = untrack( + () => store2.subscribe( + run, + // @ts-expect-error + invalidate + ) + ); + return unsub.unsubscribe ? () => unsub.unsubscribe() : unsub; +} +const subscriber_queue = []; +function writable(value, start = noop) { + let stop = null; + const subscribers = /* @__PURE__ */ new Set(); + function set(new_value) { + if (safe_not_equal(value, new_value)) { + value = new_value; + if (stop) { + const run_queue = !subscriber_queue.length; + for (const subscriber of subscribers) { + subscriber[1](); + subscriber_queue.push(subscriber, value); + } + if (run_queue) { + for (let i = 0; i < subscriber_queue.length; i += 2) { + subscriber_queue[i][0](subscriber_queue[i + 1]); + } + subscriber_queue.length = 0; + } + } + } + } + function update(fn) { + set(fn( + /** @type {T} */ + value + )); + } + function subscribe(run, invalidate = noop) { + const subscriber = [run, invalidate]; + subscribers.add(subscriber); + if (subscribers.size === 1) { + stop = start(set, update) || noop; + } + run( + /** @type {T} */ + value + ); + return () => { + subscribers.delete(subscriber); + if (subscribers.size === 0 && stop) { + stop(); + stop = null; + } + }; + } + return { set, update, subscribe }; +} +function get(store2) { + let value; + subscribe_to_store(store2, (_) => value = _)(); + return value; +} +let untracking = false; +function untrack(fn) { + var previous_untracking = untracking; + try { + untracking = true; + return fn(); + } finally { + untracking = previous_untracking; + } +} +function store(defaultValue) { + const scope = { + get: (name) => { + return get(scope.store)[name]; + }, + set: (name, value) => { + if (typeof name === "string") { + Object.assign(get(scope.store), { + [name]: value + }); + } else { + Object.assign(get(scope.store), name); + } + scope.store.set(get(scope.store)); + }, + store: writable(defaultValue) + }; + return scope; +} +globalThis.$altcha = globalThis.$altcha || { + algorithms: /* @__PURE__ */ new Map(), + defaults: store({}), + i18n: store({}), + instances: /* @__PURE__ */ new Set(), + plugins: /* @__PURE__ */ new Set() +}; +const i18n = { + ariaLinkLabel: "Altcha (site officiel)", + enterCode: "Entrez le code", + enterCodeAria: "Entrez le code que vous entendez. Appuyez sur la barre d'espace pour écouter l'audio.", + error: "Échec de la vérification. Réessayez plus tard.", + expired: "La vérification a expiré. Réessayez.", + footer: 'Protégé par ALTCHA', + getAudioChallenge: "Obtenir un défi audio", + label: "Je ne suis pas un robot", + loading: "Chargement...", + reload: "Recharger", + verify: "Vérifier", + verificationRequired: "Vérification requise !", + verified: "Vérifié", + verifying: "Vérification en cours...", + waitAlert: "Vérification en cours... veuillez patienter.", + cancel: "Annuler", + enterCodeFromImage: "Pour continuer, veuillez entrer le code de l'image ci-dessous." +}; +globalThis.$altcha.i18n.set("fr-ca", i18n); diff --git a/frontend/node_modules/altcha/dist/i18n/fr-ca.umd.cjs b/frontend/node_modules/altcha/dist/i18n/fr-ca.umd.cjs new file mode 100644 index 0000000..bc9d452 --- /dev/null +++ b/frontend/node_modules/altcha/dist/i18n/fr-ca.umd.cjs @@ -0,0 +1,133 @@ +(function(factory) { + typeof define === "function" && define.amd ? define(factory) : factory(); +})((function() { + "use strict"; + const noop = () => { + }; + function safe_not_equal(a, b) { + return a != a ? b == b : a !== b || a !== null && typeof a === "object" || typeof a === "function"; + } + function subscribe_to_store(store2, run, invalidate) { + if (store2 == null) { + run(void 0); + return noop; + } + const unsub = untrack( + () => store2.subscribe( + run, + // @ts-expect-error + invalidate + ) + ); + return unsub.unsubscribe ? () => unsub.unsubscribe() : unsub; + } + const subscriber_queue = []; + function writable(value, start = noop) { + let stop = null; + const subscribers = /* @__PURE__ */ new Set(); + function set(new_value) { + if (safe_not_equal(value, new_value)) { + value = new_value; + if (stop) { + const run_queue = !subscriber_queue.length; + for (const subscriber of subscribers) { + subscriber[1](); + subscriber_queue.push(subscriber, value); + } + if (run_queue) { + for (let i = 0; i < subscriber_queue.length; i += 2) { + subscriber_queue[i][0](subscriber_queue[i + 1]); + } + subscriber_queue.length = 0; + } + } + } + } + function update(fn) { + set(fn( + /** @type {T} */ + value + )); + } + function subscribe(run, invalidate = noop) { + const subscriber = [run, invalidate]; + subscribers.add(subscriber); + if (subscribers.size === 1) { + stop = start(set, update) || noop; + } + run( + /** @type {T} */ + value + ); + return () => { + subscribers.delete(subscriber); + if (subscribers.size === 0 && stop) { + stop(); + stop = null; + } + }; + } + return { set, update, subscribe }; + } + function get(store2) { + let value; + subscribe_to_store(store2, (_) => value = _)(); + return value; + } + let untracking = false; + function untrack(fn) { + var previous_untracking = untracking; + try { + untracking = true; + return fn(); + } finally { + untracking = previous_untracking; + } + } + function store(defaultValue) { + const scope = { + get: (name) => { + return get(scope.store)[name]; + }, + set: (name, value) => { + if (typeof name === "string") { + Object.assign(get(scope.store), { + [name]: value + }); + } else { + Object.assign(get(scope.store), name); + } + scope.store.set(get(scope.store)); + }, + store: writable(defaultValue) + }; + return scope; + } + globalThis.$altcha = globalThis.$altcha || { + algorithms: /* @__PURE__ */ new Map(), + defaults: store({}), + i18n: store({}), + instances: /* @__PURE__ */ new Set(), + plugins: /* @__PURE__ */ new Set() + }; + const i18n = { + ariaLinkLabel: "Altcha (site officiel)", + enterCode: "Entrez le code", + enterCodeAria: "Entrez le code que vous entendez. Appuyez sur la barre d'espace pour écouter l'audio.", + error: "Échec de la vérification. Réessayez plus tard.", + expired: "La vérification a expiré. Réessayez.", + footer: 'Protégé par ALTCHA', + getAudioChallenge: "Obtenir un défi audio", + label: "Je ne suis pas un robot", + loading: "Chargement...", + reload: "Recharger", + verify: "Vérifier", + verificationRequired: "Vérification requise !", + verified: "Vérifié", + verifying: "Vérification en cours...", + waitAlert: "Vérification en cours... veuillez patienter.", + cancel: "Annuler", + enterCodeFromImage: "Pour continuer, veuillez entrer le code de l'image ci-dessous." + }; + globalThis.$altcha.i18n.set("fr-ca", i18n); +})); diff --git a/frontend/node_modules/altcha/dist/i18n/fr-fr.js b/frontend/node_modules/altcha/dist/i18n/fr-fr.js new file mode 100644 index 0000000..483d6be --- /dev/null +++ b/frontend/node_modules/altcha/dist/i18n/fr-fr.js @@ -0,0 +1,128 @@ +const noop = () => { +}; +function safe_not_equal(a, b) { + return a != a ? b == b : a !== b || a !== null && typeof a === "object" || typeof a === "function"; +} +function subscribe_to_store(store2, run, invalidate) { + if (store2 == null) { + run(void 0); + return noop; + } + const unsub = untrack( + () => store2.subscribe( + run, + // @ts-expect-error + invalidate + ) + ); + return unsub.unsubscribe ? () => unsub.unsubscribe() : unsub; +} +const subscriber_queue = []; +function writable(value, start = noop) { + let stop = null; + const subscribers = /* @__PURE__ */ new Set(); + function set(new_value) { + if (safe_not_equal(value, new_value)) { + value = new_value; + if (stop) { + const run_queue = !subscriber_queue.length; + for (const subscriber of subscribers) { + subscriber[1](); + subscriber_queue.push(subscriber, value); + } + if (run_queue) { + for (let i = 0; i < subscriber_queue.length; i += 2) { + subscriber_queue[i][0](subscriber_queue[i + 1]); + } + subscriber_queue.length = 0; + } + } + } + } + function update(fn) { + set(fn( + /** @type {T} */ + value + )); + } + function subscribe(run, invalidate = noop) { + const subscriber = [run, invalidate]; + subscribers.add(subscriber); + if (subscribers.size === 1) { + stop = start(set, update) || noop; + } + run( + /** @type {T} */ + value + ); + return () => { + subscribers.delete(subscriber); + if (subscribers.size === 0 && stop) { + stop(); + stop = null; + } + }; + } + return { set, update, subscribe }; +} +function get(store2) { + let value; + subscribe_to_store(store2, (_) => value = _)(); + return value; +} +let untracking = false; +function untrack(fn) { + var previous_untracking = untracking; + try { + untracking = true; + return fn(); + } finally { + untracking = previous_untracking; + } +} +function store(defaultValue) { + const scope = { + get: (name) => { + return get(scope.store)[name]; + }, + set: (name, value) => { + if (typeof name === "string") { + Object.assign(get(scope.store), { + [name]: value + }); + } else { + Object.assign(get(scope.store), name); + } + scope.store.set(get(scope.store)); + }, + store: writable(defaultValue) + }; + return scope; +} +globalThis.$altcha = globalThis.$altcha || { + algorithms: /* @__PURE__ */ new Map(), + defaults: store({}), + i18n: store({}), + instances: /* @__PURE__ */ new Set(), + plugins: /* @__PURE__ */ new Set() +}; +const i18n = { + ariaLinkLabel: "Altcha (site officiel)", + enterCode: "Entrez le code", + enterCodeAria: "Entrez le code que vous entendez. Appuyez sur Espace pour écouter l'audio.", + error: "Échec de la vérification. Essayez à nouveau plus tard.", + expired: "La vérification a expiré. Essayez à nouveau.", + footer: 'Protégé par ALTCHA', + getAudioChallenge: "Obtenir un défi audio", + label: "Je ne suis pas un robot", + loading: "Chargement...", + reload: "Recharger", + verify: "Vérifier", + verificationRequired: "Vérification requise !", + verified: "Vérifié", + verifying: "Vérification en cours...", + waitAlert: "Vérification en cours... veuillez patienter.", + cancel: "Annuler", + enterCodeFromImage: "Pour continuer, veuillez entrer le code de l'image ci-dessous." +}; +globalThis.$altcha.i18n.set("fr-fr", i18n); diff --git a/frontend/node_modules/altcha/dist/i18n/fr-fr.umd.cjs b/frontend/node_modules/altcha/dist/i18n/fr-fr.umd.cjs new file mode 100644 index 0000000..98a3de8 --- /dev/null +++ b/frontend/node_modules/altcha/dist/i18n/fr-fr.umd.cjs @@ -0,0 +1,133 @@ +(function(factory) { + typeof define === "function" && define.amd ? define(factory) : factory(); +})((function() { + "use strict"; + const noop = () => { + }; + function safe_not_equal(a, b) { + return a != a ? b == b : a !== b || a !== null && typeof a === "object" || typeof a === "function"; + } + function subscribe_to_store(store2, run, invalidate) { + if (store2 == null) { + run(void 0); + return noop; + } + const unsub = untrack( + () => store2.subscribe( + run, + // @ts-expect-error + invalidate + ) + ); + return unsub.unsubscribe ? () => unsub.unsubscribe() : unsub; + } + const subscriber_queue = []; + function writable(value, start = noop) { + let stop = null; + const subscribers = /* @__PURE__ */ new Set(); + function set(new_value) { + if (safe_not_equal(value, new_value)) { + value = new_value; + if (stop) { + const run_queue = !subscriber_queue.length; + for (const subscriber of subscribers) { + subscriber[1](); + subscriber_queue.push(subscriber, value); + } + if (run_queue) { + for (let i = 0; i < subscriber_queue.length; i += 2) { + subscriber_queue[i][0](subscriber_queue[i + 1]); + } + subscriber_queue.length = 0; + } + } + } + } + function update(fn) { + set(fn( + /** @type {T} */ + value + )); + } + function subscribe(run, invalidate = noop) { + const subscriber = [run, invalidate]; + subscribers.add(subscriber); + if (subscribers.size === 1) { + stop = start(set, update) || noop; + } + run( + /** @type {T} */ + value + ); + return () => { + subscribers.delete(subscriber); + if (subscribers.size === 0 && stop) { + stop(); + stop = null; + } + }; + } + return { set, update, subscribe }; + } + function get(store2) { + let value; + subscribe_to_store(store2, (_) => value = _)(); + return value; + } + let untracking = false; + function untrack(fn) { + var previous_untracking = untracking; + try { + untracking = true; + return fn(); + } finally { + untracking = previous_untracking; + } + } + function store(defaultValue) { + const scope = { + get: (name) => { + return get(scope.store)[name]; + }, + set: (name, value) => { + if (typeof name === "string") { + Object.assign(get(scope.store), { + [name]: value + }); + } else { + Object.assign(get(scope.store), name); + } + scope.store.set(get(scope.store)); + }, + store: writable(defaultValue) + }; + return scope; + } + globalThis.$altcha = globalThis.$altcha || { + algorithms: /* @__PURE__ */ new Map(), + defaults: store({}), + i18n: store({}), + instances: /* @__PURE__ */ new Set(), + plugins: /* @__PURE__ */ new Set() + }; + const i18n = { + ariaLinkLabel: "Altcha (site officiel)", + enterCode: "Entrez le code", + enterCodeAria: "Entrez le code que vous entendez. Appuyez sur Espace pour écouter l'audio.", + error: "Échec de la vérification. Essayez à nouveau plus tard.", + expired: "La vérification a expiré. Essayez à nouveau.", + footer: 'Protégé par ALTCHA', + getAudioChallenge: "Obtenir un défi audio", + label: "Je ne suis pas un robot", + loading: "Chargement...", + reload: "Recharger", + verify: "Vérifier", + verificationRequired: "Vérification requise !", + verified: "Vérifié", + verifying: "Vérification en cours...", + waitAlert: "Vérification en cours... veuillez patienter.", + cancel: "Annuler", + enterCodeFromImage: "Pour continuer, veuillez entrer le code de l'image ci-dessous." + }; + globalThis.$altcha.i18n.set("fr-fr", i18n); +})); diff --git a/frontend/node_modules/altcha/dist/i18n/fr.d.ts b/frontend/node_modules/altcha/dist/i18n/fr.d.ts new file mode 100644 index 0000000..5d74d7d --- /dev/null +++ b/frontend/node_modules/altcha/dist/i18n/fr.d.ts @@ -0,0 +1 @@ +declare module 'altcha/i18n/fr'; export {}; diff --git a/frontend/node_modules/altcha/dist/i18n/ga.d.ts b/frontend/node_modules/altcha/dist/i18n/ga.d.ts new file mode 100644 index 0000000..ecc9339 --- /dev/null +++ b/frontend/node_modules/altcha/dist/i18n/ga.d.ts @@ -0,0 +1 @@ +declare module 'altcha/i18n/ga'; export {}; diff --git a/frontend/node_modules/altcha/dist/i18n/ga.js b/frontend/node_modules/altcha/dist/i18n/ga.js new file mode 100644 index 0000000..cfc1351 --- /dev/null +++ b/frontend/node_modules/altcha/dist/i18n/ga.js @@ -0,0 +1,128 @@ +const noop = () => { +}; +function safe_not_equal(a, b) { + return a != a ? b == b : a !== b || a !== null && typeof a === "object" || typeof a === "function"; +} +function subscribe_to_store(store2, run, invalidate) { + if (store2 == null) { + run(void 0); + return noop; + } + const unsub = untrack( + () => store2.subscribe( + run, + // @ts-expect-error + invalidate + ) + ); + return unsub.unsubscribe ? () => unsub.unsubscribe() : unsub; +} +const subscriber_queue = []; +function writable(value, start = noop) { + let stop = null; + const subscribers = /* @__PURE__ */ new Set(); + function set(new_value) { + if (safe_not_equal(value, new_value)) { + value = new_value; + if (stop) { + const run_queue = !subscriber_queue.length; + for (const subscriber of subscribers) { + subscriber[1](); + subscriber_queue.push(subscriber, value); + } + if (run_queue) { + for (let i = 0; i < subscriber_queue.length; i += 2) { + subscriber_queue[i][0](subscriber_queue[i + 1]); + } + subscriber_queue.length = 0; + } + } + } + } + function update(fn) { + set(fn( + /** @type {T} */ + value + )); + } + function subscribe(run, invalidate = noop) { + const subscriber = [run, invalidate]; + subscribers.add(subscriber); + if (subscribers.size === 1) { + stop = start(set, update) || noop; + } + run( + /** @type {T} */ + value + ); + return () => { + subscribers.delete(subscriber); + if (subscribers.size === 0 && stop) { + stop(); + stop = null; + } + }; + } + return { set, update, subscribe }; +} +function get(store2) { + let value; + subscribe_to_store(store2, (_) => value = _)(); + return value; +} +let untracking = false; +function untrack(fn) { + var previous_untracking = untracking; + try { + untracking = true; + return fn(); + } finally { + untracking = previous_untracking; + } +} +function store(defaultValue) { + const scope = { + get: (name) => { + return get(scope.store)[name]; + }, + set: (name, value) => { + if (typeof name === "string") { + Object.assign(get(scope.store), { + [name]: value + }); + } else { + Object.assign(get(scope.store), name); + } + scope.store.set(get(scope.store)); + }, + store: writable(defaultValue) + }; + return scope; +} +globalThis.$altcha = globalThis.$altcha || { + algorithms: /* @__PURE__ */ new Map(), + defaults: store({}), + i18n: store({}), + instances: /* @__PURE__ */ new Set(), + plugins: /* @__PURE__ */ new Set() +}; +const i18n = { + ariaLinkLabel: "Altcha (láithreán gréasáin oifigiúil)", + enterCode: "Iontráil cód", + enterCodeAria: "Cuir isteach an cód a chloiseann tú. Brúigh Spás chun an fuaime a sheinm.", + error: "Theip ar an bhfíorú. Bain triail eile as níos déanaí.", + expired: "Tá an fíorú as feidhm. Bain triail eile as.", + footer: 'Cosanta ag ALTCHA', + getAudioChallenge: "Faigh dúshlán fuaime", + label: "Níl mé i mo róbat", + loading: "Á luchtú...", + reload: "Athluchtaigh", + verify: "Fíoraigh", + verificationRequired: "Fíorú riachtanach!", + verified: "Fíoraithe", + verifying: "Fíorú ar siúl...", + waitAlert: "Fíorú ar siúl... fan go fóill.", + cancel: "Cealaigh", + enterCodeFromImage: "Chun dul ar aghaidh, le do thoil cuir isteach an cód ón íomhá thíos." +}; +globalThis.$altcha.i18n.set("ga", i18n); diff --git a/frontend/node_modules/altcha/dist/i18n/ga.umd.cjs b/frontend/node_modules/altcha/dist/i18n/ga.umd.cjs new file mode 100644 index 0000000..fb5b236 --- /dev/null +++ b/frontend/node_modules/altcha/dist/i18n/ga.umd.cjs @@ -0,0 +1,133 @@ +(function(factory) { + typeof define === "function" && define.amd ? define(factory) : factory(); +})((function() { + "use strict"; + const noop = () => { + }; + function safe_not_equal(a, b) { + return a != a ? b == b : a !== b || a !== null && typeof a === "object" || typeof a === "function"; + } + function subscribe_to_store(store2, run, invalidate) { + if (store2 == null) { + run(void 0); + return noop; + } + const unsub = untrack( + () => store2.subscribe( + run, + // @ts-expect-error + invalidate + ) + ); + return unsub.unsubscribe ? () => unsub.unsubscribe() : unsub; + } + const subscriber_queue = []; + function writable(value, start = noop) { + let stop = null; + const subscribers = /* @__PURE__ */ new Set(); + function set(new_value) { + if (safe_not_equal(value, new_value)) { + value = new_value; + if (stop) { + const run_queue = !subscriber_queue.length; + for (const subscriber of subscribers) { + subscriber[1](); + subscriber_queue.push(subscriber, value); + } + if (run_queue) { + for (let i = 0; i < subscriber_queue.length; i += 2) { + subscriber_queue[i][0](subscriber_queue[i + 1]); + } + subscriber_queue.length = 0; + } + } + } + } + function update(fn) { + set(fn( + /** @type {T} */ + value + )); + } + function subscribe(run, invalidate = noop) { + const subscriber = [run, invalidate]; + subscribers.add(subscriber); + if (subscribers.size === 1) { + stop = start(set, update) || noop; + } + run( + /** @type {T} */ + value + ); + return () => { + subscribers.delete(subscriber); + if (subscribers.size === 0 && stop) { + stop(); + stop = null; + } + }; + } + return { set, update, subscribe }; + } + function get(store2) { + let value; + subscribe_to_store(store2, (_) => value = _)(); + return value; + } + let untracking = false; + function untrack(fn) { + var previous_untracking = untracking; + try { + untracking = true; + return fn(); + } finally { + untracking = previous_untracking; + } + } + function store(defaultValue) { + const scope = { + get: (name) => { + return get(scope.store)[name]; + }, + set: (name, value) => { + if (typeof name === "string") { + Object.assign(get(scope.store), { + [name]: value + }); + } else { + Object.assign(get(scope.store), name); + } + scope.store.set(get(scope.store)); + }, + store: writable(defaultValue) + }; + return scope; + } + globalThis.$altcha = globalThis.$altcha || { + algorithms: /* @__PURE__ */ new Map(), + defaults: store({}), + i18n: store({}), + instances: /* @__PURE__ */ new Set(), + plugins: /* @__PURE__ */ new Set() + }; + const i18n = { + ariaLinkLabel: "Altcha (láithreán gréasáin oifigiúil)", + enterCode: "Iontráil cód", + enterCodeAria: "Cuir isteach an cód a chloiseann tú. Brúigh Spás chun an fuaime a sheinm.", + error: "Theip ar an bhfíorú. Bain triail eile as níos déanaí.", + expired: "Tá an fíorú as feidhm. Bain triail eile as.", + footer: 'Cosanta ag ALTCHA', + getAudioChallenge: "Faigh dúshlán fuaime", + label: "Níl mé i mo róbat", + loading: "Á luchtú...", + reload: "Athluchtaigh", + verify: "Fíoraigh", + verificationRequired: "Fíorú riachtanach!", + verified: "Fíoraithe", + verifying: "Fíorú ar siúl...", + waitAlert: "Fíorú ar siúl... fan go fóill.", + cancel: "Cealaigh", + enterCodeFromImage: "Chun dul ar aghaidh, le do thoil cuir isteach an cód ón íomhá thíos." + }; + globalThis.$altcha.i18n.set("ga", i18n); +})); diff --git a/frontend/node_modules/altcha/dist/i18n/he.d.ts b/frontend/node_modules/altcha/dist/i18n/he.d.ts new file mode 100644 index 0000000..2dff48c --- /dev/null +++ b/frontend/node_modules/altcha/dist/i18n/he.d.ts @@ -0,0 +1 @@ +declare module 'altcha/i18n/he'; export {}; diff --git a/frontend/node_modules/altcha/dist/i18n/he.js b/frontend/node_modules/altcha/dist/i18n/he.js new file mode 100644 index 0000000..3a58f1d --- /dev/null +++ b/frontend/node_modules/altcha/dist/i18n/he.js @@ -0,0 +1,128 @@ +const noop = () => { +}; +function safe_not_equal(a, b) { + return a != a ? b == b : a !== b || a !== null && typeof a === "object" || typeof a === "function"; +} +function subscribe_to_store(store2, run, invalidate) { + if (store2 == null) { + run(void 0); + return noop; + } + const unsub = untrack( + () => store2.subscribe( + run, + // @ts-expect-error + invalidate + ) + ); + return unsub.unsubscribe ? () => unsub.unsubscribe() : unsub; +} +const subscriber_queue = []; +function writable(value, start = noop) { + let stop = null; + const subscribers = /* @__PURE__ */ new Set(); + function set(new_value) { + if (safe_not_equal(value, new_value)) { + value = new_value; + if (stop) { + const run_queue = !subscriber_queue.length; + for (const subscriber of subscribers) { + subscriber[1](); + subscriber_queue.push(subscriber, value); + } + if (run_queue) { + for (let i = 0; i < subscriber_queue.length; i += 2) { + subscriber_queue[i][0](subscriber_queue[i + 1]); + } + subscriber_queue.length = 0; + } + } + } + } + function update(fn) { + set(fn( + /** @type {T} */ + value + )); + } + function subscribe(run, invalidate = noop) { + const subscriber = [run, invalidate]; + subscribers.add(subscriber); + if (subscribers.size === 1) { + stop = start(set, update) || noop; + } + run( + /** @type {T} */ + value + ); + return () => { + subscribers.delete(subscriber); + if (subscribers.size === 0 && stop) { + stop(); + stop = null; + } + }; + } + return { set, update, subscribe }; +} +function get(store2) { + let value; + subscribe_to_store(store2, (_) => value = _)(); + return value; +} +let untracking = false; +function untrack(fn) { + var previous_untracking = untracking; + try { + untracking = true; + return fn(); + } finally { + untracking = previous_untracking; + } +} +function store(defaultValue) { + const scope = { + get: (name) => { + return get(scope.store)[name]; + }, + set: (name, value) => { + if (typeof name === "string") { + Object.assign(get(scope.store), { + [name]: value + }); + } else { + Object.assign(get(scope.store), name); + } + scope.store.set(get(scope.store)); + }, + store: writable(defaultValue) + }; + return scope; +} +globalThis.$altcha = globalThis.$altcha || { + algorithms: /* @__PURE__ */ new Map(), + defaults: store({}), + i18n: store({}), + instances: /* @__PURE__ */ new Set(), + plugins: /* @__PURE__ */ new Set() +}; +const i18n = { + ariaLinkLabel: "Altcha (אתר רשמי)", + enterCode: "הזן קוד", + enterCodeAria: "הזן את הקוד שאתה שומע. לחץ על רווח להפעלת השמע.", + error: "האימות נכשל. נסה שוב מאוחר יותר.", + expired: "תוקף האימות פג. נסה שוב.", + footer: 'מוגן על ידי ALTCHA', + getAudioChallenge: "קבל אתגר שמע", + label: "אני לא רובוט", + loading: "טוען...", + reload: "טען מחדש", + verify: "אמת", + verificationRequired: "נדרש אימות!", + verified: "אומת", + verifying: "מאמת...", + waitAlert: "מבצע אימות... אנא המתן.", + cancel: "ביטול", + enterCodeFromImage: "כדי להמשיך, אנא הזן את הקוד מהתמונה למטה." +}; +globalThis.$altcha.i18n.set("he", i18n); diff --git a/frontend/node_modules/altcha/dist/i18n/he.umd.cjs b/frontend/node_modules/altcha/dist/i18n/he.umd.cjs new file mode 100644 index 0000000..21444e4 --- /dev/null +++ b/frontend/node_modules/altcha/dist/i18n/he.umd.cjs @@ -0,0 +1,133 @@ +(function(factory) { + typeof define === "function" && define.amd ? define(factory) : factory(); +})((function() { + "use strict"; + const noop = () => { + }; + function safe_not_equal(a, b) { + return a != a ? b == b : a !== b || a !== null && typeof a === "object" || typeof a === "function"; + } + function subscribe_to_store(store2, run, invalidate) { + if (store2 == null) { + run(void 0); + return noop; + } + const unsub = untrack( + () => store2.subscribe( + run, + // @ts-expect-error + invalidate + ) + ); + return unsub.unsubscribe ? () => unsub.unsubscribe() : unsub; + } + const subscriber_queue = []; + function writable(value, start = noop) { + let stop = null; + const subscribers = /* @__PURE__ */ new Set(); + function set(new_value) { + if (safe_not_equal(value, new_value)) { + value = new_value; + if (stop) { + const run_queue = !subscriber_queue.length; + for (const subscriber of subscribers) { + subscriber[1](); + subscriber_queue.push(subscriber, value); + } + if (run_queue) { + for (let i = 0; i < subscriber_queue.length; i += 2) { + subscriber_queue[i][0](subscriber_queue[i + 1]); + } + subscriber_queue.length = 0; + } + } + } + } + function update(fn) { + set(fn( + /** @type {T} */ + value + )); + } + function subscribe(run, invalidate = noop) { + const subscriber = [run, invalidate]; + subscribers.add(subscriber); + if (subscribers.size === 1) { + stop = start(set, update) || noop; + } + run( + /** @type {T} */ + value + ); + return () => { + subscribers.delete(subscriber); + if (subscribers.size === 0 && stop) { + stop(); + stop = null; + } + }; + } + return { set, update, subscribe }; + } + function get(store2) { + let value; + subscribe_to_store(store2, (_) => value = _)(); + return value; + } + let untracking = false; + function untrack(fn) { + var previous_untracking = untracking; + try { + untracking = true; + return fn(); + } finally { + untracking = previous_untracking; + } + } + function store(defaultValue) { + const scope = { + get: (name) => { + return get(scope.store)[name]; + }, + set: (name, value) => { + if (typeof name === "string") { + Object.assign(get(scope.store), { + [name]: value + }); + } else { + Object.assign(get(scope.store), name); + } + scope.store.set(get(scope.store)); + }, + store: writable(defaultValue) + }; + return scope; + } + globalThis.$altcha = globalThis.$altcha || { + algorithms: /* @__PURE__ */ new Map(), + defaults: store({}), + i18n: store({}), + instances: /* @__PURE__ */ new Set(), + plugins: /* @__PURE__ */ new Set() + }; + const i18n = { + ariaLinkLabel: "Altcha (אתר רשמי)", + enterCode: "הזן קוד", + enterCodeAria: "הזן את הקוד שאתה שומע. לחץ על רווח להפעלת השמע.", + error: "האימות נכשל. נסה שוב מאוחר יותר.", + expired: "תוקף האימות פג. נסה שוב.", + footer: 'מוגן על ידי ALTCHA', + getAudioChallenge: "קבל אתגר שמע", + label: "אני לא רובוט", + loading: "טוען...", + reload: "טען מחדש", + verify: "אמת", + verificationRequired: "נדרש אימות!", + verified: "אומת", + verifying: "מאמת...", + waitAlert: "מבצע אימות... אנא המתן.", + cancel: "ביטול", + enterCodeFromImage: "כדי להמשיך, אנא הזן את הקוד מהתמונה למטה." + }; + globalThis.$altcha.i18n.set("he", i18n); +})); diff --git a/frontend/node_modules/altcha/dist/i18n/hi.d.ts b/frontend/node_modules/altcha/dist/i18n/hi.d.ts new file mode 100644 index 0000000..957ad89 --- /dev/null +++ b/frontend/node_modules/altcha/dist/i18n/hi.d.ts @@ -0,0 +1 @@ +declare module 'altcha/i18n/hi'; export {}; diff --git a/frontend/node_modules/altcha/dist/i18n/hi.js b/frontend/node_modules/altcha/dist/i18n/hi.js new file mode 100644 index 0000000..76448bd --- /dev/null +++ b/frontend/node_modules/altcha/dist/i18n/hi.js @@ -0,0 +1,128 @@ +const noop = () => { +}; +function safe_not_equal(a, b) { + return a != a ? b == b : a !== b || a !== null && typeof a === "object" || typeof a === "function"; +} +function subscribe_to_store(store2, run, invalidate) { + if (store2 == null) { + run(void 0); + return noop; + } + const unsub = untrack( + () => store2.subscribe( + run, + // @ts-expect-error + invalidate + ) + ); + return unsub.unsubscribe ? () => unsub.unsubscribe() : unsub; +} +const subscriber_queue = []; +function writable(value, start = noop) { + let stop = null; + const subscribers = /* @__PURE__ */ new Set(); + function set(new_value) { + if (safe_not_equal(value, new_value)) { + value = new_value; + if (stop) { + const run_queue = !subscriber_queue.length; + for (const subscriber of subscribers) { + subscriber[1](); + subscriber_queue.push(subscriber, value); + } + if (run_queue) { + for (let i = 0; i < subscriber_queue.length; i += 2) { + subscriber_queue[i][0](subscriber_queue[i + 1]); + } + subscriber_queue.length = 0; + } + } + } + } + function update(fn) { + set(fn( + /** @type {T} */ + value + )); + } + function subscribe(run, invalidate = noop) { + const subscriber = [run, invalidate]; + subscribers.add(subscriber); + if (subscribers.size === 1) { + stop = start(set, update) || noop; + } + run( + /** @type {T} */ + value + ); + return () => { + subscribers.delete(subscriber); + if (subscribers.size === 0 && stop) { + stop(); + stop = null; + } + }; + } + return { set, update, subscribe }; +} +function get(store2) { + let value; + subscribe_to_store(store2, (_) => value = _)(); + return value; +} +let untracking = false; +function untrack(fn) { + var previous_untracking = untracking; + try { + untracking = true; + return fn(); + } finally { + untracking = previous_untracking; + } +} +function store(defaultValue) { + const scope = { + get: (name) => { + return get(scope.store)[name]; + }, + set: (name, value) => { + if (typeof name === "string") { + Object.assign(get(scope.store), { + [name]: value + }); + } else { + Object.assign(get(scope.store), name); + } + scope.store.set(get(scope.store)); + }, + store: writable(defaultValue) + }; + return scope; +} +globalThis.$altcha = globalThis.$altcha || { + algorithms: /* @__PURE__ */ new Map(), + defaults: store({}), + i18n: store({}), + instances: /* @__PURE__ */ new Set(), + plugins: /* @__PURE__ */ new Set() +}; +const i18n = { + ariaLinkLabel: "Altcha (आधिकारिक वेबसाइट)", + enterCode: "कोड दर्ज करेंं", + enterCodeAria: "आप जो कोड सुनते हैं उसे दर्ज करें। ऑडियो चलाने के लिए स्पेस दबाएं।", + error: "सत्यापन विफल। कृपया बाद में फिर से प्रयास करें।", + expired: "सत्यापन समाप्त हो गया है। कृपया पुनः प्रयास करें।", + footer: 'द्वारा संरक्षित ALTCHA', + getAudioChallenge: "ऑडियो चुनौती प्राप्त करें", + label: "मैं रोबोट नहीं हूँ", + loading: "लोड हो रहा है...", + reload: "पुनः लोड करें", + verify: "सत्यापित करें", + verificationRequired: "सत्यापन आवश्यक है!", + verified: "सत्यापित", + verifying: "सत्यापित कर रहे हैं...", + waitAlert: "सत्यापित किया जा रहा है... कृपया प्रतीक्षा करें।", + cancel: "रद्द करें", + enterCodeFromImage: "आगे बढ़ने के लिए, कृपया नीचे दी गई छवि से कोड दर्ज करें।" +}; +globalThis.$altcha.i18n.set("hi", i18n); diff --git a/frontend/node_modules/altcha/dist/i18n/hi.umd.cjs b/frontend/node_modules/altcha/dist/i18n/hi.umd.cjs new file mode 100644 index 0000000..2c9699b --- /dev/null +++ b/frontend/node_modules/altcha/dist/i18n/hi.umd.cjs @@ -0,0 +1,133 @@ +(function(factory) { + typeof define === "function" && define.amd ? define(factory) : factory(); +})((function() { + "use strict"; + const noop = () => { + }; + function safe_not_equal(a, b) { + return a != a ? b == b : a !== b || a !== null && typeof a === "object" || typeof a === "function"; + } + function subscribe_to_store(store2, run, invalidate) { + if (store2 == null) { + run(void 0); + return noop; + } + const unsub = untrack( + () => store2.subscribe( + run, + // @ts-expect-error + invalidate + ) + ); + return unsub.unsubscribe ? () => unsub.unsubscribe() : unsub; + } + const subscriber_queue = []; + function writable(value, start = noop) { + let stop = null; + const subscribers = /* @__PURE__ */ new Set(); + function set(new_value) { + if (safe_not_equal(value, new_value)) { + value = new_value; + if (stop) { + const run_queue = !subscriber_queue.length; + for (const subscriber of subscribers) { + subscriber[1](); + subscriber_queue.push(subscriber, value); + } + if (run_queue) { + for (let i = 0; i < subscriber_queue.length; i += 2) { + subscriber_queue[i][0](subscriber_queue[i + 1]); + } + subscriber_queue.length = 0; + } + } + } + } + function update(fn) { + set(fn( + /** @type {T} */ + value + )); + } + function subscribe(run, invalidate = noop) { + const subscriber = [run, invalidate]; + subscribers.add(subscriber); + if (subscribers.size === 1) { + stop = start(set, update) || noop; + } + run( + /** @type {T} */ + value + ); + return () => { + subscribers.delete(subscriber); + if (subscribers.size === 0 && stop) { + stop(); + stop = null; + } + }; + } + return { set, update, subscribe }; + } + function get(store2) { + let value; + subscribe_to_store(store2, (_) => value = _)(); + return value; + } + let untracking = false; + function untrack(fn) { + var previous_untracking = untracking; + try { + untracking = true; + return fn(); + } finally { + untracking = previous_untracking; + } + } + function store(defaultValue) { + const scope = { + get: (name) => { + return get(scope.store)[name]; + }, + set: (name, value) => { + if (typeof name === "string") { + Object.assign(get(scope.store), { + [name]: value + }); + } else { + Object.assign(get(scope.store), name); + } + scope.store.set(get(scope.store)); + }, + store: writable(defaultValue) + }; + return scope; + } + globalThis.$altcha = globalThis.$altcha || { + algorithms: /* @__PURE__ */ new Map(), + defaults: store({}), + i18n: store({}), + instances: /* @__PURE__ */ new Set(), + plugins: /* @__PURE__ */ new Set() + }; + const i18n = { + ariaLinkLabel: "Altcha (आधिकारिक वेबसाइट)", + enterCode: "कोड दर्ज करेंं", + enterCodeAria: "आप जो कोड सुनते हैं उसे दर्ज करें। ऑडियो चलाने के लिए स्पेस दबाएं।", + error: "सत्यापन विफल। कृपया बाद में फिर से प्रयास करें।", + expired: "सत्यापन समाप्त हो गया है। कृपया पुनः प्रयास करें।", + footer: 'द्वारा संरक्षित ALTCHA', + getAudioChallenge: "ऑडियो चुनौती प्राप्त करें", + label: "मैं रोबोट नहीं हूँ", + loading: "लोड हो रहा है...", + reload: "पुनः लोड करें", + verify: "सत्यापित करें", + verificationRequired: "सत्यापन आवश्यक है!", + verified: "सत्यापित", + verifying: "सत्यापित कर रहे हैं...", + waitAlert: "सत्यापित किया जा रहा है... कृपया प्रतीक्षा करें।", + cancel: "रद्द करें", + enterCodeFromImage: "आगे बढ़ने के लिए, कृपया नीचे दी गई छवि से कोड दर्ज करें।" + }; + globalThis.$altcha.i18n.set("hi", i18n); +})); diff --git a/frontend/node_modules/altcha/dist/i18n/hk.d.ts b/frontend/node_modules/altcha/dist/i18n/hk.d.ts new file mode 100644 index 0000000..634b39b --- /dev/null +++ b/frontend/node_modules/altcha/dist/i18n/hk.d.ts @@ -0,0 +1 @@ +declare module 'altcha/i18n/hk'; export {}; diff --git a/frontend/node_modules/altcha/dist/i18n/hr.d.ts b/frontend/node_modules/altcha/dist/i18n/hr.d.ts new file mode 100644 index 0000000..3ea1287 --- /dev/null +++ b/frontend/node_modules/altcha/dist/i18n/hr.d.ts @@ -0,0 +1 @@ +declare module 'altcha/i18n/hr'; export {}; diff --git a/frontend/node_modules/altcha/dist/i18n/hr.js b/frontend/node_modules/altcha/dist/i18n/hr.js new file mode 100644 index 0000000..79658f4 --- /dev/null +++ b/frontend/node_modules/altcha/dist/i18n/hr.js @@ -0,0 +1,128 @@ +const noop = () => { +}; +function safe_not_equal(a, b) { + return a != a ? b == b : a !== b || a !== null && typeof a === "object" || typeof a === "function"; +} +function subscribe_to_store(store2, run, invalidate) { + if (store2 == null) { + run(void 0); + return noop; + } + const unsub = untrack( + () => store2.subscribe( + run, + // @ts-expect-error + invalidate + ) + ); + return unsub.unsubscribe ? () => unsub.unsubscribe() : unsub; +} +const subscriber_queue = []; +function writable(value, start = noop) { + let stop = null; + const subscribers = /* @__PURE__ */ new Set(); + function set(new_value) { + if (safe_not_equal(value, new_value)) { + value = new_value; + if (stop) { + const run_queue = !subscriber_queue.length; + for (const subscriber of subscribers) { + subscriber[1](); + subscriber_queue.push(subscriber, value); + } + if (run_queue) { + for (let i = 0; i < subscriber_queue.length; i += 2) { + subscriber_queue[i][0](subscriber_queue[i + 1]); + } + subscriber_queue.length = 0; + } + } + } + } + function update(fn) { + set(fn( + /** @type {T} */ + value + )); + } + function subscribe(run, invalidate = noop) { + const subscriber = [run, invalidate]; + subscribers.add(subscriber); + if (subscribers.size === 1) { + stop = start(set, update) || noop; + } + run( + /** @type {T} */ + value + ); + return () => { + subscribers.delete(subscriber); + if (subscribers.size === 0 && stop) { + stop(); + stop = null; + } + }; + } + return { set, update, subscribe }; +} +function get(store2) { + let value; + subscribe_to_store(store2, (_) => value = _)(); + return value; +} +let untracking = false; +function untrack(fn) { + var previous_untracking = untracking; + try { + untracking = true; + return fn(); + } finally { + untracking = previous_untracking; + } +} +function store(defaultValue) { + const scope = { + get: (name) => { + return get(scope.store)[name]; + }, + set: (name, value) => { + if (typeof name === "string") { + Object.assign(get(scope.store), { + [name]: value + }); + } else { + Object.assign(get(scope.store), name); + } + scope.store.set(get(scope.store)); + }, + store: writable(defaultValue) + }; + return scope; +} +globalThis.$altcha = globalThis.$altcha || { + algorithms: /* @__PURE__ */ new Map(), + defaults: store({}), + i18n: store({}), + instances: /* @__PURE__ */ new Set(), + plugins: /* @__PURE__ */ new Set() +}; +const i18n = { + ariaLinkLabel: "Altcha (službena web stranica)", + enterCode: "Unesite kod", + enterCodeAria: "Unesite kod koji čujete. Pritisnite razmaknicu za reprodukciju zvuka.", + error: "Provjera nije uspjela. Molimo pokušajte kasnije.", + expired: "Provjera je istekla. Molimo pokušajte ponovo.", + footer: 'Zaštićeno od strane ALTCHA', + getAudioChallenge: "Audio provjera", + label: "Ja nisam robot", + loading: "Učitavanje...", + reload: "Ponovno učitaj", + verify: "Provjeri", + verificationRequired: "Potrebna je provjera!", + verified: "Provjereno", + verifying: "Provjeravanje...", + waitAlert: "Provjera je u tijeku... molimo pričekajte.", + cancel: "Odustani", + enterCodeFromImage: "Za nastavak molimo unesite kod sa slike ispod." +}; +globalThis.$altcha.i18n.set("hr", i18n); diff --git a/frontend/node_modules/altcha/dist/i18n/hr.umd.cjs b/frontend/node_modules/altcha/dist/i18n/hr.umd.cjs new file mode 100644 index 0000000..e2cf289 --- /dev/null +++ b/frontend/node_modules/altcha/dist/i18n/hr.umd.cjs @@ -0,0 +1,133 @@ +(function(factory) { + typeof define === "function" && define.amd ? define(factory) : factory(); +})((function() { + "use strict"; + const noop = () => { + }; + function safe_not_equal(a, b) { + return a != a ? b == b : a !== b || a !== null && typeof a === "object" || typeof a === "function"; + } + function subscribe_to_store(store2, run, invalidate) { + if (store2 == null) { + run(void 0); + return noop; + } + const unsub = untrack( + () => store2.subscribe( + run, + // @ts-expect-error + invalidate + ) + ); + return unsub.unsubscribe ? () => unsub.unsubscribe() : unsub; + } + const subscriber_queue = []; + function writable(value, start = noop) { + let stop = null; + const subscribers = /* @__PURE__ */ new Set(); + function set(new_value) { + if (safe_not_equal(value, new_value)) { + value = new_value; + if (stop) { + const run_queue = !subscriber_queue.length; + for (const subscriber of subscribers) { + subscriber[1](); + subscriber_queue.push(subscriber, value); + } + if (run_queue) { + for (let i = 0; i < subscriber_queue.length; i += 2) { + subscriber_queue[i][0](subscriber_queue[i + 1]); + } + subscriber_queue.length = 0; + } + } + } + } + function update(fn) { + set(fn( + /** @type {T} */ + value + )); + } + function subscribe(run, invalidate = noop) { + const subscriber = [run, invalidate]; + subscribers.add(subscriber); + if (subscribers.size === 1) { + stop = start(set, update) || noop; + } + run( + /** @type {T} */ + value + ); + return () => { + subscribers.delete(subscriber); + if (subscribers.size === 0 && stop) { + stop(); + stop = null; + } + }; + } + return { set, update, subscribe }; + } + function get(store2) { + let value; + subscribe_to_store(store2, (_) => value = _)(); + return value; + } + let untracking = false; + function untrack(fn) { + var previous_untracking = untracking; + try { + untracking = true; + return fn(); + } finally { + untracking = previous_untracking; + } + } + function store(defaultValue) { + const scope = { + get: (name) => { + return get(scope.store)[name]; + }, + set: (name, value) => { + if (typeof name === "string") { + Object.assign(get(scope.store), { + [name]: value + }); + } else { + Object.assign(get(scope.store), name); + } + scope.store.set(get(scope.store)); + }, + store: writable(defaultValue) + }; + return scope; + } + globalThis.$altcha = globalThis.$altcha || { + algorithms: /* @__PURE__ */ new Map(), + defaults: store({}), + i18n: store({}), + instances: /* @__PURE__ */ new Set(), + plugins: /* @__PURE__ */ new Set() + }; + const i18n = { + ariaLinkLabel: "Altcha (službena web stranica)", + enterCode: "Unesite kod", + enterCodeAria: "Unesite kod koji čujete. Pritisnite razmaknicu za reprodukciju zvuka.", + error: "Provjera nije uspjela. Molimo pokušajte kasnije.", + expired: "Provjera je istekla. Molimo pokušajte ponovo.", + footer: 'Zaštićeno od strane ALTCHA', + getAudioChallenge: "Audio provjera", + label: "Ja nisam robot", + loading: "Učitavanje...", + reload: "Ponovno učitaj", + verify: "Provjeri", + verificationRequired: "Potrebna je provjera!", + verified: "Provjereno", + verifying: "Provjeravanje...", + waitAlert: "Provjera je u tijeku... molimo pričekajte.", + cancel: "Odustani", + enterCodeFromImage: "Za nastavak molimo unesite kod sa slike ispod." + }; + globalThis.$altcha.i18n.set("hr", i18n); +})); diff --git a/frontend/node_modules/altcha/dist/i18n/hu.d.ts b/frontend/node_modules/altcha/dist/i18n/hu.d.ts new file mode 100644 index 0000000..c891c1d --- /dev/null +++ b/frontend/node_modules/altcha/dist/i18n/hu.d.ts @@ -0,0 +1 @@ +declare module 'altcha/i18n/hu'; export {}; diff --git a/frontend/node_modules/altcha/dist/i18n/hu.js b/frontend/node_modules/altcha/dist/i18n/hu.js new file mode 100644 index 0000000..07b734e --- /dev/null +++ b/frontend/node_modules/altcha/dist/i18n/hu.js @@ -0,0 +1,128 @@ +const noop = () => { +}; +function safe_not_equal(a, b) { + return a != a ? b == b : a !== b || a !== null && typeof a === "object" || typeof a === "function"; +} +function subscribe_to_store(store2, run, invalidate) { + if (store2 == null) { + run(void 0); + return noop; + } + const unsub = untrack( + () => store2.subscribe( + run, + // @ts-expect-error + invalidate + ) + ); + return unsub.unsubscribe ? () => unsub.unsubscribe() : unsub; +} +const subscriber_queue = []; +function writable(value, start = noop) { + let stop = null; + const subscribers = /* @__PURE__ */ new Set(); + function set(new_value) { + if (safe_not_equal(value, new_value)) { + value = new_value; + if (stop) { + const run_queue = !subscriber_queue.length; + for (const subscriber of subscribers) { + subscriber[1](); + subscriber_queue.push(subscriber, value); + } + if (run_queue) { + for (let i = 0; i < subscriber_queue.length; i += 2) { + subscriber_queue[i][0](subscriber_queue[i + 1]); + } + subscriber_queue.length = 0; + } + } + } + } + function update(fn) { + set(fn( + /** @type {T} */ + value + )); + } + function subscribe(run, invalidate = noop) { + const subscriber = [run, invalidate]; + subscribers.add(subscriber); + if (subscribers.size === 1) { + stop = start(set, update) || noop; + } + run( + /** @type {T} */ + value + ); + return () => { + subscribers.delete(subscriber); + if (subscribers.size === 0 && stop) { + stop(); + stop = null; + } + }; + } + return { set, update, subscribe }; +} +function get(store2) { + let value; + subscribe_to_store(store2, (_) => value = _)(); + return value; +} +let untracking = false; +function untrack(fn) { + var previous_untracking = untracking; + try { + untracking = true; + return fn(); + } finally { + untracking = previous_untracking; + } +} +function store(defaultValue) { + const scope = { + get: (name) => { + return get(scope.store)[name]; + }, + set: (name, value) => { + if (typeof name === "string") { + Object.assign(get(scope.store), { + [name]: value + }); + } else { + Object.assign(get(scope.store), name); + } + scope.store.set(get(scope.store)); + }, + store: writable(defaultValue) + }; + return scope; +} +globalThis.$altcha = globalThis.$altcha || { + algorithms: /* @__PURE__ */ new Map(), + defaults: store({}), + i18n: store({}), + instances: /* @__PURE__ */ new Set(), + plugins: /* @__PURE__ */ new Set() +}; +const i18n = { + ariaLinkLabel: "Altcha (hivatalos weboldal)", + enterCode: "Írja be a kódot", + enterCodeAria: "Írja be a hallott kódot. Nyomja meg a Szóköz billentyűt a hang lejátszásához.", + error: "A hitelesítés nem sikerült. Próbáld meg később újra.", + expired: "A hitelesítés lejárt. Próbáld újra.", + footer: 'Védve a következő által: ALTCHA', + getAudioChallenge: "Hangalapú kihívás kérése", + label: "Nem vagyok robot", + loading: "Betöltés...", + reload: "Újratöltés", + verify: "Ellenőrzés", + verificationRequired: "Ellenőrzés szükséges!", + verified: "Ellenőrizve", + verifying: "Ellenőrzés folyamatban...", + waitAlert: "Ellenőrzés folyamatban... kérlek várj.", + cancel: "Mégse", + enterCodeFromImage: "A folytatáshoz, kérjük, adja meg az alábbi kép kódját." +}; +globalThis.$altcha.i18n.set("hu", i18n); diff --git a/frontend/node_modules/altcha/dist/i18n/hu.umd.cjs b/frontend/node_modules/altcha/dist/i18n/hu.umd.cjs new file mode 100644 index 0000000..7697268 --- /dev/null +++ b/frontend/node_modules/altcha/dist/i18n/hu.umd.cjs @@ -0,0 +1,133 @@ +(function(factory) { + typeof define === "function" && define.amd ? define(factory) : factory(); +})((function() { + "use strict"; + const noop = () => { + }; + function safe_not_equal(a, b) { + return a != a ? b == b : a !== b || a !== null && typeof a === "object" || typeof a === "function"; + } + function subscribe_to_store(store2, run, invalidate) { + if (store2 == null) { + run(void 0); + return noop; + } + const unsub = untrack( + () => store2.subscribe( + run, + // @ts-expect-error + invalidate + ) + ); + return unsub.unsubscribe ? () => unsub.unsubscribe() : unsub; + } + const subscriber_queue = []; + function writable(value, start = noop) { + let stop = null; + const subscribers = /* @__PURE__ */ new Set(); + function set(new_value) { + if (safe_not_equal(value, new_value)) { + value = new_value; + if (stop) { + const run_queue = !subscriber_queue.length; + for (const subscriber of subscribers) { + subscriber[1](); + subscriber_queue.push(subscriber, value); + } + if (run_queue) { + for (let i = 0; i < subscriber_queue.length; i += 2) { + subscriber_queue[i][0](subscriber_queue[i + 1]); + } + subscriber_queue.length = 0; + } + } + } + } + function update(fn) { + set(fn( + /** @type {T} */ + value + )); + } + function subscribe(run, invalidate = noop) { + const subscriber = [run, invalidate]; + subscribers.add(subscriber); + if (subscribers.size === 1) { + stop = start(set, update) || noop; + } + run( + /** @type {T} */ + value + ); + return () => { + subscribers.delete(subscriber); + if (subscribers.size === 0 && stop) { + stop(); + stop = null; + } + }; + } + return { set, update, subscribe }; + } + function get(store2) { + let value; + subscribe_to_store(store2, (_) => value = _)(); + return value; + } + let untracking = false; + function untrack(fn) { + var previous_untracking = untracking; + try { + untracking = true; + return fn(); + } finally { + untracking = previous_untracking; + } + } + function store(defaultValue) { + const scope = { + get: (name) => { + return get(scope.store)[name]; + }, + set: (name, value) => { + if (typeof name === "string") { + Object.assign(get(scope.store), { + [name]: value + }); + } else { + Object.assign(get(scope.store), name); + } + scope.store.set(get(scope.store)); + }, + store: writable(defaultValue) + }; + return scope; + } + globalThis.$altcha = globalThis.$altcha || { + algorithms: /* @__PURE__ */ new Map(), + defaults: store({}), + i18n: store({}), + instances: /* @__PURE__ */ new Set(), + plugins: /* @__PURE__ */ new Set() + }; + const i18n = { + ariaLinkLabel: "Altcha (hivatalos weboldal)", + enterCode: "Írja be a kódot", + enterCodeAria: "Írja be a hallott kódot. Nyomja meg a Szóköz billentyűt a hang lejátszásához.", + error: "A hitelesítés nem sikerült. Próbáld meg később újra.", + expired: "A hitelesítés lejárt. Próbáld újra.", + footer: 'Védve a következő által: ALTCHA', + getAudioChallenge: "Hangalapú kihívás kérése", + label: "Nem vagyok robot", + loading: "Betöltés...", + reload: "Újratöltés", + verify: "Ellenőrzés", + verificationRequired: "Ellenőrzés szükséges!", + verified: "Ellenőrizve", + verifying: "Ellenőrzés folyamatban...", + waitAlert: "Ellenőrzés folyamatban... kérlek várj.", + cancel: "Mégse", + enterCodeFromImage: "A folytatáshoz, kérjük, adja meg az alábbi kép kódját." + }; + globalThis.$altcha.i18n.set("hu", i18n); +})); diff --git a/frontend/node_modules/altcha/dist/i18n/hy.d.ts b/frontend/node_modules/altcha/dist/i18n/hy.d.ts new file mode 100644 index 0000000..f63bb1e --- /dev/null +++ b/frontend/node_modules/altcha/dist/i18n/hy.d.ts @@ -0,0 +1 @@ +declare module 'altcha/i18n/hy'; export {}; diff --git a/frontend/node_modules/altcha/dist/i18n/hy.js b/frontend/node_modules/altcha/dist/i18n/hy.js new file mode 100644 index 0000000..faa2820 --- /dev/null +++ b/frontend/node_modules/altcha/dist/i18n/hy.js @@ -0,0 +1,128 @@ +const noop = () => { +}; +function safe_not_equal(a, b) { + return a != a ? b == b : a !== b || a !== null && typeof a === "object" || typeof a === "function"; +} +function subscribe_to_store(store2, run, invalidate) { + if (store2 == null) { + run(void 0); + return noop; + } + const unsub = untrack( + () => store2.subscribe( + run, + // @ts-expect-error + invalidate + ) + ); + return unsub.unsubscribe ? () => unsub.unsubscribe() : unsub; +} +const subscriber_queue = []; +function writable(value, start = noop) { + let stop = null; + const subscribers = /* @__PURE__ */ new Set(); + function set(new_value) { + if (safe_not_equal(value, new_value)) { + value = new_value; + if (stop) { + const run_queue = !subscriber_queue.length; + for (const subscriber of subscribers) { + subscriber[1](); + subscriber_queue.push(subscriber, value); + } + if (run_queue) { + for (let i = 0; i < subscriber_queue.length; i += 2) { + subscriber_queue[i][0](subscriber_queue[i + 1]); + } + subscriber_queue.length = 0; + } + } + } + } + function update(fn) { + set(fn( + /** @type {T} */ + value + )); + } + function subscribe(run, invalidate = noop) { + const subscriber = [run, invalidate]; + subscribers.add(subscriber); + if (subscribers.size === 1) { + stop = start(set, update) || noop; + } + run( + /** @type {T} */ + value + ); + return () => { + subscribers.delete(subscriber); + if (subscribers.size === 0 && stop) { + stop(); + stop = null; + } + }; + } + return { set, update, subscribe }; +} +function get(store2) { + let value; + subscribe_to_store(store2, (_) => value = _)(); + return value; +} +let untracking = false; +function untrack(fn) { + var previous_untracking = untracking; + try { + untracking = true; + return fn(); + } finally { + untracking = previous_untracking; + } +} +function store(defaultValue) { + const scope = { + get: (name) => { + return get(scope.store)[name]; + }, + set: (name, value) => { + if (typeof name === "string") { + Object.assign(get(scope.store), { + [name]: value + }); + } else { + Object.assign(get(scope.store), name); + } + scope.store.set(get(scope.store)); + }, + store: writable(defaultValue) + }; + return scope; +} +globalThis.$altcha = globalThis.$altcha || { + algorithms: /* @__PURE__ */ new Map(), + defaults: store({}), + i18n: store({}), + instances: /* @__PURE__ */ new Set(), + plugins: /* @__PURE__ */ new Set() +}; +const i18n = { + ariaLinkLabel: "Altcha (պաշտոնական կայք)", + enterCode: "Մուտքագրեք կոդը", + enterCodeAria: "Մուտքագրեք այն կոդը, որը լսում եք։ Ձայնը նվագելու համար սեղմեք բացատ (Space):", + error: "Հաստատումը ձախողվեց։ Փորձեք ավելի ուշ։", + expired: "Հաստատման ժամկետը լրացել է։ Փորձեք կրկին։", + footer: 'Պաշտպանված է ALTCHA-ի կողմից', + getAudioChallenge: "Ստանալ ձայնային առաջադրանք", + label: "Ես ռոբոտ չեմ", + loading: "Բեռնվում է...", + reload: "Թարմացնել", + verify: "Հաստատել", + verificationRequired: "Պահանջվում է հաստատում։", + verified: "Հաստատված է", + verifying: "Հաստատվում է...", + waitAlert: "Հաստատվում է... խնդրում ենք սպասել։", + cancel: "Չեղարկել", + enterCodeFromImage: "Շարունակելու համար, խնդրում ենք մուտագրել ստորև պատկերից վերցված կոդը:" +}; +globalThis.$altcha.i18n.set("hy", i18n); diff --git a/frontend/node_modules/altcha/dist/i18n/hy.umd.cjs b/frontend/node_modules/altcha/dist/i18n/hy.umd.cjs new file mode 100644 index 0000000..c643f84 --- /dev/null +++ b/frontend/node_modules/altcha/dist/i18n/hy.umd.cjs @@ -0,0 +1,133 @@ +(function(factory) { + typeof define === "function" && define.amd ? define(factory) : factory(); +})((function() { + "use strict"; + const noop = () => { + }; + function safe_not_equal(a, b) { + return a != a ? b == b : a !== b || a !== null && typeof a === "object" || typeof a === "function"; + } + function subscribe_to_store(store2, run, invalidate) { + if (store2 == null) { + run(void 0); + return noop; + } + const unsub = untrack( + () => store2.subscribe( + run, + // @ts-expect-error + invalidate + ) + ); + return unsub.unsubscribe ? () => unsub.unsubscribe() : unsub; + } + const subscriber_queue = []; + function writable(value, start = noop) { + let stop = null; + const subscribers = /* @__PURE__ */ new Set(); + function set(new_value) { + if (safe_not_equal(value, new_value)) { + value = new_value; + if (stop) { + const run_queue = !subscriber_queue.length; + for (const subscriber of subscribers) { + subscriber[1](); + subscriber_queue.push(subscriber, value); + } + if (run_queue) { + for (let i = 0; i < subscriber_queue.length; i += 2) { + subscriber_queue[i][0](subscriber_queue[i + 1]); + } + subscriber_queue.length = 0; + } + } + } + } + function update(fn) { + set(fn( + /** @type {T} */ + value + )); + } + function subscribe(run, invalidate = noop) { + const subscriber = [run, invalidate]; + subscribers.add(subscriber); + if (subscribers.size === 1) { + stop = start(set, update) || noop; + } + run( + /** @type {T} */ + value + ); + return () => { + subscribers.delete(subscriber); + if (subscribers.size === 0 && stop) { + stop(); + stop = null; + } + }; + } + return { set, update, subscribe }; + } + function get(store2) { + let value; + subscribe_to_store(store2, (_) => value = _)(); + return value; + } + let untracking = false; + function untrack(fn) { + var previous_untracking = untracking; + try { + untracking = true; + return fn(); + } finally { + untracking = previous_untracking; + } + } + function store(defaultValue) { + const scope = { + get: (name) => { + return get(scope.store)[name]; + }, + set: (name, value) => { + if (typeof name === "string") { + Object.assign(get(scope.store), { + [name]: value + }); + } else { + Object.assign(get(scope.store), name); + } + scope.store.set(get(scope.store)); + }, + store: writable(defaultValue) + }; + return scope; + } + globalThis.$altcha = globalThis.$altcha || { + algorithms: /* @__PURE__ */ new Map(), + defaults: store({}), + i18n: store({}), + instances: /* @__PURE__ */ new Set(), + plugins: /* @__PURE__ */ new Set() + }; + const i18n = { + ariaLinkLabel: "Altcha (պաշտոնական կայք)", + enterCode: "Մուտքագրեք կոդը", + enterCodeAria: "Մուտքագրեք այն կոդը, որը լսում եք։ Ձայնը նվագելու համար սեղմեք բացատ (Space):", + error: "Հաստատումը ձախողվեց։ Փորձեք ավելի ուշ։", + expired: "Հաստատման ժամկետը լրացել է։ Փորձեք կրկին։", + footer: 'Պաշտպանված է ALTCHA-ի կողմից', + getAudioChallenge: "Ստանալ ձայնային առաջադրանք", + label: "Ես ռոբոտ չեմ", + loading: "Բեռնվում է...", + reload: "Թարմացնել", + verify: "Հաստատել", + verificationRequired: "Պահանջվում է հաստատում։", + verified: "Հաստատված է", + verifying: "Հաստատվում է...", + waitAlert: "Հաստատվում է... խնդրում ենք սպասել։", + cancel: "Չեղարկել", + enterCodeFromImage: "Շարունակելու համար, խնդրում ենք մուտագրել ստորև պատկերից վերցված կոդը:" + }; + globalThis.$altcha.i18n.set("hy", i18n); +})); diff --git a/frontend/node_modules/altcha/dist/i18n/id.d.ts b/frontend/node_modules/altcha/dist/i18n/id.d.ts new file mode 100644 index 0000000..febd857 --- /dev/null +++ b/frontend/node_modules/altcha/dist/i18n/id.d.ts @@ -0,0 +1 @@ +declare module 'altcha/i18n/id'; export {}; diff --git a/frontend/node_modules/altcha/dist/i18n/id.js b/frontend/node_modules/altcha/dist/i18n/id.js new file mode 100644 index 0000000..9fd088e --- /dev/null +++ b/frontend/node_modules/altcha/dist/i18n/id.js @@ -0,0 +1,128 @@ +const noop = () => { +}; +function safe_not_equal(a, b) { + return a != a ? b == b : a !== b || a !== null && typeof a === "object" || typeof a === "function"; +} +function subscribe_to_store(store2, run, invalidate) { + if (store2 == null) { + run(void 0); + return noop; + } + const unsub = untrack( + () => store2.subscribe( + run, + // @ts-expect-error + invalidate + ) + ); + return unsub.unsubscribe ? () => unsub.unsubscribe() : unsub; +} +const subscriber_queue = []; +function writable(value, start = noop) { + let stop = null; + const subscribers = /* @__PURE__ */ new Set(); + function set(new_value) { + if (safe_not_equal(value, new_value)) { + value = new_value; + if (stop) { + const run_queue = !subscriber_queue.length; + for (const subscriber of subscribers) { + subscriber[1](); + subscriber_queue.push(subscriber, value); + } + if (run_queue) { + for (let i = 0; i < subscriber_queue.length; i += 2) { + subscriber_queue[i][0](subscriber_queue[i + 1]); + } + subscriber_queue.length = 0; + } + } + } + } + function update(fn) { + set(fn( + /** @type {T} */ + value + )); + } + function subscribe(run, invalidate = noop) { + const subscriber = [run, invalidate]; + subscribers.add(subscriber); + if (subscribers.size === 1) { + stop = start(set, update) || noop; + } + run( + /** @type {T} */ + value + ); + return () => { + subscribers.delete(subscriber); + if (subscribers.size === 0 && stop) { + stop(); + stop = null; + } + }; + } + return { set, update, subscribe }; +} +function get(store2) { + let value; + subscribe_to_store(store2, (_) => value = _)(); + return value; +} +let untracking = false; +function untrack(fn) { + var previous_untracking = untracking; + try { + untracking = true; + return fn(); + } finally { + untracking = previous_untracking; + } +} +function store(defaultValue) { + const scope = { + get: (name) => { + return get(scope.store)[name]; + }, + set: (name, value) => { + if (typeof name === "string") { + Object.assign(get(scope.store), { + [name]: value + }); + } else { + Object.assign(get(scope.store), name); + } + scope.store.set(get(scope.store)); + }, + store: writable(defaultValue) + }; + return scope; +} +globalThis.$altcha = globalThis.$altcha || { + algorithms: /* @__PURE__ */ new Map(), + defaults: store({}), + i18n: store({}), + instances: /* @__PURE__ */ new Set(), + plugins: /* @__PURE__ */ new Set() +}; +const i18n = { + ariaLinkLabel: "Altcha (situs web resmi)", + enterCode: "Masukkan kode", + enterCodeAria: "Masukkan kode yang Anda dengar. Tekan Spasi untuk memutar audio.", + error: "Verifikasi gagal. Coba lagi nanti.", + expired: "Verifikasi telah kedaluwarsa. Coba lagi.", + footer: 'Dilindungi oleh ALTCHA', + getAudioChallenge: "Dapatkan tantangan audio", + label: "Saya bukan robot", + loading: "Memuat...", + reload: "Muat ulang", + verify: "Verifikasi", + verificationRequired: "Verifikasi diperlukan!", + verified: "Terverifikasi", + verifying: "Memverifikasi...", + waitAlert: "Memverifikasi... harap tunggu.", + cancel: "Batal", + enterCodeFromImage: "Untuk melanjutkan, silakan masukkan kode dari gambar di bawah ini." +}; +globalThis.$altcha.i18n.set("id", i18n); diff --git a/frontend/node_modules/altcha/dist/i18n/id.umd.cjs b/frontend/node_modules/altcha/dist/i18n/id.umd.cjs new file mode 100644 index 0000000..a4955e6 --- /dev/null +++ b/frontend/node_modules/altcha/dist/i18n/id.umd.cjs @@ -0,0 +1,133 @@ +(function(factory) { + typeof define === "function" && define.amd ? define(factory) : factory(); +})((function() { + "use strict"; + const noop = () => { + }; + function safe_not_equal(a, b) { + return a != a ? b == b : a !== b || a !== null && typeof a === "object" || typeof a === "function"; + } + function subscribe_to_store(store2, run, invalidate) { + if (store2 == null) { + run(void 0); + return noop; + } + const unsub = untrack( + () => store2.subscribe( + run, + // @ts-expect-error + invalidate + ) + ); + return unsub.unsubscribe ? () => unsub.unsubscribe() : unsub; + } + const subscriber_queue = []; + function writable(value, start = noop) { + let stop = null; + const subscribers = /* @__PURE__ */ new Set(); + function set(new_value) { + if (safe_not_equal(value, new_value)) { + value = new_value; + if (stop) { + const run_queue = !subscriber_queue.length; + for (const subscriber of subscribers) { + subscriber[1](); + subscriber_queue.push(subscriber, value); + } + if (run_queue) { + for (let i = 0; i < subscriber_queue.length; i += 2) { + subscriber_queue[i][0](subscriber_queue[i + 1]); + } + subscriber_queue.length = 0; + } + } + } + } + function update(fn) { + set(fn( + /** @type {T} */ + value + )); + } + function subscribe(run, invalidate = noop) { + const subscriber = [run, invalidate]; + subscribers.add(subscriber); + if (subscribers.size === 1) { + stop = start(set, update) || noop; + } + run( + /** @type {T} */ + value + ); + return () => { + subscribers.delete(subscriber); + if (subscribers.size === 0 && stop) { + stop(); + stop = null; + } + }; + } + return { set, update, subscribe }; + } + function get(store2) { + let value; + subscribe_to_store(store2, (_) => value = _)(); + return value; + } + let untracking = false; + function untrack(fn) { + var previous_untracking = untracking; + try { + untracking = true; + return fn(); + } finally { + untracking = previous_untracking; + } + } + function store(defaultValue) { + const scope = { + get: (name) => { + return get(scope.store)[name]; + }, + set: (name, value) => { + if (typeof name === "string") { + Object.assign(get(scope.store), { + [name]: value + }); + } else { + Object.assign(get(scope.store), name); + } + scope.store.set(get(scope.store)); + }, + store: writable(defaultValue) + }; + return scope; + } + globalThis.$altcha = globalThis.$altcha || { + algorithms: /* @__PURE__ */ new Map(), + defaults: store({}), + i18n: store({}), + instances: /* @__PURE__ */ new Set(), + plugins: /* @__PURE__ */ new Set() + }; + const i18n = { + ariaLinkLabel: "Altcha (situs web resmi)", + enterCode: "Masukkan kode", + enterCodeAria: "Masukkan kode yang Anda dengar. Tekan Spasi untuk memutar audio.", + error: "Verifikasi gagal. Coba lagi nanti.", + expired: "Verifikasi telah kedaluwarsa. Coba lagi.", + footer: 'Dilindungi oleh ALTCHA', + getAudioChallenge: "Dapatkan tantangan audio", + label: "Saya bukan robot", + loading: "Memuat...", + reload: "Muat ulang", + verify: "Verifikasi", + verificationRequired: "Verifikasi diperlukan!", + verified: "Terverifikasi", + verifying: "Memverifikasi...", + waitAlert: "Memverifikasi... harap tunggu.", + cancel: "Batal", + enterCodeFromImage: "Untuk melanjutkan, silakan masukkan kode dari gambar di bawah ini." + }; + globalThis.$altcha.i18n.set("id", i18n); +})); diff --git a/frontend/node_modules/altcha/dist/i18n/is.d.ts b/frontend/node_modules/altcha/dist/i18n/is.d.ts new file mode 100644 index 0000000..a2db9a6 --- /dev/null +++ b/frontend/node_modules/altcha/dist/i18n/is.d.ts @@ -0,0 +1 @@ +declare module 'altcha/i18n/is'; export {}; diff --git a/frontend/node_modules/altcha/dist/i18n/is.js b/frontend/node_modules/altcha/dist/i18n/is.js new file mode 100644 index 0000000..c759a6d --- /dev/null +++ b/frontend/node_modules/altcha/dist/i18n/is.js @@ -0,0 +1,128 @@ +const noop = () => { +}; +function safe_not_equal(a, b) { + return a != a ? b == b : a !== b || a !== null && typeof a === "object" || typeof a === "function"; +} +function subscribe_to_store(store2, run, invalidate) { + if (store2 == null) { + run(void 0); + return noop; + } + const unsub = untrack( + () => store2.subscribe( + run, + // @ts-expect-error + invalidate + ) + ); + return unsub.unsubscribe ? () => unsub.unsubscribe() : unsub; +} +const subscriber_queue = []; +function writable(value, start = noop) { + let stop = null; + const subscribers = /* @__PURE__ */ new Set(); + function set(new_value) { + if (safe_not_equal(value, new_value)) { + value = new_value; + if (stop) { + const run_queue = !subscriber_queue.length; + for (const subscriber of subscribers) { + subscriber[1](); + subscriber_queue.push(subscriber, value); + } + if (run_queue) { + for (let i = 0; i < subscriber_queue.length; i += 2) { + subscriber_queue[i][0](subscriber_queue[i + 1]); + } + subscriber_queue.length = 0; + } + } + } + } + function update(fn) { + set(fn( + /** @type {T} */ + value + )); + } + function subscribe(run, invalidate = noop) { + const subscriber = [run, invalidate]; + subscribers.add(subscriber); + if (subscribers.size === 1) { + stop = start(set, update) || noop; + } + run( + /** @type {T} */ + value + ); + return () => { + subscribers.delete(subscriber); + if (subscribers.size === 0 && stop) { + stop(); + stop = null; + } + }; + } + return { set, update, subscribe }; +} +function get(store2) { + let value; + subscribe_to_store(store2, (_) => value = _)(); + return value; +} +let untracking = false; +function untrack(fn) { + var previous_untracking = untracking; + try { + untracking = true; + return fn(); + } finally { + untracking = previous_untracking; + } +} +function store(defaultValue) { + const scope = { + get: (name) => { + return get(scope.store)[name]; + }, + set: (name, value) => { + if (typeof name === "string") { + Object.assign(get(scope.store), { + [name]: value + }); + } else { + Object.assign(get(scope.store), name); + } + scope.store.set(get(scope.store)); + }, + store: writable(defaultValue) + }; + return scope; +} +globalThis.$altcha = globalThis.$altcha || { + algorithms: /* @__PURE__ */ new Map(), + defaults: store({}), + i18n: store({}), + instances: /* @__PURE__ */ new Set(), + plugins: /* @__PURE__ */ new Set() +}; +const i18n = { + ariaLinkLabel: "Altcha (opinber vefsíða)", + enterCode: "Sláðu inn kóða", + enterCodeAria: "Sláðu inn kóðann sem þú heyrir. Ýttu á Space til að spila hljóðið.", + error: "Staðfesting mistókst. Reyndu aftur síðar.", + expired: "Staðfesting er útrunnin. Reyndu aftur.", + footer: 'Verndað af ALTCHA', + getAudioChallenge: "Fá hljóðáskorun", + label: "Ég er ekki robot", + loading: "Hleður...", + reload: "Hleð aftur", + verify: "Staðfesta", + verificationRequired: "Staðfesting er nauðsynleg!", + verified: "Staðfest", + verifying: "Að staðfesta...", + waitAlert: "Að staðfesta... vinsamlegast bíða.", + cancel: "Hætta við", + enterCodeFromImage: "Til að halda áfram, vinsamlegast sláðu inn kóðann af myndinni hér að neðan." +}; +globalThis.$altcha.i18n.set("is", i18n); diff --git a/frontend/node_modules/altcha/dist/i18n/is.umd.cjs b/frontend/node_modules/altcha/dist/i18n/is.umd.cjs new file mode 100644 index 0000000..35ab89d --- /dev/null +++ b/frontend/node_modules/altcha/dist/i18n/is.umd.cjs @@ -0,0 +1,133 @@ +(function(factory) { + typeof define === "function" && define.amd ? define(factory) : factory(); +})((function() { + "use strict"; + const noop = () => { + }; + function safe_not_equal(a, b) { + return a != a ? b == b : a !== b || a !== null && typeof a === "object" || typeof a === "function"; + } + function subscribe_to_store(store2, run, invalidate) { + if (store2 == null) { + run(void 0); + return noop; + } + const unsub = untrack( + () => store2.subscribe( + run, + // @ts-expect-error + invalidate + ) + ); + return unsub.unsubscribe ? () => unsub.unsubscribe() : unsub; + } + const subscriber_queue = []; + function writable(value, start = noop) { + let stop = null; + const subscribers = /* @__PURE__ */ new Set(); + function set(new_value) { + if (safe_not_equal(value, new_value)) { + value = new_value; + if (stop) { + const run_queue = !subscriber_queue.length; + for (const subscriber of subscribers) { + subscriber[1](); + subscriber_queue.push(subscriber, value); + } + if (run_queue) { + for (let i = 0; i < subscriber_queue.length; i += 2) { + subscriber_queue[i][0](subscriber_queue[i + 1]); + } + subscriber_queue.length = 0; + } + } + } + } + function update(fn) { + set(fn( + /** @type {T} */ + value + )); + } + function subscribe(run, invalidate = noop) { + const subscriber = [run, invalidate]; + subscribers.add(subscriber); + if (subscribers.size === 1) { + stop = start(set, update) || noop; + } + run( + /** @type {T} */ + value + ); + return () => { + subscribers.delete(subscriber); + if (subscribers.size === 0 && stop) { + stop(); + stop = null; + } + }; + } + return { set, update, subscribe }; + } + function get(store2) { + let value; + subscribe_to_store(store2, (_) => value = _)(); + return value; + } + let untracking = false; + function untrack(fn) { + var previous_untracking = untracking; + try { + untracking = true; + return fn(); + } finally { + untracking = previous_untracking; + } + } + function store(defaultValue) { + const scope = { + get: (name) => { + return get(scope.store)[name]; + }, + set: (name, value) => { + if (typeof name === "string") { + Object.assign(get(scope.store), { + [name]: value + }); + } else { + Object.assign(get(scope.store), name); + } + scope.store.set(get(scope.store)); + }, + store: writable(defaultValue) + }; + return scope; + } + globalThis.$altcha = globalThis.$altcha || { + algorithms: /* @__PURE__ */ new Map(), + defaults: store({}), + i18n: store({}), + instances: /* @__PURE__ */ new Set(), + plugins: /* @__PURE__ */ new Set() + }; + const i18n = { + ariaLinkLabel: "Altcha (opinber vefsíða)", + enterCode: "Sláðu inn kóða", + enterCodeAria: "Sláðu inn kóðann sem þú heyrir. Ýttu á Space til að spila hljóðið.", + error: "Staðfesting mistókst. Reyndu aftur síðar.", + expired: "Staðfesting er útrunnin. Reyndu aftur.", + footer: 'Verndað af ALTCHA', + getAudioChallenge: "Fá hljóðáskorun", + label: "Ég er ekki robot", + loading: "Hleður...", + reload: "Hleð aftur", + verify: "Staðfesta", + verificationRequired: "Staðfesting er nauðsynleg!", + verified: "Staðfest", + verifying: "Að staðfesta...", + waitAlert: "Að staðfesta... vinsamlegast bíða.", + cancel: "Hætta við", + enterCodeFromImage: "Til að halda áfram, vinsamlegast sláðu inn kóðann af myndinni hér að neðan." + }; + globalThis.$altcha.i18n.set("is", i18n); +})); diff --git a/frontend/node_modules/altcha/dist/i18n/it.d.ts b/frontend/node_modules/altcha/dist/i18n/it.d.ts new file mode 100644 index 0000000..0a640f7 --- /dev/null +++ b/frontend/node_modules/altcha/dist/i18n/it.d.ts @@ -0,0 +1 @@ +declare module 'altcha/i18n/it'; export {}; diff --git a/frontend/node_modules/altcha/dist/i18n/it.js b/frontend/node_modules/altcha/dist/i18n/it.js new file mode 100644 index 0000000..f5c5eda --- /dev/null +++ b/frontend/node_modules/altcha/dist/i18n/it.js @@ -0,0 +1,128 @@ +const noop = () => { +}; +function safe_not_equal(a, b) { + return a != a ? b == b : a !== b || a !== null && typeof a === "object" || typeof a === "function"; +} +function subscribe_to_store(store2, run, invalidate) { + if (store2 == null) { + run(void 0); + return noop; + } + const unsub = untrack( + () => store2.subscribe( + run, + // @ts-expect-error + invalidate + ) + ); + return unsub.unsubscribe ? () => unsub.unsubscribe() : unsub; +} +const subscriber_queue = []; +function writable(value, start = noop) { + let stop = null; + const subscribers = /* @__PURE__ */ new Set(); + function set(new_value) { + if (safe_not_equal(value, new_value)) { + value = new_value; + if (stop) { + const run_queue = !subscriber_queue.length; + for (const subscriber of subscribers) { + subscriber[1](); + subscriber_queue.push(subscriber, value); + } + if (run_queue) { + for (let i = 0; i < subscriber_queue.length; i += 2) { + subscriber_queue[i][0](subscriber_queue[i + 1]); + } + subscriber_queue.length = 0; + } + } + } + } + function update(fn) { + set(fn( + /** @type {T} */ + value + )); + } + function subscribe(run, invalidate = noop) { + const subscriber = [run, invalidate]; + subscribers.add(subscriber); + if (subscribers.size === 1) { + stop = start(set, update) || noop; + } + run( + /** @type {T} */ + value + ); + return () => { + subscribers.delete(subscriber); + if (subscribers.size === 0 && stop) { + stop(); + stop = null; + } + }; + } + return { set, update, subscribe }; +} +function get(store2) { + let value; + subscribe_to_store(store2, (_) => value = _)(); + return value; +} +let untracking = false; +function untrack(fn) { + var previous_untracking = untracking; + try { + untracking = true; + return fn(); + } finally { + untracking = previous_untracking; + } +} +function store(defaultValue) { + const scope = { + get: (name) => { + return get(scope.store)[name]; + }, + set: (name, value) => { + if (typeof name === "string") { + Object.assign(get(scope.store), { + [name]: value + }); + } else { + Object.assign(get(scope.store), name); + } + scope.store.set(get(scope.store)); + }, + store: writable(defaultValue) + }; + return scope; +} +globalThis.$altcha = globalThis.$altcha || { + algorithms: /* @__PURE__ */ new Map(), + defaults: store({}), + i18n: store({}), + instances: /* @__PURE__ */ new Set(), + plugins: /* @__PURE__ */ new Set() +}; +const i18n = { + ariaLinkLabel: "Altcha (sito ufficiale)", + enterCode: "Inserisci il codice", + enterCodeAria: "Inserisci il codice che senti. Premi Spazio per riprodurre l'audio.", + error: "Verifica fallita. Riprova più tardi.", + expired: "Verifica scaduta. Riprova.", + footer: 'Protetto da ALTCHA', + getAudioChallenge: "Ottieni una sfida audio", + label: "Non sono un robot", + loading: "Caricamento...", + reload: "Ricarica", + verify: "Verifica", + verificationRequired: "Verifica richiesta!", + verified: "Verificato", + verifying: "Verifica in corso...", + waitAlert: "Verifica in corso... attendere.", + cancel: "Annulla", + enterCodeFromImage: "Per procedere, inserisci il codice dall'immagine sottostante." +}; +globalThis.$altcha.i18n.set("it", i18n); diff --git a/frontend/node_modules/altcha/dist/i18n/it.umd.cjs b/frontend/node_modules/altcha/dist/i18n/it.umd.cjs new file mode 100644 index 0000000..ee84074 --- /dev/null +++ b/frontend/node_modules/altcha/dist/i18n/it.umd.cjs @@ -0,0 +1,133 @@ +(function(factory) { + typeof define === "function" && define.amd ? define(factory) : factory(); +})((function() { + "use strict"; + const noop = () => { + }; + function safe_not_equal(a, b) { + return a != a ? b == b : a !== b || a !== null && typeof a === "object" || typeof a === "function"; + } + function subscribe_to_store(store2, run, invalidate) { + if (store2 == null) { + run(void 0); + return noop; + } + const unsub = untrack( + () => store2.subscribe( + run, + // @ts-expect-error + invalidate + ) + ); + return unsub.unsubscribe ? () => unsub.unsubscribe() : unsub; + } + const subscriber_queue = []; + function writable(value, start = noop) { + let stop = null; + const subscribers = /* @__PURE__ */ new Set(); + function set(new_value) { + if (safe_not_equal(value, new_value)) { + value = new_value; + if (stop) { + const run_queue = !subscriber_queue.length; + for (const subscriber of subscribers) { + subscriber[1](); + subscriber_queue.push(subscriber, value); + } + if (run_queue) { + for (let i = 0; i < subscriber_queue.length; i += 2) { + subscriber_queue[i][0](subscriber_queue[i + 1]); + } + subscriber_queue.length = 0; + } + } + } + } + function update(fn) { + set(fn( + /** @type {T} */ + value + )); + } + function subscribe(run, invalidate = noop) { + const subscriber = [run, invalidate]; + subscribers.add(subscriber); + if (subscribers.size === 1) { + stop = start(set, update) || noop; + } + run( + /** @type {T} */ + value + ); + return () => { + subscribers.delete(subscriber); + if (subscribers.size === 0 && stop) { + stop(); + stop = null; + } + }; + } + return { set, update, subscribe }; + } + function get(store2) { + let value; + subscribe_to_store(store2, (_) => value = _)(); + return value; + } + let untracking = false; + function untrack(fn) { + var previous_untracking = untracking; + try { + untracking = true; + return fn(); + } finally { + untracking = previous_untracking; + } + } + function store(defaultValue) { + const scope = { + get: (name) => { + return get(scope.store)[name]; + }, + set: (name, value) => { + if (typeof name === "string") { + Object.assign(get(scope.store), { + [name]: value + }); + } else { + Object.assign(get(scope.store), name); + } + scope.store.set(get(scope.store)); + }, + store: writable(defaultValue) + }; + return scope; + } + globalThis.$altcha = globalThis.$altcha || { + algorithms: /* @__PURE__ */ new Map(), + defaults: store({}), + i18n: store({}), + instances: /* @__PURE__ */ new Set(), + plugins: /* @__PURE__ */ new Set() + }; + const i18n = { + ariaLinkLabel: "Altcha (sito ufficiale)", + enterCode: "Inserisci il codice", + enterCodeAria: "Inserisci il codice che senti. Premi Spazio per riprodurre l'audio.", + error: "Verifica fallita. Riprova più tardi.", + expired: "Verifica scaduta. Riprova.", + footer: 'Protetto da ALTCHA', + getAudioChallenge: "Ottieni una sfida audio", + label: "Non sono un robot", + loading: "Caricamento...", + reload: "Ricarica", + verify: "Verifica", + verificationRequired: "Verifica richiesta!", + verified: "Verificato", + verifying: "Verifica in corso...", + waitAlert: "Verifica in corso... attendere.", + cancel: "Annulla", + enterCodeFromImage: "Per procedere, inserisci il codice dall'immagine sottostante." + }; + globalThis.$altcha.i18n.set("it", i18n); +})); diff --git a/frontend/node_modules/altcha/dist/i18n/ja.d.ts b/frontend/node_modules/altcha/dist/i18n/ja.d.ts new file mode 100644 index 0000000..c5dbdad --- /dev/null +++ b/frontend/node_modules/altcha/dist/i18n/ja.d.ts @@ -0,0 +1 @@ +declare module 'altcha/i18n/ja'; export {}; diff --git a/frontend/node_modules/altcha/dist/i18n/ja.js b/frontend/node_modules/altcha/dist/i18n/ja.js new file mode 100644 index 0000000..dd59e9f --- /dev/null +++ b/frontend/node_modules/altcha/dist/i18n/ja.js @@ -0,0 +1,128 @@ +const noop = () => { +}; +function safe_not_equal(a, b) { + return a != a ? b == b : a !== b || a !== null && typeof a === "object" || typeof a === "function"; +} +function subscribe_to_store(store2, run, invalidate) { + if (store2 == null) { + run(void 0); + return noop; + } + const unsub = untrack( + () => store2.subscribe( + run, + // @ts-expect-error + invalidate + ) + ); + return unsub.unsubscribe ? () => unsub.unsubscribe() : unsub; +} +const subscriber_queue = []; +function writable(value, start = noop) { + let stop = null; + const subscribers = /* @__PURE__ */ new Set(); + function set(new_value) { + if (safe_not_equal(value, new_value)) { + value = new_value; + if (stop) { + const run_queue = !subscriber_queue.length; + for (const subscriber of subscribers) { + subscriber[1](); + subscriber_queue.push(subscriber, value); + } + if (run_queue) { + for (let i = 0; i < subscriber_queue.length; i += 2) { + subscriber_queue[i][0](subscriber_queue[i + 1]); + } + subscriber_queue.length = 0; + } + } + } + } + function update(fn) { + set(fn( + /** @type {T} */ + value + )); + } + function subscribe(run, invalidate = noop) { + const subscriber = [run, invalidate]; + subscribers.add(subscriber); + if (subscribers.size === 1) { + stop = start(set, update) || noop; + } + run( + /** @type {T} */ + value + ); + return () => { + subscribers.delete(subscriber); + if (subscribers.size === 0 && stop) { + stop(); + stop = null; + } + }; + } + return { set, update, subscribe }; +} +function get(store2) { + let value; + subscribe_to_store(store2, (_) => value = _)(); + return value; +} +let untracking = false; +function untrack(fn) { + var previous_untracking = untracking; + try { + untracking = true; + return fn(); + } finally { + untracking = previous_untracking; + } +} +function store(defaultValue) { + const scope = { + get: (name) => { + return get(scope.store)[name]; + }, + set: (name, value) => { + if (typeof name === "string") { + Object.assign(get(scope.store), { + [name]: value + }); + } else { + Object.assign(get(scope.store), name); + } + scope.store.set(get(scope.store)); + }, + store: writable(defaultValue) + }; + return scope; +} +globalThis.$altcha = globalThis.$altcha || { + algorithms: /* @__PURE__ */ new Map(), + defaults: store({}), + i18n: store({}), + instances: /* @__PURE__ */ new Set(), + plugins: /* @__PURE__ */ new Set() +}; +const i18n = { + ariaLinkLabel: "Altcha (公式ウェブサイト)", + enterCode: "コードを入力", + enterCodeAria: "聞こえるコードを入力してください。スペースキーを押して音声を再生します。", + error: "認証に失敗しました。後でもう一度試してください。", + expired: "認証が期限切れです。再試行してください。", + footer: '保護されています ALTCHA', + getAudioChallenge: "音声チャレンジを取得", + label: "私はロボットではありません", + loading: "読み込み中...", + reload: "再読み込み", + verify: "確認", + verificationRequired: "認証が必要です!", + verified: "確認済み", + verifying: "確認中...", + waitAlert: "確認中...少々お待ちください。", + cancel: "キャンセル", + enterCodeFromImage: "続行するには、以下の画像からコードを入力してください。" +}; +globalThis.$altcha.i18n.set("ja", i18n); diff --git a/frontend/node_modules/altcha/dist/i18n/ja.umd.cjs b/frontend/node_modules/altcha/dist/i18n/ja.umd.cjs new file mode 100644 index 0000000..9ad66b9 --- /dev/null +++ b/frontend/node_modules/altcha/dist/i18n/ja.umd.cjs @@ -0,0 +1,133 @@ +(function(factory) { + typeof define === "function" && define.amd ? define(factory) : factory(); +})((function() { + "use strict"; + const noop = () => { + }; + function safe_not_equal(a, b) { + return a != a ? b == b : a !== b || a !== null && typeof a === "object" || typeof a === "function"; + } + function subscribe_to_store(store2, run, invalidate) { + if (store2 == null) { + run(void 0); + return noop; + } + const unsub = untrack( + () => store2.subscribe( + run, + // @ts-expect-error + invalidate + ) + ); + return unsub.unsubscribe ? () => unsub.unsubscribe() : unsub; + } + const subscriber_queue = []; + function writable(value, start = noop) { + let stop = null; + const subscribers = /* @__PURE__ */ new Set(); + function set(new_value) { + if (safe_not_equal(value, new_value)) { + value = new_value; + if (stop) { + const run_queue = !subscriber_queue.length; + for (const subscriber of subscribers) { + subscriber[1](); + subscriber_queue.push(subscriber, value); + } + if (run_queue) { + for (let i = 0; i < subscriber_queue.length; i += 2) { + subscriber_queue[i][0](subscriber_queue[i + 1]); + } + subscriber_queue.length = 0; + } + } + } + } + function update(fn) { + set(fn( + /** @type {T} */ + value + )); + } + function subscribe(run, invalidate = noop) { + const subscriber = [run, invalidate]; + subscribers.add(subscriber); + if (subscribers.size === 1) { + stop = start(set, update) || noop; + } + run( + /** @type {T} */ + value + ); + return () => { + subscribers.delete(subscriber); + if (subscribers.size === 0 && stop) { + stop(); + stop = null; + } + }; + } + return { set, update, subscribe }; + } + function get(store2) { + let value; + subscribe_to_store(store2, (_) => value = _)(); + return value; + } + let untracking = false; + function untrack(fn) { + var previous_untracking = untracking; + try { + untracking = true; + return fn(); + } finally { + untracking = previous_untracking; + } + } + function store(defaultValue) { + const scope = { + get: (name) => { + return get(scope.store)[name]; + }, + set: (name, value) => { + if (typeof name === "string") { + Object.assign(get(scope.store), { + [name]: value + }); + } else { + Object.assign(get(scope.store), name); + } + scope.store.set(get(scope.store)); + }, + store: writable(defaultValue) + }; + return scope; + } + globalThis.$altcha = globalThis.$altcha || { + algorithms: /* @__PURE__ */ new Map(), + defaults: store({}), + i18n: store({}), + instances: /* @__PURE__ */ new Set(), + plugins: /* @__PURE__ */ new Set() + }; + const i18n = { + ariaLinkLabel: "Altcha (公式ウェブサイト)", + enterCode: "コードを入力", + enterCodeAria: "聞こえるコードを入力してください。スペースキーを押して音声を再生します。", + error: "認証に失敗しました。後でもう一度試してください。", + expired: "認証が期限切れです。再試行してください。", + footer: '保護されています ALTCHA', + getAudioChallenge: "音声チャレンジを取得", + label: "私はロボットではありません", + loading: "読み込み中...", + reload: "再読み込み", + verify: "確認", + verificationRequired: "認証が必要です!", + verified: "確認済み", + verifying: "確認中...", + waitAlert: "確認中...少々お待ちください。", + cancel: "キャンセル", + enterCodeFromImage: "続行するには、以下の画像からコードを入力してください。" + }; + globalThis.$altcha.i18n.set("ja", i18n); +})); diff --git a/frontend/node_modules/altcha/dist/i18n/ka.d.ts b/frontend/node_modules/altcha/dist/i18n/ka.d.ts new file mode 100644 index 0000000..2e2fcea --- /dev/null +++ b/frontend/node_modules/altcha/dist/i18n/ka.d.ts @@ -0,0 +1 @@ +declare module 'altcha/i18n/ka'; export {}; diff --git a/frontend/node_modules/altcha/dist/i18n/ka.js b/frontend/node_modules/altcha/dist/i18n/ka.js new file mode 100644 index 0000000..96f5089 --- /dev/null +++ b/frontend/node_modules/altcha/dist/i18n/ka.js @@ -0,0 +1,128 @@ +const noop = () => { +}; +function safe_not_equal(a, b) { + return a != a ? b == b : a !== b || a !== null && typeof a === "object" || typeof a === "function"; +} +function subscribe_to_store(store2, run, invalidate) { + if (store2 == null) { + run(void 0); + return noop; + } + const unsub = untrack( + () => store2.subscribe( + run, + // @ts-expect-error + invalidate + ) + ); + return unsub.unsubscribe ? () => unsub.unsubscribe() : unsub; +} +const subscriber_queue = []; +function writable(value, start = noop) { + let stop = null; + const subscribers = /* @__PURE__ */ new Set(); + function set(new_value) { + if (safe_not_equal(value, new_value)) { + value = new_value; + if (stop) { + const run_queue = !subscriber_queue.length; + for (const subscriber of subscribers) { + subscriber[1](); + subscriber_queue.push(subscriber, value); + } + if (run_queue) { + for (let i = 0; i < subscriber_queue.length; i += 2) { + subscriber_queue[i][0](subscriber_queue[i + 1]); + } + subscriber_queue.length = 0; + } + } + } + } + function update(fn) { + set(fn( + /** @type {T} */ + value + )); + } + function subscribe(run, invalidate = noop) { + const subscriber = [run, invalidate]; + subscribers.add(subscriber); + if (subscribers.size === 1) { + stop = start(set, update) || noop; + } + run( + /** @type {T} */ + value + ); + return () => { + subscribers.delete(subscriber); + if (subscribers.size === 0 && stop) { + stop(); + stop = null; + } + }; + } + return { set, update, subscribe }; +} +function get(store2) { + let value; + subscribe_to_store(store2, (_) => value = _)(); + return value; +} +let untracking = false; +function untrack(fn) { + var previous_untracking = untracking; + try { + untracking = true; + return fn(); + } finally { + untracking = previous_untracking; + } +} +function store(defaultValue) { + const scope = { + get: (name) => { + return get(scope.store)[name]; + }, + set: (name, value) => { + if (typeof name === "string") { + Object.assign(get(scope.store), { + [name]: value + }); + } else { + Object.assign(get(scope.store), name); + } + scope.store.set(get(scope.store)); + }, + store: writable(defaultValue) + }; + return scope; +} +globalThis.$altcha = globalThis.$altcha || { + algorithms: /* @__PURE__ */ new Map(), + defaults: store({}), + i18n: store({}), + instances: /* @__PURE__ */ new Set(), + plugins: /* @__PURE__ */ new Set() +}; +const i18n = { + ariaLinkLabel: "Altcha (ოფიციალური ვებსაიტი)", + enterCode: "შეიყვანეთ კოდი", + enterCodeAria: "შეიყვანეთ კოდი, რომელსაც გაიგონებთ. აუდიოს მოსასმენად დააჭირეთ Space-ს.", + error: "ვერიფიკაცია ჩაიშალა. სცადეთ მოგვიანებით.", + expired: "ვერიფიკაციის ვადა გავიდა. სცადეთ ხელახლა.", + footer: 'დაცულია ALTCHA-ით', + getAudioChallenge: "მიიღეთ აუდიო გამოწვევა", + label: "მე არ ვარ რობოტი", + loading: "იტვირთება...", + reload: "განახლება", + verify: "დადასტურება", + verificationRequired: "საჭიროა ვერიფიკაცია!", + verified: "დადასტურებულია", + verifying: "დადასტურება მიმდინარეობს...", + waitAlert: "დადასტურება მიმდინარეობს... გთხოვთ, დაიცადეთ.", + cancel: "გაუქმება", + enterCodeFromImage: "გაგრძელების მიზნით, გთხოვთ შეიყვანოთ კოდი ქვემოთ მოცემული სურათიდან." +}; +globalThis.$altcha.i18n.set("ka", i18n); diff --git a/frontend/node_modules/altcha/dist/i18n/ka.umd.cjs b/frontend/node_modules/altcha/dist/i18n/ka.umd.cjs new file mode 100644 index 0000000..8c873bd --- /dev/null +++ b/frontend/node_modules/altcha/dist/i18n/ka.umd.cjs @@ -0,0 +1,133 @@ +(function(factory) { + typeof define === "function" && define.amd ? define(factory) : factory(); +})((function() { + "use strict"; + const noop = () => { + }; + function safe_not_equal(a, b) { + return a != a ? b == b : a !== b || a !== null && typeof a === "object" || typeof a === "function"; + } + function subscribe_to_store(store2, run, invalidate) { + if (store2 == null) { + run(void 0); + return noop; + } + const unsub = untrack( + () => store2.subscribe( + run, + // @ts-expect-error + invalidate + ) + ); + return unsub.unsubscribe ? () => unsub.unsubscribe() : unsub; + } + const subscriber_queue = []; + function writable(value, start = noop) { + let stop = null; + const subscribers = /* @__PURE__ */ new Set(); + function set(new_value) { + if (safe_not_equal(value, new_value)) { + value = new_value; + if (stop) { + const run_queue = !subscriber_queue.length; + for (const subscriber of subscribers) { + subscriber[1](); + subscriber_queue.push(subscriber, value); + } + if (run_queue) { + for (let i = 0; i < subscriber_queue.length; i += 2) { + subscriber_queue[i][0](subscriber_queue[i + 1]); + } + subscriber_queue.length = 0; + } + } + } + } + function update(fn) { + set(fn( + /** @type {T} */ + value + )); + } + function subscribe(run, invalidate = noop) { + const subscriber = [run, invalidate]; + subscribers.add(subscriber); + if (subscribers.size === 1) { + stop = start(set, update) || noop; + } + run( + /** @type {T} */ + value + ); + return () => { + subscribers.delete(subscriber); + if (subscribers.size === 0 && stop) { + stop(); + stop = null; + } + }; + } + return { set, update, subscribe }; + } + function get(store2) { + let value; + subscribe_to_store(store2, (_) => value = _)(); + return value; + } + let untracking = false; + function untrack(fn) { + var previous_untracking = untracking; + try { + untracking = true; + return fn(); + } finally { + untracking = previous_untracking; + } + } + function store(defaultValue) { + const scope = { + get: (name) => { + return get(scope.store)[name]; + }, + set: (name, value) => { + if (typeof name === "string") { + Object.assign(get(scope.store), { + [name]: value + }); + } else { + Object.assign(get(scope.store), name); + } + scope.store.set(get(scope.store)); + }, + store: writable(defaultValue) + }; + return scope; + } + globalThis.$altcha = globalThis.$altcha || { + algorithms: /* @__PURE__ */ new Map(), + defaults: store({}), + i18n: store({}), + instances: /* @__PURE__ */ new Set(), + plugins: /* @__PURE__ */ new Set() + }; + const i18n = { + ariaLinkLabel: "Altcha (ოფიციალური ვებსაიტი)", + enterCode: "შეიყვანეთ კოდი", + enterCodeAria: "შეიყვანეთ კოდი, რომელსაც გაიგონებთ. აუდიოს მოსასმენად დააჭირეთ Space-ს.", + error: "ვერიფიკაცია ჩაიშალა. სცადეთ მოგვიანებით.", + expired: "ვერიფიკაციის ვადა გავიდა. სცადეთ ხელახლა.", + footer: 'დაცულია ALTCHA-ით', + getAudioChallenge: "მიიღეთ აუდიო გამოწვევა", + label: "მე არ ვარ რობოტი", + loading: "იტვირთება...", + reload: "განახლება", + verify: "დადასტურება", + verificationRequired: "საჭიროა ვერიფიკაცია!", + verified: "დადასტურებულია", + verifying: "დადასტურება მიმდინარეობს...", + waitAlert: "დადასტურება მიმდინარეობს... გთხოვთ, დაიცადეთ.", + cancel: "გაუქმება", + enterCodeFromImage: "გაგრძელების მიზნით, გთხოვთ შეიყვანოთ კოდი ქვემოთ მოცემული სურათიდან." + }; + globalThis.$altcha.i18n.set("ka", i18n); +})); diff --git a/frontend/node_modules/altcha/dist/i18n/kk.d.ts b/frontend/node_modules/altcha/dist/i18n/kk.d.ts new file mode 100644 index 0000000..8e7d25c --- /dev/null +++ b/frontend/node_modules/altcha/dist/i18n/kk.d.ts @@ -0,0 +1 @@ +declare module 'altcha/i18n/kk'; export {}; diff --git a/frontend/node_modules/altcha/dist/i18n/kk.js b/frontend/node_modules/altcha/dist/i18n/kk.js new file mode 100644 index 0000000..b077e61 --- /dev/null +++ b/frontend/node_modules/altcha/dist/i18n/kk.js @@ -0,0 +1,128 @@ +const noop = () => { +}; +function safe_not_equal(a, b) { + return a != a ? b == b : a !== b || a !== null && typeof a === "object" || typeof a === "function"; +} +function subscribe_to_store(store2, run, invalidate) { + if (store2 == null) { + run(void 0); + return noop; + } + const unsub = untrack( + () => store2.subscribe( + run, + // @ts-expect-error + invalidate + ) + ); + return unsub.unsubscribe ? () => unsub.unsubscribe() : unsub; +} +const subscriber_queue = []; +function writable(value, start = noop) { + let stop = null; + const subscribers = /* @__PURE__ */ new Set(); + function set(new_value) { + if (safe_not_equal(value, new_value)) { + value = new_value; + if (stop) { + const run_queue = !subscriber_queue.length; + for (const subscriber of subscribers) { + subscriber[1](); + subscriber_queue.push(subscriber, value); + } + if (run_queue) { + for (let i = 0; i < subscriber_queue.length; i += 2) { + subscriber_queue[i][0](subscriber_queue[i + 1]); + } + subscriber_queue.length = 0; + } + } + } + } + function update(fn) { + set(fn( + /** @type {T} */ + value + )); + } + function subscribe(run, invalidate = noop) { + const subscriber = [run, invalidate]; + subscribers.add(subscriber); + if (subscribers.size === 1) { + stop = start(set, update) || noop; + } + run( + /** @type {T} */ + value + ); + return () => { + subscribers.delete(subscriber); + if (subscribers.size === 0 && stop) { + stop(); + stop = null; + } + }; + } + return { set, update, subscribe }; +} +function get(store2) { + let value; + subscribe_to_store(store2, (_) => value = _)(); + return value; +} +let untracking = false; +function untrack(fn) { + var previous_untracking = untracking; + try { + untracking = true; + return fn(); + } finally { + untracking = previous_untracking; + } +} +function store(defaultValue) { + const scope = { + get: (name) => { + return get(scope.store)[name]; + }, + set: (name, value) => { + if (typeof name === "string") { + Object.assign(get(scope.store), { + [name]: value + }); + } else { + Object.assign(get(scope.store), name); + } + scope.store.set(get(scope.store)); + }, + store: writable(defaultValue) + }; + return scope; +} +globalThis.$altcha = globalThis.$altcha || { + algorithms: /* @__PURE__ */ new Map(), + defaults: store({}), + i18n: store({}), + instances: /* @__PURE__ */ new Set(), + plugins: /* @__PURE__ */ new Set() +}; +const i18n = { + ariaLinkLabel: "Altcha (ресми веб-сайт)", + enterCode: "Кодты енгізіңіз", + enterCodeAria: "Естіген кодыңызды енгізіңіз. Аудионы ойнату үшін Бос орынды басыңыз.", + error: "Тексеру сәтсіз аяқталды. Кейінірек қайталаңыз.", + expired: "Тексеру мерзімі аяқталды. Қайталаңыз.", + footer: 'ALTCHA қорғайды', + getAudioChallenge: "Аудио сынақ алу", + label: "Мен робот емеспін", + loading: "Жүктелуде...", + reload: "Қайта жүктеу", + verify: "Тексеру", + verificationRequired: "Тексеру талап етіледі!", + verified: "Тексерілді", + verifying: "Тексеруде...", + waitAlert: "Тексерілуде... күте тұрыңыз.", + cancel: "Болдыру", + enterCodeFromImage: "Жалғастыру үшін төмендегі суреттегі кодты енгізіңіз." +}; +globalThis.$altcha.i18n.set("kk", i18n); diff --git a/frontend/node_modules/altcha/dist/i18n/kk.umd.cjs b/frontend/node_modules/altcha/dist/i18n/kk.umd.cjs new file mode 100644 index 0000000..13f8256 --- /dev/null +++ b/frontend/node_modules/altcha/dist/i18n/kk.umd.cjs @@ -0,0 +1,133 @@ +(function(factory) { + typeof define === "function" && define.amd ? define(factory) : factory(); +})((function() { + "use strict"; + const noop = () => { + }; + function safe_not_equal(a, b) { + return a != a ? b == b : a !== b || a !== null && typeof a === "object" || typeof a === "function"; + } + function subscribe_to_store(store2, run, invalidate) { + if (store2 == null) { + run(void 0); + return noop; + } + const unsub = untrack( + () => store2.subscribe( + run, + // @ts-expect-error + invalidate + ) + ); + return unsub.unsubscribe ? () => unsub.unsubscribe() : unsub; + } + const subscriber_queue = []; + function writable(value, start = noop) { + let stop = null; + const subscribers = /* @__PURE__ */ new Set(); + function set(new_value) { + if (safe_not_equal(value, new_value)) { + value = new_value; + if (stop) { + const run_queue = !subscriber_queue.length; + for (const subscriber of subscribers) { + subscriber[1](); + subscriber_queue.push(subscriber, value); + } + if (run_queue) { + for (let i = 0; i < subscriber_queue.length; i += 2) { + subscriber_queue[i][0](subscriber_queue[i + 1]); + } + subscriber_queue.length = 0; + } + } + } + } + function update(fn) { + set(fn( + /** @type {T} */ + value + )); + } + function subscribe(run, invalidate = noop) { + const subscriber = [run, invalidate]; + subscribers.add(subscriber); + if (subscribers.size === 1) { + stop = start(set, update) || noop; + } + run( + /** @type {T} */ + value + ); + return () => { + subscribers.delete(subscriber); + if (subscribers.size === 0 && stop) { + stop(); + stop = null; + } + }; + } + return { set, update, subscribe }; + } + function get(store2) { + let value; + subscribe_to_store(store2, (_) => value = _)(); + return value; + } + let untracking = false; + function untrack(fn) { + var previous_untracking = untracking; + try { + untracking = true; + return fn(); + } finally { + untracking = previous_untracking; + } + } + function store(defaultValue) { + const scope = { + get: (name) => { + return get(scope.store)[name]; + }, + set: (name, value) => { + if (typeof name === "string") { + Object.assign(get(scope.store), { + [name]: value + }); + } else { + Object.assign(get(scope.store), name); + } + scope.store.set(get(scope.store)); + }, + store: writable(defaultValue) + }; + return scope; + } + globalThis.$altcha = globalThis.$altcha || { + algorithms: /* @__PURE__ */ new Map(), + defaults: store({}), + i18n: store({}), + instances: /* @__PURE__ */ new Set(), + plugins: /* @__PURE__ */ new Set() + }; + const i18n = { + ariaLinkLabel: "Altcha (ресми веб-сайт)", + enterCode: "Кодты енгізіңіз", + enterCodeAria: "Естіген кодыңызды енгізіңіз. Аудионы ойнату үшін Бос орынды басыңыз.", + error: "Тексеру сәтсіз аяқталды. Кейінірек қайталаңыз.", + expired: "Тексеру мерзімі аяқталды. Қайталаңыз.", + footer: 'ALTCHA қорғайды', + getAudioChallenge: "Аудио сынақ алу", + label: "Мен робот емеспін", + loading: "Жүктелуде...", + reload: "Қайта жүктеу", + verify: "Тексеру", + verificationRequired: "Тексеру талап етіледі!", + verified: "Тексерілді", + verifying: "Тексеруде...", + waitAlert: "Тексерілуде... күте тұрыңыз.", + cancel: "Болдыру", + enterCodeFromImage: "Жалғастыру үшін төмендегі суреттегі кодты енгізіңіз." + }; + globalThis.$altcha.i18n.set("kk", i18n); +})); diff --git a/frontend/node_modules/altcha/dist/i18n/ko.d.ts b/frontend/node_modules/altcha/dist/i18n/ko.d.ts new file mode 100644 index 0000000..e1491b5 --- /dev/null +++ b/frontend/node_modules/altcha/dist/i18n/ko.d.ts @@ -0,0 +1 @@ +declare module 'altcha/i18n/ko'; export {}; diff --git a/frontend/node_modules/altcha/dist/i18n/ko.js b/frontend/node_modules/altcha/dist/i18n/ko.js new file mode 100644 index 0000000..4cb2710 --- /dev/null +++ b/frontend/node_modules/altcha/dist/i18n/ko.js @@ -0,0 +1,128 @@ +const noop = () => { +}; +function safe_not_equal(a, b) { + return a != a ? b == b : a !== b || a !== null && typeof a === "object" || typeof a === "function"; +} +function subscribe_to_store(store2, run, invalidate) { + if (store2 == null) { + run(void 0); + return noop; + } + const unsub = untrack( + () => store2.subscribe( + run, + // @ts-expect-error + invalidate + ) + ); + return unsub.unsubscribe ? () => unsub.unsubscribe() : unsub; +} +const subscriber_queue = []; +function writable(value, start = noop) { + let stop = null; + const subscribers = /* @__PURE__ */ new Set(); + function set(new_value) { + if (safe_not_equal(value, new_value)) { + value = new_value; + if (stop) { + const run_queue = !subscriber_queue.length; + for (const subscriber of subscribers) { + subscriber[1](); + subscriber_queue.push(subscriber, value); + } + if (run_queue) { + for (let i = 0; i < subscriber_queue.length; i += 2) { + subscriber_queue[i][0](subscriber_queue[i + 1]); + } + subscriber_queue.length = 0; + } + } + } + } + function update(fn) { + set(fn( + /** @type {T} */ + value + )); + } + function subscribe(run, invalidate = noop) { + const subscriber = [run, invalidate]; + subscribers.add(subscriber); + if (subscribers.size === 1) { + stop = start(set, update) || noop; + } + run( + /** @type {T} */ + value + ); + return () => { + subscribers.delete(subscriber); + if (subscribers.size === 0 && stop) { + stop(); + stop = null; + } + }; + } + return { set, update, subscribe }; +} +function get(store2) { + let value; + subscribe_to_store(store2, (_) => value = _)(); + return value; +} +let untracking = false; +function untrack(fn) { + var previous_untracking = untracking; + try { + untracking = true; + return fn(); + } finally { + untracking = previous_untracking; + } +} +function store(defaultValue) { + const scope = { + get: (name) => { + return get(scope.store)[name]; + }, + set: (name, value) => { + if (typeof name === "string") { + Object.assign(get(scope.store), { + [name]: value + }); + } else { + Object.assign(get(scope.store), name); + } + scope.store.set(get(scope.store)); + }, + store: writable(defaultValue) + }; + return scope; +} +globalThis.$altcha = globalThis.$altcha || { + algorithms: /* @__PURE__ */ new Map(), + defaults: store({}), + i18n: store({}), + instances: /* @__PURE__ */ new Set(), + plugins: /* @__PURE__ */ new Set() +}; +const i18n = { + ariaLinkLabel: "Altcha (공식 웹사이트)", + enterCode: "코드 입력", + enterCodeAria: "들리는 코드를 입력하세요. 스페이스 바를 눌러 오디오를 재생합니다.", + error: "인증 실패. 나중에 다시 시도해주세요.", + expired: "인증이 만료되었습니다. 다시 시도해주세요.", + footer: 'ALTCHA에서 보호됨 ALTCHA', + getAudioChallenge: "오디오 챌린지 받기", + label: "저는 로봇이 아닙니다", + loading: "로딩 중...", + reload: "새로 고침", + verify: "확인", + verificationRequired: "인증이 필요합니다!", + verified: "확인됨", + verifying: "확인 중...", + waitAlert: "확인 중... 잠시만 기다려주세요.", + cancel: "취소", + enterCodeFromImage: "계속 진행하려면 아래 이미지에서 코드를 입력하세요." +}; +globalThis.$altcha.i18n.set("ko", i18n); diff --git a/frontend/node_modules/altcha/dist/i18n/ko.umd.cjs b/frontend/node_modules/altcha/dist/i18n/ko.umd.cjs new file mode 100644 index 0000000..e9c11b1 --- /dev/null +++ b/frontend/node_modules/altcha/dist/i18n/ko.umd.cjs @@ -0,0 +1,133 @@ +(function(factory) { + typeof define === "function" && define.amd ? define(factory) : factory(); +})((function() { + "use strict"; + const noop = () => { + }; + function safe_not_equal(a, b) { + return a != a ? b == b : a !== b || a !== null && typeof a === "object" || typeof a === "function"; + } + function subscribe_to_store(store2, run, invalidate) { + if (store2 == null) { + run(void 0); + return noop; + } + const unsub = untrack( + () => store2.subscribe( + run, + // @ts-expect-error + invalidate + ) + ); + return unsub.unsubscribe ? () => unsub.unsubscribe() : unsub; + } + const subscriber_queue = []; + function writable(value, start = noop) { + let stop = null; + const subscribers = /* @__PURE__ */ new Set(); + function set(new_value) { + if (safe_not_equal(value, new_value)) { + value = new_value; + if (stop) { + const run_queue = !subscriber_queue.length; + for (const subscriber of subscribers) { + subscriber[1](); + subscriber_queue.push(subscriber, value); + } + if (run_queue) { + for (let i = 0; i < subscriber_queue.length; i += 2) { + subscriber_queue[i][0](subscriber_queue[i + 1]); + } + subscriber_queue.length = 0; + } + } + } + } + function update(fn) { + set(fn( + /** @type {T} */ + value + )); + } + function subscribe(run, invalidate = noop) { + const subscriber = [run, invalidate]; + subscribers.add(subscriber); + if (subscribers.size === 1) { + stop = start(set, update) || noop; + } + run( + /** @type {T} */ + value + ); + return () => { + subscribers.delete(subscriber); + if (subscribers.size === 0 && stop) { + stop(); + stop = null; + } + }; + } + return { set, update, subscribe }; + } + function get(store2) { + let value; + subscribe_to_store(store2, (_) => value = _)(); + return value; + } + let untracking = false; + function untrack(fn) { + var previous_untracking = untracking; + try { + untracking = true; + return fn(); + } finally { + untracking = previous_untracking; + } + } + function store(defaultValue) { + const scope = { + get: (name) => { + return get(scope.store)[name]; + }, + set: (name, value) => { + if (typeof name === "string") { + Object.assign(get(scope.store), { + [name]: value + }); + } else { + Object.assign(get(scope.store), name); + } + scope.store.set(get(scope.store)); + }, + store: writable(defaultValue) + }; + return scope; + } + globalThis.$altcha = globalThis.$altcha || { + algorithms: /* @__PURE__ */ new Map(), + defaults: store({}), + i18n: store({}), + instances: /* @__PURE__ */ new Set(), + plugins: /* @__PURE__ */ new Set() + }; + const i18n = { + ariaLinkLabel: "Altcha (공식 웹사이트)", + enterCode: "코드 입력", + enterCodeAria: "들리는 코드를 입력하세요. 스페이스 바를 눌러 오디오를 재생합니다.", + error: "인증 실패. 나중에 다시 시도해주세요.", + expired: "인증이 만료되었습니다. 다시 시도해주세요.", + footer: 'ALTCHA에서 보호됨 ALTCHA', + getAudioChallenge: "오디오 챌린지 받기", + label: "저는 로봇이 아닙니다", + loading: "로딩 중...", + reload: "새로 고침", + verify: "확인", + verificationRequired: "인증이 필요합니다!", + verified: "확인됨", + verifying: "확인 중...", + waitAlert: "확인 중... 잠시만 기다려주세요.", + cancel: "취소", + enterCodeFromImage: "계속 진행하려면 아래 이미지에서 코드를 입력하세요." + }; + globalThis.$altcha.i18n.set("ko", i18n); +})); diff --git a/frontend/node_modules/altcha/dist/i18n/lb.d.ts b/frontend/node_modules/altcha/dist/i18n/lb.d.ts new file mode 100644 index 0000000..68f2a96 --- /dev/null +++ b/frontend/node_modules/altcha/dist/i18n/lb.d.ts @@ -0,0 +1 @@ +declare module 'altcha/i18n/lb'; export {}; diff --git a/frontend/node_modules/altcha/dist/i18n/lb.js b/frontend/node_modules/altcha/dist/i18n/lb.js new file mode 100644 index 0000000..984bedc --- /dev/null +++ b/frontend/node_modules/altcha/dist/i18n/lb.js @@ -0,0 +1,128 @@ +const noop = () => { +}; +function safe_not_equal(a, b) { + return a != a ? b == b : a !== b || a !== null && typeof a === "object" || typeof a === "function"; +} +function subscribe_to_store(store2, run, invalidate) { + if (store2 == null) { + run(void 0); + return noop; + } + const unsub = untrack( + () => store2.subscribe( + run, + // @ts-expect-error + invalidate + ) + ); + return unsub.unsubscribe ? () => unsub.unsubscribe() : unsub; +} +const subscriber_queue = []; +function writable(value, start = noop) { + let stop = null; + const subscribers = /* @__PURE__ */ new Set(); + function set(new_value) { + if (safe_not_equal(value, new_value)) { + value = new_value; + if (stop) { + const run_queue = !subscriber_queue.length; + for (const subscriber of subscribers) { + subscriber[1](); + subscriber_queue.push(subscriber, value); + } + if (run_queue) { + for (let i = 0; i < subscriber_queue.length; i += 2) { + subscriber_queue[i][0](subscriber_queue[i + 1]); + } + subscriber_queue.length = 0; + } + } + } + } + function update(fn) { + set(fn( + /** @type {T} */ + value + )); + } + function subscribe(run, invalidate = noop) { + const subscriber = [run, invalidate]; + subscribers.add(subscriber); + if (subscribers.size === 1) { + stop = start(set, update) || noop; + } + run( + /** @type {T} */ + value + ); + return () => { + subscribers.delete(subscriber); + if (subscribers.size === 0 && stop) { + stop(); + stop = null; + } + }; + } + return { set, update, subscribe }; +} +function get(store2) { + let value; + subscribe_to_store(store2, (_) => value = _)(); + return value; +} +let untracking = false; +function untrack(fn) { + var previous_untracking = untracking; + try { + untracking = true; + return fn(); + } finally { + untracking = previous_untracking; + } +} +function store(defaultValue) { + const scope = { + get: (name) => { + return get(scope.store)[name]; + }, + set: (name, value) => { + if (typeof name === "string") { + Object.assign(get(scope.store), { + [name]: value + }); + } else { + Object.assign(get(scope.store), name); + } + scope.store.set(get(scope.store)); + }, + store: writable(defaultValue) + }; + return scope; +} +globalThis.$altcha = globalThis.$altcha || { + algorithms: /* @__PURE__ */ new Map(), + defaults: store({}), + i18n: store({}), + instances: /* @__PURE__ */ new Set(), + plugins: /* @__PURE__ */ new Set() +}; +const i18n = { + ariaLinkLabel: "Altcha (offiziell Websäit)", + enterCode: "Code aginn", + enterCodeAria: "Gitt de Code an deen dir héiert. Dréckt op d'Weltraumtast fir Audio ofzespillen.", + error: "Verifikatioun ass feelgeschloen. Probéiert méi spéit nach emol.", + expired: "Verifikatioun ofgelaf. Probéiert nach emol.", + footer: 'Geschützt vun ALTCHA', + getAudioChallenge: "Kritt eng Audio-Herausfuerderung", + label: "Ech sinn keen Robot", + loading: "Lueden...", + reload: "Nei lueden", + verify: "Verifizéieren", + verificationRequired: "Verifikatioun néideg!", + verified: "Verifizéiert", + verifying: "Verifizéieren...", + waitAlert: "Verifizéieren... waart wgl.", + cancel: "Ofbriechen", + enterCodeFromImage: "Fir virun ze fueren, gitt wgl. de Code aus dem Bild hei drënner an." +}; +globalThis.$altcha.i18n.set("lb", i18n); diff --git a/frontend/node_modules/altcha/dist/i18n/lb.umd.cjs b/frontend/node_modules/altcha/dist/i18n/lb.umd.cjs new file mode 100644 index 0000000..5f0a16c --- /dev/null +++ b/frontend/node_modules/altcha/dist/i18n/lb.umd.cjs @@ -0,0 +1,133 @@ +(function(factory) { + typeof define === "function" && define.amd ? define(factory) : factory(); +})((function() { + "use strict"; + const noop = () => { + }; + function safe_not_equal(a, b) { + return a != a ? b == b : a !== b || a !== null && typeof a === "object" || typeof a === "function"; + } + function subscribe_to_store(store2, run, invalidate) { + if (store2 == null) { + run(void 0); + return noop; + } + const unsub = untrack( + () => store2.subscribe( + run, + // @ts-expect-error + invalidate + ) + ); + return unsub.unsubscribe ? () => unsub.unsubscribe() : unsub; + } + const subscriber_queue = []; + function writable(value, start = noop) { + let stop = null; + const subscribers = /* @__PURE__ */ new Set(); + function set(new_value) { + if (safe_not_equal(value, new_value)) { + value = new_value; + if (stop) { + const run_queue = !subscriber_queue.length; + for (const subscriber of subscribers) { + subscriber[1](); + subscriber_queue.push(subscriber, value); + } + if (run_queue) { + for (let i = 0; i < subscriber_queue.length; i += 2) { + subscriber_queue[i][0](subscriber_queue[i + 1]); + } + subscriber_queue.length = 0; + } + } + } + } + function update(fn) { + set(fn( + /** @type {T} */ + value + )); + } + function subscribe(run, invalidate = noop) { + const subscriber = [run, invalidate]; + subscribers.add(subscriber); + if (subscribers.size === 1) { + stop = start(set, update) || noop; + } + run( + /** @type {T} */ + value + ); + return () => { + subscribers.delete(subscriber); + if (subscribers.size === 0 && stop) { + stop(); + stop = null; + } + }; + } + return { set, update, subscribe }; + } + function get(store2) { + let value; + subscribe_to_store(store2, (_) => value = _)(); + return value; + } + let untracking = false; + function untrack(fn) { + var previous_untracking = untracking; + try { + untracking = true; + return fn(); + } finally { + untracking = previous_untracking; + } + } + function store(defaultValue) { + const scope = { + get: (name) => { + return get(scope.store)[name]; + }, + set: (name, value) => { + if (typeof name === "string") { + Object.assign(get(scope.store), { + [name]: value + }); + } else { + Object.assign(get(scope.store), name); + } + scope.store.set(get(scope.store)); + }, + store: writable(defaultValue) + }; + return scope; + } + globalThis.$altcha = globalThis.$altcha || { + algorithms: /* @__PURE__ */ new Map(), + defaults: store({}), + i18n: store({}), + instances: /* @__PURE__ */ new Set(), + plugins: /* @__PURE__ */ new Set() + }; + const i18n = { + ariaLinkLabel: "Altcha (offiziell Websäit)", + enterCode: "Code aginn", + enterCodeAria: "Gitt de Code an deen dir héiert. Dréckt op d'Weltraumtast fir Audio ofzespillen.", + error: "Verifikatioun ass feelgeschloen. Probéiert méi spéit nach emol.", + expired: "Verifikatioun ofgelaf. Probéiert nach emol.", + footer: 'Geschützt vun ALTCHA', + getAudioChallenge: "Kritt eng Audio-Herausfuerderung", + label: "Ech sinn keen Robot", + loading: "Lueden...", + reload: "Nei lueden", + verify: "Verifizéieren", + verificationRequired: "Verifikatioun néideg!", + verified: "Verifizéiert", + verifying: "Verifizéieren...", + waitAlert: "Verifizéieren... waart wgl.", + cancel: "Ofbriechen", + enterCodeFromImage: "Fir virun ze fueren, gitt wgl. de Code aus dem Bild hei drënner an." + }; + globalThis.$altcha.i18n.set("lb", i18n); +})); diff --git a/frontend/node_modules/altcha/dist/i18n/lt.d.ts b/frontend/node_modules/altcha/dist/i18n/lt.d.ts new file mode 100644 index 0000000..a537053 --- /dev/null +++ b/frontend/node_modules/altcha/dist/i18n/lt.d.ts @@ -0,0 +1 @@ +declare module 'altcha/i18n/lt'; export {}; diff --git a/frontend/node_modules/altcha/dist/i18n/lt.js b/frontend/node_modules/altcha/dist/i18n/lt.js new file mode 100644 index 0000000..922525a --- /dev/null +++ b/frontend/node_modules/altcha/dist/i18n/lt.js @@ -0,0 +1,128 @@ +const noop = () => { +}; +function safe_not_equal(a, b) { + return a != a ? b == b : a !== b || a !== null && typeof a === "object" || typeof a === "function"; +} +function subscribe_to_store(store2, run, invalidate) { + if (store2 == null) { + run(void 0); + return noop; + } + const unsub = untrack( + () => store2.subscribe( + run, + // @ts-expect-error + invalidate + ) + ); + return unsub.unsubscribe ? () => unsub.unsubscribe() : unsub; +} +const subscriber_queue = []; +function writable(value, start = noop) { + let stop = null; + const subscribers = /* @__PURE__ */ new Set(); + function set(new_value) { + if (safe_not_equal(value, new_value)) { + value = new_value; + if (stop) { + const run_queue = !subscriber_queue.length; + for (const subscriber of subscribers) { + subscriber[1](); + subscriber_queue.push(subscriber, value); + } + if (run_queue) { + for (let i = 0; i < subscriber_queue.length; i += 2) { + subscriber_queue[i][0](subscriber_queue[i + 1]); + } + subscriber_queue.length = 0; + } + } + } + } + function update(fn) { + set(fn( + /** @type {T} */ + value + )); + } + function subscribe(run, invalidate = noop) { + const subscriber = [run, invalidate]; + subscribers.add(subscriber); + if (subscribers.size === 1) { + stop = start(set, update) || noop; + } + run( + /** @type {T} */ + value + ); + return () => { + subscribers.delete(subscriber); + if (subscribers.size === 0 && stop) { + stop(); + stop = null; + } + }; + } + return { set, update, subscribe }; +} +function get(store2) { + let value; + subscribe_to_store(store2, (_) => value = _)(); + return value; +} +let untracking = false; +function untrack(fn) { + var previous_untracking = untracking; + try { + untracking = true; + return fn(); + } finally { + untracking = previous_untracking; + } +} +function store(defaultValue) { + const scope = { + get: (name) => { + return get(scope.store)[name]; + }, + set: (name, value) => { + if (typeof name === "string") { + Object.assign(get(scope.store), { + [name]: value + }); + } else { + Object.assign(get(scope.store), name); + } + scope.store.set(get(scope.store)); + }, + store: writable(defaultValue) + }; + return scope; +} +globalThis.$altcha = globalThis.$altcha || { + algorithms: /* @__PURE__ */ new Map(), + defaults: store({}), + i18n: store({}), + instances: /* @__PURE__ */ new Set(), + plugins: /* @__PURE__ */ new Set() +}; +const i18n = { + ariaLinkLabel: "Altcha (oficiali svetainė)", + enterCode: "Įveskite kodą", + enterCodeAria: "Įveskite girdimą kodą. Paspauskite tarpo klavišą, kad grotumėte garso įrašą.", + error: "Patvirtinimas nepavyko. Bandykite vėliau.", + expired: "Patvirtinimo laikas baigėsi. Bandykite dar kartą.", + footer: 'Apsaugota ALTCHA', + getAudioChallenge: "Gauti garso užduotį", + label: "Aš nesu robotas", + loading: "Įkeliama...", + reload: "Įkelti iš naujo", + verify: "Patvirtinti", + verificationRequired: "Reikalingas patvirtinimas!", + verified: "Patvirtinta", + verifying: "Tikrinama...", + waitAlert: "Tikrinama... prašome palaukti.", + cancel: "Atšaukti", + enterCodeFromImage: "Norėdami tęsti, įveskite kodą iš paveikslėlio žemiau." +}; +globalThis.$altcha.i18n.set("lt", i18n); diff --git a/frontend/node_modules/altcha/dist/i18n/lt.umd.cjs b/frontend/node_modules/altcha/dist/i18n/lt.umd.cjs new file mode 100644 index 0000000..a52b275 --- /dev/null +++ b/frontend/node_modules/altcha/dist/i18n/lt.umd.cjs @@ -0,0 +1,133 @@ +(function(factory) { + typeof define === "function" && define.amd ? define(factory) : factory(); +})((function() { + "use strict"; + const noop = () => { + }; + function safe_not_equal(a, b) { + return a != a ? b == b : a !== b || a !== null && typeof a === "object" || typeof a === "function"; + } + function subscribe_to_store(store2, run, invalidate) { + if (store2 == null) { + run(void 0); + return noop; + } + const unsub = untrack( + () => store2.subscribe( + run, + // @ts-expect-error + invalidate + ) + ); + return unsub.unsubscribe ? () => unsub.unsubscribe() : unsub; + } + const subscriber_queue = []; + function writable(value, start = noop) { + let stop = null; + const subscribers = /* @__PURE__ */ new Set(); + function set(new_value) { + if (safe_not_equal(value, new_value)) { + value = new_value; + if (stop) { + const run_queue = !subscriber_queue.length; + for (const subscriber of subscribers) { + subscriber[1](); + subscriber_queue.push(subscriber, value); + } + if (run_queue) { + for (let i = 0; i < subscriber_queue.length; i += 2) { + subscriber_queue[i][0](subscriber_queue[i + 1]); + } + subscriber_queue.length = 0; + } + } + } + } + function update(fn) { + set(fn( + /** @type {T} */ + value + )); + } + function subscribe(run, invalidate = noop) { + const subscriber = [run, invalidate]; + subscribers.add(subscriber); + if (subscribers.size === 1) { + stop = start(set, update) || noop; + } + run( + /** @type {T} */ + value + ); + return () => { + subscribers.delete(subscriber); + if (subscribers.size === 0 && stop) { + stop(); + stop = null; + } + }; + } + return { set, update, subscribe }; + } + function get(store2) { + let value; + subscribe_to_store(store2, (_) => value = _)(); + return value; + } + let untracking = false; + function untrack(fn) { + var previous_untracking = untracking; + try { + untracking = true; + return fn(); + } finally { + untracking = previous_untracking; + } + } + function store(defaultValue) { + const scope = { + get: (name) => { + return get(scope.store)[name]; + }, + set: (name, value) => { + if (typeof name === "string") { + Object.assign(get(scope.store), { + [name]: value + }); + } else { + Object.assign(get(scope.store), name); + } + scope.store.set(get(scope.store)); + }, + store: writable(defaultValue) + }; + return scope; + } + globalThis.$altcha = globalThis.$altcha || { + algorithms: /* @__PURE__ */ new Map(), + defaults: store({}), + i18n: store({}), + instances: /* @__PURE__ */ new Set(), + plugins: /* @__PURE__ */ new Set() + }; + const i18n = { + ariaLinkLabel: "Altcha (oficiali svetainė)", + enterCode: "Įveskite kodą", + enterCodeAria: "Įveskite girdimą kodą. Paspauskite tarpo klavišą, kad grotumėte garso įrašą.", + error: "Patvirtinimas nepavyko. Bandykite vėliau.", + expired: "Patvirtinimo laikas baigėsi. Bandykite dar kartą.", + footer: 'Apsaugota ALTCHA', + getAudioChallenge: "Gauti garso užduotį", + label: "Aš nesu robotas", + loading: "Įkeliama...", + reload: "Įkelti iš naujo", + verify: "Patvirtinti", + verificationRequired: "Reikalingas patvirtinimas!", + verified: "Patvirtinta", + verifying: "Tikrinama...", + waitAlert: "Tikrinama... prašome palaukti.", + cancel: "Atšaukti", + enterCodeFromImage: "Norėdami tęsti, įveskite kodą iš paveikslėlio žemiau." + }; + globalThis.$altcha.i18n.set("lt", i18n); +})); diff --git a/frontend/node_modules/altcha/dist/i18n/lv.d.ts b/frontend/node_modules/altcha/dist/i18n/lv.d.ts new file mode 100644 index 0000000..c28f215 --- /dev/null +++ b/frontend/node_modules/altcha/dist/i18n/lv.d.ts @@ -0,0 +1 @@ +declare module 'altcha/i18n/lv'; export {}; diff --git a/frontend/node_modules/altcha/dist/i18n/lv.js b/frontend/node_modules/altcha/dist/i18n/lv.js new file mode 100644 index 0000000..227ca13 --- /dev/null +++ b/frontend/node_modules/altcha/dist/i18n/lv.js @@ -0,0 +1,128 @@ +const noop = () => { +}; +function safe_not_equal(a, b) { + return a != a ? b == b : a !== b || a !== null && typeof a === "object" || typeof a === "function"; +} +function subscribe_to_store(store2, run, invalidate) { + if (store2 == null) { + run(void 0); + return noop; + } + const unsub = untrack( + () => store2.subscribe( + run, + // @ts-expect-error + invalidate + ) + ); + return unsub.unsubscribe ? () => unsub.unsubscribe() : unsub; +} +const subscriber_queue = []; +function writable(value, start = noop) { + let stop = null; + const subscribers = /* @__PURE__ */ new Set(); + function set(new_value) { + if (safe_not_equal(value, new_value)) { + value = new_value; + if (stop) { + const run_queue = !subscriber_queue.length; + for (const subscriber of subscribers) { + subscriber[1](); + subscriber_queue.push(subscriber, value); + } + if (run_queue) { + for (let i = 0; i < subscriber_queue.length; i += 2) { + subscriber_queue[i][0](subscriber_queue[i + 1]); + } + subscriber_queue.length = 0; + } + } + } + } + function update(fn) { + set(fn( + /** @type {T} */ + value + )); + } + function subscribe(run, invalidate = noop) { + const subscriber = [run, invalidate]; + subscribers.add(subscriber); + if (subscribers.size === 1) { + stop = start(set, update) || noop; + } + run( + /** @type {T} */ + value + ); + return () => { + subscribers.delete(subscriber); + if (subscribers.size === 0 && stop) { + stop(); + stop = null; + } + }; + } + return { set, update, subscribe }; +} +function get(store2) { + let value; + subscribe_to_store(store2, (_) => value = _)(); + return value; +} +let untracking = false; +function untrack(fn) { + var previous_untracking = untracking; + try { + untracking = true; + return fn(); + } finally { + untracking = previous_untracking; + } +} +function store(defaultValue) { + const scope = { + get: (name) => { + return get(scope.store)[name]; + }, + set: (name, value) => { + if (typeof name === "string") { + Object.assign(get(scope.store), { + [name]: value + }); + } else { + Object.assign(get(scope.store), name); + } + scope.store.set(get(scope.store)); + }, + store: writable(defaultValue) + }; + return scope; +} +globalThis.$altcha = globalThis.$altcha || { + algorithms: /* @__PURE__ */ new Map(), + defaults: store({}), + i18n: store({}), + instances: /* @__PURE__ */ new Set(), + plugins: /* @__PURE__ */ new Set() +}; +const i18n = { + ariaLinkLabel: "Altcha (oficiālā tīmekļa vietne)", + enterCode: "Ievadiet kodu", + enterCodeAria: "Ievadiet dzirdamo kodu. Nospiediet atstarpes taustiņu, lai atskaņotu audio.", + error: "Verifikācija neizdevās. Mēģiniet vēlāk vēlreiz.", + expired: "Verifikācijas laiks ir beidzies. Mēģiniet vēlreiz.", + footer: 'Aizsargāts ar ALTCHA', + getAudioChallenge: "Saņemt audio izaicinājumu", + label: "Es neesmu robots", + loading: "Notiek ielāde...", + reload: "Pārlādēt", + verify: "Verificēt", + verificationRequired: "Nepieciešama verifikācija!", + verified: "Verificēts", + verifying: "Notiek verifikācija...", + waitAlert: "Notiek verifikācija... lūdzu, uzgaidiet.", + cancel: "Atcelt", + enterCodeFromImage: "Lai turpinātu, lūdzu, ievadiet zemāk redzamo attēlu kodu." +}; +globalThis.$altcha.i18n.set("lv", i18n); diff --git a/frontend/node_modules/altcha/dist/i18n/lv.umd.cjs b/frontend/node_modules/altcha/dist/i18n/lv.umd.cjs new file mode 100644 index 0000000..5bdb8dd --- /dev/null +++ b/frontend/node_modules/altcha/dist/i18n/lv.umd.cjs @@ -0,0 +1,133 @@ +(function(factory) { + typeof define === "function" && define.amd ? define(factory) : factory(); +})((function() { + "use strict"; + const noop = () => { + }; + function safe_not_equal(a, b) { + return a != a ? b == b : a !== b || a !== null && typeof a === "object" || typeof a === "function"; + } + function subscribe_to_store(store2, run, invalidate) { + if (store2 == null) { + run(void 0); + return noop; + } + const unsub = untrack( + () => store2.subscribe( + run, + // @ts-expect-error + invalidate + ) + ); + return unsub.unsubscribe ? () => unsub.unsubscribe() : unsub; + } + const subscriber_queue = []; + function writable(value, start = noop) { + let stop = null; + const subscribers = /* @__PURE__ */ new Set(); + function set(new_value) { + if (safe_not_equal(value, new_value)) { + value = new_value; + if (stop) { + const run_queue = !subscriber_queue.length; + for (const subscriber of subscribers) { + subscriber[1](); + subscriber_queue.push(subscriber, value); + } + if (run_queue) { + for (let i = 0; i < subscriber_queue.length; i += 2) { + subscriber_queue[i][0](subscriber_queue[i + 1]); + } + subscriber_queue.length = 0; + } + } + } + } + function update(fn) { + set(fn( + /** @type {T} */ + value + )); + } + function subscribe(run, invalidate = noop) { + const subscriber = [run, invalidate]; + subscribers.add(subscriber); + if (subscribers.size === 1) { + stop = start(set, update) || noop; + } + run( + /** @type {T} */ + value + ); + return () => { + subscribers.delete(subscriber); + if (subscribers.size === 0 && stop) { + stop(); + stop = null; + } + }; + } + return { set, update, subscribe }; + } + function get(store2) { + let value; + subscribe_to_store(store2, (_) => value = _)(); + return value; + } + let untracking = false; + function untrack(fn) { + var previous_untracking = untracking; + try { + untracking = true; + return fn(); + } finally { + untracking = previous_untracking; + } + } + function store(defaultValue) { + const scope = { + get: (name) => { + return get(scope.store)[name]; + }, + set: (name, value) => { + if (typeof name === "string") { + Object.assign(get(scope.store), { + [name]: value + }); + } else { + Object.assign(get(scope.store), name); + } + scope.store.set(get(scope.store)); + }, + store: writable(defaultValue) + }; + return scope; + } + globalThis.$altcha = globalThis.$altcha || { + algorithms: /* @__PURE__ */ new Map(), + defaults: store({}), + i18n: store({}), + instances: /* @__PURE__ */ new Set(), + plugins: /* @__PURE__ */ new Set() + }; + const i18n = { + ariaLinkLabel: "Altcha (oficiālā tīmekļa vietne)", + enterCode: "Ievadiet kodu", + enterCodeAria: "Ievadiet dzirdamo kodu. Nospiediet atstarpes taustiņu, lai atskaņotu audio.", + error: "Verifikācija neizdevās. Mēģiniet vēlāk vēlreiz.", + expired: "Verifikācijas laiks ir beidzies. Mēģiniet vēlreiz.", + footer: 'Aizsargāts ar ALTCHA', + getAudioChallenge: "Saņemt audio izaicinājumu", + label: "Es neesmu robots", + loading: "Notiek ielāde...", + reload: "Pārlādēt", + verify: "Verificēt", + verificationRequired: "Nepieciešama verifikācija!", + verified: "Verificēts", + verifying: "Notiek verifikācija...", + waitAlert: "Notiek verifikācija... lūdzu, uzgaidiet.", + cancel: "Atcelt", + enterCodeFromImage: "Lai turpinātu, lūdzu, ievadiet zemāk redzamo attēlu kodu." + }; + globalThis.$altcha.i18n.set("lv", i18n); +})); diff --git a/frontend/node_modules/altcha/dist/i18n/me.d.ts b/frontend/node_modules/altcha/dist/i18n/me.d.ts new file mode 100644 index 0000000..7889ac2 --- /dev/null +++ b/frontend/node_modules/altcha/dist/i18n/me.d.ts @@ -0,0 +1 @@ +declare module 'altcha/i18n/me'; export {}; diff --git a/frontend/node_modules/altcha/dist/i18n/me.js b/frontend/node_modules/altcha/dist/i18n/me.js new file mode 100644 index 0000000..b27f83d --- /dev/null +++ b/frontend/node_modules/altcha/dist/i18n/me.js @@ -0,0 +1,128 @@ +const noop = () => { +}; +function safe_not_equal(a, b) { + return a != a ? b == b : a !== b || a !== null && typeof a === "object" || typeof a === "function"; +} +function subscribe_to_store(store2, run, invalidate) { + if (store2 == null) { + run(void 0); + return noop; + } + const unsub = untrack( + () => store2.subscribe( + run, + // @ts-expect-error + invalidate + ) + ); + return unsub.unsubscribe ? () => unsub.unsubscribe() : unsub; +} +const subscriber_queue = []; +function writable(value, start = noop) { + let stop = null; + const subscribers = /* @__PURE__ */ new Set(); + function set(new_value) { + if (safe_not_equal(value, new_value)) { + value = new_value; + if (stop) { + const run_queue = !subscriber_queue.length; + for (const subscriber of subscribers) { + subscriber[1](); + subscriber_queue.push(subscriber, value); + } + if (run_queue) { + for (let i = 0; i < subscriber_queue.length; i += 2) { + subscriber_queue[i][0](subscriber_queue[i + 1]); + } + subscriber_queue.length = 0; + } + } + } + } + function update(fn) { + set(fn( + /** @type {T} */ + value + )); + } + function subscribe(run, invalidate = noop) { + const subscriber = [run, invalidate]; + subscribers.add(subscriber); + if (subscribers.size === 1) { + stop = start(set, update) || noop; + } + run( + /** @type {T} */ + value + ); + return () => { + subscribers.delete(subscriber); + if (subscribers.size === 0 && stop) { + stop(); + stop = null; + } + }; + } + return { set, update, subscribe }; +} +function get(store2) { + let value; + subscribe_to_store(store2, (_) => value = _)(); + return value; +} +let untracking = false; +function untrack(fn) { + var previous_untracking = untracking; + try { + untracking = true; + return fn(); + } finally { + untracking = previous_untracking; + } +} +function store(defaultValue) { + const scope = { + get: (name) => { + return get(scope.store)[name]; + }, + set: (name, value) => { + if (typeof name === "string") { + Object.assign(get(scope.store), { + [name]: value + }); + } else { + Object.assign(get(scope.store), name); + } + scope.store.set(get(scope.store)); + }, + store: writable(defaultValue) + }; + return scope; +} +globalThis.$altcha = globalThis.$altcha || { + algorithms: /* @__PURE__ */ new Map(), + defaults: store({}), + i18n: store({}), + instances: /* @__PURE__ */ new Set(), + plugins: /* @__PURE__ */ new Set() +}; +const i18n = { + ariaLinkLabel: "Altcha (zvanična web stranica)", + enterCode: "Unesite kod", + enterCodeAria: "Unesite kod koji čujete. Pritisnite Space za puštanje zvuka.", + error: "Verifikacija nije uspjela. Pokušajte ponovo kasnije.", + expired: "Verifikacija je istekla. Pokušajte ponovo.", + footer: 'Zaštićeno putem ALTCHA', + getAudioChallenge: "Preuzmi audio izazov", + label: "Nijesam robot", + loading: "Učitavanje...", + reload: "Ponovo učitaj", + verify: "Verifikuj", + verificationRequired: "Potrebna je verifikacija!", + verified: "Verifikovano", + verifying: "Verifikacija u toku...", + waitAlert: "Verifikujem... molimo sačekajte.", + cancel: "Odustani", + enterCodeFromImage: "Za nastavak, molimo unesite kod sa slike ispod." +}; +globalThis.$altcha.i18n.set("me", i18n); diff --git a/frontend/node_modules/altcha/dist/i18n/me.umd.cjs b/frontend/node_modules/altcha/dist/i18n/me.umd.cjs new file mode 100644 index 0000000..ce6cb81 --- /dev/null +++ b/frontend/node_modules/altcha/dist/i18n/me.umd.cjs @@ -0,0 +1,133 @@ +(function(factory) { + typeof define === "function" && define.amd ? define(factory) : factory(); +})((function() { + "use strict"; + const noop = () => { + }; + function safe_not_equal(a, b) { + return a != a ? b == b : a !== b || a !== null && typeof a === "object" || typeof a === "function"; + } + function subscribe_to_store(store2, run, invalidate) { + if (store2 == null) { + run(void 0); + return noop; + } + const unsub = untrack( + () => store2.subscribe( + run, + // @ts-expect-error + invalidate + ) + ); + return unsub.unsubscribe ? () => unsub.unsubscribe() : unsub; + } + const subscriber_queue = []; + function writable(value, start = noop) { + let stop = null; + const subscribers = /* @__PURE__ */ new Set(); + function set(new_value) { + if (safe_not_equal(value, new_value)) { + value = new_value; + if (stop) { + const run_queue = !subscriber_queue.length; + for (const subscriber of subscribers) { + subscriber[1](); + subscriber_queue.push(subscriber, value); + } + if (run_queue) { + for (let i = 0; i < subscriber_queue.length; i += 2) { + subscriber_queue[i][0](subscriber_queue[i + 1]); + } + subscriber_queue.length = 0; + } + } + } + } + function update(fn) { + set(fn( + /** @type {T} */ + value + )); + } + function subscribe(run, invalidate = noop) { + const subscriber = [run, invalidate]; + subscribers.add(subscriber); + if (subscribers.size === 1) { + stop = start(set, update) || noop; + } + run( + /** @type {T} */ + value + ); + return () => { + subscribers.delete(subscriber); + if (subscribers.size === 0 && stop) { + stop(); + stop = null; + } + }; + } + return { set, update, subscribe }; + } + function get(store2) { + let value; + subscribe_to_store(store2, (_) => value = _)(); + return value; + } + let untracking = false; + function untrack(fn) { + var previous_untracking = untracking; + try { + untracking = true; + return fn(); + } finally { + untracking = previous_untracking; + } + } + function store(defaultValue) { + const scope = { + get: (name) => { + return get(scope.store)[name]; + }, + set: (name, value) => { + if (typeof name === "string") { + Object.assign(get(scope.store), { + [name]: value + }); + } else { + Object.assign(get(scope.store), name); + } + scope.store.set(get(scope.store)); + }, + store: writable(defaultValue) + }; + return scope; + } + globalThis.$altcha = globalThis.$altcha || { + algorithms: /* @__PURE__ */ new Map(), + defaults: store({}), + i18n: store({}), + instances: /* @__PURE__ */ new Set(), + plugins: /* @__PURE__ */ new Set() + }; + const i18n = { + ariaLinkLabel: "Altcha (zvanična web stranica)", + enterCode: "Unesite kod", + enterCodeAria: "Unesite kod koji čujete. Pritisnite Space za puštanje zvuka.", + error: "Verifikacija nije uspjela. Pokušajte ponovo kasnije.", + expired: "Verifikacija je istekla. Pokušajte ponovo.", + footer: 'Zaštićeno putem ALTCHA', + getAudioChallenge: "Preuzmi audio izazov", + label: "Nijesam robot", + loading: "Učitavanje...", + reload: "Ponovo učitaj", + verify: "Verifikuj", + verificationRequired: "Potrebna je verifikacija!", + verified: "Verifikovano", + verifying: "Verifikacija u toku...", + waitAlert: "Verifikujem... molimo sačekajte.", + cancel: "Odustani", + enterCodeFromImage: "Za nastavak, molimo unesite kod sa slike ispod." + }; + globalThis.$altcha.i18n.set("me", i18n); +})); diff --git a/frontend/node_modules/altcha/dist/i18n/mk.d.ts b/frontend/node_modules/altcha/dist/i18n/mk.d.ts new file mode 100644 index 0000000..e61e56b --- /dev/null +++ b/frontend/node_modules/altcha/dist/i18n/mk.d.ts @@ -0,0 +1 @@ +declare module 'altcha/i18n/mk'; export {}; diff --git a/frontend/node_modules/altcha/dist/i18n/mk.js b/frontend/node_modules/altcha/dist/i18n/mk.js new file mode 100644 index 0000000..72800a4 --- /dev/null +++ b/frontend/node_modules/altcha/dist/i18n/mk.js @@ -0,0 +1,128 @@ +const noop = () => { +}; +function safe_not_equal(a, b) { + return a != a ? b == b : a !== b || a !== null && typeof a === "object" || typeof a === "function"; +} +function subscribe_to_store(store2, run, invalidate) { + if (store2 == null) { + run(void 0); + return noop; + } + const unsub = untrack( + () => store2.subscribe( + run, + // @ts-expect-error + invalidate + ) + ); + return unsub.unsubscribe ? () => unsub.unsubscribe() : unsub; +} +const subscriber_queue = []; +function writable(value, start = noop) { + let stop = null; + const subscribers = /* @__PURE__ */ new Set(); + function set(new_value) { + if (safe_not_equal(value, new_value)) { + value = new_value; + if (stop) { + const run_queue = !subscriber_queue.length; + for (const subscriber of subscribers) { + subscriber[1](); + subscriber_queue.push(subscriber, value); + } + if (run_queue) { + for (let i = 0; i < subscriber_queue.length; i += 2) { + subscriber_queue[i][0](subscriber_queue[i + 1]); + } + subscriber_queue.length = 0; + } + } + } + } + function update(fn) { + set(fn( + /** @type {T} */ + value + )); + } + function subscribe(run, invalidate = noop) { + const subscriber = [run, invalidate]; + subscribers.add(subscriber); + if (subscribers.size === 1) { + stop = start(set, update) || noop; + } + run( + /** @type {T} */ + value + ); + return () => { + subscribers.delete(subscriber); + if (subscribers.size === 0 && stop) { + stop(); + stop = null; + } + }; + } + return { set, update, subscribe }; +} +function get(store2) { + let value; + subscribe_to_store(store2, (_) => value = _)(); + return value; +} +let untracking = false; +function untrack(fn) { + var previous_untracking = untracking; + try { + untracking = true; + return fn(); + } finally { + untracking = previous_untracking; + } +} +function store(defaultValue) { + const scope = { + get: (name) => { + return get(scope.store)[name]; + }, + set: (name, value) => { + if (typeof name === "string") { + Object.assign(get(scope.store), { + [name]: value + }); + } else { + Object.assign(get(scope.store), name); + } + scope.store.set(get(scope.store)); + }, + store: writable(defaultValue) + }; + return scope; +} +globalThis.$altcha = globalThis.$altcha || { + algorithms: /* @__PURE__ */ new Map(), + defaults: store({}), + i18n: store({}), + instances: /* @__PURE__ */ new Set(), + plugins: /* @__PURE__ */ new Set() +}; +const i18n = { + ariaLinkLabel: "Altcha (официјален веб-сајт)", + enterCode: "Внесете код", + enterCodeAria: "Внесете го кодот што го слушате. Притиснете Space за да ја пуштите аудио снимката.", + error: "Проверката не успеа. Обидете се подоцна.", + expired: "Проверката истече. Обидете се повторно.", + footer: 'Заштитено со ALTCHA', + getAudioChallenge: "Земете аудио предизвик", + label: "Јас не сум робот", + loading: "Се вчитува...", + reload: "Превчитај", + verify: "Провери", + verificationRequired: "Потребна е проверка!", + verified: "Потврдено", + verifying: "Се проверува...", + waitAlert: "Се проверува... ве молиме почекајте.", + cancel: "Откажи", + enterCodeFromImage: "За да продолжите, ве молиме внесете го кодот од сликата подолу." +}; +globalThis.$altcha.i18n.set("mk", i18n); diff --git a/frontend/node_modules/altcha/dist/i18n/mk.umd.cjs b/frontend/node_modules/altcha/dist/i18n/mk.umd.cjs new file mode 100644 index 0000000..daaf4bb --- /dev/null +++ b/frontend/node_modules/altcha/dist/i18n/mk.umd.cjs @@ -0,0 +1,133 @@ +(function(factory) { + typeof define === "function" && define.amd ? define(factory) : factory(); +})((function() { + "use strict"; + const noop = () => { + }; + function safe_not_equal(a, b) { + return a != a ? b == b : a !== b || a !== null && typeof a === "object" || typeof a === "function"; + } + function subscribe_to_store(store2, run, invalidate) { + if (store2 == null) { + run(void 0); + return noop; + } + const unsub = untrack( + () => store2.subscribe( + run, + // @ts-expect-error + invalidate + ) + ); + return unsub.unsubscribe ? () => unsub.unsubscribe() : unsub; + } + const subscriber_queue = []; + function writable(value, start = noop) { + let stop = null; + const subscribers = /* @__PURE__ */ new Set(); + function set(new_value) { + if (safe_not_equal(value, new_value)) { + value = new_value; + if (stop) { + const run_queue = !subscriber_queue.length; + for (const subscriber of subscribers) { + subscriber[1](); + subscriber_queue.push(subscriber, value); + } + if (run_queue) { + for (let i = 0; i < subscriber_queue.length; i += 2) { + subscriber_queue[i][0](subscriber_queue[i + 1]); + } + subscriber_queue.length = 0; + } + } + } + } + function update(fn) { + set(fn( + /** @type {T} */ + value + )); + } + function subscribe(run, invalidate = noop) { + const subscriber = [run, invalidate]; + subscribers.add(subscriber); + if (subscribers.size === 1) { + stop = start(set, update) || noop; + } + run( + /** @type {T} */ + value + ); + return () => { + subscribers.delete(subscriber); + if (subscribers.size === 0 && stop) { + stop(); + stop = null; + } + }; + } + return { set, update, subscribe }; + } + function get(store2) { + let value; + subscribe_to_store(store2, (_) => value = _)(); + return value; + } + let untracking = false; + function untrack(fn) { + var previous_untracking = untracking; + try { + untracking = true; + return fn(); + } finally { + untracking = previous_untracking; + } + } + function store(defaultValue) { + const scope = { + get: (name) => { + return get(scope.store)[name]; + }, + set: (name, value) => { + if (typeof name === "string") { + Object.assign(get(scope.store), { + [name]: value + }); + } else { + Object.assign(get(scope.store), name); + } + scope.store.set(get(scope.store)); + }, + store: writable(defaultValue) + }; + return scope; + } + globalThis.$altcha = globalThis.$altcha || { + algorithms: /* @__PURE__ */ new Map(), + defaults: store({}), + i18n: store({}), + instances: /* @__PURE__ */ new Set(), + plugins: /* @__PURE__ */ new Set() + }; + const i18n = { + ariaLinkLabel: "Altcha (официјален веб-сајт)", + enterCode: "Внесете код", + enterCodeAria: "Внесете го кодот што го слушате. Притиснете Space за да ја пуштите аудио снимката.", + error: "Проверката не успеа. Обидете се подоцна.", + expired: "Проверката истече. Обидете се повторно.", + footer: 'Заштитено со ALTCHA', + getAudioChallenge: "Земете аудио предизвик", + label: "Јас не сум робот", + loading: "Се вчитува...", + reload: "Превчитај", + verify: "Провери", + verificationRequired: "Потребна е проверка!", + verified: "Потврдено", + verifying: "Се проверува...", + waitAlert: "Се проверува... ве молиме почекајте.", + cancel: "Откажи", + enterCodeFromImage: "За да продолжите, ве молиме внесете го кодот од сликата подолу." + }; + globalThis.$altcha.i18n.set("mk", i18n); +})); diff --git a/frontend/node_modules/altcha/dist/i18n/mr.d.ts b/frontend/node_modules/altcha/dist/i18n/mr.d.ts new file mode 100644 index 0000000..76efa63 --- /dev/null +++ b/frontend/node_modules/altcha/dist/i18n/mr.d.ts @@ -0,0 +1 @@ +declare module 'altcha/i18n/mr'; export {}; diff --git a/frontend/node_modules/altcha/dist/i18n/mr.js b/frontend/node_modules/altcha/dist/i18n/mr.js new file mode 100644 index 0000000..44d7898 --- /dev/null +++ b/frontend/node_modules/altcha/dist/i18n/mr.js @@ -0,0 +1,128 @@ +const noop = () => { +}; +function safe_not_equal(a, b) { + return a != a ? b == b : a !== b || a !== null && typeof a === "object" || typeof a === "function"; +} +function subscribe_to_store(store2, run, invalidate) { + if (store2 == null) { + run(void 0); + return noop; + } + const unsub = untrack( + () => store2.subscribe( + run, + // @ts-expect-error + invalidate + ) + ); + return unsub.unsubscribe ? () => unsub.unsubscribe() : unsub; +} +const subscriber_queue = []; +function writable(value, start = noop) { + let stop = null; + const subscribers = /* @__PURE__ */ new Set(); + function set(new_value) { + if (safe_not_equal(value, new_value)) { + value = new_value; + if (stop) { + const run_queue = !subscriber_queue.length; + for (const subscriber of subscribers) { + subscriber[1](); + subscriber_queue.push(subscriber, value); + } + if (run_queue) { + for (let i = 0; i < subscriber_queue.length; i += 2) { + subscriber_queue[i][0](subscriber_queue[i + 1]); + } + subscriber_queue.length = 0; + } + } + } + } + function update(fn) { + set(fn( + /** @type {T} */ + value + )); + } + function subscribe(run, invalidate = noop) { + const subscriber = [run, invalidate]; + subscribers.add(subscriber); + if (subscribers.size === 1) { + stop = start(set, update) || noop; + } + run( + /** @type {T} */ + value + ); + return () => { + subscribers.delete(subscriber); + if (subscribers.size === 0 && stop) { + stop(); + stop = null; + } + }; + } + return { set, update, subscribe }; +} +function get(store2) { + let value; + subscribe_to_store(store2, (_) => value = _)(); + return value; +} +let untracking = false; +function untrack(fn) { + var previous_untracking = untracking; + try { + untracking = true; + return fn(); + } finally { + untracking = previous_untracking; + } +} +function store(defaultValue) { + const scope = { + get: (name) => { + return get(scope.store)[name]; + }, + set: (name, value) => { + if (typeof name === "string") { + Object.assign(get(scope.store), { + [name]: value + }); + } else { + Object.assign(get(scope.store), name); + } + scope.store.set(get(scope.store)); + }, + store: writable(defaultValue) + }; + return scope; +} +globalThis.$altcha = globalThis.$altcha || { + algorithms: /* @__PURE__ */ new Map(), + defaults: store({}), + i18n: store({}), + instances: /* @__PURE__ */ new Set(), + plugins: /* @__PURE__ */ new Set() +}; +const i18n = { + ariaLinkLabel: "Altcha (अधिकृत संकेतस्थळ)", + enterCode: "कोड टाकाा", + enterCodeAria: "तुम्ही ऐकत असलेला कोड टाका. ऑडिओ प्ले करण्यासाठी स्पेस दाबा.", + error: "पुष्टीकरण अयशस्वी झाले. कृपया नंतर पुन्हा प्रयत्न करा.", + expired: "पुष्टीकरण कालबाह्य झाले आहे. कृपया पुन्हा प्रयत्न करा.", + footer: 'द्वारे संरक्षित ALTCHA', + getAudioChallenge: "ऑडिओ चॅलेंज मिळवा", + label: "मी रोबोट नाही", + loading: "लोड होत आहे...", + reload: "पुन्हा लोड करा", + verify: "पुष्टीकरण करा", + verificationRequired: "पडताळणी आवश्यक आहे!", + verified: "पुष्टीकरण झाले", + verifying: "पुष्टीकरण करत आहे...", + waitAlert: "पुष्टीकरण करत आहे... कृपया थोडा वेळ थांबा.", + cancel: "रद्द करा", + enterCodeFromImage: "पुढे जाण्यासाठी, कृपया खालील प्रतिमेतील कोड प्रविष्ट करा." +}; +globalThis.$altcha.i18n.set("mr", i18n); diff --git a/frontend/node_modules/altcha/dist/i18n/mr.umd.cjs b/frontend/node_modules/altcha/dist/i18n/mr.umd.cjs new file mode 100644 index 0000000..605ad16 --- /dev/null +++ b/frontend/node_modules/altcha/dist/i18n/mr.umd.cjs @@ -0,0 +1,133 @@ +(function(factory) { + typeof define === "function" && define.amd ? define(factory) : factory(); +})((function() { + "use strict"; + const noop = () => { + }; + function safe_not_equal(a, b) { + return a != a ? b == b : a !== b || a !== null && typeof a === "object" || typeof a === "function"; + } + function subscribe_to_store(store2, run, invalidate) { + if (store2 == null) { + run(void 0); + return noop; + } + const unsub = untrack( + () => store2.subscribe( + run, + // @ts-expect-error + invalidate + ) + ); + return unsub.unsubscribe ? () => unsub.unsubscribe() : unsub; + } + const subscriber_queue = []; + function writable(value, start = noop) { + let stop = null; + const subscribers = /* @__PURE__ */ new Set(); + function set(new_value) { + if (safe_not_equal(value, new_value)) { + value = new_value; + if (stop) { + const run_queue = !subscriber_queue.length; + for (const subscriber of subscribers) { + subscriber[1](); + subscriber_queue.push(subscriber, value); + } + if (run_queue) { + for (let i = 0; i < subscriber_queue.length; i += 2) { + subscriber_queue[i][0](subscriber_queue[i + 1]); + } + subscriber_queue.length = 0; + } + } + } + } + function update(fn) { + set(fn( + /** @type {T} */ + value + )); + } + function subscribe(run, invalidate = noop) { + const subscriber = [run, invalidate]; + subscribers.add(subscriber); + if (subscribers.size === 1) { + stop = start(set, update) || noop; + } + run( + /** @type {T} */ + value + ); + return () => { + subscribers.delete(subscriber); + if (subscribers.size === 0 && stop) { + stop(); + stop = null; + } + }; + } + return { set, update, subscribe }; + } + function get(store2) { + let value; + subscribe_to_store(store2, (_) => value = _)(); + return value; + } + let untracking = false; + function untrack(fn) { + var previous_untracking = untracking; + try { + untracking = true; + return fn(); + } finally { + untracking = previous_untracking; + } + } + function store(defaultValue) { + const scope = { + get: (name) => { + return get(scope.store)[name]; + }, + set: (name, value) => { + if (typeof name === "string") { + Object.assign(get(scope.store), { + [name]: value + }); + } else { + Object.assign(get(scope.store), name); + } + scope.store.set(get(scope.store)); + }, + store: writable(defaultValue) + }; + return scope; + } + globalThis.$altcha = globalThis.$altcha || { + algorithms: /* @__PURE__ */ new Map(), + defaults: store({}), + i18n: store({}), + instances: /* @__PURE__ */ new Set(), + plugins: /* @__PURE__ */ new Set() + }; + const i18n = { + ariaLinkLabel: "Altcha (अधिकृत संकेतस्थळ)", + enterCode: "कोड टाकाा", + enterCodeAria: "तुम्ही ऐकत असलेला कोड टाका. ऑडिओ प्ले करण्यासाठी स्पेस दाबा.", + error: "पुष्टीकरण अयशस्वी झाले. कृपया नंतर पुन्हा प्रयत्न करा.", + expired: "पुष्टीकरण कालबाह्य झाले आहे. कृपया पुन्हा प्रयत्न करा.", + footer: 'द्वारे संरक्षित ALTCHA', + getAudioChallenge: "ऑडिओ चॅलेंज मिळवा", + label: "मी रोबोट नाही", + loading: "लोड होत आहे...", + reload: "पुन्हा लोड करा", + verify: "पुष्टीकरण करा", + verificationRequired: "पडताळणी आवश्यक आहे!", + verified: "पुष्टीकरण झाले", + verifying: "पुष्टीकरण करत आहे...", + waitAlert: "पुष्टीकरण करत आहे... कृपया थोडा वेळ थांबा.", + cancel: "रद्द करा", + enterCodeFromImage: "पुढे जाण्यासाठी, कृपया खालील प्रतिमेतील कोड प्रविष्ट करा." + }; + globalThis.$altcha.i18n.set("mr", i18n); +})); diff --git a/frontend/node_modules/altcha/dist/i18n/mt.d.ts b/frontend/node_modules/altcha/dist/i18n/mt.d.ts new file mode 100644 index 0000000..076081a --- /dev/null +++ b/frontend/node_modules/altcha/dist/i18n/mt.d.ts @@ -0,0 +1 @@ +declare module 'altcha/i18n/mt'; export {}; diff --git a/frontend/node_modules/altcha/dist/i18n/mt.js b/frontend/node_modules/altcha/dist/i18n/mt.js new file mode 100644 index 0000000..813ff4c --- /dev/null +++ b/frontend/node_modules/altcha/dist/i18n/mt.js @@ -0,0 +1,128 @@ +const noop = () => { +}; +function safe_not_equal(a, b) { + return a != a ? b == b : a !== b || a !== null && typeof a === "object" || typeof a === "function"; +} +function subscribe_to_store(store2, run, invalidate) { + if (store2 == null) { + run(void 0); + return noop; + } + const unsub = untrack( + () => store2.subscribe( + run, + // @ts-expect-error + invalidate + ) + ); + return unsub.unsubscribe ? () => unsub.unsubscribe() : unsub; +} +const subscriber_queue = []; +function writable(value, start = noop) { + let stop = null; + const subscribers = /* @__PURE__ */ new Set(); + function set(new_value) { + if (safe_not_equal(value, new_value)) { + value = new_value; + if (stop) { + const run_queue = !subscriber_queue.length; + for (const subscriber of subscribers) { + subscriber[1](); + subscriber_queue.push(subscriber, value); + } + if (run_queue) { + for (let i = 0; i < subscriber_queue.length; i += 2) { + subscriber_queue[i][0](subscriber_queue[i + 1]); + } + subscriber_queue.length = 0; + } + } + } + } + function update(fn) { + set(fn( + /** @type {T} */ + value + )); + } + function subscribe(run, invalidate = noop) { + const subscriber = [run, invalidate]; + subscribers.add(subscriber); + if (subscribers.size === 1) { + stop = start(set, update) || noop; + } + run( + /** @type {T} */ + value + ); + return () => { + subscribers.delete(subscriber); + if (subscribers.size === 0 && stop) { + stop(); + stop = null; + } + }; + } + return { set, update, subscribe }; +} +function get(store2) { + let value; + subscribe_to_store(store2, (_) => value = _)(); + return value; +} +let untracking = false; +function untrack(fn) { + var previous_untracking = untracking; + try { + untracking = true; + return fn(); + } finally { + untracking = previous_untracking; + } +} +function store(defaultValue) { + const scope = { + get: (name) => { + return get(scope.store)[name]; + }, + set: (name, value) => { + if (typeof name === "string") { + Object.assign(get(scope.store), { + [name]: value + }); + } else { + Object.assign(get(scope.store), name); + } + scope.store.set(get(scope.store)); + }, + store: writable(defaultValue) + }; + return scope; +} +globalThis.$altcha = globalThis.$altcha || { + algorithms: /* @__PURE__ */ new Map(), + defaults: store({}), + i18n: store({}), + instances: /* @__PURE__ */ new Set(), + plugins: /* @__PURE__ */ new Set() +}; +const i18n = { + ariaLinkLabel: "Altcha (sit uffiċjali)", + enterCode: "Idħol il-kodiċi", + enterCodeAria: "Idħol il-kodiċi li tisma'. Agħfas Spazju biex tindaqq l-awdjo.", + error: "Il-verifika falliet. Erġa’ pprova aktar tard.", + expired: "Il-verifika skadiet. Erġa’ pprova.", + footer: 'Protett minn ALTCHA', + getAudioChallenge: "Ikseb sfida bl-awdjo", + label: "M’inix robot", + loading: "Qed jitgħabba...", + reload: "Ittella’ mill-ġdid", + verify: "Ivverifika", + verificationRequired: "Verifika meħtieġa!", + verified: "Ivverifikat", + verifying: "Verifika għaddejja...", + waitAlert: "Verifika għaddejja... stenna ftit.", + cancel: "Ikkanċella", + enterCodeFromImage: "Biex tipproċedi, jekk jogħġbok daħħal il-kodiċi mill-immaġni hawn taħt." +}; +globalThis.$altcha.i18n.set("mt", i18n); diff --git a/frontend/node_modules/altcha/dist/i18n/mt.umd.cjs b/frontend/node_modules/altcha/dist/i18n/mt.umd.cjs new file mode 100644 index 0000000..6de632d --- /dev/null +++ b/frontend/node_modules/altcha/dist/i18n/mt.umd.cjs @@ -0,0 +1,133 @@ +(function(factory) { + typeof define === "function" && define.amd ? define(factory) : factory(); +})((function() { + "use strict"; + const noop = () => { + }; + function safe_not_equal(a, b) { + return a != a ? b == b : a !== b || a !== null && typeof a === "object" || typeof a === "function"; + } + function subscribe_to_store(store2, run, invalidate) { + if (store2 == null) { + run(void 0); + return noop; + } + const unsub = untrack( + () => store2.subscribe( + run, + // @ts-expect-error + invalidate + ) + ); + return unsub.unsubscribe ? () => unsub.unsubscribe() : unsub; + } + const subscriber_queue = []; + function writable(value, start = noop) { + let stop = null; + const subscribers = /* @__PURE__ */ new Set(); + function set(new_value) { + if (safe_not_equal(value, new_value)) { + value = new_value; + if (stop) { + const run_queue = !subscriber_queue.length; + for (const subscriber of subscribers) { + subscriber[1](); + subscriber_queue.push(subscriber, value); + } + if (run_queue) { + for (let i = 0; i < subscriber_queue.length; i += 2) { + subscriber_queue[i][0](subscriber_queue[i + 1]); + } + subscriber_queue.length = 0; + } + } + } + } + function update(fn) { + set(fn( + /** @type {T} */ + value + )); + } + function subscribe(run, invalidate = noop) { + const subscriber = [run, invalidate]; + subscribers.add(subscriber); + if (subscribers.size === 1) { + stop = start(set, update) || noop; + } + run( + /** @type {T} */ + value + ); + return () => { + subscribers.delete(subscriber); + if (subscribers.size === 0 && stop) { + stop(); + stop = null; + } + }; + } + return { set, update, subscribe }; + } + function get(store2) { + let value; + subscribe_to_store(store2, (_) => value = _)(); + return value; + } + let untracking = false; + function untrack(fn) { + var previous_untracking = untracking; + try { + untracking = true; + return fn(); + } finally { + untracking = previous_untracking; + } + } + function store(defaultValue) { + const scope = { + get: (name) => { + return get(scope.store)[name]; + }, + set: (name, value) => { + if (typeof name === "string") { + Object.assign(get(scope.store), { + [name]: value + }); + } else { + Object.assign(get(scope.store), name); + } + scope.store.set(get(scope.store)); + }, + store: writable(defaultValue) + }; + return scope; + } + globalThis.$altcha = globalThis.$altcha || { + algorithms: /* @__PURE__ */ new Map(), + defaults: store({}), + i18n: store({}), + instances: /* @__PURE__ */ new Set(), + plugins: /* @__PURE__ */ new Set() + }; + const i18n = { + ariaLinkLabel: "Altcha (sit uffiċjali)", + enterCode: "Idħol il-kodiċi", + enterCodeAria: "Idħol il-kodiċi li tisma'. Agħfas Spazju biex tindaqq l-awdjo.", + error: "Il-verifika falliet. Erġa’ pprova aktar tard.", + expired: "Il-verifika skadiet. Erġa’ pprova.", + footer: 'Protett minn ALTCHA', + getAudioChallenge: "Ikseb sfida bl-awdjo", + label: "M’inix robot", + loading: "Qed jitgħabba...", + reload: "Ittella’ mill-ġdid", + verify: "Ivverifika", + verificationRequired: "Verifika meħtieġa!", + verified: "Ivverifikat", + verifying: "Verifika għaddejja...", + waitAlert: "Verifika għaddejja... stenna ftit.", + cancel: "Ikkanċella", + enterCodeFromImage: "Biex tipproċedi, jekk jogħġbok daħħal il-kodiċi mill-immaġni hawn taħt." + }; + globalThis.$altcha.i18n.set("mt", i18n); +})); diff --git a/frontend/node_modules/altcha/dist/i18n/nb.d.ts b/frontend/node_modules/altcha/dist/i18n/nb.d.ts new file mode 100644 index 0000000..ccb08aa --- /dev/null +++ b/frontend/node_modules/altcha/dist/i18n/nb.d.ts @@ -0,0 +1 @@ +declare module 'altcha/i18n/nb'; export {}; diff --git a/frontend/node_modules/altcha/dist/i18n/nb.js b/frontend/node_modules/altcha/dist/i18n/nb.js new file mode 100644 index 0000000..f5b9665 --- /dev/null +++ b/frontend/node_modules/altcha/dist/i18n/nb.js @@ -0,0 +1,128 @@ +const noop = () => { +}; +function safe_not_equal(a, b) { + return a != a ? b == b : a !== b || a !== null && typeof a === "object" || typeof a === "function"; +} +function subscribe_to_store(store2, run, invalidate) { + if (store2 == null) { + run(void 0); + return noop; + } + const unsub = untrack( + () => store2.subscribe( + run, + // @ts-expect-error + invalidate + ) + ); + return unsub.unsubscribe ? () => unsub.unsubscribe() : unsub; +} +const subscriber_queue = []; +function writable(value, start = noop) { + let stop = null; + const subscribers = /* @__PURE__ */ new Set(); + function set(new_value) { + if (safe_not_equal(value, new_value)) { + value = new_value; + if (stop) { + const run_queue = !subscriber_queue.length; + for (const subscriber of subscribers) { + subscriber[1](); + subscriber_queue.push(subscriber, value); + } + if (run_queue) { + for (let i = 0; i < subscriber_queue.length; i += 2) { + subscriber_queue[i][0](subscriber_queue[i + 1]); + } + subscriber_queue.length = 0; + } + } + } + } + function update(fn) { + set(fn( + /** @type {T} */ + value + )); + } + function subscribe(run, invalidate = noop) { + const subscriber = [run, invalidate]; + subscribers.add(subscriber); + if (subscribers.size === 1) { + stop = start(set, update) || noop; + } + run( + /** @type {T} */ + value + ); + return () => { + subscribers.delete(subscriber); + if (subscribers.size === 0 && stop) { + stop(); + stop = null; + } + }; + } + return { set, update, subscribe }; +} +function get(store2) { + let value; + subscribe_to_store(store2, (_) => value = _)(); + return value; +} +let untracking = false; +function untrack(fn) { + var previous_untracking = untracking; + try { + untracking = true; + return fn(); + } finally { + untracking = previous_untracking; + } +} +function store(defaultValue) { + const scope = { + get: (name) => { + return get(scope.store)[name]; + }, + set: (name, value) => { + if (typeof name === "string") { + Object.assign(get(scope.store), { + [name]: value + }); + } else { + Object.assign(get(scope.store), name); + } + scope.store.set(get(scope.store)); + }, + store: writable(defaultValue) + }; + return scope; +} +globalThis.$altcha = globalThis.$altcha || { + algorithms: /* @__PURE__ */ new Map(), + defaults: store({}), + i18n: store({}), + instances: /* @__PURE__ */ new Set(), + plugins: /* @__PURE__ */ new Set() +}; +const i18n = { + ariaLinkLabel: "Altcha (offisiell nettside)", + enterCode: "Skriv inn kode", + enterCodeAria: "Skriv inn koden du hører. Trykk på Space for å spille av lyden.", + error: "Verifisering mislyktes. Prøv igjen senere.", + expired: "Verifiseringen utløp. Prøv igjen.", + footer: 'Beskyttet av ALTCHA', + getAudioChallenge: "Få en lydutfordring", + label: "Jeg er ikke en robot", + loading: "Laster...", + reload: "Last på nytt", + verify: "Verifiser", + verificationRequired: "Verifisering kreves!", + verified: "Verifisert", + verifying: "Verifiserer...", + waitAlert: "Verifiserer... vennligst vent.", + cancel: "Avbryt", + enterCodeFromImage: "For å fortsette, vennligst skriv inn koden fra bildet nedenfor." +}; +globalThis.$altcha.i18n.set("nb", i18n); diff --git a/frontend/node_modules/altcha/dist/i18n/nb.umd.cjs b/frontend/node_modules/altcha/dist/i18n/nb.umd.cjs new file mode 100644 index 0000000..82bf0b5 --- /dev/null +++ b/frontend/node_modules/altcha/dist/i18n/nb.umd.cjs @@ -0,0 +1,133 @@ +(function(factory) { + typeof define === "function" && define.amd ? define(factory) : factory(); +})((function() { + "use strict"; + const noop = () => { + }; + function safe_not_equal(a, b) { + return a != a ? b == b : a !== b || a !== null && typeof a === "object" || typeof a === "function"; + } + function subscribe_to_store(store2, run, invalidate) { + if (store2 == null) { + run(void 0); + return noop; + } + const unsub = untrack( + () => store2.subscribe( + run, + // @ts-expect-error + invalidate + ) + ); + return unsub.unsubscribe ? () => unsub.unsubscribe() : unsub; + } + const subscriber_queue = []; + function writable(value, start = noop) { + let stop = null; + const subscribers = /* @__PURE__ */ new Set(); + function set(new_value) { + if (safe_not_equal(value, new_value)) { + value = new_value; + if (stop) { + const run_queue = !subscriber_queue.length; + for (const subscriber of subscribers) { + subscriber[1](); + subscriber_queue.push(subscriber, value); + } + if (run_queue) { + for (let i = 0; i < subscriber_queue.length; i += 2) { + subscriber_queue[i][0](subscriber_queue[i + 1]); + } + subscriber_queue.length = 0; + } + } + } + } + function update(fn) { + set(fn( + /** @type {T} */ + value + )); + } + function subscribe(run, invalidate = noop) { + const subscriber = [run, invalidate]; + subscribers.add(subscriber); + if (subscribers.size === 1) { + stop = start(set, update) || noop; + } + run( + /** @type {T} */ + value + ); + return () => { + subscribers.delete(subscriber); + if (subscribers.size === 0 && stop) { + stop(); + stop = null; + } + }; + } + return { set, update, subscribe }; + } + function get(store2) { + let value; + subscribe_to_store(store2, (_) => value = _)(); + return value; + } + let untracking = false; + function untrack(fn) { + var previous_untracking = untracking; + try { + untracking = true; + return fn(); + } finally { + untracking = previous_untracking; + } + } + function store(defaultValue) { + const scope = { + get: (name) => { + return get(scope.store)[name]; + }, + set: (name, value) => { + if (typeof name === "string") { + Object.assign(get(scope.store), { + [name]: value + }); + } else { + Object.assign(get(scope.store), name); + } + scope.store.set(get(scope.store)); + }, + store: writable(defaultValue) + }; + return scope; + } + globalThis.$altcha = globalThis.$altcha || { + algorithms: /* @__PURE__ */ new Map(), + defaults: store({}), + i18n: store({}), + instances: /* @__PURE__ */ new Set(), + plugins: /* @__PURE__ */ new Set() + }; + const i18n = { + ariaLinkLabel: "Altcha (offisiell nettside)", + enterCode: "Skriv inn kode", + enterCodeAria: "Skriv inn koden du hører. Trykk på Space for å spille av lyden.", + error: "Verifisering mislyktes. Prøv igjen senere.", + expired: "Verifiseringen utløp. Prøv igjen.", + footer: 'Beskyttet av ALTCHA', + getAudioChallenge: "Få en lydutfordring", + label: "Jeg er ikke en robot", + loading: "Laster...", + reload: "Last på nytt", + verify: "Verifiser", + verificationRequired: "Verifisering kreves!", + verified: "Verifisert", + verifying: "Verifiserer...", + waitAlert: "Verifiserer... vennligst vent.", + cancel: "Avbryt", + enterCodeFromImage: "For å fortsette, vennligst skriv inn koden fra bildet nedenfor." + }; + globalThis.$altcha.i18n.set("nb", i18n); +})); diff --git a/frontend/node_modules/altcha/dist/i18n/nl.d.ts b/frontend/node_modules/altcha/dist/i18n/nl.d.ts new file mode 100644 index 0000000..2cc967c --- /dev/null +++ b/frontend/node_modules/altcha/dist/i18n/nl.d.ts @@ -0,0 +1 @@ +declare module 'altcha/i18n/nl'; export {}; diff --git a/frontend/node_modules/altcha/dist/i18n/nl.js b/frontend/node_modules/altcha/dist/i18n/nl.js new file mode 100644 index 0000000..d442ed0 --- /dev/null +++ b/frontend/node_modules/altcha/dist/i18n/nl.js @@ -0,0 +1,128 @@ +const noop = () => { +}; +function safe_not_equal(a, b) { + return a != a ? b == b : a !== b || a !== null && typeof a === "object" || typeof a === "function"; +} +function subscribe_to_store(store2, run, invalidate) { + if (store2 == null) { + run(void 0); + return noop; + } + const unsub = untrack( + () => store2.subscribe( + run, + // @ts-expect-error + invalidate + ) + ); + return unsub.unsubscribe ? () => unsub.unsubscribe() : unsub; +} +const subscriber_queue = []; +function writable(value, start = noop) { + let stop = null; + const subscribers = /* @__PURE__ */ new Set(); + function set(new_value) { + if (safe_not_equal(value, new_value)) { + value = new_value; + if (stop) { + const run_queue = !subscriber_queue.length; + for (const subscriber of subscribers) { + subscriber[1](); + subscriber_queue.push(subscriber, value); + } + if (run_queue) { + for (let i = 0; i < subscriber_queue.length; i += 2) { + subscriber_queue[i][0](subscriber_queue[i + 1]); + } + subscriber_queue.length = 0; + } + } + } + } + function update(fn) { + set(fn( + /** @type {T} */ + value + )); + } + function subscribe(run, invalidate = noop) { + const subscriber = [run, invalidate]; + subscribers.add(subscriber); + if (subscribers.size === 1) { + stop = start(set, update) || noop; + } + run( + /** @type {T} */ + value + ); + return () => { + subscribers.delete(subscriber); + if (subscribers.size === 0 && stop) { + stop(); + stop = null; + } + }; + } + return { set, update, subscribe }; +} +function get(store2) { + let value; + subscribe_to_store(store2, (_) => value = _)(); + return value; +} +let untracking = false; +function untrack(fn) { + var previous_untracking = untracking; + try { + untracking = true; + return fn(); + } finally { + untracking = previous_untracking; + } +} +function store(defaultValue) { + const scope = { + get: (name) => { + return get(scope.store)[name]; + }, + set: (name, value) => { + if (typeof name === "string") { + Object.assign(get(scope.store), { + [name]: value + }); + } else { + Object.assign(get(scope.store), name); + } + scope.store.set(get(scope.store)); + }, + store: writable(defaultValue) + }; + return scope; +} +globalThis.$altcha = globalThis.$altcha || { + algorithms: /* @__PURE__ */ new Map(), + defaults: store({}), + i18n: store({}), + instances: /* @__PURE__ */ new Set(), + plugins: /* @__PURE__ */ new Set() +}; +const i18n = { + ariaLinkLabel: "Altcha (officiële website)", + enterCode: "Voer code in", + enterCodeAria: "Voer de code in die je hoort. Druk op Spatie om de audio af te spelen.", + error: "Verificatie mislukt. Probeer het later opnieuw.", + expired: "Verificatie verlopen. Probeer het opnieuw.", + footer: 'Beschermd door ALTCHA', + getAudioChallenge: "Audio-uitdaging ontvangen", + label: "Ik ben geen robot", + loading: "Laden...", + reload: "Herladen", + verify: "Verifiëren", + verificationRequired: "Verificatie vereist!", + verified: "Geverifieerd", + verifying: "Bezig met verifiëren...", + waitAlert: "Bezig met verifiëren... even geduld a.u.b.", + cancel: "Annuleren", + enterCodeFromImage: "Om door te gaan, voert u de code uit de onderstaande afbeelding in." +}; +globalThis.$altcha.i18n.set("nl", i18n); diff --git a/frontend/node_modules/altcha/dist/i18n/nl.umd.cjs b/frontend/node_modules/altcha/dist/i18n/nl.umd.cjs new file mode 100644 index 0000000..d18f953 --- /dev/null +++ b/frontend/node_modules/altcha/dist/i18n/nl.umd.cjs @@ -0,0 +1,133 @@ +(function(factory) { + typeof define === "function" && define.amd ? define(factory) : factory(); +})((function() { + "use strict"; + const noop = () => { + }; + function safe_not_equal(a, b) { + return a != a ? b == b : a !== b || a !== null && typeof a === "object" || typeof a === "function"; + } + function subscribe_to_store(store2, run, invalidate) { + if (store2 == null) { + run(void 0); + return noop; + } + const unsub = untrack( + () => store2.subscribe( + run, + // @ts-expect-error + invalidate + ) + ); + return unsub.unsubscribe ? () => unsub.unsubscribe() : unsub; + } + const subscriber_queue = []; + function writable(value, start = noop) { + let stop = null; + const subscribers = /* @__PURE__ */ new Set(); + function set(new_value) { + if (safe_not_equal(value, new_value)) { + value = new_value; + if (stop) { + const run_queue = !subscriber_queue.length; + for (const subscriber of subscribers) { + subscriber[1](); + subscriber_queue.push(subscriber, value); + } + if (run_queue) { + for (let i = 0; i < subscriber_queue.length; i += 2) { + subscriber_queue[i][0](subscriber_queue[i + 1]); + } + subscriber_queue.length = 0; + } + } + } + } + function update(fn) { + set(fn( + /** @type {T} */ + value + )); + } + function subscribe(run, invalidate = noop) { + const subscriber = [run, invalidate]; + subscribers.add(subscriber); + if (subscribers.size === 1) { + stop = start(set, update) || noop; + } + run( + /** @type {T} */ + value + ); + return () => { + subscribers.delete(subscriber); + if (subscribers.size === 0 && stop) { + stop(); + stop = null; + } + }; + } + return { set, update, subscribe }; + } + function get(store2) { + let value; + subscribe_to_store(store2, (_) => value = _)(); + return value; + } + let untracking = false; + function untrack(fn) { + var previous_untracking = untracking; + try { + untracking = true; + return fn(); + } finally { + untracking = previous_untracking; + } + } + function store(defaultValue) { + const scope = { + get: (name) => { + return get(scope.store)[name]; + }, + set: (name, value) => { + if (typeof name === "string") { + Object.assign(get(scope.store), { + [name]: value + }); + } else { + Object.assign(get(scope.store), name); + } + scope.store.set(get(scope.store)); + }, + store: writable(defaultValue) + }; + return scope; + } + globalThis.$altcha = globalThis.$altcha || { + algorithms: /* @__PURE__ */ new Map(), + defaults: store({}), + i18n: store({}), + instances: /* @__PURE__ */ new Set(), + plugins: /* @__PURE__ */ new Set() + }; + const i18n = { + ariaLinkLabel: "Altcha (officiële website)", + enterCode: "Voer code in", + enterCodeAria: "Voer de code in die je hoort. Druk op Spatie om de audio af te spelen.", + error: "Verificatie mislukt. Probeer het later opnieuw.", + expired: "Verificatie verlopen. Probeer het opnieuw.", + footer: 'Beschermd door ALTCHA', + getAudioChallenge: "Audio-uitdaging ontvangen", + label: "Ik ben geen robot", + loading: "Laden...", + reload: "Herladen", + verify: "Verifiëren", + verificationRequired: "Verificatie vereist!", + verified: "Geverifieerd", + verifying: "Bezig met verifiëren...", + waitAlert: "Bezig met verifiëren... even geduld a.u.b.", + cancel: "Annuleren", + enterCodeFromImage: "Om door te gaan, voert u de code uit de onderstaande afbeelding in." + }; + globalThis.$altcha.i18n.set("nl", i18n); +})); diff --git a/frontend/node_modules/altcha/dist/i18n/pl.d.ts b/frontend/node_modules/altcha/dist/i18n/pl.d.ts new file mode 100644 index 0000000..1303e80 --- /dev/null +++ b/frontend/node_modules/altcha/dist/i18n/pl.d.ts @@ -0,0 +1 @@ +declare module 'altcha/i18n/pl'; export {}; diff --git a/frontend/node_modules/altcha/dist/i18n/pl.js b/frontend/node_modules/altcha/dist/i18n/pl.js new file mode 100644 index 0000000..9518fc8 --- /dev/null +++ b/frontend/node_modules/altcha/dist/i18n/pl.js @@ -0,0 +1,128 @@ +const noop = () => { +}; +function safe_not_equal(a, b) { + return a != a ? b == b : a !== b || a !== null && typeof a === "object" || typeof a === "function"; +} +function subscribe_to_store(store2, run, invalidate) { + if (store2 == null) { + run(void 0); + return noop; + } + const unsub = untrack( + () => store2.subscribe( + run, + // @ts-expect-error + invalidate + ) + ); + return unsub.unsubscribe ? () => unsub.unsubscribe() : unsub; +} +const subscriber_queue = []; +function writable(value, start = noop) { + let stop = null; + const subscribers = /* @__PURE__ */ new Set(); + function set(new_value) { + if (safe_not_equal(value, new_value)) { + value = new_value; + if (stop) { + const run_queue = !subscriber_queue.length; + for (const subscriber of subscribers) { + subscriber[1](); + subscriber_queue.push(subscriber, value); + } + if (run_queue) { + for (let i = 0; i < subscriber_queue.length; i += 2) { + subscriber_queue[i][0](subscriber_queue[i + 1]); + } + subscriber_queue.length = 0; + } + } + } + } + function update(fn) { + set(fn( + /** @type {T} */ + value + )); + } + function subscribe(run, invalidate = noop) { + const subscriber = [run, invalidate]; + subscribers.add(subscriber); + if (subscribers.size === 1) { + stop = start(set, update) || noop; + } + run( + /** @type {T} */ + value + ); + return () => { + subscribers.delete(subscriber); + if (subscribers.size === 0 && stop) { + stop(); + stop = null; + } + }; + } + return { set, update, subscribe }; +} +function get(store2) { + let value; + subscribe_to_store(store2, (_) => value = _)(); + return value; +} +let untracking = false; +function untrack(fn) { + var previous_untracking = untracking; + try { + untracking = true; + return fn(); + } finally { + untracking = previous_untracking; + } +} +function store(defaultValue) { + const scope = { + get: (name) => { + return get(scope.store)[name]; + }, + set: (name, value) => { + if (typeof name === "string") { + Object.assign(get(scope.store), { + [name]: value + }); + } else { + Object.assign(get(scope.store), name); + } + scope.store.set(get(scope.store)); + }, + store: writable(defaultValue) + }; + return scope; +} +globalThis.$altcha = globalThis.$altcha || { + algorithms: /* @__PURE__ */ new Map(), + defaults: store({}), + i18n: store({}), + instances: /* @__PURE__ */ new Set(), + plugins: /* @__PURE__ */ new Set() +}; +const i18n = { + ariaLinkLabel: "Altcha (oficjalna strona internetowa)", + enterCode: "Wprowadź kod", + enterCodeAria: "Wpisz kod, który słyszysz. Naciśnij Spację, aby odtworzyć dźwięk.", + error: "Weryfikacja nie powiodła się. Spróbuj ponownie później.", + expired: "Weryfikacja wygasła. Spróbuj ponownie.", + footer: 'Chronione przez ALTCHA', + getAudioChallenge: "Pobierz zadanie dźwiękowe", + label: "Nie jestem robotem", + loading: "Ładowanie...", + reload: "Odśwież", + verify: "Zweryfikuj", + verificationRequired: "Wymagana weryfikacja!", + verified: "Zweryfikowano", + verifying: "Weryfikacja...", + waitAlert: "Trwa weryfikacja... proszę czekać.", + cancel: "Anuluj", + enterCodeFromImage: "Aby kontynuować, wprowadź kod z poniższego obrazka." +}; +globalThis.$altcha.i18n.set("pl", i18n); diff --git a/frontend/node_modules/altcha/dist/i18n/pl.umd.cjs b/frontend/node_modules/altcha/dist/i18n/pl.umd.cjs new file mode 100644 index 0000000..3cba68d --- /dev/null +++ b/frontend/node_modules/altcha/dist/i18n/pl.umd.cjs @@ -0,0 +1,133 @@ +(function(factory) { + typeof define === "function" && define.amd ? define(factory) : factory(); +})((function() { + "use strict"; + const noop = () => { + }; + function safe_not_equal(a, b) { + return a != a ? b == b : a !== b || a !== null && typeof a === "object" || typeof a === "function"; + } + function subscribe_to_store(store2, run, invalidate) { + if (store2 == null) { + run(void 0); + return noop; + } + const unsub = untrack( + () => store2.subscribe( + run, + // @ts-expect-error + invalidate + ) + ); + return unsub.unsubscribe ? () => unsub.unsubscribe() : unsub; + } + const subscriber_queue = []; + function writable(value, start = noop) { + let stop = null; + const subscribers = /* @__PURE__ */ new Set(); + function set(new_value) { + if (safe_not_equal(value, new_value)) { + value = new_value; + if (stop) { + const run_queue = !subscriber_queue.length; + for (const subscriber of subscribers) { + subscriber[1](); + subscriber_queue.push(subscriber, value); + } + if (run_queue) { + for (let i = 0; i < subscriber_queue.length; i += 2) { + subscriber_queue[i][0](subscriber_queue[i + 1]); + } + subscriber_queue.length = 0; + } + } + } + } + function update(fn) { + set(fn( + /** @type {T} */ + value + )); + } + function subscribe(run, invalidate = noop) { + const subscriber = [run, invalidate]; + subscribers.add(subscriber); + if (subscribers.size === 1) { + stop = start(set, update) || noop; + } + run( + /** @type {T} */ + value + ); + return () => { + subscribers.delete(subscriber); + if (subscribers.size === 0 && stop) { + stop(); + stop = null; + } + }; + } + return { set, update, subscribe }; + } + function get(store2) { + let value; + subscribe_to_store(store2, (_) => value = _)(); + return value; + } + let untracking = false; + function untrack(fn) { + var previous_untracking = untracking; + try { + untracking = true; + return fn(); + } finally { + untracking = previous_untracking; + } + } + function store(defaultValue) { + const scope = { + get: (name) => { + return get(scope.store)[name]; + }, + set: (name, value) => { + if (typeof name === "string") { + Object.assign(get(scope.store), { + [name]: value + }); + } else { + Object.assign(get(scope.store), name); + } + scope.store.set(get(scope.store)); + }, + store: writable(defaultValue) + }; + return scope; + } + globalThis.$altcha = globalThis.$altcha || { + algorithms: /* @__PURE__ */ new Map(), + defaults: store({}), + i18n: store({}), + instances: /* @__PURE__ */ new Set(), + plugins: /* @__PURE__ */ new Set() + }; + const i18n = { + ariaLinkLabel: "Altcha (oficjalna strona internetowa)", + enterCode: "Wprowadź kod", + enterCodeAria: "Wpisz kod, który słyszysz. Naciśnij Spację, aby odtworzyć dźwięk.", + error: "Weryfikacja nie powiodła się. Spróbuj ponownie później.", + expired: "Weryfikacja wygasła. Spróbuj ponownie.", + footer: 'Chronione przez ALTCHA', + getAudioChallenge: "Pobierz zadanie dźwiękowe", + label: "Nie jestem robotem", + loading: "Ładowanie...", + reload: "Odśwież", + verify: "Zweryfikuj", + verificationRequired: "Wymagana weryfikacja!", + verified: "Zweryfikowano", + verifying: "Weryfikacja...", + waitAlert: "Trwa weryfikacja... proszę czekać.", + cancel: "Anuluj", + enterCodeFromImage: "Aby kontynuować, wprowadź kod z poniższego obrazka." + }; + globalThis.$altcha.i18n.set("pl", i18n); +})); diff --git a/frontend/node_modules/altcha/dist/i18n/pt-br.js b/frontend/node_modules/altcha/dist/i18n/pt-br.js new file mode 100644 index 0000000..bc6e47b --- /dev/null +++ b/frontend/node_modules/altcha/dist/i18n/pt-br.js @@ -0,0 +1,128 @@ +const noop = () => { +}; +function safe_not_equal(a, b) { + return a != a ? b == b : a !== b || a !== null && typeof a === "object" || typeof a === "function"; +} +function subscribe_to_store(store2, run, invalidate) { + if (store2 == null) { + run(void 0); + return noop; + } + const unsub = untrack( + () => store2.subscribe( + run, + // @ts-expect-error + invalidate + ) + ); + return unsub.unsubscribe ? () => unsub.unsubscribe() : unsub; +} +const subscriber_queue = []; +function writable(value, start = noop) { + let stop = null; + const subscribers = /* @__PURE__ */ new Set(); + function set(new_value) { + if (safe_not_equal(value, new_value)) { + value = new_value; + if (stop) { + const run_queue = !subscriber_queue.length; + for (const subscriber of subscribers) { + subscriber[1](); + subscriber_queue.push(subscriber, value); + } + if (run_queue) { + for (let i = 0; i < subscriber_queue.length; i += 2) { + subscriber_queue[i][0](subscriber_queue[i + 1]); + } + subscriber_queue.length = 0; + } + } + } + } + function update(fn) { + set(fn( + /** @type {T} */ + value + )); + } + function subscribe(run, invalidate = noop) { + const subscriber = [run, invalidate]; + subscribers.add(subscriber); + if (subscribers.size === 1) { + stop = start(set, update) || noop; + } + run( + /** @type {T} */ + value + ); + return () => { + subscribers.delete(subscriber); + if (subscribers.size === 0 && stop) { + stop(); + stop = null; + } + }; + } + return { set, update, subscribe }; +} +function get(store2) { + let value; + subscribe_to_store(store2, (_) => value = _)(); + return value; +} +let untracking = false; +function untrack(fn) { + var previous_untracking = untracking; + try { + untracking = true; + return fn(); + } finally { + untracking = previous_untracking; + } +} +function store(defaultValue) { + const scope = { + get: (name) => { + return get(scope.store)[name]; + }, + set: (name, value) => { + if (typeof name === "string") { + Object.assign(get(scope.store), { + [name]: value + }); + } else { + Object.assign(get(scope.store), name); + } + scope.store.set(get(scope.store)); + }, + store: writable(defaultValue) + }; + return scope; +} +globalThis.$altcha = globalThis.$altcha || { + algorithms: /* @__PURE__ */ new Map(), + defaults: store({}), + i18n: store({}), + instances: /* @__PURE__ */ new Set(), + plugins: /* @__PURE__ */ new Set() +}; +const i18n = { + ariaLinkLabel: "Altcha (site oficial)", + enterCode: "Digite o código", + enterCodeAria: "Digite o código que você ouve. Pressione Espaço para reproduzir o áudio.", + error: "Falha na verificação. Por favor, tente novamente mais tarde.", + expired: "Verificação expirada. Por favor, tente novamente.", + footer: 'Protegido por ALTCHA', + getAudioChallenge: "Obter desafio de áudio", + label: "Eu não sou um robô", + loading: "Carregando...", + reload: "Recarregar", + verify: "Verificar", + verificationRequired: "Verificação necessária!", + verified: "Verificado", + verifying: "Verificando...", + waitAlert: "Verificando... por favor aguarde.", + cancel: "Cancelar", + enterCodeFromImage: "Para prosseguir, digite o código da imagem abaixo." +}; +globalThis.$altcha.i18n.set("pt-br", i18n); diff --git a/frontend/node_modules/altcha/dist/i18n/pt-br.umd.cjs b/frontend/node_modules/altcha/dist/i18n/pt-br.umd.cjs new file mode 100644 index 0000000..d040828 --- /dev/null +++ b/frontend/node_modules/altcha/dist/i18n/pt-br.umd.cjs @@ -0,0 +1,133 @@ +(function(factory) { + typeof define === "function" && define.amd ? define(factory) : factory(); +})((function() { + "use strict"; + const noop = () => { + }; + function safe_not_equal(a, b) { + return a != a ? b == b : a !== b || a !== null && typeof a === "object" || typeof a === "function"; + } + function subscribe_to_store(store2, run, invalidate) { + if (store2 == null) { + run(void 0); + return noop; + } + const unsub = untrack( + () => store2.subscribe( + run, + // @ts-expect-error + invalidate + ) + ); + return unsub.unsubscribe ? () => unsub.unsubscribe() : unsub; + } + const subscriber_queue = []; + function writable(value, start = noop) { + let stop = null; + const subscribers = /* @__PURE__ */ new Set(); + function set(new_value) { + if (safe_not_equal(value, new_value)) { + value = new_value; + if (stop) { + const run_queue = !subscriber_queue.length; + for (const subscriber of subscribers) { + subscriber[1](); + subscriber_queue.push(subscriber, value); + } + if (run_queue) { + for (let i = 0; i < subscriber_queue.length; i += 2) { + subscriber_queue[i][0](subscriber_queue[i + 1]); + } + subscriber_queue.length = 0; + } + } + } + } + function update(fn) { + set(fn( + /** @type {T} */ + value + )); + } + function subscribe(run, invalidate = noop) { + const subscriber = [run, invalidate]; + subscribers.add(subscriber); + if (subscribers.size === 1) { + stop = start(set, update) || noop; + } + run( + /** @type {T} */ + value + ); + return () => { + subscribers.delete(subscriber); + if (subscribers.size === 0 && stop) { + stop(); + stop = null; + } + }; + } + return { set, update, subscribe }; + } + function get(store2) { + let value; + subscribe_to_store(store2, (_) => value = _)(); + return value; + } + let untracking = false; + function untrack(fn) { + var previous_untracking = untracking; + try { + untracking = true; + return fn(); + } finally { + untracking = previous_untracking; + } + } + function store(defaultValue) { + const scope = { + get: (name) => { + return get(scope.store)[name]; + }, + set: (name, value) => { + if (typeof name === "string") { + Object.assign(get(scope.store), { + [name]: value + }); + } else { + Object.assign(get(scope.store), name); + } + scope.store.set(get(scope.store)); + }, + store: writable(defaultValue) + }; + return scope; + } + globalThis.$altcha = globalThis.$altcha || { + algorithms: /* @__PURE__ */ new Map(), + defaults: store({}), + i18n: store({}), + instances: /* @__PURE__ */ new Set(), + plugins: /* @__PURE__ */ new Set() + }; + const i18n = { + ariaLinkLabel: "Altcha (site oficial)", + enterCode: "Digite o código", + enterCodeAria: "Digite o código que você ouve. Pressione Espaço para reproduzir o áudio.", + error: "Falha na verificação. Por favor, tente novamente mais tarde.", + expired: "Verificação expirada. Por favor, tente novamente.", + footer: 'Protegido por ALTCHA', + getAudioChallenge: "Obter desafio de áudio", + label: "Eu não sou um robô", + loading: "Carregando...", + reload: "Recarregar", + verify: "Verificar", + verificationRequired: "Verificação necessária!", + verified: "Verificado", + verifying: "Verificando...", + waitAlert: "Verificando... por favor aguarde.", + cancel: "Cancelar", + enterCodeFromImage: "Para prosseguir, digite o código da imagem abaixo." + }; + globalThis.$altcha.i18n.set("pt-br", i18n); +})); diff --git a/frontend/node_modules/altcha/dist/i18n/pt-pt.js b/frontend/node_modules/altcha/dist/i18n/pt-pt.js new file mode 100644 index 0000000..a0b691d --- /dev/null +++ b/frontend/node_modules/altcha/dist/i18n/pt-pt.js @@ -0,0 +1,128 @@ +const noop = () => { +}; +function safe_not_equal(a, b) { + return a != a ? b == b : a !== b || a !== null && typeof a === "object" || typeof a === "function"; +} +function subscribe_to_store(store2, run, invalidate) { + if (store2 == null) { + run(void 0); + return noop; + } + const unsub = untrack( + () => store2.subscribe( + run, + // @ts-expect-error + invalidate + ) + ); + return unsub.unsubscribe ? () => unsub.unsubscribe() : unsub; +} +const subscriber_queue = []; +function writable(value, start = noop) { + let stop = null; + const subscribers = /* @__PURE__ */ new Set(); + function set(new_value) { + if (safe_not_equal(value, new_value)) { + value = new_value; + if (stop) { + const run_queue = !subscriber_queue.length; + for (const subscriber of subscribers) { + subscriber[1](); + subscriber_queue.push(subscriber, value); + } + if (run_queue) { + for (let i = 0; i < subscriber_queue.length; i += 2) { + subscriber_queue[i][0](subscriber_queue[i + 1]); + } + subscriber_queue.length = 0; + } + } + } + } + function update(fn) { + set(fn( + /** @type {T} */ + value + )); + } + function subscribe(run, invalidate = noop) { + const subscriber = [run, invalidate]; + subscribers.add(subscriber); + if (subscribers.size === 1) { + stop = start(set, update) || noop; + } + run( + /** @type {T} */ + value + ); + return () => { + subscribers.delete(subscriber); + if (subscribers.size === 0 && stop) { + stop(); + stop = null; + } + }; + } + return { set, update, subscribe }; +} +function get(store2) { + let value; + subscribe_to_store(store2, (_) => value = _)(); + return value; +} +let untracking = false; +function untrack(fn) { + var previous_untracking = untracking; + try { + untracking = true; + return fn(); + } finally { + untracking = previous_untracking; + } +} +function store(defaultValue) { + const scope = { + get: (name) => { + return get(scope.store)[name]; + }, + set: (name, value) => { + if (typeof name === "string") { + Object.assign(get(scope.store), { + [name]: value + }); + } else { + Object.assign(get(scope.store), name); + } + scope.store.set(get(scope.store)); + }, + store: writable(defaultValue) + }; + return scope; +} +globalThis.$altcha = globalThis.$altcha || { + algorithms: /* @__PURE__ */ new Map(), + defaults: store({}), + i18n: store({}), + instances: /* @__PURE__ */ new Set(), + plugins: /* @__PURE__ */ new Set() +}; +const i18n = { + ariaLinkLabel: "Altcha (site oficial)", + enterCode: "Introduza o código", + enterCodeAria: "Introduza o código que ouve. Prima Espaço para reproduzir o áudio.", + error: "A verificação falhou. Por favor, tente novamente mais tarde.", + expired: "Verificação expirada. Por favor, tente novamente.", + footer: 'Protegido por ALTCHA', + getAudioChallenge: "Obter desafio de áudio", + label: "Não sou um robô", + loading: "A carregar...", + reload: "Recarregar", + verify: "Verificar", + verificationRequired: "Verificação necessária!", + verified: "Verificado", + verifying: "A verificar...", + waitAlert: "A verificar... por favor aguarde.", + cancel: "Cancelar", + enterCodeFromImage: "Para prosseguir, introduza o código da imagem abaixo." +}; +globalThis.$altcha.i18n.set("pt-pt", i18n); diff --git a/frontend/node_modules/altcha/dist/i18n/pt-pt.umd.cjs b/frontend/node_modules/altcha/dist/i18n/pt-pt.umd.cjs new file mode 100644 index 0000000..a65f29a --- /dev/null +++ b/frontend/node_modules/altcha/dist/i18n/pt-pt.umd.cjs @@ -0,0 +1,133 @@ +(function(factory) { + typeof define === "function" && define.amd ? define(factory) : factory(); +})((function() { + "use strict"; + const noop = () => { + }; + function safe_not_equal(a, b) { + return a != a ? b == b : a !== b || a !== null && typeof a === "object" || typeof a === "function"; + } + function subscribe_to_store(store2, run, invalidate) { + if (store2 == null) { + run(void 0); + return noop; + } + const unsub = untrack( + () => store2.subscribe( + run, + // @ts-expect-error + invalidate + ) + ); + return unsub.unsubscribe ? () => unsub.unsubscribe() : unsub; + } + const subscriber_queue = []; + function writable(value, start = noop) { + let stop = null; + const subscribers = /* @__PURE__ */ new Set(); + function set(new_value) { + if (safe_not_equal(value, new_value)) { + value = new_value; + if (stop) { + const run_queue = !subscriber_queue.length; + for (const subscriber of subscribers) { + subscriber[1](); + subscriber_queue.push(subscriber, value); + } + if (run_queue) { + for (let i = 0; i < subscriber_queue.length; i += 2) { + subscriber_queue[i][0](subscriber_queue[i + 1]); + } + subscriber_queue.length = 0; + } + } + } + } + function update(fn) { + set(fn( + /** @type {T} */ + value + )); + } + function subscribe(run, invalidate = noop) { + const subscriber = [run, invalidate]; + subscribers.add(subscriber); + if (subscribers.size === 1) { + stop = start(set, update) || noop; + } + run( + /** @type {T} */ + value + ); + return () => { + subscribers.delete(subscriber); + if (subscribers.size === 0 && stop) { + stop(); + stop = null; + } + }; + } + return { set, update, subscribe }; + } + function get(store2) { + let value; + subscribe_to_store(store2, (_) => value = _)(); + return value; + } + let untracking = false; + function untrack(fn) { + var previous_untracking = untracking; + try { + untracking = true; + return fn(); + } finally { + untracking = previous_untracking; + } + } + function store(defaultValue) { + const scope = { + get: (name) => { + return get(scope.store)[name]; + }, + set: (name, value) => { + if (typeof name === "string") { + Object.assign(get(scope.store), { + [name]: value + }); + } else { + Object.assign(get(scope.store), name); + } + scope.store.set(get(scope.store)); + }, + store: writable(defaultValue) + }; + return scope; + } + globalThis.$altcha = globalThis.$altcha || { + algorithms: /* @__PURE__ */ new Map(), + defaults: store({}), + i18n: store({}), + instances: /* @__PURE__ */ new Set(), + plugins: /* @__PURE__ */ new Set() + }; + const i18n = { + ariaLinkLabel: "Altcha (site oficial)", + enterCode: "Introduza o código", + enterCodeAria: "Introduza o código que ouve. Prima Espaço para reproduzir o áudio.", + error: "A verificação falhou. Por favor, tente novamente mais tarde.", + expired: "Verificação expirada. Por favor, tente novamente.", + footer: 'Protegido por ALTCHA', + getAudioChallenge: "Obter desafio de áudio", + label: "Não sou um robô", + loading: "A carregar...", + reload: "Recarregar", + verify: "Verificar", + verificationRequired: "Verificação necessária!", + verified: "Verificado", + verifying: "A verificar...", + waitAlert: "A verificar... por favor aguarde.", + cancel: "Cancelar", + enterCodeFromImage: "Para prosseguir, introduza o código da imagem abaixo." + }; + globalThis.$altcha.i18n.set("pt-pt", i18n); +})); diff --git a/frontend/node_modules/altcha/dist/i18n/pt.d.ts b/frontend/node_modules/altcha/dist/i18n/pt.d.ts new file mode 100644 index 0000000..7edfebb --- /dev/null +++ b/frontend/node_modules/altcha/dist/i18n/pt.d.ts @@ -0,0 +1 @@ +declare module 'altcha/i18n/pt'; export {}; diff --git a/frontend/node_modules/altcha/dist/i18n/ro.d.ts b/frontend/node_modules/altcha/dist/i18n/ro.d.ts new file mode 100644 index 0000000..877de28 --- /dev/null +++ b/frontend/node_modules/altcha/dist/i18n/ro.d.ts @@ -0,0 +1 @@ +declare module 'altcha/i18n/ro'; export {}; diff --git a/frontend/node_modules/altcha/dist/i18n/ro.js b/frontend/node_modules/altcha/dist/i18n/ro.js new file mode 100644 index 0000000..2407f54 --- /dev/null +++ b/frontend/node_modules/altcha/dist/i18n/ro.js @@ -0,0 +1,128 @@ +const noop = () => { +}; +function safe_not_equal(a, b) { + return a != a ? b == b : a !== b || a !== null && typeof a === "object" || typeof a === "function"; +} +function subscribe_to_store(store2, run, invalidate) { + if (store2 == null) { + run(void 0); + return noop; + } + const unsub = untrack( + () => store2.subscribe( + run, + // @ts-expect-error + invalidate + ) + ); + return unsub.unsubscribe ? () => unsub.unsubscribe() : unsub; +} +const subscriber_queue = []; +function writable(value, start = noop) { + let stop = null; + const subscribers = /* @__PURE__ */ new Set(); + function set(new_value) { + if (safe_not_equal(value, new_value)) { + value = new_value; + if (stop) { + const run_queue = !subscriber_queue.length; + for (const subscriber of subscribers) { + subscriber[1](); + subscriber_queue.push(subscriber, value); + } + if (run_queue) { + for (let i = 0; i < subscriber_queue.length; i += 2) { + subscriber_queue[i][0](subscriber_queue[i + 1]); + } + subscriber_queue.length = 0; + } + } + } + } + function update(fn) { + set(fn( + /** @type {T} */ + value + )); + } + function subscribe(run, invalidate = noop) { + const subscriber = [run, invalidate]; + subscribers.add(subscriber); + if (subscribers.size === 1) { + stop = start(set, update) || noop; + } + run( + /** @type {T} */ + value + ); + return () => { + subscribers.delete(subscriber); + if (subscribers.size === 0 && stop) { + stop(); + stop = null; + } + }; + } + return { set, update, subscribe }; +} +function get(store2) { + let value; + subscribe_to_store(store2, (_) => value = _)(); + return value; +} +let untracking = false; +function untrack(fn) { + var previous_untracking = untracking; + try { + untracking = true; + return fn(); + } finally { + untracking = previous_untracking; + } +} +function store(defaultValue) { + const scope = { + get: (name) => { + return get(scope.store)[name]; + }, + set: (name, value) => { + if (typeof name === "string") { + Object.assign(get(scope.store), { + [name]: value + }); + } else { + Object.assign(get(scope.store), name); + } + scope.store.set(get(scope.store)); + }, + store: writable(defaultValue) + }; + return scope; +} +globalThis.$altcha = globalThis.$altcha || { + algorithms: /* @__PURE__ */ new Map(), + defaults: store({}), + i18n: store({}), + instances: /* @__PURE__ */ new Set(), + plugins: /* @__PURE__ */ new Set() +}; +const i18n = { + ariaLinkLabel: "Altcha (site oficial)", + enterCode: "Introduceți codul", + enterCodeAria: "Introduceți codul pe care îl auziți. Apăsați Spațiu pentru a reda audio.", + error: "Verificarea a eșuat. Încearcă din nou mai târziu.", + expired: "Verificarea a expirat. Încearcă din nou.", + footer: 'Protejat de ALTCHA', + getAudioChallenge: "Obține o provocare audio", + label: "Nu sunt un robot", + loading: "Se încarcă...", + reload: "Reîncarcă", + verify: "Verifică", + verificationRequired: "Verificare necesară!", + verified: "Verificat", + verifying: "Se verifică...", + waitAlert: "Se verifică... te rugăm să aștepți.", + cancel: "Anulare", + enterCodeFromImage: "Pentru a continua, vă rugăm să introduceți codul din imaginea de mai jos." +}; +globalThis.$altcha.i18n.set("ro", i18n); diff --git a/frontend/node_modules/altcha/dist/i18n/ro.umd.cjs b/frontend/node_modules/altcha/dist/i18n/ro.umd.cjs new file mode 100644 index 0000000..b074575 --- /dev/null +++ b/frontend/node_modules/altcha/dist/i18n/ro.umd.cjs @@ -0,0 +1,133 @@ +(function(factory) { + typeof define === "function" && define.amd ? define(factory) : factory(); +})((function() { + "use strict"; + const noop = () => { + }; + function safe_not_equal(a, b) { + return a != a ? b == b : a !== b || a !== null && typeof a === "object" || typeof a === "function"; + } + function subscribe_to_store(store2, run, invalidate) { + if (store2 == null) { + run(void 0); + return noop; + } + const unsub = untrack( + () => store2.subscribe( + run, + // @ts-expect-error + invalidate + ) + ); + return unsub.unsubscribe ? () => unsub.unsubscribe() : unsub; + } + const subscriber_queue = []; + function writable(value, start = noop) { + let stop = null; + const subscribers = /* @__PURE__ */ new Set(); + function set(new_value) { + if (safe_not_equal(value, new_value)) { + value = new_value; + if (stop) { + const run_queue = !subscriber_queue.length; + for (const subscriber of subscribers) { + subscriber[1](); + subscriber_queue.push(subscriber, value); + } + if (run_queue) { + for (let i = 0; i < subscriber_queue.length; i += 2) { + subscriber_queue[i][0](subscriber_queue[i + 1]); + } + subscriber_queue.length = 0; + } + } + } + } + function update(fn) { + set(fn( + /** @type {T} */ + value + )); + } + function subscribe(run, invalidate = noop) { + const subscriber = [run, invalidate]; + subscribers.add(subscriber); + if (subscribers.size === 1) { + stop = start(set, update) || noop; + } + run( + /** @type {T} */ + value + ); + return () => { + subscribers.delete(subscriber); + if (subscribers.size === 0 && stop) { + stop(); + stop = null; + } + }; + } + return { set, update, subscribe }; + } + function get(store2) { + let value; + subscribe_to_store(store2, (_) => value = _)(); + return value; + } + let untracking = false; + function untrack(fn) { + var previous_untracking = untracking; + try { + untracking = true; + return fn(); + } finally { + untracking = previous_untracking; + } + } + function store(defaultValue) { + const scope = { + get: (name) => { + return get(scope.store)[name]; + }, + set: (name, value) => { + if (typeof name === "string") { + Object.assign(get(scope.store), { + [name]: value + }); + } else { + Object.assign(get(scope.store), name); + } + scope.store.set(get(scope.store)); + }, + store: writable(defaultValue) + }; + return scope; + } + globalThis.$altcha = globalThis.$altcha || { + algorithms: /* @__PURE__ */ new Map(), + defaults: store({}), + i18n: store({}), + instances: /* @__PURE__ */ new Set(), + plugins: /* @__PURE__ */ new Set() + }; + const i18n = { + ariaLinkLabel: "Altcha (site oficial)", + enterCode: "Introduceți codul", + enterCodeAria: "Introduceți codul pe care îl auziți. Apăsați Spațiu pentru a reda audio.", + error: "Verificarea a eșuat. Încearcă din nou mai târziu.", + expired: "Verificarea a expirat. Încearcă din nou.", + footer: 'Protejat de ALTCHA', + getAudioChallenge: "Obține o provocare audio", + label: "Nu sunt un robot", + loading: "Se încarcă...", + reload: "Reîncarcă", + verify: "Verifică", + verificationRequired: "Verificare necesară!", + verified: "Verificat", + verifying: "Se verifică...", + waitAlert: "Se verifică... te rugăm să aștepți.", + cancel: "Anulare", + enterCodeFromImage: "Pentru a continua, vă rugăm să introduceți codul din imaginea de mai jos." + }; + globalThis.$altcha.i18n.set("ro", i18n); +})); diff --git a/frontend/node_modules/altcha/dist/i18n/ru.d.ts b/frontend/node_modules/altcha/dist/i18n/ru.d.ts new file mode 100644 index 0000000..60afcfb --- /dev/null +++ b/frontend/node_modules/altcha/dist/i18n/ru.d.ts @@ -0,0 +1 @@ +declare module 'altcha/i18n/ru'; export {}; diff --git a/frontend/node_modules/altcha/dist/i18n/ru.js b/frontend/node_modules/altcha/dist/i18n/ru.js new file mode 100644 index 0000000..3f13672 --- /dev/null +++ b/frontend/node_modules/altcha/dist/i18n/ru.js @@ -0,0 +1,128 @@ +const noop = () => { +}; +function safe_not_equal(a, b) { + return a != a ? b == b : a !== b || a !== null && typeof a === "object" || typeof a === "function"; +} +function subscribe_to_store(store2, run, invalidate) { + if (store2 == null) { + run(void 0); + return noop; + } + const unsub = untrack( + () => store2.subscribe( + run, + // @ts-expect-error + invalidate + ) + ); + return unsub.unsubscribe ? () => unsub.unsubscribe() : unsub; +} +const subscriber_queue = []; +function writable(value, start = noop) { + let stop = null; + const subscribers = /* @__PURE__ */ new Set(); + function set(new_value) { + if (safe_not_equal(value, new_value)) { + value = new_value; + if (stop) { + const run_queue = !subscriber_queue.length; + for (const subscriber of subscribers) { + subscriber[1](); + subscriber_queue.push(subscriber, value); + } + if (run_queue) { + for (let i = 0; i < subscriber_queue.length; i += 2) { + subscriber_queue[i][0](subscriber_queue[i + 1]); + } + subscriber_queue.length = 0; + } + } + } + } + function update(fn) { + set(fn( + /** @type {T} */ + value + )); + } + function subscribe(run, invalidate = noop) { + const subscriber = [run, invalidate]; + subscribers.add(subscriber); + if (subscribers.size === 1) { + stop = start(set, update) || noop; + } + run( + /** @type {T} */ + value + ); + return () => { + subscribers.delete(subscriber); + if (subscribers.size === 0 && stop) { + stop(); + stop = null; + } + }; + } + return { set, update, subscribe }; +} +function get(store2) { + let value; + subscribe_to_store(store2, (_) => value = _)(); + return value; +} +let untracking = false; +function untrack(fn) { + var previous_untracking = untracking; + try { + untracking = true; + return fn(); + } finally { + untracking = previous_untracking; + } +} +function store(defaultValue) { + const scope = { + get: (name) => { + return get(scope.store)[name]; + }, + set: (name, value) => { + if (typeof name === "string") { + Object.assign(get(scope.store), { + [name]: value + }); + } else { + Object.assign(get(scope.store), name); + } + scope.store.set(get(scope.store)); + }, + store: writable(defaultValue) + }; + return scope; +} +globalThis.$altcha = globalThis.$altcha || { + algorithms: /* @__PURE__ */ new Map(), + defaults: store({}), + i18n: store({}), + instances: /* @__PURE__ */ new Set(), + plugins: /* @__PURE__ */ new Set() +}; +const i18n = { + ariaLinkLabel: "Altcha (официальный сайт)", + enterCode: "Введите код", + enterCodeAria: "Введите код, который слышите. Нажмите пробел для воспроизведения аудио.", + error: "Ошибка верификации. Попробуйте позже.", + expired: "Срок действия верификации истек. Попробуйте снова.", + footer: 'Защищено ALTCHA', + getAudioChallenge: "Получить аудио задачу", + label: "Я не робот", + loading: "Загрузка...", + reload: "Перезагрузить", + verify: "Проверить", + verificationRequired: "Требуется проверка!", + verified: "Проверено", + verifying: "Идет проверка...", + waitAlert: "Идет проверка... Пожалуйста, подождите.", + cancel: "Отмена", + enterCodeFromImage: "Чтобы продолжить, пожалуйста, введите код с изображения ниже." +}; +globalThis.$altcha.i18n.set("ru", i18n); diff --git a/frontend/node_modules/altcha/dist/i18n/ru.umd.cjs b/frontend/node_modules/altcha/dist/i18n/ru.umd.cjs new file mode 100644 index 0000000..1df0ece --- /dev/null +++ b/frontend/node_modules/altcha/dist/i18n/ru.umd.cjs @@ -0,0 +1,133 @@ +(function(factory) { + typeof define === "function" && define.amd ? define(factory) : factory(); +})((function() { + "use strict"; + const noop = () => { + }; + function safe_not_equal(a, b) { + return a != a ? b == b : a !== b || a !== null && typeof a === "object" || typeof a === "function"; + } + function subscribe_to_store(store2, run, invalidate) { + if (store2 == null) { + run(void 0); + return noop; + } + const unsub = untrack( + () => store2.subscribe( + run, + // @ts-expect-error + invalidate + ) + ); + return unsub.unsubscribe ? () => unsub.unsubscribe() : unsub; + } + const subscriber_queue = []; + function writable(value, start = noop) { + let stop = null; + const subscribers = /* @__PURE__ */ new Set(); + function set(new_value) { + if (safe_not_equal(value, new_value)) { + value = new_value; + if (stop) { + const run_queue = !subscriber_queue.length; + for (const subscriber of subscribers) { + subscriber[1](); + subscriber_queue.push(subscriber, value); + } + if (run_queue) { + for (let i = 0; i < subscriber_queue.length; i += 2) { + subscriber_queue[i][0](subscriber_queue[i + 1]); + } + subscriber_queue.length = 0; + } + } + } + } + function update(fn) { + set(fn( + /** @type {T} */ + value + )); + } + function subscribe(run, invalidate = noop) { + const subscriber = [run, invalidate]; + subscribers.add(subscriber); + if (subscribers.size === 1) { + stop = start(set, update) || noop; + } + run( + /** @type {T} */ + value + ); + return () => { + subscribers.delete(subscriber); + if (subscribers.size === 0 && stop) { + stop(); + stop = null; + } + }; + } + return { set, update, subscribe }; + } + function get(store2) { + let value; + subscribe_to_store(store2, (_) => value = _)(); + return value; + } + let untracking = false; + function untrack(fn) { + var previous_untracking = untracking; + try { + untracking = true; + return fn(); + } finally { + untracking = previous_untracking; + } + } + function store(defaultValue) { + const scope = { + get: (name) => { + return get(scope.store)[name]; + }, + set: (name, value) => { + if (typeof name === "string") { + Object.assign(get(scope.store), { + [name]: value + }); + } else { + Object.assign(get(scope.store), name); + } + scope.store.set(get(scope.store)); + }, + store: writable(defaultValue) + }; + return scope; + } + globalThis.$altcha = globalThis.$altcha || { + algorithms: /* @__PURE__ */ new Map(), + defaults: store({}), + i18n: store({}), + instances: /* @__PURE__ */ new Set(), + plugins: /* @__PURE__ */ new Set() + }; + const i18n = { + ariaLinkLabel: "Altcha (официальный сайт)", + enterCode: "Введите код", + enterCodeAria: "Введите код, который слышите. Нажмите пробел для воспроизведения аудио.", + error: "Ошибка верификации. Попробуйте позже.", + expired: "Срок действия верификации истек. Попробуйте снова.", + footer: 'Защищено ALTCHA', + getAudioChallenge: "Получить аудио задачу", + label: "Я не робот", + loading: "Загрузка...", + reload: "Перезагрузить", + verify: "Проверить", + verificationRequired: "Требуется проверка!", + verified: "Проверено", + verifying: "Идет проверка...", + waitAlert: "Идет проверка... Пожалуйста, подождите.", + cancel: "Отмена", + enterCodeFromImage: "Чтобы продолжить, пожалуйста, введите код с изображения ниже." + }; + globalThis.$altcha.i18n.set("ru", i18n); +})); diff --git a/frontend/node_modules/altcha/dist/i18n/sk.d.ts b/frontend/node_modules/altcha/dist/i18n/sk.d.ts new file mode 100644 index 0000000..f764c91 --- /dev/null +++ b/frontend/node_modules/altcha/dist/i18n/sk.d.ts @@ -0,0 +1 @@ +declare module 'altcha/i18n/sk'; export {}; diff --git a/frontend/node_modules/altcha/dist/i18n/sk.js b/frontend/node_modules/altcha/dist/i18n/sk.js new file mode 100644 index 0000000..dd81d24 --- /dev/null +++ b/frontend/node_modules/altcha/dist/i18n/sk.js @@ -0,0 +1,128 @@ +const noop = () => { +}; +function safe_not_equal(a, b) { + return a != a ? b == b : a !== b || a !== null && typeof a === "object" || typeof a === "function"; +} +function subscribe_to_store(store2, run, invalidate) { + if (store2 == null) { + run(void 0); + return noop; + } + const unsub = untrack( + () => store2.subscribe( + run, + // @ts-expect-error + invalidate + ) + ); + return unsub.unsubscribe ? () => unsub.unsubscribe() : unsub; +} +const subscriber_queue = []; +function writable(value, start = noop) { + let stop = null; + const subscribers = /* @__PURE__ */ new Set(); + function set(new_value) { + if (safe_not_equal(value, new_value)) { + value = new_value; + if (stop) { + const run_queue = !subscriber_queue.length; + for (const subscriber of subscribers) { + subscriber[1](); + subscriber_queue.push(subscriber, value); + } + if (run_queue) { + for (let i = 0; i < subscriber_queue.length; i += 2) { + subscriber_queue[i][0](subscriber_queue[i + 1]); + } + subscriber_queue.length = 0; + } + } + } + } + function update(fn) { + set(fn( + /** @type {T} */ + value + )); + } + function subscribe(run, invalidate = noop) { + const subscriber = [run, invalidate]; + subscribers.add(subscriber); + if (subscribers.size === 1) { + stop = start(set, update) || noop; + } + run( + /** @type {T} */ + value + ); + return () => { + subscribers.delete(subscriber); + if (subscribers.size === 0 && stop) { + stop(); + stop = null; + } + }; + } + return { set, update, subscribe }; +} +function get(store2) { + let value; + subscribe_to_store(store2, (_) => value = _)(); + return value; +} +let untracking = false; +function untrack(fn) { + var previous_untracking = untracking; + try { + untracking = true; + return fn(); + } finally { + untracking = previous_untracking; + } +} +function store(defaultValue) { + const scope = { + get: (name) => { + return get(scope.store)[name]; + }, + set: (name, value) => { + if (typeof name === "string") { + Object.assign(get(scope.store), { + [name]: value + }); + } else { + Object.assign(get(scope.store), name); + } + scope.store.set(get(scope.store)); + }, + store: writable(defaultValue) + }; + return scope; +} +globalThis.$altcha = globalThis.$altcha || { + algorithms: /* @__PURE__ */ new Map(), + defaults: store({}), + i18n: store({}), + instances: /* @__PURE__ */ new Set(), + plugins: /* @__PURE__ */ new Set() +}; +const i18n = { + ariaLinkLabel: "Altcha (oficiálna webová stránka)", + enterCode: "Zadajte kód", + enterCodeAria: "Zadajte kód, ktorý počujete. Stlačením medzerníka prehráte zvuk.", + error: "Verifikácia zlyhala. Skúste to znova neskôr.", + expired: "Verifikácia vypršala. Skúste to znova.", + footer: 'Chránené ALTCHA', + getAudioChallenge: "Získať audio výzvu", + label: "Nie som robot", + loading: "Načítava sa...", + reload: "Obnoviť", + verify: "Verifikovať", + verificationRequired: "Vyžaduje sa overenie!", + verified: "Verifikované", + verifying: "Prebieha verifikácia...", + waitAlert: "Prebieha verifikácia... prosím čakajte.", + cancel: "Zrušiť", + enterCodeFromImage: "Na pokračovanie, prosím, zadajte kód z obrázka nižšie." +}; +globalThis.$altcha.i18n.set("sk", i18n); diff --git a/frontend/node_modules/altcha/dist/i18n/sk.umd.cjs b/frontend/node_modules/altcha/dist/i18n/sk.umd.cjs new file mode 100644 index 0000000..75e3e9d --- /dev/null +++ b/frontend/node_modules/altcha/dist/i18n/sk.umd.cjs @@ -0,0 +1,133 @@ +(function(factory) { + typeof define === "function" && define.amd ? define(factory) : factory(); +})((function() { + "use strict"; + const noop = () => { + }; + function safe_not_equal(a, b) { + return a != a ? b == b : a !== b || a !== null && typeof a === "object" || typeof a === "function"; + } + function subscribe_to_store(store2, run, invalidate) { + if (store2 == null) { + run(void 0); + return noop; + } + const unsub = untrack( + () => store2.subscribe( + run, + // @ts-expect-error + invalidate + ) + ); + return unsub.unsubscribe ? () => unsub.unsubscribe() : unsub; + } + const subscriber_queue = []; + function writable(value, start = noop) { + let stop = null; + const subscribers = /* @__PURE__ */ new Set(); + function set(new_value) { + if (safe_not_equal(value, new_value)) { + value = new_value; + if (stop) { + const run_queue = !subscriber_queue.length; + for (const subscriber of subscribers) { + subscriber[1](); + subscriber_queue.push(subscriber, value); + } + if (run_queue) { + for (let i = 0; i < subscriber_queue.length; i += 2) { + subscriber_queue[i][0](subscriber_queue[i + 1]); + } + subscriber_queue.length = 0; + } + } + } + } + function update(fn) { + set(fn( + /** @type {T} */ + value + )); + } + function subscribe(run, invalidate = noop) { + const subscriber = [run, invalidate]; + subscribers.add(subscriber); + if (subscribers.size === 1) { + stop = start(set, update) || noop; + } + run( + /** @type {T} */ + value + ); + return () => { + subscribers.delete(subscriber); + if (subscribers.size === 0 && stop) { + stop(); + stop = null; + } + }; + } + return { set, update, subscribe }; + } + function get(store2) { + let value; + subscribe_to_store(store2, (_) => value = _)(); + return value; + } + let untracking = false; + function untrack(fn) { + var previous_untracking = untracking; + try { + untracking = true; + return fn(); + } finally { + untracking = previous_untracking; + } + } + function store(defaultValue) { + const scope = { + get: (name) => { + return get(scope.store)[name]; + }, + set: (name, value) => { + if (typeof name === "string") { + Object.assign(get(scope.store), { + [name]: value + }); + } else { + Object.assign(get(scope.store), name); + } + scope.store.set(get(scope.store)); + }, + store: writable(defaultValue) + }; + return scope; + } + globalThis.$altcha = globalThis.$altcha || { + algorithms: /* @__PURE__ */ new Map(), + defaults: store({}), + i18n: store({}), + instances: /* @__PURE__ */ new Set(), + plugins: /* @__PURE__ */ new Set() + }; + const i18n = { + ariaLinkLabel: "Altcha (oficiálna webová stránka)", + enterCode: "Zadajte kód", + enterCodeAria: "Zadajte kód, ktorý počujete. Stlačením medzerníka prehráte zvuk.", + error: "Verifikácia zlyhala. Skúste to znova neskôr.", + expired: "Verifikácia vypršala. Skúste to znova.", + footer: 'Chránené ALTCHA', + getAudioChallenge: "Získať audio výzvu", + label: "Nie som robot", + loading: "Načítava sa...", + reload: "Obnoviť", + verify: "Verifikovať", + verificationRequired: "Vyžaduje sa overenie!", + verified: "Verifikované", + verifying: "Prebieha verifikácia...", + waitAlert: "Prebieha verifikácia... prosím čakajte.", + cancel: "Zrušiť", + enterCodeFromImage: "Na pokračovanie, prosím, zadajte kód z obrázka nižšie." + }; + globalThis.$altcha.i18n.set("sk", i18n); +})); diff --git a/frontend/node_modules/altcha/dist/i18n/sl.d.ts b/frontend/node_modules/altcha/dist/i18n/sl.d.ts new file mode 100644 index 0000000..037a63b --- /dev/null +++ b/frontend/node_modules/altcha/dist/i18n/sl.d.ts @@ -0,0 +1 @@ +declare module 'altcha/i18n/sl'; export {}; diff --git a/frontend/node_modules/altcha/dist/i18n/sl.js b/frontend/node_modules/altcha/dist/i18n/sl.js new file mode 100644 index 0000000..ba6c735 --- /dev/null +++ b/frontend/node_modules/altcha/dist/i18n/sl.js @@ -0,0 +1,128 @@ +const noop = () => { +}; +function safe_not_equal(a, b) { + return a != a ? b == b : a !== b || a !== null && typeof a === "object" || typeof a === "function"; +} +function subscribe_to_store(store2, run, invalidate) { + if (store2 == null) { + run(void 0); + return noop; + } + const unsub = untrack( + () => store2.subscribe( + run, + // @ts-expect-error + invalidate + ) + ); + return unsub.unsubscribe ? () => unsub.unsubscribe() : unsub; +} +const subscriber_queue = []; +function writable(value, start = noop) { + let stop = null; + const subscribers = /* @__PURE__ */ new Set(); + function set(new_value) { + if (safe_not_equal(value, new_value)) { + value = new_value; + if (stop) { + const run_queue = !subscriber_queue.length; + for (const subscriber of subscribers) { + subscriber[1](); + subscriber_queue.push(subscriber, value); + } + if (run_queue) { + for (let i = 0; i < subscriber_queue.length; i += 2) { + subscriber_queue[i][0](subscriber_queue[i + 1]); + } + subscriber_queue.length = 0; + } + } + } + } + function update(fn) { + set(fn( + /** @type {T} */ + value + )); + } + function subscribe(run, invalidate = noop) { + const subscriber = [run, invalidate]; + subscribers.add(subscriber); + if (subscribers.size === 1) { + stop = start(set, update) || noop; + } + run( + /** @type {T} */ + value + ); + return () => { + subscribers.delete(subscriber); + if (subscribers.size === 0 && stop) { + stop(); + stop = null; + } + }; + } + return { set, update, subscribe }; +} +function get(store2) { + let value; + subscribe_to_store(store2, (_) => value = _)(); + return value; +} +let untracking = false; +function untrack(fn) { + var previous_untracking = untracking; + try { + untracking = true; + return fn(); + } finally { + untracking = previous_untracking; + } +} +function store(defaultValue) { + const scope = { + get: (name) => { + return get(scope.store)[name]; + }, + set: (name, value) => { + if (typeof name === "string") { + Object.assign(get(scope.store), { + [name]: value + }); + } else { + Object.assign(get(scope.store), name); + } + scope.store.set(get(scope.store)); + }, + store: writable(defaultValue) + }; + return scope; +} +globalThis.$altcha = globalThis.$altcha || { + algorithms: /* @__PURE__ */ new Map(), + defaults: store({}), + i18n: store({}), + instances: /* @__PURE__ */ new Set(), + plugins: /* @__PURE__ */ new Set() +}; +const i18n = { + ariaLinkLabel: "Altcha (uradna spletna stran)", + enterCode: "Vnesite kodo", + enterCodeAria: "Vnesite kodo, ki jo slišite. Pritisnite preslednico za predvajanje zvoka.", + error: "Preverjanje ni uspelo. Poskusite znova kasneje.", + expired: "Preverjanje je poteklo. Poskusite znova.", + footer: 'Zaščiteno z ALTCHA', + getAudioChallenge: "Pridobite zvočni izziv", + label: "Nisem robot", + loading: "Nalagam...", + reload: "Ponovno naloži", + verify: "Preveri", + verificationRequired: "Potrebna je preveritev!", + verified: "Preverjeno", + verifying: "Preverjanje...", + waitAlert: "Preverjanje... prosim počakajte.", + cancel: "Preklic", + enterCodeFromImage: "Za nadaljevanje, prosimo, vnesite kodo s slike spodaj." +}; +globalThis.$altcha.i18n.set("sl", i18n); diff --git a/frontend/node_modules/altcha/dist/i18n/sl.umd.cjs b/frontend/node_modules/altcha/dist/i18n/sl.umd.cjs new file mode 100644 index 0000000..6ed942f --- /dev/null +++ b/frontend/node_modules/altcha/dist/i18n/sl.umd.cjs @@ -0,0 +1,133 @@ +(function(factory) { + typeof define === "function" && define.amd ? define(factory) : factory(); +})((function() { + "use strict"; + const noop = () => { + }; + function safe_not_equal(a, b) { + return a != a ? b == b : a !== b || a !== null && typeof a === "object" || typeof a === "function"; + } + function subscribe_to_store(store2, run, invalidate) { + if (store2 == null) { + run(void 0); + return noop; + } + const unsub = untrack( + () => store2.subscribe( + run, + // @ts-expect-error + invalidate + ) + ); + return unsub.unsubscribe ? () => unsub.unsubscribe() : unsub; + } + const subscriber_queue = []; + function writable(value, start = noop) { + let stop = null; + const subscribers = /* @__PURE__ */ new Set(); + function set(new_value) { + if (safe_not_equal(value, new_value)) { + value = new_value; + if (stop) { + const run_queue = !subscriber_queue.length; + for (const subscriber of subscribers) { + subscriber[1](); + subscriber_queue.push(subscriber, value); + } + if (run_queue) { + for (let i = 0; i < subscriber_queue.length; i += 2) { + subscriber_queue[i][0](subscriber_queue[i + 1]); + } + subscriber_queue.length = 0; + } + } + } + } + function update(fn) { + set(fn( + /** @type {T} */ + value + )); + } + function subscribe(run, invalidate = noop) { + const subscriber = [run, invalidate]; + subscribers.add(subscriber); + if (subscribers.size === 1) { + stop = start(set, update) || noop; + } + run( + /** @type {T} */ + value + ); + return () => { + subscribers.delete(subscriber); + if (subscribers.size === 0 && stop) { + stop(); + stop = null; + } + }; + } + return { set, update, subscribe }; + } + function get(store2) { + let value; + subscribe_to_store(store2, (_) => value = _)(); + return value; + } + let untracking = false; + function untrack(fn) { + var previous_untracking = untracking; + try { + untracking = true; + return fn(); + } finally { + untracking = previous_untracking; + } + } + function store(defaultValue) { + const scope = { + get: (name) => { + return get(scope.store)[name]; + }, + set: (name, value) => { + if (typeof name === "string") { + Object.assign(get(scope.store), { + [name]: value + }); + } else { + Object.assign(get(scope.store), name); + } + scope.store.set(get(scope.store)); + }, + store: writable(defaultValue) + }; + return scope; + } + globalThis.$altcha = globalThis.$altcha || { + algorithms: /* @__PURE__ */ new Map(), + defaults: store({}), + i18n: store({}), + instances: /* @__PURE__ */ new Set(), + plugins: /* @__PURE__ */ new Set() + }; + const i18n = { + ariaLinkLabel: "Altcha (uradna spletna stran)", + enterCode: "Vnesite kodo", + enterCodeAria: "Vnesite kodo, ki jo slišite. Pritisnite preslednico za predvajanje zvoka.", + error: "Preverjanje ni uspelo. Poskusite znova kasneje.", + expired: "Preverjanje je poteklo. Poskusite znova.", + footer: 'Zaščiteno z ALTCHA', + getAudioChallenge: "Pridobite zvočni izziv", + label: "Nisem robot", + loading: "Nalagam...", + reload: "Ponovno naloži", + verify: "Preveri", + verificationRequired: "Potrebna je preveritev!", + verified: "Preverjeno", + verifying: "Preverjanje...", + waitAlert: "Preverjanje... prosim počakajte.", + cancel: "Preklic", + enterCodeFromImage: "Za nadaljevanje, prosimo, vnesite kodo s slike spodaj." + }; + globalThis.$altcha.i18n.set("sl", i18n); +})); diff --git a/frontend/node_modules/altcha/dist/i18n/sq.d.ts b/frontend/node_modules/altcha/dist/i18n/sq.d.ts new file mode 100644 index 0000000..bac773a --- /dev/null +++ b/frontend/node_modules/altcha/dist/i18n/sq.d.ts @@ -0,0 +1 @@ +declare module 'altcha/i18n/sq'; export {}; diff --git a/frontend/node_modules/altcha/dist/i18n/sq.js b/frontend/node_modules/altcha/dist/i18n/sq.js new file mode 100644 index 0000000..2db0193 --- /dev/null +++ b/frontend/node_modules/altcha/dist/i18n/sq.js @@ -0,0 +1,128 @@ +const noop = () => { +}; +function safe_not_equal(a, b) { + return a != a ? b == b : a !== b || a !== null && typeof a === "object" || typeof a === "function"; +} +function subscribe_to_store(store2, run, invalidate) { + if (store2 == null) { + run(void 0); + return noop; + } + const unsub = untrack( + () => store2.subscribe( + run, + // @ts-expect-error + invalidate + ) + ); + return unsub.unsubscribe ? () => unsub.unsubscribe() : unsub; +} +const subscriber_queue = []; +function writable(value, start = noop) { + let stop = null; + const subscribers = /* @__PURE__ */ new Set(); + function set(new_value) { + if (safe_not_equal(value, new_value)) { + value = new_value; + if (stop) { + const run_queue = !subscriber_queue.length; + for (const subscriber of subscribers) { + subscriber[1](); + subscriber_queue.push(subscriber, value); + } + if (run_queue) { + for (let i = 0; i < subscriber_queue.length; i += 2) { + subscriber_queue[i][0](subscriber_queue[i + 1]); + } + subscriber_queue.length = 0; + } + } + } + } + function update(fn) { + set(fn( + /** @type {T} */ + value + )); + } + function subscribe(run, invalidate = noop) { + const subscriber = [run, invalidate]; + subscribers.add(subscriber); + if (subscribers.size === 1) { + stop = start(set, update) || noop; + } + run( + /** @type {T} */ + value + ); + return () => { + subscribers.delete(subscriber); + if (subscribers.size === 0 && stop) { + stop(); + stop = null; + } + }; + } + return { set, update, subscribe }; +} +function get(store2) { + let value; + subscribe_to_store(store2, (_) => value = _)(); + return value; +} +let untracking = false; +function untrack(fn) { + var previous_untracking = untracking; + try { + untracking = true; + return fn(); + } finally { + untracking = previous_untracking; + } +} +function store(defaultValue) { + const scope = { + get: (name) => { + return get(scope.store)[name]; + }, + set: (name, value) => { + if (typeof name === "string") { + Object.assign(get(scope.store), { + [name]: value + }); + } else { + Object.assign(get(scope.store), name); + } + scope.store.set(get(scope.store)); + }, + store: writable(defaultValue) + }; + return scope; +} +globalThis.$altcha = globalThis.$altcha || { + algorithms: /* @__PURE__ */ new Map(), + defaults: store({}), + i18n: store({}), + instances: /* @__PURE__ */ new Set(), + plugins: /* @__PURE__ */ new Set() +}; +const i18n = { + ariaLinkLabel: "Altcha (faqja zyrtare)", + enterCode: "Fut kodin", + enterCodeAria: "Fut kodin që dëgjon. Shtypni Hapësirë për të luajtur audio.", + error: "Verifikimi dështoi. Provoni përsëri më vonë.", + expired: "Verifikimi ka skaduar. Provoni përsëri.", + footer: 'I mbrojtur nga ALTCHA', + getAudioChallenge: "Merr një sfidë audio", + label: "Unë nuk jam një robot", + loading: "Duke u ngarkuar...", + reload: "Ringarko", + verify: "Verifiko", + verificationRequired: "Kërkohet verifikimi!", + verified: "I verifikuar", + verifying: "Duke verifikuar...", + waitAlert: "Duke verifikuar... ju lutem prisni.", + cancel: "Anuloje", + enterCodeFromImage: "Për të vazhduar, ju lutemi fusni kodin nga imazhi më poshtë." +}; +globalThis.$altcha.i18n.set("sq", i18n); diff --git a/frontend/node_modules/altcha/dist/i18n/sq.umd.cjs b/frontend/node_modules/altcha/dist/i18n/sq.umd.cjs new file mode 100644 index 0000000..4c03835 --- /dev/null +++ b/frontend/node_modules/altcha/dist/i18n/sq.umd.cjs @@ -0,0 +1,133 @@ +(function(factory) { + typeof define === "function" && define.amd ? define(factory) : factory(); +})((function() { + "use strict"; + const noop = () => { + }; + function safe_not_equal(a, b) { + return a != a ? b == b : a !== b || a !== null && typeof a === "object" || typeof a === "function"; + } + function subscribe_to_store(store2, run, invalidate) { + if (store2 == null) { + run(void 0); + return noop; + } + const unsub = untrack( + () => store2.subscribe( + run, + // @ts-expect-error + invalidate + ) + ); + return unsub.unsubscribe ? () => unsub.unsubscribe() : unsub; + } + const subscriber_queue = []; + function writable(value, start = noop) { + let stop = null; + const subscribers = /* @__PURE__ */ new Set(); + function set(new_value) { + if (safe_not_equal(value, new_value)) { + value = new_value; + if (stop) { + const run_queue = !subscriber_queue.length; + for (const subscriber of subscribers) { + subscriber[1](); + subscriber_queue.push(subscriber, value); + } + if (run_queue) { + for (let i = 0; i < subscriber_queue.length; i += 2) { + subscriber_queue[i][0](subscriber_queue[i + 1]); + } + subscriber_queue.length = 0; + } + } + } + } + function update(fn) { + set(fn( + /** @type {T} */ + value + )); + } + function subscribe(run, invalidate = noop) { + const subscriber = [run, invalidate]; + subscribers.add(subscriber); + if (subscribers.size === 1) { + stop = start(set, update) || noop; + } + run( + /** @type {T} */ + value + ); + return () => { + subscribers.delete(subscriber); + if (subscribers.size === 0 && stop) { + stop(); + stop = null; + } + }; + } + return { set, update, subscribe }; + } + function get(store2) { + let value; + subscribe_to_store(store2, (_) => value = _)(); + return value; + } + let untracking = false; + function untrack(fn) { + var previous_untracking = untracking; + try { + untracking = true; + return fn(); + } finally { + untracking = previous_untracking; + } + } + function store(defaultValue) { + const scope = { + get: (name) => { + return get(scope.store)[name]; + }, + set: (name, value) => { + if (typeof name === "string") { + Object.assign(get(scope.store), { + [name]: value + }); + } else { + Object.assign(get(scope.store), name); + } + scope.store.set(get(scope.store)); + }, + store: writable(defaultValue) + }; + return scope; + } + globalThis.$altcha = globalThis.$altcha || { + algorithms: /* @__PURE__ */ new Map(), + defaults: store({}), + i18n: store({}), + instances: /* @__PURE__ */ new Set(), + plugins: /* @__PURE__ */ new Set() + }; + const i18n = { + ariaLinkLabel: "Altcha (faqja zyrtare)", + enterCode: "Fut kodin", + enterCodeAria: "Fut kodin që dëgjon. Shtypni Hapësirë për të luajtur audio.", + error: "Verifikimi dështoi. Provoni përsëri më vonë.", + expired: "Verifikimi ka skaduar. Provoni përsëri.", + footer: 'I mbrojtur nga ALTCHA', + getAudioChallenge: "Merr një sfidë audio", + label: "Unë nuk jam një robot", + loading: "Duke u ngarkuar...", + reload: "Ringarko", + verify: "Verifiko", + verificationRequired: "Kërkohet verifikimi!", + verified: "I verifikuar", + verifying: "Duke verifikuar...", + waitAlert: "Duke verifikuar... ju lutem prisni.", + cancel: "Anuloje", + enterCodeFromImage: "Për të vazhduar, ju lutemi fusni kodin nga imazhi më poshtë." + }; + globalThis.$altcha.i18n.set("sq", i18n); +})); diff --git a/frontend/node_modules/altcha/dist/i18n/sr.d.ts b/frontend/node_modules/altcha/dist/i18n/sr.d.ts new file mode 100644 index 0000000..b5df721 --- /dev/null +++ b/frontend/node_modules/altcha/dist/i18n/sr.d.ts @@ -0,0 +1 @@ +declare module 'altcha/i18n/sr'; export {}; diff --git a/frontend/node_modules/altcha/dist/i18n/sr.js b/frontend/node_modules/altcha/dist/i18n/sr.js new file mode 100644 index 0000000..85a9ce5 --- /dev/null +++ b/frontend/node_modules/altcha/dist/i18n/sr.js @@ -0,0 +1,128 @@ +const noop = () => { +}; +function safe_not_equal(a, b) { + return a != a ? b == b : a !== b || a !== null && typeof a === "object" || typeof a === "function"; +} +function subscribe_to_store(store2, run, invalidate) { + if (store2 == null) { + run(void 0); + return noop; + } + const unsub = untrack( + () => store2.subscribe( + run, + // @ts-expect-error + invalidate + ) + ); + return unsub.unsubscribe ? () => unsub.unsubscribe() : unsub; +} +const subscriber_queue = []; +function writable(value, start = noop) { + let stop = null; + const subscribers = /* @__PURE__ */ new Set(); + function set(new_value) { + if (safe_not_equal(value, new_value)) { + value = new_value; + if (stop) { + const run_queue = !subscriber_queue.length; + for (const subscriber of subscribers) { + subscriber[1](); + subscriber_queue.push(subscriber, value); + } + if (run_queue) { + for (let i = 0; i < subscriber_queue.length; i += 2) { + subscriber_queue[i][0](subscriber_queue[i + 1]); + } + subscriber_queue.length = 0; + } + } + } + } + function update(fn) { + set(fn( + /** @type {T} */ + value + )); + } + function subscribe(run, invalidate = noop) { + const subscriber = [run, invalidate]; + subscribers.add(subscriber); + if (subscribers.size === 1) { + stop = start(set, update) || noop; + } + run( + /** @type {T} */ + value + ); + return () => { + subscribers.delete(subscriber); + if (subscribers.size === 0 && stop) { + stop(); + stop = null; + } + }; + } + return { set, update, subscribe }; +} +function get(store2) { + let value; + subscribe_to_store(store2, (_) => value = _)(); + return value; +} +let untracking = false; +function untrack(fn) { + var previous_untracking = untracking; + try { + untracking = true; + return fn(); + } finally { + untracking = previous_untracking; + } +} +function store(defaultValue) { + const scope = { + get: (name) => { + return get(scope.store)[name]; + }, + set: (name, value) => { + if (typeof name === "string") { + Object.assign(get(scope.store), { + [name]: value + }); + } else { + Object.assign(get(scope.store), name); + } + scope.store.set(get(scope.store)); + }, + store: writable(defaultValue) + }; + return scope; +} +globalThis.$altcha = globalThis.$altcha || { + algorithms: /* @__PURE__ */ new Map(), + defaults: store({}), + i18n: store({}), + instances: /* @__PURE__ */ new Set(), + plugins: /* @__PURE__ */ new Set() +}; +const i18n = { + ariaLinkLabel: "Altcha (zvanična web stranica)", + enterCode: "Unesite kod", + enterCodeAria: "Unesite kod koji čujete. Pritisnite Space da biste pustili zvuk.", + error: "Verifikacija nije uspela. Pokušajte ponovo kasnije.", + expired: "Verifikacija je istekla. Pokušajte ponovo.", + footer: 'Zaštićeno od strane ALTCHA', + getAudioChallenge: "Dohvatite audio izazov", + label: "Nisam robot", + loading: "Učitavanje...", + reload: "Ponovo učitaj", + verify: "Verifikuj", + verificationRequired: "Verifikacija je obavezna!", + verified: "Verifikovano", + verifying: "Verifikacija u toku...", + waitAlert: "Verifikacija u toku... molimo vas da sačekate.", + cancel: "Откажи", + enterCodeFromImage: "Да бисте наставили, унесите код са слике испод." +}; +globalThis.$altcha.i18n.set("sr", i18n); diff --git a/frontend/node_modules/altcha/dist/i18n/sr.umd.cjs b/frontend/node_modules/altcha/dist/i18n/sr.umd.cjs new file mode 100644 index 0000000..630e8d8 --- /dev/null +++ b/frontend/node_modules/altcha/dist/i18n/sr.umd.cjs @@ -0,0 +1,133 @@ +(function(factory) { + typeof define === "function" && define.amd ? define(factory) : factory(); +})((function() { + "use strict"; + const noop = () => { + }; + function safe_not_equal(a, b) { + return a != a ? b == b : a !== b || a !== null && typeof a === "object" || typeof a === "function"; + } + function subscribe_to_store(store2, run, invalidate) { + if (store2 == null) { + run(void 0); + return noop; + } + const unsub = untrack( + () => store2.subscribe( + run, + // @ts-expect-error + invalidate + ) + ); + return unsub.unsubscribe ? () => unsub.unsubscribe() : unsub; + } + const subscriber_queue = []; + function writable(value, start = noop) { + let stop = null; + const subscribers = /* @__PURE__ */ new Set(); + function set(new_value) { + if (safe_not_equal(value, new_value)) { + value = new_value; + if (stop) { + const run_queue = !subscriber_queue.length; + for (const subscriber of subscribers) { + subscriber[1](); + subscriber_queue.push(subscriber, value); + } + if (run_queue) { + for (let i = 0; i < subscriber_queue.length; i += 2) { + subscriber_queue[i][0](subscriber_queue[i + 1]); + } + subscriber_queue.length = 0; + } + } + } + } + function update(fn) { + set(fn( + /** @type {T} */ + value + )); + } + function subscribe(run, invalidate = noop) { + const subscriber = [run, invalidate]; + subscribers.add(subscriber); + if (subscribers.size === 1) { + stop = start(set, update) || noop; + } + run( + /** @type {T} */ + value + ); + return () => { + subscribers.delete(subscriber); + if (subscribers.size === 0 && stop) { + stop(); + stop = null; + } + }; + } + return { set, update, subscribe }; + } + function get(store2) { + let value; + subscribe_to_store(store2, (_) => value = _)(); + return value; + } + let untracking = false; + function untrack(fn) { + var previous_untracking = untracking; + try { + untracking = true; + return fn(); + } finally { + untracking = previous_untracking; + } + } + function store(defaultValue) { + const scope = { + get: (name) => { + return get(scope.store)[name]; + }, + set: (name, value) => { + if (typeof name === "string") { + Object.assign(get(scope.store), { + [name]: value + }); + } else { + Object.assign(get(scope.store), name); + } + scope.store.set(get(scope.store)); + }, + store: writable(defaultValue) + }; + return scope; + } + globalThis.$altcha = globalThis.$altcha || { + algorithms: /* @__PURE__ */ new Map(), + defaults: store({}), + i18n: store({}), + instances: /* @__PURE__ */ new Set(), + plugins: /* @__PURE__ */ new Set() + }; + const i18n = { + ariaLinkLabel: "Altcha (zvanična web stranica)", + enterCode: "Unesite kod", + enterCodeAria: "Unesite kod koji čujete. Pritisnite Space da biste pustili zvuk.", + error: "Verifikacija nije uspela. Pokušajte ponovo kasnije.", + expired: "Verifikacija je istekla. Pokušajte ponovo.", + footer: 'Zaštićeno od strane ALTCHA', + getAudioChallenge: "Dohvatite audio izazov", + label: "Nisam robot", + loading: "Učitavanje...", + reload: "Ponovo učitaj", + verify: "Verifikuj", + verificationRequired: "Verifikacija je obavezna!", + verified: "Verifikovano", + verifying: "Verifikacija u toku...", + waitAlert: "Verifikacija u toku... molimo vas da sačekate.", + cancel: "Откажи", + enterCodeFromImage: "Да бисте наставили, унесите код са слике испод." + }; + globalThis.$altcha.i18n.set("sr", i18n); +})); diff --git a/frontend/node_modules/altcha/dist/i18n/sv.d.ts b/frontend/node_modules/altcha/dist/i18n/sv.d.ts new file mode 100644 index 0000000..e5f4a8a --- /dev/null +++ b/frontend/node_modules/altcha/dist/i18n/sv.d.ts @@ -0,0 +1 @@ +declare module 'altcha/i18n/sv'; export {}; diff --git a/frontend/node_modules/altcha/dist/i18n/sv.js b/frontend/node_modules/altcha/dist/i18n/sv.js new file mode 100644 index 0000000..4aa2f72 --- /dev/null +++ b/frontend/node_modules/altcha/dist/i18n/sv.js @@ -0,0 +1,128 @@ +const noop = () => { +}; +function safe_not_equal(a, b) { + return a != a ? b == b : a !== b || a !== null && typeof a === "object" || typeof a === "function"; +} +function subscribe_to_store(store2, run, invalidate) { + if (store2 == null) { + run(void 0); + return noop; + } + const unsub = untrack( + () => store2.subscribe( + run, + // @ts-expect-error + invalidate + ) + ); + return unsub.unsubscribe ? () => unsub.unsubscribe() : unsub; +} +const subscriber_queue = []; +function writable(value, start = noop) { + let stop = null; + const subscribers = /* @__PURE__ */ new Set(); + function set(new_value) { + if (safe_not_equal(value, new_value)) { + value = new_value; + if (stop) { + const run_queue = !subscriber_queue.length; + for (const subscriber of subscribers) { + subscriber[1](); + subscriber_queue.push(subscriber, value); + } + if (run_queue) { + for (let i = 0; i < subscriber_queue.length; i += 2) { + subscriber_queue[i][0](subscriber_queue[i + 1]); + } + subscriber_queue.length = 0; + } + } + } + } + function update(fn) { + set(fn( + /** @type {T} */ + value + )); + } + function subscribe(run, invalidate = noop) { + const subscriber = [run, invalidate]; + subscribers.add(subscriber); + if (subscribers.size === 1) { + stop = start(set, update) || noop; + } + run( + /** @type {T} */ + value + ); + return () => { + subscribers.delete(subscriber); + if (subscribers.size === 0 && stop) { + stop(); + stop = null; + } + }; + } + return { set, update, subscribe }; +} +function get(store2) { + let value; + subscribe_to_store(store2, (_) => value = _)(); + return value; +} +let untracking = false; +function untrack(fn) { + var previous_untracking = untracking; + try { + untracking = true; + return fn(); + } finally { + untracking = previous_untracking; + } +} +function store(defaultValue) { + const scope = { + get: (name) => { + return get(scope.store)[name]; + }, + set: (name, value) => { + if (typeof name === "string") { + Object.assign(get(scope.store), { + [name]: value + }); + } else { + Object.assign(get(scope.store), name); + } + scope.store.set(get(scope.store)); + }, + store: writable(defaultValue) + }; + return scope; +} +globalThis.$altcha = globalThis.$altcha || { + algorithms: /* @__PURE__ */ new Map(), + defaults: store({}), + i18n: store({}), + instances: /* @__PURE__ */ new Set(), + plugins: /* @__PURE__ */ new Set() +}; +const i18n = { + ariaLinkLabel: "Altcha (officiell webbplats)", + enterCode: "Ange kod", + enterCodeAria: "Ange koden du hör. Tryck på mellanslag för att spela upp ljudet.", + error: "Verifiering misslyckades. Försök igen senare.", + expired: "Verifieringen har gått ut. Försök igen.", + footer: 'Skyddad av ALTCHA', + getAudioChallenge: "Få ljudutmaning", + label: "Jag är inte en robot", + loading: "Laddar...", + reload: "Ladda om", + verify: "Verifiera", + verificationRequired: "Verifiering krävs!", + verified: "Verifierad", + verifying: "Verifierar...", + waitAlert: "Verifierar... vänligen vänta.", + cancel: "Avbryt", + enterCodeFromImage: "För att fortsätta, ange koden från bilden nedan." +}; +globalThis.$altcha.i18n.set("sv", i18n); diff --git a/frontend/node_modules/altcha/dist/i18n/sv.umd.cjs b/frontend/node_modules/altcha/dist/i18n/sv.umd.cjs new file mode 100644 index 0000000..dd44753 --- /dev/null +++ b/frontend/node_modules/altcha/dist/i18n/sv.umd.cjs @@ -0,0 +1,133 @@ +(function(factory) { + typeof define === "function" && define.amd ? define(factory) : factory(); +})((function() { + "use strict"; + const noop = () => { + }; + function safe_not_equal(a, b) { + return a != a ? b == b : a !== b || a !== null && typeof a === "object" || typeof a === "function"; + } + function subscribe_to_store(store2, run, invalidate) { + if (store2 == null) { + run(void 0); + return noop; + } + const unsub = untrack( + () => store2.subscribe( + run, + // @ts-expect-error + invalidate + ) + ); + return unsub.unsubscribe ? () => unsub.unsubscribe() : unsub; + } + const subscriber_queue = []; + function writable(value, start = noop) { + let stop = null; + const subscribers = /* @__PURE__ */ new Set(); + function set(new_value) { + if (safe_not_equal(value, new_value)) { + value = new_value; + if (stop) { + const run_queue = !subscriber_queue.length; + for (const subscriber of subscribers) { + subscriber[1](); + subscriber_queue.push(subscriber, value); + } + if (run_queue) { + for (let i = 0; i < subscriber_queue.length; i += 2) { + subscriber_queue[i][0](subscriber_queue[i + 1]); + } + subscriber_queue.length = 0; + } + } + } + } + function update(fn) { + set(fn( + /** @type {T} */ + value + )); + } + function subscribe(run, invalidate = noop) { + const subscriber = [run, invalidate]; + subscribers.add(subscriber); + if (subscribers.size === 1) { + stop = start(set, update) || noop; + } + run( + /** @type {T} */ + value + ); + return () => { + subscribers.delete(subscriber); + if (subscribers.size === 0 && stop) { + stop(); + stop = null; + } + }; + } + return { set, update, subscribe }; + } + function get(store2) { + let value; + subscribe_to_store(store2, (_) => value = _)(); + return value; + } + let untracking = false; + function untrack(fn) { + var previous_untracking = untracking; + try { + untracking = true; + return fn(); + } finally { + untracking = previous_untracking; + } + } + function store(defaultValue) { + const scope = { + get: (name) => { + return get(scope.store)[name]; + }, + set: (name, value) => { + if (typeof name === "string") { + Object.assign(get(scope.store), { + [name]: value + }); + } else { + Object.assign(get(scope.store), name); + } + scope.store.set(get(scope.store)); + }, + store: writable(defaultValue) + }; + return scope; + } + globalThis.$altcha = globalThis.$altcha || { + algorithms: /* @__PURE__ */ new Map(), + defaults: store({}), + i18n: store({}), + instances: /* @__PURE__ */ new Set(), + plugins: /* @__PURE__ */ new Set() + }; + const i18n = { + ariaLinkLabel: "Altcha (officiell webbplats)", + enterCode: "Ange kod", + enterCodeAria: "Ange koden du hör. Tryck på mellanslag för att spela upp ljudet.", + error: "Verifiering misslyckades. Försök igen senare.", + expired: "Verifieringen har gått ut. Försök igen.", + footer: 'Skyddad av ALTCHA', + getAudioChallenge: "Få ljudutmaning", + label: "Jag är inte en robot", + loading: "Laddar...", + reload: "Ladda om", + verify: "Verifiera", + verificationRequired: "Verifiering krävs!", + verified: "Verifierad", + verifying: "Verifierar...", + waitAlert: "Verifierar... vänligen vänta.", + cancel: "Avbryt", + enterCodeFromImage: "För att fortsätta, ange koden från bilden nedan." + }; + globalThis.$altcha.i18n.set("sv", i18n); +})); diff --git a/frontend/node_modules/altcha/dist/i18n/sw.d.ts b/frontend/node_modules/altcha/dist/i18n/sw.d.ts new file mode 100644 index 0000000..a0a3aec --- /dev/null +++ b/frontend/node_modules/altcha/dist/i18n/sw.d.ts @@ -0,0 +1 @@ +declare module 'altcha/i18n/sw'; export {}; diff --git a/frontend/node_modules/altcha/dist/i18n/sw.js b/frontend/node_modules/altcha/dist/i18n/sw.js new file mode 100644 index 0000000..be6c100 --- /dev/null +++ b/frontend/node_modules/altcha/dist/i18n/sw.js @@ -0,0 +1,128 @@ +const noop = () => { +}; +function safe_not_equal(a, b) { + return a != a ? b == b : a !== b || a !== null && typeof a === "object" || typeof a === "function"; +} +function subscribe_to_store(store2, run, invalidate) { + if (store2 == null) { + run(void 0); + return noop; + } + const unsub = untrack( + () => store2.subscribe( + run, + // @ts-expect-error + invalidate + ) + ); + return unsub.unsubscribe ? () => unsub.unsubscribe() : unsub; +} +const subscriber_queue = []; +function writable(value, start = noop) { + let stop = null; + const subscribers = /* @__PURE__ */ new Set(); + function set(new_value) { + if (safe_not_equal(value, new_value)) { + value = new_value; + if (stop) { + const run_queue = !subscriber_queue.length; + for (const subscriber of subscribers) { + subscriber[1](); + subscriber_queue.push(subscriber, value); + } + if (run_queue) { + for (let i = 0; i < subscriber_queue.length; i += 2) { + subscriber_queue[i][0](subscriber_queue[i + 1]); + } + subscriber_queue.length = 0; + } + } + } + } + function update(fn) { + set(fn( + /** @type {T} */ + value + )); + } + function subscribe(run, invalidate = noop) { + const subscriber = [run, invalidate]; + subscribers.add(subscriber); + if (subscribers.size === 1) { + stop = start(set, update) || noop; + } + run( + /** @type {T} */ + value + ); + return () => { + subscribers.delete(subscriber); + if (subscribers.size === 0 && stop) { + stop(); + stop = null; + } + }; + } + return { set, update, subscribe }; +} +function get(store2) { + let value; + subscribe_to_store(store2, (_) => value = _)(); + return value; +} +let untracking = false; +function untrack(fn) { + var previous_untracking = untracking; + try { + untracking = true; + return fn(); + } finally { + untracking = previous_untracking; + } +} +function store(defaultValue) { + const scope = { + get: (name) => { + return get(scope.store)[name]; + }, + set: (name, value) => { + if (typeof name === "string") { + Object.assign(get(scope.store), { + [name]: value + }); + } else { + Object.assign(get(scope.store), name); + } + scope.store.set(get(scope.store)); + }, + store: writable(defaultValue) + }; + return scope; +} +globalThis.$altcha = globalThis.$altcha || { + algorithms: /* @__PURE__ */ new Map(), + defaults: store({}), + i18n: store({}), + instances: /* @__PURE__ */ new Set(), + plugins: /* @__PURE__ */ new Set() +}; +const i18n = { + ariaLinkLabel: "Altcha (tovuti rasmi)", + enterCode: "Weka nambari", + enterCodeAria: "Weka nambari unayosikia. Bonyeza Space kucheza sauti.", + error: "Uthibitishaji umeshindwa. Jaribu tena baadaye.", + expired: "Uthibitishaji umeisha. Jaribu tena.", + footer: 'Imealindwa na ALTCHA', + getAudioChallenge: "Pata changamoto ya sauti", + label: "Mimi sio roboti", + loading: "Inapakia...", + reload: "Pakia tena", + verify: "Thibitisha", + verificationRequired: "Uthibitishaji unahitajika!", + verified: "Imethibitishwa", + verifying: "Inathibitisha...", + waitAlert: "Inathibitisha... tafadhali subiri.", + cancel: "Ghairi", + enterCodeFromImage: "Ili kuendelea, tafadhali weka nambari kutoka kwa picha hapa chini." +}; +globalThis.$altcha.i18n.set("sw", i18n); diff --git a/frontend/node_modules/altcha/dist/i18n/sw.umd.cjs b/frontend/node_modules/altcha/dist/i18n/sw.umd.cjs new file mode 100644 index 0000000..9e3e4b9 --- /dev/null +++ b/frontend/node_modules/altcha/dist/i18n/sw.umd.cjs @@ -0,0 +1,133 @@ +(function(factory) { + typeof define === "function" && define.amd ? define(factory) : factory(); +})((function() { + "use strict"; + const noop = () => { + }; + function safe_not_equal(a, b) { + return a != a ? b == b : a !== b || a !== null && typeof a === "object" || typeof a === "function"; + } + function subscribe_to_store(store2, run, invalidate) { + if (store2 == null) { + run(void 0); + return noop; + } + const unsub = untrack( + () => store2.subscribe( + run, + // @ts-expect-error + invalidate + ) + ); + return unsub.unsubscribe ? () => unsub.unsubscribe() : unsub; + } + const subscriber_queue = []; + function writable(value, start = noop) { + let stop = null; + const subscribers = /* @__PURE__ */ new Set(); + function set(new_value) { + if (safe_not_equal(value, new_value)) { + value = new_value; + if (stop) { + const run_queue = !subscriber_queue.length; + for (const subscriber of subscribers) { + subscriber[1](); + subscriber_queue.push(subscriber, value); + } + if (run_queue) { + for (let i = 0; i < subscriber_queue.length; i += 2) { + subscriber_queue[i][0](subscriber_queue[i + 1]); + } + subscriber_queue.length = 0; + } + } + } + } + function update(fn) { + set(fn( + /** @type {T} */ + value + )); + } + function subscribe(run, invalidate = noop) { + const subscriber = [run, invalidate]; + subscribers.add(subscriber); + if (subscribers.size === 1) { + stop = start(set, update) || noop; + } + run( + /** @type {T} */ + value + ); + return () => { + subscribers.delete(subscriber); + if (subscribers.size === 0 && stop) { + stop(); + stop = null; + } + }; + } + return { set, update, subscribe }; + } + function get(store2) { + let value; + subscribe_to_store(store2, (_) => value = _)(); + return value; + } + let untracking = false; + function untrack(fn) { + var previous_untracking = untracking; + try { + untracking = true; + return fn(); + } finally { + untracking = previous_untracking; + } + } + function store(defaultValue) { + const scope = { + get: (name) => { + return get(scope.store)[name]; + }, + set: (name, value) => { + if (typeof name === "string") { + Object.assign(get(scope.store), { + [name]: value + }); + } else { + Object.assign(get(scope.store), name); + } + scope.store.set(get(scope.store)); + }, + store: writable(defaultValue) + }; + return scope; + } + globalThis.$altcha = globalThis.$altcha || { + algorithms: /* @__PURE__ */ new Map(), + defaults: store({}), + i18n: store({}), + instances: /* @__PURE__ */ new Set(), + plugins: /* @__PURE__ */ new Set() + }; + const i18n = { + ariaLinkLabel: "Altcha (tovuti rasmi)", + enterCode: "Weka nambari", + enterCodeAria: "Weka nambari unayosikia. Bonyeza Space kucheza sauti.", + error: "Uthibitishaji umeshindwa. Jaribu tena baadaye.", + expired: "Uthibitishaji umeisha. Jaribu tena.", + footer: 'Imealindwa na ALTCHA', + getAudioChallenge: "Pata changamoto ya sauti", + label: "Mimi sio roboti", + loading: "Inapakia...", + reload: "Pakia tena", + verify: "Thibitisha", + verificationRequired: "Uthibitishaji unahitajika!", + verified: "Imethibitishwa", + verifying: "Inathibitisha...", + waitAlert: "Inathibitisha... tafadhali subiri.", + cancel: "Ghairi", + enterCodeFromImage: "Ili kuendelea, tafadhali weka nambari kutoka kwa picha hapa chini." + }; + globalThis.$altcha.i18n.set("sw", i18n); +})); diff --git a/frontend/node_modules/altcha/dist/i18n/ta.d.ts b/frontend/node_modules/altcha/dist/i18n/ta.d.ts new file mode 100644 index 0000000..16ad75b --- /dev/null +++ b/frontend/node_modules/altcha/dist/i18n/ta.d.ts @@ -0,0 +1 @@ +declare module 'altcha/i18n/ta'; export {}; diff --git a/frontend/node_modules/altcha/dist/i18n/ta.js b/frontend/node_modules/altcha/dist/i18n/ta.js new file mode 100644 index 0000000..afcad50 --- /dev/null +++ b/frontend/node_modules/altcha/dist/i18n/ta.js @@ -0,0 +1,128 @@ +const noop = () => { +}; +function safe_not_equal(a, b) { + return a != a ? b == b : a !== b || a !== null && typeof a === "object" || typeof a === "function"; +} +function subscribe_to_store(store2, run, invalidate) { + if (store2 == null) { + run(void 0); + return noop; + } + const unsub = untrack( + () => store2.subscribe( + run, + // @ts-expect-error + invalidate + ) + ); + return unsub.unsubscribe ? () => unsub.unsubscribe() : unsub; +} +const subscriber_queue = []; +function writable(value, start = noop) { + let stop = null; + const subscribers = /* @__PURE__ */ new Set(); + function set(new_value) { + if (safe_not_equal(value, new_value)) { + value = new_value; + if (stop) { + const run_queue = !subscriber_queue.length; + for (const subscriber of subscribers) { + subscriber[1](); + subscriber_queue.push(subscriber, value); + } + if (run_queue) { + for (let i = 0; i < subscriber_queue.length; i += 2) { + subscriber_queue[i][0](subscriber_queue[i + 1]); + } + subscriber_queue.length = 0; + } + } + } + } + function update(fn) { + set(fn( + /** @type {T} */ + value + )); + } + function subscribe(run, invalidate = noop) { + const subscriber = [run, invalidate]; + subscribers.add(subscriber); + if (subscribers.size === 1) { + stop = start(set, update) || noop; + } + run( + /** @type {T} */ + value + ); + return () => { + subscribers.delete(subscriber); + if (subscribers.size === 0 && stop) { + stop(); + stop = null; + } + }; + } + return { set, update, subscribe }; +} +function get(store2) { + let value; + subscribe_to_store(store2, (_) => value = _)(); + return value; +} +let untracking = false; +function untrack(fn) { + var previous_untracking = untracking; + try { + untracking = true; + return fn(); + } finally { + untracking = previous_untracking; + } +} +function store(defaultValue) { + const scope = { + get: (name) => { + return get(scope.store)[name]; + }, + set: (name, value) => { + if (typeof name === "string") { + Object.assign(get(scope.store), { + [name]: value + }); + } else { + Object.assign(get(scope.store), name); + } + scope.store.set(get(scope.store)); + }, + store: writable(defaultValue) + }; + return scope; +} +globalThis.$altcha = globalThis.$altcha || { + algorithms: /* @__PURE__ */ new Map(), + defaults: store({}), + i18n: store({}), + instances: /* @__PURE__ */ new Set(), + plugins: /* @__PURE__ */ new Set() +}; +const i18n = { + ariaLinkLabel: "Altcha (அதிகாரப்பூர்வ வலைத்தளம்)", + enterCode: "குறியீட்டை உள்ளிடவும்", + enterCodeAria: "நீங்கள் கேட்கும் குறியீட்டை உள்ளிடவும். ஆடியோவை இயக்க Space ஐ அழுத்தவும்.", + error: "சரிபார்ப்பு தோல்வி. பிறகு மீண்டும் முயற்சிக்கவும்.", + expired: "சரிபார்ப்பு காலாவதியானது. மீண்டும் முயற்சிக்கவும்.", + footer: 'மூலமாக பாதுகாக்கப்பட்டவை ALTCHA', + getAudioChallenge: "ஒலி சவாலை பெறவும்", + label: "நான் ரோபோடான அல்ல", + loading: "செயலாக்கம்...", + reload: "மீண்டும் புதுப்பிக்கவும்", + verify: "சரிபார்க்கவும்", + verificationRequired: "சரிபார்ப்பு தேவை!", + verified: "சரிபார்க்கப்பட்டது", + verifying: "சரிபார்க்கப்படுகிறது...", + waitAlert: "சரிபார்க்கப்படுகிறது... தயவுசெய்து காத்திருக்கவும்.", + cancel: "ரத்துசெய்", + enterCodeFromImage: "தொடர, கீழே உள்ள படத்திலிருந்து குறியீட்டை உள்ளிடவும்." +}; +globalThis.$altcha.i18n.set("ta", i18n); diff --git a/frontend/node_modules/altcha/dist/i18n/ta.umd.cjs b/frontend/node_modules/altcha/dist/i18n/ta.umd.cjs new file mode 100644 index 0000000..a093e72 --- /dev/null +++ b/frontend/node_modules/altcha/dist/i18n/ta.umd.cjs @@ -0,0 +1,133 @@ +(function(factory) { + typeof define === "function" && define.amd ? define(factory) : factory(); +})((function() { + "use strict"; + const noop = () => { + }; + function safe_not_equal(a, b) { + return a != a ? b == b : a !== b || a !== null && typeof a === "object" || typeof a === "function"; + } + function subscribe_to_store(store2, run, invalidate) { + if (store2 == null) { + run(void 0); + return noop; + } + const unsub = untrack( + () => store2.subscribe( + run, + // @ts-expect-error + invalidate + ) + ); + return unsub.unsubscribe ? () => unsub.unsubscribe() : unsub; + } + const subscriber_queue = []; + function writable(value, start = noop) { + let stop = null; + const subscribers = /* @__PURE__ */ new Set(); + function set(new_value) { + if (safe_not_equal(value, new_value)) { + value = new_value; + if (stop) { + const run_queue = !subscriber_queue.length; + for (const subscriber of subscribers) { + subscriber[1](); + subscriber_queue.push(subscriber, value); + } + if (run_queue) { + for (let i = 0; i < subscriber_queue.length; i += 2) { + subscriber_queue[i][0](subscriber_queue[i + 1]); + } + subscriber_queue.length = 0; + } + } + } + } + function update(fn) { + set(fn( + /** @type {T} */ + value + )); + } + function subscribe(run, invalidate = noop) { + const subscriber = [run, invalidate]; + subscribers.add(subscriber); + if (subscribers.size === 1) { + stop = start(set, update) || noop; + } + run( + /** @type {T} */ + value + ); + return () => { + subscribers.delete(subscriber); + if (subscribers.size === 0 && stop) { + stop(); + stop = null; + } + }; + } + return { set, update, subscribe }; + } + function get(store2) { + let value; + subscribe_to_store(store2, (_) => value = _)(); + return value; + } + let untracking = false; + function untrack(fn) { + var previous_untracking = untracking; + try { + untracking = true; + return fn(); + } finally { + untracking = previous_untracking; + } + } + function store(defaultValue) { + const scope = { + get: (name) => { + return get(scope.store)[name]; + }, + set: (name, value) => { + if (typeof name === "string") { + Object.assign(get(scope.store), { + [name]: value + }); + } else { + Object.assign(get(scope.store), name); + } + scope.store.set(get(scope.store)); + }, + store: writable(defaultValue) + }; + return scope; + } + globalThis.$altcha = globalThis.$altcha || { + algorithms: /* @__PURE__ */ new Map(), + defaults: store({}), + i18n: store({}), + instances: /* @__PURE__ */ new Set(), + plugins: /* @__PURE__ */ new Set() + }; + const i18n = { + ariaLinkLabel: "Altcha (அதிகாரப்பூர்வ வலைத்தளம்)", + enterCode: "குறியீட்டை உள்ளிடவும்", + enterCodeAria: "நீங்கள் கேட்கும் குறியீட்டை உள்ளிடவும். ஆடியோவை இயக்க Space ஐ அழுத்தவும்.", + error: "சரிபார்ப்பு தோல்வி. பிறகு மீண்டும் முயற்சிக்கவும்.", + expired: "சரிபார்ப்பு காலாவதியானது. மீண்டும் முயற்சிக்கவும்.", + footer: 'மூலமாக பாதுகாக்கப்பட்டவை ALTCHA', + getAudioChallenge: "ஒலி சவாலை பெறவும்", + label: "நான் ரோபோடான அல்ல", + loading: "செயலாக்கம்...", + reload: "மீண்டும் புதுப்பிக்கவும்", + verify: "சரிபார்க்கவும்", + verificationRequired: "சரிபார்ப்பு தேவை!", + verified: "சரிபார்க்கப்பட்டது", + verifying: "சரிபார்க்கப்படுகிறது...", + waitAlert: "சரிபார்க்கப்படுகிறது... தயவுசெய்து காத்திருக்கவும்.", + cancel: "ரத்துசெய்", + enterCodeFromImage: "தொடர, கீழே உள்ள படத்திலிருந்து குறியீட்டை உள்ளிடவும்." + }; + globalThis.$altcha.i18n.set("ta", i18n); +})); diff --git a/frontend/node_modules/altcha/dist/i18n/te.d.ts b/frontend/node_modules/altcha/dist/i18n/te.d.ts new file mode 100644 index 0000000..b20cbfb --- /dev/null +++ b/frontend/node_modules/altcha/dist/i18n/te.d.ts @@ -0,0 +1 @@ +declare module 'altcha/i18n/te'; export {}; diff --git a/frontend/node_modules/altcha/dist/i18n/te.js b/frontend/node_modules/altcha/dist/i18n/te.js new file mode 100644 index 0000000..9808dd1 --- /dev/null +++ b/frontend/node_modules/altcha/dist/i18n/te.js @@ -0,0 +1,128 @@ +const noop = () => { +}; +function safe_not_equal(a, b) { + return a != a ? b == b : a !== b || a !== null && typeof a === "object" || typeof a === "function"; +} +function subscribe_to_store(store2, run, invalidate) { + if (store2 == null) { + run(void 0); + return noop; + } + const unsub = untrack( + () => store2.subscribe( + run, + // @ts-expect-error + invalidate + ) + ); + return unsub.unsubscribe ? () => unsub.unsubscribe() : unsub; +} +const subscriber_queue = []; +function writable(value, start = noop) { + let stop = null; + const subscribers = /* @__PURE__ */ new Set(); + function set(new_value) { + if (safe_not_equal(value, new_value)) { + value = new_value; + if (stop) { + const run_queue = !subscriber_queue.length; + for (const subscriber of subscribers) { + subscriber[1](); + subscriber_queue.push(subscriber, value); + } + if (run_queue) { + for (let i = 0; i < subscriber_queue.length; i += 2) { + subscriber_queue[i][0](subscriber_queue[i + 1]); + } + subscriber_queue.length = 0; + } + } + } + } + function update(fn) { + set(fn( + /** @type {T} */ + value + )); + } + function subscribe(run, invalidate = noop) { + const subscriber = [run, invalidate]; + subscribers.add(subscriber); + if (subscribers.size === 1) { + stop = start(set, update) || noop; + } + run( + /** @type {T} */ + value + ); + return () => { + subscribers.delete(subscriber); + if (subscribers.size === 0 && stop) { + stop(); + stop = null; + } + }; + } + return { set, update, subscribe }; +} +function get(store2) { + let value; + subscribe_to_store(store2, (_) => value = _)(); + return value; +} +let untracking = false; +function untrack(fn) { + var previous_untracking = untracking; + try { + untracking = true; + return fn(); + } finally { + untracking = previous_untracking; + } +} +function store(defaultValue) { + const scope = { + get: (name) => { + return get(scope.store)[name]; + }, + set: (name, value) => { + if (typeof name === "string") { + Object.assign(get(scope.store), { + [name]: value + }); + } else { + Object.assign(get(scope.store), name); + } + scope.store.set(get(scope.store)); + }, + store: writable(defaultValue) + }; + return scope; +} +globalThis.$altcha = globalThis.$altcha || { + algorithms: /* @__PURE__ */ new Map(), + defaults: store({}), + i18n: store({}), + instances: /* @__PURE__ */ new Set(), + plugins: /* @__PURE__ */ new Set() +}; +const i18n = { + ariaLinkLabel: "Altcha (అధికారిక వెబ్‌సైట్)", + enterCode: "కోడ్‌ని నమోదు చేయండి", + enterCodeAria: "మీరు విన్న కోడ్‌ని నమోదు చేయండి. ఆడియో ప్లే చేయడానికి స్పేస్‌ను నొక్కండి.", + error: "చెకింగ్ విఫలమైంది. దయచేసి మరల ప్రయత్నించండి.", + expired: "చెకింగ్ కాలం ముగిసింది. దయచేసి మరల ప్రయత్నించండి.", + footer: 'ఈ సైట్ రక్షించబడింది ALTCHA', + getAudioChallenge: "ఆడియో ఛాలెంజ్ పొందండి", + label: "నేను రోబోట్ కాదు", + loading: "లోడ్ అవుతోంది...", + reload: "మళ్ళీ లోడ్ చేయండి", + verify: "ధ్రువీకరించు", + verificationRequired: "ధృవీకరణ అవసరం!", + verified: "ధ్రువీకరించబడింది", + verifying: "ధ్రువీకరణ జరుగుతుంది...", + waitAlert: "ధ్రువీకరణ జరుగుతుంది... దయచేసి వేచి ఉండండి.", + cancel: "రద్దు చేయండి", + enterCodeFromImage: "కొనసాగడానికి, దయచేసి క్రింది చిత్రంలో ఉన్న కోడ్‌ను నమోదు చేయండి." +}; +globalThis.$altcha.i18n.set("te", i18n); diff --git a/frontend/node_modules/altcha/dist/i18n/te.umd.cjs b/frontend/node_modules/altcha/dist/i18n/te.umd.cjs new file mode 100644 index 0000000..a7b821d --- /dev/null +++ b/frontend/node_modules/altcha/dist/i18n/te.umd.cjs @@ -0,0 +1,133 @@ +(function(factory) { + typeof define === "function" && define.amd ? define(factory) : factory(); +})((function() { + "use strict"; + const noop = () => { + }; + function safe_not_equal(a, b) { + return a != a ? b == b : a !== b || a !== null && typeof a === "object" || typeof a === "function"; + } + function subscribe_to_store(store2, run, invalidate) { + if (store2 == null) { + run(void 0); + return noop; + } + const unsub = untrack( + () => store2.subscribe( + run, + // @ts-expect-error + invalidate + ) + ); + return unsub.unsubscribe ? () => unsub.unsubscribe() : unsub; + } + const subscriber_queue = []; + function writable(value, start = noop) { + let stop = null; + const subscribers = /* @__PURE__ */ new Set(); + function set(new_value) { + if (safe_not_equal(value, new_value)) { + value = new_value; + if (stop) { + const run_queue = !subscriber_queue.length; + for (const subscriber of subscribers) { + subscriber[1](); + subscriber_queue.push(subscriber, value); + } + if (run_queue) { + for (let i = 0; i < subscriber_queue.length; i += 2) { + subscriber_queue[i][0](subscriber_queue[i + 1]); + } + subscriber_queue.length = 0; + } + } + } + } + function update(fn) { + set(fn( + /** @type {T} */ + value + )); + } + function subscribe(run, invalidate = noop) { + const subscriber = [run, invalidate]; + subscribers.add(subscriber); + if (subscribers.size === 1) { + stop = start(set, update) || noop; + } + run( + /** @type {T} */ + value + ); + return () => { + subscribers.delete(subscriber); + if (subscribers.size === 0 && stop) { + stop(); + stop = null; + } + }; + } + return { set, update, subscribe }; + } + function get(store2) { + let value; + subscribe_to_store(store2, (_) => value = _)(); + return value; + } + let untracking = false; + function untrack(fn) { + var previous_untracking = untracking; + try { + untracking = true; + return fn(); + } finally { + untracking = previous_untracking; + } + } + function store(defaultValue) { + const scope = { + get: (name) => { + return get(scope.store)[name]; + }, + set: (name, value) => { + if (typeof name === "string") { + Object.assign(get(scope.store), { + [name]: value + }); + } else { + Object.assign(get(scope.store), name); + } + scope.store.set(get(scope.store)); + }, + store: writable(defaultValue) + }; + return scope; + } + globalThis.$altcha = globalThis.$altcha || { + algorithms: /* @__PURE__ */ new Map(), + defaults: store({}), + i18n: store({}), + instances: /* @__PURE__ */ new Set(), + plugins: /* @__PURE__ */ new Set() + }; + const i18n = { + ariaLinkLabel: "Altcha (అధికారిక వెబ్‌సైట్)", + enterCode: "కోడ్‌ని నమోదు చేయండి", + enterCodeAria: "మీరు విన్న కోడ్‌ని నమోదు చేయండి. ఆడియో ప్లే చేయడానికి స్పేస్‌ను నొక్కండి.", + error: "చెకింగ్ విఫలమైంది. దయచేసి మరల ప్రయత్నించండి.", + expired: "చెకింగ్ కాలం ముగిసింది. దయచేసి మరల ప్రయత్నించండి.", + footer: 'ఈ సైట్ రక్షించబడింది ALTCHA', + getAudioChallenge: "ఆడియో ఛాలెంజ్ పొందండి", + label: "నేను రోబోట్ కాదు", + loading: "లోడ్ అవుతోంది...", + reload: "మళ్ళీ లోడ్ చేయండి", + verify: "ధ్రువీకరించు", + verificationRequired: "ధృవీకరణ అవసరం!", + verified: "ధ్రువీకరించబడింది", + verifying: "ధ్రువీకరణ జరుగుతుంది...", + waitAlert: "ధ్రువీకరణ జరుగుతుంది... దయచేసి వేచి ఉండండి.", + cancel: "రద్దు చేయండి", + enterCodeFromImage: "కొనసాగడానికి, దయచేసి క్రింది చిత్రంలో ఉన్న కోడ్‌ను నమోదు చేయండి." + }; + globalThis.$altcha.i18n.set("te", i18n); +})); diff --git a/frontend/node_modules/altcha/dist/i18n/th.d.ts b/frontend/node_modules/altcha/dist/i18n/th.d.ts new file mode 100644 index 0000000..d376368 --- /dev/null +++ b/frontend/node_modules/altcha/dist/i18n/th.d.ts @@ -0,0 +1 @@ +declare module 'altcha/i18n/th'; export {}; diff --git a/frontend/node_modules/altcha/dist/i18n/th.js b/frontend/node_modules/altcha/dist/i18n/th.js new file mode 100644 index 0000000..5f4ea6c --- /dev/null +++ b/frontend/node_modules/altcha/dist/i18n/th.js @@ -0,0 +1,128 @@ +const noop = () => { +}; +function safe_not_equal(a, b) { + return a != a ? b == b : a !== b || a !== null && typeof a === "object" || typeof a === "function"; +} +function subscribe_to_store(store2, run, invalidate) { + if (store2 == null) { + run(void 0); + return noop; + } + const unsub = untrack( + () => store2.subscribe( + run, + // @ts-expect-error + invalidate + ) + ); + return unsub.unsubscribe ? () => unsub.unsubscribe() : unsub; +} +const subscriber_queue = []; +function writable(value, start = noop) { + let stop = null; + const subscribers = /* @__PURE__ */ new Set(); + function set(new_value) { + if (safe_not_equal(value, new_value)) { + value = new_value; + if (stop) { + const run_queue = !subscriber_queue.length; + for (const subscriber of subscribers) { + subscriber[1](); + subscriber_queue.push(subscriber, value); + } + if (run_queue) { + for (let i = 0; i < subscriber_queue.length; i += 2) { + subscriber_queue[i][0](subscriber_queue[i + 1]); + } + subscriber_queue.length = 0; + } + } + } + } + function update(fn) { + set(fn( + /** @type {T} */ + value + )); + } + function subscribe(run, invalidate = noop) { + const subscriber = [run, invalidate]; + subscribers.add(subscriber); + if (subscribers.size === 1) { + stop = start(set, update) || noop; + } + run( + /** @type {T} */ + value + ); + return () => { + subscribers.delete(subscriber); + if (subscribers.size === 0 && stop) { + stop(); + stop = null; + } + }; + } + return { set, update, subscribe }; +} +function get(store2) { + let value; + subscribe_to_store(store2, (_) => value = _)(); + return value; +} +let untracking = false; +function untrack(fn) { + var previous_untracking = untracking; + try { + untracking = true; + return fn(); + } finally { + untracking = previous_untracking; + } +} +function store(defaultValue) { + const scope = { + get: (name) => { + return get(scope.store)[name]; + }, + set: (name, value) => { + if (typeof name === "string") { + Object.assign(get(scope.store), { + [name]: value + }); + } else { + Object.assign(get(scope.store), name); + } + scope.store.set(get(scope.store)); + }, + store: writable(defaultValue) + }; + return scope; +} +globalThis.$altcha = globalThis.$altcha || { + algorithms: /* @__PURE__ */ new Map(), + defaults: store({}), + i18n: store({}), + instances: /* @__PURE__ */ new Set(), + plugins: /* @__PURE__ */ new Set() +}; +const i18n = { + ariaLinkLabel: "Altcha (เว็บไซต์ทางการ)", + enterCode: "ป้อนรหัส", + enterCodeAria: "ป้อนรหัสที่คุณได้ยิน กด Space เพื่อเล่นเสียง", + error: "การตรวจสอบล้มเหลว กรุณาลองอีกครั้งภายหลัง", + expired: "การตรวจสอบหมดอายุ กรุณาลองใหม่", + footer: 'ป้องกันโดย ALTCHA', + getAudioChallenge: "รับการท้าทายเสียง", + label: "ฉันไม่ใช่บอท", + loading: "กำลังโหลด...", + reload: "โหลดใหม่", + verify: "ตรวจสอบ", + verificationRequired: "จำเป็นต้องตรวจสอบ!", + verified: "ตรวจสอบแล้ว", + verifying: "กำลังตรวจสอบ...", + waitAlert: "กำลังตรวจสอบ... กรุณารอ", + cancel: "ยกเลิก", + enterCodeFromImage: "เพื่อดำเนินการต่อ โปรดป้อนรหัสจากรูปภาพด้านล่าง" +}; +globalThis.$altcha.i18n.set("th", i18n); diff --git a/frontend/node_modules/altcha/dist/i18n/th.umd.cjs b/frontend/node_modules/altcha/dist/i18n/th.umd.cjs new file mode 100644 index 0000000..58a9ece --- /dev/null +++ b/frontend/node_modules/altcha/dist/i18n/th.umd.cjs @@ -0,0 +1,133 @@ +(function(factory) { + typeof define === "function" && define.amd ? define(factory) : factory(); +})((function() { + "use strict"; + const noop = () => { + }; + function safe_not_equal(a, b) { + return a != a ? b == b : a !== b || a !== null && typeof a === "object" || typeof a === "function"; + } + function subscribe_to_store(store2, run, invalidate) { + if (store2 == null) { + run(void 0); + return noop; + } + const unsub = untrack( + () => store2.subscribe( + run, + // @ts-expect-error + invalidate + ) + ); + return unsub.unsubscribe ? () => unsub.unsubscribe() : unsub; + } + const subscriber_queue = []; + function writable(value, start = noop) { + let stop = null; + const subscribers = /* @__PURE__ */ new Set(); + function set(new_value) { + if (safe_not_equal(value, new_value)) { + value = new_value; + if (stop) { + const run_queue = !subscriber_queue.length; + for (const subscriber of subscribers) { + subscriber[1](); + subscriber_queue.push(subscriber, value); + } + if (run_queue) { + for (let i = 0; i < subscriber_queue.length; i += 2) { + subscriber_queue[i][0](subscriber_queue[i + 1]); + } + subscriber_queue.length = 0; + } + } + } + } + function update(fn) { + set(fn( + /** @type {T} */ + value + )); + } + function subscribe(run, invalidate = noop) { + const subscriber = [run, invalidate]; + subscribers.add(subscriber); + if (subscribers.size === 1) { + stop = start(set, update) || noop; + } + run( + /** @type {T} */ + value + ); + return () => { + subscribers.delete(subscriber); + if (subscribers.size === 0 && stop) { + stop(); + stop = null; + } + }; + } + return { set, update, subscribe }; + } + function get(store2) { + let value; + subscribe_to_store(store2, (_) => value = _)(); + return value; + } + let untracking = false; + function untrack(fn) { + var previous_untracking = untracking; + try { + untracking = true; + return fn(); + } finally { + untracking = previous_untracking; + } + } + function store(defaultValue) { + const scope = { + get: (name) => { + return get(scope.store)[name]; + }, + set: (name, value) => { + if (typeof name === "string") { + Object.assign(get(scope.store), { + [name]: value + }); + } else { + Object.assign(get(scope.store), name); + } + scope.store.set(get(scope.store)); + }, + store: writable(defaultValue) + }; + return scope; + } + globalThis.$altcha = globalThis.$altcha || { + algorithms: /* @__PURE__ */ new Map(), + defaults: store({}), + i18n: store({}), + instances: /* @__PURE__ */ new Set(), + plugins: /* @__PURE__ */ new Set() + }; + const i18n = { + ariaLinkLabel: "Altcha (เว็บไซต์ทางการ)", + enterCode: "ป้อนรหัส", + enterCodeAria: "ป้อนรหัสที่คุณได้ยิน กด Space เพื่อเล่นเสียง", + error: "การตรวจสอบล้มเหลว กรุณาลองอีกครั้งภายหลัง", + expired: "การตรวจสอบหมดอายุ กรุณาลองใหม่", + footer: 'ป้องกันโดย ALTCHA', + getAudioChallenge: "รับการท้าทายเสียง", + label: "ฉันไม่ใช่บอท", + loading: "กำลังโหลด...", + reload: "โหลดใหม่", + verify: "ตรวจสอบ", + verificationRequired: "จำเป็นต้องตรวจสอบ!", + verified: "ตรวจสอบแล้ว", + verifying: "กำลังตรวจสอบ...", + waitAlert: "กำลังตรวจสอบ... กรุณารอ", + cancel: "ยกเลิก", + enterCodeFromImage: "เพื่อดำเนินการต่อ โปรดป้อนรหัสจากรูปภาพด้านล่าง" + }; + globalThis.$altcha.i18n.set("th", i18n); +})); diff --git a/frontend/node_modules/altcha/dist/i18n/tk.d.ts b/frontend/node_modules/altcha/dist/i18n/tk.d.ts new file mode 100644 index 0000000..f8da091 --- /dev/null +++ b/frontend/node_modules/altcha/dist/i18n/tk.d.ts @@ -0,0 +1 @@ +declare module 'altcha/i18n/tk'; export {}; diff --git a/frontend/node_modules/altcha/dist/i18n/tk.js b/frontend/node_modules/altcha/dist/i18n/tk.js new file mode 100644 index 0000000..497a844 --- /dev/null +++ b/frontend/node_modules/altcha/dist/i18n/tk.js @@ -0,0 +1,128 @@ +const noop = () => { +}; +function safe_not_equal(a, b) { + return a != a ? b == b : a !== b || a !== null && typeof a === "object" || typeof a === "function"; +} +function subscribe_to_store(store2, run, invalidate) { + if (store2 == null) { + run(void 0); + return noop; + } + const unsub = untrack( + () => store2.subscribe( + run, + // @ts-expect-error + invalidate + ) + ); + return unsub.unsubscribe ? () => unsub.unsubscribe() : unsub; +} +const subscriber_queue = []; +function writable(value, start = noop) { + let stop = null; + const subscribers = /* @__PURE__ */ new Set(); + function set(new_value) { + if (safe_not_equal(value, new_value)) { + value = new_value; + if (stop) { + const run_queue = !subscriber_queue.length; + for (const subscriber of subscribers) { + subscriber[1](); + subscriber_queue.push(subscriber, value); + } + if (run_queue) { + for (let i = 0; i < subscriber_queue.length; i += 2) { + subscriber_queue[i][0](subscriber_queue[i + 1]); + } + subscriber_queue.length = 0; + } + } + } + } + function update(fn) { + set(fn( + /** @type {T} */ + value + )); + } + function subscribe(run, invalidate = noop) { + const subscriber = [run, invalidate]; + subscribers.add(subscriber); + if (subscribers.size === 1) { + stop = start(set, update) || noop; + } + run( + /** @type {T} */ + value + ); + return () => { + subscribers.delete(subscriber); + if (subscribers.size === 0 && stop) { + stop(); + stop = null; + } + }; + } + return { set, update, subscribe }; +} +function get(store2) { + let value; + subscribe_to_store(store2, (_) => value = _)(); + return value; +} +let untracking = false; +function untrack(fn) { + var previous_untracking = untracking; + try { + untracking = true; + return fn(); + } finally { + untracking = previous_untracking; + } +} +function store(defaultValue) { + const scope = { + get: (name) => { + return get(scope.store)[name]; + }, + set: (name, value) => { + if (typeof name === "string") { + Object.assign(get(scope.store), { + [name]: value + }); + } else { + Object.assign(get(scope.store), name); + } + scope.store.set(get(scope.store)); + }, + store: writable(defaultValue) + }; + return scope; +} +globalThis.$altcha = globalThis.$altcha || { + algorithms: /* @__PURE__ */ new Map(), + defaults: store({}), + i18n: store({}), + instances: /* @__PURE__ */ new Set(), + plugins: /* @__PURE__ */ new Set() +}; +const i18n = { + ariaLinkLabel: "Altcha (resmi web sahypa)", + enterCode: "Kody giriziň", + enterCodeAria: "Eşiden kodyňyzy giriziň. Sesli görkezmäni diňlemek üçin Space basyň.", + error: "Barlamak şowsuz boldy. Has soňrak synanyşyň.", + expired: "Barlamanyň möhleti gutardy. Gaýtadan synanyşyň.", + footer: 'Goralan ALTCHA tarapyndan', + getAudioChallenge: "Sesli tabşyryk alyň", + label: "Men robot däl", + loading: "Ýüklenýär...", + reload: "Täzeden ýükle", + verify: "Barla", + verificationRequired: "Barlamak zerurdyr!", + verified: "Barlandy", + verifying: "Barlanýar...", + waitAlert: "Barlanýar... garaşyň.", + cancel: "Ýapmak", + enterCodeFromImage: "Dowam etmek üçin, aşakdaky suratyň koduny giriziň." +}; +globalThis.$altcha.i18n.set("tk", i18n); diff --git a/frontend/node_modules/altcha/dist/i18n/tk.umd.cjs b/frontend/node_modules/altcha/dist/i18n/tk.umd.cjs new file mode 100644 index 0000000..00a7757 --- /dev/null +++ b/frontend/node_modules/altcha/dist/i18n/tk.umd.cjs @@ -0,0 +1,133 @@ +(function(factory) { + typeof define === "function" && define.amd ? define(factory) : factory(); +})((function() { + "use strict"; + const noop = () => { + }; + function safe_not_equal(a, b) { + return a != a ? b == b : a !== b || a !== null && typeof a === "object" || typeof a === "function"; + } + function subscribe_to_store(store2, run, invalidate) { + if (store2 == null) { + run(void 0); + return noop; + } + const unsub = untrack( + () => store2.subscribe( + run, + // @ts-expect-error + invalidate + ) + ); + return unsub.unsubscribe ? () => unsub.unsubscribe() : unsub; + } + const subscriber_queue = []; + function writable(value, start = noop) { + let stop = null; + const subscribers = /* @__PURE__ */ new Set(); + function set(new_value) { + if (safe_not_equal(value, new_value)) { + value = new_value; + if (stop) { + const run_queue = !subscriber_queue.length; + for (const subscriber of subscribers) { + subscriber[1](); + subscriber_queue.push(subscriber, value); + } + if (run_queue) { + for (let i = 0; i < subscriber_queue.length; i += 2) { + subscriber_queue[i][0](subscriber_queue[i + 1]); + } + subscriber_queue.length = 0; + } + } + } + } + function update(fn) { + set(fn( + /** @type {T} */ + value + )); + } + function subscribe(run, invalidate = noop) { + const subscriber = [run, invalidate]; + subscribers.add(subscriber); + if (subscribers.size === 1) { + stop = start(set, update) || noop; + } + run( + /** @type {T} */ + value + ); + return () => { + subscribers.delete(subscriber); + if (subscribers.size === 0 && stop) { + stop(); + stop = null; + } + }; + } + return { set, update, subscribe }; + } + function get(store2) { + let value; + subscribe_to_store(store2, (_) => value = _)(); + return value; + } + let untracking = false; + function untrack(fn) { + var previous_untracking = untracking; + try { + untracking = true; + return fn(); + } finally { + untracking = previous_untracking; + } + } + function store(defaultValue) { + const scope = { + get: (name) => { + return get(scope.store)[name]; + }, + set: (name, value) => { + if (typeof name === "string") { + Object.assign(get(scope.store), { + [name]: value + }); + } else { + Object.assign(get(scope.store), name); + } + scope.store.set(get(scope.store)); + }, + store: writable(defaultValue) + }; + return scope; + } + globalThis.$altcha = globalThis.$altcha || { + algorithms: /* @__PURE__ */ new Map(), + defaults: store({}), + i18n: store({}), + instances: /* @__PURE__ */ new Set(), + plugins: /* @__PURE__ */ new Set() + }; + const i18n = { + ariaLinkLabel: "Altcha (resmi web sahypa)", + enterCode: "Kody giriziň", + enterCodeAria: "Eşiden kodyňyzy giriziň. Sesli görkezmäni diňlemek üçin Space basyň.", + error: "Barlamak şowsuz boldy. Has soňrak synanyşyň.", + expired: "Barlamanyň möhleti gutardy. Gaýtadan synanyşyň.", + footer: 'Goralan ALTCHA tarapyndan', + getAudioChallenge: "Sesli tabşyryk alyň", + label: "Men robot däl", + loading: "Ýüklenýär...", + reload: "Täzeden ýükle", + verify: "Barla", + verificationRequired: "Barlamak zerurdyr!", + verified: "Barlandy", + verifying: "Barlanýar...", + waitAlert: "Barlanýar... garaşyň.", + cancel: "Ýapmak", + enterCodeFromImage: "Dowam etmek üçin, aşakdaky suratyň koduny giriziň." + }; + globalThis.$altcha.i18n.set("tk", i18n); +})); diff --git a/frontend/node_modules/altcha/dist/i18n/tr.d.ts b/frontend/node_modules/altcha/dist/i18n/tr.d.ts new file mode 100644 index 0000000..fd12935 --- /dev/null +++ b/frontend/node_modules/altcha/dist/i18n/tr.d.ts @@ -0,0 +1 @@ +declare module 'altcha/i18n/tr'; export {}; diff --git a/frontend/node_modules/altcha/dist/i18n/tr.js b/frontend/node_modules/altcha/dist/i18n/tr.js new file mode 100644 index 0000000..377acda --- /dev/null +++ b/frontend/node_modules/altcha/dist/i18n/tr.js @@ -0,0 +1,128 @@ +const noop = () => { +}; +function safe_not_equal(a, b) { + return a != a ? b == b : a !== b || a !== null && typeof a === "object" || typeof a === "function"; +} +function subscribe_to_store(store2, run, invalidate) { + if (store2 == null) { + run(void 0); + return noop; + } + const unsub = untrack( + () => store2.subscribe( + run, + // @ts-expect-error + invalidate + ) + ); + return unsub.unsubscribe ? () => unsub.unsubscribe() : unsub; +} +const subscriber_queue = []; +function writable(value, start = noop) { + let stop = null; + const subscribers = /* @__PURE__ */ new Set(); + function set(new_value) { + if (safe_not_equal(value, new_value)) { + value = new_value; + if (stop) { + const run_queue = !subscriber_queue.length; + for (const subscriber of subscribers) { + subscriber[1](); + subscriber_queue.push(subscriber, value); + } + if (run_queue) { + for (let i = 0; i < subscriber_queue.length; i += 2) { + subscriber_queue[i][0](subscriber_queue[i + 1]); + } + subscriber_queue.length = 0; + } + } + } + } + function update(fn) { + set(fn( + /** @type {T} */ + value + )); + } + function subscribe(run, invalidate = noop) { + const subscriber = [run, invalidate]; + subscribers.add(subscriber); + if (subscribers.size === 1) { + stop = start(set, update) || noop; + } + run( + /** @type {T} */ + value + ); + return () => { + subscribers.delete(subscriber); + if (subscribers.size === 0 && stop) { + stop(); + stop = null; + } + }; + } + return { set, update, subscribe }; +} +function get(store2) { + let value; + subscribe_to_store(store2, (_) => value = _)(); + return value; +} +let untracking = false; +function untrack(fn) { + var previous_untracking = untracking; + try { + untracking = true; + return fn(); + } finally { + untracking = previous_untracking; + } +} +function store(defaultValue) { + const scope = { + get: (name) => { + return get(scope.store)[name]; + }, + set: (name, value) => { + if (typeof name === "string") { + Object.assign(get(scope.store), { + [name]: value + }); + } else { + Object.assign(get(scope.store), name); + } + scope.store.set(get(scope.store)); + }, + store: writable(defaultValue) + }; + return scope; +} +globalThis.$altcha = globalThis.$altcha || { + algorithms: /* @__PURE__ */ new Map(), + defaults: store({}), + i18n: store({}), + instances: /* @__PURE__ */ new Set(), + plugins: /* @__PURE__ */ new Set() +}; +const i18n = { + ariaLinkLabel: "Altcha (resmi web sitesi)", + enterCode: "Kodu girin", + enterCodeAria: "Duyduğunuz kodu girin. Ses dosyasını oynatmak için Boşluk tuşuna basın.", + error: "Doğrulama başarısız oldu. Lütfen daha sonra tekrar deneyin.", + expired: "Doğrulama süresi doldu. Lütfen tekrar deneyin.", + footer: 'ALTCHA tarafından korunuyor ALTCHA', + getAudioChallenge: "Sesli doğrulama al", + label: "Ben robot değilim", + loading: "Yükleniyor...", + reload: "Yeniden yükle", + verify: "Doğrula", + verificationRequired: "Doğrulama gerekli!", + verified: "Doğrulandı", + verifying: "Doğrulama yapılıyor...", + waitAlert: "Doğrulama yapılıyor... lütfen bekleyin.", + cancel: "İptal", + enterCodeFromImage: "Devam etmek için lütfen aşağıdaki resimdeki kodu girin." +}; +globalThis.$altcha.i18n.set("tr", i18n); diff --git a/frontend/node_modules/altcha/dist/i18n/tr.umd.cjs b/frontend/node_modules/altcha/dist/i18n/tr.umd.cjs new file mode 100644 index 0000000..9de4a51 --- /dev/null +++ b/frontend/node_modules/altcha/dist/i18n/tr.umd.cjs @@ -0,0 +1,133 @@ +(function(factory) { + typeof define === "function" && define.amd ? define(factory) : factory(); +})((function() { + "use strict"; + const noop = () => { + }; + function safe_not_equal(a, b) { + return a != a ? b == b : a !== b || a !== null && typeof a === "object" || typeof a === "function"; + } + function subscribe_to_store(store2, run, invalidate) { + if (store2 == null) { + run(void 0); + return noop; + } + const unsub = untrack( + () => store2.subscribe( + run, + // @ts-expect-error + invalidate + ) + ); + return unsub.unsubscribe ? () => unsub.unsubscribe() : unsub; + } + const subscriber_queue = []; + function writable(value, start = noop) { + let stop = null; + const subscribers = /* @__PURE__ */ new Set(); + function set(new_value) { + if (safe_not_equal(value, new_value)) { + value = new_value; + if (stop) { + const run_queue = !subscriber_queue.length; + for (const subscriber of subscribers) { + subscriber[1](); + subscriber_queue.push(subscriber, value); + } + if (run_queue) { + for (let i = 0; i < subscriber_queue.length; i += 2) { + subscriber_queue[i][0](subscriber_queue[i + 1]); + } + subscriber_queue.length = 0; + } + } + } + } + function update(fn) { + set(fn( + /** @type {T} */ + value + )); + } + function subscribe(run, invalidate = noop) { + const subscriber = [run, invalidate]; + subscribers.add(subscriber); + if (subscribers.size === 1) { + stop = start(set, update) || noop; + } + run( + /** @type {T} */ + value + ); + return () => { + subscribers.delete(subscriber); + if (subscribers.size === 0 && stop) { + stop(); + stop = null; + } + }; + } + return { set, update, subscribe }; + } + function get(store2) { + let value; + subscribe_to_store(store2, (_) => value = _)(); + return value; + } + let untracking = false; + function untrack(fn) { + var previous_untracking = untracking; + try { + untracking = true; + return fn(); + } finally { + untracking = previous_untracking; + } + } + function store(defaultValue) { + const scope = { + get: (name) => { + return get(scope.store)[name]; + }, + set: (name, value) => { + if (typeof name === "string") { + Object.assign(get(scope.store), { + [name]: value + }); + } else { + Object.assign(get(scope.store), name); + } + scope.store.set(get(scope.store)); + }, + store: writable(defaultValue) + }; + return scope; + } + globalThis.$altcha = globalThis.$altcha || { + algorithms: /* @__PURE__ */ new Map(), + defaults: store({}), + i18n: store({}), + instances: /* @__PURE__ */ new Set(), + plugins: /* @__PURE__ */ new Set() + }; + const i18n = { + ariaLinkLabel: "Altcha (resmi web sitesi)", + enterCode: "Kodu girin", + enterCodeAria: "Duyduğunuz kodu girin. Ses dosyasını oynatmak için Boşluk tuşuna basın.", + error: "Doğrulama başarısız oldu. Lütfen daha sonra tekrar deneyin.", + expired: "Doğrulama süresi doldu. Lütfen tekrar deneyin.", + footer: 'ALTCHA tarafından korunuyor ALTCHA', + getAudioChallenge: "Sesli doğrulama al", + label: "Ben robot değilim", + loading: "Yükleniyor...", + reload: "Yeniden yükle", + verify: "Doğrula", + verificationRequired: "Doğrulama gerekli!", + verified: "Doğrulandı", + verifying: "Doğrulama yapılıyor...", + waitAlert: "Doğrulama yapılıyor... lütfen bekleyin.", + cancel: "İptal", + enterCodeFromImage: "Devam etmek için lütfen aşağıdaki resimdeki kodu girin." + }; + globalThis.$altcha.i18n.set("tr", i18n); +})); diff --git a/frontend/node_modules/altcha/dist/i18n/tw.d.ts b/frontend/node_modules/altcha/dist/i18n/tw.d.ts new file mode 100644 index 0000000..0e3c8a6 --- /dev/null +++ b/frontend/node_modules/altcha/dist/i18n/tw.d.ts @@ -0,0 +1 @@ +declare module 'altcha/i18n/tw'; export {}; diff --git a/frontend/node_modules/altcha/dist/i18n/uk.d.ts b/frontend/node_modules/altcha/dist/i18n/uk.d.ts new file mode 100644 index 0000000..f42b9d1 --- /dev/null +++ b/frontend/node_modules/altcha/dist/i18n/uk.d.ts @@ -0,0 +1 @@ +declare module 'altcha/i18n/uk'; export {}; diff --git a/frontend/node_modules/altcha/dist/i18n/uk.js b/frontend/node_modules/altcha/dist/i18n/uk.js new file mode 100644 index 0000000..43bf395 --- /dev/null +++ b/frontend/node_modules/altcha/dist/i18n/uk.js @@ -0,0 +1,128 @@ +const noop = () => { +}; +function safe_not_equal(a, b) { + return a != a ? b == b : a !== b || a !== null && typeof a === "object" || typeof a === "function"; +} +function subscribe_to_store(store2, run, invalidate) { + if (store2 == null) { + run(void 0); + return noop; + } + const unsub = untrack( + () => store2.subscribe( + run, + // @ts-expect-error + invalidate + ) + ); + return unsub.unsubscribe ? () => unsub.unsubscribe() : unsub; +} +const subscriber_queue = []; +function writable(value, start = noop) { + let stop = null; + const subscribers = /* @__PURE__ */ new Set(); + function set(new_value) { + if (safe_not_equal(value, new_value)) { + value = new_value; + if (stop) { + const run_queue = !subscriber_queue.length; + for (const subscriber of subscribers) { + subscriber[1](); + subscriber_queue.push(subscriber, value); + } + if (run_queue) { + for (let i = 0; i < subscriber_queue.length; i += 2) { + subscriber_queue[i][0](subscriber_queue[i + 1]); + } + subscriber_queue.length = 0; + } + } + } + } + function update(fn) { + set(fn( + /** @type {T} */ + value + )); + } + function subscribe(run, invalidate = noop) { + const subscriber = [run, invalidate]; + subscribers.add(subscriber); + if (subscribers.size === 1) { + stop = start(set, update) || noop; + } + run( + /** @type {T} */ + value + ); + return () => { + subscribers.delete(subscriber); + if (subscribers.size === 0 && stop) { + stop(); + stop = null; + } + }; + } + return { set, update, subscribe }; +} +function get(store2) { + let value; + subscribe_to_store(store2, (_) => value = _)(); + return value; +} +let untracking = false; +function untrack(fn) { + var previous_untracking = untracking; + try { + untracking = true; + return fn(); + } finally { + untracking = previous_untracking; + } +} +function store(defaultValue) { + const scope = { + get: (name) => { + return get(scope.store)[name]; + }, + set: (name, value) => { + if (typeof name === "string") { + Object.assign(get(scope.store), { + [name]: value + }); + } else { + Object.assign(get(scope.store), name); + } + scope.store.set(get(scope.store)); + }, + store: writable(defaultValue) + }; + return scope; +} +globalThis.$altcha = globalThis.$altcha || { + algorithms: /* @__PURE__ */ new Map(), + defaults: store({}), + i18n: store({}), + instances: /* @__PURE__ */ new Set(), + plugins: /* @__PURE__ */ new Set() +}; +const i18n = { + ariaLinkLabel: "Altcha (офіційний сайт)", + enterCode: "Введіть код", + enterCodeAria: "Введіть код, який ви чуєте. Натисніть пробіл, щоб відтворити аудіо.", + error: "Перевірка не вдалася. Спробуйте пізніше.", + expired: "Перевірка прострочена. Спробуйте знову.", + footer: 'Захищено ALTCHA', + getAudioChallenge: "Отримати аудіо-челлендж", + label: "Я не робот", + loading: "Завантаження...", + reload: "Перезавантажити", + verify: "Перевірити", + verificationRequired: "Потрібна перевірка!", + verified: "Перевірено", + verifying: "Перевіряється...", + waitAlert: "Перевірка... будь ласка, зачекайте.", + cancel: "Скасувати", + enterCodeFromImage: "Щоб продовжити, введіть код із зображення нижче." +}; +globalThis.$altcha.i18n.set("uk", i18n); diff --git a/frontend/node_modules/altcha/dist/i18n/uk.umd.cjs b/frontend/node_modules/altcha/dist/i18n/uk.umd.cjs new file mode 100644 index 0000000..d4529c7 --- /dev/null +++ b/frontend/node_modules/altcha/dist/i18n/uk.umd.cjs @@ -0,0 +1,133 @@ +(function(factory) { + typeof define === "function" && define.amd ? define(factory) : factory(); +})((function() { + "use strict"; + const noop = () => { + }; + function safe_not_equal(a, b) { + return a != a ? b == b : a !== b || a !== null && typeof a === "object" || typeof a === "function"; + } + function subscribe_to_store(store2, run, invalidate) { + if (store2 == null) { + run(void 0); + return noop; + } + const unsub = untrack( + () => store2.subscribe( + run, + // @ts-expect-error + invalidate + ) + ); + return unsub.unsubscribe ? () => unsub.unsubscribe() : unsub; + } + const subscriber_queue = []; + function writable(value, start = noop) { + let stop = null; + const subscribers = /* @__PURE__ */ new Set(); + function set(new_value) { + if (safe_not_equal(value, new_value)) { + value = new_value; + if (stop) { + const run_queue = !subscriber_queue.length; + for (const subscriber of subscribers) { + subscriber[1](); + subscriber_queue.push(subscriber, value); + } + if (run_queue) { + for (let i = 0; i < subscriber_queue.length; i += 2) { + subscriber_queue[i][0](subscriber_queue[i + 1]); + } + subscriber_queue.length = 0; + } + } + } + } + function update(fn) { + set(fn( + /** @type {T} */ + value + )); + } + function subscribe(run, invalidate = noop) { + const subscriber = [run, invalidate]; + subscribers.add(subscriber); + if (subscribers.size === 1) { + stop = start(set, update) || noop; + } + run( + /** @type {T} */ + value + ); + return () => { + subscribers.delete(subscriber); + if (subscribers.size === 0 && stop) { + stop(); + stop = null; + } + }; + } + return { set, update, subscribe }; + } + function get(store2) { + let value; + subscribe_to_store(store2, (_) => value = _)(); + return value; + } + let untracking = false; + function untrack(fn) { + var previous_untracking = untracking; + try { + untracking = true; + return fn(); + } finally { + untracking = previous_untracking; + } + } + function store(defaultValue) { + const scope = { + get: (name) => { + return get(scope.store)[name]; + }, + set: (name, value) => { + if (typeof name === "string") { + Object.assign(get(scope.store), { + [name]: value + }); + } else { + Object.assign(get(scope.store), name); + } + scope.store.set(get(scope.store)); + }, + store: writable(defaultValue) + }; + return scope; + } + globalThis.$altcha = globalThis.$altcha || { + algorithms: /* @__PURE__ */ new Map(), + defaults: store({}), + i18n: store({}), + instances: /* @__PURE__ */ new Set(), + plugins: /* @__PURE__ */ new Set() + }; + const i18n = { + ariaLinkLabel: "Altcha (офіційний сайт)", + enterCode: "Введіть код", + enterCodeAria: "Введіть код, який ви чуєте. Натисніть пробіл, щоб відтворити аудіо.", + error: "Перевірка не вдалася. Спробуйте пізніше.", + expired: "Перевірка прострочена. Спробуйте знову.", + footer: 'Захищено ALTCHA', + getAudioChallenge: "Отримати аудіо-челлендж", + label: "Я не робот", + loading: "Завантаження...", + reload: "Перезавантажити", + verify: "Перевірити", + verificationRequired: "Потрібна перевірка!", + verified: "Перевірено", + verifying: "Перевіряється...", + waitAlert: "Перевірка... будь ласка, зачекайте.", + cancel: "Скасувати", + enterCodeFromImage: "Щоб продовжити, введіть код із зображення нижче." + }; + globalThis.$altcha.i18n.set("uk", i18n); +})); diff --git a/frontend/node_modules/altcha/dist/i18n/ur.d.ts b/frontend/node_modules/altcha/dist/i18n/ur.d.ts new file mode 100644 index 0000000..671320b --- /dev/null +++ b/frontend/node_modules/altcha/dist/i18n/ur.d.ts @@ -0,0 +1 @@ +declare module 'altcha/i18n/ur'; export {}; diff --git a/frontend/node_modules/altcha/dist/i18n/ur.js b/frontend/node_modules/altcha/dist/i18n/ur.js new file mode 100644 index 0000000..d5e7159 --- /dev/null +++ b/frontend/node_modules/altcha/dist/i18n/ur.js @@ -0,0 +1,128 @@ +const noop = () => { +}; +function safe_not_equal(a, b) { + return a != a ? b == b : a !== b || a !== null && typeof a === "object" || typeof a === "function"; +} +function subscribe_to_store(store2, run, invalidate) { + if (store2 == null) { + run(void 0); + return noop; + } + const unsub = untrack( + () => store2.subscribe( + run, + // @ts-expect-error + invalidate + ) + ); + return unsub.unsubscribe ? () => unsub.unsubscribe() : unsub; +} +const subscriber_queue = []; +function writable(value, start = noop) { + let stop = null; + const subscribers = /* @__PURE__ */ new Set(); + function set(new_value) { + if (safe_not_equal(value, new_value)) { + value = new_value; + if (stop) { + const run_queue = !subscriber_queue.length; + for (const subscriber of subscribers) { + subscriber[1](); + subscriber_queue.push(subscriber, value); + } + if (run_queue) { + for (let i = 0; i < subscriber_queue.length; i += 2) { + subscriber_queue[i][0](subscriber_queue[i + 1]); + } + subscriber_queue.length = 0; + } + } + } + } + function update(fn) { + set(fn( + /** @type {T} */ + value + )); + } + function subscribe(run, invalidate = noop) { + const subscriber = [run, invalidate]; + subscribers.add(subscriber); + if (subscribers.size === 1) { + stop = start(set, update) || noop; + } + run( + /** @type {T} */ + value + ); + return () => { + subscribers.delete(subscriber); + if (subscribers.size === 0 && stop) { + stop(); + stop = null; + } + }; + } + return { set, update, subscribe }; +} +function get(store2) { + let value; + subscribe_to_store(store2, (_) => value = _)(); + return value; +} +let untracking = false; +function untrack(fn) { + var previous_untracking = untracking; + try { + untracking = true; + return fn(); + } finally { + untracking = previous_untracking; + } +} +function store(defaultValue) { + const scope = { + get: (name) => { + return get(scope.store)[name]; + }, + set: (name, value) => { + if (typeof name === "string") { + Object.assign(get(scope.store), { + [name]: value + }); + } else { + Object.assign(get(scope.store), name); + } + scope.store.set(get(scope.store)); + }, + store: writable(defaultValue) + }; + return scope; +} +globalThis.$altcha = globalThis.$altcha || { + algorithms: /* @__PURE__ */ new Map(), + defaults: store({}), + i18n: store({}), + instances: /* @__PURE__ */ new Set(), + plugins: /* @__PURE__ */ new Set() +}; +const i18n = { + ariaLinkLabel: "Altcha (سرکاری ویب سائٹ)", + enterCode: "کوڈ درج کریں", + enterCodeAria: "جو کوڈ آپ سنتے ہیں وہ درج کریں۔ آڈیو چلانے کے لیے اسپیس دبائیں۔", + error: "توثیق ناکام ہو گئی۔ براہ کرم بعد میں دوبارہ کوشش کریں۔", + expired: "توثیق کی مدت ختم ہو گئی ہے۔ براہ کرم دوبارہ کوشش کریں۔", + footer: 'کے ذریعے محفوظ ALTCHA', + getAudioChallenge: "آڈیو چیلنج حاصل کریں", + label: "میں روبوٹ نہیں ہوں", + loading: "لوڈ ہو رہا ہے...", + reload: "دوبارہ لوڈ کریں", + verify: "توثیق کریں", + verificationRequired: "تصدیق ضروری ہے!", + verified: "توثیق شدہ", + verifying: "توثیق ہو رہی ہے...", + waitAlert: "توثیق ہو رہی ہے... براہ کرم انتظار کریں۔", + cancel: "منسوخ کریں", + enterCodeFromImage: "اگلے مرحلے پر جانے کے لیے، براہ کرم نیچے دی گئی تصویر سے کوڈ درج کریں۔" +}; +globalThis.$altcha.i18n.set("ur", i18n); diff --git a/frontend/node_modules/altcha/dist/i18n/ur.umd.cjs b/frontend/node_modules/altcha/dist/i18n/ur.umd.cjs new file mode 100644 index 0000000..3a2df40 --- /dev/null +++ b/frontend/node_modules/altcha/dist/i18n/ur.umd.cjs @@ -0,0 +1,133 @@ +(function(factory) { + typeof define === "function" && define.amd ? define(factory) : factory(); +})((function() { + "use strict"; + const noop = () => { + }; + function safe_not_equal(a, b) { + return a != a ? b == b : a !== b || a !== null && typeof a === "object" || typeof a === "function"; + } + function subscribe_to_store(store2, run, invalidate) { + if (store2 == null) { + run(void 0); + return noop; + } + const unsub = untrack( + () => store2.subscribe( + run, + // @ts-expect-error + invalidate + ) + ); + return unsub.unsubscribe ? () => unsub.unsubscribe() : unsub; + } + const subscriber_queue = []; + function writable(value, start = noop) { + let stop = null; + const subscribers = /* @__PURE__ */ new Set(); + function set(new_value) { + if (safe_not_equal(value, new_value)) { + value = new_value; + if (stop) { + const run_queue = !subscriber_queue.length; + for (const subscriber of subscribers) { + subscriber[1](); + subscriber_queue.push(subscriber, value); + } + if (run_queue) { + for (let i = 0; i < subscriber_queue.length; i += 2) { + subscriber_queue[i][0](subscriber_queue[i + 1]); + } + subscriber_queue.length = 0; + } + } + } + } + function update(fn) { + set(fn( + /** @type {T} */ + value + )); + } + function subscribe(run, invalidate = noop) { + const subscriber = [run, invalidate]; + subscribers.add(subscriber); + if (subscribers.size === 1) { + stop = start(set, update) || noop; + } + run( + /** @type {T} */ + value + ); + return () => { + subscribers.delete(subscriber); + if (subscribers.size === 0 && stop) { + stop(); + stop = null; + } + }; + } + return { set, update, subscribe }; + } + function get(store2) { + let value; + subscribe_to_store(store2, (_) => value = _)(); + return value; + } + let untracking = false; + function untrack(fn) { + var previous_untracking = untracking; + try { + untracking = true; + return fn(); + } finally { + untracking = previous_untracking; + } + } + function store(defaultValue) { + const scope = { + get: (name) => { + return get(scope.store)[name]; + }, + set: (name, value) => { + if (typeof name === "string") { + Object.assign(get(scope.store), { + [name]: value + }); + } else { + Object.assign(get(scope.store), name); + } + scope.store.set(get(scope.store)); + }, + store: writable(defaultValue) + }; + return scope; + } + globalThis.$altcha = globalThis.$altcha || { + algorithms: /* @__PURE__ */ new Map(), + defaults: store({}), + i18n: store({}), + instances: /* @__PURE__ */ new Set(), + plugins: /* @__PURE__ */ new Set() + }; + const i18n = { + ariaLinkLabel: "Altcha (سرکاری ویب سائٹ)", + enterCode: "کوڈ درج کریں", + enterCodeAria: "جو کوڈ آپ سنتے ہیں وہ درج کریں۔ آڈیو چلانے کے لیے اسپیس دبائیں۔", + error: "توثیق ناکام ہو گئی۔ براہ کرم بعد میں دوبارہ کوشش کریں۔", + expired: "توثیق کی مدت ختم ہو گئی ہے۔ براہ کرم دوبارہ کوشش کریں۔", + footer: 'کے ذریعے محفوظ ALTCHA', + getAudioChallenge: "آڈیو چیلنج حاصل کریں", + label: "میں روبوٹ نہیں ہوں", + loading: "لوڈ ہو رہا ہے...", + reload: "دوبارہ لوڈ کریں", + verify: "توثیق کریں", + verificationRequired: "تصدیق ضروری ہے!", + verified: "توثیق شدہ", + verifying: "توثیق ہو رہی ہے...", + waitAlert: "توثیق ہو رہی ہے... براہ کرم انتظار کریں۔", + cancel: "منسوخ کریں", + enterCodeFromImage: "اگلے مرحلے پر جانے کے لیے، براہ کرم نیچے دی گئی تصویر سے کوڈ درج کریں۔" + }; + globalThis.$altcha.i18n.set("ur", i18n); +})); diff --git a/frontend/node_modules/altcha/dist/i18n/uz.d.ts b/frontend/node_modules/altcha/dist/i18n/uz.d.ts new file mode 100644 index 0000000..39d9669 --- /dev/null +++ b/frontend/node_modules/altcha/dist/i18n/uz.d.ts @@ -0,0 +1 @@ +declare module 'altcha/i18n/uz'; export {}; diff --git a/frontend/node_modules/altcha/dist/i18n/uz.js b/frontend/node_modules/altcha/dist/i18n/uz.js new file mode 100644 index 0000000..c18988f --- /dev/null +++ b/frontend/node_modules/altcha/dist/i18n/uz.js @@ -0,0 +1,128 @@ +const noop = () => { +}; +function safe_not_equal(a, b) { + return a != a ? b == b : a !== b || a !== null && typeof a === "object" || typeof a === "function"; +} +function subscribe_to_store(store2, run, invalidate) { + if (store2 == null) { + run(void 0); + return noop; + } + const unsub = untrack( + () => store2.subscribe( + run, + // @ts-expect-error + invalidate + ) + ); + return unsub.unsubscribe ? () => unsub.unsubscribe() : unsub; +} +const subscriber_queue = []; +function writable(value, start = noop) { + let stop = null; + const subscribers = /* @__PURE__ */ new Set(); + function set(new_value) { + if (safe_not_equal(value, new_value)) { + value = new_value; + if (stop) { + const run_queue = !subscriber_queue.length; + for (const subscriber of subscribers) { + subscriber[1](); + subscriber_queue.push(subscriber, value); + } + if (run_queue) { + for (let i = 0; i < subscriber_queue.length; i += 2) { + subscriber_queue[i][0](subscriber_queue[i + 1]); + } + subscriber_queue.length = 0; + } + } + } + } + function update(fn) { + set(fn( + /** @type {T} */ + value + )); + } + function subscribe(run, invalidate = noop) { + const subscriber = [run, invalidate]; + subscribers.add(subscriber); + if (subscribers.size === 1) { + stop = start(set, update) || noop; + } + run( + /** @type {T} */ + value + ); + return () => { + subscribers.delete(subscriber); + if (subscribers.size === 0 && stop) { + stop(); + stop = null; + } + }; + } + return { set, update, subscribe }; +} +function get(store2) { + let value; + subscribe_to_store(store2, (_) => value = _)(); + return value; +} +let untracking = false; +function untrack(fn) { + var previous_untracking = untracking; + try { + untracking = true; + return fn(); + } finally { + untracking = previous_untracking; + } +} +function store(defaultValue) { + const scope = { + get: (name) => { + return get(scope.store)[name]; + }, + set: (name, value) => { + if (typeof name === "string") { + Object.assign(get(scope.store), { + [name]: value + }); + } else { + Object.assign(get(scope.store), name); + } + scope.store.set(get(scope.store)); + }, + store: writable(defaultValue) + }; + return scope; +} +globalThis.$altcha = globalThis.$altcha || { + algorithms: /* @__PURE__ */ new Map(), + defaults: store({}), + i18n: store({}), + instances: /* @__PURE__ */ new Set(), + plugins: /* @__PURE__ */ new Set() +}; +const i18n = { + ariaLinkLabel: "Altcha (rasmiy veb-sayt)", + enterCode: "Kodni kiriting", + enterCodeAria: "Eshitgan kodingizni kiriting. Audioni ijro etish uchun Bo'sh joy tugmasini bosing.", + error: "Tekshiruv muvaffaqiyatsiz tugadi. Keyinroq qayta urinib ko'ring.", + expired: "Tekshiruv muddati tugadi. Qayta urinib ko'ring.", + footer: 'ALTCHA tomonidan himoyalangan', + getAudioChallenge: "Audio sinovni olish", + label: "Men robot emasman", + loading: "Yuklanmoqda...", + reload: "Qayta yuklash", + verify: "Tekshirish", + verificationRequired: "Tekshiruv talab qilinadi!", + verified: "Tekshirildi", + verifying: "Tekshirilmoqda...", + waitAlert: "Tekshirilmoqda... iltimos kuting.", + cancel: "Bekor qilish", + enterCodeFromImage: "Davom etish uchun, iltimos, quyidagi rasmda ko'rsatilgan kodni kiriting." +}; +globalThis.$altcha.i18n.set("uz", i18n); diff --git a/frontend/node_modules/altcha/dist/i18n/uz.umd.cjs b/frontend/node_modules/altcha/dist/i18n/uz.umd.cjs new file mode 100644 index 0000000..c003737 --- /dev/null +++ b/frontend/node_modules/altcha/dist/i18n/uz.umd.cjs @@ -0,0 +1,133 @@ +(function(factory) { + typeof define === "function" && define.amd ? define(factory) : factory(); +})((function() { + "use strict"; + const noop = () => { + }; + function safe_not_equal(a, b) { + return a != a ? b == b : a !== b || a !== null && typeof a === "object" || typeof a === "function"; + } + function subscribe_to_store(store2, run, invalidate) { + if (store2 == null) { + run(void 0); + return noop; + } + const unsub = untrack( + () => store2.subscribe( + run, + // @ts-expect-error + invalidate + ) + ); + return unsub.unsubscribe ? () => unsub.unsubscribe() : unsub; + } + const subscriber_queue = []; + function writable(value, start = noop) { + let stop = null; + const subscribers = /* @__PURE__ */ new Set(); + function set(new_value) { + if (safe_not_equal(value, new_value)) { + value = new_value; + if (stop) { + const run_queue = !subscriber_queue.length; + for (const subscriber of subscribers) { + subscriber[1](); + subscriber_queue.push(subscriber, value); + } + if (run_queue) { + for (let i = 0; i < subscriber_queue.length; i += 2) { + subscriber_queue[i][0](subscriber_queue[i + 1]); + } + subscriber_queue.length = 0; + } + } + } + } + function update(fn) { + set(fn( + /** @type {T} */ + value + )); + } + function subscribe(run, invalidate = noop) { + const subscriber = [run, invalidate]; + subscribers.add(subscriber); + if (subscribers.size === 1) { + stop = start(set, update) || noop; + } + run( + /** @type {T} */ + value + ); + return () => { + subscribers.delete(subscriber); + if (subscribers.size === 0 && stop) { + stop(); + stop = null; + } + }; + } + return { set, update, subscribe }; + } + function get(store2) { + let value; + subscribe_to_store(store2, (_) => value = _)(); + return value; + } + let untracking = false; + function untrack(fn) { + var previous_untracking = untracking; + try { + untracking = true; + return fn(); + } finally { + untracking = previous_untracking; + } + } + function store(defaultValue) { + const scope = { + get: (name) => { + return get(scope.store)[name]; + }, + set: (name, value) => { + if (typeof name === "string") { + Object.assign(get(scope.store), { + [name]: value + }); + } else { + Object.assign(get(scope.store), name); + } + scope.store.set(get(scope.store)); + }, + store: writable(defaultValue) + }; + return scope; + } + globalThis.$altcha = globalThis.$altcha || { + algorithms: /* @__PURE__ */ new Map(), + defaults: store({}), + i18n: store({}), + instances: /* @__PURE__ */ new Set(), + plugins: /* @__PURE__ */ new Set() + }; + const i18n = { + ariaLinkLabel: "Altcha (rasmiy veb-sayt)", + enterCode: "Kodni kiriting", + enterCodeAria: "Eshitgan kodingizni kiriting. Audioni ijro etish uchun Bo'sh joy tugmasini bosing.", + error: "Tekshiruv muvaffaqiyatsiz tugadi. Keyinroq qayta urinib ko'ring.", + expired: "Tekshiruv muddati tugadi. Qayta urinib ko'ring.", + footer: 'ALTCHA tomonidan himoyalangan', + getAudioChallenge: "Audio sinovni olish", + label: "Men robot emasman", + loading: "Yuklanmoqda...", + reload: "Qayta yuklash", + verify: "Tekshirish", + verificationRequired: "Tekshiruv talab qilinadi!", + verified: "Tekshirildi", + verifying: "Tekshirilmoqda...", + waitAlert: "Tekshirilmoqda... iltimos kuting.", + cancel: "Bekor qilish", + enterCodeFromImage: "Davom etish uchun, iltimos, quyidagi rasmda ko'rsatilgan kodni kiriting." + }; + globalThis.$altcha.i18n.set("uz", i18n); +})); diff --git a/frontend/node_modules/altcha/dist/i18n/vi.d.ts b/frontend/node_modules/altcha/dist/i18n/vi.d.ts new file mode 100644 index 0000000..a33153b --- /dev/null +++ b/frontend/node_modules/altcha/dist/i18n/vi.d.ts @@ -0,0 +1 @@ +declare module 'altcha/i18n/vi'; export {}; diff --git a/frontend/node_modules/altcha/dist/i18n/vi.js b/frontend/node_modules/altcha/dist/i18n/vi.js new file mode 100644 index 0000000..c663563 --- /dev/null +++ b/frontend/node_modules/altcha/dist/i18n/vi.js @@ -0,0 +1,128 @@ +const noop = () => { +}; +function safe_not_equal(a, b) { + return a != a ? b == b : a !== b || a !== null && typeof a === "object" || typeof a === "function"; +} +function subscribe_to_store(store2, run, invalidate) { + if (store2 == null) { + run(void 0); + return noop; + } + const unsub = untrack( + () => store2.subscribe( + run, + // @ts-expect-error + invalidate + ) + ); + return unsub.unsubscribe ? () => unsub.unsubscribe() : unsub; +} +const subscriber_queue = []; +function writable(value, start = noop) { + let stop = null; + const subscribers = /* @__PURE__ */ new Set(); + function set(new_value) { + if (safe_not_equal(value, new_value)) { + value = new_value; + if (stop) { + const run_queue = !subscriber_queue.length; + for (const subscriber of subscribers) { + subscriber[1](); + subscriber_queue.push(subscriber, value); + } + if (run_queue) { + for (let i = 0; i < subscriber_queue.length; i += 2) { + subscriber_queue[i][0](subscriber_queue[i + 1]); + } + subscriber_queue.length = 0; + } + } + } + } + function update(fn) { + set(fn( + /** @type {T} */ + value + )); + } + function subscribe(run, invalidate = noop) { + const subscriber = [run, invalidate]; + subscribers.add(subscriber); + if (subscribers.size === 1) { + stop = start(set, update) || noop; + } + run( + /** @type {T} */ + value + ); + return () => { + subscribers.delete(subscriber); + if (subscribers.size === 0 && stop) { + stop(); + stop = null; + } + }; + } + return { set, update, subscribe }; +} +function get(store2) { + let value; + subscribe_to_store(store2, (_) => value = _)(); + return value; +} +let untracking = false; +function untrack(fn) { + var previous_untracking = untracking; + try { + untracking = true; + return fn(); + } finally { + untracking = previous_untracking; + } +} +function store(defaultValue) { + const scope = { + get: (name) => { + return get(scope.store)[name]; + }, + set: (name, value) => { + if (typeof name === "string") { + Object.assign(get(scope.store), { + [name]: value + }); + } else { + Object.assign(get(scope.store), name); + } + scope.store.set(get(scope.store)); + }, + store: writable(defaultValue) + }; + return scope; +} +globalThis.$altcha = globalThis.$altcha || { + algorithms: /* @__PURE__ */ new Map(), + defaults: store({}), + i18n: store({}), + instances: /* @__PURE__ */ new Set(), + plugins: /* @__PURE__ */ new Set() +}; +const i18n = { + ariaLinkLabel: "Altcha (trang web chính thức)", + enterCode: "Nhập mã", + enterCodeAria: "Nhập mã bạn nghe được. Nhấn Phím cách để phát âm thanh.", + error: "Xác minh thất bại. Vui lòng thử lại sau.", + expired: "Xác minh đã hết hạn. Vui lòng thử lại.", + footer: 'Được bảo vệ bởi ALTCHA', + getAudioChallenge: "Nhận thử thách âm thanh", + label: "Tôi không phải là robot", + loading: "Đang tải...", + reload: "Tải lại", + verify: "Xác minh", + verificationRequired: "Yêu cầu xác minh!", + verified: "Đã xác minh", + verifying: "Đang xác minh...", + waitAlert: "Đang xác minh... vui lòng chờ.", + cancel: "Hủy bỏ", + enterCodeFromImage: "Để tiếp tục, vui lòng nhập mã từ hình ảnh bên dưới." +}; +globalThis.$altcha.i18n.set("vi", i18n); diff --git a/frontend/node_modules/altcha/dist/i18n/vi.umd.cjs b/frontend/node_modules/altcha/dist/i18n/vi.umd.cjs new file mode 100644 index 0000000..36a8255 --- /dev/null +++ b/frontend/node_modules/altcha/dist/i18n/vi.umd.cjs @@ -0,0 +1,133 @@ +(function(factory) { + typeof define === "function" && define.amd ? define(factory) : factory(); +})((function() { + "use strict"; + const noop = () => { + }; + function safe_not_equal(a, b) { + return a != a ? b == b : a !== b || a !== null && typeof a === "object" || typeof a === "function"; + } + function subscribe_to_store(store2, run, invalidate) { + if (store2 == null) { + run(void 0); + return noop; + } + const unsub = untrack( + () => store2.subscribe( + run, + // @ts-expect-error + invalidate + ) + ); + return unsub.unsubscribe ? () => unsub.unsubscribe() : unsub; + } + const subscriber_queue = []; + function writable(value, start = noop) { + let stop = null; + const subscribers = /* @__PURE__ */ new Set(); + function set(new_value) { + if (safe_not_equal(value, new_value)) { + value = new_value; + if (stop) { + const run_queue = !subscriber_queue.length; + for (const subscriber of subscribers) { + subscriber[1](); + subscriber_queue.push(subscriber, value); + } + if (run_queue) { + for (let i = 0; i < subscriber_queue.length; i += 2) { + subscriber_queue[i][0](subscriber_queue[i + 1]); + } + subscriber_queue.length = 0; + } + } + } + } + function update(fn) { + set(fn( + /** @type {T} */ + value + )); + } + function subscribe(run, invalidate = noop) { + const subscriber = [run, invalidate]; + subscribers.add(subscriber); + if (subscribers.size === 1) { + stop = start(set, update) || noop; + } + run( + /** @type {T} */ + value + ); + return () => { + subscribers.delete(subscriber); + if (subscribers.size === 0 && stop) { + stop(); + stop = null; + } + }; + } + return { set, update, subscribe }; + } + function get(store2) { + let value; + subscribe_to_store(store2, (_) => value = _)(); + return value; + } + let untracking = false; + function untrack(fn) { + var previous_untracking = untracking; + try { + untracking = true; + return fn(); + } finally { + untracking = previous_untracking; + } + } + function store(defaultValue) { + const scope = { + get: (name) => { + return get(scope.store)[name]; + }, + set: (name, value) => { + if (typeof name === "string") { + Object.assign(get(scope.store), { + [name]: value + }); + } else { + Object.assign(get(scope.store), name); + } + scope.store.set(get(scope.store)); + }, + store: writable(defaultValue) + }; + return scope; + } + globalThis.$altcha = globalThis.$altcha || { + algorithms: /* @__PURE__ */ new Map(), + defaults: store({}), + i18n: store({}), + instances: /* @__PURE__ */ new Set(), + plugins: /* @__PURE__ */ new Set() + }; + const i18n = { + ariaLinkLabel: "Altcha (trang web chính thức)", + enterCode: "Nhập mã", + enterCodeAria: "Nhập mã bạn nghe được. Nhấn Phím cách để phát âm thanh.", + error: "Xác minh thất bại. Vui lòng thử lại sau.", + expired: "Xác minh đã hết hạn. Vui lòng thử lại.", + footer: 'Được bảo vệ bởi ALTCHA', + getAudioChallenge: "Nhận thử thách âm thanh", + label: "Tôi không phải là robot", + loading: "Đang tải...", + reload: "Tải lại", + verify: "Xác minh", + verificationRequired: "Yêu cầu xác minh!", + verified: "Đã xác minh", + verifying: "Đang xác minh...", + waitAlert: "Đang xác minh... vui lòng chờ.", + cancel: "Hủy bỏ", + enterCodeFromImage: "Để tiếp tục, vui lòng nhập mã từ hình ảnh bên dưới." + }; + globalThis.$altcha.i18n.set("vi", i18n); +})); diff --git a/frontend/node_modules/altcha/dist/i18n/yo.d.ts b/frontend/node_modules/altcha/dist/i18n/yo.d.ts new file mode 100644 index 0000000..714305b --- /dev/null +++ b/frontend/node_modules/altcha/dist/i18n/yo.d.ts @@ -0,0 +1 @@ +declare module 'altcha/i18n/yo'; export {}; diff --git a/frontend/node_modules/altcha/dist/i18n/yo.js b/frontend/node_modules/altcha/dist/i18n/yo.js new file mode 100644 index 0000000..876cb18 --- /dev/null +++ b/frontend/node_modules/altcha/dist/i18n/yo.js @@ -0,0 +1,128 @@ +const noop = () => { +}; +function safe_not_equal(a, b) { + return a != a ? b == b : a !== b || a !== null && typeof a === "object" || typeof a === "function"; +} +function subscribe_to_store(store2, run, invalidate) { + if (store2 == null) { + run(void 0); + return noop; + } + const unsub = untrack( + () => store2.subscribe( + run, + // @ts-expect-error + invalidate + ) + ); + return unsub.unsubscribe ? () => unsub.unsubscribe() : unsub; +} +const subscriber_queue = []; +function writable(value, start = noop) { + let stop = null; + const subscribers = /* @__PURE__ */ new Set(); + function set(new_value) { + if (safe_not_equal(value, new_value)) { + value = new_value; + if (stop) { + const run_queue = !subscriber_queue.length; + for (const subscriber of subscribers) { + subscriber[1](); + subscriber_queue.push(subscriber, value); + } + if (run_queue) { + for (let i = 0; i < subscriber_queue.length; i += 2) { + subscriber_queue[i][0](subscriber_queue[i + 1]); + } + subscriber_queue.length = 0; + } + } + } + } + function update(fn) { + set(fn( + /** @type {T} */ + value + )); + } + function subscribe(run, invalidate = noop) { + const subscriber = [run, invalidate]; + subscribers.add(subscriber); + if (subscribers.size === 1) { + stop = start(set, update) || noop; + } + run( + /** @type {T} */ + value + ); + return () => { + subscribers.delete(subscriber); + if (subscribers.size === 0 && stop) { + stop(); + stop = null; + } + }; + } + return { set, update, subscribe }; +} +function get(store2) { + let value; + subscribe_to_store(store2, (_) => value = _)(); + return value; +} +let untracking = false; +function untrack(fn) { + var previous_untracking = untracking; + try { + untracking = true; + return fn(); + } finally { + untracking = previous_untracking; + } +} +function store(defaultValue) { + const scope = { + get: (name) => { + return get(scope.store)[name]; + }, + set: (name, value) => { + if (typeof name === "string") { + Object.assign(get(scope.store), { + [name]: value + }); + } else { + Object.assign(get(scope.store), name); + } + scope.store.set(get(scope.store)); + }, + store: writable(defaultValue) + }; + return scope; +} +globalThis.$altcha = globalThis.$altcha || { + algorithms: /* @__PURE__ */ new Map(), + defaults: store({}), + i18n: store({}), + instances: /* @__PURE__ */ new Set(), + plugins: /* @__PURE__ */ new Set() +}; +const i18n = { + ariaLinkLabel: "Altcha (oju opo wẹẹbu osise)", + enterCode: "Tẹ koodu sii", + enterCodeAria: "Tẹ koodu ti o ngbọ sii. Tẹ Space lati ṣe ohun orin.", + error: "Ìdájọ́kòwò kò ṣẹ́ṣe. Gbiyanju lẹẹkansi ni ọjọ́ iwájú.", + expired: "Ìdájọ́kòwò ti pari. Gbiyanju lẹẹkansi.", + footer: 'Ti wa ni ààbò nipasẹ ALTCHA', + getAudioChallenge: "Gba ìjàdú ohùn", + label: "Emi kii ṣe ẹrọ", + loading: "Ó ń gbé sílẹ̀...", + reload: "Tún gbé wọlé", + verify: "Ṣàdájọ́", + verificationRequired: "Ìdájọ́kòwò ni a nílò!", + verified: "A ti dájọ́", + verifying: "Ó ń ṣàdájọ́...", + waitAlert: "Ó ń ṣàdájọ́... ẹ jọ̀ọ́ ẹ duro.", + cancel: "Fagbọsẹ", + enterCodeFromImage: "Lati tẹsiwaju, jọwọ tẹ koodu ti o wa lati aworan isalẹ sii." +}; +globalThis.$altcha.i18n.set("yo", i18n); diff --git a/frontend/node_modules/altcha/dist/i18n/yo.umd.cjs b/frontend/node_modules/altcha/dist/i18n/yo.umd.cjs new file mode 100644 index 0000000..3c035a3 --- /dev/null +++ b/frontend/node_modules/altcha/dist/i18n/yo.umd.cjs @@ -0,0 +1,133 @@ +(function(factory) { + typeof define === "function" && define.amd ? define(factory) : factory(); +})((function() { + "use strict"; + const noop = () => { + }; + function safe_not_equal(a, b) { + return a != a ? b == b : a !== b || a !== null && typeof a === "object" || typeof a === "function"; + } + function subscribe_to_store(store2, run, invalidate) { + if (store2 == null) { + run(void 0); + return noop; + } + const unsub = untrack( + () => store2.subscribe( + run, + // @ts-expect-error + invalidate + ) + ); + return unsub.unsubscribe ? () => unsub.unsubscribe() : unsub; + } + const subscriber_queue = []; + function writable(value, start = noop) { + let stop = null; + const subscribers = /* @__PURE__ */ new Set(); + function set(new_value) { + if (safe_not_equal(value, new_value)) { + value = new_value; + if (stop) { + const run_queue = !subscriber_queue.length; + for (const subscriber of subscribers) { + subscriber[1](); + subscriber_queue.push(subscriber, value); + } + if (run_queue) { + for (let i = 0; i < subscriber_queue.length; i += 2) { + subscriber_queue[i][0](subscriber_queue[i + 1]); + } + subscriber_queue.length = 0; + } + } + } + } + function update(fn) { + set(fn( + /** @type {T} */ + value + )); + } + function subscribe(run, invalidate = noop) { + const subscriber = [run, invalidate]; + subscribers.add(subscriber); + if (subscribers.size === 1) { + stop = start(set, update) || noop; + } + run( + /** @type {T} */ + value + ); + return () => { + subscribers.delete(subscriber); + if (subscribers.size === 0 && stop) { + stop(); + stop = null; + } + }; + } + return { set, update, subscribe }; + } + function get(store2) { + let value; + subscribe_to_store(store2, (_) => value = _)(); + return value; + } + let untracking = false; + function untrack(fn) { + var previous_untracking = untracking; + try { + untracking = true; + return fn(); + } finally { + untracking = previous_untracking; + } + } + function store(defaultValue) { + const scope = { + get: (name) => { + return get(scope.store)[name]; + }, + set: (name, value) => { + if (typeof name === "string") { + Object.assign(get(scope.store), { + [name]: value + }); + } else { + Object.assign(get(scope.store), name); + } + scope.store.set(get(scope.store)); + }, + store: writable(defaultValue) + }; + return scope; + } + globalThis.$altcha = globalThis.$altcha || { + algorithms: /* @__PURE__ */ new Map(), + defaults: store({}), + i18n: store({}), + instances: /* @__PURE__ */ new Set(), + plugins: /* @__PURE__ */ new Set() + }; + const i18n = { + ariaLinkLabel: "Altcha (oju opo wẹẹbu osise)", + enterCode: "Tẹ koodu sii", + enterCodeAria: "Tẹ koodu ti o ngbọ sii. Tẹ Space lati ṣe ohun orin.", + error: "Ìdájọ́kòwò kò ṣẹ́ṣe. Gbiyanju lẹẹkansi ni ọjọ́ iwájú.", + expired: "Ìdájọ́kòwò ti pari. Gbiyanju lẹẹkansi.", + footer: 'Ti wa ni ààbò nipasẹ ALTCHA', + getAudioChallenge: "Gba ìjàdú ohùn", + label: "Emi kii ṣe ẹrọ", + loading: "Ó ń gbé sílẹ̀...", + reload: "Tún gbé wọlé", + verify: "Ṣàdájọ́", + verificationRequired: "Ìdájọ́kòwò ni a nílò!", + verified: "A ti dájọ́", + verifying: "Ó ń ṣàdájọ́...", + waitAlert: "Ó ń ṣàdájọ́... ẹ jọ̀ọ́ ẹ duro.", + cancel: "Fagbọsẹ", + enterCodeFromImage: "Lati tẹsiwaju, jọwọ tẹ koodu ti o wa lati aworan isalẹ sii." + }; + globalThis.$altcha.i18n.set("yo", i18n); +})); diff --git a/frontend/node_modules/altcha/dist/i18n/zh-cn.js b/frontend/node_modules/altcha/dist/i18n/zh-cn.js new file mode 100644 index 0000000..17de923 --- /dev/null +++ b/frontend/node_modules/altcha/dist/i18n/zh-cn.js @@ -0,0 +1,128 @@ +const noop = () => { +}; +function safe_not_equal(a, b) { + return a != a ? b == b : a !== b || a !== null && typeof a === "object" || typeof a === "function"; +} +function subscribe_to_store(store2, run, invalidate) { + if (store2 == null) { + run(void 0); + return noop; + } + const unsub = untrack( + () => store2.subscribe( + run, + // @ts-expect-error + invalidate + ) + ); + return unsub.unsubscribe ? () => unsub.unsubscribe() : unsub; +} +const subscriber_queue = []; +function writable(value, start = noop) { + let stop = null; + const subscribers = /* @__PURE__ */ new Set(); + function set(new_value) { + if (safe_not_equal(value, new_value)) { + value = new_value; + if (stop) { + const run_queue = !subscriber_queue.length; + for (const subscriber of subscribers) { + subscriber[1](); + subscriber_queue.push(subscriber, value); + } + if (run_queue) { + for (let i = 0; i < subscriber_queue.length; i += 2) { + subscriber_queue[i][0](subscriber_queue[i + 1]); + } + subscriber_queue.length = 0; + } + } + } + } + function update(fn) { + set(fn( + /** @type {T} */ + value + )); + } + function subscribe(run, invalidate = noop) { + const subscriber = [run, invalidate]; + subscribers.add(subscriber); + if (subscribers.size === 1) { + stop = start(set, update) || noop; + } + run( + /** @type {T} */ + value + ); + return () => { + subscribers.delete(subscriber); + if (subscribers.size === 0 && stop) { + stop(); + stop = null; + } + }; + } + return { set, update, subscribe }; +} +function get(store2) { + let value; + subscribe_to_store(store2, (_) => value = _)(); + return value; +} +let untracking = false; +function untrack(fn) { + var previous_untracking = untracking; + try { + untracking = true; + return fn(); + } finally { + untracking = previous_untracking; + } +} +function store(defaultValue) { + const scope = { + get: (name) => { + return get(scope.store)[name]; + }, + set: (name, value) => { + if (typeof name === "string") { + Object.assign(get(scope.store), { + [name]: value + }); + } else { + Object.assign(get(scope.store), name); + } + scope.store.set(get(scope.store)); + }, + store: writable(defaultValue) + }; + return scope; +} +globalThis.$altcha = globalThis.$altcha || { + algorithms: /* @__PURE__ */ new Map(), + defaults: store({}), + i18n: store({}), + instances: /* @__PURE__ */ new Set(), + plugins: /* @__PURE__ */ new Set() +}; +const i18n = { + ariaLinkLabel: "Altcha (官方网站)", + enterCode: "输入代码", + enterCodeAria: "输入您听到的代码。按空格键播放音频。", + error: "验证失败。稍后再试。", + expired: "验证已过期。请重试。", + footer: '由 ALTCHA 保护', + getAudioChallenge: "获取音频挑战", + label: "我不是机器人", + loading: "加载中...", + reload: "重新加载", + verify: "验证", + verificationRequired: "需要验证!", + verified: "已验证", + verifying: "正在验证...", + waitAlert: "正在验证... 请稍等。", + cancel: "取消", + enterCodeFromImage: "为继续操作,请输入下图中显示的验证码。" +}; +globalThis.$altcha.i18n.set("zh-cn", i18n); diff --git a/frontend/node_modules/altcha/dist/i18n/zh-cn.umd.cjs b/frontend/node_modules/altcha/dist/i18n/zh-cn.umd.cjs new file mode 100644 index 0000000..5392e92 --- /dev/null +++ b/frontend/node_modules/altcha/dist/i18n/zh-cn.umd.cjs @@ -0,0 +1,133 @@ +(function(factory) { + typeof define === "function" && define.amd ? define(factory) : factory(); +})((function() { + "use strict"; + const noop = () => { + }; + function safe_not_equal(a, b) { + return a != a ? b == b : a !== b || a !== null && typeof a === "object" || typeof a === "function"; + } + function subscribe_to_store(store2, run, invalidate) { + if (store2 == null) { + run(void 0); + return noop; + } + const unsub = untrack( + () => store2.subscribe( + run, + // @ts-expect-error + invalidate + ) + ); + return unsub.unsubscribe ? () => unsub.unsubscribe() : unsub; + } + const subscriber_queue = []; + function writable(value, start = noop) { + let stop = null; + const subscribers = /* @__PURE__ */ new Set(); + function set(new_value) { + if (safe_not_equal(value, new_value)) { + value = new_value; + if (stop) { + const run_queue = !subscriber_queue.length; + for (const subscriber of subscribers) { + subscriber[1](); + subscriber_queue.push(subscriber, value); + } + if (run_queue) { + for (let i = 0; i < subscriber_queue.length; i += 2) { + subscriber_queue[i][0](subscriber_queue[i + 1]); + } + subscriber_queue.length = 0; + } + } + } + } + function update(fn) { + set(fn( + /** @type {T} */ + value + )); + } + function subscribe(run, invalidate = noop) { + const subscriber = [run, invalidate]; + subscribers.add(subscriber); + if (subscribers.size === 1) { + stop = start(set, update) || noop; + } + run( + /** @type {T} */ + value + ); + return () => { + subscribers.delete(subscriber); + if (subscribers.size === 0 && stop) { + stop(); + stop = null; + } + }; + } + return { set, update, subscribe }; + } + function get(store2) { + let value; + subscribe_to_store(store2, (_) => value = _)(); + return value; + } + let untracking = false; + function untrack(fn) { + var previous_untracking = untracking; + try { + untracking = true; + return fn(); + } finally { + untracking = previous_untracking; + } + } + function store(defaultValue) { + const scope = { + get: (name) => { + return get(scope.store)[name]; + }, + set: (name, value) => { + if (typeof name === "string") { + Object.assign(get(scope.store), { + [name]: value + }); + } else { + Object.assign(get(scope.store), name); + } + scope.store.set(get(scope.store)); + }, + store: writable(defaultValue) + }; + return scope; + } + globalThis.$altcha = globalThis.$altcha || { + algorithms: /* @__PURE__ */ new Map(), + defaults: store({}), + i18n: store({}), + instances: /* @__PURE__ */ new Set(), + plugins: /* @__PURE__ */ new Set() + }; + const i18n = { + ariaLinkLabel: "Altcha (官方网站)", + enterCode: "输入代码", + enterCodeAria: "输入您听到的代码。按空格键播放音频。", + error: "验证失败。稍后再试。", + expired: "验证已过期。请重试。", + footer: '由 ALTCHA 保护', + getAudioChallenge: "获取音频挑战", + label: "我不是机器人", + loading: "加载中...", + reload: "重新加载", + verify: "验证", + verificationRequired: "需要验证!", + verified: "已验证", + verifying: "正在验证...", + waitAlert: "正在验证... 请稍等。", + cancel: "取消", + enterCodeFromImage: "为继续操作,请输入下图中显示的验证码。" + }; + globalThis.$altcha.i18n.set("zh-cn", i18n); +})); diff --git a/frontend/node_modules/altcha/dist/i18n/zh-hk.js b/frontend/node_modules/altcha/dist/i18n/zh-hk.js new file mode 100644 index 0000000..068f75e --- /dev/null +++ b/frontend/node_modules/altcha/dist/i18n/zh-hk.js @@ -0,0 +1,128 @@ +const noop = () => { +}; +function safe_not_equal(a, b) { + return a != a ? b == b : a !== b || a !== null && typeof a === "object" || typeof a === "function"; +} +function subscribe_to_store(store2, run, invalidate) { + if (store2 == null) { + run(void 0); + return noop; + } + const unsub = untrack( + () => store2.subscribe( + run, + // @ts-expect-error + invalidate + ) + ); + return unsub.unsubscribe ? () => unsub.unsubscribe() : unsub; +} +const subscriber_queue = []; +function writable(value, start = noop) { + let stop = null; + const subscribers = /* @__PURE__ */ new Set(); + function set(new_value) { + if (safe_not_equal(value, new_value)) { + value = new_value; + if (stop) { + const run_queue = !subscriber_queue.length; + for (const subscriber of subscribers) { + subscriber[1](); + subscriber_queue.push(subscriber, value); + } + if (run_queue) { + for (let i = 0; i < subscriber_queue.length; i += 2) { + subscriber_queue[i][0](subscriber_queue[i + 1]); + } + subscriber_queue.length = 0; + } + } + } + } + function update(fn) { + set(fn( + /** @type {T} */ + value + )); + } + function subscribe(run, invalidate = noop) { + const subscriber = [run, invalidate]; + subscribers.add(subscriber); + if (subscribers.size === 1) { + stop = start(set, update) || noop; + } + run( + /** @type {T} */ + value + ); + return () => { + subscribers.delete(subscriber); + if (subscribers.size === 0 && stop) { + stop(); + stop = null; + } + }; + } + return { set, update, subscribe }; +} +function get(store2) { + let value; + subscribe_to_store(store2, (_) => value = _)(); + return value; +} +let untracking = false; +function untrack(fn) { + var previous_untracking = untracking; + try { + untracking = true; + return fn(); + } finally { + untracking = previous_untracking; + } +} +function store(defaultValue) { + const scope = { + get: (name) => { + return get(scope.store)[name]; + }, + set: (name, value) => { + if (typeof name === "string") { + Object.assign(get(scope.store), { + [name]: value + }); + } else { + Object.assign(get(scope.store), name); + } + scope.store.set(get(scope.store)); + }, + store: writable(defaultValue) + }; + return scope; +} +globalThis.$altcha = globalThis.$altcha || { + algorithms: /* @__PURE__ */ new Map(), + defaults: store({}), + i18n: store({}), + instances: /* @__PURE__ */ new Set(), + plugins: /* @__PURE__ */ new Set() +}; +const i18n = { + ariaLinkLabel: "Altcha (官方網站)", + cancel: "取消", + enterCode: "輸入代碼", + enterCodeAria: "輸入你聽到嘅代碼。按空格鍵播放音訊。", + enterCodeFromImage: "要繼續,請輸入下面圖片入面嘅代碼。", + error: "驗證失敗。請稍後再試。", + expired: "驗證已過期。請再試一次。", + footer: '由 ALTCHA 提供保護', + getAudioChallenge: "取得音訊驗證", + label: "我唔係機械人", + loading: "載入中...", + reload: "重新載入", + verify: "驗證", + verificationRequired: "需要驗證!", + verified: "已驗證", + verifying: "驗證中...", + waitAlert: "驗證中... 請稍候。" +}; +globalThis.$altcha.i18n.set("zh-hk", i18n); diff --git a/frontend/node_modules/altcha/dist/i18n/zh-hk.umd.cjs b/frontend/node_modules/altcha/dist/i18n/zh-hk.umd.cjs new file mode 100644 index 0000000..0186167 --- /dev/null +++ b/frontend/node_modules/altcha/dist/i18n/zh-hk.umd.cjs @@ -0,0 +1,133 @@ +(function(factory) { + typeof define === "function" && define.amd ? define(factory) : factory(); +})((function() { + "use strict"; + const noop = () => { + }; + function safe_not_equal(a, b) { + return a != a ? b == b : a !== b || a !== null && typeof a === "object" || typeof a === "function"; + } + function subscribe_to_store(store2, run, invalidate) { + if (store2 == null) { + run(void 0); + return noop; + } + const unsub = untrack( + () => store2.subscribe( + run, + // @ts-expect-error + invalidate + ) + ); + return unsub.unsubscribe ? () => unsub.unsubscribe() : unsub; + } + const subscriber_queue = []; + function writable(value, start = noop) { + let stop = null; + const subscribers = /* @__PURE__ */ new Set(); + function set(new_value) { + if (safe_not_equal(value, new_value)) { + value = new_value; + if (stop) { + const run_queue = !subscriber_queue.length; + for (const subscriber of subscribers) { + subscriber[1](); + subscriber_queue.push(subscriber, value); + } + if (run_queue) { + for (let i = 0; i < subscriber_queue.length; i += 2) { + subscriber_queue[i][0](subscriber_queue[i + 1]); + } + subscriber_queue.length = 0; + } + } + } + } + function update(fn) { + set(fn( + /** @type {T} */ + value + )); + } + function subscribe(run, invalidate = noop) { + const subscriber = [run, invalidate]; + subscribers.add(subscriber); + if (subscribers.size === 1) { + stop = start(set, update) || noop; + } + run( + /** @type {T} */ + value + ); + return () => { + subscribers.delete(subscriber); + if (subscribers.size === 0 && stop) { + stop(); + stop = null; + } + }; + } + return { set, update, subscribe }; + } + function get(store2) { + let value; + subscribe_to_store(store2, (_) => value = _)(); + return value; + } + let untracking = false; + function untrack(fn) { + var previous_untracking = untracking; + try { + untracking = true; + return fn(); + } finally { + untracking = previous_untracking; + } + } + function store(defaultValue) { + const scope = { + get: (name) => { + return get(scope.store)[name]; + }, + set: (name, value) => { + if (typeof name === "string") { + Object.assign(get(scope.store), { + [name]: value + }); + } else { + Object.assign(get(scope.store), name); + } + scope.store.set(get(scope.store)); + }, + store: writable(defaultValue) + }; + return scope; + } + globalThis.$altcha = globalThis.$altcha || { + algorithms: /* @__PURE__ */ new Map(), + defaults: store({}), + i18n: store({}), + instances: /* @__PURE__ */ new Set(), + plugins: /* @__PURE__ */ new Set() + }; + const i18n = { + ariaLinkLabel: "Altcha (官方網站)", + cancel: "取消", + enterCode: "輸入代碼", + enterCodeAria: "輸入你聽到嘅代碼。按空格鍵播放音訊。", + enterCodeFromImage: "要繼續,請輸入下面圖片入面嘅代碼。", + error: "驗證失敗。請稍後再試。", + expired: "驗證已過期。請再試一次。", + footer: '由 ALTCHA 提供保護', + getAudioChallenge: "取得音訊驗證", + label: "我唔係機械人", + loading: "載入中...", + reload: "重新載入", + verify: "驗證", + verificationRequired: "需要驗證!", + verified: "已驗證", + verifying: "驗證中...", + waitAlert: "驗證中... 請稍候。" + }; + globalThis.$altcha.i18n.set("zh-hk", i18n); +})); diff --git a/frontend/node_modules/altcha/dist/i18n/zh-tw.js b/frontend/node_modules/altcha/dist/i18n/zh-tw.js new file mode 100644 index 0000000..f6c8e81 --- /dev/null +++ b/frontend/node_modules/altcha/dist/i18n/zh-tw.js @@ -0,0 +1,128 @@ +const noop = () => { +}; +function safe_not_equal(a, b) { + return a != a ? b == b : a !== b || a !== null && typeof a === "object" || typeof a === "function"; +} +function subscribe_to_store(store2, run, invalidate) { + if (store2 == null) { + run(void 0); + return noop; + } + const unsub = untrack( + () => store2.subscribe( + run, + // @ts-expect-error + invalidate + ) + ); + return unsub.unsubscribe ? () => unsub.unsubscribe() : unsub; +} +const subscriber_queue = []; +function writable(value, start = noop) { + let stop = null; + const subscribers = /* @__PURE__ */ new Set(); + function set(new_value) { + if (safe_not_equal(value, new_value)) { + value = new_value; + if (stop) { + const run_queue = !subscriber_queue.length; + for (const subscriber of subscribers) { + subscriber[1](); + subscriber_queue.push(subscriber, value); + } + if (run_queue) { + for (let i = 0; i < subscriber_queue.length; i += 2) { + subscriber_queue[i][0](subscriber_queue[i + 1]); + } + subscriber_queue.length = 0; + } + } + } + } + function update(fn) { + set(fn( + /** @type {T} */ + value + )); + } + function subscribe(run, invalidate = noop) { + const subscriber = [run, invalidate]; + subscribers.add(subscriber); + if (subscribers.size === 1) { + stop = start(set, update) || noop; + } + run( + /** @type {T} */ + value + ); + return () => { + subscribers.delete(subscriber); + if (subscribers.size === 0 && stop) { + stop(); + stop = null; + } + }; + } + return { set, update, subscribe }; +} +function get(store2) { + let value; + subscribe_to_store(store2, (_) => value = _)(); + return value; +} +let untracking = false; +function untrack(fn) { + var previous_untracking = untracking; + try { + untracking = true; + return fn(); + } finally { + untracking = previous_untracking; + } +} +function store(defaultValue) { + const scope = { + get: (name) => { + return get(scope.store)[name]; + }, + set: (name, value) => { + if (typeof name === "string") { + Object.assign(get(scope.store), { + [name]: value + }); + } else { + Object.assign(get(scope.store), name); + } + scope.store.set(get(scope.store)); + }, + store: writable(defaultValue) + }; + return scope; +} +globalThis.$altcha = globalThis.$altcha || { + algorithms: /* @__PURE__ */ new Map(), + defaults: store({}), + i18n: store({}), + instances: /* @__PURE__ */ new Set(), + plugins: /* @__PURE__ */ new Set() +}; +const i18n = { + ariaLinkLabel: "Altcha (官方網站)", + enterCode: "輸入代碼", + enterCodeAria: "輸入您聽到的代碼。按空格鍵播放音頻。", + error: "驗證失敗。稍後再試。", + expired: "驗證已過期。請重試。", + footer: '由 ALTCHA 保護', + getAudioChallenge: "獲取音頻挑戰", + label: "我不是機器人", + loading: "載入中...", + reload: "重新載入", + verify: "驗證", + verificationRequired: "需要驗證!", + verified: "已驗證", + verifying: "正在驗證...", + waitAlert: "正在驗證... 請稍等。", + cancel: "取消", + enterCodeFromImage: "若要繼續,請輸入下方的圖片驗證碼。" +}; +globalThis.$altcha.i18n.set("zh-tw", i18n); diff --git a/frontend/node_modules/altcha/dist/i18n/zh-tw.umd.cjs b/frontend/node_modules/altcha/dist/i18n/zh-tw.umd.cjs new file mode 100644 index 0000000..4c613ff --- /dev/null +++ b/frontend/node_modules/altcha/dist/i18n/zh-tw.umd.cjs @@ -0,0 +1,133 @@ +(function(factory) { + typeof define === "function" && define.amd ? define(factory) : factory(); +})((function() { + "use strict"; + const noop = () => { + }; + function safe_not_equal(a, b) { + return a != a ? b == b : a !== b || a !== null && typeof a === "object" || typeof a === "function"; + } + function subscribe_to_store(store2, run, invalidate) { + if (store2 == null) { + run(void 0); + return noop; + } + const unsub = untrack( + () => store2.subscribe( + run, + // @ts-expect-error + invalidate + ) + ); + return unsub.unsubscribe ? () => unsub.unsubscribe() : unsub; + } + const subscriber_queue = []; + function writable(value, start = noop) { + let stop = null; + const subscribers = /* @__PURE__ */ new Set(); + function set(new_value) { + if (safe_not_equal(value, new_value)) { + value = new_value; + if (stop) { + const run_queue = !subscriber_queue.length; + for (const subscriber of subscribers) { + subscriber[1](); + subscriber_queue.push(subscriber, value); + } + if (run_queue) { + for (let i = 0; i < subscriber_queue.length; i += 2) { + subscriber_queue[i][0](subscriber_queue[i + 1]); + } + subscriber_queue.length = 0; + } + } + } + } + function update(fn) { + set(fn( + /** @type {T} */ + value + )); + } + function subscribe(run, invalidate = noop) { + const subscriber = [run, invalidate]; + subscribers.add(subscriber); + if (subscribers.size === 1) { + stop = start(set, update) || noop; + } + run( + /** @type {T} */ + value + ); + return () => { + subscribers.delete(subscriber); + if (subscribers.size === 0 && stop) { + stop(); + stop = null; + } + }; + } + return { set, update, subscribe }; + } + function get(store2) { + let value; + subscribe_to_store(store2, (_) => value = _)(); + return value; + } + let untracking = false; + function untrack(fn) { + var previous_untracking = untracking; + try { + untracking = true; + return fn(); + } finally { + untracking = previous_untracking; + } + } + function store(defaultValue) { + const scope = { + get: (name) => { + return get(scope.store)[name]; + }, + set: (name, value) => { + if (typeof name === "string") { + Object.assign(get(scope.store), { + [name]: value + }); + } else { + Object.assign(get(scope.store), name); + } + scope.store.set(get(scope.store)); + }, + store: writable(defaultValue) + }; + return scope; + } + globalThis.$altcha = globalThis.$altcha || { + algorithms: /* @__PURE__ */ new Map(), + defaults: store({}), + i18n: store({}), + instances: /* @__PURE__ */ new Set(), + plugins: /* @__PURE__ */ new Set() + }; + const i18n = { + ariaLinkLabel: "Altcha (官方網站)", + enterCode: "輸入代碼", + enterCodeAria: "輸入您聽到的代碼。按空格鍵播放音頻。", + error: "驗證失敗。稍後再試。", + expired: "驗證已過期。請重試。", + footer: '由 ALTCHA 保護', + getAudioChallenge: "獲取音頻挑戰", + label: "我不是機器人", + loading: "載入中...", + reload: "重新載入", + verify: "驗證", + verificationRequired: "需要驗證!", + verified: "已驗證", + verifying: "正在驗證...", + waitAlert: "正在驗證... 請稍等。", + cancel: "取消", + enterCodeFromImage: "若要繼續,請輸入下方的圖片驗證碼。" + }; + globalThis.$altcha.i18n.set("zh-tw", i18n); +})); diff --git a/frontend/node_modules/altcha/dist/lib/index.d.ts b/frontend/node_modules/altcha/dist/lib/index.d.ts new file mode 100644 index 0000000..a949cd8 --- /dev/null +++ b/frontend/node_modules/altcha/dist/lib/index.d.ts @@ -0,0 +1,480 @@ +// Generated by dts-bundle-generator v9.5.1 + +export interface AltchaGlobal { + algorithms: Map Worker | Promise>; + defaults: Store>; + i18n: Store>>; + instances: Set; + plugins: Set any>; +} +export declare enum AudioState { + ERROR = "error", + LOADING = "loading", + PLAYING = "playing", + PAUSED = "paused", + READY = "ready" +} +export interface Configuration { + /** + * Forces a specific language for audio-based challenges. + */ + audioChallengeLanguage: string; + /** + * Determines when verification triggers automatically. + * @default 'off' + */ + auto: "off" | "onfocus" | "onload" | "onsubmit"; + /** + * Vertical position of the widget when `display` is set to `bar`. + */ + barPlacement: "bottom" | "top"; + /** + * The challenge data or the URL to fetch a new challenge from. + */ + challenge: Challenge | string | null; + /** + * A specific code-challenge object. Overrides values provided in the `challenge` property. + */ + codeChallenge: CodeChallenge | null; + /** + * The UI layout used for the code-challenge modal. + */ + codeChallengeDisplay: "standard" | "overlay" | "bottomsheet"; + /** + * Defines how credentials (cookies/auth headers) are handled during the challenge request. + */ + credentials: RequestCredentials | null; + /** + * Enables verbose logging in the browser console for debugging. + */ + debug: boolean; + /** + * Prevents the code-challenge modal from stealing focus when opened. + */ + disableAutoFocus: boolean; + /** + * The visual layout mode of the widget. + */ + display: "standard" | "bar" | "floating" | "overlay" | "invisible"; + /** + * A custom `fetch` implementation for network requests. + */ + fetch: typeof fetch; + /** + * The element or CSS selector the floating UI attaches to. + * Defaults to the first `submit` button in the parent form. + */ + floatingAnchor: string | HTMLElement | null; + /** + * Vertical offset (in pixels) between the floating UI and its anchor. + * @default 12 + */ + floatingOffset: number; + /** + * Controls whether the floating widget remains visible after successful verification. + */ + floatingPersist: boolean | "focus"; + /** + * Preferred position of the floating widget relative to the anchor. + */ + floatingPlacement: "auto" | "bottom" | "top"; + /** + * Hides the "ALTCHA" attribution link. + */ + hideFooter: boolean; + /** + * Hides the ALTCHA logo icon. + */ + hideLogo: boolean; + /** + * Enables the collection of pointer and scroll events for ALTCHA HIS mechanism (defaults to true). + */ + humanInteractionSignature: boolean; + /** + * The ISO alpha-2 language code for localization (requires corresponding i18n file). + */ + language: string; + /** + * The minimum verification time in milliseconds (adds an artificial delay if the PoW is faster). + * @default 500 + */ + minDuration: number; + /** + * Forces the widget into a failed state with a mock error for UI testing. + */ + mockError: boolean; + /** + * The `name` attribute of the hidden input field containing the payload. + * @default 'altcha' + */ + name: string; + /** + * CSS selector for an element to be mirrored inside the overlay modal. + */ + overlayContent: string | null; + /** + * Configures the placement (top / bottom) for popovers. Defaults to 'auto'. + */ + popoverPlacement: "auto" | "bottom" | "top"; + /** + * Automatically attempts to restart verification with fewer workers if the browser runs out of memory (Argon2 and Scrypt only). + */ + retryOnOutOfMemoryError: boolean; + /** + * Includes other form field values in the server-side verification request. + */ + serverVerificationFields: boolean; + /** + * Includes the user's time zone in the server-side verification request. + */ + serverVerificationTimeZone: boolean; + /** + * When set, the widget will set a configured cookie for the payload instead of sending it as form field. + */ + setCookie: SetCookieOptions | null; + /** + * Mocks a successful verification. Useful for testing environments without network access. + */ + test: boolean; + /** + * PoW verification timeout in milliseconds. Defaults to 90_000 ms. + */ + timeout: number; + /** + * The visual style of the interaction element. + */ + type: "native" | "checkbox" | "switch"; + /** + * Custom validation message for the HTML5 `setCustomValidity` API. + */ + validationMessage: string; + /** + * A custom verification handler. Overrides the default network-based verification. + */ + verifyFunction: ((payload: string, code?: string) => Promise) | null; + /** + * The endpoint URL for server-side verification. + */ + verifyUrl: string | null; + /** + * The number of Web Workers to spawn for proof-of-work calculations. + */ + workers: number; +} +export interface Challenge { + codeChallenge?: CodeChallenge; + parameters: ChallengeParameters; + signature?: string; +} +export interface ChallengeParameters { + algorithm: string; + nonce: string; + salt: string; + cost: number; + keyLength: number; + keyPrefix: string; + keySignature?: string; + memoryCost?: number; + parallelism?: number; + expiresAt?: number; + data?: Record; +} +export interface ChallengeV1 { + algorithm: string; + challenge: string; + codeChallenge?: CodeChallenge; + salt: string; + maxnumber?: number; + maxNumber?: number; + signature: string; +} +export interface CodeChallenge { + image: string; + audio?: string; + length?: number; +} +export interface CreateChallengeOptions { + algorithm: string; + counter?: number; + counterMode?: "uint32" | "string"; + cost: number; + data?: Record; + deriveKey: DeriveKeyFunction; + expiresAt?: number | Date; + hmacAlgorithm?: HmacAlgorithm; + hmacKeySignatureSecret?: string; + hmacSignatureSecret?: string; + keyLength?: number; + keyPrefix?: string; + keyPrefixLength?: number; + memoryCost?: number; + parallelism?: number; +} +export interface CSSVariables { + "--altcha-border-color": string; + "--altcha-border-width": string; + "--altcha-border-radius": string; + "--altcha-color-base": string; + "--altcha-color-base-content": string; + "--altcha-color-error": string; + "--altcha-color-error-content": string; + "--altcha-color-neutral": string; + "--altcha-color-neutral-content": string; + "--altcha-color-primary": string; + "--altcha-color-primary-content": string; + "--altcha-color-success": string; + "--altcha-color-success-content": string; + "--altcha-checkbox-border-color": string; + "--altcha-checkbox-border-radius": string; + "--altcha-checkbox-border-width": string; + "--altcha-checkbox-outline": string; + "--altcha-checkbox-outline-offset": string; + "--altcha-checkbox-size": string; + "--altcha-checkbox-transition-duration": string; + "--altcha-input-background-color": string; + "--altcha-input-border-radius": string; + "--altcha-input-border-width": string; + "--altcha-max-width": string; + "--altcha-padding": string; + "--altcha-popover-arrow-size": string; + "--altcha-popover-color": string; + "--altcha-shadow": string; + "--altcha-spinner-color": string; + "--altcha-switch-background-color": string; + "--altcha-switch-border-radius": string; + "--altcha-switch-height": string; + "--altcha-switch-padding": string; + "--altcha-switch-width": string; + "--altcha-switch-toggle-border-radius": string; + "--altcha-switch-toggle-color": string; + "--altcha-switch-toggle-size": string; + "--altcha-transition-duration": string; + "--altcha-z-index": string | number; + "--altcha-z-index-popover": string | number; +} +export type DeriveKeyFunction = (parameters: ChallengeParameters, salt: Uint8Array, password: Uint8Array) => Promise; +export interface DeriveKeyFunctionResult { + parameters?: Partial; + derivedKey: Uint8Array; +} +export declare enum HmacAlgorithm { + SHA_256 = "SHA-256", + SHA_384 = "SHA-384", + SHA_512 = "SHA-512" +} +export interface Payload { + challenge: Omit; + solution: Solution; +} +export interface PayloadV1 { + algorithm: string; + challenge: string; + number: number; + salt: string; + signature?: string; + took: number; +} +export interface SetCookieOptions { + domain?: string; + name?: string; + maxAge?: number; + path?: string; + sameSite?: string; + secure?: boolean; +} +export type ServerClassification = "BAD" | "GOOD" | "NEUTRAL"; +export interface ServerSignaturePayload { + algorithm: string; + apiKey?: string; + id?: string; + signature: string; + verificationData: string; + verified: boolean; +} +export interface ServerSignatureVerificationData { + [key: string]: string | unknown; + classification?: ServerClassification; + email?: string; + expire?: number; + fields?: string[]; + fieldsHash?: string; + id?: string; + ipAddress?: string; + reasons?: string[]; + score?: number; + time?: number; + verified?: boolean; +} +export interface ServerVerificationResult { + algorithm?: string; + apiKey?: string; + id?: string; + payload?: string; + reason?: string; + score?: number; + signature?: string; + verificationData?: string; + verified?: boolean; +} +export interface SolveChallengeOptions { + challenge: Challenge; + controller?: AbortController; + counterStart?: number; + counterStep?: number; + counterMode?: "uint32" | "string"; + deriveKey: DeriveKeyFunction; + timeout?: number; +} +export interface Strings { + ariaLinkLabel: string; + enterCode: string; + enterCodeAria: string; + error: string; + expired: string; + footer: string; + getAudioChallenge: string; + label: string; + loading: string; + reload: string; + verify: string; + verificationRequired: string; + verified: string; + verifying: string; + waitAlert: string; +} +export declare enum State { + CODE = "code", + ERROR = "error", + VERIFIED = "verified", + VERIFYING = "verifying", + UNVERIFIED = "unverified", + EXPIRED = "expired" +} +export interface Solution { + counter: number; + derivedKey: string; + time?: number; +} +export type Store = { + get: (name: K) => T[K]; + set: (name: N | T, value?: T[N]) => void; + store: Writable; +}; +export interface VerifyOptions { + concurrency?: number; + controller?: AbortController; + minDuration?: number; +} +export interface VerifyResult { + challenge?: Challenge; + payload: string; + solution?: Solution; +} +export interface VerifyServerSignatureResult extends VerifySolutionResult { + verificationData?: ServerSignatureVerificationData | null; +} +export interface VerifySolutionOptions { + challenge: Challenge; + counterMode?: "uint32" | "string"; + deriveKey: DeriveKeyFunction; + hmacAlgorithm?: HmacAlgorithm; + hmacKeySignatureSecret?: string; + hmacSignatureSecret: string; + solution: Solution; +} +export interface VerifySolutionResult { + expired: boolean; + invalidSignature: boolean | null; + invalidSolution: boolean | null; + time: number; + verified: boolean; +} +export interface WidgetAttributes extends Partial> { + challenge?: string; + configuration?: string; +} +export interface WidgetMethods { + configure: (config: Partial) => Promise; + getConfiguration: () => Configuration; + getState: () => State; + hide: () => void; + reset: (newState?: State, err?: string | null) => void; + setState: (newState: State, err?: string | null) => void; + show: () => void; + updateUI: () => void; + verify: (options?: VerifyOptions) => Promise; +} +export type Writable>> = { + set(this: void, value: T): void; + update(this: void, updater: (value: T) => T): void; + subscribe(this: void, run: (value: T) => void, invalidate?: () => void): () => void; +}; +declare function deriveKey(parameters: ChallengeParameters, salt: Uint8Array, password: Uint8Array): Promise; +declare function deriveKey$1(parameters: ChallengeParameters, salt: Uint8Array, password: Uint8Array): Promise; +declare function deriveKey$2(parameters: ChallengeParameters, salt: Uint8Array, password: Uint8Array): Promise; +declare function deriveKey$3(parameters: ChallengeParameters, salt: Uint8Array, password: Uint8Array): Promise; +/** + * Creates a new proof-of-work challenge. + * + * Generates random nonce and salt, optionally pre-computes a key prefix + * from a known counter value, and optionally signs the challenge with HMAC. + */ +export declare function createChallenge(options: CreateChallengeOptions): Promise; +/** + * Solves a challenge by brute-forcing counter values until the derived key + * starts with the required prefix. Returns the solution or null on timeout/abort. + */ +export declare function solveChallenge(options: SolveChallengeOptions): Promise; +/** + * Solves a challenge using multiple Web Workers in parallel. + * Each worker tests a different subset of counter values (interleaved by concurrency). + * Automatically retries with fewer workers on out-of-memory errors. + */ +export declare function solveChallengeWorkers(options: Omit & { + concurrency: number; + createWorker: (algorithm: string) => Worker | Promise; + onOutOfMemory?: (concurrency: number) => number | void; +}): Promise; +/** + * Verifies a submitted solution against a challenge. + * + * Checks (in order): + * 1. Whether the challenge has expired. + * 2. Whether the challenge has signature parameter. + * 3. Whether the challenge signature is valid (tamper check). + * 4. Whether the derived key matches — either via key signature or by re-deriving. + */ +export declare function verifySolution(options: VerifySolutionOptions): Promise; +export declare function parseVerificationData(data: string, convertToArray?: string[]): ServerSignatureVerificationData | null; +export declare function verifyFieldsHash(options: { + formData: FormData | Record; + fields: string[]; + fieldsHash: string; + algorithm?: string; +}): Promise; +export declare function verifyServerSignature(options: { + payload: ServerSignaturePayload; + hmacSecret: string; +}): Promise; + +declare namespace sha { + export { deriveKey$3 as deriveKey }; +} +declare namespace argon2id { + export { deriveKey }; +} +declare namespace pbkdf2 { + export { deriveKey$1 as deriveKey }; +} +declare namespace scrypt { + export { deriveKey$2 as deriveKey }; +} + +export { + argon2id, + pbkdf2, + scrypt, + sha, +}; + +export {}; diff --git a/frontend/node_modules/altcha/dist/lib/index.js b/frontend/node_modules/altcha/dist/lib/index.js new file mode 100644 index 0000000..34765b2 --- /dev/null +++ b/frontend/node_modules/altcha/dist/lib/index.js @@ -0,0 +1,1422 @@ +function __awaiter(thisArg, _arguments, P, generator) { + function adopt(value) { + return value instanceof P ? value : new P(function(resolve) { + resolve(value); + }); + } + return new (P || (P = Promise))(function(resolve, reject) { + function fulfilled(value) { + try { + step(generator.next(value)); + } catch (e) { + reject(e); + } + } + function rejected(value) { + try { + step(generator["throw"](value)); + } catch (e) { + reject(e); + } + } + function step(result) { + result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); + } + step((generator = generator.apply(thisArg, [])).next()); + }); +} +typeof SuppressedError === "function" ? SuppressedError : function(error, suppressed, message) { + var e = new Error(message); + return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e; +}; +class Mutex { + constructor() { + this.mutex = Promise.resolve(); + } + lock() { + let begin = () => { + }; + this.mutex = this.mutex.then(() => new Promise(begin)); + return new Promise((res) => { + begin = res; + }); + } + dispatch(fn) { + return __awaiter(this, void 0, void 0, function* () { + const unlock = yield this.lock(); + try { + return yield Promise.resolve(fn()); + } finally { + unlock(); + } + }); + } +} +var _a; +function getGlobal() { + if (typeof globalThis !== "undefined") + return globalThis; + if (typeof self !== "undefined") + return self; + if (typeof window !== "undefined") + return window; + return global; +} +const globalObject = getGlobal(); +const nodeBuffer = (_a = globalObject.Buffer) !== null && _a !== void 0 ? _a : null; +const textEncoder = globalObject.TextEncoder ? new globalObject.TextEncoder() : null; +function hexCharCodesToInt(a, b) { + return (a & 15) + (a >> 6 | a >> 3 & 8) << 4 | (b & 15) + (b >> 6 | b >> 3 & 8); +} +function writeHexToUInt8(buf, str) { + const size = str.length >> 1; + for (let i = 0; i < size; i++) { + const index = i << 1; + buf[i] = hexCharCodesToInt(str.charCodeAt(index), str.charCodeAt(index + 1)); + } +} +function hexStringEqualsUInt8(str, buf) { + if (str.length !== buf.length * 2) { + return false; + } + for (let i = 0; i < buf.length; i++) { + const strIndex = i << 1; + if (buf[i] !== hexCharCodesToInt(str.charCodeAt(strIndex), str.charCodeAt(strIndex + 1))) { + return false; + } + } + return true; +} +const alpha = "a".charCodeAt(0) - 10; +const digit = "0".charCodeAt(0); +function getDigestHex(tmpBuffer, input, hashLength) { + let p = 0; + for (let i = 0; i < hashLength; i++) { + let nibble = input[i] >>> 4; + tmpBuffer[p++] = nibble > 9 ? nibble + alpha : nibble + digit; + nibble = input[i] & 15; + tmpBuffer[p++] = nibble > 9 ? nibble + alpha : nibble + digit; + } + return String.fromCharCode.apply(null, tmpBuffer); +} +const getUInt8Buffer = nodeBuffer !== null ? (data) => { + if (typeof data === "string") { + const buf = nodeBuffer.from(data, "utf8"); + return new Uint8Array(buf.buffer, buf.byteOffset, buf.length); + } + if (nodeBuffer.isBuffer(data)) { + return new Uint8Array(data.buffer, data.byteOffset, data.length); + } + if (ArrayBuffer.isView(data)) { + return new Uint8Array(data.buffer, data.byteOffset, data.byteLength); + } + throw new Error("Invalid data type!"); +} : (data) => { + if (typeof data === "string") { + return textEncoder.encode(data); + } + if (ArrayBuffer.isView(data)) { + return new Uint8Array(data.buffer, data.byteOffset, data.byteLength); + } + throw new Error("Invalid data type!"); +}; +const base64Chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; +const base64Lookup = new Uint8Array(256); +for (let i = 0; i < base64Chars.length; i++) { + base64Lookup[base64Chars.charCodeAt(i)] = i; +} +function encodeBase64(data, pad = true) { + const len = data.length; + const extraBytes = len % 3; + const parts = []; + const len2 = len - extraBytes; + for (let i = 0; i < len2; i += 3) { + const tmp = (data[i] << 16 & 16711680) + (data[i + 1] << 8 & 65280) + (data[i + 2] & 255); + const triplet = base64Chars.charAt(tmp >> 18 & 63) + base64Chars.charAt(tmp >> 12 & 63) + base64Chars.charAt(tmp >> 6 & 63) + base64Chars.charAt(tmp & 63); + parts.push(triplet); + } + if (extraBytes === 1) { + const tmp = data[len - 1]; + const a = base64Chars.charAt(tmp >> 2); + const b = base64Chars.charAt(tmp << 4 & 63); + parts.push(`${a}${b}`); + if (pad) { + parts.push("=="); + } + } else if (extraBytes === 2) { + const tmp = (data[len - 2] << 8) + data[len - 1]; + const a = base64Chars.charAt(tmp >> 10); + const b = base64Chars.charAt(tmp >> 4 & 63); + const c = base64Chars.charAt(tmp << 2 & 63); + parts.push(`${a}${b}${c}`); + if (pad) { + parts.push("="); + } + } + return parts.join(""); +} +function getDecodeBase64Length(data) { + let bufferLength = Math.floor(data.length * 0.75); + const len = data.length; + if (data[len - 1] === "=") { + bufferLength -= 1; + if (data[len - 2] === "=") { + bufferLength -= 1; + } + } + return bufferLength; +} +function decodeBase64(data) { + const bufferLength = getDecodeBase64Length(data); + const len = data.length; + const bytes = new Uint8Array(bufferLength); + let p = 0; + for (let i = 0; i < len; i += 4) { + const encoded1 = base64Lookup[data.charCodeAt(i)]; + const encoded2 = base64Lookup[data.charCodeAt(i + 1)]; + const encoded3 = base64Lookup[data.charCodeAt(i + 2)]; + const encoded4 = base64Lookup[data.charCodeAt(i + 3)]; + bytes[p] = encoded1 << 2 | encoded2 >> 4; + p += 1; + bytes[p] = (encoded2 & 15) << 4 | encoded3 >> 2; + p += 1; + bytes[p] = (encoded3 & 3) << 6 | encoded4 & 63; + p += 1; + } + return bytes; +} +const MAX_HEAP = 16 * 1024; +const WASM_FUNC_HASH_LENGTH = 4; +const wasmMutex = new Mutex(); +const wasmModuleCache = /* @__PURE__ */ new Map(); +function WASMInterface(binary, hashLength) { + return __awaiter(this, void 0, void 0, function* () { + let wasmInstance = null; + let memoryView = null; + let initialized = false; + if (typeof WebAssembly === "undefined") { + throw new Error("WebAssembly is not supported in this environment!"); + } + const writeMemory = (data, offset = 0) => { + memoryView.set(data, offset); + }; + const getMemory = () => memoryView; + const getExports = () => wasmInstance.exports; + const setMemorySize = (totalSize) => { + wasmInstance.exports.Hash_SetMemorySize(totalSize); + const arrayOffset = wasmInstance.exports.Hash_GetBuffer(); + const memoryBuffer = wasmInstance.exports.memory.buffer; + memoryView = new Uint8Array(memoryBuffer, arrayOffset, totalSize); + }; + const getStateSize = () => { + const view = new DataView(wasmInstance.exports.memory.buffer); + const stateSize = view.getUint32(wasmInstance.exports.STATE_SIZE, true); + return stateSize; + }; + const loadWASMPromise = wasmMutex.dispatch(() => __awaiter(this, void 0, void 0, function* () { + if (!wasmModuleCache.has(binary.name)) { + const asm = decodeBase64(binary.data); + const promise = WebAssembly.compile(asm); + wasmModuleCache.set(binary.name, promise); + } + const module = yield wasmModuleCache.get(binary.name); + wasmInstance = yield WebAssembly.instantiate(module, { + // env: { + // emscripten_memcpy_big: (dest, src, num) => { + // const memoryBuffer = wasmInstance.exports.memory.buffer; + // const memView = new Uint8Array(memoryBuffer, 0); + // memView.set(memView.subarray(src, src + num), dest); + // }, + // print_memory: (offset, len) => { + // const memoryBuffer = wasmInstance.exports.memory.buffer; + // const memView = new Uint8Array(memoryBuffer, 0); + // console.log('print_int32', memView.subarray(offset, offset + len)); + // }, + // }, + }); + })); + const setupInterface = () => __awaiter(this, void 0, void 0, function* () { + if (!wasmInstance) { + yield loadWASMPromise; + } + const arrayOffset = wasmInstance.exports.Hash_GetBuffer(); + const memoryBuffer = wasmInstance.exports.memory.buffer; + memoryView = new Uint8Array(memoryBuffer, arrayOffset, MAX_HEAP); + }); + const init = (bits = null) => { + initialized = true; + wasmInstance.exports.Hash_Init(bits); + }; + const updateUInt8Array = (data) => { + let read = 0; + while (read < data.length) { + const chunk = data.subarray(read, read + MAX_HEAP); + read += chunk.length; + memoryView.set(chunk); + wasmInstance.exports.Hash_Update(chunk.length); + } + }; + const update = (data) => { + if (!initialized) { + throw new Error("update() called before init()"); + } + const Uint8Buffer = getUInt8Buffer(data); + updateUInt8Array(Uint8Buffer); + }; + const digestChars = new Uint8Array(hashLength * 2); + const digest = (outputType, padding = null) => { + if (!initialized) { + throw new Error("digest() called before init()"); + } + initialized = false; + wasmInstance.exports.Hash_Final(padding); + if (outputType === "binary") { + return memoryView.slice(0, hashLength); + } + return getDigestHex(digestChars, memoryView, hashLength); + }; + const save = () => { + if (!initialized) { + throw new Error("save() can only be called after init() and before digest()"); + } + const stateOffset = wasmInstance.exports.Hash_GetState(); + const stateLength = getStateSize(); + const memoryBuffer = wasmInstance.exports.memory.buffer; + const internalState = new Uint8Array(memoryBuffer, stateOffset, stateLength); + const prefixedState = new Uint8Array(WASM_FUNC_HASH_LENGTH + stateLength); + writeHexToUInt8(prefixedState, binary.hash); + prefixedState.set(internalState, WASM_FUNC_HASH_LENGTH); + return prefixedState; + }; + const load = (state) => { + if (!(state instanceof Uint8Array)) { + throw new Error("load() expects an Uint8Array generated by save()"); + } + const stateOffset = wasmInstance.exports.Hash_GetState(); + const stateLength = getStateSize(); + const overallLength = WASM_FUNC_HASH_LENGTH + stateLength; + const memoryBuffer = wasmInstance.exports.memory.buffer; + if (state.length !== overallLength) { + throw new Error(`Bad state length (expected ${overallLength} bytes, got ${state.length})`); + } + if (!hexStringEqualsUInt8(binary.hash, state.subarray(0, WASM_FUNC_HASH_LENGTH))) { + throw new Error("This state was written by an incompatible hash implementation"); + } + const internalState = state.subarray(WASM_FUNC_HASH_LENGTH); + new Uint8Array(memoryBuffer, stateOffset, stateLength).set(internalState); + initialized = true; + }; + const isDataShort = (data) => { + if (typeof data === "string") { + return data.length < MAX_HEAP / 4; + } + return data.byteLength < MAX_HEAP; + }; + let canSimplify = isDataShort; + switch (binary.name) { + case "argon2": + case "scrypt": + canSimplify = () => true; + break; + case "blake2b": + case "blake2s": + canSimplify = (data, initParam) => initParam <= 512 && isDataShort(data); + break; + case "blake3": + canSimplify = (data, initParam) => initParam === 0 && isDataShort(data); + break; + case "xxhash64": + // cannot simplify + case "xxhash3": + case "xxhash128": + case "crc64": + canSimplify = () => false; + break; + } + const calculate = (data, initParam = null, digestParam = null) => { + if (!canSimplify(data, initParam)) { + init(initParam); + update(data); + return digest("hex", digestParam); + } + const buffer = getUInt8Buffer(data); + memoryView.set(buffer); + wasmInstance.exports.Hash_Calculate(buffer.length, initParam, digestParam); + return getDigestHex(digestChars, memoryView, hashLength); + }; + yield setupInterface(); + return { + getMemory, + writeMemory, + getExports, + setMemorySize, + init, + update, + digest, + save, + load, + calculate, + hashLength + }; + }); +} +new Mutex(); +var name$k = "argon2"; +var data$k = "AGFzbQEAAAABKQVgAX8Bf2AAAX9gEH9/f39/f39/f39/f39/f38AYAR/f39/AGACf38AAwYFAAECAwQFBgEBAoCAAgYIAX8BQZCoBAsHQQQGbWVtb3J5AgASSGFzaF9TZXRNZW1vcnlTaXplAAAOSGFzaF9HZXRCdWZmZXIAAQ5IYXNoX0NhbGN1bGF0ZQAECvEyBVgBAn9BACEBAkAgAEEAKAKICCICRg0AAkAgACACayIAQRB2IABBgIB8cSAASWoiAEAAQX9HDQBB/wHADwtBACEBQQBBACkDiAggAEEQdK18NwOICAsgAcALcAECfwJAQQAoAoAIIgANAEEAPwBBEHQiADYCgAhBACgCiAgiAUGAgCBGDQACQEGAgCAgAWsiAEEQdiAAQYCAfHEgAElqIgBAAEF/Rw0AQQAPC0EAQQApA4gIIABBEHStfDcDiAhBACgCgAghAAsgAAvcDgECfiAAIAQpAwAiECAAKQMAIhF8IBFCAYZC/v///x+DIBBC/////w+DfnwiEDcDACAMIBAgDCkDAIVCIIkiEDcDACAIIBAgCCkDACIRfCARQgGGQv7///8fgyAQQv////8Pg358IhA3AwAgBCAQIAQpAwCFQiiJIhA3AwAgACAQIAApAwAiEXwgEEL/////D4MgEUIBhkL+////H4N+fCIQNwMAIAwgECAMKQMAhUIwiSIQNwMAIAggECAIKQMAIhF8IBBC/////w+DIBFCAYZC/v///x+DfnwiEDcDACAEIBAgBCkDAIVCAYk3AwAgASAFKQMAIhAgASkDACIRfCARQgGGQv7///8fgyAQQv////8Pg358IhA3AwAgDSAQIA0pAwCFQiCJIhA3AwAgCSAQIAkpAwAiEXwgEUIBhkL+////H4MgEEL/////D4N+fCIQNwMAIAUgECAFKQMAhUIoiSIQNwMAIAEgECABKQMAIhF8IBBC/////w+DIBFCAYZC/v///x+DfnwiEDcDACANIBAgDSkDAIVCMIkiEDcDACAJIBAgCSkDACIRfCAQQv////8PgyARQgGGQv7///8fg358IhA3AwAgBSAQIAUpAwCFQgGJNwMAIAIgBikDACIQIAIpAwAiEXwgEUIBhkL+////H4MgEEL/////D4N+fCIQNwMAIA4gECAOKQMAhUIgiSIQNwMAIAogECAKKQMAIhF8IBFCAYZC/v///x+DIBBC/////w+DfnwiEDcDACAGIBAgBikDAIVCKIkiEDcDACACIBAgAikDACIRfCAQQv////8PgyARQgGGQv7///8fg358IhA3AwAgDiAQIA4pAwCFQjCJIhA3AwAgCiAQIAopAwAiEXwgEEL/////D4MgEUIBhkL+////H4N+fCIQNwMAIAYgECAGKQMAhUIBiTcDACADIAcpAwAiECADKQMAIhF8IBFCAYZC/v///x+DIBBC/////w+DfnwiEDcDACAPIBAgDykDAIVCIIkiEDcDACALIBAgCykDACIRfCARQgGGQv7///8fgyAQQv////8Pg358IhA3AwAgByAQIAcpAwCFQiiJIhA3AwAgAyAQIAMpAwAiEXwgEEL/////D4MgEUIBhkL+////H4N+fCIQNwMAIA8gECAPKQMAhUIwiSIQNwMAIAsgECALKQMAIhF8IBBC/////w+DIBFCAYZC/v///x+DfnwiEDcDACAHIBAgBykDAIVCAYk3AwAgACAFKQMAIhAgACkDACIRfCARQgGGQv7///8fgyAQQv////8Pg358IhA3AwAgDyAQIA8pAwCFQiCJIhA3AwAgCiAQIAopAwAiEXwgEUIBhkL+////H4MgEEL/////D4N+fCIQNwMAIAUgECAFKQMAhUIoiSIQNwMAIAAgECAAKQMAIhF8IBBC/////w+DIBFCAYZC/v///x+DfnwiEDcDACAPIBAgDykDAIVCMIkiEDcDACAKIBAgCikDACIRfCAQQv////8PgyARQgGGQv7///8fg358IhA3AwAgBSAQIAUpAwCFQgGJNwMAIAEgBikDACIQIAEpAwAiEXwgEUIBhkL+////H4MgEEL/////D4N+fCIQNwMAIAwgECAMKQMAhUIgiSIQNwMAIAsgECALKQMAIhF8IBFCAYZC/v///x+DIBBC/////w+DfnwiEDcDACAGIBAgBikDAIVCKIkiEDcDACABIBAgASkDACIRfCAQQv////8PgyARQgGGQv7///8fg358IhA3AwAgDCAQIAwpAwCFQjCJIhA3AwAgCyAQIAspAwAiEXwgEEL/////D4MgEUIBhkL+////H4N+fCIQNwMAIAYgECAGKQMAhUIBiTcDACACIAcpAwAiECACKQMAIhF8IBFCAYZC/v///x+DIBBC/////w+DfnwiEDcDACANIBAgDSkDAIVCIIkiEDcDACAIIBAgCCkDACIRfCARQgGGQv7///8fgyAQQv////8Pg358IhA3AwAgByAQIAcpAwCFQiiJIhA3AwAgAiAQIAIpAwAiEXwgEEL/////D4MgEUIBhkL+////H4N+fCIQNwMAIA0gECANKQMAhUIwiSIQNwMAIAggECAIKQMAIhF8IBBC/////w+DIBFCAYZC/v///x+DfnwiEDcDACAHIBAgBykDAIVCAYk3AwAgAyAEKQMAIhAgAykDACIRfCARQgGGQv7///8fgyAQQv////8Pg358IhA3AwAgDiAQIA4pAwCFQiCJIhA3AwAgCSAQIAkpAwAiEXwgEUIBhkL+////H4MgEEL/////D4N+fCIQNwMAIAQgECAEKQMAhUIoiSIQNwMAIAMgECADKQMAIhF8IBBC/////w+DIBFCAYZC/v///x+DfnwiEDcDACAOIBAgDikDAIVCMIkiEDcDACAJIBAgCSkDACIRfCAQQv////8PgyARQgGGQv7///8fg358IhA3AwAgBCAQIAQpAwCFQgGJNwMAC98aAQN/QQAhBEEAIAIpAwAgASkDAIU3A5AIQQAgAikDCCABKQMIhTcDmAhBACACKQMQIAEpAxCFNwOgCEEAIAIpAxggASkDGIU3A6gIQQAgAikDICABKQMghTcDsAhBACACKQMoIAEpAyiFNwO4CEEAIAIpAzAgASkDMIU3A8AIQQAgAikDOCABKQM4hTcDyAhBACACKQNAIAEpA0CFNwPQCEEAIAIpA0ggASkDSIU3A9gIQQAgAikDUCABKQNQhTcD4AhBACACKQNYIAEpA1iFNwPoCEEAIAIpA2AgASkDYIU3A/AIQQAgAikDaCABKQNohTcD+AhBACACKQNwIAEpA3CFNwOACUEAIAIpA3ggASkDeIU3A4gJQQAgAikDgAEgASkDgAGFNwOQCUEAIAIpA4gBIAEpA4gBhTcDmAlBACACKQOQASABKQOQAYU3A6AJQQAgAikDmAEgASkDmAGFNwOoCUEAIAIpA6ABIAEpA6ABhTcDsAlBACACKQOoASABKQOoAYU3A7gJQQAgAikDsAEgASkDsAGFNwPACUEAIAIpA7gBIAEpA7gBhTcDyAlBACACKQPAASABKQPAAYU3A9AJQQAgAikDyAEgASkD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"; +var hash$k = "e4cdc523"; +var wasmJson$k = { + name: name$k, + data: data$k, + hash: hash$k +}; +var name$j = "blake2b"; +var data$j = "AGFzbQEAAAABEQRgAAF/YAJ/fwBgAX8AYAAAAwoJAAECAwECAgABBQQBAQICBg4CfwFBsIsFC38AQYAICwdwCAZtZW1vcnkCAA5IYXNoX0dldEJ1ZmZlcgAACkhhc2hfRmluYWwAAwlIYXNoX0luaXQABQtIYXNoX1VwZGF0ZQAGDUhhc2hfR2V0U3RhdGUABw5IYXNoX0NhbGN1bGF0ZQAIClNUQVRFX1NJWkUDAQrTOAkFAEGACQvrAgIFfwF+AkAgAUEBSA0AAkACQAJAIAFBgAFBACgC4IoBIgJrIgNKDQAgASEEDAELQQBBADYC4IoBAkAgAkH/AEoNACACQeCJAWohBSAAIQRBACEGA0AgBSAELQAAOgAAIARBAWohBCAFQQFqIQUgAyAGQQFqIgZB/wFxSg0ACwtBAEEAKQPAiQEiB0KAAXw3A8CJAUEAQQApA8iJASAHQv9+Vq18NwPIiQFB4IkBEAIgACADaiEAAkAgASADayIEQYEBSA0AIAIgAWohBQNAQQBBACkDwIkBIgdCgAF8NwPAiQFBAEEAKQPIiQEgB0L/flatfDcDyIkBIAAQAiAAQYABaiEAIAVBgH9qIgVBgAJLDQALIAVBgH9qIQQMAQsgBEEATA0BC0EAIQUDQCAFQQAoAuCKAWpB4IkBaiAAIAVqLQAAOgAAIAQgBUEBaiIFQf8BcUoNAAsLQQBBACgC4IoBIARqNgLgigELC78uASR+QQBBACkD0IkBQQApA7CJASIBQQApA5CJAXwgACkDICICfCIDhULr+obav7X2wR+FQiCJIgRCq/DT9K/uvLc8fCIFIAGFQiiJIgYgA3wgACkDKCIBfCIHIASFQjCJIgggBXwiCSAGhUIBiSIKQQApA8iJAUEAKQOoiQEiBEEAKQOIiQF8IAApAxAiA3wiBYVCn9j52cKR2oKbf4VCIIkiC0K7zqqm2NDrs7t/fCIMIASFQiiJIg0gBXwgACkDGCIEfCIOfCAAKQNQIgV8Ig9BACkDwIkBQQApA6CJASIQQQApA4CJASIRfCAAKQMAIgZ8IhKFQtGFmu/6z5SH0QCFQiCJIhNCiJLznf/M+YTqAHwiFCAQhUIoiSIVIBJ8IAApAwgiEHwiFiAThUIwiSIXhUIgiSIYQQApA9iJAUEAKQO4iQEiE0EAKQOYiQF8IAApAzAiEnwiGYVC+cL4m5Gjs/DbAIVCIIkiGkLx7fT4paf9p6V/fCIbIBOFQiiJIhwgGXwgACkDOCITfCIZIBqFQjCJIhogG3wiG3wiHSAKhUIoiSIeIA98IAApA1giCnwiDyAYhUIwiSIYIB18Ih0gDiALhUIwiSIOIAx8Ih8gDYVCAYkiDCAWfCAAKQNAIgt8Ig0gGoVCIIkiFiAJfCIaIAyFQiiJIiAgDXwgACkDSCIJfCIhIBaFQjCJIhYgGyAchUIBiSIMIAd8IAApA2AiB3wiDSAOhUIgiSIOIBcgFHwiFHwiFyAMhUIoiSIbIA18IAApA2giDHwiHCAOhUIwiSIOIBd8IhcgG4VCAYkiGyAZIBQgFYVCAYkiFHwgACkDcCINfCIVIAiFQiCJIhkgH3wiHyAUhUIoiSIUIBV8IAApA3giCHwiFXwgDHwiIoVCIIkiI3wiJCAbhUIoiSIbICJ8IBJ8IiIgFyAYIBUgGYVCMIkiFSAffCIZIBSFQgGJIhQgIXwgDXwiH4VCIIkiGHwiFyAUhUIoiSIUIB98IAV8Ih8gGIVCMIkiGCAXfCIXIBSFQgGJIhR8IAF8IiEgFiAafCIWIBUgHSAehUIBiSIaIBx8IAl8IhyFQiCJIhV8Ih0gGoVCKIkiGiAcfCAIfCIcIBWFQjCJIhWFQiCJIh4gGSAOIBYgIIVCAYkiFiAPfCACfCIPhUIgiSIOfCIZIBaFQiiJIhYgD3wgC3wiDyAOhUIwiSIOIBl8Ihl8IiAgFIVCKIkiFCAhfCAEfCIhIB6FQjCJIh4gIHwiICAiICOFQjCJIiIgJHwiIyAbhUIBiSIbIBx8IAp8IhwgDoVCIIkiDiAXfCIXIBuFQiiJIhsgHHwgE3wiHCAOhUIwiSIOIBkgFoVCAYkiFiAffCAQfCIZICKFQiCJIh8gFSAdfCIVfCIdIBaFQiiJIhYgGXwgB3wiGSAfhUIwiSIfIB18Ih0gFoVCAYkiFiAVIBqFQgGJIhUgD3wgBnwiDyAYhUIgiSIYICN8IhogFYVCKIkiFSAPfCADfCIPfCAHfCIihUIgiSIjfCIkIBaFQiiJIhYgInwgBnwiIiAjhUIwiSIjICR8IiQgFoVCAYkiFiAOIBd8Ig4gDyAYhUIwiSIPICAgFIVCAYkiFCAZfCAKfCIXhUIgiSIYfCIZIBSFQiiJIhQgF3wgC3wiF3wgBXwiICAPIBp8Ig8gHyAOIBuFQgGJIg4gIXwgCHwiGoVCIIkiG3wiHyAOhUIoiSIOIBp8IAx8IhogG4VCMIkiG4VCIIkiISAdIB4gDyAVhUIBiSIPIBx8IAF8IhWFQiCJIhx8Ih0gD4VCKIkiDyAVfCADfCIVIByFQjCJIhwgHXwiHXwiHiAWhUIoiSIWICB8IA18IiAgIYVCMIkiISAefCIeIBogFyAYhUIwiSIXIBl8IhggFIVCAYkiFHwgCXwiGSAchUIgiSIaICR8IhwgFIVCKIkiFCAZfCACfCIZIBqFQjCJIhogHSAPhUIBiSIPICJ8IAR8Ih0gF4VCIIkiFyAbIB98Iht8Ih8gD4VCKIkiDyAdfCASfCIdIBeFQjCJIhcgH3wiHyAPhUIBiSIPIBsgDoVCAYkiDiAVfCATfCIVICOFQiCJIhsgGHwiGCAOhUIoiSIOIBV8IBB8IhV8IAx8IiKFQiCJIiN8IiQgD4VCKIkiDyAifCAHfCIiICOFQjCJIiMgJHwiJCAPhUIBiSIPIBogHHwiGiAVIBuFQjCJIhUgHiAWhUIBiSIWIB18IAR8IhuFQiCJIhx8Ih0gFoVCKIkiFiAbfCAQfCIbfCABfCIeIBUgGHwiFSAXIBogFIVCAYkiFCAgfCATfCIYhUIgiSIXfCIaIBSFQiiJIhQgGHwgCXwiGCAXhUIwiSIXhUIgiSIgIB8gISAVIA6FQgGJIg4gGXwgCnwiFYVCIIkiGXwiHyAOhUIoiSIOIBV8IA18IhUgGYVCMIkiGSAffCIffCIhIA+FQiiJIg8gHnwgBXwiHiAghUIwiSIgICF8IiEgGyAchUIwiSIbIB18IhwgFoVCAYkiFiAYfCADfCIYIBmFQiCJIhkgJHwiHSAWhUIoiSIWIBh8IBJ8IhggGYVCMIkiGSAfIA6FQgGJIg4gInwgAnwiHyAbhUIgiSIbIBcgGnwiF3wiGiAOhUIoiSIOIB98IAZ8Ih8gG4VCMIkiGyAafCIaIA6FQgGJIg4gFSAXIBSFQgGJIhR8IAh8IhUgI4VCIIkiFyAcfCIcIBSFQiiJIhQgFXwgC3wiFXwgBXwiIoVCIIkiI3wiJCAOhUIoiSIOICJ8IAh8IiIgGiAgIBUgF4VCMIkiFSAcfCIXIBSFQgGJIhQgGHwgCXwiGIVCIIkiHHwiGiAUhUIoiSIUIBh8IAZ8IhggHIVCMIkiHCAafCIaIBSFQgGJIhR8IAR8IiAgGSAdfCIZIBUgISAPhUIBiSIPIB98IAN8Ih2FQiCJIhV8Ih8gD4VCKIkiDyAdfCACfCIdIBWFQjCJIhWFQiCJIiEgFyAbIBkgFoVCAYkiFiAefCABfCIZhUIgiSIbfCIXIBaFQiiJIhYgGXwgE3wiGSAbhUIwiSIbIBd8Ihd8Ih4gFIVCKIkiFCAgfCAMfCIgICGFQjCJIiEgHnwiHiAiICOFQjCJIiIgJHwiIyAOhUIBiSIOIB18IBJ8Ih0gG4VCIIkiGyAafCIaIA6FQiiJIg4gHXwgC3wiHSAbhUIwiSIbIBcgFoVCAYkiFiAYfCANfCIXICKFQiCJIhggFSAffCIVfCIfIBaFQiiJIhYgF3wgEHwiFyAYhUIwiSIYIB98Ih8gFoVCAYkiFiAVIA+FQgGJIg8gGXwgCnwiFSAchUIgiSIZICN8IhwgD4VCKIkiDyAVfCAHfCIVfCASfCIihUIgiSIjfCIkIBaFQiiJIhYgInwgBXwiIiAjhUIwiSIjICR8IiQgFoVCAYkiFiAbIBp8IhogFSAZhUIwiSIVIB4gFIVCAYkiFCAXfCADfCIXhUIgiSIZfCIbIBSFQiiJIhQgF3wgB3wiF3wgAnwiHiAVIBx8IhUgGCAaIA6FQgGJIg4gIHwgC3wiGoVCIIkiGHwiHCAOhUIoiSIOIBp8IAR8IhogGIVCMIkiGIVCIIkiICAfICEgFSAPhUIBiSIPIB18IAZ8IhWFQiCJIh18Ih8gD4VCKIkiDyAVfCAKfCIVIB2FQjCJIh0gH3wiH3wiISAWhUIoiSIWIB58IAx8Ih4gIIVCMIkiICAhfCIhIBogFyAZhUIwiSIXIBt8IhkgFIVCAYkiFHwgEHwiGiAdhUIgiSIbICR8Ih0gFIVCKIkiFCAafCAJfCIaIBuFQjCJIhsgHyAPhUIBiSIPICJ8IBN8Ih8gF4VCIIkiFyAYIBx8Ihh8IhwgD4VCKIkiDyAffCABfCIfIBeFQjCJIhcgHHwiHCAPhUIBiSIPIBggDoVCAYkiDiAVfCAIfCIVICOFQiCJIhggGXwiGSAOhUIoiSIOIBV8IA18IhV8IA18IiKFQiCJIiN8IiQgD4VCKIkiDyAifCAMfCIiICOFQjCJIiMgJHwiJCAPhUIBiSIPIBsgHXwiGyAVIBiFQjCJIhUgISAWhUIBiSIWIB98IBB8IhiFQiCJIh18Ih8gFoVCKIkiFiAYfCAIfCIYfCASfCIhIBUgGXwiFSAXIBsgFIVCAYkiFCAefCAHfCIZhUIgiSIXfCIbIBSFQiiJIhQgGXwgAXwiGSAXhUIwiSIXhUIgiSIeIBwgICAVIA6FQgGJIg4gGnwgAnwiFYVCIIkiGnwiHCAOhUIoiSIOIBV8IAV8IhUgGoVCMIkiGiAcfCIcfCIgIA+FQiiJIg8gIXwgBHwiISAehUIwiSIeICB8IiAgGCAdhUIwiSIYIB98Ih0gFoVCAYkiFiAZfCAGfCIZIBqFQiCJIhogJHwiHyAWhUIoiSIWIBl8IBN8IhkgGoVCMIkiGiAcIA6FQgGJIg4gInwgCXwiHCAYhUIgiSIYIBcgG3wiF3wiGyAOhUIoiSIOIBx8IAN8IhwgGIVCMIkiGCAbfCIbIA6FQgGJIg4gFSAXIBSFQgGJIhR8IAt8IhUgI4VCIIkiFyAdfCIdIBSFQiiJIhQgFXwgCnwiFXwgBHwiIoVCIIkiI3wiJCAOhUIoiSIOICJ8IAl8IiIgGyAeIBUgF4VCMIkiFSAdfCIXIBSFQgGJIhQgGXwgDHwiGYVCIIkiHXwiGyAUhUIoiSIUIBl8IAp8IhkgHYVCMIkiHSAbfCIbIBSFQgGJIhR8IAN8Ih4gGiAffCIaIBUgICAPhUIBiSIPIBx8IAd8IhyFQiCJIhV8Ih8gD4VCKIkiDyAcfCAQfCIcIBWFQjCJIhWFQiCJIiAgFyAYIBogFoVCAYkiFiAhfCATfCIahUIgiSIYfCIXIBaFQiiJIhYgGnwgDXwiGiAYhUIwiSIYIBd8Ihd8IiEgFIVCKIkiFCAefCAFfCIeICCFQjCJIiAgIXwiISAiICOFQjCJIiIgJHwiIyAOhUIBiSIOIBx8IAt8IhwgGIVCIIkiGCAbfCIbIA6FQiiJIg4gHHwgEnwiHCAYhUIwiSIYIBcgFoVCAYkiFiAZfCABfCIXICKFQiCJIhkgFSAffCIVfCIfIBaFQiiJIhYgF3wgBnwiFyAZhUIwiSIZIB98Ih8gFoVCAYkiFiAVIA+FQgGJIg8gGnwgCHwiFSAdhUIgiSIaICN8Ih0gD4VCKIkiDyAVfCACfCIVfCANfCIihUIgiSIjfCIkIBaFQiiJIhYgInwgCXwiIiAjhUIwiSIjICR8IiQgFoVCAYkiFiAYIBt8IhggFSAahUIwiSIVICEgFIVCAYkiFCAXfCASfCIXhUIgiSIafCIbIBSFQiiJIhQgF3wgCHwiF3wgB3wiISAVIB18IhUgGSAYIA6FQgGJIg4gHnwgBnwiGIVCIIkiGXwiHSAOhUIoiSIOIBh8IAt8IhggGYVCMIkiGYVCIIkiHiAfICAgFSAPhUIBiSIPIBx8IAp8IhWFQiCJIhx8Ih8gD4VCKIkiDyAVfCAEfCIVIByFQjCJIhwgH3wiH3wiICAWhUIoiSIWICF8IAN8IiEgHoVCMIkiHiAgfCIgIBggFyAahUIwiSIXIBt8IhogFIVCAYkiFHwgBXwiGCAchUIgiSIbICR8IhwgFIVCKIkiFCAYfCABfCIYIBuFQjCJIhsgHyAPhUIBiSIPICJ8IAx8Ih8gF4VCIIkiFyAZIB18Ihl8Ih0gD4VCKIkiDyAffCATfCIfIBeFQjCJIhcgHXwiHSAPhUIBiSIPIBkgDoVCAYkiDiAVfCAQfCIVICOFQiCJIhkgGnwiGiAOhUIoiSIOIBV8IAJ8IhV8IBN8IiKFQiCJIiN8IiQgD4VCKIkiDyAifCASfCIiICOFQjCJIiMgJHwiJCAPhUIBiSIPIBsgHHwiGyAVIBmFQjCJIhUgICAWhUIBiSIWIB98IAt8IhmFQiCJIhx8Ih8gFoVCKIkiFiAZfCACfCIZfCAJfCIgIBUgGnwiFSAXIBsgFIVCAYkiFCAhfCAFfCIahUIgiSIXfCIbIBSFQiiJIhQgGnwgA3wiGiAXhUIwiSIXhUIgiSIhIB0gHiAVIA6FQgGJIg4gGHwgEHwiFYVCIIkiGHwiHSAOhUIoiSIOIBV8IAF8IhUgGIVCMIkiGCAdfCIdfCIeIA+FQiiJIg8gIHwgDXwiICAhhUIwiSIhIB58Ih4gGSAchUIwiSIZIB98IhwgFoVCAYkiFiAafCAIfCIaIBiFQiCJIhggJHwiHyAWhUIoiSIWIBp8IAp8IhogGIVCMIkiGCAdIA6FQgGJIg4gInwgBHwiHSAZhUIgiSIZIBcgG3wiF3wiGyAOhUIoiSIOIB18IAd8Ih0gGYVCMIkiGSAbfCIbIA6FQgGJIg4gFSAXIBSFQgGJIhR8IAx8IhUgI4VCIIkiFyAcfCIcIBSFQiiJIhQgFXwgBnwiFXwgEnwiIoVCIIkiI3wiJCAOhUIoiSIOICJ8IBN8IiIgGyAhIBUgF4VCMIkiFSAcfCIXIBSFQgGJIhQgGnwgBnwiGoVCIIkiHHwiGyAUhUIoiSIUIBp8IBB8IhogHIVCMIkiHCAbfCIbIBSFQgGJIhR8IA18IiEgGCAffCIYIBUgHiAPhUIBiSIPIB18IAJ8Ih2FQiCJIhV8Ih4gD4VCKIkiDyAdfCABfCIdIBWFQjCJIhWFQiCJIh8gFyAZIBggFoVCAYkiFiAgfCADfCIYhUIgiSIZfCIXIBaFQiiJIhYgGHwgBHwiGCAZhUIwiSIZIBd8Ihd8IiAgFIVCKIkiFCAhfCAIfCIhIB+FQjCJIh8gIHwiICAiICOFQjCJIiIgJHwiIyAOhUIBiSIOIB18IAd8Ih0gGYVCIIkiGSAbfCIbIA6FQiiJIg4gHXwgDHwiHSAZhUIwiSIZIBcgFoVCAYkiFiAafCALfCIXICKFQiCJIhogFSAefCIVfCIeIBaFQiiJIhYgF3wgCXwiFyAahUIwiSIaIB58Ih4gFoVCAYkiFiAVIA+FQgGJIg8gGHwgBXwiFSAchUIgiSIYICN8IhwgD4VCKIkiDyAVfCAKfCIVfCACfCIChUIgiSIifCIjIBaFQiiJIhYgAnwgC3wiAiAihUIwiSILICN8IiIgFoVCAYkiFiAZIBt8IhkgFSAYhUIwiSIVICAgFIVCAYkiFCAXfCANfCINhUIgiSIXfCIYIBSFQiiJIhQgDXwgBXwiBXwgEHwiECAVIBx8Ig0gGiAZIA6FQgGJIg4gIXwgDHwiDIVCIIkiFXwiGSAOhUIoiSIOIAx8IBJ8IhIgFYVCMIkiDIVCIIkiFSAeIB8gDSAPhUIBiSINIB18IAl8IgmFQiCJIg98IhogDYVCKIkiDSAJfCAIfCIJIA+FQjCJIgggGnwiD3wiGiAWhUIoiSIWIBB8IAd8IhAgEYUgDCAZfCIHIA6FQgGJIgwgCXwgCnwiCiALhUIgiSILIAUgF4VCMIkiBSAYfCIJfCIOIAyFQiiJIgwgCnwgE3wiEyALhUIwiSIKIA58IguFNwOAiQFBACADIAYgDyANhUIBiSINIAJ8fCICIAWFQiCJIgUgB3wiBiANhUIoiSIHIAJ8fCICQQApA4iJAYUgBCABIBIgCSAUhUIBiSIDfHwiASAIhUIgiSISICJ8IgkgA4VCKIkiAyABfHwiASAShUIwiSIEIAl8IhKFNwOIiQFBACATQQApA5CJAYUgECAVhUIwiSIQIBp8IhOFNwOQiQFBACABQQApA5iJAYUgAiAFhUIwiSICIAZ8IgGFNwOYiQFBACASIAOFQgGJQQApA6CJAYUgAoU3A6CJAUEAIBMgFoVCAYlBACkDqIkBhSAKhTcDqIkBQQAgASAHhUIBiUEAKQOwiQGFIASFNwOwiQFBACALIAyFQgGJQQApA7iJAYUgEIU3A7iJAQvdAgUBfwF+AX8BfgJ/IwBBwABrIgAkAAJAQQApA9CJAUIAUg0AQQBBACkDwIkBIgFBACgC4IoBIgKsfCIDNwPAiQFBAEEAKQPIiQEgAyABVK18NwPIiQECQEEALQDoigFFDQBBAEJ/NwPYiQELQQBCfzcD0IkBAkAgAkH/AEoNAEEAIQQDQCACIARqQeCJAWpBADoAACAEQQFqIgRBgAFBACgC4IoBIgJrSA0ACwtB4IkBEAIgAEEAKQOAiQE3AwAgAEEAKQOIiQE3AwggAEEAKQOQiQE3AxAgAEEAKQOYiQE3AxggAEEAKQOgiQE3AyAgAEEAKQOoiQE3AyggAEEAKQOwiQE3AzAgAEEAKQO4iQE3AzhBACgC5IoBIgVBAUgNAEEAIQRBACECA0AgBEGACWogACAEai0AADoAACAEQQFqIQQgBSACQQFqIgJB/wFxSg0ACwsgAEHAAGokAAv9AwMBfwF+AX8jAEGAAWsiAiQAQQBBgQI7AfKKAUEAIAE6APGKAUEAIAA6APCKAUGQfiEAA0AgAEGAiwFqQgA3AAAgAEH4igFqQgA3AAAgAEHwigFqQgA3AAAgAEEYaiIADQALQQAhAEEAQQApA/CKASIDQoiS853/zPmE6gCFNwOAiQFBAEEAKQP4igFCu86qptjQ67O7f4U3A4iJAUEAQQApA4CLAUKr8NP0r+68tzyFNwOQiQFBAEEAKQOIiwFC8e30+KWn/aelf4U3A5iJAUEAQQApA5CLAULRhZrv+s+Uh9EAhTcDoIkBQQBBACkDmIsBQp/Y+dnCkdqCm3+FNwOoiQFBAEEAKQOgiwFC6/qG2r+19sEfhTcDsIkBQQBBACkDqIsBQvnC+JuRo7Pw2wCFNwO4iQFBACADp0H/AXE2AuSKAQJAIAFBAUgNACACQgA3A3ggAkIANwNwIAJCADcDaCACQgA3A2AgAkIANwNYIAJCADcDUCACQgA3A0ggAkIANwNAIAJCADcDOCACQgA3AzAgAkIANwMoIAJCADcDICACQgA3AxggAkIANwMQIAJCADcDCCACQgA3AwBBACEEA0AgAiAAaiAAQYAJai0AADoAACAAQQFqIQAgBEEBaiIEQf8BcSABSA0ACyACQYABEAELIAJBgAFqJAALEgAgAEEDdkH/P3EgAEEQdhAECwkAQYAJIAAQAQsGAEGAiQELGwAgAUEDdkH/P3EgAUEQdhAEQYAJIAAQARADCwsLAQBBgAgLBPAAAAA="; +var hash$j = "c6f286e6"; +var wasmJson$j = { + name: name$j, + data: data$j, + hash: hash$j +}; +new Mutex(); +function validateBits$4(bits) { + if (!Number.isInteger(bits) || bits < 8 || bits > 512 || bits % 8 !== 0) { + return new Error("Invalid variant! Valid values: 8, 16, ..., 512"); + } + return null; +} +function getInitParam$1(outputBits, keyBits) { + return outputBits | keyBits << 16; +} +function createBLAKE2b(bits = 512, key = null) { + if (validateBits$4(bits)) { + return Promise.reject(validateBits$4(bits)); + } + let keyBuffer = null; + let initParam = bits; + if (key !== null) { + keyBuffer = getUInt8Buffer(key); + if (keyBuffer.length > 64) { + return Promise.reject(new Error("Max key length is 64 bytes")); + } + initParam = getInitParam$1(bits, keyBuffer.length); + } + const outputSize = bits / 8; + return WASMInterface(wasmJson$j, outputSize).then((wasm) => { + if (initParam > 512) { + wasm.writeMemory(keyBuffer); + } + wasm.init(initParam); + const obj = { + init: initParam > 512 ? () => { + wasm.writeMemory(keyBuffer); + wasm.init(initParam); + return obj; + } : () => { + wasm.init(initParam); + return obj; + }, + update: (data) => { + wasm.update(data); + return obj; + }, + // biome-ignore lint/suspicious/noExplicitAny: Conflict with IHasher type + digest: (outputType) => wasm.digest(outputType), + save: () => wasm.save(), + load: (data) => { + wasm.load(data); + return obj; + }, + blockSize: 128, + digestSize: outputSize + }; + return obj; + }); +} +function encodeResult(salt, options, res) { + const parameters = [ + `m=${options.memorySize}`, + `t=${options.iterations}`, + `p=${options.parallelism}` + ].join(","); + return `$argon2${options.hashType}$v=19$${parameters}$${encodeBase64(salt, false)}$${encodeBase64(res, false)}`; +} +const uint32View = new DataView(new ArrayBuffer(4)); +function int32LE(x) { + uint32View.setInt32(0, x, true); + return new Uint8Array(uint32View.buffer); +} +function hashFunc(blake512, buf, len) { + return __awaiter(this, void 0, void 0, function* () { + if (len <= 64) { + const blake = yield createBLAKE2b(len * 8); + blake.update(int32LE(len)); + blake.update(buf); + return blake.digest("binary"); + } + const r = Math.ceil(len / 32) - 2; + const ret = new Uint8Array(len); + blake512.init(); + blake512.update(int32LE(len)); + blake512.update(buf); + let vp = blake512.digest("binary"); + ret.set(vp.subarray(0, 32), 0); + for (let i = 1; i < r; i++) { + blake512.init(); + blake512.update(vp); + vp = blake512.digest("binary"); + ret.set(vp.subarray(0, 32), i * 32); + } + const partialBytesNeeded = len - 32 * r; + let blakeSmall; + if (partialBytesNeeded === 64) { + blakeSmall = blake512; + blakeSmall.init(); + } else { + blakeSmall = yield createBLAKE2b(partialBytesNeeded * 8); + } + blakeSmall.update(vp); + vp = blakeSmall.digest("binary"); + ret.set(vp.subarray(0, partialBytesNeeded), r * 32); + return ret; + }); +} +function getHashType(type) { + switch (type) { + case "d": + return 0; + case "i": + return 1; + default: + return 2; + } +} +function argon2Internal(options) { + return __awaiter(this, void 0, void 0, function* () { + var _a2; + const { parallelism, iterations, hashLength } = options; + const password = getUInt8Buffer(options.password); + const salt = getUInt8Buffer(options.salt); + const version = 19; + const hashType = getHashType(options.hashType); + const { memorySize } = options; + const secret = getUInt8Buffer((_a2 = options.secret) !== null && _a2 !== void 0 ? _a2 : ""); + const [argon2Interface, blake512] = yield Promise.all([ + WASMInterface(wasmJson$k, 1024), + createBLAKE2b(512) + ]); + argon2Interface.setMemorySize(memorySize * 1024 + 1024); + const initVector = new Uint8Array(24); + const initVectorView = new DataView(initVector.buffer); + initVectorView.setInt32(0, parallelism, true); + initVectorView.setInt32(4, hashLength, true); + initVectorView.setInt32(8, memorySize, true); + initVectorView.setInt32(12, iterations, true); + initVectorView.setInt32(16, version, true); + initVectorView.setInt32(20, hashType, true); + argon2Interface.writeMemory(initVector, memorySize * 1024); + blake512.init(); + blake512.update(initVector); + blake512.update(int32LE(password.length)); + blake512.update(password); + blake512.update(int32LE(salt.length)); + blake512.update(salt); + blake512.update(int32LE(secret.length)); + blake512.update(secret); + blake512.update(int32LE(0)); + const segments = Math.floor(memorySize / (parallelism * 4)); + const lanes = segments * 4; + const param = new Uint8Array(72); + const H0 = blake512.digest("binary"); + param.set(H0); + for (let lane = 0; lane < parallelism; lane++) { + param.set(int32LE(0), 64); + param.set(int32LE(lane), 68); + let position = lane * lanes; + let chunk = yield hashFunc(blake512, param, 1024); + argon2Interface.writeMemory(chunk, position * 1024); + position += 1; + param.set(int32LE(1), 64); + chunk = yield hashFunc(blake512, param, 1024); + argon2Interface.writeMemory(chunk, position * 1024); + } + const C = new Uint8Array(1024); + writeHexToUInt8(C, argon2Interface.calculate(new Uint8Array([]), memorySize)); + const res = yield hashFunc(blake512, C, hashLength); + if (options.outputType === "hex") { + const digestChars = new Uint8Array(hashLength * 2); + return getDigestHex(digestChars, res, hashLength); + } + if (options.outputType === "encoded") { + return encodeResult(salt, options, res); + } + return res; + }); +} +const validateOptions$3 = (options) => { + var _a2; + if (!options || typeof options !== "object") { + throw new Error("Invalid options parameter. It requires an object."); + } + if (!options.password) { + throw new Error("Password must be specified"); + } + options.password = getUInt8Buffer(options.password); + if (options.password.length < 1) { + throw new Error("Password must be specified"); + } + if (!options.salt) { + throw new Error("Salt must be specified"); + } + options.salt = getUInt8Buffer(options.salt); + if (options.salt.length < 8) { + throw new Error("Salt should be at least 8 bytes long"); + } + options.secret = getUInt8Buffer((_a2 = options.secret) !== null && _a2 !== void 0 ? _a2 : ""); + if (!Number.isInteger(options.iterations) || options.iterations < 1) { + throw new Error("Iterations should be a positive number"); + } + if (!Number.isInteger(options.parallelism) || options.parallelism < 1) { + throw new Error("Parallelism should be a positive number"); + } + if (!Number.isInteger(options.hashLength) || options.hashLength < 4) { + throw new Error("Hash length should be at least 4 bytes."); + } + if (!Number.isInteger(options.memorySize)) { + throw new Error("Memory size should be specified."); + } + if (options.memorySize < 8 * options.parallelism) { + throw new Error("Memory size should be at least 8 * parallelism."); + } + if (options.outputType === void 0) { + options.outputType = "hex"; + } + if (!["hex", "binary", "encoded"].includes(options.outputType)) { + throw new Error(`Insupported output type ${options.outputType}. Valid values: ['hex', 'binary', 'encoded']`); + } +}; +function argon2id$1(options) { + return __awaiter(this, void 0, void 0, function* () { + validateOptions$3(options); + return argon2Internal(Object.assign(Object.assign({}, options), { hashType: "id" })); + }); +} +new Mutex(); +new Mutex(); +new Mutex(); +new Mutex(); +new Mutex(); +new Mutex(); +new Mutex(); +new Mutex(); +new Mutex(); +var name$a = "sha256"; +var data$a = "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c2pBx6KerX1qIhkgASADcyACcSABIANxcyABQR53IAFBE3dzIAFBCndzaiAaaiICaiIJIBMgEnNxIBJzaiAJQRp3IAlBFXdzIAlBB3dzakHRxqk2aiIaIAIgAXMgA3EgAiABcXMgAkEedyACQRN3cyACQQp3c2ogGGoiA2oiESAJIBNzcSATc2ogEUEadyARQRV3cyARQQd3c2pB59KkoQFqIhggAyACcyABcSADIAJxcyADQR53IANBE3dzIANBCndzaiAUaiIBaiISIBEgCXNxIAlzaiASQRp3IBJBFXdzIBJBB3dzakGFldy9AmoiFCABIANzIAJxIAEgA3FzIAFBHncgAUETd3MgAUEKd3NqIBdqIgJqIhMgI2ogJiASaiAiIBFqICUgCWogEyASIBFzcSARc2ogE0EadyATQRV3cyATQQd3c2pBuMLs8AJqIhcgAiABcyADcSACIAFxcyACQR53IAJBE3dzIAJBCndzaiAZaiIDaiIJIBMgEnNxIBJzaiAJQRp3IAlBFXdzIAlBB3dzakH827HpBGoiGSADIAJzIAFxIAMgAnFzIANBHncgA0ETd3MgA0EKd3NqIBpqIgFqIhEgCSATc3EgE3NqIBFBGncgEUEVd3MgEUEHd3NqQZOa4JkFaiIaIAEgA3MgAnEgASADcXMgAUEedyABQRN3cyABQQp3c2ogGGoiAmoiEiARIAlzcSAJc2ogEkEadyASQRV3cyASQQd3c2pB1OapqAZqIhggAiABcyADcSACIAFxcyACQR53IAJBE3dzIAJBCndzaiAUaiIDaiITaiAoIBJqICQgEWogJyAJaiATIBIgEXNxIBFzaiATQRp3IBNBFXdzIBNBB3dzakG7laizB2oiFCADIAJzIAFxIAMgAnFzIANBHncgA0ETd3MgA0EKd3NqIBdqIgFqIgkgEyASc3EgEnNqIAlBGncgCUEVd3MgCUEHd3NqQa6Si454aiIXIAEgA3MgAnEgASADcXMgAUEedyABQRN3cyABQQp3c2ogGWoiAmoiESAJIBNzcSATc2ogEUEadyARQRV3cyARQQd3c2pBhdnIk3lqIhkgAiABcyADcSACIAFxcyACQR53IAJBE3dzIAJBCndzaiAaaiIDaiISIBEgCXNxIAlzaiASQRp3IBJBFXdzIBJBB3dzakGh0f+VemoiGiADIAJz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"; +var hash$a = "8c18dd94"; +var wasmJson$a = { + name: name$a, + data: data$a, + hash: hash$a +}; +new Mutex(); +new Mutex(); +function createSHA256() { + return WASMInterface(wasmJson$a, 32).then((wasm) => { + wasm.init(256); + const obj = { + init: () => { + wasm.init(256); + return obj; + }, + update: (data) => { + wasm.update(data); + return obj; + }, + // biome-ignore lint/suspicious/noExplicitAny: Conflict with IHasher type + digest: (outputType) => wasm.digest(outputType), + save: () => wasm.save(), + load: (data) => { + wasm.load(data); + return obj; + }, + blockSize: 64, + digestSize: 32 + }; + return obj; + }); +} +new Mutex(); +new Mutex(); +new Mutex(); +new Mutex(); +new Mutex(); +new Mutex(); +new Mutex(); +function calculateKeyBuffer(hasher, key) { + const { blockSize } = hasher; + const buf = getUInt8Buffer(key); + if (buf.length > blockSize) { + hasher.update(buf); + const uintArr = hasher.digest("binary"); + hasher.init(); + return uintArr; + } + return new Uint8Array(buf.buffer, buf.byteOffset, buf.length); +} +function calculateHmac(hasher, key) { + hasher.init(); + const { blockSize } = hasher; + const keyBuf = calculateKeyBuffer(hasher, key); + const keyBuffer = new Uint8Array(blockSize); + keyBuffer.set(keyBuf); + const opad = new Uint8Array(blockSize); + for (let i = 0; i < blockSize; i++) { + const v = keyBuffer[i]; + opad[i] = v ^ 92; + keyBuffer[i] = v ^ 54; + } + hasher.update(keyBuffer); + const obj = { + init: () => { + hasher.init(); + hasher.update(keyBuffer); + return obj; + }, + update: (data) => { + hasher.update(data); + return obj; + }, + digest: ((outputType) => { + const uintArr = hasher.digest("binary"); + hasher.init(); + hasher.update(opad); + hasher.update(uintArr); + return hasher.digest(outputType); + }), + save: () => { + throw new Error("save() not supported"); + }, + load: () => { + throw new Error("load() not supported"); + }, + blockSize: hasher.blockSize, + digestSize: hasher.digestSize + }; + return obj; +} +function createHMAC(hash2, key) { + if (!hash2 || !hash2.then) { + throw new Error('Invalid hash function is provided! Usage: createHMAC(createMD5(), "key").'); + } + return hash2.then((hasher) => calculateHmac(hasher, key)); +} +function calculatePBKDF2(digest, salt, iterations, hashLength, outputType) { + return __awaiter(this, void 0, void 0, function* () { + const DK = new Uint8Array(hashLength); + const block1 = new Uint8Array(salt.length + 4); + const block1View = new DataView(block1.buffer); + const saltBuffer = getUInt8Buffer(salt); + const saltUIntBuffer = new Uint8Array(saltBuffer.buffer, saltBuffer.byteOffset, saltBuffer.length); + block1.set(saltUIntBuffer); + let destPos = 0; + const hLen = digest.digestSize; + const l = Math.ceil(hashLength / hLen); + let T = null; + let U = null; + for (let i = 1; i <= l; i++) { + block1View.setUint32(salt.length, i); + digest.init(); + digest.update(block1); + T = digest.digest("binary"); + U = T.slice(); + for (let j = 1; j < iterations; j++) { + digest.init(); + digest.update(U); + U = digest.digest("binary"); + for (let k = 0; k < hLen; k++) { + T[k] ^= U[k]; + } + } + DK.set(T.subarray(0, hashLength - destPos), destPos); + destPos += hLen; + } + if (outputType === "binary") { + return DK; + } + const digestChars = new Uint8Array(hashLength * 2); + return getDigestHex(digestChars, DK, hashLength); + }); +} +const validateOptions$2 = (options) => { + if (!options || typeof options !== "object") { + throw new Error("Invalid options parameter. It requires an object."); + } + if (!options.hashFunction || !options.hashFunction.then) { + throw new Error('Invalid hash function is provided! Usage: pbkdf2("password", "salt", 1000, 32, createSHA1()).'); + } + if (!Number.isInteger(options.iterations) || options.iterations < 1) { + throw new Error("Iterations should be a positive number"); + } + if (!Number.isInteger(options.hashLength) || options.hashLength < 1) { + throw new Error("Hash length should be a positive number"); + } + if (options.outputType === void 0) { + options.outputType = "hex"; + } + if (!["hex", "binary"].includes(options.outputType)) { + throw new Error(`Insupported output type ${options.outputType}. Valid values: ['hex', 'binary']`); + } +}; +function pbkdf2$1(options) { + return __awaiter(this, void 0, void 0, function* () { + validateOptions$2(options); + const hmac2 = yield createHMAC(options.hashFunction, options.password); + return calculatePBKDF2(hmac2, options.salt, options.iterations, options.hashLength, options.outputType); + }); +} +var name$3 = "scrypt"; +var data$3 = "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cyICajYCOCAAIAAoAjwgAiAKakESdyAGc2o2AjwLvxIDFX8Bfg5/AkAgAkUNACAAQQd0IgNBQGoiBEEAKAKACCIFIAMgAmwiBmogAyABbGoiByADaiIIaiEJIAAgAkEHdCIKIAFBB3RqIgtsIQwgACALQYABamwhDSAAQQV0IgtBASALQQFLGyILQWBxIQ4gC0EBcSEPIAdBeGohECAHQXBqIREgB0FoaiESIAdBYGohEyAHQVhqIRQgB0FQaiEVIAdBSGohFiAHQUBqIRcgAa1Cf3whGCAEIAdqIRkgByAAQQh0IhpqIRsgACAKQYABamwhHCALQQRJIR1BACEeQQAhHwNAQQAoAoAIIiAgAyAfbGohIQJAIABFDQBBACEiAkAgHQ0AICAgHmohI0EAIQtBACEiA0AgByALaiIEICMgC2oiJCgCADYCACAEQQRqICRBBGooAgA2AgAgBEEIaiAkQQhqKAIANgIAIARBDGogJEEMaigCADYCACALQRBqIQsgDiAiQQRqIiJHDQALCyAPRQ0AIAcgIkECdCILaiAhIAtqKAIANgIACwJAIAFFDQBBACElIBwhIyAGISYDQCAFISQgACEiAkACQCAADQAgGyAXKQMANwMAIBsgFikDADcDCCAbIBUpAwA3AxAgGyAUKQMANwMYIBsgEykDADcDICAbIBIpAwA3AyggGyARKQMANwMwIBsgECkDADcDOAwBCwNAICQgJmoiCyAkIAxqIgQpAwA3AwAgC0EIaiAEQQhqKQMANwMAIAtBEGogBEEQaikDADcDACALQRhqIARBGGopAwA3AwAgC0EgaiAEQSBqKQMANwMAIAtBKGogBEEoaikDADcDACALQTBqIARBMGopAwA3AwAgC0E4aiAEQThqKQMANwMAIAtBwABqIARBwABqKQMANwMAIAtByABqIARByABqKQMANwMAIAtB0ABqIARB0ABqKQMANwMAIAtB2ABqIARB2ABqKQMANwMAIAtB4ABqIARB4ABqKQMANwMAIAtB6ABqIARB6ABqKQMANwMAIAtB8ABqIARB8ABqKQMANwMAIAtB+ABqIARB+ABqKQMANwMAICRBgAFqISQgIkF/aiIiDQALIAcgCCAbIAAQAiAFISQgACEiA0AgJCAjaiILICQgDWoiBCkDADcDACALQQhqIARBCGopAwA3AwAgC0EQaiAEQRBqKQMANwMAIAtBGGogBEEYaikDADcDACALQSBqIARBIGopAwA3AwAgC0EoaiAEQShqKQMANwMAIAtBMGogBEEwaikDADcDACALQThqIARBOGopAwA3AwAgC0HAAGogBEHAAGopAwA3AwAgC0HIAGogBEHIAGopAwA3AwAgC0HQAGogBEHQAGopAwA3AwAgC0HYAGogBEHYAGopAwA3AwAgC0HgAGogBEHgAGopAwA3AwAgC0HoAGogBEHoAGopAwA3AwAgC0HwAGogBEHwAGopAwA3AwAgC0H4AGogBEH4AGopAwA3AwAgJEGAAWohJCAiQX9qIiINAAsLIAggByAbIAAQAiAjIBpqISMgJiAaaiEmICVBAmoiJSABSQ0AC0EAISUDQAJAAkAgAA0AIBsgFykDADcDACAbIBYpAwA3AwggGyAVKQMANwMQIBsgFCkDADcDGCAbIBMpAwA3AyAgGyASKQMANwMoIBsgESkDADcDMCAbIBApAwA3AzgMAQsgACAKIBkpAgAgGIOnQQd0amwhJiAFISQgACEiA0AgJCAMaiILIAspAwAgJCAmaiIEKQMAhTcDACALQQhqIiMgIykDACAEQQhqKQMAhTcDACALQRBqIiMgIykDACAEQRBqKQMAhTcDACALQRhqIiMgIykDACAEQRhqKQMAhTcDACALQSBqIiMgIykDACAEQSBqKQMAhTcDACALQShqIiMgIykDACAEQShqKQMAhTcDACALQTBqIiMgIykDACAEQTBqKQMAhTcDACALQThqIiMgIykDACAEQThqKQMAhTcDACALQcAAaiIjICMpAwAgBEHAAGopAwCFNwMAIAtByABqIiMgIykDACAEQcgAaikDAIU3AwAgC0HQAGoiIyAjKQMAIARB0ABqKQMAhTcDACALQdgAaiIjICMpAwAgBEHYAGopAwCFNwMAIAtB4ABqIiMgIykDACAEQeAAaikDAIU3AwAgC0HoAGoiIyAjKQMAIARB6ABqKQMAhTcDACALQfAAaiIjICMpAwAgBEHwAGopAwCFNwMAIAtB+ABqIgsgCykDACAEQfgAaikDAIU3AwAgJEGAAWohJCAiQX9qIiINAAsgByAIIBsgABACIAAgCiAJKQIAIBiDp0EHdGpsISYgBSEkIAAhIgNAICQgDWoiCyALKQMAICQgJmoiBCkDAIU3AwAgC0EIaiIjICMpAwAgBEEIaikDAIU3AwAgC0EQaiIjICMpAwAgBEEQaikDAIU3AwAgC0EYaiIjICMpAwAgBEEYaikDAIU3AwAgC0EgaiIjICMpAwAgBEEgaikDAIU3AwAgC0EoaiIjICMpAwAgBEEoaikDAIU3AwAgC0EwaiIjICMpAwAgBEEwaikDAIU3AwAgC0E4aiIjICMpAwAgBEE4aikDAIU3AwAgC0HAAGoiIyAjKQMAIARBwABqKQMAhTcDACALQcgAaiIjICMpAwAgBEHIAGopAwCFNwMAIAtB0ABqIiMgIykDACAEQdAAaikDAIU3AwAgC0HYAGoiIyAjKQMAIARB2ABqKQMAhTcDACALQeAAaiIjICMpAwAgBEHgAGopAwCFNwMAIAtB6ABqIiMgIykDACAEQegAaikDAIU3AwAgC0HwAGoiIyAjKQMAIARB8ABqKQMAhTcDACALQfgAaiILIAspAwAgBEH4AGopAwCFNwMAICRBgAFqISQgIkF/aiIiDQALCyAIIAcgGyAAEAIgJUECaiIlIAFJDQALCwJAIABFDQBBACEiAkAgHQ0AICAgHmohI0EAIQtBACEiA0AgIyALaiIEIAcgC2oiJCgCADYCACAEQQRqICRBBGooAgA2AgAgBEEIaiAkQQhqKAIANgIAIARBDGogJEEMaigCADYCACALQRBqIQsgDiAiQQRqIiJHDQALCyAPRQ0AICEgIkECdCILaiAHIAtqKAIANgIACyAeIANqIR4gH0EBaiIfIAJHDQALCws="; +var hash$3 = "b32721f8"; +var wasmJson$3 = { + name: name$3, + data: data$3, + hash: hash$3 +}; +function scryptInternal(options) { + return __awaiter(this, void 0, void 0, function* () { + const { costFactor, blockSize, parallelism, hashLength } = options; + const SHA256Hasher = createSHA256(); + const blockData = yield pbkdf2$1({ + password: options.password, + salt: options.salt, + iterations: 1, + hashLength: 128 * blockSize * parallelism, + hashFunction: SHA256Hasher, + outputType: "binary" + }); + const scryptInterface = yield WASMInterface(wasmJson$3, 0); + const VSize = 128 * blockSize * costFactor; + const XYSize = 256 * blockSize; + scryptInterface.setMemorySize(blockData.length + VSize + XYSize); + scryptInterface.writeMemory(blockData, 0); + scryptInterface.getExports().scrypt(blockSize, costFactor, parallelism); + const expensiveSalt = scryptInterface.getMemory().subarray(0, 128 * blockSize * parallelism); + const outputData = yield pbkdf2$1({ + password: options.password, + salt: expensiveSalt, + iterations: 1, + hashLength, + hashFunction: SHA256Hasher, + outputType: "binary" + }); + if (options.outputType === "hex") { + const digestChars = new Uint8Array(hashLength * 2); + return getDigestHex(digestChars, outputData, hashLength); + } + return outputData; + }); +} +const isPowerOfTwo = (v) => v && !(v & v - 1); +const validateOptions$1 = (options) => { + if (!options || typeof options !== "object") { + throw new Error("Invalid options parameter. It requires an object."); + } + if (!Number.isInteger(options.blockSize) || options.blockSize < 1) { + throw new Error("Block size should be a positive number"); + } + if (!Number.isInteger(options.costFactor) || options.costFactor < 2 || !isPowerOfTwo(options.costFactor)) { + throw new Error("Cost factor should be a power of 2, greater than 1"); + } + if (!Number.isInteger(options.parallelism) || options.parallelism < 1) { + throw new Error("Parallelism should be a positive number"); + } + if (!Number.isInteger(options.hashLength) || options.hashLength < 1) { + throw new Error("Hash length should be a positive number."); + } + if (options.outputType === void 0) { + options.outputType = "hex"; + } + if (!["hex", "binary"].includes(options.outputType)) { + throw new Error(`Insupported output type ${options.outputType}. Valid values: ['hex', 'binary']`); + } +}; +function scrypt$1(options) { + return __awaiter(this, void 0, void 0, function* () { + validateOptions$1(options); + return scryptInternal(options); + }); +} +new Mutex(); +new Mutex(); +async function deriveKey$3(parameters, salt, password) { + const { + cost, + keyLength = 32, + memoryCost = 16384, + // in KB + parallelism = 1 + } = parameters; + return { + parameters: { + memoryCost, + parallelism + }, + derivedKey: await argon2id$1({ + password, + salt, + parallelism, + iterations: cost, + memorySize: memoryCost, + hashLength: keyLength, + outputType: "binary" + }) + }; +} +const argon2id = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + deriveKey: deriveKey$3 +}, Symbol.toStringTag, { value: "Module" })); +function getDigest(algorithm) { + switch (algorithm) { + case "PBKDF2/SHA-512": + return "SHA-512"; + case "PBKDF2/SHA-384": + return "SHA-384"; + case "PBKDF2/SHA-256": + default: + return "SHA-256"; + } +} +async function deriveKey$2(parameters, salt, password) { + const { algorithm, cost, keyLength = 32 } = parameters; + const passwordKey = await crypto.subtle.importKey( + "raw", + password, + { name: "PBKDF2" }, + false, + ["deriveKey"] + ); + const derivedKey = await crypto.subtle.deriveKey( + { + name: "PBKDF2", + salt, + iterations: cost, + hash: getDigest(algorithm) + }, + passwordKey, + { name: "AES-GCM", length: keyLength * 8 }, + true, + ["encrypt"] + ); + return { + derivedKey: new Uint8Array(await crypto.subtle.exportKey("raw", derivedKey)) + }; +} +const pbkdf2 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + deriveKey: deriveKey$2 +}, Symbol.toStringTag, { value: "Module" })); +async function deriveKey$1(parameters, salt, password) { + const { cost, keyLength = 32, memoryCost = 8, parallelism = 1 } = parameters; + return { + parameters: { + memoryCost, + parallelism + }, + derivedKey: await scrypt$1({ + password, + salt, + blockSize: memoryCost, + costFactor: cost, + hashLength: keyLength, + parallelism, + outputType: "binary" + }) + }; +} +const scrypt = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + deriveKey: deriveKey$1 +}, Symbol.toStringTag, { value: "Module" })); +function bufferStartsWith(buffer, prefix) { + if (prefix.length > buffer.length) { + return false; + } + for (let i = 0; i < prefix.length; i++) { + if (buffer[i] !== prefix[i]) { + return false; + } + } + return true; +} +function bufferToHex(buffer) { + return Array.from(new Uint8Array(buffer)).map((b) => b.toString(16).padStart(2, "0")).join(""); +} +function canonicalJSON(obj) { + return JSON.stringify(sortKeys(obj)); +} +function concatBuffers(a, b) { + const out = new Uint8Array(a.length + b.length); + out.set(a, 0); + out.set(b, a.length); + return out; +} +function hexToBuffer(hex) { + if (hex.length % 2 !== 0) { + throw new Error(`Hex string must have an even length. Got: ${hex}`); + } + const buffer = new ArrayBuffer(hex.length / 2); + const view = new DataView(buffer); + for (let i = 0; i < hex.length; i += 2) { + const byteString = hex.substring(i, i + 2); + const byteValue = parseInt(byteString, 16); + view.setUint8(i / 2, byteValue); + } + return new Uint8Array(buffer); +} +function constantTimeEqual(a, b) { + if (a.length !== b.length) { + return false; + } + let result = 0; + for (let i = 0; i < a.length; i++) { + result |= a.charCodeAt(i) ^ b.charCodeAt(i); + } + return result === 0; +} +async function delay(ms) { + await new Promise((resolve) => setTimeout(resolve, ms)); +} +async function hash(algorithm, data) { + return new Uint8Array( + await crypto.subtle.digest( + algorithm.toUpperCase(), + typeof data === "string" ? new TextEncoder().encode(data) : new Uint8Array(data) + ) + ); +} +async function hmac(algorithm, data, keyStr) { + const key = await crypto.subtle.importKey( + "raw", + new TextEncoder().encode(keyStr), + { + name: "HMAC", + hash: { name: algorithm } + }, + false, + ["sign", "verify"] + ); + const signature = await crypto.subtle.sign( + "HMAC", + key, + typeof data === "string" ? new TextEncoder().encode(data) : data + ); + return new Uint8Array(signature); +} +function sortKeys(obj) { + if (typeof obj !== "object" || obj === null || Array.isArray(obj)) { + return obj; + } + return Object.keys(obj).sort().reduce((acc, key) => { + const value = obj[key]; + if (value !== void 0) { + acc[key] = sortKeys(value); + } + return acc; + }, {}); +} +function timeDuration(start) { + return Math.floor((performance.now() - start) * 10) / 10; +} +async function deriveKey(parameters, salt, password) { + const { algorithm, keyLength = 32 } = parameters; + const iterations = Math.max(1, parameters.cost); + let data = void 0; + let derivedKey = void 0; + for (let i = 0; i < iterations; i++) { + if (i === 0) { + data = concatBuffers(salt, password); + } else { + data = derivedKey; + } + derivedKey = new Uint8Array( + (await crypto.subtle.digest(algorithm, data)).slice(0, keyLength) + ); + } + return { + parameters: {}, + derivedKey + }; +} +const sha = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + deriveKey +}, Symbol.toStringTag, { value: "Module" })); +var HmacAlgorithm = /* @__PURE__ */ ((HmacAlgorithm2) => { + HmacAlgorithm2["SHA_256"] = "SHA-256"; + HmacAlgorithm2["SHA_384"] = "SHA-384"; + HmacAlgorithm2["SHA_512"] = "SHA-512"; + return HmacAlgorithm2; +})(HmacAlgorithm || {}); +class PasswordBuffer { + constructor(nonce, mode = "uint32") { + this.nonce = nonce; + this.mode = mode; + this.buffer = new Uint8Array(this.nonce.length + this.COUNTER_BYTES); + this.buffer.set(this.nonce, 0); + this.dataView = new DataView(this.buffer.buffer); + } + nonce; + mode; + COUNTER_BYTES = 4; + buffer; + dataView; + encoder = new TextEncoder(); + /** + * Appends the counter to the nonce buffer. + * In 'string' mode, encodes the counter as a UTF-8 string. + * In 'uint32' mode, writes the counter as a big-endian 32-bit integer. + */ + setCounter(n) { + if (this.mode === "string") { + return concatBuffers(this.nonce, this.encoder.encode(n.toString())); + } + this.dataView.setUint32(this.nonce.length, n, false); + return this.buffer; + } +} +async function createChallenge(options) { + const { + algorithm, + counter, + counterMode = "uint32", + cost, + deriveKey: deriveKey2, + data, + expiresAt, + hmacAlgorithm = HmacAlgorithm.SHA_256, + hmacKeySignatureSecret, + hmacSignatureSecret, + keyLength = 32, + keyPrefix = "00", + keyPrefixLength = keyLength / 2, + memoryCost, + parallelism + } = options; + const parameters = { + algorithm, + nonce: bufferToHex(crypto.getRandomValues(new Uint8Array(16))), + salt: bufferToHex(crypto.getRandomValues(new Uint8Array(16))), + cost, + keyLength, + memoryCost, + parallelism, + keyPrefix, + expiresAt: expiresAt instanceof Date ? Math.floor(expiresAt.getTime() / 1e3) : expiresAt, + data + }; + let deriveKeyResult = null; + if (counter !== void 0) { + const nonceBuf = hexToBuffer(parameters.nonce); + deriveKeyResult = await deriveKey2( + parameters, + hexToBuffer(parameters.salt), + new PasswordBuffer(nonceBuf, counterMode).setCounter(counter) + ); + if (deriveKeyResult.parameters) { + Object.assign(parameters, deriveKeyResult.parameters); + } + parameters.keyPrefix = bufferToHex(deriveKeyResult.derivedKey.slice(0, keyPrefixLength)); + } + if (!hmacSignatureSecret) { + return { + parameters: sortKeys(parameters) + }; + } + return signChallenge( + hmacAlgorithm, + parameters, + deriveKeyResult?.derivedKey, + hmacSignatureSecret, + hmacKeySignatureSecret + ); +} +async function solveChallenge(options) { + const { + challenge, + controller, + counterMode = "uint32", + counterStart = 0, + counterStep = 1, + deriveKey: deriveKey2, + timeout = 9e4 + } = options; + const { nonce, keyPrefix, salt } = challenge.parameters; + const nonceBuf = hexToBuffer(nonce); + const saltBuf = hexToBuffer(salt); + const keyPrefixBuf = keyPrefix.length % 2 === 0 ? hexToBuffer(keyPrefix) : null; + const password = new PasswordBuffer(nonceBuf, counterMode); + const start = performance.now(); + let counter = counterStart; + let iterations = 0; + let derivedKeyHex = ""; + let lastYield = start; + while (true) { + if (controller?.signal.aborted || timeout && iterations % 10 === 0 && performance.now() - start > timeout) { + return null; + } + const { derivedKey } = await deriveKey2( + challenge.parameters, + saltBuf, + password.setCounter(counter) + ); + if (iterations % 10 === 0 && performance.now() - lastYield > 200) { + await delay(0); + lastYield = performance.now(); + } + if (keyPrefixBuf ? bufferStartsWith(derivedKey, keyPrefixBuf) : bufferToHex(derivedKey).startsWith(keyPrefix)) { + derivedKeyHex = bufferToHex(derivedKey); + break; + } + counter = counter + counterStep; + iterations = iterations + 1; + } + return { + counter, + derivedKey: derivedKeyHex, + time: timeDuration(start) + }; +} +async function solveChallengeWorkers(options) { + const { + challenge, + concurrency = navigator.hardwareConcurrency, + controller = new AbortController(), + createWorker, + onOutOfMemory = (c) => c > 1 ? Math.floor(c / 2) : 0, + counterMode, + timeout = 9e4 + } = options; + const workersConcurrency = Math.min(16, Math.max(1, concurrency)); + const workersInstances = []; + const terminate = () => { + for (const worker of workersInstances) { + worker.terminate(); + } + }; + for (let i = 0; i < workersConcurrency; i++) { + workersInstances.push(await createWorker(challenge.parameters.algorithm)); + } + let solution = null; + try { + solution = await Promise.race( + workersInstances.map((worker, i) => { + controller.signal.addEventListener("abort", () => { + worker.postMessage({ type: "abort" }); + }); + return new Promise((resolve, reject) => { + worker.addEventListener("error", (err) => { + reject(err); + }); + worker.addEventListener("message", (message) => { + if (message.data) { + for (const w of workersInstances) { + if (w !== worker) { + w.postMessage({ type: "abort" }); + } + } + if (message.data.error) { + return reject(new Error(message.data.error)); + } + } + resolve(message.data); + }); + worker.postMessage({ + challenge, + counterMode, + counterStart: i, + counterStep: workersConcurrency, + timeout, + type: "work" + }); + }); + }) + ); + } catch (err) { + const isOOM = err instanceof Error && !!err?.message?.includes("Out of memory"); + if (isOOM) { + if (onOutOfMemory) { + terminate(); + const retryConcurrency = onOutOfMemory(workersConcurrency); + if (retryConcurrency) { + return solveChallengeWorkers({ + ...options, + challenge, + controller, + concurrency: retryConcurrency, + createWorker + }); + } + } + } + throw err; + } finally { + terminate(); + } + if (controller.signal.aborted) { + return null; + } + return solution || null; +} +async function signChallenge(algorithm, parameters, derivedKey, hmacSignatureSecret, hmacKeySignatureSecret) { + if (derivedKey && hmacKeySignatureSecret) { + parameters.keySignature = bufferToHex( + await hmac(algorithm, derivedKey, hmacKeySignatureSecret) + ); + } + parameters = sortKeys(parameters); + return { + parameters, + signature: bufferToHex(await hmac(algorithm, JSON.stringify(parameters), hmacSignatureSecret)) + }; +} +async function verifySolution(options) { + const { + challenge, + counterMode, + deriveKey: deriveKey2, + hmacAlgorithm = HmacAlgorithm.SHA_256, + hmacKeySignatureSecret, + hmacSignatureSecret, + solution + } = options; + const start = performance.now(); + if (challenge.parameters.expiresAt && challenge.parameters.expiresAt < Date.now() / 1e3) { + return { + expired: true, + invalidSignature: null, + invalidSolution: null, + time: timeDuration(start), + verified: false + }; + } + if (!challenge.signature) { + return { + expired: false, + invalidSignature: true, + invalidSolution: null, + time: timeDuration(start), + verified: false + }; + } + const signatureCheck = bufferToHex( + await hmac(hmacAlgorithm, canonicalJSON(challenge.parameters), hmacSignatureSecret) + ); + const signatureVerified = constantTimeEqual(challenge.signature, signatureCheck); + if (!signatureVerified) { + return { + expired: false, + invalidSignature: true, + invalidSolution: null, + time: timeDuration(start), + verified: false + }; + } + if (challenge.parameters.keySignature && hmacKeySignatureSecret) { + const derivedKeySignatureCheck = bufferToHex( + await hmac(hmacAlgorithm, hexToBuffer(solution.derivedKey), hmacKeySignatureSecret) + ); + const derivedKeySignatureValid = constantTimeEqual( + challenge.parameters.keySignature, + derivedKeySignatureCheck + ); + return { + expired: false, + invalidSignature: false, + invalidSolution: !derivedKeySignatureValid, + time: timeDuration(start), + verified: derivedKeySignatureValid + }; + } + const nonceBuf = hexToBuffer(challenge.parameters.nonce); + const saltBuf = hexToBuffer(challenge.parameters.salt); + const { derivedKey } = await deriveKey2( + challenge.parameters, + saltBuf, + new PasswordBuffer(nonceBuf, counterMode).setCounter(solution.counter) + ); + const derivedKeyHex = bufferToHex(derivedKey); + const invalidSolution = !constantTimeEqual(derivedKeyHex, solution.derivedKey); + return { + expired: false, + invalidSignature: false, + invalidSolution, + time: timeDuration(start), + verified: !invalidSolution && signatureVerified + }; +} +function parseVerificationData(data, convertToArray = ["fields", "reasons"]) { + const verificationData = {}; + try { + const params = new URLSearchParams(data); + for (const [key, value] of params.entries()) { + if (value === "true" || value === "false") { + verificationData[key] = value === "true"; + } else if (value !== null && /^\d+?$/.test(value)) { + verificationData[key] = parseInt(value, 10); + } else if (value !== null && /^\d+\.\d+?$/.test(value)) { + verificationData[key] = parseFloat(value); + } else if (value !== null) { + verificationData[key] = convertToArray.includes(key) ? value.trim().split(",") : value.trim(); + } + } + } catch { + return null; + } + return verificationData; +} +async function verifyFieldsHash(options) { + const { algorithm = "SHA-256", formData, fields, fieldsHash } = options; + const data = formData instanceof FormData ? Object.fromEntries(formData) : formData; + const lines = []; + for (const field of fields) { + lines.push(String(data[field] || "")); + } + return bufferToHex(await hash(algorithm, lines.join("\n"))) === fieldsHash; +} +async function verifyServerSignature(options) { + const { hmacSecret, payload } = options; + const start = performance.now(); + const signature = bufferToHex( + await hmac( + payload.algorithm, + await hash(payload.algorithm, payload.verificationData), + hmacSecret + ) + ); + const verificationData = parseVerificationData(payload.verificationData); + const expired = !!verificationData && !!verificationData.expire && verificationData.expire < Math.floor(Date.now() / 1e3); + const invalidSignature = !constantTimeEqual(payload.signature, signature); + const invalidSolution = !verificationData || verificationData.verified !== true || payload.verified !== true; + const verified = !expired && !invalidSignature && !invalidSolution; + return { + expired, + invalidSignature, + invalidSolution, + time: timeDuration(start), + verificationData, + verified + }; +} +export { + argon2id, + createChallenge, + parseVerificationData, + pbkdf2, + scrypt, + sha, + solveChallenge, + solveChallengeWorkers, + verifyFieldsHash, + verifyServerSignature, + verifySolution +}; diff --git a/frontend/node_modules/altcha/dist/lib/index.min.js b/frontend/node_modules/altcha/dist/lib/index.min.js new file mode 100644 index 0000000..341b183 --- /dev/null +++ b/frontend/node_modules/altcha/dist/lib/index.min.js @@ -0,0 +1 @@ +function A(A,I,g,i){return new(g||(g=Promise))(function(I,B){function Q(A){try{e(i.next(A))}catch(A){B(A)}}function C(A){try{e(i.throw(A))}catch(A){B(A)}}function e(A){var i;A.done?I(A.value):(i=A.value,i instanceof g?i:new g(function(A){A(i)})).then(Q,C)}e((i=i.apply(A,[])).next())})}"function"==typeof SuppressedError&&SuppressedError;class I{constructor(){this.mutex=Promise.resolve()}lock(){let A=()=>{};return this.mutex=this.mutex.then(()=>new Promise(A)),new Promise(I=>{A=I})}dispatch(I){return A(this,0,void 0,function*(){const A=yield this.lock();try{return yield Promise.resolve(I())}finally{A()}})}}var g;const i="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:global,B=null!==(g=i.Buffer)&&void 0!==g?g:null,Q=i.TextEncoder?new i.TextEncoder:null;function C(A,I){return(15&A)+(A>>6|A>>3&8)<<4|(15&I)+(I>>6|I>>3&8)}function e(A,I){const g=I.length>>1;for(let i=0;i>>4;A[i++]=g>9?g+E:g+t,g=15&I[B],A[i++]=g>9?g+E:g+t}return String.fromCharCode.apply(null,A)}const n=null!==B?A=>{if("string"==typeof A){const I=B.from(A,"utf8");return new Uint8Array(I.buffer,I.byteOffset,I.length)}if(B.isBuffer(A))return new Uint8Array(A.buffer,A.byteOffset,A.length);if(ArrayBuffer.isView(A))return new Uint8Array(A.buffer,A.byteOffset,A.byteLength);throw new Error("Invalid data type!")}:A=>{if("string"==typeof A)return Q.encode(A);if(ArrayBuffer.isView(A))return new Uint8Array(A.buffer,A.byteOffset,A.byteLength);throw new Error("Invalid data type!")},a="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",c=new Uint8Array(256);for(let A=0;A<64;A++)c[a.charCodeAt(A)]=A;function r(A,I=!0){const g=A.length,i=g%3,B=[],Q=g-i;for(let I=0;I>18&63)+a.charAt(g>>12&63)+a.charAt(g>>6&63)+a.charAt(63&g);B.push(i)}if(1===i){const i=A[g-1],Q=a.charAt(i>>2),C=a.charAt(i<<4&63);B.push(`${Q}${C}`),I&&B.push("==")}else if(2===i){const i=(A[g-2]<<8)+A[g-1],Q=a.charAt(i>>10),C=a.charAt(i>>4&63),e=a.charAt(i<<2&63);B.push(`${Q}${C}${e}`),I&&B.push("=")}return B.join("")}function h(A){const I=function(A){let I=Math.floor(.75*A.length);const g=A.length;return"="===A[g-1]&&(I-=1,"="===A[g-2]&&(I-=1)),I}(A),g=A.length,i=new Uint8Array(I);let B=0;for(let I=0;I>4,B+=1,i[B]=(15&Q)<<4|C>>2,B+=1,i[B]=(3&C)<<6|63&e,B+=1}return i}const w=16384,D=new I,d=new Map;function y(I,g){return A(this,0,void 0,function*(){let i=null,B=null,Q=!1;if("undefined"==typeof WebAssembly)throw new Error("WebAssembly is not supported in this environment!");const E=()=>new DataView(i.exports.memory.buffer).getUint32(i.exports.STATE_SIZE,!0),t=D.dispatch(()=>A(this,0,void 0,function*(){if(!d.has(I.name)){const A=h(I.data),g=WebAssembly.compile(A);d.set(I.name,g)}const A=yield d.get(I.name);i=yield WebAssembly.instantiate(A,{})})),a=(A=null)=>{Q=!0,i.exports.Hash_Init(A)},c=A=>{if(!Q)throw new Error("update() called before init()");(A=>{let I=0;for(;I{if(!Q)throw new Error("digest() called before init()");return Q=!1,i.exports.Hash_Final(I),"binary"===A?B.slice(0,g):o(r,B,g)},F=A=>"string"==typeof A?A.length<4096:A.byteLength!0;break;case"blake2b":case"blake2s":k=(A,I)=>I<=512&&F(A);break;case"blake3":k=(A,I)=>0===I&&F(A);break;case"xxhash64":case"xxhash3":case"xxhash128":case"crc64":k=()=>!1}return yield(()=>A(this,0,void 0,function*(){i||(yield t);const A=i.exports.Hash_GetBuffer(),I=i.exports.memory.buffer;B=new Uint8Array(I,A,w)}))(),{getMemory:()=>B,writeMemory:(A,I=0)=>{B.set(A,I)},getExports:()=>i.exports,setMemorySize:A=>{i.exports.Hash_SetMemorySize(A);const I=i.exports.Hash_GetBuffer(),g=i.exports.memory.buffer;B=new Uint8Array(g,I,A)},init:a,update:c,digest:y,save:()=>{if(!Q)throw new Error("save() can only be called after init() and before digest()");const A=i.exports.Hash_GetState(),g=E(),B=i.exports.memory.buffer,C=new Uint8Array(B,A,g),t=new Uint8Array(4+g);return e(t,I.hash),t.set(C,4),t},load:A=>{if(!(A instanceof Uint8Array))throw new Error("load() expects an Uint8Array generated by save()");const g=i.exports.Hash_GetState(),B=E(),e=4+B,t=i.exports.memory.buffer;if(A.length!==e)throw new Error(`Bad state length (expected ${e} bytes, got ${A.length})`);if(!function(A,I){if(A.length!==2*I.length)return!1;for(let g=0;g{if(!k(A,I))return a(I),c(A),y("hex",Q);const C=n(A);return B.set(C),i.exports.Hash_Calculate(C.length,I,Q),o(r,B,g)},hashLength:g}})}new I;var F={name:"argon2",data:"AGFzbQEAAAABKQVgAX8Bf2AAAX9gEH9/f39/f39/f39/f39/f38AYAR/f39/AGACf38AAwYFAAECAwQFBgEBAoCAAgYIAX8BQZCoBAsHQQQGbWVtb3J5AgASSGFzaF9TZXRNZW1vcnlTaXplAAAOSGFzaF9HZXRCdWZmZXIAAQ5IYXNoX0NhbGN1bGF0ZQAECvEyBVgBAn9BACEBAkAgAEEAKAKICCICRg0AAkAgACACayIAQRB2IABBgIB8cSAASWoiAEAAQX9HDQBB/wHADwtBACEBQQBBACkDiAggAEEQdK18NwOICAsgAcALcAECfwJAQQAoAoAIIgANAEEAPwBBEHQiADYCgAhBACgCiAgiAUGAgCBGDQACQEGAgCAgAWsiAEEQdiAAQYCAfHEgAElqIgBAAEF/Rw0AQQAPC0EAQQApA4gIIABBEHStfDcDiAhBACgCgAghAAsgAAvcDgECfiAAIAQpAwAiECAAKQMAIhF8IBFCAYZC/v///x+DIBBC/////w+DfnwiEDcDACAMIBAgDCkDAIVCIIkiEDcDACAIIBAgCCkDACIRfCARQgGGQv7///8fgyAQQv////8Pg358IhA3AwAgBCAQIAQpAwCFQiiJIhA3AwAgACAQIAApAwAiEXwgEEL/////D4MgEUIBhkL+////H4N+fCIQNwMAIAwgECAMKQMAhUIwiSIQNwMAIAggECAIKQMAIhF8IBBC/////w+DIBFCAYZC/v///x+DfnwiEDcDACAEIBAgBCkDAIVCAYk3AwAgASAFKQMAIhAgASkDACIRfCARQgGGQv7///8fgyAQQv////8Pg358IhA3AwAgDSAQIA0pAwCFQiCJIhA3AwAgCSAQIAkpAwAiEXwgEUIBhkL+////H4MgEEL/////D4N+fCIQNwMAIAUgECAFKQMAhUIoiSIQNwMAIAEgECABKQMAIhF8IBBC/////w+DIBFCAYZC/v///x+DfnwiEDcDACANIBAgDSkDAIVCMIkiEDcDACAJIBAgCSkDACIRfCAQQv////8PgyARQgGGQv7///8fg358IhA3AwAgBSAQIAUpAwCFQgGJNwMAIAIgBikDACIQIAIpAwAiEXwgEUIBhkL+////H4MgEEL/////D4N+fCIQNwMAIA4gECAOKQMAhUIgiSIQNwMAIAogECAKKQMAIhF8IBFCAYZC/v///x+DIBBC/////w+DfnwiEDcDACAGIBAgBikDAIVCKIkiEDcDACACIBAgAikDACIRfCAQQv////8PgyARQgGGQv7///8fg358IhA3AwAgDiAQIA4pAwCFQjCJIhA3AwAgCiAQIAopAwAiEXwgEEL/////D4MgEUIBhkL+////H4N+fCIQNwMAIAYgECAGKQMAhUIBiTcDACADIAcpAwAiECADKQMAIhF8IBFCAYZC/v///x+DIBBC/////w+DfnwiEDcDACAPIBAgDykDAIVCIIkiEDcDACALIBAgCykDACIRfCARQgGGQv7///8fgyAQQv////8Pg358IhA3AwAgByAQIAcpAwCFQiiJIhA3AwAgAyAQIAMpAwAiEXwgEEL/////D4MgEUIBhkL+////H4N+fCIQNwMAIA8gECAPKQMAhUIwiSIQNwMAIAsgECALKQMAIhF8IBBC/////w+DIBFCAYZC/v///x+DfnwiEDcDACAHIBAgBykDAIVCAYk3AwAgACAFKQMAIhAgACkDACIRfCARQgGGQv7///8fgyAQQv////8Pg358IhA3AwAgDyAQIA8pAwCFQiCJIhA3AwAgCiAQIAopAwAiEXwgEUIBhkL+////H4MgEEL/////D4N+fCIQNwMAIAUgECAFKQMAhUIoiSIQNwMAIAAgECAAKQMAIhF8IBBC/////w+DIBFCAYZC/v///x+DfnwiEDcDACAPIBAgDykDAIVCMIkiEDcDACAKIBAgCikDACIRfCAQQv////8PgyARQgGGQv7///8fg358IhA3AwAgBSAQIAUpAwCFQgGJNwMAIAEgBikDACIQIAEpAwAiEXwgEUIBhkL+////H4MgEEL/////D4N+fCIQNwMAIAwgECAMKQMAhUIgiSIQNwMAIAsgECALKQMAIhF8IBFCAYZC/v///x+DIBBC/////w+DfnwiEDcDACAGIBAgBikDAIVCKIkiEDcDACABIBAgASkDACIRfCAQQv////8PgyARQgGGQv7///8fg358IhA3AwAgDCAQIAwpAwCFQjCJIhA3AwAgCyAQIAspAwAiEXwgEEL/////D4MgEUIBhkL+////H4N+fCIQNwMAIAYgECAGKQMAhUIBiTcDACACIAcpAwAiECACKQMAIhF8IBFCAYZC/v///x+DIBBC/////w+DfnwiEDcDACANIBAgDSkDAIVCIIkiEDcDACAIIBAgCCkDACIRfCARQgGGQv7///8fgyAQQv////8Pg358IhA3AwAgByAQIAcpAwCFQiiJIhA3AwAgAiAQIAIpAwAiEXwgEEL/////D4MgEUIBhkL+////H4N+fCIQNwMAIA0gECANKQMAhUIwiSIQNwMAIAggECAIKQMAIhF8IBBC/////w+DIBFCAYZC/v///x+DfnwiEDcDACAHIBAgBykDAIVCAYk3AwAgAyAEKQMAIhAgAykDACIRfCARQgGGQv7///8fgyAQQv////8Pg358IhA3AwAgDiAQIA4pAwCFQiCJIhA3AwAgCSAQIAkpAwAiEXwgEUIBhkL+////H4MgEEL/////D4N+fCIQNwMAIAQgECAEKQMAhUIoiSIQNwMAIAMgECADKQMAIhF8IBBC/////w+DIBFCAYZC/v///x+DfnwiEDcDACAOIBAgDikDAIVCMIkiEDcDACAJIBAgCSkDACIRfCAQQv////8PgyARQgGGQv7///8fg358IhA3AwAgBCAQIAQpAwCFQgGJNwMAC98aAQN/QQAhBEEAIAIpAwAgASkDAIU3A5AIQQAgAikDCCABKQMIhTcDmAhBACACKQMQIAEpAxCFNwOgCEEAIAIpAxggASkDGIU3A6gIQQAgAikDICABKQMghTcDsAhBACACKQMoIAEpAyiFNwO4CEEAIAIpAzAgASkDMIU3A8AIQQAgAikDOCABKQM4hTcDyAhBACACKQNAIAEpA0CFNwPQCEEAIAIpA0ggASkDSIU3A9gIQQAgAikDUCABKQNQhTcD4AhBACACKQNYIAEpA1iFNwPoCEEAIAIpA2AgASkDYIU3A/AIQQAgAikDaCABKQNohTcD+AhBACACKQNwIAEpA3CFNwOACUEAIAIpA3ggASkDeIU3A4gJQQAgAikDgAEgASkDgAGFNwOQCUEAIAIpA4gBIAEpA4gBhTcDmAlBACACKQOQASABKQOQAYU3A6AJQQAgAikDmAEgASkDmAGFNwOoCUEAIAIpA6ABIAEpA6ABhTcDsAlBACACKQOoASABKQOoAYU3A7gJQQAgAikDsAEgASkDsAGFNwPACUEAIAIpA7gBIAEpA7gBhTcDyAlBACACKQPAASABKQPAAYU3A9AJQQAgAikDyAEgASkD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",hash:"e4cdc523"},k={name:"blake2b",data:"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",hash:"c6f286e6"};function s(A){return!Number.isInteger(A)||A<8||A>512||A%8!=0?new Error("Invalid variant! Valid values: 8, 16, ..., 512"):null}function p(A=512,I=null){if(s(A))return Promise.reject(s(A));let g=null,i=A;if(null!==I){if(g=n(I),g.length>64)return Promise.reject(new Error("Max key length is 64 bytes"));B=A,Q=g.length,i=B|Q<<16}var B,Q;const C=A/8;return y(k,C).then(A=>{i>512&&A.writeMemory(g),A.init(i);const I={init:i>512?()=>(A.writeMemory(g),A.init(i),I):()=>(A.init(i),I),update:g=>(A.update(g),I),digest:I=>A.digest(I),save:()=>A.save(),load:g=>(A.load(g),I),blockSize:128,digestSize:C};return I})}new I;const f=new DataView(new ArrayBuffer(4));function S(A){return f.setInt32(0,A,!0),new Uint8Array(f.buffer)}function N(I,g,i){return A(this,0,void 0,function*(){if(i<=64){const A=yield p(8*i);return A.update(S(i)),A.update(g),A.digest("binary")}const A=Math.ceil(i/32)-2,B=new Uint8Array(i);I.init(),I.update(S(i)),I.update(g);let Q=I.digest("binary");B.set(Q.subarray(0,32),0);for(let g=1;g{var I;if(!A||"object"!=typeof A)throw new Error("Invalid options parameter. It requires an object.");if(!A.password)throw new Error("Password must be specified");if(A.password=n(A.password),A.password.length<1)throw new Error("Password must be specified");if(!A.salt)throw new Error("Salt must be specified");if(A.salt=n(A.salt),A.salt.length<8)throw new Error("Salt should be at least 8 bytes long");if(A.secret=n(null!==(I=A.secret)&&void 0!==I?I:""),!Number.isInteger(A.iterations)||A.iterations<1)throw new Error("Iterations should be a positive number");if(!Number.isInteger(A.parallelism)||A.parallelism<1)throw new Error("Parallelism should be a positive number");if(!Number.isInteger(A.hashLength)||A.hashLength<4)throw new Error("Hash length should be at least 4 bytes.");if(!Number.isInteger(A.memorySize))throw new Error("Memory size should be specified.");if(A.memorySize<8*A.parallelism)throw new Error("Memory size should be at least 8 * parallelism.");if(void 0===A.outputType&&(A.outputType="hex"),!["hex","binary","encoded"].includes(A.outputType))throw new Error(`Insupported output type ${A.outputType}. Valid values: ['hex', 'binary', 'encoded']`)})(I),G(Object.assign(Object.assign({},I),{hashType:"id"}))})}new I,new I,new I,new I,new I,new I,new I,new I,new I;var l={name:"sha256",data:"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c2pBx6KerX1qIhkgASADcyACcSABIANxcyABQR53IAFBE3dzIAFBCndzaiAaaiICaiIJIBMgEnNxIBJzaiAJQRp3IAlBFXdzIAlBB3dzakHRxqk2aiIaIAIgAXMgA3EgAiABcXMgAkEedyACQRN3cyACQQp3c2ogGGoiA2oiESAJIBNzcSATc2ogEUEadyARQRV3cyARQQd3c2pB59KkoQFqIhggAyACcyABcSADIAJxcyADQR53IANBE3dzIANBCndzaiAUaiIBaiISIBEgCXNxIAlzaiASQRp3IBJBFXdzIBJBB3dzakGFldy9AmoiFCABIANzIAJxIAEgA3FzIAFBHncgAUETd3MgAUEKd3NqIBdqIgJqIhMgI2ogJiASaiAiIBFqICUgCWogEyASIBFzcSARc2ogE0EadyATQRV3cyATQQd3c2pBuMLs8AJqIhcgAiABcyADcSACIAFxcyACQR53IAJBE3dzIAJBCndzaiAZaiIDaiIJIBMgEnNxIBJzaiAJQRp3IAlBFXdzIAlBB3dzakH827HpBGoiGSADIAJzIAFxIAMgAnFzIANBHncgA0ETd3MgA0EKd3NqIBpqIgFqIhEgCSATc3EgE3NqIBFBGncgEUEVd3MgEUEHd3NqQZOa4JkFaiIaIAEgA3MgAnEgASADcXMgAUEedyABQRN3cyABQQp3c2ogGGoiAmoiEiARIAlzcSAJc2ogEkEadyASQRV3cyASQQd3c2pB1OapqAZqIhggAiABcyADcSACIAFxcyACQR53IAJBE3dzIAJBCndzaiAUaiIDaiITaiAoIBJqICQgEWogJyAJaiATIBIgEXNxIBFzaiATQRp3IBNBFXdzIBNBB3dzakG7laizB2oiFCADIAJzIAFxIAMgAnFzIANBHncgA0ETd3MgA0EKd3NqIBdqIgFqIgkgEyASc3EgEnNqIAlBGncgCUEVd3MgCUEHd3NqQa6Si454aiIXIAEgA3MgAnEgASADcXMgAUEedyABQRN3cyABQQp3c2ogGWoiAmoiESAJIBNzcSATc2ogEUEadyARQRV3cyARQQd3c2pBhdnIk3lqIhkgAiABcyADcSACIAFxcyACQR53IAJBE3dzIAJBCndzaiAaaiIDaiISIBEgCXNxIAlzaiASQRp3IBJBFXdzIBJBB3dzakGh0f+VemoiGiADIAJz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",hash:"8c18dd94"};function U(A,I){A.init();const{blockSize:g}=A,i=function(A,I){const{blockSize:g}=A,i=n(I);if(i.length>g){A.update(i);const I=A.digest("binary");return A.init(),I}return new Uint8Array(i.buffer,i.byteOffset,i.length)}(A,I),B=new Uint8Array(g);B.set(i);const Q=new Uint8Array(g);for(let A=0;A(A.init(),A.update(B),C),update:I=>(A.update(I),C),digest:I=>{const g=A.digest("binary");return A.init(),A.update(Q),A.update(g),A.digest(I)},save:()=>{throw new Error("save() not supported")},load:()=>{throw new Error("load() not supported")},blockSize:A.blockSize,digestSize:A.digestSize};return C}new I,new I,new I,new I,new I,new I,new I,new I,new I;function J(I){return A(this,0,void 0,function*(){(A=>{if(!A||"object"!=typeof A)throw new Error("Invalid options parameter. It requires an object.");if(!A.hashFunction||!A.hashFunction.then)throw new Error('Invalid hash function is provided! Usage: pbkdf2("password", "salt", 1000, 32, createSHA1()).');if(!Number.isInteger(A.iterations)||A.iterations<1)throw new Error("Iterations should be a positive number");if(!Number.isInteger(A.hashLength)||A.hashLength<1)throw new Error("Hash length should be a positive number");if(void 0===A.outputType&&(A.outputType="hex"),!["hex","binary"].includes(A.outputType))throw new Error(`Insupported output type ${A.outputType}. Valid values: ['hex', 'binary']`)})(I);return function(I,g,i,B,Q){return A(this,0,void 0,function*(){const A=new Uint8Array(B),C=new Uint8Array(g.length+4),e=new DataView(C.buffer),E=n(g),t=new Uint8Array(E.buffer,E.byteOffset,E.length);C.set(t);let a=0;const c=I.digestSize,r=Math.ceil(B/c);let h=null,w=null;for(let Q=1;Q<=r;Q++){e.setUint32(g.length,Q),I.init(),I.update(C),h=I.digest("binary"),w=h.slice();for(let A=1;AU(A,I))}(I.hashFunction,I.password),I.salt,I.iterations,I.hashLength,I.outputType)})}var u={name:"scrypt",data:"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cyICajYCOCAAIAAoAjwgAiAKakESdyAGc2o2AjwLvxIDFX8Bfg5/AkAgAkUNACAAQQd0IgNBQGoiBEEAKAKACCIFIAMgAmwiBmogAyABbGoiByADaiIIaiEJIAAgAkEHdCIKIAFBB3RqIgtsIQwgACALQYABamwhDSAAQQV0IgtBASALQQFLGyILQWBxIQ4gC0EBcSEPIAdBeGohECAHQXBqIREgB0FoaiESIAdBYGohEyAHQVhqIRQgB0FQaiEVIAdBSGohFiAHQUBqIRcgAa1Cf3whGCAEIAdqIRkgByAAQQh0IhpqIRsgACAKQYABamwhHCALQQRJIR1BACEeQQAhHwNAQQAoAoAIIiAgAyAfbGohIQJAIABFDQBBACEiAkAgHQ0AICAgHmohI0EAIQtBACEiA0AgByALaiIEICMgC2oiJCgCADYCACAEQQRqICRBBGooAgA2AgAgBEEIaiAkQQhqKAIANgIAIARBDGogJEEMaigCADYCACALQRBqIQsgDiAiQQRqIiJHDQALCyAPRQ0AIAcgIkECdCILaiAhIAtqKAIANgIACwJAIAFFDQBBACElIBwhIyAGISYDQCAFISQgACEiAkACQCAADQAgGyAXKQMANwMAIBsgFikDADcDCCAbIBUpAwA3AxAgGyAUKQMANwMYIBsgEykDADcDICAbIBIpAwA3AyggGyARKQMANwMwIBsgECkDADcDOAwBCwNAICQgJmoiCyAkIAxqIgQpAwA3AwAgC0EIaiAEQQhqKQMANwMAIAtBEGogBEEQaikDADcDACALQRhqIARBGGopAwA3AwAgC0EgaiAEQSBqKQMANwMAIAtBKGogBEEoaikDADcDACALQTBqIARBMGopAwA3AwAgC0E4aiAEQThqKQMANwMAIAtBwABqIARBwABqKQMANwMAIAtByABqIARByABqKQMANwMAIAtB0ABqIARB0ABqKQMANwMAIAtB2ABqIARB2ABqKQMANwMAIAtB4ABqIARB4ABqKQMANwMAIAtB6ABqIARB6ABqKQMANwMAIAtB8ABqIARB8ABqKQMANwMAIAtB+ABqIARB+ABqKQMANwMAICRBgAFqISQgIkF/aiIiDQALIAcgCCAbIAAQAiAFISQgACEiA0AgJCAjaiILICQgDWoiBCkDADcDACALQQhqIARBCGopAwA3AwAgC0EQaiAEQRBqKQMANwMAIAtBGGogBEEYaikDADcDACALQSBqIARBIGopAwA3AwAgC0EoaiAEQShqKQMANwMAIAtBMGogBEEwaikDADcDACALQThqIARBOGopAwA3AwAgC0HAAGogBEHAAGopAwA3AwAgC0HIAGogBEHIAGopAwA3AwAgC0HQAGogBEHQAGopAwA3AwAgC0HYAGogBEHYAGopAwA3AwAgC0HgAGogBEHgAGopAwA3AwAgC0HoAGogBEHoAGopAwA3AwAgC0HwAGogBEHwAGopAwA3AwAgC0H4AGogBEH4AGopAwA3AwAgJEGAAWohJCAiQX9qIiINAAsLIAggByAbIAAQAiAjIBpqISMgJiAaaiEmICVBAmoiJSABSQ0AC0EAISUDQAJAAkAgAA0AIBsgFykDADcDACAbIBYpAwA3AwggGyAVKQMANwMQIBsgFCkDADcDGCAbIBMpAwA3AyAgGyASKQMANwMoIBsgESkDADcDMCAbIBApAwA3AzgMAQsgACAKIBkpAgAgGIOnQQd0amwhJiAFISQgACEiA0AgJCAMaiILIAspAwAgJCAmaiIEKQMAhTcDACALQQhqIiMgIykDACAEQQhqKQMAhTcDACALQRBqIiMgIykDACAEQRBqKQMAhTcDACALQRhqIiMgIykDACAEQRhqKQMAhTcDACALQSBqIiMgIykDACAEQSBqKQMAhTcDACALQShqIiMgIykDACAEQShqKQMAhTcDACALQTBqIiMgIykDACAEQTBqKQMAhTcDACALQThqIiMgIykDACAEQThqKQMAhTcDACALQcAAaiIjICMpAwAgBEHAAGopAwCFNwMAIAtByABqIiMgIykDACAEQcgAaikDAIU3AwAgC0HQAGoiIyAjKQMAIARB0ABqKQMAhTcDACALQdgAaiIjICMpAwAgBEHYAGopAwCFNwMAIAtB4ABqIiMgIykDACAEQeAAaikDAIU3AwAgC0HoAGoiIyAjKQMAIARB6ABqKQMAhTcDACALQfAAaiIjICMpAwAgBEHwAGopAwCFNwMAIAtB+ABqIgsgCykDACAEQfgAaikDAIU3AwAgJEGAAWohJCAiQX9qIiINAAsgByAIIBsgABACIAAgCiAJKQIAIBiDp0EHdGpsISYgBSEkIAAhIgNAICQgDWoiCyALKQMAICQgJmoiBCkDAIU3AwAgC0EIaiIjICMpAwAgBEEIaikDAIU3AwAgC0EQaiIjICMpAwAgBEEQaikDAIU3AwAgC0EYaiIjICMpAwAgBEEYaikDAIU3AwAgC0EgaiIjICMpAwAgBEEgaikDAIU3AwAgC0EoaiIjICMpAwAgBEEoaikDAIU3AwAgC0EwaiIjICMpAwAgBEEwaikDAIU3AwAgC0E4aiIjICMpAwAgBEE4aikDAIU3AwAgC0HAAGoiIyAjKQMAIARBwABqKQMAhTcDACALQcgAaiIjICMpAwAgBEHIAGopAwCFNwMAIAtB0ABqIiMgIykDACAEQdAAaikDAIU3AwAgC0HYAGoiIyAjKQMAIARB2ABqKQMAhTcDACALQeAAaiIjICMpAwAgBEHgAGopAwCFNwMAIAtB6ABqIiMgIykDACAEQegAaikDAIU3AwAgC0HwAGoiIyAjKQMAIARB8ABqKQMAhTcDACALQfgAaiILIAspAwAgBEH4AGopAwCFNwMAICRBgAFqISQgIkF/aiIiDQALCyAIIAcgGyAAEAIgJUECaiIlIAFJDQALCwJAIABFDQBBACEiAkAgHQ0AICAgHmohI0EAIQtBACEiA0AgIyALaiIEIAcgC2oiJCgCADYCACAEQQRqICRBBGooAgA2AgAgBEEIaiAkQQhqKAIANgIAIARBDGogJEEMaigCADYCACALQRBqIQsgDiAiQQRqIiJHDQALCyAPRQ0AICEgIkECdCILaiAHIAtqKAIANgIACyAeIANqIR4gH0EBaiIfIAJHDQALCws=",hash:"b32721f8"};function H(I){return A(this,0,void 0,function*(){const{costFactor:A,blockSize:g,parallelism:i,hashLength:B}=I,Q=y(l,32).then(A=>{A.init(256);const I={init:()=>(A.init(256),I),update:g=>(A.update(g),I),digest:I=>A.digest(I),save:()=>A.save(),load:g=>(A.load(g),I),blockSize:64,digestSize:32};return I}),C=yield J({password:I.password,salt:I.salt,iterations:1,hashLength:128*g*i,hashFunction:Q,outputType:"binary"}),e=yield y(u,0),E=128*g*A,t=256*g;e.setMemorySize(C.length+E+t),e.writeMemory(C,0),e.getExports().scrypt(g,A,i);const n=e.getMemory().subarray(0,128*g*i),a=yield J({password:I.password,salt:n,iterations:1,hashLength:B,hashFunction:Q,outputType:"binary"});if("hex"===I.outputType){return o(new Uint8Array(2*B),a,B)}return a})}function K(I){return A(this,0,void 0,function*(){return(A=>{if(!A||"object"!=typeof A)throw new Error("Invalid options parameter. It requires an object.");if(!Number.isInteger(A.blockSize)||A.blockSize<1)throw new Error("Block size should be a positive number");if(!Number.isInteger(A.costFactor)||A.costFactor<2||!(I=A.costFactor)||I&I-1)throw new Error("Cost factor should be a power of 2, greater than 1");var I;if(!Number.isInteger(A.parallelism)||A.parallelism<1)throw new Error("Parallelism should be a positive number");if(!Number.isInteger(A.hashLength)||A.hashLength<1)throw new Error("Hash length should be a positive number.");if(void 0===A.outputType&&(A.outputType="hex"),!["hex","binary"].includes(A.outputType))throw new Error(`Insupported output type ${A.outputType}. Valid values: ['hex', 'binary']`)})(I),H(I)})}new I,new I;const q=Object.freeze(Object.defineProperty({__proto__:null,deriveKey:async function(A,I,g){const{cost:i,keyLength:B=32,memoryCost:Q=16384,parallelism:C=1}=A;return{parameters:{memoryCost:Q,parallelism:C},derivedKey:await M({password:g,salt:I,parallelism:C,iterations:i,memorySize:Q,hashLength:B,outputType:"binary"})}}},Symbol.toStringTag,{value:"Module"}));function R(A){switch(A){case"PBKDF2/SHA-512":return"SHA-512";case"PBKDF2/SHA-384":return"SHA-384";default:return"SHA-256"}}const Y=Object.freeze(Object.defineProperty({__proto__:null,deriveKey:async function(A,I,g){const{algorithm:i,cost:B,keyLength:Q=32}=A,C=await crypto.subtle.importKey("raw",g,{name:"PBKDF2"},!1,["deriveKey"]),e=await crypto.subtle.deriveKey({name:"PBKDF2",salt:I,iterations:B,hash:R(i)},C,{name:"AES-GCM",length:8*Q},!0,["encrypt"]);return{derivedKey:new Uint8Array(await crypto.subtle.exportKey("raw",e))}}},Symbol.toStringTag,{value:"Module"}));const z=Object.freeze(Object.defineProperty({__proto__:null,deriveKey:async function(A,I,g){const{cost:i,keyLength:B=32,memoryCost:Q=8,parallelism:C=1}=A;return{parameters:{memoryCost:Q,parallelism:C},derivedKey:await K({password:g,salt:I,blockSize:Q,costFactor:i,hashLength:B,parallelism:C,outputType:"binary"})}}},Symbol.toStringTag,{value:"Module"}));function m(A,I){if(I.length>A.length)return!1;for(let g=0;gA.toString(16).padStart(2,"0")).join("")}function V(A,I){const g=new Uint8Array(A.length+I.length);return g.set(A,0),g.set(I,A.length),g}function b(A){if(A.length%2!=0)throw new Error(`Hex string must have an even length. Got: ${A}`);const I=new ArrayBuffer(A.length/2),g=new DataView(I);for(let I=0;IsetTimeout(I,A))}async function P(A,I){return new Uint8Array(await crypto.subtle.digest(A.toUpperCase(),"string"==typeof I?(new TextEncoder).encode(I):new Uint8Array(I)))}async function L(A,I,g){const i=await crypto.subtle.importKey("raw",(new TextEncoder).encode(g),{name:"HMAC",hash:{name:A}},!1,["sign","verify"]),B=await crypto.subtle.sign("HMAC",i,"string"==typeof I?(new TextEncoder).encode(I):I);return new Uint8Array(B)}function T(A){return"object"!=typeof A||null===A||Array.isArray(A)?A:Object.keys(A).sort().reduce((I,g)=>{const i=A[g];return void 0!==i&&(I[g]=T(i)),I},{})}function Z(A){return Math.floor(10*(performance.now()-A))/10}const v=Object.freeze(Object.defineProperty({__proto__:null,deriveKey:async function(A,I,g){const{algorithm:i,keyLength:B=32}=A,Q=Math.max(1,A.cost);let C,e;for(let A=0;A(A.SHA_256="SHA-256",A.SHA_384="SHA-384",A.SHA_512="SHA-512",A))(W||{});class j{constructor(A,I="uint32"){this.nonce=A,this.mode=I,this.buffer=new Uint8Array(this.nonce.length+this.COUNTER_BYTES),this.buffer.set(this.nonce,0),this.dataView=new DataView(this.buffer.buffer)}nonce;mode;COUNTER_BYTES=4;buffer;dataView;encoder=new TextEncoder;setCounter(A){return"string"===this.mode?V(this.nonce,this.encoder.encode(A.toString())):(this.dataView.setUint32(this.nonce.length,A,!1),this.buffer)}}async function _(A){const{algorithm:I,counter:g,counterMode:i="uint32",cost:B,deriveKey:Q,data:C,expiresAt:e,hmacAlgorithm:E=W.SHA_256,hmacKeySignatureSecret:t,hmacSignatureSecret:o,keyLength:n=32,keyPrefix:a="00",keyPrefixLength:c=n/2,memoryCost:r,parallelism:h}=A,w={algorithm:I,nonce:X(crypto.getRandomValues(new Uint8Array(16))),salt:X(crypto.getRandomValues(new Uint8Array(16))),cost:B,keyLength:n,memoryCost:r,parallelism:h,keyPrefix:a,expiresAt:e instanceof Date?Math.floor(e.getTime()/1e3):e,data:C};let D=null;if(void 0!==g){const A=b(w.nonce);D=await Q(w,b(w.salt),new j(A,i).setCounter(g)),D.parameters&&Object.assign(w,D.parameters),w.keyPrefix=X(D.derivedKey.slice(0,c))}return o?async function(A,I,g,i,B){g&&B&&(I.keySignature=X(await L(A,g,B)));return I=T(I),{parameters:I,signature:X(await L(A,JSON.stringify(I),i))}}(E,w,D?.derivedKey,o,t):{parameters:T(w)}}async function $(A){const{challenge:I,controller:g,counterMode:i="uint32",counterStart:B=0,counterStep:Q=1,deriveKey:C,timeout:e=9e4}=A,{nonce:E,keyPrefix:t,salt:o}=I.parameters,n=b(E),a=b(o),c=t.length%2==0?b(t):null,r=new j(n,i),h=performance.now();let w=B,D=0,d="",y=h;for(;;){if(g?.signal.aborted||e&&D%10==0&&performance.now()-h>e)return null;const{derivedKey:A}=await C(I.parameters,a,r.setCounter(w));if(D%10==0&&performance.now()-y>200&&(await O(0),y=performance.now()),c?m(A,c):X(A).startsWith(t)){d=X(A);break}w+=Q,D+=1}return{counter:w,derivedKey:d,time:Z(h)}}async function AA(A){const{challenge:I,concurrency:g=navigator.hardwareConcurrency,controller:i=new AbortController,createWorker:B,onOutOfMemory:Q=A=>A>1?Math.floor(A/2):0,counterMode:C,timeout:e=9e4}=A,E=Math.min(16,Math.max(1,g)),t=[],o=()=>{for(const A of t)A.terminate()};for(let A=0;A(i.signal.addEventListener("abort",()=>{A.postMessage({type:"abort"})}),new Promise((i,B)=>{A.addEventListener("error",A=>{B(A)}),A.addEventListener("message",I=>{if(I.data){for(const I of t)I!==A&&I.postMessage({type:"abort"});if(I.data.error)return B(new Error(I.data.error))}i(I.data)}),A.postMessage({challenge:I,counterMode:C,counterStart:g,counterStep:E,timeout:e,type:"work"})}))))}catch(g){if(g instanceof Error&&!!g?.message?.includes("Out of memory")&&Q){o();const g=Q(E);if(g)return AA({...A,challenge:I,controller:i,concurrency:g,createWorker:B})}throw g}finally{o()}return i.signal.aborted?null:n||null}async function IA(A){const{challenge:I,counterMode:g,deriveKey:i,hmacAlgorithm:B=W.SHA_256,hmacKeySignatureSecret:Q,hmacSignatureSecret:C,solution:e}=A,E=performance.now();if(I.parameters.expiresAt&&I.parameters.expiresAt { + }; + this.mutex = this.mutex.then(() => new Promise(begin)); + return new Promise((res) => { + begin = res; + }); + } + dispatch(fn) { + return __awaiter(this, void 0, void 0, function* () { + const unlock = yield this.lock(); + try { + return yield Promise.resolve(fn()); + } finally { + unlock(); + } + }); + } + } + var _a; + function getGlobal() { + if (typeof globalThis !== "undefined") + return globalThis; + if (typeof self !== "undefined") + return self; + if (typeof window !== "undefined") + return window; + return global; + } + const globalObject = getGlobal(); + const nodeBuffer = (_a = globalObject.Buffer) !== null && _a !== void 0 ? _a : null; + const textEncoder = globalObject.TextEncoder ? new globalObject.TextEncoder() : null; + function hexCharCodesToInt(a, b) { + return (a & 15) + (a >> 6 | a >> 3 & 8) << 4 | (b & 15) + (b >> 6 | b >> 3 & 8); + } + function writeHexToUInt8(buf, str) { + const size = str.length >> 1; + for (let i = 0; i < size; i++) { + const index = i << 1; + buf[i] = hexCharCodesToInt(str.charCodeAt(index), str.charCodeAt(index + 1)); + } + } + function hexStringEqualsUInt8(str, buf) { + if (str.length !== buf.length * 2) { + return false; + } + for (let i = 0; i < buf.length; i++) { + const strIndex = i << 1; + if (buf[i] !== hexCharCodesToInt(str.charCodeAt(strIndex), str.charCodeAt(strIndex + 1))) { + return false; + } + } + return true; + } + const alpha = "a".charCodeAt(0) - 10; + const digit = "0".charCodeAt(0); + function getDigestHex(tmpBuffer, input, hashLength) { + let p = 0; + for (let i = 0; i < hashLength; i++) { + let nibble = input[i] >>> 4; + tmpBuffer[p++] = nibble > 9 ? nibble + alpha : nibble + digit; + nibble = input[i] & 15; + tmpBuffer[p++] = nibble > 9 ? nibble + alpha : nibble + digit; + } + return String.fromCharCode.apply(null, tmpBuffer); + } + const getUInt8Buffer = nodeBuffer !== null ? (data) => { + if (typeof data === "string") { + const buf = nodeBuffer.from(data, "utf8"); + return new Uint8Array(buf.buffer, buf.byteOffset, buf.length); + } + if (nodeBuffer.isBuffer(data)) { + return new Uint8Array(data.buffer, data.byteOffset, data.length); + } + if (ArrayBuffer.isView(data)) { + return new Uint8Array(data.buffer, data.byteOffset, data.byteLength); + } + throw new Error("Invalid data type!"); + } : (data) => { + if (typeof data === "string") { + return textEncoder.encode(data); + } + if (ArrayBuffer.isView(data)) { + return new Uint8Array(data.buffer, data.byteOffset, data.byteLength); + } + throw new Error("Invalid data type!"); + }; + const base64Chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; + const base64Lookup = new Uint8Array(256); + for (let i = 0; i < base64Chars.length; i++) { + base64Lookup[base64Chars.charCodeAt(i)] = i; + } + function encodeBase64(data, pad = true) { + const len = data.length; + const extraBytes = len % 3; + const parts = []; + const len2 = len - extraBytes; + for (let i = 0; i < len2; i += 3) { + const tmp = (data[i] << 16 & 16711680) + (data[i + 1] << 8 & 65280) + (data[i + 2] & 255); + const triplet = base64Chars.charAt(tmp >> 18 & 63) + base64Chars.charAt(tmp >> 12 & 63) + base64Chars.charAt(tmp >> 6 & 63) + base64Chars.charAt(tmp & 63); + parts.push(triplet); + } + if (extraBytes === 1) { + const tmp = data[len - 1]; + const a = base64Chars.charAt(tmp >> 2); + const b = base64Chars.charAt(tmp << 4 & 63); + parts.push(`${a}${b}`); + if (pad) { + parts.push("=="); + } + } else if (extraBytes === 2) { + const tmp = (data[len - 2] << 8) + data[len - 1]; + const a = base64Chars.charAt(tmp >> 10); + const b = base64Chars.charAt(tmp >> 4 & 63); + const c = base64Chars.charAt(tmp << 2 & 63); + parts.push(`${a}${b}${c}`); + if (pad) { + parts.push("="); + } + } + return parts.join(""); + } + function getDecodeBase64Length(data) { + let bufferLength = Math.floor(data.length * 0.75); + const len = data.length; + if (data[len - 1] === "=") { + bufferLength -= 1; + if (data[len - 2] === "=") { + bufferLength -= 1; + } + } + return bufferLength; + } + function decodeBase64(data) { + const bufferLength = getDecodeBase64Length(data); + const len = data.length; + const bytes = new Uint8Array(bufferLength); + let p = 0; + for (let i = 0; i < len; i += 4) { + const encoded1 = base64Lookup[data.charCodeAt(i)]; + const encoded2 = base64Lookup[data.charCodeAt(i + 1)]; + const encoded3 = base64Lookup[data.charCodeAt(i + 2)]; + const encoded4 = base64Lookup[data.charCodeAt(i + 3)]; + bytes[p] = encoded1 << 2 | encoded2 >> 4; + p += 1; + bytes[p] = (encoded2 & 15) << 4 | encoded3 >> 2; + p += 1; + bytes[p] = (encoded3 & 3) << 6 | encoded4 & 63; + p += 1; + } + return bytes; + } + const MAX_HEAP = 16 * 1024; + const WASM_FUNC_HASH_LENGTH = 4; + const wasmMutex = new Mutex(); + const wasmModuleCache = /* @__PURE__ */ new Map(); + function WASMInterface(binary, hashLength) { + return __awaiter(this, void 0, void 0, function* () { + let wasmInstance = null; + let memoryView = null; + let initialized = false; + if (typeof WebAssembly === "undefined") { + throw new Error("WebAssembly is not supported in this environment!"); + } + const writeMemory = (data, offset = 0) => { + memoryView.set(data, offset); + }; + const getMemory = () => memoryView; + const getExports = () => wasmInstance.exports; + const setMemorySize = (totalSize) => { + wasmInstance.exports.Hash_SetMemorySize(totalSize); + const arrayOffset = wasmInstance.exports.Hash_GetBuffer(); + const memoryBuffer = wasmInstance.exports.memory.buffer; + memoryView = new Uint8Array(memoryBuffer, arrayOffset, totalSize); + }; + const getStateSize = () => { + const view = new DataView(wasmInstance.exports.memory.buffer); + const stateSize = view.getUint32(wasmInstance.exports.STATE_SIZE, true); + return stateSize; + }; + const loadWASMPromise = wasmMutex.dispatch(() => __awaiter(this, void 0, void 0, function* () { + if (!wasmModuleCache.has(binary.name)) { + const asm = decodeBase64(binary.data); + const promise = WebAssembly.compile(asm); + wasmModuleCache.set(binary.name, promise); + } + const module2 = yield wasmModuleCache.get(binary.name); + wasmInstance = yield WebAssembly.instantiate(module2, { + // env: { + // emscripten_memcpy_big: (dest, src, num) => { + // const memoryBuffer = wasmInstance.exports.memory.buffer; + // const memView = new Uint8Array(memoryBuffer, 0); + // memView.set(memView.subarray(src, src + num), dest); + // }, + // print_memory: (offset, len) => { + // const memoryBuffer = wasmInstance.exports.memory.buffer; + // const memView = new Uint8Array(memoryBuffer, 0); + // console.log('print_int32', memView.subarray(offset, offset + len)); + // }, + // }, + }); + })); + const setupInterface = () => __awaiter(this, void 0, void 0, function* () { + if (!wasmInstance) { + yield loadWASMPromise; + } + const arrayOffset = wasmInstance.exports.Hash_GetBuffer(); + const memoryBuffer = wasmInstance.exports.memory.buffer; + memoryView = new Uint8Array(memoryBuffer, arrayOffset, MAX_HEAP); + }); + const init = (bits = null) => { + initialized = true; + wasmInstance.exports.Hash_Init(bits); + }; + const updateUInt8Array = (data) => { + let read = 0; + while (read < data.length) { + const chunk = data.subarray(read, read + MAX_HEAP); + read += chunk.length; + memoryView.set(chunk); + wasmInstance.exports.Hash_Update(chunk.length); + } + }; + const update = (data) => { + if (!initialized) { + throw new Error("update() called before init()"); + } + const Uint8Buffer = getUInt8Buffer(data); + updateUInt8Array(Uint8Buffer); + }; + const digestChars = new Uint8Array(hashLength * 2); + const digest = (outputType, padding = null) => { + if (!initialized) { + throw new Error("digest() called before init()"); + } + initialized = false; + wasmInstance.exports.Hash_Final(padding); + if (outputType === "binary") { + return memoryView.slice(0, hashLength); + } + return getDigestHex(digestChars, memoryView, hashLength); + }; + const save = () => { + if (!initialized) { + throw new Error("save() can only be called after init() and before digest()"); + } + const stateOffset = wasmInstance.exports.Hash_GetState(); + const stateLength = getStateSize(); + const memoryBuffer = wasmInstance.exports.memory.buffer; + const internalState = new Uint8Array(memoryBuffer, stateOffset, stateLength); + const prefixedState = new Uint8Array(WASM_FUNC_HASH_LENGTH + stateLength); + writeHexToUInt8(prefixedState, binary.hash); + prefixedState.set(internalState, WASM_FUNC_HASH_LENGTH); + return prefixedState; + }; + const load = (state) => { + if (!(state instanceof Uint8Array)) { + throw new Error("load() expects an Uint8Array generated by save()"); + } + const stateOffset = wasmInstance.exports.Hash_GetState(); + const stateLength = getStateSize(); + const overallLength = WASM_FUNC_HASH_LENGTH + stateLength; + const memoryBuffer = wasmInstance.exports.memory.buffer; + if (state.length !== overallLength) { + throw new Error(`Bad state length (expected ${overallLength} bytes, got ${state.length})`); + } + if (!hexStringEqualsUInt8(binary.hash, state.subarray(0, WASM_FUNC_HASH_LENGTH))) { + throw new Error("This state was written by an incompatible hash implementation"); + } + const internalState = state.subarray(WASM_FUNC_HASH_LENGTH); + new Uint8Array(memoryBuffer, stateOffset, stateLength).set(internalState); + initialized = true; + }; + const isDataShort = (data) => { + if (typeof data === "string") { + return data.length < MAX_HEAP / 4; + } + return data.byteLength < MAX_HEAP; + }; + let canSimplify = isDataShort; + switch (binary.name) { + case "argon2": + case "scrypt": + canSimplify = () => true; + break; + case "blake2b": + case "blake2s": + canSimplify = (data, initParam) => initParam <= 512 && isDataShort(data); + break; + case "blake3": + canSimplify = (data, initParam) => initParam === 0 && isDataShort(data); + break; + case "xxhash64": + // cannot simplify + case "xxhash3": + case "xxhash128": + case "crc64": + canSimplify = () => false; + break; + } + const calculate = (data, initParam = null, digestParam = null) => { + if (!canSimplify(data, initParam)) { + init(initParam); + update(data); + return digest("hex", digestParam); + } + const buffer = getUInt8Buffer(data); + memoryView.set(buffer); + wasmInstance.exports.Hash_Calculate(buffer.length, initParam, digestParam); + return getDigestHex(digestChars, memoryView, hashLength); + }; + yield setupInterface(); + return { + getMemory, + writeMemory, + getExports, + setMemorySize, + init, + update, + digest, + save, + load, + calculate, + hashLength + }; + }); + } + new Mutex(); + var name$k = "argon2"; + var data$k = "AGFzbQEAAAABKQVgAX8Bf2AAAX9gEH9/f39/f39/f39/f39/f38AYAR/f39/AGACf38AAwYFAAECAwQFBgEBAoCAAgYIAX8BQZCoBAsHQQQGbWVtb3J5AgASSGFzaF9TZXRNZW1vcnlTaXplAAAOSGFzaF9HZXRCdWZmZXIAAQ5IYXNoX0NhbGN1bGF0ZQAECvEyBVgBAn9BACEBAkAgAEEAKAKICCICRg0AAkAgACACayIAQRB2IABBgIB8cSAASWoiAEAAQX9HDQBB/wHADwtBACEBQQBBACkDiAggAEEQdK18NwOICAsgAcALcAECfwJAQQAoAoAIIgANAEEAPwBBEHQiADYCgAhBACgCiAgiAUGAgCBGDQACQEGAgCAgAWsiAEEQdiAAQYCAfHEgAElqIgBAAEF/Rw0AQQAPC0EAQQApA4gIIABBEHStfDcDiAhBACgCgAghAAsgAAvcDgECfiAAIAQpAwAiECAAKQMAIhF8IBFCAYZC/v///x+DIBBC/////w+DfnwiEDcDACAMIBAgDCkDAIVCIIkiEDcDACAIIBAgCCkDACIRfCARQgGGQv7///8fgyAQQv////8Pg358IhA3AwAgBCAQIAQpAwCFQiiJIhA3AwAgACAQIAApAwAiEXwgEEL/////D4MgEUIBhkL+////H4N+fCIQNwMAIAwgECAMKQMAhUIwiSIQNwMAIAggECAIKQMAIhF8IBBC/////w+DIBFCAYZC/v///x+DfnwiEDcDACAEIBAgBCkDAIVCAYk3AwAgASAFKQMAIhAgASkDACIRfCARQgGGQv7///8fgyAQQv////8Pg358IhA3AwAgDSAQIA0pAwCFQiCJIhA3AwAgCSAQIAkpAwAiEXwgEUIBhkL+////H4MgEEL/////D4N+fCIQNwMAIAUgECAFKQMAhUIoiSIQNwMAIAEgECABKQMAIhF8IBBC/////w+DIBFCAYZC/v///x+DfnwiEDcDACANIBAgDSkDAIVCMIkiEDcDACAJIBAgCSkDACIRfCAQQv////8PgyARQgGGQv7///8fg358IhA3AwAgBSAQIAUpAwCFQgGJNwMAIAIgBikDACIQIAIpAwAiEXwgEUIBhkL+////H4MgEEL/////D4N+fCIQNwMAIA4gECAOKQMAhUIgiSIQNwMAIAogECAKKQMAIhF8IBFCAYZC/v///x+DIBBC/////w+DfnwiEDcDACAGIBAgBikDAIVCKIkiEDcDACACIBAgAikDACIRfCAQQv////8PgyARQgGGQv7///8fg358IhA3AwAgDiAQIA4pAwCFQjCJIhA3AwAgCiAQIAopAwAiEXwgEEL/////D4MgEUIBhkL+////H4N+fCIQNwMAIAYgECAGKQMAhUIBiTcDACADIAcpAwAiECADKQMAIhF8IBFCAYZC/v///x+DIBBC/////w+DfnwiEDcDACAPIBAgDykDAIVCIIkiEDcDACALIBAgCykDACIRfCARQgGGQv7///8fgyAQQv////8Pg358IhA3AwAgByAQIAcpAwCFQiiJIhA3AwAgAyAQIAMpAwAiEXwgEEL/////D4MgEUIBhkL+////H4N+fCIQNwMAIA8gECAPKQMAhUIwiSIQNwMAIAsgECALKQMAIhF8IBBC/////w+DIBFCAYZC/v///x+DfnwiEDcDACAHIBAgBykDAIVCAYk3AwAgACAFKQMAIhAgACkDACIRfCARQgGGQv7///8fgyAQQv////8Pg358IhA3AwAgDyAQIA8pAwCFQiCJIhA3AwAgCiAQIAopAwAiEXwgEUIBhkL+////H4MgEEL/////D4N+fCIQNwMAIAUgECAFKQMAhUIoiSIQNwMAIAAgECAAKQMAIhF8IBBC/////w+DIBFCAYZC/v///x+DfnwiEDcDACAPIBAgDykDAIVCMIkiEDcDACAKIBAgCikDACIRfCAQQv////8PgyARQgGGQv7///8fg358IhA3AwAgBSAQIAUpAwCFQgGJNwMAIAEgBikDACIQIAEpAwAiEXwgEUIBhkL+////H4MgEEL/////D4N+fCIQNwMAIAwgECAMKQMAhUIgiSIQNwMAIAsgECALKQMAIhF8IBFCAYZC/v///x+DIBBC/////w+DfnwiEDcDACAGIBAgBikDAIVCKIkiEDcDACABIBAgASkDACIRfCAQQv////8PgyARQgGGQv7///8fg358IhA3AwAgDCAQIAwpAwCFQjCJIhA3AwAgCyAQIAspAwAiEXwgEEL/////D4MgEUIBhkL+////H4N+fCIQNwMAIAYgECAGKQMAhUIBiTcDACACIAcpAwAiECACKQMAIhF8IBFCAYZC/v///x+DIBBC/////w+DfnwiEDcDACANIBAgDSkDAIVCIIkiEDcDACAIIBAgCCkDACIRfCARQgGGQv7///8fgyAQQv////8Pg358IhA3AwAgByAQIAcpAwCFQiiJIhA3AwAgAiAQIAIpAwAiEXwgEEL/////D4MgEUIBhkL+////H4N+fCIQNwMAIA0gECANKQMAhUIwiSIQNwMAIAggECAIKQMAIhF8IBBC/////w+DIBFCAYZC/v///x+DfnwiEDcDACAHIBAgBykDAIVCAYk3AwAgAyAEKQMAIhAgAykDACIRfCARQgGGQv7///8fgyAQQv////8Pg358IhA3AwAgDiAQIA4pAwCFQiCJIhA3AwAgCSAQIAkpAwAiEXwgEUIBhkL+////H4MgEEL/////D4N+fCIQNwMAIAQgECAEKQMAhUIoiSIQNwMAIAMgECADKQMAIhF8IBBC/////w+DIBFCAYZC/v///x+DfnwiEDcDACAOIBAgDikDAIVCMIkiEDcDACAJIBAgCSkDACIRfCAQQv////8PgyARQgGGQv7///8fg358IhA3AwAgBCAQIAQpAwCFQgGJNwMAC98aAQN/QQAhBEEAIAIpAwAgASkDAIU3A5AIQQAgAikDCCABKQMIhTcDmAhBACACKQMQIAEpAxCFNwOgCEEAIAIpAxggASkDGIU3A6gIQQAgAikDICABKQMghTcDsAhBACACKQMoIAEpAyiFNwO4CEEAIAIpAzAgASkDMIU3A8AIQQAgAikDOCABKQM4hTcDyAhBACACKQNAIAEpA0CFNwPQCEEAIAIpA0ggASkDSIU3A9gIQQAgAikDUCABKQNQhTcD4AhBACACKQNYIAEpA1iFNwPoCEEAIAIpA2AgASkDYIU3A/AIQQAgAikDaCABKQNohTcD+AhBACACKQNwIAEpA3CFNwOACUEAIAIpA3ggASkDeIU3A4gJQQAgAikDgAEgASkDgAGFNwOQCUEAIAIpA4gBIAEpA4gBhTcDmAlBACACKQOQASABKQOQAYU3A6AJQQAgAikDmAEgASkDmAGFNwOoCUEAIAIpA6ABIAEpA6ABhTcDsAlBACACKQOoASABKQOoAYU3A7gJQQAgAikDsAEgASkDsAGFNwPACUEAIAIpA7gBIAEpA7gBhTcDyAlBACACKQPAASABKQPAAYU3A9AJQQAgAikDyAEgASkD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"; + var hash$k = "e4cdc523"; + var wasmJson$k = { + name: name$k, + data: data$k, + hash: hash$k + }; + var name$j = "blake2b"; + var data$j = "AGFzbQEAAAABEQRgAAF/YAJ/fwBgAX8AYAAAAwoJAAECAwECAgABBQQBAQICBg4CfwFBsIsFC38AQYAICwdwCAZtZW1vcnkCAA5IYXNoX0dldEJ1ZmZlcgAACkhhc2hfRmluYWwAAwlIYXNoX0luaXQABQtIYXNoX1VwZGF0ZQAGDUhhc2hfR2V0U3RhdGUABw5IYXNoX0NhbGN1bGF0ZQAIClNUQVRFX1NJWkUDAQrTOAkFAEGACQvrAgIFfwF+AkAgAUEBSA0AAkACQAJAIAFBgAFBACgC4IoBIgJrIgNKDQAgASEEDAELQQBBADYC4IoBAkAgAkH/AEoNACACQeCJAWohBSAAIQRBACEGA0AgBSAELQAAOgAAIARBAWohBCAFQQFqIQUgAyAGQQFqIgZB/wFxSg0ACwtBAEEAKQPAiQEiB0KAAXw3A8CJAUEAQQApA8iJASAHQv9+Vq18NwPIiQFB4IkBEAIgACADaiEAAkAgASADayIEQYEBSA0AIAIgAWohBQNAQQBBACkDwIkBIgdCgAF8NwPAiQFBAEEAKQPIiQEgB0L/flatfDcDyIkBIAAQAiAAQYABaiEAIAVBgH9qIgVBgAJLDQALIAVBgH9qIQQMAQsgBEEATA0BC0EAIQUDQCAFQQAoAuCKAWpB4IkBaiAAIAVqLQAAOgAAIAQgBUEBaiIFQf8BcUoNAAsLQQBBACgC4IoBIARqNgLgigELC78uASR+QQBBACkD0IkBQQApA7CJASIBQQApA5CJAXwgACkDICICfCIDhULr+obav7X2wR+FQiCJIgRCq/DT9K/uvLc8fCIFIAGFQiiJIgYgA3wgACkDKCIBfCIHIASFQjCJIgggBXwiCSAGhUIBiSIKQQApA8iJAUEAKQOoiQEiBEEAKQOIiQF8IAApAxAiA3wiBYVCn9j52cKR2oKbf4VCIIkiC0K7zqqm2NDrs7t/fCIMIASFQiiJIg0gBXwgACkDGCIEfCIOfCAAKQNQIgV8Ig9BACkDwIkBQQApA6CJASIQQQApA4CJASIRfCAAKQMAIgZ8IhKFQtGFmu/6z5SH0QCFQiCJIhNCiJLznf/M+YTqAHwiFCAQhUIoiSIVIBJ8IAApAwgiEHwiFiAThUIwiSIXhUIgiSIYQQApA9iJAUEAKQO4iQEiE0EAKQOYiQF8IAApAzAiEnwiGYVC+cL4m5Gjs/DbAIVCIIkiGkLx7fT4paf9p6V/fCIbIBOFQiiJIhwgGXwgACkDOCITfCIZIBqFQjCJIhogG3wiG3wiHSAKhUIoiSIeIA98IAApA1giCnwiDyAYhUIwiSIYIB18Ih0gDiALhUIwiSIOIAx8Ih8gDYVCAYkiDCAWfCAAKQNAIgt8Ig0gGoVCIIkiFiAJfCIaIAyFQiiJIiAgDXwgACkDSCIJfCIhIBaFQjCJIhYgGyAchUIBiSIMIAd8IAApA2AiB3wiDSAOhUIgiSIOIBcgFHwiFHwiFyAMhUIoiSIbIA18IAApA2giDHwiHCAOhUIwiSIOIBd8IhcgG4VCAYkiGyAZIBQgFYVCAYkiFHwgACkDcCINfCIVIAiFQiCJIhkgH3wiHyAUhUIoiSIUIBV8IAApA3giCHwiFXwgDHwiIoVCIIkiI3wiJCAbhUIoiSIbICJ8IBJ8IiIgFyAYIBUgGYVCMIkiFSAffCIZIBSFQgGJIhQgIXwgDXwiH4VCIIkiGHwiFyAUhUIoiSIUIB98IAV8Ih8gGIVCMIkiGCAXfCIXIBSFQgGJIhR8IAF8IiEgFiAafCIWIBUgHSAehUIBiSIaIBx8IAl8IhyFQiCJIhV8Ih0gGoVCKIkiGiAcfCAIfCIcIBWFQjCJIhWFQiCJIh4gGSAOIBYgIIVCAYkiFiAPfCACfCIPhUIgiSIOfCIZIBaFQiiJIhYgD3wgC3wiDyAOhUIwiSIOIBl8Ihl8IiAgFIVCKIkiFCAhfCAEfCIhIB6FQjCJIh4gIHwiICAiICOFQjCJIiIgJHwiIyAbhUIBiSIbIBx8IAp8IhwgDoVCIIkiDiAXfCIXIBuFQiiJIhsgHHwgE3wiHCAOhUIwiSIOIBkgFoVCAYkiFiAffCAQfCIZICKFQiCJIh8gFSAdfCIVfCIdIBaFQiiJIhYgGXwgB3wiGSAfhUIwiSIfIB18Ih0gFoVCAYkiFiAVIBqFQgGJIhUgD3wgBnwiDyAYhUIgiSIYICN8IhogFYVCKIkiFSAPfCADfCIPfCAHfCIihUIgiSIjfCIkIBaFQiiJIhYgInwgBnwiIiAjhUIwiSIjICR8IiQgFoVCAYkiFiAOIBd8Ig4gDyAYhUIwiSIPICAgFIVCAYkiFCAZfCAKfCIXhUIgiSIYfCIZIBSFQiiJIhQgF3wgC3wiF3wgBXwiICAPIBp8Ig8gHyAOIBuFQgGJIg4gIXwgCHwiGoVCIIkiG3wiHyAOhUIoiSIOIBp8IAx8IhogG4VCMIkiG4VCIIkiISAdIB4gDyAVhUIBiSIPIBx8IAF8IhWFQiCJIhx8Ih0gD4VCKIkiDyAVfCADfCIVIByFQjCJIhwgHXwiHXwiHiAWhUIoiSIWICB8IA18IiAgIYVCMIkiISAefCIeIBogFyAYhUIwiSIXIBl8IhggFIVCAYkiFHwgCXwiGSAchUIgiSIaICR8IhwgFIVCKIkiFCAZfCACfCIZIBqFQjCJIhogHSAPhUIBiSIPICJ8IAR8Ih0gF4VCIIkiFyAbIB98Iht8Ih8gD4VCKIkiDyAdfCASfCIdIBeFQjCJIhcgH3wiHyAPhUIBiSIPIBsgDoVCAYkiDiAVfCATfCIVICOFQiCJIhsgGHwiGCAOhUIoiSIOIBV8IBB8IhV8IAx8IiKFQiCJIiN8IiQgD4VCKIkiDyAifCAHfCIiICOFQjCJIiMgJHwiJCAPhUIBiSIPIBogHHwiGiAVIBuFQjCJIhUgHiAWhUIBiSIWIB18IAR8IhuFQiCJIhx8Ih0gFoVCKIkiFiAbfCAQfCIbfCABfCIeIBUgGHwiFSAXIBogFIVCAYkiFCAgfCATfCIYhUIgiSIXfCIaIBSFQiiJIhQgGHwgCXwiGCAXhUIwiSIXhUIgiSIgIB8gISAVIA6FQgGJIg4gGXwgCnwiFYVCIIkiGXwiHyAOhUIoiSIOIBV8IA18IhUgGYVCMIkiGSAffCIffCIhIA+FQiiJIg8gHnwgBXwiHiAghUIwiSIgICF8IiEgGyAchUIwiSIbIB18IhwgFoVCAYkiFiAYfCADfCIYIBmFQiCJIhkgJHwiHSAWhUIoiSIWIBh8IBJ8IhggGYVCMIkiGSAfIA6FQgGJIg4gInwgAnwiHyAbhUIgiSIbIBcgGnwiF3wiGiAOhUIoiSIOIB98IAZ8Ih8gG4VCMIkiGyAafCIaIA6FQgGJIg4gFSAXIBSFQgGJIhR8IAh8IhUgI4VCIIkiFyAcfCIcIBSFQiiJIhQgFXwgC3wiFXwgBXwiIoVCIIkiI3wiJCAOhUIoiSIOICJ8IAh8IiIgGiAgIBUgF4VCMIkiFSAcfCIXIBSFQgGJIhQgGHwgCXwiGIVCIIkiHHwiGiAUhUIoiSIUIBh8IAZ8IhggHIVCMIkiHCAafCIaIBSFQgGJIhR8IAR8IiAgGSAdfCIZIBUgISAPhUIBiSIPIB98IAN8Ih2FQiCJIhV8Ih8gD4VCKIkiDyAdfCACfCIdIBWFQjCJIhWFQiCJIiEgFyAbIBkgFoVCAYkiFiAefCABfCIZhUIgiSIbfCIXIBaFQiiJIhYgGXwgE3wiGSAbhUIwiSIbIBd8Ihd8Ih4gFIVCKIkiFCAgfCAMfCIgICGFQjCJIiEgHnwiHiAiICOFQjCJIiIgJHwiIyAOhUIBiSIOIB18IBJ8Ih0gG4VCIIkiGyAafCIaIA6FQiiJIg4gHXwgC3wiHSAbhUIwiSIbIBcgFoVCAYkiFiAYfCANfCIXICKFQiCJIhggFSAffCIVfCIfIBaFQiiJIhYgF3wgEHwiFyAYhUIwiSIYIB98Ih8gFoVCAYkiFiAVIA+FQgGJIg8gGXwgCnwiFSAchUIgiSIZICN8IhwgD4VCKIkiDyAVfCAHfCIVfCASfCIihUIgiSIjfCIkIBaFQiiJIhYgInwgBXwiIiAjhUIwiSIjICR8IiQgFoVCAYkiFiAbIBp8IhogFSAZhUIwiSIVIB4gFIVCAYkiFCAXfCADfCIXhUIgiSIZfCIbIBSFQiiJIhQgF3wgB3wiF3wgAnwiHiAVIBx8IhUgGCAaIA6FQgGJIg4gIHwgC3wiGoVCIIkiGHwiHCAOhUIoiSIOIBp8IAR8IhogGIVCMIkiGIVCIIkiICAfICEgFSAPhUIBiSIPIB18IAZ8IhWFQiCJIh18Ih8gD4VCKIkiDyAVfCAKfCIVIB2FQjCJIh0gH3wiH3wiISAWhUIoiSIWIB58IAx8Ih4gIIVCMIkiICAhfCIhIBogFyAZhUIwiSIXIBt8IhkgFIVCAYkiFHwgEHwiGiAdhUIgiSIbICR8Ih0gFIVCKIkiFCAafCAJfCIaIBuFQjCJIhsgHyAPhUIBiSIPICJ8IBN8Ih8gF4VCIIkiFyAYIBx8Ihh8IhwgD4VCKIkiDyAffCABfCIfIBeFQjCJIhcgHHwiHCAPhUIBiSIPIBggDoVCAYkiDiAVfCAIfCIVICOFQiCJIhggGXwiGSAOhUIoiSIOIBV8IA18IhV8IA18IiKFQiCJIiN8IiQgD4VCKIkiDyAifCAMfCIiICOFQjCJIiMgJHwiJCAPhUIBiSIPIBsgHXwiGyAVIBiFQjCJIhUgISAWhUIBiSIWIB98IBB8IhiFQiCJIh18Ih8gFoVCKIkiFiAYfCAIfCIYfCASfCIhIBUgGXwiFSAXIBsgFIVCAYkiFCAefCAHfCIZhUIgiSIXfCIbIBSFQiiJIhQgGXwgAXwiGSAXhUIwiSIXhUIgiSIeIBwgICAVIA6FQgGJIg4gGnwgAnwiFYVCIIkiGnwiHCAOhUIoiSIOIBV8IAV8IhUgGoVCMIkiGiAcfCIcfCIgIA+FQiiJIg8gIXwgBHwiISAehUIwiSIeICB8IiAgGCAdhUIwiSIYIB98Ih0gFoVCAYkiFiAZfCAGfCIZIBqFQiCJIhogJHwiHyAWhUIoiSIWIBl8IBN8IhkgGoVCMIkiGiAcIA6FQgGJIg4gInwgCXwiHCAYhUIgiSIYIBcgG3wiF3wiGyAOhUIoiSIOIBx8IAN8IhwgGIVCMIkiGCAbfCIbIA6FQgGJIg4gFSAXIBSFQgGJIhR8IAt8IhUgI4VCIIkiFyAdfCIdIBSFQiiJIhQgFXwgCnwiFXwgBHwiIoVCIIkiI3wiJCAOhUIoiSIOICJ8IAl8IiIgGyAeIBUgF4VCMIkiFSAdfCIXIBSFQgGJIhQgGXwgDHwiGYVCIIkiHXwiGyAUhUIoiSIUIBl8IAp8IhkgHYVCMIkiHSAbfCIbIBSFQgGJIhR8IAN8Ih4gGiAffCIaIBUgICAPhUIBiSIPIBx8IAd8IhyFQiCJIhV8Ih8gD4VCKIkiDyAcfCAQfCIcIBWFQjCJIhWFQiCJIiAgFyAYIBogFoVCAYkiFiAhfCATfCIahUIgiSIYfCIXIBaFQiiJIhYgGnwgDXwiGiAYhUIwiSIYIBd8Ihd8IiEgFIVCKIkiFCAefCAFfCIeICCFQjCJIiAgIXwiISAiICOFQjCJIiIgJHwiIyAOhUIBiSIOIBx8IAt8IhwgGIVCIIkiGCAbfCIbIA6FQiiJIg4gHHwgEnwiHCAYhUIwiSIYIBcgFoVCAYkiFiAZfCABfCIXICKFQiCJIhkgFSAffCIVfCIfIBaFQiiJIhYgF3wgBnwiFyAZhUIwiSIZIB98Ih8gFoVCAYkiFiAVIA+FQgGJIg8gGnwgCHwiFSAdhUIgiSIaICN8Ih0gD4VCKIkiDyAVfCACfCIVfCANfCIihUIgiSIjfCIkIBaFQiiJIhYgInwgCXwiIiAjhUIwiSIjICR8IiQgFoVCAYkiFiAYIBt8IhggFSAahUIwiSIVICEgFIVCAYkiFCAXfCASfCIXhUIgiSIafCIbIBSFQiiJIhQgF3wgCHwiF3wgB3wiISAVIB18IhUgGSAYIA6FQgGJIg4gHnwgBnwiGIVCIIkiGXwiHSAOhUIoiSIOIBh8IAt8IhggGYVCMIkiGYVCIIkiHiAfICAgFSAPhUIBiSIPIBx8IAp8IhWFQiCJIhx8Ih8gD4VCKIkiDyAVfCAEfCIVIByFQjCJIhwgH3wiH3wiICAWhUIoiSIWICF8IAN8IiEgHoVCMIkiHiAgfCIgIBggFyAahUIwiSIXIBt8IhogFIVCAYkiFHwgBXwiGCAchUIgiSIbICR8IhwgFIVCKIkiFCAYfCABfCIYIBuFQjCJIhsgHyAPhUIBiSIPICJ8IAx8Ih8gF4VCIIkiFyAZIB18Ihl8Ih0gD4VCKIkiDyAffCATfCIfIBeFQjCJIhcgHXwiHSAPhUIBiSIPIBkgDoVCAYkiDiAVfCAQfCIVICOFQiCJIhkgGnwiGiAOhUIoiSIOIBV8IAJ8IhV8IBN8IiKFQiCJIiN8IiQgD4VCKIkiDyAifCASfCIiICOFQjCJIiMgJHwiJCAPhUIBiSIPIBsgHHwiGyAVIBmFQjCJIhUgICAWhUIBiSIWIB98IAt8IhmFQiCJIhx8Ih8gFoVCKIkiFiAZfCACfCIZfCAJfCIgIBUgGnwiFSAXIBsgFIVCAYkiFCAhfCAFfCIahUIgiSIXfCIbIBSFQiiJIhQgGnwgA3wiGiAXhUIwiSIXhUIgiSIhIB0gHiAVIA6FQgGJIg4gGHwgEHwiFYVCIIkiGHwiHSAOhUIoiSIOIBV8IAF8IhUgGIVCMIkiGCAdfCIdfCIeIA+FQiiJIg8gIHwgDXwiICAhhUIwiSIhIB58Ih4gGSAchUIwiSIZIB98IhwgFoVCAYkiFiAafCAIfCIaIBiFQiCJIhggJHwiHyAWhUIoiSIWIBp8IAp8IhogGIVCMIkiGCAdIA6FQgGJIg4gInwgBHwiHSAZhUIgiSIZIBcgG3wiF3wiGyAOhUIoiSIOIB18IAd8Ih0gGYVCMIkiGSAbfCIbIA6FQgGJIg4gFSAXIBSFQgGJIhR8IAx8IhUgI4VCIIkiFyAcfCIcIBSFQiiJIhQgFXwgBnwiFXwgEnwiIoVCIIkiI3wiJCAOhUIoiSIOICJ8IBN8IiIgGyAhIBUgF4VCMIkiFSAcfCIXIBSFQgGJIhQgGnwgBnwiGoVCIIkiHHwiGyAUhUIoiSIUIBp8IBB8IhogHIVCMIkiHCAbfCIbIBSFQgGJIhR8IA18IiEgGCAffCIYIBUgHiAPhUIBiSIPIB18IAJ8Ih2FQiCJIhV8Ih4gD4VCKIkiDyAdfCABfCIdIBWFQjCJIhWFQiCJIh8gFyAZIBggFoVCAYkiFiAgfCADfCIYhUIgiSIZfCIXIBaFQiiJIhYgGHwgBHwiGCAZhUIwiSIZIBd8Ihd8IiAgFIVCKIkiFCAhfCAIfCIhIB+FQjCJIh8gIHwiICAiICOFQjCJIiIgJHwiIyAOhUIBiSIOIB18IAd8Ih0gGYVCIIkiGSAbfCIbIA6FQiiJIg4gHXwgDHwiHSAZhUIwiSIZIBcgFoVCAYkiFiAafCALfCIXICKFQiCJIhogFSAefCIVfCIeIBaFQiiJIhYgF3wgCXwiFyAahUIwiSIaIB58Ih4gFoVCAYkiFiAVIA+FQgGJIg8gGHwgBXwiFSAchUIgiSIYICN8IhwgD4VCKIkiDyAVfCAKfCIVfCACfCIChUIgiSIifCIjIBaFQiiJIhYgAnwgC3wiAiAihUIwiSILICN8IiIgFoVCAYkiFiAZIBt8IhkgFSAYhUIwiSIVICAgFIVCAYkiFCAXfCANfCINhUIgiSIXfCIYIBSFQiiJIhQgDXwgBXwiBXwgEHwiECAVIBx8Ig0gGiAZIA6FQgGJIg4gIXwgDHwiDIVCIIkiFXwiGSAOhUIoiSIOIAx8IBJ8IhIgFYVCMIkiDIVCIIkiFSAeIB8gDSAPhUIBiSINIB18IAl8IgmFQiCJIg98IhogDYVCKIkiDSAJfCAIfCIJIA+FQjCJIgggGnwiD3wiGiAWhUIoiSIWIBB8IAd8IhAgEYUgDCAZfCIHIA6FQgGJIgwgCXwgCnwiCiALhUIgiSILIAUgF4VCMIkiBSAYfCIJfCIOIAyFQiiJIgwgCnwgE3wiEyALhUIwiSIKIA58IguFNwOAiQFBACADIAYgDyANhUIBiSINIAJ8fCICIAWFQiCJIgUgB3wiBiANhUIoiSIHIAJ8fCICQQApA4iJAYUgBCABIBIgCSAUhUIBiSIDfHwiASAIhUIgiSISICJ8IgkgA4VCKIkiAyABfHwiASAShUIwiSIEIAl8IhKFNwOIiQFBACATQQApA5CJAYUgECAVhUIwiSIQIBp8IhOFNwOQiQFBACABQQApA5iJAYUgAiAFhUIwiSICIAZ8IgGFNwOYiQFBACASIAOFQgGJQQApA6CJAYUgAoU3A6CJAUEAIBMgFoVCAYlBACkDqIkBhSAKhTcDqIkBQQAgASAHhUIBiUEAKQOwiQGFIASFNwOwiQFBACALIAyFQgGJQQApA7iJAYUgEIU3A7iJAQvdAgUBfwF+AX8BfgJ/IwBBwABrIgAkAAJAQQApA9CJAUIAUg0AQQBBACkDwIkBIgFBACgC4IoBIgKsfCIDNwPAiQFBAEEAKQPIiQEgAyABVK18NwPIiQECQEEALQDoigFFDQBBAEJ/NwPYiQELQQBCfzcD0IkBAkAgAkH/AEoNAEEAIQQDQCACIARqQeCJAWpBADoAACAEQQFqIgRBgAFBACgC4IoBIgJrSA0ACwtB4IkBEAIgAEEAKQOAiQE3AwAgAEEAKQOIiQE3AwggAEEAKQOQiQE3AxAgAEEAKQOYiQE3AxggAEEAKQOgiQE3AyAgAEEAKQOoiQE3AyggAEEAKQOwiQE3AzAgAEEAKQO4iQE3AzhBACgC5IoBIgVBAUgNAEEAIQRBACECA0AgBEGACWogACAEai0AADoAACAEQQFqIQQgBSACQQFqIgJB/wFxSg0ACwsgAEHAAGokAAv9AwMBfwF+AX8jAEGAAWsiAiQAQQBBgQI7AfKKAUEAIAE6APGKAUEAIAA6APCKAUGQfiEAA0AgAEGAiwFqQgA3AAAgAEH4igFqQgA3AAAgAEHwigFqQgA3AAAgAEEYaiIADQALQQAhAEEAQQApA/CKASIDQoiS853/zPmE6gCFNwOAiQFBAEEAKQP4igFCu86qptjQ67O7f4U3A4iJAUEAQQApA4CLAUKr8NP0r+68tzyFNwOQiQFBAEEAKQOIiwFC8e30+KWn/aelf4U3A5iJAUEAQQApA5CLAULRhZrv+s+Uh9EAhTcDoIkBQQBBACkDmIsBQp/Y+dnCkdqCm3+FNwOoiQFBAEEAKQOgiwFC6/qG2r+19sEfhTcDsIkBQQBBACkDqIsBQvnC+JuRo7Pw2wCFNwO4iQFBACADp0H/AXE2AuSKAQJAIAFBAUgNACACQgA3A3ggAkIANwNwIAJCADcDaCACQgA3A2AgAkIANwNYIAJCADcDUCACQgA3A0ggAkIANwNAIAJCADcDOCACQgA3AzAgAkIANwMoIAJCADcDICACQgA3AxggAkIANwMQIAJCADcDCCACQgA3AwBBACEEA0AgAiAAaiAAQYAJai0AADoAACAAQQFqIQAgBEEBaiIEQf8BcSABSA0ACyACQYABEAELIAJBgAFqJAALEgAgAEEDdkH/P3EgAEEQdhAECwkAQYAJIAAQAQsGAEGAiQELGwAgAUEDdkH/P3EgAUEQdhAEQYAJIAAQARADCwsLAQBBgAgLBPAAAAA="; + var hash$j = "c6f286e6"; + var wasmJson$j = { + name: name$j, + data: data$j, + hash: hash$j + }; + new Mutex(); + function validateBits$4(bits) { + if (!Number.isInteger(bits) || bits < 8 || bits > 512 || bits % 8 !== 0) { + return new Error("Invalid variant! Valid values: 8, 16, ..., 512"); + } + return null; + } + function getInitParam$1(outputBits, keyBits) { + return outputBits | keyBits << 16; + } + function createBLAKE2b(bits = 512, key = null) { + if (validateBits$4(bits)) { + return Promise.reject(validateBits$4(bits)); + } + let keyBuffer = null; + let initParam = bits; + if (key !== null) { + keyBuffer = getUInt8Buffer(key); + if (keyBuffer.length > 64) { + return Promise.reject(new Error("Max key length is 64 bytes")); + } + initParam = getInitParam$1(bits, keyBuffer.length); + } + const outputSize = bits / 8; + return WASMInterface(wasmJson$j, outputSize).then((wasm) => { + if (initParam > 512) { + wasm.writeMemory(keyBuffer); + } + wasm.init(initParam); + const obj = { + init: initParam > 512 ? () => { + wasm.writeMemory(keyBuffer); + wasm.init(initParam); + return obj; + } : () => { + wasm.init(initParam); + return obj; + }, + update: (data) => { + wasm.update(data); + return obj; + }, + // biome-ignore lint/suspicious/noExplicitAny: Conflict with IHasher type + digest: (outputType) => wasm.digest(outputType), + save: () => wasm.save(), + load: (data) => { + wasm.load(data); + return obj; + }, + blockSize: 128, + digestSize: outputSize + }; + return obj; + }); + } + function encodeResult(salt, options, res) { + const parameters = [ + `m=${options.memorySize}`, + `t=${options.iterations}`, + `p=${options.parallelism}` + ].join(","); + return `$argon2${options.hashType}$v=19$${parameters}$${encodeBase64(salt, false)}$${encodeBase64(res, false)}`; + } + const uint32View = new DataView(new ArrayBuffer(4)); + function int32LE(x) { + uint32View.setInt32(0, x, true); + return new Uint8Array(uint32View.buffer); + } + function hashFunc(blake512, buf, len) { + return __awaiter(this, void 0, void 0, function* () { + if (len <= 64) { + const blake = yield createBLAKE2b(len * 8); + blake.update(int32LE(len)); + blake.update(buf); + return blake.digest("binary"); + } + const r = Math.ceil(len / 32) - 2; + const ret = new Uint8Array(len); + blake512.init(); + blake512.update(int32LE(len)); + blake512.update(buf); + let vp = blake512.digest("binary"); + ret.set(vp.subarray(0, 32), 0); + for (let i = 1; i < r; i++) { + blake512.init(); + blake512.update(vp); + vp = blake512.digest("binary"); + ret.set(vp.subarray(0, 32), i * 32); + } + const partialBytesNeeded = len - 32 * r; + let blakeSmall; + if (partialBytesNeeded === 64) { + blakeSmall = blake512; + blakeSmall.init(); + } else { + blakeSmall = yield createBLAKE2b(partialBytesNeeded * 8); + } + blakeSmall.update(vp); + vp = blakeSmall.digest("binary"); + ret.set(vp.subarray(0, partialBytesNeeded), r * 32); + return ret; + }); + } + function getHashType(type) { + switch (type) { + case "d": + return 0; + case "i": + return 1; + default: + return 2; + } + } + function argon2Internal(options) { + return __awaiter(this, void 0, void 0, function* () { + var _a2; + const { parallelism, iterations, hashLength } = options; + const password = getUInt8Buffer(options.password); + const salt = getUInt8Buffer(options.salt); + const version = 19; + const hashType = getHashType(options.hashType); + const { memorySize } = options; + const secret = getUInt8Buffer((_a2 = options.secret) !== null && _a2 !== void 0 ? _a2 : ""); + const [argon2Interface, blake512] = yield Promise.all([ + WASMInterface(wasmJson$k, 1024), + createBLAKE2b(512) + ]); + argon2Interface.setMemorySize(memorySize * 1024 + 1024); + const initVector = new Uint8Array(24); + const initVectorView = new DataView(initVector.buffer); + initVectorView.setInt32(0, parallelism, true); + initVectorView.setInt32(4, hashLength, true); + initVectorView.setInt32(8, memorySize, true); + initVectorView.setInt32(12, iterations, true); + initVectorView.setInt32(16, version, true); + initVectorView.setInt32(20, hashType, true); + argon2Interface.writeMemory(initVector, memorySize * 1024); + blake512.init(); + blake512.update(initVector); + blake512.update(int32LE(password.length)); + blake512.update(password); + blake512.update(int32LE(salt.length)); + blake512.update(salt); + blake512.update(int32LE(secret.length)); + blake512.update(secret); + blake512.update(int32LE(0)); + const segments = Math.floor(memorySize / (parallelism * 4)); + const lanes = segments * 4; + const param = new Uint8Array(72); + const H0 = blake512.digest("binary"); + param.set(H0); + for (let lane = 0; lane < parallelism; lane++) { + param.set(int32LE(0), 64); + param.set(int32LE(lane), 68); + let position = lane * lanes; + let chunk = yield hashFunc(blake512, param, 1024); + argon2Interface.writeMemory(chunk, position * 1024); + position += 1; + param.set(int32LE(1), 64); + chunk = yield hashFunc(blake512, param, 1024); + argon2Interface.writeMemory(chunk, position * 1024); + } + const C = new Uint8Array(1024); + writeHexToUInt8(C, argon2Interface.calculate(new Uint8Array([]), memorySize)); + const res = yield hashFunc(blake512, C, hashLength); + if (options.outputType === "hex") { + const digestChars = new Uint8Array(hashLength * 2); + return getDigestHex(digestChars, res, hashLength); + } + if (options.outputType === "encoded") { + return encodeResult(salt, options, res); + } + return res; + }); + } + const validateOptions$3 = (options) => { + var _a2; + if (!options || typeof options !== "object") { + throw new Error("Invalid options parameter. It requires an object."); + } + if (!options.password) { + throw new Error("Password must be specified"); + } + options.password = getUInt8Buffer(options.password); + if (options.password.length < 1) { + throw new Error("Password must be specified"); + } + if (!options.salt) { + throw new Error("Salt must be specified"); + } + options.salt = getUInt8Buffer(options.salt); + if (options.salt.length < 8) { + throw new Error("Salt should be at least 8 bytes long"); + } + options.secret = getUInt8Buffer((_a2 = options.secret) !== null && _a2 !== void 0 ? _a2 : ""); + if (!Number.isInteger(options.iterations) || options.iterations < 1) { + throw new Error("Iterations should be a positive number"); + } + if (!Number.isInteger(options.parallelism) || options.parallelism < 1) { + throw new Error("Parallelism should be a positive number"); + } + if (!Number.isInteger(options.hashLength) || options.hashLength < 4) { + throw new Error("Hash length should be at least 4 bytes."); + } + if (!Number.isInteger(options.memorySize)) { + throw new Error("Memory size should be specified."); + } + if (options.memorySize < 8 * options.parallelism) { + throw new Error("Memory size should be at least 8 * parallelism."); + } + if (options.outputType === void 0) { + options.outputType = "hex"; + } + if (!["hex", "binary", "encoded"].includes(options.outputType)) { + throw new Error(`Insupported output type ${options.outputType}. Valid values: ['hex', 'binary', 'encoded']`); + } + }; + function argon2id$1(options) { + return __awaiter(this, void 0, void 0, function* () { + validateOptions$3(options); + return argon2Internal(Object.assign(Object.assign({}, options), { hashType: "id" })); + }); + } + new Mutex(); + new Mutex(); + new Mutex(); + new Mutex(); + new Mutex(); + new Mutex(); + new Mutex(); + new Mutex(); + new Mutex(); + var name$a = "sha256"; + var data$a = "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c2pBx6KerX1qIhkgASADcyACcSABIANxcyABQR53IAFBE3dzIAFBCndzaiAaaiICaiIJIBMgEnNxIBJzaiAJQRp3IAlBFXdzIAlBB3dzakHRxqk2aiIaIAIgAXMgA3EgAiABcXMgAkEedyACQRN3cyACQQp3c2ogGGoiA2oiESAJIBNzcSATc2ogEUEadyARQRV3cyARQQd3c2pB59KkoQFqIhggAyACcyABcSADIAJxcyADQR53IANBE3dzIANBCndzaiAUaiIBaiISIBEgCXNxIAlzaiASQRp3IBJBFXdzIBJBB3dzakGFldy9AmoiFCABIANzIAJxIAEgA3FzIAFBHncgAUETd3MgAUEKd3NqIBdqIgJqIhMgI2ogJiASaiAiIBFqICUgCWogEyASIBFzcSARc2ogE0EadyATQRV3cyATQQd3c2pBuMLs8AJqIhcgAiABcyADcSACIAFxcyACQR53IAJBE3dzIAJBCndzaiAZaiIDaiIJIBMgEnNxIBJzaiAJQRp3IAlBFXdzIAlBB3dzakH827HpBGoiGSADIAJzIAFxIAMgAnFzIANBHncgA0ETd3MgA0EKd3NqIBpqIgFqIhEgCSATc3EgE3NqIBFBGncgEUEVd3MgEUEHd3NqQZOa4JkFaiIaIAEgA3MgAnEgASADcXMgAUEedyABQRN3cyABQQp3c2ogGGoiAmoiEiARIAlzcSAJc2ogEkEadyASQRV3cyASQQd3c2pB1OapqAZqIhggAiABcyADcSACIAFxcyACQR53IAJBE3dzIAJBCndzaiAUaiIDaiITaiAoIBJqICQgEWogJyAJaiATIBIgEXNxIBFzaiATQRp3IBNBFXdzIBNBB3dzakG7laizB2oiFCADIAJzIAFxIAMgAnFzIANBHncgA0ETd3MgA0EKd3NqIBdqIgFqIgkgEyASc3EgEnNqIAlBGncgCUEVd3MgCUEHd3NqQa6Si454aiIXIAEgA3MgAnEgASADcXMgAUEedyABQRN3cyABQQp3c2ogGWoiAmoiESAJIBNzcSATc2ogEUEadyARQRV3cyARQQd3c2pBhdnIk3lqIhkgAiABcyADcSACIAFxcyACQR53IAJBE3dzIAJBCndzaiAaaiIDaiISIBEgCXNxIAlzaiASQRp3IBJBFXdzIBJBB3dzakGh0f+VemoiGiADIAJz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"; + var hash$a = "8c18dd94"; + var wasmJson$a = { + name: name$a, + data: data$a, + hash: hash$a + }; + new Mutex(); + new Mutex(); + function createSHA256() { + return WASMInterface(wasmJson$a, 32).then((wasm) => { + wasm.init(256); + const obj = { + init: () => { + wasm.init(256); + return obj; + }, + update: (data) => { + wasm.update(data); + return obj; + }, + // biome-ignore lint/suspicious/noExplicitAny: Conflict with IHasher type + digest: (outputType) => wasm.digest(outputType), + save: () => wasm.save(), + load: (data) => { + wasm.load(data); + return obj; + }, + blockSize: 64, + digestSize: 32 + }; + return obj; + }); + } + new Mutex(); + new Mutex(); + new Mutex(); + new Mutex(); + new Mutex(); + new Mutex(); + new Mutex(); + function calculateKeyBuffer(hasher, key) { + const { blockSize } = hasher; + const buf = getUInt8Buffer(key); + if (buf.length > blockSize) { + hasher.update(buf); + const uintArr = hasher.digest("binary"); + hasher.init(); + return uintArr; + } + return new Uint8Array(buf.buffer, buf.byteOffset, buf.length); + } + function calculateHmac(hasher, key) { + hasher.init(); + const { blockSize } = hasher; + const keyBuf = calculateKeyBuffer(hasher, key); + const keyBuffer = new Uint8Array(blockSize); + keyBuffer.set(keyBuf); + const opad = new Uint8Array(blockSize); + for (let i = 0; i < blockSize; i++) { + const v = keyBuffer[i]; + opad[i] = v ^ 92; + keyBuffer[i] = v ^ 54; + } + hasher.update(keyBuffer); + const obj = { + init: () => { + hasher.init(); + hasher.update(keyBuffer); + return obj; + }, + update: (data) => { + hasher.update(data); + return obj; + }, + digest: ((outputType) => { + const uintArr = hasher.digest("binary"); + hasher.init(); + hasher.update(opad); + hasher.update(uintArr); + return hasher.digest(outputType); + }), + save: () => { + throw new Error("save() not supported"); + }, + load: () => { + throw new Error("load() not supported"); + }, + blockSize: hasher.blockSize, + digestSize: hasher.digestSize + }; + return obj; + } + function createHMAC(hash2, key) { + if (!hash2 || !hash2.then) { + throw new Error('Invalid hash function is provided! Usage: createHMAC(createMD5(), "key").'); + } + return hash2.then((hasher) => calculateHmac(hasher, key)); + } + function calculatePBKDF2(digest, salt, iterations, hashLength, outputType) { + return __awaiter(this, void 0, void 0, function* () { + const DK = new Uint8Array(hashLength); + const block1 = new Uint8Array(salt.length + 4); + const block1View = new DataView(block1.buffer); + const saltBuffer = getUInt8Buffer(salt); + const saltUIntBuffer = new Uint8Array(saltBuffer.buffer, saltBuffer.byteOffset, saltBuffer.length); + block1.set(saltUIntBuffer); + let destPos = 0; + const hLen = digest.digestSize; + const l = Math.ceil(hashLength / hLen); + let T = null; + let U = null; + for (let i = 1; i <= l; i++) { + block1View.setUint32(salt.length, i); + digest.init(); + digest.update(block1); + T = digest.digest("binary"); + U = T.slice(); + for (let j = 1; j < iterations; j++) { + digest.init(); + digest.update(U); + U = digest.digest("binary"); + for (let k = 0; k < hLen; k++) { + T[k] ^= U[k]; + } + } + DK.set(T.subarray(0, hashLength - destPos), destPos); + destPos += hLen; + } + if (outputType === "binary") { + return DK; + } + const digestChars = new Uint8Array(hashLength * 2); + return getDigestHex(digestChars, DK, hashLength); + }); + } + const validateOptions$2 = (options) => { + if (!options || typeof options !== "object") { + throw new Error("Invalid options parameter. It requires an object."); + } + if (!options.hashFunction || !options.hashFunction.then) { + throw new Error('Invalid hash function is provided! Usage: pbkdf2("password", "salt", 1000, 32, createSHA1()).'); + } + if (!Number.isInteger(options.iterations) || options.iterations < 1) { + throw new Error("Iterations should be a positive number"); + } + if (!Number.isInteger(options.hashLength) || options.hashLength < 1) { + throw new Error("Hash length should be a positive number"); + } + if (options.outputType === void 0) { + options.outputType = "hex"; + } + if (!["hex", "binary"].includes(options.outputType)) { + throw new Error(`Insupported output type ${options.outputType}. Valid values: ['hex', 'binary']`); + } + }; + function pbkdf2$1(options) { + return __awaiter(this, void 0, void 0, function* () { + validateOptions$2(options); + const hmac2 = yield createHMAC(options.hashFunction, options.password); + return calculatePBKDF2(hmac2, options.salt, options.iterations, options.hashLength, options.outputType); + }); + } + var name$3 = "scrypt"; + var data$3 = "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cyICajYCOCAAIAAoAjwgAiAKakESdyAGc2o2AjwLvxIDFX8Bfg5/AkAgAkUNACAAQQd0IgNBQGoiBEEAKAKACCIFIAMgAmwiBmogAyABbGoiByADaiIIaiEJIAAgAkEHdCIKIAFBB3RqIgtsIQwgACALQYABamwhDSAAQQV0IgtBASALQQFLGyILQWBxIQ4gC0EBcSEPIAdBeGohECAHQXBqIREgB0FoaiESIAdBYGohEyAHQVhqIRQgB0FQaiEVIAdBSGohFiAHQUBqIRcgAa1Cf3whGCAEIAdqIRkgByAAQQh0IhpqIRsgACAKQYABamwhHCALQQRJIR1BACEeQQAhHwNAQQAoAoAIIiAgAyAfbGohIQJAIABFDQBBACEiAkAgHQ0AICAgHmohI0EAIQtBACEiA0AgByALaiIEICMgC2oiJCgCADYCACAEQQRqICRBBGooAgA2AgAgBEEIaiAkQQhqKAIANgIAIARBDGogJEEMaigCADYCACALQRBqIQsgDiAiQQRqIiJHDQALCyAPRQ0AIAcgIkECdCILaiAhIAtqKAIANgIACwJAIAFFDQBBACElIBwhIyAGISYDQCAFISQgACEiAkACQCAADQAgGyAXKQMANwMAIBsgFikDADcDCCAbIBUpAwA3AxAgGyAUKQMANwMYIBsgEykDADcDICAbIBIpAwA3AyggGyARKQMANwMwIBsgECkDADcDOAwBCwNAICQgJmoiCyAkIAxqIgQpAwA3AwAgC0EIaiAEQQhqKQMANwMAIAtBEGogBEEQaikDADcDACALQRhqIARBGGopAwA3AwAgC0EgaiAEQSBqKQMANwMAIAtBKGogBEEoaikDADcDACALQTBqIARBMGopAwA3AwAgC0E4aiAEQThqKQMANwMAIAtBwABqIARBwABqKQMANwMAIAtByABqIARByABqKQMANwMAIAtB0ABqIARB0ABqKQMANwMAIAtB2ABqIARB2ABqKQMANwMAIAtB4ABqIARB4ABqKQMANwMAIAtB6ABqIARB6ABqKQMANwMAIAtB8ABqIARB8ABqKQMANwMAIAtB+ABqIARB+ABqKQMANwMAICRBgAFqISQgIkF/aiIiDQALIAcgCCAbIAAQAiAFISQgACEiA0AgJCAjaiILICQgDWoiBCkDADcDACALQQhqIARBCGopAwA3AwAgC0EQaiAEQRBqKQMANwMAIAtBGGogBEEYaikDADcDACALQSBqIARBIGopAwA3AwAgC0EoaiAEQShqKQMANwMAIAtBMGogBEEwaikDADcDACALQThqIARBOGopAwA3AwAgC0HAAGogBEHAAGopAwA3AwAgC0HIAGogBEHIAGopAwA3AwAgC0HQAGogBEHQAGopAwA3AwAgC0HYAGogBEHYAGopAwA3AwAgC0HgAGogBEHgAGopAwA3AwAgC0HoAGogBEHoAGopAwA3AwAgC0HwAGogBEHwAGopAwA3AwAgC0H4AGogBEH4AGopAwA3AwAgJEGAAWohJCAiQX9qIiINAAsLIAggByAbIAAQAiAjIBpqISMgJiAaaiEmICVBAmoiJSABSQ0AC0EAISUDQAJAAkAgAA0AIBsgFykDADcDACAbIBYpAwA3AwggGyAVKQMANwMQIBsgFCkDADcDGCAbIBMpAwA3AyAgGyASKQMANwMoIBsgESkDADcDMCAbIBApAwA3AzgMAQsgACAKIBkpAgAgGIOnQQd0amwhJiAFISQgACEiA0AgJCAMaiILIAspAwAgJCAmaiIEKQMAhTcDACALQQhqIiMgIykDACAEQQhqKQMAhTcDACALQRBqIiMgIykDACAEQRBqKQMAhTcDACALQRhqIiMgIykDACAEQRhqKQMAhTcDACALQSBqIiMgIykDACAEQSBqKQMAhTcDACALQShqIiMgIykDACAEQShqKQMAhTcDACALQTBqIiMgIykDACAEQTBqKQMAhTcDACALQThqIiMgIykDACAEQThqKQMAhTcDACALQcAAaiIjICMpAwAgBEHAAGopAwCFNwMAIAtByABqIiMgIykDACAEQcgAaikDAIU3AwAgC0HQAGoiIyAjKQMAIARB0ABqKQMAhTcDACALQdgAaiIjICMpAwAgBEHYAGopAwCFNwMAIAtB4ABqIiMgIykDACAEQeAAaikDAIU3AwAgC0HoAGoiIyAjKQMAIARB6ABqKQMAhTcDACALQfAAaiIjICMpAwAgBEHwAGopAwCFNwMAIAtB+ABqIgsgCykDACAEQfgAaikDAIU3AwAgJEGAAWohJCAiQX9qIiINAAsgByAIIBsgABACIAAgCiAJKQIAIBiDp0EHdGpsISYgBSEkIAAhIgNAICQgDWoiCyALKQMAICQgJmoiBCkDAIU3AwAgC0EIaiIjICMpAwAgBEEIaikDAIU3AwAgC0EQaiIjICMpAwAgBEEQaikDAIU3AwAgC0EYaiIjICMpAwAgBEEYaikDAIU3AwAgC0EgaiIjICMpAwAgBEEgaikDAIU3AwAgC0EoaiIjICMpAwAgBEEoaikDAIU3AwAgC0EwaiIjICMpAwAgBEEwaikDAIU3AwAgC0E4aiIjICMpAwAgBEE4aikDAIU3AwAgC0HAAGoiIyAjKQMAIARBwABqKQMAhTcDACALQcgAaiIjICMpAwAgBEHIAGopAwCFNwMAIAtB0ABqIiMgIykDACAEQdAAaikDAIU3AwAgC0HYAGoiIyAjKQMAIARB2ABqKQMAhTcDACALQeAAaiIjICMpAwAgBEHgAGopAwCFNwMAIAtB6ABqIiMgIykDACAEQegAaikDAIU3AwAgC0HwAGoiIyAjKQMAIARB8ABqKQMAhTcDACALQfgAaiILIAspAwAgBEH4AGopAwCFNwMAICRBgAFqISQgIkF/aiIiDQALCyAIIAcgGyAAEAIgJUECaiIlIAFJDQALCwJAIABFDQBBACEiAkAgHQ0AICAgHmohI0EAIQtBACEiA0AgIyALaiIEIAcgC2oiJCgCADYCACAEQQRqICRBBGooAgA2AgAgBEEIaiAkQQhqKAIANgIAIARBDGogJEEMaigCADYCACALQRBqIQsgDiAiQQRqIiJHDQALCyAPRQ0AICEgIkECdCILaiAHIAtqKAIANgIACyAeIANqIR4gH0EBaiIfIAJHDQALCws="; + var hash$3 = "b32721f8"; + var wasmJson$3 = { + name: name$3, + data: data$3, + hash: hash$3 + }; + function scryptInternal(options) { + return __awaiter(this, void 0, void 0, function* () { + const { costFactor, blockSize, parallelism, hashLength } = options; + const SHA256Hasher = createSHA256(); + const blockData = yield pbkdf2$1({ + password: options.password, + salt: options.salt, + iterations: 1, + hashLength: 128 * blockSize * parallelism, + hashFunction: SHA256Hasher, + outputType: "binary" + }); + const scryptInterface = yield WASMInterface(wasmJson$3, 0); + const VSize = 128 * blockSize * costFactor; + const XYSize = 256 * blockSize; + scryptInterface.setMemorySize(blockData.length + VSize + XYSize); + scryptInterface.writeMemory(blockData, 0); + scryptInterface.getExports().scrypt(blockSize, costFactor, parallelism); + const expensiveSalt = scryptInterface.getMemory().subarray(0, 128 * blockSize * parallelism); + const outputData = yield pbkdf2$1({ + password: options.password, + salt: expensiveSalt, + iterations: 1, + hashLength, + hashFunction: SHA256Hasher, + outputType: "binary" + }); + if (options.outputType === "hex") { + const digestChars = new Uint8Array(hashLength * 2); + return getDigestHex(digestChars, outputData, hashLength); + } + return outputData; + }); + } + const isPowerOfTwo = (v) => v && !(v & v - 1); + const validateOptions$1 = (options) => { + if (!options || typeof options !== "object") { + throw new Error("Invalid options parameter. It requires an object."); + } + if (!Number.isInteger(options.blockSize) || options.blockSize < 1) { + throw new Error("Block size should be a positive number"); + } + if (!Number.isInteger(options.costFactor) || options.costFactor < 2 || !isPowerOfTwo(options.costFactor)) { + throw new Error("Cost factor should be a power of 2, greater than 1"); + } + if (!Number.isInteger(options.parallelism) || options.parallelism < 1) { + throw new Error("Parallelism should be a positive number"); + } + if (!Number.isInteger(options.hashLength) || options.hashLength < 1) { + throw new Error("Hash length should be a positive number."); + } + if (options.outputType === void 0) { + options.outputType = "hex"; + } + if (!["hex", "binary"].includes(options.outputType)) { + throw new Error(`Insupported output type ${options.outputType}. Valid values: ['hex', 'binary']`); + } + }; + function scrypt$1(options) { + return __awaiter(this, void 0, void 0, function* () { + validateOptions$1(options); + return scryptInternal(options); + }); + } + new Mutex(); + new Mutex(); + async function deriveKey$3(parameters, salt, password) { + const { + cost, + keyLength = 32, + memoryCost = 16384, + // in KB + parallelism = 1 + } = parameters; + return { + parameters: { + memoryCost, + parallelism + }, + derivedKey: await argon2id$1({ + password, + salt, + parallelism, + iterations: cost, + memorySize: memoryCost, + hashLength: keyLength, + outputType: "binary" + }) + }; + } + const argon2id = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + deriveKey: deriveKey$3 + }, Symbol.toStringTag, { value: "Module" })); + function getDigest(algorithm) { + switch (algorithm) { + case "PBKDF2/SHA-512": + return "SHA-512"; + case "PBKDF2/SHA-384": + return "SHA-384"; + case "PBKDF2/SHA-256": + default: + return "SHA-256"; + } + } + async function deriveKey$2(parameters, salt, password) { + const { algorithm, cost, keyLength = 32 } = parameters; + const passwordKey = await crypto.subtle.importKey( + "raw", + password, + { name: "PBKDF2" }, + false, + ["deriveKey"] + ); + const derivedKey = await crypto.subtle.deriveKey( + { + name: "PBKDF2", + salt, + iterations: cost, + hash: getDigest(algorithm) + }, + passwordKey, + { name: "AES-GCM", length: keyLength * 8 }, + true, + ["encrypt"] + ); + return { + derivedKey: new Uint8Array(await crypto.subtle.exportKey("raw", derivedKey)) + }; + } + const pbkdf2 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + deriveKey: deriveKey$2 + }, Symbol.toStringTag, { value: "Module" })); + async function deriveKey$1(parameters, salt, password) { + const { cost, keyLength = 32, memoryCost = 8, parallelism = 1 } = parameters; + return { + parameters: { + memoryCost, + parallelism + }, + derivedKey: await scrypt$1({ + password, + salt, + blockSize: memoryCost, + costFactor: cost, + hashLength: keyLength, + parallelism, + outputType: "binary" + }) + }; + } + const scrypt = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + deriveKey: deriveKey$1 + }, Symbol.toStringTag, { value: "Module" })); + function bufferStartsWith(buffer, prefix) { + if (prefix.length > buffer.length) { + return false; + } + for (let i = 0; i < prefix.length; i++) { + if (buffer[i] !== prefix[i]) { + return false; + } + } + return true; + } + function bufferToHex(buffer) { + return Array.from(new Uint8Array(buffer)).map((b) => b.toString(16).padStart(2, "0")).join(""); + } + function canonicalJSON(obj) { + return JSON.stringify(sortKeys(obj)); + } + function concatBuffers(a, b) { + const out = new Uint8Array(a.length + b.length); + out.set(a, 0); + out.set(b, a.length); + return out; + } + function hexToBuffer(hex) { + if (hex.length % 2 !== 0) { + throw new Error(`Hex string must have an even length. Got: ${hex}`); + } + const buffer = new ArrayBuffer(hex.length / 2); + const view = new DataView(buffer); + for (let i = 0; i < hex.length; i += 2) { + const byteString = hex.substring(i, i + 2); + const byteValue = parseInt(byteString, 16); + view.setUint8(i / 2, byteValue); + } + return new Uint8Array(buffer); + } + function constantTimeEqual(a, b) { + if (a.length !== b.length) { + return false; + } + let result = 0; + for (let i = 0; i < a.length; i++) { + result |= a.charCodeAt(i) ^ b.charCodeAt(i); + } + return result === 0; + } + async function delay(ms) { + await new Promise((resolve) => setTimeout(resolve, ms)); + } + async function hash(algorithm, data) { + return new Uint8Array( + await crypto.subtle.digest( + algorithm.toUpperCase(), + typeof data === "string" ? new TextEncoder().encode(data) : new Uint8Array(data) + ) + ); + } + async function hmac(algorithm, data, keyStr) { + const key = await crypto.subtle.importKey( + "raw", + new TextEncoder().encode(keyStr), + { + name: "HMAC", + hash: { name: algorithm } + }, + false, + ["sign", "verify"] + ); + const signature = await crypto.subtle.sign( + "HMAC", + key, + typeof data === "string" ? new TextEncoder().encode(data) : data + ); + return new Uint8Array(signature); + } + function sortKeys(obj) { + if (typeof obj !== "object" || obj === null || Array.isArray(obj)) { + return obj; + } + return Object.keys(obj).sort().reduce((acc, key) => { + const value = obj[key]; + if (value !== void 0) { + acc[key] = sortKeys(value); + } + return acc; + }, {}); + } + function timeDuration(start) { + return Math.floor((performance.now() - start) * 10) / 10; + } + async function deriveKey(parameters, salt, password) { + const { algorithm, keyLength = 32 } = parameters; + const iterations = Math.max(1, parameters.cost); + let data = void 0; + let derivedKey = void 0; + for (let i = 0; i < iterations; i++) { + if (i === 0) { + data = concatBuffers(salt, password); + } else { + data = derivedKey; + } + derivedKey = new Uint8Array( + (await crypto.subtle.digest(algorithm, data)).slice(0, keyLength) + ); + } + return { + parameters: {}, + derivedKey + }; + } + const sha = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + deriveKey + }, Symbol.toStringTag, { value: "Module" })); + var HmacAlgorithm = /* @__PURE__ */ ((HmacAlgorithm2) => { + HmacAlgorithm2["SHA_256"] = "SHA-256"; + HmacAlgorithm2["SHA_384"] = "SHA-384"; + HmacAlgorithm2["SHA_512"] = "SHA-512"; + return HmacAlgorithm2; + })(HmacAlgorithm || {}); + class PasswordBuffer { + constructor(nonce, mode = "uint32") { + this.nonce = nonce; + this.mode = mode; + this.buffer = new Uint8Array(this.nonce.length + this.COUNTER_BYTES); + this.buffer.set(this.nonce, 0); + this.dataView = new DataView(this.buffer.buffer); + } + nonce; + mode; + COUNTER_BYTES = 4; + buffer; + dataView; + encoder = new TextEncoder(); + /** + * Appends the counter to the nonce buffer. + * In 'string' mode, encodes the counter as a UTF-8 string. + * In 'uint32' mode, writes the counter as a big-endian 32-bit integer. + */ + setCounter(n) { + if (this.mode === "string") { + return concatBuffers(this.nonce, this.encoder.encode(n.toString())); + } + this.dataView.setUint32(this.nonce.length, n, false); + return this.buffer; + } + } + async function createChallenge(options) { + const { + algorithm, + counter, + counterMode = "uint32", + cost, + deriveKey: deriveKey2, + data, + expiresAt, + hmacAlgorithm = HmacAlgorithm.SHA_256, + hmacKeySignatureSecret, + hmacSignatureSecret, + keyLength = 32, + keyPrefix = "00", + keyPrefixLength = keyLength / 2, + memoryCost, + parallelism + } = options; + const parameters = { + algorithm, + nonce: bufferToHex(crypto.getRandomValues(new Uint8Array(16))), + salt: bufferToHex(crypto.getRandomValues(new Uint8Array(16))), + cost, + keyLength, + memoryCost, + parallelism, + keyPrefix, + expiresAt: expiresAt instanceof Date ? Math.floor(expiresAt.getTime() / 1e3) : expiresAt, + data + }; + let deriveKeyResult = null; + if (counter !== void 0) { + const nonceBuf = hexToBuffer(parameters.nonce); + deriveKeyResult = await deriveKey2( + parameters, + hexToBuffer(parameters.salt), + new PasswordBuffer(nonceBuf, counterMode).setCounter(counter) + ); + if (deriveKeyResult.parameters) { + Object.assign(parameters, deriveKeyResult.parameters); + } + parameters.keyPrefix = bufferToHex(deriveKeyResult.derivedKey.slice(0, keyPrefixLength)); + } + if (!hmacSignatureSecret) { + return { + parameters: sortKeys(parameters) + }; + } + return signChallenge( + hmacAlgorithm, + parameters, + deriveKeyResult?.derivedKey, + hmacSignatureSecret, + hmacKeySignatureSecret + ); + } + async function solveChallenge(options) { + const { + challenge, + controller, + counterMode = "uint32", + counterStart = 0, + counterStep = 1, + deriveKey: deriveKey2, + timeout = 9e4 + } = options; + const { nonce, keyPrefix, salt } = challenge.parameters; + const nonceBuf = hexToBuffer(nonce); + const saltBuf = hexToBuffer(salt); + const keyPrefixBuf = keyPrefix.length % 2 === 0 ? hexToBuffer(keyPrefix) : null; + const password = new PasswordBuffer(nonceBuf, counterMode); + const start = performance.now(); + let counter = counterStart; + let iterations = 0; + let derivedKeyHex = ""; + let lastYield = start; + while (true) { + if (controller?.signal.aborted || timeout && iterations % 10 === 0 && performance.now() - start > timeout) { + return null; + } + const { derivedKey } = await deriveKey2( + challenge.parameters, + saltBuf, + password.setCounter(counter) + ); + if (iterations % 10 === 0 && performance.now() - lastYield > 200) { + await delay(0); + lastYield = performance.now(); + } + if (keyPrefixBuf ? bufferStartsWith(derivedKey, keyPrefixBuf) : bufferToHex(derivedKey).startsWith(keyPrefix)) { + derivedKeyHex = bufferToHex(derivedKey); + break; + } + counter = counter + counterStep; + iterations = iterations + 1; + } + return { + counter, + derivedKey: derivedKeyHex, + time: timeDuration(start) + }; + } + async function solveChallengeWorkers(options) { + const { + challenge, + concurrency = navigator.hardwareConcurrency, + controller = new AbortController(), + createWorker, + onOutOfMemory = (c) => c > 1 ? Math.floor(c / 2) : 0, + counterMode, + timeout = 9e4 + } = options; + const workersConcurrency = Math.min(16, Math.max(1, concurrency)); + const workersInstances = []; + const terminate = () => { + for (const worker of workersInstances) { + worker.terminate(); + } + }; + for (let i = 0; i < workersConcurrency; i++) { + workersInstances.push(await createWorker(challenge.parameters.algorithm)); + } + let solution = null; + try { + solution = await Promise.race( + workersInstances.map((worker, i) => { + controller.signal.addEventListener("abort", () => { + worker.postMessage({ type: "abort" }); + }); + return new Promise((resolve, reject) => { + worker.addEventListener("error", (err) => { + reject(err); + }); + worker.addEventListener("message", (message) => { + if (message.data) { + for (const w of workersInstances) { + if (w !== worker) { + w.postMessage({ type: "abort" }); + } + } + if (message.data.error) { + return reject(new Error(message.data.error)); + } + } + resolve(message.data); + }); + worker.postMessage({ + challenge, + counterMode, + counterStart: i, + counterStep: workersConcurrency, + timeout, + type: "work" + }); + }); + }) + ); + } catch (err) { + const isOOM = err instanceof Error && !!err?.message?.includes("Out of memory"); + if (isOOM) { + if (onOutOfMemory) { + terminate(); + const retryConcurrency = onOutOfMemory(workersConcurrency); + if (retryConcurrency) { + return solveChallengeWorkers({ + ...options, + challenge, + controller, + concurrency: retryConcurrency, + createWorker + }); + } + } + } + throw err; + } finally { + terminate(); + } + if (controller.signal.aborted) { + return null; + } + return solution || null; + } + async function signChallenge(algorithm, parameters, derivedKey, hmacSignatureSecret, hmacKeySignatureSecret) { + if (derivedKey && hmacKeySignatureSecret) { + parameters.keySignature = bufferToHex( + await hmac(algorithm, derivedKey, hmacKeySignatureSecret) + ); + } + parameters = sortKeys(parameters); + return { + parameters, + signature: bufferToHex(await hmac(algorithm, JSON.stringify(parameters), hmacSignatureSecret)) + }; + } + async function verifySolution(options) { + const { + challenge, + counterMode, + deriveKey: deriveKey2, + hmacAlgorithm = HmacAlgorithm.SHA_256, + hmacKeySignatureSecret, + hmacSignatureSecret, + solution + } = options; + const start = performance.now(); + if (challenge.parameters.expiresAt && challenge.parameters.expiresAt < Date.now() / 1e3) { + return { + expired: true, + invalidSignature: null, + invalidSolution: null, + time: timeDuration(start), + verified: false + }; + } + if (!challenge.signature) { + return { + expired: false, + invalidSignature: true, + invalidSolution: null, + time: timeDuration(start), + verified: false + }; + } + const signatureCheck = bufferToHex( + await hmac(hmacAlgorithm, canonicalJSON(challenge.parameters), hmacSignatureSecret) + ); + const signatureVerified = constantTimeEqual(challenge.signature, signatureCheck); + if (!signatureVerified) { + return { + expired: false, + invalidSignature: true, + invalidSolution: null, + time: timeDuration(start), + verified: false + }; + } + if (challenge.parameters.keySignature && hmacKeySignatureSecret) { + const derivedKeySignatureCheck = bufferToHex( + await hmac(hmacAlgorithm, hexToBuffer(solution.derivedKey), hmacKeySignatureSecret) + ); + const derivedKeySignatureValid = constantTimeEqual( + challenge.parameters.keySignature, + derivedKeySignatureCheck + ); + return { + expired: false, + invalidSignature: false, + invalidSolution: !derivedKeySignatureValid, + time: timeDuration(start), + verified: derivedKeySignatureValid + }; + } + const nonceBuf = hexToBuffer(challenge.parameters.nonce); + const saltBuf = hexToBuffer(challenge.parameters.salt); + const { derivedKey } = await deriveKey2( + challenge.parameters, + saltBuf, + new PasswordBuffer(nonceBuf, counterMode).setCounter(solution.counter) + ); + const derivedKeyHex = bufferToHex(derivedKey); + const invalidSolution = !constantTimeEqual(derivedKeyHex, solution.derivedKey); + return { + expired: false, + invalidSignature: false, + invalidSolution, + time: timeDuration(start), + verified: !invalidSolution && signatureVerified + }; + } + function parseVerificationData(data, convertToArray = ["fields", "reasons"]) { + const verificationData = {}; + try { + const params = new URLSearchParams(data); + for (const [key, value] of params.entries()) { + if (value === "true" || value === "false") { + verificationData[key] = value === "true"; + } else if (value !== null && /^\d+?$/.test(value)) { + verificationData[key] = parseInt(value, 10); + } else if (value !== null && /^\d+\.\d+?$/.test(value)) { + verificationData[key] = parseFloat(value); + } else if (value !== null) { + verificationData[key] = convertToArray.includes(key) ? value.trim().split(",") : value.trim(); + } + } + } catch { + return null; + } + return verificationData; + } + async function verifyFieldsHash(options) { + const { algorithm = "SHA-256", formData, fields, fieldsHash } = options; + const data = formData instanceof FormData ? Object.fromEntries(formData) : formData; + const lines = []; + for (const field of fields) { + lines.push(String(data[field] || "")); + } + return bufferToHex(await hash(algorithm, lines.join("\n"))) === fieldsHash; + } + async function verifyServerSignature(options) { + const { hmacSecret, payload } = options; + const start = performance.now(); + const signature = bufferToHex( + await hmac( + payload.algorithm, + await hash(payload.algorithm, payload.verificationData), + hmacSecret + ) + ); + const verificationData = parseVerificationData(payload.verificationData); + const expired = !!verificationData && !!verificationData.expire && verificationData.expire < Math.floor(Date.now() / 1e3); + const invalidSignature = !constantTimeEqual(payload.signature, signature); + const invalidSolution = !verificationData || verificationData.verified !== true || payload.verified !== true; + const verified = !expired && !invalidSignature && !invalidSolution; + return { + expired, + invalidSignature, + invalidSolution, + time: timeDuration(start), + verificationData, + verified + }; + } + exports2.argon2id = argon2id; + exports2.createChallenge = createChallenge; + exports2.parseVerificationData = parseVerificationData; + exports2.pbkdf2 = pbkdf2; + exports2.scrypt = scrypt; + exports2.sha = sha; + exports2.solveChallenge = solveChallenge; + exports2.solveChallengeWorkers = solveChallengeWorkers; + exports2.verifyFieldsHash = verifyFieldsHash; + exports2.verifyServerSignature = verifyServerSignature; + exports2.verifySolution = verifySolution; + Object.defineProperty(exports2, Symbol.toStringTag, { value: "Module" }); +})); diff --git a/frontend/node_modules/altcha/dist/lib/index.umd.min.cjs b/frontend/node_modules/altcha/dist/lib/index.umd.min.cjs new file mode 100644 index 0000000..a2fae49 --- /dev/null +++ b/frontend/node_modules/altcha/dist/lib/index.umd.min.cjs @@ -0,0 +1 @@ +!function(A,I){"object"==typeof exports&&"undefined"!=typeof module?I(exports):"function"==typeof define&&define.amd?define(["exports"],I):I((A="undefined"!=typeof globalThis?globalThis:A||self).plibow={})}(this,function(A){"use strict";function I(A,I,g,i){return new(g||(g=Promise))(function(I,B){function Q(A){try{e(i.next(A))}catch(A){B(A)}}function C(A){try{e(i.throw(A))}catch(A){B(A)}}function e(A){var i;A.done?I(A.value):(i=A.value,i instanceof g?i:new g(function(A){A(i)})).then(Q,C)}e((i=i.apply(A,[])).next())})}"function"==typeof SuppressedError&&SuppressedError;class g{constructor(){this.mutex=Promise.resolve()}lock(){let A=()=>{};return this.mutex=this.mutex.then(()=>new Promise(A)),new Promise(I=>{A=I})}dispatch(A){return I(this,0,void 0,function*(){const I=yield this.lock();try{return yield Promise.resolve(A())}finally{I()}})}}var i;const B="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:global,Q=null!==(i=B.Buffer)&&void 0!==i?i:null,C=B.TextEncoder?new B.TextEncoder:null;function e(A,I){return(15&A)+(A>>6|A>>3&8)<<4|(15&I)+(I>>6|I>>3&8)}function E(A,I){const g=I.length>>1;for(let i=0;i>>4;A[i++]=g>9?g+t:g+o,g=15&I[B],A[i++]=g>9?g+t:g+o}return String.fromCharCode.apply(null,A)}const a=null!==Q?A=>{if("string"==typeof A){const I=Q.from(A,"utf8");return new Uint8Array(I.buffer,I.byteOffset,I.length)}if(Q.isBuffer(A))return new Uint8Array(A.buffer,A.byteOffset,A.length);if(ArrayBuffer.isView(A))return new Uint8Array(A.buffer,A.byteOffset,A.byteLength);throw new Error("Invalid data type!")}:A=>{if("string"==typeof A)return C.encode(A);if(ArrayBuffer.isView(A))return new Uint8Array(A.buffer,A.byteOffset,A.byteLength);throw new Error("Invalid data type!")},c="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",r=new Uint8Array(256);for(let A=0;A<64;A++)r[c.charCodeAt(A)]=A;function h(A,I=!0){const g=A.length,i=g%3,B=[],Q=g-i;for(let I=0;I>18&63)+c.charAt(g>>12&63)+c.charAt(g>>6&63)+c.charAt(63&g);B.push(i)}if(1===i){const i=A[g-1],Q=c.charAt(i>>2),C=c.charAt(i<<4&63);B.push(`${Q}${C}`),I&&B.push("==")}else if(2===i){const i=(A[g-2]<<8)+A[g-1],Q=c.charAt(i>>10),C=c.charAt(i>>4&63),e=c.charAt(i<<2&63);B.push(`${Q}${C}${e}`),I&&B.push("=")}return B.join("")}function w(A){const I=function(A){let I=Math.floor(.75*A.length);const g=A.length;return"="===A[g-1]&&(I-=1,"="===A[g-2]&&(I-=1)),I}(A),g=A.length,i=new Uint8Array(I);let B=0;for(let I=0;I>4,B+=1,i[B]=(15&Q)<<4|C>>2,B+=1,i[B]=(3&C)<<6|63&e,B+=1}return i}const D=16384,d=new g,y=new Map;function F(A,g){return I(this,0,void 0,function*(){let i=null,B=null,Q=!1;if("undefined"==typeof WebAssembly)throw new Error("WebAssembly is not supported in this environment!");const C=()=>new DataView(i.exports.memory.buffer).getUint32(i.exports.STATE_SIZE,!0),t=d.dispatch(()=>I(this,0,void 0,function*(){if(!y.has(A.name)){const I=w(A.data),g=WebAssembly.compile(I);y.set(A.name,g)}const I=yield y.get(A.name);i=yield WebAssembly.instantiate(I,{})})),o=(A=null)=>{Q=!0,i.exports.Hash_Init(A)},c=A=>{if(!Q)throw new Error("update() called before init()");(A=>{let I=0;for(;I{if(!Q)throw new Error("digest() called before init()");return Q=!1,i.exports.Hash_Final(I),"binary"===A?B.slice(0,g):n(r,B,g)},F=A=>"string"==typeof A?A.length<4096:A.byteLength!0;break;case"blake2b":case"blake2s":s=(A,I)=>I<=512&&F(A);break;case"blake3":s=(A,I)=>0===I&&F(A);break;case"xxhash64":case"xxhash3":case"xxhash128":case"crc64":s=()=>!1}return yield(()=>I(this,0,void 0,function*(){i||(yield t);const A=i.exports.Hash_GetBuffer(),I=i.exports.memory.buffer;B=new Uint8Array(I,A,D)}))(),{getMemory:()=>B,writeMemory:(A,I=0)=>{B.set(A,I)},getExports:()=>i.exports,setMemorySize:A=>{i.exports.Hash_SetMemorySize(A);const I=i.exports.Hash_GetBuffer(),g=i.exports.memory.buffer;B=new Uint8Array(g,I,A)},init:o,update:c,digest:h,save:()=>{if(!Q)throw new Error("save() can only be called after init() and before digest()");const I=i.exports.Hash_GetState(),g=C(),B=i.exports.memory.buffer,e=new Uint8Array(B,I,g),t=new Uint8Array(4+g);return E(t,A.hash),t.set(e,4),t},load:I=>{if(!(I instanceof Uint8Array))throw new Error("load() expects an Uint8Array generated by save()");const g=i.exports.Hash_GetState(),B=C(),E=4+B,t=i.exports.memory.buffer;if(I.length!==E)throw new Error(`Bad state length (expected ${E} bytes, got ${I.length})`);if(!function(A,I){if(A.length!==2*I.length)return!1;for(let g=0;g{if(!s(A,I))return o(I),c(A),h("hex",Q);const C=a(A);return B.set(C),i.exports.Hash_Calculate(C.length,I,Q),n(r,B,g)},hashLength:g}})}new g;var s={name:"argon2",data:"AGFzbQEAAAABKQVgAX8Bf2AAAX9gEH9/f39/f39/f39/f39/f38AYAR/f39/AGACf38AAwYFAAECAwQFBgEBAoCAAgYIAX8BQZCoBAsHQQQGbWVtb3J5AgASSGFzaF9TZXRNZW1vcnlTaXplAAAOSGFzaF9HZXRCdWZmZXIAAQ5IYXNoX0NhbGN1bGF0ZQAECvEyBVgBAn9BACEBAkAgAEEAKAKICCICRg0AAkAgACACayIAQRB2IABBgIB8cSAASWoiAEAAQX9HDQBB/wHADwtBACEBQQBBACkDiAggAEEQdK18NwOICAsgAcALcAECfwJAQQAoAoAIIgANAEEAPwBBEHQiADYCgAhBACgCiAgiAUGAgCBGDQACQEGAgCAgAWsiAEEQdiAAQYCAfHEgAElqIgBAAEF/Rw0AQQAPC0EAQQApA4gIIABBEHStfDcDiAhBACgCgAghAAsgAAvcDgECfiAAIAQpAwAiECAAKQMAIhF8IBFCAYZC/v///x+DIBBC/////w+DfnwiEDcDACAMIBAgDCkDAIVCIIkiEDcDACAIIBAgCCkDACIRfCARQgGGQv7///8fgyAQQv////8Pg358IhA3AwAgBCAQIAQpAwCFQiiJIhA3AwAgACAQIAApAwAiEXwgEEL/////D4MgEUIBhkL+////H4N+fCIQNwMAIAwgECAMKQMAhUIwiSIQNwMAIAggECAIKQMAIhF8IBBC/////w+DIBFCAYZC/v///x+DfnwiEDcDACAEIBAgBCkDAIVCAYk3AwAgASAFKQMAIhAgASkDACIRfCARQgGGQv7///8fgyAQQv////8Pg358IhA3AwAgDSAQIA0pAwCFQiCJIhA3AwAgCSAQIAkpAwAiEXwgEUIBhkL+////H4MgEEL/////D4N+fCIQNwMAIAUgECAFKQMAhUIoiSIQNwMAIAEgECABKQMAIhF8IBBC/////w+DIBFCAYZC/v///x+DfnwiEDcDACANIBAgDSkDAIVCMIkiEDcDACAJIBAgCSkDACIRfCAQQv////8PgyARQgGGQv7///8fg358IhA3AwAgBSAQIAUpAwCFQgGJNwMAIAIgBikDACIQIAIpAwAiEXwgEUIBhkL+////H4MgEEL/////D4N+fCIQNwMAIA4gECAOKQMAhUIgiSIQNwMAIAogECAKKQMAIhF8IBFCAYZC/v///x+DIBBC/////w+DfnwiEDcDACAGIBAgBikDAIVCKIkiEDcDACACIBAgAikDACIRfCAQQv////8PgyARQgGGQv7///8fg358IhA3AwAgDiAQIA4pAwCFQjCJIhA3AwAgCiAQIAopAwAiEXwgEEL/////D4MgEUIBhkL+////H4N+fCIQNwMAIAYgECAGKQMAhUIBiTcDACADIAcpAwAiECADKQMAIhF8IBFCAYZC/v///x+DIBBC/////w+DfnwiEDcDACAPIBAgDykDAIVCIIkiEDcDACALIBAgCykDACIRfCARQgGGQv7///8fgyAQQv////8Pg358IhA3AwAgByAQIAcpAwCFQiiJIhA3AwAgAyAQIAMpAwAiEXwgEEL/////D4MgEUIBhkL+////H4N+fCIQNwMAIA8gECAPKQMAhUIwiSIQNwMAIAsgECALKQMAIhF8IBBC/////w+DIBFCAYZC/v///x+DfnwiEDcDACAHIBAgBykDAIVCAYk3AwAgACAFKQMAIhAgACkDACIRfCARQgGGQv7///8fgyAQQv////8Pg358IhA3AwAgDyAQIA8pAwCFQiCJIhA3AwAgCiAQIAopAwAiEXwgEUIBhkL+////H4MgEEL/////D4N+fCIQNwMAIAUgECAFKQMAhUIoiSIQNwMAIAAgECAAKQMAIhF8IBBC/////w+DIBFCAYZC/v///x+DfnwiEDcDACAPIBAgDykDAIVCMIkiEDcDACAKIBAgCikDACIRfCAQQv////8PgyARQgGGQv7///8fg358IhA3AwAgBSAQIAUpAwCFQgGJNwMAIAEgBikDACIQIAEpAwAiEXwgEUIBhkL+////H4MgEEL/////D4N+fCIQNwMAIAwgECAMKQMAhUIgiSIQNwMAIAsgECALKQMAIhF8IBFCAYZC/v///x+DIBBC/////w+DfnwiEDcDACAGIBAgBikDAIVCKIkiEDcDACABIBAgASkDACIRfCAQQv////8PgyARQgGGQv7///8fg358IhA3AwAgDCAQIAwpAwCFQjCJIhA3AwAgCyAQIAspAwAiEXwgEEL/////D4MgEUIBhkL+////H4N+fCIQNwMAIAYgECAGKQMAhUIBiTcDACACIAcpAwAiECACKQMAIhF8IBFCAYZC/v///x+DIBBC/////w+DfnwiEDcDACANIBAgDSkDAIVCIIkiEDcDACAIIBAgCCkDACIRfCARQgGGQv7///8fgyAQQv////8Pg358IhA3AwAgByAQIAcpAwCFQiiJIhA3AwAgAiAQIAIpAwAiEXwgEEL/////D4MgEUIBhkL+////H4N+fCIQNwMAIA0gECANKQMAhUIwiSIQNwMAIAggECAIKQMAIhF8IBBC/////w+DIBFCAYZC/v///x+DfnwiEDcDACAHIBAgBykDAIVCAYk3AwAgAyAEKQMAIhAgAykDACIRfCARQgGGQv7///8fgyAQQv////8Pg358IhA3AwAgDiAQIA4pAwCFQiCJIhA3AwAgCSAQIAkpAwAiEXwgEUIBhkL+////H4MgEEL/////D4N+fCIQNwMAIAQgECAEKQMAhUIoiSIQNwMAIAMgECADKQMAIhF8IBBC/////w+DIBFCAYZC/v///x+DfnwiEDcDACAOIBAgDikDAIVCMIkiEDcDACAJIBAgCSkDACIRfCAQQv////8PgyARQgGGQv7///8fg358IhA3AwAgBCAQIAQpAwCFQgGJNwMAC98aAQN/QQAhBEEAIAIpAwAgASkDAIU3A5AIQQAgAikDCCABKQMIhTcDmAhBACACKQMQIAEpAxCFNwOgCEEAIAIpAxggASkDGIU3A6gIQQAgAikDICABKQMghTcDsAhBACACKQMoIAEpAyiFNwO4CEEAIAIpAzAgASkDMIU3A8AIQQAgAikDOCABKQM4hTcDyAhBACACKQNAIAEpA0CFNwPQCEEAIAIpA0ggASkDSIU3A9gIQQAgAikDUCABKQNQhTcD4AhBACACKQNYIAEpA1iFNwPoCEEAIAIpA2AgASkDYIU3A/AIQQAgAikDaCABKQNohTcD+AhBACACKQNwIAEpA3CFNwOACUEAIAIpA3ggASkDeIU3A4gJQQAgAikDgAEgASkDgAGFNwOQCUEAIAIpA4gBIAEpA4gBhTcDmAlBACACKQOQASABKQOQAYU3A6AJQQAgAikDmAEgASkDmAGFNwOoCUEAIAIpA6ABIAEpA6ABhTcDsAlBACACKQOoASABKQOoAYU3A7gJQQAgAikDsAEgASkDsAGFNwPACUEAIAIpA7gBIAEpA7gBhTcDyAlBACACKQPAASABKQPAAYU3A9AJQQAgAikDyAEgASkD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",hash:"e4cdc523"},k={name:"blake2b",data:"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",hash:"c6f286e6"};function p(A){return!Number.isInteger(A)||A<8||A>512||A%8!=0?new Error("Invalid variant! Valid values: 8, 16, ..., 512"):null}function f(A=512,I=null){if(p(A))return Promise.reject(p(A));let g=null,i=A;if(null!==I){if(g=a(I),g.length>64)return Promise.reject(new Error("Max key length is 64 bytes"));B=A,Q=g.length,i=B|Q<<16}var B,Q;const C=A/8;return F(k,C).then(A=>{i>512&&A.writeMemory(g),A.init(i);const I={init:i>512?()=>(A.writeMemory(g),A.init(i),I):()=>(A.init(i),I),update:g=>(A.update(g),I),digest:I=>A.digest(I),save:()=>A.save(),load:g=>(A.load(g),I),blockSize:128,digestSize:C};return I})}new g;const S=new DataView(new ArrayBuffer(4));function N(A){return S.setInt32(0,A,!0),new Uint8Array(S.buffer)}function G(A,g,i){return I(this,0,void 0,function*(){if(i<=64){const A=yield f(8*i);return A.update(N(i)),A.update(g),A.digest("binary")}const I=Math.ceil(i/32)-2,B=new Uint8Array(i);A.init(),A.update(N(i)),A.update(g);let Q=A.digest("binary");B.set(Q.subarray(0,32),0);for(let g=1;g{var I;if(!A||"object"!=typeof A)throw new Error("Invalid options parameter. It requires an object.");if(!A.password)throw new Error("Password must be specified");if(A.password=a(A.password),A.password.length<1)throw new Error("Password must be specified");if(!A.salt)throw new Error("Salt must be specified");if(A.salt=a(A.salt),A.salt.length<8)throw new Error("Salt should be at least 8 bytes long");if(A.secret=a(null!==(I=A.secret)&&void 0!==I?I:""),!Number.isInteger(A.iterations)||A.iterations<1)throw new Error("Iterations should be a positive number");if(!Number.isInteger(A.parallelism)||A.parallelism<1)throw new Error("Parallelism should be a positive number");if(!Number.isInteger(A.hashLength)||A.hashLength<4)throw new Error("Hash length should be at least 4 bytes.");if(!Number.isInteger(A.memorySize))throw new Error("Memory size should be specified.");if(A.memorySize<8*A.parallelism)throw new Error("Memory size should be at least 8 * parallelism.");if(void 0===A.outputType&&(A.outputType="hex"),!["hex","binary","encoded"].includes(A.outputType))throw new Error(`Insupported output type ${A.outputType}. Valid values: ['hex', 'binary', 'encoded']`)})(A),M(Object.assign(Object.assign({},A),{hashType:"id"}))})}new g,new g,new g,new g,new g,new g,new g,new g,new g;var U={name:"sha256",data:"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c2pBx6KerX1qIhkgASADcyACcSABIANxcyABQR53IAFBE3dzIAFBCndzaiAaaiICaiIJIBMgEnNxIBJzaiAJQRp3IAlBFXdzIAlBB3dzakHRxqk2aiIaIAIgAXMgA3EgAiABcXMgAkEedyACQRN3cyACQQp3c2ogGGoiA2oiESAJIBNzcSATc2ogEUEadyARQRV3cyARQQd3c2pB59KkoQFqIhggAyACcyABcSADIAJxcyADQR53IANBE3dzIANBCndzaiAUaiIBaiISIBEgCXNxIAlzaiASQRp3IBJBFXdzIBJBB3dzakGFldy9AmoiFCABIANzIAJxIAEgA3FzIAFBHncgAUETd3MgAUEKd3NqIBdqIgJqIhMgI2ogJiASaiAiIBFqICUgCWogEyASIBFzcSARc2ogE0EadyATQRV3cyATQQd3c2pBuMLs8AJqIhcgAiABcyADcSACIAFxcyACQR53IAJBE3dzIAJBCndzaiAZaiIDaiIJIBMgEnNxIBJzaiAJQRp3IAlBFXdzIAlBB3dzakH827HpBGoiGSADIAJzIAFxIAMgAnFzIANBHncgA0ETd3MgA0EKd3NqIBpqIgFqIhEgCSATc3EgE3NqIBFBGncgEUEVd3MgEUEHd3NqQZOa4JkFaiIaIAEgA3MgAnEgASADcXMgAUEedyABQRN3cyABQQp3c2ogGGoiAmoiEiARIAlzcSAJc2ogEkEadyASQRV3cyASQQd3c2pB1OapqAZqIhggAiABcyADcSACIAFxcyACQR53IAJBE3dzIAJBCndzaiAUaiIDaiITaiAoIBJqICQgEWogJyAJaiATIBIgEXNxIBFzaiATQRp3IBNBFXdzIBNBB3dzakG7laizB2oiFCADIAJzIAFxIAMgAnFzIANBHncgA0ETd3MgA0EKd3NqIBdqIgFqIgkgEyASc3EgEnNqIAlBGncgCUEVd3MgCUEHd3NqQa6Si454aiIXIAEgA3MgAnEgASADcXMgAUEedyABQRN3cyABQQp3c2ogGWoiAmoiESAJIBNzcSATc2ogEUEadyARQRV3cyARQQd3c2pBhdnIk3lqIhkgAiABcyADcSACIAFxcyACQR53IAJBE3dzIAJBCndzaiAaaiIDaiISIBEgCXNxIAlzaiASQRp3IBJBFXdzIBJBB3dzakGh0f+VemoiGiADIAJz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",hash:"8c18dd94"};function J(A,I){A.init();const{blockSize:g}=A,i=function(A,I){const{blockSize:g}=A,i=a(I);if(i.length>g){A.update(i);const I=A.digest("binary");return A.init(),I}return new Uint8Array(i.buffer,i.byteOffset,i.length)}(A,I),B=new Uint8Array(g);B.set(i);const Q=new Uint8Array(g);for(let A=0;A(A.init(),A.update(B),C),update:I=>(A.update(I),C),digest:I=>{const g=A.digest("binary");return A.init(),A.update(Q),A.update(g),A.digest(I)},save:()=>{throw new Error("save() not supported")},load:()=>{throw new Error("load() not supported")},blockSize:A.blockSize,digestSize:A.digestSize};return C}new g,new g,new g,new g,new g,new g,new g,new g,new g;function u(A){return I(this,0,void 0,function*(){(A=>{if(!A||"object"!=typeof A)throw new Error("Invalid options parameter. It requires an object.");if(!A.hashFunction||!A.hashFunction.then)throw new Error('Invalid hash function is provided! Usage: pbkdf2("password", "salt", 1000, 32, createSHA1()).');if(!Number.isInteger(A.iterations)||A.iterations<1)throw new Error("Iterations should be a positive number");if(!Number.isInteger(A.hashLength)||A.hashLength<1)throw new Error("Hash length should be a positive number");if(void 0===A.outputType&&(A.outputType="hex"),!["hex","binary"].includes(A.outputType))throw new Error(`Insupported output type ${A.outputType}. Valid values: ['hex', 'binary']`)})(A);return function(A,g,i,B,Q){return I(this,0,void 0,function*(){const I=new Uint8Array(B),C=new Uint8Array(g.length+4),e=new DataView(C.buffer),E=a(g),t=new Uint8Array(E.buffer,E.byteOffset,E.length);C.set(t);let o=0;const c=A.digestSize,r=Math.ceil(B/c);let h=null,w=null;for(let Q=1;Q<=r;Q++){e.setUint32(g.length,Q),A.init(),A.update(C),h=A.digest("binary"),w=h.slice();for(let I=1;IJ(A,I))}(A.hashFunction,A.password),A.salt,A.iterations,A.hashLength,A.outputType)})}var H={name:"scrypt",data:"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cyICajYCOCAAIAAoAjwgAiAKakESdyAGc2o2AjwLvxIDFX8Bfg5/AkAgAkUNACAAQQd0IgNBQGoiBEEAKAKACCIFIAMgAmwiBmogAyABbGoiByADaiIIaiEJIAAgAkEHdCIKIAFBB3RqIgtsIQwgACALQYABamwhDSAAQQV0IgtBASALQQFLGyILQWBxIQ4gC0EBcSEPIAdBeGohECAHQXBqIREgB0FoaiESIAdBYGohEyAHQVhqIRQgB0FQaiEVIAdBSGohFiAHQUBqIRcgAa1Cf3whGCAEIAdqIRkgByAAQQh0IhpqIRsgACAKQYABamwhHCALQQRJIR1BACEeQQAhHwNAQQAoAoAIIiAgAyAfbGohIQJAIABFDQBBACEiAkAgHQ0AICAgHmohI0EAIQtBACEiA0AgByALaiIEICMgC2oiJCgCADYCACAEQQRqICRBBGooAgA2AgAgBEEIaiAkQQhqKAIANgIAIARBDGogJEEMaigCADYCACALQRBqIQsgDiAiQQRqIiJHDQALCyAPRQ0AIAcgIkECdCILaiAhIAtqKAIANgIACwJAIAFFDQBBACElIBwhIyAGISYDQCAFISQgACEiAkACQCAADQAgGyAXKQMANwMAIBsgFikDADcDCCAbIBUpAwA3AxAgGyAUKQMANwMYIBsgEykDADcDICAbIBIpAwA3AyggGyARKQMANwMwIBsgECkDADcDOAwBCwNAICQgJmoiCyAkIAxqIgQpAwA3AwAgC0EIaiAEQQhqKQMANwMAIAtBEGogBEEQaikDADcDACALQRhqIARBGGopAwA3AwAgC0EgaiAEQSBqKQMANwMAIAtBKGogBEEoaikDADcDACALQTBqIARBMGopAwA3AwAgC0E4aiAEQThqKQMANwMAIAtBwABqIARBwABqKQMANwMAIAtByABqIARByABqKQMANwMAIAtB0ABqIARB0ABqKQMANwMAIAtB2ABqIARB2ABqKQMANwMAIAtB4ABqIARB4ABqKQMANwMAIAtB6ABqIARB6ABqKQMANwMAIAtB8ABqIARB8ABqKQMANwMAIAtB+ABqIARB+ABqKQMANwMAICRBgAFqISQgIkF/aiIiDQALIAcgCCAbIAAQAiAFISQgACEiA0AgJCAjaiILICQgDWoiBCkDADcDACALQQhqIARBCGopAwA3AwAgC0EQaiAEQRBqKQMANwMAIAtBGGogBEEYaikDADcDACALQSBqIARBIGopAwA3AwAgC0EoaiAEQShqKQMANwMAIAtBMGogBEEwaikDADcDACALQThqIARBOGopAwA3AwAgC0HAAGogBEHAAGopAwA3AwAgC0HIAGogBEHIAGopAwA3AwAgC0HQAGogBEHQAGopAwA3AwAgC0HYAGogBEHYAGopAwA3AwAgC0HgAGogBEHgAGopAwA3AwAgC0HoAGogBEHoAGopAwA3AwAgC0HwAGogBEHwAGopAwA3AwAgC0H4AGogBEH4AGopAwA3AwAgJEGAAWohJCAiQX9qIiINAAsLIAggByAbIAAQAiAjIBpqISMgJiAaaiEmICVBAmoiJSABSQ0AC0EAISUDQAJAAkAgAA0AIBsgFykDADcDACAbIBYpAwA3AwggGyAVKQMANwMQIBsgFCkDADcDGCAbIBMpAwA3AyAgGyASKQMANwMoIBsgESkDADcDMCAbIBApAwA3AzgMAQsgACAKIBkpAgAgGIOnQQd0amwhJiAFISQgACEiA0AgJCAMaiILIAspAwAgJCAmaiIEKQMAhTcDACALQQhqIiMgIykDACAEQQhqKQMAhTcDACALQRBqIiMgIykDACAEQRBqKQMAhTcDACALQRhqIiMgIykDACAEQRhqKQMAhTcDACALQSBqIiMgIykDACAEQSBqKQMAhTcDACALQShqIiMgIykDACAEQShqKQMAhTcDACALQTBqIiMgIykDACAEQTBqKQMAhTcDACALQThqIiMgIykDACAEQThqKQMAhTcDACALQcAAaiIjICMpAwAgBEHAAGopAwCFNwMAIAtByABqIiMgIykDACAEQcgAaikDAIU3AwAgC0HQAGoiIyAjKQMAIARB0ABqKQMAhTcDACALQdgAaiIjICMpAwAgBEHYAGopAwCFNwMAIAtB4ABqIiMgIykDACAEQeAAaikDAIU3AwAgC0HoAGoiIyAjKQMAIARB6ABqKQMAhTcDACALQfAAaiIjICMpAwAgBEHwAGopAwCFNwMAIAtB+ABqIgsgCykDACAEQfgAaikDAIU3AwAgJEGAAWohJCAiQX9qIiINAAsgByAIIBsgABACIAAgCiAJKQIAIBiDp0EHdGpsISYgBSEkIAAhIgNAICQgDWoiCyALKQMAICQgJmoiBCkDAIU3AwAgC0EIaiIjICMpAwAgBEEIaikDAIU3AwAgC0EQaiIjICMpAwAgBEEQaikDAIU3AwAgC0EYaiIjICMpAwAgBEEYaikDAIU3AwAgC0EgaiIjICMpAwAgBEEgaikDAIU3AwAgC0EoaiIjICMpAwAgBEEoaikDAIU3AwAgC0EwaiIjICMpAwAgBEEwaikDAIU3AwAgC0E4aiIjICMpAwAgBEE4aikDAIU3AwAgC0HAAGoiIyAjKQMAIARBwABqKQMAhTcDACALQcgAaiIjICMpAwAgBEHIAGopAwCFNwMAIAtB0ABqIiMgIykDACAEQdAAaikDAIU3AwAgC0HYAGoiIyAjKQMAIARB2ABqKQMAhTcDACALQeAAaiIjICMpAwAgBEHgAGopAwCFNwMAIAtB6ABqIiMgIykDACAEQegAaikDAIU3AwAgC0HwAGoiIyAjKQMAIARB8ABqKQMAhTcDACALQfgAaiILIAspAwAgBEH4AGopAwCFNwMAICRBgAFqISQgIkF/aiIiDQALCyAIIAcgGyAAEAIgJUECaiIlIAFJDQALCwJAIABFDQBBACEiAkAgHQ0AICAgHmohI0EAIQtBACEiA0AgIyALaiIEIAcgC2oiJCgCADYCACAEQQRqICRBBGooAgA2AgAgBEEIaiAkQQhqKAIANgIAIARBDGogJEEMaigCADYCACALQRBqIQsgDiAiQQRqIiJHDQALCyAPRQ0AICEgIkECdCILaiAHIAtqKAIANgIACyAeIANqIR4gH0EBaiIfIAJHDQALCws=",hash:"b32721f8"};function K(A){return I(this,0,void 0,function*(){const{costFactor:I,blockSize:g,parallelism:i,hashLength:B}=A,Q=F(U,32).then(A=>{A.init(256);const I={init:()=>(A.init(256),I),update:g=>(A.update(g),I),digest:I=>A.digest(I),save:()=>A.save(),load:g=>(A.load(g),I),blockSize:64,digestSize:32};return I}),C=yield u({password:A.password,salt:A.salt,iterations:1,hashLength:128*g*i,hashFunction:Q,outputType:"binary"}),e=yield F(H,0),E=128*g*I,t=256*g;e.setMemorySize(C.length+E+t),e.writeMemory(C,0),e.getExports().scrypt(g,I,i);const o=e.getMemory().subarray(0,128*g*i),a=yield u({password:A.password,salt:o,iterations:1,hashLength:B,hashFunction:Q,outputType:"binary"});if("hex"===A.outputType){return n(new Uint8Array(2*B),a,B)}return a})}function q(A){return I(this,0,void 0,function*(){return(A=>{if(!A||"object"!=typeof A)throw new Error("Invalid options parameter. It requires an object.");if(!Number.isInteger(A.blockSize)||A.blockSize<1)throw new Error("Block size should be a positive number");if(!Number.isInteger(A.costFactor)||A.costFactor<2||!(I=A.costFactor)||I&I-1)throw new Error("Cost factor should be a power of 2, greater than 1");var I;if(!Number.isInteger(A.parallelism)||A.parallelism<1)throw new Error("Parallelism should be a positive number");if(!Number.isInteger(A.hashLength)||A.hashLength<1)throw new Error("Hash length should be a positive number.");if(void 0===A.outputType&&(A.outputType="hex"),!["hex","binary"].includes(A.outputType))throw new Error(`Insupported output type ${A.outputType}. Valid values: ['hex', 'binary']`)})(A),K(A)})}new g,new g;const R=Object.freeze(Object.defineProperty({__proto__:null,deriveKey:async function(A,I,g){const{cost:i,keyLength:B=32,memoryCost:Q=16384,parallelism:C=1}=A;return{parameters:{memoryCost:Q,parallelism:C},derivedKey:await l({password:g,salt:I,parallelism:C,iterations:i,memorySize:Q,hashLength:B,outputType:"binary"})}}},Symbol.toStringTag,{value:"Module"}));function Y(A){switch(A){case"PBKDF2/SHA-512":return"SHA-512";case"PBKDF2/SHA-384":return"SHA-384";default:return"SHA-256"}}const z=Object.freeze(Object.defineProperty({__proto__:null,deriveKey:async function(A,I,g){const{algorithm:i,cost:B,keyLength:Q=32}=A,C=await crypto.subtle.importKey("raw",g,{name:"PBKDF2"},!1,["deriveKey"]),e=await crypto.subtle.deriveKey({name:"PBKDF2",salt:I,iterations:B,hash:Y(i)},C,{name:"AES-GCM",length:8*Q},!0,["encrypt"]);return{derivedKey:new Uint8Array(await crypto.subtle.exportKey("raw",e))}}},Symbol.toStringTag,{value:"Module"}));const m=Object.freeze(Object.defineProperty({__proto__:null,deriveKey:async function(A,I,g){const{cost:i,keyLength:B=32,memoryCost:Q=8,parallelism:C=1}=A;return{parameters:{memoryCost:Q,parallelism:C},derivedKey:await q({password:g,salt:I,blockSize:Q,costFactor:i,hashLength:B,parallelism:C,outputType:"binary"})}}},Symbol.toStringTag,{value:"Module"}));function X(A,I){if(I.length>A.length)return!1;for(let g=0;gA.toString(16).padStart(2,"0")).join("")}function b(A,I){const g=new Uint8Array(A.length+I.length);return g.set(A,0),g.set(I,A.length),g}function x(A){if(A.length%2!=0)throw new Error(`Hex string must have an even length. Got: ${A}`);const I=new ArrayBuffer(A.length/2),g=new DataView(I);for(let I=0;IsetTimeout(I,A))}async function L(A,I){return new Uint8Array(await crypto.subtle.digest(A.toUpperCase(),"string"==typeof I?(new TextEncoder).encode(I):new Uint8Array(I)))}async function T(A,I,g){const i=await crypto.subtle.importKey("raw",(new TextEncoder).encode(g),{name:"HMAC",hash:{name:A}},!1,["sign","verify"]),B=await crypto.subtle.sign("HMAC",i,"string"==typeof I?(new TextEncoder).encode(I):I);return new Uint8Array(B)}function Z(A){return"object"!=typeof A||null===A||Array.isArray(A)?A:Object.keys(A).sort().reduce((I,g)=>{const i=A[g];return void 0!==i&&(I[g]=Z(i)),I},{})}function v(A){return Math.floor(10*(performance.now()-A))/10}const W=Object.freeze(Object.defineProperty({__proto__:null,deriveKey:async function(A,I,g){const{algorithm:i,keyLength:B=32}=A,Q=Math.max(1,A.cost);let C,e;for(let A=0;A(A.SHA_256="SHA-256",A.SHA_384="SHA-384",A.SHA_512="SHA-512",A))(j||{});class _{constructor(A,I="uint32"){this.nonce=A,this.mode=I,this.buffer=new Uint8Array(this.nonce.length+this.COUNTER_BYTES),this.buffer.set(this.nonce,0),this.dataView=new DataView(this.buffer.buffer)}nonce;mode;COUNTER_BYTES=4;buffer;dataView;encoder=new TextEncoder;setCounter(A){return"string"===this.mode?b(this.nonce,this.encoder.encode(A.toString())):(this.dataView.setUint32(this.nonce.length,A,!1),this.buffer)}}function $(A,I=["fields","reasons"]){const g={};try{const i=new URLSearchParams(A);for(const[A,B]of i.entries())"true"===B||"false"===B?g[A]="true"===B:null!==B&&/^\d+?$/.test(B)?g[A]=parseInt(B,10):null!==B&&/^\d+\.\d+?$/.test(B)?g[A]=parseFloat(B):null!==B&&(g[A]=I.includes(A)?B.trim().split(","):B.trim())}catch{return null}return g}A.argon2id=R,A.createChallenge=async function(A){const{algorithm:I,counter:g,counterMode:i="uint32",cost:B,deriveKey:Q,data:C,expiresAt:e,hmacAlgorithm:E=j.SHA_256,hmacKeySignatureSecret:t,hmacSignatureSecret:o,keyLength:n=32,keyPrefix:a="00",keyPrefixLength:c=n/2,memoryCost:r,parallelism:h}=A,w={algorithm:I,nonce:V(crypto.getRandomValues(new Uint8Array(16))),salt:V(crypto.getRandomValues(new Uint8Array(16))),cost:B,keyLength:n,memoryCost:r,parallelism:h,keyPrefix:a,expiresAt:e instanceof Date?Math.floor(e.getTime()/1e3):e,data:C};let D=null;if(void 0!==g){const A=x(w.nonce);D=await Q(w,x(w.salt),new _(A,i).setCounter(g)),D.parameters&&Object.assign(w,D.parameters),w.keyPrefix=V(D.derivedKey.slice(0,c))}return o?async function(A,I,g,i,B){g&&B&&(I.keySignature=V(await T(A,g,B)));return I=Z(I),{parameters:I,signature:V(await T(A,JSON.stringify(I),i))}}(E,w,D?.derivedKey,o,t):{parameters:Z(w)}},A.parseVerificationData=$,A.pbkdf2=z,A.scrypt=m,A.sha=W,A.solveChallenge=async function(A){const{challenge:I,controller:g,counterMode:i="uint32",counterStart:B=0,counterStep:Q=1,deriveKey:C,timeout:e=9e4}=A,{nonce:E,keyPrefix:t,salt:o}=I.parameters,n=x(E),a=x(o),c=t.length%2==0?x(t):null,r=new _(n,i),h=performance.now();let w=B,D=0,d="",y=h;for(;;){if(g?.signal.aborted||e&&D%10==0&&performance.now()-h>e)return null;const{derivedKey:A}=await C(I.parameters,a,r.setCounter(w));if(D%10==0&&performance.now()-y>200&&(await P(0),y=performance.now()),c?X(A,c):V(A).startsWith(t)){d=V(A);break}w+=Q,D+=1}return{counter:w,derivedKey:d,time:v(h)}},A.solveChallengeWorkers=async function A(I){const{challenge:g,concurrency:i=navigator.hardwareConcurrency,controller:B=new AbortController,createWorker:Q,onOutOfMemory:C=A=>A>1?Math.floor(A/2):0,counterMode:e,timeout:E=9e4}=I,t=Math.min(16,Math.max(1,i)),o=[],n=()=>{for(const A of o)A.terminate()};for(let A=0;A(B.signal.addEventListener("abort",()=>{A.postMessage({type:"abort"})}),new Promise((i,B)=>{A.addEventListener("error",A=>{B(A)}),A.addEventListener("message",I=>{if(I.data){for(const I of o)I!==A&&I.postMessage({type:"abort"});if(I.data.error)return B(new Error(I.data.error))}i(I.data)}),A.postMessage({challenge:g,counterMode:e,counterStart:I,counterStep:t,timeout:E,type:"work"})}))))}catch(i){if(i instanceof Error&&!!i?.message?.includes("Out of memory")&&C){n();const i=C(t);if(i)return A({...I,challenge:g,controller:B,concurrency:i,createWorker:Q})}throw i}finally{n()}return B.signal.aborted?null:a||null},A.verifyFieldsHash=async function(A){const{algorithm:I="SHA-256",formData:g,fields:i,fieldsHash:B}=A,Q=g instanceof FormData?Object.fromEntries(g):g,C=[];for(const A of i)C.push(String(Q[A]||""));return V(await L(I,C.join("\n")))===B},A.verifyServerSignature=async function(A){const{hmacSecret:I,payload:g}=A,i=performance.now(),B=V(await T(g.algorithm,await L(g.algorithm,g.verificationData),I)),Q=$(g.verificationData),C=!!Q&&!!Q.expire&&Q.expire { +}; +function run_all(arr) { + for (var i = 0; i < arr.length; i++) { + arr[i](); + } +} +function deferred() { + var resolve; + var reject; + var promise = new Promise((res, rej) => { + resolve = res; + reject = rej; + }); + return { promise, resolve, reject }; +} +const DERIVED = 1 << 1; +const EFFECT = 1 << 2; +const RENDER_EFFECT = 1 << 3; +const MANAGED_EFFECT = 1 << 24; +const BLOCK_EFFECT = 1 << 4; +const BRANCH_EFFECT = 1 << 5; +const ROOT_EFFECT = 1 << 6; +const BOUNDARY_EFFECT = 1 << 7; +const CONNECTED = 1 << 9; +const CLEAN = 1 << 10; +const DIRTY = 1 << 11; +const MAYBE_DIRTY = 1 << 12; +const INERT = 1 << 13; +const DESTROYED = 1 << 14; +const REACTION_RAN = 1 << 15; +const DESTROYING = 1 << 25; +const EFFECT_TRANSPARENT = 1 << 16; +const EAGER_EFFECT = 1 << 17; +const HEAD_EFFECT = 1 << 18; +const EFFECT_PRESERVED = 1 << 19; +const USER_EFFECT = 1 << 20; +const WAS_MARKED = 1 << 16; +const REACTION_IS_UPDATING = 1 << 21; +const ASYNC = 1 << 22; +const ERROR_VALUE = 1 << 23; +const STATE_SYMBOL = /* @__PURE__ */ Symbol("$state"); +const LEGACY_PROPS = /* @__PURE__ */ Symbol("legacy props"); +const LOADING_ATTR_SYMBOL = /* @__PURE__ */ Symbol(""); +const ATTRIBUTES_CACHE = /* @__PURE__ */ Symbol("attributes"); +const CLASS_CACHE = /* @__PURE__ */ Symbol("class"); +const STYLE_CACHE = /* @__PURE__ */ Symbol("style"); +const TEXT_CACHE = /* @__PURE__ */ Symbol("text"); +const FORM_RESET_HANDLER = /* @__PURE__ */ Symbol("form reset"); +const STALE_REACTION = new class StaleReactionError extends Error { + name = "StaleReactionError"; + message = "The reaction that called `getAbortSignal()` was re-run or destroyed"; +}(); +const IS_XHTML = ( + // We gotta write it like this because after downleveling the pure comment may end up in the wrong location + !!globalThis.document?.contentType && /* @__PURE__ */ globalThis.document.contentType.includes("xml") +); +const TEXT_NODE = 3; +const COMMENT_NODE = 8; +function equals(value) { + return value === this.v; +} +function safe_not_equal(a, b) { + return a != a ? b == b : a !== b || a !== null && typeof a === "object" || typeof a === "function"; +} +function safe_equals(value) { + return !safe_not_equal(value, this.v); +} +function lifecycle_outside_component(name) { + { + throw new Error(`https://svelte.dev/e/lifecycle_outside_component`); + } +} +function async_derived_orphan() { + { + throw new Error(`https://svelte.dev/e/async_derived_orphan`); + } +} +function effect_in_teardown(rune) { + { + throw new Error(`https://svelte.dev/e/effect_in_teardown`); + } +} +function effect_in_unowned_derived() { + { + throw new Error(`https://svelte.dev/e/effect_in_unowned_derived`); + } +} +function effect_orphan(rune) { + { + throw new Error(`https://svelte.dev/e/effect_orphan`); + } +} +function effect_update_depth_exceeded() { + { + throw new Error(`https://svelte.dev/e/effect_update_depth_exceeded`); + } +} +function hydration_failed() { + { + throw new Error(`https://svelte.dev/e/hydration_failed`); + } +} +function state_descriptors_fixed() { + { + throw new Error(`https://svelte.dev/e/state_descriptors_fixed`); + } +} +function state_prototype_fixed() { + { + throw new Error(`https://svelte.dev/e/state_prototype_fixed`); + } +} +function state_unsafe_mutation() { + { + throw new Error(`https://svelte.dev/e/state_unsafe_mutation`); + } +} +function svelte_boundary_reset_onerror() { + { + throw new Error(`https://svelte.dev/e/svelte_boundary_reset_onerror`); + } +} +let tracing_mode_flag = false; +const TEMPLATE_FRAGMENT = 1; +const TEMPLATE_USE_IMPORT_NODE = 1 << 1; +const HYDRATION_START = "["; +const HYDRATION_START_ELSE = "[!"; +const HYDRATION_START_FAILED = "[?"; +const HYDRATION_END = "]"; +const HYDRATION_ERROR = {}; +const UNINITIALIZED = /* @__PURE__ */ Symbol("uninitialized"); +const NAMESPACE_HTML = "http://www.w3.org/1999/xhtml"; +const NAMESPACE_SVG = "http://www.w3.org/2000/svg"; +const NAMESPACE_MATHML = "http://www.w3.org/1998/Math/MathML"; +const ATTACHMENT_KEY = "@attach"; +let component_context = null; +function set_component_context(context) { + component_context = context; +} +function push(props, runes = false, fn) { + component_context = { + p: component_context, + i: false, + c: null, + e: null, + s: props, + x: null, + r: ( + /** @type {Effect} */ + active_effect + ), + l: null + }; +} +function pop(component2) { + var context = ( + /** @type {ComponentContext} */ + component_context + ); + var effects = context.e; + if (effects !== null) { + context.e = null; + for (var fn of effects) { + create_user_effect(fn); + } + } + if (component2 !== void 0) { + context.x = component2; + } + context.i = true; + component_context = context.p; + return component2 ?? /** @type {T} */ + {}; +} +function is_runes() { + return true; +} +let micro_tasks = []; +function run_micro_tasks() { + var tasks = micro_tasks; + micro_tasks = []; + run_all(tasks); +} +function queue_micro_task(fn) { + if (micro_tasks.length === 0 && !is_flushing_sync) { + var tasks = micro_tasks; + queueMicrotask(() => { + if (tasks === micro_tasks) run_micro_tasks(); + }); + } + micro_tasks.push(fn); +} +function flush_tasks() { + while (micro_tasks.length > 0) { + run_micro_tasks(); + } +} +function derived_inert() { + { + console.warn(`https://svelte.dev/e/derived_inert`); + } +} +function hydration_mismatch(location2) { + { + console.warn(`https://svelte.dev/e/hydration_mismatch`); + } +} +function select_multiple_invalid_value() { + { + console.warn(`https://svelte.dev/e/select_multiple_invalid_value`); + } +} +function svelte_boundary_reset_noop() { + { + console.warn(`https://svelte.dev/e/svelte_boundary_reset_noop`); + } +} +let hydrating = false; +function set_hydrating(value) { + hydrating = value; +} +let hydrate_node; +function set_hydrate_node(node) { + if (node === null) { + hydration_mismatch(); + throw HYDRATION_ERROR; + } + return hydrate_node = node; +} +function hydrate_next() { + return set_hydrate_node(/* @__PURE__ */ get_next_sibling(hydrate_node)); +} +function reset(node) { + if (!hydrating) return; + if (/* @__PURE__ */ get_next_sibling(hydrate_node) !== null) { + hydration_mismatch(); + throw HYDRATION_ERROR; + } + hydrate_node = node; +} +function next(count = 1) { + if (hydrating) { + var i = count; + var node = hydrate_node; + while (i--) { + node = /** @type {TemplateNode} */ + /* @__PURE__ */ get_next_sibling(node); + } + hydrate_node = node; + } +} +function skip_nodes(remove = true) { + var depth = 0; + var node = hydrate_node; + while (true) { + if (node.nodeType === COMMENT_NODE) { + var data = ( + /** @type {Comment} */ + node.data + ); + if (data === HYDRATION_END) { + if (depth === 0) return node; + depth -= 1; + } else if (data === HYDRATION_START || data === HYDRATION_START_ELSE || // "[1", "[2", etc. for if blocks + data[0] === "[" && !isNaN(Number(data.slice(1)))) { + depth += 1; + } + } + var next2 = ( + /** @type {TemplateNode} */ + /* @__PURE__ */ get_next_sibling(node) + ); + if (remove) node.remove(); + node = next2; + } +} +function read_hydration_instruction(node) { + if (!node || node.nodeType !== COMMENT_NODE) { + hydration_mismatch(); + throw HYDRATION_ERROR; + } + return ( + /** @type {Comment} */ + node.data + ); +} +function proxy(value) { + if (typeof value !== "object" || value === null || STATE_SYMBOL in value) { + return value; + } + const prototype = get_prototype_of(value); + if (prototype !== object_prototype && prototype !== array_prototype) { + return value; + } + var sources = /* @__PURE__ */ new Map(); + var is_proxied_array = is_array(value); + var version = /* @__PURE__ */ state(0); + var parent_version = update_version; + var with_parent = (fn) => { + if (update_version === parent_version) { + return fn(); + } + var reaction = active_reaction; + var version2 = update_version; + set_active_reaction(null); + set_update_version(parent_version); + var result = fn(); + set_active_reaction(reaction); + set_update_version(version2); + return result; + }; + if (is_proxied_array) { + sources.set("length", /* @__PURE__ */ state( + /** @type {any[]} */ + value.length + )); + } + return new Proxy( + /** @type {any} */ + value, + { + defineProperty(_, prop2, descriptor) { + if (!("value" in descriptor) || descriptor.configurable === false || descriptor.enumerable === false || descriptor.writable === false) { + state_descriptors_fixed(); + } + var s = sources.get(prop2); + if (s === void 0) { + with_parent(() => { + var s2 = /* @__PURE__ */ state(descriptor.value); + sources.set(prop2, s2); + return s2; + }); + } else { + set(s, descriptor.value, true); + } + return true; + }, + deleteProperty(target, prop2) { + var s = sources.get(prop2); + if (s === void 0) { + if (prop2 in target) { + const s2 = with_parent(() => /* @__PURE__ */ state(UNINITIALIZED)); + sources.set(prop2, s2); + increment(version); + } + } else { + set(s, UNINITIALIZED); + increment(version); + } + return true; + }, + get(target, prop2, receiver) { + if (prop2 === STATE_SYMBOL) { + return value; + } + var s = sources.get(prop2); + var exists = prop2 in target; + if (s === void 0 && (!exists || get_descriptor(target, prop2)?.writable)) { + s = with_parent(() => { + var p = proxy(exists ? target[prop2] : UNINITIALIZED); + var s2 = /* @__PURE__ */ state(p); + return s2; + }); + sources.set(prop2, s); + } + if (s !== void 0) { + var v = get(s); + return v === UNINITIALIZED ? void 0 : v; + } + return Reflect.get(target, prop2, receiver); + }, + getOwnPropertyDescriptor(target, prop2) { + var descriptor = Reflect.getOwnPropertyDescriptor(target, prop2); + if (descriptor && "value" in descriptor) { + var s = sources.get(prop2); + if (s) descriptor.value = get(s); + } else if (descriptor === void 0) { + var source2 = sources.get(prop2); + var value2 = source2?.v; + if (source2 !== void 0 && value2 !== UNINITIALIZED) { + return { + enumerable: true, + configurable: true, + value: value2, + writable: true + }; + } + } + return descriptor; + }, + has(target, prop2) { + if (prop2 === STATE_SYMBOL) { + return true; + } + var s = sources.get(prop2); + var has = s !== void 0 && s.v !== UNINITIALIZED || Reflect.has(target, prop2); + if (s !== void 0 || active_effect !== null && (!has || get_descriptor(target, prop2)?.writable)) { + if (s === void 0) { + s = with_parent(() => { + var p = has ? proxy(target[prop2]) : UNINITIALIZED; + var s2 = /* @__PURE__ */ state(p); + return s2; + }); + sources.set(prop2, s); + } + var value2 = get(s); + if (value2 === UNINITIALIZED) { + return false; + } + } + return has; + }, + set(target, prop2, value2, receiver) { + var s = sources.get(prop2); + var has = prop2 in target; + if (is_proxied_array && prop2 === "length") { + for (var i = value2; i < /** @type {Source} */ + s.v; i += 1) { + var other_s = sources.get(i + ""); + if (other_s !== void 0) { + set(other_s, UNINITIALIZED); + } else if (i in target) { + other_s = with_parent(() => /* @__PURE__ */ state(UNINITIALIZED)); + sources.set(i + "", other_s); + } + } + } + if (s === void 0) { + if (!has || get_descriptor(target, prop2)?.writable) { + s = with_parent(() => /* @__PURE__ */ state(void 0)); + set(s, proxy(value2)); + sources.set(prop2, s); + } + } else { + has = s.v !== UNINITIALIZED; + var p = with_parent(() => proxy(value2)); + set(s, p); + } + var descriptor = Reflect.getOwnPropertyDescriptor(target, prop2); + if (descriptor?.set) { + descriptor.set.call(receiver, value2); + } + if (!has) { + if (is_proxied_array && typeof prop2 === "string") { + var ls = ( + /** @type {Source} */ + sources.get("length") + ); + var n = Number(prop2); + if (Number.isInteger(n) && n >= ls.v) { + set(ls, n + 1); + } + } + increment(version); + } + return true; + }, + ownKeys(target) { + get(version); + var own_keys = Reflect.ownKeys(target).filter((key3) => { + var source3 = sources.get(key3); + return source3 === void 0 || source3.v !== UNINITIALIZED; + }); + for (var [key2, source2] of sources) { + if (source2.v !== UNINITIALIZED && !(key2 in target)) { + own_keys.push(key2); + } + } + return own_keys; + }, + setPrototypeOf() { + state_prototype_fixed(); + } + } + ); +} +function get_proxied_value(value) { + try { + if (value !== null && typeof value === "object" && STATE_SYMBOL in value) { + return value[STATE_SYMBOL]; + } + } catch { + } + return value; +} +function is(a, b) { + return Object.is(get_proxied_value(a), get_proxied_value(b)); +} +var $window; +var $document; +var is_firefox; +var first_child_getter; +var next_sibling_getter; +function init_operations() { + if ($window !== void 0) { + return; + } + $window = window; + $document = document; + is_firefox = /Firefox/.test(navigator.userAgent); + var element_prototype = Element.prototype; + var node_prototype = Node.prototype; + var text_prototype = Text.prototype; + first_child_getter = get_descriptor(node_prototype, "firstChild").get; + next_sibling_getter = get_descriptor(node_prototype, "nextSibling").get; + if (is_extensible(element_prototype)) { + element_prototype[CLASS_CACHE] = void 0; + element_prototype[ATTRIBUTES_CACHE] = null; + element_prototype[STYLE_CACHE] = void 0; + element_prototype.__e = void 0; + } + if (is_extensible(text_prototype)) { + text_prototype[TEXT_CACHE] = void 0; + } +} +function create_text(value = "") { + return document.createTextNode(value); +} +// @__NO_SIDE_EFFECTS__ +function get_first_child(node) { + return ( + /** @type {TemplateNode | null} */ + first_child_getter.call(node) + ); +} +// @__NO_SIDE_EFFECTS__ +function get_next_sibling(node) { + return ( + /** @type {TemplateNode | null} */ + next_sibling_getter.call(node) + ); +} +function child(node, is_text) { + if (!hydrating) { + return /* @__PURE__ */ get_first_child(node); + } + var child2 = /* @__PURE__ */ get_first_child(hydrate_node); + if (child2 === null) { + child2 = hydrate_node.appendChild(create_text()); + } else if (is_text && child2.nodeType !== TEXT_NODE) { + var text2 = create_text(); + child2?.before(text2); + set_hydrate_node(text2); + return text2; + } + if (is_text) { + merge_text_nodes( + /** @type {Text} */ + child2 + ); + } + set_hydrate_node(child2); + return child2; +} +function first_child(node, is_text = false) { + if (!hydrating) { + var first = /* @__PURE__ */ get_first_child(node); + if (first instanceof Comment && first.data === "") return /* @__PURE__ */ get_next_sibling(first); + return first; + } + if (is_text) { + if (hydrate_node?.nodeType !== TEXT_NODE) { + var text2 = create_text(); + hydrate_node?.before(text2); + set_hydrate_node(text2); + return text2; + } + merge_text_nodes( + /** @type {Text} */ + hydrate_node + ); + } + return hydrate_node; +} +function sibling(node, count = 1, is_text = false) { + let next_sibling = hydrating ? hydrate_node : node; + var last_sibling; + while (count--) { + last_sibling = next_sibling; + next_sibling = /** @type {TemplateNode} */ + /* @__PURE__ */ get_next_sibling(next_sibling); + } + if (!hydrating) { + return next_sibling; + } + if (is_text) { + if (next_sibling?.nodeType !== TEXT_NODE) { + var text2 = create_text(); + if (next_sibling === null) { + last_sibling?.after(text2); + } else { + next_sibling.before(text2); + } + set_hydrate_node(text2); + return text2; + } + merge_text_nodes( + /** @type {Text} */ + next_sibling + ); + } + set_hydrate_node(next_sibling); + return next_sibling; +} +function clear_text_content(node) { + node.textContent = ""; +} +function should_defer_append() { + return false; +} +function create_element(tag, namespace, is2) { + let options = void 0; + return ( + /** @type {T extends keyof HTMLElementTagNameMap ? HTMLElementTagNameMap[T] : Element} */ + document.createElementNS(namespace ?? NAMESPACE_HTML, tag, options) + ); +} +function merge_text_nodes(text2) { + if ( + /** @type {string} */ + text2.nodeValue.length < 65536 + ) { + return; + } + let next2 = text2.nextSibling; + while (next2 !== null && next2.nodeType === TEXT_NODE) { + next2.remove(); + text2.nodeValue += /** @type {string} */ + next2.nodeValue; + next2 = text2.nextSibling; + } +} +function handle_error(error) { + var effect2 = active_effect; + if (effect2 === null) { + active_reaction.f |= ERROR_VALUE; + return error; + } + if ((effect2.f & REACTION_RAN) === 0 && (effect2.f & EFFECT) === 0) { + throw error; + } + invoke_error_boundary(error, effect2); +} +function invoke_error_boundary(error, effect2) { + while (effect2 !== null) { + if ((effect2.f & BOUNDARY_EFFECT) !== 0) { + if ((effect2.f & REACTION_RAN) === 0) { + throw error; + } + try { + effect2.b.error(error); + return; + } catch (e) { + error = e; + } + } + effect2 = effect2.parent; + } + throw error; +} +const STATUS_MASK = -7169; +function set_signal_status(signal, status) { + signal.f = signal.f & STATUS_MASK | status; +} +function update_derived_status(derived2) { + if ((derived2.f & CONNECTED) !== 0 || derived2.deps === null) { + set_signal_status(derived2, CLEAN); + } else { + set_signal_status(derived2, MAYBE_DIRTY); + } +} +function clear_marked(deps) { + if (deps === null) return; + for (const dep of deps) { + if ((dep.f & DERIVED) === 0 || (dep.f & WAS_MARKED) === 0) { + continue; + } + dep.f ^= WAS_MARKED; + clear_marked( + /** @type {Derived} */ + dep.deps + ); + } +} +function defer_effect(effect2, dirty_effects, maybe_dirty_effects) { + if ((effect2.f & DIRTY) !== 0) { + dirty_effects.add(effect2); + } else if ((effect2.f & MAYBE_DIRTY) !== 0) { + maybe_dirty_effects.add(effect2); + } + clear_marked(effect2.deps); + set_signal_status(effect2, CLEAN); +} +function subscribe_to_store(store2, run, invalidate) { + if (store2 == null) { + run(void 0); + return noop; + } + const unsub = untrack( + () => store2.subscribe( + run, + // @ts-expect-error + invalidate + ) + ); + return unsub.unsubscribe ? () => unsub.unsubscribe() : unsub; +} +const subscriber_queue = []; +function writable(value, start = noop) { + let stop = null; + const subscribers = /* @__PURE__ */ new Set(); + function set2(new_value) { + if (safe_not_equal(value, new_value)) { + value = new_value; + if (stop) { + const run_queue = !subscriber_queue.length; + for (const subscriber of subscribers) { + subscriber[1](); + subscriber_queue.push(subscriber, value); + } + if (run_queue) { + for (let i = 0; i < subscriber_queue.length; i += 2) { + subscriber_queue[i][0](subscriber_queue[i + 1]); + } + subscriber_queue.length = 0; + } + } + } + } + function update(fn) { + set2(fn( + /** @type {T} */ + value + )); + } + function subscribe(run, invalidate = noop) { + const subscriber = [run, invalidate]; + subscribers.add(subscriber); + if (subscribers.size === 1) { + stop = start(set2, update) || noop; + } + run( + /** @type {T} */ + value + ); + return () => { + subscribers.delete(subscriber); + if (subscribers.size === 0 && stop) { + stop(); + stop = null; + } + }; + } + return { set: set2, update, subscribe }; +} +function get$1(store2) { + let value; + subscribe_to_store(store2, (_) => value = _)(); + return value; +} +let IS_UNMOUNTED = /* @__PURE__ */ Symbol("unmounted"); +function store_get(store2, store_name, stores) { + const entry = stores[store_name] ??= { + store: null, + source: /* @__PURE__ */ mutable_source(void 0), + unsubscribe: noop + }; + if (entry.store !== store2 && !(IS_UNMOUNTED in stores)) { + entry.unsubscribe(); + entry.store = store2 ?? null; + if (store2 == null) { + entry.source.v = void 0; + entry.unsubscribe = noop; + } else { + var is_synchronous_callback = true; + entry.unsubscribe = subscribe_to_store(store2, (v) => { + if (is_synchronous_callback) { + entry.source.v = v; + } else { + set(entry.source, v); + } + }); + is_synchronous_callback = false; + } + } + if (store2 && IS_UNMOUNTED in stores) { + return get$1(store2); + } + return get(entry.source); +} +function setup_stores() { + const stores = {}; + function cleanup() { + teardown(() => { + for (var store_name in stores) { + const ref = stores[store_name]; + ref.unsubscribe(); + } + define_property(stores, IS_UNMOUNTED, { + enumerable: false, + value: true + }); + }); + } + return [stores, cleanup]; +} +let first_batch = null; +let last_batch = null; +let current_batch = null; +let previous_batch = null; +let batch_values = null; +let last_scheduled_effect = null; +let is_flushing_sync = false; +let is_processing = false; +let collected_effects = null; +let legacy_updates = null; +var flush_count = 0; +var source_stacks = /* @__PURE__ */ new Set(); +let uid = 1; +class Batch { + id = uid++; + /** True as soon as `#process` was called */ + #started = false; + linked = true; + /** @type {Batch | null} */ + #prev = null; + /** @type {Batch | null} */ + #next = null; + /** @type {Map>>} */ + async_deriveds = /* @__PURE__ */ new Map(); + /** + * The current values of any signals that are updated in this batch. + * Tuple format: [value, is_derived] (note: is_derived is false for deriveds, too, if they were overridden via assignment) + * They keys of this map are identical to `this.#previous` + * @type {Map} + */ + current = /* @__PURE__ */ new Map(); + /** + * The values of any signals (sources and deriveds) that are updated in this batch _before_ those updates took place. + * They keys of this map are identical to `this.#current` + * @type {Map} + */ + previous = /* @__PURE__ */ new Map(); + /** + * Async effects which this batch doesn't take into account anymore when calculating blockers, + * as it has a value for it already. + * @type {Set} + */ + unblocked = /* @__PURE__ */ new Set(); + /** + * When the batch is committed (and the DOM is updated), we need to remove old branches + * and append new ones by calling the functions added inside (if/each/key/etc) blocks + * @type {Set<(batch: Batch) => void>} + */ + #commit_callbacks = /* @__PURE__ */ new Set(); + /** + * If a fork is discarded, we need to destroy any effects that are no longer needed + * @type {Set<(batch: Batch) => void>} + */ + #discard_callbacks = /* @__PURE__ */ new Set(); + /** + * Callbacks that should run only when a fork is committed. + * @type {Set<(batch: Batch) => void>} + */ + #fork_commit_callbacks = /* @__PURE__ */ new Set(); + /** + * The number of async effects that are currently in flight + */ + #pending = 0; + /** + * Async effects that are currently in flight, _not_ inside a pending boundary + * @type {Map} + */ + #blocking_pending = /* @__PURE__ */ new Map(); + /** + * A deferred that resolves when the batch is committed, used with `settled()` + * TODO replace with Promise.withResolvers once supported widely enough + * @type {{ promise: Promise, resolve: (value?: any) => void, reject: (reason: unknown) => void } | null} + */ + #deferred = null; + /** + * The root effects that need to be flushed + * @type {Effect[]} + */ + #roots = []; + /** + * Effects created while this batch was active. + * @type {Effect[]} + */ + #new_effects = []; + /** + * Deferred effects (which run after async work has completed) that are DIRTY + * @type {Set} + */ + #dirty_effects = /* @__PURE__ */ new Set(); + /** + * Deferred effects that are MAYBE_DIRTY + * @type {Set} + */ + #maybe_dirty_effects = /* @__PURE__ */ new Set(); + /** + * A map of branches that still exist, but will be destroyed when this batch + * is committed — we skip over these during `process`. + * The value contains child effects that were dirty/maybe_dirty before being reset, + * so they can be rescheduled if the branch survives. + * @type {Map} + */ + #skipped_branches = /* @__PURE__ */ new Map(); + /** + * Inverse of #skipped_branches which we need to tell prior batches to unskip them when committing + * @type {Set} + */ + #unskipped_branches = /* @__PURE__ */ new Set(); + is_fork = false; + #decrement_queued = false; + #is_deferred() { + if (this.is_fork) return true; + for (const effect2 of this.#blocking_pending.keys()) { + var e = effect2; + var skipped = false; + while (e.parent !== null) { + if (this.#skipped_branches.has(e)) { + skipped = true; + break; + } + e = e.parent; + } + if (!skipped) { + return true; + } + } + return false; + } + /** + * Add an effect to the #skipped_branches map and reset its children + * @param {Effect} effect + */ + skip_effect(effect2) { + if (!this.#skipped_branches.has(effect2)) { + this.#skipped_branches.set(effect2, { d: [], m: [] }); + } + this.#unskipped_branches.delete(effect2); + } + /** + * Remove an effect from the #skipped_branches map and reschedule + * any tracked dirty/maybe_dirty child effects + * @param {Effect} effect + * @param {(e: Effect) => void} callback + */ + unskip_effect(effect2, callback = (e) => this.schedule(e)) { + var tracked = this.#skipped_branches.get(effect2); + if (tracked) { + this.#skipped_branches.delete(effect2); + for (var e of tracked.d) { + set_signal_status(e, DIRTY); + callback(e); + } + for (e of tracked.m) { + set_signal_status(e, MAYBE_DIRTY); + callback(e); + } + } + this.#unskipped_branches.add(effect2); + } + #process() { + this.#started = true; + if (flush_count++ > 1e3) { + this.#unlink(); + infinite_loop_guard(); + } + if (!this.#is_deferred()) { + for (const e of this.#dirty_effects) { + this.#maybe_dirty_effects.delete(e); + set_signal_status(e, DIRTY); + this.schedule(e); + } + for (const e of this.#maybe_dirty_effects) { + set_signal_status(e, MAYBE_DIRTY); + this.schedule(e); + } + } + const roots = this.#roots; + this.#roots = []; + this.apply(); + var effects = collected_effects = []; + var render_effects = []; + var updates = legacy_updates = []; + for (const root2 of roots) { + try { + this.#traverse(root2, effects, render_effects); + } catch (e) { + reset_all(root2); + throw e; + } + } + current_batch = null; + if (updates.length > 0) { + var batch = Batch.ensure(); + for (const e of updates) { + batch.schedule(e); + } + } + collected_effects = null; + legacy_updates = null; + if (this.#is_deferred()) { + this.#defer_effects(render_effects); + this.#defer_effects(effects); + for (const [e, t] of this.#skipped_branches) { + reset_branch(e, t); + } + if (updates.length > 0) { + /** @type {unknown} */ + current_batch.#process(); + } + return; + } + const earlier_batch = this.#find_earlier_batch(); + if (earlier_batch) { + earlier_batch.#merge(this); + return; + } + this.#dirty_effects.clear(); + this.#maybe_dirty_effects.clear(); + for (const fn of this.#commit_callbacks) fn(this); + this.#commit_callbacks.clear(); + previous_batch = this; + flush_queued_effects(render_effects); + flush_queued_effects(effects); + previous_batch = null; + this.#deferred?.resolve(); + var next_batch = ( + /** @type {Batch | null} */ + /** @type {unknown} */ + current_batch + ); + if (this.linked && this.#pending === 0) { + this.#unlink(); + } + if (this.#roots.length > 0) { + if (next_batch === null) { + next_batch = this; + this.#link(); + } + const batch2 = next_batch; + batch2.#roots.push(...this.#roots.filter((r2) => !batch2.#roots.includes(r2))); + } + if (next_batch !== null) { + next_batch.#process(); + } + } + /** + * Traverse the effect tree, executing effects or stashing + * them for later execution as appropriate + * @param {Effect} root + * @param {Effect[]} effects + * @param {Effect[]} render_effects + */ + #traverse(root2, effects, render_effects) { + root2.f ^= CLEAN; + var effect2 = root2.first; + while (effect2 !== null) { + var flags2 = effect2.f; + var is_branch = (flags2 & (BRANCH_EFFECT | ROOT_EFFECT)) !== 0; + var is_skippable_branch = is_branch && (flags2 & CLEAN) !== 0; + var skip = is_skippable_branch || (flags2 & INERT) !== 0 || this.#skipped_branches.has(effect2); + if (!skip && effect2.fn !== null) { + if (is_branch) { + effect2.f ^= CLEAN; + } else if ((flags2 & EFFECT) !== 0) { + effects.push(effect2); + } else if (is_dirty(effect2)) { + if ((flags2 & BLOCK_EFFECT) !== 0) this.#maybe_dirty_effects.add(effect2); + update_effect(effect2); + } + var child2 = effect2.first; + if (child2 !== null) { + effect2 = child2; + continue; + } + } + while (effect2 !== null) { + var next2 = effect2.next; + if (next2 !== null) { + effect2 = next2; + break; + } + effect2 = effect2.parent; + } + } + } + #find_earlier_batch() { + var batch = this.#prev; + while (batch !== null) { + if (!batch.is_fork) { + for (const [value, [, is_derived]] of this.current) { + if (batch.current.has(value) && !is_derived) { + return batch; + } + } + } + batch = batch.#prev; + } + return null; + } + /** + * @param {Batch} batch + */ + #merge(batch) { + for (const [source2, value] of batch.current) { + if (!this.previous.has(source2) && batch.previous.has(source2)) { + this.previous.set(source2, batch.previous.get(source2)); + } + this.current.set(source2, value); + } + for (const [effect2, deferred2] of batch.async_deriveds) { + const d = this.async_deriveds.get(effect2); + if (d) deferred2.promise.then(d.resolve); + } + const mark = (value) => { + var reactions = value.reactions; + if (reactions === null) return; + for (const reaction of reactions) { + var flags2 = reaction.f; + if ((flags2 & DERIVED) !== 0) { + mark( + /** @type {Derived} */ + reaction + ); + } else { + var effect2 = ( + /** @type {Effect} */ + reaction + ); + if (flags2 & (ASYNC | BLOCK_EFFECT) && !this.async_deriveds.has(effect2)) { + this.#maybe_dirty_effects.delete(effect2); + set_signal_status(effect2, DIRTY); + this.schedule(effect2); + } + } + } + }; + for (const source2 of this.current.keys()) { + mark(source2); + } + this.oncommit(() => batch.discard()); + batch.#unlink(); + current_batch = this; + this.#process(); + } + /** + * @param {Effect[]} effects + */ + #defer_effects(effects) { + for (var i = 0; i < effects.length; i += 1) { + defer_effect(effects[i], this.#dirty_effects, this.#maybe_dirty_effects); + } + } + /** + * Associate a change to a given source with the current + * batch, noting its previous and current values + * @param {Value} source + * @param {any} value + * @param {boolean} [is_derived] + */ + capture(source2, value, is_derived = false) { + if (source2.v !== UNINITIALIZED && !this.previous.has(source2)) { + this.previous.set(source2, source2.v); + } + if ((source2.f & ERROR_VALUE) === 0) { + this.current.set(source2, [value, is_derived]); + batch_values?.set(source2, value); + } + if (!this.is_fork) { + source2.v = value; + } + } + activate() { + current_batch = this; + } + deactivate() { + current_batch = null; + batch_values = null; + } + flush() { + try { + if (DEV) ; + is_processing = true; + current_batch = this; + this.#process(); + } finally { + flush_count = 0; + last_scheduled_effect = null; + collected_effects = null; + legacy_updates = null; + is_processing = false; + current_batch = null; + batch_values = null; + old_values.clear(); + } + } + discard() { + for (const fn of this.#discard_callbacks) fn(this); + this.#discard_callbacks.clear(); + this.#fork_commit_callbacks.clear(); + this.#unlink(); + } + /** + * @param {Effect} effect + */ + register_created_effect(effect2) { + this.#new_effects.push(effect2); + } + #commit() { + this.#unlink(); + for (let batch = first_batch; batch !== null; batch = batch.#next) { + var is_earlier = batch.id < this.id; + var sources = []; + for (const [source3, [value, is_derived]] of this.current) { + if (batch.current.has(source3)) { + var batch_value = ( + /** @type {[any, boolean]} */ + batch.current.get(source3)[0] + ); + if (is_earlier && value !== batch_value) { + batch.current.set(source3, [value, is_derived]); + } else { + continue; + } + } + sources.push(source3); + } + if (is_earlier) { + for (const [effect2, deferred2] of this.async_deriveds) { + const d = batch.async_deriveds.get(effect2); + if (d) deferred2.promise.then(d.resolve); + } + } + if (!batch.#started) continue; + var others = [...batch.current.keys()].filter((s) => !this.current.has(s)); + if (others.length === 0) { + if (is_earlier) { + batch.discard(); + } + } else if (sources.length > 0) { + if (is_earlier) { + for (const unskipped of this.#unskipped_branches) { + batch.unskip_effect(unskipped, (e) => { + if ((e.f & (BLOCK_EFFECT | ASYNC)) !== 0) { + batch.schedule(e); + } else { + batch.#defer_effects([e]); + } + }); + } + } + batch.activate(); + var marked = /* @__PURE__ */ new Set(); + var checked = /* @__PURE__ */ new Map(); + for (var source2 of sources) { + mark_effects(source2, others, marked, checked); + } + checked = /* @__PURE__ */ new Map(); + var current_unequal = [...batch.current.keys()].filter( + (c) => this.current.has(c) ? ( + /** @type {[any, boolean]} */ + this.current.get(c)[0] !== c.v + ) : true + ); + if (current_unequal.length > 0) { + for (const effect2 of this.#new_effects) { + if ((effect2.f & (DESTROYED | INERT | EAGER_EFFECT)) === 0 && depends_on(effect2, current_unequal, checked)) { + if ((effect2.f & (ASYNC | BLOCK_EFFECT)) !== 0) { + set_signal_status(effect2, DIRTY); + batch.schedule(effect2); + } else { + batch.#dirty_effects.add(effect2); + } + } + } + } + if (batch.#roots.length > 0) { + batch.apply(); + for (var root2 of batch.#roots) { + batch.#traverse(root2, [], []); + } + batch.#roots = []; + } + batch.deactivate(); + } + } + } + /** + * @param {boolean} blocking + * @param {Effect} effect + */ + increment(blocking, effect2) { + this.#pending += 1; + if (blocking) { + let blocking_pending_count = this.#blocking_pending.get(effect2) ?? 0; + this.#blocking_pending.set(effect2, blocking_pending_count + 1); + } + } + /** + * @param {boolean} blocking + * @param {Effect} effect + */ + decrement(blocking, effect2) { + this.#pending -= 1; + if (blocking) { + let blocking_pending_count = this.#blocking_pending.get(effect2) ?? 0; + if (blocking_pending_count === 1) { + this.#blocking_pending.delete(effect2); + } else { + this.#blocking_pending.set(effect2, blocking_pending_count - 1); + } + } + if (this.#decrement_queued) return; + this.#decrement_queued = true; + queue_micro_task(() => { + this.#decrement_queued = false; + if (this.linked) { + this.flush(); + } + }); + } + /** + * @param {Set} dirty_effects + * @param {Set} maybe_dirty_effects + */ + transfer_effects(dirty_effects, maybe_dirty_effects) { + for (const e of dirty_effects) { + this.#dirty_effects.add(e); + } + for (const e of maybe_dirty_effects) { + this.#maybe_dirty_effects.add(e); + } + dirty_effects.clear(); + maybe_dirty_effects.clear(); + } + /** @param {(batch: Batch) => void} fn */ + oncommit(fn) { + this.#commit_callbacks.add(fn); + } + /** @param {(batch: Batch) => void} fn */ + ondiscard(fn) { + this.#discard_callbacks.add(fn); + } + /** @param {(batch: Batch) => void} fn */ + on_fork_commit(fn) { + this.#fork_commit_callbacks.add(fn); + } + run_fork_commit_callbacks() { + for (const fn of this.#fork_commit_callbacks) fn(this); + this.#fork_commit_callbacks.clear(); + } + settled() { + return (this.#deferred ??= deferred()).promise; + } + static ensure() { + if (current_batch === null) { + const batch = current_batch = new Batch(); + batch.#link(); + if (!is_processing && !is_flushing_sync) { + queue_micro_task(() => { + if (!batch.#started) { + batch.flush(); + } + }); + } + } + return current_batch; + } + apply() { + { + batch_values = null; + return; + } + } + /** + * + * @param {Effect} effect + */ + schedule(effect2) { + last_scheduled_effect = effect2; + if (effect2.b?.is_pending && (effect2.f & (EFFECT | RENDER_EFFECT | MANAGED_EFFECT)) !== 0 && (effect2.f & REACTION_RAN) === 0) { + effect2.b.defer_effect(effect2); + return; + } + var e = effect2; + while (e.parent !== null) { + e = e.parent; + var flags2 = e.f; + if (collected_effects !== null && e === active_effect) { + if ((active_reaction === null || (active_reaction.f & DERIVED) === 0) && true) { + return; + } + } + if ((flags2 & (ROOT_EFFECT | BRANCH_EFFECT)) !== 0) { + if ((flags2 & CLEAN) === 0) { + return; + } + e.f ^= CLEAN; + } + } + this.#roots.push(e); + } + #link() { + if (last_batch === null) { + first_batch = last_batch = this; + } else { + last_batch.#next = this; + this.#prev = last_batch; + } + last_batch = this; + } + #unlink() { + var prev = this.#prev; + var next2 = this.#next; + if (prev === null) { + first_batch = next2; + } else { + prev.#next = next2; + } + if (next2 === null) { + last_batch = prev; + } else { + next2.#prev = prev; + } + this.linked = false; + } +} +function flushSync(fn) { + var was_flushing_sync = is_flushing_sync; + is_flushing_sync = true; + try { + var result; + if (fn) ; + while (true) { + flush_tasks(); + if (current_batch === null) { + return ( + /** @type {T} */ + result + ); + } + current_batch.flush(); + } + } finally { + is_flushing_sync = was_flushing_sync; + } +} +function infinite_loop_guard() { + try { + effect_update_depth_exceeded(); + } catch (error) { + invoke_error_boundary(error, last_scheduled_effect); + } +} +let eager_block_effects = null; +function flush_queued_effects(effects) { + var length = effects.length; + if (length === 0) return; + var i = 0; + while (i < length) { + var effect2 = effects[i++]; + if ((effect2.f & (DESTROYED | INERT)) === 0 && is_dirty(effect2)) { + eager_block_effects = /* @__PURE__ */ new Set(); + update_effect(effect2); + if (effect2.deps === null && effect2.first === null && effect2.nodes === null && effect2.teardown === null && effect2.ac === null) { + unlink_effect(effect2); + } + if (eager_block_effects?.size > 0) { + old_values.clear(); + for (const e of eager_block_effects) { + if ((e.f & (DESTROYED | INERT)) !== 0) continue; + const ordered_effects = [e]; + let ancestor = e.parent; + while (ancestor !== null) { + if (eager_block_effects.has(ancestor)) { + eager_block_effects.delete(ancestor); + ordered_effects.push(ancestor); + } + ancestor = ancestor.parent; + } + for (let j = ordered_effects.length - 1; j >= 0; j--) { + const e2 = ordered_effects[j]; + if ((e2.f & (DESTROYED | INERT)) !== 0) continue; + update_effect(e2); + } + } + eager_block_effects.clear(); + } + } + } + eager_block_effects = null; +} +function mark_effects(value, sources, marked, checked) { + if (marked.has(value)) return; + marked.add(value); + if (value.reactions !== null) { + for (const reaction of value.reactions) { + const flags2 = reaction.f; + if ((flags2 & DERIVED) !== 0) { + mark_effects( + /** @type {Derived} */ + reaction, + sources, + marked, + checked + ); + } else if ((flags2 & (ASYNC | BLOCK_EFFECT)) !== 0 && (flags2 & DIRTY) === 0 && depends_on(reaction, sources, checked)) { + set_signal_status(reaction, DIRTY); + schedule_effect( + /** @type {Effect} */ + reaction + ); + } + } + } +} +function depends_on(reaction, sources, checked) { + const depends = checked.get(reaction); + if (depends !== void 0) return depends; + if (reaction.deps !== null) { + for (const dep of reaction.deps) { + if (includes.call(sources, dep)) { + return true; + } + if ((dep.f & DERIVED) !== 0 && depends_on( + /** @type {Derived} */ + dep, + sources, + checked + )) { + checked.set( + /** @type {Derived} */ + dep, + true + ); + return true; + } + } + } + checked.set(reaction, false); + return false; +} +function schedule_effect(effect2) { + current_batch.schedule(effect2); +} +function reset_branch(effect2, tracked) { + if ((effect2.f & BRANCH_EFFECT) !== 0 && (effect2.f & CLEAN) !== 0) { + return; + } + if ((effect2.f & DIRTY) !== 0) { + tracked.d.push(effect2); + } else if ((effect2.f & MAYBE_DIRTY) !== 0) { + tracked.m.push(effect2); + } + set_signal_status(effect2, CLEAN); + var e = effect2.first; + while (e !== null) { + reset_branch(e, tracked); + e = e.next; + } +} +function reset_all(effect2) { + set_signal_status(effect2, CLEAN); + var e = effect2.first; + while (e !== null) { + reset_all(e); + e = e.next; + } +} +function createSubscriber(start) { + let subscribers = 0; + let version = source(0); + let stop; + return () => { + if (effect_tracking()) { + get(version); + render_effect(() => { + if (subscribers === 0) { + stop = untrack(() => start(() => increment(version))); + } + subscribers += 1; + return () => { + queue_micro_task(() => { + subscribers -= 1; + if (subscribers === 0) { + stop?.(); + stop = void 0; + increment(version); + } + }); + }; + }); + } + }; +} +var flags = EFFECT_TRANSPARENT | EFFECT_PRESERVED; +function boundary(node, props, children, transform_error) { + new Boundary(node, props, children, transform_error); +} +class Boundary { + /** @type {Boundary | null} */ + parent; + is_pending = false; + /** + * API-level transformError transform function. Transforms errors before they reach the `failed` snippet. + * Inherited from parent boundary, or defaults to identity. + * @type {(error: unknown) => unknown} + */ + transform_error; + /** @type {TemplateNode} */ + #anchor; + /** @type {TemplateNode | null} */ + #hydrate_open = hydrating ? hydrate_node : null; + /** @type {BoundaryProps} */ + #props; + /** @type {((anchor: Node) => void)} */ + #children; + /** @type {Effect} */ + #effect; + /** @type {Effect | null} */ + #main_effect = null; + /** @type {Effect | null} */ + #pending_effect = null; + /** @type {Effect | null} */ + #failed_effect = null; + /** @type {DocumentFragment | null} */ + #offscreen_fragment = null; + #local_pending_count = 0; + #pending_count = 0; + #pending_count_update_queued = false; + /** @type {Set} */ + #dirty_effects = /* @__PURE__ */ new Set(); + /** @type {Set} */ + #maybe_dirty_effects = /* @__PURE__ */ new Set(); + /** + * A source containing the number of pending async deriveds/expressions. + * Only created if `$effect.pending()` is used inside the boundary, + * otherwise updating the source results in needless `Batch.ensure()` + * calls followed by no-op flushes + * @type {Source | null} + */ + #effect_pending = null; + #effect_pending_subscriber = createSubscriber(() => { + this.#effect_pending = source(this.#local_pending_count); + return () => { + this.#effect_pending = null; + }; + }); + /** + * @param {TemplateNode} node + * @param {BoundaryProps} props + * @param {((anchor: Node) => void)} children + * @param {((error: unknown) => unknown) | undefined} [transform_error] + */ + constructor(node, props, children, transform_error) { + this.#anchor = node; + this.#props = props; + this.#children = (anchor) => { + var effect2 = ( + /** @type {Effect} */ + active_effect + ); + effect2.b = this; + effect2.f |= BOUNDARY_EFFECT; + children(anchor); + }; + this.parent = /** @type {Effect} */ + active_effect.b; + this.transform_error = transform_error ?? this.parent?.transform_error ?? ((e) => e); + this.#effect = block(() => { + if (hydrating) { + const comment2 = ( + /** @type {Comment} */ + this.#hydrate_open + ); + hydrate_next(); + const server_rendered_pending = comment2.data === HYDRATION_START_ELSE; + const server_rendered_failed = comment2.data.startsWith(HYDRATION_START_FAILED); + if (server_rendered_failed) { + const serialized_error = JSON.parse(comment2.data.slice(HYDRATION_START_FAILED.length)); + this.#hydrate_failed_content(serialized_error); + } else if (server_rendered_pending) { + this.#hydrate_pending_content(); + } else { + this.#hydrate_resolved_content(); + } + } else { + this.#render(); + } + }, flags); + if (hydrating) { + this.#anchor = hydrate_node; + } + } + #hydrate_resolved_content() { + try { + this.#main_effect = branch(() => this.#children(this.#anchor)); + } catch (error) { + this.error(error); + } + } + /** + * @param {unknown} error The deserialized error from the server's hydration comment + */ + #hydrate_failed_content(error) { + const failed = this.#props.failed; + if (!failed) return; + this.#failed_effect = branch(() => { + failed( + this.#anchor, + () => error, + () => () => { + } + ); + }); + } + #hydrate_pending_content() { + const pending = this.#props.pending; + if (!pending) return; + this.is_pending = true; + this.#pending_effect = branch(() => pending(this.#anchor)); + queue_micro_task(() => { + var fragment = this.#offscreen_fragment = document.createDocumentFragment(); + var anchor = create_text(); + fragment.append(anchor); + this.#main_effect = this.#run(() => { + return branch(() => this.#children(anchor)); + }); + if (this.#pending_count === 0) { + this.#anchor.before(fragment); + this.#offscreen_fragment = null; + pause_effect( + /** @type {Effect} */ + this.#pending_effect, + () => { + this.#pending_effect = null; + } + ); + this.#resolve( + /** @type {Batch} */ + current_batch + ); + } + }); + } + #render() { + try { + this.is_pending = this.has_pending_snippet(); + this.#pending_count = 0; + this.#local_pending_count = 0; + this.#main_effect = branch(() => { + this.#children(this.#anchor); + }); + if (this.#pending_count > 0) { + var fragment = this.#offscreen_fragment = document.createDocumentFragment(); + move_effect(this.#main_effect, fragment); + const pending = ( + /** @type {(anchor: Node) => void} */ + this.#props.pending + ); + this.#pending_effect = branch(() => pending(this.#anchor)); + } else { + this.#resolve( + /** @type {Batch} */ + current_batch + ); + } + } catch (error) { + this.error(error); + } + } + /** + * @param {Batch} batch + */ + #resolve(batch) { + this.is_pending = false; + batch.transfer_effects(this.#dirty_effects, this.#maybe_dirty_effects); + } + /** + * Defer an effect inside a pending boundary until the boundary resolves + * @param {Effect} effect + */ + defer_effect(effect2) { + defer_effect(effect2, this.#dirty_effects, this.#maybe_dirty_effects); + } + /** + * Returns `false` if the effect exists inside a boundary whose pending snippet is shown + * @returns {boolean} + */ + is_rendered() { + return !this.is_pending && (!this.parent || this.parent.is_rendered()); + } + has_pending_snippet() { + return !!this.#props.pending; + } + /** + * @template T + * @param {() => T} fn + */ + #run(fn) { + var previous_effect = active_effect; + var previous_reaction = active_reaction; + var previous_ctx = component_context; + set_active_effect(this.#effect); + set_active_reaction(this.#effect); + set_component_context(this.#effect.ctx); + try { + Batch.ensure(); + return fn(); + } catch (e) { + handle_error(e); + return null; + } finally { + set_active_effect(previous_effect); + set_active_reaction(previous_reaction); + set_component_context(previous_ctx); + } + } + /** + * Updates the pending count associated with the currently visible pending snippet, + * if any, such that we can replace the snippet with content once work is done + * @param {1 | -1} d + * @param {Batch} batch + */ + #update_pending_count(d, batch) { + if (!this.has_pending_snippet()) { + if (this.parent) { + this.parent.#update_pending_count(d, batch); + } + return; + } + this.#pending_count += d; + if (this.#pending_count === 0) { + this.#resolve(batch); + if (this.#pending_effect) { + pause_effect(this.#pending_effect, () => { + this.#pending_effect = null; + }); + } + if (this.#offscreen_fragment) { + this.#anchor.before(this.#offscreen_fragment); + this.#offscreen_fragment = null; + } + } + } + /** + * Update the source that powers `$effect.pending()` inside this boundary, + * and controls when the current `pending` snippet (if any) is removed. + * Do not call from inside the class + * @param {1 | -1} d + * @param {Batch} batch + */ + update_pending_count(d, batch) { + this.#update_pending_count(d, batch); + this.#local_pending_count += d; + if (!this.#effect_pending || this.#pending_count_update_queued) return; + this.#pending_count_update_queued = true; + queue_micro_task(() => { + this.#pending_count_update_queued = false; + if (this.#effect_pending) { + internal_set(this.#effect_pending, this.#local_pending_count); + } + }); + } + get_effect_pending() { + this.#effect_pending_subscriber(); + return get( + /** @type {Source} */ + this.#effect_pending + ); + } + /** @param {unknown} error */ + error(error) { + if (!this.#props.onerror && !this.#props.failed) { + throw error; + } + if (current_batch?.is_fork) { + if (this.#main_effect) current_batch.skip_effect(this.#main_effect); + if (this.#pending_effect) current_batch.skip_effect(this.#pending_effect); + if (this.#failed_effect) current_batch.skip_effect(this.#failed_effect); + current_batch.on_fork_commit(() => { + this.#handle_error(error); + }); + } else { + this.#handle_error(error); + } + } + /** + * @param {unknown} error + */ + #handle_error(error) { + if (this.#main_effect) { + destroy_effect(this.#main_effect); + this.#main_effect = null; + } + if (this.#pending_effect) { + destroy_effect(this.#pending_effect); + this.#pending_effect = null; + } + if (this.#failed_effect) { + destroy_effect(this.#failed_effect); + this.#failed_effect = null; + } + if (hydrating) { + set_hydrate_node( + /** @type {TemplateNode} */ + this.#hydrate_open + ); + next(); + set_hydrate_node(skip_nodes()); + } + var onerror = this.#props.onerror; + let failed = this.#props.failed; + var did_reset = false; + var calling_on_error = false; + const reset2 = () => { + if (did_reset) { + svelte_boundary_reset_noop(); + return; + } + did_reset = true; + if (calling_on_error) { + svelte_boundary_reset_onerror(); + } + if (this.#failed_effect !== null) { + pause_effect(this.#failed_effect, () => { + this.#failed_effect = null; + }); + } + this.#run(() => { + this.#render(); + }); + }; + const handle_error_result = (transformed_error) => { + try { + calling_on_error = true; + onerror?.(transformed_error, reset2); + calling_on_error = false; + } catch (error2) { + invoke_error_boundary(error2, this.#effect && this.#effect.parent); + } + if (failed) { + this.#failed_effect = this.#run(() => { + try { + return branch(() => { + var effect2 = ( + /** @type {Effect} */ + active_effect + ); + effect2.b = this; + effect2.f |= BOUNDARY_EFFECT; + failed( + this.#anchor, + () => transformed_error, + () => reset2 + ); + }); + } catch (error2) { + invoke_error_boundary( + error2, + /** @type {Effect} */ + this.#effect.parent + ); + return null; + } + }); + } + }; + queue_micro_task(() => { + var result; + try { + result = this.transform_error(error); + } catch (e) { + invoke_error_boundary(e, this.#effect && this.#effect.parent); + return; + } + if (result !== null && typeof result === "object" && typeof /** @type {any} */ + result.then === "function") { + result.then( + handle_error_result, + /** @param {unknown} e */ + (e) => invoke_error_boundary(e, this.#effect && this.#effect.parent) + ); + } else { + handle_error_result(result); + } + }); + } +} +function flatten(blockers, sync, async, fn) { + const d = derived; + var pending = blockers.filter((b) => !b.settled); + if (async.length === 0 && pending.length === 0) { + fn(sync.map(d)); + return; + } + var parent = ( + /** @type {Effect} */ + active_effect + ); + var restore = capture(); + var blocker_promise = pending.length === 1 ? pending[0].promise : pending.length > 1 ? Promise.all(pending.map((b) => b.promise)) : null; + function finish(values) { + if ((parent.f & DESTROYED) !== 0) { + return; + } + restore(); + try { + fn(values); + } catch (error) { + invoke_error_boundary(error, parent); + } + unset_context(); + } + var decrement_pending = increment_pending(); + if (async.length === 0) { + blocker_promise.then(() => finish(sync.map(d))).finally(decrement_pending); + return; + } + function run() { + Promise.all(async.map((expression) => /* @__PURE__ */ async_derived(expression))).then((result) => finish([...sync.map(d), ...result])).catch((error) => invoke_error_boundary(error, parent)).finally(decrement_pending); + } + if (blocker_promise) { + blocker_promise.then(() => { + restore(); + run(); + unset_context(); + }); + } else { + run(); + } +} +function capture() { + var previous_effect = ( + /** @type {Effect} */ + active_effect + ); + var previous_reaction = active_reaction; + var previous_component_context = component_context; + var previous_batch2 = ( + /** @type {Batch} */ + current_batch + ); + return function restore(activate_batch = true) { + set_active_effect(previous_effect); + set_active_reaction(previous_reaction); + set_component_context(previous_component_context); + if (activate_batch && (previous_effect.f & DESTROYED) === 0) { + previous_batch2?.activate(); + previous_batch2?.apply(); + } + }; +} +function unset_context(deactivate_batch = true) { + set_active_effect(null); + set_active_reaction(null); + set_component_context(null); + if (deactivate_batch) current_batch?.deactivate(); +} +function increment_pending() { + var effect2 = ( + /** @type {Effect} */ + active_effect + ); + var boundary2 = ( + /** @type {Boundary} */ + effect2.b + ); + var batch = ( + /** @type {Batch} */ + current_batch + ); + var blocking = boundary2.is_rendered(); + boundary2.update_pending_count(1, batch); + batch.increment(blocking, effect2); + return () => { + boundary2.update_pending_count(-1, batch); + batch.decrement(blocking, effect2); + }; +} +// @__NO_SIDE_EFFECTS__ +function derived(fn) { + var flags2 = DERIVED | DIRTY; + if (active_effect !== null) { + active_effect.f |= EFFECT_PRESERVED; + } + const signal = { + ctx: component_context, + deps: null, + effects: null, + equals, + f: flags2, + fn, + reactions: null, + rv: 0, + v: ( + /** @type {V} */ + UNINITIALIZED + ), + wv: 0, + parent: active_effect, + ac: null + }; + return signal; +} +const OBSOLETE = /* @__PURE__ */ Symbol("obsolete"); +// @__NO_SIDE_EFFECTS__ +function async_derived(fn, label, location2) { + let parent = ( + /** @type {Effect | null} */ + active_effect + ); + if (parent === null) { + async_derived_orphan(); + } + var promise = ( + /** @type {Promise} */ + /** @type {unknown} */ + void 0 + ); + var signal = source( + /** @type {V} */ + UNINITIALIZED + ); + var should_suspend = !active_reaction; + var deferreds = /* @__PURE__ */ new Set(); + async_effect(() => { + var effect2 = ( + /** @type {Effect} */ + active_effect + ); + var d = deferred(); + promise = d.promise; + try { + Promise.resolve(fn()).then(d.resolve, (e) => { + if (e !== STALE_REACTION) d.reject(e); + }).finally(unset_context); + } catch (error) { + d.reject(error); + unset_context(); + } + var batch = ( + /** @type {Batch} */ + current_batch + ); + if (should_suspend) { + if ((effect2.f & REACTION_RAN) !== 0) { + var decrement_pending = increment_pending(); + } + if ( + /** @type {Boundary} */ + parent.b.is_rendered() + ) { + batch.async_deriveds.get(effect2)?.reject(OBSOLETE); + } else { + for (const d2 of deferreds.values()) { + d2.reject(OBSOLETE); + } + } + deferreds.add(d); + batch.async_deriveds.set(effect2, d); + } + const handler = (value, error = void 0) => { + decrement_pending?.(); + deferreds.delete(d); + if (error === OBSOLETE) return; + batch.activate(); + if (error) { + signal.f |= ERROR_VALUE; + internal_set(signal, error); + } else { + if ((signal.f & ERROR_VALUE) !== 0) { + signal.f ^= ERROR_VALUE; + } + internal_set(signal, value); + } + batch.deactivate(); + }; + d.promise.then(handler, (e) => handler(null, e || "unknown")); + }); + teardown(() => { + for (const d of deferreds) { + d.reject(OBSOLETE); + } + }); + return new Promise((fulfil) => { + function next2(p) { + function go() { + if (p === promise) { + fulfil(signal); + } else { + next2(promise); + } + } + p.then(go, go); + } + next2(promise); + }); +} +// @__NO_SIDE_EFFECTS__ +function user_derived(fn) { + const d = /* @__PURE__ */ derived(fn); + push_reaction_value(d); + return d; +} +function destroy_derived_effects(derived2) { + var effects = derived2.effects; + if (effects !== null) { + derived2.effects = null; + for (var i = 0; i < effects.length; i += 1) { + destroy_effect( + /** @type {Effect} */ + effects[i] + ); + } + } +} +function execute_derived(derived2) { + var value; + var prev_active_effect = active_effect; + var parent = derived2.parent; + if (!is_destroying_effect && parent !== null && derived2.v !== UNINITIALIZED && // if it was never evaluated before, it's guaranteed to fail downstream, so we try to execute instead + (parent.f & (DESTROYED | INERT)) !== 0) { + derived_inert(); + return derived2.v; + } + set_active_effect(parent); + { + try { + derived2.f &= ~WAS_MARKED; + destroy_derived_effects(derived2); + value = update_reaction(derived2); + } finally { + set_active_effect(prev_active_effect); + } + } + return value; +} +function update_derived(derived2) { + var value = execute_derived(derived2); + if (!derived2.equals(value)) { + derived2.wv = increment_write_version(); + if (!current_batch?.is_fork || derived2.deps === null) { + if (current_batch !== null) { + current_batch.capture(derived2, value, true); + previous_batch?.capture(derived2, value, true); + } else { + derived2.v = value; + } + if (derived2.deps === null) { + set_signal_status(derived2, CLEAN); + return; + } + } + } + if (is_destroying_effect) { + return; + } + if (batch_values !== null) { + if (effect_tracking() || current_batch?.is_fork) { + batch_values.set(derived2, value); + } + } else { + update_derived_status(derived2); + } +} +function freeze_derived_effects(derived2) { + if (derived2.effects === null) return; + for (const e of derived2.effects) { + if (e.teardown || e.ac) { + e.teardown?.(); + e.ac?.abort(STALE_REACTION); + if (e.fn !== null) e.teardown = noop; + e.ac = null; + remove_reactions(e, 0); + destroy_effect_children(e); + } + } +} +function unfreeze_derived_effects(derived2) { + if (derived2.effects === null) return; + for (const e of derived2.effects) { + if (e.teardown && e.fn !== null) { + update_effect(e); + } + } +} +let eager_effects = /* @__PURE__ */ new Set(); +const old_values = /* @__PURE__ */ new Map(); +let eager_effects_deferred = false; +function source(v, stack) { + var signal = { + f: 0, + // TODO ideally we could skip this altogether, but it causes type errors + v, + reactions: null, + equals, + rv: 0, + wv: 0 + }; + return signal; +} +// @__NO_SIDE_EFFECTS__ +function state(v, stack) { + const s = source(v); + push_reaction_value(s); + return s; +} +// @__NO_SIDE_EFFECTS__ +function mutable_source(initial_value, immutable = false, trackable = true) { + const s = source(initial_value); + if (!immutable) { + s.equals = safe_equals; + } + return s; +} +function set(source2, value, should_proxy = false) { + if (active_reaction !== null && // since we are untracking the function inside `$inspect.with` we need to add this check + // to ensure we error if state is set inside an inspect effect + (!untracking || (active_reaction.f & EAGER_EFFECT) !== 0) && is_runes() && (active_reaction.f & (DERIVED | BLOCK_EFFECT | ASYNC | EAGER_EFFECT)) !== 0 && (current_sources === null || !includes.call(current_sources, source2))) { + state_unsafe_mutation(); + } + let new_value = should_proxy ? proxy(value) : value; + return internal_set(source2, new_value, legacy_updates); +} +function internal_set(source2, value, updated_during_traversal = null) { + if (!source2.equals(value)) { + old_values.set(source2, is_destroying_effect ? value : source2.v); + var batch = Batch.ensure(); + batch.capture(source2, value); + if ((source2.f & DERIVED) !== 0) { + const derived2 = ( + /** @type {Derived} */ + source2 + ); + if ((source2.f & DIRTY) !== 0) { + execute_derived(derived2); + } + if (batch_values === null) { + update_derived_status(derived2); + } + } + source2.wv = increment_write_version(); + mark_reactions(source2, DIRTY, updated_during_traversal); + if (active_effect !== null && (active_effect.f & CLEAN) !== 0 && (active_effect.f & (BRANCH_EFFECT | ROOT_EFFECT)) === 0) { + if (untracked_writes === null) { + set_untracked_writes([source2]); + } else { + untracked_writes.push(source2); + } + } + if (!batch.is_fork && eager_effects.size > 0 && !eager_effects_deferred) { + flush_eager_effects(); + } + } + return value; +} +function flush_eager_effects() { + eager_effects_deferred = false; + for (const effect2 of eager_effects) { + if ((effect2.f & CLEAN) !== 0) { + set_signal_status(effect2, MAYBE_DIRTY); + } + let dirty; + try { + dirty = is_dirty(effect2); + } catch { + dirty = true; + } + if (dirty) { + update_effect(effect2); + } + } + eager_effects.clear(); +} +function increment(source2) { + set(source2, source2.v + 1); +} +function mark_reactions(signal, status, updated_during_traversal) { + var reactions = signal.reactions; + if (reactions === null) return; + var length = reactions.length; + for (var i = 0; i < length; i++) { + var reaction = reactions[i]; + var flags2 = reaction.f; + var not_dirty = (flags2 & DIRTY) === 0; + if (not_dirty) { + set_signal_status(reaction, status); + } + if ((flags2 & EAGER_EFFECT) !== 0) { + eager_effects.add( + /** @type {Effect} */ + reaction + ); + } else if ((flags2 & DERIVED) !== 0) { + var derived2 = ( + /** @type {Derived} */ + reaction + ); + batch_values?.delete(derived2); + if ((flags2 & WAS_MARKED) === 0) { + if (flags2 & CONNECTED && (active_effect === null || (active_effect.f & REACTION_IS_UPDATING) === 0)) { + reaction.f |= WAS_MARKED; + } + mark_reactions(derived2, MAYBE_DIRTY, updated_during_traversal); + } + } else if (not_dirty) { + var effect2 = ( + /** @type {Effect} */ + reaction + ); + if ((flags2 & BLOCK_EFFECT) !== 0 && eager_block_effects !== null) { + eager_block_effects.add(effect2); + } + if (updated_during_traversal !== null) { + updated_during_traversal.push(effect2); + } else { + schedule_effect(effect2); + } + } + } +} +function autofocus(dom, value) { + if (value) { + const body = document.body; + dom.autofocus = true; + queue_micro_task(() => { + if (document.activeElement === body) { + dom.focus(); + } + }); + } +} +let listening_to_form_reset = false; +function add_form_reset_listener() { + if (!listening_to_form_reset) { + listening_to_form_reset = true; + document.addEventListener( + "reset", + (evt) => { + Promise.resolve().then(() => { + if (!evt.defaultPrevented) { + for ( + const e of + /**@type {HTMLFormElement} */ + evt.target.elements + ) { + e[FORM_RESET_HANDLER]?.(); + } + } + }); + }, + // In the capture phase to guarantee we get noticed of it (no possibility of stopPropagation) + { capture: true } + ); + } +} +function without_reactive_context(fn) { + var previous_reaction = active_reaction; + var previous_effect = active_effect; + set_active_reaction(null); + set_active_effect(null); + try { + return fn(); + } finally { + set_active_reaction(previous_reaction); + set_active_effect(previous_effect); + } +} +function listen_to_event_and_reset_event(element, event2, handler, on_reset = handler) { + element.addEventListener(event2, () => without_reactive_context(handler)); + const prev = ( + /** @type {any} */ + element[FORM_RESET_HANDLER] + ); + if (prev) { + element[FORM_RESET_HANDLER] = () => { + prev(); + on_reset(true); + }; + } else { + element[FORM_RESET_HANDLER] = () => on_reset(true); + } + add_form_reset_listener(); +} +let is_updating_effect = false; +let is_destroying_effect = false; +function set_is_destroying_effect(value) { + is_destroying_effect = value; +} +let active_reaction = null; +let untracking = false; +function set_active_reaction(reaction) { + active_reaction = reaction; +} +let active_effect = null; +function set_active_effect(effect2) { + active_effect = effect2; +} +let current_sources = null; +function push_reaction_value(value) { + if (active_reaction !== null && true) { + if (current_sources === null) { + current_sources = [value]; + } else { + current_sources.push(value); + } + } +} +let new_deps = null; +let skipped_deps = 0; +let untracked_writes = null; +function set_untracked_writes(value) { + untracked_writes = value; +} +let write_version = 1; +let read_version = 0; +let update_version = read_version; +function set_update_version(value) { + update_version = value; +} +function increment_write_version() { + return ++write_version; +} +function is_dirty(reaction) { + var flags2 = reaction.f; + if ((flags2 & DIRTY) !== 0) { + return true; + } + if (flags2 & DERIVED) { + reaction.f &= ~WAS_MARKED; + } + if ((flags2 & MAYBE_DIRTY) !== 0) { + var dependencies = ( + /** @type {Value[]} */ + reaction.deps + ); + var length = dependencies.length; + for (var i = 0; i < length; i++) { + var dependency = dependencies[i]; + if (is_dirty( + /** @type {Derived} */ + dependency + )) { + update_derived( + /** @type {Derived} */ + dependency + ); + } + if (dependency.wv > reaction.wv) { + return true; + } + } + if ((flags2 & CONNECTED) !== 0 && // During time traveling we don't want to reset the status so that + // traversal of the graph in the other batches still happens + batch_values === null) { + set_signal_status(reaction, CLEAN); + } + } + return false; +} +function schedule_possible_effect_self_invalidation(signal, effect2, root2 = true) { + var reactions = signal.reactions; + if (reactions === null) return; + if (current_sources !== null && includes.call(current_sources, signal)) { + return; + } + for (var i = 0; i < reactions.length; i++) { + var reaction = reactions[i]; + if ((reaction.f & DERIVED) !== 0) { + schedule_possible_effect_self_invalidation( + /** @type {Derived} */ + reaction, + effect2, + false + ); + } else if (effect2 === reaction) { + if (root2) { + set_signal_status(reaction, DIRTY); + } else if ((reaction.f & CLEAN) !== 0) { + set_signal_status(reaction, MAYBE_DIRTY); + } + schedule_effect( + /** @type {Effect} */ + reaction + ); + } + } +} +function update_reaction(reaction) { + var previous_deps = new_deps; + var previous_skipped_deps = skipped_deps; + var previous_untracked_writes = untracked_writes; + var previous_reaction = active_reaction; + var previous_sources = current_sources; + var previous_component_context = component_context; + var previous_untracking = untracking; + var previous_update_version = update_version; + var flags2 = reaction.f; + new_deps = /** @type {null | Value[]} */ + null; + skipped_deps = 0; + untracked_writes = null; + active_reaction = (flags2 & (BRANCH_EFFECT | ROOT_EFFECT)) === 0 ? reaction : null; + current_sources = null; + set_component_context(reaction.ctx); + untracking = false; + update_version = ++read_version; + if (reaction.ac !== null) { + without_reactive_context(() => { + reaction.ac.abort(STALE_REACTION); + }); + reaction.ac = null; + } + try { + reaction.f |= REACTION_IS_UPDATING; + var fn = ( + /** @type {Function} */ + reaction.fn + ); + var result = fn(); + reaction.f |= REACTION_RAN; + var deps = reaction.deps; + var is_fork = current_batch?.is_fork; + if (new_deps !== null) { + var i; + if (!is_fork) { + remove_reactions(reaction, skipped_deps); + } + if (deps !== null && skipped_deps > 0) { + deps.length = skipped_deps + new_deps.length; + for (i = 0; i < new_deps.length; i++) { + deps[skipped_deps + i] = new_deps[i]; + } + } else { + reaction.deps = deps = new_deps; + } + if (effect_tracking() && (reaction.f & CONNECTED) !== 0) { + for (i = skipped_deps; i < deps.length; i++) { + (deps[i].reactions ??= []).push(reaction); + } + } + } else if (!is_fork && deps !== null && skipped_deps < deps.length) { + remove_reactions(reaction, skipped_deps); + deps.length = skipped_deps; + } + if (is_runes() && untracked_writes !== null && !untracking && deps !== null && (reaction.f & (DERIVED | MAYBE_DIRTY | DIRTY)) === 0) { + for (i = 0; i < /** @type {Source[]} */ + untracked_writes.length; i++) { + schedule_possible_effect_self_invalidation( + untracked_writes[i], + /** @type {Effect} */ + reaction + ); + } + } + if (previous_reaction !== null && previous_reaction !== reaction) { + read_version++; + if (previous_reaction.deps !== null) { + for (let i2 = 0; i2 < previous_skipped_deps; i2 += 1) { + previous_reaction.deps[i2].rv = read_version; + } + } + if (previous_deps !== null) { + for (const dep of previous_deps) { + dep.rv = read_version; + } + } + if (untracked_writes !== null) { + if (previous_untracked_writes === null) { + previous_untracked_writes = untracked_writes; + } else { + previous_untracked_writes.push(.../** @type {Source[]} */ + untracked_writes); + } + } + } + if ((reaction.f & ERROR_VALUE) !== 0) { + reaction.f ^= ERROR_VALUE; + } + return result; + } catch (error) { + return handle_error(error); + } finally { + reaction.f ^= REACTION_IS_UPDATING; + new_deps = previous_deps; + skipped_deps = previous_skipped_deps; + untracked_writes = previous_untracked_writes; + active_reaction = previous_reaction; + current_sources = previous_sources; + set_component_context(previous_component_context); + untracking = previous_untracking; + update_version = previous_update_version; + } +} +function remove_reaction(signal, dependency) { + let reactions = dependency.reactions; + if (reactions !== null) { + var index = index_of.call(reactions, signal); + if (index !== -1) { + var new_length = reactions.length - 1; + if (new_length === 0) { + reactions = dependency.reactions = null; + } else { + reactions[index] = reactions[new_length]; + reactions.pop(); + } + } + } + if (reactions === null && (dependency.f & DERIVED) !== 0 && // Destroying a child effect while updating a parent effect can cause a dependency to appear + // to be unused, when in fact it is used by the currently-updating parent. Checking `new_deps` + // allows us to skip the expensive work of disconnecting and immediately reconnecting it + (new_deps === null || !includes.call(new_deps, dependency))) { + var derived2 = ( + /** @type {Derived} */ + dependency + ); + if ((derived2.f & CONNECTED) !== 0) { + derived2.f ^= CONNECTED; + derived2.f &= ~WAS_MARKED; + } + if (derived2.v !== UNINITIALIZED) { + update_derived_status(derived2); + } + freeze_derived_effects(derived2); + remove_reactions(derived2, 0); + } +} +function remove_reactions(signal, start_index) { + var dependencies = signal.deps; + if (dependencies === null) return; + for (var i = start_index; i < dependencies.length; i++) { + remove_reaction(signal, dependencies[i]); + } +} +function update_effect(effect2) { + var flags2 = effect2.f; + if ((flags2 & DESTROYED) !== 0) { + return; + } + set_signal_status(effect2, CLEAN); + var previous_effect = active_effect; + var was_updating_effect = is_updating_effect; + active_effect = effect2; + is_updating_effect = true; + try { + if ((flags2 & (BLOCK_EFFECT | MANAGED_EFFECT)) !== 0) { + destroy_block_effect_children(effect2); + } else { + destroy_effect_children(effect2); + } + execute_effect_teardown(effect2); + var teardown2 = update_reaction(effect2); + effect2.teardown = typeof teardown2 === "function" ? teardown2 : null; + effect2.wv = write_version; + var dep; + if (DEV && tracing_mode_flag && (effect2.f & DIRTY) !== 0 && effect2.deps !== null) ; + } finally { + is_updating_effect = was_updating_effect; + active_effect = previous_effect; + } +} +async function tick() { + await Promise.resolve(); + flushSync(); +} +function get(signal) { + var flags2 = signal.f; + var is_derived = (flags2 & DERIVED) !== 0; + if (active_reaction !== null && !untracking) { + var destroyed = active_effect !== null && (active_effect.f & DESTROYED) !== 0; + if (!destroyed && (current_sources === null || !includes.call(current_sources, signal))) { + var deps = active_reaction.deps; + if ((active_reaction.f & REACTION_IS_UPDATING) !== 0) { + if (signal.rv < read_version) { + signal.rv = read_version; + if (new_deps === null && deps !== null && deps[skipped_deps] === signal) { + skipped_deps++; + } else if (new_deps === null) { + new_deps = [signal]; + } else { + new_deps.push(signal); + } + } + } else { + (active_reaction.deps ??= []).push(signal); + var reactions = signal.reactions; + if (reactions === null) { + signal.reactions = [active_reaction]; + } else if (!includes.call(reactions, active_reaction)) { + reactions.push(active_reaction); + } + } + } + } + if (is_destroying_effect && old_values.has(signal)) { + return old_values.get(signal); + } + if (is_derived) { + var derived2 = ( + /** @type {Derived} */ + signal + ); + if (is_destroying_effect) { + var value = derived2.v; + if ((derived2.f & CLEAN) === 0 && derived2.reactions !== null || depends_on_old_values(derived2)) { + value = execute_derived(derived2); + } + old_values.set(derived2, value); + return value; + } + var should_connect = (derived2.f & CONNECTED) === 0 && !untracking && active_reaction !== null && (is_updating_effect || (active_reaction.f & CONNECTED) !== 0); + var is_new = (derived2.f & REACTION_RAN) === 0; + if (is_dirty(derived2)) { + if (should_connect) { + derived2.f |= CONNECTED; + } + update_derived(derived2); + } + if (should_connect && !is_new) { + unfreeze_derived_effects(derived2); + reconnect(derived2); + } + } + if (batch_values?.has(signal)) { + return batch_values.get(signal); + } + if ((signal.f & ERROR_VALUE) !== 0) { + throw signal.v; + } + return signal.v; +} +function reconnect(derived2) { + derived2.f |= CONNECTED; + if (derived2.deps === null) return; + for (const dep of derived2.deps) { + (dep.reactions ??= []).push(derived2); + if ((dep.f & DERIVED) !== 0 && (dep.f & CONNECTED) === 0) { + unfreeze_derived_effects( + /** @type {Derived} */ + dep + ); + reconnect( + /** @type {Derived} */ + dep + ); + } + } +} +function depends_on_old_values(derived2) { + if (derived2.v === UNINITIALIZED) return true; + if (derived2.deps === null) return false; + for (const dep of derived2.deps) { + if (old_values.has(dep)) { + return true; + } + if ((dep.f & DERIVED) !== 0 && depends_on_old_values( + /** @type {Derived} */ + dep + )) { + return true; + } + } + return false; +} +function untrack(fn) { + var previous_untracking = untracking; + try { + untracking = true; + return fn(); + } finally { + untracking = previous_untracking; + } +} +function validate_effect(rune) { + if (active_effect === null) { + if (active_reaction === null) { + effect_orphan(); + } + effect_in_unowned_derived(); + } + if (is_destroying_effect) { + effect_in_teardown(); + } +} +function push_effect(effect2, parent_effect) { + var parent_last = parent_effect.last; + if (parent_last === null) { + parent_effect.last = parent_effect.first = effect2; + } else { + parent_last.next = effect2; + effect2.prev = parent_last; + parent_effect.last = effect2; + } +} +function create_effect(type, fn) { + var parent = active_effect; + if (parent !== null && (parent.f & INERT) !== 0) { + type |= INERT; + } + var effect2 = { + ctx: component_context, + deps: null, + nodes: null, + f: type | DIRTY | CONNECTED, + first: null, + fn, + last: null, + next: null, + parent, + b: parent && parent.b, + prev: null, + teardown: null, + wv: 0, + ac: null + }; + current_batch?.register_created_effect(effect2); + var e = effect2; + if ((type & EFFECT) !== 0) { + if (collected_effects !== null) { + collected_effects.push(effect2); + } else { + Batch.ensure().schedule(effect2); + } + } else if (fn !== null) { + try { + update_effect(effect2); + } catch (e2) { + destroy_effect(effect2); + throw e2; + } + if (e.deps === null && e.teardown === null && e.nodes === null && e.first === e.last && // either `null`, or a singular child + (e.f & EFFECT_PRESERVED) === 0) { + e = e.first; + if ((type & BLOCK_EFFECT) !== 0 && (type & EFFECT_TRANSPARENT) !== 0 && e !== null) { + e.f |= EFFECT_TRANSPARENT; + } + } + } + if (e !== null) { + e.parent = parent; + if (parent !== null) { + push_effect(e, parent); + } + if (active_reaction !== null && (active_reaction.f & DERIVED) !== 0 && (type & ROOT_EFFECT) === 0) { + var derived2 = ( + /** @type {Derived} */ + active_reaction + ); + (derived2.effects ??= []).push(e); + } + } + return effect2; +} +function effect_tracking() { + return active_reaction !== null && !untracking; +} +function teardown(fn) { + const effect2 = create_effect(RENDER_EFFECT, null); + set_signal_status(effect2, CLEAN); + effect2.teardown = fn; + return effect2; +} +function user_effect(fn) { + validate_effect(); + var flags2 = ( + /** @type {Effect} */ + active_effect.f + ); + var defer = !active_reaction && (flags2 & BRANCH_EFFECT) !== 0 && (flags2 & REACTION_RAN) === 0; + if (defer) { + var context = ( + /** @type {ComponentContext} */ + component_context + ); + (context.e ??= []).push(fn); + } else { + return create_user_effect(fn); + } +} +function create_user_effect(fn) { + return create_effect(EFFECT | USER_EFFECT, fn); +} +function effect_root(fn) { + Batch.ensure(); + const effect2 = create_effect(ROOT_EFFECT | EFFECT_PRESERVED, fn); + return () => { + destroy_effect(effect2); + }; +} +function component_root(fn) { + Batch.ensure(); + const effect2 = create_effect(ROOT_EFFECT | EFFECT_PRESERVED, fn); + return (options = {}) => { + return new Promise((fulfil) => { + if (options.outro) { + pause_effect(effect2, () => { + destroy_effect(effect2); + fulfil(void 0); + }); + } else { + destroy_effect(effect2); + fulfil(void 0); + } + }); + }; +} +function effect(fn) { + return create_effect(EFFECT, fn); +} +function async_effect(fn) { + return create_effect(ASYNC | EFFECT_PRESERVED, fn); +} +function render_effect(fn, flags2 = 0) { + return create_effect(RENDER_EFFECT | flags2, fn); +} +function template_effect(fn, sync = [], async = [], blockers = []) { + flatten(blockers, sync, async, (values) => { + create_effect(RENDER_EFFECT, () => fn(...values.map(get))); + }); +} +function block(fn, flags2 = 0) { + var effect2 = create_effect(BLOCK_EFFECT | flags2, fn); + return effect2; +} +function managed(fn, flags2 = 0) { + var effect2 = create_effect(MANAGED_EFFECT | flags2, fn); + return effect2; +} +function branch(fn) { + return create_effect(BRANCH_EFFECT | EFFECT_PRESERVED, fn); +} +function execute_effect_teardown(effect2) { + var teardown2 = effect2.teardown; + if (teardown2 !== null) { + const previously_destroying_effect = is_destroying_effect; + const previous_reaction = active_reaction; + set_is_destroying_effect(true); + set_active_reaction(null); + try { + teardown2.call(null); + } finally { + set_is_destroying_effect(previously_destroying_effect); + set_active_reaction(previous_reaction); + } + } +} +function destroy_effect_children(signal, remove_dom = false) { + var effect2 = signal.first; + signal.first = signal.last = null; + while (effect2 !== null) { + const controller = effect2.ac; + if (controller !== null) { + without_reactive_context(() => { + controller.abort(STALE_REACTION); + }); + } + var next2 = effect2.next; + if ((effect2.f & ROOT_EFFECT) !== 0) { + effect2.parent = null; + } else { + destroy_effect(effect2, remove_dom); + } + effect2 = next2; + } +} +function destroy_block_effect_children(signal) { + var effect2 = signal.first; + while (effect2 !== null) { + var next2 = effect2.next; + if ((effect2.f & BRANCH_EFFECT) === 0) { + destroy_effect(effect2); + } + effect2 = next2; + } +} +function destroy_effect(effect2, remove_dom = true) { + var removed = false; + if ((remove_dom || (effect2.f & HEAD_EFFECT) !== 0) && effect2.nodes !== null && effect2.nodes.end !== null) { + remove_effect_dom( + effect2.nodes.start, + /** @type {TemplateNode} */ + effect2.nodes.end + ); + removed = true; + } + set_signal_status(effect2, DESTROYING); + destroy_effect_children(effect2, remove_dom && !removed); + remove_reactions(effect2, 0); + var transitions = effect2.nodes && effect2.nodes.t; + if (transitions !== null) { + for (const transition of transitions) { + transition.stop(); + } + } + execute_effect_teardown(effect2); + effect2.f ^= DESTROYING; + effect2.f |= DESTROYED; + var parent = effect2.parent; + if (parent !== null && parent.first !== null) { + unlink_effect(effect2); + } + effect2.next = effect2.prev = effect2.teardown = effect2.ctx = effect2.deps = effect2.fn = effect2.nodes = effect2.ac = effect2.b = null; +} +function remove_effect_dom(node, end) { + while (node !== null) { + var next2 = node === end ? null : /* @__PURE__ */ get_next_sibling(node); + node.remove(); + node = next2; + } +} +function unlink_effect(effect2) { + var parent = effect2.parent; + var prev = effect2.prev; + var next2 = effect2.next; + if (prev !== null) prev.next = next2; + if (next2 !== null) next2.prev = prev; + if (parent !== null) { + if (parent.first === effect2) parent.first = next2; + if (parent.last === effect2) parent.last = prev; + } +} +function pause_effect(effect2, callback, destroy = true) { + var transitions = []; + pause_children(effect2, transitions, true); + var fn = () => { + if (destroy) destroy_effect(effect2); + if (callback) callback(); + }; + var remaining = transitions.length; + if (remaining > 0) { + var check = () => --remaining || fn(); + for (var transition of transitions) { + transition.out(check); + } + } else { + fn(); + } +} +function pause_children(effect2, transitions, local) { + if ((effect2.f & INERT) !== 0) return; + effect2.f ^= INERT; + var t = effect2.nodes && effect2.nodes.t; + if (t !== null) { + for (const transition of t) { + if (transition.is_global || local) { + transitions.push(transition); + } + } + } + var child2 = effect2.first; + while (child2 !== null) { + var sibling2 = child2.next; + if ((child2.f & ROOT_EFFECT) === 0) { + var transparent = (child2.f & EFFECT_TRANSPARENT) !== 0 || // If this is a branch effect without a block effect parent, + // it means the parent block effect was pruned. In that case, + // transparency information was transferred to the branch effect. + (child2.f & BRANCH_EFFECT) !== 0 && (effect2.f & BLOCK_EFFECT) !== 0; + pause_children(child2, transitions, transparent ? local : false); + } + child2 = sibling2; + } +} +function resume_effect(effect2) { + resume_children(effect2, true); +} +function resume_children(effect2, local) { + if ((effect2.f & INERT) === 0) return; + effect2.f ^= INERT; + if ((effect2.f & CLEAN) === 0) { + set_signal_status(effect2, DIRTY); + Batch.ensure().schedule(effect2); + } + var child2 = effect2.first; + while (child2 !== null) { + var sibling2 = child2.next; + var transparent = (child2.f & EFFECT_TRANSPARENT) !== 0 || (child2.f & BRANCH_EFFECT) !== 0; + resume_children(child2, transparent ? local : false); + child2 = sibling2; + } + var t = effect2.nodes && effect2.nodes.t; + if (t !== null) { + for (const transition of t) { + if (transition.is_global || local) { + transition.in(); + } + } + } +} +function move_effect(effect2, fragment) { + if (!effect2.nodes) return; + var node = effect2.nodes.start; + var end = effect2.nodes.end; + while (node !== null) { + var next2 = node === end ? null : /* @__PURE__ */ get_next_sibling(node); + fragment.append(node); + node = next2; + } +} +function store(defaultValue) { + const scope = { + get: (name) => { + return get$1(scope.store)[name]; + }, + set: (name, value) => { + if (typeof name === "string") { + Object.assign(get$1(scope.store), { + [name]: value + }); + } else { + Object.assign(get$1(scope.store), name); + } + scope.store.set(get$1(scope.store)); + }, + store: writable(defaultValue) + }; + return scope; +} +globalThis.$altcha = globalThis.$altcha || { + algorithms: /* @__PURE__ */ new Map(), + defaults: store({}), + i18n: store({}), + instances: /* @__PURE__ */ new Set(), + plugins: /* @__PURE__ */ new Set() +}; +const i18n$Z = { + ariaLinkLabel: "Altcha (official website)", + cancel: "Cancel", + enterCode: "Enter code", + enterCodeAria: "Enter code you hear. Press Space to play audio.", + enterCodeFromImage: "To proceed, please enter the code from the image below.", + error: "Verification failed. Try again later.", + expired: "Verification expired. Try again.", + footer: 'Protected by ALTCHA', + getAudioChallenge: "Get an audio challenge", + label: "I'm not a robot", + loading: "Loading...", + reload: "Reload", + verify: "Verify", + verificationRequired: "Verification required!", + verified: "Verified", + verifying: "Verifying...", + waitAlert: "Verifying... please wait." +}; +globalThis.$altcha.i18n.set("en", i18n$Z); +const PUBLIC_VERSION = "5"; +if (typeof window !== "undefined") { + ((window.__svelte ??= {}).v ??= /* @__PURE__ */ new Set()).add(PUBLIC_VERSION); +} +const event_symbol = /* @__PURE__ */ Symbol("events"); +const all_registered_events = /* @__PURE__ */ new Set(); +const root_event_handles = /* @__PURE__ */ new Set(); +function create_event(event_name, dom, handler, options = {}) { + function target_handler(event2) { + if (!options.capture) { + handle_event_propagation.call(dom, event2); + } + if (!event2.cancelBubble) { + return without_reactive_context(() => { + return handler?.call(this, event2); + }); + } + } + if (event_name.startsWith("pointer") || event_name.startsWith("touch") || event_name === "wheel") { + queue_micro_task(() => { + dom.addEventListener(event_name, target_handler, options); + }); + } else { + dom.addEventListener(event_name, target_handler, options); + } + return target_handler; +} +function event(event_name, dom, handler, capture2, passive) { + var options = { capture: capture2, passive }; + var target_handler = create_event(event_name, dom, handler, options); + if (dom === document.body || // @ts-ignore + dom === window || // @ts-ignore + dom === document || // Firefox has quirky behavior, it can happen that we still get "canplay" events when the element is already removed + dom instanceof HTMLMediaElement) { + teardown(() => { + dom.removeEventListener(event_name, target_handler, options); + }); + } +} +function delegated(event_name, element, handler) { + (element[event_symbol] ??= {})[event_name] = handler; +} +function delegate(events) { + for (var i = 0; i < events.length; i++) { + all_registered_events.add(events[i]); + } + for (var fn of root_event_handles) { + fn(events); + } +} +let last_propagated_event = null; +function handle_event_propagation(event2) { + var handler_element = this; + var owner_document = ( + /** @type {Node} */ + handler_element.ownerDocument + ); + var event_name = event2.type; + var path = event2.composedPath?.() || []; + var current_target = ( + /** @type {null | Element} */ + path[0] || event2.target + ); + last_propagated_event = event2; + var path_idx = 0; + var handled_at = last_propagated_event === event2 && event2[event_symbol]; + if (handled_at) { + var at_idx = path.indexOf(handled_at); + if (at_idx !== -1 && (handler_element === document || handler_element === /** @type {any} */ + window)) { + event2[event_symbol] = handler_element; + return; + } + var handler_idx = path.indexOf(handler_element); + if (handler_idx === -1) { + return; + } + if (at_idx <= handler_idx) { + path_idx = at_idx; + } + } + current_target = /** @type {Element} */ + path[path_idx] || event2.target; + if (current_target === handler_element) return; + define_property(event2, "currentTarget", { + configurable: true, + get() { + return current_target || owner_document; + } + }); + var previous_reaction = active_reaction; + var previous_effect = active_effect; + set_active_reaction(null); + set_active_effect(null); + try { + var throw_error; + var other_errors = []; + while (current_target !== null) { + var parent_element = current_target.assignedSlot || current_target.parentNode || /** @type {any} */ + current_target.host || null; + try { + var delegated2 = current_target[event_symbol]?.[event_name]; + if (delegated2 != null && (!/** @type {any} */ + current_target.disabled || // DOM could've been updated already by the time this is reached, so we check this as well + // -> the target could not have been disabled because it emits the event in the first place + event2.target === current_target)) { + delegated2.call(current_target, event2); + } + } catch (error) { + if (throw_error) { + other_errors.push(error); + } else { + throw_error = error; + } + } + if (event2.cancelBubble || parent_element === handler_element || parent_element === null) { + break; + } + current_target = parent_element; + } + if (throw_error) { + for (let error of other_errors) { + queueMicrotask(() => { + throw error; + }); + } + throw throw_error; + } + } finally { + event2[event_symbol] = handler_element; + delete event2.currentTarget; + set_active_reaction(previous_reaction); + set_active_effect(previous_effect); + } +} +const policy = ( + // We gotta write it like this because after downleveling the pure comment may end up in the wrong location + globalThis?.window?.trustedTypes && /* @__PURE__ */ globalThis.window.trustedTypes.createPolicy("svelte-trusted-html", { + /** @param {string} html */ + createHTML: (html2) => { + return html2; + } + }) +); +function create_trusted_html(html2) { + return ( + /** @type {string} */ + policy?.createHTML(html2) ?? html2 + ); +} +function create_fragment_from_html(html2) { + var elem = create_element("template"); + elem.innerHTML = create_trusted_html(html2.replaceAll("", "")); + return elem.content; +} +function assign_nodes(start, end) { + var effect2 = ( + /** @type {Effect} */ + active_effect + ); + if (effect2.nodes === null) { + effect2.nodes = { start, end, a: null, t: null }; + } +} +// @__NO_SIDE_EFFECTS__ +function from_html(content, flags2) { + var is_fragment = (flags2 & TEMPLATE_FRAGMENT) !== 0; + var use_import_node = (flags2 & TEMPLATE_USE_IMPORT_NODE) !== 0; + var node; + var has_start = !content.startsWith(""); + return () => { + if (hydrating) { + assign_nodes(hydrate_node, null); + return hydrate_node; + } + if (node === void 0) { + node = create_fragment_from_html(has_start ? content : "" + content); + if (!is_fragment) node = /** @type {TemplateNode} */ + /* @__PURE__ */ get_first_child(node); + } + var clone = ( + /** @type {TemplateNode} */ + use_import_node || is_firefox ? document.importNode(node, true) : node.cloneNode(true) + ); + if (is_fragment) { + var start = ( + /** @type {TemplateNode} */ + /* @__PURE__ */ get_first_child(clone) + ); + var end = ( + /** @type {TemplateNode} */ + clone.lastChild + ); + assign_nodes(start, end); + } else { + assign_nodes(clone, clone); + } + return clone; + }; +} +// @__NO_SIDE_EFFECTS__ +function from_namespace(content, flags2, ns = "svg") { + var has_start = !content.startsWith(""); + var wrapped = `<${ns}>${has_start ? content : "" + content}`; + var node; + return () => { + if (hydrating) { + assign_nodes(hydrate_node, null); + return hydrate_node; + } + if (!node) { + var fragment = ( + /** @type {DocumentFragment} */ + create_fragment_from_html(wrapped) + ); + var root2 = ( + /** @type {Element} */ + /* @__PURE__ */ get_first_child(fragment) + ); + { + node = /** @type {Element} */ + /* @__PURE__ */ get_first_child(root2); + } + } + var clone = ( + /** @type {TemplateNode} */ + node.cloneNode(true) + ); + { + assign_nodes(clone, clone); + } + return clone; + }; +} +// @__NO_SIDE_EFFECTS__ +function from_svg(content, flags2) { + return /* @__PURE__ */ from_namespace(content, flags2, "svg"); +} +function text(value = "") { + if (!hydrating) { + var t = create_text(value + ""); + assign_nodes(t, t); + return t; + } + var node = hydrate_node; + if (node.nodeType !== TEXT_NODE) { + node.before(node = create_text()); + set_hydrate_node(node); + } else { + merge_text_nodes( + /** @type {Text} */ + node + ); + } + assign_nodes(node, node); + return node; +} +function comment() { + if (hydrating) { + assign_nodes(hydrate_node, null); + return hydrate_node; + } + var frag = document.createDocumentFragment(); + var start = document.createComment(""); + var anchor = create_text(); + frag.append(start, anchor); + assign_nodes(start, anchor); + return frag; +} +function append(anchor, dom) { + if (hydrating) { + var effect2 = ( + /** @type {Effect & { nodes: EffectNodes }} */ + active_effect + ); + if ((effect2.f & REACTION_RAN) === 0 || effect2.nodes.end === null) { + effect2.nodes.end = hydrate_node; + } + hydrate_next(); + return; + } + if (anchor === null) { + return; + } + anchor.before( + /** @type {Node} */ + dom + ); +} +function is_capture_event(name) { + return name.endsWith("capture") && name !== "gotpointercapture" && name !== "lostpointercapture"; +} +const DELEGATED_EVENTS = [ + "beforeinput", + "click", + "change", + "dblclick", + "contextmenu", + "focusin", + "focusout", + "input", + "keydown", + "keyup", + "mousedown", + "mousemove", + "mouseout", + "mouseover", + "mouseup", + "pointerdown", + "pointermove", + "pointerout", + "pointerover", + "pointerup", + "touchend", + "touchmove", + "touchstart" +]; +function can_delegate_event(event_name) { + return DELEGATED_EVENTS.includes(event_name); +} +const ATTRIBUTE_ALIASES = { + // no `class: 'className'` because we handle that separately + formnovalidate: "formNoValidate", + ismap: "isMap", + nomodule: "noModule", + playsinline: "playsInline", + readonly: "readOnly", + defaultvalue: "defaultValue", + defaultchecked: "defaultChecked", + srcobject: "srcObject", + novalidate: "noValidate", + allowfullscreen: "allowFullscreen", + disablepictureinpicture: "disablePictureInPicture", + disableremoteplayback: "disableRemotePlayback" +}; +function normalize_attribute(name) { + name = name.toLowerCase(); + return ATTRIBUTE_ALIASES[name] ?? name; +} +const PASSIVE_EVENTS = ["touchstart", "touchmove"]; +function is_passive_event(name) { + return PASSIVE_EVENTS.includes(name); +} +function set_text(text2, value) { + var str = value == null ? "" : typeof value === "object" ? `${value}` : value; + if (str !== /** @type {any} */ + (text2[TEXT_CACHE] ??= text2.nodeValue)) { + text2[TEXT_CACHE] = str; + text2.nodeValue = `${str}`; + } +} +function mount(component2, options) { + return _mount(component2, options); +} +function hydrate(component2, options) { + init_operations(); + options.intro = options.intro ?? false; + const target = options.target; + const was_hydrating = hydrating; + const previous_hydrate_node = hydrate_node; + try { + var anchor = /* @__PURE__ */ get_first_child(target); + while (anchor && (anchor.nodeType !== COMMENT_NODE || /** @type {Comment} */ + anchor.data !== HYDRATION_START)) { + anchor = /* @__PURE__ */ get_next_sibling(anchor); + } + if (!anchor) { + throw HYDRATION_ERROR; + } + set_hydrating(true); + set_hydrate_node( + /** @type {Comment} */ + anchor + ); + const instance = _mount(component2, { ...options, anchor }); + set_hydrating(false); + return ( + /** @type {Exports} */ + instance + ); + } catch (error) { + if (error instanceof Error && error.message.split("\n").some((line) => line.startsWith("https://svelte.dev/e/"))) { + throw error; + } + if (error !== HYDRATION_ERROR) { + console.warn("Failed to hydrate: ", error); + } + if (options.recover === false) { + hydration_failed(); + } + init_operations(); + clear_text_content(target); + set_hydrating(false); + return mount(component2, options); + } finally { + set_hydrating(was_hydrating); + set_hydrate_node(previous_hydrate_node); + } +} +const listeners = /* @__PURE__ */ new Map(); +function _mount(Component, { target, anchor, props = {}, events, context, intro = true, transformError }) { + init_operations(); + var component2 = void 0; + var unmount2 = component_root(() => { + var anchor_node = anchor ?? target.appendChild(create_text()); + boundary( + /** @type {TemplateNode} */ + anchor_node, + { + pending: () => { + } + }, + (anchor_node2) => { + push({}); + var ctx = ( + /** @type {ComponentContext} */ + component_context + ); + if (context) ctx.c = context; + if (events) { + props.$$events = events; + } + if (hydrating) { + assign_nodes( + /** @type {TemplateNode} */ + anchor_node2, + null + ); + } + component2 = Component(anchor_node2, props) || {}; + if (hydrating) { + active_effect.nodes.end = hydrate_node; + if (hydrate_node === null || hydrate_node.nodeType !== COMMENT_NODE || /** @type {Comment} */ + hydrate_node.data !== HYDRATION_END) { + hydration_mismatch(); + throw HYDRATION_ERROR; + } + } + pop(); + }, + transformError + ); + var registered_events = /* @__PURE__ */ new Set(); + var event_handle = (events2) => { + for (var i = 0; i < events2.length; i++) { + var event_name = events2[i]; + if (registered_events.has(event_name)) continue; + registered_events.add(event_name); + var passive = is_passive_event(event_name); + for (const node of [target, document]) { + var counts = listeners.get(node); + if (counts === void 0) { + counts = /* @__PURE__ */ new Map(); + listeners.set(node, counts); + } + var count = counts.get(event_name); + if (count === void 0) { + node.addEventListener(event_name, handle_event_propagation, { passive }); + counts.set(event_name, 1); + } else { + counts.set(event_name, count + 1); + } + } + } + }; + event_handle(array_from(all_registered_events)); + root_event_handles.add(event_handle); + return () => { + for (var event_name of registered_events) { + for (const node of [target, document]) { + var counts = ( + /** @type {Map} */ + listeners.get(node) + ); + var count = ( + /** @type {number} */ + counts.get(event_name) + ); + if (--count == 0) { + node.removeEventListener(event_name, handle_event_propagation); + counts.delete(event_name); + if (counts.size === 0) { + listeners.delete(node); + } + } else { + counts.set(event_name, count); + } + } + } + root_event_handles.delete(event_handle); + if (anchor_node !== anchor) { + anchor_node.parentNode?.removeChild(anchor_node); + } + }; + }); + mounted_components.set(component2, unmount2); + return component2; +} +let mounted_components = /* @__PURE__ */ new WeakMap(); +function unmount(component2, options) { + const fn = mounted_components.get(component2); + if (fn) { + mounted_components.delete(component2); + return fn(options); + } + return Promise.resolve(); +} +class BranchManager { + /** @type {TemplateNode} */ + anchor; + /** @type {Map} */ + #batches = /* @__PURE__ */ new Map(); + /** + * Map of keys to effects that are currently rendered in the DOM. + * These effects are visible and actively part of the document tree. + * Example: + * ``` + * {#if condition} + * foo + * {:else} + * bar + * {/if} + * ``` + * Can result in the entries `true->Effect` and `false->Effect` + * @type {Map} + */ + #onscreen = /* @__PURE__ */ new Map(); + /** + * Similar to #onscreen with respect to the keys, but contains branches that are not yet + * in the DOM, because their insertion is deferred. + * @type {Map} + */ + #offscreen = /* @__PURE__ */ new Map(); + /** + * Keys of effects that are currently outroing + * @type {Set} + */ + #outroing = /* @__PURE__ */ new Set(); + /** + * Whether to pause (i.e. outro) on change, or destroy immediately. + * This is necessary for `` + */ + #transition = true; + /** + * @param {TemplateNode} anchor + * @param {boolean} transition + */ + constructor(anchor, transition = true) { + this.anchor = anchor; + this.#transition = transition; + } + /** + * @param {Batch} batch + */ + #commit = (batch) => { + if (!this.#batches.has(batch)) return; + var key2 = ( + /** @type {Key} */ + this.#batches.get(batch) + ); + var onscreen = this.#onscreen.get(key2); + if (onscreen) { + resume_effect(onscreen); + this.#outroing.delete(key2); + } else { + var offscreen = this.#offscreen.get(key2); + if (offscreen) { + this.#onscreen.set(key2, offscreen.effect); + this.#offscreen.delete(key2); + offscreen.fragment.lastChild.remove(); + this.anchor.before(offscreen.fragment); + onscreen = offscreen.effect; + } + } + for (const [b, k] of this.#batches) { + this.#batches.delete(b); + if (b === batch) { + break; + } + const offscreen2 = this.#offscreen.get(k); + if (offscreen2) { + destroy_effect(offscreen2.effect); + this.#offscreen.delete(k); + } + } + for (const [k, effect2] of this.#onscreen) { + if (k === key2 || this.#outroing.has(k)) continue; + const on_destroy = () => { + const keys = Array.from(this.#batches.values()); + if (keys.includes(k)) { + var fragment = document.createDocumentFragment(); + move_effect(effect2, fragment); + fragment.append(create_text()); + this.#offscreen.set(k, { effect: effect2, fragment }); + } else { + destroy_effect(effect2); + } + this.#outroing.delete(k); + this.#onscreen.delete(k); + }; + if (this.#transition || !onscreen) { + this.#outroing.add(k); + pause_effect(effect2, on_destroy, false); + } else { + on_destroy(); + } + } + }; + /** + * @param {Batch} batch + */ + #discard = (batch) => { + this.#batches.delete(batch); + const keys = Array.from(this.#batches.values()); + for (const [k, branch2] of this.#offscreen) { + if (!keys.includes(k)) { + destroy_effect(branch2.effect); + this.#offscreen.delete(k); + } + } + }; + /** + * + * @param {any} key + * @param {null | ((target: TemplateNode) => void)} fn + */ + ensure(key2, fn) { + var batch = ( + /** @type {Batch} */ + current_batch + ); + var defer = should_defer_append(); + if (fn && !this.#onscreen.has(key2) && !this.#offscreen.has(key2)) { + if (defer) { + var fragment = document.createDocumentFragment(); + var target = create_text(); + fragment.append(target); + this.#offscreen.set(key2, { + effect: branch(() => fn(target)), + fragment + }); + } else { + this.#onscreen.set( + key2, + branch(() => fn(this.anchor)) + ); + } + } + this.#batches.set(batch, key2); + if (defer) { + for (const [k, effect2] of this.#onscreen) { + if (k === key2) { + batch.unskip_effect(effect2); + } else { + batch.skip_effect(effect2); + } + } + for (const [k, branch2] of this.#offscreen) { + if (k === key2) { + batch.unskip_effect(branch2.effect); + } else { + batch.skip_effect(branch2.effect); + } + } + batch.oncommit(this.#commit); + batch.ondiscard(this.#discard); + } else { + if (hydrating) { + this.anchor = hydrate_node; + } + this.#commit(batch); + } + } +} +function snippet(node, get_snippet, ...args) { + var branches = new BranchManager(node); + block(() => { + const snippet2 = get_snippet() ?? null; + branches.ensure(snippet2, snippet2 && ((anchor) => snippet2(anchor, ...args))); + }, EFFECT_TRANSPARENT); +} +function onMount(fn) { + if (component_context === null) { + lifecycle_outside_component(); + } + { + user_effect(() => { + const cleanup = untrack(fn); + if (typeof cleanup === "function") return ( + /** @type {() => void} */ + cleanup + ); + }); + } +} +function if_block(node, fn, elseif = false) { + var marker; + if (hydrating) { + marker = hydrate_node; + hydrate_next(); + } + var branches = new BranchManager(node); + var flags2 = elseif ? EFFECT_TRANSPARENT : 0; + function update_branch(key2, fn2) { + if (hydrating) { + var data = read_hydration_instruction( + /** @type {TemplateNode} */ + marker + ); + if (key2 !== parseInt(data.substring(1))) { + var anchor = skip_nodes(); + set_hydrate_node(anchor); + branches.anchor = anchor; + set_hydrating(false); + branches.ensure(key2, fn2); + set_hydrating(true); + return; + } + } + branches.ensure(key2, fn2); + } + block(() => { + var has_branch = false; + fn((fn2, key2 = 0) => { + has_branch = true; + update_branch(key2, fn2); + }); + if (!has_branch) { + update_branch(-1, null); + } + }, flags2); +} +const NAN = /* @__PURE__ */ Symbol("NaN"); +function key(node, get_key, render_fn) { + if (hydrating) { + hydrate_next(); + } + var branches = new BranchManager(node); + block(() => { + var key2 = get_key(); + if (key2 !== key2) { + key2 = /** @type {any} */ + NAN; + } + branches.ensure(key2, render_fn); + }); +} +function html(node, get_value, is_controlled = false, svg = false, mathml = false, skip_warning = false) { + var anchor = node; + var value = ""; + if (is_controlled) { + var parent_node = ( + /** @type {Element} */ + node + ); + if (hydrating) { + anchor = set_hydrate_node(/* @__PURE__ */ get_first_child(parent_node)); + } + } + template_effect(() => { + var effect2 = ( + /** @type {Effect} */ + active_effect + ); + if (value === (value = get_value() ?? "")) { + if (hydrating) hydrate_next(); + return; + } + if (is_controlled && !hydrating) { + effect2.nodes = null; + parent_node.innerHTML = /** @type {string} */ + value; + if (value !== "") { + assign_nodes( + /** @type {TemplateNode} */ + /* @__PURE__ */ get_first_child(parent_node), + /** @type {TemplateNode} */ + parent_node.lastChild + ); + } + return; + } + if (effect2.nodes !== null) { + remove_effect_dom( + effect2.nodes.start, + /** @type {TemplateNode} */ + effect2.nodes.end + ); + effect2.nodes = null; + } + if (value === "") return; + if (hydrating) { + hydrate_node.data; + var next2 = hydrate_next(); + var last = next2; + while (next2 !== null && (next2.nodeType !== COMMENT_NODE || /** @type {Comment} */ + next2.data !== "")) { + last = next2; + next2 = /* @__PURE__ */ get_next_sibling(next2); + } + if (next2 === null) { + hydration_mismatch(); + throw HYDRATION_ERROR; + } + assign_nodes(hydrate_node, last); + anchor = set_hydrate_node(next2); + return; + } + var ns = svg ? NAMESPACE_SVG : mathml ? NAMESPACE_MATHML : void 0; + var wrapper = ( + /** @type {HTMLTemplateElement | SVGElement | MathMLElement} */ + create_element(svg ? "svg" : mathml ? "math" : "template", ns) + ); + wrapper.innerHTML = /** @type {any} */ + value; + var node2 = svg || mathml ? wrapper : ( + /** @type {HTMLTemplateElement} */ + wrapper.content + ); + assign_nodes( + /** @type {TemplateNode} */ + /* @__PURE__ */ get_first_child(node2), + /** @type {TemplateNode} */ + node2.lastChild + ); + if (svg || mathml) { + while (/* @__PURE__ */ get_first_child(node2)) { + anchor.before( + /** @type {TemplateNode} */ + /* @__PURE__ */ get_first_child(node2) + ); + } + } else { + anchor.before(node2); + } + }); +} +function component(node, get_component, render_fn) { + var hydration_start_node; + if (hydrating) { + hydration_start_node = hydrate_node; + hydrate_next(); + } + var branches = new BranchManager(node); + block(() => { + var component2 = get_component() ?? null; + if (hydrating) { + var data = read_hydration_instruction( + /** @type {TemplateNode} */ + hydration_start_node + ); + var server_had_component = data === HYDRATION_START; + var client_has_component = component2 !== null; + if (server_had_component !== client_has_component) { + var anchor = skip_nodes(); + set_hydrate_node(anchor); + branches.anchor = anchor; + set_hydrating(false); + branches.ensure(component2, component2 && ((target) => render_fn(target, component2))); + set_hydrating(true); + return; + } + } + branches.ensure(component2, component2 && ((target) => render_fn(target, component2))); + }, EFFECT_TRANSPARENT); +} +function attach(node, get_fn) { + var fn = void 0; + var e; + managed(() => { + if (fn !== (fn = get_fn())) { + if (e) { + destroy_effect(e); + e = null; + } + if (fn) { + e = branch(() => { + effect(() => ( + /** @type {(node: Element) => void} */ + fn(node) + )); + }); + } + } + }); +} +function r(e) { + var t, f, n = ""; + if ("string" == typeof e || "number" == typeof e) n += e; + else if ("object" == typeof e) if (Array.isArray(e)) { + var o = e.length; + for (t = 0; t < o; t++) e[t] && (f = r(e[t])) && (n && (n += " "), n += f); + } else for (f in e) e[f] && (n && (n += " "), n += f); + return n; +} +function clsx$1() { + for (var e, t, f = 0, n = "", o = arguments.length; f < o; f++) (e = arguments[f]) && (t = r(e)) && (n && (n += " "), n += t); + return n; +} +function clsx(value) { + if (typeof value === "object") { + return clsx$1(value); + } else { + return value ?? ""; + } +} +const whitespace = [..." \n\r\f \v\uFEFF"]; +function to_class(value, hash, directives) { + var classname = value == null ? "" : "" + value; + if (directives) { + for (var key2 of Object.keys(directives)) { + if (directives[key2]) { + classname = classname ? classname + " " + key2 : key2; + } else if (classname.length) { + var len = key2.length; + var a = 0; + while ((a = classname.indexOf(key2, a)) >= 0) { + var b = a + len; + if ((a === 0 || whitespace.includes(classname[a - 1])) && (b === classname.length || whitespace.includes(classname[b]))) { + classname = (a === 0 ? "" : classname.substring(0, a)) + classname.substring(b + 1); + } else { + a = b; + } + } + } + } + } + return classname === "" ? null : classname; +} +function append_styles(styles, important = false) { + var separator = important ? " !important;" : ";"; + var css2 = ""; + for (var key2 of Object.keys(styles)) { + var value = styles[key2]; + if (value != null && value !== "") { + css2 += " " + key2 + ": " + value + separator; + } + } + return css2; +} +function to_css_name(name) { + if (name[0] !== "-" || name[1] !== "-") { + return name.toLowerCase(); + } + return name; +} +function to_style(value, styles) { + if (styles) { + var new_style = ""; + var normal_styles; + var important_styles; + if (Array.isArray(styles)) { + normal_styles = styles[0]; + important_styles = styles[1]; + } else { + normal_styles = styles; + } + if (value) { + value = String(value).replaceAll(/\s*\/\*.*?\*\/\s*/g, "").trim(); + var in_str = false; + var in_apo = 0; + var in_comment = false; + var reserved_names = []; + if (normal_styles) { + reserved_names.push(...Object.keys(normal_styles).map(to_css_name)); + } + if (important_styles) { + reserved_names.push(...Object.keys(important_styles).map(to_css_name)); + } + var start_index = 0; + var name_index = -1; + const len = value.length; + for (var i = 0; i < len; i++) { + var c = value[i]; + if (in_comment) { + if (c === "/" && value[i - 1] === "*") { + in_comment = false; + } + } else if (in_str) { + if (in_str === c) { + in_str = false; + } + } else if (c === "/" && value[i + 1] === "*") { + in_comment = true; + } else if (c === '"' || c === "'") { + in_str = c; + } else if (c === "(") { + in_apo++; + } else if (c === ")") { + in_apo--; + } + if (!in_comment && in_str === false && in_apo === 0) { + if (c === ":" && name_index === -1) { + name_index = i; + } else if (c === ";" || i === len - 1) { + if (name_index !== -1) { + var name = to_css_name(value.substring(start_index, name_index).trim()); + if (!reserved_names.includes(name)) { + if (c !== ";") { + i++; + } + var property = value.substring(start_index, i).trim(); + new_style += " " + property + ";"; + } + } + start_index = i + 1; + name_index = -1; + } + } + } + } + if (normal_styles) { + new_style += append_styles(normal_styles); + } + if (important_styles) { + new_style += append_styles(important_styles, true); + } + new_style = new_style.trim(); + return new_style === "" ? null : new_style; + } + return value == null ? null : String(value); +} +function set_class(dom, is_html, value, hash, prev_classes, next_classes) { + var prev = ( + /** @type {any} */ + dom[CLASS_CACHE] + ); + if (hydrating || prev !== value || prev === void 0) { + var next_class_name = to_class(value, hash, next_classes); + if (!hydrating || next_class_name !== dom.getAttribute("class")) { + if (next_class_name == null) { + dom.removeAttribute("class"); + } else if (is_html) { + dom.className = next_class_name; + } else { + dom.setAttribute("class", next_class_name); + } + } + dom[CLASS_CACHE] = value; + } else if (next_classes && prev_classes !== next_classes) { + for (var key2 in next_classes) { + var is_present = !!next_classes[key2]; + if (prev_classes == null || is_present !== !!prev_classes[key2]) { + dom.classList.toggle(key2, is_present); + } + } + } + return next_classes; +} +function update_styles(dom, prev = {}, next2, priority) { + for (var key2 in next2) { + var value = next2[key2]; + if (prev[key2] !== value) { + if (next2[key2] == null) { + dom.style.removeProperty(key2); + } else { + dom.style.setProperty(key2, value, priority); + } + } + } +} +function set_style(dom, value, prev_styles, next_styles) { + var prev = ( + /** @type {any} */ + dom[STYLE_CACHE] + ); + if (hydrating || prev !== value) { + var next_style_attr = to_style(value, next_styles); + if (!hydrating || next_style_attr !== dom.getAttribute("style")) { + if (next_style_attr == null) { + dom.removeAttribute("style"); + } else { + dom.style.cssText = next_style_attr; + } + } + dom[STYLE_CACHE] = value; + } else if (next_styles) { + if (Array.isArray(next_styles)) { + update_styles(dom, prev_styles?.[0], next_styles[0]); + update_styles(dom, prev_styles?.[1], next_styles[1], "important"); + } else { + update_styles(dom, prev_styles, next_styles); + } + } + return next_styles; +} +function select_option(select, value, mounting = false) { + if (select.multiple) { + if (value == void 0) { + return; + } + if (!is_array(value)) { + return select_multiple_invalid_value(); + } + for (var option of select.options) { + option.selected = value.includes(get_option_value(option)); + } + return; + } + for (option of select.options) { + var option_value = get_option_value(option); + if (is(option_value, value)) { + option.selected = true; + return; + } + } + if (!mounting || value !== void 0) { + select.selectedIndex = -1; + } +} +function init_select(select) { + var observer = new MutationObserver(() => { + select_option(select, select.__value); + }); + observer.observe(select, { + // Listen to option element changes + childList: true, + subtree: true, + // because of + // Listen to option element value attribute changes + // (doesn't get notified of select value changes, + // because that property is not reflected as an attribute) + attributes: true, + attributeFilter: ["value"] + }); + teardown(() => { + observer.disconnect(); + }); +} +function get_option_value(option) { + if ("__value" in option) { + return option.__value; + } else { + return option.value; + } +} +const CLASS = /* @__PURE__ */ Symbol("class"); +const STYLE = /* @__PURE__ */ Symbol("style"); +const IS_CUSTOM_ELEMENT = /* @__PURE__ */ Symbol("is custom element"); +const IS_HTML = /* @__PURE__ */ Symbol("is html"); +const LINK_TAG = IS_XHTML ? "link" : "LINK"; +const INPUT_TAG = IS_XHTML ? "input" : "INPUT"; +const OPTION_TAG = IS_XHTML ? "option" : "OPTION"; +const SELECT_TAG = IS_XHTML ? "select" : "SELECT"; +const PROGRESS_TAG = IS_XHTML ? "progress" : "PROGRESS"; +function remove_input_defaults(input) { + if (!hydrating) return; + var already_removed = false; + var remove_defaults = () => { + if (already_removed) return; + already_removed = true; + if (input.hasAttribute("value")) { + var value = input.value; + set_attribute(input, "value", null); + input.value = value; + } + if (input.hasAttribute("checked")) { + var checked = input.checked; + set_attribute(input, "checked", null); + input.checked = checked; + } + }; + input[FORM_RESET_HANDLER] = remove_defaults; + queue_micro_task(remove_defaults); + add_form_reset_listener(); +} +function set_value(element, value) { + var attributes = get_attributes(element); + if (attributes.value === (attributes.value = // treat null and undefined the same for the initial value + value ?? void 0) || // @ts-expect-error + // `progress` elements always need their value set when it's `0` + element.value === value && (value !== 0 || element.nodeName !== PROGRESS_TAG)) { + return; + } + element.value = value ?? ""; +} +function set_selected(element, selected) { + if (selected) { + if (!element.hasAttribute("selected")) { + element.setAttribute("selected", ""); + } + } else { + element.removeAttribute("selected"); + } +} +function set_attribute(element, attribute, value, skip_warning) { + var attributes = get_attributes(element); + if (hydrating) { + attributes[attribute] = element.getAttribute(attribute); + if (attribute === "src" || attribute === "srcset" || attribute === "href" && element.nodeName === LINK_TAG) { + return; + } + } + if (attributes[attribute] === (attributes[attribute] = value)) return; + if (attribute === "loading") { + element[LOADING_ATTR_SYMBOL] = value; + } + if (value == null) { + element.removeAttribute(attribute); + } else if (typeof value !== "string" && get_setters(element).includes(attribute)) { + element[attribute] = value; + } else { + element.setAttribute(attribute, value); + } +} +function set_attributes(element, prev, next2, css_hash, should_remove_defaults = false, skip_warning = false) { + if (hydrating && should_remove_defaults && element.nodeName === INPUT_TAG) { + var input = ( + /** @type {HTMLInputElement} */ + element + ); + var attribute = input.type === "checkbox" ? "defaultChecked" : "defaultValue"; + if (!(attribute in next2)) { + remove_input_defaults(input); + } + } + var attributes = get_attributes(element); + var is_custom_element = attributes[IS_CUSTOM_ELEMENT]; + var preserve_attribute_case = !attributes[IS_HTML]; + let is_hydrating_custom_element = hydrating && is_custom_element; + if (is_hydrating_custom_element) { + set_hydrating(false); + } + var current = prev || {}; + var is_option_element = element.nodeName === OPTION_TAG; + for (var key2 in prev) { + if (!(key2 in next2)) { + next2[key2] = null; + } + } + if (next2.class) { + next2.class = clsx(next2.class); + } else if (next2[CLASS]) { + next2.class = null; + } + if (next2[STYLE]) { + next2.style ??= null; + } + var setters = get_setters(element); + for (const key3 in next2) { + let value = next2[key3]; + if (is_option_element && key3 === "value" && value == null) { + element.value = element.__value = ""; + current[key3] = value; + continue; + } + if (key3 === "class") { + var is_html = element.namespaceURI === "http://www.w3.org/1999/xhtml"; + set_class(element, is_html, value, css_hash, prev?.[CLASS], next2[CLASS]); + current[key3] = value; + current[CLASS] = next2[CLASS]; + continue; + } + if (key3 === "style") { + set_style(element, value, prev?.[STYLE], next2[STYLE]); + current[key3] = value; + current[STYLE] = next2[STYLE]; + continue; + } + var prev_value = current[key3]; + if (value === prev_value && !(value === void 0 && element.hasAttribute(key3))) { + continue; + } + current[key3] = value; + var prefix = key3[0] + key3[1]; + if (prefix === "$$") continue; + if (prefix === "on") { + const opts = {}; + const event_handle_key = "$$" + key3; + let event_name = key3.slice(2); + var is_delegated = can_delegate_event(event_name); + if (is_capture_event(event_name)) { + event_name = event_name.slice(0, -7); + opts.capture = true; + } + if (!is_delegated && prev_value) { + if (value != null) continue; + element.removeEventListener(event_name, current[event_handle_key], opts); + current[event_handle_key] = null; + } + if (is_delegated) { + delegated(event_name, element, value); + delegate([event_name]); + } else if (value != null) { + let handle2 = function(evt) { + current[key3].call(this, evt); + }; + var handle = handle2; + current[event_handle_key] = create_event(event_name, element, handle2, opts); + } + } else if (key3 === "style") { + set_attribute(element, key3, value); + } else if (key3 === "autofocus") { + autofocus( + /** @type {HTMLElement} */ + element, + Boolean(value) + ); + } else if (!is_custom_element && (key3 === "__value" || key3 === "value" && value != null)) { + element.value = element.__value = value; + } else if (key3 === "selected" && is_option_element) { + set_selected( + /** @type {HTMLOptionElement} */ + element, + value + ); + } else { + var name = key3; + if (!preserve_attribute_case) { + name = normalize_attribute(name); + } + var is_default = name === "defaultValue" || name === "defaultChecked"; + if (value == null && !is_custom_element && !is_default) { + attributes[key3] = null; + if (name === "value" || name === "checked") { + let input2 = ( + /** @type {HTMLInputElement} */ + element + ); + const use_default = prev === void 0; + if (name === "value") { + let previous = input2.defaultValue; + input2.removeAttribute(name); + input2.defaultValue = previous; + input2.value = input2.__value = use_default ? previous : null; + } else { + let previous = input2.defaultChecked; + input2.removeAttribute(name); + input2.defaultChecked = previous; + input2.checked = use_default ? previous : false; + } + } else { + element.removeAttribute(key3); + } + } else if (is_default || setters.includes(name) && (is_custom_element || typeof value !== "string")) { + element[name] = value; + if (name in attributes) attributes[name] = UNINITIALIZED; + } else if (typeof value !== "function") { + set_attribute(element, name, value); + } + } + } + if (is_hydrating_custom_element) { + set_hydrating(true); + } + return current; +} +function attribute_effect(element, fn, sync = [], async = [], blockers = [], css_hash, should_remove_defaults = false, skip_warning = false) { + flatten(blockers, sync, async, (values) => { + var prev = void 0; + var effects = {}; + var is_select = element.nodeName === SELECT_TAG; + var inited = false; + managed(() => { + var next2 = fn(...values.map(get)); + var current = set_attributes( + element, + prev, + next2, + css_hash, + should_remove_defaults, + skip_warning + ); + if (inited && is_select && "value" in next2) { + select_option( + /** @type {HTMLSelectElement} */ + element, + next2.value + ); + } + for (let symbol of Object.getOwnPropertySymbols(effects)) { + if (!next2[symbol]) destroy_effect(effects[symbol]); + } + for (let symbol of Object.getOwnPropertySymbols(next2)) { + var n = next2[symbol]; + if (symbol.description === ATTACHMENT_KEY && (!prev || n !== prev[symbol])) { + if (effects[symbol]) destroy_effect(effects[symbol]); + effects[symbol] = branch(() => attach(element, () => n)); + } + current[symbol] = n; + } + prev = current; + }); + if (is_select) { + var select = ( + /** @type {HTMLSelectElement} */ + element + ); + effect(() => { + select_option( + select, + /** @type {Record} */ + prev.value, + true + ); + init_select(select); + }); + } + inited = true; + }); +} +function get_attributes(element) { + return ( + /** @type {Record} **/ + /** @type {any} */ + element[ATTRIBUTES_CACHE] ??= { + [IS_CUSTOM_ELEMENT]: element.nodeName.includes("-"), + [IS_HTML]: element.namespaceURI === NAMESPACE_HTML + } + ); +} +var setters_cache = /* @__PURE__ */ new Map(); +function get_setters(element) { + var cache_key = element.getAttribute("is") || element.nodeName; + var setters = setters_cache.get(cache_key); + if (setters) return setters; + setters_cache.set(cache_key, setters = []); + var descriptors; + var proto = element; + var element_proto = Element.prototype; + while (element_proto !== proto) { + descriptors = get_descriptors(proto); + for (var key2 in descriptors) { + if (descriptors[key2].set && // better safe than sorry, we don't want spread attributes to mess with HTML content + key2 !== "innerHTML" && key2 !== "textContent" && key2 !== "innerText") { + setters.push(key2); + } + } + proto = get_prototype_of(proto); + } + return setters; +} +function bind_value(input, get2, set2 = get2) { + var batches = /* @__PURE__ */ new WeakSet(); + listen_to_event_and_reset_event(input, "input", async (is_reset) => { + var value = is_reset ? input.defaultValue : input.value; + value = is_numberlike_input(input) ? to_number(value) : value; + set2(value); + if (current_batch !== null) { + batches.add(current_batch); + } + await tick(); + if (value !== (value = get2())) { + var start = input.selectionStart; + var end = input.selectionEnd; + var length = input.value.length; + input.value = value ?? ""; + if (end !== null) { + var new_length = input.value.length; + if (start === end && end === length && new_length > length) { + input.selectionStart = new_length; + input.selectionEnd = new_length; + } else { + input.selectionStart = start; + input.selectionEnd = Math.min(end, new_length); + } + } + } + }); + if ( + // If we are hydrating and the value has since changed, + // then use the updated value from the input instead. + hydrating && input.defaultValue !== input.value || // If defaultValue is set, then value == defaultValue + // TODO Svelte 6: remove input.value check and set to empty string? + untrack(get2) == null && input.value + ) { + set2(is_numberlike_input(input) ? to_number(input.value) : input.value); + if (current_batch !== null) { + batches.add(current_batch); + } + } + render_effect(() => { + var value = get2(); + if (input === document.activeElement) { + var batch = ( + /** @type {Batch} */ + current_batch + ); + if (batches.has(batch)) { + return; + } + } + if (is_numberlike_input(input) && value === to_number(input.value)) { + return; + } + if (input.type === "date" && !value && !input.value) { + return; + } + if (value !== input.value) { + input.value = value ?? ""; + } + }); +} +function is_numberlike_input(input) { + var type = input.type; + return type === "number" || type === "range"; +} +function to_number(value) { + return value === "" ? null : +value; +} +function is_bound_this(bound_value, element_or_component) { + return bound_value === element_or_component || bound_value?.[STATE_SYMBOL] === element_or_component; +} +function bind_this(element_or_component = {}, update, get_value, get_parts) { + var component_effect = ( + /** @type {ComponentContext} */ + component_context.r + ); + var parent = ( + /** @type {Effect} */ + active_effect + ); + effect(() => { + var old_parts; + var parts; + render_effect(() => { + old_parts = parts; + parts = []; + untrack(() => { + if (!is_bound_this(get_value(...parts), element_or_component)) { + update(element_or_component, ...parts); + if (old_parts && is_bound_this(get_value(...old_parts), element_or_component)) { + update(null, ...old_parts); + } + } + }); + }); + return () => { + let p = parent; + while (p !== component_effect && p.parent !== null && p.parent.f & DESTROYING) { + p = p.parent; + } + const teardown2 = () => { + if (parts && is_bound_this(get_value(...parts), element_or_component)) { + update(null, ...parts); + } + }; + const original_teardown = p.teardown; + p.teardown = () => { + teardown2(); + original_teardown?.(); + }; + }; + }); + return element_or_component; +} +const rest_props_handler = { + get(target, key2) { + if (target.exclude.includes(key2)) return; + return target.props[key2]; + }, + set(target, key2) { + return false; + }, + getOwnPropertyDescriptor(target, key2) { + if (target.exclude.includes(key2)) return; + if (key2 in target.props) { + return { + enumerable: true, + configurable: true, + value: target.props[key2] + }; + } + }, + has(target, key2) { + if (target.exclude.includes(key2)) return false; + return key2 in target.props; + }, + ownKeys(target) { + return Reflect.ownKeys(target.props).filter((key2) => !target.exclude.includes(key2)); + } +}; +// @__NO_SIDE_EFFECTS__ +function rest_props(props, exclude, name) { + return new Proxy( + { props, exclude }, + rest_props_handler + ); +} +function prop(props, key2, flags2, fallback) { + var fallback_value = ( + /** @type {V} */ + fallback + ); + var fallback_dirty = true; + var get_fallback = () => { + if (fallback_dirty) { + fallback_dirty = false; + fallback_value = /** @type {V} */ + fallback; + } + return fallback_value; + }; + var initial_value; + { + initial_value = /** @type {V} */ + props[key2]; + } + if (initial_value === void 0 && fallback !== void 0) { + initial_value = get_fallback(); + } + var getter; + { + getter = () => { + var value = ( + /** @type {V} */ + props[key2] + ); + if (value === void 0) return get_fallback(); + fallback_dirty = true; + return value; + }; + } + var overridden = false; + var d = /* @__PURE__ */ derived(() => { + overridden = false; + return getter(); + }); + var parent_effect = ( + /** @type {Effect} */ + active_effect + ); + return ( + /** @type {() => V} */ + (function(value, mutation) { + if (arguments.length > 0) { + const new_value = mutation ? get(d) : value; + set(d, new_value); + overridden = true; + if (fallback_value !== void 0) { + fallback_value = new_value; + } + return value; + } + if (is_destroying_effect && overridden || (parent_effect.f & DESTROYED) !== 0) { + return d.v; + } + return get(d); + }) + ); +} +function createClassComponent(options) { + return new Svelte4Component(options); +} +class Svelte4Component { + /** @type {any} */ + #events; + /** @type {Record} */ + #instance; + /** + * @param {ComponentConstructorOptions & { + * component: any; + * }} options + */ + constructor(options) { + var sources = /* @__PURE__ */ new Map(); + var add_source = (key2, value) => { + var s = /* @__PURE__ */ mutable_source(value, false, false); + sources.set(key2, s); + return s; + }; + const props = new Proxy( + { ...options.props || {}, $$events: {} }, + { + get(target, prop2) { + return get(sources.get(prop2) ?? add_source(prop2, Reflect.get(target, prop2))); + }, + has(target, prop2) { + if (prop2 === LEGACY_PROPS) return true; + get(sources.get(prop2) ?? add_source(prop2, Reflect.get(target, prop2))); + return Reflect.has(target, prop2); + }, + set(target, prop2, value) { + set(sources.get(prop2) ?? add_source(prop2, value), value); + return Reflect.set(target, prop2, value); + } + } + ); + this.#instance = (options.hydrate ? hydrate : mount)(options.component, { + target: options.target, + anchor: options.anchor, + props, + context: options.context, + intro: options.intro ?? false, + recover: options.recover, + transformError: options.transformError + }); + if (!options?.props?.$$host || options.sync === false) { + flushSync(); + } + this.#events = props.$$events; + for (const key2 of Object.keys(this.#instance)) { + if (key2 === "$set" || key2 === "$destroy" || key2 === "$on") continue; + define_property(this, key2, { + get() { + return this.#instance[key2]; + }, + /** @param {any} value */ + set(value) { + this.#instance[key2] = value; + }, + enumerable: true + }); + } + this.#instance.$set = /** @param {Record} next */ + (next2) => { + Object.assign(props, next2); + }; + this.#instance.$destroy = () => { + unmount(this.#instance); + }; + } + /** @param {Record} props */ + $set(props) { + this.#instance.$set(props); + } + /** + * @param {string} event + * @param {(...args: any[]) => any} callback + * @returns {any} + */ + $on(event2, callback) { + this.#events[event2] = this.#events[event2] || []; + const cb = (...args) => callback.call(this, ...args); + this.#events[event2].push(cb); + return () => { + this.#events[event2] = this.#events[event2].filter( + /** @param {any} fn */ + (fn) => fn !== cb + ); + }; + } + $destroy() { + this.#instance.$destroy(); + } +} +let SvelteElement = class { +}; +if (typeof HTMLElement === "function") { + SvelteElement = class extends HTMLElement { + /** The Svelte component constructor */ + $$ctor; + /** Slots */ + $$s; + /** @type {any} The Svelte component instance */ + $$c; + /** Whether or not the custom element is connected */ + $$cn = false; + /** @type {Record} Component props data */ + $$d = {}; + /** `true` if currently in the process of reflecting component props back to attributes */ + $$r = false; + /** @type {Record} Props definition (name, reflected, type etc) */ + $$p_d = {}; + /** @type {Record} Event listeners */ + $$l = {}; + /** @type {Map} Event listener unsubscribe functions */ + $$l_u = /* @__PURE__ */ new Map(); + /** @type {any} The managed render effect for reflecting attributes */ + $$me; + /** @type {ShadowRoot | null} The ShadowRoot of the custom element */ + $$shadowRoot = null; + /** + * @param {*} $$componentCtor + * @param {*} $$slots + * @param {ShadowRootInit | undefined} shadow_root_init + */ + constructor($$componentCtor, $$slots, shadow_root_init) { + super(); + this.$$ctor = $$componentCtor; + this.$$s = $$slots; + if (shadow_root_init) { + this.$$shadowRoot = this.attachShadow(shadow_root_init); + } + } + /** + * @param {string} type + * @param {EventListenerOrEventListenerObject} listener + * @param {boolean | AddEventListenerOptions} [options] + */ + addEventListener(type, listener, options) { + this.$$l[type] = this.$$l[type] || []; + this.$$l[type].push(listener); + if (this.$$c) { + const unsub = this.$$c.$on(type, listener); + this.$$l_u.set(listener, unsub); + } + super.addEventListener(type, listener, options); + } + /** + * @param {string} type + * @param {EventListenerOrEventListenerObject} listener + * @param {boolean | AddEventListenerOptions} [options] + */ + removeEventListener(type, listener, options) { + super.removeEventListener(type, listener, options); + if (this.$$c) { + const unsub = this.$$l_u.get(listener); + if (unsub) { + unsub(); + this.$$l_u.delete(listener); + } + } + } + async connectedCallback() { + this.$$cn = true; + if (!this.$$c) { + let create_slot2 = function(name) { + return (anchor) => { + const slot = create_element("slot"); + if (name !== "default") slot.name = name; + append(anchor, slot); + }; + }; + var create_slot = create_slot2; + await Promise.resolve(); + if (!this.$$cn || this.$$c) { + return; + } + const $$slots = {}; + const existing_slots = get_custom_elements_slots(this); + for (const name of this.$$s) { + if (name in existing_slots) { + if (name === "default" && !this.$$d.children) { + this.$$d.children = create_slot2(name); + $$slots.default = true; + } else { + $$slots[name] = create_slot2(name); + } + } + } + for (const attribute of this.attributes) { + const name = this.$$g_p(attribute.name); + if (!(name in this.$$d)) { + this.$$d[name] = get_custom_element_value(name, attribute.value, this.$$p_d, "toProp"); + } + } + for (const key2 in this.$$p_d) { + if (!(key2 in this.$$d) && this[key2] !== void 0) { + this.$$d[key2] = this[key2]; + delete this[key2]; + } + } + this.$$c = createClassComponent({ + component: this.$$ctor, + target: this.$$shadowRoot || this, + props: { + ...this.$$d, + $$slots, + $$host: this + } + }); + this.$$me = effect_root(() => { + render_effect(() => { + this.$$r = true; + for (const key2 of object_keys(this.$$c)) { + if (!this.$$p_d[key2]?.reflect) continue; + this.$$d[key2] = this.$$c[key2]; + const attribute_value = get_custom_element_value( + key2, + this.$$d[key2], + this.$$p_d, + "toAttribute" + ); + if (attribute_value == null) { + this.removeAttribute(this.$$p_d[key2].attribute || key2); + } else { + this.setAttribute(this.$$p_d[key2].attribute || key2, attribute_value); + } + } + this.$$r = false; + }); + }); + for (const type in this.$$l) { + for (const listener of this.$$l[type]) { + const unsub = this.$$c.$on(type, listener); + this.$$l_u.set(listener, unsub); + } + } + this.$$l = {}; + } + } + // We don't need this when working within Svelte code, but for compatibility of people using this outside of Svelte + // and setting attributes through setAttribute etc, this is helpful + /** + * @param {string} attr + * @param {string} _oldValue + * @param {string} newValue + */ + attributeChangedCallback(attr, _oldValue, newValue) { + if (this.$$r) return; + attr = this.$$g_p(attr); + this.$$d[attr] = get_custom_element_value(attr, newValue, this.$$p_d, "toProp"); + this.$$c?.$set({ [attr]: this.$$d[attr] }); + } + disconnectedCallback() { + this.$$cn = false; + Promise.resolve().then(() => { + if (!this.$$cn && this.$$c) { + this.$$c.$destroy(); + this.$$me(); + this.$$c = void 0; + } + }); + } + /** + * @param {string} attribute_name + */ + $$g_p(attribute_name) { + return object_keys(this.$$p_d).find( + (key2) => this.$$p_d[key2].attribute === attribute_name || !this.$$p_d[key2].attribute && key2.toLowerCase() === attribute_name + ) || attribute_name; + } + }; +} +function get_custom_element_value(prop2, value, props_definition, transform) { + const type = props_definition[prop2]?.type; + value = type === "Boolean" && typeof value !== "boolean" ? value != null : value; + if (!transform || !props_definition[prop2]) { + return value; + } else if (transform === "toAttribute") { + switch (type) { + case "Object": + case "Array": + return value == null ? null : JSON.stringify(value); + case "Boolean": + return value ? "" : null; + case "Number": + return value == null ? null : value; + default: + return value; + } + } else { + switch (type) { + case "Object": + case "Array": + return value && JSON.parse(value); + case "Boolean": + return value; + // conversion already handled above + case "Number": + return value != null ? +value : value; + default: + return value; + } + } +} +function get_custom_elements_slots(element) { + const result = {}; + element.childNodes.forEach((node) => { + result[ + /** @type {Element} node */ + node.slot || "default" + ] = true; + }); + return result; +} +function create_custom_element(Component, props_definition, slots, exports$1, shadow_root_init, extend) { + let Class = class extends SvelteElement { + constructor() { + super(Component, slots, shadow_root_init); + this.$$p_d = props_definition; + } + static get observedAttributes() { + return object_keys(props_definition).map( + (key2) => (props_definition[key2].attribute || key2).toLowerCase() + ); + } + }; + object_keys(props_definition).forEach((prop2) => { + define_property(Class.prototype, prop2, { + get() { + return this.$$c && prop2 in this.$$c ? this.$$c[prop2] : this.$$d[prop2]; + }, + set(value) { + value = get_custom_element_value(prop2, value, props_definition); + this.$$d[prop2] = value; + var component2 = this.$$c; + if (component2) { + var setter = get_descriptor(component2, prop2)?.get; + if (setter) { + component2[prop2] = value; + } else { + component2.$set({ [prop2]: value }); + } + } + } + }); + }); + exports$1.forEach((property) => { + define_property(Class.prototype, property, { + get() { + return this.$$c?.[property]; + } + }); + }); + Component.element = /** @type {any} */ + Class; + return Class; +} +var root$7 = /* @__PURE__ */ from_html(`
`); +function Checkbox($$anchor, $$props) { + push($$props, true); + let loading = prop($$props, "loading"), rest = /* @__PURE__ */ rest_props($$props, ["$$slots", "$$events", "$$legacy", "$$host", "loading"]); + let inputEl; + function onClick() { + inputEl?.click(); + } + var $$exports = { + get loading() { + return loading(); + }, + set loading($$value) { + loading($$value); + flushSync(); + } + }; + var div = root$7(); + var input = child(div); + attribute_effect(input, () => ({ type: "checkbox", ...rest }), void 0, void 0, void 0, void 0, true); + bind_this(input, ($$value) => inputEl = $$value, () => inputEl); + var svg = sibling(input, 2); + next(2); + reset(div); + template_effect(() => set_attribute(div, "data-loading", loading())); + delegated("click", svg, onClick); + append($$anchor, div); + return pop($$exports); +} +delegate(["click"]); +create_custom_element(Checkbox, { loading: {} }, [], [], { mode: "open" }); +var root$6 = /* @__PURE__ */ from_html(`
`); +function CheckboxNative($$anchor, $$props) { + push($$props, true); + let loading = prop($$props, "loading"), rest = /* @__PURE__ */ rest_props($$props, ["$$slots", "$$events", "$$legacy", "$$host", "loading"]); + var $$exports = { + get loading() { + return loading(); + }, + set loading($$value) { + loading($$value); + flushSync(); + } + }; + var div = root$6(); + var input = child(div); + attribute_effect(input, () => ({ type: "checkbox", ...rest }), void 0, void 0, void 0, void 0, true); + next(2); + reset(div); + template_effect(() => set_attribute(div, "data-loading", loading())); + append($$anchor, div); + return pop($$exports); +} +create_custom_element(CheckboxNative, { loading: {} }, [], [], { mode: "open" }); +var root$5 = /* @__PURE__ */ from_html(`
`); +function Logo($$anchor, $$props) { + push($$props, true); + let strings = prop($$props, "strings"); + const website = "https://altcha.org"; + var $$exports = { + get strings() { + return strings(); + }, + set strings($$value) { + strings($$value); + flushSync(); + } + }; + var div = root$5(); + var a = child(div); + set_attribute(a, "href", website); + reset(div); + template_effect(() => set_attribute(a, "aria-label", strings().ariaLinkLabel)); + append($$anchor, div); + return pop($$exports); +} +create_custom_element(Logo, { strings: {} }, [], [], { mode: "open" }); +var root$4 = /* @__PURE__ */ from_html(``); +function Footer($$anchor, $$props) { + push($$props, true); + let logo = prop($$props, "logo"), strings = prop($$props, "strings"); + var $$exports = { + get logo() { + return logo(); + }, + set logo($$value) { + logo($$value); + flushSync(); + }, + get strings() { + return strings(); + }, + set strings($$value) { + strings($$value); + flushSync(); + } + }; + var div = root$4(); + var p = child(div); + html(p, () => strings().footer, true); + reset(p); + var node = sibling(p, 2); + { + var consequent = ($$anchor2) => { + Logo($$anchor2, { + get strings() { + return strings(); + } + }); + }; + if_block(node, ($$render) => { + if (logo()) $$render(consequent); + }); + } + reset(div); + append($$anchor, div); + return pop($$exports); +} +create_custom_element(Footer, { logo: {}, strings: {} }, [], [], { mode: "open" }); +var root$3 = /* @__PURE__ */ from_html(`
`); +function Switch($$anchor, $$props) { + push($$props, true); + let loading = prop($$props, "loading"), rest = /* @__PURE__ */ rest_props($$props, ["$$slots", "$$events", "$$legacy", "$$host", "loading"]); + let inputEl; + function onClick() { + inputEl?.click(); + } + var $$exports = { + get loading() { + return loading(); + }, + set loading($$value) { + loading($$value); + flushSync(); + } + }; + var div = root$3(); + var input = child(div); + attribute_effect(input, () => ({ type: "checkbox", ...rest }), void 0, void 0, void 0, void 0, true); + bind_this(input, ($$value) => inputEl = $$value, () => inputEl); + var div_1 = sibling(input, 2); + reset(div); + template_effect(() => set_attribute(div, "data-loading", loading())); + delegated("click", div_1, onClick); + append($$anchor, div); + return pop($$exports); +} +delegate(["click"]); +create_custom_element(Switch, { loading: {} }, [], [], { mode: "open" }); +var AudioState = /* @__PURE__ */ ((AudioState2) => { + AudioState2["ERROR"] = "error"; + AudioState2["LOADING"] = "loading"; + AudioState2["PLAYING"] = "playing"; + AudioState2["PAUSED"] = "paused"; + AudioState2["READY"] = "ready"; + return AudioState2; +})(AudioState || {}); +var State = /* @__PURE__ */ ((State2) => { + State2["CODE"] = "code"; + State2["ERROR"] = "error"; + State2["VERIFIED"] = "verified"; + State2["VERIFYING"] = "verifying"; + State2["UNVERIFIED"] = "unverified"; + State2["EXPIRED"] = "expired"; + return State2; +})(State || {}); +var root_1$2 = /* @__PURE__ */ from_html(`
`); +var root_3$2 = /* @__PURE__ */ from_html(`
`); +var root_4 = /* @__PURE__ */ from_svg(``); +var root_5 = /* @__PURE__ */ from_svg(``); +var root_6 = /* @__PURE__ */ from_svg(``); +var root_2$2 = /* @__PURE__ */ from_html(``); +var root_7 = /* @__PURE__ */ from_html(``); +var root$2 = /* @__PURE__ */ from_html(`
`); +function Code($$anchor, $$props) { + push($$props, true); + let audioUrl = prop($$props, "audioUrl"), codeChallenge = prop($$props, "codeChallenge"), config = prop($$props, "config"), imageUrl = prop($$props, "imageUrl"), onCancel = prop($$props, "onCancel"), onReload = prop($$props, "onReload"), onSubmit = prop($$props, "onSubmit"), strings = prop($$props, "strings"); + let audioState = /* @__PURE__ */ state(void 0); + let elAudio = /* @__PURE__ */ state(void 0); + let elInput = /* @__PURE__ */ state(void 0); + let loading = /* @__PURE__ */ state(false); + let code = /* @__PURE__ */ state(""); + let playAudio = /* @__PURE__ */ state(false); + onMount(() => { + if (!config().disableAutoFocus) { + tick().then(() => { + get(elInput)?.focus(); + }); + } + return () => { + if (get(elAudio)) { + get(elAudio).pause(); + set(elAudio, void 0); + } + }; + }); + function onAudioEnded() { + set(audioState, AudioState.PAUSED, true); + } + function onAudioError(ev) { + set(audioState, AudioState.ERROR, true); + } + function onAudioCanPlay() { + set(audioState, AudioState.READY, true); + } + function onAudioLoadStart() { + set(audioState, AudioState.LOADING, true); + } + function onAudioPlaying() { + set(audioState, AudioState.PLAYING, true); + } + function onAudioPause() { + set(audioState, AudioState.PAUSED, true); + } + function onInputKeyDown(ev) { + if (ev.code === "Space") { + ev.preventDefault(); + ev.stopPropagation(); + onPlayAudio(); + } else if (ev.code === "Escape") { + ev.preventDefault(); + ev.stopPropagation(); + onCancel()?.(); + } + } + function onSubmitCapture(ev) { + ev.preventDefault(); + ev.stopPropagation(); + onSubmit()?.(get(code)); + } + function onPlayAudio() { + if (get(elAudio)) { + if (get(audioState) === AudioState.LOADING) ; + else if (!get(elAudio).paused) { + get(elAudio).pause(); + } else { + if (audioUrl() && get(elAudio).src !== audioUrl()) { + get(elAudio).src = audioUrl(); + } + get(elAudio).currentTime = 0; + get(elAudio).play(); + } + } else { + set(playAudio, true); + requestAnimationFrame(() => { + if (get(elAudio) && audioUrl()) { + get(elAudio).src = audioUrl(); + get(elAudio).play(); + } + }); + } + } + var $$exports = { + get audioUrl() { + return audioUrl(); + }, + set audioUrl($$value) { + audioUrl($$value); + flushSync(); + }, + get codeChallenge() { + return codeChallenge(); + }, + set codeChallenge($$value) { + codeChallenge($$value); + flushSync(); + }, + get config() { + return config(); + }, + set config($$value) { + config($$value); + flushSync(); + }, + get imageUrl() { + return imageUrl(); + }, + set imageUrl($$value) { + imageUrl($$value); + flushSync(); + }, + get onCancel() { + return onCancel(); + }, + set onCancel($$value) { + onCancel($$value); + flushSync(); + }, + get onReload() { + return onReload(); + }, + set onReload($$value) { + onReload($$value); + flushSync(); + }, + get onSubmit() { + return onSubmit(); + }, + set onSubmit($$value) { + onSubmit($$value); + flushSync(); + }, + get strings() { + return strings(); + }, + set strings($$value) { + strings($$value); + flushSync(); + } + }; + var div = root$2(); + var form = child(div); + var node = child(form); + { + var consequent = ($$anchor2) => { + var div_1 = root_1$2(); + var text2 = child(div_1, true); + reset(div_1); + template_effect(() => set_text(text2, strings().verificationRequired)); + append($$anchor2, div_1); + }; + if_block(node, ($$render) => { + if (config().codeChallengeDisplay !== "standard") $$render(consequent); + }); + } + var div_2 = sibling(node, 2); + var text_1 = child(div_2, true); + reset(div_2); + var img = sibling(div_2, 2); + var div_3 = sibling(img, 2); + var input = child(div_3); + remove_input_defaults(input); + input.disabled = get(loading); + bind_this(input, ($$value) => set(elInput, $$value), () => get(elInput)); + var node_1 = sibling(input, 2); + { + var consequent_4 = ($$anchor2) => { + var button = root_2$2(); + var node_2 = child(button); + { + var consequent_1 = ($$anchor3) => { + var div_4 = root_3$2(); + append($$anchor3, div_4); + }; + var consequent_2 = ($$anchor3) => { + var svg = root_4(); + append($$anchor3, svg); + }; + var consequent_3 = ($$anchor3) => { + var svg_1 = root_5(); + append($$anchor3, svg_1); + }; + var alternate = ($$anchor3) => { + var svg_2 = root_6(); + append($$anchor3, svg_2); + }; + if_block(node_2, ($$render) => { + if (get(audioState) === AudioState.LOADING) $$render(consequent_1); + else if (get(audioState) === AudioState.ERROR) $$render(consequent_2, 1); + else if (get(audioState) === AudioState.PLAYING) $$render(consequent_3, 2); + else $$render(alternate, -1); + }); + } + reset(button); + template_effect(() => { + set_attribute(button, "title", strings().getAudioChallenge); + button.disabled = get(audioState) === AudioState.LOADING || get(audioState) === AudioState.ERROR; + set_attribute(button, "aria-label", get(audioState) === AudioState.LOADING ? strings().loading : strings().getAudioChallenge); + }); + event("click", button, () => onPlayAudio(), true); + append($$anchor2, button); + }; + if_block(node_1, ($$render) => { + if (codeChallenge().audio) $$render(consequent_4); + }); + } + var button_1 = sibling(node_1, 2); + reset(div_3); + var div_5 = sibling(div_3, 2); + var button_2 = child(div_5); + var text_2 = child(button_2, true); + reset(button_2); + var button_3 = sibling(button_2, 2); + var text_3 = child(button_3, true); + reset(button_3); + reset(div_5); + reset(form); + var node_3 = sibling(form, 2); + { + var consequent_5 = ($$anchor2) => { + var audio = root_7(); + bind_this(audio, ($$value) => set(elAudio, $$value), () => get(elAudio)); + event("error", audio, onAudioError); + event("loadstart", audio, onAudioLoadStart); + event("canplay", audio, onAudioCanPlay); + event("pause", audio, onAudioPause); + event("playing", audio, onAudioPlaying); + event("ended", audio, onAudioEnded); + append($$anchor2, audio); + }; + if_block(node_3, ($$render) => { + if (get(playAudio)) $$render(consequent_5); + }); + } + reset(div); + template_effect(() => { + set_text(text_1, strings().enterCodeFromImage); + set_attribute(img, "src", imageUrl()); + set_attribute(input, "minlength", codeChallenge().length || 1); + set_attribute(input, "maxlength", codeChallenge().length); + set_attribute(input, "placeholder", strings().enterCode); + set_attribute(input, "aria-label", get(audioState) === AudioState.LOADING ? strings().loading : get(audioState) === AudioState.PLAYING ? "" : strings().enterCodeAria); + set_attribute(input, "aria-live", get(audioState) ? "assertive" : "polite"); + set_attribute(input, "aria-busy", get(audioState) === AudioState.LOADING); + set_attribute(button_1, "title", strings().reload); + set_attribute(button_1, "aria-label", strings().reload); + set_attribute(button_2, "aria-label", strings().verify); + set_text(text_2, strings().verify); + set_attribute(button_3, "aria-label", strings().cancel); + set_text(text_3, strings().cancel); + }); + event("submit", form, onSubmitCapture, true); + delegated("keydown", input, onInputKeyDown); + bind_value(input, () => get(code), ($$value) => set(code, $$value)); + event("click", button_1, () => onReload()?.(), true); + event("click", button_3, () => onCancel()?.(), true); + append($$anchor, div); + return pop($$exports); +} +delegate(["keydown"]); +create_custom_element( + Code, + { + audioUrl: {}, + codeChallenge: {}, + config: {}, + imageUrl: {}, + onCancel: {}, + onReload: {}, + onSubmit: {}, + strings: {} + }, + [], + [], + { mode: "open" } +); +var root_1$1 = /* @__PURE__ */ from_html(`
`); +var root_2$1 = /* @__PURE__ */ from_html(`
`); +var root_3$1 = /* @__PURE__ */ from_html(`
×
`); +var root$1 = /* @__PURE__ */ from_html(`
`, 1); +function Popover($$anchor, $$props) { + push($$props, true); + let anchor = prop($$props, "anchor"), children = prop($$props, "children"), display = prop($$props, "display", 7, "standard"), backdrop = prop($$props, "backdrop", 7, false), onClickOutside = prop($$props, "onClickOutside"), onClickOutsideDelay = prop($$props, "onClickOutsideDelay", 7, 600), onClose = prop($$props, "onClose"), placement = prop($$props, "placement", 7, "auto"), updateUISignal = prop($$props, "updateUISignal"), variant = prop($$props, "variant", 7, "neutral"), rest = /* @__PURE__ */ rest_props($$props, [ + "$$slots", + "$$events", + "$$legacy", + "$$host", + "anchor", + "children", + "display", + "backdrop", + "onClickOutside", + "onClickOutsideDelay", + "onClose", + "placement", + "updateUISignal", + "variant" + ]); + let el = /* @__PURE__ */ state(void 0); + let elBackdrop = /* @__PURE__ */ state(void 0); + let top = /* @__PURE__ */ state(false); + let mountedAt = /* @__PURE__ */ state(0); + user_effect(() => { + if (placement() !== "auto") { + set(top, placement() === "top"); + } + }); + user_effect(() => { + if (updateUISignal()) { + reposition(); + } + }); + onMount(() => { + const moveToBody = display() === "bottomsheet" || display() === "overlay"; + if (moveToBody) { + get(elBackdrop) && document.body.append(get(elBackdrop)); + get(el) && document.body.append(get(el)); + } + reposition(); + tick().then(() => { + set(mountedAt, Date.now(), true); + }); + return () => { + if (moveToBody) { + get(elBackdrop) && document.body.removeChild(get(elBackdrop)); + get(el) && document.body.removeChild(get(el)); + } + }; + }); + function onCloseClick() { + onClose()?.(); + } + function onWindowClick(ev) { + const target = ev.target; + if (!get(el)?.contains(target) && (!onClickOutsideDelay() || get(mountedAt) + onClickOutsideDelay() < Date.now())) { + onClickOutside()?.(); + } + } + function onWindowResize() { + reposition(); + } + function onWindowScroll() { + reposition(); + } + function reposition() { + if (anchor() && placement() === "auto" && get(el)) { + const boundary2 = anchor().getBoundingClientRect(); + const bottomGap = document.documentElement.clientHeight - (boundary2.top + boundary2.height); + const newTop = bottomGap < get(el).clientHeight; + if (get(top) !== newTop) { + set(top, newTop); + } + } + } + var $$exports = { + get anchor() { + return anchor(); + }, + set anchor($$value) { + anchor($$value); + flushSync(); + }, + get children() { + return children(); + }, + set children($$value) { + children($$value); + flushSync(); + }, + get display() { + return display(); + }, + set display($$value = "standard") { + display($$value); + flushSync(); + }, + get backdrop() { + return backdrop(); + }, + set backdrop($$value = false) { + backdrop($$value); + flushSync(); + }, + get onClickOutside() { + return onClickOutside(); + }, + set onClickOutside($$value) { + onClickOutside($$value); + flushSync(); + }, + get onClickOutsideDelay() { + return onClickOutsideDelay(); + }, + set onClickOutsideDelay($$value = 600) { + onClickOutsideDelay($$value); + flushSync(); + }, + get onClose() { + return onClose(); + }, + set onClose($$value) { + onClose($$value); + flushSync(); + }, + get placement() { + return placement(); + }, + set placement($$value = "auto") { + placement($$value); + flushSync(); + }, + get updateUISignal() { + return updateUISignal(); + }, + set updateUISignal($$value) { + updateUISignal($$value); + flushSync(); + }, + get variant() { + return variant(); + }, + set variant($$value = "neutral") { + variant($$value); + flushSync(); + } + }; + var fragment = root$1(); + event("click", $window, onWindowClick, true); + event("resize", $window, onWindowResize); + event("scroll", $window, onWindowScroll); + var node = first_child(fragment); + { + var consequent = ($$anchor2) => { + var div = root_1$1(); + bind_this(div, ($$value) => set(elBackdrop, $$value), () => get(elBackdrop)); + append($$anchor2, div); + }; + if_block(node, ($$render) => { + if (backdrop()) $$render(consequent); + }); + } + var div_1 = sibling(node, 2); + attribute_effect(div_1, () => ({ + ...rest, + class: `altcha-popover ${($$props.class || "") ?? ""}`, + "data-popover": true, + "data-variant": variant(), + "data-top": get(top), + "data-display": display() + })); + var node_1 = child(div_1); + { + var consequent_1 = ($$anchor2) => { + var div_2 = root_2$1(); + append($$anchor2, div_2); + }; + if_block(node_1, ($$render) => { + if (display() === "standard") $$render(consequent_1); + }); + } + var node_2 = sibling(node_1, 2); + { + var consequent_2 = ($$anchor2) => { + var div_3 = root_3$1(); + event("click", div_3, onCloseClick, true); + append($$anchor2, div_3); + }; + if_block(node_2, ($$render) => { + if (display() !== "standard") $$render(consequent_2); + }); + } + var div_4 = sibling(node_2, 2); + var node_3 = child(div_4); + snippet(node_3, () => children() ?? noop); + reset(div_4); + reset(div_1); + bind_this(div_1, ($$value) => set(el, $$value), () => get(el)); + append($$anchor, fragment); + return pop($$exports); +} +create_custom_element( + Popover, + { + anchor: {}, + children: {}, + display: {}, + backdrop: {}, + onClickOutside: {}, + onClickOutsideDelay: {}, + onClose: {}, + placement: {}, + updateUISignal: {}, + variant: {} + }, + [], + [], + { mode: "open" } +); +function bufferToHex(buffer) { + return Array.from(new Uint8Array(buffer)).map((b) => b.toString(16).padStart(2, "0")).join(""); +} +function injectCss(css2, id = "altcha-css", nonce) { + if (typeof document !== "undefined" && document && !document.getElementById(id)) { + const style = document.createElement("style"); + style.id = id; + style.textContent = css2; + const resolvedNonce = document.currentScript?.nonce ?? document.querySelector('meta[name="csp-nonce"]')?.content; + if (resolvedNonce) { + style.nonce = resolvedNonce; + } + document.head.appendChild(style); + } +} +async function solveChallengeWorkers(options) { + const { + challenge, + concurrency = navigator.hardwareConcurrency, + controller = new AbortController(), + createWorker, + onOutOfMemory = (c) => c > 1 ? Math.floor(c / 2) : 0, + counterMode, + timeout = 9e4 + } = options; + const workersConcurrency = Math.min(16, Math.max(1, concurrency)); + const workersInstances = []; + const terminate = () => { + for (const worker of workersInstances) { + worker.terminate(); + } + }; + for (let i = 0; i < workersConcurrency; i++) { + workersInstances.push(await createWorker(challenge.parameters.algorithm)); + } + let solution = null; + try { + solution = await Promise.race( + workersInstances.map((worker, i) => { + controller.signal.addEventListener("abort", () => { + worker.postMessage({ type: "abort" }); + }); + return new Promise((resolve, reject) => { + worker.addEventListener("error", (err) => { + reject(err); + }); + worker.addEventListener("message", (message) => { + if (message.data) { + for (const w of workersInstances) { + if (w !== worker) { + w.postMessage({ type: "abort" }); + } + } + if (message.data.error) { + return reject(new Error(message.data.error)); + } + } + resolve(message.data); + }); + worker.postMessage({ + challenge, + counterMode, + counterStart: i, + counterStep: workersConcurrency, + timeout, + type: "work" + }); + }); + }) + ); + } catch (err) { + const isOOM = err instanceof Error && !!err?.message?.includes("Out of memory"); + if (isOOM) { + if (onOutOfMemory) { + terminate(); + const retryConcurrency = onOutOfMemory(workersConcurrency); + if (retryConcurrency) { + return solveChallengeWorkers({ + ...options, + challenge, + controller, + concurrency: retryConcurrency, + createWorker + }); + } + } + } + throw err; + } finally { + terminate(); + } + if (controller.signal.aborted) { + return null; + } + return solution || null; +} +class Collector { + TAG_CODES = { + INPUT: 1, + TEXTAREA: 2, + SELECT: 3, + BUTTON: 4, + A: 5, + DETAILS: 6, + SUMMARY: 7, + IFRAME: 8, + VIDEO: 9, + AUDIO: 10 + }; + maxSamples; + sampleInterval; + target; + focusStartTime = 0; + focusInteraction = 0; + focusInteractionTimer = null; + lastPointerSample = 0; + lastTouchSample = 0; + lastScrollSample = 0; + pendingPointer = null; + pendingTouch = null; + focus = []; + pointer = []; + scroll = []; + touch = []; + constructor(options = {}) { + const { maxSamples = 60, sampleInterval = 50, target = window } = options; + this.maxSamples = maxSamples; + this.sampleInterval = sampleInterval; + this.target = target; + this.attach(); + } + destroy() { + const o = { capture: true }; + this.target.removeEventListener("focusin", this.onFocus, o); + this.target.removeEventListener("keydown", this.onInteraction, o); + this.target.removeEventListener("pointerdown", this.onInteraction, o); + this.target.removeEventListener("pointermove", this.onPointer, o); + this.target.removeEventListener("scroll", this.onScroll, o); + this.target.removeEventListener("touchmove", this.onTouchMove, o); + } + export() { + return { + focus: this.focus, + maxTouchPoints: navigator.maxTouchPoints || 0, + pointer: this.pointer, + scroll: this.scroll, + time: Date.now(), + touch: this.touch + }; + } + attach() { + const o = { passive: true, capture: true }; + this.target.addEventListener("focusin", this.onFocus, o); + this.target.addEventListener("keydown", this.onInteraction, o); + this.target.addEventListener("pointerdown", this.onInteraction, o); + this.target.addEventListener("pointermove", this.onPointer, o); + this.target.addEventListener("scroll", this.onScroll, o); + this.target.addEventListener("touchmove", this.onTouchMove, o); + } + evict(buffer) { + if (buffer.length > this.maxSamples) { + buffer.splice(0, buffer.length - this.maxSamples); + } + } + onFocus = (e) => { + if (this.focusInteraction === 2) { + return; + } + const el = e.target; + if (!(el instanceof Element)) { + return; + } + const now = performance.now(); + if (this.focusStartTime === 0) { + this.focusStartTime = now; + } + this.focus.push([ + Math.round(now - this.focusStartTime), + el.tabIndex, + this.TAG_CODES[el.tagName] ?? 0, + this.focusInteraction ? 1 : 0 + ]); + this.evict(this.focus); + }; + onInteraction = (e) => { + this.focusInteraction = "keyCode" in e ? 1 : 2; + if (this.focusInteractionTimer) { + clearTimeout(this.focusInteractionTimer); + } + this.focusInteractionTimer = setTimeout(() => { + this.focusInteraction = 0; + }, 100); + }; + onPointer = (e) => { + if (e.pointerType === "touch") { + return; + } + const now = e.timeStamp || performance.now(); + this.pendingPointer = [Math.round(e.clientX), Math.round(e.clientY), Math.round(now)]; + if (now - this.lastPointerSample >= this.sampleInterval) { + this.pointer.push(this.pendingPointer); + this.lastPointerSample = now; + this.pendingPointer = null; + this.evict(this.pointer); + } + }; + onScroll = () => { + const now = performance.now(); + if (now - this.lastScrollSample < this.sampleInterval) { + return; + } + this.scroll.push([Math.round(window.scrollY), Math.round(now)]); + this.lastScrollSample = now; + this.evict(this.scroll); + }; + onTouchMove = (e) => { + const now = e.timeStamp || performance.now(); + const t = e.touches[0]; + if (!t) { + return; + } + this.pendingTouch = [ + Math.round(t.clientX), + Math.round(t.clientY), + Math.round(now), + Math.round(t.force * 1e3) / 1e3, + Math.round(t.radiusX || 0), + Math.round(t.radiusY || 0) + ]; + if (now - this.lastTouchSample >= this.sampleInterval) { + this.touch.push(this.pendingTouch); + this.lastTouchSample = now; + this.pendingTouch = null; + this.evict(this.touch); + } + }; +} +var root_1 = /* @__PURE__ */ from_html(`
`); +var root_3 = /* @__PURE__ */ from_html(`
`); +var root_2 = /* @__PURE__ */ from_html(`
×
`, 1); +var root_10 = /* @__PURE__ */ from_html(`
`); +var root_11 = /* @__PURE__ */ from_html(``); +var root_14 = /* @__PURE__ */ from_html(`
Secure context (HTTPS) required.
`); +var root_15 = /* @__PURE__ */ from_html(`
`); +var root_16 = /* @__PURE__ */ from_html(`
`); +var root_19 = /* @__PURE__ */ from_html(` `, 1); +var root = /* @__PURE__ */ from_html(`
`, 1); +function Widget($$anchor, $$props) { + push($$props, true); + const $altchaDefaults = () => store_get(altchaDefaults, "$altchaDefaults", $$stores); + const $altchaI18nStore = () => store_get(altchaI18nStore, "$altchaI18nStore", $$stores); + const [$$stores, $$cleanup] = setup_stores(); + const fieldsSelector = 'input[type="text"]:not([data-no-spamfilter]), textarea:not([data-no-spamfilter])'; + const submitButtonSelector = 'input[type="submit"], button[type="submit"], button:not([type="button"]):not([type="reset"])'; + const rtlLanguages = ["ar", "fa", "he", "ur"]; + const { isSecureContext } = globalThis; + const { store: altchaDefaults } = globalThis.$altcha.defaults; + const hardwareConcurrency = navigator.hardwareConcurrency || 2; + const deviceMemory = navigator.deviceMemory || 0; + const defaultWorkers = deviceMemory && deviceMemory <= 4 ? Math.min(4, hardwareConcurrency) : hardwareConcurrency; + const altchaI18nStore = globalThis.$altcha.i18n.store; + const instance = $$props.$$host; + const dispatch = (event2, detail) => { + tick().then(() => { + instance?.dispatchEvent(new CustomEvent(event2, { detail })); + }); + }; + let hisCollector = null; + let baseUrl = /* @__PURE__ */ state(proxy(new URL(location.origin))); + let checked = /* @__PURE__ */ state(false); + let codeChallenge = /* @__PURE__ */ state(null); + let currentController = /* @__PURE__ */ state(null); + let currentDisplay = /* @__PURE__ */ state(null); + let currentState = /* @__PURE__ */ state(proxy(State.UNVERIFIED)); + let elAnchorArrow = /* @__PURE__ */ state(void 0); + let elFloatingAnchor = /* @__PURE__ */ state(void 0); + let elForm = /* @__PURE__ */ state(null); + let elRoot = /* @__PURE__ */ state(void 0); + let elSubmitter = /* @__PURE__ */ state(null); + let error = /* @__PURE__ */ state(null); + let expirationTimeout = /* @__PURE__ */ state(null); + let payload = /* @__PURE__ */ state(null); + let plugins = /* @__PURE__ */ state(proxy([])); + let updateUISignal = /* @__PURE__ */ state(0); + let userConfig = /* @__PURE__ */ state(proxy({})); + let visible = /* @__PURE__ */ state(true); + const config = /* @__PURE__ */ user_derived(() => ({ + fetch: (input, init) => fetch(input, init), + audioChallengeLanguage: "", + auto: "off", + barPlacement: "bottom", + challenge: "", + codeChallenge: null, + codeChallengeDisplay: "standard", + credentials: null, + debug: false, + disableAutoFocus: false, + display: "standard", + floatingAnchor: "", + floatingOffset: 8, + floatingPersist: false, + floatingPlacement: "auto", + hideFooter: false, + hideLogo: false, + humanInteractionSignature: true, + language: "", + mockError: false, + minDuration: 500, + overlayContent: "", + name: "altcha", + popoverPlacement: "auto", + retryOnOutOfMemoryError: true, + setCookie: null, + serverVerificationFields: false, + serverVerificationTimeZone: false, + test: false, + timeout: 9e4, + type: "checkbox", + validationMessage: "", + verifyFunction: null, + verifyUrl: "", + workers: defaultWorkers, + ...$altchaDefaults(), + ...get(userConfig) + })); + const checkboxId = /* @__PURE__ */ user_derived(() => `altcha-checkbox-${$$props.id || Math.floor(Math.random() * 1e12).toString(16)}`); + const CheckboxComponent = /* @__PURE__ */ user_derived(() => getCheckboxComponent(get(config).type)); + const auto = /* @__PURE__ */ user_derived(() => get(config).auto); + const loading = /* @__PURE__ */ user_derived(() => get(currentState) === State.VERIFYING); + const showFooter = /* @__PURE__ */ user_derived(() => !get(config).hideFooter); + const showLogo = /* @__PURE__ */ user_derived(() => !get(config).hideLogo && get(config).display !== "bar"); + const locale = /* @__PURE__ */ user_derived(() => getI18nStrings($altchaI18nStore(), [ + get(config).language, + document.documentElement.lang, + ...navigator.languages + ])); + const dir = /* @__PURE__ */ user_derived(() => rtlLanguages.includes(get(locale).language) ? "rtl" : void 0); + const strings = /* @__PURE__ */ user_derived(() => ({ ...get(locale).strings })); + const codeChallengeAudioUrl = /* @__PURE__ */ user_derived(() => get(codeChallenge)?.audio?.match(/^(https?:)?\//) ? getUrl(get(codeChallenge).audio, get(baseUrl), { + language: get(config).audioChallengeLanguage || get(locale).language + }).toString() : get(codeChallenge)?.audio); + const codeChallengeImageUrl = /* @__PURE__ */ user_derived(() => get(codeChallenge)?.image?.match(/^(https?:)?\//) ? getUrl(get(codeChallenge).image, get(baseUrl)) : get(codeChallenge)?.image); + user_effect(() => { + configure({ + auto: $$props.auto, + challenge: $$props.challenge, + display: $$props.display, + language: $$props.language, + name: $$props.name, + type: $$props.type, + workers: $$props.workers + }); + }); + user_effect(() => { + if ($$props.configuration) { + try { + configure(JSON.parse($$props.configuration)); + } catch { + log("unable to parse the `configuration` attribute (JSON expected)"); + } + } + }); + user_effect(() => { + if (get(currentDisplay) !== get(config).display) { + setDisplay(get(config).display); + } + }); + user_effect(() => { + if (get(checked) && get(currentState) === State.VERIFYING) { + set(checked, false); + } + }); + user_effect(() => { + if (!get(checked) && get(currentState) === State.VERIFIED) { + set(checked, true); + } + }); + user_effect(() => { + if (!get(checked)) { + const checkbox = getCheckboxElement(); + if (checkbox && checkbox.checked) { + checkbox.checked = false; + } + } + }); + user_effect(() => { + if (get(currentState) === State.VERIFIED) { + getCheckboxElement()?.setCustomValidity(""); + } + }); + user_effect(() => { + if (get(auto) === "onload") { + const tm = setTimeout( + () => { + verify(); + }, + 1 + ); + return () => { + if (tm) { + clearTimeout(tm); + } + }; + } + }); + user_effect(() => { + if (get(error)) { + log("error:", get(error)); + } + }); + user_effect(() => { + if (get(payload) && get(config).setCookie) { + setCookie(get(payload), get(config).setCookie); + } + }); + onMount(() => { + log("mounted", "3.2.1"); + if (instance) { + globalThis.$altcha.instances.add(instance); + } + set(elForm, get(elRoot)?.closest("form"), true); + get(elForm)?.addEventListener("reset", onFormReset); + get(elForm)?.addEventListener("submit", onFormSubmit, { capture: true }); + get(elForm)?.addEventListener("focusin", onFormFocusIn); + activatePlugins(); + if (get(config).humanInteractionSignature) { + log("human interaction signature enabled"); + hisCollector = new Collector(); + } + dispatch("load"); + if (!isSecureContext) { + log("secure context (HTTPS) required"); + } + return () => { + destroyPlugins(); + if (instance) { + globalThis.$altcha.instances.delete(instance); + } + if (get(expirationTimeout)) { + clearTimeout(get(expirationTimeout)); + } + get(elForm)?.removeEventListener("reset", onFormReset); + get(elForm)?.removeEventListener("submit", onFormSubmit, { capture: true }); + get(elForm)?.removeEventListener("focusin", onFormFocusIn); + hisCollector?.destroy(); + }; + }); + function activatePlugins() { + set(plugins, [...globalThis.$altcha.plugins].map((PluginCls) => new PluginCls(instance)), true); + log("activating plugins", get(plugins).map((plugin) => plugin.constructor.name)); + for (const plugin of get(plugins)) { + plugin.activate(); + } + } + async function callHook(hook, ...args) { + let result = void 0; + for (const plugin of get(plugins)) { + result = await plugin[hook].call(plugin, ...args); + } + return result; + } + function destroyPlugins() { + for (const plugin of get(plugins)) { + plugin.destroy(); + } + } + function createChallengeFromV1(challenge) { + const [_, queryParams] = challenge.salt.split("?"); + const data = {}; + if (queryParams) { + try { + Object.assign(data, Object.fromEntries(new URLSearchParams(queryParams).entries())); + } catch { + } + } + const result = { + codeChallenge: challenge.codeChallenge, + parameters: { + algorithm: challenge.algorithm, + cost: 1, + data, + expiresAt: data?.expires ? parseInt(data.expires, 10) : void 0, + keyLength: challenge.algorithm === "SHA-512" ? 64 : challenge.algorithm === "SHA-384" ? 48 : 32, + nonce: bufferToHex(new TextEncoder().encode(challenge.salt)), + keyPrefix: challenge.challenge, + salt: "" + }, + signature: challenge.signature + }; + Object.defineProperties(result, { + _originalSalt: { enumerable: false, value: challenge.salt, writable: false }, + _version: { enumerable: false, value: 1, writable: false } + }); + return result; + } + function createPayloadV1(challenge, solution) { + return { + algorithm: challenge.parameters.algorithm, + challenge: challenge.parameters.keyPrefix, + number: solution.counter, + salt: "_originalSalt" in challenge ? challenge._originalSalt : challenge.parameters.nonce, + signature: challenge.signature, + took: solution.time || 0 + }; + } + async function delay(ms) { + await new Promise((resolve) => setTimeout(resolve, ms)); + } + async function fetchChallenge(source2 = get(config).challenge, requestOptions) { + const hook = await callHook("onFetchChallenge", source2); + let challenge = null; + if (hook !== void 0) { + return hook; + } + if (typeof source2 === "string") { + if (source2.startsWith("{")) { + log("parsing JSON challenge"); + try { + challenge = JSON.parse(source2); + } catch { + throw new Error(`Unable to parse JSON challenge.`); + } + } else { + log("fetching challenge from", requestOptions?.method || "GET", source2); + set(baseUrl, new URL(source2, location.origin), true); + const resp = await get(config).fetch(source2, { + credentials: get(config).credentials || void 0, + ...requestOptions + }); + await validateResponse(resp); + const configHeader = resp.headers.get("x-altcha-config"); + if (configHeader) { + processConfigHeader(configHeader); + } + const json = await resp.json(); + if (json && "his" in json && json.his) { + log("requested HIS"); + if (!hisCollector) { + throw new Error("Server requested HIS data but collector is disabled."); + } + return fetchChallenge(getUrl(json.his.url, get(baseUrl)), { + body: JSON.stringify({ his: hisCollector.export() }), + headers: { "content-type": "application/json" }, + method: "POST" + }); + } + if (json && "hisResult" in json && json.hisResult) { + log("HIS result", json.hisResult); + } + challenge = json; + } + } else if (source2 && typeof source2 === "object") { + try { + challenge = JSON.parse(JSON.stringify(source2)); + } catch { + throw new Error(`Unable to parse JSON challenge.`); + } + } + if (isChallengeV1(challenge)) { + challenge = createChallengeFromV1(challenge); + } + if (!isChallengeValid(challenge)) { + throw new Error(`Challenge validation failed.`); + } + return challenge; + } + function isChallengeV1(challenge) { + return typeof challenge === "object" && "challenge" in challenge; + } + function isChallengeValid(challenge) { + return !!challenge && typeof challenge === "object" && "parameters" in challenge && !!challenge.parameters && typeof challenge.parameters === "object" && "algorithm" in challenge.parameters && "nonce" in challenge.parameters && "salt" in challenge.parameters && "keyPrefix" in challenge.parameters; + } + function getCheckboxElement() { + return document.getElementById(get(checkboxId)); + } + function getCheckboxComponent(type) { + switch (type) { + case "checkbox": + return Checkbox; + case "switch": + return Switch; + case "native": + default: + return CheckboxNative; + } + } + function getI18nStrings(i18n2, languages) { + const codes = Object.keys(i18n2).map((code) => code.toLowerCase()); + let language = languages.reduce( + (acc, lang) => { + lang = lang.toLowerCase(); + return acc || (i18n2[lang] ? lang : null) || codes.find((code) => lang.split("-")[0] === code.split("-")[0]) || null; + }, + null + ); + if (!i18n2[language || ""]) { + language = "en"; + } + return { language, strings: i18n2[language] }; + } + function getPlacement(display) { + switch (display) { + case "bar": + return get(config).barPlacement || "bottom"; + case "floating": + return get(config).floatingPlacement || "auto"; + default: + return void 0; + } + } + function getTextFields(names) { + const elInputs = [ + ...get(elForm)?.querySelectorAll(fieldsSelector) || [] + ]; + return elInputs.reduce( + (acc, el) => { + const name = el.name; + const value = el.value; + if (name && value) { + acc[name] = /\n/.test(value) ? value.replace(new RegExp("(? { + if (result && !get(codeChallenge)) { + tick().then(() => { + requestSubmit(get(elSubmitter)); + }); + } + }); + } + } + function onWindowPageshow(ev) { + if (ev.persisted) { + setDisplay(get(config).display); + reset$1(); + } + } + function onWindowResize() { + updateUI(); + } + function processConfigHeader(jsonConfig) { + try { + const json = JSON.parse(jsonConfig); + if (json && typeof json === "object") { + configure({ + // Backward compatibility mappings + serverVerificationFields: json?.sentinel?.fields, + serverVerificationTimeZone: json?.sentinel?.timeZone, + verifyUrl: json.verifyurl, + ...json + }); + } + } catch (err) { + log("unable to configure from x-altcha-config header", err); + } + } + function repositionFloating(viewportOffset = 20) { + if (!get(elRoot)) { + return; + } + const floatingPlacement = get(config).floatingPlacement; + if (!get(elFloatingAnchor)) { + set( + elFloatingAnchor, + (get(config).floatingAnchor instanceof HTMLElement ? get(config).floatingAnchor : get(config).floatingAnchor ? document.querySelector(get(config).floatingAnchor) : get(elForm)?.querySelector(submitButtonSelector)) || get(elForm), + true + ); + if (!get(elFloatingAnchor)) { + log("unable to find floating anchor element"); + return; + } + } + const offsetY = parseInt(get(config).floatingOffset, 10) || 12; + const anchorBoundry = get(elFloatingAnchor).getBoundingClientRect(); + const elBoundary = get(elRoot).getBoundingClientRect(); + const docHeight = document.documentElement.clientHeight; + const docWidth = document.documentElement.clientWidth; + const showOnTop = !floatingPlacement || floatingPlacement === "auto" ? anchorBoundry.bottom + elBoundary.height + offsetY + viewportOffset > docHeight : floatingPlacement === "top"; + const left = Math.max(viewportOffset, Math.min(docWidth - viewportOffset - elBoundary.width, anchorBoundry.left + anchorBoundry.width / 2 - elBoundary.width / 2)); + get(elRoot).style.setProperty("--altcha-floating-left", `${left}px`); + get(elRoot).style.setProperty("--altcha-floating-top", showOnTop ? `${anchorBoundry.top - (elBoundary.height + offsetY)}px` : `${anchorBoundry.bottom + offsetY}px`); + get(elRoot).setAttribute("data-floating-position", showOnTop ? "top" : "bottom"); + if (get(elAnchorArrow)) { + const anchorArrowBoundry = get(elAnchorArrow).getBoundingClientRect(); + get(elAnchorArrow).style.left = anchorBoundry.left - left + anchorBoundry.width / 2 - anchorArrowBoundry.width / 2 + "px"; + } + } + async function requestServerVerification(verificationPayload, code) { + const hook = await callHook("onRequestServerVerification", verificationPayload, code); + if (hook !== void 0) { + return hook; + } + log("requesting server verification from", get(config).verifyUrl); + if (!get(config).verifyUrl) { + throw new Error(`Parameter verifyUrl must be set for server verification.`); + } + const resp = await get(config).fetch(getUrl(get(config).verifyUrl, get(baseUrl)), { + body: JSON.stringify({ + code, + fields: get(config).serverVerificationFields ? getTextFields() : void 0, + payload: verificationPayload, + timeZone: get(config).serverVerificationTimeZone ? getTimeZone() : void 0 + }), + credentials: get(config).credentials || void 0, + headers: { "Content-Type": "application/json" }, + method: "POST" + }); + await validateResponse(resp); + const json = await resp.json(); + if (json && typeof json === "object" && "payload" in json && !!json.payload) { + dispatch("serververification", json); + } + return json; + } + function requestSubmit(submitter) { + if (get(elForm) && "requestSubmit" in get(elForm)) { + get(elForm).requestSubmit(submitter); + } else if (get(elForm)?.reportValidity()) { + if (submitter) { + submitter.click(); + } else { + get(elForm).submit(); + } + } + } + function setCookie(value, options = {}) { + const { + domain, + name = get(config).name, + maxAge, + path, + sameSite, + secure + } = options; + let cookie = `${encodeURIComponent(name)}=${encodeURIComponent(value)}`; + if (domain) cookie += `; Domain=${domain}`; + if (maxAge != null) cookie += `; Max-Age=${maxAge}`; + if (path) cookie += `; Path=${path}`; + if (sameSite) cookie += `; SameSite=${sameSite}`; + if (secure) cookie += `; Secure`; + document.cookie = cookie; + } + function setDisplay(value) { + switch (value) { + case "bar": + case "floating": + case "overlay": + hide(); + if (!get(auto) || get(auto) === "off") { + get(userConfig).auto = "onsubmit"; + } + break; + case "standard": + show(); + } + if (get(currentDisplay) !== value) { + set(currentDisplay, value, true); + } + } + function setChallengeExpiration(expiresAt) { + if (get(expirationTimeout)) { + clearTimeout(get(expirationTimeout)); + } + const onExpired = () => { + if (get(currentState) !== State.UNVERIFIED) { + set(checked, false); + setState(State.EXPIRED); + } else { + reset$1(); + } + dispatch("expired"); + }; + const duration = expiresAt * 1e3 - Date.now(); + if (duration >= 1) { + set(expirationTimeout, setTimeout(onExpired, duration), true); + } else { + onExpired(); + } + } + async function validateResponse(resp) { + if (resp.status >= 400) { + if (resp.headers.get("content-type")?.includes("/json")) { + let json; + try { + json = await resp.json(); + } catch { + } + if (json && "error" in json) { + throw new Error(`Server responded with ${resp.status} - ${json.error}`); + } + } + throw new Error(`Server responded with ${resp.status}.`); + } + const contentType = resp.headers.get("content-type"); + if (!contentType || !contentType.includes("/json")) { + throw new Error(`Server responded with invalid content-type. Expected application/json, received ${contentType}.`); + } + } + async function verifyServer(code) { + if (!get(payload)) { + setState(State.ERROR, "Cannot verify code challenge without PoW payload."); + return; + } + setState(State.VERIFYING); + let result = null; + if (get(config).verifyUrl) { + result = await requestServerVerification(get(payload), code); + } else if (get(config).verifyFunction) { + result = await get(config).verifyFunction(get(payload), code); + } else { + setState(State.ERROR, "Parameter verifyUrl is required for code challenge verification."); + return; + } + if (result?.payload) { + set(payload, result.payload, true); + log("server payload", get(payload)); + } + if (result?.verified === true) { + log("verified"); + setState(State.VERIFIED); + dispatch("verified", { payload: get(payload) }); + if (get(auto) === "onsubmit") { + tick().then(() => { + requestSubmit(get(elSubmitter)); + }); + } + } else { + setState(State.ERROR, result?.reason || "Verification failed."); + } + if (!get(config).disableAutoFocus) { + getCheckboxElement()?.focus(); + } + } + function configure(newConfig) { + Object.assign(get(userConfig), { + ...Object.fromEntries(Object.entries(newConfig).filter(([_, value]) => value !== void 0)) + }); + } + function getConfiguration() { + return { ...get(config) }; + } + function getState() { + return get(currentState); + } + function hide() { + set(visible, false); + } + function log(...args) { + if (get(config).debug || args.some((a) => a instanceof Error)) { + console[args[0] instanceof Error ? "error" : "log"]("ALTCHA", `[name=${get(config).name}]`, ...args); + } + } + function reset$1(newState = State.UNVERIFIED, err = null) { + set(checked, false); + set(error, err, true); + set(payload, null); + if (get(currentController)) { + get(currentController).abort(); + } + if (get(expirationTimeout)) { + clearTimeout(get(expirationTimeout)); + set(expirationTimeout, null); + } + setState(newState); + } + function setState(newState, err = null) { + set(currentState, newState, true); + set(error, err, true); + dispatch("statechange", { payload: get(payload), state: get(currentState) }); + } + function show() { + set(visible, true); + tick().then(() => { + updateUI(); + }); + } + function updateUI() { + switch (get(config).display) { + case "floating": + return repositionFloating(); + } + set(updateUISignal, get(updateUISignal) + 1); + } + async function verify(options = {}) { + const { + concurrency = Math.max(1, get(config).workers), + controller = new AbortController(), + minDuration = get(config).minDuration + } = options; + const start = performance.now(); + let challenge = null; + let solution = null; + let isChallengeV12 = false; + const hook = await callHook("onVerify", options); + if (hook !== void 0) { + return hook; + } + reset$1(State.VERIFYING); + set(currentController, controller, true); + try { + if (!isSecureContext) { + throw new Error("Secure context (HTTPS) required."); + } + if (get(config).mockError) { + throw new Error("Mock error."); + } + if (get(config).test) { + log("running test mode with null challenge"); + await delay(Math.max(0, minDuration - (performance.now() - start))); + if (get(currentController)?.signal.aborted) { + reset$1(); + return null; + } + set(payload, btoa(JSON.stringify({ challenge: null, solution: null, test: true })), true); + log("verified"); + setState(State.VERIFIED); + dispatch("verified", { payload: get(payload) }); + return { payload: get(payload) }; + } + challenge = await fetchChallenge(); + if (!challenge) { + throw new Error("Failed to fetch challenge."); + } + log("challenge", challenge); + if ("configuration" in challenge) { + log("re-configuring from challenge", challenge.configuration); + configure(challenge.configuration); + } + if (challenge.parameters.expiresAt) { + setChallengeExpiration(challenge.parameters.expiresAt); + } + isChallengeV12 = "_version" in challenge && challenge._version === 1; + const createWorker = globalThis.$altcha.algorithms.get(challenge.parameters.algorithm); + if (!createWorker) { + throw new Error(`Unsupported algorithm ${challenge.parameters.algorithm}.`); + } + solution = await solveChallengeWorkers({ + challenge, + concurrency, + controller, + createWorker, + counterMode: isChallengeV12 ? "string" : "uint32", + onOutOfMemory: (c) => { + log("out of memory error received"); + dispatch("outofmemory"); + if (get(config).retryOnOutOfMemoryError && c > 1) { + const retryConcurrency = Math.floor(c / 2); + log(`retrying with ${retryConcurrency} workers...`); + return retryConcurrency; + } + }, + timeout: get(config).timeout + }); + if (get(currentController)?.signal.aborted) { + reset$1(); + return null; + } + if (!solution) { + throw new Error("Failed to find solution."); + } + log("solution", solution); + await delay(Math.max(0, minDuration - (performance.now() - start))); + set(codeChallenge, challenge.codeChallenge || get(config).codeChallenge || null, true); + if (isChallengeV12) { + set(payload, btoa(JSON.stringify(createPayloadV1(challenge, solution))), true); + } else { + set( + payload, + btoa(JSON.stringify({ + challenge: { + parameters: challenge.parameters, + signature: challenge.signature + }, + solution + })), + true + ); + } + if (get(codeChallenge)) { + log("requesting code verification"); + setState(State.CODE); + dispatch("codechallenge", { codeChallenge: get(codeChallenge) }); + } else if (get(config).verifyUrl) { + await verifyServer(); + } else { + log("verified"); + setState(State.VERIFIED); + dispatch("verified", { payload: get(payload) }); + } + } catch (err) { + log("verification failed", err); + setState(State.ERROR, String(err)); + return null; + } finally { + set(currentController, null); + } + return { challenge, payload: get(payload), solution }; + } + var $$exports = { + configure, + getConfiguration, + getState, + hide, + log, + reset: reset$1, + setState, + show, + updateUI, + verify + }; + var fragment = root(); + event("scroll", $document, onDocumentScroll); + event("click", $document, onDocumentClick); + event("pageshow", $window, onWindowPageshow); + event("resize", $window, onWindowResize); + var node = first_child(fragment); + { + var consequent = ($$anchor2) => { + var div = root_1(); + append($$anchor2, div); + }; + if_block(node, ($$render) => { + if (get(config).display === "overlay" && get(visible)) $$render(consequent); + }); + } + var div_1 = sibling(node, 2); + var node_1 = child(div_1); + { + var consequent_2 = ($$anchor2) => { + var fragment_1 = root_2(); + var div_2 = first_child(fragment_1); + var node_2 = sibling(div_2, 2); + { + var consequent_1 = ($$anchor3) => { + var div_3 = root_3(); + html(div_3, () => document.querySelector(get(config).overlayContent)?.innerHTML, true); + reset(div_3); + append($$anchor3, div_3); + }; + if_block(node_2, ($$render) => { + if (get(config).overlayContent) $$render(consequent_1); + }); + } + event("click", div_2, onCloseClick, true); + append($$anchor2, fragment_1); + }; + if_block(node_1, ($$render) => { + if (get(config).display === "overlay" && get(visible)) $$render(consequent_2); + }); + } + var div_4 = sibling(node_1, 2); + var div_5 = child(div_4); + var div_6 = child(div_5); + var node_3 = child(div_6); + { + let $0 = /* @__PURE__ */ user_derived(() => get(config).display === "standard" && get(auto) !== "onsubmit" || get(currentState) === State.VERIFYING); + component(node_3, () => get(CheckboxComponent), ($$anchor2, CheckboxComponent_1) => { + CheckboxComponent_1($$anchor2, { + get id() { + return get(checkboxId); + }, + name: "", + get required() { + return get($0); + }, + get loading() { + return get(loading); + }, + get checked() { + return get(checked); + }, + onchange: onCheckboxChange, + oninvalid: onCheckboxInvalid + }); + }); + } + var label = sibling(node_3, 2); + var node_4 = child(label); + { + var consequent_3 = ($$anchor2) => { + var text$1 = text(); + template_effect(() => set_text(text$1, get(strings).verificationRequired)); + append($$anchor2, text$1); + }; + var consequent_4 = ($$anchor2) => { + var text_1 = text(); + template_effect(() => set_text(text_1, get(strings).verifying)); + append($$anchor2, text_1); + }; + var consequent_5 = ($$anchor2) => { + var text_2 = text(); + template_effect(() => set_text(text_2, get(strings).verified)); + append($$anchor2, text_2); + }; + var alternate = ($$anchor2) => { + var text_3 = text(); + template_effect(() => set_text(text_3, get(strings).label)); + append($$anchor2, text_3); + }; + if_block(node_4, ($$render) => { + if (get(currentState) === State.CODE && get(codeChallenge)) $$render(consequent_3); + else if (get(currentState) === State.VERIFYING) $$render(consequent_4, 1); + else if (get(currentState) === State.VERIFIED) $$render(consequent_5, 2); + else $$render(alternate, -1); + }); + } + reset(label); + reset(div_6); + var node_5 = sibling(div_6, 2); + { + var consequent_6 = ($$anchor2) => { + Logo($$anchor2, { + get strings() { + return get(strings); + } + }); + }; + if_block(node_5, ($$render) => { + if (get(showLogo)) $$render(consequent_6); + }); + } + reset(div_5); + var node_6 = sibling(div_5, 2); + { + var consequent_7 = ($$anchor2) => { + { + let $0 = /* @__PURE__ */ user_derived(() => get(config).display === "bar" && get(showLogo)); + Footer($$anchor2, { + get logo() { + return get($0); + }, + get strings() { + return get(strings); + } + }); + } + }; + if_block(node_6, ($$render) => { + if (get(showFooter)) $$render(consequent_7); + }); + } + var node_7 = sibling(node_6, 2); + { + var consequent_8 = ($$anchor2) => { + var div_7 = root_10(); + bind_this(div_7, ($$value) => set(elAnchorArrow, $$value), () => get(elAnchorArrow)); + append($$anchor2, div_7); + }; + if_block(node_7, ($$render) => { + if (get(config).display === "floating") $$render(consequent_8); + }); + } + var node_8 = sibling(node_7, 2); + { + var consequent_9 = ($$anchor2) => { + var input_1 = root_11(); + remove_input_defaults(input_1); + template_effect(() => { + set_attribute(input_1, "name", get(config).name); + set_value(input_1, get(payload)); + }); + append($$anchor2, input_1); + }; + if_block(node_8, ($$render) => { + if (!get(config).setCookie) $$render(consequent_9); + }); + } + reset(div_4); + var node_9 = sibling(div_4, 2); + { + var consequent_12 = ($$anchor2) => { + Popover($$anchor2, { + get anchor() { + return get(elRoot); + }, + onClickOutside: () => { + if (isSecureContext) { + reset$1(); + } + }, + get placement() { + return get(config).popoverPlacement; + }, + role: "alert", + variant: "error", + get dir() { + return get(dir); + }, + get updateUISignal() { + return get(updateUISignal); + }, + children: ($$anchor3, $$slotProps) => { + var fragment_9 = comment(); + var node_10 = first_child(fragment_9); + { + var consequent_10 = ($$anchor4) => { + var div_8 = root_14(); + append($$anchor4, div_8); + }; + var consequent_11 = ($$anchor4) => { + var div_9 = root_15(); + var text_4 = child(div_9, true); + reset(div_9); + template_effect(() => set_text(text_4, get(strings).expired)); + append($$anchor4, div_9); + }; + var alternate_1 = ($$anchor4) => { + var div_10 = root_16(); + var text_5 = child(div_10, true); + reset(div_10); + template_effect(() => { + set_attribute(div_10, "title", get(error)); + set_text(text_5, get(strings).error); + }); + append($$anchor4, div_10); + }; + if_block(node_10, ($$render) => { + if (!get(error) && !isSecureContext) $$render(consequent_10); + else if (!get(error) && get(currentState) === State.EXPIRED) $$render(consequent_11, 1); + else $$render(alternate_1, -1); + }); + } + append($$anchor3, fragment_9); + }, + $$slots: { default: true } + }); + }; + var consequent_14 = ($$anchor2) => { + var fragment_10 = comment(); + var node_11 = first_child(fragment_10); + key(node_11, () => get(codeChallenge), ($$anchor3) => { + { + let $0 = /* @__PURE__ */ user_derived(() => get(config).codeChallengeDisplay !== "standard"); + Popover($$anchor3, { + get anchor() { + return get(elRoot); + }, + get backdrop() { + return get($0); + }, + get display() { + return get(config).codeChallengeDisplay; + }, + onClose: () => { + reset$1(); + }, + get placement() { + return get(config).popoverPlacement; + }, + role: "dialog", + get "aria-label"() { + return get(strings).verificationRequired; + }, + get dir() { + return get(dir); + }, + get updateUISignal() { + return get(updateUISignal); + }, + children: ($$anchor4, $$slotProps) => { + var fragment_12 = root_19(); + var node_12 = first_child(fragment_12); + Code(node_12, { + get audioUrl() { + return get(codeChallengeAudioUrl); + }, + get imageUrl() { + return get(codeChallengeImageUrl); + }, + onCancel: () => reset$1(), + onReload: () => verify(), + onSubmit: (code) => verifyServer(code), + get codeChallenge() { + return get(codeChallenge); + }, + get config() { + return get(config); + }, + get strings() { + return get(strings); + } + }); + var node_13 = sibling(node_12, 2); + { + var consequent_13 = ($$anchor5) => { + Footer($$anchor5, { + get logo() { + return get(showLogo); + }, + get strings() { + return get(strings); + } + }); + }; + if_block(node_13, ($$render) => { + if (get(showFooter) && get(config).codeChallengeDisplay !== "standard") $$render(consequent_13); + }); + } + append($$anchor4, fragment_12); + }, + $$slots: { default: true } + }); + } + }); + append($$anchor2, fragment_10); + }; + if_block(node_9, ($$render) => { + if (get(error) || get(currentState) === State.EXPIRED || !isSecureContext) $$render(consequent_12); + else if (get(codeChallenge) && get(currentState) === State.CODE) $$render(consequent_14, 1); + }); + } + reset(div_1); + bind_this(div_1, ($$value) => set(elRoot, $$value), () => get(elRoot)); + template_effect( + ($0) => { + set_attribute(div_1, "data-state", get(currentState)); + set_attribute(div_1, "data-display", get(config).display || void 0); + set_attribute(div_1, "data-placement", $0); + set_attribute(div_1, "data-visible", get(visible) || void 0); + set_attribute(div_1, "dir", get(dir)); + set_attribute(label, "for", get(checkboxId)); + div_1.dir = div_1.dir; + }, + [() => getPlacement(get(config).display)] + ); + append($$anchor, fragment); + var $$pop = pop($$exports); + $$cleanup(); + return $$pop; +} +if (typeof window !== "undefined" && window.customElements && !customElements.get("altcha-widget")) customElements.define("altcha-widget", create_custom_element( + Widget, + { + auto: { type: "String" }, + challenge: { type: "String" }, + configuration: { type: "String" }, + display: { type: "String" }, + language: { type: "String" }, + name: { type: "String" }, + theme: { type: "String" }, + type: { type: "String" }, + workers: { type: "Number" } + }, + [], + [ + "configure", + "getConfiguration", + "getState", + "hide", + "log", + "reset", + "setState", + "show", + "updateUI", + "verify" + ] +)); +const jsContent$1 = `(function() { + "use strict"; + function bufferStartsWith(buffer, prefix) { + if (prefix.length > buffer.length) { + return false; + } + for (let i = 0; i < prefix.length; i++) { + if (buffer[i] !== prefix[i]) { + return false; + } + } + return true; + } + function bufferToHex(buffer) { + return Array.from(new Uint8Array(buffer)).map((b) => b.toString(16).padStart(2, "0")).join(""); + } + function concatBuffers(a, b) { + const out = new Uint8Array(a.length + b.length); + out.set(a, 0); + out.set(b, a.length); + return out; + } + function hexToBuffer(hex) { + if (hex.length % 2 !== 0) { + throw new Error(\`Hex string must have an even length. Got: \${hex}\`); + } + const buffer = new ArrayBuffer(hex.length / 2); + const view = new DataView(buffer); + for (let i = 0; i < hex.length; i += 2) { + const byteString = hex.substring(i, i + 2); + const byteValue = parseInt(byteString, 16); + view.setUint8(i / 2, byteValue); + } + return new Uint8Array(buffer); + } + async function delay(ms) { + await new Promise((resolve) => setTimeout(resolve, ms)); + } + function timeDuration(start) { + return Math.floor((performance.now() - start) * 10) / 10; + } + class PasswordBuffer { + constructor(nonce, mode = "uint32") { + this.nonce = nonce; + this.mode = mode; + this.buffer = new Uint8Array(this.nonce.length + this.COUNTER_BYTES); + this.buffer.set(this.nonce, 0); + this.dataView = new DataView(this.buffer.buffer); + } + nonce; + mode; + COUNTER_BYTES = 4; + buffer; + dataView; + encoder = new TextEncoder(); + /** + * Appends the counter to the nonce buffer. + * In 'string' mode, encodes the counter as a UTF-8 string. + * In 'uint32' mode, writes the counter as a big-endian 32-bit integer. + */ + setCounter(n) { + if (this.mode === "string") { + return concatBuffers(this.nonce, this.encoder.encode(n.toString())); + } + this.dataView.setUint32(this.nonce.length, n, false); + return this.buffer; + } + } + async function solveChallenge(options) { + const { + challenge, + controller, + counterMode = "uint32", + counterStart = 0, + counterStep = 1, + deriveKey: deriveKey2, + timeout = 9e4 + } = options; + const { nonce, keyPrefix, salt } = challenge.parameters; + const nonceBuf = hexToBuffer(nonce); + const saltBuf = hexToBuffer(salt); + const keyPrefixBuf = keyPrefix.length % 2 === 0 ? hexToBuffer(keyPrefix) : null; + const password = new PasswordBuffer(nonceBuf, counterMode); + const start = performance.now(); + let counter = counterStart; + let iterations = 0; + let derivedKeyHex = ""; + let lastYield = start; + while (true) { + if (controller?.signal.aborted || timeout && iterations % 10 === 0 && performance.now() - start > timeout) { + return null; + } + const { derivedKey } = await deriveKey2( + challenge.parameters, + saltBuf, + password.setCounter(counter) + ); + if (iterations % 10 === 0 && performance.now() - lastYield > 200) { + await delay(0); + lastYield = performance.now(); + } + if (keyPrefixBuf ? bufferStartsWith(derivedKey, keyPrefixBuf) : bufferToHex(derivedKey).startsWith(keyPrefix)) { + derivedKeyHex = bufferToHex(derivedKey); + break; + } + counter = counter + counterStep; + iterations = iterations + 1; + } + return { + counter, + derivedKey: derivedKeyHex, + time: timeDuration(start) + }; + } + function handler(options) { + const { deriveKey: deriveKey2 } = options; + let controller = void 0; + self.onmessage = async (message) => { + const { challenge, counterMode, counterStart, counterStep, timeout, type } = message.data; + if (type === "abort") { + controller?.abort(); + } else if (type === "work") { + controller = new AbortController(); + let solution; + try { + solution = await solveChallenge({ + challenge, + controller, + counterStart, + counterStep, + deriveKey: deriveKey2, + counterMode, + timeout + }); + } catch (err) { + return self.postMessage({ error: err }); + } + self.postMessage(solution); + } + }; + } + function getDigest(algorithm) { + switch (algorithm) { + case "PBKDF2/SHA-512": + return "SHA-512"; + case "PBKDF2/SHA-384": + return "SHA-384"; + case "PBKDF2/SHA-256": + default: + return "SHA-256"; + } + } + async function deriveKey(parameters, salt, password) { + const { algorithm, cost, keyLength = 32 } = parameters; + const passwordKey = await crypto.subtle.importKey( + "raw", + password, + { name: "PBKDF2" }, + false, + ["deriveKey"] + ); + const derivedKey = await crypto.subtle.deriveKey( + { + name: "PBKDF2", + salt, + iterations: cost, + hash: getDigest(algorithm) + }, + passwordKey, + { name: "AES-GCM", length: keyLength * 8 }, + true, + ["encrypt"] + ); + return { + derivedKey: new Uint8Array(await crypto.subtle.exportKey("raw", derivedKey)) + }; + } + handler({ + deriveKey + }); +})(); +`; +const blob$1 = typeof self !== "undefined" && self.Blob && new Blob(["(self.URL || self.webkitURL).revokeObjectURL(self.location.href);", jsContent$1], { type: "text/javascript;charset=utf-8" }); +function WorkerWrapper$1(options) { + let objURL; + try { + objURL = blob$1 && (self.URL || self.webkitURL).createObjectURL(blob$1); + if (!objURL) throw ""; + const worker = new Worker(objURL, { + name: options?.name + }); + worker.addEventListener("error", () => { + (self.URL || self.webkitURL).revokeObjectURL(objURL); + }); + return worker; + } catch (e) { + return new Worker( + "data:text/javascript;charset=utf-8," + encodeURIComponent(jsContent$1), + { + name: options?.name + } + ); + } +} +const jsContent = `(function() { + "use strict"; + function bufferStartsWith(buffer, prefix) { + if (prefix.length > buffer.length) { + return false; + } + for (let i = 0; i < prefix.length; i++) { + if (buffer[i] !== prefix[i]) { + return false; + } + } + return true; + } + function bufferToHex(buffer) { + return Array.from(new Uint8Array(buffer)).map((b) => b.toString(16).padStart(2, "0")).join(""); + } + function concatBuffers(a, b) { + const out = new Uint8Array(a.length + b.length); + out.set(a, 0); + out.set(b, a.length); + return out; + } + function hexToBuffer(hex) { + if (hex.length % 2 !== 0) { + throw new Error(\`Hex string must have an even length. Got: \${hex}\`); + } + const buffer = new ArrayBuffer(hex.length / 2); + const view = new DataView(buffer); + for (let i = 0; i < hex.length; i += 2) { + const byteString = hex.substring(i, i + 2); + const byteValue = parseInt(byteString, 16); + view.setUint8(i / 2, byteValue); + } + return new Uint8Array(buffer); + } + async function delay(ms) { + await new Promise((resolve) => setTimeout(resolve, ms)); + } + function timeDuration(start) { + return Math.floor((performance.now() - start) * 10) / 10; + } + class PasswordBuffer { + constructor(nonce, mode = "uint32") { + this.nonce = nonce; + this.mode = mode; + this.buffer = new Uint8Array(this.nonce.length + this.COUNTER_BYTES); + this.buffer.set(this.nonce, 0); + this.dataView = new DataView(this.buffer.buffer); + } + nonce; + mode; + COUNTER_BYTES = 4; + buffer; + dataView; + encoder = new TextEncoder(); + /** + * Appends the counter to the nonce buffer. + * In 'string' mode, encodes the counter as a UTF-8 string. + * In 'uint32' mode, writes the counter as a big-endian 32-bit integer. + */ + setCounter(n) { + if (this.mode === "string") { + return concatBuffers(this.nonce, this.encoder.encode(n.toString())); + } + this.dataView.setUint32(this.nonce.length, n, false); + return this.buffer; + } + } + async function solveChallenge(options) { + const { + challenge, + controller, + counterMode = "uint32", + counterStart = 0, + counterStep = 1, + deriveKey: deriveKey2, + timeout = 9e4 + } = options; + const { nonce, keyPrefix, salt } = challenge.parameters; + const nonceBuf = hexToBuffer(nonce); + const saltBuf = hexToBuffer(salt); + const keyPrefixBuf = keyPrefix.length % 2 === 0 ? hexToBuffer(keyPrefix) : null; + const password = new PasswordBuffer(nonceBuf, counterMode); + const start = performance.now(); + let counter = counterStart; + let iterations = 0; + let derivedKeyHex = ""; + let lastYield = start; + while (true) { + if (controller?.signal.aborted || timeout && iterations % 10 === 0 && performance.now() - start > timeout) { + return null; + } + const { derivedKey } = await deriveKey2( + challenge.parameters, + saltBuf, + password.setCounter(counter) + ); + if (iterations % 10 === 0 && performance.now() - lastYield > 200) { + await delay(0); + lastYield = performance.now(); + } + if (keyPrefixBuf ? bufferStartsWith(derivedKey, keyPrefixBuf) : bufferToHex(derivedKey).startsWith(keyPrefix)) { + derivedKeyHex = bufferToHex(derivedKey); + break; + } + counter = counter + counterStep; + iterations = iterations + 1; + } + return { + counter, + derivedKey: derivedKeyHex, + time: timeDuration(start) + }; + } + function handler(options) { + const { deriveKey: deriveKey2 } = options; + let controller = void 0; + self.onmessage = async (message) => { + const { challenge, counterMode, counterStart, counterStep, timeout, type } = message.data; + if (type === "abort") { + controller?.abort(); + } else if (type === "work") { + controller = new AbortController(); + let solution; + try { + solution = await solveChallenge({ + challenge, + controller, + counterStart, + counterStep, + deriveKey: deriveKey2, + counterMode, + timeout + }); + } catch (err) { + return self.postMessage({ error: err }); + } + self.postMessage(solution); + } + }; + } + async function deriveKey(parameters, salt, password) { + const { algorithm, keyLength = 32 } = parameters; + const iterations = Math.max(1, parameters.cost); + let data = void 0; + let derivedKey = void 0; + for (let i = 0; i < iterations; i++) { + if (i === 0) { + data = concatBuffers(salt, password); + } else { + data = derivedKey; + } + derivedKey = new Uint8Array( + (await crypto.subtle.digest(algorithm, data)).slice(0, keyLength) + ); + } + return { + parameters: {}, + derivedKey + }; + } + handler({ + deriveKey + }); +})(); +`; +const blob = typeof self !== "undefined" && self.Blob && new Blob(["(self.URL || self.webkitURL).revokeObjectURL(self.location.href);", jsContent], { type: "text/javascript;charset=utf-8" }); +function WorkerWrapper(options) { + let objURL; + try { + objURL = blob && (self.URL || self.webkitURL).createObjectURL(blob); + if (!objURL) throw ""; + const worker = new Worker(objURL, { + name: options?.name + }); + worker.addEventListener("error", () => { + (self.URL || self.webkitURL).revokeObjectURL(objURL); + }); + return worker; + } catch (e) { + return new Worker( + "data:text/javascript;charset=utf-8," + encodeURIComponent(jsContent), + { + name: options?.name + } + ); + } +} +const css = ':root {\n --altcha-border-color: var(--altcha-color-neutral);\n --altcha-border-width: 1px;\n --altcha-border-radius: 6px;\n --altcha-color-base: light-dark(oklch(100% 0.00011 271.152), oklch(20.904% 0.00002 271.152));\n --altcha-color-base-content: light-dark(\n oklch(20.904% 0.00002 271.152),\n oklch(100% 0.00011 271.152)\n );\n --altcha-color-error: oklch(51.284% 0.20527 28.678);\n --altcha-color-error-content: oklch(100% 0.00011 271.152);\n --altcha-color-neutral: light-dark(oklch(83.591% 0.0001 271.152), oklch(46.04% 0.00005 271.152));\n --altcha-color-neutral-content: light-dark(\n oklch(46.76% 0.00005 271.152),\n oklch(100% 0.00011 271.152)\n );\n --altcha-color-primary: oklch(40.279% 0.2449 268.131);\n --altcha-color-primary-content: oklch(100% 0.00011 271.152);\n --altcha-color-success: oklch(55.748% 0.18968 142.511);\n --altcha-color-success-content: oklch(100% 0.00011 271.152);\n --altcha-checkbox-border-color: light-dark(\n oklch(66.494% 0.00233 15.434),\n oklch(51.028% 0.00006 271.152)\n );\n --altcha-checkbox-border-radius: 5px;\n --altcha-checkbox-border-width: var(--altcha-border-width);\n --altcha-checkbox-outline: 2px solid var(--altcha-checkbox-outline-color);\n --altcha-checkbox-outline-color: -webkit-focus-ring-color;\n --altcha-checkbox-outline-offset: 2px;\n --altcha-checkbox-size: 22px;\n --altcha-checkbox-transition-duration: var(--altcha-transition-duration);\n --altcha-input-background-color: var(--altcha-color-base);\n --altcha-input-border-radius: 3px;\n --altcha-input-border-width: 1px;\n --altcha-input-color: var(--altcha-color-base-content);\n --altcha-max-width: 320px;\n --altcha-padding: 0.75rem;\n --altcha-popover-arrow-size: 6px;\n --altcha-popover-color: var(--altcha-border-color);\n --altcha-shadow: drop-shadow(3px 3px 6px oklch(0% 0 0 / 0.2));\n --altcha-spinner-color: var(--altcha-color-base-content);\n --altcha-switch-background-color: var(--altcha-color-neutral);\n --altcha-switch-border-radius: calc(infinity * 1px);\n --altcha-switch-height: var(--altcha-checkbox-size);\n --altcha-switch-padding: 0.25rem;\n --altcha-switch-width: calc(var(--altcha-checkbox-size) * 1.75);\n --altcha-switch-toggle-border-radius: 100%;\n --altcha-switch-toggle-color: var(--altcha-color-neutral-content);\n --altcha-switch-toggle-size: calc(\n var(--altcha-switch-height) - calc(var(--altcha-switch-padding) * 2)\n );\n --altcha-transition-duration: 0.6s;\n --altcha-z-index: 99999999;\n --altcha-z-index-popover: 999999999;\n}\n\n@supports (-moz-appearance: none) {\n :root {\n --altcha-checkbox-outline-color: var(--altcha-color-primary);\n }\n}\n.altcha {\n all: revert-layer;\n display: none;\n font-family: inherit;\n font-size: inherit;\n position: relative;\n}\n.altcha[data-visible] {\n display: block;\n}\n.altcha-popover, .altcha-popover * {\n all: revert-layer;\n box-sizing: border-box;\n font-family: inherit;\n font-size: inherit;\n line-height: 1.25;\n}\n.altcha * {\n all: revert-layer;\n box-sizing: border-box;\n font-family: inherit;\n font-size: inherit;\n line-height: 1.25;\n}\n.altcha a, .altcha-popover a {\n color: currentColor;\n text-decoration: none;\n}\n.altcha a:hover, .altcha-popover a:hover {\n color: currentColor;\n}\n.altcha-main {\n align-items: start;\n background-color: var(--altcha-color-base);\n border: var(--altcha-border-width, 1px) solid var(--altcha-border-color);\n border-radius: var(--altcha-border-radius, 0);\n color: var(--altcha-color-base-content);\n display: flex;\n flex-direction: column;\n gap: 0.5rem;\n justify-content: space-between;\n padding: var(--altcha-padding);\n max-width: var(--altcha-max-width, 100%);\n}\n.altcha-main > * {\n display: flex;\n width: 100%;\n}\n.altcha-main > *:first-child {\n flex-grow: 1;\n}\n.altcha-checkbox-wrap {\n align-items: center;\n display: flex;\n flex-direction: row;\n flex-grow: 1;\n gap: 0.5rem;\n}\n.altcha-checkbox-wrap > * {\n display: flex;\n}\n.altcha-logo {\n opacity: 0.7;\n}\n.altcha-footer {\n align-items: center;\n display: flex;\n flex-grow: 1;\n gap: 0.5rem;\n justify-content: flex-end;\n font-size: 0.7rem;\n opacity: 0.7;\n}\n.altcha-footer p {\n margin: 0;\n padding: 0;\n}\n.altcha-error {\n font-size: 0.85rem;\n}\n.altcha-button {\n align-items: center;\n background: var(--altcha-color-primary);\n border: var(--altcha-input-border-width) solid var(--altcha-color-primary);\n border-radius: var(--altcha-input-border-radius);\n color: var(--altcha-color-primary-content);\n cursor: pointer;\n display: flex;\n font-size: 0.9rem;\n gap: 0.5rem;\n padding: 0.35rem;\n}\n.altcha-button:focus {\n border-color: var(--altcha-color-primary);\n outline: var(--altcha-checkbox-outline);\n outline-offset: var(--altcha-checkbox-outline-offset);\n}\n.altcha-button > .altcha-spinner, .altcha-button > svg {\n height: 20px;\n width: 20px;\n}\n.altcha-button-secondary {\n background: transparent;\n border-color: var(--altcha-color-neutral);\n color: var(--altcha-color-neutral-content);\n}\n.altcha-input {\n background: var(--altcha-input-background-color);\n border: var(--altcha-input-border-width) solid var(--altcha-color-neutral);\n border-radius: var(--altcha-input-border-radius);\n color: var(--altcha-input-color);\n flex-grow: 1;\n font-size: 1rem;\n min-width: 0;\n padding: 0.25rem;\n width: auto;\n}\n.altcha-input:focus {\n border-color: var(--altcha-color-primary);\n outline: var(--altcha-checkbox-outline);\n outline-offset: var(--altcha-checkbox-outline-offset);\n}\n.altcha-spinner {\n animation: altcha-rotate 0.6s linear infinite;\n border-radius: 100%;\n border: var(--altcha-checkbox-border-width) solid var(--altcha-spinner-color);\n border-bottom-color: transparent;\n border-right-color: transparent;\n opacity: 0.7;\n}\n.altcha-popover {\n background-color: var(--altcha-color-base);\n border: var(--altcha-border-width) solid var(--altcha-border-color);\n border-radius: var(--altcha-border-radius);\n color: var(--altcha-color-base-content);\n filter: var(--altcha-shadow);\n position: absolute;\n left: calc(var(--altcha-padding) / 2);\n max-width: calc(var(--altcha-max-width) - var(--altcha-padding));\n top: calc(var(--altcha-padding) + var(--altcha-checkbox-size) + var(--altcha-popover-arrow-size));\n z-index: var(--altcha-z-index-popover);\n}\n.altcha-popover-arrow {\n border: var(--altcha-popover-arrow-size) solid transparent;\n border-bottom-color: var(--altcha-popover-color);\n content: "";\n height: 0;\n left: calc(var(--altcha-checkbox-size) / 2);\n position: absolute;\n top: calc(var(--altcha-popover-arrow-size) * -2);\n width: 0;\n}\n.altcha-popover-content {\n max-height: 100dvh;\n overflow: auto;\n padding: var(--altcha-padding);\n}\n.altcha-popover[data-top=true][data-display=standard] {\n bottom: calc(100% - (var(--altcha-padding) - var(--altcha-popover-arrow-size)));\n top: auto;\n}\n.altcha-popover[data-top=true][data-display=standard] .altcha-popover-arrow {\n border-bottom-color: transparent;\n border-top-color: var(--altcha-popover-color);\n bottom: calc(var(--altcha-popover-arrow-size) * -2);\n top: auto;\n}\n.altcha-popover[data-variant=error] {\n --altcha-popover-color: var(--altcha-color-error);\n background-color: var(--altcha-color-error);\n border-color: var(--altcha-color-error);\n color: var(--altcha-color-error-content);\n}\n.altcha-popover[data-variant=error] .altcha-popover-content {\n padding: calc(var(--altcha-padding) / 1.5) var(--altcha-padding);\n}\n.altcha-popover[data-display=overlay] {\n animation: altcha-overlay-slidein 0.5s forwards;\n left: 50%;\n position: fixed;\n top: 45%;\n transform: translate(-50%, -50%);\n width: var(--altcha-max-width);\n z-index: var(--altcha-z-index);\n}\n.altcha-popover[data-display=bottomsheet] {\n animation: altcha-bottomsheet-slideup 0.5s forwards;\n border-bottom-left-radius: 0;\n border-bottom-right-radius: 0;\n border-bottom: 0;\n bottom: -100%;\n left: 50%;\n position: fixed;\n top: auto;\n transform: translate(-50%, 0);\n width: var(--altcha-max-width);\n z-index: var(--altcha-z-index);\n}\n.altcha-popover[data-display=bottomsheet] .altcha-popover-content {\n padding-bottom: calc(var(--altcha-padding) * 2);\n}\n.altcha-popover-backdrop {\n background: var(--altcha-color-base-content);\n bottom: 0;\n left: 0;\n opacity: 0.1;\n position: fixed;\n right: 0;\n top: 0;\n transition: opacity 0.5s;\n z-index: var(--altcha-z-index);\n}\n.altcha-popover-close {\n color: var(--altcha-color-base-content);\n cursor: pointer;\n display: inline-block;\n font-size: 1rem;\n height: 1.25rem;\n line-height: 0.95;\n position: absolute;\n right: 0;\n text-align: center;\n text-shadow: 0 0 1px var(--altcha-color-base);\n top: -1.5rem;\n width: 1.25rem;\n z-index: var(--altcha-z-index);\n}\n[dir=rtl] .altcha-popover {\n left: auto;\n right: calc(var(--altcha-padding) / 2);\n}\n[dir=rtl] .altcha-popover-arrow {\n left: auto;\n right: calc(var(--altcha-checkbox-size) / 2);\n}\n[dir=rtl] .altcha-popover-close {\n left: 0;\n right: auto;\n}\n.altcha-popover[data-display=bottomsheet] .altcha-footer, .altcha-popover[data-display=overlay] .altcha-footer {\n align-items: center;\n justify-content: center;\n padding-top: 1rem;\n gap: 0.5rem;\n}\n.altcha-popover[data-display=bottomsheet] .altcha-footer svg, .altcha-popover[data-display=overlay] .altcha-footer svg {\n height: 18px;\n width: 18px;\n vertical-align: middle;\n}\n.altcha-code-challenge > form {\n display: flex;\n flex-direction: column;\n gap: 0.5rem;\n}\n.altcha-code-challenge-title {\n font-weight: 600;\n}\n.altcha-code-challenge-text {\n font-size: 0.85rem;\n}\n.altcha-code-challenge-image {\n background: white;\n border: var(--altcha-input-border-width) solid var(--altcha-color-neutral);\n border-radius: var(--altcha-input-border-radius);\n object-fit: contain;\n height: 50px;\n}\n.altcha-code-challenge-row {\n display: flex;\n gap: 0.5rem;\n}\n.altcha-code-challenge-buttons {\n align-items: center;\n display: flex;\n flex-direction: column;\n gap: 0.5rem;\n margin-top: var(--altcha-padding);\n justify-content: space-between;\n}\n.altcha-code-challenge-buttons button {\n justify-content: center;\n width: 100%;\n}\n.altcha-checkbox {\n cursor: pointer;\n height: var(--altcha-checkbox-size);\n position: relative;\n width: var(--altcha-checkbox-size);\n}\n.altcha-checkbox input {\n appearance: none;\n background: var(--altcha-input-background-color);\n border: var(--altcha-checkbox-border-width, 2px) solid var(--altcha-checkbox-border-color);\n border-radius: var(--altcha-checkbox-border-radius);\n cursor: pointer;\n height: var(--altcha-checkbox-size);\n left: 0;\n margin: 0;\n padding: 0;\n position: absolute;\n top: 0;\n width: var(--altcha-checkbox-size);\n}\n@supports (hanging-punctuation: first) and (font: -apple-system-body) and (-webkit-appearance: none) {\n .altcha-checkbox input {\n /* Safari-only: fixes focus outline */\n }\n .altcha-checkbox input:focus {\n outline-width: 2px;\n outline-style: solid;\n }\n}\n.altcha-checkbox input:before {\n border-radius: var(--altcha-checkbox-border-radius);\n content: "";\n width: 100%;\n height: 100%;\n background: var(--altcha-color-neutral);\n display: block;\n transform: scale(0);\n}\n.altcha-checkbox input:checked {\n background-color: var(--altcha-color-success);\n border-color: var(--altcha-color-success);\n}\n.altcha-checkbox input:checked::before {\n background-color: var(--altcha-color-success);\n opacity: 0;\n transform: scale(2.2);\n transition: all var(--altcha-checkbox-transition-duration) ease;\n transition-delay: 0.1s;\n}\n.altcha-checkbox svg {\n --altcha-radio-svg-size: calc(var(--altcha-checkbox-size) * 0.5);\n --altcha-radio-svg-offset: calc(var(--altcha-checkbox-size) * 0.25);\n fill: none;\n left: var(--altcha-radio-svg-offset);\n height: var(--altcha-radio-svg-size);\n opacity: 0;\n position: absolute;\n stroke: currentColor;\n stroke-width: 2;\n stroke-linecap: round;\n stroke-linejoin: round;\n stroke-dasharray: 16px;\n stroke-dashoffset: 16px;\n top: var(--altcha-radio-svg-offset);\n transform: translate3d(0, 0, 0);\n width: var(--altcha-radio-svg-size);\n}\n.altcha-checkbox input:checked + svg {\n color: var(--altcha-color-success-content);\n opacity: 1;\n stroke-dashoffset: 0;\n transition: all var(--altcha-checkbox-transition-duration) ease;\n transition-delay: 0.1s;\n}\n.altcha-checkbox-spinner {\n display: none;\n left: 0;\n height: var(--altcha-checkbox-size);\n position: absolute;\n top: 0;\n width: var(--altcha-checkbox-size);\n}\n.altcha-checkbox[data-loading=true] input {\n appearance: none;\n opacity: 0;\n pointer-events: none;\n}\n.altcha-checkbox[data-loading=true] .altcha-checkbox-spinner {\n display: block;\n}\n.altcha-checkbox-native {\n height: var(--altcha-checkbox-size);\n position: relative;\n width: var(--altcha-checkbox-size);\n}\n.altcha-checkbox-native input {\n height: var(--altcha-checkbox-size);\n margin: 0;\n width: var(--altcha-checkbox-size);\n}\n.altcha-checkbox-native-spinner {\n display: none;\n left: 0;\n height: var(--altcha-checkbox-size);\n position: absolute;\n top: 0;\n width: var(--altcha-checkbox-size);\n}\n.altcha-checkbox-native[data-loading=true] input {\n appearance: none;\n opacity: 0;\n pointer-events: none;\n}\n.altcha-checkbox-native[data-loading=true] .altcha-checkbox-native-spinner {\n display: block;\n}\n.altcha-switch {\n align-items: center;\n border-radius: var(--altcha-switch-border-radius);\n background-color: var(--altcha-switch-background-color);\n display: flex;\n height: var(--altcha-switch-height);\n padding: var(--altcha-switch-padding);\n position: relative;\n width: var(--altcha-switch-width);\n}\n.altcha-switch:focus-within {\n outline: var(--altcha-checkbox-outline);\n outline-offset: var(--altcha-checkbox-outline-offset);\n}\n.altcha-switch input {\n appearance: none;\n cursor: pointer;\n height: 100%;\n left: 0;\n opacity: 0;\n position: absolute;\n top: 0;\n width: 100%;\n}\n.altcha-switch-toggle {\n align-items: center;\n background-color: var(--altcha-switch-toggle-color);\n border-radius: var(--altcha-switch-toggle-border-radius);\n cursor: pointer;\n display: flex;\n height: var(--altcha-switch-toggle-size);\n justify-content: center;\n left: var(--altcha-switch-padding);\n position: absolute;\n transition: width 150ms ease-out, left 150ms ease-out;\n width: var(--altcha-switch-toggle-size);\n}\n.altcha-switch-spinner {\n display: none;\n height: var(--altcha-switch-toggle-size);\n width: var(--altcha-switch-toggle-size);\n}\n.altcha-switch[data-loading=true] {\n pointer-events: none;\n}\n.altcha-switch[data-loading=true] .altcha-switch-spinner {\n display: block;\n}\n.altcha-switch[data-loading=true] .altcha-switch-toggle {\n background-color: transparent;\n left: calc(50% - var(--altcha-switch-toggle-size) / 2);\n}\n[data-state=verified] .altcha-switch {\n --altcha-switch-background-color: var(--altcha-color-success);\n}\n[data-state=verified] .altcha-switch-toggle {\n background-color: var(--altcha-color-success-content);\n left: calc(100% - var(--altcha-switch-height) + var(--altcha-switch-padding));\n}\n[dir=rtl] .altcha-switch-toggle {\n left: calc(100% - var(--altcha-switch-height) + var(--altcha-switch-padding));\n}\n[dir=rtl][data-state=verified] .altcha-switch-toggle {\n left: var(--altcha-switch-padding);\n}\n.altcha-floating-arrow {\n border: 6px solid transparent;\n border-bottom-color: var(--altcha-border-color);\n content: "";\n height: 0;\n left: 12px;\n position: absolute;\n top: -12px;\n width: 0;\n}\n.altcha-overlay-backdrop {\n bottom: 0;\n left: 0;\n position: fixed;\n right: 0;\n top: 0;\n transition: opacity var(--altcha-transition-duration);\n z-index: var(--altcha-z-index);\n}\n.altcha-overlay-close {\n display: inline-block;\n color: currentColor;\n cursor: pointer;\n font-size: 1rem;\n height: 1rem;\n line-height: 0.85;\n position: absolute;\n right: 0;\n text-align: center;\n text-shadow: 0 0 1px var(--altcha-color-base);\n top: -1.5rem;\n width: 1rem;\n z-index: var(--altcha-z-index);\n}\n.altcha[data-display=overlay] {\n animation: altcha-overlay-slidein var(--altcha-transition-duration) forwards;\n filter: var(--altcha-shadow);\n left: 50%;\n opacity: 0;\n position: fixed;\n top: 45%;\n transform: translate(-50%, -50%);\n z-index: var(--altcha-z-index);\n}\n.altcha[data-display=overlay] .altcha-main {\n width: var(--altcha-max-width);\n}\n.altcha[data-display=floating] {\n display: none;\n filter: var(--altcha-shadow);\n left: var(--altcha-floating-left, -100%);\n position: fixed;\n top: var(--altcha-floating-top, -100%);\n z-index: var(--altcha-z-index);\n}\n.altcha[data-display=floating] .altcha-main {\n width: var(--altcha-max-width);\n}\n.altcha[data-display=floating][data-floating-position=top] .altcha-floating-arrow {\n border-bottom-color: transparent;\n border-top-color: var(--altcha-border-color);\n bottom: -12px;\n top: auto;\n}\n.altcha[data-display=floating][data-visible] {\n display: flex;\n}\n.altcha[data-display=bar] {\n bottom: -100%;\n filter: var(--altcha-shadow);\n left: 0;\n position: fixed;\n right: 0;\n transition: bottom var(--altcha-transition-duration), top var(--altcha-transition-duration);\n z-index: var(--altcha-z-index);\n}\n.altcha[data-display=bar] .altcha-main {\n align-items: center;\n border-radius: 0;\n border-width: var(--altcha-border-width) 0 0 0;\n flex-direction: row;\n max-width: 100% !important;\n}\n.altcha[data-display=bar] .altcha-main > * {\n width: auto;\n}\n.altcha[data-display=bar][data-placement=top] {\n bottom: auto;\n top: -100%;\n}\n.altcha[data-display=bar][data-placement=top] .altcha-main {\n border-width: 0 0 var(--altcha-border-width) 0;\n}\n.altcha[data-display=bar][data-placement=bottom]:not([data-state=unverified]) {\n bottom: 0;\n}\n.altcha[data-display=bar][data-placement=top]:not([data-state=unverified]) {\n top: 0;\n}\n.altcha[data-display=invisible] {\n display: none;\n}\n\n@keyframes altcha-rotate {\n 0% {\n transform: rotate(0deg);\n }\n 100% {\n transform: rotate(360deg);\n }\n}\n@keyframes altcha-bottomsheet-slideup {\n 100% {\n bottom: 0;\n }\n}\n@keyframes altcha-overlay-slidein {\n 100% {\n opacity: 1;\n top: 50%;\n }\n}'; +injectCss(css); +$altcha.algorithms.set("SHA-256", () => new WorkerWrapper()); +$altcha.algorithms.set("SHA-384", () => new WorkerWrapper()); +$altcha.algorithms.set("SHA-512", () => new WorkerWrapper()); +$altcha.algorithms.set("PBKDF2/SHA-256", () => new WorkerWrapper$1()); +$altcha.algorithms.set("PBKDF2/SHA-384", () => new WorkerWrapper$1()); +$altcha.algorithms.set("PBKDF2/SHA-512", () => new WorkerWrapper$1()); +const i18n$Y = { + ariaLinkLabel: "Altcha (الموقع الرسمي)", + enterCode: "أدخل الرمز", + enterCodeAria: "أدخل الرمز الذي تسمعه. اضغط على المسافة لتشغيل الصوت.", + error: "فشل التحقق. حاول مرة أخرى لاحقاً.", + expired: "انتهت صلاحية التحقق. حاول مرة أخرى.", + footer: 'محمي بواسطة ALTCHA', + getAudioChallenge: "احصل على تحدي صوتي", + label: "أنا لست روبوتاً", + loading: "جارٍ التحميل...", + reload: "إعادة تحميل", + verify: "تحقق", + verificationRequired: "مطلوب التحقق!", + verified: "تم التحقق", + verifying: "جارٍ التحقق...", + waitAlert: "جارٍ التحقق... يرجى الانتظار.", + cancel: "إلغاء", + enterCodeFromImage: "للمتابعة، يرجى إدخال الرمز من الصورة أدناه." +}; +globalThis.$altcha.i18n.set("ar", i18n$Y); +const i18n$X = { + ariaLinkLabel: "Altcha (официален уебсайт)", + enterCode: "Въведете код", + enterCodeAria: "Въведете кода, който чувате. Натиснете Space за възпроизвеждане на аудио.", + error: "Проверката неуспешна. Моля, опитайте по-късно.", + expired: "Времето за проверка изтече. Моля, опитайте отново.", + footer: 'Защитено от ALTCHA', + getAudioChallenge: "Аудио проверка", + label: "Аз не съм робот", + loading: "Зареждане...", + reload: "Презареди", + verify: "Провери", + verificationRequired: "Изисква се проверка!", + verified: "Проверено", + verifying: "Проверява се...", + waitAlert: "Проверката е в процес... моля изчакайте.", + cancel: "Отказ", + enterCodeFromImage: "За да продължите, моля, въведете кода от изображението по-долу." +}; +globalThis.$altcha.i18n.set("bg", i18n$X); +const i18n$W = { + ariaLinkLabel: "Altcha (афіцыйны сайт)", + enterCode: "Увядзіце код", + enterCodeAria: "Увядзіце код, які вы чуеце. Націсніце прабел, каб прайграць аўдыё.", + error: "Праверка не прайшла. Паспрабуйце пазней.", + expired: "Тэрмін праверкі скончыўся. Паспрабуйце зноў.", + footer: 'Абаронена ALTCHA', + getAudioChallenge: "Атрымаць аўдыё выклік", + label: "Я не робат", + loading: "Загрузка...", + reload: "Перазагрузіць", + verify: "Праверыць", + verificationRequired: "Патрабуецца праверка!", + verified: "Праверана", + verifying: "Правяраем...", + waitAlert: "Праверка... калі ласка, пачакайце.", + cancel: "Скасаваць", + enterCodeFromImage: "Каб працягнуць, увядзіце код з малюнка ніжэй." +}; +globalThis.$altcha.i18n.set("be", i18n$W); +const i18n$V = { + ariaLinkLabel: "Altcha (službena web stranica)", + enterCode: "Unesite kod", + enterCodeAria: "Unesite kod koji čujete. Pritisnite Space da biste pustili zvuk.", + error: "Verifikacija nije uspjela. Pokušajte ponovo kasnije.", + expired: "Verifikacija je istekla. Pokušajte ponovo.", + footer: 'Zaštićeno od strane ALTCHA', + getAudioChallenge: "Dohvatite audio izazov", + label: "Nisam robot", + loading: "Učitavanje...", + reload: "Ponovno učitaj", + verify: "Verifikuj", + verificationRequired: "Verifikacija je obavezna!", + verified: "Verifikovano", + verifying: "Verifikacija u toku...", + waitAlert: "Verifikacija u toku... molimo vas da sačekate.", + cancel: "Odustani", + enterCodeFromImage: "Za nastavak, molimo unesite kod sa slike ispod." +}; +globalThis.$altcha.i18n.set("bs", i18n$V); +const i18n$U = { + ariaLinkLabel: "Altcha (lloc web oficial)", + enterCode: "Introdueix el codi", + enterCodeAria: "Introdueix el codi que escoltes. Prem Espai per reproduir l’àudio.", + error: "Verificació fallida. Torna-ho a provar més tard.", + expired: "Verificació expirada. Torna-ho a provar.", + footer: 'Protegit per ALTCHA', + getAudioChallenge: "Obtenir un desafiament d’àudio", + label: "No sóc un robot", + loading: "Carregant...", + reload: "Torna a carregar", + verify: "Verificar", + verificationRequired: "Es requereix verificació!", + verified: "Verificat", + verifying: "Verificant...", + waitAlert: "Verificant... si us plau, espera.", + cancel: "Cancel·la", + enterCodeFromImage: "Per continuar, si us plau, introdueix el codi de la imatge següent." +}; +globalThis.$altcha.i18n.set("ca", i18n$U); +const i18n$T = { + ariaLinkLabel: "Altcha (oficiální web)", + enterCode: "Zadejte kód", + enterCodeAria: "Zadejte kód, který slyšíte. Stisknutím mezerníku přehrajete zvuk.", + error: "Ověření selhalo. Zkuste to prosím později.", + expired: "Ověření vypršelo. Zkuste to prosím znovu.", + footer: 'Chráněno pomocí ALTCHA', + getAudioChallenge: "Získat audio výzvu", + label: "Nejsem robot", + loading: "Načítání...", + reload: "Znovu načíst", + verify: "Ověřit", + verificationRequired: "Vyžaduje se ověření!", + verified: "Ověřeno", + verifying: "Ověřování...", + waitAlert: "Probíhá ověření... prosím počkejte.", + cancel: "Zrušit", + enterCodeFromImage: "Pro pokračování zadejte kód z obrázku níže." +}; +globalThis.$altcha.i18n.set("cs", i18n$T); +const i18n$S = { + ariaLinkLabel: "Altcha (officiel hjemmeside)", + enterCode: "Indtast kode", + enterCodeAria: "Indtast den kode, du hører. Tryk på mellemrumstasten for at afspille lyd.", + error: "Verificering mislykkedes. Prøv venligst igen senere.", + expired: "Verificering udløbet. Prøv venligst igen.", + footer: 'Beskyttet af ALTCHA', + getAudioChallenge: "Hent lydudfordring", + label: "Jeg er ikke en robot", + loading: "Indlæser...", + reload: "Genindlæs", + verify: "Verificer", + verificationRequired: "Verificering kræves!", + verified: "Verificeret", + verifying: "Verificerer...", + waitAlert: "Verificerer... vent venligst.", + cancel: "Annuller", + enterCodeFromImage: "For at fortsætte, bedes du indtaste koden fra billedet herunder." +}; +globalThis.$altcha.i18n.set("da", i18n$S); +const i18n$R = { + ariaLinkLabel: "Altcha (offizielle Website)", + enterCode: "Code eingeben", + enterCodeAria: "Geben Sie den Code ein, den Sie hören. Drücken Sie die Leertaste, um die Audio abzuspielen.", + error: "Überprüfung fehlgeschlagen. Bitte versuchen Sie es später erneut.", + expired: "Überprüfung abgelaufen. Bitte versuchen Sie es erneut.", + footer: 'Geschützt durch ALTCHA', + getAudioChallenge: "Audio-Herausforderung anfordern", + label: "Ich bin kein Roboter", + loading: "Lade...", + reload: "Neu laden", + verify: "Überprüfen", + verificationRequired: "Überprüfung erforderlich!", + verified: "Überprüft", + verifying: "Wird überprüft...", + waitAlert: "Überprüfung läuft... bitte warten.", + cancel: "Abbrechen", + enterCodeFromImage: "Um fortzufahren, geben Sie bitte den Code aus dem Bild unten ein." +}; +globalThis.$altcha.i18n.set("de", i18n$R); +const i18n$Q = { + ariaLinkLabel: "Altcha (επίσημος ιστότοπος)", + enterCode: "Εισαγάγετε κωδικό", + enterCodeAria: "Εισαγάγετε τον κωδικό που ακούτε. Πατήστε Space για να παίξετε τον ήχο.", + error: "Η επαλήθευση απέτυχε. Δοκιμάστε ξανά αργότερα.", + expired: "Η επαλήθευση έληξε. Δοκιμάστε ξανά.", + footer: 'Προστατεύεται από το ALTCHA', + getAudioChallenge: "Λήψη ηχητικής δοκιμασίας", + label: "Δεν είμαι ρομπότ", + loading: "Φόρτωση...", + reload: "Επαναφόρτωση", + verify: "Επαλήθευση", + verificationRequired: "Απαιτείται έλεγχος!", + verified: "Επαληθεύτηκε", + verifying: "Γίνεται επαλήθευση...", + waitAlert: "Γίνεται επαλήθευση... παρακαλώ περιμένετε.", + cancel: "Ακύρωση", + enterCodeFromImage: "Για να συνεχίσετε, εισάγετε τον κωδικό από την παρακάτω εικόνα." +}; +globalThis.$altcha.i18n.set("el", i18n$Q); +const i18n$P = { + ariaLinkLabel: "Altcha (sitio web oficial)", + enterCode: "Introduce el código", + enterCodeAria: "Introduce el código que escuchas. Pulsa Espacio para reproducir el audio.", + error: "Falló la verificación. Por favor intente nuevamente más tarde.", + expired: "Verificación expirada. Por favor intente nuevamente.", + footer: 'Protegido por ALTCHA', + getAudioChallenge: "Obtener un desafío de audio", + label: "No soy un robot", + loading: "Cargando...", + reload: "Recargar", + verify: "Verificar", + verificationRequired: "¡Verificación requerida!", + verified: "Verificado", + verifying: "Verificando...", + waitAlert: "Verificando... por favor espere.", + cancel: "Cancelar", + enterCodeFromImage: "Para continuar, introduzca el código de la imagen de abajo." +}; +globalThis.$altcha.i18n.set("es-es", i18n$P); +const i18n$O = { + ariaLinkLabel: "Altcha (sitio web oficial)", + enterCode: "Ingresa el código", + enterCodeAria: "Ingresa el código que escuchas. Presiona Espacio para reproducir el audio.", + error: "Falló la verificación. Por favor vuelve a intentarlo más tarde.", + expired: "La verificación expiró. Por favor inténtalo de nuevo.", + footer: 'Protegido por ALTCHA', + getAudioChallenge: "Obtener un reto de audio", + label: "No soy un robot", + loading: "Cargando...", + reload: "Volver a cargar", + verify: "Verificar", + verificationRequired: "¡Verificación requerida!", + verified: "Verificado", + verifying: "Verificando...", + waitAlert: "Verificando... por favor espera.", + cancel: "Cancelar", + enterCodeFromImage: "Para continuar, ingresa el código de la imagen a continuación." +}; +globalThis.$altcha.i18n.set("es-419", i18n$O); +const i18n$N = { + ariaLinkLabel: "Altcha (ametlik veebisait)", + enterCode: "Sisesta kood", + enterCodeAria: "Sisestage kuuldu kood. Vajutage tühikut, et esitada heli.", + error: "Kinnitamine ebaõnnestus. Proovi hiljem uuesti.", + expired: "Kinnitamine aegus. Proovi uuesti.", + footer: 'Kaitstud ALTCHA poolt', + getAudioChallenge: "Hangi heliülesanne", + label: "Ma ei ole robot", + loading: "Laadimine...", + reload: "Laadi uuesti", + verify: "Kinnita", + verificationRequired: "Kontroll on vajalik!", + verified: "Kinnitatud", + verifying: "Kinnitamine...", + waitAlert: "Kinnitamine... palun oota.", + cancel: "Tühista", + enterCodeFromImage: "Jätkamiseks sisestage alloleval pildil olev kood." +}; +globalThis.$altcha.i18n.set("et", i18n$N); +const i18n$M = { + ariaLinkLabel: "Altcha (webgune ofiziala)", + enterCode: "Sartu kodea", + enterCodeAria: "Sartu entzun duzun kodea. Sakatu Espazioa audioa erreproduzitzeko.", + error: "Egiaztatzeak huts egin du. Saiatu berriro geroago.", + expired: "Egiaztatzea iraungi da. Saiatu berriro.", + footer: 'ALTCHAk babestuta', + getAudioChallenge: "Jaso audio-erronka bat", + label: "Ez naiz robot bat", + loading: "Kargatzen...", + reload: "Birkargatu", + verify: "Egiaztatu", + verificationRequired: "Egiaztatzea beharrezkoa da!", + verified: "Egiaztatuta", + verifying: "Egiaztatzen...", + waitAlert: "Egiaztatzen... itxaron mesedez.", + cancel: "Utzi", + enterCodeFromImage: "Jarraitzeko, idatzi beheko irudiko kodea." +}; +globalThis.$altcha.i18n.set("eu", i18n$M); +const i18n$L = { + ariaLinkLabel: "Altcha (وب‌سایت رسمی)", + enterCode: "کد را وارد کنید", + enterCodeAria: "کدی که می‌شنوید را وارد کنید. برای پخش صدا Space را فشار دهید.", + error: "احراز هویت ناموفق بود. بعداً دوباره تلاش کنید.", + expired: "احراز هویت منقضی شد. دوباره تلاش کنید.", + footer: 'محافظت شده توسط ALTCHA', + getAudioChallenge: "دریافت چالش صوتی", + label: "من ربات نیستم", + loading: "در حال بارگذاری...", + reload: "بارگذاری مجدد", + verify: "تایید", + verificationRequired: "احراز هویت لازم است!", + verified: "تایید شد", + verifying: "در حال تایید...", + waitAlert: "در حال تایید... لطفا منتظر بمانید.", + cancel: "لغو کردن", + enterCodeFromImage: "برای ادامه، لطفاً کد تصویر زیر را وارد کنید." +}; +globalThis.$altcha.i18n.set("fa", i18n$L); +const i18n$K = { + ariaLinkLabel: "Altcha (offiziell Websäit)", + enterCode: "Code aginn", + enterCodeAria: "Gitt de Code an deen dir héiert. Dréckt op d'Weltraumtast fir Audio ofzespillen.", + error: "Verifikatioun ass feelgeschloen. Probéiert méi spéit nach emol.", + expired: "Verifikatioun ofgelaf. Probéiert nach emol.", + footer: 'Geschützt vun ALTCHA', + getAudioChallenge: "Kritt eng Audio-Herausfuerderung", + label: "Ech sinn keen Robot", + loading: "Lueden...", + reload: "Nei lueden", + verify: "Verifizéieren", + verificationRequired: "Verifikatioun néideg!", + verified: "Verifizéiert", + verifying: "Verifizéieren...", + waitAlert: "Verifizéieren... waart wgl.", + cancel: "Ofbriechen", + enterCodeFromImage: "Fir virun ze fueren, gitt wgl. de Code aus dem Bild hei drënner an." +}; +globalThis.$altcha.i18n.set("lb", i18n$K); +const i18n$J = { + ariaLinkLabel: "Altcha (virallinen verkkosivusto)", + enterCode: "Syötä koodi", + enterCodeAria: "Kirjoita kuulemasi koodi. Paina välilyöntiä toistaaksesi äänen.", + error: "Varmennus epäonnistui. Yritä myöhemmin uudelleen.", + expired: "Varmennus vanhentui. Yritä uudelleen.", + footer: 'Suojattu ALTCHA:lla', + getAudioChallenge: "Hae äänitehtävä", + label: "En ole robotti", + loading: "Ladataan...", + reload: "Lataa uudelleen", + verify: "Vahvista", + verificationRequired: "Vahvistus vaaditaan!", + verified: "Vahvistettu", + verifying: "Vahvistetaan...", + waitAlert: "Vahvistetaan... odota hetki.", + cancel: "Peruuta", + enterCodeFromImage: "Jatkaaksesi, syötä alla olevan kuvan koodi." +}; +globalThis.$altcha.i18n.set("fi", i18n$J); +const i18n$I = { + ariaLinkLabel: "Altcha (site officiel)", + enterCode: "Entrez le code", + enterCodeAria: "Entrez le code que vous entendez. Appuyez sur la barre d'espace pour écouter l'audio.", + error: "Échec de la vérification. Réessayez plus tard.", + expired: "La vérification a expiré. Réessayez.", + footer: 'Protégé par ALTCHA', + getAudioChallenge: "Obtenir un défi audio", + label: "Je ne suis pas un robot", + loading: "Chargement...", + reload: "Recharger", + verify: "Vérifier", + verificationRequired: "Vérification requise !", + verified: "Vérifié", + verifying: "Vérification en cours...", + waitAlert: "Vérification en cours... veuillez patienter.", + cancel: "Annuler", + enterCodeFromImage: "Pour continuer, veuillez entrer le code de l'image ci-dessous." +}; +globalThis.$altcha.i18n.set("fr-ca", i18n$I); +const i18n$H = { + ariaLinkLabel: "Altcha (site officiel)", + enterCode: "Entrez le code", + enterCodeAria: "Entrez le code que vous entendez. Appuyez sur Espace pour écouter l'audio.", + error: "Échec de la vérification. Essayez à nouveau plus tard.", + expired: "La vérification a expiré. Essayez à nouveau.", + footer: 'Protégé par ALTCHA', + getAudioChallenge: "Obtenir un défi audio", + label: "Je ne suis pas un robot", + loading: "Chargement...", + reload: "Recharger", + verify: "Vérifier", + verificationRequired: "Vérification requise !", + verified: "Vérifié", + verifying: "Vérification en cours...", + waitAlert: "Vérification en cours... veuillez patienter.", + cancel: "Annuler", + enterCodeFromImage: "Pour continuer, veuillez entrer le code de l'image ci-dessous." +}; +globalThis.$altcha.i18n.set("fr-fr", i18n$H); +const i18n$G = { + ariaLinkLabel: "Altcha (láithreán gréasáin oifigiúil)", + enterCode: "Iontráil cód", + enterCodeAria: "Cuir isteach an cód a chloiseann tú. Brúigh Spás chun an fuaime a sheinm.", + error: "Theip ar an bhfíorú. Bain triail eile as níos déanaí.", + expired: "Tá an fíorú as feidhm. Bain triail eile as.", + footer: 'Cosanta ag ALTCHA', + getAudioChallenge: "Faigh dúshlán fuaime", + label: "Níl mé i mo róbat", + loading: "Á luchtú...", + reload: "Athluchtaigh", + verify: "Fíoraigh", + verificationRequired: "Fíorú riachtanach!", + verified: "Fíoraithe", + verifying: "Fíorú ar siúl...", + waitAlert: "Fíorú ar siúl... fan go fóill.", + cancel: "Cealaigh", + enterCodeFromImage: "Chun dul ar aghaidh, le do thoil cuir isteach an cód ón íomhá thíos." +}; +globalThis.$altcha.i18n.set("ga", i18n$G); +const i18n$F = { + ariaLinkLabel: "Altcha (službena web stranica)", + enterCode: "Unesite kod", + enterCodeAria: "Unesite kod koji čujete. Pritisnite razmaknicu za reprodukciju zvuka.", + error: "Provjera nije uspjela. Molimo pokušajte kasnije.", + expired: "Provjera je istekla. Molimo pokušajte ponovo.", + footer: 'Zaštićeno od strane ALTCHA', + getAudioChallenge: "Audio provjera", + label: "Ja nisam robot", + loading: "Učitavanje...", + reload: "Ponovno učitaj", + verify: "Provjeri", + verificationRequired: "Potrebna je provjera!", + verified: "Provjereno", + verifying: "Provjeravanje...", + waitAlert: "Provjera je u tijeku... molimo pričekajte.", + cancel: "Odustani", + enterCodeFromImage: "Za nastavak molimo unesite kod sa slike ispod." +}; +globalThis.$altcha.i18n.set("hr", i18n$F); +const i18n$E = { + ariaLinkLabel: "Altcha (hivatalos weboldal)", + enterCode: "Írja be a kódot", + enterCodeAria: "Írja be a hallott kódot. Nyomja meg a Szóköz billentyűt a hang lejátszásához.", + error: "A hitelesítés nem sikerült. Próbáld meg később újra.", + expired: "A hitelesítés lejárt. Próbáld újra.", + footer: 'Védve a következő által: ALTCHA', + getAudioChallenge: "Hangalapú kihívás kérése", + label: "Nem vagyok robot", + loading: "Betöltés...", + reload: "Újratöltés", + verify: "Ellenőrzés", + verificationRequired: "Ellenőrzés szükséges!", + verified: "Ellenőrizve", + verifying: "Ellenőrzés folyamatban...", + waitAlert: "Ellenőrzés folyamatban... kérlek várj.", + cancel: "Mégse", + enterCodeFromImage: "A folytatáshoz, kérjük, adja meg az alábbi kép kódját." +}; +globalThis.$altcha.i18n.set("hu", i18n$E); +const i18n$D = { + ariaLinkLabel: "Altcha (opinber vefsíða)", + enterCode: "Sláðu inn kóða", + enterCodeAria: "Sláðu inn kóðann sem þú heyrir. Ýttu á Space til að spila hljóðið.", + error: "Staðfesting mistókst. Reyndu aftur síðar.", + expired: "Staðfesting er útrunnin. Reyndu aftur.", + footer: 'Verndað af ALTCHA', + getAudioChallenge: "Fá hljóðáskorun", + label: "Ég er ekki robot", + loading: "Hleður...", + reload: "Hleð aftur", + verify: "Staðfesta", + verificationRequired: "Staðfesting er nauðsynleg!", + verified: "Staðfest", + verifying: "Að staðfesta...", + waitAlert: "Að staðfesta... vinsamlegast bíða.", + cancel: "Hætta við", + enterCodeFromImage: "Til að halda áfram, vinsamlegast sláðu inn kóðann af myndinni hér að neðan." +}; +globalThis.$altcha.i18n.set("is", i18n$D); +const i18n$C = { + ariaLinkLabel: "Altcha (sito ufficiale)", + enterCode: "Inserisci il codice", + enterCodeAria: "Inserisci il codice che senti. Premi Spazio per riprodurre l'audio.", + error: "Verifica fallita. Riprova più tardi.", + expired: "Verifica scaduta. Riprova.", + footer: 'Protetto da ALTCHA', + getAudioChallenge: "Ottieni una sfida audio", + label: "Non sono un robot", + loading: "Caricamento...", + reload: "Ricarica", + verify: "Verifica", + verificationRequired: "Verifica richiesta!", + verified: "Verificato", + verifying: "Verifica in corso...", + waitAlert: "Verifica in corso... attendere.", + cancel: "Annulla", + enterCodeFromImage: "Per procedere, inserisci il codice dall'immagine sottostante." +}; +globalThis.$altcha.i18n.set("it", i18n$C); +const i18n$B = { + ariaLinkLabel: "Altcha (oficiali svetainė)", + enterCode: "Įveskite kodą", + enterCodeAria: "Įveskite girdimą kodą. Paspauskite tarpo klavišą, kad grotumėte garso įrašą.", + error: "Patvirtinimas nepavyko. Bandykite vėliau.", + expired: "Patvirtinimo laikas baigėsi. Bandykite dar kartą.", + footer: 'Apsaugota ALTCHA', + getAudioChallenge: "Gauti garso užduotį", + label: "Aš nesu robotas", + loading: "Įkeliama...", + reload: "Įkelti iš naujo", + verify: "Patvirtinti", + verificationRequired: "Reikalingas patvirtinimas!", + verified: "Patvirtinta", + verifying: "Tikrinama...", + waitAlert: "Tikrinama... prašome palaukti.", + cancel: "Atšaukti", + enterCodeFromImage: "Norėdami tęsti, įveskite kodą iš paveikslėlio žemiau." +}; +globalThis.$altcha.i18n.set("lt", i18n$B); +const i18n$A = { + ariaLinkLabel: "Altcha (oficiālā tīmekļa vietne)", + enterCode: "Ievadiet kodu", + enterCodeAria: "Ievadiet dzirdamo kodu. Nospiediet atstarpes taustiņu, lai atskaņotu audio.", + error: "Verifikācija neizdevās. Mēģiniet vēlāk vēlreiz.", + expired: "Verifikācijas laiks ir beidzies. Mēģiniet vēlreiz.", + footer: 'Aizsargāts ar ALTCHA', + getAudioChallenge: "Saņemt audio izaicinājumu", + label: "Es neesmu robots", + loading: "Notiek ielāde...", + reload: "Pārlādēt", + verify: "Verificēt", + verificationRequired: "Nepieciešama verifikācija!", + verified: "Verificēts", + verifying: "Notiek verifikācija...", + waitAlert: "Notiek verifikācija... lūdzu, uzgaidiet.", + cancel: "Atcelt", + enterCodeFromImage: "Lai turpinātu, lūdzu, ievadiet zemāk redzamo attēlu kodu." +}; +globalThis.$altcha.i18n.set("lv", i18n$A); +const i18n$z = { + ariaLinkLabel: "Altcha (sit uffiċjali)", + enterCode: "Idħol il-kodiċi", + enterCodeAria: "Idħol il-kodiċi li tisma'. Agħfas Spazju biex tindaqq l-awdjo.", + error: "Il-verifika falliet. Erġa’ pprova aktar tard.", + expired: "Il-verifika skadiet. Erġa’ pprova.", + footer: 'Protett minn ALTCHA', + getAudioChallenge: "Ikseb sfida bl-awdjo", + label: "M’inix robot", + loading: "Qed jitgħabba...", + reload: "Ittella’ mill-ġdid", + verify: "Ivverifika", + verificationRequired: "Verifika meħtieġa!", + verified: "Ivverifikat", + verifying: "Verifika għaddejja...", + waitAlert: "Verifika għaddejja... stenna ftit.", + cancel: "Ikkanċella", + enterCodeFromImage: "Biex tipproċedi, jekk jogħġbok daħħal il-kodiċi mill-immaġni hawn taħt." +}; +globalThis.$altcha.i18n.set("mt", i18n$z); +const i18n$y = { + ariaLinkLabel: "Altcha (offisiell nettside)", + enterCode: "Skriv inn kode", + enterCodeAria: "Skriv inn koden du hører. Trykk på Space for å spille av lyden.", + error: "Verifisering mislyktes. Prøv igjen senere.", + expired: "Verifiseringen utløp. Prøv igjen.", + footer: 'Beskyttet av ALTCHA', + getAudioChallenge: "Få en lydutfordring", + label: "Jeg er ikke en robot", + loading: "Laster...", + reload: "Last på nytt", + verify: "Verifiser", + verificationRequired: "Verifisering kreves!", + verified: "Verifisert", + verifying: "Verifiserer...", + waitAlert: "Verifiserer... vennligst vent.", + cancel: "Avbryt", + enterCodeFromImage: "For å fortsette, vennligst skriv inn koden fra bildet nedenfor." +}; +globalThis.$altcha.i18n.set("nb", i18n$y); +const i18n$x = { + ariaLinkLabel: "Altcha (officiële website)", + enterCode: "Voer code in", + enterCodeAria: "Voer de code in die je hoort. Druk op Spatie om de audio af te spelen.", + error: "Verificatie mislukt. Probeer het later opnieuw.", + expired: "Verificatie verlopen. Probeer het opnieuw.", + footer: 'Beschermd door ALTCHA', + getAudioChallenge: "Audio-uitdaging ontvangen", + label: "Ik ben geen robot", + loading: "Laden...", + reload: "Herladen", + verify: "Verifiëren", + verificationRequired: "Verificatie vereist!", + verified: "Geverifieerd", + verifying: "Bezig met verifiëren...", + waitAlert: "Bezig met verifiëren... even geduld a.u.b.", + cancel: "Annuleren", + enterCodeFromImage: "Om door te gaan, voert u de code uit de onderstaande afbeelding in." +}; +globalThis.$altcha.i18n.set("nl", i18n$x); +const i18n$w = { + ariaLinkLabel: "Altcha (oficjalna strona internetowa)", + enterCode: "Wprowadź kod", + enterCodeAria: "Wpisz kod, który słyszysz. Naciśnij Spację, aby odtworzyć dźwięk.", + error: "Weryfikacja nie powiodła się. Spróbuj ponownie później.", + expired: "Weryfikacja wygasła. Spróbuj ponownie.", + footer: 'Chronione przez ALTCHA', + getAudioChallenge: "Pobierz zadanie dźwiękowe", + label: "Nie jestem robotem", + loading: "Ładowanie...", + reload: "Odśwież", + verify: "Zweryfikuj", + verificationRequired: "Wymagana weryfikacja!", + verified: "Zweryfikowano", + verifying: "Weryfikacja...", + waitAlert: "Trwa weryfikacja... proszę czekać.", + cancel: "Anuluj", + enterCodeFromImage: "Aby kontynuować, wprowadź kod z poniższego obrazka." +}; +globalThis.$altcha.i18n.set("pl", i18n$w); +const i18n$v = { + ariaLinkLabel: "Altcha (site oficial)", + enterCode: "Introduza o código", + enterCodeAria: "Introduza o código que ouve. Prima Espaço para reproduzir o áudio.", + error: "A verificação falhou. Por favor, tente novamente mais tarde.", + expired: "Verificação expirada. Por favor, tente novamente.", + footer: 'Protegido por ALTCHA', + getAudioChallenge: "Obter desafio de áudio", + label: "Não sou um robô", + loading: "A carregar...", + reload: "Recarregar", + verify: "Verificar", + verificationRequired: "Verificação necessária!", + verified: "Verificado", + verifying: "A verificar...", + waitAlert: "A verificar... por favor aguarde.", + cancel: "Cancelar", + enterCodeFromImage: "Para prosseguir, introduza o código da imagem abaixo." +}; +globalThis.$altcha.i18n.set("pt-pt", i18n$v); +const i18n$u = { + ariaLinkLabel: "Altcha (site oficial)", + enterCode: "Digite o código", + enterCodeAria: "Digite o código que você ouve. Pressione Espaço para reproduzir o áudio.", + error: "Falha na verificação. Por favor, tente novamente mais tarde.", + expired: "Verificação expirada. Por favor, tente novamente.", + footer: 'Protegido por ALTCHA', + getAudioChallenge: "Obter desafio de áudio", + label: "Eu não sou um robô", + loading: "Carregando...", + reload: "Recarregar", + verify: "Verificar", + verificationRequired: "Verificação necessária!", + verified: "Verificado", + verifying: "Verificando...", + waitAlert: "Verificando... por favor aguarde.", + cancel: "Cancelar", + enterCodeFromImage: "Para prosseguir, digite o código da imagem abaixo." +}; +globalThis.$altcha.i18n.set("pt-br", i18n$u); +const i18n$t = { + ariaLinkLabel: "Altcha (site oficial)", + enterCode: "Introduceți codul", + enterCodeAria: "Introduceți codul pe care îl auziți. Apăsați Spațiu pentru a reda audio.", + error: "Verificarea a eșuat. Încearcă din nou mai târziu.", + expired: "Verificarea a expirat. Încearcă din nou.", + footer: 'Protejat de ALTCHA', + getAudioChallenge: "Obține o provocare audio", + label: "Nu sunt un robot", + loading: "Se încarcă...", + reload: "Reîncarcă", + verify: "Verifică", + verificationRequired: "Verificare necesară!", + verified: "Verificat", + verifying: "Se verifică...", + waitAlert: "Se verifică... te rugăm să aștepți.", + cancel: "Anulare", + enterCodeFromImage: "Pentru a continua, vă rugăm să introduceți codul din imaginea de mai jos." +}; +globalThis.$altcha.i18n.set("ro", i18n$t); +const i18n$s = { + ariaLinkLabel: "Altcha (официальный сайт)", + enterCode: "Введите код", + enterCodeAria: "Введите код, который слышите. Нажмите пробел для воспроизведения аудио.", + error: "Ошибка верификации. Попробуйте позже.", + expired: "Срок действия верификации истек. Попробуйте снова.", + footer: 'Защищено ALTCHA', + getAudioChallenge: "Получить аудио задачу", + label: "Я не робот", + loading: "Загрузка...", + reload: "Перезагрузить", + verify: "Проверить", + verificationRequired: "Требуется проверка!", + verified: "Проверено", + verifying: "Идет проверка...", + waitAlert: "Идет проверка... Пожалуйста, подождите.", + cancel: "Отмена", + enterCodeFromImage: "Чтобы продолжить, пожалуйста, введите код с изображения ниже." +}; +globalThis.$altcha.i18n.set("ru", i18n$s); +const i18n$r = { + ariaLinkLabel: "Altcha (oficiálna webová stránka)", + enterCode: "Zadajte kód", + enterCodeAria: "Zadajte kód, ktorý počujete. Stlačením medzerníka prehráte zvuk.", + error: "Verifikácia zlyhala. Skúste to znova neskôr.", + expired: "Verifikácia vypršala. Skúste to znova.", + footer: 'Chránené ALTCHA', + getAudioChallenge: "Získať audio výzvu", + label: "Nie som robot", + loading: "Načítava sa...", + reload: "Obnoviť", + verify: "Verifikovať", + verificationRequired: "Vyžaduje sa overenie!", + verified: "Verifikované", + verifying: "Prebieha verifikácia...", + waitAlert: "Prebieha verifikácia... prosím čakajte.", + cancel: "Zrušiť", + enterCodeFromImage: "Na pokračovanie, prosím, zadajte kód z obrázka nižšie." +}; +globalThis.$altcha.i18n.set("sk", i18n$r); +const i18n$q = { + ariaLinkLabel: "Altcha (uradna spletna stran)", + enterCode: "Vnesite kodo", + enterCodeAria: "Vnesite kodo, ki jo slišite. Pritisnite preslednico za predvajanje zvoka.", + error: "Preverjanje ni uspelo. Poskusite znova kasneje.", + expired: "Preverjanje je poteklo. Poskusite znova.", + footer: 'Zaščiteno z ALTCHA', + getAudioChallenge: "Pridobite zvočni izziv", + label: "Nisem robot", + loading: "Nalagam...", + reload: "Ponovno naloži", + verify: "Preveri", + verificationRequired: "Potrebna je preveritev!", + verified: "Preverjeno", + verifying: "Preverjanje...", + waitAlert: "Preverjanje... prosim počakajte.", + cancel: "Preklic", + enterCodeFromImage: "Za nadaljevanje, prosimo, vnesite kodo s slike spodaj." +}; +globalThis.$altcha.i18n.set("sl", i18n$q); +const i18n$p = { + ariaLinkLabel: "Altcha (faqja zyrtare)", + enterCode: "Fut kodin", + enterCodeAria: "Fut kodin që dëgjon. Shtypni Hapësirë për të luajtur audio.", + error: "Verifikimi dështoi. Provoni përsëri më vonë.", + expired: "Verifikimi ka skaduar. Provoni përsëri.", + footer: 'I mbrojtur nga ALTCHA', + getAudioChallenge: "Merr një sfidë audio", + label: "Unë nuk jam një robot", + loading: "Duke u ngarkuar...", + reload: "Ringarko", + verify: "Verifiko", + verificationRequired: "Kërkohet verifikimi!", + verified: "I verifikuar", + verifying: "Duke verifikuar...", + waitAlert: "Duke verifikuar... ju lutem prisni.", + cancel: "Anuloje", + enterCodeFromImage: "Për të vazhduar, ju lutemi fusni kodin nga imazhi më poshtë." +}; +globalThis.$altcha.i18n.set("sq", i18n$p); +const i18n$o = { + ariaLinkLabel: "Altcha (zvanična web stranica)", + enterCode: "Unesite kod", + enterCodeAria: "Unesite kod koji čujete. Pritisnite Space da biste pustili zvuk.", + error: "Verifikacija nije uspela. Pokušajte ponovo kasnije.", + expired: "Verifikacija je istekla. Pokušajte ponovo.", + footer: 'Zaštićeno od strane ALTCHA', + getAudioChallenge: "Dohvatite audio izazov", + label: "Nisam robot", + loading: "Učitavanje...", + reload: "Ponovo učitaj", + verify: "Verifikuj", + verificationRequired: "Verifikacija je obavezna!", + verified: "Verifikovano", + verifying: "Verifikacija u toku...", + waitAlert: "Verifikacija u toku... molimo vas da sačekate.", + cancel: "Откажи", + enterCodeFromImage: "Да бисте наставили, унесите код са слике испод." +}; +globalThis.$altcha.i18n.set("sr", i18n$o); +const i18n$n = { + ariaLinkLabel: "Altcha (officiell webbplats)", + enterCode: "Ange kod", + enterCodeAria: "Ange koden du hör. Tryck på mellanslag för att spela upp ljudet.", + error: "Verifiering misslyckades. Försök igen senare.", + expired: "Verifieringen har gått ut. Försök igen.", + footer: 'Skyddad av ALTCHA', + getAudioChallenge: "Få ljudutmaning", + label: "Jag är inte en robot", + loading: "Laddar...", + reload: "Ladda om", + verify: "Verifiera", + verificationRequired: "Verifiering krävs!", + verified: "Verifierad", + verifying: "Verifierar...", + waitAlert: "Verifierar... vänligen vänta.", + cancel: "Avbryt", + enterCodeFromImage: "För att fortsätta, ange koden från bilden nedan." +}; +globalThis.$altcha.i18n.set("sv", i18n$n); +const i18n$m = { + ariaLinkLabel: "Altcha (resmi web sitesi)", + enterCode: "Kodu girin", + enterCodeAria: "Duyduğunuz kodu girin. Ses dosyasını oynatmak için Boşluk tuşuna basın.", + error: "Doğrulama başarısız oldu. Lütfen daha sonra tekrar deneyin.", + expired: "Doğrulama süresi doldu. Lütfen tekrar deneyin.", + footer: 'ALTCHA tarafından korunuyor ALTCHA', + getAudioChallenge: "Sesli doğrulama al", + label: "Ben robot değilim", + loading: "Yükleniyor...", + reload: "Yeniden yükle", + verify: "Doğrula", + verificationRequired: "Doğrulama gerekli!", + verified: "Doğrulandı", + verifying: "Doğrulama yapılıyor...", + waitAlert: "Doğrulama yapılıyor... lütfen bekleyin.", + cancel: "İptal", + enterCodeFromImage: "Devam etmek için lütfen aşağıdaki resimdeki kodu girin." +}; +globalThis.$altcha.i18n.set("tr", i18n$m); +const i18n$l = { + ariaLinkLabel: "Altcha (офіційний сайт)", + enterCode: "Введіть код", + enterCodeAria: "Введіть код, який ви чуєте. Натисніть пробіл, щоб відтворити аудіо.", + error: "Перевірка не вдалася. Спробуйте пізніше.", + expired: "Перевірка прострочена. Спробуйте знову.", + footer: 'Захищено ALTCHA', + getAudioChallenge: "Отримати аудіо-челлендж", + label: "Я не робот", + loading: "Завантаження...", + reload: "Перезавантажити", + verify: "Перевірити", + verificationRequired: "Потрібна перевірка!", + verified: "Перевірено", + verifying: "Перевіряється...", + waitAlert: "Перевірка... будь ласка, зачекайте.", + cancel: "Скасувати", + enterCodeFromImage: "Щоб продовжити, введіть код із зображення нижче." +}; +globalThis.$altcha.i18n.set("uk", i18n$l); +const i18n$k = { + ariaLinkLabel: "Altcha (amptelike webwerf)", + enterCode: "Voer kode in", + enterCodeAria: "Voer die kode in wat jy hoor. Druk Spasie om die klank af te speel.", + error: "Verifikasie het misluk. Probeer later weer.", + expired: "Verifikasie het verval. Probeer weer.", + footer: 'Beskerm deur ALTCHA', + getAudioChallenge: "Kry 'n klankuitdaging", + label: "Ek is nie 'n robot nie", + loading: "Laai...", + reload: "Laai weer", + verify: "Verifieer", + verificationRequired: "Verifikasie is vereis!", + verified: "Geverifieer", + verifying: "Verifieer...", + waitAlert: "Verifieer... wag asseblief.", + cancel: "Kanselleer", + enterCodeFromImage: "Om voort te gaan, voer asseblief die kode vanaf die onderstaande prentjie in." +}; +globalThis.$altcha.i18n.set("af", i18n$k); +const i18n$j = { + ariaLinkLabel: "Altcha (ዋናው ድህረ ገጽ)", + enterCode: "ኮድ አስገባ", + enterCodeAria: "የሚሰማዎትን ኮድ ያስገቡ። ድምጽ ለመጫወት Space ን ይጫኑ።", + error: "ማረጋገጫ አልተሳካም። በኋላ ላይ እንደገና ይሞክሩ።", + expired: "ማረጋገጫው ጊዜው አልፏል። እንደገና ይሞክሩ።", + footer: 'በ ALTCHA የተጠበቀ', + getAudioChallenge: "የድምጽ ፈተና ያግኙ", + label: "እኔ ሮቦት አይደለሁም", + loading: "በመጫን ላይ...", + reload: "እንደገና ጫን", + verify: "አረጋግጥ", + verificationRequired: "ማረጋገጫ ያስፈልጋል!", + verified: "ተረጋግጧል", + verifying: "በማረጋገጥ ላይ...", + waitAlert: "በማረጋገጥ ላይ... እባክዎ ይጠብቁ።", + cancel: "ይቅር", + enterCodeFromImage: "ለመቀጠል፣ እባክዎን ከታች ካለው ምስል ኮዱን ያስገቡ።" +}; +globalThis.$altcha.i18n.set("am", i18n$j); +const i18n$i = { + ariaLinkLabel: "Altcha (tovuti rasmi)", + enterCode: "Weka nambari", + enterCodeAria: "Weka nambari unayosikia. Bonyeza Space kucheza sauti.", + error: "Uthibitishaji umeshindwa. Jaribu tena baadaye.", + expired: "Uthibitishaji umeisha. Jaribu tena.", + footer: 'Imealindwa na ALTCHA', + getAudioChallenge: "Pata changamoto ya sauti", + label: "Mimi sio roboti", + loading: "Inapakia...", + reload: "Pakia tena", + verify: "Thibitisha", + verificationRequired: "Uthibitishaji unahitajika!", + verified: "Imethibitishwa", + verifying: "Inathibitisha...", + waitAlert: "Inathibitisha... tafadhali subiri.", + cancel: "Ghairi", + enterCodeFromImage: "Ili kuendelea, tafadhali weka nambari kutoka kwa picha hapa chini." +}; +globalThis.$altcha.i18n.set("sw", i18n$i); +const i18n$h = { + ariaLinkLabel: "Altcha (oju opo wẹẹbu osise)", + enterCode: "Tẹ koodu sii", + enterCodeAria: "Tẹ koodu ti o ngbọ sii. Tẹ Space lati ṣe ohun orin.", + error: "Ìdájọ́kòwò kò ṣẹ́ṣe. Gbiyanju lẹẹkansi ni ọjọ́ iwájú.", + expired: "Ìdájọ́kòwò ti pari. Gbiyanju lẹẹkansi.", + footer: 'Ti wa ni ààbò nipasẹ ALTCHA', + getAudioChallenge: "Gba ìjàdú ohùn", + label: "Emi kii ṣe ẹrọ", + loading: "Ó ń gbé sílẹ̀...", + reload: "Tún gbé wọlé", + verify: "Ṣàdájọ́", + verificationRequired: "Ìdájọ́kòwò ni a nílò!", + verified: "A ti dájọ́", + verifying: "Ó ń ṣàdájọ́...", + waitAlert: "Ó ń ṣàdájọ́... ẹ jọ̀ọ́ ẹ duro.", + cancel: "Fagbọsẹ", + enterCodeFromImage: "Lati tẹsiwaju, jọwọ tẹ koodu ti o wa lati aworan isalẹ sii." +}; +globalThis.$altcha.i18n.set("yo", i18n$h); +const i18n$g = { + ariaLinkLabel: "Altcha (অফিসিয়াল ওয়েবসাইট)", + enterCode: "কোড লিখুন", + enterCodeAria: "আপনি যে কোড শুনতে পান তা লিখুন। অডিও প্লে করতে স্পেস বাটন টিপুন।", + error: "যাচাইকরণ ব্যর্থ হয়েছে। পরে আবার চেষ্টা করুন।", + expired: "যাচাইকরণ সময়সীমা শেষ হয়েছে। আবার চেষ্টা করুন।", + footer: 'দ্বারা সুরক্ষিত ALTCHA', + getAudioChallenge: "অডিও চ্যালেঞ্জ নিন", + label: "আমি রোবট নই", + loading: "লোড হচ্ছে...", + reload: "পুনরায় লোড করুন", + verify: "যাচাই করুন", + verificationRequired: "যাচাই প্রয়োজন!", + verified: "যাচাই করা হয়েছে", + verifying: "যাচাই করা হচ্ছে...", + waitAlert: "যাচাই করা হচ্ছে... দয়া করে অপেক্ষা করুন।", + cancel: "বাতিল করুন", + enterCodeFromImage: "এগিয়ে যেতে, অনুগ্রহ করে নীচের চিত্র থেকে কোডটি প্রবেশ করান।" +}; +globalThis.$altcha.i18n.set("bn", i18n$g); +const i18n$f = { + ariaLinkLabel: "Altcha (אתר רשמי)", + enterCode: "הזן קוד", + enterCodeAria: "הזן את הקוד שאתה שומע. לחץ על רווח להפעלת השמע.", + error: "האימות נכשל. נסה שוב מאוחר יותר.", + expired: "תוקף האימות פג. נסה שוב.", + footer: 'מוגן על ידי ALTCHA', + getAudioChallenge: "קבל אתגר שמע", + label: "אני לא רובוט", + loading: "טוען...", + reload: "טען מחדש", + verify: "אמת", + verificationRequired: "נדרש אימות!", + verified: "אומת", + verifying: "מאמת...", + waitAlert: "מבצע אימות... אנא המתן.", + cancel: "ביטול", + enterCodeFromImage: "כדי להמשיך, אנא הזן את הקוד מהתמונה למטה." +}; +globalThis.$altcha.i18n.set("he", i18n$f); +const i18n$e = { + ariaLinkLabel: "Altcha (आधिकारिक वेबसाइट)", + enterCode: "कोड दर्ज करेंं", + enterCodeAria: "आप जो कोड सुनते हैं उसे दर्ज करें। ऑडियो चलाने के लिए स्पेस दबाएं।", + error: "सत्यापन विफल। कृपया बाद में फिर से प्रयास करें।", + expired: "सत्यापन समाप्त हो गया है। कृपया पुनः प्रयास करें।", + footer: 'द्वारा संरक्षित ALTCHA', + getAudioChallenge: "ऑडियो चुनौती प्राप्त करें", + label: "मैं रोबोट नहीं हूँ", + loading: "लोड हो रहा है...", + reload: "पुनः लोड करें", + verify: "सत्यापित करें", + verificationRequired: "सत्यापन आवश्यक है!", + verified: "सत्यापित", + verifying: "सत्यापित कर रहे हैं...", + waitAlert: "सत्यापित किया जा रहा है... कृपया प्रतीक्षा करें।", + cancel: "रद्द करें", + enterCodeFromImage: "आगे बढ़ने के लिए, कृपया नीचे दी गई छवि से कोड दर्ज करें।" +}; +globalThis.$altcha.i18n.set("hi", i18n$e); +const i18n$d = { + ariaLinkLabel: "Altcha (situs web resmi)", + enterCode: "Masukkan kode", + enterCodeAria: "Masukkan kode yang Anda dengar. Tekan Spasi untuk memutar audio.", + error: "Verifikasi gagal. Coba lagi nanti.", + expired: "Verifikasi telah kedaluwarsa. Coba lagi.", + footer: 'Dilindungi oleh ALTCHA', + getAudioChallenge: "Dapatkan tantangan audio", + label: "Saya bukan robot", + loading: "Memuat...", + reload: "Muat ulang", + verify: "Verifikasi", + verificationRequired: "Verifikasi diperlukan!", + verified: "Terverifikasi", + verifying: "Memverifikasi...", + waitAlert: "Memverifikasi... harap tunggu.", + cancel: "Batal", + enterCodeFromImage: "Untuk melanjutkan, silakan masukkan kode dari gambar di bawah ini." +}; +globalThis.$altcha.i18n.set("id", i18n$d); +const i18n$c = { + ariaLinkLabel: "Altcha (公式ウェブサイト)", + enterCode: "コードを入力", + enterCodeAria: "聞こえるコードを入力してください。スペースキーを押して音声を再生します。", + error: "認証に失敗しました。後でもう一度試してください。", + expired: "認証が期限切れです。再試行してください。", + footer: '保護されています ALTCHA', + getAudioChallenge: "音声チャレンジを取得", + label: "私はロボットではありません", + loading: "読み込み中...", + reload: "再読み込み", + verify: "確認", + verificationRequired: "認証が必要です!", + verified: "確認済み", + verifying: "確認中...", + waitAlert: "確認中...少々お待ちください。", + cancel: "キャンセル", + enterCodeFromImage: "続行するには、以下の画像からコードを入力してください。" +}; +globalThis.$altcha.i18n.set("ja", i18n$c); +const i18n$b = { + ariaLinkLabel: "Altcha (공식 웹사이트)", + enterCode: "코드 입력", + enterCodeAria: "들리는 코드를 입력하세요. 스페이스 바를 눌러 오디오를 재생합니다.", + error: "인증 실패. 나중에 다시 시도해주세요.", + expired: "인증이 만료되었습니다. 다시 시도해주세요.", + footer: 'ALTCHA에서 보호됨 ALTCHA', + getAudioChallenge: "오디오 챌린지 받기", + label: "저는 로봇이 아닙니다", + loading: "로딩 중...", + reload: "새로 고침", + verify: "확인", + verificationRequired: "인증이 필요합니다!", + verified: "확인됨", + verifying: "확인 중...", + waitAlert: "확인 중... 잠시만 기다려주세요.", + cancel: "취소", + enterCodeFromImage: "계속 진행하려면 아래 이미지에서 코드를 입력하세요." +}; +globalThis.$altcha.i18n.set("ko", i18n$b); +const i18n$a = { + ariaLinkLabel: "Altcha (ресми веб-сайт)", + enterCode: "Кодты енгізіңіз", + enterCodeAria: "Естіген кодыңызды енгізіңіз. Аудионы ойнату үшін Бос орынды басыңыз.", + error: "Тексеру сәтсіз аяқталды. Кейінірек қайталаңыз.", + expired: "Тексеру мерзімі аяқталды. Қайталаңыз.", + footer: 'ALTCHA қорғайды', + getAudioChallenge: "Аудио сынақ алу", + label: "Мен робот емеспін", + loading: "Жүктелуде...", + reload: "Қайта жүктеу", + verify: "Тексеру", + verificationRequired: "Тексеру талап етіледі!", + verified: "Тексерілді", + verifying: "Тексеруде...", + waitAlert: "Тексерілуде... күте тұрыңыз.", + cancel: "Болдыру", + enterCodeFromImage: "Жалғастыру үшін төмендегі суреттегі кодты енгізіңіз." +}; +globalThis.$altcha.i18n.set("kk", i18n$a); +const i18n$9 = { + ariaLinkLabel: "Altcha (अधिकृत संकेतस्थळ)", + enterCode: "कोड टाकाा", + enterCodeAria: "तुम्ही ऐकत असलेला कोड टाका. ऑडिओ प्ले करण्यासाठी स्पेस दाबा.", + error: "पुष्टीकरण अयशस्वी झाले. कृपया नंतर पुन्हा प्रयत्न करा.", + expired: "पुष्टीकरण कालबाह्य झाले आहे. कृपया पुन्हा प्रयत्न करा.", + footer: 'द्वारे संरक्षित ALTCHA', + getAudioChallenge: "ऑडिओ चॅलेंज मिळवा", + label: "मी रोबोट नाही", + loading: "लोड होत आहे...", + reload: "पुन्हा लोड करा", + verify: "पुष्टीकरण करा", + verificationRequired: "पडताळणी आवश्यक आहे!", + verified: "पुष्टीकरण झाले", + verifying: "पुष्टीकरण करत आहे...", + waitAlert: "पुष्टीकरण करत आहे... कृपया थोडा वेळ थांबा.", + cancel: "रद्द करा", + enterCodeFromImage: "पुढे जाण्यासाठी, कृपया खालील प्रतिमेतील कोड प्रविष्ट करा." +}; +globalThis.$altcha.i18n.set("mr", i18n$9); +const i18n$8 = { + ariaLinkLabel: "Altcha (அதிகாரப்பூர்வ வலைத்தளம்)", + enterCode: "குறியீட்டை உள்ளிடவும்", + enterCodeAria: "நீங்கள் கேட்கும் குறியீட்டை உள்ளிடவும். ஆடியோவை இயக்க Space ஐ அழுத்தவும்.", + error: "சரிபார்ப்பு தோல்வி. பிறகு மீண்டும் முயற்சிக்கவும்.", + expired: "சரிபார்ப்பு காலாவதியானது. மீண்டும் முயற்சிக்கவும்.", + footer: 'மூலமாக பாதுகாக்கப்பட்டவை ALTCHA', + getAudioChallenge: "ஒலி சவாலை பெறவும்", + label: "நான் ரோபோடான அல்ல", + loading: "செயலாக்கம்...", + reload: "மீண்டும் புதுப்பிக்கவும்", + verify: "சரிபார்க்கவும்", + verificationRequired: "சரிபார்ப்பு தேவை!", + verified: "சரிபார்க்கப்பட்டது", + verifying: "சரிபார்க்கப்படுகிறது...", + waitAlert: "சரிபார்க்கப்படுகிறது... தயவுசெய்து காத்திருக்கவும்.", + cancel: "ரத்துசெய்", + enterCodeFromImage: "தொடர, கீழே உள்ள படத்திலிருந்து குறியீட்டை உள்ளிடவும்." +}; +globalThis.$altcha.i18n.set("ta", i18n$8); +const i18n$7 = { + ariaLinkLabel: "Altcha (అధికారిక వెబ్‌సైట్)", + enterCode: "కోడ్‌ని నమోదు చేయండి", + enterCodeAria: "మీరు విన్న కోడ్‌ని నమోదు చేయండి. ఆడియో ప్లే చేయడానికి స్పేస్‌ను నొక్కండి.", + error: "చెకింగ్ విఫలమైంది. దయచేసి మరల ప్రయత్నించండి.", + expired: "చెకింగ్ కాలం ముగిసింది. దయచేసి మరల ప్రయత్నించండి.", + footer: 'ఈ సైట్ రక్షించబడింది ALTCHA', + getAudioChallenge: "ఆడియో ఛాలెంజ్ పొందండి", + label: "నేను రోబోట్ కాదు", + loading: "లోడ్ అవుతోంది...", + reload: "మళ్ళీ లోడ్ చేయండి", + verify: "ధ్రువీకరించు", + verificationRequired: "ధృవీకరణ అవసరం!", + verified: "ధ్రువీకరించబడింది", + verifying: "ధ్రువీకరణ జరుగుతుంది...", + waitAlert: "ధ్రువీకరణ జరుగుతుంది... దయచేసి వేచి ఉండండి.", + cancel: "రద్దు చేయండి", + enterCodeFromImage: "కొనసాగడానికి, దయచేసి క్రింది చిత్రంలో ఉన్న కోడ్‌ను నమోదు చేయండి." +}; +globalThis.$altcha.i18n.set("te", i18n$7); +const i18n$6 = { + ariaLinkLabel: "Altcha (เว็บไซต์ทางการ)", + enterCode: "ป้อนรหัส", + enterCodeAria: "ป้อนรหัสที่คุณได้ยิน กด Space เพื่อเล่นเสียง", + error: "การตรวจสอบล้มเหลว กรุณาลองอีกครั้งภายหลัง", + expired: "การตรวจสอบหมดอายุ กรุณาลองใหม่", + footer: 'ป้องกันโดย ALTCHA', + getAudioChallenge: "รับการท้าทายเสียง", + label: "ฉันไม่ใช่บอท", + loading: "กำลังโหลด...", + reload: "โหลดใหม่", + verify: "ตรวจสอบ", + verificationRequired: "จำเป็นต้องตรวจสอบ!", + verified: "ตรวจสอบแล้ว", + verifying: "กำลังตรวจสอบ...", + waitAlert: "กำลังตรวจสอบ... กรุณารอ", + cancel: "ยกเลิก", + enterCodeFromImage: "เพื่อดำเนินการต่อ โปรดป้อนรหัสจากรูปภาพด้านล่าง" +}; +globalThis.$altcha.i18n.set("th", i18n$6); +const i18n$5 = { + ariaLinkLabel: "Altcha (سرکاری ویب سائٹ)", + enterCode: "کوڈ درج کریں", + enterCodeAria: "جو کوڈ آپ سنتے ہیں وہ درج کریں۔ آڈیو چلانے کے لیے اسپیس دبائیں۔", + error: "توثیق ناکام ہو گئی۔ براہ کرم بعد میں دوبارہ کوشش کریں۔", + expired: "توثیق کی مدت ختم ہو گئی ہے۔ براہ کرم دوبارہ کوشش کریں۔", + footer: 'کے ذریعے محفوظ ALTCHA', + getAudioChallenge: "آڈیو چیلنج حاصل کریں", + label: "میں روبوٹ نہیں ہوں", + loading: "لوڈ ہو رہا ہے...", + reload: "دوبارہ لوڈ کریں", + verify: "توثیق کریں", + verificationRequired: "تصدیق ضروری ہے!", + verified: "توثیق شدہ", + verifying: "توثیق ہو رہی ہے...", + waitAlert: "توثیق ہو رہی ہے... براہ کرم انتظار کریں۔", + cancel: "منسوخ کریں", + enterCodeFromImage: "اگلے مرحلے پر جانے کے لیے، براہ کرم نیچے دی گئی تصویر سے کوڈ درج کریں۔" +}; +globalThis.$altcha.i18n.set("ur", i18n$5); +const i18n$4 = { + ariaLinkLabel: "Altcha (rasmiy veb-sayt)", + enterCode: "Kodni kiriting", + enterCodeAria: "Eshitgan kodingizni kiriting. Audioni ijro etish uchun Bo'sh joy tugmasini bosing.", + error: "Tekshiruv muvaffaqiyatsiz tugadi. Keyinroq qayta urinib ko'ring.", + expired: "Tekshiruv muddati tugadi. Qayta urinib ko'ring.", + footer: 'ALTCHA tomonidan himoyalangan', + getAudioChallenge: "Audio sinovni olish", + label: "Men robot emasman", + loading: "Yuklanmoqda...", + reload: "Qayta yuklash", + verify: "Tekshirish", + verificationRequired: "Tekshiruv talab qilinadi!", + verified: "Tekshirildi", + verifying: "Tekshirilmoqda...", + waitAlert: "Tekshirilmoqda... iltimos kuting.", + cancel: "Bekor qilish", + enterCodeFromImage: "Davom etish uchun, iltimos, quyidagi rasmda ko'rsatilgan kodni kiriting." +}; +globalThis.$altcha.i18n.set("uz", i18n$4); +const i18n$3 = { + ariaLinkLabel: "Altcha (trang web chính thức)", + enterCode: "Nhập mã", + enterCodeAria: "Nhập mã bạn nghe được. Nhấn Phím cách để phát âm thanh.", + error: "Xác minh thất bại. Vui lòng thử lại sau.", + expired: "Xác minh đã hết hạn. Vui lòng thử lại.", + footer: 'Được bảo vệ bởi ALTCHA', + getAudioChallenge: "Nhận thử thách âm thanh", + label: "Tôi không phải là robot", + loading: "Đang tải...", + reload: "Tải lại", + verify: "Xác minh", + verificationRequired: "Yêu cầu xác minh!", + verified: "Đã xác minh", + verifying: "Đang xác minh...", + waitAlert: "Đang xác minh... vui lòng chờ.", + cancel: "Hủy bỏ", + enterCodeFromImage: "Để tiếp tục, vui lòng nhập mã từ hình ảnh bên dưới." +}; +globalThis.$altcha.i18n.set("vi", i18n$3); +const i18n$2 = { + ariaLinkLabel: "Altcha (官方网站)", + enterCode: "输入代码", + enterCodeAria: "输入您听到的代码。按空格键播放音频。", + error: "验证失败。稍后再试。", + expired: "验证已过期。请重试。", + footer: '由 ALTCHA 保护', + getAudioChallenge: "获取音频挑战", + label: "我不是机器人", + loading: "加载中...", + reload: "重新加载", + verify: "验证", + verificationRequired: "需要验证!", + verified: "已验证", + verifying: "正在验证...", + waitAlert: "正在验证... 请稍等。", + cancel: "取消", + enterCodeFromImage: "为继续操作,请输入下图中显示的验证码。" +}; +globalThis.$altcha.i18n.set("zh-cn", i18n$2); +const i18n$1 = { + ariaLinkLabel: "Altcha (官方網站)", + cancel: "取消", + enterCode: "輸入代碼", + enterCodeAria: "輸入你聽到嘅代碼。按空格鍵播放音訊。", + enterCodeFromImage: "要繼續,請輸入下面圖片入面嘅代碼。", + error: "驗證失敗。請稍後再試。", + expired: "驗證已過期。請再試一次。", + footer: '由 ALTCHA 提供保護', + getAudioChallenge: "取得音訊驗證", + label: "我唔係機械人", + loading: "載入中...", + reload: "重新載入", + verify: "驗證", + verificationRequired: "需要驗證!", + verified: "已驗證", + verifying: "驗證中...", + waitAlert: "驗證中... 請稍候。" +}; +globalThis.$altcha.i18n.set("zh-hk", i18n$1); +const i18n = { + ariaLinkLabel: "Altcha (官方網站)", + enterCode: "輸入代碼", + enterCodeAria: "輸入您聽到的代碼。按空格鍵播放音頻。", + error: "驗證失敗。稍後再試。", + expired: "驗證已過期。請重試。", + footer: '由 ALTCHA 保護', + getAudioChallenge: "獲取音頻挑戰", + label: "我不是機器人", + loading: "載入中...", + reload: "重新載入", + verify: "驗證", + verificationRequired: "需要驗證!", + verified: "已驗證", + verifying: "正在驗證...", + waitAlert: "正在驗證... 請稍等。", + cancel: "取消", + enterCodeFromImage: "若要繼續,請輸入下方的圖片驗證碼。" +}; +globalThis.$altcha.i18n.set("zh-tw", i18n); diff --git a/frontend/node_modules/altcha/dist/main/altcha.i18n.min.js b/frontend/node_modules/altcha/dist/main/altcha.i18n.min.js new file mode 100644 index 0000000..d01b81d --- /dev/null +++ b/frontend/node_modules/altcha/dist/main/altcha.i18n.min.js @@ -0,0 +1 @@ +const e=!1;var t=Array.isArray,a=Array.prototype.indexOf,n=Array.prototype.includes,r=Array.from,i=Object.keys,o=Object.defineProperty,l=Object.getOwnPropertyDescriptor,s=Object.getOwnPropertyDescriptors,c=Object.prototype,d=Array.prototype,u=Object.getPrototypeOf,f=Object.isExtensible;const h=()=>{};function v(){var e,t;return{promise:new Promise((a,n)=>{e=a,t=n}),resolve:e,reject:t}}const g=1<<24,p=16,b=32,m=64,y=512,k=1024,w=2048,A=4096,C=8192,x=16384,_=32768,$=1<<25,L=65536,T=1<<17,S=1<<19,j=65536,z=1<<21,E=1<<23,I=Symbol("$state"),V=Symbol("legacy props"),P=Symbol(""),R=Symbol("attributes"),O=Symbol("class"),F=Symbol("style"),H=Symbol("text"),M=Symbol("form reset"),q=new class extends Error{name="StaleReactionError";message="The reaction that called `getAbortSignal()` was re-run or destroyed"},D=!!globalThis.document?.contentType&&globalThis.document.contentType.includes("xml");function N(e){return e===this.v}function U(e,t){return e!=e?t==t:e!==t||null!==e&&"object"==typeof e||"function"==typeof e}function B(e){return!U(e,this.v)}const K={},G=Symbol("uninitialized"),W="http://www.w3.org/1999/xhtml";let Y=null;function Z(e){Y=e}function J(e,t=!1,a){Y={p:Y,i:!1,c:null,e:null,s:e,x:null,r:qt,l:null}}function X(e){var t=Y,a=t.e;if(null!==a)for(var n of(t.e=null,a))ga(n);return void 0!==e&&(t.x=e),t.i=!0,Y=t.p,e??{}}let Q=[];function ee(){var e=Q;Q=[],function(e){for(var t=0;t{t===Q&&ee()})}Q.push(e)}function ae(){for(;Q.length>0;)ee()}function ne(e){console.warn("https://svelte.dev/e/hydration_mismatch")}let re,ie=!1;function oe(e){ie=e}function le(e){if(null===e)throw ne(),K;return re=e}function se(){return le(xe(re))}function ce(e){if(ie){if(null!==xe(re))throw ne(),K;re=e}}function de(e=1){if(ie){for(var t=e,a=re;t--;)a=xe(a);re=a}}function ue(e=!0){for(var t=0,a=re;;){if(8===a.nodeType){var n=a.data;if("]"===n){if(0===t)return a;t-=1}else("["===n||"[!"===n||"["===n[0]&&!isNaN(Number(n.slice(1))))&&(t+=1)}var r=xe(a);e&&a.remove(),a=r}}function fe(e){if(!e||8!==e.nodeType)throw ne(),K;return e.data}function he(e){if("object"!=typeof e||null===e||I in e)return e;const a=u(e);if(a!==c&&a!==d)return e;var n=new Map,r=t(e),i=_t(0),o=Zt,s=e=>{if(Zt===o)return e();var t=Ft,a=Zt;Mt(null),Jt(o);var n=e();return Mt(t),Jt(a),n};return r&&n.set("length",_t(e.length)),new Proxy(e,{defineProperty(e,t,a){"value"in a&&!1!==a.configurable&&!1!==a.enumerable&&!1!==a.writable||function(){throw new Error("https://svelte.dev/e/state_descriptors_fixed")}();var r=n.get(t);return void 0===r?s(()=>{var e=_t(a.value);return n.set(t,e),e}):Lt(r,a.value,!0),!0},deleteProperty(e,t){var a=n.get(t);if(void 0===a){if(t in e){const e=s(()=>_t(G));n.set(t,e),St(i)}}else Lt(a,G),St(i);return!0},get(t,a,r){if(a===I)return e;var i=n.get(a),o=a in t;if(void 0!==i||o&&!l(t,a)?.writable||(i=s(()=>_t(he(o?t[a]:G))),n.set(a,i)),void 0!==i){var c=oa(i);return c===G?void 0:c}return Reflect.get(t,a,r)},getOwnPropertyDescriptor(e,t){var a=Reflect.getOwnPropertyDescriptor(e,t);if(a&&"value"in a){var r=n.get(t);r&&(a.value=oa(r))}else if(void 0===a){var i=n.get(t),o=i?.v;if(void 0!==i&&o!==G)return{enumerable:!0,configurable:!0,value:o,writable:!0}}return a},has(e,t){if(t===I)return!0;var a=n.get(t),r=void 0!==a&&a.v!==G||Reflect.has(e,t);if((void 0!==a||null!==qt&&(!r||l(e,t)?.writable))&&(void 0===a&&(a=s(()=>_t(r?he(e[t]):G)),n.set(t,a)),oa(a)===G))return!1;return r},set(e,t,a,o){var c=n.get(t),d=t in e;if(r&&"length"===t)for(var u=a;u_t(G)),n.set(u+"",f))}void 0===c?d&&!l(e,t)?.writable||(Lt(c=s(()=>_t(void 0)),he(a)),n.set(t,c)):(d=c.v!==G,Lt(c,s(()=>he(a))));var h=Reflect.getOwnPropertyDescriptor(e,t);if(h?.set&&h.set.call(o,a),!d){if(r&&"string"==typeof t){var v=n.get("length"),g=Number(t);Number.isInteger(g)&&g>=v.v&&Lt(v,g+1)}St(i)}return!0},ownKeys(e){oa(i);var t=Reflect.ownKeys(e).filter(e=>{var t=n.get(e);return void 0===t||t.v!==G});for(var[a,r]of n)r.v===G||a in e||t.push(a);return t},setPrototypeOf(){!function(){throw new Error("https://svelte.dev/e/state_prototype_fixed")}()}})}function ve(e){try{if(null!==e&&"object"==typeof e&&I in e)return e[I]}catch{}return e}function ge(e,t){return Object.is(ve(e),ve(t))}var pe,be,me,ye,ke;function we(){if(void 0===pe){pe=window,be=document,me=/Firefox/.test(navigator.userAgent);var e=Element.prototype,t=Node.prototype,a=Text.prototype;ye=l(t,"firstChild").get,ke=l(t,"nextSibling").get,f(e)&&(e[O]=void 0,e[R]=null,e[F]=void 0,e.__e=void 0),f(a)&&(a[H]=void 0)}}function Ae(e=""){return document.createTextNode(e)}function Ce(e){return ye.call(e)}function xe(e){return ke.call(e)}function _e(e,t){if(!ie)return Ce(e);var a=Ce(re);if(null===a)a=re.appendChild(Ae());else if(t&&3!==a.nodeType){var n=Ae();return a?.before(n),le(n),n}return t&&Se(a),le(a),a}function $e(e,t=!1){if(!ie){var a=Ce(e);return a instanceof Comment&&""===a.data?xe(a):a}if(t){if(3!==re?.nodeType){var n=Ae();return re?.before(n),le(n),n}Se(re)}return re}function Le(e,t=1,a=!1){let n=ie?re:e;for(var r;t--;)r=n,n=xe(n);if(!ie)return n;if(a){if(3!==n?.nodeType){var i=Ae();return null===n?r?.after(i):n.before(i),le(i),i}Se(n)}return le(n),n}function Te(e,t,a){let n;return document.createElementNS(t??W,e,n)}function Se(e){if(e.nodeValue.length<65536)return;let t=e.nextSibling;for(;null!==t&&3===t.nodeType;)t.remove(),e.nodeValue+=t.nodeValue,t=e.nextSibling}function je(e){var t=qt;if(null===t)return Ft.f|=E,e;if(0===(t.f&_)&&!(4&t.f))throw e;ze(e,t)}function ze(e,t){for(;null!==t;){if(128&t.f){if(0===(t.f&_))throw e;try{return void t.b.error(e)}catch(t){e=t}}t=t.parent}throw e}const Ee=-7169;function Ie(e,t){e.f=e.f&Ee|t}function Ve(e){0!==(e.f&y)||null===e.deps?Ie(e,k):Ie(e,A)}function Pe(e){if(null!==e)for(const t of e)2&t.f&&0!==(t.f&j)&&(t.f^=j,Pe(t.deps))}function Re(e,t,a){0!==(e.f&w)?t.add(e):0!==(e.f&A)&&a.add(e),Pe(e.deps),Ie(e,k)}function Oe(e,t,a){if(null==e)return t(void 0),h;const n=ca(()=>e.subscribe(t,a));return n.unsubscribe?()=>n.unsubscribe():n}const Fe=[];function He(e,t=h){let a=null;const n=new Set;function r(t){if(U(e,t)&&(e=t,a)){const t=!Fe.length;for(const t of n)t[1](),Fe.push(t,e);if(t){for(let e=0;e{n.delete(s),0===n.size&&a&&(a(),a=null)}}}}function Me(e){let t;return Oe(e,e=>t=e)(),t}let qe=Symbol("unmounted");function De(e,t,a){const n=a[t]??={store:null,source:$t(void 0),unsubscribe:h};if(n.store!==e&&!(qe in a))if(n.unsubscribe(),n.store=e??null,null==e)n.source.v=void 0,n.unsubscribe=h;else{var r=!0;n.unsubscribe=Oe(e,e=>{r?n.source.v=e:Lt(n.source,e)}),r=!1}return e&&qe in a?Me(e):oa(n.source)}let Ne=null,Ue=null,Be=null,Ke=null,Ge=null,We=null,Ye=!1,Ze=!1,Je=null,Xe=null;var Qe=0;let et=1;class tt{id=et++;#e=!1;linked=!0;#t=null;#a=null;async_deriveds=new Map;current=new Map;previous=new Map;unblocked=new Set;#n=new Set;#r=new Set;#i=new Set;#o=0;#l=new Map;#s=null;#c=[];#d=[];#u=new Set;#f=new Set;#h=new Map;#v=new Set;is_fork=!1;#g=!1;#p(){if(this.is_fork)return!0;for(const a of this.#l.keys()){for(var e=a,t=!1;null!==e.parent;){if(this.#h.has(e)){t=!0;break}e=e.parent}if(!t)return!0}return!1}skip_effect(e){this.#h.has(e)||this.#h.set(e,{d:[],m:[]}),this.#v.delete(e)}unskip_effect(e,t=e=>this.schedule(e)){var a=this.#h.get(e);if(a){for(var n of(this.#h.delete(e),a.d))Ie(n,w),t(n);for(n of a.m)Ie(n,A),t(n)}this.#v.add(e)}#b(){if(this.#e=!0,Qe++>1e3&&(this.#m(),function(){try{!function(){throw new Error("https://svelte.dev/e/effect_update_depth_exceeded")}()}catch(e){ze(e,We)}}()),!this.#p()){for(const e of this.#u)this.#f.delete(e),Ie(e,w),this.schedule(e);for(const e of this.#f)Ie(e,A),this.schedule(e)}const e=this.#c;this.#c=[],this.apply();var t=Je=[],a=[],n=Xe=[];for(const n of e)try{this.#y(n,t,a)}catch(e){throw ct(n),e}if(Be=null,n.length>0){var r=tt.ensure();for(const e of n)r.schedule(e)}if(Je=null,Xe=null,this.#p()){this.#k(a),this.#k(t);for(const[e,t]of this.#h)st(e,t);return void(n.length>0&&Be.#b())}const i=this.#w();if(i)i.#A(this);else{this.#u.clear(),this.#f.clear();for(const e of this.#n)e(this);this.#n.clear(),Ke=this,rt(a),rt(t),Ke=null,this.#s?.resolve();var o=Be;if(this.linked&&0===this.#o&&this.#m(),this.#c.length>0){null===o&&(o=this,this.#C());const e=o;e.#c.push(...this.#c.filter(t=>!e.#c.includes(t)))}null!==o&&o.#b()}}#y(e,t,a){e.f^=k;for(var n=e.first;null!==n;){var r=n.f,i=!!(96&r);if(!(i&&0!==(r&k)||0!==(r&C)||this.#h.has(n))&&null!==n.fn){i?n.f^=k:4&r?t.push(n):Qt(n)&&(0!==(r&p)&&this.#f.add(n),ra(n));var o=n.first;if(null!==o){n=o;continue}}for(;null!==n;){var l=n.next;if(null!==l){n=l;break}n=n.parent}}}#w(){for(var e=this.#t;null!==e;){if(!e.is_fork)for(const[t,[,a]]of this.current)if(e.current.has(t)&&!a)return e;e=e.#t}return null}#A(e){for(const[t,a]of e.current)!this.previous.has(t)&&e.previous.has(t)&&this.previous.set(t,e.previous.get(t)),this.current.set(t,a);for(const[t,a]of e.async_deriveds){const e=this.async_deriveds.get(t);e&&a.promise.then(e.resolve)}const t=e=>{var a=e.reactions;if(null!==a)for(const e of a){var n=e.f;if(2&n)t(e);else{var r=e;4194320&n&&!this.async_deriveds.has(r)&&(this.#f.delete(r),Ie(r,w),this.schedule(r))}}};for(const e of this.current.keys())t(e);this.oncommit(()=>e.discard()),e.#m(),Be=this,this.#b()}#k(e){for(var t=0;t!this.current.has(e));if(0===n.length)e&&c.discard();else if(t.length>0){if(e)for(const e of this.#v)c.unskip_effect(e,e=>{4194320&e.f?c.schedule(e):c.#k([e])});c.activate();var r=new Set,i=new Map;for(var o of t)it(o,n,r,i);i=new Map;var l=[...c.current.keys()].filter(e=>!this.current.has(e)||this.current.get(e)[0]!==e.v);if(l.length>0)for(const e of this.#d)155648&e.f||!ot(e,l,i)||(4194320&e.f?(Ie(e,w),c.schedule(e)):c.#u.add(e));if(c.#c.length>0){for(var s of(c.apply(),c.#c))c.#y(s,[],[]);c.#c=[]}c.deactivate()}}}}increment(e,t){if(this.#o+=1,e){let e=this.#l.get(t)??0;this.#l.set(t,e+1)}}decrement(e,t){if(this.#o-=1,e){let e=this.#l.get(t)??0;1===e?this.#l.delete(t):this.#l.set(t,e-1)}this.#g||(this.#g=!0,te(()=>{this.#g=!1,this.linked&&this.flush()}))}transfer_effects(e,t){for(const t of e)this.#u.add(t);for(const e of t)this.#f.add(e);e.clear(),t.clear()}oncommit(e){this.#n.add(e)}ondiscard(e){this.#r.add(e)}on_fork_commit(e){this.#i.add(e)}run_fork_commit_callbacks(){for(const e of this.#i)e(this);this.#i.clear()}settled(){return(this.#s??=v()).promise}static ensure(){if(null===Be){const e=Be=new tt;e.#C(),Ze||Ye||te(()=>{e.#e||e.flush()})}return Be}apply(){Ge=null}schedule(e){if(We=e,e.b?.is_pending&&16777228&e.f&&0===(e.f&_))e.b.defer_effect(e);else{for(var t=e;null!==t.parent;){var a=(t=t.parent).f;if(!(null===Je||t!==qt||null!==Ft&&2&Ft.f))return;if(96&a){if(0===(a&k))return;t.f^=k}}this.#c.push(t)}}#C(){null===Ue?Ne=Ue=this:(Ue.#a=this,this.#t=Ue),Ue=this}#m(){var e=this.#t,t=this.#a;null===e?Ne=t:e.#a=t,null===t?Ue=e:t.#t=e,this.linked=!1}}function at(e){var t=Ye;Ye=!0;try{for(;;){if(ae(),null===Be)return;Be.flush()}}finally{Ye=t}}let nt=null;function rt(e){var t=e.length;if(0!==t){for(var a=0;a0)){At.clear();for(const e of nt){if(24576&e.f)continue;const t=[e];let a=e.parent;for(;null!==a;)nt.has(a)&&(nt.delete(a),t.push(a)),a=a.parent;for(let e=t.length-1;e>=0;e--){const a=t[e];24576&a.f||ra(a)}}nt.clear()}}nt=null}}function it(e,t,a,n){if(!a.has(e)&&(a.add(e),null!==e.reactions))for(const r of e.reactions){const e=r.f;2&e?it(r,t,a,n):4194320&e&&0===(e&w)&&ot(r,t,n)&&(Ie(r,w),lt(r))}}function ot(e,t,a){const r=a.get(e);if(void 0!==r)return r;if(null!==e.deps)for(const r of e.deps){if(n.call(t,r))return!0;if(2&r.f&&ot(r,t,a))return a.set(r,!0),!0}return a.set(e,!1),!1}function lt(e){Be.schedule(e)}function st(e,t){if(0===(e.f&b)||0===(e.f&k)){0!==(e.f&w)?t.d.push(e):0!==(e.f&A)&&t.m.push(e),Ie(e,k);for(var a=e.first;null!==a;)st(a,t),a=a.next}}function ct(e){Ie(e,k);for(var t=e.first;null!==t;)ct(t),t=t.next}class dt{parent;is_pending=!1;transform_error;#_;#$=ie?re:null;#L;#T;#S;#j=null;#z=null;#E=null;#I=null;#V=0;#P=0;#R=!1;#u=new Set;#f=new Set;#O=null;#F=function(e){let t,a=0,n=xt(0);return()=>{fa()&&(oa(n),ba(()=>(0===a&&(t=ca(()=>e(()=>St(n)))),a+=1,()=>{te(()=>{a-=1,0===a&&(t?.(),t=void 0,St(n))})})))}}(()=>(this.#O=xt(this.#V),()=>{this.#O=null}));constructor(e,t,a,n){this.#_=e,this.#L=t,this.#T=e=>{var t=qt;t.b=this,t.f|=128,a(e)},this.parent=qt.b,this.transform_error=n??this.parent?.transform_error??(e=>e),this.#S=ya(()=>{if(ie){const e=this.#$;se();const t="[!"===e.data;if(e.data.startsWith("[?")){const t=JSON.parse(e.data.slice(2));this.#H(t)}else t?this.#M():this.#q()}else this.#D()},589824),ie&&(this.#_=re)}#q(){try{this.#j=wa(()=>this.#T(this.#_))}catch(e){this.error(e)}}#H(e){const t=this.#L.failed;t&&(this.#E=wa(()=>{t(this.#_,()=>e,()=>()=>{})}))}#M(){const e=this.#L.pending;e&&(this.is_pending=!0,this.#z=wa(()=>e(this.#_)),te(()=>{var e=this.#I=document.createDocumentFragment(),t=Ae();e.append(t),this.#j=this.#N(()=>wa(()=>this.#T(t))),0===this.#P&&(this.#_.before(e),this.#I=null,La(this.#z,()=>{this.#z=null}),this.#U(Be))}))}#D(){try{if(this.is_pending=this.has_pending_snippet(),this.#P=0,this.#V=0,this.#j=wa(()=>{this.#T(this.#_)}),this.#P>0){var e=this.#I=document.createDocumentFragment();za(this.#j,e);const t=this.#L.pending;this.#z=wa(()=>t(this.#_))}else this.#U(Be)}catch(e){this.error(e)}}#U(e){this.is_pending=!1,e.transfer_effects(this.#u,this.#f)}defer_effect(e){Re(e,this.#u,this.#f)}is_rendered(){return!this.is_pending&&(!this.parent||this.parent.is_rendered())}has_pending_snippet(){return!!this.#L.pending}#N(e){var t=qt,a=Ft,n=Y;Dt(this.#S),Mt(this.#S),Z(this.#S.ctx);try{return tt.ensure(),e()}catch(e){return je(e),null}finally{Dt(t),Mt(a),Z(n)}}#B(e,t){this.has_pending_snippet()?(this.#P+=e,0===this.#P&&(this.#U(t),this.#z&&La(this.#z,()=>{this.#z=null}),this.#I&&(this.#_.before(this.#I),this.#I=null))):this.parent&&this.parent.#B(e,t)}update_pending_count(e,t){this.#B(e,t),this.#V+=e,this.#O&&!this.#R&&(this.#R=!0,te(()=>{this.#R=!1,this.#O&&Tt(this.#O,this.#V)}))}get_effect_pending(){return this.#F(),oa(this.#O)}error(e){if(!this.#L.onerror&&!this.#L.failed)throw e;Be?.is_fork?(this.#j&&Be.skip_effect(this.#j),this.#z&&Be.skip_effect(this.#z),this.#E&&Be.skip_effect(this.#E),Be.on_fork_commit(()=>{this.#K(e)})):this.#K(e)}#K(e){this.#j&&(xa(this.#j),this.#j=null),this.#z&&(xa(this.#z),this.#z=null),this.#E&&(xa(this.#E),this.#E=null),ie&&(le(this.#$),de(),le(ue()));var t=this.#L.onerror;let a=this.#L.failed;var n=!1,r=!1;const i=()=>{n?console.warn("https://svelte.dev/e/svelte_boundary_reset_noop"):(n=!0,r&&function(){throw new Error("https://svelte.dev/e/svelte_boundary_reset_onerror")}(),null!==this.#E&&La(this.#E,()=>{this.#E=null}),this.#N(()=>{this.#D()}))},o=e=>{try{r=!0,t?.(e,i),r=!1}catch(e){ze(e,this.#S&&this.#S.parent)}a&&(this.#E=this.#N(()=>{try{return wa(()=>{var t=qt;t.b=this,t.f|=128,a(this.#_,()=>e,()=>i)})}catch(e){return ze(e,this.#S.parent),null}}))};te(()=>{var t;try{t=this.transform_error(e)}catch(e){return void ze(e,this.#S&&this.#S.parent)}null!==t&&"object"==typeof t&&"function"==typeof t.then?t.then(o,e=>ze(e,this.#S&&this.#S.parent)):o(t)})}}function ut(e,t,a,n){const r=vt;var i=e.filter(e=>!e.settled);if(0!==a.length||0!==i.length){var o,l,s,c,d=qt,u=(o=qt,l=Ft,s=Y,c=Be,function(e=!0){Dt(o),Mt(l),Z(s),e&&0===(o.f&x)&&(c?.activate(),c?.apply())}),f=1===i.length?i[0].promise:i.length>1?Promise.all(i.map(e=>e.promise)):null,h=ht();0!==a.length?f?f.then(()=>{u(),g(),ft()}):g():f.then(()=>v(t.map(r))).finally(h)}else n(t.map(r));function v(e){if(0===(d.f&x)){u();try{n(e)}catch(e){ze(e,d)}ft()}}function g(){Promise.all(a.map(e=>pt(e))).then(e=>v([...t.map(r),...e])).catch(e=>ze(e,d)).finally(h)}}function ft(e=!0){Dt(null),Mt(null),Z(null),e&&Be?.deactivate()}function ht(){var e=qt,t=e.b,a=Be,n=t.is_rendered();return t.update_pending_count(1,a),a.increment(n,e),()=>{t.update_pending_count(-1,a),a.decrement(n,e)}}function vt(e){null!==qt&&(qt.f|=S);return{ctx:Y,deps:null,effects:null,equals:N,f:2050,fn:e,reactions:null,rv:0,v:G,wv:0,parent:qt,ac:null}}const gt=Symbol("obsolete");function pt(e,t,a){let n=qt;null===n&&function(){throw new Error("https://svelte.dev/e/async_derived_orphan")}();var r=void 0,i=xt(G),o=!Ft,l=new Set;return function(e){ua(4718592,e)}(()=>{var t=qt,a=v();r=a.promise;try{Promise.resolve(e()).then(a.resolve,e=>{e!==q&&a.reject(e)}).finally(ft)}catch(e){a.reject(e),ft()}var s=Be;if(o){if(0!==(t.f&_))var c=ht();if(n.b.is_rendered())s.async_deriveds.get(t)?.reject(gt);else for(const e of l.values())e.reject(gt);l.add(a),s.async_deriveds.set(t,a)}const d=(e,t=void 0)=>{c?.(),l.delete(a),t!==gt&&(s.activate(),t?(i.f|=E,Tt(i,t)):(0!==(i.f&E)&&(i.f^=E),Tt(i,e)),s.deactivate())};a.promise.then(d,e=>d(null,e||"unknown"))}),ha(()=>{for(const e of l)e.reject(gt)}),new Promise(e=>{!function t(a){function n(){a===r?e(i):t(r)}a.then(n,n)}(r)})}function bt(e){const t=vt(e);return Ut(t),t}function mt(e){var t,a=qt,n=e.parent;if(!Rt&&null!==n&&e.v!==G&&24576&n.f)return console.warn("https://svelte.dev/e/derived_inert"),e.v;Dt(n);try{e.f&=-65537,function(e){var t=e.effects;if(null!==t){e.effects=null;for(var a=0;a0&&!Ct&&function(){Ct=!1;for(const e of wt){let t;0!==(e.f&k)&&Ie(e,A);try{t=Qt(e)}catch{t=!0}t&&ra(e)}wt.clear()}()}return t}function St(e){Lt(e,e.v+1)}function jt(e,t,a){var n=e.reactions;if(null!==n)for(var r=n.length,i=0;i{document.activeElement===t&&e.focus()})}}let Et=!1;function It(){Et||(Et=!0,document.addEventListener("reset",e=>{Promise.resolve().then(()=>{if(!e.defaultPrevented)for(const t of e.target.elements)t[M]?.()})},{capture:!0}))}function Vt(e){var t=Ft,a=qt;Mt(null),Dt(null);try{return e()}finally{Mt(t),Dt(a)}}let Pt=!1,Rt=!1;function Ot(e){Rt=e}let Ft=null,Ht=!1;function Mt(e){Ft=e}let qt=null;function Dt(e){qt=e}let Nt=null;function Ut(e){null!==Ft&&(null===Nt?Nt=[e]:Nt.push(e))}let Bt=null,Kt=0,Gt=null;let Wt=1,Yt=0,Zt=Yt;function Jt(e){Zt=e}function Xt(){return++Wt}function Qt(e){var t=e.f;if(0!==(t&w))return!0;if(2&t&&(e.f&=-65537),0!==(t&A)){for(var a=e.deps,n=a.length,r=0;re.wv)return!0}0!==(t&y)&&null===Ge&&Ie(e,k)}return!1}function ea(e,t,a=!0){var r=e.reactions;if(null!==r&&(null===Nt||!n.call(Nt,e)))for(var i=0;i{e.ac.abort(q)}),e.ac=null);try{e.f|=z;var d=(0,e.fn)();e.f|=_;var u=e.deps,f=Be?.is_fork;if(null!==Bt){var h;if(f||na(e,Kt),null!==u&&Kt>0)for(u.length=Kt+Bt.length,h=0;h{ua(8,()=>e(...t.map(oa)))})}function ya(e,t=0){return ua(p|t,e)}function ka(e,t=0){return ua(g|t,e)}function wa(e){return ua(524320,e)}function Aa(e){var t=e.teardown;if(null!==t){const e=Rt,a=Ft;Ot(!0),Mt(null);try{t.call(null)}finally{Ot(e),Mt(a)}}}function Ca(e,t=!1){var a=e.first;for(e.first=e.last=null;null!==a;){const e=a.ac;null!==e&&Vt(()=>{e.abort(q)});var n=a.next;0!==(a.f&m)?a.parent=null:xa(a,t),a=n}}function xa(e,t=!0){var a=!1;(t||262144&e.f)&&null!==e.nodes&&null!==e.nodes.end&&(_a(e.nodes.start,e.nodes.end),a=!0),Ie(e,$),Ca(e,t&&!a),na(e,0);var n=e.nodes&&e.nodes.t;if(null!==n)for(const e of n)e.stop();Aa(e),e.f^=$,e.f|=x;var r=e.parent;null!==r&&null!==r.first&&$a(e),e.next=e.prev=e.teardown=e.ctx=e.deps=e.fn=e.nodes=e.ac=e.b=null}function _a(e,t){for(;null!==e;){var a=e===t?null:xe(e);e.remove(),e=a}}function $a(e){var t=e.parent,a=e.prev,n=e.next;null!==a&&(a.next=n),null!==n&&(n.prev=a),null!==t&&(t.first===e&&(t.first=n),t.last===e&&(t.last=a))}function La(e,t,a=!0){var n=[];Ta(e,n,!0);var r=()=>{a&&xa(e),t&&t()},i=n.length;if(i>0){var o=()=>--i||r();for(var l of n)l.out(o)}else r()}function Ta(e,t,a){if(0===(e.f&C)){e.f^=C;var n=e.nodes&&e.nodes.t;if(null!==n)for(const e of n)(e.is_global||a)&&t.push(e);for(var r=e.first;null!==r;){var i=r.next;if(0===(r.f&m))Ta(r,t,!!(0!==(r.f&L)||0!==(r.f&b)&&0!==(e.f&p))&&a);r=i}}}function Sa(e){ja(e,!0)}function ja(e,t){if(0!==(e.f&C)){e.f^=C,0===(e.f&k)&&(Ie(e,w),tt.ensure().schedule(e));for(var a=e.first;null!==a;){var n=a.next;ja(a,!!(0!==(a.f&L)||0!==(a.f&b))&&t),a=n}var r=e.nodes&&e.nodes.t;if(null!==r)for(const e of r)(e.is_global||t)&&e.in()}}function za(e,t){if(e.nodes)for(var a=e.nodes.start,n=e.nodes.end;null!==a;){var r=a===n?null:xe(a);t.append(a),a=r}}function Ea(e){const t={get:e=>Me(t.store)[e],set:(e,a)=>{"string"==typeof e?Object.assign(Me(t.store),{[e]:a}):Object.assign(Me(t.store),e),t.store.set(Me(t.store))},store:He(e)};return t}globalThis.$altcha=globalThis.$altcha||{algorithms:new Map,defaults:Ea({}),i18n:Ea({}),instances:new Set,plugins:new Set};globalThis.$altcha.i18n.set("en",{ariaLinkLabel:"Altcha (official website)",cancel:"Cancel",enterCode:"Enter code",enterCodeAria:"Enter code you hear. Press Space to play audio.",enterCodeFromImage:"To proceed, please enter the code from the image below.",error:"Verification failed. Try again later.",expired:"Verification expired. Try again.",footer:'Protected by ALTCHA',getAudioChallenge:"Get an audio challenge",label:"I'm not a robot",loading:"Loading...",reload:"Reload",verify:"Verify",verificationRequired:"Verification required!",verified:"Verified",verifying:"Verifying...",waitAlert:"Verifying... please wait."});"undefined"!=typeof window&&((window.__svelte??={}).v??=new Set).add("5");const Ia=Symbol("events"),Va=new Set,Pa=new Set;function Ra(e,t,a,n={}){function r(e){if(n.capture||qa.call(t,e),!e.cancelBubble)return Vt(()=>a?.call(this,e))}return e.startsWith("pointer")||e.startsWith("touch")||"wheel"===e?te(()=>{t.addEventListener(e,r,n)}):t.addEventListener(e,r,n),r}function Oa(e,t,a,n,r){var i={capture:n,passive:r},o=Ra(e,t,a,i);(t===document.body||t===window||t===document||t instanceof HTMLMediaElement)&&ha(()=>{t.removeEventListener(e,o,i)})}function Fa(e,t,a){(t[Ia]??={})[e]=a}function Ha(e){for(var t=0;ti||a});var u=Ft,f=qt;Mt(null),Dt(null);try{for(var h,v=[];null!==i;){var g=i.assignedSlot||i.parentNode||i.host||null;try{var p=i[Ia]?.[n];null==p||i.disabled&&e.target!==i||p.call(i,e)}catch(e){h?v.push(e):h=e}if(e.cancelBubble||g===t||null===g)break;i=g}if(h){for(let e of v)queueMicrotask(()=>{throw e});throw h}}finally{e[Ia]=t,delete e.currentTarget,Mt(u),Dt(f)}}}const Da=globalThis?.window?.trustedTypes&&globalThis.window.trustedTypes.createPolicy("svelte-trusted-html",{createHTML:e=>e});function Na(e){var t=Te("template");return t.innerHTML=function(e){return Da?.createHTML(e)??e}(e.replaceAll("","\x3c!----\x3e")),t.content}function Ua(e,t){var a=qt;null===a.nodes&&(a.nodes={start:e,end:t,a:null,t:null})}function Ba(e,t){var a,n=!!(1&t),r=!!(2&t),i=!e.startsWith("");return()=>{if(ie)return Ua(re,null),re;void 0===a&&(a=Na(i?e:""+e),n||(a=Ce(a)));var t=r||me?document.importNode(a,!0):a.cloneNode(!0);n?Ua(Ce(t),t.lastChild):Ua(t,t);return t}}function Ka(e,t,a="svg"){var n,r=`<${a}>${!e.startsWith("")?e:""+e}`;return()=>{if(ie)return Ua(re,null),re;if(!n){var e=Na(r);n=Ce(Ce(e))}var t=n.cloneNode(!0);return Ua(t,t),t}}function Ga(e,t){return Ka(e,0,"svg")}function Wa(e=""){if(!ie){var t=Ae(e+"");return Ua(t,t),t}var a=re;return 3!==a.nodeType?(a.before(a=Ae()),le(a)):Se(a),Ua(a,a),a}function Ya(){if(ie)return Ua(re,null),re;var e=document.createDocumentFragment(),t=document.createComment(""),a=Ae();return e.append(t,a),Ua(t,a),e}function Za(e,t){if(ie){var a=qt;return 0!==(a.f&_)&&null!==a.nodes.end||(a.nodes.end=re),void se()}null!==e&&e.before(t)}function Ja(e){return e.endsWith("capture")&&"gotpointercapture"!==e&&"lostpointercapture"!==e}const Xa=["beforeinput","click","change","dblclick","contextmenu","focusin","focusout","input","keydown","keyup","mousedown","mousemove","mouseout","mouseover","mouseup","pointerdown","pointermove","pointerout","pointerover","pointerup","touchend","touchmove","touchstart"];function Qa(e){return Xa.includes(e)}const en={formnovalidate:"formNoValidate",ismap:"isMap",nomodule:"noModule",playsinline:"playsInline",readonly:"readOnly",defaultvalue:"defaultValue",defaultchecked:"defaultChecked",srcobject:"srcObject",novalidate:"noValidate",allowfullscreen:"allowFullscreen",disablepictureinpicture:"disablePictureInPicture",disableremoteplayback:"disableRemotePlayback"};function tn(e){return e=e.toLowerCase(),en[e]??e}const an=["touchstart","touchmove"];function nn(e){return an.includes(e)}function rn(e,t){var a=null==t?"":"object"==typeof t?`${t}`:t;a!==(e[H]??=e.nodeValue)&&(e[H]=a,e.nodeValue=`${a}`)}function on(e,t){return cn(e,t)}function ln(e,t){we(),t.intro=t.intro??!1;const a=t.target,n=ie,r=re;try{for(var i=Ce(a);i&&(8!==i.nodeType||"["!==i.data);)i=xe(i);if(!i)throw K;oe(!0),le(i);const n=cn(e,{...t,anchor:i});return oe(!1),n}catch(n){if(n instanceof Error&&n.message.split("\n").some(e=>e.startsWith("https://svelte.dev/e/")))throw n;return n!==K&&console.warn("Failed to hydrate: ",n),!1===t.recover&&function(){throw new Error("https://svelte.dev/e/hydration_failed")}(),we(),a.textContent="",oe(!1),on(e,t)}finally{oe(n),le(r)}}const sn=new Map;function cn(e,{target:t,anchor:a,props:n={},events:i,context:o,intro:l=!0,transformError:s}){we();var c=void 0,d=function(e){tt.ensure();const t=ua(524352,e);return(e={})=>new Promise(a=>{e.outro?La(t,()=>{xa(t),a(void 0)}):(xa(t),a(void 0))})}(()=>{var l=a??t.appendChild(Ae());!function(e,t,a,n){new dt(e,t,a,n)}(l,{pending:()=>{}},t=>{if(J({}),o&&(Y.c=o),i&&(n.$$events=i),ie&&Ua(t,null),c=e(t,n)||{},ie&&(qt.nodes.end=re,null===re||8!==re.nodeType||"]"!==re.data))throw ne(),K;X()},s);var d=new Set,u=e=>{for(var a=0;a{for(var e of d)for(const a of[t,document]){var n=sn.get(a),r=n.get(e);0==--r?(a.removeEventListener(e,qa),n.delete(e),0===n.size&&sn.delete(a)):n.set(e,r)}Pa.delete(u),l!==a&&l.parentNode?.removeChild(l)}});return dn.set(c,d),c}let dn=new WeakMap;class un{anchor;#G=new Map;#W=new Map;#Y=new Map;#Z=new Set;#J=!0;constructor(e,t=!0){this.anchor=e,this.#J=t}#x=e=>{if(this.#G.has(e)){var t=this.#G.get(e),a=this.#W.get(t);if(a)Sa(a),this.#Z.delete(t);else{var n=this.#Y.get(t);n&&(this.#W.set(t,n.effect),this.#Y.delete(t),n.fragment.lastChild.remove(),this.anchor.before(n.fragment),a=n.effect)}for(const[t,a]of this.#G){if(this.#G.delete(t),t===e)break;const n=this.#Y.get(a);n&&(xa(n.effect),this.#Y.delete(a))}for(const[e,n]of this.#W){if(e===t||this.#Z.has(e))continue;const r=()=>{if(Array.from(this.#G.values()).includes(e)){var t=document.createDocumentFragment();za(n,t),t.append(Ae()),this.#Y.set(e,{effect:n,fragment:t})}else xa(n);this.#Z.delete(e),this.#W.delete(e)};this.#J||!a?(this.#Z.add(e),La(n,r,!1)):r()}}};#X=e=>{this.#G.delete(e);const t=Array.from(this.#G.values());for(const[e,a]of this.#Y)t.includes(e)||(xa(a.effect),this.#Y.delete(e))};ensure(e,t){var a=Be;!t||this.#W.has(e)||this.#Y.has(e)||this.#W.set(e,wa(()=>t(this.anchor)));this.#G.set(a,e),ie&&(this.anchor=re),this.#x(a)}}function fn(e){null===Y&&function(){throw new Error("https://svelte.dev/e/lifecycle_outside_component")}(),va(()=>{const t=ca(e);if("function"==typeof t)return t})}function hn(e,t,a=!1){var n;ie&&(n=re,se());var r=new un(e);function i(e,t){if(ie){var a=fe(n);if(e!==parseInt(a.substring(1))){var i=ue();return le(i),r.anchor=i,oe(!1),r.ensure(e,t),void oe(!0)}}r.ensure(e,t)}ya(()=>{var e=!1;t((t,a=0)=>{e=!0,i(a,t)}),e||i(-1,null)},a?L:0)}const vn=Symbol("NaN");function gn(e,t,a=!1,n=!1,r=!1,i=!1){var o=e,l="";if(a){var s=e;ie&&(o=le(Ce(s)))}ma(()=>{var e=qt;if(l!==(l=t()??"")){if(a&&!ie)return e.nodes=null,s.innerHTML=l,void(""!==l&&Ua(Ce(s),s.lastChild));if(null!==e.nodes&&(_a(e.nodes.start,e.nodes.end),e.nodes=null),""!==l){if(ie){re.data;for(var i=se(),c=i;null!==i&&(8!==i.nodeType||""!==i.data);)c=i,i=xe(i);if(null===i)throw ne(),K;return Ua(re,c),void(o=le(i))}var d=Te(n?"svg":r?"math":"template",n?"http://www.w3.org/2000/svg":r?"http://www.w3.org/1998/Math/MathML":void 0);d.innerHTML=l;var u=n||r?d:d.content;if(Ua(Ce(u),u.lastChild),n||r)for(;Ce(u);)o.before(Ce(u));else o.before(u)}}else ie&&se()})}function pn(e,t){var a,n=void 0;ka(()=>{n!==(n=t())&&(a&&(xa(a),a=null),n&&(a=wa(()=>{pa(()=>n(e))})))})}function bn(e){var t,a,n="";if("string"==typeof e||"number"==typeof e)n+=e;else if("object"==typeof e)if(Array.isArray(e)){var r=e.length;for(t=0;t=0;){var l=o+i;0!==o&&!yn.includes(n[o-1])||l!==n.length&&!yn.includes(n[l])?o=l:n=(0===o?"":n.substring(0,o))+n.substring(l+1)}return""===n?null:n}(a,0,i);ie&&l===e.getAttribute("class")||(null==l?e.removeAttribute("class"):t?e.className=l:e.setAttribute("class",l)),e[O]=a}else if(i&&r!==i)for(var s in i){var c=!!i[s];null!=r&&c===!!r[s]||e.classList.toggle(s,c)}return i}function Cn(e,t={},a,n){for(var r in a){var i=a[r];t[r]!==i&&(null==a[r]?e.style.removeProperty(r):e.style.setProperty(r,i,n))}}function xn(e,t,a,n){var r=e[F];if(ie||r!==t){var i=function(e,t){if(t){var a,n,r="";if(Array.isArray(t)?(a=t[0],n=t[1]):a=t,e){e=String(e).replaceAll(/\s*\/\*.*?\*\/\s*/g,"").trim();var i=!1,o=0,l=!1,s=[];a&&s.push(...Object.keys(a).map(wn)),n&&s.push(...Object.keys(n).map(wn));var c=0,d=-1;const t=e.length;for(var u=0;u{if(!t){if(t=!0,e.hasAttribute("value")){var a=e.value;Fn(e,"value",null),e.value=a}if(e.hasAttribute("checked")){var n=e.checked;Fn(e,"checked",null),e.checked=n}}};e[M]=a,te(a),It()}}function On(e,t){t?e.hasAttribute("selected")||e.setAttribute("selected",""):e.removeAttribute("selected")}function Fn(e,t,a,n){var r=Mn(e);ie&&(r[t]=e.getAttribute(t),"src"===t||"srcset"===t||"href"===t&&e.nodeName===zn)||r[t]!==(r[t]=a)&&("loading"===t&&(e[P]=a),null==a?e.removeAttribute(t):"string"!=typeof a&&Dn(e).includes(t)?e[t]=a:e.setAttribute(t,a))}function Hn(e,t,a=[],n=[],r=[],i,o=!1,l=!1){ut(r,a,n,a=>{var n=void 0,r={},i=e.nodeName===Vn,s=!1;if(ka(()=>{var c=t(...a.map(oa)),d=function(e,t,a,n,r=!1){if(ie&&r&&e.nodeName===En){var i=e;("checkbox"===i.type?"defaultChecked":"defaultValue")in a||Rn(i)}var o=Mn(e),l=o[Sn],s=!o[jn];let c=ie&&l;c&&oe(!1);var d=t||{},u=e.nodeName===In;for(var f in t)f in a||(a[f]=null);a.class?a.class=mn(a.class):a[Ln]&&(a.class=null),a[Tn]&&(a.style??=null);var h=Dn(e);for(const n in a){let r=a[n];if(u&&"value"===n&&null==r)e.value=e.__value="",d[n]=r;else if("class"!==n)if("style"!==n){var v=d[n];if(r!==v||void 0===r&&e.hasAttribute(n)){d[n]=r;var g=n[0]+n[1];if("$$"!==g)if("on"===g){const t={},a="$$"+n;let i=n.slice(2);var p=Qa(i);if(Ja(i)&&(i=i.slice(0,-7),t.capture=!0),!p&&v){if(null!=r)continue;e.removeEventListener(i,d[a],t),d[a]=null}if(p)Fa(i,e,r),Ha([i]);else if(null!=r){let r=function(e){d[n].call(this,e)};d[a]=Ra(i,e,r,t)}}else if("style"===n)Fn(e,n,r);else if("autofocus"===n)zt(e,Boolean(r));else if(l||"__value"!==n&&("value"!==n||null==r))if("selected"===n&&u)On(e,r);else{var b=n;s||(b=tn(b));var m="defaultValue"===b||"defaultChecked"===b;if(null!=r||l||m)m||h.includes(b)&&(l||"string"!=typeof r)?(e[b]=r,b in o&&(o[b]=G)):"function"!=typeof r&&Fn(e,b,r);else if(o[n]=null,"value"===b||"checked"===b){let a=e;const n=void 0===t;if("value"===b){let e=a.defaultValue;a.removeAttribute(b),a.defaultValue=e,a.value=a.__value=n?e:null}else{let e=a.defaultChecked;a.removeAttribute(b),a.defaultChecked=e,a.checked=!!n&&e}}else e.removeAttribute(n)}else e.value=e.__value=r}}else xn(e,r,t?.[Tn],a[Tn]),d[n]=r,d[Tn]=a[Tn];else An(e,"http://www.w3.org/1999/xhtml"===e.namespaceURI,r,0,t?.[Ln],a[Ln]),d[n]=r,d[Ln]=a[Ln]}return c&&oe(!0),d}(e,n,c,0,o,l);s&&i&&"value"in c&&_n(e,c.value);for(let e of Object.getOwnPropertySymbols(r))c[e]||xa(r[e]);for(let t of Object.getOwnPropertySymbols(c)){var u=c[t];"@attach"!==t.description||n&&u===n[t]||(r[t]&&xa(r[t]),r[t]=wa(()=>pn(e,()=>u))),d[t]=u}n=d}),i){var c=e;pa(()=>{_n(c,n.value,!0),function(e){var t=new MutationObserver(()=>{_n(e,e.__value)});t.observe(e,{childList:!0,subtree:!0,attributes:!0,attributeFilter:["value"]}),ha(()=>{t.disconnect()})}(c)})}s=!0})}function Mn(e){return e[R]??={[Sn]:e.nodeName.includes("-"),[jn]:e.namespaceURI===W}}var qn=new Map;function Dn(e){var t,a=e.getAttribute("is")||e.nodeName,n=qn.get(a);if(n)return n;qn.set(a,n=[]);for(var r=e,i=Element.prototype;i!==r;){for(var o in t=s(r))t[o].set&&"innerHTML"!==o&&"textContent"!==o&&"innerText"!==o&&n.push(o);r=u(r)}return n}function Nn(e,t,a=t){var n=new WeakSet;!function(e,t,a,n=a){e.addEventListener(t,()=>Vt(a));const r=e[M];e[M]=r?()=>{r(),n(!0)}:()=>n(!0),It()}(e,"input",async r=>{var i=r?e.defaultValue:e.value;if(i=Un(e)?Bn(i):i,a(i),null!==Be&&n.add(Be),await ia(),i!==(i=t())){var o=e.selectionStart,l=e.selectionEnd,s=e.value.length;if(e.value=i??"",null!==l){var c=e.value.length;o===l&&l===s&&c>s?(e.selectionStart=c,e.selectionEnd=c):(e.selectionStart=o,e.selectionEnd=Math.min(l,c))}}}),(ie&&e.defaultValue!==e.value||null==ca(t)&&e.value)&&(a(Un(e)?Bn(e.value):e.value),null!==Be&&n.add(Be)),ba(()=>{var a=t();if(e===document.activeElement){var r=Be;if(n.has(r))return}Un(e)&&a===Bn(e.value)||("date"!==e.type||a||e.value)&&a!==e.value&&(e.value=a??"")})}function Un(e){var t=e.type;return"number"===t||"range"===t}function Bn(e){return""===e?null:+e}function Kn(e,t){return e===t||e?.[I]===t}function Gn(e={},t,a,n){var r=Y.r,i=qt;return pa(()=>{var n,o;return ba(()=>{n=o,o=[],ca(()=>{Kn(a(...o),e)||(t(e,...o),n&&Kn(a(...n),e)&&t(null,...n))})}),()=>{let n=i;for(;n!==r&&null!==n.parent&&n.parent.f&$;)n=n.parent;const l=n.teardown;n.teardown=()=>{o&&Kn(a(...o),e)&&t(null,...o),l?.()}}}),e}const Wn={get(e,t){if(!e.exclude.includes(t))return e.props[t]},set:(e,t)=>!1,getOwnPropertyDescriptor(e,t){if(!e.exclude.includes(t))return t in e.props?{enumerable:!0,configurable:!0,value:e.props[t]}:void 0},has:(e,t)=>!e.exclude.includes(t)&&t in e.props,ownKeys:e=>Reflect.ownKeys(e.props).filter(t=>!e.exclude.includes(t))};function Yn(e,t,a){return new Proxy({props:e,exclude:t},Wn)}function Zn(e,t,a,n){var r,i=n,o=!0,l=()=>(o&&(o=!1,i=n),i);void 0===e[t]&&void 0!==n&&l(),r=()=>{var a=e[t];return void 0===a?l():(o=!0,a)};var s=!1,c=vt(()=>(s=!1,r())),d=qt;return function(e,t){if(arguments.length>0){const a=t?oa(c):e;return Lt(c,a),s=!0,void 0!==i&&(i=a),e}return Rt&&s||0!==(d.f&x)?c.v:oa(c)}}class Jn{#Q;#ee;constructor(e){var t=new Map,a=(e,a)=>{var n=$t(a,!1,!1);return t.set(e,n),n};const n=new Proxy({...e.props||{},$$events:{}},{get:(e,n)=>oa(t.get(n)??a(n,Reflect.get(e,n))),has:(e,n)=>n===V||(oa(t.get(n)??a(n,Reflect.get(e,n))),Reflect.has(e,n)),set:(e,n,r)=>(Lt(t.get(n)??a(n,r),r),Reflect.set(e,n,r))});this.#ee=(e.hydrate?ln:on)(e.component,{target:e.target,anchor:e.anchor,props:n,context:e.context,intro:e.intro??!1,recover:e.recover,transformError:e.transformError}),e?.props?.$$host&&!1!==e.sync||at(),this.#Q=n.$$events;for(const e of Object.keys(this.#ee))"$set"!==e&&"$destroy"!==e&&"$on"!==e&&o(this,e,{get(){return this.#ee[e]},set(t){this.#ee[e]=t},enumerable:!0});this.#ee.$set=e=>{Object.assign(n,e)},this.#ee.$destroy=()=>{!function(e,t){const a=dn.get(e);a?(dn.delete(e),a(t)):Promise.resolve()}(this.#ee)}}$set(e){this.#ee.$set(e)}$on(e,t){this.#Q[e]=this.#Q[e]||[];const a=(...e)=>t.call(this,...e);return this.#Q[e].push(a),()=>{this.#Q[e]=this.#Q[e].filter(e=>e!==a)}}$destroy(){this.#ee.$destroy()}}let Xn=class{};function Qn(e,t,a,n){const r=a[e]?.type;if(t="Boolean"===r&&"boolean"!=typeof t?null!=t:t,!n||!a[e])return t;if("toAttribute"===n)switch(r){case"Object":case"Array":return null==t?null:JSON.stringify(t);case"Boolean":return t?"":null;case"Number":return null==t?null:t;default:return t}else switch(r){case"Object":case"Array":return t&&JSON.parse(t);case"Boolean":default:return t;case"Number":return null!=t?+t:t}}function er(e,t,a,n,r,s){let c=class extends Xn{constructor(){super(e,a,r),this.$$p_d=t}static get observedAttributes(){return i(t).map(e=>(t[e].attribute||e).toLowerCase())}};return i(t).forEach(e=>{o(c.prototype,e,{get(){return this.$$c&&e in this.$$c?this.$$c[e]:this.$$d[e]},set(a){a=Qn(e,a,t),this.$$d[e]=a;var n=this.$$c;if(n){var r=l(n,e)?.get;r?n[e]=a:n.$set({[e]:a})}}})}),n.forEach(e=>{o(c.prototype,e,{get(){return this.$$c?.[e]}})}),e.element=c,c}"function"==typeof HTMLElement&&(Xn=class extends HTMLElement{$$ctor;$$s;$$c;$$cn=!1;$$d={};$$r=!1;$$p_d={};$$l={};$$l_u=new Map;$$me;$$shadowRoot=null;constructor(e,t,a){super(),this.$$ctor=e,this.$$s=t,a&&(this.$$shadowRoot=this.attachShadow(a))}addEventListener(e,t,a){if(this.$$l[e]=this.$$l[e]||[],this.$$l[e].push(t),this.$$c){const a=this.$$c.$on(e,t);this.$$l_u.set(t,a)}super.addEventListener(e,t,a)}removeEventListener(e,t,a){if(super.removeEventListener(e,t,a),this.$$c){const e=this.$$l_u.get(t);e&&(e(),this.$$l_u.delete(t))}}async connectedCallback(){if(this.$$cn=!0,!this.$$c){let t=function(e){return t=>{const a=Te("slot");"default"!==e&&(a.name=e),Za(t,a)}};if(await Promise.resolve(),!this.$$cn||this.$$c)return;const a={},n=function(e){const t={};return e.childNodes.forEach(e=>{t[e.slot||"default"]=!0}),t}(this);for(const e of this.$$s)e in n&&("default"!==e||this.$$d.children?a[e]=t(e):(this.$$d.children=t(e),a.default=!0));for(const e of this.attributes){const t=this.$$g_p(e.name);t in this.$$d||(this.$$d[t]=Qn(t,e.value,this.$$p_d,"toProp"))}for(const e in this.$$p_d)e in this.$$d||void 0===this[e]||(this.$$d[e]=this[e],delete this[e]);this.$$c=(e={component:this.$$ctor,target:this.$$shadowRoot||this,props:{...this.$$d,$$slots:a,$$host:this}},new Jn(e)),this.$$me=function(e){tt.ensure();const t=ua(524352,e);return()=>{xa(t)}}(()=>{ba(()=>{this.$$r=!0;for(const e of i(this.$$c)){if(!this.$$p_d[e]?.reflect)continue;this.$$d[e]=this.$$c[e];const t=Qn(e,this.$$d[e],this.$$p_d,"toAttribute");null==t?this.removeAttribute(this.$$p_d[e].attribute||e):this.setAttribute(this.$$p_d[e].attribute||e,t)}this.$$r=!1})});for(const e in this.$$l)for(const t of this.$$l[e]){const a=this.$$c.$on(e,t);this.$$l_u.set(t,a)}this.$$l={}}var e}attributeChangedCallback(e,t,a){this.$$r||(e=this.$$g_p(e),this.$$d[e]=Qn(e,a,this.$$p_d,"toProp"),this.$$c?.$set({[e]:this.$$d[e]}))}disconnectedCallback(){this.$$cn=!1,Promise.resolve().then(()=>{!this.$$cn&&this.$$c&&(this.$$c.$destroy(),this.$$me(),this.$$c=void 0)})}$$g_p(e){return i(this.$$p_d).find(t=>this.$$p_d[t].attribute===e||!this.$$p_d[t].attribute&&t.toLowerCase()===e)||e}});var tr=Ba('
');function ar(e,t){J(t,!0);let a,n=Zn(t,"loading"),r=Yn(t,["$$slots","$$events","$$legacy","$$host","loading"]);var i={get loading(){return n()},set loading(e){n(e),at()}},o=tr(),l=_e(o);Hn(l,()=>({type:"checkbox",...r}),void 0,void 0,void 0,0,!0),Gn(l,e=>a=e,()=>a);var s=Le(l,2);return de(2),ce(o),ma(()=>Fn(o,"data-loading",n())),Fa("click",s,function(){a?.click()}),Za(e,o),X(i)}Ha(["click"]),er(ar,{loading:{}},[],[],{mode:"open"});var nr=Ba('
');function rr(e,t){J(t,!0);let a=Zn(t,"loading"),n=Yn(t,["$$slots","$$events","$$legacy","$$host","loading"]);var r={get loading(){return a()},set loading(e){a(e),at()}},i=nr();return Hn(_e(i),()=>({type:"checkbox",...n}),void 0,void 0,void 0,0,!0),de(2),ce(i),ma(()=>Fn(i,"data-loading",a())),Za(e,i),X(r)}er(rr,{loading:{}},[],[],{mode:"open"});var ir=Ba('
');function or(e,t){J(t,!0);let a=Zn(t,"strings");var n={get strings(){return a()},set strings(e){a(e),at()}},r=ir(),i=_e(r);return Fn(i,"href","https://altcha.org"),ce(r),ma(()=>Fn(i,"aria-label",a().ariaLinkLabel)),Za(e,r),X(n)}er(or,{strings:{}},[],[],{mode:"open"});var lr=Ba('');function sr(e,t){J(t,!0);let a=Zn(t,"logo"),n=Zn(t,"strings");var r={get logo(){return a()},set logo(e){a(e),at()},get strings(){return n()},set strings(e){n(e),at()}},i=lr(),o=_e(i);gn(o,()=>n().footer,!0),ce(o);var l=Le(o,2),s=e=>{or(e,{get strings(){return n()}})};return hn(l,e=>{a()&&e(s)}),ce(i),Za(e,i),X(r)}er(sr,{logo:{},strings:{}},[],[],{mode:"open"});var cr=Ba('
');function dr(e,t){J(t,!0);let a,n=Zn(t,"loading"),r=Yn(t,["$$slots","$$events","$$legacy","$$host","loading"]);var i={get loading(){return n()},set loading(e){n(e),at()}},o=cr(),l=_e(o);Hn(l,()=>({type:"checkbox",...r}),void 0,void 0,void 0,0,!0),Gn(l,e=>a=e,()=>a);var s=Le(l,2);return ce(o),ma(()=>Fn(o,"data-loading",n())),Fa("click",s,function(){a?.click()}),Za(e,o),X(i)}Ha(["click"]),er(dr,{loading:{}},[],[],{mode:"open"});var ur=(e=>(e.ERROR="error",e.LOADING="loading",e.PLAYING="playing",e.PAUSED="paused",e.READY="ready",e))(ur||{}),fr=(e=>(e.CODE="code",e.ERROR="error",e.VERIFIED="verified",e.VERIFYING="verifying",e.UNVERIFIED="unverified",e.EXPIRED="expired",e))(fr||{}),hr=Ba('
'),vr=Ba('
'),gr=Ga(''),pr=Ga(''),br=Ga(''),mr=Ba(''),yr=Ba(''),kr=Ba('
');function wr(e,t){J(t,!0);let a=Zn(t,"audioUrl"),n=Zn(t,"codeChallenge"),r=Zn(t,"config"),i=Zn(t,"imageUrl"),o=Zn(t,"onCancel"),l=Zn(t,"onReload"),s=Zn(t,"onSubmit"),c=Zn(t,"strings"),d=_t(void 0),u=_t(void 0),f=_t(void 0),h=_t(!1),v=_t(""),g=_t(!1);function p(){Lt(d,ur.PAUSED,!0)}function b(e){Lt(d,ur.ERROR,!0)}function m(){Lt(d,ur.READY,!0)}function y(){Lt(d,ur.LOADING,!0)}function k(){Lt(d,ur.PLAYING,!0)}function w(){Lt(d,ur.PAUSED,!0)}function A(){oa(u)?oa(d)===ur.LOADING||(oa(u).paused?(a()&&oa(u).src!==a()&&(oa(u).src=a()),oa(u).currentTime=0,oa(u).play()):oa(u).pause()):(Lt(g,!0),requestAnimationFrame(()=>{oa(u)&&a()&&(oa(u).src=a(),oa(u).play())}))}fn(()=>(r().disableAutoFocus||ia().then(()=>{oa(f)?.focus()}),()=>{oa(u)&&(oa(u).pause(),Lt(u,void 0))}));var C={get audioUrl(){return a()},set audioUrl(e){a(e),at()},get codeChallenge(){return n()},set codeChallenge(e){n(e),at()},get config(){return r()},set config(e){r(e),at()},get imageUrl(){return i()},set imageUrl(e){i(e),at()},get onCancel(){return o()},set onCancel(e){o(e),at()},get onReload(){return l()},set onReload(e){l(e),at()},get onSubmit(){return s()},set onSubmit(e){s(e),at()},get strings(){return c()},set strings(e){c(e),at()}},x=kr(),_=_e(x),$=_e(_),L=e=>{var t=hr(),a=_e(t,!0);ce(t),ma(()=>rn(a,c().verificationRequired)),Za(e,t)};hn($,e=>{"standard"!==r().codeChallengeDisplay&&e(L)});var T=Le($,2),S=_e(T,!0);ce(T);var j=Le(T,2),z=Le(j,2),E=_e(z);Rn(E),E.disabled=oa(h),Gn(E,e=>Lt(f,e),()=>oa(f));var I=Le(E,2),V=e=>{var t=mr(),a=_e(t),n=e=>{Za(e,vr())},r=e=>{Za(e,gr())},i=e=>{Za(e,pr())},o=e=>{Za(e,br())};hn(a,e=>{oa(d)===ur.LOADING?e(n):oa(d)===ur.ERROR?e(r,1):oa(d)===ur.PLAYING?e(i,2):e(o,-1)}),ce(t),ma(()=>{Fn(t,"title",c().getAudioChallenge),t.disabled=oa(d)===ur.LOADING||oa(d)===ur.ERROR,Fn(t,"aria-label",oa(d)===ur.LOADING?c().loading:c().getAudioChallenge)}),Oa("click",t,()=>A(),!0),Za(e,t)};hn(I,e=>{n().audio&&e(V)});var P=Le(I,2);ce(z);var R=Le(z,2),O=_e(R),F=_e(O,!0);ce(O);var H=Le(O,2),M=_e(H,!0);ce(H),ce(R),ce(_);var q=Le(_,2),D=e=>{var t=yr();Gn(t,e=>Lt(u,e),()=>oa(u)),Oa("error",t,b),Oa("loadstart",t,y),Oa("canplay",t,m),Oa("pause",t,w),Oa("playing",t,k),Oa("ended",t,p),Za(e,t)};return hn(q,e=>{oa(g)&&e(D)}),ce(x),ma(()=>{rn(S,c().enterCodeFromImage),Fn(j,"src",i()),Fn(E,"minlength",n().length||1),Fn(E,"maxlength",n().length),Fn(E,"placeholder",c().enterCode),Fn(E,"aria-label",oa(d)===ur.LOADING?c().loading:oa(d)===ur.PLAYING?"":c().enterCodeAria),Fn(E,"aria-live",oa(d)?"assertive":"polite"),Fn(E,"aria-busy",oa(d)===ur.LOADING),Fn(P,"title",c().reload),Fn(P,"aria-label",c().reload),Fn(O,"aria-label",c().verify),rn(F,c().verify),Fn(H,"aria-label",c().cancel),rn(M,c().cancel)}),Oa("submit",_,function(e){e.preventDefault(),e.stopPropagation(),s()?.(oa(v))},!0),Fa("keydown",E,function(e){"Space"===e.code?(e.preventDefault(),e.stopPropagation(),A()):"Escape"===e.code&&(e.preventDefault(),e.stopPropagation(),o()?.())}),Nn(E,()=>oa(v),e=>Lt(v,e)),Oa("click",P,()=>l()?.(),!0),Oa("click",H,()=>o()?.(),!0),Za(e,x),X(C)}Ha(["keydown"]),er(wr,{audioUrl:{},codeChallenge:{},config:{},imageUrl:{},onCancel:{},onReload:{},onSubmit:{},strings:{}},[],[],{mode:"open"});var Ar=Ba('
'),Cr=Ba('
'),xr=Ba('
×
'),_r=Ba('
',1);function $r(e,t){J(t,!0);let a=Zn(t,"anchor"),n=Zn(t,"children"),r=Zn(t,"display",0,"standard"),i=Zn(t,"backdrop",0,!1),o=Zn(t,"onClickOutside"),l=Zn(t,"onClickOutsideDelay",0,600),s=Zn(t,"onClose"),c=Zn(t,"placement",0,"auto"),d=Zn(t,"updateUISignal"),u=Zn(t,"variant",0,"neutral"),f=Yn(t,["$$slots","$$events","$$legacy","$$host","anchor","children","display","backdrop","onClickOutside","onClickOutsideDelay","onClose","placement","updateUISignal","variant"]),v=_t(void 0),g=_t(void 0),p=_t(!1),b=_t(0);function m(){s()?.()}function y(){if(a()&&"auto"===c()&&oa(v)){const e=a().getBoundingClientRect(),t=document.documentElement.clientHeight-(e.top+e.height){"auto"!==c()&&Lt(p,"top"===c())}),va(()=>{d()&&y()}),fn(()=>{const e="bottomsheet"===r()||"overlay"===r();return e&&(oa(g)&&document.body.append(oa(g)),oa(v)&&document.body.append(oa(v))),y(),ia().then(()=>{Lt(b,Date.now(),!0)}),()=>{e&&(oa(g)&&document.body.removeChild(oa(g)),oa(v)&&document.body.removeChild(oa(v)))}});var k={get anchor(){return a()},set anchor(e){a(e),at()},get children(){return n()},set children(e){n(e),at()},get display(){return r()},set display(e="standard"){r(e),at()},get backdrop(){return i()},set backdrop(e=!1){i(e),at()},get onClickOutside(){return o()},set onClickOutside(e){o(e),at()},get onClickOutsideDelay(){return l()},set onClickOutsideDelay(e=600){l(e),at()},get onClose(){return s()},set onClose(e){s(e),at()},get placement(){return c()},set placement(e="auto"){c(e),at()},get updateUISignal(){return d()},set updateUISignal(e){d(e),at()},get variant(){return u()},set variant(e="neutral"){u(e),at()}},w=_r();Oa("click",pe,function(e){const t=e.target;oa(v)?.contains(t)||l()&&!(oa(b)+l(){var t=Ar();Gn(t,e=>Lt(g,e),()=>oa(g)),Za(e,t)};hn(A,e=>{i()&&e(C)});var x=Le(A,2);Hn(x,()=>({...f,class:`altcha-popover ${(t.class||"")??""}`,"data-popover":!0,"data-variant":u(),"data-top":oa(p),"data-display":r()}));var _=_e(x),$=e=>{Za(e,Cr())};hn(_,e=>{"standard"===r()&&e($)});var T=Le(_,2),S=e=>{var t=xr();Oa("click",t,m,!0),Za(e,t)};hn(T,e=>{"standard"!==r()&&e(S)});var j=Le(T,2);return function(e,t,...a){var n=new un(e);ya(()=>{const e=t()??null;n.ensure(e,e&&(t=>e(t,...a)))},L)}(_e(j),()=>n()??h),ce(j),ce(x),Gn(x,e=>Lt(v,e),()=>oa(v)),Za(e,w),X(k)}async function Lr(e){const{challenge:t,concurrency:a=navigator.hardwareConcurrency,controller:n=new AbortController,createWorker:r,onOutOfMemory:i=e=>e>1?Math.floor(e/2):0,counterMode:o,timeout:l=9e4}=e,s=Math.min(16,Math.max(1,a)),c=[],d=()=>{for(const e of c)e.terminate()};for(let e=0;e(n.signal.addEventListener("abort",()=>{e.postMessage({type:"abort"})}),new Promise((n,r)=>{e.addEventListener("error",e=>{r(e)}),e.addEventListener("message",t=>{if(t.data){for(const t of c)t!==e&&t.postMessage({type:"abort"});if(t.data.error)return r(new Error(t.data.error))}n(t.data)}),e.postMessage({challenge:t,counterMode:o,counterStart:a,counterStep:s,timeout:l,type:"work"})}))))}catch(a){if(a instanceof Error&&!!a?.message?.includes("Out of memory")&&i){d();const a=i(s);if(a)return Lr({...e,challenge:t,controller:n,concurrency:a,createWorker:r})}throw a}finally{d()}return n.signal.aborted?null:u||null}er($r,{anchor:{},children:{},display:{},backdrop:{},onClickOutside:{},onClickOutsideDelay:{},onClose:{},placement:{},updateUISignal:{},variant:{}},[],[],{mode:"open"});class Tr{TAG_CODES={INPUT:1,TEXTAREA:2,SELECT:3,BUTTON:4,A:5,DETAILS:6,SUMMARY:7,IFRAME:8,VIDEO:9,AUDIO:10};maxSamples;sampleInterval;target;focusStartTime=0;focusInteraction=0;focusInteractionTimer=null;lastPointerSample=0;lastTouchSample=0;lastScrollSample=0;pendingPointer=null;pendingTouch=null;focus=[];pointer=[];scroll=[];touch=[];constructor(e={}){const{maxSamples:t=60,sampleInterval:a=50,target:n=window}=e;this.maxSamples=t,this.sampleInterval=a,this.target=n,this.attach()}destroy(){const e={capture:!0};this.target.removeEventListener("focusin",this.onFocus,e),this.target.removeEventListener("keydown",this.onInteraction,e),this.target.removeEventListener("pointerdown",this.onInteraction,e),this.target.removeEventListener("pointermove",this.onPointer,e),this.target.removeEventListener("scroll",this.onScroll,e),this.target.removeEventListener("touchmove",this.onTouchMove,e)}export(){return{focus:this.focus,maxTouchPoints:navigator.maxTouchPoints||0,pointer:this.pointer,scroll:this.scroll,time:Date.now(),touch:this.touch}}attach(){const e={passive:!0,capture:!0};this.target.addEventListener("focusin",this.onFocus,e),this.target.addEventListener("keydown",this.onInteraction,e),this.target.addEventListener("pointerdown",this.onInteraction,e),this.target.addEventListener("pointermove",this.onPointer,e),this.target.addEventListener("scroll",this.onScroll,e),this.target.addEventListener("touchmove",this.onTouchMove,e)}evict(e){e.length>this.maxSamples&&e.splice(0,e.length-this.maxSamples)}onFocus=e=>{if(2===this.focusInteraction)return;const t=e.target;if(!(t instanceof Element))return;const a=performance.now();0===this.focusStartTime&&(this.focusStartTime=a),this.focus.push([Math.round(a-this.focusStartTime),t.tabIndex,this.TAG_CODES[t.tagName]??0,this.focusInteraction?1:0]),this.evict(this.focus)};onInteraction=e=>{this.focusInteraction="keyCode"in e?1:2,this.focusInteractionTimer&&clearTimeout(this.focusInteractionTimer),this.focusInteractionTimer=setTimeout(()=>{this.focusInteraction=0},100)};onPointer=e=>{if("touch"===e.pointerType)return;const t=e.timeStamp||performance.now();this.pendingPointer=[Math.round(e.clientX),Math.round(e.clientY),Math.round(t)],t-this.lastPointerSample>=this.sampleInterval&&(this.pointer.push(this.pendingPointer),this.lastPointerSample=t,this.pendingPointer=null,this.evict(this.pointer))};onScroll=()=>{const e=performance.now();e-this.lastScrollSample{const t=e.timeStamp||performance.now(),a=e.touches[0];a&&(this.pendingTouch=[Math.round(a.clientX),Math.round(a.clientY),Math.round(t),Math.round(1e3*a.force)/1e3,Math.round(a.radiusX||0),Math.round(a.radiusY||0)],t-this.lastTouchSample>=this.sampleInterval&&(this.touch.push(this.pendingTouch),this.lastTouchSample=t,this.pendingTouch=null,this.evict(this.touch)))}}var Sr=Ba('
'),jr=Ba('
'),zr=Ba('
×
',1),Er=Ba('
'),Ir=Ba(''),Vr=Ba('
Secure context (HTTPS) required.
'),Pr=Ba('
'),Rr=Ba('
'),Or=Ba(" ",1),Fr=Ba('
',1);"undefined"!=typeof window&&window.customElements&&!customElements.get("altcha-widget")&&customElements.define("altcha-widget",er(function(e,t){J(t,!0);const[a,n]=function(){const e={};return[e,function(){ha(()=>{for(var t in e)e[t].unsubscribe();o(e,qe,{enumerable:!1,value:!0})})}]}(),r=["ar","fa","he","ur"],{isSecureContext:i}=globalThis,{store:l}=globalThis.$altcha.defaults,s=navigator.hardwareConcurrency||2,c=navigator.deviceMemory||0,d=c&&c<=4?Math.min(4,s):s,u=globalThis.$altcha.i18n.store,f=t.$$host,h=(e,t)=>{ia().then(()=>{f?.dispatchEvent(new CustomEvent(e,{detail:t}))})};let v=null,g=_t(he(new URL(location.origin))),p=_t(!1),b=_t(null),m=_t(null),y=_t(null),k=_t(he(fr.UNVERIFIED)),w=_t(void 0),A=_t(void 0),C=_t(null),x=_t(void 0),_=_t(null),$=_t(null),T=_t(null),S=_t(null),j=_t(he([])),z=_t(0),E=_t(he({})),I=_t(!0);const V=bt(()=>({fetch:(e,t)=>fetch(e,t),audioChallengeLanguage:"",auto:"off",barPlacement:"bottom",challenge:"",codeChallenge:null,codeChallengeDisplay:"standard",credentials:null,debug:!1,disableAutoFocus:!1,display:"standard",floatingAnchor:"",floatingOffset:8,floatingPersist:!1,floatingPlacement:"auto",hideFooter:!1,hideLogo:!1,humanInteractionSignature:!0,language:"",mockError:!1,minDuration:500,overlayContent:"",name:"altcha",popoverPlacement:"auto",retryOnOutOfMemoryError:!0,setCookie:null,serverVerificationFields:!1,serverVerificationTimeZone:!1,test:!1,timeout:9e4,type:"checkbox",validationMessage:"",verifyFunction:null,verifyUrl:"",workers:d,...De(l,"$altchaDefaults",a),...oa(E)})),P=bt(()=>`altcha-checkbox-${t.id||Math.floor(1e12*Math.random()).toString(16)}`),R=bt(()=>function(e){switch(e){case"checkbox":return ar;case"switch":return dr;default:return rr}}(oa(V).type)),O=bt(()=>oa(V).auto),F=bt(()=>oa(k)===fr.VERIFYING),H=bt(()=>!oa(V).hideFooter),M=bt(()=>!oa(V).hideLogo&&"bar"!==oa(V).display),q=bt(()=>function(e,t){const a=Object.keys(e).map(e=>e.toLowerCase());let n=t.reduce((t,n)=>(n=n.toLowerCase(),t||(e[n]?n:null)||a.find(e=>n.split("-")[0]===e.split("-")[0])||null),null);e[n||""]||(n="en");return{language:n,strings:e[n]}}(De(u,"$altchaI18nStore",a),[oa(V).language,document.documentElement.lang,...navigator.languages])),D=bt(()=>r.includes(oa(q).language)?"rtl":void 0),N=bt(()=>({...oa(q).strings})),U=bt(()=>oa(b)?.audio?.match(/^(https?:)?\//)?Q(oa(b).audio,oa(g),{language:oa(V).audioChallengeLanguage||oa(q).language}).toString():oa(b)?.audio),B=bt(()=>oa(b)?.image?.match(/^(https?:)?\//)?Q(oa(b).image,oa(g)):oa(b)?.image);async function K(e,...t){let a;for(const n of oa(j))a=await n[e].call(n,...t);return a}async function G(e){await new Promise(t=>setTimeout(t,e))}async function W(e=oa(V).challenge,t){const a=await K("onFetchChallenge",e);let n=null;if(void 0!==a)return a;if("string"==typeof e)if(e.startsWith("{")){Ce("parsing JSON challenge");try{n=JSON.parse(e)}catch{throw new Error("Unable to parse JSON challenge.")}}else{Ce("fetching challenge from",t?.method||"GET",e),Lt(g,new URL(e,location.origin),!0);const a=await oa(V).fetch(e,{credentials:oa(V).credentials||void 0,...t});await ye(a);const r=a.headers.get("x-altcha-config");r&&function(e){try{const t=JSON.parse(e);t&&"object"==typeof t&&we({serverVerificationFields:t?.sentinel?.fields,serverVerificationTimeZone:t?.sentinel?.timeZone,verifyUrl:t.verifyurl,...t})}catch(e){Ce("unable to configure from x-altcha-config header",e)}}(r);const i=await a.json();if(i&&"his"in i&&i.his){if(Ce("requested HIS"),!v)throw new Error("Server requested HIS data but collector is disabled.");return W(Q(i.his.url,oa(g)),{body:JSON.stringify({his:v.export()}),headers:{"content-type":"application/json"},method:"POST"})}i&&"hisResult"in i&&i.hisResult&&Ce("HIS result",i.hisResult),n=i}else if(e&&"object"==typeof e)try{n=JSON.parse(JSON.stringify(e))}catch{throw new Error("Unable to parse JSON challenge.")}if(function(e){return"object"==typeof e&&"challenge"in e}(n)&&(n=function(e){const[t,a]=e.salt.split("?"),n={};if(a)try{Object.assign(n,Object.fromEntries(new URLSearchParams(a).entries()))}catch{}const r={codeChallenge:e.codeChallenge,parameters:{algorithm:e.algorithm,cost:1,data:n,expiresAt:n?.expires?parseInt(n.expires,10):void 0,keyLength:"SHA-512"===e.algorithm?64:"SHA-384"===e.algorithm?48:32,nonce:(i=(new TextEncoder).encode(e.salt),Array.from(new Uint8Array(i)).map(e=>e.toString(16).padStart(2,"0")).join("")),keyPrefix:e.challenge,salt:""},signature:e.signature};var i;return Object.defineProperties(r,{_originalSalt:{enumerable:!1,value:e.salt,writable:!1},_version:{enumerable:!1,value:1,writable:!1}}),r}(n)),!function(e){return!!e&&"object"==typeof e&&"parameters"in e&&!!e.parameters&&"object"==typeof e.parameters&&"algorithm"in e.parameters&&"nonce"in e.parameters&&"salt"in e.parameters&&"keyPrefix"in e.parameters}(n))throw new Error("Challenge validation failed.");return n}function Y(){return document.getElementById(oa(P))}function Z(){try{return Intl.DateTimeFormat().resolvedOptions().timeZone}catch{}}function Q(e,t,a){const n=new URL(e,t);if(n.search||(n.search=t.search),a)for(const e in a)void 0!==a[e]&&null!==a[e]&&n.searchParams.set(e,a[e]);return n.toString()}function ee(e){!oa(p)&&e.currentTarget.checked?(e.preventDefault(),e.currentTarget.checked=!1,oa(k)!==fr.VERIFYING&&ze()):e.currentTarget.checked||(e.preventDefault(),xe())}function te(e){oa(k)===fr.VERIFYING?e.currentTarget.setCustomValidity(oa(N).waitAlert):oa(V).validationMessage&&e.currentTarget.setCustomValidity(oa(V).validationMessage)}function ae(){me(oa(V).display),xe()}function ne(e){"onfocus"===oa(O)&&oa(k)===fr.UNVERIFIED&&ze()}function de(){me(oa(V).display),xe()}function ve(e){const t=e.target;"true"!==t?.getAttribute("data-code-challenge")&&"onsubmit"===oa(O)&&oa(k)===fr.UNVERIFIED&&(e.preventDefault(),e.stopPropagation(),Lt(_,e.submitter,!0),Se(),ze().then(e=>{e&&!oa(b)&&ia().then(()=>{ge(oa(_))})}))}function ge(e){oa(C)&&"requestSubmit"in oa(C)?oa(C).requestSubmit(e):oa(C)?.reportValidity()&&(e?e.click():oa(C).submit())}function me(e){switch(e){case"bar":case"floating":case"overlay":Ae(),oa(O)&&"off"!==oa(O)||(oa(E).auto="onsubmit");break;case"standard":Se()}oa(y)!==e&&Lt(y,e,!0)}async function ye(e){if(e.status>=400){if(e.headers.get("content-type")?.includes("/json")){let t;try{t=await e.json()}catch{}if(t&&"error"in t)throw new Error(`Server responded with ${e.status} - ${t.error}`)}throw new Error(`Server responded with ${e.status}.`)}const t=e.headers.get("content-type");if(!t||!t.includes("/json"))throw new Error(`Server responded with invalid content-type. Expected application/json, received ${t}.`)}async function ke(e){if(!oa(S))return void Te(fr.ERROR,"Cannot verify code challenge without PoW payload.");Te(fr.VERIFYING);let t=null;if(oa(V).verifyUrl)t=await async function(e,t){const a=await K("onRequestServerVerification",e,t);if(void 0!==a)return a;if(Ce("requesting server verification from",oa(V).verifyUrl),!oa(V).verifyUrl)throw new Error("Parameter verifyUrl must be set for server verification.");const n=await oa(V).fetch(Q(oa(V).verifyUrl,oa(g)),{body:JSON.stringify({code:t,fields:oa(V).serverVerificationFields?[...oa(C)?.querySelectorAll('input[type="text"]:not([data-no-spamfilter]), textarea:not([data-no-spamfilter])')||[]].reduce((e,t)=>{const a=t.name,n=t.value;return a&&n&&(e[a]=/\n/.test(n)?n.replace(new RegExp("(?{ge(oa(_))})):Te(fr.ERROR,t?.reason||"Verification failed."),oa(V).disableAutoFocus||Y()?.focus()}function we(e){Object.assign(oa(E),{...Object.fromEntries(Object.entries(e).filter(([e,t])=>void 0!==t))})}function Ae(){Lt(I,!1)}function Ce(...e){(oa(V).debug||e.some(e=>e instanceof Error))&&console[e[0]instanceof Error?"error":"log"]("ALTCHA",`[name=${oa(V).name}]`,...e)}function xe(e=fr.UNVERIFIED,t=null){Lt(p,!1),Lt($,t,!0),Lt(S,null),oa(m)&&oa(m).abort(),oa(T)&&(clearTimeout(oa(T)),Lt(T,null)),Te(e)}function Te(e,t=null){Lt(k,e,!0),Lt($,t,!0),h("statechange",{payload:oa(S),state:oa(k)})}function Se(){Lt(I,!0),ia().then(()=>{je()})}function je(){if("floating"===oa(V).display)return function(e=20){if(!oa(x))return;const t=oa(V).floatingPlacement;if(!oa(A)&&(Lt(A,(oa(V).floatingAnchor instanceof HTMLElement?oa(V).floatingAnchor:oa(V).floatingAnchor?document.querySelector(oa(V).floatingAnchor):oa(C)?.querySelector('input[type="submit"], button[type="submit"], button:not([type="button"]):not([type="reset"])'))||oa(C),!0),!oa(A)))return void Ce("unable to find floating anchor element");const a=parseInt(oa(V).floatingOffset,10)||12,n=oa(A).getBoundingClientRect(),r=oa(x).getBoundingClientRect(),i=document.documentElement.clientHeight,o=document.documentElement.clientWidth,l=t&&"auto"!==t?"top"===t:n.bottom+r.height+a+e>i,s=Math.max(e,Math.min(o-e-r.width,n.left+n.width/2-r.width/2));if(oa(x).style.setProperty("--altcha-floating-left",`${s}px`),oa(x).style.setProperty("--altcha-floating-top",l?n.top-(r.height+a)+"px":`${n.bottom+a}px`),oa(x).setAttribute("data-floating-position",l?"top":"bottom"),oa(w)){const e=oa(w).getBoundingClientRect();oa(w).style.left=n.left-s+n.width/2-e.width/2+"px"}}();Lt(z,oa(z)+1)}async function ze(e={}){const{concurrency:t=Math.max(1,oa(V).workers),controller:a=new AbortController,minDuration:n=oa(V).minDuration}=e,r=performance.now();let o=null,l=null,s=!1;const c=await K("onVerify",e);if(void 0!==c)return c;xe(fr.VERIFYING),Lt(m,a,!0);try{if(!i)throw new Error("Secure context (HTTPS) required.");if(oa(V).mockError)throw new Error("Mock error.");if(oa(V).test)return Ce("running test mode with null challenge"),await G(Math.max(0,n-(performance.now()-r))),oa(m)?.signal.aborted?(xe(),null):(Lt(S,btoa(JSON.stringify({challenge:null,solution:null,test:!0})),!0),Ce("verified"),Te(fr.VERIFIED),h("verified",{payload:oa(S)}),{payload:oa(S)});if(o=await W(),!o)throw new Error("Failed to fetch challenge.");Ce("challenge",o),"configuration"in o&&(Ce("re-configuring from challenge",o.configuration),we(o.configuration)),o.parameters.expiresAt&&function(e){oa(T)&&clearTimeout(oa(T));const t=()=>{oa(k)!==fr.UNVERIFIED?(Lt(p,!1),Te(fr.EXPIRED)):xe(),h("expired")},a=1e3*e-Date.now();a>=1?Lt(T,setTimeout(t,a),!0):t()}(o.parameters.expiresAt),s="_version"in o&&1===o._version;const e=globalThis.$altcha.algorithms.get(o.parameters.algorithm);if(!e)throw new Error(`Unsupported algorithm ${o.parameters.algorithm}.`);if(l=await Lr({challenge:o,concurrency:t,controller:a,createWorker:e,counterMode:s?"string":"uint32",onOutOfMemory:e=>{if(Ce("out of memory error received"),h("outofmemory"),oa(V).retryOnOutOfMemoryError&&e>1){const t=Math.floor(e/2);return Ce(`retrying with ${t} workers...`),t}},timeout:oa(V).timeout}),oa(m)?.signal.aborted)return xe(),null;if(!l)throw new Error("Failed to find solution.");Ce("solution",l),await G(Math.max(0,n-(performance.now()-r))),Lt(b,o.codeChallenge||oa(V).codeChallenge||null,!0),Lt(S,s?btoa(JSON.stringify(function(e,t){return{algorithm:e.parameters.algorithm,challenge:e.parameters.keyPrefix,number:t.counter,salt:"_originalSalt"in e?e._originalSalt:e.parameters.nonce,signature:e.signature,took:t.time||0}}(o,l))):btoa(JSON.stringify({challenge:{parameters:o.parameters,signature:o.signature},solution:l})),!0),oa(b)?(Ce("requesting code verification"),Te(fr.CODE),h("codechallenge",{codeChallenge:oa(b)})):oa(V).verifyUrl?await ke():(Ce("verified"),Te(fr.VERIFIED),h("verified",{payload:oa(S)}))}catch(e){return Ce("verification failed",e),Te(fr.ERROR,String(e)),null}finally{Lt(m,null)}return{challenge:o,payload:oa(S),solution:l}}va(()=>{we({auto:t.auto,challenge:t.challenge,display:t.display,language:t.language,name:t.name,type:t.type,workers:t.workers})}),va(()=>{if(t.configuration)try{we(JSON.parse(t.configuration))}catch{Ce("unable to parse the `configuration` attribute (JSON expected)")}}),va(()=>{oa(y)!==oa(V).display&&me(oa(V).display)}),va(()=>{oa(p)&&oa(k)===fr.VERIFYING&&Lt(p,!1)}),va(()=>{oa(p)||oa(k)!==fr.VERIFIED||Lt(p,!0)}),va(()=>{if(!oa(p)){const e=Y();e&&e.checked&&(e.checked=!1)}}),va(()=>{oa(k)===fr.VERIFIED&&Y()?.setCustomValidity("")}),va(()=>{if("onload"===oa(O)){const e=setTimeout(()=>{ze()},1);return()=>{e&&clearTimeout(e)}}}),va(()=>{oa($)&&Ce("error:",oa($))}),va(()=>{oa(S)&&oa(V).setCookie&&function(e,t={}){const{domain:a,name:n=oa(V).name,maxAge:r,path:i,sameSite:o,secure:l}=t;let s=`${encodeURIComponent(n)}=${encodeURIComponent(e)}`;a&&(s+=`; Domain=${a}`);null!=r&&(s+=`; Max-Age=${r}`);i&&(s+=`; Path=${i}`);o&&(s+=`; SameSite=${o}`);l&&(s+="; Secure");document.cookie=s}(oa(S),oa(V).setCookie)}),fn(()=>(Ce("mounted","3.2.1"),f&&globalThis.$altcha.instances.add(f),Lt(C,oa(x)?.closest("form"),!0),oa(C)?.addEventListener("reset",de),oa(C)?.addEventListener("submit",ve,{capture:!0}),oa(C)?.addEventListener("focusin",ne),function(){Lt(j,[...globalThis.$altcha.plugins].map(e=>new e(f)),!0),Ce("activating plugins",oa(j).map(e=>e.constructor.name));for(const e of oa(j))e.activate()}(),oa(V).humanInteractionSignature&&(Ce("human interaction signature enabled"),v=new Tr),h("load"),i||Ce("secure context (HTTPS) required"),()=>{!function(){for(const e of oa(j))e.destroy()}(),f&&globalThis.$altcha.instances.delete(f),oa(T)&&clearTimeout(oa(T)),oa(C)?.removeEventListener("reset",de),oa(C)?.removeEventListener("submit",ve,{capture:!0}),oa(C)?.removeEventListener("focusin",ne),v?.destroy()}));var Ee={configure:we,getConfiguration:function(){return{...oa(V)}},getState:function(){return oa(k)},hide:Ae,log:Ce,reset:xe,setState:Te,show:Se,updateUI:je,verify:ze},Ie=Fr();Oa("scroll",be,function(){je()}),Oa("click",be,function(e){const t=e.target;"floating"!==oa(V).display||!t||f?.contains(t)||t.hasAttribute("data-backdrop")||t.closest("[data-popover]")||oa(k)===fr.VERIFIED||oa(V).floatingPersist||Ae()}),Oa("pageshow",pe,function(e){e.persisted&&(me(oa(V).display),xe())}),Oa("resize",pe,function(){je()});var Ve=$e(Ie),Pe=e=>{Za(e,Sr())};hn(Ve,e=>{"overlay"===oa(V).display&&oa(I)&&e(Pe)});var Re=Le(Ve,2),Oe=_e(Re),Fe=e=>{var t=zr(),a=$e(t),n=Le(a,2),r=e=>{var t=jr();gn(t,()=>document.querySelector(oa(V).overlayContent)?.innerHTML,!0),ce(t),Za(e,t)};hn(n,e=>{oa(V).overlayContent&&e(r)}),Oa("click",a,ae,!0),Za(e,t)};hn(Oe,e=>{"overlay"===oa(V).display&&oa(I)&&e(Fe)});var He=Le(Oe,2),Me=_e(He),Ne=_e(Me),Ue=_e(Ne);{let e=bt(()=>"standard"===oa(V).display&&"onsubmit"!==oa(O)||oa(k)===fr.VERIFYING);!function(e,t,a){var n;ie&&(n=re,se());var r=new un(e);ya(()=>{var e=t()??null;if(ie&&"["===fe(n)!=(null!==e)){var i=ue();return le(i),r.anchor=i,oe(!1),r.ensure(e,e&&(t=>a(t,e))),void oe(!0)}r.ensure(e,e&&(t=>a(t,e)))},L)}(Ue,()=>oa(R),(t,a)=>{a(t,{get id(){return oa(P)},name:"",get required(){return oa(e)},get loading(){return oa(F)},get checked(){return oa(p)},onchange:ee,oninvalid:te})})}var Be=Le(Ue,2),Ke=_e(Be),Ge=e=>{var t=Wa();ma(()=>rn(t,oa(N).verificationRequired)),Za(e,t)},We=e=>{var t=Wa();ma(()=>rn(t,oa(N).verifying)),Za(e,t)},Ye=e=>{var t=Wa();ma(()=>rn(t,oa(N).verified)),Za(e,t)},Ze=e=>{var t=Wa();ma(()=>rn(t,oa(N).label)),Za(e,t)};hn(Ke,e=>{oa(k)===fr.CODE&&oa(b)?e(Ge):oa(k)===fr.VERIFYING?e(We,1):oa(k)===fr.VERIFIED?e(Ye,2):e(Ze,-1)}),ce(Be),ce(Ne);var Je=Le(Ne,2),Xe=e=>{or(e,{get strings(){return oa(N)}})};hn(Je,e=>{oa(M)&&e(Xe)}),ce(Me);var Qe=Le(Me,2),et=e=>{{let t=bt(()=>"bar"===oa(V).display&&oa(M));sr(e,{get logo(){return oa(t)},get strings(){return oa(N)}})}};hn(Qe,e=>{oa(H)&&e(et)});var tt=Le(Qe,2),at=e=>{var t=Er();Gn(t,e=>Lt(w,e),()=>oa(w)),Za(e,t)};hn(tt,e=>{"floating"===oa(V).display&&e(at)});var nt=Le(tt,2),rt=e=>{var t=Ir();Rn(t),ma(()=>{var e,a,n;Fn(t,"name",oa(V).name),e=t,a=oa(S),(n=Mn(e)).value!==(n.value=a??void 0)&&(e.value!==a||0===a&&e.nodeName===Pn)&&(e.value=a??"")}),Za(e,t)};hn(nt,e=>{oa(V).setCookie||e(rt)}),ce(He);var it=Le(He,2),ot=e=>{$r(e,{get anchor(){return oa(x)},onClickOutside:()=>{i&&xe()},get placement(){return oa(V).popoverPlacement},role:"alert",variant:"error",get dir(){return oa(D)},get updateUISignal(){return oa(z)},children:(e,t)=>{var a=Ya(),n=$e(a),r=e=>{Za(e,Vr())},o=e=>{var t=Pr(),a=_e(t,!0);ce(t),ma(()=>rn(a,oa(N).expired)),Za(e,t)},l=e=>{var t=Rr(),a=_e(t,!0);ce(t),ma(()=>{Fn(t,"title",oa($)),rn(a,oa(N).error)}),Za(e,t)};hn(n,e=>{oa($)||i?oa($)||oa(k)!==fr.EXPIRED?e(l,-1):e(o,1):e(r)}),Za(e,a)},$$slots:{default:!0}})},lt=e=>{var t=Ya();!function(e,t,a){ie&&se();var n=new un(e);ya(()=>{var e=t();e!=e&&(e=vn),n.ensure(e,a)})}($e(t),()=>oa(b),e=>{{let t=bt(()=>"standard"!==oa(V).codeChallengeDisplay);$r(e,{get anchor(){return oa(x)},get backdrop(){return oa(t)},get display(){return oa(V).codeChallengeDisplay},onClose:()=>{xe()},get placement(){return oa(V).popoverPlacement},role:"dialog",get"aria-label"(){return oa(N).verificationRequired},get dir(){return oa(D)},get updateUISignal(){return oa(z)},children:(e,t)=>{var a=Or(),n=$e(a);wr(n,{get audioUrl(){return oa(U)},get imageUrl(){return oa(B)},onCancel:()=>xe(),onReload:()=>ze(),onSubmit:e=>ke(e),get codeChallenge(){return oa(b)},get config(){return oa(V)},get strings(){return oa(N)}});var r=Le(n,2),i=e=>{sr(e,{get logo(){return oa(M)},get strings(){return oa(N)}})};hn(r,e=>{oa(H)&&"standard"!==oa(V).codeChallengeDisplay&&e(i)}),Za(e,a)},$$slots:{default:!0}})}}),Za(e,t)};hn(it,e=>{oa($)||oa(k)===fr.EXPIRED||!i?e(ot):oa(b)&&oa(k)===fr.CODE&&e(lt,1)}),ce(Re),Gn(Re,e=>Lt(x,e),()=>oa(x)),ma(e=>{Fn(Re,"data-state",oa(k)),Fn(Re,"data-display",oa(V).display||void 0),Fn(Re,"data-placement",e),Fn(Re,"data-visible",oa(I)||void 0),Fn(Re,"dir",oa(D)),Fn(Be,"for",oa(P)),Re.dir=Re.dir},[()=>function(e){switch(e){case"bar":return oa(V).barPlacement||"bottom";case"floating":return oa(V).floatingPlacement||"auto";default:return}}(oa(V).display)]),Za(e,Ie);var st=X(Ee);return n(),st},{auto:{type:"String"},challenge:{type:"String"},configuration:{type:"String"},display:{type:"String"},language:{type:"String"},name:{type:"String"},theme:{type:"String"},type:{type:"String"},workers:{type:"Number"}},[],["configure","getConfiguration","getState","hide","log","reset","setState","show","updateUI","verify"]));const Hr='(function() {\n "use strict";\n function bufferStartsWith(buffer, prefix) {\n if (prefix.length > buffer.length) {\n return false;\n }\n for (let i = 0; i < prefix.length; i++) {\n if (buffer[i] !== prefix[i]) {\n return false;\n }\n }\n return true;\n }\n function bufferToHex(buffer) {\n return Array.from(new Uint8Array(buffer)).map((b) => b.toString(16).padStart(2, "0")).join("");\n }\n function concatBuffers(a, b) {\n const out = new Uint8Array(a.length + b.length);\n out.set(a, 0);\n out.set(b, a.length);\n return out;\n }\n function hexToBuffer(hex) {\n if (hex.length % 2 !== 0) {\n throw new Error(`Hex string must have an even length. Got: ${hex}`);\n }\n const buffer = new ArrayBuffer(hex.length / 2);\n const view = new DataView(buffer);\n for (let i = 0; i < hex.length; i += 2) {\n const byteString = hex.substring(i, i + 2);\n const byteValue = parseInt(byteString, 16);\n view.setUint8(i / 2, byteValue);\n }\n return new Uint8Array(buffer);\n }\n async function delay(ms) {\n await new Promise((resolve) => setTimeout(resolve, ms));\n }\n function timeDuration(start) {\n return Math.floor((performance.now() - start) * 10) / 10;\n }\n class PasswordBuffer {\n constructor(nonce, mode = "uint32") {\n this.nonce = nonce;\n this.mode = mode;\n this.buffer = new Uint8Array(this.nonce.length + this.COUNTER_BYTES);\n this.buffer.set(this.nonce, 0);\n this.dataView = new DataView(this.buffer.buffer);\n }\n nonce;\n mode;\n COUNTER_BYTES = 4;\n buffer;\n dataView;\n encoder = new TextEncoder();\n /**\n * Appends the counter to the nonce buffer.\n * In \'string\' mode, encodes the counter as a UTF-8 string.\n * In \'uint32\' mode, writes the counter as a big-endian 32-bit integer.\n */\n setCounter(n) {\n if (this.mode === "string") {\n return concatBuffers(this.nonce, this.encoder.encode(n.toString()));\n }\n this.dataView.setUint32(this.nonce.length, n, false);\n return this.buffer;\n }\n }\n async function solveChallenge(options) {\n const {\n challenge,\n controller,\n counterMode = "uint32",\n counterStart = 0,\n counterStep = 1,\n deriveKey: deriveKey2,\n timeout = 9e4\n } = options;\n const { nonce, keyPrefix, salt } = challenge.parameters;\n const nonceBuf = hexToBuffer(nonce);\n const saltBuf = hexToBuffer(salt);\n const keyPrefixBuf = keyPrefix.length % 2 === 0 ? hexToBuffer(keyPrefix) : null;\n const password = new PasswordBuffer(nonceBuf, counterMode);\n const start = performance.now();\n let counter = counterStart;\n let iterations = 0;\n let derivedKeyHex = "";\n let lastYield = start;\n while (true) {\n if (controller?.signal.aborted || timeout && iterations % 10 === 0 && performance.now() - start > timeout) {\n return null;\n }\n const { derivedKey } = await deriveKey2(\n challenge.parameters,\n saltBuf,\n password.setCounter(counter)\n );\n if (iterations % 10 === 0 && performance.now() - lastYield > 200) {\n await delay(0);\n lastYield = performance.now();\n }\n if (keyPrefixBuf ? bufferStartsWith(derivedKey, keyPrefixBuf) : bufferToHex(derivedKey).startsWith(keyPrefix)) {\n derivedKeyHex = bufferToHex(derivedKey);\n break;\n }\n counter = counter + counterStep;\n iterations = iterations + 1;\n }\n return {\n counter,\n derivedKey: derivedKeyHex,\n time: timeDuration(start)\n };\n }\n function handler(options) {\n const { deriveKey: deriveKey2 } = options;\n let controller = void 0;\n self.onmessage = async (message) => {\n const { challenge, counterMode, counterStart, counterStep, timeout, type } = message.data;\n if (type === "abort") {\n controller?.abort();\n } else if (type === "work") {\n controller = new AbortController();\n let solution;\n try {\n solution = await solveChallenge({\n challenge,\n controller,\n counterStart,\n counterStep,\n deriveKey: deriveKey2,\n counterMode,\n timeout\n });\n } catch (err) {\n return self.postMessage({ error: err });\n }\n self.postMessage(solution);\n }\n };\n }\n function getDigest(algorithm) {\n switch (algorithm) {\n case "PBKDF2/SHA-512":\n return "SHA-512";\n case "PBKDF2/SHA-384":\n return "SHA-384";\n case "PBKDF2/SHA-256":\n default:\n return "SHA-256";\n }\n }\n async function deriveKey(parameters, salt, password) {\n const { algorithm, cost, keyLength = 32 } = parameters;\n const passwordKey = await crypto.subtle.importKey(\n "raw",\n password,\n { name: "PBKDF2" },\n false,\n ["deriveKey"]\n );\n const derivedKey = await crypto.subtle.deriveKey(\n {\n name: "PBKDF2",\n salt,\n iterations: cost,\n hash: getDigest(algorithm)\n },\n passwordKey,\n { name: "AES-GCM", length: keyLength * 8 },\n true,\n ["encrypt"]\n );\n return {\n derivedKey: new Uint8Array(await crypto.subtle.exportKey("raw", derivedKey))\n };\n }\n handler({\n deriveKey\n });\n})();\n',Mr="undefined"!=typeof self&&self.Blob&&new Blob(["(self.URL || self.webkitURL).revokeObjectURL(self.location.href);",Hr],{type:"text/javascript;charset=utf-8"});function qr(e){let t;try{if(t=Mr&&(self.URL||self.webkitURL).createObjectURL(Mr),!t)throw"";const a=new Worker(t,{name:e?.name});return a.addEventListener("error",()=>{(self.URL||self.webkitURL).revokeObjectURL(t)}),a}catch(t){return new Worker("data:text/javascript;charset=utf-8,"+encodeURIComponent(Hr),{name:e?.name})}}const Dr='(function() {\n "use strict";\n function bufferStartsWith(buffer, prefix) {\n if (prefix.length > buffer.length) {\n return false;\n }\n for (let i = 0; i < prefix.length; i++) {\n if (buffer[i] !== prefix[i]) {\n return false;\n }\n }\n return true;\n }\n function bufferToHex(buffer) {\n return Array.from(new Uint8Array(buffer)).map((b) => b.toString(16).padStart(2, "0")).join("");\n }\n function concatBuffers(a, b) {\n const out = new Uint8Array(a.length + b.length);\n out.set(a, 0);\n out.set(b, a.length);\n return out;\n }\n function hexToBuffer(hex) {\n if (hex.length % 2 !== 0) {\n throw new Error(`Hex string must have an even length. Got: ${hex}`);\n }\n const buffer = new ArrayBuffer(hex.length / 2);\n const view = new DataView(buffer);\n for (let i = 0; i < hex.length; i += 2) {\n const byteString = hex.substring(i, i + 2);\n const byteValue = parseInt(byteString, 16);\n view.setUint8(i / 2, byteValue);\n }\n return new Uint8Array(buffer);\n }\n async function delay(ms) {\n await new Promise((resolve) => setTimeout(resolve, ms));\n }\n function timeDuration(start) {\n return Math.floor((performance.now() - start) * 10) / 10;\n }\n class PasswordBuffer {\n constructor(nonce, mode = "uint32") {\n this.nonce = nonce;\n this.mode = mode;\n this.buffer = new Uint8Array(this.nonce.length + this.COUNTER_BYTES);\n this.buffer.set(this.nonce, 0);\n this.dataView = new DataView(this.buffer.buffer);\n }\n nonce;\n mode;\n COUNTER_BYTES = 4;\n buffer;\n dataView;\n encoder = new TextEncoder();\n /**\n * Appends the counter to the nonce buffer.\n * In \'string\' mode, encodes the counter as a UTF-8 string.\n * In \'uint32\' mode, writes the counter as a big-endian 32-bit integer.\n */\n setCounter(n) {\n if (this.mode === "string") {\n return concatBuffers(this.nonce, this.encoder.encode(n.toString()));\n }\n this.dataView.setUint32(this.nonce.length, n, false);\n return this.buffer;\n }\n }\n async function solveChallenge(options) {\n const {\n challenge,\n controller,\n counterMode = "uint32",\n counterStart = 0,\n counterStep = 1,\n deriveKey: deriveKey2,\n timeout = 9e4\n } = options;\n const { nonce, keyPrefix, salt } = challenge.parameters;\n const nonceBuf = hexToBuffer(nonce);\n const saltBuf = hexToBuffer(salt);\n const keyPrefixBuf = keyPrefix.length % 2 === 0 ? hexToBuffer(keyPrefix) : null;\n const password = new PasswordBuffer(nonceBuf, counterMode);\n const start = performance.now();\n let counter = counterStart;\n let iterations = 0;\n let derivedKeyHex = "";\n let lastYield = start;\n while (true) {\n if (controller?.signal.aborted || timeout && iterations % 10 === 0 && performance.now() - start > timeout) {\n return null;\n }\n const { derivedKey } = await deriveKey2(\n challenge.parameters,\n saltBuf,\n password.setCounter(counter)\n );\n if (iterations % 10 === 0 && performance.now() - lastYield > 200) {\n await delay(0);\n lastYield = performance.now();\n }\n if (keyPrefixBuf ? bufferStartsWith(derivedKey, keyPrefixBuf) : bufferToHex(derivedKey).startsWith(keyPrefix)) {\n derivedKeyHex = bufferToHex(derivedKey);\n break;\n }\n counter = counter + counterStep;\n iterations = iterations + 1;\n }\n return {\n counter,\n derivedKey: derivedKeyHex,\n time: timeDuration(start)\n };\n }\n function handler(options) {\n const { deriveKey: deriveKey2 } = options;\n let controller = void 0;\n self.onmessage = async (message) => {\n const { challenge, counterMode, counterStart, counterStep, timeout, type } = message.data;\n if (type === "abort") {\n controller?.abort();\n } else if (type === "work") {\n controller = new AbortController();\n let solution;\n try {\n solution = await solveChallenge({\n challenge,\n controller,\n counterStart,\n counterStep,\n deriveKey: deriveKey2,\n counterMode,\n timeout\n });\n } catch (err) {\n return self.postMessage({ error: err });\n }\n self.postMessage(solution);\n }\n };\n }\n async function deriveKey(parameters, salt, password) {\n const { algorithm, keyLength = 32 } = parameters;\n const iterations = Math.max(1, parameters.cost);\n let data = void 0;\n let derivedKey = void 0;\n for (let i = 0; i < iterations; i++) {\n if (i === 0) {\n data = concatBuffers(salt, password);\n } else {\n data = derivedKey;\n }\n derivedKey = new Uint8Array(\n (await crypto.subtle.digest(algorithm, data)).slice(0, keyLength)\n );\n }\n return {\n parameters: {},\n derivedKey\n };\n }\n handler({\n deriveKey\n });\n})();\n',Nr="undefined"!=typeof self&&self.Blob&&new Blob(["(self.URL || self.webkitURL).revokeObjectURL(self.location.href);",Dr],{type:"text/javascript;charset=utf-8"});function Ur(e){let t;try{if(t=Nr&&(self.URL||self.webkitURL).createObjectURL(Nr),!t)throw"";const a=new Worker(t,{name:e?.name});return a.addEventListener("error",()=>{(self.URL||self.webkitURL).revokeObjectURL(t)}),a}catch(t){return new Worker("data:text/javascript;charset=utf-8,"+encodeURIComponent(Dr),{name:e?.name})}}!function(e,t="altcha-css"){if("undefined"!=typeof document&&document&&!document.getElementById(t)){const a=document.createElement("style");a.id=t,a.textContent=e;const n=document.currentScript?.nonce??document.querySelector('meta[name="csp-nonce"]')?.content;n&&(a.nonce=n),document.head.appendChild(a)}}(':root {\n --altcha-border-color: var(--altcha-color-neutral);\n --altcha-border-width: 1px;\n --altcha-border-radius: 6px;\n --altcha-color-base: light-dark(oklch(100% 0.00011 271.152), oklch(20.904% 0.00002 271.152));\n --altcha-color-base-content: light-dark(\n \toklch(20.904% 0.00002 271.152),\n \toklch(100% 0.00011 271.152)\n );\n --altcha-color-error: oklch(51.284% 0.20527 28.678);\n --altcha-color-error-content: oklch(100% 0.00011 271.152);\n --altcha-color-neutral: light-dark(oklch(83.591% 0.0001 271.152), oklch(46.04% 0.00005 271.152));\n --altcha-color-neutral-content: light-dark(\n \toklch(46.76% 0.00005 271.152),\n \toklch(100% 0.00011 271.152)\n );\n --altcha-color-primary: oklch(40.279% 0.2449 268.131);\n --altcha-color-primary-content: oklch(100% 0.00011 271.152);\n --altcha-color-success: oklch(55.748% 0.18968 142.511);\n --altcha-color-success-content: oklch(100% 0.00011 271.152);\n --altcha-checkbox-border-color: light-dark(\n \toklch(66.494% 0.00233 15.434),\n \toklch(51.028% 0.00006 271.152)\n );\n --altcha-checkbox-border-radius: 5px;\n --altcha-checkbox-border-width: var(--altcha-border-width);\n --altcha-checkbox-outline: 2px solid var(--altcha-checkbox-outline-color);\n --altcha-checkbox-outline-color: -webkit-focus-ring-color;\n --altcha-checkbox-outline-offset: 2px;\n --altcha-checkbox-size: 22px;\n --altcha-checkbox-transition-duration: var(--altcha-transition-duration);\n --altcha-input-background-color: var(--altcha-color-base);\n --altcha-input-border-radius: 3px;\n --altcha-input-border-width: 1px;\n --altcha-input-color: var(--altcha-color-base-content);\n --altcha-max-width: 320px;\n --altcha-padding: 0.75rem;\n --altcha-popover-arrow-size: 6px;\n --altcha-popover-color: var(--altcha-border-color);\n --altcha-shadow: drop-shadow(3px 3px 6px oklch(0% 0 0 / 0.2));\n --altcha-spinner-color: var(--altcha-color-base-content);\n --altcha-switch-background-color: var(--altcha-color-neutral);\n --altcha-switch-border-radius: calc(infinity * 1px);\n --altcha-switch-height: var(--altcha-checkbox-size);\n --altcha-switch-padding: 0.25rem;\n --altcha-switch-width: calc(var(--altcha-checkbox-size) * 1.75);\n --altcha-switch-toggle-border-radius: 100%;\n --altcha-switch-toggle-color: var(--altcha-color-neutral-content);\n --altcha-switch-toggle-size: calc(\n \tvar(--altcha-switch-height) - calc(var(--altcha-switch-padding) * 2)\n );\n --altcha-transition-duration: 0.6s;\n --altcha-z-index: 99999999;\n --altcha-z-index-popover: 999999999;\n}\n\n@supports (-moz-appearance: none) {\n :root {\n --altcha-checkbox-outline-color: var(--altcha-color-primary);\n }\n}\n.altcha {\n all: revert-layer;\n display: none;\n font-family: inherit;\n font-size: inherit;\n position: relative;\n}\n.altcha[data-visible] {\n display: block;\n}\n.altcha-popover, .altcha-popover * {\n all: revert-layer;\n box-sizing: border-box;\n font-family: inherit;\n font-size: inherit;\n line-height: 1.25;\n}\n.altcha * {\n all: revert-layer;\n box-sizing: border-box;\n font-family: inherit;\n font-size: inherit;\n line-height: 1.25;\n}\n.altcha a, .altcha-popover a {\n color: currentColor;\n text-decoration: none;\n}\n.altcha a:hover, .altcha-popover a:hover {\n color: currentColor;\n}\n.altcha-main {\n align-items: start;\n background-color: var(--altcha-color-base);\n border: var(--altcha-border-width, 1px) solid var(--altcha-border-color);\n border-radius: var(--altcha-border-radius, 0);\n color: var(--altcha-color-base-content);\n display: flex;\n flex-direction: column;\n gap: 0.5rem;\n justify-content: space-between;\n padding: var(--altcha-padding);\n max-width: var(--altcha-max-width, 100%);\n}\n.altcha-main > * {\n display: flex;\n width: 100%;\n}\n.altcha-main > *:first-child {\n flex-grow: 1;\n}\n.altcha-checkbox-wrap {\n align-items: center;\n display: flex;\n flex-direction: row;\n flex-grow: 1;\n gap: 0.5rem;\n}\n.altcha-checkbox-wrap > * {\n display: flex;\n}\n.altcha-logo {\n opacity: 0.7;\n}\n.altcha-footer {\n align-items: center;\n display: flex;\n flex-grow: 1;\n gap: 0.5rem;\n justify-content: flex-end;\n font-size: 0.7rem;\n opacity: 0.7;\n}\n.altcha-footer p {\n margin: 0;\n padding: 0;\n}\n.altcha-error {\n font-size: 0.85rem;\n}\n.altcha-button {\n align-items: center;\n background: var(--altcha-color-primary);\n border: var(--altcha-input-border-width) solid var(--altcha-color-primary);\n border-radius: var(--altcha-input-border-radius);\n color: var(--altcha-color-primary-content);\n cursor: pointer;\n display: flex;\n font-size: 0.9rem;\n gap: 0.5rem;\n padding: 0.35rem;\n}\n.altcha-button:focus {\n border-color: var(--altcha-color-primary);\n outline: var(--altcha-checkbox-outline);\n outline-offset: var(--altcha-checkbox-outline-offset);\n}\n.altcha-button > .altcha-spinner, .altcha-button > svg {\n height: 20px;\n width: 20px;\n}\n.altcha-button-secondary {\n background: transparent;\n border-color: var(--altcha-color-neutral);\n color: var(--altcha-color-neutral-content);\n}\n.altcha-input {\n background: var(--altcha-input-background-color);\n border: var(--altcha-input-border-width) solid var(--altcha-color-neutral);\n border-radius: var(--altcha-input-border-radius);\n color: var(--altcha-input-color);\n flex-grow: 1;\n font-size: 1rem;\n min-width: 0;\n padding: 0.25rem;\n width: auto;\n}\n.altcha-input:focus {\n border-color: var(--altcha-color-primary);\n outline: var(--altcha-checkbox-outline);\n outline-offset: var(--altcha-checkbox-outline-offset);\n}\n.altcha-spinner {\n animation: altcha-rotate 0.6s linear infinite;\n border-radius: 100%;\n border: var(--altcha-checkbox-border-width) solid var(--altcha-spinner-color);\n border-bottom-color: transparent;\n border-right-color: transparent;\n opacity: 0.7;\n}\n.altcha-popover {\n background-color: var(--altcha-color-base);\n border: var(--altcha-border-width) solid var(--altcha-border-color);\n border-radius: var(--altcha-border-radius);\n color: var(--altcha-color-base-content);\n filter: var(--altcha-shadow);\n position: absolute;\n left: calc(var(--altcha-padding) / 2);\n max-width: calc(var(--altcha-max-width) - var(--altcha-padding));\n top: calc(var(--altcha-padding) + var(--altcha-checkbox-size) + var(--altcha-popover-arrow-size));\n z-index: var(--altcha-z-index-popover);\n}\n.altcha-popover-arrow {\n border: var(--altcha-popover-arrow-size) solid transparent;\n border-bottom-color: var(--altcha-popover-color);\n content: "";\n height: 0;\n left: calc(var(--altcha-checkbox-size) / 2);\n position: absolute;\n top: calc(var(--altcha-popover-arrow-size) * -2);\n width: 0;\n}\n.altcha-popover-content {\n max-height: 100dvh;\n overflow: auto;\n padding: var(--altcha-padding);\n}\n.altcha-popover[data-top=true][data-display=standard] {\n bottom: calc(100% - (var(--altcha-padding) - var(--altcha-popover-arrow-size)));\n top: auto;\n}\n.altcha-popover[data-top=true][data-display=standard] .altcha-popover-arrow {\n border-bottom-color: transparent;\n border-top-color: var(--altcha-popover-color);\n bottom: calc(var(--altcha-popover-arrow-size) * -2);\n top: auto;\n}\n.altcha-popover[data-variant=error] {\n --altcha-popover-color: var(--altcha-color-error);\n background-color: var(--altcha-color-error);\n border-color: var(--altcha-color-error);\n color: var(--altcha-color-error-content);\n}\n.altcha-popover[data-variant=error] .altcha-popover-content {\n padding: calc(var(--altcha-padding) / 1.5) var(--altcha-padding);\n}\n.altcha-popover[data-display=overlay] {\n animation: altcha-overlay-slidein 0.5s forwards;\n left: 50%;\n position: fixed;\n top: 45%;\n transform: translate(-50%, -50%);\n width: var(--altcha-max-width);\n z-index: var(--altcha-z-index);\n}\n.altcha-popover[data-display=bottomsheet] {\n animation: altcha-bottomsheet-slideup 0.5s forwards;\n border-bottom-left-radius: 0;\n border-bottom-right-radius: 0;\n border-bottom: 0;\n bottom: -100%;\n left: 50%;\n position: fixed;\n top: auto;\n transform: translate(-50%, 0);\n width: var(--altcha-max-width);\n z-index: var(--altcha-z-index);\n}\n.altcha-popover[data-display=bottomsheet] .altcha-popover-content {\n padding-bottom: calc(var(--altcha-padding) * 2);\n}\n.altcha-popover-backdrop {\n background: var(--altcha-color-base-content);\n bottom: 0;\n left: 0;\n opacity: 0.1;\n position: fixed;\n right: 0;\n top: 0;\n transition: opacity 0.5s;\n z-index: var(--altcha-z-index);\n}\n.altcha-popover-close {\n color: var(--altcha-color-base-content);\n cursor: pointer;\n display: inline-block;\n font-size: 1rem;\n height: 1.25rem;\n line-height: 0.95;\n position: absolute;\n right: 0;\n text-align: center;\n text-shadow: 0 0 1px var(--altcha-color-base);\n top: -1.5rem;\n width: 1.25rem;\n z-index: var(--altcha-z-index);\n}\n[dir=rtl] .altcha-popover {\n left: auto;\n right: calc(var(--altcha-padding) / 2);\n}\n[dir=rtl] .altcha-popover-arrow {\n left: auto;\n right: calc(var(--altcha-checkbox-size) / 2);\n}\n[dir=rtl] .altcha-popover-close {\n left: 0;\n right: auto;\n}\n.altcha-popover[data-display=bottomsheet] .altcha-footer, .altcha-popover[data-display=overlay] .altcha-footer {\n align-items: center;\n justify-content: center;\n padding-top: 1rem;\n gap: 0.5rem;\n}\n.altcha-popover[data-display=bottomsheet] .altcha-footer svg, .altcha-popover[data-display=overlay] .altcha-footer svg {\n height: 18px;\n width: 18px;\n vertical-align: middle;\n}\n.altcha-code-challenge > form {\n display: flex;\n flex-direction: column;\n gap: 0.5rem;\n}\n.altcha-code-challenge-title {\n font-weight: 600;\n}\n.altcha-code-challenge-text {\n font-size: 0.85rem;\n}\n.altcha-code-challenge-image {\n background: white;\n border: var(--altcha-input-border-width) solid var(--altcha-color-neutral);\n border-radius: var(--altcha-input-border-radius);\n object-fit: contain;\n height: 50px;\n}\n.altcha-code-challenge-row {\n display: flex;\n gap: 0.5rem;\n}\n.altcha-code-challenge-buttons {\n align-items: center;\n display: flex;\n flex-direction: column;\n gap: 0.5rem;\n margin-top: var(--altcha-padding);\n justify-content: space-between;\n}\n.altcha-code-challenge-buttons button {\n justify-content: center;\n width: 100%;\n}\n.altcha-checkbox {\n cursor: pointer;\n height: var(--altcha-checkbox-size);\n position: relative;\n width: var(--altcha-checkbox-size);\n}\n.altcha-checkbox input {\n appearance: none;\n background: var(--altcha-input-background-color);\n border: var(--altcha-checkbox-border-width, 2px) solid var(--altcha-checkbox-border-color);\n border-radius: var(--altcha-checkbox-border-radius);\n cursor: pointer;\n height: var(--altcha-checkbox-size);\n left: 0;\n margin: 0;\n padding: 0;\n position: absolute;\n top: 0;\n width: var(--altcha-checkbox-size);\n}\n@supports (hanging-punctuation: first) and (font: -apple-system-body) and (-webkit-appearance: none) {\n .altcha-checkbox input {\n /* Safari-only: fixes focus outline */\n }\n .altcha-checkbox input:focus {\n outline-width: 2px;\n outline-style: solid;\n }\n}\n.altcha-checkbox input:before {\n border-radius: var(--altcha-checkbox-border-radius);\n content: "";\n width: 100%;\n height: 100%;\n background: var(--altcha-color-neutral);\n display: block;\n transform: scale(0);\n}\n.altcha-checkbox input:checked {\n background-color: var(--altcha-color-success);\n border-color: var(--altcha-color-success);\n}\n.altcha-checkbox input:checked::before {\n background-color: var(--altcha-color-success);\n opacity: 0;\n transform: scale(2.2);\n transition: all var(--altcha-checkbox-transition-duration) ease;\n transition-delay: 0.1s;\n}\n.altcha-checkbox svg {\n --altcha-radio-svg-size: calc(var(--altcha-checkbox-size) * 0.5);\n --altcha-radio-svg-offset: calc(var(--altcha-checkbox-size) * 0.25);\n fill: none;\n left: var(--altcha-radio-svg-offset);\n height: var(--altcha-radio-svg-size);\n opacity: 0;\n position: absolute;\n stroke: currentColor;\n stroke-width: 2;\n stroke-linecap: round;\n stroke-linejoin: round;\n stroke-dasharray: 16px;\n stroke-dashoffset: 16px;\n top: var(--altcha-radio-svg-offset);\n transform: translate3d(0, 0, 0);\n width: var(--altcha-radio-svg-size);\n}\n.altcha-checkbox input:checked + svg {\n color: var(--altcha-color-success-content);\n opacity: 1;\n stroke-dashoffset: 0;\n transition: all var(--altcha-checkbox-transition-duration) ease;\n transition-delay: 0.1s;\n}\n.altcha-checkbox-spinner {\n display: none;\n left: 0;\n height: var(--altcha-checkbox-size);\n position: absolute;\n top: 0;\n width: var(--altcha-checkbox-size);\n}\n.altcha-checkbox[data-loading=true] input {\n appearance: none;\n opacity: 0;\n pointer-events: none;\n}\n.altcha-checkbox[data-loading=true] .altcha-checkbox-spinner {\n display: block;\n}\n.altcha-checkbox-native {\n height: var(--altcha-checkbox-size);\n position: relative;\n width: var(--altcha-checkbox-size);\n}\n.altcha-checkbox-native input {\n height: var(--altcha-checkbox-size);\n margin: 0;\n width: var(--altcha-checkbox-size);\n}\n.altcha-checkbox-native-spinner {\n display: none;\n left: 0;\n height: var(--altcha-checkbox-size);\n position: absolute;\n top: 0;\n width: var(--altcha-checkbox-size);\n}\n.altcha-checkbox-native[data-loading=true] input {\n appearance: none;\n opacity: 0;\n pointer-events: none;\n}\n.altcha-checkbox-native[data-loading=true] .altcha-checkbox-native-spinner {\n display: block;\n}\n.altcha-switch {\n align-items: center;\n border-radius: var(--altcha-switch-border-radius);\n background-color: var(--altcha-switch-background-color);\n display: flex;\n height: var(--altcha-switch-height);\n padding: var(--altcha-switch-padding);\n position: relative;\n width: var(--altcha-switch-width);\n}\n.altcha-switch:focus-within {\n outline: var(--altcha-checkbox-outline);\n outline-offset: var(--altcha-checkbox-outline-offset);\n}\n.altcha-switch input {\n appearance: none;\n cursor: pointer;\n height: 100%;\n left: 0;\n opacity: 0;\n position: absolute;\n top: 0;\n width: 100%;\n}\n.altcha-switch-toggle {\n align-items: center;\n background-color: var(--altcha-switch-toggle-color);\n border-radius: var(--altcha-switch-toggle-border-radius);\n cursor: pointer;\n display: flex;\n height: var(--altcha-switch-toggle-size);\n justify-content: center;\n left: var(--altcha-switch-padding);\n position: absolute;\n transition: width 150ms ease-out, left 150ms ease-out;\n width: var(--altcha-switch-toggle-size);\n}\n.altcha-switch-spinner {\n display: none;\n height: var(--altcha-switch-toggle-size);\n width: var(--altcha-switch-toggle-size);\n}\n.altcha-switch[data-loading=true] {\n pointer-events: none;\n}\n.altcha-switch[data-loading=true] .altcha-switch-spinner {\n display: block;\n}\n.altcha-switch[data-loading=true] .altcha-switch-toggle {\n background-color: transparent;\n left: calc(50% - var(--altcha-switch-toggle-size) / 2);\n}\n[data-state=verified] .altcha-switch {\n --altcha-switch-background-color: var(--altcha-color-success);\n}\n[data-state=verified] .altcha-switch-toggle {\n background-color: var(--altcha-color-success-content);\n left: calc(100% - var(--altcha-switch-height) + var(--altcha-switch-padding));\n}\n[dir=rtl] .altcha-switch-toggle {\n left: calc(100% - var(--altcha-switch-height) + var(--altcha-switch-padding));\n}\n[dir=rtl][data-state=verified] .altcha-switch-toggle {\n left: var(--altcha-switch-padding);\n}\n.altcha-floating-arrow {\n border: 6px solid transparent;\n border-bottom-color: var(--altcha-border-color);\n content: "";\n height: 0;\n left: 12px;\n position: absolute;\n top: -12px;\n width: 0;\n}\n.altcha-overlay-backdrop {\n bottom: 0;\n left: 0;\n position: fixed;\n right: 0;\n top: 0;\n transition: opacity var(--altcha-transition-duration);\n z-index: var(--altcha-z-index);\n}\n.altcha-overlay-close {\n display: inline-block;\n color: currentColor;\n cursor: pointer;\n font-size: 1rem;\n height: 1rem;\n line-height: 0.85;\n position: absolute;\n right: 0;\n text-align: center;\n text-shadow: 0 0 1px var(--altcha-color-base);\n top: -1.5rem;\n width: 1rem;\n z-index: var(--altcha-z-index);\n}\n.altcha[data-display=overlay] {\n animation: altcha-overlay-slidein var(--altcha-transition-duration) forwards;\n filter: var(--altcha-shadow);\n left: 50%;\n opacity: 0;\n position: fixed;\n top: 45%;\n transform: translate(-50%, -50%);\n z-index: var(--altcha-z-index);\n}\n.altcha[data-display=overlay] .altcha-main {\n width: var(--altcha-max-width);\n}\n.altcha[data-display=floating] {\n display: none;\n filter: var(--altcha-shadow);\n left: var(--altcha-floating-left, -100%);\n position: fixed;\n top: var(--altcha-floating-top, -100%);\n z-index: var(--altcha-z-index);\n}\n.altcha[data-display=floating] .altcha-main {\n width: var(--altcha-max-width);\n}\n.altcha[data-display=floating][data-floating-position=top] .altcha-floating-arrow {\n border-bottom-color: transparent;\n border-top-color: var(--altcha-border-color);\n bottom: -12px;\n top: auto;\n}\n.altcha[data-display=floating][data-visible] {\n display: flex;\n}\n.altcha[data-display=bar] {\n bottom: -100%;\n filter: var(--altcha-shadow);\n left: 0;\n position: fixed;\n right: 0;\n transition: bottom var(--altcha-transition-duration), top var(--altcha-transition-duration);\n z-index: var(--altcha-z-index);\n}\n.altcha[data-display=bar] .altcha-main {\n align-items: center;\n border-radius: 0;\n border-width: var(--altcha-border-width) 0 0 0;\n flex-direction: row;\n max-width: 100% !important;\n}\n.altcha[data-display=bar] .altcha-main > * {\n width: auto;\n}\n.altcha[data-display=bar][data-placement=top] {\n bottom: auto;\n top: -100%;\n}\n.altcha[data-display=bar][data-placement=top] .altcha-main {\n border-width: 0 0 var(--altcha-border-width) 0;\n}\n.altcha[data-display=bar][data-placement=bottom]:not([data-state=unverified]) {\n bottom: 0;\n}\n.altcha[data-display=bar][data-placement=top]:not([data-state=unverified]) {\n top: 0;\n}\n.altcha[data-display=invisible] {\n display: none;\n}\n\n@keyframes altcha-rotate {\n 0% {\n transform: rotate(0deg);\n }\n 100% {\n transform: rotate(360deg);\n }\n}\n@keyframes altcha-bottomsheet-slideup {\n 100% {\n bottom: 0;\n }\n}\n@keyframes altcha-overlay-slidein {\n 100% {\n opacity: 1;\n top: 50%;\n }\n}'),$altcha.algorithms.set("SHA-256",()=>new Ur),$altcha.algorithms.set("SHA-384",()=>new Ur),$altcha.algorithms.set("SHA-512",()=>new Ur),$altcha.algorithms.set("PBKDF2/SHA-256",()=>new qr),$altcha.algorithms.set("PBKDF2/SHA-384",()=>new qr),$altcha.algorithms.set("PBKDF2/SHA-512",()=>new qr);globalThis.$altcha.i18n.set("ar",{ariaLinkLabel:"Altcha (الموقع الرسمي)",enterCode:"أدخل الرمز",enterCodeAria:"أدخل الرمز الذي تسمعه. اضغط على المسافة لتشغيل الصوت.",error:"فشل التحقق. حاول مرة أخرى لاحقاً.",expired:"انتهت صلاحية التحقق. حاول مرة أخرى.",footer:'محمي بواسطة ALTCHA',getAudioChallenge:"احصل على تحدي صوتي",label:"أنا لست روبوتاً",loading:"جارٍ التحميل...",reload:"إعادة تحميل",verify:"تحقق",verificationRequired:"مطلوب التحقق!",verified:"تم التحقق",verifying:"جارٍ التحقق...",waitAlert:"جارٍ التحقق... يرجى الانتظار.",cancel:"إلغاء",enterCodeFromImage:"للمتابعة، يرجى إدخال الرمز من الصورة أدناه."});globalThis.$altcha.i18n.set("bg",{ariaLinkLabel:"Altcha (официален уебсайт)",enterCode:"Въведете код",enterCodeAria:"Въведете кода, който чувате. Натиснете Space за възпроизвеждане на аудио.",error:"Проверката неуспешна. Моля, опитайте по-късно.",expired:"Времето за проверка изтече. Моля, опитайте отново.",footer:'Защитено от ALTCHA',getAudioChallenge:"Аудио проверка",label:"Аз не съм робот",loading:"Зареждане...",reload:"Презареди",verify:"Провери",verificationRequired:"Изисква се проверка!",verified:"Проверено",verifying:"Проверява се...",waitAlert:"Проверката е в процес... моля изчакайте.",cancel:"Отказ",enterCodeFromImage:"За да продължите, моля, въведете кода от изображението по-долу."});globalThis.$altcha.i18n.set("be",{ariaLinkLabel:"Altcha (афіцыйны сайт)",enterCode:"Увядзіце код",enterCodeAria:"Увядзіце код, які вы чуеце. Націсніце прабел, каб прайграць аўдыё.",error:"Праверка не прайшла. Паспрабуйце пазней.",expired:"Тэрмін праверкі скончыўся. Паспрабуйце зноў.",footer:'Абаронена ALTCHA',getAudioChallenge:"Атрымаць аўдыё выклік",label:"Я не робат",loading:"Загрузка...",reload:"Перазагрузіць",verify:"Праверыць",verificationRequired:"Патрабуецца праверка!",verified:"Праверана",verifying:"Правяраем...",waitAlert:"Праверка... калі ласка, пачакайце.",cancel:"Скасаваць",enterCodeFromImage:"Каб працягнуць, увядзіце код з малюнка ніжэй."});globalThis.$altcha.i18n.set("bs",{ariaLinkLabel:"Altcha (službena web stranica)",enterCode:"Unesite kod",enterCodeAria:"Unesite kod koji čujete. Pritisnite Space da biste pustili zvuk.",error:"Verifikacija nije uspjela. Pokušajte ponovo kasnije.",expired:"Verifikacija je istekla. Pokušajte ponovo.",footer:'Zaštićeno od strane ALTCHA',getAudioChallenge:"Dohvatite audio izazov",label:"Nisam robot",loading:"Učitavanje...",reload:"Ponovno učitaj",verify:"Verifikuj",verificationRequired:"Verifikacija je obavezna!",verified:"Verifikovano",verifying:"Verifikacija u toku...",waitAlert:"Verifikacija u toku... molimo vas da sačekate.",cancel:"Odustani",enterCodeFromImage:"Za nastavak, molimo unesite kod sa slike ispod."});globalThis.$altcha.i18n.set("ca",{ariaLinkLabel:"Altcha (lloc web oficial)",enterCode:"Introdueix el codi",enterCodeAria:"Introdueix el codi que escoltes. Prem Espai per reproduir l’àudio.",error:"Verificació fallida. Torna-ho a provar més tard.",expired:"Verificació expirada. Torna-ho a provar.",footer:'Protegit per ALTCHA',getAudioChallenge:"Obtenir un desafiament d’àudio",label:"No sóc un robot",loading:"Carregant...",reload:"Torna a carregar",verify:"Verificar",verificationRequired:"Es requereix verificació!",verified:"Verificat",verifying:"Verificant...",waitAlert:"Verificant... si us plau, espera.",cancel:"Cancel·la",enterCodeFromImage:"Per continuar, si us plau, introdueix el codi de la imatge següent."});globalThis.$altcha.i18n.set("cs",{ariaLinkLabel:"Altcha (oficiální web)",enterCode:"Zadejte kód",enterCodeAria:"Zadejte kód, který slyšíte. Stisknutím mezerníku přehrajete zvuk.",error:"Ověření selhalo. Zkuste to prosím později.",expired:"Ověření vypršelo. Zkuste to prosím znovu.",footer:'Chráněno pomocí ALTCHA',getAudioChallenge:"Získat audio výzvu",label:"Nejsem robot",loading:"Načítání...",reload:"Znovu načíst",verify:"Ověřit",verificationRequired:"Vyžaduje se ověření!",verified:"Ověřeno",verifying:"Ověřování...",waitAlert:"Probíhá ověření... prosím počkejte.",cancel:"Zrušit",enterCodeFromImage:"Pro pokračování zadejte kód z obrázku níže."});globalThis.$altcha.i18n.set("da",{ariaLinkLabel:"Altcha (officiel hjemmeside)",enterCode:"Indtast kode",enterCodeAria:"Indtast den kode, du hører. Tryk på mellemrumstasten for at afspille lyd.",error:"Verificering mislykkedes. Prøv venligst igen senere.",expired:"Verificering udløbet. Prøv venligst igen.",footer:'Beskyttet af ALTCHA',getAudioChallenge:"Hent lydudfordring",label:"Jeg er ikke en robot",loading:"Indlæser...",reload:"Genindlæs",verify:"Verificer",verificationRequired:"Verificering kræves!",verified:"Verificeret",verifying:"Verificerer...",waitAlert:"Verificerer... vent venligst.",cancel:"Annuller",enterCodeFromImage:"For at fortsætte, bedes du indtaste koden fra billedet herunder."});globalThis.$altcha.i18n.set("de",{ariaLinkLabel:"Altcha (offizielle Website)",enterCode:"Code eingeben",enterCodeAria:"Geben Sie den Code ein, den Sie hören. Drücken Sie die Leertaste, um die Audio abzuspielen.",error:"Überprüfung fehlgeschlagen. Bitte versuchen Sie es später erneut.",expired:"Überprüfung abgelaufen. Bitte versuchen Sie es erneut.",footer:'Geschützt durch ALTCHA',getAudioChallenge:"Audio-Herausforderung anfordern",label:"Ich bin kein Roboter",loading:"Lade...",reload:"Neu laden",verify:"Überprüfen",verificationRequired:"Überprüfung erforderlich!",verified:"Überprüft",verifying:"Wird überprüft...",waitAlert:"Überprüfung läuft... bitte warten.",cancel:"Abbrechen",enterCodeFromImage:"Um fortzufahren, geben Sie bitte den Code aus dem Bild unten ein."});globalThis.$altcha.i18n.set("el",{ariaLinkLabel:"Altcha (επίσημος ιστότοπος)",enterCode:"Εισαγάγετε κωδικό",enterCodeAria:"Εισαγάγετε τον κωδικό που ακούτε. Πατήστε Space για να παίξετε τον ήχο.",error:"Η επαλήθευση απέτυχε. Δοκιμάστε ξανά αργότερα.",expired:"Η επαλήθευση έληξε. Δοκιμάστε ξανά.",footer:'Προστατεύεται από το ALTCHA',getAudioChallenge:"Λήψη ηχητικής δοκιμασίας",label:"Δεν είμαι ρομπότ",loading:"Φόρτωση...",reload:"Επαναφόρτωση",verify:"Επαλήθευση",verificationRequired:"Απαιτείται έλεγχος!",verified:"Επαληθεύτηκε",verifying:"Γίνεται επαλήθευση...",waitAlert:"Γίνεται επαλήθευση... παρακαλώ περιμένετε.",cancel:"Ακύρωση",enterCodeFromImage:"Για να συνεχίσετε, εισάγετε τον κωδικό από την παρακάτω εικόνα."});globalThis.$altcha.i18n.set("es-es",{ariaLinkLabel:"Altcha (sitio web oficial)",enterCode:"Introduce el código",enterCodeAria:"Introduce el código que escuchas. Pulsa Espacio para reproducir el audio.",error:"Falló la verificación. Por favor intente nuevamente más tarde.",expired:"Verificación expirada. Por favor intente nuevamente.",footer:'Protegido por ALTCHA',getAudioChallenge:"Obtener un desafío de audio",label:"No soy un robot",loading:"Cargando...",reload:"Recargar",verify:"Verificar",verificationRequired:"¡Verificación requerida!",verified:"Verificado",verifying:"Verificando...",waitAlert:"Verificando... por favor espere.",cancel:"Cancelar",enterCodeFromImage:"Para continuar, introduzca el código de la imagen de abajo."});globalThis.$altcha.i18n.set("es-419",{ariaLinkLabel:"Altcha (sitio web oficial)",enterCode:"Ingresa el código",enterCodeAria:"Ingresa el código que escuchas. Presiona Espacio para reproducir el audio.",error:"Falló la verificación. Por favor vuelve a intentarlo más tarde.",expired:"La verificación expiró. Por favor inténtalo de nuevo.",footer:'Protegido por ALTCHA',getAudioChallenge:"Obtener un reto de audio",label:"No soy un robot",loading:"Cargando...",reload:"Volver a cargar",verify:"Verificar",verificationRequired:"¡Verificación requerida!",verified:"Verificado",verifying:"Verificando...",waitAlert:"Verificando... por favor espera.",cancel:"Cancelar",enterCodeFromImage:"Para continuar, ingresa el código de la imagen a continuación."});globalThis.$altcha.i18n.set("et",{ariaLinkLabel:"Altcha (ametlik veebisait)",enterCode:"Sisesta kood",enterCodeAria:"Sisestage kuuldu kood. Vajutage tühikut, et esitada heli.",error:"Kinnitamine ebaõnnestus. Proovi hiljem uuesti.",expired:"Kinnitamine aegus. Proovi uuesti.",footer:'Kaitstud ALTCHA poolt',getAudioChallenge:"Hangi heliülesanne",label:"Ma ei ole robot",loading:"Laadimine...",reload:"Laadi uuesti",verify:"Kinnita",verificationRequired:"Kontroll on vajalik!",verified:"Kinnitatud",verifying:"Kinnitamine...",waitAlert:"Kinnitamine... palun oota.",cancel:"Tühista",enterCodeFromImage:"Jätkamiseks sisestage alloleval pildil olev kood."});globalThis.$altcha.i18n.set("eu",{ariaLinkLabel:"Altcha (webgune ofiziala)",enterCode:"Sartu kodea",enterCodeAria:"Sartu entzun duzun kodea. Sakatu Espazioa audioa erreproduzitzeko.",error:"Egiaztatzeak huts egin du. Saiatu berriro geroago.",expired:"Egiaztatzea iraungi da. Saiatu berriro.",footer:'ALTCHAk babestuta',getAudioChallenge:"Jaso audio-erronka bat",label:"Ez naiz robot bat",loading:"Kargatzen...",reload:"Birkargatu",verify:"Egiaztatu",verificationRequired:"Egiaztatzea beharrezkoa da!",verified:"Egiaztatuta",verifying:"Egiaztatzen...",waitAlert:"Egiaztatzen... itxaron mesedez.",cancel:"Utzi",enterCodeFromImage:"Jarraitzeko, idatzi beheko irudiko kodea."});globalThis.$altcha.i18n.set("fa",{ariaLinkLabel:"Altcha (وب‌سایت رسمی)",enterCode:"کد را وارد کنید",enterCodeAria:"کدی که می‌شنوید را وارد کنید. برای پخش صدا Space را فشار دهید.",error:"احراز هویت ناموفق بود. بعداً دوباره تلاش کنید.",expired:"احراز هویت منقضی شد. دوباره تلاش کنید.",footer:'محافظت شده توسط ALTCHA',getAudioChallenge:"دریافت چالش صوتی",label:"من ربات نیستم",loading:"در حال بارگذاری...",reload:"بارگذاری مجدد",verify:"تایید",verificationRequired:"احراز هویت لازم است!",verified:"تایید شد",verifying:"در حال تایید...",waitAlert:"در حال تایید... لطفا منتظر بمانید.",cancel:"لغو کردن",enterCodeFromImage:"برای ادامه، لطفاً کد تصویر زیر را وارد کنید."});globalThis.$altcha.i18n.set("lb",{ariaLinkLabel:"Altcha (offiziell Websäit)",enterCode:"Code aginn",enterCodeAria:"Gitt de Code an deen dir héiert. Dréckt op d'Weltraumtast fir Audio ofzespillen.",error:"Verifikatioun ass feelgeschloen. Probéiert méi spéit nach emol.",expired:"Verifikatioun ofgelaf. Probéiert nach emol.",footer:'Geschützt vun ALTCHA',getAudioChallenge:"Kritt eng Audio-Herausfuerderung",label:"Ech sinn keen Robot",loading:"Lueden...",reload:"Nei lueden",verify:"Verifizéieren",verificationRequired:"Verifikatioun néideg!",verified:"Verifizéiert",verifying:"Verifizéieren...",waitAlert:"Verifizéieren... waart wgl.",cancel:"Ofbriechen",enterCodeFromImage:"Fir virun ze fueren, gitt wgl. de Code aus dem Bild hei drënner an."});globalThis.$altcha.i18n.set("fi",{ariaLinkLabel:"Altcha (virallinen verkkosivusto)",enterCode:"Syötä koodi",enterCodeAria:"Kirjoita kuulemasi koodi. Paina välilyöntiä toistaaksesi äänen.",error:"Varmennus epäonnistui. Yritä myöhemmin uudelleen.",expired:"Varmennus vanhentui. Yritä uudelleen.",footer:'Suojattu ALTCHA:lla',getAudioChallenge:"Hae äänitehtävä",label:"En ole robotti",loading:"Ladataan...",reload:"Lataa uudelleen",verify:"Vahvista",verificationRequired:"Vahvistus vaaditaan!",verified:"Vahvistettu",verifying:"Vahvistetaan...",waitAlert:"Vahvistetaan... odota hetki.",cancel:"Peruuta",enterCodeFromImage:"Jatkaaksesi, syötä alla olevan kuvan koodi."});globalThis.$altcha.i18n.set("fr-ca",{ariaLinkLabel:"Altcha (site officiel)",enterCode:"Entrez le code",enterCodeAria:"Entrez le code que vous entendez. Appuyez sur la barre d'espace pour écouter l'audio.",error:"Échec de la vérification. Réessayez plus tard.",expired:"La vérification a expiré. Réessayez.",footer:'Protégé par ALTCHA',getAudioChallenge:"Obtenir un défi audio",label:"Je ne suis pas un robot",loading:"Chargement...",reload:"Recharger",verify:"Vérifier",verificationRequired:"Vérification requise !",verified:"Vérifié",verifying:"Vérification en cours...",waitAlert:"Vérification en cours... veuillez patienter.",cancel:"Annuler",enterCodeFromImage:"Pour continuer, veuillez entrer le code de l'image ci-dessous."});globalThis.$altcha.i18n.set("fr-fr",{ariaLinkLabel:"Altcha (site officiel)",enterCode:"Entrez le code",enterCodeAria:"Entrez le code que vous entendez. Appuyez sur Espace pour écouter l'audio.",error:"Échec de la vérification. Essayez à nouveau plus tard.",expired:"La vérification a expiré. Essayez à nouveau.",footer:'Protégé par ALTCHA',getAudioChallenge:"Obtenir un défi audio",label:"Je ne suis pas un robot",loading:"Chargement...",reload:"Recharger",verify:"Vérifier",verificationRequired:"Vérification requise !",verified:"Vérifié",verifying:"Vérification en cours...",waitAlert:"Vérification en cours... veuillez patienter.",cancel:"Annuler",enterCodeFromImage:"Pour continuer, veuillez entrer le code de l'image ci-dessous."});globalThis.$altcha.i18n.set("ga",{ariaLinkLabel:"Altcha (láithreán gréasáin oifigiúil)",enterCode:"Iontráil cód",enterCodeAria:"Cuir isteach an cód a chloiseann tú. Brúigh Spás chun an fuaime a sheinm.",error:"Theip ar an bhfíorú. Bain triail eile as níos déanaí.",expired:"Tá an fíorú as feidhm. Bain triail eile as.",footer:'Cosanta ag ALTCHA',getAudioChallenge:"Faigh dúshlán fuaime",label:"Níl mé i mo róbat",loading:"Á luchtú...",reload:"Athluchtaigh",verify:"Fíoraigh",verificationRequired:"Fíorú riachtanach!",verified:"Fíoraithe",verifying:"Fíorú ar siúl...",waitAlert:"Fíorú ar siúl... fan go fóill.",cancel:"Cealaigh",enterCodeFromImage:"Chun dul ar aghaidh, le do thoil cuir isteach an cód ón íomhá thíos."});globalThis.$altcha.i18n.set("hr",{ariaLinkLabel:"Altcha (službena web stranica)",enterCode:"Unesite kod",enterCodeAria:"Unesite kod koji čujete. Pritisnite razmaknicu za reprodukciju zvuka.",error:"Provjera nije uspjela. Molimo pokušajte kasnije.",expired:"Provjera je istekla. Molimo pokušajte ponovo.",footer:'Zaštićeno od strane ALTCHA',getAudioChallenge:"Audio provjera",label:"Ja nisam robot",loading:"Učitavanje...",reload:"Ponovno učitaj",verify:"Provjeri",verificationRequired:"Potrebna je provjera!",verified:"Provjereno",verifying:"Provjeravanje...",waitAlert:"Provjera je u tijeku... molimo pričekajte.",cancel:"Odustani",enterCodeFromImage:"Za nastavak molimo unesite kod sa slike ispod."});globalThis.$altcha.i18n.set("hu",{ariaLinkLabel:"Altcha (hivatalos weboldal)",enterCode:"Írja be a kódot",enterCodeAria:"Írja be a hallott kódot. Nyomja meg a Szóköz billentyűt a hang lejátszásához.",error:"A hitelesítés nem sikerült. Próbáld meg később újra.",expired:"A hitelesítés lejárt. Próbáld újra.",footer:'Védve a következő által: ALTCHA',getAudioChallenge:"Hangalapú kihívás kérése",label:"Nem vagyok robot",loading:"Betöltés...",reload:"Újratöltés",verify:"Ellenőrzés",verificationRequired:"Ellenőrzés szükséges!",verified:"Ellenőrizve",verifying:"Ellenőrzés folyamatban...",waitAlert:"Ellenőrzés folyamatban... kérlek várj.",cancel:"Mégse",enterCodeFromImage:"A folytatáshoz, kérjük, adja meg az alábbi kép kódját."});globalThis.$altcha.i18n.set("is",{ariaLinkLabel:"Altcha (opinber vefsíða)",enterCode:"Sláðu inn kóða",enterCodeAria:"Sláðu inn kóðann sem þú heyrir. Ýttu á Space til að spila hljóðið.",error:"Staðfesting mistókst. Reyndu aftur síðar.",expired:"Staðfesting er útrunnin. Reyndu aftur.",footer:'Verndað af ALTCHA',getAudioChallenge:"Fá hljóðáskorun",label:"Ég er ekki robot",loading:"Hleður...",reload:"Hleð aftur",verify:"Staðfesta",verificationRequired:"Staðfesting er nauðsynleg!",verified:"Staðfest",verifying:"Að staðfesta...",waitAlert:"Að staðfesta... vinsamlegast bíða.",cancel:"Hætta við",enterCodeFromImage:"Til að halda áfram, vinsamlegast sláðu inn kóðann af myndinni hér að neðan."});globalThis.$altcha.i18n.set("it",{ariaLinkLabel:"Altcha (sito ufficiale)",enterCode:"Inserisci il codice",enterCodeAria:"Inserisci il codice che senti. Premi Spazio per riprodurre l'audio.",error:"Verifica fallita. Riprova più tardi.",expired:"Verifica scaduta. Riprova.",footer:'Protetto da ALTCHA',getAudioChallenge:"Ottieni una sfida audio",label:"Non sono un robot",loading:"Caricamento...",reload:"Ricarica",verify:"Verifica",verificationRequired:"Verifica richiesta!",verified:"Verificato",verifying:"Verifica in corso...",waitAlert:"Verifica in corso... attendere.",cancel:"Annulla",enterCodeFromImage:"Per procedere, inserisci il codice dall'immagine sottostante."});globalThis.$altcha.i18n.set("lt",{ariaLinkLabel:"Altcha (oficiali svetainė)",enterCode:"Įveskite kodą",enterCodeAria:"Įveskite girdimą kodą. Paspauskite tarpo klavišą, kad grotumėte garso įrašą.",error:"Patvirtinimas nepavyko. Bandykite vėliau.",expired:"Patvirtinimo laikas baigėsi. Bandykite dar kartą.",footer:'Apsaugota ALTCHA',getAudioChallenge:"Gauti garso užduotį",label:"Aš nesu robotas",loading:"Įkeliama...",reload:"Įkelti iš naujo",verify:"Patvirtinti",verificationRequired:"Reikalingas patvirtinimas!",verified:"Patvirtinta",verifying:"Tikrinama...",waitAlert:"Tikrinama... prašome palaukti.",cancel:"Atšaukti",enterCodeFromImage:"Norėdami tęsti, įveskite kodą iš paveikslėlio žemiau."});globalThis.$altcha.i18n.set("lv",{ariaLinkLabel:"Altcha (oficiālā tīmekļa vietne)",enterCode:"Ievadiet kodu",enterCodeAria:"Ievadiet dzirdamo kodu. Nospiediet atstarpes taustiņu, lai atskaņotu audio.",error:"Verifikācija neizdevās. Mēģiniet vēlāk vēlreiz.",expired:"Verifikācijas laiks ir beidzies. Mēģiniet vēlreiz.",footer:'Aizsargāts ar ALTCHA',getAudioChallenge:"Saņemt audio izaicinājumu",label:"Es neesmu robots",loading:"Notiek ielāde...",reload:"Pārlādēt",verify:"Verificēt",verificationRequired:"Nepieciešama verifikācija!",verified:"Verificēts",verifying:"Notiek verifikācija...",waitAlert:"Notiek verifikācija... lūdzu, uzgaidiet.",cancel:"Atcelt",enterCodeFromImage:"Lai turpinātu, lūdzu, ievadiet zemāk redzamo attēlu kodu."});globalThis.$altcha.i18n.set("mt",{ariaLinkLabel:"Altcha (sit uffiċjali)",enterCode:"Idħol il-kodiċi",enterCodeAria:"Idħol il-kodiċi li tisma'. Agħfas Spazju biex tindaqq l-awdjo.",error:"Il-verifika falliet. Erġa’ pprova aktar tard.",expired:"Il-verifika skadiet. Erġa’ pprova.",footer:'Protett minn ALTCHA',getAudioChallenge:"Ikseb sfida bl-awdjo",label:"M’inix robot",loading:"Qed jitgħabba...",reload:"Ittella’ mill-ġdid",verify:"Ivverifika",verificationRequired:"Verifika meħtieġa!",verified:"Ivverifikat",verifying:"Verifika għaddejja...",waitAlert:"Verifika għaddejja... stenna ftit.",cancel:"Ikkanċella",enterCodeFromImage:"Biex tipproċedi, jekk jogħġbok daħħal il-kodiċi mill-immaġni hawn taħt."});globalThis.$altcha.i18n.set("nb",{ariaLinkLabel:"Altcha (offisiell nettside)",enterCode:"Skriv inn kode",enterCodeAria:"Skriv inn koden du hører. Trykk på Space for å spille av lyden.",error:"Verifisering mislyktes. Prøv igjen senere.",expired:"Verifiseringen utløp. Prøv igjen.",footer:'Beskyttet av ALTCHA',getAudioChallenge:"Få en lydutfordring",label:"Jeg er ikke en robot",loading:"Laster...",reload:"Last på nytt",verify:"Verifiser",verificationRequired:"Verifisering kreves!",verified:"Verifisert",verifying:"Verifiserer...",waitAlert:"Verifiserer... vennligst vent.",cancel:"Avbryt",enterCodeFromImage:"For å fortsette, vennligst skriv inn koden fra bildet nedenfor."});globalThis.$altcha.i18n.set("nl",{ariaLinkLabel:"Altcha (officiële website)",enterCode:"Voer code in",enterCodeAria:"Voer de code in die je hoort. Druk op Spatie om de audio af te spelen.",error:"Verificatie mislukt. Probeer het later opnieuw.",expired:"Verificatie verlopen. Probeer het opnieuw.",footer:'Beschermd door ALTCHA',getAudioChallenge:"Audio-uitdaging ontvangen",label:"Ik ben geen robot",loading:"Laden...",reload:"Herladen",verify:"Verifiëren",verificationRequired:"Verificatie vereist!",verified:"Geverifieerd",verifying:"Bezig met verifiëren...",waitAlert:"Bezig met verifiëren... even geduld a.u.b.",cancel:"Annuleren",enterCodeFromImage:"Om door te gaan, voert u de code uit de onderstaande afbeelding in."});globalThis.$altcha.i18n.set("pl",{ariaLinkLabel:"Altcha (oficjalna strona internetowa)",enterCode:"Wprowadź kod",enterCodeAria:"Wpisz kod, który słyszysz. Naciśnij Spację, aby odtworzyć dźwięk.",error:"Weryfikacja nie powiodła się. Spróbuj ponownie później.",expired:"Weryfikacja wygasła. Spróbuj ponownie.",footer:'Chronione przez ALTCHA',getAudioChallenge:"Pobierz zadanie dźwiękowe",label:"Nie jestem robotem",loading:"Ładowanie...",reload:"Odśwież",verify:"Zweryfikuj",verificationRequired:"Wymagana weryfikacja!",verified:"Zweryfikowano",verifying:"Weryfikacja...",waitAlert:"Trwa weryfikacja... proszę czekać.",cancel:"Anuluj",enterCodeFromImage:"Aby kontynuować, wprowadź kod z poniższego obrazka."});globalThis.$altcha.i18n.set("pt-pt",{ariaLinkLabel:"Altcha (site oficial)",enterCode:"Introduza o código",enterCodeAria:"Introduza o código que ouve. Prima Espaço para reproduzir o áudio.",error:"A verificação falhou. Por favor, tente novamente mais tarde.",expired:"Verificação expirada. Por favor, tente novamente.",footer:'Protegido por ALTCHA',getAudioChallenge:"Obter desafio de áudio",label:"Não sou um robô",loading:"A carregar...",reload:"Recarregar",verify:"Verificar",verificationRequired:"Verificação necessária!",verified:"Verificado",verifying:"A verificar...",waitAlert:"A verificar... por favor aguarde.",cancel:"Cancelar",enterCodeFromImage:"Para prosseguir, introduza o código da imagem abaixo."});globalThis.$altcha.i18n.set("pt-br",{ariaLinkLabel:"Altcha (site oficial)",enterCode:"Digite o código",enterCodeAria:"Digite o código que você ouve. Pressione Espaço para reproduzir o áudio.",error:"Falha na verificação. Por favor, tente novamente mais tarde.",expired:"Verificação expirada. Por favor, tente novamente.",footer:'Protegido por ALTCHA',getAudioChallenge:"Obter desafio de áudio",label:"Eu não sou um robô",loading:"Carregando...",reload:"Recarregar",verify:"Verificar",verificationRequired:"Verificação necessária!",verified:"Verificado",verifying:"Verificando...",waitAlert:"Verificando... por favor aguarde.",cancel:"Cancelar",enterCodeFromImage:"Para prosseguir, digite o código da imagem abaixo."});globalThis.$altcha.i18n.set("ro",{ariaLinkLabel:"Altcha (site oficial)",enterCode:"Introduceți codul",enterCodeAria:"Introduceți codul pe care îl auziți. Apăsați Spațiu pentru a reda audio.",error:"Verificarea a eșuat. Încearcă din nou mai târziu.",expired:"Verificarea a expirat. Încearcă din nou.",footer:'Protejat de ALTCHA',getAudioChallenge:"Obține o provocare audio",label:"Nu sunt un robot",loading:"Se încarcă...",reload:"Reîncarcă",verify:"Verifică",verificationRequired:"Verificare necesară!",verified:"Verificat",verifying:"Se verifică...",waitAlert:"Se verifică... te rugăm să aștepți.",cancel:"Anulare",enterCodeFromImage:"Pentru a continua, vă rugăm să introduceți codul din imaginea de mai jos."});globalThis.$altcha.i18n.set("ru",{ariaLinkLabel:"Altcha (официальный сайт)",enterCode:"Введите код",enterCodeAria:"Введите код, который слышите. Нажмите пробел для воспроизведения аудио.",error:"Ошибка верификации. Попробуйте позже.",expired:"Срок действия верификации истек. Попробуйте снова.",footer:'Защищено ALTCHA',getAudioChallenge:"Получить аудио задачу",label:"Я не робот",loading:"Загрузка...",reload:"Перезагрузить",verify:"Проверить",verificationRequired:"Требуется проверка!",verified:"Проверено",verifying:"Идет проверка...",waitAlert:"Идет проверка... Пожалуйста, подождите.",cancel:"Отмена",enterCodeFromImage:"Чтобы продолжить, пожалуйста, введите код с изображения ниже."});globalThis.$altcha.i18n.set("sk",{ariaLinkLabel:"Altcha (oficiálna webová stránka)",enterCode:"Zadajte kód",enterCodeAria:"Zadajte kód, ktorý počujete. Stlačením medzerníka prehráte zvuk.",error:"Verifikácia zlyhala. Skúste to znova neskôr.",expired:"Verifikácia vypršala. Skúste to znova.",footer:'Chránené ALTCHA',getAudioChallenge:"Získať audio výzvu",label:"Nie som robot",loading:"Načítava sa...",reload:"Obnoviť",verify:"Verifikovať",verificationRequired:"Vyžaduje sa overenie!",verified:"Verifikované",verifying:"Prebieha verifikácia...",waitAlert:"Prebieha verifikácia... prosím čakajte.",cancel:"Zrušiť",enterCodeFromImage:"Na pokračovanie, prosím, zadajte kód z obrázka nižšie."});globalThis.$altcha.i18n.set("sl",{ariaLinkLabel:"Altcha (uradna spletna stran)",enterCode:"Vnesite kodo",enterCodeAria:"Vnesite kodo, ki jo slišite. Pritisnite preslednico za predvajanje zvoka.",error:"Preverjanje ni uspelo. Poskusite znova kasneje.",expired:"Preverjanje je poteklo. Poskusite znova.",footer:'Zaščiteno z ALTCHA',getAudioChallenge:"Pridobite zvočni izziv",label:"Nisem robot",loading:"Nalagam...",reload:"Ponovno naloži",verify:"Preveri",verificationRequired:"Potrebna je preveritev!",verified:"Preverjeno",verifying:"Preverjanje...",waitAlert:"Preverjanje... prosim počakajte.",cancel:"Preklic",enterCodeFromImage:"Za nadaljevanje, prosimo, vnesite kodo s slike spodaj."});globalThis.$altcha.i18n.set("sq",{ariaLinkLabel:"Altcha (faqja zyrtare)",enterCode:"Fut kodin",enterCodeAria:"Fut kodin që dëgjon. Shtypni Hapësirë për të luajtur audio.",error:"Verifikimi dështoi. Provoni përsëri më vonë.",expired:"Verifikimi ka skaduar. Provoni përsëri.",footer:'I mbrojtur nga ALTCHA',getAudioChallenge:"Merr një sfidë audio",label:"Unë nuk jam një robot",loading:"Duke u ngarkuar...",reload:"Ringarko",verify:"Verifiko",verificationRequired:"Kërkohet verifikimi!",verified:"I verifikuar",verifying:"Duke verifikuar...",waitAlert:"Duke verifikuar... ju lutem prisni.",cancel:"Anuloje",enterCodeFromImage:"Për të vazhduar, ju lutemi fusni kodin nga imazhi më poshtë."});globalThis.$altcha.i18n.set("sr",{ariaLinkLabel:"Altcha (zvanična web stranica)",enterCode:"Unesite kod",enterCodeAria:"Unesite kod koji čujete. Pritisnite Space da biste pustili zvuk.",error:"Verifikacija nije uspela. Pokušajte ponovo kasnije.",expired:"Verifikacija je istekla. Pokušajte ponovo.",footer:'Zaštićeno od strane ALTCHA',getAudioChallenge:"Dohvatite audio izazov",label:"Nisam robot",loading:"Učitavanje...",reload:"Ponovo učitaj",verify:"Verifikuj",verificationRequired:"Verifikacija je obavezna!",verified:"Verifikovano",verifying:"Verifikacija u toku...",waitAlert:"Verifikacija u toku... molimo vas da sačekate.",cancel:"Откажи",enterCodeFromImage:"Да бисте наставили, унесите код са слике испод."});globalThis.$altcha.i18n.set("sv",{ariaLinkLabel:"Altcha (officiell webbplats)",enterCode:"Ange kod",enterCodeAria:"Ange koden du hör. Tryck på mellanslag för att spela upp ljudet.",error:"Verifiering misslyckades. Försök igen senare.",expired:"Verifieringen har gått ut. Försök igen.",footer:'Skyddad av ALTCHA',getAudioChallenge:"Få ljudutmaning",label:"Jag är inte en robot",loading:"Laddar...",reload:"Ladda om",verify:"Verifiera",verificationRequired:"Verifiering krävs!",verified:"Verifierad",verifying:"Verifierar...",waitAlert:"Verifierar... vänligen vänta.",cancel:"Avbryt",enterCodeFromImage:"För att fortsätta, ange koden från bilden nedan."});globalThis.$altcha.i18n.set("tr",{ariaLinkLabel:"Altcha (resmi web sitesi)",enterCode:"Kodu girin",enterCodeAria:"Duyduğunuz kodu girin. Ses dosyasını oynatmak için Boşluk tuşuna basın.",error:"Doğrulama başarısız oldu. Lütfen daha sonra tekrar deneyin.",expired:"Doğrulama süresi doldu. Lütfen tekrar deneyin.",footer:'ALTCHA tarafından korunuyor ALTCHA',getAudioChallenge:"Sesli doğrulama al",label:"Ben robot değilim",loading:"Yükleniyor...",reload:"Yeniden yükle",verify:"Doğrula",verificationRequired:"Doğrulama gerekli!",verified:"Doğrulandı",verifying:"Doğrulama yapılıyor...",waitAlert:"Doğrulama yapılıyor... lütfen bekleyin.",cancel:"İptal",enterCodeFromImage:"Devam etmek için lütfen aşağıdaki resimdeki kodu girin."});globalThis.$altcha.i18n.set("uk",{ariaLinkLabel:"Altcha (офіційний сайт)",enterCode:"Введіть код",enterCodeAria:"Введіть код, який ви чуєте. Натисніть пробіл, щоб відтворити аудіо.",error:"Перевірка не вдалася. Спробуйте пізніше.",expired:"Перевірка прострочена. Спробуйте знову.",footer:'Захищено ALTCHA',getAudioChallenge:"Отримати аудіо-челлендж",label:"Я не робот",loading:"Завантаження...",reload:"Перезавантажити",verify:"Перевірити",verificationRequired:"Потрібна перевірка!",verified:"Перевірено",verifying:"Перевіряється...",waitAlert:"Перевірка... будь ласка, зачекайте.",cancel:"Скасувати",enterCodeFromImage:"Щоб продовжити, введіть код із зображення нижче."});globalThis.$altcha.i18n.set("af",{ariaLinkLabel:"Altcha (amptelike webwerf)",enterCode:"Voer kode in",enterCodeAria:"Voer die kode in wat jy hoor. Druk Spasie om die klank af te speel.",error:"Verifikasie het misluk. Probeer later weer.",expired:"Verifikasie het verval. Probeer weer.",footer:'Beskerm deur ALTCHA',getAudioChallenge:"Kry 'n klankuitdaging",label:"Ek is nie 'n robot nie",loading:"Laai...",reload:"Laai weer",verify:"Verifieer",verificationRequired:"Verifikasie is vereis!",verified:"Geverifieer",verifying:"Verifieer...",waitAlert:"Verifieer... wag asseblief.",cancel:"Kanselleer",enterCodeFromImage:"Om voort te gaan, voer asseblief die kode vanaf die onderstaande prentjie in."});globalThis.$altcha.i18n.set("am",{ariaLinkLabel:"Altcha (ዋናው ድህረ ገጽ)",enterCode:"ኮድ አስገባ",enterCodeAria:"የሚሰማዎትን ኮድ ያስገቡ። ድምጽ ለመጫወት Space ን ይጫኑ።",error:"ማረጋገጫ አልተሳካም። በኋላ ላይ እንደገና ይሞክሩ።",expired:"ማረጋገጫው ጊዜው አልፏል። እንደገና ይሞክሩ።",footer:'በ ALTCHA የተጠበቀ',getAudioChallenge:"የድምጽ ፈተና ያግኙ",label:"እኔ ሮቦት አይደለሁም",loading:"በመጫን ላይ...",reload:"እንደገና ጫን",verify:"አረጋግጥ",verificationRequired:"ማረጋገጫ ያስፈልጋል!",verified:"ተረጋግጧል",verifying:"በማረጋገጥ ላይ...",waitAlert:"በማረጋገጥ ላይ... እባክዎ ይጠብቁ።",cancel:"ይቅር",enterCodeFromImage:"ለመቀጠል፣ እባክዎን ከታች ካለው ምስል ኮዱን ያስገቡ።"});globalThis.$altcha.i18n.set("sw",{ariaLinkLabel:"Altcha (tovuti rasmi)",enterCode:"Weka nambari",enterCodeAria:"Weka nambari unayosikia. Bonyeza Space kucheza sauti.",error:"Uthibitishaji umeshindwa. Jaribu tena baadaye.",expired:"Uthibitishaji umeisha. Jaribu tena.",footer:'Imealindwa na ALTCHA',getAudioChallenge:"Pata changamoto ya sauti",label:"Mimi sio roboti",loading:"Inapakia...",reload:"Pakia tena",verify:"Thibitisha",verificationRequired:"Uthibitishaji unahitajika!",verified:"Imethibitishwa",verifying:"Inathibitisha...",waitAlert:"Inathibitisha... tafadhali subiri.",cancel:"Ghairi",enterCodeFromImage:"Ili kuendelea, tafadhali weka nambari kutoka kwa picha hapa chini."});globalThis.$altcha.i18n.set("yo",{ariaLinkLabel:"Altcha (oju opo wẹẹbu osise)",enterCode:"Tẹ koodu sii",enterCodeAria:"Tẹ koodu ti o ngbọ sii. Tẹ Space lati ṣe ohun orin.",error:"Ìdájọ́kòwò kò ṣẹ́ṣe. Gbiyanju lẹẹkansi ni ọjọ́ iwájú.",expired:"Ìdájọ́kòwò ti pari. Gbiyanju lẹẹkansi.",footer:'Ti wa ni ààbò nipasẹ ALTCHA',getAudioChallenge:"Gba ìjàdú ohùn",label:"Emi kii ṣe ẹrọ",loading:"Ó ń gbé sílẹ̀...",reload:"Tún gbé wọlé",verify:"Ṣàdájọ́",verificationRequired:"Ìdájọ́kòwò ni a nílò!",verified:"A ti dájọ́",verifying:"Ó ń ṣàdájọ́...",waitAlert:"Ó ń ṣàdájọ́... ẹ jọ̀ọ́ ẹ duro.",cancel:"Fagbọsẹ",enterCodeFromImage:"Lati tẹsiwaju, jọwọ tẹ koodu ti o wa lati aworan isalẹ sii."});globalThis.$altcha.i18n.set("bn",{ariaLinkLabel:"Altcha (অফিসিয়াল ওয়েবসাইট)",enterCode:"কোড লিখুন",enterCodeAria:"আপনি যে কোড শুনতে পান তা লিখুন। অডিও প্লে করতে স্পেস বাটন টিপুন।",error:"যাচাইকরণ ব্যর্থ হয়েছে। পরে আবার চেষ্টা করুন।",expired:"যাচাইকরণ সময়সীমা শেষ হয়েছে। আবার চেষ্টা করুন।",footer:'দ্বারা সুরক্ষিত ALTCHA',getAudioChallenge:"অডিও চ্যালেঞ্জ নিন",label:"আমি রোবট নই",loading:"লোড হচ্ছে...",reload:"পুনরায় লোড করুন",verify:"যাচাই করুন",verificationRequired:"যাচাই প্রয়োজন!",verified:"যাচাই করা হয়েছে",verifying:"যাচাই করা হচ্ছে...",waitAlert:"যাচাই করা হচ্ছে... দয়া করে অপেক্ষা করুন।",cancel:"বাতিল করুন",enterCodeFromImage:"এগিয়ে যেতে, অনুগ্রহ করে নীচের চিত্র থেকে কোডটি প্রবেশ করান।"});globalThis.$altcha.i18n.set("he",{ariaLinkLabel:"Altcha (אתר רשמי)",enterCode:"הזן קוד",enterCodeAria:"הזן את הקוד שאתה שומע. לחץ על רווח להפעלת השמע.",error:"האימות נכשל. נסה שוב מאוחר יותר.",expired:"תוקף האימות פג. נסה שוב.",footer:'מוגן על ידי ALTCHA',getAudioChallenge:"קבל אתגר שמע",label:"אני לא רובוט",loading:"טוען...",reload:"טען מחדש",verify:"אמת",verificationRequired:"נדרש אימות!",verified:"אומת",verifying:"מאמת...",waitAlert:"מבצע אימות... אנא המתן.",cancel:"ביטול",enterCodeFromImage:"כדי להמשיך, אנא הזן את הקוד מהתמונה למטה."});globalThis.$altcha.i18n.set("hi",{ariaLinkLabel:"Altcha (आधिकारिक वेबसाइट)",enterCode:"कोड दर्ज करेंं",enterCodeAria:"आप जो कोड सुनते हैं उसे दर्ज करें। ऑडियो चलाने के लिए स्पेस दबाएं।",error:"सत्यापन विफल। कृपया बाद में फिर से प्रयास करें।",expired:"सत्यापन समाप्त हो गया है। कृपया पुनः प्रयास करें।",footer:'द्वारा संरक्षित ALTCHA',getAudioChallenge:"ऑडियो चुनौती प्राप्त करें",label:"मैं रोबोट नहीं हूँ",loading:"लोड हो रहा है...",reload:"पुनः लोड करें",verify:"सत्यापित करें",verificationRequired:"सत्यापन आवश्यक है!",verified:"सत्यापित",verifying:"सत्यापित कर रहे हैं...",waitAlert:"सत्यापित किया जा रहा है... कृपया प्रतीक्षा करें।",cancel:"रद्द करें",enterCodeFromImage:"आगे बढ़ने के लिए, कृपया नीचे दी गई छवि से कोड दर्ज करें।"});globalThis.$altcha.i18n.set("id",{ariaLinkLabel:"Altcha (situs web resmi)",enterCode:"Masukkan kode",enterCodeAria:"Masukkan kode yang Anda dengar. Tekan Spasi untuk memutar audio.",error:"Verifikasi gagal. Coba lagi nanti.",expired:"Verifikasi telah kedaluwarsa. Coba lagi.",footer:'Dilindungi oleh ALTCHA',getAudioChallenge:"Dapatkan tantangan audio",label:"Saya bukan robot",loading:"Memuat...",reload:"Muat ulang",verify:"Verifikasi",verificationRequired:"Verifikasi diperlukan!",verified:"Terverifikasi",verifying:"Memverifikasi...",waitAlert:"Memverifikasi... harap tunggu.",cancel:"Batal",enterCodeFromImage:"Untuk melanjutkan, silakan masukkan kode dari gambar di bawah ini."});globalThis.$altcha.i18n.set("ja",{ariaLinkLabel:"Altcha (公式ウェブサイト)",enterCode:"コードを入力",enterCodeAria:"聞こえるコードを入力してください。スペースキーを押して音声を再生します。",error:"認証に失敗しました。後でもう一度試してください。",expired:"認証が期限切れです。再試行してください。",footer:'保護されています ALTCHA',getAudioChallenge:"音声チャレンジを取得",label:"私はロボットではありません",loading:"読み込み中...",reload:"再読み込み",verify:"確認",verificationRequired:"認証が必要です!",verified:"確認済み",verifying:"確認中...",waitAlert:"確認中...少々お待ちください。",cancel:"キャンセル",enterCodeFromImage:"続行するには、以下の画像からコードを入力してください。"});globalThis.$altcha.i18n.set("ko",{ariaLinkLabel:"Altcha (공식 웹사이트)",enterCode:"코드 입력",enterCodeAria:"들리는 코드를 입력하세요. 스페이스 바를 눌러 오디오를 재생합니다.",error:"인증 실패. 나중에 다시 시도해주세요.",expired:"인증이 만료되었습니다. 다시 시도해주세요.",footer:'ALTCHA에서 보호됨 ALTCHA',getAudioChallenge:"오디오 챌린지 받기",label:"저는 로봇이 아닙니다",loading:"로딩 중...",reload:"새로 고침",verify:"확인",verificationRequired:"인증이 필요합니다!",verified:"확인됨",verifying:"확인 중...",waitAlert:"확인 중... 잠시만 기다려주세요.",cancel:"취소",enterCodeFromImage:"계속 진행하려면 아래 이미지에서 코드를 입력하세요."});globalThis.$altcha.i18n.set("kk",{ariaLinkLabel:"Altcha (ресми веб-сайт)",enterCode:"Кодты енгізіңіз",enterCodeAria:"Естіген кодыңызды енгізіңіз. Аудионы ойнату үшін Бос орынды басыңыз.",error:"Тексеру сәтсіз аяқталды. Кейінірек қайталаңыз.",expired:"Тексеру мерзімі аяқталды. Қайталаңыз.",footer:'ALTCHA қорғайды',getAudioChallenge:"Аудио сынақ алу",label:"Мен робот емеспін",loading:"Жүктелуде...",reload:"Қайта жүктеу",verify:"Тексеру",verificationRequired:"Тексеру талап етіледі!",verified:"Тексерілді",verifying:"Тексеруде...",waitAlert:"Тексерілуде... күте тұрыңыз.",cancel:"Болдыру",enterCodeFromImage:"Жалғастыру үшін төмендегі суреттегі кодты енгізіңіз."});globalThis.$altcha.i18n.set("mr",{ariaLinkLabel:"Altcha (अधिकृत संकेतस्थळ)",enterCode:"कोड टाकाा",enterCodeAria:"तुम्ही ऐकत असलेला कोड टाका. ऑडिओ प्ले करण्यासाठी स्पेस दाबा.",error:"पुष्टीकरण अयशस्वी झाले. कृपया नंतर पुन्हा प्रयत्न करा.",expired:"पुष्टीकरण कालबाह्य झाले आहे. कृपया पुन्हा प्रयत्न करा.",footer:'द्वारे संरक्षित ALTCHA',getAudioChallenge:"ऑडिओ चॅलेंज मिळवा",label:"मी रोबोट नाही",loading:"लोड होत आहे...",reload:"पुन्हा लोड करा",verify:"पुष्टीकरण करा",verificationRequired:"पडताळणी आवश्यक आहे!",verified:"पुष्टीकरण झाले",verifying:"पुष्टीकरण करत आहे...",waitAlert:"पुष्टीकरण करत आहे... कृपया थोडा वेळ थांबा.",cancel:"रद्द करा",enterCodeFromImage:"पुढे जाण्यासाठी, कृपया खालील प्रतिमेतील कोड प्रविष्ट करा."});globalThis.$altcha.i18n.set("ta",{ariaLinkLabel:"Altcha (அதிகாரப்பூர்வ வலைத்தளம்)",enterCode:"குறியீட்டை உள்ளிடவும்",enterCodeAria:"நீங்கள் கேட்கும் குறியீட்டை உள்ளிடவும். ஆடியோவை இயக்க Space ஐ அழுத்தவும்.",error:"சரிபார்ப்பு தோல்வி. பிறகு மீண்டும் முயற்சிக்கவும்.",expired:"சரிபார்ப்பு காலாவதியானது. மீண்டும் முயற்சிக்கவும்.",footer:'மூலமாக பாதுகாக்கப்பட்டவை ALTCHA',getAudioChallenge:"ஒலி சவாலை பெறவும்",label:"நான் ரோபோடான அல்ல",loading:"செயலாக்கம்...",reload:"மீண்டும் புதுப்பிக்கவும்",verify:"சரிபார்க்கவும்",verificationRequired:"சரிபார்ப்பு தேவை!",verified:"சரிபார்க்கப்பட்டது",verifying:"சரிபார்க்கப்படுகிறது...",waitAlert:"சரிபார்க்கப்படுகிறது... தயவுசெய்து காத்திருக்கவும்.",cancel:"ரத்துசெய்",enterCodeFromImage:"தொடர, கீழே உள்ள படத்திலிருந்து குறியீட்டை உள்ளிடவும்."});globalThis.$altcha.i18n.set("te",{ariaLinkLabel:"Altcha (అధికారిక వెబ్‌సైట్)",enterCode:"కోడ్‌ని నమోదు చేయండి",enterCodeAria:"మీరు విన్న కోడ్‌ని నమోదు చేయండి. ఆడియో ప్లే చేయడానికి స్పేస్‌ను నొక్కండి.",error:"చెకింగ్ విఫలమైంది. దయచేసి మరల ప్రయత్నించండి.",expired:"చెకింగ్ కాలం ముగిసింది. దయచేసి మరల ప్రయత్నించండి.",footer:'ఈ సైట్ రక్షించబడింది ALTCHA',getAudioChallenge:"ఆడియో ఛాలెంజ్ పొందండి",label:"నేను రోబోట్ కాదు",loading:"లోడ్ అవుతోంది...",reload:"మళ్ళీ లోడ్ చేయండి",verify:"ధ్రువీకరించు",verificationRequired:"ధృవీకరణ అవసరం!",verified:"ధ్రువీకరించబడింది",verifying:"ధ్రువీకరణ జరుగుతుంది...",waitAlert:"ధ్రువీకరణ జరుగుతుంది... దయచేసి వేచి ఉండండి.",cancel:"రద్దు చేయండి",enterCodeFromImage:"కొనసాగడానికి, దయచేసి క్రింది చిత్రంలో ఉన్న కోడ్‌ను నమోదు చేయండి."});globalThis.$altcha.i18n.set("th",{ariaLinkLabel:"Altcha (เว็บไซต์ทางการ)",enterCode:"ป้อนรหัส",enterCodeAria:"ป้อนรหัสที่คุณได้ยิน กด Space เพื่อเล่นเสียง",error:"การตรวจสอบล้มเหลว กรุณาลองอีกครั้งภายหลัง",expired:"การตรวจสอบหมดอายุ กรุณาลองใหม่",footer:'ป้องกันโดย ALTCHA',getAudioChallenge:"รับการท้าทายเสียง",label:"ฉันไม่ใช่บอท",loading:"กำลังโหลด...",reload:"โหลดใหม่",verify:"ตรวจสอบ",verificationRequired:"จำเป็นต้องตรวจสอบ!",verified:"ตรวจสอบแล้ว",verifying:"กำลังตรวจสอบ...",waitAlert:"กำลังตรวจสอบ... กรุณารอ",cancel:"ยกเลิก",enterCodeFromImage:"เพื่อดำเนินการต่อ โปรดป้อนรหัสจากรูปภาพด้านล่าง"});globalThis.$altcha.i18n.set("ur",{ariaLinkLabel:"Altcha (سرکاری ویب سائٹ)",enterCode:"کوڈ درج کریں",enterCodeAria:"جو کوڈ آپ سنتے ہیں وہ درج کریں۔ آڈیو چلانے کے لیے اسپیس دبائیں۔",error:"توثیق ناکام ہو گئی۔ براہ کرم بعد میں دوبارہ کوشش کریں۔",expired:"توثیق کی مدت ختم ہو گئی ہے۔ براہ کرم دوبارہ کوشش کریں۔",footer:'کے ذریعے محفوظ ALTCHA',getAudioChallenge:"آڈیو چیلنج حاصل کریں",label:"میں روبوٹ نہیں ہوں",loading:"لوڈ ہو رہا ہے...",reload:"دوبارہ لوڈ کریں",verify:"توثیق کریں",verificationRequired:"تصدیق ضروری ہے!",verified:"توثیق شدہ",verifying:"توثیق ہو رہی ہے...",waitAlert:"توثیق ہو رہی ہے... براہ کرم انتظار کریں۔",cancel:"منسوخ کریں",enterCodeFromImage:"اگلے مرحلے پر جانے کے لیے، براہ کرم نیچے دی گئی تصویر سے کوڈ درج کریں۔"});globalThis.$altcha.i18n.set("uz",{ariaLinkLabel:"Altcha (rasmiy veb-sayt)",enterCode:"Kodni kiriting",enterCodeAria:"Eshitgan kodingizni kiriting. Audioni ijro etish uchun Bo'sh joy tugmasini bosing.",error:"Tekshiruv muvaffaqiyatsiz tugadi. Keyinroq qayta urinib ko'ring.",expired:"Tekshiruv muddati tugadi. Qayta urinib ko'ring.",footer:'ALTCHA tomonidan himoyalangan',getAudioChallenge:"Audio sinovni olish",label:"Men robot emasman",loading:"Yuklanmoqda...",reload:"Qayta yuklash",verify:"Tekshirish",verificationRequired:"Tekshiruv talab qilinadi!",verified:"Tekshirildi",verifying:"Tekshirilmoqda...",waitAlert:"Tekshirilmoqda... iltimos kuting.",cancel:"Bekor qilish",enterCodeFromImage:"Davom etish uchun, iltimos, quyidagi rasmda ko'rsatilgan kodni kiriting."});globalThis.$altcha.i18n.set("vi",{ariaLinkLabel:"Altcha (trang web chính thức)",enterCode:"Nhập mã",enterCodeAria:"Nhập mã bạn nghe được. Nhấn Phím cách để phát âm thanh.",error:"Xác minh thất bại. Vui lòng thử lại sau.",expired:"Xác minh đã hết hạn. Vui lòng thử lại.",footer:'Được bảo vệ bởi ALTCHA',getAudioChallenge:"Nhận thử thách âm thanh",label:"Tôi không phải là robot",loading:"Đang tải...",reload:"Tải lại",verify:"Xác minh",verificationRequired:"Yêu cầu xác minh!",verified:"Đã xác minh",verifying:"Đang xác minh...",waitAlert:"Đang xác minh... vui lòng chờ.",cancel:"Hủy bỏ",enterCodeFromImage:"Để tiếp tục, vui lòng nhập mã từ hình ảnh bên dưới."});globalThis.$altcha.i18n.set("zh-cn",{ariaLinkLabel:"Altcha (官方网站)",enterCode:"输入代码",enterCodeAria:"输入您听到的代码。按空格键播放音频。",error:"验证失败。稍后再试。",expired:"验证已过期。请重试。",footer:'由 ALTCHA 保护',getAudioChallenge:"获取音频挑战",label:"我不是机器人",loading:"加载中...",reload:"重新加载",verify:"验证",verificationRequired:"需要验证!",verified:"已验证",verifying:"正在验证...",waitAlert:"正在验证... 请稍等。",cancel:"取消",enterCodeFromImage:"为继续操作,请输入下图中显示的验证码。"});globalThis.$altcha.i18n.set("zh-hk",{ariaLinkLabel:"Altcha (官方網站)",cancel:"取消",enterCode:"輸入代碼",enterCodeAria:"輸入你聽到嘅代碼。按空格鍵播放音訊。",enterCodeFromImage:"要繼續,請輸入下面圖片入面嘅代碼。",error:"驗證失敗。請稍後再試。",expired:"驗證已過期。請再試一次。",footer:'由 ALTCHA 提供保護',getAudioChallenge:"取得音訊驗證",label:"我唔係機械人",loading:"載入中...",reload:"重新載入",verify:"驗證",verificationRequired:"需要驗證!",verified:"已驗證",verifying:"驗證中...",waitAlert:"驗證中... 請稍候。"});globalThis.$altcha.i18n.set("zh-tw",{ariaLinkLabel:"Altcha (官方網站)",enterCode:"輸入代碼",enterCodeAria:"輸入您聽到的代碼。按空格鍵播放音頻。",error:"驗證失敗。稍後再試。",expired:"驗證已過期。請重試。",footer:'由 ALTCHA 保護',getAudioChallenge:"獲取音頻挑戰",label:"我不是機器人",loading:"載入中...",reload:"重新載入",verify:"驗證",verificationRequired:"需要驗證!",verified:"已驗證",verifying:"正在驗證...",waitAlert:"正在驗證... 請稍等。",cancel:"取消",enterCodeFromImage:"若要繼續,請輸入下方的圖片驗證碼。"}); diff --git a/frontend/node_modules/altcha/dist/main/altcha.i18n.umd.cjs b/frontend/node_modules/altcha/dist/main/altcha.i18n.umd.cjs new file mode 100644 index 0000000..3d459a6 --- /dev/null +++ b/frontend/node_modules/altcha/dist/main/altcha.i18n.umd.cjs @@ -0,0 +1,8987 @@ +(function(factory) { + typeof define === "function" && define.amd ? define(factory) : factory(); +})((function() { + "use strict"; + const DEV = false; + var is_array = Array.isArray; + var index_of = Array.prototype.indexOf; + var includes = Array.prototype.includes; + var array_from = Array.from; + var object_keys = Object.keys; + var define_property = Object.defineProperty; + var get_descriptor = Object.getOwnPropertyDescriptor; + var get_descriptors = Object.getOwnPropertyDescriptors; + var object_prototype = Object.prototype; + var array_prototype = Array.prototype; + var get_prototype_of = Object.getPrototypeOf; + var is_extensible = Object.isExtensible; + const noop = () => { + }; + function run_all(arr) { + for (var i = 0; i < arr.length; i++) { + arr[i](); + } + } + function deferred() { + var resolve; + var reject; + var promise = new Promise((res, rej) => { + resolve = res; + reject = rej; + }); + return { promise, resolve, reject }; + } + const DERIVED = 1 << 1; + const EFFECT = 1 << 2; + const RENDER_EFFECT = 1 << 3; + const MANAGED_EFFECT = 1 << 24; + const BLOCK_EFFECT = 1 << 4; + const BRANCH_EFFECT = 1 << 5; + const ROOT_EFFECT = 1 << 6; + const BOUNDARY_EFFECT = 1 << 7; + const CONNECTED = 1 << 9; + const CLEAN = 1 << 10; + const DIRTY = 1 << 11; + const MAYBE_DIRTY = 1 << 12; + const INERT = 1 << 13; + const DESTROYED = 1 << 14; + const REACTION_RAN = 1 << 15; + const DESTROYING = 1 << 25; + const EFFECT_TRANSPARENT = 1 << 16; + const EAGER_EFFECT = 1 << 17; + const HEAD_EFFECT = 1 << 18; + const EFFECT_PRESERVED = 1 << 19; + const USER_EFFECT = 1 << 20; + const WAS_MARKED = 1 << 16; + const REACTION_IS_UPDATING = 1 << 21; + const ASYNC = 1 << 22; + const ERROR_VALUE = 1 << 23; + const STATE_SYMBOL = /* @__PURE__ */ Symbol("$state"); + const LEGACY_PROPS = /* @__PURE__ */ Symbol("legacy props"); + const LOADING_ATTR_SYMBOL = /* @__PURE__ */ Symbol(""); + const ATTRIBUTES_CACHE = /* @__PURE__ */ Symbol("attributes"); + const CLASS_CACHE = /* @__PURE__ */ Symbol("class"); + const STYLE_CACHE = /* @__PURE__ */ Symbol("style"); + const TEXT_CACHE = /* @__PURE__ */ Symbol("text"); + const FORM_RESET_HANDLER = /* @__PURE__ */ Symbol("form reset"); + const STALE_REACTION = new class StaleReactionError extends Error { + name = "StaleReactionError"; + message = "The reaction that called `getAbortSignal()` was re-run or destroyed"; + }(); + const IS_XHTML = ( + // We gotta write it like this because after downleveling the pure comment may end up in the wrong location + !!globalThis.document?.contentType && /* @__PURE__ */ globalThis.document.contentType.includes("xml") + ); + const TEXT_NODE = 3; + const COMMENT_NODE = 8; + function equals(value) { + return value === this.v; + } + function safe_not_equal(a, b) { + return a != a ? b == b : a !== b || a !== null && typeof a === "object" || typeof a === "function"; + } + function safe_equals(value) { + return !safe_not_equal(value, this.v); + } + function lifecycle_outside_component(name) { + { + throw new Error(`https://svelte.dev/e/lifecycle_outside_component`); + } + } + function async_derived_orphan() { + { + throw new Error(`https://svelte.dev/e/async_derived_orphan`); + } + } + function effect_in_teardown(rune) { + { + throw new Error(`https://svelte.dev/e/effect_in_teardown`); + } + } + function effect_in_unowned_derived() { + { + throw new Error(`https://svelte.dev/e/effect_in_unowned_derived`); + } + } + function effect_orphan(rune) { + { + throw new Error(`https://svelte.dev/e/effect_orphan`); + } + } + function effect_update_depth_exceeded() { + { + throw new Error(`https://svelte.dev/e/effect_update_depth_exceeded`); + } + } + function hydration_failed() { + { + throw new Error(`https://svelte.dev/e/hydration_failed`); + } + } + function state_descriptors_fixed() { + { + throw new Error(`https://svelte.dev/e/state_descriptors_fixed`); + } + } + function state_prototype_fixed() { + { + throw new Error(`https://svelte.dev/e/state_prototype_fixed`); + } + } + function state_unsafe_mutation() { + { + throw new Error(`https://svelte.dev/e/state_unsafe_mutation`); + } + } + function svelte_boundary_reset_onerror() { + { + throw new Error(`https://svelte.dev/e/svelte_boundary_reset_onerror`); + } + } + let tracing_mode_flag = false; + const TEMPLATE_FRAGMENT = 1; + const TEMPLATE_USE_IMPORT_NODE = 1 << 1; + const HYDRATION_START = "["; + const HYDRATION_START_ELSE = "[!"; + const HYDRATION_START_FAILED = "[?"; + const HYDRATION_END = "]"; + const HYDRATION_ERROR = {}; + const UNINITIALIZED = /* @__PURE__ */ Symbol("uninitialized"); + const NAMESPACE_HTML = "http://www.w3.org/1999/xhtml"; + const NAMESPACE_SVG = "http://www.w3.org/2000/svg"; + const NAMESPACE_MATHML = "http://www.w3.org/1998/Math/MathML"; + const ATTACHMENT_KEY = "@attach"; + let component_context = null; + function set_component_context(context) { + component_context = context; + } + function push(props, runes = false, fn) { + component_context = { + p: component_context, + i: false, + c: null, + e: null, + s: props, + x: null, + r: ( + /** @type {Effect} */ + active_effect + ), + l: null + }; + } + function pop(component2) { + var context = ( + /** @type {ComponentContext} */ + component_context + ); + var effects = context.e; + if (effects !== null) { + context.e = null; + for (var fn of effects) { + create_user_effect(fn); + } + } + if (component2 !== void 0) { + context.x = component2; + } + context.i = true; + component_context = context.p; + return component2 ?? /** @type {T} */ + {}; + } + function is_runes() { + return true; + } + let micro_tasks = []; + function run_micro_tasks() { + var tasks = micro_tasks; + micro_tasks = []; + run_all(tasks); + } + function queue_micro_task(fn) { + if (micro_tasks.length === 0 && !is_flushing_sync) { + var tasks = micro_tasks; + queueMicrotask(() => { + if (tasks === micro_tasks) run_micro_tasks(); + }); + } + micro_tasks.push(fn); + } + function flush_tasks() { + while (micro_tasks.length > 0) { + run_micro_tasks(); + } + } + function derived_inert() { + { + console.warn(`https://svelte.dev/e/derived_inert`); + } + } + function hydration_mismatch(location2) { + { + console.warn(`https://svelte.dev/e/hydration_mismatch`); + } + } + function select_multiple_invalid_value() { + { + console.warn(`https://svelte.dev/e/select_multiple_invalid_value`); + } + } + function svelte_boundary_reset_noop() { + { + console.warn(`https://svelte.dev/e/svelte_boundary_reset_noop`); + } + } + let hydrating = false; + function set_hydrating(value) { + hydrating = value; + } + let hydrate_node; + function set_hydrate_node(node) { + if (node === null) { + hydration_mismatch(); + throw HYDRATION_ERROR; + } + return hydrate_node = node; + } + function hydrate_next() { + return set_hydrate_node(/* @__PURE__ */ get_next_sibling(hydrate_node)); + } + function reset(node) { + if (!hydrating) return; + if (/* @__PURE__ */ get_next_sibling(hydrate_node) !== null) { + hydration_mismatch(); + throw HYDRATION_ERROR; + } + hydrate_node = node; + } + function next(count = 1) { + if (hydrating) { + var i = count; + var node = hydrate_node; + while (i--) { + node = /** @type {TemplateNode} */ + /* @__PURE__ */ get_next_sibling(node); + } + hydrate_node = node; + } + } + function skip_nodes(remove = true) { + var depth = 0; + var node = hydrate_node; + while (true) { + if (node.nodeType === COMMENT_NODE) { + var data = ( + /** @type {Comment} */ + node.data + ); + if (data === HYDRATION_END) { + if (depth === 0) return node; + depth -= 1; + } else if (data === HYDRATION_START || data === HYDRATION_START_ELSE || // "[1", "[2", etc. for if blocks + data[0] === "[" && !isNaN(Number(data.slice(1)))) { + depth += 1; + } + } + var next2 = ( + /** @type {TemplateNode} */ + /* @__PURE__ */ get_next_sibling(node) + ); + if (remove) node.remove(); + node = next2; + } + } + function read_hydration_instruction(node) { + if (!node || node.nodeType !== COMMENT_NODE) { + hydration_mismatch(); + throw HYDRATION_ERROR; + } + return ( + /** @type {Comment} */ + node.data + ); + } + function proxy(value) { + if (typeof value !== "object" || value === null || STATE_SYMBOL in value) { + return value; + } + const prototype = get_prototype_of(value); + if (prototype !== object_prototype && prototype !== array_prototype) { + return value; + } + var sources = /* @__PURE__ */ new Map(); + var is_proxied_array = is_array(value); + var version = /* @__PURE__ */ state(0); + var parent_version = update_version; + var with_parent = (fn) => { + if (update_version === parent_version) { + return fn(); + } + var reaction = active_reaction; + var version2 = update_version; + set_active_reaction(null); + set_update_version(parent_version); + var result = fn(); + set_active_reaction(reaction); + set_update_version(version2); + return result; + }; + if (is_proxied_array) { + sources.set("length", /* @__PURE__ */ state( + /** @type {any[]} */ + value.length + )); + } + return new Proxy( + /** @type {any} */ + value, + { + defineProperty(_, prop2, descriptor) { + if (!("value" in descriptor) || descriptor.configurable === false || descriptor.enumerable === false || descriptor.writable === false) { + state_descriptors_fixed(); + } + var s = sources.get(prop2); + if (s === void 0) { + with_parent(() => { + var s2 = /* @__PURE__ */ state(descriptor.value); + sources.set(prop2, s2); + return s2; + }); + } else { + set(s, descriptor.value, true); + } + return true; + }, + deleteProperty(target, prop2) { + var s = sources.get(prop2); + if (s === void 0) { + if (prop2 in target) { + const s2 = with_parent(() => /* @__PURE__ */ state(UNINITIALIZED)); + sources.set(prop2, s2); + increment(version); + } + } else { + set(s, UNINITIALIZED); + increment(version); + } + return true; + }, + get(target, prop2, receiver) { + if (prop2 === STATE_SYMBOL) { + return value; + } + var s = sources.get(prop2); + var exists = prop2 in target; + if (s === void 0 && (!exists || get_descriptor(target, prop2)?.writable)) { + s = with_parent(() => { + var p = proxy(exists ? target[prop2] : UNINITIALIZED); + var s2 = /* @__PURE__ */ state(p); + return s2; + }); + sources.set(prop2, s); + } + if (s !== void 0) { + var v = get(s); + return v === UNINITIALIZED ? void 0 : v; + } + return Reflect.get(target, prop2, receiver); + }, + getOwnPropertyDescriptor(target, prop2) { + var descriptor = Reflect.getOwnPropertyDescriptor(target, prop2); + if (descriptor && "value" in descriptor) { + var s = sources.get(prop2); + if (s) descriptor.value = get(s); + } else if (descriptor === void 0) { + var source2 = sources.get(prop2); + var value2 = source2?.v; + if (source2 !== void 0 && value2 !== UNINITIALIZED) { + return { + enumerable: true, + configurable: true, + value: value2, + writable: true + }; + } + } + return descriptor; + }, + has(target, prop2) { + if (prop2 === STATE_SYMBOL) { + return true; + } + var s = sources.get(prop2); + var has = s !== void 0 && s.v !== UNINITIALIZED || Reflect.has(target, prop2); + if (s !== void 0 || active_effect !== null && (!has || get_descriptor(target, prop2)?.writable)) { + if (s === void 0) { + s = with_parent(() => { + var p = has ? proxy(target[prop2]) : UNINITIALIZED; + var s2 = /* @__PURE__ */ state(p); + return s2; + }); + sources.set(prop2, s); + } + var value2 = get(s); + if (value2 === UNINITIALIZED) { + return false; + } + } + return has; + }, + set(target, prop2, value2, receiver) { + var s = sources.get(prop2); + var has = prop2 in target; + if (is_proxied_array && prop2 === "length") { + for (var i = value2; i < /** @type {Source} */ + s.v; i += 1) { + var other_s = sources.get(i + ""); + if (other_s !== void 0) { + set(other_s, UNINITIALIZED); + } else if (i in target) { + other_s = with_parent(() => /* @__PURE__ */ state(UNINITIALIZED)); + sources.set(i + "", other_s); + } + } + } + if (s === void 0) { + if (!has || get_descriptor(target, prop2)?.writable) { + s = with_parent(() => /* @__PURE__ */ state(void 0)); + set(s, proxy(value2)); + sources.set(prop2, s); + } + } else { + has = s.v !== UNINITIALIZED; + var p = with_parent(() => proxy(value2)); + set(s, p); + } + var descriptor = Reflect.getOwnPropertyDescriptor(target, prop2); + if (descriptor?.set) { + descriptor.set.call(receiver, value2); + } + if (!has) { + if (is_proxied_array && typeof prop2 === "string") { + var ls = ( + /** @type {Source} */ + sources.get("length") + ); + var n = Number(prop2); + if (Number.isInteger(n) && n >= ls.v) { + set(ls, n + 1); + } + } + increment(version); + } + return true; + }, + ownKeys(target) { + get(version); + var own_keys = Reflect.ownKeys(target).filter((key3) => { + var source3 = sources.get(key3); + return source3 === void 0 || source3.v !== UNINITIALIZED; + }); + for (var [key2, source2] of sources) { + if (source2.v !== UNINITIALIZED && !(key2 in target)) { + own_keys.push(key2); + } + } + return own_keys; + }, + setPrototypeOf() { + state_prototype_fixed(); + } + } + ); + } + function get_proxied_value(value) { + try { + if (value !== null && typeof value === "object" && STATE_SYMBOL in value) { + return value[STATE_SYMBOL]; + } + } catch { + } + return value; + } + function is(a, b) { + return Object.is(get_proxied_value(a), get_proxied_value(b)); + } + var $window; + var $document; + var is_firefox; + var first_child_getter; + var next_sibling_getter; + function init_operations() { + if ($window !== void 0) { + return; + } + $window = window; + $document = document; + is_firefox = /Firefox/.test(navigator.userAgent); + var element_prototype = Element.prototype; + var node_prototype = Node.prototype; + var text_prototype = Text.prototype; + first_child_getter = get_descriptor(node_prototype, "firstChild").get; + next_sibling_getter = get_descriptor(node_prototype, "nextSibling").get; + if (is_extensible(element_prototype)) { + element_prototype[CLASS_CACHE] = void 0; + element_prototype[ATTRIBUTES_CACHE] = null; + element_prototype[STYLE_CACHE] = void 0; + element_prototype.__e = void 0; + } + if (is_extensible(text_prototype)) { + text_prototype[TEXT_CACHE] = void 0; + } + } + function create_text(value = "") { + return document.createTextNode(value); + } + // @__NO_SIDE_EFFECTS__ + function get_first_child(node) { + return ( + /** @type {TemplateNode | null} */ + first_child_getter.call(node) + ); + } + // @__NO_SIDE_EFFECTS__ + function get_next_sibling(node) { + return ( + /** @type {TemplateNode | null} */ + next_sibling_getter.call(node) + ); + } + function child(node, is_text) { + if (!hydrating) { + return /* @__PURE__ */ get_first_child(node); + } + var child2 = /* @__PURE__ */ get_first_child(hydrate_node); + if (child2 === null) { + child2 = hydrate_node.appendChild(create_text()); + } else if (is_text && child2.nodeType !== TEXT_NODE) { + var text2 = create_text(); + child2?.before(text2); + set_hydrate_node(text2); + return text2; + } + if (is_text) { + merge_text_nodes( + /** @type {Text} */ + child2 + ); + } + set_hydrate_node(child2); + return child2; + } + function first_child(node, is_text = false) { + if (!hydrating) { + var first = /* @__PURE__ */ get_first_child(node); + if (first instanceof Comment && first.data === "") return /* @__PURE__ */ get_next_sibling(first); + return first; + } + if (is_text) { + if (hydrate_node?.nodeType !== TEXT_NODE) { + var text2 = create_text(); + hydrate_node?.before(text2); + set_hydrate_node(text2); + return text2; + } + merge_text_nodes( + /** @type {Text} */ + hydrate_node + ); + } + return hydrate_node; + } + function sibling(node, count = 1, is_text = false) { + let next_sibling = hydrating ? hydrate_node : node; + var last_sibling; + while (count--) { + last_sibling = next_sibling; + next_sibling = /** @type {TemplateNode} */ + /* @__PURE__ */ get_next_sibling(next_sibling); + } + if (!hydrating) { + return next_sibling; + } + if (is_text) { + if (next_sibling?.nodeType !== TEXT_NODE) { + var text2 = create_text(); + if (next_sibling === null) { + last_sibling?.after(text2); + } else { + next_sibling.before(text2); + } + set_hydrate_node(text2); + return text2; + } + merge_text_nodes( + /** @type {Text} */ + next_sibling + ); + } + set_hydrate_node(next_sibling); + return next_sibling; + } + function clear_text_content(node) { + node.textContent = ""; + } + function should_defer_append() { + return false; + } + function create_element(tag, namespace, is2) { + let options = void 0; + return ( + /** @type {T extends keyof HTMLElementTagNameMap ? HTMLElementTagNameMap[T] : Element} */ + document.createElementNS(namespace ?? NAMESPACE_HTML, tag, options) + ); + } + function merge_text_nodes(text2) { + if ( + /** @type {string} */ + text2.nodeValue.length < 65536 + ) { + return; + } + let next2 = text2.nextSibling; + while (next2 !== null && next2.nodeType === TEXT_NODE) { + next2.remove(); + text2.nodeValue += /** @type {string} */ + next2.nodeValue; + next2 = text2.nextSibling; + } + } + function handle_error(error) { + var effect2 = active_effect; + if (effect2 === null) { + active_reaction.f |= ERROR_VALUE; + return error; + } + if ((effect2.f & REACTION_RAN) === 0 && (effect2.f & EFFECT) === 0) { + throw error; + } + invoke_error_boundary(error, effect2); + } + function invoke_error_boundary(error, effect2) { + while (effect2 !== null) { + if ((effect2.f & BOUNDARY_EFFECT) !== 0) { + if ((effect2.f & REACTION_RAN) === 0) { + throw error; + } + try { + effect2.b.error(error); + return; + } catch (e) { + error = e; + } + } + effect2 = effect2.parent; + } + throw error; + } + const STATUS_MASK = -7169; + function set_signal_status(signal, status) { + signal.f = signal.f & STATUS_MASK | status; + } + function update_derived_status(derived2) { + if ((derived2.f & CONNECTED) !== 0 || derived2.deps === null) { + set_signal_status(derived2, CLEAN); + } else { + set_signal_status(derived2, MAYBE_DIRTY); + } + } + function clear_marked(deps) { + if (deps === null) return; + for (const dep of deps) { + if ((dep.f & DERIVED) === 0 || (dep.f & WAS_MARKED) === 0) { + continue; + } + dep.f ^= WAS_MARKED; + clear_marked( + /** @type {Derived} */ + dep.deps + ); + } + } + function defer_effect(effect2, dirty_effects, maybe_dirty_effects) { + if ((effect2.f & DIRTY) !== 0) { + dirty_effects.add(effect2); + } else if ((effect2.f & MAYBE_DIRTY) !== 0) { + maybe_dirty_effects.add(effect2); + } + clear_marked(effect2.deps); + set_signal_status(effect2, CLEAN); + } + function subscribe_to_store(store2, run, invalidate) { + if (store2 == null) { + run(void 0); + return noop; + } + const unsub = untrack( + () => store2.subscribe( + run, + // @ts-expect-error + invalidate + ) + ); + return unsub.unsubscribe ? () => unsub.unsubscribe() : unsub; + } + const subscriber_queue = []; + function writable(value, start = noop) { + let stop = null; + const subscribers = /* @__PURE__ */ new Set(); + function set2(new_value) { + if (safe_not_equal(value, new_value)) { + value = new_value; + if (stop) { + const run_queue = !subscriber_queue.length; + for (const subscriber of subscribers) { + subscriber[1](); + subscriber_queue.push(subscriber, value); + } + if (run_queue) { + for (let i = 0; i < subscriber_queue.length; i += 2) { + subscriber_queue[i][0](subscriber_queue[i + 1]); + } + subscriber_queue.length = 0; + } + } + } + } + function update(fn) { + set2(fn( + /** @type {T} */ + value + )); + } + function subscribe(run, invalidate = noop) { + const subscriber = [run, invalidate]; + subscribers.add(subscriber); + if (subscribers.size === 1) { + stop = start(set2, update) || noop; + } + run( + /** @type {T} */ + value + ); + return () => { + subscribers.delete(subscriber); + if (subscribers.size === 0 && stop) { + stop(); + stop = null; + } + }; + } + return { set: set2, update, subscribe }; + } + function get$1(store2) { + let value; + subscribe_to_store(store2, (_) => value = _)(); + return value; + } + let IS_UNMOUNTED = /* @__PURE__ */ Symbol("unmounted"); + function store_get(store2, store_name, stores) { + const entry = stores[store_name] ??= { + store: null, + source: /* @__PURE__ */ mutable_source(void 0), + unsubscribe: noop + }; + if (entry.store !== store2 && !(IS_UNMOUNTED in stores)) { + entry.unsubscribe(); + entry.store = store2 ?? null; + if (store2 == null) { + entry.source.v = void 0; + entry.unsubscribe = noop; + } else { + var is_synchronous_callback = true; + entry.unsubscribe = subscribe_to_store(store2, (v) => { + if (is_synchronous_callback) { + entry.source.v = v; + } else { + set(entry.source, v); + } + }); + is_synchronous_callback = false; + } + } + if (store2 && IS_UNMOUNTED in stores) { + return get$1(store2); + } + return get(entry.source); + } + function setup_stores() { + const stores = {}; + function cleanup() { + teardown(() => { + for (var store_name in stores) { + const ref = stores[store_name]; + ref.unsubscribe(); + } + define_property(stores, IS_UNMOUNTED, { + enumerable: false, + value: true + }); + }); + } + return [stores, cleanup]; + } + let first_batch = null; + let last_batch = null; + let current_batch = null; + let previous_batch = null; + let batch_values = null; + let last_scheduled_effect = null; + let is_flushing_sync = false; + let is_processing = false; + let collected_effects = null; + let legacy_updates = null; + var flush_count = 0; + var source_stacks = /* @__PURE__ */ new Set(); + let uid = 1; + class Batch { + id = uid++; + /** True as soon as `#process` was called */ + #started = false; + linked = true; + /** @type {Batch | null} */ + #prev = null; + /** @type {Batch | null} */ + #next = null; + /** @type {Map>>} */ + async_deriveds = /* @__PURE__ */ new Map(); + /** + * The current values of any signals that are updated in this batch. + * Tuple format: [value, is_derived] (note: is_derived is false for deriveds, too, if they were overridden via assignment) + * They keys of this map are identical to `this.#previous` + * @type {Map} + */ + current = /* @__PURE__ */ new Map(); + /** + * The values of any signals (sources and deriveds) that are updated in this batch _before_ those updates took place. + * They keys of this map are identical to `this.#current` + * @type {Map} + */ + previous = /* @__PURE__ */ new Map(); + /** + * Async effects which this batch doesn't take into account anymore when calculating blockers, + * as it has a value for it already. + * @type {Set} + */ + unblocked = /* @__PURE__ */ new Set(); + /** + * When the batch is committed (and the DOM is updated), we need to remove old branches + * and append new ones by calling the functions added inside (if/each/key/etc) blocks + * @type {Set<(batch: Batch) => void>} + */ + #commit_callbacks = /* @__PURE__ */ new Set(); + /** + * If a fork is discarded, we need to destroy any effects that are no longer needed + * @type {Set<(batch: Batch) => void>} + */ + #discard_callbacks = /* @__PURE__ */ new Set(); + /** + * Callbacks that should run only when a fork is committed. + * @type {Set<(batch: Batch) => void>} + */ + #fork_commit_callbacks = /* @__PURE__ */ new Set(); + /** + * The number of async effects that are currently in flight + */ + #pending = 0; + /** + * Async effects that are currently in flight, _not_ inside a pending boundary + * @type {Map} + */ + #blocking_pending = /* @__PURE__ */ new Map(); + /** + * A deferred that resolves when the batch is committed, used with `settled()` + * TODO replace with Promise.withResolvers once supported widely enough + * @type {{ promise: Promise, resolve: (value?: any) => void, reject: (reason: unknown) => void } | null} + */ + #deferred = null; + /** + * The root effects that need to be flushed + * @type {Effect[]} + */ + #roots = []; + /** + * Effects created while this batch was active. + * @type {Effect[]} + */ + #new_effects = []; + /** + * Deferred effects (which run after async work has completed) that are DIRTY + * @type {Set} + */ + #dirty_effects = /* @__PURE__ */ new Set(); + /** + * Deferred effects that are MAYBE_DIRTY + * @type {Set} + */ + #maybe_dirty_effects = /* @__PURE__ */ new Set(); + /** + * A map of branches that still exist, but will be destroyed when this batch + * is committed — we skip over these during `process`. + * The value contains child effects that were dirty/maybe_dirty before being reset, + * so they can be rescheduled if the branch survives. + * @type {Map} + */ + #skipped_branches = /* @__PURE__ */ new Map(); + /** + * Inverse of #skipped_branches which we need to tell prior batches to unskip them when committing + * @type {Set} + */ + #unskipped_branches = /* @__PURE__ */ new Set(); + is_fork = false; + #decrement_queued = false; + #is_deferred() { + if (this.is_fork) return true; + for (const effect2 of this.#blocking_pending.keys()) { + var e = effect2; + var skipped = false; + while (e.parent !== null) { + if (this.#skipped_branches.has(e)) { + skipped = true; + break; + } + e = e.parent; + } + if (!skipped) { + return true; + } + } + return false; + } + /** + * Add an effect to the #skipped_branches map and reset its children + * @param {Effect} effect + */ + skip_effect(effect2) { + if (!this.#skipped_branches.has(effect2)) { + this.#skipped_branches.set(effect2, { d: [], m: [] }); + } + this.#unskipped_branches.delete(effect2); + } + /** + * Remove an effect from the #skipped_branches map and reschedule + * any tracked dirty/maybe_dirty child effects + * @param {Effect} effect + * @param {(e: Effect) => void} callback + */ + unskip_effect(effect2, callback = (e) => this.schedule(e)) { + var tracked = this.#skipped_branches.get(effect2); + if (tracked) { + this.#skipped_branches.delete(effect2); + for (var e of tracked.d) { + set_signal_status(e, DIRTY); + callback(e); + } + for (e of tracked.m) { + set_signal_status(e, MAYBE_DIRTY); + callback(e); + } + } + this.#unskipped_branches.add(effect2); + } + #process() { + this.#started = true; + if (flush_count++ > 1e3) { + this.#unlink(); + infinite_loop_guard(); + } + if (!this.#is_deferred()) { + for (const e of this.#dirty_effects) { + this.#maybe_dirty_effects.delete(e); + set_signal_status(e, DIRTY); + this.schedule(e); + } + for (const e of this.#maybe_dirty_effects) { + set_signal_status(e, MAYBE_DIRTY); + this.schedule(e); + } + } + const roots = this.#roots; + this.#roots = []; + this.apply(); + var effects = collected_effects = []; + var render_effects = []; + var updates = legacy_updates = []; + for (const root2 of roots) { + try { + this.#traverse(root2, effects, render_effects); + } catch (e) { + reset_all(root2); + throw e; + } + } + current_batch = null; + if (updates.length > 0) { + var batch = Batch.ensure(); + for (const e of updates) { + batch.schedule(e); + } + } + collected_effects = null; + legacy_updates = null; + if (this.#is_deferred()) { + this.#defer_effects(render_effects); + this.#defer_effects(effects); + for (const [e, t] of this.#skipped_branches) { + reset_branch(e, t); + } + if (updates.length > 0) { + /** @type {unknown} */ + current_batch.#process(); + } + return; + } + const earlier_batch = this.#find_earlier_batch(); + if (earlier_batch) { + earlier_batch.#merge(this); + return; + } + this.#dirty_effects.clear(); + this.#maybe_dirty_effects.clear(); + for (const fn of this.#commit_callbacks) fn(this); + this.#commit_callbacks.clear(); + previous_batch = this; + flush_queued_effects(render_effects); + flush_queued_effects(effects); + previous_batch = null; + this.#deferred?.resolve(); + var next_batch = ( + /** @type {Batch | null} */ + /** @type {unknown} */ + current_batch + ); + if (this.linked && this.#pending === 0) { + this.#unlink(); + } + if (this.#roots.length > 0) { + if (next_batch === null) { + next_batch = this; + this.#link(); + } + const batch2 = next_batch; + batch2.#roots.push(...this.#roots.filter((r2) => !batch2.#roots.includes(r2))); + } + if (next_batch !== null) { + next_batch.#process(); + } + } + /** + * Traverse the effect tree, executing effects or stashing + * them for later execution as appropriate + * @param {Effect} root + * @param {Effect[]} effects + * @param {Effect[]} render_effects + */ + #traverse(root2, effects, render_effects) { + root2.f ^= CLEAN; + var effect2 = root2.first; + while (effect2 !== null) { + var flags2 = effect2.f; + var is_branch = (flags2 & (BRANCH_EFFECT | ROOT_EFFECT)) !== 0; + var is_skippable_branch = is_branch && (flags2 & CLEAN) !== 0; + var skip = is_skippable_branch || (flags2 & INERT) !== 0 || this.#skipped_branches.has(effect2); + if (!skip && effect2.fn !== null) { + if (is_branch) { + effect2.f ^= CLEAN; + } else if ((flags2 & EFFECT) !== 0) { + effects.push(effect2); + } else if (is_dirty(effect2)) { + if ((flags2 & BLOCK_EFFECT) !== 0) this.#maybe_dirty_effects.add(effect2); + update_effect(effect2); + } + var child2 = effect2.first; + if (child2 !== null) { + effect2 = child2; + continue; + } + } + while (effect2 !== null) { + var next2 = effect2.next; + if (next2 !== null) { + effect2 = next2; + break; + } + effect2 = effect2.parent; + } + } + } + #find_earlier_batch() { + var batch = this.#prev; + while (batch !== null) { + if (!batch.is_fork) { + for (const [value, [, is_derived]] of this.current) { + if (batch.current.has(value) && !is_derived) { + return batch; + } + } + } + batch = batch.#prev; + } + return null; + } + /** + * @param {Batch} batch + */ + #merge(batch) { + for (const [source2, value] of batch.current) { + if (!this.previous.has(source2) && batch.previous.has(source2)) { + this.previous.set(source2, batch.previous.get(source2)); + } + this.current.set(source2, value); + } + for (const [effect2, deferred2] of batch.async_deriveds) { + const d = this.async_deriveds.get(effect2); + if (d) deferred2.promise.then(d.resolve); + } + const mark = (value) => { + var reactions = value.reactions; + if (reactions === null) return; + for (const reaction of reactions) { + var flags2 = reaction.f; + if ((flags2 & DERIVED) !== 0) { + mark( + /** @type {Derived} */ + reaction + ); + } else { + var effect2 = ( + /** @type {Effect} */ + reaction + ); + if (flags2 & (ASYNC | BLOCK_EFFECT) && !this.async_deriveds.has(effect2)) { + this.#maybe_dirty_effects.delete(effect2); + set_signal_status(effect2, DIRTY); + this.schedule(effect2); + } + } + } + }; + for (const source2 of this.current.keys()) { + mark(source2); + } + this.oncommit(() => batch.discard()); + batch.#unlink(); + current_batch = this; + this.#process(); + } + /** + * @param {Effect[]} effects + */ + #defer_effects(effects) { + for (var i = 0; i < effects.length; i += 1) { + defer_effect(effects[i], this.#dirty_effects, this.#maybe_dirty_effects); + } + } + /** + * Associate a change to a given source with the current + * batch, noting its previous and current values + * @param {Value} source + * @param {any} value + * @param {boolean} [is_derived] + */ + capture(source2, value, is_derived = false) { + if (source2.v !== UNINITIALIZED && !this.previous.has(source2)) { + this.previous.set(source2, source2.v); + } + if ((source2.f & ERROR_VALUE) === 0) { + this.current.set(source2, [value, is_derived]); + batch_values?.set(source2, value); + } + if (!this.is_fork) { + source2.v = value; + } + } + activate() { + current_batch = this; + } + deactivate() { + current_batch = null; + batch_values = null; + } + flush() { + try { + if (DEV) ; + is_processing = true; + current_batch = this; + this.#process(); + } finally { + flush_count = 0; + last_scheduled_effect = null; + collected_effects = null; + legacy_updates = null; + is_processing = false; + current_batch = null; + batch_values = null; + old_values.clear(); + } + } + discard() { + for (const fn of this.#discard_callbacks) fn(this); + this.#discard_callbacks.clear(); + this.#fork_commit_callbacks.clear(); + this.#unlink(); + } + /** + * @param {Effect} effect + */ + register_created_effect(effect2) { + this.#new_effects.push(effect2); + } + #commit() { + this.#unlink(); + for (let batch = first_batch; batch !== null; batch = batch.#next) { + var is_earlier = batch.id < this.id; + var sources = []; + for (const [source3, [value, is_derived]] of this.current) { + if (batch.current.has(source3)) { + var batch_value = ( + /** @type {[any, boolean]} */ + batch.current.get(source3)[0] + ); + if (is_earlier && value !== batch_value) { + batch.current.set(source3, [value, is_derived]); + } else { + continue; + } + } + sources.push(source3); + } + if (is_earlier) { + for (const [effect2, deferred2] of this.async_deriveds) { + const d = batch.async_deriveds.get(effect2); + if (d) deferred2.promise.then(d.resolve); + } + } + if (!batch.#started) continue; + var others = [...batch.current.keys()].filter((s) => !this.current.has(s)); + if (others.length === 0) { + if (is_earlier) { + batch.discard(); + } + } else if (sources.length > 0) { + if (is_earlier) { + for (const unskipped of this.#unskipped_branches) { + batch.unskip_effect(unskipped, (e) => { + if ((e.f & (BLOCK_EFFECT | ASYNC)) !== 0) { + batch.schedule(e); + } else { + batch.#defer_effects([e]); + } + }); + } + } + batch.activate(); + var marked = /* @__PURE__ */ new Set(); + var checked = /* @__PURE__ */ new Map(); + for (var source2 of sources) { + mark_effects(source2, others, marked, checked); + } + checked = /* @__PURE__ */ new Map(); + var current_unequal = [...batch.current.keys()].filter( + (c) => this.current.has(c) ? ( + /** @type {[any, boolean]} */ + this.current.get(c)[0] !== c.v + ) : true + ); + if (current_unequal.length > 0) { + for (const effect2 of this.#new_effects) { + if ((effect2.f & (DESTROYED | INERT | EAGER_EFFECT)) === 0 && depends_on(effect2, current_unequal, checked)) { + if ((effect2.f & (ASYNC | BLOCK_EFFECT)) !== 0) { + set_signal_status(effect2, DIRTY); + batch.schedule(effect2); + } else { + batch.#dirty_effects.add(effect2); + } + } + } + } + if (batch.#roots.length > 0) { + batch.apply(); + for (var root2 of batch.#roots) { + batch.#traverse(root2, [], []); + } + batch.#roots = []; + } + batch.deactivate(); + } + } + } + /** + * @param {boolean} blocking + * @param {Effect} effect + */ + increment(blocking, effect2) { + this.#pending += 1; + if (blocking) { + let blocking_pending_count = this.#blocking_pending.get(effect2) ?? 0; + this.#blocking_pending.set(effect2, blocking_pending_count + 1); + } + } + /** + * @param {boolean} blocking + * @param {Effect} effect + */ + decrement(blocking, effect2) { + this.#pending -= 1; + if (blocking) { + let blocking_pending_count = this.#blocking_pending.get(effect2) ?? 0; + if (blocking_pending_count === 1) { + this.#blocking_pending.delete(effect2); + } else { + this.#blocking_pending.set(effect2, blocking_pending_count - 1); + } + } + if (this.#decrement_queued) return; + this.#decrement_queued = true; + queue_micro_task(() => { + this.#decrement_queued = false; + if (this.linked) { + this.flush(); + } + }); + } + /** + * @param {Set} dirty_effects + * @param {Set} maybe_dirty_effects + */ + transfer_effects(dirty_effects, maybe_dirty_effects) { + for (const e of dirty_effects) { + this.#dirty_effects.add(e); + } + for (const e of maybe_dirty_effects) { + this.#maybe_dirty_effects.add(e); + } + dirty_effects.clear(); + maybe_dirty_effects.clear(); + } + /** @param {(batch: Batch) => void} fn */ + oncommit(fn) { + this.#commit_callbacks.add(fn); + } + /** @param {(batch: Batch) => void} fn */ + ondiscard(fn) { + this.#discard_callbacks.add(fn); + } + /** @param {(batch: Batch) => void} fn */ + on_fork_commit(fn) { + this.#fork_commit_callbacks.add(fn); + } + run_fork_commit_callbacks() { + for (const fn of this.#fork_commit_callbacks) fn(this); + this.#fork_commit_callbacks.clear(); + } + settled() { + return (this.#deferred ??= deferred()).promise; + } + static ensure() { + if (current_batch === null) { + const batch = current_batch = new Batch(); + batch.#link(); + if (!is_processing && !is_flushing_sync) { + queue_micro_task(() => { + if (!batch.#started) { + batch.flush(); + } + }); + } + } + return current_batch; + } + apply() { + { + batch_values = null; + return; + } + } + /** + * + * @param {Effect} effect + */ + schedule(effect2) { + last_scheduled_effect = effect2; + if (effect2.b?.is_pending && (effect2.f & (EFFECT | RENDER_EFFECT | MANAGED_EFFECT)) !== 0 && (effect2.f & REACTION_RAN) === 0) { + effect2.b.defer_effect(effect2); + return; + } + var e = effect2; + while (e.parent !== null) { + e = e.parent; + var flags2 = e.f; + if (collected_effects !== null && e === active_effect) { + if ((active_reaction === null || (active_reaction.f & DERIVED) === 0) && true) { + return; + } + } + if ((flags2 & (ROOT_EFFECT | BRANCH_EFFECT)) !== 0) { + if ((flags2 & CLEAN) === 0) { + return; + } + e.f ^= CLEAN; + } + } + this.#roots.push(e); + } + #link() { + if (last_batch === null) { + first_batch = last_batch = this; + } else { + last_batch.#next = this; + this.#prev = last_batch; + } + last_batch = this; + } + #unlink() { + var prev = this.#prev; + var next2 = this.#next; + if (prev === null) { + first_batch = next2; + } else { + prev.#next = next2; + } + if (next2 === null) { + last_batch = prev; + } else { + next2.#prev = prev; + } + this.linked = false; + } + } + function flushSync(fn) { + var was_flushing_sync = is_flushing_sync; + is_flushing_sync = true; + try { + var result; + if (fn) ; + while (true) { + flush_tasks(); + if (current_batch === null) { + return ( + /** @type {T} */ + result + ); + } + current_batch.flush(); + } + } finally { + is_flushing_sync = was_flushing_sync; + } + } + function infinite_loop_guard() { + try { + effect_update_depth_exceeded(); + } catch (error) { + invoke_error_boundary(error, last_scheduled_effect); + } + } + let eager_block_effects = null; + function flush_queued_effects(effects) { + var length = effects.length; + if (length === 0) return; + var i = 0; + while (i < length) { + var effect2 = effects[i++]; + if ((effect2.f & (DESTROYED | INERT)) === 0 && is_dirty(effect2)) { + eager_block_effects = /* @__PURE__ */ new Set(); + update_effect(effect2); + if (effect2.deps === null && effect2.first === null && effect2.nodes === null && effect2.teardown === null && effect2.ac === null) { + unlink_effect(effect2); + } + if (eager_block_effects?.size > 0) { + old_values.clear(); + for (const e of eager_block_effects) { + if ((e.f & (DESTROYED | INERT)) !== 0) continue; + const ordered_effects = [e]; + let ancestor = e.parent; + while (ancestor !== null) { + if (eager_block_effects.has(ancestor)) { + eager_block_effects.delete(ancestor); + ordered_effects.push(ancestor); + } + ancestor = ancestor.parent; + } + for (let j = ordered_effects.length - 1; j >= 0; j--) { + const e2 = ordered_effects[j]; + if ((e2.f & (DESTROYED | INERT)) !== 0) continue; + update_effect(e2); + } + } + eager_block_effects.clear(); + } + } + } + eager_block_effects = null; + } + function mark_effects(value, sources, marked, checked) { + if (marked.has(value)) return; + marked.add(value); + if (value.reactions !== null) { + for (const reaction of value.reactions) { + const flags2 = reaction.f; + if ((flags2 & DERIVED) !== 0) { + mark_effects( + /** @type {Derived} */ + reaction, + sources, + marked, + checked + ); + } else if ((flags2 & (ASYNC | BLOCK_EFFECT)) !== 0 && (flags2 & DIRTY) === 0 && depends_on(reaction, sources, checked)) { + set_signal_status(reaction, DIRTY); + schedule_effect( + /** @type {Effect} */ + reaction + ); + } + } + } + } + function depends_on(reaction, sources, checked) { + const depends = checked.get(reaction); + if (depends !== void 0) return depends; + if (reaction.deps !== null) { + for (const dep of reaction.deps) { + if (includes.call(sources, dep)) { + return true; + } + if ((dep.f & DERIVED) !== 0 && depends_on( + /** @type {Derived} */ + dep, + sources, + checked + )) { + checked.set( + /** @type {Derived} */ + dep, + true + ); + return true; + } + } + } + checked.set(reaction, false); + return false; + } + function schedule_effect(effect2) { + current_batch.schedule(effect2); + } + function reset_branch(effect2, tracked) { + if ((effect2.f & BRANCH_EFFECT) !== 0 && (effect2.f & CLEAN) !== 0) { + return; + } + if ((effect2.f & DIRTY) !== 0) { + tracked.d.push(effect2); + } else if ((effect2.f & MAYBE_DIRTY) !== 0) { + tracked.m.push(effect2); + } + set_signal_status(effect2, CLEAN); + var e = effect2.first; + while (e !== null) { + reset_branch(e, tracked); + e = e.next; + } + } + function reset_all(effect2) { + set_signal_status(effect2, CLEAN); + var e = effect2.first; + while (e !== null) { + reset_all(e); + e = e.next; + } + } + function createSubscriber(start) { + let subscribers = 0; + let version = source(0); + let stop; + return () => { + if (effect_tracking()) { + get(version); + render_effect(() => { + if (subscribers === 0) { + stop = untrack(() => start(() => increment(version))); + } + subscribers += 1; + return () => { + queue_micro_task(() => { + subscribers -= 1; + if (subscribers === 0) { + stop?.(); + stop = void 0; + increment(version); + } + }); + }; + }); + } + }; + } + var flags = EFFECT_TRANSPARENT | EFFECT_PRESERVED; + function boundary(node, props, children, transform_error) { + new Boundary(node, props, children, transform_error); + } + class Boundary { + /** @type {Boundary | null} */ + parent; + is_pending = false; + /** + * API-level transformError transform function. Transforms errors before they reach the `failed` snippet. + * Inherited from parent boundary, or defaults to identity. + * @type {(error: unknown) => unknown} + */ + transform_error; + /** @type {TemplateNode} */ + #anchor; + /** @type {TemplateNode | null} */ + #hydrate_open = hydrating ? hydrate_node : null; + /** @type {BoundaryProps} */ + #props; + /** @type {((anchor: Node) => void)} */ + #children; + /** @type {Effect} */ + #effect; + /** @type {Effect | null} */ + #main_effect = null; + /** @type {Effect | null} */ + #pending_effect = null; + /** @type {Effect | null} */ + #failed_effect = null; + /** @type {DocumentFragment | null} */ + #offscreen_fragment = null; + #local_pending_count = 0; + #pending_count = 0; + #pending_count_update_queued = false; + /** @type {Set} */ + #dirty_effects = /* @__PURE__ */ new Set(); + /** @type {Set} */ + #maybe_dirty_effects = /* @__PURE__ */ new Set(); + /** + * A source containing the number of pending async deriveds/expressions. + * Only created if `$effect.pending()` is used inside the boundary, + * otherwise updating the source results in needless `Batch.ensure()` + * calls followed by no-op flushes + * @type {Source | null} + */ + #effect_pending = null; + #effect_pending_subscriber = createSubscriber(() => { + this.#effect_pending = source(this.#local_pending_count); + return () => { + this.#effect_pending = null; + }; + }); + /** + * @param {TemplateNode} node + * @param {BoundaryProps} props + * @param {((anchor: Node) => void)} children + * @param {((error: unknown) => unknown) | undefined} [transform_error] + */ + constructor(node, props, children, transform_error) { + this.#anchor = node; + this.#props = props; + this.#children = (anchor) => { + var effect2 = ( + /** @type {Effect} */ + active_effect + ); + effect2.b = this; + effect2.f |= BOUNDARY_EFFECT; + children(anchor); + }; + this.parent = /** @type {Effect} */ + active_effect.b; + this.transform_error = transform_error ?? this.parent?.transform_error ?? ((e) => e); + this.#effect = block(() => { + if (hydrating) { + const comment2 = ( + /** @type {Comment} */ + this.#hydrate_open + ); + hydrate_next(); + const server_rendered_pending = comment2.data === HYDRATION_START_ELSE; + const server_rendered_failed = comment2.data.startsWith(HYDRATION_START_FAILED); + if (server_rendered_failed) { + const serialized_error = JSON.parse(comment2.data.slice(HYDRATION_START_FAILED.length)); + this.#hydrate_failed_content(serialized_error); + } else if (server_rendered_pending) { + this.#hydrate_pending_content(); + } else { + this.#hydrate_resolved_content(); + } + } else { + this.#render(); + } + }, flags); + if (hydrating) { + this.#anchor = hydrate_node; + } + } + #hydrate_resolved_content() { + try { + this.#main_effect = branch(() => this.#children(this.#anchor)); + } catch (error) { + this.error(error); + } + } + /** + * @param {unknown} error The deserialized error from the server's hydration comment + */ + #hydrate_failed_content(error) { + const failed = this.#props.failed; + if (!failed) return; + this.#failed_effect = branch(() => { + failed( + this.#anchor, + () => error, + () => () => { + } + ); + }); + } + #hydrate_pending_content() { + const pending = this.#props.pending; + if (!pending) return; + this.is_pending = true; + this.#pending_effect = branch(() => pending(this.#anchor)); + queue_micro_task(() => { + var fragment = this.#offscreen_fragment = document.createDocumentFragment(); + var anchor = create_text(); + fragment.append(anchor); + this.#main_effect = this.#run(() => { + return branch(() => this.#children(anchor)); + }); + if (this.#pending_count === 0) { + this.#anchor.before(fragment); + this.#offscreen_fragment = null; + pause_effect( + /** @type {Effect} */ + this.#pending_effect, + () => { + this.#pending_effect = null; + } + ); + this.#resolve( + /** @type {Batch} */ + current_batch + ); + } + }); + } + #render() { + try { + this.is_pending = this.has_pending_snippet(); + this.#pending_count = 0; + this.#local_pending_count = 0; + this.#main_effect = branch(() => { + this.#children(this.#anchor); + }); + if (this.#pending_count > 0) { + var fragment = this.#offscreen_fragment = document.createDocumentFragment(); + move_effect(this.#main_effect, fragment); + const pending = ( + /** @type {(anchor: Node) => void} */ + this.#props.pending + ); + this.#pending_effect = branch(() => pending(this.#anchor)); + } else { + this.#resolve( + /** @type {Batch} */ + current_batch + ); + } + } catch (error) { + this.error(error); + } + } + /** + * @param {Batch} batch + */ + #resolve(batch) { + this.is_pending = false; + batch.transfer_effects(this.#dirty_effects, this.#maybe_dirty_effects); + } + /** + * Defer an effect inside a pending boundary until the boundary resolves + * @param {Effect} effect + */ + defer_effect(effect2) { + defer_effect(effect2, this.#dirty_effects, this.#maybe_dirty_effects); + } + /** + * Returns `false` if the effect exists inside a boundary whose pending snippet is shown + * @returns {boolean} + */ + is_rendered() { + return !this.is_pending && (!this.parent || this.parent.is_rendered()); + } + has_pending_snippet() { + return !!this.#props.pending; + } + /** + * @template T + * @param {() => T} fn + */ + #run(fn) { + var previous_effect = active_effect; + var previous_reaction = active_reaction; + var previous_ctx = component_context; + set_active_effect(this.#effect); + set_active_reaction(this.#effect); + set_component_context(this.#effect.ctx); + try { + Batch.ensure(); + return fn(); + } catch (e) { + handle_error(e); + return null; + } finally { + set_active_effect(previous_effect); + set_active_reaction(previous_reaction); + set_component_context(previous_ctx); + } + } + /** + * Updates the pending count associated with the currently visible pending snippet, + * if any, such that we can replace the snippet with content once work is done + * @param {1 | -1} d + * @param {Batch} batch + */ + #update_pending_count(d, batch) { + if (!this.has_pending_snippet()) { + if (this.parent) { + this.parent.#update_pending_count(d, batch); + } + return; + } + this.#pending_count += d; + if (this.#pending_count === 0) { + this.#resolve(batch); + if (this.#pending_effect) { + pause_effect(this.#pending_effect, () => { + this.#pending_effect = null; + }); + } + if (this.#offscreen_fragment) { + this.#anchor.before(this.#offscreen_fragment); + this.#offscreen_fragment = null; + } + } + } + /** + * Update the source that powers `$effect.pending()` inside this boundary, + * and controls when the current `pending` snippet (if any) is removed. + * Do not call from inside the class + * @param {1 | -1} d + * @param {Batch} batch + */ + update_pending_count(d, batch) { + this.#update_pending_count(d, batch); + this.#local_pending_count += d; + if (!this.#effect_pending || this.#pending_count_update_queued) return; + this.#pending_count_update_queued = true; + queue_micro_task(() => { + this.#pending_count_update_queued = false; + if (this.#effect_pending) { + internal_set(this.#effect_pending, this.#local_pending_count); + } + }); + } + get_effect_pending() { + this.#effect_pending_subscriber(); + return get( + /** @type {Source} */ + this.#effect_pending + ); + } + /** @param {unknown} error */ + error(error) { + if (!this.#props.onerror && !this.#props.failed) { + throw error; + } + if (current_batch?.is_fork) { + if (this.#main_effect) current_batch.skip_effect(this.#main_effect); + if (this.#pending_effect) current_batch.skip_effect(this.#pending_effect); + if (this.#failed_effect) current_batch.skip_effect(this.#failed_effect); + current_batch.on_fork_commit(() => { + this.#handle_error(error); + }); + } else { + this.#handle_error(error); + } + } + /** + * @param {unknown} error + */ + #handle_error(error) { + if (this.#main_effect) { + destroy_effect(this.#main_effect); + this.#main_effect = null; + } + if (this.#pending_effect) { + destroy_effect(this.#pending_effect); + this.#pending_effect = null; + } + if (this.#failed_effect) { + destroy_effect(this.#failed_effect); + this.#failed_effect = null; + } + if (hydrating) { + set_hydrate_node( + /** @type {TemplateNode} */ + this.#hydrate_open + ); + next(); + set_hydrate_node(skip_nodes()); + } + var onerror = this.#props.onerror; + let failed = this.#props.failed; + var did_reset = false; + var calling_on_error = false; + const reset2 = () => { + if (did_reset) { + svelte_boundary_reset_noop(); + return; + } + did_reset = true; + if (calling_on_error) { + svelte_boundary_reset_onerror(); + } + if (this.#failed_effect !== null) { + pause_effect(this.#failed_effect, () => { + this.#failed_effect = null; + }); + } + this.#run(() => { + this.#render(); + }); + }; + const handle_error_result = (transformed_error) => { + try { + calling_on_error = true; + onerror?.(transformed_error, reset2); + calling_on_error = false; + } catch (error2) { + invoke_error_boundary(error2, this.#effect && this.#effect.parent); + } + if (failed) { + this.#failed_effect = this.#run(() => { + try { + return branch(() => { + var effect2 = ( + /** @type {Effect} */ + active_effect + ); + effect2.b = this; + effect2.f |= BOUNDARY_EFFECT; + failed( + this.#anchor, + () => transformed_error, + () => reset2 + ); + }); + } catch (error2) { + invoke_error_boundary( + error2, + /** @type {Effect} */ + this.#effect.parent + ); + return null; + } + }); + } + }; + queue_micro_task(() => { + var result; + try { + result = this.transform_error(error); + } catch (e) { + invoke_error_boundary(e, this.#effect && this.#effect.parent); + return; + } + if (result !== null && typeof result === "object" && typeof /** @type {any} */ + result.then === "function") { + result.then( + handle_error_result, + /** @param {unknown} e */ + (e) => invoke_error_boundary(e, this.#effect && this.#effect.parent) + ); + } else { + handle_error_result(result); + } + }); + } + } + function flatten(blockers, sync, async, fn) { + const d = derived; + var pending = blockers.filter((b) => !b.settled); + if (async.length === 0 && pending.length === 0) { + fn(sync.map(d)); + return; + } + var parent = ( + /** @type {Effect} */ + active_effect + ); + var restore = capture(); + var blocker_promise = pending.length === 1 ? pending[0].promise : pending.length > 1 ? Promise.all(pending.map((b) => b.promise)) : null; + function finish(values) { + if ((parent.f & DESTROYED) !== 0) { + return; + } + restore(); + try { + fn(values); + } catch (error) { + invoke_error_boundary(error, parent); + } + unset_context(); + } + var decrement_pending = increment_pending(); + if (async.length === 0) { + blocker_promise.then(() => finish(sync.map(d))).finally(decrement_pending); + return; + } + function run() { + Promise.all(async.map((expression) => /* @__PURE__ */ async_derived(expression))).then((result) => finish([...sync.map(d), ...result])).catch((error) => invoke_error_boundary(error, parent)).finally(decrement_pending); + } + if (blocker_promise) { + blocker_promise.then(() => { + restore(); + run(); + unset_context(); + }); + } else { + run(); + } + } + function capture() { + var previous_effect = ( + /** @type {Effect} */ + active_effect + ); + var previous_reaction = active_reaction; + var previous_component_context = component_context; + var previous_batch2 = ( + /** @type {Batch} */ + current_batch + ); + return function restore(activate_batch = true) { + set_active_effect(previous_effect); + set_active_reaction(previous_reaction); + set_component_context(previous_component_context); + if (activate_batch && (previous_effect.f & DESTROYED) === 0) { + previous_batch2?.activate(); + previous_batch2?.apply(); + } + }; + } + function unset_context(deactivate_batch = true) { + set_active_effect(null); + set_active_reaction(null); + set_component_context(null); + if (deactivate_batch) current_batch?.deactivate(); + } + function increment_pending() { + var effect2 = ( + /** @type {Effect} */ + active_effect + ); + var boundary2 = ( + /** @type {Boundary} */ + effect2.b + ); + var batch = ( + /** @type {Batch} */ + current_batch + ); + var blocking = boundary2.is_rendered(); + boundary2.update_pending_count(1, batch); + batch.increment(blocking, effect2); + return () => { + boundary2.update_pending_count(-1, batch); + batch.decrement(blocking, effect2); + }; + } + // @__NO_SIDE_EFFECTS__ + function derived(fn) { + var flags2 = DERIVED | DIRTY; + if (active_effect !== null) { + active_effect.f |= EFFECT_PRESERVED; + } + const signal = { + ctx: component_context, + deps: null, + effects: null, + equals, + f: flags2, + fn, + reactions: null, + rv: 0, + v: ( + /** @type {V} */ + UNINITIALIZED + ), + wv: 0, + parent: active_effect, + ac: null + }; + return signal; + } + const OBSOLETE = /* @__PURE__ */ Symbol("obsolete"); + // @__NO_SIDE_EFFECTS__ + function async_derived(fn, label, location2) { + let parent = ( + /** @type {Effect | null} */ + active_effect + ); + if (parent === null) { + async_derived_orphan(); + } + var promise = ( + /** @type {Promise} */ + /** @type {unknown} */ + void 0 + ); + var signal = source( + /** @type {V} */ + UNINITIALIZED + ); + var should_suspend = !active_reaction; + var deferreds = /* @__PURE__ */ new Set(); + async_effect(() => { + var effect2 = ( + /** @type {Effect} */ + active_effect + ); + var d = deferred(); + promise = d.promise; + try { + Promise.resolve(fn()).then(d.resolve, (e) => { + if (e !== STALE_REACTION) d.reject(e); + }).finally(unset_context); + } catch (error) { + d.reject(error); + unset_context(); + } + var batch = ( + /** @type {Batch} */ + current_batch + ); + if (should_suspend) { + if ((effect2.f & REACTION_RAN) !== 0) { + var decrement_pending = increment_pending(); + } + if ( + /** @type {Boundary} */ + parent.b.is_rendered() + ) { + batch.async_deriveds.get(effect2)?.reject(OBSOLETE); + } else { + for (const d2 of deferreds.values()) { + d2.reject(OBSOLETE); + } + } + deferreds.add(d); + batch.async_deriveds.set(effect2, d); + } + const handler = (value, error = void 0) => { + decrement_pending?.(); + deferreds.delete(d); + if (error === OBSOLETE) return; + batch.activate(); + if (error) { + signal.f |= ERROR_VALUE; + internal_set(signal, error); + } else { + if ((signal.f & ERROR_VALUE) !== 0) { + signal.f ^= ERROR_VALUE; + } + internal_set(signal, value); + } + batch.deactivate(); + }; + d.promise.then(handler, (e) => handler(null, e || "unknown")); + }); + teardown(() => { + for (const d of deferreds) { + d.reject(OBSOLETE); + } + }); + return new Promise((fulfil) => { + function next2(p) { + function go() { + if (p === promise) { + fulfil(signal); + } else { + next2(promise); + } + } + p.then(go, go); + } + next2(promise); + }); + } + // @__NO_SIDE_EFFECTS__ + function user_derived(fn) { + const d = /* @__PURE__ */ derived(fn); + push_reaction_value(d); + return d; + } + function destroy_derived_effects(derived2) { + var effects = derived2.effects; + if (effects !== null) { + derived2.effects = null; + for (var i = 0; i < effects.length; i += 1) { + destroy_effect( + /** @type {Effect} */ + effects[i] + ); + } + } + } + function execute_derived(derived2) { + var value; + var prev_active_effect = active_effect; + var parent = derived2.parent; + if (!is_destroying_effect && parent !== null && derived2.v !== UNINITIALIZED && // if it was never evaluated before, it's guaranteed to fail downstream, so we try to execute instead + (parent.f & (DESTROYED | INERT)) !== 0) { + derived_inert(); + return derived2.v; + } + set_active_effect(parent); + { + try { + derived2.f &= ~WAS_MARKED; + destroy_derived_effects(derived2); + value = update_reaction(derived2); + } finally { + set_active_effect(prev_active_effect); + } + } + return value; + } + function update_derived(derived2) { + var value = execute_derived(derived2); + if (!derived2.equals(value)) { + derived2.wv = increment_write_version(); + if (!current_batch?.is_fork || derived2.deps === null) { + if (current_batch !== null) { + current_batch.capture(derived2, value, true); + previous_batch?.capture(derived2, value, true); + } else { + derived2.v = value; + } + if (derived2.deps === null) { + set_signal_status(derived2, CLEAN); + return; + } + } + } + if (is_destroying_effect) { + return; + } + if (batch_values !== null) { + if (effect_tracking() || current_batch?.is_fork) { + batch_values.set(derived2, value); + } + } else { + update_derived_status(derived2); + } + } + function freeze_derived_effects(derived2) { + if (derived2.effects === null) return; + for (const e of derived2.effects) { + if (e.teardown || e.ac) { + e.teardown?.(); + e.ac?.abort(STALE_REACTION); + if (e.fn !== null) e.teardown = noop; + e.ac = null; + remove_reactions(e, 0); + destroy_effect_children(e); + } + } + } + function unfreeze_derived_effects(derived2) { + if (derived2.effects === null) return; + for (const e of derived2.effects) { + if (e.teardown && e.fn !== null) { + update_effect(e); + } + } + } + let eager_effects = /* @__PURE__ */ new Set(); + const old_values = /* @__PURE__ */ new Map(); + let eager_effects_deferred = false; + function source(v, stack) { + var signal = { + f: 0, + // TODO ideally we could skip this altogether, but it causes type errors + v, + reactions: null, + equals, + rv: 0, + wv: 0 + }; + return signal; + } + // @__NO_SIDE_EFFECTS__ + function state(v, stack) { + const s = source(v); + push_reaction_value(s); + return s; + } + // @__NO_SIDE_EFFECTS__ + function mutable_source(initial_value, immutable = false, trackable = true) { + const s = source(initial_value); + if (!immutable) { + s.equals = safe_equals; + } + return s; + } + function set(source2, value, should_proxy = false) { + if (active_reaction !== null && // since we are untracking the function inside `$inspect.with` we need to add this check + // to ensure we error if state is set inside an inspect effect + (!untracking || (active_reaction.f & EAGER_EFFECT) !== 0) && is_runes() && (active_reaction.f & (DERIVED | BLOCK_EFFECT | ASYNC | EAGER_EFFECT)) !== 0 && (current_sources === null || !includes.call(current_sources, source2))) { + state_unsafe_mutation(); + } + let new_value = should_proxy ? proxy(value) : value; + return internal_set(source2, new_value, legacy_updates); + } + function internal_set(source2, value, updated_during_traversal = null) { + if (!source2.equals(value)) { + old_values.set(source2, is_destroying_effect ? value : source2.v); + var batch = Batch.ensure(); + batch.capture(source2, value); + if ((source2.f & DERIVED) !== 0) { + const derived2 = ( + /** @type {Derived} */ + source2 + ); + if ((source2.f & DIRTY) !== 0) { + execute_derived(derived2); + } + if (batch_values === null) { + update_derived_status(derived2); + } + } + source2.wv = increment_write_version(); + mark_reactions(source2, DIRTY, updated_during_traversal); + if (active_effect !== null && (active_effect.f & CLEAN) !== 0 && (active_effect.f & (BRANCH_EFFECT | ROOT_EFFECT)) === 0) { + if (untracked_writes === null) { + set_untracked_writes([source2]); + } else { + untracked_writes.push(source2); + } + } + if (!batch.is_fork && eager_effects.size > 0 && !eager_effects_deferred) { + flush_eager_effects(); + } + } + return value; + } + function flush_eager_effects() { + eager_effects_deferred = false; + for (const effect2 of eager_effects) { + if ((effect2.f & CLEAN) !== 0) { + set_signal_status(effect2, MAYBE_DIRTY); + } + let dirty; + try { + dirty = is_dirty(effect2); + } catch { + dirty = true; + } + if (dirty) { + update_effect(effect2); + } + } + eager_effects.clear(); + } + function increment(source2) { + set(source2, source2.v + 1); + } + function mark_reactions(signal, status, updated_during_traversal) { + var reactions = signal.reactions; + if (reactions === null) return; + var length = reactions.length; + for (var i = 0; i < length; i++) { + var reaction = reactions[i]; + var flags2 = reaction.f; + var not_dirty = (flags2 & DIRTY) === 0; + if (not_dirty) { + set_signal_status(reaction, status); + } + if ((flags2 & EAGER_EFFECT) !== 0) { + eager_effects.add( + /** @type {Effect} */ + reaction + ); + } else if ((flags2 & DERIVED) !== 0) { + var derived2 = ( + /** @type {Derived} */ + reaction + ); + batch_values?.delete(derived2); + if ((flags2 & WAS_MARKED) === 0) { + if (flags2 & CONNECTED && (active_effect === null || (active_effect.f & REACTION_IS_UPDATING) === 0)) { + reaction.f |= WAS_MARKED; + } + mark_reactions(derived2, MAYBE_DIRTY, updated_during_traversal); + } + } else if (not_dirty) { + var effect2 = ( + /** @type {Effect} */ + reaction + ); + if ((flags2 & BLOCK_EFFECT) !== 0 && eager_block_effects !== null) { + eager_block_effects.add(effect2); + } + if (updated_during_traversal !== null) { + updated_during_traversal.push(effect2); + } else { + schedule_effect(effect2); + } + } + } + } + function autofocus(dom, value) { + if (value) { + const body = document.body; + dom.autofocus = true; + queue_micro_task(() => { + if (document.activeElement === body) { + dom.focus(); + } + }); + } + } + let listening_to_form_reset = false; + function add_form_reset_listener() { + if (!listening_to_form_reset) { + listening_to_form_reset = true; + document.addEventListener( + "reset", + (evt) => { + Promise.resolve().then(() => { + if (!evt.defaultPrevented) { + for ( + const e of + /**@type {HTMLFormElement} */ + evt.target.elements + ) { + e[FORM_RESET_HANDLER]?.(); + } + } + }); + }, + // In the capture phase to guarantee we get noticed of it (no possibility of stopPropagation) + { capture: true } + ); + } + } + function without_reactive_context(fn) { + var previous_reaction = active_reaction; + var previous_effect = active_effect; + set_active_reaction(null); + set_active_effect(null); + try { + return fn(); + } finally { + set_active_reaction(previous_reaction); + set_active_effect(previous_effect); + } + } + function listen_to_event_and_reset_event(element, event2, handler, on_reset = handler) { + element.addEventListener(event2, () => without_reactive_context(handler)); + const prev = ( + /** @type {any} */ + element[FORM_RESET_HANDLER] + ); + if (prev) { + element[FORM_RESET_HANDLER] = () => { + prev(); + on_reset(true); + }; + } else { + element[FORM_RESET_HANDLER] = () => on_reset(true); + } + add_form_reset_listener(); + } + let is_updating_effect = false; + let is_destroying_effect = false; + function set_is_destroying_effect(value) { + is_destroying_effect = value; + } + let active_reaction = null; + let untracking = false; + function set_active_reaction(reaction) { + active_reaction = reaction; + } + let active_effect = null; + function set_active_effect(effect2) { + active_effect = effect2; + } + let current_sources = null; + function push_reaction_value(value) { + if (active_reaction !== null && true) { + if (current_sources === null) { + current_sources = [value]; + } else { + current_sources.push(value); + } + } + } + let new_deps = null; + let skipped_deps = 0; + let untracked_writes = null; + function set_untracked_writes(value) { + untracked_writes = value; + } + let write_version = 1; + let read_version = 0; + let update_version = read_version; + function set_update_version(value) { + update_version = value; + } + function increment_write_version() { + return ++write_version; + } + function is_dirty(reaction) { + var flags2 = reaction.f; + if ((flags2 & DIRTY) !== 0) { + return true; + } + if (flags2 & DERIVED) { + reaction.f &= ~WAS_MARKED; + } + if ((flags2 & MAYBE_DIRTY) !== 0) { + var dependencies = ( + /** @type {Value[]} */ + reaction.deps + ); + var length = dependencies.length; + for (var i = 0; i < length; i++) { + var dependency = dependencies[i]; + if (is_dirty( + /** @type {Derived} */ + dependency + )) { + update_derived( + /** @type {Derived} */ + dependency + ); + } + if (dependency.wv > reaction.wv) { + return true; + } + } + if ((flags2 & CONNECTED) !== 0 && // During time traveling we don't want to reset the status so that + // traversal of the graph in the other batches still happens + batch_values === null) { + set_signal_status(reaction, CLEAN); + } + } + return false; + } + function schedule_possible_effect_self_invalidation(signal, effect2, root2 = true) { + var reactions = signal.reactions; + if (reactions === null) return; + if (current_sources !== null && includes.call(current_sources, signal)) { + return; + } + for (var i = 0; i < reactions.length; i++) { + var reaction = reactions[i]; + if ((reaction.f & DERIVED) !== 0) { + schedule_possible_effect_self_invalidation( + /** @type {Derived} */ + reaction, + effect2, + false + ); + } else if (effect2 === reaction) { + if (root2) { + set_signal_status(reaction, DIRTY); + } else if ((reaction.f & CLEAN) !== 0) { + set_signal_status(reaction, MAYBE_DIRTY); + } + schedule_effect( + /** @type {Effect} */ + reaction + ); + } + } + } + function update_reaction(reaction) { + var previous_deps = new_deps; + var previous_skipped_deps = skipped_deps; + var previous_untracked_writes = untracked_writes; + var previous_reaction = active_reaction; + var previous_sources = current_sources; + var previous_component_context = component_context; + var previous_untracking = untracking; + var previous_update_version = update_version; + var flags2 = reaction.f; + new_deps = /** @type {null | Value[]} */ + null; + skipped_deps = 0; + untracked_writes = null; + active_reaction = (flags2 & (BRANCH_EFFECT | ROOT_EFFECT)) === 0 ? reaction : null; + current_sources = null; + set_component_context(reaction.ctx); + untracking = false; + update_version = ++read_version; + if (reaction.ac !== null) { + without_reactive_context(() => { + reaction.ac.abort(STALE_REACTION); + }); + reaction.ac = null; + } + try { + reaction.f |= REACTION_IS_UPDATING; + var fn = ( + /** @type {Function} */ + reaction.fn + ); + var result = fn(); + reaction.f |= REACTION_RAN; + var deps = reaction.deps; + var is_fork = current_batch?.is_fork; + if (new_deps !== null) { + var i; + if (!is_fork) { + remove_reactions(reaction, skipped_deps); + } + if (deps !== null && skipped_deps > 0) { + deps.length = skipped_deps + new_deps.length; + for (i = 0; i < new_deps.length; i++) { + deps[skipped_deps + i] = new_deps[i]; + } + } else { + reaction.deps = deps = new_deps; + } + if (effect_tracking() && (reaction.f & CONNECTED) !== 0) { + for (i = skipped_deps; i < deps.length; i++) { + (deps[i].reactions ??= []).push(reaction); + } + } + } else if (!is_fork && deps !== null && skipped_deps < deps.length) { + remove_reactions(reaction, skipped_deps); + deps.length = skipped_deps; + } + if (is_runes() && untracked_writes !== null && !untracking && deps !== null && (reaction.f & (DERIVED | MAYBE_DIRTY | DIRTY)) === 0) { + for (i = 0; i < /** @type {Source[]} */ + untracked_writes.length; i++) { + schedule_possible_effect_self_invalidation( + untracked_writes[i], + /** @type {Effect} */ + reaction + ); + } + } + if (previous_reaction !== null && previous_reaction !== reaction) { + read_version++; + if (previous_reaction.deps !== null) { + for (let i2 = 0; i2 < previous_skipped_deps; i2 += 1) { + previous_reaction.deps[i2].rv = read_version; + } + } + if (previous_deps !== null) { + for (const dep of previous_deps) { + dep.rv = read_version; + } + } + if (untracked_writes !== null) { + if (previous_untracked_writes === null) { + previous_untracked_writes = untracked_writes; + } else { + previous_untracked_writes.push(.../** @type {Source[]} */ + untracked_writes); + } + } + } + if ((reaction.f & ERROR_VALUE) !== 0) { + reaction.f ^= ERROR_VALUE; + } + return result; + } catch (error) { + return handle_error(error); + } finally { + reaction.f ^= REACTION_IS_UPDATING; + new_deps = previous_deps; + skipped_deps = previous_skipped_deps; + untracked_writes = previous_untracked_writes; + active_reaction = previous_reaction; + current_sources = previous_sources; + set_component_context(previous_component_context); + untracking = previous_untracking; + update_version = previous_update_version; + } + } + function remove_reaction(signal, dependency) { + let reactions = dependency.reactions; + if (reactions !== null) { + var index = index_of.call(reactions, signal); + if (index !== -1) { + var new_length = reactions.length - 1; + if (new_length === 0) { + reactions = dependency.reactions = null; + } else { + reactions[index] = reactions[new_length]; + reactions.pop(); + } + } + } + if (reactions === null && (dependency.f & DERIVED) !== 0 && // Destroying a child effect while updating a parent effect can cause a dependency to appear + // to be unused, when in fact it is used by the currently-updating parent. Checking `new_deps` + // allows us to skip the expensive work of disconnecting and immediately reconnecting it + (new_deps === null || !includes.call(new_deps, dependency))) { + var derived2 = ( + /** @type {Derived} */ + dependency + ); + if ((derived2.f & CONNECTED) !== 0) { + derived2.f ^= CONNECTED; + derived2.f &= ~WAS_MARKED; + } + if (derived2.v !== UNINITIALIZED) { + update_derived_status(derived2); + } + freeze_derived_effects(derived2); + remove_reactions(derived2, 0); + } + } + function remove_reactions(signal, start_index) { + var dependencies = signal.deps; + if (dependencies === null) return; + for (var i = start_index; i < dependencies.length; i++) { + remove_reaction(signal, dependencies[i]); + } + } + function update_effect(effect2) { + var flags2 = effect2.f; + if ((flags2 & DESTROYED) !== 0) { + return; + } + set_signal_status(effect2, CLEAN); + var previous_effect = active_effect; + var was_updating_effect = is_updating_effect; + active_effect = effect2; + is_updating_effect = true; + try { + if ((flags2 & (BLOCK_EFFECT | MANAGED_EFFECT)) !== 0) { + destroy_block_effect_children(effect2); + } else { + destroy_effect_children(effect2); + } + execute_effect_teardown(effect2); + var teardown2 = update_reaction(effect2); + effect2.teardown = typeof teardown2 === "function" ? teardown2 : null; + effect2.wv = write_version; + var dep; + if (DEV && tracing_mode_flag && (effect2.f & DIRTY) !== 0 && effect2.deps !== null) ; + } finally { + is_updating_effect = was_updating_effect; + active_effect = previous_effect; + } + } + async function tick() { + await Promise.resolve(); + flushSync(); + } + function get(signal) { + var flags2 = signal.f; + var is_derived = (flags2 & DERIVED) !== 0; + if (active_reaction !== null && !untracking) { + var destroyed = active_effect !== null && (active_effect.f & DESTROYED) !== 0; + if (!destroyed && (current_sources === null || !includes.call(current_sources, signal))) { + var deps = active_reaction.deps; + if ((active_reaction.f & REACTION_IS_UPDATING) !== 0) { + if (signal.rv < read_version) { + signal.rv = read_version; + if (new_deps === null && deps !== null && deps[skipped_deps] === signal) { + skipped_deps++; + } else if (new_deps === null) { + new_deps = [signal]; + } else { + new_deps.push(signal); + } + } + } else { + (active_reaction.deps ??= []).push(signal); + var reactions = signal.reactions; + if (reactions === null) { + signal.reactions = [active_reaction]; + } else if (!includes.call(reactions, active_reaction)) { + reactions.push(active_reaction); + } + } + } + } + if (is_destroying_effect && old_values.has(signal)) { + return old_values.get(signal); + } + if (is_derived) { + var derived2 = ( + /** @type {Derived} */ + signal + ); + if (is_destroying_effect) { + var value = derived2.v; + if ((derived2.f & CLEAN) === 0 && derived2.reactions !== null || depends_on_old_values(derived2)) { + value = execute_derived(derived2); + } + old_values.set(derived2, value); + return value; + } + var should_connect = (derived2.f & CONNECTED) === 0 && !untracking && active_reaction !== null && (is_updating_effect || (active_reaction.f & CONNECTED) !== 0); + var is_new = (derived2.f & REACTION_RAN) === 0; + if (is_dirty(derived2)) { + if (should_connect) { + derived2.f |= CONNECTED; + } + update_derived(derived2); + } + if (should_connect && !is_new) { + unfreeze_derived_effects(derived2); + reconnect(derived2); + } + } + if (batch_values?.has(signal)) { + return batch_values.get(signal); + } + if ((signal.f & ERROR_VALUE) !== 0) { + throw signal.v; + } + return signal.v; + } + function reconnect(derived2) { + derived2.f |= CONNECTED; + if (derived2.deps === null) return; + for (const dep of derived2.deps) { + (dep.reactions ??= []).push(derived2); + if ((dep.f & DERIVED) !== 0 && (dep.f & CONNECTED) === 0) { + unfreeze_derived_effects( + /** @type {Derived} */ + dep + ); + reconnect( + /** @type {Derived} */ + dep + ); + } + } + } + function depends_on_old_values(derived2) { + if (derived2.v === UNINITIALIZED) return true; + if (derived2.deps === null) return false; + for (const dep of derived2.deps) { + if (old_values.has(dep)) { + return true; + } + if ((dep.f & DERIVED) !== 0 && depends_on_old_values( + /** @type {Derived} */ + dep + )) { + return true; + } + } + return false; + } + function untrack(fn) { + var previous_untracking = untracking; + try { + untracking = true; + return fn(); + } finally { + untracking = previous_untracking; + } + } + function validate_effect(rune) { + if (active_effect === null) { + if (active_reaction === null) { + effect_orphan(); + } + effect_in_unowned_derived(); + } + if (is_destroying_effect) { + effect_in_teardown(); + } + } + function push_effect(effect2, parent_effect) { + var parent_last = parent_effect.last; + if (parent_last === null) { + parent_effect.last = parent_effect.first = effect2; + } else { + parent_last.next = effect2; + effect2.prev = parent_last; + parent_effect.last = effect2; + } + } + function create_effect(type, fn) { + var parent = active_effect; + if (parent !== null && (parent.f & INERT) !== 0) { + type |= INERT; + } + var effect2 = { + ctx: component_context, + deps: null, + nodes: null, + f: type | DIRTY | CONNECTED, + first: null, + fn, + last: null, + next: null, + parent, + b: parent && parent.b, + prev: null, + teardown: null, + wv: 0, + ac: null + }; + current_batch?.register_created_effect(effect2); + var e = effect2; + if ((type & EFFECT) !== 0) { + if (collected_effects !== null) { + collected_effects.push(effect2); + } else { + Batch.ensure().schedule(effect2); + } + } else if (fn !== null) { + try { + update_effect(effect2); + } catch (e2) { + destroy_effect(effect2); + throw e2; + } + if (e.deps === null && e.teardown === null && e.nodes === null && e.first === e.last && // either `null`, or a singular child + (e.f & EFFECT_PRESERVED) === 0) { + e = e.first; + if ((type & BLOCK_EFFECT) !== 0 && (type & EFFECT_TRANSPARENT) !== 0 && e !== null) { + e.f |= EFFECT_TRANSPARENT; + } + } + } + if (e !== null) { + e.parent = parent; + if (parent !== null) { + push_effect(e, parent); + } + if (active_reaction !== null && (active_reaction.f & DERIVED) !== 0 && (type & ROOT_EFFECT) === 0) { + var derived2 = ( + /** @type {Derived} */ + active_reaction + ); + (derived2.effects ??= []).push(e); + } + } + return effect2; + } + function effect_tracking() { + return active_reaction !== null && !untracking; + } + function teardown(fn) { + const effect2 = create_effect(RENDER_EFFECT, null); + set_signal_status(effect2, CLEAN); + effect2.teardown = fn; + return effect2; + } + function user_effect(fn) { + validate_effect(); + var flags2 = ( + /** @type {Effect} */ + active_effect.f + ); + var defer = !active_reaction && (flags2 & BRANCH_EFFECT) !== 0 && (flags2 & REACTION_RAN) === 0; + if (defer) { + var context = ( + /** @type {ComponentContext} */ + component_context + ); + (context.e ??= []).push(fn); + } else { + return create_user_effect(fn); + } + } + function create_user_effect(fn) { + return create_effect(EFFECT | USER_EFFECT, fn); + } + function effect_root(fn) { + Batch.ensure(); + const effect2 = create_effect(ROOT_EFFECT | EFFECT_PRESERVED, fn); + return () => { + destroy_effect(effect2); + }; + } + function component_root(fn) { + Batch.ensure(); + const effect2 = create_effect(ROOT_EFFECT | EFFECT_PRESERVED, fn); + return (options = {}) => { + return new Promise((fulfil) => { + if (options.outro) { + pause_effect(effect2, () => { + destroy_effect(effect2); + fulfil(void 0); + }); + } else { + destroy_effect(effect2); + fulfil(void 0); + } + }); + }; + } + function effect(fn) { + return create_effect(EFFECT, fn); + } + function async_effect(fn) { + return create_effect(ASYNC | EFFECT_PRESERVED, fn); + } + function render_effect(fn, flags2 = 0) { + return create_effect(RENDER_EFFECT | flags2, fn); + } + function template_effect(fn, sync = [], async = [], blockers = []) { + flatten(blockers, sync, async, (values) => { + create_effect(RENDER_EFFECT, () => fn(...values.map(get))); + }); + } + function block(fn, flags2 = 0) { + var effect2 = create_effect(BLOCK_EFFECT | flags2, fn); + return effect2; + } + function managed(fn, flags2 = 0) { + var effect2 = create_effect(MANAGED_EFFECT | flags2, fn); + return effect2; + } + function branch(fn) { + return create_effect(BRANCH_EFFECT | EFFECT_PRESERVED, fn); + } + function execute_effect_teardown(effect2) { + var teardown2 = effect2.teardown; + if (teardown2 !== null) { + const previously_destroying_effect = is_destroying_effect; + const previous_reaction = active_reaction; + set_is_destroying_effect(true); + set_active_reaction(null); + try { + teardown2.call(null); + } finally { + set_is_destroying_effect(previously_destroying_effect); + set_active_reaction(previous_reaction); + } + } + } + function destroy_effect_children(signal, remove_dom = false) { + var effect2 = signal.first; + signal.first = signal.last = null; + while (effect2 !== null) { + const controller = effect2.ac; + if (controller !== null) { + without_reactive_context(() => { + controller.abort(STALE_REACTION); + }); + } + var next2 = effect2.next; + if ((effect2.f & ROOT_EFFECT) !== 0) { + effect2.parent = null; + } else { + destroy_effect(effect2, remove_dom); + } + effect2 = next2; + } + } + function destroy_block_effect_children(signal) { + var effect2 = signal.first; + while (effect2 !== null) { + var next2 = effect2.next; + if ((effect2.f & BRANCH_EFFECT) === 0) { + destroy_effect(effect2); + } + effect2 = next2; + } + } + function destroy_effect(effect2, remove_dom = true) { + var removed = false; + if ((remove_dom || (effect2.f & HEAD_EFFECT) !== 0) && effect2.nodes !== null && effect2.nodes.end !== null) { + remove_effect_dom( + effect2.nodes.start, + /** @type {TemplateNode} */ + effect2.nodes.end + ); + removed = true; + } + set_signal_status(effect2, DESTROYING); + destroy_effect_children(effect2, remove_dom && !removed); + remove_reactions(effect2, 0); + var transitions = effect2.nodes && effect2.nodes.t; + if (transitions !== null) { + for (const transition of transitions) { + transition.stop(); + } + } + execute_effect_teardown(effect2); + effect2.f ^= DESTROYING; + effect2.f |= DESTROYED; + var parent = effect2.parent; + if (parent !== null && parent.first !== null) { + unlink_effect(effect2); + } + effect2.next = effect2.prev = effect2.teardown = effect2.ctx = effect2.deps = effect2.fn = effect2.nodes = effect2.ac = effect2.b = null; + } + function remove_effect_dom(node, end) { + while (node !== null) { + var next2 = node === end ? null : /* @__PURE__ */ get_next_sibling(node); + node.remove(); + node = next2; + } + } + function unlink_effect(effect2) { + var parent = effect2.parent; + var prev = effect2.prev; + var next2 = effect2.next; + if (prev !== null) prev.next = next2; + if (next2 !== null) next2.prev = prev; + if (parent !== null) { + if (parent.first === effect2) parent.first = next2; + if (parent.last === effect2) parent.last = prev; + } + } + function pause_effect(effect2, callback, destroy = true) { + var transitions = []; + pause_children(effect2, transitions, true); + var fn = () => { + if (destroy) destroy_effect(effect2); + if (callback) callback(); + }; + var remaining = transitions.length; + if (remaining > 0) { + var check = () => --remaining || fn(); + for (var transition of transitions) { + transition.out(check); + } + } else { + fn(); + } + } + function pause_children(effect2, transitions, local) { + if ((effect2.f & INERT) !== 0) return; + effect2.f ^= INERT; + var t = effect2.nodes && effect2.nodes.t; + if (t !== null) { + for (const transition of t) { + if (transition.is_global || local) { + transitions.push(transition); + } + } + } + var child2 = effect2.first; + while (child2 !== null) { + var sibling2 = child2.next; + if ((child2.f & ROOT_EFFECT) === 0) { + var transparent = (child2.f & EFFECT_TRANSPARENT) !== 0 || // If this is a branch effect without a block effect parent, + // it means the parent block effect was pruned. In that case, + // transparency information was transferred to the branch effect. + (child2.f & BRANCH_EFFECT) !== 0 && (effect2.f & BLOCK_EFFECT) !== 0; + pause_children(child2, transitions, transparent ? local : false); + } + child2 = sibling2; + } + } + function resume_effect(effect2) { + resume_children(effect2, true); + } + function resume_children(effect2, local) { + if ((effect2.f & INERT) === 0) return; + effect2.f ^= INERT; + if ((effect2.f & CLEAN) === 0) { + set_signal_status(effect2, DIRTY); + Batch.ensure().schedule(effect2); + } + var child2 = effect2.first; + while (child2 !== null) { + var sibling2 = child2.next; + var transparent = (child2.f & EFFECT_TRANSPARENT) !== 0 || (child2.f & BRANCH_EFFECT) !== 0; + resume_children(child2, transparent ? local : false); + child2 = sibling2; + } + var t = effect2.nodes && effect2.nodes.t; + if (t !== null) { + for (const transition of t) { + if (transition.is_global || local) { + transition.in(); + } + } + } + } + function move_effect(effect2, fragment) { + if (!effect2.nodes) return; + var node = effect2.nodes.start; + var end = effect2.nodes.end; + while (node !== null) { + var next2 = node === end ? null : /* @__PURE__ */ get_next_sibling(node); + fragment.append(node); + node = next2; + } + } + function store(defaultValue) { + const scope = { + get: (name) => { + return get$1(scope.store)[name]; + }, + set: (name, value) => { + if (typeof name === "string") { + Object.assign(get$1(scope.store), { + [name]: value + }); + } else { + Object.assign(get$1(scope.store), name); + } + scope.store.set(get$1(scope.store)); + }, + store: writable(defaultValue) + }; + return scope; + } + globalThis.$altcha = globalThis.$altcha || { + algorithms: /* @__PURE__ */ new Map(), + defaults: store({}), + i18n: store({}), + instances: /* @__PURE__ */ new Set(), + plugins: /* @__PURE__ */ new Set() + }; + const i18n$Z = { + ariaLinkLabel: "Altcha (official website)", + cancel: "Cancel", + enterCode: "Enter code", + enterCodeAria: "Enter code you hear. Press Space to play audio.", + enterCodeFromImage: "To proceed, please enter the code from the image below.", + error: "Verification failed. Try again later.", + expired: "Verification expired. Try again.", + footer: 'Protected by ALTCHA', + getAudioChallenge: "Get an audio challenge", + label: "I'm not a robot", + loading: "Loading...", + reload: "Reload", + verify: "Verify", + verificationRequired: "Verification required!", + verified: "Verified", + verifying: "Verifying...", + waitAlert: "Verifying... please wait." + }; + globalThis.$altcha.i18n.set("en", i18n$Z); + const PUBLIC_VERSION = "5"; + if (typeof window !== "undefined") { + ((window.__svelte ??= {}).v ??= /* @__PURE__ */ new Set()).add(PUBLIC_VERSION); + } + const event_symbol = /* @__PURE__ */ Symbol("events"); + const all_registered_events = /* @__PURE__ */ new Set(); + const root_event_handles = /* @__PURE__ */ new Set(); + function create_event(event_name, dom, handler, options = {}) { + function target_handler(event2) { + if (!options.capture) { + handle_event_propagation.call(dom, event2); + } + if (!event2.cancelBubble) { + return without_reactive_context(() => { + return handler?.call(this, event2); + }); + } + } + if (event_name.startsWith("pointer") || event_name.startsWith("touch") || event_name === "wheel") { + queue_micro_task(() => { + dom.addEventListener(event_name, target_handler, options); + }); + } else { + dom.addEventListener(event_name, target_handler, options); + } + return target_handler; + } + function event(event_name, dom, handler, capture2, passive) { + var options = { capture: capture2, passive }; + var target_handler = create_event(event_name, dom, handler, options); + if (dom === document.body || // @ts-ignore + dom === window || // @ts-ignore + dom === document || // Firefox has quirky behavior, it can happen that we still get "canplay" events when the element is already removed + dom instanceof HTMLMediaElement) { + teardown(() => { + dom.removeEventListener(event_name, target_handler, options); + }); + } + } + function delegated(event_name, element, handler) { + (element[event_symbol] ??= {})[event_name] = handler; + } + function delegate(events) { + for (var i = 0; i < events.length; i++) { + all_registered_events.add(events[i]); + } + for (var fn of root_event_handles) { + fn(events); + } + } + let last_propagated_event = null; + function handle_event_propagation(event2) { + var handler_element = this; + var owner_document = ( + /** @type {Node} */ + handler_element.ownerDocument + ); + var event_name = event2.type; + var path = event2.composedPath?.() || []; + var current_target = ( + /** @type {null | Element} */ + path[0] || event2.target + ); + last_propagated_event = event2; + var path_idx = 0; + var handled_at = last_propagated_event === event2 && event2[event_symbol]; + if (handled_at) { + var at_idx = path.indexOf(handled_at); + if (at_idx !== -1 && (handler_element === document || handler_element === /** @type {any} */ + window)) { + event2[event_symbol] = handler_element; + return; + } + var handler_idx = path.indexOf(handler_element); + if (handler_idx === -1) { + return; + } + if (at_idx <= handler_idx) { + path_idx = at_idx; + } + } + current_target = /** @type {Element} */ + path[path_idx] || event2.target; + if (current_target === handler_element) return; + define_property(event2, "currentTarget", { + configurable: true, + get() { + return current_target || owner_document; + } + }); + var previous_reaction = active_reaction; + var previous_effect = active_effect; + set_active_reaction(null); + set_active_effect(null); + try { + var throw_error; + var other_errors = []; + while (current_target !== null) { + var parent_element = current_target.assignedSlot || current_target.parentNode || /** @type {any} */ + current_target.host || null; + try { + var delegated2 = current_target[event_symbol]?.[event_name]; + if (delegated2 != null && (!/** @type {any} */ + current_target.disabled || // DOM could've been updated already by the time this is reached, so we check this as well + // -> the target could not have been disabled because it emits the event in the first place + event2.target === current_target)) { + delegated2.call(current_target, event2); + } + } catch (error) { + if (throw_error) { + other_errors.push(error); + } else { + throw_error = error; + } + } + if (event2.cancelBubble || parent_element === handler_element || parent_element === null) { + break; + } + current_target = parent_element; + } + if (throw_error) { + for (let error of other_errors) { + queueMicrotask(() => { + throw error; + }); + } + throw throw_error; + } + } finally { + event2[event_symbol] = handler_element; + delete event2.currentTarget; + set_active_reaction(previous_reaction); + set_active_effect(previous_effect); + } + } + const policy = ( + // We gotta write it like this because after downleveling the pure comment may end up in the wrong location + globalThis?.window?.trustedTypes && /* @__PURE__ */ globalThis.window.trustedTypes.createPolicy("svelte-trusted-html", { + /** @param {string} html */ + createHTML: (html2) => { + return html2; + } + }) + ); + function create_trusted_html(html2) { + return ( + /** @type {string} */ + policy?.createHTML(html2) ?? html2 + ); + } + function create_fragment_from_html(html2) { + var elem = create_element("template"); + elem.innerHTML = create_trusted_html(html2.replaceAll("", "")); + return elem.content; + } + function assign_nodes(start, end) { + var effect2 = ( + /** @type {Effect} */ + active_effect + ); + if (effect2.nodes === null) { + effect2.nodes = { start, end, a: null, t: null }; + } + } + // @__NO_SIDE_EFFECTS__ + function from_html(content, flags2) { + var is_fragment = (flags2 & TEMPLATE_FRAGMENT) !== 0; + var use_import_node = (flags2 & TEMPLATE_USE_IMPORT_NODE) !== 0; + var node; + var has_start = !content.startsWith(""); + return () => { + if (hydrating) { + assign_nodes(hydrate_node, null); + return hydrate_node; + } + if (node === void 0) { + node = create_fragment_from_html(has_start ? content : "" + content); + if (!is_fragment) node = /** @type {TemplateNode} */ + /* @__PURE__ */ get_first_child(node); + } + var clone = ( + /** @type {TemplateNode} */ + use_import_node || is_firefox ? document.importNode(node, true) : node.cloneNode(true) + ); + if (is_fragment) { + var start = ( + /** @type {TemplateNode} */ + /* @__PURE__ */ get_first_child(clone) + ); + var end = ( + /** @type {TemplateNode} */ + clone.lastChild + ); + assign_nodes(start, end); + } else { + assign_nodes(clone, clone); + } + return clone; + }; + } + // @__NO_SIDE_EFFECTS__ + function from_namespace(content, flags2, ns = "svg") { + var has_start = !content.startsWith(""); + var wrapped = `<${ns}>${has_start ? content : "" + content}`; + var node; + return () => { + if (hydrating) { + assign_nodes(hydrate_node, null); + return hydrate_node; + } + if (!node) { + var fragment = ( + /** @type {DocumentFragment} */ + create_fragment_from_html(wrapped) + ); + var root2 = ( + /** @type {Element} */ + /* @__PURE__ */ get_first_child(fragment) + ); + { + node = /** @type {Element} */ + /* @__PURE__ */ get_first_child(root2); + } + } + var clone = ( + /** @type {TemplateNode} */ + node.cloneNode(true) + ); + { + assign_nodes(clone, clone); + } + return clone; + }; + } + // @__NO_SIDE_EFFECTS__ + function from_svg(content, flags2) { + return /* @__PURE__ */ from_namespace(content, flags2, "svg"); + } + function text(value = "") { + if (!hydrating) { + var t = create_text(value + ""); + assign_nodes(t, t); + return t; + } + var node = hydrate_node; + if (node.nodeType !== TEXT_NODE) { + node.before(node = create_text()); + set_hydrate_node(node); + } else { + merge_text_nodes( + /** @type {Text} */ + node + ); + } + assign_nodes(node, node); + return node; + } + function comment() { + if (hydrating) { + assign_nodes(hydrate_node, null); + return hydrate_node; + } + var frag = document.createDocumentFragment(); + var start = document.createComment(""); + var anchor = create_text(); + frag.append(start, anchor); + assign_nodes(start, anchor); + return frag; + } + function append(anchor, dom) { + if (hydrating) { + var effect2 = ( + /** @type {Effect & { nodes: EffectNodes }} */ + active_effect + ); + if ((effect2.f & REACTION_RAN) === 0 || effect2.nodes.end === null) { + effect2.nodes.end = hydrate_node; + } + hydrate_next(); + return; + } + if (anchor === null) { + return; + } + anchor.before( + /** @type {Node} */ + dom + ); + } + function is_capture_event(name) { + return name.endsWith("capture") && name !== "gotpointercapture" && name !== "lostpointercapture"; + } + const DELEGATED_EVENTS = [ + "beforeinput", + "click", + "change", + "dblclick", + "contextmenu", + "focusin", + "focusout", + "input", + "keydown", + "keyup", + "mousedown", + "mousemove", + "mouseout", + "mouseover", + "mouseup", + "pointerdown", + "pointermove", + "pointerout", + "pointerover", + "pointerup", + "touchend", + "touchmove", + "touchstart" + ]; + function can_delegate_event(event_name) { + return DELEGATED_EVENTS.includes(event_name); + } + const ATTRIBUTE_ALIASES = { + // no `class: 'className'` because we handle that separately + formnovalidate: "formNoValidate", + ismap: "isMap", + nomodule: "noModule", + playsinline: "playsInline", + readonly: "readOnly", + defaultvalue: "defaultValue", + defaultchecked: "defaultChecked", + srcobject: "srcObject", + novalidate: "noValidate", + allowfullscreen: "allowFullscreen", + disablepictureinpicture: "disablePictureInPicture", + disableremoteplayback: "disableRemotePlayback" + }; + function normalize_attribute(name) { + name = name.toLowerCase(); + return ATTRIBUTE_ALIASES[name] ?? name; + } + const PASSIVE_EVENTS = ["touchstart", "touchmove"]; + function is_passive_event(name) { + return PASSIVE_EVENTS.includes(name); + } + function set_text(text2, value) { + var str = value == null ? "" : typeof value === "object" ? `${value}` : value; + if (str !== /** @type {any} */ + (text2[TEXT_CACHE] ??= text2.nodeValue)) { + text2[TEXT_CACHE] = str; + text2.nodeValue = `${str}`; + } + } + function mount(component2, options) { + return _mount(component2, options); + } + function hydrate(component2, options) { + init_operations(); + options.intro = options.intro ?? false; + const target = options.target; + const was_hydrating = hydrating; + const previous_hydrate_node = hydrate_node; + try { + var anchor = /* @__PURE__ */ get_first_child(target); + while (anchor && (anchor.nodeType !== COMMENT_NODE || /** @type {Comment} */ + anchor.data !== HYDRATION_START)) { + anchor = /* @__PURE__ */ get_next_sibling(anchor); + } + if (!anchor) { + throw HYDRATION_ERROR; + } + set_hydrating(true); + set_hydrate_node( + /** @type {Comment} */ + anchor + ); + const instance = _mount(component2, { ...options, anchor }); + set_hydrating(false); + return ( + /** @type {Exports} */ + instance + ); + } catch (error) { + if (error instanceof Error && error.message.split("\n").some((line) => line.startsWith("https://svelte.dev/e/"))) { + throw error; + } + if (error !== HYDRATION_ERROR) { + console.warn("Failed to hydrate: ", error); + } + if (options.recover === false) { + hydration_failed(); + } + init_operations(); + clear_text_content(target); + set_hydrating(false); + return mount(component2, options); + } finally { + set_hydrating(was_hydrating); + set_hydrate_node(previous_hydrate_node); + } + } + const listeners = /* @__PURE__ */ new Map(); + function _mount(Component, { target, anchor, props = {}, events, context, intro = true, transformError }) { + init_operations(); + var component2 = void 0; + var unmount2 = component_root(() => { + var anchor_node = anchor ?? target.appendChild(create_text()); + boundary( + /** @type {TemplateNode} */ + anchor_node, + { + pending: () => { + } + }, + (anchor_node2) => { + push({}); + var ctx = ( + /** @type {ComponentContext} */ + component_context + ); + if (context) ctx.c = context; + if (events) { + props.$$events = events; + } + if (hydrating) { + assign_nodes( + /** @type {TemplateNode} */ + anchor_node2, + null + ); + } + component2 = Component(anchor_node2, props) || {}; + if (hydrating) { + active_effect.nodes.end = hydrate_node; + if (hydrate_node === null || hydrate_node.nodeType !== COMMENT_NODE || /** @type {Comment} */ + hydrate_node.data !== HYDRATION_END) { + hydration_mismatch(); + throw HYDRATION_ERROR; + } + } + pop(); + }, + transformError + ); + var registered_events = /* @__PURE__ */ new Set(); + var event_handle = (events2) => { + for (var i = 0; i < events2.length; i++) { + var event_name = events2[i]; + if (registered_events.has(event_name)) continue; + registered_events.add(event_name); + var passive = is_passive_event(event_name); + for (const node of [target, document]) { + var counts = listeners.get(node); + if (counts === void 0) { + counts = /* @__PURE__ */ new Map(); + listeners.set(node, counts); + } + var count = counts.get(event_name); + if (count === void 0) { + node.addEventListener(event_name, handle_event_propagation, { passive }); + counts.set(event_name, 1); + } else { + counts.set(event_name, count + 1); + } + } + } + }; + event_handle(array_from(all_registered_events)); + root_event_handles.add(event_handle); + return () => { + for (var event_name of registered_events) { + for (const node of [target, document]) { + var counts = ( + /** @type {Map} */ + listeners.get(node) + ); + var count = ( + /** @type {number} */ + counts.get(event_name) + ); + if (--count == 0) { + node.removeEventListener(event_name, handle_event_propagation); + counts.delete(event_name); + if (counts.size === 0) { + listeners.delete(node); + } + } else { + counts.set(event_name, count); + } + } + } + root_event_handles.delete(event_handle); + if (anchor_node !== anchor) { + anchor_node.parentNode?.removeChild(anchor_node); + } + }; + }); + mounted_components.set(component2, unmount2); + return component2; + } + let mounted_components = /* @__PURE__ */ new WeakMap(); + function unmount(component2, options) { + const fn = mounted_components.get(component2); + if (fn) { + mounted_components.delete(component2); + return fn(options); + } + return Promise.resolve(); + } + class BranchManager { + /** @type {TemplateNode} */ + anchor; + /** @type {Map} */ + #batches = /* @__PURE__ */ new Map(); + /** + * Map of keys to effects that are currently rendered in the DOM. + * These effects are visible and actively part of the document tree. + * Example: + * ``` + * {#if condition} + * foo + * {:else} + * bar + * {/if} + * ``` + * Can result in the entries `true->Effect` and `false->Effect` + * @type {Map} + */ + #onscreen = /* @__PURE__ */ new Map(); + /** + * Similar to #onscreen with respect to the keys, but contains branches that are not yet + * in the DOM, because their insertion is deferred. + * @type {Map} + */ + #offscreen = /* @__PURE__ */ new Map(); + /** + * Keys of effects that are currently outroing + * @type {Set} + */ + #outroing = /* @__PURE__ */ new Set(); + /** + * Whether to pause (i.e. outro) on change, or destroy immediately. + * This is necessary for `` + */ + #transition = true; + /** + * @param {TemplateNode} anchor + * @param {boolean} transition + */ + constructor(anchor, transition = true) { + this.anchor = anchor; + this.#transition = transition; + } + /** + * @param {Batch} batch + */ + #commit = (batch) => { + if (!this.#batches.has(batch)) return; + var key2 = ( + /** @type {Key} */ + this.#batches.get(batch) + ); + var onscreen = this.#onscreen.get(key2); + if (onscreen) { + resume_effect(onscreen); + this.#outroing.delete(key2); + } else { + var offscreen = this.#offscreen.get(key2); + if (offscreen) { + this.#onscreen.set(key2, offscreen.effect); + this.#offscreen.delete(key2); + offscreen.fragment.lastChild.remove(); + this.anchor.before(offscreen.fragment); + onscreen = offscreen.effect; + } + } + for (const [b, k] of this.#batches) { + this.#batches.delete(b); + if (b === batch) { + break; + } + const offscreen2 = this.#offscreen.get(k); + if (offscreen2) { + destroy_effect(offscreen2.effect); + this.#offscreen.delete(k); + } + } + for (const [k, effect2] of this.#onscreen) { + if (k === key2 || this.#outroing.has(k)) continue; + const on_destroy = () => { + const keys = Array.from(this.#batches.values()); + if (keys.includes(k)) { + var fragment = document.createDocumentFragment(); + move_effect(effect2, fragment); + fragment.append(create_text()); + this.#offscreen.set(k, { effect: effect2, fragment }); + } else { + destroy_effect(effect2); + } + this.#outroing.delete(k); + this.#onscreen.delete(k); + }; + if (this.#transition || !onscreen) { + this.#outroing.add(k); + pause_effect(effect2, on_destroy, false); + } else { + on_destroy(); + } + } + }; + /** + * @param {Batch} batch + */ + #discard = (batch) => { + this.#batches.delete(batch); + const keys = Array.from(this.#batches.values()); + for (const [k, branch2] of this.#offscreen) { + if (!keys.includes(k)) { + destroy_effect(branch2.effect); + this.#offscreen.delete(k); + } + } + }; + /** + * + * @param {any} key + * @param {null | ((target: TemplateNode) => void)} fn + */ + ensure(key2, fn) { + var batch = ( + /** @type {Batch} */ + current_batch + ); + var defer = should_defer_append(); + if (fn && !this.#onscreen.has(key2) && !this.#offscreen.has(key2)) { + if (defer) { + var fragment = document.createDocumentFragment(); + var target = create_text(); + fragment.append(target); + this.#offscreen.set(key2, { + effect: branch(() => fn(target)), + fragment + }); + } else { + this.#onscreen.set( + key2, + branch(() => fn(this.anchor)) + ); + } + } + this.#batches.set(batch, key2); + if (defer) { + for (const [k, effect2] of this.#onscreen) { + if (k === key2) { + batch.unskip_effect(effect2); + } else { + batch.skip_effect(effect2); + } + } + for (const [k, branch2] of this.#offscreen) { + if (k === key2) { + batch.unskip_effect(branch2.effect); + } else { + batch.skip_effect(branch2.effect); + } + } + batch.oncommit(this.#commit); + batch.ondiscard(this.#discard); + } else { + if (hydrating) { + this.anchor = hydrate_node; + } + this.#commit(batch); + } + } + } + function snippet(node, get_snippet, ...args) { + var branches = new BranchManager(node); + block(() => { + const snippet2 = get_snippet() ?? null; + branches.ensure(snippet2, snippet2 && ((anchor) => snippet2(anchor, ...args))); + }, EFFECT_TRANSPARENT); + } + function onMount(fn) { + if (component_context === null) { + lifecycle_outside_component(); + } + { + user_effect(() => { + const cleanup = untrack(fn); + if (typeof cleanup === "function") return ( + /** @type {() => void} */ + cleanup + ); + }); + } + } + function if_block(node, fn, elseif = false) { + var marker; + if (hydrating) { + marker = hydrate_node; + hydrate_next(); + } + var branches = new BranchManager(node); + var flags2 = elseif ? EFFECT_TRANSPARENT : 0; + function update_branch(key2, fn2) { + if (hydrating) { + var data = read_hydration_instruction( + /** @type {TemplateNode} */ + marker + ); + if (key2 !== parseInt(data.substring(1))) { + var anchor = skip_nodes(); + set_hydrate_node(anchor); + branches.anchor = anchor; + set_hydrating(false); + branches.ensure(key2, fn2); + set_hydrating(true); + return; + } + } + branches.ensure(key2, fn2); + } + block(() => { + var has_branch = false; + fn((fn2, key2 = 0) => { + has_branch = true; + update_branch(key2, fn2); + }); + if (!has_branch) { + update_branch(-1, null); + } + }, flags2); + } + const NAN = /* @__PURE__ */ Symbol("NaN"); + function key(node, get_key, render_fn) { + if (hydrating) { + hydrate_next(); + } + var branches = new BranchManager(node); + block(() => { + var key2 = get_key(); + if (key2 !== key2) { + key2 = /** @type {any} */ + NAN; + } + branches.ensure(key2, render_fn); + }); + } + function html(node, get_value, is_controlled = false, svg = false, mathml = false, skip_warning = false) { + var anchor = node; + var value = ""; + if (is_controlled) { + var parent_node = ( + /** @type {Element} */ + node + ); + if (hydrating) { + anchor = set_hydrate_node(/* @__PURE__ */ get_first_child(parent_node)); + } + } + template_effect(() => { + var effect2 = ( + /** @type {Effect} */ + active_effect + ); + if (value === (value = get_value() ?? "")) { + if (hydrating) hydrate_next(); + return; + } + if (is_controlled && !hydrating) { + effect2.nodes = null; + parent_node.innerHTML = /** @type {string} */ + value; + if (value !== "") { + assign_nodes( + /** @type {TemplateNode} */ + /* @__PURE__ */ get_first_child(parent_node), + /** @type {TemplateNode} */ + parent_node.lastChild + ); + } + return; + } + if (effect2.nodes !== null) { + remove_effect_dom( + effect2.nodes.start, + /** @type {TemplateNode} */ + effect2.nodes.end + ); + effect2.nodes = null; + } + if (value === "") return; + if (hydrating) { + hydrate_node.data; + var next2 = hydrate_next(); + var last = next2; + while (next2 !== null && (next2.nodeType !== COMMENT_NODE || /** @type {Comment} */ + next2.data !== "")) { + last = next2; + next2 = /* @__PURE__ */ get_next_sibling(next2); + } + if (next2 === null) { + hydration_mismatch(); + throw HYDRATION_ERROR; + } + assign_nodes(hydrate_node, last); + anchor = set_hydrate_node(next2); + return; + } + var ns = svg ? NAMESPACE_SVG : mathml ? NAMESPACE_MATHML : void 0; + var wrapper = ( + /** @type {HTMLTemplateElement | SVGElement | MathMLElement} */ + create_element(svg ? "svg" : mathml ? "math" : "template", ns) + ); + wrapper.innerHTML = /** @type {any} */ + value; + var node2 = svg || mathml ? wrapper : ( + /** @type {HTMLTemplateElement} */ + wrapper.content + ); + assign_nodes( + /** @type {TemplateNode} */ + /* @__PURE__ */ get_first_child(node2), + /** @type {TemplateNode} */ + node2.lastChild + ); + if (svg || mathml) { + while (/* @__PURE__ */ get_first_child(node2)) { + anchor.before( + /** @type {TemplateNode} */ + /* @__PURE__ */ get_first_child(node2) + ); + } + } else { + anchor.before(node2); + } + }); + } + function component(node, get_component, render_fn) { + var hydration_start_node; + if (hydrating) { + hydration_start_node = hydrate_node; + hydrate_next(); + } + var branches = new BranchManager(node); + block(() => { + var component2 = get_component() ?? null; + if (hydrating) { + var data = read_hydration_instruction( + /** @type {TemplateNode} */ + hydration_start_node + ); + var server_had_component = data === HYDRATION_START; + var client_has_component = component2 !== null; + if (server_had_component !== client_has_component) { + var anchor = skip_nodes(); + set_hydrate_node(anchor); + branches.anchor = anchor; + set_hydrating(false); + branches.ensure(component2, component2 && ((target) => render_fn(target, component2))); + set_hydrating(true); + return; + } + } + branches.ensure(component2, component2 && ((target) => render_fn(target, component2))); + }, EFFECT_TRANSPARENT); + } + function attach(node, get_fn) { + var fn = void 0; + var e; + managed(() => { + if (fn !== (fn = get_fn())) { + if (e) { + destroy_effect(e); + e = null; + } + if (fn) { + e = branch(() => { + effect(() => ( + /** @type {(node: Element) => void} */ + fn(node) + )); + }); + } + } + }); + } + function r(e) { + var t, f, n = ""; + if ("string" == typeof e || "number" == typeof e) n += e; + else if ("object" == typeof e) if (Array.isArray(e)) { + var o = e.length; + for (t = 0; t < o; t++) e[t] && (f = r(e[t])) && (n && (n += " "), n += f); + } else for (f in e) e[f] && (n && (n += " "), n += f); + return n; + } + function clsx$1() { + for (var e, t, f = 0, n = "", o = arguments.length; f < o; f++) (e = arguments[f]) && (t = r(e)) && (n && (n += " "), n += t); + return n; + } + function clsx(value) { + if (typeof value === "object") { + return clsx$1(value); + } else { + return value ?? ""; + } + } + const whitespace = [..." \n\r\f \v\uFEFF"]; + function to_class(value, hash, directives) { + var classname = value == null ? "" : "" + value; + if (directives) { + for (var key2 of Object.keys(directives)) { + if (directives[key2]) { + classname = classname ? classname + " " + key2 : key2; + } else if (classname.length) { + var len = key2.length; + var a = 0; + while ((a = classname.indexOf(key2, a)) >= 0) { + var b = a + len; + if ((a === 0 || whitespace.includes(classname[a - 1])) && (b === classname.length || whitespace.includes(classname[b]))) { + classname = (a === 0 ? "" : classname.substring(0, a)) + classname.substring(b + 1); + } else { + a = b; + } + } + } + } + } + return classname === "" ? null : classname; + } + function append_styles(styles, important = false) { + var separator = important ? " !important;" : ";"; + var css2 = ""; + for (var key2 of Object.keys(styles)) { + var value = styles[key2]; + if (value != null && value !== "") { + css2 += " " + key2 + ": " + value + separator; + } + } + return css2; + } + function to_css_name(name) { + if (name[0] !== "-" || name[1] !== "-") { + return name.toLowerCase(); + } + return name; + } + function to_style(value, styles) { + if (styles) { + var new_style = ""; + var normal_styles; + var important_styles; + if (Array.isArray(styles)) { + normal_styles = styles[0]; + important_styles = styles[1]; + } else { + normal_styles = styles; + } + if (value) { + value = String(value).replaceAll(/\s*\/\*.*?\*\/\s*/g, "").trim(); + var in_str = false; + var in_apo = 0; + var in_comment = false; + var reserved_names = []; + if (normal_styles) { + reserved_names.push(...Object.keys(normal_styles).map(to_css_name)); + } + if (important_styles) { + reserved_names.push(...Object.keys(important_styles).map(to_css_name)); + } + var start_index = 0; + var name_index = -1; + const len = value.length; + for (var i = 0; i < len; i++) { + var c = value[i]; + if (in_comment) { + if (c === "/" && value[i - 1] === "*") { + in_comment = false; + } + } else if (in_str) { + if (in_str === c) { + in_str = false; + } + } else if (c === "/" && value[i + 1] === "*") { + in_comment = true; + } else if (c === '"' || c === "'") { + in_str = c; + } else if (c === "(") { + in_apo++; + } else if (c === ")") { + in_apo--; + } + if (!in_comment && in_str === false && in_apo === 0) { + if (c === ":" && name_index === -1) { + name_index = i; + } else if (c === ";" || i === len - 1) { + if (name_index !== -1) { + var name = to_css_name(value.substring(start_index, name_index).trim()); + if (!reserved_names.includes(name)) { + if (c !== ";") { + i++; + } + var property = value.substring(start_index, i).trim(); + new_style += " " + property + ";"; + } + } + start_index = i + 1; + name_index = -1; + } + } + } + } + if (normal_styles) { + new_style += append_styles(normal_styles); + } + if (important_styles) { + new_style += append_styles(important_styles, true); + } + new_style = new_style.trim(); + return new_style === "" ? null : new_style; + } + return value == null ? null : String(value); + } + function set_class(dom, is_html, value, hash, prev_classes, next_classes) { + var prev = ( + /** @type {any} */ + dom[CLASS_CACHE] + ); + if (hydrating || prev !== value || prev === void 0) { + var next_class_name = to_class(value, hash, next_classes); + if (!hydrating || next_class_name !== dom.getAttribute("class")) { + if (next_class_name == null) { + dom.removeAttribute("class"); + } else if (is_html) { + dom.className = next_class_name; + } else { + dom.setAttribute("class", next_class_name); + } + } + dom[CLASS_CACHE] = value; + } else if (next_classes && prev_classes !== next_classes) { + for (var key2 in next_classes) { + var is_present = !!next_classes[key2]; + if (prev_classes == null || is_present !== !!prev_classes[key2]) { + dom.classList.toggle(key2, is_present); + } + } + } + return next_classes; + } + function update_styles(dom, prev = {}, next2, priority) { + for (var key2 in next2) { + var value = next2[key2]; + if (prev[key2] !== value) { + if (next2[key2] == null) { + dom.style.removeProperty(key2); + } else { + dom.style.setProperty(key2, value, priority); + } + } + } + } + function set_style(dom, value, prev_styles, next_styles) { + var prev = ( + /** @type {any} */ + dom[STYLE_CACHE] + ); + if (hydrating || prev !== value) { + var next_style_attr = to_style(value, next_styles); + if (!hydrating || next_style_attr !== dom.getAttribute("style")) { + if (next_style_attr == null) { + dom.removeAttribute("style"); + } else { + dom.style.cssText = next_style_attr; + } + } + dom[STYLE_CACHE] = value; + } else if (next_styles) { + if (Array.isArray(next_styles)) { + update_styles(dom, prev_styles?.[0], next_styles[0]); + update_styles(dom, prev_styles?.[1], next_styles[1], "important"); + } else { + update_styles(dom, prev_styles, next_styles); + } + } + return next_styles; + } + function select_option(select, value, mounting = false) { + if (select.multiple) { + if (value == void 0) { + return; + } + if (!is_array(value)) { + return select_multiple_invalid_value(); + } + for (var option of select.options) { + option.selected = value.includes(get_option_value(option)); + } + return; + } + for (option of select.options) { + var option_value = get_option_value(option); + if (is(option_value, value)) { + option.selected = true; + return; + } + } + if (!mounting || value !== void 0) { + select.selectedIndex = -1; + } + } + function init_select(select) { + var observer = new MutationObserver(() => { + select_option(select, select.__value); + }); + observer.observe(select, { + // Listen to option element changes + childList: true, + subtree: true, + // because of + // Listen to option element value attribute changes + // (doesn't get notified of select value changes, + // because that property is not reflected as an attribute) + attributes: true, + attributeFilter: ["value"] + }); + teardown(() => { + observer.disconnect(); + }); + } + function get_option_value(option) { + if ("__value" in option) { + return option.__value; + } else { + return option.value; + } + } + const CLASS = /* @__PURE__ */ Symbol("class"); + const STYLE = /* @__PURE__ */ Symbol("style"); + const IS_CUSTOM_ELEMENT = /* @__PURE__ */ Symbol("is custom element"); + const IS_HTML = /* @__PURE__ */ Symbol("is html"); + const LINK_TAG = IS_XHTML ? "link" : "LINK"; + const INPUT_TAG = IS_XHTML ? "input" : "INPUT"; + const OPTION_TAG = IS_XHTML ? "option" : "OPTION"; + const SELECT_TAG = IS_XHTML ? "select" : "SELECT"; + const PROGRESS_TAG = IS_XHTML ? "progress" : "PROGRESS"; + function remove_input_defaults(input) { + if (!hydrating) return; + var already_removed = false; + var remove_defaults = () => { + if (already_removed) return; + already_removed = true; + if (input.hasAttribute("value")) { + var value = input.value; + set_attribute(input, "value", null); + input.value = value; + } + if (input.hasAttribute("checked")) { + var checked = input.checked; + set_attribute(input, "checked", null); + input.checked = checked; + } + }; + input[FORM_RESET_HANDLER] = remove_defaults; + queue_micro_task(remove_defaults); + add_form_reset_listener(); + } + function set_value(element, value) { + var attributes = get_attributes(element); + if (attributes.value === (attributes.value = // treat null and undefined the same for the initial value + value ?? void 0) || // @ts-expect-error + // `progress` elements always need their value set when it's `0` + element.value === value && (value !== 0 || element.nodeName !== PROGRESS_TAG)) { + return; + } + element.value = value ?? ""; + } + function set_selected(element, selected) { + if (selected) { + if (!element.hasAttribute("selected")) { + element.setAttribute("selected", ""); + } + } else { + element.removeAttribute("selected"); + } + } + function set_attribute(element, attribute, value, skip_warning) { + var attributes = get_attributes(element); + if (hydrating) { + attributes[attribute] = element.getAttribute(attribute); + if (attribute === "src" || attribute === "srcset" || attribute === "href" && element.nodeName === LINK_TAG) { + return; + } + } + if (attributes[attribute] === (attributes[attribute] = value)) return; + if (attribute === "loading") { + element[LOADING_ATTR_SYMBOL] = value; + } + if (value == null) { + element.removeAttribute(attribute); + } else if (typeof value !== "string" && get_setters(element).includes(attribute)) { + element[attribute] = value; + } else { + element.setAttribute(attribute, value); + } + } + function set_attributes(element, prev, next2, css_hash, should_remove_defaults = false, skip_warning = false) { + if (hydrating && should_remove_defaults && element.nodeName === INPUT_TAG) { + var input = ( + /** @type {HTMLInputElement} */ + element + ); + var attribute = input.type === "checkbox" ? "defaultChecked" : "defaultValue"; + if (!(attribute in next2)) { + remove_input_defaults(input); + } + } + var attributes = get_attributes(element); + var is_custom_element = attributes[IS_CUSTOM_ELEMENT]; + var preserve_attribute_case = !attributes[IS_HTML]; + let is_hydrating_custom_element = hydrating && is_custom_element; + if (is_hydrating_custom_element) { + set_hydrating(false); + } + var current = prev || {}; + var is_option_element = element.nodeName === OPTION_TAG; + for (var key2 in prev) { + if (!(key2 in next2)) { + next2[key2] = null; + } + } + if (next2.class) { + next2.class = clsx(next2.class); + } else if (next2[CLASS]) { + next2.class = null; + } + if (next2[STYLE]) { + next2.style ??= null; + } + var setters = get_setters(element); + for (const key3 in next2) { + let value = next2[key3]; + if (is_option_element && key3 === "value" && value == null) { + element.value = element.__value = ""; + current[key3] = value; + continue; + } + if (key3 === "class") { + var is_html = element.namespaceURI === "http://www.w3.org/1999/xhtml"; + set_class(element, is_html, value, css_hash, prev?.[CLASS], next2[CLASS]); + current[key3] = value; + current[CLASS] = next2[CLASS]; + continue; + } + if (key3 === "style") { + set_style(element, value, prev?.[STYLE], next2[STYLE]); + current[key3] = value; + current[STYLE] = next2[STYLE]; + continue; + } + var prev_value = current[key3]; + if (value === prev_value && !(value === void 0 && element.hasAttribute(key3))) { + continue; + } + current[key3] = value; + var prefix = key3[0] + key3[1]; + if (prefix === "$$") continue; + if (prefix === "on") { + const opts = {}; + const event_handle_key = "$$" + key3; + let event_name = key3.slice(2); + var is_delegated = can_delegate_event(event_name); + if (is_capture_event(event_name)) { + event_name = event_name.slice(0, -7); + opts.capture = true; + } + if (!is_delegated && prev_value) { + if (value != null) continue; + element.removeEventListener(event_name, current[event_handle_key], opts); + current[event_handle_key] = null; + } + if (is_delegated) { + delegated(event_name, element, value); + delegate([event_name]); + } else if (value != null) { + let handle = function(evt) { + current[key3].call(this, evt); + }; + current[event_handle_key] = create_event(event_name, element, handle, opts); + } + } else if (key3 === "style") { + set_attribute(element, key3, value); + } else if (key3 === "autofocus") { + autofocus( + /** @type {HTMLElement} */ + element, + Boolean(value) + ); + } else if (!is_custom_element && (key3 === "__value" || key3 === "value" && value != null)) { + element.value = element.__value = value; + } else if (key3 === "selected" && is_option_element) { + set_selected( + /** @type {HTMLOptionElement} */ + element, + value + ); + } else { + var name = key3; + if (!preserve_attribute_case) { + name = normalize_attribute(name); + } + var is_default = name === "defaultValue" || name === "defaultChecked"; + if (value == null && !is_custom_element && !is_default) { + attributes[key3] = null; + if (name === "value" || name === "checked") { + let input2 = ( + /** @type {HTMLInputElement} */ + element + ); + const use_default = prev === void 0; + if (name === "value") { + let previous = input2.defaultValue; + input2.removeAttribute(name); + input2.defaultValue = previous; + input2.value = input2.__value = use_default ? previous : null; + } else { + let previous = input2.defaultChecked; + input2.removeAttribute(name); + input2.defaultChecked = previous; + input2.checked = use_default ? previous : false; + } + } else { + element.removeAttribute(key3); + } + } else if (is_default || setters.includes(name) && (is_custom_element || typeof value !== "string")) { + element[name] = value; + if (name in attributes) attributes[name] = UNINITIALIZED; + } else if (typeof value !== "function") { + set_attribute(element, name, value); + } + } + } + if (is_hydrating_custom_element) { + set_hydrating(true); + } + return current; + } + function attribute_effect(element, fn, sync = [], async = [], blockers = [], css_hash, should_remove_defaults = false, skip_warning = false) { + flatten(blockers, sync, async, (values) => { + var prev = void 0; + var effects = {}; + var is_select = element.nodeName === SELECT_TAG; + var inited = false; + managed(() => { + var next2 = fn(...values.map(get)); + var current = set_attributes( + element, + prev, + next2, + css_hash, + should_remove_defaults, + skip_warning + ); + if (inited && is_select && "value" in next2) { + select_option( + /** @type {HTMLSelectElement} */ + element, + next2.value + ); + } + for (let symbol of Object.getOwnPropertySymbols(effects)) { + if (!next2[symbol]) destroy_effect(effects[symbol]); + } + for (let symbol of Object.getOwnPropertySymbols(next2)) { + var n = next2[symbol]; + if (symbol.description === ATTACHMENT_KEY && (!prev || n !== prev[symbol])) { + if (effects[symbol]) destroy_effect(effects[symbol]); + effects[symbol] = branch(() => attach(element, () => n)); + } + current[symbol] = n; + } + prev = current; + }); + if (is_select) { + var select = ( + /** @type {HTMLSelectElement} */ + element + ); + effect(() => { + select_option( + select, + /** @type {Record} */ + prev.value, + true + ); + init_select(select); + }); + } + inited = true; + }); + } + function get_attributes(element) { + return ( + /** @type {Record} **/ + /** @type {any} */ + element[ATTRIBUTES_CACHE] ??= { + [IS_CUSTOM_ELEMENT]: element.nodeName.includes("-"), + [IS_HTML]: element.namespaceURI === NAMESPACE_HTML + } + ); + } + var setters_cache = /* @__PURE__ */ new Map(); + function get_setters(element) { + var cache_key = element.getAttribute("is") || element.nodeName; + var setters = setters_cache.get(cache_key); + if (setters) return setters; + setters_cache.set(cache_key, setters = []); + var descriptors; + var proto = element; + var element_proto = Element.prototype; + while (element_proto !== proto) { + descriptors = get_descriptors(proto); + for (var key2 in descriptors) { + if (descriptors[key2].set && // better safe than sorry, we don't want spread attributes to mess with HTML content + key2 !== "innerHTML" && key2 !== "textContent" && key2 !== "innerText") { + setters.push(key2); + } + } + proto = get_prototype_of(proto); + } + return setters; + } + function bind_value(input, get2, set2 = get2) { + var batches = /* @__PURE__ */ new WeakSet(); + listen_to_event_and_reset_event(input, "input", async (is_reset) => { + var value = is_reset ? input.defaultValue : input.value; + value = is_numberlike_input(input) ? to_number(value) : value; + set2(value); + if (current_batch !== null) { + batches.add(current_batch); + } + await tick(); + if (value !== (value = get2())) { + var start = input.selectionStart; + var end = input.selectionEnd; + var length = input.value.length; + input.value = value ?? ""; + if (end !== null) { + var new_length = input.value.length; + if (start === end && end === length && new_length > length) { + input.selectionStart = new_length; + input.selectionEnd = new_length; + } else { + input.selectionStart = start; + input.selectionEnd = Math.min(end, new_length); + } + } + } + }); + if ( + // If we are hydrating and the value has since changed, + // then use the updated value from the input instead. + hydrating && input.defaultValue !== input.value || // If defaultValue is set, then value == defaultValue + // TODO Svelte 6: remove input.value check and set to empty string? + untrack(get2) == null && input.value + ) { + set2(is_numberlike_input(input) ? to_number(input.value) : input.value); + if (current_batch !== null) { + batches.add(current_batch); + } + } + render_effect(() => { + var value = get2(); + if (input === document.activeElement) { + var batch = ( + /** @type {Batch} */ + current_batch + ); + if (batches.has(batch)) { + return; + } + } + if (is_numberlike_input(input) && value === to_number(input.value)) { + return; + } + if (input.type === "date" && !value && !input.value) { + return; + } + if (value !== input.value) { + input.value = value ?? ""; + } + }); + } + function is_numberlike_input(input) { + var type = input.type; + return type === "number" || type === "range"; + } + function to_number(value) { + return value === "" ? null : +value; + } + function is_bound_this(bound_value, element_or_component) { + return bound_value === element_or_component || bound_value?.[STATE_SYMBOL] === element_or_component; + } + function bind_this(element_or_component = {}, update, get_value, get_parts) { + var component_effect = ( + /** @type {ComponentContext} */ + component_context.r + ); + var parent = ( + /** @type {Effect} */ + active_effect + ); + effect(() => { + var old_parts; + var parts; + render_effect(() => { + old_parts = parts; + parts = []; + untrack(() => { + if (!is_bound_this(get_value(...parts), element_or_component)) { + update(element_or_component, ...parts); + if (old_parts && is_bound_this(get_value(...old_parts), element_or_component)) { + update(null, ...old_parts); + } + } + }); + }); + return () => { + let p = parent; + while (p !== component_effect && p.parent !== null && p.parent.f & DESTROYING) { + p = p.parent; + } + const teardown2 = () => { + if (parts && is_bound_this(get_value(...parts), element_or_component)) { + update(null, ...parts); + } + }; + const original_teardown = p.teardown; + p.teardown = () => { + teardown2(); + original_teardown?.(); + }; + }; + }); + return element_or_component; + } + const rest_props_handler = { + get(target, key2) { + if (target.exclude.includes(key2)) return; + return target.props[key2]; + }, + set(target, key2) { + return false; + }, + getOwnPropertyDescriptor(target, key2) { + if (target.exclude.includes(key2)) return; + if (key2 in target.props) { + return { + enumerable: true, + configurable: true, + value: target.props[key2] + }; + } + }, + has(target, key2) { + if (target.exclude.includes(key2)) return false; + return key2 in target.props; + }, + ownKeys(target) { + return Reflect.ownKeys(target.props).filter((key2) => !target.exclude.includes(key2)); + } + }; + // @__NO_SIDE_EFFECTS__ + function rest_props(props, exclude, name) { + return new Proxy( + { props, exclude }, + rest_props_handler + ); + } + function prop(props, key2, flags2, fallback) { + var fallback_value = ( + /** @type {V} */ + fallback + ); + var fallback_dirty = true; + var get_fallback = () => { + if (fallback_dirty) { + fallback_dirty = false; + fallback_value = /** @type {V} */ + fallback; + } + return fallback_value; + }; + var initial_value; + { + initial_value = /** @type {V} */ + props[key2]; + } + if (initial_value === void 0 && fallback !== void 0) { + initial_value = get_fallback(); + } + var getter; + { + getter = () => { + var value = ( + /** @type {V} */ + props[key2] + ); + if (value === void 0) return get_fallback(); + fallback_dirty = true; + return value; + }; + } + var overridden = false; + var d = /* @__PURE__ */ derived(() => { + overridden = false; + return getter(); + }); + var parent_effect = ( + /** @type {Effect} */ + active_effect + ); + return ( + /** @type {() => V} */ + (function(value, mutation) { + if (arguments.length > 0) { + const new_value = mutation ? get(d) : value; + set(d, new_value); + overridden = true; + if (fallback_value !== void 0) { + fallback_value = new_value; + } + return value; + } + if (is_destroying_effect && overridden || (parent_effect.f & DESTROYED) !== 0) { + return d.v; + } + return get(d); + }) + ); + } + function createClassComponent(options) { + return new Svelte4Component(options); + } + class Svelte4Component { + /** @type {any} */ + #events; + /** @type {Record} */ + #instance; + /** + * @param {ComponentConstructorOptions & { + * component: any; + * }} options + */ + constructor(options) { + var sources = /* @__PURE__ */ new Map(); + var add_source = (key2, value) => { + var s = /* @__PURE__ */ mutable_source(value, false, false); + sources.set(key2, s); + return s; + }; + const props = new Proxy( + { ...options.props || {}, $$events: {} }, + { + get(target, prop2) { + return get(sources.get(prop2) ?? add_source(prop2, Reflect.get(target, prop2))); + }, + has(target, prop2) { + if (prop2 === LEGACY_PROPS) return true; + get(sources.get(prop2) ?? add_source(prop2, Reflect.get(target, prop2))); + return Reflect.has(target, prop2); + }, + set(target, prop2, value) { + set(sources.get(prop2) ?? add_source(prop2, value), value); + return Reflect.set(target, prop2, value); + } + } + ); + this.#instance = (options.hydrate ? hydrate : mount)(options.component, { + target: options.target, + anchor: options.anchor, + props, + context: options.context, + intro: options.intro ?? false, + recover: options.recover, + transformError: options.transformError + }); + if (!options?.props?.$$host || options.sync === false) { + flushSync(); + } + this.#events = props.$$events; + for (const key2 of Object.keys(this.#instance)) { + if (key2 === "$set" || key2 === "$destroy" || key2 === "$on") continue; + define_property(this, key2, { + get() { + return this.#instance[key2]; + }, + /** @param {any} value */ + set(value) { + this.#instance[key2] = value; + }, + enumerable: true + }); + } + this.#instance.$set = /** @param {Record} next */ + (next2) => { + Object.assign(props, next2); + }; + this.#instance.$destroy = () => { + unmount(this.#instance); + }; + } + /** @param {Record} props */ + $set(props) { + this.#instance.$set(props); + } + /** + * @param {string} event + * @param {(...args: any[]) => any} callback + * @returns {any} + */ + $on(event2, callback) { + this.#events[event2] = this.#events[event2] || []; + const cb = (...args) => callback.call(this, ...args); + this.#events[event2].push(cb); + return () => { + this.#events[event2] = this.#events[event2].filter( + /** @param {any} fn */ + (fn) => fn !== cb + ); + }; + } + $destroy() { + this.#instance.$destroy(); + } + } + let SvelteElement = class { + }; + if (typeof HTMLElement === "function") { + SvelteElement = class extends HTMLElement { + /** The Svelte component constructor */ + $$ctor; + /** Slots */ + $$s; + /** @type {any} The Svelte component instance */ + $$c; + /** Whether or not the custom element is connected */ + $$cn = false; + /** @type {Record} Component props data */ + $$d = {}; + /** `true` if currently in the process of reflecting component props back to attributes */ + $$r = false; + /** @type {Record} Props definition (name, reflected, type etc) */ + $$p_d = {}; + /** @type {Record} Event listeners */ + $$l = {}; + /** @type {Map} Event listener unsubscribe functions */ + $$l_u = /* @__PURE__ */ new Map(); + /** @type {any} The managed render effect for reflecting attributes */ + $$me; + /** @type {ShadowRoot | null} The ShadowRoot of the custom element */ + $$shadowRoot = null; + /** + * @param {*} $$componentCtor + * @param {*} $$slots + * @param {ShadowRootInit | undefined} shadow_root_init + */ + constructor($$componentCtor, $$slots, shadow_root_init) { + super(); + this.$$ctor = $$componentCtor; + this.$$s = $$slots; + if (shadow_root_init) { + this.$$shadowRoot = this.attachShadow(shadow_root_init); + } + } + /** + * @param {string} type + * @param {EventListenerOrEventListenerObject} listener + * @param {boolean | AddEventListenerOptions} [options] + */ + addEventListener(type, listener, options) { + this.$$l[type] = this.$$l[type] || []; + this.$$l[type].push(listener); + if (this.$$c) { + const unsub = this.$$c.$on(type, listener); + this.$$l_u.set(listener, unsub); + } + super.addEventListener(type, listener, options); + } + /** + * @param {string} type + * @param {EventListenerOrEventListenerObject} listener + * @param {boolean | AddEventListenerOptions} [options] + */ + removeEventListener(type, listener, options) { + super.removeEventListener(type, listener, options); + if (this.$$c) { + const unsub = this.$$l_u.get(listener); + if (unsub) { + unsub(); + this.$$l_u.delete(listener); + } + } + } + async connectedCallback() { + this.$$cn = true; + if (!this.$$c) { + let create_slot = function(name) { + return (anchor) => { + const slot = create_element("slot"); + if (name !== "default") slot.name = name; + append(anchor, slot); + }; + }; + await Promise.resolve(); + if (!this.$$cn || this.$$c) { + return; + } + const $$slots = {}; + const existing_slots = get_custom_elements_slots(this); + for (const name of this.$$s) { + if (name in existing_slots) { + if (name === "default" && !this.$$d.children) { + this.$$d.children = create_slot(name); + $$slots.default = true; + } else { + $$slots[name] = create_slot(name); + } + } + } + for (const attribute of this.attributes) { + const name = this.$$g_p(attribute.name); + if (!(name in this.$$d)) { + this.$$d[name] = get_custom_element_value(name, attribute.value, this.$$p_d, "toProp"); + } + } + for (const key2 in this.$$p_d) { + if (!(key2 in this.$$d) && this[key2] !== void 0) { + this.$$d[key2] = this[key2]; + delete this[key2]; + } + } + this.$$c = createClassComponent({ + component: this.$$ctor, + target: this.$$shadowRoot || this, + props: { + ...this.$$d, + $$slots, + $$host: this + } + }); + this.$$me = effect_root(() => { + render_effect(() => { + this.$$r = true; + for (const key2 of object_keys(this.$$c)) { + if (!this.$$p_d[key2]?.reflect) continue; + this.$$d[key2] = this.$$c[key2]; + const attribute_value = get_custom_element_value( + key2, + this.$$d[key2], + this.$$p_d, + "toAttribute" + ); + if (attribute_value == null) { + this.removeAttribute(this.$$p_d[key2].attribute || key2); + } else { + this.setAttribute(this.$$p_d[key2].attribute || key2, attribute_value); + } + } + this.$$r = false; + }); + }); + for (const type in this.$$l) { + for (const listener of this.$$l[type]) { + const unsub = this.$$c.$on(type, listener); + this.$$l_u.set(listener, unsub); + } + } + this.$$l = {}; + } + } + // We don't need this when working within Svelte code, but for compatibility of people using this outside of Svelte + // and setting attributes through setAttribute etc, this is helpful + /** + * @param {string} attr + * @param {string} _oldValue + * @param {string} newValue + */ + attributeChangedCallback(attr, _oldValue, newValue) { + if (this.$$r) return; + attr = this.$$g_p(attr); + this.$$d[attr] = get_custom_element_value(attr, newValue, this.$$p_d, "toProp"); + this.$$c?.$set({ [attr]: this.$$d[attr] }); + } + disconnectedCallback() { + this.$$cn = false; + Promise.resolve().then(() => { + if (!this.$$cn && this.$$c) { + this.$$c.$destroy(); + this.$$me(); + this.$$c = void 0; + } + }); + } + /** + * @param {string} attribute_name + */ + $$g_p(attribute_name) { + return object_keys(this.$$p_d).find( + (key2) => this.$$p_d[key2].attribute === attribute_name || !this.$$p_d[key2].attribute && key2.toLowerCase() === attribute_name + ) || attribute_name; + } + }; + } + function get_custom_element_value(prop2, value, props_definition, transform) { + const type = props_definition[prop2]?.type; + value = type === "Boolean" && typeof value !== "boolean" ? value != null : value; + if (!transform || !props_definition[prop2]) { + return value; + } else if (transform === "toAttribute") { + switch (type) { + case "Object": + case "Array": + return value == null ? null : JSON.stringify(value); + case "Boolean": + return value ? "" : null; + case "Number": + return value == null ? null : value; + default: + return value; + } + } else { + switch (type) { + case "Object": + case "Array": + return value && JSON.parse(value); + case "Boolean": + return value; + // conversion already handled above + case "Number": + return value != null ? +value : value; + default: + return value; + } + } + } + function get_custom_elements_slots(element) { + const result = {}; + element.childNodes.forEach((node) => { + result[ + /** @type {Element} node */ + node.slot || "default" + ] = true; + }); + return result; + } + function create_custom_element(Component, props_definition, slots, exports$1, shadow_root_init, extend) { + let Class = class extends SvelteElement { + constructor() { + super(Component, slots, shadow_root_init); + this.$$p_d = props_definition; + } + static get observedAttributes() { + return object_keys(props_definition).map( + (key2) => (props_definition[key2].attribute || key2).toLowerCase() + ); + } + }; + object_keys(props_definition).forEach((prop2) => { + define_property(Class.prototype, prop2, { + get() { + return this.$$c && prop2 in this.$$c ? this.$$c[prop2] : this.$$d[prop2]; + }, + set(value) { + value = get_custom_element_value(prop2, value, props_definition); + this.$$d[prop2] = value; + var component2 = this.$$c; + if (component2) { + var setter = get_descriptor(component2, prop2)?.get; + if (setter) { + component2[prop2] = value; + } else { + component2.$set({ [prop2]: value }); + } + } + } + }); + }); + exports$1.forEach((property) => { + define_property(Class.prototype, property, { + get() { + return this.$$c?.[property]; + } + }); + }); + Component.element = /** @type {any} */ + Class; + return Class; + } + var root$7 = /* @__PURE__ */ from_html(`
`); + function Checkbox($$anchor, $$props) { + push($$props, true); + let loading = prop($$props, "loading"), rest = /* @__PURE__ */ rest_props($$props, ["$$slots", "$$events", "$$legacy", "$$host", "loading"]); + let inputEl; + function onClick() { + inputEl?.click(); + } + var $$exports = { + get loading() { + return loading(); + }, + set loading($$value) { + loading($$value); + flushSync(); + } + }; + var div = root$7(); + var input = child(div); + attribute_effect(input, () => ({ type: "checkbox", ...rest }), void 0, void 0, void 0, void 0, true); + bind_this(input, ($$value) => inputEl = $$value, () => inputEl); + var svg = sibling(input, 2); + next(2); + reset(div); + template_effect(() => set_attribute(div, "data-loading", loading())); + delegated("click", svg, onClick); + append($$anchor, div); + return pop($$exports); + } + delegate(["click"]); + create_custom_element(Checkbox, { loading: {} }, [], [], { mode: "open" }); + var root$6 = /* @__PURE__ */ from_html(`
`); + function CheckboxNative($$anchor, $$props) { + push($$props, true); + let loading = prop($$props, "loading"), rest = /* @__PURE__ */ rest_props($$props, ["$$slots", "$$events", "$$legacy", "$$host", "loading"]); + var $$exports = { + get loading() { + return loading(); + }, + set loading($$value) { + loading($$value); + flushSync(); + } + }; + var div = root$6(); + var input = child(div); + attribute_effect(input, () => ({ type: "checkbox", ...rest }), void 0, void 0, void 0, void 0, true); + next(2); + reset(div); + template_effect(() => set_attribute(div, "data-loading", loading())); + append($$anchor, div); + return pop($$exports); + } + create_custom_element(CheckboxNative, { loading: {} }, [], [], { mode: "open" }); + var root$5 = /* @__PURE__ */ from_html(`
`); + function Logo($$anchor, $$props) { + push($$props, true); + let strings = prop($$props, "strings"); + const website = "https://altcha.org"; + var $$exports = { + get strings() { + return strings(); + }, + set strings($$value) { + strings($$value); + flushSync(); + } + }; + var div = root$5(); + var a = child(div); + set_attribute(a, "href", website); + reset(div); + template_effect(() => set_attribute(a, "aria-label", strings().ariaLinkLabel)); + append($$anchor, div); + return pop($$exports); + } + create_custom_element(Logo, { strings: {} }, [], [], { mode: "open" }); + var root$4 = /* @__PURE__ */ from_html(``); + function Footer($$anchor, $$props) { + push($$props, true); + let logo = prop($$props, "logo"), strings = prop($$props, "strings"); + var $$exports = { + get logo() { + return logo(); + }, + set logo($$value) { + logo($$value); + flushSync(); + }, + get strings() { + return strings(); + }, + set strings($$value) { + strings($$value); + flushSync(); + } + }; + var div = root$4(); + var p = child(div); + html(p, () => strings().footer, true); + reset(p); + var node = sibling(p, 2); + { + var consequent = ($$anchor2) => { + Logo($$anchor2, { + get strings() { + return strings(); + } + }); + }; + if_block(node, ($$render) => { + if (logo()) $$render(consequent); + }); + } + reset(div); + append($$anchor, div); + return pop($$exports); + } + create_custom_element(Footer, { logo: {}, strings: {} }, [], [], { mode: "open" }); + var root$3 = /* @__PURE__ */ from_html(`
`); + function Switch($$anchor, $$props) { + push($$props, true); + let loading = prop($$props, "loading"), rest = /* @__PURE__ */ rest_props($$props, ["$$slots", "$$events", "$$legacy", "$$host", "loading"]); + let inputEl; + function onClick() { + inputEl?.click(); + } + var $$exports = { + get loading() { + return loading(); + }, + set loading($$value) { + loading($$value); + flushSync(); + } + }; + var div = root$3(); + var input = child(div); + attribute_effect(input, () => ({ type: "checkbox", ...rest }), void 0, void 0, void 0, void 0, true); + bind_this(input, ($$value) => inputEl = $$value, () => inputEl); + var div_1 = sibling(input, 2); + reset(div); + template_effect(() => set_attribute(div, "data-loading", loading())); + delegated("click", div_1, onClick); + append($$anchor, div); + return pop($$exports); + } + delegate(["click"]); + create_custom_element(Switch, { loading: {} }, [], [], { mode: "open" }); + var AudioState = /* @__PURE__ */ ((AudioState2) => { + AudioState2["ERROR"] = "error"; + AudioState2["LOADING"] = "loading"; + AudioState2["PLAYING"] = "playing"; + AudioState2["PAUSED"] = "paused"; + AudioState2["READY"] = "ready"; + return AudioState2; + })(AudioState || {}); + var State = /* @__PURE__ */ ((State2) => { + State2["CODE"] = "code"; + State2["ERROR"] = "error"; + State2["VERIFIED"] = "verified"; + State2["VERIFYING"] = "verifying"; + State2["UNVERIFIED"] = "unverified"; + State2["EXPIRED"] = "expired"; + return State2; + })(State || {}); + var root_1$2 = /* @__PURE__ */ from_html(`
`); + var root_3$2 = /* @__PURE__ */ from_html(`
`); + var root_4 = /* @__PURE__ */ from_svg(``); + var root_5 = /* @__PURE__ */ from_svg(``); + var root_6 = /* @__PURE__ */ from_svg(``); + var root_2$2 = /* @__PURE__ */ from_html(``); + var root_7 = /* @__PURE__ */ from_html(``); + var root$2 = /* @__PURE__ */ from_html(`
`); + function Code($$anchor, $$props) { + push($$props, true); + let audioUrl = prop($$props, "audioUrl"), codeChallenge = prop($$props, "codeChallenge"), config = prop($$props, "config"), imageUrl = prop($$props, "imageUrl"), onCancel = prop($$props, "onCancel"), onReload = prop($$props, "onReload"), onSubmit = prop($$props, "onSubmit"), strings = prop($$props, "strings"); + let audioState = /* @__PURE__ */ state(void 0); + let elAudio = /* @__PURE__ */ state(void 0); + let elInput = /* @__PURE__ */ state(void 0); + let loading = /* @__PURE__ */ state(false); + let code = /* @__PURE__ */ state(""); + let playAudio = /* @__PURE__ */ state(false); + onMount(() => { + if (!config().disableAutoFocus) { + tick().then(() => { + get(elInput)?.focus(); + }); + } + return () => { + if (get(elAudio)) { + get(elAudio).pause(); + set(elAudio, void 0); + } + }; + }); + function onAudioEnded() { + set(audioState, AudioState.PAUSED, true); + } + function onAudioError(ev) { + set(audioState, AudioState.ERROR, true); + } + function onAudioCanPlay() { + set(audioState, AudioState.READY, true); + } + function onAudioLoadStart() { + set(audioState, AudioState.LOADING, true); + } + function onAudioPlaying() { + set(audioState, AudioState.PLAYING, true); + } + function onAudioPause() { + set(audioState, AudioState.PAUSED, true); + } + function onInputKeyDown(ev) { + if (ev.code === "Space") { + ev.preventDefault(); + ev.stopPropagation(); + onPlayAudio(); + } else if (ev.code === "Escape") { + ev.preventDefault(); + ev.stopPropagation(); + onCancel()?.(); + } + } + function onSubmitCapture(ev) { + ev.preventDefault(); + ev.stopPropagation(); + onSubmit()?.(get(code)); + } + function onPlayAudio() { + if (get(elAudio)) { + if (get(audioState) === AudioState.LOADING) ; + else if (!get(elAudio).paused) { + get(elAudio).pause(); + } else { + if (audioUrl() && get(elAudio).src !== audioUrl()) { + get(elAudio).src = audioUrl(); + } + get(elAudio).currentTime = 0; + get(elAudio).play(); + } + } else { + set(playAudio, true); + requestAnimationFrame(() => { + if (get(elAudio) && audioUrl()) { + get(elAudio).src = audioUrl(); + get(elAudio).play(); + } + }); + } + } + var $$exports = { + get audioUrl() { + return audioUrl(); + }, + set audioUrl($$value) { + audioUrl($$value); + flushSync(); + }, + get codeChallenge() { + return codeChallenge(); + }, + set codeChallenge($$value) { + codeChallenge($$value); + flushSync(); + }, + get config() { + return config(); + }, + set config($$value) { + config($$value); + flushSync(); + }, + get imageUrl() { + return imageUrl(); + }, + set imageUrl($$value) { + imageUrl($$value); + flushSync(); + }, + get onCancel() { + return onCancel(); + }, + set onCancel($$value) { + onCancel($$value); + flushSync(); + }, + get onReload() { + return onReload(); + }, + set onReload($$value) { + onReload($$value); + flushSync(); + }, + get onSubmit() { + return onSubmit(); + }, + set onSubmit($$value) { + onSubmit($$value); + flushSync(); + }, + get strings() { + return strings(); + }, + set strings($$value) { + strings($$value); + flushSync(); + } + }; + var div = root$2(); + var form = child(div); + var node = child(form); + { + var consequent = ($$anchor2) => { + var div_1 = root_1$2(); + var text2 = child(div_1, true); + reset(div_1); + template_effect(() => set_text(text2, strings().verificationRequired)); + append($$anchor2, div_1); + }; + if_block(node, ($$render) => { + if (config().codeChallengeDisplay !== "standard") $$render(consequent); + }); + } + var div_2 = sibling(node, 2); + var text_1 = child(div_2, true); + reset(div_2); + var img = sibling(div_2, 2); + var div_3 = sibling(img, 2); + var input = child(div_3); + remove_input_defaults(input); + input.disabled = get(loading); + bind_this(input, ($$value) => set(elInput, $$value), () => get(elInput)); + var node_1 = sibling(input, 2); + { + var consequent_4 = ($$anchor2) => { + var button = root_2$2(); + var node_2 = child(button); + { + var consequent_1 = ($$anchor3) => { + var div_4 = root_3$2(); + append($$anchor3, div_4); + }; + var consequent_2 = ($$anchor3) => { + var svg = root_4(); + append($$anchor3, svg); + }; + var consequent_3 = ($$anchor3) => { + var svg_1 = root_5(); + append($$anchor3, svg_1); + }; + var alternate = ($$anchor3) => { + var svg_2 = root_6(); + append($$anchor3, svg_2); + }; + if_block(node_2, ($$render) => { + if (get(audioState) === AudioState.LOADING) $$render(consequent_1); + else if (get(audioState) === AudioState.ERROR) $$render(consequent_2, 1); + else if (get(audioState) === AudioState.PLAYING) $$render(consequent_3, 2); + else $$render(alternate, -1); + }); + } + reset(button); + template_effect(() => { + set_attribute(button, "title", strings().getAudioChallenge); + button.disabled = get(audioState) === AudioState.LOADING || get(audioState) === AudioState.ERROR; + set_attribute(button, "aria-label", get(audioState) === AudioState.LOADING ? strings().loading : strings().getAudioChallenge); + }); + event("click", button, () => onPlayAudio(), true); + append($$anchor2, button); + }; + if_block(node_1, ($$render) => { + if (codeChallenge().audio) $$render(consequent_4); + }); + } + var button_1 = sibling(node_1, 2); + reset(div_3); + var div_5 = sibling(div_3, 2); + var button_2 = child(div_5); + var text_2 = child(button_2, true); + reset(button_2); + var button_3 = sibling(button_2, 2); + var text_3 = child(button_3, true); + reset(button_3); + reset(div_5); + reset(form); + var node_3 = sibling(form, 2); + { + var consequent_5 = ($$anchor2) => { + var audio = root_7(); + bind_this(audio, ($$value) => set(elAudio, $$value), () => get(elAudio)); + event("error", audio, onAudioError); + event("loadstart", audio, onAudioLoadStart); + event("canplay", audio, onAudioCanPlay); + event("pause", audio, onAudioPause); + event("playing", audio, onAudioPlaying); + event("ended", audio, onAudioEnded); + append($$anchor2, audio); + }; + if_block(node_3, ($$render) => { + if (get(playAudio)) $$render(consequent_5); + }); + } + reset(div); + template_effect(() => { + set_text(text_1, strings().enterCodeFromImage); + set_attribute(img, "src", imageUrl()); + set_attribute(input, "minlength", codeChallenge().length || 1); + set_attribute(input, "maxlength", codeChallenge().length); + set_attribute(input, "placeholder", strings().enterCode); + set_attribute(input, "aria-label", get(audioState) === AudioState.LOADING ? strings().loading : get(audioState) === AudioState.PLAYING ? "" : strings().enterCodeAria); + set_attribute(input, "aria-live", get(audioState) ? "assertive" : "polite"); + set_attribute(input, "aria-busy", get(audioState) === AudioState.LOADING); + set_attribute(button_1, "title", strings().reload); + set_attribute(button_1, "aria-label", strings().reload); + set_attribute(button_2, "aria-label", strings().verify); + set_text(text_2, strings().verify); + set_attribute(button_3, "aria-label", strings().cancel); + set_text(text_3, strings().cancel); + }); + event("submit", form, onSubmitCapture, true); + delegated("keydown", input, onInputKeyDown); + bind_value(input, () => get(code), ($$value) => set(code, $$value)); + event("click", button_1, () => onReload()?.(), true); + event("click", button_3, () => onCancel()?.(), true); + append($$anchor, div); + return pop($$exports); + } + delegate(["keydown"]); + create_custom_element( + Code, + { + audioUrl: {}, + codeChallenge: {}, + config: {}, + imageUrl: {}, + onCancel: {}, + onReload: {}, + onSubmit: {}, + strings: {} + }, + [], + [], + { mode: "open" } + ); + var root_1$1 = /* @__PURE__ */ from_html(`
`); + var root_2$1 = /* @__PURE__ */ from_html(`
`); + var root_3$1 = /* @__PURE__ */ from_html(`
×
`); + var root$1 = /* @__PURE__ */ from_html(`
`, 1); + function Popover($$anchor, $$props) { + push($$props, true); + let anchor = prop($$props, "anchor"), children = prop($$props, "children"), display = prop($$props, "display", 7, "standard"), backdrop = prop($$props, "backdrop", 7, false), onClickOutside = prop($$props, "onClickOutside"), onClickOutsideDelay = prop($$props, "onClickOutsideDelay", 7, 600), onClose = prop($$props, "onClose"), placement = prop($$props, "placement", 7, "auto"), updateUISignal = prop($$props, "updateUISignal"), variant = prop($$props, "variant", 7, "neutral"), rest = /* @__PURE__ */ rest_props($$props, [ + "$$slots", + "$$events", + "$$legacy", + "$$host", + "anchor", + "children", + "display", + "backdrop", + "onClickOutside", + "onClickOutsideDelay", + "onClose", + "placement", + "updateUISignal", + "variant" + ]); + let el = /* @__PURE__ */ state(void 0); + let elBackdrop = /* @__PURE__ */ state(void 0); + let top = /* @__PURE__ */ state(false); + let mountedAt = /* @__PURE__ */ state(0); + user_effect(() => { + if (placement() !== "auto") { + set(top, placement() === "top"); + } + }); + user_effect(() => { + if (updateUISignal()) { + reposition(); + } + }); + onMount(() => { + const moveToBody = display() === "bottomsheet" || display() === "overlay"; + if (moveToBody) { + get(elBackdrop) && document.body.append(get(elBackdrop)); + get(el) && document.body.append(get(el)); + } + reposition(); + tick().then(() => { + set(mountedAt, Date.now(), true); + }); + return () => { + if (moveToBody) { + get(elBackdrop) && document.body.removeChild(get(elBackdrop)); + get(el) && document.body.removeChild(get(el)); + } + }; + }); + function onCloseClick() { + onClose()?.(); + } + function onWindowClick(ev) { + const target = ev.target; + if (!get(el)?.contains(target) && (!onClickOutsideDelay() || get(mountedAt) + onClickOutsideDelay() < Date.now())) { + onClickOutside()?.(); + } + } + function onWindowResize() { + reposition(); + } + function onWindowScroll() { + reposition(); + } + function reposition() { + if (anchor() && placement() === "auto" && get(el)) { + const boundary2 = anchor().getBoundingClientRect(); + const bottomGap = document.documentElement.clientHeight - (boundary2.top + boundary2.height); + const newTop = bottomGap < get(el).clientHeight; + if (get(top) !== newTop) { + set(top, newTop); + } + } + } + var $$exports = { + get anchor() { + return anchor(); + }, + set anchor($$value) { + anchor($$value); + flushSync(); + }, + get children() { + return children(); + }, + set children($$value) { + children($$value); + flushSync(); + }, + get display() { + return display(); + }, + set display($$value = "standard") { + display($$value); + flushSync(); + }, + get backdrop() { + return backdrop(); + }, + set backdrop($$value = false) { + backdrop($$value); + flushSync(); + }, + get onClickOutside() { + return onClickOutside(); + }, + set onClickOutside($$value) { + onClickOutside($$value); + flushSync(); + }, + get onClickOutsideDelay() { + return onClickOutsideDelay(); + }, + set onClickOutsideDelay($$value = 600) { + onClickOutsideDelay($$value); + flushSync(); + }, + get onClose() { + return onClose(); + }, + set onClose($$value) { + onClose($$value); + flushSync(); + }, + get placement() { + return placement(); + }, + set placement($$value = "auto") { + placement($$value); + flushSync(); + }, + get updateUISignal() { + return updateUISignal(); + }, + set updateUISignal($$value) { + updateUISignal($$value); + flushSync(); + }, + get variant() { + return variant(); + }, + set variant($$value = "neutral") { + variant($$value); + flushSync(); + } + }; + var fragment = root$1(); + event("click", $window, onWindowClick, true); + event("resize", $window, onWindowResize); + event("scroll", $window, onWindowScroll); + var node = first_child(fragment); + { + var consequent = ($$anchor2) => { + var div = root_1$1(); + bind_this(div, ($$value) => set(elBackdrop, $$value), () => get(elBackdrop)); + append($$anchor2, div); + }; + if_block(node, ($$render) => { + if (backdrop()) $$render(consequent); + }); + } + var div_1 = sibling(node, 2); + attribute_effect(div_1, () => ({ + ...rest, + class: `altcha-popover ${($$props.class || "") ?? ""}`, + "data-popover": true, + "data-variant": variant(), + "data-top": get(top), + "data-display": display() + })); + var node_1 = child(div_1); + { + var consequent_1 = ($$anchor2) => { + var div_2 = root_2$1(); + append($$anchor2, div_2); + }; + if_block(node_1, ($$render) => { + if (display() === "standard") $$render(consequent_1); + }); + } + var node_2 = sibling(node_1, 2); + { + var consequent_2 = ($$anchor2) => { + var div_3 = root_3$1(); + event("click", div_3, onCloseClick, true); + append($$anchor2, div_3); + }; + if_block(node_2, ($$render) => { + if (display() !== "standard") $$render(consequent_2); + }); + } + var div_4 = sibling(node_2, 2); + var node_3 = child(div_4); + snippet(node_3, () => children() ?? noop); + reset(div_4); + reset(div_1); + bind_this(div_1, ($$value) => set(el, $$value), () => get(el)); + append($$anchor, fragment); + return pop($$exports); + } + create_custom_element( + Popover, + { + anchor: {}, + children: {}, + display: {}, + backdrop: {}, + onClickOutside: {}, + onClickOutsideDelay: {}, + onClose: {}, + placement: {}, + updateUISignal: {}, + variant: {} + }, + [], + [], + { mode: "open" } + ); + function bufferToHex(buffer) { + return Array.from(new Uint8Array(buffer)).map((b) => b.toString(16).padStart(2, "0")).join(""); + } + function injectCss(css2, id = "altcha-css", nonce) { + if (typeof document !== "undefined" && document && !document.getElementById(id)) { + const style = document.createElement("style"); + style.id = id; + style.textContent = css2; + const resolvedNonce = document.currentScript?.nonce ?? document.querySelector('meta[name="csp-nonce"]')?.content; + if (resolvedNonce) { + style.nonce = resolvedNonce; + } + document.head.appendChild(style); + } + } + async function solveChallengeWorkers(options) { + const { + challenge, + concurrency = navigator.hardwareConcurrency, + controller = new AbortController(), + createWorker, + onOutOfMemory = (c) => c > 1 ? Math.floor(c / 2) : 0, + counterMode, + timeout = 9e4 + } = options; + const workersConcurrency = Math.min(16, Math.max(1, concurrency)); + const workersInstances = []; + const terminate = () => { + for (const worker of workersInstances) { + worker.terminate(); + } + }; + for (let i = 0; i < workersConcurrency; i++) { + workersInstances.push(await createWorker(challenge.parameters.algorithm)); + } + let solution = null; + try { + solution = await Promise.race( + workersInstances.map((worker, i) => { + controller.signal.addEventListener("abort", () => { + worker.postMessage({ type: "abort" }); + }); + return new Promise((resolve, reject) => { + worker.addEventListener("error", (err) => { + reject(err); + }); + worker.addEventListener("message", (message) => { + if (message.data) { + for (const w of workersInstances) { + if (w !== worker) { + w.postMessage({ type: "abort" }); + } + } + if (message.data.error) { + return reject(new Error(message.data.error)); + } + } + resolve(message.data); + }); + worker.postMessage({ + challenge, + counterMode, + counterStart: i, + counterStep: workersConcurrency, + timeout, + type: "work" + }); + }); + }) + ); + } catch (err) { + const isOOM = err instanceof Error && !!err?.message?.includes("Out of memory"); + if (isOOM) { + if (onOutOfMemory) { + terminate(); + const retryConcurrency = onOutOfMemory(workersConcurrency); + if (retryConcurrency) { + return solveChallengeWorkers({ + ...options, + challenge, + controller, + concurrency: retryConcurrency, + createWorker + }); + } + } + } + throw err; + } finally { + terminate(); + } + if (controller.signal.aborted) { + return null; + } + return solution || null; + } + class Collector { + TAG_CODES = { + INPUT: 1, + TEXTAREA: 2, + SELECT: 3, + BUTTON: 4, + A: 5, + DETAILS: 6, + SUMMARY: 7, + IFRAME: 8, + VIDEO: 9, + AUDIO: 10 + }; + maxSamples; + sampleInterval; + target; + focusStartTime = 0; + focusInteraction = 0; + focusInteractionTimer = null; + lastPointerSample = 0; + lastTouchSample = 0; + lastScrollSample = 0; + pendingPointer = null; + pendingTouch = null; + focus = []; + pointer = []; + scroll = []; + touch = []; + constructor(options = {}) { + const { maxSamples = 60, sampleInterval = 50, target = window } = options; + this.maxSamples = maxSamples; + this.sampleInterval = sampleInterval; + this.target = target; + this.attach(); + } + destroy() { + const o = { capture: true }; + this.target.removeEventListener("focusin", this.onFocus, o); + this.target.removeEventListener("keydown", this.onInteraction, o); + this.target.removeEventListener("pointerdown", this.onInteraction, o); + this.target.removeEventListener("pointermove", this.onPointer, o); + this.target.removeEventListener("scroll", this.onScroll, o); + this.target.removeEventListener("touchmove", this.onTouchMove, o); + } + export() { + return { + focus: this.focus, + maxTouchPoints: navigator.maxTouchPoints || 0, + pointer: this.pointer, + scroll: this.scroll, + time: Date.now(), + touch: this.touch + }; + } + attach() { + const o = { passive: true, capture: true }; + this.target.addEventListener("focusin", this.onFocus, o); + this.target.addEventListener("keydown", this.onInteraction, o); + this.target.addEventListener("pointerdown", this.onInteraction, o); + this.target.addEventListener("pointermove", this.onPointer, o); + this.target.addEventListener("scroll", this.onScroll, o); + this.target.addEventListener("touchmove", this.onTouchMove, o); + } + evict(buffer) { + if (buffer.length > this.maxSamples) { + buffer.splice(0, buffer.length - this.maxSamples); + } + } + onFocus = (e) => { + if (this.focusInteraction === 2) { + return; + } + const el = e.target; + if (!(el instanceof Element)) { + return; + } + const now = performance.now(); + if (this.focusStartTime === 0) { + this.focusStartTime = now; + } + this.focus.push([ + Math.round(now - this.focusStartTime), + el.tabIndex, + this.TAG_CODES[el.tagName] ?? 0, + this.focusInteraction ? 1 : 0 + ]); + this.evict(this.focus); + }; + onInteraction = (e) => { + this.focusInteraction = "keyCode" in e ? 1 : 2; + if (this.focusInteractionTimer) { + clearTimeout(this.focusInteractionTimer); + } + this.focusInteractionTimer = setTimeout(() => { + this.focusInteraction = 0; + }, 100); + }; + onPointer = (e) => { + if (e.pointerType === "touch") { + return; + } + const now = e.timeStamp || performance.now(); + this.pendingPointer = [Math.round(e.clientX), Math.round(e.clientY), Math.round(now)]; + if (now - this.lastPointerSample >= this.sampleInterval) { + this.pointer.push(this.pendingPointer); + this.lastPointerSample = now; + this.pendingPointer = null; + this.evict(this.pointer); + } + }; + onScroll = () => { + const now = performance.now(); + if (now - this.lastScrollSample < this.sampleInterval) { + return; + } + this.scroll.push([Math.round(window.scrollY), Math.round(now)]); + this.lastScrollSample = now; + this.evict(this.scroll); + }; + onTouchMove = (e) => { + const now = e.timeStamp || performance.now(); + const t = e.touches[0]; + if (!t) { + return; + } + this.pendingTouch = [ + Math.round(t.clientX), + Math.round(t.clientY), + Math.round(now), + Math.round(t.force * 1e3) / 1e3, + Math.round(t.radiusX || 0), + Math.round(t.radiusY || 0) + ]; + if (now - this.lastTouchSample >= this.sampleInterval) { + this.touch.push(this.pendingTouch); + this.lastTouchSample = now; + this.pendingTouch = null; + this.evict(this.touch); + } + }; + } + var root_1 = /* @__PURE__ */ from_html(`
`); + var root_3 = /* @__PURE__ */ from_html(`
`); + var root_2 = /* @__PURE__ */ from_html(`
×
`, 1); + var root_10 = /* @__PURE__ */ from_html(`
`); + var root_11 = /* @__PURE__ */ from_html(``); + var root_14 = /* @__PURE__ */ from_html(`
Secure context (HTTPS) required.
`); + var root_15 = /* @__PURE__ */ from_html(`
`); + var root_16 = /* @__PURE__ */ from_html(`
`); + var root_19 = /* @__PURE__ */ from_html(` `, 1); + var root = /* @__PURE__ */ from_html(`
`, 1); + function Widget($$anchor, $$props) { + push($$props, true); + const $altchaDefaults = () => store_get(altchaDefaults, "$altchaDefaults", $$stores); + const $altchaI18nStore = () => store_get(altchaI18nStore, "$altchaI18nStore", $$stores); + const [$$stores, $$cleanup] = setup_stores(); + const fieldsSelector = 'input[type="text"]:not([data-no-spamfilter]), textarea:not([data-no-spamfilter])'; + const submitButtonSelector = 'input[type="submit"], button[type="submit"], button:not([type="button"]):not([type="reset"])'; + const rtlLanguages = ["ar", "fa", "he", "ur"]; + const { isSecureContext } = globalThis; + const { store: altchaDefaults } = globalThis.$altcha.defaults; + const hardwareConcurrency = navigator.hardwareConcurrency || 2; + const deviceMemory = navigator.deviceMemory || 0; + const defaultWorkers = deviceMemory && deviceMemory <= 4 ? Math.min(4, hardwareConcurrency) : hardwareConcurrency; + const altchaI18nStore = globalThis.$altcha.i18n.store; + const instance = $$props.$$host; + const dispatch = (event2, detail) => { + tick().then(() => { + instance?.dispatchEvent(new CustomEvent(event2, { detail })); + }); + }; + let hisCollector = null; + let baseUrl = /* @__PURE__ */ state(proxy(new URL(location.origin))); + let checked = /* @__PURE__ */ state(false); + let codeChallenge = /* @__PURE__ */ state(null); + let currentController = /* @__PURE__ */ state(null); + let currentDisplay = /* @__PURE__ */ state(null); + let currentState = /* @__PURE__ */ state(proxy(State.UNVERIFIED)); + let elAnchorArrow = /* @__PURE__ */ state(void 0); + let elFloatingAnchor = /* @__PURE__ */ state(void 0); + let elForm = /* @__PURE__ */ state(null); + let elRoot = /* @__PURE__ */ state(void 0); + let elSubmitter = /* @__PURE__ */ state(null); + let error = /* @__PURE__ */ state(null); + let expirationTimeout = /* @__PURE__ */ state(null); + let payload = /* @__PURE__ */ state(null); + let plugins = /* @__PURE__ */ state(proxy([])); + let updateUISignal = /* @__PURE__ */ state(0); + let userConfig = /* @__PURE__ */ state(proxy({})); + let visible = /* @__PURE__ */ state(true); + const config = /* @__PURE__ */ user_derived(() => ({ + fetch: (input, init) => fetch(input, init), + audioChallengeLanguage: "", + auto: "off", + barPlacement: "bottom", + challenge: "", + codeChallenge: null, + codeChallengeDisplay: "standard", + credentials: null, + debug: false, + disableAutoFocus: false, + display: "standard", + floatingAnchor: "", + floatingOffset: 8, + floatingPersist: false, + floatingPlacement: "auto", + hideFooter: false, + hideLogo: false, + humanInteractionSignature: true, + language: "", + mockError: false, + minDuration: 500, + overlayContent: "", + name: "altcha", + popoverPlacement: "auto", + retryOnOutOfMemoryError: true, + setCookie: null, + serverVerificationFields: false, + serverVerificationTimeZone: false, + test: false, + timeout: 9e4, + type: "checkbox", + validationMessage: "", + verifyFunction: null, + verifyUrl: "", + workers: defaultWorkers, + ...$altchaDefaults(), + ...get(userConfig) + })); + const checkboxId = /* @__PURE__ */ user_derived(() => `altcha-checkbox-${$$props.id || Math.floor(Math.random() * 1e12).toString(16)}`); + const CheckboxComponent = /* @__PURE__ */ user_derived(() => getCheckboxComponent(get(config).type)); + const auto = /* @__PURE__ */ user_derived(() => get(config).auto); + const loading = /* @__PURE__ */ user_derived(() => get(currentState) === State.VERIFYING); + const showFooter = /* @__PURE__ */ user_derived(() => !get(config).hideFooter); + const showLogo = /* @__PURE__ */ user_derived(() => !get(config).hideLogo && get(config).display !== "bar"); + const locale = /* @__PURE__ */ user_derived(() => getI18nStrings($altchaI18nStore(), [ + get(config).language, + document.documentElement.lang, + ...navigator.languages + ])); + const dir = /* @__PURE__ */ user_derived(() => rtlLanguages.includes(get(locale).language) ? "rtl" : void 0); + const strings = /* @__PURE__ */ user_derived(() => ({ ...get(locale).strings })); + const codeChallengeAudioUrl = /* @__PURE__ */ user_derived(() => get(codeChallenge)?.audio?.match(/^(https?:)?\//) ? getUrl(get(codeChallenge).audio, get(baseUrl), { + language: get(config).audioChallengeLanguage || get(locale).language + }).toString() : get(codeChallenge)?.audio); + const codeChallengeImageUrl = /* @__PURE__ */ user_derived(() => get(codeChallenge)?.image?.match(/^(https?:)?\//) ? getUrl(get(codeChallenge).image, get(baseUrl)) : get(codeChallenge)?.image); + user_effect(() => { + configure({ + auto: $$props.auto, + challenge: $$props.challenge, + display: $$props.display, + language: $$props.language, + name: $$props.name, + type: $$props.type, + workers: $$props.workers + }); + }); + user_effect(() => { + if ($$props.configuration) { + try { + configure(JSON.parse($$props.configuration)); + } catch { + log("unable to parse the `configuration` attribute (JSON expected)"); + } + } + }); + user_effect(() => { + if (get(currentDisplay) !== get(config).display) { + setDisplay(get(config).display); + } + }); + user_effect(() => { + if (get(checked) && get(currentState) === State.VERIFYING) { + set(checked, false); + } + }); + user_effect(() => { + if (!get(checked) && get(currentState) === State.VERIFIED) { + set(checked, true); + } + }); + user_effect(() => { + if (!get(checked)) { + const checkbox = getCheckboxElement(); + if (checkbox && checkbox.checked) { + checkbox.checked = false; + } + } + }); + user_effect(() => { + if (get(currentState) === State.VERIFIED) { + getCheckboxElement()?.setCustomValidity(""); + } + }); + user_effect(() => { + if (get(auto) === "onload") { + const tm = setTimeout( + () => { + verify(); + }, + 1 + ); + return () => { + if (tm) { + clearTimeout(tm); + } + }; + } + }); + user_effect(() => { + if (get(error)) { + log("error:", get(error)); + } + }); + user_effect(() => { + if (get(payload) && get(config).setCookie) { + setCookie(get(payload), get(config).setCookie); + } + }); + onMount(() => { + log("mounted", "3.2.1"); + if (instance) { + globalThis.$altcha.instances.add(instance); + } + set(elForm, get(elRoot)?.closest("form"), true); + get(elForm)?.addEventListener("reset", onFormReset); + get(elForm)?.addEventListener("submit", onFormSubmit, { capture: true }); + get(elForm)?.addEventListener("focusin", onFormFocusIn); + activatePlugins(); + if (get(config).humanInteractionSignature) { + log("human interaction signature enabled"); + hisCollector = new Collector(); + } + dispatch("load"); + if (!isSecureContext) { + log("secure context (HTTPS) required"); + } + return () => { + destroyPlugins(); + if (instance) { + globalThis.$altcha.instances.delete(instance); + } + if (get(expirationTimeout)) { + clearTimeout(get(expirationTimeout)); + } + get(elForm)?.removeEventListener("reset", onFormReset); + get(elForm)?.removeEventListener("submit", onFormSubmit, { capture: true }); + get(elForm)?.removeEventListener("focusin", onFormFocusIn); + hisCollector?.destroy(); + }; + }); + function activatePlugins() { + set(plugins, [...globalThis.$altcha.plugins].map((PluginCls) => new PluginCls(instance)), true); + log("activating plugins", get(plugins).map((plugin) => plugin.constructor.name)); + for (const plugin of get(plugins)) { + plugin.activate(); + } + } + async function callHook(hook, ...args) { + let result = void 0; + for (const plugin of get(plugins)) { + result = await plugin[hook].call(plugin, ...args); + } + return result; + } + function destroyPlugins() { + for (const plugin of get(plugins)) { + plugin.destroy(); + } + } + function createChallengeFromV1(challenge) { + const [_, queryParams] = challenge.salt.split("?"); + const data = {}; + if (queryParams) { + try { + Object.assign(data, Object.fromEntries(new URLSearchParams(queryParams).entries())); + } catch { + } + } + const result = { + codeChallenge: challenge.codeChallenge, + parameters: { + algorithm: challenge.algorithm, + cost: 1, + data, + expiresAt: data?.expires ? parseInt(data.expires, 10) : void 0, + keyLength: challenge.algorithm === "SHA-512" ? 64 : challenge.algorithm === "SHA-384" ? 48 : 32, + nonce: bufferToHex(new TextEncoder().encode(challenge.salt)), + keyPrefix: challenge.challenge, + salt: "" + }, + signature: challenge.signature + }; + Object.defineProperties(result, { + _originalSalt: { enumerable: false, value: challenge.salt, writable: false }, + _version: { enumerable: false, value: 1, writable: false } + }); + return result; + } + function createPayloadV1(challenge, solution) { + return { + algorithm: challenge.parameters.algorithm, + challenge: challenge.parameters.keyPrefix, + number: solution.counter, + salt: "_originalSalt" in challenge ? challenge._originalSalt : challenge.parameters.nonce, + signature: challenge.signature, + took: solution.time || 0 + }; + } + async function delay(ms) { + await new Promise((resolve) => setTimeout(resolve, ms)); + } + async function fetchChallenge(source2 = get(config).challenge, requestOptions) { + const hook = await callHook("onFetchChallenge", source2); + let challenge = null; + if (hook !== void 0) { + return hook; + } + if (typeof source2 === "string") { + if (source2.startsWith("{")) { + log("parsing JSON challenge"); + try { + challenge = JSON.parse(source2); + } catch { + throw new Error(`Unable to parse JSON challenge.`); + } + } else { + log("fetching challenge from", requestOptions?.method || "GET", source2); + set(baseUrl, new URL(source2, location.origin), true); + const resp = await get(config).fetch(source2, { + credentials: get(config).credentials || void 0, + ...requestOptions + }); + await validateResponse(resp); + const configHeader = resp.headers.get("x-altcha-config"); + if (configHeader) { + processConfigHeader(configHeader); + } + const json = await resp.json(); + if (json && "his" in json && json.his) { + log("requested HIS"); + if (!hisCollector) { + throw new Error("Server requested HIS data but collector is disabled."); + } + return fetchChallenge(getUrl(json.his.url, get(baseUrl)), { + body: JSON.stringify({ his: hisCollector.export() }), + headers: { "content-type": "application/json" }, + method: "POST" + }); + } + if (json && "hisResult" in json && json.hisResult) { + log("HIS result", json.hisResult); + } + challenge = json; + } + } else if (source2 && typeof source2 === "object") { + try { + challenge = JSON.parse(JSON.stringify(source2)); + } catch { + throw new Error(`Unable to parse JSON challenge.`); + } + } + if (isChallengeV1(challenge)) { + challenge = createChallengeFromV1(challenge); + } + if (!isChallengeValid(challenge)) { + throw new Error(`Challenge validation failed.`); + } + return challenge; + } + function isChallengeV1(challenge) { + return typeof challenge === "object" && "challenge" in challenge; + } + function isChallengeValid(challenge) { + return !!challenge && typeof challenge === "object" && "parameters" in challenge && !!challenge.parameters && typeof challenge.parameters === "object" && "algorithm" in challenge.parameters && "nonce" in challenge.parameters && "salt" in challenge.parameters && "keyPrefix" in challenge.parameters; + } + function getCheckboxElement() { + return document.getElementById(get(checkboxId)); + } + function getCheckboxComponent(type) { + switch (type) { + case "checkbox": + return Checkbox; + case "switch": + return Switch; + case "native": + default: + return CheckboxNative; + } + } + function getI18nStrings(i18n2, languages) { + const codes = Object.keys(i18n2).map((code) => code.toLowerCase()); + let language = languages.reduce( + (acc, lang) => { + lang = lang.toLowerCase(); + return acc || (i18n2[lang] ? lang : null) || codes.find((code) => lang.split("-")[0] === code.split("-")[0]) || null; + }, + null + ); + if (!i18n2[language || ""]) { + language = "en"; + } + return { language, strings: i18n2[language] }; + } + function getPlacement(display) { + switch (display) { + case "bar": + return get(config).barPlacement || "bottom"; + case "floating": + return get(config).floatingPlacement || "auto"; + default: + return void 0; + } + } + function getTextFields(names) { + const elInputs = [ + ...get(elForm)?.querySelectorAll(fieldsSelector) || [] + ]; + return elInputs.reduce( + (acc, el) => { + const name = el.name; + const value = el.value; + if (name && value) { + acc[name] = /\n/.test(value) ? value.replace(new RegExp("(? { + if (result && !get(codeChallenge)) { + tick().then(() => { + requestSubmit(get(elSubmitter)); + }); + } + }); + } + } + function onWindowPageshow(ev) { + if (ev.persisted) { + setDisplay(get(config).display); + reset$1(); + } + } + function onWindowResize() { + updateUI(); + } + function processConfigHeader(jsonConfig) { + try { + const json = JSON.parse(jsonConfig); + if (json && typeof json === "object") { + configure({ + // Backward compatibility mappings + serverVerificationFields: json?.sentinel?.fields, + serverVerificationTimeZone: json?.sentinel?.timeZone, + verifyUrl: json.verifyurl, + ...json + }); + } + } catch (err) { + log("unable to configure from x-altcha-config header", err); + } + } + function repositionFloating(viewportOffset = 20) { + if (!get(elRoot)) { + return; + } + const floatingPlacement = get(config).floatingPlacement; + if (!get(elFloatingAnchor)) { + set( + elFloatingAnchor, + (get(config).floatingAnchor instanceof HTMLElement ? get(config).floatingAnchor : get(config).floatingAnchor ? document.querySelector(get(config).floatingAnchor) : get(elForm)?.querySelector(submitButtonSelector)) || get(elForm), + true + ); + if (!get(elFloatingAnchor)) { + log("unable to find floating anchor element"); + return; + } + } + const offsetY = parseInt(get(config).floatingOffset, 10) || 12; + const anchorBoundry = get(elFloatingAnchor).getBoundingClientRect(); + const elBoundary = get(elRoot).getBoundingClientRect(); + const docHeight = document.documentElement.clientHeight; + const docWidth = document.documentElement.clientWidth; + const showOnTop = !floatingPlacement || floatingPlacement === "auto" ? anchorBoundry.bottom + elBoundary.height + offsetY + viewportOffset > docHeight : floatingPlacement === "top"; + const left = Math.max(viewportOffset, Math.min(docWidth - viewportOffset - elBoundary.width, anchorBoundry.left + anchorBoundry.width / 2 - elBoundary.width / 2)); + get(elRoot).style.setProperty("--altcha-floating-left", `${left}px`); + get(elRoot).style.setProperty("--altcha-floating-top", showOnTop ? `${anchorBoundry.top - (elBoundary.height + offsetY)}px` : `${anchorBoundry.bottom + offsetY}px`); + get(elRoot).setAttribute("data-floating-position", showOnTop ? "top" : "bottom"); + if (get(elAnchorArrow)) { + const anchorArrowBoundry = get(elAnchorArrow).getBoundingClientRect(); + get(elAnchorArrow).style.left = anchorBoundry.left - left + anchorBoundry.width / 2 - anchorArrowBoundry.width / 2 + "px"; + } + } + async function requestServerVerification(verificationPayload, code) { + const hook = await callHook("onRequestServerVerification", verificationPayload, code); + if (hook !== void 0) { + return hook; + } + log("requesting server verification from", get(config).verifyUrl); + if (!get(config).verifyUrl) { + throw new Error(`Parameter verifyUrl must be set for server verification.`); + } + const resp = await get(config).fetch(getUrl(get(config).verifyUrl, get(baseUrl)), { + body: JSON.stringify({ + code, + fields: get(config).serverVerificationFields ? getTextFields() : void 0, + payload: verificationPayload, + timeZone: get(config).serverVerificationTimeZone ? getTimeZone() : void 0 + }), + credentials: get(config).credentials || void 0, + headers: { "Content-Type": "application/json" }, + method: "POST" + }); + await validateResponse(resp); + const json = await resp.json(); + if (json && typeof json === "object" && "payload" in json && !!json.payload) { + dispatch("serververification", json); + } + return json; + } + function requestSubmit(submitter) { + if (get(elForm) && "requestSubmit" in get(elForm)) { + get(elForm).requestSubmit(submitter); + } else if (get(elForm)?.reportValidity()) { + if (submitter) { + submitter.click(); + } else { + get(elForm).submit(); + } + } + } + function setCookie(value, options = {}) { + const { + domain, + name = get(config).name, + maxAge, + path, + sameSite, + secure + } = options; + let cookie = `${encodeURIComponent(name)}=${encodeURIComponent(value)}`; + if (domain) cookie += `; Domain=${domain}`; + if (maxAge != null) cookie += `; Max-Age=${maxAge}`; + if (path) cookie += `; Path=${path}`; + if (sameSite) cookie += `; SameSite=${sameSite}`; + if (secure) cookie += `; Secure`; + document.cookie = cookie; + } + function setDisplay(value) { + switch (value) { + case "bar": + case "floating": + case "overlay": + hide(); + if (!get(auto) || get(auto) === "off") { + get(userConfig).auto = "onsubmit"; + } + break; + case "standard": + show(); + } + if (get(currentDisplay) !== value) { + set(currentDisplay, value, true); + } + } + function setChallengeExpiration(expiresAt) { + if (get(expirationTimeout)) { + clearTimeout(get(expirationTimeout)); + } + const onExpired = () => { + if (get(currentState) !== State.UNVERIFIED) { + set(checked, false); + setState(State.EXPIRED); + } else { + reset$1(); + } + dispatch("expired"); + }; + const duration = expiresAt * 1e3 - Date.now(); + if (duration >= 1) { + set(expirationTimeout, setTimeout(onExpired, duration), true); + } else { + onExpired(); + } + } + async function validateResponse(resp) { + if (resp.status >= 400) { + if (resp.headers.get("content-type")?.includes("/json")) { + let json; + try { + json = await resp.json(); + } catch { + } + if (json && "error" in json) { + throw new Error(`Server responded with ${resp.status} - ${json.error}`); + } + } + throw new Error(`Server responded with ${resp.status}.`); + } + const contentType = resp.headers.get("content-type"); + if (!contentType || !contentType.includes("/json")) { + throw new Error(`Server responded with invalid content-type. Expected application/json, received ${contentType}.`); + } + } + async function verifyServer(code) { + if (!get(payload)) { + setState(State.ERROR, "Cannot verify code challenge without PoW payload."); + return; + } + setState(State.VERIFYING); + let result = null; + if (get(config).verifyUrl) { + result = await requestServerVerification(get(payload), code); + } else if (get(config).verifyFunction) { + result = await get(config).verifyFunction(get(payload), code); + } else { + setState(State.ERROR, "Parameter verifyUrl is required for code challenge verification."); + return; + } + if (result?.payload) { + set(payload, result.payload, true); + log("server payload", get(payload)); + } + if (result?.verified === true) { + log("verified"); + setState(State.VERIFIED); + dispatch("verified", { payload: get(payload) }); + if (get(auto) === "onsubmit") { + tick().then(() => { + requestSubmit(get(elSubmitter)); + }); + } + } else { + setState(State.ERROR, result?.reason || "Verification failed."); + } + if (!get(config).disableAutoFocus) { + getCheckboxElement()?.focus(); + } + } + function configure(newConfig) { + Object.assign(get(userConfig), { + ...Object.fromEntries(Object.entries(newConfig).filter(([_, value]) => value !== void 0)) + }); + } + function getConfiguration() { + return { ...get(config) }; + } + function getState() { + return get(currentState); + } + function hide() { + set(visible, false); + } + function log(...args) { + if (get(config).debug || args.some((a) => a instanceof Error)) { + console[args[0] instanceof Error ? "error" : "log"]("ALTCHA", `[name=${get(config).name}]`, ...args); + } + } + function reset$1(newState = State.UNVERIFIED, err = null) { + set(checked, false); + set(error, err, true); + set(payload, null); + if (get(currentController)) { + get(currentController).abort(); + } + if (get(expirationTimeout)) { + clearTimeout(get(expirationTimeout)); + set(expirationTimeout, null); + } + setState(newState); + } + function setState(newState, err = null) { + set(currentState, newState, true); + set(error, err, true); + dispatch("statechange", { payload: get(payload), state: get(currentState) }); + } + function show() { + set(visible, true); + tick().then(() => { + updateUI(); + }); + } + function updateUI() { + switch (get(config).display) { + case "floating": + return repositionFloating(); + } + set(updateUISignal, get(updateUISignal) + 1); + } + async function verify(options = {}) { + const { + concurrency = Math.max(1, get(config).workers), + controller = new AbortController(), + minDuration = get(config).minDuration + } = options; + const start = performance.now(); + let challenge = null; + let solution = null; + let isChallengeV12 = false; + const hook = await callHook("onVerify", options); + if (hook !== void 0) { + return hook; + } + reset$1(State.VERIFYING); + set(currentController, controller, true); + try { + if (!isSecureContext) { + throw new Error("Secure context (HTTPS) required."); + } + if (get(config).mockError) { + throw new Error("Mock error."); + } + if (get(config).test) { + log("running test mode with null challenge"); + await delay(Math.max(0, minDuration - (performance.now() - start))); + if (get(currentController)?.signal.aborted) { + reset$1(); + return null; + } + set(payload, btoa(JSON.stringify({ challenge: null, solution: null, test: true })), true); + log("verified"); + setState(State.VERIFIED); + dispatch("verified", { payload: get(payload) }); + return { payload: get(payload) }; + } + challenge = await fetchChallenge(); + if (!challenge) { + throw new Error("Failed to fetch challenge."); + } + log("challenge", challenge); + if ("configuration" in challenge) { + log("re-configuring from challenge", challenge.configuration); + configure(challenge.configuration); + } + if (challenge.parameters.expiresAt) { + setChallengeExpiration(challenge.parameters.expiresAt); + } + isChallengeV12 = "_version" in challenge && challenge._version === 1; + const createWorker = globalThis.$altcha.algorithms.get(challenge.parameters.algorithm); + if (!createWorker) { + throw new Error(`Unsupported algorithm ${challenge.parameters.algorithm}.`); + } + solution = await solveChallengeWorkers({ + challenge, + concurrency, + controller, + createWorker, + counterMode: isChallengeV12 ? "string" : "uint32", + onOutOfMemory: (c) => { + log("out of memory error received"); + dispatch("outofmemory"); + if (get(config).retryOnOutOfMemoryError && c > 1) { + const retryConcurrency = Math.floor(c / 2); + log(`retrying with ${retryConcurrency} workers...`); + return retryConcurrency; + } + }, + timeout: get(config).timeout + }); + if (get(currentController)?.signal.aborted) { + reset$1(); + return null; + } + if (!solution) { + throw new Error("Failed to find solution."); + } + log("solution", solution); + await delay(Math.max(0, minDuration - (performance.now() - start))); + set(codeChallenge, challenge.codeChallenge || get(config).codeChallenge || null, true); + if (isChallengeV12) { + set(payload, btoa(JSON.stringify(createPayloadV1(challenge, solution))), true); + } else { + set( + payload, + btoa(JSON.stringify({ + challenge: { + parameters: challenge.parameters, + signature: challenge.signature + }, + solution + })), + true + ); + } + if (get(codeChallenge)) { + log("requesting code verification"); + setState(State.CODE); + dispatch("codechallenge", { codeChallenge: get(codeChallenge) }); + } else if (get(config).verifyUrl) { + await verifyServer(); + } else { + log("verified"); + setState(State.VERIFIED); + dispatch("verified", { payload: get(payload) }); + } + } catch (err) { + log("verification failed", err); + setState(State.ERROR, String(err)); + return null; + } finally { + set(currentController, null); + } + return { challenge, payload: get(payload), solution }; + } + var $$exports = { + configure, + getConfiguration, + getState, + hide, + log, + reset: reset$1, + setState, + show, + updateUI, + verify + }; + var fragment = root(); + event("scroll", $document, onDocumentScroll); + event("click", $document, onDocumentClick); + event("pageshow", $window, onWindowPageshow); + event("resize", $window, onWindowResize); + var node = first_child(fragment); + { + var consequent = ($$anchor2) => { + var div = root_1(); + append($$anchor2, div); + }; + if_block(node, ($$render) => { + if (get(config).display === "overlay" && get(visible)) $$render(consequent); + }); + } + var div_1 = sibling(node, 2); + var node_1 = child(div_1); + { + var consequent_2 = ($$anchor2) => { + var fragment_1 = root_2(); + var div_2 = first_child(fragment_1); + var node_2 = sibling(div_2, 2); + { + var consequent_1 = ($$anchor3) => { + var div_3 = root_3(); + html(div_3, () => document.querySelector(get(config).overlayContent)?.innerHTML, true); + reset(div_3); + append($$anchor3, div_3); + }; + if_block(node_2, ($$render) => { + if (get(config).overlayContent) $$render(consequent_1); + }); + } + event("click", div_2, onCloseClick, true); + append($$anchor2, fragment_1); + }; + if_block(node_1, ($$render) => { + if (get(config).display === "overlay" && get(visible)) $$render(consequent_2); + }); + } + var div_4 = sibling(node_1, 2); + var div_5 = child(div_4); + var div_6 = child(div_5); + var node_3 = child(div_6); + { + let $0 = /* @__PURE__ */ user_derived(() => get(config).display === "standard" && get(auto) !== "onsubmit" || get(currentState) === State.VERIFYING); + component(node_3, () => get(CheckboxComponent), ($$anchor2, CheckboxComponent_1) => { + CheckboxComponent_1($$anchor2, { + get id() { + return get(checkboxId); + }, + name: "", + get required() { + return get($0); + }, + get loading() { + return get(loading); + }, + get checked() { + return get(checked); + }, + onchange: onCheckboxChange, + oninvalid: onCheckboxInvalid + }); + }); + } + var label = sibling(node_3, 2); + var node_4 = child(label); + { + var consequent_3 = ($$anchor2) => { + var text$1 = text(); + template_effect(() => set_text(text$1, get(strings).verificationRequired)); + append($$anchor2, text$1); + }; + var consequent_4 = ($$anchor2) => { + var text_1 = text(); + template_effect(() => set_text(text_1, get(strings).verifying)); + append($$anchor2, text_1); + }; + var consequent_5 = ($$anchor2) => { + var text_2 = text(); + template_effect(() => set_text(text_2, get(strings).verified)); + append($$anchor2, text_2); + }; + var alternate = ($$anchor2) => { + var text_3 = text(); + template_effect(() => set_text(text_3, get(strings).label)); + append($$anchor2, text_3); + }; + if_block(node_4, ($$render) => { + if (get(currentState) === State.CODE && get(codeChallenge)) $$render(consequent_3); + else if (get(currentState) === State.VERIFYING) $$render(consequent_4, 1); + else if (get(currentState) === State.VERIFIED) $$render(consequent_5, 2); + else $$render(alternate, -1); + }); + } + reset(label); + reset(div_6); + var node_5 = sibling(div_6, 2); + { + var consequent_6 = ($$anchor2) => { + Logo($$anchor2, { + get strings() { + return get(strings); + } + }); + }; + if_block(node_5, ($$render) => { + if (get(showLogo)) $$render(consequent_6); + }); + } + reset(div_5); + var node_6 = sibling(div_5, 2); + { + var consequent_7 = ($$anchor2) => { + { + let $0 = /* @__PURE__ */ user_derived(() => get(config).display === "bar" && get(showLogo)); + Footer($$anchor2, { + get logo() { + return get($0); + }, + get strings() { + return get(strings); + } + }); + } + }; + if_block(node_6, ($$render) => { + if (get(showFooter)) $$render(consequent_7); + }); + } + var node_7 = sibling(node_6, 2); + { + var consequent_8 = ($$anchor2) => { + var div_7 = root_10(); + bind_this(div_7, ($$value) => set(elAnchorArrow, $$value), () => get(elAnchorArrow)); + append($$anchor2, div_7); + }; + if_block(node_7, ($$render) => { + if (get(config).display === "floating") $$render(consequent_8); + }); + } + var node_8 = sibling(node_7, 2); + { + var consequent_9 = ($$anchor2) => { + var input_1 = root_11(); + remove_input_defaults(input_1); + template_effect(() => { + set_attribute(input_1, "name", get(config).name); + set_value(input_1, get(payload)); + }); + append($$anchor2, input_1); + }; + if_block(node_8, ($$render) => { + if (!get(config).setCookie) $$render(consequent_9); + }); + } + reset(div_4); + var node_9 = sibling(div_4, 2); + { + var consequent_12 = ($$anchor2) => { + Popover($$anchor2, { + get anchor() { + return get(elRoot); + }, + onClickOutside: () => { + if (isSecureContext) { + reset$1(); + } + }, + get placement() { + return get(config).popoverPlacement; + }, + role: "alert", + variant: "error", + get dir() { + return get(dir); + }, + get updateUISignal() { + return get(updateUISignal); + }, + children: ($$anchor3, $$slotProps) => { + var fragment_9 = comment(); + var node_10 = first_child(fragment_9); + { + var consequent_10 = ($$anchor4) => { + var div_8 = root_14(); + append($$anchor4, div_8); + }; + var consequent_11 = ($$anchor4) => { + var div_9 = root_15(); + var text_4 = child(div_9, true); + reset(div_9); + template_effect(() => set_text(text_4, get(strings).expired)); + append($$anchor4, div_9); + }; + var alternate_1 = ($$anchor4) => { + var div_10 = root_16(); + var text_5 = child(div_10, true); + reset(div_10); + template_effect(() => { + set_attribute(div_10, "title", get(error)); + set_text(text_5, get(strings).error); + }); + append($$anchor4, div_10); + }; + if_block(node_10, ($$render) => { + if (!get(error) && !isSecureContext) $$render(consequent_10); + else if (!get(error) && get(currentState) === State.EXPIRED) $$render(consequent_11, 1); + else $$render(alternate_1, -1); + }); + } + append($$anchor3, fragment_9); + }, + $$slots: { default: true } + }); + }; + var consequent_14 = ($$anchor2) => { + var fragment_10 = comment(); + var node_11 = first_child(fragment_10); + key(node_11, () => get(codeChallenge), ($$anchor3) => { + { + let $0 = /* @__PURE__ */ user_derived(() => get(config).codeChallengeDisplay !== "standard"); + Popover($$anchor3, { + get anchor() { + return get(elRoot); + }, + get backdrop() { + return get($0); + }, + get display() { + return get(config).codeChallengeDisplay; + }, + onClose: () => { + reset$1(); + }, + get placement() { + return get(config).popoverPlacement; + }, + role: "dialog", + get "aria-label"() { + return get(strings).verificationRequired; + }, + get dir() { + return get(dir); + }, + get updateUISignal() { + return get(updateUISignal); + }, + children: ($$anchor4, $$slotProps) => { + var fragment_12 = root_19(); + var node_12 = first_child(fragment_12); + Code(node_12, { + get audioUrl() { + return get(codeChallengeAudioUrl); + }, + get imageUrl() { + return get(codeChallengeImageUrl); + }, + onCancel: () => reset$1(), + onReload: () => verify(), + onSubmit: (code) => verifyServer(code), + get codeChallenge() { + return get(codeChallenge); + }, + get config() { + return get(config); + }, + get strings() { + return get(strings); + } + }); + var node_13 = sibling(node_12, 2); + { + var consequent_13 = ($$anchor5) => { + Footer($$anchor5, { + get logo() { + return get(showLogo); + }, + get strings() { + return get(strings); + } + }); + }; + if_block(node_13, ($$render) => { + if (get(showFooter) && get(config).codeChallengeDisplay !== "standard") $$render(consequent_13); + }); + } + append($$anchor4, fragment_12); + }, + $$slots: { default: true } + }); + } + }); + append($$anchor2, fragment_10); + }; + if_block(node_9, ($$render) => { + if (get(error) || get(currentState) === State.EXPIRED || !isSecureContext) $$render(consequent_12); + else if (get(codeChallenge) && get(currentState) === State.CODE) $$render(consequent_14, 1); + }); + } + reset(div_1); + bind_this(div_1, ($$value) => set(elRoot, $$value), () => get(elRoot)); + template_effect( + ($0) => { + set_attribute(div_1, "data-state", get(currentState)); + set_attribute(div_1, "data-display", get(config).display || void 0); + set_attribute(div_1, "data-placement", $0); + set_attribute(div_1, "data-visible", get(visible) || void 0); + set_attribute(div_1, "dir", get(dir)); + set_attribute(label, "for", get(checkboxId)); + div_1.dir = div_1.dir; + }, + [() => getPlacement(get(config).display)] + ); + append($$anchor, fragment); + var $$pop = pop($$exports); + $$cleanup(); + return $$pop; + } + if (typeof window !== "undefined" && window.customElements && !customElements.get("altcha-widget")) customElements.define("altcha-widget", create_custom_element( + Widget, + { + auto: { type: "String" }, + challenge: { type: "String" }, + configuration: { type: "String" }, + display: { type: "String" }, + language: { type: "String" }, + name: { type: "String" }, + theme: { type: "String" }, + type: { type: "String" }, + workers: { type: "Number" } + }, + [], + [ + "configure", + "getConfiguration", + "getState", + "hide", + "log", + "reset", + "setState", + "show", + "updateUI", + "verify" + ] + )); + const jsContent$1 = `(function() { + "use strict"; + function bufferStartsWith(buffer, prefix) { + if (prefix.length > buffer.length) { + return false; + } + for (let i = 0; i < prefix.length; i++) { + if (buffer[i] !== prefix[i]) { + return false; + } + } + return true; + } + function bufferToHex(buffer) { + return Array.from(new Uint8Array(buffer)).map((b) => b.toString(16).padStart(2, "0")).join(""); + } + function concatBuffers(a, b) { + const out = new Uint8Array(a.length + b.length); + out.set(a, 0); + out.set(b, a.length); + return out; + } + function hexToBuffer(hex) { + if (hex.length % 2 !== 0) { + throw new Error(\`Hex string must have an even length. Got: \${hex}\`); + } + const buffer = new ArrayBuffer(hex.length / 2); + const view = new DataView(buffer); + for (let i = 0; i < hex.length; i += 2) { + const byteString = hex.substring(i, i + 2); + const byteValue = parseInt(byteString, 16); + view.setUint8(i / 2, byteValue); + } + return new Uint8Array(buffer); + } + async function delay(ms) { + await new Promise((resolve) => setTimeout(resolve, ms)); + } + function timeDuration(start) { + return Math.floor((performance.now() - start) * 10) / 10; + } + class PasswordBuffer { + constructor(nonce, mode = "uint32") { + this.nonce = nonce; + this.mode = mode; + this.buffer = new Uint8Array(this.nonce.length + this.COUNTER_BYTES); + this.buffer.set(this.nonce, 0); + this.dataView = new DataView(this.buffer.buffer); + } + nonce; + mode; + COUNTER_BYTES = 4; + buffer; + dataView; + encoder = new TextEncoder(); + /** + * Appends the counter to the nonce buffer. + * In 'string' mode, encodes the counter as a UTF-8 string. + * In 'uint32' mode, writes the counter as a big-endian 32-bit integer. + */ + setCounter(n) { + if (this.mode === "string") { + return concatBuffers(this.nonce, this.encoder.encode(n.toString())); + } + this.dataView.setUint32(this.nonce.length, n, false); + return this.buffer; + } + } + async function solveChallenge(options) { + const { + challenge, + controller, + counterMode = "uint32", + counterStart = 0, + counterStep = 1, + deriveKey: deriveKey2, + timeout = 9e4 + } = options; + const { nonce, keyPrefix, salt } = challenge.parameters; + const nonceBuf = hexToBuffer(nonce); + const saltBuf = hexToBuffer(salt); + const keyPrefixBuf = keyPrefix.length % 2 === 0 ? hexToBuffer(keyPrefix) : null; + const password = new PasswordBuffer(nonceBuf, counterMode); + const start = performance.now(); + let counter = counterStart; + let iterations = 0; + let derivedKeyHex = ""; + let lastYield = start; + while (true) { + if (controller?.signal.aborted || timeout && iterations % 10 === 0 && performance.now() - start > timeout) { + return null; + } + const { derivedKey } = await deriveKey2( + challenge.parameters, + saltBuf, + password.setCounter(counter) + ); + if (iterations % 10 === 0 && performance.now() - lastYield > 200) { + await delay(0); + lastYield = performance.now(); + } + if (keyPrefixBuf ? bufferStartsWith(derivedKey, keyPrefixBuf) : bufferToHex(derivedKey).startsWith(keyPrefix)) { + derivedKeyHex = bufferToHex(derivedKey); + break; + } + counter = counter + counterStep; + iterations = iterations + 1; + } + return { + counter, + derivedKey: derivedKeyHex, + time: timeDuration(start) + }; + } + function handler(options) { + const { deriveKey: deriveKey2 } = options; + let controller = void 0; + self.onmessage = async (message) => { + const { challenge, counterMode, counterStart, counterStep, timeout, type } = message.data; + if (type === "abort") { + controller?.abort(); + } else if (type === "work") { + controller = new AbortController(); + let solution; + try { + solution = await solveChallenge({ + challenge, + controller, + counterStart, + counterStep, + deriveKey: deriveKey2, + counterMode, + timeout + }); + } catch (err) { + return self.postMessage({ error: err }); + } + self.postMessage(solution); + } + }; + } + function getDigest(algorithm) { + switch (algorithm) { + case "PBKDF2/SHA-512": + return "SHA-512"; + case "PBKDF2/SHA-384": + return "SHA-384"; + case "PBKDF2/SHA-256": + default: + return "SHA-256"; + } + } + async function deriveKey(parameters, salt, password) { + const { algorithm, cost, keyLength = 32 } = parameters; + const passwordKey = await crypto.subtle.importKey( + "raw", + password, + { name: "PBKDF2" }, + false, + ["deriveKey"] + ); + const derivedKey = await crypto.subtle.deriveKey( + { + name: "PBKDF2", + salt, + iterations: cost, + hash: getDigest(algorithm) + }, + passwordKey, + { name: "AES-GCM", length: keyLength * 8 }, + true, + ["encrypt"] + ); + return { + derivedKey: new Uint8Array(await crypto.subtle.exportKey("raw", derivedKey)) + }; + } + handler({ + deriveKey + }); +})(); +`; + const blob$1 = typeof self !== "undefined" && self.Blob && new Blob(["(self.URL || self.webkitURL).revokeObjectURL(self.location.href);", jsContent$1], { type: "text/javascript;charset=utf-8" }); + function WorkerWrapper$1(options) { + let objURL; + try { + objURL = blob$1 && (self.URL || self.webkitURL).createObjectURL(blob$1); + if (!objURL) throw ""; + const worker = new Worker(objURL, { + name: options?.name + }); + worker.addEventListener("error", () => { + (self.URL || self.webkitURL).revokeObjectURL(objURL); + }); + return worker; + } catch (e) { + return new Worker( + "data:text/javascript;charset=utf-8," + encodeURIComponent(jsContent$1), + { + name: options?.name + } + ); + } + } + const jsContent = `(function() { + "use strict"; + function bufferStartsWith(buffer, prefix) { + if (prefix.length > buffer.length) { + return false; + } + for (let i = 0; i < prefix.length; i++) { + if (buffer[i] !== prefix[i]) { + return false; + } + } + return true; + } + function bufferToHex(buffer) { + return Array.from(new Uint8Array(buffer)).map((b) => b.toString(16).padStart(2, "0")).join(""); + } + function concatBuffers(a, b) { + const out = new Uint8Array(a.length + b.length); + out.set(a, 0); + out.set(b, a.length); + return out; + } + function hexToBuffer(hex) { + if (hex.length % 2 !== 0) { + throw new Error(\`Hex string must have an even length. Got: \${hex}\`); + } + const buffer = new ArrayBuffer(hex.length / 2); + const view = new DataView(buffer); + for (let i = 0; i < hex.length; i += 2) { + const byteString = hex.substring(i, i + 2); + const byteValue = parseInt(byteString, 16); + view.setUint8(i / 2, byteValue); + } + return new Uint8Array(buffer); + } + async function delay(ms) { + await new Promise((resolve) => setTimeout(resolve, ms)); + } + function timeDuration(start) { + return Math.floor((performance.now() - start) * 10) / 10; + } + class PasswordBuffer { + constructor(nonce, mode = "uint32") { + this.nonce = nonce; + this.mode = mode; + this.buffer = new Uint8Array(this.nonce.length + this.COUNTER_BYTES); + this.buffer.set(this.nonce, 0); + this.dataView = new DataView(this.buffer.buffer); + } + nonce; + mode; + COUNTER_BYTES = 4; + buffer; + dataView; + encoder = new TextEncoder(); + /** + * Appends the counter to the nonce buffer. + * In 'string' mode, encodes the counter as a UTF-8 string. + * In 'uint32' mode, writes the counter as a big-endian 32-bit integer. + */ + setCounter(n) { + if (this.mode === "string") { + return concatBuffers(this.nonce, this.encoder.encode(n.toString())); + } + this.dataView.setUint32(this.nonce.length, n, false); + return this.buffer; + } + } + async function solveChallenge(options) { + const { + challenge, + controller, + counterMode = "uint32", + counterStart = 0, + counterStep = 1, + deriveKey: deriveKey2, + timeout = 9e4 + } = options; + const { nonce, keyPrefix, salt } = challenge.parameters; + const nonceBuf = hexToBuffer(nonce); + const saltBuf = hexToBuffer(salt); + const keyPrefixBuf = keyPrefix.length % 2 === 0 ? hexToBuffer(keyPrefix) : null; + const password = new PasswordBuffer(nonceBuf, counterMode); + const start = performance.now(); + let counter = counterStart; + let iterations = 0; + let derivedKeyHex = ""; + let lastYield = start; + while (true) { + if (controller?.signal.aborted || timeout && iterations % 10 === 0 && performance.now() - start > timeout) { + return null; + } + const { derivedKey } = await deriveKey2( + challenge.parameters, + saltBuf, + password.setCounter(counter) + ); + if (iterations % 10 === 0 && performance.now() - lastYield > 200) { + await delay(0); + lastYield = performance.now(); + } + if (keyPrefixBuf ? bufferStartsWith(derivedKey, keyPrefixBuf) : bufferToHex(derivedKey).startsWith(keyPrefix)) { + derivedKeyHex = bufferToHex(derivedKey); + break; + } + counter = counter + counterStep; + iterations = iterations + 1; + } + return { + counter, + derivedKey: derivedKeyHex, + time: timeDuration(start) + }; + } + function handler(options) { + const { deriveKey: deriveKey2 } = options; + let controller = void 0; + self.onmessage = async (message) => { + const { challenge, counterMode, counterStart, counterStep, timeout, type } = message.data; + if (type === "abort") { + controller?.abort(); + } else if (type === "work") { + controller = new AbortController(); + let solution; + try { + solution = await solveChallenge({ + challenge, + controller, + counterStart, + counterStep, + deriveKey: deriveKey2, + counterMode, + timeout + }); + } catch (err) { + return self.postMessage({ error: err }); + } + self.postMessage(solution); + } + }; + } + async function deriveKey(parameters, salt, password) { + const { algorithm, keyLength = 32 } = parameters; + const iterations = Math.max(1, parameters.cost); + let data = void 0; + let derivedKey = void 0; + for (let i = 0; i < iterations; i++) { + if (i === 0) { + data = concatBuffers(salt, password); + } else { + data = derivedKey; + } + derivedKey = new Uint8Array( + (await crypto.subtle.digest(algorithm, data)).slice(0, keyLength) + ); + } + return { + parameters: {}, + derivedKey + }; + } + handler({ + deriveKey + }); +})(); +`; + const blob = typeof self !== "undefined" && self.Blob && new Blob(["(self.URL || self.webkitURL).revokeObjectURL(self.location.href);", jsContent], { type: "text/javascript;charset=utf-8" }); + function WorkerWrapper(options) { + let objURL; + try { + objURL = blob && (self.URL || self.webkitURL).createObjectURL(blob); + if (!objURL) throw ""; + const worker = new Worker(objURL, { + name: options?.name + }); + worker.addEventListener("error", () => { + (self.URL || self.webkitURL).revokeObjectURL(objURL); + }); + return worker; + } catch (e) { + return new Worker( + "data:text/javascript;charset=utf-8," + encodeURIComponent(jsContent), + { + name: options?.name + } + ); + } + } + const css = ':root {\n --altcha-border-color: var(--altcha-color-neutral);\n --altcha-border-width: 1px;\n --altcha-border-radius: 6px;\n --altcha-color-base: light-dark(oklch(100% 0.00011 271.152), oklch(20.904% 0.00002 271.152));\n --altcha-color-base-content: light-dark(\n oklch(20.904% 0.00002 271.152),\n oklch(100% 0.00011 271.152)\n );\n --altcha-color-error: oklch(51.284% 0.20527 28.678);\n --altcha-color-error-content: oklch(100% 0.00011 271.152);\n --altcha-color-neutral: light-dark(oklch(83.591% 0.0001 271.152), oklch(46.04% 0.00005 271.152));\n --altcha-color-neutral-content: light-dark(\n oklch(46.76% 0.00005 271.152),\n oklch(100% 0.00011 271.152)\n );\n --altcha-color-primary: oklch(40.279% 0.2449 268.131);\n --altcha-color-primary-content: oklch(100% 0.00011 271.152);\n --altcha-color-success: oklch(55.748% 0.18968 142.511);\n --altcha-color-success-content: oklch(100% 0.00011 271.152);\n --altcha-checkbox-border-color: light-dark(\n oklch(66.494% 0.00233 15.434),\n oklch(51.028% 0.00006 271.152)\n );\n --altcha-checkbox-border-radius: 5px;\n --altcha-checkbox-border-width: var(--altcha-border-width);\n --altcha-checkbox-outline: 2px solid var(--altcha-checkbox-outline-color);\n --altcha-checkbox-outline-color: -webkit-focus-ring-color;\n --altcha-checkbox-outline-offset: 2px;\n --altcha-checkbox-size: 22px;\n --altcha-checkbox-transition-duration: var(--altcha-transition-duration);\n --altcha-input-background-color: var(--altcha-color-base);\n --altcha-input-border-radius: 3px;\n --altcha-input-border-width: 1px;\n --altcha-input-color: var(--altcha-color-base-content);\n --altcha-max-width: 320px;\n --altcha-padding: 0.75rem;\n --altcha-popover-arrow-size: 6px;\n --altcha-popover-color: var(--altcha-border-color);\n --altcha-shadow: drop-shadow(3px 3px 6px oklch(0% 0 0 / 0.2));\n --altcha-spinner-color: var(--altcha-color-base-content);\n --altcha-switch-background-color: var(--altcha-color-neutral);\n --altcha-switch-border-radius: calc(infinity * 1px);\n --altcha-switch-height: var(--altcha-checkbox-size);\n --altcha-switch-padding: 0.25rem;\n --altcha-switch-width: calc(var(--altcha-checkbox-size) * 1.75);\n --altcha-switch-toggle-border-radius: 100%;\n --altcha-switch-toggle-color: var(--altcha-color-neutral-content);\n --altcha-switch-toggle-size: calc(\n var(--altcha-switch-height) - calc(var(--altcha-switch-padding) * 2)\n );\n --altcha-transition-duration: 0.6s;\n --altcha-z-index: 99999999;\n --altcha-z-index-popover: 999999999;\n}\n\n@supports (-moz-appearance: none) {\n :root {\n --altcha-checkbox-outline-color: var(--altcha-color-primary);\n }\n}\n.altcha {\n all: revert-layer;\n display: none;\n font-family: inherit;\n font-size: inherit;\n position: relative;\n}\n.altcha[data-visible] {\n display: block;\n}\n.altcha-popover, .altcha-popover * {\n all: revert-layer;\n box-sizing: border-box;\n font-family: inherit;\n font-size: inherit;\n line-height: 1.25;\n}\n.altcha * {\n all: revert-layer;\n box-sizing: border-box;\n font-family: inherit;\n font-size: inherit;\n line-height: 1.25;\n}\n.altcha a, .altcha-popover a {\n color: currentColor;\n text-decoration: none;\n}\n.altcha a:hover, .altcha-popover a:hover {\n color: currentColor;\n}\n.altcha-main {\n align-items: start;\n background-color: var(--altcha-color-base);\n border: var(--altcha-border-width, 1px) solid var(--altcha-border-color);\n border-radius: var(--altcha-border-radius, 0);\n color: var(--altcha-color-base-content);\n display: flex;\n flex-direction: column;\n gap: 0.5rem;\n justify-content: space-between;\n padding: var(--altcha-padding);\n max-width: var(--altcha-max-width, 100%);\n}\n.altcha-main > * {\n display: flex;\n width: 100%;\n}\n.altcha-main > *:first-child {\n flex-grow: 1;\n}\n.altcha-checkbox-wrap {\n align-items: center;\n display: flex;\n flex-direction: row;\n flex-grow: 1;\n gap: 0.5rem;\n}\n.altcha-checkbox-wrap > * {\n display: flex;\n}\n.altcha-logo {\n opacity: 0.7;\n}\n.altcha-footer {\n align-items: center;\n display: flex;\n flex-grow: 1;\n gap: 0.5rem;\n justify-content: flex-end;\n font-size: 0.7rem;\n opacity: 0.7;\n}\n.altcha-footer p {\n margin: 0;\n padding: 0;\n}\n.altcha-error {\n font-size: 0.85rem;\n}\n.altcha-button {\n align-items: center;\n background: var(--altcha-color-primary);\n border: var(--altcha-input-border-width) solid var(--altcha-color-primary);\n border-radius: var(--altcha-input-border-radius);\n color: var(--altcha-color-primary-content);\n cursor: pointer;\n display: flex;\n font-size: 0.9rem;\n gap: 0.5rem;\n padding: 0.35rem;\n}\n.altcha-button:focus {\n border-color: var(--altcha-color-primary);\n outline: var(--altcha-checkbox-outline);\n outline-offset: var(--altcha-checkbox-outline-offset);\n}\n.altcha-button > .altcha-spinner, .altcha-button > svg {\n height: 20px;\n width: 20px;\n}\n.altcha-button-secondary {\n background: transparent;\n border-color: var(--altcha-color-neutral);\n color: var(--altcha-color-neutral-content);\n}\n.altcha-input {\n background: var(--altcha-input-background-color);\n border: var(--altcha-input-border-width) solid var(--altcha-color-neutral);\n border-radius: var(--altcha-input-border-radius);\n color: var(--altcha-input-color);\n flex-grow: 1;\n font-size: 1rem;\n min-width: 0;\n padding: 0.25rem;\n width: auto;\n}\n.altcha-input:focus {\n border-color: var(--altcha-color-primary);\n outline: var(--altcha-checkbox-outline);\n outline-offset: var(--altcha-checkbox-outline-offset);\n}\n.altcha-spinner {\n animation: altcha-rotate 0.6s linear infinite;\n border-radius: 100%;\n border: var(--altcha-checkbox-border-width) solid var(--altcha-spinner-color);\n border-bottom-color: transparent;\n border-right-color: transparent;\n opacity: 0.7;\n}\n.altcha-popover {\n background-color: var(--altcha-color-base);\n border: var(--altcha-border-width) solid var(--altcha-border-color);\n border-radius: var(--altcha-border-radius);\n color: var(--altcha-color-base-content);\n filter: var(--altcha-shadow);\n position: absolute;\n left: calc(var(--altcha-padding) / 2);\n max-width: calc(var(--altcha-max-width) - var(--altcha-padding));\n top: calc(var(--altcha-padding) + var(--altcha-checkbox-size) + var(--altcha-popover-arrow-size));\n z-index: var(--altcha-z-index-popover);\n}\n.altcha-popover-arrow {\n border: var(--altcha-popover-arrow-size) solid transparent;\n border-bottom-color: var(--altcha-popover-color);\n content: "";\n height: 0;\n left: calc(var(--altcha-checkbox-size) / 2);\n position: absolute;\n top: calc(var(--altcha-popover-arrow-size) * -2);\n width: 0;\n}\n.altcha-popover-content {\n max-height: 100dvh;\n overflow: auto;\n padding: var(--altcha-padding);\n}\n.altcha-popover[data-top=true][data-display=standard] {\n bottom: calc(100% - (var(--altcha-padding) - var(--altcha-popover-arrow-size)));\n top: auto;\n}\n.altcha-popover[data-top=true][data-display=standard] .altcha-popover-arrow {\n border-bottom-color: transparent;\n border-top-color: var(--altcha-popover-color);\n bottom: calc(var(--altcha-popover-arrow-size) * -2);\n top: auto;\n}\n.altcha-popover[data-variant=error] {\n --altcha-popover-color: var(--altcha-color-error);\n background-color: var(--altcha-color-error);\n border-color: var(--altcha-color-error);\n color: var(--altcha-color-error-content);\n}\n.altcha-popover[data-variant=error] .altcha-popover-content {\n padding: calc(var(--altcha-padding) / 1.5) var(--altcha-padding);\n}\n.altcha-popover[data-display=overlay] {\n animation: altcha-overlay-slidein 0.5s forwards;\n left: 50%;\n position: fixed;\n top: 45%;\n transform: translate(-50%, -50%);\n width: var(--altcha-max-width);\n z-index: var(--altcha-z-index);\n}\n.altcha-popover[data-display=bottomsheet] {\n animation: altcha-bottomsheet-slideup 0.5s forwards;\n border-bottom-left-radius: 0;\n border-bottom-right-radius: 0;\n border-bottom: 0;\n bottom: -100%;\n left: 50%;\n position: fixed;\n top: auto;\n transform: translate(-50%, 0);\n width: var(--altcha-max-width);\n z-index: var(--altcha-z-index);\n}\n.altcha-popover[data-display=bottomsheet] .altcha-popover-content {\n padding-bottom: calc(var(--altcha-padding) * 2);\n}\n.altcha-popover-backdrop {\n background: var(--altcha-color-base-content);\n bottom: 0;\n left: 0;\n opacity: 0.1;\n position: fixed;\n right: 0;\n top: 0;\n transition: opacity 0.5s;\n z-index: var(--altcha-z-index);\n}\n.altcha-popover-close {\n color: var(--altcha-color-base-content);\n cursor: pointer;\n display: inline-block;\n font-size: 1rem;\n height: 1.25rem;\n line-height: 0.95;\n position: absolute;\n right: 0;\n text-align: center;\n text-shadow: 0 0 1px var(--altcha-color-base);\n top: -1.5rem;\n width: 1.25rem;\n z-index: var(--altcha-z-index);\n}\n[dir=rtl] .altcha-popover {\n left: auto;\n right: calc(var(--altcha-padding) / 2);\n}\n[dir=rtl] .altcha-popover-arrow {\n left: auto;\n right: calc(var(--altcha-checkbox-size) / 2);\n}\n[dir=rtl] .altcha-popover-close {\n left: 0;\n right: auto;\n}\n.altcha-popover[data-display=bottomsheet] .altcha-footer, .altcha-popover[data-display=overlay] .altcha-footer {\n align-items: center;\n justify-content: center;\n padding-top: 1rem;\n gap: 0.5rem;\n}\n.altcha-popover[data-display=bottomsheet] .altcha-footer svg, .altcha-popover[data-display=overlay] .altcha-footer svg {\n height: 18px;\n width: 18px;\n vertical-align: middle;\n}\n.altcha-code-challenge > form {\n display: flex;\n flex-direction: column;\n gap: 0.5rem;\n}\n.altcha-code-challenge-title {\n font-weight: 600;\n}\n.altcha-code-challenge-text {\n font-size: 0.85rem;\n}\n.altcha-code-challenge-image {\n background: white;\n border: var(--altcha-input-border-width) solid var(--altcha-color-neutral);\n border-radius: var(--altcha-input-border-radius);\n object-fit: contain;\n height: 50px;\n}\n.altcha-code-challenge-row {\n display: flex;\n gap: 0.5rem;\n}\n.altcha-code-challenge-buttons {\n align-items: center;\n display: flex;\n flex-direction: column;\n gap: 0.5rem;\n margin-top: var(--altcha-padding);\n justify-content: space-between;\n}\n.altcha-code-challenge-buttons button {\n justify-content: center;\n width: 100%;\n}\n.altcha-checkbox {\n cursor: pointer;\n height: var(--altcha-checkbox-size);\n position: relative;\n width: var(--altcha-checkbox-size);\n}\n.altcha-checkbox input {\n appearance: none;\n background: var(--altcha-input-background-color);\n border: var(--altcha-checkbox-border-width, 2px) solid var(--altcha-checkbox-border-color);\n border-radius: var(--altcha-checkbox-border-radius);\n cursor: pointer;\n height: var(--altcha-checkbox-size);\n left: 0;\n margin: 0;\n padding: 0;\n position: absolute;\n top: 0;\n width: var(--altcha-checkbox-size);\n}\n@supports (hanging-punctuation: first) and (font: -apple-system-body) and (-webkit-appearance: none) {\n .altcha-checkbox input {\n /* Safari-only: fixes focus outline */\n }\n .altcha-checkbox input:focus {\n outline-width: 2px;\n outline-style: solid;\n }\n}\n.altcha-checkbox input:before {\n border-radius: var(--altcha-checkbox-border-radius);\n content: "";\n width: 100%;\n height: 100%;\n background: var(--altcha-color-neutral);\n display: block;\n transform: scale(0);\n}\n.altcha-checkbox input:checked {\n background-color: var(--altcha-color-success);\n border-color: var(--altcha-color-success);\n}\n.altcha-checkbox input:checked::before {\n background-color: var(--altcha-color-success);\n opacity: 0;\n transform: scale(2.2);\n transition: all var(--altcha-checkbox-transition-duration) ease;\n transition-delay: 0.1s;\n}\n.altcha-checkbox svg {\n --altcha-radio-svg-size: calc(var(--altcha-checkbox-size) * 0.5);\n --altcha-radio-svg-offset: calc(var(--altcha-checkbox-size) * 0.25);\n fill: none;\n left: var(--altcha-radio-svg-offset);\n height: var(--altcha-radio-svg-size);\n opacity: 0;\n position: absolute;\n stroke: currentColor;\n stroke-width: 2;\n stroke-linecap: round;\n stroke-linejoin: round;\n stroke-dasharray: 16px;\n stroke-dashoffset: 16px;\n top: var(--altcha-radio-svg-offset);\n transform: translate3d(0, 0, 0);\n width: var(--altcha-radio-svg-size);\n}\n.altcha-checkbox input:checked + svg {\n color: var(--altcha-color-success-content);\n opacity: 1;\n stroke-dashoffset: 0;\n transition: all var(--altcha-checkbox-transition-duration) ease;\n transition-delay: 0.1s;\n}\n.altcha-checkbox-spinner {\n display: none;\n left: 0;\n height: var(--altcha-checkbox-size);\n position: absolute;\n top: 0;\n width: var(--altcha-checkbox-size);\n}\n.altcha-checkbox[data-loading=true] input {\n appearance: none;\n opacity: 0;\n pointer-events: none;\n}\n.altcha-checkbox[data-loading=true] .altcha-checkbox-spinner {\n display: block;\n}\n.altcha-checkbox-native {\n height: var(--altcha-checkbox-size);\n position: relative;\n width: var(--altcha-checkbox-size);\n}\n.altcha-checkbox-native input {\n height: var(--altcha-checkbox-size);\n margin: 0;\n width: var(--altcha-checkbox-size);\n}\n.altcha-checkbox-native-spinner {\n display: none;\n left: 0;\n height: var(--altcha-checkbox-size);\n position: absolute;\n top: 0;\n width: var(--altcha-checkbox-size);\n}\n.altcha-checkbox-native[data-loading=true] input {\n appearance: none;\n opacity: 0;\n pointer-events: none;\n}\n.altcha-checkbox-native[data-loading=true] .altcha-checkbox-native-spinner {\n display: block;\n}\n.altcha-switch {\n align-items: center;\n border-radius: var(--altcha-switch-border-radius);\n background-color: var(--altcha-switch-background-color);\n display: flex;\n height: var(--altcha-switch-height);\n padding: var(--altcha-switch-padding);\n position: relative;\n width: var(--altcha-switch-width);\n}\n.altcha-switch:focus-within {\n outline: var(--altcha-checkbox-outline);\n outline-offset: var(--altcha-checkbox-outline-offset);\n}\n.altcha-switch input {\n appearance: none;\n cursor: pointer;\n height: 100%;\n left: 0;\n opacity: 0;\n position: absolute;\n top: 0;\n width: 100%;\n}\n.altcha-switch-toggle {\n align-items: center;\n background-color: var(--altcha-switch-toggle-color);\n border-radius: var(--altcha-switch-toggle-border-radius);\n cursor: pointer;\n display: flex;\n height: var(--altcha-switch-toggle-size);\n justify-content: center;\n left: var(--altcha-switch-padding);\n position: absolute;\n transition: width 150ms ease-out, left 150ms ease-out;\n width: var(--altcha-switch-toggle-size);\n}\n.altcha-switch-spinner {\n display: none;\n height: var(--altcha-switch-toggle-size);\n width: var(--altcha-switch-toggle-size);\n}\n.altcha-switch[data-loading=true] {\n pointer-events: none;\n}\n.altcha-switch[data-loading=true] .altcha-switch-spinner {\n display: block;\n}\n.altcha-switch[data-loading=true] .altcha-switch-toggle {\n background-color: transparent;\n left: calc(50% - var(--altcha-switch-toggle-size) / 2);\n}\n[data-state=verified] .altcha-switch {\n --altcha-switch-background-color: var(--altcha-color-success);\n}\n[data-state=verified] .altcha-switch-toggle {\n background-color: var(--altcha-color-success-content);\n left: calc(100% - var(--altcha-switch-height) + var(--altcha-switch-padding));\n}\n[dir=rtl] .altcha-switch-toggle {\n left: calc(100% - var(--altcha-switch-height) + var(--altcha-switch-padding));\n}\n[dir=rtl][data-state=verified] .altcha-switch-toggle {\n left: var(--altcha-switch-padding);\n}\n.altcha-floating-arrow {\n border: 6px solid transparent;\n border-bottom-color: var(--altcha-border-color);\n content: "";\n height: 0;\n left: 12px;\n position: absolute;\n top: -12px;\n width: 0;\n}\n.altcha-overlay-backdrop {\n bottom: 0;\n left: 0;\n position: fixed;\n right: 0;\n top: 0;\n transition: opacity var(--altcha-transition-duration);\n z-index: var(--altcha-z-index);\n}\n.altcha-overlay-close {\n display: inline-block;\n color: currentColor;\n cursor: pointer;\n font-size: 1rem;\n height: 1rem;\n line-height: 0.85;\n position: absolute;\n right: 0;\n text-align: center;\n text-shadow: 0 0 1px var(--altcha-color-base);\n top: -1.5rem;\n width: 1rem;\n z-index: var(--altcha-z-index);\n}\n.altcha[data-display=overlay] {\n animation: altcha-overlay-slidein var(--altcha-transition-duration) forwards;\n filter: var(--altcha-shadow);\n left: 50%;\n opacity: 0;\n position: fixed;\n top: 45%;\n transform: translate(-50%, -50%);\n z-index: var(--altcha-z-index);\n}\n.altcha[data-display=overlay] .altcha-main {\n width: var(--altcha-max-width);\n}\n.altcha[data-display=floating] {\n display: none;\n filter: var(--altcha-shadow);\n left: var(--altcha-floating-left, -100%);\n position: fixed;\n top: var(--altcha-floating-top, -100%);\n z-index: var(--altcha-z-index);\n}\n.altcha[data-display=floating] .altcha-main {\n width: var(--altcha-max-width);\n}\n.altcha[data-display=floating][data-floating-position=top] .altcha-floating-arrow {\n border-bottom-color: transparent;\n border-top-color: var(--altcha-border-color);\n bottom: -12px;\n top: auto;\n}\n.altcha[data-display=floating][data-visible] {\n display: flex;\n}\n.altcha[data-display=bar] {\n bottom: -100%;\n filter: var(--altcha-shadow);\n left: 0;\n position: fixed;\n right: 0;\n transition: bottom var(--altcha-transition-duration), top var(--altcha-transition-duration);\n z-index: var(--altcha-z-index);\n}\n.altcha[data-display=bar] .altcha-main {\n align-items: center;\n border-radius: 0;\n border-width: var(--altcha-border-width) 0 0 0;\n flex-direction: row;\n max-width: 100% !important;\n}\n.altcha[data-display=bar] .altcha-main > * {\n width: auto;\n}\n.altcha[data-display=bar][data-placement=top] {\n bottom: auto;\n top: -100%;\n}\n.altcha[data-display=bar][data-placement=top] .altcha-main {\n border-width: 0 0 var(--altcha-border-width) 0;\n}\n.altcha[data-display=bar][data-placement=bottom]:not([data-state=unverified]) {\n bottom: 0;\n}\n.altcha[data-display=bar][data-placement=top]:not([data-state=unverified]) {\n top: 0;\n}\n.altcha[data-display=invisible] {\n display: none;\n}\n\n@keyframes altcha-rotate {\n 0% {\n transform: rotate(0deg);\n }\n 100% {\n transform: rotate(360deg);\n }\n}\n@keyframes altcha-bottomsheet-slideup {\n 100% {\n bottom: 0;\n }\n}\n@keyframes altcha-overlay-slidein {\n 100% {\n opacity: 1;\n top: 50%;\n }\n}'; + injectCss(css); + $altcha.algorithms.set("SHA-256", () => new WorkerWrapper()); + $altcha.algorithms.set("SHA-384", () => new WorkerWrapper()); + $altcha.algorithms.set("SHA-512", () => new WorkerWrapper()); + $altcha.algorithms.set("PBKDF2/SHA-256", () => new WorkerWrapper$1()); + $altcha.algorithms.set("PBKDF2/SHA-384", () => new WorkerWrapper$1()); + $altcha.algorithms.set("PBKDF2/SHA-512", () => new WorkerWrapper$1()); + const i18n$Y = { + ariaLinkLabel: "Altcha (الموقع الرسمي)", + enterCode: "أدخل الرمز", + enterCodeAria: "أدخل الرمز الذي تسمعه. اضغط على المسافة لتشغيل الصوت.", + error: "فشل التحقق. حاول مرة أخرى لاحقاً.", + expired: "انتهت صلاحية التحقق. حاول مرة أخرى.", + footer: 'محمي بواسطة ALTCHA', + getAudioChallenge: "احصل على تحدي صوتي", + label: "أنا لست روبوتاً", + loading: "جارٍ التحميل...", + reload: "إعادة تحميل", + verify: "تحقق", + verificationRequired: "مطلوب التحقق!", + verified: "تم التحقق", + verifying: "جارٍ التحقق...", + waitAlert: "جارٍ التحقق... يرجى الانتظار.", + cancel: "إلغاء", + enterCodeFromImage: "للمتابعة، يرجى إدخال الرمز من الصورة أدناه." + }; + globalThis.$altcha.i18n.set("ar", i18n$Y); + const i18n$X = { + ariaLinkLabel: "Altcha (официален уебсайт)", + enterCode: "Въведете код", + enterCodeAria: "Въведете кода, който чувате. Натиснете Space за възпроизвеждане на аудио.", + error: "Проверката неуспешна. Моля, опитайте по-късно.", + expired: "Времето за проверка изтече. Моля, опитайте отново.", + footer: 'Защитено от ALTCHA', + getAudioChallenge: "Аудио проверка", + label: "Аз не съм робот", + loading: "Зареждане...", + reload: "Презареди", + verify: "Провери", + verificationRequired: "Изисква се проверка!", + verified: "Проверено", + verifying: "Проверява се...", + waitAlert: "Проверката е в процес... моля изчакайте.", + cancel: "Отказ", + enterCodeFromImage: "За да продължите, моля, въведете кода от изображението по-долу." + }; + globalThis.$altcha.i18n.set("bg", i18n$X); + const i18n$W = { + ariaLinkLabel: "Altcha (афіцыйны сайт)", + enterCode: "Увядзіце код", + enterCodeAria: "Увядзіце код, які вы чуеце. Націсніце прабел, каб прайграць аўдыё.", + error: "Праверка не прайшла. Паспрабуйце пазней.", + expired: "Тэрмін праверкі скончыўся. Паспрабуйце зноў.", + footer: 'Абаронена ALTCHA', + getAudioChallenge: "Атрымаць аўдыё выклік", + label: "Я не робат", + loading: "Загрузка...", + reload: "Перазагрузіць", + verify: "Праверыць", + verificationRequired: "Патрабуецца праверка!", + verified: "Праверана", + verifying: "Правяраем...", + waitAlert: "Праверка... калі ласка, пачакайце.", + cancel: "Скасаваць", + enterCodeFromImage: "Каб працягнуць, увядзіце код з малюнка ніжэй." + }; + globalThis.$altcha.i18n.set("be", i18n$W); + const i18n$V = { + ariaLinkLabel: "Altcha (službena web stranica)", + enterCode: "Unesite kod", + enterCodeAria: "Unesite kod koji čujete. Pritisnite Space da biste pustili zvuk.", + error: "Verifikacija nije uspjela. Pokušajte ponovo kasnije.", + expired: "Verifikacija je istekla. Pokušajte ponovo.", + footer: 'Zaštićeno od strane ALTCHA', + getAudioChallenge: "Dohvatite audio izazov", + label: "Nisam robot", + loading: "Učitavanje...", + reload: "Ponovno učitaj", + verify: "Verifikuj", + verificationRequired: "Verifikacija je obavezna!", + verified: "Verifikovano", + verifying: "Verifikacija u toku...", + waitAlert: "Verifikacija u toku... molimo vas da sačekate.", + cancel: "Odustani", + enterCodeFromImage: "Za nastavak, molimo unesite kod sa slike ispod." + }; + globalThis.$altcha.i18n.set("bs", i18n$V); + const i18n$U = { + ariaLinkLabel: "Altcha (lloc web oficial)", + enterCode: "Introdueix el codi", + enterCodeAria: "Introdueix el codi que escoltes. Prem Espai per reproduir l’àudio.", + error: "Verificació fallida. Torna-ho a provar més tard.", + expired: "Verificació expirada. Torna-ho a provar.", + footer: 'Protegit per ALTCHA', + getAudioChallenge: "Obtenir un desafiament d’àudio", + label: "No sóc un robot", + loading: "Carregant...", + reload: "Torna a carregar", + verify: "Verificar", + verificationRequired: "Es requereix verificació!", + verified: "Verificat", + verifying: "Verificant...", + waitAlert: "Verificant... si us plau, espera.", + cancel: "Cancel·la", + enterCodeFromImage: "Per continuar, si us plau, introdueix el codi de la imatge següent." + }; + globalThis.$altcha.i18n.set("ca", i18n$U); + const i18n$T = { + ariaLinkLabel: "Altcha (oficiální web)", + enterCode: "Zadejte kód", + enterCodeAria: "Zadejte kód, který slyšíte. Stisknutím mezerníku přehrajete zvuk.", + error: "Ověření selhalo. Zkuste to prosím později.", + expired: "Ověření vypršelo. Zkuste to prosím znovu.", + footer: 'Chráněno pomocí ALTCHA', + getAudioChallenge: "Získat audio výzvu", + label: "Nejsem robot", + loading: "Načítání...", + reload: "Znovu načíst", + verify: "Ověřit", + verificationRequired: "Vyžaduje se ověření!", + verified: "Ověřeno", + verifying: "Ověřování...", + waitAlert: "Probíhá ověření... prosím počkejte.", + cancel: "Zrušit", + enterCodeFromImage: "Pro pokračování zadejte kód z obrázku níže." + }; + globalThis.$altcha.i18n.set("cs", i18n$T); + const i18n$S = { + ariaLinkLabel: "Altcha (officiel hjemmeside)", + enterCode: "Indtast kode", + enterCodeAria: "Indtast den kode, du hører. Tryk på mellemrumstasten for at afspille lyd.", + error: "Verificering mislykkedes. Prøv venligst igen senere.", + expired: "Verificering udløbet. Prøv venligst igen.", + footer: 'Beskyttet af ALTCHA', + getAudioChallenge: "Hent lydudfordring", + label: "Jeg er ikke en robot", + loading: "Indlæser...", + reload: "Genindlæs", + verify: "Verificer", + verificationRequired: "Verificering kræves!", + verified: "Verificeret", + verifying: "Verificerer...", + waitAlert: "Verificerer... vent venligst.", + cancel: "Annuller", + enterCodeFromImage: "For at fortsætte, bedes du indtaste koden fra billedet herunder." + }; + globalThis.$altcha.i18n.set("da", i18n$S); + const i18n$R = { + ariaLinkLabel: "Altcha (offizielle Website)", + enterCode: "Code eingeben", + enterCodeAria: "Geben Sie den Code ein, den Sie hören. Drücken Sie die Leertaste, um die Audio abzuspielen.", + error: "Überprüfung fehlgeschlagen. Bitte versuchen Sie es später erneut.", + expired: "Überprüfung abgelaufen. Bitte versuchen Sie es erneut.", + footer: 'Geschützt durch ALTCHA', + getAudioChallenge: "Audio-Herausforderung anfordern", + label: "Ich bin kein Roboter", + loading: "Lade...", + reload: "Neu laden", + verify: "Überprüfen", + verificationRequired: "Überprüfung erforderlich!", + verified: "Überprüft", + verifying: "Wird überprüft...", + waitAlert: "Überprüfung läuft... bitte warten.", + cancel: "Abbrechen", + enterCodeFromImage: "Um fortzufahren, geben Sie bitte den Code aus dem Bild unten ein." + }; + globalThis.$altcha.i18n.set("de", i18n$R); + const i18n$Q = { + ariaLinkLabel: "Altcha (επίσημος ιστότοπος)", + enterCode: "Εισαγάγετε κωδικό", + enterCodeAria: "Εισαγάγετε τον κωδικό που ακούτε. Πατήστε Space για να παίξετε τον ήχο.", + error: "Η επαλήθευση απέτυχε. Δοκιμάστε ξανά αργότερα.", + expired: "Η επαλήθευση έληξε. Δοκιμάστε ξανά.", + footer: 'Προστατεύεται από το ALTCHA', + getAudioChallenge: "Λήψη ηχητικής δοκιμασίας", + label: "Δεν είμαι ρομπότ", + loading: "Φόρτωση...", + reload: "Επαναφόρτωση", + verify: "Επαλήθευση", + verificationRequired: "Απαιτείται έλεγχος!", + verified: "Επαληθεύτηκε", + verifying: "Γίνεται επαλήθευση...", + waitAlert: "Γίνεται επαλήθευση... παρακαλώ περιμένετε.", + cancel: "Ακύρωση", + enterCodeFromImage: "Για να συνεχίσετε, εισάγετε τον κωδικό από την παρακάτω εικόνα." + }; + globalThis.$altcha.i18n.set("el", i18n$Q); + const i18n$P = { + ariaLinkLabel: "Altcha (sitio web oficial)", + enterCode: "Introduce el código", + enterCodeAria: "Introduce el código que escuchas. Pulsa Espacio para reproducir el audio.", + error: "Falló la verificación. Por favor intente nuevamente más tarde.", + expired: "Verificación expirada. Por favor intente nuevamente.", + footer: 'Protegido por ALTCHA', + getAudioChallenge: "Obtener un desafío de audio", + label: "No soy un robot", + loading: "Cargando...", + reload: "Recargar", + verify: "Verificar", + verificationRequired: "¡Verificación requerida!", + verified: "Verificado", + verifying: "Verificando...", + waitAlert: "Verificando... por favor espere.", + cancel: "Cancelar", + enterCodeFromImage: "Para continuar, introduzca el código de la imagen de abajo." + }; + globalThis.$altcha.i18n.set("es-es", i18n$P); + const i18n$O = { + ariaLinkLabel: "Altcha (sitio web oficial)", + enterCode: "Ingresa el código", + enterCodeAria: "Ingresa el código que escuchas. Presiona Espacio para reproducir el audio.", + error: "Falló la verificación. Por favor vuelve a intentarlo más tarde.", + expired: "La verificación expiró. Por favor inténtalo de nuevo.", + footer: 'Protegido por ALTCHA', + getAudioChallenge: "Obtener un reto de audio", + label: "No soy un robot", + loading: "Cargando...", + reload: "Volver a cargar", + verify: "Verificar", + verificationRequired: "¡Verificación requerida!", + verified: "Verificado", + verifying: "Verificando...", + waitAlert: "Verificando... por favor espera.", + cancel: "Cancelar", + enterCodeFromImage: "Para continuar, ingresa el código de la imagen a continuación." + }; + globalThis.$altcha.i18n.set("es-419", i18n$O); + const i18n$N = { + ariaLinkLabel: "Altcha (ametlik veebisait)", + enterCode: "Sisesta kood", + enterCodeAria: "Sisestage kuuldu kood. Vajutage tühikut, et esitada heli.", + error: "Kinnitamine ebaõnnestus. Proovi hiljem uuesti.", + expired: "Kinnitamine aegus. Proovi uuesti.", + footer: 'Kaitstud ALTCHA poolt', + getAudioChallenge: "Hangi heliülesanne", + label: "Ma ei ole robot", + loading: "Laadimine...", + reload: "Laadi uuesti", + verify: "Kinnita", + verificationRequired: "Kontroll on vajalik!", + verified: "Kinnitatud", + verifying: "Kinnitamine...", + waitAlert: "Kinnitamine... palun oota.", + cancel: "Tühista", + enterCodeFromImage: "Jätkamiseks sisestage alloleval pildil olev kood." + }; + globalThis.$altcha.i18n.set("et", i18n$N); + const i18n$M = { + ariaLinkLabel: "Altcha (webgune ofiziala)", + enterCode: "Sartu kodea", + enterCodeAria: "Sartu entzun duzun kodea. Sakatu Espazioa audioa erreproduzitzeko.", + error: "Egiaztatzeak huts egin du. Saiatu berriro geroago.", + expired: "Egiaztatzea iraungi da. Saiatu berriro.", + footer: 'ALTCHAk babestuta', + getAudioChallenge: "Jaso audio-erronka bat", + label: "Ez naiz robot bat", + loading: "Kargatzen...", + reload: "Birkargatu", + verify: "Egiaztatu", + verificationRequired: "Egiaztatzea beharrezkoa da!", + verified: "Egiaztatuta", + verifying: "Egiaztatzen...", + waitAlert: "Egiaztatzen... itxaron mesedez.", + cancel: "Utzi", + enterCodeFromImage: "Jarraitzeko, idatzi beheko irudiko kodea." + }; + globalThis.$altcha.i18n.set("eu", i18n$M); + const i18n$L = { + ariaLinkLabel: "Altcha (وب‌سایت رسمی)", + enterCode: "کد را وارد کنید", + enterCodeAria: "کدی که می‌شنوید را وارد کنید. برای پخش صدا Space را فشار دهید.", + error: "احراز هویت ناموفق بود. بعداً دوباره تلاش کنید.", + expired: "احراز هویت منقضی شد. دوباره تلاش کنید.", + footer: 'محافظت شده توسط ALTCHA', + getAudioChallenge: "دریافت چالش صوتی", + label: "من ربات نیستم", + loading: "در حال بارگذاری...", + reload: "بارگذاری مجدد", + verify: "تایید", + verificationRequired: "احراز هویت لازم است!", + verified: "تایید شد", + verifying: "در حال تایید...", + waitAlert: "در حال تایید... لطفا منتظر بمانید.", + cancel: "لغو کردن", + enterCodeFromImage: "برای ادامه، لطفاً کد تصویر زیر را وارد کنید." + }; + globalThis.$altcha.i18n.set("fa", i18n$L); + const i18n$K = { + ariaLinkLabel: "Altcha (offiziell Websäit)", + enterCode: "Code aginn", + enterCodeAria: "Gitt de Code an deen dir héiert. Dréckt op d'Weltraumtast fir Audio ofzespillen.", + error: "Verifikatioun ass feelgeschloen. Probéiert méi spéit nach emol.", + expired: "Verifikatioun ofgelaf. Probéiert nach emol.", + footer: 'Geschützt vun ALTCHA', + getAudioChallenge: "Kritt eng Audio-Herausfuerderung", + label: "Ech sinn keen Robot", + loading: "Lueden...", + reload: "Nei lueden", + verify: "Verifizéieren", + verificationRequired: "Verifikatioun néideg!", + verified: "Verifizéiert", + verifying: "Verifizéieren...", + waitAlert: "Verifizéieren... waart wgl.", + cancel: "Ofbriechen", + enterCodeFromImage: "Fir virun ze fueren, gitt wgl. de Code aus dem Bild hei drënner an." + }; + globalThis.$altcha.i18n.set("lb", i18n$K); + const i18n$J = { + ariaLinkLabel: "Altcha (virallinen verkkosivusto)", + enterCode: "Syötä koodi", + enterCodeAria: "Kirjoita kuulemasi koodi. Paina välilyöntiä toistaaksesi äänen.", + error: "Varmennus epäonnistui. Yritä myöhemmin uudelleen.", + expired: "Varmennus vanhentui. Yritä uudelleen.", + footer: 'Suojattu ALTCHA:lla', + getAudioChallenge: "Hae äänitehtävä", + label: "En ole robotti", + loading: "Ladataan...", + reload: "Lataa uudelleen", + verify: "Vahvista", + verificationRequired: "Vahvistus vaaditaan!", + verified: "Vahvistettu", + verifying: "Vahvistetaan...", + waitAlert: "Vahvistetaan... odota hetki.", + cancel: "Peruuta", + enterCodeFromImage: "Jatkaaksesi, syötä alla olevan kuvan koodi." + }; + globalThis.$altcha.i18n.set("fi", i18n$J); + const i18n$I = { + ariaLinkLabel: "Altcha (site officiel)", + enterCode: "Entrez le code", + enterCodeAria: "Entrez le code que vous entendez. Appuyez sur la barre d'espace pour écouter l'audio.", + error: "Échec de la vérification. Réessayez plus tard.", + expired: "La vérification a expiré. Réessayez.", + footer: 'Protégé par ALTCHA', + getAudioChallenge: "Obtenir un défi audio", + label: "Je ne suis pas un robot", + loading: "Chargement...", + reload: "Recharger", + verify: "Vérifier", + verificationRequired: "Vérification requise !", + verified: "Vérifié", + verifying: "Vérification en cours...", + waitAlert: "Vérification en cours... veuillez patienter.", + cancel: "Annuler", + enterCodeFromImage: "Pour continuer, veuillez entrer le code de l'image ci-dessous." + }; + globalThis.$altcha.i18n.set("fr-ca", i18n$I); + const i18n$H = { + ariaLinkLabel: "Altcha (site officiel)", + enterCode: "Entrez le code", + enterCodeAria: "Entrez le code que vous entendez. Appuyez sur Espace pour écouter l'audio.", + error: "Échec de la vérification. Essayez à nouveau plus tard.", + expired: "La vérification a expiré. Essayez à nouveau.", + footer: 'Protégé par ALTCHA', + getAudioChallenge: "Obtenir un défi audio", + label: "Je ne suis pas un robot", + loading: "Chargement...", + reload: "Recharger", + verify: "Vérifier", + verificationRequired: "Vérification requise !", + verified: "Vérifié", + verifying: "Vérification en cours...", + waitAlert: "Vérification en cours... veuillez patienter.", + cancel: "Annuler", + enterCodeFromImage: "Pour continuer, veuillez entrer le code de l'image ci-dessous." + }; + globalThis.$altcha.i18n.set("fr-fr", i18n$H); + const i18n$G = { + ariaLinkLabel: "Altcha (láithreán gréasáin oifigiúil)", + enterCode: "Iontráil cód", + enterCodeAria: "Cuir isteach an cód a chloiseann tú. Brúigh Spás chun an fuaime a sheinm.", + error: "Theip ar an bhfíorú. Bain triail eile as níos déanaí.", + expired: "Tá an fíorú as feidhm. Bain triail eile as.", + footer: 'Cosanta ag ALTCHA', + getAudioChallenge: "Faigh dúshlán fuaime", + label: "Níl mé i mo róbat", + loading: "Á luchtú...", + reload: "Athluchtaigh", + verify: "Fíoraigh", + verificationRequired: "Fíorú riachtanach!", + verified: "Fíoraithe", + verifying: "Fíorú ar siúl...", + waitAlert: "Fíorú ar siúl... fan go fóill.", + cancel: "Cealaigh", + enterCodeFromImage: "Chun dul ar aghaidh, le do thoil cuir isteach an cód ón íomhá thíos." + }; + globalThis.$altcha.i18n.set("ga", i18n$G); + const i18n$F = { + ariaLinkLabel: "Altcha (službena web stranica)", + enterCode: "Unesite kod", + enterCodeAria: "Unesite kod koji čujete. Pritisnite razmaknicu za reprodukciju zvuka.", + error: "Provjera nije uspjela. Molimo pokušajte kasnije.", + expired: "Provjera je istekla. Molimo pokušajte ponovo.", + footer: 'Zaštićeno od strane ALTCHA', + getAudioChallenge: "Audio provjera", + label: "Ja nisam robot", + loading: "Učitavanje...", + reload: "Ponovno učitaj", + verify: "Provjeri", + verificationRequired: "Potrebna je provjera!", + verified: "Provjereno", + verifying: "Provjeravanje...", + waitAlert: "Provjera je u tijeku... molimo pričekajte.", + cancel: "Odustani", + enterCodeFromImage: "Za nastavak molimo unesite kod sa slike ispod." + }; + globalThis.$altcha.i18n.set("hr", i18n$F); + const i18n$E = { + ariaLinkLabel: "Altcha (hivatalos weboldal)", + enterCode: "Írja be a kódot", + enterCodeAria: "Írja be a hallott kódot. Nyomja meg a Szóköz billentyűt a hang lejátszásához.", + error: "A hitelesítés nem sikerült. Próbáld meg később újra.", + expired: "A hitelesítés lejárt. Próbáld újra.", + footer: 'Védve a következő által: ALTCHA', + getAudioChallenge: "Hangalapú kihívás kérése", + label: "Nem vagyok robot", + loading: "Betöltés...", + reload: "Újratöltés", + verify: "Ellenőrzés", + verificationRequired: "Ellenőrzés szükséges!", + verified: "Ellenőrizve", + verifying: "Ellenőrzés folyamatban...", + waitAlert: "Ellenőrzés folyamatban... kérlek várj.", + cancel: "Mégse", + enterCodeFromImage: "A folytatáshoz, kérjük, adja meg az alábbi kép kódját." + }; + globalThis.$altcha.i18n.set("hu", i18n$E); + const i18n$D = { + ariaLinkLabel: "Altcha (opinber vefsíða)", + enterCode: "Sláðu inn kóða", + enterCodeAria: "Sláðu inn kóðann sem þú heyrir. Ýttu á Space til að spila hljóðið.", + error: "Staðfesting mistókst. Reyndu aftur síðar.", + expired: "Staðfesting er útrunnin. Reyndu aftur.", + footer: 'Verndað af ALTCHA', + getAudioChallenge: "Fá hljóðáskorun", + label: "Ég er ekki robot", + loading: "Hleður...", + reload: "Hleð aftur", + verify: "Staðfesta", + verificationRequired: "Staðfesting er nauðsynleg!", + verified: "Staðfest", + verifying: "Að staðfesta...", + waitAlert: "Að staðfesta... vinsamlegast bíða.", + cancel: "Hætta við", + enterCodeFromImage: "Til að halda áfram, vinsamlegast sláðu inn kóðann af myndinni hér að neðan." + }; + globalThis.$altcha.i18n.set("is", i18n$D); + const i18n$C = { + ariaLinkLabel: "Altcha (sito ufficiale)", + enterCode: "Inserisci il codice", + enterCodeAria: "Inserisci il codice che senti. Premi Spazio per riprodurre l'audio.", + error: "Verifica fallita. Riprova più tardi.", + expired: "Verifica scaduta. Riprova.", + footer: 'Protetto da ALTCHA', + getAudioChallenge: "Ottieni una sfida audio", + label: "Non sono un robot", + loading: "Caricamento...", + reload: "Ricarica", + verify: "Verifica", + verificationRequired: "Verifica richiesta!", + verified: "Verificato", + verifying: "Verifica in corso...", + waitAlert: "Verifica in corso... attendere.", + cancel: "Annulla", + enterCodeFromImage: "Per procedere, inserisci il codice dall'immagine sottostante." + }; + globalThis.$altcha.i18n.set("it", i18n$C); + const i18n$B = { + ariaLinkLabel: "Altcha (oficiali svetainė)", + enterCode: "Įveskite kodą", + enterCodeAria: "Įveskite girdimą kodą. Paspauskite tarpo klavišą, kad grotumėte garso įrašą.", + error: "Patvirtinimas nepavyko. Bandykite vėliau.", + expired: "Patvirtinimo laikas baigėsi. Bandykite dar kartą.", + footer: 'Apsaugota ALTCHA', + getAudioChallenge: "Gauti garso užduotį", + label: "Aš nesu robotas", + loading: "Įkeliama...", + reload: "Įkelti iš naujo", + verify: "Patvirtinti", + verificationRequired: "Reikalingas patvirtinimas!", + verified: "Patvirtinta", + verifying: "Tikrinama...", + waitAlert: "Tikrinama... prašome palaukti.", + cancel: "Atšaukti", + enterCodeFromImage: "Norėdami tęsti, įveskite kodą iš paveikslėlio žemiau." + }; + globalThis.$altcha.i18n.set("lt", i18n$B); + const i18n$A = { + ariaLinkLabel: "Altcha (oficiālā tīmekļa vietne)", + enterCode: "Ievadiet kodu", + enterCodeAria: "Ievadiet dzirdamo kodu. Nospiediet atstarpes taustiņu, lai atskaņotu audio.", + error: "Verifikācija neizdevās. Mēģiniet vēlāk vēlreiz.", + expired: "Verifikācijas laiks ir beidzies. Mēģiniet vēlreiz.", + footer: 'Aizsargāts ar ALTCHA', + getAudioChallenge: "Saņemt audio izaicinājumu", + label: "Es neesmu robots", + loading: "Notiek ielāde...", + reload: "Pārlādēt", + verify: "Verificēt", + verificationRequired: "Nepieciešama verifikācija!", + verified: "Verificēts", + verifying: "Notiek verifikācija...", + waitAlert: "Notiek verifikācija... lūdzu, uzgaidiet.", + cancel: "Atcelt", + enterCodeFromImage: "Lai turpinātu, lūdzu, ievadiet zemāk redzamo attēlu kodu." + }; + globalThis.$altcha.i18n.set("lv", i18n$A); + const i18n$z = { + ariaLinkLabel: "Altcha (sit uffiċjali)", + enterCode: "Idħol il-kodiċi", + enterCodeAria: "Idħol il-kodiċi li tisma'. Agħfas Spazju biex tindaqq l-awdjo.", + error: "Il-verifika falliet. Erġa’ pprova aktar tard.", + expired: "Il-verifika skadiet. Erġa’ pprova.", + footer: 'Protett minn ALTCHA', + getAudioChallenge: "Ikseb sfida bl-awdjo", + label: "M’inix robot", + loading: "Qed jitgħabba...", + reload: "Ittella’ mill-ġdid", + verify: "Ivverifika", + verificationRequired: "Verifika meħtieġa!", + verified: "Ivverifikat", + verifying: "Verifika għaddejja...", + waitAlert: "Verifika għaddejja... stenna ftit.", + cancel: "Ikkanċella", + enterCodeFromImage: "Biex tipproċedi, jekk jogħġbok daħħal il-kodiċi mill-immaġni hawn taħt." + }; + globalThis.$altcha.i18n.set("mt", i18n$z); + const i18n$y = { + ariaLinkLabel: "Altcha (offisiell nettside)", + enterCode: "Skriv inn kode", + enterCodeAria: "Skriv inn koden du hører. Trykk på Space for å spille av lyden.", + error: "Verifisering mislyktes. Prøv igjen senere.", + expired: "Verifiseringen utløp. Prøv igjen.", + footer: 'Beskyttet av ALTCHA', + getAudioChallenge: "Få en lydutfordring", + label: "Jeg er ikke en robot", + loading: "Laster...", + reload: "Last på nytt", + verify: "Verifiser", + verificationRequired: "Verifisering kreves!", + verified: "Verifisert", + verifying: "Verifiserer...", + waitAlert: "Verifiserer... vennligst vent.", + cancel: "Avbryt", + enterCodeFromImage: "For å fortsette, vennligst skriv inn koden fra bildet nedenfor." + }; + globalThis.$altcha.i18n.set("nb", i18n$y); + const i18n$x = { + ariaLinkLabel: "Altcha (officiële website)", + enterCode: "Voer code in", + enterCodeAria: "Voer de code in die je hoort. Druk op Spatie om de audio af te spelen.", + error: "Verificatie mislukt. Probeer het later opnieuw.", + expired: "Verificatie verlopen. Probeer het opnieuw.", + footer: 'Beschermd door ALTCHA', + getAudioChallenge: "Audio-uitdaging ontvangen", + label: "Ik ben geen robot", + loading: "Laden...", + reload: "Herladen", + verify: "Verifiëren", + verificationRequired: "Verificatie vereist!", + verified: "Geverifieerd", + verifying: "Bezig met verifiëren...", + waitAlert: "Bezig met verifiëren... even geduld a.u.b.", + cancel: "Annuleren", + enterCodeFromImage: "Om door te gaan, voert u de code uit de onderstaande afbeelding in." + }; + globalThis.$altcha.i18n.set("nl", i18n$x); + const i18n$w = { + ariaLinkLabel: "Altcha (oficjalna strona internetowa)", + enterCode: "Wprowadź kod", + enterCodeAria: "Wpisz kod, który słyszysz. Naciśnij Spację, aby odtworzyć dźwięk.", + error: "Weryfikacja nie powiodła się. Spróbuj ponownie później.", + expired: "Weryfikacja wygasła. Spróbuj ponownie.", + footer: 'Chronione przez ALTCHA', + getAudioChallenge: "Pobierz zadanie dźwiękowe", + label: "Nie jestem robotem", + loading: "Ładowanie...", + reload: "Odśwież", + verify: "Zweryfikuj", + verificationRequired: "Wymagana weryfikacja!", + verified: "Zweryfikowano", + verifying: "Weryfikacja...", + waitAlert: "Trwa weryfikacja... proszę czekać.", + cancel: "Anuluj", + enterCodeFromImage: "Aby kontynuować, wprowadź kod z poniższego obrazka." + }; + globalThis.$altcha.i18n.set("pl", i18n$w); + const i18n$v = { + ariaLinkLabel: "Altcha (site oficial)", + enterCode: "Introduza o código", + enterCodeAria: "Introduza o código que ouve. Prima Espaço para reproduzir o áudio.", + error: "A verificação falhou. Por favor, tente novamente mais tarde.", + expired: "Verificação expirada. Por favor, tente novamente.", + footer: 'Protegido por ALTCHA', + getAudioChallenge: "Obter desafio de áudio", + label: "Não sou um robô", + loading: "A carregar...", + reload: "Recarregar", + verify: "Verificar", + verificationRequired: "Verificação necessária!", + verified: "Verificado", + verifying: "A verificar...", + waitAlert: "A verificar... por favor aguarde.", + cancel: "Cancelar", + enterCodeFromImage: "Para prosseguir, introduza o código da imagem abaixo." + }; + globalThis.$altcha.i18n.set("pt-pt", i18n$v); + const i18n$u = { + ariaLinkLabel: "Altcha (site oficial)", + enterCode: "Digite o código", + enterCodeAria: "Digite o código que você ouve. Pressione Espaço para reproduzir o áudio.", + error: "Falha na verificação. Por favor, tente novamente mais tarde.", + expired: "Verificação expirada. Por favor, tente novamente.", + footer: 'Protegido por ALTCHA', + getAudioChallenge: "Obter desafio de áudio", + label: "Eu não sou um robô", + loading: "Carregando...", + reload: "Recarregar", + verify: "Verificar", + verificationRequired: "Verificação necessária!", + verified: "Verificado", + verifying: "Verificando...", + waitAlert: "Verificando... por favor aguarde.", + cancel: "Cancelar", + enterCodeFromImage: "Para prosseguir, digite o código da imagem abaixo." + }; + globalThis.$altcha.i18n.set("pt-br", i18n$u); + const i18n$t = { + ariaLinkLabel: "Altcha (site oficial)", + enterCode: "Introduceți codul", + enterCodeAria: "Introduceți codul pe care îl auziți. Apăsați Spațiu pentru a reda audio.", + error: "Verificarea a eșuat. Încearcă din nou mai târziu.", + expired: "Verificarea a expirat. Încearcă din nou.", + footer: 'Protejat de ALTCHA', + getAudioChallenge: "Obține o provocare audio", + label: "Nu sunt un robot", + loading: "Se încarcă...", + reload: "Reîncarcă", + verify: "Verifică", + verificationRequired: "Verificare necesară!", + verified: "Verificat", + verifying: "Se verifică...", + waitAlert: "Se verifică... te rugăm să aștepți.", + cancel: "Anulare", + enterCodeFromImage: "Pentru a continua, vă rugăm să introduceți codul din imaginea de mai jos." + }; + globalThis.$altcha.i18n.set("ro", i18n$t); + const i18n$s = { + ariaLinkLabel: "Altcha (официальный сайт)", + enterCode: "Введите код", + enterCodeAria: "Введите код, который слышите. Нажмите пробел для воспроизведения аудио.", + error: "Ошибка верификации. Попробуйте позже.", + expired: "Срок действия верификации истек. Попробуйте снова.", + footer: 'Защищено ALTCHA', + getAudioChallenge: "Получить аудио задачу", + label: "Я не робот", + loading: "Загрузка...", + reload: "Перезагрузить", + verify: "Проверить", + verificationRequired: "Требуется проверка!", + verified: "Проверено", + verifying: "Идет проверка...", + waitAlert: "Идет проверка... Пожалуйста, подождите.", + cancel: "Отмена", + enterCodeFromImage: "Чтобы продолжить, пожалуйста, введите код с изображения ниже." + }; + globalThis.$altcha.i18n.set("ru", i18n$s); + const i18n$r = { + ariaLinkLabel: "Altcha (oficiálna webová stránka)", + enterCode: "Zadajte kód", + enterCodeAria: "Zadajte kód, ktorý počujete. Stlačením medzerníka prehráte zvuk.", + error: "Verifikácia zlyhala. Skúste to znova neskôr.", + expired: "Verifikácia vypršala. Skúste to znova.", + footer: 'Chránené ALTCHA', + getAudioChallenge: "Získať audio výzvu", + label: "Nie som robot", + loading: "Načítava sa...", + reload: "Obnoviť", + verify: "Verifikovať", + verificationRequired: "Vyžaduje sa overenie!", + verified: "Verifikované", + verifying: "Prebieha verifikácia...", + waitAlert: "Prebieha verifikácia... prosím čakajte.", + cancel: "Zrušiť", + enterCodeFromImage: "Na pokračovanie, prosím, zadajte kód z obrázka nižšie." + }; + globalThis.$altcha.i18n.set("sk", i18n$r); + const i18n$q = { + ariaLinkLabel: "Altcha (uradna spletna stran)", + enterCode: "Vnesite kodo", + enterCodeAria: "Vnesite kodo, ki jo slišite. Pritisnite preslednico za predvajanje zvoka.", + error: "Preverjanje ni uspelo. Poskusite znova kasneje.", + expired: "Preverjanje je poteklo. Poskusite znova.", + footer: 'Zaščiteno z ALTCHA', + getAudioChallenge: "Pridobite zvočni izziv", + label: "Nisem robot", + loading: "Nalagam...", + reload: "Ponovno naloži", + verify: "Preveri", + verificationRequired: "Potrebna je preveritev!", + verified: "Preverjeno", + verifying: "Preverjanje...", + waitAlert: "Preverjanje... prosim počakajte.", + cancel: "Preklic", + enterCodeFromImage: "Za nadaljevanje, prosimo, vnesite kodo s slike spodaj." + }; + globalThis.$altcha.i18n.set("sl", i18n$q); + const i18n$p = { + ariaLinkLabel: "Altcha (faqja zyrtare)", + enterCode: "Fut kodin", + enterCodeAria: "Fut kodin që dëgjon. Shtypni Hapësirë për të luajtur audio.", + error: "Verifikimi dështoi. Provoni përsëri më vonë.", + expired: "Verifikimi ka skaduar. Provoni përsëri.", + footer: 'I mbrojtur nga ALTCHA', + getAudioChallenge: "Merr një sfidë audio", + label: "Unë nuk jam një robot", + loading: "Duke u ngarkuar...", + reload: "Ringarko", + verify: "Verifiko", + verificationRequired: "Kërkohet verifikimi!", + verified: "I verifikuar", + verifying: "Duke verifikuar...", + waitAlert: "Duke verifikuar... ju lutem prisni.", + cancel: "Anuloje", + enterCodeFromImage: "Për të vazhduar, ju lutemi fusni kodin nga imazhi më poshtë." + }; + globalThis.$altcha.i18n.set("sq", i18n$p); + const i18n$o = { + ariaLinkLabel: "Altcha (zvanična web stranica)", + enterCode: "Unesite kod", + enterCodeAria: "Unesite kod koji čujete. Pritisnite Space da biste pustili zvuk.", + error: "Verifikacija nije uspela. Pokušajte ponovo kasnije.", + expired: "Verifikacija je istekla. Pokušajte ponovo.", + footer: 'Zaštićeno od strane ALTCHA', + getAudioChallenge: "Dohvatite audio izazov", + label: "Nisam robot", + loading: "Učitavanje...", + reload: "Ponovo učitaj", + verify: "Verifikuj", + verificationRequired: "Verifikacija je obavezna!", + verified: "Verifikovano", + verifying: "Verifikacija u toku...", + waitAlert: "Verifikacija u toku... molimo vas da sačekate.", + cancel: "Откажи", + enterCodeFromImage: "Да бисте наставили, унесите код са слике испод." + }; + globalThis.$altcha.i18n.set("sr", i18n$o); + const i18n$n = { + ariaLinkLabel: "Altcha (officiell webbplats)", + enterCode: "Ange kod", + enterCodeAria: "Ange koden du hör. Tryck på mellanslag för att spela upp ljudet.", + error: "Verifiering misslyckades. Försök igen senare.", + expired: "Verifieringen har gått ut. Försök igen.", + footer: 'Skyddad av ALTCHA', + getAudioChallenge: "Få ljudutmaning", + label: "Jag är inte en robot", + loading: "Laddar...", + reload: "Ladda om", + verify: "Verifiera", + verificationRequired: "Verifiering krävs!", + verified: "Verifierad", + verifying: "Verifierar...", + waitAlert: "Verifierar... vänligen vänta.", + cancel: "Avbryt", + enterCodeFromImage: "För att fortsätta, ange koden från bilden nedan." + }; + globalThis.$altcha.i18n.set("sv", i18n$n); + const i18n$m = { + ariaLinkLabel: "Altcha (resmi web sitesi)", + enterCode: "Kodu girin", + enterCodeAria: "Duyduğunuz kodu girin. Ses dosyasını oynatmak için Boşluk tuşuna basın.", + error: "Doğrulama başarısız oldu. Lütfen daha sonra tekrar deneyin.", + expired: "Doğrulama süresi doldu. Lütfen tekrar deneyin.", + footer: 'ALTCHA tarafından korunuyor ALTCHA', + getAudioChallenge: "Sesli doğrulama al", + label: "Ben robot değilim", + loading: "Yükleniyor...", + reload: "Yeniden yükle", + verify: "Doğrula", + verificationRequired: "Doğrulama gerekli!", + verified: "Doğrulandı", + verifying: "Doğrulama yapılıyor...", + waitAlert: "Doğrulama yapılıyor... lütfen bekleyin.", + cancel: "İptal", + enterCodeFromImage: "Devam etmek için lütfen aşağıdaki resimdeki kodu girin." + }; + globalThis.$altcha.i18n.set("tr", i18n$m); + const i18n$l = { + ariaLinkLabel: "Altcha (офіційний сайт)", + enterCode: "Введіть код", + enterCodeAria: "Введіть код, який ви чуєте. Натисніть пробіл, щоб відтворити аудіо.", + error: "Перевірка не вдалася. Спробуйте пізніше.", + expired: "Перевірка прострочена. Спробуйте знову.", + footer: 'Захищено ALTCHA', + getAudioChallenge: "Отримати аудіо-челлендж", + label: "Я не робот", + loading: "Завантаження...", + reload: "Перезавантажити", + verify: "Перевірити", + verificationRequired: "Потрібна перевірка!", + verified: "Перевірено", + verifying: "Перевіряється...", + waitAlert: "Перевірка... будь ласка, зачекайте.", + cancel: "Скасувати", + enterCodeFromImage: "Щоб продовжити, введіть код із зображення нижче." + }; + globalThis.$altcha.i18n.set("uk", i18n$l); + const i18n$k = { + ariaLinkLabel: "Altcha (amptelike webwerf)", + enterCode: "Voer kode in", + enterCodeAria: "Voer die kode in wat jy hoor. Druk Spasie om die klank af te speel.", + error: "Verifikasie het misluk. Probeer later weer.", + expired: "Verifikasie het verval. Probeer weer.", + footer: 'Beskerm deur ALTCHA', + getAudioChallenge: "Kry 'n klankuitdaging", + label: "Ek is nie 'n robot nie", + loading: "Laai...", + reload: "Laai weer", + verify: "Verifieer", + verificationRequired: "Verifikasie is vereis!", + verified: "Geverifieer", + verifying: "Verifieer...", + waitAlert: "Verifieer... wag asseblief.", + cancel: "Kanselleer", + enterCodeFromImage: "Om voort te gaan, voer asseblief die kode vanaf die onderstaande prentjie in." + }; + globalThis.$altcha.i18n.set("af", i18n$k); + const i18n$j = { + ariaLinkLabel: "Altcha (ዋናው ድህረ ገጽ)", + enterCode: "ኮድ አስገባ", + enterCodeAria: "የሚሰማዎትን ኮድ ያስገቡ። ድምጽ ለመጫወት Space ን ይጫኑ።", + error: "ማረጋገጫ አልተሳካም። በኋላ ላይ እንደገና ይሞክሩ።", + expired: "ማረጋገጫው ጊዜው አልፏል። እንደገና ይሞክሩ።", + footer: 'በ ALTCHA የተጠበቀ', + getAudioChallenge: "የድምጽ ፈተና ያግኙ", + label: "እኔ ሮቦት አይደለሁም", + loading: "በመጫን ላይ...", + reload: "እንደገና ጫን", + verify: "አረጋግጥ", + verificationRequired: "ማረጋገጫ ያስፈልጋል!", + verified: "ተረጋግጧል", + verifying: "በማረጋገጥ ላይ...", + waitAlert: "በማረጋገጥ ላይ... እባክዎ ይጠብቁ።", + cancel: "ይቅር", + enterCodeFromImage: "ለመቀጠል፣ እባክዎን ከታች ካለው ምስል ኮዱን ያስገቡ።" + }; + globalThis.$altcha.i18n.set("am", i18n$j); + const i18n$i = { + ariaLinkLabel: "Altcha (tovuti rasmi)", + enterCode: "Weka nambari", + enterCodeAria: "Weka nambari unayosikia. Bonyeza Space kucheza sauti.", + error: "Uthibitishaji umeshindwa. Jaribu tena baadaye.", + expired: "Uthibitishaji umeisha. Jaribu tena.", + footer: 'Imealindwa na ALTCHA', + getAudioChallenge: "Pata changamoto ya sauti", + label: "Mimi sio roboti", + loading: "Inapakia...", + reload: "Pakia tena", + verify: "Thibitisha", + verificationRequired: "Uthibitishaji unahitajika!", + verified: "Imethibitishwa", + verifying: "Inathibitisha...", + waitAlert: "Inathibitisha... tafadhali subiri.", + cancel: "Ghairi", + enterCodeFromImage: "Ili kuendelea, tafadhali weka nambari kutoka kwa picha hapa chini." + }; + globalThis.$altcha.i18n.set("sw", i18n$i); + const i18n$h = { + ariaLinkLabel: "Altcha (oju opo wẹẹbu osise)", + enterCode: "Tẹ koodu sii", + enterCodeAria: "Tẹ koodu ti o ngbọ sii. Tẹ Space lati ṣe ohun orin.", + error: "Ìdájọ́kòwò kò ṣẹ́ṣe. Gbiyanju lẹẹkansi ni ọjọ́ iwájú.", + expired: "Ìdájọ́kòwò ti pari. Gbiyanju lẹẹkansi.", + footer: 'Ti wa ni ààbò nipasẹ ALTCHA', + getAudioChallenge: "Gba ìjàdú ohùn", + label: "Emi kii ṣe ẹrọ", + loading: "Ó ń gbé sílẹ̀...", + reload: "Tún gbé wọlé", + verify: "Ṣàdájọ́", + verificationRequired: "Ìdájọ́kòwò ni a nílò!", + verified: "A ti dájọ́", + verifying: "Ó ń ṣàdájọ́...", + waitAlert: "Ó ń ṣàdájọ́... ẹ jọ̀ọ́ ẹ duro.", + cancel: "Fagbọsẹ", + enterCodeFromImage: "Lati tẹsiwaju, jọwọ tẹ koodu ti o wa lati aworan isalẹ sii." + }; + globalThis.$altcha.i18n.set("yo", i18n$h); + const i18n$g = { + ariaLinkLabel: "Altcha (অফিসিয়াল ওয়েবসাইট)", + enterCode: "কোড লিখুন", + enterCodeAria: "আপনি যে কোড শুনতে পান তা লিখুন। অডিও প্লে করতে স্পেস বাটন টিপুন।", + error: "যাচাইকরণ ব্যর্থ হয়েছে। পরে আবার চেষ্টা করুন।", + expired: "যাচাইকরণ সময়সীমা শেষ হয়েছে। আবার চেষ্টা করুন।", + footer: 'দ্বারা সুরক্ষিত ALTCHA', + getAudioChallenge: "অডিও চ্যালেঞ্জ নিন", + label: "আমি রোবট নই", + loading: "লোড হচ্ছে...", + reload: "পুনরায় লোড করুন", + verify: "যাচাই করুন", + verificationRequired: "যাচাই প্রয়োজন!", + verified: "যাচাই করা হয়েছে", + verifying: "যাচাই করা হচ্ছে...", + waitAlert: "যাচাই করা হচ্ছে... দয়া করে অপেক্ষা করুন।", + cancel: "বাতিল করুন", + enterCodeFromImage: "এগিয়ে যেতে, অনুগ্রহ করে নীচের চিত্র থেকে কোডটি প্রবেশ করান।" + }; + globalThis.$altcha.i18n.set("bn", i18n$g); + const i18n$f = { + ariaLinkLabel: "Altcha (אתר רשמי)", + enterCode: "הזן קוד", + enterCodeAria: "הזן את הקוד שאתה שומע. לחץ על רווח להפעלת השמע.", + error: "האימות נכשל. נסה שוב מאוחר יותר.", + expired: "תוקף האימות פג. נסה שוב.", + footer: 'מוגן על ידי ALTCHA', + getAudioChallenge: "קבל אתגר שמע", + label: "אני לא רובוט", + loading: "טוען...", + reload: "טען מחדש", + verify: "אמת", + verificationRequired: "נדרש אימות!", + verified: "אומת", + verifying: "מאמת...", + waitAlert: "מבצע אימות... אנא המתן.", + cancel: "ביטול", + enterCodeFromImage: "כדי להמשיך, אנא הזן את הקוד מהתמונה למטה." + }; + globalThis.$altcha.i18n.set("he", i18n$f); + const i18n$e = { + ariaLinkLabel: "Altcha (आधिकारिक वेबसाइट)", + enterCode: "कोड दर्ज करेंं", + enterCodeAria: "आप जो कोड सुनते हैं उसे दर्ज करें। ऑडियो चलाने के लिए स्पेस दबाएं।", + error: "सत्यापन विफल। कृपया बाद में फिर से प्रयास करें।", + expired: "सत्यापन समाप्त हो गया है। कृपया पुनः प्रयास करें।", + footer: 'द्वारा संरक्षित ALTCHA', + getAudioChallenge: "ऑडियो चुनौती प्राप्त करें", + label: "मैं रोबोट नहीं हूँ", + loading: "लोड हो रहा है...", + reload: "पुनः लोड करें", + verify: "सत्यापित करें", + verificationRequired: "सत्यापन आवश्यक है!", + verified: "सत्यापित", + verifying: "सत्यापित कर रहे हैं...", + waitAlert: "सत्यापित किया जा रहा है... कृपया प्रतीक्षा करें।", + cancel: "रद्द करें", + enterCodeFromImage: "आगे बढ़ने के लिए, कृपया नीचे दी गई छवि से कोड दर्ज करें।" + }; + globalThis.$altcha.i18n.set("hi", i18n$e); + const i18n$d = { + ariaLinkLabel: "Altcha (situs web resmi)", + enterCode: "Masukkan kode", + enterCodeAria: "Masukkan kode yang Anda dengar. Tekan Spasi untuk memutar audio.", + error: "Verifikasi gagal. Coba lagi nanti.", + expired: "Verifikasi telah kedaluwarsa. Coba lagi.", + footer: 'Dilindungi oleh ALTCHA', + getAudioChallenge: "Dapatkan tantangan audio", + label: "Saya bukan robot", + loading: "Memuat...", + reload: "Muat ulang", + verify: "Verifikasi", + verificationRequired: "Verifikasi diperlukan!", + verified: "Terverifikasi", + verifying: "Memverifikasi...", + waitAlert: "Memverifikasi... harap tunggu.", + cancel: "Batal", + enterCodeFromImage: "Untuk melanjutkan, silakan masukkan kode dari gambar di bawah ini." + }; + globalThis.$altcha.i18n.set("id", i18n$d); + const i18n$c = { + ariaLinkLabel: "Altcha (公式ウェブサイト)", + enterCode: "コードを入力", + enterCodeAria: "聞こえるコードを入力してください。スペースキーを押して音声を再生します。", + error: "認証に失敗しました。後でもう一度試してください。", + expired: "認証が期限切れです。再試行してください。", + footer: '保護されています ALTCHA', + getAudioChallenge: "音声チャレンジを取得", + label: "私はロボットではありません", + loading: "読み込み中...", + reload: "再読み込み", + verify: "確認", + verificationRequired: "認証が必要です!", + verified: "確認済み", + verifying: "確認中...", + waitAlert: "確認中...少々お待ちください。", + cancel: "キャンセル", + enterCodeFromImage: "続行するには、以下の画像からコードを入力してください。" + }; + globalThis.$altcha.i18n.set("ja", i18n$c); + const i18n$b = { + ariaLinkLabel: "Altcha (공식 웹사이트)", + enterCode: "코드 입력", + enterCodeAria: "들리는 코드를 입력하세요. 스페이스 바를 눌러 오디오를 재생합니다.", + error: "인증 실패. 나중에 다시 시도해주세요.", + expired: "인증이 만료되었습니다. 다시 시도해주세요.", + footer: 'ALTCHA에서 보호됨 ALTCHA', + getAudioChallenge: "오디오 챌린지 받기", + label: "저는 로봇이 아닙니다", + loading: "로딩 중...", + reload: "새로 고침", + verify: "확인", + verificationRequired: "인증이 필요합니다!", + verified: "확인됨", + verifying: "확인 중...", + waitAlert: "확인 중... 잠시만 기다려주세요.", + cancel: "취소", + enterCodeFromImage: "계속 진행하려면 아래 이미지에서 코드를 입력하세요." + }; + globalThis.$altcha.i18n.set("ko", i18n$b); + const i18n$a = { + ariaLinkLabel: "Altcha (ресми веб-сайт)", + enterCode: "Кодты енгізіңіз", + enterCodeAria: "Естіген кодыңызды енгізіңіз. Аудионы ойнату үшін Бос орынды басыңыз.", + error: "Тексеру сәтсіз аяқталды. Кейінірек қайталаңыз.", + expired: "Тексеру мерзімі аяқталды. Қайталаңыз.", + footer: 'ALTCHA қорғайды', + getAudioChallenge: "Аудио сынақ алу", + label: "Мен робот емеспін", + loading: "Жүктелуде...", + reload: "Қайта жүктеу", + verify: "Тексеру", + verificationRequired: "Тексеру талап етіледі!", + verified: "Тексерілді", + verifying: "Тексеруде...", + waitAlert: "Тексерілуде... күте тұрыңыз.", + cancel: "Болдыру", + enterCodeFromImage: "Жалғастыру үшін төмендегі суреттегі кодты енгізіңіз." + }; + globalThis.$altcha.i18n.set("kk", i18n$a); + const i18n$9 = { + ariaLinkLabel: "Altcha (अधिकृत संकेतस्थळ)", + enterCode: "कोड टाकाा", + enterCodeAria: "तुम्ही ऐकत असलेला कोड टाका. ऑडिओ प्ले करण्यासाठी स्पेस दाबा.", + error: "पुष्टीकरण अयशस्वी झाले. कृपया नंतर पुन्हा प्रयत्न करा.", + expired: "पुष्टीकरण कालबाह्य झाले आहे. कृपया पुन्हा प्रयत्न करा.", + footer: 'द्वारे संरक्षित ALTCHA', + getAudioChallenge: "ऑडिओ चॅलेंज मिळवा", + label: "मी रोबोट नाही", + loading: "लोड होत आहे...", + reload: "पुन्हा लोड करा", + verify: "पुष्टीकरण करा", + verificationRequired: "पडताळणी आवश्यक आहे!", + verified: "पुष्टीकरण झाले", + verifying: "पुष्टीकरण करत आहे...", + waitAlert: "पुष्टीकरण करत आहे... कृपया थोडा वेळ थांबा.", + cancel: "रद्द करा", + enterCodeFromImage: "पुढे जाण्यासाठी, कृपया खालील प्रतिमेतील कोड प्रविष्ट करा." + }; + globalThis.$altcha.i18n.set("mr", i18n$9); + const i18n$8 = { + ariaLinkLabel: "Altcha (அதிகாரப்பூர்வ வலைத்தளம்)", + enterCode: "குறியீட்டை உள்ளிடவும்", + enterCodeAria: "நீங்கள் கேட்கும் குறியீட்டை உள்ளிடவும். ஆடியோவை இயக்க Space ஐ அழுத்தவும்.", + error: "சரிபார்ப்பு தோல்வி. பிறகு மீண்டும் முயற்சிக்கவும்.", + expired: "சரிபார்ப்பு காலாவதியானது. மீண்டும் முயற்சிக்கவும்.", + footer: 'மூலமாக பாதுகாக்கப்பட்டவை ALTCHA', + getAudioChallenge: "ஒலி சவாலை பெறவும்", + label: "நான் ரோபோடான அல்ல", + loading: "செயலாக்கம்...", + reload: "மீண்டும் புதுப்பிக்கவும்", + verify: "சரிபார்க்கவும்", + verificationRequired: "சரிபார்ப்பு தேவை!", + verified: "சரிபார்க்கப்பட்டது", + verifying: "சரிபார்க்கப்படுகிறது...", + waitAlert: "சரிபார்க்கப்படுகிறது... தயவுசெய்து காத்திருக்கவும்.", + cancel: "ரத்துசெய்", + enterCodeFromImage: "தொடர, கீழே உள்ள படத்திலிருந்து குறியீட்டை உள்ளிடவும்." + }; + globalThis.$altcha.i18n.set("ta", i18n$8); + const i18n$7 = { + ariaLinkLabel: "Altcha (అధికారిక వెబ్‌సైట్)", + enterCode: "కోడ్‌ని నమోదు చేయండి", + enterCodeAria: "మీరు విన్న కోడ్‌ని నమోదు చేయండి. ఆడియో ప్లే చేయడానికి స్పేస్‌ను నొక్కండి.", + error: "చెకింగ్ విఫలమైంది. దయచేసి మరల ప్రయత్నించండి.", + expired: "చెకింగ్ కాలం ముగిసింది. దయచేసి మరల ప్రయత్నించండి.", + footer: 'ఈ సైట్ రక్షించబడింది ALTCHA', + getAudioChallenge: "ఆడియో ఛాలెంజ్ పొందండి", + label: "నేను రోబోట్ కాదు", + loading: "లోడ్ అవుతోంది...", + reload: "మళ్ళీ లోడ్ చేయండి", + verify: "ధ్రువీకరించు", + verificationRequired: "ధృవీకరణ అవసరం!", + verified: "ధ్రువీకరించబడింది", + verifying: "ధ్రువీకరణ జరుగుతుంది...", + waitAlert: "ధ్రువీకరణ జరుగుతుంది... దయచేసి వేచి ఉండండి.", + cancel: "రద్దు చేయండి", + enterCodeFromImage: "కొనసాగడానికి, దయచేసి క్రింది చిత్రంలో ఉన్న కోడ్‌ను నమోదు చేయండి." + }; + globalThis.$altcha.i18n.set("te", i18n$7); + const i18n$6 = { + ariaLinkLabel: "Altcha (เว็บไซต์ทางการ)", + enterCode: "ป้อนรหัส", + enterCodeAria: "ป้อนรหัสที่คุณได้ยิน กด Space เพื่อเล่นเสียง", + error: "การตรวจสอบล้มเหลว กรุณาลองอีกครั้งภายหลัง", + expired: "การตรวจสอบหมดอายุ กรุณาลองใหม่", + footer: 'ป้องกันโดย ALTCHA', + getAudioChallenge: "รับการท้าทายเสียง", + label: "ฉันไม่ใช่บอท", + loading: "กำลังโหลด...", + reload: "โหลดใหม่", + verify: "ตรวจสอบ", + verificationRequired: "จำเป็นต้องตรวจสอบ!", + verified: "ตรวจสอบแล้ว", + verifying: "กำลังตรวจสอบ...", + waitAlert: "กำลังตรวจสอบ... กรุณารอ", + cancel: "ยกเลิก", + enterCodeFromImage: "เพื่อดำเนินการต่อ โปรดป้อนรหัสจากรูปภาพด้านล่าง" + }; + globalThis.$altcha.i18n.set("th", i18n$6); + const i18n$5 = { + ariaLinkLabel: "Altcha (سرکاری ویب سائٹ)", + enterCode: "کوڈ درج کریں", + enterCodeAria: "جو کوڈ آپ سنتے ہیں وہ درج کریں۔ آڈیو چلانے کے لیے اسپیس دبائیں۔", + error: "توثیق ناکام ہو گئی۔ براہ کرم بعد میں دوبارہ کوشش کریں۔", + expired: "توثیق کی مدت ختم ہو گئی ہے۔ براہ کرم دوبارہ کوشش کریں۔", + footer: 'کے ذریعے محفوظ ALTCHA', + getAudioChallenge: "آڈیو چیلنج حاصل کریں", + label: "میں روبوٹ نہیں ہوں", + loading: "لوڈ ہو رہا ہے...", + reload: "دوبارہ لوڈ کریں", + verify: "توثیق کریں", + verificationRequired: "تصدیق ضروری ہے!", + verified: "توثیق شدہ", + verifying: "توثیق ہو رہی ہے...", + waitAlert: "توثیق ہو رہی ہے... براہ کرم انتظار کریں۔", + cancel: "منسوخ کریں", + enterCodeFromImage: "اگلے مرحلے پر جانے کے لیے، براہ کرم نیچے دی گئی تصویر سے کوڈ درج کریں۔" + }; + globalThis.$altcha.i18n.set("ur", i18n$5); + const i18n$4 = { + ariaLinkLabel: "Altcha (rasmiy veb-sayt)", + enterCode: "Kodni kiriting", + enterCodeAria: "Eshitgan kodingizni kiriting. Audioni ijro etish uchun Bo'sh joy tugmasini bosing.", + error: "Tekshiruv muvaffaqiyatsiz tugadi. Keyinroq qayta urinib ko'ring.", + expired: "Tekshiruv muddati tugadi. Qayta urinib ko'ring.", + footer: 'ALTCHA tomonidan himoyalangan', + getAudioChallenge: "Audio sinovni olish", + label: "Men robot emasman", + loading: "Yuklanmoqda...", + reload: "Qayta yuklash", + verify: "Tekshirish", + verificationRequired: "Tekshiruv talab qilinadi!", + verified: "Tekshirildi", + verifying: "Tekshirilmoqda...", + waitAlert: "Tekshirilmoqda... iltimos kuting.", + cancel: "Bekor qilish", + enterCodeFromImage: "Davom etish uchun, iltimos, quyidagi rasmda ko'rsatilgan kodni kiriting." + }; + globalThis.$altcha.i18n.set("uz", i18n$4); + const i18n$3 = { + ariaLinkLabel: "Altcha (trang web chính thức)", + enterCode: "Nhập mã", + enterCodeAria: "Nhập mã bạn nghe được. Nhấn Phím cách để phát âm thanh.", + error: "Xác minh thất bại. Vui lòng thử lại sau.", + expired: "Xác minh đã hết hạn. Vui lòng thử lại.", + footer: 'Được bảo vệ bởi ALTCHA', + getAudioChallenge: "Nhận thử thách âm thanh", + label: "Tôi không phải là robot", + loading: "Đang tải...", + reload: "Tải lại", + verify: "Xác minh", + verificationRequired: "Yêu cầu xác minh!", + verified: "Đã xác minh", + verifying: "Đang xác minh...", + waitAlert: "Đang xác minh... vui lòng chờ.", + cancel: "Hủy bỏ", + enterCodeFromImage: "Để tiếp tục, vui lòng nhập mã từ hình ảnh bên dưới." + }; + globalThis.$altcha.i18n.set("vi", i18n$3); + const i18n$2 = { + ariaLinkLabel: "Altcha (官方网站)", + enterCode: "输入代码", + enterCodeAria: "输入您听到的代码。按空格键播放音频。", + error: "验证失败。稍后再试。", + expired: "验证已过期。请重试。", + footer: '由 ALTCHA 保护', + getAudioChallenge: "获取音频挑战", + label: "我不是机器人", + loading: "加载中...", + reload: "重新加载", + verify: "验证", + verificationRequired: "需要验证!", + verified: "已验证", + verifying: "正在验证...", + waitAlert: "正在验证... 请稍等。", + cancel: "取消", + enterCodeFromImage: "为继续操作,请输入下图中显示的验证码。" + }; + globalThis.$altcha.i18n.set("zh-cn", i18n$2); + const i18n$1 = { + ariaLinkLabel: "Altcha (官方網站)", + cancel: "取消", + enterCode: "輸入代碼", + enterCodeAria: "輸入你聽到嘅代碼。按空格鍵播放音訊。", + enterCodeFromImage: "要繼續,請輸入下面圖片入面嘅代碼。", + error: "驗證失敗。請稍後再試。", + expired: "驗證已過期。請再試一次。", + footer: '由 ALTCHA 提供保護', + getAudioChallenge: "取得音訊驗證", + label: "我唔係機械人", + loading: "載入中...", + reload: "重新載入", + verify: "驗證", + verificationRequired: "需要驗證!", + verified: "已驗證", + verifying: "驗證中...", + waitAlert: "驗證中... 請稍候。" + }; + globalThis.$altcha.i18n.set("zh-hk", i18n$1); + const i18n = { + ariaLinkLabel: "Altcha (官方網站)", + enterCode: "輸入代碼", + enterCodeAria: "輸入您聽到的代碼。按空格鍵播放音頻。", + error: "驗證失敗。稍後再試。", + expired: "驗證已過期。請重試。", + footer: '由 ALTCHA 保護', + getAudioChallenge: "獲取音頻挑戰", + label: "我不是機器人", + loading: "載入中...", + reload: "重新載入", + verify: "驗證", + verificationRequired: "需要驗證!", + verified: "已驗證", + verifying: "正在驗證...", + waitAlert: "正在驗證... 請稍等。", + cancel: "取消", + enterCodeFromImage: "若要繼續,請輸入下方的圖片驗證碼。" + }; + globalThis.$altcha.i18n.set("zh-tw", i18n); +})); diff --git a/frontend/node_modules/altcha/dist/main/altcha.i18n.umd.min.cjs b/frontend/node_modules/altcha/dist/main/altcha.i18n.umd.min.cjs new file mode 100644 index 0000000..bdb202c --- /dev/null +++ b/frontend/node_modules/altcha/dist/main/altcha.i18n.umd.min.cjs @@ -0,0 +1 @@ +!function(e){"function"==typeof define&&define.amd?define(e):e()}(function(){"use strict";const e=!1;var t=Array.isArray,a=Array.prototype.indexOf,n=Array.prototype.includes,r=Array.from,i=Object.keys,o=Object.defineProperty,l=Object.getOwnPropertyDescriptor,s=Object.getOwnPropertyDescriptors,c=Object.prototype,d=Array.prototype,u=Object.getPrototypeOf,f=Object.isExtensible;const h=()=>{};function v(){var e,t;return{promise:new Promise((a,n)=>{e=a,t=n}),resolve:e,reject:t}}const g=1<<24,p=16,b=32,m=64,y=512,k=1024,w=2048,A=4096,C=8192,x=16384,_=32768,$=1<<25,L=65536,T=1<<17,S=1<<19,j=65536,z=1<<21,E=1<<23,I=Symbol("$state"),V=Symbol("legacy props"),P=Symbol(""),R=Symbol("attributes"),O=Symbol("class"),F=Symbol("style"),H=Symbol("text"),M=Symbol("form reset"),q=new class extends Error{name="StaleReactionError";message="The reaction that called `getAbortSignal()` was re-run or destroyed"},D=!!globalThis.document?.contentType&&globalThis.document.contentType.includes("xml");function N(e){return e===this.v}function U(e,t){return e!=e?t==t:e!==t||null!==e&&"object"==typeof e||"function"==typeof e}function B(e){return!U(e,this.v)}const K={},G=Symbol("uninitialized"),W="http://www.w3.org/1999/xhtml";let Y=null;function Z(e){Y=e}function J(e,t=!1,a){Y={p:Y,i:!1,c:null,e:null,s:e,x:null,r:qt,l:null}}function X(e){var t=Y,a=t.e;if(null!==a)for(var n of(t.e=null,a))ga(n);return void 0!==e&&(t.x=e),t.i=!0,Y=t.p,e??{}}let Q=[];function ee(){var e=Q;Q=[],function(e){for(var t=0;t{t===Q&&ee()})}Q.push(e)}function ae(){for(;Q.length>0;)ee()}function ne(e){console.warn("https://svelte.dev/e/hydration_mismatch")}let re,ie=!1;function oe(e){ie=e}function le(e){if(null===e)throw ne(),K;return re=e}function se(){return le(xe(re))}function ce(e){if(ie){if(null!==xe(re))throw ne(),K;re=e}}function de(e=1){if(ie){for(var t=e,a=re;t--;)a=xe(a);re=a}}function ue(e=!0){for(var t=0,a=re;;){if(8===a.nodeType){var n=a.data;if("]"===n){if(0===t)return a;t-=1}else("["===n||"[!"===n||"["===n[0]&&!isNaN(Number(n.slice(1))))&&(t+=1)}var r=xe(a);e&&a.remove(),a=r}}function fe(e){if(!e||8!==e.nodeType)throw ne(),K;return e.data}function he(e){if("object"!=typeof e||null===e||I in e)return e;const a=u(e);if(a!==c&&a!==d)return e;var n=new Map,r=t(e),i=_t(0),o=Zt,s=e=>{if(Zt===o)return e();var t=Ft,a=Zt;Mt(null),Jt(o);var n=e();return Mt(t),Jt(a),n};return r&&n.set("length",_t(e.length)),new Proxy(e,{defineProperty(e,t,a){"value"in a&&!1!==a.configurable&&!1!==a.enumerable&&!1!==a.writable||function(){throw new Error("https://svelte.dev/e/state_descriptors_fixed")}();var r=n.get(t);return void 0===r?s(()=>{var e=_t(a.value);return n.set(t,e),e}):Lt(r,a.value,!0),!0},deleteProperty(e,t){var a=n.get(t);if(void 0===a){if(t in e){const e=s(()=>_t(G));n.set(t,e),St(i)}}else Lt(a,G),St(i);return!0},get(t,a,r){if(a===I)return e;var i=n.get(a),o=a in t;if(void 0!==i||o&&!l(t,a)?.writable||(i=s(()=>_t(he(o?t[a]:G))),n.set(a,i)),void 0!==i){var c=oa(i);return c===G?void 0:c}return Reflect.get(t,a,r)},getOwnPropertyDescriptor(e,t){var a=Reflect.getOwnPropertyDescriptor(e,t);if(a&&"value"in a){var r=n.get(t);r&&(a.value=oa(r))}else if(void 0===a){var i=n.get(t),o=i?.v;if(void 0!==i&&o!==G)return{enumerable:!0,configurable:!0,value:o,writable:!0}}return a},has(e,t){if(t===I)return!0;var a=n.get(t),r=void 0!==a&&a.v!==G||Reflect.has(e,t);if((void 0!==a||null!==qt&&(!r||l(e,t)?.writable))&&(void 0===a&&(a=s(()=>_t(r?he(e[t]):G)),n.set(t,a)),oa(a)===G))return!1;return r},set(e,t,a,o){var c=n.get(t),d=t in e;if(r&&"length"===t)for(var u=a;u_t(G)),n.set(u+"",f))}void 0===c?d&&!l(e,t)?.writable||(Lt(c=s(()=>_t(void 0)),he(a)),n.set(t,c)):(d=c.v!==G,Lt(c,s(()=>he(a))));var h=Reflect.getOwnPropertyDescriptor(e,t);if(h?.set&&h.set.call(o,a),!d){if(r&&"string"==typeof t){var v=n.get("length"),g=Number(t);Number.isInteger(g)&&g>=v.v&&Lt(v,g+1)}St(i)}return!0},ownKeys(e){oa(i);var t=Reflect.ownKeys(e).filter(e=>{var t=n.get(e);return void 0===t||t.v!==G});for(var[a,r]of n)r.v===G||a in e||t.push(a);return t},setPrototypeOf(){!function(){throw new Error("https://svelte.dev/e/state_prototype_fixed")}()}})}function ve(e){try{if(null!==e&&"object"==typeof e&&I in e)return e[I]}catch{}return e}function ge(e,t){return Object.is(ve(e),ve(t))}var pe,be,me,ye,ke;function we(){if(void 0===pe){pe=window,be=document,me=/Firefox/.test(navigator.userAgent);var e=Element.prototype,t=Node.prototype,a=Text.prototype;ye=l(t,"firstChild").get,ke=l(t,"nextSibling").get,f(e)&&(e[O]=void 0,e[R]=null,e[F]=void 0,e.__e=void 0),f(a)&&(a[H]=void 0)}}function Ae(e=""){return document.createTextNode(e)}function Ce(e){return ye.call(e)}function xe(e){return ke.call(e)}function _e(e,t){if(!ie)return Ce(e);var a=Ce(re);if(null===a)a=re.appendChild(Ae());else if(t&&3!==a.nodeType){var n=Ae();return a?.before(n),le(n),n}return t&&Se(a),le(a),a}function $e(e,t=!1){if(!ie){var a=Ce(e);return a instanceof Comment&&""===a.data?xe(a):a}if(t){if(3!==re?.nodeType){var n=Ae();return re?.before(n),le(n),n}Se(re)}return re}function Le(e,t=1,a=!1){let n=ie?re:e;for(var r;t--;)r=n,n=xe(n);if(!ie)return n;if(a){if(3!==n?.nodeType){var i=Ae();return null===n?r?.after(i):n.before(i),le(i),i}Se(n)}return le(n),n}function Te(e,t,a){let n;return document.createElementNS(t??W,e,n)}function Se(e){if(e.nodeValue.length<65536)return;let t=e.nextSibling;for(;null!==t&&3===t.nodeType;)t.remove(),e.nodeValue+=t.nodeValue,t=e.nextSibling}function je(e){var t=qt;if(null===t)return Ft.f|=E,e;if(0===(t.f&_)&&!(4&t.f))throw e;ze(e,t)}function ze(e,t){for(;null!==t;){if(128&t.f){if(0===(t.f&_))throw e;try{return void t.b.error(e)}catch(t){e=t}}t=t.parent}throw e}const Ee=-7169;function Ie(e,t){e.f=e.f&Ee|t}function Ve(e){0!==(e.f&y)||null===e.deps?Ie(e,k):Ie(e,A)}function Pe(e){if(null!==e)for(const t of e)2&t.f&&0!==(t.f&j)&&(t.f^=j,Pe(t.deps))}function Re(e,t,a){0!==(e.f&w)?t.add(e):0!==(e.f&A)&&a.add(e),Pe(e.deps),Ie(e,k)}function Oe(e,t,a){if(null==e)return t(void 0),h;const n=ca(()=>e.subscribe(t,a));return n.unsubscribe?()=>n.unsubscribe():n}const Fe=[];function He(e,t=h){let a=null;const n=new Set;function r(t){if(U(e,t)&&(e=t,a)){const t=!Fe.length;for(const t of n)t[1](),Fe.push(t,e);if(t){for(let e=0;e{n.delete(s),0===n.size&&a&&(a(),a=null)}}}}function Me(e){let t;return Oe(e,e=>t=e)(),t}let qe=Symbol("unmounted");function De(e,t,a){const n=a[t]??={store:null,source:$t(void 0),unsubscribe:h};if(n.store!==e&&!(qe in a))if(n.unsubscribe(),n.store=e??null,null==e)n.source.v=void 0,n.unsubscribe=h;else{var r=!0;n.unsubscribe=Oe(e,e=>{r?n.source.v=e:Lt(n.source,e)}),r=!1}return e&&qe in a?Me(e):oa(n.source)}let Ne=null,Ue=null,Be=null,Ke=null,Ge=null,We=null,Ye=!1,Ze=!1,Je=null,Xe=null;var Qe=0;let et=1;class tt{id=et++;#e=!1;linked=!0;#t=null;#a=null;async_deriveds=new Map;current=new Map;previous=new Map;unblocked=new Set;#n=new Set;#r=new Set;#i=new Set;#o=0;#l=new Map;#s=null;#c=[];#d=[];#u=new Set;#f=new Set;#h=new Map;#v=new Set;is_fork=!1;#g=!1;#p(){if(this.is_fork)return!0;for(const a of this.#l.keys()){for(var e=a,t=!1;null!==e.parent;){if(this.#h.has(e)){t=!0;break}e=e.parent}if(!t)return!0}return!1}skip_effect(e){this.#h.has(e)||this.#h.set(e,{d:[],m:[]}),this.#v.delete(e)}unskip_effect(e,t=e=>this.schedule(e)){var a=this.#h.get(e);if(a){for(var n of(this.#h.delete(e),a.d))Ie(n,w),t(n);for(n of a.m)Ie(n,A),t(n)}this.#v.add(e)}#b(){if(this.#e=!0,Qe++>1e3&&(this.#m(),function(){try{!function(){throw new Error("https://svelte.dev/e/effect_update_depth_exceeded")}()}catch(e){ze(e,We)}}()),!this.#p()){for(const e of this.#u)this.#f.delete(e),Ie(e,w),this.schedule(e);for(const e of this.#f)Ie(e,A),this.schedule(e)}const e=this.#c;this.#c=[],this.apply();var t=Je=[],a=[],n=Xe=[];for(const n of e)try{this.#y(n,t,a)}catch(e){throw ct(n),e}if(Be=null,n.length>0){var r=tt.ensure();for(const e of n)r.schedule(e)}if(Je=null,Xe=null,this.#p()){this.#k(a),this.#k(t);for(const[e,t]of this.#h)st(e,t);return void(n.length>0&&Be.#b())}const i=this.#w();if(i)i.#A(this);else{this.#u.clear(),this.#f.clear();for(const e of this.#n)e(this);this.#n.clear(),Ke=this,rt(a),rt(t),Ke=null,this.#s?.resolve();var o=Be;if(this.linked&&0===this.#o&&this.#m(),this.#c.length>0){null===o&&(o=this,this.#C());const e=o;e.#c.push(...this.#c.filter(t=>!e.#c.includes(t)))}null!==o&&o.#b()}}#y(e,t,a){e.f^=k;for(var n=e.first;null!==n;){var r=n.f,i=!!(96&r);if(!(i&&0!==(r&k)||0!==(r&C)||this.#h.has(n))&&null!==n.fn){i?n.f^=k:4&r?t.push(n):Qt(n)&&(0!==(r&p)&&this.#f.add(n),ra(n));var o=n.first;if(null!==o){n=o;continue}}for(;null!==n;){var l=n.next;if(null!==l){n=l;break}n=n.parent}}}#w(){for(var e=this.#t;null!==e;){if(!e.is_fork)for(const[t,[,a]]of this.current)if(e.current.has(t)&&!a)return e;e=e.#t}return null}#A(e){for(const[t,a]of e.current)!this.previous.has(t)&&e.previous.has(t)&&this.previous.set(t,e.previous.get(t)),this.current.set(t,a);for(const[t,a]of e.async_deriveds){const e=this.async_deriveds.get(t);e&&a.promise.then(e.resolve)}const t=e=>{var a=e.reactions;if(null!==a)for(const e of a){var n=e.f;if(2&n)t(e);else{var r=e;4194320&n&&!this.async_deriveds.has(r)&&(this.#f.delete(r),Ie(r,w),this.schedule(r))}}};for(const e of this.current.keys())t(e);this.oncommit(()=>e.discard()),e.#m(),Be=this,this.#b()}#k(e){for(var t=0;t!this.current.has(e));if(0===n.length)e&&c.discard();else if(t.length>0){if(e)for(const e of this.#v)c.unskip_effect(e,e=>{4194320&e.f?c.schedule(e):c.#k([e])});c.activate();var r=new Set,i=new Map;for(var o of t)it(o,n,r,i);i=new Map;var l=[...c.current.keys()].filter(e=>!this.current.has(e)||this.current.get(e)[0]!==e.v);if(l.length>0)for(const e of this.#d)155648&e.f||!ot(e,l,i)||(4194320&e.f?(Ie(e,w),c.schedule(e)):c.#u.add(e));if(c.#c.length>0){for(var s of(c.apply(),c.#c))c.#y(s,[],[]);c.#c=[]}c.deactivate()}}}}increment(e,t){if(this.#o+=1,e){let e=this.#l.get(t)??0;this.#l.set(t,e+1)}}decrement(e,t){if(this.#o-=1,e){let e=this.#l.get(t)??0;1===e?this.#l.delete(t):this.#l.set(t,e-1)}this.#g||(this.#g=!0,te(()=>{this.#g=!1,this.linked&&this.flush()}))}transfer_effects(e,t){for(const t of e)this.#u.add(t);for(const e of t)this.#f.add(e);e.clear(),t.clear()}oncommit(e){this.#n.add(e)}ondiscard(e){this.#r.add(e)}on_fork_commit(e){this.#i.add(e)}run_fork_commit_callbacks(){for(const e of this.#i)e(this);this.#i.clear()}settled(){return(this.#s??=v()).promise}static ensure(){if(null===Be){const e=Be=new tt;e.#C(),Ze||Ye||te(()=>{e.#e||e.flush()})}return Be}apply(){Ge=null}schedule(e){if(We=e,e.b?.is_pending&&16777228&e.f&&0===(e.f&_))e.b.defer_effect(e);else{for(var t=e;null!==t.parent;){var a=(t=t.parent).f;if(!(null===Je||t!==qt||null!==Ft&&2&Ft.f))return;if(96&a){if(0===(a&k))return;t.f^=k}}this.#c.push(t)}}#C(){null===Ue?Ne=Ue=this:(Ue.#a=this,this.#t=Ue),Ue=this}#m(){var e=this.#t,t=this.#a;null===e?Ne=t:e.#a=t,null===t?Ue=e:t.#t=e,this.linked=!1}}function at(e){var t=Ye;Ye=!0;try{for(;;){if(ae(),null===Be)return;Be.flush()}}finally{Ye=t}}let nt=null;function rt(e){var t=e.length;if(0!==t){for(var a=0;a0)){At.clear();for(const e of nt){if(24576&e.f)continue;const t=[e];let a=e.parent;for(;null!==a;)nt.has(a)&&(nt.delete(a),t.push(a)),a=a.parent;for(let e=t.length-1;e>=0;e--){const a=t[e];24576&a.f||ra(a)}}nt.clear()}}nt=null}}function it(e,t,a,n){if(!a.has(e)&&(a.add(e),null!==e.reactions))for(const r of e.reactions){const e=r.f;2&e?it(r,t,a,n):4194320&e&&0===(e&w)&&ot(r,t,n)&&(Ie(r,w),lt(r))}}function ot(e,t,a){const r=a.get(e);if(void 0!==r)return r;if(null!==e.deps)for(const r of e.deps){if(n.call(t,r))return!0;if(2&r.f&&ot(r,t,a))return a.set(r,!0),!0}return a.set(e,!1),!1}function lt(e){Be.schedule(e)}function st(e,t){if(0===(e.f&b)||0===(e.f&k)){0!==(e.f&w)?t.d.push(e):0!==(e.f&A)&&t.m.push(e),Ie(e,k);for(var a=e.first;null!==a;)st(a,t),a=a.next}}function ct(e){Ie(e,k);for(var t=e.first;null!==t;)ct(t),t=t.next}class dt{parent;is_pending=!1;transform_error;#_;#$=ie?re:null;#L;#T;#S;#j=null;#z=null;#E=null;#I=null;#V=0;#P=0;#R=!1;#u=new Set;#f=new Set;#O=null;#F=function(e){let t,a=0,n=xt(0);return()=>{fa()&&(oa(n),ba(()=>(0===a&&(t=ca(()=>e(()=>St(n)))),a+=1,()=>{te(()=>{a-=1,0===a&&(t?.(),t=void 0,St(n))})})))}}(()=>(this.#O=xt(this.#V),()=>{this.#O=null}));constructor(e,t,a,n){this.#_=e,this.#L=t,this.#T=e=>{var t=qt;t.b=this,t.f|=128,a(e)},this.parent=qt.b,this.transform_error=n??this.parent?.transform_error??(e=>e),this.#S=ya(()=>{if(ie){const e=this.#$;se();const t="[!"===e.data;if(e.data.startsWith("[?")){const t=JSON.parse(e.data.slice(2));this.#H(t)}else t?this.#M():this.#q()}else this.#D()},589824),ie&&(this.#_=re)}#q(){try{this.#j=wa(()=>this.#T(this.#_))}catch(e){this.error(e)}}#H(e){const t=this.#L.failed;t&&(this.#E=wa(()=>{t(this.#_,()=>e,()=>()=>{})}))}#M(){const e=this.#L.pending;e&&(this.is_pending=!0,this.#z=wa(()=>e(this.#_)),te(()=>{var e=this.#I=document.createDocumentFragment(),t=Ae();e.append(t),this.#j=this.#N(()=>wa(()=>this.#T(t))),0===this.#P&&(this.#_.before(e),this.#I=null,La(this.#z,()=>{this.#z=null}),this.#U(Be))}))}#D(){try{if(this.is_pending=this.has_pending_snippet(),this.#P=0,this.#V=0,this.#j=wa(()=>{this.#T(this.#_)}),this.#P>0){var e=this.#I=document.createDocumentFragment();za(this.#j,e);const t=this.#L.pending;this.#z=wa(()=>t(this.#_))}else this.#U(Be)}catch(e){this.error(e)}}#U(e){this.is_pending=!1,e.transfer_effects(this.#u,this.#f)}defer_effect(e){Re(e,this.#u,this.#f)}is_rendered(){return!this.is_pending&&(!this.parent||this.parent.is_rendered())}has_pending_snippet(){return!!this.#L.pending}#N(e){var t=qt,a=Ft,n=Y;Dt(this.#S),Mt(this.#S),Z(this.#S.ctx);try{return tt.ensure(),e()}catch(e){return je(e),null}finally{Dt(t),Mt(a),Z(n)}}#B(e,t){this.has_pending_snippet()?(this.#P+=e,0===this.#P&&(this.#U(t),this.#z&&La(this.#z,()=>{this.#z=null}),this.#I&&(this.#_.before(this.#I),this.#I=null))):this.parent&&this.parent.#B(e,t)}update_pending_count(e,t){this.#B(e,t),this.#V+=e,this.#O&&!this.#R&&(this.#R=!0,te(()=>{this.#R=!1,this.#O&&Tt(this.#O,this.#V)}))}get_effect_pending(){return this.#F(),oa(this.#O)}error(e){if(!this.#L.onerror&&!this.#L.failed)throw e;Be?.is_fork?(this.#j&&Be.skip_effect(this.#j),this.#z&&Be.skip_effect(this.#z),this.#E&&Be.skip_effect(this.#E),Be.on_fork_commit(()=>{this.#K(e)})):this.#K(e)}#K(e){this.#j&&(xa(this.#j),this.#j=null),this.#z&&(xa(this.#z),this.#z=null),this.#E&&(xa(this.#E),this.#E=null),ie&&(le(this.#$),de(),le(ue()));var t=this.#L.onerror;let a=this.#L.failed;var n=!1,r=!1;const i=()=>{n?console.warn("https://svelte.dev/e/svelte_boundary_reset_noop"):(n=!0,r&&function(){throw new Error("https://svelte.dev/e/svelte_boundary_reset_onerror")}(),null!==this.#E&&La(this.#E,()=>{this.#E=null}),this.#N(()=>{this.#D()}))},o=e=>{try{r=!0,t?.(e,i),r=!1}catch(e){ze(e,this.#S&&this.#S.parent)}a&&(this.#E=this.#N(()=>{try{return wa(()=>{var t=qt;t.b=this,t.f|=128,a(this.#_,()=>e,()=>i)})}catch(e){return ze(e,this.#S.parent),null}}))};te(()=>{var t;try{t=this.transform_error(e)}catch(e){return void ze(e,this.#S&&this.#S.parent)}null!==t&&"object"==typeof t&&"function"==typeof t.then?t.then(o,e=>ze(e,this.#S&&this.#S.parent)):o(t)})}}function ut(e,t,a,n){const r=vt;var i=e.filter(e=>!e.settled);if(0!==a.length||0!==i.length){var o,l,s,c,d=qt,u=(o=qt,l=Ft,s=Y,c=Be,function(e=!0){Dt(o),Mt(l),Z(s),e&&0===(o.f&x)&&(c?.activate(),c?.apply())}),f=1===i.length?i[0].promise:i.length>1?Promise.all(i.map(e=>e.promise)):null,h=ht();0!==a.length?f?f.then(()=>{u(),g(),ft()}):g():f.then(()=>v(t.map(r))).finally(h)}else n(t.map(r));function v(e){if(0===(d.f&x)){u();try{n(e)}catch(e){ze(e,d)}ft()}}function g(){Promise.all(a.map(e=>pt(e))).then(e=>v([...t.map(r),...e])).catch(e=>ze(e,d)).finally(h)}}function ft(e=!0){Dt(null),Mt(null),Z(null),e&&Be?.deactivate()}function ht(){var e=qt,t=e.b,a=Be,n=t.is_rendered();return t.update_pending_count(1,a),a.increment(n,e),()=>{t.update_pending_count(-1,a),a.decrement(n,e)}}function vt(e){null!==qt&&(qt.f|=S);return{ctx:Y,deps:null,effects:null,equals:N,f:2050,fn:e,reactions:null,rv:0,v:G,wv:0,parent:qt,ac:null}}const gt=Symbol("obsolete");function pt(e,t,a){let n=qt;null===n&&function(){throw new Error("https://svelte.dev/e/async_derived_orphan")}();var r=void 0,i=xt(G),o=!Ft,l=new Set;return function(e){ua(4718592,e)}(()=>{var t=qt,a=v();r=a.promise;try{Promise.resolve(e()).then(a.resolve,e=>{e!==q&&a.reject(e)}).finally(ft)}catch(e){a.reject(e),ft()}var s=Be;if(o){if(0!==(t.f&_))var c=ht();if(n.b.is_rendered())s.async_deriveds.get(t)?.reject(gt);else for(const e of l.values())e.reject(gt);l.add(a),s.async_deriveds.set(t,a)}const d=(e,t=void 0)=>{c?.(),l.delete(a),t!==gt&&(s.activate(),t?(i.f|=E,Tt(i,t)):(0!==(i.f&E)&&(i.f^=E),Tt(i,e)),s.deactivate())};a.promise.then(d,e=>d(null,e||"unknown"))}),ha(()=>{for(const e of l)e.reject(gt)}),new Promise(e=>{!function t(a){function n(){a===r?e(i):t(r)}a.then(n,n)}(r)})}function bt(e){const t=vt(e);return Ut(t),t}function mt(e){var t,a=qt,n=e.parent;if(!Rt&&null!==n&&e.v!==G&&24576&n.f)return console.warn("https://svelte.dev/e/derived_inert"),e.v;Dt(n);try{e.f&=-65537,function(e){var t=e.effects;if(null!==t){e.effects=null;for(var a=0;a0&&!Ct&&function(){Ct=!1;for(const e of wt){let t;0!==(e.f&k)&&Ie(e,A);try{t=Qt(e)}catch{t=!0}t&&ra(e)}wt.clear()}()}return t}function St(e){Lt(e,e.v+1)}function jt(e,t,a){var n=e.reactions;if(null!==n)for(var r=n.length,i=0;i{document.activeElement===t&&e.focus()})}}let Et=!1;function It(){Et||(Et=!0,document.addEventListener("reset",e=>{Promise.resolve().then(()=>{if(!e.defaultPrevented)for(const t of e.target.elements)t[M]?.()})},{capture:!0}))}function Vt(e){var t=Ft,a=qt;Mt(null),Dt(null);try{return e()}finally{Mt(t),Dt(a)}}let Pt=!1,Rt=!1;function Ot(e){Rt=e}let Ft=null,Ht=!1;function Mt(e){Ft=e}let qt=null;function Dt(e){qt=e}let Nt=null;function Ut(e){null!==Ft&&(null===Nt?Nt=[e]:Nt.push(e))}let Bt=null,Kt=0,Gt=null;let Wt=1,Yt=0,Zt=Yt;function Jt(e){Zt=e}function Xt(){return++Wt}function Qt(e){var t=e.f;if(0!==(t&w))return!0;if(2&t&&(e.f&=-65537),0!==(t&A)){for(var a=e.deps,n=a.length,r=0;re.wv)return!0}0!==(t&y)&&null===Ge&&Ie(e,k)}return!1}function ea(e,t,a=!0){var r=e.reactions;if(null!==r&&(null===Nt||!n.call(Nt,e)))for(var i=0;i{e.ac.abort(q)}),e.ac=null);try{e.f|=z;var d=(0,e.fn)();e.f|=_;var u=e.deps,f=Be?.is_fork;if(null!==Bt){var h;if(f||na(e,Kt),null!==u&&Kt>0)for(u.length=Kt+Bt.length,h=0;h{ua(8,()=>e(...t.map(oa)))})}function ya(e,t=0){return ua(p|t,e)}function ka(e,t=0){return ua(g|t,e)}function wa(e){return ua(524320,e)}function Aa(e){var t=e.teardown;if(null!==t){const e=Rt,a=Ft;Ot(!0),Mt(null);try{t.call(null)}finally{Ot(e),Mt(a)}}}function Ca(e,t=!1){var a=e.first;for(e.first=e.last=null;null!==a;){const e=a.ac;null!==e&&Vt(()=>{e.abort(q)});var n=a.next;0!==(a.f&m)?a.parent=null:xa(a,t),a=n}}function xa(e,t=!0){var a=!1;(t||262144&e.f)&&null!==e.nodes&&null!==e.nodes.end&&(_a(e.nodes.start,e.nodes.end),a=!0),Ie(e,$),Ca(e,t&&!a),na(e,0);var n=e.nodes&&e.nodes.t;if(null!==n)for(const e of n)e.stop();Aa(e),e.f^=$,e.f|=x;var r=e.parent;null!==r&&null!==r.first&&$a(e),e.next=e.prev=e.teardown=e.ctx=e.deps=e.fn=e.nodes=e.ac=e.b=null}function _a(e,t){for(;null!==e;){var a=e===t?null:xe(e);e.remove(),e=a}}function $a(e){var t=e.parent,a=e.prev,n=e.next;null!==a&&(a.next=n),null!==n&&(n.prev=a),null!==t&&(t.first===e&&(t.first=n),t.last===e&&(t.last=a))}function La(e,t,a=!0){var n=[];Ta(e,n,!0);var r=()=>{a&&xa(e),t&&t()},i=n.length;if(i>0){var o=()=>--i||r();for(var l of n)l.out(o)}else r()}function Ta(e,t,a){if(0===(e.f&C)){e.f^=C;var n=e.nodes&&e.nodes.t;if(null!==n)for(const e of n)(e.is_global||a)&&t.push(e);for(var r=e.first;null!==r;){var i=r.next;if(0===(r.f&m))Ta(r,t,!!(0!==(r.f&L)||0!==(r.f&b)&&0!==(e.f&p))&&a);r=i}}}function Sa(e){ja(e,!0)}function ja(e,t){if(0!==(e.f&C)){e.f^=C,0===(e.f&k)&&(Ie(e,w),tt.ensure().schedule(e));for(var a=e.first;null!==a;){var n=a.next;ja(a,!!(0!==(a.f&L)||0!==(a.f&b))&&t),a=n}var r=e.nodes&&e.nodes.t;if(null!==r)for(const e of r)(e.is_global||t)&&e.in()}}function za(e,t){if(e.nodes)for(var a=e.nodes.start,n=e.nodes.end;null!==a;){var r=a===n?null:xe(a);t.append(a),a=r}}function Ea(e){const t={get:e=>Me(t.store)[e],set:(e,a)=>{"string"==typeof e?Object.assign(Me(t.store),{[e]:a}):Object.assign(Me(t.store),e),t.store.set(Me(t.store))},store:He(e)};return t}globalThis.$altcha=globalThis.$altcha||{algorithms:new Map,defaults:Ea({}),i18n:Ea({}),instances:new Set,plugins:new Set};globalThis.$altcha.i18n.set("en",{ariaLinkLabel:"Altcha (official website)",cancel:"Cancel",enterCode:"Enter code",enterCodeAria:"Enter code you hear. Press Space to play audio.",enterCodeFromImage:"To proceed, please enter the code from the image below.",error:"Verification failed. Try again later.",expired:"Verification expired. Try again.",footer:'Protected by ALTCHA',getAudioChallenge:"Get an audio challenge",label:"I'm not a robot",loading:"Loading...",reload:"Reload",verify:"Verify",verificationRequired:"Verification required!",verified:"Verified",verifying:"Verifying...",waitAlert:"Verifying... please wait."});"undefined"!=typeof window&&((window.__svelte??={}).v??=new Set).add("5");const Ia=Symbol("events"),Va=new Set,Pa=new Set;function Ra(e,t,a,n={}){function r(e){if(n.capture||qa.call(t,e),!e.cancelBubble)return Vt(()=>a?.call(this,e))}return e.startsWith("pointer")||e.startsWith("touch")||"wheel"===e?te(()=>{t.addEventListener(e,r,n)}):t.addEventListener(e,r,n),r}function Oa(e,t,a,n,r){var i={capture:n,passive:r},o=Ra(e,t,a,i);(t===document.body||t===window||t===document||t instanceof HTMLMediaElement)&&ha(()=>{t.removeEventListener(e,o,i)})}function Fa(e,t,a){(t[Ia]??={})[e]=a}function Ha(e){for(var t=0;ti||a});var u=Ft,f=qt;Mt(null),Dt(null);try{for(var h,v=[];null!==i;){var g=i.assignedSlot||i.parentNode||i.host||null;try{var p=i[Ia]?.[n];null==p||i.disabled&&e.target!==i||p.call(i,e)}catch(e){h?v.push(e):h=e}if(e.cancelBubble||g===t||null===g)break;i=g}if(h){for(let e of v)queueMicrotask(()=>{throw e});throw h}}finally{e[Ia]=t,delete e.currentTarget,Mt(u),Dt(f)}}}const Da=globalThis?.window?.trustedTypes&&globalThis.window.trustedTypes.createPolicy("svelte-trusted-html",{createHTML:e=>e});function Na(e){var t=Te("template");return t.innerHTML=function(e){return Da?.createHTML(e)??e}(e.replaceAll("","\x3c!----\x3e")),t.content}function Ua(e,t){var a=qt;null===a.nodes&&(a.nodes={start:e,end:t,a:null,t:null})}function Ba(e,t){var a,n=!!(1&t),r=!!(2&t),i=!e.startsWith("");return()=>{if(ie)return Ua(re,null),re;void 0===a&&(a=Na(i?e:""+e),n||(a=Ce(a)));var t=r||me?document.importNode(a,!0):a.cloneNode(!0);n?Ua(Ce(t),t.lastChild):Ua(t,t);return t}}function Ka(e,t,a="svg"){var n,r=`<${a}>${!e.startsWith("")?e:""+e}`;return()=>{if(ie)return Ua(re,null),re;if(!n){var e=Na(r);n=Ce(Ce(e))}var t=n.cloneNode(!0);return Ua(t,t),t}}function Ga(e,t){return Ka(e,0,"svg")}function Wa(e=""){if(!ie){var t=Ae(e+"");return Ua(t,t),t}var a=re;return 3!==a.nodeType?(a.before(a=Ae()),le(a)):Se(a),Ua(a,a),a}function Ya(){if(ie)return Ua(re,null),re;var e=document.createDocumentFragment(),t=document.createComment(""),a=Ae();return e.append(t,a),Ua(t,a),e}function Za(e,t){if(ie){var a=qt;return 0!==(a.f&_)&&null!==a.nodes.end||(a.nodes.end=re),void se()}null!==e&&e.before(t)}function Ja(e){return e.endsWith("capture")&&"gotpointercapture"!==e&&"lostpointercapture"!==e}const Xa=["beforeinput","click","change","dblclick","contextmenu","focusin","focusout","input","keydown","keyup","mousedown","mousemove","mouseout","mouseover","mouseup","pointerdown","pointermove","pointerout","pointerover","pointerup","touchend","touchmove","touchstart"];function Qa(e){return Xa.includes(e)}const en={formnovalidate:"formNoValidate",ismap:"isMap",nomodule:"noModule",playsinline:"playsInline",readonly:"readOnly",defaultvalue:"defaultValue",defaultchecked:"defaultChecked",srcobject:"srcObject",novalidate:"noValidate",allowfullscreen:"allowFullscreen",disablepictureinpicture:"disablePictureInPicture",disableremoteplayback:"disableRemotePlayback"};function tn(e){return e=e.toLowerCase(),en[e]??e}const an=["touchstart","touchmove"];function nn(e){return an.includes(e)}function rn(e,t){var a=null==t?"":"object"==typeof t?`${t}`:t;a!==(e[H]??=e.nodeValue)&&(e[H]=a,e.nodeValue=`${a}`)}function on(e,t){return cn(e,t)}function ln(e,t){we(),t.intro=t.intro??!1;const a=t.target,n=ie,r=re;try{for(var i=Ce(a);i&&(8!==i.nodeType||"["!==i.data);)i=xe(i);if(!i)throw K;oe(!0),le(i);const n=cn(e,{...t,anchor:i});return oe(!1),n}catch(n){if(n instanceof Error&&n.message.split("\n").some(e=>e.startsWith("https://svelte.dev/e/")))throw n;return n!==K&&console.warn("Failed to hydrate: ",n),!1===t.recover&&function(){throw new Error("https://svelte.dev/e/hydration_failed")}(),we(),a.textContent="",oe(!1),on(e,t)}finally{oe(n),le(r)}}const sn=new Map;function cn(e,{target:t,anchor:a,props:n={},events:i,context:o,intro:l=!0,transformError:s}){we();var c=void 0,d=function(e){tt.ensure();const t=ua(524352,e);return(e={})=>new Promise(a=>{e.outro?La(t,()=>{xa(t),a(void 0)}):(xa(t),a(void 0))})}(()=>{var l=a??t.appendChild(Ae());!function(e,t,a,n){new dt(e,t,a,n)}(l,{pending:()=>{}},t=>{if(J({}),o&&(Y.c=o),i&&(n.$$events=i),ie&&Ua(t,null),c=e(t,n)||{},ie&&(qt.nodes.end=re,null===re||8!==re.nodeType||"]"!==re.data))throw ne(),K;X()},s);var d=new Set,u=e=>{for(var a=0;a{for(var e of d)for(const a of[t,document]){var n=sn.get(a),r=n.get(e);0==--r?(a.removeEventListener(e,qa),n.delete(e),0===n.size&&sn.delete(a)):n.set(e,r)}Pa.delete(u),l!==a&&l.parentNode?.removeChild(l)}});return dn.set(c,d),c}let dn=new WeakMap;class un{anchor;#G=new Map;#W=new Map;#Y=new Map;#Z=new Set;#J=!0;constructor(e,t=!0){this.anchor=e,this.#J=t}#x=e=>{if(this.#G.has(e)){var t=this.#G.get(e),a=this.#W.get(t);if(a)Sa(a),this.#Z.delete(t);else{var n=this.#Y.get(t);n&&(this.#W.set(t,n.effect),this.#Y.delete(t),n.fragment.lastChild.remove(),this.anchor.before(n.fragment),a=n.effect)}for(const[t,a]of this.#G){if(this.#G.delete(t),t===e)break;const n=this.#Y.get(a);n&&(xa(n.effect),this.#Y.delete(a))}for(const[e,n]of this.#W){if(e===t||this.#Z.has(e))continue;const r=()=>{if(Array.from(this.#G.values()).includes(e)){var t=document.createDocumentFragment();za(n,t),t.append(Ae()),this.#Y.set(e,{effect:n,fragment:t})}else xa(n);this.#Z.delete(e),this.#W.delete(e)};this.#J||!a?(this.#Z.add(e),La(n,r,!1)):r()}}};#X=e=>{this.#G.delete(e);const t=Array.from(this.#G.values());for(const[e,a]of this.#Y)t.includes(e)||(xa(a.effect),this.#Y.delete(e))};ensure(e,t){var a=Be;!t||this.#W.has(e)||this.#Y.has(e)||this.#W.set(e,wa(()=>t(this.anchor)));this.#G.set(a,e),ie&&(this.anchor=re),this.#x(a)}}function fn(e){null===Y&&function(){throw new Error("https://svelte.dev/e/lifecycle_outside_component")}(),va(()=>{const t=ca(e);if("function"==typeof t)return t})}function hn(e,t,a=!1){var n;ie&&(n=re,se());var r=new un(e);function i(e,t){if(ie){var a=fe(n);if(e!==parseInt(a.substring(1))){var i=ue();return le(i),r.anchor=i,oe(!1),r.ensure(e,t),void oe(!0)}}r.ensure(e,t)}ya(()=>{var e=!1;t((t,a=0)=>{e=!0,i(a,t)}),e||i(-1,null)},a?L:0)}const vn=Symbol("NaN");function gn(e,t,a=!1,n=!1,r=!1,i=!1){var o=e,l="";if(a){var s=e;ie&&(o=le(Ce(s)))}ma(()=>{var e=qt;if(l!==(l=t()??"")){if(a&&!ie)return e.nodes=null,s.innerHTML=l,void(""!==l&&Ua(Ce(s),s.lastChild));if(null!==e.nodes&&(_a(e.nodes.start,e.nodes.end),e.nodes=null),""!==l){if(ie){re.data;for(var i=se(),c=i;null!==i&&(8!==i.nodeType||""!==i.data);)c=i,i=xe(i);if(null===i)throw ne(),K;return Ua(re,c),void(o=le(i))}var d=Te(n?"svg":r?"math":"template",n?"http://www.w3.org/2000/svg":r?"http://www.w3.org/1998/Math/MathML":void 0);d.innerHTML=l;var u=n||r?d:d.content;if(Ua(Ce(u),u.lastChild),n||r)for(;Ce(u);)o.before(Ce(u));else o.before(u)}}else ie&&se()})}function pn(e,t){var a,n=void 0;ka(()=>{n!==(n=t())&&(a&&(xa(a),a=null),n&&(a=wa(()=>{pa(()=>n(e))})))})}function bn(e){var t,a,n="";if("string"==typeof e||"number"==typeof e)n+=e;else if("object"==typeof e)if(Array.isArray(e)){var r=e.length;for(t=0;t=0;){var l=o+i;0!==o&&!yn.includes(n[o-1])||l!==n.length&&!yn.includes(n[l])?o=l:n=(0===o?"":n.substring(0,o))+n.substring(l+1)}return""===n?null:n}(a,0,i);ie&&l===e.getAttribute("class")||(null==l?e.removeAttribute("class"):t?e.className=l:e.setAttribute("class",l)),e[O]=a}else if(i&&r!==i)for(var s in i){var c=!!i[s];null!=r&&c===!!r[s]||e.classList.toggle(s,c)}return i}function Cn(e,t={},a,n){for(var r in a){var i=a[r];t[r]!==i&&(null==a[r]?e.style.removeProperty(r):e.style.setProperty(r,i,n))}}function xn(e,t,a,n){var r=e[F];if(ie||r!==t){var i=function(e,t){if(t){var a,n,r="";if(Array.isArray(t)?(a=t[0],n=t[1]):a=t,e){e=String(e).replaceAll(/\s*\/\*.*?\*\/\s*/g,"").trim();var i=!1,o=0,l=!1,s=[];a&&s.push(...Object.keys(a).map(wn)),n&&s.push(...Object.keys(n).map(wn));var c=0,d=-1;const t=e.length;for(var u=0;u{if(!t){if(t=!0,e.hasAttribute("value")){var a=e.value;Fn(e,"value",null),e.value=a}if(e.hasAttribute("checked")){var n=e.checked;Fn(e,"checked",null),e.checked=n}}};e[M]=a,te(a),It()}}function On(e,t){t?e.hasAttribute("selected")||e.setAttribute("selected",""):e.removeAttribute("selected")}function Fn(e,t,a,n){var r=Mn(e);ie&&(r[t]=e.getAttribute(t),"src"===t||"srcset"===t||"href"===t&&e.nodeName===zn)||r[t]!==(r[t]=a)&&("loading"===t&&(e[P]=a),null==a?e.removeAttribute(t):"string"!=typeof a&&Dn(e).includes(t)?e[t]=a:e.setAttribute(t,a))}function Hn(e,t,a=[],n=[],r=[],i,o=!1,l=!1){ut(r,a,n,a=>{var n=void 0,r={},i=e.nodeName===Vn,s=!1;if(ka(()=>{var c=t(...a.map(oa)),d=function(e,t,a,n,r=!1){if(ie&&r&&e.nodeName===En){var i=e;("checkbox"===i.type?"defaultChecked":"defaultValue")in a||Rn(i)}var o=Mn(e),l=o[Sn],s=!o[jn];let c=ie&&l;c&&oe(!1);var d=t||{},u=e.nodeName===In;for(var f in t)f in a||(a[f]=null);a.class?a.class=mn(a.class):a[Ln]&&(a.class=null),a[Tn]&&(a.style??=null);var h=Dn(e);for(const n in a){let r=a[n];if(u&&"value"===n&&null==r)e.value=e.__value="",d[n]=r;else if("class"!==n)if("style"!==n){var v=d[n];if(r!==v||void 0===r&&e.hasAttribute(n)){d[n]=r;var g=n[0]+n[1];if("$$"!==g)if("on"===g){const t={},a="$$"+n;let i=n.slice(2);var p=Qa(i);if(Ja(i)&&(i=i.slice(0,-7),t.capture=!0),!p&&v){if(null!=r)continue;e.removeEventListener(i,d[a],t),d[a]=null}if(p)Fa(i,e,r),Ha([i]);else if(null!=r){let r=function(e){d[n].call(this,e)};d[a]=Ra(i,e,r,t)}}else if("style"===n)Fn(e,n,r);else if("autofocus"===n)zt(e,Boolean(r));else if(l||"__value"!==n&&("value"!==n||null==r))if("selected"===n&&u)On(e,r);else{var b=n;s||(b=tn(b));var m="defaultValue"===b||"defaultChecked"===b;if(null!=r||l||m)m||h.includes(b)&&(l||"string"!=typeof r)?(e[b]=r,b in o&&(o[b]=G)):"function"!=typeof r&&Fn(e,b,r);else if(o[n]=null,"value"===b||"checked"===b){let a=e;const n=void 0===t;if("value"===b){let e=a.defaultValue;a.removeAttribute(b),a.defaultValue=e,a.value=a.__value=n?e:null}else{let e=a.defaultChecked;a.removeAttribute(b),a.defaultChecked=e,a.checked=!!n&&e}}else e.removeAttribute(n)}else e.value=e.__value=r}}else xn(e,r,t?.[Tn],a[Tn]),d[n]=r,d[Tn]=a[Tn];else An(e,"http://www.w3.org/1999/xhtml"===e.namespaceURI,r,0,t?.[Ln],a[Ln]),d[n]=r,d[Ln]=a[Ln]}return c&&oe(!0),d}(e,n,c,0,o,l);s&&i&&"value"in c&&_n(e,c.value);for(let e of Object.getOwnPropertySymbols(r))c[e]||xa(r[e]);for(let t of Object.getOwnPropertySymbols(c)){var u=c[t];"@attach"!==t.description||n&&u===n[t]||(r[t]&&xa(r[t]),r[t]=wa(()=>pn(e,()=>u))),d[t]=u}n=d}),i){var c=e;pa(()=>{_n(c,n.value,!0),function(e){var t=new MutationObserver(()=>{_n(e,e.__value)});t.observe(e,{childList:!0,subtree:!0,attributes:!0,attributeFilter:["value"]}),ha(()=>{t.disconnect()})}(c)})}s=!0})}function Mn(e){return e[R]??={[Sn]:e.nodeName.includes("-"),[jn]:e.namespaceURI===W}}var qn=new Map;function Dn(e){var t,a=e.getAttribute("is")||e.nodeName,n=qn.get(a);if(n)return n;qn.set(a,n=[]);for(var r=e,i=Element.prototype;i!==r;){for(var o in t=s(r))t[o].set&&"innerHTML"!==o&&"textContent"!==o&&"innerText"!==o&&n.push(o);r=u(r)}return n}function Nn(e,t,a=t){var n=new WeakSet;!function(e,t,a,n=a){e.addEventListener(t,()=>Vt(a));const r=e[M];e[M]=r?()=>{r(),n(!0)}:()=>n(!0),It()}(e,"input",async r=>{var i=r?e.defaultValue:e.value;if(i=Un(e)?Bn(i):i,a(i),null!==Be&&n.add(Be),await ia(),i!==(i=t())){var o=e.selectionStart,l=e.selectionEnd,s=e.value.length;if(e.value=i??"",null!==l){var c=e.value.length;o===l&&l===s&&c>s?(e.selectionStart=c,e.selectionEnd=c):(e.selectionStart=o,e.selectionEnd=Math.min(l,c))}}}),(ie&&e.defaultValue!==e.value||null==ca(t)&&e.value)&&(a(Un(e)?Bn(e.value):e.value),null!==Be&&n.add(Be)),ba(()=>{var a=t();if(e===document.activeElement){var r=Be;if(n.has(r))return}Un(e)&&a===Bn(e.value)||("date"!==e.type||a||e.value)&&a!==e.value&&(e.value=a??"")})}function Un(e){var t=e.type;return"number"===t||"range"===t}function Bn(e){return""===e?null:+e}function Kn(e,t){return e===t||e?.[I]===t}function Gn(e={},t,a,n){var r=Y.r,i=qt;return pa(()=>{var n,o;return ba(()=>{n=o,o=[],ca(()=>{Kn(a(...o),e)||(t(e,...o),n&&Kn(a(...n),e)&&t(null,...n))})}),()=>{let n=i;for(;n!==r&&null!==n.parent&&n.parent.f&$;)n=n.parent;const l=n.teardown;n.teardown=()=>{o&&Kn(a(...o),e)&&t(null,...o),l?.()}}}),e}const Wn={get(e,t){if(!e.exclude.includes(t))return e.props[t]},set:(e,t)=>!1,getOwnPropertyDescriptor(e,t){if(!e.exclude.includes(t))return t in e.props?{enumerable:!0,configurable:!0,value:e.props[t]}:void 0},has:(e,t)=>!e.exclude.includes(t)&&t in e.props,ownKeys:e=>Reflect.ownKeys(e.props).filter(t=>!e.exclude.includes(t))};function Yn(e,t,a){return new Proxy({props:e,exclude:t},Wn)}function Zn(e,t,a,n){var r,i=n,o=!0,l=()=>(o&&(o=!1,i=n),i);void 0===e[t]&&void 0!==n&&l(),r=()=>{var a=e[t];return void 0===a?l():(o=!0,a)};var s=!1,c=vt(()=>(s=!1,r())),d=qt;return function(e,t){if(arguments.length>0){const a=t?oa(c):e;return Lt(c,a),s=!0,void 0!==i&&(i=a),e}return Rt&&s||0!==(d.f&x)?c.v:oa(c)}}class Jn{#Q;#ee;constructor(e){var t=new Map,a=(e,a)=>{var n=$t(a,!1,!1);return t.set(e,n),n};const n=new Proxy({...e.props||{},$$events:{}},{get:(e,n)=>oa(t.get(n)??a(n,Reflect.get(e,n))),has:(e,n)=>n===V||(oa(t.get(n)??a(n,Reflect.get(e,n))),Reflect.has(e,n)),set:(e,n,r)=>(Lt(t.get(n)??a(n,r),r),Reflect.set(e,n,r))});this.#ee=(e.hydrate?ln:on)(e.component,{target:e.target,anchor:e.anchor,props:n,context:e.context,intro:e.intro??!1,recover:e.recover,transformError:e.transformError}),e?.props?.$$host&&!1!==e.sync||at(),this.#Q=n.$$events;for(const e of Object.keys(this.#ee))"$set"!==e&&"$destroy"!==e&&"$on"!==e&&o(this,e,{get(){return this.#ee[e]},set(t){this.#ee[e]=t},enumerable:!0});this.#ee.$set=e=>{Object.assign(n,e)},this.#ee.$destroy=()=>{!function(e,t){const a=dn.get(e);a?(dn.delete(e),a(t)):Promise.resolve()}(this.#ee)}}$set(e){this.#ee.$set(e)}$on(e,t){this.#Q[e]=this.#Q[e]||[];const a=(...e)=>t.call(this,...e);return this.#Q[e].push(a),()=>{this.#Q[e]=this.#Q[e].filter(e=>e!==a)}}$destroy(){this.#ee.$destroy()}}let Xn=class{};function Qn(e,t,a,n){const r=a[e]?.type;if(t="Boolean"===r&&"boolean"!=typeof t?null!=t:t,!n||!a[e])return t;if("toAttribute"===n)switch(r){case"Object":case"Array":return null==t?null:JSON.stringify(t);case"Boolean":return t?"":null;case"Number":return null==t?null:t;default:return t}else switch(r){case"Object":case"Array":return t&&JSON.parse(t);case"Boolean":default:return t;case"Number":return null!=t?+t:t}}function er(e,t,a,n,r,s){let c=class extends Xn{constructor(){super(e,a,r),this.$$p_d=t}static get observedAttributes(){return i(t).map(e=>(t[e].attribute||e).toLowerCase())}};return i(t).forEach(e=>{o(c.prototype,e,{get(){return this.$$c&&e in this.$$c?this.$$c[e]:this.$$d[e]},set(a){a=Qn(e,a,t),this.$$d[e]=a;var n=this.$$c;if(n){var r=l(n,e)?.get;r?n[e]=a:n.$set({[e]:a})}}})}),n.forEach(e=>{o(c.prototype,e,{get(){return this.$$c?.[e]}})}),e.element=c,c}"function"==typeof HTMLElement&&(Xn=class extends HTMLElement{$$ctor;$$s;$$c;$$cn=!1;$$d={};$$r=!1;$$p_d={};$$l={};$$l_u=new Map;$$me;$$shadowRoot=null;constructor(e,t,a){super(),this.$$ctor=e,this.$$s=t,a&&(this.$$shadowRoot=this.attachShadow(a))}addEventListener(e,t,a){if(this.$$l[e]=this.$$l[e]||[],this.$$l[e].push(t),this.$$c){const a=this.$$c.$on(e,t);this.$$l_u.set(t,a)}super.addEventListener(e,t,a)}removeEventListener(e,t,a){if(super.removeEventListener(e,t,a),this.$$c){const e=this.$$l_u.get(t);e&&(e(),this.$$l_u.delete(t))}}async connectedCallback(){if(this.$$cn=!0,!this.$$c){let t=function(e){return t=>{const a=Te("slot");"default"!==e&&(a.name=e),Za(t,a)}};if(await Promise.resolve(),!this.$$cn||this.$$c)return;const a={},n=function(e){const t={};return e.childNodes.forEach(e=>{t[e.slot||"default"]=!0}),t}(this);for(const e of this.$$s)e in n&&("default"!==e||this.$$d.children?a[e]=t(e):(this.$$d.children=t(e),a.default=!0));for(const e of this.attributes){const t=this.$$g_p(e.name);t in this.$$d||(this.$$d[t]=Qn(t,e.value,this.$$p_d,"toProp"))}for(const e in this.$$p_d)e in this.$$d||void 0===this[e]||(this.$$d[e]=this[e],delete this[e]);this.$$c=(e={component:this.$$ctor,target:this.$$shadowRoot||this,props:{...this.$$d,$$slots:a,$$host:this}},new Jn(e)),this.$$me=function(e){tt.ensure();const t=ua(524352,e);return()=>{xa(t)}}(()=>{ba(()=>{this.$$r=!0;for(const e of i(this.$$c)){if(!this.$$p_d[e]?.reflect)continue;this.$$d[e]=this.$$c[e];const t=Qn(e,this.$$d[e],this.$$p_d,"toAttribute");null==t?this.removeAttribute(this.$$p_d[e].attribute||e):this.setAttribute(this.$$p_d[e].attribute||e,t)}this.$$r=!1})});for(const e in this.$$l)for(const t of this.$$l[e]){const a=this.$$c.$on(e,t);this.$$l_u.set(t,a)}this.$$l={}}var e}attributeChangedCallback(e,t,a){this.$$r||(e=this.$$g_p(e),this.$$d[e]=Qn(e,a,this.$$p_d,"toProp"),this.$$c?.$set({[e]:this.$$d[e]}))}disconnectedCallback(){this.$$cn=!1,Promise.resolve().then(()=>{!this.$$cn&&this.$$c&&(this.$$c.$destroy(),this.$$me(),this.$$c=void 0)})}$$g_p(e){return i(this.$$p_d).find(t=>this.$$p_d[t].attribute===e||!this.$$p_d[t].attribute&&t.toLowerCase()===e)||e}});var tr=Ba('
');function ar(e,t){J(t,!0);let a,n=Zn(t,"loading"),r=Yn(t,["$$slots","$$events","$$legacy","$$host","loading"]);var i={get loading(){return n()},set loading(e){n(e),at()}},o=tr(),l=_e(o);Hn(l,()=>({type:"checkbox",...r}),void 0,void 0,void 0,0,!0),Gn(l,e=>a=e,()=>a);var s=Le(l,2);return de(2),ce(o),ma(()=>Fn(o,"data-loading",n())),Fa("click",s,function(){a?.click()}),Za(e,o),X(i)}Ha(["click"]),er(ar,{loading:{}},[],[],{mode:"open"});var nr=Ba('
');function rr(e,t){J(t,!0);let a=Zn(t,"loading"),n=Yn(t,["$$slots","$$events","$$legacy","$$host","loading"]);var r={get loading(){return a()},set loading(e){a(e),at()}},i=nr();return Hn(_e(i),()=>({type:"checkbox",...n}),void 0,void 0,void 0,0,!0),de(2),ce(i),ma(()=>Fn(i,"data-loading",a())),Za(e,i),X(r)}er(rr,{loading:{}},[],[],{mode:"open"});var ir=Ba('
');function or(e,t){J(t,!0);let a=Zn(t,"strings");var n={get strings(){return a()},set strings(e){a(e),at()}},r=ir(),i=_e(r);return Fn(i,"href","https://altcha.org"),ce(r),ma(()=>Fn(i,"aria-label",a().ariaLinkLabel)),Za(e,r),X(n)}er(or,{strings:{}},[],[],{mode:"open"});var lr=Ba('');function sr(e,t){J(t,!0);let a=Zn(t,"logo"),n=Zn(t,"strings");var r={get logo(){return a()},set logo(e){a(e),at()},get strings(){return n()},set strings(e){n(e),at()}},i=lr(),o=_e(i);gn(o,()=>n().footer,!0),ce(o);var l=Le(o,2),s=e=>{or(e,{get strings(){return n()}})};return hn(l,e=>{a()&&e(s)}),ce(i),Za(e,i),X(r)}er(sr,{logo:{},strings:{}},[],[],{mode:"open"});var cr=Ba('
');function dr(e,t){J(t,!0);let a,n=Zn(t,"loading"),r=Yn(t,["$$slots","$$events","$$legacy","$$host","loading"]);var i={get loading(){return n()},set loading(e){n(e),at()}},o=cr(),l=_e(o);Hn(l,()=>({type:"checkbox",...r}),void 0,void 0,void 0,0,!0),Gn(l,e=>a=e,()=>a);var s=Le(l,2);return ce(o),ma(()=>Fn(o,"data-loading",n())),Fa("click",s,function(){a?.click()}),Za(e,o),X(i)}Ha(["click"]),er(dr,{loading:{}},[],[],{mode:"open"});var ur=(e=>(e.ERROR="error",e.LOADING="loading",e.PLAYING="playing",e.PAUSED="paused",e.READY="ready",e))(ur||{}),fr=(e=>(e.CODE="code",e.ERROR="error",e.VERIFIED="verified",e.VERIFYING="verifying",e.UNVERIFIED="unverified",e.EXPIRED="expired",e))(fr||{}),hr=Ba('
'),vr=Ba('
'),gr=Ga(''),pr=Ga(''),br=Ga(''),mr=Ba(''),yr=Ba(''),kr=Ba('
');function wr(e,t){J(t,!0);let a=Zn(t,"audioUrl"),n=Zn(t,"codeChallenge"),r=Zn(t,"config"),i=Zn(t,"imageUrl"),o=Zn(t,"onCancel"),l=Zn(t,"onReload"),s=Zn(t,"onSubmit"),c=Zn(t,"strings"),d=_t(void 0),u=_t(void 0),f=_t(void 0),h=_t(!1),v=_t(""),g=_t(!1);function p(){Lt(d,ur.PAUSED,!0)}function b(e){Lt(d,ur.ERROR,!0)}function m(){Lt(d,ur.READY,!0)}function y(){Lt(d,ur.LOADING,!0)}function k(){Lt(d,ur.PLAYING,!0)}function w(){Lt(d,ur.PAUSED,!0)}function A(){oa(u)?oa(d)===ur.LOADING||(oa(u).paused?(a()&&oa(u).src!==a()&&(oa(u).src=a()),oa(u).currentTime=0,oa(u).play()):oa(u).pause()):(Lt(g,!0),requestAnimationFrame(()=>{oa(u)&&a()&&(oa(u).src=a(),oa(u).play())}))}fn(()=>(r().disableAutoFocus||ia().then(()=>{oa(f)?.focus()}),()=>{oa(u)&&(oa(u).pause(),Lt(u,void 0))}));var C={get audioUrl(){return a()},set audioUrl(e){a(e),at()},get codeChallenge(){return n()},set codeChallenge(e){n(e),at()},get config(){return r()},set config(e){r(e),at()},get imageUrl(){return i()},set imageUrl(e){i(e),at()},get onCancel(){return o()},set onCancel(e){o(e),at()},get onReload(){return l()},set onReload(e){l(e),at()},get onSubmit(){return s()},set onSubmit(e){s(e),at()},get strings(){return c()},set strings(e){c(e),at()}},x=kr(),_=_e(x),$=_e(_),L=e=>{var t=hr(),a=_e(t,!0);ce(t),ma(()=>rn(a,c().verificationRequired)),Za(e,t)};hn($,e=>{"standard"!==r().codeChallengeDisplay&&e(L)});var T=Le($,2),S=_e(T,!0);ce(T);var j=Le(T,2),z=Le(j,2),E=_e(z);Rn(E),E.disabled=oa(h),Gn(E,e=>Lt(f,e),()=>oa(f));var I=Le(E,2),V=e=>{var t=mr(),a=_e(t),n=e=>{Za(e,vr())},r=e=>{Za(e,gr())},i=e=>{Za(e,pr())},o=e=>{Za(e,br())};hn(a,e=>{oa(d)===ur.LOADING?e(n):oa(d)===ur.ERROR?e(r,1):oa(d)===ur.PLAYING?e(i,2):e(o,-1)}),ce(t),ma(()=>{Fn(t,"title",c().getAudioChallenge),t.disabled=oa(d)===ur.LOADING||oa(d)===ur.ERROR,Fn(t,"aria-label",oa(d)===ur.LOADING?c().loading:c().getAudioChallenge)}),Oa("click",t,()=>A(),!0),Za(e,t)};hn(I,e=>{n().audio&&e(V)});var P=Le(I,2);ce(z);var R=Le(z,2),O=_e(R),F=_e(O,!0);ce(O);var H=Le(O,2),M=_e(H,!0);ce(H),ce(R),ce(_);var q=Le(_,2),D=e=>{var t=yr();Gn(t,e=>Lt(u,e),()=>oa(u)),Oa("error",t,b),Oa("loadstart",t,y),Oa("canplay",t,m),Oa("pause",t,w),Oa("playing",t,k),Oa("ended",t,p),Za(e,t)};return hn(q,e=>{oa(g)&&e(D)}),ce(x),ma(()=>{rn(S,c().enterCodeFromImage),Fn(j,"src",i()),Fn(E,"minlength",n().length||1),Fn(E,"maxlength",n().length),Fn(E,"placeholder",c().enterCode),Fn(E,"aria-label",oa(d)===ur.LOADING?c().loading:oa(d)===ur.PLAYING?"":c().enterCodeAria),Fn(E,"aria-live",oa(d)?"assertive":"polite"),Fn(E,"aria-busy",oa(d)===ur.LOADING),Fn(P,"title",c().reload),Fn(P,"aria-label",c().reload),Fn(O,"aria-label",c().verify),rn(F,c().verify),Fn(H,"aria-label",c().cancel),rn(M,c().cancel)}),Oa("submit",_,function(e){e.preventDefault(),e.stopPropagation(),s()?.(oa(v))},!0),Fa("keydown",E,function(e){"Space"===e.code?(e.preventDefault(),e.stopPropagation(),A()):"Escape"===e.code&&(e.preventDefault(),e.stopPropagation(),o()?.())}),Nn(E,()=>oa(v),e=>Lt(v,e)),Oa("click",P,()=>l()?.(),!0),Oa("click",H,()=>o()?.(),!0),Za(e,x),X(C)}Ha(["keydown"]),er(wr,{audioUrl:{},codeChallenge:{},config:{},imageUrl:{},onCancel:{},onReload:{},onSubmit:{},strings:{}},[],[],{mode:"open"});var Ar=Ba('
'),Cr=Ba('
'),xr=Ba('
×
'),_r=Ba('
',1);function $r(e,t){J(t,!0);let a=Zn(t,"anchor"),n=Zn(t,"children"),r=Zn(t,"display",0,"standard"),i=Zn(t,"backdrop",0,!1),o=Zn(t,"onClickOutside"),l=Zn(t,"onClickOutsideDelay",0,600),s=Zn(t,"onClose"),c=Zn(t,"placement",0,"auto"),d=Zn(t,"updateUISignal"),u=Zn(t,"variant",0,"neutral"),f=Yn(t,["$$slots","$$events","$$legacy","$$host","anchor","children","display","backdrop","onClickOutside","onClickOutsideDelay","onClose","placement","updateUISignal","variant"]),v=_t(void 0),g=_t(void 0),p=_t(!1),b=_t(0);function m(){s()?.()}function y(){if(a()&&"auto"===c()&&oa(v)){const e=a().getBoundingClientRect(),t=document.documentElement.clientHeight-(e.top+e.height){"auto"!==c()&&Lt(p,"top"===c())}),va(()=>{d()&&y()}),fn(()=>{const e="bottomsheet"===r()||"overlay"===r();return e&&(oa(g)&&document.body.append(oa(g)),oa(v)&&document.body.append(oa(v))),y(),ia().then(()=>{Lt(b,Date.now(),!0)}),()=>{e&&(oa(g)&&document.body.removeChild(oa(g)),oa(v)&&document.body.removeChild(oa(v)))}});var k={get anchor(){return a()},set anchor(e){a(e),at()},get children(){return n()},set children(e){n(e),at()},get display(){return r()},set display(e="standard"){r(e),at()},get backdrop(){return i()},set backdrop(e=!1){i(e),at()},get onClickOutside(){return o()},set onClickOutside(e){o(e),at()},get onClickOutsideDelay(){return l()},set onClickOutsideDelay(e=600){l(e),at()},get onClose(){return s()},set onClose(e){s(e),at()},get placement(){return c()},set placement(e="auto"){c(e),at()},get updateUISignal(){return d()},set updateUISignal(e){d(e),at()},get variant(){return u()},set variant(e="neutral"){u(e),at()}},w=_r();Oa("click",pe,function(e){const t=e.target;oa(v)?.contains(t)||l()&&!(oa(b)+l(){var t=Ar();Gn(t,e=>Lt(g,e),()=>oa(g)),Za(e,t)};hn(A,e=>{i()&&e(C)});var x=Le(A,2);Hn(x,()=>({...f,class:`altcha-popover ${(t.class||"")??""}`,"data-popover":!0,"data-variant":u(),"data-top":oa(p),"data-display":r()}));var _=_e(x),$=e=>{Za(e,Cr())};hn(_,e=>{"standard"===r()&&e($)});var T=Le(_,2),S=e=>{var t=xr();Oa("click",t,m,!0),Za(e,t)};hn(T,e=>{"standard"!==r()&&e(S)});var j=Le(T,2);return function(e,t,...a){var n=new un(e);ya(()=>{const e=t()??null;n.ensure(e,e&&(t=>e(t,...a)))},L)}(_e(j),()=>n()??h),ce(j),ce(x),Gn(x,e=>Lt(v,e),()=>oa(v)),Za(e,w),X(k)}async function Lr(e){const{challenge:t,concurrency:a=navigator.hardwareConcurrency,controller:n=new AbortController,createWorker:r,onOutOfMemory:i=e=>e>1?Math.floor(e/2):0,counterMode:o,timeout:l=9e4}=e,s=Math.min(16,Math.max(1,a)),c=[],d=()=>{for(const e of c)e.terminate()};for(let e=0;e(n.signal.addEventListener("abort",()=>{e.postMessage({type:"abort"})}),new Promise((n,r)=>{e.addEventListener("error",e=>{r(e)}),e.addEventListener("message",t=>{if(t.data){for(const t of c)t!==e&&t.postMessage({type:"abort"});if(t.data.error)return r(new Error(t.data.error))}n(t.data)}),e.postMessage({challenge:t,counterMode:o,counterStart:a,counterStep:s,timeout:l,type:"work"})}))))}catch(a){if(a instanceof Error&&!!a?.message?.includes("Out of memory")&&i){d();const a=i(s);if(a)return Lr({...e,challenge:t,controller:n,concurrency:a,createWorker:r})}throw a}finally{d()}return n.signal.aborted?null:u||null}er($r,{anchor:{},children:{},display:{},backdrop:{},onClickOutside:{},onClickOutsideDelay:{},onClose:{},placement:{},updateUISignal:{},variant:{}},[],[],{mode:"open"});class Tr{TAG_CODES={INPUT:1,TEXTAREA:2,SELECT:3,BUTTON:4,A:5,DETAILS:6,SUMMARY:7,IFRAME:8,VIDEO:9,AUDIO:10};maxSamples;sampleInterval;target;focusStartTime=0;focusInteraction=0;focusInteractionTimer=null;lastPointerSample=0;lastTouchSample=0;lastScrollSample=0;pendingPointer=null;pendingTouch=null;focus=[];pointer=[];scroll=[];touch=[];constructor(e={}){const{maxSamples:t=60,sampleInterval:a=50,target:n=window}=e;this.maxSamples=t,this.sampleInterval=a,this.target=n,this.attach()}destroy(){const e={capture:!0};this.target.removeEventListener("focusin",this.onFocus,e),this.target.removeEventListener("keydown",this.onInteraction,e),this.target.removeEventListener("pointerdown",this.onInteraction,e),this.target.removeEventListener("pointermove",this.onPointer,e),this.target.removeEventListener("scroll",this.onScroll,e),this.target.removeEventListener("touchmove",this.onTouchMove,e)}export(){return{focus:this.focus,maxTouchPoints:navigator.maxTouchPoints||0,pointer:this.pointer,scroll:this.scroll,time:Date.now(),touch:this.touch}}attach(){const e={passive:!0,capture:!0};this.target.addEventListener("focusin",this.onFocus,e),this.target.addEventListener("keydown",this.onInteraction,e),this.target.addEventListener("pointerdown",this.onInteraction,e),this.target.addEventListener("pointermove",this.onPointer,e),this.target.addEventListener("scroll",this.onScroll,e),this.target.addEventListener("touchmove",this.onTouchMove,e)}evict(e){e.length>this.maxSamples&&e.splice(0,e.length-this.maxSamples)}onFocus=e=>{if(2===this.focusInteraction)return;const t=e.target;if(!(t instanceof Element))return;const a=performance.now();0===this.focusStartTime&&(this.focusStartTime=a),this.focus.push([Math.round(a-this.focusStartTime),t.tabIndex,this.TAG_CODES[t.tagName]??0,this.focusInteraction?1:0]),this.evict(this.focus)};onInteraction=e=>{this.focusInteraction="keyCode"in e?1:2,this.focusInteractionTimer&&clearTimeout(this.focusInteractionTimer),this.focusInteractionTimer=setTimeout(()=>{this.focusInteraction=0},100)};onPointer=e=>{if("touch"===e.pointerType)return;const t=e.timeStamp||performance.now();this.pendingPointer=[Math.round(e.clientX),Math.round(e.clientY),Math.round(t)],t-this.lastPointerSample>=this.sampleInterval&&(this.pointer.push(this.pendingPointer),this.lastPointerSample=t,this.pendingPointer=null,this.evict(this.pointer))};onScroll=()=>{const e=performance.now();e-this.lastScrollSample{const t=e.timeStamp||performance.now(),a=e.touches[0];a&&(this.pendingTouch=[Math.round(a.clientX),Math.round(a.clientY),Math.round(t),Math.round(1e3*a.force)/1e3,Math.round(a.radiusX||0),Math.round(a.radiusY||0)],t-this.lastTouchSample>=this.sampleInterval&&(this.touch.push(this.pendingTouch),this.lastTouchSample=t,this.pendingTouch=null,this.evict(this.touch)))}}var Sr=Ba('
'),jr=Ba('
'),zr=Ba('
×
',1),Er=Ba('
'),Ir=Ba(''),Vr=Ba('
Secure context (HTTPS) required.
'),Pr=Ba('
'),Rr=Ba('
'),Or=Ba(" ",1),Fr=Ba('
',1);"undefined"!=typeof window&&window.customElements&&!customElements.get("altcha-widget")&&customElements.define("altcha-widget",er(function(e,t){J(t,!0);const[a,n]=function(){const e={};return[e,function(){ha(()=>{for(var t in e)e[t].unsubscribe();o(e,qe,{enumerable:!1,value:!0})})}]}(),r=["ar","fa","he","ur"],{isSecureContext:i}=globalThis,{store:l}=globalThis.$altcha.defaults,s=navigator.hardwareConcurrency||2,c=navigator.deviceMemory||0,d=c&&c<=4?Math.min(4,s):s,u=globalThis.$altcha.i18n.store,f=t.$$host,h=(e,t)=>{ia().then(()=>{f?.dispatchEvent(new CustomEvent(e,{detail:t}))})};let v=null,g=_t(he(new URL(location.origin))),p=_t(!1),b=_t(null),m=_t(null),y=_t(null),k=_t(he(fr.UNVERIFIED)),w=_t(void 0),A=_t(void 0),C=_t(null),x=_t(void 0),_=_t(null),$=_t(null),T=_t(null),S=_t(null),j=_t(he([])),z=_t(0),E=_t(he({})),I=_t(!0);const V=bt(()=>({fetch:(e,t)=>fetch(e,t),audioChallengeLanguage:"",auto:"off",barPlacement:"bottom",challenge:"",codeChallenge:null,codeChallengeDisplay:"standard",credentials:null,debug:!1,disableAutoFocus:!1,display:"standard",floatingAnchor:"",floatingOffset:8,floatingPersist:!1,floatingPlacement:"auto",hideFooter:!1,hideLogo:!1,humanInteractionSignature:!0,language:"",mockError:!1,minDuration:500,overlayContent:"",name:"altcha",popoverPlacement:"auto",retryOnOutOfMemoryError:!0,setCookie:null,serverVerificationFields:!1,serverVerificationTimeZone:!1,test:!1,timeout:9e4,type:"checkbox",validationMessage:"",verifyFunction:null,verifyUrl:"",workers:d,...De(l,"$altchaDefaults",a),...oa(E)})),P=bt(()=>`altcha-checkbox-${t.id||Math.floor(1e12*Math.random()).toString(16)}`),R=bt(()=>function(e){switch(e){case"checkbox":return ar;case"switch":return dr;default:return rr}}(oa(V).type)),O=bt(()=>oa(V).auto),F=bt(()=>oa(k)===fr.VERIFYING),H=bt(()=>!oa(V).hideFooter),M=bt(()=>!oa(V).hideLogo&&"bar"!==oa(V).display),q=bt(()=>function(e,t){const a=Object.keys(e).map(e=>e.toLowerCase());let n=t.reduce((t,n)=>(n=n.toLowerCase(),t||(e[n]?n:null)||a.find(e=>n.split("-")[0]===e.split("-")[0])||null),null);e[n||""]||(n="en");return{language:n,strings:e[n]}}(De(u,"$altchaI18nStore",a),[oa(V).language,document.documentElement.lang,...navigator.languages])),D=bt(()=>r.includes(oa(q).language)?"rtl":void 0),N=bt(()=>({...oa(q).strings})),U=bt(()=>oa(b)?.audio?.match(/^(https?:)?\//)?Q(oa(b).audio,oa(g),{language:oa(V).audioChallengeLanguage||oa(q).language}).toString():oa(b)?.audio),B=bt(()=>oa(b)?.image?.match(/^(https?:)?\//)?Q(oa(b).image,oa(g)):oa(b)?.image);async function K(e,...t){let a;for(const n of oa(j))a=await n[e].call(n,...t);return a}async function G(e){await new Promise(t=>setTimeout(t,e))}async function W(e=oa(V).challenge,t){const a=await K("onFetchChallenge",e);let n=null;if(void 0!==a)return a;if("string"==typeof e)if(e.startsWith("{")){Ce("parsing JSON challenge");try{n=JSON.parse(e)}catch{throw new Error("Unable to parse JSON challenge.")}}else{Ce("fetching challenge from",t?.method||"GET",e),Lt(g,new URL(e,location.origin),!0);const a=await oa(V).fetch(e,{credentials:oa(V).credentials||void 0,...t});await ye(a);const r=a.headers.get("x-altcha-config");r&&function(e){try{const t=JSON.parse(e);t&&"object"==typeof t&&we({serverVerificationFields:t?.sentinel?.fields,serverVerificationTimeZone:t?.sentinel?.timeZone,verifyUrl:t.verifyurl,...t})}catch(e){Ce("unable to configure from x-altcha-config header",e)}}(r);const i=await a.json();if(i&&"his"in i&&i.his){if(Ce("requested HIS"),!v)throw new Error("Server requested HIS data but collector is disabled.");return W(Q(i.his.url,oa(g)),{body:JSON.stringify({his:v.export()}),headers:{"content-type":"application/json"},method:"POST"})}i&&"hisResult"in i&&i.hisResult&&Ce("HIS result",i.hisResult),n=i}else if(e&&"object"==typeof e)try{n=JSON.parse(JSON.stringify(e))}catch{throw new Error("Unable to parse JSON challenge.")}if(function(e){return"object"==typeof e&&"challenge"in e}(n)&&(n=function(e){const[t,a]=e.salt.split("?"),n={};if(a)try{Object.assign(n,Object.fromEntries(new URLSearchParams(a).entries()))}catch{}const r={codeChallenge:e.codeChallenge,parameters:{algorithm:e.algorithm,cost:1,data:n,expiresAt:n?.expires?parseInt(n.expires,10):void 0,keyLength:"SHA-512"===e.algorithm?64:"SHA-384"===e.algorithm?48:32,nonce:(i=(new TextEncoder).encode(e.salt),Array.from(new Uint8Array(i)).map(e=>e.toString(16).padStart(2,"0")).join("")),keyPrefix:e.challenge,salt:""},signature:e.signature};var i;return Object.defineProperties(r,{_originalSalt:{enumerable:!1,value:e.salt,writable:!1},_version:{enumerable:!1,value:1,writable:!1}}),r}(n)),!function(e){return!!e&&"object"==typeof e&&"parameters"in e&&!!e.parameters&&"object"==typeof e.parameters&&"algorithm"in e.parameters&&"nonce"in e.parameters&&"salt"in e.parameters&&"keyPrefix"in e.parameters}(n))throw new Error("Challenge validation failed.");return n}function Y(){return document.getElementById(oa(P))}function Z(){try{return Intl.DateTimeFormat().resolvedOptions().timeZone}catch{}}function Q(e,t,a){const n=new URL(e,t);if(n.search||(n.search=t.search),a)for(const e in a)void 0!==a[e]&&null!==a[e]&&n.searchParams.set(e,a[e]);return n.toString()}function ee(e){!oa(p)&&e.currentTarget.checked?(e.preventDefault(),e.currentTarget.checked=!1,oa(k)!==fr.VERIFYING&&ze()):e.currentTarget.checked||(e.preventDefault(),xe())}function te(e){oa(k)===fr.VERIFYING?e.currentTarget.setCustomValidity(oa(N).waitAlert):oa(V).validationMessage&&e.currentTarget.setCustomValidity(oa(V).validationMessage)}function ae(){me(oa(V).display),xe()}function ne(e){"onfocus"===oa(O)&&oa(k)===fr.UNVERIFIED&&ze()}function de(){me(oa(V).display),xe()}function ve(e){const t=e.target;"true"!==t?.getAttribute("data-code-challenge")&&"onsubmit"===oa(O)&&oa(k)===fr.UNVERIFIED&&(e.preventDefault(),e.stopPropagation(),Lt(_,e.submitter,!0),Se(),ze().then(e=>{e&&!oa(b)&&ia().then(()=>{ge(oa(_))})}))}function ge(e){oa(C)&&"requestSubmit"in oa(C)?oa(C).requestSubmit(e):oa(C)?.reportValidity()&&(e?e.click():oa(C).submit())}function me(e){switch(e){case"bar":case"floating":case"overlay":Ae(),oa(O)&&"off"!==oa(O)||(oa(E).auto="onsubmit");break;case"standard":Se()}oa(y)!==e&&Lt(y,e,!0)}async function ye(e){if(e.status>=400){if(e.headers.get("content-type")?.includes("/json")){let t;try{t=await e.json()}catch{}if(t&&"error"in t)throw new Error(`Server responded with ${e.status} - ${t.error}`)}throw new Error(`Server responded with ${e.status}.`)}const t=e.headers.get("content-type");if(!t||!t.includes("/json"))throw new Error(`Server responded with invalid content-type. Expected application/json, received ${t}.`)}async function ke(e){if(!oa(S))return void Te(fr.ERROR,"Cannot verify code challenge without PoW payload.");Te(fr.VERIFYING);let t=null;if(oa(V).verifyUrl)t=await async function(e,t){const a=await K("onRequestServerVerification",e,t);if(void 0!==a)return a;if(Ce("requesting server verification from",oa(V).verifyUrl),!oa(V).verifyUrl)throw new Error("Parameter verifyUrl must be set for server verification.");const n=await oa(V).fetch(Q(oa(V).verifyUrl,oa(g)),{body:JSON.stringify({code:t,fields:oa(V).serverVerificationFields?[...oa(C)?.querySelectorAll('input[type="text"]:not([data-no-spamfilter]), textarea:not([data-no-spamfilter])')||[]].reduce((e,t)=>{const a=t.name,n=t.value;return a&&n&&(e[a]=/\n/.test(n)?n.replace(new RegExp("(?{ge(oa(_))})):Te(fr.ERROR,t?.reason||"Verification failed."),oa(V).disableAutoFocus||Y()?.focus()}function we(e){Object.assign(oa(E),{...Object.fromEntries(Object.entries(e).filter(([e,t])=>void 0!==t))})}function Ae(){Lt(I,!1)}function Ce(...e){(oa(V).debug||e.some(e=>e instanceof Error))&&console[e[0]instanceof Error?"error":"log"]("ALTCHA",`[name=${oa(V).name}]`,...e)}function xe(e=fr.UNVERIFIED,t=null){Lt(p,!1),Lt($,t,!0),Lt(S,null),oa(m)&&oa(m).abort(),oa(T)&&(clearTimeout(oa(T)),Lt(T,null)),Te(e)}function Te(e,t=null){Lt(k,e,!0),Lt($,t,!0),h("statechange",{payload:oa(S),state:oa(k)})}function Se(){Lt(I,!0),ia().then(()=>{je()})}function je(){if("floating"===oa(V).display)return function(e=20){if(!oa(x))return;const t=oa(V).floatingPlacement;if(!oa(A)&&(Lt(A,(oa(V).floatingAnchor instanceof HTMLElement?oa(V).floatingAnchor:oa(V).floatingAnchor?document.querySelector(oa(V).floatingAnchor):oa(C)?.querySelector('input[type="submit"], button[type="submit"], button:not([type="button"]):not([type="reset"])'))||oa(C),!0),!oa(A)))return void Ce("unable to find floating anchor element");const a=parseInt(oa(V).floatingOffset,10)||12,n=oa(A).getBoundingClientRect(),r=oa(x).getBoundingClientRect(),i=document.documentElement.clientHeight,o=document.documentElement.clientWidth,l=t&&"auto"!==t?"top"===t:n.bottom+r.height+a+e>i,s=Math.max(e,Math.min(o-e-r.width,n.left+n.width/2-r.width/2));if(oa(x).style.setProperty("--altcha-floating-left",`${s}px`),oa(x).style.setProperty("--altcha-floating-top",l?n.top-(r.height+a)+"px":`${n.bottom+a}px`),oa(x).setAttribute("data-floating-position",l?"top":"bottom"),oa(w)){const e=oa(w).getBoundingClientRect();oa(w).style.left=n.left-s+n.width/2-e.width/2+"px"}}();Lt(z,oa(z)+1)}async function ze(e={}){const{concurrency:t=Math.max(1,oa(V).workers),controller:a=new AbortController,minDuration:n=oa(V).minDuration}=e,r=performance.now();let o=null,l=null,s=!1;const c=await K("onVerify",e);if(void 0!==c)return c;xe(fr.VERIFYING),Lt(m,a,!0);try{if(!i)throw new Error("Secure context (HTTPS) required.");if(oa(V).mockError)throw new Error("Mock error.");if(oa(V).test)return Ce("running test mode with null challenge"),await G(Math.max(0,n-(performance.now()-r))),oa(m)?.signal.aborted?(xe(),null):(Lt(S,btoa(JSON.stringify({challenge:null,solution:null,test:!0})),!0),Ce("verified"),Te(fr.VERIFIED),h("verified",{payload:oa(S)}),{payload:oa(S)});if(o=await W(),!o)throw new Error("Failed to fetch challenge.");Ce("challenge",o),"configuration"in o&&(Ce("re-configuring from challenge",o.configuration),we(o.configuration)),o.parameters.expiresAt&&function(e){oa(T)&&clearTimeout(oa(T));const t=()=>{oa(k)!==fr.UNVERIFIED?(Lt(p,!1),Te(fr.EXPIRED)):xe(),h("expired")},a=1e3*e-Date.now();a>=1?Lt(T,setTimeout(t,a),!0):t()}(o.parameters.expiresAt),s="_version"in o&&1===o._version;const e=globalThis.$altcha.algorithms.get(o.parameters.algorithm);if(!e)throw new Error(`Unsupported algorithm ${o.parameters.algorithm}.`);if(l=await Lr({challenge:o,concurrency:t,controller:a,createWorker:e,counterMode:s?"string":"uint32",onOutOfMemory:e=>{if(Ce("out of memory error received"),h("outofmemory"),oa(V).retryOnOutOfMemoryError&&e>1){const t=Math.floor(e/2);return Ce(`retrying with ${t} workers...`),t}},timeout:oa(V).timeout}),oa(m)?.signal.aborted)return xe(),null;if(!l)throw new Error("Failed to find solution.");Ce("solution",l),await G(Math.max(0,n-(performance.now()-r))),Lt(b,o.codeChallenge||oa(V).codeChallenge||null,!0),Lt(S,s?btoa(JSON.stringify(function(e,t){return{algorithm:e.parameters.algorithm,challenge:e.parameters.keyPrefix,number:t.counter,salt:"_originalSalt"in e?e._originalSalt:e.parameters.nonce,signature:e.signature,took:t.time||0}}(o,l))):btoa(JSON.stringify({challenge:{parameters:o.parameters,signature:o.signature},solution:l})),!0),oa(b)?(Ce("requesting code verification"),Te(fr.CODE),h("codechallenge",{codeChallenge:oa(b)})):oa(V).verifyUrl?await ke():(Ce("verified"),Te(fr.VERIFIED),h("verified",{payload:oa(S)}))}catch(e){return Ce("verification failed",e),Te(fr.ERROR,String(e)),null}finally{Lt(m,null)}return{challenge:o,payload:oa(S),solution:l}}va(()=>{we({auto:t.auto,challenge:t.challenge,display:t.display,language:t.language,name:t.name,type:t.type,workers:t.workers})}),va(()=>{if(t.configuration)try{we(JSON.parse(t.configuration))}catch{Ce("unable to parse the `configuration` attribute (JSON expected)")}}),va(()=>{oa(y)!==oa(V).display&&me(oa(V).display)}),va(()=>{oa(p)&&oa(k)===fr.VERIFYING&&Lt(p,!1)}),va(()=>{oa(p)||oa(k)!==fr.VERIFIED||Lt(p,!0)}),va(()=>{if(!oa(p)){const e=Y();e&&e.checked&&(e.checked=!1)}}),va(()=>{oa(k)===fr.VERIFIED&&Y()?.setCustomValidity("")}),va(()=>{if("onload"===oa(O)){const e=setTimeout(()=>{ze()},1);return()=>{e&&clearTimeout(e)}}}),va(()=>{oa($)&&Ce("error:",oa($))}),va(()=>{oa(S)&&oa(V).setCookie&&function(e,t={}){const{domain:a,name:n=oa(V).name,maxAge:r,path:i,sameSite:o,secure:l}=t;let s=`${encodeURIComponent(n)}=${encodeURIComponent(e)}`;a&&(s+=`; Domain=${a}`);null!=r&&(s+=`; Max-Age=${r}`);i&&(s+=`; Path=${i}`);o&&(s+=`; SameSite=${o}`);l&&(s+="; Secure");document.cookie=s}(oa(S),oa(V).setCookie)}),fn(()=>(Ce("mounted","3.2.1"),f&&globalThis.$altcha.instances.add(f),Lt(C,oa(x)?.closest("form"),!0),oa(C)?.addEventListener("reset",de),oa(C)?.addEventListener("submit",ve,{capture:!0}),oa(C)?.addEventListener("focusin",ne),function(){Lt(j,[...globalThis.$altcha.plugins].map(e=>new e(f)),!0),Ce("activating plugins",oa(j).map(e=>e.constructor.name));for(const e of oa(j))e.activate()}(),oa(V).humanInteractionSignature&&(Ce("human interaction signature enabled"),v=new Tr),h("load"),i||Ce("secure context (HTTPS) required"),()=>{!function(){for(const e of oa(j))e.destroy()}(),f&&globalThis.$altcha.instances.delete(f),oa(T)&&clearTimeout(oa(T)),oa(C)?.removeEventListener("reset",de),oa(C)?.removeEventListener("submit",ve,{capture:!0}),oa(C)?.removeEventListener("focusin",ne),v?.destroy()}));var Ee={configure:we,getConfiguration:function(){return{...oa(V)}},getState:function(){return oa(k)},hide:Ae,log:Ce,reset:xe,setState:Te,show:Se,updateUI:je,verify:ze},Ie=Fr();Oa("scroll",be,function(){je()}),Oa("click",be,function(e){const t=e.target;"floating"!==oa(V).display||!t||f?.contains(t)||t.hasAttribute("data-backdrop")||t.closest("[data-popover]")||oa(k)===fr.VERIFIED||oa(V).floatingPersist||Ae()}),Oa("pageshow",pe,function(e){e.persisted&&(me(oa(V).display),xe())}),Oa("resize",pe,function(){je()});var Ve=$e(Ie),Pe=e=>{Za(e,Sr())};hn(Ve,e=>{"overlay"===oa(V).display&&oa(I)&&e(Pe)});var Re=Le(Ve,2),Oe=_e(Re),Fe=e=>{var t=zr(),a=$e(t),n=Le(a,2),r=e=>{var t=jr();gn(t,()=>document.querySelector(oa(V).overlayContent)?.innerHTML,!0),ce(t),Za(e,t)};hn(n,e=>{oa(V).overlayContent&&e(r)}),Oa("click",a,ae,!0),Za(e,t)};hn(Oe,e=>{"overlay"===oa(V).display&&oa(I)&&e(Fe)});var He=Le(Oe,2),Me=_e(He),Ne=_e(Me),Ue=_e(Ne);{let e=bt(()=>"standard"===oa(V).display&&"onsubmit"!==oa(O)||oa(k)===fr.VERIFYING);!function(e,t,a){var n;ie&&(n=re,se());var r=new un(e);ya(()=>{var e=t()??null;if(ie&&"["===fe(n)!=(null!==e)){var i=ue();return le(i),r.anchor=i,oe(!1),r.ensure(e,e&&(t=>a(t,e))),void oe(!0)}r.ensure(e,e&&(t=>a(t,e)))},L)}(Ue,()=>oa(R),(t,a)=>{a(t,{get id(){return oa(P)},name:"",get required(){return oa(e)},get loading(){return oa(F)},get checked(){return oa(p)},onchange:ee,oninvalid:te})})}var Be=Le(Ue,2),Ke=_e(Be),Ge=e=>{var t=Wa();ma(()=>rn(t,oa(N).verificationRequired)),Za(e,t)},We=e=>{var t=Wa();ma(()=>rn(t,oa(N).verifying)),Za(e,t)},Ye=e=>{var t=Wa();ma(()=>rn(t,oa(N).verified)),Za(e,t)},Ze=e=>{var t=Wa();ma(()=>rn(t,oa(N).label)),Za(e,t)};hn(Ke,e=>{oa(k)===fr.CODE&&oa(b)?e(Ge):oa(k)===fr.VERIFYING?e(We,1):oa(k)===fr.VERIFIED?e(Ye,2):e(Ze,-1)}),ce(Be),ce(Ne);var Je=Le(Ne,2),Xe=e=>{or(e,{get strings(){return oa(N)}})};hn(Je,e=>{oa(M)&&e(Xe)}),ce(Me);var Qe=Le(Me,2),et=e=>{{let t=bt(()=>"bar"===oa(V).display&&oa(M));sr(e,{get logo(){return oa(t)},get strings(){return oa(N)}})}};hn(Qe,e=>{oa(H)&&e(et)});var tt=Le(Qe,2),at=e=>{var t=Er();Gn(t,e=>Lt(w,e),()=>oa(w)),Za(e,t)};hn(tt,e=>{"floating"===oa(V).display&&e(at)});var nt=Le(tt,2),rt=e=>{var t=Ir();Rn(t),ma(()=>{var e,a,n;Fn(t,"name",oa(V).name),e=t,a=oa(S),(n=Mn(e)).value!==(n.value=a??void 0)&&(e.value!==a||0===a&&e.nodeName===Pn)&&(e.value=a??"")}),Za(e,t)};hn(nt,e=>{oa(V).setCookie||e(rt)}),ce(He);var it=Le(He,2),ot=e=>{$r(e,{get anchor(){return oa(x)},onClickOutside:()=>{i&&xe()},get placement(){return oa(V).popoverPlacement},role:"alert",variant:"error",get dir(){return oa(D)},get updateUISignal(){return oa(z)},children:(e,t)=>{var a=Ya(),n=$e(a),r=e=>{Za(e,Vr())},o=e=>{var t=Pr(),a=_e(t,!0);ce(t),ma(()=>rn(a,oa(N).expired)),Za(e,t)},l=e=>{var t=Rr(),a=_e(t,!0);ce(t),ma(()=>{Fn(t,"title",oa($)),rn(a,oa(N).error)}),Za(e,t)};hn(n,e=>{oa($)||i?oa($)||oa(k)!==fr.EXPIRED?e(l,-1):e(o,1):e(r)}),Za(e,a)},$$slots:{default:!0}})},lt=e=>{var t=Ya();!function(e,t,a){ie&&se();var n=new un(e);ya(()=>{var e=t();e!=e&&(e=vn),n.ensure(e,a)})}($e(t),()=>oa(b),e=>{{let t=bt(()=>"standard"!==oa(V).codeChallengeDisplay);$r(e,{get anchor(){return oa(x)},get backdrop(){return oa(t)},get display(){return oa(V).codeChallengeDisplay},onClose:()=>{xe()},get placement(){return oa(V).popoverPlacement},role:"dialog",get"aria-label"(){return oa(N).verificationRequired},get dir(){return oa(D)},get updateUISignal(){return oa(z)},children:(e,t)=>{var a=Or(),n=$e(a);wr(n,{get audioUrl(){return oa(U)},get imageUrl(){return oa(B)},onCancel:()=>xe(),onReload:()=>ze(),onSubmit:e=>ke(e),get codeChallenge(){return oa(b)},get config(){return oa(V)},get strings(){return oa(N)}});var r=Le(n,2),i=e=>{sr(e,{get logo(){return oa(M)},get strings(){return oa(N)}})};hn(r,e=>{oa(H)&&"standard"!==oa(V).codeChallengeDisplay&&e(i)}),Za(e,a)},$$slots:{default:!0}})}}),Za(e,t)};hn(it,e=>{oa($)||oa(k)===fr.EXPIRED||!i?e(ot):oa(b)&&oa(k)===fr.CODE&&e(lt,1)}),ce(Re),Gn(Re,e=>Lt(x,e),()=>oa(x)),ma(e=>{Fn(Re,"data-state",oa(k)),Fn(Re,"data-display",oa(V).display||void 0),Fn(Re,"data-placement",e),Fn(Re,"data-visible",oa(I)||void 0),Fn(Re,"dir",oa(D)),Fn(Be,"for",oa(P)),Re.dir=Re.dir},[()=>function(e){switch(e){case"bar":return oa(V).barPlacement||"bottom";case"floating":return oa(V).floatingPlacement||"auto";default:return}}(oa(V).display)]),Za(e,Ie);var st=X(Ee);return n(),st},{auto:{type:"String"},challenge:{type:"String"},configuration:{type:"String"},display:{type:"String"},language:{type:"String"},name:{type:"String"},theme:{type:"String"},type:{type:"String"},workers:{type:"Number"}},[],["configure","getConfiguration","getState","hide","log","reset","setState","show","updateUI","verify"]));const Hr='(function() {\n "use strict";\n function bufferStartsWith(buffer, prefix) {\n if (prefix.length > buffer.length) {\n return false;\n }\n for (let i = 0; i < prefix.length; i++) {\n if (buffer[i] !== prefix[i]) {\n return false;\n }\n }\n return true;\n }\n function bufferToHex(buffer) {\n return Array.from(new Uint8Array(buffer)).map((b) => b.toString(16).padStart(2, "0")).join("");\n }\n function concatBuffers(a, b) {\n const out = new Uint8Array(a.length + b.length);\n out.set(a, 0);\n out.set(b, a.length);\n return out;\n }\n function hexToBuffer(hex) {\n if (hex.length % 2 !== 0) {\n throw new Error(`Hex string must have an even length. Got: ${hex}`);\n }\n const buffer = new ArrayBuffer(hex.length / 2);\n const view = new DataView(buffer);\n for (let i = 0; i < hex.length; i += 2) {\n const byteString = hex.substring(i, i + 2);\n const byteValue = parseInt(byteString, 16);\n view.setUint8(i / 2, byteValue);\n }\n return new Uint8Array(buffer);\n }\n async function delay(ms) {\n await new Promise((resolve) => setTimeout(resolve, ms));\n }\n function timeDuration(start) {\n return Math.floor((performance.now() - start) * 10) / 10;\n }\n class PasswordBuffer {\n constructor(nonce, mode = "uint32") {\n this.nonce = nonce;\n this.mode = mode;\n this.buffer = new Uint8Array(this.nonce.length + this.COUNTER_BYTES);\n this.buffer.set(this.nonce, 0);\n this.dataView = new DataView(this.buffer.buffer);\n }\n nonce;\n mode;\n COUNTER_BYTES = 4;\n buffer;\n dataView;\n encoder = new TextEncoder();\n /**\n * Appends the counter to the nonce buffer.\n * In \'string\' mode, encodes the counter as a UTF-8 string.\n * In \'uint32\' mode, writes the counter as a big-endian 32-bit integer.\n */\n setCounter(n) {\n if (this.mode === "string") {\n return concatBuffers(this.nonce, this.encoder.encode(n.toString()));\n }\n this.dataView.setUint32(this.nonce.length, n, false);\n return this.buffer;\n }\n }\n async function solveChallenge(options) {\n const {\n challenge,\n controller,\n counterMode = "uint32",\n counterStart = 0,\n counterStep = 1,\n deriveKey: deriveKey2,\n timeout = 9e4\n } = options;\n const { nonce, keyPrefix, salt } = challenge.parameters;\n const nonceBuf = hexToBuffer(nonce);\n const saltBuf = hexToBuffer(salt);\n const keyPrefixBuf = keyPrefix.length % 2 === 0 ? hexToBuffer(keyPrefix) : null;\n const password = new PasswordBuffer(nonceBuf, counterMode);\n const start = performance.now();\n let counter = counterStart;\n let iterations = 0;\n let derivedKeyHex = "";\n let lastYield = start;\n while (true) {\n if (controller?.signal.aborted || timeout && iterations % 10 === 0 && performance.now() - start > timeout) {\n return null;\n }\n const { derivedKey } = await deriveKey2(\n challenge.parameters,\n saltBuf,\n password.setCounter(counter)\n );\n if (iterations % 10 === 0 && performance.now() - lastYield > 200) {\n await delay(0);\n lastYield = performance.now();\n }\n if (keyPrefixBuf ? bufferStartsWith(derivedKey, keyPrefixBuf) : bufferToHex(derivedKey).startsWith(keyPrefix)) {\n derivedKeyHex = bufferToHex(derivedKey);\n break;\n }\n counter = counter + counterStep;\n iterations = iterations + 1;\n }\n return {\n counter,\n derivedKey: derivedKeyHex,\n time: timeDuration(start)\n };\n }\n function handler(options) {\n const { deriveKey: deriveKey2 } = options;\n let controller = void 0;\n self.onmessage = async (message) => {\n const { challenge, counterMode, counterStart, counterStep, timeout, type } = message.data;\n if (type === "abort") {\n controller?.abort();\n } else if (type === "work") {\n controller = new AbortController();\n let solution;\n try {\n solution = await solveChallenge({\n challenge,\n controller,\n counterStart,\n counterStep,\n deriveKey: deriveKey2,\n counterMode,\n timeout\n });\n } catch (err) {\n return self.postMessage({ error: err });\n }\n self.postMessage(solution);\n }\n };\n }\n function getDigest(algorithm) {\n switch (algorithm) {\n case "PBKDF2/SHA-512":\n return "SHA-512";\n case "PBKDF2/SHA-384":\n return "SHA-384";\n case "PBKDF2/SHA-256":\n default:\n return "SHA-256";\n }\n }\n async function deriveKey(parameters, salt, password) {\n const { algorithm, cost, keyLength = 32 } = parameters;\n const passwordKey = await crypto.subtle.importKey(\n "raw",\n password,\n { name: "PBKDF2" },\n false,\n ["deriveKey"]\n );\n const derivedKey = await crypto.subtle.deriveKey(\n {\n name: "PBKDF2",\n salt,\n iterations: cost,\n hash: getDigest(algorithm)\n },\n passwordKey,\n { name: "AES-GCM", length: keyLength * 8 },\n true,\n ["encrypt"]\n );\n return {\n derivedKey: new Uint8Array(await crypto.subtle.exportKey("raw", derivedKey))\n };\n }\n handler({\n deriveKey\n });\n})();\n',Mr="undefined"!=typeof self&&self.Blob&&new Blob(["(self.URL || self.webkitURL).revokeObjectURL(self.location.href);",Hr],{type:"text/javascript;charset=utf-8"});function qr(e){let t;try{if(t=Mr&&(self.URL||self.webkitURL).createObjectURL(Mr),!t)throw"";const a=new Worker(t,{name:e?.name});return a.addEventListener("error",()=>{(self.URL||self.webkitURL).revokeObjectURL(t)}),a}catch(t){return new Worker("data:text/javascript;charset=utf-8,"+encodeURIComponent(Hr),{name:e?.name})}}const Dr='(function() {\n "use strict";\n function bufferStartsWith(buffer, prefix) {\n if (prefix.length > buffer.length) {\n return false;\n }\n for (let i = 0; i < prefix.length; i++) {\n if (buffer[i] !== prefix[i]) {\n return false;\n }\n }\n return true;\n }\n function bufferToHex(buffer) {\n return Array.from(new Uint8Array(buffer)).map((b) => b.toString(16).padStart(2, "0")).join("");\n }\n function concatBuffers(a, b) {\n const out = new Uint8Array(a.length + b.length);\n out.set(a, 0);\n out.set(b, a.length);\n return out;\n }\n function hexToBuffer(hex) {\n if (hex.length % 2 !== 0) {\n throw new Error(`Hex string must have an even length. Got: ${hex}`);\n }\n const buffer = new ArrayBuffer(hex.length / 2);\n const view = new DataView(buffer);\n for (let i = 0; i < hex.length; i += 2) {\n const byteString = hex.substring(i, i + 2);\n const byteValue = parseInt(byteString, 16);\n view.setUint8(i / 2, byteValue);\n }\n return new Uint8Array(buffer);\n }\n async function delay(ms) {\n await new Promise((resolve) => setTimeout(resolve, ms));\n }\n function timeDuration(start) {\n return Math.floor((performance.now() - start) * 10) / 10;\n }\n class PasswordBuffer {\n constructor(nonce, mode = "uint32") {\n this.nonce = nonce;\n this.mode = mode;\n this.buffer = new Uint8Array(this.nonce.length + this.COUNTER_BYTES);\n this.buffer.set(this.nonce, 0);\n this.dataView = new DataView(this.buffer.buffer);\n }\n nonce;\n mode;\n COUNTER_BYTES = 4;\n buffer;\n dataView;\n encoder = new TextEncoder();\n /**\n * Appends the counter to the nonce buffer.\n * In \'string\' mode, encodes the counter as a UTF-8 string.\n * In \'uint32\' mode, writes the counter as a big-endian 32-bit integer.\n */\n setCounter(n) {\n if (this.mode === "string") {\n return concatBuffers(this.nonce, this.encoder.encode(n.toString()));\n }\n this.dataView.setUint32(this.nonce.length, n, false);\n return this.buffer;\n }\n }\n async function solveChallenge(options) {\n const {\n challenge,\n controller,\n counterMode = "uint32",\n counterStart = 0,\n counterStep = 1,\n deriveKey: deriveKey2,\n timeout = 9e4\n } = options;\n const { nonce, keyPrefix, salt } = challenge.parameters;\n const nonceBuf = hexToBuffer(nonce);\n const saltBuf = hexToBuffer(salt);\n const keyPrefixBuf = keyPrefix.length % 2 === 0 ? hexToBuffer(keyPrefix) : null;\n const password = new PasswordBuffer(nonceBuf, counterMode);\n const start = performance.now();\n let counter = counterStart;\n let iterations = 0;\n let derivedKeyHex = "";\n let lastYield = start;\n while (true) {\n if (controller?.signal.aborted || timeout && iterations % 10 === 0 && performance.now() - start > timeout) {\n return null;\n }\n const { derivedKey } = await deriveKey2(\n challenge.parameters,\n saltBuf,\n password.setCounter(counter)\n );\n if (iterations % 10 === 0 && performance.now() - lastYield > 200) {\n await delay(0);\n lastYield = performance.now();\n }\n if (keyPrefixBuf ? bufferStartsWith(derivedKey, keyPrefixBuf) : bufferToHex(derivedKey).startsWith(keyPrefix)) {\n derivedKeyHex = bufferToHex(derivedKey);\n break;\n }\n counter = counter + counterStep;\n iterations = iterations + 1;\n }\n return {\n counter,\n derivedKey: derivedKeyHex,\n time: timeDuration(start)\n };\n }\n function handler(options) {\n const { deriveKey: deriveKey2 } = options;\n let controller = void 0;\n self.onmessage = async (message) => {\n const { challenge, counterMode, counterStart, counterStep, timeout, type } = message.data;\n if (type === "abort") {\n controller?.abort();\n } else if (type === "work") {\n controller = new AbortController();\n let solution;\n try {\n solution = await solveChallenge({\n challenge,\n controller,\n counterStart,\n counterStep,\n deriveKey: deriveKey2,\n counterMode,\n timeout\n });\n } catch (err) {\n return self.postMessage({ error: err });\n }\n self.postMessage(solution);\n }\n };\n }\n async function deriveKey(parameters, salt, password) {\n const { algorithm, keyLength = 32 } = parameters;\n const iterations = Math.max(1, parameters.cost);\n let data = void 0;\n let derivedKey = void 0;\n for (let i = 0; i < iterations; i++) {\n if (i === 0) {\n data = concatBuffers(salt, password);\n } else {\n data = derivedKey;\n }\n derivedKey = new Uint8Array(\n (await crypto.subtle.digest(algorithm, data)).slice(0, keyLength)\n );\n }\n return {\n parameters: {},\n derivedKey\n };\n }\n handler({\n deriveKey\n });\n})();\n',Nr="undefined"!=typeof self&&self.Blob&&new Blob(["(self.URL || self.webkitURL).revokeObjectURL(self.location.href);",Dr],{type:"text/javascript;charset=utf-8"});function Ur(e){let t;try{if(t=Nr&&(self.URL||self.webkitURL).createObjectURL(Nr),!t)throw"";const a=new Worker(t,{name:e?.name});return a.addEventListener("error",()=>{(self.URL||self.webkitURL).revokeObjectURL(t)}),a}catch(t){return new Worker("data:text/javascript;charset=utf-8,"+encodeURIComponent(Dr),{name:e?.name})}}!function(e,t="altcha-css"){if("undefined"!=typeof document&&document&&!document.getElementById(t)){const a=document.createElement("style");a.id=t,a.textContent=e;const n=document.currentScript?.nonce??document.querySelector('meta[name="csp-nonce"]')?.content;n&&(a.nonce=n),document.head.appendChild(a)}}(':root {\n --altcha-border-color: var(--altcha-color-neutral);\n --altcha-border-width: 1px;\n --altcha-border-radius: 6px;\n --altcha-color-base: light-dark(oklch(100% 0.00011 271.152), oklch(20.904% 0.00002 271.152));\n --altcha-color-base-content: light-dark(\n \toklch(20.904% 0.00002 271.152),\n \toklch(100% 0.00011 271.152)\n );\n --altcha-color-error: oklch(51.284% 0.20527 28.678);\n --altcha-color-error-content: oklch(100% 0.00011 271.152);\n --altcha-color-neutral: light-dark(oklch(83.591% 0.0001 271.152), oklch(46.04% 0.00005 271.152));\n --altcha-color-neutral-content: light-dark(\n \toklch(46.76% 0.00005 271.152),\n \toklch(100% 0.00011 271.152)\n );\n --altcha-color-primary: oklch(40.279% 0.2449 268.131);\n --altcha-color-primary-content: oklch(100% 0.00011 271.152);\n --altcha-color-success: oklch(55.748% 0.18968 142.511);\n --altcha-color-success-content: oklch(100% 0.00011 271.152);\n --altcha-checkbox-border-color: light-dark(\n \toklch(66.494% 0.00233 15.434),\n \toklch(51.028% 0.00006 271.152)\n );\n --altcha-checkbox-border-radius: 5px;\n --altcha-checkbox-border-width: var(--altcha-border-width);\n --altcha-checkbox-outline: 2px solid var(--altcha-checkbox-outline-color);\n --altcha-checkbox-outline-color: -webkit-focus-ring-color;\n --altcha-checkbox-outline-offset: 2px;\n --altcha-checkbox-size: 22px;\n --altcha-checkbox-transition-duration: var(--altcha-transition-duration);\n --altcha-input-background-color: var(--altcha-color-base);\n --altcha-input-border-radius: 3px;\n --altcha-input-border-width: 1px;\n --altcha-input-color: var(--altcha-color-base-content);\n --altcha-max-width: 320px;\n --altcha-padding: 0.75rem;\n --altcha-popover-arrow-size: 6px;\n --altcha-popover-color: var(--altcha-border-color);\n --altcha-shadow: drop-shadow(3px 3px 6px oklch(0% 0 0 / 0.2));\n --altcha-spinner-color: var(--altcha-color-base-content);\n --altcha-switch-background-color: var(--altcha-color-neutral);\n --altcha-switch-border-radius: calc(infinity * 1px);\n --altcha-switch-height: var(--altcha-checkbox-size);\n --altcha-switch-padding: 0.25rem;\n --altcha-switch-width: calc(var(--altcha-checkbox-size) * 1.75);\n --altcha-switch-toggle-border-radius: 100%;\n --altcha-switch-toggle-color: var(--altcha-color-neutral-content);\n --altcha-switch-toggle-size: calc(\n \tvar(--altcha-switch-height) - calc(var(--altcha-switch-padding) * 2)\n );\n --altcha-transition-duration: 0.6s;\n --altcha-z-index: 99999999;\n --altcha-z-index-popover: 999999999;\n}\n\n@supports (-moz-appearance: none) {\n :root {\n --altcha-checkbox-outline-color: var(--altcha-color-primary);\n }\n}\n.altcha {\n all: revert-layer;\n display: none;\n font-family: inherit;\n font-size: inherit;\n position: relative;\n}\n.altcha[data-visible] {\n display: block;\n}\n.altcha-popover, .altcha-popover * {\n all: revert-layer;\n box-sizing: border-box;\n font-family: inherit;\n font-size: inherit;\n line-height: 1.25;\n}\n.altcha * {\n all: revert-layer;\n box-sizing: border-box;\n font-family: inherit;\n font-size: inherit;\n line-height: 1.25;\n}\n.altcha a, .altcha-popover a {\n color: currentColor;\n text-decoration: none;\n}\n.altcha a:hover, .altcha-popover a:hover {\n color: currentColor;\n}\n.altcha-main {\n align-items: start;\n background-color: var(--altcha-color-base);\n border: var(--altcha-border-width, 1px) solid var(--altcha-border-color);\n border-radius: var(--altcha-border-radius, 0);\n color: var(--altcha-color-base-content);\n display: flex;\n flex-direction: column;\n gap: 0.5rem;\n justify-content: space-between;\n padding: var(--altcha-padding);\n max-width: var(--altcha-max-width, 100%);\n}\n.altcha-main > * {\n display: flex;\n width: 100%;\n}\n.altcha-main > *:first-child {\n flex-grow: 1;\n}\n.altcha-checkbox-wrap {\n align-items: center;\n display: flex;\n flex-direction: row;\n flex-grow: 1;\n gap: 0.5rem;\n}\n.altcha-checkbox-wrap > * {\n display: flex;\n}\n.altcha-logo {\n opacity: 0.7;\n}\n.altcha-footer {\n align-items: center;\n display: flex;\n flex-grow: 1;\n gap: 0.5rem;\n justify-content: flex-end;\n font-size: 0.7rem;\n opacity: 0.7;\n}\n.altcha-footer p {\n margin: 0;\n padding: 0;\n}\n.altcha-error {\n font-size: 0.85rem;\n}\n.altcha-button {\n align-items: center;\n background: var(--altcha-color-primary);\n border: var(--altcha-input-border-width) solid var(--altcha-color-primary);\n border-radius: var(--altcha-input-border-radius);\n color: var(--altcha-color-primary-content);\n cursor: pointer;\n display: flex;\n font-size: 0.9rem;\n gap: 0.5rem;\n padding: 0.35rem;\n}\n.altcha-button:focus {\n border-color: var(--altcha-color-primary);\n outline: var(--altcha-checkbox-outline);\n outline-offset: var(--altcha-checkbox-outline-offset);\n}\n.altcha-button > .altcha-spinner, .altcha-button > svg {\n height: 20px;\n width: 20px;\n}\n.altcha-button-secondary {\n background: transparent;\n border-color: var(--altcha-color-neutral);\n color: var(--altcha-color-neutral-content);\n}\n.altcha-input {\n background: var(--altcha-input-background-color);\n border: var(--altcha-input-border-width) solid var(--altcha-color-neutral);\n border-radius: var(--altcha-input-border-radius);\n color: var(--altcha-input-color);\n flex-grow: 1;\n font-size: 1rem;\n min-width: 0;\n padding: 0.25rem;\n width: auto;\n}\n.altcha-input:focus {\n border-color: var(--altcha-color-primary);\n outline: var(--altcha-checkbox-outline);\n outline-offset: var(--altcha-checkbox-outline-offset);\n}\n.altcha-spinner {\n animation: altcha-rotate 0.6s linear infinite;\n border-radius: 100%;\n border: var(--altcha-checkbox-border-width) solid var(--altcha-spinner-color);\n border-bottom-color: transparent;\n border-right-color: transparent;\n opacity: 0.7;\n}\n.altcha-popover {\n background-color: var(--altcha-color-base);\n border: var(--altcha-border-width) solid var(--altcha-border-color);\n border-radius: var(--altcha-border-radius);\n color: var(--altcha-color-base-content);\n filter: var(--altcha-shadow);\n position: absolute;\n left: calc(var(--altcha-padding) / 2);\n max-width: calc(var(--altcha-max-width) - var(--altcha-padding));\n top: calc(var(--altcha-padding) + var(--altcha-checkbox-size) + var(--altcha-popover-arrow-size));\n z-index: var(--altcha-z-index-popover);\n}\n.altcha-popover-arrow {\n border: var(--altcha-popover-arrow-size) solid transparent;\n border-bottom-color: var(--altcha-popover-color);\n content: "";\n height: 0;\n left: calc(var(--altcha-checkbox-size) / 2);\n position: absolute;\n top: calc(var(--altcha-popover-arrow-size) * -2);\n width: 0;\n}\n.altcha-popover-content {\n max-height: 100dvh;\n overflow: auto;\n padding: var(--altcha-padding);\n}\n.altcha-popover[data-top=true][data-display=standard] {\n bottom: calc(100% - (var(--altcha-padding) - var(--altcha-popover-arrow-size)));\n top: auto;\n}\n.altcha-popover[data-top=true][data-display=standard] .altcha-popover-arrow {\n border-bottom-color: transparent;\n border-top-color: var(--altcha-popover-color);\n bottom: calc(var(--altcha-popover-arrow-size) * -2);\n top: auto;\n}\n.altcha-popover[data-variant=error] {\n --altcha-popover-color: var(--altcha-color-error);\n background-color: var(--altcha-color-error);\n border-color: var(--altcha-color-error);\n color: var(--altcha-color-error-content);\n}\n.altcha-popover[data-variant=error] .altcha-popover-content {\n padding: calc(var(--altcha-padding) / 1.5) var(--altcha-padding);\n}\n.altcha-popover[data-display=overlay] {\n animation: altcha-overlay-slidein 0.5s forwards;\n left: 50%;\n position: fixed;\n top: 45%;\n transform: translate(-50%, -50%);\n width: var(--altcha-max-width);\n z-index: var(--altcha-z-index);\n}\n.altcha-popover[data-display=bottomsheet] {\n animation: altcha-bottomsheet-slideup 0.5s forwards;\n border-bottom-left-radius: 0;\n border-bottom-right-radius: 0;\n border-bottom: 0;\n bottom: -100%;\n left: 50%;\n position: fixed;\n top: auto;\n transform: translate(-50%, 0);\n width: var(--altcha-max-width);\n z-index: var(--altcha-z-index);\n}\n.altcha-popover[data-display=bottomsheet] .altcha-popover-content {\n padding-bottom: calc(var(--altcha-padding) * 2);\n}\n.altcha-popover-backdrop {\n background: var(--altcha-color-base-content);\n bottom: 0;\n left: 0;\n opacity: 0.1;\n position: fixed;\n right: 0;\n top: 0;\n transition: opacity 0.5s;\n z-index: var(--altcha-z-index);\n}\n.altcha-popover-close {\n color: var(--altcha-color-base-content);\n cursor: pointer;\n display: inline-block;\n font-size: 1rem;\n height: 1.25rem;\n line-height: 0.95;\n position: absolute;\n right: 0;\n text-align: center;\n text-shadow: 0 0 1px var(--altcha-color-base);\n top: -1.5rem;\n width: 1.25rem;\n z-index: var(--altcha-z-index);\n}\n[dir=rtl] .altcha-popover {\n left: auto;\n right: calc(var(--altcha-padding) / 2);\n}\n[dir=rtl] .altcha-popover-arrow {\n left: auto;\n right: calc(var(--altcha-checkbox-size) / 2);\n}\n[dir=rtl] .altcha-popover-close {\n left: 0;\n right: auto;\n}\n.altcha-popover[data-display=bottomsheet] .altcha-footer, .altcha-popover[data-display=overlay] .altcha-footer {\n align-items: center;\n justify-content: center;\n padding-top: 1rem;\n gap: 0.5rem;\n}\n.altcha-popover[data-display=bottomsheet] .altcha-footer svg, .altcha-popover[data-display=overlay] .altcha-footer svg {\n height: 18px;\n width: 18px;\n vertical-align: middle;\n}\n.altcha-code-challenge > form {\n display: flex;\n flex-direction: column;\n gap: 0.5rem;\n}\n.altcha-code-challenge-title {\n font-weight: 600;\n}\n.altcha-code-challenge-text {\n font-size: 0.85rem;\n}\n.altcha-code-challenge-image {\n background: white;\n border: var(--altcha-input-border-width) solid var(--altcha-color-neutral);\n border-radius: var(--altcha-input-border-radius);\n object-fit: contain;\n height: 50px;\n}\n.altcha-code-challenge-row {\n display: flex;\n gap: 0.5rem;\n}\n.altcha-code-challenge-buttons {\n align-items: center;\n display: flex;\n flex-direction: column;\n gap: 0.5rem;\n margin-top: var(--altcha-padding);\n justify-content: space-between;\n}\n.altcha-code-challenge-buttons button {\n justify-content: center;\n width: 100%;\n}\n.altcha-checkbox {\n cursor: pointer;\n height: var(--altcha-checkbox-size);\n position: relative;\n width: var(--altcha-checkbox-size);\n}\n.altcha-checkbox input {\n appearance: none;\n background: var(--altcha-input-background-color);\n border: var(--altcha-checkbox-border-width, 2px) solid var(--altcha-checkbox-border-color);\n border-radius: var(--altcha-checkbox-border-radius);\n cursor: pointer;\n height: var(--altcha-checkbox-size);\n left: 0;\n margin: 0;\n padding: 0;\n position: absolute;\n top: 0;\n width: var(--altcha-checkbox-size);\n}\n@supports (hanging-punctuation: first) and (font: -apple-system-body) and (-webkit-appearance: none) {\n .altcha-checkbox input {\n /* Safari-only: fixes focus outline */\n }\n .altcha-checkbox input:focus {\n outline-width: 2px;\n outline-style: solid;\n }\n}\n.altcha-checkbox input:before {\n border-radius: var(--altcha-checkbox-border-radius);\n content: "";\n width: 100%;\n height: 100%;\n background: var(--altcha-color-neutral);\n display: block;\n transform: scale(0);\n}\n.altcha-checkbox input:checked {\n background-color: var(--altcha-color-success);\n border-color: var(--altcha-color-success);\n}\n.altcha-checkbox input:checked::before {\n background-color: var(--altcha-color-success);\n opacity: 0;\n transform: scale(2.2);\n transition: all var(--altcha-checkbox-transition-duration) ease;\n transition-delay: 0.1s;\n}\n.altcha-checkbox svg {\n --altcha-radio-svg-size: calc(var(--altcha-checkbox-size) * 0.5);\n --altcha-radio-svg-offset: calc(var(--altcha-checkbox-size) * 0.25);\n fill: none;\n left: var(--altcha-radio-svg-offset);\n height: var(--altcha-radio-svg-size);\n opacity: 0;\n position: absolute;\n stroke: currentColor;\n stroke-width: 2;\n stroke-linecap: round;\n stroke-linejoin: round;\n stroke-dasharray: 16px;\n stroke-dashoffset: 16px;\n top: var(--altcha-radio-svg-offset);\n transform: translate3d(0, 0, 0);\n width: var(--altcha-radio-svg-size);\n}\n.altcha-checkbox input:checked + svg {\n color: var(--altcha-color-success-content);\n opacity: 1;\n stroke-dashoffset: 0;\n transition: all var(--altcha-checkbox-transition-duration) ease;\n transition-delay: 0.1s;\n}\n.altcha-checkbox-spinner {\n display: none;\n left: 0;\n height: var(--altcha-checkbox-size);\n position: absolute;\n top: 0;\n width: var(--altcha-checkbox-size);\n}\n.altcha-checkbox[data-loading=true] input {\n appearance: none;\n opacity: 0;\n pointer-events: none;\n}\n.altcha-checkbox[data-loading=true] .altcha-checkbox-spinner {\n display: block;\n}\n.altcha-checkbox-native {\n height: var(--altcha-checkbox-size);\n position: relative;\n width: var(--altcha-checkbox-size);\n}\n.altcha-checkbox-native input {\n height: var(--altcha-checkbox-size);\n margin: 0;\n width: var(--altcha-checkbox-size);\n}\n.altcha-checkbox-native-spinner {\n display: none;\n left: 0;\n height: var(--altcha-checkbox-size);\n position: absolute;\n top: 0;\n width: var(--altcha-checkbox-size);\n}\n.altcha-checkbox-native[data-loading=true] input {\n appearance: none;\n opacity: 0;\n pointer-events: none;\n}\n.altcha-checkbox-native[data-loading=true] .altcha-checkbox-native-spinner {\n display: block;\n}\n.altcha-switch {\n align-items: center;\n border-radius: var(--altcha-switch-border-radius);\n background-color: var(--altcha-switch-background-color);\n display: flex;\n height: var(--altcha-switch-height);\n padding: var(--altcha-switch-padding);\n position: relative;\n width: var(--altcha-switch-width);\n}\n.altcha-switch:focus-within {\n outline: var(--altcha-checkbox-outline);\n outline-offset: var(--altcha-checkbox-outline-offset);\n}\n.altcha-switch input {\n appearance: none;\n cursor: pointer;\n height: 100%;\n left: 0;\n opacity: 0;\n position: absolute;\n top: 0;\n width: 100%;\n}\n.altcha-switch-toggle {\n align-items: center;\n background-color: var(--altcha-switch-toggle-color);\n border-radius: var(--altcha-switch-toggle-border-radius);\n cursor: pointer;\n display: flex;\n height: var(--altcha-switch-toggle-size);\n justify-content: center;\n left: var(--altcha-switch-padding);\n position: absolute;\n transition: width 150ms ease-out, left 150ms ease-out;\n width: var(--altcha-switch-toggle-size);\n}\n.altcha-switch-spinner {\n display: none;\n height: var(--altcha-switch-toggle-size);\n width: var(--altcha-switch-toggle-size);\n}\n.altcha-switch[data-loading=true] {\n pointer-events: none;\n}\n.altcha-switch[data-loading=true] .altcha-switch-spinner {\n display: block;\n}\n.altcha-switch[data-loading=true] .altcha-switch-toggle {\n background-color: transparent;\n left: calc(50% - var(--altcha-switch-toggle-size) / 2);\n}\n[data-state=verified] .altcha-switch {\n --altcha-switch-background-color: var(--altcha-color-success);\n}\n[data-state=verified] .altcha-switch-toggle {\n background-color: var(--altcha-color-success-content);\n left: calc(100% - var(--altcha-switch-height) + var(--altcha-switch-padding));\n}\n[dir=rtl] .altcha-switch-toggle {\n left: calc(100% - var(--altcha-switch-height) + var(--altcha-switch-padding));\n}\n[dir=rtl][data-state=verified] .altcha-switch-toggle {\n left: var(--altcha-switch-padding);\n}\n.altcha-floating-arrow {\n border: 6px solid transparent;\n border-bottom-color: var(--altcha-border-color);\n content: "";\n height: 0;\n left: 12px;\n position: absolute;\n top: -12px;\n width: 0;\n}\n.altcha-overlay-backdrop {\n bottom: 0;\n left: 0;\n position: fixed;\n right: 0;\n top: 0;\n transition: opacity var(--altcha-transition-duration);\n z-index: var(--altcha-z-index);\n}\n.altcha-overlay-close {\n display: inline-block;\n color: currentColor;\n cursor: pointer;\n font-size: 1rem;\n height: 1rem;\n line-height: 0.85;\n position: absolute;\n right: 0;\n text-align: center;\n text-shadow: 0 0 1px var(--altcha-color-base);\n top: -1.5rem;\n width: 1rem;\n z-index: var(--altcha-z-index);\n}\n.altcha[data-display=overlay] {\n animation: altcha-overlay-slidein var(--altcha-transition-duration) forwards;\n filter: var(--altcha-shadow);\n left: 50%;\n opacity: 0;\n position: fixed;\n top: 45%;\n transform: translate(-50%, -50%);\n z-index: var(--altcha-z-index);\n}\n.altcha[data-display=overlay] .altcha-main {\n width: var(--altcha-max-width);\n}\n.altcha[data-display=floating] {\n display: none;\n filter: var(--altcha-shadow);\n left: var(--altcha-floating-left, -100%);\n position: fixed;\n top: var(--altcha-floating-top, -100%);\n z-index: var(--altcha-z-index);\n}\n.altcha[data-display=floating] .altcha-main {\n width: var(--altcha-max-width);\n}\n.altcha[data-display=floating][data-floating-position=top] .altcha-floating-arrow {\n border-bottom-color: transparent;\n border-top-color: var(--altcha-border-color);\n bottom: -12px;\n top: auto;\n}\n.altcha[data-display=floating][data-visible] {\n display: flex;\n}\n.altcha[data-display=bar] {\n bottom: -100%;\n filter: var(--altcha-shadow);\n left: 0;\n position: fixed;\n right: 0;\n transition: bottom var(--altcha-transition-duration), top var(--altcha-transition-duration);\n z-index: var(--altcha-z-index);\n}\n.altcha[data-display=bar] .altcha-main {\n align-items: center;\n border-radius: 0;\n border-width: var(--altcha-border-width) 0 0 0;\n flex-direction: row;\n max-width: 100% !important;\n}\n.altcha[data-display=bar] .altcha-main > * {\n width: auto;\n}\n.altcha[data-display=bar][data-placement=top] {\n bottom: auto;\n top: -100%;\n}\n.altcha[data-display=bar][data-placement=top] .altcha-main {\n border-width: 0 0 var(--altcha-border-width) 0;\n}\n.altcha[data-display=bar][data-placement=bottom]:not([data-state=unverified]) {\n bottom: 0;\n}\n.altcha[data-display=bar][data-placement=top]:not([data-state=unverified]) {\n top: 0;\n}\n.altcha[data-display=invisible] {\n display: none;\n}\n\n@keyframes altcha-rotate {\n 0% {\n transform: rotate(0deg);\n }\n 100% {\n transform: rotate(360deg);\n }\n}\n@keyframes altcha-bottomsheet-slideup {\n 100% {\n bottom: 0;\n }\n}\n@keyframes altcha-overlay-slidein {\n 100% {\n opacity: 1;\n top: 50%;\n }\n}'),$altcha.algorithms.set("SHA-256",()=>new Ur),$altcha.algorithms.set("SHA-384",()=>new Ur),$altcha.algorithms.set("SHA-512",()=>new Ur),$altcha.algorithms.set("PBKDF2/SHA-256",()=>new qr),$altcha.algorithms.set("PBKDF2/SHA-384",()=>new qr),$altcha.algorithms.set("PBKDF2/SHA-512",()=>new qr);globalThis.$altcha.i18n.set("ar",{ariaLinkLabel:"Altcha (الموقع الرسمي)",enterCode:"أدخل الرمز",enterCodeAria:"أدخل الرمز الذي تسمعه. اضغط على المسافة لتشغيل الصوت.",error:"فشل التحقق. حاول مرة أخرى لاحقاً.",expired:"انتهت صلاحية التحقق. حاول مرة أخرى.",footer:'محمي بواسطة ALTCHA',getAudioChallenge:"احصل على تحدي صوتي",label:"أنا لست روبوتاً",loading:"جارٍ التحميل...",reload:"إعادة تحميل",verify:"تحقق",verificationRequired:"مطلوب التحقق!",verified:"تم التحقق",verifying:"جارٍ التحقق...",waitAlert:"جارٍ التحقق... يرجى الانتظار.",cancel:"إلغاء",enterCodeFromImage:"للمتابعة، يرجى إدخال الرمز من الصورة أدناه."});globalThis.$altcha.i18n.set("bg",{ariaLinkLabel:"Altcha (официален уебсайт)",enterCode:"Въведете код",enterCodeAria:"Въведете кода, който чувате. Натиснете Space за възпроизвеждане на аудио.",error:"Проверката неуспешна. Моля, опитайте по-късно.",expired:"Времето за проверка изтече. Моля, опитайте отново.",footer:'Защитено от ALTCHA',getAudioChallenge:"Аудио проверка",label:"Аз не съм робот",loading:"Зареждане...",reload:"Презареди",verify:"Провери",verificationRequired:"Изисква се проверка!",verified:"Проверено",verifying:"Проверява се...",waitAlert:"Проверката е в процес... моля изчакайте.",cancel:"Отказ",enterCodeFromImage:"За да продължите, моля, въведете кода от изображението по-долу."});globalThis.$altcha.i18n.set("be",{ariaLinkLabel:"Altcha (афіцыйны сайт)",enterCode:"Увядзіце код",enterCodeAria:"Увядзіце код, які вы чуеце. Націсніце прабел, каб прайграць аўдыё.",error:"Праверка не прайшла. Паспрабуйце пазней.",expired:"Тэрмін праверкі скончыўся. Паспрабуйце зноў.",footer:'Абаронена ALTCHA',getAudioChallenge:"Атрымаць аўдыё выклік",label:"Я не робат",loading:"Загрузка...",reload:"Перазагрузіць",verify:"Праверыць",verificationRequired:"Патрабуецца праверка!",verified:"Праверана",verifying:"Правяраем...",waitAlert:"Праверка... калі ласка, пачакайце.",cancel:"Скасаваць",enterCodeFromImage:"Каб працягнуць, увядзіце код з малюнка ніжэй."});globalThis.$altcha.i18n.set("bs",{ariaLinkLabel:"Altcha (službena web stranica)",enterCode:"Unesite kod",enterCodeAria:"Unesite kod koji čujete. Pritisnite Space da biste pustili zvuk.",error:"Verifikacija nije uspjela. Pokušajte ponovo kasnije.",expired:"Verifikacija je istekla. Pokušajte ponovo.",footer:'Zaštićeno od strane ALTCHA',getAudioChallenge:"Dohvatite audio izazov",label:"Nisam robot",loading:"Učitavanje...",reload:"Ponovno učitaj",verify:"Verifikuj",verificationRequired:"Verifikacija je obavezna!",verified:"Verifikovano",verifying:"Verifikacija u toku...",waitAlert:"Verifikacija u toku... molimo vas da sačekate.",cancel:"Odustani",enterCodeFromImage:"Za nastavak, molimo unesite kod sa slike ispod."});globalThis.$altcha.i18n.set("ca",{ariaLinkLabel:"Altcha (lloc web oficial)",enterCode:"Introdueix el codi",enterCodeAria:"Introdueix el codi que escoltes. Prem Espai per reproduir l’àudio.",error:"Verificació fallida. Torna-ho a provar més tard.",expired:"Verificació expirada. Torna-ho a provar.",footer:'Protegit per ALTCHA',getAudioChallenge:"Obtenir un desafiament d’àudio",label:"No sóc un robot",loading:"Carregant...",reload:"Torna a carregar",verify:"Verificar",verificationRequired:"Es requereix verificació!",verified:"Verificat",verifying:"Verificant...",waitAlert:"Verificant... si us plau, espera.",cancel:"Cancel·la",enterCodeFromImage:"Per continuar, si us plau, introdueix el codi de la imatge següent."});globalThis.$altcha.i18n.set("cs",{ariaLinkLabel:"Altcha (oficiální web)",enterCode:"Zadejte kód",enterCodeAria:"Zadejte kód, který slyšíte. Stisknutím mezerníku přehrajete zvuk.",error:"Ověření selhalo. Zkuste to prosím později.",expired:"Ověření vypršelo. Zkuste to prosím znovu.",footer:'Chráněno pomocí ALTCHA',getAudioChallenge:"Získat audio výzvu",label:"Nejsem robot",loading:"Načítání...",reload:"Znovu načíst",verify:"Ověřit",verificationRequired:"Vyžaduje se ověření!",verified:"Ověřeno",verifying:"Ověřování...",waitAlert:"Probíhá ověření... prosím počkejte.",cancel:"Zrušit",enterCodeFromImage:"Pro pokračování zadejte kód z obrázku níže."});globalThis.$altcha.i18n.set("da",{ariaLinkLabel:"Altcha (officiel hjemmeside)",enterCode:"Indtast kode",enterCodeAria:"Indtast den kode, du hører. Tryk på mellemrumstasten for at afspille lyd.",error:"Verificering mislykkedes. Prøv venligst igen senere.",expired:"Verificering udløbet. Prøv venligst igen.",footer:'Beskyttet af ALTCHA',getAudioChallenge:"Hent lydudfordring",label:"Jeg er ikke en robot",loading:"Indlæser...",reload:"Genindlæs",verify:"Verificer",verificationRequired:"Verificering kræves!",verified:"Verificeret",verifying:"Verificerer...",waitAlert:"Verificerer... vent venligst.",cancel:"Annuller",enterCodeFromImage:"For at fortsætte, bedes du indtaste koden fra billedet herunder."});globalThis.$altcha.i18n.set("de",{ariaLinkLabel:"Altcha (offizielle Website)",enterCode:"Code eingeben",enterCodeAria:"Geben Sie den Code ein, den Sie hören. Drücken Sie die Leertaste, um die Audio abzuspielen.",error:"Überprüfung fehlgeschlagen. Bitte versuchen Sie es später erneut.",expired:"Überprüfung abgelaufen. Bitte versuchen Sie es erneut.",footer:'Geschützt durch ALTCHA',getAudioChallenge:"Audio-Herausforderung anfordern",label:"Ich bin kein Roboter",loading:"Lade...",reload:"Neu laden",verify:"Überprüfen",verificationRequired:"Überprüfung erforderlich!",verified:"Überprüft",verifying:"Wird überprüft...",waitAlert:"Überprüfung läuft... bitte warten.",cancel:"Abbrechen",enterCodeFromImage:"Um fortzufahren, geben Sie bitte den Code aus dem Bild unten ein."});globalThis.$altcha.i18n.set("el",{ariaLinkLabel:"Altcha (επίσημος ιστότοπος)",enterCode:"Εισαγάγετε κωδικό",enterCodeAria:"Εισαγάγετε τον κωδικό που ακούτε. Πατήστε Space για να παίξετε τον ήχο.",error:"Η επαλήθευση απέτυχε. Δοκιμάστε ξανά αργότερα.",expired:"Η επαλήθευση έληξε. Δοκιμάστε ξανά.",footer:'Προστατεύεται από το ALTCHA',getAudioChallenge:"Λήψη ηχητικής δοκιμασίας",label:"Δεν είμαι ρομπότ",loading:"Φόρτωση...",reload:"Επαναφόρτωση",verify:"Επαλήθευση",verificationRequired:"Απαιτείται έλεγχος!",verified:"Επαληθεύτηκε",verifying:"Γίνεται επαλήθευση...",waitAlert:"Γίνεται επαλήθευση... παρακαλώ περιμένετε.",cancel:"Ακύρωση",enterCodeFromImage:"Για να συνεχίσετε, εισάγετε τον κωδικό από την παρακάτω εικόνα."});globalThis.$altcha.i18n.set("es-es",{ariaLinkLabel:"Altcha (sitio web oficial)",enterCode:"Introduce el código",enterCodeAria:"Introduce el código que escuchas. Pulsa Espacio para reproducir el audio.",error:"Falló la verificación. Por favor intente nuevamente más tarde.",expired:"Verificación expirada. Por favor intente nuevamente.",footer:'Protegido por ALTCHA',getAudioChallenge:"Obtener un desafío de audio",label:"No soy un robot",loading:"Cargando...",reload:"Recargar",verify:"Verificar",verificationRequired:"¡Verificación requerida!",verified:"Verificado",verifying:"Verificando...",waitAlert:"Verificando... por favor espere.",cancel:"Cancelar",enterCodeFromImage:"Para continuar, introduzca el código de la imagen de abajo."});globalThis.$altcha.i18n.set("es-419",{ariaLinkLabel:"Altcha (sitio web oficial)",enterCode:"Ingresa el código",enterCodeAria:"Ingresa el código que escuchas. Presiona Espacio para reproducir el audio.",error:"Falló la verificación. Por favor vuelve a intentarlo más tarde.",expired:"La verificación expiró. Por favor inténtalo de nuevo.",footer:'Protegido por ALTCHA',getAudioChallenge:"Obtener un reto de audio",label:"No soy un robot",loading:"Cargando...",reload:"Volver a cargar",verify:"Verificar",verificationRequired:"¡Verificación requerida!",verified:"Verificado",verifying:"Verificando...",waitAlert:"Verificando... por favor espera.",cancel:"Cancelar",enterCodeFromImage:"Para continuar, ingresa el código de la imagen a continuación."});globalThis.$altcha.i18n.set("et",{ariaLinkLabel:"Altcha (ametlik veebisait)",enterCode:"Sisesta kood",enterCodeAria:"Sisestage kuuldu kood. Vajutage tühikut, et esitada heli.",error:"Kinnitamine ebaõnnestus. Proovi hiljem uuesti.",expired:"Kinnitamine aegus. Proovi uuesti.",footer:'Kaitstud ALTCHA poolt',getAudioChallenge:"Hangi heliülesanne",label:"Ma ei ole robot",loading:"Laadimine...",reload:"Laadi uuesti",verify:"Kinnita",verificationRequired:"Kontroll on vajalik!",verified:"Kinnitatud",verifying:"Kinnitamine...",waitAlert:"Kinnitamine... palun oota.",cancel:"Tühista",enterCodeFromImage:"Jätkamiseks sisestage alloleval pildil olev kood."});globalThis.$altcha.i18n.set("eu",{ariaLinkLabel:"Altcha (webgune ofiziala)",enterCode:"Sartu kodea",enterCodeAria:"Sartu entzun duzun kodea. Sakatu Espazioa audioa erreproduzitzeko.",error:"Egiaztatzeak huts egin du. Saiatu berriro geroago.",expired:"Egiaztatzea iraungi da. Saiatu berriro.",footer:'ALTCHAk babestuta',getAudioChallenge:"Jaso audio-erronka bat",label:"Ez naiz robot bat",loading:"Kargatzen...",reload:"Birkargatu",verify:"Egiaztatu",verificationRequired:"Egiaztatzea beharrezkoa da!",verified:"Egiaztatuta",verifying:"Egiaztatzen...",waitAlert:"Egiaztatzen... itxaron mesedez.",cancel:"Utzi",enterCodeFromImage:"Jarraitzeko, idatzi beheko irudiko kodea."});globalThis.$altcha.i18n.set("fa",{ariaLinkLabel:"Altcha (وب‌سایت رسمی)",enterCode:"کد را وارد کنید",enterCodeAria:"کدی که می‌شنوید را وارد کنید. برای پخش صدا Space را فشار دهید.",error:"احراز هویت ناموفق بود. بعداً دوباره تلاش کنید.",expired:"احراز هویت منقضی شد. دوباره تلاش کنید.",footer:'محافظت شده توسط ALTCHA',getAudioChallenge:"دریافت چالش صوتی",label:"من ربات نیستم",loading:"در حال بارگذاری...",reload:"بارگذاری مجدد",verify:"تایید",verificationRequired:"احراز هویت لازم است!",verified:"تایید شد",verifying:"در حال تایید...",waitAlert:"در حال تایید... لطفا منتظر بمانید.",cancel:"لغو کردن",enterCodeFromImage:"برای ادامه، لطفاً کد تصویر زیر را وارد کنید."});globalThis.$altcha.i18n.set("lb",{ariaLinkLabel:"Altcha (offiziell Websäit)",enterCode:"Code aginn",enterCodeAria:"Gitt de Code an deen dir héiert. Dréckt op d'Weltraumtast fir Audio ofzespillen.",error:"Verifikatioun ass feelgeschloen. Probéiert méi spéit nach emol.",expired:"Verifikatioun ofgelaf. Probéiert nach emol.",footer:'Geschützt vun ALTCHA',getAudioChallenge:"Kritt eng Audio-Herausfuerderung",label:"Ech sinn keen Robot",loading:"Lueden...",reload:"Nei lueden",verify:"Verifizéieren",verificationRequired:"Verifikatioun néideg!",verified:"Verifizéiert",verifying:"Verifizéieren...",waitAlert:"Verifizéieren... waart wgl.",cancel:"Ofbriechen",enterCodeFromImage:"Fir virun ze fueren, gitt wgl. de Code aus dem Bild hei drënner an."});globalThis.$altcha.i18n.set("fi",{ariaLinkLabel:"Altcha (virallinen verkkosivusto)",enterCode:"Syötä koodi",enterCodeAria:"Kirjoita kuulemasi koodi. Paina välilyöntiä toistaaksesi äänen.",error:"Varmennus epäonnistui. Yritä myöhemmin uudelleen.",expired:"Varmennus vanhentui. Yritä uudelleen.",footer:'Suojattu ALTCHA:lla',getAudioChallenge:"Hae äänitehtävä",label:"En ole robotti",loading:"Ladataan...",reload:"Lataa uudelleen",verify:"Vahvista",verificationRequired:"Vahvistus vaaditaan!",verified:"Vahvistettu",verifying:"Vahvistetaan...",waitAlert:"Vahvistetaan... odota hetki.",cancel:"Peruuta",enterCodeFromImage:"Jatkaaksesi, syötä alla olevan kuvan koodi."});globalThis.$altcha.i18n.set("fr-ca",{ariaLinkLabel:"Altcha (site officiel)",enterCode:"Entrez le code",enterCodeAria:"Entrez le code que vous entendez. Appuyez sur la barre d'espace pour écouter l'audio.",error:"Échec de la vérification. Réessayez plus tard.",expired:"La vérification a expiré. Réessayez.",footer:'Protégé par ALTCHA',getAudioChallenge:"Obtenir un défi audio",label:"Je ne suis pas un robot",loading:"Chargement...",reload:"Recharger",verify:"Vérifier",verificationRequired:"Vérification requise !",verified:"Vérifié",verifying:"Vérification en cours...",waitAlert:"Vérification en cours... veuillez patienter.",cancel:"Annuler",enterCodeFromImage:"Pour continuer, veuillez entrer le code de l'image ci-dessous."});globalThis.$altcha.i18n.set("fr-fr",{ariaLinkLabel:"Altcha (site officiel)",enterCode:"Entrez le code",enterCodeAria:"Entrez le code que vous entendez. Appuyez sur Espace pour écouter l'audio.",error:"Échec de la vérification. Essayez à nouveau plus tard.",expired:"La vérification a expiré. Essayez à nouveau.",footer:'Protégé par ALTCHA',getAudioChallenge:"Obtenir un défi audio",label:"Je ne suis pas un robot",loading:"Chargement...",reload:"Recharger",verify:"Vérifier",verificationRequired:"Vérification requise !",verified:"Vérifié",verifying:"Vérification en cours...",waitAlert:"Vérification en cours... veuillez patienter.",cancel:"Annuler",enterCodeFromImage:"Pour continuer, veuillez entrer le code de l'image ci-dessous."});globalThis.$altcha.i18n.set("ga",{ariaLinkLabel:"Altcha (láithreán gréasáin oifigiúil)",enterCode:"Iontráil cód",enterCodeAria:"Cuir isteach an cód a chloiseann tú. Brúigh Spás chun an fuaime a sheinm.",error:"Theip ar an bhfíorú. Bain triail eile as níos déanaí.",expired:"Tá an fíorú as feidhm. Bain triail eile as.",footer:'Cosanta ag ALTCHA',getAudioChallenge:"Faigh dúshlán fuaime",label:"Níl mé i mo róbat",loading:"Á luchtú...",reload:"Athluchtaigh",verify:"Fíoraigh",verificationRequired:"Fíorú riachtanach!",verified:"Fíoraithe",verifying:"Fíorú ar siúl...",waitAlert:"Fíorú ar siúl... fan go fóill.",cancel:"Cealaigh",enterCodeFromImage:"Chun dul ar aghaidh, le do thoil cuir isteach an cód ón íomhá thíos."});globalThis.$altcha.i18n.set("hr",{ariaLinkLabel:"Altcha (službena web stranica)",enterCode:"Unesite kod",enterCodeAria:"Unesite kod koji čujete. Pritisnite razmaknicu za reprodukciju zvuka.",error:"Provjera nije uspjela. Molimo pokušajte kasnije.",expired:"Provjera je istekla. Molimo pokušajte ponovo.",footer:'Zaštićeno od strane ALTCHA',getAudioChallenge:"Audio provjera",label:"Ja nisam robot",loading:"Učitavanje...",reload:"Ponovno učitaj",verify:"Provjeri",verificationRequired:"Potrebna je provjera!",verified:"Provjereno",verifying:"Provjeravanje...",waitAlert:"Provjera je u tijeku... molimo pričekajte.",cancel:"Odustani",enterCodeFromImage:"Za nastavak molimo unesite kod sa slike ispod."});globalThis.$altcha.i18n.set("hu",{ariaLinkLabel:"Altcha (hivatalos weboldal)",enterCode:"Írja be a kódot",enterCodeAria:"Írja be a hallott kódot. Nyomja meg a Szóköz billentyűt a hang lejátszásához.",error:"A hitelesítés nem sikerült. Próbáld meg később újra.",expired:"A hitelesítés lejárt. Próbáld újra.",footer:'Védve a következő által: ALTCHA',getAudioChallenge:"Hangalapú kihívás kérése",label:"Nem vagyok robot",loading:"Betöltés...",reload:"Újratöltés",verify:"Ellenőrzés",verificationRequired:"Ellenőrzés szükséges!",verified:"Ellenőrizve",verifying:"Ellenőrzés folyamatban...",waitAlert:"Ellenőrzés folyamatban... kérlek várj.",cancel:"Mégse",enterCodeFromImage:"A folytatáshoz, kérjük, adja meg az alábbi kép kódját."});globalThis.$altcha.i18n.set("is",{ariaLinkLabel:"Altcha (opinber vefsíða)",enterCode:"Sláðu inn kóða",enterCodeAria:"Sláðu inn kóðann sem þú heyrir. Ýttu á Space til að spila hljóðið.",error:"Staðfesting mistókst. Reyndu aftur síðar.",expired:"Staðfesting er útrunnin. Reyndu aftur.",footer:'Verndað af ALTCHA',getAudioChallenge:"Fá hljóðáskorun",label:"Ég er ekki robot",loading:"Hleður...",reload:"Hleð aftur",verify:"Staðfesta",verificationRequired:"Staðfesting er nauðsynleg!",verified:"Staðfest",verifying:"Að staðfesta...",waitAlert:"Að staðfesta... vinsamlegast bíða.",cancel:"Hætta við",enterCodeFromImage:"Til að halda áfram, vinsamlegast sláðu inn kóðann af myndinni hér að neðan."});globalThis.$altcha.i18n.set("it",{ariaLinkLabel:"Altcha (sito ufficiale)",enterCode:"Inserisci il codice",enterCodeAria:"Inserisci il codice che senti. Premi Spazio per riprodurre l'audio.",error:"Verifica fallita. Riprova più tardi.",expired:"Verifica scaduta. Riprova.",footer:'Protetto da ALTCHA',getAudioChallenge:"Ottieni una sfida audio",label:"Non sono un robot",loading:"Caricamento...",reload:"Ricarica",verify:"Verifica",verificationRequired:"Verifica richiesta!",verified:"Verificato",verifying:"Verifica in corso...",waitAlert:"Verifica in corso... attendere.",cancel:"Annulla",enterCodeFromImage:"Per procedere, inserisci il codice dall'immagine sottostante."});globalThis.$altcha.i18n.set("lt",{ariaLinkLabel:"Altcha (oficiali svetainė)",enterCode:"Įveskite kodą",enterCodeAria:"Įveskite girdimą kodą. Paspauskite tarpo klavišą, kad grotumėte garso įrašą.",error:"Patvirtinimas nepavyko. Bandykite vėliau.",expired:"Patvirtinimo laikas baigėsi. Bandykite dar kartą.",footer:'Apsaugota ALTCHA',getAudioChallenge:"Gauti garso užduotį",label:"Aš nesu robotas",loading:"Įkeliama...",reload:"Įkelti iš naujo",verify:"Patvirtinti",verificationRequired:"Reikalingas patvirtinimas!",verified:"Patvirtinta",verifying:"Tikrinama...",waitAlert:"Tikrinama... prašome palaukti.",cancel:"Atšaukti",enterCodeFromImage:"Norėdami tęsti, įveskite kodą iš paveikslėlio žemiau."});globalThis.$altcha.i18n.set("lv",{ariaLinkLabel:"Altcha (oficiālā tīmekļa vietne)",enterCode:"Ievadiet kodu",enterCodeAria:"Ievadiet dzirdamo kodu. Nospiediet atstarpes taustiņu, lai atskaņotu audio.",error:"Verifikācija neizdevās. Mēģiniet vēlāk vēlreiz.",expired:"Verifikācijas laiks ir beidzies. Mēģiniet vēlreiz.",footer:'Aizsargāts ar ALTCHA',getAudioChallenge:"Saņemt audio izaicinājumu",label:"Es neesmu robots",loading:"Notiek ielāde...",reload:"Pārlādēt",verify:"Verificēt",verificationRequired:"Nepieciešama verifikācija!",verified:"Verificēts",verifying:"Notiek verifikācija...",waitAlert:"Notiek verifikācija... lūdzu, uzgaidiet.",cancel:"Atcelt",enterCodeFromImage:"Lai turpinātu, lūdzu, ievadiet zemāk redzamo attēlu kodu."});globalThis.$altcha.i18n.set("mt",{ariaLinkLabel:"Altcha (sit uffiċjali)",enterCode:"Idħol il-kodiċi",enterCodeAria:"Idħol il-kodiċi li tisma'. Agħfas Spazju biex tindaqq l-awdjo.",error:"Il-verifika falliet. Erġa’ pprova aktar tard.",expired:"Il-verifika skadiet. Erġa’ pprova.",footer:'Protett minn ALTCHA',getAudioChallenge:"Ikseb sfida bl-awdjo",label:"M’inix robot",loading:"Qed jitgħabba...",reload:"Ittella’ mill-ġdid",verify:"Ivverifika",verificationRequired:"Verifika meħtieġa!",verified:"Ivverifikat",verifying:"Verifika għaddejja...",waitAlert:"Verifika għaddejja... stenna ftit.",cancel:"Ikkanċella",enterCodeFromImage:"Biex tipproċedi, jekk jogħġbok daħħal il-kodiċi mill-immaġni hawn taħt."});globalThis.$altcha.i18n.set("nb",{ariaLinkLabel:"Altcha (offisiell nettside)",enterCode:"Skriv inn kode",enterCodeAria:"Skriv inn koden du hører. Trykk på Space for å spille av lyden.",error:"Verifisering mislyktes. Prøv igjen senere.",expired:"Verifiseringen utløp. Prøv igjen.",footer:'Beskyttet av ALTCHA',getAudioChallenge:"Få en lydutfordring",label:"Jeg er ikke en robot",loading:"Laster...",reload:"Last på nytt",verify:"Verifiser",verificationRequired:"Verifisering kreves!",verified:"Verifisert",verifying:"Verifiserer...",waitAlert:"Verifiserer... vennligst vent.",cancel:"Avbryt",enterCodeFromImage:"For å fortsette, vennligst skriv inn koden fra bildet nedenfor."});globalThis.$altcha.i18n.set("nl",{ariaLinkLabel:"Altcha (officiële website)",enterCode:"Voer code in",enterCodeAria:"Voer de code in die je hoort. Druk op Spatie om de audio af te spelen.",error:"Verificatie mislukt. Probeer het later opnieuw.",expired:"Verificatie verlopen. Probeer het opnieuw.",footer:'Beschermd door ALTCHA',getAudioChallenge:"Audio-uitdaging ontvangen",label:"Ik ben geen robot",loading:"Laden...",reload:"Herladen",verify:"Verifiëren",verificationRequired:"Verificatie vereist!",verified:"Geverifieerd",verifying:"Bezig met verifiëren...",waitAlert:"Bezig met verifiëren... even geduld a.u.b.",cancel:"Annuleren",enterCodeFromImage:"Om door te gaan, voert u de code uit de onderstaande afbeelding in."});globalThis.$altcha.i18n.set("pl",{ariaLinkLabel:"Altcha (oficjalna strona internetowa)",enterCode:"Wprowadź kod",enterCodeAria:"Wpisz kod, który słyszysz. Naciśnij Spację, aby odtworzyć dźwięk.",error:"Weryfikacja nie powiodła się. Spróbuj ponownie później.",expired:"Weryfikacja wygasła. Spróbuj ponownie.",footer:'Chronione przez ALTCHA',getAudioChallenge:"Pobierz zadanie dźwiękowe",label:"Nie jestem robotem",loading:"Ładowanie...",reload:"Odśwież",verify:"Zweryfikuj",verificationRequired:"Wymagana weryfikacja!",verified:"Zweryfikowano",verifying:"Weryfikacja...",waitAlert:"Trwa weryfikacja... proszę czekać.",cancel:"Anuluj",enterCodeFromImage:"Aby kontynuować, wprowadź kod z poniższego obrazka."});globalThis.$altcha.i18n.set("pt-pt",{ariaLinkLabel:"Altcha (site oficial)",enterCode:"Introduza o código",enterCodeAria:"Introduza o código que ouve. Prima Espaço para reproduzir o áudio.",error:"A verificação falhou. Por favor, tente novamente mais tarde.",expired:"Verificação expirada. Por favor, tente novamente.",footer:'Protegido por ALTCHA',getAudioChallenge:"Obter desafio de áudio",label:"Não sou um robô",loading:"A carregar...",reload:"Recarregar",verify:"Verificar",verificationRequired:"Verificação necessária!",verified:"Verificado",verifying:"A verificar...",waitAlert:"A verificar... por favor aguarde.",cancel:"Cancelar",enterCodeFromImage:"Para prosseguir, introduza o código da imagem abaixo."});globalThis.$altcha.i18n.set("pt-br",{ariaLinkLabel:"Altcha (site oficial)",enterCode:"Digite o código",enterCodeAria:"Digite o código que você ouve. Pressione Espaço para reproduzir o áudio.",error:"Falha na verificação. Por favor, tente novamente mais tarde.",expired:"Verificação expirada. Por favor, tente novamente.",footer:'Protegido por ALTCHA',getAudioChallenge:"Obter desafio de áudio",label:"Eu não sou um robô",loading:"Carregando...",reload:"Recarregar",verify:"Verificar",verificationRequired:"Verificação necessária!",verified:"Verificado",verifying:"Verificando...",waitAlert:"Verificando... por favor aguarde.",cancel:"Cancelar",enterCodeFromImage:"Para prosseguir, digite o código da imagem abaixo."});globalThis.$altcha.i18n.set("ro",{ariaLinkLabel:"Altcha (site oficial)",enterCode:"Introduceți codul",enterCodeAria:"Introduceți codul pe care îl auziți. Apăsați Spațiu pentru a reda audio.",error:"Verificarea a eșuat. Încearcă din nou mai târziu.",expired:"Verificarea a expirat. Încearcă din nou.",footer:'Protejat de ALTCHA',getAudioChallenge:"Obține o provocare audio",label:"Nu sunt un robot",loading:"Se încarcă...",reload:"Reîncarcă",verify:"Verifică",verificationRequired:"Verificare necesară!",verified:"Verificat",verifying:"Se verifică...",waitAlert:"Se verifică... te rugăm să aștepți.",cancel:"Anulare",enterCodeFromImage:"Pentru a continua, vă rugăm să introduceți codul din imaginea de mai jos."});globalThis.$altcha.i18n.set("ru",{ariaLinkLabel:"Altcha (официальный сайт)",enterCode:"Введите код",enterCodeAria:"Введите код, который слышите. Нажмите пробел для воспроизведения аудио.",error:"Ошибка верификации. Попробуйте позже.",expired:"Срок действия верификации истек. Попробуйте снова.",footer:'Защищено ALTCHA',getAudioChallenge:"Получить аудио задачу",label:"Я не робот",loading:"Загрузка...",reload:"Перезагрузить",verify:"Проверить",verificationRequired:"Требуется проверка!",verified:"Проверено",verifying:"Идет проверка...",waitAlert:"Идет проверка... Пожалуйста, подождите.",cancel:"Отмена",enterCodeFromImage:"Чтобы продолжить, пожалуйста, введите код с изображения ниже."});globalThis.$altcha.i18n.set("sk",{ariaLinkLabel:"Altcha (oficiálna webová stránka)",enterCode:"Zadajte kód",enterCodeAria:"Zadajte kód, ktorý počujete. Stlačením medzerníka prehráte zvuk.",error:"Verifikácia zlyhala. Skúste to znova neskôr.",expired:"Verifikácia vypršala. Skúste to znova.",footer:'Chránené ALTCHA',getAudioChallenge:"Získať audio výzvu",label:"Nie som robot",loading:"Načítava sa...",reload:"Obnoviť",verify:"Verifikovať",verificationRequired:"Vyžaduje sa overenie!",verified:"Verifikované",verifying:"Prebieha verifikácia...",waitAlert:"Prebieha verifikácia... prosím čakajte.",cancel:"Zrušiť",enterCodeFromImage:"Na pokračovanie, prosím, zadajte kód z obrázka nižšie."});globalThis.$altcha.i18n.set("sl",{ariaLinkLabel:"Altcha (uradna spletna stran)",enterCode:"Vnesite kodo",enterCodeAria:"Vnesite kodo, ki jo slišite. Pritisnite preslednico za predvajanje zvoka.",error:"Preverjanje ni uspelo. Poskusite znova kasneje.",expired:"Preverjanje je poteklo. Poskusite znova.",footer:'Zaščiteno z ALTCHA',getAudioChallenge:"Pridobite zvočni izziv",label:"Nisem robot",loading:"Nalagam...",reload:"Ponovno naloži",verify:"Preveri",verificationRequired:"Potrebna je preveritev!",verified:"Preverjeno",verifying:"Preverjanje...",waitAlert:"Preverjanje... prosim počakajte.",cancel:"Preklic",enterCodeFromImage:"Za nadaljevanje, prosimo, vnesite kodo s slike spodaj."});globalThis.$altcha.i18n.set("sq",{ariaLinkLabel:"Altcha (faqja zyrtare)",enterCode:"Fut kodin",enterCodeAria:"Fut kodin që dëgjon. Shtypni Hapësirë për të luajtur audio.",error:"Verifikimi dështoi. Provoni përsëri më vonë.",expired:"Verifikimi ka skaduar. Provoni përsëri.",footer:'I mbrojtur nga ALTCHA',getAudioChallenge:"Merr një sfidë audio",label:"Unë nuk jam një robot",loading:"Duke u ngarkuar...",reload:"Ringarko",verify:"Verifiko",verificationRequired:"Kërkohet verifikimi!",verified:"I verifikuar",verifying:"Duke verifikuar...",waitAlert:"Duke verifikuar... ju lutem prisni.",cancel:"Anuloje",enterCodeFromImage:"Për të vazhduar, ju lutemi fusni kodin nga imazhi më poshtë."});globalThis.$altcha.i18n.set("sr",{ariaLinkLabel:"Altcha (zvanična web stranica)",enterCode:"Unesite kod",enterCodeAria:"Unesite kod koji čujete. Pritisnite Space da biste pustili zvuk.",error:"Verifikacija nije uspela. Pokušajte ponovo kasnije.",expired:"Verifikacija je istekla. Pokušajte ponovo.",footer:'Zaštićeno od strane ALTCHA',getAudioChallenge:"Dohvatite audio izazov",label:"Nisam robot",loading:"Učitavanje...",reload:"Ponovo učitaj",verify:"Verifikuj",verificationRequired:"Verifikacija je obavezna!",verified:"Verifikovano",verifying:"Verifikacija u toku...",waitAlert:"Verifikacija u toku... molimo vas da sačekate.",cancel:"Откажи",enterCodeFromImage:"Да бисте наставили, унесите код са слике испод."});globalThis.$altcha.i18n.set("sv",{ariaLinkLabel:"Altcha (officiell webbplats)",enterCode:"Ange kod",enterCodeAria:"Ange koden du hör. Tryck på mellanslag för att spela upp ljudet.",error:"Verifiering misslyckades. Försök igen senare.",expired:"Verifieringen har gått ut. Försök igen.",footer:'Skyddad av ALTCHA',getAudioChallenge:"Få ljudutmaning",label:"Jag är inte en robot",loading:"Laddar...",reload:"Ladda om",verify:"Verifiera",verificationRequired:"Verifiering krävs!",verified:"Verifierad",verifying:"Verifierar...",waitAlert:"Verifierar... vänligen vänta.",cancel:"Avbryt",enterCodeFromImage:"För att fortsätta, ange koden från bilden nedan."});globalThis.$altcha.i18n.set("tr",{ariaLinkLabel:"Altcha (resmi web sitesi)",enterCode:"Kodu girin",enterCodeAria:"Duyduğunuz kodu girin. Ses dosyasını oynatmak için Boşluk tuşuna basın.",error:"Doğrulama başarısız oldu. Lütfen daha sonra tekrar deneyin.",expired:"Doğrulama süresi doldu. Lütfen tekrar deneyin.",footer:'ALTCHA tarafından korunuyor ALTCHA',getAudioChallenge:"Sesli doğrulama al",label:"Ben robot değilim",loading:"Yükleniyor...",reload:"Yeniden yükle",verify:"Doğrula",verificationRequired:"Doğrulama gerekli!",verified:"Doğrulandı",verifying:"Doğrulama yapılıyor...",waitAlert:"Doğrulama yapılıyor... lütfen bekleyin.",cancel:"İptal",enterCodeFromImage:"Devam etmek için lütfen aşağıdaki resimdeki kodu girin."});globalThis.$altcha.i18n.set("uk",{ariaLinkLabel:"Altcha (офіційний сайт)",enterCode:"Введіть код",enterCodeAria:"Введіть код, який ви чуєте. Натисніть пробіл, щоб відтворити аудіо.",error:"Перевірка не вдалася. Спробуйте пізніше.",expired:"Перевірка прострочена. Спробуйте знову.",footer:'Захищено ALTCHA',getAudioChallenge:"Отримати аудіо-челлендж",label:"Я не робот",loading:"Завантаження...",reload:"Перезавантажити",verify:"Перевірити",verificationRequired:"Потрібна перевірка!",verified:"Перевірено",verifying:"Перевіряється...",waitAlert:"Перевірка... будь ласка, зачекайте.",cancel:"Скасувати",enterCodeFromImage:"Щоб продовжити, введіть код із зображення нижче."});globalThis.$altcha.i18n.set("af",{ariaLinkLabel:"Altcha (amptelike webwerf)",enterCode:"Voer kode in",enterCodeAria:"Voer die kode in wat jy hoor. Druk Spasie om die klank af te speel.",error:"Verifikasie het misluk. Probeer later weer.",expired:"Verifikasie het verval. Probeer weer.",footer:'Beskerm deur ALTCHA',getAudioChallenge:"Kry 'n klankuitdaging",label:"Ek is nie 'n robot nie",loading:"Laai...",reload:"Laai weer",verify:"Verifieer",verificationRequired:"Verifikasie is vereis!",verified:"Geverifieer",verifying:"Verifieer...",waitAlert:"Verifieer... wag asseblief.",cancel:"Kanselleer",enterCodeFromImage:"Om voort te gaan, voer asseblief die kode vanaf die onderstaande prentjie in."});globalThis.$altcha.i18n.set("am",{ariaLinkLabel:"Altcha (ዋናው ድህረ ገጽ)",enterCode:"ኮድ አስገባ",enterCodeAria:"የሚሰማዎትን ኮድ ያስገቡ። ድምጽ ለመጫወት Space ን ይጫኑ።",error:"ማረጋገጫ አልተሳካም። በኋላ ላይ እንደገና ይሞክሩ።",expired:"ማረጋገጫው ጊዜው አልፏል። እንደገና ይሞክሩ።",footer:'በ ALTCHA የተጠበቀ',getAudioChallenge:"የድምጽ ፈተና ያግኙ",label:"እኔ ሮቦት አይደለሁም",loading:"በመጫን ላይ...",reload:"እንደገና ጫን",verify:"አረጋግጥ",verificationRequired:"ማረጋገጫ ያስፈልጋል!",verified:"ተረጋግጧል",verifying:"በማረጋገጥ ላይ...",waitAlert:"በማረጋገጥ ላይ... እባክዎ ይጠብቁ።",cancel:"ይቅር",enterCodeFromImage:"ለመቀጠል፣ እባክዎን ከታች ካለው ምስል ኮዱን ያስገቡ።"});globalThis.$altcha.i18n.set("sw",{ariaLinkLabel:"Altcha (tovuti rasmi)",enterCode:"Weka nambari",enterCodeAria:"Weka nambari unayosikia. Bonyeza Space kucheza sauti.",error:"Uthibitishaji umeshindwa. Jaribu tena baadaye.",expired:"Uthibitishaji umeisha. Jaribu tena.",footer:'Imealindwa na ALTCHA',getAudioChallenge:"Pata changamoto ya sauti",label:"Mimi sio roboti",loading:"Inapakia...",reload:"Pakia tena",verify:"Thibitisha",verificationRequired:"Uthibitishaji unahitajika!",verified:"Imethibitishwa",verifying:"Inathibitisha...",waitAlert:"Inathibitisha... tafadhali subiri.",cancel:"Ghairi",enterCodeFromImage:"Ili kuendelea, tafadhali weka nambari kutoka kwa picha hapa chini."});globalThis.$altcha.i18n.set("yo",{ariaLinkLabel:"Altcha (oju opo wẹẹbu osise)",enterCode:"Tẹ koodu sii",enterCodeAria:"Tẹ koodu ti o ngbọ sii. Tẹ Space lati ṣe ohun orin.",error:"Ìdájọ́kòwò kò ṣẹ́ṣe. Gbiyanju lẹẹkansi ni ọjọ́ iwájú.",expired:"Ìdájọ́kòwò ti pari. Gbiyanju lẹẹkansi.",footer:'Ti wa ni ààbò nipasẹ ALTCHA',getAudioChallenge:"Gba ìjàdú ohùn",label:"Emi kii ṣe ẹrọ",loading:"Ó ń gbé sílẹ̀...",reload:"Tún gbé wọlé",verify:"Ṣàdájọ́",verificationRequired:"Ìdájọ́kòwò ni a nílò!",verified:"A ti dájọ́",verifying:"Ó ń ṣàdájọ́...",waitAlert:"Ó ń ṣàdájọ́... ẹ jọ̀ọ́ ẹ duro.",cancel:"Fagbọsẹ",enterCodeFromImage:"Lati tẹsiwaju, jọwọ tẹ koodu ti o wa lati aworan isalẹ sii."});globalThis.$altcha.i18n.set("bn",{ariaLinkLabel:"Altcha (অফিসিয়াল ওয়েবসাইট)",enterCode:"কোড লিখুন",enterCodeAria:"আপনি যে কোড শুনতে পান তা লিখুন। অডিও প্লে করতে স্পেস বাটন টিপুন।",error:"যাচাইকরণ ব্যর্থ হয়েছে। পরে আবার চেষ্টা করুন।",expired:"যাচাইকরণ সময়সীমা শেষ হয়েছে। আবার চেষ্টা করুন।",footer:'দ্বারা সুরক্ষিত ALTCHA',getAudioChallenge:"অডিও চ্যালেঞ্জ নিন",label:"আমি রোবট নই",loading:"লোড হচ্ছে...",reload:"পুনরায় লোড করুন",verify:"যাচাই করুন",verificationRequired:"যাচাই প্রয়োজন!",verified:"যাচাই করা হয়েছে",verifying:"যাচাই করা হচ্ছে...",waitAlert:"যাচাই করা হচ্ছে... দয়া করে অপেক্ষা করুন।",cancel:"বাতিল করুন",enterCodeFromImage:"এগিয়ে যেতে, অনুগ্রহ করে নীচের চিত্র থেকে কোডটি প্রবেশ করান।"});globalThis.$altcha.i18n.set("he",{ariaLinkLabel:"Altcha (אתר רשמי)",enterCode:"הזן קוד",enterCodeAria:"הזן את הקוד שאתה שומע. לחץ על רווח להפעלת השמע.",error:"האימות נכשל. נסה שוב מאוחר יותר.",expired:"תוקף האימות פג. נסה שוב.",footer:'מוגן על ידי ALTCHA',getAudioChallenge:"קבל אתגר שמע",label:"אני לא רובוט",loading:"טוען...",reload:"טען מחדש",verify:"אמת",verificationRequired:"נדרש אימות!",verified:"אומת",verifying:"מאמת...",waitAlert:"מבצע אימות... אנא המתן.",cancel:"ביטול",enterCodeFromImage:"כדי להמשיך, אנא הזן את הקוד מהתמונה למטה."});globalThis.$altcha.i18n.set("hi",{ariaLinkLabel:"Altcha (आधिकारिक वेबसाइट)",enterCode:"कोड दर्ज करेंं",enterCodeAria:"आप जो कोड सुनते हैं उसे दर्ज करें। ऑडियो चलाने के लिए स्पेस दबाएं।",error:"सत्यापन विफल। कृपया बाद में फिर से प्रयास करें।",expired:"सत्यापन समाप्त हो गया है। कृपया पुनः प्रयास करें।",footer:'द्वारा संरक्षित ALTCHA',getAudioChallenge:"ऑडियो चुनौती प्राप्त करें",label:"मैं रोबोट नहीं हूँ",loading:"लोड हो रहा है...",reload:"पुनः लोड करें",verify:"सत्यापित करें",verificationRequired:"सत्यापन आवश्यक है!",verified:"सत्यापित",verifying:"सत्यापित कर रहे हैं...",waitAlert:"सत्यापित किया जा रहा है... कृपया प्रतीक्षा करें।",cancel:"रद्द करें",enterCodeFromImage:"आगे बढ़ने के लिए, कृपया नीचे दी गई छवि से कोड दर्ज करें।"});globalThis.$altcha.i18n.set("id",{ariaLinkLabel:"Altcha (situs web resmi)",enterCode:"Masukkan kode",enterCodeAria:"Masukkan kode yang Anda dengar. Tekan Spasi untuk memutar audio.",error:"Verifikasi gagal. Coba lagi nanti.",expired:"Verifikasi telah kedaluwarsa. Coba lagi.",footer:'Dilindungi oleh ALTCHA',getAudioChallenge:"Dapatkan tantangan audio",label:"Saya bukan robot",loading:"Memuat...",reload:"Muat ulang",verify:"Verifikasi",verificationRequired:"Verifikasi diperlukan!",verified:"Terverifikasi",verifying:"Memverifikasi...",waitAlert:"Memverifikasi... harap tunggu.",cancel:"Batal",enterCodeFromImage:"Untuk melanjutkan, silakan masukkan kode dari gambar di bawah ini."});globalThis.$altcha.i18n.set("ja",{ariaLinkLabel:"Altcha (公式ウェブサイト)",enterCode:"コードを入力",enterCodeAria:"聞こえるコードを入力してください。スペースキーを押して音声を再生します。",error:"認証に失敗しました。後でもう一度試してください。",expired:"認証が期限切れです。再試行してください。",footer:'保護されています ALTCHA',getAudioChallenge:"音声チャレンジを取得",label:"私はロボットではありません",loading:"読み込み中...",reload:"再読み込み",verify:"確認",verificationRequired:"認証が必要です!",verified:"確認済み",verifying:"確認中...",waitAlert:"確認中...少々お待ちください。",cancel:"キャンセル",enterCodeFromImage:"続行するには、以下の画像からコードを入力してください。"});globalThis.$altcha.i18n.set("ko",{ariaLinkLabel:"Altcha (공식 웹사이트)",enterCode:"코드 입력",enterCodeAria:"들리는 코드를 입력하세요. 스페이스 바를 눌러 오디오를 재생합니다.",error:"인증 실패. 나중에 다시 시도해주세요.",expired:"인증이 만료되었습니다. 다시 시도해주세요.",footer:'ALTCHA에서 보호됨 ALTCHA',getAudioChallenge:"오디오 챌린지 받기",label:"저는 로봇이 아닙니다",loading:"로딩 중...",reload:"새로 고침",verify:"확인",verificationRequired:"인증이 필요합니다!",verified:"확인됨",verifying:"확인 중...",waitAlert:"확인 중... 잠시만 기다려주세요.",cancel:"취소",enterCodeFromImage:"계속 진행하려면 아래 이미지에서 코드를 입력하세요."});globalThis.$altcha.i18n.set("kk",{ariaLinkLabel:"Altcha (ресми веб-сайт)",enterCode:"Кодты енгізіңіз",enterCodeAria:"Естіген кодыңызды енгізіңіз. Аудионы ойнату үшін Бос орынды басыңыз.",error:"Тексеру сәтсіз аяқталды. Кейінірек қайталаңыз.",expired:"Тексеру мерзімі аяқталды. Қайталаңыз.",footer:'ALTCHA қорғайды',getAudioChallenge:"Аудио сынақ алу",label:"Мен робот емеспін",loading:"Жүктелуде...",reload:"Қайта жүктеу",verify:"Тексеру",verificationRequired:"Тексеру талап етіледі!",verified:"Тексерілді",verifying:"Тексеруде...",waitAlert:"Тексерілуде... күте тұрыңыз.",cancel:"Болдыру",enterCodeFromImage:"Жалғастыру үшін төмендегі суреттегі кодты енгізіңіз."});globalThis.$altcha.i18n.set("mr",{ariaLinkLabel:"Altcha (अधिकृत संकेतस्थळ)",enterCode:"कोड टाकाा",enterCodeAria:"तुम्ही ऐकत असलेला कोड टाका. ऑडिओ प्ले करण्यासाठी स्पेस दाबा.",error:"पुष्टीकरण अयशस्वी झाले. कृपया नंतर पुन्हा प्रयत्न करा.",expired:"पुष्टीकरण कालबाह्य झाले आहे. कृपया पुन्हा प्रयत्न करा.",footer:'द्वारे संरक्षित ALTCHA',getAudioChallenge:"ऑडिओ चॅलेंज मिळवा",label:"मी रोबोट नाही",loading:"लोड होत आहे...",reload:"पुन्हा लोड करा",verify:"पुष्टीकरण करा",verificationRequired:"पडताळणी आवश्यक आहे!",verified:"पुष्टीकरण झाले",verifying:"पुष्टीकरण करत आहे...",waitAlert:"पुष्टीकरण करत आहे... कृपया थोडा वेळ थांबा.",cancel:"रद्द करा",enterCodeFromImage:"पुढे जाण्यासाठी, कृपया खालील प्रतिमेतील कोड प्रविष्ट करा."});globalThis.$altcha.i18n.set("ta",{ariaLinkLabel:"Altcha (அதிகாரப்பூர்வ வலைத்தளம்)",enterCode:"குறியீட்டை உள்ளிடவும்",enterCodeAria:"நீங்கள் கேட்கும் குறியீட்டை உள்ளிடவும். ஆடியோவை இயக்க Space ஐ அழுத்தவும்.",error:"சரிபார்ப்பு தோல்வி. பிறகு மீண்டும் முயற்சிக்கவும்.",expired:"சரிபார்ப்பு காலாவதியானது. மீண்டும் முயற்சிக்கவும்.",footer:'மூலமாக பாதுகாக்கப்பட்டவை ALTCHA',getAudioChallenge:"ஒலி சவாலை பெறவும்",label:"நான் ரோபோடான அல்ல",loading:"செயலாக்கம்...",reload:"மீண்டும் புதுப்பிக்கவும்",verify:"சரிபார்க்கவும்",verificationRequired:"சரிபார்ப்பு தேவை!",verified:"சரிபார்க்கப்பட்டது",verifying:"சரிபார்க்கப்படுகிறது...",waitAlert:"சரிபார்க்கப்படுகிறது... தயவுசெய்து காத்திருக்கவும்.",cancel:"ரத்துசெய்",enterCodeFromImage:"தொடர, கீழே உள்ள படத்திலிருந்து குறியீட்டை உள்ளிடவும்."});globalThis.$altcha.i18n.set("te",{ariaLinkLabel:"Altcha (అధికారిక వెబ్‌సైట్)",enterCode:"కోడ్‌ని నమోదు చేయండి",enterCodeAria:"మీరు విన్న కోడ్‌ని నమోదు చేయండి. ఆడియో ప్లే చేయడానికి స్పేస్‌ను నొక్కండి.",error:"చెకింగ్ విఫలమైంది. దయచేసి మరల ప్రయత్నించండి.",expired:"చెకింగ్ కాలం ముగిసింది. దయచేసి మరల ప్రయత్నించండి.",footer:'ఈ సైట్ రక్షించబడింది ALTCHA',getAudioChallenge:"ఆడియో ఛాలెంజ్ పొందండి",label:"నేను రోబోట్ కాదు",loading:"లోడ్ అవుతోంది...",reload:"మళ్ళీ లోడ్ చేయండి",verify:"ధ్రువీకరించు",verificationRequired:"ధృవీకరణ అవసరం!",verified:"ధ్రువీకరించబడింది",verifying:"ధ్రువీకరణ జరుగుతుంది...",waitAlert:"ధ్రువీకరణ జరుగుతుంది... దయచేసి వేచి ఉండండి.",cancel:"రద్దు చేయండి",enterCodeFromImage:"కొనసాగడానికి, దయచేసి క్రింది చిత్రంలో ఉన్న కోడ్‌ను నమోదు చేయండి."});globalThis.$altcha.i18n.set("th",{ariaLinkLabel:"Altcha (เว็บไซต์ทางการ)",enterCode:"ป้อนรหัส",enterCodeAria:"ป้อนรหัสที่คุณได้ยิน กด Space เพื่อเล่นเสียง",error:"การตรวจสอบล้มเหลว กรุณาลองอีกครั้งภายหลัง",expired:"การตรวจสอบหมดอายุ กรุณาลองใหม่",footer:'ป้องกันโดย ALTCHA',getAudioChallenge:"รับการท้าทายเสียง",label:"ฉันไม่ใช่บอท",loading:"กำลังโหลด...",reload:"โหลดใหม่",verify:"ตรวจสอบ",verificationRequired:"จำเป็นต้องตรวจสอบ!",verified:"ตรวจสอบแล้ว",verifying:"กำลังตรวจสอบ...",waitAlert:"กำลังตรวจสอบ... กรุณารอ",cancel:"ยกเลิก",enterCodeFromImage:"เพื่อดำเนินการต่อ โปรดป้อนรหัสจากรูปภาพด้านล่าง"});globalThis.$altcha.i18n.set("ur",{ariaLinkLabel:"Altcha (سرکاری ویب سائٹ)",enterCode:"کوڈ درج کریں",enterCodeAria:"جو کوڈ آپ سنتے ہیں وہ درج کریں۔ آڈیو چلانے کے لیے اسپیس دبائیں۔",error:"توثیق ناکام ہو گئی۔ براہ کرم بعد میں دوبارہ کوشش کریں۔",expired:"توثیق کی مدت ختم ہو گئی ہے۔ براہ کرم دوبارہ کوشش کریں۔",footer:'کے ذریعے محفوظ ALTCHA',getAudioChallenge:"آڈیو چیلنج حاصل کریں",label:"میں روبوٹ نہیں ہوں",loading:"لوڈ ہو رہا ہے...",reload:"دوبارہ لوڈ کریں",verify:"توثیق کریں",verificationRequired:"تصدیق ضروری ہے!",verified:"توثیق شدہ",verifying:"توثیق ہو رہی ہے...",waitAlert:"توثیق ہو رہی ہے... براہ کرم انتظار کریں۔",cancel:"منسوخ کریں",enterCodeFromImage:"اگلے مرحلے پر جانے کے لیے، براہ کرم نیچے دی گئی تصویر سے کوڈ درج کریں۔"});globalThis.$altcha.i18n.set("uz",{ariaLinkLabel:"Altcha (rasmiy veb-sayt)",enterCode:"Kodni kiriting",enterCodeAria:"Eshitgan kodingizni kiriting. Audioni ijro etish uchun Bo'sh joy tugmasini bosing.",error:"Tekshiruv muvaffaqiyatsiz tugadi. Keyinroq qayta urinib ko'ring.",expired:"Tekshiruv muddati tugadi. Qayta urinib ko'ring.",footer:'ALTCHA tomonidan himoyalangan',getAudioChallenge:"Audio sinovni olish",label:"Men robot emasman",loading:"Yuklanmoqda...",reload:"Qayta yuklash",verify:"Tekshirish",verificationRequired:"Tekshiruv talab qilinadi!",verified:"Tekshirildi",verifying:"Tekshirilmoqda...",waitAlert:"Tekshirilmoqda... iltimos kuting.",cancel:"Bekor qilish",enterCodeFromImage:"Davom etish uchun, iltimos, quyidagi rasmda ko'rsatilgan kodni kiriting."});globalThis.$altcha.i18n.set("vi",{ariaLinkLabel:"Altcha (trang web chính thức)",enterCode:"Nhập mã",enterCodeAria:"Nhập mã bạn nghe được. Nhấn Phím cách để phát âm thanh.",error:"Xác minh thất bại. Vui lòng thử lại sau.",expired:"Xác minh đã hết hạn. Vui lòng thử lại.",footer:'Được bảo vệ bởi ALTCHA',getAudioChallenge:"Nhận thử thách âm thanh",label:"Tôi không phải là robot",loading:"Đang tải...",reload:"Tải lại",verify:"Xác minh",verificationRequired:"Yêu cầu xác minh!",verified:"Đã xác minh",verifying:"Đang xác minh...",waitAlert:"Đang xác minh... vui lòng chờ.",cancel:"Hủy bỏ",enterCodeFromImage:"Để tiếp tục, vui lòng nhập mã từ hình ảnh bên dưới."});globalThis.$altcha.i18n.set("zh-cn",{ariaLinkLabel:"Altcha (官方网站)",enterCode:"输入代码",enterCodeAria:"输入您听到的代码。按空格键播放音频。",error:"验证失败。稍后再试。",expired:"验证已过期。请重试。",footer:'由 ALTCHA 保护',getAudioChallenge:"获取音频挑战",label:"我不是机器人",loading:"加载中...",reload:"重新加载",verify:"验证",verificationRequired:"需要验证!",verified:"已验证",verifying:"正在验证...",waitAlert:"正在验证... 请稍等。",cancel:"取消",enterCodeFromImage:"为继续操作,请输入下图中显示的验证码。"});globalThis.$altcha.i18n.set("zh-hk",{ariaLinkLabel:"Altcha (官方網站)",cancel:"取消",enterCode:"輸入代碼",enterCodeAria:"輸入你聽到嘅代碼。按空格鍵播放音訊。",enterCodeFromImage:"要繼續,請輸入下面圖片入面嘅代碼。",error:"驗證失敗。請稍後再試。",expired:"驗證已過期。請再試一次。",footer:'由 ALTCHA 提供保護',getAudioChallenge:"取得音訊驗證",label:"我唔係機械人",loading:"載入中...",reload:"重新載入",verify:"驗證",verificationRequired:"需要驗證!",verified:"已驗證",verifying:"驗證中...",waitAlert:"驗證中... 請稍候。"});globalThis.$altcha.i18n.set("zh-tw",{ariaLinkLabel:"Altcha (官方網站)",enterCode:"輸入代碼",enterCodeAria:"輸入您聽到的代碼。按空格鍵播放音頻。",error:"驗證失敗。稍後再試。",expired:"驗證已過期。請重試。",footer:'由 ALTCHA 保護',getAudioChallenge:"獲取音頻挑戰",label:"我不是機器人",loading:"載入中...",reload:"重新載入",verify:"驗證",verificationRequired:"需要驗證!",verified:"已驗證",verifying:"正在驗證...",waitAlert:"正在驗證... 請稍等。",cancel:"取消",enterCodeFromImage:"若要繼續,請輸入下方的圖片驗證碼。"})}); diff --git a/frontend/node_modules/altcha/dist/main/altcha.js b/frontend/node_modules/altcha/dist/main/altcha.js new file mode 100644 index 0000000..aecb4a9 --- /dev/null +++ b/frontend/node_modules/altcha/dist/main/altcha.js @@ -0,0 +1,7764 @@ +const DEV = false; +var is_array = Array.isArray; +var index_of = Array.prototype.indexOf; +var includes = Array.prototype.includes; +var array_from = Array.from; +var object_keys = Object.keys; +var define_property = Object.defineProperty; +var get_descriptor = Object.getOwnPropertyDescriptor; +var get_descriptors = Object.getOwnPropertyDescriptors; +var object_prototype = Object.prototype; +var array_prototype = Array.prototype; +var get_prototype_of = Object.getPrototypeOf; +var is_extensible = Object.isExtensible; +const noop = () => { +}; +function run_all(arr) { + for (var i = 0; i < arr.length; i++) { + arr[i](); + } +} +function deferred() { + var resolve; + var reject; + var promise = new Promise((res, rej) => { + resolve = res; + reject = rej; + }); + return { promise, resolve, reject }; +} +const DERIVED = 1 << 1; +const EFFECT = 1 << 2; +const RENDER_EFFECT = 1 << 3; +const MANAGED_EFFECT = 1 << 24; +const BLOCK_EFFECT = 1 << 4; +const BRANCH_EFFECT = 1 << 5; +const ROOT_EFFECT = 1 << 6; +const BOUNDARY_EFFECT = 1 << 7; +const CONNECTED = 1 << 9; +const CLEAN = 1 << 10; +const DIRTY = 1 << 11; +const MAYBE_DIRTY = 1 << 12; +const INERT = 1 << 13; +const DESTROYED = 1 << 14; +const REACTION_RAN = 1 << 15; +const DESTROYING = 1 << 25; +const EFFECT_TRANSPARENT = 1 << 16; +const EAGER_EFFECT = 1 << 17; +const HEAD_EFFECT = 1 << 18; +const EFFECT_PRESERVED = 1 << 19; +const USER_EFFECT = 1 << 20; +const WAS_MARKED = 1 << 16; +const REACTION_IS_UPDATING = 1 << 21; +const ASYNC = 1 << 22; +const ERROR_VALUE = 1 << 23; +const STATE_SYMBOL = /* @__PURE__ */ Symbol("$state"); +const LEGACY_PROPS = /* @__PURE__ */ Symbol("legacy props"); +const LOADING_ATTR_SYMBOL = /* @__PURE__ */ Symbol(""); +const ATTRIBUTES_CACHE = /* @__PURE__ */ Symbol("attributes"); +const CLASS_CACHE = /* @__PURE__ */ Symbol("class"); +const STYLE_CACHE = /* @__PURE__ */ Symbol("style"); +const TEXT_CACHE = /* @__PURE__ */ Symbol("text"); +const FORM_RESET_HANDLER = /* @__PURE__ */ Symbol("form reset"); +const STALE_REACTION = new class StaleReactionError extends Error { + name = "StaleReactionError"; + message = "The reaction that called `getAbortSignal()` was re-run or destroyed"; +}(); +const IS_XHTML = ( + // We gotta write it like this because after downleveling the pure comment may end up in the wrong location + !!globalThis.document?.contentType && /* @__PURE__ */ globalThis.document.contentType.includes("xml") +); +const TEXT_NODE = 3; +const COMMENT_NODE = 8; +function equals(value) { + return value === this.v; +} +function safe_not_equal(a, b) { + return a != a ? b == b : a !== b || a !== null && typeof a === "object" || typeof a === "function"; +} +function safe_equals(value) { + return !safe_not_equal(value, this.v); +} +function lifecycle_outside_component(name) { + { + throw new Error(`https://svelte.dev/e/lifecycle_outside_component`); + } +} +function async_derived_orphan() { + { + throw new Error(`https://svelte.dev/e/async_derived_orphan`); + } +} +function effect_in_teardown(rune) { + { + throw new Error(`https://svelte.dev/e/effect_in_teardown`); + } +} +function effect_in_unowned_derived() { + { + throw new Error(`https://svelte.dev/e/effect_in_unowned_derived`); + } +} +function effect_orphan(rune) { + { + throw new Error(`https://svelte.dev/e/effect_orphan`); + } +} +function effect_update_depth_exceeded() { + { + throw new Error(`https://svelte.dev/e/effect_update_depth_exceeded`); + } +} +function hydration_failed() { + { + throw new Error(`https://svelte.dev/e/hydration_failed`); + } +} +function state_descriptors_fixed() { + { + throw new Error(`https://svelte.dev/e/state_descriptors_fixed`); + } +} +function state_prototype_fixed() { + { + throw new Error(`https://svelte.dev/e/state_prototype_fixed`); + } +} +function state_unsafe_mutation() { + { + throw new Error(`https://svelte.dev/e/state_unsafe_mutation`); + } +} +function svelte_boundary_reset_onerror() { + { + throw new Error(`https://svelte.dev/e/svelte_boundary_reset_onerror`); + } +} +let tracing_mode_flag = false; +const TEMPLATE_FRAGMENT = 1; +const TEMPLATE_USE_IMPORT_NODE = 1 << 1; +const HYDRATION_START = "["; +const HYDRATION_START_ELSE = "[!"; +const HYDRATION_START_FAILED = "[?"; +const HYDRATION_END = "]"; +const HYDRATION_ERROR = {}; +const UNINITIALIZED = /* @__PURE__ */ Symbol("uninitialized"); +const NAMESPACE_HTML = "http://www.w3.org/1999/xhtml"; +const NAMESPACE_SVG = "http://www.w3.org/2000/svg"; +const NAMESPACE_MATHML = "http://www.w3.org/1998/Math/MathML"; +const ATTACHMENT_KEY = "@attach"; +let component_context = null; +function set_component_context(context) { + component_context = context; +} +function push(props, runes = false, fn) { + component_context = { + p: component_context, + i: false, + c: null, + e: null, + s: props, + x: null, + r: ( + /** @type {Effect} */ + active_effect + ), + l: null + }; +} +function pop(component2) { + var context = ( + /** @type {ComponentContext} */ + component_context + ); + var effects = context.e; + if (effects !== null) { + context.e = null; + for (var fn of effects) { + create_user_effect(fn); + } + } + if (component2 !== void 0) { + context.x = component2; + } + context.i = true; + component_context = context.p; + return component2 ?? /** @type {T} */ + {}; +} +function is_runes() { + return true; +} +let micro_tasks = []; +function run_micro_tasks() { + var tasks = micro_tasks; + micro_tasks = []; + run_all(tasks); +} +function queue_micro_task(fn) { + if (micro_tasks.length === 0 && !is_flushing_sync) { + var tasks = micro_tasks; + queueMicrotask(() => { + if (tasks === micro_tasks) run_micro_tasks(); + }); + } + micro_tasks.push(fn); +} +function flush_tasks() { + while (micro_tasks.length > 0) { + run_micro_tasks(); + } +} +function derived_inert() { + { + console.warn(`https://svelte.dev/e/derived_inert`); + } +} +function hydration_mismatch(location2) { + { + console.warn(`https://svelte.dev/e/hydration_mismatch`); + } +} +function select_multiple_invalid_value() { + { + console.warn(`https://svelte.dev/e/select_multiple_invalid_value`); + } +} +function svelte_boundary_reset_noop() { + { + console.warn(`https://svelte.dev/e/svelte_boundary_reset_noop`); + } +} +let hydrating = false; +function set_hydrating(value) { + hydrating = value; +} +let hydrate_node; +function set_hydrate_node(node) { + if (node === null) { + hydration_mismatch(); + throw HYDRATION_ERROR; + } + return hydrate_node = node; +} +function hydrate_next() { + return set_hydrate_node(/* @__PURE__ */ get_next_sibling(hydrate_node)); +} +function reset(node) { + if (!hydrating) return; + if (/* @__PURE__ */ get_next_sibling(hydrate_node) !== null) { + hydration_mismatch(); + throw HYDRATION_ERROR; + } + hydrate_node = node; +} +function next(count = 1) { + if (hydrating) { + var i = count; + var node = hydrate_node; + while (i--) { + node = /** @type {TemplateNode} */ + /* @__PURE__ */ get_next_sibling(node); + } + hydrate_node = node; + } +} +function skip_nodes(remove = true) { + var depth = 0; + var node = hydrate_node; + while (true) { + if (node.nodeType === COMMENT_NODE) { + var data = ( + /** @type {Comment} */ + node.data + ); + if (data === HYDRATION_END) { + if (depth === 0) return node; + depth -= 1; + } else if (data === HYDRATION_START || data === HYDRATION_START_ELSE || // "[1", "[2", etc. for if blocks + data[0] === "[" && !isNaN(Number(data.slice(1)))) { + depth += 1; + } + } + var next2 = ( + /** @type {TemplateNode} */ + /* @__PURE__ */ get_next_sibling(node) + ); + if (remove) node.remove(); + node = next2; + } +} +function read_hydration_instruction(node) { + if (!node || node.nodeType !== COMMENT_NODE) { + hydration_mismatch(); + throw HYDRATION_ERROR; + } + return ( + /** @type {Comment} */ + node.data + ); +} +function proxy(value) { + if (typeof value !== "object" || value === null || STATE_SYMBOL in value) { + return value; + } + const prototype = get_prototype_of(value); + if (prototype !== object_prototype && prototype !== array_prototype) { + return value; + } + var sources = /* @__PURE__ */ new Map(); + var is_proxied_array = is_array(value); + var version = /* @__PURE__ */ state(0); + var parent_version = update_version; + var with_parent = (fn) => { + if (update_version === parent_version) { + return fn(); + } + var reaction = active_reaction; + var version2 = update_version; + set_active_reaction(null); + set_update_version(parent_version); + var result = fn(); + set_active_reaction(reaction); + set_update_version(version2); + return result; + }; + if (is_proxied_array) { + sources.set("length", /* @__PURE__ */ state( + /** @type {any[]} */ + value.length + )); + } + return new Proxy( + /** @type {any} */ + value, + { + defineProperty(_, prop2, descriptor) { + if (!("value" in descriptor) || descriptor.configurable === false || descriptor.enumerable === false || descriptor.writable === false) { + state_descriptors_fixed(); + } + var s = sources.get(prop2); + if (s === void 0) { + with_parent(() => { + var s2 = /* @__PURE__ */ state(descriptor.value); + sources.set(prop2, s2); + return s2; + }); + } else { + set(s, descriptor.value, true); + } + return true; + }, + deleteProperty(target, prop2) { + var s = sources.get(prop2); + if (s === void 0) { + if (prop2 in target) { + const s2 = with_parent(() => /* @__PURE__ */ state(UNINITIALIZED)); + sources.set(prop2, s2); + increment(version); + } + } else { + set(s, UNINITIALIZED); + increment(version); + } + return true; + }, + get(target, prop2, receiver) { + if (prop2 === STATE_SYMBOL) { + return value; + } + var s = sources.get(prop2); + var exists = prop2 in target; + if (s === void 0 && (!exists || get_descriptor(target, prop2)?.writable)) { + s = with_parent(() => { + var p = proxy(exists ? target[prop2] : UNINITIALIZED); + var s2 = /* @__PURE__ */ state(p); + return s2; + }); + sources.set(prop2, s); + } + if (s !== void 0) { + var v = get(s); + return v === UNINITIALIZED ? void 0 : v; + } + return Reflect.get(target, prop2, receiver); + }, + getOwnPropertyDescriptor(target, prop2) { + var descriptor = Reflect.getOwnPropertyDescriptor(target, prop2); + if (descriptor && "value" in descriptor) { + var s = sources.get(prop2); + if (s) descriptor.value = get(s); + } else if (descriptor === void 0) { + var source2 = sources.get(prop2); + var value2 = source2?.v; + if (source2 !== void 0 && value2 !== UNINITIALIZED) { + return { + enumerable: true, + configurable: true, + value: value2, + writable: true + }; + } + } + return descriptor; + }, + has(target, prop2) { + if (prop2 === STATE_SYMBOL) { + return true; + } + var s = sources.get(prop2); + var has = s !== void 0 && s.v !== UNINITIALIZED || Reflect.has(target, prop2); + if (s !== void 0 || active_effect !== null && (!has || get_descriptor(target, prop2)?.writable)) { + if (s === void 0) { + s = with_parent(() => { + var p = has ? proxy(target[prop2]) : UNINITIALIZED; + var s2 = /* @__PURE__ */ state(p); + return s2; + }); + sources.set(prop2, s); + } + var value2 = get(s); + if (value2 === UNINITIALIZED) { + return false; + } + } + return has; + }, + set(target, prop2, value2, receiver) { + var s = sources.get(prop2); + var has = prop2 in target; + if (is_proxied_array && prop2 === "length") { + for (var i = value2; i < /** @type {Source} */ + s.v; i += 1) { + var other_s = sources.get(i + ""); + if (other_s !== void 0) { + set(other_s, UNINITIALIZED); + } else if (i in target) { + other_s = with_parent(() => /* @__PURE__ */ state(UNINITIALIZED)); + sources.set(i + "", other_s); + } + } + } + if (s === void 0) { + if (!has || get_descriptor(target, prop2)?.writable) { + s = with_parent(() => /* @__PURE__ */ state(void 0)); + set(s, proxy(value2)); + sources.set(prop2, s); + } + } else { + has = s.v !== UNINITIALIZED; + var p = with_parent(() => proxy(value2)); + set(s, p); + } + var descriptor = Reflect.getOwnPropertyDescriptor(target, prop2); + if (descriptor?.set) { + descriptor.set.call(receiver, value2); + } + if (!has) { + if (is_proxied_array && typeof prop2 === "string") { + var ls = ( + /** @type {Source} */ + sources.get("length") + ); + var n = Number(prop2); + if (Number.isInteger(n) && n >= ls.v) { + set(ls, n + 1); + } + } + increment(version); + } + return true; + }, + ownKeys(target) { + get(version); + var own_keys = Reflect.ownKeys(target).filter((key3) => { + var source3 = sources.get(key3); + return source3 === void 0 || source3.v !== UNINITIALIZED; + }); + for (var [key2, source2] of sources) { + if (source2.v !== UNINITIALIZED && !(key2 in target)) { + own_keys.push(key2); + } + } + return own_keys; + }, + setPrototypeOf() { + state_prototype_fixed(); + } + } + ); +} +function get_proxied_value(value) { + try { + if (value !== null && typeof value === "object" && STATE_SYMBOL in value) { + return value[STATE_SYMBOL]; + } + } catch { + } + return value; +} +function is(a, b) { + return Object.is(get_proxied_value(a), get_proxied_value(b)); +} +var $window; +var $document; +var is_firefox; +var first_child_getter; +var next_sibling_getter; +function init_operations() { + if ($window !== void 0) { + return; + } + $window = window; + $document = document; + is_firefox = /Firefox/.test(navigator.userAgent); + var element_prototype = Element.prototype; + var node_prototype = Node.prototype; + var text_prototype = Text.prototype; + first_child_getter = get_descriptor(node_prototype, "firstChild").get; + next_sibling_getter = get_descriptor(node_prototype, "nextSibling").get; + if (is_extensible(element_prototype)) { + element_prototype[CLASS_CACHE] = void 0; + element_prototype[ATTRIBUTES_CACHE] = null; + element_prototype[STYLE_CACHE] = void 0; + element_prototype.__e = void 0; + } + if (is_extensible(text_prototype)) { + text_prototype[TEXT_CACHE] = void 0; + } +} +function create_text(value = "") { + return document.createTextNode(value); +} +// @__NO_SIDE_EFFECTS__ +function get_first_child(node) { + return ( + /** @type {TemplateNode | null} */ + first_child_getter.call(node) + ); +} +// @__NO_SIDE_EFFECTS__ +function get_next_sibling(node) { + return ( + /** @type {TemplateNode | null} */ + next_sibling_getter.call(node) + ); +} +function child(node, is_text) { + if (!hydrating) { + return /* @__PURE__ */ get_first_child(node); + } + var child2 = /* @__PURE__ */ get_first_child(hydrate_node); + if (child2 === null) { + child2 = hydrate_node.appendChild(create_text()); + } else if (is_text && child2.nodeType !== TEXT_NODE) { + var text2 = create_text(); + child2?.before(text2); + set_hydrate_node(text2); + return text2; + } + if (is_text) { + merge_text_nodes( + /** @type {Text} */ + child2 + ); + } + set_hydrate_node(child2); + return child2; +} +function first_child(node, is_text = false) { + if (!hydrating) { + var first = /* @__PURE__ */ get_first_child(node); + if (first instanceof Comment && first.data === "") return /* @__PURE__ */ get_next_sibling(first); + return first; + } + if (is_text) { + if (hydrate_node?.nodeType !== TEXT_NODE) { + var text2 = create_text(); + hydrate_node?.before(text2); + set_hydrate_node(text2); + return text2; + } + merge_text_nodes( + /** @type {Text} */ + hydrate_node + ); + } + return hydrate_node; +} +function sibling(node, count = 1, is_text = false) { + let next_sibling = hydrating ? hydrate_node : node; + var last_sibling; + while (count--) { + last_sibling = next_sibling; + next_sibling = /** @type {TemplateNode} */ + /* @__PURE__ */ get_next_sibling(next_sibling); + } + if (!hydrating) { + return next_sibling; + } + if (is_text) { + if (next_sibling?.nodeType !== TEXT_NODE) { + var text2 = create_text(); + if (next_sibling === null) { + last_sibling?.after(text2); + } else { + next_sibling.before(text2); + } + set_hydrate_node(text2); + return text2; + } + merge_text_nodes( + /** @type {Text} */ + next_sibling + ); + } + set_hydrate_node(next_sibling); + return next_sibling; +} +function clear_text_content(node) { + node.textContent = ""; +} +function should_defer_append() { + return false; +} +function create_element(tag, namespace, is2) { + let options = void 0; + return ( + /** @type {T extends keyof HTMLElementTagNameMap ? HTMLElementTagNameMap[T] : Element} */ + document.createElementNS(namespace ?? NAMESPACE_HTML, tag, options) + ); +} +function merge_text_nodes(text2) { + if ( + /** @type {string} */ + text2.nodeValue.length < 65536 + ) { + return; + } + let next2 = text2.nextSibling; + while (next2 !== null && next2.nodeType === TEXT_NODE) { + next2.remove(); + text2.nodeValue += /** @type {string} */ + next2.nodeValue; + next2 = text2.nextSibling; + } +} +function handle_error(error) { + var effect2 = active_effect; + if (effect2 === null) { + active_reaction.f |= ERROR_VALUE; + return error; + } + if ((effect2.f & REACTION_RAN) === 0 && (effect2.f & EFFECT) === 0) { + throw error; + } + invoke_error_boundary(error, effect2); +} +function invoke_error_boundary(error, effect2) { + while (effect2 !== null) { + if ((effect2.f & BOUNDARY_EFFECT) !== 0) { + if ((effect2.f & REACTION_RAN) === 0) { + throw error; + } + try { + effect2.b.error(error); + return; + } catch (e) { + error = e; + } + } + effect2 = effect2.parent; + } + throw error; +} +const STATUS_MASK = -7169; +function set_signal_status(signal, status) { + signal.f = signal.f & STATUS_MASK | status; +} +function update_derived_status(derived2) { + if ((derived2.f & CONNECTED) !== 0 || derived2.deps === null) { + set_signal_status(derived2, CLEAN); + } else { + set_signal_status(derived2, MAYBE_DIRTY); + } +} +function clear_marked(deps) { + if (deps === null) return; + for (const dep of deps) { + if ((dep.f & DERIVED) === 0 || (dep.f & WAS_MARKED) === 0) { + continue; + } + dep.f ^= WAS_MARKED; + clear_marked( + /** @type {Derived} */ + dep.deps + ); + } +} +function defer_effect(effect2, dirty_effects, maybe_dirty_effects) { + if ((effect2.f & DIRTY) !== 0) { + dirty_effects.add(effect2); + } else if ((effect2.f & MAYBE_DIRTY) !== 0) { + maybe_dirty_effects.add(effect2); + } + clear_marked(effect2.deps); + set_signal_status(effect2, CLEAN); +} +function subscribe_to_store(store2, run, invalidate) { + if (store2 == null) { + run(void 0); + return noop; + } + const unsub = untrack( + () => store2.subscribe( + run, + // @ts-expect-error + invalidate + ) + ); + return unsub.unsubscribe ? () => unsub.unsubscribe() : unsub; +} +const subscriber_queue = []; +function writable(value, start = noop) { + let stop = null; + const subscribers = /* @__PURE__ */ new Set(); + function set2(new_value) { + if (safe_not_equal(value, new_value)) { + value = new_value; + if (stop) { + const run_queue = !subscriber_queue.length; + for (const subscriber of subscribers) { + subscriber[1](); + subscriber_queue.push(subscriber, value); + } + if (run_queue) { + for (let i = 0; i < subscriber_queue.length; i += 2) { + subscriber_queue[i][0](subscriber_queue[i + 1]); + } + subscriber_queue.length = 0; + } + } + } + } + function update(fn) { + set2(fn( + /** @type {T} */ + value + )); + } + function subscribe(run, invalidate = noop) { + const subscriber = [run, invalidate]; + subscribers.add(subscriber); + if (subscribers.size === 1) { + stop = start(set2, update) || noop; + } + run( + /** @type {T} */ + value + ); + return () => { + subscribers.delete(subscriber); + if (subscribers.size === 0 && stop) { + stop(); + stop = null; + } + }; + } + return { set: set2, update, subscribe }; +} +function get$1(store2) { + let value; + subscribe_to_store(store2, (_) => value = _)(); + return value; +} +let IS_UNMOUNTED = /* @__PURE__ */ Symbol("unmounted"); +function store_get(store2, store_name, stores) { + const entry = stores[store_name] ??= { + store: null, + source: /* @__PURE__ */ mutable_source(void 0), + unsubscribe: noop + }; + if (entry.store !== store2 && !(IS_UNMOUNTED in stores)) { + entry.unsubscribe(); + entry.store = store2 ?? null; + if (store2 == null) { + entry.source.v = void 0; + entry.unsubscribe = noop; + } else { + var is_synchronous_callback = true; + entry.unsubscribe = subscribe_to_store(store2, (v) => { + if (is_synchronous_callback) { + entry.source.v = v; + } else { + set(entry.source, v); + } + }); + is_synchronous_callback = false; + } + } + if (store2 && IS_UNMOUNTED in stores) { + return get$1(store2); + } + return get(entry.source); +} +function setup_stores() { + const stores = {}; + function cleanup() { + teardown(() => { + for (var store_name in stores) { + const ref = stores[store_name]; + ref.unsubscribe(); + } + define_property(stores, IS_UNMOUNTED, { + enumerable: false, + value: true + }); + }); + } + return [stores, cleanup]; +} +let first_batch = null; +let last_batch = null; +let current_batch = null; +let previous_batch = null; +let batch_values = null; +let last_scheduled_effect = null; +let is_flushing_sync = false; +let is_processing = false; +let collected_effects = null; +let legacy_updates = null; +var flush_count = 0; +var source_stacks = /* @__PURE__ */ new Set(); +let uid = 1; +class Batch { + id = uid++; + /** True as soon as `#process` was called */ + #started = false; + linked = true; + /** @type {Batch | null} */ + #prev = null; + /** @type {Batch | null} */ + #next = null; + /** @type {Map>>} */ + async_deriveds = /* @__PURE__ */ new Map(); + /** + * The current values of any signals that are updated in this batch. + * Tuple format: [value, is_derived] (note: is_derived is false for deriveds, too, if they were overridden via assignment) + * They keys of this map are identical to `this.#previous` + * @type {Map} + */ + current = /* @__PURE__ */ new Map(); + /** + * The values of any signals (sources and deriveds) that are updated in this batch _before_ those updates took place. + * They keys of this map are identical to `this.#current` + * @type {Map} + */ + previous = /* @__PURE__ */ new Map(); + /** + * Async effects which this batch doesn't take into account anymore when calculating blockers, + * as it has a value for it already. + * @type {Set} + */ + unblocked = /* @__PURE__ */ new Set(); + /** + * When the batch is committed (and the DOM is updated), we need to remove old branches + * and append new ones by calling the functions added inside (if/each/key/etc) blocks + * @type {Set<(batch: Batch) => void>} + */ + #commit_callbacks = /* @__PURE__ */ new Set(); + /** + * If a fork is discarded, we need to destroy any effects that are no longer needed + * @type {Set<(batch: Batch) => void>} + */ + #discard_callbacks = /* @__PURE__ */ new Set(); + /** + * Callbacks that should run only when a fork is committed. + * @type {Set<(batch: Batch) => void>} + */ + #fork_commit_callbacks = /* @__PURE__ */ new Set(); + /** + * The number of async effects that are currently in flight + */ + #pending = 0; + /** + * Async effects that are currently in flight, _not_ inside a pending boundary + * @type {Map} + */ + #blocking_pending = /* @__PURE__ */ new Map(); + /** + * A deferred that resolves when the batch is committed, used with `settled()` + * TODO replace with Promise.withResolvers once supported widely enough + * @type {{ promise: Promise, resolve: (value?: any) => void, reject: (reason: unknown) => void } | null} + */ + #deferred = null; + /** + * The root effects that need to be flushed + * @type {Effect[]} + */ + #roots = []; + /** + * Effects created while this batch was active. + * @type {Effect[]} + */ + #new_effects = []; + /** + * Deferred effects (which run after async work has completed) that are DIRTY + * @type {Set} + */ + #dirty_effects = /* @__PURE__ */ new Set(); + /** + * Deferred effects that are MAYBE_DIRTY + * @type {Set} + */ + #maybe_dirty_effects = /* @__PURE__ */ new Set(); + /** + * A map of branches that still exist, but will be destroyed when this batch + * is committed — we skip over these during `process`. + * The value contains child effects that were dirty/maybe_dirty before being reset, + * so they can be rescheduled if the branch survives. + * @type {Map} + */ + #skipped_branches = /* @__PURE__ */ new Map(); + /** + * Inverse of #skipped_branches which we need to tell prior batches to unskip them when committing + * @type {Set} + */ + #unskipped_branches = /* @__PURE__ */ new Set(); + is_fork = false; + #decrement_queued = false; + #is_deferred() { + if (this.is_fork) return true; + for (const effect2 of this.#blocking_pending.keys()) { + var e = effect2; + var skipped = false; + while (e.parent !== null) { + if (this.#skipped_branches.has(e)) { + skipped = true; + break; + } + e = e.parent; + } + if (!skipped) { + return true; + } + } + return false; + } + /** + * Add an effect to the #skipped_branches map and reset its children + * @param {Effect} effect + */ + skip_effect(effect2) { + if (!this.#skipped_branches.has(effect2)) { + this.#skipped_branches.set(effect2, { d: [], m: [] }); + } + this.#unskipped_branches.delete(effect2); + } + /** + * Remove an effect from the #skipped_branches map and reschedule + * any tracked dirty/maybe_dirty child effects + * @param {Effect} effect + * @param {(e: Effect) => void} callback + */ + unskip_effect(effect2, callback = (e) => this.schedule(e)) { + var tracked = this.#skipped_branches.get(effect2); + if (tracked) { + this.#skipped_branches.delete(effect2); + for (var e of tracked.d) { + set_signal_status(e, DIRTY); + callback(e); + } + for (e of tracked.m) { + set_signal_status(e, MAYBE_DIRTY); + callback(e); + } + } + this.#unskipped_branches.add(effect2); + } + #process() { + this.#started = true; + if (flush_count++ > 1e3) { + this.#unlink(); + infinite_loop_guard(); + } + if (!this.#is_deferred()) { + for (const e of this.#dirty_effects) { + this.#maybe_dirty_effects.delete(e); + set_signal_status(e, DIRTY); + this.schedule(e); + } + for (const e of this.#maybe_dirty_effects) { + set_signal_status(e, MAYBE_DIRTY); + this.schedule(e); + } + } + const roots = this.#roots; + this.#roots = []; + this.apply(); + var effects = collected_effects = []; + var render_effects = []; + var updates = legacy_updates = []; + for (const root2 of roots) { + try { + this.#traverse(root2, effects, render_effects); + } catch (e) { + reset_all(root2); + throw e; + } + } + current_batch = null; + if (updates.length > 0) { + var batch = Batch.ensure(); + for (const e of updates) { + batch.schedule(e); + } + } + collected_effects = null; + legacy_updates = null; + if (this.#is_deferred()) { + this.#defer_effects(render_effects); + this.#defer_effects(effects); + for (const [e, t] of this.#skipped_branches) { + reset_branch(e, t); + } + if (updates.length > 0) { + /** @type {unknown} */ + current_batch.#process(); + } + return; + } + const earlier_batch = this.#find_earlier_batch(); + if (earlier_batch) { + earlier_batch.#merge(this); + return; + } + this.#dirty_effects.clear(); + this.#maybe_dirty_effects.clear(); + for (const fn of this.#commit_callbacks) fn(this); + this.#commit_callbacks.clear(); + previous_batch = this; + flush_queued_effects(render_effects); + flush_queued_effects(effects); + previous_batch = null; + this.#deferred?.resolve(); + var next_batch = ( + /** @type {Batch | null} */ + /** @type {unknown} */ + current_batch + ); + if (this.linked && this.#pending === 0) { + this.#unlink(); + } + if (this.#roots.length > 0) { + if (next_batch === null) { + next_batch = this; + this.#link(); + } + const batch2 = next_batch; + batch2.#roots.push(...this.#roots.filter((r2) => !batch2.#roots.includes(r2))); + } + if (next_batch !== null) { + next_batch.#process(); + } + } + /** + * Traverse the effect tree, executing effects or stashing + * them for later execution as appropriate + * @param {Effect} root + * @param {Effect[]} effects + * @param {Effect[]} render_effects + */ + #traverse(root2, effects, render_effects) { + root2.f ^= CLEAN; + var effect2 = root2.first; + while (effect2 !== null) { + var flags2 = effect2.f; + var is_branch = (flags2 & (BRANCH_EFFECT | ROOT_EFFECT)) !== 0; + var is_skippable_branch = is_branch && (flags2 & CLEAN) !== 0; + var skip = is_skippable_branch || (flags2 & INERT) !== 0 || this.#skipped_branches.has(effect2); + if (!skip && effect2.fn !== null) { + if (is_branch) { + effect2.f ^= CLEAN; + } else if ((flags2 & EFFECT) !== 0) { + effects.push(effect2); + } else if (is_dirty(effect2)) { + if ((flags2 & BLOCK_EFFECT) !== 0) this.#maybe_dirty_effects.add(effect2); + update_effect(effect2); + } + var child2 = effect2.first; + if (child2 !== null) { + effect2 = child2; + continue; + } + } + while (effect2 !== null) { + var next2 = effect2.next; + if (next2 !== null) { + effect2 = next2; + break; + } + effect2 = effect2.parent; + } + } + } + #find_earlier_batch() { + var batch = this.#prev; + while (batch !== null) { + if (!batch.is_fork) { + for (const [value, [, is_derived]] of this.current) { + if (batch.current.has(value) && !is_derived) { + return batch; + } + } + } + batch = batch.#prev; + } + return null; + } + /** + * @param {Batch} batch + */ + #merge(batch) { + for (const [source2, value] of batch.current) { + if (!this.previous.has(source2) && batch.previous.has(source2)) { + this.previous.set(source2, batch.previous.get(source2)); + } + this.current.set(source2, value); + } + for (const [effect2, deferred2] of batch.async_deriveds) { + const d = this.async_deriveds.get(effect2); + if (d) deferred2.promise.then(d.resolve); + } + const mark = (value) => { + var reactions = value.reactions; + if (reactions === null) return; + for (const reaction of reactions) { + var flags2 = reaction.f; + if ((flags2 & DERIVED) !== 0) { + mark( + /** @type {Derived} */ + reaction + ); + } else { + var effect2 = ( + /** @type {Effect} */ + reaction + ); + if (flags2 & (ASYNC | BLOCK_EFFECT) && !this.async_deriveds.has(effect2)) { + this.#maybe_dirty_effects.delete(effect2); + set_signal_status(effect2, DIRTY); + this.schedule(effect2); + } + } + } + }; + for (const source2 of this.current.keys()) { + mark(source2); + } + this.oncommit(() => batch.discard()); + batch.#unlink(); + current_batch = this; + this.#process(); + } + /** + * @param {Effect[]} effects + */ + #defer_effects(effects) { + for (var i = 0; i < effects.length; i += 1) { + defer_effect(effects[i], this.#dirty_effects, this.#maybe_dirty_effects); + } + } + /** + * Associate a change to a given source with the current + * batch, noting its previous and current values + * @param {Value} source + * @param {any} value + * @param {boolean} [is_derived] + */ + capture(source2, value, is_derived = false) { + if (source2.v !== UNINITIALIZED && !this.previous.has(source2)) { + this.previous.set(source2, source2.v); + } + if ((source2.f & ERROR_VALUE) === 0) { + this.current.set(source2, [value, is_derived]); + batch_values?.set(source2, value); + } + if (!this.is_fork) { + source2.v = value; + } + } + activate() { + current_batch = this; + } + deactivate() { + current_batch = null; + batch_values = null; + } + flush() { + try { + if (DEV) ; + is_processing = true; + current_batch = this; + this.#process(); + } finally { + flush_count = 0; + last_scheduled_effect = null; + collected_effects = null; + legacy_updates = null; + is_processing = false; + current_batch = null; + batch_values = null; + old_values.clear(); + } + } + discard() { + for (const fn of this.#discard_callbacks) fn(this); + this.#discard_callbacks.clear(); + this.#fork_commit_callbacks.clear(); + this.#unlink(); + } + /** + * @param {Effect} effect + */ + register_created_effect(effect2) { + this.#new_effects.push(effect2); + } + #commit() { + this.#unlink(); + for (let batch = first_batch; batch !== null; batch = batch.#next) { + var is_earlier = batch.id < this.id; + var sources = []; + for (const [source3, [value, is_derived]] of this.current) { + if (batch.current.has(source3)) { + var batch_value = ( + /** @type {[any, boolean]} */ + batch.current.get(source3)[0] + ); + if (is_earlier && value !== batch_value) { + batch.current.set(source3, [value, is_derived]); + } else { + continue; + } + } + sources.push(source3); + } + if (is_earlier) { + for (const [effect2, deferred2] of this.async_deriveds) { + const d = batch.async_deriveds.get(effect2); + if (d) deferred2.promise.then(d.resolve); + } + } + if (!batch.#started) continue; + var others = [...batch.current.keys()].filter((s) => !this.current.has(s)); + if (others.length === 0) { + if (is_earlier) { + batch.discard(); + } + } else if (sources.length > 0) { + if (is_earlier) { + for (const unskipped of this.#unskipped_branches) { + batch.unskip_effect(unskipped, (e) => { + if ((e.f & (BLOCK_EFFECT | ASYNC)) !== 0) { + batch.schedule(e); + } else { + batch.#defer_effects([e]); + } + }); + } + } + batch.activate(); + var marked = /* @__PURE__ */ new Set(); + var checked = /* @__PURE__ */ new Map(); + for (var source2 of sources) { + mark_effects(source2, others, marked, checked); + } + checked = /* @__PURE__ */ new Map(); + var current_unequal = [...batch.current.keys()].filter( + (c) => this.current.has(c) ? ( + /** @type {[any, boolean]} */ + this.current.get(c)[0] !== c.v + ) : true + ); + if (current_unequal.length > 0) { + for (const effect2 of this.#new_effects) { + if ((effect2.f & (DESTROYED | INERT | EAGER_EFFECT)) === 0 && depends_on(effect2, current_unequal, checked)) { + if ((effect2.f & (ASYNC | BLOCK_EFFECT)) !== 0) { + set_signal_status(effect2, DIRTY); + batch.schedule(effect2); + } else { + batch.#dirty_effects.add(effect2); + } + } + } + } + if (batch.#roots.length > 0) { + batch.apply(); + for (var root2 of batch.#roots) { + batch.#traverse(root2, [], []); + } + batch.#roots = []; + } + batch.deactivate(); + } + } + } + /** + * @param {boolean} blocking + * @param {Effect} effect + */ + increment(blocking, effect2) { + this.#pending += 1; + if (blocking) { + let blocking_pending_count = this.#blocking_pending.get(effect2) ?? 0; + this.#blocking_pending.set(effect2, blocking_pending_count + 1); + } + } + /** + * @param {boolean} blocking + * @param {Effect} effect + */ + decrement(blocking, effect2) { + this.#pending -= 1; + if (blocking) { + let blocking_pending_count = this.#blocking_pending.get(effect2) ?? 0; + if (blocking_pending_count === 1) { + this.#blocking_pending.delete(effect2); + } else { + this.#blocking_pending.set(effect2, blocking_pending_count - 1); + } + } + if (this.#decrement_queued) return; + this.#decrement_queued = true; + queue_micro_task(() => { + this.#decrement_queued = false; + if (this.linked) { + this.flush(); + } + }); + } + /** + * @param {Set} dirty_effects + * @param {Set} maybe_dirty_effects + */ + transfer_effects(dirty_effects, maybe_dirty_effects) { + for (const e of dirty_effects) { + this.#dirty_effects.add(e); + } + for (const e of maybe_dirty_effects) { + this.#maybe_dirty_effects.add(e); + } + dirty_effects.clear(); + maybe_dirty_effects.clear(); + } + /** @param {(batch: Batch) => void} fn */ + oncommit(fn) { + this.#commit_callbacks.add(fn); + } + /** @param {(batch: Batch) => void} fn */ + ondiscard(fn) { + this.#discard_callbacks.add(fn); + } + /** @param {(batch: Batch) => void} fn */ + on_fork_commit(fn) { + this.#fork_commit_callbacks.add(fn); + } + run_fork_commit_callbacks() { + for (const fn of this.#fork_commit_callbacks) fn(this); + this.#fork_commit_callbacks.clear(); + } + settled() { + return (this.#deferred ??= deferred()).promise; + } + static ensure() { + if (current_batch === null) { + const batch = current_batch = new Batch(); + batch.#link(); + if (!is_processing && !is_flushing_sync) { + queue_micro_task(() => { + if (!batch.#started) { + batch.flush(); + } + }); + } + } + return current_batch; + } + apply() { + { + batch_values = null; + return; + } + } + /** + * + * @param {Effect} effect + */ + schedule(effect2) { + last_scheduled_effect = effect2; + if (effect2.b?.is_pending && (effect2.f & (EFFECT | RENDER_EFFECT | MANAGED_EFFECT)) !== 0 && (effect2.f & REACTION_RAN) === 0) { + effect2.b.defer_effect(effect2); + return; + } + var e = effect2; + while (e.parent !== null) { + e = e.parent; + var flags2 = e.f; + if (collected_effects !== null && e === active_effect) { + if ((active_reaction === null || (active_reaction.f & DERIVED) === 0) && true) { + return; + } + } + if ((flags2 & (ROOT_EFFECT | BRANCH_EFFECT)) !== 0) { + if ((flags2 & CLEAN) === 0) { + return; + } + e.f ^= CLEAN; + } + } + this.#roots.push(e); + } + #link() { + if (last_batch === null) { + first_batch = last_batch = this; + } else { + last_batch.#next = this; + this.#prev = last_batch; + } + last_batch = this; + } + #unlink() { + var prev = this.#prev; + var next2 = this.#next; + if (prev === null) { + first_batch = next2; + } else { + prev.#next = next2; + } + if (next2 === null) { + last_batch = prev; + } else { + next2.#prev = prev; + } + this.linked = false; + } +} +function flushSync(fn) { + var was_flushing_sync = is_flushing_sync; + is_flushing_sync = true; + try { + var result; + if (fn) ; + while (true) { + flush_tasks(); + if (current_batch === null) { + return ( + /** @type {T} */ + result + ); + } + current_batch.flush(); + } + } finally { + is_flushing_sync = was_flushing_sync; + } +} +function infinite_loop_guard() { + try { + effect_update_depth_exceeded(); + } catch (error) { + invoke_error_boundary(error, last_scheduled_effect); + } +} +let eager_block_effects = null; +function flush_queued_effects(effects) { + var length = effects.length; + if (length === 0) return; + var i = 0; + while (i < length) { + var effect2 = effects[i++]; + if ((effect2.f & (DESTROYED | INERT)) === 0 && is_dirty(effect2)) { + eager_block_effects = /* @__PURE__ */ new Set(); + update_effect(effect2); + if (effect2.deps === null && effect2.first === null && effect2.nodes === null && effect2.teardown === null && effect2.ac === null) { + unlink_effect(effect2); + } + if (eager_block_effects?.size > 0) { + old_values.clear(); + for (const e of eager_block_effects) { + if ((e.f & (DESTROYED | INERT)) !== 0) continue; + const ordered_effects = [e]; + let ancestor = e.parent; + while (ancestor !== null) { + if (eager_block_effects.has(ancestor)) { + eager_block_effects.delete(ancestor); + ordered_effects.push(ancestor); + } + ancestor = ancestor.parent; + } + for (let j = ordered_effects.length - 1; j >= 0; j--) { + const e2 = ordered_effects[j]; + if ((e2.f & (DESTROYED | INERT)) !== 0) continue; + update_effect(e2); + } + } + eager_block_effects.clear(); + } + } + } + eager_block_effects = null; +} +function mark_effects(value, sources, marked, checked) { + if (marked.has(value)) return; + marked.add(value); + if (value.reactions !== null) { + for (const reaction of value.reactions) { + const flags2 = reaction.f; + if ((flags2 & DERIVED) !== 0) { + mark_effects( + /** @type {Derived} */ + reaction, + sources, + marked, + checked + ); + } else if ((flags2 & (ASYNC | BLOCK_EFFECT)) !== 0 && (flags2 & DIRTY) === 0 && depends_on(reaction, sources, checked)) { + set_signal_status(reaction, DIRTY); + schedule_effect( + /** @type {Effect} */ + reaction + ); + } + } + } +} +function depends_on(reaction, sources, checked) { + const depends = checked.get(reaction); + if (depends !== void 0) return depends; + if (reaction.deps !== null) { + for (const dep of reaction.deps) { + if (includes.call(sources, dep)) { + return true; + } + if ((dep.f & DERIVED) !== 0 && depends_on( + /** @type {Derived} */ + dep, + sources, + checked + )) { + checked.set( + /** @type {Derived} */ + dep, + true + ); + return true; + } + } + } + checked.set(reaction, false); + return false; +} +function schedule_effect(effect2) { + current_batch.schedule(effect2); +} +function reset_branch(effect2, tracked) { + if ((effect2.f & BRANCH_EFFECT) !== 0 && (effect2.f & CLEAN) !== 0) { + return; + } + if ((effect2.f & DIRTY) !== 0) { + tracked.d.push(effect2); + } else if ((effect2.f & MAYBE_DIRTY) !== 0) { + tracked.m.push(effect2); + } + set_signal_status(effect2, CLEAN); + var e = effect2.first; + while (e !== null) { + reset_branch(e, tracked); + e = e.next; + } +} +function reset_all(effect2) { + set_signal_status(effect2, CLEAN); + var e = effect2.first; + while (e !== null) { + reset_all(e); + e = e.next; + } +} +function createSubscriber(start) { + let subscribers = 0; + let version = source(0); + let stop; + return () => { + if (effect_tracking()) { + get(version); + render_effect(() => { + if (subscribers === 0) { + stop = untrack(() => start(() => increment(version))); + } + subscribers += 1; + return () => { + queue_micro_task(() => { + subscribers -= 1; + if (subscribers === 0) { + stop?.(); + stop = void 0; + increment(version); + } + }); + }; + }); + } + }; +} +var flags = EFFECT_TRANSPARENT | EFFECT_PRESERVED; +function boundary(node, props, children, transform_error) { + new Boundary(node, props, children, transform_error); +} +class Boundary { + /** @type {Boundary | null} */ + parent; + is_pending = false; + /** + * API-level transformError transform function. Transforms errors before they reach the `failed` snippet. + * Inherited from parent boundary, or defaults to identity. + * @type {(error: unknown) => unknown} + */ + transform_error; + /** @type {TemplateNode} */ + #anchor; + /** @type {TemplateNode | null} */ + #hydrate_open = hydrating ? hydrate_node : null; + /** @type {BoundaryProps} */ + #props; + /** @type {((anchor: Node) => void)} */ + #children; + /** @type {Effect} */ + #effect; + /** @type {Effect | null} */ + #main_effect = null; + /** @type {Effect | null} */ + #pending_effect = null; + /** @type {Effect | null} */ + #failed_effect = null; + /** @type {DocumentFragment | null} */ + #offscreen_fragment = null; + #local_pending_count = 0; + #pending_count = 0; + #pending_count_update_queued = false; + /** @type {Set} */ + #dirty_effects = /* @__PURE__ */ new Set(); + /** @type {Set} */ + #maybe_dirty_effects = /* @__PURE__ */ new Set(); + /** + * A source containing the number of pending async deriveds/expressions. + * Only created if `$effect.pending()` is used inside the boundary, + * otherwise updating the source results in needless `Batch.ensure()` + * calls followed by no-op flushes + * @type {Source | null} + */ + #effect_pending = null; + #effect_pending_subscriber = createSubscriber(() => { + this.#effect_pending = source(this.#local_pending_count); + return () => { + this.#effect_pending = null; + }; + }); + /** + * @param {TemplateNode} node + * @param {BoundaryProps} props + * @param {((anchor: Node) => void)} children + * @param {((error: unknown) => unknown) | undefined} [transform_error] + */ + constructor(node, props, children, transform_error) { + this.#anchor = node; + this.#props = props; + this.#children = (anchor) => { + var effect2 = ( + /** @type {Effect} */ + active_effect + ); + effect2.b = this; + effect2.f |= BOUNDARY_EFFECT; + children(anchor); + }; + this.parent = /** @type {Effect} */ + active_effect.b; + this.transform_error = transform_error ?? this.parent?.transform_error ?? ((e) => e); + this.#effect = block(() => { + if (hydrating) { + const comment2 = ( + /** @type {Comment} */ + this.#hydrate_open + ); + hydrate_next(); + const server_rendered_pending = comment2.data === HYDRATION_START_ELSE; + const server_rendered_failed = comment2.data.startsWith(HYDRATION_START_FAILED); + if (server_rendered_failed) { + const serialized_error = JSON.parse(comment2.data.slice(HYDRATION_START_FAILED.length)); + this.#hydrate_failed_content(serialized_error); + } else if (server_rendered_pending) { + this.#hydrate_pending_content(); + } else { + this.#hydrate_resolved_content(); + } + } else { + this.#render(); + } + }, flags); + if (hydrating) { + this.#anchor = hydrate_node; + } + } + #hydrate_resolved_content() { + try { + this.#main_effect = branch(() => this.#children(this.#anchor)); + } catch (error) { + this.error(error); + } + } + /** + * @param {unknown} error The deserialized error from the server's hydration comment + */ + #hydrate_failed_content(error) { + const failed = this.#props.failed; + if (!failed) return; + this.#failed_effect = branch(() => { + failed( + this.#anchor, + () => error, + () => () => { + } + ); + }); + } + #hydrate_pending_content() { + const pending = this.#props.pending; + if (!pending) return; + this.is_pending = true; + this.#pending_effect = branch(() => pending(this.#anchor)); + queue_micro_task(() => { + var fragment = this.#offscreen_fragment = document.createDocumentFragment(); + var anchor = create_text(); + fragment.append(anchor); + this.#main_effect = this.#run(() => { + return branch(() => this.#children(anchor)); + }); + if (this.#pending_count === 0) { + this.#anchor.before(fragment); + this.#offscreen_fragment = null; + pause_effect( + /** @type {Effect} */ + this.#pending_effect, + () => { + this.#pending_effect = null; + } + ); + this.#resolve( + /** @type {Batch} */ + current_batch + ); + } + }); + } + #render() { + try { + this.is_pending = this.has_pending_snippet(); + this.#pending_count = 0; + this.#local_pending_count = 0; + this.#main_effect = branch(() => { + this.#children(this.#anchor); + }); + if (this.#pending_count > 0) { + var fragment = this.#offscreen_fragment = document.createDocumentFragment(); + move_effect(this.#main_effect, fragment); + const pending = ( + /** @type {(anchor: Node) => void} */ + this.#props.pending + ); + this.#pending_effect = branch(() => pending(this.#anchor)); + } else { + this.#resolve( + /** @type {Batch} */ + current_batch + ); + } + } catch (error) { + this.error(error); + } + } + /** + * @param {Batch} batch + */ + #resolve(batch) { + this.is_pending = false; + batch.transfer_effects(this.#dirty_effects, this.#maybe_dirty_effects); + } + /** + * Defer an effect inside a pending boundary until the boundary resolves + * @param {Effect} effect + */ + defer_effect(effect2) { + defer_effect(effect2, this.#dirty_effects, this.#maybe_dirty_effects); + } + /** + * Returns `false` if the effect exists inside a boundary whose pending snippet is shown + * @returns {boolean} + */ + is_rendered() { + return !this.is_pending && (!this.parent || this.parent.is_rendered()); + } + has_pending_snippet() { + return !!this.#props.pending; + } + /** + * @template T + * @param {() => T} fn + */ + #run(fn) { + var previous_effect = active_effect; + var previous_reaction = active_reaction; + var previous_ctx = component_context; + set_active_effect(this.#effect); + set_active_reaction(this.#effect); + set_component_context(this.#effect.ctx); + try { + Batch.ensure(); + return fn(); + } catch (e) { + handle_error(e); + return null; + } finally { + set_active_effect(previous_effect); + set_active_reaction(previous_reaction); + set_component_context(previous_ctx); + } + } + /** + * Updates the pending count associated with the currently visible pending snippet, + * if any, such that we can replace the snippet with content once work is done + * @param {1 | -1} d + * @param {Batch} batch + */ + #update_pending_count(d, batch) { + if (!this.has_pending_snippet()) { + if (this.parent) { + this.parent.#update_pending_count(d, batch); + } + return; + } + this.#pending_count += d; + if (this.#pending_count === 0) { + this.#resolve(batch); + if (this.#pending_effect) { + pause_effect(this.#pending_effect, () => { + this.#pending_effect = null; + }); + } + if (this.#offscreen_fragment) { + this.#anchor.before(this.#offscreen_fragment); + this.#offscreen_fragment = null; + } + } + } + /** + * Update the source that powers `$effect.pending()` inside this boundary, + * and controls when the current `pending` snippet (if any) is removed. + * Do not call from inside the class + * @param {1 | -1} d + * @param {Batch} batch + */ + update_pending_count(d, batch) { + this.#update_pending_count(d, batch); + this.#local_pending_count += d; + if (!this.#effect_pending || this.#pending_count_update_queued) return; + this.#pending_count_update_queued = true; + queue_micro_task(() => { + this.#pending_count_update_queued = false; + if (this.#effect_pending) { + internal_set(this.#effect_pending, this.#local_pending_count); + } + }); + } + get_effect_pending() { + this.#effect_pending_subscriber(); + return get( + /** @type {Source} */ + this.#effect_pending + ); + } + /** @param {unknown} error */ + error(error) { + if (!this.#props.onerror && !this.#props.failed) { + throw error; + } + if (current_batch?.is_fork) { + if (this.#main_effect) current_batch.skip_effect(this.#main_effect); + if (this.#pending_effect) current_batch.skip_effect(this.#pending_effect); + if (this.#failed_effect) current_batch.skip_effect(this.#failed_effect); + current_batch.on_fork_commit(() => { + this.#handle_error(error); + }); + } else { + this.#handle_error(error); + } + } + /** + * @param {unknown} error + */ + #handle_error(error) { + if (this.#main_effect) { + destroy_effect(this.#main_effect); + this.#main_effect = null; + } + if (this.#pending_effect) { + destroy_effect(this.#pending_effect); + this.#pending_effect = null; + } + if (this.#failed_effect) { + destroy_effect(this.#failed_effect); + this.#failed_effect = null; + } + if (hydrating) { + set_hydrate_node( + /** @type {TemplateNode} */ + this.#hydrate_open + ); + next(); + set_hydrate_node(skip_nodes()); + } + var onerror = this.#props.onerror; + let failed = this.#props.failed; + var did_reset = false; + var calling_on_error = false; + const reset2 = () => { + if (did_reset) { + svelte_boundary_reset_noop(); + return; + } + did_reset = true; + if (calling_on_error) { + svelte_boundary_reset_onerror(); + } + if (this.#failed_effect !== null) { + pause_effect(this.#failed_effect, () => { + this.#failed_effect = null; + }); + } + this.#run(() => { + this.#render(); + }); + }; + const handle_error_result = (transformed_error) => { + try { + calling_on_error = true; + onerror?.(transformed_error, reset2); + calling_on_error = false; + } catch (error2) { + invoke_error_boundary(error2, this.#effect && this.#effect.parent); + } + if (failed) { + this.#failed_effect = this.#run(() => { + try { + return branch(() => { + var effect2 = ( + /** @type {Effect} */ + active_effect + ); + effect2.b = this; + effect2.f |= BOUNDARY_EFFECT; + failed( + this.#anchor, + () => transformed_error, + () => reset2 + ); + }); + } catch (error2) { + invoke_error_boundary( + error2, + /** @type {Effect} */ + this.#effect.parent + ); + return null; + } + }); + } + }; + queue_micro_task(() => { + var result; + try { + result = this.transform_error(error); + } catch (e) { + invoke_error_boundary(e, this.#effect && this.#effect.parent); + return; + } + if (result !== null && typeof result === "object" && typeof /** @type {any} */ + result.then === "function") { + result.then( + handle_error_result, + /** @param {unknown} e */ + (e) => invoke_error_boundary(e, this.#effect && this.#effect.parent) + ); + } else { + handle_error_result(result); + } + }); + } +} +function flatten(blockers, sync, async, fn) { + const d = derived; + var pending = blockers.filter((b) => !b.settled); + if (async.length === 0 && pending.length === 0) { + fn(sync.map(d)); + return; + } + var parent = ( + /** @type {Effect} */ + active_effect + ); + var restore = capture(); + var blocker_promise = pending.length === 1 ? pending[0].promise : pending.length > 1 ? Promise.all(pending.map((b) => b.promise)) : null; + function finish(values) { + if ((parent.f & DESTROYED) !== 0) { + return; + } + restore(); + try { + fn(values); + } catch (error) { + invoke_error_boundary(error, parent); + } + unset_context(); + } + var decrement_pending = increment_pending(); + if (async.length === 0) { + blocker_promise.then(() => finish(sync.map(d))).finally(decrement_pending); + return; + } + function run() { + Promise.all(async.map((expression) => /* @__PURE__ */ async_derived(expression))).then((result) => finish([...sync.map(d), ...result])).catch((error) => invoke_error_boundary(error, parent)).finally(decrement_pending); + } + if (blocker_promise) { + blocker_promise.then(() => { + restore(); + run(); + unset_context(); + }); + } else { + run(); + } +} +function capture() { + var previous_effect = ( + /** @type {Effect} */ + active_effect + ); + var previous_reaction = active_reaction; + var previous_component_context = component_context; + var previous_batch2 = ( + /** @type {Batch} */ + current_batch + ); + return function restore(activate_batch = true) { + set_active_effect(previous_effect); + set_active_reaction(previous_reaction); + set_component_context(previous_component_context); + if (activate_batch && (previous_effect.f & DESTROYED) === 0) { + previous_batch2?.activate(); + previous_batch2?.apply(); + } + }; +} +function unset_context(deactivate_batch = true) { + set_active_effect(null); + set_active_reaction(null); + set_component_context(null); + if (deactivate_batch) current_batch?.deactivate(); +} +function increment_pending() { + var effect2 = ( + /** @type {Effect} */ + active_effect + ); + var boundary2 = ( + /** @type {Boundary} */ + effect2.b + ); + var batch = ( + /** @type {Batch} */ + current_batch + ); + var blocking = boundary2.is_rendered(); + boundary2.update_pending_count(1, batch); + batch.increment(blocking, effect2); + return () => { + boundary2.update_pending_count(-1, batch); + batch.decrement(blocking, effect2); + }; +} +// @__NO_SIDE_EFFECTS__ +function derived(fn) { + var flags2 = DERIVED | DIRTY; + if (active_effect !== null) { + active_effect.f |= EFFECT_PRESERVED; + } + const signal = { + ctx: component_context, + deps: null, + effects: null, + equals, + f: flags2, + fn, + reactions: null, + rv: 0, + v: ( + /** @type {V} */ + UNINITIALIZED + ), + wv: 0, + parent: active_effect, + ac: null + }; + return signal; +} +const OBSOLETE = /* @__PURE__ */ Symbol("obsolete"); +// @__NO_SIDE_EFFECTS__ +function async_derived(fn, label, location2) { + let parent = ( + /** @type {Effect | null} */ + active_effect + ); + if (parent === null) { + async_derived_orphan(); + } + var promise = ( + /** @type {Promise} */ + /** @type {unknown} */ + void 0 + ); + var signal = source( + /** @type {V} */ + UNINITIALIZED + ); + var should_suspend = !active_reaction; + var deferreds = /* @__PURE__ */ new Set(); + async_effect(() => { + var effect2 = ( + /** @type {Effect} */ + active_effect + ); + var d = deferred(); + promise = d.promise; + try { + Promise.resolve(fn()).then(d.resolve, (e) => { + if (e !== STALE_REACTION) d.reject(e); + }).finally(unset_context); + } catch (error) { + d.reject(error); + unset_context(); + } + var batch = ( + /** @type {Batch} */ + current_batch + ); + if (should_suspend) { + if ((effect2.f & REACTION_RAN) !== 0) { + var decrement_pending = increment_pending(); + } + if ( + /** @type {Boundary} */ + parent.b.is_rendered() + ) { + batch.async_deriveds.get(effect2)?.reject(OBSOLETE); + } else { + for (const d2 of deferreds.values()) { + d2.reject(OBSOLETE); + } + } + deferreds.add(d); + batch.async_deriveds.set(effect2, d); + } + const handler = (value, error = void 0) => { + decrement_pending?.(); + deferreds.delete(d); + if (error === OBSOLETE) return; + batch.activate(); + if (error) { + signal.f |= ERROR_VALUE; + internal_set(signal, error); + } else { + if ((signal.f & ERROR_VALUE) !== 0) { + signal.f ^= ERROR_VALUE; + } + internal_set(signal, value); + } + batch.deactivate(); + }; + d.promise.then(handler, (e) => handler(null, e || "unknown")); + }); + teardown(() => { + for (const d of deferreds) { + d.reject(OBSOLETE); + } + }); + return new Promise((fulfil) => { + function next2(p) { + function go() { + if (p === promise) { + fulfil(signal); + } else { + next2(promise); + } + } + p.then(go, go); + } + next2(promise); + }); +} +// @__NO_SIDE_EFFECTS__ +function user_derived(fn) { + const d = /* @__PURE__ */ derived(fn); + push_reaction_value(d); + return d; +} +function destroy_derived_effects(derived2) { + var effects = derived2.effects; + if (effects !== null) { + derived2.effects = null; + for (var i = 0; i < effects.length; i += 1) { + destroy_effect( + /** @type {Effect} */ + effects[i] + ); + } + } +} +function execute_derived(derived2) { + var value; + var prev_active_effect = active_effect; + var parent = derived2.parent; + if (!is_destroying_effect && parent !== null && derived2.v !== UNINITIALIZED && // if it was never evaluated before, it's guaranteed to fail downstream, so we try to execute instead + (parent.f & (DESTROYED | INERT)) !== 0) { + derived_inert(); + return derived2.v; + } + set_active_effect(parent); + { + try { + derived2.f &= ~WAS_MARKED; + destroy_derived_effects(derived2); + value = update_reaction(derived2); + } finally { + set_active_effect(prev_active_effect); + } + } + return value; +} +function update_derived(derived2) { + var value = execute_derived(derived2); + if (!derived2.equals(value)) { + derived2.wv = increment_write_version(); + if (!current_batch?.is_fork || derived2.deps === null) { + if (current_batch !== null) { + current_batch.capture(derived2, value, true); + previous_batch?.capture(derived2, value, true); + } else { + derived2.v = value; + } + if (derived2.deps === null) { + set_signal_status(derived2, CLEAN); + return; + } + } + } + if (is_destroying_effect) { + return; + } + if (batch_values !== null) { + if (effect_tracking() || current_batch?.is_fork) { + batch_values.set(derived2, value); + } + } else { + update_derived_status(derived2); + } +} +function freeze_derived_effects(derived2) { + if (derived2.effects === null) return; + for (const e of derived2.effects) { + if (e.teardown || e.ac) { + e.teardown?.(); + e.ac?.abort(STALE_REACTION); + if (e.fn !== null) e.teardown = noop; + e.ac = null; + remove_reactions(e, 0); + destroy_effect_children(e); + } + } +} +function unfreeze_derived_effects(derived2) { + if (derived2.effects === null) return; + for (const e of derived2.effects) { + if (e.teardown && e.fn !== null) { + update_effect(e); + } + } +} +let eager_effects = /* @__PURE__ */ new Set(); +const old_values = /* @__PURE__ */ new Map(); +let eager_effects_deferred = false; +function source(v, stack) { + var signal = { + f: 0, + // TODO ideally we could skip this altogether, but it causes type errors + v, + reactions: null, + equals, + rv: 0, + wv: 0 + }; + return signal; +} +// @__NO_SIDE_EFFECTS__ +function state(v, stack) { + const s = source(v); + push_reaction_value(s); + return s; +} +// @__NO_SIDE_EFFECTS__ +function mutable_source(initial_value, immutable = false, trackable = true) { + const s = source(initial_value); + if (!immutable) { + s.equals = safe_equals; + } + return s; +} +function set(source2, value, should_proxy = false) { + if (active_reaction !== null && // since we are untracking the function inside `$inspect.with` we need to add this check + // to ensure we error if state is set inside an inspect effect + (!untracking || (active_reaction.f & EAGER_EFFECT) !== 0) && is_runes() && (active_reaction.f & (DERIVED | BLOCK_EFFECT | ASYNC | EAGER_EFFECT)) !== 0 && (current_sources === null || !includes.call(current_sources, source2))) { + state_unsafe_mutation(); + } + let new_value = should_proxy ? proxy(value) : value; + return internal_set(source2, new_value, legacy_updates); +} +function internal_set(source2, value, updated_during_traversal = null) { + if (!source2.equals(value)) { + old_values.set(source2, is_destroying_effect ? value : source2.v); + var batch = Batch.ensure(); + batch.capture(source2, value); + if ((source2.f & DERIVED) !== 0) { + const derived2 = ( + /** @type {Derived} */ + source2 + ); + if ((source2.f & DIRTY) !== 0) { + execute_derived(derived2); + } + if (batch_values === null) { + update_derived_status(derived2); + } + } + source2.wv = increment_write_version(); + mark_reactions(source2, DIRTY, updated_during_traversal); + if (active_effect !== null && (active_effect.f & CLEAN) !== 0 && (active_effect.f & (BRANCH_EFFECT | ROOT_EFFECT)) === 0) { + if (untracked_writes === null) { + set_untracked_writes([source2]); + } else { + untracked_writes.push(source2); + } + } + if (!batch.is_fork && eager_effects.size > 0 && !eager_effects_deferred) { + flush_eager_effects(); + } + } + return value; +} +function flush_eager_effects() { + eager_effects_deferred = false; + for (const effect2 of eager_effects) { + if ((effect2.f & CLEAN) !== 0) { + set_signal_status(effect2, MAYBE_DIRTY); + } + let dirty; + try { + dirty = is_dirty(effect2); + } catch { + dirty = true; + } + if (dirty) { + update_effect(effect2); + } + } + eager_effects.clear(); +} +function increment(source2) { + set(source2, source2.v + 1); +} +function mark_reactions(signal, status, updated_during_traversal) { + var reactions = signal.reactions; + if (reactions === null) return; + var length = reactions.length; + for (var i = 0; i < length; i++) { + var reaction = reactions[i]; + var flags2 = reaction.f; + var not_dirty = (flags2 & DIRTY) === 0; + if (not_dirty) { + set_signal_status(reaction, status); + } + if ((flags2 & EAGER_EFFECT) !== 0) { + eager_effects.add( + /** @type {Effect} */ + reaction + ); + } else if ((flags2 & DERIVED) !== 0) { + var derived2 = ( + /** @type {Derived} */ + reaction + ); + batch_values?.delete(derived2); + if ((flags2 & WAS_MARKED) === 0) { + if (flags2 & CONNECTED && (active_effect === null || (active_effect.f & REACTION_IS_UPDATING) === 0)) { + reaction.f |= WAS_MARKED; + } + mark_reactions(derived2, MAYBE_DIRTY, updated_during_traversal); + } + } else if (not_dirty) { + var effect2 = ( + /** @type {Effect} */ + reaction + ); + if ((flags2 & BLOCK_EFFECT) !== 0 && eager_block_effects !== null) { + eager_block_effects.add(effect2); + } + if (updated_during_traversal !== null) { + updated_during_traversal.push(effect2); + } else { + schedule_effect(effect2); + } + } + } +} +function autofocus(dom, value) { + if (value) { + const body = document.body; + dom.autofocus = true; + queue_micro_task(() => { + if (document.activeElement === body) { + dom.focus(); + } + }); + } +} +let listening_to_form_reset = false; +function add_form_reset_listener() { + if (!listening_to_form_reset) { + listening_to_form_reset = true; + document.addEventListener( + "reset", + (evt) => { + Promise.resolve().then(() => { + if (!evt.defaultPrevented) { + for ( + const e of + /**@type {HTMLFormElement} */ + evt.target.elements + ) { + e[FORM_RESET_HANDLER]?.(); + } + } + }); + }, + // In the capture phase to guarantee we get noticed of it (no possibility of stopPropagation) + { capture: true } + ); + } +} +function without_reactive_context(fn) { + var previous_reaction = active_reaction; + var previous_effect = active_effect; + set_active_reaction(null); + set_active_effect(null); + try { + return fn(); + } finally { + set_active_reaction(previous_reaction); + set_active_effect(previous_effect); + } +} +function listen_to_event_and_reset_event(element, event2, handler, on_reset = handler) { + element.addEventListener(event2, () => without_reactive_context(handler)); + const prev = ( + /** @type {any} */ + element[FORM_RESET_HANDLER] + ); + if (prev) { + element[FORM_RESET_HANDLER] = () => { + prev(); + on_reset(true); + }; + } else { + element[FORM_RESET_HANDLER] = () => on_reset(true); + } + add_form_reset_listener(); +} +let is_updating_effect = false; +let is_destroying_effect = false; +function set_is_destroying_effect(value) { + is_destroying_effect = value; +} +let active_reaction = null; +let untracking = false; +function set_active_reaction(reaction) { + active_reaction = reaction; +} +let active_effect = null; +function set_active_effect(effect2) { + active_effect = effect2; +} +let current_sources = null; +function push_reaction_value(value) { + if (active_reaction !== null && true) { + if (current_sources === null) { + current_sources = [value]; + } else { + current_sources.push(value); + } + } +} +let new_deps = null; +let skipped_deps = 0; +let untracked_writes = null; +function set_untracked_writes(value) { + untracked_writes = value; +} +let write_version = 1; +let read_version = 0; +let update_version = read_version; +function set_update_version(value) { + update_version = value; +} +function increment_write_version() { + return ++write_version; +} +function is_dirty(reaction) { + var flags2 = reaction.f; + if ((flags2 & DIRTY) !== 0) { + return true; + } + if (flags2 & DERIVED) { + reaction.f &= ~WAS_MARKED; + } + if ((flags2 & MAYBE_DIRTY) !== 0) { + var dependencies = ( + /** @type {Value[]} */ + reaction.deps + ); + var length = dependencies.length; + for (var i = 0; i < length; i++) { + var dependency = dependencies[i]; + if (is_dirty( + /** @type {Derived} */ + dependency + )) { + update_derived( + /** @type {Derived} */ + dependency + ); + } + if (dependency.wv > reaction.wv) { + return true; + } + } + if ((flags2 & CONNECTED) !== 0 && // During time traveling we don't want to reset the status so that + // traversal of the graph in the other batches still happens + batch_values === null) { + set_signal_status(reaction, CLEAN); + } + } + return false; +} +function schedule_possible_effect_self_invalidation(signal, effect2, root2 = true) { + var reactions = signal.reactions; + if (reactions === null) return; + if (current_sources !== null && includes.call(current_sources, signal)) { + return; + } + for (var i = 0; i < reactions.length; i++) { + var reaction = reactions[i]; + if ((reaction.f & DERIVED) !== 0) { + schedule_possible_effect_self_invalidation( + /** @type {Derived} */ + reaction, + effect2, + false + ); + } else if (effect2 === reaction) { + if (root2) { + set_signal_status(reaction, DIRTY); + } else if ((reaction.f & CLEAN) !== 0) { + set_signal_status(reaction, MAYBE_DIRTY); + } + schedule_effect( + /** @type {Effect} */ + reaction + ); + } + } +} +function update_reaction(reaction) { + var previous_deps = new_deps; + var previous_skipped_deps = skipped_deps; + var previous_untracked_writes = untracked_writes; + var previous_reaction = active_reaction; + var previous_sources = current_sources; + var previous_component_context = component_context; + var previous_untracking = untracking; + var previous_update_version = update_version; + var flags2 = reaction.f; + new_deps = /** @type {null | Value[]} */ + null; + skipped_deps = 0; + untracked_writes = null; + active_reaction = (flags2 & (BRANCH_EFFECT | ROOT_EFFECT)) === 0 ? reaction : null; + current_sources = null; + set_component_context(reaction.ctx); + untracking = false; + update_version = ++read_version; + if (reaction.ac !== null) { + without_reactive_context(() => { + reaction.ac.abort(STALE_REACTION); + }); + reaction.ac = null; + } + try { + reaction.f |= REACTION_IS_UPDATING; + var fn = ( + /** @type {Function} */ + reaction.fn + ); + var result = fn(); + reaction.f |= REACTION_RAN; + var deps = reaction.deps; + var is_fork = current_batch?.is_fork; + if (new_deps !== null) { + var i; + if (!is_fork) { + remove_reactions(reaction, skipped_deps); + } + if (deps !== null && skipped_deps > 0) { + deps.length = skipped_deps + new_deps.length; + for (i = 0; i < new_deps.length; i++) { + deps[skipped_deps + i] = new_deps[i]; + } + } else { + reaction.deps = deps = new_deps; + } + if (effect_tracking() && (reaction.f & CONNECTED) !== 0) { + for (i = skipped_deps; i < deps.length; i++) { + (deps[i].reactions ??= []).push(reaction); + } + } + } else if (!is_fork && deps !== null && skipped_deps < deps.length) { + remove_reactions(reaction, skipped_deps); + deps.length = skipped_deps; + } + if (is_runes() && untracked_writes !== null && !untracking && deps !== null && (reaction.f & (DERIVED | MAYBE_DIRTY | DIRTY)) === 0) { + for (i = 0; i < /** @type {Source[]} */ + untracked_writes.length; i++) { + schedule_possible_effect_self_invalidation( + untracked_writes[i], + /** @type {Effect} */ + reaction + ); + } + } + if (previous_reaction !== null && previous_reaction !== reaction) { + read_version++; + if (previous_reaction.deps !== null) { + for (let i2 = 0; i2 < previous_skipped_deps; i2 += 1) { + previous_reaction.deps[i2].rv = read_version; + } + } + if (previous_deps !== null) { + for (const dep of previous_deps) { + dep.rv = read_version; + } + } + if (untracked_writes !== null) { + if (previous_untracked_writes === null) { + previous_untracked_writes = untracked_writes; + } else { + previous_untracked_writes.push(.../** @type {Source[]} */ + untracked_writes); + } + } + } + if ((reaction.f & ERROR_VALUE) !== 0) { + reaction.f ^= ERROR_VALUE; + } + return result; + } catch (error) { + return handle_error(error); + } finally { + reaction.f ^= REACTION_IS_UPDATING; + new_deps = previous_deps; + skipped_deps = previous_skipped_deps; + untracked_writes = previous_untracked_writes; + active_reaction = previous_reaction; + current_sources = previous_sources; + set_component_context(previous_component_context); + untracking = previous_untracking; + update_version = previous_update_version; + } +} +function remove_reaction(signal, dependency) { + let reactions = dependency.reactions; + if (reactions !== null) { + var index = index_of.call(reactions, signal); + if (index !== -1) { + var new_length = reactions.length - 1; + if (new_length === 0) { + reactions = dependency.reactions = null; + } else { + reactions[index] = reactions[new_length]; + reactions.pop(); + } + } + } + if (reactions === null && (dependency.f & DERIVED) !== 0 && // Destroying a child effect while updating a parent effect can cause a dependency to appear + // to be unused, when in fact it is used by the currently-updating parent. Checking `new_deps` + // allows us to skip the expensive work of disconnecting and immediately reconnecting it + (new_deps === null || !includes.call(new_deps, dependency))) { + var derived2 = ( + /** @type {Derived} */ + dependency + ); + if ((derived2.f & CONNECTED) !== 0) { + derived2.f ^= CONNECTED; + derived2.f &= ~WAS_MARKED; + } + if (derived2.v !== UNINITIALIZED) { + update_derived_status(derived2); + } + freeze_derived_effects(derived2); + remove_reactions(derived2, 0); + } +} +function remove_reactions(signal, start_index) { + var dependencies = signal.deps; + if (dependencies === null) return; + for (var i = start_index; i < dependencies.length; i++) { + remove_reaction(signal, dependencies[i]); + } +} +function update_effect(effect2) { + var flags2 = effect2.f; + if ((flags2 & DESTROYED) !== 0) { + return; + } + set_signal_status(effect2, CLEAN); + var previous_effect = active_effect; + var was_updating_effect = is_updating_effect; + active_effect = effect2; + is_updating_effect = true; + try { + if ((flags2 & (BLOCK_EFFECT | MANAGED_EFFECT)) !== 0) { + destroy_block_effect_children(effect2); + } else { + destroy_effect_children(effect2); + } + execute_effect_teardown(effect2); + var teardown2 = update_reaction(effect2); + effect2.teardown = typeof teardown2 === "function" ? teardown2 : null; + effect2.wv = write_version; + var dep; + if (DEV && tracing_mode_flag && (effect2.f & DIRTY) !== 0 && effect2.deps !== null) ; + } finally { + is_updating_effect = was_updating_effect; + active_effect = previous_effect; + } +} +async function tick() { + await Promise.resolve(); + flushSync(); +} +function get(signal) { + var flags2 = signal.f; + var is_derived = (flags2 & DERIVED) !== 0; + if (active_reaction !== null && !untracking) { + var destroyed = active_effect !== null && (active_effect.f & DESTROYED) !== 0; + if (!destroyed && (current_sources === null || !includes.call(current_sources, signal))) { + var deps = active_reaction.deps; + if ((active_reaction.f & REACTION_IS_UPDATING) !== 0) { + if (signal.rv < read_version) { + signal.rv = read_version; + if (new_deps === null && deps !== null && deps[skipped_deps] === signal) { + skipped_deps++; + } else if (new_deps === null) { + new_deps = [signal]; + } else { + new_deps.push(signal); + } + } + } else { + (active_reaction.deps ??= []).push(signal); + var reactions = signal.reactions; + if (reactions === null) { + signal.reactions = [active_reaction]; + } else if (!includes.call(reactions, active_reaction)) { + reactions.push(active_reaction); + } + } + } + } + if (is_destroying_effect && old_values.has(signal)) { + return old_values.get(signal); + } + if (is_derived) { + var derived2 = ( + /** @type {Derived} */ + signal + ); + if (is_destroying_effect) { + var value = derived2.v; + if ((derived2.f & CLEAN) === 0 && derived2.reactions !== null || depends_on_old_values(derived2)) { + value = execute_derived(derived2); + } + old_values.set(derived2, value); + return value; + } + var should_connect = (derived2.f & CONNECTED) === 0 && !untracking && active_reaction !== null && (is_updating_effect || (active_reaction.f & CONNECTED) !== 0); + var is_new = (derived2.f & REACTION_RAN) === 0; + if (is_dirty(derived2)) { + if (should_connect) { + derived2.f |= CONNECTED; + } + update_derived(derived2); + } + if (should_connect && !is_new) { + unfreeze_derived_effects(derived2); + reconnect(derived2); + } + } + if (batch_values?.has(signal)) { + return batch_values.get(signal); + } + if ((signal.f & ERROR_VALUE) !== 0) { + throw signal.v; + } + return signal.v; +} +function reconnect(derived2) { + derived2.f |= CONNECTED; + if (derived2.deps === null) return; + for (const dep of derived2.deps) { + (dep.reactions ??= []).push(derived2); + if ((dep.f & DERIVED) !== 0 && (dep.f & CONNECTED) === 0) { + unfreeze_derived_effects( + /** @type {Derived} */ + dep + ); + reconnect( + /** @type {Derived} */ + dep + ); + } + } +} +function depends_on_old_values(derived2) { + if (derived2.v === UNINITIALIZED) return true; + if (derived2.deps === null) return false; + for (const dep of derived2.deps) { + if (old_values.has(dep)) { + return true; + } + if ((dep.f & DERIVED) !== 0 && depends_on_old_values( + /** @type {Derived} */ + dep + )) { + return true; + } + } + return false; +} +function untrack(fn) { + var previous_untracking = untracking; + try { + untracking = true; + return fn(); + } finally { + untracking = previous_untracking; + } +} +function validate_effect(rune) { + if (active_effect === null) { + if (active_reaction === null) { + effect_orphan(); + } + effect_in_unowned_derived(); + } + if (is_destroying_effect) { + effect_in_teardown(); + } +} +function push_effect(effect2, parent_effect) { + var parent_last = parent_effect.last; + if (parent_last === null) { + parent_effect.last = parent_effect.first = effect2; + } else { + parent_last.next = effect2; + effect2.prev = parent_last; + parent_effect.last = effect2; + } +} +function create_effect(type, fn) { + var parent = active_effect; + if (parent !== null && (parent.f & INERT) !== 0) { + type |= INERT; + } + var effect2 = { + ctx: component_context, + deps: null, + nodes: null, + f: type | DIRTY | CONNECTED, + first: null, + fn, + last: null, + next: null, + parent, + b: parent && parent.b, + prev: null, + teardown: null, + wv: 0, + ac: null + }; + current_batch?.register_created_effect(effect2); + var e = effect2; + if ((type & EFFECT) !== 0) { + if (collected_effects !== null) { + collected_effects.push(effect2); + } else { + Batch.ensure().schedule(effect2); + } + } else if (fn !== null) { + try { + update_effect(effect2); + } catch (e2) { + destroy_effect(effect2); + throw e2; + } + if (e.deps === null && e.teardown === null && e.nodes === null && e.first === e.last && // either `null`, or a singular child + (e.f & EFFECT_PRESERVED) === 0) { + e = e.first; + if ((type & BLOCK_EFFECT) !== 0 && (type & EFFECT_TRANSPARENT) !== 0 && e !== null) { + e.f |= EFFECT_TRANSPARENT; + } + } + } + if (e !== null) { + e.parent = parent; + if (parent !== null) { + push_effect(e, parent); + } + if (active_reaction !== null && (active_reaction.f & DERIVED) !== 0 && (type & ROOT_EFFECT) === 0) { + var derived2 = ( + /** @type {Derived} */ + active_reaction + ); + (derived2.effects ??= []).push(e); + } + } + return effect2; +} +function effect_tracking() { + return active_reaction !== null && !untracking; +} +function teardown(fn) { + const effect2 = create_effect(RENDER_EFFECT, null); + set_signal_status(effect2, CLEAN); + effect2.teardown = fn; + return effect2; +} +function user_effect(fn) { + validate_effect(); + var flags2 = ( + /** @type {Effect} */ + active_effect.f + ); + var defer = !active_reaction && (flags2 & BRANCH_EFFECT) !== 0 && (flags2 & REACTION_RAN) === 0; + if (defer) { + var context = ( + /** @type {ComponentContext} */ + component_context + ); + (context.e ??= []).push(fn); + } else { + return create_user_effect(fn); + } +} +function create_user_effect(fn) { + return create_effect(EFFECT | USER_EFFECT, fn); +} +function effect_root(fn) { + Batch.ensure(); + const effect2 = create_effect(ROOT_EFFECT | EFFECT_PRESERVED, fn); + return () => { + destroy_effect(effect2); + }; +} +function component_root(fn) { + Batch.ensure(); + const effect2 = create_effect(ROOT_EFFECT | EFFECT_PRESERVED, fn); + return (options = {}) => { + return new Promise((fulfil) => { + if (options.outro) { + pause_effect(effect2, () => { + destroy_effect(effect2); + fulfil(void 0); + }); + } else { + destroy_effect(effect2); + fulfil(void 0); + } + }); + }; +} +function effect(fn) { + return create_effect(EFFECT, fn); +} +function async_effect(fn) { + return create_effect(ASYNC | EFFECT_PRESERVED, fn); +} +function render_effect(fn, flags2 = 0) { + return create_effect(RENDER_EFFECT | flags2, fn); +} +function template_effect(fn, sync = [], async = [], blockers = []) { + flatten(blockers, sync, async, (values) => { + create_effect(RENDER_EFFECT, () => fn(...values.map(get))); + }); +} +function block(fn, flags2 = 0) { + var effect2 = create_effect(BLOCK_EFFECT | flags2, fn); + return effect2; +} +function managed(fn, flags2 = 0) { + var effect2 = create_effect(MANAGED_EFFECT | flags2, fn); + return effect2; +} +function branch(fn) { + return create_effect(BRANCH_EFFECT | EFFECT_PRESERVED, fn); +} +function execute_effect_teardown(effect2) { + var teardown2 = effect2.teardown; + if (teardown2 !== null) { + const previously_destroying_effect = is_destroying_effect; + const previous_reaction = active_reaction; + set_is_destroying_effect(true); + set_active_reaction(null); + try { + teardown2.call(null); + } finally { + set_is_destroying_effect(previously_destroying_effect); + set_active_reaction(previous_reaction); + } + } +} +function destroy_effect_children(signal, remove_dom = false) { + var effect2 = signal.first; + signal.first = signal.last = null; + while (effect2 !== null) { + const controller = effect2.ac; + if (controller !== null) { + without_reactive_context(() => { + controller.abort(STALE_REACTION); + }); + } + var next2 = effect2.next; + if ((effect2.f & ROOT_EFFECT) !== 0) { + effect2.parent = null; + } else { + destroy_effect(effect2, remove_dom); + } + effect2 = next2; + } +} +function destroy_block_effect_children(signal) { + var effect2 = signal.first; + while (effect2 !== null) { + var next2 = effect2.next; + if ((effect2.f & BRANCH_EFFECT) === 0) { + destroy_effect(effect2); + } + effect2 = next2; + } +} +function destroy_effect(effect2, remove_dom = true) { + var removed = false; + if ((remove_dom || (effect2.f & HEAD_EFFECT) !== 0) && effect2.nodes !== null && effect2.nodes.end !== null) { + remove_effect_dom( + effect2.nodes.start, + /** @type {TemplateNode} */ + effect2.nodes.end + ); + removed = true; + } + set_signal_status(effect2, DESTROYING); + destroy_effect_children(effect2, remove_dom && !removed); + remove_reactions(effect2, 0); + var transitions = effect2.nodes && effect2.nodes.t; + if (transitions !== null) { + for (const transition of transitions) { + transition.stop(); + } + } + execute_effect_teardown(effect2); + effect2.f ^= DESTROYING; + effect2.f |= DESTROYED; + var parent = effect2.parent; + if (parent !== null && parent.first !== null) { + unlink_effect(effect2); + } + effect2.next = effect2.prev = effect2.teardown = effect2.ctx = effect2.deps = effect2.fn = effect2.nodes = effect2.ac = effect2.b = null; +} +function remove_effect_dom(node, end) { + while (node !== null) { + var next2 = node === end ? null : /* @__PURE__ */ get_next_sibling(node); + node.remove(); + node = next2; + } +} +function unlink_effect(effect2) { + var parent = effect2.parent; + var prev = effect2.prev; + var next2 = effect2.next; + if (prev !== null) prev.next = next2; + if (next2 !== null) next2.prev = prev; + if (parent !== null) { + if (parent.first === effect2) parent.first = next2; + if (parent.last === effect2) parent.last = prev; + } +} +function pause_effect(effect2, callback, destroy = true) { + var transitions = []; + pause_children(effect2, transitions, true); + var fn = () => { + if (destroy) destroy_effect(effect2); + if (callback) callback(); + }; + var remaining = transitions.length; + if (remaining > 0) { + var check = () => --remaining || fn(); + for (var transition of transitions) { + transition.out(check); + } + } else { + fn(); + } +} +function pause_children(effect2, transitions, local) { + if ((effect2.f & INERT) !== 0) return; + effect2.f ^= INERT; + var t = effect2.nodes && effect2.nodes.t; + if (t !== null) { + for (const transition of t) { + if (transition.is_global || local) { + transitions.push(transition); + } + } + } + var child2 = effect2.first; + while (child2 !== null) { + var sibling2 = child2.next; + if ((child2.f & ROOT_EFFECT) === 0) { + var transparent = (child2.f & EFFECT_TRANSPARENT) !== 0 || // If this is a branch effect without a block effect parent, + // it means the parent block effect was pruned. In that case, + // transparency information was transferred to the branch effect. + (child2.f & BRANCH_EFFECT) !== 0 && (effect2.f & BLOCK_EFFECT) !== 0; + pause_children(child2, transitions, transparent ? local : false); + } + child2 = sibling2; + } +} +function resume_effect(effect2) { + resume_children(effect2, true); +} +function resume_children(effect2, local) { + if ((effect2.f & INERT) === 0) return; + effect2.f ^= INERT; + if ((effect2.f & CLEAN) === 0) { + set_signal_status(effect2, DIRTY); + Batch.ensure().schedule(effect2); + } + var child2 = effect2.first; + while (child2 !== null) { + var sibling2 = child2.next; + var transparent = (child2.f & EFFECT_TRANSPARENT) !== 0 || (child2.f & BRANCH_EFFECT) !== 0; + resume_children(child2, transparent ? local : false); + child2 = sibling2; + } + var t = effect2.nodes && effect2.nodes.t; + if (t !== null) { + for (const transition of t) { + if (transition.is_global || local) { + transition.in(); + } + } + } +} +function move_effect(effect2, fragment) { + if (!effect2.nodes) return; + var node = effect2.nodes.start; + var end = effect2.nodes.end; + while (node !== null) { + var next2 = node === end ? null : /* @__PURE__ */ get_next_sibling(node); + fragment.append(node); + node = next2; + } +} +function store(defaultValue) { + const scope = { + get: (name) => { + return get$1(scope.store)[name]; + }, + set: (name, value) => { + if (typeof name === "string") { + Object.assign(get$1(scope.store), { + [name]: value + }); + } else { + Object.assign(get$1(scope.store), name); + } + scope.store.set(get$1(scope.store)); + }, + store: writable(defaultValue) + }; + return scope; +} +globalThis.$altcha = globalThis.$altcha || { + algorithms: /* @__PURE__ */ new Map(), + defaults: store({}), + i18n: store({}), + instances: /* @__PURE__ */ new Set(), + plugins: /* @__PURE__ */ new Set() +}; +const i18n = { + ariaLinkLabel: "Altcha (official website)", + cancel: "Cancel", + enterCode: "Enter code", + enterCodeAria: "Enter code you hear. Press Space to play audio.", + enterCodeFromImage: "To proceed, please enter the code from the image below.", + error: "Verification failed. Try again later.", + expired: "Verification expired. Try again.", + footer: 'Protected by ALTCHA', + getAudioChallenge: "Get an audio challenge", + label: "I'm not a robot", + loading: "Loading...", + reload: "Reload", + verify: "Verify", + verificationRequired: "Verification required!", + verified: "Verified", + verifying: "Verifying...", + waitAlert: "Verifying... please wait." +}; +globalThis.$altcha.i18n.set("en", i18n); +const PUBLIC_VERSION = "5"; +if (typeof window !== "undefined") { + ((window.__svelte ??= {}).v ??= /* @__PURE__ */ new Set()).add(PUBLIC_VERSION); +} +const event_symbol = /* @__PURE__ */ Symbol("events"); +const all_registered_events = /* @__PURE__ */ new Set(); +const root_event_handles = /* @__PURE__ */ new Set(); +function create_event(event_name, dom, handler, options = {}) { + function target_handler(event2) { + if (!options.capture) { + handle_event_propagation.call(dom, event2); + } + if (!event2.cancelBubble) { + return without_reactive_context(() => { + return handler?.call(this, event2); + }); + } + } + if (event_name.startsWith("pointer") || event_name.startsWith("touch") || event_name === "wheel") { + queue_micro_task(() => { + dom.addEventListener(event_name, target_handler, options); + }); + } else { + dom.addEventListener(event_name, target_handler, options); + } + return target_handler; +} +function event(event_name, dom, handler, capture2, passive) { + var options = { capture: capture2, passive }; + var target_handler = create_event(event_name, dom, handler, options); + if (dom === document.body || // @ts-ignore + dom === window || // @ts-ignore + dom === document || // Firefox has quirky behavior, it can happen that we still get "canplay" events when the element is already removed + dom instanceof HTMLMediaElement) { + teardown(() => { + dom.removeEventListener(event_name, target_handler, options); + }); + } +} +function delegated(event_name, element, handler) { + (element[event_symbol] ??= {})[event_name] = handler; +} +function delegate(events) { + for (var i = 0; i < events.length; i++) { + all_registered_events.add(events[i]); + } + for (var fn of root_event_handles) { + fn(events); + } +} +let last_propagated_event = null; +function handle_event_propagation(event2) { + var handler_element = this; + var owner_document = ( + /** @type {Node} */ + handler_element.ownerDocument + ); + var event_name = event2.type; + var path = event2.composedPath?.() || []; + var current_target = ( + /** @type {null | Element} */ + path[0] || event2.target + ); + last_propagated_event = event2; + var path_idx = 0; + var handled_at = last_propagated_event === event2 && event2[event_symbol]; + if (handled_at) { + var at_idx = path.indexOf(handled_at); + if (at_idx !== -1 && (handler_element === document || handler_element === /** @type {any} */ + window)) { + event2[event_symbol] = handler_element; + return; + } + var handler_idx = path.indexOf(handler_element); + if (handler_idx === -1) { + return; + } + if (at_idx <= handler_idx) { + path_idx = at_idx; + } + } + current_target = /** @type {Element} */ + path[path_idx] || event2.target; + if (current_target === handler_element) return; + define_property(event2, "currentTarget", { + configurable: true, + get() { + return current_target || owner_document; + } + }); + var previous_reaction = active_reaction; + var previous_effect = active_effect; + set_active_reaction(null); + set_active_effect(null); + try { + var throw_error; + var other_errors = []; + while (current_target !== null) { + var parent_element = current_target.assignedSlot || current_target.parentNode || /** @type {any} */ + current_target.host || null; + try { + var delegated2 = current_target[event_symbol]?.[event_name]; + if (delegated2 != null && (!/** @type {any} */ + current_target.disabled || // DOM could've been updated already by the time this is reached, so we check this as well + // -> the target could not have been disabled because it emits the event in the first place + event2.target === current_target)) { + delegated2.call(current_target, event2); + } + } catch (error) { + if (throw_error) { + other_errors.push(error); + } else { + throw_error = error; + } + } + if (event2.cancelBubble || parent_element === handler_element || parent_element === null) { + break; + } + current_target = parent_element; + } + if (throw_error) { + for (let error of other_errors) { + queueMicrotask(() => { + throw error; + }); + } + throw throw_error; + } + } finally { + event2[event_symbol] = handler_element; + delete event2.currentTarget; + set_active_reaction(previous_reaction); + set_active_effect(previous_effect); + } +} +const policy = ( + // We gotta write it like this because after downleveling the pure comment may end up in the wrong location + globalThis?.window?.trustedTypes && /* @__PURE__ */ globalThis.window.trustedTypes.createPolicy("svelte-trusted-html", { + /** @param {string} html */ + createHTML: (html2) => { + return html2; + } + }) +); +function create_trusted_html(html2) { + return ( + /** @type {string} */ + policy?.createHTML(html2) ?? html2 + ); +} +function create_fragment_from_html(html2) { + var elem = create_element("template"); + elem.innerHTML = create_trusted_html(html2.replaceAll("", "")); + return elem.content; +} +function assign_nodes(start, end) { + var effect2 = ( + /** @type {Effect} */ + active_effect + ); + if (effect2.nodes === null) { + effect2.nodes = { start, end, a: null, t: null }; + } +} +// @__NO_SIDE_EFFECTS__ +function from_html(content, flags2) { + var is_fragment = (flags2 & TEMPLATE_FRAGMENT) !== 0; + var use_import_node = (flags2 & TEMPLATE_USE_IMPORT_NODE) !== 0; + var node; + var has_start = !content.startsWith(""); + return () => { + if (hydrating) { + assign_nodes(hydrate_node, null); + return hydrate_node; + } + if (node === void 0) { + node = create_fragment_from_html(has_start ? content : "" + content); + if (!is_fragment) node = /** @type {TemplateNode} */ + /* @__PURE__ */ get_first_child(node); + } + var clone = ( + /** @type {TemplateNode} */ + use_import_node || is_firefox ? document.importNode(node, true) : node.cloneNode(true) + ); + if (is_fragment) { + var start = ( + /** @type {TemplateNode} */ + /* @__PURE__ */ get_first_child(clone) + ); + var end = ( + /** @type {TemplateNode} */ + clone.lastChild + ); + assign_nodes(start, end); + } else { + assign_nodes(clone, clone); + } + return clone; + }; +} +// @__NO_SIDE_EFFECTS__ +function from_namespace(content, flags2, ns = "svg") { + var has_start = !content.startsWith(""); + var wrapped = `<${ns}>${has_start ? content : "" + content}`; + var node; + return () => { + if (hydrating) { + assign_nodes(hydrate_node, null); + return hydrate_node; + } + if (!node) { + var fragment = ( + /** @type {DocumentFragment} */ + create_fragment_from_html(wrapped) + ); + var root2 = ( + /** @type {Element} */ + /* @__PURE__ */ get_first_child(fragment) + ); + { + node = /** @type {Element} */ + /* @__PURE__ */ get_first_child(root2); + } + } + var clone = ( + /** @type {TemplateNode} */ + node.cloneNode(true) + ); + { + assign_nodes(clone, clone); + } + return clone; + }; +} +// @__NO_SIDE_EFFECTS__ +function from_svg(content, flags2) { + return /* @__PURE__ */ from_namespace(content, flags2, "svg"); +} +function text(value = "") { + if (!hydrating) { + var t = create_text(value + ""); + assign_nodes(t, t); + return t; + } + var node = hydrate_node; + if (node.nodeType !== TEXT_NODE) { + node.before(node = create_text()); + set_hydrate_node(node); + } else { + merge_text_nodes( + /** @type {Text} */ + node + ); + } + assign_nodes(node, node); + return node; +} +function comment() { + if (hydrating) { + assign_nodes(hydrate_node, null); + return hydrate_node; + } + var frag = document.createDocumentFragment(); + var start = document.createComment(""); + var anchor = create_text(); + frag.append(start, anchor); + assign_nodes(start, anchor); + return frag; +} +function append(anchor, dom) { + if (hydrating) { + var effect2 = ( + /** @type {Effect & { nodes: EffectNodes }} */ + active_effect + ); + if ((effect2.f & REACTION_RAN) === 0 || effect2.nodes.end === null) { + effect2.nodes.end = hydrate_node; + } + hydrate_next(); + return; + } + if (anchor === null) { + return; + } + anchor.before( + /** @type {Node} */ + dom + ); +} +function is_capture_event(name) { + return name.endsWith("capture") && name !== "gotpointercapture" && name !== "lostpointercapture"; +} +const DELEGATED_EVENTS = [ + "beforeinput", + "click", + "change", + "dblclick", + "contextmenu", + "focusin", + "focusout", + "input", + "keydown", + "keyup", + "mousedown", + "mousemove", + "mouseout", + "mouseover", + "mouseup", + "pointerdown", + "pointermove", + "pointerout", + "pointerover", + "pointerup", + "touchend", + "touchmove", + "touchstart" +]; +function can_delegate_event(event_name) { + return DELEGATED_EVENTS.includes(event_name); +} +const ATTRIBUTE_ALIASES = { + // no `class: 'className'` because we handle that separately + formnovalidate: "formNoValidate", + ismap: "isMap", + nomodule: "noModule", + playsinline: "playsInline", + readonly: "readOnly", + defaultvalue: "defaultValue", + defaultchecked: "defaultChecked", + srcobject: "srcObject", + novalidate: "noValidate", + allowfullscreen: "allowFullscreen", + disablepictureinpicture: "disablePictureInPicture", + disableremoteplayback: "disableRemotePlayback" +}; +function normalize_attribute(name) { + name = name.toLowerCase(); + return ATTRIBUTE_ALIASES[name] ?? name; +} +const PASSIVE_EVENTS = ["touchstart", "touchmove"]; +function is_passive_event(name) { + return PASSIVE_EVENTS.includes(name); +} +function set_text(text2, value) { + var str = value == null ? "" : typeof value === "object" ? `${value}` : value; + if (str !== /** @type {any} */ + (text2[TEXT_CACHE] ??= text2.nodeValue)) { + text2[TEXT_CACHE] = str; + text2.nodeValue = `${str}`; + } +} +function mount(component2, options) { + return _mount(component2, options); +} +function hydrate(component2, options) { + init_operations(); + options.intro = options.intro ?? false; + const target = options.target; + const was_hydrating = hydrating; + const previous_hydrate_node = hydrate_node; + try { + var anchor = /* @__PURE__ */ get_first_child(target); + while (anchor && (anchor.nodeType !== COMMENT_NODE || /** @type {Comment} */ + anchor.data !== HYDRATION_START)) { + anchor = /* @__PURE__ */ get_next_sibling(anchor); + } + if (!anchor) { + throw HYDRATION_ERROR; + } + set_hydrating(true); + set_hydrate_node( + /** @type {Comment} */ + anchor + ); + const instance = _mount(component2, { ...options, anchor }); + set_hydrating(false); + return ( + /** @type {Exports} */ + instance + ); + } catch (error) { + if (error instanceof Error && error.message.split("\n").some((line) => line.startsWith("https://svelte.dev/e/"))) { + throw error; + } + if (error !== HYDRATION_ERROR) { + console.warn("Failed to hydrate: ", error); + } + if (options.recover === false) { + hydration_failed(); + } + init_operations(); + clear_text_content(target); + set_hydrating(false); + return mount(component2, options); + } finally { + set_hydrating(was_hydrating); + set_hydrate_node(previous_hydrate_node); + } +} +const listeners = /* @__PURE__ */ new Map(); +function _mount(Component, { target, anchor, props = {}, events, context, intro = true, transformError }) { + init_operations(); + var component2 = void 0; + var unmount2 = component_root(() => { + var anchor_node = anchor ?? target.appendChild(create_text()); + boundary( + /** @type {TemplateNode} */ + anchor_node, + { + pending: () => { + } + }, + (anchor_node2) => { + push({}); + var ctx = ( + /** @type {ComponentContext} */ + component_context + ); + if (context) ctx.c = context; + if (events) { + props.$$events = events; + } + if (hydrating) { + assign_nodes( + /** @type {TemplateNode} */ + anchor_node2, + null + ); + } + component2 = Component(anchor_node2, props) || {}; + if (hydrating) { + active_effect.nodes.end = hydrate_node; + if (hydrate_node === null || hydrate_node.nodeType !== COMMENT_NODE || /** @type {Comment} */ + hydrate_node.data !== HYDRATION_END) { + hydration_mismatch(); + throw HYDRATION_ERROR; + } + } + pop(); + }, + transformError + ); + var registered_events = /* @__PURE__ */ new Set(); + var event_handle = (events2) => { + for (var i = 0; i < events2.length; i++) { + var event_name = events2[i]; + if (registered_events.has(event_name)) continue; + registered_events.add(event_name); + var passive = is_passive_event(event_name); + for (const node of [target, document]) { + var counts = listeners.get(node); + if (counts === void 0) { + counts = /* @__PURE__ */ new Map(); + listeners.set(node, counts); + } + var count = counts.get(event_name); + if (count === void 0) { + node.addEventListener(event_name, handle_event_propagation, { passive }); + counts.set(event_name, 1); + } else { + counts.set(event_name, count + 1); + } + } + } + }; + event_handle(array_from(all_registered_events)); + root_event_handles.add(event_handle); + return () => { + for (var event_name of registered_events) { + for (const node of [target, document]) { + var counts = ( + /** @type {Map} */ + listeners.get(node) + ); + var count = ( + /** @type {number} */ + counts.get(event_name) + ); + if (--count == 0) { + node.removeEventListener(event_name, handle_event_propagation); + counts.delete(event_name); + if (counts.size === 0) { + listeners.delete(node); + } + } else { + counts.set(event_name, count); + } + } + } + root_event_handles.delete(event_handle); + if (anchor_node !== anchor) { + anchor_node.parentNode?.removeChild(anchor_node); + } + }; + }); + mounted_components.set(component2, unmount2); + return component2; +} +let mounted_components = /* @__PURE__ */ new WeakMap(); +function unmount(component2, options) { + const fn = mounted_components.get(component2); + if (fn) { + mounted_components.delete(component2); + return fn(options); + } + return Promise.resolve(); +} +class BranchManager { + /** @type {TemplateNode} */ + anchor; + /** @type {Map} */ + #batches = /* @__PURE__ */ new Map(); + /** + * Map of keys to effects that are currently rendered in the DOM. + * These effects are visible and actively part of the document tree. + * Example: + * ``` + * {#if condition} + * foo + * {:else} + * bar + * {/if} + * ``` + * Can result in the entries `true->Effect` and `false->Effect` + * @type {Map} + */ + #onscreen = /* @__PURE__ */ new Map(); + /** + * Similar to #onscreen with respect to the keys, but contains branches that are not yet + * in the DOM, because their insertion is deferred. + * @type {Map} + */ + #offscreen = /* @__PURE__ */ new Map(); + /** + * Keys of effects that are currently outroing + * @type {Set} + */ + #outroing = /* @__PURE__ */ new Set(); + /** + * Whether to pause (i.e. outro) on change, or destroy immediately. + * This is necessary for `` + */ + #transition = true; + /** + * @param {TemplateNode} anchor + * @param {boolean} transition + */ + constructor(anchor, transition = true) { + this.anchor = anchor; + this.#transition = transition; + } + /** + * @param {Batch} batch + */ + #commit = (batch) => { + if (!this.#batches.has(batch)) return; + var key2 = ( + /** @type {Key} */ + this.#batches.get(batch) + ); + var onscreen = this.#onscreen.get(key2); + if (onscreen) { + resume_effect(onscreen); + this.#outroing.delete(key2); + } else { + var offscreen = this.#offscreen.get(key2); + if (offscreen) { + this.#onscreen.set(key2, offscreen.effect); + this.#offscreen.delete(key2); + offscreen.fragment.lastChild.remove(); + this.anchor.before(offscreen.fragment); + onscreen = offscreen.effect; + } + } + for (const [b, k] of this.#batches) { + this.#batches.delete(b); + if (b === batch) { + break; + } + const offscreen2 = this.#offscreen.get(k); + if (offscreen2) { + destroy_effect(offscreen2.effect); + this.#offscreen.delete(k); + } + } + for (const [k, effect2] of this.#onscreen) { + if (k === key2 || this.#outroing.has(k)) continue; + const on_destroy = () => { + const keys = Array.from(this.#batches.values()); + if (keys.includes(k)) { + var fragment = document.createDocumentFragment(); + move_effect(effect2, fragment); + fragment.append(create_text()); + this.#offscreen.set(k, { effect: effect2, fragment }); + } else { + destroy_effect(effect2); + } + this.#outroing.delete(k); + this.#onscreen.delete(k); + }; + if (this.#transition || !onscreen) { + this.#outroing.add(k); + pause_effect(effect2, on_destroy, false); + } else { + on_destroy(); + } + } + }; + /** + * @param {Batch} batch + */ + #discard = (batch) => { + this.#batches.delete(batch); + const keys = Array.from(this.#batches.values()); + for (const [k, branch2] of this.#offscreen) { + if (!keys.includes(k)) { + destroy_effect(branch2.effect); + this.#offscreen.delete(k); + } + } + }; + /** + * + * @param {any} key + * @param {null | ((target: TemplateNode) => void)} fn + */ + ensure(key2, fn) { + var batch = ( + /** @type {Batch} */ + current_batch + ); + var defer = should_defer_append(); + if (fn && !this.#onscreen.has(key2) && !this.#offscreen.has(key2)) { + if (defer) { + var fragment = document.createDocumentFragment(); + var target = create_text(); + fragment.append(target); + this.#offscreen.set(key2, { + effect: branch(() => fn(target)), + fragment + }); + } else { + this.#onscreen.set( + key2, + branch(() => fn(this.anchor)) + ); + } + } + this.#batches.set(batch, key2); + if (defer) { + for (const [k, effect2] of this.#onscreen) { + if (k === key2) { + batch.unskip_effect(effect2); + } else { + batch.skip_effect(effect2); + } + } + for (const [k, branch2] of this.#offscreen) { + if (k === key2) { + batch.unskip_effect(branch2.effect); + } else { + batch.skip_effect(branch2.effect); + } + } + batch.oncommit(this.#commit); + batch.ondiscard(this.#discard); + } else { + if (hydrating) { + this.anchor = hydrate_node; + } + this.#commit(batch); + } + } +} +function snippet(node, get_snippet, ...args) { + var branches = new BranchManager(node); + block(() => { + const snippet2 = get_snippet() ?? null; + branches.ensure(snippet2, snippet2 && ((anchor) => snippet2(anchor, ...args))); + }, EFFECT_TRANSPARENT); +} +function onMount(fn) { + if (component_context === null) { + lifecycle_outside_component(); + } + { + user_effect(() => { + const cleanup = untrack(fn); + if (typeof cleanup === "function") return ( + /** @type {() => void} */ + cleanup + ); + }); + } +} +function if_block(node, fn, elseif = false) { + var marker; + if (hydrating) { + marker = hydrate_node; + hydrate_next(); + } + var branches = new BranchManager(node); + var flags2 = elseif ? EFFECT_TRANSPARENT : 0; + function update_branch(key2, fn2) { + if (hydrating) { + var data = read_hydration_instruction( + /** @type {TemplateNode} */ + marker + ); + if (key2 !== parseInt(data.substring(1))) { + var anchor = skip_nodes(); + set_hydrate_node(anchor); + branches.anchor = anchor; + set_hydrating(false); + branches.ensure(key2, fn2); + set_hydrating(true); + return; + } + } + branches.ensure(key2, fn2); + } + block(() => { + var has_branch = false; + fn((fn2, key2 = 0) => { + has_branch = true; + update_branch(key2, fn2); + }); + if (!has_branch) { + update_branch(-1, null); + } + }, flags2); +} +const NAN = /* @__PURE__ */ Symbol("NaN"); +function key(node, get_key, render_fn) { + if (hydrating) { + hydrate_next(); + } + var branches = new BranchManager(node); + block(() => { + var key2 = get_key(); + if (key2 !== key2) { + key2 = /** @type {any} */ + NAN; + } + branches.ensure(key2, render_fn); + }); +} +function html(node, get_value, is_controlled = false, svg = false, mathml = false, skip_warning = false) { + var anchor = node; + var value = ""; + if (is_controlled) { + var parent_node = ( + /** @type {Element} */ + node + ); + if (hydrating) { + anchor = set_hydrate_node(/* @__PURE__ */ get_first_child(parent_node)); + } + } + template_effect(() => { + var effect2 = ( + /** @type {Effect} */ + active_effect + ); + if (value === (value = get_value() ?? "")) { + if (hydrating) hydrate_next(); + return; + } + if (is_controlled && !hydrating) { + effect2.nodes = null; + parent_node.innerHTML = /** @type {string} */ + value; + if (value !== "") { + assign_nodes( + /** @type {TemplateNode} */ + /* @__PURE__ */ get_first_child(parent_node), + /** @type {TemplateNode} */ + parent_node.lastChild + ); + } + return; + } + if (effect2.nodes !== null) { + remove_effect_dom( + effect2.nodes.start, + /** @type {TemplateNode} */ + effect2.nodes.end + ); + effect2.nodes = null; + } + if (value === "") return; + if (hydrating) { + hydrate_node.data; + var next2 = hydrate_next(); + var last = next2; + while (next2 !== null && (next2.nodeType !== COMMENT_NODE || /** @type {Comment} */ + next2.data !== "")) { + last = next2; + next2 = /* @__PURE__ */ get_next_sibling(next2); + } + if (next2 === null) { + hydration_mismatch(); + throw HYDRATION_ERROR; + } + assign_nodes(hydrate_node, last); + anchor = set_hydrate_node(next2); + return; + } + var ns = svg ? NAMESPACE_SVG : mathml ? NAMESPACE_MATHML : void 0; + var wrapper = ( + /** @type {HTMLTemplateElement | SVGElement | MathMLElement} */ + create_element(svg ? "svg" : mathml ? "math" : "template", ns) + ); + wrapper.innerHTML = /** @type {any} */ + value; + var node2 = svg || mathml ? wrapper : ( + /** @type {HTMLTemplateElement} */ + wrapper.content + ); + assign_nodes( + /** @type {TemplateNode} */ + /* @__PURE__ */ get_first_child(node2), + /** @type {TemplateNode} */ + node2.lastChild + ); + if (svg || mathml) { + while (/* @__PURE__ */ get_first_child(node2)) { + anchor.before( + /** @type {TemplateNode} */ + /* @__PURE__ */ get_first_child(node2) + ); + } + } else { + anchor.before(node2); + } + }); +} +function component(node, get_component, render_fn) { + var hydration_start_node; + if (hydrating) { + hydration_start_node = hydrate_node; + hydrate_next(); + } + var branches = new BranchManager(node); + block(() => { + var component2 = get_component() ?? null; + if (hydrating) { + var data = read_hydration_instruction( + /** @type {TemplateNode} */ + hydration_start_node + ); + var server_had_component = data === HYDRATION_START; + var client_has_component = component2 !== null; + if (server_had_component !== client_has_component) { + var anchor = skip_nodes(); + set_hydrate_node(anchor); + branches.anchor = anchor; + set_hydrating(false); + branches.ensure(component2, component2 && ((target) => render_fn(target, component2))); + set_hydrating(true); + return; + } + } + branches.ensure(component2, component2 && ((target) => render_fn(target, component2))); + }, EFFECT_TRANSPARENT); +} +function attach(node, get_fn) { + var fn = void 0; + var e; + managed(() => { + if (fn !== (fn = get_fn())) { + if (e) { + destroy_effect(e); + e = null; + } + if (fn) { + e = branch(() => { + effect(() => ( + /** @type {(node: Element) => void} */ + fn(node) + )); + }); + } + } + }); +} +function r(e) { + var t, f, n = ""; + if ("string" == typeof e || "number" == typeof e) n += e; + else if ("object" == typeof e) if (Array.isArray(e)) { + var o = e.length; + for (t = 0; t < o; t++) e[t] && (f = r(e[t])) && (n && (n += " "), n += f); + } else for (f in e) e[f] && (n && (n += " "), n += f); + return n; +} +function clsx$1() { + for (var e, t, f = 0, n = "", o = arguments.length; f < o; f++) (e = arguments[f]) && (t = r(e)) && (n && (n += " "), n += t); + return n; +} +function clsx(value) { + if (typeof value === "object") { + return clsx$1(value); + } else { + return value ?? ""; + } +} +const whitespace = [..." \n\r\f \v\uFEFF"]; +function to_class(value, hash, directives) { + var classname = value == null ? "" : "" + value; + if (directives) { + for (var key2 of Object.keys(directives)) { + if (directives[key2]) { + classname = classname ? classname + " " + key2 : key2; + } else if (classname.length) { + var len = key2.length; + var a = 0; + while ((a = classname.indexOf(key2, a)) >= 0) { + var b = a + len; + if ((a === 0 || whitespace.includes(classname[a - 1])) && (b === classname.length || whitespace.includes(classname[b]))) { + classname = (a === 0 ? "" : classname.substring(0, a)) + classname.substring(b + 1); + } else { + a = b; + } + } + } + } + } + return classname === "" ? null : classname; +} +function append_styles(styles, important = false) { + var separator = important ? " !important;" : ";"; + var css2 = ""; + for (var key2 of Object.keys(styles)) { + var value = styles[key2]; + if (value != null && value !== "") { + css2 += " " + key2 + ": " + value + separator; + } + } + return css2; +} +function to_css_name(name) { + if (name[0] !== "-" || name[1] !== "-") { + return name.toLowerCase(); + } + return name; +} +function to_style(value, styles) { + if (styles) { + var new_style = ""; + var normal_styles; + var important_styles; + if (Array.isArray(styles)) { + normal_styles = styles[0]; + important_styles = styles[1]; + } else { + normal_styles = styles; + } + if (value) { + value = String(value).replaceAll(/\s*\/\*.*?\*\/\s*/g, "").trim(); + var in_str = false; + var in_apo = 0; + var in_comment = false; + var reserved_names = []; + if (normal_styles) { + reserved_names.push(...Object.keys(normal_styles).map(to_css_name)); + } + if (important_styles) { + reserved_names.push(...Object.keys(important_styles).map(to_css_name)); + } + var start_index = 0; + var name_index = -1; + const len = value.length; + for (var i = 0; i < len; i++) { + var c = value[i]; + if (in_comment) { + if (c === "/" && value[i - 1] === "*") { + in_comment = false; + } + } else if (in_str) { + if (in_str === c) { + in_str = false; + } + } else if (c === "/" && value[i + 1] === "*") { + in_comment = true; + } else if (c === '"' || c === "'") { + in_str = c; + } else if (c === "(") { + in_apo++; + } else if (c === ")") { + in_apo--; + } + if (!in_comment && in_str === false && in_apo === 0) { + if (c === ":" && name_index === -1) { + name_index = i; + } else if (c === ";" || i === len - 1) { + if (name_index !== -1) { + var name = to_css_name(value.substring(start_index, name_index).trim()); + if (!reserved_names.includes(name)) { + if (c !== ";") { + i++; + } + var property = value.substring(start_index, i).trim(); + new_style += " " + property + ";"; + } + } + start_index = i + 1; + name_index = -1; + } + } + } + } + if (normal_styles) { + new_style += append_styles(normal_styles); + } + if (important_styles) { + new_style += append_styles(important_styles, true); + } + new_style = new_style.trim(); + return new_style === "" ? null : new_style; + } + return value == null ? null : String(value); +} +function set_class(dom, is_html, value, hash, prev_classes, next_classes) { + var prev = ( + /** @type {any} */ + dom[CLASS_CACHE] + ); + if (hydrating || prev !== value || prev === void 0) { + var next_class_name = to_class(value, hash, next_classes); + if (!hydrating || next_class_name !== dom.getAttribute("class")) { + if (next_class_name == null) { + dom.removeAttribute("class"); + } else if (is_html) { + dom.className = next_class_name; + } else { + dom.setAttribute("class", next_class_name); + } + } + dom[CLASS_CACHE] = value; + } else if (next_classes && prev_classes !== next_classes) { + for (var key2 in next_classes) { + var is_present = !!next_classes[key2]; + if (prev_classes == null || is_present !== !!prev_classes[key2]) { + dom.classList.toggle(key2, is_present); + } + } + } + return next_classes; +} +function update_styles(dom, prev = {}, next2, priority) { + for (var key2 in next2) { + var value = next2[key2]; + if (prev[key2] !== value) { + if (next2[key2] == null) { + dom.style.removeProperty(key2); + } else { + dom.style.setProperty(key2, value, priority); + } + } + } +} +function set_style(dom, value, prev_styles, next_styles) { + var prev = ( + /** @type {any} */ + dom[STYLE_CACHE] + ); + if (hydrating || prev !== value) { + var next_style_attr = to_style(value, next_styles); + if (!hydrating || next_style_attr !== dom.getAttribute("style")) { + if (next_style_attr == null) { + dom.removeAttribute("style"); + } else { + dom.style.cssText = next_style_attr; + } + } + dom[STYLE_CACHE] = value; + } else if (next_styles) { + if (Array.isArray(next_styles)) { + update_styles(dom, prev_styles?.[0], next_styles[0]); + update_styles(dom, prev_styles?.[1], next_styles[1], "important"); + } else { + update_styles(dom, prev_styles, next_styles); + } + } + return next_styles; +} +function select_option(select, value, mounting = false) { + if (select.multiple) { + if (value == void 0) { + return; + } + if (!is_array(value)) { + return select_multiple_invalid_value(); + } + for (var option of select.options) { + option.selected = value.includes(get_option_value(option)); + } + return; + } + for (option of select.options) { + var option_value = get_option_value(option); + if (is(option_value, value)) { + option.selected = true; + return; + } + } + if (!mounting || value !== void 0) { + select.selectedIndex = -1; + } +} +function init_select(select) { + var observer = new MutationObserver(() => { + select_option(select, select.__value); + }); + observer.observe(select, { + // Listen to option element changes + childList: true, + subtree: true, + // because of + // Listen to option element value attribute changes + // (doesn't get notified of select value changes, + // because that property is not reflected as an attribute) + attributes: true, + attributeFilter: ["value"] + }); + teardown(() => { + observer.disconnect(); + }); +} +function get_option_value(option) { + if ("__value" in option) { + return option.__value; + } else { + return option.value; + } +} +const CLASS = /* @__PURE__ */ Symbol("class"); +const STYLE = /* @__PURE__ */ Symbol("style"); +const IS_CUSTOM_ELEMENT = /* @__PURE__ */ Symbol("is custom element"); +const IS_HTML = /* @__PURE__ */ Symbol("is html"); +const LINK_TAG = IS_XHTML ? "link" : "LINK"; +const INPUT_TAG = IS_XHTML ? "input" : "INPUT"; +const OPTION_TAG = IS_XHTML ? "option" : "OPTION"; +const SELECT_TAG = IS_XHTML ? "select" : "SELECT"; +const PROGRESS_TAG = IS_XHTML ? "progress" : "PROGRESS"; +function remove_input_defaults(input) { + if (!hydrating) return; + var already_removed = false; + var remove_defaults = () => { + if (already_removed) return; + already_removed = true; + if (input.hasAttribute("value")) { + var value = input.value; + set_attribute(input, "value", null); + input.value = value; + } + if (input.hasAttribute("checked")) { + var checked = input.checked; + set_attribute(input, "checked", null); + input.checked = checked; + } + }; + input[FORM_RESET_HANDLER] = remove_defaults; + queue_micro_task(remove_defaults); + add_form_reset_listener(); +} +function set_value(element, value) { + var attributes = get_attributes(element); + if (attributes.value === (attributes.value = // treat null and undefined the same for the initial value + value ?? void 0) || // @ts-expect-error + // `progress` elements always need their value set when it's `0` + element.value === value && (value !== 0 || element.nodeName !== PROGRESS_TAG)) { + return; + } + element.value = value ?? ""; +} +function set_selected(element, selected) { + if (selected) { + if (!element.hasAttribute("selected")) { + element.setAttribute("selected", ""); + } + } else { + element.removeAttribute("selected"); + } +} +function set_attribute(element, attribute, value, skip_warning) { + var attributes = get_attributes(element); + if (hydrating) { + attributes[attribute] = element.getAttribute(attribute); + if (attribute === "src" || attribute === "srcset" || attribute === "href" && element.nodeName === LINK_TAG) { + return; + } + } + if (attributes[attribute] === (attributes[attribute] = value)) return; + if (attribute === "loading") { + element[LOADING_ATTR_SYMBOL] = value; + } + if (value == null) { + element.removeAttribute(attribute); + } else if (typeof value !== "string" && get_setters(element).includes(attribute)) { + element[attribute] = value; + } else { + element.setAttribute(attribute, value); + } +} +function set_attributes(element, prev, next2, css_hash, should_remove_defaults = false, skip_warning = false) { + if (hydrating && should_remove_defaults && element.nodeName === INPUT_TAG) { + var input = ( + /** @type {HTMLInputElement} */ + element + ); + var attribute = input.type === "checkbox" ? "defaultChecked" : "defaultValue"; + if (!(attribute in next2)) { + remove_input_defaults(input); + } + } + var attributes = get_attributes(element); + var is_custom_element = attributes[IS_CUSTOM_ELEMENT]; + var preserve_attribute_case = !attributes[IS_HTML]; + let is_hydrating_custom_element = hydrating && is_custom_element; + if (is_hydrating_custom_element) { + set_hydrating(false); + } + var current = prev || {}; + var is_option_element = element.nodeName === OPTION_TAG; + for (var key2 in prev) { + if (!(key2 in next2)) { + next2[key2] = null; + } + } + if (next2.class) { + next2.class = clsx(next2.class); + } else if (next2[CLASS]) { + next2.class = null; + } + if (next2[STYLE]) { + next2.style ??= null; + } + var setters = get_setters(element); + for (const key3 in next2) { + let value = next2[key3]; + if (is_option_element && key3 === "value" && value == null) { + element.value = element.__value = ""; + current[key3] = value; + continue; + } + if (key3 === "class") { + var is_html = element.namespaceURI === "http://www.w3.org/1999/xhtml"; + set_class(element, is_html, value, css_hash, prev?.[CLASS], next2[CLASS]); + current[key3] = value; + current[CLASS] = next2[CLASS]; + continue; + } + if (key3 === "style") { + set_style(element, value, prev?.[STYLE], next2[STYLE]); + current[key3] = value; + current[STYLE] = next2[STYLE]; + continue; + } + var prev_value = current[key3]; + if (value === prev_value && !(value === void 0 && element.hasAttribute(key3))) { + continue; + } + current[key3] = value; + var prefix = key3[0] + key3[1]; + if (prefix === "$$") continue; + if (prefix === "on") { + const opts = {}; + const event_handle_key = "$$" + key3; + let event_name = key3.slice(2); + var is_delegated = can_delegate_event(event_name); + if (is_capture_event(event_name)) { + event_name = event_name.slice(0, -7); + opts.capture = true; + } + if (!is_delegated && prev_value) { + if (value != null) continue; + element.removeEventListener(event_name, current[event_handle_key], opts); + current[event_handle_key] = null; + } + if (is_delegated) { + delegated(event_name, element, value); + delegate([event_name]); + } else if (value != null) { + let handle2 = function(evt) { + current[key3].call(this, evt); + }; + var handle = handle2; + current[event_handle_key] = create_event(event_name, element, handle2, opts); + } + } else if (key3 === "style") { + set_attribute(element, key3, value); + } else if (key3 === "autofocus") { + autofocus( + /** @type {HTMLElement} */ + element, + Boolean(value) + ); + } else if (!is_custom_element && (key3 === "__value" || key3 === "value" && value != null)) { + element.value = element.__value = value; + } else if (key3 === "selected" && is_option_element) { + set_selected( + /** @type {HTMLOptionElement} */ + element, + value + ); + } else { + var name = key3; + if (!preserve_attribute_case) { + name = normalize_attribute(name); + } + var is_default = name === "defaultValue" || name === "defaultChecked"; + if (value == null && !is_custom_element && !is_default) { + attributes[key3] = null; + if (name === "value" || name === "checked") { + let input2 = ( + /** @type {HTMLInputElement} */ + element + ); + const use_default = prev === void 0; + if (name === "value") { + let previous = input2.defaultValue; + input2.removeAttribute(name); + input2.defaultValue = previous; + input2.value = input2.__value = use_default ? previous : null; + } else { + let previous = input2.defaultChecked; + input2.removeAttribute(name); + input2.defaultChecked = previous; + input2.checked = use_default ? previous : false; + } + } else { + element.removeAttribute(key3); + } + } else if (is_default || setters.includes(name) && (is_custom_element || typeof value !== "string")) { + element[name] = value; + if (name in attributes) attributes[name] = UNINITIALIZED; + } else if (typeof value !== "function") { + set_attribute(element, name, value); + } + } + } + if (is_hydrating_custom_element) { + set_hydrating(true); + } + return current; +} +function attribute_effect(element, fn, sync = [], async = [], blockers = [], css_hash, should_remove_defaults = false, skip_warning = false) { + flatten(blockers, sync, async, (values) => { + var prev = void 0; + var effects = {}; + var is_select = element.nodeName === SELECT_TAG; + var inited = false; + managed(() => { + var next2 = fn(...values.map(get)); + var current = set_attributes( + element, + prev, + next2, + css_hash, + should_remove_defaults, + skip_warning + ); + if (inited && is_select && "value" in next2) { + select_option( + /** @type {HTMLSelectElement} */ + element, + next2.value + ); + } + for (let symbol of Object.getOwnPropertySymbols(effects)) { + if (!next2[symbol]) destroy_effect(effects[symbol]); + } + for (let symbol of Object.getOwnPropertySymbols(next2)) { + var n = next2[symbol]; + if (symbol.description === ATTACHMENT_KEY && (!prev || n !== prev[symbol])) { + if (effects[symbol]) destroy_effect(effects[symbol]); + effects[symbol] = branch(() => attach(element, () => n)); + } + current[symbol] = n; + } + prev = current; + }); + if (is_select) { + var select = ( + /** @type {HTMLSelectElement} */ + element + ); + effect(() => { + select_option( + select, + /** @type {Record} */ + prev.value, + true + ); + init_select(select); + }); + } + inited = true; + }); +} +function get_attributes(element) { + return ( + /** @type {Record} **/ + /** @type {any} */ + element[ATTRIBUTES_CACHE] ??= { + [IS_CUSTOM_ELEMENT]: element.nodeName.includes("-"), + [IS_HTML]: element.namespaceURI === NAMESPACE_HTML + } + ); +} +var setters_cache = /* @__PURE__ */ new Map(); +function get_setters(element) { + var cache_key = element.getAttribute("is") || element.nodeName; + var setters = setters_cache.get(cache_key); + if (setters) return setters; + setters_cache.set(cache_key, setters = []); + var descriptors; + var proto = element; + var element_proto = Element.prototype; + while (element_proto !== proto) { + descriptors = get_descriptors(proto); + for (var key2 in descriptors) { + if (descriptors[key2].set && // better safe than sorry, we don't want spread attributes to mess with HTML content + key2 !== "innerHTML" && key2 !== "textContent" && key2 !== "innerText") { + setters.push(key2); + } + } + proto = get_prototype_of(proto); + } + return setters; +} +function bind_value(input, get2, set2 = get2) { + var batches = /* @__PURE__ */ new WeakSet(); + listen_to_event_and_reset_event(input, "input", async (is_reset) => { + var value = is_reset ? input.defaultValue : input.value; + value = is_numberlike_input(input) ? to_number(value) : value; + set2(value); + if (current_batch !== null) { + batches.add(current_batch); + } + await tick(); + if (value !== (value = get2())) { + var start = input.selectionStart; + var end = input.selectionEnd; + var length = input.value.length; + input.value = value ?? ""; + if (end !== null) { + var new_length = input.value.length; + if (start === end && end === length && new_length > length) { + input.selectionStart = new_length; + input.selectionEnd = new_length; + } else { + input.selectionStart = start; + input.selectionEnd = Math.min(end, new_length); + } + } + } + }); + if ( + // If we are hydrating and the value has since changed, + // then use the updated value from the input instead. + hydrating && input.defaultValue !== input.value || // If defaultValue is set, then value == defaultValue + // TODO Svelte 6: remove input.value check and set to empty string? + untrack(get2) == null && input.value + ) { + set2(is_numberlike_input(input) ? to_number(input.value) : input.value); + if (current_batch !== null) { + batches.add(current_batch); + } + } + render_effect(() => { + var value = get2(); + if (input === document.activeElement) { + var batch = ( + /** @type {Batch} */ + current_batch + ); + if (batches.has(batch)) { + return; + } + } + if (is_numberlike_input(input) && value === to_number(input.value)) { + return; + } + if (input.type === "date" && !value && !input.value) { + return; + } + if (value !== input.value) { + input.value = value ?? ""; + } + }); +} +function is_numberlike_input(input) { + var type = input.type; + return type === "number" || type === "range"; +} +function to_number(value) { + return value === "" ? null : +value; +} +function is_bound_this(bound_value, element_or_component) { + return bound_value === element_or_component || bound_value?.[STATE_SYMBOL] === element_or_component; +} +function bind_this(element_or_component = {}, update, get_value, get_parts) { + var component_effect = ( + /** @type {ComponentContext} */ + component_context.r + ); + var parent = ( + /** @type {Effect} */ + active_effect + ); + effect(() => { + var old_parts; + var parts; + render_effect(() => { + old_parts = parts; + parts = []; + untrack(() => { + if (!is_bound_this(get_value(...parts), element_or_component)) { + update(element_or_component, ...parts); + if (old_parts && is_bound_this(get_value(...old_parts), element_or_component)) { + update(null, ...old_parts); + } + } + }); + }); + return () => { + let p = parent; + while (p !== component_effect && p.parent !== null && p.parent.f & DESTROYING) { + p = p.parent; + } + const teardown2 = () => { + if (parts && is_bound_this(get_value(...parts), element_or_component)) { + update(null, ...parts); + } + }; + const original_teardown = p.teardown; + p.teardown = () => { + teardown2(); + original_teardown?.(); + }; + }; + }); + return element_or_component; +} +const rest_props_handler = { + get(target, key2) { + if (target.exclude.includes(key2)) return; + return target.props[key2]; + }, + set(target, key2) { + return false; + }, + getOwnPropertyDescriptor(target, key2) { + if (target.exclude.includes(key2)) return; + if (key2 in target.props) { + return { + enumerable: true, + configurable: true, + value: target.props[key2] + }; + } + }, + has(target, key2) { + if (target.exclude.includes(key2)) return false; + return key2 in target.props; + }, + ownKeys(target) { + return Reflect.ownKeys(target.props).filter((key2) => !target.exclude.includes(key2)); + } +}; +// @__NO_SIDE_EFFECTS__ +function rest_props(props, exclude, name) { + return new Proxy( + { props, exclude }, + rest_props_handler + ); +} +function prop(props, key2, flags2, fallback) { + var fallback_value = ( + /** @type {V} */ + fallback + ); + var fallback_dirty = true; + var get_fallback = () => { + if (fallback_dirty) { + fallback_dirty = false; + fallback_value = /** @type {V} */ + fallback; + } + return fallback_value; + }; + var initial_value; + { + initial_value = /** @type {V} */ + props[key2]; + } + if (initial_value === void 0 && fallback !== void 0) { + initial_value = get_fallback(); + } + var getter; + { + getter = () => { + var value = ( + /** @type {V} */ + props[key2] + ); + if (value === void 0) return get_fallback(); + fallback_dirty = true; + return value; + }; + } + var overridden = false; + var d = /* @__PURE__ */ derived(() => { + overridden = false; + return getter(); + }); + var parent_effect = ( + /** @type {Effect} */ + active_effect + ); + return ( + /** @type {() => V} */ + (function(value, mutation) { + if (arguments.length > 0) { + const new_value = mutation ? get(d) : value; + set(d, new_value); + overridden = true; + if (fallback_value !== void 0) { + fallback_value = new_value; + } + return value; + } + if (is_destroying_effect && overridden || (parent_effect.f & DESTROYED) !== 0) { + return d.v; + } + return get(d); + }) + ); +} +function createClassComponent(options) { + return new Svelte4Component(options); +} +class Svelte4Component { + /** @type {any} */ + #events; + /** @type {Record} */ + #instance; + /** + * @param {ComponentConstructorOptions & { + * component: any; + * }} options + */ + constructor(options) { + var sources = /* @__PURE__ */ new Map(); + var add_source = (key2, value) => { + var s = /* @__PURE__ */ mutable_source(value, false, false); + sources.set(key2, s); + return s; + }; + const props = new Proxy( + { ...options.props || {}, $$events: {} }, + { + get(target, prop2) { + return get(sources.get(prop2) ?? add_source(prop2, Reflect.get(target, prop2))); + }, + has(target, prop2) { + if (prop2 === LEGACY_PROPS) return true; + get(sources.get(prop2) ?? add_source(prop2, Reflect.get(target, prop2))); + return Reflect.has(target, prop2); + }, + set(target, prop2, value) { + set(sources.get(prop2) ?? add_source(prop2, value), value); + return Reflect.set(target, prop2, value); + } + } + ); + this.#instance = (options.hydrate ? hydrate : mount)(options.component, { + target: options.target, + anchor: options.anchor, + props, + context: options.context, + intro: options.intro ?? false, + recover: options.recover, + transformError: options.transformError + }); + if (!options?.props?.$$host || options.sync === false) { + flushSync(); + } + this.#events = props.$$events; + for (const key2 of Object.keys(this.#instance)) { + if (key2 === "$set" || key2 === "$destroy" || key2 === "$on") continue; + define_property(this, key2, { + get() { + return this.#instance[key2]; + }, + /** @param {any} value */ + set(value) { + this.#instance[key2] = value; + }, + enumerable: true + }); + } + this.#instance.$set = /** @param {Record} next */ + (next2) => { + Object.assign(props, next2); + }; + this.#instance.$destroy = () => { + unmount(this.#instance); + }; + } + /** @param {Record} props */ + $set(props) { + this.#instance.$set(props); + } + /** + * @param {string} event + * @param {(...args: any[]) => any} callback + * @returns {any} + */ + $on(event2, callback) { + this.#events[event2] = this.#events[event2] || []; + const cb = (...args) => callback.call(this, ...args); + this.#events[event2].push(cb); + return () => { + this.#events[event2] = this.#events[event2].filter( + /** @param {any} fn */ + (fn) => fn !== cb + ); + }; + } + $destroy() { + this.#instance.$destroy(); + } +} +let SvelteElement = class { +}; +if (typeof HTMLElement === "function") { + SvelteElement = class extends HTMLElement { + /** The Svelte component constructor */ + $$ctor; + /** Slots */ + $$s; + /** @type {any} The Svelte component instance */ + $$c; + /** Whether or not the custom element is connected */ + $$cn = false; + /** @type {Record} Component props data */ + $$d = {}; + /** `true` if currently in the process of reflecting component props back to attributes */ + $$r = false; + /** @type {Record} Props definition (name, reflected, type etc) */ + $$p_d = {}; + /** @type {Record} Event listeners */ + $$l = {}; + /** @type {Map} Event listener unsubscribe functions */ + $$l_u = /* @__PURE__ */ new Map(); + /** @type {any} The managed render effect for reflecting attributes */ + $$me; + /** @type {ShadowRoot | null} The ShadowRoot of the custom element */ + $$shadowRoot = null; + /** + * @param {*} $$componentCtor + * @param {*} $$slots + * @param {ShadowRootInit | undefined} shadow_root_init + */ + constructor($$componentCtor, $$slots, shadow_root_init) { + super(); + this.$$ctor = $$componentCtor; + this.$$s = $$slots; + if (shadow_root_init) { + this.$$shadowRoot = this.attachShadow(shadow_root_init); + } + } + /** + * @param {string} type + * @param {EventListenerOrEventListenerObject} listener + * @param {boolean | AddEventListenerOptions} [options] + */ + addEventListener(type, listener, options) { + this.$$l[type] = this.$$l[type] || []; + this.$$l[type].push(listener); + if (this.$$c) { + const unsub = this.$$c.$on(type, listener); + this.$$l_u.set(listener, unsub); + } + super.addEventListener(type, listener, options); + } + /** + * @param {string} type + * @param {EventListenerOrEventListenerObject} listener + * @param {boolean | AddEventListenerOptions} [options] + */ + removeEventListener(type, listener, options) { + super.removeEventListener(type, listener, options); + if (this.$$c) { + const unsub = this.$$l_u.get(listener); + if (unsub) { + unsub(); + this.$$l_u.delete(listener); + } + } + } + async connectedCallback() { + this.$$cn = true; + if (!this.$$c) { + let create_slot2 = function(name) { + return (anchor) => { + const slot = create_element("slot"); + if (name !== "default") slot.name = name; + append(anchor, slot); + }; + }; + var create_slot = create_slot2; + await Promise.resolve(); + if (!this.$$cn || this.$$c) { + return; + } + const $$slots = {}; + const existing_slots = get_custom_elements_slots(this); + for (const name of this.$$s) { + if (name in existing_slots) { + if (name === "default" && !this.$$d.children) { + this.$$d.children = create_slot2(name); + $$slots.default = true; + } else { + $$slots[name] = create_slot2(name); + } + } + } + for (const attribute of this.attributes) { + const name = this.$$g_p(attribute.name); + if (!(name in this.$$d)) { + this.$$d[name] = get_custom_element_value(name, attribute.value, this.$$p_d, "toProp"); + } + } + for (const key2 in this.$$p_d) { + if (!(key2 in this.$$d) && this[key2] !== void 0) { + this.$$d[key2] = this[key2]; + delete this[key2]; + } + } + this.$$c = createClassComponent({ + component: this.$$ctor, + target: this.$$shadowRoot || this, + props: { + ...this.$$d, + $$slots, + $$host: this + } + }); + this.$$me = effect_root(() => { + render_effect(() => { + this.$$r = true; + for (const key2 of object_keys(this.$$c)) { + if (!this.$$p_d[key2]?.reflect) continue; + this.$$d[key2] = this.$$c[key2]; + const attribute_value = get_custom_element_value( + key2, + this.$$d[key2], + this.$$p_d, + "toAttribute" + ); + if (attribute_value == null) { + this.removeAttribute(this.$$p_d[key2].attribute || key2); + } else { + this.setAttribute(this.$$p_d[key2].attribute || key2, attribute_value); + } + } + this.$$r = false; + }); + }); + for (const type in this.$$l) { + for (const listener of this.$$l[type]) { + const unsub = this.$$c.$on(type, listener); + this.$$l_u.set(listener, unsub); + } + } + this.$$l = {}; + } + } + // We don't need this when working within Svelte code, but for compatibility of people using this outside of Svelte + // and setting attributes through setAttribute etc, this is helpful + /** + * @param {string} attr + * @param {string} _oldValue + * @param {string} newValue + */ + attributeChangedCallback(attr, _oldValue, newValue) { + if (this.$$r) return; + attr = this.$$g_p(attr); + this.$$d[attr] = get_custom_element_value(attr, newValue, this.$$p_d, "toProp"); + this.$$c?.$set({ [attr]: this.$$d[attr] }); + } + disconnectedCallback() { + this.$$cn = false; + Promise.resolve().then(() => { + if (!this.$$cn && this.$$c) { + this.$$c.$destroy(); + this.$$me(); + this.$$c = void 0; + } + }); + } + /** + * @param {string} attribute_name + */ + $$g_p(attribute_name) { + return object_keys(this.$$p_d).find( + (key2) => this.$$p_d[key2].attribute === attribute_name || !this.$$p_d[key2].attribute && key2.toLowerCase() === attribute_name + ) || attribute_name; + } + }; +} +function get_custom_element_value(prop2, value, props_definition, transform) { + const type = props_definition[prop2]?.type; + value = type === "Boolean" && typeof value !== "boolean" ? value != null : value; + if (!transform || !props_definition[prop2]) { + return value; + } else if (transform === "toAttribute") { + switch (type) { + case "Object": + case "Array": + return value == null ? null : JSON.stringify(value); + case "Boolean": + return value ? "" : null; + case "Number": + return value == null ? null : value; + default: + return value; + } + } else { + switch (type) { + case "Object": + case "Array": + return value && JSON.parse(value); + case "Boolean": + return value; + // conversion already handled above + case "Number": + return value != null ? +value : value; + default: + return value; + } + } +} +function get_custom_elements_slots(element) { + const result = {}; + element.childNodes.forEach((node) => { + result[ + /** @type {Element} node */ + node.slot || "default" + ] = true; + }); + return result; +} +function create_custom_element(Component, props_definition, slots, exports$1, shadow_root_init, extend) { + let Class = class extends SvelteElement { + constructor() { + super(Component, slots, shadow_root_init); + this.$$p_d = props_definition; + } + static get observedAttributes() { + return object_keys(props_definition).map( + (key2) => (props_definition[key2].attribute || key2).toLowerCase() + ); + } + }; + object_keys(props_definition).forEach((prop2) => { + define_property(Class.prototype, prop2, { + get() { + return this.$$c && prop2 in this.$$c ? this.$$c[prop2] : this.$$d[prop2]; + }, + set(value) { + value = get_custom_element_value(prop2, value, props_definition); + this.$$d[prop2] = value; + var component2 = this.$$c; + if (component2) { + var setter = get_descriptor(component2, prop2)?.get; + if (setter) { + component2[prop2] = value; + } else { + component2.$set({ [prop2]: value }); + } + } + } + }); + }); + exports$1.forEach((property) => { + define_property(Class.prototype, property, { + get() { + return this.$$c?.[property]; + } + }); + }); + Component.element = /** @type {any} */ + Class; + return Class; +} +var root$7 = /* @__PURE__ */ from_html(`
`); +function Checkbox($$anchor, $$props) { + push($$props, true); + let loading = prop($$props, "loading"), rest = /* @__PURE__ */ rest_props($$props, ["$$slots", "$$events", "$$legacy", "$$host", "loading"]); + let inputEl; + function onClick() { + inputEl?.click(); + } + var $$exports = { + get loading() { + return loading(); + }, + set loading($$value) { + loading($$value); + flushSync(); + } + }; + var div = root$7(); + var input = child(div); + attribute_effect(input, () => ({ type: "checkbox", ...rest }), void 0, void 0, void 0, void 0, true); + bind_this(input, ($$value) => inputEl = $$value, () => inputEl); + var svg = sibling(input, 2); + next(2); + reset(div); + template_effect(() => set_attribute(div, "data-loading", loading())); + delegated("click", svg, onClick); + append($$anchor, div); + return pop($$exports); +} +delegate(["click"]); +create_custom_element(Checkbox, { loading: {} }, [], [], { mode: "open" }); +var root$6 = /* @__PURE__ */ from_html(`
`); +function CheckboxNative($$anchor, $$props) { + push($$props, true); + let loading = prop($$props, "loading"), rest = /* @__PURE__ */ rest_props($$props, ["$$slots", "$$events", "$$legacy", "$$host", "loading"]); + var $$exports = { + get loading() { + return loading(); + }, + set loading($$value) { + loading($$value); + flushSync(); + } + }; + var div = root$6(); + var input = child(div); + attribute_effect(input, () => ({ type: "checkbox", ...rest }), void 0, void 0, void 0, void 0, true); + next(2); + reset(div); + template_effect(() => set_attribute(div, "data-loading", loading())); + append($$anchor, div); + return pop($$exports); +} +create_custom_element(CheckboxNative, { loading: {} }, [], [], { mode: "open" }); +var root$5 = /* @__PURE__ */ from_html(`
`); +function Logo($$anchor, $$props) { + push($$props, true); + let strings = prop($$props, "strings"); + const website = "https://altcha.org"; + var $$exports = { + get strings() { + return strings(); + }, + set strings($$value) { + strings($$value); + flushSync(); + } + }; + var div = root$5(); + var a = child(div); + set_attribute(a, "href", website); + reset(div); + template_effect(() => set_attribute(a, "aria-label", strings().ariaLinkLabel)); + append($$anchor, div); + return pop($$exports); +} +create_custom_element(Logo, { strings: {} }, [], [], { mode: "open" }); +var root$4 = /* @__PURE__ */ from_html(``); +function Footer($$anchor, $$props) { + push($$props, true); + let logo = prop($$props, "logo"), strings = prop($$props, "strings"); + var $$exports = { + get logo() { + return logo(); + }, + set logo($$value) { + logo($$value); + flushSync(); + }, + get strings() { + return strings(); + }, + set strings($$value) { + strings($$value); + flushSync(); + } + }; + var div = root$4(); + var p = child(div); + html(p, () => strings().footer, true); + reset(p); + var node = sibling(p, 2); + { + var consequent = ($$anchor2) => { + Logo($$anchor2, { + get strings() { + return strings(); + } + }); + }; + if_block(node, ($$render) => { + if (logo()) $$render(consequent); + }); + } + reset(div); + append($$anchor, div); + return pop($$exports); +} +create_custom_element(Footer, { logo: {}, strings: {} }, [], [], { mode: "open" }); +var root$3 = /* @__PURE__ */ from_html(`
`); +function Switch($$anchor, $$props) { + push($$props, true); + let loading = prop($$props, "loading"), rest = /* @__PURE__ */ rest_props($$props, ["$$slots", "$$events", "$$legacy", "$$host", "loading"]); + let inputEl; + function onClick() { + inputEl?.click(); + } + var $$exports = { + get loading() { + return loading(); + }, + set loading($$value) { + loading($$value); + flushSync(); + } + }; + var div = root$3(); + var input = child(div); + attribute_effect(input, () => ({ type: "checkbox", ...rest }), void 0, void 0, void 0, void 0, true); + bind_this(input, ($$value) => inputEl = $$value, () => inputEl); + var div_1 = sibling(input, 2); + reset(div); + template_effect(() => set_attribute(div, "data-loading", loading())); + delegated("click", div_1, onClick); + append($$anchor, div); + return pop($$exports); +} +delegate(["click"]); +create_custom_element(Switch, { loading: {} }, [], [], { mode: "open" }); +var AudioState = /* @__PURE__ */ ((AudioState2) => { + AudioState2["ERROR"] = "error"; + AudioState2["LOADING"] = "loading"; + AudioState2["PLAYING"] = "playing"; + AudioState2["PAUSED"] = "paused"; + AudioState2["READY"] = "ready"; + return AudioState2; +})(AudioState || {}); +var State = /* @__PURE__ */ ((State2) => { + State2["CODE"] = "code"; + State2["ERROR"] = "error"; + State2["VERIFIED"] = "verified"; + State2["VERIFYING"] = "verifying"; + State2["UNVERIFIED"] = "unverified"; + State2["EXPIRED"] = "expired"; + return State2; +})(State || {}); +var root_1$2 = /* @__PURE__ */ from_html(`
`); +var root_3$2 = /* @__PURE__ */ from_html(`
`); +var root_4 = /* @__PURE__ */ from_svg(``); +var root_5 = /* @__PURE__ */ from_svg(``); +var root_6 = /* @__PURE__ */ from_svg(``); +var root_2$2 = /* @__PURE__ */ from_html(``); +var root_7 = /* @__PURE__ */ from_html(``); +var root$2 = /* @__PURE__ */ from_html(`
`); +function Code($$anchor, $$props) { + push($$props, true); + let audioUrl = prop($$props, "audioUrl"), codeChallenge = prop($$props, "codeChallenge"), config = prop($$props, "config"), imageUrl = prop($$props, "imageUrl"), onCancel = prop($$props, "onCancel"), onReload = prop($$props, "onReload"), onSubmit = prop($$props, "onSubmit"), strings = prop($$props, "strings"); + let audioState = /* @__PURE__ */ state(void 0); + let elAudio = /* @__PURE__ */ state(void 0); + let elInput = /* @__PURE__ */ state(void 0); + let loading = /* @__PURE__ */ state(false); + let code = /* @__PURE__ */ state(""); + let playAudio = /* @__PURE__ */ state(false); + onMount(() => { + if (!config().disableAutoFocus) { + tick().then(() => { + get(elInput)?.focus(); + }); + } + return () => { + if (get(elAudio)) { + get(elAudio).pause(); + set(elAudio, void 0); + } + }; + }); + function onAudioEnded() { + set(audioState, AudioState.PAUSED, true); + } + function onAudioError(ev) { + set(audioState, AudioState.ERROR, true); + } + function onAudioCanPlay() { + set(audioState, AudioState.READY, true); + } + function onAudioLoadStart() { + set(audioState, AudioState.LOADING, true); + } + function onAudioPlaying() { + set(audioState, AudioState.PLAYING, true); + } + function onAudioPause() { + set(audioState, AudioState.PAUSED, true); + } + function onInputKeyDown(ev) { + if (ev.code === "Space") { + ev.preventDefault(); + ev.stopPropagation(); + onPlayAudio(); + } else if (ev.code === "Escape") { + ev.preventDefault(); + ev.stopPropagation(); + onCancel()?.(); + } + } + function onSubmitCapture(ev) { + ev.preventDefault(); + ev.stopPropagation(); + onSubmit()?.(get(code)); + } + function onPlayAudio() { + if (get(elAudio)) { + if (get(audioState) === AudioState.LOADING) ; + else if (!get(elAudio).paused) { + get(elAudio).pause(); + } else { + if (audioUrl() && get(elAudio).src !== audioUrl()) { + get(elAudio).src = audioUrl(); + } + get(elAudio).currentTime = 0; + get(elAudio).play(); + } + } else { + set(playAudio, true); + requestAnimationFrame(() => { + if (get(elAudio) && audioUrl()) { + get(elAudio).src = audioUrl(); + get(elAudio).play(); + } + }); + } + } + var $$exports = { + get audioUrl() { + return audioUrl(); + }, + set audioUrl($$value) { + audioUrl($$value); + flushSync(); + }, + get codeChallenge() { + return codeChallenge(); + }, + set codeChallenge($$value) { + codeChallenge($$value); + flushSync(); + }, + get config() { + return config(); + }, + set config($$value) { + config($$value); + flushSync(); + }, + get imageUrl() { + return imageUrl(); + }, + set imageUrl($$value) { + imageUrl($$value); + flushSync(); + }, + get onCancel() { + return onCancel(); + }, + set onCancel($$value) { + onCancel($$value); + flushSync(); + }, + get onReload() { + return onReload(); + }, + set onReload($$value) { + onReload($$value); + flushSync(); + }, + get onSubmit() { + return onSubmit(); + }, + set onSubmit($$value) { + onSubmit($$value); + flushSync(); + }, + get strings() { + return strings(); + }, + set strings($$value) { + strings($$value); + flushSync(); + } + }; + var div = root$2(); + var form = child(div); + var node = child(form); + { + var consequent = ($$anchor2) => { + var div_1 = root_1$2(); + var text2 = child(div_1, true); + reset(div_1); + template_effect(() => set_text(text2, strings().verificationRequired)); + append($$anchor2, div_1); + }; + if_block(node, ($$render) => { + if (config().codeChallengeDisplay !== "standard") $$render(consequent); + }); + } + var div_2 = sibling(node, 2); + var text_1 = child(div_2, true); + reset(div_2); + var img = sibling(div_2, 2); + var div_3 = sibling(img, 2); + var input = child(div_3); + remove_input_defaults(input); + input.disabled = get(loading); + bind_this(input, ($$value) => set(elInput, $$value), () => get(elInput)); + var node_1 = sibling(input, 2); + { + var consequent_4 = ($$anchor2) => { + var button = root_2$2(); + var node_2 = child(button); + { + var consequent_1 = ($$anchor3) => { + var div_4 = root_3$2(); + append($$anchor3, div_4); + }; + var consequent_2 = ($$anchor3) => { + var svg = root_4(); + append($$anchor3, svg); + }; + var consequent_3 = ($$anchor3) => { + var svg_1 = root_5(); + append($$anchor3, svg_1); + }; + var alternate = ($$anchor3) => { + var svg_2 = root_6(); + append($$anchor3, svg_2); + }; + if_block(node_2, ($$render) => { + if (get(audioState) === AudioState.LOADING) $$render(consequent_1); + else if (get(audioState) === AudioState.ERROR) $$render(consequent_2, 1); + else if (get(audioState) === AudioState.PLAYING) $$render(consequent_3, 2); + else $$render(alternate, -1); + }); + } + reset(button); + template_effect(() => { + set_attribute(button, "title", strings().getAudioChallenge); + button.disabled = get(audioState) === AudioState.LOADING || get(audioState) === AudioState.ERROR; + set_attribute(button, "aria-label", get(audioState) === AudioState.LOADING ? strings().loading : strings().getAudioChallenge); + }); + event("click", button, () => onPlayAudio(), true); + append($$anchor2, button); + }; + if_block(node_1, ($$render) => { + if (codeChallenge().audio) $$render(consequent_4); + }); + } + var button_1 = sibling(node_1, 2); + reset(div_3); + var div_5 = sibling(div_3, 2); + var button_2 = child(div_5); + var text_2 = child(button_2, true); + reset(button_2); + var button_3 = sibling(button_2, 2); + var text_3 = child(button_3, true); + reset(button_3); + reset(div_5); + reset(form); + var node_3 = sibling(form, 2); + { + var consequent_5 = ($$anchor2) => { + var audio = root_7(); + bind_this(audio, ($$value) => set(elAudio, $$value), () => get(elAudio)); + event("error", audio, onAudioError); + event("loadstart", audio, onAudioLoadStart); + event("canplay", audio, onAudioCanPlay); + event("pause", audio, onAudioPause); + event("playing", audio, onAudioPlaying); + event("ended", audio, onAudioEnded); + append($$anchor2, audio); + }; + if_block(node_3, ($$render) => { + if (get(playAudio)) $$render(consequent_5); + }); + } + reset(div); + template_effect(() => { + set_text(text_1, strings().enterCodeFromImage); + set_attribute(img, "src", imageUrl()); + set_attribute(input, "minlength", codeChallenge().length || 1); + set_attribute(input, "maxlength", codeChallenge().length); + set_attribute(input, "placeholder", strings().enterCode); + set_attribute(input, "aria-label", get(audioState) === AudioState.LOADING ? strings().loading : get(audioState) === AudioState.PLAYING ? "" : strings().enterCodeAria); + set_attribute(input, "aria-live", get(audioState) ? "assertive" : "polite"); + set_attribute(input, "aria-busy", get(audioState) === AudioState.LOADING); + set_attribute(button_1, "title", strings().reload); + set_attribute(button_1, "aria-label", strings().reload); + set_attribute(button_2, "aria-label", strings().verify); + set_text(text_2, strings().verify); + set_attribute(button_3, "aria-label", strings().cancel); + set_text(text_3, strings().cancel); + }); + event("submit", form, onSubmitCapture, true); + delegated("keydown", input, onInputKeyDown); + bind_value(input, () => get(code), ($$value) => set(code, $$value)); + event("click", button_1, () => onReload()?.(), true); + event("click", button_3, () => onCancel()?.(), true); + append($$anchor, div); + return pop($$exports); +} +delegate(["keydown"]); +create_custom_element( + Code, + { + audioUrl: {}, + codeChallenge: {}, + config: {}, + imageUrl: {}, + onCancel: {}, + onReload: {}, + onSubmit: {}, + strings: {} + }, + [], + [], + { mode: "open" } +); +var root_1$1 = /* @__PURE__ */ from_html(`
`); +var root_2$1 = /* @__PURE__ */ from_html(`
`); +var root_3$1 = /* @__PURE__ */ from_html(`
×
`); +var root$1 = /* @__PURE__ */ from_html(`
`, 1); +function Popover($$anchor, $$props) { + push($$props, true); + let anchor = prop($$props, "anchor"), children = prop($$props, "children"), display = prop($$props, "display", 7, "standard"), backdrop = prop($$props, "backdrop", 7, false), onClickOutside = prop($$props, "onClickOutside"), onClickOutsideDelay = prop($$props, "onClickOutsideDelay", 7, 600), onClose = prop($$props, "onClose"), placement = prop($$props, "placement", 7, "auto"), updateUISignal = prop($$props, "updateUISignal"), variant = prop($$props, "variant", 7, "neutral"), rest = /* @__PURE__ */ rest_props($$props, [ + "$$slots", + "$$events", + "$$legacy", + "$$host", + "anchor", + "children", + "display", + "backdrop", + "onClickOutside", + "onClickOutsideDelay", + "onClose", + "placement", + "updateUISignal", + "variant" + ]); + let el = /* @__PURE__ */ state(void 0); + let elBackdrop = /* @__PURE__ */ state(void 0); + let top = /* @__PURE__ */ state(false); + let mountedAt = /* @__PURE__ */ state(0); + user_effect(() => { + if (placement() !== "auto") { + set(top, placement() === "top"); + } + }); + user_effect(() => { + if (updateUISignal()) { + reposition(); + } + }); + onMount(() => { + const moveToBody = display() === "bottomsheet" || display() === "overlay"; + if (moveToBody) { + get(elBackdrop) && document.body.append(get(elBackdrop)); + get(el) && document.body.append(get(el)); + } + reposition(); + tick().then(() => { + set(mountedAt, Date.now(), true); + }); + return () => { + if (moveToBody) { + get(elBackdrop) && document.body.removeChild(get(elBackdrop)); + get(el) && document.body.removeChild(get(el)); + } + }; + }); + function onCloseClick() { + onClose()?.(); + } + function onWindowClick(ev) { + const target = ev.target; + if (!get(el)?.contains(target) && (!onClickOutsideDelay() || get(mountedAt) + onClickOutsideDelay() < Date.now())) { + onClickOutside()?.(); + } + } + function onWindowResize() { + reposition(); + } + function onWindowScroll() { + reposition(); + } + function reposition() { + if (anchor() && placement() === "auto" && get(el)) { + const boundary2 = anchor().getBoundingClientRect(); + const bottomGap = document.documentElement.clientHeight - (boundary2.top + boundary2.height); + const newTop = bottomGap < get(el).clientHeight; + if (get(top) !== newTop) { + set(top, newTop); + } + } + } + var $$exports = { + get anchor() { + return anchor(); + }, + set anchor($$value) { + anchor($$value); + flushSync(); + }, + get children() { + return children(); + }, + set children($$value) { + children($$value); + flushSync(); + }, + get display() { + return display(); + }, + set display($$value = "standard") { + display($$value); + flushSync(); + }, + get backdrop() { + return backdrop(); + }, + set backdrop($$value = false) { + backdrop($$value); + flushSync(); + }, + get onClickOutside() { + return onClickOutside(); + }, + set onClickOutside($$value) { + onClickOutside($$value); + flushSync(); + }, + get onClickOutsideDelay() { + return onClickOutsideDelay(); + }, + set onClickOutsideDelay($$value = 600) { + onClickOutsideDelay($$value); + flushSync(); + }, + get onClose() { + return onClose(); + }, + set onClose($$value) { + onClose($$value); + flushSync(); + }, + get placement() { + return placement(); + }, + set placement($$value = "auto") { + placement($$value); + flushSync(); + }, + get updateUISignal() { + return updateUISignal(); + }, + set updateUISignal($$value) { + updateUISignal($$value); + flushSync(); + }, + get variant() { + return variant(); + }, + set variant($$value = "neutral") { + variant($$value); + flushSync(); + } + }; + var fragment = root$1(); + event("click", $window, onWindowClick, true); + event("resize", $window, onWindowResize); + event("scroll", $window, onWindowScroll); + var node = first_child(fragment); + { + var consequent = ($$anchor2) => { + var div = root_1$1(); + bind_this(div, ($$value) => set(elBackdrop, $$value), () => get(elBackdrop)); + append($$anchor2, div); + }; + if_block(node, ($$render) => { + if (backdrop()) $$render(consequent); + }); + } + var div_1 = sibling(node, 2); + attribute_effect(div_1, () => ({ + ...rest, + class: `altcha-popover ${($$props.class || "") ?? ""}`, + "data-popover": true, + "data-variant": variant(), + "data-top": get(top), + "data-display": display() + })); + var node_1 = child(div_1); + { + var consequent_1 = ($$anchor2) => { + var div_2 = root_2$1(); + append($$anchor2, div_2); + }; + if_block(node_1, ($$render) => { + if (display() === "standard") $$render(consequent_1); + }); + } + var node_2 = sibling(node_1, 2); + { + var consequent_2 = ($$anchor2) => { + var div_3 = root_3$1(); + event("click", div_3, onCloseClick, true); + append($$anchor2, div_3); + }; + if_block(node_2, ($$render) => { + if (display() !== "standard") $$render(consequent_2); + }); + } + var div_4 = sibling(node_2, 2); + var node_3 = child(div_4); + snippet(node_3, () => children() ?? noop); + reset(div_4); + reset(div_1); + bind_this(div_1, ($$value) => set(el, $$value), () => get(el)); + append($$anchor, fragment); + return pop($$exports); +} +create_custom_element( + Popover, + { + anchor: {}, + children: {}, + display: {}, + backdrop: {}, + onClickOutside: {}, + onClickOutsideDelay: {}, + onClose: {}, + placement: {}, + updateUISignal: {}, + variant: {} + }, + [], + [], + { mode: "open" } +); +function bufferToHex(buffer) { + return Array.from(new Uint8Array(buffer)).map((b) => b.toString(16).padStart(2, "0")).join(""); +} +function injectCss(css2, id = "altcha-css", nonce) { + if (typeof document !== "undefined" && document && !document.getElementById(id)) { + const style = document.createElement("style"); + style.id = id; + style.textContent = css2; + const resolvedNonce = document.currentScript?.nonce ?? document.querySelector('meta[name="csp-nonce"]')?.content; + if (resolvedNonce) { + style.nonce = resolvedNonce; + } + document.head.appendChild(style); + } +} +async function solveChallengeWorkers(options) { + const { + challenge, + concurrency = navigator.hardwareConcurrency, + controller = new AbortController(), + createWorker, + onOutOfMemory = (c) => c > 1 ? Math.floor(c / 2) : 0, + counterMode, + timeout = 9e4 + } = options; + const workersConcurrency = Math.min(16, Math.max(1, concurrency)); + const workersInstances = []; + const terminate = () => { + for (const worker of workersInstances) { + worker.terminate(); + } + }; + for (let i = 0; i < workersConcurrency; i++) { + workersInstances.push(await createWorker(challenge.parameters.algorithm)); + } + let solution = null; + try { + solution = await Promise.race( + workersInstances.map((worker, i) => { + controller.signal.addEventListener("abort", () => { + worker.postMessage({ type: "abort" }); + }); + return new Promise((resolve, reject) => { + worker.addEventListener("error", (err) => { + reject(err); + }); + worker.addEventListener("message", (message) => { + if (message.data) { + for (const w of workersInstances) { + if (w !== worker) { + w.postMessage({ type: "abort" }); + } + } + if (message.data.error) { + return reject(new Error(message.data.error)); + } + } + resolve(message.data); + }); + worker.postMessage({ + challenge, + counterMode, + counterStart: i, + counterStep: workersConcurrency, + timeout, + type: "work" + }); + }); + }) + ); + } catch (err) { + const isOOM = err instanceof Error && !!err?.message?.includes("Out of memory"); + if (isOOM) { + if (onOutOfMemory) { + terminate(); + const retryConcurrency = onOutOfMemory(workersConcurrency); + if (retryConcurrency) { + return solveChallengeWorkers({ + ...options, + challenge, + controller, + concurrency: retryConcurrency, + createWorker + }); + } + } + } + throw err; + } finally { + terminate(); + } + if (controller.signal.aborted) { + return null; + } + return solution || null; +} +class Collector { + TAG_CODES = { + INPUT: 1, + TEXTAREA: 2, + SELECT: 3, + BUTTON: 4, + A: 5, + DETAILS: 6, + SUMMARY: 7, + IFRAME: 8, + VIDEO: 9, + AUDIO: 10 + }; + maxSamples; + sampleInterval; + target; + focusStartTime = 0; + focusInteraction = 0; + focusInteractionTimer = null; + lastPointerSample = 0; + lastTouchSample = 0; + lastScrollSample = 0; + pendingPointer = null; + pendingTouch = null; + focus = []; + pointer = []; + scroll = []; + touch = []; + constructor(options = {}) { + const { maxSamples = 60, sampleInterval = 50, target = window } = options; + this.maxSamples = maxSamples; + this.sampleInterval = sampleInterval; + this.target = target; + this.attach(); + } + destroy() { + const o = { capture: true }; + this.target.removeEventListener("focusin", this.onFocus, o); + this.target.removeEventListener("keydown", this.onInteraction, o); + this.target.removeEventListener("pointerdown", this.onInteraction, o); + this.target.removeEventListener("pointermove", this.onPointer, o); + this.target.removeEventListener("scroll", this.onScroll, o); + this.target.removeEventListener("touchmove", this.onTouchMove, o); + } + export() { + return { + focus: this.focus, + maxTouchPoints: navigator.maxTouchPoints || 0, + pointer: this.pointer, + scroll: this.scroll, + time: Date.now(), + touch: this.touch + }; + } + attach() { + const o = { passive: true, capture: true }; + this.target.addEventListener("focusin", this.onFocus, o); + this.target.addEventListener("keydown", this.onInteraction, o); + this.target.addEventListener("pointerdown", this.onInteraction, o); + this.target.addEventListener("pointermove", this.onPointer, o); + this.target.addEventListener("scroll", this.onScroll, o); + this.target.addEventListener("touchmove", this.onTouchMove, o); + } + evict(buffer) { + if (buffer.length > this.maxSamples) { + buffer.splice(0, buffer.length - this.maxSamples); + } + } + onFocus = (e) => { + if (this.focusInteraction === 2) { + return; + } + const el = e.target; + if (!(el instanceof Element)) { + return; + } + const now = performance.now(); + if (this.focusStartTime === 0) { + this.focusStartTime = now; + } + this.focus.push([ + Math.round(now - this.focusStartTime), + el.tabIndex, + this.TAG_CODES[el.tagName] ?? 0, + this.focusInteraction ? 1 : 0 + ]); + this.evict(this.focus); + }; + onInteraction = (e) => { + this.focusInteraction = "keyCode" in e ? 1 : 2; + if (this.focusInteractionTimer) { + clearTimeout(this.focusInteractionTimer); + } + this.focusInteractionTimer = setTimeout(() => { + this.focusInteraction = 0; + }, 100); + }; + onPointer = (e) => { + if (e.pointerType === "touch") { + return; + } + const now = e.timeStamp || performance.now(); + this.pendingPointer = [Math.round(e.clientX), Math.round(e.clientY), Math.round(now)]; + if (now - this.lastPointerSample >= this.sampleInterval) { + this.pointer.push(this.pendingPointer); + this.lastPointerSample = now; + this.pendingPointer = null; + this.evict(this.pointer); + } + }; + onScroll = () => { + const now = performance.now(); + if (now - this.lastScrollSample < this.sampleInterval) { + return; + } + this.scroll.push([Math.round(window.scrollY), Math.round(now)]); + this.lastScrollSample = now; + this.evict(this.scroll); + }; + onTouchMove = (e) => { + const now = e.timeStamp || performance.now(); + const t = e.touches[0]; + if (!t) { + return; + } + this.pendingTouch = [ + Math.round(t.clientX), + Math.round(t.clientY), + Math.round(now), + Math.round(t.force * 1e3) / 1e3, + Math.round(t.radiusX || 0), + Math.round(t.radiusY || 0) + ]; + if (now - this.lastTouchSample >= this.sampleInterval) { + this.touch.push(this.pendingTouch); + this.lastTouchSample = now; + this.pendingTouch = null; + this.evict(this.touch); + } + }; +} +var root_1 = /* @__PURE__ */ from_html(`
`); +var root_3 = /* @__PURE__ */ from_html(`
`); +var root_2 = /* @__PURE__ */ from_html(`
×
`, 1); +var root_10 = /* @__PURE__ */ from_html(`
`); +var root_11 = /* @__PURE__ */ from_html(``); +var root_14 = /* @__PURE__ */ from_html(`
Secure context (HTTPS) required.
`); +var root_15 = /* @__PURE__ */ from_html(`
`); +var root_16 = /* @__PURE__ */ from_html(`
`); +var root_19 = /* @__PURE__ */ from_html(` `, 1); +var root = /* @__PURE__ */ from_html(`
`, 1); +function Widget($$anchor, $$props) { + push($$props, true); + const $altchaDefaults = () => store_get(altchaDefaults, "$altchaDefaults", $$stores); + const $altchaI18nStore = () => store_get(altchaI18nStore, "$altchaI18nStore", $$stores); + const [$$stores, $$cleanup] = setup_stores(); + const fieldsSelector = 'input[type="text"]:not([data-no-spamfilter]), textarea:not([data-no-spamfilter])'; + const submitButtonSelector = 'input[type="submit"], button[type="submit"], button:not([type="button"]):not([type="reset"])'; + const rtlLanguages = ["ar", "fa", "he", "ur"]; + const { isSecureContext } = globalThis; + const { store: altchaDefaults } = globalThis.$altcha.defaults; + const hardwareConcurrency = navigator.hardwareConcurrency || 2; + const deviceMemory = navigator.deviceMemory || 0; + const defaultWorkers = deviceMemory && deviceMemory <= 4 ? Math.min(4, hardwareConcurrency) : hardwareConcurrency; + const altchaI18nStore = globalThis.$altcha.i18n.store; + const instance = $$props.$$host; + const dispatch = (event2, detail) => { + tick().then(() => { + instance?.dispatchEvent(new CustomEvent(event2, { detail })); + }); + }; + let hisCollector = null; + let baseUrl = /* @__PURE__ */ state(proxy(new URL(location.origin))); + let checked = /* @__PURE__ */ state(false); + let codeChallenge = /* @__PURE__ */ state(null); + let currentController = /* @__PURE__ */ state(null); + let currentDisplay = /* @__PURE__ */ state(null); + let currentState = /* @__PURE__ */ state(proxy(State.UNVERIFIED)); + let elAnchorArrow = /* @__PURE__ */ state(void 0); + let elFloatingAnchor = /* @__PURE__ */ state(void 0); + let elForm = /* @__PURE__ */ state(null); + let elRoot = /* @__PURE__ */ state(void 0); + let elSubmitter = /* @__PURE__ */ state(null); + let error = /* @__PURE__ */ state(null); + let expirationTimeout = /* @__PURE__ */ state(null); + let payload = /* @__PURE__ */ state(null); + let plugins = /* @__PURE__ */ state(proxy([])); + let updateUISignal = /* @__PURE__ */ state(0); + let userConfig = /* @__PURE__ */ state(proxy({})); + let visible = /* @__PURE__ */ state(true); + const config = /* @__PURE__ */ user_derived(() => ({ + fetch: (input, init) => fetch(input, init), + audioChallengeLanguage: "", + auto: "off", + barPlacement: "bottom", + challenge: "", + codeChallenge: null, + codeChallengeDisplay: "standard", + credentials: null, + debug: false, + disableAutoFocus: false, + display: "standard", + floatingAnchor: "", + floatingOffset: 8, + floatingPersist: false, + floatingPlacement: "auto", + hideFooter: false, + hideLogo: false, + humanInteractionSignature: true, + language: "", + mockError: false, + minDuration: 500, + overlayContent: "", + name: "altcha", + popoverPlacement: "auto", + retryOnOutOfMemoryError: true, + setCookie: null, + serverVerificationFields: false, + serverVerificationTimeZone: false, + test: false, + timeout: 9e4, + type: "checkbox", + validationMessage: "", + verifyFunction: null, + verifyUrl: "", + workers: defaultWorkers, + ...$altchaDefaults(), + ...get(userConfig) + })); + const checkboxId = /* @__PURE__ */ user_derived(() => `altcha-checkbox-${$$props.id || Math.floor(Math.random() * 1e12).toString(16)}`); + const CheckboxComponent = /* @__PURE__ */ user_derived(() => getCheckboxComponent(get(config).type)); + const auto = /* @__PURE__ */ user_derived(() => get(config).auto); + const loading = /* @__PURE__ */ user_derived(() => get(currentState) === State.VERIFYING); + const showFooter = /* @__PURE__ */ user_derived(() => !get(config).hideFooter); + const showLogo = /* @__PURE__ */ user_derived(() => !get(config).hideLogo && get(config).display !== "bar"); + const locale = /* @__PURE__ */ user_derived(() => getI18nStrings($altchaI18nStore(), [ + get(config).language, + document.documentElement.lang, + ...navigator.languages + ])); + const dir = /* @__PURE__ */ user_derived(() => rtlLanguages.includes(get(locale).language) ? "rtl" : void 0); + const strings = /* @__PURE__ */ user_derived(() => ({ ...get(locale).strings })); + const codeChallengeAudioUrl = /* @__PURE__ */ user_derived(() => get(codeChallenge)?.audio?.match(/^(https?:)?\//) ? getUrl(get(codeChallenge).audio, get(baseUrl), { + language: get(config).audioChallengeLanguage || get(locale).language + }).toString() : get(codeChallenge)?.audio); + const codeChallengeImageUrl = /* @__PURE__ */ user_derived(() => get(codeChallenge)?.image?.match(/^(https?:)?\//) ? getUrl(get(codeChallenge).image, get(baseUrl)) : get(codeChallenge)?.image); + user_effect(() => { + configure({ + auto: $$props.auto, + challenge: $$props.challenge, + display: $$props.display, + language: $$props.language, + name: $$props.name, + type: $$props.type, + workers: $$props.workers + }); + }); + user_effect(() => { + if ($$props.configuration) { + try { + configure(JSON.parse($$props.configuration)); + } catch { + log("unable to parse the `configuration` attribute (JSON expected)"); + } + } + }); + user_effect(() => { + if (get(currentDisplay) !== get(config).display) { + setDisplay(get(config).display); + } + }); + user_effect(() => { + if (get(checked) && get(currentState) === State.VERIFYING) { + set(checked, false); + } + }); + user_effect(() => { + if (!get(checked) && get(currentState) === State.VERIFIED) { + set(checked, true); + } + }); + user_effect(() => { + if (!get(checked)) { + const checkbox = getCheckboxElement(); + if (checkbox && checkbox.checked) { + checkbox.checked = false; + } + } + }); + user_effect(() => { + if (get(currentState) === State.VERIFIED) { + getCheckboxElement()?.setCustomValidity(""); + } + }); + user_effect(() => { + if (get(auto) === "onload") { + const tm = setTimeout( + () => { + verify(); + }, + 1 + ); + return () => { + if (tm) { + clearTimeout(tm); + } + }; + } + }); + user_effect(() => { + if (get(error)) { + log("error:", get(error)); + } + }); + user_effect(() => { + if (get(payload) && get(config).setCookie) { + setCookie(get(payload), get(config).setCookie); + } + }); + onMount(() => { + log("mounted", "3.2.1"); + if (instance) { + globalThis.$altcha.instances.add(instance); + } + set(elForm, get(elRoot)?.closest("form"), true); + get(elForm)?.addEventListener("reset", onFormReset); + get(elForm)?.addEventListener("submit", onFormSubmit, { capture: true }); + get(elForm)?.addEventListener("focusin", onFormFocusIn); + activatePlugins(); + if (get(config).humanInteractionSignature) { + log("human interaction signature enabled"); + hisCollector = new Collector(); + } + dispatch("load"); + if (!isSecureContext) { + log("secure context (HTTPS) required"); + } + return () => { + destroyPlugins(); + if (instance) { + globalThis.$altcha.instances.delete(instance); + } + if (get(expirationTimeout)) { + clearTimeout(get(expirationTimeout)); + } + get(elForm)?.removeEventListener("reset", onFormReset); + get(elForm)?.removeEventListener("submit", onFormSubmit, { capture: true }); + get(elForm)?.removeEventListener("focusin", onFormFocusIn); + hisCollector?.destroy(); + }; + }); + function activatePlugins() { + set(plugins, [...globalThis.$altcha.plugins].map((PluginCls) => new PluginCls(instance)), true); + log("activating plugins", get(plugins).map((plugin) => plugin.constructor.name)); + for (const plugin of get(plugins)) { + plugin.activate(); + } + } + async function callHook(hook, ...args) { + let result = void 0; + for (const plugin of get(plugins)) { + result = await plugin[hook].call(plugin, ...args); + } + return result; + } + function destroyPlugins() { + for (const plugin of get(plugins)) { + plugin.destroy(); + } + } + function createChallengeFromV1(challenge) { + const [_, queryParams] = challenge.salt.split("?"); + const data = {}; + if (queryParams) { + try { + Object.assign(data, Object.fromEntries(new URLSearchParams(queryParams).entries())); + } catch { + } + } + const result = { + codeChallenge: challenge.codeChallenge, + parameters: { + algorithm: challenge.algorithm, + cost: 1, + data, + expiresAt: data?.expires ? parseInt(data.expires, 10) : void 0, + keyLength: challenge.algorithm === "SHA-512" ? 64 : challenge.algorithm === "SHA-384" ? 48 : 32, + nonce: bufferToHex(new TextEncoder().encode(challenge.salt)), + keyPrefix: challenge.challenge, + salt: "" + }, + signature: challenge.signature + }; + Object.defineProperties(result, { + _originalSalt: { enumerable: false, value: challenge.salt, writable: false }, + _version: { enumerable: false, value: 1, writable: false } + }); + return result; + } + function createPayloadV1(challenge, solution) { + return { + algorithm: challenge.parameters.algorithm, + challenge: challenge.parameters.keyPrefix, + number: solution.counter, + salt: "_originalSalt" in challenge ? challenge._originalSalt : challenge.parameters.nonce, + signature: challenge.signature, + took: solution.time || 0 + }; + } + async function delay(ms) { + await new Promise((resolve) => setTimeout(resolve, ms)); + } + async function fetchChallenge(source2 = get(config).challenge, requestOptions) { + const hook = await callHook("onFetchChallenge", source2); + let challenge = null; + if (hook !== void 0) { + return hook; + } + if (typeof source2 === "string") { + if (source2.startsWith("{")) { + log("parsing JSON challenge"); + try { + challenge = JSON.parse(source2); + } catch { + throw new Error(`Unable to parse JSON challenge.`); + } + } else { + log("fetching challenge from", requestOptions?.method || "GET", source2); + set(baseUrl, new URL(source2, location.origin), true); + const resp = await get(config).fetch(source2, { + credentials: get(config).credentials || void 0, + ...requestOptions + }); + await validateResponse(resp); + const configHeader = resp.headers.get("x-altcha-config"); + if (configHeader) { + processConfigHeader(configHeader); + } + const json = await resp.json(); + if (json && "his" in json && json.his) { + log("requested HIS"); + if (!hisCollector) { + throw new Error("Server requested HIS data but collector is disabled."); + } + return fetchChallenge(getUrl(json.his.url, get(baseUrl)), { + body: JSON.stringify({ his: hisCollector.export() }), + headers: { "content-type": "application/json" }, + method: "POST" + }); + } + if (json && "hisResult" in json && json.hisResult) { + log("HIS result", json.hisResult); + } + challenge = json; + } + } else if (source2 && typeof source2 === "object") { + try { + challenge = JSON.parse(JSON.stringify(source2)); + } catch { + throw new Error(`Unable to parse JSON challenge.`); + } + } + if (isChallengeV1(challenge)) { + challenge = createChallengeFromV1(challenge); + } + if (!isChallengeValid(challenge)) { + throw new Error(`Challenge validation failed.`); + } + return challenge; + } + function isChallengeV1(challenge) { + return typeof challenge === "object" && "challenge" in challenge; + } + function isChallengeValid(challenge) { + return !!challenge && typeof challenge === "object" && "parameters" in challenge && !!challenge.parameters && typeof challenge.parameters === "object" && "algorithm" in challenge.parameters && "nonce" in challenge.parameters && "salt" in challenge.parameters && "keyPrefix" in challenge.parameters; + } + function getCheckboxElement() { + return document.getElementById(get(checkboxId)); + } + function getCheckboxComponent(type) { + switch (type) { + case "checkbox": + return Checkbox; + case "switch": + return Switch; + case "native": + default: + return CheckboxNative; + } + } + function getI18nStrings(i18n2, languages) { + const codes = Object.keys(i18n2).map((code) => code.toLowerCase()); + let language = languages.reduce( + (acc, lang) => { + lang = lang.toLowerCase(); + return acc || (i18n2[lang] ? lang : null) || codes.find((code) => lang.split("-")[0] === code.split("-")[0]) || null; + }, + null + ); + if (!i18n2[language || ""]) { + language = "en"; + } + return { language, strings: i18n2[language] }; + } + function getPlacement(display) { + switch (display) { + case "bar": + return get(config).barPlacement || "bottom"; + case "floating": + return get(config).floatingPlacement || "auto"; + default: + return void 0; + } + } + function getTextFields(names) { + const elInputs = [ + ...get(elForm)?.querySelectorAll(fieldsSelector) || [] + ]; + return elInputs.reduce( + (acc, el) => { + const name = el.name; + const value = el.value; + if (name && value) { + acc[name] = /\n/.test(value) ? value.replace(new RegExp("(? { + if (result && !get(codeChallenge)) { + tick().then(() => { + requestSubmit(get(elSubmitter)); + }); + } + }); + } + } + function onWindowPageshow(ev) { + if (ev.persisted) { + setDisplay(get(config).display); + reset$1(); + } + } + function onWindowResize() { + updateUI(); + } + function processConfigHeader(jsonConfig) { + try { + const json = JSON.parse(jsonConfig); + if (json && typeof json === "object") { + configure({ + // Backward compatibility mappings + serverVerificationFields: json?.sentinel?.fields, + serverVerificationTimeZone: json?.sentinel?.timeZone, + verifyUrl: json.verifyurl, + ...json + }); + } + } catch (err) { + log("unable to configure from x-altcha-config header", err); + } + } + function repositionFloating(viewportOffset = 20) { + if (!get(elRoot)) { + return; + } + const floatingPlacement = get(config).floatingPlacement; + if (!get(elFloatingAnchor)) { + set( + elFloatingAnchor, + (get(config).floatingAnchor instanceof HTMLElement ? get(config).floatingAnchor : get(config).floatingAnchor ? document.querySelector(get(config).floatingAnchor) : get(elForm)?.querySelector(submitButtonSelector)) || get(elForm), + true + ); + if (!get(elFloatingAnchor)) { + log("unable to find floating anchor element"); + return; + } + } + const offsetY = parseInt(get(config).floatingOffset, 10) || 12; + const anchorBoundry = get(elFloatingAnchor).getBoundingClientRect(); + const elBoundary = get(elRoot).getBoundingClientRect(); + const docHeight = document.documentElement.clientHeight; + const docWidth = document.documentElement.clientWidth; + const showOnTop = !floatingPlacement || floatingPlacement === "auto" ? anchorBoundry.bottom + elBoundary.height + offsetY + viewportOffset > docHeight : floatingPlacement === "top"; + const left = Math.max(viewportOffset, Math.min(docWidth - viewportOffset - elBoundary.width, anchorBoundry.left + anchorBoundry.width / 2 - elBoundary.width / 2)); + get(elRoot).style.setProperty("--altcha-floating-left", `${left}px`); + get(elRoot).style.setProperty("--altcha-floating-top", showOnTop ? `${anchorBoundry.top - (elBoundary.height + offsetY)}px` : `${anchorBoundry.bottom + offsetY}px`); + get(elRoot).setAttribute("data-floating-position", showOnTop ? "top" : "bottom"); + if (get(elAnchorArrow)) { + const anchorArrowBoundry = get(elAnchorArrow).getBoundingClientRect(); + get(elAnchorArrow).style.left = anchorBoundry.left - left + anchorBoundry.width / 2 - anchorArrowBoundry.width / 2 + "px"; + } + } + async function requestServerVerification(verificationPayload, code) { + const hook = await callHook("onRequestServerVerification", verificationPayload, code); + if (hook !== void 0) { + return hook; + } + log("requesting server verification from", get(config).verifyUrl); + if (!get(config).verifyUrl) { + throw new Error(`Parameter verifyUrl must be set for server verification.`); + } + const resp = await get(config).fetch(getUrl(get(config).verifyUrl, get(baseUrl)), { + body: JSON.stringify({ + code, + fields: get(config).serverVerificationFields ? getTextFields() : void 0, + payload: verificationPayload, + timeZone: get(config).serverVerificationTimeZone ? getTimeZone() : void 0 + }), + credentials: get(config).credentials || void 0, + headers: { "Content-Type": "application/json" }, + method: "POST" + }); + await validateResponse(resp); + const json = await resp.json(); + if (json && typeof json === "object" && "payload" in json && !!json.payload) { + dispatch("serververification", json); + } + return json; + } + function requestSubmit(submitter) { + if (get(elForm) && "requestSubmit" in get(elForm)) { + get(elForm).requestSubmit(submitter); + } else if (get(elForm)?.reportValidity()) { + if (submitter) { + submitter.click(); + } else { + get(elForm).submit(); + } + } + } + function setCookie(value, options = {}) { + const { + domain, + name = get(config).name, + maxAge, + path, + sameSite, + secure + } = options; + let cookie = `${encodeURIComponent(name)}=${encodeURIComponent(value)}`; + if (domain) cookie += `; Domain=${domain}`; + if (maxAge != null) cookie += `; Max-Age=${maxAge}`; + if (path) cookie += `; Path=${path}`; + if (sameSite) cookie += `; SameSite=${sameSite}`; + if (secure) cookie += `; Secure`; + document.cookie = cookie; + } + function setDisplay(value) { + switch (value) { + case "bar": + case "floating": + case "overlay": + hide(); + if (!get(auto) || get(auto) === "off") { + get(userConfig).auto = "onsubmit"; + } + break; + case "standard": + show(); + } + if (get(currentDisplay) !== value) { + set(currentDisplay, value, true); + } + } + function setChallengeExpiration(expiresAt) { + if (get(expirationTimeout)) { + clearTimeout(get(expirationTimeout)); + } + const onExpired = () => { + if (get(currentState) !== State.UNVERIFIED) { + set(checked, false); + setState(State.EXPIRED); + } else { + reset$1(); + } + dispatch("expired"); + }; + const duration = expiresAt * 1e3 - Date.now(); + if (duration >= 1) { + set(expirationTimeout, setTimeout(onExpired, duration), true); + } else { + onExpired(); + } + } + async function validateResponse(resp) { + if (resp.status >= 400) { + if (resp.headers.get("content-type")?.includes("/json")) { + let json; + try { + json = await resp.json(); + } catch { + } + if (json && "error" in json) { + throw new Error(`Server responded with ${resp.status} - ${json.error}`); + } + } + throw new Error(`Server responded with ${resp.status}.`); + } + const contentType = resp.headers.get("content-type"); + if (!contentType || !contentType.includes("/json")) { + throw new Error(`Server responded with invalid content-type. Expected application/json, received ${contentType}.`); + } + } + async function verifyServer(code) { + if (!get(payload)) { + setState(State.ERROR, "Cannot verify code challenge without PoW payload."); + return; + } + setState(State.VERIFYING); + let result = null; + if (get(config).verifyUrl) { + result = await requestServerVerification(get(payload), code); + } else if (get(config).verifyFunction) { + result = await get(config).verifyFunction(get(payload), code); + } else { + setState(State.ERROR, "Parameter verifyUrl is required for code challenge verification."); + return; + } + if (result?.payload) { + set(payload, result.payload, true); + log("server payload", get(payload)); + } + if (result?.verified === true) { + log("verified"); + setState(State.VERIFIED); + dispatch("verified", { payload: get(payload) }); + if (get(auto) === "onsubmit") { + tick().then(() => { + requestSubmit(get(elSubmitter)); + }); + } + } else { + setState(State.ERROR, result?.reason || "Verification failed."); + } + if (!get(config).disableAutoFocus) { + getCheckboxElement()?.focus(); + } + } + function configure(newConfig) { + Object.assign(get(userConfig), { + ...Object.fromEntries(Object.entries(newConfig).filter(([_, value]) => value !== void 0)) + }); + } + function getConfiguration() { + return { ...get(config) }; + } + function getState() { + return get(currentState); + } + function hide() { + set(visible, false); + } + function log(...args) { + if (get(config).debug || args.some((a) => a instanceof Error)) { + console[args[0] instanceof Error ? "error" : "log"]("ALTCHA", `[name=${get(config).name}]`, ...args); + } + } + function reset$1(newState = State.UNVERIFIED, err = null) { + set(checked, false); + set(error, err, true); + set(payload, null); + if (get(currentController)) { + get(currentController).abort(); + } + if (get(expirationTimeout)) { + clearTimeout(get(expirationTimeout)); + set(expirationTimeout, null); + } + setState(newState); + } + function setState(newState, err = null) { + set(currentState, newState, true); + set(error, err, true); + dispatch("statechange", { payload: get(payload), state: get(currentState) }); + } + function show() { + set(visible, true); + tick().then(() => { + updateUI(); + }); + } + function updateUI() { + switch (get(config).display) { + case "floating": + return repositionFloating(); + } + set(updateUISignal, get(updateUISignal) + 1); + } + async function verify(options = {}) { + const { + concurrency = Math.max(1, get(config).workers), + controller = new AbortController(), + minDuration = get(config).minDuration + } = options; + const start = performance.now(); + let challenge = null; + let solution = null; + let isChallengeV12 = false; + const hook = await callHook("onVerify", options); + if (hook !== void 0) { + return hook; + } + reset$1(State.VERIFYING); + set(currentController, controller, true); + try { + if (!isSecureContext) { + throw new Error("Secure context (HTTPS) required."); + } + if (get(config).mockError) { + throw new Error("Mock error."); + } + if (get(config).test) { + log("running test mode with null challenge"); + await delay(Math.max(0, minDuration - (performance.now() - start))); + if (get(currentController)?.signal.aborted) { + reset$1(); + return null; + } + set(payload, btoa(JSON.stringify({ challenge: null, solution: null, test: true })), true); + log("verified"); + setState(State.VERIFIED); + dispatch("verified", { payload: get(payload) }); + return { payload: get(payload) }; + } + challenge = await fetchChallenge(); + if (!challenge) { + throw new Error("Failed to fetch challenge."); + } + log("challenge", challenge); + if ("configuration" in challenge) { + log("re-configuring from challenge", challenge.configuration); + configure(challenge.configuration); + } + if (challenge.parameters.expiresAt) { + setChallengeExpiration(challenge.parameters.expiresAt); + } + isChallengeV12 = "_version" in challenge && challenge._version === 1; + const createWorker = globalThis.$altcha.algorithms.get(challenge.parameters.algorithm); + if (!createWorker) { + throw new Error(`Unsupported algorithm ${challenge.parameters.algorithm}.`); + } + solution = await solveChallengeWorkers({ + challenge, + concurrency, + controller, + createWorker, + counterMode: isChallengeV12 ? "string" : "uint32", + onOutOfMemory: (c) => { + log("out of memory error received"); + dispatch("outofmemory"); + if (get(config).retryOnOutOfMemoryError && c > 1) { + const retryConcurrency = Math.floor(c / 2); + log(`retrying with ${retryConcurrency} workers...`); + return retryConcurrency; + } + }, + timeout: get(config).timeout + }); + if (get(currentController)?.signal.aborted) { + reset$1(); + return null; + } + if (!solution) { + throw new Error("Failed to find solution."); + } + log("solution", solution); + await delay(Math.max(0, minDuration - (performance.now() - start))); + set(codeChallenge, challenge.codeChallenge || get(config).codeChallenge || null, true); + if (isChallengeV12) { + set(payload, btoa(JSON.stringify(createPayloadV1(challenge, solution))), true); + } else { + set( + payload, + btoa(JSON.stringify({ + challenge: { + parameters: challenge.parameters, + signature: challenge.signature + }, + solution + })), + true + ); + } + if (get(codeChallenge)) { + log("requesting code verification"); + setState(State.CODE); + dispatch("codechallenge", { codeChallenge: get(codeChallenge) }); + } else if (get(config).verifyUrl) { + await verifyServer(); + } else { + log("verified"); + setState(State.VERIFIED); + dispatch("verified", { payload: get(payload) }); + } + } catch (err) { + log("verification failed", err); + setState(State.ERROR, String(err)); + return null; + } finally { + set(currentController, null); + } + return { challenge, payload: get(payload), solution }; + } + var $$exports = { + configure, + getConfiguration, + getState, + hide, + log, + reset: reset$1, + setState, + show, + updateUI, + verify + }; + var fragment = root(); + event("scroll", $document, onDocumentScroll); + event("click", $document, onDocumentClick); + event("pageshow", $window, onWindowPageshow); + event("resize", $window, onWindowResize); + var node = first_child(fragment); + { + var consequent = ($$anchor2) => { + var div = root_1(); + append($$anchor2, div); + }; + if_block(node, ($$render) => { + if (get(config).display === "overlay" && get(visible)) $$render(consequent); + }); + } + var div_1 = sibling(node, 2); + var node_1 = child(div_1); + { + var consequent_2 = ($$anchor2) => { + var fragment_1 = root_2(); + var div_2 = first_child(fragment_1); + var node_2 = sibling(div_2, 2); + { + var consequent_1 = ($$anchor3) => { + var div_3 = root_3(); + html(div_3, () => document.querySelector(get(config).overlayContent)?.innerHTML, true); + reset(div_3); + append($$anchor3, div_3); + }; + if_block(node_2, ($$render) => { + if (get(config).overlayContent) $$render(consequent_1); + }); + } + event("click", div_2, onCloseClick, true); + append($$anchor2, fragment_1); + }; + if_block(node_1, ($$render) => { + if (get(config).display === "overlay" && get(visible)) $$render(consequent_2); + }); + } + var div_4 = sibling(node_1, 2); + var div_5 = child(div_4); + var div_6 = child(div_5); + var node_3 = child(div_6); + { + let $0 = /* @__PURE__ */ user_derived(() => get(config).display === "standard" && get(auto) !== "onsubmit" || get(currentState) === State.VERIFYING); + component(node_3, () => get(CheckboxComponent), ($$anchor2, CheckboxComponent_1) => { + CheckboxComponent_1($$anchor2, { + get id() { + return get(checkboxId); + }, + name: "", + get required() { + return get($0); + }, + get loading() { + return get(loading); + }, + get checked() { + return get(checked); + }, + onchange: onCheckboxChange, + oninvalid: onCheckboxInvalid + }); + }); + } + var label = sibling(node_3, 2); + var node_4 = child(label); + { + var consequent_3 = ($$anchor2) => { + var text$1 = text(); + template_effect(() => set_text(text$1, get(strings).verificationRequired)); + append($$anchor2, text$1); + }; + var consequent_4 = ($$anchor2) => { + var text_1 = text(); + template_effect(() => set_text(text_1, get(strings).verifying)); + append($$anchor2, text_1); + }; + var consequent_5 = ($$anchor2) => { + var text_2 = text(); + template_effect(() => set_text(text_2, get(strings).verified)); + append($$anchor2, text_2); + }; + var alternate = ($$anchor2) => { + var text_3 = text(); + template_effect(() => set_text(text_3, get(strings).label)); + append($$anchor2, text_3); + }; + if_block(node_4, ($$render) => { + if (get(currentState) === State.CODE && get(codeChallenge)) $$render(consequent_3); + else if (get(currentState) === State.VERIFYING) $$render(consequent_4, 1); + else if (get(currentState) === State.VERIFIED) $$render(consequent_5, 2); + else $$render(alternate, -1); + }); + } + reset(label); + reset(div_6); + var node_5 = sibling(div_6, 2); + { + var consequent_6 = ($$anchor2) => { + Logo($$anchor2, { + get strings() { + return get(strings); + } + }); + }; + if_block(node_5, ($$render) => { + if (get(showLogo)) $$render(consequent_6); + }); + } + reset(div_5); + var node_6 = sibling(div_5, 2); + { + var consequent_7 = ($$anchor2) => { + { + let $0 = /* @__PURE__ */ user_derived(() => get(config).display === "bar" && get(showLogo)); + Footer($$anchor2, { + get logo() { + return get($0); + }, + get strings() { + return get(strings); + } + }); + } + }; + if_block(node_6, ($$render) => { + if (get(showFooter)) $$render(consequent_7); + }); + } + var node_7 = sibling(node_6, 2); + { + var consequent_8 = ($$anchor2) => { + var div_7 = root_10(); + bind_this(div_7, ($$value) => set(elAnchorArrow, $$value), () => get(elAnchorArrow)); + append($$anchor2, div_7); + }; + if_block(node_7, ($$render) => { + if (get(config).display === "floating") $$render(consequent_8); + }); + } + var node_8 = sibling(node_7, 2); + { + var consequent_9 = ($$anchor2) => { + var input_1 = root_11(); + remove_input_defaults(input_1); + template_effect(() => { + set_attribute(input_1, "name", get(config).name); + set_value(input_1, get(payload)); + }); + append($$anchor2, input_1); + }; + if_block(node_8, ($$render) => { + if (!get(config).setCookie) $$render(consequent_9); + }); + } + reset(div_4); + var node_9 = sibling(div_4, 2); + { + var consequent_12 = ($$anchor2) => { + Popover($$anchor2, { + get anchor() { + return get(elRoot); + }, + onClickOutside: () => { + if (isSecureContext) { + reset$1(); + } + }, + get placement() { + return get(config).popoverPlacement; + }, + role: "alert", + variant: "error", + get dir() { + return get(dir); + }, + get updateUISignal() { + return get(updateUISignal); + }, + children: ($$anchor3, $$slotProps) => { + var fragment_9 = comment(); + var node_10 = first_child(fragment_9); + { + var consequent_10 = ($$anchor4) => { + var div_8 = root_14(); + append($$anchor4, div_8); + }; + var consequent_11 = ($$anchor4) => { + var div_9 = root_15(); + var text_4 = child(div_9, true); + reset(div_9); + template_effect(() => set_text(text_4, get(strings).expired)); + append($$anchor4, div_9); + }; + var alternate_1 = ($$anchor4) => { + var div_10 = root_16(); + var text_5 = child(div_10, true); + reset(div_10); + template_effect(() => { + set_attribute(div_10, "title", get(error)); + set_text(text_5, get(strings).error); + }); + append($$anchor4, div_10); + }; + if_block(node_10, ($$render) => { + if (!get(error) && !isSecureContext) $$render(consequent_10); + else if (!get(error) && get(currentState) === State.EXPIRED) $$render(consequent_11, 1); + else $$render(alternate_1, -1); + }); + } + append($$anchor3, fragment_9); + }, + $$slots: { default: true } + }); + }; + var consequent_14 = ($$anchor2) => { + var fragment_10 = comment(); + var node_11 = first_child(fragment_10); + key(node_11, () => get(codeChallenge), ($$anchor3) => { + { + let $0 = /* @__PURE__ */ user_derived(() => get(config).codeChallengeDisplay !== "standard"); + Popover($$anchor3, { + get anchor() { + return get(elRoot); + }, + get backdrop() { + return get($0); + }, + get display() { + return get(config).codeChallengeDisplay; + }, + onClose: () => { + reset$1(); + }, + get placement() { + return get(config).popoverPlacement; + }, + role: "dialog", + get "aria-label"() { + return get(strings).verificationRequired; + }, + get dir() { + return get(dir); + }, + get updateUISignal() { + return get(updateUISignal); + }, + children: ($$anchor4, $$slotProps) => { + var fragment_12 = root_19(); + var node_12 = first_child(fragment_12); + Code(node_12, { + get audioUrl() { + return get(codeChallengeAudioUrl); + }, + get imageUrl() { + return get(codeChallengeImageUrl); + }, + onCancel: () => reset$1(), + onReload: () => verify(), + onSubmit: (code) => verifyServer(code), + get codeChallenge() { + return get(codeChallenge); + }, + get config() { + return get(config); + }, + get strings() { + return get(strings); + } + }); + var node_13 = sibling(node_12, 2); + { + var consequent_13 = ($$anchor5) => { + Footer($$anchor5, { + get logo() { + return get(showLogo); + }, + get strings() { + return get(strings); + } + }); + }; + if_block(node_13, ($$render) => { + if (get(showFooter) && get(config).codeChallengeDisplay !== "standard") $$render(consequent_13); + }); + } + append($$anchor4, fragment_12); + }, + $$slots: { default: true } + }); + } + }); + append($$anchor2, fragment_10); + }; + if_block(node_9, ($$render) => { + if (get(error) || get(currentState) === State.EXPIRED || !isSecureContext) $$render(consequent_12); + else if (get(codeChallenge) && get(currentState) === State.CODE) $$render(consequent_14, 1); + }); + } + reset(div_1); + bind_this(div_1, ($$value) => set(elRoot, $$value), () => get(elRoot)); + template_effect( + ($0) => { + set_attribute(div_1, "data-state", get(currentState)); + set_attribute(div_1, "data-display", get(config).display || void 0); + set_attribute(div_1, "data-placement", $0); + set_attribute(div_1, "data-visible", get(visible) || void 0); + set_attribute(div_1, "dir", get(dir)); + set_attribute(label, "for", get(checkboxId)); + div_1.dir = div_1.dir; + }, + [() => getPlacement(get(config).display)] + ); + append($$anchor, fragment); + var $$pop = pop($$exports); + $$cleanup(); + return $$pop; +} +if (typeof window !== "undefined" && window.customElements && !customElements.get("altcha-widget")) customElements.define("altcha-widget", create_custom_element( + Widget, + { + auto: { type: "String" }, + challenge: { type: "String" }, + configuration: { type: "String" }, + display: { type: "String" }, + language: { type: "String" }, + name: { type: "String" }, + theme: { type: "String" }, + type: { type: "String" }, + workers: { type: "Number" } + }, + [], + [ + "configure", + "getConfiguration", + "getState", + "hide", + "log", + "reset", + "setState", + "show", + "updateUI", + "verify" + ] +)); +const jsContent$1 = `(function() { + "use strict"; + function bufferStartsWith(buffer, prefix) { + if (prefix.length > buffer.length) { + return false; + } + for (let i = 0; i < prefix.length; i++) { + if (buffer[i] !== prefix[i]) { + return false; + } + } + return true; + } + function bufferToHex(buffer) { + return Array.from(new Uint8Array(buffer)).map((b) => b.toString(16).padStart(2, "0")).join(""); + } + function concatBuffers(a, b) { + const out = new Uint8Array(a.length + b.length); + out.set(a, 0); + out.set(b, a.length); + return out; + } + function hexToBuffer(hex) { + if (hex.length % 2 !== 0) { + throw new Error(\`Hex string must have an even length. Got: \${hex}\`); + } + const buffer = new ArrayBuffer(hex.length / 2); + const view = new DataView(buffer); + for (let i = 0; i < hex.length; i += 2) { + const byteString = hex.substring(i, i + 2); + const byteValue = parseInt(byteString, 16); + view.setUint8(i / 2, byteValue); + } + return new Uint8Array(buffer); + } + async function delay(ms) { + await new Promise((resolve) => setTimeout(resolve, ms)); + } + function timeDuration(start) { + return Math.floor((performance.now() - start) * 10) / 10; + } + class PasswordBuffer { + constructor(nonce, mode = "uint32") { + this.nonce = nonce; + this.mode = mode; + this.buffer = new Uint8Array(this.nonce.length + this.COUNTER_BYTES); + this.buffer.set(this.nonce, 0); + this.dataView = new DataView(this.buffer.buffer); + } + nonce; + mode; + COUNTER_BYTES = 4; + buffer; + dataView; + encoder = new TextEncoder(); + /** + * Appends the counter to the nonce buffer. + * In 'string' mode, encodes the counter as a UTF-8 string. + * In 'uint32' mode, writes the counter as a big-endian 32-bit integer. + */ + setCounter(n) { + if (this.mode === "string") { + return concatBuffers(this.nonce, this.encoder.encode(n.toString())); + } + this.dataView.setUint32(this.nonce.length, n, false); + return this.buffer; + } + } + async function solveChallenge(options) { + const { + challenge, + controller, + counterMode = "uint32", + counterStart = 0, + counterStep = 1, + deriveKey: deriveKey2, + timeout = 9e4 + } = options; + const { nonce, keyPrefix, salt } = challenge.parameters; + const nonceBuf = hexToBuffer(nonce); + const saltBuf = hexToBuffer(salt); + const keyPrefixBuf = keyPrefix.length % 2 === 0 ? hexToBuffer(keyPrefix) : null; + const password = new PasswordBuffer(nonceBuf, counterMode); + const start = performance.now(); + let counter = counterStart; + let iterations = 0; + let derivedKeyHex = ""; + let lastYield = start; + while (true) { + if (controller?.signal.aborted || timeout && iterations % 10 === 0 && performance.now() - start > timeout) { + return null; + } + const { derivedKey } = await deriveKey2( + challenge.parameters, + saltBuf, + password.setCounter(counter) + ); + if (iterations % 10 === 0 && performance.now() - lastYield > 200) { + await delay(0); + lastYield = performance.now(); + } + if (keyPrefixBuf ? bufferStartsWith(derivedKey, keyPrefixBuf) : bufferToHex(derivedKey).startsWith(keyPrefix)) { + derivedKeyHex = bufferToHex(derivedKey); + break; + } + counter = counter + counterStep; + iterations = iterations + 1; + } + return { + counter, + derivedKey: derivedKeyHex, + time: timeDuration(start) + }; + } + function handler(options) { + const { deriveKey: deriveKey2 } = options; + let controller = void 0; + self.onmessage = async (message) => { + const { challenge, counterMode, counterStart, counterStep, timeout, type } = message.data; + if (type === "abort") { + controller?.abort(); + } else if (type === "work") { + controller = new AbortController(); + let solution; + try { + solution = await solveChallenge({ + challenge, + controller, + counterStart, + counterStep, + deriveKey: deriveKey2, + counterMode, + timeout + }); + } catch (err) { + return self.postMessage({ error: err }); + } + self.postMessage(solution); + } + }; + } + function getDigest(algorithm) { + switch (algorithm) { + case "PBKDF2/SHA-512": + return "SHA-512"; + case "PBKDF2/SHA-384": + return "SHA-384"; + case "PBKDF2/SHA-256": + default: + return "SHA-256"; + } + } + async function deriveKey(parameters, salt, password) { + const { algorithm, cost, keyLength = 32 } = parameters; + const passwordKey = await crypto.subtle.importKey( + "raw", + password, + { name: "PBKDF2" }, + false, + ["deriveKey"] + ); + const derivedKey = await crypto.subtle.deriveKey( + { + name: "PBKDF2", + salt, + iterations: cost, + hash: getDigest(algorithm) + }, + passwordKey, + { name: "AES-GCM", length: keyLength * 8 }, + true, + ["encrypt"] + ); + return { + derivedKey: new Uint8Array(await crypto.subtle.exportKey("raw", derivedKey)) + }; + } + handler({ + deriveKey + }); +})(); +`; +const blob$1 = typeof self !== "undefined" && self.Blob && new Blob(["(self.URL || self.webkitURL).revokeObjectURL(self.location.href);", jsContent$1], { type: "text/javascript;charset=utf-8" }); +function WorkerWrapper$1(options) { + let objURL; + try { + objURL = blob$1 && (self.URL || self.webkitURL).createObjectURL(blob$1); + if (!objURL) throw ""; + const worker = new Worker(objURL, { + name: options?.name + }); + worker.addEventListener("error", () => { + (self.URL || self.webkitURL).revokeObjectURL(objURL); + }); + return worker; + } catch (e) { + return new Worker( + "data:text/javascript;charset=utf-8," + encodeURIComponent(jsContent$1), + { + name: options?.name + } + ); + } +} +const jsContent = `(function() { + "use strict"; + function bufferStartsWith(buffer, prefix) { + if (prefix.length > buffer.length) { + return false; + } + for (let i = 0; i < prefix.length; i++) { + if (buffer[i] !== prefix[i]) { + return false; + } + } + return true; + } + function bufferToHex(buffer) { + return Array.from(new Uint8Array(buffer)).map((b) => b.toString(16).padStart(2, "0")).join(""); + } + function concatBuffers(a, b) { + const out = new Uint8Array(a.length + b.length); + out.set(a, 0); + out.set(b, a.length); + return out; + } + function hexToBuffer(hex) { + if (hex.length % 2 !== 0) { + throw new Error(\`Hex string must have an even length. Got: \${hex}\`); + } + const buffer = new ArrayBuffer(hex.length / 2); + const view = new DataView(buffer); + for (let i = 0; i < hex.length; i += 2) { + const byteString = hex.substring(i, i + 2); + const byteValue = parseInt(byteString, 16); + view.setUint8(i / 2, byteValue); + } + return new Uint8Array(buffer); + } + async function delay(ms) { + await new Promise((resolve) => setTimeout(resolve, ms)); + } + function timeDuration(start) { + return Math.floor((performance.now() - start) * 10) / 10; + } + class PasswordBuffer { + constructor(nonce, mode = "uint32") { + this.nonce = nonce; + this.mode = mode; + this.buffer = new Uint8Array(this.nonce.length + this.COUNTER_BYTES); + this.buffer.set(this.nonce, 0); + this.dataView = new DataView(this.buffer.buffer); + } + nonce; + mode; + COUNTER_BYTES = 4; + buffer; + dataView; + encoder = new TextEncoder(); + /** + * Appends the counter to the nonce buffer. + * In 'string' mode, encodes the counter as a UTF-8 string. + * In 'uint32' mode, writes the counter as a big-endian 32-bit integer. + */ + setCounter(n) { + if (this.mode === "string") { + return concatBuffers(this.nonce, this.encoder.encode(n.toString())); + } + this.dataView.setUint32(this.nonce.length, n, false); + return this.buffer; + } + } + async function solveChallenge(options) { + const { + challenge, + controller, + counterMode = "uint32", + counterStart = 0, + counterStep = 1, + deriveKey: deriveKey2, + timeout = 9e4 + } = options; + const { nonce, keyPrefix, salt } = challenge.parameters; + const nonceBuf = hexToBuffer(nonce); + const saltBuf = hexToBuffer(salt); + const keyPrefixBuf = keyPrefix.length % 2 === 0 ? hexToBuffer(keyPrefix) : null; + const password = new PasswordBuffer(nonceBuf, counterMode); + const start = performance.now(); + let counter = counterStart; + let iterations = 0; + let derivedKeyHex = ""; + let lastYield = start; + while (true) { + if (controller?.signal.aborted || timeout && iterations % 10 === 0 && performance.now() - start > timeout) { + return null; + } + const { derivedKey } = await deriveKey2( + challenge.parameters, + saltBuf, + password.setCounter(counter) + ); + if (iterations % 10 === 0 && performance.now() - lastYield > 200) { + await delay(0); + lastYield = performance.now(); + } + if (keyPrefixBuf ? bufferStartsWith(derivedKey, keyPrefixBuf) : bufferToHex(derivedKey).startsWith(keyPrefix)) { + derivedKeyHex = bufferToHex(derivedKey); + break; + } + counter = counter + counterStep; + iterations = iterations + 1; + } + return { + counter, + derivedKey: derivedKeyHex, + time: timeDuration(start) + }; + } + function handler(options) { + const { deriveKey: deriveKey2 } = options; + let controller = void 0; + self.onmessage = async (message) => { + const { challenge, counterMode, counterStart, counterStep, timeout, type } = message.data; + if (type === "abort") { + controller?.abort(); + } else if (type === "work") { + controller = new AbortController(); + let solution; + try { + solution = await solveChallenge({ + challenge, + controller, + counterStart, + counterStep, + deriveKey: deriveKey2, + counterMode, + timeout + }); + } catch (err) { + return self.postMessage({ error: err }); + } + self.postMessage(solution); + } + }; + } + async function deriveKey(parameters, salt, password) { + const { algorithm, keyLength = 32 } = parameters; + const iterations = Math.max(1, parameters.cost); + let data = void 0; + let derivedKey = void 0; + for (let i = 0; i < iterations; i++) { + if (i === 0) { + data = concatBuffers(salt, password); + } else { + data = derivedKey; + } + derivedKey = new Uint8Array( + (await crypto.subtle.digest(algorithm, data)).slice(0, keyLength) + ); + } + return { + parameters: {}, + derivedKey + }; + } + handler({ + deriveKey + }); +})(); +`; +const blob = typeof self !== "undefined" && self.Blob && new Blob(["(self.URL || self.webkitURL).revokeObjectURL(self.location.href);", jsContent], { type: "text/javascript;charset=utf-8" }); +function WorkerWrapper(options) { + let objURL; + try { + objURL = blob && (self.URL || self.webkitURL).createObjectURL(blob); + if (!objURL) throw ""; + const worker = new Worker(objURL, { + name: options?.name + }); + worker.addEventListener("error", () => { + (self.URL || self.webkitURL).revokeObjectURL(objURL); + }); + return worker; + } catch (e) { + return new Worker( + "data:text/javascript;charset=utf-8," + encodeURIComponent(jsContent), + { + name: options?.name + } + ); + } +} +const css = ':root {\n --altcha-border-color: var(--altcha-color-neutral);\n --altcha-border-width: 1px;\n --altcha-border-radius: 6px;\n --altcha-color-base: light-dark(oklch(100% 0.00011 271.152), oklch(20.904% 0.00002 271.152));\n --altcha-color-base-content: light-dark(\n oklch(20.904% 0.00002 271.152),\n oklch(100% 0.00011 271.152)\n );\n --altcha-color-error: oklch(51.284% 0.20527 28.678);\n --altcha-color-error-content: oklch(100% 0.00011 271.152);\n --altcha-color-neutral: light-dark(oklch(83.591% 0.0001 271.152), oklch(46.04% 0.00005 271.152));\n --altcha-color-neutral-content: light-dark(\n oklch(46.76% 0.00005 271.152),\n oklch(100% 0.00011 271.152)\n );\n --altcha-color-primary: oklch(40.279% 0.2449 268.131);\n --altcha-color-primary-content: oklch(100% 0.00011 271.152);\n --altcha-color-success: oklch(55.748% 0.18968 142.511);\n --altcha-color-success-content: oklch(100% 0.00011 271.152);\n --altcha-checkbox-border-color: light-dark(\n oklch(66.494% 0.00233 15.434),\n oklch(51.028% 0.00006 271.152)\n );\n --altcha-checkbox-border-radius: 5px;\n --altcha-checkbox-border-width: var(--altcha-border-width);\n --altcha-checkbox-outline: 2px solid var(--altcha-checkbox-outline-color);\n --altcha-checkbox-outline-color: -webkit-focus-ring-color;\n --altcha-checkbox-outline-offset: 2px;\n --altcha-checkbox-size: 22px;\n --altcha-checkbox-transition-duration: var(--altcha-transition-duration);\n --altcha-input-background-color: var(--altcha-color-base);\n --altcha-input-border-radius: 3px;\n --altcha-input-border-width: 1px;\n --altcha-input-color: var(--altcha-color-base-content);\n --altcha-max-width: 320px;\n --altcha-padding: 0.75rem;\n --altcha-popover-arrow-size: 6px;\n --altcha-popover-color: var(--altcha-border-color);\n --altcha-shadow: drop-shadow(3px 3px 6px oklch(0% 0 0 / 0.2));\n --altcha-spinner-color: var(--altcha-color-base-content);\n --altcha-switch-background-color: var(--altcha-color-neutral);\n --altcha-switch-border-radius: calc(infinity * 1px);\n --altcha-switch-height: var(--altcha-checkbox-size);\n --altcha-switch-padding: 0.25rem;\n --altcha-switch-width: calc(var(--altcha-checkbox-size) * 1.75);\n --altcha-switch-toggle-border-radius: 100%;\n --altcha-switch-toggle-color: var(--altcha-color-neutral-content);\n --altcha-switch-toggle-size: calc(\n var(--altcha-switch-height) - calc(var(--altcha-switch-padding) * 2)\n );\n --altcha-transition-duration: 0.6s;\n --altcha-z-index: 99999999;\n --altcha-z-index-popover: 999999999;\n}\n\n@supports (-moz-appearance: none) {\n :root {\n --altcha-checkbox-outline-color: var(--altcha-color-primary);\n }\n}\n.altcha {\n all: revert-layer;\n display: none;\n font-family: inherit;\n font-size: inherit;\n position: relative;\n}\n.altcha[data-visible] {\n display: block;\n}\n.altcha-popover, .altcha-popover * {\n all: revert-layer;\n box-sizing: border-box;\n font-family: inherit;\n font-size: inherit;\n line-height: 1.25;\n}\n.altcha * {\n all: revert-layer;\n box-sizing: border-box;\n font-family: inherit;\n font-size: inherit;\n line-height: 1.25;\n}\n.altcha a, .altcha-popover a {\n color: currentColor;\n text-decoration: none;\n}\n.altcha a:hover, .altcha-popover a:hover {\n color: currentColor;\n}\n.altcha-main {\n align-items: start;\n background-color: var(--altcha-color-base);\n border: var(--altcha-border-width, 1px) solid var(--altcha-border-color);\n border-radius: var(--altcha-border-radius, 0);\n color: var(--altcha-color-base-content);\n display: flex;\n flex-direction: column;\n gap: 0.5rem;\n justify-content: space-between;\n padding: var(--altcha-padding);\n max-width: var(--altcha-max-width, 100%);\n}\n.altcha-main > * {\n display: flex;\n width: 100%;\n}\n.altcha-main > *:first-child {\n flex-grow: 1;\n}\n.altcha-checkbox-wrap {\n align-items: center;\n display: flex;\n flex-direction: row;\n flex-grow: 1;\n gap: 0.5rem;\n}\n.altcha-checkbox-wrap > * {\n display: flex;\n}\n.altcha-logo {\n opacity: 0.7;\n}\n.altcha-footer {\n align-items: center;\n display: flex;\n flex-grow: 1;\n gap: 0.5rem;\n justify-content: flex-end;\n font-size: 0.7rem;\n opacity: 0.7;\n}\n.altcha-footer p {\n margin: 0;\n padding: 0;\n}\n.altcha-error {\n font-size: 0.85rem;\n}\n.altcha-button {\n align-items: center;\n background: var(--altcha-color-primary);\n border: var(--altcha-input-border-width) solid var(--altcha-color-primary);\n border-radius: var(--altcha-input-border-radius);\n color: var(--altcha-color-primary-content);\n cursor: pointer;\n display: flex;\n font-size: 0.9rem;\n gap: 0.5rem;\n padding: 0.35rem;\n}\n.altcha-button:focus {\n border-color: var(--altcha-color-primary);\n outline: var(--altcha-checkbox-outline);\n outline-offset: var(--altcha-checkbox-outline-offset);\n}\n.altcha-button > .altcha-spinner, .altcha-button > svg {\n height: 20px;\n width: 20px;\n}\n.altcha-button-secondary {\n background: transparent;\n border-color: var(--altcha-color-neutral);\n color: var(--altcha-color-neutral-content);\n}\n.altcha-input {\n background: var(--altcha-input-background-color);\n border: var(--altcha-input-border-width) solid var(--altcha-color-neutral);\n border-radius: var(--altcha-input-border-radius);\n color: var(--altcha-input-color);\n flex-grow: 1;\n font-size: 1rem;\n min-width: 0;\n padding: 0.25rem;\n width: auto;\n}\n.altcha-input:focus {\n border-color: var(--altcha-color-primary);\n outline: var(--altcha-checkbox-outline);\n outline-offset: var(--altcha-checkbox-outline-offset);\n}\n.altcha-spinner {\n animation: altcha-rotate 0.6s linear infinite;\n border-radius: 100%;\n border: var(--altcha-checkbox-border-width) solid var(--altcha-spinner-color);\n border-bottom-color: transparent;\n border-right-color: transparent;\n opacity: 0.7;\n}\n.altcha-popover {\n background-color: var(--altcha-color-base);\n border: var(--altcha-border-width) solid var(--altcha-border-color);\n border-radius: var(--altcha-border-radius);\n color: var(--altcha-color-base-content);\n filter: var(--altcha-shadow);\n position: absolute;\n left: calc(var(--altcha-padding) / 2);\n max-width: calc(var(--altcha-max-width) - var(--altcha-padding));\n top: calc(var(--altcha-padding) + var(--altcha-checkbox-size) + var(--altcha-popover-arrow-size));\n z-index: var(--altcha-z-index-popover);\n}\n.altcha-popover-arrow {\n border: var(--altcha-popover-arrow-size) solid transparent;\n border-bottom-color: var(--altcha-popover-color);\n content: "";\n height: 0;\n left: calc(var(--altcha-checkbox-size) / 2);\n position: absolute;\n top: calc(var(--altcha-popover-arrow-size) * -2);\n width: 0;\n}\n.altcha-popover-content {\n max-height: 100dvh;\n overflow: auto;\n padding: var(--altcha-padding);\n}\n.altcha-popover[data-top=true][data-display=standard] {\n bottom: calc(100% - (var(--altcha-padding) - var(--altcha-popover-arrow-size)));\n top: auto;\n}\n.altcha-popover[data-top=true][data-display=standard] .altcha-popover-arrow {\n border-bottom-color: transparent;\n border-top-color: var(--altcha-popover-color);\n bottom: calc(var(--altcha-popover-arrow-size) * -2);\n top: auto;\n}\n.altcha-popover[data-variant=error] {\n --altcha-popover-color: var(--altcha-color-error);\n background-color: var(--altcha-color-error);\n border-color: var(--altcha-color-error);\n color: var(--altcha-color-error-content);\n}\n.altcha-popover[data-variant=error] .altcha-popover-content {\n padding: calc(var(--altcha-padding) / 1.5) var(--altcha-padding);\n}\n.altcha-popover[data-display=overlay] {\n animation: altcha-overlay-slidein 0.5s forwards;\n left: 50%;\n position: fixed;\n top: 45%;\n transform: translate(-50%, -50%);\n width: var(--altcha-max-width);\n z-index: var(--altcha-z-index);\n}\n.altcha-popover[data-display=bottomsheet] {\n animation: altcha-bottomsheet-slideup 0.5s forwards;\n border-bottom-left-radius: 0;\n border-bottom-right-radius: 0;\n border-bottom: 0;\n bottom: -100%;\n left: 50%;\n position: fixed;\n top: auto;\n transform: translate(-50%, 0);\n width: var(--altcha-max-width);\n z-index: var(--altcha-z-index);\n}\n.altcha-popover[data-display=bottomsheet] .altcha-popover-content {\n padding-bottom: calc(var(--altcha-padding) * 2);\n}\n.altcha-popover-backdrop {\n background: var(--altcha-color-base-content);\n bottom: 0;\n left: 0;\n opacity: 0.1;\n position: fixed;\n right: 0;\n top: 0;\n transition: opacity 0.5s;\n z-index: var(--altcha-z-index);\n}\n.altcha-popover-close {\n color: var(--altcha-color-base-content);\n cursor: pointer;\n display: inline-block;\n font-size: 1rem;\n height: 1.25rem;\n line-height: 0.95;\n position: absolute;\n right: 0;\n text-align: center;\n text-shadow: 0 0 1px var(--altcha-color-base);\n top: -1.5rem;\n width: 1.25rem;\n z-index: var(--altcha-z-index);\n}\n[dir=rtl] .altcha-popover {\n left: auto;\n right: calc(var(--altcha-padding) / 2);\n}\n[dir=rtl] .altcha-popover-arrow {\n left: auto;\n right: calc(var(--altcha-checkbox-size) / 2);\n}\n[dir=rtl] .altcha-popover-close {\n left: 0;\n right: auto;\n}\n.altcha-popover[data-display=bottomsheet] .altcha-footer, .altcha-popover[data-display=overlay] .altcha-footer {\n align-items: center;\n justify-content: center;\n padding-top: 1rem;\n gap: 0.5rem;\n}\n.altcha-popover[data-display=bottomsheet] .altcha-footer svg, .altcha-popover[data-display=overlay] .altcha-footer svg {\n height: 18px;\n width: 18px;\n vertical-align: middle;\n}\n.altcha-code-challenge > form {\n display: flex;\n flex-direction: column;\n gap: 0.5rem;\n}\n.altcha-code-challenge-title {\n font-weight: 600;\n}\n.altcha-code-challenge-text {\n font-size: 0.85rem;\n}\n.altcha-code-challenge-image {\n background: white;\n border: var(--altcha-input-border-width) solid var(--altcha-color-neutral);\n border-radius: var(--altcha-input-border-radius);\n object-fit: contain;\n height: 50px;\n}\n.altcha-code-challenge-row {\n display: flex;\n gap: 0.5rem;\n}\n.altcha-code-challenge-buttons {\n align-items: center;\n display: flex;\n flex-direction: column;\n gap: 0.5rem;\n margin-top: var(--altcha-padding);\n justify-content: space-between;\n}\n.altcha-code-challenge-buttons button {\n justify-content: center;\n width: 100%;\n}\n.altcha-checkbox {\n cursor: pointer;\n height: var(--altcha-checkbox-size);\n position: relative;\n width: var(--altcha-checkbox-size);\n}\n.altcha-checkbox input {\n appearance: none;\n background: var(--altcha-input-background-color);\n border: var(--altcha-checkbox-border-width, 2px) solid var(--altcha-checkbox-border-color);\n border-radius: var(--altcha-checkbox-border-radius);\n cursor: pointer;\n height: var(--altcha-checkbox-size);\n left: 0;\n margin: 0;\n padding: 0;\n position: absolute;\n top: 0;\n width: var(--altcha-checkbox-size);\n}\n@supports (hanging-punctuation: first) and (font: -apple-system-body) and (-webkit-appearance: none) {\n .altcha-checkbox input {\n /* Safari-only: fixes focus outline */\n }\n .altcha-checkbox input:focus {\n outline-width: 2px;\n outline-style: solid;\n }\n}\n.altcha-checkbox input:before {\n border-radius: var(--altcha-checkbox-border-radius);\n content: "";\n width: 100%;\n height: 100%;\n background: var(--altcha-color-neutral);\n display: block;\n transform: scale(0);\n}\n.altcha-checkbox input:checked {\n background-color: var(--altcha-color-success);\n border-color: var(--altcha-color-success);\n}\n.altcha-checkbox input:checked::before {\n background-color: var(--altcha-color-success);\n opacity: 0;\n transform: scale(2.2);\n transition: all var(--altcha-checkbox-transition-duration) ease;\n transition-delay: 0.1s;\n}\n.altcha-checkbox svg {\n --altcha-radio-svg-size: calc(var(--altcha-checkbox-size) * 0.5);\n --altcha-radio-svg-offset: calc(var(--altcha-checkbox-size) * 0.25);\n fill: none;\n left: var(--altcha-radio-svg-offset);\n height: var(--altcha-radio-svg-size);\n opacity: 0;\n position: absolute;\n stroke: currentColor;\n stroke-width: 2;\n stroke-linecap: round;\n stroke-linejoin: round;\n stroke-dasharray: 16px;\n stroke-dashoffset: 16px;\n top: var(--altcha-radio-svg-offset);\n transform: translate3d(0, 0, 0);\n width: var(--altcha-radio-svg-size);\n}\n.altcha-checkbox input:checked + svg {\n color: var(--altcha-color-success-content);\n opacity: 1;\n stroke-dashoffset: 0;\n transition: all var(--altcha-checkbox-transition-duration) ease;\n transition-delay: 0.1s;\n}\n.altcha-checkbox-spinner {\n display: none;\n left: 0;\n height: var(--altcha-checkbox-size);\n position: absolute;\n top: 0;\n width: var(--altcha-checkbox-size);\n}\n.altcha-checkbox[data-loading=true] input {\n appearance: none;\n opacity: 0;\n pointer-events: none;\n}\n.altcha-checkbox[data-loading=true] .altcha-checkbox-spinner {\n display: block;\n}\n.altcha-checkbox-native {\n height: var(--altcha-checkbox-size);\n position: relative;\n width: var(--altcha-checkbox-size);\n}\n.altcha-checkbox-native input {\n height: var(--altcha-checkbox-size);\n margin: 0;\n width: var(--altcha-checkbox-size);\n}\n.altcha-checkbox-native-spinner {\n display: none;\n left: 0;\n height: var(--altcha-checkbox-size);\n position: absolute;\n top: 0;\n width: var(--altcha-checkbox-size);\n}\n.altcha-checkbox-native[data-loading=true] input {\n appearance: none;\n opacity: 0;\n pointer-events: none;\n}\n.altcha-checkbox-native[data-loading=true] .altcha-checkbox-native-spinner {\n display: block;\n}\n.altcha-switch {\n align-items: center;\n border-radius: var(--altcha-switch-border-radius);\n background-color: var(--altcha-switch-background-color);\n display: flex;\n height: var(--altcha-switch-height);\n padding: var(--altcha-switch-padding);\n position: relative;\n width: var(--altcha-switch-width);\n}\n.altcha-switch:focus-within {\n outline: var(--altcha-checkbox-outline);\n outline-offset: var(--altcha-checkbox-outline-offset);\n}\n.altcha-switch input {\n appearance: none;\n cursor: pointer;\n height: 100%;\n left: 0;\n opacity: 0;\n position: absolute;\n top: 0;\n width: 100%;\n}\n.altcha-switch-toggle {\n align-items: center;\n background-color: var(--altcha-switch-toggle-color);\n border-radius: var(--altcha-switch-toggle-border-radius);\n cursor: pointer;\n display: flex;\n height: var(--altcha-switch-toggle-size);\n justify-content: center;\n left: var(--altcha-switch-padding);\n position: absolute;\n transition: width 150ms ease-out, left 150ms ease-out;\n width: var(--altcha-switch-toggle-size);\n}\n.altcha-switch-spinner {\n display: none;\n height: var(--altcha-switch-toggle-size);\n width: var(--altcha-switch-toggle-size);\n}\n.altcha-switch[data-loading=true] {\n pointer-events: none;\n}\n.altcha-switch[data-loading=true] .altcha-switch-spinner {\n display: block;\n}\n.altcha-switch[data-loading=true] .altcha-switch-toggle {\n background-color: transparent;\n left: calc(50% - var(--altcha-switch-toggle-size) / 2);\n}\n[data-state=verified] .altcha-switch {\n --altcha-switch-background-color: var(--altcha-color-success);\n}\n[data-state=verified] .altcha-switch-toggle {\n background-color: var(--altcha-color-success-content);\n left: calc(100% - var(--altcha-switch-height) + var(--altcha-switch-padding));\n}\n[dir=rtl] .altcha-switch-toggle {\n left: calc(100% - var(--altcha-switch-height) + var(--altcha-switch-padding));\n}\n[dir=rtl][data-state=verified] .altcha-switch-toggle {\n left: var(--altcha-switch-padding);\n}\n.altcha-floating-arrow {\n border: 6px solid transparent;\n border-bottom-color: var(--altcha-border-color);\n content: "";\n height: 0;\n left: 12px;\n position: absolute;\n top: -12px;\n width: 0;\n}\n.altcha-overlay-backdrop {\n bottom: 0;\n left: 0;\n position: fixed;\n right: 0;\n top: 0;\n transition: opacity var(--altcha-transition-duration);\n z-index: var(--altcha-z-index);\n}\n.altcha-overlay-close {\n display: inline-block;\n color: currentColor;\n cursor: pointer;\n font-size: 1rem;\n height: 1rem;\n line-height: 0.85;\n position: absolute;\n right: 0;\n text-align: center;\n text-shadow: 0 0 1px var(--altcha-color-base);\n top: -1.5rem;\n width: 1rem;\n z-index: var(--altcha-z-index);\n}\n.altcha[data-display=overlay] {\n animation: altcha-overlay-slidein var(--altcha-transition-duration) forwards;\n filter: var(--altcha-shadow);\n left: 50%;\n opacity: 0;\n position: fixed;\n top: 45%;\n transform: translate(-50%, -50%);\n z-index: var(--altcha-z-index);\n}\n.altcha[data-display=overlay] .altcha-main {\n width: var(--altcha-max-width);\n}\n.altcha[data-display=floating] {\n display: none;\n filter: var(--altcha-shadow);\n left: var(--altcha-floating-left, -100%);\n position: fixed;\n top: var(--altcha-floating-top, -100%);\n z-index: var(--altcha-z-index);\n}\n.altcha[data-display=floating] .altcha-main {\n width: var(--altcha-max-width);\n}\n.altcha[data-display=floating][data-floating-position=top] .altcha-floating-arrow {\n border-bottom-color: transparent;\n border-top-color: var(--altcha-border-color);\n bottom: -12px;\n top: auto;\n}\n.altcha[data-display=floating][data-visible] {\n display: flex;\n}\n.altcha[data-display=bar] {\n bottom: -100%;\n filter: var(--altcha-shadow);\n left: 0;\n position: fixed;\n right: 0;\n transition: bottom var(--altcha-transition-duration), top var(--altcha-transition-duration);\n z-index: var(--altcha-z-index);\n}\n.altcha[data-display=bar] .altcha-main {\n align-items: center;\n border-radius: 0;\n border-width: var(--altcha-border-width) 0 0 0;\n flex-direction: row;\n max-width: 100% !important;\n}\n.altcha[data-display=bar] .altcha-main > * {\n width: auto;\n}\n.altcha[data-display=bar][data-placement=top] {\n bottom: auto;\n top: -100%;\n}\n.altcha[data-display=bar][data-placement=top] .altcha-main {\n border-width: 0 0 var(--altcha-border-width) 0;\n}\n.altcha[data-display=bar][data-placement=bottom]:not([data-state=unverified]) {\n bottom: 0;\n}\n.altcha[data-display=bar][data-placement=top]:not([data-state=unverified]) {\n top: 0;\n}\n.altcha[data-display=invisible] {\n display: none;\n}\n\n@keyframes altcha-rotate {\n 0% {\n transform: rotate(0deg);\n }\n 100% {\n transform: rotate(360deg);\n }\n}\n@keyframes altcha-bottomsheet-slideup {\n 100% {\n bottom: 0;\n }\n}\n@keyframes altcha-overlay-slidein {\n 100% {\n opacity: 1;\n top: 50%;\n }\n}'; +injectCss(css); +$altcha.algorithms.set("SHA-256", () => new WorkerWrapper()); +$altcha.algorithms.set("SHA-384", () => new WorkerWrapper()); +$altcha.algorithms.set("SHA-512", () => new WorkerWrapper()); +$altcha.algorithms.set("PBKDF2/SHA-256", () => new WorkerWrapper$1()); +$altcha.algorithms.set("PBKDF2/SHA-384", () => new WorkerWrapper$1()); +$altcha.algorithms.set("PBKDF2/SHA-512", () => new WorkerWrapper$1()); diff --git a/frontend/node_modules/altcha/dist/main/altcha.min.js b/frontend/node_modules/altcha/dist/main/altcha.min.js new file mode 100644 index 0000000..fdd41e7 --- /dev/null +++ b/frontend/node_modules/altcha/dist/main/altcha.min.js @@ -0,0 +1 @@ +const e=!1;var t=Array.isArray,n=Array.prototype.indexOf,r=Array.prototype.includes,a=Array.from,o=Object.keys,i=Object.defineProperty,l=Object.getOwnPropertyDescriptor,s=Object.getOwnPropertyDescriptors,c=Object.prototype,u=Array.prototype,f=Object.getPrototypeOf,d=Object.isExtensible;const h=()=>{};function p(){var e,t;return{promise:new Promise((n,r)=>{e=n,t=r}),resolve:e,reject:t}}const v=1<<24,g=16,m=32,b=64,y=512,w=1024,x=2048,k=4096,_=8192,$=16384,S=32768,C=1<<25,E=65536,T=1<<17,A=1<<19,I=65536,P=1<<21,O=1<<23,R=Symbol("$state"),L=Symbol("legacy props"),M=Symbol(""),D=Symbol("attributes"),U=Symbol("class"),V=Symbol("style"),N=Symbol("text"),z=Symbol("form reset"),j=new class extends Error{name="StaleReactionError";message="The reaction that called `getAbortSignal()` was re-run or destroyed"},B=!!globalThis.document?.contentType&&globalThis.document.contentType.includes("xml");function F(e){return e===this.v}function H(e,t){return e!=e?t==t:e!==t||null!==e&&"object"==typeof e||"function"==typeof e}function K(e){return!H(e,this.v)}const q={},Y=Symbol("uninitialized"),G="http://www.w3.org/1999/xhtml";let W=null;function J(e){W=e}function Z(e,t=!1,n){W={p:W,i:!1,c:null,e:null,s:e,x:null,r:jt,l:null}}function X(e){var t=W,n=t.e;if(null!==n)for(var r of(t.e=null,n))gn(r);return void 0!==e&&(t.x=e),t.i=!0,W=t.p,e??{}}let Q=[];function ee(){var e=Q;Q=[],function(e){for(var t=0;t{t===Q&&ee()})}Q.push(e)}function ne(){for(;Q.length>0;)ee()}function re(e){console.warn("https://svelte.dev/e/hydration_mismatch")}let ae,oe=!1;function ie(e){oe=e}function le(e){if(null===e)throw re(),q;return ae=e}function se(){return le($e(ae))}function ce(e){if(oe){if(null!==$e(ae))throw re(),q;ae=e}}function ue(e=1){if(oe){for(var t=e,n=ae;t--;)n=$e(n);ae=n}}function fe(e=!0){for(var t=0,n=ae;;){if(8===n.nodeType){var r=n.data;if("]"===r){if(0===t)return n;t-=1}else("["===r||"[!"===r||"["===r[0]&&!isNaN(Number(r.slice(1))))&&(t+=1)}var a=$e(n);e&&n.remove(),n=a}}function de(e){if(!e||8!==e.nodeType)throw re(),q;return e.data}function he(e){if("object"!=typeof e||null===e||R in e)return e;const n=f(e);if(n!==c&&n!==u)return e;var r=new Map,a=t(e),o=St(0),i=Jt,s=e=>{if(Jt===i)return e();var t=Vt,n=Jt;zt(null),Zt(i);var r=e();return zt(t),Zt(n),r};return a&&r.set("length",St(e.length)),new Proxy(e,{defineProperty(e,t,n){"value"in n&&!1!==n.configurable&&!1!==n.enumerable&&!1!==n.writable||function(){throw new Error("https://svelte.dev/e/state_descriptors_fixed")}();var a=r.get(t);return void 0===a?s(()=>{var e=St(n.value);return r.set(t,e),e}):Et(a,n.value,!0),!0},deleteProperty(e,t){var n=r.get(t);if(void 0===n){if(t in e){const e=s(()=>St(Y));r.set(t,e),At(o)}}else Et(n,Y),At(o);return!0},get(t,n,a){if(n===R)return e;var o=r.get(n),i=n in t;if(void 0!==o||i&&!l(t,n)?.writable||(o=s(()=>St(he(i?t[n]:Y))),r.set(n,o)),void 0!==o){var c=ln(o);return c===Y?void 0:c}return Reflect.get(t,n,a)},getOwnPropertyDescriptor(e,t){var n=Reflect.getOwnPropertyDescriptor(e,t);if(n&&"value"in n){var a=r.get(t);a&&(n.value=ln(a))}else if(void 0===n){var o=r.get(t),i=o?.v;if(void 0!==o&&i!==Y)return{enumerable:!0,configurable:!0,value:i,writable:!0}}return n},has(e,t){if(t===R)return!0;var n=r.get(t),a=void 0!==n&&n.v!==Y||Reflect.has(e,t);if((void 0!==n||null!==jt&&(!a||l(e,t)?.writable))&&(void 0===n&&(n=s(()=>St(a?he(e[t]):Y)),r.set(t,n)),ln(n)===Y))return!1;return a},set(e,t,n,i){var c=r.get(t),u=t in e;if(a&&"length"===t)for(var f=n;fSt(Y)),r.set(f+"",d))}void 0===c?u&&!l(e,t)?.writable||(Et(c=s(()=>St(void 0)),he(n)),r.set(t,c)):(u=c.v!==Y,Et(c,s(()=>he(n))));var h=Reflect.getOwnPropertyDescriptor(e,t);if(h?.set&&h.set.call(i,n),!u){if(a&&"string"==typeof t){var p=r.get("length"),v=Number(t);Number.isInteger(v)&&v>=p.v&&Et(p,v+1)}At(o)}return!0},ownKeys(e){ln(o);var t=Reflect.ownKeys(e).filter(e=>{var t=r.get(e);return void 0===t||t.v!==Y});for(var[n,a]of r)a.v===Y||n in e||t.push(n);return t},setPrototypeOf(){!function(){throw new Error("https://svelte.dev/e/state_prototype_fixed")}()}})}function pe(e){try{if(null!==e&&"object"==typeof e&&R in e)return e[R]}catch{}return e}function ve(e,t){return Object.is(pe(e),pe(t))}var ge,me,be,ye,we;function xe(){if(void 0===ge){ge=window,me=document,be=/Firefox/.test(navigator.userAgent);var e=Element.prototype,t=Node.prototype,n=Text.prototype;ye=l(t,"firstChild").get,we=l(t,"nextSibling").get,d(e)&&(e[U]=void 0,e[D]=null,e[V]=void 0,e.__e=void 0),d(n)&&(n[N]=void 0)}}function ke(e=""){return document.createTextNode(e)}function _e(e){return ye.call(e)}function $e(e){return we.call(e)}function Se(e,t){if(!oe)return _e(e);var n=_e(ae);if(null===n)n=ae.appendChild(ke());else if(t&&3!==n.nodeType){var r=ke();return n?.before(r),le(r),r}return t&&Ae(n),le(n),n}function Ce(e,t=!1){if(!oe){var n=_e(e);return n instanceof Comment&&""===n.data?$e(n):n}if(t){if(3!==ae?.nodeType){var r=ke();return ae?.before(r),le(r),r}Ae(ae)}return ae}function Ee(e,t=1,n=!1){let r=oe?ae:e;for(var a;t--;)a=r,r=$e(r);if(!oe)return r;if(n){if(3!==r?.nodeType){var o=ke();return null===r?a?.after(o):r.before(o),le(o),o}Ae(r)}return le(r),r}function Te(e,t,n){let r;return document.createElementNS(t??G,e,r)}function Ae(e){if(e.nodeValue.length<65536)return;let t=e.nextSibling;for(;null!==t&&3===t.nodeType;)t.remove(),e.nodeValue+=t.nodeValue,t=e.nextSibling}function Ie(e){var t=jt;if(null===t)return Vt.f|=O,e;if(0===(t.f&S)&&!(4&t.f))throw e;Pe(e,t)}function Pe(e,t){for(;null!==t;){if(128&t.f){if(0===(t.f&S))throw e;try{return void t.b.error(e)}catch(t){e=t}}t=t.parent}throw e}const Oe=-7169;function Re(e,t){e.f=e.f&Oe|t}function Le(e){0!==(e.f&y)||null===e.deps?Re(e,w):Re(e,k)}function Me(e){if(null!==e)for(const t of e)2&t.f&&0!==(t.f&I)&&(t.f^=I,Me(t.deps))}function De(e,t,n){0!==(e.f&x)?t.add(e):0!==(e.f&k)&&n.add(e),Me(e.deps),Re(e,w)}function Ue(e,t,n){if(null==e)return t(void 0),h;const r=un(()=>e.subscribe(t,n));return r.unsubscribe?()=>r.unsubscribe():r}const Ve=[];function Ne(e,t=h){let n=null;const r=new Set;function a(t){if(H(e,t)&&(e=t,n)){const t=!Ve.length;for(const t of r)t[1](),Ve.push(t,e);if(t){for(let e=0;e{r.delete(s),0===r.size&&n&&(n(),n=null)}}}}function ze(e){let t;return Ue(e,e=>t=e)(),t}let je=Symbol("unmounted");function Be(e,t,n){const r=n[t]??={store:null,source:Ct(void 0),unsubscribe:h};if(r.store!==e&&!(je in n))if(r.unsubscribe(),r.store=e??null,null==e)r.source.v=void 0,r.unsubscribe=h;else{var a=!0;r.unsubscribe=Ue(e,e=>{a?r.source.v=e:Et(r.source,e)}),a=!1}return e&&je in n?ze(e):ln(r.source)}let Fe=null,He=null,Ke=null,qe=null,Ye=null,Ge=null,We=!1,Je=!1,Ze=null,Xe=null;var Qe=0;let et=1;class tt{id=et++;#e=!1;linked=!0;#t=null;#n=null;async_deriveds=new Map;current=new Map;previous=new Map;unblocked=new Set;#r=new Set;#a=new Set;#o=new Set;#i=0;#l=new Map;#s=null;#c=[];#u=[];#f=new Set;#d=new Set;#h=new Map;#p=new Set;is_fork=!1;#v=!1;#g(){if(this.is_fork)return!0;for(const n of this.#l.keys()){for(var e=n,t=!1;null!==e.parent;){if(this.#h.has(e)){t=!0;break}e=e.parent}if(!t)return!0}return!1}skip_effect(e){this.#h.has(e)||this.#h.set(e,{d:[],m:[]}),this.#p.delete(e)}unskip_effect(e,t=e=>this.schedule(e)){var n=this.#h.get(e);if(n){for(var r of(this.#h.delete(e),n.d))Re(r,x),t(r);for(r of n.m)Re(r,k),t(r)}this.#p.add(e)}#m(){if(this.#e=!0,Qe++>1e3&&(this.#b(),function(){try{!function(){throw new Error("https://svelte.dev/e/effect_update_depth_exceeded")}()}catch(e){Pe(e,Ge)}}()),!this.#g()){for(const e of this.#f)this.#d.delete(e),Re(e,x),this.schedule(e);for(const e of this.#d)Re(e,k),this.schedule(e)}const e=this.#c;this.#c=[],this.apply();var t=Ze=[],n=[],r=Xe=[];for(const r of e)try{this.#y(r,t,n)}catch(e){throw ct(r),e}if(Ke=null,r.length>0){var a=tt.ensure();for(const e of r)a.schedule(e)}if(Ze=null,Xe=null,this.#g()){this.#w(n),this.#w(t);for(const[e,t]of this.#h)st(e,t);return void(r.length>0&&Ke.#m())}const o=this.#x();if(o)o.#k(this);else{this.#f.clear(),this.#d.clear();for(const e of this.#r)e(this);this.#r.clear(),qe=this,at(n),at(t),qe=null,this.#s?.resolve();var i=Ke;if(this.linked&&0===this.#i&&this.#b(),this.#c.length>0){null===i&&(i=this,this.#_());const e=i;e.#c.push(...this.#c.filter(t=>!e.#c.includes(t)))}null!==i&&i.#m()}}#y(e,t,n){e.f^=w;for(var r=e.first;null!==r;){var a=r.f,o=!!(96&a);if(!(o&&0!==(a&w)||0!==(a&_)||this.#h.has(r))&&null!==r.fn){o?r.f^=w:4&a?t.push(r):Qt(r)&&(0!==(a&g)&&this.#d.add(r),an(r));var i=r.first;if(null!==i){r=i;continue}}for(;null!==r;){var l=r.next;if(null!==l){r=l;break}r=r.parent}}}#x(){for(var e=this.#t;null!==e;){if(!e.is_fork)for(const[t,[,n]]of this.current)if(e.current.has(t)&&!n)return e;e=e.#t}return null}#k(e){for(const[t,n]of e.current)!this.previous.has(t)&&e.previous.has(t)&&this.previous.set(t,e.previous.get(t)),this.current.set(t,n);for(const[t,n]of e.async_deriveds){const e=this.async_deriveds.get(t);e&&n.promise.then(e.resolve)}const t=e=>{var n=e.reactions;if(null!==n)for(const e of n){var r=e.f;if(2&r)t(e);else{var a=e;4194320&r&&!this.async_deriveds.has(a)&&(this.#d.delete(a),Re(a,x),this.schedule(a))}}};for(const e of this.current.keys())t(e);this.oncommit(()=>e.discard()),e.#b(),Ke=this,this.#m()}#w(e){for(var t=0;t!this.current.has(e));if(0===r.length)e&&c.discard();else if(t.length>0){if(e)for(const e of this.#p)c.unskip_effect(e,e=>{4194320&e.f?c.schedule(e):c.#w([e])});c.activate();var a=new Set,o=new Map;for(var i of t)ot(i,r,a,o);o=new Map;var l=[...c.current.keys()].filter(e=>!this.current.has(e)||this.current.get(e)[0]!==e.v);if(l.length>0)for(const e of this.#u)155648&e.f||!it(e,l,o)||(4194320&e.f?(Re(e,x),c.schedule(e)):c.#f.add(e));if(c.#c.length>0){for(var s of(c.apply(),c.#c))c.#y(s,[],[]);c.#c=[]}c.deactivate()}}}}increment(e,t){if(this.#i+=1,e){let e=this.#l.get(t)??0;this.#l.set(t,e+1)}}decrement(e,t){if(this.#i-=1,e){let e=this.#l.get(t)??0;1===e?this.#l.delete(t):this.#l.set(t,e-1)}this.#v||(this.#v=!0,te(()=>{this.#v=!1,this.linked&&this.flush()}))}transfer_effects(e,t){for(const t of e)this.#f.add(t);for(const e of t)this.#d.add(e);e.clear(),t.clear()}oncommit(e){this.#r.add(e)}ondiscard(e){this.#a.add(e)}on_fork_commit(e){this.#o.add(e)}run_fork_commit_callbacks(){for(const e of this.#o)e(this);this.#o.clear()}settled(){return(this.#s??=p()).promise}static ensure(){if(null===Ke){const e=Ke=new tt;e.#_(),Je||We||te(()=>{e.#e||e.flush()})}return Ke}apply(){Ye=null}schedule(e){if(Ge=e,e.b?.is_pending&&16777228&e.f&&0===(e.f&S))e.b.defer_effect(e);else{for(var t=e;null!==t.parent;){var n=(t=t.parent).f;if(!(null===Ze||t!==jt||null!==Vt&&2&Vt.f))return;if(96&n){if(0===(n&w))return;t.f^=w}}this.#c.push(t)}}#_(){null===He?Fe=He=this:(He.#n=this,this.#t=He),He=this}#b(){var e=this.#t,t=this.#n;null===e?Fe=t:e.#n=t,null===t?He=e:t.#t=e,this.linked=!1}}function nt(e){var t=We;We=!0;try{for(;;){if(ne(),null===Ke)return;Ke.flush()}}finally{We=t}}let rt=null;function at(e){var t=e.length;if(0!==t){for(var n=0;n0)){kt.clear();for(const e of rt){if(24576&e.f)continue;const t=[e];let n=e.parent;for(;null!==n;)rt.has(n)&&(rt.delete(n),t.push(n)),n=n.parent;for(let e=t.length-1;e>=0;e--){const n=t[e];24576&n.f||an(n)}}rt.clear()}}rt=null}}function ot(e,t,n,r){if(!n.has(e)&&(n.add(e),null!==e.reactions))for(const a of e.reactions){const e=a.f;2&e?ot(a,t,n,r):4194320&e&&0===(e&x)&&it(a,t,r)&&(Re(a,x),lt(a))}}function it(e,t,n){const a=n.get(e);if(void 0!==a)return a;if(null!==e.deps)for(const a of e.deps){if(r.call(t,a))return!0;if(2&a.f&&it(a,t,n))return n.set(a,!0),!0}return n.set(e,!1),!1}function lt(e){Ke.schedule(e)}function st(e,t){if(0===(e.f&m)||0===(e.f&w)){0!==(e.f&x)?t.d.push(e):0!==(e.f&k)&&t.m.push(e),Re(e,w);for(var n=e.first;null!==n;)st(n,t),n=n.next}}function ct(e){Re(e,w);for(var t=e.first;null!==t;)ct(t),t=t.next}class ut{parent;is_pending=!1;transform_error;#S;#C=oe?ae:null;#E;#T;#A;#I=null;#P=null;#O=null;#R=null;#L=0;#M=0;#D=!1;#f=new Set;#d=new Set;#U=null;#V=function(e){let t,n=0,r=$t(0);return()=>{hn()&&(ln(r),bn(()=>(0===n&&(t=un(()=>e(()=>At(r)))),n+=1,()=>{te(()=>{n-=1,0===n&&(t?.(),t=void 0,At(r))})})))}}(()=>(this.#U=$t(this.#L),()=>{this.#U=null}));constructor(e,t,n,r){this.#S=e,this.#E=t,this.#T=e=>{var t=jt;t.b=this,t.f|=128,n(e)},this.parent=jt.b,this.transform_error=r??this.parent?.transform_error??(e=>e),this.#A=wn(()=>{if(oe){const e=this.#C;se();const t="[!"===e.data;if(e.data.startsWith("[?")){const t=JSON.parse(e.data.slice(2));this.#N(t)}else t?this.#z():this.#j()}else this.#B()},589824),oe&&(this.#S=ae)}#j(){try{this.#I=kn(()=>this.#T(this.#S))}catch(e){this.error(e)}}#N(e){const t=this.#E.failed;t&&(this.#O=kn(()=>{t(this.#S,()=>e,()=>()=>{})}))}#z(){const e=this.#E.pending;e&&(this.is_pending=!0,this.#P=kn(()=>e(this.#S)),te(()=>{var e=this.#R=document.createDocumentFragment(),t=ke();e.append(t),this.#I=this.#F(()=>kn(()=>this.#T(t))),0===this.#M&&(this.#S.before(e),this.#R=null,Tn(this.#P,()=>{this.#P=null}),this.#H(Ke))}))}#B(){try{if(this.is_pending=this.has_pending_snippet(),this.#M=0,this.#L=0,this.#I=kn(()=>{this.#T(this.#S)}),this.#M>0){var e=this.#R=document.createDocumentFragment();On(this.#I,e);const t=this.#E.pending;this.#P=kn(()=>t(this.#S))}else this.#H(Ke)}catch(e){this.error(e)}}#H(e){this.is_pending=!1,e.transfer_effects(this.#f,this.#d)}defer_effect(e){De(e,this.#f,this.#d)}is_rendered(){return!this.is_pending&&(!this.parent||this.parent.is_rendered())}has_pending_snippet(){return!!this.#E.pending}#F(e){var t=jt,n=Vt,r=W;Bt(this.#A),zt(this.#A),J(this.#A.ctx);try{return tt.ensure(),e()}catch(e){return Ie(e),null}finally{Bt(t),zt(n),J(r)}}#K(e,t){this.has_pending_snippet()?(this.#M+=e,0===this.#M&&(this.#H(t),this.#P&&Tn(this.#P,()=>{this.#P=null}),this.#R&&(this.#S.before(this.#R),this.#R=null))):this.parent&&this.parent.#K(e,t)}update_pending_count(e,t){this.#K(e,t),this.#L+=e,this.#U&&!this.#D&&(this.#D=!0,te(()=>{this.#D=!1,this.#U&&Tt(this.#U,this.#L)}))}get_effect_pending(){return this.#V(),ln(this.#U)}error(e){if(!this.#E.onerror&&!this.#E.failed)throw e;Ke?.is_fork?(this.#I&&Ke.skip_effect(this.#I),this.#P&&Ke.skip_effect(this.#P),this.#O&&Ke.skip_effect(this.#O),Ke.on_fork_commit(()=>{this.#q(e)})):this.#q(e)}#q(e){this.#I&&(Sn(this.#I),this.#I=null),this.#P&&(Sn(this.#P),this.#P=null),this.#O&&(Sn(this.#O),this.#O=null),oe&&(le(this.#C),ue(),le(fe()));var t=this.#E.onerror;let n=this.#E.failed;var r=!1,a=!1;const o=()=>{r?console.warn("https://svelte.dev/e/svelte_boundary_reset_noop"):(r=!0,a&&function(){throw new Error("https://svelte.dev/e/svelte_boundary_reset_onerror")}(),null!==this.#O&&Tn(this.#O,()=>{this.#O=null}),this.#F(()=>{this.#B()}))},i=e=>{try{a=!0,t?.(e,o),a=!1}catch(e){Pe(e,this.#A&&this.#A.parent)}n&&(this.#O=this.#F(()=>{try{return kn(()=>{var t=jt;t.b=this,t.f|=128,n(this.#S,()=>e,()=>o)})}catch(e){return Pe(e,this.#A.parent),null}}))};te(()=>{var t;try{t=this.transform_error(e)}catch(e){return void Pe(e,this.#A&&this.#A.parent)}null!==t&&"object"==typeof t&&"function"==typeof t.then?t.then(i,e=>Pe(e,this.#A&&this.#A.parent)):i(t)})}}function ft(e,t,n,r){const a=pt;var o=e.filter(e=>!e.settled);if(0!==n.length||0!==o.length){var i,l,s,c,u=jt,f=(i=jt,l=Vt,s=W,c=Ke,function(e=!0){Bt(i),zt(l),J(s),e&&0===(i.f&$)&&(c?.activate(),c?.apply())}),d=1===o.length?o[0].promise:o.length>1?Promise.all(o.map(e=>e.promise)):null,h=ht();0!==n.length?d?d.then(()=>{f(),v(),dt()}):v():d.then(()=>p(t.map(a))).finally(h)}else r(t.map(a));function p(e){if(0===(u.f&$)){f();try{r(e)}catch(e){Pe(e,u)}dt()}}function v(){Promise.all(n.map(e=>gt(e))).then(e=>p([...t.map(a),...e])).catch(e=>Pe(e,u)).finally(h)}}function dt(e=!0){Bt(null),zt(null),J(null),e&&Ke?.deactivate()}function ht(){var e=jt,t=e.b,n=Ke,r=t.is_rendered();return t.update_pending_count(1,n),n.increment(r,e),()=>{t.update_pending_count(-1,n),n.decrement(r,e)}}function pt(e){null!==jt&&(jt.f|=A);return{ctx:W,deps:null,effects:null,equals:F,f:2050,fn:e,reactions:null,rv:0,v:Y,wv:0,parent:jt,ac:null}}const vt=Symbol("obsolete");function gt(e,t,n){let r=jt;null===r&&function(){throw new Error("https://svelte.dev/e/async_derived_orphan")}();var a=void 0,o=$t(Y),i=!Vt,l=new Set;return function(e){dn(4718592,e)}(()=>{var t=jt,n=p();a=n.promise;try{Promise.resolve(e()).then(n.resolve,e=>{e!==j&&n.reject(e)}).finally(dt)}catch(e){n.reject(e),dt()}var s=Ke;if(i){if(0!==(t.f&S))var c=ht();if(r.b.is_rendered())s.async_deriveds.get(t)?.reject(vt);else for(const e of l.values())e.reject(vt);l.add(n),s.async_deriveds.set(t,n)}const u=(e,t=void 0)=>{c?.(),l.delete(n),t!==vt&&(s.activate(),t?(o.f|=O,Tt(o,t)):(0!==(o.f&O)&&(o.f^=O),Tt(o,e)),s.deactivate())};n.promise.then(u,e=>u(null,e||"unknown"))}),pn(()=>{for(const e of l)e.reject(vt)}),new Promise(e=>{!function t(n){function r(){n===a?e(o):t(a)}n.then(r,r)}(a)})}function mt(e){const t=pt(e);return Ht(t),t}function bt(e){var t,n=jt,r=e.parent;if(!Dt&&null!==r&&e.v!==Y&&24576&r.f)return console.warn("https://svelte.dev/e/derived_inert"),e.v;Bt(r);try{e.f&=-65537,function(e){var t=e.effects;if(null!==t){e.effects=null;for(var n=0;n0&&!_t&&function(){_t=!1;for(const e of xt){let t;0!==(e.f&w)&&Re(e,k);try{t=Qt(e)}catch{t=!0}t&&an(e)}xt.clear()}()}return t}function At(e){Et(e,e.v+1)}function It(e,t,n){var r=e.reactions;if(null!==r)for(var a=r.length,o=0;o{document.activeElement===t&&e.focus()})}}let Ot=!1;function Rt(){Ot||(Ot=!0,document.addEventListener("reset",e=>{Promise.resolve().then(()=>{if(!e.defaultPrevented)for(const t of e.target.elements)t[z]?.()})},{capture:!0}))}function Lt(e){var t=Vt,n=jt;zt(null),Bt(null);try{return e()}finally{zt(t),Bt(n)}}let Mt=!1,Dt=!1;function Ut(e){Dt=e}let Vt=null,Nt=!1;function zt(e){Vt=e}let jt=null;function Bt(e){jt=e}let Ft=null;function Ht(e){null!==Vt&&(null===Ft?Ft=[e]:Ft.push(e))}let Kt=null,qt=0,Yt=null;let Gt=1,Wt=0,Jt=Wt;function Zt(e){Jt=e}function Xt(){return++Gt}function Qt(e){var t=e.f;if(0!==(t&x))return!0;if(2&t&&(e.f&=-65537),0!==(t&k)){for(var n=e.deps,r=n.length,a=0;ae.wv)return!0}0!==(t&y)&&null===Ye&&Re(e,w)}return!1}function en(e,t,n=!0){var a=e.reactions;if(null!==a&&(null===Ft||!r.call(Ft,e)))for(var o=0;o{e.ac.abort(j)}),e.ac=null);try{e.f|=P;var u=(0,e.fn)();e.f|=S;var f=e.deps,d=Ke?.is_fork;if(null!==Kt){var h;if(d||rn(e,qt),null!==f&&qt>0)for(f.length=qt+Kt.length,h=0;h{dn(8,()=>e(...t.map(ln)))})}function wn(e,t=0){return dn(g|t,e)}function xn(e,t=0){return dn(v|t,e)}function kn(e){return dn(524320,e)}function _n(e){var t=e.teardown;if(null!==t){const e=Dt,n=Vt;Ut(!0),zt(null);try{t.call(null)}finally{Ut(e),zt(n)}}}function $n(e,t=!1){var n=e.first;for(e.first=e.last=null;null!==n;){const e=n.ac;null!==e&&Lt(()=>{e.abort(j)});var r=n.next;0!==(n.f&b)?n.parent=null:Sn(n,t),n=r}}function Sn(e,t=!0){var n=!1;(t||262144&e.f)&&null!==e.nodes&&null!==e.nodes.end&&(Cn(e.nodes.start,e.nodes.end),n=!0),Re(e,C),$n(e,t&&!n),rn(e,0);var r=e.nodes&&e.nodes.t;if(null!==r)for(const e of r)e.stop();_n(e),e.f^=C,e.f|=$;var a=e.parent;null!==a&&null!==a.first&&En(e),e.next=e.prev=e.teardown=e.ctx=e.deps=e.fn=e.nodes=e.ac=e.b=null}function Cn(e,t){for(;null!==e;){var n=e===t?null:$e(e);e.remove(),e=n}}function En(e){var t=e.parent,n=e.prev,r=e.next;null!==n&&(n.next=r),null!==r&&(r.prev=n),null!==t&&(t.first===e&&(t.first=r),t.last===e&&(t.last=n))}function Tn(e,t,n=!0){var r=[];An(e,r,!0);var a=()=>{n&&Sn(e),t&&t()},o=r.length;if(o>0){var i=()=>--o||a();for(var l of r)l.out(i)}else a()}function An(e,t,n){if(0===(e.f&_)){e.f^=_;var r=e.nodes&&e.nodes.t;if(null!==r)for(const e of r)(e.is_global||n)&&t.push(e);for(var a=e.first;null!==a;){var o=a.next;if(0===(a.f&b))An(a,t,!!(0!==(a.f&E)||0!==(a.f&m)&&0!==(e.f&g))&&n);a=o}}}function In(e){Pn(e,!0)}function Pn(e,t){if(0!==(e.f&_)){e.f^=_,0===(e.f&w)&&(Re(e,x),tt.ensure().schedule(e));for(var n=e.first;null!==n;){var r=n.next;Pn(n,!!(0!==(n.f&E)||0!==(n.f&m))&&t),n=r}var a=e.nodes&&e.nodes.t;if(null!==a)for(const e of a)(e.is_global||t)&&e.in()}}function On(e,t){if(e.nodes)for(var n=e.nodes.start,r=e.nodes.end;null!==n;){var a=n===r?null:$e(n);t.append(n),n=a}}function Rn(e){const t={get:e=>ze(t.store)[e],set:(e,n)=>{"string"==typeof e?Object.assign(ze(t.store),{[e]:n}):Object.assign(ze(t.store),e),t.store.set(ze(t.store))},store:Ne(e)};return t}globalThis.$altcha=globalThis.$altcha||{algorithms:new Map,defaults:Rn({}),i18n:Rn({}),instances:new Set,plugins:new Set};globalThis.$altcha.i18n.set("en",{ariaLinkLabel:"Altcha (official website)",cancel:"Cancel",enterCode:"Enter code",enterCodeAria:"Enter code you hear. Press Space to play audio.",enterCodeFromImage:"To proceed, please enter the code from the image below.",error:"Verification failed. Try again later.",expired:"Verification expired. Try again.",footer:'Protected by ALTCHA',getAudioChallenge:"Get an audio challenge",label:"I'm not a robot",loading:"Loading...",reload:"Reload",verify:"Verify",verificationRequired:"Verification required!",verified:"Verified",verifying:"Verifying...",waitAlert:"Verifying... please wait."});"undefined"!=typeof window&&((window.__svelte??={}).v??=new Set).add("5");const Ln=Symbol("events"),Mn=new Set,Dn=new Set;function Un(e,t,n,r={}){function a(e){if(r.capture||Bn.call(t,e),!e.cancelBubble)return Lt(()=>n?.call(this,e))}return e.startsWith("pointer")||e.startsWith("touch")||"wheel"===e?te(()=>{t.addEventListener(e,a,r)}):t.addEventListener(e,a,r),a}function Vn(e,t,n,r,a){var o={capture:r,passive:a},i=Un(e,t,n,o);(t===document.body||t===window||t===document||t instanceof HTMLMediaElement)&&pn(()=>{t.removeEventListener(e,i,o)})}function Nn(e,t,n){(t[Ln]??={})[e]=n}function zn(e){for(var t=0;to||n});var f=Vt,d=jt;zt(null),Bt(null);try{for(var h,p=[];null!==o;){var v=o.assignedSlot||o.parentNode||o.host||null;try{var g=o[Ln]?.[r];null==g||o.disabled&&e.target!==o||g.call(o,e)}catch(e){h?p.push(e):h=e}if(e.cancelBubble||v===t||null===v)break;o=v}if(h){for(let e of p)queueMicrotask(()=>{throw e});throw h}}finally{e[Ln]=t,delete e.currentTarget,zt(f),Bt(d)}}}const Fn=globalThis?.window?.trustedTypes&&globalThis.window.trustedTypes.createPolicy("svelte-trusted-html",{createHTML:e=>e});function Hn(e){var t=Te("template");return t.innerHTML=function(e){return Fn?.createHTML(e)??e}(e.replaceAll("","\x3c!----\x3e")),t.content}function Kn(e,t){var n=jt;null===n.nodes&&(n.nodes={start:e,end:t,a:null,t:null})}function qn(e,t){var n,r=!!(1&t),a=!!(2&t),o=!e.startsWith("");return()=>{if(oe)return Kn(ae,null),ae;void 0===n&&(n=Hn(o?e:""+e),r||(n=_e(n)));var t=a||be?document.importNode(n,!0):n.cloneNode(!0);r?Kn(_e(t),t.lastChild):Kn(t,t);return t}}function Yn(e,t,n="svg"){var r,a=`<${n}>${!e.startsWith("")?e:""+e}`;return()=>{if(oe)return Kn(ae,null),ae;if(!r){var e=Hn(a);r=_e(_e(e))}var t=r.cloneNode(!0);return Kn(t,t),t}}function Gn(e,t){return Yn(e,0,"svg")}function Wn(e=""){if(!oe){var t=ke(e+"");return Kn(t,t),t}var n=ae;return 3!==n.nodeType?(n.before(n=ke()),le(n)):Ae(n),Kn(n,n),n}function Jn(){if(oe)return Kn(ae,null),ae;var e=document.createDocumentFragment(),t=document.createComment(""),n=ke();return e.append(t,n),Kn(t,n),e}function Zn(e,t){if(oe){var n=jt;return 0!==(n.f&S)&&null!==n.nodes.end||(n.nodes.end=ae),void se()}null!==e&&e.before(t)}function Xn(e){return e.endsWith("capture")&&"gotpointercapture"!==e&&"lostpointercapture"!==e}const Qn=["beforeinput","click","change","dblclick","contextmenu","focusin","focusout","input","keydown","keyup","mousedown","mousemove","mouseout","mouseover","mouseup","pointerdown","pointermove","pointerout","pointerover","pointerup","touchend","touchmove","touchstart"];function er(e){return Qn.includes(e)}const tr={formnovalidate:"formNoValidate",ismap:"isMap",nomodule:"noModule",playsinline:"playsInline",readonly:"readOnly",defaultvalue:"defaultValue",defaultchecked:"defaultChecked",srcobject:"srcObject",novalidate:"noValidate",allowfullscreen:"allowFullscreen",disablepictureinpicture:"disablePictureInPicture",disableremoteplayback:"disableRemotePlayback"};function nr(e){return e=e.toLowerCase(),tr[e]??e}const rr=["touchstart","touchmove"];function ar(e){return rr.includes(e)}function or(e,t){var n=null==t?"":"object"==typeof t?`${t}`:t;n!==(e[N]??=e.nodeValue)&&(e[N]=n,e.nodeValue=`${n}`)}function ir(e,t){return cr(e,t)}function lr(e,t){xe(),t.intro=t.intro??!1;const n=t.target,r=oe,a=ae;try{for(var o=_e(n);o&&(8!==o.nodeType||"["!==o.data);)o=$e(o);if(!o)throw q;ie(!0),le(o);const r=cr(e,{...t,anchor:o});return ie(!1),r}catch(r){if(r instanceof Error&&r.message.split("\n").some(e=>e.startsWith("https://svelte.dev/e/")))throw r;return r!==q&&console.warn("Failed to hydrate: ",r),!1===t.recover&&function(){throw new Error("https://svelte.dev/e/hydration_failed")}(),xe(),n.textContent="",ie(!1),ir(e,t)}finally{ie(r),le(a)}}const sr=new Map;function cr(e,{target:t,anchor:n,props:r={},events:o,context:i,intro:l=!0,transformError:s}){xe();var c=void 0,u=function(e){tt.ensure();const t=dn(524352,e);return(e={})=>new Promise(n=>{e.outro?Tn(t,()=>{Sn(t),n(void 0)}):(Sn(t),n(void 0))})}(()=>{var l=n??t.appendChild(ke());!function(e,t,n,r){new ut(e,t,n,r)}(l,{pending:()=>{}},t=>{if(Z({}),i&&(W.c=i),o&&(r.$$events=o),oe&&Kn(t,null),c=e(t,r)||{},oe&&(jt.nodes.end=ae,null===ae||8!==ae.nodeType||"]"!==ae.data))throw re(),q;X()},s);var u=new Set,f=e=>{for(var n=0;n{for(var e of u)for(const n of[t,document]){var r=sr.get(n),a=r.get(e);0==--a?(n.removeEventListener(e,Bn),r.delete(e),0===r.size&&sr.delete(n)):r.set(e,a)}Dn.delete(f),l!==n&&l.parentNode?.removeChild(l)}});return ur.set(c,u),c}let ur=new WeakMap;class fr{anchor;#Y=new Map;#G=new Map;#W=new Map;#J=new Set;#Z=!0;constructor(e,t=!0){this.anchor=e,this.#Z=t}#$=e=>{if(this.#Y.has(e)){var t=this.#Y.get(e),n=this.#G.get(t);if(n)In(n),this.#J.delete(t);else{var r=this.#W.get(t);r&&(this.#G.set(t,r.effect),this.#W.delete(t),r.fragment.lastChild.remove(),this.anchor.before(r.fragment),n=r.effect)}for(const[t,n]of this.#Y){if(this.#Y.delete(t),t===e)break;const r=this.#W.get(n);r&&(Sn(r.effect),this.#W.delete(n))}for(const[e,r]of this.#G){if(e===t||this.#J.has(e))continue;const a=()=>{if(Array.from(this.#Y.values()).includes(e)){var t=document.createDocumentFragment();On(r,t),t.append(ke()),this.#W.set(e,{effect:r,fragment:t})}else Sn(r);this.#J.delete(e),this.#G.delete(e)};this.#Z||!n?(this.#J.add(e),Tn(r,a,!1)):a()}}};#X=e=>{this.#Y.delete(e);const t=Array.from(this.#Y.values());for(const[e,n]of this.#W)t.includes(e)||(Sn(n.effect),this.#W.delete(e))};ensure(e,t){var n=Ke;!t||this.#G.has(e)||this.#W.has(e)||this.#G.set(e,kn(()=>t(this.anchor)));this.#Y.set(n,e),oe&&(this.anchor=ae),this.#$(n)}}function dr(e){null===W&&function(){throw new Error("https://svelte.dev/e/lifecycle_outside_component")}(),vn(()=>{const t=un(e);if("function"==typeof t)return t})}function hr(e,t,n=!1){var r;oe&&(r=ae,se());var a=new fr(e);function o(e,t){if(oe){var n=de(r);if(e!==parseInt(n.substring(1))){var o=fe();return le(o),a.anchor=o,ie(!1),a.ensure(e,t),void ie(!0)}}a.ensure(e,t)}wn(()=>{var e=!1;t((t,n=0)=>{e=!0,o(n,t)}),e||o(-1,null)},n?E:0)}const pr=Symbol("NaN");function vr(e,t,n=!1,r=!1,a=!1,o=!1){var i=e,l="";if(n){var s=e;oe&&(i=le(_e(s)))}yn(()=>{var e=jt;if(l!==(l=t()??"")){if(n&&!oe)return e.nodes=null,s.innerHTML=l,void(""!==l&&Kn(_e(s),s.lastChild));if(null!==e.nodes&&(Cn(e.nodes.start,e.nodes.end),e.nodes=null),""!==l){if(oe){ae.data;for(var o=se(),c=o;null!==o&&(8!==o.nodeType||""!==o.data);)c=o,o=$e(o);if(null===o)throw re(),q;return Kn(ae,c),void(i=le(o))}var u=Te(r?"svg":a?"math":"template",r?"http://www.w3.org/2000/svg":a?"http://www.w3.org/1998/Math/MathML":void 0);u.innerHTML=l;var f=r||a?u:u.content;if(Kn(_e(f),f.lastChild),r||a)for(;_e(f);)i.before(_e(f));else i.before(f)}}else oe&&se()})}function gr(e,t){var n,r=void 0;xn(()=>{r!==(r=t())&&(n&&(Sn(n),n=null),r&&(n=kn(()=>{mn(()=>r(e))})))})}function mr(e){var t,n,r="";if("string"==typeof e||"number"==typeof e)r+=e;else if("object"==typeof e)if(Array.isArray(e)){var a=e.length;for(t=0;t=0;){var l=i+o;0!==i&&!yr.includes(r[i-1])||l!==r.length&&!yr.includes(r[l])?i=l:r=(0===i?"":r.substring(0,i))+r.substring(l+1)}return""===r?null:r}(n,0,o);oe&&l===e.getAttribute("class")||(null==l?e.removeAttribute("class"):t?e.className=l:e.setAttribute("class",l)),e[U]=n}else if(o&&a!==o)for(var s in o){var c=!!o[s];null!=a&&c===!!a[s]||e.classList.toggle(s,c)}return o}function _r(e,t={},n,r){for(var a in n){var o=n[a];t[a]!==o&&(null==n[a]?e.style.removeProperty(a):e.style.setProperty(a,o,r))}}function $r(e,t,n,r){var a=e[V];if(oe||a!==t){var o=function(e,t){if(t){var n,r,a="";if(Array.isArray(t)?(n=t[0],r=t[1]):n=t,e){e=String(e).replaceAll(/\s*\/\*.*?\*\/\s*/g,"").trim();var o=!1,i=0,l=!1,s=[];n&&s.push(...Object.keys(n).map(xr)),r&&s.push(...Object.keys(r).map(xr));var c=0,u=-1;const t=e.length;for(var f=0;f{if(!t){if(t=!0,e.hasAttribute("value")){var n=e.value;Vr(e,"value",null),e.value=n}if(e.hasAttribute("checked")){var r=e.checked;Vr(e,"checked",null),e.checked=r}}};e[z]=n,te(n),Rt()}}function Ur(e,t){t?e.hasAttribute("selected")||e.setAttribute("selected",""):e.removeAttribute("selected")}function Vr(e,t,n,r){var a=zr(e);oe&&(a[t]=e.getAttribute(t),"src"===t||"srcset"===t||"href"===t&&e.nodeName===Pr)||a[t]!==(a[t]=n)&&("loading"===t&&(e[M]=n),null==n?e.removeAttribute(t):"string"!=typeof n&&Br(e).includes(t)?e[t]=n:e.setAttribute(t,n))}function Nr(e,t,n=[],r=[],a=[],o,i=!1,l=!1){ft(a,n,r,n=>{var r=void 0,a={},o=e.nodeName===Lr,s=!1;if(xn(()=>{var c=t(...n.map(ln)),u=function(e,t,n,r,a=!1){if(oe&&a&&e.nodeName===Or){var o=e;("checkbox"===o.type?"defaultChecked":"defaultValue")in n||Dr(o)}var i=zr(e),l=i[Ar],s=!i[Ir];let c=oe&&l;c&&ie(!1);var u=t||{},f=e.nodeName===Rr;for(var d in t)d in n||(n[d]=null);n.class?n.class=br(n.class):n[Er]&&(n.class=null),n[Tr]&&(n.style??=null);var h=Br(e);for(const r in n){let a=n[r];if(f&&"value"===r&&null==a)e.value=e.__value="",u[r]=a;else if("class"!==r)if("style"!==r){var p=u[r];if(a!==p||void 0===a&&e.hasAttribute(r)){u[r]=a;var v=r[0]+r[1];if("$$"!==v)if("on"===v){const t={},n="$$"+r;let o=r.slice(2);var g=er(o);if(Xn(o)&&(o=o.slice(0,-7),t.capture=!0),!g&&p){if(null!=a)continue;e.removeEventListener(o,u[n],t),u[n]=null}if(g)Nn(o,e,a),zn([o]);else if(null!=a){let a=function(e){u[r].call(this,e)};u[n]=Un(o,e,a,t)}}else if("style"===r)Vr(e,r,a);else if("autofocus"===r)Pt(e,Boolean(a));else if(l||"__value"!==r&&("value"!==r||null==a))if("selected"===r&&f)Ur(e,a);else{var m=r;s||(m=nr(m));var b="defaultValue"===m||"defaultChecked"===m;if(null!=a||l||b)b||h.includes(m)&&(l||"string"!=typeof a)?(e[m]=a,m in i&&(i[m]=Y)):"function"!=typeof a&&Vr(e,m,a);else if(i[r]=null,"value"===m||"checked"===m){let n=e;const r=void 0===t;if("value"===m){let e=n.defaultValue;n.removeAttribute(m),n.defaultValue=e,n.value=n.__value=r?e:null}else{let e=n.defaultChecked;n.removeAttribute(m),n.defaultChecked=e,n.checked=!!r&&e}}else e.removeAttribute(r)}else e.value=e.__value=a}}else $r(e,a,t?.[Tr],n[Tr]),u[r]=a,u[Tr]=n[Tr];else kr(e,"http://www.w3.org/1999/xhtml"===e.namespaceURI,a,0,t?.[Er],n[Er]),u[r]=a,u[Er]=n[Er]}return c&&ie(!0),u}(e,r,c,0,i,l);s&&o&&"value"in c&&Sr(e,c.value);for(let e of Object.getOwnPropertySymbols(a))c[e]||Sn(a[e]);for(let t of Object.getOwnPropertySymbols(c)){var f=c[t];"@attach"!==t.description||r&&f===r[t]||(a[t]&&Sn(a[t]),a[t]=kn(()=>gr(e,()=>f))),u[t]=f}r=u}),o){var c=e;mn(()=>{Sr(c,r.value,!0),function(e){var t=new MutationObserver(()=>{Sr(e,e.__value)});t.observe(e,{childList:!0,subtree:!0,attributes:!0,attributeFilter:["value"]}),pn(()=>{t.disconnect()})}(c)})}s=!0})}function zr(e){return e[D]??={[Ar]:e.nodeName.includes("-"),[Ir]:e.namespaceURI===G}}var jr=new Map;function Br(e){var t,n=e.getAttribute("is")||e.nodeName,r=jr.get(n);if(r)return r;jr.set(n,r=[]);for(var a=e,o=Element.prototype;o!==a;){for(var i in t=s(a))t[i].set&&"innerHTML"!==i&&"textContent"!==i&&"innerText"!==i&&r.push(i);a=f(a)}return r}function Fr(e,t,n=t){var r=new WeakSet;!function(e,t,n,r=n){e.addEventListener(t,()=>Lt(n));const a=e[z];e[z]=a?()=>{a(),r(!0)}:()=>r(!0),Rt()}(e,"input",async a=>{var o=a?e.defaultValue:e.value;if(o=Hr(e)?Kr(o):o,n(o),null!==Ke&&r.add(Ke),await on(),o!==(o=t())){var i=e.selectionStart,l=e.selectionEnd,s=e.value.length;if(e.value=o??"",null!==l){var c=e.value.length;i===l&&l===s&&c>s?(e.selectionStart=c,e.selectionEnd=c):(e.selectionStart=i,e.selectionEnd=Math.min(l,c))}}}),(oe&&e.defaultValue!==e.value||null==un(t)&&e.value)&&(n(Hr(e)?Kr(e.value):e.value),null!==Ke&&r.add(Ke)),bn(()=>{var n=t();if(e===document.activeElement){var a=Ke;if(r.has(a))return}Hr(e)&&n===Kr(e.value)||("date"!==e.type||n||e.value)&&n!==e.value&&(e.value=n??"")})}function Hr(e){var t=e.type;return"number"===t||"range"===t}function Kr(e){return""===e?null:+e}function qr(e,t){return e===t||e?.[R]===t}function Yr(e={},t,n,r){var a=W.r,o=jt;return mn(()=>{var r,i;return bn(()=>{r=i,i=[],un(()=>{qr(n(...i),e)||(t(e,...i),r&&qr(n(...r),e)&&t(null,...r))})}),()=>{let r=o;for(;r!==a&&null!==r.parent&&r.parent.f&C;)r=r.parent;const l=r.teardown;r.teardown=()=>{i&&qr(n(...i),e)&&t(null,...i),l?.()}}}),e}const Gr={get(e,t){if(!e.exclude.includes(t))return e.props[t]},set:(e,t)=>!1,getOwnPropertyDescriptor(e,t){if(!e.exclude.includes(t))return t in e.props?{enumerable:!0,configurable:!0,value:e.props[t]}:void 0},has:(e,t)=>!e.exclude.includes(t)&&t in e.props,ownKeys:e=>Reflect.ownKeys(e.props).filter(t=>!e.exclude.includes(t))};function Wr(e,t,n){return new Proxy({props:e,exclude:t},Gr)}function Jr(e,t,n,r){var a,o=r,i=!0,l=()=>(i&&(i=!1,o=r),o);void 0===e[t]&&void 0!==r&&l(),a=()=>{var n=e[t];return void 0===n?l():(i=!0,n)};var s=!1,c=pt(()=>(s=!1,a())),u=jt;return function(e,t){if(arguments.length>0){const n=t?ln(c):e;return Et(c,n),s=!0,void 0!==o&&(o=n),e}return Dt&&s||0!==(u.f&$)?c.v:ln(c)}}class Zr{#Q;#ee;constructor(e){var t=new Map,n=(e,n)=>{var r=Ct(n,!1,!1);return t.set(e,r),r};const r=new Proxy({...e.props||{},$$events:{}},{get:(e,r)=>ln(t.get(r)??n(r,Reflect.get(e,r))),has:(e,r)=>r===L||(ln(t.get(r)??n(r,Reflect.get(e,r))),Reflect.has(e,r)),set:(e,r,a)=>(Et(t.get(r)??n(r,a),a),Reflect.set(e,r,a))});this.#ee=(e.hydrate?lr:ir)(e.component,{target:e.target,anchor:e.anchor,props:r,context:e.context,intro:e.intro??!1,recover:e.recover,transformError:e.transformError}),e?.props?.$$host&&!1!==e.sync||nt(),this.#Q=r.$$events;for(const e of Object.keys(this.#ee))"$set"!==e&&"$destroy"!==e&&"$on"!==e&&i(this,e,{get(){return this.#ee[e]},set(t){this.#ee[e]=t},enumerable:!0});this.#ee.$set=e=>{Object.assign(r,e)},this.#ee.$destroy=()=>{!function(e,t){const n=ur.get(e);n?(ur.delete(e),n(t)):Promise.resolve()}(this.#ee)}}$set(e){this.#ee.$set(e)}$on(e,t){this.#Q[e]=this.#Q[e]||[];const n=(...e)=>t.call(this,...e);return this.#Q[e].push(n),()=>{this.#Q[e]=this.#Q[e].filter(e=>e!==n)}}$destroy(){this.#ee.$destroy()}}let Xr=class{};function Qr(e,t,n,r){const a=n[e]?.type;if(t="Boolean"===a&&"boolean"!=typeof t?null!=t:t,!r||!n[e])return t;if("toAttribute"===r)switch(a){case"Object":case"Array":return null==t?null:JSON.stringify(t);case"Boolean":return t?"":null;case"Number":return null==t?null:t;default:return t}else switch(a){case"Object":case"Array":return t&&JSON.parse(t);case"Boolean":default:return t;case"Number":return null!=t?+t:t}}function ea(e,t,n,r,a,s){let c=class extends Xr{constructor(){super(e,n,a),this.$$p_d=t}static get observedAttributes(){return o(t).map(e=>(t[e].attribute||e).toLowerCase())}};return o(t).forEach(e=>{i(c.prototype,e,{get(){return this.$$c&&e in this.$$c?this.$$c[e]:this.$$d[e]},set(n){n=Qr(e,n,t),this.$$d[e]=n;var r=this.$$c;if(r){var a=l(r,e)?.get;a?r[e]=n:r.$set({[e]:n})}}})}),r.forEach(e=>{i(c.prototype,e,{get(){return this.$$c?.[e]}})}),e.element=c,c}"function"==typeof HTMLElement&&(Xr=class extends HTMLElement{$$ctor;$$s;$$c;$$cn=!1;$$d={};$$r=!1;$$p_d={};$$l={};$$l_u=new Map;$$me;$$shadowRoot=null;constructor(e,t,n){super(),this.$$ctor=e,this.$$s=t,n&&(this.$$shadowRoot=this.attachShadow(n))}addEventListener(e,t,n){if(this.$$l[e]=this.$$l[e]||[],this.$$l[e].push(t),this.$$c){const n=this.$$c.$on(e,t);this.$$l_u.set(t,n)}super.addEventListener(e,t,n)}removeEventListener(e,t,n){if(super.removeEventListener(e,t,n),this.$$c){const e=this.$$l_u.get(t);e&&(e(),this.$$l_u.delete(t))}}async connectedCallback(){if(this.$$cn=!0,!this.$$c){let t=function(e){return t=>{const n=Te("slot");"default"!==e&&(n.name=e),Zn(t,n)}};if(await Promise.resolve(),!this.$$cn||this.$$c)return;const n={},r=function(e){const t={};return e.childNodes.forEach(e=>{t[e.slot||"default"]=!0}),t}(this);for(const e of this.$$s)e in r&&("default"!==e||this.$$d.children?n[e]=t(e):(this.$$d.children=t(e),n.default=!0));for(const e of this.attributes){const t=this.$$g_p(e.name);t in this.$$d||(this.$$d[t]=Qr(t,e.value,this.$$p_d,"toProp"))}for(const e in this.$$p_d)e in this.$$d||void 0===this[e]||(this.$$d[e]=this[e],delete this[e]);this.$$c=(e={component:this.$$ctor,target:this.$$shadowRoot||this,props:{...this.$$d,$$slots:n,$$host:this}},new Zr(e)),this.$$me=function(e){tt.ensure();const t=dn(524352,e);return()=>{Sn(t)}}(()=>{bn(()=>{this.$$r=!0;for(const e of o(this.$$c)){if(!this.$$p_d[e]?.reflect)continue;this.$$d[e]=this.$$c[e];const t=Qr(e,this.$$d[e],this.$$p_d,"toAttribute");null==t?this.removeAttribute(this.$$p_d[e].attribute||e):this.setAttribute(this.$$p_d[e].attribute||e,t)}this.$$r=!1})});for(const e in this.$$l)for(const t of this.$$l[e]){const n=this.$$c.$on(e,t);this.$$l_u.set(t,n)}this.$$l={}}var e}attributeChangedCallback(e,t,n){this.$$r||(e=this.$$g_p(e),this.$$d[e]=Qr(e,n,this.$$p_d,"toProp"),this.$$c?.$set({[e]:this.$$d[e]}))}disconnectedCallback(){this.$$cn=!1,Promise.resolve().then(()=>{!this.$$cn&&this.$$c&&(this.$$c.$destroy(),this.$$me(),this.$$c=void 0)})}$$g_p(e){return o(this.$$p_d).find(t=>this.$$p_d[t].attribute===e||!this.$$p_d[t].attribute&&t.toLowerCase()===e)||e}});var ta=qn('
');function na(e,t){Z(t,!0);let n,r=Jr(t,"loading"),a=Wr(t,["$$slots","$$events","$$legacy","$$host","loading"]);var o={get loading(){return r()},set loading(e){r(e),nt()}},i=ta(),l=Se(i);Nr(l,()=>({type:"checkbox",...a}),void 0,void 0,void 0,0,!0),Yr(l,e=>n=e,()=>n);var s=Ee(l,2);return ue(2),ce(i),yn(()=>Vr(i,"data-loading",r())),Nn("click",s,function(){n?.click()}),Zn(e,i),X(o)}zn(["click"]),ea(na,{loading:{}},[],[],{mode:"open"});var ra=qn('
');function aa(e,t){Z(t,!0);let n=Jr(t,"loading"),r=Wr(t,["$$slots","$$events","$$legacy","$$host","loading"]);var a={get loading(){return n()},set loading(e){n(e),nt()}},o=ra();return Nr(Se(o),()=>({type:"checkbox",...r}),void 0,void 0,void 0,0,!0),ue(2),ce(o),yn(()=>Vr(o,"data-loading",n())),Zn(e,o),X(a)}ea(aa,{loading:{}},[],[],{mode:"open"});var oa=qn('
');function ia(e,t){Z(t,!0);let n=Jr(t,"strings");var r={get strings(){return n()},set strings(e){n(e),nt()}},a=oa(),o=Se(a);return Vr(o,"href","https://altcha.org"),ce(a),yn(()=>Vr(o,"aria-label",n().ariaLinkLabel)),Zn(e,a),X(r)}ea(ia,{strings:{}},[],[],{mode:"open"});var la=qn('');function sa(e,t){Z(t,!0);let n=Jr(t,"logo"),r=Jr(t,"strings");var a={get logo(){return n()},set logo(e){n(e),nt()},get strings(){return r()},set strings(e){r(e),nt()}},o=la(),i=Se(o);vr(i,()=>r().footer,!0),ce(i);var l=Ee(i,2),s=e=>{ia(e,{get strings(){return r()}})};return hr(l,e=>{n()&&e(s)}),ce(o),Zn(e,o),X(a)}ea(sa,{logo:{},strings:{}},[],[],{mode:"open"});var ca=qn('
');function ua(e,t){Z(t,!0);let n,r=Jr(t,"loading"),a=Wr(t,["$$slots","$$events","$$legacy","$$host","loading"]);var o={get loading(){return r()},set loading(e){r(e),nt()}},i=ca(),l=Se(i);Nr(l,()=>({type:"checkbox",...a}),void 0,void 0,void 0,0,!0),Yr(l,e=>n=e,()=>n);var s=Ee(l,2);return ce(i),yn(()=>Vr(i,"data-loading",r())),Nn("click",s,function(){n?.click()}),Zn(e,i),X(o)}zn(["click"]),ea(ua,{loading:{}},[],[],{mode:"open"});var fa=(e=>(e.ERROR="error",e.LOADING="loading",e.PLAYING="playing",e.PAUSED="paused",e.READY="ready",e))(fa||{}),da=(e=>(e.CODE="code",e.ERROR="error",e.VERIFIED="verified",e.VERIFYING="verifying",e.UNVERIFIED="unverified",e.EXPIRED="expired",e))(da||{}),ha=qn('
'),pa=qn('
'),va=Gn(''),ga=Gn(''),ma=Gn(''),ba=qn(''),ya=qn(''),wa=qn('
');function xa(e,t){Z(t,!0);let n=Jr(t,"audioUrl"),r=Jr(t,"codeChallenge"),a=Jr(t,"config"),o=Jr(t,"imageUrl"),i=Jr(t,"onCancel"),l=Jr(t,"onReload"),s=Jr(t,"onSubmit"),c=Jr(t,"strings"),u=St(void 0),f=St(void 0),d=St(void 0),h=St(!1),p=St(""),v=St(!1);function g(){Et(u,fa.PAUSED,!0)}function m(e){Et(u,fa.ERROR,!0)}function b(){Et(u,fa.READY,!0)}function y(){Et(u,fa.LOADING,!0)}function w(){Et(u,fa.PLAYING,!0)}function x(){Et(u,fa.PAUSED,!0)}function k(){ln(f)?ln(u)===fa.LOADING||(ln(f).paused?(n()&&ln(f).src!==n()&&(ln(f).src=n()),ln(f).currentTime=0,ln(f).play()):ln(f).pause()):(Et(v,!0),requestAnimationFrame(()=>{ln(f)&&n()&&(ln(f).src=n(),ln(f).play())}))}dr(()=>(a().disableAutoFocus||on().then(()=>{ln(d)?.focus()}),()=>{ln(f)&&(ln(f).pause(),Et(f,void 0))}));var _={get audioUrl(){return n()},set audioUrl(e){n(e),nt()},get codeChallenge(){return r()},set codeChallenge(e){r(e),nt()},get config(){return a()},set config(e){a(e),nt()},get imageUrl(){return o()},set imageUrl(e){o(e),nt()},get onCancel(){return i()},set onCancel(e){i(e),nt()},get onReload(){return l()},set onReload(e){l(e),nt()},get onSubmit(){return s()},set onSubmit(e){s(e),nt()},get strings(){return c()},set strings(e){c(e),nt()}},$=wa(),S=Se($),C=Se(S),E=e=>{var t=ha(),n=Se(t,!0);ce(t),yn(()=>or(n,c().verificationRequired)),Zn(e,t)};hr(C,e=>{"standard"!==a().codeChallengeDisplay&&e(E)});var T=Ee(C,2),A=Se(T,!0);ce(T);var I=Ee(T,2),P=Ee(I,2),O=Se(P);Dr(O),O.disabled=ln(h),Yr(O,e=>Et(d,e),()=>ln(d));var R=Ee(O,2),L=e=>{var t=ba(),n=Se(t),r=e=>{Zn(e,pa())},a=e=>{Zn(e,va())},o=e=>{Zn(e,ga())},i=e=>{Zn(e,ma())};hr(n,e=>{ln(u)===fa.LOADING?e(r):ln(u)===fa.ERROR?e(a,1):ln(u)===fa.PLAYING?e(o,2):e(i,-1)}),ce(t),yn(()=>{Vr(t,"title",c().getAudioChallenge),t.disabled=ln(u)===fa.LOADING||ln(u)===fa.ERROR,Vr(t,"aria-label",ln(u)===fa.LOADING?c().loading:c().getAudioChallenge)}),Vn("click",t,()=>k(),!0),Zn(e,t)};hr(R,e=>{r().audio&&e(L)});var M=Ee(R,2);ce(P);var D=Ee(P,2),U=Se(D),V=Se(U,!0);ce(U);var N=Ee(U,2),z=Se(N,!0);ce(N),ce(D),ce(S);var j=Ee(S,2),B=e=>{var t=ya();Yr(t,e=>Et(f,e),()=>ln(f)),Vn("error",t,m),Vn("loadstart",t,y),Vn("canplay",t,b),Vn("pause",t,x),Vn("playing",t,w),Vn("ended",t,g),Zn(e,t)};return hr(j,e=>{ln(v)&&e(B)}),ce($),yn(()=>{or(A,c().enterCodeFromImage),Vr(I,"src",o()),Vr(O,"minlength",r().length||1),Vr(O,"maxlength",r().length),Vr(O,"placeholder",c().enterCode),Vr(O,"aria-label",ln(u)===fa.LOADING?c().loading:ln(u)===fa.PLAYING?"":c().enterCodeAria),Vr(O,"aria-live",ln(u)?"assertive":"polite"),Vr(O,"aria-busy",ln(u)===fa.LOADING),Vr(M,"title",c().reload),Vr(M,"aria-label",c().reload),Vr(U,"aria-label",c().verify),or(V,c().verify),Vr(N,"aria-label",c().cancel),or(z,c().cancel)}),Vn("submit",S,function(e){e.preventDefault(),e.stopPropagation(),s()?.(ln(p))},!0),Nn("keydown",O,function(e){"Space"===e.code?(e.preventDefault(),e.stopPropagation(),k()):"Escape"===e.code&&(e.preventDefault(),e.stopPropagation(),i()?.())}),Fr(O,()=>ln(p),e=>Et(p,e)),Vn("click",M,()=>l()?.(),!0),Vn("click",N,()=>i()?.(),!0),Zn(e,$),X(_)}zn(["keydown"]),ea(xa,{audioUrl:{},codeChallenge:{},config:{},imageUrl:{},onCancel:{},onReload:{},onSubmit:{},strings:{}},[],[],{mode:"open"});var ka=qn('
'),_a=qn('
'),$a=qn('
×
'),Sa=qn('
',1);function Ca(e,t){Z(t,!0);let n=Jr(t,"anchor"),r=Jr(t,"children"),a=Jr(t,"display",0,"standard"),o=Jr(t,"backdrop",0,!1),i=Jr(t,"onClickOutside"),l=Jr(t,"onClickOutsideDelay",0,600),s=Jr(t,"onClose"),c=Jr(t,"placement",0,"auto"),u=Jr(t,"updateUISignal"),f=Jr(t,"variant",0,"neutral"),d=Wr(t,["$$slots","$$events","$$legacy","$$host","anchor","children","display","backdrop","onClickOutside","onClickOutsideDelay","onClose","placement","updateUISignal","variant"]),p=St(void 0),v=St(void 0),g=St(!1),m=St(0);function b(){s()?.()}function y(){if(n()&&"auto"===c()&&ln(p)){const e=n().getBoundingClientRect(),t=document.documentElement.clientHeight-(e.top+e.height){"auto"!==c()&&Et(g,"top"===c())}),vn(()=>{u()&&y()}),dr(()=>{const e="bottomsheet"===a()||"overlay"===a();return e&&(ln(v)&&document.body.append(ln(v)),ln(p)&&document.body.append(ln(p))),y(),on().then(()=>{Et(m,Date.now(),!0)}),()=>{e&&(ln(v)&&document.body.removeChild(ln(v)),ln(p)&&document.body.removeChild(ln(p)))}});var w={get anchor(){return n()},set anchor(e){n(e),nt()},get children(){return r()},set children(e){r(e),nt()},get display(){return a()},set display(e="standard"){a(e),nt()},get backdrop(){return o()},set backdrop(e=!1){o(e),nt()},get onClickOutside(){return i()},set onClickOutside(e){i(e),nt()},get onClickOutsideDelay(){return l()},set onClickOutsideDelay(e=600){l(e),nt()},get onClose(){return s()},set onClose(e){s(e),nt()},get placement(){return c()},set placement(e="auto"){c(e),nt()},get updateUISignal(){return u()},set updateUISignal(e){u(e),nt()},get variant(){return f()},set variant(e="neutral"){f(e),nt()}},x=Sa();Vn("click",ge,function(e){const t=e.target;ln(p)?.contains(t)||l()&&!(ln(m)+l(){var t=ka();Yr(t,e=>Et(v,e),()=>ln(v)),Zn(e,t)};hr(k,e=>{o()&&e(_)});var $=Ee(k,2);Nr($,()=>({...d,class:`altcha-popover ${(t.class||"")??""}`,"data-popover":!0,"data-variant":f(),"data-top":ln(g),"data-display":a()}));var S=Se($),C=e=>{Zn(e,_a())};hr(S,e=>{"standard"===a()&&e(C)});var T=Ee(S,2),A=e=>{var t=$a();Vn("click",t,b,!0),Zn(e,t)};hr(T,e=>{"standard"!==a()&&e(A)});var I=Ee(T,2);return function(e,t,...n){var r=new fr(e);wn(()=>{const e=t()??null;r.ensure(e,e&&(t=>e(t,...n)))},E)}(Se(I),()=>r()??h),ce(I),ce($),Yr($,e=>Et(p,e),()=>ln(p)),Zn(e,x),X(w)}async function Ea(e){const{challenge:t,concurrency:n=navigator.hardwareConcurrency,controller:r=new AbortController,createWorker:a,onOutOfMemory:o=e=>e>1?Math.floor(e/2):0,counterMode:i,timeout:l=9e4}=e,s=Math.min(16,Math.max(1,n)),c=[],u=()=>{for(const e of c)e.terminate()};for(let e=0;e(r.signal.addEventListener("abort",()=>{e.postMessage({type:"abort"})}),new Promise((r,a)=>{e.addEventListener("error",e=>{a(e)}),e.addEventListener("message",t=>{if(t.data){for(const t of c)t!==e&&t.postMessage({type:"abort"});if(t.data.error)return a(new Error(t.data.error))}r(t.data)}),e.postMessage({challenge:t,counterMode:i,counterStart:n,counterStep:s,timeout:l,type:"work"})}))))}catch(n){if(n instanceof Error&&!!n?.message?.includes("Out of memory")&&o){u();const n=o(s);if(n)return Ea({...e,challenge:t,controller:r,concurrency:n,createWorker:a})}throw n}finally{u()}return r.signal.aborted?null:f||null}ea(Ca,{anchor:{},children:{},display:{},backdrop:{},onClickOutside:{},onClickOutsideDelay:{},onClose:{},placement:{},updateUISignal:{},variant:{}},[],[],{mode:"open"});class Ta{TAG_CODES={INPUT:1,TEXTAREA:2,SELECT:3,BUTTON:4,A:5,DETAILS:6,SUMMARY:7,IFRAME:8,VIDEO:9,AUDIO:10};maxSamples;sampleInterval;target;focusStartTime=0;focusInteraction=0;focusInteractionTimer=null;lastPointerSample=0;lastTouchSample=0;lastScrollSample=0;pendingPointer=null;pendingTouch=null;focus=[];pointer=[];scroll=[];touch=[];constructor(e={}){const{maxSamples:t=60,sampleInterval:n=50,target:r=window}=e;this.maxSamples=t,this.sampleInterval=n,this.target=r,this.attach()}destroy(){const e={capture:!0};this.target.removeEventListener("focusin",this.onFocus,e),this.target.removeEventListener("keydown",this.onInteraction,e),this.target.removeEventListener("pointerdown",this.onInteraction,e),this.target.removeEventListener("pointermove",this.onPointer,e),this.target.removeEventListener("scroll",this.onScroll,e),this.target.removeEventListener("touchmove",this.onTouchMove,e)}export(){return{focus:this.focus,maxTouchPoints:navigator.maxTouchPoints||0,pointer:this.pointer,scroll:this.scroll,time:Date.now(),touch:this.touch}}attach(){const e={passive:!0,capture:!0};this.target.addEventListener("focusin",this.onFocus,e),this.target.addEventListener("keydown",this.onInteraction,e),this.target.addEventListener("pointerdown",this.onInteraction,e),this.target.addEventListener("pointermove",this.onPointer,e),this.target.addEventListener("scroll",this.onScroll,e),this.target.addEventListener("touchmove",this.onTouchMove,e)}evict(e){e.length>this.maxSamples&&e.splice(0,e.length-this.maxSamples)}onFocus=e=>{if(2===this.focusInteraction)return;const t=e.target;if(!(t instanceof Element))return;const n=performance.now();0===this.focusStartTime&&(this.focusStartTime=n),this.focus.push([Math.round(n-this.focusStartTime),t.tabIndex,this.TAG_CODES[t.tagName]??0,this.focusInteraction?1:0]),this.evict(this.focus)};onInteraction=e=>{this.focusInteraction="keyCode"in e?1:2,this.focusInteractionTimer&&clearTimeout(this.focusInteractionTimer),this.focusInteractionTimer=setTimeout(()=>{this.focusInteraction=0},100)};onPointer=e=>{if("touch"===e.pointerType)return;const t=e.timeStamp||performance.now();this.pendingPointer=[Math.round(e.clientX),Math.round(e.clientY),Math.round(t)],t-this.lastPointerSample>=this.sampleInterval&&(this.pointer.push(this.pendingPointer),this.lastPointerSample=t,this.pendingPointer=null,this.evict(this.pointer))};onScroll=()=>{const e=performance.now();e-this.lastScrollSample{const t=e.timeStamp||performance.now(),n=e.touches[0];n&&(this.pendingTouch=[Math.round(n.clientX),Math.round(n.clientY),Math.round(t),Math.round(1e3*n.force)/1e3,Math.round(n.radiusX||0),Math.round(n.radiusY||0)],t-this.lastTouchSample>=this.sampleInterval&&(this.touch.push(this.pendingTouch),this.lastTouchSample=t,this.pendingTouch=null,this.evict(this.touch)))}}var Aa=qn('
'),Ia=qn('
'),Pa=qn('
×
',1),Oa=qn('
'),Ra=qn(''),La=qn('
Secure context (HTTPS) required.
'),Ma=qn('
'),Da=qn('
'),Ua=qn(" ",1),Va=qn('
',1);"undefined"!=typeof window&&window.customElements&&!customElements.get("altcha-widget")&&customElements.define("altcha-widget",ea(function(e,t){Z(t,!0);const[n,r]=function(){const e={};return[e,function(){pn(()=>{for(var t in e)e[t].unsubscribe();i(e,je,{enumerable:!1,value:!0})})}]}(),a=["ar","fa","he","ur"],{isSecureContext:o}=globalThis,{store:l}=globalThis.$altcha.defaults,s=navigator.hardwareConcurrency||2,c=navigator.deviceMemory||0,u=c&&c<=4?Math.min(4,s):s,f=globalThis.$altcha.i18n.store,d=t.$$host,h=(e,t)=>{on().then(()=>{d?.dispatchEvent(new CustomEvent(e,{detail:t}))})};let p=null,v=St(he(new URL(location.origin))),g=St(!1),m=St(null),b=St(null),y=St(null),w=St(he(da.UNVERIFIED)),x=St(void 0),k=St(void 0),_=St(null),$=St(void 0),S=St(null),C=St(null),T=St(null),A=St(null),I=St(he([])),P=St(0),O=St(he({})),R=St(!0);const L=mt(()=>({fetch:(e,t)=>fetch(e,t),audioChallengeLanguage:"",auto:"off",barPlacement:"bottom",challenge:"",codeChallenge:null,codeChallengeDisplay:"standard",credentials:null,debug:!1,disableAutoFocus:!1,display:"standard",floatingAnchor:"",floatingOffset:8,floatingPersist:!1,floatingPlacement:"auto",hideFooter:!1,hideLogo:!1,humanInteractionSignature:!0,language:"",mockError:!1,minDuration:500,overlayContent:"",name:"altcha",popoverPlacement:"auto",retryOnOutOfMemoryError:!0,setCookie:null,serverVerificationFields:!1,serverVerificationTimeZone:!1,test:!1,timeout:9e4,type:"checkbox",validationMessage:"",verifyFunction:null,verifyUrl:"",workers:u,...Be(l,"$altchaDefaults",n),...ln(O)})),M=mt(()=>`altcha-checkbox-${t.id||Math.floor(1e12*Math.random()).toString(16)}`),D=mt(()=>function(e){switch(e){case"checkbox":return na;case"switch":return ua;default:return aa}}(ln(L).type)),U=mt(()=>ln(L).auto),V=mt(()=>ln(w)===da.VERIFYING),N=mt(()=>!ln(L).hideFooter),z=mt(()=>!ln(L).hideLogo&&"bar"!==ln(L).display),j=mt(()=>function(e,t){const n=Object.keys(e).map(e=>e.toLowerCase());let r=t.reduce((t,r)=>(r=r.toLowerCase(),t||(e[r]?r:null)||n.find(e=>r.split("-")[0]===e.split("-")[0])||null),null);e[r||""]||(r="en");return{language:r,strings:e[r]}}(Be(f,"$altchaI18nStore",n),[ln(L).language,document.documentElement.lang,...navigator.languages])),B=mt(()=>a.includes(ln(j).language)?"rtl":void 0),F=mt(()=>({...ln(j).strings})),H=mt(()=>ln(m)?.audio?.match(/^(https?:)?\//)?Q(ln(m).audio,ln(v),{language:ln(L).audioChallengeLanguage||ln(j).language}).toString():ln(m)?.audio),K=mt(()=>ln(m)?.image?.match(/^(https?:)?\//)?Q(ln(m).image,ln(v)):ln(m)?.image);async function q(e,...t){let n;for(const r of ln(I))n=await r[e].call(r,...t);return n}async function Y(e){await new Promise(t=>setTimeout(t,e))}async function G(e=ln(L).challenge,t){const n=await q("onFetchChallenge",e);let r=null;if(void 0!==n)return n;if("string"==typeof e)if(e.startsWith("{")){_e("parsing JSON challenge");try{r=JSON.parse(e)}catch{throw new Error("Unable to parse JSON challenge.")}}else{_e("fetching challenge from",t?.method||"GET",e),Et(v,new URL(e,location.origin),!0);const n=await ln(L).fetch(e,{credentials:ln(L).credentials||void 0,...t});await ye(n);const a=n.headers.get("x-altcha-config");a&&function(e){try{const t=JSON.parse(e);t&&"object"==typeof t&&xe({serverVerificationFields:t?.sentinel?.fields,serverVerificationTimeZone:t?.sentinel?.timeZone,verifyUrl:t.verifyurl,...t})}catch(e){_e("unable to configure from x-altcha-config header",e)}}(a);const o=await n.json();if(o&&"his"in o&&o.his){if(_e("requested HIS"),!p)throw new Error("Server requested HIS data but collector is disabled.");return G(Q(o.his.url,ln(v)),{body:JSON.stringify({his:p.export()}),headers:{"content-type":"application/json"},method:"POST"})}o&&"hisResult"in o&&o.hisResult&&_e("HIS result",o.hisResult),r=o}else if(e&&"object"==typeof e)try{r=JSON.parse(JSON.stringify(e))}catch{throw new Error("Unable to parse JSON challenge.")}if(function(e){return"object"==typeof e&&"challenge"in e}(r)&&(r=function(e){const[t,n]=e.salt.split("?"),r={};if(n)try{Object.assign(r,Object.fromEntries(new URLSearchParams(n).entries()))}catch{}const a={codeChallenge:e.codeChallenge,parameters:{algorithm:e.algorithm,cost:1,data:r,expiresAt:r?.expires?parseInt(r.expires,10):void 0,keyLength:"SHA-512"===e.algorithm?64:"SHA-384"===e.algorithm?48:32,nonce:(o=(new TextEncoder).encode(e.salt),Array.from(new Uint8Array(o)).map(e=>e.toString(16).padStart(2,"0")).join("")),keyPrefix:e.challenge,salt:""},signature:e.signature};var o;return Object.defineProperties(a,{_originalSalt:{enumerable:!1,value:e.salt,writable:!1},_version:{enumerable:!1,value:1,writable:!1}}),a}(r)),!function(e){return!!e&&"object"==typeof e&&"parameters"in e&&!!e.parameters&&"object"==typeof e.parameters&&"algorithm"in e.parameters&&"nonce"in e.parameters&&"salt"in e.parameters&&"keyPrefix"in e.parameters}(r))throw new Error("Challenge validation failed.");return r}function W(){return document.getElementById(ln(M))}function J(){try{return Intl.DateTimeFormat().resolvedOptions().timeZone}catch{}}function Q(e,t,n){const r=new URL(e,t);if(r.search||(r.search=t.search),n)for(const e in n)void 0!==n[e]&&null!==n[e]&&r.searchParams.set(e,n[e]);return r.toString()}function ee(e){!ln(g)&&e.currentTarget.checked?(e.preventDefault(),e.currentTarget.checked=!1,ln(w)!==da.VERIFYING&&Pe()):e.currentTarget.checked||(e.preventDefault(),$e())}function te(e){ln(w)===da.VERIFYING?e.currentTarget.setCustomValidity(ln(F).waitAlert):ln(L).validationMessage&&e.currentTarget.setCustomValidity(ln(L).validationMessage)}function ne(){be(ln(L).display),$e()}function re(e){"onfocus"===ln(U)&&ln(w)===da.UNVERIFIED&&Pe()}function ue(){be(ln(L).display),$e()}function pe(e){const t=e.target;"true"!==t?.getAttribute("data-code-challenge")&&"onsubmit"===ln(U)&&ln(w)===da.UNVERIFIED&&(e.preventDefault(),e.stopPropagation(),Et(S,e.submitter,!0),Ae(),Pe().then(e=>{e&&!ln(m)&&on().then(()=>{ve(ln(S))})}))}function ve(e){ln(_)&&"requestSubmit"in ln(_)?ln(_).requestSubmit(e):ln(_)?.reportValidity()&&(e?e.click():ln(_).submit())}function be(e){switch(e){case"bar":case"floating":case"overlay":ke(),ln(U)&&"off"!==ln(U)||(ln(O).auto="onsubmit");break;case"standard":Ae()}ln(y)!==e&&Et(y,e,!0)}async function ye(e){if(e.status>=400){if(e.headers.get("content-type")?.includes("/json")){let t;try{t=await e.json()}catch{}if(t&&"error"in t)throw new Error(`Server responded with ${e.status} - ${t.error}`)}throw new Error(`Server responded with ${e.status}.`)}const t=e.headers.get("content-type");if(!t||!t.includes("/json"))throw new Error(`Server responded with invalid content-type. Expected application/json, received ${t}.`)}async function we(e){if(!ln(A))return void Te(da.ERROR,"Cannot verify code challenge without PoW payload.");Te(da.VERIFYING);let t=null;if(ln(L).verifyUrl)t=await async function(e,t){const n=await q("onRequestServerVerification",e,t);if(void 0!==n)return n;if(_e("requesting server verification from",ln(L).verifyUrl),!ln(L).verifyUrl)throw new Error("Parameter verifyUrl must be set for server verification.");const r=await ln(L).fetch(Q(ln(L).verifyUrl,ln(v)),{body:JSON.stringify({code:t,fields:ln(L).serverVerificationFields?[...ln(_)?.querySelectorAll('input[type="text"]:not([data-no-spamfilter]), textarea:not([data-no-spamfilter])')||[]].reduce((e,t)=>{const n=t.name,r=t.value;return n&&r&&(e[n]=/\n/.test(r)?r.replace(new RegExp("(?{ve(ln(S))})):Te(da.ERROR,t?.reason||"Verification failed."),ln(L).disableAutoFocus||W()?.focus()}function xe(e){Object.assign(ln(O),{...Object.fromEntries(Object.entries(e).filter(([e,t])=>void 0!==t))})}function ke(){Et(R,!1)}function _e(...e){(ln(L).debug||e.some(e=>e instanceof Error))&&console[e[0]instanceof Error?"error":"log"]("ALTCHA",`[name=${ln(L).name}]`,...e)}function $e(e=da.UNVERIFIED,t=null){Et(g,!1),Et(C,t,!0),Et(A,null),ln(b)&&ln(b).abort(),ln(T)&&(clearTimeout(ln(T)),Et(T,null)),Te(e)}function Te(e,t=null){Et(w,e,!0),Et(C,t,!0),h("statechange",{payload:ln(A),state:ln(w)})}function Ae(){Et(R,!0),on().then(()=>{Ie()})}function Ie(){if("floating"===ln(L).display)return function(e=20){if(!ln($))return;const t=ln(L).floatingPlacement;if(!ln(k)&&(Et(k,(ln(L).floatingAnchor instanceof HTMLElement?ln(L).floatingAnchor:ln(L).floatingAnchor?document.querySelector(ln(L).floatingAnchor):ln(_)?.querySelector('input[type="submit"], button[type="submit"], button:not([type="button"]):not([type="reset"])'))||ln(_),!0),!ln(k)))return void _e("unable to find floating anchor element");const n=parseInt(ln(L).floatingOffset,10)||12,r=ln(k).getBoundingClientRect(),a=ln($).getBoundingClientRect(),o=document.documentElement.clientHeight,i=document.documentElement.clientWidth,l=t&&"auto"!==t?"top"===t:r.bottom+a.height+n+e>o,s=Math.max(e,Math.min(i-e-a.width,r.left+r.width/2-a.width/2));if(ln($).style.setProperty("--altcha-floating-left",`${s}px`),ln($).style.setProperty("--altcha-floating-top",l?r.top-(a.height+n)+"px":`${r.bottom+n}px`),ln($).setAttribute("data-floating-position",l?"top":"bottom"),ln(x)){const e=ln(x).getBoundingClientRect();ln(x).style.left=r.left-s+r.width/2-e.width/2+"px"}}();Et(P,ln(P)+1)}async function Pe(e={}){const{concurrency:t=Math.max(1,ln(L).workers),controller:n=new AbortController,minDuration:r=ln(L).minDuration}=e,a=performance.now();let i=null,l=null,s=!1;const c=await q("onVerify",e);if(void 0!==c)return c;$e(da.VERIFYING),Et(b,n,!0);try{if(!o)throw new Error("Secure context (HTTPS) required.");if(ln(L).mockError)throw new Error("Mock error.");if(ln(L).test)return _e("running test mode with null challenge"),await Y(Math.max(0,r-(performance.now()-a))),ln(b)?.signal.aborted?($e(),null):(Et(A,btoa(JSON.stringify({challenge:null,solution:null,test:!0})),!0),_e("verified"),Te(da.VERIFIED),h("verified",{payload:ln(A)}),{payload:ln(A)});if(i=await G(),!i)throw new Error("Failed to fetch challenge.");_e("challenge",i),"configuration"in i&&(_e("re-configuring from challenge",i.configuration),xe(i.configuration)),i.parameters.expiresAt&&function(e){ln(T)&&clearTimeout(ln(T));const t=()=>{ln(w)!==da.UNVERIFIED?(Et(g,!1),Te(da.EXPIRED)):$e(),h("expired")},n=1e3*e-Date.now();n>=1?Et(T,setTimeout(t,n),!0):t()}(i.parameters.expiresAt),s="_version"in i&&1===i._version;const e=globalThis.$altcha.algorithms.get(i.parameters.algorithm);if(!e)throw new Error(`Unsupported algorithm ${i.parameters.algorithm}.`);if(l=await Ea({challenge:i,concurrency:t,controller:n,createWorker:e,counterMode:s?"string":"uint32",onOutOfMemory:e=>{if(_e("out of memory error received"),h("outofmemory"),ln(L).retryOnOutOfMemoryError&&e>1){const t=Math.floor(e/2);return _e(`retrying with ${t} workers...`),t}},timeout:ln(L).timeout}),ln(b)?.signal.aborted)return $e(),null;if(!l)throw new Error("Failed to find solution.");_e("solution",l),await Y(Math.max(0,r-(performance.now()-a))),Et(m,i.codeChallenge||ln(L).codeChallenge||null,!0),Et(A,s?btoa(JSON.stringify(function(e,t){return{algorithm:e.parameters.algorithm,challenge:e.parameters.keyPrefix,number:t.counter,salt:"_originalSalt"in e?e._originalSalt:e.parameters.nonce,signature:e.signature,took:t.time||0}}(i,l))):btoa(JSON.stringify({challenge:{parameters:i.parameters,signature:i.signature},solution:l})),!0),ln(m)?(_e("requesting code verification"),Te(da.CODE),h("codechallenge",{codeChallenge:ln(m)})):ln(L).verifyUrl?await we():(_e("verified"),Te(da.VERIFIED),h("verified",{payload:ln(A)}))}catch(e){return _e("verification failed",e),Te(da.ERROR,String(e)),null}finally{Et(b,null)}return{challenge:i,payload:ln(A),solution:l}}vn(()=>{xe({auto:t.auto,challenge:t.challenge,display:t.display,language:t.language,name:t.name,type:t.type,workers:t.workers})}),vn(()=>{if(t.configuration)try{xe(JSON.parse(t.configuration))}catch{_e("unable to parse the `configuration` attribute (JSON expected)")}}),vn(()=>{ln(y)!==ln(L).display&&be(ln(L).display)}),vn(()=>{ln(g)&&ln(w)===da.VERIFYING&&Et(g,!1)}),vn(()=>{ln(g)||ln(w)!==da.VERIFIED||Et(g,!0)}),vn(()=>{if(!ln(g)){const e=W();e&&e.checked&&(e.checked=!1)}}),vn(()=>{ln(w)===da.VERIFIED&&W()?.setCustomValidity("")}),vn(()=>{if("onload"===ln(U)){const e=setTimeout(()=>{Pe()},1);return()=>{e&&clearTimeout(e)}}}),vn(()=>{ln(C)&&_e("error:",ln(C))}),vn(()=>{ln(A)&&ln(L).setCookie&&function(e,t={}){const{domain:n,name:r=ln(L).name,maxAge:a,path:o,sameSite:i,secure:l}=t;let s=`${encodeURIComponent(r)}=${encodeURIComponent(e)}`;n&&(s+=`; Domain=${n}`);null!=a&&(s+=`; Max-Age=${a}`);o&&(s+=`; Path=${o}`);i&&(s+=`; SameSite=${i}`);l&&(s+="; Secure");document.cookie=s}(ln(A),ln(L).setCookie)}),dr(()=>(_e("mounted","3.2.1"),d&&globalThis.$altcha.instances.add(d),Et(_,ln($)?.closest("form"),!0),ln(_)?.addEventListener("reset",ue),ln(_)?.addEventListener("submit",pe,{capture:!0}),ln(_)?.addEventListener("focusin",re),function(){Et(I,[...globalThis.$altcha.plugins].map(e=>new e(d)),!0),_e("activating plugins",ln(I).map(e=>e.constructor.name));for(const e of ln(I))e.activate()}(),ln(L).humanInteractionSignature&&(_e("human interaction signature enabled"),p=new Ta),h("load"),o||_e("secure context (HTTPS) required"),()=>{!function(){for(const e of ln(I))e.destroy()}(),d&&globalThis.$altcha.instances.delete(d),ln(T)&&clearTimeout(ln(T)),ln(_)?.removeEventListener("reset",ue),ln(_)?.removeEventListener("submit",pe,{capture:!0}),ln(_)?.removeEventListener("focusin",re),p?.destroy()}));var Oe={configure:xe,getConfiguration:function(){return{...ln(L)}},getState:function(){return ln(w)},hide:ke,log:_e,reset:$e,setState:Te,show:Ae,updateUI:Ie,verify:Pe},Re=Va();Vn("scroll",me,function(){Ie()}),Vn("click",me,function(e){const t=e.target;"floating"!==ln(L).display||!t||d?.contains(t)||t.hasAttribute("data-backdrop")||t.closest("[data-popover]")||ln(w)===da.VERIFIED||ln(L).floatingPersist||ke()}),Vn("pageshow",ge,function(e){e.persisted&&(be(ln(L).display),$e())}),Vn("resize",ge,function(){Ie()});var Le=Ce(Re),Me=e=>{Zn(e,Aa())};hr(Le,e=>{"overlay"===ln(L).display&&ln(R)&&e(Me)});var De=Ee(Le,2),Ue=Se(De),Ve=e=>{var t=Pa(),n=Ce(t),r=Ee(n,2),a=e=>{var t=Ia();vr(t,()=>document.querySelector(ln(L).overlayContent)?.innerHTML,!0),ce(t),Zn(e,t)};hr(r,e=>{ln(L).overlayContent&&e(a)}),Vn("click",n,ne,!0),Zn(e,t)};hr(Ue,e=>{"overlay"===ln(L).display&&ln(R)&&e(Ve)});var Ne=Ee(Ue,2),ze=Se(Ne),Fe=Se(ze),He=Se(Fe);{let e=mt(()=>"standard"===ln(L).display&&"onsubmit"!==ln(U)||ln(w)===da.VERIFYING);!function(e,t,n){var r;oe&&(r=ae,se());var a=new fr(e);wn(()=>{var e=t()??null;if(oe&&"["===de(r)!=(null!==e)){var o=fe();return le(o),a.anchor=o,ie(!1),a.ensure(e,e&&(t=>n(t,e))),void ie(!0)}a.ensure(e,e&&(t=>n(t,e)))},E)}(He,()=>ln(D),(t,n)=>{n(t,{get id(){return ln(M)},name:"",get required(){return ln(e)},get loading(){return ln(V)},get checked(){return ln(g)},onchange:ee,oninvalid:te})})}var Ke=Ee(He,2),qe=Se(Ke),Ye=e=>{var t=Wn();yn(()=>or(t,ln(F).verificationRequired)),Zn(e,t)},Ge=e=>{var t=Wn();yn(()=>or(t,ln(F).verifying)),Zn(e,t)},We=e=>{var t=Wn();yn(()=>or(t,ln(F).verified)),Zn(e,t)},Je=e=>{var t=Wn();yn(()=>or(t,ln(F).label)),Zn(e,t)};hr(qe,e=>{ln(w)===da.CODE&&ln(m)?e(Ye):ln(w)===da.VERIFYING?e(Ge,1):ln(w)===da.VERIFIED?e(We,2):e(Je,-1)}),ce(Ke),ce(Fe);var Ze=Ee(Fe,2),Xe=e=>{ia(e,{get strings(){return ln(F)}})};hr(Ze,e=>{ln(z)&&e(Xe)}),ce(ze);var Qe=Ee(ze,2),et=e=>{{let t=mt(()=>"bar"===ln(L).display&&ln(z));sa(e,{get logo(){return ln(t)},get strings(){return ln(F)}})}};hr(Qe,e=>{ln(N)&&e(et)});var tt=Ee(Qe,2),nt=e=>{var t=Oa();Yr(t,e=>Et(x,e),()=>ln(x)),Zn(e,t)};hr(tt,e=>{"floating"===ln(L).display&&e(nt)});var rt=Ee(tt,2),at=e=>{var t=Ra();Dr(t),yn(()=>{var e,n,r;Vr(t,"name",ln(L).name),e=t,n=ln(A),(r=zr(e)).value!==(r.value=n??void 0)&&(e.value!==n||0===n&&e.nodeName===Mr)&&(e.value=n??"")}),Zn(e,t)};hr(rt,e=>{ln(L).setCookie||e(at)}),ce(Ne);var ot=Ee(Ne,2),it=e=>{Ca(e,{get anchor(){return ln($)},onClickOutside:()=>{o&&$e()},get placement(){return ln(L).popoverPlacement},role:"alert",variant:"error",get dir(){return ln(B)},get updateUISignal(){return ln(P)},children:(e,t)=>{var n=Jn(),r=Ce(n),a=e=>{Zn(e,La())},i=e=>{var t=Ma(),n=Se(t,!0);ce(t),yn(()=>or(n,ln(F).expired)),Zn(e,t)},l=e=>{var t=Da(),n=Se(t,!0);ce(t),yn(()=>{Vr(t,"title",ln(C)),or(n,ln(F).error)}),Zn(e,t)};hr(r,e=>{ln(C)||o?ln(C)||ln(w)!==da.EXPIRED?e(l,-1):e(i,1):e(a)}),Zn(e,n)},$$slots:{default:!0}})},lt=e=>{var t=Jn();!function(e,t,n){oe&&se();var r=new fr(e);wn(()=>{var e=t();e!=e&&(e=pr),r.ensure(e,n)})}(Ce(t),()=>ln(m),e=>{{let t=mt(()=>"standard"!==ln(L).codeChallengeDisplay);Ca(e,{get anchor(){return ln($)},get backdrop(){return ln(t)},get display(){return ln(L).codeChallengeDisplay},onClose:()=>{$e()},get placement(){return ln(L).popoverPlacement},role:"dialog",get"aria-label"(){return ln(F).verificationRequired},get dir(){return ln(B)},get updateUISignal(){return ln(P)},children:(e,t)=>{var n=Ua(),r=Ce(n);xa(r,{get audioUrl(){return ln(H)},get imageUrl(){return ln(K)},onCancel:()=>$e(),onReload:()=>Pe(),onSubmit:e=>we(e),get codeChallenge(){return ln(m)},get config(){return ln(L)},get strings(){return ln(F)}});var a=Ee(r,2),o=e=>{sa(e,{get logo(){return ln(z)},get strings(){return ln(F)}})};hr(a,e=>{ln(N)&&"standard"!==ln(L).codeChallengeDisplay&&e(o)}),Zn(e,n)},$$slots:{default:!0}})}}),Zn(e,t)};hr(ot,e=>{ln(C)||ln(w)===da.EXPIRED||!o?e(it):ln(m)&&ln(w)===da.CODE&&e(lt,1)}),ce(De),Yr(De,e=>Et($,e),()=>ln($)),yn(e=>{Vr(De,"data-state",ln(w)),Vr(De,"data-display",ln(L).display||void 0),Vr(De,"data-placement",e),Vr(De,"data-visible",ln(R)||void 0),Vr(De,"dir",ln(B)),Vr(Ke,"for",ln(M)),De.dir=De.dir},[()=>function(e){switch(e){case"bar":return ln(L).barPlacement||"bottom";case"floating":return ln(L).floatingPlacement||"auto";default:return}}(ln(L).display)]),Zn(e,Re);var st=X(Oe);return r(),st},{auto:{type:"String"},challenge:{type:"String"},configuration:{type:"String"},display:{type:"String"},language:{type:"String"},name:{type:"String"},theme:{type:"String"},type:{type:"String"},workers:{type:"Number"}},[],["configure","getConfiguration","getState","hide","log","reset","setState","show","updateUI","verify"]));const Na='(function() {\n "use strict";\n function bufferStartsWith(buffer, prefix) {\n if (prefix.length > buffer.length) {\n return false;\n }\n for (let i = 0; i < prefix.length; i++) {\n if (buffer[i] !== prefix[i]) {\n return false;\n }\n }\n return true;\n }\n function bufferToHex(buffer) {\n return Array.from(new Uint8Array(buffer)).map((b) => b.toString(16).padStart(2, "0")).join("");\n }\n function concatBuffers(a, b) {\n const out = new Uint8Array(a.length + b.length);\n out.set(a, 0);\n out.set(b, a.length);\n return out;\n }\n function hexToBuffer(hex) {\n if (hex.length % 2 !== 0) {\n throw new Error(`Hex string must have an even length. Got: ${hex}`);\n }\n const buffer = new ArrayBuffer(hex.length / 2);\n const view = new DataView(buffer);\n for (let i = 0; i < hex.length; i += 2) {\n const byteString = hex.substring(i, i + 2);\n const byteValue = parseInt(byteString, 16);\n view.setUint8(i / 2, byteValue);\n }\n return new Uint8Array(buffer);\n }\n async function delay(ms) {\n await new Promise((resolve) => setTimeout(resolve, ms));\n }\n function timeDuration(start) {\n return Math.floor((performance.now() - start) * 10) / 10;\n }\n class PasswordBuffer {\n constructor(nonce, mode = "uint32") {\n this.nonce = nonce;\n this.mode = mode;\n this.buffer = new Uint8Array(this.nonce.length + this.COUNTER_BYTES);\n this.buffer.set(this.nonce, 0);\n this.dataView = new DataView(this.buffer.buffer);\n }\n nonce;\n mode;\n COUNTER_BYTES = 4;\n buffer;\n dataView;\n encoder = new TextEncoder();\n /**\n * Appends the counter to the nonce buffer.\n * In \'string\' mode, encodes the counter as a UTF-8 string.\n * In \'uint32\' mode, writes the counter as a big-endian 32-bit integer.\n */\n setCounter(n) {\n if (this.mode === "string") {\n return concatBuffers(this.nonce, this.encoder.encode(n.toString()));\n }\n this.dataView.setUint32(this.nonce.length, n, false);\n return this.buffer;\n }\n }\n async function solveChallenge(options) {\n const {\n challenge,\n controller,\n counterMode = "uint32",\n counterStart = 0,\n counterStep = 1,\n deriveKey: deriveKey2,\n timeout = 9e4\n } = options;\n const { nonce, keyPrefix, salt } = challenge.parameters;\n const nonceBuf = hexToBuffer(nonce);\n const saltBuf = hexToBuffer(salt);\n const keyPrefixBuf = keyPrefix.length % 2 === 0 ? hexToBuffer(keyPrefix) : null;\n const password = new PasswordBuffer(nonceBuf, counterMode);\n const start = performance.now();\n let counter = counterStart;\n let iterations = 0;\n let derivedKeyHex = "";\n let lastYield = start;\n while (true) {\n if (controller?.signal.aborted || timeout && iterations % 10 === 0 && performance.now() - start > timeout) {\n return null;\n }\n const { derivedKey } = await deriveKey2(\n challenge.parameters,\n saltBuf,\n password.setCounter(counter)\n );\n if (iterations % 10 === 0 && performance.now() - lastYield > 200) {\n await delay(0);\n lastYield = performance.now();\n }\n if (keyPrefixBuf ? bufferStartsWith(derivedKey, keyPrefixBuf) : bufferToHex(derivedKey).startsWith(keyPrefix)) {\n derivedKeyHex = bufferToHex(derivedKey);\n break;\n }\n counter = counter + counterStep;\n iterations = iterations + 1;\n }\n return {\n counter,\n derivedKey: derivedKeyHex,\n time: timeDuration(start)\n };\n }\n function handler(options) {\n const { deriveKey: deriveKey2 } = options;\n let controller = void 0;\n self.onmessage = async (message) => {\n const { challenge, counterMode, counterStart, counterStep, timeout, type } = message.data;\n if (type === "abort") {\n controller?.abort();\n } else if (type === "work") {\n controller = new AbortController();\n let solution;\n try {\n solution = await solveChallenge({\n challenge,\n controller,\n counterStart,\n counterStep,\n deriveKey: deriveKey2,\n counterMode,\n timeout\n });\n } catch (err) {\n return self.postMessage({ error: err });\n }\n self.postMessage(solution);\n }\n };\n }\n function getDigest(algorithm) {\n switch (algorithm) {\n case "PBKDF2/SHA-512":\n return "SHA-512";\n case "PBKDF2/SHA-384":\n return "SHA-384";\n case "PBKDF2/SHA-256":\n default:\n return "SHA-256";\n }\n }\n async function deriveKey(parameters, salt, password) {\n const { algorithm, cost, keyLength = 32 } = parameters;\n const passwordKey = await crypto.subtle.importKey(\n "raw",\n password,\n { name: "PBKDF2" },\n false,\n ["deriveKey"]\n );\n const derivedKey = await crypto.subtle.deriveKey(\n {\n name: "PBKDF2",\n salt,\n iterations: cost,\n hash: getDigest(algorithm)\n },\n passwordKey,\n { name: "AES-GCM", length: keyLength * 8 },\n true,\n ["encrypt"]\n );\n return {\n derivedKey: new Uint8Array(await crypto.subtle.exportKey("raw", derivedKey))\n };\n }\n handler({\n deriveKey\n });\n})();\n',za="undefined"!=typeof self&&self.Blob&&new Blob(["(self.URL || self.webkitURL).revokeObjectURL(self.location.href);",Na],{type:"text/javascript;charset=utf-8"});function ja(e){let t;try{if(t=za&&(self.URL||self.webkitURL).createObjectURL(za),!t)throw"";const n=new Worker(t,{name:e?.name});return n.addEventListener("error",()=>{(self.URL||self.webkitURL).revokeObjectURL(t)}),n}catch(t){return new Worker("data:text/javascript;charset=utf-8,"+encodeURIComponent(Na),{name:e?.name})}}const Ba='(function() {\n "use strict";\n function bufferStartsWith(buffer, prefix) {\n if (prefix.length > buffer.length) {\n return false;\n }\n for (let i = 0; i < prefix.length; i++) {\n if (buffer[i] !== prefix[i]) {\n return false;\n }\n }\n return true;\n }\n function bufferToHex(buffer) {\n return Array.from(new Uint8Array(buffer)).map((b) => b.toString(16).padStart(2, "0")).join("");\n }\n function concatBuffers(a, b) {\n const out = new Uint8Array(a.length + b.length);\n out.set(a, 0);\n out.set(b, a.length);\n return out;\n }\n function hexToBuffer(hex) {\n if (hex.length % 2 !== 0) {\n throw new Error(`Hex string must have an even length. Got: ${hex}`);\n }\n const buffer = new ArrayBuffer(hex.length / 2);\n const view = new DataView(buffer);\n for (let i = 0; i < hex.length; i += 2) {\n const byteString = hex.substring(i, i + 2);\n const byteValue = parseInt(byteString, 16);\n view.setUint8(i / 2, byteValue);\n }\n return new Uint8Array(buffer);\n }\n async function delay(ms) {\n await new Promise((resolve) => setTimeout(resolve, ms));\n }\n function timeDuration(start) {\n return Math.floor((performance.now() - start) * 10) / 10;\n }\n class PasswordBuffer {\n constructor(nonce, mode = "uint32") {\n this.nonce = nonce;\n this.mode = mode;\n this.buffer = new Uint8Array(this.nonce.length + this.COUNTER_BYTES);\n this.buffer.set(this.nonce, 0);\n this.dataView = new DataView(this.buffer.buffer);\n }\n nonce;\n mode;\n COUNTER_BYTES = 4;\n buffer;\n dataView;\n encoder = new TextEncoder();\n /**\n * Appends the counter to the nonce buffer.\n * In \'string\' mode, encodes the counter as a UTF-8 string.\n * In \'uint32\' mode, writes the counter as a big-endian 32-bit integer.\n */\n setCounter(n) {\n if (this.mode === "string") {\n return concatBuffers(this.nonce, this.encoder.encode(n.toString()));\n }\n this.dataView.setUint32(this.nonce.length, n, false);\n return this.buffer;\n }\n }\n async function solveChallenge(options) {\n const {\n challenge,\n controller,\n counterMode = "uint32",\n counterStart = 0,\n counterStep = 1,\n deriveKey: deriveKey2,\n timeout = 9e4\n } = options;\n const { nonce, keyPrefix, salt } = challenge.parameters;\n const nonceBuf = hexToBuffer(nonce);\n const saltBuf = hexToBuffer(salt);\n const keyPrefixBuf = keyPrefix.length % 2 === 0 ? hexToBuffer(keyPrefix) : null;\n const password = new PasswordBuffer(nonceBuf, counterMode);\n const start = performance.now();\n let counter = counterStart;\n let iterations = 0;\n let derivedKeyHex = "";\n let lastYield = start;\n while (true) {\n if (controller?.signal.aborted || timeout && iterations % 10 === 0 && performance.now() - start > timeout) {\n return null;\n }\n const { derivedKey } = await deriveKey2(\n challenge.parameters,\n saltBuf,\n password.setCounter(counter)\n );\n if (iterations % 10 === 0 && performance.now() - lastYield > 200) {\n await delay(0);\n lastYield = performance.now();\n }\n if (keyPrefixBuf ? bufferStartsWith(derivedKey, keyPrefixBuf) : bufferToHex(derivedKey).startsWith(keyPrefix)) {\n derivedKeyHex = bufferToHex(derivedKey);\n break;\n }\n counter = counter + counterStep;\n iterations = iterations + 1;\n }\n return {\n counter,\n derivedKey: derivedKeyHex,\n time: timeDuration(start)\n };\n }\n function handler(options) {\n const { deriveKey: deriveKey2 } = options;\n let controller = void 0;\n self.onmessage = async (message) => {\n const { challenge, counterMode, counterStart, counterStep, timeout, type } = message.data;\n if (type === "abort") {\n controller?.abort();\n } else if (type === "work") {\n controller = new AbortController();\n let solution;\n try {\n solution = await solveChallenge({\n challenge,\n controller,\n counterStart,\n counterStep,\n deriveKey: deriveKey2,\n counterMode,\n timeout\n });\n } catch (err) {\n return self.postMessage({ error: err });\n }\n self.postMessage(solution);\n }\n };\n }\n async function deriveKey(parameters, salt, password) {\n const { algorithm, keyLength = 32 } = parameters;\n const iterations = Math.max(1, parameters.cost);\n let data = void 0;\n let derivedKey = void 0;\n for (let i = 0; i < iterations; i++) {\n if (i === 0) {\n data = concatBuffers(salt, password);\n } else {\n data = derivedKey;\n }\n derivedKey = new Uint8Array(\n (await crypto.subtle.digest(algorithm, data)).slice(0, keyLength)\n );\n }\n return {\n parameters: {},\n derivedKey\n };\n }\n handler({\n deriveKey\n });\n})();\n',Fa="undefined"!=typeof self&&self.Blob&&new Blob(["(self.URL || self.webkitURL).revokeObjectURL(self.location.href);",Ba],{type:"text/javascript;charset=utf-8"});function Ha(e){let t;try{if(t=Fa&&(self.URL||self.webkitURL).createObjectURL(Fa),!t)throw"";const n=new Worker(t,{name:e?.name});return n.addEventListener("error",()=>{(self.URL||self.webkitURL).revokeObjectURL(t)}),n}catch(t){return new Worker("data:text/javascript;charset=utf-8,"+encodeURIComponent(Ba),{name:e?.name})}}!function(e,t="altcha-css"){if("undefined"!=typeof document&&document&&!document.getElementById(t)){const n=document.createElement("style");n.id=t,n.textContent=e;const r=document.currentScript?.nonce??document.querySelector('meta[name="csp-nonce"]')?.content;r&&(n.nonce=r),document.head.appendChild(n)}}(':root {\n --altcha-border-color: var(--altcha-color-neutral);\n --altcha-border-width: 1px;\n --altcha-border-radius: 6px;\n --altcha-color-base: light-dark(oklch(100% 0.00011 271.152), oklch(20.904% 0.00002 271.152));\n --altcha-color-base-content: light-dark(\n \toklch(20.904% 0.00002 271.152),\n \toklch(100% 0.00011 271.152)\n );\n --altcha-color-error: oklch(51.284% 0.20527 28.678);\n --altcha-color-error-content: oklch(100% 0.00011 271.152);\n --altcha-color-neutral: light-dark(oklch(83.591% 0.0001 271.152), oklch(46.04% 0.00005 271.152));\n --altcha-color-neutral-content: light-dark(\n \toklch(46.76% 0.00005 271.152),\n \toklch(100% 0.00011 271.152)\n );\n --altcha-color-primary: oklch(40.279% 0.2449 268.131);\n --altcha-color-primary-content: oklch(100% 0.00011 271.152);\n --altcha-color-success: oklch(55.748% 0.18968 142.511);\n --altcha-color-success-content: oklch(100% 0.00011 271.152);\n --altcha-checkbox-border-color: light-dark(\n \toklch(66.494% 0.00233 15.434),\n \toklch(51.028% 0.00006 271.152)\n );\n --altcha-checkbox-border-radius: 5px;\n --altcha-checkbox-border-width: var(--altcha-border-width);\n --altcha-checkbox-outline: 2px solid var(--altcha-checkbox-outline-color);\n --altcha-checkbox-outline-color: -webkit-focus-ring-color;\n --altcha-checkbox-outline-offset: 2px;\n --altcha-checkbox-size: 22px;\n --altcha-checkbox-transition-duration: var(--altcha-transition-duration);\n --altcha-input-background-color: var(--altcha-color-base);\n --altcha-input-border-radius: 3px;\n --altcha-input-border-width: 1px;\n --altcha-input-color: var(--altcha-color-base-content);\n --altcha-max-width: 320px;\n --altcha-padding: 0.75rem;\n --altcha-popover-arrow-size: 6px;\n --altcha-popover-color: var(--altcha-border-color);\n --altcha-shadow: drop-shadow(3px 3px 6px oklch(0% 0 0 / 0.2));\n --altcha-spinner-color: var(--altcha-color-base-content);\n --altcha-switch-background-color: var(--altcha-color-neutral);\n --altcha-switch-border-radius: calc(infinity * 1px);\n --altcha-switch-height: var(--altcha-checkbox-size);\n --altcha-switch-padding: 0.25rem;\n --altcha-switch-width: calc(var(--altcha-checkbox-size) * 1.75);\n --altcha-switch-toggle-border-radius: 100%;\n --altcha-switch-toggle-color: var(--altcha-color-neutral-content);\n --altcha-switch-toggle-size: calc(\n \tvar(--altcha-switch-height) - calc(var(--altcha-switch-padding) * 2)\n );\n --altcha-transition-duration: 0.6s;\n --altcha-z-index: 99999999;\n --altcha-z-index-popover: 999999999;\n}\n\n@supports (-moz-appearance: none) {\n :root {\n --altcha-checkbox-outline-color: var(--altcha-color-primary);\n }\n}\n.altcha {\n all: revert-layer;\n display: none;\n font-family: inherit;\n font-size: inherit;\n position: relative;\n}\n.altcha[data-visible] {\n display: block;\n}\n.altcha-popover, .altcha-popover * {\n all: revert-layer;\n box-sizing: border-box;\n font-family: inherit;\n font-size: inherit;\n line-height: 1.25;\n}\n.altcha * {\n all: revert-layer;\n box-sizing: border-box;\n font-family: inherit;\n font-size: inherit;\n line-height: 1.25;\n}\n.altcha a, .altcha-popover a {\n color: currentColor;\n text-decoration: none;\n}\n.altcha a:hover, .altcha-popover a:hover {\n color: currentColor;\n}\n.altcha-main {\n align-items: start;\n background-color: var(--altcha-color-base);\n border: var(--altcha-border-width, 1px) solid var(--altcha-border-color);\n border-radius: var(--altcha-border-radius, 0);\n color: var(--altcha-color-base-content);\n display: flex;\n flex-direction: column;\n gap: 0.5rem;\n justify-content: space-between;\n padding: var(--altcha-padding);\n max-width: var(--altcha-max-width, 100%);\n}\n.altcha-main > * {\n display: flex;\n width: 100%;\n}\n.altcha-main > *:first-child {\n flex-grow: 1;\n}\n.altcha-checkbox-wrap {\n align-items: center;\n display: flex;\n flex-direction: row;\n flex-grow: 1;\n gap: 0.5rem;\n}\n.altcha-checkbox-wrap > * {\n display: flex;\n}\n.altcha-logo {\n opacity: 0.7;\n}\n.altcha-footer {\n align-items: center;\n display: flex;\n flex-grow: 1;\n gap: 0.5rem;\n justify-content: flex-end;\n font-size: 0.7rem;\n opacity: 0.7;\n}\n.altcha-footer p {\n margin: 0;\n padding: 0;\n}\n.altcha-error {\n font-size: 0.85rem;\n}\n.altcha-button {\n align-items: center;\n background: var(--altcha-color-primary);\n border: var(--altcha-input-border-width) solid var(--altcha-color-primary);\n border-radius: var(--altcha-input-border-radius);\n color: var(--altcha-color-primary-content);\n cursor: pointer;\n display: flex;\n font-size: 0.9rem;\n gap: 0.5rem;\n padding: 0.35rem;\n}\n.altcha-button:focus {\n border-color: var(--altcha-color-primary);\n outline: var(--altcha-checkbox-outline);\n outline-offset: var(--altcha-checkbox-outline-offset);\n}\n.altcha-button > .altcha-spinner, .altcha-button > svg {\n height: 20px;\n width: 20px;\n}\n.altcha-button-secondary {\n background: transparent;\n border-color: var(--altcha-color-neutral);\n color: var(--altcha-color-neutral-content);\n}\n.altcha-input {\n background: var(--altcha-input-background-color);\n border: var(--altcha-input-border-width) solid var(--altcha-color-neutral);\n border-radius: var(--altcha-input-border-radius);\n color: var(--altcha-input-color);\n flex-grow: 1;\n font-size: 1rem;\n min-width: 0;\n padding: 0.25rem;\n width: auto;\n}\n.altcha-input:focus {\n border-color: var(--altcha-color-primary);\n outline: var(--altcha-checkbox-outline);\n outline-offset: var(--altcha-checkbox-outline-offset);\n}\n.altcha-spinner {\n animation: altcha-rotate 0.6s linear infinite;\n border-radius: 100%;\n border: var(--altcha-checkbox-border-width) solid var(--altcha-spinner-color);\n border-bottom-color: transparent;\n border-right-color: transparent;\n opacity: 0.7;\n}\n.altcha-popover {\n background-color: var(--altcha-color-base);\n border: var(--altcha-border-width) solid var(--altcha-border-color);\n border-radius: var(--altcha-border-radius);\n color: var(--altcha-color-base-content);\n filter: var(--altcha-shadow);\n position: absolute;\n left: calc(var(--altcha-padding) / 2);\n max-width: calc(var(--altcha-max-width) - var(--altcha-padding));\n top: calc(var(--altcha-padding) + var(--altcha-checkbox-size) + var(--altcha-popover-arrow-size));\n z-index: var(--altcha-z-index-popover);\n}\n.altcha-popover-arrow {\n border: var(--altcha-popover-arrow-size) solid transparent;\n border-bottom-color: var(--altcha-popover-color);\n content: "";\n height: 0;\n left: calc(var(--altcha-checkbox-size) / 2);\n position: absolute;\n top: calc(var(--altcha-popover-arrow-size) * -2);\n width: 0;\n}\n.altcha-popover-content {\n max-height: 100dvh;\n overflow: auto;\n padding: var(--altcha-padding);\n}\n.altcha-popover[data-top=true][data-display=standard] {\n bottom: calc(100% - (var(--altcha-padding) - var(--altcha-popover-arrow-size)));\n top: auto;\n}\n.altcha-popover[data-top=true][data-display=standard] .altcha-popover-arrow {\n border-bottom-color: transparent;\n border-top-color: var(--altcha-popover-color);\n bottom: calc(var(--altcha-popover-arrow-size) * -2);\n top: auto;\n}\n.altcha-popover[data-variant=error] {\n --altcha-popover-color: var(--altcha-color-error);\n background-color: var(--altcha-color-error);\n border-color: var(--altcha-color-error);\n color: var(--altcha-color-error-content);\n}\n.altcha-popover[data-variant=error] .altcha-popover-content {\n padding: calc(var(--altcha-padding) / 1.5) var(--altcha-padding);\n}\n.altcha-popover[data-display=overlay] {\n animation: altcha-overlay-slidein 0.5s forwards;\n left: 50%;\n position: fixed;\n top: 45%;\n transform: translate(-50%, -50%);\n width: var(--altcha-max-width);\n z-index: var(--altcha-z-index);\n}\n.altcha-popover[data-display=bottomsheet] {\n animation: altcha-bottomsheet-slideup 0.5s forwards;\n border-bottom-left-radius: 0;\n border-bottom-right-radius: 0;\n border-bottom: 0;\n bottom: -100%;\n left: 50%;\n position: fixed;\n top: auto;\n transform: translate(-50%, 0);\n width: var(--altcha-max-width);\n z-index: var(--altcha-z-index);\n}\n.altcha-popover[data-display=bottomsheet] .altcha-popover-content {\n padding-bottom: calc(var(--altcha-padding) * 2);\n}\n.altcha-popover-backdrop {\n background: var(--altcha-color-base-content);\n bottom: 0;\n left: 0;\n opacity: 0.1;\n position: fixed;\n right: 0;\n top: 0;\n transition: opacity 0.5s;\n z-index: var(--altcha-z-index);\n}\n.altcha-popover-close {\n color: var(--altcha-color-base-content);\n cursor: pointer;\n display: inline-block;\n font-size: 1rem;\n height: 1.25rem;\n line-height: 0.95;\n position: absolute;\n right: 0;\n text-align: center;\n text-shadow: 0 0 1px var(--altcha-color-base);\n top: -1.5rem;\n width: 1.25rem;\n z-index: var(--altcha-z-index);\n}\n[dir=rtl] .altcha-popover {\n left: auto;\n right: calc(var(--altcha-padding) / 2);\n}\n[dir=rtl] .altcha-popover-arrow {\n left: auto;\n right: calc(var(--altcha-checkbox-size) / 2);\n}\n[dir=rtl] .altcha-popover-close {\n left: 0;\n right: auto;\n}\n.altcha-popover[data-display=bottomsheet] .altcha-footer, .altcha-popover[data-display=overlay] .altcha-footer {\n align-items: center;\n justify-content: center;\n padding-top: 1rem;\n gap: 0.5rem;\n}\n.altcha-popover[data-display=bottomsheet] .altcha-footer svg, .altcha-popover[data-display=overlay] .altcha-footer svg {\n height: 18px;\n width: 18px;\n vertical-align: middle;\n}\n.altcha-code-challenge > form {\n display: flex;\n flex-direction: column;\n gap: 0.5rem;\n}\n.altcha-code-challenge-title {\n font-weight: 600;\n}\n.altcha-code-challenge-text {\n font-size: 0.85rem;\n}\n.altcha-code-challenge-image {\n background: white;\n border: var(--altcha-input-border-width) solid var(--altcha-color-neutral);\n border-radius: var(--altcha-input-border-radius);\n object-fit: contain;\n height: 50px;\n}\n.altcha-code-challenge-row {\n display: flex;\n gap: 0.5rem;\n}\n.altcha-code-challenge-buttons {\n align-items: center;\n display: flex;\n flex-direction: column;\n gap: 0.5rem;\n margin-top: var(--altcha-padding);\n justify-content: space-between;\n}\n.altcha-code-challenge-buttons button {\n justify-content: center;\n width: 100%;\n}\n.altcha-checkbox {\n cursor: pointer;\n height: var(--altcha-checkbox-size);\n position: relative;\n width: var(--altcha-checkbox-size);\n}\n.altcha-checkbox input {\n appearance: none;\n background: var(--altcha-input-background-color);\n border: var(--altcha-checkbox-border-width, 2px) solid var(--altcha-checkbox-border-color);\n border-radius: var(--altcha-checkbox-border-radius);\n cursor: pointer;\n height: var(--altcha-checkbox-size);\n left: 0;\n margin: 0;\n padding: 0;\n position: absolute;\n top: 0;\n width: var(--altcha-checkbox-size);\n}\n@supports (hanging-punctuation: first) and (font: -apple-system-body) and (-webkit-appearance: none) {\n .altcha-checkbox input {\n /* Safari-only: fixes focus outline */\n }\n .altcha-checkbox input:focus {\n outline-width: 2px;\n outline-style: solid;\n }\n}\n.altcha-checkbox input:before {\n border-radius: var(--altcha-checkbox-border-radius);\n content: "";\n width: 100%;\n height: 100%;\n background: var(--altcha-color-neutral);\n display: block;\n transform: scale(0);\n}\n.altcha-checkbox input:checked {\n background-color: var(--altcha-color-success);\n border-color: var(--altcha-color-success);\n}\n.altcha-checkbox input:checked::before {\n background-color: var(--altcha-color-success);\n opacity: 0;\n transform: scale(2.2);\n transition: all var(--altcha-checkbox-transition-duration) ease;\n transition-delay: 0.1s;\n}\n.altcha-checkbox svg {\n --altcha-radio-svg-size: calc(var(--altcha-checkbox-size) * 0.5);\n --altcha-radio-svg-offset: calc(var(--altcha-checkbox-size) * 0.25);\n fill: none;\n left: var(--altcha-radio-svg-offset);\n height: var(--altcha-radio-svg-size);\n opacity: 0;\n position: absolute;\n stroke: currentColor;\n stroke-width: 2;\n stroke-linecap: round;\n stroke-linejoin: round;\n stroke-dasharray: 16px;\n stroke-dashoffset: 16px;\n top: var(--altcha-radio-svg-offset);\n transform: translate3d(0, 0, 0);\n width: var(--altcha-radio-svg-size);\n}\n.altcha-checkbox input:checked + svg {\n color: var(--altcha-color-success-content);\n opacity: 1;\n stroke-dashoffset: 0;\n transition: all var(--altcha-checkbox-transition-duration) ease;\n transition-delay: 0.1s;\n}\n.altcha-checkbox-spinner {\n display: none;\n left: 0;\n height: var(--altcha-checkbox-size);\n position: absolute;\n top: 0;\n width: var(--altcha-checkbox-size);\n}\n.altcha-checkbox[data-loading=true] input {\n appearance: none;\n opacity: 0;\n pointer-events: none;\n}\n.altcha-checkbox[data-loading=true] .altcha-checkbox-spinner {\n display: block;\n}\n.altcha-checkbox-native {\n height: var(--altcha-checkbox-size);\n position: relative;\n width: var(--altcha-checkbox-size);\n}\n.altcha-checkbox-native input {\n height: var(--altcha-checkbox-size);\n margin: 0;\n width: var(--altcha-checkbox-size);\n}\n.altcha-checkbox-native-spinner {\n display: none;\n left: 0;\n height: var(--altcha-checkbox-size);\n position: absolute;\n top: 0;\n width: var(--altcha-checkbox-size);\n}\n.altcha-checkbox-native[data-loading=true] input {\n appearance: none;\n opacity: 0;\n pointer-events: none;\n}\n.altcha-checkbox-native[data-loading=true] .altcha-checkbox-native-spinner {\n display: block;\n}\n.altcha-switch {\n align-items: center;\n border-radius: var(--altcha-switch-border-radius);\n background-color: var(--altcha-switch-background-color);\n display: flex;\n height: var(--altcha-switch-height);\n padding: var(--altcha-switch-padding);\n position: relative;\n width: var(--altcha-switch-width);\n}\n.altcha-switch:focus-within {\n outline: var(--altcha-checkbox-outline);\n outline-offset: var(--altcha-checkbox-outline-offset);\n}\n.altcha-switch input {\n appearance: none;\n cursor: pointer;\n height: 100%;\n left: 0;\n opacity: 0;\n position: absolute;\n top: 0;\n width: 100%;\n}\n.altcha-switch-toggle {\n align-items: center;\n background-color: var(--altcha-switch-toggle-color);\n border-radius: var(--altcha-switch-toggle-border-radius);\n cursor: pointer;\n display: flex;\n height: var(--altcha-switch-toggle-size);\n justify-content: center;\n left: var(--altcha-switch-padding);\n position: absolute;\n transition: width 150ms ease-out, left 150ms ease-out;\n width: var(--altcha-switch-toggle-size);\n}\n.altcha-switch-spinner {\n display: none;\n height: var(--altcha-switch-toggle-size);\n width: var(--altcha-switch-toggle-size);\n}\n.altcha-switch[data-loading=true] {\n pointer-events: none;\n}\n.altcha-switch[data-loading=true] .altcha-switch-spinner {\n display: block;\n}\n.altcha-switch[data-loading=true] .altcha-switch-toggle {\n background-color: transparent;\n left: calc(50% - var(--altcha-switch-toggle-size) / 2);\n}\n[data-state=verified] .altcha-switch {\n --altcha-switch-background-color: var(--altcha-color-success);\n}\n[data-state=verified] .altcha-switch-toggle {\n background-color: var(--altcha-color-success-content);\n left: calc(100% - var(--altcha-switch-height) + var(--altcha-switch-padding));\n}\n[dir=rtl] .altcha-switch-toggle {\n left: calc(100% - var(--altcha-switch-height) + var(--altcha-switch-padding));\n}\n[dir=rtl][data-state=verified] .altcha-switch-toggle {\n left: var(--altcha-switch-padding);\n}\n.altcha-floating-arrow {\n border: 6px solid transparent;\n border-bottom-color: var(--altcha-border-color);\n content: "";\n height: 0;\n left: 12px;\n position: absolute;\n top: -12px;\n width: 0;\n}\n.altcha-overlay-backdrop {\n bottom: 0;\n left: 0;\n position: fixed;\n right: 0;\n top: 0;\n transition: opacity var(--altcha-transition-duration);\n z-index: var(--altcha-z-index);\n}\n.altcha-overlay-close {\n display: inline-block;\n color: currentColor;\n cursor: pointer;\n font-size: 1rem;\n height: 1rem;\n line-height: 0.85;\n position: absolute;\n right: 0;\n text-align: center;\n text-shadow: 0 0 1px var(--altcha-color-base);\n top: -1.5rem;\n width: 1rem;\n z-index: var(--altcha-z-index);\n}\n.altcha[data-display=overlay] {\n animation: altcha-overlay-slidein var(--altcha-transition-duration) forwards;\n filter: var(--altcha-shadow);\n left: 50%;\n opacity: 0;\n position: fixed;\n top: 45%;\n transform: translate(-50%, -50%);\n z-index: var(--altcha-z-index);\n}\n.altcha[data-display=overlay] .altcha-main {\n width: var(--altcha-max-width);\n}\n.altcha[data-display=floating] {\n display: none;\n filter: var(--altcha-shadow);\n left: var(--altcha-floating-left, -100%);\n position: fixed;\n top: var(--altcha-floating-top, -100%);\n z-index: var(--altcha-z-index);\n}\n.altcha[data-display=floating] .altcha-main {\n width: var(--altcha-max-width);\n}\n.altcha[data-display=floating][data-floating-position=top] .altcha-floating-arrow {\n border-bottom-color: transparent;\n border-top-color: var(--altcha-border-color);\n bottom: -12px;\n top: auto;\n}\n.altcha[data-display=floating][data-visible] {\n display: flex;\n}\n.altcha[data-display=bar] {\n bottom: -100%;\n filter: var(--altcha-shadow);\n left: 0;\n position: fixed;\n right: 0;\n transition: bottom var(--altcha-transition-duration), top var(--altcha-transition-duration);\n z-index: var(--altcha-z-index);\n}\n.altcha[data-display=bar] .altcha-main {\n align-items: center;\n border-radius: 0;\n border-width: var(--altcha-border-width) 0 0 0;\n flex-direction: row;\n max-width: 100% !important;\n}\n.altcha[data-display=bar] .altcha-main > * {\n width: auto;\n}\n.altcha[data-display=bar][data-placement=top] {\n bottom: auto;\n top: -100%;\n}\n.altcha[data-display=bar][data-placement=top] .altcha-main {\n border-width: 0 0 var(--altcha-border-width) 0;\n}\n.altcha[data-display=bar][data-placement=bottom]:not([data-state=unverified]) {\n bottom: 0;\n}\n.altcha[data-display=bar][data-placement=top]:not([data-state=unverified]) {\n top: 0;\n}\n.altcha[data-display=invisible] {\n display: none;\n}\n\n@keyframes altcha-rotate {\n 0% {\n transform: rotate(0deg);\n }\n 100% {\n transform: rotate(360deg);\n }\n}\n@keyframes altcha-bottomsheet-slideup {\n 100% {\n bottom: 0;\n }\n}\n@keyframes altcha-overlay-slidein {\n 100% {\n opacity: 1;\n top: 50%;\n }\n}'),$altcha.algorithms.set("SHA-256",()=>new Ha),$altcha.algorithms.set("SHA-384",()=>new Ha),$altcha.algorithms.set("SHA-512",()=>new Ha),$altcha.algorithms.set("PBKDF2/SHA-256",()=>new ja),$altcha.algorithms.set("PBKDF2/SHA-384",()=>new ja),$altcha.algorithms.set("PBKDF2/SHA-512",()=>new ja); diff --git a/frontend/node_modules/altcha/dist/main/altcha.umd.cjs b/frontend/node_modules/altcha/dist/main/altcha.umd.cjs new file mode 100644 index 0000000..3e0b703 --- /dev/null +++ b/frontend/node_modules/altcha/dist/main/altcha.umd.cjs @@ -0,0 +1,7767 @@ +(function(factory) { + typeof define === "function" && define.amd ? define(factory) : factory(); +})((function() { + "use strict"; + const DEV = false; + var is_array = Array.isArray; + var index_of = Array.prototype.indexOf; + var includes = Array.prototype.includes; + var array_from = Array.from; + var object_keys = Object.keys; + var define_property = Object.defineProperty; + var get_descriptor = Object.getOwnPropertyDescriptor; + var get_descriptors = Object.getOwnPropertyDescriptors; + var object_prototype = Object.prototype; + var array_prototype = Array.prototype; + var get_prototype_of = Object.getPrototypeOf; + var is_extensible = Object.isExtensible; + const noop = () => { + }; + function run_all(arr) { + for (var i = 0; i < arr.length; i++) { + arr[i](); + } + } + function deferred() { + var resolve; + var reject; + var promise = new Promise((res, rej) => { + resolve = res; + reject = rej; + }); + return { promise, resolve, reject }; + } + const DERIVED = 1 << 1; + const EFFECT = 1 << 2; + const RENDER_EFFECT = 1 << 3; + const MANAGED_EFFECT = 1 << 24; + const BLOCK_EFFECT = 1 << 4; + const BRANCH_EFFECT = 1 << 5; + const ROOT_EFFECT = 1 << 6; + const BOUNDARY_EFFECT = 1 << 7; + const CONNECTED = 1 << 9; + const CLEAN = 1 << 10; + const DIRTY = 1 << 11; + const MAYBE_DIRTY = 1 << 12; + const INERT = 1 << 13; + const DESTROYED = 1 << 14; + const REACTION_RAN = 1 << 15; + const DESTROYING = 1 << 25; + const EFFECT_TRANSPARENT = 1 << 16; + const EAGER_EFFECT = 1 << 17; + const HEAD_EFFECT = 1 << 18; + const EFFECT_PRESERVED = 1 << 19; + const USER_EFFECT = 1 << 20; + const WAS_MARKED = 1 << 16; + const REACTION_IS_UPDATING = 1 << 21; + const ASYNC = 1 << 22; + const ERROR_VALUE = 1 << 23; + const STATE_SYMBOL = /* @__PURE__ */ Symbol("$state"); + const LEGACY_PROPS = /* @__PURE__ */ Symbol("legacy props"); + const LOADING_ATTR_SYMBOL = /* @__PURE__ */ Symbol(""); + const ATTRIBUTES_CACHE = /* @__PURE__ */ Symbol("attributes"); + const CLASS_CACHE = /* @__PURE__ */ Symbol("class"); + const STYLE_CACHE = /* @__PURE__ */ Symbol("style"); + const TEXT_CACHE = /* @__PURE__ */ Symbol("text"); + const FORM_RESET_HANDLER = /* @__PURE__ */ Symbol("form reset"); + const STALE_REACTION = new class StaleReactionError extends Error { + name = "StaleReactionError"; + message = "The reaction that called `getAbortSignal()` was re-run or destroyed"; + }(); + const IS_XHTML = ( + // We gotta write it like this because after downleveling the pure comment may end up in the wrong location + !!globalThis.document?.contentType && /* @__PURE__ */ globalThis.document.contentType.includes("xml") + ); + const TEXT_NODE = 3; + const COMMENT_NODE = 8; + function equals(value) { + return value === this.v; + } + function safe_not_equal(a, b) { + return a != a ? b == b : a !== b || a !== null && typeof a === "object" || typeof a === "function"; + } + function safe_equals(value) { + return !safe_not_equal(value, this.v); + } + function lifecycle_outside_component(name) { + { + throw new Error(`https://svelte.dev/e/lifecycle_outside_component`); + } + } + function async_derived_orphan() { + { + throw new Error(`https://svelte.dev/e/async_derived_orphan`); + } + } + function effect_in_teardown(rune) { + { + throw new Error(`https://svelte.dev/e/effect_in_teardown`); + } + } + function effect_in_unowned_derived() { + { + throw new Error(`https://svelte.dev/e/effect_in_unowned_derived`); + } + } + function effect_orphan(rune) { + { + throw new Error(`https://svelte.dev/e/effect_orphan`); + } + } + function effect_update_depth_exceeded() { + { + throw new Error(`https://svelte.dev/e/effect_update_depth_exceeded`); + } + } + function hydration_failed() { + { + throw new Error(`https://svelte.dev/e/hydration_failed`); + } + } + function state_descriptors_fixed() { + { + throw new Error(`https://svelte.dev/e/state_descriptors_fixed`); + } + } + function state_prototype_fixed() { + { + throw new Error(`https://svelte.dev/e/state_prototype_fixed`); + } + } + function state_unsafe_mutation() { + { + throw new Error(`https://svelte.dev/e/state_unsafe_mutation`); + } + } + function svelte_boundary_reset_onerror() { + { + throw new Error(`https://svelte.dev/e/svelte_boundary_reset_onerror`); + } + } + let tracing_mode_flag = false; + const TEMPLATE_FRAGMENT = 1; + const TEMPLATE_USE_IMPORT_NODE = 1 << 1; + const HYDRATION_START = "["; + const HYDRATION_START_ELSE = "[!"; + const HYDRATION_START_FAILED = "[?"; + const HYDRATION_END = "]"; + const HYDRATION_ERROR = {}; + const UNINITIALIZED = /* @__PURE__ */ Symbol("uninitialized"); + const NAMESPACE_HTML = "http://www.w3.org/1999/xhtml"; + const NAMESPACE_SVG = "http://www.w3.org/2000/svg"; + const NAMESPACE_MATHML = "http://www.w3.org/1998/Math/MathML"; + const ATTACHMENT_KEY = "@attach"; + let component_context = null; + function set_component_context(context) { + component_context = context; + } + function push(props, runes = false, fn) { + component_context = { + p: component_context, + i: false, + c: null, + e: null, + s: props, + x: null, + r: ( + /** @type {Effect} */ + active_effect + ), + l: null + }; + } + function pop(component2) { + var context = ( + /** @type {ComponentContext} */ + component_context + ); + var effects = context.e; + if (effects !== null) { + context.e = null; + for (var fn of effects) { + create_user_effect(fn); + } + } + if (component2 !== void 0) { + context.x = component2; + } + context.i = true; + component_context = context.p; + return component2 ?? /** @type {T} */ + {}; + } + function is_runes() { + return true; + } + let micro_tasks = []; + function run_micro_tasks() { + var tasks = micro_tasks; + micro_tasks = []; + run_all(tasks); + } + function queue_micro_task(fn) { + if (micro_tasks.length === 0 && !is_flushing_sync) { + var tasks = micro_tasks; + queueMicrotask(() => { + if (tasks === micro_tasks) run_micro_tasks(); + }); + } + micro_tasks.push(fn); + } + function flush_tasks() { + while (micro_tasks.length > 0) { + run_micro_tasks(); + } + } + function derived_inert() { + { + console.warn(`https://svelte.dev/e/derived_inert`); + } + } + function hydration_mismatch(location2) { + { + console.warn(`https://svelte.dev/e/hydration_mismatch`); + } + } + function select_multiple_invalid_value() { + { + console.warn(`https://svelte.dev/e/select_multiple_invalid_value`); + } + } + function svelte_boundary_reset_noop() { + { + console.warn(`https://svelte.dev/e/svelte_boundary_reset_noop`); + } + } + let hydrating = false; + function set_hydrating(value) { + hydrating = value; + } + let hydrate_node; + function set_hydrate_node(node) { + if (node === null) { + hydration_mismatch(); + throw HYDRATION_ERROR; + } + return hydrate_node = node; + } + function hydrate_next() { + return set_hydrate_node(/* @__PURE__ */ get_next_sibling(hydrate_node)); + } + function reset(node) { + if (!hydrating) return; + if (/* @__PURE__ */ get_next_sibling(hydrate_node) !== null) { + hydration_mismatch(); + throw HYDRATION_ERROR; + } + hydrate_node = node; + } + function next(count = 1) { + if (hydrating) { + var i = count; + var node = hydrate_node; + while (i--) { + node = /** @type {TemplateNode} */ + /* @__PURE__ */ get_next_sibling(node); + } + hydrate_node = node; + } + } + function skip_nodes(remove = true) { + var depth = 0; + var node = hydrate_node; + while (true) { + if (node.nodeType === COMMENT_NODE) { + var data = ( + /** @type {Comment} */ + node.data + ); + if (data === HYDRATION_END) { + if (depth === 0) return node; + depth -= 1; + } else if (data === HYDRATION_START || data === HYDRATION_START_ELSE || // "[1", "[2", etc. for if blocks + data[0] === "[" && !isNaN(Number(data.slice(1)))) { + depth += 1; + } + } + var next2 = ( + /** @type {TemplateNode} */ + /* @__PURE__ */ get_next_sibling(node) + ); + if (remove) node.remove(); + node = next2; + } + } + function read_hydration_instruction(node) { + if (!node || node.nodeType !== COMMENT_NODE) { + hydration_mismatch(); + throw HYDRATION_ERROR; + } + return ( + /** @type {Comment} */ + node.data + ); + } + function proxy(value) { + if (typeof value !== "object" || value === null || STATE_SYMBOL in value) { + return value; + } + const prototype = get_prototype_of(value); + if (prototype !== object_prototype && prototype !== array_prototype) { + return value; + } + var sources = /* @__PURE__ */ new Map(); + var is_proxied_array = is_array(value); + var version = /* @__PURE__ */ state(0); + var parent_version = update_version; + var with_parent = (fn) => { + if (update_version === parent_version) { + return fn(); + } + var reaction = active_reaction; + var version2 = update_version; + set_active_reaction(null); + set_update_version(parent_version); + var result = fn(); + set_active_reaction(reaction); + set_update_version(version2); + return result; + }; + if (is_proxied_array) { + sources.set("length", /* @__PURE__ */ state( + /** @type {any[]} */ + value.length + )); + } + return new Proxy( + /** @type {any} */ + value, + { + defineProperty(_, prop2, descriptor) { + if (!("value" in descriptor) || descriptor.configurable === false || descriptor.enumerable === false || descriptor.writable === false) { + state_descriptors_fixed(); + } + var s = sources.get(prop2); + if (s === void 0) { + with_parent(() => { + var s2 = /* @__PURE__ */ state(descriptor.value); + sources.set(prop2, s2); + return s2; + }); + } else { + set(s, descriptor.value, true); + } + return true; + }, + deleteProperty(target, prop2) { + var s = sources.get(prop2); + if (s === void 0) { + if (prop2 in target) { + const s2 = with_parent(() => /* @__PURE__ */ state(UNINITIALIZED)); + sources.set(prop2, s2); + increment(version); + } + } else { + set(s, UNINITIALIZED); + increment(version); + } + return true; + }, + get(target, prop2, receiver) { + if (prop2 === STATE_SYMBOL) { + return value; + } + var s = sources.get(prop2); + var exists = prop2 in target; + if (s === void 0 && (!exists || get_descriptor(target, prop2)?.writable)) { + s = with_parent(() => { + var p = proxy(exists ? target[prop2] : UNINITIALIZED); + var s2 = /* @__PURE__ */ state(p); + return s2; + }); + sources.set(prop2, s); + } + if (s !== void 0) { + var v = get(s); + return v === UNINITIALIZED ? void 0 : v; + } + return Reflect.get(target, prop2, receiver); + }, + getOwnPropertyDescriptor(target, prop2) { + var descriptor = Reflect.getOwnPropertyDescriptor(target, prop2); + if (descriptor && "value" in descriptor) { + var s = sources.get(prop2); + if (s) descriptor.value = get(s); + } else if (descriptor === void 0) { + var source2 = sources.get(prop2); + var value2 = source2?.v; + if (source2 !== void 0 && value2 !== UNINITIALIZED) { + return { + enumerable: true, + configurable: true, + value: value2, + writable: true + }; + } + } + return descriptor; + }, + has(target, prop2) { + if (prop2 === STATE_SYMBOL) { + return true; + } + var s = sources.get(prop2); + var has = s !== void 0 && s.v !== UNINITIALIZED || Reflect.has(target, prop2); + if (s !== void 0 || active_effect !== null && (!has || get_descriptor(target, prop2)?.writable)) { + if (s === void 0) { + s = with_parent(() => { + var p = has ? proxy(target[prop2]) : UNINITIALIZED; + var s2 = /* @__PURE__ */ state(p); + return s2; + }); + sources.set(prop2, s); + } + var value2 = get(s); + if (value2 === UNINITIALIZED) { + return false; + } + } + return has; + }, + set(target, prop2, value2, receiver) { + var s = sources.get(prop2); + var has = prop2 in target; + if (is_proxied_array && prop2 === "length") { + for (var i = value2; i < /** @type {Source} */ + s.v; i += 1) { + var other_s = sources.get(i + ""); + if (other_s !== void 0) { + set(other_s, UNINITIALIZED); + } else if (i in target) { + other_s = with_parent(() => /* @__PURE__ */ state(UNINITIALIZED)); + sources.set(i + "", other_s); + } + } + } + if (s === void 0) { + if (!has || get_descriptor(target, prop2)?.writable) { + s = with_parent(() => /* @__PURE__ */ state(void 0)); + set(s, proxy(value2)); + sources.set(prop2, s); + } + } else { + has = s.v !== UNINITIALIZED; + var p = with_parent(() => proxy(value2)); + set(s, p); + } + var descriptor = Reflect.getOwnPropertyDescriptor(target, prop2); + if (descriptor?.set) { + descriptor.set.call(receiver, value2); + } + if (!has) { + if (is_proxied_array && typeof prop2 === "string") { + var ls = ( + /** @type {Source} */ + sources.get("length") + ); + var n = Number(prop2); + if (Number.isInteger(n) && n >= ls.v) { + set(ls, n + 1); + } + } + increment(version); + } + return true; + }, + ownKeys(target) { + get(version); + var own_keys = Reflect.ownKeys(target).filter((key3) => { + var source3 = sources.get(key3); + return source3 === void 0 || source3.v !== UNINITIALIZED; + }); + for (var [key2, source2] of sources) { + if (source2.v !== UNINITIALIZED && !(key2 in target)) { + own_keys.push(key2); + } + } + return own_keys; + }, + setPrototypeOf() { + state_prototype_fixed(); + } + } + ); + } + function get_proxied_value(value) { + try { + if (value !== null && typeof value === "object" && STATE_SYMBOL in value) { + return value[STATE_SYMBOL]; + } + } catch { + } + return value; + } + function is(a, b) { + return Object.is(get_proxied_value(a), get_proxied_value(b)); + } + var $window; + var $document; + var is_firefox; + var first_child_getter; + var next_sibling_getter; + function init_operations() { + if ($window !== void 0) { + return; + } + $window = window; + $document = document; + is_firefox = /Firefox/.test(navigator.userAgent); + var element_prototype = Element.prototype; + var node_prototype = Node.prototype; + var text_prototype = Text.prototype; + first_child_getter = get_descriptor(node_prototype, "firstChild").get; + next_sibling_getter = get_descriptor(node_prototype, "nextSibling").get; + if (is_extensible(element_prototype)) { + element_prototype[CLASS_CACHE] = void 0; + element_prototype[ATTRIBUTES_CACHE] = null; + element_prototype[STYLE_CACHE] = void 0; + element_prototype.__e = void 0; + } + if (is_extensible(text_prototype)) { + text_prototype[TEXT_CACHE] = void 0; + } + } + function create_text(value = "") { + return document.createTextNode(value); + } + // @__NO_SIDE_EFFECTS__ + function get_first_child(node) { + return ( + /** @type {TemplateNode | null} */ + first_child_getter.call(node) + ); + } + // @__NO_SIDE_EFFECTS__ + function get_next_sibling(node) { + return ( + /** @type {TemplateNode | null} */ + next_sibling_getter.call(node) + ); + } + function child(node, is_text) { + if (!hydrating) { + return /* @__PURE__ */ get_first_child(node); + } + var child2 = /* @__PURE__ */ get_first_child(hydrate_node); + if (child2 === null) { + child2 = hydrate_node.appendChild(create_text()); + } else if (is_text && child2.nodeType !== TEXT_NODE) { + var text2 = create_text(); + child2?.before(text2); + set_hydrate_node(text2); + return text2; + } + if (is_text) { + merge_text_nodes( + /** @type {Text} */ + child2 + ); + } + set_hydrate_node(child2); + return child2; + } + function first_child(node, is_text = false) { + if (!hydrating) { + var first = /* @__PURE__ */ get_first_child(node); + if (first instanceof Comment && first.data === "") return /* @__PURE__ */ get_next_sibling(first); + return first; + } + if (is_text) { + if (hydrate_node?.nodeType !== TEXT_NODE) { + var text2 = create_text(); + hydrate_node?.before(text2); + set_hydrate_node(text2); + return text2; + } + merge_text_nodes( + /** @type {Text} */ + hydrate_node + ); + } + return hydrate_node; + } + function sibling(node, count = 1, is_text = false) { + let next_sibling = hydrating ? hydrate_node : node; + var last_sibling; + while (count--) { + last_sibling = next_sibling; + next_sibling = /** @type {TemplateNode} */ + /* @__PURE__ */ get_next_sibling(next_sibling); + } + if (!hydrating) { + return next_sibling; + } + if (is_text) { + if (next_sibling?.nodeType !== TEXT_NODE) { + var text2 = create_text(); + if (next_sibling === null) { + last_sibling?.after(text2); + } else { + next_sibling.before(text2); + } + set_hydrate_node(text2); + return text2; + } + merge_text_nodes( + /** @type {Text} */ + next_sibling + ); + } + set_hydrate_node(next_sibling); + return next_sibling; + } + function clear_text_content(node) { + node.textContent = ""; + } + function should_defer_append() { + return false; + } + function create_element(tag, namespace, is2) { + let options = void 0; + return ( + /** @type {T extends keyof HTMLElementTagNameMap ? HTMLElementTagNameMap[T] : Element} */ + document.createElementNS(namespace ?? NAMESPACE_HTML, tag, options) + ); + } + function merge_text_nodes(text2) { + if ( + /** @type {string} */ + text2.nodeValue.length < 65536 + ) { + return; + } + let next2 = text2.nextSibling; + while (next2 !== null && next2.nodeType === TEXT_NODE) { + next2.remove(); + text2.nodeValue += /** @type {string} */ + next2.nodeValue; + next2 = text2.nextSibling; + } + } + function handle_error(error) { + var effect2 = active_effect; + if (effect2 === null) { + active_reaction.f |= ERROR_VALUE; + return error; + } + if ((effect2.f & REACTION_RAN) === 0 && (effect2.f & EFFECT) === 0) { + throw error; + } + invoke_error_boundary(error, effect2); + } + function invoke_error_boundary(error, effect2) { + while (effect2 !== null) { + if ((effect2.f & BOUNDARY_EFFECT) !== 0) { + if ((effect2.f & REACTION_RAN) === 0) { + throw error; + } + try { + effect2.b.error(error); + return; + } catch (e) { + error = e; + } + } + effect2 = effect2.parent; + } + throw error; + } + const STATUS_MASK = -7169; + function set_signal_status(signal, status) { + signal.f = signal.f & STATUS_MASK | status; + } + function update_derived_status(derived2) { + if ((derived2.f & CONNECTED) !== 0 || derived2.deps === null) { + set_signal_status(derived2, CLEAN); + } else { + set_signal_status(derived2, MAYBE_DIRTY); + } + } + function clear_marked(deps) { + if (deps === null) return; + for (const dep of deps) { + if ((dep.f & DERIVED) === 0 || (dep.f & WAS_MARKED) === 0) { + continue; + } + dep.f ^= WAS_MARKED; + clear_marked( + /** @type {Derived} */ + dep.deps + ); + } + } + function defer_effect(effect2, dirty_effects, maybe_dirty_effects) { + if ((effect2.f & DIRTY) !== 0) { + dirty_effects.add(effect2); + } else if ((effect2.f & MAYBE_DIRTY) !== 0) { + maybe_dirty_effects.add(effect2); + } + clear_marked(effect2.deps); + set_signal_status(effect2, CLEAN); + } + function subscribe_to_store(store2, run, invalidate) { + if (store2 == null) { + run(void 0); + return noop; + } + const unsub = untrack( + () => store2.subscribe( + run, + // @ts-expect-error + invalidate + ) + ); + return unsub.unsubscribe ? () => unsub.unsubscribe() : unsub; + } + const subscriber_queue = []; + function writable(value, start = noop) { + let stop = null; + const subscribers = /* @__PURE__ */ new Set(); + function set2(new_value) { + if (safe_not_equal(value, new_value)) { + value = new_value; + if (stop) { + const run_queue = !subscriber_queue.length; + for (const subscriber of subscribers) { + subscriber[1](); + subscriber_queue.push(subscriber, value); + } + if (run_queue) { + for (let i = 0; i < subscriber_queue.length; i += 2) { + subscriber_queue[i][0](subscriber_queue[i + 1]); + } + subscriber_queue.length = 0; + } + } + } + } + function update(fn) { + set2(fn( + /** @type {T} */ + value + )); + } + function subscribe(run, invalidate = noop) { + const subscriber = [run, invalidate]; + subscribers.add(subscriber); + if (subscribers.size === 1) { + stop = start(set2, update) || noop; + } + run( + /** @type {T} */ + value + ); + return () => { + subscribers.delete(subscriber); + if (subscribers.size === 0 && stop) { + stop(); + stop = null; + } + }; + } + return { set: set2, update, subscribe }; + } + function get$1(store2) { + let value; + subscribe_to_store(store2, (_) => value = _)(); + return value; + } + let IS_UNMOUNTED = /* @__PURE__ */ Symbol("unmounted"); + function store_get(store2, store_name, stores) { + const entry = stores[store_name] ??= { + store: null, + source: /* @__PURE__ */ mutable_source(void 0), + unsubscribe: noop + }; + if (entry.store !== store2 && !(IS_UNMOUNTED in stores)) { + entry.unsubscribe(); + entry.store = store2 ?? null; + if (store2 == null) { + entry.source.v = void 0; + entry.unsubscribe = noop; + } else { + var is_synchronous_callback = true; + entry.unsubscribe = subscribe_to_store(store2, (v) => { + if (is_synchronous_callback) { + entry.source.v = v; + } else { + set(entry.source, v); + } + }); + is_synchronous_callback = false; + } + } + if (store2 && IS_UNMOUNTED in stores) { + return get$1(store2); + } + return get(entry.source); + } + function setup_stores() { + const stores = {}; + function cleanup() { + teardown(() => { + for (var store_name in stores) { + const ref = stores[store_name]; + ref.unsubscribe(); + } + define_property(stores, IS_UNMOUNTED, { + enumerable: false, + value: true + }); + }); + } + return [stores, cleanup]; + } + let first_batch = null; + let last_batch = null; + let current_batch = null; + let previous_batch = null; + let batch_values = null; + let last_scheduled_effect = null; + let is_flushing_sync = false; + let is_processing = false; + let collected_effects = null; + let legacy_updates = null; + var flush_count = 0; + var source_stacks = /* @__PURE__ */ new Set(); + let uid = 1; + class Batch { + id = uid++; + /** True as soon as `#process` was called */ + #started = false; + linked = true; + /** @type {Batch | null} */ + #prev = null; + /** @type {Batch | null} */ + #next = null; + /** @type {Map>>} */ + async_deriveds = /* @__PURE__ */ new Map(); + /** + * The current values of any signals that are updated in this batch. + * Tuple format: [value, is_derived] (note: is_derived is false for deriveds, too, if they were overridden via assignment) + * They keys of this map are identical to `this.#previous` + * @type {Map} + */ + current = /* @__PURE__ */ new Map(); + /** + * The values of any signals (sources and deriveds) that are updated in this batch _before_ those updates took place. + * They keys of this map are identical to `this.#current` + * @type {Map} + */ + previous = /* @__PURE__ */ new Map(); + /** + * Async effects which this batch doesn't take into account anymore when calculating blockers, + * as it has a value for it already. + * @type {Set} + */ + unblocked = /* @__PURE__ */ new Set(); + /** + * When the batch is committed (and the DOM is updated), we need to remove old branches + * and append new ones by calling the functions added inside (if/each/key/etc) blocks + * @type {Set<(batch: Batch) => void>} + */ + #commit_callbacks = /* @__PURE__ */ new Set(); + /** + * If a fork is discarded, we need to destroy any effects that are no longer needed + * @type {Set<(batch: Batch) => void>} + */ + #discard_callbacks = /* @__PURE__ */ new Set(); + /** + * Callbacks that should run only when a fork is committed. + * @type {Set<(batch: Batch) => void>} + */ + #fork_commit_callbacks = /* @__PURE__ */ new Set(); + /** + * The number of async effects that are currently in flight + */ + #pending = 0; + /** + * Async effects that are currently in flight, _not_ inside a pending boundary + * @type {Map} + */ + #blocking_pending = /* @__PURE__ */ new Map(); + /** + * A deferred that resolves when the batch is committed, used with `settled()` + * TODO replace with Promise.withResolvers once supported widely enough + * @type {{ promise: Promise, resolve: (value?: any) => void, reject: (reason: unknown) => void } | null} + */ + #deferred = null; + /** + * The root effects that need to be flushed + * @type {Effect[]} + */ + #roots = []; + /** + * Effects created while this batch was active. + * @type {Effect[]} + */ + #new_effects = []; + /** + * Deferred effects (which run after async work has completed) that are DIRTY + * @type {Set} + */ + #dirty_effects = /* @__PURE__ */ new Set(); + /** + * Deferred effects that are MAYBE_DIRTY + * @type {Set} + */ + #maybe_dirty_effects = /* @__PURE__ */ new Set(); + /** + * A map of branches that still exist, but will be destroyed when this batch + * is committed — we skip over these during `process`. + * The value contains child effects that were dirty/maybe_dirty before being reset, + * so they can be rescheduled if the branch survives. + * @type {Map} + */ + #skipped_branches = /* @__PURE__ */ new Map(); + /** + * Inverse of #skipped_branches which we need to tell prior batches to unskip them when committing + * @type {Set} + */ + #unskipped_branches = /* @__PURE__ */ new Set(); + is_fork = false; + #decrement_queued = false; + #is_deferred() { + if (this.is_fork) return true; + for (const effect2 of this.#blocking_pending.keys()) { + var e = effect2; + var skipped = false; + while (e.parent !== null) { + if (this.#skipped_branches.has(e)) { + skipped = true; + break; + } + e = e.parent; + } + if (!skipped) { + return true; + } + } + return false; + } + /** + * Add an effect to the #skipped_branches map and reset its children + * @param {Effect} effect + */ + skip_effect(effect2) { + if (!this.#skipped_branches.has(effect2)) { + this.#skipped_branches.set(effect2, { d: [], m: [] }); + } + this.#unskipped_branches.delete(effect2); + } + /** + * Remove an effect from the #skipped_branches map and reschedule + * any tracked dirty/maybe_dirty child effects + * @param {Effect} effect + * @param {(e: Effect) => void} callback + */ + unskip_effect(effect2, callback = (e) => this.schedule(e)) { + var tracked = this.#skipped_branches.get(effect2); + if (tracked) { + this.#skipped_branches.delete(effect2); + for (var e of tracked.d) { + set_signal_status(e, DIRTY); + callback(e); + } + for (e of tracked.m) { + set_signal_status(e, MAYBE_DIRTY); + callback(e); + } + } + this.#unskipped_branches.add(effect2); + } + #process() { + this.#started = true; + if (flush_count++ > 1e3) { + this.#unlink(); + infinite_loop_guard(); + } + if (!this.#is_deferred()) { + for (const e of this.#dirty_effects) { + this.#maybe_dirty_effects.delete(e); + set_signal_status(e, DIRTY); + this.schedule(e); + } + for (const e of this.#maybe_dirty_effects) { + set_signal_status(e, MAYBE_DIRTY); + this.schedule(e); + } + } + const roots = this.#roots; + this.#roots = []; + this.apply(); + var effects = collected_effects = []; + var render_effects = []; + var updates = legacy_updates = []; + for (const root2 of roots) { + try { + this.#traverse(root2, effects, render_effects); + } catch (e) { + reset_all(root2); + throw e; + } + } + current_batch = null; + if (updates.length > 0) { + var batch = Batch.ensure(); + for (const e of updates) { + batch.schedule(e); + } + } + collected_effects = null; + legacy_updates = null; + if (this.#is_deferred()) { + this.#defer_effects(render_effects); + this.#defer_effects(effects); + for (const [e, t] of this.#skipped_branches) { + reset_branch(e, t); + } + if (updates.length > 0) { + /** @type {unknown} */ + current_batch.#process(); + } + return; + } + const earlier_batch = this.#find_earlier_batch(); + if (earlier_batch) { + earlier_batch.#merge(this); + return; + } + this.#dirty_effects.clear(); + this.#maybe_dirty_effects.clear(); + for (const fn of this.#commit_callbacks) fn(this); + this.#commit_callbacks.clear(); + previous_batch = this; + flush_queued_effects(render_effects); + flush_queued_effects(effects); + previous_batch = null; + this.#deferred?.resolve(); + var next_batch = ( + /** @type {Batch | null} */ + /** @type {unknown} */ + current_batch + ); + if (this.linked && this.#pending === 0) { + this.#unlink(); + } + if (this.#roots.length > 0) { + if (next_batch === null) { + next_batch = this; + this.#link(); + } + const batch2 = next_batch; + batch2.#roots.push(...this.#roots.filter((r2) => !batch2.#roots.includes(r2))); + } + if (next_batch !== null) { + next_batch.#process(); + } + } + /** + * Traverse the effect tree, executing effects or stashing + * them for later execution as appropriate + * @param {Effect} root + * @param {Effect[]} effects + * @param {Effect[]} render_effects + */ + #traverse(root2, effects, render_effects) { + root2.f ^= CLEAN; + var effect2 = root2.first; + while (effect2 !== null) { + var flags2 = effect2.f; + var is_branch = (flags2 & (BRANCH_EFFECT | ROOT_EFFECT)) !== 0; + var is_skippable_branch = is_branch && (flags2 & CLEAN) !== 0; + var skip = is_skippable_branch || (flags2 & INERT) !== 0 || this.#skipped_branches.has(effect2); + if (!skip && effect2.fn !== null) { + if (is_branch) { + effect2.f ^= CLEAN; + } else if ((flags2 & EFFECT) !== 0) { + effects.push(effect2); + } else if (is_dirty(effect2)) { + if ((flags2 & BLOCK_EFFECT) !== 0) this.#maybe_dirty_effects.add(effect2); + update_effect(effect2); + } + var child2 = effect2.first; + if (child2 !== null) { + effect2 = child2; + continue; + } + } + while (effect2 !== null) { + var next2 = effect2.next; + if (next2 !== null) { + effect2 = next2; + break; + } + effect2 = effect2.parent; + } + } + } + #find_earlier_batch() { + var batch = this.#prev; + while (batch !== null) { + if (!batch.is_fork) { + for (const [value, [, is_derived]] of this.current) { + if (batch.current.has(value) && !is_derived) { + return batch; + } + } + } + batch = batch.#prev; + } + return null; + } + /** + * @param {Batch} batch + */ + #merge(batch) { + for (const [source2, value] of batch.current) { + if (!this.previous.has(source2) && batch.previous.has(source2)) { + this.previous.set(source2, batch.previous.get(source2)); + } + this.current.set(source2, value); + } + for (const [effect2, deferred2] of batch.async_deriveds) { + const d = this.async_deriveds.get(effect2); + if (d) deferred2.promise.then(d.resolve); + } + const mark = (value) => { + var reactions = value.reactions; + if (reactions === null) return; + for (const reaction of reactions) { + var flags2 = reaction.f; + if ((flags2 & DERIVED) !== 0) { + mark( + /** @type {Derived} */ + reaction + ); + } else { + var effect2 = ( + /** @type {Effect} */ + reaction + ); + if (flags2 & (ASYNC | BLOCK_EFFECT) && !this.async_deriveds.has(effect2)) { + this.#maybe_dirty_effects.delete(effect2); + set_signal_status(effect2, DIRTY); + this.schedule(effect2); + } + } + } + }; + for (const source2 of this.current.keys()) { + mark(source2); + } + this.oncommit(() => batch.discard()); + batch.#unlink(); + current_batch = this; + this.#process(); + } + /** + * @param {Effect[]} effects + */ + #defer_effects(effects) { + for (var i = 0; i < effects.length; i += 1) { + defer_effect(effects[i], this.#dirty_effects, this.#maybe_dirty_effects); + } + } + /** + * Associate a change to a given source with the current + * batch, noting its previous and current values + * @param {Value} source + * @param {any} value + * @param {boolean} [is_derived] + */ + capture(source2, value, is_derived = false) { + if (source2.v !== UNINITIALIZED && !this.previous.has(source2)) { + this.previous.set(source2, source2.v); + } + if ((source2.f & ERROR_VALUE) === 0) { + this.current.set(source2, [value, is_derived]); + batch_values?.set(source2, value); + } + if (!this.is_fork) { + source2.v = value; + } + } + activate() { + current_batch = this; + } + deactivate() { + current_batch = null; + batch_values = null; + } + flush() { + try { + if (DEV) ; + is_processing = true; + current_batch = this; + this.#process(); + } finally { + flush_count = 0; + last_scheduled_effect = null; + collected_effects = null; + legacy_updates = null; + is_processing = false; + current_batch = null; + batch_values = null; + old_values.clear(); + } + } + discard() { + for (const fn of this.#discard_callbacks) fn(this); + this.#discard_callbacks.clear(); + this.#fork_commit_callbacks.clear(); + this.#unlink(); + } + /** + * @param {Effect} effect + */ + register_created_effect(effect2) { + this.#new_effects.push(effect2); + } + #commit() { + this.#unlink(); + for (let batch = first_batch; batch !== null; batch = batch.#next) { + var is_earlier = batch.id < this.id; + var sources = []; + for (const [source3, [value, is_derived]] of this.current) { + if (batch.current.has(source3)) { + var batch_value = ( + /** @type {[any, boolean]} */ + batch.current.get(source3)[0] + ); + if (is_earlier && value !== batch_value) { + batch.current.set(source3, [value, is_derived]); + } else { + continue; + } + } + sources.push(source3); + } + if (is_earlier) { + for (const [effect2, deferred2] of this.async_deriveds) { + const d = batch.async_deriveds.get(effect2); + if (d) deferred2.promise.then(d.resolve); + } + } + if (!batch.#started) continue; + var others = [...batch.current.keys()].filter((s) => !this.current.has(s)); + if (others.length === 0) { + if (is_earlier) { + batch.discard(); + } + } else if (sources.length > 0) { + if (is_earlier) { + for (const unskipped of this.#unskipped_branches) { + batch.unskip_effect(unskipped, (e) => { + if ((e.f & (BLOCK_EFFECT | ASYNC)) !== 0) { + batch.schedule(e); + } else { + batch.#defer_effects([e]); + } + }); + } + } + batch.activate(); + var marked = /* @__PURE__ */ new Set(); + var checked = /* @__PURE__ */ new Map(); + for (var source2 of sources) { + mark_effects(source2, others, marked, checked); + } + checked = /* @__PURE__ */ new Map(); + var current_unequal = [...batch.current.keys()].filter( + (c) => this.current.has(c) ? ( + /** @type {[any, boolean]} */ + this.current.get(c)[0] !== c.v + ) : true + ); + if (current_unequal.length > 0) { + for (const effect2 of this.#new_effects) { + if ((effect2.f & (DESTROYED | INERT | EAGER_EFFECT)) === 0 && depends_on(effect2, current_unequal, checked)) { + if ((effect2.f & (ASYNC | BLOCK_EFFECT)) !== 0) { + set_signal_status(effect2, DIRTY); + batch.schedule(effect2); + } else { + batch.#dirty_effects.add(effect2); + } + } + } + } + if (batch.#roots.length > 0) { + batch.apply(); + for (var root2 of batch.#roots) { + batch.#traverse(root2, [], []); + } + batch.#roots = []; + } + batch.deactivate(); + } + } + } + /** + * @param {boolean} blocking + * @param {Effect} effect + */ + increment(blocking, effect2) { + this.#pending += 1; + if (blocking) { + let blocking_pending_count = this.#blocking_pending.get(effect2) ?? 0; + this.#blocking_pending.set(effect2, blocking_pending_count + 1); + } + } + /** + * @param {boolean} blocking + * @param {Effect} effect + */ + decrement(blocking, effect2) { + this.#pending -= 1; + if (blocking) { + let blocking_pending_count = this.#blocking_pending.get(effect2) ?? 0; + if (blocking_pending_count === 1) { + this.#blocking_pending.delete(effect2); + } else { + this.#blocking_pending.set(effect2, blocking_pending_count - 1); + } + } + if (this.#decrement_queued) return; + this.#decrement_queued = true; + queue_micro_task(() => { + this.#decrement_queued = false; + if (this.linked) { + this.flush(); + } + }); + } + /** + * @param {Set} dirty_effects + * @param {Set} maybe_dirty_effects + */ + transfer_effects(dirty_effects, maybe_dirty_effects) { + for (const e of dirty_effects) { + this.#dirty_effects.add(e); + } + for (const e of maybe_dirty_effects) { + this.#maybe_dirty_effects.add(e); + } + dirty_effects.clear(); + maybe_dirty_effects.clear(); + } + /** @param {(batch: Batch) => void} fn */ + oncommit(fn) { + this.#commit_callbacks.add(fn); + } + /** @param {(batch: Batch) => void} fn */ + ondiscard(fn) { + this.#discard_callbacks.add(fn); + } + /** @param {(batch: Batch) => void} fn */ + on_fork_commit(fn) { + this.#fork_commit_callbacks.add(fn); + } + run_fork_commit_callbacks() { + for (const fn of this.#fork_commit_callbacks) fn(this); + this.#fork_commit_callbacks.clear(); + } + settled() { + return (this.#deferred ??= deferred()).promise; + } + static ensure() { + if (current_batch === null) { + const batch = current_batch = new Batch(); + batch.#link(); + if (!is_processing && !is_flushing_sync) { + queue_micro_task(() => { + if (!batch.#started) { + batch.flush(); + } + }); + } + } + return current_batch; + } + apply() { + { + batch_values = null; + return; + } + } + /** + * + * @param {Effect} effect + */ + schedule(effect2) { + last_scheduled_effect = effect2; + if (effect2.b?.is_pending && (effect2.f & (EFFECT | RENDER_EFFECT | MANAGED_EFFECT)) !== 0 && (effect2.f & REACTION_RAN) === 0) { + effect2.b.defer_effect(effect2); + return; + } + var e = effect2; + while (e.parent !== null) { + e = e.parent; + var flags2 = e.f; + if (collected_effects !== null && e === active_effect) { + if ((active_reaction === null || (active_reaction.f & DERIVED) === 0) && true) { + return; + } + } + if ((flags2 & (ROOT_EFFECT | BRANCH_EFFECT)) !== 0) { + if ((flags2 & CLEAN) === 0) { + return; + } + e.f ^= CLEAN; + } + } + this.#roots.push(e); + } + #link() { + if (last_batch === null) { + first_batch = last_batch = this; + } else { + last_batch.#next = this; + this.#prev = last_batch; + } + last_batch = this; + } + #unlink() { + var prev = this.#prev; + var next2 = this.#next; + if (prev === null) { + first_batch = next2; + } else { + prev.#next = next2; + } + if (next2 === null) { + last_batch = prev; + } else { + next2.#prev = prev; + } + this.linked = false; + } + } + function flushSync(fn) { + var was_flushing_sync = is_flushing_sync; + is_flushing_sync = true; + try { + var result; + if (fn) ; + while (true) { + flush_tasks(); + if (current_batch === null) { + return ( + /** @type {T} */ + result + ); + } + current_batch.flush(); + } + } finally { + is_flushing_sync = was_flushing_sync; + } + } + function infinite_loop_guard() { + try { + effect_update_depth_exceeded(); + } catch (error) { + invoke_error_boundary(error, last_scheduled_effect); + } + } + let eager_block_effects = null; + function flush_queued_effects(effects) { + var length = effects.length; + if (length === 0) return; + var i = 0; + while (i < length) { + var effect2 = effects[i++]; + if ((effect2.f & (DESTROYED | INERT)) === 0 && is_dirty(effect2)) { + eager_block_effects = /* @__PURE__ */ new Set(); + update_effect(effect2); + if (effect2.deps === null && effect2.first === null && effect2.nodes === null && effect2.teardown === null && effect2.ac === null) { + unlink_effect(effect2); + } + if (eager_block_effects?.size > 0) { + old_values.clear(); + for (const e of eager_block_effects) { + if ((e.f & (DESTROYED | INERT)) !== 0) continue; + const ordered_effects = [e]; + let ancestor = e.parent; + while (ancestor !== null) { + if (eager_block_effects.has(ancestor)) { + eager_block_effects.delete(ancestor); + ordered_effects.push(ancestor); + } + ancestor = ancestor.parent; + } + for (let j = ordered_effects.length - 1; j >= 0; j--) { + const e2 = ordered_effects[j]; + if ((e2.f & (DESTROYED | INERT)) !== 0) continue; + update_effect(e2); + } + } + eager_block_effects.clear(); + } + } + } + eager_block_effects = null; + } + function mark_effects(value, sources, marked, checked) { + if (marked.has(value)) return; + marked.add(value); + if (value.reactions !== null) { + for (const reaction of value.reactions) { + const flags2 = reaction.f; + if ((flags2 & DERIVED) !== 0) { + mark_effects( + /** @type {Derived} */ + reaction, + sources, + marked, + checked + ); + } else if ((flags2 & (ASYNC | BLOCK_EFFECT)) !== 0 && (flags2 & DIRTY) === 0 && depends_on(reaction, sources, checked)) { + set_signal_status(reaction, DIRTY); + schedule_effect( + /** @type {Effect} */ + reaction + ); + } + } + } + } + function depends_on(reaction, sources, checked) { + const depends = checked.get(reaction); + if (depends !== void 0) return depends; + if (reaction.deps !== null) { + for (const dep of reaction.deps) { + if (includes.call(sources, dep)) { + return true; + } + if ((dep.f & DERIVED) !== 0 && depends_on( + /** @type {Derived} */ + dep, + sources, + checked + )) { + checked.set( + /** @type {Derived} */ + dep, + true + ); + return true; + } + } + } + checked.set(reaction, false); + return false; + } + function schedule_effect(effect2) { + current_batch.schedule(effect2); + } + function reset_branch(effect2, tracked) { + if ((effect2.f & BRANCH_EFFECT) !== 0 && (effect2.f & CLEAN) !== 0) { + return; + } + if ((effect2.f & DIRTY) !== 0) { + tracked.d.push(effect2); + } else if ((effect2.f & MAYBE_DIRTY) !== 0) { + tracked.m.push(effect2); + } + set_signal_status(effect2, CLEAN); + var e = effect2.first; + while (e !== null) { + reset_branch(e, tracked); + e = e.next; + } + } + function reset_all(effect2) { + set_signal_status(effect2, CLEAN); + var e = effect2.first; + while (e !== null) { + reset_all(e); + e = e.next; + } + } + function createSubscriber(start) { + let subscribers = 0; + let version = source(0); + let stop; + return () => { + if (effect_tracking()) { + get(version); + render_effect(() => { + if (subscribers === 0) { + stop = untrack(() => start(() => increment(version))); + } + subscribers += 1; + return () => { + queue_micro_task(() => { + subscribers -= 1; + if (subscribers === 0) { + stop?.(); + stop = void 0; + increment(version); + } + }); + }; + }); + } + }; + } + var flags = EFFECT_TRANSPARENT | EFFECT_PRESERVED; + function boundary(node, props, children, transform_error) { + new Boundary(node, props, children, transform_error); + } + class Boundary { + /** @type {Boundary | null} */ + parent; + is_pending = false; + /** + * API-level transformError transform function. Transforms errors before they reach the `failed` snippet. + * Inherited from parent boundary, or defaults to identity. + * @type {(error: unknown) => unknown} + */ + transform_error; + /** @type {TemplateNode} */ + #anchor; + /** @type {TemplateNode | null} */ + #hydrate_open = hydrating ? hydrate_node : null; + /** @type {BoundaryProps} */ + #props; + /** @type {((anchor: Node) => void)} */ + #children; + /** @type {Effect} */ + #effect; + /** @type {Effect | null} */ + #main_effect = null; + /** @type {Effect | null} */ + #pending_effect = null; + /** @type {Effect | null} */ + #failed_effect = null; + /** @type {DocumentFragment | null} */ + #offscreen_fragment = null; + #local_pending_count = 0; + #pending_count = 0; + #pending_count_update_queued = false; + /** @type {Set} */ + #dirty_effects = /* @__PURE__ */ new Set(); + /** @type {Set} */ + #maybe_dirty_effects = /* @__PURE__ */ new Set(); + /** + * A source containing the number of pending async deriveds/expressions. + * Only created if `$effect.pending()` is used inside the boundary, + * otherwise updating the source results in needless `Batch.ensure()` + * calls followed by no-op flushes + * @type {Source | null} + */ + #effect_pending = null; + #effect_pending_subscriber = createSubscriber(() => { + this.#effect_pending = source(this.#local_pending_count); + return () => { + this.#effect_pending = null; + }; + }); + /** + * @param {TemplateNode} node + * @param {BoundaryProps} props + * @param {((anchor: Node) => void)} children + * @param {((error: unknown) => unknown) | undefined} [transform_error] + */ + constructor(node, props, children, transform_error) { + this.#anchor = node; + this.#props = props; + this.#children = (anchor) => { + var effect2 = ( + /** @type {Effect} */ + active_effect + ); + effect2.b = this; + effect2.f |= BOUNDARY_EFFECT; + children(anchor); + }; + this.parent = /** @type {Effect} */ + active_effect.b; + this.transform_error = transform_error ?? this.parent?.transform_error ?? ((e) => e); + this.#effect = block(() => { + if (hydrating) { + const comment2 = ( + /** @type {Comment} */ + this.#hydrate_open + ); + hydrate_next(); + const server_rendered_pending = comment2.data === HYDRATION_START_ELSE; + const server_rendered_failed = comment2.data.startsWith(HYDRATION_START_FAILED); + if (server_rendered_failed) { + const serialized_error = JSON.parse(comment2.data.slice(HYDRATION_START_FAILED.length)); + this.#hydrate_failed_content(serialized_error); + } else if (server_rendered_pending) { + this.#hydrate_pending_content(); + } else { + this.#hydrate_resolved_content(); + } + } else { + this.#render(); + } + }, flags); + if (hydrating) { + this.#anchor = hydrate_node; + } + } + #hydrate_resolved_content() { + try { + this.#main_effect = branch(() => this.#children(this.#anchor)); + } catch (error) { + this.error(error); + } + } + /** + * @param {unknown} error The deserialized error from the server's hydration comment + */ + #hydrate_failed_content(error) { + const failed = this.#props.failed; + if (!failed) return; + this.#failed_effect = branch(() => { + failed( + this.#anchor, + () => error, + () => () => { + } + ); + }); + } + #hydrate_pending_content() { + const pending = this.#props.pending; + if (!pending) return; + this.is_pending = true; + this.#pending_effect = branch(() => pending(this.#anchor)); + queue_micro_task(() => { + var fragment = this.#offscreen_fragment = document.createDocumentFragment(); + var anchor = create_text(); + fragment.append(anchor); + this.#main_effect = this.#run(() => { + return branch(() => this.#children(anchor)); + }); + if (this.#pending_count === 0) { + this.#anchor.before(fragment); + this.#offscreen_fragment = null; + pause_effect( + /** @type {Effect} */ + this.#pending_effect, + () => { + this.#pending_effect = null; + } + ); + this.#resolve( + /** @type {Batch} */ + current_batch + ); + } + }); + } + #render() { + try { + this.is_pending = this.has_pending_snippet(); + this.#pending_count = 0; + this.#local_pending_count = 0; + this.#main_effect = branch(() => { + this.#children(this.#anchor); + }); + if (this.#pending_count > 0) { + var fragment = this.#offscreen_fragment = document.createDocumentFragment(); + move_effect(this.#main_effect, fragment); + const pending = ( + /** @type {(anchor: Node) => void} */ + this.#props.pending + ); + this.#pending_effect = branch(() => pending(this.#anchor)); + } else { + this.#resolve( + /** @type {Batch} */ + current_batch + ); + } + } catch (error) { + this.error(error); + } + } + /** + * @param {Batch} batch + */ + #resolve(batch) { + this.is_pending = false; + batch.transfer_effects(this.#dirty_effects, this.#maybe_dirty_effects); + } + /** + * Defer an effect inside a pending boundary until the boundary resolves + * @param {Effect} effect + */ + defer_effect(effect2) { + defer_effect(effect2, this.#dirty_effects, this.#maybe_dirty_effects); + } + /** + * Returns `false` if the effect exists inside a boundary whose pending snippet is shown + * @returns {boolean} + */ + is_rendered() { + return !this.is_pending && (!this.parent || this.parent.is_rendered()); + } + has_pending_snippet() { + return !!this.#props.pending; + } + /** + * @template T + * @param {() => T} fn + */ + #run(fn) { + var previous_effect = active_effect; + var previous_reaction = active_reaction; + var previous_ctx = component_context; + set_active_effect(this.#effect); + set_active_reaction(this.#effect); + set_component_context(this.#effect.ctx); + try { + Batch.ensure(); + return fn(); + } catch (e) { + handle_error(e); + return null; + } finally { + set_active_effect(previous_effect); + set_active_reaction(previous_reaction); + set_component_context(previous_ctx); + } + } + /** + * Updates the pending count associated with the currently visible pending snippet, + * if any, such that we can replace the snippet with content once work is done + * @param {1 | -1} d + * @param {Batch} batch + */ + #update_pending_count(d, batch) { + if (!this.has_pending_snippet()) { + if (this.parent) { + this.parent.#update_pending_count(d, batch); + } + return; + } + this.#pending_count += d; + if (this.#pending_count === 0) { + this.#resolve(batch); + if (this.#pending_effect) { + pause_effect(this.#pending_effect, () => { + this.#pending_effect = null; + }); + } + if (this.#offscreen_fragment) { + this.#anchor.before(this.#offscreen_fragment); + this.#offscreen_fragment = null; + } + } + } + /** + * Update the source that powers `$effect.pending()` inside this boundary, + * and controls when the current `pending` snippet (if any) is removed. + * Do not call from inside the class + * @param {1 | -1} d + * @param {Batch} batch + */ + update_pending_count(d, batch) { + this.#update_pending_count(d, batch); + this.#local_pending_count += d; + if (!this.#effect_pending || this.#pending_count_update_queued) return; + this.#pending_count_update_queued = true; + queue_micro_task(() => { + this.#pending_count_update_queued = false; + if (this.#effect_pending) { + internal_set(this.#effect_pending, this.#local_pending_count); + } + }); + } + get_effect_pending() { + this.#effect_pending_subscriber(); + return get( + /** @type {Source} */ + this.#effect_pending + ); + } + /** @param {unknown} error */ + error(error) { + if (!this.#props.onerror && !this.#props.failed) { + throw error; + } + if (current_batch?.is_fork) { + if (this.#main_effect) current_batch.skip_effect(this.#main_effect); + if (this.#pending_effect) current_batch.skip_effect(this.#pending_effect); + if (this.#failed_effect) current_batch.skip_effect(this.#failed_effect); + current_batch.on_fork_commit(() => { + this.#handle_error(error); + }); + } else { + this.#handle_error(error); + } + } + /** + * @param {unknown} error + */ + #handle_error(error) { + if (this.#main_effect) { + destroy_effect(this.#main_effect); + this.#main_effect = null; + } + if (this.#pending_effect) { + destroy_effect(this.#pending_effect); + this.#pending_effect = null; + } + if (this.#failed_effect) { + destroy_effect(this.#failed_effect); + this.#failed_effect = null; + } + if (hydrating) { + set_hydrate_node( + /** @type {TemplateNode} */ + this.#hydrate_open + ); + next(); + set_hydrate_node(skip_nodes()); + } + var onerror = this.#props.onerror; + let failed = this.#props.failed; + var did_reset = false; + var calling_on_error = false; + const reset2 = () => { + if (did_reset) { + svelte_boundary_reset_noop(); + return; + } + did_reset = true; + if (calling_on_error) { + svelte_boundary_reset_onerror(); + } + if (this.#failed_effect !== null) { + pause_effect(this.#failed_effect, () => { + this.#failed_effect = null; + }); + } + this.#run(() => { + this.#render(); + }); + }; + const handle_error_result = (transformed_error) => { + try { + calling_on_error = true; + onerror?.(transformed_error, reset2); + calling_on_error = false; + } catch (error2) { + invoke_error_boundary(error2, this.#effect && this.#effect.parent); + } + if (failed) { + this.#failed_effect = this.#run(() => { + try { + return branch(() => { + var effect2 = ( + /** @type {Effect} */ + active_effect + ); + effect2.b = this; + effect2.f |= BOUNDARY_EFFECT; + failed( + this.#anchor, + () => transformed_error, + () => reset2 + ); + }); + } catch (error2) { + invoke_error_boundary( + error2, + /** @type {Effect} */ + this.#effect.parent + ); + return null; + } + }); + } + }; + queue_micro_task(() => { + var result; + try { + result = this.transform_error(error); + } catch (e) { + invoke_error_boundary(e, this.#effect && this.#effect.parent); + return; + } + if (result !== null && typeof result === "object" && typeof /** @type {any} */ + result.then === "function") { + result.then( + handle_error_result, + /** @param {unknown} e */ + (e) => invoke_error_boundary(e, this.#effect && this.#effect.parent) + ); + } else { + handle_error_result(result); + } + }); + } + } + function flatten(blockers, sync, async, fn) { + const d = derived; + var pending = blockers.filter((b) => !b.settled); + if (async.length === 0 && pending.length === 0) { + fn(sync.map(d)); + return; + } + var parent = ( + /** @type {Effect} */ + active_effect + ); + var restore = capture(); + var blocker_promise = pending.length === 1 ? pending[0].promise : pending.length > 1 ? Promise.all(pending.map((b) => b.promise)) : null; + function finish(values) { + if ((parent.f & DESTROYED) !== 0) { + return; + } + restore(); + try { + fn(values); + } catch (error) { + invoke_error_boundary(error, parent); + } + unset_context(); + } + var decrement_pending = increment_pending(); + if (async.length === 0) { + blocker_promise.then(() => finish(sync.map(d))).finally(decrement_pending); + return; + } + function run() { + Promise.all(async.map((expression) => /* @__PURE__ */ async_derived(expression))).then((result) => finish([...sync.map(d), ...result])).catch((error) => invoke_error_boundary(error, parent)).finally(decrement_pending); + } + if (blocker_promise) { + blocker_promise.then(() => { + restore(); + run(); + unset_context(); + }); + } else { + run(); + } + } + function capture() { + var previous_effect = ( + /** @type {Effect} */ + active_effect + ); + var previous_reaction = active_reaction; + var previous_component_context = component_context; + var previous_batch2 = ( + /** @type {Batch} */ + current_batch + ); + return function restore(activate_batch = true) { + set_active_effect(previous_effect); + set_active_reaction(previous_reaction); + set_component_context(previous_component_context); + if (activate_batch && (previous_effect.f & DESTROYED) === 0) { + previous_batch2?.activate(); + previous_batch2?.apply(); + } + }; + } + function unset_context(deactivate_batch = true) { + set_active_effect(null); + set_active_reaction(null); + set_component_context(null); + if (deactivate_batch) current_batch?.deactivate(); + } + function increment_pending() { + var effect2 = ( + /** @type {Effect} */ + active_effect + ); + var boundary2 = ( + /** @type {Boundary} */ + effect2.b + ); + var batch = ( + /** @type {Batch} */ + current_batch + ); + var blocking = boundary2.is_rendered(); + boundary2.update_pending_count(1, batch); + batch.increment(blocking, effect2); + return () => { + boundary2.update_pending_count(-1, batch); + batch.decrement(blocking, effect2); + }; + } + // @__NO_SIDE_EFFECTS__ + function derived(fn) { + var flags2 = DERIVED | DIRTY; + if (active_effect !== null) { + active_effect.f |= EFFECT_PRESERVED; + } + const signal = { + ctx: component_context, + deps: null, + effects: null, + equals, + f: flags2, + fn, + reactions: null, + rv: 0, + v: ( + /** @type {V} */ + UNINITIALIZED + ), + wv: 0, + parent: active_effect, + ac: null + }; + return signal; + } + const OBSOLETE = /* @__PURE__ */ Symbol("obsolete"); + // @__NO_SIDE_EFFECTS__ + function async_derived(fn, label, location2) { + let parent = ( + /** @type {Effect | null} */ + active_effect + ); + if (parent === null) { + async_derived_orphan(); + } + var promise = ( + /** @type {Promise} */ + /** @type {unknown} */ + void 0 + ); + var signal = source( + /** @type {V} */ + UNINITIALIZED + ); + var should_suspend = !active_reaction; + var deferreds = /* @__PURE__ */ new Set(); + async_effect(() => { + var effect2 = ( + /** @type {Effect} */ + active_effect + ); + var d = deferred(); + promise = d.promise; + try { + Promise.resolve(fn()).then(d.resolve, (e) => { + if (e !== STALE_REACTION) d.reject(e); + }).finally(unset_context); + } catch (error) { + d.reject(error); + unset_context(); + } + var batch = ( + /** @type {Batch} */ + current_batch + ); + if (should_suspend) { + if ((effect2.f & REACTION_RAN) !== 0) { + var decrement_pending = increment_pending(); + } + if ( + /** @type {Boundary} */ + parent.b.is_rendered() + ) { + batch.async_deriveds.get(effect2)?.reject(OBSOLETE); + } else { + for (const d2 of deferreds.values()) { + d2.reject(OBSOLETE); + } + } + deferreds.add(d); + batch.async_deriveds.set(effect2, d); + } + const handler = (value, error = void 0) => { + decrement_pending?.(); + deferreds.delete(d); + if (error === OBSOLETE) return; + batch.activate(); + if (error) { + signal.f |= ERROR_VALUE; + internal_set(signal, error); + } else { + if ((signal.f & ERROR_VALUE) !== 0) { + signal.f ^= ERROR_VALUE; + } + internal_set(signal, value); + } + batch.deactivate(); + }; + d.promise.then(handler, (e) => handler(null, e || "unknown")); + }); + teardown(() => { + for (const d of deferreds) { + d.reject(OBSOLETE); + } + }); + return new Promise((fulfil) => { + function next2(p) { + function go() { + if (p === promise) { + fulfil(signal); + } else { + next2(promise); + } + } + p.then(go, go); + } + next2(promise); + }); + } + // @__NO_SIDE_EFFECTS__ + function user_derived(fn) { + const d = /* @__PURE__ */ derived(fn); + push_reaction_value(d); + return d; + } + function destroy_derived_effects(derived2) { + var effects = derived2.effects; + if (effects !== null) { + derived2.effects = null; + for (var i = 0; i < effects.length; i += 1) { + destroy_effect( + /** @type {Effect} */ + effects[i] + ); + } + } + } + function execute_derived(derived2) { + var value; + var prev_active_effect = active_effect; + var parent = derived2.parent; + if (!is_destroying_effect && parent !== null && derived2.v !== UNINITIALIZED && // if it was never evaluated before, it's guaranteed to fail downstream, so we try to execute instead + (parent.f & (DESTROYED | INERT)) !== 0) { + derived_inert(); + return derived2.v; + } + set_active_effect(parent); + { + try { + derived2.f &= ~WAS_MARKED; + destroy_derived_effects(derived2); + value = update_reaction(derived2); + } finally { + set_active_effect(prev_active_effect); + } + } + return value; + } + function update_derived(derived2) { + var value = execute_derived(derived2); + if (!derived2.equals(value)) { + derived2.wv = increment_write_version(); + if (!current_batch?.is_fork || derived2.deps === null) { + if (current_batch !== null) { + current_batch.capture(derived2, value, true); + previous_batch?.capture(derived2, value, true); + } else { + derived2.v = value; + } + if (derived2.deps === null) { + set_signal_status(derived2, CLEAN); + return; + } + } + } + if (is_destroying_effect) { + return; + } + if (batch_values !== null) { + if (effect_tracking() || current_batch?.is_fork) { + batch_values.set(derived2, value); + } + } else { + update_derived_status(derived2); + } + } + function freeze_derived_effects(derived2) { + if (derived2.effects === null) return; + for (const e of derived2.effects) { + if (e.teardown || e.ac) { + e.teardown?.(); + e.ac?.abort(STALE_REACTION); + if (e.fn !== null) e.teardown = noop; + e.ac = null; + remove_reactions(e, 0); + destroy_effect_children(e); + } + } + } + function unfreeze_derived_effects(derived2) { + if (derived2.effects === null) return; + for (const e of derived2.effects) { + if (e.teardown && e.fn !== null) { + update_effect(e); + } + } + } + let eager_effects = /* @__PURE__ */ new Set(); + const old_values = /* @__PURE__ */ new Map(); + let eager_effects_deferred = false; + function source(v, stack) { + var signal = { + f: 0, + // TODO ideally we could skip this altogether, but it causes type errors + v, + reactions: null, + equals, + rv: 0, + wv: 0 + }; + return signal; + } + // @__NO_SIDE_EFFECTS__ + function state(v, stack) { + const s = source(v); + push_reaction_value(s); + return s; + } + // @__NO_SIDE_EFFECTS__ + function mutable_source(initial_value, immutable = false, trackable = true) { + const s = source(initial_value); + if (!immutable) { + s.equals = safe_equals; + } + return s; + } + function set(source2, value, should_proxy = false) { + if (active_reaction !== null && // since we are untracking the function inside `$inspect.with` we need to add this check + // to ensure we error if state is set inside an inspect effect + (!untracking || (active_reaction.f & EAGER_EFFECT) !== 0) && is_runes() && (active_reaction.f & (DERIVED | BLOCK_EFFECT | ASYNC | EAGER_EFFECT)) !== 0 && (current_sources === null || !includes.call(current_sources, source2))) { + state_unsafe_mutation(); + } + let new_value = should_proxy ? proxy(value) : value; + return internal_set(source2, new_value, legacy_updates); + } + function internal_set(source2, value, updated_during_traversal = null) { + if (!source2.equals(value)) { + old_values.set(source2, is_destroying_effect ? value : source2.v); + var batch = Batch.ensure(); + batch.capture(source2, value); + if ((source2.f & DERIVED) !== 0) { + const derived2 = ( + /** @type {Derived} */ + source2 + ); + if ((source2.f & DIRTY) !== 0) { + execute_derived(derived2); + } + if (batch_values === null) { + update_derived_status(derived2); + } + } + source2.wv = increment_write_version(); + mark_reactions(source2, DIRTY, updated_during_traversal); + if (active_effect !== null && (active_effect.f & CLEAN) !== 0 && (active_effect.f & (BRANCH_EFFECT | ROOT_EFFECT)) === 0) { + if (untracked_writes === null) { + set_untracked_writes([source2]); + } else { + untracked_writes.push(source2); + } + } + if (!batch.is_fork && eager_effects.size > 0 && !eager_effects_deferred) { + flush_eager_effects(); + } + } + return value; + } + function flush_eager_effects() { + eager_effects_deferred = false; + for (const effect2 of eager_effects) { + if ((effect2.f & CLEAN) !== 0) { + set_signal_status(effect2, MAYBE_DIRTY); + } + let dirty; + try { + dirty = is_dirty(effect2); + } catch { + dirty = true; + } + if (dirty) { + update_effect(effect2); + } + } + eager_effects.clear(); + } + function increment(source2) { + set(source2, source2.v + 1); + } + function mark_reactions(signal, status, updated_during_traversal) { + var reactions = signal.reactions; + if (reactions === null) return; + var length = reactions.length; + for (var i = 0; i < length; i++) { + var reaction = reactions[i]; + var flags2 = reaction.f; + var not_dirty = (flags2 & DIRTY) === 0; + if (not_dirty) { + set_signal_status(reaction, status); + } + if ((flags2 & EAGER_EFFECT) !== 0) { + eager_effects.add( + /** @type {Effect} */ + reaction + ); + } else if ((flags2 & DERIVED) !== 0) { + var derived2 = ( + /** @type {Derived} */ + reaction + ); + batch_values?.delete(derived2); + if ((flags2 & WAS_MARKED) === 0) { + if (flags2 & CONNECTED && (active_effect === null || (active_effect.f & REACTION_IS_UPDATING) === 0)) { + reaction.f |= WAS_MARKED; + } + mark_reactions(derived2, MAYBE_DIRTY, updated_during_traversal); + } + } else if (not_dirty) { + var effect2 = ( + /** @type {Effect} */ + reaction + ); + if ((flags2 & BLOCK_EFFECT) !== 0 && eager_block_effects !== null) { + eager_block_effects.add(effect2); + } + if (updated_during_traversal !== null) { + updated_during_traversal.push(effect2); + } else { + schedule_effect(effect2); + } + } + } + } + function autofocus(dom, value) { + if (value) { + const body = document.body; + dom.autofocus = true; + queue_micro_task(() => { + if (document.activeElement === body) { + dom.focus(); + } + }); + } + } + let listening_to_form_reset = false; + function add_form_reset_listener() { + if (!listening_to_form_reset) { + listening_to_form_reset = true; + document.addEventListener( + "reset", + (evt) => { + Promise.resolve().then(() => { + if (!evt.defaultPrevented) { + for ( + const e of + /**@type {HTMLFormElement} */ + evt.target.elements + ) { + e[FORM_RESET_HANDLER]?.(); + } + } + }); + }, + // In the capture phase to guarantee we get noticed of it (no possibility of stopPropagation) + { capture: true } + ); + } + } + function without_reactive_context(fn) { + var previous_reaction = active_reaction; + var previous_effect = active_effect; + set_active_reaction(null); + set_active_effect(null); + try { + return fn(); + } finally { + set_active_reaction(previous_reaction); + set_active_effect(previous_effect); + } + } + function listen_to_event_and_reset_event(element, event2, handler, on_reset = handler) { + element.addEventListener(event2, () => without_reactive_context(handler)); + const prev = ( + /** @type {any} */ + element[FORM_RESET_HANDLER] + ); + if (prev) { + element[FORM_RESET_HANDLER] = () => { + prev(); + on_reset(true); + }; + } else { + element[FORM_RESET_HANDLER] = () => on_reset(true); + } + add_form_reset_listener(); + } + let is_updating_effect = false; + let is_destroying_effect = false; + function set_is_destroying_effect(value) { + is_destroying_effect = value; + } + let active_reaction = null; + let untracking = false; + function set_active_reaction(reaction) { + active_reaction = reaction; + } + let active_effect = null; + function set_active_effect(effect2) { + active_effect = effect2; + } + let current_sources = null; + function push_reaction_value(value) { + if (active_reaction !== null && true) { + if (current_sources === null) { + current_sources = [value]; + } else { + current_sources.push(value); + } + } + } + let new_deps = null; + let skipped_deps = 0; + let untracked_writes = null; + function set_untracked_writes(value) { + untracked_writes = value; + } + let write_version = 1; + let read_version = 0; + let update_version = read_version; + function set_update_version(value) { + update_version = value; + } + function increment_write_version() { + return ++write_version; + } + function is_dirty(reaction) { + var flags2 = reaction.f; + if ((flags2 & DIRTY) !== 0) { + return true; + } + if (flags2 & DERIVED) { + reaction.f &= ~WAS_MARKED; + } + if ((flags2 & MAYBE_DIRTY) !== 0) { + var dependencies = ( + /** @type {Value[]} */ + reaction.deps + ); + var length = dependencies.length; + for (var i = 0; i < length; i++) { + var dependency = dependencies[i]; + if (is_dirty( + /** @type {Derived} */ + dependency + )) { + update_derived( + /** @type {Derived} */ + dependency + ); + } + if (dependency.wv > reaction.wv) { + return true; + } + } + if ((flags2 & CONNECTED) !== 0 && // During time traveling we don't want to reset the status so that + // traversal of the graph in the other batches still happens + batch_values === null) { + set_signal_status(reaction, CLEAN); + } + } + return false; + } + function schedule_possible_effect_self_invalidation(signal, effect2, root2 = true) { + var reactions = signal.reactions; + if (reactions === null) return; + if (current_sources !== null && includes.call(current_sources, signal)) { + return; + } + for (var i = 0; i < reactions.length; i++) { + var reaction = reactions[i]; + if ((reaction.f & DERIVED) !== 0) { + schedule_possible_effect_self_invalidation( + /** @type {Derived} */ + reaction, + effect2, + false + ); + } else if (effect2 === reaction) { + if (root2) { + set_signal_status(reaction, DIRTY); + } else if ((reaction.f & CLEAN) !== 0) { + set_signal_status(reaction, MAYBE_DIRTY); + } + schedule_effect( + /** @type {Effect} */ + reaction + ); + } + } + } + function update_reaction(reaction) { + var previous_deps = new_deps; + var previous_skipped_deps = skipped_deps; + var previous_untracked_writes = untracked_writes; + var previous_reaction = active_reaction; + var previous_sources = current_sources; + var previous_component_context = component_context; + var previous_untracking = untracking; + var previous_update_version = update_version; + var flags2 = reaction.f; + new_deps = /** @type {null | Value[]} */ + null; + skipped_deps = 0; + untracked_writes = null; + active_reaction = (flags2 & (BRANCH_EFFECT | ROOT_EFFECT)) === 0 ? reaction : null; + current_sources = null; + set_component_context(reaction.ctx); + untracking = false; + update_version = ++read_version; + if (reaction.ac !== null) { + without_reactive_context(() => { + reaction.ac.abort(STALE_REACTION); + }); + reaction.ac = null; + } + try { + reaction.f |= REACTION_IS_UPDATING; + var fn = ( + /** @type {Function} */ + reaction.fn + ); + var result = fn(); + reaction.f |= REACTION_RAN; + var deps = reaction.deps; + var is_fork = current_batch?.is_fork; + if (new_deps !== null) { + var i; + if (!is_fork) { + remove_reactions(reaction, skipped_deps); + } + if (deps !== null && skipped_deps > 0) { + deps.length = skipped_deps + new_deps.length; + for (i = 0; i < new_deps.length; i++) { + deps[skipped_deps + i] = new_deps[i]; + } + } else { + reaction.deps = deps = new_deps; + } + if (effect_tracking() && (reaction.f & CONNECTED) !== 0) { + for (i = skipped_deps; i < deps.length; i++) { + (deps[i].reactions ??= []).push(reaction); + } + } + } else if (!is_fork && deps !== null && skipped_deps < deps.length) { + remove_reactions(reaction, skipped_deps); + deps.length = skipped_deps; + } + if (is_runes() && untracked_writes !== null && !untracking && deps !== null && (reaction.f & (DERIVED | MAYBE_DIRTY | DIRTY)) === 0) { + for (i = 0; i < /** @type {Source[]} */ + untracked_writes.length; i++) { + schedule_possible_effect_self_invalidation( + untracked_writes[i], + /** @type {Effect} */ + reaction + ); + } + } + if (previous_reaction !== null && previous_reaction !== reaction) { + read_version++; + if (previous_reaction.deps !== null) { + for (let i2 = 0; i2 < previous_skipped_deps; i2 += 1) { + previous_reaction.deps[i2].rv = read_version; + } + } + if (previous_deps !== null) { + for (const dep of previous_deps) { + dep.rv = read_version; + } + } + if (untracked_writes !== null) { + if (previous_untracked_writes === null) { + previous_untracked_writes = untracked_writes; + } else { + previous_untracked_writes.push(.../** @type {Source[]} */ + untracked_writes); + } + } + } + if ((reaction.f & ERROR_VALUE) !== 0) { + reaction.f ^= ERROR_VALUE; + } + return result; + } catch (error) { + return handle_error(error); + } finally { + reaction.f ^= REACTION_IS_UPDATING; + new_deps = previous_deps; + skipped_deps = previous_skipped_deps; + untracked_writes = previous_untracked_writes; + active_reaction = previous_reaction; + current_sources = previous_sources; + set_component_context(previous_component_context); + untracking = previous_untracking; + update_version = previous_update_version; + } + } + function remove_reaction(signal, dependency) { + let reactions = dependency.reactions; + if (reactions !== null) { + var index = index_of.call(reactions, signal); + if (index !== -1) { + var new_length = reactions.length - 1; + if (new_length === 0) { + reactions = dependency.reactions = null; + } else { + reactions[index] = reactions[new_length]; + reactions.pop(); + } + } + } + if (reactions === null && (dependency.f & DERIVED) !== 0 && // Destroying a child effect while updating a parent effect can cause a dependency to appear + // to be unused, when in fact it is used by the currently-updating parent. Checking `new_deps` + // allows us to skip the expensive work of disconnecting and immediately reconnecting it + (new_deps === null || !includes.call(new_deps, dependency))) { + var derived2 = ( + /** @type {Derived} */ + dependency + ); + if ((derived2.f & CONNECTED) !== 0) { + derived2.f ^= CONNECTED; + derived2.f &= ~WAS_MARKED; + } + if (derived2.v !== UNINITIALIZED) { + update_derived_status(derived2); + } + freeze_derived_effects(derived2); + remove_reactions(derived2, 0); + } + } + function remove_reactions(signal, start_index) { + var dependencies = signal.deps; + if (dependencies === null) return; + for (var i = start_index; i < dependencies.length; i++) { + remove_reaction(signal, dependencies[i]); + } + } + function update_effect(effect2) { + var flags2 = effect2.f; + if ((flags2 & DESTROYED) !== 0) { + return; + } + set_signal_status(effect2, CLEAN); + var previous_effect = active_effect; + var was_updating_effect = is_updating_effect; + active_effect = effect2; + is_updating_effect = true; + try { + if ((flags2 & (BLOCK_EFFECT | MANAGED_EFFECT)) !== 0) { + destroy_block_effect_children(effect2); + } else { + destroy_effect_children(effect2); + } + execute_effect_teardown(effect2); + var teardown2 = update_reaction(effect2); + effect2.teardown = typeof teardown2 === "function" ? teardown2 : null; + effect2.wv = write_version; + var dep; + if (DEV && tracing_mode_flag && (effect2.f & DIRTY) !== 0 && effect2.deps !== null) ; + } finally { + is_updating_effect = was_updating_effect; + active_effect = previous_effect; + } + } + async function tick() { + await Promise.resolve(); + flushSync(); + } + function get(signal) { + var flags2 = signal.f; + var is_derived = (flags2 & DERIVED) !== 0; + if (active_reaction !== null && !untracking) { + var destroyed = active_effect !== null && (active_effect.f & DESTROYED) !== 0; + if (!destroyed && (current_sources === null || !includes.call(current_sources, signal))) { + var deps = active_reaction.deps; + if ((active_reaction.f & REACTION_IS_UPDATING) !== 0) { + if (signal.rv < read_version) { + signal.rv = read_version; + if (new_deps === null && deps !== null && deps[skipped_deps] === signal) { + skipped_deps++; + } else if (new_deps === null) { + new_deps = [signal]; + } else { + new_deps.push(signal); + } + } + } else { + (active_reaction.deps ??= []).push(signal); + var reactions = signal.reactions; + if (reactions === null) { + signal.reactions = [active_reaction]; + } else if (!includes.call(reactions, active_reaction)) { + reactions.push(active_reaction); + } + } + } + } + if (is_destroying_effect && old_values.has(signal)) { + return old_values.get(signal); + } + if (is_derived) { + var derived2 = ( + /** @type {Derived} */ + signal + ); + if (is_destroying_effect) { + var value = derived2.v; + if ((derived2.f & CLEAN) === 0 && derived2.reactions !== null || depends_on_old_values(derived2)) { + value = execute_derived(derived2); + } + old_values.set(derived2, value); + return value; + } + var should_connect = (derived2.f & CONNECTED) === 0 && !untracking && active_reaction !== null && (is_updating_effect || (active_reaction.f & CONNECTED) !== 0); + var is_new = (derived2.f & REACTION_RAN) === 0; + if (is_dirty(derived2)) { + if (should_connect) { + derived2.f |= CONNECTED; + } + update_derived(derived2); + } + if (should_connect && !is_new) { + unfreeze_derived_effects(derived2); + reconnect(derived2); + } + } + if (batch_values?.has(signal)) { + return batch_values.get(signal); + } + if ((signal.f & ERROR_VALUE) !== 0) { + throw signal.v; + } + return signal.v; + } + function reconnect(derived2) { + derived2.f |= CONNECTED; + if (derived2.deps === null) return; + for (const dep of derived2.deps) { + (dep.reactions ??= []).push(derived2); + if ((dep.f & DERIVED) !== 0 && (dep.f & CONNECTED) === 0) { + unfreeze_derived_effects( + /** @type {Derived} */ + dep + ); + reconnect( + /** @type {Derived} */ + dep + ); + } + } + } + function depends_on_old_values(derived2) { + if (derived2.v === UNINITIALIZED) return true; + if (derived2.deps === null) return false; + for (const dep of derived2.deps) { + if (old_values.has(dep)) { + return true; + } + if ((dep.f & DERIVED) !== 0 && depends_on_old_values( + /** @type {Derived} */ + dep + )) { + return true; + } + } + return false; + } + function untrack(fn) { + var previous_untracking = untracking; + try { + untracking = true; + return fn(); + } finally { + untracking = previous_untracking; + } + } + function validate_effect(rune) { + if (active_effect === null) { + if (active_reaction === null) { + effect_orphan(); + } + effect_in_unowned_derived(); + } + if (is_destroying_effect) { + effect_in_teardown(); + } + } + function push_effect(effect2, parent_effect) { + var parent_last = parent_effect.last; + if (parent_last === null) { + parent_effect.last = parent_effect.first = effect2; + } else { + parent_last.next = effect2; + effect2.prev = parent_last; + parent_effect.last = effect2; + } + } + function create_effect(type, fn) { + var parent = active_effect; + if (parent !== null && (parent.f & INERT) !== 0) { + type |= INERT; + } + var effect2 = { + ctx: component_context, + deps: null, + nodes: null, + f: type | DIRTY | CONNECTED, + first: null, + fn, + last: null, + next: null, + parent, + b: parent && parent.b, + prev: null, + teardown: null, + wv: 0, + ac: null + }; + current_batch?.register_created_effect(effect2); + var e = effect2; + if ((type & EFFECT) !== 0) { + if (collected_effects !== null) { + collected_effects.push(effect2); + } else { + Batch.ensure().schedule(effect2); + } + } else if (fn !== null) { + try { + update_effect(effect2); + } catch (e2) { + destroy_effect(effect2); + throw e2; + } + if (e.deps === null && e.teardown === null && e.nodes === null && e.first === e.last && // either `null`, or a singular child + (e.f & EFFECT_PRESERVED) === 0) { + e = e.first; + if ((type & BLOCK_EFFECT) !== 0 && (type & EFFECT_TRANSPARENT) !== 0 && e !== null) { + e.f |= EFFECT_TRANSPARENT; + } + } + } + if (e !== null) { + e.parent = parent; + if (parent !== null) { + push_effect(e, parent); + } + if (active_reaction !== null && (active_reaction.f & DERIVED) !== 0 && (type & ROOT_EFFECT) === 0) { + var derived2 = ( + /** @type {Derived} */ + active_reaction + ); + (derived2.effects ??= []).push(e); + } + } + return effect2; + } + function effect_tracking() { + return active_reaction !== null && !untracking; + } + function teardown(fn) { + const effect2 = create_effect(RENDER_EFFECT, null); + set_signal_status(effect2, CLEAN); + effect2.teardown = fn; + return effect2; + } + function user_effect(fn) { + validate_effect(); + var flags2 = ( + /** @type {Effect} */ + active_effect.f + ); + var defer = !active_reaction && (flags2 & BRANCH_EFFECT) !== 0 && (flags2 & REACTION_RAN) === 0; + if (defer) { + var context = ( + /** @type {ComponentContext} */ + component_context + ); + (context.e ??= []).push(fn); + } else { + return create_user_effect(fn); + } + } + function create_user_effect(fn) { + return create_effect(EFFECT | USER_EFFECT, fn); + } + function effect_root(fn) { + Batch.ensure(); + const effect2 = create_effect(ROOT_EFFECT | EFFECT_PRESERVED, fn); + return () => { + destroy_effect(effect2); + }; + } + function component_root(fn) { + Batch.ensure(); + const effect2 = create_effect(ROOT_EFFECT | EFFECT_PRESERVED, fn); + return (options = {}) => { + return new Promise((fulfil) => { + if (options.outro) { + pause_effect(effect2, () => { + destroy_effect(effect2); + fulfil(void 0); + }); + } else { + destroy_effect(effect2); + fulfil(void 0); + } + }); + }; + } + function effect(fn) { + return create_effect(EFFECT, fn); + } + function async_effect(fn) { + return create_effect(ASYNC | EFFECT_PRESERVED, fn); + } + function render_effect(fn, flags2 = 0) { + return create_effect(RENDER_EFFECT | flags2, fn); + } + function template_effect(fn, sync = [], async = [], blockers = []) { + flatten(blockers, sync, async, (values) => { + create_effect(RENDER_EFFECT, () => fn(...values.map(get))); + }); + } + function block(fn, flags2 = 0) { + var effect2 = create_effect(BLOCK_EFFECT | flags2, fn); + return effect2; + } + function managed(fn, flags2 = 0) { + var effect2 = create_effect(MANAGED_EFFECT | flags2, fn); + return effect2; + } + function branch(fn) { + return create_effect(BRANCH_EFFECT | EFFECT_PRESERVED, fn); + } + function execute_effect_teardown(effect2) { + var teardown2 = effect2.teardown; + if (teardown2 !== null) { + const previously_destroying_effect = is_destroying_effect; + const previous_reaction = active_reaction; + set_is_destroying_effect(true); + set_active_reaction(null); + try { + teardown2.call(null); + } finally { + set_is_destroying_effect(previously_destroying_effect); + set_active_reaction(previous_reaction); + } + } + } + function destroy_effect_children(signal, remove_dom = false) { + var effect2 = signal.first; + signal.first = signal.last = null; + while (effect2 !== null) { + const controller = effect2.ac; + if (controller !== null) { + without_reactive_context(() => { + controller.abort(STALE_REACTION); + }); + } + var next2 = effect2.next; + if ((effect2.f & ROOT_EFFECT) !== 0) { + effect2.parent = null; + } else { + destroy_effect(effect2, remove_dom); + } + effect2 = next2; + } + } + function destroy_block_effect_children(signal) { + var effect2 = signal.first; + while (effect2 !== null) { + var next2 = effect2.next; + if ((effect2.f & BRANCH_EFFECT) === 0) { + destroy_effect(effect2); + } + effect2 = next2; + } + } + function destroy_effect(effect2, remove_dom = true) { + var removed = false; + if ((remove_dom || (effect2.f & HEAD_EFFECT) !== 0) && effect2.nodes !== null && effect2.nodes.end !== null) { + remove_effect_dom( + effect2.nodes.start, + /** @type {TemplateNode} */ + effect2.nodes.end + ); + removed = true; + } + set_signal_status(effect2, DESTROYING); + destroy_effect_children(effect2, remove_dom && !removed); + remove_reactions(effect2, 0); + var transitions = effect2.nodes && effect2.nodes.t; + if (transitions !== null) { + for (const transition of transitions) { + transition.stop(); + } + } + execute_effect_teardown(effect2); + effect2.f ^= DESTROYING; + effect2.f |= DESTROYED; + var parent = effect2.parent; + if (parent !== null && parent.first !== null) { + unlink_effect(effect2); + } + effect2.next = effect2.prev = effect2.teardown = effect2.ctx = effect2.deps = effect2.fn = effect2.nodes = effect2.ac = effect2.b = null; + } + function remove_effect_dom(node, end) { + while (node !== null) { + var next2 = node === end ? null : /* @__PURE__ */ get_next_sibling(node); + node.remove(); + node = next2; + } + } + function unlink_effect(effect2) { + var parent = effect2.parent; + var prev = effect2.prev; + var next2 = effect2.next; + if (prev !== null) prev.next = next2; + if (next2 !== null) next2.prev = prev; + if (parent !== null) { + if (parent.first === effect2) parent.first = next2; + if (parent.last === effect2) parent.last = prev; + } + } + function pause_effect(effect2, callback, destroy = true) { + var transitions = []; + pause_children(effect2, transitions, true); + var fn = () => { + if (destroy) destroy_effect(effect2); + if (callback) callback(); + }; + var remaining = transitions.length; + if (remaining > 0) { + var check = () => --remaining || fn(); + for (var transition of transitions) { + transition.out(check); + } + } else { + fn(); + } + } + function pause_children(effect2, transitions, local) { + if ((effect2.f & INERT) !== 0) return; + effect2.f ^= INERT; + var t = effect2.nodes && effect2.nodes.t; + if (t !== null) { + for (const transition of t) { + if (transition.is_global || local) { + transitions.push(transition); + } + } + } + var child2 = effect2.first; + while (child2 !== null) { + var sibling2 = child2.next; + if ((child2.f & ROOT_EFFECT) === 0) { + var transparent = (child2.f & EFFECT_TRANSPARENT) !== 0 || // If this is a branch effect without a block effect parent, + // it means the parent block effect was pruned. In that case, + // transparency information was transferred to the branch effect. + (child2.f & BRANCH_EFFECT) !== 0 && (effect2.f & BLOCK_EFFECT) !== 0; + pause_children(child2, transitions, transparent ? local : false); + } + child2 = sibling2; + } + } + function resume_effect(effect2) { + resume_children(effect2, true); + } + function resume_children(effect2, local) { + if ((effect2.f & INERT) === 0) return; + effect2.f ^= INERT; + if ((effect2.f & CLEAN) === 0) { + set_signal_status(effect2, DIRTY); + Batch.ensure().schedule(effect2); + } + var child2 = effect2.first; + while (child2 !== null) { + var sibling2 = child2.next; + var transparent = (child2.f & EFFECT_TRANSPARENT) !== 0 || (child2.f & BRANCH_EFFECT) !== 0; + resume_children(child2, transparent ? local : false); + child2 = sibling2; + } + var t = effect2.nodes && effect2.nodes.t; + if (t !== null) { + for (const transition of t) { + if (transition.is_global || local) { + transition.in(); + } + } + } + } + function move_effect(effect2, fragment) { + if (!effect2.nodes) return; + var node = effect2.nodes.start; + var end = effect2.nodes.end; + while (node !== null) { + var next2 = node === end ? null : /* @__PURE__ */ get_next_sibling(node); + fragment.append(node); + node = next2; + } + } + function store(defaultValue) { + const scope = { + get: (name) => { + return get$1(scope.store)[name]; + }, + set: (name, value) => { + if (typeof name === "string") { + Object.assign(get$1(scope.store), { + [name]: value + }); + } else { + Object.assign(get$1(scope.store), name); + } + scope.store.set(get$1(scope.store)); + }, + store: writable(defaultValue) + }; + return scope; + } + globalThis.$altcha = globalThis.$altcha || { + algorithms: /* @__PURE__ */ new Map(), + defaults: store({}), + i18n: store({}), + instances: /* @__PURE__ */ new Set(), + plugins: /* @__PURE__ */ new Set() + }; + const i18n = { + ariaLinkLabel: "Altcha (official website)", + cancel: "Cancel", + enterCode: "Enter code", + enterCodeAria: "Enter code you hear. Press Space to play audio.", + enterCodeFromImage: "To proceed, please enter the code from the image below.", + error: "Verification failed. Try again later.", + expired: "Verification expired. Try again.", + footer: 'Protected by ALTCHA', + getAudioChallenge: "Get an audio challenge", + label: "I'm not a robot", + loading: "Loading...", + reload: "Reload", + verify: "Verify", + verificationRequired: "Verification required!", + verified: "Verified", + verifying: "Verifying...", + waitAlert: "Verifying... please wait." + }; + globalThis.$altcha.i18n.set("en", i18n); + const PUBLIC_VERSION = "5"; + if (typeof window !== "undefined") { + ((window.__svelte ??= {}).v ??= /* @__PURE__ */ new Set()).add(PUBLIC_VERSION); + } + const event_symbol = /* @__PURE__ */ Symbol("events"); + const all_registered_events = /* @__PURE__ */ new Set(); + const root_event_handles = /* @__PURE__ */ new Set(); + function create_event(event_name, dom, handler, options = {}) { + function target_handler(event2) { + if (!options.capture) { + handle_event_propagation.call(dom, event2); + } + if (!event2.cancelBubble) { + return without_reactive_context(() => { + return handler?.call(this, event2); + }); + } + } + if (event_name.startsWith("pointer") || event_name.startsWith("touch") || event_name === "wheel") { + queue_micro_task(() => { + dom.addEventListener(event_name, target_handler, options); + }); + } else { + dom.addEventListener(event_name, target_handler, options); + } + return target_handler; + } + function event(event_name, dom, handler, capture2, passive) { + var options = { capture: capture2, passive }; + var target_handler = create_event(event_name, dom, handler, options); + if (dom === document.body || // @ts-ignore + dom === window || // @ts-ignore + dom === document || // Firefox has quirky behavior, it can happen that we still get "canplay" events when the element is already removed + dom instanceof HTMLMediaElement) { + teardown(() => { + dom.removeEventListener(event_name, target_handler, options); + }); + } + } + function delegated(event_name, element, handler) { + (element[event_symbol] ??= {})[event_name] = handler; + } + function delegate(events) { + for (var i = 0; i < events.length; i++) { + all_registered_events.add(events[i]); + } + for (var fn of root_event_handles) { + fn(events); + } + } + let last_propagated_event = null; + function handle_event_propagation(event2) { + var handler_element = this; + var owner_document = ( + /** @type {Node} */ + handler_element.ownerDocument + ); + var event_name = event2.type; + var path = event2.composedPath?.() || []; + var current_target = ( + /** @type {null | Element} */ + path[0] || event2.target + ); + last_propagated_event = event2; + var path_idx = 0; + var handled_at = last_propagated_event === event2 && event2[event_symbol]; + if (handled_at) { + var at_idx = path.indexOf(handled_at); + if (at_idx !== -1 && (handler_element === document || handler_element === /** @type {any} */ + window)) { + event2[event_symbol] = handler_element; + return; + } + var handler_idx = path.indexOf(handler_element); + if (handler_idx === -1) { + return; + } + if (at_idx <= handler_idx) { + path_idx = at_idx; + } + } + current_target = /** @type {Element} */ + path[path_idx] || event2.target; + if (current_target === handler_element) return; + define_property(event2, "currentTarget", { + configurable: true, + get() { + return current_target || owner_document; + } + }); + var previous_reaction = active_reaction; + var previous_effect = active_effect; + set_active_reaction(null); + set_active_effect(null); + try { + var throw_error; + var other_errors = []; + while (current_target !== null) { + var parent_element = current_target.assignedSlot || current_target.parentNode || /** @type {any} */ + current_target.host || null; + try { + var delegated2 = current_target[event_symbol]?.[event_name]; + if (delegated2 != null && (!/** @type {any} */ + current_target.disabled || // DOM could've been updated already by the time this is reached, so we check this as well + // -> the target could not have been disabled because it emits the event in the first place + event2.target === current_target)) { + delegated2.call(current_target, event2); + } + } catch (error) { + if (throw_error) { + other_errors.push(error); + } else { + throw_error = error; + } + } + if (event2.cancelBubble || parent_element === handler_element || parent_element === null) { + break; + } + current_target = parent_element; + } + if (throw_error) { + for (let error of other_errors) { + queueMicrotask(() => { + throw error; + }); + } + throw throw_error; + } + } finally { + event2[event_symbol] = handler_element; + delete event2.currentTarget; + set_active_reaction(previous_reaction); + set_active_effect(previous_effect); + } + } + const policy = ( + // We gotta write it like this because after downleveling the pure comment may end up in the wrong location + globalThis?.window?.trustedTypes && /* @__PURE__ */ globalThis.window.trustedTypes.createPolicy("svelte-trusted-html", { + /** @param {string} html */ + createHTML: (html2) => { + return html2; + } + }) + ); + function create_trusted_html(html2) { + return ( + /** @type {string} */ + policy?.createHTML(html2) ?? html2 + ); + } + function create_fragment_from_html(html2) { + var elem = create_element("template"); + elem.innerHTML = create_trusted_html(html2.replaceAll("", "")); + return elem.content; + } + function assign_nodes(start, end) { + var effect2 = ( + /** @type {Effect} */ + active_effect + ); + if (effect2.nodes === null) { + effect2.nodes = { start, end, a: null, t: null }; + } + } + // @__NO_SIDE_EFFECTS__ + function from_html(content, flags2) { + var is_fragment = (flags2 & TEMPLATE_FRAGMENT) !== 0; + var use_import_node = (flags2 & TEMPLATE_USE_IMPORT_NODE) !== 0; + var node; + var has_start = !content.startsWith(""); + return () => { + if (hydrating) { + assign_nodes(hydrate_node, null); + return hydrate_node; + } + if (node === void 0) { + node = create_fragment_from_html(has_start ? content : "" + content); + if (!is_fragment) node = /** @type {TemplateNode} */ + /* @__PURE__ */ get_first_child(node); + } + var clone = ( + /** @type {TemplateNode} */ + use_import_node || is_firefox ? document.importNode(node, true) : node.cloneNode(true) + ); + if (is_fragment) { + var start = ( + /** @type {TemplateNode} */ + /* @__PURE__ */ get_first_child(clone) + ); + var end = ( + /** @type {TemplateNode} */ + clone.lastChild + ); + assign_nodes(start, end); + } else { + assign_nodes(clone, clone); + } + return clone; + }; + } + // @__NO_SIDE_EFFECTS__ + function from_namespace(content, flags2, ns = "svg") { + var has_start = !content.startsWith(""); + var wrapped = `<${ns}>${has_start ? content : "" + content}`; + var node; + return () => { + if (hydrating) { + assign_nodes(hydrate_node, null); + return hydrate_node; + } + if (!node) { + var fragment = ( + /** @type {DocumentFragment} */ + create_fragment_from_html(wrapped) + ); + var root2 = ( + /** @type {Element} */ + /* @__PURE__ */ get_first_child(fragment) + ); + { + node = /** @type {Element} */ + /* @__PURE__ */ get_first_child(root2); + } + } + var clone = ( + /** @type {TemplateNode} */ + node.cloneNode(true) + ); + { + assign_nodes(clone, clone); + } + return clone; + }; + } + // @__NO_SIDE_EFFECTS__ + function from_svg(content, flags2) { + return /* @__PURE__ */ from_namespace(content, flags2, "svg"); + } + function text(value = "") { + if (!hydrating) { + var t = create_text(value + ""); + assign_nodes(t, t); + return t; + } + var node = hydrate_node; + if (node.nodeType !== TEXT_NODE) { + node.before(node = create_text()); + set_hydrate_node(node); + } else { + merge_text_nodes( + /** @type {Text} */ + node + ); + } + assign_nodes(node, node); + return node; + } + function comment() { + if (hydrating) { + assign_nodes(hydrate_node, null); + return hydrate_node; + } + var frag = document.createDocumentFragment(); + var start = document.createComment(""); + var anchor = create_text(); + frag.append(start, anchor); + assign_nodes(start, anchor); + return frag; + } + function append(anchor, dom) { + if (hydrating) { + var effect2 = ( + /** @type {Effect & { nodes: EffectNodes }} */ + active_effect + ); + if ((effect2.f & REACTION_RAN) === 0 || effect2.nodes.end === null) { + effect2.nodes.end = hydrate_node; + } + hydrate_next(); + return; + } + if (anchor === null) { + return; + } + anchor.before( + /** @type {Node} */ + dom + ); + } + function is_capture_event(name) { + return name.endsWith("capture") && name !== "gotpointercapture" && name !== "lostpointercapture"; + } + const DELEGATED_EVENTS = [ + "beforeinput", + "click", + "change", + "dblclick", + "contextmenu", + "focusin", + "focusout", + "input", + "keydown", + "keyup", + "mousedown", + "mousemove", + "mouseout", + "mouseover", + "mouseup", + "pointerdown", + "pointermove", + "pointerout", + "pointerover", + "pointerup", + "touchend", + "touchmove", + "touchstart" + ]; + function can_delegate_event(event_name) { + return DELEGATED_EVENTS.includes(event_name); + } + const ATTRIBUTE_ALIASES = { + // no `class: 'className'` because we handle that separately + formnovalidate: "formNoValidate", + ismap: "isMap", + nomodule: "noModule", + playsinline: "playsInline", + readonly: "readOnly", + defaultvalue: "defaultValue", + defaultchecked: "defaultChecked", + srcobject: "srcObject", + novalidate: "noValidate", + allowfullscreen: "allowFullscreen", + disablepictureinpicture: "disablePictureInPicture", + disableremoteplayback: "disableRemotePlayback" + }; + function normalize_attribute(name) { + name = name.toLowerCase(); + return ATTRIBUTE_ALIASES[name] ?? name; + } + const PASSIVE_EVENTS = ["touchstart", "touchmove"]; + function is_passive_event(name) { + return PASSIVE_EVENTS.includes(name); + } + function set_text(text2, value) { + var str = value == null ? "" : typeof value === "object" ? `${value}` : value; + if (str !== /** @type {any} */ + (text2[TEXT_CACHE] ??= text2.nodeValue)) { + text2[TEXT_CACHE] = str; + text2.nodeValue = `${str}`; + } + } + function mount(component2, options) { + return _mount(component2, options); + } + function hydrate(component2, options) { + init_operations(); + options.intro = options.intro ?? false; + const target = options.target; + const was_hydrating = hydrating; + const previous_hydrate_node = hydrate_node; + try { + var anchor = /* @__PURE__ */ get_first_child(target); + while (anchor && (anchor.nodeType !== COMMENT_NODE || /** @type {Comment} */ + anchor.data !== HYDRATION_START)) { + anchor = /* @__PURE__ */ get_next_sibling(anchor); + } + if (!anchor) { + throw HYDRATION_ERROR; + } + set_hydrating(true); + set_hydrate_node( + /** @type {Comment} */ + anchor + ); + const instance = _mount(component2, { ...options, anchor }); + set_hydrating(false); + return ( + /** @type {Exports} */ + instance + ); + } catch (error) { + if (error instanceof Error && error.message.split("\n").some((line) => line.startsWith("https://svelte.dev/e/"))) { + throw error; + } + if (error !== HYDRATION_ERROR) { + console.warn("Failed to hydrate: ", error); + } + if (options.recover === false) { + hydration_failed(); + } + init_operations(); + clear_text_content(target); + set_hydrating(false); + return mount(component2, options); + } finally { + set_hydrating(was_hydrating); + set_hydrate_node(previous_hydrate_node); + } + } + const listeners = /* @__PURE__ */ new Map(); + function _mount(Component, { target, anchor, props = {}, events, context, intro = true, transformError }) { + init_operations(); + var component2 = void 0; + var unmount2 = component_root(() => { + var anchor_node = anchor ?? target.appendChild(create_text()); + boundary( + /** @type {TemplateNode} */ + anchor_node, + { + pending: () => { + } + }, + (anchor_node2) => { + push({}); + var ctx = ( + /** @type {ComponentContext} */ + component_context + ); + if (context) ctx.c = context; + if (events) { + props.$$events = events; + } + if (hydrating) { + assign_nodes( + /** @type {TemplateNode} */ + anchor_node2, + null + ); + } + component2 = Component(anchor_node2, props) || {}; + if (hydrating) { + active_effect.nodes.end = hydrate_node; + if (hydrate_node === null || hydrate_node.nodeType !== COMMENT_NODE || /** @type {Comment} */ + hydrate_node.data !== HYDRATION_END) { + hydration_mismatch(); + throw HYDRATION_ERROR; + } + } + pop(); + }, + transformError + ); + var registered_events = /* @__PURE__ */ new Set(); + var event_handle = (events2) => { + for (var i = 0; i < events2.length; i++) { + var event_name = events2[i]; + if (registered_events.has(event_name)) continue; + registered_events.add(event_name); + var passive = is_passive_event(event_name); + for (const node of [target, document]) { + var counts = listeners.get(node); + if (counts === void 0) { + counts = /* @__PURE__ */ new Map(); + listeners.set(node, counts); + } + var count = counts.get(event_name); + if (count === void 0) { + node.addEventListener(event_name, handle_event_propagation, { passive }); + counts.set(event_name, 1); + } else { + counts.set(event_name, count + 1); + } + } + } + }; + event_handle(array_from(all_registered_events)); + root_event_handles.add(event_handle); + return () => { + for (var event_name of registered_events) { + for (const node of [target, document]) { + var counts = ( + /** @type {Map} */ + listeners.get(node) + ); + var count = ( + /** @type {number} */ + counts.get(event_name) + ); + if (--count == 0) { + node.removeEventListener(event_name, handle_event_propagation); + counts.delete(event_name); + if (counts.size === 0) { + listeners.delete(node); + } + } else { + counts.set(event_name, count); + } + } + } + root_event_handles.delete(event_handle); + if (anchor_node !== anchor) { + anchor_node.parentNode?.removeChild(anchor_node); + } + }; + }); + mounted_components.set(component2, unmount2); + return component2; + } + let mounted_components = /* @__PURE__ */ new WeakMap(); + function unmount(component2, options) { + const fn = mounted_components.get(component2); + if (fn) { + mounted_components.delete(component2); + return fn(options); + } + return Promise.resolve(); + } + class BranchManager { + /** @type {TemplateNode} */ + anchor; + /** @type {Map} */ + #batches = /* @__PURE__ */ new Map(); + /** + * Map of keys to effects that are currently rendered in the DOM. + * These effects are visible and actively part of the document tree. + * Example: + * ``` + * {#if condition} + * foo + * {:else} + * bar + * {/if} + * ``` + * Can result in the entries `true->Effect` and `false->Effect` + * @type {Map} + */ + #onscreen = /* @__PURE__ */ new Map(); + /** + * Similar to #onscreen with respect to the keys, but contains branches that are not yet + * in the DOM, because their insertion is deferred. + * @type {Map} + */ + #offscreen = /* @__PURE__ */ new Map(); + /** + * Keys of effects that are currently outroing + * @type {Set} + */ + #outroing = /* @__PURE__ */ new Set(); + /** + * Whether to pause (i.e. outro) on change, or destroy immediately. + * This is necessary for `` + */ + #transition = true; + /** + * @param {TemplateNode} anchor + * @param {boolean} transition + */ + constructor(anchor, transition = true) { + this.anchor = anchor; + this.#transition = transition; + } + /** + * @param {Batch} batch + */ + #commit = (batch) => { + if (!this.#batches.has(batch)) return; + var key2 = ( + /** @type {Key} */ + this.#batches.get(batch) + ); + var onscreen = this.#onscreen.get(key2); + if (onscreen) { + resume_effect(onscreen); + this.#outroing.delete(key2); + } else { + var offscreen = this.#offscreen.get(key2); + if (offscreen) { + this.#onscreen.set(key2, offscreen.effect); + this.#offscreen.delete(key2); + offscreen.fragment.lastChild.remove(); + this.anchor.before(offscreen.fragment); + onscreen = offscreen.effect; + } + } + for (const [b, k] of this.#batches) { + this.#batches.delete(b); + if (b === batch) { + break; + } + const offscreen2 = this.#offscreen.get(k); + if (offscreen2) { + destroy_effect(offscreen2.effect); + this.#offscreen.delete(k); + } + } + for (const [k, effect2] of this.#onscreen) { + if (k === key2 || this.#outroing.has(k)) continue; + const on_destroy = () => { + const keys = Array.from(this.#batches.values()); + if (keys.includes(k)) { + var fragment = document.createDocumentFragment(); + move_effect(effect2, fragment); + fragment.append(create_text()); + this.#offscreen.set(k, { effect: effect2, fragment }); + } else { + destroy_effect(effect2); + } + this.#outroing.delete(k); + this.#onscreen.delete(k); + }; + if (this.#transition || !onscreen) { + this.#outroing.add(k); + pause_effect(effect2, on_destroy, false); + } else { + on_destroy(); + } + } + }; + /** + * @param {Batch} batch + */ + #discard = (batch) => { + this.#batches.delete(batch); + const keys = Array.from(this.#batches.values()); + for (const [k, branch2] of this.#offscreen) { + if (!keys.includes(k)) { + destroy_effect(branch2.effect); + this.#offscreen.delete(k); + } + } + }; + /** + * + * @param {any} key + * @param {null | ((target: TemplateNode) => void)} fn + */ + ensure(key2, fn) { + var batch = ( + /** @type {Batch} */ + current_batch + ); + var defer = should_defer_append(); + if (fn && !this.#onscreen.has(key2) && !this.#offscreen.has(key2)) { + if (defer) { + var fragment = document.createDocumentFragment(); + var target = create_text(); + fragment.append(target); + this.#offscreen.set(key2, { + effect: branch(() => fn(target)), + fragment + }); + } else { + this.#onscreen.set( + key2, + branch(() => fn(this.anchor)) + ); + } + } + this.#batches.set(batch, key2); + if (defer) { + for (const [k, effect2] of this.#onscreen) { + if (k === key2) { + batch.unskip_effect(effect2); + } else { + batch.skip_effect(effect2); + } + } + for (const [k, branch2] of this.#offscreen) { + if (k === key2) { + batch.unskip_effect(branch2.effect); + } else { + batch.skip_effect(branch2.effect); + } + } + batch.oncommit(this.#commit); + batch.ondiscard(this.#discard); + } else { + if (hydrating) { + this.anchor = hydrate_node; + } + this.#commit(batch); + } + } + } + function snippet(node, get_snippet, ...args) { + var branches = new BranchManager(node); + block(() => { + const snippet2 = get_snippet() ?? null; + branches.ensure(snippet2, snippet2 && ((anchor) => snippet2(anchor, ...args))); + }, EFFECT_TRANSPARENT); + } + function onMount(fn) { + if (component_context === null) { + lifecycle_outside_component(); + } + { + user_effect(() => { + const cleanup = untrack(fn); + if (typeof cleanup === "function") return ( + /** @type {() => void} */ + cleanup + ); + }); + } + } + function if_block(node, fn, elseif = false) { + var marker; + if (hydrating) { + marker = hydrate_node; + hydrate_next(); + } + var branches = new BranchManager(node); + var flags2 = elseif ? EFFECT_TRANSPARENT : 0; + function update_branch(key2, fn2) { + if (hydrating) { + var data = read_hydration_instruction( + /** @type {TemplateNode} */ + marker + ); + if (key2 !== parseInt(data.substring(1))) { + var anchor = skip_nodes(); + set_hydrate_node(anchor); + branches.anchor = anchor; + set_hydrating(false); + branches.ensure(key2, fn2); + set_hydrating(true); + return; + } + } + branches.ensure(key2, fn2); + } + block(() => { + var has_branch = false; + fn((fn2, key2 = 0) => { + has_branch = true; + update_branch(key2, fn2); + }); + if (!has_branch) { + update_branch(-1, null); + } + }, flags2); + } + const NAN = /* @__PURE__ */ Symbol("NaN"); + function key(node, get_key, render_fn) { + if (hydrating) { + hydrate_next(); + } + var branches = new BranchManager(node); + block(() => { + var key2 = get_key(); + if (key2 !== key2) { + key2 = /** @type {any} */ + NAN; + } + branches.ensure(key2, render_fn); + }); + } + function html(node, get_value, is_controlled = false, svg = false, mathml = false, skip_warning = false) { + var anchor = node; + var value = ""; + if (is_controlled) { + var parent_node = ( + /** @type {Element} */ + node + ); + if (hydrating) { + anchor = set_hydrate_node(/* @__PURE__ */ get_first_child(parent_node)); + } + } + template_effect(() => { + var effect2 = ( + /** @type {Effect} */ + active_effect + ); + if (value === (value = get_value() ?? "")) { + if (hydrating) hydrate_next(); + return; + } + if (is_controlled && !hydrating) { + effect2.nodes = null; + parent_node.innerHTML = /** @type {string} */ + value; + if (value !== "") { + assign_nodes( + /** @type {TemplateNode} */ + /* @__PURE__ */ get_first_child(parent_node), + /** @type {TemplateNode} */ + parent_node.lastChild + ); + } + return; + } + if (effect2.nodes !== null) { + remove_effect_dom( + effect2.nodes.start, + /** @type {TemplateNode} */ + effect2.nodes.end + ); + effect2.nodes = null; + } + if (value === "") return; + if (hydrating) { + hydrate_node.data; + var next2 = hydrate_next(); + var last = next2; + while (next2 !== null && (next2.nodeType !== COMMENT_NODE || /** @type {Comment} */ + next2.data !== "")) { + last = next2; + next2 = /* @__PURE__ */ get_next_sibling(next2); + } + if (next2 === null) { + hydration_mismatch(); + throw HYDRATION_ERROR; + } + assign_nodes(hydrate_node, last); + anchor = set_hydrate_node(next2); + return; + } + var ns = svg ? NAMESPACE_SVG : mathml ? NAMESPACE_MATHML : void 0; + var wrapper = ( + /** @type {HTMLTemplateElement | SVGElement | MathMLElement} */ + create_element(svg ? "svg" : mathml ? "math" : "template", ns) + ); + wrapper.innerHTML = /** @type {any} */ + value; + var node2 = svg || mathml ? wrapper : ( + /** @type {HTMLTemplateElement} */ + wrapper.content + ); + assign_nodes( + /** @type {TemplateNode} */ + /* @__PURE__ */ get_first_child(node2), + /** @type {TemplateNode} */ + node2.lastChild + ); + if (svg || mathml) { + while (/* @__PURE__ */ get_first_child(node2)) { + anchor.before( + /** @type {TemplateNode} */ + /* @__PURE__ */ get_first_child(node2) + ); + } + } else { + anchor.before(node2); + } + }); + } + function component(node, get_component, render_fn) { + var hydration_start_node; + if (hydrating) { + hydration_start_node = hydrate_node; + hydrate_next(); + } + var branches = new BranchManager(node); + block(() => { + var component2 = get_component() ?? null; + if (hydrating) { + var data = read_hydration_instruction( + /** @type {TemplateNode} */ + hydration_start_node + ); + var server_had_component = data === HYDRATION_START; + var client_has_component = component2 !== null; + if (server_had_component !== client_has_component) { + var anchor = skip_nodes(); + set_hydrate_node(anchor); + branches.anchor = anchor; + set_hydrating(false); + branches.ensure(component2, component2 && ((target) => render_fn(target, component2))); + set_hydrating(true); + return; + } + } + branches.ensure(component2, component2 && ((target) => render_fn(target, component2))); + }, EFFECT_TRANSPARENT); + } + function attach(node, get_fn) { + var fn = void 0; + var e; + managed(() => { + if (fn !== (fn = get_fn())) { + if (e) { + destroy_effect(e); + e = null; + } + if (fn) { + e = branch(() => { + effect(() => ( + /** @type {(node: Element) => void} */ + fn(node) + )); + }); + } + } + }); + } + function r(e) { + var t, f, n = ""; + if ("string" == typeof e || "number" == typeof e) n += e; + else if ("object" == typeof e) if (Array.isArray(e)) { + var o = e.length; + for (t = 0; t < o; t++) e[t] && (f = r(e[t])) && (n && (n += " "), n += f); + } else for (f in e) e[f] && (n && (n += " "), n += f); + return n; + } + function clsx$1() { + for (var e, t, f = 0, n = "", o = arguments.length; f < o; f++) (e = arguments[f]) && (t = r(e)) && (n && (n += " "), n += t); + return n; + } + function clsx(value) { + if (typeof value === "object") { + return clsx$1(value); + } else { + return value ?? ""; + } + } + const whitespace = [..." \n\r\f \v\uFEFF"]; + function to_class(value, hash, directives) { + var classname = value == null ? "" : "" + value; + if (directives) { + for (var key2 of Object.keys(directives)) { + if (directives[key2]) { + classname = classname ? classname + " " + key2 : key2; + } else if (classname.length) { + var len = key2.length; + var a = 0; + while ((a = classname.indexOf(key2, a)) >= 0) { + var b = a + len; + if ((a === 0 || whitespace.includes(classname[a - 1])) && (b === classname.length || whitespace.includes(classname[b]))) { + classname = (a === 0 ? "" : classname.substring(0, a)) + classname.substring(b + 1); + } else { + a = b; + } + } + } + } + } + return classname === "" ? null : classname; + } + function append_styles(styles, important = false) { + var separator = important ? " !important;" : ";"; + var css2 = ""; + for (var key2 of Object.keys(styles)) { + var value = styles[key2]; + if (value != null && value !== "") { + css2 += " " + key2 + ": " + value + separator; + } + } + return css2; + } + function to_css_name(name) { + if (name[0] !== "-" || name[1] !== "-") { + return name.toLowerCase(); + } + return name; + } + function to_style(value, styles) { + if (styles) { + var new_style = ""; + var normal_styles; + var important_styles; + if (Array.isArray(styles)) { + normal_styles = styles[0]; + important_styles = styles[1]; + } else { + normal_styles = styles; + } + if (value) { + value = String(value).replaceAll(/\s*\/\*.*?\*\/\s*/g, "").trim(); + var in_str = false; + var in_apo = 0; + var in_comment = false; + var reserved_names = []; + if (normal_styles) { + reserved_names.push(...Object.keys(normal_styles).map(to_css_name)); + } + if (important_styles) { + reserved_names.push(...Object.keys(important_styles).map(to_css_name)); + } + var start_index = 0; + var name_index = -1; + const len = value.length; + for (var i = 0; i < len; i++) { + var c = value[i]; + if (in_comment) { + if (c === "/" && value[i - 1] === "*") { + in_comment = false; + } + } else if (in_str) { + if (in_str === c) { + in_str = false; + } + } else if (c === "/" && value[i + 1] === "*") { + in_comment = true; + } else if (c === '"' || c === "'") { + in_str = c; + } else if (c === "(") { + in_apo++; + } else if (c === ")") { + in_apo--; + } + if (!in_comment && in_str === false && in_apo === 0) { + if (c === ":" && name_index === -1) { + name_index = i; + } else if (c === ";" || i === len - 1) { + if (name_index !== -1) { + var name = to_css_name(value.substring(start_index, name_index).trim()); + if (!reserved_names.includes(name)) { + if (c !== ";") { + i++; + } + var property = value.substring(start_index, i).trim(); + new_style += " " + property + ";"; + } + } + start_index = i + 1; + name_index = -1; + } + } + } + } + if (normal_styles) { + new_style += append_styles(normal_styles); + } + if (important_styles) { + new_style += append_styles(important_styles, true); + } + new_style = new_style.trim(); + return new_style === "" ? null : new_style; + } + return value == null ? null : String(value); + } + function set_class(dom, is_html, value, hash, prev_classes, next_classes) { + var prev = ( + /** @type {any} */ + dom[CLASS_CACHE] + ); + if (hydrating || prev !== value || prev === void 0) { + var next_class_name = to_class(value, hash, next_classes); + if (!hydrating || next_class_name !== dom.getAttribute("class")) { + if (next_class_name == null) { + dom.removeAttribute("class"); + } else if (is_html) { + dom.className = next_class_name; + } else { + dom.setAttribute("class", next_class_name); + } + } + dom[CLASS_CACHE] = value; + } else if (next_classes && prev_classes !== next_classes) { + for (var key2 in next_classes) { + var is_present = !!next_classes[key2]; + if (prev_classes == null || is_present !== !!prev_classes[key2]) { + dom.classList.toggle(key2, is_present); + } + } + } + return next_classes; + } + function update_styles(dom, prev = {}, next2, priority) { + for (var key2 in next2) { + var value = next2[key2]; + if (prev[key2] !== value) { + if (next2[key2] == null) { + dom.style.removeProperty(key2); + } else { + dom.style.setProperty(key2, value, priority); + } + } + } + } + function set_style(dom, value, prev_styles, next_styles) { + var prev = ( + /** @type {any} */ + dom[STYLE_CACHE] + ); + if (hydrating || prev !== value) { + var next_style_attr = to_style(value, next_styles); + if (!hydrating || next_style_attr !== dom.getAttribute("style")) { + if (next_style_attr == null) { + dom.removeAttribute("style"); + } else { + dom.style.cssText = next_style_attr; + } + } + dom[STYLE_CACHE] = value; + } else if (next_styles) { + if (Array.isArray(next_styles)) { + update_styles(dom, prev_styles?.[0], next_styles[0]); + update_styles(dom, prev_styles?.[1], next_styles[1], "important"); + } else { + update_styles(dom, prev_styles, next_styles); + } + } + return next_styles; + } + function select_option(select, value, mounting = false) { + if (select.multiple) { + if (value == void 0) { + return; + } + if (!is_array(value)) { + return select_multiple_invalid_value(); + } + for (var option of select.options) { + option.selected = value.includes(get_option_value(option)); + } + return; + } + for (option of select.options) { + var option_value = get_option_value(option); + if (is(option_value, value)) { + option.selected = true; + return; + } + } + if (!mounting || value !== void 0) { + select.selectedIndex = -1; + } + } + function init_select(select) { + var observer = new MutationObserver(() => { + select_option(select, select.__value); + }); + observer.observe(select, { + // Listen to option element changes + childList: true, + subtree: true, + // because of + // Listen to option element value attribute changes + // (doesn't get notified of select value changes, + // because that property is not reflected as an attribute) + attributes: true, + attributeFilter: ["value"] + }); + teardown(() => { + observer.disconnect(); + }); + } + function get_option_value(option) { + if ("__value" in option) { + return option.__value; + } else { + return option.value; + } + } + const CLASS = /* @__PURE__ */ Symbol("class"); + const STYLE = /* @__PURE__ */ Symbol("style"); + const IS_CUSTOM_ELEMENT = /* @__PURE__ */ Symbol("is custom element"); + const IS_HTML = /* @__PURE__ */ Symbol("is html"); + const LINK_TAG = IS_XHTML ? "link" : "LINK"; + const INPUT_TAG = IS_XHTML ? "input" : "INPUT"; + const OPTION_TAG = IS_XHTML ? "option" : "OPTION"; + const SELECT_TAG = IS_XHTML ? "select" : "SELECT"; + const PROGRESS_TAG = IS_XHTML ? "progress" : "PROGRESS"; + function remove_input_defaults(input) { + if (!hydrating) return; + var already_removed = false; + var remove_defaults = () => { + if (already_removed) return; + already_removed = true; + if (input.hasAttribute("value")) { + var value = input.value; + set_attribute(input, "value", null); + input.value = value; + } + if (input.hasAttribute("checked")) { + var checked = input.checked; + set_attribute(input, "checked", null); + input.checked = checked; + } + }; + input[FORM_RESET_HANDLER] = remove_defaults; + queue_micro_task(remove_defaults); + add_form_reset_listener(); + } + function set_value(element, value) { + var attributes = get_attributes(element); + if (attributes.value === (attributes.value = // treat null and undefined the same for the initial value + value ?? void 0) || // @ts-expect-error + // `progress` elements always need their value set when it's `0` + element.value === value && (value !== 0 || element.nodeName !== PROGRESS_TAG)) { + return; + } + element.value = value ?? ""; + } + function set_selected(element, selected) { + if (selected) { + if (!element.hasAttribute("selected")) { + element.setAttribute("selected", ""); + } + } else { + element.removeAttribute("selected"); + } + } + function set_attribute(element, attribute, value, skip_warning) { + var attributes = get_attributes(element); + if (hydrating) { + attributes[attribute] = element.getAttribute(attribute); + if (attribute === "src" || attribute === "srcset" || attribute === "href" && element.nodeName === LINK_TAG) { + return; + } + } + if (attributes[attribute] === (attributes[attribute] = value)) return; + if (attribute === "loading") { + element[LOADING_ATTR_SYMBOL] = value; + } + if (value == null) { + element.removeAttribute(attribute); + } else if (typeof value !== "string" && get_setters(element).includes(attribute)) { + element[attribute] = value; + } else { + element.setAttribute(attribute, value); + } + } + function set_attributes(element, prev, next2, css_hash, should_remove_defaults = false, skip_warning = false) { + if (hydrating && should_remove_defaults && element.nodeName === INPUT_TAG) { + var input = ( + /** @type {HTMLInputElement} */ + element + ); + var attribute = input.type === "checkbox" ? "defaultChecked" : "defaultValue"; + if (!(attribute in next2)) { + remove_input_defaults(input); + } + } + var attributes = get_attributes(element); + var is_custom_element = attributes[IS_CUSTOM_ELEMENT]; + var preserve_attribute_case = !attributes[IS_HTML]; + let is_hydrating_custom_element = hydrating && is_custom_element; + if (is_hydrating_custom_element) { + set_hydrating(false); + } + var current = prev || {}; + var is_option_element = element.nodeName === OPTION_TAG; + for (var key2 in prev) { + if (!(key2 in next2)) { + next2[key2] = null; + } + } + if (next2.class) { + next2.class = clsx(next2.class); + } else if (next2[CLASS]) { + next2.class = null; + } + if (next2[STYLE]) { + next2.style ??= null; + } + var setters = get_setters(element); + for (const key3 in next2) { + let value = next2[key3]; + if (is_option_element && key3 === "value" && value == null) { + element.value = element.__value = ""; + current[key3] = value; + continue; + } + if (key3 === "class") { + var is_html = element.namespaceURI === "http://www.w3.org/1999/xhtml"; + set_class(element, is_html, value, css_hash, prev?.[CLASS], next2[CLASS]); + current[key3] = value; + current[CLASS] = next2[CLASS]; + continue; + } + if (key3 === "style") { + set_style(element, value, prev?.[STYLE], next2[STYLE]); + current[key3] = value; + current[STYLE] = next2[STYLE]; + continue; + } + var prev_value = current[key3]; + if (value === prev_value && !(value === void 0 && element.hasAttribute(key3))) { + continue; + } + current[key3] = value; + var prefix = key3[0] + key3[1]; + if (prefix === "$$") continue; + if (prefix === "on") { + const opts = {}; + const event_handle_key = "$$" + key3; + let event_name = key3.slice(2); + var is_delegated = can_delegate_event(event_name); + if (is_capture_event(event_name)) { + event_name = event_name.slice(0, -7); + opts.capture = true; + } + if (!is_delegated && prev_value) { + if (value != null) continue; + element.removeEventListener(event_name, current[event_handle_key], opts); + current[event_handle_key] = null; + } + if (is_delegated) { + delegated(event_name, element, value); + delegate([event_name]); + } else if (value != null) { + let handle = function(evt) { + current[key3].call(this, evt); + }; + current[event_handle_key] = create_event(event_name, element, handle, opts); + } + } else if (key3 === "style") { + set_attribute(element, key3, value); + } else if (key3 === "autofocus") { + autofocus( + /** @type {HTMLElement} */ + element, + Boolean(value) + ); + } else if (!is_custom_element && (key3 === "__value" || key3 === "value" && value != null)) { + element.value = element.__value = value; + } else if (key3 === "selected" && is_option_element) { + set_selected( + /** @type {HTMLOptionElement} */ + element, + value + ); + } else { + var name = key3; + if (!preserve_attribute_case) { + name = normalize_attribute(name); + } + var is_default = name === "defaultValue" || name === "defaultChecked"; + if (value == null && !is_custom_element && !is_default) { + attributes[key3] = null; + if (name === "value" || name === "checked") { + let input2 = ( + /** @type {HTMLInputElement} */ + element + ); + const use_default = prev === void 0; + if (name === "value") { + let previous = input2.defaultValue; + input2.removeAttribute(name); + input2.defaultValue = previous; + input2.value = input2.__value = use_default ? previous : null; + } else { + let previous = input2.defaultChecked; + input2.removeAttribute(name); + input2.defaultChecked = previous; + input2.checked = use_default ? previous : false; + } + } else { + element.removeAttribute(key3); + } + } else if (is_default || setters.includes(name) && (is_custom_element || typeof value !== "string")) { + element[name] = value; + if (name in attributes) attributes[name] = UNINITIALIZED; + } else if (typeof value !== "function") { + set_attribute(element, name, value); + } + } + } + if (is_hydrating_custom_element) { + set_hydrating(true); + } + return current; + } + function attribute_effect(element, fn, sync = [], async = [], blockers = [], css_hash, should_remove_defaults = false, skip_warning = false) { + flatten(blockers, sync, async, (values) => { + var prev = void 0; + var effects = {}; + var is_select = element.nodeName === SELECT_TAG; + var inited = false; + managed(() => { + var next2 = fn(...values.map(get)); + var current = set_attributes( + element, + prev, + next2, + css_hash, + should_remove_defaults, + skip_warning + ); + if (inited && is_select && "value" in next2) { + select_option( + /** @type {HTMLSelectElement} */ + element, + next2.value + ); + } + for (let symbol of Object.getOwnPropertySymbols(effects)) { + if (!next2[symbol]) destroy_effect(effects[symbol]); + } + for (let symbol of Object.getOwnPropertySymbols(next2)) { + var n = next2[symbol]; + if (symbol.description === ATTACHMENT_KEY && (!prev || n !== prev[symbol])) { + if (effects[symbol]) destroy_effect(effects[symbol]); + effects[symbol] = branch(() => attach(element, () => n)); + } + current[symbol] = n; + } + prev = current; + }); + if (is_select) { + var select = ( + /** @type {HTMLSelectElement} */ + element + ); + effect(() => { + select_option( + select, + /** @type {Record} */ + prev.value, + true + ); + init_select(select); + }); + } + inited = true; + }); + } + function get_attributes(element) { + return ( + /** @type {Record} **/ + /** @type {any} */ + element[ATTRIBUTES_CACHE] ??= { + [IS_CUSTOM_ELEMENT]: element.nodeName.includes("-"), + [IS_HTML]: element.namespaceURI === NAMESPACE_HTML + } + ); + } + var setters_cache = /* @__PURE__ */ new Map(); + function get_setters(element) { + var cache_key = element.getAttribute("is") || element.nodeName; + var setters = setters_cache.get(cache_key); + if (setters) return setters; + setters_cache.set(cache_key, setters = []); + var descriptors; + var proto = element; + var element_proto = Element.prototype; + while (element_proto !== proto) { + descriptors = get_descriptors(proto); + for (var key2 in descriptors) { + if (descriptors[key2].set && // better safe than sorry, we don't want spread attributes to mess with HTML content + key2 !== "innerHTML" && key2 !== "textContent" && key2 !== "innerText") { + setters.push(key2); + } + } + proto = get_prototype_of(proto); + } + return setters; + } + function bind_value(input, get2, set2 = get2) { + var batches = /* @__PURE__ */ new WeakSet(); + listen_to_event_and_reset_event(input, "input", async (is_reset) => { + var value = is_reset ? input.defaultValue : input.value; + value = is_numberlike_input(input) ? to_number(value) : value; + set2(value); + if (current_batch !== null) { + batches.add(current_batch); + } + await tick(); + if (value !== (value = get2())) { + var start = input.selectionStart; + var end = input.selectionEnd; + var length = input.value.length; + input.value = value ?? ""; + if (end !== null) { + var new_length = input.value.length; + if (start === end && end === length && new_length > length) { + input.selectionStart = new_length; + input.selectionEnd = new_length; + } else { + input.selectionStart = start; + input.selectionEnd = Math.min(end, new_length); + } + } + } + }); + if ( + // If we are hydrating and the value has since changed, + // then use the updated value from the input instead. + hydrating && input.defaultValue !== input.value || // If defaultValue is set, then value == defaultValue + // TODO Svelte 6: remove input.value check and set to empty string? + untrack(get2) == null && input.value + ) { + set2(is_numberlike_input(input) ? to_number(input.value) : input.value); + if (current_batch !== null) { + batches.add(current_batch); + } + } + render_effect(() => { + var value = get2(); + if (input === document.activeElement) { + var batch = ( + /** @type {Batch} */ + current_batch + ); + if (batches.has(batch)) { + return; + } + } + if (is_numberlike_input(input) && value === to_number(input.value)) { + return; + } + if (input.type === "date" && !value && !input.value) { + return; + } + if (value !== input.value) { + input.value = value ?? ""; + } + }); + } + function is_numberlike_input(input) { + var type = input.type; + return type === "number" || type === "range"; + } + function to_number(value) { + return value === "" ? null : +value; + } + function is_bound_this(bound_value, element_or_component) { + return bound_value === element_or_component || bound_value?.[STATE_SYMBOL] === element_or_component; + } + function bind_this(element_or_component = {}, update, get_value, get_parts) { + var component_effect = ( + /** @type {ComponentContext} */ + component_context.r + ); + var parent = ( + /** @type {Effect} */ + active_effect + ); + effect(() => { + var old_parts; + var parts; + render_effect(() => { + old_parts = parts; + parts = []; + untrack(() => { + if (!is_bound_this(get_value(...parts), element_or_component)) { + update(element_or_component, ...parts); + if (old_parts && is_bound_this(get_value(...old_parts), element_or_component)) { + update(null, ...old_parts); + } + } + }); + }); + return () => { + let p = parent; + while (p !== component_effect && p.parent !== null && p.parent.f & DESTROYING) { + p = p.parent; + } + const teardown2 = () => { + if (parts && is_bound_this(get_value(...parts), element_or_component)) { + update(null, ...parts); + } + }; + const original_teardown = p.teardown; + p.teardown = () => { + teardown2(); + original_teardown?.(); + }; + }; + }); + return element_or_component; + } + const rest_props_handler = { + get(target, key2) { + if (target.exclude.includes(key2)) return; + return target.props[key2]; + }, + set(target, key2) { + return false; + }, + getOwnPropertyDescriptor(target, key2) { + if (target.exclude.includes(key2)) return; + if (key2 in target.props) { + return { + enumerable: true, + configurable: true, + value: target.props[key2] + }; + } + }, + has(target, key2) { + if (target.exclude.includes(key2)) return false; + return key2 in target.props; + }, + ownKeys(target) { + return Reflect.ownKeys(target.props).filter((key2) => !target.exclude.includes(key2)); + } + }; + // @__NO_SIDE_EFFECTS__ + function rest_props(props, exclude, name) { + return new Proxy( + { props, exclude }, + rest_props_handler + ); + } + function prop(props, key2, flags2, fallback) { + var fallback_value = ( + /** @type {V} */ + fallback + ); + var fallback_dirty = true; + var get_fallback = () => { + if (fallback_dirty) { + fallback_dirty = false; + fallback_value = /** @type {V} */ + fallback; + } + return fallback_value; + }; + var initial_value; + { + initial_value = /** @type {V} */ + props[key2]; + } + if (initial_value === void 0 && fallback !== void 0) { + initial_value = get_fallback(); + } + var getter; + { + getter = () => { + var value = ( + /** @type {V} */ + props[key2] + ); + if (value === void 0) return get_fallback(); + fallback_dirty = true; + return value; + }; + } + var overridden = false; + var d = /* @__PURE__ */ derived(() => { + overridden = false; + return getter(); + }); + var parent_effect = ( + /** @type {Effect} */ + active_effect + ); + return ( + /** @type {() => V} */ + (function(value, mutation) { + if (arguments.length > 0) { + const new_value = mutation ? get(d) : value; + set(d, new_value); + overridden = true; + if (fallback_value !== void 0) { + fallback_value = new_value; + } + return value; + } + if (is_destroying_effect && overridden || (parent_effect.f & DESTROYED) !== 0) { + return d.v; + } + return get(d); + }) + ); + } + function createClassComponent(options) { + return new Svelte4Component(options); + } + class Svelte4Component { + /** @type {any} */ + #events; + /** @type {Record} */ + #instance; + /** + * @param {ComponentConstructorOptions & { + * component: any; + * }} options + */ + constructor(options) { + var sources = /* @__PURE__ */ new Map(); + var add_source = (key2, value) => { + var s = /* @__PURE__ */ mutable_source(value, false, false); + sources.set(key2, s); + return s; + }; + const props = new Proxy( + { ...options.props || {}, $$events: {} }, + { + get(target, prop2) { + return get(sources.get(prop2) ?? add_source(prop2, Reflect.get(target, prop2))); + }, + has(target, prop2) { + if (prop2 === LEGACY_PROPS) return true; + get(sources.get(prop2) ?? add_source(prop2, Reflect.get(target, prop2))); + return Reflect.has(target, prop2); + }, + set(target, prop2, value) { + set(sources.get(prop2) ?? add_source(prop2, value), value); + return Reflect.set(target, prop2, value); + } + } + ); + this.#instance = (options.hydrate ? hydrate : mount)(options.component, { + target: options.target, + anchor: options.anchor, + props, + context: options.context, + intro: options.intro ?? false, + recover: options.recover, + transformError: options.transformError + }); + if (!options?.props?.$$host || options.sync === false) { + flushSync(); + } + this.#events = props.$$events; + for (const key2 of Object.keys(this.#instance)) { + if (key2 === "$set" || key2 === "$destroy" || key2 === "$on") continue; + define_property(this, key2, { + get() { + return this.#instance[key2]; + }, + /** @param {any} value */ + set(value) { + this.#instance[key2] = value; + }, + enumerable: true + }); + } + this.#instance.$set = /** @param {Record} next */ + (next2) => { + Object.assign(props, next2); + }; + this.#instance.$destroy = () => { + unmount(this.#instance); + }; + } + /** @param {Record} props */ + $set(props) { + this.#instance.$set(props); + } + /** + * @param {string} event + * @param {(...args: any[]) => any} callback + * @returns {any} + */ + $on(event2, callback) { + this.#events[event2] = this.#events[event2] || []; + const cb = (...args) => callback.call(this, ...args); + this.#events[event2].push(cb); + return () => { + this.#events[event2] = this.#events[event2].filter( + /** @param {any} fn */ + (fn) => fn !== cb + ); + }; + } + $destroy() { + this.#instance.$destroy(); + } + } + let SvelteElement = class { + }; + if (typeof HTMLElement === "function") { + SvelteElement = class extends HTMLElement { + /** The Svelte component constructor */ + $$ctor; + /** Slots */ + $$s; + /** @type {any} The Svelte component instance */ + $$c; + /** Whether or not the custom element is connected */ + $$cn = false; + /** @type {Record} Component props data */ + $$d = {}; + /** `true` if currently in the process of reflecting component props back to attributes */ + $$r = false; + /** @type {Record} Props definition (name, reflected, type etc) */ + $$p_d = {}; + /** @type {Record} Event listeners */ + $$l = {}; + /** @type {Map} Event listener unsubscribe functions */ + $$l_u = /* @__PURE__ */ new Map(); + /** @type {any} The managed render effect for reflecting attributes */ + $$me; + /** @type {ShadowRoot | null} The ShadowRoot of the custom element */ + $$shadowRoot = null; + /** + * @param {*} $$componentCtor + * @param {*} $$slots + * @param {ShadowRootInit | undefined} shadow_root_init + */ + constructor($$componentCtor, $$slots, shadow_root_init) { + super(); + this.$$ctor = $$componentCtor; + this.$$s = $$slots; + if (shadow_root_init) { + this.$$shadowRoot = this.attachShadow(shadow_root_init); + } + } + /** + * @param {string} type + * @param {EventListenerOrEventListenerObject} listener + * @param {boolean | AddEventListenerOptions} [options] + */ + addEventListener(type, listener, options) { + this.$$l[type] = this.$$l[type] || []; + this.$$l[type].push(listener); + if (this.$$c) { + const unsub = this.$$c.$on(type, listener); + this.$$l_u.set(listener, unsub); + } + super.addEventListener(type, listener, options); + } + /** + * @param {string} type + * @param {EventListenerOrEventListenerObject} listener + * @param {boolean | AddEventListenerOptions} [options] + */ + removeEventListener(type, listener, options) { + super.removeEventListener(type, listener, options); + if (this.$$c) { + const unsub = this.$$l_u.get(listener); + if (unsub) { + unsub(); + this.$$l_u.delete(listener); + } + } + } + async connectedCallback() { + this.$$cn = true; + if (!this.$$c) { + let create_slot = function(name) { + return (anchor) => { + const slot = create_element("slot"); + if (name !== "default") slot.name = name; + append(anchor, slot); + }; + }; + await Promise.resolve(); + if (!this.$$cn || this.$$c) { + return; + } + const $$slots = {}; + const existing_slots = get_custom_elements_slots(this); + for (const name of this.$$s) { + if (name in existing_slots) { + if (name === "default" && !this.$$d.children) { + this.$$d.children = create_slot(name); + $$slots.default = true; + } else { + $$slots[name] = create_slot(name); + } + } + } + for (const attribute of this.attributes) { + const name = this.$$g_p(attribute.name); + if (!(name in this.$$d)) { + this.$$d[name] = get_custom_element_value(name, attribute.value, this.$$p_d, "toProp"); + } + } + for (const key2 in this.$$p_d) { + if (!(key2 in this.$$d) && this[key2] !== void 0) { + this.$$d[key2] = this[key2]; + delete this[key2]; + } + } + this.$$c = createClassComponent({ + component: this.$$ctor, + target: this.$$shadowRoot || this, + props: { + ...this.$$d, + $$slots, + $$host: this + } + }); + this.$$me = effect_root(() => { + render_effect(() => { + this.$$r = true; + for (const key2 of object_keys(this.$$c)) { + if (!this.$$p_d[key2]?.reflect) continue; + this.$$d[key2] = this.$$c[key2]; + const attribute_value = get_custom_element_value( + key2, + this.$$d[key2], + this.$$p_d, + "toAttribute" + ); + if (attribute_value == null) { + this.removeAttribute(this.$$p_d[key2].attribute || key2); + } else { + this.setAttribute(this.$$p_d[key2].attribute || key2, attribute_value); + } + } + this.$$r = false; + }); + }); + for (const type in this.$$l) { + for (const listener of this.$$l[type]) { + const unsub = this.$$c.$on(type, listener); + this.$$l_u.set(listener, unsub); + } + } + this.$$l = {}; + } + } + // We don't need this when working within Svelte code, but for compatibility of people using this outside of Svelte + // and setting attributes through setAttribute etc, this is helpful + /** + * @param {string} attr + * @param {string} _oldValue + * @param {string} newValue + */ + attributeChangedCallback(attr, _oldValue, newValue) { + if (this.$$r) return; + attr = this.$$g_p(attr); + this.$$d[attr] = get_custom_element_value(attr, newValue, this.$$p_d, "toProp"); + this.$$c?.$set({ [attr]: this.$$d[attr] }); + } + disconnectedCallback() { + this.$$cn = false; + Promise.resolve().then(() => { + if (!this.$$cn && this.$$c) { + this.$$c.$destroy(); + this.$$me(); + this.$$c = void 0; + } + }); + } + /** + * @param {string} attribute_name + */ + $$g_p(attribute_name) { + return object_keys(this.$$p_d).find( + (key2) => this.$$p_d[key2].attribute === attribute_name || !this.$$p_d[key2].attribute && key2.toLowerCase() === attribute_name + ) || attribute_name; + } + }; + } + function get_custom_element_value(prop2, value, props_definition, transform) { + const type = props_definition[prop2]?.type; + value = type === "Boolean" && typeof value !== "boolean" ? value != null : value; + if (!transform || !props_definition[prop2]) { + return value; + } else if (transform === "toAttribute") { + switch (type) { + case "Object": + case "Array": + return value == null ? null : JSON.stringify(value); + case "Boolean": + return value ? "" : null; + case "Number": + return value == null ? null : value; + default: + return value; + } + } else { + switch (type) { + case "Object": + case "Array": + return value && JSON.parse(value); + case "Boolean": + return value; + // conversion already handled above + case "Number": + return value != null ? +value : value; + default: + return value; + } + } + } + function get_custom_elements_slots(element) { + const result = {}; + element.childNodes.forEach((node) => { + result[ + /** @type {Element} node */ + node.slot || "default" + ] = true; + }); + return result; + } + function create_custom_element(Component, props_definition, slots, exports$1, shadow_root_init, extend) { + let Class = class extends SvelteElement { + constructor() { + super(Component, slots, shadow_root_init); + this.$$p_d = props_definition; + } + static get observedAttributes() { + return object_keys(props_definition).map( + (key2) => (props_definition[key2].attribute || key2).toLowerCase() + ); + } + }; + object_keys(props_definition).forEach((prop2) => { + define_property(Class.prototype, prop2, { + get() { + return this.$$c && prop2 in this.$$c ? this.$$c[prop2] : this.$$d[prop2]; + }, + set(value) { + value = get_custom_element_value(prop2, value, props_definition); + this.$$d[prop2] = value; + var component2 = this.$$c; + if (component2) { + var setter = get_descriptor(component2, prop2)?.get; + if (setter) { + component2[prop2] = value; + } else { + component2.$set({ [prop2]: value }); + } + } + } + }); + }); + exports$1.forEach((property) => { + define_property(Class.prototype, property, { + get() { + return this.$$c?.[property]; + } + }); + }); + Component.element = /** @type {any} */ + Class; + return Class; + } + var root$7 = /* @__PURE__ */ from_html(`
`); + function Checkbox($$anchor, $$props) { + push($$props, true); + let loading = prop($$props, "loading"), rest = /* @__PURE__ */ rest_props($$props, ["$$slots", "$$events", "$$legacy", "$$host", "loading"]); + let inputEl; + function onClick() { + inputEl?.click(); + } + var $$exports = { + get loading() { + return loading(); + }, + set loading($$value) { + loading($$value); + flushSync(); + } + }; + var div = root$7(); + var input = child(div); + attribute_effect(input, () => ({ type: "checkbox", ...rest }), void 0, void 0, void 0, void 0, true); + bind_this(input, ($$value) => inputEl = $$value, () => inputEl); + var svg = sibling(input, 2); + next(2); + reset(div); + template_effect(() => set_attribute(div, "data-loading", loading())); + delegated("click", svg, onClick); + append($$anchor, div); + return pop($$exports); + } + delegate(["click"]); + create_custom_element(Checkbox, { loading: {} }, [], [], { mode: "open" }); + var root$6 = /* @__PURE__ */ from_html(`
`); + function CheckboxNative($$anchor, $$props) { + push($$props, true); + let loading = prop($$props, "loading"), rest = /* @__PURE__ */ rest_props($$props, ["$$slots", "$$events", "$$legacy", "$$host", "loading"]); + var $$exports = { + get loading() { + return loading(); + }, + set loading($$value) { + loading($$value); + flushSync(); + } + }; + var div = root$6(); + var input = child(div); + attribute_effect(input, () => ({ type: "checkbox", ...rest }), void 0, void 0, void 0, void 0, true); + next(2); + reset(div); + template_effect(() => set_attribute(div, "data-loading", loading())); + append($$anchor, div); + return pop($$exports); + } + create_custom_element(CheckboxNative, { loading: {} }, [], [], { mode: "open" }); + var root$5 = /* @__PURE__ */ from_html(`
`); + function Logo($$anchor, $$props) { + push($$props, true); + let strings = prop($$props, "strings"); + const website = "https://altcha.org"; + var $$exports = { + get strings() { + return strings(); + }, + set strings($$value) { + strings($$value); + flushSync(); + } + }; + var div = root$5(); + var a = child(div); + set_attribute(a, "href", website); + reset(div); + template_effect(() => set_attribute(a, "aria-label", strings().ariaLinkLabel)); + append($$anchor, div); + return pop($$exports); + } + create_custom_element(Logo, { strings: {} }, [], [], { mode: "open" }); + var root$4 = /* @__PURE__ */ from_html(``); + function Footer($$anchor, $$props) { + push($$props, true); + let logo = prop($$props, "logo"), strings = prop($$props, "strings"); + var $$exports = { + get logo() { + return logo(); + }, + set logo($$value) { + logo($$value); + flushSync(); + }, + get strings() { + return strings(); + }, + set strings($$value) { + strings($$value); + flushSync(); + } + }; + var div = root$4(); + var p = child(div); + html(p, () => strings().footer, true); + reset(p); + var node = sibling(p, 2); + { + var consequent = ($$anchor2) => { + Logo($$anchor2, { + get strings() { + return strings(); + } + }); + }; + if_block(node, ($$render) => { + if (logo()) $$render(consequent); + }); + } + reset(div); + append($$anchor, div); + return pop($$exports); + } + create_custom_element(Footer, { logo: {}, strings: {} }, [], [], { mode: "open" }); + var root$3 = /* @__PURE__ */ from_html(`
`); + function Switch($$anchor, $$props) { + push($$props, true); + let loading = prop($$props, "loading"), rest = /* @__PURE__ */ rest_props($$props, ["$$slots", "$$events", "$$legacy", "$$host", "loading"]); + let inputEl; + function onClick() { + inputEl?.click(); + } + var $$exports = { + get loading() { + return loading(); + }, + set loading($$value) { + loading($$value); + flushSync(); + } + }; + var div = root$3(); + var input = child(div); + attribute_effect(input, () => ({ type: "checkbox", ...rest }), void 0, void 0, void 0, void 0, true); + bind_this(input, ($$value) => inputEl = $$value, () => inputEl); + var div_1 = sibling(input, 2); + reset(div); + template_effect(() => set_attribute(div, "data-loading", loading())); + delegated("click", div_1, onClick); + append($$anchor, div); + return pop($$exports); + } + delegate(["click"]); + create_custom_element(Switch, { loading: {} }, [], [], { mode: "open" }); + var AudioState = /* @__PURE__ */ ((AudioState2) => { + AudioState2["ERROR"] = "error"; + AudioState2["LOADING"] = "loading"; + AudioState2["PLAYING"] = "playing"; + AudioState2["PAUSED"] = "paused"; + AudioState2["READY"] = "ready"; + return AudioState2; + })(AudioState || {}); + var State = /* @__PURE__ */ ((State2) => { + State2["CODE"] = "code"; + State2["ERROR"] = "error"; + State2["VERIFIED"] = "verified"; + State2["VERIFYING"] = "verifying"; + State2["UNVERIFIED"] = "unverified"; + State2["EXPIRED"] = "expired"; + return State2; + })(State || {}); + var root_1$2 = /* @__PURE__ */ from_html(`
`); + var root_3$2 = /* @__PURE__ */ from_html(`
`); + var root_4 = /* @__PURE__ */ from_svg(``); + var root_5 = /* @__PURE__ */ from_svg(``); + var root_6 = /* @__PURE__ */ from_svg(``); + var root_2$2 = /* @__PURE__ */ from_html(``); + var root_7 = /* @__PURE__ */ from_html(``); + var root$2 = /* @__PURE__ */ from_html(`
`); + function Code($$anchor, $$props) { + push($$props, true); + let audioUrl = prop($$props, "audioUrl"), codeChallenge = prop($$props, "codeChallenge"), config = prop($$props, "config"), imageUrl = prop($$props, "imageUrl"), onCancel = prop($$props, "onCancel"), onReload = prop($$props, "onReload"), onSubmit = prop($$props, "onSubmit"), strings = prop($$props, "strings"); + let audioState = /* @__PURE__ */ state(void 0); + let elAudio = /* @__PURE__ */ state(void 0); + let elInput = /* @__PURE__ */ state(void 0); + let loading = /* @__PURE__ */ state(false); + let code = /* @__PURE__ */ state(""); + let playAudio = /* @__PURE__ */ state(false); + onMount(() => { + if (!config().disableAutoFocus) { + tick().then(() => { + get(elInput)?.focus(); + }); + } + return () => { + if (get(elAudio)) { + get(elAudio).pause(); + set(elAudio, void 0); + } + }; + }); + function onAudioEnded() { + set(audioState, AudioState.PAUSED, true); + } + function onAudioError(ev) { + set(audioState, AudioState.ERROR, true); + } + function onAudioCanPlay() { + set(audioState, AudioState.READY, true); + } + function onAudioLoadStart() { + set(audioState, AudioState.LOADING, true); + } + function onAudioPlaying() { + set(audioState, AudioState.PLAYING, true); + } + function onAudioPause() { + set(audioState, AudioState.PAUSED, true); + } + function onInputKeyDown(ev) { + if (ev.code === "Space") { + ev.preventDefault(); + ev.stopPropagation(); + onPlayAudio(); + } else if (ev.code === "Escape") { + ev.preventDefault(); + ev.stopPropagation(); + onCancel()?.(); + } + } + function onSubmitCapture(ev) { + ev.preventDefault(); + ev.stopPropagation(); + onSubmit()?.(get(code)); + } + function onPlayAudio() { + if (get(elAudio)) { + if (get(audioState) === AudioState.LOADING) ; + else if (!get(elAudio).paused) { + get(elAudio).pause(); + } else { + if (audioUrl() && get(elAudio).src !== audioUrl()) { + get(elAudio).src = audioUrl(); + } + get(elAudio).currentTime = 0; + get(elAudio).play(); + } + } else { + set(playAudio, true); + requestAnimationFrame(() => { + if (get(elAudio) && audioUrl()) { + get(elAudio).src = audioUrl(); + get(elAudio).play(); + } + }); + } + } + var $$exports = { + get audioUrl() { + return audioUrl(); + }, + set audioUrl($$value) { + audioUrl($$value); + flushSync(); + }, + get codeChallenge() { + return codeChallenge(); + }, + set codeChallenge($$value) { + codeChallenge($$value); + flushSync(); + }, + get config() { + return config(); + }, + set config($$value) { + config($$value); + flushSync(); + }, + get imageUrl() { + return imageUrl(); + }, + set imageUrl($$value) { + imageUrl($$value); + flushSync(); + }, + get onCancel() { + return onCancel(); + }, + set onCancel($$value) { + onCancel($$value); + flushSync(); + }, + get onReload() { + return onReload(); + }, + set onReload($$value) { + onReload($$value); + flushSync(); + }, + get onSubmit() { + return onSubmit(); + }, + set onSubmit($$value) { + onSubmit($$value); + flushSync(); + }, + get strings() { + return strings(); + }, + set strings($$value) { + strings($$value); + flushSync(); + } + }; + var div = root$2(); + var form = child(div); + var node = child(form); + { + var consequent = ($$anchor2) => { + var div_1 = root_1$2(); + var text2 = child(div_1, true); + reset(div_1); + template_effect(() => set_text(text2, strings().verificationRequired)); + append($$anchor2, div_1); + }; + if_block(node, ($$render) => { + if (config().codeChallengeDisplay !== "standard") $$render(consequent); + }); + } + var div_2 = sibling(node, 2); + var text_1 = child(div_2, true); + reset(div_2); + var img = sibling(div_2, 2); + var div_3 = sibling(img, 2); + var input = child(div_3); + remove_input_defaults(input); + input.disabled = get(loading); + bind_this(input, ($$value) => set(elInput, $$value), () => get(elInput)); + var node_1 = sibling(input, 2); + { + var consequent_4 = ($$anchor2) => { + var button = root_2$2(); + var node_2 = child(button); + { + var consequent_1 = ($$anchor3) => { + var div_4 = root_3$2(); + append($$anchor3, div_4); + }; + var consequent_2 = ($$anchor3) => { + var svg = root_4(); + append($$anchor3, svg); + }; + var consequent_3 = ($$anchor3) => { + var svg_1 = root_5(); + append($$anchor3, svg_1); + }; + var alternate = ($$anchor3) => { + var svg_2 = root_6(); + append($$anchor3, svg_2); + }; + if_block(node_2, ($$render) => { + if (get(audioState) === AudioState.LOADING) $$render(consequent_1); + else if (get(audioState) === AudioState.ERROR) $$render(consequent_2, 1); + else if (get(audioState) === AudioState.PLAYING) $$render(consequent_3, 2); + else $$render(alternate, -1); + }); + } + reset(button); + template_effect(() => { + set_attribute(button, "title", strings().getAudioChallenge); + button.disabled = get(audioState) === AudioState.LOADING || get(audioState) === AudioState.ERROR; + set_attribute(button, "aria-label", get(audioState) === AudioState.LOADING ? strings().loading : strings().getAudioChallenge); + }); + event("click", button, () => onPlayAudio(), true); + append($$anchor2, button); + }; + if_block(node_1, ($$render) => { + if (codeChallenge().audio) $$render(consequent_4); + }); + } + var button_1 = sibling(node_1, 2); + reset(div_3); + var div_5 = sibling(div_3, 2); + var button_2 = child(div_5); + var text_2 = child(button_2, true); + reset(button_2); + var button_3 = sibling(button_2, 2); + var text_3 = child(button_3, true); + reset(button_3); + reset(div_5); + reset(form); + var node_3 = sibling(form, 2); + { + var consequent_5 = ($$anchor2) => { + var audio = root_7(); + bind_this(audio, ($$value) => set(elAudio, $$value), () => get(elAudio)); + event("error", audio, onAudioError); + event("loadstart", audio, onAudioLoadStart); + event("canplay", audio, onAudioCanPlay); + event("pause", audio, onAudioPause); + event("playing", audio, onAudioPlaying); + event("ended", audio, onAudioEnded); + append($$anchor2, audio); + }; + if_block(node_3, ($$render) => { + if (get(playAudio)) $$render(consequent_5); + }); + } + reset(div); + template_effect(() => { + set_text(text_1, strings().enterCodeFromImage); + set_attribute(img, "src", imageUrl()); + set_attribute(input, "minlength", codeChallenge().length || 1); + set_attribute(input, "maxlength", codeChallenge().length); + set_attribute(input, "placeholder", strings().enterCode); + set_attribute(input, "aria-label", get(audioState) === AudioState.LOADING ? strings().loading : get(audioState) === AudioState.PLAYING ? "" : strings().enterCodeAria); + set_attribute(input, "aria-live", get(audioState) ? "assertive" : "polite"); + set_attribute(input, "aria-busy", get(audioState) === AudioState.LOADING); + set_attribute(button_1, "title", strings().reload); + set_attribute(button_1, "aria-label", strings().reload); + set_attribute(button_2, "aria-label", strings().verify); + set_text(text_2, strings().verify); + set_attribute(button_3, "aria-label", strings().cancel); + set_text(text_3, strings().cancel); + }); + event("submit", form, onSubmitCapture, true); + delegated("keydown", input, onInputKeyDown); + bind_value(input, () => get(code), ($$value) => set(code, $$value)); + event("click", button_1, () => onReload()?.(), true); + event("click", button_3, () => onCancel()?.(), true); + append($$anchor, div); + return pop($$exports); + } + delegate(["keydown"]); + create_custom_element( + Code, + { + audioUrl: {}, + codeChallenge: {}, + config: {}, + imageUrl: {}, + onCancel: {}, + onReload: {}, + onSubmit: {}, + strings: {} + }, + [], + [], + { mode: "open" } + ); + var root_1$1 = /* @__PURE__ */ from_html(`
`); + var root_2$1 = /* @__PURE__ */ from_html(`
`); + var root_3$1 = /* @__PURE__ */ from_html(`
×
`); + var root$1 = /* @__PURE__ */ from_html(`
`, 1); + function Popover($$anchor, $$props) { + push($$props, true); + let anchor = prop($$props, "anchor"), children = prop($$props, "children"), display = prop($$props, "display", 7, "standard"), backdrop = prop($$props, "backdrop", 7, false), onClickOutside = prop($$props, "onClickOutside"), onClickOutsideDelay = prop($$props, "onClickOutsideDelay", 7, 600), onClose = prop($$props, "onClose"), placement = prop($$props, "placement", 7, "auto"), updateUISignal = prop($$props, "updateUISignal"), variant = prop($$props, "variant", 7, "neutral"), rest = /* @__PURE__ */ rest_props($$props, [ + "$$slots", + "$$events", + "$$legacy", + "$$host", + "anchor", + "children", + "display", + "backdrop", + "onClickOutside", + "onClickOutsideDelay", + "onClose", + "placement", + "updateUISignal", + "variant" + ]); + let el = /* @__PURE__ */ state(void 0); + let elBackdrop = /* @__PURE__ */ state(void 0); + let top = /* @__PURE__ */ state(false); + let mountedAt = /* @__PURE__ */ state(0); + user_effect(() => { + if (placement() !== "auto") { + set(top, placement() === "top"); + } + }); + user_effect(() => { + if (updateUISignal()) { + reposition(); + } + }); + onMount(() => { + const moveToBody = display() === "bottomsheet" || display() === "overlay"; + if (moveToBody) { + get(elBackdrop) && document.body.append(get(elBackdrop)); + get(el) && document.body.append(get(el)); + } + reposition(); + tick().then(() => { + set(mountedAt, Date.now(), true); + }); + return () => { + if (moveToBody) { + get(elBackdrop) && document.body.removeChild(get(elBackdrop)); + get(el) && document.body.removeChild(get(el)); + } + }; + }); + function onCloseClick() { + onClose()?.(); + } + function onWindowClick(ev) { + const target = ev.target; + if (!get(el)?.contains(target) && (!onClickOutsideDelay() || get(mountedAt) + onClickOutsideDelay() < Date.now())) { + onClickOutside()?.(); + } + } + function onWindowResize() { + reposition(); + } + function onWindowScroll() { + reposition(); + } + function reposition() { + if (anchor() && placement() === "auto" && get(el)) { + const boundary2 = anchor().getBoundingClientRect(); + const bottomGap = document.documentElement.clientHeight - (boundary2.top + boundary2.height); + const newTop = bottomGap < get(el).clientHeight; + if (get(top) !== newTop) { + set(top, newTop); + } + } + } + var $$exports = { + get anchor() { + return anchor(); + }, + set anchor($$value) { + anchor($$value); + flushSync(); + }, + get children() { + return children(); + }, + set children($$value) { + children($$value); + flushSync(); + }, + get display() { + return display(); + }, + set display($$value = "standard") { + display($$value); + flushSync(); + }, + get backdrop() { + return backdrop(); + }, + set backdrop($$value = false) { + backdrop($$value); + flushSync(); + }, + get onClickOutside() { + return onClickOutside(); + }, + set onClickOutside($$value) { + onClickOutside($$value); + flushSync(); + }, + get onClickOutsideDelay() { + return onClickOutsideDelay(); + }, + set onClickOutsideDelay($$value = 600) { + onClickOutsideDelay($$value); + flushSync(); + }, + get onClose() { + return onClose(); + }, + set onClose($$value) { + onClose($$value); + flushSync(); + }, + get placement() { + return placement(); + }, + set placement($$value = "auto") { + placement($$value); + flushSync(); + }, + get updateUISignal() { + return updateUISignal(); + }, + set updateUISignal($$value) { + updateUISignal($$value); + flushSync(); + }, + get variant() { + return variant(); + }, + set variant($$value = "neutral") { + variant($$value); + flushSync(); + } + }; + var fragment = root$1(); + event("click", $window, onWindowClick, true); + event("resize", $window, onWindowResize); + event("scroll", $window, onWindowScroll); + var node = first_child(fragment); + { + var consequent = ($$anchor2) => { + var div = root_1$1(); + bind_this(div, ($$value) => set(elBackdrop, $$value), () => get(elBackdrop)); + append($$anchor2, div); + }; + if_block(node, ($$render) => { + if (backdrop()) $$render(consequent); + }); + } + var div_1 = sibling(node, 2); + attribute_effect(div_1, () => ({ + ...rest, + class: `altcha-popover ${($$props.class || "") ?? ""}`, + "data-popover": true, + "data-variant": variant(), + "data-top": get(top), + "data-display": display() + })); + var node_1 = child(div_1); + { + var consequent_1 = ($$anchor2) => { + var div_2 = root_2$1(); + append($$anchor2, div_2); + }; + if_block(node_1, ($$render) => { + if (display() === "standard") $$render(consequent_1); + }); + } + var node_2 = sibling(node_1, 2); + { + var consequent_2 = ($$anchor2) => { + var div_3 = root_3$1(); + event("click", div_3, onCloseClick, true); + append($$anchor2, div_3); + }; + if_block(node_2, ($$render) => { + if (display() !== "standard") $$render(consequent_2); + }); + } + var div_4 = sibling(node_2, 2); + var node_3 = child(div_4); + snippet(node_3, () => children() ?? noop); + reset(div_4); + reset(div_1); + bind_this(div_1, ($$value) => set(el, $$value), () => get(el)); + append($$anchor, fragment); + return pop($$exports); + } + create_custom_element( + Popover, + { + anchor: {}, + children: {}, + display: {}, + backdrop: {}, + onClickOutside: {}, + onClickOutsideDelay: {}, + onClose: {}, + placement: {}, + updateUISignal: {}, + variant: {} + }, + [], + [], + { mode: "open" } + ); + function bufferToHex(buffer) { + return Array.from(new Uint8Array(buffer)).map((b) => b.toString(16).padStart(2, "0")).join(""); + } + function injectCss(css2, id = "altcha-css", nonce) { + if (typeof document !== "undefined" && document && !document.getElementById(id)) { + const style = document.createElement("style"); + style.id = id; + style.textContent = css2; + const resolvedNonce = document.currentScript?.nonce ?? document.querySelector('meta[name="csp-nonce"]')?.content; + if (resolvedNonce) { + style.nonce = resolvedNonce; + } + document.head.appendChild(style); + } + } + async function solveChallengeWorkers(options) { + const { + challenge, + concurrency = navigator.hardwareConcurrency, + controller = new AbortController(), + createWorker, + onOutOfMemory = (c) => c > 1 ? Math.floor(c / 2) : 0, + counterMode, + timeout = 9e4 + } = options; + const workersConcurrency = Math.min(16, Math.max(1, concurrency)); + const workersInstances = []; + const terminate = () => { + for (const worker of workersInstances) { + worker.terminate(); + } + }; + for (let i = 0; i < workersConcurrency; i++) { + workersInstances.push(await createWorker(challenge.parameters.algorithm)); + } + let solution = null; + try { + solution = await Promise.race( + workersInstances.map((worker, i) => { + controller.signal.addEventListener("abort", () => { + worker.postMessage({ type: "abort" }); + }); + return new Promise((resolve, reject) => { + worker.addEventListener("error", (err) => { + reject(err); + }); + worker.addEventListener("message", (message) => { + if (message.data) { + for (const w of workersInstances) { + if (w !== worker) { + w.postMessage({ type: "abort" }); + } + } + if (message.data.error) { + return reject(new Error(message.data.error)); + } + } + resolve(message.data); + }); + worker.postMessage({ + challenge, + counterMode, + counterStart: i, + counterStep: workersConcurrency, + timeout, + type: "work" + }); + }); + }) + ); + } catch (err) { + const isOOM = err instanceof Error && !!err?.message?.includes("Out of memory"); + if (isOOM) { + if (onOutOfMemory) { + terminate(); + const retryConcurrency = onOutOfMemory(workersConcurrency); + if (retryConcurrency) { + return solveChallengeWorkers({ + ...options, + challenge, + controller, + concurrency: retryConcurrency, + createWorker + }); + } + } + } + throw err; + } finally { + terminate(); + } + if (controller.signal.aborted) { + return null; + } + return solution || null; + } + class Collector { + TAG_CODES = { + INPUT: 1, + TEXTAREA: 2, + SELECT: 3, + BUTTON: 4, + A: 5, + DETAILS: 6, + SUMMARY: 7, + IFRAME: 8, + VIDEO: 9, + AUDIO: 10 + }; + maxSamples; + sampleInterval; + target; + focusStartTime = 0; + focusInteraction = 0; + focusInteractionTimer = null; + lastPointerSample = 0; + lastTouchSample = 0; + lastScrollSample = 0; + pendingPointer = null; + pendingTouch = null; + focus = []; + pointer = []; + scroll = []; + touch = []; + constructor(options = {}) { + const { maxSamples = 60, sampleInterval = 50, target = window } = options; + this.maxSamples = maxSamples; + this.sampleInterval = sampleInterval; + this.target = target; + this.attach(); + } + destroy() { + const o = { capture: true }; + this.target.removeEventListener("focusin", this.onFocus, o); + this.target.removeEventListener("keydown", this.onInteraction, o); + this.target.removeEventListener("pointerdown", this.onInteraction, o); + this.target.removeEventListener("pointermove", this.onPointer, o); + this.target.removeEventListener("scroll", this.onScroll, o); + this.target.removeEventListener("touchmove", this.onTouchMove, o); + } + export() { + return { + focus: this.focus, + maxTouchPoints: navigator.maxTouchPoints || 0, + pointer: this.pointer, + scroll: this.scroll, + time: Date.now(), + touch: this.touch + }; + } + attach() { + const o = { passive: true, capture: true }; + this.target.addEventListener("focusin", this.onFocus, o); + this.target.addEventListener("keydown", this.onInteraction, o); + this.target.addEventListener("pointerdown", this.onInteraction, o); + this.target.addEventListener("pointermove", this.onPointer, o); + this.target.addEventListener("scroll", this.onScroll, o); + this.target.addEventListener("touchmove", this.onTouchMove, o); + } + evict(buffer) { + if (buffer.length > this.maxSamples) { + buffer.splice(0, buffer.length - this.maxSamples); + } + } + onFocus = (e) => { + if (this.focusInteraction === 2) { + return; + } + const el = e.target; + if (!(el instanceof Element)) { + return; + } + const now = performance.now(); + if (this.focusStartTime === 0) { + this.focusStartTime = now; + } + this.focus.push([ + Math.round(now - this.focusStartTime), + el.tabIndex, + this.TAG_CODES[el.tagName] ?? 0, + this.focusInteraction ? 1 : 0 + ]); + this.evict(this.focus); + }; + onInteraction = (e) => { + this.focusInteraction = "keyCode" in e ? 1 : 2; + if (this.focusInteractionTimer) { + clearTimeout(this.focusInteractionTimer); + } + this.focusInteractionTimer = setTimeout(() => { + this.focusInteraction = 0; + }, 100); + }; + onPointer = (e) => { + if (e.pointerType === "touch") { + return; + } + const now = e.timeStamp || performance.now(); + this.pendingPointer = [Math.round(e.clientX), Math.round(e.clientY), Math.round(now)]; + if (now - this.lastPointerSample >= this.sampleInterval) { + this.pointer.push(this.pendingPointer); + this.lastPointerSample = now; + this.pendingPointer = null; + this.evict(this.pointer); + } + }; + onScroll = () => { + const now = performance.now(); + if (now - this.lastScrollSample < this.sampleInterval) { + return; + } + this.scroll.push([Math.round(window.scrollY), Math.round(now)]); + this.lastScrollSample = now; + this.evict(this.scroll); + }; + onTouchMove = (e) => { + const now = e.timeStamp || performance.now(); + const t = e.touches[0]; + if (!t) { + return; + } + this.pendingTouch = [ + Math.round(t.clientX), + Math.round(t.clientY), + Math.round(now), + Math.round(t.force * 1e3) / 1e3, + Math.round(t.radiusX || 0), + Math.round(t.radiusY || 0) + ]; + if (now - this.lastTouchSample >= this.sampleInterval) { + this.touch.push(this.pendingTouch); + this.lastTouchSample = now; + this.pendingTouch = null; + this.evict(this.touch); + } + }; + } + var root_1 = /* @__PURE__ */ from_html(`
`); + var root_3 = /* @__PURE__ */ from_html(`
`); + var root_2 = /* @__PURE__ */ from_html(`
×
`, 1); + var root_10 = /* @__PURE__ */ from_html(`
`); + var root_11 = /* @__PURE__ */ from_html(``); + var root_14 = /* @__PURE__ */ from_html(`
Secure context (HTTPS) required.
`); + var root_15 = /* @__PURE__ */ from_html(`
`); + var root_16 = /* @__PURE__ */ from_html(`
`); + var root_19 = /* @__PURE__ */ from_html(` `, 1); + var root = /* @__PURE__ */ from_html(`
`, 1); + function Widget($$anchor, $$props) { + push($$props, true); + const $altchaDefaults = () => store_get(altchaDefaults, "$altchaDefaults", $$stores); + const $altchaI18nStore = () => store_get(altchaI18nStore, "$altchaI18nStore", $$stores); + const [$$stores, $$cleanup] = setup_stores(); + const fieldsSelector = 'input[type="text"]:not([data-no-spamfilter]), textarea:not([data-no-spamfilter])'; + const submitButtonSelector = 'input[type="submit"], button[type="submit"], button:not([type="button"]):not([type="reset"])'; + const rtlLanguages = ["ar", "fa", "he", "ur"]; + const { isSecureContext } = globalThis; + const { store: altchaDefaults } = globalThis.$altcha.defaults; + const hardwareConcurrency = navigator.hardwareConcurrency || 2; + const deviceMemory = navigator.deviceMemory || 0; + const defaultWorkers = deviceMemory && deviceMemory <= 4 ? Math.min(4, hardwareConcurrency) : hardwareConcurrency; + const altchaI18nStore = globalThis.$altcha.i18n.store; + const instance = $$props.$$host; + const dispatch = (event2, detail) => { + tick().then(() => { + instance?.dispatchEvent(new CustomEvent(event2, { detail })); + }); + }; + let hisCollector = null; + let baseUrl = /* @__PURE__ */ state(proxy(new URL(location.origin))); + let checked = /* @__PURE__ */ state(false); + let codeChallenge = /* @__PURE__ */ state(null); + let currentController = /* @__PURE__ */ state(null); + let currentDisplay = /* @__PURE__ */ state(null); + let currentState = /* @__PURE__ */ state(proxy(State.UNVERIFIED)); + let elAnchorArrow = /* @__PURE__ */ state(void 0); + let elFloatingAnchor = /* @__PURE__ */ state(void 0); + let elForm = /* @__PURE__ */ state(null); + let elRoot = /* @__PURE__ */ state(void 0); + let elSubmitter = /* @__PURE__ */ state(null); + let error = /* @__PURE__ */ state(null); + let expirationTimeout = /* @__PURE__ */ state(null); + let payload = /* @__PURE__ */ state(null); + let plugins = /* @__PURE__ */ state(proxy([])); + let updateUISignal = /* @__PURE__ */ state(0); + let userConfig = /* @__PURE__ */ state(proxy({})); + let visible = /* @__PURE__ */ state(true); + const config = /* @__PURE__ */ user_derived(() => ({ + fetch: (input, init) => fetch(input, init), + audioChallengeLanguage: "", + auto: "off", + barPlacement: "bottom", + challenge: "", + codeChallenge: null, + codeChallengeDisplay: "standard", + credentials: null, + debug: false, + disableAutoFocus: false, + display: "standard", + floatingAnchor: "", + floatingOffset: 8, + floatingPersist: false, + floatingPlacement: "auto", + hideFooter: false, + hideLogo: false, + humanInteractionSignature: true, + language: "", + mockError: false, + minDuration: 500, + overlayContent: "", + name: "altcha", + popoverPlacement: "auto", + retryOnOutOfMemoryError: true, + setCookie: null, + serverVerificationFields: false, + serverVerificationTimeZone: false, + test: false, + timeout: 9e4, + type: "checkbox", + validationMessage: "", + verifyFunction: null, + verifyUrl: "", + workers: defaultWorkers, + ...$altchaDefaults(), + ...get(userConfig) + })); + const checkboxId = /* @__PURE__ */ user_derived(() => `altcha-checkbox-${$$props.id || Math.floor(Math.random() * 1e12).toString(16)}`); + const CheckboxComponent = /* @__PURE__ */ user_derived(() => getCheckboxComponent(get(config).type)); + const auto = /* @__PURE__ */ user_derived(() => get(config).auto); + const loading = /* @__PURE__ */ user_derived(() => get(currentState) === State.VERIFYING); + const showFooter = /* @__PURE__ */ user_derived(() => !get(config).hideFooter); + const showLogo = /* @__PURE__ */ user_derived(() => !get(config).hideLogo && get(config).display !== "bar"); + const locale = /* @__PURE__ */ user_derived(() => getI18nStrings($altchaI18nStore(), [ + get(config).language, + document.documentElement.lang, + ...navigator.languages + ])); + const dir = /* @__PURE__ */ user_derived(() => rtlLanguages.includes(get(locale).language) ? "rtl" : void 0); + const strings = /* @__PURE__ */ user_derived(() => ({ ...get(locale).strings })); + const codeChallengeAudioUrl = /* @__PURE__ */ user_derived(() => get(codeChallenge)?.audio?.match(/^(https?:)?\//) ? getUrl(get(codeChallenge).audio, get(baseUrl), { + language: get(config).audioChallengeLanguage || get(locale).language + }).toString() : get(codeChallenge)?.audio); + const codeChallengeImageUrl = /* @__PURE__ */ user_derived(() => get(codeChallenge)?.image?.match(/^(https?:)?\//) ? getUrl(get(codeChallenge).image, get(baseUrl)) : get(codeChallenge)?.image); + user_effect(() => { + configure({ + auto: $$props.auto, + challenge: $$props.challenge, + display: $$props.display, + language: $$props.language, + name: $$props.name, + type: $$props.type, + workers: $$props.workers + }); + }); + user_effect(() => { + if ($$props.configuration) { + try { + configure(JSON.parse($$props.configuration)); + } catch { + log("unable to parse the `configuration` attribute (JSON expected)"); + } + } + }); + user_effect(() => { + if (get(currentDisplay) !== get(config).display) { + setDisplay(get(config).display); + } + }); + user_effect(() => { + if (get(checked) && get(currentState) === State.VERIFYING) { + set(checked, false); + } + }); + user_effect(() => { + if (!get(checked) && get(currentState) === State.VERIFIED) { + set(checked, true); + } + }); + user_effect(() => { + if (!get(checked)) { + const checkbox = getCheckboxElement(); + if (checkbox && checkbox.checked) { + checkbox.checked = false; + } + } + }); + user_effect(() => { + if (get(currentState) === State.VERIFIED) { + getCheckboxElement()?.setCustomValidity(""); + } + }); + user_effect(() => { + if (get(auto) === "onload") { + const tm = setTimeout( + () => { + verify(); + }, + 1 + ); + return () => { + if (tm) { + clearTimeout(tm); + } + }; + } + }); + user_effect(() => { + if (get(error)) { + log("error:", get(error)); + } + }); + user_effect(() => { + if (get(payload) && get(config).setCookie) { + setCookie(get(payload), get(config).setCookie); + } + }); + onMount(() => { + log("mounted", "3.2.1"); + if (instance) { + globalThis.$altcha.instances.add(instance); + } + set(elForm, get(elRoot)?.closest("form"), true); + get(elForm)?.addEventListener("reset", onFormReset); + get(elForm)?.addEventListener("submit", onFormSubmit, { capture: true }); + get(elForm)?.addEventListener("focusin", onFormFocusIn); + activatePlugins(); + if (get(config).humanInteractionSignature) { + log("human interaction signature enabled"); + hisCollector = new Collector(); + } + dispatch("load"); + if (!isSecureContext) { + log("secure context (HTTPS) required"); + } + return () => { + destroyPlugins(); + if (instance) { + globalThis.$altcha.instances.delete(instance); + } + if (get(expirationTimeout)) { + clearTimeout(get(expirationTimeout)); + } + get(elForm)?.removeEventListener("reset", onFormReset); + get(elForm)?.removeEventListener("submit", onFormSubmit, { capture: true }); + get(elForm)?.removeEventListener("focusin", onFormFocusIn); + hisCollector?.destroy(); + }; + }); + function activatePlugins() { + set(plugins, [...globalThis.$altcha.plugins].map((PluginCls) => new PluginCls(instance)), true); + log("activating plugins", get(plugins).map((plugin) => plugin.constructor.name)); + for (const plugin of get(plugins)) { + plugin.activate(); + } + } + async function callHook(hook, ...args) { + let result = void 0; + for (const plugin of get(plugins)) { + result = await plugin[hook].call(plugin, ...args); + } + return result; + } + function destroyPlugins() { + for (const plugin of get(plugins)) { + plugin.destroy(); + } + } + function createChallengeFromV1(challenge) { + const [_, queryParams] = challenge.salt.split("?"); + const data = {}; + if (queryParams) { + try { + Object.assign(data, Object.fromEntries(new URLSearchParams(queryParams).entries())); + } catch { + } + } + const result = { + codeChallenge: challenge.codeChallenge, + parameters: { + algorithm: challenge.algorithm, + cost: 1, + data, + expiresAt: data?.expires ? parseInt(data.expires, 10) : void 0, + keyLength: challenge.algorithm === "SHA-512" ? 64 : challenge.algorithm === "SHA-384" ? 48 : 32, + nonce: bufferToHex(new TextEncoder().encode(challenge.salt)), + keyPrefix: challenge.challenge, + salt: "" + }, + signature: challenge.signature + }; + Object.defineProperties(result, { + _originalSalt: { enumerable: false, value: challenge.salt, writable: false }, + _version: { enumerable: false, value: 1, writable: false } + }); + return result; + } + function createPayloadV1(challenge, solution) { + return { + algorithm: challenge.parameters.algorithm, + challenge: challenge.parameters.keyPrefix, + number: solution.counter, + salt: "_originalSalt" in challenge ? challenge._originalSalt : challenge.parameters.nonce, + signature: challenge.signature, + took: solution.time || 0 + }; + } + async function delay(ms) { + await new Promise((resolve) => setTimeout(resolve, ms)); + } + async function fetchChallenge(source2 = get(config).challenge, requestOptions) { + const hook = await callHook("onFetchChallenge", source2); + let challenge = null; + if (hook !== void 0) { + return hook; + } + if (typeof source2 === "string") { + if (source2.startsWith("{")) { + log("parsing JSON challenge"); + try { + challenge = JSON.parse(source2); + } catch { + throw new Error(`Unable to parse JSON challenge.`); + } + } else { + log("fetching challenge from", requestOptions?.method || "GET", source2); + set(baseUrl, new URL(source2, location.origin), true); + const resp = await get(config).fetch(source2, { + credentials: get(config).credentials || void 0, + ...requestOptions + }); + await validateResponse(resp); + const configHeader = resp.headers.get("x-altcha-config"); + if (configHeader) { + processConfigHeader(configHeader); + } + const json = await resp.json(); + if (json && "his" in json && json.his) { + log("requested HIS"); + if (!hisCollector) { + throw new Error("Server requested HIS data but collector is disabled."); + } + return fetchChallenge(getUrl(json.his.url, get(baseUrl)), { + body: JSON.stringify({ his: hisCollector.export() }), + headers: { "content-type": "application/json" }, + method: "POST" + }); + } + if (json && "hisResult" in json && json.hisResult) { + log("HIS result", json.hisResult); + } + challenge = json; + } + } else if (source2 && typeof source2 === "object") { + try { + challenge = JSON.parse(JSON.stringify(source2)); + } catch { + throw new Error(`Unable to parse JSON challenge.`); + } + } + if (isChallengeV1(challenge)) { + challenge = createChallengeFromV1(challenge); + } + if (!isChallengeValid(challenge)) { + throw new Error(`Challenge validation failed.`); + } + return challenge; + } + function isChallengeV1(challenge) { + return typeof challenge === "object" && "challenge" in challenge; + } + function isChallengeValid(challenge) { + return !!challenge && typeof challenge === "object" && "parameters" in challenge && !!challenge.parameters && typeof challenge.parameters === "object" && "algorithm" in challenge.parameters && "nonce" in challenge.parameters && "salt" in challenge.parameters && "keyPrefix" in challenge.parameters; + } + function getCheckboxElement() { + return document.getElementById(get(checkboxId)); + } + function getCheckboxComponent(type) { + switch (type) { + case "checkbox": + return Checkbox; + case "switch": + return Switch; + case "native": + default: + return CheckboxNative; + } + } + function getI18nStrings(i18n2, languages) { + const codes = Object.keys(i18n2).map((code) => code.toLowerCase()); + let language = languages.reduce( + (acc, lang) => { + lang = lang.toLowerCase(); + return acc || (i18n2[lang] ? lang : null) || codes.find((code) => lang.split("-")[0] === code.split("-")[0]) || null; + }, + null + ); + if (!i18n2[language || ""]) { + language = "en"; + } + return { language, strings: i18n2[language] }; + } + function getPlacement(display) { + switch (display) { + case "bar": + return get(config).barPlacement || "bottom"; + case "floating": + return get(config).floatingPlacement || "auto"; + default: + return void 0; + } + } + function getTextFields(names) { + const elInputs = [ + ...get(elForm)?.querySelectorAll(fieldsSelector) || [] + ]; + return elInputs.reduce( + (acc, el) => { + const name = el.name; + const value = el.value; + if (name && value) { + acc[name] = /\n/.test(value) ? value.replace(new RegExp("(? { + if (result && !get(codeChallenge)) { + tick().then(() => { + requestSubmit(get(elSubmitter)); + }); + } + }); + } + } + function onWindowPageshow(ev) { + if (ev.persisted) { + setDisplay(get(config).display); + reset$1(); + } + } + function onWindowResize() { + updateUI(); + } + function processConfigHeader(jsonConfig) { + try { + const json = JSON.parse(jsonConfig); + if (json && typeof json === "object") { + configure({ + // Backward compatibility mappings + serverVerificationFields: json?.sentinel?.fields, + serverVerificationTimeZone: json?.sentinel?.timeZone, + verifyUrl: json.verifyurl, + ...json + }); + } + } catch (err) { + log("unable to configure from x-altcha-config header", err); + } + } + function repositionFloating(viewportOffset = 20) { + if (!get(elRoot)) { + return; + } + const floatingPlacement = get(config).floatingPlacement; + if (!get(elFloatingAnchor)) { + set( + elFloatingAnchor, + (get(config).floatingAnchor instanceof HTMLElement ? get(config).floatingAnchor : get(config).floatingAnchor ? document.querySelector(get(config).floatingAnchor) : get(elForm)?.querySelector(submitButtonSelector)) || get(elForm), + true + ); + if (!get(elFloatingAnchor)) { + log("unable to find floating anchor element"); + return; + } + } + const offsetY = parseInt(get(config).floatingOffset, 10) || 12; + const anchorBoundry = get(elFloatingAnchor).getBoundingClientRect(); + const elBoundary = get(elRoot).getBoundingClientRect(); + const docHeight = document.documentElement.clientHeight; + const docWidth = document.documentElement.clientWidth; + const showOnTop = !floatingPlacement || floatingPlacement === "auto" ? anchorBoundry.bottom + elBoundary.height + offsetY + viewportOffset > docHeight : floatingPlacement === "top"; + const left = Math.max(viewportOffset, Math.min(docWidth - viewportOffset - elBoundary.width, anchorBoundry.left + anchorBoundry.width / 2 - elBoundary.width / 2)); + get(elRoot).style.setProperty("--altcha-floating-left", `${left}px`); + get(elRoot).style.setProperty("--altcha-floating-top", showOnTop ? `${anchorBoundry.top - (elBoundary.height + offsetY)}px` : `${anchorBoundry.bottom + offsetY}px`); + get(elRoot).setAttribute("data-floating-position", showOnTop ? "top" : "bottom"); + if (get(elAnchorArrow)) { + const anchorArrowBoundry = get(elAnchorArrow).getBoundingClientRect(); + get(elAnchorArrow).style.left = anchorBoundry.left - left + anchorBoundry.width / 2 - anchorArrowBoundry.width / 2 + "px"; + } + } + async function requestServerVerification(verificationPayload, code) { + const hook = await callHook("onRequestServerVerification", verificationPayload, code); + if (hook !== void 0) { + return hook; + } + log("requesting server verification from", get(config).verifyUrl); + if (!get(config).verifyUrl) { + throw new Error(`Parameter verifyUrl must be set for server verification.`); + } + const resp = await get(config).fetch(getUrl(get(config).verifyUrl, get(baseUrl)), { + body: JSON.stringify({ + code, + fields: get(config).serverVerificationFields ? getTextFields() : void 0, + payload: verificationPayload, + timeZone: get(config).serverVerificationTimeZone ? getTimeZone() : void 0 + }), + credentials: get(config).credentials || void 0, + headers: { "Content-Type": "application/json" }, + method: "POST" + }); + await validateResponse(resp); + const json = await resp.json(); + if (json && typeof json === "object" && "payload" in json && !!json.payload) { + dispatch("serververification", json); + } + return json; + } + function requestSubmit(submitter) { + if (get(elForm) && "requestSubmit" in get(elForm)) { + get(elForm).requestSubmit(submitter); + } else if (get(elForm)?.reportValidity()) { + if (submitter) { + submitter.click(); + } else { + get(elForm).submit(); + } + } + } + function setCookie(value, options = {}) { + const { + domain, + name = get(config).name, + maxAge, + path, + sameSite, + secure + } = options; + let cookie = `${encodeURIComponent(name)}=${encodeURIComponent(value)}`; + if (domain) cookie += `; Domain=${domain}`; + if (maxAge != null) cookie += `; Max-Age=${maxAge}`; + if (path) cookie += `; Path=${path}`; + if (sameSite) cookie += `; SameSite=${sameSite}`; + if (secure) cookie += `; Secure`; + document.cookie = cookie; + } + function setDisplay(value) { + switch (value) { + case "bar": + case "floating": + case "overlay": + hide(); + if (!get(auto) || get(auto) === "off") { + get(userConfig).auto = "onsubmit"; + } + break; + case "standard": + show(); + } + if (get(currentDisplay) !== value) { + set(currentDisplay, value, true); + } + } + function setChallengeExpiration(expiresAt) { + if (get(expirationTimeout)) { + clearTimeout(get(expirationTimeout)); + } + const onExpired = () => { + if (get(currentState) !== State.UNVERIFIED) { + set(checked, false); + setState(State.EXPIRED); + } else { + reset$1(); + } + dispatch("expired"); + }; + const duration = expiresAt * 1e3 - Date.now(); + if (duration >= 1) { + set(expirationTimeout, setTimeout(onExpired, duration), true); + } else { + onExpired(); + } + } + async function validateResponse(resp) { + if (resp.status >= 400) { + if (resp.headers.get("content-type")?.includes("/json")) { + let json; + try { + json = await resp.json(); + } catch { + } + if (json && "error" in json) { + throw new Error(`Server responded with ${resp.status} - ${json.error}`); + } + } + throw new Error(`Server responded with ${resp.status}.`); + } + const contentType = resp.headers.get("content-type"); + if (!contentType || !contentType.includes("/json")) { + throw new Error(`Server responded with invalid content-type. Expected application/json, received ${contentType}.`); + } + } + async function verifyServer(code) { + if (!get(payload)) { + setState(State.ERROR, "Cannot verify code challenge without PoW payload."); + return; + } + setState(State.VERIFYING); + let result = null; + if (get(config).verifyUrl) { + result = await requestServerVerification(get(payload), code); + } else if (get(config).verifyFunction) { + result = await get(config).verifyFunction(get(payload), code); + } else { + setState(State.ERROR, "Parameter verifyUrl is required for code challenge verification."); + return; + } + if (result?.payload) { + set(payload, result.payload, true); + log("server payload", get(payload)); + } + if (result?.verified === true) { + log("verified"); + setState(State.VERIFIED); + dispatch("verified", { payload: get(payload) }); + if (get(auto) === "onsubmit") { + tick().then(() => { + requestSubmit(get(elSubmitter)); + }); + } + } else { + setState(State.ERROR, result?.reason || "Verification failed."); + } + if (!get(config).disableAutoFocus) { + getCheckboxElement()?.focus(); + } + } + function configure(newConfig) { + Object.assign(get(userConfig), { + ...Object.fromEntries(Object.entries(newConfig).filter(([_, value]) => value !== void 0)) + }); + } + function getConfiguration() { + return { ...get(config) }; + } + function getState() { + return get(currentState); + } + function hide() { + set(visible, false); + } + function log(...args) { + if (get(config).debug || args.some((a) => a instanceof Error)) { + console[args[0] instanceof Error ? "error" : "log"]("ALTCHA", `[name=${get(config).name}]`, ...args); + } + } + function reset$1(newState = State.UNVERIFIED, err = null) { + set(checked, false); + set(error, err, true); + set(payload, null); + if (get(currentController)) { + get(currentController).abort(); + } + if (get(expirationTimeout)) { + clearTimeout(get(expirationTimeout)); + set(expirationTimeout, null); + } + setState(newState); + } + function setState(newState, err = null) { + set(currentState, newState, true); + set(error, err, true); + dispatch("statechange", { payload: get(payload), state: get(currentState) }); + } + function show() { + set(visible, true); + tick().then(() => { + updateUI(); + }); + } + function updateUI() { + switch (get(config).display) { + case "floating": + return repositionFloating(); + } + set(updateUISignal, get(updateUISignal) + 1); + } + async function verify(options = {}) { + const { + concurrency = Math.max(1, get(config).workers), + controller = new AbortController(), + minDuration = get(config).minDuration + } = options; + const start = performance.now(); + let challenge = null; + let solution = null; + let isChallengeV12 = false; + const hook = await callHook("onVerify", options); + if (hook !== void 0) { + return hook; + } + reset$1(State.VERIFYING); + set(currentController, controller, true); + try { + if (!isSecureContext) { + throw new Error("Secure context (HTTPS) required."); + } + if (get(config).mockError) { + throw new Error("Mock error."); + } + if (get(config).test) { + log("running test mode with null challenge"); + await delay(Math.max(0, minDuration - (performance.now() - start))); + if (get(currentController)?.signal.aborted) { + reset$1(); + return null; + } + set(payload, btoa(JSON.stringify({ challenge: null, solution: null, test: true })), true); + log("verified"); + setState(State.VERIFIED); + dispatch("verified", { payload: get(payload) }); + return { payload: get(payload) }; + } + challenge = await fetchChallenge(); + if (!challenge) { + throw new Error("Failed to fetch challenge."); + } + log("challenge", challenge); + if ("configuration" in challenge) { + log("re-configuring from challenge", challenge.configuration); + configure(challenge.configuration); + } + if (challenge.parameters.expiresAt) { + setChallengeExpiration(challenge.parameters.expiresAt); + } + isChallengeV12 = "_version" in challenge && challenge._version === 1; + const createWorker = globalThis.$altcha.algorithms.get(challenge.parameters.algorithm); + if (!createWorker) { + throw new Error(`Unsupported algorithm ${challenge.parameters.algorithm}.`); + } + solution = await solveChallengeWorkers({ + challenge, + concurrency, + controller, + createWorker, + counterMode: isChallengeV12 ? "string" : "uint32", + onOutOfMemory: (c) => { + log("out of memory error received"); + dispatch("outofmemory"); + if (get(config).retryOnOutOfMemoryError && c > 1) { + const retryConcurrency = Math.floor(c / 2); + log(`retrying with ${retryConcurrency} workers...`); + return retryConcurrency; + } + }, + timeout: get(config).timeout + }); + if (get(currentController)?.signal.aborted) { + reset$1(); + return null; + } + if (!solution) { + throw new Error("Failed to find solution."); + } + log("solution", solution); + await delay(Math.max(0, minDuration - (performance.now() - start))); + set(codeChallenge, challenge.codeChallenge || get(config).codeChallenge || null, true); + if (isChallengeV12) { + set(payload, btoa(JSON.stringify(createPayloadV1(challenge, solution))), true); + } else { + set( + payload, + btoa(JSON.stringify({ + challenge: { + parameters: challenge.parameters, + signature: challenge.signature + }, + solution + })), + true + ); + } + if (get(codeChallenge)) { + log("requesting code verification"); + setState(State.CODE); + dispatch("codechallenge", { codeChallenge: get(codeChallenge) }); + } else if (get(config).verifyUrl) { + await verifyServer(); + } else { + log("verified"); + setState(State.VERIFIED); + dispatch("verified", { payload: get(payload) }); + } + } catch (err) { + log("verification failed", err); + setState(State.ERROR, String(err)); + return null; + } finally { + set(currentController, null); + } + return { challenge, payload: get(payload), solution }; + } + var $$exports = { + configure, + getConfiguration, + getState, + hide, + log, + reset: reset$1, + setState, + show, + updateUI, + verify + }; + var fragment = root(); + event("scroll", $document, onDocumentScroll); + event("click", $document, onDocumentClick); + event("pageshow", $window, onWindowPageshow); + event("resize", $window, onWindowResize); + var node = first_child(fragment); + { + var consequent = ($$anchor2) => { + var div = root_1(); + append($$anchor2, div); + }; + if_block(node, ($$render) => { + if (get(config).display === "overlay" && get(visible)) $$render(consequent); + }); + } + var div_1 = sibling(node, 2); + var node_1 = child(div_1); + { + var consequent_2 = ($$anchor2) => { + var fragment_1 = root_2(); + var div_2 = first_child(fragment_1); + var node_2 = sibling(div_2, 2); + { + var consequent_1 = ($$anchor3) => { + var div_3 = root_3(); + html(div_3, () => document.querySelector(get(config).overlayContent)?.innerHTML, true); + reset(div_3); + append($$anchor3, div_3); + }; + if_block(node_2, ($$render) => { + if (get(config).overlayContent) $$render(consequent_1); + }); + } + event("click", div_2, onCloseClick, true); + append($$anchor2, fragment_1); + }; + if_block(node_1, ($$render) => { + if (get(config).display === "overlay" && get(visible)) $$render(consequent_2); + }); + } + var div_4 = sibling(node_1, 2); + var div_5 = child(div_4); + var div_6 = child(div_5); + var node_3 = child(div_6); + { + let $0 = /* @__PURE__ */ user_derived(() => get(config).display === "standard" && get(auto) !== "onsubmit" || get(currentState) === State.VERIFYING); + component(node_3, () => get(CheckboxComponent), ($$anchor2, CheckboxComponent_1) => { + CheckboxComponent_1($$anchor2, { + get id() { + return get(checkboxId); + }, + name: "", + get required() { + return get($0); + }, + get loading() { + return get(loading); + }, + get checked() { + return get(checked); + }, + onchange: onCheckboxChange, + oninvalid: onCheckboxInvalid + }); + }); + } + var label = sibling(node_3, 2); + var node_4 = child(label); + { + var consequent_3 = ($$anchor2) => { + var text$1 = text(); + template_effect(() => set_text(text$1, get(strings).verificationRequired)); + append($$anchor2, text$1); + }; + var consequent_4 = ($$anchor2) => { + var text_1 = text(); + template_effect(() => set_text(text_1, get(strings).verifying)); + append($$anchor2, text_1); + }; + var consequent_5 = ($$anchor2) => { + var text_2 = text(); + template_effect(() => set_text(text_2, get(strings).verified)); + append($$anchor2, text_2); + }; + var alternate = ($$anchor2) => { + var text_3 = text(); + template_effect(() => set_text(text_3, get(strings).label)); + append($$anchor2, text_3); + }; + if_block(node_4, ($$render) => { + if (get(currentState) === State.CODE && get(codeChallenge)) $$render(consequent_3); + else if (get(currentState) === State.VERIFYING) $$render(consequent_4, 1); + else if (get(currentState) === State.VERIFIED) $$render(consequent_5, 2); + else $$render(alternate, -1); + }); + } + reset(label); + reset(div_6); + var node_5 = sibling(div_6, 2); + { + var consequent_6 = ($$anchor2) => { + Logo($$anchor2, { + get strings() { + return get(strings); + } + }); + }; + if_block(node_5, ($$render) => { + if (get(showLogo)) $$render(consequent_6); + }); + } + reset(div_5); + var node_6 = sibling(div_5, 2); + { + var consequent_7 = ($$anchor2) => { + { + let $0 = /* @__PURE__ */ user_derived(() => get(config).display === "bar" && get(showLogo)); + Footer($$anchor2, { + get logo() { + return get($0); + }, + get strings() { + return get(strings); + } + }); + } + }; + if_block(node_6, ($$render) => { + if (get(showFooter)) $$render(consequent_7); + }); + } + var node_7 = sibling(node_6, 2); + { + var consequent_8 = ($$anchor2) => { + var div_7 = root_10(); + bind_this(div_7, ($$value) => set(elAnchorArrow, $$value), () => get(elAnchorArrow)); + append($$anchor2, div_7); + }; + if_block(node_7, ($$render) => { + if (get(config).display === "floating") $$render(consequent_8); + }); + } + var node_8 = sibling(node_7, 2); + { + var consequent_9 = ($$anchor2) => { + var input_1 = root_11(); + remove_input_defaults(input_1); + template_effect(() => { + set_attribute(input_1, "name", get(config).name); + set_value(input_1, get(payload)); + }); + append($$anchor2, input_1); + }; + if_block(node_8, ($$render) => { + if (!get(config).setCookie) $$render(consequent_9); + }); + } + reset(div_4); + var node_9 = sibling(div_4, 2); + { + var consequent_12 = ($$anchor2) => { + Popover($$anchor2, { + get anchor() { + return get(elRoot); + }, + onClickOutside: () => { + if (isSecureContext) { + reset$1(); + } + }, + get placement() { + return get(config).popoverPlacement; + }, + role: "alert", + variant: "error", + get dir() { + return get(dir); + }, + get updateUISignal() { + return get(updateUISignal); + }, + children: ($$anchor3, $$slotProps) => { + var fragment_9 = comment(); + var node_10 = first_child(fragment_9); + { + var consequent_10 = ($$anchor4) => { + var div_8 = root_14(); + append($$anchor4, div_8); + }; + var consequent_11 = ($$anchor4) => { + var div_9 = root_15(); + var text_4 = child(div_9, true); + reset(div_9); + template_effect(() => set_text(text_4, get(strings).expired)); + append($$anchor4, div_9); + }; + var alternate_1 = ($$anchor4) => { + var div_10 = root_16(); + var text_5 = child(div_10, true); + reset(div_10); + template_effect(() => { + set_attribute(div_10, "title", get(error)); + set_text(text_5, get(strings).error); + }); + append($$anchor4, div_10); + }; + if_block(node_10, ($$render) => { + if (!get(error) && !isSecureContext) $$render(consequent_10); + else if (!get(error) && get(currentState) === State.EXPIRED) $$render(consequent_11, 1); + else $$render(alternate_1, -1); + }); + } + append($$anchor3, fragment_9); + }, + $$slots: { default: true } + }); + }; + var consequent_14 = ($$anchor2) => { + var fragment_10 = comment(); + var node_11 = first_child(fragment_10); + key(node_11, () => get(codeChallenge), ($$anchor3) => { + { + let $0 = /* @__PURE__ */ user_derived(() => get(config).codeChallengeDisplay !== "standard"); + Popover($$anchor3, { + get anchor() { + return get(elRoot); + }, + get backdrop() { + return get($0); + }, + get display() { + return get(config).codeChallengeDisplay; + }, + onClose: () => { + reset$1(); + }, + get placement() { + return get(config).popoverPlacement; + }, + role: "dialog", + get "aria-label"() { + return get(strings).verificationRequired; + }, + get dir() { + return get(dir); + }, + get updateUISignal() { + return get(updateUISignal); + }, + children: ($$anchor4, $$slotProps) => { + var fragment_12 = root_19(); + var node_12 = first_child(fragment_12); + Code(node_12, { + get audioUrl() { + return get(codeChallengeAudioUrl); + }, + get imageUrl() { + return get(codeChallengeImageUrl); + }, + onCancel: () => reset$1(), + onReload: () => verify(), + onSubmit: (code) => verifyServer(code), + get codeChallenge() { + return get(codeChallenge); + }, + get config() { + return get(config); + }, + get strings() { + return get(strings); + } + }); + var node_13 = sibling(node_12, 2); + { + var consequent_13 = ($$anchor5) => { + Footer($$anchor5, { + get logo() { + return get(showLogo); + }, + get strings() { + return get(strings); + } + }); + }; + if_block(node_13, ($$render) => { + if (get(showFooter) && get(config).codeChallengeDisplay !== "standard") $$render(consequent_13); + }); + } + append($$anchor4, fragment_12); + }, + $$slots: { default: true } + }); + } + }); + append($$anchor2, fragment_10); + }; + if_block(node_9, ($$render) => { + if (get(error) || get(currentState) === State.EXPIRED || !isSecureContext) $$render(consequent_12); + else if (get(codeChallenge) && get(currentState) === State.CODE) $$render(consequent_14, 1); + }); + } + reset(div_1); + bind_this(div_1, ($$value) => set(elRoot, $$value), () => get(elRoot)); + template_effect( + ($0) => { + set_attribute(div_1, "data-state", get(currentState)); + set_attribute(div_1, "data-display", get(config).display || void 0); + set_attribute(div_1, "data-placement", $0); + set_attribute(div_1, "data-visible", get(visible) || void 0); + set_attribute(div_1, "dir", get(dir)); + set_attribute(label, "for", get(checkboxId)); + div_1.dir = div_1.dir; + }, + [() => getPlacement(get(config).display)] + ); + append($$anchor, fragment); + var $$pop = pop($$exports); + $$cleanup(); + return $$pop; + } + if (typeof window !== "undefined" && window.customElements && !customElements.get("altcha-widget")) customElements.define("altcha-widget", create_custom_element( + Widget, + { + auto: { type: "String" }, + challenge: { type: "String" }, + configuration: { type: "String" }, + display: { type: "String" }, + language: { type: "String" }, + name: { type: "String" }, + theme: { type: "String" }, + type: { type: "String" }, + workers: { type: "Number" } + }, + [], + [ + "configure", + "getConfiguration", + "getState", + "hide", + "log", + "reset", + "setState", + "show", + "updateUI", + "verify" + ] + )); + const jsContent$1 = `(function() { + "use strict"; + function bufferStartsWith(buffer, prefix) { + if (prefix.length > buffer.length) { + return false; + } + for (let i = 0; i < prefix.length; i++) { + if (buffer[i] !== prefix[i]) { + return false; + } + } + return true; + } + function bufferToHex(buffer) { + return Array.from(new Uint8Array(buffer)).map((b) => b.toString(16).padStart(2, "0")).join(""); + } + function concatBuffers(a, b) { + const out = new Uint8Array(a.length + b.length); + out.set(a, 0); + out.set(b, a.length); + return out; + } + function hexToBuffer(hex) { + if (hex.length % 2 !== 0) { + throw new Error(\`Hex string must have an even length. Got: \${hex}\`); + } + const buffer = new ArrayBuffer(hex.length / 2); + const view = new DataView(buffer); + for (let i = 0; i < hex.length; i += 2) { + const byteString = hex.substring(i, i + 2); + const byteValue = parseInt(byteString, 16); + view.setUint8(i / 2, byteValue); + } + return new Uint8Array(buffer); + } + async function delay(ms) { + await new Promise((resolve) => setTimeout(resolve, ms)); + } + function timeDuration(start) { + return Math.floor((performance.now() - start) * 10) / 10; + } + class PasswordBuffer { + constructor(nonce, mode = "uint32") { + this.nonce = nonce; + this.mode = mode; + this.buffer = new Uint8Array(this.nonce.length + this.COUNTER_BYTES); + this.buffer.set(this.nonce, 0); + this.dataView = new DataView(this.buffer.buffer); + } + nonce; + mode; + COUNTER_BYTES = 4; + buffer; + dataView; + encoder = new TextEncoder(); + /** + * Appends the counter to the nonce buffer. + * In 'string' mode, encodes the counter as a UTF-8 string. + * In 'uint32' mode, writes the counter as a big-endian 32-bit integer. + */ + setCounter(n) { + if (this.mode === "string") { + return concatBuffers(this.nonce, this.encoder.encode(n.toString())); + } + this.dataView.setUint32(this.nonce.length, n, false); + return this.buffer; + } + } + async function solveChallenge(options) { + const { + challenge, + controller, + counterMode = "uint32", + counterStart = 0, + counterStep = 1, + deriveKey: deriveKey2, + timeout = 9e4 + } = options; + const { nonce, keyPrefix, salt } = challenge.parameters; + const nonceBuf = hexToBuffer(nonce); + const saltBuf = hexToBuffer(salt); + const keyPrefixBuf = keyPrefix.length % 2 === 0 ? hexToBuffer(keyPrefix) : null; + const password = new PasswordBuffer(nonceBuf, counterMode); + const start = performance.now(); + let counter = counterStart; + let iterations = 0; + let derivedKeyHex = ""; + let lastYield = start; + while (true) { + if (controller?.signal.aborted || timeout && iterations % 10 === 0 && performance.now() - start > timeout) { + return null; + } + const { derivedKey } = await deriveKey2( + challenge.parameters, + saltBuf, + password.setCounter(counter) + ); + if (iterations % 10 === 0 && performance.now() - lastYield > 200) { + await delay(0); + lastYield = performance.now(); + } + if (keyPrefixBuf ? bufferStartsWith(derivedKey, keyPrefixBuf) : bufferToHex(derivedKey).startsWith(keyPrefix)) { + derivedKeyHex = bufferToHex(derivedKey); + break; + } + counter = counter + counterStep; + iterations = iterations + 1; + } + return { + counter, + derivedKey: derivedKeyHex, + time: timeDuration(start) + }; + } + function handler(options) { + const { deriveKey: deriveKey2 } = options; + let controller = void 0; + self.onmessage = async (message) => { + const { challenge, counterMode, counterStart, counterStep, timeout, type } = message.data; + if (type === "abort") { + controller?.abort(); + } else if (type === "work") { + controller = new AbortController(); + let solution; + try { + solution = await solveChallenge({ + challenge, + controller, + counterStart, + counterStep, + deriveKey: deriveKey2, + counterMode, + timeout + }); + } catch (err) { + return self.postMessage({ error: err }); + } + self.postMessage(solution); + } + }; + } + function getDigest(algorithm) { + switch (algorithm) { + case "PBKDF2/SHA-512": + return "SHA-512"; + case "PBKDF2/SHA-384": + return "SHA-384"; + case "PBKDF2/SHA-256": + default: + return "SHA-256"; + } + } + async function deriveKey(parameters, salt, password) { + const { algorithm, cost, keyLength = 32 } = parameters; + const passwordKey = await crypto.subtle.importKey( + "raw", + password, + { name: "PBKDF2" }, + false, + ["deriveKey"] + ); + const derivedKey = await crypto.subtle.deriveKey( + { + name: "PBKDF2", + salt, + iterations: cost, + hash: getDigest(algorithm) + }, + passwordKey, + { name: "AES-GCM", length: keyLength * 8 }, + true, + ["encrypt"] + ); + return { + derivedKey: new Uint8Array(await crypto.subtle.exportKey("raw", derivedKey)) + }; + } + handler({ + deriveKey + }); +})(); +`; + const blob$1 = typeof self !== "undefined" && self.Blob && new Blob(["(self.URL || self.webkitURL).revokeObjectURL(self.location.href);", jsContent$1], { type: "text/javascript;charset=utf-8" }); + function WorkerWrapper$1(options) { + let objURL; + try { + objURL = blob$1 && (self.URL || self.webkitURL).createObjectURL(blob$1); + if (!objURL) throw ""; + const worker = new Worker(objURL, { + name: options?.name + }); + worker.addEventListener("error", () => { + (self.URL || self.webkitURL).revokeObjectURL(objURL); + }); + return worker; + } catch (e) { + return new Worker( + "data:text/javascript;charset=utf-8," + encodeURIComponent(jsContent$1), + { + name: options?.name + } + ); + } + } + const jsContent = `(function() { + "use strict"; + function bufferStartsWith(buffer, prefix) { + if (prefix.length > buffer.length) { + return false; + } + for (let i = 0; i < prefix.length; i++) { + if (buffer[i] !== prefix[i]) { + return false; + } + } + return true; + } + function bufferToHex(buffer) { + return Array.from(new Uint8Array(buffer)).map((b) => b.toString(16).padStart(2, "0")).join(""); + } + function concatBuffers(a, b) { + const out = new Uint8Array(a.length + b.length); + out.set(a, 0); + out.set(b, a.length); + return out; + } + function hexToBuffer(hex) { + if (hex.length % 2 !== 0) { + throw new Error(\`Hex string must have an even length. Got: \${hex}\`); + } + const buffer = new ArrayBuffer(hex.length / 2); + const view = new DataView(buffer); + for (let i = 0; i < hex.length; i += 2) { + const byteString = hex.substring(i, i + 2); + const byteValue = parseInt(byteString, 16); + view.setUint8(i / 2, byteValue); + } + return new Uint8Array(buffer); + } + async function delay(ms) { + await new Promise((resolve) => setTimeout(resolve, ms)); + } + function timeDuration(start) { + return Math.floor((performance.now() - start) * 10) / 10; + } + class PasswordBuffer { + constructor(nonce, mode = "uint32") { + this.nonce = nonce; + this.mode = mode; + this.buffer = new Uint8Array(this.nonce.length + this.COUNTER_BYTES); + this.buffer.set(this.nonce, 0); + this.dataView = new DataView(this.buffer.buffer); + } + nonce; + mode; + COUNTER_BYTES = 4; + buffer; + dataView; + encoder = new TextEncoder(); + /** + * Appends the counter to the nonce buffer. + * In 'string' mode, encodes the counter as a UTF-8 string. + * In 'uint32' mode, writes the counter as a big-endian 32-bit integer. + */ + setCounter(n) { + if (this.mode === "string") { + return concatBuffers(this.nonce, this.encoder.encode(n.toString())); + } + this.dataView.setUint32(this.nonce.length, n, false); + return this.buffer; + } + } + async function solveChallenge(options) { + const { + challenge, + controller, + counterMode = "uint32", + counterStart = 0, + counterStep = 1, + deriveKey: deriveKey2, + timeout = 9e4 + } = options; + const { nonce, keyPrefix, salt } = challenge.parameters; + const nonceBuf = hexToBuffer(nonce); + const saltBuf = hexToBuffer(salt); + const keyPrefixBuf = keyPrefix.length % 2 === 0 ? hexToBuffer(keyPrefix) : null; + const password = new PasswordBuffer(nonceBuf, counterMode); + const start = performance.now(); + let counter = counterStart; + let iterations = 0; + let derivedKeyHex = ""; + let lastYield = start; + while (true) { + if (controller?.signal.aborted || timeout && iterations % 10 === 0 && performance.now() - start > timeout) { + return null; + } + const { derivedKey } = await deriveKey2( + challenge.parameters, + saltBuf, + password.setCounter(counter) + ); + if (iterations % 10 === 0 && performance.now() - lastYield > 200) { + await delay(0); + lastYield = performance.now(); + } + if (keyPrefixBuf ? bufferStartsWith(derivedKey, keyPrefixBuf) : bufferToHex(derivedKey).startsWith(keyPrefix)) { + derivedKeyHex = bufferToHex(derivedKey); + break; + } + counter = counter + counterStep; + iterations = iterations + 1; + } + return { + counter, + derivedKey: derivedKeyHex, + time: timeDuration(start) + }; + } + function handler(options) { + const { deriveKey: deriveKey2 } = options; + let controller = void 0; + self.onmessage = async (message) => { + const { challenge, counterMode, counterStart, counterStep, timeout, type } = message.data; + if (type === "abort") { + controller?.abort(); + } else if (type === "work") { + controller = new AbortController(); + let solution; + try { + solution = await solveChallenge({ + challenge, + controller, + counterStart, + counterStep, + deriveKey: deriveKey2, + counterMode, + timeout + }); + } catch (err) { + return self.postMessage({ error: err }); + } + self.postMessage(solution); + } + }; + } + async function deriveKey(parameters, salt, password) { + const { algorithm, keyLength = 32 } = parameters; + const iterations = Math.max(1, parameters.cost); + let data = void 0; + let derivedKey = void 0; + for (let i = 0; i < iterations; i++) { + if (i === 0) { + data = concatBuffers(salt, password); + } else { + data = derivedKey; + } + derivedKey = new Uint8Array( + (await crypto.subtle.digest(algorithm, data)).slice(0, keyLength) + ); + } + return { + parameters: {}, + derivedKey + }; + } + handler({ + deriveKey + }); +})(); +`; + const blob = typeof self !== "undefined" && self.Blob && new Blob(["(self.URL || self.webkitURL).revokeObjectURL(self.location.href);", jsContent], { type: "text/javascript;charset=utf-8" }); + function WorkerWrapper(options) { + let objURL; + try { + objURL = blob && (self.URL || self.webkitURL).createObjectURL(blob); + if (!objURL) throw ""; + const worker = new Worker(objURL, { + name: options?.name + }); + worker.addEventListener("error", () => { + (self.URL || self.webkitURL).revokeObjectURL(objURL); + }); + return worker; + } catch (e) { + return new Worker( + "data:text/javascript;charset=utf-8," + encodeURIComponent(jsContent), + { + name: options?.name + } + ); + } + } + const css = ':root {\n --altcha-border-color: var(--altcha-color-neutral);\n --altcha-border-width: 1px;\n --altcha-border-radius: 6px;\n --altcha-color-base: light-dark(oklch(100% 0.00011 271.152), oklch(20.904% 0.00002 271.152));\n --altcha-color-base-content: light-dark(\n oklch(20.904% 0.00002 271.152),\n oklch(100% 0.00011 271.152)\n );\n --altcha-color-error: oklch(51.284% 0.20527 28.678);\n --altcha-color-error-content: oklch(100% 0.00011 271.152);\n --altcha-color-neutral: light-dark(oklch(83.591% 0.0001 271.152), oklch(46.04% 0.00005 271.152));\n --altcha-color-neutral-content: light-dark(\n oklch(46.76% 0.00005 271.152),\n oklch(100% 0.00011 271.152)\n );\n --altcha-color-primary: oklch(40.279% 0.2449 268.131);\n --altcha-color-primary-content: oklch(100% 0.00011 271.152);\n --altcha-color-success: oklch(55.748% 0.18968 142.511);\n --altcha-color-success-content: oklch(100% 0.00011 271.152);\n --altcha-checkbox-border-color: light-dark(\n oklch(66.494% 0.00233 15.434),\n oklch(51.028% 0.00006 271.152)\n );\n --altcha-checkbox-border-radius: 5px;\n --altcha-checkbox-border-width: var(--altcha-border-width);\n --altcha-checkbox-outline: 2px solid var(--altcha-checkbox-outline-color);\n --altcha-checkbox-outline-color: -webkit-focus-ring-color;\n --altcha-checkbox-outline-offset: 2px;\n --altcha-checkbox-size: 22px;\n --altcha-checkbox-transition-duration: var(--altcha-transition-duration);\n --altcha-input-background-color: var(--altcha-color-base);\n --altcha-input-border-radius: 3px;\n --altcha-input-border-width: 1px;\n --altcha-input-color: var(--altcha-color-base-content);\n --altcha-max-width: 320px;\n --altcha-padding: 0.75rem;\n --altcha-popover-arrow-size: 6px;\n --altcha-popover-color: var(--altcha-border-color);\n --altcha-shadow: drop-shadow(3px 3px 6px oklch(0% 0 0 / 0.2));\n --altcha-spinner-color: var(--altcha-color-base-content);\n --altcha-switch-background-color: var(--altcha-color-neutral);\n --altcha-switch-border-radius: calc(infinity * 1px);\n --altcha-switch-height: var(--altcha-checkbox-size);\n --altcha-switch-padding: 0.25rem;\n --altcha-switch-width: calc(var(--altcha-checkbox-size) * 1.75);\n --altcha-switch-toggle-border-radius: 100%;\n --altcha-switch-toggle-color: var(--altcha-color-neutral-content);\n --altcha-switch-toggle-size: calc(\n var(--altcha-switch-height) - calc(var(--altcha-switch-padding) * 2)\n );\n --altcha-transition-duration: 0.6s;\n --altcha-z-index: 99999999;\n --altcha-z-index-popover: 999999999;\n}\n\n@supports (-moz-appearance: none) {\n :root {\n --altcha-checkbox-outline-color: var(--altcha-color-primary);\n }\n}\n.altcha {\n all: revert-layer;\n display: none;\n font-family: inherit;\n font-size: inherit;\n position: relative;\n}\n.altcha[data-visible] {\n display: block;\n}\n.altcha-popover, .altcha-popover * {\n all: revert-layer;\n box-sizing: border-box;\n font-family: inherit;\n font-size: inherit;\n line-height: 1.25;\n}\n.altcha * {\n all: revert-layer;\n box-sizing: border-box;\n font-family: inherit;\n font-size: inherit;\n line-height: 1.25;\n}\n.altcha a, .altcha-popover a {\n color: currentColor;\n text-decoration: none;\n}\n.altcha a:hover, .altcha-popover a:hover {\n color: currentColor;\n}\n.altcha-main {\n align-items: start;\n background-color: var(--altcha-color-base);\n border: var(--altcha-border-width, 1px) solid var(--altcha-border-color);\n border-radius: var(--altcha-border-radius, 0);\n color: var(--altcha-color-base-content);\n display: flex;\n flex-direction: column;\n gap: 0.5rem;\n justify-content: space-between;\n padding: var(--altcha-padding);\n max-width: var(--altcha-max-width, 100%);\n}\n.altcha-main > * {\n display: flex;\n width: 100%;\n}\n.altcha-main > *:first-child {\n flex-grow: 1;\n}\n.altcha-checkbox-wrap {\n align-items: center;\n display: flex;\n flex-direction: row;\n flex-grow: 1;\n gap: 0.5rem;\n}\n.altcha-checkbox-wrap > * {\n display: flex;\n}\n.altcha-logo {\n opacity: 0.7;\n}\n.altcha-footer {\n align-items: center;\n display: flex;\n flex-grow: 1;\n gap: 0.5rem;\n justify-content: flex-end;\n font-size: 0.7rem;\n opacity: 0.7;\n}\n.altcha-footer p {\n margin: 0;\n padding: 0;\n}\n.altcha-error {\n font-size: 0.85rem;\n}\n.altcha-button {\n align-items: center;\n background: var(--altcha-color-primary);\n border: var(--altcha-input-border-width) solid var(--altcha-color-primary);\n border-radius: var(--altcha-input-border-radius);\n color: var(--altcha-color-primary-content);\n cursor: pointer;\n display: flex;\n font-size: 0.9rem;\n gap: 0.5rem;\n padding: 0.35rem;\n}\n.altcha-button:focus {\n border-color: var(--altcha-color-primary);\n outline: var(--altcha-checkbox-outline);\n outline-offset: var(--altcha-checkbox-outline-offset);\n}\n.altcha-button > .altcha-spinner, .altcha-button > svg {\n height: 20px;\n width: 20px;\n}\n.altcha-button-secondary {\n background: transparent;\n border-color: var(--altcha-color-neutral);\n color: var(--altcha-color-neutral-content);\n}\n.altcha-input {\n background: var(--altcha-input-background-color);\n border: var(--altcha-input-border-width) solid var(--altcha-color-neutral);\n border-radius: var(--altcha-input-border-radius);\n color: var(--altcha-input-color);\n flex-grow: 1;\n font-size: 1rem;\n min-width: 0;\n padding: 0.25rem;\n width: auto;\n}\n.altcha-input:focus {\n border-color: var(--altcha-color-primary);\n outline: var(--altcha-checkbox-outline);\n outline-offset: var(--altcha-checkbox-outline-offset);\n}\n.altcha-spinner {\n animation: altcha-rotate 0.6s linear infinite;\n border-radius: 100%;\n border: var(--altcha-checkbox-border-width) solid var(--altcha-spinner-color);\n border-bottom-color: transparent;\n border-right-color: transparent;\n opacity: 0.7;\n}\n.altcha-popover {\n background-color: var(--altcha-color-base);\n border: var(--altcha-border-width) solid var(--altcha-border-color);\n border-radius: var(--altcha-border-radius);\n color: var(--altcha-color-base-content);\n filter: var(--altcha-shadow);\n position: absolute;\n left: calc(var(--altcha-padding) / 2);\n max-width: calc(var(--altcha-max-width) - var(--altcha-padding));\n top: calc(var(--altcha-padding) + var(--altcha-checkbox-size) + var(--altcha-popover-arrow-size));\n z-index: var(--altcha-z-index-popover);\n}\n.altcha-popover-arrow {\n border: var(--altcha-popover-arrow-size) solid transparent;\n border-bottom-color: var(--altcha-popover-color);\n content: "";\n height: 0;\n left: calc(var(--altcha-checkbox-size) / 2);\n position: absolute;\n top: calc(var(--altcha-popover-arrow-size) * -2);\n width: 0;\n}\n.altcha-popover-content {\n max-height: 100dvh;\n overflow: auto;\n padding: var(--altcha-padding);\n}\n.altcha-popover[data-top=true][data-display=standard] {\n bottom: calc(100% - (var(--altcha-padding) - var(--altcha-popover-arrow-size)));\n top: auto;\n}\n.altcha-popover[data-top=true][data-display=standard] .altcha-popover-arrow {\n border-bottom-color: transparent;\n border-top-color: var(--altcha-popover-color);\n bottom: calc(var(--altcha-popover-arrow-size) * -2);\n top: auto;\n}\n.altcha-popover[data-variant=error] {\n --altcha-popover-color: var(--altcha-color-error);\n background-color: var(--altcha-color-error);\n border-color: var(--altcha-color-error);\n color: var(--altcha-color-error-content);\n}\n.altcha-popover[data-variant=error] .altcha-popover-content {\n padding: calc(var(--altcha-padding) / 1.5) var(--altcha-padding);\n}\n.altcha-popover[data-display=overlay] {\n animation: altcha-overlay-slidein 0.5s forwards;\n left: 50%;\n position: fixed;\n top: 45%;\n transform: translate(-50%, -50%);\n width: var(--altcha-max-width);\n z-index: var(--altcha-z-index);\n}\n.altcha-popover[data-display=bottomsheet] {\n animation: altcha-bottomsheet-slideup 0.5s forwards;\n border-bottom-left-radius: 0;\n border-bottom-right-radius: 0;\n border-bottom: 0;\n bottom: -100%;\n left: 50%;\n position: fixed;\n top: auto;\n transform: translate(-50%, 0);\n width: var(--altcha-max-width);\n z-index: var(--altcha-z-index);\n}\n.altcha-popover[data-display=bottomsheet] .altcha-popover-content {\n padding-bottom: calc(var(--altcha-padding) * 2);\n}\n.altcha-popover-backdrop {\n background: var(--altcha-color-base-content);\n bottom: 0;\n left: 0;\n opacity: 0.1;\n position: fixed;\n right: 0;\n top: 0;\n transition: opacity 0.5s;\n z-index: var(--altcha-z-index);\n}\n.altcha-popover-close {\n color: var(--altcha-color-base-content);\n cursor: pointer;\n display: inline-block;\n font-size: 1rem;\n height: 1.25rem;\n line-height: 0.95;\n position: absolute;\n right: 0;\n text-align: center;\n text-shadow: 0 0 1px var(--altcha-color-base);\n top: -1.5rem;\n width: 1.25rem;\n z-index: var(--altcha-z-index);\n}\n[dir=rtl] .altcha-popover {\n left: auto;\n right: calc(var(--altcha-padding) / 2);\n}\n[dir=rtl] .altcha-popover-arrow {\n left: auto;\n right: calc(var(--altcha-checkbox-size) / 2);\n}\n[dir=rtl] .altcha-popover-close {\n left: 0;\n right: auto;\n}\n.altcha-popover[data-display=bottomsheet] .altcha-footer, .altcha-popover[data-display=overlay] .altcha-footer {\n align-items: center;\n justify-content: center;\n padding-top: 1rem;\n gap: 0.5rem;\n}\n.altcha-popover[data-display=bottomsheet] .altcha-footer svg, .altcha-popover[data-display=overlay] .altcha-footer svg {\n height: 18px;\n width: 18px;\n vertical-align: middle;\n}\n.altcha-code-challenge > form {\n display: flex;\n flex-direction: column;\n gap: 0.5rem;\n}\n.altcha-code-challenge-title {\n font-weight: 600;\n}\n.altcha-code-challenge-text {\n font-size: 0.85rem;\n}\n.altcha-code-challenge-image {\n background: white;\n border: var(--altcha-input-border-width) solid var(--altcha-color-neutral);\n border-radius: var(--altcha-input-border-radius);\n object-fit: contain;\n height: 50px;\n}\n.altcha-code-challenge-row {\n display: flex;\n gap: 0.5rem;\n}\n.altcha-code-challenge-buttons {\n align-items: center;\n display: flex;\n flex-direction: column;\n gap: 0.5rem;\n margin-top: var(--altcha-padding);\n justify-content: space-between;\n}\n.altcha-code-challenge-buttons button {\n justify-content: center;\n width: 100%;\n}\n.altcha-checkbox {\n cursor: pointer;\n height: var(--altcha-checkbox-size);\n position: relative;\n width: var(--altcha-checkbox-size);\n}\n.altcha-checkbox input {\n appearance: none;\n background: var(--altcha-input-background-color);\n border: var(--altcha-checkbox-border-width, 2px) solid var(--altcha-checkbox-border-color);\n border-radius: var(--altcha-checkbox-border-radius);\n cursor: pointer;\n height: var(--altcha-checkbox-size);\n left: 0;\n margin: 0;\n padding: 0;\n position: absolute;\n top: 0;\n width: var(--altcha-checkbox-size);\n}\n@supports (hanging-punctuation: first) and (font: -apple-system-body) and (-webkit-appearance: none) {\n .altcha-checkbox input {\n /* Safari-only: fixes focus outline */\n }\n .altcha-checkbox input:focus {\n outline-width: 2px;\n outline-style: solid;\n }\n}\n.altcha-checkbox input:before {\n border-radius: var(--altcha-checkbox-border-radius);\n content: "";\n width: 100%;\n height: 100%;\n background: var(--altcha-color-neutral);\n display: block;\n transform: scale(0);\n}\n.altcha-checkbox input:checked {\n background-color: var(--altcha-color-success);\n border-color: var(--altcha-color-success);\n}\n.altcha-checkbox input:checked::before {\n background-color: var(--altcha-color-success);\n opacity: 0;\n transform: scale(2.2);\n transition: all var(--altcha-checkbox-transition-duration) ease;\n transition-delay: 0.1s;\n}\n.altcha-checkbox svg {\n --altcha-radio-svg-size: calc(var(--altcha-checkbox-size) * 0.5);\n --altcha-radio-svg-offset: calc(var(--altcha-checkbox-size) * 0.25);\n fill: none;\n left: var(--altcha-radio-svg-offset);\n height: var(--altcha-radio-svg-size);\n opacity: 0;\n position: absolute;\n stroke: currentColor;\n stroke-width: 2;\n stroke-linecap: round;\n stroke-linejoin: round;\n stroke-dasharray: 16px;\n stroke-dashoffset: 16px;\n top: var(--altcha-radio-svg-offset);\n transform: translate3d(0, 0, 0);\n width: var(--altcha-radio-svg-size);\n}\n.altcha-checkbox input:checked + svg {\n color: var(--altcha-color-success-content);\n opacity: 1;\n stroke-dashoffset: 0;\n transition: all var(--altcha-checkbox-transition-duration) ease;\n transition-delay: 0.1s;\n}\n.altcha-checkbox-spinner {\n display: none;\n left: 0;\n height: var(--altcha-checkbox-size);\n position: absolute;\n top: 0;\n width: var(--altcha-checkbox-size);\n}\n.altcha-checkbox[data-loading=true] input {\n appearance: none;\n opacity: 0;\n pointer-events: none;\n}\n.altcha-checkbox[data-loading=true] .altcha-checkbox-spinner {\n display: block;\n}\n.altcha-checkbox-native {\n height: var(--altcha-checkbox-size);\n position: relative;\n width: var(--altcha-checkbox-size);\n}\n.altcha-checkbox-native input {\n height: var(--altcha-checkbox-size);\n margin: 0;\n width: var(--altcha-checkbox-size);\n}\n.altcha-checkbox-native-spinner {\n display: none;\n left: 0;\n height: var(--altcha-checkbox-size);\n position: absolute;\n top: 0;\n width: var(--altcha-checkbox-size);\n}\n.altcha-checkbox-native[data-loading=true] input {\n appearance: none;\n opacity: 0;\n pointer-events: none;\n}\n.altcha-checkbox-native[data-loading=true] .altcha-checkbox-native-spinner {\n display: block;\n}\n.altcha-switch {\n align-items: center;\n border-radius: var(--altcha-switch-border-radius);\n background-color: var(--altcha-switch-background-color);\n display: flex;\n height: var(--altcha-switch-height);\n padding: var(--altcha-switch-padding);\n position: relative;\n width: var(--altcha-switch-width);\n}\n.altcha-switch:focus-within {\n outline: var(--altcha-checkbox-outline);\n outline-offset: var(--altcha-checkbox-outline-offset);\n}\n.altcha-switch input {\n appearance: none;\n cursor: pointer;\n height: 100%;\n left: 0;\n opacity: 0;\n position: absolute;\n top: 0;\n width: 100%;\n}\n.altcha-switch-toggle {\n align-items: center;\n background-color: var(--altcha-switch-toggle-color);\n border-radius: var(--altcha-switch-toggle-border-radius);\n cursor: pointer;\n display: flex;\n height: var(--altcha-switch-toggle-size);\n justify-content: center;\n left: var(--altcha-switch-padding);\n position: absolute;\n transition: width 150ms ease-out, left 150ms ease-out;\n width: var(--altcha-switch-toggle-size);\n}\n.altcha-switch-spinner {\n display: none;\n height: var(--altcha-switch-toggle-size);\n width: var(--altcha-switch-toggle-size);\n}\n.altcha-switch[data-loading=true] {\n pointer-events: none;\n}\n.altcha-switch[data-loading=true] .altcha-switch-spinner {\n display: block;\n}\n.altcha-switch[data-loading=true] .altcha-switch-toggle {\n background-color: transparent;\n left: calc(50% - var(--altcha-switch-toggle-size) / 2);\n}\n[data-state=verified] .altcha-switch {\n --altcha-switch-background-color: var(--altcha-color-success);\n}\n[data-state=verified] .altcha-switch-toggle {\n background-color: var(--altcha-color-success-content);\n left: calc(100% - var(--altcha-switch-height) + var(--altcha-switch-padding));\n}\n[dir=rtl] .altcha-switch-toggle {\n left: calc(100% - var(--altcha-switch-height) + var(--altcha-switch-padding));\n}\n[dir=rtl][data-state=verified] .altcha-switch-toggle {\n left: var(--altcha-switch-padding);\n}\n.altcha-floating-arrow {\n border: 6px solid transparent;\n border-bottom-color: var(--altcha-border-color);\n content: "";\n height: 0;\n left: 12px;\n position: absolute;\n top: -12px;\n width: 0;\n}\n.altcha-overlay-backdrop {\n bottom: 0;\n left: 0;\n position: fixed;\n right: 0;\n top: 0;\n transition: opacity var(--altcha-transition-duration);\n z-index: var(--altcha-z-index);\n}\n.altcha-overlay-close {\n display: inline-block;\n color: currentColor;\n cursor: pointer;\n font-size: 1rem;\n height: 1rem;\n line-height: 0.85;\n position: absolute;\n right: 0;\n text-align: center;\n text-shadow: 0 0 1px var(--altcha-color-base);\n top: -1.5rem;\n width: 1rem;\n z-index: var(--altcha-z-index);\n}\n.altcha[data-display=overlay] {\n animation: altcha-overlay-slidein var(--altcha-transition-duration) forwards;\n filter: var(--altcha-shadow);\n left: 50%;\n opacity: 0;\n position: fixed;\n top: 45%;\n transform: translate(-50%, -50%);\n z-index: var(--altcha-z-index);\n}\n.altcha[data-display=overlay] .altcha-main {\n width: var(--altcha-max-width);\n}\n.altcha[data-display=floating] {\n display: none;\n filter: var(--altcha-shadow);\n left: var(--altcha-floating-left, -100%);\n position: fixed;\n top: var(--altcha-floating-top, -100%);\n z-index: var(--altcha-z-index);\n}\n.altcha[data-display=floating] .altcha-main {\n width: var(--altcha-max-width);\n}\n.altcha[data-display=floating][data-floating-position=top] .altcha-floating-arrow {\n border-bottom-color: transparent;\n border-top-color: var(--altcha-border-color);\n bottom: -12px;\n top: auto;\n}\n.altcha[data-display=floating][data-visible] {\n display: flex;\n}\n.altcha[data-display=bar] {\n bottom: -100%;\n filter: var(--altcha-shadow);\n left: 0;\n position: fixed;\n right: 0;\n transition: bottom var(--altcha-transition-duration), top var(--altcha-transition-duration);\n z-index: var(--altcha-z-index);\n}\n.altcha[data-display=bar] .altcha-main {\n align-items: center;\n border-radius: 0;\n border-width: var(--altcha-border-width) 0 0 0;\n flex-direction: row;\n max-width: 100% !important;\n}\n.altcha[data-display=bar] .altcha-main > * {\n width: auto;\n}\n.altcha[data-display=bar][data-placement=top] {\n bottom: auto;\n top: -100%;\n}\n.altcha[data-display=bar][data-placement=top] .altcha-main {\n border-width: 0 0 var(--altcha-border-width) 0;\n}\n.altcha[data-display=bar][data-placement=bottom]:not([data-state=unverified]) {\n bottom: 0;\n}\n.altcha[data-display=bar][data-placement=top]:not([data-state=unverified]) {\n top: 0;\n}\n.altcha[data-display=invisible] {\n display: none;\n}\n\n@keyframes altcha-rotate {\n 0% {\n transform: rotate(0deg);\n }\n 100% {\n transform: rotate(360deg);\n }\n}\n@keyframes altcha-bottomsheet-slideup {\n 100% {\n bottom: 0;\n }\n}\n@keyframes altcha-overlay-slidein {\n 100% {\n opacity: 1;\n top: 50%;\n }\n}'; + injectCss(css); + $altcha.algorithms.set("SHA-256", () => new WorkerWrapper()); + $altcha.algorithms.set("SHA-384", () => new WorkerWrapper()); + $altcha.algorithms.set("SHA-512", () => new WorkerWrapper()); + $altcha.algorithms.set("PBKDF2/SHA-256", () => new WorkerWrapper$1()); + $altcha.algorithms.set("PBKDF2/SHA-384", () => new WorkerWrapper$1()); + $altcha.algorithms.set("PBKDF2/SHA-512", () => new WorkerWrapper$1()); +})); diff --git a/frontend/node_modules/altcha/dist/main/altcha.umd.min.cjs b/frontend/node_modules/altcha/dist/main/altcha.umd.min.cjs new file mode 100644 index 0000000..b345189 --- /dev/null +++ b/frontend/node_modules/altcha/dist/main/altcha.umd.min.cjs @@ -0,0 +1 @@ +!function(e){"function"==typeof define&&define.amd?define(e):e()}(function(){"use strict";const e=!1;var t=Array.isArray,n=Array.prototype.indexOf,r=Array.prototype.includes,a=Array.from,o=Object.keys,i=Object.defineProperty,l=Object.getOwnPropertyDescriptor,s=Object.getOwnPropertyDescriptors,c=Object.prototype,u=Array.prototype,f=Object.getPrototypeOf,d=Object.isExtensible;const h=()=>{};function p(){var e,t;return{promise:new Promise((n,r)=>{e=n,t=r}),resolve:e,reject:t}}const v=1<<24,g=16,m=32,b=64,y=512,w=1024,x=2048,k=4096,_=8192,$=16384,S=32768,C=1<<25,E=65536,T=1<<17,A=1<<19,I=65536,P=1<<21,O=1<<23,R=Symbol("$state"),L=Symbol("legacy props"),M=Symbol(""),D=Symbol("attributes"),U=Symbol("class"),V=Symbol("style"),N=Symbol("text"),z=Symbol("form reset"),j=new class extends Error{name="StaleReactionError";message="The reaction that called `getAbortSignal()` was re-run or destroyed"},B=!!globalThis.document?.contentType&&globalThis.document.contentType.includes("xml");function F(e){return e===this.v}function H(e,t){return e!=e?t==t:e!==t||null!==e&&"object"==typeof e||"function"==typeof e}function K(e){return!H(e,this.v)}const q={},Y=Symbol("uninitialized"),G="http://www.w3.org/1999/xhtml";let W=null;function J(e){W=e}function Z(e,t=!1,n){W={p:W,i:!1,c:null,e:null,s:e,x:null,r:jt,l:null}}function X(e){var t=W,n=t.e;if(null!==n)for(var r of(t.e=null,n))gn(r);return void 0!==e&&(t.x=e),t.i=!0,W=t.p,e??{}}let Q=[];function ee(){var e=Q;Q=[],function(e){for(var t=0;t{t===Q&&ee()})}Q.push(e)}function ne(){for(;Q.length>0;)ee()}function re(e){console.warn("https://svelte.dev/e/hydration_mismatch")}let ae,oe=!1;function ie(e){oe=e}function le(e){if(null===e)throw re(),q;return ae=e}function se(){return le($e(ae))}function ce(e){if(oe){if(null!==$e(ae))throw re(),q;ae=e}}function ue(e=1){if(oe){for(var t=e,n=ae;t--;)n=$e(n);ae=n}}function fe(e=!0){for(var t=0,n=ae;;){if(8===n.nodeType){var r=n.data;if("]"===r){if(0===t)return n;t-=1}else("["===r||"[!"===r||"["===r[0]&&!isNaN(Number(r.slice(1))))&&(t+=1)}var a=$e(n);e&&n.remove(),n=a}}function de(e){if(!e||8!==e.nodeType)throw re(),q;return e.data}function he(e){if("object"!=typeof e||null===e||R in e)return e;const n=f(e);if(n!==c&&n!==u)return e;var r=new Map,a=t(e),o=St(0),i=Jt,s=e=>{if(Jt===i)return e();var t=Vt,n=Jt;zt(null),Zt(i);var r=e();return zt(t),Zt(n),r};return a&&r.set("length",St(e.length)),new Proxy(e,{defineProperty(e,t,n){"value"in n&&!1!==n.configurable&&!1!==n.enumerable&&!1!==n.writable||function(){throw new Error("https://svelte.dev/e/state_descriptors_fixed")}();var a=r.get(t);return void 0===a?s(()=>{var e=St(n.value);return r.set(t,e),e}):Et(a,n.value,!0),!0},deleteProperty(e,t){var n=r.get(t);if(void 0===n){if(t in e){const e=s(()=>St(Y));r.set(t,e),At(o)}}else Et(n,Y),At(o);return!0},get(t,n,a){if(n===R)return e;var o=r.get(n),i=n in t;if(void 0!==o||i&&!l(t,n)?.writable||(o=s(()=>St(he(i?t[n]:Y))),r.set(n,o)),void 0!==o){var c=ln(o);return c===Y?void 0:c}return Reflect.get(t,n,a)},getOwnPropertyDescriptor(e,t){var n=Reflect.getOwnPropertyDescriptor(e,t);if(n&&"value"in n){var a=r.get(t);a&&(n.value=ln(a))}else if(void 0===n){var o=r.get(t),i=o?.v;if(void 0!==o&&i!==Y)return{enumerable:!0,configurable:!0,value:i,writable:!0}}return n},has(e,t){if(t===R)return!0;var n=r.get(t),a=void 0!==n&&n.v!==Y||Reflect.has(e,t);if((void 0!==n||null!==jt&&(!a||l(e,t)?.writable))&&(void 0===n&&(n=s(()=>St(a?he(e[t]):Y)),r.set(t,n)),ln(n)===Y))return!1;return a},set(e,t,n,i){var c=r.get(t),u=t in e;if(a&&"length"===t)for(var f=n;fSt(Y)),r.set(f+"",d))}void 0===c?u&&!l(e,t)?.writable||(Et(c=s(()=>St(void 0)),he(n)),r.set(t,c)):(u=c.v!==Y,Et(c,s(()=>he(n))));var h=Reflect.getOwnPropertyDescriptor(e,t);if(h?.set&&h.set.call(i,n),!u){if(a&&"string"==typeof t){var p=r.get("length"),v=Number(t);Number.isInteger(v)&&v>=p.v&&Et(p,v+1)}At(o)}return!0},ownKeys(e){ln(o);var t=Reflect.ownKeys(e).filter(e=>{var t=r.get(e);return void 0===t||t.v!==Y});for(var[n,a]of r)a.v===Y||n in e||t.push(n);return t},setPrototypeOf(){!function(){throw new Error("https://svelte.dev/e/state_prototype_fixed")}()}})}function pe(e){try{if(null!==e&&"object"==typeof e&&R in e)return e[R]}catch{}return e}function ve(e,t){return Object.is(pe(e),pe(t))}var ge,me,be,ye,we;function xe(){if(void 0===ge){ge=window,me=document,be=/Firefox/.test(navigator.userAgent);var e=Element.prototype,t=Node.prototype,n=Text.prototype;ye=l(t,"firstChild").get,we=l(t,"nextSibling").get,d(e)&&(e[U]=void 0,e[D]=null,e[V]=void 0,e.__e=void 0),d(n)&&(n[N]=void 0)}}function ke(e=""){return document.createTextNode(e)}function _e(e){return ye.call(e)}function $e(e){return we.call(e)}function Se(e,t){if(!oe)return _e(e);var n=_e(ae);if(null===n)n=ae.appendChild(ke());else if(t&&3!==n.nodeType){var r=ke();return n?.before(r),le(r),r}return t&&Ae(n),le(n),n}function Ce(e,t=!1){if(!oe){var n=_e(e);return n instanceof Comment&&""===n.data?$e(n):n}if(t){if(3!==ae?.nodeType){var r=ke();return ae?.before(r),le(r),r}Ae(ae)}return ae}function Ee(e,t=1,n=!1){let r=oe?ae:e;for(var a;t--;)a=r,r=$e(r);if(!oe)return r;if(n){if(3!==r?.nodeType){var o=ke();return null===r?a?.after(o):r.before(o),le(o),o}Ae(r)}return le(r),r}function Te(e,t,n){let r;return document.createElementNS(t??G,e,r)}function Ae(e){if(e.nodeValue.length<65536)return;let t=e.nextSibling;for(;null!==t&&3===t.nodeType;)t.remove(),e.nodeValue+=t.nodeValue,t=e.nextSibling}function Ie(e){var t=jt;if(null===t)return Vt.f|=O,e;if(0===(t.f&S)&&!(4&t.f))throw e;Pe(e,t)}function Pe(e,t){for(;null!==t;){if(128&t.f){if(0===(t.f&S))throw e;try{return void t.b.error(e)}catch(t){e=t}}t=t.parent}throw e}const Oe=-7169;function Re(e,t){e.f=e.f&Oe|t}function Le(e){0!==(e.f&y)||null===e.deps?Re(e,w):Re(e,k)}function Me(e){if(null!==e)for(const t of e)2&t.f&&0!==(t.f&I)&&(t.f^=I,Me(t.deps))}function De(e,t,n){0!==(e.f&x)?t.add(e):0!==(e.f&k)&&n.add(e),Me(e.deps),Re(e,w)}function Ue(e,t,n){if(null==e)return t(void 0),h;const r=un(()=>e.subscribe(t,n));return r.unsubscribe?()=>r.unsubscribe():r}const Ve=[];function Ne(e,t=h){let n=null;const r=new Set;function a(t){if(H(e,t)&&(e=t,n)){const t=!Ve.length;for(const t of r)t[1](),Ve.push(t,e);if(t){for(let e=0;e{r.delete(s),0===r.size&&n&&(n(),n=null)}}}}function ze(e){let t;return Ue(e,e=>t=e)(),t}let je=Symbol("unmounted");function Be(e,t,n){const r=n[t]??={store:null,source:Ct(void 0),unsubscribe:h};if(r.store!==e&&!(je in n))if(r.unsubscribe(),r.store=e??null,null==e)r.source.v=void 0,r.unsubscribe=h;else{var a=!0;r.unsubscribe=Ue(e,e=>{a?r.source.v=e:Et(r.source,e)}),a=!1}return e&&je in n?ze(e):ln(r.source)}let Fe=null,He=null,Ke=null,qe=null,Ye=null,Ge=null,We=!1,Je=!1,Ze=null,Xe=null;var Qe=0;let et=1;class tt{id=et++;#e=!1;linked=!0;#t=null;#n=null;async_deriveds=new Map;current=new Map;previous=new Map;unblocked=new Set;#r=new Set;#a=new Set;#o=new Set;#i=0;#l=new Map;#s=null;#c=[];#u=[];#f=new Set;#d=new Set;#h=new Map;#p=new Set;is_fork=!1;#v=!1;#g(){if(this.is_fork)return!0;for(const n of this.#l.keys()){for(var e=n,t=!1;null!==e.parent;){if(this.#h.has(e)){t=!0;break}e=e.parent}if(!t)return!0}return!1}skip_effect(e){this.#h.has(e)||this.#h.set(e,{d:[],m:[]}),this.#p.delete(e)}unskip_effect(e,t=e=>this.schedule(e)){var n=this.#h.get(e);if(n){for(var r of(this.#h.delete(e),n.d))Re(r,x),t(r);for(r of n.m)Re(r,k),t(r)}this.#p.add(e)}#m(){if(this.#e=!0,Qe++>1e3&&(this.#b(),function(){try{!function(){throw new Error("https://svelte.dev/e/effect_update_depth_exceeded")}()}catch(e){Pe(e,Ge)}}()),!this.#g()){for(const e of this.#f)this.#d.delete(e),Re(e,x),this.schedule(e);for(const e of this.#d)Re(e,k),this.schedule(e)}const e=this.#c;this.#c=[],this.apply();var t=Ze=[],n=[],r=Xe=[];for(const r of e)try{this.#y(r,t,n)}catch(e){throw ct(r),e}if(Ke=null,r.length>0){var a=tt.ensure();for(const e of r)a.schedule(e)}if(Ze=null,Xe=null,this.#g()){this.#w(n),this.#w(t);for(const[e,t]of this.#h)st(e,t);return void(r.length>0&&Ke.#m())}const o=this.#x();if(o)o.#k(this);else{this.#f.clear(),this.#d.clear();for(const e of this.#r)e(this);this.#r.clear(),qe=this,at(n),at(t),qe=null,this.#s?.resolve();var i=Ke;if(this.linked&&0===this.#i&&this.#b(),this.#c.length>0){null===i&&(i=this,this.#_());const e=i;e.#c.push(...this.#c.filter(t=>!e.#c.includes(t)))}null!==i&&i.#m()}}#y(e,t,n){e.f^=w;for(var r=e.first;null!==r;){var a=r.f,o=!!(96&a);if(!(o&&0!==(a&w)||0!==(a&_)||this.#h.has(r))&&null!==r.fn){o?r.f^=w:4&a?t.push(r):Qt(r)&&(0!==(a&g)&&this.#d.add(r),an(r));var i=r.first;if(null!==i){r=i;continue}}for(;null!==r;){var l=r.next;if(null!==l){r=l;break}r=r.parent}}}#x(){for(var e=this.#t;null!==e;){if(!e.is_fork)for(const[t,[,n]]of this.current)if(e.current.has(t)&&!n)return e;e=e.#t}return null}#k(e){for(const[t,n]of e.current)!this.previous.has(t)&&e.previous.has(t)&&this.previous.set(t,e.previous.get(t)),this.current.set(t,n);for(const[t,n]of e.async_deriveds){const e=this.async_deriveds.get(t);e&&n.promise.then(e.resolve)}const t=e=>{var n=e.reactions;if(null!==n)for(const e of n){var r=e.f;if(2&r)t(e);else{var a=e;4194320&r&&!this.async_deriveds.has(a)&&(this.#d.delete(a),Re(a,x),this.schedule(a))}}};for(const e of this.current.keys())t(e);this.oncommit(()=>e.discard()),e.#b(),Ke=this,this.#m()}#w(e){for(var t=0;t!this.current.has(e));if(0===r.length)e&&c.discard();else if(t.length>0){if(e)for(const e of this.#p)c.unskip_effect(e,e=>{4194320&e.f?c.schedule(e):c.#w([e])});c.activate();var a=new Set,o=new Map;for(var i of t)ot(i,r,a,o);o=new Map;var l=[...c.current.keys()].filter(e=>!this.current.has(e)||this.current.get(e)[0]!==e.v);if(l.length>0)for(const e of this.#u)155648&e.f||!it(e,l,o)||(4194320&e.f?(Re(e,x),c.schedule(e)):c.#f.add(e));if(c.#c.length>0){for(var s of(c.apply(),c.#c))c.#y(s,[],[]);c.#c=[]}c.deactivate()}}}}increment(e,t){if(this.#i+=1,e){let e=this.#l.get(t)??0;this.#l.set(t,e+1)}}decrement(e,t){if(this.#i-=1,e){let e=this.#l.get(t)??0;1===e?this.#l.delete(t):this.#l.set(t,e-1)}this.#v||(this.#v=!0,te(()=>{this.#v=!1,this.linked&&this.flush()}))}transfer_effects(e,t){for(const t of e)this.#f.add(t);for(const e of t)this.#d.add(e);e.clear(),t.clear()}oncommit(e){this.#r.add(e)}ondiscard(e){this.#a.add(e)}on_fork_commit(e){this.#o.add(e)}run_fork_commit_callbacks(){for(const e of this.#o)e(this);this.#o.clear()}settled(){return(this.#s??=p()).promise}static ensure(){if(null===Ke){const e=Ke=new tt;e.#_(),Je||We||te(()=>{e.#e||e.flush()})}return Ke}apply(){Ye=null}schedule(e){if(Ge=e,e.b?.is_pending&&16777228&e.f&&0===(e.f&S))e.b.defer_effect(e);else{for(var t=e;null!==t.parent;){var n=(t=t.parent).f;if(!(null===Ze||t!==jt||null!==Vt&&2&Vt.f))return;if(96&n){if(0===(n&w))return;t.f^=w}}this.#c.push(t)}}#_(){null===He?Fe=He=this:(He.#n=this,this.#t=He),He=this}#b(){var e=this.#t,t=this.#n;null===e?Fe=t:e.#n=t,null===t?He=e:t.#t=e,this.linked=!1}}function nt(e){var t=We;We=!0;try{for(;;){if(ne(),null===Ke)return;Ke.flush()}}finally{We=t}}let rt=null;function at(e){var t=e.length;if(0!==t){for(var n=0;n0)){kt.clear();for(const e of rt){if(24576&e.f)continue;const t=[e];let n=e.parent;for(;null!==n;)rt.has(n)&&(rt.delete(n),t.push(n)),n=n.parent;for(let e=t.length-1;e>=0;e--){const n=t[e];24576&n.f||an(n)}}rt.clear()}}rt=null}}function ot(e,t,n,r){if(!n.has(e)&&(n.add(e),null!==e.reactions))for(const a of e.reactions){const e=a.f;2&e?ot(a,t,n,r):4194320&e&&0===(e&x)&&it(a,t,r)&&(Re(a,x),lt(a))}}function it(e,t,n){const a=n.get(e);if(void 0!==a)return a;if(null!==e.deps)for(const a of e.deps){if(r.call(t,a))return!0;if(2&a.f&&it(a,t,n))return n.set(a,!0),!0}return n.set(e,!1),!1}function lt(e){Ke.schedule(e)}function st(e,t){if(0===(e.f&m)||0===(e.f&w)){0!==(e.f&x)?t.d.push(e):0!==(e.f&k)&&t.m.push(e),Re(e,w);for(var n=e.first;null!==n;)st(n,t),n=n.next}}function ct(e){Re(e,w);for(var t=e.first;null!==t;)ct(t),t=t.next}class ut{parent;is_pending=!1;transform_error;#S;#C=oe?ae:null;#E;#T;#A;#I=null;#P=null;#O=null;#R=null;#L=0;#M=0;#D=!1;#f=new Set;#d=new Set;#U=null;#V=function(e){let t,n=0,r=$t(0);return()=>{hn()&&(ln(r),bn(()=>(0===n&&(t=un(()=>e(()=>At(r)))),n+=1,()=>{te(()=>{n-=1,0===n&&(t?.(),t=void 0,At(r))})})))}}(()=>(this.#U=$t(this.#L),()=>{this.#U=null}));constructor(e,t,n,r){this.#S=e,this.#E=t,this.#T=e=>{var t=jt;t.b=this,t.f|=128,n(e)},this.parent=jt.b,this.transform_error=r??this.parent?.transform_error??(e=>e),this.#A=wn(()=>{if(oe){const e=this.#C;se();const t="[!"===e.data;if(e.data.startsWith("[?")){const t=JSON.parse(e.data.slice(2));this.#N(t)}else t?this.#z():this.#j()}else this.#B()},589824),oe&&(this.#S=ae)}#j(){try{this.#I=kn(()=>this.#T(this.#S))}catch(e){this.error(e)}}#N(e){const t=this.#E.failed;t&&(this.#O=kn(()=>{t(this.#S,()=>e,()=>()=>{})}))}#z(){const e=this.#E.pending;e&&(this.is_pending=!0,this.#P=kn(()=>e(this.#S)),te(()=>{var e=this.#R=document.createDocumentFragment(),t=ke();e.append(t),this.#I=this.#F(()=>kn(()=>this.#T(t))),0===this.#M&&(this.#S.before(e),this.#R=null,Tn(this.#P,()=>{this.#P=null}),this.#H(Ke))}))}#B(){try{if(this.is_pending=this.has_pending_snippet(),this.#M=0,this.#L=0,this.#I=kn(()=>{this.#T(this.#S)}),this.#M>0){var e=this.#R=document.createDocumentFragment();On(this.#I,e);const t=this.#E.pending;this.#P=kn(()=>t(this.#S))}else this.#H(Ke)}catch(e){this.error(e)}}#H(e){this.is_pending=!1,e.transfer_effects(this.#f,this.#d)}defer_effect(e){De(e,this.#f,this.#d)}is_rendered(){return!this.is_pending&&(!this.parent||this.parent.is_rendered())}has_pending_snippet(){return!!this.#E.pending}#F(e){var t=jt,n=Vt,r=W;Bt(this.#A),zt(this.#A),J(this.#A.ctx);try{return tt.ensure(),e()}catch(e){return Ie(e),null}finally{Bt(t),zt(n),J(r)}}#K(e,t){this.has_pending_snippet()?(this.#M+=e,0===this.#M&&(this.#H(t),this.#P&&Tn(this.#P,()=>{this.#P=null}),this.#R&&(this.#S.before(this.#R),this.#R=null))):this.parent&&this.parent.#K(e,t)}update_pending_count(e,t){this.#K(e,t),this.#L+=e,this.#U&&!this.#D&&(this.#D=!0,te(()=>{this.#D=!1,this.#U&&Tt(this.#U,this.#L)}))}get_effect_pending(){return this.#V(),ln(this.#U)}error(e){if(!this.#E.onerror&&!this.#E.failed)throw e;Ke?.is_fork?(this.#I&&Ke.skip_effect(this.#I),this.#P&&Ke.skip_effect(this.#P),this.#O&&Ke.skip_effect(this.#O),Ke.on_fork_commit(()=>{this.#q(e)})):this.#q(e)}#q(e){this.#I&&(Sn(this.#I),this.#I=null),this.#P&&(Sn(this.#P),this.#P=null),this.#O&&(Sn(this.#O),this.#O=null),oe&&(le(this.#C),ue(),le(fe()));var t=this.#E.onerror;let n=this.#E.failed;var r=!1,a=!1;const o=()=>{r?console.warn("https://svelte.dev/e/svelte_boundary_reset_noop"):(r=!0,a&&function(){throw new Error("https://svelte.dev/e/svelte_boundary_reset_onerror")}(),null!==this.#O&&Tn(this.#O,()=>{this.#O=null}),this.#F(()=>{this.#B()}))},i=e=>{try{a=!0,t?.(e,o),a=!1}catch(e){Pe(e,this.#A&&this.#A.parent)}n&&(this.#O=this.#F(()=>{try{return kn(()=>{var t=jt;t.b=this,t.f|=128,n(this.#S,()=>e,()=>o)})}catch(e){return Pe(e,this.#A.parent),null}}))};te(()=>{var t;try{t=this.transform_error(e)}catch(e){return void Pe(e,this.#A&&this.#A.parent)}null!==t&&"object"==typeof t&&"function"==typeof t.then?t.then(i,e=>Pe(e,this.#A&&this.#A.parent)):i(t)})}}function ft(e,t,n,r){const a=pt;var o=e.filter(e=>!e.settled);if(0!==n.length||0!==o.length){var i,l,s,c,u=jt,f=(i=jt,l=Vt,s=W,c=Ke,function(e=!0){Bt(i),zt(l),J(s),e&&0===(i.f&$)&&(c?.activate(),c?.apply())}),d=1===o.length?o[0].promise:o.length>1?Promise.all(o.map(e=>e.promise)):null,h=ht();0!==n.length?d?d.then(()=>{f(),v(),dt()}):v():d.then(()=>p(t.map(a))).finally(h)}else r(t.map(a));function p(e){if(0===(u.f&$)){f();try{r(e)}catch(e){Pe(e,u)}dt()}}function v(){Promise.all(n.map(e=>gt(e))).then(e=>p([...t.map(a),...e])).catch(e=>Pe(e,u)).finally(h)}}function dt(e=!0){Bt(null),zt(null),J(null),e&&Ke?.deactivate()}function ht(){var e=jt,t=e.b,n=Ke,r=t.is_rendered();return t.update_pending_count(1,n),n.increment(r,e),()=>{t.update_pending_count(-1,n),n.decrement(r,e)}}function pt(e){null!==jt&&(jt.f|=A);return{ctx:W,deps:null,effects:null,equals:F,f:2050,fn:e,reactions:null,rv:0,v:Y,wv:0,parent:jt,ac:null}}const vt=Symbol("obsolete");function gt(e,t,n){let r=jt;null===r&&function(){throw new Error("https://svelte.dev/e/async_derived_orphan")}();var a=void 0,o=$t(Y),i=!Vt,l=new Set;return function(e){dn(4718592,e)}(()=>{var t=jt,n=p();a=n.promise;try{Promise.resolve(e()).then(n.resolve,e=>{e!==j&&n.reject(e)}).finally(dt)}catch(e){n.reject(e),dt()}var s=Ke;if(i){if(0!==(t.f&S))var c=ht();if(r.b.is_rendered())s.async_deriveds.get(t)?.reject(vt);else for(const e of l.values())e.reject(vt);l.add(n),s.async_deriveds.set(t,n)}const u=(e,t=void 0)=>{c?.(),l.delete(n),t!==vt&&(s.activate(),t?(o.f|=O,Tt(o,t)):(0!==(o.f&O)&&(o.f^=O),Tt(o,e)),s.deactivate())};n.promise.then(u,e=>u(null,e||"unknown"))}),pn(()=>{for(const e of l)e.reject(vt)}),new Promise(e=>{!function t(n){function r(){n===a?e(o):t(a)}n.then(r,r)}(a)})}function mt(e){const t=pt(e);return Ht(t),t}function bt(e){var t,n=jt,r=e.parent;if(!Dt&&null!==r&&e.v!==Y&&24576&r.f)return console.warn("https://svelte.dev/e/derived_inert"),e.v;Bt(r);try{e.f&=-65537,function(e){var t=e.effects;if(null!==t){e.effects=null;for(var n=0;n0&&!_t&&function(){_t=!1;for(const e of xt){let t;0!==(e.f&w)&&Re(e,k);try{t=Qt(e)}catch{t=!0}t&&an(e)}xt.clear()}()}return t}function At(e){Et(e,e.v+1)}function It(e,t,n){var r=e.reactions;if(null!==r)for(var a=r.length,o=0;o{document.activeElement===t&&e.focus()})}}let Ot=!1;function Rt(){Ot||(Ot=!0,document.addEventListener("reset",e=>{Promise.resolve().then(()=>{if(!e.defaultPrevented)for(const t of e.target.elements)t[z]?.()})},{capture:!0}))}function Lt(e){var t=Vt,n=jt;zt(null),Bt(null);try{return e()}finally{zt(t),Bt(n)}}let Mt=!1,Dt=!1;function Ut(e){Dt=e}let Vt=null,Nt=!1;function zt(e){Vt=e}let jt=null;function Bt(e){jt=e}let Ft=null;function Ht(e){null!==Vt&&(null===Ft?Ft=[e]:Ft.push(e))}let Kt=null,qt=0,Yt=null;let Gt=1,Wt=0,Jt=Wt;function Zt(e){Jt=e}function Xt(){return++Gt}function Qt(e){var t=e.f;if(0!==(t&x))return!0;if(2&t&&(e.f&=-65537),0!==(t&k)){for(var n=e.deps,r=n.length,a=0;ae.wv)return!0}0!==(t&y)&&null===Ye&&Re(e,w)}return!1}function en(e,t,n=!0){var a=e.reactions;if(null!==a&&(null===Ft||!r.call(Ft,e)))for(var o=0;o{e.ac.abort(j)}),e.ac=null);try{e.f|=P;var u=(0,e.fn)();e.f|=S;var f=e.deps,d=Ke?.is_fork;if(null!==Kt){var h;if(d||rn(e,qt),null!==f&&qt>0)for(f.length=qt+Kt.length,h=0;h{dn(8,()=>e(...t.map(ln)))})}function wn(e,t=0){return dn(g|t,e)}function xn(e,t=0){return dn(v|t,e)}function kn(e){return dn(524320,e)}function _n(e){var t=e.teardown;if(null!==t){const e=Dt,n=Vt;Ut(!0),zt(null);try{t.call(null)}finally{Ut(e),zt(n)}}}function $n(e,t=!1){var n=e.first;for(e.first=e.last=null;null!==n;){const e=n.ac;null!==e&&Lt(()=>{e.abort(j)});var r=n.next;0!==(n.f&b)?n.parent=null:Sn(n,t),n=r}}function Sn(e,t=!0){var n=!1;(t||262144&e.f)&&null!==e.nodes&&null!==e.nodes.end&&(Cn(e.nodes.start,e.nodes.end),n=!0),Re(e,C),$n(e,t&&!n),rn(e,0);var r=e.nodes&&e.nodes.t;if(null!==r)for(const e of r)e.stop();_n(e),e.f^=C,e.f|=$;var a=e.parent;null!==a&&null!==a.first&&En(e),e.next=e.prev=e.teardown=e.ctx=e.deps=e.fn=e.nodes=e.ac=e.b=null}function Cn(e,t){for(;null!==e;){var n=e===t?null:$e(e);e.remove(),e=n}}function En(e){var t=e.parent,n=e.prev,r=e.next;null!==n&&(n.next=r),null!==r&&(r.prev=n),null!==t&&(t.first===e&&(t.first=r),t.last===e&&(t.last=n))}function Tn(e,t,n=!0){var r=[];An(e,r,!0);var a=()=>{n&&Sn(e),t&&t()},o=r.length;if(o>0){var i=()=>--o||a();for(var l of r)l.out(i)}else a()}function An(e,t,n){if(0===(e.f&_)){e.f^=_;var r=e.nodes&&e.nodes.t;if(null!==r)for(const e of r)(e.is_global||n)&&t.push(e);for(var a=e.first;null!==a;){var o=a.next;if(0===(a.f&b))An(a,t,!!(0!==(a.f&E)||0!==(a.f&m)&&0!==(e.f&g))&&n);a=o}}}function In(e){Pn(e,!0)}function Pn(e,t){if(0!==(e.f&_)){e.f^=_,0===(e.f&w)&&(Re(e,x),tt.ensure().schedule(e));for(var n=e.first;null!==n;){var r=n.next;Pn(n,!!(0!==(n.f&E)||0!==(n.f&m))&&t),n=r}var a=e.nodes&&e.nodes.t;if(null!==a)for(const e of a)(e.is_global||t)&&e.in()}}function On(e,t){if(e.nodes)for(var n=e.nodes.start,r=e.nodes.end;null!==n;){var a=n===r?null:$e(n);t.append(n),n=a}}function Rn(e){const t={get:e=>ze(t.store)[e],set:(e,n)=>{"string"==typeof e?Object.assign(ze(t.store),{[e]:n}):Object.assign(ze(t.store),e),t.store.set(ze(t.store))},store:Ne(e)};return t}globalThis.$altcha=globalThis.$altcha||{algorithms:new Map,defaults:Rn({}),i18n:Rn({}),instances:new Set,plugins:new Set};globalThis.$altcha.i18n.set("en",{ariaLinkLabel:"Altcha (official website)",cancel:"Cancel",enterCode:"Enter code",enterCodeAria:"Enter code you hear. Press Space to play audio.",enterCodeFromImage:"To proceed, please enter the code from the image below.",error:"Verification failed. Try again later.",expired:"Verification expired. Try again.",footer:'Protected by ALTCHA',getAudioChallenge:"Get an audio challenge",label:"I'm not a robot",loading:"Loading...",reload:"Reload",verify:"Verify",verificationRequired:"Verification required!",verified:"Verified",verifying:"Verifying...",waitAlert:"Verifying... please wait."});"undefined"!=typeof window&&((window.__svelte??={}).v??=new Set).add("5");const Ln=Symbol("events"),Mn=new Set,Dn=new Set;function Un(e,t,n,r={}){function a(e){if(r.capture||Bn.call(t,e),!e.cancelBubble)return Lt(()=>n?.call(this,e))}return e.startsWith("pointer")||e.startsWith("touch")||"wheel"===e?te(()=>{t.addEventListener(e,a,r)}):t.addEventListener(e,a,r),a}function Vn(e,t,n,r,a){var o={capture:r,passive:a},i=Un(e,t,n,o);(t===document.body||t===window||t===document||t instanceof HTMLMediaElement)&&pn(()=>{t.removeEventListener(e,i,o)})}function Nn(e,t,n){(t[Ln]??={})[e]=n}function zn(e){for(var t=0;to||n});var f=Vt,d=jt;zt(null),Bt(null);try{for(var h,p=[];null!==o;){var v=o.assignedSlot||o.parentNode||o.host||null;try{var g=o[Ln]?.[r];null==g||o.disabled&&e.target!==o||g.call(o,e)}catch(e){h?p.push(e):h=e}if(e.cancelBubble||v===t||null===v)break;o=v}if(h){for(let e of p)queueMicrotask(()=>{throw e});throw h}}finally{e[Ln]=t,delete e.currentTarget,zt(f),Bt(d)}}}const Fn=globalThis?.window?.trustedTypes&&globalThis.window.trustedTypes.createPolicy("svelte-trusted-html",{createHTML:e=>e});function Hn(e){var t=Te("template");return t.innerHTML=function(e){return Fn?.createHTML(e)??e}(e.replaceAll("","\x3c!----\x3e")),t.content}function Kn(e,t){var n=jt;null===n.nodes&&(n.nodes={start:e,end:t,a:null,t:null})}function qn(e,t){var n,r=!!(1&t),a=!!(2&t),o=!e.startsWith("");return()=>{if(oe)return Kn(ae,null),ae;void 0===n&&(n=Hn(o?e:""+e),r||(n=_e(n)));var t=a||be?document.importNode(n,!0):n.cloneNode(!0);r?Kn(_e(t),t.lastChild):Kn(t,t);return t}}function Yn(e,t,n="svg"){var r,a=`<${n}>${!e.startsWith("")?e:""+e}`;return()=>{if(oe)return Kn(ae,null),ae;if(!r){var e=Hn(a);r=_e(_e(e))}var t=r.cloneNode(!0);return Kn(t,t),t}}function Gn(e,t){return Yn(e,0,"svg")}function Wn(e=""){if(!oe){var t=ke(e+"");return Kn(t,t),t}var n=ae;return 3!==n.nodeType?(n.before(n=ke()),le(n)):Ae(n),Kn(n,n),n}function Jn(){if(oe)return Kn(ae,null),ae;var e=document.createDocumentFragment(),t=document.createComment(""),n=ke();return e.append(t,n),Kn(t,n),e}function Zn(e,t){if(oe){var n=jt;return 0!==(n.f&S)&&null!==n.nodes.end||(n.nodes.end=ae),void se()}null!==e&&e.before(t)}function Xn(e){return e.endsWith("capture")&&"gotpointercapture"!==e&&"lostpointercapture"!==e}const Qn=["beforeinput","click","change","dblclick","contextmenu","focusin","focusout","input","keydown","keyup","mousedown","mousemove","mouseout","mouseover","mouseup","pointerdown","pointermove","pointerout","pointerover","pointerup","touchend","touchmove","touchstart"];function er(e){return Qn.includes(e)}const tr={formnovalidate:"formNoValidate",ismap:"isMap",nomodule:"noModule",playsinline:"playsInline",readonly:"readOnly",defaultvalue:"defaultValue",defaultchecked:"defaultChecked",srcobject:"srcObject",novalidate:"noValidate",allowfullscreen:"allowFullscreen",disablepictureinpicture:"disablePictureInPicture",disableremoteplayback:"disableRemotePlayback"};function nr(e){return e=e.toLowerCase(),tr[e]??e}const rr=["touchstart","touchmove"];function ar(e){return rr.includes(e)}function or(e,t){var n=null==t?"":"object"==typeof t?`${t}`:t;n!==(e[N]??=e.nodeValue)&&(e[N]=n,e.nodeValue=`${n}`)}function ir(e,t){return cr(e,t)}function lr(e,t){xe(),t.intro=t.intro??!1;const n=t.target,r=oe,a=ae;try{for(var o=_e(n);o&&(8!==o.nodeType||"["!==o.data);)o=$e(o);if(!o)throw q;ie(!0),le(o);const r=cr(e,{...t,anchor:o});return ie(!1),r}catch(r){if(r instanceof Error&&r.message.split("\n").some(e=>e.startsWith("https://svelte.dev/e/")))throw r;return r!==q&&console.warn("Failed to hydrate: ",r),!1===t.recover&&function(){throw new Error("https://svelte.dev/e/hydration_failed")}(),xe(),n.textContent="",ie(!1),ir(e,t)}finally{ie(r),le(a)}}const sr=new Map;function cr(e,{target:t,anchor:n,props:r={},events:o,context:i,intro:l=!0,transformError:s}){xe();var c=void 0,u=function(e){tt.ensure();const t=dn(524352,e);return(e={})=>new Promise(n=>{e.outro?Tn(t,()=>{Sn(t),n(void 0)}):(Sn(t),n(void 0))})}(()=>{var l=n??t.appendChild(ke());!function(e,t,n,r){new ut(e,t,n,r)}(l,{pending:()=>{}},t=>{if(Z({}),i&&(W.c=i),o&&(r.$$events=o),oe&&Kn(t,null),c=e(t,r)||{},oe&&(jt.nodes.end=ae,null===ae||8!==ae.nodeType||"]"!==ae.data))throw re(),q;X()},s);var u=new Set,f=e=>{for(var n=0;n{for(var e of u)for(const n of[t,document]){var r=sr.get(n),a=r.get(e);0==--a?(n.removeEventListener(e,Bn),r.delete(e),0===r.size&&sr.delete(n)):r.set(e,a)}Dn.delete(f),l!==n&&l.parentNode?.removeChild(l)}});return ur.set(c,u),c}let ur=new WeakMap;class fr{anchor;#Y=new Map;#G=new Map;#W=new Map;#J=new Set;#Z=!0;constructor(e,t=!0){this.anchor=e,this.#Z=t}#$=e=>{if(this.#Y.has(e)){var t=this.#Y.get(e),n=this.#G.get(t);if(n)In(n),this.#J.delete(t);else{var r=this.#W.get(t);r&&(this.#G.set(t,r.effect),this.#W.delete(t),r.fragment.lastChild.remove(),this.anchor.before(r.fragment),n=r.effect)}for(const[t,n]of this.#Y){if(this.#Y.delete(t),t===e)break;const r=this.#W.get(n);r&&(Sn(r.effect),this.#W.delete(n))}for(const[e,r]of this.#G){if(e===t||this.#J.has(e))continue;const a=()=>{if(Array.from(this.#Y.values()).includes(e)){var t=document.createDocumentFragment();On(r,t),t.append(ke()),this.#W.set(e,{effect:r,fragment:t})}else Sn(r);this.#J.delete(e),this.#G.delete(e)};this.#Z||!n?(this.#J.add(e),Tn(r,a,!1)):a()}}};#X=e=>{this.#Y.delete(e);const t=Array.from(this.#Y.values());for(const[e,n]of this.#W)t.includes(e)||(Sn(n.effect),this.#W.delete(e))};ensure(e,t){var n=Ke;!t||this.#G.has(e)||this.#W.has(e)||this.#G.set(e,kn(()=>t(this.anchor)));this.#Y.set(n,e),oe&&(this.anchor=ae),this.#$(n)}}function dr(e){null===W&&function(){throw new Error("https://svelte.dev/e/lifecycle_outside_component")}(),vn(()=>{const t=un(e);if("function"==typeof t)return t})}function hr(e,t,n=!1){var r;oe&&(r=ae,se());var a=new fr(e);function o(e,t){if(oe){var n=de(r);if(e!==parseInt(n.substring(1))){var o=fe();return le(o),a.anchor=o,ie(!1),a.ensure(e,t),void ie(!0)}}a.ensure(e,t)}wn(()=>{var e=!1;t((t,n=0)=>{e=!0,o(n,t)}),e||o(-1,null)},n?E:0)}const pr=Symbol("NaN");function vr(e,t,n=!1,r=!1,a=!1,o=!1){var i=e,l="";if(n){var s=e;oe&&(i=le(_e(s)))}yn(()=>{var e=jt;if(l!==(l=t()??"")){if(n&&!oe)return e.nodes=null,s.innerHTML=l,void(""!==l&&Kn(_e(s),s.lastChild));if(null!==e.nodes&&(Cn(e.nodes.start,e.nodes.end),e.nodes=null),""!==l){if(oe){ae.data;for(var o=se(),c=o;null!==o&&(8!==o.nodeType||""!==o.data);)c=o,o=$e(o);if(null===o)throw re(),q;return Kn(ae,c),void(i=le(o))}var u=Te(r?"svg":a?"math":"template",r?"http://www.w3.org/2000/svg":a?"http://www.w3.org/1998/Math/MathML":void 0);u.innerHTML=l;var f=r||a?u:u.content;if(Kn(_e(f),f.lastChild),r||a)for(;_e(f);)i.before(_e(f));else i.before(f)}}else oe&&se()})}function gr(e,t){var n,r=void 0;xn(()=>{r!==(r=t())&&(n&&(Sn(n),n=null),r&&(n=kn(()=>{mn(()=>r(e))})))})}function mr(e){var t,n,r="";if("string"==typeof e||"number"==typeof e)r+=e;else if("object"==typeof e)if(Array.isArray(e)){var a=e.length;for(t=0;t=0;){var l=i+o;0!==i&&!yr.includes(r[i-1])||l!==r.length&&!yr.includes(r[l])?i=l:r=(0===i?"":r.substring(0,i))+r.substring(l+1)}return""===r?null:r}(n,0,o);oe&&l===e.getAttribute("class")||(null==l?e.removeAttribute("class"):t?e.className=l:e.setAttribute("class",l)),e[U]=n}else if(o&&a!==o)for(var s in o){var c=!!o[s];null!=a&&c===!!a[s]||e.classList.toggle(s,c)}return o}function _r(e,t={},n,r){for(var a in n){var o=n[a];t[a]!==o&&(null==n[a]?e.style.removeProperty(a):e.style.setProperty(a,o,r))}}function $r(e,t,n,r){var a=e[V];if(oe||a!==t){var o=function(e,t){if(t){var n,r,a="";if(Array.isArray(t)?(n=t[0],r=t[1]):n=t,e){e=String(e).replaceAll(/\s*\/\*.*?\*\/\s*/g,"").trim();var o=!1,i=0,l=!1,s=[];n&&s.push(...Object.keys(n).map(xr)),r&&s.push(...Object.keys(r).map(xr));var c=0,u=-1;const t=e.length;for(var f=0;f{if(!t){if(t=!0,e.hasAttribute("value")){var n=e.value;Vr(e,"value",null),e.value=n}if(e.hasAttribute("checked")){var r=e.checked;Vr(e,"checked",null),e.checked=r}}};e[z]=n,te(n),Rt()}}function Ur(e,t){t?e.hasAttribute("selected")||e.setAttribute("selected",""):e.removeAttribute("selected")}function Vr(e,t,n,r){var a=zr(e);oe&&(a[t]=e.getAttribute(t),"src"===t||"srcset"===t||"href"===t&&e.nodeName===Pr)||a[t]!==(a[t]=n)&&("loading"===t&&(e[M]=n),null==n?e.removeAttribute(t):"string"!=typeof n&&Br(e).includes(t)?e[t]=n:e.setAttribute(t,n))}function Nr(e,t,n=[],r=[],a=[],o,i=!1,l=!1){ft(a,n,r,n=>{var r=void 0,a={},o=e.nodeName===Lr,s=!1;if(xn(()=>{var c=t(...n.map(ln)),u=function(e,t,n,r,a=!1){if(oe&&a&&e.nodeName===Or){var o=e;("checkbox"===o.type?"defaultChecked":"defaultValue")in n||Dr(o)}var i=zr(e),l=i[Ar],s=!i[Ir];let c=oe&&l;c&&ie(!1);var u=t||{},f=e.nodeName===Rr;for(var d in t)d in n||(n[d]=null);n.class?n.class=br(n.class):n[Er]&&(n.class=null),n[Tr]&&(n.style??=null);var h=Br(e);for(const r in n){let a=n[r];if(f&&"value"===r&&null==a)e.value=e.__value="",u[r]=a;else if("class"!==r)if("style"!==r){var p=u[r];if(a!==p||void 0===a&&e.hasAttribute(r)){u[r]=a;var v=r[0]+r[1];if("$$"!==v)if("on"===v){const t={},n="$$"+r;let o=r.slice(2);var g=er(o);if(Xn(o)&&(o=o.slice(0,-7),t.capture=!0),!g&&p){if(null!=a)continue;e.removeEventListener(o,u[n],t),u[n]=null}if(g)Nn(o,e,a),zn([o]);else if(null!=a){let a=function(e){u[r].call(this,e)};u[n]=Un(o,e,a,t)}}else if("style"===r)Vr(e,r,a);else if("autofocus"===r)Pt(e,Boolean(a));else if(l||"__value"!==r&&("value"!==r||null==a))if("selected"===r&&f)Ur(e,a);else{var m=r;s||(m=nr(m));var b="defaultValue"===m||"defaultChecked"===m;if(null!=a||l||b)b||h.includes(m)&&(l||"string"!=typeof a)?(e[m]=a,m in i&&(i[m]=Y)):"function"!=typeof a&&Vr(e,m,a);else if(i[r]=null,"value"===m||"checked"===m){let n=e;const r=void 0===t;if("value"===m){let e=n.defaultValue;n.removeAttribute(m),n.defaultValue=e,n.value=n.__value=r?e:null}else{let e=n.defaultChecked;n.removeAttribute(m),n.defaultChecked=e,n.checked=!!r&&e}}else e.removeAttribute(r)}else e.value=e.__value=a}}else $r(e,a,t?.[Tr],n[Tr]),u[r]=a,u[Tr]=n[Tr];else kr(e,"http://www.w3.org/1999/xhtml"===e.namespaceURI,a,0,t?.[Er],n[Er]),u[r]=a,u[Er]=n[Er]}return c&&ie(!0),u}(e,r,c,0,i,l);s&&o&&"value"in c&&Sr(e,c.value);for(let e of Object.getOwnPropertySymbols(a))c[e]||Sn(a[e]);for(let t of Object.getOwnPropertySymbols(c)){var f=c[t];"@attach"!==t.description||r&&f===r[t]||(a[t]&&Sn(a[t]),a[t]=kn(()=>gr(e,()=>f))),u[t]=f}r=u}),o){var c=e;mn(()=>{Sr(c,r.value,!0),function(e){var t=new MutationObserver(()=>{Sr(e,e.__value)});t.observe(e,{childList:!0,subtree:!0,attributes:!0,attributeFilter:["value"]}),pn(()=>{t.disconnect()})}(c)})}s=!0})}function zr(e){return e[D]??={[Ar]:e.nodeName.includes("-"),[Ir]:e.namespaceURI===G}}var jr=new Map;function Br(e){var t,n=e.getAttribute("is")||e.nodeName,r=jr.get(n);if(r)return r;jr.set(n,r=[]);for(var a=e,o=Element.prototype;o!==a;){for(var i in t=s(a))t[i].set&&"innerHTML"!==i&&"textContent"!==i&&"innerText"!==i&&r.push(i);a=f(a)}return r}function Fr(e,t,n=t){var r=new WeakSet;!function(e,t,n,r=n){e.addEventListener(t,()=>Lt(n));const a=e[z];e[z]=a?()=>{a(),r(!0)}:()=>r(!0),Rt()}(e,"input",async a=>{var o=a?e.defaultValue:e.value;if(o=Hr(e)?Kr(o):o,n(o),null!==Ke&&r.add(Ke),await on(),o!==(o=t())){var i=e.selectionStart,l=e.selectionEnd,s=e.value.length;if(e.value=o??"",null!==l){var c=e.value.length;i===l&&l===s&&c>s?(e.selectionStart=c,e.selectionEnd=c):(e.selectionStart=i,e.selectionEnd=Math.min(l,c))}}}),(oe&&e.defaultValue!==e.value||null==un(t)&&e.value)&&(n(Hr(e)?Kr(e.value):e.value),null!==Ke&&r.add(Ke)),bn(()=>{var n=t();if(e===document.activeElement){var a=Ke;if(r.has(a))return}Hr(e)&&n===Kr(e.value)||("date"!==e.type||n||e.value)&&n!==e.value&&(e.value=n??"")})}function Hr(e){var t=e.type;return"number"===t||"range"===t}function Kr(e){return""===e?null:+e}function qr(e,t){return e===t||e?.[R]===t}function Yr(e={},t,n,r){var a=W.r,o=jt;return mn(()=>{var r,i;return bn(()=>{r=i,i=[],un(()=>{qr(n(...i),e)||(t(e,...i),r&&qr(n(...r),e)&&t(null,...r))})}),()=>{let r=o;for(;r!==a&&null!==r.parent&&r.parent.f&C;)r=r.parent;const l=r.teardown;r.teardown=()=>{i&&qr(n(...i),e)&&t(null,...i),l?.()}}}),e}const Gr={get(e,t){if(!e.exclude.includes(t))return e.props[t]},set:(e,t)=>!1,getOwnPropertyDescriptor(e,t){if(!e.exclude.includes(t))return t in e.props?{enumerable:!0,configurable:!0,value:e.props[t]}:void 0},has:(e,t)=>!e.exclude.includes(t)&&t in e.props,ownKeys:e=>Reflect.ownKeys(e.props).filter(t=>!e.exclude.includes(t))};function Wr(e,t,n){return new Proxy({props:e,exclude:t},Gr)}function Jr(e,t,n,r){var a,o=r,i=!0,l=()=>(i&&(i=!1,o=r),o);void 0===e[t]&&void 0!==r&&l(),a=()=>{var n=e[t];return void 0===n?l():(i=!0,n)};var s=!1,c=pt(()=>(s=!1,a())),u=jt;return function(e,t){if(arguments.length>0){const n=t?ln(c):e;return Et(c,n),s=!0,void 0!==o&&(o=n),e}return Dt&&s||0!==(u.f&$)?c.v:ln(c)}}class Zr{#Q;#ee;constructor(e){var t=new Map,n=(e,n)=>{var r=Ct(n,!1,!1);return t.set(e,r),r};const r=new Proxy({...e.props||{},$$events:{}},{get:(e,r)=>ln(t.get(r)??n(r,Reflect.get(e,r))),has:(e,r)=>r===L||(ln(t.get(r)??n(r,Reflect.get(e,r))),Reflect.has(e,r)),set:(e,r,a)=>(Et(t.get(r)??n(r,a),a),Reflect.set(e,r,a))});this.#ee=(e.hydrate?lr:ir)(e.component,{target:e.target,anchor:e.anchor,props:r,context:e.context,intro:e.intro??!1,recover:e.recover,transformError:e.transformError}),e?.props?.$$host&&!1!==e.sync||nt(),this.#Q=r.$$events;for(const e of Object.keys(this.#ee))"$set"!==e&&"$destroy"!==e&&"$on"!==e&&i(this,e,{get(){return this.#ee[e]},set(t){this.#ee[e]=t},enumerable:!0});this.#ee.$set=e=>{Object.assign(r,e)},this.#ee.$destroy=()=>{!function(e,t){const n=ur.get(e);n?(ur.delete(e),n(t)):Promise.resolve()}(this.#ee)}}$set(e){this.#ee.$set(e)}$on(e,t){this.#Q[e]=this.#Q[e]||[];const n=(...e)=>t.call(this,...e);return this.#Q[e].push(n),()=>{this.#Q[e]=this.#Q[e].filter(e=>e!==n)}}$destroy(){this.#ee.$destroy()}}let Xr=class{};function Qr(e,t,n,r){const a=n[e]?.type;if(t="Boolean"===a&&"boolean"!=typeof t?null!=t:t,!r||!n[e])return t;if("toAttribute"===r)switch(a){case"Object":case"Array":return null==t?null:JSON.stringify(t);case"Boolean":return t?"":null;case"Number":return null==t?null:t;default:return t}else switch(a){case"Object":case"Array":return t&&JSON.parse(t);case"Boolean":default:return t;case"Number":return null!=t?+t:t}}function ea(e,t,n,r,a,s){let c=class extends Xr{constructor(){super(e,n,a),this.$$p_d=t}static get observedAttributes(){return o(t).map(e=>(t[e].attribute||e).toLowerCase())}};return o(t).forEach(e=>{i(c.prototype,e,{get(){return this.$$c&&e in this.$$c?this.$$c[e]:this.$$d[e]},set(n){n=Qr(e,n,t),this.$$d[e]=n;var r=this.$$c;if(r){var a=l(r,e)?.get;a?r[e]=n:r.$set({[e]:n})}}})}),r.forEach(e=>{i(c.prototype,e,{get(){return this.$$c?.[e]}})}),e.element=c,c}"function"==typeof HTMLElement&&(Xr=class extends HTMLElement{$$ctor;$$s;$$c;$$cn=!1;$$d={};$$r=!1;$$p_d={};$$l={};$$l_u=new Map;$$me;$$shadowRoot=null;constructor(e,t,n){super(),this.$$ctor=e,this.$$s=t,n&&(this.$$shadowRoot=this.attachShadow(n))}addEventListener(e,t,n){if(this.$$l[e]=this.$$l[e]||[],this.$$l[e].push(t),this.$$c){const n=this.$$c.$on(e,t);this.$$l_u.set(t,n)}super.addEventListener(e,t,n)}removeEventListener(e,t,n){if(super.removeEventListener(e,t,n),this.$$c){const e=this.$$l_u.get(t);e&&(e(),this.$$l_u.delete(t))}}async connectedCallback(){if(this.$$cn=!0,!this.$$c){let t=function(e){return t=>{const n=Te("slot");"default"!==e&&(n.name=e),Zn(t,n)}};if(await Promise.resolve(),!this.$$cn||this.$$c)return;const n={},r=function(e){const t={};return e.childNodes.forEach(e=>{t[e.slot||"default"]=!0}),t}(this);for(const e of this.$$s)e in r&&("default"!==e||this.$$d.children?n[e]=t(e):(this.$$d.children=t(e),n.default=!0));for(const e of this.attributes){const t=this.$$g_p(e.name);t in this.$$d||(this.$$d[t]=Qr(t,e.value,this.$$p_d,"toProp"))}for(const e in this.$$p_d)e in this.$$d||void 0===this[e]||(this.$$d[e]=this[e],delete this[e]);this.$$c=(e={component:this.$$ctor,target:this.$$shadowRoot||this,props:{...this.$$d,$$slots:n,$$host:this}},new Zr(e)),this.$$me=function(e){tt.ensure();const t=dn(524352,e);return()=>{Sn(t)}}(()=>{bn(()=>{this.$$r=!0;for(const e of o(this.$$c)){if(!this.$$p_d[e]?.reflect)continue;this.$$d[e]=this.$$c[e];const t=Qr(e,this.$$d[e],this.$$p_d,"toAttribute");null==t?this.removeAttribute(this.$$p_d[e].attribute||e):this.setAttribute(this.$$p_d[e].attribute||e,t)}this.$$r=!1})});for(const e in this.$$l)for(const t of this.$$l[e]){const n=this.$$c.$on(e,t);this.$$l_u.set(t,n)}this.$$l={}}var e}attributeChangedCallback(e,t,n){this.$$r||(e=this.$$g_p(e),this.$$d[e]=Qr(e,n,this.$$p_d,"toProp"),this.$$c?.$set({[e]:this.$$d[e]}))}disconnectedCallback(){this.$$cn=!1,Promise.resolve().then(()=>{!this.$$cn&&this.$$c&&(this.$$c.$destroy(),this.$$me(),this.$$c=void 0)})}$$g_p(e){return o(this.$$p_d).find(t=>this.$$p_d[t].attribute===e||!this.$$p_d[t].attribute&&t.toLowerCase()===e)||e}});var ta=qn('
');function na(e,t){Z(t,!0);let n,r=Jr(t,"loading"),a=Wr(t,["$$slots","$$events","$$legacy","$$host","loading"]);var o={get loading(){return r()},set loading(e){r(e),nt()}},i=ta(),l=Se(i);Nr(l,()=>({type:"checkbox",...a}),void 0,void 0,void 0,0,!0),Yr(l,e=>n=e,()=>n);var s=Ee(l,2);return ue(2),ce(i),yn(()=>Vr(i,"data-loading",r())),Nn("click",s,function(){n?.click()}),Zn(e,i),X(o)}zn(["click"]),ea(na,{loading:{}},[],[],{mode:"open"});var ra=qn('
');function aa(e,t){Z(t,!0);let n=Jr(t,"loading"),r=Wr(t,["$$slots","$$events","$$legacy","$$host","loading"]);var a={get loading(){return n()},set loading(e){n(e),nt()}},o=ra();return Nr(Se(o),()=>({type:"checkbox",...r}),void 0,void 0,void 0,0,!0),ue(2),ce(o),yn(()=>Vr(o,"data-loading",n())),Zn(e,o),X(a)}ea(aa,{loading:{}},[],[],{mode:"open"});var oa=qn('
');function ia(e,t){Z(t,!0);let n=Jr(t,"strings");var r={get strings(){return n()},set strings(e){n(e),nt()}},a=oa(),o=Se(a);return Vr(o,"href","https://altcha.org"),ce(a),yn(()=>Vr(o,"aria-label",n().ariaLinkLabel)),Zn(e,a),X(r)}ea(ia,{strings:{}},[],[],{mode:"open"});var la=qn('');function sa(e,t){Z(t,!0);let n=Jr(t,"logo"),r=Jr(t,"strings");var a={get logo(){return n()},set logo(e){n(e),nt()},get strings(){return r()},set strings(e){r(e),nt()}},o=la(),i=Se(o);vr(i,()=>r().footer,!0),ce(i);var l=Ee(i,2),s=e=>{ia(e,{get strings(){return r()}})};return hr(l,e=>{n()&&e(s)}),ce(o),Zn(e,o),X(a)}ea(sa,{logo:{},strings:{}},[],[],{mode:"open"});var ca=qn('
');function ua(e,t){Z(t,!0);let n,r=Jr(t,"loading"),a=Wr(t,["$$slots","$$events","$$legacy","$$host","loading"]);var o={get loading(){return r()},set loading(e){r(e),nt()}},i=ca(),l=Se(i);Nr(l,()=>({type:"checkbox",...a}),void 0,void 0,void 0,0,!0),Yr(l,e=>n=e,()=>n);var s=Ee(l,2);return ce(i),yn(()=>Vr(i,"data-loading",r())),Nn("click",s,function(){n?.click()}),Zn(e,i),X(o)}zn(["click"]),ea(ua,{loading:{}},[],[],{mode:"open"});var fa=(e=>(e.ERROR="error",e.LOADING="loading",e.PLAYING="playing",e.PAUSED="paused",e.READY="ready",e))(fa||{}),da=(e=>(e.CODE="code",e.ERROR="error",e.VERIFIED="verified",e.VERIFYING="verifying",e.UNVERIFIED="unverified",e.EXPIRED="expired",e))(da||{}),ha=qn('
'),pa=qn('
'),va=Gn(''),ga=Gn(''),ma=Gn(''),ba=qn(''),ya=qn(''),wa=qn('
');function xa(e,t){Z(t,!0);let n=Jr(t,"audioUrl"),r=Jr(t,"codeChallenge"),a=Jr(t,"config"),o=Jr(t,"imageUrl"),i=Jr(t,"onCancel"),l=Jr(t,"onReload"),s=Jr(t,"onSubmit"),c=Jr(t,"strings"),u=St(void 0),f=St(void 0),d=St(void 0),h=St(!1),p=St(""),v=St(!1);function g(){Et(u,fa.PAUSED,!0)}function m(e){Et(u,fa.ERROR,!0)}function b(){Et(u,fa.READY,!0)}function y(){Et(u,fa.LOADING,!0)}function w(){Et(u,fa.PLAYING,!0)}function x(){Et(u,fa.PAUSED,!0)}function k(){ln(f)?ln(u)===fa.LOADING||(ln(f).paused?(n()&&ln(f).src!==n()&&(ln(f).src=n()),ln(f).currentTime=0,ln(f).play()):ln(f).pause()):(Et(v,!0),requestAnimationFrame(()=>{ln(f)&&n()&&(ln(f).src=n(),ln(f).play())}))}dr(()=>(a().disableAutoFocus||on().then(()=>{ln(d)?.focus()}),()=>{ln(f)&&(ln(f).pause(),Et(f,void 0))}));var _={get audioUrl(){return n()},set audioUrl(e){n(e),nt()},get codeChallenge(){return r()},set codeChallenge(e){r(e),nt()},get config(){return a()},set config(e){a(e),nt()},get imageUrl(){return o()},set imageUrl(e){o(e),nt()},get onCancel(){return i()},set onCancel(e){i(e),nt()},get onReload(){return l()},set onReload(e){l(e),nt()},get onSubmit(){return s()},set onSubmit(e){s(e),nt()},get strings(){return c()},set strings(e){c(e),nt()}},$=wa(),S=Se($),C=Se(S),E=e=>{var t=ha(),n=Se(t,!0);ce(t),yn(()=>or(n,c().verificationRequired)),Zn(e,t)};hr(C,e=>{"standard"!==a().codeChallengeDisplay&&e(E)});var T=Ee(C,2),A=Se(T,!0);ce(T);var I=Ee(T,2),P=Ee(I,2),O=Se(P);Dr(O),O.disabled=ln(h),Yr(O,e=>Et(d,e),()=>ln(d));var R=Ee(O,2),L=e=>{var t=ba(),n=Se(t),r=e=>{Zn(e,pa())},a=e=>{Zn(e,va())},o=e=>{Zn(e,ga())},i=e=>{Zn(e,ma())};hr(n,e=>{ln(u)===fa.LOADING?e(r):ln(u)===fa.ERROR?e(a,1):ln(u)===fa.PLAYING?e(o,2):e(i,-1)}),ce(t),yn(()=>{Vr(t,"title",c().getAudioChallenge),t.disabled=ln(u)===fa.LOADING||ln(u)===fa.ERROR,Vr(t,"aria-label",ln(u)===fa.LOADING?c().loading:c().getAudioChallenge)}),Vn("click",t,()=>k(),!0),Zn(e,t)};hr(R,e=>{r().audio&&e(L)});var M=Ee(R,2);ce(P);var D=Ee(P,2),U=Se(D),V=Se(U,!0);ce(U);var N=Ee(U,2),z=Se(N,!0);ce(N),ce(D),ce(S);var j=Ee(S,2),B=e=>{var t=ya();Yr(t,e=>Et(f,e),()=>ln(f)),Vn("error",t,m),Vn("loadstart",t,y),Vn("canplay",t,b),Vn("pause",t,x),Vn("playing",t,w),Vn("ended",t,g),Zn(e,t)};return hr(j,e=>{ln(v)&&e(B)}),ce($),yn(()=>{or(A,c().enterCodeFromImage),Vr(I,"src",o()),Vr(O,"minlength",r().length||1),Vr(O,"maxlength",r().length),Vr(O,"placeholder",c().enterCode),Vr(O,"aria-label",ln(u)===fa.LOADING?c().loading:ln(u)===fa.PLAYING?"":c().enterCodeAria),Vr(O,"aria-live",ln(u)?"assertive":"polite"),Vr(O,"aria-busy",ln(u)===fa.LOADING),Vr(M,"title",c().reload),Vr(M,"aria-label",c().reload),Vr(U,"aria-label",c().verify),or(V,c().verify),Vr(N,"aria-label",c().cancel),or(z,c().cancel)}),Vn("submit",S,function(e){e.preventDefault(),e.stopPropagation(),s()?.(ln(p))},!0),Nn("keydown",O,function(e){"Space"===e.code?(e.preventDefault(),e.stopPropagation(),k()):"Escape"===e.code&&(e.preventDefault(),e.stopPropagation(),i()?.())}),Fr(O,()=>ln(p),e=>Et(p,e)),Vn("click",M,()=>l()?.(),!0),Vn("click",N,()=>i()?.(),!0),Zn(e,$),X(_)}zn(["keydown"]),ea(xa,{audioUrl:{},codeChallenge:{},config:{},imageUrl:{},onCancel:{},onReload:{},onSubmit:{},strings:{}},[],[],{mode:"open"});var ka=qn('
'),_a=qn('
'),$a=qn('
×
'),Sa=qn('
',1);function Ca(e,t){Z(t,!0);let n=Jr(t,"anchor"),r=Jr(t,"children"),a=Jr(t,"display",0,"standard"),o=Jr(t,"backdrop",0,!1),i=Jr(t,"onClickOutside"),l=Jr(t,"onClickOutsideDelay",0,600),s=Jr(t,"onClose"),c=Jr(t,"placement",0,"auto"),u=Jr(t,"updateUISignal"),f=Jr(t,"variant",0,"neutral"),d=Wr(t,["$$slots","$$events","$$legacy","$$host","anchor","children","display","backdrop","onClickOutside","onClickOutsideDelay","onClose","placement","updateUISignal","variant"]),p=St(void 0),v=St(void 0),g=St(!1),m=St(0);function b(){s()?.()}function y(){if(n()&&"auto"===c()&&ln(p)){const e=n().getBoundingClientRect(),t=document.documentElement.clientHeight-(e.top+e.height){"auto"!==c()&&Et(g,"top"===c())}),vn(()=>{u()&&y()}),dr(()=>{const e="bottomsheet"===a()||"overlay"===a();return e&&(ln(v)&&document.body.append(ln(v)),ln(p)&&document.body.append(ln(p))),y(),on().then(()=>{Et(m,Date.now(),!0)}),()=>{e&&(ln(v)&&document.body.removeChild(ln(v)),ln(p)&&document.body.removeChild(ln(p)))}});var w={get anchor(){return n()},set anchor(e){n(e),nt()},get children(){return r()},set children(e){r(e),nt()},get display(){return a()},set display(e="standard"){a(e),nt()},get backdrop(){return o()},set backdrop(e=!1){o(e),nt()},get onClickOutside(){return i()},set onClickOutside(e){i(e),nt()},get onClickOutsideDelay(){return l()},set onClickOutsideDelay(e=600){l(e),nt()},get onClose(){return s()},set onClose(e){s(e),nt()},get placement(){return c()},set placement(e="auto"){c(e),nt()},get updateUISignal(){return u()},set updateUISignal(e){u(e),nt()},get variant(){return f()},set variant(e="neutral"){f(e),nt()}},x=Sa();Vn("click",ge,function(e){const t=e.target;ln(p)?.contains(t)||l()&&!(ln(m)+l(){var t=ka();Yr(t,e=>Et(v,e),()=>ln(v)),Zn(e,t)};hr(k,e=>{o()&&e(_)});var $=Ee(k,2);Nr($,()=>({...d,class:`altcha-popover ${(t.class||"")??""}`,"data-popover":!0,"data-variant":f(),"data-top":ln(g),"data-display":a()}));var S=Se($),C=e=>{Zn(e,_a())};hr(S,e=>{"standard"===a()&&e(C)});var T=Ee(S,2),A=e=>{var t=$a();Vn("click",t,b,!0),Zn(e,t)};hr(T,e=>{"standard"!==a()&&e(A)});var I=Ee(T,2);return function(e,t,...n){var r=new fr(e);wn(()=>{const e=t()??null;r.ensure(e,e&&(t=>e(t,...n)))},E)}(Se(I),()=>r()??h),ce(I),ce($),Yr($,e=>Et(p,e),()=>ln(p)),Zn(e,x),X(w)}async function Ea(e){const{challenge:t,concurrency:n=navigator.hardwareConcurrency,controller:r=new AbortController,createWorker:a,onOutOfMemory:o=e=>e>1?Math.floor(e/2):0,counterMode:i,timeout:l=9e4}=e,s=Math.min(16,Math.max(1,n)),c=[],u=()=>{for(const e of c)e.terminate()};for(let e=0;e(r.signal.addEventListener("abort",()=>{e.postMessage({type:"abort"})}),new Promise((r,a)=>{e.addEventListener("error",e=>{a(e)}),e.addEventListener("message",t=>{if(t.data){for(const t of c)t!==e&&t.postMessage({type:"abort"});if(t.data.error)return a(new Error(t.data.error))}r(t.data)}),e.postMessage({challenge:t,counterMode:i,counterStart:n,counterStep:s,timeout:l,type:"work"})}))))}catch(n){if(n instanceof Error&&!!n?.message?.includes("Out of memory")&&o){u();const n=o(s);if(n)return Ea({...e,challenge:t,controller:r,concurrency:n,createWorker:a})}throw n}finally{u()}return r.signal.aborted?null:f||null}ea(Ca,{anchor:{},children:{},display:{},backdrop:{},onClickOutside:{},onClickOutsideDelay:{},onClose:{},placement:{},updateUISignal:{},variant:{}},[],[],{mode:"open"});class Ta{TAG_CODES={INPUT:1,TEXTAREA:2,SELECT:3,BUTTON:4,A:5,DETAILS:6,SUMMARY:7,IFRAME:8,VIDEO:9,AUDIO:10};maxSamples;sampleInterval;target;focusStartTime=0;focusInteraction=0;focusInteractionTimer=null;lastPointerSample=0;lastTouchSample=0;lastScrollSample=0;pendingPointer=null;pendingTouch=null;focus=[];pointer=[];scroll=[];touch=[];constructor(e={}){const{maxSamples:t=60,sampleInterval:n=50,target:r=window}=e;this.maxSamples=t,this.sampleInterval=n,this.target=r,this.attach()}destroy(){const e={capture:!0};this.target.removeEventListener("focusin",this.onFocus,e),this.target.removeEventListener("keydown",this.onInteraction,e),this.target.removeEventListener("pointerdown",this.onInteraction,e),this.target.removeEventListener("pointermove",this.onPointer,e),this.target.removeEventListener("scroll",this.onScroll,e),this.target.removeEventListener("touchmove",this.onTouchMove,e)}export(){return{focus:this.focus,maxTouchPoints:navigator.maxTouchPoints||0,pointer:this.pointer,scroll:this.scroll,time:Date.now(),touch:this.touch}}attach(){const e={passive:!0,capture:!0};this.target.addEventListener("focusin",this.onFocus,e),this.target.addEventListener("keydown",this.onInteraction,e),this.target.addEventListener("pointerdown",this.onInteraction,e),this.target.addEventListener("pointermove",this.onPointer,e),this.target.addEventListener("scroll",this.onScroll,e),this.target.addEventListener("touchmove",this.onTouchMove,e)}evict(e){e.length>this.maxSamples&&e.splice(0,e.length-this.maxSamples)}onFocus=e=>{if(2===this.focusInteraction)return;const t=e.target;if(!(t instanceof Element))return;const n=performance.now();0===this.focusStartTime&&(this.focusStartTime=n),this.focus.push([Math.round(n-this.focusStartTime),t.tabIndex,this.TAG_CODES[t.tagName]??0,this.focusInteraction?1:0]),this.evict(this.focus)};onInteraction=e=>{this.focusInteraction="keyCode"in e?1:2,this.focusInteractionTimer&&clearTimeout(this.focusInteractionTimer),this.focusInteractionTimer=setTimeout(()=>{this.focusInteraction=0},100)};onPointer=e=>{if("touch"===e.pointerType)return;const t=e.timeStamp||performance.now();this.pendingPointer=[Math.round(e.clientX),Math.round(e.clientY),Math.round(t)],t-this.lastPointerSample>=this.sampleInterval&&(this.pointer.push(this.pendingPointer),this.lastPointerSample=t,this.pendingPointer=null,this.evict(this.pointer))};onScroll=()=>{const e=performance.now();e-this.lastScrollSample{const t=e.timeStamp||performance.now(),n=e.touches[0];n&&(this.pendingTouch=[Math.round(n.clientX),Math.round(n.clientY),Math.round(t),Math.round(1e3*n.force)/1e3,Math.round(n.radiusX||0),Math.round(n.radiusY||0)],t-this.lastTouchSample>=this.sampleInterval&&(this.touch.push(this.pendingTouch),this.lastTouchSample=t,this.pendingTouch=null,this.evict(this.touch)))}}var Aa=qn('
'),Ia=qn('
'),Pa=qn('
×
',1),Oa=qn('
'),Ra=qn(''),La=qn('
Secure context (HTTPS) required.
'),Ma=qn('
'),Da=qn('
'),Ua=qn(" ",1),Va=qn('
',1);"undefined"!=typeof window&&window.customElements&&!customElements.get("altcha-widget")&&customElements.define("altcha-widget",ea(function(e,t){Z(t,!0);const[n,r]=function(){const e={};return[e,function(){pn(()=>{for(var t in e)e[t].unsubscribe();i(e,je,{enumerable:!1,value:!0})})}]}(),a=["ar","fa","he","ur"],{isSecureContext:o}=globalThis,{store:l}=globalThis.$altcha.defaults,s=navigator.hardwareConcurrency||2,c=navigator.deviceMemory||0,u=c&&c<=4?Math.min(4,s):s,f=globalThis.$altcha.i18n.store,d=t.$$host,h=(e,t)=>{on().then(()=>{d?.dispatchEvent(new CustomEvent(e,{detail:t}))})};let p=null,v=St(he(new URL(location.origin))),g=St(!1),m=St(null),b=St(null),y=St(null),w=St(he(da.UNVERIFIED)),x=St(void 0),k=St(void 0),_=St(null),$=St(void 0),S=St(null),C=St(null),T=St(null),A=St(null),I=St(he([])),P=St(0),O=St(he({})),R=St(!0);const L=mt(()=>({fetch:(e,t)=>fetch(e,t),audioChallengeLanguage:"",auto:"off",barPlacement:"bottom",challenge:"",codeChallenge:null,codeChallengeDisplay:"standard",credentials:null,debug:!1,disableAutoFocus:!1,display:"standard",floatingAnchor:"",floatingOffset:8,floatingPersist:!1,floatingPlacement:"auto",hideFooter:!1,hideLogo:!1,humanInteractionSignature:!0,language:"",mockError:!1,minDuration:500,overlayContent:"",name:"altcha",popoverPlacement:"auto",retryOnOutOfMemoryError:!0,setCookie:null,serverVerificationFields:!1,serverVerificationTimeZone:!1,test:!1,timeout:9e4,type:"checkbox",validationMessage:"",verifyFunction:null,verifyUrl:"",workers:u,...Be(l,"$altchaDefaults",n),...ln(O)})),M=mt(()=>`altcha-checkbox-${t.id||Math.floor(1e12*Math.random()).toString(16)}`),D=mt(()=>function(e){switch(e){case"checkbox":return na;case"switch":return ua;default:return aa}}(ln(L).type)),U=mt(()=>ln(L).auto),V=mt(()=>ln(w)===da.VERIFYING),N=mt(()=>!ln(L).hideFooter),z=mt(()=>!ln(L).hideLogo&&"bar"!==ln(L).display),j=mt(()=>function(e,t){const n=Object.keys(e).map(e=>e.toLowerCase());let r=t.reduce((t,r)=>(r=r.toLowerCase(),t||(e[r]?r:null)||n.find(e=>r.split("-")[0]===e.split("-")[0])||null),null);e[r||""]||(r="en");return{language:r,strings:e[r]}}(Be(f,"$altchaI18nStore",n),[ln(L).language,document.documentElement.lang,...navigator.languages])),B=mt(()=>a.includes(ln(j).language)?"rtl":void 0),F=mt(()=>({...ln(j).strings})),H=mt(()=>ln(m)?.audio?.match(/^(https?:)?\//)?Q(ln(m).audio,ln(v),{language:ln(L).audioChallengeLanguage||ln(j).language}).toString():ln(m)?.audio),K=mt(()=>ln(m)?.image?.match(/^(https?:)?\//)?Q(ln(m).image,ln(v)):ln(m)?.image);async function q(e,...t){let n;for(const r of ln(I))n=await r[e].call(r,...t);return n}async function Y(e){await new Promise(t=>setTimeout(t,e))}async function G(e=ln(L).challenge,t){const n=await q("onFetchChallenge",e);let r=null;if(void 0!==n)return n;if("string"==typeof e)if(e.startsWith("{")){_e("parsing JSON challenge");try{r=JSON.parse(e)}catch{throw new Error("Unable to parse JSON challenge.")}}else{_e("fetching challenge from",t?.method||"GET",e),Et(v,new URL(e,location.origin),!0);const n=await ln(L).fetch(e,{credentials:ln(L).credentials||void 0,...t});await ye(n);const a=n.headers.get("x-altcha-config");a&&function(e){try{const t=JSON.parse(e);t&&"object"==typeof t&&xe({serverVerificationFields:t?.sentinel?.fields,serverVerificationTimeZone:t?.sentinel?.timeZone,verifyUrl:t.verifyurl,...t})}catch(e){_e("unable to configure from x-altcha-config header",e)}}(a);const o=await n.json();if(o&&"his"in o&&o.his){if(_e("requested HIS"),!p)throw new Error("Server requested HIS data but collector is disabled.");return G(Q(o.his.url,ln(v)),{body:JSON.stringify({his:p.export()}),headers:{"content-type":"application/json"},method:"POST"})}o&&"hisResult"in o&&o.hisResult&&_e("HIS result",o.hisResult),r=o}else if(e&&"object"==typeof e)try{r=JSON.parse(JSON.stringify(e))}catch{throw new Error("Unable to parse JSON challenge.")}if(function(e){return"object"==typeof e&&"challenge"in e}(r)&&(r=function(e){const[t,n]=e.salt.split("?"),r={};if(n)try{Object.assign(r,Object.fromEntries(new URLSearchParams(n).entries()))}catch{}const a={codeChallenge:e.codeChallenge,parameters:{algorithm:e.algorithm,cost:1,data:r,expiresAt:r?.expires?parseInt(r.expires,10):void 0,keyLength:"SHA-512"===e.algorithm?64:"SHA-384"===e.algorithm?48:32,nonce:(o=(new TextEncoder).encode(e.salt),Array.from(new Uint8Array(o)).map(e=>e.toString(16).padStart(2,"0")).join("")),keyPrefix:e.challenge,salt:""},signature:e.signature};var o;return Object.defineProperties(a,{_originalSalt:{enumerable:!1,value:e.salt,writable:!1},_version:{enumerable:!1,value:1,writable:!1}}),a}(r)),!function(e){return!!e&&"object"==typeof e&&"parameters"in e&&!!e.parameters&&"object"==typeof e.parameters&&"algorithm"in e.parameters&&"nonce"in e.parameters&&"salt"in e.parameters&&"keyPrefix"in e.parameters}(r))throw new Error("Challenge validation failed.");return r}function W(){return document.getElementById(ln(M))}function J(){try{return Intl.DateTimeFormat().resolvedOptions().timeZone}catch{}}function Q(e,t,n){const r=new URL(e,t);if(r.search||(r.search=t.search),n)for(const e in n)void 0!==n[e]&&null!==n[e]&&r.searchParams.set(e,n[e]);return r.toString()}function ee(e){!ln(g)&&e.currentTarget.checked?(e.preventDefault(),e.currentTarget.checked=!1,ln(w)!==da.VERIFYING&&Pe()):e.currentTarget.checked||(e.preventDefault(),$e())}function te(e){ln(w)===da.VERIFYING?e.currentTarget.setCustomValidity(ln(F).waitAlert):ln(L).validationMessage&&e.currentTarget.setCustomValidity(ln(L).validationMessage)}function ne(){be(ln(L).display),$e()}function re(e){"onfocus"===ln(U)&&ln(w)===da.UNVERIFIED&&Pe()}function ue(){be(ln(L).display),$e()}function pe(e){const t=e.target;"true"!==t?.getAttribute("data-code-challenge")&&"onsubmit"===ln(U)&&ln(w)===da.UNVERIFIED&&(e.preventDefault(),e.stopPropagation(),Et(S,e.submitter,!0),Ae(),Pe().then(e=>{e&&!ln(m)&&on().then(()=>{ve(ln(S))})}))}function ve(e){ln(_)&&"requestSubmit"in ln(_)?ln(_).requestSubmit(e):ln(_)?.reportValidity()&&(e?e.click():ln(_).submit())}function be(e){switch(e){case"bar":case"floating":case"overlay":ke(),ln(U)&&"off"!==ln(U)||(ln(O).auto="onsubmit");break;case"standard":Ae()}ln(y)!==e&&Et(y,e,!0)}async function ye(e){if(e.status>=400){if(e.headers.get("content-type")?.includes("/json")){let t;try{t=await e.json()}catch{}if(t&&"error"in t)throw new Error(`Server responded with ${e.status} - ${t.error}`)}throw new Error(`Server responded with ${e.status}.`)}const t=e.headers.get("content-type");if(!t||!t.includes("/json"))throw new Error(`Server responded with invalid content-type. Expected application/json, received ${t}.`)}async function we(e){if(!ln(A))return void Te(da.ERROR,"Cannot verify code challenge without PoW payload.");Te(da.VERIFYING);let t=null;if(ln(L).verifyUrl)t=await async function(e,t){const n=await q("onRequestServerVerification",e,t);if(void 0!==n)return n;if(_e("requesting server verification from",ln(L).verifyUrl),!ln(L).verifyUrl)throw new Error("Parameter verifyUrl must be set for server verification.");const r=await ln(L).fetch(Q(ln(L).verifyUrl,ln(v)),{body:JSON.stringify({code:t,fields:ln(L).serverVerificationFields?[...ln(_)?.querySelectorAll('input[type="text"]:not([data-no-spamfilter]), textarea:not([data-no-spamfilter])')||[]].reduce((e,t)=>{const n=t.name,r=t.value;return n&&r&&(e[n]=/\n/.test(r)?r.replace(new RegExp("(?{ve(ln(S))})):Te(da.ERROR,t?.reason||"Verification failed."),ln(L).disableAutoFocus||W()?.focus()}function xe(e){Object.assign(ln(O),{...Object.fromEntries(Object.entries(e).filter(([e,t])=>void 0!==t))})}function ke(){Et(R,!1)}function _e(...e){(ln(L).debug||e.some(e=>e instanceof Error))&&console[e[0]instanceof Error?"error":"log"]("ALTCHA",`[name=${ln(L).name}]`,...e)}function $e(e=da.UNVERIFIED,t=null){Et(g,!1),Et(C,t,!0),Et(A,null),ln(b)&&ln(b).abort(),ln(T)&&(clearTimeout(ln(T)),Et(T,null)),Te(e)}function Te(e,t=null){Et(w,e,!0),Et(C,t,!0),h("statechange",{payload:ln(A),state:ln(w)})}function Ae(){Et(R,!0),on().then(()=>{Ie()})}function Ie(){if("floating"===ln(L).display)return function(e=20){if(!ln($))return;const t=ln(L).floatingPlacement;if(!ln(k)&&(Et(k,(ln(L).floatingAnchor instanceof HTMLElement?ln(L).floatingAnchor:ln(L).floatingAnchor?document.querySelector(ln(L).floatingAnchor):ln(_)?.querySelector('input[type="submit"], button[type="submit"], button:not([type="button"]):not([type="reset"])'))||ln(_),!0),!ln(k)))return void _e("unable to find floating anchor element");const n=parseInt(ln(L).floatingOffset,10)||12,r=ln(k).getBoundingClientRect(),a=ln($).getBoundingClientRect(),o=document.documentElement.clientHeight,i=document.documentElement.clientWidth,l=t&&"auto"!==t?"top"===t:r.bottom+a.height+n+e>o,s=Math.max(e,Math.min(i-e-a.width,r.left+r.width/2-a.width/2));if(ln($).style.setProperty("--altcha-floating-left",`${s}px`),ln($).style.setProperty("--altcha-floating-top",l?r.top-(a.height+n)+"px":`${r.bottom+n}px`),ln($).setAttribute("data-floating-position",l?"top":"bottom"),ln(x)){const e=ln(x).getBoundingClientRect();ln(x).style.left=r.left-s+r.width/2-e.width/2+"px"}}();Et(P,ln(P)+1)}async function Pe(e={}){const{concurrency:t=Math.max(1,ln(L).workers),controller:n=new AbortController,minDuration:r=ln(L).minDuration}=e,a=performance.now();let i=null,l=null,s=!1;const c=await q("onVerify",e);if(void 0!==c)return c;$e(da.VERIFYING),Et(b,n,!0);try{if(!o)throw new Error("Secure context (HTTPS) required.");if(ln(L).mockError)throw new Error("Mock error.");if(ln(L).test)return _e("running test mode with null challenge"),await Y(Math.max(0,r-(performance.now()-a))),ln(b)?.signal.aborted?($e(),null):(Et(A,btoa(JSON.stringify({challenge:null,solution:null,test:!0})),!0),_e("verified"),Te(da.VERIFIED),h("verified",{payload:ln(A)}),{payload:ln(A)});if(i=await G(),!i)throw new Error("Failed to fetch challenge.");_e("challenge",i),"configuration"in i&&(_e("re-configuring from challenge",i.configuration),xe(i.configuration)),i.parameters.expiresAt&&function(e){ln(T)&&clearTimeout(ln(T));const t=()=>{ln(w)!==da.UNVERIFIED?(Et(g,!1),Te(da.EXPIRED)):$e(),h("expired")},n=1e3*e-Date.now();n>=1?Et(T,setTimeout(t,n),!0):t()}(i.parameters.expiresAt),s="_version"in i&&1===i._version;const e=globalThis.$altcha.algorithms.get(i.parameters.algorithm);if(!e)throw new Error(`Unsupported algorithm ${i.parameters.algorithm}.`);if(l=await Ea({challenge:i,concurrency:t,controller:n,createWorker:e,counterMode:s?"string":"uint32",onOutOfMemory:e=>{if(_e("out of memory error received"),h("outofmemory"),ln(L).retryOnOutOfMemoryError&&e>1){const t=Math.floor(e/2);return _e(`retrying with ${t} workers...`),t}},timeout:ln(L).timeout}),ln(b)?.signal.aborted)return $e(),null;if(!l)throw new Error("Failed to find solution.");_e("solution",l),await Y(Math.max(0,r-(performance.now()-a))),Et(m,i.codeChallenge||ln(L).codeChallenge||null,!0),Et(A,s?btoa(JSON.stringify(function(e,t){return{algorithm:e.parameters.algorithm,challenge:e.parameters.keyPrefix,number:t.counter,salt:"_originalSalt"in e?e._originalSalt:e.parameters.nonce,signature:e.signature,took:t.time||0}}(i,l))):btoa(JSON.stringify({challenge:{parameters:i.parameters,signature:i.signature},solution:l})),!0),ln(m)?(_e("requesting code verification"),Te(da.CODE),h("codechallenge",{codeChallenge:ln(m)})):ln(L).verifyUrl?await we():(_e("verified"),Te(da.VERIFIED),h("verified",{payload:ln(A)}))}catch(e){return _e("verification failed",e),Te(da.ERROR,String(e)),null}finally{Et(b,null)}return{challenge:i,payload:ln(A),solution:l}}vn(()=>{xe({auto:t.auto,challenge:t.challenge,display:t.display,language:t.language,name:t.name,type:t.type,workers:t.workers})}),vn(()=>{if(t.configuration)try{xe(JSON.parse(t.configuration))}catch{_e("unable to parse the `configuration` attribute (JSON expected)")}}),vn(()=>{ln(y)!==ln(L).display&&be(ln(L).display)}),vn(()=>{ln(g)&&ln(w)===da.VERIFYING&&Et(g,!1)}),vn(()=>{ln(g)||ln(w)!==da.VERIFIED||Et(g,!0)}),vn(()=>{if(!ln(g)){const e=W();e&&e.checked&&(e.checked=!1)}}),vn(()=>{ln(w)===da.VERIFIED&&W()?.setCustomValidity("")}),vn(()=>{if("onload"===ln(U)){const e=setTimeout(()=>{Pe()},1);return()=>{e&&clearTimeout(e)}}}),vn(()=>{ln(C)&&_e("error:",ln(C))}),vn(()=>{ln(A)&&ln(L).setCookie&&function(e,t={}){const{domain:n,name:r=ln(L).name,maxAge:a,path:o,sameSite:i,secure:l}=t;let s=`${encodeURIComponent(r)}=${encodeURIComponent(e)}`;n&&(s+=`; Domain=${n}`);null!=a&&(s+=`; Max-Age=${a}`);o&&(s+=`; Path=${o}`);i&&(s+=`; SameSite=${i}`);l&&(s+="; Secure");document.cookie=s}(ln(A),ln(L).setCookie)}),dr(()=>(_e("mounted","3.2.1"),d&&globalThis.$altcha.instances.add(d),Et(_,ln($)?.closest("form"),!0),ln(_)?.addEventListener("reset",ue),ln(_)?.addEventListener("submit",pe,{capture:!0}),ln(_)?.addEventListener("focusin",re),function(){Et(I,[...globalThis.$altcha.plugins].map(e=>new e(d)),!0),_e("activating plugins",ln(I).map(e=>e.constructor.name));for(const e of ln(I))e.activate()}(),ln(L).humanInteractionSignature&&(_e("human interaction signature enabled"),p=new Ta),h("load"),o||_e("secure context (HTTPS) required"),()=>{!function(){for(const e of ln(I))e.destroy()}(),d&&globalThis.$altcha.instances.delete(d),ln(T)&&clearTimeout(ln(T)),ln(_)?.removeEventListener("reset",ue),ln(_)?.removeEventListener("submit",pe,{capture:!0}),ln(_)?.removeEventListener("focusin",re),p?.destroy()}));var Oe={configure:xe,getConfiguration:function(){return{...ln(L)}},getState:function(){return ln(w)},hide:ke,log:_e,reset:$e,setState:Te,show:Ae,updateUI:Ie,verify:Pe},Re=Va();Vn("scroll",me,function(){Ie()}),Vn("click",me,function(e){const t=e.target;"floating"!==ln(L).display||!t||d?.contains(t)||t.hasAttribute("data-backdrop")||t.closest("[data-popover]")||ln(w)===da.VERIFIED||ln(L).floatingPersist||ke()}),Vn("pageshow",ge,function(e){e.persisted&&(be(ln(L).display),$e())}),Vn("resize",ge,function(){Ie()});var Le=Ce(Re),Me=e=>{Zn(e,Aa())};hr(Le,e=>{"overlay"===ln(L).display&&ln(R)&&e(Me)});var De=Ee(Le,2),Ue=Se(De),Ve=e=>{var t=Pa(),n=Ce(t),r=Ee(n,2),a=e=>{var t=Ia();vr(t,()=>document.querySelector(ln(L).overlayContent)?.innerHTML,!0),ce(t),Zn(e,t)};hr(r,e=>{ln(L).overlayContent&&e(a)}),Vn("click",n,ne,!0),Zn(e,t)};hr(Ue,e=>{"overlay"===ln(L).display&&ln(R)&&e(Ve)});var Ne=Ee(Ue,2),ze=Se(Ne),Fe=Se(ze),He=Se(Fe);{let e=mt(()=>"standard"===ln(L).display&&"onsubmit"!==ln(U)||ln(w)===da.VERIFYING);!function(e,t,n){var r;oe&&(r=ae,se());var a=new fr(e);wn(()=>{var e=t()??null;if(oe&&"["===de(r)!=(null!==e)){var o=fe();return le(o),a.anchor=o,ie(!1),a.ensure(e,e&&(t=>n(t,e))),void ie(!0)}a.ensure(e,e&&(t=>n(t,e)))},E)}(He,()=>ln(D),(t,n)=>{n(t,{get id(){return ln(M)},name:"",get required(){return ln(e)},get loading(){return ln(V)},get checked(){return ln(g)},onchange:ee,oninvalid:te})})}var Ke=Ee(He,2),qe=Se(Ke),Ye=e=>{var t=Wn();yn(()=>or(t,ln(F).verificationRequired)),Zn(e,t)},Ge=e=>{var t=Wn();yn(()=>or(t,ln(F).verifying)),Zn(e,t)},We=e=>{var t=Wn();yn(()=>or(t,ln(F).verified)),Zn(e,t)},Je=e=>{var t=Wn();yn(()=>or(t,ln(F).label)),Zn(e,t)};hr(qe,e=>{ln(w)===da.CODE&&ln(m)?e(Ye):ln(w)===da.VERIFYING?e(Ge,1):ln(w)===da.VERIFIED?e(We,2):e(Je,-1)}),ce(Ke),ce(Fe);var Ze=Ee(Fe,2),Xe=e=>{ia(e,{get strings(){return ln(F)}})};hr(Ze,e=>{ln(z)&&e(Xe)}),ce(ze);var Qe=Ee(ze,2),et=e=>{{let t=mt(()=>"bar"===ln(L).display&&ln(z));sa(e,{get logo(){return ln(t)},get strings(){return ln(F)}})}};hr(Qe,e=>{ln(N)&&e(et)});var tt=Ee(Qe,2),nt=e=>{var t=Oa();Yr(t,e=>Et(x,e),()=>ln(x)),Zn(e,t)};hr(tt,e=>{"floating"===ln(L).display&&e(nt)});var rt=Ee(tt,2),at=e=>{var t=Ra();Dr(t),yn(()=>{var e,n,r;Vr(t,"name",ln(L).name),e=t,n=ln(A),(r=zr(e)).value!==(r.value=n??void 0)&&(e.value!==n||0===n&&e.nodeName===Mr)&&(e.value=n??"")}),Zn(e,t)};hr(rt,e=>{ln(L).setCookie||e(at)}),ce(Ne);var ot=Ee(Ne,2),it=e=>{Ca(e,{get anchor(){return ln($)},onClickOutside:()=>{o&&$e()},get placement(){return ln(L).popoverPlacement},role:"alert",variant:"error",get dir(){return ln(B)},get updateUISignal(){return ln(P)},children:(e,t)=>{var n=Jn(),r=Ce(n),a=e=>{Zn(e,La())},i=e=>{var t=Ma(),n=Se(t,!0);ce(t),yn(()=>or(n,ln(F).expired)),Zn(e,t)},l=e=>{var t=Da(),n=Se(t,!0);ce(t),yn(()=>{Vr(t,"title",ln(C)),or(n,ln(F).error)}),Zn(e,t)};hr(r,e=>{ln(C)||o?ln(C)||ln(w)!==da.EXPIRED?e(l,-1):e(i,1):e(a)}),Zn(e,n)},$$slots:{default:!0}})},lt=e=>{var t=Jn();!function(e,t,n){oe&&se();var r=new fr(e);wn(()=>{var e=t();e!=e&&(e=pr),r.ensure(e,n)})}(Ce(t),()=>ln(m),e=>{{let t=mt(()=>"standard"!==ln(L).codeChallengeDisplay);Ca(e,{get anchor(){return ln($)},get backdrop(){return ln(t)},get display(){return ln(L).codeChallengeDisplay},onClose:()=>{$e()},get placement(){return ln(L).popoverPlacement},role:"dialog",get"aria-label"(){return ln(F).verificationRequired},get dir(){return ln(B)},get updateUISignal(){return ln(P)},children:(e,t)=>{var n=Ua(),r=Ce(n);xa(r,{get audioUrl(){return ln(H)},get imageUrl(){return ln(K)},onCancel:()=>$e(),onReload:()=>Pe(),onSubmit:e=>we(e),get codeChallenge(){return ln(m)},get config(){return ln(L)},get strings(){return ln(F)}});var a=Ee(r,2),o=e=>{sa(e,{get logo(){return ln(z)},get strings(){return ln(F)}})};hr(a,e=>{ln(N)&&"standard"!==ln(L).codeChallengeDisplay&&e(o)}),Zn(e,n)},$$slots:{default:!0}})}}),Zn(e,t)};hr(ot,e=>{ln(C)||ln(w)===da.EXPIRED||!o?e(it):ln(m)&&ln(w)===da.CODE&&e(lt,1)}),ce(De),Yr(De,e=>Et($,e),()=>ln($)),yn(e=>{Vr(De,"data-state",ln(w)),Vr(De,"data-display",ln(L).display||void 0),Vr(De,"data-placement",e),Vr(De,"data-visible",ln(R)||void 0),Vr(De,"dir",ln(B)),Vr(Ke,"for",ln(M)),De.dir=De.dir},[()=>function(e){switch(e){case"bar":return ln(L).barPlacement||"bottom";case"floating":return ln(L).floatingPlacement||"auto";default:return}}(ln(L).display)]),Zn(e,Re);var st=X(Oe);return r(),st},{auto:{type:"String"},challenge:{type:"String"},configuration:{type:"String"},display:{type:"String"},language:{type:"String"},name:{type:"String"},theme:{type:"String"},type:{type:"String"},workers:{type:"Number"}},[],["configure","getConfiguration","getState","hide","log","reset","setState","show","updateUI","verify"]));const Na='(function() {\n "use strict";\n function bufferStartsWith(buffer, prefix) {\n if (prefix.length > buffer.length) {\n return false;\n }\n for (let i = 0; i < prefix.length; i++) {\n if (buffer[i] !== prefix[i]) {\n return false;\n }\n }\n return true;\n }\n function bufferToHex(buffer) {\n return Array.from(new Uint8Array(buffer)).map((b) => b.toString(16).padStart(2, "0")).join("");\n }\n function concatBuffers(a, b) {\n const out = new Uint8Array(a.length + b.length);\n out.set(a, 0);\n out.set(b, a.length);\n return out;\n }\n function hexToBuffer(hex) {\n if (hex.length % 2 !== 0) {\n throw new Error(`Hex string must have an even length. Got: ${hex}`);\n }\n const buffer = new ArrayBuffer(hex.length / 2);\n const view = new DataView(buffer);\n for (let i = 0; i < hex.length; i += 2) {\n const byteString = hex.substring(i, i + 2);\n const byteValue = parseInt(byteString, 16);\n view.setUint8(i / 2, byteValue);\n }\n return new Uint8Array(buffer);\n }\n async function delay(ms) {\n await new Promise((resolve) => setTimeout(resolve, ms));\n }\n function timeDuration(start) {\n return Math.floor((performance.now() - start) * 10) / 10;\n }\n class PasswordBuffer {\n constructor(nonce, mode = "uint32") {\n this.nonce = nonce;\n this.mode = mode;\n this.buffer = new Uint8Array(this.nonce.length + this.COUNTER_BYTES);\n this.buffer.set(this.nonce, 0);\n this.dataView = new DataView(this.buffer.buffer);\n }\n nonce;\n mode;\n COUNTER_BYTES = 4;\n buffer;\n dataView;\n encoder = new TextEncoder();\n /**\n * Appends the counter to the nonce buffer.\n * In \'string\' mode, encodes the counter as a UTF-8 string.\n * In \'uint32\' mode, writes the counter as a big-endian 32-bit integer.\n */\n setCounter(n) {\n if (this.mode === "string") {\n return concatBuffers(this.nonce, this.encoder.encode(n.toString()));\n }\n this.dataView.setUint32(this.nonce.length, n, false);\n return this.buffer;\n }\n }\n async function solveChallenge(options) {\n const {\n challenge,\n controller,\n counterMode = "uint32",\n counterStart = 0,\n counterStep = 1,\n deriveKey: deriveKey2,\n timeout = 9e4\n } = options;\n const { nonce, keyPrefix, salt } = challenge.parameters;\n const nonceBuf = hexToBuffer(nonce);\n const saltBuf = hexToBuffer(salt);\n const keyPrefixBuf = keyPrefix.length % 2 === 0 ? hexToBuffer(keyPrefix) : null;\n const password = new PasswordBuffer(nonceBuf, counterMode);\n const start = performance.now();\n let counter = counterStart;\n let iterations = 0;\n let derivedKeyHex = "";\n let lastYield = start;\n while (true) {\n if (controller?.signal.aborted || timeout && iterations % 10 === 0 && performance.now() - start > timeout) {\n return null;\n }\n const { derivedKey } = await deriveKey2(\n challenge.parameters,\n saltBuf,\n password.setCounter(counter)\n );\n if (iterations % 10 === 0 && performance.now() - lastYield > 200) {\n await delay(0);\n lastYield = performance.now();\n }\n if (keyPrefixBuf ? bufferStartsWith(derivedKey, keyPrefixBuf) : bufferToHex(derivedKey).startsWith(keyPrefix)) {\n derivedKeyHex = bufferToHex(derivedKey);\n break;\n }\n counter = counter + counterStep;\n iterations = iterations + 1;\n }\n return {\n counter,\n derivedKey: derivedKeyHex,\n time: timeDuration(start)\n };\n }\n function handler(options) {\n const { deriveKey: deriveKey2 } = options;\n let controller = void 0;\n self.onmessage = async (message) => {\n const { challenge, counterMode, counterStart, counterStep, timeout, type } = message.data;\n if (type === "abort") {\n controller?.abort();\n } else if (type === "work") {\n controller = new AbortController();\n let solution;\n try {\n solution = await solveChallenge({\n challenge,\n controller,\n counterStart,\n counterStep,\n deriveKey: deriveKey2,\n counterMode,\n timeout\n });\n } catch (err) {\n return self.postMessage({ error: err });\n }\n self.postMessage(solution);\n }\n };\n }\n function getDigest(algorithm) {\n switch (algorithm) {\n case "PBKDF2/SHA-512":\n return "SHA-512";\n case "PBKDF2/SHA-384":\n return "SHA-384";\n case "PBKDF2/SHA-256":\n default:\n return "SHA-256";\n }\n }\n async function deriveKey(parameters, salt, password) {\n const { algorithm, cost, keyLength = 32 } = parameters;\n const passwordKey = await crypto.subtle.importKey(\n "raw",\n password,\n { name: "PBKDF2" },\n false,\n ["deriveKey"]\n );\n const derivedKey = await crypto.subtle.deriveKey(\n {\n name: "PBKDF2",\n salt,\n iterations: cost,\n hash: getDigest(algorithm)\n },\n passwordKey,\n { name: "AES-GCM", length: keyLength * 8 },\n true,\n ["encrypt"]\n );\n return {\n derivedKey: new Uint8Array(await crypto.subtle.exportKey("raw", derivedKey))\n };\n }\n handler({\n deriveKey\n });\n})();\n',za="undefined"!=typeof self&&self.Blob&&new Blob(["(self.URL || self.webkitURL).revokeObjectURL(self.location.href);",Na],{type:"text/javascript;charset=utf-8"});function ja(e){let t;try{if(t=za&&(self.URL||self.webkitURL).createObjectURL(za),!t)throw"";const n=new Worker(t,{name:e?.name});return n.addEventListener("error",()=>{(self.URL||self.webkitURL).revokeObjectURL(t)}),n}catch(t){return new Worker("data:text/javascript;charset=utf-8,"+encodeURIComponent(Na),{name:e?.name})}}const Ba='(function() {\n "use strict";\n function bufferStartsWith(buffer, prefix) {\n if (prefix.length > buffer.length) {\n return false;\n }\n for (let i = 0; i < prefix.length; i++) {\n if (buffer[i] !== prefix[i]) {\n return false;\n }\n }\n return true;\n }\n function bufferToHex(buffer) {\n return Array.from(new Uint8Array(buffer)).map((b) => b.toString(16).padStart(2, "0")).join("");\n }\n function concatBuffers(a, b) {\n const out = new Uint8Array(a.length + b.length);\n out.set(a, 0);\n out.set(b, a.length);\n return out;\n }\n function hexToBuffer(hex) {\n if (hex.length % 2 !== 0) {\n throw new Error(`Hex string must have an even length. Got: ${hex}`);\n }\n const buffer = new ArrayBuffer(hex.length / 2);\n const view = new DataView(buffer);\n for (let i = 0; i < hex.length; i += 2) {\n const byteString = hex.substring(i, i + 2);\n const byteValue = parseInt(byteString, 16);\n view.setUint8(i / 2, byteValue);\n }\n return new Uint8Array(buffer);\n }\n async function delay(ms) {\n await new Promise((resolve) => setTimeout(resolve, ms));\n }\n function timeDuration(start) {\n return Math.floor((performance.now() - start) * 10) / 10;\n }\n class PasswordBuffer {\n constructor(nonce, mode = "uint32") {\n this.nonce = nonce;\n this.mode = mode;\n this.buffer = new Uint8Array(this.nonce.length + this.COUNTER_BYTES);\n this.buffer.set(this.nonce, 0);\n this.dataView = new DataView(this.buffer.buffer);\n }\n nonce;\n mode;\n COUNTER_BYTES = 4;\n buffer;\n dataView;\n encoder = new TextEncoder();\n /**\n * Appends the counter to the nonce buffer.\n * In \'string\' mode, encodes the counter as a UTF-8 string.\n * In \'uint32\' mode, writes the counter as a big-endian 32-bit integer.\n */\n setCounter(n) {\n if (this.mode === "string") {\n return concatBuffers(this.nonce, this.encoder.encode(n.toString()));\n }\n this.dataView.setUint32(this.nonce.length, n, false);\n return this.buffer;\n }\n }\n async function solveChallenge(options) {\n const {\n challenge,\n controller,\n counterMode = "uint32",\n counterStart = 0,\n counterStep = 1,\n deriveKey: deriveKey2,\n timeout = 9e4\n } = options;\n const { nonce, keyPrefix, salt } = challenge.parameters;\n const nonceBuf = hexToBuffer(nonce);\n const saltBuf = hexToBuffer(salt);\n const keyPrefixBuf = keyPrefix.length % 2 === 0 ? hexToBuffer(keyPrefix) : null;\n const password = new PasswordBuffer(nonceBuf, counterMode);\n const start = performance.now();\n let counter = counterStart;\n let iterations = 0;\n let derivedKeyHex = "";\n let lastYield = start;\n while (true) {\n if (controller?.signal.aborted || timeout && iterations % 10 === 0 && performance.now() - start > timeout) {\n return null;\n }\n const { derivedKey } = await deriveKey2(\n challenge.parameters,\n saltBuf,\n password.setCounter(counter)\n );\n if (iterations % 10 === 0 && performance.now() - lastYield > 200) {\n await delay(0);\n lastYield = performance.now();\n }\n if (keyPrefixBuf ? bufferStartsWith(derivedKey, keyPrefixBuf) : bufferToHex(derivedKey).startsWith(keyPrefix)) {\n derivedKeyHex = bufferToHex(derivedKey);\n break;\n }\n counter = counter + counterStep;\n iterations = iterations + 1;\n }\n return {\n counter,\n derivedKey: derivedKeyHex,\n time: timeDuration(start)\n };\n }\n function handler(options) {\n const { deriveKey: deriveKey2 } = options;\n let controller = void 0;\n self.onmessage = async (message) => {\n const { challenge, counterMode, counterStart, counterStep, timeout, type } = message.data;\n if (type === "abort") {\n controller?.abort();\n } else if (type === "work") {\n controller = new AbortController();\n let solution;\n try {\n solution = await solveChallenge({\n challenge,\n controller,\n counterStart,\n counterStep,\n deriveKey: deriveKey2,\n counterMode,\n timeout\n });\n } catch (err) {\n return self.postMessage({ error: err });\n }\n self.postMessage(solution);\n }\n };\n }\n async function deriveKey(parameters, salt, password) {\n const { algorithm, keyLength = 32 } = parameters;\n const iterations = Math.max(1, parameters.cost);\n let data = void 0;\n let derivedKey = void 0;\n for (let i = 0; i < iterations; i++) {\n if (i === 0) {\n data = concatBuffers(salt, password);\n } else {\n data = derivedKey;\n }\n derivedKey = new Uint8Array(\n (await crypto.subtle.digest(algorithm, data)).slice(0, keyLength)\n );\n }\n return {\n parameters: {},\n derivedKey\n };\n }\n handler({\n deriveKey\n });\n})();\n',Fa="undefined"!=typeof self&&self.Blob&&new Blob(["(self.URL || self.webkitURL).revokeObjectURL(self.location.href);",Ba],{type:"text/javascript;charset=utf-8"});function Ha(e){let t;try{if(t=Fa&&(self.URL||self.webkitURL).createObjectURL(Fa),!t)throw"";const n=new Worker(t,{name:e?.name});return n.addEventListener("error",()=>{(self.URL||self.webkitURL).revokeObjectURL(t)}),n}catch(t){return new Worker("data:text/javascript;charset=utf-8,"+encodeURIComponent(Ba),{name:e?.name})}}!function(e,t="altcha-css"){if("undefined"!=typeof document&&document&&!document.getElementById(t)){const n=document.createElement("style");n.id=t,n.textContent=e;const r=document.currentScript?.nonce??document.querySelector('meta[name="csp-nonce"]')?.content;r&&(n.nonce=r),document.head.appendChild(n)}}(':root {\n --altcha-border-color: var(--altcha-color-neutral);\n --altcha-border-width: 1px;\n --altcha-border-radius: 6px;\n --altcha-color-base: light-dark(oklch(100% 0.00011 271.152), oklch(20.904% 0.00002 271.152));\n --altcha-color-base-content: light-dark(\n \toklch(20.904% 0.00002 271.152),\n \toklch(100% 0.00011 271.152)\n );\n --altcha-color-error: oklch(51.284% 0.20527 28.678);\n --altcha-color-error-content: oklch(100% 0.00011 271.152);\n --altcha-color-neutral: light-dark(oklch(83.591% 0.0001 271.152), oklch(46.04% 0.00005 271.152));\n --altcha-color-neutral-content: light-dark(\n \toklch(46.76% 0.00005 271.152),\n \toklch(100% 0.00011 271.152)\n );\n --altcha-color-primary: oklch(40.279% 0.2449 268.131);\n --altcha-color-primary-content: oklch(100% 0.00011 271.152);\n --altcha-color-success: oklch(55.748% 0.18968 142.511);\n --altcha-color-success-content: oklch(100% 0.00011 271.152);\n --altcha-checkbox-border-color: light-dark(\n \toklch(66.494% 0.00233 15.434),\n \toklch(51.028% 0.00006 271.152)\n );\n --altcha-checkbox-border-radius: 5px;\n --altcha-checkbox-border-width: var(--altcha-border-width);\n --altcha-checkbox-outline: 2px solid var(--altcha-checkbox-outline-color);\n --altcha-checkbox-outline-color: -webkit-focus-ring-color;\n --altcha-checkbox-outline-offset: 2px;\n --altcha-checkbox-size: 22px;\n --altcha-checkbox-transition-duration: var(--altcha-transition-duration);\n --altcha-input-background-color: var(--altcha-color-base);\n --altcha-input-border-radius: 3px;\n --altcha-input-border-width: 1px;\n --altcha-input-color: var(--altcha-color-base-content);\n --altcha-max-width: 320px;\n --altcha-padding: 0.75rem;\n --altcha-popover-arrow-size: 6px;\n --altcha-popover-color: var(--altcha-border-color);\n --altcha-shadow: drop-shadow(3px 3px 6px oklch(0% 0 0 / 0.2));\n --altcha-spinner-color: var(--altcha-color-base-content);\n --altcha-switch-background-color: var(--altcha-color-neutral);\n --altcha-switch-border-radius: calc(infinity * 1px);\n --altcha-switch-height: var(--altcha-checkbox-size);\n --altcha-switch-padding: 0.25rem;\n --altcha-switch-width: calc(var(--altcha-checkbox-size) * 1.75);\n --altcha-switch-toggle-border-radius: 100%;\n --altcha-switch-toggle-color: var(--altcha-color-neutral-content);\n --altcha-switch-toggle-size: calc(\n \tvar(--altcha-switch-height) - calc(var(--altcha-switch-padding) * 2)\n );\n --altcha-transition-duration: 0.6s;\n --altcha-z-index: 99999999;\n --altcha-z-index-popover: 999999999;\n}\n\n@supports (-moz-appearance: none) {\n :root {\n --altcha-checkbox-outline-color: var(--altcha-color-primary);\n }\n}\n.altcha {\n all: revert-layer;\n display: none;\n font-family: inherit;\n font-size: inherit;\n position: relative;\n}\n.altcha[data-visible] {\n display: block;\n}\n.altcha-popover, .altcha-popover * {\n all: revert-layer;\n box-sizing: border-box;\n font-family: inherit;\n font-size: inherit;\n line-height: 1.25;\n}\n.altcha * {\n all: revert-layer;\n box-sizing: border-box;\n font-family: inherit;\n font-size: inherit;\n line-height: 1.25;\n}\n.altcha a, .altcha-popover a {\n color: currentColor;\n text-decoration: none;\n}\n.altcha a:hover, .altcha-popover a:hover {\n color: currentColor;\n}\n.altcha-main {\n align-items: start;\n background-color: var(--altcha-color-base);\n border: var(--altcha-border-width, 1px) solid var(--altcha-border-color);\n border-radius: var(--altcha-border-radius, 0);\n color: var(--altcha-color-base-content);\n display: flex;\n flex-direction: column;\n gap: 0.5rem;\n justify-content: space-between;\n padding: var(--altcha-padding);\n max-width: var(--altcha-max-width, 100%);\n}\n.altcha-main > * {\n display: flex;\n width: 100%;\n}\n.altcha-main > *:first-child {\n flex-grow: 1;\n}\n.altcha-checkbox-wrap {\n align-items: center;\n display: flex;\n flex-direction: row;\n flex-grow: 1;\n gap: 0.5rem;\n}\n.altcha-checkbox-wrap > * {\n display: flex;\n}\n.altcha-logo {\n opacity: 0.7;\n}\n.altcha-footer {\n align-items: center;\n display: flex;\n flex-grow: 1;\n gap: 0.5rem;\n justify-content: flex-end;\n font-size: 0.7rem;\n opacity: 0.7;\n}\n.altcha-footer p {\n margin: 0;\n padding: 0;\n}\n.altcha-error {\n font-size: 0.85rem;\n}\n.altcha-button {\n align-items: center;\n background: var(--altcha-color-primary);\n border: var(--altcha-input-border-width) solid var(--altcha-color-primary);\n border-radius: var(--altcha-input-border-radius);\n color: var(--altcha-color-primary-content);\n cursor: pointer;\n display: flex;\n font-size: 0.9rem;\n gap: 0.5rem;\n padding: 0.35rem;\n}\n.altcha-button:focus {\n border-color: var(--altcha-color-primary);\n outline: var(--altcha-checkbox-outline);\n outline-offset: var(--altcha-checkbox-outline-offset);\n}\n.altcha-button > .altcha-spinner, .altcha-button > svg {\n height: 20px;\n width: 20px;\n}\n.altcha-button-secondary {\n background: transparent;\n border-color: var(--altcha-color-neutral);\n color: var(--altcha-color-neutral-content);\n}\n.altcha-input {\n background: var(--altcha-input-background-color);\n border: var(--altcha-input-border-width) solid var(--altcha-color-neutral);\n border-radius: var(--altcha-input-border-radius);\n color: var(--altcha-input-color);\n flex-grow: 1;\n font-size: 1rem;\n min-width: 0;\n padding: 0.25rem;\n width: auto;\n}\n.altcha-input:focus {\n border-color: var(--altcha-color-primary);\n outline: var(--altcha-checkbox-outline);\n outline-offset: var(--altcha-checkbox-outline-offset);\n}\n.altcha-spinner {\n animation: altcha-rotate 0.6s linear infinite;\n border-radius: 100%;\n border: var(--altcha-checkbox-border-width) solid var(--altcha-spinner-color);\n border-bottom-color: transparent;\n border-right-color: transparent;\n opacity: 0.7;\n}\n.altcha-popover {\n background-color: var(--altcha-color-base);\n border: var(--altcha-border-width) solid var(--altcha-border-color);\n border-radius: var(--altcha-border-radius);\n color: var(--altcha-color-base-content);\n filter: var(--altcha-shadow);\n position: absolute;\n left: calc(var(--altcha-padding) / 2);\n max-width: calc(var(--altcha-max-width) - var(--altcha-padding));\n top: calc(var(--altcha-padding) + var(--altcha-checkbox-size) + var(--altcha-popover-arrow-size));\n z-index: var(--altcha-z-index-popover);\n}\n.altcha-popover-arrow {\n border: var(--altcha-popover-arrow-size) solid transparent;\n border-bottom-color: var(--altcha-popover-color);\n content: "";\n height: 0;\n left: calc(var(--altcha-checkbox-size) / 2);\n position: absolute;\n top: calc(var(--altcha-popover-arrow-size) * -2);\n width: 0;\n}\n.altcha-popover-content {\n max-height: 100dvh;\n overflow: auto;\n padding: var(--altcha-padding);\n}\n.altcha-popover[data-top=true][data-display=standard] {\n bottom: calc(100% - (var(--altcha-padding) - var(--altcha-popover-arrow-size)));\n top: auto;\n}\n.altcha-popover[data-top=true][data-display=standard] .altcha-popover-arrow {\n border-bottom-color: transparent;\n border-top-color: var(--altcha-popover-color);\n bottom: calc(var(--altcha-popover-arrow-size) * -2);\n top: auto;\n}\n.altcha-popover[data-variant=error] {\n --altcha-popover-color: var(--altcha-color-error);\n background-color: var(--altcha-color-error);\n border-color: var(--altcha-color-error);\n color: var(--altcha-color-error-content);\n}\n.altcha-popover[data-variant=error] .altcha-popover-content {\n padding: calc(var(--altcha-padding) / 1.5) var(--altcha-padding);\n}\n.altcha-popover[data-display=overlay] {\n animation: altcha-overlay-slidein 0.5s forwards;\n left: 50%;\n position: fixed;\n top: 45%;\n transform: translate(-50%, -50%);\n width: var(--altcha-max-width);\n z-index: var(--altcha-z-index);\n}\n.altcha-popover[data-display=bottomsheet] {\n animation: altcha-bottomsheet-slideup 0.5s forwards;\n border-bottom-left-radius: 0;\n border-bottom-right-radius: 0;\n border-bottom: 0;\n bottom: -100%;\n left: 50%;\n position: fixed;\n top: auto;\n transform: translate(-50%, 0);\n width: var(--altcha-max-width);\n z-index: var(--altcha-z-index);\n}\n.altcha-popover[data-display=bottomsheet] .altcha-popover-content {\n padding-bottom: calc(var(--altcha-padding) * 2);\n}\n.altcha-popover-backdrop {\n background: var(--altcha-color-base-content);\n bottom: 0;\n left: 0;\n opacity: 0.1;\n position: fixed;\n right: 0;\n top: 0;\n transition: opacity 0.5s;\n z-index: var(--altcha-z-index);\n}\n.altcha-popover-close {\n color: var(--altcha-color-base-content);\n cursor: pointer;\n display: inline-block;\n font-size: 1rem;\n height: 1.25rem;\n line-height: 0.95;\n position: absolute;\n right: 0;\n text-align: center;\n text-shadow: 0 0 1px var(--altcha-color-base);\n top: -1.5rem;\n width: 1.25rem;\n z-index: var(--altcha-z-index);\n}\n[dir=rtl] .altcha-popover {\n left: auto;\n right: calc(var(--altcha-padding) / 2);\n}\n[dir=rtl] .altcha-popover-arrow {\n left: auto;\n right: calc(var(--altcha-checkbox-size) / 2);\n}\n[dir=rtl] .altcha-popover-close {\n left: 0;\n right: auto;\n}\n.altcha-popover[data-display=bottomsheet] .altcha-footer, .altcha-popover[data-display=overlay] .altcha-footer {\n align-items: center;\n justify-content: center;\n padding-top: 1rem;\n gap: 0.5rem;\n}\n.altcha-popover[data-display=bottomsheet] .altcha-footer svg, .altcha-popover[data-display=overlay] .altcha-footer svg {\n height: 18px;\n width: 18px;\n vertical-align: middle;\n}\n.altcha-code-challenge > form {\n display: flex;\n flex-direction: column;\n gap: 0.5rem;\n}\n.altcha-code-challenge-title {\n font-weight: 600;\n}\n.altcha-code-challenge-text {\n font-size: 0.85rem;\n}\n.altcha-code-challenge-image {\n background: white;\n border: var(--altcha-input-border-width) solid var(--altcha-color-neutral);\n border-radius: var(--altcha-input-border-radius);\n object-fit: contain;\n height: 50px;\n}\n.altcha-code-challenge-row {\n display: flex;\n gap: 0.5rem;\n}\n.altcha-code-challenge-buttons {\n align-items: center;\n display: flex;\n flex-direction: column;\n gap: 0.5rem;\n margin-top: var(--altcha-padding);\n justify-content: space-between;\n}\n.altcha-code-challenge-buttons button {\n justify-content: center;\n width: 100%;\n}\n.altcha-checkbox {\n cursor: pointer;\n height: var(--altcha-checkbox-size);\n position: relative;\n width: var(--altcha-checkbox-size);\n}\n.altcha-checkbox input {\n appearance: none;\n background: var(--altcha-input-background-color);\n border: var(--altcha-checkbox-border-width, 2px) solid var(--altcha-checkbox-border-color);\n border-radius: var(--altcha-checkbox-border-radius);\n cursor: pointer;\n height: var(--altcha-checkbox-size);\n left: 0;\n margin: 0;\n padding: 0;\n position: absolute;\n top: 0;\n width: var(--altcha-checkbox-size);\n}\n@supports (hanging-punctuation: first) and (font: -apple-system-body) and (-webkit-appearance: none) {\n .altcha-checkbox input {\n /* Safari-only: fixes focus outline */\n }\n .altcha-checkbox input:focus {\n outline-width: 2px;\n outline-style: solid;\n }\n}\n.altcha-checkbox input:before {\n border-radius: var(--altcha-checkbox-border-radius);\n content: "";\n width: 100%;\n height: 100%;\n background: var(--altcha-color-neutral);\n display: block;\n transform: scale(0);\n}\n.altcha-checkbox input:checked {\n background-color: var(--altcha-color-success);\n border-color: var(--altcha-color-success);\n}\n.altcha-checkbox input:checked::before {\n background-color: var(--altcha-color-success);\n opacity: 0;\n transform: scale(2.2);\n transition: all var(--altcha-checkbox-transition-duration) ease;\n transition-delay: 0.1s;\n}\n.altcha-checkbox svg {\n --altcha-radio-svg-size: calc(var(--altcha-checkbox-size) * 0.5);\n --altcha-radio-svg-offset: calc(var(--altcha-checkbox-size) * 0.25);\n fill: none;\n left: var(--altcha-radio-svg-offset);\n height: var(--altcha-radio-svg-size);\n opacity: 0;\n position: absolute;\n stroke: currentColor;\n stroke-width: 2;\n stroke-linecap: round;\n stroke-linejoin: round;\n stroke-dasharray: 16px;\n stroke-dashoffset: 16px;\n top: var(--altcha-radio-svg-offset);\n transform: translate3d(0, 0, 0);\n width: var(--altcha-radio-svg-size);\n}\n.altcha-checkbox input:checked + svg {\n color: var(--altcha-color-success-content);\n opacity: 1;\n stroke-dashoffset: 0;\n transition: all var(--altcha-checkbox-transition-duration) ease;\n transition-delay: 0.1s;\n}\n.altcha-checkbox-spinner {\n display: none;\n left: 0;\n height: var(--altcha-checkbox-size);\n position: absolute;\n top: 0;\n width: var(--altcha-checkbox-size);\n}\n.altcha-checkbox[data-loading=true] input {\n appearance: none;\n opacity: 0;\n pointer-events: none;\n}\n.altcha-checkbox[data-loading=true] .altcha-checkbox-spinner {\n display: block;\n}\n.altcha-checkbox-native {\n height: var(--altcha-checkbox-size);\n position: relative;\n width: var(--altcha-checkbox-size);\n}\n.altcha-checkbox-native input {\n height: var(--altcha-checkbox-size);\n margin: 0;\n width: var(--altcha-checkbox-size);\n}\n.altcha-checkbox-native-spinner {\n display: none;\n left: 0;\n height: var(--altcha-checkbox-size);\n position: absolute;\n top: 0;\n width: var(--altcha-checkbox-size);\n}\n.altcha-checkbox-native[data-loading=true] input {\n appearance: none;\n opacity: 0;\n pointer-events: none;\n}\n.altcha-checkbox-native[data-loading=true] .altcha-checkbox-native-spinner {\n display: block;\n}\n.altcha-switch {\n align-items: center;\n border-radius: var(--altcha-switch-border-radius);\n background-color: var(--altcha-switch-background-color);\n display: flex;\n height: var(--altcha-switch-height);\n padding: var(--altcha-switch-padding);\n position: relative;\n width: var(--altcha-switch-width);\n}\n.altcha-switch:focus-within {\n outline: var(--altcha-checkbox-outline);\n outline-offset: var(--altcha-checkbox-outline-offset);\n}\n.altcha-switch input {\n appearance: none;\n cursor: pointer;\n height: 100%;\n left: 0;\n opacity: 0;\n position: absolute;\n top: 0;\n width: 100%;\n}\n.altcha-switch-toggle {\n align-items: center;\n background-color: var(--altcha-switch-toggle-color);\n border-radius: var(--altcha-switch-toggle-border-radius);\n cursor: pointer;\n display: flex;\n height: var(--altcha-switch-toggle-size);\n justify-content: center;\n left: var(--altcha-switch-padding);\n position: absolute;\n transition: width 150ms ease-out, left 150ms ease-out;\n width: var(--altcha-switch-toggle-size);\n}\n.altcha-switch-spinner {\n display: none;\n height: var(--altcha-switch-toggle-size);\n width: var(--altcha-switch-toggle-size);\n}\n.altcha-switch[data-loading=true] {\n pointer-events: none;\n}\n.altcha-switch[data-loading=true] .altcha-switch-spinner {\n display: block;\n}\n.altcha-switch[data-loading=true] .altcha-switch-toggle {\n background-color: transparent;\n left: calc(50% - var(--altcha-switch-toggle-size) / 2);\n}\n[data-state=verified] .altcha-switch {\n --altcha-switch-background-color: var(--altcha-color-success);\n}\n[data-state=verified] .altcha-switch-toggle {\n background-color: var(--altcha-color-success-content);\n left: calc(100% - var(--altcha-switch-height) + var(--altcha-switch-padding));\n}\n[dir=rtl] .altcha-switch-toggle {\n left: calc(100% - var(--altcha-switch-height) + var(--altcha-switch-padding));\n}\n[dir=rtl][data-state=verified] .altcha-switch-toggle {\n left: var(--altcha-switch-padding);\n}\n.altcha-floating-arrow {\n border: 6px solid transparent;\n border-bottom-color: var(--altcha-border-color);\n content: "";\n height: 0;\n left: 12px;\n position: absolute;\n top: -12px;\n width: 0;\n}\n.altcha-overlay-backdrop {\n bottom: 0;\n left: 0;\n position: fixed;\n right: 0;\n top: 0;\n transition: opacity var(--altcha-transition-duration);\n z-index: var(--altcha-z-index);\n}\n.altcha-overlay-close {\n display: inline-block;\n color: currentColor;\n cursor: pointer;\n font-size: 1rem;\n height: 1rem;\n line-height: 0.85;\n position: absolute;\n right: 0;\n text-align: center;\n text-shadow: 0 0 1px var(--altcha-color-base);\n top: -1.5rem;\n width: 1rem;\n z-index: var(--altcha-z-index);\n}\n.altcha[data-display=overlay] {\n animation: altcha-overlay-slidein var(--altcha-transition-duration) forwards;\n filter: var(--altcha-shadow);\n left: 50%;\n opacity: 0;\n position: fixed;\n top: 45%;\n transform: translate(-50%, -50%);\n z-index: var(--altcha-z-index);\n}\n.altcha[data-display=overlay] .altcha-main {\n width: var(--altcha-max-width);\n}\n.altcha[data-display=floating] {\n display: none;\n filter: var(--altcha-shadow);\n left: var(--altcha-floating-left, -100%);\n position: fixed;\n top: var(--altcha-floating-top, -100%);\n z-index: var(--altcha-z-index);\n}\n.altcha[data-display=floating] .altcha-main {\n width: var(--altcha-max-width);\n}\n.altcha[data-display=floating][data-floating-position=top] .altcha-floating-arrow {\n border-bottom-color: transparent;\n border-top-color: var(--altcha-border-color);\n bottom: -12px;\n top: auto;\n}\n.altcha[data-display=floating][data-visible] {\n display: flex;\n}\n.altcha[data-display=bar] {\n bottom: -100%;\n filter: var(--altcha-shadow);\n left: 0;\n position: fixed;\n right: 0;\n transition: bottom var(--altcha-transition-duration), top var(--altcha-transition-duration);\n z-index: var(--altcha-z-index);\n}\n.altcha[data-display=bar] .altcha-main {\n align-items: center;\n border-radius: 0;\n border-width: var(--altcha-border-width) 0 0 0;\n flex-direction: row;\n max-width: 100% !important;\n}\n.altcha[data-display=bar] .altcha-main > * {\n width: auto;\n}\n.altcha[data-display=bar][data-placement=top] {\n bottom: auto;\n top: -100%;\n}\n.altcha[data-display=bar][data-placement=top] .altcha-main {\n border-width: 0 0 var(--altcha-border-width) 0;\n}\n.altcha[data-display=bar][data-placement=bottom]:not([data-state=unverified]) {\n bottom: 0;\n}\n.altcha[data-display=bar][data-placement=top]:not([data-state=unverified]) {\n top: 0;\n}\n.altcha[data-display=invisible] {\n display: none;\n}\n\n@keyframes altcha-rotate {\n 0% {\n transform: rotate(0deg);\n }\n 100% {\n transform: rotate(360deg);\n }\n}\n@keyframes altcha-bottomsheet-slideup {\n 100% {\n bottom: 0;\n }\n}\n@keyframes altcha-overlay-slidein {\n 100% {\n opacity: 1;\n top: 50%;\n }\n}'),$altcha.algorithms.set("SHA-256",()=>new Ha),$altcha.algorithms.set("SHA-384",()=>new Ha),$altcha.algorithms.set("SHA-512",()=>new Ha),$altcha.algorithms.set("PBKDF2/SHA-256",()=>new ja),$altcha.algorithms.set("PBKDF2/SHA-384",()=>new ja),$altcha.algorithms.set("PBKDF2/SHA-512",()=>new ja)}); diff --git a/frontend/node_modules/altcha/dist/plugins/obfuscation.plugin.d.ts b/frontend/node_modules/altcha/dist/plugins/obfuscation.plugin.d.ts new file mode 100644 index 0000000..0bf25ad --- /dev/null +++ b/frontend/node_modules/altcha/dist/plugins/obfuscation.plugin.d.ts @@ -0,0 +1 @@ +declare module 'altcha/plugins/obfuscation.plugin'; export {}; diff --git a/frontend/node_modules/altcha/dist/plugins/obfuscation.plugin.js b/frontend/node_modules/altcha/dist/plugins/obfuscation.plugin.js new file mode 100644 index 0000000..30224ea --- /dev/null +++ b/frontend/node_modules/altcha/dist/plugins/obfuscation.plugin.js @@ -0,0 +1,619 @@ +const noop = () => { +}; +function safe_not_equal(a, b) { + return a != a ? b == b : a !== b || a !== null && typeof a === "object" || typeof a === "function"; +} +function subscribe_to_store(store2, run, invalidate) { + if (store2 == null) { + run(void 0); + return noop; + } + const unsub = untrack( + () => store2.subscribe( + run, + // @ts-expect-error + invalidate + ) + ); + return unsub.unsubscribe ? () => unsub.unsubscribe() : unsub; +} +const subscriber_queue = []; +function writable(value, start = noop) { + let stop = null; + const subscribers = /* @__PURE__ */ new Set(); + function set(new_value) { + if (safe_not_equal(value, new_value)) { + value = new_value; + if (stop) { + const run_queue = !subscriber_queue.length; + for (const subscriber of subscribers) { + subscriber[1](); + subscriber_queue.push(subscriber, value); + } + if (run_queue) { + for (let i = 0; i < subscriber_queue.length; i += 2) { + subscriber_queue[i][0](subscriber_queue[i + 1]); + } + subscriber_queue.length = 0; + } + } + } + } + function update(fn) { + set(fn( + /** @type {T} */ + value + )); + } + function subscribe(run, invalidate = noop) { + const subscriber = [run, invalidate]; + subscribers.add(subscriber); + if (subscribers.size === 1) { + stop = start(set, update) || noop; + } + run( + /** @type {T} */ + value + ); + return () => { + subscribers.delete(subscriber); + if (subscribers.size === 0 && stop) { + stop(); + stop = null; + } + }; + } + return { set, update, subscribe }; +} +function get(store2) { + let value; + subscribe_to_store(store2, (_) => value = _)(); + return value; +} +let untracking = false; +function untrack(fn) { + var previous_untracking = untracking; + try { + untracking = true; + return fn(); + } finally { + untracking = previous_untracking; + } +} +function store(defaultValue) { + const scope = { + get: (name) => { + return get(scope.store)[name]; + }, + set: (name, value) => { + if (typeof name === "string") { + Object.assign(get(scope.store), { + [name]: value + }); + } else { + Object.assign(get(scope.store), name); + } + scope.store.set(get(scope.store)); + }, + store: writable(defaultValue) + }; + return scope; +} +globalThis.$altcha = globalThis.$altcha || { + algorithms: /* @__PURE__ */ new Map(), + defaults: store({}), + i18n: store({}), + instances: /* @__PURE__ */ new Set(), + plugins: /* @__PURE__ */ new Set() +}; +class BasePlugin { + constructor(host) { + this.host = host; + } + host; + static register(pluginClass) { + if ("$altcha" in globalThis && !globalThis.$altcha.plugins.has(pluginClass)) { + globalThis.$altcha.plugins.add(pluginClass); + } + } + async onFetchChallenge(source) { + } + async onRequestServerVerification(payload, code) { + } + async onVerify(value) { + } +} +function getDigest(algorithm) { + switch (algorithm) { + case "PBKDF2/SHA-512": + return "SHA-512"; + case "PBKDF2/SHA-384": + return "SHA-384"; + case "PBKDF2/SHA-256": + default: + return "SHA-256"; + } +} +async function deriveKey(parameters, salt, password) { + const { algorithm, cost, keyLength = 32 } = parameters; + const passwordKey = await crypto.subtle.importKey( + "raw", + password, + { name: "PBKDF2" }, + false, + ["deriveKey"] + ); + const derivedKey = await crypto.subtle.deriveKey( + { + name: "PBKDF2", + salt, + iterations: cost, + hash: getDigest(algorithm) + }, + passwordKey, + { name: "AES-GCM", length: keyLength * 8 }, + true, + ["encrypt"] + ); + return { + derivedKey: new Uint8Array(await crypto.subtle.exportKey("raw", derivedKey)) + }; +} +function bufferStartsWith(buffer, prefix) { + if (prefix.length > buffer.length) { + return false; + } + for (let i = 0; i < prefix.length; i++) { + if (buffer[i] !== prefix[i]) { + return false; + } + } + return true; +} +function bufferToHex(buffer) { + return Array.from(new Uint8Array(buffer)).map((b) => b.toString(16).padStart(2, "0")).join(""); +} +function concatBuffers(a, b) { + const out = new Uint8Array(a.length + b.length); + out.set(a, 0); + out.set(b, a.length); + return out; +} +function hexToBuffer(hex) { + if (hex.length % 2 !== 0) { + throw new Error(`Hex string must have an even length. Got: ${hex}`); + } + const buffer = new ArrayBuffer(hex.length / 2); + const view = new DataView(buffer); + for (let i = 0; i < hex.length; i += 2) { + const byteString = hex.substring(i, i + 2); + const byteValue = parseInt(byteString, 16); + view.setUint8(i / 2, byteValue); + } + return new Uint8Array(buffer); +} +async function delay(ms) { + await new Promise((resolve) => setTimeout(resolve, ms)); +} +async function hmac(algorithm, data, keyStr) { + const key = await crypto.subtle.importKey( + "raw", + new TextEncoder().encode(keyStr), + { + name: "HMAC", + hash: { name: algorithm } + }, + false, + ["sign", "verify"] + ); + const signature = await crypto.subtle.sign( + "HMAC", + key, + typeof data === "string" ? new TextEncoder().encode(data) : data + ); + return new Uint8Array(signature); +} +function sortKeys(obj) { + if (typeof obj !== "object" || obj === null || Array.isArray(obj)) { + return obj; + } + return Object.keys(obj).sort().reduce((acc, key) => { + const value = obj[key]; + if (value !== void 0) { + acc[key] = sortKeys(value); + } + return acc; + }, {}); +} +function timeDuration(start) { + return Math.floor((performance.now() - start) * 10) / 10; +} +var HmacAlgorithm = /* @__PURE__ */ ((HmacAlgorithm2) => { + HmacAlgorithm2["SHA_256"] = "SHA-256"; + HmacAlgorithm2["SHA_384"] = "SHA-384"; + HmacAlgorithm2["SHA_512"] = "SHA-512"; + return HmacAlgorithm2; +})(HmacAlgorithm || {}); +var State = /* @__PURE__ */ ((State2) => { + State2["CODE"] = "code"; + State2["ERROR"] = "error"; + State2["VERIFIED"] = "verified"; + State2["VERIFYING"] = "verifying"; + State2["UNVERIFIED"] = "unverified"; + State2["EXPIRED"] = "expired"; + return State2; +})(State || {}); +class PasswordBuffer { + constructor(nonce, mode = "uint32") { + this.nonce = nonce; + this.mode = mode; + this.buffer = new Uint8Array(this.nonce.length + this.COUNTER_BYTES); + this.buffer.set(this.nonce, 0); + this.dataView = new DataView(this.buffer.buffer); + } + nonce; + mode; + COUNTER_BYTES = 4; + buffer; + dataView; + encoder = new TextEncoder(); + /** + * Appends the counter to the nonce buffer. + * In 'string' mode, encodes the counter as a UTF-8 string. + * In 'uint32' mode, writes the counter as a big-endian 32-bit integer. + */ + setCounter(n) { + if (this.mode === "string") { + return concatBuffers(this.nonce, this.encoder.encode(n.toString())); + } + this.dataView.setUint32(this.nonce.length, n, false); + return this.buffer; + } +} +async function createChallenge(options) { + const { + algorithm, + counter, + counterMode = "uint32", + cost, + deriveKey: deriveKey2, + data, + expiresAt, + hmacAlgorithm = HmacAlgorithm.SHA_256, + hmacKeySignatureSecret, + hmacSignatureSecret, + keyLength = 32, + keyPrefix = "00", + keyPrefixLength = keyLength / 2, + memoryCost, + parallelism + } = options; + const parameters = { + algorithm, + nonce: bufferToHex(crypto.getRandomValues(new Uint8Array(16))), + salt: bufferToHex(crypto.getRandomValues(new Uint8Array(16))), + cost, + keyLength, + memoryCost, + parallelism, + keyPrefix, + expiresAt: expiresAt instanceof Date ? Math.floor(expiresAt.getTime() / 1e3) : expiresAt, + data + }; + let deriveKeyResult = null; + if (counter !== void 0) { + const nonceBuf = hexToBuffer(parameters.nonce); + deriveKeyResult = await deriveKey2( + parameters, + hexToBuffer(parameters.salt), + new PasswordBuffer(nonceBuf, counterMode).setCounter(counter) + ); + if (deriveKeyResult.parameters) { + Object.assign(parameters, deriveKeyResult.parameters); + } + parameters.keyPrefix = bufferToHex(deriveKeyResult.derivedKey.slice(0, keyPrefixLength)); + } + if (!hmacSignatureSecret) { + return { + parameters: sortKeys(parameters) + }; + } + return signChallenge( + hmacAlgorithm, + parameters, + deriveKeyResult?.derivedKey, + hmacSignatureSecret, + hmacKeySignatureSecret + ); +} +async function solveChallenge(options) { + const { + challenge, + controller, + counterMode = "uint32", + counterStart = 0, + counterStep = 1, + deriveKey: deriveKey2, + timeout = 9e4 + } = options; + const { nonce, keyPrefix, salt } = challenge.parameters; + const nonceBuf = hexToBuffer(nonce); + const saltBuf = hexToBuffer(salt); + const keyPrefixBuf = keyPrefix.length % 2 === 0 ? hexToBuffer(keyPrefix) : null; + const password = new PasswordBuffer(nonceBuf, counterMode); + const start = performance.now(); + let counter = counterStart; + let iterations = 0; + let derivedKeyHex = ""; + let lastYield = start; + while (true) { + if (controller?.signal.aborted || timeout && iterations % 10 === 0 && performance.now() - start > timeout) { + return null; + } + const { derivedKey } = await deriveKey2( + challenge.parameters, + saltBuf, + password.setCounter(counter) + ); + if (iterations % 10 === 0 && performance.now() - lastYield > 200) { + await delay(0); + lastYield = performance.now(); + } + if (keyPrefixBuf ? bufferStartsWith(derivedKey, keyPrefixBuf) : bufferToHex(derivedKey).startsWith(keyPrefix)) { + derivedKeyHex = bufferToHex(derivedKey); + break; + } + counter = counter + counterStep; + iterations = iterations + 1; + } + return { + counter, + derivedKey: derivedKeyHex, + time: timeDuration(start) + }; +} +async function solveChallengeWorkers(options) { + const { + challenge, + concurrency = navigator.hardwareConcurrency, + controller = new AbortController(), + createWorker, + onOutOfMemory = (c) => c > 1 ? Math.floor(c / 2) : 0, + counterMode, + timeout = 9e4 + } = options; + const workersConcurrency = Math.min(16, Math.max(1, concurrency)); + const workersInstances = []; + const terminate = () => { + for (const worker of workersInstances) { + worker.terminate(); + } + }; + for (let i = 0; i < workersConcurrency; i++) { + workersInstances.push(await createWorker(challenge.parameters.algorithm)); + } + let solution = null; + try { + solution = await Promise.race( + workersInstances.map((worker, i) => { + controller.signal.addEventListener("abort", () => { + worker.postMessage({ type: "abort" }); + }); + return new Promise((resolve, reject) => { + worker.addEventListener("error", (err) => { + reject(err); + }); + worker.addEventListener("message", (message) => { + if (message.data) { + for (const w of workersInstances) { + if (w !== worker) { + w.postMessage({ type: "abort" }); + } + } + if (message.data.error) { + return reject(new Error(message.data.error)); + } + } + resolve(message.data); + }); + worker.postMessage({ + challenge, + counterMode, + counterStart: i, + counterStep: workersConcurrency, + timeout, + type: "work" + }); + }); + }) + ); + } catch (err) { + const isOOM = err instanceof Error && !!err?.message?.includes("Out of memory"); + if (isOOM) { + if (onOutOfMemory) { + terminate(); + const retryConcurrency = onOutOfMemory(workersConcurrency); + if (retryConcurrency) { + return solveChallengeWorkers({ + ...options, + challenge, + controller, + concurrency: retryConcurrency, + createWorker + }); + } + } + } + throw err; + } finally { + terminate(); + } + if (controller.signal.aborted) { + return null; + } + return solution || null; +} +async function signChallenge(algorithm, parameters, derivedKey, hmacSignatureSecret, hmacKeySignatureSecret) { + if (derivedKey && hmacKeySignatureSecret) { + parameters.keySignature = bufferToHex( + await hmac(algorithm, derivedKey, hmacKeySignatureSecret) + ); + } + parameters = sortKeys(parameters); + return { + parameters, + signature: bufferToHex(await hmac(algorithm, JSON.stringify(parameters), hmacSignatureSecret)) + }; +} +async function deobfuscate(obfuscatedData, options = {}) { + let { + concurrency = Math.max(1, Math.min(4, navigator.hardwareConcurrency)), + createWorker, + deriveKey: deriveKey$1 = deriveKey + } = options; + let challenge = null; + try { + challenge = JSON.parse(atob(obfuscatedData)); + } catch { + throw new Error(`Unable to parse obfuscated data.`); + } + if (!challenge || typeof challenge !== "object" || !("parameters" in challenge) || !("cipher" in challenge)) { + throw new Error(`Invalid obfuscated data format.`); + } + const cipher = challenge.cipher; + let solution = null; + if (!createWorker && "$altcha" in globalThis) { + createWorker = globalThis.$altcha.algorithms.get(challenge.parameters.algorithm); + } + if (createWorker) { + solution = await solveChallengeWorkers({ + challenge, + concurrency, + createWorker + }); + } else { + solution = await solveChallenge({ + challenge, + deriveKey: deriveKey$1 + }); + } + if (!solution) { + throw new Error("Unable to find solution."); + } + const key = await crypto.subtle.importKey( + "raw", + hexToBuffer(solution.derivedKey), + { name: "AES-GCM" }, + false, + ["decrypt"] + ); + const result = await crypto.subtle.decrypt( + { + name: "AES-GCM", + iv: hexToBuffer(cipher.iv) + }, + key, + hexToBuffer(cipher.data) + ); + return new TextDecoder().decode(result); +} +async function obfuscate(str, options = {}) { + const { deriveKey: deriveKey$1 = deriveKey } = options; + const counterMin = options?.counterMin || 20; + const counterMax = options?.counterMax || 200; + const { parameters } = await createChallenge({ + algorithm: "PBKDF2/SHA-256", + cost: 5e3, + deriveKey: deriveKey$1, + counter: Math.floor(Math.random() * (counterMax - counterMin + 1)) + counterMin, + keyPrefixLength: 32, + ...options + }); + const key = await crypto.subtle.importKey( + "raw", + hexToBuffer(parameters.keyPrefix), + { name: "AES-GCM" }, + false, + ["encrypt"] + ); + const iv = crypto.getRandomValues(new Uint8Array(12)); + const data = await crypto.subtle.encrypt( + { name: "AES-GCM", iv }, + key, + new TextEncoder().encode(str) + ); + return btoa( + JSON.stringify({ + parameters: { + ...parameters, + // Return only half the derived key + keyPrefix: parameters.keyPrefix.slice(0, parameters.keyLength || 32) + }, + cipher: { + iv: bufferToHex(iv), + data: bufferToHex(data) + } + }) + ); +} +class ObfuscationPlugin extends BasePlugin { + static deobfuscate = deobfuscate; + static obfuscate = obfuscate; + elTrigger = null; + activate() { + this.elTrigger = this.host.querySelector("button"); + if (this.elTrigger) { + this.elTrigger.addEventListener("click", this.onTriggerClick.bind(this)); + this.host.configure({ + floatingAnchor: this.elTrigger + }); + } + } + destroy() { + } + async onVerify(options) { + const { minDuration = 500 } = options; + const start = performance.now(); + const obfuscated = this.host.getAttribute("data-obfuscated"); + if (obfuscated) { + this.host.reset(State.VERIFYING); + try { + const text = await deobfuscate(obfuscated); + await this.#wait(Math.max(0, minDuration - (performance.now() - start))); + this.#renderClearText(text); + } catch (err) { + this.host.setState(State.ERROR, String(err)); + } finally { + this.host.setState(State.VERIFIED); + } + return null; + } + } + onTriggerClick(ev) { + ev.preventDefault(); + this.host.show(); + this.host.verify().then(() => { + this.host.hide(); + }); + } + #renderClearText(clearText) { + const match = clearText.match(/^(mailto|tel|sms|https?):/); + let el; + if (match) { + const [contact] = clearText.slice(clearText.indexOf(":") + 1).replace(/^\/\//, "").split("?"); + el = document.createElement("a"); + el.href = clearText; + el.innerText = contact; + } else { + el = document.createTextNode(clearText); + } + if (this.elTrigger && el) { + this.elTrigger.after(el); + this.elTrigger.parentElement?.removeChild(this.elTrigger); + } + } + async #wait(ms) { + await new Promise((resolve) => setTimeout(resolve, ms)); + } +} +BasePlugin.register(ObfuscationPlugin); diff --git a/frontend/node_modules/altcha/dist/plugins/obfuscation.plugin.min.js b/frontend/node_modules/altcha/dist/plugins/obfuscation.plugin.min.js new file mode 100644 index 0000000..0a8a7e8 --- /dev/null +++ b/frontend/node_modules/altcha/dist/plugins/obfuscation.plugin.min.js @@ -0,0 +1 @@ +const e=()=>{};function t(t,r,n){if(null==t)return r(void 0),e;const a=function(e){var t=o;try{return o=!0,e()}finally{o=t}}(()=>t.subscribe(r,n));return a.unsubscribe?()=>a.unsubscribe():a}const r=[];function n(t,n=e){let a=null;const o=new Set;function i(e){if(i=e,((n=t)!=n?i==i:n!==i||null!==n&&"object"==typeof n||"function"==typeof n)&&(t=e,a)){const e=!r.length;for(const e of o)e[1](),r.push(e,t);if(e){for(let e=0;e{o.delete(l),0===o.size&&a&&(a(),a=null)}}}}function a(e){let r;return t(e,e=>r=e)(),r}let o=!1;function i(e){const t={get:e=>a(t.store)[e],set:(e,r)=>{"string"==typeof e?Object.assign(a(t.store),{[e]:r}):Object.assign(a(t.store),e),t.store.set(a(t.store))},store:n(e)};return t}globalThis.$altcha=globalThis.$altcha||{algorithms:new Map,defaults:i({}),i18n:i({}),instances:new Set,plugins:new Set};class s{constructor(e){this.host=e}host;static register(e){"$altcha"in globalThis&&!globalThis.$altcha.plugins.has(e)&&globalThis.$altcha.plugins.add(e)}async onFetchChallenge(e){}async onRequestServerVerification(e,t){}async onVerify(e){}}function c(e){switch(e){case"PBKDF2/SHA-512":return"SHA-512";case"PBKDF2/SHA-384":return"SHA-384";default:return"SHA-256"}}async function l(e,t,r){const{algorithm:n,cost:a,keyLength:o=32}=e,i=await crypto.subtle.importKey("raw",r,{name:"PBKDF2"},!1,["deriveKey"]),s=await crypto.subtle.deriveKey({name:"PBKDF2",salt:t,iterations:a,hash:c(n)},i,{name:"AES-GCM",length:8*o},!0,["encrypt"]);return{derivedKey:new Uint8Array(await crypto.subtle.exportKey("raw",s))}}function u(e,t){if(t.length>e.length)return!1;for(let r=0;re.toString(16).padStart(2,"0")).join("")}function f(e){if(e.length%2!=0)throw new Error(`Hex string must have an even length. Got: ${e}`);const t=new ArrayBuffer(e.length/2),r=new DataView(t);for(let t=0;tsetTimeout(t,e))}async function g(e,t,r){const n=await crypto.subtle.importKey("raw",(new TextEncoder).encode(r),{name:"HMAC",hash:{name:e}},!1,["sign","verify"]),a=await crypto.subtle.sign("HMAC",n,"string"==typeof t?(new TextEncoder).encode(t):t);return new Uint8Array(a)}function d(e){return"object"!=typeof e||null===e||Array.isArray(e)?e:Object.keys(e).sort().reduce((t,r)=>{const n=e[r];return void 0!==n&&(t[r]=d(n)),t},{})}function m(e){return Math.floor(10*(performance.now()-e))/10}var w=(e=>(e.SHA_256="SHA-256",e.SHA_384="SHA-384",e.SHA_512="SHA-512",e))(w||{}),p=(e=>(e.CODE="code",e.ERROR="error",e.VERIFIED="verified",e.VERIFYING="verifying",e.UNVERIFIED="unverified",e.EXPIRED="expired",e))(p||{});class b{constructor(e,t="uint32"){this.nonce=e,this.mode=t,this.buffer=new Uint8Array(this.nonce.length+this.COUNTER_BYTES),this.buffer.set(this.nonce,0),this.dataView=new DataView(this.buffer.buffer)}nonce;mode;COUNTER_BYTES=4;buffer;dataView;encoder=new TextEncoder;setCounter(e){return"string"===this.mode?function(e,t){const r=new Uint8Array(e.length+t.length);return r.set(e,0),r.set(t,e.length),r}(this.nonce,this.encoder.encode(e.toString())):(this.dataView.setUint32(this.nonce.length,e,!1),this.buffer)}}async function S(e){const{algorithm:t,counter:r,counterMode:n="uint32",cost:a,deriveKey:o,data:i,expiresAt:s,hmacAlgorithm:c=w.SHA_256,hmacKeySignatureSecret:l,hmacSignatureSecret:u,keyLength:y=32,keyPrefix:m="00",keyPrefixLength:p=y/2,memoryCost:S,parallelism:v}=e,A={algorithm:t,nonce:h(crypto.getRandomValues(new Uint8Array(16))),salt:h(crypto.getRandomValues(new Uint8Array(16))),cost:a,keyLength:y,memoryCost:S,parallelism:v,keyPrefix:m,expiresAt:s instanceof Date?Math.floor(s.getTime()/1e3):s,data:i};let E=null;if(void 0!==r){const e=f(A.nonce);E=await o(A,f(A.salt),new b(e,n).setCounter(r)),E.parameters&&Object.assign(A,E.parameters),A.keyPrefix=h(E.derivedKey.slice(0,p))}return u?async function(e,t,r,n,a){r&&a&&(t.keySignature=h(await g(e,r,a)));return t=d(t),{parameters:t,signature:h(await g(e,JSON.stringify(t),n))}}(c,A,E?.derivedKey,u,l):{parameters:d(A)}}async function v(e){const{challenge:t,concurrency:r=navigator.hardwareConcurrency,controller:n=new AbortController,createWorker:a,onOutOfMemory:o=e=>e>1?Math.floor(e/2):0,counterMode:i,timeout:s=9e4}=e,c=Math.min(16,Math.max(1,r)),l=[],u=()=>{for(const e of l)e.terminate()};for(let e=0;e(n.signal.addEventListener("abort",()=>{e.postMessage({type:"abort"})}),new Promise((n,a)=>{e.addEventListener("error",e=>{a(e)}),e.addEventListener("message",t=>{if(t.data){for(const t of l)t!==e&&t.postMessage({type:"abort"});if(t.data.error)return a(new Error(t.data.error))}n(t.data)}),e.postMessage({challenge:t,counterMode:i,counterStart:r,counterStep:c,timeout:s,type:"work"})}))))}catch(r){if(r instanceof Error&&!!r?.message?.includes("Out of memory")&&o){u();const r=o(c);if(r)return v({...e,challenge:t,controller:n,concurrency:r,createWorker:a})}throw r}finally{u()}return n.signal.aborted?null:h||null}async function A(e,t={}){let{concurrency:r=Math.max(1,Math.min(4,navigator.hardwareConcurrency)),createWorker:n,deriveKey:a=l}=t,o=null;try{o=JSON.parse(atob(e))}catch{throw new Error("Unable to parse obfuscated data.")}if(!o||"object"!=typeof o||!("parameters"in o)||!("cipher"in o))throw new Error("Invalid obfuscated data format.");const i=o.cipher;let s=null;if(!n&&"$altcha"in globalThis&&(n=globalThis.$altcha.algorithms.get(o.parameters.algorithm)),s=n?await v({challenge:o,concurrency:r,createWorker:n}):await async function(e){const{challenge:t,controller:r,counterMode:n="uint32",counterStart:a=0,counterStep:o=1,deriveKey:i,timeout:s=9e4}=e,{nonce:c,keyPrefix:l,salt:g}=t.parameters,d=f(c),w=f(g),p=l.length%2==0?f(l):null,S=new b(d,n),v=performance.now();let A=a,E=0,T="",x=v;for(;;){if(r?.signal.aborted||s&&E%10==0&&performance.now()-v>s)return null;const{derivedKey:e}=await i(t.parameters,w,S.setCounter(A));if(E%10==0&&performance.now()-x>200&&(await y(0),x=performance.now()),p?u(e,p):h(e).startsWith(l)){T=h(e);break}A+=o,E+=1}return{counter:A,derivedKey:T,time:m(v)}}({challenge:o,deriveKey:a}),!s)throw new Error("Unable to find solution.");const c=await crypto.subtle.importKey("raw",f(s.derivedKey),{name:"AES-GCM"},!1,["decrypt"]),g=await crypto.subtle.decrypt({name:"AES-GCM",iv:f(i.iv)},c,f(i.data));return(new TextDecoder).decode(g)}async function E(e,t={}){const{deriveKey:r=l}=t,n=t?.counterMin||20,a=t?.counterMax||200,{parameters:o}=await S({algorithm:"PBKDF2/SHA-256",cost:5e3,deriveKey:r,counter:Math.floor(Math.random()*(a-n+1))+n,keyPrefixLength:32,...t}),i=await crypto.subtle.importKey("raw",f(o.keyPrefix),{name:"AES-GCM"},!1,["encrypt"]),s=crypto.getRandomValues(new Uint8Array(12)),c=await crypto.subtle.encrypt({name:"AES-GCM",iv:s},i,(new TextEncoder).encode(e));return btoa(JSON.stringify({parameters:{...o,keyPrefix:o.keyPrefix.slice(0,o.keyLength||32)},cipher:{iv:h(s),data:h(c)}}))}s.register(class extends s{static deobfuscate=A;static obfuscate=E;elTrigger=null;activate(){this.elTrigger=this.host.querySelector("button"),this.elTrigger&&(this.elTrigger.addEventListener("click",this.onTriggerClick.bind(this)),this.host.configure({floatingAnchor:this.elTrigger}))}destroy(){}async onVerify(e){const{minDuration:t=500}=e,r=performance.now(),n=this.host.getAttribute("data-obfuscated");if(n){this.host.reset(p.VERIFYING);try{const e=await A(n);await this.#e(Math.max(0,t-(performance.now()-r))),this.#t(e)}catch(e){this.host.setState(p.ERROR,String(e))}finally{this.host.setState(p.VERIFIED)}return null}}onTriggerClick(e){e.preventDefault(),this.host.show(),this.host.verify().then(()=>{this.host.hide()})}#t(e){let t;if(e.match(/^(mailto|tel|sms|https?):/)){const[r]=e.slice(e.indexOf(":")+1).replace(/^\/\//,"").split("?");t=document.createElement("a"),t.href=e,t.innerText=r}else t=document.createTextNode(e);this.elTrigger&&t&&(this.elTrigger.after(t),this.elTrigger.parentElement?.removeChild(this.elTrigger))}async#e(e){await new Promise(t=>setTimeout(t,e))}}); diff --git a/frontend/node_modules/altcha/dist/plugins/obfuscation.plugin.umd.cjs b/frontend/node_modules/altcha/dist/plugins/obfuscation.plugin.umd.cjs new file mode 100644 index 0000000..73d382a --- /dev/null +++ b/frontend/node_modules/altcha/dist/plugins/obfuscation.plugin.umd.cjs @@ -0,0 +1,624 @@ +(function(factory) { + typeof define === "function" && define.amd ? define(factory) : factory(); +})((function() { + "use strict"; + const noop = () => { + }; + function safe_not_equal(a, b) { + return a != a ? b == b : a !== b || a !== null && typeof a === "object" || typeof a === "function"; + } + function subscribe_to_store(store2, run, invalidate) { + if (store2 == null) { + run(void 0); + return noop; + } + const unsub = untrack( + () => store2.subscribe( + run, + // @ts-expect-error + invalidate + ) + ); + return unsub.unsubscribe ? () => unsub.unsubscribe() : unsub; + } + const subscriber_queue = []; + function writable(value, start = noop) { + let stop = null; + const subscribers = /* @__PURE__ */ new Set(); + function set(new_value) { + if (safe_not_equal(value, new_value)) { + value = new_value; + if (stop) { + const run_queue = !subscriber_queue.length; + for (const subscriber of subscribers) { + subscriber[1](); + subscriber_queue.push(subscriber, value); + } + if (run_queue) { + for (let i = 0; i < subscriber_queue.length; i += 2) { + subscriber_queue[i][0](subscriber_queue[i + 1]); + } + subscriber_queue.length = 0; + } + } + } + } + function update(fn) { + set(fn( + /** @type {T} */ + value + )); + } + function subscribe(run, invalidate = noop) { + const subscriber = [run, invalidate]; + subscribers.add(subscriber); + if (subscribers.size === 1) { + stop = start(set, update) || noop; + } + run( + /** @type {T} */ + value + ); + return () => { + subscribers.delete(subscriber); + if (subscribers.size === 0 && stop) { + stop(); + stop = null; + } + }; + } + return { set, update, subscribe }; + } + function get(store2) { + let value; + subscribe_to_store(store2, (_) => value = _)(); + return value; + } + let untracking = false; + function untrack(fn) { + var previous_untracking = untracking; + try { + untracking = true; + return fn(); + } finally { + untracking = previous_untracking; + } + } + function store(defaultValue) { + const scope = { + get: (name) => { + return get(scope.store)[name]; + }, + set: (name, value) => { + if (typeof name === "string") { + Object.assign(get(scope.store), { + [name]: value + }); + } else { + Object.assign(get(scope.store), name); + } + scope.store.set(get(scope.store)); + }, + store: writable(defaultValue) + }; + return scope; + } + globalThis.$altcha = globalThis.$altcha || { + algorithms: /* @__PURE__ */ new Map(), + defaults: store({}), + i18n: store({}), + instances: /* @__PURE__ */ new Set(), + plugins: /* @__PURE__ */ new Set() + }; + class BasePlugin { + constructor(host) { + this.host = host; + } + host; + static register(pluginClass) { + if ("$altcha" in globalThis && !globalThis.$altcha.plugins.has(pluginClass)) { + globalThis.$altcha.plugins.add(pluginClass); + } + } + async onFetchChallenge(source) { + } + async onRequestServerVerification(payload, code) { + } + async onVerify(value) { + } + } + function getDigest(algorithm) { + switch (algorithm) { + case "PBKDF2/SHA-512": + return "SHA-512"; + case "PBKDF2/SHA-384": + return "SHA-384"; + case "PBKDF2/SHA-256": + default: + return "SHA-256"; + } + } + async function deriveKey(parameters, salt, password) { + const { algorithm, cost, keyLength = 32 } = parameters; + const passwordKey = await crypto.subtle.importKey( + "raw", + password, + { name: "PBKDF2" }, + false, + ["deriveKey"] + ); + const derivedKey = await crypto.subtle.deriveKey( + { + name: "PBKDF2", + salt, + iterations: cost, + hash: getDigest(algorithm) + }, + passwordKey, + { name: "AES-GCM", length: keyLength * 8 }, + true, + ["encrypt"] + ); + return { + derivedKey: new Uint8Array(await crypto.subtle.exportKey("raw", derivedKey)) + }; + } + function bufferStartsWith(buffer, prefix) { + if (prefix.length > buffer.length) { + return false; + } + for (let i = 0; i < prefix.length; i++) { + if (buffer[i] !== prefix[i]) { + return false; + } + } + return true; + } + function bufferToHex(buffer) { + return Array.from(new Uint8Array(buffer)).map((b) => b.toString(16).padStart(2, "0")).join(""); + } + function concatBuffers(a, b) { + const out = new Uint8Array(a.length + b.length); + out.set(a, 0); + out.set(b, a.length); + return out; + } + function hexToBuffer(hex) { + if (hex.length % 2 !== 0) { + throw new Error(`Hex string must have an even length. Got: ${hex}`); + } + const buffer = new ArrayBuffer(hex.length / 2); + const view = new DataView(buffer); + for (let i = 0; i < hex.length; i += 2) { + const byteString = hex.substring(i, i + 2); + const byteValue = parseInt(byteString, 16); + view.setUint8(i / 2, byteValue); + } + return new Uint8Array(buffer); + } + async function delay(ms) { + await new Promise((resolve) => setTimeout(resolve, ms)); + } + async function hmac(algorithm, data, keyStr) { + const key = await crypto.subtle.importKey( + "raw", + new TextEncoder().encode(keyStr), + { + name: "HMAC", + hash: { name: algorithm } + }, + false, + ["sign", "verify"] + ); + const signature = await crypto.subtle.sign( + "HMAC", + key, + typeof data === "string" ? new TextEncoder().encode(data) : data + ); + return new Uint8Array(signature); + } + function sortKeys(obj) { + if (typeof obj !== "object" || obj === null || Array.isArray(obj)) { + return obj; + } + return Object.keys(obj).sort().reduce((acc, key) => { + const value = obj[key]; + if (value !== void 0) { + acc[key] = sortKeys(value); + } + return acc; + }, {}); + } + function timeDuration(start) { + return Math.floor((performance.now() - start) * 10) / 10; + } + var HmacAlgorithm = /* @__PURE__ */ ((HmacAlgorithm2) => { + HmacAlgorithm2["SHA_256"] = "SHA-256"; + HmacAlgorithm2["SHA_384"] = "SHA-384"; + HmacAlgorithm2["SHA_512"] = "SHA-512"; + return HmacAlgorithm2; + })(HmacAlgorithm || {}); + var State = /* @__PURE__ */ ((State2) => { + State2["CODE"] = "code"; + State2["ERROR"] = "error"; + State2["VERIFIED"] = "verified"; + State2["VERIFYING"] = "verifying"; + State2["UNVERIFIED"] = "unverified"; + State2["EXPIRED"] = "expired"; + return State2; + })(State || {}); + class PasswordBuffer { + constructor(nonce, mode = "uint32") { + this.nonce = nonce; + this.mode = mode; + this.buffer = new Uint8Array(this.nonce.length + this.COUNTER_BYTES); + this.buffer.set(this.nonce, 0); + this.dataView = new DataView(this.buffer.buffer); + } + nonce; + mode; + COUNTER_BYTES = 4; + buffer; + dataView; + encoder = new TextEncoder(); + /** + * Appends the counter to the nonce buffer. + * In 'string' mode, encodes the counter as a UTF-8 string. + * In 'uint32' mode, writes the counter as a big-endian 32-bit integer. + */ + setCounter(n) { + if (this.mode === "string") { + return concatBuffers(this.nonce, this.encoder.encode(n.toString())); + } + this.dataView.setUint32(this.nonce.length, n, false); + return this.buffer; + } + } + async function createChallenge(options) { + const { + algorithm, + counter, + counterMode = "uint32", + cost, + deriveKey: deriveKey2, + data, + expiresAt, + hmacAlgorithm = HmacAlgorithm.SHA_256, + hmacKeySignatureSecret, + hmacSignatureSecret, + keyLength = 32, + keyPrefix = "00", + keyPrefixLength = keyLength / 2, + memoryCost, + parallelism + } = options; + const parameters = { + algorithm, + nonce: bufferToHex(crypto.getRandomValues(new Uint8Array(16))), + salt: bufferToHex(crypto.getRandomValues(new Uint8Array(16))), + cost, + keyLength, + memoryCost, + parallelism, + keyPrefix, + expiresAt: expiresAt instanceof Date ? Math.floor(expiresAt.getTime() / 1e3) : expiresAt, + data + }; + let deriveKeyResult = null; + if (counter !== void 0) { + const nonceBuf = hexToBuffer(parameters.nonce); + deriveKeyResult = await deriveKey2( + parameters, + hexToBuffer(parameters.salt), + new PasswordBuffer(nonceBuf, counterMode).setCounter(counter) + ); + if (deriveKeyResult.parameters) { + Object.assign(parameters, deriveKeyResult.parameters); + } + parameters.keyPrefix = bufferToHex(deriveKeyResult.derivedKey.slice(0, keyPrefixLength)); + } + if (!hmacSignatureSecret) { + return { + parameters: sortKeys(parameters) + }; + } + return signChallenge( + hmacAlgorithm, + parameters, + deriveKeyResult?.derivedKey, + hmacSignatureSecret, + hmacKeySignatureSecret + ); + } + async function solveChallenge(options) { + const { + challenge, + controller, + counterMode = "uint32", + counterStart = 0, + counterStep = 1, + deriveKey: deriveKey2, + timeout = 9e4 + } = options; + const { nonce, keyPrefix, salt } = challenge.parameters; + const nonceBuf = hexToBuffer(nonce); + const saltBuf = hexToBuffer(salt); + const keyPrefixBuf = keyPrefix.length % 2 === 0 ? hexToBuffer(keyPrefix) : null; + const password = new PasswordBuffer(nonceBuf, counterMode); + const start = performance.now(); + let counter = counterStart; + let iterations = 0; + let derivedKeyHex = ""; + let lastYield = start; + while (true) { + if (controller?.signal.aborted || timeout && iterations % 10 === 0 && performance.now() - start > timeout) { + return null; + } + const { derivedKey } = await deriveKey2( + challenge.parameters, + saltBuf, + password.setCounter(counter) + ); + if (iterations % 10 === 0 && performance.now() - lastYield > 200) { + await delay(0); + lastYield = performance.now(); + } + if (keyPrefixBuf ? bufferStartsWith(derivedKey, keyPrefixBuf) : bufferToHex(derivedKey).startsWith(keyPrefix)) { + derivedKeyHex = bufferToHex(derivedKey); + break; + } + counter = counter + counterStep; + iterations = iterations + 1; + } + return { + counter, + derivedKey: derivedKeyHex, + time: timeDuration(start) + }; + } + async function solveChallengeWorkers(options) { + const { + challenge, + concurrency = navigator.hardwareConcurrency, + controller = new AbortController(), + createWorker, + onOutOfMemory = (c) => c > 1 ? Math.floor(c / 2) : 0, + counterMode, + timeout = 9e4 + } = options; + const workersConcurrency = Math.min(16, Math.max(1, concurrency)); + const workersInstances = []; + const terminate = () => { + for (const worker of workersInstances) { + worker.terminate(); + } + }; + for (let i = 0; i < workersConcurrency; i++) { + workersInstances.push(await createWorker(challenge.parameters.algorithm)); + } + let solution = null; + try { + solution = await Promise.race( + workersInstances.map((worker, i) => { + controller.signal.addEventListener("abort", () => { + worker.postMessage({ type: "abort" }); + }); + return new Promise((resolve, reject) => { + worker.addEventListener("error", (err) => { + reject(err); + }); + worker.addEventListener("message", (message) => { + if (message.data) { + for (const w of workersInstances) { + if (w !== worker) { + w.postMessage({ type: "abort" }); + } + } + if (message.data.error) { + return reject(new Error(message.data.error)); + } + } + resolve(message.data); + }); + worker.postMessage({ + challenge, + counterMode, + counterStart: i, + counterStep: workersConcurrency, + timeout, + type: "work" + }); + }); + }) + ); + } catch (err) { + const isOOM = err instanceof Error && !!err?.message?.includes("Out of memory"); + if (isOOM) { + if (onOutOfMemory) { + terminate(); + const retryConcurrency = onOutOfMemory(workersConcurrency); + if (retryConcurrency) { + return solveChallengeWorkers({ + ...options, + challenge, + controller, + concurrency: retryConcurrency, + createWorker + }); + } + } + } + throw err; + } finally { + terminate(); + } + if (controller.signal.aborted) { + return null; + } + return solution || null; + } + async function signChallenge(algorithm, parameters, derivedKey, hmacSignatureSecret, hmacKeySignatureSecret) { + if (derivedKey && hmacKeySignatureSecret) { + parameters.keySignature = bufferToHex( + await hmac(algorithm, derivedKey, hmacKeySignatureSecret) + ); + } + parameters = sortKeys(parameters); + return { + parameters, + signature: bufferToHex(await hmac(algorithm, JSON.stringify(parameters), hmacSignatureSecret)) + }; + } + async function deobfuscate(obfuscatedData, options = {}) { + let { + concurrency = Math.max(1, Math.min(4, navigator.hardwareConcurrency)), + createWorker, + deriveKey: deriveKey$1 = deriveKey + } = options; + let challenge = null; + try { + challenge = JSON.parse(atob(obfuscatedData)); + } catch { + throw new Error(`Unable to parse obfuscated data.`); + } + if (!challenge || typeof challenge !== "object" || !("parameters" in challenge) || !("cipher" in challenge)) { + throw new Error(`Invalid obfuscated data format.`); + } + const cipher = challenge.cipher; + let solution = null; + if (!createWorker && "$altcha" in globalThis) { + createWorker = globalThis.$altcha.algorithms.get(challenge.parameters.algorithm); + } + if (createWorker) { + solution = await solveChallengeWorkers({ + challenge, + concurrency, + createWorker + }); + } else { + solution = await solveChallenge({ + challenge, + deriveKey: deriveKey$1 + }); + } + if (!solution) { + throw new Error("Unable to find solution."); + } + const key = await crypto.subtle.importKey( + "raw", + hexToBuffer(solution.derivedKey), + { name: "AES-GCM" }, + false, + ["decrypt"] + ); + const result = await crypto.subtle.decrypt( + { + name: "AES-GCM", + iv: hexToBuffer(cipher.iv) + }, + key, + hexToBuffer(cipher.data) + ); + return new TextDecoder().decode(result); + } + async function obfuscate(str, options = {}) { + const { deriveKey: deriveKey$1 = deriveKey } = options; + const counterMin = options?.counterMin || 20; + const counterMax = options?.counterMax || 200; + const { parameters } = await createChallenge({ + algorithm: "PBKDF2/SHA-256", + cost: 5e3, + deriveKey: deriveKey$1, + counter: Math.floor(Math.random() * (counterMax - counterMin + 1)) + counterMin, + keyPrefixLength: 32, + ...options + }); + const key = await crypto.subtle.importKey( + "raw", + hexToBuffer(parameters.keyPrefix), + { name: "AES-GCM" }, + false, + ["encrypt"] + ); + const iv = crypto.getRandomValues(new Uint8Array(12)); + const data = await crypto.subtle.encrypt( + { name: "AES-GCM", iv }, + key, + new TextEncoder().encode(str) + ); + return btoa( + JSON.stringify({ + parameters: { + ...parameters, + // Return only half the derived key + keyPrefix: parameters.keyPrefix.slice(0, parameters.keyLength || 32) + }, + cipher: { + iv: bufferToHex(iv), + data: bufferToHex(data) + } + }) + ); + } + class ObfuscationPlugin extends BasePlugin { + static deobfuscate = deobfuscate; + static obfuscate = obfuscate; + elTrigger = null; + activate() { + this.elTrigger = this.host.querySelector("button"); + if (this.elTrigger) { + this.elTrigger.addEventListener("click", this.onTriggerClick.bind(this)); + this.host.configure({ + floatingAnchor: this.elTrigger + }); + } + } + destroy() { + } + async onVerify(options) { + const { minDuration = 500 } = options; + const start = performance.now(); + const obfuscated = this.host.getAttribute("data-obfuscated"); + if (obfuscated) { + this.host.reset(State.VERIFYING); + try { + const text = await deobfuscate(obfuscated); + await this.#wait(Math.max(0, minDuration - (performance.now() - start))); + this.#renderClearText(text); + } catch (err) { + this.host.setState(State.ERROR, String(err)); + } finally { + this.host.setState(State.VERIFIED); + } + return null; + } + } + onTriggerClick(ev) { + ev.preventDefault(); + this.host.show(); + this.host.verify().then(() => { + this.host.hide(); + }); + } + #renderClearText(clearText) { + const match = clearText.match(/^(mailto|tel|sms|https?):/); + let el; + if (match) { + const [contact] = clearText.slice(clearText.indexOf(":") + 1).replace(/^\/\//, "").split("?"); + el = document.createElement("a"); + el.href = clearText; + el.innerText = contact; + } else { + el = document.createTextNode(clearText); + } + if (this.elTrigger && el) { + this.elTrigger.after(el); + this.elTrigger.parentElement?.removeChild(this.elTrigger); + } + } + async #wait(ms) { + await new Promise((resolve) => setTimeout(resolve, ms)); + } + } + BasePlugin.register(ObfuscationPlugin); +})); diff --git a/frontend/node_modules/altcha/dist/plugins/obfuscation.plugin.umd.min.cjs b/frontend/node_modules/altcha/dist/plugins/obfuscation.plugin.umd.min.cjs new file mode 100644 index 0000000..f1294d2 --- /dev/null +++ b/frontend/node_modules/altcha/dist/plugins/obfuscation.plugin.umd.min.cjs @@ -0,0 +1 @@ +!function(e){"function"==typeof define&&define.amd?define(e):e()}(function(){"use strict";const e=()=>{};function t(t,r,n){if(null==t)return r(void 0),e;const a=function(e){var t=o;try{return o=!0,e()}finally{o=t}}(()=>t.subscribe(r,n));return a.unsubscribe?()=>a.unsubscribe():a}const r=[];function n(t,n=e){let a=null;const o=new Set;function i(e){if(i=e,((n=t)!=n?i==i:n!==i||null!==n&&"object"==typeof n||"function"==typeof n)&&(t=e,a)){const e=!r.length;for(const e of o)e[1](),r.push(e,t);if(e){for(let e=0;e{o.delete(l),0===o.size&&a&&(a(),a=null)}}}}function a(e){let r;return t(e,e=>r=e)(),r}let o=!1;function i(e){const t={get:e=>a(t.store)[e],set:(e,r)=>{"string"==typeof e?Object.assign(a(t.store),{[e]:r}):Object.assign(a(t.store),e),t.store.set(a(t.store))},store:n(e)};return t}globalThis.$altcha=globalThis.$altcha||{algorithms:new Map,defaults:i({}),i18n:i({}),instances:new Set,plugins:new Set};class s{constructor(e){this.host=e}host;static register(e){"$altcha"in globalThis&&!globalThis.$altcha.plugins.has(e)&&globalThis.$altcha.plugins.add(e)}async onFetchChallenge(e){}async onRequestServerVerification(e,t){}async onVerify(e){}}function c(e){switch(e){case"PBKDF2/SHA-512":return"SHA-512";case"PBKDF2/SHA-384":return"SHA-384";default:return"SHA-256"}}async function l(e,t,r){const{algorithm:n,cost:a,keyLength:o=32}=e,i=await crypto.subtle.importKey("raw",r,{name:"PBKDF2"},!1,["deriveKey"]),s=await crypto.subtle.deriveKey({name:"PBKDF2",salt:t,iterations:a,hash:c(n)},i,{name:"AES-GCM",length:8*o},!0,["encrypt"]);return{derivedKey:new Uint8Array(await crypto.subtle.exportKey("raw",s))}}function u(e,t){if(t.length>e.length)return!1;for(let r=0;re.toString(16).padStart(2,"0")).join("")}function f(e){if(e.length%2!=0)throw new Error(`Hex string must have an even length. Got: ${e}`);const t=new ArrayBuffer(e.length/2),r=new DataView(t);for(let t=0;tsetTimeout(t,e))}async function g(e,t,r){const n=await crypto.subtle.importKey("raw",(new TextEncoder).encode(r),{name:"HMAC",hash:{name:e}},!1,["sign","verify"]),a=await crypto.subtle.sign("HMAC",n,"string"==typeof t?(new TextEncoder).encode(t):t);return new Uint8Array(a)}function d(e){return"object"!=typeof e||null===e||Array.isArray(e)?e:Object.keys(e).sort().reduce((t,r)=>{const n=e[r];return void 0!==n&&(t[r]=d(n)),t},{})}function m(e){return Math.floor(10*(performance.now()-e))/10}var w=(e=>(e.SHA_256="SHA-256",e.SHA_384="SHA-384",e.SHA_512="SHA-512",e))(w||{}),p=(e=>(e.CODE="code",e.ERROR="error",e.VERIFIED="verified",e.VERIFYING="verifying",e.UNVERIFIED="unverified",e.EXPIRED="expired",e))(p||{});class b{constructor(e,t="uint32"){this.nonce=e,this.mode=t,this.buffer=new Uint8Array(this.nonce.length+this.COUNTER_BYTES),this.buffer.set(this.nonce,0),this.dataView=new DataView(this.buffer.buffer)}nonce;mode;COUNTER_BYTES=4;buffer;dataView;encoder=new TextEncoder;setCounter(e){return"string"===this.mode?function(e,t){const r=new Uint8Array(e.length+t.length);return r.set(e,0),r.set(t,e.length),r}(this.nonce,this.encoder.encode(e.toString())):(this.dataView.setUint32(this.nonce.length,e,!1),this.buffer)}}async function S(e){const{algorithm:t,counter:r,counterMode:n="uint32",cost:a,deriveKey:o,data:i,expiresAt:s,hmacAlgorithm:c=w.SHA_256,hmacKeySignatureSecret:l,hmacSignatureSecret:u,keyLength:y=32,keyPrefix:m="00",keyPrefixLength:p=y/2,memoryCost:S,parallelism:v}=e,A={algorithm:t,nonce:h(crypto.getRandomValues(new Uint8Array(16))),salt:h(crypto.getRandomValues(new Uint8Array(16))),cost:a,keyLength:y,memoryCost:S,parallelism:v,keyPrefix:m,expiresAt:s instanceof Date?Math.floor(s.getTime()/1e3):s,data:i};let E=null;if(void 0!==r){const e=f(A.nonce);E=await o(A,f(A.salt),new b(e,n).setCounter(r)),E.parameters&&Object.assign(A,E.parameters),A.keyPrefix=h(E.derivedKey.slice(0,p))}return u?async function(e,t,r,n,a){r&&a&&(t.keySignature=h(await g(e,r,a)));return t=d(t),{parameters:t,signature:h(await g(e,JSON.stringify(t),n))}}(c,A,E?.derivedKey,u,l):{parameters:d(A)}}async function v(e){const{challenge:t,concurrency:r=navigator.hardwareConcurrency,controller:n=new AbortController,createWorker:a,onOutOfMemory:o=e=>e>1?Math.floor(e/2):0,counterMode:i,timeout:s=9e4}=e,c=Math.min(16,Math.max(1,r)),l=[],u=()=>{for(const e of l)e.terminate()};for(let e=0;e(n.signal.addEventListener("abort",()=>{e.postMessage({type:"abort"})}),new Promise((n,a)=>{e.addEventListener("error",e=>{a(e)}),e.addEventListener("message",t=>{if(t.data){for(const t of l)t!==e&&t.postMessage({type:"abort"});if(t.data.error)return a(new Error(t.data.error))}n(t.data)}),e.postMessage({challenge:t,counterMode:i,counterStart:r,counterStep:c,timeout:s,type:"work"})}))))}catch(r){if(r instanceof Error&&!!r?.message?.includes("Out of memory")&&o){u();const r=o(c);if(r)return v({...e,challenge:t,controller:n,concurrency:r,createWorker:a})}throw r}finally{u()}return n.signal.aborted?null:h||null}async function A(e,t={}){let{concurrency:r=Math.max(1,Math.min(4,navigator.hardwareConcurrency)),createWorker:n,deriveKey:a=l}=t,o=null;try{o=JSON.parse(atob(e))}catch{throw new Error("Unable to parse obfuscated data.")}if(!o||"object"!=typeof o||!("parameters"in o)||!("cipher"in o))throw new Error("Invalid obfuscated data format.");const i=o.cipher;let s=null;if(!n&&"$altcha"in globalThis&&(n=globalThis.$altcha.algorithms.get(o.parameters.algorithm)),s=n?await v({challenge:o,concurrency:r,createWorker:n}):await async function(e){const{challenge:t,controller:r,counterMode:n="uint32",counterStart:a=0,counterStep:o=1,deriveKey:i,timeout:s=9e4}=e,{nonce:c,keyPrefix:l,salt:g}=t.parameters,d=f(c),w=f(g),p=l.length%2==0?f(l):null,S=new b(d,n),v=performance.now();let A=a,E=0,T="",x=v;for(;;){if(r?.signal.aborted||s&&E%10==0&&performance.now()-v>s)return null;const{derivedKey:e}=await i(t.parameters,w,S.setCounter(A));if(E%10==0&&performance.now()-x>200&&(await y(0),x=performance.now()),p?u(e,p):h(e).startsWith(l)){T=h(e);break}A+=o,E+=1}return{counter:A,derivedKey:T,time:m(v)}}({challenge:o,deriveKey:a}),!s)throw new Error("Unable to find solution.");const c=await crypto.subtle.importKey("raw",f(s.derivedKey),{name:"AES-GCM"},!1,["decrypt"]),g=await crypto.subtle.decrypt({name:"AES-GCM",iv:f(i.iv)},c,f(i.data));return(new TextDecoder).decode(g)}async function E(e,t={}){const{deriveKey:r=l}=t,n=t?.counterMin||20,a=t?.counterMax||200,{parameters:o}=await S({algorithm:"PBKDF2/SHA-256",cost:5e3,deriveKey:r,counter:Math.floor(Math.random()*(a-n+1))+n,keyPrefixLength:32,...t}),i=await crypto.subtle.importKey("raw",f(o.keyPrefix),{name:"AES-GCM"},!1,["encrypt"]),s=crypto.getRandomValues(new Uint8Array(12)),c=await crypto.subtle.encrypt({name:"AES-GCM",iv:s},i,(new TextEncoder).encode(e));return btoa(JSON.stringify({parameters:{...o,keyPrefix:o.keyPrefix.slice(0,o.keyLength||32)},cipher:{iv:h(s),data:h(c)}}))}s.register(class extends s{static deobfuscate=A;static obfuscate=E;elTrigger=null;activate(){this.elTrigger=this.host.querySelector("button"),this.elTrigger&&(this.elTrigger.addEventListener("click",this.onTriggerClick.bind(this)),this.host.configure({floatingAnchor:this.elTrigger}))}destroy(){}async onVerify(e){const{minDuration:t=500}=e,r=performance.now(),n=this.host.getAttribute("data-obfuscated");if(n){this.host.reset(p.VERIFYING);try{const e=await A(n);await this.#e(Math.max(0,t-(performance.now()-r))),this.#t(e)}catch(e){this.host.setState(p.ERROR,String(e))}finally{this.host.setState(p.VERIFIED)}return null}}onTriggerClick(e){e.preventDefault(),this.host.show(),this.host.verify().then(()=>{this.host.hide()})}#t(e){let t;if(e.match(/^(mailto|tel|sms|https?):/)){const[r]=e.slice(e.indexOf(":")+1).replace(/^\/\//,"").split("?");t=document.createElement("a"),t.href=e,t.innerText=r}else t=document.createTextNode(e);this.elTrigger&&t&&(this.elTrigger.after(t),this.elTrigger.parentElement?.removeChild(this.elTrigger))}async#e(e){await new Promise(t=>setTimeout(t,e))}})}); diff --git a/frontend/node_modules/altcha/dist/themes/aqua.css b/frontend/node_modules/altcha/dist/themes/aqua.css new file mode 100644 index 0000000..12c4174 --- /dev/null +++ b/frontend/node_modules/altcha/dist/themes/aqua.css @@ -0,0 +1,19 @@ +[data-altcha-theme='aqua'], +altcha-widget[theme='aqua'] { + --altcha-checkbox-border-width: 1.5px; + --altcha-color-base: oklch(36.993% 0.14552 265.614); + --altcha-color-base-content: oklch(96.183% 0.0235 227.909); + --altcha-color-neutral: oklch(46.768% 0.15756 266.404); + --altcha-color-neutral-content: var(--altcha-color-base-content); + --altcha-color-primary: oklch(60.683% 0.10883 309.763); + --altcha-color-primary-content: oklch(96.014% 0.0162 293.609); + --altcha-border-color: light-dark(oklch(27.079% 0.14584 265.379), oklch(46.768% 0.15756 266.404)); + --altcha-input-background-color: light-dark( + oklch(100% 0.00011 271.152), + oklch(25.197% 0.00003 271.152) + ); + --altcha-input-color: light-dark(oklch(27.079% 0.14584 265.379), oklch(96.014% 0.0162 293.609)); + --altcha-switch-background-color: var(--altcha-input-background-color); + --altcha-checkbox-border-color: var(--altcha-color-neutral); + --altcha-spinner-color: var(--altcha-color-base-content); +} diff --git a/frontend/node_modules/altcha/dist/themes/aqua.min.css b/frontend/node_modules/altcha/dist/themes/aqua.min.css new file mode 100644 index 0000000..d81474e --- /dev/null +++ b/frontend/node_modules/altcha/dist/themes/aqua.min.css @@ -0,0 +1 @@ +[data-altcha-theme=aqua],altcha-widget[theme=aqua]{--altcha-checkbox-border-width:1.5px;--altcha-color-base:oklch(36.993% 0.14552 265.614);--altcha-color-base-content:oklch(96.183% 0.0235 227.909);--altcha-color-neutral:oklch(46.768% 0.15756 266.404);--altcha-color-neutral-content:var(--altcha-color-base-content);--altcha-color-primary:oklch(60.683% 0.10883 309.763);--altcha-color-primary-content:oklch(96.014% 0.0162 293.609);--altcha-border-color:light-dark(oklch(27.079% 0.14584 265.379),oklch(46.768% 0.15756 266.404));--altcha-input-background-color:light-dark(oklch(100% 0.00011 271.152),oklch(25.197% 0.00003 271.152));--altcha-input-color:light-dark(oklch(27.079% 0.14584 265.379),oklch(96.014% 0.0162 293.609));--altcha-switch-background-color:var(--altcha-input-background-color);--altcha-checkbox-border-color:var(--altcha-color-neutral);--altcha-spinner-color:var(--altcha-color-base-content)} \ No newline at end of file diff --git a/frontend/node_modules/altcha/dist/themes/business.css b/frontend/node_modules/altcha/dist/themes/business.css new file mode 100644 index 0000000..9c17e33 --- /dev/null +++ b/frontend/node_modules/altcha/dist/themes/business.css @@ -0,0 +1,15 @@ +[data-altcha-theme='business'], +altcha-widget[theme='business'] { + --altcha-border-radius: 6px; + --altcha-border-width: 0; + --altcha-checkbox-border-width: 1.5px; + --altcha-color-base: light-dark(oklch(95.099% 0.00637 255.746), oklch(32.438% 0.02298 264.201)); + --altcha-color-base-content: light-dark( + oklch(32.438% 0.02298 264.201), + oklch(95.099% 0.00637 255.746) + ); + --altcha-input-background-color: light-dark( + oklch(100% 0.00011 271.152), + oklch(25.197% 0.00003 271.152) + ); +} diff --git a/frontend/node_modules/altcha/dist/themes/business.min.css b/frontend/node_modules/altcha/dist/themes/business.min.css new file mode 100644 index 0000000..f108f3e --- /dev/null +++ b/frontend/node_modules/altcha/dist/themes/business.min.css @@ -0,0 +1 @@ +[data-altcha-theme=business],altcha-widget[theme=business]{--altcha-border-radius:6px;--altcha-border-width:0;--altcha-checkbox-border-width:1.5px;--altcha-color-base:light-dark(oklch(95.099% 0.00637 255.746),oklch(32.438% 0.02298 264.201));--altcha-color-base-content:light-dark(oklch(32.438% 0.02298 264.201),oklch(95.099% 0.00637 255.746));--altcha-input-background-color:light-dark(oklch(100% 0.00011 271.152),oklch(25.197% 0.00003 271.152))} \ No newline at end of file diff --git a/frontend/node_modules/altcha/dist/themes/caramel.css b/frontend/node_modules/altcha/dist/themes/caramel.css new file mode 100644 index 0000000..94b909a --- /dev/null +++ b/frontend/node_modules/altcha/dist/themes/caramel.css @@ -0,0 +1,19 @@ +[data-altcha-theme='caramel'], +altcha-widget[theme='caramel'] { + --altcha-border-width: 2px; + --altcha-border-radius: 12px; + --altcha-border-color: var(--altcha-color-base-content); + --altcha-color-base: light-dark(oklch(98.156% 0.01623 79.28), oklch(32.376% 0.03463 80.678)); + --altcha-color-base-content: light-dark( + oklch(39.904% 0.12205 38.479), + oklch(85.594% 0.05829 42.379) + ); + --altcha-checkbox-border-color: var(--altcha-color-base-content); + --altcha-checkbox-border-width: var(--altcha-border-width); + --altcha-input-background-color: light-dark( + oklch(100% 0.00011 271.152), + oklch(25.197% 0.00003 271.152) + ); + --altcha-checkbox-border-radius: 50%; + --altcha-popover-color: var(--altcha-border-color); +} diff --git a/frontend/node_modules/altcha/dist/themes/caramel.min.css b/frontend/node_modules/altcha/dist/themes/caramel.min.css new file mode 100644 index 0000000..f352447 --- /dev/null +++ b/frontend/node_modules/altcha/dist/themes/caramel.min.css @@ -0,0 +1 @@ +[data-altcha-theme=caramel],altcha-widget[theme=caramel]{--altcha-border-width:2px;--altcha-border-radius:12px;--altcha-border-color:var(--altcha-color-base-content);--altcha-color-base:light-dark(oklch(98.156% 0.01623 79.28),oklch(32.376% 0.03463 80.678));--altcha-color-base-content:light-dark(oklch(39.904% 0.12205 38.479),oklch(85.594% 0.05829 42.379));--altcha-checkbox-border-color:var(--altcha-color-base-content);--altcha-checkbox-border-width:var(--altcha-border-width);--altcha-input-background-color:light-dark(oklch(100% 0.00011 271.152),oklch(25.197% 0.00003 271.152));--altcha-checkbox-border-radius:50%;--altcha-popover-color:var(--altcha-border-color)} \ No newline at end of file diff --git a/frontend/node_modules/altcha/dist/themes/cupcake.css b/frontend/node_modules/altcha/dist/themes/cupcake.css new file mode 100644 index 0000000..9322498 --- /dev/null +++ b/frontend/node_modules/altcha/dist/themes/cupcake.css @@ -0,0 +1,16 @@ +[data-altcha-theme='cupcake'], +altcha-widget[theme='cupcake'] { + --altcha-border-width: 2px; + --altcha-border-radius: 12px; + --altcha-color-base: light-dark(oklch(97.816% 0.00342 38.025), oklch(21.06% 0.00803 17.645)); + --altcha-checkbox-border-color: light-dark( + oklch(82.809% 0.10217 344.861), + oklch(62.147% 0.1135 345.959) + ); + --altcha-checkbox-border-width: var(--altcha-border-width); + --altcha-input-background-color: light-dark( + oklch(100% 0.00011 271.152), + oklch(25.197% 0.00003 271.152) + ); + --altcha-switch-background-color: var(--altcha-checkbox-border-color); +} diff --git a/frontend/node_modules/altcha/dist/themes/cupcake.min.css b/frontend/node_modules/altcha/dist/themes/cupcake.min.css new file mode 100644 index 0000000..7e17fea --- /dev/null +++ b/frontend/node_modules/altcha/dist/themes/cupcake.min.css @@ -0,0 +1 @@ +[data-altcha-theme=cupcake],altcha-widget[theme=cupcake]{--altcha-border-width:2px;--altcha-border-radius:12px;--altcha-color-base:light-dark(oklch(97.816% 0.00342 38.025),oklch(21.06% 0.00803 17.645));--altcha-checkbox-border-color:light-dark(oklch(82.809% 0.10217 344.861),oklch(62.147% 0.1135 345.959));--altcha-checkbox-border-width:var(--altcha-border-width);--altcha-input-background-color:light-dark(oklch(100% 0.00011 271.152),oklch(25.197% 0.00003 271.152));--altcha-switch-background-color:var(--altcha-checkbox-border-color)} \ No newline at end of file diff --git a/frontend/node_modules/altcha/dist/themes/cyberpunk.css b/frontend/node_modules/altcha/dist/themes/cyberpunk.css new file mode 100644 index 0000000..492b1c7 --- /dev/null +++ b/frontend/node_modules/altcha/dist/themes/cyberpunk.css @@ -0,0 +1,24 @@ +[data-altcha-theme='cyberpunk'], +altcha-widget[theme='cyberpunk'] { + --altcha-border-color: var(--altcha-color-neutral); + --altcha-border-width: 2px; + --altcha-border-radius: 12px; + --altcha-color-base: oklch(94.343% 0.17917 104.914); + --altcha-color-base-content: oklch(23.042% 0.0647 269.34); + --altcha-color-neutral: var(--altcha-color-base-content); + --altcha-color-neutral-content: var(--altcha-color-base-content); + --altcha-color-primary: oklch(69.603% 0.26545 340.482); + --altcha-color-success: oklch(90.486% 0.15061 195.382); + --altcha-color-success-content: var(--altcha-color-base-content); + --altcha-checkbox-border-color: var(--altcha-color-neutral); + --altcha-checkbox-border-width: var(--altcha-border-width); + --altcha-input-background-color: light-dark( + oklch(86.286% 0.16763 104.933), + oklch(86.286% 0.16763 104.933) + ); + --altcha-input-color: var(--altcha-color-base-content); + --altcha-switch-background-color: var(--altcha-input-background-color); + --altcha-switch-toggle-color: var(--altcha-color-neutral); + --altcha-popover-color: var(--altcha-border-color); + --altcha-spinner-color: var(--altcha-color-base-content); +} diff --git a/frontend/node_modules/altcha/dist/themes/cyberpunk.min.css b/frontend/node_modules/altcha/dist/themes/cyberpunk.min.css new file mode 100644 index 0000000..def51df --- /dev/null +++ b/frontend/node_modules/altcha/dist/themes/cyberpunk.min.css @@ -0,0 +1 @@ +[data-altcha-theme=cyberpunk],altcha-widget[theme=cyberpunk]{--altcha-border-color:var(--altcha-color-neutral);--altcha-border-width:2px;--altcha-border-radius:12px;--altcha-color-base:oklch(94.343% 0.17917 104.914);--altcha-color-base-content:oklch(23.042% 0.0647 269.34);--altcha-color-neutral:var(--altcha-color-base-content);--altcha-color-neutral-content:var(--altcha-color-base-content);--altcha-color-primary:oklch(69.603% 0.26545 340.482);--altcha-color-success:oklch(90.486% 0.15061 195.382);--altcha-color-success-content:var(--altcha-color-base-content);--altcha-checkbox-border-color:var(--altcha-color-neutral);--altcha-checkbox-border-width:var(--altcha-border-width);--altcha-input-background-color:light-dark(oklch(86.286% 0.16763 104.933),oklch(86.286% 0.16763 104.933));--altcha-input-color:var(--altcha-color-base-content);--altcha-switch-background-color:var(--altcha-input-background-color);--altcha-switch-toggle-color:var(--altcha-color-neutral);--altcha-popover-color:var(--altcha-border-color);--altcha-spinner-color:var(--altcha-color-base-content)} \ No newline at end of file diff --git a/frontend/node_modules/altcha/dist/themes/lime.css b/frontend/node_modules/altcha/dist/themes/lime.css new file mode 100644 index 0000000..7410744 --- /dev/null +++ b/frontend/node_modules/altcha/dist/themes/lime.css @@ -0,0 +1,14 @@ +[data-altcha-theme='lime'], +altcha-widget[theme='lime'] { + --altcha-color-base: oklch(98.65% 0.019 123.003); + --altcha-color-base-content: oklch(27.44% 0.01383 131.799); + --altcha-color-primary: oklch(77.94% 0.17114 110.922); + --altcha-color-primary-content: var(--altcha-color-base-content); + --altcha-color-primary-content: var(--altcha-color-base-content); + --altcha-color-neutral: oklch(76.243% 0.05879 130.835); + --altcha-color-neutral-content: var(--altcha-color-base-content); + --altcha-border-color: light-dark(oklch(76.243% 0.05879 130.835), oklch(98.884% 0.01122 128.94)); + --altcha-input-background-color: oklch(100% 0.00011 271.152); + --altcha-input-color: var(--altcha-color-base-content); + --altcha-spinner-color: var(--altcha-color-base-content); +} diff --git a/frontend/node_modules/altcha/dist/themes/lime.min.css b/frontend/node_modules/altcha/dist/themes/lime.min.css new file mode 100644 index 0000000..f4be40a --- /dev/null +++ b/frontend/node_modules/altcha/dist/themes/lime.min.css @@ -0,0 +1 @@ +[data-altcha-theme=lime],altcha-widget[theme=lime]{--altcha-color-base:oklch(98.65% 0.019 123.003);--altcha-color-base-content:oklch(27.44% 0.01383 131.799);--altcha-color-primary:oklch(77.94% 0.17114 110.922);--altcha-color-primary-content:var(--altcha-color-base-content);--altcha-color-neutral:oklch(76.243% 0.05879 130.835);--altcha-color-neutral-content:var(--altcha-color-base-content);--altcha-border-color:light-dark(oklch(76.243% 0.05879 130.835),oklch(98.884% 0.01122 128.94));--altcha-input-background-color:oklch(100% 0.00011 271.152);--altcha-input-color:var(--altcha-color-base-content);--altcha-spinner-color:var(--altcha-color-base-content)} \ No newline at end of file diff --git a/frontend/node_modules/altcha/dist/themes/wireframe.css b/frontend/node_modules/altcha/dist/themes/wireframe.css new file mode 100644 index 0000000..2c59e82 --- /dev/null +++ b/frontend/node_modules/altcha/dist/themes/wireframe.css @@ -0,0 +1,17 @@ +[data-altcha-theme='wireframe'], +altcha-widget[theme='wireframe'] { + --altcha-border-width: 1px; + --altcha-border-radius: 0; + --altcha-checkbox-border-radius: 0; + --altcha-input-border-radius: 0; + --altcha-color-neutral: light-dark(oklch(25.197% 0.00003 271.152), oklch(37.346% 0.00272 16.419)); + --altcha-color-neutral-content: light-dark( + oklch(73.802% 0.00008 271.152), + oklch(68.622% 0.00008 271.152) + ); + --altcha-switch-border-radius: 4px; + --altcha-switch-toggle-border-radius: 2px; + --altcha-switch-background-color: var(--altcha-color-neutral); + --altcha-switch-toggle-color: var(--altcha-color-neutral-content); + --altcha-spinner-color: var(--altcha-color-neutral-content); +} diff --git a/frontend/node_modules/altcha/dist/themes/wireframe.min.css b/frontend/node_modules/altcha/dist/themes/wireframe.min.css new file mode 100644 index 0000000..811140e --- /dev/null +++ b/frontend/node_modules/altcha/dist/themes/wireframe.min.css @@ -0,0 +1 @@ +[data-altcha-theme=wireframe],altcha-widget[theme=wireframe]{--altcha-border-width:1px;--altcha-border-radius:0;--altcha-checkbox-border-radius:0;--altcha-input-border-radius:0;--altcha-color-neutral:light-dark(oklch(25.197% 0.00003 271.152),oklch(37.346% 0.00272 16.419));--altcha-color-neutral-content:light-dark(oklch(73.802% 0.00008 271.152),oklch(68.622% 0.00008 271.152));--altcha-switch-border-radius:4px;--altcha-switch-toggle-border-radius:2px;--altcha-switch-background-color:var(--altcha-color-neutral);--altcha-switch-toggle-color:var(--altcha-color-neutral-content);--altcha-spinner-color:var(--altcha-color-neutral-content)} \ No newline at end of file diff --git a/frontend/node_modules/altcha/dist/types/generic.d.ts b/frontend/node_modules/altcha/dist/types/generic.d.ts new file mode 100644 index 0000000..f572d6d --- /dev/null +++ b/frontend/node_modules/altcha/dist/types/generic.d.ts @@ -0,0 +1,28 @@ +import './global'; +import type { Configuration, State, VerifyOptions, VerifyResult } from './'; +export {}; +export declare class AltchaWidgetElement extends HTMLElement { + auto?: Configuration['auto']; + challenge?: string; + configuration?: string; + display?: Configuration['display']; + language?: string; + name?: string; + theme?: string; + type?: Configuration['type']; + workers?: number; + configure: (config: Partial) => Promise; + getConfiguration: () => Configuration; + getState: () => State; + hide: () => void; + reset: (newState?: State, err?: string | null) => void; + setState: (newState: State, err?: string | null) => void; + show: () => void; + updateUI: () => void; + verify: (options?: VerifyOptions) => Promise; +} +declare global { + interface HTMLElementTagNameMap { + 'altcha-widget': AltchaWidgetElement; + } +} diff --git a/frontend/node_modules/altcha/dist/types/generic.js b/frontend/node_modules/altcha/dist/types/generic.js new file mode 100644 index 0000000..1539ce7 --- /dev/null +++ b/frontend/node_modules/altcha/dist/types/generic.js @@ -0,0 +1 @@ +import './global'; diff --git a/frontend/node_modules/altcha/dist/types/global.d.ts b/frontend/node_modules/altcha/dist/types/global.d.ts new file mode 100644 index 0000000..26915ee --- /dev/null +++ b/frontend/node_modules/altcha/dist/types/global.d.ts @@ -0,0 +1,5 @@ +import type { AltchaGlobal } from './index'; +export {}; +declare global { + var $altcha: AltchaGlobal; +} diff --git a/frontend/node_modules/altcha/dist/types/global.js b/frontend/node_modules/altcha/dist/types/global.js new file mode 100644 index 0000000..cb0ff5c --- /dev/null +++ b/frontend/node_modules/altcha/dist/types/global.js @@ -0,0 +1 @@ +export {}; diff --git a/frontend/node_modules/altcha/dist/types/index.d.ts b/frontend/node_modules/altcha/dist/types/index.d.ts new file mode 100644 index 0000000..6de511e --- /dev/null +++ b/frontend/node_modules/altcha/dist/types/index.d.ts @@ -0,0 +1,409 @@ +export interface AltchaGlobal { + algorithms: Map Worker | Promise>; + defaults: Store>; + i18n: Store>>; + instances: Set; + plugins: Set any>; +} +export declare enum AudioState { + ERROR = "error", + LOADING = "loading", + PLAYING = "playing", + PAUSED = "paused", + READY = "ready" +} +export interface Configuration { + /** + * Forces a specific language for audio-based challenges. + */ + audioChallengeLanguage: string; + /** + * Determines when verification triggers automatically. + * @default 'off' + */ + auto: 'off' | 'onfocus' | 'onload' | 'onsubmit'; + /** + * Vertical position of the widget when `display` is set to `bar`. + */ + barPlacement: 'bottom' | 'top'; + /** + * The challenge data or the URL to fetch a new challenge from. + */ + challenge: Challenge | string | null; + /** + * A specific code-challenge object. Overrides values provided in the `challenge` property. + */ + codeChallenge: CodeChallenge | null; + /** + * The UI layout used for the code-challenge modal. + */ + codeChallengeDisplay: 'standard' | 'overlay' | 'bottomsheet'; + /** + * Defines how credentials (cookies/auth headers) are handled during the challenge request. + */ + credentials: RequestCredentials | null; + /** + * Enables verbose logging in the browser console for debugging. + */ + debug: boolean; + /** + * Prevents the code-challenge modal from stealing focus when opened. + */ + disableAutoFocus: boolean; + /** + * The visual layout mode of the widget. + */ + display: 'standard' | 'bar' | 'floating' | 'overlay' | 'invisible'; + /** + * A custom `fetch` implementation for network requests. + */ + fetch: typeof fetch; + /** + * The element or CSS selector the floating UI attaches to. + * Defaults to the first `submit` button in the parent form. + */ + floatingAnchor: string | HTMLElement | null; + /** + * Vertical offset (in pixels) between the floating UI and its anchor. + * @default 12 + */ + floatingOffset: number; + /** + * Controls whether the floating widget remains visible after successful verification. + */ + floatingPersist: boolean | 'focus'; + /** + * Preferred position of the floating widget relative to the anchor. + */ + floatingPlacement: 'auto' | 'bottom' | 'top'; + /** + * Hides the "ALTCHA" attribution link. + */ + hideFooter: boolean; + /** + * Hides the ALTCHA logo icon. + */ + hideLogo: boolean; + /** + * Enables the collection of pointer and scroll events for ALTCHA HIS mechanism (defaults to true). + */ + humanInteractionSignature: boolean; + /** + * The ISO alpha-2 language code for localization (requires corresponding i18n file). + */ + language: string; + /** + * The minimum verification time in milliseconds (adds an artificial delay if the PoW is faster). + * @default 500 + */ + minDuration: number; + /** + * Forces the widget into a failed state with a mock error for UI testing. + */ + mockError: boolean; + /** + * The `name` attribute of the hidden input field containing the payload. + * @default 'altcha' + */ + name: string; + /** + * CSS selector for an element to be mirrored inside the overlay modal. + */ + overlayContent: string | null; + /** + * Configures the placement (top / bottom) for popovers. Defaults to 'auto'. + */ + popoverPlacement: 'auto' | 'bottom' | 'top'; + /** + * Automatically attempts to restart verification with fewer workers if the browser runs out of memory (Argon2 and Scrypt only). + */ + retryOnOutOfMemoryError: boolean; + /** + * Includes other form field values in the server-side verification request. + */ + serverVerificationFields: boolean; + /** + * Includes the user's time zone in the server-side verification request. + */ + serverVerificationTimeZone: boolean; + /** + * When set, the widget will set a configured cookie for the payload instead of sending it as form field. + */ + setCookie: SetCookieOptions | null; + /** + * Mocks a successful verification. Useful for testing environments without network access. + */ + test: boolean; + /** + * PoW verification timeout in milliseconds. Defaults to 90_000 ms. + */ + timeout: number; + /** + * The visual style of the interaction element. + */ + type: 'native' | 'checkbox' | 'switch'; + /** + * Custom validation message for the HTML5 `setCustomValidity` API. + */ + validationMessage: string; + /** + * A custom verification handler. Overrides the default network-based verification. + */ + verifyFunction: ((payload: string, code?: string) => Promise) | null; + /** + * The endpoint URL for server-side verification. + */ + verifyUrl: string | null; + /** + * The number of Web Workers to spawn for proof-of-work calculations. + */ + workers: number; +} +export interface Challenge { + codeChallenge?: CodeChallenge; + parameters: ChallengeParameters; + signature?: string; +} +export interface ChallengeParameters { + algorithm: string; + nonce: string; + salt: string; + cost: number; + keyLength: number; + keyPrefix: string; + keySignature?: string; + memoryCost?: number; + parallelism?: number; + expiresAt?: number; + data?: Record; +} +export interface ChallengeV1 { + algorithm: string; + challenge: string; + codeChallenge?: CodeChallenge; + salt: string; + maxnumber?: number; + maxNumber?: number; + signature: string; +} +export interface CodeChallenge { + image: string; + audio?: string; + length?: number; +} +export interface CreateChallengeOptions { + algorithm: string; + counter?: number; + counterMode?: 'uint32' | 'string'; + cost: number; + data?: Record; + deriveKey: DeriveKeyFunction; + expiresAt?: number | Date; + hmacAlgorithm?: HmacAlgorithm; + hmacKeySignatureSecret?: string; + hmacSignatureSecret?: string; + keyLength?: number; + keyPrefix?: string; + keyPrefixLength?: number; + memoryCost?: number; + parallelism?: number; +} +export interface CSSVariables { + '--altcha-border-color': string; + '--altcha-border-width': string; + '--altcha-border-radius': string; + '--altcha-color-base': string; + '--altcha-color-base-content': string; + '--altcha-color-error': string; + '--altcha-color-error-content': string; + '--altcha-color-neutral': string; + '--altcha-color-neutral-content': string; + '--altcha-color-primary': string; + '--altcha-color-primary-content': string; + '--altcha-color-success': string; + '--altcha-color-success-content': string; + '--altcha-checkbox-border-color': string; + '--altcha-checkbox-border-radius': string; + '--altcha-checkbox-border-width': string; + '--altcha-checkbox-outline': string; + '--altcha-checkbox-outline-offset': string; + '--altcha-checkbox-size': string; + '--altcha-checkbox-transition-duration': string; + '--altcha-input-background-color': string; + '--altcha-input-border-radius': string; + '--altcha-input-border-width': string; + '--altcha-max-width': string; + '--altcha-padding': string; + '--altcha-popover-arrow-size': string; + '--altcha-popover-color': string; + '--altcha-shadow': string; + '--altcha-spinner-color': string; + '--altcha-switch-background-color': string; + '--altcha-switch-border-radius': string; + '--altcha-switch-height': string; + '--altcha-switch-padding': string; + '--altcha-switch-width': string; + '--altcha-switch-toggle-border-radius': string; + '--altcha-switch-toggle-color': string; + '--altcha-switch-toggle-size': string; + '--altcha-transition-duration': string; + '--altcha-z-index': string | number; + '--altcha-z-index-popover': string | number; +} +export type DeriveKeyFunction = (parameters: ChallengeParameters, salt: Uint8Array, password: Uint8Array) => Promise; +export interface DeriveKeyFunctionResult { + parameters?: Partial; + derivedKey: Uint8Array; +} +export declare enum HmacAlgorithm { + SHA_256 = "SHA-256", + SHA_384 = "SHA-384", + SHA_512 = "SHA-512" +} +export interface Payload { + challenge: Omit; + solution: Solution; +} +export interface PayloadV1 { + algorithm: string; + challenge: string; + number: number; + salt: string; + signature?: string; + took: number; +} +export interface SetCookieOptions { + domain?: string; + name?: string; + maxAge?: number; + path?: string; + sameSite?: string; + secure?: boolean; +} +export type ServerClassification = 'BAD' | 'GOOD' | 'NEUTRAL'; +export interface ServerSignaturePayload { + algorithm: string; + apiKey?: string; + id?: string; + signature: string; + verificationData: string; + verified: boolean; +} +export interface ServerSignatureVerificationData { + [key: string]: string | unknown; + classification?: ServerClassification; + email?: string; + expire?: number; + fields?: string[]; + fieldsHash?: string; + id?: string; + ipAddress?: string; + reasons?: string[]; + score?: number; + time?: number; + verified?: boolean; +} +export interface ServerVerificationResult { + algorithm?: string; + apiKey?: string; + id?: string; + payload?: string; + reason?: string; + score?: number; + signature?: string; + verificationData?: string; + verified?: boolean; +} +export interface SolveChallengeOptions { + challenge: Challenge; + controller?: AbortController; + counterStart?: number; + counterStep?: number; + counterMode?: 'uint32' | 'string'; + deriveKey: DeriveKeyFunction; + timeout?: number; +} +export interface Strings { + ariaLinkLabel: string; + enterCode: string; + enterCodeAria: string; + error: string; + expired: string; + footer: string; + getAudioChallenge: string; + label: string; + loading: string; + reload: string; + verify: string; + verificationRequired: string; + verified: string; + verifying: string; + waitAlert: string; +} +export declare enum State { + CODE = "code", + ERROR = "error", + VERIFIED = "verified", + VERIFYING = "verifying", + UNVERIFIED = "unverified", + EXPIRED = "expired" +} +export interface Solution { + counter: number; + derivedKey: string; + time?: number; +} +export type Store = { + get: (name: K) => T[K]; + set: (name: N | T, value?: T[N]) => void; + store: Writable; +}; +export interface VerifyOptions { + concurrency?: number; + controller?: AbortController; + minDuration?: number; +} +export interface VerifyResult { + challenge?: Challenge; + payload: string; + solution?: Solution; +} +export interface VerifyServerSignatureResult extends VerifySolutionResult { + verificationData?: ServerSignatureVerificationData | null; +} +export interface VerifySolutionOptions { + challenge: Challenge; + counterMode?: 'uint32' | 'string'; + deriveKey: DeriveKeyFunction; + hmacAlgorithm?: HmacAlgorithm; + hmacKeySignatureSecret?: string; + hmacSignatureSecret: string; + solution: Solution; +} +export interface VerifySolutionResult { + expired: boolean; + invalidSignature: boolean | null; + invalidSolution: boolean | null; + time: number; + verified: boolean; +} +export interface WidgetAttributes extends Partial> { + challenge?: string; + configuration?: string; +} +export interface WidgetMethods { + configure: (config: Partial) => Promise; + getConfiguration: () => Configuration; + getState: () => State; + hide: () => void; + reset: (newState?: State, err?: string | null) => void; + setState: (newState: State, err?: string | null) => void; + show: () => void; + updateUI: () => void; + verify: (options?: VerifyOptions) => Promise; +} +export type Writable>> = { + set(this: void, value: T): void; + update(this: void, updater: (value: T) => T): void; + subscribe(this: void, run: (value: T) => void, invalidate?: () => void): () => void; +}; diff --git a/frontend/node_modules/altcha/dist/types/index.js b/frontend/node_modules/altcha/dist/types/index.js new file mode 100644 index 0000000..d125d8f --- /dev/null +++ b/frontend/node_modules/altcha/dist/types/index.js @@ -0,0 +1,23 @@ +export var AudioState; +(function (AudioState) { + AudioState["ERROR"] = "error"; + AudioState["LOADING"] = "loading"; + AudioState["PLAYING"] = "playing"; + AudioState["PAUSED"] = "paused"; + AudioState["READY"] = "ready"; +})(AudioState || (AudioState = {})); +export var HmacAlgorithm; +(function (HmacAlgorithm) { + HmacAlgorithm["SHA_256"] = "SHA-256"; + HmacAlgorithm["SHA_384"] = "SHA-384"; + HmacAlgorithm["SHA_512"] = "SHA-512"; +})(HmacAlgorithm || (HmacAlgorithm = {})); +export var State; +(function (State) { + State["CODE"] = "code"; + State["ERROR"] = "error"; + State["VERIFIED"] = "verified"; + State["VERIFYING"] = "verifying"; + State["UNVERIFIED"] = "unverified"; + State["EXPIRED"] = "expired"; +})(State || (State = {})); diff --git a/frontend/node_modules/altcha/dist/types/jsx.d.ts b/frontend/node_modules/altcha/dist/types/jsx.d.ts new file mode 100644 index 0000000..8f5eb1c --- /dev/null +++ b/frontend/node_modules/altcha/dist/types/jsx.d.ts @@ -0,0 +1,22 @@ +import './global'; +import type { CSSVariables, WidgetAttributes } from './'; +export {}; +interface AltchaWidgetJSX extends WidgetAttributes { + class?: string; + className?: string; + hidden?: boolean; + id?: string; + role?: string; + slot?: string; + style?: string | Partial; + tabindex?: number | string; + tabIndex?: number; + title?: string; +} +declare global { + namespace JSX { + interface IntrinsicElements { + 'altcha-widget': AltchaWidgetJSX; + } + } +} diff --git a/frontend/node_modules/altcha/dist/types/jsx.js b/frontend/node_modules/altcha/dist/types/jsx.js new file mode 100644 index 0000000..1539ce7 --- /dev/null +++ b/frontend/node_modules/altcha/dist/types/jsx.js @@ -0,0 +1 @@ +import './global'; diff --git a/frontend/node_modules/altcha/dist/types/react.d.ts b/frontend/node_modules/altcha/dist/types/react.d.ts new file mode 100644 index 0000000..f1b3fc2 --- /dev/null +++ b/frontend/node_modules/altcha/dist/types/react.d.ts @@ -0,0 +1,32 @@ +import './global'; +import type { CSSProperties, HTMLAttributes, Ref } from 'react'; +import type { CSSVariables, WidgetAttributes } from './'; +export {}; +interface AltchaWidgetReact extends WidgetAttributes, HTMLAttributes { + ref?: Ref; + style?: CSSProperties & Partial; + suppressHydrationWarning?: boolean; +} +declare global { + namespace React { + namespace JSX { + interface IntrinsicElements { + 'altcha-widget': AltchaWidgetReact; + } + } + } +} +declare module 'react' { + namespace JSX { + interface IntrinsicElements { + 'altcha-widget': AltchaWidgetReact; + } + } +} +declare module 'react/jsx-runtime' { + namespace JSX { + interface IntrinsicElements { + 'altcha-widget': AltchaWidgetReact; + } + } +} diff --git a/frontend/node_modules/altcha/dist/types/react.js b/frontend/node_modules/altcha/dist/types/react.js new file mode 100644 index 0000000..1539ce7 --- /dev/null +++ b/frontend/node_modules/altcha/dist/types/react.js @@ -0,0 +1 @@ +import './global'; diff --git a/frontend/node_modules/altcha/dist/types/svelte.d.ts b/frontend/node_modules/altcha/dist/types/svelte.d.ts new file mode 100644 index 0000000..30d212f --- /dev/null +++ b/frontend/node_modules/altcha/dist/types/svelte.d.ts @@ -0,0 +1,25 @@ +import './global'; +import type { HTMLAttributes } from 'svelte/elements'; +import type { CodeChallenge, ServerVerificationResult, State, WidgetAttributes } from './'; +export {}; +interface AltchaWidgetSvelte extends WidgetAttributes, HTMLAttributes { + oncodechallenge?: (ev: CustomEvent<{ + codeChallenge: CodeChallenge; + }>) => void; + onexpired?: (ev: CustomEvent) => void; + onstatechange?: (e: CustomEvent<{ + payload?: string; + state: State; + }>) => void; + onserververification?: (e: CustomEvent) => void; + onverified?: (e: CustomEvent<{ + payload: string; + }>) => void; +} +declare global { + namespace svelteHTML { + interface IntrinsicElements { + 'altcha-widget': AltchaWidgetSvelte; + } + } +} diff --git a/frontend/node_modules/altcha/dist/types/svelte.js b/frontend/node_modules/altcha/dist/types/svelte.js new file mode 100644 index 0000000..1539ce7 --- /dev/null +++ b/frontend/node_modules/altcha/dist/types/svelte.js @@ -0,0 +1 @@ +import './global'; diff --git a/frontend/node_modules/altcha/dist/workers/argon2id.js b/frontend/node_modules/altcha/dist/workers/argon2id.js new file mode 100644 index 0000000..3cd5d45 --- /dev/null +++ b/frontend/node_modules/altcha/dist/workers/argon2id.js @@ -0,0 +1,791 @@ +(function() { + "use strict"; + function bufferStartsWith(buffer, prefix) { + if (prefix.length > buffer.length) { + return false; + } + for (let i = 0; i < prefix.length; i++) { + if (buffer[i] !== prefix[i]) { + return false; + } + } + return true; + } + function bufferToHex(buffer) { + return Array.from(new Uint8Array(buffer)).map((b) => b.toString(16).padStart(2, "0")).join(""); + } + function concatBuffers(a, b) { + const out = new Uint8Array(a.length + b.length); + out.set(a, 0); + out.set(b, a.length); + return out; + } + function hexToBuffer(hex) { + if (hex.length % 2 !== 0) { + throw new Error(`Hex string must have an even length. Got: ${hex}`); + } + const buffer = new ArrayBuffer(hex.length / 2); + const view = new DataView(buffer); + for (let i = 0; i < hex.length; i += 2) { + const byteString = hex.substring(i, i + 2); + const byteValue = parseInt(byteString, 16); + view.setUint8(i / 2, byteValue); + } + return new Uint8Array(buffer); + } + async function delay(ms) { + await new Promise((resolve) => setTimeout(resolve, ms)); + } + function timeDuration(start) { + return Math.floor((performance.now() - start) * 10) / 10; + } + class PasswordBuffer { + constructor(nonce, mode = "uint32") { + this.nonce = nonce; + this.mode = mode; + this.buffer = new Uint8Array(this.nonce.length + this.COUNTER_BYTES); + this.buffer.set(this.nonce, 0); + this.dataView = new DataView(this.buffer.buffer); + } + nonce; + mode; + COUNTER_BYTES = 4; + buffer; + dataView; + encoder = new TextEncoder(); + /** + * Appends the counter to the nonce buffer. + * In 'string' mode, encodes the counter as a UTF-8 string. + * In 'uint32' mode, writes the counter as a big-endian 32-bit integer. + */ + setCounter(n) { + if (this.mode === "string") { + return concatBuffers(this.nonce, this.encoder.encode(n.toString())); + } + this.dataView.setUint32(this.nonce.length, n, false); + return this.buffer; + } + } + async function solveChallenge(options) { + const { + challenge, + controller, + counterMode = "uint32", + counterStart = 0, + counterStep = 1, + deriveKey: deriveKey2, + timeout = 9e4 + } = options; + const { nonce, keyPrefix, salt } = challenge.parameters; + const nonceBuf = hexToBuffer(nonce); + const saltBuf = hexToBuffer(salt); + const keyPrefixBuf = keyPrefix.length % 2 === 0 ? hexToBuffer(keyPrefix) : null; + const password = new PasswordBuffer(nonceBuf, counterMode); + const start = performance.now(); + let counter = counterStart; + let iterations = 0; + let derivedKeyHex = ""; + let lastYield = start; + while (true) { + if (controller?.signal.aborted || timeout && iterations % 10 === 0 && performance.now() - start > timeout) { + return null; + } + const { derivedKey } = await deriveKey2( + challenge.parameters, + saltBuf, + password.setCounter(counter) + ); + if (iterations % 10 === 0 && performance.now() - lastYield > 200) { + await delay(0); + lastYield = performance.now(); + } + if (keyPrefixBuf ? bufferStartsWith(derivedKey, keyPrefixBuf) : bufferToHex(derivedKey).startsWith(keyPrefix)) { + derivedKeyHex = bufferToHex(derivedKey); + break; + } + counter = counter + counterStep; + iterations = iterations + 1; + } + return { + counter, + derivedKey: derivedKeyHex, + time: timeDuration(start) + }; + } + function handler(options) { + const { deriveKey: deriveKey2 } = options; + let controller = void 0; + self.onmessage = async (message) => { + const { challenge, counterMode, counterStart, counterStep, timeout, type } = message.data; + if (type === "abort") { + controller?.abort(); + } else if (type === "work") { + controller = new AbortController(); + let solution; + try { + solution = await solveChallenge({ + challenge, + controller, + counterStart, + counterStep, + deriveKey: deriveKey2, + counterMode, + timeout + }); + } catch (err) { + return self.postMessage({ error: err }); + } + self.postMessage(solution); + } + }; + } + function __awaiter(thisArg, _arguments, P, generator) { + function adopt(value) { + return value instanceof P ? value : new P(function(resolve) { + resolve(value); + }); + } + return new (P || (P = Promise))(function(resolve, reject) { + function fulfilled(value) { + try { + step(generator.next(value)); + } catch (e) { + reject(e); + } + } + function rejected(value) { + try { + step(generator["throw"](value)); + } catch (e) { + reject(e); + } + } + function step(result) { + result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); + } + step((generator = generator.apply(thisArg, [])).next()); + }); + } + typeof SuppressedError === "function" ? SuppressedError : function(error, suppressed, message) { + var e = new Error(message); + return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e; + }; + class Mutex { + constructor() { + this.mutex = Promise.resolve(); + } + lock() { + let begin = () => { + }; + this.mutex = this.mutex.then(() => new Promise(begin)); + return new Promise((res) => { + begin = res; + }); + } + dispatch(fn) { + return __awaiter(this, void 0, void 0, function* () { + const unlock = yield this.lock(); + try { + return yield Promise.resolve(fn()); + } finally { + unlock(); + } + }); + } + } + var _a; + function getGlobal() { + if (typeof globalThis !== "undefined") + return globalThis; + if (typeof self !== "undefined") + return self; + if (typeof window !== "undefined") + return window; + return global; + } + const globalObject = getGlobal(); + const nodeBuffer = (_a = globalObject.Buffer) !== null && _a !== void 0 ? _a : null; + const textEncoder = globalObject.TextEncoder ? new globalObject.TextEncoder() : null; + function hexCharCodesToInt(a, b) { + return (a & 15) + (a >> 6 | a >> 3 & 8) << 4 | (b & 15) + (b >> 6 | b >> 3 & 8); + } + function writeHexToUInt8(buf, str) { + const size = str.length >> 1; + for (let i = 0; i < size; i++) { + const index = i << 1; + buf[i] = hexCharCodesToInt(str.charCodeAt(index), str.charCodeAt(index + 1)); + } + } + function hexStringEqualsUInt8(str, buf) { + if (str.length !== buf.length * 2) { + return false; + } + for (let i = 0; i < buf.length; i++) { + const strIndex = i << 1; + if (buf[i] !== hexCharCodesToInt(str.charCodeAt(strIndex), str.charCodeAt(strIndex + 1))) { + return false; + } + } + return true; + } + const alpha = "a".charCodeAt(0) - 10; + const digit = "0".charCodeAt(0); + function getDigestHex(tmpBuffer, input, hashLength) { + let p = 0; + for (let i = 0; i < hashLength; i++) { + let nibble = input[i] >>> 4; + tmpBuffer[p++] = nibble > 9 ? nibble + alpha : nibble + digit; + nibble = input[i] & 15; + tmpBuffer[p++] = nibble > 9 ? nibble + alpha : nibble + digit; + } + return String.fromCharCode.apply(null, tmpBuffer); + } + const getUInt8Buffer = nodeBuffer !== null ? (data) => { + if (typeof data === "string") { + const buf = nodeBuffer.from(data, "utf8"); + return new Uint8Array(buf.buffer, buf.byteOffset, buf.length); + } + if (nodeBuffer.isBuffer(data)) { + return new Uint8Array(data.buffer, data.byteOffset, data.length); + } + if (ArrayBuffer.isView(data)) { + return new Uint8Array(data.buffer, data.byteOffset, data.byteLength); + } + throw new Error("Invalid data type!"); + } : (data) => { + if (typeof data === "string") { + return textEncoder.encode(data); + } + if (ArrayBuffer.isView(data)) { + return new Uint8Array(data.buffer, data.byteOffset, data.byteLength); + } + throw new Error("Invalid data type!"); + }; + const base64Chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; + const base64Lookup = new Uint8Array(256); + for (let i = 0; i < base64Chars.length; i++) { + base64Lookup[base64Chars.charCodeAt(i)] = i; + } + function encodeBase64(data, pad = true) { + const len = data.length; + const extraBytes = len % 3; + const parts = []; + const len2 = len - extraBytes; + for (let i = 0; i < len2; i += 3) { + const tmp = (data[i] << 16 & 16711680) + (data[i + 1] << 8 & 65280) + (data[i + 2] & 255); + const triplet = base64Chars.charAt(tmp >> 18 & 63) + base64Chars.charAt(tmp >> 12 & 63) + base64Chars.charAt(tmp >> 6 & 63) + base64Chars.charAt(tmp & 63); + parts.push(triplet); + } + if (extraBytes === 1) { + const tmp = data[len - 1]; + const a = base64Chars.charAt(tmp >> 2); + const b = base64Chars.charAt(tmp << 4 & 63); + parts.push(`${a}${b}`); + if (pad) { + parts.push("=="); + } + } else if (extraBytes === 2) { + const tmp = (data[len - 2] << 8) + data[len - 1]; + const a = base64Chars.charAt(tmp >> 10); + const b = base64Chars.charAt(tmp >> 4 & 63); + const c = base64Chars.charAt(tmp << 2 & 63); + parts.push(`${a}${b}${c}`); + if (pad) { + parts.push("="); + } + } + return parts.join(""); + } + function getDecodeBase64Length(data) { + let bufferLength = Math.floor(data.length * 0.75); + const len = data.length; + if (data[len - 1] === "=") { + bufferLength -= 1; + if (data[len - 2] === "=") { + bufferLength -= 1; + } + } + return bufferLength; + } + function decodeBase64(data) { + const bufferLength = getDecodeBase64Length(data); + const len = data.length; + const bytes = new Uint8Array(bufferLength); + let p = 0; + for (let i = 0; i < len; i += 4) { + const encoded1 = base64Lookup[data.charCodeAt(i)]; + const encoded2 = base64Lookup[data.charCodeAt(i + 1)]; + const encoded3 = base64Lookup[data.charCodeAt(i + 2)]; + const encoded4 = base64Lookup[data.charCodeAt(i + 3)]; + bytes[p] = encoded1 << 2 | encoded2 >> 4; + p += 1; + bytes[p] = (encoded2 & 15) << 4 | encoded3 >> 2; + p += 1; + bytes[p] = (encoded3 & 3) << 6 | encoded4 & 63; + p += 1; + } + return bytes; + } + const MAX_HEAP = 16 * 1024; + const WASM_FUNC_HASH_LENGTH = 4; + const wasmMutex = new Mutex(); + const wasmModuleCache = /* @__PURE__ */ new Map(); + function WASMInterface(binary, hashLength) { + return __awaiter(this, void 0, void 0, function* () { + let wasmInstance = null; + let memoryView = null; + let initialized = false; + if (typeof WebAssembly === "undefined") { + throw new Error("WebAssembly is not supported in this environment!"); + } + const writeMemory = (data, offset = 0) => { + memoryView.set(data, offset); + }; + const getMemory = () => memoryView; + const getExports = () => wasmInstance.exports; + const setMemorySize = (totalSize) => { + wasmInstance.exports.Hash_SetMemorySize(totalSize); + const arrayOffset = wasmInstance.exports.Hash_GetBuffer(); + const memoryBuffer = wasmInstance.exports.memory.buffer; + memoryView = new Uint8Array(memoryBuffer, arrayOffset, totalSize); + }; + const getStateSize = () => { + const view = new DataView(wasmInstance.exports.memory.buffer); + const stateSize = view.getUint32(wasmInstance.exports.STATE_SIZE, true); + return stateSize; + }; + const loadWASMPromise = wasmMutex.dispatch(() => __awaiter(this, void 0, void 0, function* () { + if (!wasmModuleCache.has(binary.name)) { + const asm = decodeBase64(binary.data); + const promise = WebAssembly.compile(asm); + wasmModuleCache.set(binary.name, promise); + } + const module = yield wasmModuleCache.get(binary.name); + wasmInstance = yield WebAssembly.instantiate(module, { + // env: { + // emscripten_memcpy_big: (dest, src, num) => { + // const memoryBuffer = wasmInstance.exports.memory.buffer; + // const memView = new Uint8Array(memoryBuffer, 0); + // memView.set(memView.subarray(src, src + num), dest); + // }, + // print_memory: (offset, len) => { + // const memoryBuffer = wasmInstance.exports.memory.buffer; + // const memView = new Uint8Array(memoryBuffer, 0); + // console.log('print_int32', memView.subarray(offset, offset + len)); + // }, + // }, + }); + })); + const setupInterface = () => __awaiter(this, void 0, void 0, function* () { + if (!wasmInstance) { + yield loadWASMPromise; + } + const arrayOffset = wasmInstance.exports.Hash_GetBuffer(); + const memoryBuffer = wasmInstance.exports.memory.buffer; + memoryView = new Uint8Array(memoryBuffer, arrayOffset, MAX_HEAP); + }); + const init = (bits = null) => { + initialized = true; + wasmInstance.exports.Hash_Init(bits); + }; + const updateUInt8Array = (data) => { + let read = 0; + while (read < data.length) { + const chunk = data.subarray(read, read + MAX_HEAP); + read += chunk.length; + memoryView.set(chunk); + wasmInstance.exports.Hash_Update(chunk.length); + } + }; + const update = (data) => { + if (!initialized) { + throw new Error("update() called before init()"); + } + const Uint8Buffer = getUInt8Buffer(data); + updateUInt8Array(Uint8Buffer); + }; + const digestChars = new Uint8Array(hashLength * 2); + const digest = (outputType, padding = null) => { + if (!initialized) { + throw new Error("digest() called before init()"); + } + initialized = false; + wasmInstance.exports.Hash_Final(padding); + if (outputType === "binary") { + return memoryView.slice(0, hashLength); + } + return getDigestHex(digestChars, memoryView, hashLength); + }; + const save = () => { + if (!initialized) { + throw new Error("save() can only be called after init() and before digest()"); + } + const stateOffset = wasmInstance.exports.Hash_GetState(); + const stateLength = getStateSize(); + const memoryBuffer = wasmInstance.exports.memory.buffer; + const internalState = new Uint8Array(memoryBuffer, stateOffset, stateLength); + const prefixedState = new Uint8Array(WASM_FUNC_HASH_LENGTH + stateLength); + writeHexToUInt8(prefixedState, binary.hash); + prefixedState.set(internalState, WASM_FUNC_HASH_LENGTH); + return prefixedState; + }; + const load = (state) => { + if (!(state instanceof Uint8Array)) { + throw new Error("load() expects an Uint8Array generated by save()"); + } + const stateOffset = wasmInstance.exports.Hash_GetState(); + const stateLength = getStateSize(); + const overallLength = WASM_FUNC_HASH_LENGTH + stateLength; + const memoryBuffer = wasmInstance.exports.memory.buffer; + if (state.length !== overallLength) { + throw new Error(`Bad state length (expected ${overallLength} bytes, got ${state.length})`); + } + if (!hexStringEqualsUInt8(binary.hash, state.subarray(0, WASM_FUNC_HASH_LENGTH))) { + throw new Error("This state was written by an incompatible hash implementation"); + } + const internalState = state.subarray(WASM_FUNC_HASH_LENGTH); + new Uint8Array(memoryBuffer, stateOffset, stateLength).set(internalState); + initialized = true; + }; + const isDataShort = (data) => { + if (typeof data === "string") { + return data.length < MAX_HEAP / 4; + } + return data.byteLength < MAX_HEAP; + }; + let canSimplify = isDataShort; + switch (binary.name) { + case "argon2": + case "scrypt": + canSimplify = () => true; + break; + case "blake2b": + case "blake2s": + canSimplify = (data, initParam) => initParam <= 512 && isDataShort(data); + break; + case "blake3": + canSimplify = (data, initParam) => initParam === 0 && isDataShort(data); + break; + case "xxhash64": + // cannot simplify + case "xxhash3": + case "xxhash128": + case "crc64": + canSimplify = () => false; + break; + } + const calculate = (data, initParam = null, digestParam = null) => { + if (!canSimplify(data, initParam)) { + init(initParam); + update(data); + return digest("hex", digestParam); + } + const buffer = getUInt8Buffer(data); + memoryView.set(buffer); + wasmInstance.exports.Hash_Calculate(buffer.length, initParam, digestParam); + return getDigestHex(digestChars, memoryView, hashLength); + }; + yield setupInterface(); + return { + getMemory, + writeMemory, + getExports, + setMemorySize, + init, + update, + digest, + save, + load, + calculate, + hashLength + }; + }); + } + new Mutex(); + var name$k = "argon2"; + var data$k = "AGFzbQEAAAABKQVgAX8Bf2AAAX9gEH9/f39/f39/f39/f39/f38AYAR/f39/AGACf38AAwYFAAECAwQFBgEBAoCAAgYIAX8BQZCoBAsHQQQGbWVtb3J5AgASSGFzaF9TZXRNZW1vcnlTaXplAAAOSGFzaF9HZXRCdWZmZXIAAQ5IYXNoX0NhbGN1bGF0ZQAECvEyBVgBAn9BACEBAkAgAEEAKAKICCICRg0AAkAgACACayIAQRB2IABBgIB8cSAASWoiAEAAQX9HDQBB/wHADwtBACEBQQBBACkDiAggAEEQdK18NwOICAsgAcALcAECfwJAQQAoAoAIIgANAEEAPwBBEHQiADYCgAhBACgCiAgiAUGAgCBGDQACQEGAgCAgAWsiAEEQdiAAQYCAfHEgAElqIgBAAEF/Rw0AQQAPC0EAQQApA4gIIABBEHStfDcDiAhBACgCgAghAAsgAAvcDgECfiAAIAQpAwAiECAAKQMAIhF8IBFCAYZC/v///x+DIBBC/////w+DfnwiEDcDACAMIBAgDCkDAIVCIIkiEDcDACAIIBAgCCkDACIRfCARQgGGQv7///8fgyAQQv////8Pg358IhA3AwAgBCAQIAQpAwCFQiiJIhA3AwAgACAQIAApAwAiEXwgEEL/////D4MgEUIBhkL+////H4N+fCIQNwMAIAwgECAMKQMAhUIwiSIQNwMAIAggECAIKQMAIhF8IBBC/////w+DIBFCAYZC/v///x+DfnwiEDcDACAEIBAgBCkDAIVCAYk3AwAgASAFKQMAIhAgASkDACIRfCARQgGGQv7///8fgyAQQv////8Pg358IhA3AwAgDSAQIA0pAwCFQiCJIhA3AwAgCSAQIAkpAwAiEXwgEUIBhkL+////H4MgEEL/////D4N+fCIQNwMAIAUgECAFKQMAhUIoiSIQNwMAIAEgECABKQMAIhF8IBBC/////w+DIBFCAYZC/v///x+DfnwiEDcDACANIBAgDSkDAIVCMIkiEDcDACAJIBAgCSkDACIRfCAQQv////8PgyARQgGGQv7///8fg358IhA3AwAgBSAQIAUpAwCFQgGJNwMAIAIgBikDACIQIAIpAwAiEXwgEUIBhkL+////H4MgEEL/////D4N+fCIQNwMAIA4gECAOKQMAhUIgiSIQNwMAIAogECAKKQMAIhF8IBFCAYZC/v///x+DIBBC/////w+DfnwiEDcDACAGIBAgBikDAIVCKIkiEDcDACACIBAgAikDACIRfCAQQv////8PgyARQgGGQv7///8fg358IhA3AwAgDiAQIA4pAwCFQjCJIhA3AwAgCiAQIAopAwAiEXwgEEL/////D4MgEUIBhkL+////H4N+fCIQNwMAIAYgECAGKQMAhUIBiTcDACADIAcpAwAiECADKQMAIhF8IBFCAYZC/v///x+DIBBC/////w+DfnwiEDcDACAPIBAgDykDAIVCIIkiEDcDACALIBAgCykDACIRfCARQgGGQv7///8fgyAQQv////8Pg358IhA3AwAgByAQIAcpAwCFQiiJIhA3AwAgAyAQIAMpAwAiEXwgEEL/////D4MgEUIBhkL+////H4N+fCIQNwMAIA8gECAPKQMAhUIwiSIQNwMAIAsgECALKQMAIhF8IBBC/////w+DIBFCAYZC/v///x+DfnwiEDcDACAHIBAgBykDAIVCAYk3AwAgACAFKQMAIhAgACkDACIRfCARQgGGQv7///8fgyAQQv////8Pg358IhA3AwAgDyAQIA8pAwCFQiCJIhA3AwAgCiAQIAopAwAiEXwgEUIBhkL+////H4MgEEL/////D4N+fCIQNwMAIAUgECAFKQMAhUIoiSIQNwMAIAAgECAAKQMAIhF8IBBC/////w+DIBFCAYZC/v///x+DfnwiEDcDACAPIBAgDykDAIVCMIkiEDcDACAKIBAgCikDACIRfCAQQv////8PgyARQgGGQv7///8fg358IhA3AwAgBSAQIAUpAwCFQgGJNwMAIAEgBikDACIQIAEpAwAiEXwgEUIBhkL+////H4MgEEL/////D4N+fCIQNwMAIAwgECAMKQMAhUIgiSIQNwMAIAsgECALKQMAIhF8IBFCAYZC/v///x+DIBBC/////w+DfnwiEDcDACAGIBAgBikDAIVCKIkiEDcDACABIBAgASkDACIRfCAQQv////8PgyARQgGGQv7///8fg358IhA3AwAgDCAQIAwpAwCFQjCJIhA3AwAgCyAQIAspAwAiEXwgEEL/////D4MgEUIBhkL+////H4N+fCIQNwMAIAYgECAGKQMAhUIBiTcDACACIAcpAwAiECACKQMAIhF8IBFCAYZC/v///x+DIBBC/////w+DfnwiEDcDACANIBAgDSkDAIVCIIkiEDcDACAIIBAgCCkDACIRfCARQgGGQv7///8fgyAQQv////8Pg358IhA3AwAgByAQIAcpAwCFQiiJIhA3AwAgAiAQIAIpAwAiEXwgEEL/////D4MgEUIBhkL+////H4N+fCIQNwMAIA0gECANKQMAhUIwiSIQNwMAIAggECAIKQMAIhF8IBBC/////w+DIBFCAYZC/v///x+DfnwiEDcDACAHIBAgBykDAIVCAYk3AwAgAyAEKQMAIhAgAykDACIRfCARQgGGQv7///8fgyAQQv////8Pg358IhA3AwAgDiAQIA4pAwCFQiCJIhA3AwAgCSAQIAkpAwAiEXwgEUIBhkL+////H4MgEEL/////D4N+fCIQNwMAIAQgECAEKQMAhUIoiSIQNwMAIAMgECADKQMAIhF8IBBC/////w+DIBFCAYZC/v///x+DfnwiEDcDACAOIBAgDikDAIVCMIkiEDcDACAJIBAgCSkDACIRfCAQQv////8PgyARQgGGQv7///8fg358IhA3AwAgBCAQIAQpAwCFQgGJNwMAC98aAQN/QQAhBEEAIAIpAwAgASkDAIU3A5AIQQAgAikDCCABKQMIhTcDmAhBACACKQMQIAEpAxCFNwOgCEEAIAIpAxggASkDGIU3A6gIQQAgAikDICABKQMghTcDsAhBACACKQMoIAEpAyiFNwO4CEEAIAIpAzAgASkDMIU3A8AIQQAgAikDOCABKQM4hTcDyAhBACACKQNAIAEpA0CFNwPQCEEAIAIpA0ggASkDSIU3A9gIQQAgAikDUCABKQNQhTcD4AhBACACKQNYIAEpA1iFNwPoCEEAIAIpA2AgASkDYIU3A/AIQQAgAikDaCABKQNohTcD+AhBACACKQNwIAEpA3CFNwOACUEAIAIpA3ggASkDeIU3A4gJQQAgAikDgAEgASkDgAGFNwOQCUEAIAIpA4gBIAEpA4gBhTcDmAlBACACKQOQASABKQOQAYU3A6AJQQAgAikDmAEgASkDmAGFNwOoCUEAIAIpA6ABIAEpA6ABhTcDsAlBACACKQOoASABKQOoAYU3A7gJQQAgAikDsAEgASkDsAGFNwPACUEAIAIpA7gBIAEpA7gBhTcDyAlBACACKQPAASABKQPAAYU3A9AJQQAgAikDyAEgASkD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"; + var hash$k = "e4cdc523"; + var wasmJson$k = { + name: name$k, + data: data$k, + hash: hash$k + }; + var name$j = "blake2b"; + var data$j = "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"; + var hash$j = "c6f286e6"; + var wasmJson$j = { + name: name$j, + data: data$j, + hash: hash$j + }; + new Mutex(); + function validateBits$4(bits) { + if (!Number.isInteger(bits) || bits < 8 || bits > 512 || bits % 8 !== 0) { + return new Error("Invalid variant! Valid values: 8, 16, ..., 512"); + } + return null; + } + function getInitParam$1(outputBits, keyBits) { + return outputBits | keyBits << 16; + } + function createBLAKE2b(bits = 512, key = null) { + if (validateBits$4(bits)) { + return Promise.reject(validateBits$4(bits)); + } + let keyBuffer = null; + let initParam = bits; + if (key !== null) { + keyBuffer = getUInt8Buffer(key); + if (keyBuffer.length > 64) { + return Promise.reject(new Error("Max key length is 64 bytes")); + } + initParam = getInitParam$1(bits, keyBuffer.length); + } + const outputSize = bits / 8; + return WASMInterface(wasmJson$j, outputSize).then((wasm) => { + if (initParam > 512) { + wasm.writeMemory(keyBuffer); + } + wasm.init(initParam); + const obj = { + init: initParam > 512 ? () => { + wasm.writeMemory(keyBuffer); + wasm.init(initParam); + return obj; + } : () => { + wasm.init(initParam); + return obj; + }, + update: (data) => { + wasm.update(data); + return obj; + }, + // biome-ignore lint/suspicious/noExplicitAny: Conflict with IHasher type + digest: (outputType) => wasm.digest(outputType), + save: () => wasm.save(), + load: (data) => { + wasm.load(data); + return obj; + }, + blockSize: 128, + digestSize: outputSize + }; + return obj; + }); + } + function encodeResult(salt, options, res) { + const parameters = [ + `m=${options.memorySize}`, + `t=${options.iterations}`, + `p=${options.parallelism}` + ].join(","); + return `$argon2${options.hashType}$v=19$${parameters}$${encodeBase64(salt, false)}$${encodeBase64(res, false)}`; + } + const uint32View = new DataView(new ArrayBuffer(4)); + function int32LE(x) { + uint32View.setInt32(0, x, true); + return new Uint8Array(uint32View.buffer); + } + function hashFunc(blake512, buf, len) { + return __awaiter(this, void 0, void 0, function* () { + if (len <= 64) { + const blake = yield createBLAKE2b(len * 8); + blake.update(int32LE(len)); + blake.update(buf); + return blake.digest("binary"); + } + const r = Math.ceil(len / 32) - 2; + const ret = new Uint8Array(len); + blake512.init(); + blake512.update(int32LE(len)); + blake512.update(buf); + let vp = blake512.digest("binary"); + ret.set(vp.subarray(0, 32), 0); + for (let i = 1; i < r; i++) { + blake512.init(); + blake512.update(vp); + vp = blake512.digest("binary"); + ret.set(vp.subarray(0, 32), i * 32); + } + const partialBytesNeeded = len - 32 * r; + let blakeSmall; + if (partialBytesNeeded === 64) { + blakeSmall = blake512; + blakeSmall.init(); + } else { + blakeSmall = yield createBLAKE2b(partialBytesNeeded * 8); + } + blakeSmall.update(vp); + vp = blakeSmall.digest("binary"); + ret.set(vp.subarray(0, partialBytesNeeded), r * 32); + return ret; + }); + } + function getHashType(type) { + switch (type) { + case "d": + return 0; + case "i": + return 1; + default: + return 2; + } + } + function argon2Internal(options) { + return __awaiter(this, void 0, void 0, function* () { + var _a2; + const { parallelism, iterations, hashLength } = options; + const password = getUInt8Buffer(options.password); + const salt = getUInt8Buffer(options.salt); + const version = 19; + const hashType = getHashType(options.hashType); + const { memorySize } = options; + const secret = getUInt8Buffer((_a2 = options.secret) !== null && _a2 !== void 0 ? _a2 : ""); + const [argon2Interface, blake512] = yield Promise.all([ + WASMInterface(wasmJson$k, 1024), + createBLAKE2b(512) + ]); + argon2Interface.setMemorySize(memorySize * 1024 + 1024); + const initVector = new Uint8Array(24); + const initVectorView = new DataView(initVector.buffer); + initVectorView.setInt32(0, parallelism, true); + initVectorView.setInt32(4, hashLength, true); + initVectorView.setInt32(8, memorySize, true); + initVectorView.setInt32(12, iterations, true); + initVectorView.setInt32(16, version, true); + initVectorView.setInt32(20, hashType, true); + argon2Interface.writeMemory(initVector, memorySize * 1024); + blake512.init(); + blake512.update(initVector); + blake512.update(int32LE(password.length)); + blake512.update(password); + blake512.update(int32LE(salt.length)); + blake512.update(salt); + blake512.update(int32LE(secret.length)); + blake512.update(secret); + blake512.update(int32LE(0)); + const segments = Math.floor(memorySize / (parallelism * 4)); + const lanes = segments * 4; + const param = new Uint8Array(72); + const H0 = blake512.digest("binary"); + param.set(H0); + for (let lane = 0; lane < parallelism; lane++) { + param.set(int32LE(0), 64); + param.set(int32LE(lane), 68); + let position = lane * lanes; + let chunk = yield hashFunc(blake512, param, 1024); + argon2Interface.writeMemory(chunk, position * 1024); + position += 1; + param.set(int32LE(1), 64); + chunk = yield hashFunc(blake512, param, 1024); + argon2Interface.writeMemory(chunk, position * 1024); + } + const C = new Uint8Array(1024); + writeHexToUInt8(C, argon2Interface.calculate(new Uint8Array([]), memorySize)); + const res = yield hashFunc(blake512, C, hashLength); + if (options.outputType === "hex") { + const digestChars = new Uint8Array(hashLength * 2); + return getDigestHex(digestChars, res, hashLength); + } + if (options.outputType === "encoded") { + return encodeResult(salt, options, res); + } + return res; + }); + } + const validateOptions$3 = (options) => { + var _a2; + if (!options || typeof options !== "object") { + throw new Error("Invalid options parameter. It requires an object."); + } + if (!options.password) { + throw new Error("Password must be specified"); + } + options.password = getUInt8Buffer(options.password); + if (options.password.length < 1) { + throw new Error("Password must be specified"); + } + if (!options.salt) { + throw new Error("Salt must be specified"); + } + options.salt = getUInt8Buffer(options.salt); + if (options.salt.length < 8) { + throw new Error("Salt should be at least 8 bytes long"); + } + options.secret = getUInt8Buffer((_a2 = options.secret) !== null && _a2 !== void 0 ? _a2 : ""); + if (!Number.isInteger(options.iterations) || options.iterations < 1) { + throw new Error("Iterations should be a positive number"); + } + if (!Number.isInteger(options.parallelism) || options.parallelism < 1) { + throw new Error("Parallelism should be a positive number"); + } + if (!Number.isInteger(options.hashLength) || options.hashLength < 4) { + throw new Error("Hash length should be at least 4 bytes."); + } + if (!Number.isInteger(options.memorySize)) { + throw new Error("Memory size should be specified."); + } + if (options.memorySize < 8 * options.parallelism) { + throw new Error("Memory size should be at least 8 * parallelism."); + } + if (options.outputType === void 0) { + options.outputType = "hex"; + } + if (!["hex", "binary", "encoded"].includes(options.outputType)) { + throw new Error(`Insupported output type ${options.outputType}. Valid values: ['hex', 'binary', 'encoded']`); + } + }; + function argon2id(options) { + return __awaiter(this, void 0, void 0, function* () { + validateOptions$3(options); + return argon2Internal(Object.assign(Object.assign({}, options), { hashType: "id" })); + }); + } + new Mutex(); + new Mutex(); + new Mutex(); + new Mutex(); + new Mutex(); + new Mutex(); + new Mutex(); + new Mutex(); + new Mutex(); + new Mutex(); + new Mutex(); + new Mutex(); + new Mutex(); + new Mutex(); + new Mutex(); + new Mutex(); + new Mutex(); + new Mutex(); + new Mutex(); + new Mutex(); + async function deriveKey(parameters, salt, password) { + const { + cost, + keyLength = 32, + memoryCost = 16384, + // in KB + parallelism = 1 + } = parameters; + return { + parameters: { + memoryCost, + parallelism + }, + derivedKey: await argon2id({ + password, + salt, + parallelism, + iterations: cost, + memorySize: memoryCost, + hashLength: keyLength, + outputType: "binary" + }) + }; + } + handler({ + deriveKey + }); +})(); diff --git a/frontend/node_modules/altcha/dist/workers/pbkdf2.js b/frontend/node_modules/altcha/dist/workers/pbkdf2.js new file mode 100644 index 0000000..c4b4e89 --- /dev/null +++ b/frontend/node_modules/altcha/dist/workers/pbkdf2.js @@ -0,0 +1,181 @@ +(function() { + "use strict"; + function bufferStartsWith(buffer, prefix) { + if (prefix.length > buffer.length) { + return false; + } + for (let i = 0; i < prefix.length; i++) { + if (buffer[i] !== prefix[i]) { + return false; + } + } + return true; + } + function bufferToHex(buffer) { + return Array.from(new Uint8Array(buffer)).map((b) => b.toString(16).padStart(2, "0")).join(""); + } + function concatBuffers(a, b) { + const out = new Uint8Array(a.length + b.length); + out.set(a, 0); + out.set(b, a.length); + return out; + } + function hexToBuffer(hex) { + if (hex.length % 2 !== 0) { + throw new Error(`Hex string must have an even length. Got: ${hex}`); + } + const buffer = new ArrayBuffer(hex.length / 2); + const view = new DataView(buffer); + for (let i = 0; i < hex.length; i += 2) { + const byteString = hex.substring(i, i + 2); + const byteValue = parseInt(byteString, 16); + view.setUint8(i / 2, byteValue); + } + return new Uint8Array(buffer); + } + async function delay(ms) { + await new Promise((resolve) => setTimeout(resolve, ms)); + } + function timeDuration(start) { + return Math.floor((performance.now() - start) * 10) / 10; + } + class PasswordBuffer { + constructor(nonce, mode = "uint32") { + this.nonce = nonce; + this.mode = mode; + this.buffer = new Uint8Array(this.nonce.length + this.COUNTER_BYTES); + this.buffer.set(this.nonce, 0); + this.dataView = new DataView(this.buffer.buffer); + } + nonce; + mode; + COUNTER_BYTES = 4; + buffer; + dataView; + encoder = new TextEncoder(); + /** + * Appends the counter to the nonce buffer. + * In 'string' mode, encodes the counter as a UTF-8 string. + * In 'uint32' mode, writes the counter as a big-endian 32-bit integer. + */ + setCounter(n) { + if (this.mode === "string") { + return concatBuffers(this.nonce, this.encoder.encode(n.toString())); + } + this.dataView.setUint32(this.nonce.length, n, false); + return this.buffer; + } + } + async function solveChallenge(options) { + const { + challenge, + controller, + counterMode = "uint32", + counterStart = 0, + counterStep = 1, + deriveKey: deriveKey2, + timeout = 9e4 + } = options; + const { nonce, keyPrefix, salt } = challenge.parameters; + const nonceBuf = hexToBuffer(nonce); + const saltBuf = hexToBuffer(salt); + const keyPrefixBuf = keyPrefix.length % 2 === 0 ? hexToBuffer(keyPrefix) : null; + const password = new PasswordBuffer(nonceBuf, counterMode); + const start = performance.now(); + let counter = counterStart; + let iterations = 0; + let derivedKeyHex = ""; + let lastYield = start; + while (true) { + if (controller?.signal.aborted || timeout && iterations % 10 === 0 && performance.now() - start > timeout) { + return null; + } + const { derivedKey } = await deriveKey2( + challenge.parameters, + saltBuf, + password.setCounter(counter) + ); + if (iterations % 10 === 0 && performance.now() - lastYield > 200) { + await delay(0); + lastYield = performance.now(); + } + if (keyPrefixBuf ? bufferStartsWith(derivedKey, keyPrefixBuf) : bufferToHex(derivedKey).startsWith(keyPrefix)) { + derivedKeyHex = bufferToHex(derivedKey); + break; + } + counter = counter + counterStep; + iterations = iterations + 1; + } + return { + counter, + derivedKey: derivedKeyHex, + time: timeDuration(start) + }; + } + function handler(options) { + const { deriveKey: deriveKey2 } = options; + let controller = void 0; + self.onmessage = async (message) => { + const { challenge, counterMode, counterStart, counterStep, timeout, type } = message.data; + if (type === "abort") { + controller?.abort(); + } else if (type === "work") { + controller = new AbortController(); + let solution; + try { + solution = await solveChallenge({ + challenge, + controller, + counterStart, + counterStep, + deriveKey: deriveKey2, + counterMode, + timeout + }); + } catch (err) { + return self.postMessage({ error: err }); + } + self.postMessage(solution); + } + }; + } + function getDigest(algorithm) { + switch (algorithm) { + case "PBKDF2/SHA-512": + return "SHA-512"; + case "PBKDF2/SHA-384": + return "SHA-384"; + case "PBKDF2/SHA-256": + default: + return "SHA-256"; + } + } + async function deriveKey(parameters, salt, password) { + const { algorithm, cost, keyLength = 32 } = parameters; + const passwordKey = await crypto.subtle.importKey( + "raw", + password, + { name: "PBKDF2" }, + false, + ["deriveKey"] + ); + const derivedKey = await crypto.subtle.deriveKey( + { + name: "PBKDF2", + salt, + iterations: cost, + hash: getDigest(algorithm) + }, + passwordKey, + { name: "AES-GCM", length: keyLength * 8 }, + true, + ["encrypt"] + ); + return { + derivedKey: new Uint8Array(await crypto.subtle.exportKey("raw", derivedKey)) + }; + } + handler({ + deriveKey + }); +})(); diff --git a/frontend/node_modules/altcha/dist/workers/scrypt.js b/frontend/node_modules/altcha/dist/workers/scrypt.js new file mode 100644 index 0000000..a0e8abb --- /dev/null +++ b/frontend/node_modules/altcha/dist/workers/scrypt.js @@ -0,0 +1,744 @@ +(function() { + "use strict"; + function bufferStartsWith(buffer, prefix) { + if (prefix.length > buffer.length) { + return false; + } + for (let i = 0; i < prefix.length; i++) { + if (buffer[i] !== prefix[i]) { + return false; + } + } + return true; + } + function bufferToHex(buffer) { + return Array.from(new Uint8Array(buffer)).map((b) => b.toString(16).padStart(2, "0")).join(""); + } + function concatBuffers(a, b) { + const out = new Uint8Array(a.length + b.length); + out.set(a, 0); + out.set(b, a.length); + return out; + } + function hexToBuffer(hex) { + if (hex.length % 2 !== 0) { + throw new Error(`Hex string must have an even length. Got: ${hex}`); + } + const buffer = new ArrayBuffer(hex.length / 2); + const view = new DataView(buffer); + for (let i = 0; i < hex.length; i += 2) { + const byteString = hex.substring(i, i + 2); + const byteValue = parseInt(byteString, 16); + view.setUint8(i / 2, byteValue); + } + return new Uint8Array(buffer); + } + async function delay(ms) { + await new Promise((resolve) => setTimeout(resolve, ms)); + } + function timeDuration(start) { + return Math.floor((performance.now() - start) * 10) / 10; + } + class PasswordBuffer { + constructor(nonce, mode = "uint32") { + this.nonce = nonce; + this.mode = mode; + this.buffer = new Uint8Array(this.nonce.length + this.COUNTER_BYTES); + this.buffer.set(this.nonce, 0); + this.dataView = new DataView(this.buffer.buffer); + } + nonce; + mode; + COUNTER_BYTES = 4; + buffer; + dataView; + encoder = new TextEncoder(); + /** + * Appends the counter to the nonce buffer. + * In 'string' mode, encodes the counter as a UTF-8 string. + * In 'uint32' mode, writes the counter as a big-endian 32-bit integer. + */ + setCounter(n) { + if (this.mode === "string") { + return concatBuffers(this.nonce, this.encoder.encode(n.toString())); + } + this.dataView.setUint32(this.nonce.length, n, false); + return this.buffer; + } + } + async function solveChallenge(options) { + const { + challenge, + controller, + counterMode = "uint32", + counterStart = 0, + counterStep = 1, + deriveKey: deriveKey2, + timeout = 9e4 + } = options; + const { nonce, keyPrefix, salt } = challenge.parameters; + const nonceBuf = hexToBuffer(nonce); + const saltBuf = hexToBuffer(salt); + const keyPrefixBuf = keyPrefix.length % 2 === 0 ? hexToBuffer(keyPrefix) : null; + const password = new PasswordBuffer(nonceBuf, counterMode); + const start = performance.now(); + let counter = counterStart; + let iterations = 0; + let derivedKeyHex = ""; + let lastYield = start; + while (true) { + if (controller?.signal.aborted || timeout && iterations % 10 === 0 && performance.now() - start > timeout) { + return null; + } + const { derivedKey } = await deriveKey2( + challenge.parameters, + saltBuf, + password.setCounter(counter) + ); + if (iterations % 10 === 0 && performance.now() - lastYield > 200) { + await delay(0); + lastYield = performance.now(); + } + if (keyPrefixBuf ? bufferStartsWith(derivedKey, keyPrefixBuf) : bufferToHex(derivedKey).startsWith(keyPrefix)) { + derivedKeyHex = bufferToHex(derivedKey); + break; + } + counter = counter + counterStep; + iterations = iterations + 1; + } + return { + counter, + derivedKey: derivedKeyHex, + time: timeDuration(start) + }; + } + function handler(options) { + const { deriveKey: deriveKey2 } = options; + let controller = void 0; + self.onmessage = async (message) => { + const { challenge, counterMode, counterStart, counterStep, timeout, type } = message.data; + if (type === "abort") { + controller?.abort(); + } else if (type === "work") { + controller = new AbortController(); + let solution; + try { + solution = await solveChallenge({ + challenge, + controller, + counterStart, + counterStep, + deriveKey: deriveKey2, + counterMode, + timeout + }); + } catch (err) { + return self.postMessage({ error: err }); + } + self.postMessage(solution); + } + }; + } + function __awaiter(thisArg, _arguments, P, generator) { + function adopt(value) { + return value instanceof P ? value : new P(function(resolve) { + resolve(value); + }); + } + return new (P || (P = Promise))(function(resolve, reject) { + function fulfilled(value) { + try { + step(generator.next(value)); + } catch (e) { + reject(e); + } + } + function rejected(value) { + try { + step(generator["throw"](value)); + } catch (e) { + reject(e); + } + } + function step(result) { + result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); + } + step((generator = generator.apply(thisArg, [])).next()); + }); + } + typeof SuppressedError === "function" ? SuppressedError : function(error, suppressed, message) { + var e = new Error(message); + return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e; + }; + class Mutex { + constructor() { + this.mutex = Promise.resolve(); + } + lock() { + let begin = () => { + }; + this.mutex = this.mutex.then(() => new Promise(begin)); + return new Promise((res) => { + begin = res; + }); + } + dispatch(fn) { + return __awaiter(this, void 0, void 0, function* () { + const unlock = yield this.lock(); + try { + return yield Promise.resolve(fn()); + } finally { + unlock(); + } + }); + } + } + var _a; + function getGlobal() { + if (typeof globalThis !== "undefined") + return globalThis; + if (typeof self !== "undefined") + return self; + if (typeof window !== "undefined") + return window; + return global; + } + const globalObject = getGlobal(); + const nodeBuffer = (_a = globalObject.Buffer) !== null && _a !== void 0 ? _a : null; + const textEncoder = globalObject.TextEncoder ? new globalObject.TextEncoder() : null; + function hexCharCodesToInt(a, b) { + return (a & 15) + (a >> 6 | a >> 3 & 8) << 4 | (b & 15) + (b >> 6 | b >> 3 & 8); + } + function writeHexToUInt8(buf, str) { + const size = str.length >> 1; + for (let i = 0; i < size; i++) { + const index = i << 1; + buf[i] = hexCharCodesToInt(str.charCodeAt(index), str.charCodeAt(index + 1)); + } + } + function hexStringEqualsUInt8(str, buf) { + if (str.length !== buf.length * 2) { + return false; + } + for (let i = 0; i < buf.length; i++) { + const strIndex = i << 1; + if (buf[i] !== hexCharCodesToInt(str.charCodeAt(strIndex), str.charCodeAt(strIndex + 1))) { + return false; + } + } + return true; + } + const alpha = "a".charCodeAt(0) - 10; + const digit = "0".charCodeAt(0); + function getDigestHex(tmpBuffer, input, hashLength) { + let p = 0; + for (let i = 0; i < hashLength; i++) { + let nibble = input[i] >>> 4; + tmpBuffer[p++] = nibble > 9 ? nibble + alpha : nibble + digit; + nibble = input[i] & 15; + tmpBuffer[p++] = nibble > 9 ? nibble + alpha : nibble + digit; + } + return String.fromCharCode.apply(null, tmpBuffer); + } + const getUInt8Buffer = nodeBuffer !== null ? (data) => { + if (typeof data === "string") { + const buf = nodeBuffer.from(data, "utf8"); + return new Uint8Array(buf.buffer, buf.byteOffset, buf.length); + } + if (nodeBuffer.isBuffer(data)) { + return new Uint8Array(data.buffer, data.byteOffset, data.length); + } + if (ArrayBuffer.isView(data)) { + return new Uint8Array(data.buffer, data.byteOffset, data.byteLength); + } + throw new Error("Invalid data type!"); + } : (data) => { + if (typeof data === "string") { + return textEncoder.encode(data); + } + if (ArrayBuffer.isView(data)) { + return new Uint8Array(data.buffer, data.byteOffset, data.byteLength); + } + throw new Error("Invalid data type!"); + }; + const base64Chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; + const base64Lookup = new Uint8Array(256); + for (let i = 0; i < base64Chars.length; i++) { + base64Lookup[base64Chars.charCodeAt(i)] = i; + } + function getDecodeBase64Length(data) { + let bufferLength = Math.floor(data.length * 0.75); + const len = data.length; + if (data[len - 1] === "=") { + bufferLength -= 1; + if (data[len - 2] === "=") { + bufferLength -= 1; + } + } + return bufferLength; + } + function decodeBase64(data) { + const bufferLength = getDecodeBase64Length(data); + const len = data.length; + const bytes = new Uint8Array(bufferLength); + let p = 0; + for (let i = 0; i < len; i += 4) { + const encoded1 = base64Lookup[data.charCodeAt(i)]; + const encoded2 = base64Lookup[data.charCodeAt(i + 1)]; + const encoded3 = base64Lookup[data.charCodeAt(i + 2)]; + const encoded4 = base64Lookup[data.charCodeAt(i + 3)]; + bytes[p] = encoded1 << 2 | encoded2 >> 4; + p += 1; + bytes[p] = (encoded2 & 15) << 4 | encoded3 >> 2; + p += 1; + bytes[p] = (encoded3 & 3) << 6 | encoded4 & 63; + p += 1; + } + return bytes; + } + const MAX_HEAP = 16 * 1024; + const WASM_FUNC_HASH_LENGTH = 4; + const wasmMutex = new Mutex(); + const wasmModuleCache = /* @__PURE__ */ new Map(); + function WASMInterface(binary, hashLength) { + return __awaiter(this, void 0, void 0, function* () { + let wasmInstance = null; + let memoryView = null; + let initialized = false; + if (typeof WebAssembly === "undefined") { + throw new Error("WebAssembly is not supported in this environment!"); + } + const writeMemory = (data, offset = 0) => { + memoryView.set(data, offset); + }; + const getMemory = () => memoryView; + const getExports = () => wasmInstance.exports; + const setMemorySize = (totalSize) => { + wasmInstance.exports.Hash_SetMemorySize(totalSize); + const arrayOffset = wasmInstance.exports.Hash_GetBuffer(); + const memoryBuffer = wasmInstance.exports.memory.buffer; + memoryView = new Uint8Array(memoryBuffer, arrayOffset, totalSize); + }; + const getStateSize = () => { + const view = new DataView(wasmInstance.exports.memory.buffer); + const stateSize = view.getUint32(wasmInstance.exports.STATE_SIZE, true); + return stateSize; + }; + const loadWASMPromise = wasmMutex.dispatch(() => __awaiter(this, void 0, void 0, function* () { + if (!wasmModuleCache.has(binary.name)) { + const asm = decodeBase64(binary.data); + const promise = WebAssembly.compile(asm); + wasmModuleCache.set(binary.name, promise); + } + const module = yield wasmModuleCache.get(binary.name); + wasmInstance = yield WebAssembly.instantiate(module, { + // env: { + // emscripten_memcpy_big: (dest, src, num) => { + // const memoryBuffer = wasmInstance.exports.memory.buffer; + // const memView = new Uint8Array(memoryBuffer, 0); + // memView.set(memView.subarray(src, src + num), dest); + // }, + // print_memory: (offset, len) => { + // const memoryBuffer = wasmInstance.exports.memory.buffer; + // const memView = new Uint8Array(memoryBuffer, 0); + // console.log('print_int32', memView.subarray(offset, offset + len)); + // }, + // }, + }); + })); + const setupInterface = () => __awaiter(this, void 0, void 0, function* () { + if (!wasmInstance) { + yield loadWASMPromise; + } + const arrayOffset = wasmInstance.exports.Hash_GetBuffer(); + const memoryBuffer = wasmInstance.exports.memory.buffer; + memoryView = new Uint8Array(memoryBuffer, arrayOffset, MAX_HEAP); + }); + const init = (bits = null) => { + initialized = true; + wasmInstance.exports.Hash_Init(bits); + }; + const updateUInt8Array = (data) => { + let read = 0; + while (read < data.length) { + const chunk = data.subarray(read, read + MAX_HEAP); + read += chunk.length; + memoryView.set(chunk); + wasmInstance.exports.Hash_Update(chunk.length); + } + }; + const update = (data) => { + if (!initialized) { + throw new Error("update() called before init()"); + } + const Uint8Buffer = getUInt8Buffer(data); + updateUInt8Array(Uint8Buffer); + }; + const digestChars = new Uint8Array(hashLength * 2); + const digest = (outputType, padding = null) => { + if (!initialized) { + throw new Error("digest() called before init()"); + } + initialized = false; + wasmInstance.exports.Hash_Final(padding); + if (outputType === "binary") { + return memoryView.slice(0, hashLength); + } + return getDigestHex(digestChars, memoryView, hashLength); + }; + const save = () => { + if (!initialized) { + throw new Error("save() can only be called after init() and before digest()"); + } + const stateOffset = wasmInstance.exports.Hash_GetState(); + const stateLength = getStateSize(); + const memoryBuffer = wasmInstance.exports.memory.buffer; + const internalState = new Uint8Array(memoryBuffer, stateOffset, stateLength); + const prefixedState = new Uint8Array(WASM_FUNC_HASH_LENGTH + stateLength); + writeHexToUInt8(prefixedState, binary.hash); + prefixedState.set(internalState, WASM_FUNC_HASH_LENGTH); + return prefixedState; + }; + const load = (state) => { + if (!(state instanceof Uint8Array)) { + throw new Error("load() expects an Uint8Array generated by save()"); + } + const stateOffset = wasmInstance.exports.Hash_GetState(); + const stateLength = getStateSize(); + const overallLength = WASM_FUNC_HASH_LENGTH + stateLength; + const memoryBuffer = wasmInstance.exports.memory.buffer; + if (state.length !== overallLength) { + throw new Error(`Bad state length (expected ${overallLength} bytes, got ${state.length})`); + } + if (!hexStringEqualsUInt8(binary.hash, state.subarray(0, WASM_FUNC_HASH_LENGTH))) { + throw new Error("This state was written by an incompatible hash implementation"); + } + const internalState = state.subarray(WASM_FUNC_HASH_LENGTH); + new Uint8Array(memoryBuffer, stateOffset, stateLength).set(internalState); + initialized = true; + }; + const isDataShort = (data) => { + if (typeof data === "string") { + return data.length < MAX_HEAP / 4; + } + return data.byteLength < MAX_HEAP; + }; + let canSimplify = isDataShort; + switch (binary.name) { + case "argon2": + case "scrypt": + canSimplify = () => true; + break; + case "blake2b": + case "blake2s": + canSimplify = (data, initParam) => initParam <= 512 && isDataShort(data); + break; + case "blake3": + canSimplify = (data, initParam) => initParam === 0 && isDataShort(data); + break; + case "xxhash64": + // cannot simplify + case "xxhash3": + case "xxhash128": + case "crc64": + canSimplify = () => false; + break; + } + const calculate = (data, initParam = null, digestParam = null) => { + if (!canSimplify(data, initParam)) { + init(initParam); + update(data); + return digest("hex", digestParam); + } + const buffer = getUInt8Buffer(data); + memoryView.set(buffer); + wasmInstance.exports.Hash_Calculate(buffer.length, initParam, digestParam); + return getDigestHex(digestChars, memoryView, hashLength); + }; + yield setupInterface(); + return { + getMemory, + writeMemory, + getExports, + setMemorySize, + init, + update, + digest, + save, + load, + calculate, + hashLength + }; + }); + } + new Mutex(); + new Mutex(); + new Mutex(); + new Mutex(); + new Mutex(); + new Mutex(); + new Mutex(); + new Mutex(); + new Mutex(); + new Mutex(); + new Mutex(); + var name$a = "sha256"; + var data$a = "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c2pBx6KerX1qIhkgASADcyACcSABIANxcyABQR53IAFBE3dzIAFBCndzaiAaaiICaiIJIBMgEnNxIBJzaiAJQRp3IAlBFXdzIAlBB3dzakHRxqk2aiIaIAIgAXMgA3EgAiABcXMgAkEedyACQRN3cyACQQp3c2ogGGoiA2oiESAJIBNzcSATc2ogEUEadyARQRV3cyARQQd3c2pB59KkoQFqIhggAyACcyABcSADIAJxcyADQR53IANBE3dzIANBCndzaiAUaiIBaiISIBEgCXNxIAlzaiASQRp3IBJBFXdzIBJBB3dzakGFldy9AmoiFCABIANzIAJxIAEgA3FzIAFBHncgAUETd3MgAUEKd3NqIBdqIgJqIhMgI2ogJiASaiAiIBFqICUgCWogEyASIBFzcSARc2ogE0EadyATQRV3cyATQQd3c2pBuMLs8AJqIhcgAiABcyADcSACIAFxcyACQR53IAJBE3dzIAJBCndzaiAZaiIDaiIJIBMgEnNxIBJzaiAJQRp3IAlBFXdzIAlBB3dzakH827HpBGoiGSADIAJzIAFxIAMgAnFzIANBHncgA0ETd3MgA0EKd3NqIBpqIgFqIhEgCSATc3EgE3NqIBFBGncgEUEVd3MgEUEHd3NqQZOa4JkFaiIaIAEgA3MgAnEgASADcXMgAUEedyABQRN3cyABQQp3c2ogGGoiAmoiEiARIAlzcSAJc2ogEkEadyASQRV3cyASQQd3c2pB1OapqAZqIhggAiABcyADcSACIAFxcyACQR53IAJBE3dzIAJBCndzaiAUaiIDaiITaiAoIBJqICQgEWogJyAJaiATIBIgEXNxIBFzaiATQRp3IBNBFXdzIBNBB3dzakG7laizB2oiFCADIAJzIAFxIAMgAnFzIANBHncgA0ETd3MgA0EKd3NqIBdqIgFqIgkgEyASc3EgEnNqIAlBGncgCUEVd3MgCUEHd3NqQa6Si454aiIXIAEgA3MgAnEgASADcXMgAUEedyABQRN3cyABQQp3c2ogGWoiAmoiESAJIBNzcSATc2ogEUEadyARQRV3cyARQQd3c2pBhdnIk3lqIhkgAiABcyADcSACIAFxcyACQR53IAJBE3dzIAJBCndzaiAaaiIDaiISIBEgCXNxIAlzaiASQRp3IBJBFXdzIBJBB3dzakGh0f+VemoiGiADIAJz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"; + var hash$a = "8c18dd94"; + var wasmJson$a = { + name: name$a, + data: data$a, + hash: hash$a + }; + new Mutex(); + new Mutex(); + function createSHA256() { + return WASMInterface(wasmJson$a, 32).then((wasm) => { + wasm.init(256); + const obj = { + init: () => { + wasm.init(256); + return obj; + }, + update: (data) => { + wasm.update(data); + return obj; + }, + // biome-ignore lint/suspicious/noExplicitAny: Conflict with IHasher type + digest: (outputType) => wasm.digest(outputType), + save: () => wasm.save(), + load: (data) => { + wasm.load(data); + return obj; + }, + blockSize: 64, + digestSize: 32 + }; + return obj; + }); + } + new Mutex(); + new Mutex(); + new Mutex(); + new Mutex(); + new Mutex(); + new Mutex(); + new Mutex(); + function calculateKeyBuffer(hasher, key) { + const { blockSize } = hasher; + const buf = getUInt8Buffer(key); + if (buf.length > blockSize) { + hasher.update(buf); + const uintArr = hasher.digest("binary"); + hasher.init(); + return uintArr; + } + return new Uint8Array(buf.buffer, buf.byteOffset, buf.length); + } + function calculateHmac(hasher, key) { + hasher.init(); + const { blockSize } = hasher; + const keyBuf = calculateKeyBuffer(hasher, key); + const keyBuffer = new Uint8Array(blockSize); + keyBuffer.set(keyBuf); + const opad = new Uint8Array(blockSize); + for (let i = 0; i < blockSize; i++) { + const v = keyBuffer[i]; + opad[i] = v ^ 92; + keyBuffer[i] = v ^ 54; + } + hasher.update(keyBuffer); + const obj = { + init: () => { + hasher.init(); + hasher.update(keyBuffer); + return obj; + }, + update: (data) => { + hasher.update(data); + return obj; + }, + digest: ((outputType) => { + const uintArr = hasher.digest("binary"); + hasher.init(); + hasher.update(opad); + hasher.update(uintArr); + return hasher.digest(outputType); + }), + save: () => { + throw new Error("save() not supported"); + }, + load: () => { + throw new Error("load() not supported"); + }, + blockSize: hasher.blockSize, + digestSize: hasher.digestSize + }; + return obj; + } + function createHMAC(hash, key) { + if (!hash || !hash.then) { + throw new Error('Invalid hash function is provided! Usage: createHMAC(createMD5(), "key").'); + } + return hash.then((hasher) => calculateHmac(hasher, key)); + } + function calculatePBKDF2(digest, salt, iterations, hashLength, outputType) { + return __awaiter(this, void 0, void 0, function* () { + const DK = new Uint8Array(hashLength); + const block1 = new Uint8Array(salt.length + 4); + const block1View = new DataView(block1.buffer); + const saltBuffer = getUInt8Buffer(salt); + const saltUIntBuffer = new Uint8Array(saltBuffer.buffer, saltBuffer.byteOffset, saltBuffer.length); + block1.set(saltUIntBuffer); + let destPos = 0; + const hLen = digest.digestSize; + const l = Math.ceil(hashLength / hLen); + let T = null; + let U = null; + for (let i = 1; i <= l; i++) { + block1View.setUint32(salt.length, i); + digest.init(); + digest.update(block1); + T = digest.digest("binary"); + U = T.slice(); + for (let j = 1; j < iterations; j++) { + digest.init(); + digest.update(U); + U = digest.digest("binary"); + for (let k = 0; k < hLen; k++) { + T[k] ^= U[k]; + } + } + DK.set(T.subarray(0, hashLength - destPos), destPos); + destPos += hLen; + } + if (outputType === "binary") { + return DK; + } + const digestChars = new Uint8Array(hashLength * 2); + return getDigestHex(digestChars, DK, hashLength); + }); + } + const validateOptions$2 = (options) => { + if (!options || typeof options !== "object") { + throw new Error("Invalid options parameter. It requires an object."); + } + if (!options.hashFunction || !options.hashFunction.then) { + throw new Error('Invalid hash function is provided! Usage: pbkdf2("password", "salt", 1000, 32, createSHA1()).'); + } + if (!Number.isInteger(options.iterations) || options.iterations < 1) { + throw new Error("Iterations should be a positive number"); + } + if (!Number.isInteger(options.hashLength) || options.hashLength < 1) { + throw new Error("Hash length should be a positive number"); + } + if (options.outputType === void 0) { + options.outputType = "hex"; + } + if (!["hex", "binary"].includes(options.outputType)) { + throw new Error(`Insupported output type ${options.outputType}. Valid values: ['hex', 'binary']`); + } + }; + function pbkdf2(options) { + return __awaiter(this, void 0, void 0, function* () { + validateOptions$2(options); + const hmac = yield createHMAC(options.hashFunction, options.password); + return calculatePBKDF2(hmac, options.salt, options.iterations, options.hashLength, options.outputType); + }); + } + var name$3 = "scrypt"; + var data$3 = "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cyICajYCOCAAIAAoAjwgAiAKakESdyAGc2o2AjwLvxIDFX8Bfg5/AkAgAkUNACAAQQd0IgNBQGoiBEEAKAKACCIFIAMgAmwiBmogAyABbGoiByADaiIIaiEJIAAgAkEHdCIKIAFBB3RqIgtsIQwgACALQYABamwhDSAAQQV0IgtBASALQQFLGyILQWBxIQ4gC0EBcSEPIAdBeGohECAHQXBqIREgB0FoaiESIAdBYGohEyAHQVhqIRQgB0FQaiEVIAdBSGohFiAHQUBqIRcgAa1Cf3whGCAEIAdqIRkgByAAQQh0IhpqIRsgACAKQYABamwhHCALQQRJIR1BACEeQQAhHwNAQQAoAoAIIiAgAyAfbGohIQJAIABFDQBBACEiAkAgHQ0AICAgHmohI0EAIQtBACEiA0AgByALaiIEICMgC2oiJCgCADYCACAEQQRqICRBBGooAgA2AgAgBEEIaiAkQQhqKAIANgIAIARBDGogJEEMaigCADYCACALQRBqIQsgDiAiQQRqIiJHDQALCyAPRQ0AIAcgIkECdCILaiAhIAtqKAIANgIACwJAIAFFDQBBACElIBwhIyAGISYDQCAFISQgACEiAkACQCAADQAgGyAXKQMANwMAIBsgFikDADcDCCAbIBUpAwA3AxAgGyAUKQMANwMYIBsgEykDADcDICAbIBIpAwA3AyggGyARKQMANwMwIBsgECkDADcDOAwBCwNAICQgJmoiCyAkIAxqIgQpAwA3AwAgC0EIaiAEQQhqKQMANwMAIAtBEGogBEEQaikDADcDACALQRhqIARBGGopAwA3AwAgC0EgaiAEQSBqKQMANwMAIAtBKGogBEEoaikDADcDACALQTBqIARBMGopAwA3AwAgC0E4aiAEQThqKQMANwMAIAtBwABqIARBwABqKQMANwMAIAtByABqIARByABqKQMANwMAIAtB0ABqIARB0ABqKQMANwMAIAtB2ABqIARB2ABqKQMANwMAIAtB4ABqIARB4ABqKQMANwMAIAtB6ABqIARB6ABqKQMANwMAIAtB8ABqIARB8ABqKQMANwMAIAtB+ABqIARB+ABqKQMANwMAICRBgAFqISQgIkF/aiIiDQALIAcgCCAbIAAQAiAFISQgACEiA0AgJCAjaiILICQgDWoiBCkDADcDACALQQhqIARBCGopAwA3AwAgC0EQaiAEQRBqKQMANwMAIAtBGGogBEEYaikDADcDACALQSBqIARBIGopAwA3AwAgC0EoaiAEQShqKQMANwMAIAtBMGogBEEwaikDADcDACALQThqIARBOGopAwA3AwAgC0HAAGogBEHAAGopAwA3AwAgC0HIAGogBEHIAGopAwA3AwAgC0HQAGogBEHQAGopAwA3AwAgC0HYAGogBEHYAGopAwA3AwAgC0HgAGogBEHgAGopAwA3AwAgC0HoAGogBEHoAGopAwA3AwAgC0HwAGogBEHwAGopAwA3AwAgC0H4AGogBEH4AGopAwA3AwAgJEGAAWohJCAiQX9qIiINAAsLIAggByAbIAAQAiAjIBpqISMgJiAaaiEmICVBAmoiJSABSQ0AC0EAISUDQAJAAkAgAA0AIBsgFykDADcDACAbIBYpAwA3AwggGyAVKQMANwMQIBsgFCkDADcDGCAbIBMpAwA3AyAgGyASKQMANwMoIBsgESkDADcDMCAbIBApAwA3AzgMAQsgACAKIBkpAgAgGIOnQQd0amwhJiAFISQgACEiA0AgJCAMaiILIAspAwAgJCAmaiIEKQMAhTcDACALQQhqIiMgIykDACAEQQhqKQMAhTcDACALQRBqIiMgIykDACAEQRBqKQMAhTcDACALQRhqIiMgIykDACAEQRhqKQMAhTcDACALQSBqIiMgIykDACAEQSBqKQMAhTcDACALQShqIiMgIykDACAEQShqKQMAhTcDACALQTBqIiMgIykDACAEQTBqKQMAhTcDACALQThqIiMgIykDACAEQThqKQMAhTcDACALQcAAaiIjICMpAwAgBEHAAGopAwCFNwMAIAtByABqIiMgIykDACAEQcgAaikDAIU3AwAgC0HQAGoiIyAjKQMAIARB0ABqKQMAhTcDACALQdgAaiIjICMpAwAgBEHYAGopAwCFNwMAIAtB4ABqIiMgIykDACAEQeAAaikDAIU3AwAgC0HoAGoiIyAjKQMAIARB6ABqKQMAhTcDACALQfAAaiIjICMpAwAgBEHwAGopAwCFNwMAIAtB+ABqIgsgCykDACAEQfgAaikDAIU3AwAgJEGAAWohJCAiQX9qIiINAAsgByAIIBsgABACIAAgCiAJKQIAIBiDp0EHdGpsISYgBSEkIAAhIgNAICQgDWoiCyALKQMAICQgJmoiBCkDAIU3AwAgC0EIaiIjICMpAwAgBEEIaikDAIU3AwAgC0EQaiIjICMpAwAgBEEQaikDAIU3AwAgC0EYaiIjICMpAwAgBEEYaikDAIU3AwAgC0EgaiIjICMpAwAgBEEgaikDAIU3AwAgC0EoaiIjICMpAwAgBEEoaikDAIU3AwAgC0EwaiIjICMpAwAgBEEwaikDAIU3AwAgC0E4aiIjICMpAwAgBEE4aikDAIU3AwAgC0HAAGoiIyAjKQMAIARBwABqKQMAhTcDACALQcgAaiIjICMpAwAgBEHIAGopAwCFNwMAIAtB0ABqIiMgIykDACAEQdAAaikDAIU3AwAgC0HYAGoiIyAjKQMAIARB2ABqKQMAhTcDACALQeAAaiIjICMpAwAgBEHgAGopAwCFNwMAIAtB6ABqIiMgIykDACAEQegAaikDAIU3AwAgC0HwAGoiIyAjKQMAIARB8ABqKQMAhTcDACALQfgAaiILIAspAwAgBEH4AGopAwCFNwMAICRBgAFqISQgIkF/aiIiDQALCyAIIAcgGyAAEAIgJUECaiIlIAFJDQALCwJAIABFDQBBACEiAkAgHQ0AICAgHmohI0EAIQtBACEiA0AgIyALaiIEIAcgC2oiJCgCADYCACAEQQRqICRBBGooAgA2AgAgBEEIaiAkQQhqKAIANgIAIARBDGogJEEMaigCADYCACALQRBqIQsgDiAiQQRqIiJHDQALCyAPRQ0AICEgIkECdCILaiAHIAtqKAIANgIACyAeIANqIR4gH0EBaiIfIAJHDQALCws="; + var hash$3 = "b32721f8"; + var wasmJson$3 = { + name: name$3, + data: data$3, + hash: hash$3 + }; + function scryptInternal(options) { + return __awaiter(this, void 0, void 0, function* () { + const { costFactor, blockSize, parallelism, hashLength } = options; + const SHA256Hasher = createSHA256(); + const blockData = yield pbkdf2({ + password: options.password, + salt: options.salt, + iterations: 1, + hashLength: 128 * blockSize * parallelism, + hashFunction: SHA256Hasher, + outputType: "binary" + }); + const scryptInterface = yield WASMInterface(wasmJson$3, 0); + const VSize = 128 * blockSize * costFactor; + const XYSize = 256 * blockSize; + scryptInterface.setMemorySize(blockData.length + VSize + XYSize); + scryptInterface.writeMemory(blockData, 0); + scryptInterface.getExports().scrypt(blockSize, costFactor, parallelism); + const expensiveSalt = scryptInterface.getMemory().subarray(0, 128 * blockSize * parallelism); + const outputData = yield pbkdf2({ + password: options.password, + salt: expensiveSalt, + iterations: 1, + hashLength, + hashFunction: SHA256Hasher, + outputType: "binary" + }); + if (options.outputType === "hex") { + const digestChars = new Uint8Array(hashLength * 2); + return getDigestHex(digestChars, outputData, hashLength); + } + return outputData; + }); + } + const isPowerOfTwo = (v) => v && !(v & v - 1); + const validateOptions$1 = (options) => { + if (!options || typeof options !== "object") { + throw new Error("Invalid options parameter. It requires an object."); + } + if (!Number.isInteger(options.blockSize) || options.blockSize < 1) { + throw new Error("Block size should be a positive number"); + } + if (!Number.isInteger(options.costFactor) || options.costFactor < 2 || !isPowerOfTwo(options.costFactor)) { + throw new Error("Cost factor should be a power of 2, greater than 1"); + } + if (!Number.isInteger(options.parallelism) || options.parallelism < 1) { + throw new Error("Parallelism should be a positive number"); + } + if (!Number.isInteger(options.hashLength) || options.hashLength < 1) { + throw new Error("Hash length should be a positive number."); + } + if (options.outputType === void 0) { + options.outputType = "hex"; + } + if (!["hex", "binary"].includes(options.outputType)) { + throw new Error(`Insupported output type ${options.outputType}. Valid values: ['hex', 'binary']`); + } + }; + function scrypt(options) { + return __awaiter(this, void 0, void 0, function* () { + validateOptions$1(options); + return scryptInternal(options); + }); + } + new Mutex(); + new Mutex(); + async function deriveKey(parameters, salt, password) { + const { cost, keyLength = 32, memoryCost = 8, parallelism = 1 } = parameters; + return { + parameters: { + memoryCost, + parallelism + }, + derivedKey: await scrypt({ + password, + salt, + blockSize: memoryCost, + costFactor: cost, + hashLength: keyLength, + parallelism, + outputType: "binary" + }) + }; + } + handler({ + deriveKey + }); +})(); diff --git a/frontend/node_modules/altcha/dist/workers/sha.js b/frontend/node_modules/altcha/dist/workers/sha.js new file mode 100644 index 0000000..5117902 --- /dev/null +++ b/frontend/node_modules/altcha/dist/workers/sha.js @@ -0,0 +1,165 @@ +(function() { + "use strict"; + function bufferStartsWith(buffer, prefix) { + if (prefix.length > buffer.length) { + return false; + } + for (let i = 0; i < prefix.length; i++) { + if (buffer[i] !== prefix[i]) { + return false; + } + } + return true; + } + function bufferToHex(buffer) { + return Array.from(new Uint8Array(buffer)).map((b) => b.toString(16).padStart(2, "0")).join(""); + } + function concatBuffers(a, b) { + const out = new Uint8Array(a.length + b.length); + out.set(a, 0); + out.set(b, a.length); + return out; + } + function hexToBuffer(hex) { + if (hex.length % 2 !== 0) { + throw new Error(`Hex string must have an even length. Got: ${hex}`); + } + const buffer = new ArrayBuffer(hex.length / 2); + const view = new DataView(buffer); + for (let i = 0; i < hex.length; i += 2) { + const byteString = hex.substring(i, i + 2); + const byteValue = parseInt(byteString, 16); + view.setUint8(i / 2, byteValue); + } + return new Uint8Array(buffer); + } + async function delay(ms) { + await new Promise((resolve) => setTimeout(resolve, ms)); + } + function timeDuration(start) { + return Math.floor((performance.now() - start) * 10) / 10; + } + class PasswordBuffer { + constructor(nonce, mode = "uint32") { + this.nonce = nonce; + this.mode = mode; + this.buffer = new Uint8Array(this.nonce.length + this.COUNTER_BYTES); + this.buffer.set(this.nonce, 0); + this.dataView = new DataView(this.buffer.buffer); + } + nonce; + mode; + COUNTER_BYTES = 4; + buffer; + dataView; + encoder = new TextEncoder(); + /** + * Appends the counter to the nonce buffer. + * In 'string' mode, encodes the counter as a UTF-8 string. + * In 'uint32' mode, writes the counter as a big-endian 32-bit integer. + */ + setCounter(n) { + if (this.mode === "string") { + return concatBuffers(this.nonce, this.encoder.encode(n.toString())); + } + this.dataView.setUint32(this.nonce.length, n, false); + return this.buffer; + } + } + async function solveChallenge(options) { + const { + challenge, + controller, + counterMode = "uint32", + counterStart = 0, + counterStep = 1, + deriveKey: deriveKey2, + timeout = 9e4 + } = options; + const { nonce, keyPrefix, salt } = challenge.parameters; + const nonceBuf = hexToBuffer(nonce); + const saltBuf = hexToBuffer(salt); + const keyPrefixBuf = keyPrefix.length % 2 === 0 ? hexToBuffer(keyPrefix) : null; + const password = new PasswordBuffer(nonceBuf, counterMode); + const start = performance.now(); + let counter = counterStart; + let iterations = 0; + let derivedKeyHex = ""; + let lastYield = start; + while (true) { + if (controller?.signal.aborted || timeout && iterations % 10 === 0 && performance.now() - start > timeout) { + return null; + } + const { derivedKey } = await deriveKey2( + challenge.parameters, + saltBuf, + password.setCounter(counter) + ); + if (iterations % 10 === 0 && performance.now() - lastYield > 200) { + await delay(0); + lastYield = performance.now(); + } + if (keyPrefixBuf ? bufferStartsWith(derivedKey, keyPrefixBuf) : bufferToHex(derivedKey).startsWith(keyPrefix)) { + derivedKeyHex = bufferToHex(derivedKey); + break; + } + counter = counter + counterStep; + iterations = iterations + 1; + } + return { + counter, + derivedKey: derivedKeyHex, + time: timeDuration(start) + }; + } + function handler(options) { + const { deriveKey: deriveKey2 } = options; + let controller = void 0; + self.onmessage = async (message) => { + const { challenge, counterMode, counterStart, counterStep, timeout, type } = message.data; + if (type === "abort") { + controller?.abort(); + } else if (type === "work") { + controller = new AbortController(); + let solution; + try { + solution = await solveChallenge({ + challenge, + controller, + counterStart, + counterStep, + deriveKey: deriveKey2, + counterMode, + timeout + }); + } catch (err) { + return self.postMessage({ error: err }); + } + self.postMessage(solution); + } + }; + } + async function deriveKey(parameters, salt, password) { + const { algorithm, keyLength = 32 } = parameters; + const iterations = Math.max(1, parameters.cost); + let data = void 0; + let derivedKey = void 0; + for (let i = 0; i < iterations; i++) { + if (i === 0) { + data = concatBuffers(salt, password); + } else { + data = derivedKey; + } + derivedKey = new Uint8Array( + (await crypto.subtle.digest(algorithm, data)).slice(0, keyLength) + ); + } + return { + parameters: {}, + derivedKey + }; + } + handler({ + deriveKey + }); +})(); diff --git a/frontend/node_modules/altcha/package.json b/frontend/node_modules/altcha/package.json new file mode 100644 index 0000000..3ece8bb --- /dev/null +++ b/frontend/node_modules/altcha/package.json @@ -0,0 +1,152 @@ +{ + "name": "altcha", + "description": "Privacy-first CAPTCHA widget, compliant with global regulations (GDPR/HIPAA/CCPA/LGDP/DPDPA/PIPL) and WCAG accessible. No tracking, self-verifying.", + "version": "3.2.1", + "license": "MIT", + "author": { + "name": "Daniel Regeci", + "url": "https://altcha.org" + }, + "homepage": "https://altcha.org", + "repository": { + "type": "git", + "url": "git+https://github.com/altcha-org/altcha.git" + }, + "keywords": [ + "altcha", + "altcaptcha", + "captcha", + "captcha alternative", + "recaptcha", + "hcaptcha", + "antispam", + "anti-abuse", + "anti-bot", + "anti-ddos", + "anti-scraping", + "ddos", + "security", + "pow", + "proof-of-work", + "spam", + "spam filter", + "protection", + "svelte" + ], + "type": "module", + "files": [ + "dist" + ], + "main": "./dist/main/altcha.umd.cjs", + "module": "./dist/main/altcha.js", + "exports": { + ".": { + "types": "./dist/types/generic.d.ts", + "import": "./dist/main/altcha.js", + "require": "./dist/main/altcha.umd.cjs" + }, + "./altcha.css": { + "import": "./dist/external/altcha.css", + "require": "./dist/external/altcha.css" + }, + "./external": { + "types": "./dist/types/generic.d.ts", + "import": "./dist/external/altcha.js", + "require": "./dist/external/altcha.umd.cjs" + }, + "./i18n": { + "types": "./dist/types/generic.d.ts", + "import": "./dist/main/altcha.i18n.js", + "require": "./dist/main/altcha.i18n.umd.cjs" + }, + "./i18n/*": { + "types": "./dist/external/*.d.ts", + "import": "./dist/i18n/*.js", + "require": "./dist/i18n/*.umd.cjs" + }, + "./lib": { + "types": "./dist/lib/index.d.ts", + "import": "./dist/lib/index.js", + "require": "./dist/lib/index.umd.cjs" + }, + "./plugins/*": { + "types": "./dist/plugins/*.plugin.d.ts", + "import": "./dist/plugins/*.plugin.js", + "require": "./dist/plugins/*.plugin.umd.cjs" + }, + "./themes/*": { + "import": "./dist/themes/*", + "require": "./dist/themes/*" + }, + "./types": { + "types": "./dist/types/index.d.ts", + "import": "./dist/types/index.js" + }, + "./types/*": { + "types": "./dist/types/*.d.ts", + "import": "./dist/types/*.js" + }, + "./workers/*": { + "import": "./dist/workers/*.js" + } + }, + "scripts": { + "dev": "vite -c vite.config.playground.ts", + "build": "npm run build:main && npm run build:external && npm run build:i18n && npm run build:plugins && npm run build:themes && npm run build:types && npm run build:lib", + "build:main": "rimraf dist/main && vite build && vite build --config vite.config.i18n-bundle.ts", + "build:external": "rimraf dist/external && vite build --config vite.config.external.ts", + "build:i18n": "rimraf dist/i18n && find src/i18n -type f -name '*.ts' | xargs -I {} vite build -c vite.config.i18n.ts -- {}", + "build:lib": "rimraf dist/lib && vite build -c vite.config.lib.ts && npm run build:lib:types", + "build:lib:types": "dts-bundle-generator --project tsconfig.lib.json -o dist/lib/index.d.ts src/entry-lib.ts", + "build:plugins": "rimraf dist/plugins && find src/plugins -type f -name '*.ts' -not -name 'base.plugin.ts' | xargs -I {} vite build -c vite.config.plugins.ts -- {}", + "build:themes": "rimraf dist/themes && vite build --config vite.config.themes.ts", + "build:types": "rimraf dist/types && tsc --declaration --target es6 --jsx react-jsx --skipLibCheck --moduleResolution bundler --outDir dist/types src/types/*.ts", + "build:playground": "rimraf dist_playground && vite build --config vite.config.playground.ts", + "preview": "vite preview", + "check": "svelte-check --tsconfig ./tsconfig.app.json && tsc -p tsconfig.node.json", + "lint": "prettier --check .", + "format": "prettier --write .", + "test": "vitest", + "test:e2e": "vitest run --config vite.config.e2e.ts", + "prepare": "husky" + }, + "devDependencies": { + "@rollup/plugin-terser": "^1.0.0", + "@sveltejs/vite-plugin-svelte": "^6.2.1", + "@tailwindcss/typography": "^0.5.19", + "@tailwindcss/vite": "^4.1.18", + "@tsconfig/svelte": "^5.0.6", + "@types/node": "^24.10.1", + "@types/react": "^19.2.10", + "@types/react-dom": "^19.2.3", + "@vitest/browser-playwright": "4.1.8", + "cssnano": "^7.1.2", + "daisyui": "^5.5.14", + "dts-bundle-generator": "^9.5.1", + "glob": "^13.0.0", + "husky": "^9.1.7", + "playwright": "1.60.0", + "prettier": "^3.8.1", + "prettier-plugin-svelte": "^3.4.1", + "prettier-plugin-tailwindcss": "^0.7.2", + "rimraf": "^6.1.2", + "sass-embedded": "^1.97.1", + "svelte": "^5.53.10", + "svelte-check": "^4.3.4", + "tailwindcss": "^4.1.18", + "terser": "^5.44.1", + "typescript": "~5.9.3", + "vite": "^7.3.5", + "vite-plugin-markdown": "^2.2.0", + "vitest": "^4.1.8" + }, + "dependencies": { + "hash-wasm": "^4.12.0" + }, + "overrides": { + "esbuild": "^0.28.1", + "markdown-it": "^14.2.0", + "tmp": "^0.2.7", + "underscore": "^1.13.8" + } +} diff --git a/frontend/node_modules/fsevents/LICENSE b/frontend/node_modules/fsevents/LICENSE new file mode 100644 index 0000000..5d70441 --- /dev/null +++ b/frontend/node_modules/fsevents/LICENSE @@ -0,0 +1,22 @@ +MIT License +----------- + +Copyright (C) 2010-2020 by Philipp Dunkel, Ben Noordhuis, Elan Shankar, Paul Miller + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/frontend/node_modules/fsevents/README.md b/frontend/node_modules/fsevents/README.md new file mode 100644 index 0000000..50373a0 --- /dev/null +++ b/frontend/node_modules/fsevents/README.md @@ -0,0 +1,89 @@ +# fsevents + +Native access to MacOS FSEvents in [Node.js](https://nodejs.org/) + +The FSEvents API in MacOS allows applications to register for notifications of +changes to a given directory tree. It is a very fast and lightweight alternative +to kqueue. + +This is a low-level library. For a cross-platform file watching module that +uses fsevents, check out [Chokidar](https://github.com/paulmillr/chokidar). + +## Usage + +```sh +npm install fsevents +``` + +Supports only **Node.js v8.16 and higher**. + +```js +const fsevents = require('fsevents'); + +// To start observation +const stop = fsevents.watch(__dirname, (path, flags, id) => { + const info = fsevents.getInfo(path, flags); +}); + +// To end observation +stop(); +``` + +> **Important note:** The API behaviour is slightly different from typical JS APIs. The `stop` function **must** be +> retrieved and stored somewhere, even if you don't plan to stop the watcher. If you forget it, the garbage collector +> will eventually kick in, the watcher will be unregistered, and your callbacks won't be called anymore. + +The callback passed as the second parameter to `.watch` get's called whenever the operating system detects a +a change in the file system. It takes three arguments: + +###### `fsevents.watch(dirname: string, (path: string, flags: number, id: string) => void): () => Promise` + + * `path: string` - the item in the filesystem that have been changed + * `flags: number` - a numeric value describing what the change was + * `id: string` - an unique-id identifying this specific event + + Returns closer callback which when called returns a Promise resolving when the watcher process has been shut down. + +###### `fsevents.getInfo(path: string, flags: number, id: string): FsEventInfo` + +The `getInfo` function takes the `path`, `flags` and `id` arguments and converts those parameters into a structure +that is easier to digest to determine what the change was. + +The `FsEventsInfo` has the following shape: + +```js +/** + * @typedef {'created'|'modified'|'deleted'|'moved'|'root-changed'|'cloned'|'unknown'} FsEventsEvent + * @typedef {'file'|'directory'|'symlink'} FsEventsType + */ +{ + "event": "created", // {FsEventsEvent} + "path": "file.txt", + "type": "file", // {FsEventsType} + "changes": { + "inode": true, // Had iNode Meta-Information changed + "finder": false, // Had Finder Meta-Data changed + "access": false, // Had access permissions changed + "xattrs": false // Had xAttributes changed + }, + "flags": 0x100000000 +} +``` + +## Changelog + +- v2.3 supports Apple Silicon ARM CPUs +- v2 supports node 8.16+ and reduces package size massively +- v1.2.8 supports node 6+ +- v1.2.7 supports node 4+ + +## Troubleshooting + +- I'm getting `EBADPLATFORM` `Unsupported platform for fsevents` error. +- It's fine, nothing is broken. fsevents is macos-only. Other platforms are skipped. If you want to hide this warning, report a bug to NPM bugtracker asking them to hide ebadplatform warnings by default. + +## License + +The MIT License Copyright (C) 2010-2020 by Philipp Dunkel, Ben Noordhuis, Elan Shankar, Paul Miller — see LICENSE file. + +Visit our [GitHub page](https://github.com/fsevents/fsevents) and [NPM Page](https://npmjs.org/package/fsevents) diff --git a/frontend/node_modules/fsevents/fsevents.d.ts b/frontend/node_modules/fsevents/fsevents.d.ts new file mode 100644 index 0000000..2723c04 --- /dev/null +++ b/frontend/node_modules/fsevents/fsevents.d.ts @@ -0,0 +1,46 @@ +declare type Event = "created" | "cloned" | "modified" | "deleted" | "moved" | "root-changed" | "unknown"; +declare type Type = "file" | "directory" | "symlink"; +declare type FileChanges = { + inode: boolean; + finder: boolean; + access: boolean; + xattrs: boolean; +}; +declare type Info = { + event: Event; + path: string; + type: Type; + changes: FileChanges; + flags: number; +}; +declare type WatchHandler = (path: string, flags: number, id: string) => void; +export declare function watch(path: string, handler: WatchHandler): () => Promise; +export declare function watch(path: string, since: number, handler: WatchHandler): () => Promise; +export declare function getInfo(path: string, flags: number): Info; +export declare const constants: { + None: 0x00000000; + MustScanSubDirs: 0x00000001; + UserDropped: 0x00000002; + KernelDropped: 0x00000004; + EventIdsWrapped: 0x00000008; + HistoryDone: 0x00000010; + RootChanged: 0x00000020; + Mount: 0x00000040; + Unmount: 0x00000080; + ItemCreated: 0x00000100; + ItemRemoved: 0x00000200; + ItemInodeMetaMod: 0x00000400; + ItemRenamed: 0x00000800; + ItemModified: 0x00001000; + ItemFinderInfoMod: 0x00002000; + ItemChangeOwner: 0x00004000; + ItemXattrMod: 0x00008000; + ItemIsFile: 0x00010000; + ItemIsDir: 0x00020000; + ItemIsSymlink: 0x00040000; + ItemIsHardlink: 0x00100000; + ItemIsLastHardlink: 0x00200000; + OwnEvent: 0x00080000; + ItemCloned: 0x00400000; +}; +export {}; diff --git a/frontend/node_modules/fsevents/fsevents.js b/frontend/node_modules/fsevents/fsevents.js new file mode 100644 index 0000000..198da98 --- /dev/null +++ b/frontend/node_modules/fsevents/fsevents.js @@ -0,0 +1,83 @@ +/* + ** © 2020 by Philipp Dunkel, Ben Noordhuis, Elan Shankar, Paul Miller + ** Licensed under MIT License. + */ + +/* jshint node:true */ +"use strict"; + +if (process.platform !== "darwin") { + throw new Error(`Module 'fsevents' is not compatible with platform '${process.platform}'`); +} + +const Native = require("./fsevents.node"); +const events = Native.constants; + +function watch(path, since, handler) { + if (typeof path !== "string") { + throw new TypeError(`fsevents argument 1 must be a string and not a ${typeof path}`); + } + if ("function" === typeof since && "undefined" === typeof handler) { + handler = since; + since = Native.flags.SinceNow; + } + if (typeof since !== "number") { + throw new TypeError(`fsevents argument 2 must be a number and not a ${typeof since}`); + } + if (typeof handler !== "function") { + throw new TypeError(`fsevents argument 3 must be a function and not a ${typeof handler}`); + } + + let instance = Native.start(Native.global, path, since, handler); + if (!instance) throw new Error(`could not watch: ${path}`); + return () => { + const result = instance ? Promise.resolve(instance).then(Native.stop) : Promise.resolve(undefined); + instance = undefined; + return result; + }; +} + +function getInfo(path, flags) { + return { + path, + flags, + event: getEventType(flags), + type: getFileType(flags), + changes: getFileChanges(flags), + }; +} + +function getFileType(flags) { + if (events.ItemIsFile & flags) return "file"; + if (events.ItemIsDir & flags) return "directory"; + if (events.MustScanSubDirs & flags) return "directory"; + if (events.ItemIsSymlink & flags) return "symlink"; +} +function anyIsTrue(obj) { + for (let key in obj) { + if (obj[key]) return true; + } + return false; +} +function getEventType(flags) { + if (events.ItemRemoved & flags) return "deleted"; + if (events.ItemRenamed & flags) return "moved"; + if (events.ItemCreated & flags) return "created"; + if (events.ItemModified & flags) return "modified"; + if (events.RootChanged & flags) return "root-changed"; + if (events.ItemCloned & flags) return "cloned"; + if (anyIsTrue(flags)) return "modified"; + return "unknown"; +} +function getFileChanges(flags) { + return { + inode: !!(events.ItemInodeMetaMod & flags), + finder: !!(events.ItemFinderInfoMod & flags), + access: !!(events.ItemChangeOwner & flags), + xattrs: !!(events.ItemXattrMod & flags), + }; +} + +exports.watch = watch; +exports.getInfo = getInfo; +exports.constants = events; diff --git a/frontend/node_modules/fsevents/fsevents.node b/frontend/node_modules/fsevents/fsevents.node new file mode 100755 index 0000000000000000000000000000000000000000..1cc3345ead403e72439746aee6b40645893c322b GIT binary patch literal 163626 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 Is-vs_AMzay6aWAK literal 0 HcmV?d00001 diff --git a/frontend/node_modules/fsevents/package.json b/frontend/node_modules/fsevents/package.json new file mode 100644 index 0000000..5d0ee15 --- /dev/null +++ b/frontend/node_modules/fsevents/package.json @@ -0,0 +1,62 @@ +{ + "name": "fsevents", + "version": "2.3.3", + "description": "Native Access to MacOS FSEvents", + "main": "fsevents.js", + "types": "fsevents.d.ts", + "os": [ + "darwin" + ], + "files": [ + "fsevents.d.ts", + "fsevents.js", + "fsevents.node" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + }, + "scripts": { + "clean": "node-gyp clean && rm -f fsevents.node", + "build": "node-gyp clean && rm -f fsevents.node && node-gyp rebuild && node-gyp clean", + "test": "/bin/bash ./test.sh 2>/dev/null", + "prepublishOnly": "npm run build" + }, + "repository": { + "type": "git", + "url": "https://github.com/fsevents/fsevents.git" + }, + "keywords": [ + "fsevents", + "mac" + ], + "contributors": [ + { + "name": "Philipp Dunkel", + "email": "pip@pipobscure.com" + }, + { + "name": "Ben Noordhuis", + "email": "info@bnoordhuis.nl" + }, + { + "name": "Elan Shankar", + "email": "elan.shanker@gmail.com" + }, + { + "name": "Miroslav Bajtoš", + "email": "mbajtoss@gmail.com" + }, + { + "name": "Paul Miller", + "url": "https://paulmillr.com" + } + ], + "license": "MIT", + "bugs": { + "url": "https://github.com/fsevents/fsevents/issues" + }, + "homepage": "https://github.com/fsevents/fsevents", + "devDependencies": { + "node-gyp": "^9.4.0" + } +} diff --git a/frontend/node_modules/hash-wasm/.vscode/settings.json b/frontend/node_modules/hash-wasm/.vscode/settings.json new file mode 100644 index 0000000..ad92582 --- /dev/null +++ b/frontend/node_modules/hash-wasm/.vscode/settings.json @@ -0,0 +1,3 @@ +{ + "editor.formatOnSave": true +} diff --git a/frontend/node_modules/hash-wasm/CHANGELOG.md b/frontend/node_modules/hash-wasm/CHANGELOG.md new file mode 100644 index 0000000..f396cfb --- /dev/null +++ b/frontend/node_modules/hash-wasm/CHANGELOG.md @@ -0,0 +1,187 @@ +## 4.12.0 (November 19, 2024) + +- **BREAKING CHANGE**: crc32c() and createCRC32C() were removed. You can now do the same thing with crc32() and createCRC32() through setting the polynomial parameter to 0x82F63B78 +- Added CRC-64 hash function +- Exported IDataType, IHasher types from index.ts +- Update benchmarks +- Update dependencies, including Clang +- Migrate from ESLint to Biome and fix linting errors + +## 4.11.0 (November 13, 2023) + +- Added `secret` parameter to Argon2 (by [@malobre](https://github.com/malobre)) + +## 4.10.0 (October 15, 2023) + +- Add sideEffects: false to package.json +- Update dependencies, including Clang + +## 4.9.0 (July 22, 2021) + +- Add CRC32C +- Update dependencies, including Clang + +## 4.8.0 (June 27, 2021) + +- Optimized Adler-32 for WASM +- Add xxhash3() and xxhash128() hash functions +- Slightly faster xxhash32() and xxhash64() + +## 4.7.0 (June 5, 2021) + +- Add Adler-32 algorithm +- New feature: saving and loading the internal state of the hash (segmented hashing and rewinding) +- Faster builds using GNU Make +- Fix alignment of the main buffer (might result in better performance on some platforms) +- Updated dependencies +- _(Special thanks to Nicholas Sherlock for his contributions)_ + +## 4.6.0 (March 26, 2021) + +- Smaller CRC32 binary (now it computes the lookup table at the first run) +- Less RAM required for the WASM instances: it only allocates 128kB of RAM instead of 256kB +- Update dependencies + +## 4.5.0 (March 6, 2021) + +- Add BLAKE3 algorithm +- Performance improvements at BLAKE2 +- Update dependencies +- Update benchmarks + +## 4.4.1 (November 22, 2020) + +- Add JSDoc annotations + +## 4.4.0 (November 8, 2020) + +- Add Whirlpool and SM3 algorithms +- Fix block size at blake algorithms +- Switch compiler from Emscripten to Clang +- Fix cached seed invalidation at xxhash64 +- Added wasm binary hashes to build log +- Create minified bundles from each algorithm + +## 4.3.0 (October 10, 2020) + +- Add blake2s algorithm +- Add bundle sizes to README + +## 4.2.2 (September 19, 2020) + +- Add bcrypt algorithm +- Add argon2Validate() function + +## 4.1.0 (September 5, 2020) + +- Add scrypt algorithm +- Improve type signiture of key derivation functions. Now the return type depends on the parameters +- Update benchmarks, add relative performance +- Add section to README about string encoding pitfalls + +## 4.0.1 (August 29, 2020) + +- ~~**BREAKING CHANGE**: All APIs were converted to **synchronous** functions, so you don't need to use `await` or `.then()` anymore.~~ It turned out that Chrome does not allow synchronous WebAssembly instantiation of binaries larger than 4KB. So this change was reverted. +- **BREAKING CHANGE**: `argon2()` function was renamed to `argon2i()`, `argon2d()` and `argon2id()`. +- **BREAKING CHANGE**: `pbkdf2()` function requires now an object containing all parameters +- Update dependencies + +## 3.7.2 (August 15, 2020) + +- Add more badges to README +- Update dependencies +- Increase code coverage +- Consistent coding style in C files + +## 3.7.1 (August 2, 2020) + +- Allow returning Uint8Array from digest() +- Allow operation chaining in createXXXX() response +- Throw an error when an IHasher instance is reused without init() call. +- Add "binary" and "encoded" output types to argon2 +- Update benchmark results +- Remove all dependencies on Buffer object in standalone mode + +## 3.7.0 (August 1, 2020) + +- Added Argon2 +- Support hash lengths shorter than 16 bytes in Blake2b + +## 3.6.0 (July 25, 2020) + +- **Breaking change**: Drop support for String() objects (normal string literals are still supported of course) +- Node.js buffer polyfills are not needed anymore + +## 3.5.0 (July 19, 2020) + +- Added BLAKE2b algorithm +- Fixed a bug, where sha3() and keccak() gave incorrect results when the hash length was changed + +## 3.4.1 (June 27, 2020) + +- Add PBKDF2 example and benchmark results + +## 3.4.0 (June 27, 2020) + +- Add PBKDF2 algorithm + +## 3.3.0 (June 22, 2020) + +- Add RIPEMD-160 algorithm + +## 3.2.1 (June 5, 2020) + +- Fix buffer.copy() error in browsers + +## 3.2.0 (June 5, 2020) + +- Added HMAC +- Better examples in readme +- Updated dependencies + +## 3.1.2 (May 27, 2020) + +- Fixed example code in readme +- Better description and keywords + +## 3.1.1 (May 25, 2020) + +- ~3x faster when hashing small chunks of data (one WASM function call instead of three) +- Updated benchmark results in readme + +## 3.0.1 (May 24, 2020) + +- Updated benchmark results in readme +- Use new web-based tool for benchmarking + +## 3.0.0 (May 24, 2020) + +- Improved performance in smaller input buffers + +## 2.6.0 (April 18, 2020) + +- Allow concurrent hash calculations with multiple states +- Fix WebAssembly detection +- Cache WebAssembly modules +- Fix crash when starting many parallel hash calculations +- Allocate less memory for WASM modules + +## 2.5.1 (April 13, 2020) + +- Add React.js demo app + +## 2.5.0 (April 13, 2020) + +- Add xxhash32 and xxhash64 +- Add Keccak +- Bugfixes + +## 2.1.0 (April 12, 2020) + +- Use faster SHA256 and SHA512 implementations +- Allocate less memory in WASM modules +- Clean up C source codes + +## 2.0.0 (April 11, 2020) + +- Initial release diff --git a/frontend/node_modules/hash-wasm/LICENSE b/frontend/node_modules/hash-wasm/LICENSE new file mode 100644 index 0000000..ffdbc89 --- /dev/null +++ b/frontend/node_modules/hash-wasm/LICENSE @@ -0,0 +1,38 @@ +MIT License + +Copyright (c) 2020 Dani Biró + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +Embedded C implementations might use other, similarly permissive licenses. +Check the beginning of the files from the /src directory. + +Special thank you to the authors of original C algorithms: +- Alexander Peslyak +- Aleksey Kravchenko +- Colin Percival +- Stephan Brumme +- Steve Reid +- Samuel Neves +- Solar Designer +- Project Nayuki +- ARM Limited +- Yanbo Li dreamfly281@gmail.com, goldboar@163.comYanbo Li +- Mark Adler +- Yann Collet diff --git a/frontend/node_modules/hash-wasm/README.md b/frontend/node_modules/hash-wasm/README.md new file mode 100644 index 0000000..8bc3627 --- /dev/null +++ b/frontend/node_modules/hash-wasm/README.md @@ -0,0 +1,543 @@ +# hash-wasm + +[![npm package](https://img.shields.io/npm/v/hash-wasm.svg)](http://npmjs.org/package/hash-wasm) +[![Bundle size](https://badgen.net/bundlephobia/minzip/hash-wasm)](https://bundlephobia.com/result?p=hash-wasm) +[![codecov](https://codecov.io/gh/Daninet/hash-wasm/branch/master/graph/badge.svg)](https://codecov.io/gh/Daninet/hash-wasm) +[![Build status](https://github.com/Daninet/hash-wasm/workflows/Build%20&%20publish/badge.svg?branch=master)](https://github.com/Daninet/hash-wasm/actions) +[![JSDelivr downloads](https://data.jsdelivr.com/v1/package/npm/hash-wasm/badge)](https://www.jsdelivr.com/package/npm/hash-wasm) + +Hash-WASM is a ⚡lightning fast⚡ hash function library for browsers and Node.js. +It is using hand-tuned WebAssembly binaries to calculate the hash faster than other libraries. + +# Supported algorithms + +| Name | Bundle size (gzipped) | +| ---------------------------------------------- | --------------------- | +| Adler-32 | 3 kB | +| Argon2: Argon2d, Argon2i, Argon2id (v1.3) | 11 kB | +| bcrypt | 11 kB | +| BLAKE2b | 6 kB | +| BLAKE2s | 5 kB | +| BLAKE3 | 9 kB | +| CRC32 | 3 kB | +| CRC64 | 4 kB | +| HMAC | - | +| MD4 | 4 kB | +| MD5 | 4 kB | +| PBKDF2 | - | +| RIPEMD-160 | 5 kB | +| scrypt | 10 kB | +| SHA-1 | 5 kB | +| SHA-2: SHA-224, SHA-256 | 7 kB | +| SHA-2: SHA-384, SHA-512 | 8 kB | +| SHA-3: SHA3-224, SHA3-256, SHA3-384, SHA3-512 | 4 kB | +| Keccak-224, Keccak-256, Keccak-384, Keccak-512 | 4 kB | +| SM3 | 4 kB | +| Whirlpool | 6 kB | +| xxHash32 | 3 kB | +| xxHash64 | 4 kB | +| xxHash3 | 7 kB | +| xxHash128 | 8 kB | + +# Features + +- A lot faster than other JS / WASM implementations (see [benchmarks](#benchmark) below) +- It's lightweight. See the table above +- Compiled from heavily optimized algorithms written in C +- Supports all modern browsers, Node.js and Deno +- Supports large data streams +- Supports UTF-8 strings and typed arrays +- Supports chunked input streams +- Modular architecture (the algorithms are compiled into individual WASM binaries) +- WASM modules are bundled as base64 strings (no problems with linking) +- Supports tree shaking (Webpack only bundles the hash algorithms you use) +- Works without Webpack or other bundlers +- Includes TypeScript type definitions +- Works in Web Workers +- Zero dependencies +- Supports concurrent hash calculations with multiple states +- Supports saving and loading the internal state of the hash (segmented hashing and rewinding) +- [Unit tests](https://github.com/Daninet/hash-wasm/tree/master/test) for all algorithms +- 100% open source & transparent [build process](https://github.com/Daninet/hash-wasm/actions) +- Easy to use, Promise-based API + +# Installation + +``` +npm i hash-wasm +``` + +It can also be used directly from HTML (via [jsDelivr](https://www.jsdelivr.com/package/npm/hash-wasm)): + +```html + + + + + + +``` + +# Examples + +### Demo apps + +[Hash calculator](https://3w4be.csb.app/) - [source code](https://codesandbox.io/s/hash-wasm-3w4be?file=/src/App.tsx) + +[MD5 file hasher using HTML5 File API](https://stackoverflow.com/a/63287199/6251760) + +### Usage with the shorthand form + +It is the easiest and the fastest way to calculate hashes. Use it when the input buffer is already in the memory. + +```javascript +import { md5, sha1, sha512, sha3 } from "hash-wasm"; + +async function run() { + console.log("MD5:", await md5("demo")); + + const int8Buffer = new Uint8Array([0, 1, 2, 3]); + console.log("SHA1:", await sha1(int8Buffer)); + console.log("SHA512:", await sha512(int8Buffer)); + + const int32Buffer = new Uint32Array([1056, 641]); + console.log("SHA3-256:", await sha3(int32Buffer, 256)); +} + +run(); +``` + +_\* See [String encoding pitfalls](#string-encoding-pitfalls)_ + +_\*\* See [API reference](#api)_ + +### Advanced usage with streaming input + +createXXXX() functions create new WASM instances with separate states, which can be used to calculate multiple hashes paralelly. They are slower compared to shorthand functions like md5(), which reuse the same WASM instance and state to do multiple calculations. For this reason, the shorthand form is always preferred when the data is already in the memory. + +For the best performance, avoid calling createXXXX() functions in loops. When calculating multiple hashes sequentially, the init() function can be used to reset the internal state between runs. It is faster than creating new instances with createXXXX(). + +```javascript +import { createSHA1 } from "hash-wasm"; + +async function run() { + const sha1 = await createSHA1(); + sha1.init(); + + while (hasMoreData()) { + const chunk = readChunk(); + sha1.update(chunk); + } + + const hash = sha1.digest("binary"); // returns Uint8Array + console.log("SHA1:", hash); +} + +run(); +``` + +_\* See [String encoding pitfalls](#string-encoding-pitfalls)_ + +_\*\* See [API reference](#api)_ + +### Hashing passwords with Argon2 + +The recommended process for choosing the parameters can be found here: https://tools.ietf.org/html/draft-irtf-cfrg-argon2-04#section-4 + +```javascript +import { argon2id, argon2Verify } from "hash-wasm"; + +async function run() { + const salt = new Uint8Array(16); + window.crypto.getRandomValues(salt); + + const key = await argon2id({ + password: "pass", + salt, // salt is a buffer containing random bytes + parallelism: 1, + iterations: 256, + memorySize: 512, // use 512KB memory + hashLength: 32, // output size = 32 bytes + outputType: "encoded", // return standard encoded string containing parameters needed to verify the key + }); + + console.log("Derived key:", key); + + const isValid = await argon2Verify({ + password: "pass", + hash: key, + }); + + console.log(isValid ? "Valid password" : "Invalid password"); +} + +run(); +``` + +_\* See [String encoding pitfalls](#string-encoding-pitfalls)_ + +_\*\* See [API reference](#api)_ + +### Hashing passwords with bcrypt + +```javascript +import { bcrypt, bcryptVerify } from "hash-wasm"; + +async function run() { + const salt = new Uint8Array(16); + window.crypto.getRandomValues(salt); + + const key = await bcrypt({ + password: "pass", + salt, // salt is a buffer containing 16 random bytes + costFactor: 11, + outputType: "encoded", // return standard encoded string containing parameters needed to verify the key + }); + + console.log("Derived key:", key); + + const isValid = await bcryptVerify({ + password: "pass", + hash: key, + }); + + console.log(isValid ? "Valid password" : "Invalid password"); +} + +run(); +``` + +_\* See [String encoding pitfalls](#string-encoding-pitfalls)_ + +_\*\* See [API reference](#api)_ + +### Calculating HMAC + +All supported hash functions can be used to calculate HMAC. For the best performance, avoid calling createXXXX() in loops (see `Advanced usage with streaming input` section above) + +```javascript +import { createHMAC, createSHA3 } from "hash-wasm"; + +async function run() { + const hashFunc = createSHA3(224); // SHA3-224 + const hmac = await createHMAC(hashFunc, "key"); + + const fruits = ["apple", "raspberry", "watermelon"]; + console.log("Input:", fruits); + + const codes = fruits.map((data) => { + hmac.init(); + hmac.update(data); + return hmac.digest(); + }); + + console.log("HMAC:", codes); +} + +run(); +``` + +_\* See [String encoding pitfalls](#string-encoding-pitfalls)_ + +_\*\* See [API reference](#api)_ + +### Calculating PBKDF2 + +All supported hash functions can be used to calculate PBKDF2. For the best performance, avoid calling createXXXX() in loops (see `Advanced usage with streaming input` section above) + +```javascript +import { pbkdf2, createSHA1 } from "hash-wasm"; + +async function run() { + const salt = new Uint8Array(16); + window.crypto.getRandomValues(salt); + + const key = await pbkdf2({ + password: "password", + salt, + iterations: 1000, + hashLength: 32, + hashFunction: createSHA1(), + outputType: "hex", + }); + + console.log("Derived key:", key); +} + +run(); +``` + +_\* See [String encoding pitfalls](#string-encoding-pitfalls)_ + +_\*\* See [API reference](#api)_ + +### String encoding pitfalls + +You should be aware that there may be multiple UTF-8 representations of a given string: + +```js +"\u00fc"; // encodes the ü character +"u\u0308"; // also encodes the ü character + +"\u00fc" === "u\u0308"; // false +"ü" === "ü"; // false +``` + +All algorithms defined in this library depend on the binary representation of the input string. Thus, it's highly recommended to normalize your strings before passing it to hash-wasm. You can use the `normalize()` built-in String function to archive this: + +```js +"\u00fc".normalize() === "u\u0308".normalize(); // true + +const te = new TextEncoder(); +te.encode("u\u0308"); // Uint8Array(3) [117, 204, 136] +te.encode("\u00fc"); // Uint8Array(2) [195, 188] + +te.encode("u\u0308".normalize("NFKC")); // Uint8Array(2) [195, 188] +te.encode("\u00fc".normalize("NFKC")); // Uint8Array(2) [195, 188] +``` + +You can read more about this issue here: https://en.wikipedia.org/wiki/Unicode_equivalence + +### Resumable hashing + +You can save the current internal state of the hash using the `.save()` function. This state may be written to disk or stored elsewhere in memory. +You can then use the `.load(state)` function to reload that state into a new instance of the hash, or back into the same instance. + +This allows you to span the work of hashing a file across multiple processes (e.g. in environments with limited execution times like AWS Lambda, where large jobs need to be split across multiple invocations), or rewind the hash to an earlier point in the stream. For example, the first process could: + +```js +// first process starts hashing +const md5 = await createMD5(); +md5.init(); +md5.update("Hello, "); +const state = md5.save(); // save this state + +// second process resumes hashing from the stored state +const md5 = await createMD5(); +md5.load(state); +md5.update("world!"); +console.log(md5.digest()); // Prints 6cd3556deb0da54bca060b4c39479839 = md5("Hello, world!") +``` + +_Note that both the saving and loading processes must be running compatible versions of the hash function (i.e. the hash function hasn't changed between the versions of hash-wasm used in the saving and loading processes). If the saved state is incompatible, `load()` will throw an exception._ + +_The saved state can contain information about the input, including plaintext input bytes, so from a security perspective it must be treated with the same care as the input data itself._ + +
+ +# Browser support + +
+ +| Chrome | Safari | Firefox | Edge | IE | Node.js | Deno | +| ------ | ------ | ------- | ---- | ------------- | ------- | ---- | +| 57+ | 11+ | 53+ | 16+ | Not supported | 8+ | 1+ | + +
+ +# Benchmark + +You can make your own measurements here: [link](https://daninet.github.io/hash-wasm-benchmark/) + +Two scenarios were measured: + +- throughput with the short form (input size = 32 bytes) +- throughput with the short form (input size = 1MB) + +Results: + +| MD5 | throughput (32 bytes) | throughput (1MB) | +| --------------------------- | --------------------- | ---------------- | +| **hash-wasm 4.10.0** | **110.52 MB/s** | **850.31 MB/s** | +| spark-md5 3.0.2 (from npm) | 38.87 MB/s | 171.73 MB/s | +| md5-wasm 2.0.0 (from npm) | 37.36 MB/s | 131.77 MB/s | +| crypto-js 4.1.1 (from npm) | 9.30 MB/s | 46.71 MB/s | +| node-forge 1.3.1 (from npm) | 18.23 MB/s | 28.94 MB/s | +| md5 2.3.0 (from npm) | 14.50 MB/s | 21.65 MB/s | + +# + +| SHA1 | throughput (32 bytes) | throughput (1MB) | +| --------------------------- | --------------------- | ---------------- | +| **hash-wasm 4.10.0** | **83.80 MB/s** | **798.19 MB/s** | +| jsSHA 3.3.1 (from npm) | 34.93 MB/s | 78.12 MB/s | +| crypto-js 4.1.1 (from npm) | 9.50 MB/s | 69.02 MB/s | +| node-forge 1.3.1 (from npm) | 17.02 MB/s | 32.00 MB/s | +| sha1 1.1.1 (from npm) | 14.68 MB/s | 24.24 MB/s | + +# + +| SHA256 | throughput (32 bytes) | throughput (1MB) | +| ----------------------------- | --------------------- | ---------------- | +| **hash-wasm 4.10.0** | **63.99 MB/s** | **426.16 MB/s** | +| sha256-wasm 2.2.2 (from npm) | 20.37 MB/s | 308.39 MB/s | +| noble-hashes 1.3.2 (from npm) | 24.73 MB/s | 110.02 MB/s | +| crypto-js 4.1.1 (from npm) | 8.99 MB/s | 65.17 MB/s | +| jsSHA 3.3.1 (from npm) | 25.64 MB/s | 57.98 MB/s | +| node-forge 1.3.1 (from npm) | 13.93 MB/s | 28.19 MB/s | + +# + +| SHA3-512 | throughput (32 bytes) | throughput (1MB) | +| ----------------------------- | --------------------- | ---------------- | +| **hash-wasm 4.10.0** | **38.06 MB/s** | **234.40 MB/s** | +| sha3-wasm 1.0.0 (from npm) | 15.44 MB/s | 101.51 MB/s | +| noble-hashes 1.3.2 (from npm) | 5.74 MB/s | 14.19 MB/s | +| sha3 2.1.4 (from npm) | 3.80 MB/s | 10.73 MB/s | +| jsSHA 3.2.0 (from npm) | 2.08 MB/s | 3.82 MB/s | + +# + +| XXHash64 | throughput (32 bytes) | throughput (1MB) | +| ---------------------------- | --------------------- | ------------------ | +| **hash-wasm 4.10.0** | **101.66 MB/s** | **15 989 MB/s** | +| xxhash-wasm 1.0.2 (from npm) | 47.58 MB/s | 15 929 MB/s | +| xxhashjs 0.2.2 (from npm) | 0.92 MB/s | 42.26 MB/s | + +# + +| PBKDF2-SHA512 - 1000 iterations | operations per second (16 bytes) | +| ------------------------------- | -------------------------------- | +| **hash-wasm 4.10.0** | **588 ops** | +| noble-hashes 1.3.2 (from npm) | 395 ops | +| pbkdf2 3.1.2 (from npm) | 83 ops | +| crypto-js 4.1.1 (from npm) | 29 ops | + +# + +| Argon2id (m=512, t=8, p=1) | operations per second (16 bytes) | +| -------------------------------- | -------------------------------- | +| **hash-wasm 4.10.0** | **438 ops** | +| argon2-browser 1.18.0 (from npm) | 213 ops | +| argon2-wasm-pro 1.1.0 (from npm) | 203 ops | +| argon2-wasm 0.9.0 (from npm) | 195 ops | + +
+ +\* These measurements were made with `Chrome v131` on a Ryzen 9 7900X desktop CPU. + +# API + +```ts +type IDataType = string | Buffer | Uint8Array | Uint16Array | Uint32Array; + +// all functions return hash in hex format +adler32(data: IDataType): Promise +blake2b(data: IDataType, bits?: number, key?: IDataType): Promise // default is 512 bits +blake2s(data: IDataType, bits?: number, key?: IDataType): Promise // default is 256 bits +blake3(data: IDataType, bits?: number, key?: IDataType): Promise // default is 256 bits +crc32(data: IDataType, polynomial?: number): Promise // default polynomial is 0xedb88320, for CRC32C use 0x82f63b78 +crc64(data: IDataType, polynomial?: string): Promise // default polynomial is 'c96c5795d7870f42' (ECMA) +keccak(data: IDataType, bits?: 224 | 256 | 384 | 512): Promise // default is 512 bits +md4(data: IDataType): Promise +md5(data: IDataType): Promise +ripemd160(data: IDataType): Promise +sha1(data: IDataType): Promise +sha224(data: IDataType): Promise +sha256(data: IDataType): Promise +sha3(data: IDataType, bits?: 224 | 256 | 384 | 512): Promise // default is 512 bits +sha384(data: IDataType): Promise +sha512(data: IDataType): Promise +sm3(data: IDataType): Promise +whirlpool(data: IDataType): Promise +xxhash32(data: IDataType, seed?: number): Promise +xxhash64(data: IDataType, seedLow?: number, seedHigh?: number): Promise +xxhash3(data: IDataType, seedLow?: number, seedHigh?: number): Promise +xxhash128(data: IDataType, seedLow?: number, seedHigh?: number): Promise + +interface IHasher { + init: () => IHasher; + update: (data: IDataType) => IHasher; + digest: (outputType: 'hex' | 'binary') => string | Uint8Array; // by default returns hex string + save: () => Uint8Array; // returns the internal state for later resumption + load: (state: Uint8Array) => IHasher; // loads a previously saved internal state + blockSize: number; // in bytes + digestSize: number; // in bytes +} + +createAdler32(): Promise +createBLAKE2b(bits?: number, key?: IDataType): Promise // default is 512 bits +createBLAKE2s(bits?: number, key?: IDataType): Promise // default is 256 bits +createBLAKE3(bits?: number, key?: IDataType): Promise // default is 256 bits +createCRC32(polynomial?: number): Promise // default polynomial is 0xedb88320, for CRC32C use 0x82f63b78 +createCRC64(polynomial?: number): Promise // default polynomial is 'c96c5795d7870f42' (ECMA) +createKeccak(bits?: 224 | 256 | 384 | 512): Promise // default is 512 bits +createMD4(): Promise +createMD5(): Promise +createRIPEMD160(): Promise +createSHA1(): Promise +createSHA224(): Promise +createSHA256(): Promise +createSHA3(bits?: 224 | 256 | 384 | 512): Promise // default is 512 bits +createSHA384(): Promise +createSHA512(): Promise +createSM3(): Promise +createWhirlpool(): Promise +createXXHash32(seed: number): Promise +createXXHash64(seedLow: number, seedHigh: number): Promise +createXXHash3(seedLow: number, seedHigh: number): Promise +createXXHash128(seedLow: number, seedHigh: number): Promise + +createHMAC(hashFunction: Promise, key: IDataType): Promise + +pbkdf2({ + password: IDataType, // password (or message) to be hashed + salt: IDataType, // salt (usually containing random bytes) + iterations: number, // number of iterations to perform + hashLength: number, // output size in bytes + hashFunction: Promise, // the return value of a function like createSHA1() + outputType?: 'hex' | 'binary', // by default returns hex string +}): Promise + +scrypt({ + password: IDataType, // password (or message) to be hashed + salt: IDataType, // salt (usually containing random bytes) + costFactor: number, // CPU/memory cost - must be a power of 2 (e.g. 1024) + blockSize: number, // block size parameter (8 is commonly used) + parallelism: number, // degree of parallelism + hashLength: number, // output size in bytes + outputType?: 'hex' | 'binary', // by default returns hex string +}): Promise + +interface IArgon2Options { + password: IDataType; // password (or message) to be hashed + salt: IDataType; // salt (usually containing random bytes) + secret?: IDataType; // secret for keyed hashing + iterations: number; // number of iterations to perform + parallelism: number; // degree of parallelism + memorySize: number; // amount of memory to be used in kibibytes (1024 bytes) + hashLength: number; // output size in bytes + outputType?: 'hex' | 'binary' | 'encoded'; // by default returns hex string +} + +argon2i(options: IArgon2Options): Promise +argon2d(options: IArgon2Options): Promise +argon2id(options: IArgon2Options): Promise + +argon2Verify({ + password: IDataType, // password + secret?: IDataType, // secret used on hash creation + hash: string, // encoded hash +}): Promise + +bcrypt({ + password: IDataType, // password + salt: IDataType, // salt (16 bytes long - usually containing random bytes) + costFactor: number, // number of iterations to perform (4 - 31) + outputType?: 'hex' | 'binary' | 'encoded', // by default returns encoded string +}): Promise + +bcryptVerify({ + password: IDataType, // password + hash: string, // encoded hash +}): Promise + +``` + +# Future plans + +- Add more well-known algorithms +- Write a polyfill which keeps bundle sizes low and enables running binaries containing newer WASM instructions +- Use WebAssembly Bulk Memory Operations +- Use WebAssembly SIMD instructions (expecting a 10-20% performance increase) +- Enable multithreading where it's possible (like at Argon2) diff --git a/frontend/node_modules/hash-wasm/biome.json b/frontend/node_modules/hash-wasm/biome.json new file mode 100644 index 0000000..e05b70d --- /dev/null +++ b/frontend/node_modules/hash-wasm/biome.json @@ -0,0 +1,42 @@ +{ + "$schema": "https://biomejs.dev/schemas/1.9.4/schema.json", + "vcs": { + "enabled": false, + "clientKind": "git", + "useIgnoreFile": false + }, + "files": { + "ignoreUnknown": false, + "ignore": [] + }, + "formatter": { + "enabled": true, + "indentStyle": "tab" + }, + "organizeImports": { + "enabled": true + }, + "linter": { + "enabled": true, + "rules": { + "recommended": true + } + }, + "javascript": { + "formatter": { + "quoteStyle": "double" + } + }, + "overrides": [ + { + "include": ["test/**"], + "linter": { + "rules": { + "suspicious": { + "noExplicitAny": "off" + } + } + } + } + ] +} diff --git a/frontend/node_modules/hash-wasm/dist/adler32.umd.min.js b/frontend/node_modules/hash-wasm/dist/adler32.umd.min.js new file mode 100644 index 0000000..85c728a --- /dev/null +++ b/frontend/node_modules/hash-wasm/dist/adler32.umd.min.js @@ -0,0 +1,7 @@ +/*! + * hash-wasm (https://www.npmjs.com/package/hash-wasm) + * (c) Dani Biro + * @license MIT + */ + +!function(A,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports):"function"==typeof define&&define.amd?define(["exports"],e):e((A="undefined"!=typeof globalThis?globalThis:A||self).hashwasm=A.hashwasm||{})}(this,(function(A){"use strict";var e,t={name:"adler32",data:"AGFzbQEAAAABDANgAAF/YAAAYAF/AAMHBgABAgEAAgUEAQECAgYOAn8BQYCJBQt/AEGACAsHcAgGbWVtb3J5AgAOSGFzaF9HZXRCdWZmZXIAAAlIYXNoX0luaXQAAQtIYXNoX1VwZGF0ZQACCkhhc2hfRmluYWwAAw1IYXNoX0dldFN0YXRlAAQOSGFzaF9DYWxjdWxhdGUABQpTVEFURV9TSVpFAwEK6wkGBQBBgAkLCgBBAEEBNgKECAvjCAEHf0EAKAKECCIBQf//A3EhAiABQRB2IQMCQAJAIABBAUcNACACQQAtAIAJaiIBQY+AfGogASABQfD/A0sbIgEgA2oiBEEQdCIFQYCAPGogBSAEQfD/A0sbIAFyIQEMAQsCQAJAAkACQAJAIABBEEkNAEGACSEGIABBsCtJDQFBgAkhBgNAQQAhBQNAIAYgBWoiASgCACIEQf8BcSACaiICIANqIAIgBEEIdkH/AXFqIgJqIAIgBEEQdkH/AXFqIgJqIAIgBEEYdmoiAmogAiABQQRqKAIAIgRB/wFxaiICaiACIARBCHZB/wFxaiICaiACIARBEHZB/wFxaiICaiACIARBGHZqIgJqIAIgAUEIaigCACIEQf8BcWoiAmogAiAEQQh2Qf8BcWoiAmogAiAEQRB2Qf8BcWoiAmogAiAEQRh2aiIEaiAEIAFBDGooAgAiAUH/AXFqIgRqIAQgAUEIdkH/AXFqIgRqIAQgAUEQdkH/AXFqIgRqIAQgAUEYdmoiAmohAyAFQRBqIgVBsCtHDQALIANB8f8DcCEDIAJB8f8DcCECIAZBsCtqIQYgAEHQVGoiAEGvK0sNAAsgAEUNBCAAQQ9LDQEMAgsCQCAARQ0AAkACQCAAQQNxIgUNAEGACSEBIAAhBAwBCyAAQXxxIQRBACEBA0AgAiABQYAJai0AAGoiAiADaiEDIAUgAUEBaiIBRw0ACyAFQYAJaiEBCyAAQQRJDQADQCACIAEtAABqIgUgAS0AAWoiBiABLQACaiIAIAFBA2otAABqIgIgACAGIAUgA2pqamohAyABQQRqIQEgBEF8aiIEDQALCyACQY+AfGogAiACQfD/A0sbIANB8f8DcEEQdHIhAQwECwNAIAYoAgAiAUH/AXEgAmoiBCADaiAEIAFBCHZB/wFxaiIEaiAEIAFBEHZB/wFxaiIEaiAEIAFBGHZqIgRqIAQgBkEEaigCACIBQf8BcWoiBGogBCABQQh2Qf8BcWoiBGogBCABQRB2Qf8BcWoiBGogBCABQRh2aiIEaiAEIAZBCGooAgAiAUH/AXFqIgRqIAQgAUEIdkH/AXFqIgRqIAQgAUEQdkH/AXFqIgRqIAQgAUEYdmoiBGogBCAGQQxqKAIAIgFB/wFxaiIEaiAEIAFBCHZB/wFxaiIEaiAEIAFBEHZB/wFxaiIEaiAEIAFBGHZqIgJqIQMgBkEQaiEGIABBcGoiAEEPSw0ACyAARQ0BCyAAQX9qIQcCQCAAQQNxIgVFDQAgAEF8cSEAIAUhBCAGIQEDQCACIAEtAABqIgIgA2ohAyABQQFqIQEgBEF/aiIEDQALIAYgBWohBgsgB0EDSQ0AA0AgAiAGLQAAaiIBIAYtAAFqIgQgBi0AAmoiBSAGQQNqLQAAaiICIAUgBCABIANqampqIQMgBkEEaiEGIABBfGoiAA0ACwsgA0Hx/wNwIQMgAkHx/wNwIQILIAIgA0EQdHIhAQtBACABNgKECAsxAQF/QQBBACgChAgiAEEYdCAAQYD+A3FBCHRyIABBCHZBgP4DcSAAQRh2cnI2AoAJCwUAQYQICzsAQQBBATYChAggABACQQBBACgChAgiAEEYdCAAQYD+A3FBCHRyIABBCHZBgP4DcSAAQRh2cnI2AoAJCwsVAgBBgAgLBAQAAAAAQYQICwQBAAAA",hash:"02ddbd17"};function n(A,e,t,n){return new(t||(t=Promise))((function(r,i){function o(A){try{s(n.next(A))}catch(A){i(A)}}function a(A){try{s(n.throw(A))}catch(A){i(A)}}function s(A){var e;A.done?r(A.value):(e=A.value,e instanceof t?e:new t((function(A){A(e)}))).then(o,a)}s((n=n.apply(A,e||[])).next())}))}"function"==typeof SuppressedError&&SuppressedError;class r{constructor(){this.mutex=Promise.resolve()}lock(){let A=()=>{};return this.mutex=this.mutex.then((()=>new Promise(A))),new Promise((e=>{A=e}))}dispatch(A){return n(this,void 0,void 0,(function*(){const e=yield this.lock();try{return yield Promise.resolve(A())}finally{e()}}))}}const i="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:global,o=null!==(e=i.Buffer)&&void 0!==e?e:null,a=i.TextEncoder?new i.TextEncoder:null;function s(A,e){return(15&A)+(A>>6|A>>3&8)<<4|(15&e)+(e>>6|e>>3&8)}const B="a".charCodeAt(0)-10,g="0".charCodeAt(0);function f(A,e,t){let n=0;for(let r=0;r>>4;A[n++]=t>9?t+B:t+g,t=15&e[r],A[n++]=t>9?t+B:t+g}return String.fromCharCode.apply(null,A)}const l=null!==o?A=>{if("string"==typeof A){const e=o.from(A,"utf8");return new Uint8Array(e.buffer,e.byteOffset,e.length)}if(o.isBuffer(A))return new Uint8Array(A.buffer,A.byteOffset,A.length);if(ArrayBuffer.isView(A))return new Uint8Array(A.buffer,A.byteOffset,A.byteLength);throw new Error("Invalid data type!")}:A=>{if("string"==typeof A)return a.encode(A);if(ArrayBuffer.isView(A))return new Uint8Array(A.buffer,A.byteOffset,A.byteLength);throw new Error("Invalid data type!")},c="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",I=new Uint8Array(256);for(let A=0;A>4,r+=1,n[r]=(15&i)<<4|o>>2,r+=1,n[r]=(3&o)<<6|63&a,r+=1}return n}const h=16384,E=new r,u=new Map;function d(A,e){return n(this,void 0,void 0,(function*(){let t=null,r=null,i=!1;if("undefined"==typeof WebAssembly)throw new Error("WebAssembly is not supported in this environment!");const o=()=>new DataView(t.exports.memory.buffer).getUint32(t.exports.STATE_SIZE,!0),a=E.dispatch((()=>n(this,void 0,void 0,(function*(){if(!u.has(A.name)){const e=Q(A.data),t=WebAssembly.compile(e);u.set(A.name,t)}const e=yield u.get(A.name);t=yield WebAssembly.instantiate(e,{})})))),B=(A=null)=>{i=!0,t.exports.Hash_Init(A)},g=A=>{if(!i)throw new Error("update() called before init()");(A=>{let e=0;for(;e{if(!i)throw new Error("digest() called before init()");return i=!1,t.exports.Hash_Final(n),"binary"===A?r.slice(0,e):f(c,r,e)},d=A=>"string"==typeof A?A.length<4096:A.byteLength!0;break;case"blake2b":case"blake2s":C=(A,e)=>e<=512&&d(A);break;case"blake3":C=(A,e)=>0===e&&d(A);break;case"xxhash64":case"xxhash3":case"xxhash128":case"crc64":C=()=>!1}return yield(()=>n(this,void 0,void 0,(function*(){t||(yield a);const A=t.exports.Hash_GetBuffer(),e=t.exports.memory.buffer;r=new Uint8Array(e,A,h)})))(),{getMemory:()=>r,writeMemory:(A,e=0)=>{r.set(A,e)},getExports:()=>t.exports,setMemorySize:A=>{t.exports.Hash_SetMemorySize(A);const e=t.exports.Hash_GetBuffer(),n=t.exports.memory.buffer;r=new Uint8Array(n,e,A)},init:B,update:g,digest:I,save:()=>{if(!i)throw new Error("save() can only be called after init() and before digest()");const e=t.exports.Hash_GetState(),n=o(),r=t.exports.memory.buffer,a=new Uint8Array(r,e,n),B=new Uint8Array(4+n);return function(A,e){const t=e.length>>1;for(let n=0;n{if(!(e instanceof Uint8Array))throw new Error("load() expects an Uint8Array generated by save()");const n=t.exports.Hash_GetState(),r=o(),a=4+r,B=t.exports.memory.buffer;if(e.length!==a)throw new Error(`Bad state length (expected ${a} bytes, got ${e.length})`);if(!function(A,e){if(A.length!==2*e.length)return!1;for(let t=0;t{if(!C(A,n))return B(n),g(A),I("hex",i);const o=l(A);return r.set(o),t.exports.Hash_Calculate(o.length,n,i),f(c,r,e)},hashLength:e}}))}const C=new r;let y=null;A.adler32=function(A){if(null===y)return function(A,e,t){return n(this,void 0,void 0,(function*(){const n=yield A.lock(),r=yield d(e,t);return n(),r}))}(C,t,4).then((e=>(y=e,y.calculate(A))));try{const e=y.calculate(A);return Promise.resolve(e)}catch(A){return Promise.reject(A)}},A.createAdler32=function(){return d(t,4).then((A=>{A.init();const e={init:()=>(A.init(),e),update:t=>(A.update(t),e),digest:e=>A.digest(e),save:()=>A.save(),load:t=>(A.load(t),e),blockSize:4,digestSize:4};return e}))}})); diff --git a/frontend/node_modules/hash-wasm/dist/argon2.umd.min.js b/frontend/node_modules/hash-wasm/dist/argon2.umd.min.js new file mode 100644 index 0000000..ade8f21 --- /dev/null +++ b/frontend/node_modules/hash-wasm/dist/argon2.umd.min.js @@ -0,0 +1,7 @@ +/*! + * hash-wasm (https://www.npmjs.com/package/hash-wasm) + * (c) Dani Biro + * @license MIT + */ + +!function(A,I){"object"==typeof exports&&"undefined"!=typeof module?I(exports):"function"==typeof define&&define.amd?define(["exports"],I):I((A="undefined"!=typeof globalThis?globalThis:A||self).hashwasm=A.hashwasm||{})}(this,(function(A){"use strict";function I(A,I,i,C){return new(i||(i=Promise))((function(g,Q){function B(A){try{e(C.next(A))}catch(A){Q(A)}}function h(A){try{e(C.throw(A))}catch(A){Q(A)}}function e(A){var I;A.done?g(A.value):(I=A.value,I instanceof i?I:new i((function(A){A(I)}))).then(B,h)}e((C=C.apply(A,I||[])).next())}))}"function"==typeof SuppressedError&&SuppressedError;var i,C={name:"argon2",data:"AGFzbQEAAAABKQVgAX8Bf2AAAX9gEH9/f39/f39/f39/f39/f38AYAR/f39/AGACf38AAwYFAAECAwQFBgEBAoCAAgYIAX8BQZCoBAsHQQQGbWVtb3J5AgASSGFzaF9TZXRNZW1vcnlTaXplAAAOSGFzaF9HZXRCdWZmZXIAAQ5IYXNoX0NhbGN1bGF0ZQAECvEyBVgBAn9BACEBAkAgAEEAKAKICCICRg0AAkAgACACayIAQRB2IABBgIB8cSAASWoiAEAAQX9HDQBB/wHADwtBACEBQQBBACkDiAggAEEQdK18NwOICAsgAcALcAECfwJAQQAoAoAIIgANAEEAPwBBEHQiADYCgAhBACgCiAgiAUGAgCBGDQACQEGAgCAgAWsiAEEQdiAAQYCAfHEgAElqIgBAAEF/Rw0AQQAPC0EAQQApA4gIIABBEHStfDcDiAhBACgCgAghAAsgAAvcDgECfiAAIAQpAwAiECAAKQMAIhF8IBFCAYZC/v///x+DIBBC/////w+DfnwiEDcDACAMIBAgDCkDAIVCIIkiEDcDACAIIBAgCCkDACIRfCARQgGGQv7///8fgyAQQv////8Pg358IhA3AwAgBCAQIAQpAwCFQiiJIhA3AwAgACAQIAApAwAiEXwgEEL/////D4MgEUIBhkL+////H4N+fCIQNwMAIAwgECAMKQMAhUIwiSIQNwMAIAggECAIKQMAIhF8IBBC/////w+DIBFCAYZC/v///x+DfnwiEDcDACAEIBAgBCkDAIVCAYk3AwAgASAFKQMAIhAgASkDACIRfCARQgGGQv7///8fgyAQQv////8Pg358IhA3AwAgDSAQIA0pAwCFQiCJIhA3AwAgCSAQIAkpAwAiEXwgEUIBhkL+////H4MgEEL/////D4N+fCIQNwMAIAUgECAFKQMAhUIoiSIQNwMAIAEgECABKQMAIhF8IBBC/////w+DIBFCAYZC/v///x+DfnwiEDcDACANIBAgDSkDAIVCMIkiEDcDACAJIBAgCSkDACIRfCAQQv////8PgyARQgGGQv7///8fg358IhA3AwAgBSAQIAUpAwCFQgGJNwMAIAIgBikDACIQIAIpAwAiEXwgEUIBhkL+////H4MgEEL/////D4N+fCIQNwMAIA4gECAOKQMAhUIgiSIQNwMAIAogECAKKQMAIhF8IBFCAYZC/v///x+DIBBC/////w+DfnwiEDcDACAGIBAgBikDAIVCKIkiEDcDACACIBAgAikDACIRfCAQQv////8PgyARQgGGQv7///8fg358IhA3AwAgDiAQIA4pAwCFQjCJIhA3AwAgCiAQIAopAwAiEXwgEEL/////D4MgEUIBhkL+////H4N+fCIQNwMAIAYgECAGKQMAhUIBiTcDACADIAcpAwAiECADKQMAIhF8IBFCAYZC/v///x+DIBBC/////w+DfnwiEDcDACAPIBAgDykDAIVCIIkiEDcDACALIBAgCykDACIRfCARQgGGQv7///8fgyAQQv////8Pg358IhA3AwAgByAQIAcpAwCFQiiJIhA3AwAgAyAQIAMpAwAiEXwgEEL/////D4MgEUIBhkL+////H4N+fCIQNwMAIA8gECAPKQMAhUIwiSIQNwMAIAsgECALKQMAIhF8IBBC/////w+DIBFCAYZC/v///x+DfnwiEDcDACAHIBAgBykDAIVCAYk3AwAgACAFKQMAIhAgACkDACIRfCARQgGGQv7///8fgyAQQv////8Pg358IhA3AwAgDyAQIA8pAwCFQiCJIhA3AwAgCiAQIAopAwAiEXwgEUIBhkL+////H4MgEEL/////D4N+fCIQNwMAIAUgECAFKQMAhUIoiSIQNwMAIAAgECAAKQMAIhF8IBBC/////w+DIBFCAYZC/v///x+DfnwiEDcDACAPIBAgDykDAIVCMIkiEDcDACAKIBAgCikDACIRfCAQQv////8PgyARQgGGQv7///8fg358IhA3AwAgBSAQIAUpAwCFQgGJNwMAIAEgBikDACIQIAEpAwAiEXwgEUIBhkL+////H4MgEEL/////D4N+fCIQNwMAIAwgECAMKQMAhUIgiSIQNwMAIAsgECALKQMAIhF8IBFCAYZC/v///x+DIBBC/////w+DfnwiEDcDACAGIBAgBikDAIVCKIkiEDcDACABIBAgASkDACIRfCAQQv////8PgyARQgGGQv7///8fg358IhA3AwAgDCAQIAwpAwCFQjCJIhA3AwAgCyAQIAspAwAiEXwgEEL/////D4MgEUIBhkL+////H4N+fCIQNwMAIAYgECAGKQMAhUIBiTcDACACIAcpAwAiECACKQMAIhF8IBFCAYZC/v///x+DIBBC/////w+DfnwiEDcDACANIBAgDSkDAIVCIIkiEDcDACAIIBAgCCkDACIRfCARQgGGQv7///8fgyAQQv////8Pg358IhA3AwAgByAQIAcpAwCFQiiJIhA3AwAgAiAQIAIpAwAiEXwgEEL/////D4MgEUIBhkL+////H4N+fCIQNwMAIA0gECANKQMAhUIwiSIQNwMAIAggECAIKQMAIhF8IBBC/////w+DIBFCAYZC/v///x+DfnwiEDcDACAHIBAgBykDAIVCAYk3AwAgAyAEKQMAIhAgAykDACIRfCARQgGGQv7///8fgyAQQv////8Pg358IhA3AwAgDiAQIA4pAwCFQiCJIhA3AwAgCSAQIAkpAwAiEXwgEUIBhkL+////H4MgEEL/////D4N+fCIQNwMAIAQgECAEKQMAhUIoiSIQNwMAIAMgECADKQMAIhF8IBBC/////w+DIBFCAYZC/v///x+DfnwiEDcDACAOIBAgDikDAIVCMIkiEDcDACAJIBAgCSkDACIRfCAQQv////8PgyARQgGGQv7///8fg358IhA3AwAgBCAQIAQpAwCFQgGJNwMAC98aAQN/QQAhBEEAIAIpAwAgASkDAIU3A5AIQQAgAikDCCABKQMIhTcDmAhBACACKQMQIAEpAxCFNwOgCEEAIAIpAxggASkDGIU3A6gIQQAgAikDICABKQMghTcDsAhBACACKQMoIAEpAyiFNwO4CEEAIAIpAzAgASkDMIU3A8AIQQAgAikDOCABKQM4hTcDyAhBACACKQNAIAEpA0CFNwPQCEEAIAIpA0ggASkDSIU3A9gIQQAgAikDUCABKQNQhTcD4AhBACACKQNYIAEpA1iFNwPoCEEAIAIpA2AgASkDYIU3A/AIQQAgAikDaCABKQNohTcD+AhBACACKQNwIAEpA3CFNwOACUEAIAIpA3ggASkDeIU3A4gJQQAgAikDgAEgASkDgAGFNwOQCUEAIAIpA4gBIAEpA4gBhTcDmAlBACACKQOQASABKQOQAYU3A6AJQQAgAikDmAEgASkDmAGFNwOoCUEAIAIpA6ABIAEpA6ABhTcDsAlBACACKQOoASABKQOoAYU3A7gJQQAgAikDsAEgASkDsAGFNwPACUEAIAIpA7gBIAEpA7gBhTcDyAlBACACKQPAASABKQPAAYU3A9AJQQAgAikDyAEgASkD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",hash:"e4cdc523"};class g{constructor(){this.mutex=Promise.resolve()}lock(){let A=()=>{};return this.mutex=this.mutex.then((()=>new Promise(A))),new Promise((I=>{A=I}))}dispatch(A){return I(this,void 0,void 0,(function*(){const I=yield this.lock();try{return yield Promise.resolve(A())}finally{I()}}))}}const Q="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:global,B=null!==(i=Q.Buffer)&&void 0!==i?i:null,h=Q.TextEncoder?new Q.TextEncoder:null;function e(A,I){return(15&A)+(A>>6|A>>3&8)<<4|(15&I)+(I>>6|I>>3&8)}function w(A,I){const i=I.length>>1;for(let C=0;C>>4;A[C++]=i>9?i+t:i+o,i=15&I[g],A[C++]=i>9?i+t:i+o}return String.fromCharCode.apply(null,A)}const n=null!==B?A=>{if("string"==typeof A){const I=B.from(A,"utf8");return new Uint8Array(I.buffer,I.byteOffset,I.length)}if(B.isBuffer(A))return new Uint8Array(A.buffer,A.byteOffset,A.length);if(ArrayBuffer.isView(A))return new Uint8Array(A.buffer,A.byteOffset,A.byteLength);throw new Error("Invalid data type!")}:A=>{if("string"==typeof A)return h.encode(A);if(ArrayBuffer.isView(A))return new Uint8Array(A.buffer,A.byteOffset,A.byteLength);throw new Error("Invalid data type!")},r="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",D=new Uint8Array(256);for(let A=0;A>18&63)+r.charAt(i>>12&63)+r.charAt(i>>6&63)+r.charAt(63&i);g.push(C)}if(1===C){const C=A[i-1],Q=r.charAt(C>>2),B=r.charAt(C<<4&63);g.push(`${Q}${B}`),I&&g.push("==")}else if(2===C){const C=(A[i-2]<<8)+A[i-1],Q=r.charAt(C>>10),B=r.charAt(C>>4&63),h=r.charAt(C<<2&63);g.push(`${Q}${B}${h}`),I&&g.push("=")}return g.join("")}function f(A){let I=Math.floor(.75*A.length);const i=A.length;return"="===A[i-1]&&(I-=1,"="===A[i-2]&&(I-=1)),I}function k(A){const I=f(A),i=A.length,C=new Uint8Array(I);let g=0;for(let I=0;I>4,g+=1,C[g]=(15&Q)<<4|B>>2,g+=1,C[g]=(3&B)<<6|63&h,g+=1}return C}const a=16384,s=new g,S=new Map;function U(A,i){return I(this,void 0,void 0,(function*(){let C=null,g=null,Q=!1;if("undefined"==typeof WebAssembly)throw new Error("WebAssembly is not supported in this environment!");const B=()=>new DataView(C.exports.memory.buffer).getUint32(C.exports.STATE_SIZE,!0),h=s.dispatch((()=>I(this,void 0,void 0,(function*(){if(!S.has(A.name)){const I=k(A.data),i=WebAssembly.compile(I);S.set(A.name,i)}const I=yield S.get(A.name);C=yield WebAssembly.instantiate(I,{})})))),t=(A=null)=>{Q=!0,C.exports.Hash_Init(A)},o=A=>{if(!Q)throw new Error("update() called before init()");(A=>{let I=0;for(;I{if(!Q)throw new Error("digest() called before init()");return Q=!1,C.exports.Hash_Final(I),"binary"===A?g.slice(0,i):E(r,g,i)},F=A=>"string"==typeof A?A.length<4096:A.byteLength!0;break;case"blake2b":case"blake2s":f=(A,I)=>I<=512&&F(A);break;case"blake3":f=(A,I)=>0===I&&F(A);break;case"xxhash64":case"xxhash3":case"xxhash128":case"crc64":f=()=>!1}return yield(()=>I(this,void 0,void 0,(function*(){C||(yield h);const A=C.exports.Hash_GetBuffer(),I=C.exports.memory.buffer;g=new Uint8Array(I,A,a)})))(),{getMemory:()=>g,writeMemory:(A,I=0)=>{g.set(A,I)},getExports:()=>C.exports,setMemorySize:A=>{C.exports.Hash_SetMemorySize(A);const I=C.exports.Hash_GetBuffer(),i=C.exports.memory.buffer;g=new Uint8Array(i,I,A)},init:t,update:o,digest:D,save:()=>{if(!Q)throw new Error("save() can only be called after init() and before digest()");const I=C.exports.Hash_GetState(),i=B(),g=C.exports.memory.buffer,h=new Uint8Array(g,I,i),e=new Uint8Array(4+i);return w(e,A.hash),e.set(h,4),e},load:I=>{if(!(I instanceof Uint8Array))throw new Error("load() expects an Uint8Array generated by save()");const i=C.exports.Hash_GetState(),g=B(),h=4+g,w=C.exports.memory.buffer;if(I.length!==h)throw new Error(`Bad state length (expected ${h} bytes, got ${I.length})`);if(!function(A,I){if(A.length!==2*I.length)return!1;for(let i=0;i{if(!f(A,I))return t(I),o(A),D("hex",Q);const B=n(A);return g.set(B),C.exports.Hash_Calculate(B.length,I,Q),E(r,g,i)},hashLength:i}}))}var c={name:"blake2b",data:"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",hash:"c6f286e6"};function G(A){return!Number.isInteger(A)||A<8||A>512||A%8!=0?new Error("Invalid variant! Valid values: 8, 16, ..., 512"):null}function p(A=512,I=null){if(G(A))return Promise.reject(G(A));let i=null,C=A;if(null!==I){if(i=n(I),i.length>64)return Promise.reject(new Error("Max key length is 64 bytes"));g=A,Q=i.length,C=g|Q<<16}var g,Q;const B=A/8;return U(c,B).then((A=>{C>512&&A.writeMemory(i),A.init(C);const I={init:C>512?()=>(A.writeMemory(i),A.init(C),I):()=>(A.init(C),I),update:i=>(A.update(i),I),digest:I=>A.digest(I),save:()=>A.save(),load:i=>(A.load(i),I),blockSize:128,digestSize:B};return I}))}new g;const y=new DataView(new ArrayBuffer(4));function J(A){return y.setInt32(0,A,!0),new Uint8Array(y.buffer)}function l(A,i,C){return I(this,void 0,void 0,(function*(){if(C<=64){const A=yield p(8*C);return A.update(J(C)),A.update(i),A.digest("binary")}const I=Math.ceil(C/32)-2,g=new Uint8Array(C);A.init(),A.update(J(C)),A.update(i);let Q=A.digest("binary");g.set(Q.subarray(0,32),0);for(let i=1;i{var I;if(!A||"object"!=typeof A)throw new Error("Invalid options parameter. It requires an object.");if(!A.password)throw new Error("Password must be specified");if(A.password=n(A.password),A.password.length<1)throw new Error("Password must be specified");if(!A.salt)throw new Error("Salt must be specified");if(A.salt=n(A.salt),A.salt.length<8)throw new Error("Salt should be at least 8 bytes long");if(A.secret=n(null!==(I=A.secret)&&void 0!==I?I:""),!Number.isInteger(A.iterations)||A.iterations<1)throw new Error("Iterations should be a positive number");if(!Number.isInteger(A.parallelism)||A.parallelism<1)throw new Error("Parallelism should be a positive number");if(!Number.isInteger(A.hashLength)||A.hashLength<4)throw new Error("Hash length should be at least 4 bytes.");if(!Number.isInteger(A.memorySize))throw new Error("Memory size should be specified.");if(A.memorySize<8*A.parallelism)throw new Error("Memory size should be at least 8 * parallelism.");if(void 0===A.outputType&&(A.outputType="hex"),!["hex","binary","encoded"].includes(A.outputType))throw new Error(`Insupported output type ${A.outputType}. Valid values: ['hex', 'binary', 'encoded']`)};A.argon2Verify=function(A){return I(this,void 0,void 0,(function*(){(A=>{if(!A||"object"!=typeof A)throw new Error("Invalid options parameter. It requires an object.");if(void 0===A.hash||"string"!=typeof A.hash)throw new Error("Hash should be specified")})(A);const I=((A,I,i)=>{const C=I.match(/^\$argon2(id|i|d)\$v=([0-9]+)\$((?:[mtp]=[0-9]+,){2}[mtp]=[0-9]+)\$([A-Za-z0-9+/]+)\$([A-Za-z0-9+/]+)$/);if(!C)throw new Error("Invalid hash");const[,g,Q,B,h,e]=C;if("19"!==Q)throw new Error(`Unsupported version: ${Q}`);const w={},t={m:"memorySize",p:"parallelism",t:"iterations"};for(const A of B.split(",")){const[I,i]=A.split("=");w[t[I]]=Number(i)}return Object.assign(Object.assign({},w),{password:A,secret:i,hashType:g,salt:k(h),hashLength:f(e),outputType:"encoded"})})(A.password,A.hash,A.secret);H(I);const i=A.hash.lastIndexOf("$")+1;return(yield u(I)).substring(i)===A.hash.substring(i)}))},A.argon2d=function(A){return I(this,void 0,void 0,(function*(){return H(A),u(Object.assign(Object.assign({},A),{hashType:"d"}))}))},A.argon2i=function(A){return I(this,void 0,void 0,(function*(){return H(A),u(Object.assign(Object.assign({},A),{hashType:"i"}))}))},A.argon2id=function(A){return I(this,void 0,void 0,(function*(){return H(A),u(Object.assign(Object.assign({},A),{hashType:"id"}))}))}})); diff --git a/frontend/node_modules/hash-wasm/dist/bcrypt.umd.min.js b/frontend/node_modules/hash-wasm/dist/bcrypt.umd.min.js new file mode 100644 index 0000000..bad6284 --- /dev/null +++ b/frontend/node_modules/hash-wasm/dist/bcrypt.umd.min.js @@ -0,0 +1,7 @@ +/*! + * hash-wasm (https://www.npmjs.com/package/hash-wasm) + * (c) Dani Biro + * @license MIT + */ + +!function(A,B){"object"==typeof exports&&"undefined"!=typeof module?B(exports):"function"==typeof define&&define.amd?define(["exports"],B):B((A="undefined"!=typeof globalThis?globalThis:A||self).hashwasm=A.hashwasm||{})}(this,(function(A){"use strict";function B(A,B,Q,g){return new(Q||(Q=Promise))((function(I,o){function C(A){try{H(g.next(A))}catch(A){o(A)}}function E(A){try{H(g.throw(A))}catch(A){o(A)}}function H(A){var B;A.done?I(A.value):(B=A.value,B instanceof Q?B:new Q((function(A){A(B)}))).then(C,E)}H((g=g.apply(A,B||[])).next())}))}"function"==typeof SuppressedError&&SuppressedError;var Q,g={name:"bcrypt",data:"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",hash:"8bd8822d"};const I="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:global,o=null!==(Q=I.Buffer)&&void 0!==Q?Q:null,C=I.TextEncoder?new I.TextEncoder:null;function E(A,B){return(15&A)+(A>>6|A>>3&8)<<4|(15&B)+(B>>6|B>>3&8)}const H="a".charCodeAt(0)-10,i="0".charCodeAt(0);function n(A,B,Q){let g=0;for(let I=0;I>>4;A[g++]=Q>9?Q+H:Q+i,Q=15&B[I],A[g++]=Q>9?Q+H:Q+i}return String.fromCharCode.apply(null,A)}const t=null!==o?A=>{if("string"==typeof A){const B=o.from(A,"utf8");return new Uint8Array(B.buffer,B.byteOffset,B.length)}if(o.isBuffer(A))return new Uint8Array(A.buffer,A.byteOffset,A.length);if(ArrayBuffer.isView(A))return new Uint8Array(A.buffer,A.byteOffset,A.byteLength);throw new Error("Invalid data type!")}:A=>{if("string"==typeof A)return C.encode(A);if(ArrayBuffer.isView(A))return new Uint8Array(A.buffer,A.byteOffset,A.byteLength);throw new Error("Invalid data type!")},a="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",w=new Uint8Array(256);for(let A=0;A>4,I+=1,g[I]=(15&o)<<4|C>>2,I+=1,g[I]=(3&C)<<6|63&E,I+=1}return g}const F=16384,e=new class{constructor(){this.mutex=Promise.resolve()}lock(){let A=()=>{};return this.mutex=this.mutex.then((()=>new Promise(A))),new Promise((B=>{A=B}))}dispatch(A){return B(this,void 0,void 0,(function*(){const B=yield this.lock();try{return yield Promise.resolve(A())}finally{B()}}))}},d=new Map;function f(A,Q){return B(this,void 0,void 0,(function*(){let g=null,I=null,o=!1;if("undefined"==typeof WebAssembly)throw new Error("WebAssembly is not supported in this environment!");const C=()=>new DataView(g.exports.memory.buffer).getUint32(g.exports.STATE_SIZE,!0),H=e.dispatch((()=>B(this,void 0,void 0,(function*(){if(!d.has(A.name)){const B=c(A.data),Q=WebAssembly.compile(B);d.set(A.name,Q)}const B=yield d.get(A.name);g=yield WebAssembly.instantiate(B,{})})))),i=(A=null)=>{o=!0,g.exports.Hash_Init(A)},a=A=>{if(!o)throw new Error("update() called before init()");(A=>{let B=0;for(;B{if(!o)throw new Error("digest() called before init()");return o=!1,g.exports.Hash_Final(B),"binary"===A?I.slice(0,Q):n(w,I,Q)},r=A=>"string"==typeof A?A.length<4096:A.byteLength!0;break;case"blake2b":case"blake2s":q=(A,B)=>B<=512&&r(A);break;case"blake3":q=(A,B)=>0===B&&r(A);break;case"xxhash64":case"xxhash3":case"xxhash128":case"crc64":q=()=>!1}return yield(()=>B(this,void 0,void 0,(function*(){g||(yield H);const A=g.exports.Hash_GetBuffer(),B=g.exports.memory.buffer;I=new Uint8Array(B,A,F)})))(),{getMemory:()=>I,writeMemory:(A,B=0)=>{I.set(A,B)},getExports:()=>g.exports,setMemorySize:A=>{g.exports.Hash_SetMemorySize(A);const B=g.exports.Hash_GetBuffer(),Q=g.exports.memory.buffer;I=new Uint8Array(Q,B,A)},init:i,update:a,digest:f,save:()=>{if(!o)throw new Error("save() can only be called after init() and before digest()");const B=g.exports.Hash_GetState(),Q=C(),I=g.exports.memory.buffer,H=new Uint8Array(I,B,Q),i=new Uint8Array(4+Q);return function(A,B){const Q=B.length>>1;for(let g=0;g{if(!(B instanceof Uint8Array))throw new Error("load() expects an Uint8Array generated by save()");const Q=g.exports.Hash_GetState(),I=C(),H=4+I,i=g.exports.memory.buffer;if(B.length!==H)throw new Error(`Bad state length (expected ${H} bytes, got ${B.length})`);if(!function(A,B){if(A.length!==2*B.length)return!1;for(let Q=0;Q{if(!q(A,B))return i(B),a(A),f("hex",o);const C=t(A);return I.set(C),g.exports.Hash_Calculate(C.length,B,o),n(w,I,Q)},hashLength:Q}}))}function r(A){return B(this,void 0,void 0,(function*(){const{costFactor:B,password:Q,salt:I}=A,o=yield f(g,0);o.writeMemory(t(I),0);const C=t(Q);o.writeMemory(C,16);const E="encoded"===A.outputType?1:0;o.getExports().bcrypt(C.length,B,E);const H=o.getMemory();if("encoded"===A.outputType)return i=H,a=60,String.fromCharCode(...i.subarray(0,a));var i,a;if("hex"===A.outputType){return n(new Uint8Array(48),H,24)}return H.slice(0,24)}))}const q=A=>{if(!A||"object"!=typeof A)throw new Error("Invalid options parameter. It requires an object.");if(void 0===A.hash||"string"!=typeof A.hash)throw new Error("Hash should be specified");if(60!==A.hash.length)throw new Error("Hash should be 60 bytes long");if(!(A=>!(!/^\$2[axyb]\$[0-3][0-9]\$[./A-Za-z0-9]{53}$/.test(A)||"0"===A[4]&&Number(A[5])<4||"3"===A[4]&&Number(A[5])>1))(A.hash))throw new Error("Invalid hash");if(A.password=t(A.password),A.password.length<1)throw new Error("Password should be at least 1 byte long");if(A.password.length>72)throw new Error("Password should be at most 72 bytes long")};A.bcrypt=function(A){return B(this,void 0,void 0,(function*(){return(A=>{if(!A||"object"!=typeof A)throw new Error("Invalid options parameter. It requires an object.");if(!Number.isInteger(A.costFactor)||A.costFactor<4||A.costFactor>31)throw new Error("Cost factor should be a number between 4 and 31");if(A.password=t(A.password),A.password.length<1)throw new Error("Password should be at least 1 byte long");if(A.password.length>72)throw new Error("Password should be at most 72 bytes long");if(A.salt=t(A.salt),16!==A.salt.length)throw new Error("Salt should be 16 bytes long");if(void 0===A.outputType&&(A.outputType="encoded"),!["hex","binary","encoded"].includes(A.outputType))throw new Error(`Insupported output type ${A.outputType}. Valid values: ['hex', 'binary', 'encoded']`)})(A),r(A)}))},A.bcryptVerify=function(A){return B(this,void 0,void 0,(function*(){q(A);const{hash:B,password:Q}=A,I=yield f(g,0);I.writeMemory(t(B),0);const o=t(Q);return I.writeMemory(o,60),!!I.getExports().bcrypt_verify(o.length)}))}})); diff --git a/frontend/node_modules/hash-wasm/dist/blake2b.umd.min.js b/frontend/node_modules/hash-wasm/dist/blake2b.umd.min.js new file mode 100644 index 0000000..c3071d8 --- /dev/null +++ b/frontend/node_modules/hash-wasm/dist/blake2b.umd.min.js @@ -0,0 +1,7 @@ +/*! + * hash-wasm (https://www.npmjs.com/package/hash-wasm) + * (c) Dani Biro + * @license MIT + */ + +!function(I,A){"object"==typeof exports&&"undefined"!=typeof module?A(exports):"function"==typeof define&&define.amd?define(["exports"],A):A((I="undefined"!=typeof globalThis?globalThis:I||self).hashwasm=I.hashwasm||{})}(this,(function(I){"use strict";var A,i={name:"blake2b",data:"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",hash:"c6f286e6"};function C(I,A,i,C){return new(i||(i=Promise))((function(g,h){function e(I){try{w(C.next(I))}catch(I){h(I)}}function B(I){try{w(C.throw(I))}catch(I){h(I)}}function w(I){var A;I.done?g(I.value):(A=I.value,A instanceof i?A:new i((function(I){I(A)}))).then(e,B)}w((C=C.apply(I,A||[])).next())}))}"function"==typeof SuppressedError&&SuppressedError;class g{constructor(){this.mutex=Promise.resolve()}lock(){let I=()=>{};return this.mutex=this.mutex.then((()=>new Promise(I))),new Promise((A=>{I=A}))}dispatch(I){return C(this,void 0,void 0,(function*(){const A=yield this.lock();try{return yield Promise.resolve(I())}finally{A()}}))}}const h="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:global,e=null!==(A=h.Buffer)&&void 0!==A?A:null,B=h.TextEncoder?new h.TextEncoder:null;function w(I,A){return(15&I)+(I>>6|I>>3&8)<<4|(15&A)+(A>>6|A>>3&8)}const t="a".charCodeAt(0)-10,F="0".charCodeAt(0);function f(I,A,i){let C=0;for(let g=0;g>>4;I[C++]=i>9?i+t:i+F,i=15&A[g],I[C++]=i>9?i+t:i+F}return String.fromCharCode.apply(null,I)}const Q=null!==e?I=>{if("string"==typeof I){const A=e.from(I,"utf8");return new Uint8Array(A.buffer,A.byteOffset,A.length)}if(e.isBuffer(I))return new Uint8Array(I.buffer,I.byteOffset,I.length);if(ArrayBuffer.isView(I))return new Uint8Array(I.buffer,I.byteOffset,I.byteLength);throw new Error("Invalid data type!")}:I=>{if("string"==typeof I)return B.encode(I);if(ArrayBuffer.isView(I))return new Uint8Array(I.buffer,I.byteOffset,I.byteLength);throw new Error("Invalid data type!")},n="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",o=new Uint8Array(256);for(let I=0;I>4,g+=1,C[g]=(15&h)<<4|e>>2,g+=1,C[g]=(3&e)<<6|63&B,g+=1}return C}const S=16384,U=new g,a=new Map;function J(I,A){return C(this,void 0,void 0,(function*(){let i=null,g=null,h=!1;if("undefined"==typeof WebAssembly)throw new Error("WebAssembly is not supported in this environment!");const e=()=>new DataView(i.exports.memory.buffer).getUint32(i.exports.STATE_SIZE,!0),B=U.dispatch((()=>C(this,void 0,void 0,(function*(){if(!a.has(I.name)){const A=r(I.data),i=WebAssembly.compile(A);a.set(I.name,i)}const A=yield a.get(I.name);i=yield WebAssembly.instantiate(A,{})})))),t=(I=null)=>{h=!0,i.exports.Hash_Init(I)},F=I=>{if(!h)throw new Error("update() called before init()");(I=>{let A=0;for(;A{if(!h)throw new Error("digest() called before init()");return h=!1,i.exports.Hash_Final(C),"binary"===I?g.slice(0,A):f(n,g,A)},J=I=>"string"==typeof I?I.length<4096:I.byteLength!0;break;case"blake2b":case"blake2s":s=(I,A)=>A<=512&&J(I);break;case"blake3":s=(I,A)=>0===A&&J(I);break;case"xxhash64":case"xxhash3":case"xxhash128":case"crc64":s=()=>!1}return yield(()=>C(this,void 0,void 0,(function*(){i||(yield B);const I=i.exports.Hash_GetBuffer(),A=i.exports.memory.buffer;g=new Uint8Array(A,I,S)})))(),{getMemory:()=>g,writeMemory:(I,A=0)=>{g.set(I,A)},getExports:()=>i.exports,setMemorySize:I=>{i.exports.Hash_SetMemorySize(I);const A=i.exports.Hash_GetBuffer(),C=i.exports.memory.buffer;g=new Uint8Array(C,A,I)},init:t,update:F,digest:o,save:()=>{if(!h)throw new Error("save() can only be called after init() and before digest()");const A=i.exports.Hash_GetState(),C=e(),g=i.exports.memory.buffer,B=new Uint8Array(g,A,C),t=new Uint8Array(4+C);return function(I,A){const i=A.length>>1;for(let C=0;C{if(!(A instanceof Uint8Array))throw new Error("load() expects an Uint8Array generated by save()");const C=i.exports.Hash_GetState(),g=e(),B=4+g,t=i.exports.memory.buffer;if(A.length!==B)throw new Error(`Bad state length (expected ${B} bytes, got ${A.length})`);if(!function(I,A){if(I.length!==2*A.length)return!1;for(let i=0;i{if(!s(I,C))return t(C),F(I),o("hex",h);const e=Q(I);return g.set(e),i.exports.Hash_Calculate(e.length,C,h),f(n,g,A)},hashLength:A}}))}const s=new g;let k=null;function V(I){return!Number.isInteger(I)||I<8||I>512||I%8!=0?new Error("Invalid variant! Valid values: 8, 16, ..., 512"):null}function G(I,A){return I|A<<16}I.blake2b=function(I,A=512,g=null){if(V(A))return Promise.reject(V(A));let h=null,e=A;if(null!==g){if(h=Q(g),h.length>64)return Promise.reject(new Error("Max key length is 64 bytes"));e=G(A,h.length)}const B=A/8;if(null===k||k.hashLength!==B)return function(I,A,i){return C(this,void 0,void 0,(function*(){const C=yield I.lock(),g=yield J(A,i);return C(),g}))}(s,i,B).then((A=>(k=A,e>512&&k.writeMemory(h),k.calculate(I,e))));try{e>512&&k.writeMemory(h);const A=k.calculate(I,e);return Promise.resolve(A)}catch(I){return Promise.reject(I)}},I.createBLAKE2b=function(I=512,A=null){if(V(I))return Promise.reject(V(I));let C=null,g=I;if(null!==A){if(C=Q(A),C.length>64)return Promise.reject(new Error("Max key length is 64 bytes"));g=G(I,C.length)}const h=I/8;return J(i,h).then((I=>{g>512&&I.writeMemory(C),I.init(g);const A={init:g>512?()=>(I.writeMemory(C),I.init(g),A):()=>(I.init(g),A),update:i=>(I.update(i),A),digest:A=>I.digest(A),save:()=>I.save(),load:i=>(I.load(i),A),blockSize:128,digestSize:h};return A}))}})); diff --git a/frontend/node_modules/hash-wasm/dist/blake2s.umd.min.js b/frontend/node_modules/hash-wasm/dist/blake2s.umd.min.js new file mode 100644 index 0000000..6f224b9 --- /dev/null +++ b/frontend/node_modules/hash-wasm/dist/blake2s.umd.min.js @@ -0,0 +1,7 @@ +/*! + * hash-wasm (https://www.npmjs.com/package/hash-wasm) + * (c) Dani Biro + * @license MIT + */ + +!function(I,A){"object"==typeof exports&&"undefined"!=typeof module?A(exports):"function"==typeof define&&define.amd?define(["exports"],A):A((I="undefined"!=typeof globalThis?globalThis:I||self).hashwasm=I.hashwasm||{})}(this,(function(I){"use strict";var A,i={name:"blake2s",data:"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",hash:"5c0ff166"};function B(I,A,i,B){return new(i||(i=Promise))((function(g,o){function e(I){try{t(B.next(I))}catch(I){o(I)}}function c(I){try{t(B.throw(I))}catch(I){o(I)}}function t(I){var A;I.done?g(I.value):(A=I.value,A instanceof i?A:new i((function(I){I(A)}))).then(e,c)}t((B=B.apply(I,A||[])).next())}))}"function"==typeof SuppressedError&&SuppressedError;class g{constructor(){this.mutex=Promise.resolve()}lock(){let I=()=>{};return this.mutex=this.mutex.then((()=>new Promise(I))),new Promise((A=>{I=A}))}dispatch(I){return B(this,void 0,void 0,(function*(){const A=yield this.lock();try{return yield Promise.resolve(I())}finally{A()}}))}}const o="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:global,e=null!==(A=o.Buffer)&&void 0!==A?A:null,c=o.TextEncoder?new o.TextEncoder:null;function t(I,A){return(15&I)+(I>>6|I>>3&8)<<4|(15&A)+(A>>6|A>>3&8)}const a="a".charCodeAt(0)-10,n="0".charCodeAt(0);function Q(I,A,i){let B=0;for(let g=0;g>>4;I[B++]=i>9?i+a:i+n,i=15&A[g],I[B++]=i>9?i+a:i+n}return String.fromCharCode.apply(null,I)}const h=null!==e?I=>{if("string"==typeof I){const A=e.from(I,"utf8");return new Uint8Array(A.buffer,A.byteOffset,A.length)}if(e.isBuffer(I))return new Uint8Array(I.buffer,I.byteOffset,I.length);if(ArrayBuffer.isView(I))return new Uint8Array(I.buffer,I.byteOffset,I.byteLength);throw new Error("Invalid data type!")}:I=>{if("string"==typeof I)return c.encode(I);if(ArrayBuffer.isView(I))return new Uint8Array(I.buffer,I.byteOffset,I.byteLength);throw new Error("Invalid data type!")},C="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",r=new Uint8Array(256);for(let I=0;I>4,g+=1,B[g]=(15&o)<<4|e>>2,g+=1,B[g]=(3&e)<<6|63&c,g+=1}return B}const y=16384,H=new g,d=new Map;function l(I,A){return B(this,void 0,void 0,(function*(){let i=null,g=null,o=!1;if("undefined"==typeof WebAssembly)throw new Error("WebAssembly is not supported in this environment!");const e=()=>new DataView(i.exports.memory.buffer).getUint32(i.exports.STATE_SIZE,!0),c=H.dispatch((()=>B(this,void 0,void 0,(function*(){if(!d.has(I.name)){const A=E(I.data),i=WebAssembly.compile(A);d.set(I.name,i)}const A=yield d.get(I.name);i=yield WebAssembly.instantiate(A,{})})))),a=(I=null)=>{o=!0,i.exports.Hash_Init(I)},n=I=>{if(!o)throw new Error("update() called before init()");(I=>{let A=0;for(;A{if(!o)throw new Error("digest() called before init()");return o=!1,i.exports.Hash_Final(B),"binary"===I?g.slice(0,A):Q(C,g,A)},l=I=>"string"==typeof I?I.length<4096:I.byteLength!0;break;case"blake2b":case"blake2s":s=(I,A)=>A<=512&&l(I);break;case"blake3":s=(I,A)=>0===A&&l(I);break;case"xxhash64":case"xxhash3":case"xxhash128":case"crc64":s=()=>!1}return yield(()=>B(this,void 0,void 0,(function*(){i||(yield c);const I=i.exports.Hash_GetBuffer(),A=i.exports.memory.buffer;g=new Uint8Array(A,I,y)})))(),{getMemory:()=>g,writeMemory:(I,A=0)=>{g.set(I,A)},getExports:()=>i.exports,setMemorySize:I=>{i.exports.Hash_SetMemorySize(I);const A=i.exports.Hash_GetBuffer(),B=i.exports.memory.buffer;g=new Uint8Array(B,A,I)},init:a,update:n,digest:r,save:()=>{if(!o)throw new Error("save() can only be called after init() and before digest()");const A=i.exports.Hash_GetState(),B=e(),g=i.exports.memory.buffer,c=new Uint8Array(g,A,B),a=new Uint8Array(4+B);return function(I,A){const i=A.length>>1;for(let B=0;B{if(!(A instanceof Uint8Array))throw new Error("load() expects an Uint8Array generated by save()");const B=i.exports.Hash_GetState(),g=e(),c=4+g,a=i.exports.memory.buffer;if(A.length!==c)throw new Error(`Bad state length (expected ${c} bytes, got ${A.length})`);if(!function(I,A){if(I.length!==2*A.length)return!1;for(let i=0;i{if(!s(I,B))return a(B),n(I),r("hex",o);const e=h(I);return g.set(e),i.exports.Hash_Calculate(e.length,B,o),Q(C,g,A)},hashLength:A}}))}const s=new g;let q=null;function R(I){return!Number.isInteger(I)||I<8||I>256||I%8!=0?new Error("Invalid variant! Valid values: 8, 16, ..., 256"):null}function F(I,A){return I|A<<16}I.blake2s=function(I,A=256,g=null){if(R(A))return Promise.reject(R(A));let o=null,e=A;if(null!==g){if(o=h(g),o.length>32)return Promise.reject(new Error("Max key length is 32 bytes"));e=F(A,o.length)}const c=A/8;if(null===q||q.hashLength!==c)return function(I,A,i){return B(this,void 0,void 0,(function*(){const B=yield I.lock(),g=yield l(A,i);return B(),g}))}(s,i,c).then((A=>(q=A,e>512&&q.writeMemory(o),q.calculate(I,e))));try{e>512&&q.writeMemory(o);const A=q.calculate(I,e);return Promise.resolve(A)}catch(I){return Promise.reject(I)}},I.createBLAKE2s=function(I=256,A=null){if(R(I))return Promise.reject(R(I));let B=null,g=I;if(null!==A){if(B=h(A),B.length>32)return Promise.reject(new Error("Max key length is 32 bytes"));g=F(I,B.length)}const o=I/8;return l(i,o).then((I=>{g>512&&I.writeMemory(B),I.init(g);const A={init:g>512?()=>(I.writeMemory(B),I.init(g),A):()=>(I.init(g),A),update:i=>(I.update(i),A),digest:A=>I.digest(A),save:()=>I.save(),load:i=>(I.load(i),A),blockSize:64,digestSize:o};return A}))}})); diff --git a/frontend/node_modules/hash-wasm/dist/blake3.umd.min.js b/frontend/node_modules/hash-wasm/dist/blake3.umd.min.js new file mode 100644 index 0000000..5f9edda --- /dev/null +++ b/frontend/node_modules/hash-wasm/dist/blake3.umd.min.js @@ -0,0 +1,7 @@ +/*! + * hash-wasm (https://www.npmjs.com/package/hash-wasm) + * (c) Dani Biro + * @license MIT + */ + +!function(A,I){"object"==typeof exports&&"undefined"!=typeof module?I(exports):"function"==typeof define&&define.amd?define(["exports"],I):I((A="undefined"!=typeof globalThis?globalThis:A||self).hashwasm=A.hashwasm||{})}(this,(function(A){"use strict";var I,g={name:"blake3",data:"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IQEgAkFAaiICQcAASw0ACwsCQEHAACAHQf8BcSIGayIFIAIgBSACSRsiCUUNACAJQQNxIQtBACEFAkAgCUEESQ0AIAAgBmohByAJQfwAcSEIQQAhBQNAIAcgBWoiAkEoaiABIAVqIgotAAA6AAAgAkEpaiAKQQFqLQAAOgAAIAJBKmogCkECai0AADoAACACQStqIApBA2otAAA6AAAgCCAFQQRqIgVHDQALCwJAIAtFDQAgASAFaiEBIAUgBmogAGpBKGohBQNAIAUgAS0AADoAACABQQFqIQEgBUEBaiEFIAtBf2oiCw0ACwsgAC0AaCEHCyAAIAcgCWo6AGggA0HAAGokAAveAwQFfwN+BX8GfiMAQdABayIBJAACQCAAe6ciAkEALQCQigEiA08NAEEALQCKigFBBHIhBCABQShqIQVBACkDmIkBIQBBACkDkIkBIQZBACkDiIkBIQdBACkDgIkBIQggAyEJA0AgASAANwMYIAEgBjcDECABIAc3AwggASAINwMAIAEgA0EFdCIDQdGJAWoiCikDADcDKCABIANB2YkBaiILKQMANwMwIAEgA0HhiQFqIgwpAwA3AzggASADQemJAWoiDSkDADcDQCABIANB8YkBaikDADcDSCABIANB+YkBaikDADcDUCABIANBgYoBaikDADcDWCADQYmKAWopAwAhDiABQcAAOgBoIAEgDjcDYCABQgA3AyAgASAEOgBpIAEgADcDiAEgASAGNwOAASABIAc3A3ggASAINwNwIAFBkAFqIAFB8ABqIAVBwABCACAEQf8BcRACIAEpA7ABIQ4gASkDkAEhDyABKQO4ASEQIAEpA5gBIREgASkDwAEhEiABKQOgASETIA0gASkDyAEgASkDqAGFNwMAIAwgEiAThTcDACALIBAgEYU3AwAgCiAOIA+FNwMAIAlBf2oiCUH/AXEiAyACSw0AC0EAIAk6AJCKAQsgAUHQAWokAAvHCQIKfwV+IwBB4AJrIgUkAAJAAkAgAUGACEsNACAFIAA2AvwBIAVB/AFqIAFBgAhGIgZBECACQQEgA0EBQQIgBBABIAZBCnQiByABTw0BIAVB4ABqIgZCADcDACAFQdgAaiIIQgA3AwAgBUHQAGoiCUIANwMAIAVByABqIgpCADcDACAFQcAAaiILQgA3AwAgBUE4aiIMQgA3AwAgBUEwaiINQgA3AwAgBSADOgBqIAVCADcDKCAFQQA7AWggBUEAKQOAiQE3AwAgBUEAKQOIiQE3AwggBUEAKQOQiQE3AxAgBUEAKQOYiQE3AxggBSABQYAIRiIOrSACfDcDICAFIAAgB2pBACABIA4bEAQgBUGIAWpBMGogDSkDADcDACAFQYgBakE4aiAMKQMANwMAIAUgBSkDACIPNwOIASAFIAUpAwgiEDcDkAEgBSAFKQMQIhE3A5gBIAUgBSkDGCISNwOgASAFIAUpAyg3A7ABIAUtAGohACAFLQBpIQcgBSkDICECIAUtAGghASAFQYgBakHAAGogCykDADcDACAFQYgBakHIAGogCikDADcDACAFQYgBakHQAGogCSkDADcDACAFQYgBakHYAGogCCkDADcDACAFQYgBakHgAGogBikDADcDACAFIAE6APABIAUgAjcDqAEgBSAAIAdFckECciIAOgDxASAFIBI3A5gCIAUgETcDkAIgBSAQNwOIAiAFIA83A4ACIAVBoAJqIAVBgAJqIAVBsAFqIAEgAiAAQf8BcRACIAUpA8ACIQIgBSkDoAIhDyAFKQPIAiEQIAUpA6gCIREgBSkD0AIhEiAFKQOwAiETIAQgDkEFdGoiASAFKQPYAiAFKQO4AoU3AxggASASIBOFNwMQIAEgECARhTcDCCABIAIgD4U3AwBBAkEBIA4bIQYMAQsgAEIBIAFBf2pBCnZBAXKteUI/hYYiD6dBCnQiDiACIAMgBRAGIQcgACAOaiABIA5rIA9C////AYMgAnwgAyAFQcAAQSAgDkGACEsbahAGIQECQCAHQQFHDQAgBCAFKQMANwMAIAQgBSkDCDcDCCAEIAUpAxA3AxAgBCAFKQMYNwMYIAQgBSkDIDcDICAEIAUpAyg3AyggBCAFKQMwNwMwIAQgBSkDODcDOEECIQYMAQtBACEGQQAhAAJAIAEgB2oiCUECSQ0AIAlBfmoiCkEBdkEBaiIGQQNxIQ5BACEHAkAgCkEGSQ0AIAZB/P///wdxIQhBACEHIAVBiAFqIQEgBSEAA0AgASAANgIAIAFBDGogAEHAAWo2AgAgAUEIaiAAQYABajYCACABQQRqIABBwABqNgIAIABBgAJqIQAgAUEQaiEBIAggB0EEaiIHRw0ACwsgCkF+cSEIAkAgDkUNACAFIAdBBnRqIQEgBUGIAWogB0ECdGohAANAIAAgATYCACABQcAAaiEBIABBBGohACAOQX9qIg4NAAsLIAhBAmohAAsgBUGIAWogBkEBQgBBACADQQRyQQBBACAEEAEgACAJTw0AIAQgBkEFdGoiASAFIAZBBnRqIgApAwA3AwAgASAAKQMINwMIIAEgACkDEDcDECABIAApAxg3AxggBkEBaiEGCyAFQeACaiQAIAYLrRAIAn8EfgF/AX4EfwR+BH8EfiMAQfABayIBJAACQCAARQ0AAkBBAC0AkIoBIgINACABQTBqQQApA9CJATcDACABQThqQQApA9iJATcDACABQQApA6CJASIDNwMAIAFBACkDqIkBIgQ3AwggAUEAKQOwiQEiBTcDECABQQApA7iJASIGNwMYIAFBACkDyIkBNwMoQQAtAIqKASECQQAtAImKASEHQQApA8CJASEIQQAtAIiKASEJIAFBwABqQQApA+CJATcDACABQcgAakEAKQPoiQE3AwAgAUHQAGpBACkD8IkBNwMAIAFB2ABqQQApA/iJATcDACABQeAAakEAKQOAigE3AwAgASAJOgBoIAEgCDcDICABIAIgB0VyIgJBAnI6AGkgAUEoaiEKQgAhCEGACSELIAJBCnJB/wFxIQwDQCABQbABaiABIAogCUH/AXEgCCAMEAIgASABKQPQASINIAEpA7ABhTcDcCABIAEpA9gBIg4gASkDuAGFNwN4IAEgASkD4AEiDyABKQPAAYU3A4ABIAEgASkD6AEiECAGhTcDqAEgASAPIAWFNwOgASABIA4gBIU3A5gBIAEgDSADhTcDkAEgASAQIAEpA8gBhTcDiAEgAEHAACAAQcAASRsiEUF/aiESAkACQCARQQdxIhMNACABQfAAaiECIAshByARIRQMAQsgEUH4AHEhFCABQfAAaiECIAshBwNAIAcgAi0AADoAACAHQQFqIQcgAkEBaiECIBNBf2oiEw0ACwsCQCASQQdJDQADQCAHIAIpAAA3AAAgB0EIaiEHIAJBCGohAiAUQXhqIhQNAAsLIAhCAXwhCCALIBFqIQsgACARayIADQAMAgsLAkACQAJAQQAtAImKASIHQQZ0QQBBAC0AiIoBIhFrRg0AIAEgEToAaCABQQApA4CKATcDYCABQQApA/iJATcDWCABQQApA/CJATcDUCABQQApA+iJATcDSCABQQApA+CJATcDQCABQQApA9iJATcDOCABQQApA9CJATcDMCABQQApA8iJATcDKCABQQApA8CJASIINwMgIAFBACkDuIkBIgM3AxggAUEAKQOwiQEiBDcDECABQQApA6iJASIFNwMIIAFBACkDoIkBIgY3AwAgAUEALQCKigEiEyAHRXJBAnIiCzoAaSATQQRyIRNBACkDmIkBIQ1BACkDkIkBIQ5BACkDiIkBIQ9BACkDgIkBIRAMAQtBwAAhESABQcAAOgBoQgAhCCABQgA3AyAgAUEAKQOYiQEiDTcDGCABQQApA5CJASIONwMQIAFBACkDiIkBIg83AwggAUEAKQOAiQEiEDcDACABQQAtAIqKAUEEciITOgBpIAEgAkF+aiICQQV0IgdByYoBaikDADcDYCABIAdBwYoBaikDADcDWCABIAdBuYoBaikDADcDUCABIAdBsYoBaikDADcDSCABIAdBqYoBaikDADcDQCABIAdBoYoBaikDADcDOCABIAdBmYoBaikDADcDMCABIAdBkYoBaikDADcDKCATIQsgECEGIA8hBSAOIQQgDSEDIAJFDQELIAJBf2oiB0EFdCIUQZGKAWopAwAhFSAUQZmKAWopAwAhFiAUQaGKAWopAwAhFyAUQamKAWopAwAhGCABIAM3A4gBIAEgBDcDgAEgASAFNwN4IAEgBjcDcCABQbABaiABQfAAaiABQShqIhQgESAIIAtB/wFxEAIgASATOgBpIAFBwAA6AGggASAYNwNAIAEgFzcDOCABIBY3AzAgASAVNwMoIAFCADcDICABIA03AxggASAONwMQIAEgDzcDCCABIBA3AwAgASABKQPoASABKQPIAYU3A2AgASABKQPgASABKQPAAYU3A1ggASABKQPYASABKQO4AYU3A1AgASABKQPQASABKQOwAYU3A0ggB0UNACACQQV0QemJAWohAiATQf8BcSERA0AgAkFoaikDACEIIAJBcGopAwAhAyACQXhqKQMAIQQgAikDACEFIAEgDTcDiAEgASAONwOAASABIA83A3ggASAQNwNwIAFBsAFqIAFB8ABqIBRBwABCACAREAIgASATOgBpIAFBwAA6AGggASAFNwNAIAEgBDcDOCABIAM3AzAgASAINwMoIAFCADcDICABIA03AxggASAONwMQIAEgDzcDCCABIBA3AwAgASABKQPoASABKQPIAYU3A2AgASABKQPgASABKQPAAYU3A1ggASABKQPYASABKQO4AYU3A1AgASABKQPQASABKQOwAYU3A0ggAkFgaiECIAdBf2oiBw0ACwsgAUEoaiEJQgAhCEGACSELIBNBCHJB/wFxIQoDQCABQbABaiABIAlBwAAgCCAKEAIgASABKQPQASIDIAEpA7ABhTcDcCABIAEpA9gBIgQgASkDuAGFNwN4IAEgASkD4AEiBSABKQPAAYU3A4ABIAEgDSABKQPoASIGhTcDqAEgASAOIAWFNwOgASABIA8gBIU3A5gBIAEgECADhTcDkAEgASAGIAEpA8gBhTcDiAEgAEHAACAAQcAASRsiEUF/aiESAkACQCARQQdxIhMNACABQfAAaiECIAshByARIRQMAQsgEUH4AHEhFCABQfAAaiECIAshBwNAIAcgAi0AADoAACAHQQFqIQcgAkEBaiECIBNBf2oiEw0ACwsCQCASQQdJDQADQCAHIAIpAAA3AAAgB0EIaiEHIAJBCGohAiAUQXhqIhQNAAsLIAhCAXwhCCALIBFqIQsgACARayIADQALCyABQfABaiQAC6MCAQR+AkACQCAAQSBGDQBCq7OP/JGjs/DbACEBQv+kuYjFkdqCm38hAkLy5rvjo6f9p6V/IQNC58yn0NbQ67O7fyEEQQAhAAwBC0EAKQOYCSEBQQApA5AJIQJBACkDiAkhA0EAKQOACSEEQRAhAAtBACAAOgCKigFBAEIANwOAigFBAEIANwP4iQFBAEIANwPwiQFBAEIANwPoiQFBAEIANwPgiQFBAEIANwPYiQFBAEIANwPQiQFBAEIANwPIiQFBAEIANwPAiQFBACABNwO4iQFBACACNwOwiQFBACADNwOoiQFBACAENwOgiQFBACABNwOYiQFBACACNwOQiQFBACADNwOIiQFBACAENwOAiQFBAEEAOgCQigFBAEEAOwGIigELBgAgABADCwYAIAAQBwsGAEGAiQELqwIBBH4CQAJAIAFBIEYNAEKrs4/8kaOz8NsAIQNC/6S5iMWR2oKbfyEEQvLmu+Ojp/2npX8hBULnzKfQ1tDrs7t/IQZBACEBDAELQQApA5gJIQNBACkDkAkhBEEAKQOICSEFQQApA4AJIQZBECEBC0EAIAE6AIqKAUEAQgA3A4CKAUEAQgA3A/iJAUEAQgA3A/CJAUEAQgA3A+iJAUEAQgA3A+CJAUEAQgA3A9iJAUEAQgA3A9CJAUEAQgA3A8iJAUEAQgA3A8CJAUEAIAM3A7iJAUEAIAQ3A7CJAUEAIAU3A6iJAUEAIAY3A6CJAUEAIAM3A5iJAUEAIAQ3A5CJAUEAIAU3A4iJAUEAIAY3A4CJAUEAQQA6AJCKAUEAQQA7AYiKASAAEAMgAhAHCwsLAQBBgAgLBHgHAAA=",hash:"215d875f"};function i(A,I,g,i){return new(g||(g=Promise))((function(B,Q){function C(A){try{o(i.next(A))}catch(A){Q(A)}}function E(A){try{o(i.throw(A))}catch(A){Q(A)}}function o(A){var I;A.done?B(A.value):(I=A.value,I instanceof g?I:new g((function(A){A(I)}))).then(C,E)}o((i=i.apply(A,I||[])).next())}))}"function"==typeof SuppressedError&&SuppressedError;class B{constructor(){this.mutex=Promise.resolve()}lock(){let A=()=>{};return this.mutex=this.mutex.then((()=>new Promise(A))),new Promise((I=>{A=I}))}dispatch(A){return i(this,void 0,void 0,(function*(){const I=yield this.lock();try{return yield Promise.resolve(A())}finally{I()}}))}}const Q="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:global,C=null!==(I=Q.Buffer)&&void 0!==I?I:null,E=Q.TextEncoder?new Q.TextEncoder:null;function o(A,I){return(15&A)+(A>>6|A>>3&8)<<4|(15&I)+(I>>6|I>>3&8)}const c="a".charCodeAt(0)-10,e="0".charCodeAt(0);function a(A,I,g){let i=0;for(let B=0;B>>4;A[i++]=g>9?g+c:g+e,g=15&I[B],A[i++]=g>9?g+c:g+e}return String.fromCharCode.apply(null,A)}const t=null!==C?A=>{if("string"==typeof A){const I=C.from(A,"utf8");return new Uint8Array(I.buffer,I.byteOffset,I.length)}if(C.isBuffer(A))return new Uint8Array(A.buffer,A.byteOffset,A.length);if(ArrayBuffer.isView(A))return new Uint8Array(A.buffer,A.byteOffset,A.byteLength);throw new Error("Invalid data type!")}:A=>{if("string"==typeof A)return E.encode(A);if(ArrayBuffer.isView(A))return new Uint8Array(A.buffer,A.byteOffset,A.byteLength);throw new Error("Invalid data type!")},D="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",n=new Uint8Array(256);for(let A=0;A>4,B+=1,i[B]=(15&Q)<<4|C>>2,B+=1,i[B]=(3&C)<<6|63&E,B+=1}return i}const w=16384,r=new B,y=new Map;function k(A,I){return i(this,void 0,void 0,(function*(){let g=null,B=null,Q=!1;if("undefined"==typeof WebAssembly)throw new Error("WebAssembly is not supported in this environment!");const C=()=>new DataView(g.exports.memory.buffer).getUint32(g.exports.STATE_SIZE,!0),E=r.dispatch((()=>i(this,void 0,void 0,(function*(){if(!y.has(A.name)){const I=h(A.data),g=WebAssembly.compile(I);y.set(A.name,g)}const I=yield y.get(A.name);g=yield WebAssembly.instantiate(I,{})})))),c=(A=null)=>{Q=!0,g.exports.Hash_Init(A)},e=A=>{if(!Q)throw new Error("update() called before init()");(A=>{let I=0;for(;I{if(!Q)throw new Error("digest() called before init()");return Q=!1,g.exports.Hash_Final(i),"binary"===A?B.slice(0,I):a(D,B,I)},k=A=>"string"==typeof A?A.length<4096:A.byteLength!0;break;case"blake2b":case"blake2s":N=(A,I)=>I<=512&&k(A);break;case"blake3":N=(A,I)=>0===I&&k(A);break;case"xxhash64":case"xxhash3":case"xxhash128":case"crc64":N=()=>!1}return yield(()=>i(this,void 0,void 0,(function*(){g||(yield E);const A=g.exports.Hash_GetBuffer(),I=g.exports.memory.buffer;B=new Uint8Array(I,A,w)})))(),{getMemory:()=>B,writeMemory:(A,I=0)=>{B.set(A,I)},getExports:()=>g.exports,setMemorySize:A=>{g.exports.Hash_SetMemorySize(A);const I=g.exports.Hash_GetBuffer(),i=g.exports.memory.buffer;B=new Uint8Array(i,I,A)},init:c,update:e,digest:n,save:()=>{if(!Q)throw new Error("save() can only be called after init() and before digest()");const I=g.exports.Hash_GetState(),i=C(),B=g.exports.memory.buffer,E=new Uint8Array(B,I,i),c=new Uint8Array(4+i);return function(A,I){const g=I.length>>1;for(let i=0;i{if(!(I instanceof Uint8Array))throw new Error("load() expects an Uint8Array generated by save()");const i=g.exports.Hash_GetState(),B=C(),E=4+B,c=g.exports.memory.buffer;if(I.length!==E)throw new Error(`Bad state length (expected ${E} bytes, got ${I.length})`);if(!function(A,I){if(A.length!==2*I.length)return!1;for(let g=0;g{if(!N(A,i))return c(i),e(A),n("hex",Q);const C=t(A);return B.set(C),g.exports.Hash_Calculate(C.length,i,Q),a(D,B,I)},hashLength:I}}))}const N=new B;let S=null;function s(A){return!Number.isInteger(A)||A<8||A%8!=0?new Error("Invalid variant! Valid values: 8, 16, ..."):null}A.blake3=function(A,I=256,B=null){if(s(I))return Promise.reject(s(I));let Q=null,C=0;if(null!==B){if(Q=t(B),32!==Q.length)return Promise.reject(new Error("Key length must be exactly 32 bytes"));C=32}const E=I/8,o=E;if(null===S||S.hashLength!==E)return function(A,I,g){return i(this,void 0,void 0,(function*(){const i=yield A.lock(),B=yield k(I,g);return i(),B}))}(N,g,E).then((I=>(S=I,32===C&&S.writeMemory(Q),S.calculate(A,C,o))));try{32===C&&S.writeMemory(Q);const I=S.calculate(A,C,o);return Promise.resolve(I)}catch(A){return Promise.reject(A)}},A.createBLAKE3=function(A=256,I=null){if(s(A))return Promise.reject(s(A));let i=null,B=0;if(null!==I){if(i=t(I),32!==i.length)return Promise.reject(new Error("Key length must be exactly 32 bytes"));B=32}const Q=A/8,C=Q;return k(g,Q).then((A=>{32===B&&A.writeMemory(i),A.init(B);const I={init:32===B?()=>(A.writeMemory(i),A.init(B),I):()=>(A.init(B),I),update:g=>(A.update(g),I),digest:I=>A.digest(I,C),save:()=>A.save(),load:g=>(A.load(g),I),blockSize:64,digestSize:Q};return I}))}})); diff --git a/frontend/node_modules/hash-wasm/dist/crc32.umd.min.js b/frontend/node_modules/hash-wasm/dist/crc32.umd.min.js new file mode 100644 index 0000000..15c362d --- /dev/null +++ b/frontend/node_modules/hash-wasm/dist/crc32.umd.min.js @@ -0,0 +1,7 @@ +/*! + * hash-wasm (https://www.npmjs.com/package/hash-wasm) + * (c) Dani Biro + * @license MIT + */ + +!function(e,A){"object"==typeof exports&&"undefined"!=typeof module?A(exports):"function"==typeof define&&define.amd?define(["exports"],A):A((e="undefined"!=typeof globalThis?globalThis:e||self).hashwasm=e.hashwasm||{})}(this,(function(e){"use strict";var A,t={name:"crc32",data:"AGFzbQEAAAABEQRgAAF/YAF/AGAAAGACf38AAwgHAAEBAQIAAwUEAQECAgYOAn8BQZDJBQt/AEGACAsHcAgGbWVtb3J5AgAOSGFzaF9HZXRCdWZmZXIAAAlIYXNoX0luaXQAAgtIYXNoX1VwZGF0ZQADCkhhc2hfRmluYWwABA1IYXNoX0dldFN0YXRlAAUOSGFzaF9DYWxjdWxhdGUABgpTVEFURV9TSVpFAwEKkggHBQBBgAkLwwMBA39BgIkBIQFBACECA0AgAUEAQQBBAEEAQQBBAEEAQQAgAkEBcWsgAHEgAkEBdnMiA0EBcWsgAHEgA0EBdnMiA0EBcWsgAHEgA0EBdnMiA0EBcWsgAHEgA0EBdnMiA0EBcWsgAHEgA0EBdnMiA0EBcWsgAHEgA0EBdnMiA0EBcWsgAHEgA0EBdnMiA0EBcWsgAHEgA0EBdnM2AgAgAUEEaiEBIAJBAWoiAkGAAkcNAAtBACEAA0AgAEGEkQFqIABBhIkBaigCACICQf8BcUECdEGAiQFqKAIAIAJBCHZzIgI2AgAgAEGEmQFqIAJB/wFxQQJ0QYCJAWooAgAgAkEIdnMiAjYCACAAQYShAWogAkH/AXFBAnRBgIkBaigCACACQQh2cyICNgIAIABBhKkBaiACQf8BcUECdEGAiQFqKAIAIAJBCHZzIgI2AgAgAEGEsQFqIAJB/wFxQQJ0QYCJAWooAgAgAkEIdnMiAjYCACAAQYS5AWogAkH/AXFBAnRBgIkBaigCACACQQh2cyICNgIAIABBhMEBaiACQf8BcUECdEGAiQFqKAIAIAJBCHZzNgIAIABBBGoiAEH8B0cNAAsLJwACQEEAKAKAyQEgAEYNACAAEAFBACAANgKAyQELQQBBADYChMkBC4gDAQN/QQAoAoTJAUF/cyEBQYAJIQICQCAAQQhJDQBBgAkhAgNAIAJBBGooAgAiA0EOdkH8B3FBgJEBaigCACADQRZ2QfwHcUGAiQFqKAIAcyADQQZ2QfwHcUGAmQFqKAIAcyADQf8BcUECdEGAoQFqKAIAcyACKAIAIAFzIgFBFnZB/AdxQYCpAWooAgBzIAFBDnZB/AdxQYCxAWooAgBzIAFBBnZB/AdxQYC5AWooAgBzIAFB/wFxQQJ0QYDBAWooAgBzIQEgAkEIaiECIABBeGoiAEEHSw0ACwsCQCAARQ0AAkACQCAAQQFxDQAgACEDDAELIAFB/wFxIAItAABzQQJ0QYCJAWooAgAgAUEIdnMhASACQQFqIQIgAEF/aiEDCyAAQQFGDQADQCABQf8BcSACLQAAc0ECdEGAiQFqKAIAIAFBCHZzIgFB/wFxIAJBAWotAABzQQJ0QYCJAWooAgAgAUEIdnMhASACQQJqIQIgA0F+aiIDDQALC0EAIAFBf3M2AoTJAQsyAQF/QQBBACgChMkBIgBBGHQgAEGA/gNxQQh0ciAAQQh2QYD+A3EgAEEYdnJyNgKACQsGAEGEyQELWQACQEEAKAKAyQEgAUYNACABEAFBACABNgKAyQELQQBBADYChMkBIAAQA0EAQQAoAoTJASIBQRh0IAFBgP4DcUEIdHIgAUEIdkGA/gNxIAFBGHZycjYCgAkLCwsBAEGACAsEBAAAAA==",hash:"d2eba587"};function n(e,A,t,n){return new(t||(t=Promise))((function(r,o){function i(e){try{a(n.next(e))}catch(e){o(e)}}function s(e){try{a(n.throw(e))}catch(e){o(e)}}function a(e){var A;e.done?r(e.value):(A=e.value,A instanceof t?A:new t((function(e){e(A)}))).then(i,s)}a((n=n.apply(e,A||[])).next())}))}"function"==typeof SuppressedError&&SuppressedError;class r{constructor(){this.mutex=Promise.resolve()}lock(){let e=()=>{};return this.mutex=this.mutex.then((()=>new Promise(e))),new Promise((A=>{e=A}))}dispatch(e){return n(this,void 0,void 0,(function*(){const A=yield this.lock();try{return yield Promise.resolve(e())}finally{A()}}))}}const o="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:global,i=null!==(A=o.Buffer)&&void 0!==A?A:null,s=o.TextEncoder?new o.TextEncoder:null;function a(e,A){return(15&e)+(e>>6|e>>3&8)<<4|(15&A)+(A>>6|A>>3&8)}const c="a".charCodeAt(0)-10,l="0".charCodeAt(0);function g(e,A,t){let n=0;for(let r=0;r>>4;e[n++]=t>9?t+c:t+l,t=15&A[r],e[n++]=t>9?t+c:t+l}return String.fromCharCode.apply(null,e)}const f=null!==i?e=>{if("string"==typeof e){const A=i.from(e,"utf8");return new Uint8Array(A.buffer,A.byteOffset,A.length)}if(i.isBuffer(e))return new Uint8Array(e.buffer,e.byteOffset,e.length);if(ArrayBuffer.isView(e))return new Uint8Array(e.buffer,e.byteOffset,e.byteLength);throw new Error("Invalid data type!")}:e=>{if("string"==typeof e)return s.encode(e);if(ArrayBuffer.isView(e))return new Uint8Array(e.buffer,e.byteOffset,e.byteLength);throw new Error("Invalid data type!")},B="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",h=new Uint8Array(256);for(let e=0;e>4,r+=1,n[r]=(15&o)<<4|i>>2,r+=1,n[r]=(3&i)<<6|63&s,r+=1}return n}const d=16384,E=new r,Q=new Map;function y(e,A){return n(this,void 0,void 0,(function*(){let t=null,r=null,o=!1;if("undefined"==typeof WebAssembly)throw new Error("WebAssembly is not supported in this environment!");const i=()=>new DataView(t.exports.memory.buffer).getUint32(t.exports.STATE_SIZE,!0),s=E.dispatch((()=>n(this,void 0,void 0,(function*(){if(!Q.has(e.name)){const A=u(e.data),t=WebAssembly.compile(A);Q.set(e.name,t)}const A=yield Q.get(e.name);t=yield WebAssembly.instantiate(A,{})})))),c=(e=null)=>{o=!0,t.exports.Hash_Init(e)},l=e=>{if(!o)throw new Error("update() called before init()");(e=>{let A=0;for(;A{if(!o)throw new Error("digest() called before init()");return o=!1,t.exports.Hash_Final(n),"binary"===e?r.slice(0,A):g(B,r,A)},y=e=>"string"==typeof e?e.length<4096:e.byteLength!0;break;case"blake2b":case"blake2s":C=(e,A)=>A<=512&&y(e);break;case"blake3":C=(e,A)=>0===A&&y(e);break;case"xxhash64":case"xxhash3":case"xxhash128":case"crc64":C=()=>!1}return yield(()=>n(this,void 0,void 0,(function*(){t||(yield s);const e=t.exports.Hash_GetBuffer(),A=t.exports.memory.buffer;r=new Uint8Array(A,e,d)})))(),{getMemory:()=>r,writeMemory:(e,A=0)=>{r.set(e,A)},getExports:()=>t.exports,setMemorySize:e=>{t.exports.Hash_SetMemorySize(e);const A=t.exports.Hash_GetBuffer(),n=t.exports.memory.buffer;r=new Uint8Array(n,A,e)},init:c,update:l,digest:h,save:()=>{if(!o)throw new Error("save() can only be called after init() and before digest()");const A=t.exports.Hash_GetState(),n=i(),r=t.exports.memory.buffer,s=new Uint8Array(r,A,n),c=new Uint8Array(4+n);return function(e,A){const t=A.length>>1;for(let n=0;n{if(!(A instanceof Uint8Array))throw new Error("load() expects an Uint8Array generated by save()");const n=t.exports.Hash_GetState(),r=i(),s=4+r,c=t.exports.memory.buffer;if(A.length!==s)throw new Error(`Bad state length (expected ${s} bytes, got ${A.length})`);if(!function(e,A){if(e.length!==2*A.length)return!1;for(let t=0;t{if(!C(e,n))return c(n),l(e),h("hex",o);const i=f(e);return r.set(i),t.exports.Hash_Calculate(i.length,n,o),g(B,r,A)},hashLength:A}}))}const C=new r;let I=null;function w(e){return!Number.isInteger(e)||e<0||e>4294967295?new Error("Polynomial must be a valid 32-bit long unsigned integer"):null}e.crc32=function(e,A=3988292384){if(w(A))return Promise.reject(w(A));if(null===I)return function(e,A,t){return n(this,void 0,void 0,(function*(){const n=yield e.lock(),r=yield y(A,t);return n(),r}))}(C,t,4).then((t=>(I=t,I.calculate(e,A))));try{const t=I.calculate(e,A);return Promise.resolve(t)}catch(e){return Promise.reject(e)}},e.createCRC32=function(e=3988292384){return w(e)?Promise.reject(w(e)):y(t,4).then((A=>{A.init(e);const t={init:()=>(A.init(e),t),update:e=>(A.update(e),t),digest:e=>A.digest(e),save:()=>A.save(),load:e=>(A.load(e),t),blockSize:4,digestSize:4};return t}))}})); diff --git a/frontend/node_modules/hash-wasm/dist/crc64.umd.min.js b/frontend/node_modules/hash-wasm/dist/crc64.umd.min.js new file mode 100644 index 0000000..b8821a5 --- /dev/null +++ b/frontend/node_modules/hash-wasm/dist/crc64.umd.min.js @@ -0,0 +1,7 @@ +/*! + * hash-wasm (https://www.npmjs.com/package/hash-wasm) + * (c) Dani Biro + * @license MIT + */ + +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).hashwasm=e.hashwasm||{})}(this,(function(e){"use strict";var t,A={name:"crc64",data:"AGFzbQEAAAABDANgAAF/YAAAYAF/AAMHBgABAgEAAQUEAQECAgYOAn8BQZCJBgt/AEGACAsHcAgGbWVtb3J5AgAOSGFzaF9HZXRCdWZmZXIAAAlIYXNoX0luaXQAAQtIYXNoX1VwZGF0ZQACCkhhc2hfRmluYWwAAw1IYXNoX0dldFN0YXRlAAQOSGFzaF9DYWxjdWxhdGUABQpTVEFURV9TSVpFAwEKgwgGBQBBgAkL9QMDAX4BfwJ+AkBBACkDgIkCQQApA4AJIgBRDQBBgIkBIQFCACECA0AgAUIAQgBCAEIAQgBCAEIAQgAgAkIBg30gAIMgAkIBiIUiA0IBg30gAIMgA0IBiIUiA0IBg30gAIMgA0IBiIUiA0IBg30gAIMgA0IBiIUiA0IBg30gAIMgA0IBiIUiA0IBg30gAIMgA0IBiIUiA0IBg30gAIMgA0IBiIUiA0IBg30gAIMgA0IBiIU3AwAgAUEIaiEBIAJCAXwiAkKAAlINAAtBACEBA0AgAUGImQFqIAFBiIkBaikDACICp0H/AXFBA3RBgIkBaikDACACQgiIhSICNwMAIAFBiKkBaiACp0H/AXFBA3RBgIkBaikDACACQgiIhSICNwMAIAFBiLkBaiACp0H/AXFBA3RBgIkBaikDACACQgiIhSICNwMAIAFBiMkBaiACp0H/AXFBA3RBgIkBaikDACACQgiIhSICNwMAIAFBiNkBaiACp0H/AXFBA3RBgIkBaikDACACQgiIhSICNwMAIAFBiOkBaiACp0H/AXFBA3RBgIkBaikDACACQgiIhSICNwMAIAFBiPkBaiACp0H/AXFBA3RBgIkBaikDACACQgiIhTcDACABQQhqIgFB+A9HDQALQQAgADcDgIkCC0EAQgA3A4iJAguUAwIBfgJ/QQApA4iJAkJ/hSEBQYAJIQICQCAAQQhJDQBBgAkhAgNAIAIpAwAgAYUiAUIwiKdB/wFxQQN0QYCZAWopAwAgAUI4iKdBA3RBgIkBaikDAIUgAUIoiKdB/wFxQQN0QYCpAWopAwCFIAFCIIinQf8BcUEDdEGAuQFqKQMAhSABpyIDQRV2QfgPcUGAyQFqKQMAhSADQQ12QfgPcUGA2QFqKQMAhSADQQV2QfgPcUGA6QFqKQMAhSADQf8BcUEDdEGA+QFqKQMAhSEBIAJBCGohAiAAQXhqIgBBB0sNAAsLAkAgAEUNAAJAAkAgAEEBcQ0AIAAhAwwBCyABQv8BgyACMQAAhadBA3RBgIkBaikDACABQgiIhSEBIAJBAWohAiAAQX9qIQMLIABBAUYNAANAIAFC/wGDIAIxAACFp0EDdEGAiQFqKQMAIAFCCIiFIgFC/wGDIAJBAWoxAACFp0EDdEGAiQFqKQMAIAFCCIiFIQEgAkECaiECIANBfmoiAw0ACwtBACABQn+FNwOIiQILZAEBfkEAQQApA4iJAiIAQjiGIABCgP4Dg0IohoQgAEKAgPwHg0IYhiAAQoCAgPgPg0IIhoSEIABCCIhCgICA+A+DIABCGIhCgID8B4OEIABCKIhCgP4DgyAAQjiIhISENwOACQsGAEGIiQILAgALCwsBAEGACAsECAAAAA==",hash:"c5ac6c16"};function r(e,t,A,r){return new(A||(A=Promise))((function(n,i){function o(e){try{a(r.next(e))}catch(e){i(e)}}function s(e){try{a(r.throw(e))}catch(e){i(e)}}function a(e){var t;e.done?n(e.value):(t=e.value,t instanceof A?t:new A((function(e){e(t)}))).then(o,s)}a((r=r.apply(e,t||[])).next())}))}"function"==typeof SuppressedError&&SuppressedError;class n{constructor(){this.mutex=Promise.resolve()}lock(){let e=()=>{};return this.mutex=this.mutex.then((()=>new Promise(e))),new Promise((t=>{e=t}))}dispatch(e){return r(this,void 0,void 0,(function*(){const t=yield this.lock();try{return yield Promise.resolve(e())}finally{t()}}))}}const i="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:global,o=null!==(t=i.Buffer)&&void 0!==t?t:null,s=i.TextEncoder?new i.TextEncoder:null;function a(e,t){return(15&e)+(e>>6|e>>3&8)<<4|(15&t)+(t>>6|t>>3&8)}const l="a".charCodeAt(0)-10,c="0".charCodeAt(0);function f(e,t,A){let r=0;for(let n=0;n>>4;e[r++]=A>9?A+l:A+c,A=15&t[n],e[r++]=A>9?A+l:A+c}return String.fromCharCode.apply(null,e)}const h=null!==o?e=>{if("string"==typeof e){const t=o.from(e,"utf8");return new Uint8Array(t.buffer,t.byteOffset,t.length)}if(o.isBuffer(e))return new Uint8Array(e.buffer,e.byteOffset,e.length);if(ArrayBuffer.isView(e))return new Uint8Array(e.buffer,e.byteOffset,e.byteLength);throw new Error("Invalid data type!")}:e=>{if("string"==typeof e)return s.encode(e);if(ArrayBuffer.isView(e))return new Uint8Array(e.buffer,e.byteOffset,e.byteLength);throw new Error("Invalid data type!")},g="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",I=new Uint8Array(256);for(let e=0;e>4,n+=1,r[n]=(15&i)<<4|o>>2,n+=1,r[n]=(3&o)<<6|63&s,n+=1}return r}const B=16384,d=new n,C=new Map;function w(e,t){return r(this,void 0,void 0,(function*(){let A=null,n=null,i=!1;if("undefined"==typeof WebAssembly)throw new Error("WebAssembly is not supported in this environment!");const o=()=>new DataView(A.exports.memory.buffer).getUint32(A.exports.STATE_SIZE,!0),s=d.dispatch((()=>r(this,void 0,void 0,(function*(){if(!C.has(e.name)){const t=u(e.data),A=WebAssembly.compile(t);C.set(e.name,A)}const t=yield C.get(e.name);A=yield WebAssembly.instantiate(t,{})})))),l=(e=null)=>{i=!0,A.exports.Hash_Init(e)},c=e=>{if(!i)throw new Error("update() called before init()");(e=>{let t=0;for(;t{if(!i)throw new Error("digest() called before init()");return i=!1,A.exports.Hash_Final(r),"binary"===e?n.slice(0,t):f(g,n,t)},w=e=>"string"==typeof e?e.length<4096:e.byteLength!0;break;case"blake2b":case"blake2s":Q=(e,t)=>t<=512&&w(e);break;case"blake3":Q=(e,t)=>0===t&&w(e);break;case"xxhash64":case"xxhash3":case"xxhash128":case"crc64":Q=()=>!1}return yield(()=>r(this,void 0,void 0,(function*(){A||(yield s);const e=A.exports.Hash_GetBuffer(),t=A.exports.memory.buffer;n=new Uint8Array(t,e,B)})))(),{getMemory:()=>n,writeMemory:(e,t=0)=>{n.set(e,t)},getExports:()=>A.exports,setMemorySize:e=>{A.exports.Hash_SetMemorySize(e);const t=A.exports.Hash_GetBuffer(),r=A.exports.memory.buffer;n=new Uint8Array(r,t,e)},init:l,update:c,digest:I,save:()=>{if(!i)throw new Error("save() can only be called after init() and before digest()");const t=A.exports.Hash_GetState(),r=o(),n=A.exports.memory.buffer,s=new Uint8Array(n,t,r),l=new Uint8Array(4+r);return function(e,t){const A=t.length>>1;for(let r=0;r{if(!(t instanceof Uint8Array))throw new Error("load() expects an Uint8Array generated by save()");const r=A.exports.Hash_GetState(),n=o(),s=4+n,l=A.exports.memory.buffer;if(t.length!==s)throw new Error(`Bad state length (expected ${s} bytes, got ${t.length})`);if(!function(e,t){if(e.length!==2*t.length)return!1;for(let A=0;A{if(!Q(e,r))return l(r),c(e),I("hex",i);const o=h(e);return n.set(o),A.exports.Hash_Calculate(o.length,r,i),f(g,n,t)},hashLength:t}}))}const Q=new n;let y=null;const p=new Uint8Array(8);function b(e){const t="Polynomial must be provided as a 16 char long hex string";if("string"!=typeof e||16!==e.length)return{hi:0,lo:0,err:new Error(t)};const A=Number(`0x${e.slice(0,8)}`),r=Number(`0x${e.slice(8)}`);return Number.isNaN(A)||Number.isNaN(r)?{hi:A,lo:r,err:new Error(t)}:{hi:A,lo:r,err:null}}function m(e,t,A){const r=new DataView(e);r.setUint32(0,t,!0),r.setUint32(4,A,!0)}e.crc64=function(e,t="c96c5795d7870f42"){const{hi:n,lo:i,err:o}=b(t);if(null!==o)return Promise.reject(o);if(null===y)return function(e,t,A){return r(this,void 0,void 0,(function*(){const r=yield e.lock(),n=yield w(t,A);return r(),n}))}(Q,A,8).then((t=>(y=t,m(p.buffer,i,n),y.writeMemory(p),y.calculate(e))));try{m(p.buffer,i,n),y.writeMemory(p);const t=y.calculate(e);return Promise.resolve(t)}catch(o){return Promise.reject(o)}},e.createCRC64=function(e="c96c5795d7870f42"){const{hi:t,lo:r,err:n}=b(e);return null!==n?Promise.reject(n):w(A,8).then((e=>{const A=new Uint8Array(8);m(A.buffer,r,t),e.writeMemory(A),e.init();const n={init:()=>(e.writeMemory(A),e.init(),n),update:t=>(e.update(t),n),digest:t=>e.digest(t),save:()=>e.save(),load:t=>(e.load(t),n),blockSize:8,digestSize:8};return n}))}})); diff --git a/frontend/node_modules/hash-wasm/dist/hmac.umd.min.js b/frontend/node_modules/hash-wasm/dist/hmac.umd.min.js new file mode 100644 index 0000000..4df38bb --- /dev/null +++ b/frontend/node_modules/hash-wasm/dist/hmac.umd.min.js @@ -0,0 +1,7 @@ +/*! + * hash-wasm (https://www.npmjs.com/package/hash-wasm) + * (c) Dani Biro + * @license MIT + */ + +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).hashwasm=e.hashwasm||{})}(this,(function(e){"use strict";var t;const n="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:global,r=null!==(t=n.Buffer)&&void 0!==t?t:null,i=n.TextEncoder?new n.TextEncoder:null,f=null!==r?e=>{if("string"==typeof e){const t=r.from(e,"utf8");return new Uint8Array(t.buffer,t.byteOffset,t.length)}if(r.isBuffer(e))return new Uint8Array(e.buffer,e.byteOffset,e.length);if(ArrayBuffer.isView(e))return new Uint8Array(e.buffer,e.byteOffset,e.byteLength);throw new Error("Invalid data type!")}:e=>{if("string"==typeof e)return i.encode(e);if(ArrayBuffer.isView(e))return new Uint8Array(e.buffer,e.byteOffset,e.byteLength);throw new Error("Invalid data type!")},o="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",s=new Uint8Array(256);for(let e=0;en){e.update(r);const t=e.digest("binary");return e.init(),t}return new Uint8Array(r.buffer,r.byteOffset,r.length)}(e,t),i=new Uint8Array(n);i.set(r);const o=new Uint8Array(n);for(let e=0;e(e.init(),e.update(i),s),update:t=>(e.update(t),s),digest:t=>{const n=e.digest("binary");return e.init(),e.update(o),e.update(n),e.digest(t)},save:()=>{throw new Error("save() not supported")},load:()=>{throw new Error("load() not supported")},blockSize:e.blockSize,digestSize:e.digestSize};return s}e.createHMAC=function(e,t){if(!e||!e.then)throw new Error('Invalid hash function is provided! Usage: createHMAC(createMD5(), "key").');return e.then((e=>a(e,t)))}})); diff --git a/frontend/node_modules/hash-wasm/dist/index.esm.js b/frontend/node_modules/hash-wasm/dist/index.esm.js new file mode 100644 index 0000000..b1b5d4e --- /dev/null +++ b/frontend/node_modules/hash-wasm/dist/index.esm.js @@ -0,0 +1,2671 @@ +/*! + * hash-wasm (https://www.npmjs.com/package/hash-wasm) + * (c) Dani Biro + * @license MIT + */ + +var name$l = "adler32"; +var data$l = "AGFzbQEAAAABDANgAAF/YAAAYAF/AAMHBgABAgEAAgUEAQECAgYOAn8BQYCJBQt/AEGACAsHcAgGbWVtb3J5AgAOSGFzaF9HZXRCdWZmZXIAAAlIYXNoX0luaXQAAQtIYXNoX1VwZGF0ZQACCkhhc2hfRmluYWwAAw1IYXNoX0dldFN0YXRlAAQOSGFzaF9DYWxjdWxhdGUABQpTVEFURV9TSVpFAwEK6wkGBQBBgAkLCgBBAEEBNgKECAvjCAEHf0EAKAKECCIBQf//A3EhAiABQRB2IQMCQAJAIABBAUcNACACQQAtAIAJaiIBQY+AfGogASABQfD/A0sbIgEgA2oiBEEQdCIFQYCAPGogBSAEQfD/A0sbIAFyIQEMAQsCQAJAAkACQAJAIABBEEkNAEGACSEGIABBsCtJDQFBgAkhBgNAQQAhBQNAIAYgBWoiASgCACIEQf8BcSACaiICIANqIAIgBEEIdkH/AXFqIgJqIAIgBEEQdkH/AXFqIgJqIAIgBEEYdmoiAmogAiABQQRqKAIAIgRB/wFxaiICaiACIARBCHZB/wFxaiICaiACIARBEHZB/wFxaiICaiACIARBGHZqIgJqIAIgAUEIaigCACIEQf8BcWoiAmogAiAEQQh2Qf8BcWoiAmogAiAEQRB2Qf8BcWoiAmogAiAEQRh2aiIEaiAEIAFBDGooAgAiAUH/AXFqIgRqIAQgAUEIdkH/AXFqIgRqIAQgAUEQdkH/AXFqIgRqIAQgAUEYdmoiAmohAyAFQRBqIgVBsCtHDQALIANB8f8DcCEDIAJB8f8DcCECIAZBsCtqIQYgAEHQVGoiAEGvK0sNAAsgAEUNBCAAQQ9LDQEMAgsCQCAARQ0AAkACQCAAQQNxIgUNAEGACSEBIAAhBAwBCyAAQXxxIQRBACEBA0AgAiABQYAJai0AAGoiAiADaiEDIAUgAUEBaiIBRw0ACyAFQYAJaiEBCyAAQQRJDQADQCACIAEtAABqIgUgAS0AAWoiBiABLQACaiIAIAFBA2otAABqIgIgACAGIAUgA2pqamohAyABQQRqIQEgBEF8aiIEDQALCyACQY+AfGogAiACQfD/A0sbIANB8f8DcEEQdHIhAQwECwNAIAYoAgAiAUH/AXEgAmoiBCADaiAEIAFBCHZB/wFxaiIEaiAEIAFBEHZB/wFxaiIEaiAEIAFBGHZqIgRqIAQgBkEEaigCACIBQf8BcWoiBGogBCABQQh2Qf8BcWoiBGogBCABQRB2Qf8BcWoiBGogBCABQRh2aiIEaiAEIAZBCGooAgAiAUH/AXFqIgRqIAQgAUEIdkH/AXFqIgRqIAQgAUEQdkH/AXFqIgRqIAQgAUEYdmoiBGogBCAGQQxqKAIAIgFB/wFxaiIEaiAEIAFBCHZB/wFxaiIEaiAEIAFBEHZB/wFxaiIEaiAEIAFBGHZqIgJqIQMgBkEQaiEGIABBcGoiAEEPSw0ACyAARQ0BCyAAQX9qIQcCQCAAQQNxIgVFDQAgAEF8cSEAIAUhBCAGIQEDQCACIAEtAABqIgIgA2ohAyABQQFqIQEgBEF/aiIEDQALIAYgBWohBgsgB0EDSQ0AA0AgAiAGLQAAaiIBIAYtAAFqIgQgBi0AAmoiBSAGQQNqLQAAaiICIAUgBCABIANqampqIQMgBkEEaiEGIABBfGoiAA0ACwsgA0Hx/wNwIQMgAkHx/wNwIQILIAIgA0EQdHIhAQtBACABNgKECAsxAQF/QQBBACgChAgiAEEYdCAAQYD+A3FBCHRyIABBCHZBgP4DcSAAQRh2cnI2AoAJCwUAQYQICzsAQQBBATYChAggABACQQBBACgChAgiAEEYdCAAQYD+A3FBCHRyIABBCHZBgP4DcSAAQRh2cnI2AoAJCwsVAgBBgAgLBAQAAAAAQYQICwQBAAAA"; +var hash$l = "02ddbd17"; +var wasmJson$l = { + name: name$l, + data: data$l, + hash: hash$l +}; + +/****************************************************************************** +Copyright (c) Microsoft Corporation. + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY +AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, +INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM +LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR +OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THIS SOFTWARE. +***************************************************************************** */ +/* global Reflect, Promise, SuppressedError, Symbol, Iterator */ + + +function __awaiter(thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +} + +typeof SuppressedError === "function" ? SuppressedError : function (error, suppressed, message) { + var e = new Error(message); + return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e; +}; + +class Mutex { + constructor() { + this.mutex = Promise.resolve(); + } + lock() { + let begin = () => { }; + this.mutex = this.mutex.then(() => new Promise(begin)); + return new Promise((res) => { + begin = res; + }); + } + dispatch(fn) { + return __awaiter(this, void 0, void 0, function* () { + const unlock = yield this.lock(); + try { + return yield Promise.resolve(fn()); + } + finally { + unlock(); + } + }); + } +} + +var _a; +function getGlobal() { + if (typeof globalThis !== "undefined") + return globalThis; + if (typeof self !== "undefined") + return self; + if (typeof window !== "undefined") + return window; + return global; +} +const globalObject = getGlobal(); +const nodeBuffer = (_a = globalObject.Buffer) !== null && _a !== void 0 ? _a : null; +const textEncoder = globalObject.TextEncoder + ? new globalObject.TextEncoder() + : null; +function intArrayToString(arr, len) { + return String.fromCharCode(...arr.subarray(0, len)); +} +function hexCharCodesToInt(a, b) { + return ((((a & 0xf) + ((a >> 6) | ((a >> 3) & 0x8))) << 4) | + ((b & 0xf) + ((b >> 6) | ((b >> 3) & 0x8)))); +} +function writeHexToUInt8(buf, str) { + const size = str.length >> 1; + for (let i = 0; i < size; i++) { + const index = i << 1; + buf[i] = hexCharCodesToInt(str.charCodeAt(index), str.charCodeAt(index + 1)); + } +} +function hexStringEqualsUInt8(str, buf) { + if (str.length !== buf.length * 2) { + return false; + } + for (let i = 0; i < buf.length; i++) { + const strIndex = i << 1; + if (buf[i] !== + hexCharCodesToInt(str.charCodeAt(strIndex), str.charCodeAt(strIndex + 1))) { + return false; + } + } + return true; +} +const alpha = "a".charCodeAt(0) - 10; +const digit = "0".charCodeAt(0); +function getDigestHex(tmpBuffer, input, hashLength) { + let p = 0; + for (let i = 0; i < hashLength; i++) { + let nibble = input[i] >>> 4; + tmpBuffer[p++] = nibble > 9 ? nibble + alpha : nibble + digit; + nibble = input[i] & 0xf; + tmpBuffer[p++] = nibble > 9 ? nibble + alpha : nibble + digit; + } + return String.fromCharCode.apply(null, tmpBuffer); +} +const getUInt8Buffer = nodeBuffer !== null + ? (data) => { + if (typeof data === "string") { + const buf = nodeBuffer.from(data, "utf8"); + return new Uint8Array(buf.buffer, buf.byteOffset, buf.length); + } + if (nodeBuffer.isBuffer(data)) { + return new Uint8Array(data.buffer, data.byteOffset, data.length); + } + if (ArrayBuffer.isView(data)) { + return new Uint8Array(data.buffer, data.byteOffset, data.byteLength); + } + throw new Error("Invalid data type!"); + } + : (data) => { + if (typeof data === "string") { + return textEncoder.encode(data); + } + if (ArrayBuffer.isView(data)) { + return new Uint8Array(data.buffer, data.byteOffset, data.byteLength); + } + throw new Error("Invalid data type!"); + }; +const base64Chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; +const base64Lookup = new Uint8Array(256); +for (let i = 0; i < base64Chars.length; i++) { + base64Lookup[base64Chars.charCodeAt(i)] = i; +} +function encodeBase64(data, pad = true) { + const len = data.length; + const extraBytes = len % 3; + const parts = []; + const len2 = len - extraBytes; + for (let i = 0; i < len2; i += 3) { + const tmp = ((data[i] << 16) & 0xff0000) + + ((data[i + 1] << 8) & 0xff00) + + (data[i + 2] & 0xff); + const triplet = base64Chars.charAt((tmp >> 18) & 0x3f) + + base64Chars.charAt((tmp >> 12) & 0x3f) + + base64Chars.charAt((tmp >> 6) & 0x3f) + + base64Chars.charAt(tmp & 0x3f); + parts.push(triplet); + } + if (extraBytes === 1) { + const tmp = data[len - 1]; + const a = base64Chars.charAt(tmp >> 2); + const b = base64Chars.charAt((tmp << 4) & 0x3f); + parts.push(`${a}${b}`); + if (pad) { + parts.push("=="); + } + } + else if (extraBytes === 2) { + const tmp = (data[len - 2] << 8) + data[len - 1]; + const a = base64Chars.charAt(tmp >> 10); + const b = base64Chars.charAt((tmp >> 4) & 0x3f); + const c = base64Chars.charAt((tmp << 2) & 0x3f); + parts.push(`${a}${b}${c}`); + if (pad) { + parts.push("="); + } + } + return parts.join(""); +} +function getDecodeBase64Length(data) { + let bufferLength = Math.floor(data.length * 0.75); + const len = data.length; + if (data[len - 1] === "=") { + bufferLength -= 1; + if (data[len - 2] === "=") { + bufferLength -= 1; + } + } + return bufferLength; +} +function decodeBase64(data) { + const bufferLength = getDecodeBase64Length(data); + const len = data.length; + const bytes = new Uint8Array(bufferLength); + let p = 0; + for (let i = 0; i < len; i += 4) { + const encoded1 = base64Lookup[data.charCodeAt(i)]; + const encoded2 = base64Lookup[data.charCodeAt(i + 1)]; + const encoded3 = base64Lookup[data.charCodeAt(i + 2)]; + const encoded4 = base64Lookup[data.charCodeAt(i + 3)]; + bytes[p] = (encoded1 << 2) | (encoded2 >> 4); + p += 1; + bytes[p] = ((encoded2 & 15) << 4) | (encoded3 >> 2); + p += 1; + bytes[p] = ((encoded3 & 3) << 6) | (encoded4 & 63); + p += 1; + } + return bytes; +} + +const MAX_HEAP = 16 * 1024; +const WASM_FUNC_HASH_LENGTH = 4; +const wasmMutex = new Mutex(); +const wasmModuleCache = new Map(); +function WASMInterface(binary, hashLength) { + return __awaiter(this, void 0, void 0, function* () { + let wasmInstance = null; + let memoryView = null; + let initialized = false; + if (typeof WebAssembly === "undefined") { + throw new Error("WebAssembly is not supported in this environment!"); + } + const writeMemory = (data, offset = 0) => { + memoryView.set(data, offset); + }; + const getMemory = () => memoryView; + const getExports = () => wasmInstance.exports; + const setMemorySize = (totalSize) => { + wasmInstance.exports.Hash_SetMemorySize(totalSize); + const arrayOffset = wasmInstance.exports.Hash_GetBuffer(); + const memoryBuffer = wasmInstance.exports.memory.buffer; + memoryView = new Uint8Array(memoryBuffer, arrayOffset, totalSize); + }; + const getStateSize = () => { + const view = new DataView(wasmInstance.exports.memory.buffer); + const stateSize = view.getUint32(wasmInstance.exports.STATE_SIZE, true); + return stateSize; + }; + const loadWASMPromise = wasmMutex.dispatch(() => __awaiter(this, void 0, void 0, function* () { + if (!wasmModuleCache.has(binary.name)) { + const asm = decodeBase64(binary.data); + const promise = WebAssembly.compile(asm); + wasmModuleCache.set(binary.name, promise); + } + const module = yield wasmModuleCache.get(binary.name); + wasmInstance = yield WebAssembly.instantiate(module, { + // env: { + // emscripten_memcpy_big: (dest, src, num) => { + // const memoryBuffer = wasmInstance.exports.memory.buffer; + // const memView = new Uint8Array(memoryBuffer, 0); + // memView.set(memView.subarray(src, src + num), dest); + // }, + // print_memory: (offset, len) => { + // const memoryBuffer = wasmInstance.exports.memory.buffer; + // const memView = new Uint8Array(memoryBuffer, 0); + // console.log('print_int32', memView.subarray(offset, offset + len)); + // }, + // }, + }); + // wasmInstance.exports._start(); + })); + const setupInterface = () => __awaiter(this, void 0, void 0, function* () { + if (!wasmInstance) { + yield loadWASMPromise; + } + const arrayOffset = wasmInstance.exports.Hash_GetBuffer(); + const memoryBuffer = wasmInstance.exports.memory.buffer; + memoryView = new Uint8Array(memoryBuffer, arrayOffset, MAX_HEAP); + }); + const init = (bits = null) => { + initialized = true; + wasmInstance.exports.Hash_Init(bits); + }; + const updateUInt8Array = (data) => { + let read = 0; + while (read < data.length) { + const chunk = data.subarray(read, read + MAX_HEAP); + read += chunk.length; + memoryView.set(chunk); + wasmInstance.exports.Hash_Update(chunk.length); + } + }; + const update = (data) => { + if (!initialized) { + throw new Error("update() called before init()"); + } + const Uint8Buffer = getUInt8Buffer(data); + updateUInt8Array(Uint8Buffer); + }; + const digestChars = new Uint8Array(hashLength * 2); + const digest = (outputType, padding = null) => { + if (!initialized) { + throw new Error("digest() called before init()"); + } + initialized = false; + wasmInstance.exports.Hash_Final(padding); + if (outputType === "binary") { + // the data is copied to allow GC of the original memory object + return memoryView.slice(0, hashLength); + } + return getDigestHex(digestChars, memoryView, hashLength); + }; + const save = () => { + if (!initialized) { + throw new Error("save() can only be called after init() and before digest()"); + } + const stateOffset = wasmInstance.exports.Hash_GetState(); + const stateLength = getStateSize(); + const memoryBuffer = wasmInstance.exports.memory.buffer; + const internalState = new Uint8Array(memoryBuffer, stateOffset, stateLength); + // prefix is 4 bytes from SHA1 hash of the WASM binary + // it is used to detect incompatible internal states between different versions of hash-wasm + const prefixedState = new Uint8Array(WASM_FUNC_HASH_LENGTH + stateLength); + writeHexToUInt8(prefixedState, binary.hash); + prefixedState.set(internalState, WASM_FUNC_HASH_LENGTH); + return prefixedState; + }; + const load = (state) => { + if (!(state instanceof Uint8Array)) { + throw new Error("load() expects an Uint8Array generated by save()"); + } + const stateOffset = wasmInstance.exports.Hash_GetState(); + const stateLength = getStateSize(); + const overallLength = WASM_FUNC_HASH_LENGTH + stateLength; + const memoryBuffer = wasmInstance.exports.memory.buffer; + if (state.length !== overallLength) { + throw new Error(`Bad state length (expected ${overallLength} bytes, got ${state.length})`); + } + if (!hexStringEqualsUInt8(binary.hash, state.subarray(0, WASM_FUNC_HASH_LENGTH))) { + throw new Error("This state was written by an incompatible hash implementation"); + } + const internalState = state.subarray(WASM_FUNC_HASH_LENGTH); + new Uint8Array(memoryBuffer, stateOffset, stateLength).set(internalState); + initialized = true; + }; + const isDataShort = (data) => { + if (typeof data === "string") { + // worst case is 4 bytes / char + return data.length < MAX_HEAP / 4; + } + return data.byteLength < MAX_HEAP; + }; + let canSimplify = isDataShort; + switch (binary.name) { + case "argon2": + case "scrypt": + canSimplify = () => true; + break; + case "blake2b": + case "blake2s": + // if there is a key at blake2 then cannot simplify + canSimplify = (data, initParam) => initParam <= 512 && isDataShort(data); + break; + case "blake3": + // if there is a key at blake3 then cannot simplify + canSimplify = (data, initParam) => initParam === 0 && isDataShort(data); + break; + case "xxhash64": // cannot simplify + case "xxhash3": + case "xxhash128": + case "crc64": + canSimplify = () => false; + break; + } + // shorthand for (init + update + digest) for better performance + const calculate = (data, initParam = null, digestParam = null) => { + if (!canSimplify(data, initParam)) { + init(initParam); + update(data); + return digest("hex", digestParam); + } + const buffer = getUInt8Buffer(data); + memoryView.set(buffer); + wasmInstance.exports.Hash_Calculate(buffer.length, initParam, digestParam); + return getDigestHex(digestChars, memoryView, hashLength); + }; + yield setupInterface(); + return { + getMemory, + writeMemory, + getExports, + setMemorySize, + init, + update, + digest, + save, + load, + calculate, + hashLength, + }; + }); +} + +function lockedCreate(mutex, binary, hashLength) { + return __awaiter(this, void 0, void 0, function* () { + const unlock = yield mutex.lock(); + const wasm = yield WASMInterface(binary, hashLength); + unlock(); + return wasm; + }); +} + +const mutex$l = new Mutex(); +let wasmCache$l = null; +/** + * Calculates Adler-32 hash. The resulting 32-bit hash is stored in + * network byte order (big-endian). + * + * @param data Input data (string, Buffer or TypedArray) + * @returns Computed hash as a hexadecimal string + */ +function adler32(data) { + if (wasmCache$l === null) { + return lockedCreate(mutex$l, wasmJson$l, 4).then((wasm) => { + wasmCache$l = wasm; + return wasmCache$l.calculate(data); + }); + } + try { + const hash = wasmCache$l.calculate(data); + return Promise.resolve(hash); + } + catch (err) { + return Promise.reject(err); + } +} +/** + * Creates a new Adler-32 hash instance + */ +function createAdler32() { + return WASMInterface(wasmJson$l, 4).then((wasm) => { + wasm.init(); + const obj = { + init: () => { + wasm.init(); + return obj; + }, + update: (data) => { + wasm.update(data); + return obj; + }, + // biome-ignore lint/suspicious/noExplicitAny: Conflict with IHasher type + digest: (outputType) => wasm.digest(outputType), + save: () => wasm.save(), + load: (data) => { + wasm.load(data); + return obj; + }, + blockSize: 4, + digestSize: 4, + }; + return obj; + }); +} + +var name$k = "argon2"; +var data$k = "AGFzbQEAAAABKQVgAX8Bf2AAAX9gEH9/f39/f39/f39/f39/f38AYAR/f39/AGACf38AAwYFAAECAwQFBgEBAoCAAgYIAX8BQZCoBAsHQQQGbWVtb3J5AgASSGFzaF9TZXRNZW1vcnlTaXplAAAOSGFzaF9HZXRCdWZmZXIAAQ5IYXNoX0NhbGN1bGF0ZQAECvEyBVgBAn9BACEBAkAgAEEAKAKICCICRg0AAkAgACACayIAQRB2IABBgIB8cSAASWoiAEAAQX9HDQBB/wHADwtBACEBQQBBACkDiAggAEEQdK18NwOICAsgAcALcAECfwJAQQAoAoAIIgANAEEAPwBBEHQiADYCgAhBACgCiAgiAUGAgCBGDQACQEGAgCAgAWsiAEEQdiAAQYCAfHEgAElqIgBAAEF/Rw0AQQAPC0EAQQApA4gIIABBEHStfDcDiAhBACgCgAghAAsgAAvcDgECfiAAIAQpAwAiECAAKQMAIhF8IBFCAYZC/v///x+DIBBC/////w+DfnwiEDcDACAMIBAgDCkDAIVCIIkiEDcDACAIIBAgCCkDACIRfCARQgGGQv7///8fgyAQQv////8Pg358IhA3AwAgBCAQIAQpAwCFQiiJIhA3AwAgACAQIAApAwAiEXwgEEL/////D4MgEUIBhkL+////H4N+fCIQNwMAIAwgECAMKQMAhUIwiSIQNwMAIAggECAIKQMAIhF8IBBC/////w+DIBFCAYZC/v///x+DfnwiEDcDACAEIBAgBCkDAIVCAYk3AwAgASAFKQMAIhAgASkDACIRfCARQgGGQv7///8fgyAQQv////8Pg358IhA3AwAgDSAQIA0pAwCFQiCJIhA3AwAgCSAQIAkpAwAiEXwgEUIBhkL+////H4MgEEL/////D4N+fCIQNwMAIAUgECAFKQMAhUIoiSIQNwMAIAEgECABKQMAIhF8IBBC/////w+DIBFCAYZC/v///x+DfnwiEDcDACANIBAgDSkDAIVCMIkiEDcDACAJIBAgCSkDACIRfCAQQv////8PgyARQgGGQv7///8fg358IhA3AwAgBSAQIAUpAwCFQgGJNwMAIAIgBikDACIQIAIpAwAiEXwgEUIBhkL+////H4MgEEL/////D4N+fCIQNwMAIA4gECAOKQMAhUIgiSIQNwMAIAogECAKKQMAIhF8IBFCAYZC/v///x+DIBBC/////w+DfnwiEDcDACAGIBAgBikDAIVCKIkiEDcDACACIBAgAikDACIRfCAQQv////8PgyARQgGGQv7///8fg358IhA3AwAgDiAQIA4pAwCFQjCJIhA3AwAgCiAQIAopAwAiEXwgEEL/////D4MgEUIBhkL+////H4N+fCIQNwMAIAYgECAGKQMAhUIBiTcDACADIAcpAwAiECADKQMAIhF8IBFCAYZC/v///x+DIBBC/////w+DfnwiEDcDACAPIBAgDykDAIVCIIkiEDcDACALIBAgCykDACIRfCARQgGGQv7///8fgyAQQv////8Pg358IhA3AwAgByAQIAcpAwCFQiiJIhA3AwAgAyAQIAMpAwAiEXwgEEL/////D4MgEUIBhkL+////H4N+fCIQNwMAIA8gECAPKQMAhUIwiSIQNwMAIAsgECALKQMAIhF8IBBC/////w+DIBFCAYZC/v///x+DfnwiEDcDACAHIBAgBykDAIVCAYk3AwAgACAFKQMAIhAgACkDACIRfCARQgGGQv7///8fgyAQQv////8Pg358IhA3AwAgDyAQIA8pAwCFQiCJIhA3AwAgCiAQIAopAwAiEXwgEUIBhkL+////H4MgEEL/////D4N+fCIQNwMAIAUgECAFKQMAhUIoiSIQNwMAIAAgECAAKQMAIhF8IBBC/////w+DIBFCAYZC/v///x+DfnwiEDcDACAPIBAgDykDAIVCMIkiEDcDACAKIBAgCikDACIRfCAQQv////8PgyARQgGGQv7///8fg358IhA3AwAgBSAQIAUpAwCFQgGJNwMAIAEgBikDACIQIAEpAwAiEXwgEUIBhkL+////H4MgEEL/////D4N+fCIQNwMAIAwgECAMKQMAhUIgiSIQNwMAIAsgECALKQMAIhF8IBFCAYZC/v///x+DIBBC/////w+DfnwiEDcDACAGIBAgBikDAIVCKIkiEDcDACABIBAgASkDACIRfCAQQv////8PgyARQgGGQv7///8fg358IhA3AwAgDCAQIAwpAwCFQjCJIhA3AwAgCyAQIAspAwAiEXwgEEL/////D4MgEUIBhkL+////H4N+fCIQNwMAIAYgECAGKQMAhUIBiTcDACACIAcpAwAiECACKQMAIhF8IBFCAYZC/v///x+DIBBC/////w+DfnwiEDcDACANIBAgDSkDAIVCIIkiEDcDACAIIBAgCCkDACIRfCARQgGGQv7///8fgyAQQv////8Pg358IhA3AwAgByAQIAcpAwCFQiiJIhA3AwAgAiAQIAIpAwAiEXwgEEL/////D4MgEUIBhkL+////H4N+fCIQNwMAIA0gECANKQMAhUIwiSIQNwMAIAggECAIKQMAIhF8IBBC/////w+DIBFCAYZC/v///x+DfnwiEDcDACAHIBAgBykDAIVCAYk3AwAgAyAEKQMAIhAgAykDACIRfCARQgGGQv7///8fgyAQQv////8Pg358IhA3AwAgDiAQIA4pAwCFQiCJIhA3AwAgCSAQIAkpAwAiEXwgEUIBhkL+////H4MgEEL/////D4N+fCIQNwMAIAQgECAEKQMAhUIoiSIQNwMAIAMgECADKQMAIhF8IBBC/////w+DIBFCAYZC/v///x+DfnwiEDcDACAOIBAgDikDAIVCMIkiEDcDACAJIBAgCSkDACIRfCAQQv////8PgyARQgGGQv7///8fg358IhA3AwAgBCAQIAQpAwCFQgGJNwMAC98aAQN/QQAhBEEAIAIpAwAgASkDAIU3A5AIQQAgAikDCCABKQMIhTcDmAhBACACKQMQIAEpAxCFNwOgCEEAIAIpAxggASkDGIU3A6gIQQAgAikDICABKQMghTcDsAhBACACKQMoIAEpAyiFNwO4CEEAIAIpAzAgASkDMIU3A8AIQQAgAikDOCABKQM4hTcDyAhBACACKQNAIAEpA0CFNwPQCEEAIAIpA0ggASkDSIU3A9gIQQAgAikDUCABKQNQhTcD4AhBACACKQNYIAEpA1iFNwPoCEEAIAIpA2AgASkDYIU3A/AIQQAgAikDaCABKQNohTcD+AhBACACKQNwIAEpA3CFNwOACUEAIAIpA3ggASkDeIU3A4gJQQAgAikDgAEgASkDgAGFNwOQCUEAIAIpA4gBIAEpA4gBhTcDmAlBACACKQOQASABKQOQAYU3A6AJQQAgAikDmAEgASkDmAGFNwOoCUEAIAIpA6ABIAEpA6ABhTcDsAlBACACKQOoASABKQOoAYU3A7gJQQAgAikDsAEgASkDsAGFNwPACUEAIAIpA7gBIAEpA7gBhTcDyAlBACACKQPAASABKQPAAYU3A9AJQQAgAikDyAEgASkD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"; +var hash$k = "e4cdc523"; +var wasmJson$k = { + name: name$k, + data: data$k, + hash: hash$k +}; + +var name$j = "blake2b"; +var data$j = "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"; +var hash$j = "c6f286e6"; +var wasmJson$j = { + name: name$j, + data: data$j, + hash: hash$j +}; + +const mutex$k = new Mutex(); +let wasmCache$k = null; +function validateBits$4(bits) { + if (!Number.isInteger(bits) || bits < 8 || bits > 512 || bits % 8 !== 0) { + return new Error("Invalid variant! Valid values: 8, 16, ..., 512"); + } + return null; +} +function getInitParam$1(outputBits, keyBits) { + return outputBits | (keyBits << 16); +} +/** + * Calculates BLAKE2b hash + * @param data Input data (string, Buffer or TypedArray) + * @param bits Number of output bits, which has to be a number + * divisible by 8, between 8 and 512. Defaults to 512. + * @param key Optional key (string, Buffer or TypedArray). Maximum length is 64 bytes. + * @returns Computed hash as a hexadecimal string + */ +function blake2b(data, bits = 512, key = null) { + if (validateBits$4(bits)) { + return Promise.reject(validateBits$4(bits)); + } + let keyBuffer = null; + let initParam = bits; + if (key !== null) { + keyBuffer = getUInt8Buffer(key); + if (keyBuffer.length > 64) { + return Promise.reject(new Error("Max key length is 64 bytes")); + } + initParam = getInitParam$1(bits, keyBuffer.length); + } + const hashLength = bits / 8; + if (wasmCache$k === null || wasmCache$k.hashLength !== hashLength) { + return lockedCreate(mutex$k, wasmJson$j, hashLength).then((wasm) => { + wasmCache$k = wasm; + if (initParam > 512) { + wasmCache$k.writeMemory(keyBuffer); + } + return wasmCache$k.calculate(data, initParam); + }); + } + try { + if (initParam > 512) { + wasmCache$k.writeMemory(keyBuffer); + } + const hash = wasmCache$k.calculate(data, initParam); + return Promise.resolve(hash); + } + catch (err) { + return Promise.reject(err); + } +} +/** + * Creates a new BLAKE2b hash instance + * @param bits Number of output bits, which has to be a number + * divisible by 8, between 8 and 512. Defaults to 512. + * @param key Optional key (string, Buffer or TypedArray). Maximum length is 64 bytes. + */ +function createBLAKE2b(bits = 512, key = null) { + if (validateBits$4(bits)) { + return Promise.reject(validateBits$4(bits)); + } + let keyBuffer = null; + let initParam = bits; + if (key !== null) { + keyBuffer = getUInt8Buffer(key); + if (keyBuffer.length > 64) { + return Promise.reject(new Error("Max key length is 64 bytes")); + } + initParam = getInitParam$1(bits, keyBuffer.length); + } + const outputSize = bits / 8; + return WASMInterface(wasmJson$j, outputSize).then((wasm) => { + if (initParam > 512) { + wasm.writeMemory(keyBuffer); + } + wasm.init(initParam); + const obj = { + init: initParam > 512 + ? () => { + wasm.writeMemory(keyBuffer); + wasm.init(initParam); + return obj; + } + : () => { + wasm.init(initParam); + return obj; + }, + update: (data) => { + wasm.update(data); + return obj; + }, + // biome-ignore lint/suspicious/noExplicitAny: Conflict with IHasher type + digest: (outputType) => wasm.digest(outputType), + save: () => wasm.save(), + load: (data) => { + wasm.load(data); + return obj; + }, + blockSize: 128, + digestSize: outputSize, + }; + return obj; + }); +} + +function encodeResult(salt, options, res) { + const parameters = [ + `m=${options.memorySize}`, + `t=${options.iterations}`, + `p=${options.parallelism}`, + ].join(","); + return `$argon2${options.hashType}$v=19$${parameters}$${encodeBase64(salt, false)}$${encodeBase64(res, false)}`; +} +const uint32View = new DataView(new ArrayBuffer(4)); +function int32LE(x) { + uint32View.setInt32(0, x, true); + return new Uint8Array(uint32View.buffer); +} +function hashFunc(blake512, buf, len) { + return __awaiter(this, void 0, void 0, function* () { + if (len <= 64) { + const blake = yield createBLAKE2b(len * 8); + blake.update(int32LE(len)); + blake.update(buf); + return blake.digest("binary"); + } + const r = Math.ceil(len / 32) - 2; + const ret = new Uint8Array(len); + blake512.init(); + blake512.update(int32LE(len)); + blake512.update(buf); + let vp = blake512.digest("binary"); + ret.set(vp.subarray(0, 32), 0); + for (let i = 1; i < r; i++) { + blake512.init(); + blake512.update(vp); + vp = blake512.digest("binary"); + ret.set(vp.subarray(0, 32), i * 32); + } + const partialBytesNeeded = len - 32 * r; + let blakeSmall; + if (partialBytesNeeded === 64) { + blakeSmall = blake512; + blakeSmall.init(); + } + else { + blakeSmall = yield createBLAKE2b(partialBytesNeeded * 8); + } + blakeSmall.update(vp); + vp = blakeSmall.digest("binary"); + ret.set(vp.subarray(0, partialBytesNeeded), r * 32); + return ret; + }); +} +function getHashType(type) { + switch (type) { + case "d": + return 0; + case "i": + return 1; + default: + return 2; + } +} +function argon2Internal(options) { + return __awaiter(this, void 0, void 0, function* () { + var _a; + const { parallelism, iterations, hashLength } = options; + const password = getUInt8Buffer(options.password); + const salt = getUInt8Buffer(options.salt); + const version = 0x13; + const hashType = getHashType(options.hashType); + const { memorySize } = options; // in KB + const secret = getUInt8Buffer((_a = options.secret) !== null && _a !== void 0 ? _a : ""); + const [argon2Interface, blake512] = yield Promise.all([ + WASMInterface(wasmJson$k, 1024), + createBLAKE2b(512), + ]); + // last block is for storing the init vector + argon2Interface.setMemorySize(memorySize * 1024 + 1024); + const initVector = new Uint8Array(24); + const initVectorView = new DataView(initVector.buffer); + initVectorView.setInt32(0, parallelism, true); + initVectorView.setInt32(4, hashLength, true); + initVectorView.setInt32(8, memorySize, true); + initVectorView.setInt32(12, iterations, true); + initVectorView.setInt32(16, version, true); + initVectorView.setInt32(20, hashType, true); + argon2Interface.writeMemory(initVector, memorySize * 1024); + blake512.init(); + blake512.update(initVector); + blake512.update(int32LE(password.length)); + blake512.update(password); + blake512.update(int32LE(salt.length)); + blake512.update(salt); + blake512.update(int32LE(secret.length)); + blake512.update(secret); + blake512.update(int32LE(0)); // associatedData length + associatedData + const segments = Math.floor(memorySize / (parallelism * 4)); // length of each lane + const lanes = segments * 4; + const param = new Uint8Array(72); + const H0 = blake512.digest("binary"); + param.set(H0); + for (let lane = 0; lane < parallelism; lane++) { + param.set(int32LE(0), 64); + param.set(int32LE(lane), 68); + let position = lane * lanes; + let chunk = yield hashFunc(blake512, param, 1024); + argon2Interface.writeMemory(chunk, position * 1024); + position += 1; + param.set(int32LE(1), 64); + chunk = yield hashFunc(blake512, param, 1024); + argon2Interface.writeMemory(chunk, position * 1024); + } + const C = new Uint8Array(1024); + writeHexToUInt8(C, argon2Interface.calculate(new Uint8Array([]), memorySize)); + const res = yield hashFunc(blake512, C, hashLength); + if (options.outputType === "hex") { + const digestChars = new Uint8Array(hashLength * 2); + return getDigestHex(digestChars, res, hashLength); + } + if (options.outputType === "encoded") { + return encodeResult(salt, options, res); + } + // return binary format + return res; + }); +} +const validateOptions$3 = (options) => { + var _a; + if (!options || typeof options !== "object") { + throw new Error("Invalid options parameter. It requires an object."); + } + if (!options.password) { + throw new Error("Password must be specified"); + } + options.password = getUInt8Buffer(options.password); + if (options.password.length < 1) { + throw new Error("Password must be specified"); + } + if (!options.salt) { + throw new Error("Salt must be specified"); + } + options.salt = getUInt8Buffer(options.salt); + if (options.salt.length < 8) { + throw new Error("Salt should be at least 8 bytes long"); + } + options.secret = getUInt8Buffer((_a = options.secret) !== null && _a !== void 0 ? _a : ""); + if (!Number.isInteger(options.iterations) || options.iterations < 1) { + throw new Error("Iterations should be a positive number"); + } + if (!Number.isInteger(options.parallelism) || options.parallelism < 1) { + throw new Error("Parallelism should be a positive number"); + } + if (!Number.isInteger(options.hashLength) || options.hashLength < 4) { + throw new Error("Hash length should be at least 4 bytes."); + } + if (!Number.isInteger(options.memorySize)) { + throw new Error("Memory size should be specified."); + } + if (options.memorySize < 8 * options.parallelism) { + throw new Error("Memory size should be at least 8 * parallelism."); + } + if (options.outputType === undefined) { + options.outputType = "hex"; + } + if (!["hex", "binary", "encoded"].includes(options.outputType)) { + throw new Error(`Insupported output type ${options.outputType}. Valid values: ['hex', 'binary', 'encoded']`); + } +}; +/** + * Calculates hash using the argon2i password-hashing function + * @returns Computed hash + */ +function argon2i(options) { + return __awaiter(this, void 0, void 0, function* () { + validateOptions$3(options); + return argon2Internal(Object.assign(Object.assign({}, options), { hashType: "i" })); + }); +} +/** + * Calculates hash using the argon2id password-hashing function + * @returns Computed hash + */ +function argon2id(options) { + return __awaiter(this, void 0, void 0, function* () { + validateOptions$3(options); + return argon2Internal(Object.assign(Object.assign({}, options), { hashType: "id" })); + }); +} +/** + * Calculates hash using the argon2d password-hashing function + * @returns Computed hash + */ +function argon2d(options) { + return __awaiter(this, void 0, void 0, function* () { + validateOptions$3(options); + return argon2Internal(Object.assign(Object.assign({}, options), { hashType: "d" })); + }); +} +const getHashParameters = (password, encoded, secret) => { + const regex = /^\$argon2(id|i|d)\$v=([0-9]+)\$((?:[mtp]=[0-9]+,){2}[mtp]=[0-9]+)\$([A-Za-z0-9+/]+)\$([A-Za-z0-9+/]+)$/; + const match = encoded.match(regex); + if (!match) { + throw new Error("Invalid hash"); + } + const [, hashType, version, parameters, salt, hash] = match; + if (version !== "19") { + throw new Error(`Unsupported version: ${version}`); + } + const parsedParameters = {}; + const paramMap = { m: "memorySize", p: "parallelism", t: "iterations" }; + for (const x of parameters.split(",")) { + const [n, v] = x.split("="); + parsedParameters[paramMap[n]] = Number(v); + } + return Object.assign(Object.assign({}, parsedParameters), { password, + secret, hashType: hashType, salt: decodeBase64(salt), hashLength: getDecodeBase64Length(hash), outputType: "encoded" }); +}; +const validateVerifyOptions$1 = (options) => { + if (!options || typeof options !== "object") { + throw new Error("Invalid options parameter. It requires an object."); + } + if (options.hash === undefined || typeof options.hash !== "string") { + throw new Error("Hash should be specified"); + } +}; +/** + * Verifies password using the argon2 password-hashing function + * @returns True if the encoded hash matches the password + */ +function argon2Verify(options) { + return __awaiter(this, void 0, void 0, function* () { + validateVerifyOptions$1(options); + const params = getHashParameters(options.password, options.hash, options.secret); + validateOptions$3(params); + const hashStart = options.hash.lastIndexOf("$") + 1; + const result = (yield argon2Internal(params)); + return result.substring(hashStart) === options.hash.substring(hashStart); + }); +} + +var name$i = "blake2s"; +var data$i = "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"; +var hash$i = "5c0ff166"; +var wasmJson$i = { + name: name$i, + data: data$i, + hash: hash$i +}; + +const mutex$j = new Mutex(); +let wasmCache$j = null; +function validateBits$3(bits) { + if (!Number.isInteger(bits) || bits < 8 || bits > 256 || bits % 8 !== 0) { + return new Error("Invalid variant! Valid values: 8, 16, ..., 256"); + } + return null; +} +function getInitParam(outputBits, keyBits) { + return outputBits | (keyBits << 16); +} +/** + * Calculates BLAKE2s hash + * @param data Input data (string, Buffer or TypedArray) + * @param bits Number of output bits, which has to be a number + * divisible by 8, between 8 and 256. Defaults to 256. + * @param key Optional key (string, Buffer or TypedArray). Maximum length is 32 bytes. + * @returns Computed hash as a hexadecimal string + */ +function blake2s(data, bits = 256, key = null) { + if (validateBits$3(bits)) { + return Promise.reject(validateBits$3(bits)); + } + let keyBuffer = null; + let initParam = bits; + if (key !== null) { + keyBuffer = getUInt8Buffer(key); + if (keyBuffer.length > 32) { + return Promise.reject(new Error("Max key length is 32 bytes")); + } + initParam = getInitParam(bits, keyBuffer.length); + } + const hashLength = bits / 8; + if (wasmCache$j === null || wasmCache$j.hashLength !== hashLength) { + return lockedCreate(mutex$j, wasmJson$i, hashLength).then((wasm) => { + wasmCache$j = wasm; + if (initParam > 512) { + wasmCache$j.writeMemory(keyBuffer); + } + return wasmCache$j.calculate(data, initParam); + }); + } + try { + if (initParam > 512) { + wasmCache$j.writeMemory(keyBuffer); + } + const hash = wasmCache$j.calculate(data, initParam); + return Promise.resolve(hash); + } + catch (err) { + return Promise.reject(err); + } +} +/** + * Creates a new BLAKE2s hash instance + * @param bits Number of output bits, which has to be a number + * divisible by 8, between 8 and 256. Defaults to 256. + * @param key Optional key (string, Buffer or TypedArray). Maximum length is 32 bytes. + */ +function createBLAKE2s(bits = 256, key = null) { + if (validateBits$3(bits)) { + return Promise.reject(validateBits$3(bits)); + } + let keyBuffer = null; + let initParam = bits; + if (key !== null) { + keyBuffer = getUInt8Buffer(key); + if (keyBuffer.length > 32) { + return Promise.reject(new Error("Max key length is 32 bytes")); + } + initParam = getInitParam(bits, keyBuffer.length); + } + const outputSize = bits / 8; + return WASMInterface(wasmJson$i, outputSize).then((wasm) => { + if (initParam > 512) { + wasm.writeMemory(keyBuffer); + } + wasm.init(initParam); + const obj = { + init: initParam > 512 + ? () => { + wasm.writeMemory(keyBuffer); + wasm.init(initParam); + return obj; + } + : () => { + wasm.init(initParam); + return obj; + }, + update: (data) => { + wasm.update(data); + return obj; + }, + // biome-ignore lint/suspicious/noExplicitAny: Conflict with IHasher type + digest: (outputType) => wasm.digest(outputType), + save: () => wasm.save(), + load: (data) => { + wasm.load(data); + return obj; + }, + blockSize: 64, + digestSize: outputSize, + }; + return obj; + }); +} + +var name$h = "blake3"; +var data$h = "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IQEgAkFAaiICQcAASw0ACwsCQEHAACAHQf8BcSIGayIFIAIgBSACSRsiCUUNACAJQQNxIQtBACEFAkAgCUEESQ0AIAAgBmohByAJQfwAcSEIQQAhBQNAIAcgBWoiAkEoaiABIAVqIgotAAA6AAAgAkEpaiAKQQFqLQAAOgAAIAJBKmogCkECai0AADoAACACQStqIApBA2otAAA6AAAgCCAFQQRqIgVHDQALCwJAIAtFDQAgASAFaiEBIAUgBmogAGpBKGohBQNAIAUgAS0AADoAACABQQFqIQEgBUEBaiEFIAtBf2oiCw0ACwsgAC0AaCEHCyAAIAcgCWo6AGggA0HAAGokAAveAwQFfwN+BX8GfiMAQdABayIBJAACQCAAe6ciAkEALQCQigEiA08NAEEALQCKigFBBHIhBCABQShqIQVBACkDmIkBIQBBACkDkIkBIQZBACkDiIkBIQdBACkDgIkBIQggAyEJA0AgASAANwMYIAEgBjcDECABIAc3AwggASAINwMAIAEgA0EFdCIDQdGJAWoiCikDADcDKCABIANB2YkBaiILKQMANwMwIAEgA0HhiQFqIgwpAwA3AzggASADQemJAWoiDSkDADcDQCABIANB8YkBaikDADcDSCABIANB+YkBaikDADcDUCABIANBgYoBaikDADcDWCADQYmKAWopAwAhDiABQcAAOgBoIAEgDjcDYCABQgA3AyAgASAEOgBpIAEgADcDiAEgASAGNwOAASABIAc3A3ggASAINwNwIAFBkAFqIAFB8ABqIAVBwABCACAEQf8BcRACIAEpA7ABIQ4gASkDkAEhDyABKQO4ASEQIAEpA5gBIREgASkDwAEhEiABKQOgASETIA0gASkDyAEgASkDqAGFNwMAIAwgEiAThTcDACALIBAgEYU3AwAgCiAOIA+FNwMAIAlBf2oiCUH/AXEiAyACSw0AC0EAIAk6AJCKAQsgAUHQAWokAAvHCQIKfwV+IwBB4AJrIgUkAAJAAkAgAUGACEsNACAFIAA2AvwBIAVB/AFqIAFBgAhGIgZBECACQQEgA0EBQQIgBBABIAZBCnQiByABTw0BIAVB4ABqIgZCADcDACAFQdgAaiIIQgA3AwAgBUHQAGoiCUIANwMAIAVByABqIgpCADcDACAFQcAAaiILQgA3AwAgBUE4aiIMQgA3AwAgBUEwaiINQgA3AwAgBSADOgBqIAVCADcDKCAFQQA7AWggBUEAKQOAiQE3AwAgBUEAKQOIiQE3AwggBUEAKQOQiQE3AxAgBUEAKQOYiQE3AxggBSABQYAIRiIOrSACfDcDICAFIAAgB2pBACABIA4bEAQgBUGIAWpBMGogDSkDADcDACAFQYgBakE4aiAMKQMANwMAIAUgBSkDACIPNwOIASAFIAUpAwgiEDcDkAEgBSAFKQMQIhE3A5gBIAUgBSkDGCISNwOgASAFIAUpAyg3A7ABIAUtAGohACAFLQBpIQcgBSkDICECIAUtAGghASAFQYgBakHAAGogCykDADcDACAFQYgBakHIAGogCikDADcDACAFQYgBakHQAGogCSkDADcDACAFQYgBakHYAGogCCkDADcDACAFQYgBakHgAGogBikDADcDACAFIAE6APABIAUgAjcDqAEgBSAAIAdFckECciIAOgDxASAFIBI3A5gCIAUgETcDkAIgBSAQNwOIAiAFIA83A4ACIAVBoAJqIAVBgAJqIAVBsAFqIAEgAiAAQf8BcRACIAUpA8ACIQIgBSkDoAIhDyAFKQPIAiEQIAUpA6gCIREgBSkD0AIhEiAFKQOwAiETIAQgDkEFdGoiASAFKQPYAiAFKQO4AoU3AxggASASIBOFNwMQIAEgECARhTcDCCABIAIgD4U3AwBBAkEBIA4bIQYMAQsgAEIBIAFBf2pBCnZBAXKteUI/hYYiD6dBCnQiDiACIAMgBRAGIQcgACAOaiABIA5rIA9C////AYMgAnwgAyAFQcAAQSAgDkGACEsbahAGIQECQCAHQQFHDQAgBCAFKQMANwMAIAQgBSkDCDcDCCAEIAUpAxA3AxAgBCAFKQMYNwMYIAQgBSkDIDcDICAEIAUpAyg3AyggBCAFKQMwNwMwIAQgBSkDODcDOEECIQYMAQtBACEGQQAhAAJAIAEgB2oiCUECSQ0AIAlBfmoiCkEBdkEBaiIGQQNxIQ5BACEHAkAgCkEGSQ0AIAZB/P///wdxIQhBACEHIAVBiAFqIQEgBSEAA0AgASAANgIAIAFBDGogAEHAAWo2AgAgAUEIaiAAQYABajYCACABQQRqIABBwABqNgIAIABBgAJqIQAgAUEQaiEBIAggB0EEaiIHRw0ACwsgCkF+cSEIAkAgDkUNACAFIAdBBnRqIQEgBUGIAWogB0ECdGohAANAIAAgATYCACABQcAAaiEBIABBBGohACAOQX9qIg4NAAsLIAhBAmohAAsgBUGIAWogBkEBQgBBACADQQRyQQBBACAEEAEgACAJTw0AIAQgBkEFdGoiASAFIAZBBnRqIgApAwA3AwAgASAAKQMINwMIIAEgACkDEDcDECABIAApAxg3AxggBkEBaiEGCyAFQeACaiQAIAYLrRAIAn8EfgF/AX4EfwR+BH8EfiMAQfABayIBJAACQCAARQ0AAkBBAC0AkIoBIgINACABQTBqQQApA9CJATcDACABQThqQQApA9iJATcDACABQQApA6CJASIDNwMAIAFBACkDqIkBIgQ3AwggAUEAKQOwiQEiBTcDECABQQApA7iJASIGNwMYIAFBACkDyIkBNwMoQQAtAIqKASECQQAtAImKASEHQQApA8CJASEIQQAtAIiKASEJIAFBwABqQQApA+CJATcDACABQcgAakEAKQPoiQE3AwAgAUHQAGpBACkD8IkBNwMAIAFB2ABqQQApA/iJATcDACABQeAAakEAKQOAigE3AwAgASAJOgBoIAEgCDcDICABIAIgB0VyIgJBAnI6AGkgAUEoaiEKQgAhCEGACSELIAJBCnJB/wFxIQwDQCABQbABaiABIAogCUH/AXEgCCAMEAIgASABKQPQASINIAEpA7ABhTcDcCABIAEpA9gBIg4gASkDuAGFNwN4IAEgASkD4AEiDyABKQPAAYU3A4ABIAEgASkD6AEiECAGhTcDqAEgASAPIAWFNwOgASABIA4gBIU3A5gBIAEgDSADhTcDkAEgASAQIAEpA8gBhTcDiAEgAEHAACAAQcAASRsiEUF/aiESAkACQCARQQdxIhMNACABQfAAaiECIAshByARIRQMAQsgEUH4AHEhFCABQfAAaiECIAshBwNAIAcgAi0AADoAACAHQQFqIQcgAkEBaiECIBNBf2oiEw0ACwsCQCASQQdJDQADQCAHIAIpAAA3AAAgB0EIaiEHIAJBCGohAiAUQXhqIhQNAAsLIAhCAXwhCCALIBFqIQsgACARayIADQAMAgsLAkACQAJAQQAtAImKASIHQQZ0QQBBAC0AiIoBIhFrRg0AIAEgEToAaCABQQApA4CKATcDYCABQQApA/iJATcDWCABQQApA/CJATcDUCABQQApA+iJATcDSCABQQApA+CJATcDQCABQQApA9iJATcDOCABQQApA9CJATcDMCABQQApA8iJATcDKCABQQApA8CJASIINwMgIAFBACkDuIkBIgM3AxggAUEAKQOwiQEiBDcDECABQQApA6iJASIFNwMIIAFBACkDoIkBIgY3AwAgAUEALQCKigEiEyAHRXJBAnIiCzoAaSATQQRyIRNBACkDmIkBIQ1BACkDkIkBIQ5BACkDiIkBIQ9BACkDgIkBIRAMAQtBwAAhESABQcAAOgBoQgAhCCABQgA3AyAgAUEAKQOYiQEiDTcDGCABQQApA5CJASIONwMQIAFBACkDiIkBIg83AwggAUEAKQOAiQEiEDcDACABQQAtAIqKAUEEciITOgBpIAEgAkF+aiICQQV0IgdByYoBaikDADcDYCABIAdBwYoBaikDADcDWCABIAdBuYoBaikDADcDUCABIAdBsYoBaikDADcDSCABIAdBqYoBaikDADcDQCABIAdBoYoBaikDADcDOCABIAdBmYoBaikDADcDMCABIAdBkYoBaikDADcDKCATIQsgECEGIA8hBSAOIQQgDSEDIAJFDQELIAJBf2oiB0EFdCIUQZGKAWopAwAhFSAUQZmKAWopAwAhFiAUQaGKAWopAwAhFyAUQamKAWopAwAhGCABIAM3A4gBIAEgBDcDgAEgASAFNwN4IAEgBjcDcCABQbABaiABQfAAaiABQShqIhQgESAIIAtB/wFxEAIgASATOgBpIAFBwAA6AGggASAYNwNAIAEgFzcDOCABIBY3AzAgASAVNwMoIAFCADcDICABIA03AxggASAONwMQIAEgDzcDCCABIBA3AwAgASABKQPoASABKQPIAYU3A2AgASABKQPgASABKQPAAYU3A1ggASABKQPYASABKQO4AYU3A1AgASABKQPQASABKQOwAYU3A0ggB0UNACACQQV0QemJAWohAiATQf8BcSERA0AgAkFoaikDACEIIAJBcGopAwAhAyACQXhqKQMAIQQgAikDACEFIAEgDTcDiAEgASAONwOAASABIA83A3ggASAQNwNwIAFBsAFqIAFB8ABqIBRBwABCACAREAIgASATOgBpIAFBwAA6AGggASAFNwNAIAEgBDcDOCABIAM3AzAgASAINwMoIAFCADcDICABIA03AxggASAONwMQIAEgDzcDCCABIBA3AwAgASABKQPoASABKQPIAYU3A2AgASABKQPgASABKQPAAYU3A1ggASABKQPYASABKQO4AYU3A1AgASABKQPQASABKQOwAYU3A0ggAkFgaiECIAdBf2oiBw0ACwsgAUEoaiEJQgAhCEGACSELIBNBCHJB/wFxIQoDQCABQbABaiABIAlBwAAgCCAKEAIgASABKQPQASIDIAEpA7ABhTcDcCABIAEpA9gBIgQgASkDuAGFNwN4IAEgASkD4AEiBSABKQPAAYU3A4ABIAEgDSABKQPoASIGhTcDqAEgASAOIAWFNwOgASABIA8gBIU3A5gBIAEgECADhTcDkAEgASAGIAEpA8gBhTcDiAEgAEHAACAAQcAASRsiEUF/aiESAkACQCARQQdxIhMNACABQfAAaiECIAshByARIRQMAQsgEUH4AHEhFCABQfAAaiECIAshBwNAIAcgAi0AADoAACAHQQFqIQcgAkEBaiECIBNBf2oiEw0ACwsCQCASQQdJDQADQCAHIAIpAAA3AAAgB0EIaiEHIAJBCGohAiAUQXhqIhQNAAsLIAhCAXwhCCALIBFqIQsgACARayIADQALCyABQfABaiQAC6MCAQR+AkACQCAAQSBGDQBCq7OP/JGjs/DbACEBQv+kuYjFkdqCm38hAkLy5rvjo6f9p6V/IQNC58yn0NbQ67O7fyEEQQAhAAwBC0EAKQOYCSEBQQApA5AJIQJBACkDiAkhA0EAKQOACSEEQRAhAAtBACAAOgCKigFBAEIANwOAigFBAEIANwP4iQFBAEIANwPwiQFBAEIANwPoiQFBAEIANwPgiQFBAEIANwPYiQFBAEIANwPQiQFBAEIANwPIiQFBAEIANwPAiQFBACABNwO4iQFBACACNwOwiQFBACADNwOoiQFBACAENwOgiQFBACABNwOYiQFBACACNwOQiQFBACADNwOIiQFBACAENwOAiQFBAEEAOgCQigFBAEEAOwGIigELBgAgABADCwYAIAAQBwsGAEGAiQELqwIBBH4CQAJAIAFBIEYNAEKrs4/8kaOz8NsAIQNC/6S5iMWR2oKbfyEEQvLmu+Ojp/2npX8hBULnzKfQ1tDrs7t/IQZBACEBDAELQQApA5gJIQNBACkDkAkhBEEAKQOICSEFQQApA4AJIQZBECEBC0EAIAE6AIqKAUEAQgA3A4CKAUEAQgA3A/iJAUEAQgA3A/CJAUEAQgA3A+iJAUEAQgA3A+CJAUEAQgA3A9iJAUEAQgA3A9CJAUEAQgA3A8iJAUEAQgA3A8CJAUEAIAM3A7iJAUEAIAQ3A7CJAUEAIAU3A6iJAUEAIAY3A6CJAUEAIAM3A5iJAUEAIAQ3A5CJAUEAIAU3A4iJAUEAIAY3A4CJAUEAQQA6AJCKAUEAQQA7AYiKASAAEAMgAhAHCwsLAQBBgAgLBHgHAAA="; +var hash$h = "215d875f"; +var wasmJson$h = { + name: name$h, + data: data$h, + hash: hash$h +}; + +const mutex$i = new Mutex(); +let wasmCache$i = null; +function validateBits$2(bits) { + if (!Number.isInteger(bits) || bits < 8 || bits % 8 !== 0) { + return new Error("Invalid variant! Valid values: 8, 16, ..."); + } + return null; +} +/** + * Calculates BLAKE3 hash + * @param data Input data (string, Buffer or TypedArray) + * @param bits Number of output bits, which has to be a number + * divisible by 8. Defaults to 256. + * @param key Optional key (string, Buffer or TypedArray). Length should be 32 bytes. + * @returns Computed hash as a hexadecimal string + */ +function blake3(data, bits = 256, key = null) { + if (validateBits$2(bits)) { + return Promise.reject(validateBits$2(bits)); + } + let keyBuffer = null; + let initParam = 0; // key is empty by default + if (key !== null) { + keyBuffer = getUInt8Buffer(key); + if (keyBuffer.length !== 32) { + return Promise.reject(new Error("Key length must be exactly 32 bytes")); + } + initParam = 32; + } + const hashLength = bits / 8; + const digestParam = hashLength; + if (wasmCache$i === null || wasmCache$i.hashLength !== hashLength) { + return lockedCreate(mutex$i, wasmJson$h, hashLength).then((wasm) => { + wasmCache$i = wasm; + if (initParam === 32) { + wasmCache$i.writeMemory(keyBuffer); + } + return wasmCache$i.calculate(data, initParam, digestParam); + }); + } + try { + if (initParam === 32) { + wasmCache$i.writeMemory(keyBuffer); + } + const hash = wasmCache$i.calculate(data, initParam, digestParam); + return Promise.resolve(hash); + } + catch (err) { + return Promise.reject(err); + } +} +/** + * Creates a new BLAKE3 hash instance + * @param bits Number of output bits, which has to be a number + * divisible by 8. Defaults to 256. + * @param key Optional key (string, Buffer or TypedArray). Length should be 32 bytes. + */ +function createBLAKE3(bits = 256, key = null) { + if (validateBits$2(bits)) { + return Promise.reject(validateBits$2(bits)); + } + let keyBuffer = null; + let initParam = 0; // key is empty by default + if (key !== null) { + keyBuffer = getUInt8Buffer(key); + if (keyBuffer.length !== 32) { + return Promise.reject(new Error("Key length must be exactly 32 bytes")); + } + initParam = 32; + } + const outputSize = bits / 8; + const digestParam = outputSize; + return WASMInterface(wasmJson$h, outputSize).then((wasm) => { + if (initParam === 32) { + wasm.writeMemory(keyBuffer); + } + wasm.init(initParam); + const obj = { + init: initParam === 32 + ? () => { + wasm.writeMemory(keyBuffer); + wasm.init(initParam); + return obj; + } + : () => { + wasm.init(initParam); + return obj; + }, + update: (data) => { + wasm.update(data); + return obj; + }, + // biome-ignore lint/suspicious/noExplicitAny: Conflict with IHasher type + digest: (outputType) => wasm.digest(outputType, digestParam), + save: () => wasm.save(), + load: (data) => { + wasm.load(data); + return obj; + }, + blockSize: 64, + digestSize: outputSize, + }; + return obj; + }); +} + +var name$g = "crc32"; +var data$g = "AGFzbQEAAAABEQRgAAF/YAF/AGAAAGACf38AAwgHAAEBAQIAAwUEAQECAgYOAn8BQZDJBQt/AEGACAsHcAgGbWVtb3J5AgAOSGFzaF9HZXRCdWZmZXIAAAlIYXNoX0luaXQAAgtIYXNoX1VwZGF0ZQADCkhhc2hfRmluYWwABA1IYXNoX0dldFN0YXRlAAUOSGFzaF9DYWxjdWxhdGUABgpTVEFURV9TSVpFAwEKkggHBQBBgAkLwwMBA39BgIkBIQFBACECA0AgAUEAQQBBAEEAQQBBAEEAQQAgAkEBcWsgAHEgAkEBdnMiA0EBcWsgAHEgA0EBdnMiA0EBcWsgAHEgA0EBdnMiA0EBcWsgAHEgA0EBdnMiA0EBcWsgAHEgA0EBdnMiA0EBcWsgAHEgA0EBdnMiA0EBcWsgAHEgA0EBdnMiA0EBcWsgAHEgA0EBdnM2AgAgAUEEaiEBIAJBAWoiAkGAAkcNAAtBACEAA0AgAEGEkQFqIABBhIkBaigCACICQf8BcUECdEGAiQFqKAIAIAJBCHZzIgI2AgAgAEGEmQFqIAJB/wFxQQJ0QYCJAWooAgAgAkEIdnMiAjYCACAAQYShAWogAkH/AXFBAnRBgIkBaigCACACQQh2cyICNgIAIABBhKkBaiACQf8BcUECdEGAiQFqKAIAIAJBCHZzIgI2AgAgAEGEsQFqIAJB/wFxQQJ0QYCJAWooAgAgAkEIdnMiAjYCACAAQYS5AWogAkH/AXFBAnRBgIkBaigCACACQQh2cyICNgIAIABBhMEBaiACQf8BcUECdEGAiQFqKAIAIAJBCHZzNgIAIABBBGoiAEH8B0cNAAsLJwACQEEAKAKAyQEgAEYNACAAEAFBACAANgKAyQELQQBBADYChMkBC4gDAQN/QQAoAoTJAUF/cyEBQYAJIQICQCAAQQhJDQBBgAkhAgNAIAJBBGooAgAiA0EOdkH8B3FBgJEBaigCACADQRZ2QfwHcUGAiQFqKAIAcyADQQZ2QfwHcUGAmQFqKAIAcyADQf8BcUECdEGAoQFqKAIAcyACKAIAIAFzIgFBFnZB/AdxQYCpAWooAgBzIAFBDnZB/AdxQYCxAWooAgBzIAFBBnZB/AdxQYC5AWooAgBzIAFB/wFxQQJ0QYDBAWooAgBzIQEgAkEIaiECIABBeGoiAEEHSw0ACwsCQCAARQ0AAkACQCAAQQFxDQAgACEDDAELIAFB/wFxIAItAABzQQJ0QYCJAWooAgAgAUEIdnMhASACQQFqIQIgAEF/aiEDCyAAQQFGDQADQCABQf8BcSACLQAAc0ECdEGAiQFqKAIAIAFBCHZzIgFB/wFxIAJBAWotAABzQQJ0QYCJAWooAgAgAUEIdnMhASACQQJqIQIgA0F+aiIDDQALC0EAIAFBf3M2AoTJAQsyAQF/QQBBACgChMkBIgBBGHQgAEGA/gNxQQh0ciAAQQh2QYD+A3EgAEEYdnJyNgKACQsGAEGEyQELWQACQEEAKAKAyQEgAUYNACABEAFBACABNgKAyQELQQBBADYChMkBIAAQA0EAQQAoAoTJASIBQRh0IAFBgP4DcUEIdHIgAUEIdkGA/gNxIAFBGHZycjYCgAkLCwsBAEGACAsEBAAAAA=="; +var hash$g = "d2eba587"; +var wasmJson$g = { + name: name$g, + data: data$g, + hash: hash$g +}; + +const mutex$h = new Mutex(); +let wasmCache$h = null; +function validatePoly(poly) { + if (!Number.isInteger(poly) || poly < 0 || poly > 0xffffffff) { + return new Error("Polynomial must be a valid 32-bit long unsigned integer"); + } + return null; +} +/** + * Calculates CRC-32 hash + * @param data Input data (string, Buffer or TypedArray) + * @param polynomial Input polynomial (defaults to 0xedb88320, for CRC32C use 0x82f63b78) + * @returns Computed hash as a hexadecimal string + */ +function crc32(data, polynomial = 0xedb88320) { + if (validatePoly(polynomial)) { + return Promise.reject(validatePoly(polynomial)); + } + if (wasmCache$h === null) { + return lockedCreate(mutex$h, wasmJson$g, 4).then((wasm) => { + wasmCache$h = wasm; + return wasmCache$h.calculate(data, polynomial); + }); + } + try { + const hash = wasmCache$h.calculate(data, polynomial); + return Promise.resolve(hash); + } + catch (err) { + return Promise.reject(err); + } +} +/** + * Creates a new CRC-32 hash instance + * @param polynomial Input polynomial (defaults to 0xedb88320, for CRC32C use 0x82f63b78) + */ +function createCRC32(polynomial = 0xedb88320) { + if (validatePoly(polynomial)) { + return Promise.reject(validatePoly(polynomial)); + } + return WASMInterface(wasmJson$g, 4).then((wasm) => { + wasm.init(polynomial); + const obj = { + init: () => { + wasm.init(polynomial); + return obj; + }, + update: (data) => { + wasm.update(data); + return obj; + }, + // biome-ignore lint/suspicious/noExplicitAny: Conflict with IHasher type + digest: (outputType) => wasm.digest(outputType), + save: () => wasm.save(), + load: (data) => { + wasm.load(data); + return obj; + }, + blockSize: 4, + digestSize: 4, + }; + return obj; + }); +} + +var name$f = "crc64"; +var data$f = "AGFzbQEAAAABDANgAAF/YAAAYAF/AAMHBgABAgEAAQUEAQECAgYOAn8BQZCJBgt/AEGACAsHcAgGbWVtb3J5AgAOSGFzaF9HZXRCdWZmZXIAAAlIYXNoX0luaXQAAQtIYXNoX1VwZGF0ZQACCkhhc2hfRmluYWwAAw1IYXNoX0dldFN0YXRlAAQOSGFzaF9DYWxjdWxhdGUABQpTVEFURV9TSVpFAwEKgwgGBQBBgAkL9QMDAX4BfwJ+AkBBACkDgIkCQQApA4AJIgBRDQBBgIkBIQFCACECA0AgAUIAQgBCAEIAQgBCAEIAQgAgAkIBg30gAIMgAkIBiIUiA0IBg30gAIMgA0IBiIUiA0IBg30gAIMgA0IBiIUiA0IBg30gAIMgA0IBiIUiA0IBg30gAIMgA0IBiIUiA0IBg30gAIMgA0IBiIUiA0IBg30gAIMgA0IBiIUiA0IBg30gAIMgA0IBiIU3AwAgAUEIaiEBIAJCAXwiAkKAAlINAAtBACEBA0AgAUGImQFqIAFBiIkBaikDACICp0H/AXFBA3RBgIkBaikDACACQgiIhSICNwMAIAFBiKkBaiACp0H/AXFBA3RBgIkBaikDACACQgiIhSICNwMAIAFBiLkBaiACp0H/AXFBA3RBgIkBaikDACACQgiIhSICNwMAIAFBiMkBaiACp0H/AXFBA3RBgIkBaikDACACQgiIhSICNwMAIAFBiNkBaiACp0H/AXFBA3RBgIkBaikDACACQgiIhSICNwMAIAFBiOkBaiACp0H/AXFBA3RBgIkBaikDACACQgiIhSICNwMAIAFBiPkBaiACp0H/AXFBA3RBgIkBaikDACACQgiIhTcDACABQQhqIgFB+A9HDQALQQAgADcDgIkCC0EAQgA3A4iJAguUAwIBfgJ/QQApA4iJAkJ/hSEBQYAJIQICQCAAQQhJDQBBgAkhAgNAIAIpAwAgAYUiAUIwiKdB/wFxQQN0QYCZAWopAwAgAUI4iKdBA3RBgIkBaikDAIUgAUIoiKdB/wFxQQN0QYCpAWopAwCFIAFCIIinQf8BcUEDdEGAuQFqKQMAhSABpyIDQRV2QfgPcUGAyQFqKQMAhSADQQ12QfgPcUGA2QFqKQMAhSADQQV2QfgPcUGA6QFqKQMAhSADQf8BcUEDdEGA+QFqKQMAhSEBIAJBCGohAiAAQXhqIgBBB0sNAAsLAkAgAEUNAAJAAkAgAEEBcQ0AIAAhAwwBCyABQv8BgyACMQAAhadBA3RBgIkBaikDACABQgiIhSEBIAJBAWohAiAAQX9qIQMLIABBAUYNAANAIAFC/wGDIAIxAACFp0EDdEGAiQFqKQMAIAFCCIiFIgFC/wGDIAJBAWoxAACFp0EDdEGAiQFqKQMAIAFCCIiFIQEgAkECaiECIANBfmoiAw0ACwtBACABQn+FNwOIiQILZAEBfkEAQQApA4iJAiIAQjiGIABCgP4Dg0IohoQgAEKAgPwHg0IYhiAAQoCAgPgPg0IIhoSEIABCCIhCgICA+A+DIABCGIhCgID8B4OEIABCKIhCgP4DgyAAQjiIhISENwOACQsGAEGIiQILAgALCwsBAEGACAsECAAAAA=="; +var hash$f = "c5ac6c16"; +var wasmJson$f = { + name: name$f, + data: data$f, + hash: hash$f +}; + +const mutex$g = new Mutex(); +let wasmCache$g = null; +const polyBuffer = new Uint8Array(8); +function parsePoly(poly) { + const errText = "Polynomial must be provided as a 16 char long hex string"; + if (typeof poly !== "string" || poly.length !== 16) { + return { hi: 0, lo: 0, err: new Error(errText) }; + } + const hi = Number(`0x${poly.slice(0, 8)}`); + const lo = Number(`0x${poly.slice(8)}`); + if (Number.isNaN(hi) || Number.isNaN(lo)) { + return { hi, lo, err: new Error(errText) }; + } + return { hi, lo, err: null }; +} +function writePoly(arr, lo, hi) { + // write in little-endian format + const buffer = new DataView(arr); + buffer.setUint32(0, lo, true); + buffer.setUint32(4, hi, true); +} +/** + * Calculates CRC-64 hash + * @param data Input data (string, Buffer or TypedArray) + * @param polynomial Input polynomial (defaults to 'c96c5795d7870f42' - ECMA) + * @returns Computed hash as a hexadecimal string + */ +function crc64(data, polynomial = "c96c5795d7870f42") { + const { hi, lo, err } = parsePoly(polynomial); + if (err !== null) { + return Promise.reject(err); + } + if (wasmCache$g === null) { + return lockedCreate(mutex$g, wasmJson$f, 8).then((wasm) => { + wasmCache$g = wasm; + writePoly(polyBuffer.buffer, lo, hi); + wasmCache$g.writeMemory(polyBuffer); + return wasmCache$g.calculate(data); + }); + } + try { + writePoly(polyBuffer.buffer, lo, hi); + wasmCache$g.writeMemory(polyBuffer); + const hash = wasmCache$g.calculate(data); + return Promise.resolve(hash); + } + catch (err) { + return Promise.reject(err); + } +} +/** + * Creates a new CRC-64 hash instance + * @param polynomial Input polynomial (defaults to 'c96c5795d7870f42' - ECMA) + */ +function createCRC64(polynomial = "c96c5795d7870f42") { + const { hi, lo, err } = parsePoly(polynomial); + if (err !== null) { + return Promise.reject(err); + } + return WASMInterface(wasmJson$f, 8).then((wasm) => { + const instanceBuffer = new Uint8Array(8); + writePoly(instanceBuffer.buffer, lo, hi); + wasm.writeMemory(instanceBuffer); + wasm.init(); + const obj = { + init: () => { + wasm.writeMemory(instanceBuffer); + wasm.init(); + return obj; + }, + update: (data) => { + wasm.update(data); + return obj; + }, + // biome-ignore lint/suspicious/noExplicitAny: Conflict with IHasher type + digest: (outputType) => wasm.digest(outputType), + save: () => wasm.save(), + load: (data) => { + wasm.load(data); + return obj; + }, + blockSize: 8, + digestSize: 8, + }; + return obj; + }); +} + +var name$e = "md4"; +var data$e = "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"; +var hash$e = "bd8ce7c7"; +var wasmJson$e = { + name: name$e, + data: data$e, + hash: hash$e +}; + +const mutex$f = new Mutex(); +let wasmCache$f = null; +/** + * Calculates MD4 hash + * @param data Input data (string, Buffer or TypedArray) + * @returns Computed hash as a hexadecimal string + */ +function md4(data) { + if (wasmCache$f === null) { + return lockedCreate(mutex$f, wasmJson$e, 16).then((wasm) => { + wasmCache$f = wasm; + return wasmCache$f.calculate(data); + }); + } + try { + const hash = wasmCache$f.calculate(data); + return Promise.resolve(hash); + } + catch (err) { + return Promise.reject(err); + } +} +/** + * Creates a new MD4 hash instance + */ +function createMD4() { + return WASMInterface(wasmJson$e, 16).then((wasm) => { + wasm.init(); + const obj = { + init: () => { + wasm.init(); + return obj; + }, + update: (data) => { + wasm.update(data); + return obj; + }, + // biome-ignore lint/suspicious/noExplicitAny: Conflict with IHasher type + digest: (outputType) => wasm.digest(outputType), + save: () => wasm.save(), + load: (data) => { + wasm.load(data); + return obj; + }, + blockSize: 64, + digestSize: 16, + }; + return obj; + }); +} + +var name$d = "md5"; +var data$d = "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"; +var hash$d = "e6508e4b"; +var wasmJson$d = { + name: name$d, + data: data$d, + hash: hash$d +}; + +const mutex$e = new Mutex(); +let wasmCache$e = null; +/** + * Calculates MD5 hash + * @param data Input data (string, Buffer or TypedArray) + * @returns Computed hash as a hexadecimal string + */ +function md5(data) { + if (wasmCache$e === null) { + return lockedCreate(mutex$e, wasmJson$d, 16).then((wasm) => { + wasmCache$e = wasm; + return wasmCache$e.calculate(data); + }); + } + try { + const hash = wasmCache$e.calculate(data); + return Promise.resolve(hash); + } + catch (err) { + return Promise.reject(err); + } +} +/** + * Creates a new MD5 hash instance + */ +function createMD5() { + return WASMInterface(wasmJson$d, 16).then((wasm) => { + wasm.init(); + const obj = { + init: () => { + wasm.init(); + return obj; + }, + update: (data) => { + wasm.update(data); + return obj; + }, + // biome-ignore lint/suspicious/noExplicitAny: Conflict with IHasher type + digest: (outputType) => wasm.digest(outputType), + save: () => wasm.save(), + load: (data) => { + wasm.load(data); + return obj; + }, + blockSize: 64, + digestSize: 16, + }; + return obj; + }); +} + +var name$c = "sha1"; +var data$c = "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"; +var hash$c = "6b530c24"; +var wasmJson$c = { + name: name$c, + data: data$c, + hash: hash$c +}; + +const mutex$d = new Mutex(); +let wasmCache$d = null; +/** + * Calculates SHA-1 hash + * @param data Input data (string, Buffer or TypedArray) + * @returns Computed hash as a hexadecimal string + */ +function sha1(data) { + if (wasmCache$d === null) { + return lockedCreate(mutex$d, wasmJson$c, 20).then((wasm) => { + wasmCache$d = wasm; + return wasmCache$d.calculate(data); + }); + } + try { + const hash = wasmCache$d.calculate(data); + return Promise.resolve(hash); + } + catch (err) { + return Promise.reject(err); + } +} +/** + * Creates a new SHA-1 hash instance + */ +function createSHA1() { + return WASMInterface(wasmJson$c, 20).then((wasm) => { + wasm.init(); + const obj = { + init: () => { + wasm.init(); + return obj; + }, + update: (data) => { + wasm.update(data); + return obj; + }, + // biome-ignore lint/suspicious/noExplicitAny: Conflict with IHasher type + digest: (outputType) => wasm.digest(outputType), + save: () => wasm.save(), + load: (data) => { + wasm.load(data); + return obj; + }, + blockSize: 64, + digestSize: 20, + }; + return obj; + }); +} + +var name$b = "sha3"; +var data$b = "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"; +var hash$b = "fb24e536"; +var wasmJson$b = { + name: name$b, + data: data$b, + hash: hash$b +}; + +const mutex$c = new Mutex(); +let wasmCache$c = null; +function validateBits$1(bits) { + if (![224, 256, 384, 512].includes(bits)) { + return new Error("Invalid variant! Valid values: 224, 256, 384, 512"); + } + return null; +} +/** + * Calculates SHA-3 hash + * @param data Input data (string, Buffer or TypedArray) + * @param bits Number of output bits. Valid values: 224, 256, 384, 512 + * @returns Computed hash as a hexadecimal string + */ +function sha3(data, bits = 512) { + if (validateBits$1(bits)) { + return Promise.reject(validateBits$1(bits)); + } + const hashLength = bits / 8; + if (wasmCache$c === null || wasmCache$c.hashLength !== hashLength) { + return lockedCreate(mutex$c, wasmJson$b, hashLength).then((wasm) => { + wasmCache$c = wasm; + return wasmCache$c.calculate(data, bits, 0x06); + }); + } + try { + const hash = wasmCache$c.calculate(data, bits, 0x06); + return Promise.resolve(hash); + } + catch (err) { + return Promise.reject(err); + } +} +/** + * Creates a new SHA-3 hash instance + * @param bits Number of output bits. Valid values: 224, 256, 384, 512 + */ +function createSHA3(bits = 512) { + if (validateBits$1(bits)) { + return Promise.reject(validateBits$1(bits)); + } + const outputSize = bits / 8; + return WASMInterface(wasmJson$b, outputSize).then((wasm) => { + wasm.init(bits); + const obj = { + init: () => { + wasm.init(bits); + return obj; + }, + update: (data) => { + wasm.update(data); + return obj; + }, + // biome-ignore lint/suspicious/noExplicitAny: Conflict with IHasher type + digest: (outputType) => wasm.digest(outputType, 0x06), + save: () => wasm.save(), + load: (data) => { + wasm.load(data); + return obj; + }, + blockSize: 200 - 2 * outputSize, + digestSize: outputSize, + }; + return obj; + }); +} + +const mutex$b = new Mutex(); +let wasmCache$b = null; +function validateBits(bits) { + if (![224, 256, 384, 512].includes(bits)) { + return new Error("Invalid variant! Valid values: 224, 256, 384, 512"); + } + return null; +} +/** + * Calculates Keccak hash + * @param data Input data (string, Buffer or TypedArray) + * @param bits Number of output bits. Valid values: 224, 256, 384, 512 + * @returns Computed hash as a hexadecimal string + */ +function keccak(data, bits = 512) { + if (validateBits(bits)) { + return Promise.reject(validateBits(bits)); + } + const hashLength = bits / 8; + if (wasmCache$b === null || wasmCache$b.hashLength !== hashLength) { + return lockedCreate(mutex$b, wasmJson$b, hashLength).then((wasm) => { + wasmCache$b = wasm; + return wasmCache$b.calculate(data, bits, 0x01); + }); + } + try { + const hash = wasmCache$b.calculate(data, bits, 0x01); + return Promise.resolve(hash); + } + catch (err) { + return Promise.reject(err); + } +} +/** + * Creates a new Keccak hash instance + * @param bits Number of output bits. Valid values: 224, 256, 384, 512 + */ +function createKeccak(bits = 512) { + if (validateBits(bits)) { + return Promise.reject(validateBits(bits)); + } + const outputSize = bits / 8; + return WASMInterface(wasmJson$b, outputSize).then((wasm) => { + wasm.init(bits); + const obj = { + init: () => { + wasm.init(bits); + return obj; + }, + update: (data) => { + wasm.update(data); + return obj; + }, + // biome-ignore lint/suspicious/noExplicitAny: Conflict with IHasher type + digest: (outputType) => wasm.digest(outputType, 0x01), + save: () => wasm.save(), + load: (data) => { + wasm.load(data); + return obj; + }, + blockSize: 200 - 2 * outputSize, + digestSize: outputSize, + }; + return obj; + }); +} + +var name$a = "sha256"; +var data$a = "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c2pBx6KerX1qIhkgASADcyACcSABIANxcyABQR53IAFBE3dzIAFBCndzaiAaaiICaiIJIBMgEnNxIBJzaiAJQRp3IAlBFXdzIAlBB3dzakHRxqk2aiIaIAIgAXMgA3EgAiABcXMgAkEedyACQRN3cyACQQp3c2ogGGoiA2oiESAJIBNzcSATc2ogEUEadyARQRV3cyARQQd3c2pB59KkoQFqIhggAyACcyABcSADIAJxcyADQR53IANBE3dzIANBCndzaiAUaiIBaiISIBEgCXNxIAlzaiASQRp3IBJBFXdzIBJBB3dzakGFldy9AmoiFCABIANzIAJxIAEgA3FzIAFBHncgAUETd3MgAUEKd3NqIBdqIgJqIhMgI2ogJiASaiAiIBFqICUgCWogEyASIBFzcSARc2ogE0EadyATQRV3cyATQQd3c2pBuMLs8AJqIhcgAiABcyADcSACIAFxcyACQR53IAJBE3dzIAJBCndzaiAZaiIDaiIJIBMgEnNxIBJzaiAJQRp3IAlBFXdzIAlBB3dzakH827HpBGoiGSADIAJzIAFxIAMgAnFzIANBHncgA0ETd3MgA0EKd3NqIBpqIgFqIhEgCSATc3EgE3NqIBFBGncgEUEVd3MgEUEHd3NqQZOa4JkFaiIaIAEgA3MgAnEgASADcXMgAUEedyABQRN3cyABQQp3c2ogGGoiAmoiEiARIAlzcSAJc2ogEkEadyASQRV3cyASQQd3c2pB1OapqAZqIhggAiABcyADcSACIAFxcyACQR53IAJBE3dzIAJBCndzaiAUaiIDaiITaiAoIBJqICQgEWogJyAJaiATIBIgEXNxIBFzaiATQRp3IBNBFXdzIBNBB3dzakG7laizB2oiFCADIAJzIAFxIAMgAnFzIANBHncgA0ETd3MgA0EKd3NqIBdqIgFqIgkgEyASc3EgEnNqIAlBGncgCUEVd3MgCUEHd3NqQa6Si454aiIXIAEgA3MgAnEgASADcXMgAUEedyABQRN3cyABQQp3c2ogGWoiAmoiESAJIBNzcSATc2ogEUEadyARQRV3cyARQQd3c2pBhdnIk3lqIhkgAiABcyADcSACIAFxcyACQR53IAJBE3dzIAJBCndzaiAaaiIDaiISIBEgCXNxIAlzaiASQRp3IBJBFXdzIBJBB3dzakGh0f+VemoiGiADIAJz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"; +var hash$a = "8c18dd94"; +var wasmJson$a = { + name: name$a, + data: data$a, + hash: hash$a +}; + +const mutex$a = new Mutex(); +let wasmCache$a = null; +/** + * Calculates SHA-2 (SHA-224) hash + * @param data Input data (string, Buffer or TypedArray) + * @returns Computed hash as a hexadecimal string + */ +function sha224(data) { + if (wasmCache$a === null) { + return lockedCreate(mutex$a, wasmJson$a, 28).then((wasm) => { + wasmCache$a = wasm; + return wasmCache$a.calculate(data, 224); + }); + } + try { + const hash = wasmCache$a.calculate(data, 224); + return Promise.resolve(hash); + } + catch (err) { + return Promise.reject(err); + } +} +/** + * Creates a new SHA-2 (SHA-224) hash instance + */ +function createSHA224() { + return WASMInterface(wasmJson$a, 28).then((wasm) => { + wasm.init(224); + const obj = { + init: () => { + wasm.init(224); + return obj; + }, + update: (data) => { + wasm.update(data); + return obj; + }, + // biome-ignore lint/suspicious/noExplicitAny: Conflict with IHasher type + digest: (outputType) => wasm.digest(outputType), + save: () => wasm.save(), + load: (data) => { + wasm.load(data); + return obj; + }, + blockSize: 64, + digestSize: 28, + }; + return obj; + }); +} + +const mutex$9 = new Mutex(); +let wasmCache$9 = null; +/** + * Calculates SHA-2 (SHA-256) hash + * @param data Input data (string, Buffer or TypedArray) + * @returns Computed hash as a hexadecimal string + */ +function sha256(data) { + if (wasmCache$9 === null) { + return lockedCreate(mutex$9, wasmJson$a, 32).then((wasm) => { + wasmCache$9 = wasm; + return wasmCache$9.calculate(data, 256); + }); + } + try { + const hash = wasmCache$9.calculate(data, 256); + return Promise.resolve(hash); + } + catch (err) { + return Promise.reject(err); + } +} +/** + * Creates a new SHA-2 (SHA-256) hash instance + */ +function createSHA256() { + return WASMInterface(wasmJson$a, 32).then((wasm) => { + wasm.init(256); + const obj = { + init: () => { + wasm.init(256); + return obj; + }, + update: (data) => { + wasm.update(data); + return obj; + }, + // biome-ignore lint/suspicious/noExplicitAny: Conflict with IHasher type + digest: (outputType) => wasm.digest(outputType), + save: () => wasm.save(), + load: (data) => { + wasm.load(data); + return obj; + }, + blockSize: 64, + digestSize: 32, + }; + return obj; + }); +} + +var name$9 = "sha512"; +var data$9 = "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"; +var hash$9 = "f2e40eb1"; +var wasmJson$9 = { + name: name$9, + data: data$9, + hash: hash$9 +}; + +const mutex$8 = new Mutex(); +let wasmCache$8 = null; +/** + * Calculates SHA-2 (SHA-384) hash + * @param data Input data (string, Buffer or TypedArray) + * @returns Computed hash as a hexadecimal string + */ +function sha384(data) { + if (wasmCache$8 === null) { + return lockedCreate(mutex$8, wasmJson$9, 48).then((wasm) => { + wasmCache$8 = wasm; + return wasmCache$8.calculate(data, 384); + }); + } + try { + const hash = wasmCache$8.calculate(data, 384); + return Promise.resolve(hash); + } + catch (err) { + return Promise.reject(err); + } +} +/** + * Creates a new SHA-2 (SHA-384) hash instance + */ +function createSHA384() { + return WASMInterface(wasmJson$9, 48).then((wasm) => { + wasm.init(384); + const obj = { + init: () => { + wasm.init(384); + return obj; + }, + update: (data) => { + wasm.update(data); + return obj; + }, + // biome-ignore lint/suspicious/noExplicitAny: Conflict with IHasher type + digest: (outputType) => wasm.digest(outputType), + save: () => wasm.save(), + load: (data) => { + wasm.load(data); + return obj; + }, + blockSize: 128, + digestSize: 48, + }; + return obj; + }); +} + +const mutex$7 = new Mutex(); +let wasmCache$7 = null; +/** + * Calculates SHA-2 (SHA-512) hash + * @param data Input data (string, Buffer or TypedArray) + * @returns Computed hash as a hexadecimal string + */ +function sha512(data) { + if (wasmCache$7 === null) { + return lockedCreate(mutex$7, wasmJson$9, 64).then((wasm) => { + wasmCache$7 = wasm; + return wasmCache$7.calculate(data, 512); + }); + } + try { + const hash = wasmCache$7.calculate(data, 512); + return Promise.resolve(hash); + } + catch (err) { + return Promise.reject(err); + } +} +/** + * Creates a new SHA-2 (SHA-512) hash instance + */ +function createSHA512() { + return WASMInterface(wasmJson$9, 64).then((wasm) => { + wasm.init(512); + const obj = { + init: () => { + wasm.init(512); + return obj; + }, + update: (data) => { + wasm.update(data); + return obj; + }, + // biome-ignore lint/suspicious/noExplicitAny: Conflict with IHasher type + digest: (outputType) => wasm.digest(outputType), + save: () => wasm.save(), + load: (data) => { + wasm.load(data); + return obj; + }, + blockSize: 128, + digestSize: 64, + }; + return obj; + }); +} + +var name$8 = "xxhash32"; +var data$8 = "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"; +var hash$8 = "4bb12485"; +var wasmJson$8 = { + name: name$8, + data: data$8, + hash: hash$8 +}; + +const mutex$6 = new Mutex(); +let wasmCache$6 = null; +function validateSeed$3(seed) { + if (!Number.isInteger(seed) || seed < 0 || seed > 0xffffffff) { + return new Error("Seed must be a valid 32-bit long unsigned integer."); + } + return null; +} +/** + * Calculates xxHash32 hash + * @param data Input data (string, Buffer or TypedArray) + * @param seed Number used to initialize the internal state of the algorithm (defaults to 0) + * @returns Computed hash as a hexadecimal string + */ +function xxhash32(data, seed = 0) { + if (validateSeed$3(seed)) { + return Promise.reject(validateSeed$3(seed)); + } + if (wasmCache$6 === null) { + return lockedCreate(mutex$6, wasmJson$8, 4).then((wasm) => { + wasmCache$6 = wasm; + return wasmCache$6.calculate(data, seed); + }); + } + try { + const hash = wasmCache$6.calculate(data, seed); + return Promise.resolve(hash); + } + catch (err) { + return Promise.reject(err); + } +} +/** + * Creates a new xxHash32 hash instance + * @param data Input data (string, Buffer or TypedArray) + * @param seed Number used to initialize the internal state of the algorithm (defaults to 0) + */ +function createXXHash32(seed = 0) { + if (validateSeed$3(seed)) { + return Promise.reject(validateSeed$3(seed)); + } + return WASMInterface(wasmJson$8, 4).then((wasm) => { + wasm.init(seed); + const obj = { + init: () => { + wasm.init(seed); + return obj; + }, + update: (data) => { + wasm.update(data); + return obj; + }, + // biome-ignore lint/suspicious/noExplicitAny: Conflict with IHasher type + digest: (outputType) => wasm.digest(outputType), + save: () => wasm.save(), + load: (data) => { + wasm.load(data); + return obj; + }, + blockSize: 16, + digestSize: 4, + }; + return obj; + }); +} + +var name$7 = "xxhash64"; +var data$7 = "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"; +var hash$7 = "177fbfa3"; +var wasmJson$7 = { + name: name$7, + data: data$7, + hash: hash$7 +}; + +const mutex$5 = new Mutex(); +let wasmCache$5 = null; +const seedBuffer$2 = new Uint8Array(8); +function validateSeed$2(seed) { + if (!Number.isInteger(seed) || seed < 0 || seed > 0xffffffff) { + return new Error("Seed must be given as two valid 32-bit long unsigned integers (lo + high)."); + } + return null; +} +function writeSeed$2(arr, low, high) { + // write in little-endian format + const buffer = new DataView(arr); + buffer.setUint32(0, low, true); + buffer.setUint32(4, high, true); +} +/** + * Calculates xxHash64 hash + * @param data Input data (string, Buffer or TypedArray) + * @param seedLow Lower 32 bits of the number used to + * initialize the internal state of the algorithm (defaults to 0) + * @param seedHigh Higher 32 bits of the number used to + * initialize the internal state of the algorithm (defaults to 0) + * @returns Computed hash as a hexadecimal string + */ +function xxhash64(data, seedLow = 0, seedHigh = 0) { + if (validateSeed$2(seedLow)) { + return Promise.reject(validateSeed$2(seedLow)); + } + if (validateSeed$2(seedHigh)) { + return Promise.reject(validateSeed$2(seedHigh)); + } + if (wasmCache$5 === null) { + return lockedCreate(mutex$5, wasmJson$7, 8).then((wasm) => { + wasmCache$5 = wasm; + writeSeed$2(seedBuffer$2.buffer, seedLow, seedHigh); + wasmCache$5.writeMemory(seedBuffer$2); + return wasmCache$5.calculate(data); + }); + } + try { + writeSeed$2(seedBuffer$2.buffer, seedLow, seedHigh); + wasmCache$5.writeMemory(seedBuffer$2); + const hash = wasmCache$5.calculate(data); + return Promise.resolve(hash); + } + catch (err) { + return Promise.reject(err); + } +} +/** + * Creates a new xxHash64 hash instance + * @param seedLow Lower 32 bits of the number used to + * initialize the internal state of the algorithm (defaults to 0) + * @param seedHigh Higher 32 bits of the number used to + * initialize the internal state of the algorithm (defaults to 0) + */ +function createXXHash64(seedLow = 0, seedHigh = 0) { + if (validateSeed$2(seedLow)) { + return Promise.reject(validateSeed$2(seedLow)); + } + if (validateSeed$2(seedHigh)) { + return Promise.reject(validateSeed$2(seedHigh)); + } + return WASMInterface(wasmJson$7, 8).then((wasm) => { + const instanceBuffer = new Uint8Array(8); + writeSeed$2(instanceBuffer.buffer, seedLow, seedHigh); + wasm.writeMemory(instanceBuffer); + wasm.init(); + const obj = { + init: () => { + wasm.writeMemory(instanceBuffer); + wasm.init(); + return obj; + }, + update: (data) => { + wasm.update(data); + return obj; + }, + // biome-ignore lint/suspicious/noExplicitAny: Conflict with IHasher type + digest: (outputType) => wasm.digest(outputType), + save: () => wasm.save(), + load: (data) => { + wasm.load(data); + return obj; + }, + blockSize: 32, + digestSize: 8, + }; + return obj; + }); +} + +var name$6 = "xxhash3"; +var data$6 = "AGFzbQEAAAABNAhgAAF/YAR/f39/AGAHf39/f39/fwBgBH9+fn4BfmAEf39/fgF+YAN/f34BfmAAAGABfwADDg0AAQIDBAUFBQYHBgAGBQQBAQICBg4CfwFBwI4FC38AQcAJCwdwCAZtZW1vcnkCAA5IYXNoX0dldEJ1ZmZlcgAACUhhc2hfSW5pdAAIC0hhc2hfVXBkYXRlAAkKSGFzaF9GaW5hbAAKDUhhc2hfR2V0U3RhdGUACw5IYXNoX0NhbGN1bGF0ZQAMClNUQVRFX1NJWkUDAQr6QQ0FAEGACgvkAwMPfgF/AX4CQCADRQ0AIAApAzAhBCAAKQM4IQUgACkDICEGIAApAyghByAAKQMQIQggACkDGCEJIAApAwAhCiAAKQMIIQsDQCAFIAFBMGopAwAiDHwgAkE4aikDACABQThqKQMAIg2FIgVCIIggBUL/////D4N+fCEFIAcgAUEgaikDACIOfCACQShqKQMAIAFBKGopAwAiD4UiB0IgiCAHQv////8Pg358IQcgCSABQRBqKQMAIhB8IAJBGGopAwAgAUEYaikDACIRhSIJQiCIIAlC/////w+DfnwhCSALIAEpAwAiEnwgAkEIaiITKQMAIAFBCGopAwAiFIUiC0IgiCALQv////8Pg358IQsgAkEwaikDACAMhSIMQiCIIAxC/////w+DfiAEfCANfCEEIAJBIGopAwAgDoUiDEIgiCAMQv////8Pg34gBnwgD3whBiACQRBqKQMAIBCFIgxCIIggDEL/////D4N+IAh8IBF8IQggAikDACAShSIMQiCIIAxC/////w+DfiAKfCAUfCEKIAFBwABqIQEgEyECIANBf2oiAw0ACyAAIAk3AxggACAKNwMAIAAgCzcDCCAAIAc3AyggACAINwMQIAAgBTcDOCAAIAY3AyAgACAENwMwCwveAgIBfwF+AkAgBCACIAEoAgAiB2siAkkNACAAIAMgBSAHQQN0aiACEAEgACAFIAZqIgcpAwAgACkDACIIQi+IhSAIhUKx893xCX43AwAgACAHKQMIIAApAwgiCEIviIUgCIVCsfPd8Ql+NwMIIAAgBykDECAAKQMQIghCL4iFIAiFQrHz3fEJfjcDECAAIAcpAxggACkDGCIIQi+IhSAIhUKx893xCX43AxggACAHKQMgIAApAyAiCEIviIUgCIVCsfPd8Ql+NwMgIAAgBykDKCAAKQMoIghCL4iFIAiFQrHz3fEJfjcDKCAAIAcpAzAgACkDMCIIQi+IhSAIhUKx893xCX43AzAgACAHKQM4IAApAzgiCEIviIUgCIVCsfPd8Ql+NwM4IAAgAyACQQZ0aiAFIAQgAmsiBxABIAEgBzYCAA8LIAAgAyAFIAdBA3RqIAQQASABIAcgBGo2AgALhQEBAX8gAiABhSADpyIEQRh0IARBgP4DcUEIdHIgBEEIdkGA/gNxIARBGHZycq1CIIYgA4V9QQA1AoCMAUIghiAAQfyLAWo1AgCEhSIDQjGJIANCGImFIAOFQqW+4/TRjIfZn39+IgNCI4ggAK18IAOFQqW+4/TRjIfZn39+IgNCHIggA4ULZwAgAiABc60gA3wiA0IhiEEALQCAjAFBEHQgAEEIdHIgAEEBdkGAjAFqLQAAQRh0ciAAQf+LAWotAAByrYUgA4VCz9bTvtLHq9lCfiIDQh2IIAOFQvnz3fGZ9pmrFn4iA0IgiCADhQuJAwEEfgJAIABBCUkNAEEAKQOAjAEgASkDICABKQMYhSACfIUiA0I4hiADQoD+A4NCKIaEIANCgID8B4NCGIYgA0KAgID4D4NCCIaEhCADQgiIQoCAgPgPgyADQhiIQoCA/AeDhCADQiiIQoD+A4MgA0I4iISEhCAArXwgAEH4iwFqKQMAIAEpAzAgASkDKIUgAn2FIgJ8IAJC/////w+DIgQgA0IgiCIFfiIGQv////8PgyACQiCIIgIgA0L/////D4MiA358IAQgA34iA0IgiHwiBEIghiADQv////8Pg4QgBkIgiCACIAV+fCAEQiCIfIV8IgNCJYggA4VC+fPd8ZnymasWfiIDQiCIIAOFDwsCQCAAQQRJDQAgACABQQhqKQMAIAFBEGopAwAgAhADDwsCQCAARQ0AIAAgASgCACABQQRqKAIAIAIQBA8LIAEpAzggASkDQIUgAoUiA0IhiCADhULP1tO+0ser2UJ+IgNCHYggA4VC+fPd8Zn2masWfiIDQiCIIAOFC94IAQZ+IACtQoeVr6+Ytt6bnn9+IQMCQCAAQSFJDQACQCAAQcEASQ0AAkAgAEHhAEkNACABKQNoIAJ9QQApA7iMAYUiBEL/////D4MiBSABKQNgIAJ8QQApA7CMAYUiBkIgiCIHfiIIQv////8PgyAEQiCIIgQgBkL/////D4MiBn58IAUgBn4iBUIgiHwiBkIghiAFQv////8Pg4QgCEIgiCAEIAd+fCAGQiCIfIUgA3wgASkDeCACfSAAQciLAWopAwCFIgNC/////w+DIgQgASkDcCACfCAAQcCLAWopAwCFIgVCIIgiBn4iB0L/////D4MgA0IgiCIDIAVC/////w+DIgV+fCAEIAV+IgRCIIh8IgVCIIYgBEL/////D4OEIAdCIIggAyAGfnwgBUIgiHyFfCEDCyABKQNIIAJ9QQApA6iMAYUiBEL/////D4MiBSABKQNAIAJ8QQApA6CMAYUiBkIgiCIHfiIIQv////8PgyAEQiCIIgQgBkL/////D4MiBn58IAUgBn4iBUIgiHwiBkIghiAFQv////8Pg4QgCEIgiCAEIAd+fCAGQiCIfIUgA3wgASkDWCACfSAAQdiLAWopAwCFIgNC/////w+DIgQgASkDUCACfCAAQdCLAWopAwCFIgVCIIgiBn4iB0L/////D4MgA0IgiCIDIAVC/////w+DIgV+fCAEIAV+IgRCIIh8IgVCIIYgBEL/////D4OEIAdCIIggAyAGfnwgBUIgiHyFfCEDCyABKQMoIAJ9QQApA5iMAYUiBEL/////D4MiBSABKQMgIAJ8QQApA5CMAYUiBkIgiCIHfiIIQv////8PgyAEQiCIIgQgBkL/////D4MiBn58IAUgBn4iBUIgiHwiBkIghiAFQv////8Pg4QgCEIgiCAEIAd+fCAGQiCIfIUgA3wgASkDOCACfSAAQeiLAWopAwCFIgNC/////w+DIgQgASkDMCACfCAAQeCLAWopAwCFIgVCIIgiBn4iB0L/////D4MgA0IgiCIDIAVC/////w+DIgV+fCAEIAV+IgRCIIh8IgVCIIYgBEL/////D4OEIAdCIIggAyAGfnwgBUIgiHyFfCEDCyABKQMIIAJ9QQApA4iMAYUiBEL/////D4MiBSABKQMAIAJ8QQApA4CMAYUiBkIgiCIHfiIIQv////8PgyAEQiCIIgQgBkL/////D4MiBn58IAUgBn4iBUIgiHwiBkIghiAFQv////8Pg4QgCEIgiCAEIAd+fCAGQiCIfIUgA3wgASkDGCACfSAAQfiLAWopAwCFIgNC/////w+DIgQgASkDECACfCAAQfCLAWopAwCFIgJCIIgiBX4iBkL/////D4MgA0IgiCIDIAJC/////w+DIgJ+fCAEIAJ+IgJCIIh8IgRCIIYgAkL/////D4OEIAZCIIggAyAFfnwgBEIgiHyFfCICQiWIIAKFQvnz3fGZ8pmrFn4iAkIgiCAChQv8CgQBfwV+An8BfkEAIQMgASkDeCACfUEAKQP4jAGFIgRC/////w+DIgUgASkDcCACfEEAKQPwjAGFIgZCIIgiB34iCEL/////D4MgBEIgiCIEIAZC/////w+DIgZ+fCAFIAZ+IgVCIIh8IgZCIIYgBUL/////D4OEIAhCIIggBCAHfnwgBkIgiHyFIAEpA2ggAn1BACkD6IwBhSIEQv////8PgyIFIAEpA2AgAnxBACkD4IwBhSIGQiCIIgd+IghC/////w+DIARCIIgiBCAGQv////8PgyIGfnwgBSAGfiIFQiCIfCIGQiCGIAVC/////w+DhCAIQiCIIAQgB358IAZCIIh8hSABKQNYIAJ9QQApA9iMAYUiBEL/////D4MiBSABKQNQIAJ8QQApA9CMAYUiBkIgiCIHfiIIQv////8PgyAEQiCIIgQgBkL/////D4MiBn58IAUgBn4iBUIgiHwiBkIghiAFQv////8Pg4QgCEIgiCAEIAd+fCAGQiCIfIUgASkDSCACfUEAKQPIjAGFIgRC/////w+DIgUgASkDQCACfEEAKQPAjAGFIgZCIIgiB34iCEL/////D4MgBEIgiCIEIAZC/////w+DIgZ+fCAFIAZ+IgVCIIh8IgZCIIYgBUL/////D4OEIAhCIIggBCAHfnwgBkIgiHyFIAEpAzggAn1BACkDuIwBhSIEQv////8PgyIFIAEpAzAgAnxBACkDsIwBhSIGQiCIIgd+IghC/////w+DIARCIIgiBCAGQv////8PgyIGfnwgBSAGfiIFQiCIfCIGQiCGIAVC/////w+DhCAIQiCIIAQgB358IAZCIIh8hSABKQMoIAJ9QQApA6iMAYUiBEL/////D4MiBSABKQMgIAJ8QQApA6CMAYUiBkIgiCIHfiIIQv////8PgyAEQiCIIgQgBkL/////D4MiBn58IAUgBn4iBUIgiHwiBkIghiAFQv////8Pg4QgCEIgiCAEIAd+fCAGQiCIfIUgASkDGCACfUEAKQOYjAGFIgRC/////w+DIgUgASkDECACfEEAKQOQjAGFIgZCIIgiB34iCEL/////D4MgBEIgiCIEIAZC/////w+DIgZ+fCAFIAZ+IgVCIIh8IgZCIIYgBUL/////D4OEIAhCIIggBCAHfnwgBkIgiHyFIAEpAwggAn1BACkDiIwBhSIEQv////8PgyIFIAEpAwAgAnxBACkDgIwBhSIGQiCIIgd+IghC/////w+DIARCIIgiBCAGQv////8PgyIGfnwgBSAGfiIFQiCIfCIGQiCGIAVC/////w+DhCAIQiCIIAQgB358IAZCIIh8hSAArUKHla+vmLbem55/fnx8fHx8fHx8IgRCJYggBIVC+fPd8ZnymasWfiIEQiCIIASFIQQCQCAAQZABSA0AIABBBHZBeGohCQNAIAEgA2oiCkELaikDACACfSADQYiNAWopAwCFIgVC/////w+DIgYgCkEDaikDACACfCADQYCNAWopAwCFIgdCIIgiCH4iC0L/////D4MgBUIgiCIFIAdC/////w+DIgd+fCAGIAd+IgZCIIh8IgdCIIYgBkL/////D4OEIAtCIIggBSAIfnwgB0IgiHyFIAR8IQQgA0EQaiEDIAlBf2oiCQ0ACwsgASkDfyACfSAAQfiLAWopAwCFIgVC/////w+DIgYgASkDdyACfCAAQfCLAWopAwCFIgJCIIgiB34iCEL/////D4MgBUIgiCIFIAJC/////w+DIgJ+fCAGIAJ+IgJCIIh8IgZCIIYgAkL/////D4OEIAhCIIggBSAHfnwgBkIgiHyFIAR8IgJCJYggAoVC+fPd8ZnymasWfiICQiCIIAKFC98FAgF+AX8CQAJAQQApA4AKIgBQRQ0AQYAIIQFCACEADAELAkBBACkDoI4BIABSDQBBACEBDAELQQAhAUEAQq+v79e895Kg/gAgAH03A/iLAUEAIABCxZbr+djShYIofDcD8IsBQQBCj/Hjja2P9JhOIAB9NwPoiwFBACAAQqus+MXV79HQfHw3A+CLAUEAQtOt1LKShbW0nn8gAH03A9iLAUEAIABCl5r0jvWWvO3JAHw3A9CLAUEAQsWDgv2v/8SxayAAfTcDyIsBQQAgAELqi7OdyOb09UN8NwPAiwFBAELIv/rLnJveueQAIAB9NwO4iwFBACAAQoqjgd/Ume2sMXw3A7CLAUEAQvm57738+MKnHSAA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QQApA4CKATcDACACQQApA4iKATcDCCACQQApA5CKATcDECACQQApA5iKATcDGCACQQApA6CKATcDICACQQApA6iKATcDKCACQQApA7CKASIFNwMwIAJBACkDuIoBIgY3AzgCQAJAQQAoAoCOASIHQcAASQ0AIAJBACgCiI4BNgJAIAIgAkHAAGpBACgCmI4BQYCMASAHQX9qQQZ2IANBACgCnI4BIgAQAiADIABqIgBBeWopAwAhCCAAKQMJIQkgACkDGSEKIAApAykhCyAHQcCLAWopAwAhBSAAKQMBIQwgB0HIiwFqKQMAIQYgB0HQiwFqKQMAIQ0gACkDESEOIAdB2IsBaikDACEPIAdB4IsBaikDACEQIAApAyEhESAHQeiLAWopAwAhEiACKQMAIRMgAikDECEUIAIpAyAhFSACKQMwIRYgAikDCCEXIAIpAxghGCACKQMoIRkgAiACKQM4IAdB8IsBaikDACIafCAAKQMxIAdB+IsBaikDACIbhSIcQiCIIBxC/////w+Dfnw3AzggGSAQfCARIBKFIhFCIIggEUL/////D4N+fCERIBggDXwgDiAPhSIOQiCIIA5C/////w+DfnwhDiAXIAV8IAwgBoUiDEIgiCAMQv////8Pg358IQwgGyAWIAsgGoUiC0IgiCALQv////8Pg358fCELIBIgFSAKIBCFIhBCIIggEEL/////D4N+fHwhECAPIBQgCSANhSINQiCIIA1C/////w+Dfnx8IRIgBiATIAggBYUiBUIgiCAFQv////8Pg358fCEIDAELIAdBwI0BaiEdQcAAIAdrIR4gAkHAAGohAAJAAkACQCAHQThNDQAgHiEfDAELAkACQEE4IAdrQQN2QQFqQQdxIh8NACACQcAAaiEAIB4hHwwBCyACQcAAaiEAIB9BA3QiICEfA0AgACAdKQMANwMAIABBCGohACAdQQhqIR0gH0F4aiIfDQALQcAAIAcgIGprIR8LAkAgBw0AA0AgACAdKQMANwMAIABBCGogHUEIaikDADcDACAAQRBqIB1BEGopAwA3AwAgAEEYaiAdQRhqKQMANwMAIABBIGogHUEgaikDADcDACAAQShqIB1BKGopAwA3AwAgAEEwaiAdQTBqKQMANwMAIABBOGogHUE4aikDADcDACAAQcAAaiEAIB1BwABqIR0gH0FAaiIfQQdLDQALCyAfRQ0BCyAfQX9qISECQCAfQQdxIiBFDQAgH0F4cSEfA0AgACAdLQAAOgAAIABBAWohACAdQQFqIR0gIEF/aiIgDQALCyAhQQdJDQADQCAAIB0pAAA3AAAgAEEIaiEAIB1BCGohHSAfQXhqIh8NAAsLIAJBwABqIB5qIR1BgIwBIQACQAJAAkAgB0EISQ0AAkAgB0E4akEDdkEBakEHcSIfDQAMAgsgH0EDdCEgQYCMASEAA0AgHSAAKQMANwMAIB1BCGohHSAAQQhqIQAgH0F/aiIfDQALIAcgIGshBwsgB0UNAQJAAkAgB0EHcSIgDQAgByEfDAELIAdBeHEhHwNAIB0gAC0AADoAACAdQQFqIR0gAEEBaiEAICBBf2oiIA0ACwsgB0EISQ0BCwNAIB0gACkAADcAACAdQQhqIR0gAEEIaiEAIB9BeGoiHw0ACwsgA0EAKAKcjgFqIgBBeWopAwAhCiAAKQMJIRMgACkDGSEUIAApAykhCyAAKQMBIQwgACkDESEOIAApAyEhESACKQMAIRUgAikDECEWIAIpAyAhFyACKQMIIRggAikDQCENIAIpA0ghDyACKQMYIRkgAikDUCESIAIpA1ghCCACKQMoIRogAikDYCEQIAIpA2ghCSACIAYgAikDcCIbfCAAKQMxIAIpA3giBoUiHEIgiCAcQv////8Pg358NwM4IBogEHwgESAJhSIRQiCIIBFC/////w+DfnwhESAZIBJ8IA4gCIUiDkIgiCAOQv////8Pg358IQ4gGCANfCAMIA+FIgxCIIggDEL/////D4N+fCEMIAYgCyAbhSILQiCIIAtC/////w+DfiAFfHwhCyAJIBcgFCAQhSIFQiCIIAVC/////w+Dfnx8IRAgCCAWIBMgEoUiBUIgiCAFQv////8Pg358fCESIA8gFSAKIA2FIgVCIIggBUL/////D4N+fHwhCAsgAykDQyACKQM4hSIFQv////8PgyIGIAMpAzsgC4UiC0IgiCINfiIPQv////8PgyAFQiCIIgUgC0L/////D4MiC358IAYgC34iBkIgiHwiC0IghiAGQv////8Pg4QgD0IgiCAFIA1+fCALQiCIfIUgAykDMyARhSIFQv////8PgyIGIAMpAysgEIUiC0IgiCINfiIPQv////8PgyAFQiCIIgUgC0L/////D4MiC358IAYgC34iBkIgiHwiC0IghiAGQv////8Pg4QgD0IgiCAFIA1+fCALQiCIfIUgAykDIyAOhSIFQv////8PgyIGIAMpAxsgEoUiC0IgiCINfiIPQv////8PgyAFQiCIIgUgC0L/////D4MiC358IAYgC34iBkIgiHwiC0IghiAGQv////8Pg4QgD0IgiCAFIA1+fCALQiCIfIUgAykDEyAMhSIFQv////8PgyIGIAMpAwsgCIUiC0IgiCINfiIPQv////8PgyAFQiCIIgUgC0L/////D4MiC358IAYgC34iBkIgiHwiC0IghiAGQv////8Pg4QgD0IgiCAFIA1+fCALQiCIfIUgBEKHla+vmLbem55/fnx8fHwiBEIliCAEhUL5893xmfKZqxZ+IgRCIIggBIUhBAwBCyAEpyEAAkBBACkDoI4BIgRQDQACQCAAQRBLDQAgAEGACCAEEAUhBAwCCwJAIABBgAFLDQAgAEGACCAEEAYhBAwCCyAAQYAIIAQQByEEDAELAkAgAEEQSw0AIAAgA0IAEAUhBAwBCwJAIABBgAFLDQAgACADQgAQBiEEDAELIAAgA0IAEAchBAtBACAEQjiGIARCgP4Dg0IohoQgBEKAgPwHg0IYhiAEQoCAgPgPg0IIhoSEIARCCIhCgICA+A+DIARCGIhCgID8B4OEIARCKIhCgP4DgyAEQjiIhISENwOACiABJAALBgBBgIoBCwIACwvMAQEAQYAIC8QBuP5sOSOkS758AYEs9yGtHN7UbemDkJfbckCkpLezZx/LeeZOzMDleIJa0H3M/3IhuAhGdPdDJI7gNZDmgTomTDwoUruRwwDLiNBlixtTLqNxZEiXog35TjgZ70ap3qzYqPp2P+OcND/53LvHxwtPHYpR4EvNtFkxyJ9+ydl4c2TqxayDNNPrw8WBoP/6E2PrFw3dUbfw2knTFlUmKdRonisWvlh9R6H8j/i40XrQMc5FyzqPlRYEKK/X+8q7S0B+QAIAAA=="; +var hash$6 = "5a2fbdbb"; +var wasmJson$6 = { + name: name$6, + data: data$6, + hash: hash$6 +}; + +const mutex$4 = new Mutex(); +let wasmCache$4 = null; +const seedBuffer$1 = new Uint8Array(8); +function validateSeed$1(seed) { + if (!Number.isInteger(seed) || seed < 0 || seed > 0xffffffff) { + return new Error("Seed must be given as two valid 32-bit long unsigned integers (lo + high)."); + } + return null; +} +function writeSeed$1(arr, low, high) { + // write in little-endian format + const buffer = new DataView(arr); + buffer.setUint32(0, low, true); + buffer.setUint32(4, high, true); +} +/** + * Calculates xxHash3 hash + * @param data Input data (string, Buffer or TypedArray) + * @param seedLow Lower 32 bits of the number used to + * initialize the internal state of the algorithm (defaults to 0) + * @param seedHigh Higher 32 bits of the number used to + * initialize the internal state of the algorithm (defaults to 0) + * @returns Computed hash as a hexadecimal string + */ +function xxhash3(data, seedLow = 0, seedHigh = 0) { + if (validateSeed$1(seedLow)) { + return Promise.reject(validateSeed$1(seedLow)); + } + if (validateSeed$1(seedHigh)) { + return Promise.reject(validateSeed$1(seedHigh)); + } + if (wasmCache$4 === null) { + return lockedCreate(mutex$4, wasmJson$6, 8).then((wasm) => { + wasmCache$4 = wasm; + writeSeed$1(seedBuffer$1.buffer, seedLow, seedHigh); + wasmCache$4.writeMemory(seedBuffer$1); + return wasmCache$4.calculate(data); + }); + } + try { + writeSeed$1(seedBuffer$1.buffer, seedLow, seedHigh); + wasmCache$4.writeMemory(seedBuffer$1); + const hash = wasmCache$4.calculate(data); + return Promise.resolve(hash); + } + catch (err) { + return Promise.reject(err); + } +} +/** + * Creates a new xxHash3 hash instance + * @param seedLow Lower 32 bits of the number used to + * initialize the internal state of the algorithm (defaults to 0) + * @param seedHigh Higher 32 bits of the number used to + * initialize the internal state of the algorithm (defaults to 0) + */ +function createXXHash3(seedLow = 0, seedHigh = 0) { + if (validateSeed$1(seedLow)) { + return Promise.reject(validateSeed$1(seedLow)); + } + if (validateSeed$1(seedHigh)) { + return Promise.reject(validateSeed$1(seedHigh)); + } + return WASMInterface(wasmJson$6, 8).then((wasm) => { + const instanceBuffer = new Uint8Array(8); + writeSeed$1(instanceBuffer.buffer, seedLow, seedHigh); + wasm.writeMemory(instanceBuffer); + wasm.init(); + const obj = { + init: () => { + wasm.writeMemory(instanceBuffer); + wasm.init(); + return obj; + }, + update: (data) => { + wasm.update(data); + return obj; + }, + // biome-ignore lint/suspicious/noExplicitAny: Conflict with IHasher type + digest: (outputType) => wasm.digest(outputType), + save: () => wasm.save(), + load: (data) => { + wasm.load(data); + return obj; + }, + blockSize: 512, + digestSize: 8, + }; + return obj; + }); +} + +var name$5 = "xxhash128"; +var data$5 = "AGFzbQEAAAABKwdgAAF/YAR/f39/AGAHf39/f39/fwBgA39/fgF+YAR/f39+AGAAAGABfwADDQwAAQIDBAQEBQYFAAUFBAEBAgIGDgJ/AUHAjgULfwBBwAkLB3AIBm1lbW9yeQIADkhhc2hfR2V0QnVmZmVyAAAJSGFzaF9Jbml0AAcLSGFzaF9VcGRhdGUACApIYXNoX0ZpbmFsAAkNSGFzaF9HZXRTdGF0ZQAKDkhhc2hfQ2FsY3VsYXRlAAsKU1RBVEVfU0laRQMBCqBNDAUAQYAKC+QDAw9+AX8BfgJAIANFDQAgACkDMCEEIAApAzghBSAAKQMgIQYgACkDKCEHIAApAxAhCCAAKQMYIQkgACkDACEKIAApAwghCwNAIAUgAUEwaikDACIMfCACQThqKQMAIAFBOGopAwAiDYUiBUIgiCAFQv////8Pg358IQUgByABQSBqKQMAIg58IAJBKGopAwAgAUEoaikDACIPhSIHQiCIIAdC/////w+DfnwhByAJIAFBEGopAwAiEHwgAkEYaikDACABQRhqKQMAIhGFIglCIIggCUL/////D4N+fCEJIAsgASkDACISfCACQQhqIhMpAwAgAUEIaikDACIUhSILQiCIIAtC/////w+DfnwhCyACQTBqKQMAIAyFIgxCIIggDEL/////D4N+IAR8IA18IQQgAkEgaikDACAOhSIMQiCIIAxC/////w+DfiAGfCAPfCEGIAJBEGopAwAgEIUiDEIgiCAMQv////8Pg34gCHwgEXwhCCACKQMAIBKFIgxCIIggDEL/////D4N+IAp8IBR8IQogAUHAAGohASATIQIgA0F/aiIDDQALIAAgCTcDGCAAIAo3AwAgACALNwMIIAAgBzcDKCAAIAg3AxAgACAFNwM4IAAgBjcDICAAIAQ3AzALC94CAgF/AX4CQCAEIAIgASgCACIHayICSQ0AIAAgAyAFIAdBA3RqIAIQASAAIAUgBmoiBykDACAAKQMAIghCL4iFIAiFQrHz3fEJfjcDACAAIAcpAwggACkDCCIIQi+IhSAIhUKx893xCX43AwggACAHKQMQIAApAxAiCEIviIUgCIVCsfPd8Ql+NwMQIAAgBykDGCAAKQMYIghCL4iFIAiFQrHz3fEJfjcDGCAAIAcpAyAgACkDICIIQi+IhSAIhUKx893xCX43AyAgACAHKQMoIAApAygiCEIviIUgCIVCsfPd8Ql+NwMoIAAgBykDMCAAKQMwIghCL4iFIAiFQrHz3fEJfjcDMCAAIAcpAzggACkDOCIIQi+IhSAIhUKx893xCX43AzggACADIAJBBnRqIAUgBCACayIHEAEgASAHNgIADwsgACADIAUgB0EDdGogBBABIAEgByAEajYCAAvtAwEFfiABKQM4IAApAziFIgNC/////w+DIgQgASkDMCAAKQMwhSIFQiCIIgZ+IgdC/////w+DIANCIIgiAyAFQv////8PgyIFfnwgBCAFfiIEQiCIfCIFQiCGIARC/////w+DhCAHQiCIIAMgBn58IAVCIIh8hSABKQMoIAApAyiFIgNC/////w+DIgQgASkDICAAKQMghSIFQiCIIgZ+IgdC/////w+DIANCIIgiAyAFQv////8PgyIFfnwgBCAFfiIEQiCIfCIFQiCGIARC/////w+DhCAHQiCIIAMgBn58IAVCIIh8hSABKQMYIAApAxiFIgNC/////w+DIgQgASkDECAAKQMQhSIFQiCIIgZ+IgdC/////w+DIANCIIgiAyAFQv////8PgyIFfnwgBCAFfiIEQiCIfCIFQiCGIARC/////w+DhCAHQiCIIAMgBn58IAVCIIh8hSABKQMIIAApAwiFIgNC/////w+DIgQgASkDACAAKQMAhSIFQiCIIgZ+IgdC/////w+DIANCIIgiAyAFQv////8PgyIFfnwgBCAFfiIEQiCIfCIFQiCGIARC/////w+DhCAHQiCIIAMgBn58IAVCIIh8hSACfHx8fCICQiWIIAKFQvnz3fGZ8pmrFn4iAkIgiCAChQu6CAIFfgN/AkAgAUEJSQ0AIAAgAUH4iwFqKQMAIgQgAikDOCACKQMwhSADfIUiBUL/////D4NC95Svrwh+IAVCgICAgHCDfEEAKQOAjAEgAikDKCACKQMghSADfYUgBIUiA0IgiCIEQrHz3fEJfnwgBEKHla+vCH4iBEIgiHwgBEL/////D4MgA0L/////D4MiA0Kx893xCX58IANCh5Wvrwh+IgRCIIh8IgVCIIh8IgNCOIYgA0KA/gODQiiGhCADQoCA/AeDQhiGIANCgICA+A+DQgiGhIQgA0IIiEKAgID4D4MgA0IYiEKAgPwHg4QgA0IoiEKA/gODIANCOIiEhIQgBEL/////D4MgAUF/aq1CNoaEIAVCIIZ8hSIEQiCIIgVCz9bTvgJ+IgZC/////w+DIARC/////w+DIgRCvdzKlQx+fCAEQs/W074CfiIEQiCIfCIHQiCGIghCJYggCCAEQv////8Pg4SFQvnz3fGZ8pmrFn4iBEIgiCAEhTcDACAAIAVCvdzKlQx+IANCz9bTvtLHq9lCfnwgBkIgiHwgB0IgiHwiA0IliCADhUL5893xmfKZqxZ+IgNCIIggA4U3AwgPCwJAIAFBBEkNACAAIAIpAxggAikDEIUgA6ciAkEYdCACQYD+A3FBCHRyIAJBCHZBgP4DcSACQRh2cnKtQiCGIAOFfCABQfyLAWo1AgBCIIZBADUCgIwBhIUiA0IgiCIEIAFBAnRBh5Wvr3hqrSIFfiIGQiCIIARCsfPd8Ql+fCAGQv////8PgyADQv////8PgyIDQrHz3fEJfnwgAyAFfiIDQiCIfCIEQiCIfCAEQiCGIANC/////w+DhCIEQgGGfCIDQiWIIAOFQvnz3fGZ8pmrFn4iBUIgiCAFhTcDCCAAIANCA4ggBIUiA0IjiCADhUKlvuP00YyH2Z9/fiIDQhyIIAOFNwMADwsCQCABRQ0AIAAgAigCBCACKAIAc60gA3wiBEIhiEEALQCAjAFBEHQgAUEIdHIiCSABQQF2QYCMAWotAABBGHRyIgogAUH/iwFqLQAAIgFyIguthSAEhULP1tO+0ser2UJ+IgRCHYggBIVC+fPd8Zn2masWfiIEQiCIIASFNwMAIAAgAigCDCACKAIIc60gA30iA0IhiCABQRh0IAtBgP4DcUEIdHIgCUEIdkGA/gNxIApBGHZyckENd62FIAOFQs/W077Sx6vZQn4iA0IdiCADhUL5893xmfaZqxZ+IgNCIIggA4U3AwgPCyAAIAIpA1AgAikDWIUgA4UiBEIhiCAEhULP1tO+0ser2UJ+IgRCHYggBIVC+fPd8Zn2masWfiIEQiCIIASFNwMIIAAgAikDQCACKQNIhSADhSIDQiGIIAOFQs/W077Sx6vZQn4iA0IdiCADhUL5893xmfaZqxZ+IgNCIIggA4U3AwALwwoBCn4gAa0iBEKHla+vmLbem55/fiEFAkACQCABQSFPDQBCACEGDAELQgAhBwJAIAFBwQBJDQBCACEHAkAgAUHhAEkNACACQfgAaikDACADfSABQciLAWopAwAiCIUiB0L/////D4MiCSACKQNwIAN8IAFBwIsBaikDACIKhSILQiCIIgx+Ig1CIIggB0IgiCIHIAx+fCANQv////8PgyAHIAtC/////w+DIgt+fCAJIAt+IgdCIIh8IglCIIh8QQApA7iMASILQQApA7CMASIMfIUgCUIghiAHQv////8Pg4SFIQcgAkHoAGopAwAgA30gC4UiCUL/////D4MiCyACKQNgIAN8IAyFIgxCIIgiDX4iBkL/////D4MgCUIgiCIJIAxC/////w+DIgx+fCALIAx+IgtCIIh8IgxCIIYgC0L/////D4OEIAZCIIggCSANfnwgDEIgiHyFIAV8IAggCnyFIQULIAJB2ABqKQMAIAN9IAFB2IsBaikDACIIhSIJQv////8PgyIKIAIpA1AgA3wgAUHQiwFqKQMAIguFIgxCIIgiDX4iBkL/////D4MgCUIgiCIJIAxC/////w+DIgx+fCAKIAx+IgpCIIh8IgxCIIYgCkL/////D4OEIAZCIIggCSANfnwgDEIgiHyFIAd8QQApA6iMASIJQQApA6CMASIKfIUhByACQcgAaikDACADfSAJhSIJQv////8PgyIMIAIpA0AgA3wgCoUiCkIgiCINfiIGQv////8PgyAJQiCIIgkgCkL/////D4MiCn58IAwgCn4iCkIgiHwiDEIghiAKQv////8Pg4QgBkIgiCAJIA1+fCAMQiCIfIUgBXwgCCALfIUhBQsgAkE4aikDACADfSABQeiLAWopAwAiCIUiCUL/////D4MiCiACKQMwIAN8IAFB4IsBaikDACILhSIMQiCIIg1+IgZC/////w+DIAlCIIgiCSAMQv////8PgyIMfnwgCiAMfiIKQiCIfCIMQiCGIApC/////w+DhCAGQiCIIAkgDX58IAxCIIh8hSAHfEEAKQOYjAEiB0EAKQOQjAEiCXyFIQYgAkEoaikDACADfSAHhSIHQv////8PgyIKIAIpAyAgA3wgCYUiCUIgiCIMfiINQv////8PgyAHQiCIIgcgCUL/////D4MiCX58IAogCX4iCUIgiHwiCkIghiAJQv////8Pg4QgDUIgiCAHIAx+fCAKQiCIfIUgBXwgCCALfIUhBQsgACACQRhqKQMAIAN9IAFB+IsBaikDACIHhSIIQv////8PgyIJIAIpAxAgA3wgAUHwiwFqKQMAIgqFIgtCIIgiDH4iDUL/////D4MgCEIgiCIIIAtC/////w+DIgt+fCAJIAt+IglCIIh8IgtCIIYgCUL/////D4OEIA1CIIggCCAMfnwgC0IgiHyFIAZ8QQApA4iMASIIQQApA4CMASIJfIUiCyACQQhqKQMAIAN9IAiFIghC/////w+DIgwgAikDACADfCAJhSIJQiCIIg1+IgZC/////w+DIAhCIIgiCCAJQv////8PgyIJfnwgDCAJfiIJQiCIfCIMQiCGIAlC/////w+DhCAGQiCIIAggDX58IAxCIIh8hSAFfCAHIAp8hSIFfCIHQiWIIAeFQvnz3fGZ8pmrFn4iB0IgiCAHhTcDACAAQgAgBUKHla+vmLbem55/fiAEIAN9Qs/W077Sx6vZQn58IAtC49zKlfzO8vWFf358IgNCJYggA4VC+fPd8ZnymasWfiIDQiCIIAOFfTcDCAuhDwMBfxR+An9BACEEIAJB+ABqKQMAIAN9QQApA/iMASIFhSIGQv////8PgyIHIAIpA3AgA3xBACkD8IwBIgiFIglCIIgiCn4iC0L/////D4MgBkIgiCIGIAlC/////w+DIgl+fCAHIAl+IgdCIIh8IglCIIYgB0L/////D4OEIAtCIIggBiAKfnwgCUIgiHyFIAJB2ABqKQMAIAN9QQApA9iMASIHhSIGQv////8PgyIJIAIpA1AgA3xBACkD0IwBIgqFIgtCIIgiDH4iDUL/////D4MgBkIgiCIGIAtC/////w+DIgt+fCAJIAt+IglCIIh8IgtCIIYgCUL/////D4OEIA1CIIggBiAMfnwgC0IgiHyFIAJBOGopAwAgA31BACkDuIwBIgmFIgZC/////w+DIgsgAikDMCADfEEAKQOwjAEiDIUiDUIgiCIOfiIPQv////8PgyAGQiCIIgYgDUL/////D4MiDX58IAsgDX4iC0IgiHwiDUIghiALQv////8Pg4QgD0IgiCAGIA5+fCANQiCIfIUgAkEYaikDACADfUEAKQOYjAEiC4UiBkL/////D4MiDSACKQMQIAN8QQApA5CMASIOhSIPQiCIIhB+IhFC/////w+DIAZCIIgiBiAPQv////8PgyIPfnwgDSAPfiINQiCIfCIPQiCGIA1C/////w+DhCARQiCIIAYgEH58IA9CIIh8hUEAKQOIjAEiDUEAKQOAjAEiD3yFfEEAKQOojAEiEEEAKQOgjAEiEXyFfEEAKQPIjAEiEkEAKQPAjAEiE3yFfEEAKQPojAEiFEEAKQPgjAEiFXyFIgZCJYggBoVC+fPd8ZnymasWfiIGQiCIIAaFIQYgAkHoAGopAwAgA30gFIUiFEL/////D4MiFiACKQNgIAN8IBWFIhVCIIgiF34iGEL/////D4MgFEIgiCIUIBVC/////w+DIhV+fCAWIBV+IhVCIIh8IhZCIIYgFUL/////D4OEIBhCIIggFCAXfnwgFkIgiHyFIAJByABqKQMAIAN9IBKFIhJC/////w+DIhQgAikDQCADfCAThSITQiCIIhV+IhZC/////w+DIBJCIIgiEiATQv////8PgyITfnwgFCATfiITQiCIfCIUQiCGIBNC/////w+DhCAWQiCIIBIgFX58IBRCIIh8hSACQShqKQMAIAN9IBCFIhBC/////w+DIhIgAikDICADfCARhSIRQiCIIhN+IhRC/////w+DIBBCIIgiECARQv////8PgyIRfnwgEiARfiIRQiCIfCISQiCGIBFC/////w+DhCAUQiCIIBAgE358IBJCIIh8hSACQQhqKQMAIAN9IA2FIg1C/////w+DIhAgAikDACADfCAPhSIPQiCIIhF+IhJC/////w+DIA1CIIgiDSAPQv////8PgyIPfnwgECAPfiIPQiCIfCIQQiCGIA9C/////w+DhCASQiCIIA0gEX58IBBCIIh8hSABrSIPQoeVr6+Ytt6bnn9+fCALIA58hXwgCSAMfIV8IAcgCnyFfCAFIAh8hSIFQiWIIAWFQvnz3fGZ8pmrFn4iBUIgiCAFhSEFAkAgAUGgAUgNACABQQV2QXxqIRkDQCACIARqIhpBG2opAwAgA30gBEGYjQFqKQMAIgeFIghC/////w+DIgkgGkETaikDACADfCAEQZCNAWopAwAiCoUiC0IgiCIMfiINQv////8PgyAIQiCIIgggC0L/////D4MiC358IAkgC34iCUIgiHwiC0IghiAJQv////8Pg4QgDUIgiCAIIAx+fCALQiCIfIUgBnwgBEGIjQFqKQMAIgggBEGAjQFqKQMAIgl8hSEGIBpBC2opAwAgA30gCIUiCEL/////D4MiCyAaQQNqKQMAIAN8IAmFIglCIIgiDH4iDUL/////D4MgCEIgiCIIIAlC/////w+DIgl+fCALIAl+IglCIIh8IgtCIIYgCUL/////D4OEIA1CIIggCCAMfnwgC0IgiHyFIAV8IAcgCnyFIQUgBEEgaiEEIBlBf2oiGQ0ACwsgACACQf8AaikDACADfCABQeiLAWopAwAiB4UiCEL/////D4MiCSACKQN3IAN9IAFB4IsBaikDACIKhSILQiCIIgx+Ig1C/////w+DIAhCIIgiCCALQv////8PgyILfnwgCSALfiIJQiCIfCILQiCGIAlC/////w+DhCANQiCIIAggDH58IAtCIIh8hSAGfCABQfiLAWopAwAiBiABQfCLAWopAwAiCHyFIgkgAkHvAGopAwAgA3wgBoUiBkL/////D4MiCyACKQNnIAN9IAiFIghCIIgiDH4iDUL/////D4MgBkIgiCIGIAhC/////w+DIgh+fCALIAh+IghCIIh8IgtCIIYgCEL/////D4OEIA1CIIggBiAMfnwgC0IgiHyFIAV8IAcgCnyFIgZ8IgVCJYggBYVC+fPd8ZnymasWfiIFQiCIIAWFNwMAIABCACAGQoeVr6+Ytt6bnn9+IA8gA31Cz9bTvtLHq9lCfnwgCULj3MqV/M7y9YV/fnwiA0IliCADhUL5893xmfKZqxZ+IgNCIIggA4V9NwMIC98FAgF+AX8CQAJAQQApA4AKIgBQRQ0AQYAIIQFCACEADAELAkBBACkDoI4BIABSDQBBACEBDAELQQAhAUEAQq+v79e895Kg/gAgAH03A/iLAUEAIABCxZbr+djShYIofDcD8IsBQQBCj/Hjja2P9JhOIAB9NwPoiwFBACAAQqus+MXV79HQfHw3A+CLAUEAQtOt1LKShbW0nn8gAH03A9iLAUEAIABCl5r0jvWWvO3JAHw3A9CLAUEAQsWDgv2v/8SxayAAfTcDyIsBQQAgAELqi7OdyOb09UN8NwPAiwFBAELIv/rLnJveueQAIAB9NwO4iwFBACAAQoqjgd/Ume2sMXw3A7CLAUEAQvm57738+MKnHSAAfTcDqIsBQQAgAEKo9dv7s5ynmj98NwOgiwFBAEK4sry3lNW31lggAH03A5iLAUEAIABC8cihuqm0w/zOAHw3A5CLAUEAQoihl9u445SXo38gAH03A4iL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AkHAAGogDGohC0GAjAEhAAJAAkACQCAHQQhJDQACQCAHQThqQQN2QQFqQQdxIg0NAAwCCyANQQN0IQ5BgIwBIQADQCALIAApAwA3AwAgC0EIaiELIABBCGohACANQX9qIg0NAAsgByAOayEHCyAHRQ0BAkACQCAHQQdxIg4NACAHIQ0MAQsgB0F4cSENA0AgCyAALQAAOgAAIAtBAWohCyAAQQFqIQAgDkF/aiIODQALCyAHQQhJDQELA0AgCyAAKQAANwAAIAtBCGohCyAAQQhqIQAgDUF4aiINDQALCyACIAIpAwggAikDQCIIfCADQQAoApyOAWoiACkDASACKQNIIgmFIgpCIIggCkL/////D4N+fDcDCCACIAIpAxggAikDUCIKfCAAKQMRIAIpA1giEIUiEUIgiCARQv////8Pg358NwMYIAIgECAKIAApAwmFIgpCIIggCkL/////D4N+IAIpAxB8fDcDECACIAkgCCAAQXlqKQMAhSIIQiCIIAhC/////w+DfiACKQMAfHw3AwAgACkDGSEIIAIpAyAhCSACIAIpAyggAikDYCIKfCAAKQMhIAIpA2giEIUiEUIgiCARQv////8Pg358NwMoIAIgECAJIAggCoUiCEIgiCAIQv////8Pg358fDcDICACIAYgAikDcCIIfCAAKQMxIAIpA3giBoUiCUIgiCAJQv////8Pg358NwM4IAIgBiAIIAApAymFIghCIIggCEL/////D4N+IAV8fDcDMAsgAiACIANBC2ogBEKHla+vmLbem55/fhADNwNAIAIgAiADQQAoApyOAWpBdWogBELP1tO+0ser2UJ+Qn+FEAM3A0gMAQsgBKchAAJAQQApA6COASIEUA0AAkAgAEEQSw0AIAJBwABqIABBgAggBBAEDAILAkAgAEGAAUsNACACQcAAaiAAQYAIIAQQBQwCCyACQcAAaiAAQYAIIAQQBgwBCwJAIABBEEsNACACQcAAaiAAIANCABAEDAELAkAgAEGAAUsNACACQcAAaiAAIANCABAFDAELIAJBwABqIAAgA0IAEAYLQQAgAikDcDcDuApBACACKQNgNwOoCkEAIAIpA1A3A5gKQQAgAkH4AGopAwA3A8AKQQAgAkHoAGopAwA3A7AKQQAgAkHYAGopAwA3A6AKQQAgAikDSCIEQjiGIARCgP4Dg0IohoQgBEKAgPwHg0IYhiAEQoCAgPgPg0IIhoSEIARCCIhCgICA+A+DIARCGIhCgID8B4OEIARCKIhCgP4DgyAEQjiIhISEIgQ3A4AKQQAgBDcDkApBACACKQNAIgRCOIYgBEKA/gODQiiGhCAEQoCA/AeDQhiGIARCgICA+A+DQgiGhIQgBEIIiEKAgID4D4MgBEIYiEKAgPwHg4QgBEIoiEKA/gODIARCOIiEhIQ3A4gKIAEkAAsGAEGAigELAgALC8wBAQBBgAgLxAG4/mw5I6RLvnwBgSz3Ia0c3tRt6YOQl9tyQKSkt7NnH8t55k7MwOV4glrQfcz/ciG4CEZ090MkjuA1kOaBOiZMPChSu5HDAMuI0GWLG1Muo3FkSJeiDflOOBnvRqnerNio+nY/45w0P/ncu8fHC08dilHgS820WTHIn37J2XhzZOrFrIM00+vDxYGg//oTY+sXDd1Rt/DaSdMWVSYp1GieKxa+WH1HofyP+LjRetAxzkXLOo+VFgQor9f7yrtLQH5AAgAA"; +var hash$5 = "b9ab74e2"; +var wasmJson$5 = { + name: name$5, + data: data$5, + hash: hash$5 +}; + +const mutex$3 = new Mutex(); +let wasmCache$3 = null; +const seedBuffer = new Uint8Array(8); +function validateSeed(seed) { + if (!Number.isInteger(seed) || seed < 0 || seed > 0xffffffff) { + return new Error("Seed must be given as two valid 32-bit long unsigned integers (lo + high)."); + } + return null; +} +function writeSeed(arr, low, high) { + // write in little-endian format + const buffer = new DataView(arr); + buffer.setUint32(0, low, true); + buffer.setUint32(4, high, true); +} +/** + * Calculates xxHash128 hash + * @param data Input data (string, Buffer or TypedArray) + * @param seedLow Lower 32 bits of the number used to + * initialize the internal state of the algorithm (defaults to 0) + * @param seedHigh Higher 32 bits of the number used to + * initialize the internal state of the algorithm (defaults to 0) + * @returns Computed hash as a hexadecimal string + */ +function xxhash128(data, seedLow = 0, seedHigh = 0) { + if (validateSeed(seedLow)) { + return Promise.reject(validateSeed(seedLow)); + } + if (validateSeed(seedHigh)) { + return Promise.reject(validateSeed(seedHigh)); + } + if (wasmCache$3 === null) { + return lockedCreate(mutex$3, wasmJson$5, 16).then((wasm) => { + wasmCache$3 = wasm; + writeSeed(seedBuffer.buffer, seedLow, seedHigh); + wasmCache$3.writeMemory(seedBuffer); + return wasmCache$3.calculate(data); + }); + } + try { + writeSeed(seedBuffer.buffer, seedLow, seedHigh); + wasmCache$3.writeMemory(seedBuffer); + const hash = wasmCache$3.calculate(data); + return Promise.resolve(hash); + } + catch (err) { + return Promise.reject(err); + } +} +/** + * Creates a new xxHash128 hash instance + * @param seedLow Lower 32 bits of the number used to + * initialize the internal state of the algorithm (defaults to 0) + * @param seedHigh Higher 32 bits of the number used to + * initialize the internal state of the algorithm (defaults to 0) + */ +function createXXHash128(seedLow = 0, seedHigh = 0) { + if (validateSeed(seedLow)) { + return Promise.reject(validateSeed(seedLow)); + } + if (validateSeed(seedHigh)) { + return Promise.reject(validateSeed(seedHigh)); + } + return WASMInterface(wasmJson$5, 16).then((wasm) => { + const instanceBuffer = new Uint8Array(8); + writeSeed(instanceBuffer.buffer, seedLow, seedHigh); + wasm.writeMemory(instanceBuffer); + wasm.init(); + const obj = { + init: () => { + wasm.writeMemory(instanceBuffer); + wasm.init(); + return obj; + }, + update: (data) => { + wasm.update(data); + return obj; + }, + // biome-ignore lint/suspicious/noExplicitAny: Conflict with IHasher type + digest: (outputType) => wasm.digest(outputType), + save: () => wasm.save(), + load: (data) => { + wasm.load(data); + return obj; + }, + blockSize: 512, + digestSize: 16, + }; + return obj; + }); +} + +var name$4 = "ripemd160"; +var data$4 = "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"; +var hash$4 = "6abbce74"; +var wasmJson$4 = { + name: name$4, + data: data$4, + hash: hash$4 +}; + +const mutex$2 = new Mutex(); +let wasmCache$2 = null; +/** + * Calculates RIPEMD-160 hash + * @param data Input data (string, Buffer or TypedArray) + * @returns Computed hash as a hexadecimal string + */ +function ripemd160(data) { + if (wasmCache$2 === null) { + return lockedCreate(mutex$2, wasmJson$4, 20).then((wasm) => { + wasmCache$2 = wasm; + return wasmCache$2.calculate(data); + }); + } + try { + const hash = wasmCache$2.calculate(data); + return Promise.resolve(hash); + } + catch (err) { + return Promise.reject(err); + } +} +/** + * Creates a new RIPEMD-160 hash instance + */ +function createRIPEMD160() { + return WASMInterface(wasmJson$4, 20).then((wasm) => { + wasm.init(); + const obj = { + init: () => { + wasm.init(); + return obj; + }, + update: (data) => { + wasm.update(data); + return obj; + }, + // biome-ignore lint/suspicious/noExplicitAny: Conflict with IHasher type + digest: (outputType) => wasm.digest(outputType), + save: () => wasm.save(), + load: (data) => { + wasm.load(data); + return obj; + }, + blockSize: 64, + digestSize: 20, + }; + return obj; + }); +} + +function calculateKeyBuffer(hasher, key) { + const { blockSize } = hasher; + const buf = getUInt8Buffer(key); + if (buf.length > blockSize) { + hasher.update(buf); + const uintArr = hasher.digest("binary"); + hasher.init(); + return uintArr; + } + return new Uint8Array(buf.buffer, buf.byteOffset, buf.length); +} +function calculateHmac(hasher, key) { + hasher.init(); + const { blockSize } = hasher; + const keyBuf = calculateKeyBuffer(hasher, key); + const keyBuffer = new Uint8Array(blockSize); + keyBuffer.set(keyBuf); + const opad = new Uint8Array(blockSize); + for (let i = 0; i < blockSize; i++) { + const v = keyBuffer[i]; + opad[i] = v ^ 0x5c; + keyBuffer[i] = v ^ 0x36; + } + hasher.update(keyBuffer); + const obj = { + init: () => { + hasher.init(); + hasher.update(keyBuffer); + return obj; + }, + update: (data) => { + hasher.update(data); + return obj; + }, + digest: ((outputType) => { + const uintArr = hasher.digest("binary"); + hasher.init(); + hasher.update(opad); + hasher.update(uintArr); + return hasher.digest(outputType); + // biome-ignore lint/suspicious/noExplicitAny: Conflict with IHasher type + }), + save: () => { + throw new Error("save() not supported"); + }, + load: () => { + throw new Error("load() not supported"); + }, + blockSize: hasher.blockSize, + digestSize: hasher.digestSize, + }; + return obj; +} +/** + * Calculates HMAC hash + * @param hash Hash algorithm to use. It has to be the return value of a function like createSHA1() + * @param key Key (string, Buffer or TypedArray) + */ +function createHMAC(hash, key) { + if (!hash || !hash.then) { + throw new Error('Invalid hash function is provided! Usage: createHMAC(createMD5(), "key").'); + } + return hash.then((hasher) => calculateHmac(hasher, key)); +} + +function calculatePBKDF2(digest, salt, iterations, hashLength, outputType) { + return __awaiter(this, void 0, void 0, function* () { + const DK = new Uint8Array(hashLength); + const block1 = new Uint8Array(salt.length + 4); + const block1View = new DataView(block1.buffer); + const saltBuffer = getUInt8Buffer(salt); + const saltUIntBuffer = new Uint8Array(saltBuffer.buffer, saltBuffer.byteOffset, saltBuffer.length); + block1.set(saltUIntBuffer); + let destPos = 0; + const hLen = digest.digestSize; + const l = Math.ceil(hashLength / hLen); + let T = null; + let U = null; + for (let i = 1; i <= l; i++) { + block1View.setUint32(salt.length, i); + digest.init(); + digest.update(block1); + T = digest.digest("binary"); + U = T.slice(); + for (let j = 1; j < iterations; j++) { + digest.init(); + digest.update(U); + U = digest.digest("binary"); + for (let k = 0; k < hLen; k++) { + T[k] ^= U[k]; + } + } + DK.set(T.subarray(0, hashLength - destPos), destPos); + destPos += hLen; + } + if (outputType === "binary") { + return DK; + } + const digestChars = new Uint8Array(hashLength * 2); + return getDigestHex(digestChars, DK, hashLength); + }); +} +const validateOptions$2 = (options) => { + if (!options || typeof options !== "object") { + throw new Error("Invalid options parameter. It requires an object."); + } + if (!options.hashFunction || !options.hashFunction.then) { + throw new Error('Invalid hash function is provided! Usage: pbkdf2("password", "salt", 1000, 32, createSHA1()).'); + } + if (!Number.isInteger(options.iterations) || options.iterations < 1) { + throw new Error("Iterations should be a positive number"); + } + if (!Number.isInteger(options.hashLength) || options.hashLength < 1) { + throw new Error("Hash length should be a positive number"); + } + if (options.outputType === undefined) { + options.outputType = "hex"; + } + if (!["hex", "binary"].includes(options.outputType)) { + throw new Error(`Insupported output type ${options.outputType}. Valid values: ['hex', 'binary']`); + } +}; +/** + * Generates a new PBKDF2 hash for the supplied password + */ +function pbkdf2(options) { + return __awaiter(this, void 0, void 0, function* () { + validateOptions$2(options); + const hmac = yield createHMAC(options.hashFunction, options.password); + return calculatePBKDF2(hmac, options.salt, options.iterations, options.hashLength, options.outputType); + }); +} + +var name$3 = "scrypt"; +var data$3 = "AGFzbQEAAAABGwVgAX8Bf2AAAX9gBH9/f38AYAF/AGADf39/AAMGBQABAgMEBQYBAQKAgAIGCAF/AUGQiAQLBzkEBm1lbW9yeQIAEkhhc2hfU2V0TWVtb3J5U2l6ZQAADkhhc2hfR2V0QnVmZmVyAAEGc2NyeXB0AAQK7iYFWAECf0EAIQECQCAAQQAoAogIIgJGDQACQCAAIAJrIgBBEHYgAEGAgHxxIABJaiIAQABBf0cNAEH/AcAPC0EAIQFBAEEAKQOICCAAQRB0rXw3A4gICyABwAtwAQJ/AkBBACgCgAgiAA0AQQA/AEEQdCIANgKACEEAKAKICCIBQYCAIEYNAAJAQYCAICABayIAQRB2IABBgIB8cSAASWoiAEAAQX9HDQBBAA8LQQBBACkDiAggAEEQdK18NwOICEEAKAKACCEACyAAC6QFAQN/IAIgA0EHdCAAakFAaiIEKQMANwMAIAIgBCkDCDcDCCACIAQpAxA3AxAgAiAEKQMYNwMYIAIgBCkDIDcDICACIAQpAyg3AyggAiAEKQMwNwMwIAIgBCkDODcDOAJAIANFDQAgA0EBdCEFIANBBnQhBkEAIQMDQCACIAIpAwAgACkDAIU3AwAgAiACKQMIIABBCGopAwCFNwMIIAIgAikDECAAQRBqKQMAhTcDECACIAIpAxggAEEYaikDAIU3AxggAiACKQMgIABBIGopAwCFNwMgIAIgAikDKCAAQShqKQMAhTcDKCACIAIpAzAgAEEwaikDAIU3AzAgAiACKQM4IABBOGopAwCFNwM4IAIQAyABIAIpAwA3AwAgAUEIaiACKQMINwMAIAFBEGogAikDEDcDACABQRhqIAIpAxg3AwAgAUEgaiACKQMgNwMAIAFBKGogAikDKDcDACABQTBqIAIpAzA3AwAgAUE4aiACKQM4NwMAIAIgAikDACAAQcAAaikDAIU3AwAgAiACKQMIIABByABqKQMAhTcDCCACIAIpAxAgAEHQAGopAwCFNwMQIAIgAikDGCAAQdgAaikDAIU3AxggAiACKQMgIABB4ABqKQMAhTcDICACIAIpAyggAEHoAGopAwCFNwMoIAIgAikDMCAAQfAAaikDAIU3AzAgAiACKQM4IABB+ABqKQMAhTcDOCACEAMgASAGaiIEIAIpAwA3AwAgBEEIaiACKQMINwMAIARBEGogAikDEDcDACAEQRhqIAIpAxg3AwAgBEEgaiACKQMgNwMAIARBKGogAikDKDcDACAEQTBqIAIpAzA3AwAgBEE4aiACKQM4NwMAIABBgAFqIQAgAUHAAGohASADQQJqIgMgBUkNAAsLC7oNCAF+AX8BfgF/AX4BfwF+En8gACAAKAIEIAApAygiAUIgiKciAiAAKQM4IgNCIIinIgRqQQd3IAApAwgiBUIgiKdzIgYgBGpBCXcgACkDGCIHQiCIp3MiCCAGakENdyACcyIJIAenIgogAaciC2pBB3cgA6dzIgIgC2pBCXcgBadzIgwgAmpBDXcgCnMiDSAMakESdyALcyIOIAApAwAiAUIgiKciDyAAKQMQIgNCIIinIhBqQQd3IAApAyAiBUIgiKdzIgtqQQd3cyIKIAkgCGpBEncgBHMiESACakEHdyAAKQMwIgenIgkgAaciEmpBB3cgA6dzIgQgEmpBCXcgBadzIhMgBGpBDXcgCXMiFHMiCSARakEJdyALIBBqQQl3IAdCIIincyIVcyIWIAlqQQ13IAJzIhcgFmpBEncgEXMiEWpBB3cgBiAUIBNqQRJ3IBJzIhJqQQd3IBUgC2pBDXcgD3MiFHMiAiASakEJdyAMcyIPIAJqQQ13IAZzIhhzIgYgEWpBCXcgCCANIBQgFWpBEncgEHMiECAEakEHd3MiDCAQakEJd3MiCHMiFSAGakENdyAKcyIUIAwgCiAOakEJdyATcyITIApqQQ13IAtzIhkgE2pBEncgDnMiCmpBB3cgF3MiCyAKakEJdyAPcyIOIAtqQQ13IAxzIhcgDmpBEncgCnMiDSACIAggDGpBDXcgBHMiDCAIakESdyAQcyIIakEHdyAZcyIKakEHd3MiBCAUIBVqQRJ3IBFzIhAgC2pBB3cgCSAYIA9qQRJ3IBJzIhFqQQd3IAxzIgwgEWpBCXcgE3MiEiAMakENdyAJcyIPcyIJIBBqQQl3IAogCGpBCXcgFnMiE3MiFiAJakENdyALcyIUIBZqQRJ3IBBzIhBqQQd3IAYgDyASakESdyARcyIRakEHdyATIApqQQ13IAJzIgtzIgIgEWpBCXcgDnMiDiACakENdyAGcyIYcyIGIBBqQQl3IBUgFyALIBNqQRJ3IAhzIgggDGpBB3dzIgsgCGpBCXdzIhNzIhUgBmpBDXcgBHMiFyALIAQgDWpBCXcgEnMiEiAEakENdyAKcyIZIBJqQRJ3IA1zIgRqQQd3IBRzIgogBGpBCXcgDnMiDyAKakENdyALcyIUIA9qQRJ3IARzIg0gAiATIAtqQQ13IAxzIgwgE2pBEncgCHMiCGpBB3cgGXMiC2pBB3dzIgQgFyAVakESdyAQcyIQIApqQQd3IAkgGCAOakESdyARcyIOakEHdyAMcyIMIA5qQQl3IBJzIhEgDGpBDXcgCXMiF3MiCSAQakEJdyALIAhqQQl3IBZzIhJzIhMgCWpBDXcgCnMiGCATakESdyAQcyIQakEHdyAGIBcgEWpBEncgDnMiCmpBB3cgEiALakENdyACcyIXcyICIApqQQl3IA9zIg4gAmpBDXcgBnMiFnMiBiAJIBYgDmpBEncgCnMiFmpBB3cgFSAUIBcgEmpBEncgCHMiCCAMakEHd3MiCiAIakEJd3MiEiAKakENdyAMcyIPcyIMIBZqQQl3IAQgDWpBCXcgEXMiEXMiFSAMakENdyAJcyIUIBVqQRJ3IBZzIglqQQd3IAIgDyASakESdyAIcyIIakEHdyARIARqQQ13IAtzIg9zIgsgCGpBCXcgE3MiEyALakENdyACcyIXcyIWajYCBCAAIAAoAgggFiAJakEJdyAKIA8gEWpBEncgDXMiEWpBB3cgGHMiAiARakEJdyAOcyIOcyIPajYCCCAAIAAoAgwgDyAWakENdyAGcyINajYCDCAAIAAoAhAgBiAQakEJdyAScyISIA4gAmpBDXcgCnMiGCAXIBNqQRJ3IAhzIgogDGpBB3dzIgggCmpBCXdzIhYgCGpBDXcgDHMiDGo2AhAgACAAKAIAIA0gD2pBEncgCXNqNgIAIAAgACgCFCAMIBZqQRJ3IApzajYCFCAAIAAoAhggCGo2AhggACAAKAIcIBZqNgIcIAAgACgCICASIAZqQQ13IARzIgkgGCAOakESdyARcyIGIAtqQQd3cyIKIAZqQQl3IBVzIgRqNgIgIAAgACgCJCAEIApqQQ13IAtzIgtqNgIkIAAgACgCKCALIARqQRJ3IAZzajYCKCAAIAAoAiwgCmo2AiwgACAAKAIwIAkgEmpBEncgEHMiBiACakEHdyAUcyILajYCMCAAIAAoAjQgCyAGakEJdyATcyIKajYCNCAAIAAoAjggCiALakENdyACcyICajYCOCAAIAAoAjwgAiAKakESdyAGc2o2AjwLvxIDFX8Bfg5/AkAgAkUNACAAQQd0IgNBQGoiBEEAKAKACCIFIAMgAmwiBmogAyABbGoiByADaiIIaiEJIAAgAkEHdCIKIAFBB3RqIgtsIQwgACALQYABamwhDSAAQQV0IgtBASALQQFLGyILQWBxIQ4gC0EBcSEPIAdBeGohECAHQXBqIREgB0FoaiESIAdBYGohEyAHQVhqIRQgB0FQaiEVIAdBSGohFiAHQUBqIRcgAa1Cf3whGCAEIAdqIRkgByAAQQh0IhpqIRsgACAKQYABamwhHCALQQRJIR1BACEeQQAhHwNAQQAoAoAIIiAgAyAfbGohIQJAIABFDQBBACEiAkAgHQ0AICAgHmohI0EAIQtBACEiA0AgByALaiIEICMgC2oiJCgCADYCACAEQQRqICRBBGooAgA2AgAgBEEIaiAkQQhqKAIANgIAIARBDGogJEEMaigCADYCACALQRBqIQsgDiAiQQRqIiJHDQALCyAPRQ0AIAcgIkECdCILaiAhIAtqKAIANgIACwJAIAFFDQBBACElIBwhIyAGISYDQCAFISQgACEiAkACQCAADQAgGyAXKQMANwMAIBsgFikDADcDCCAbIBUpAwA3AxAgGyAUKQMANwMYIBsgEykDADcDICAbIBIpAwA3AyggGyARKQMANwMwIBsgECkDADcDOAwBCwNAICQgJmoiCyAkIAxqIgQpAwA3AwAgC0EIaiAEQQhqKQMANwMAIAtBEGogBEEQaikDADcDACALQRhqIARBGGopAwA3AwAgC0EgaiAEQSBqKQMANwMAIAtBKGogBEEoaikDADcDACALQTBqIARBMGopAwA3AwAgC0E4aiAEQThqKQMANwMAIAtBwABqIARBwABqKQMANwMAIAtByABqIARByABqKQMANwMAIAtB0ABqIARB0ABqKQMANwMAIAtB2ABqIARB2ABqKQMANwMAIAtB4ABqIARB4ABqKQMANwMAIAtB6ABqIARB6ABqKQMANwMAIAtB8ABqIARB8ABqKQMANwMAIAtB+ABqIARB+ABqKQMANwMAICRBgAFqISQgIkF/aiIiDQALIAcgCCAbIAAQAiAFISQgACEiA0AgJCAjaiILICQgDWoiBCkDADcDACALQQhqIARBCGopAwA3AwAgC0EQaiAEQRBqKQMANwMAIAtBGGogBEEYaikDADcDACALQSBqIARBIGopAwA3AwAgC0EoaiAEQShqKQMANwMAIAtBMGogBEEwaikDADcDACALQThqIARBOGopAwA3AwAgC0HAAGogBEHAAGopAwA3AwAgC0HIAGogBEHIAGopAwA3AwAgC0HQAGogBEHQAGopAwA3AwAgC0HYAGogBEHYAGopAwA3AwAgC0HgAGogBEHgAGopAwA3AwAgC0HoAGogBEHoAGopAwA3AwAgC0HwAGogBEHwAGopAwA3AwAgC0H4AGogBEH4AGopAwA3AwAgJEGAAWohJCAiQX9qIiINAAsLIAggByAbIAAQAiAjIBpqISMgJiAaaiEmICVBAmoiJSABSQ0AC0EAISUDQAJAAkAgAA0AIBsgFykDADcDACAbIBYpAwA3AwggGyAVKQMANwMQIBsgFCkDADcDGCAbIBMpAwA3AyAgGyASKQMANwMoIBsgESkDADcDMCAbIBApAwA3AzgMAQsgACAKIBkpAgAgGIOnQQd0amwhJiAFISQgACEiA0AgJCAMaiILIAspAwAgJCAmaiIEKQMAhTcDACALQQhqIiMgIykDACAEQQhqKQMAhTcDACALQRBqIiMgIykDACAEQRBqKQMAhTcDACALQRhqIiMgIykDACAEQRhqKQMAhTcDACALQSBqIiMgIykDACAEQSBqKQMAhTcDACALQShqIiMgIykDACAEQShqKQMAhTcDACALQTBqIiMgIykDACAEQTBqKQMAhTcDACALQThqIiMgIykDACAEQThqKQMAhTcDACALQcAAaiIjICMpAwAgBEHAAGopAwCFNwMAIAtByABqIiMgIykDACAEQcgAaikDAIU3AwAgC0HQAGoiIyAjKQMAIARB0ABqKQMAhTcDACALQdgAaiIjICMpAwAgBEHYAGopAwCFNwMAIAtB4ABqIiMgIykDACAEQeAAaikDAIU3AwAgC0HoAGoiIyAjKQMAIARB6ABqKQMAhTcDACALQfAAaiIjICMpAwAgBEHwAGopAwCFNwMAIAtB+ABqIgsgCykDACAEQfgAaikDAIU3AwAgJEGAAWohJCAiQX9qIiINAAsgByAIIBsgABACIAAgCiAJKQIAIBiDp0EHdGpsISYgBSEkIAAhIgNAICQgDWoiCyALKQMAICQgJmoiBCkDAIU3AwAgC0EIaiIjICMpAwAgBEEIaikDAIU3AwAgC0EQaiIjICMpAwAgBEEQaikDAIU3AwAgC0EYaiIjICMpAwAgBEEYaikDAIU3AwAgC0EgaiIjICMpAwAgBEEgaikDAIU3AwAgC0EoaiIjICMpAwAgBEEoaikDAIU3AwAgC0EwaiIjICMpAwAgBEEwaikDAIU3AwAgC0E4aiIjICMpAwAgBEE4aikDAIU3AwAgC0HAAGoiIyAjKQMAIARBwABqKQMAhTcDACALQcgAaiIjICMpAwAgBEHIAGopAwCFNwMAIAtB0ABqIiMgIykDACAEQdAAaikDAIU3AwAgC0HYAGoiIyAjKQMAIARB2ABqKQMAhTcDACALQeAAaiIjICMpAwAgBEHgAGopAwCFNwMAIAtB6ABqIiMgIykDACAEQegAaikDAIU3AwAgC0HwAGoiIyAjKQMAIARB8ABqKQMAhTcDACALQfgAaiILIAspAwAgBEH4AGopAwCFNwMAICRBgAFqISQgIkF/aiIiDQALCyAIIAcgGyAAEAIgJUECaiIlIAFJDQALCwJAIABFDQBBACEiAkAgHQ0AICAgHmohI0EAIQtBACEiA0AgIyALaiIEIAcgC2oiJCgCADYCACAEQQRqICRBBGooAgA2AgAgBEEIaiAkQQhqKAIANgIAIARBDGogJEEMaigCADYCACALQRBqIQsgDiAiQQRqIiJHDQALCyAPRQ0AICEgIkECdCILaiAHIAtqKAIANgIACyAeIANqIR4gH0EBaiIfIAJHDQALCws="; +var hash$3 = "b32721f8"; +var wasmJson$3 = { + name: name$3, + data: data$3, + hash: hash$3 +}; + +function scryptInternal(options) { + return __awaiter(this, void 0, void 0, function* () { + const { costFactor, blockSize, parallelism, hashLength } = options; + const SHA256Hasher = createSHA256(); + const blockData = yield pbkdf2({ + password: options.password, + salt: options.salt, + iterations: 1, + hashLength: 128 * blockSize * parallelism, + hashFunction: SHA256Hasher, + outputType: "binary", + }); + const scryptInterface = yield WASMInterface(wasmJson$3, 0); + // last block is for storing the temporary vectors + const VSize = 128 * blockSize * costFactor; + const XYSize = 256 * blockSize; + scryptInterface.setMemorySize(blockData.length + VSize + XYSize); + scryptInterface.writeMemory(blockData, 0); + // mix blocks + scryptInterface.getExports().scrypt(blockSize, costFactor, parallelism); + const expensiveSalt = scryptInterface + .getMemory() + .subarray(0, 128 * blockSize * parallelism); + const outputData = yield pbkdf2({ + password: options.password, + salt: expensiveSalt, + iterations: 1, + hashLength, + hashFunction: SHA256Hasher, + outputType: "binary", + }); + if (options.outputType === "hex") { + const digestChars = new Uint8Array(hashLength * 2); + return getDigestHex(digestChars, outputData, hashLength); + } + // return binary format + return outputData; + }); +} +const isPowerOfTwo = (v) => v && !(v & (v - 1)); +const validateOptions$1 = (options) => { + if (!options || typeof options !== "object") { + throw new Error("Invalid options parameter. It requires an object."); + } + if (!Number.isInteger(options.blockSize) || options.blockSize < 1) { + throw new Error("Block size should be a positive number"); + } + if (!Number.isInteger(options.costFactor) || + options.costFactor < 2 || + !isPowerOfTwo(options.costFactor)) { + throw new Error("Cost factor should be a power of 2, greater than 1"); + } + if (!Number.isInteger(options.parallelism) || options.parallelism < 1) { + throw new Error("Parallelism should be a positive number"); + } + if (!Number.isInteger(options.hashLength) || options.hashLength < 1) { + throw new Error("Hash length should be a positive number."); + } + if (options.outputType === undefined) { + options.outputType = "hex"; + } + if (!["hex", "binary"].includes(options.outputType)) { + throw new Error(`Insupported output type ${options.outputType}. Valid values: ['hex', 'binary']`); + } +}; +/** + * Calculates hash using the scrypt password-based key derivation function + * @returns Computed hash as a hexadecimal string or as + * Uint8Array depending on the outputType option + */ +function scrypt(options) { + return __awaiter(this, void 0, void 0, function* () { + validateOptions$1(options); + return scryptInternal(options); + }); +} + +var name$2 = "bcrypt"; +var data$2 = "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"; +var hash$2 = "8bd8822d"; +var wasmJson$2 = { + name: name$2, + data: data$2, + hash: hash$2 +}; + +function bcryptInternal(options) { + return __awaiter(this, void 0, void 0, function* () { + const { costFactor, password, salt } = options; + const bcryptInterface = yield WASMInterface(wasmJson$2, 0); + bcryptInterface.writeMemory(getUInt8Buffer(salt), 0); + const passwordBuffer = getUInt8Buffer(password); + bcryptInterface.writeMemory(passwordBuffer, 16); + const shouldEncode = options.outputType === "encoded" ? 1 : 0; + bcryptInterface + .getExports() + .bcrypt(passwordBuffer.length, costFactor, shouldEncode); + const memory = bcryptInterface.getMemory(); + if (options.outputType === "encoded") { + return intArrayToString(memory, 60); + } + if (options.outputType === "hex") { + const digestChars = new Uint8Array(24 * 2); + return getDigestHex(digestChars, memory, 24); + } + // return binary format + // the data is copied to allow GC of the original memory buffer + return memory.slice(0, 24); + }); +} +const validateOptions = (options) => { + if (!options || typeof options !== "object") { + throw new Error("Invalid options parameter. It requires an object."); + } + if (!Number.isInteger(options.costFactor) || + options.costFactor < 4 || + options.costFactor > 31) { + throw new Error("Cost factor should be a number between 4 and 31"); + } + options.password = getUInt8Buffer(options.password); + if (options.password.length < 1) { + throw new Error("Password should be at least 1 byte long"); + } + if (options.password.length > 72) { + throw new Error("Password should be at most 72 bytes long"); + } + options.salt = getUInt8Buffer(options.salt); + if (options.salt.length !== 16) { + throw new Error("Salt should be 16 bytes long"); + } + if (options.outputType === undefined) { + options.outputType = "encoded"; + } + if (!["hex", "binary", "encoded"].includes(options.outputType)) { + throw new Error(`Insupported output type ${options.outputType}. Valid values: ['hex', 'binary', 'encoded']`); + } +}; +/** + * Calculates hash using the bcrypt password-hashing function + * @returns Computed hash + */ +function bcrypt(options) { + return __awaiter(this, void 0, void 0, function* () { + validateOptions(options); + return bcryptInternal(options); + }); +} +const validateHashCharacters = (hash) => { + if (!/^\$2[axyb]\$[0-3][0-9]\$[./A-Za-z0-9]{53}$/.test(hash)) { + return false; + } + if (hash[4] === "0" && Number(hash[5]) < 4) { + return false; + } + if (hash[4] === "3" && Number(hash[5]) > 1) { + return false; + } + return true; +}; +const validateVerifyOptions = (options) => { + if (!options || typeof options !== "object") { + throw new Error("Invalid options parameter. It requires an object."); + } + if (options.hash === undefined || typeof options.hash !== "string") { + throw new Error("Hash should be specified"); + } + if (options.hash.length !== 60) { + throw new Error("Hash should be 60 bytes long"); + } + if (!validateHashCharacters(options.hash)) { + throw new Error("Invalid hash"); + } + options.password = getUInt8Buffer(options.password); + if (options.password.length < 1) { + throw new Error("Password should be at least 1 byte long"); + } + if (options.password.length > 72) { + throw new Error("Password should be at most 72 bytes long"); + } +}; +/** + * Verifies password using bcrypt password-hashing function + * @returns True if the encoded hash matches the password + */ +function bcryptVerify(options) { + return __awaiter(this, void 0, void 0, function* () { + validateVerifyOptions(options); + const { hash, password } = options; + const bcryptInterface = yield WASMInterface(wasmJson$2, 0); + bcryptInterface.writeMemory(getUInt8Buffer(hash), 0); + const passwordBuffer = getUInt8Buffer(password); + bcryptInterface.writeMemory(passwordBuffer, 60); + return !!bcryptInterface.getExports().bcrypt_verify(passwordBuffer.length); + }); +} + +var name$1 = "whirlpool"; +var data$1 = "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"; +var hash$1 = "8d8f6035"; +var wasmJson$1 = { + name: name$1, + data: data$1, + hash: hash$1 +}; + +const mutex$1 = new Mutex(); +let wasmCache$1 = null; +/** + * Calculates Whirlpool hash + * @param data Input data (string, Buffer or TypedArray) + * @returns Computed hash as a hexadecimal string + */ +function whirlpool(data) { + if (wasmCache$1 === null) { + return lockedCreate(mutex$1, wasmJson$1, 64).then((wasm) => { + wasmCache$1 = wasm; + return wasmCache$1.calculate(data); + }); + } + try { + const hash = wasmCache$1.calculate(data); + return Promise.resolve(hash); + } + catch (err) { + return Promise.reject(err); + } +} +/** + * Creates a new Whirlpool hash instance + */ +function createWhirlpool() { + return WASMInterface(wasmJson$1, 64).then((wasm) => { + wasm.init(); + const obj = { + init: () => { + wasm.init(); + return obj; + }, + update: (data) => { + wasm.update(data); + return obj; + }, + // biome-ignore lint/suspicious/noExplicitAny: Conflict with IHasher type + digest: (outputType) => wasm.digest(outputType), + save: () => wasm.save(), + load: (data) => { + wasm.load(data); + return obj; + }, + blockSize: 64, + digestSize: 64, + }; + return obj; + }); +} + +var name = "sm3"; +var data = "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"; +var hash = "b6fb4b8e"; +var wasmJson = { + name: name, + data: data, + hash: hash +}; + +const mutex = new Mutex(); +let wasmCache = null; +/** + * Calculates SM3 hash + * @param data Input data (string, Buffer or TypedArray) + * @returns Computed hash as a hexadecimal string + */ +function sm3(data) { + if (wasmCache === null) { + return lockedCreate(mutex, wasmJson, 32).then((wasm) => { + wasmCache = wasm; + return wasmCache.calculate(data); + }); + } + try { + const hash = wasmCache.calculate(data); + return Promise.resolve(hash); + } + catch (err) { + return Promise.reject(err); + } +} +/** + * Creates a new SM3 hash instance + */ +function createSM3() { + return WASMInterface(wasmJson, 32).then((wasm) => { + wasm.init(); + const obj = { + init: () => { + wasm.init(); + return obj; + }, + update: (data) => { + wasm.update(data); + return obj; + }, + // biome-ignore lint/suspicious/noExplicitAny: Conflict with IHasher type + digest: (outputType) => wasm.digest(outputType), + save: () => wasm.save(), + load: (data) => { + wasm.load(data); + return obj; + }, + blockSize: 64, + digestSize: 32, + }; + return obj; + }); +} + +export { adler32, argon2Verify, argon2d, argon2i, argon2id, bcrypt, bcryptVerify, blake2b, blake2s, blake3, crc32, crc64, createAdler32, createBLAKE2b, createBLAKE2s, createBLAKE3, createCRC32, createCRC64, createHMAC, createKeccak, createMD4, createMD5, createRIPEMD160, createSHA1, createSHA224, createSHA256, createSHA3, createSHA384, createSHA512, createSM3, createWhirlpool, createXXHash128, createXXHash3, createXXHash32, createXXHash64, keccak, md4, md5, pbkdf2, ripemd160, scrypt, sha1, sha224, sha256, sha3, sha384, sha512, sm3, whirlpool, xxhash128, xxhash3, xxhash32, xxhash64 }; diff --git a/frontend/node_modules/hash-wasm/dist/index.esm.min.js b/frontend/node_modules/hash-wasm/dist/index.esm.min.js new file mode 100644 index 0000000..06a4951 --- /dev/null +++ b/frontend/node_modules/hash-wasm/dist/index.esm.min.js @@ -0,0 +1,7 @@ +/*! + * hash-wasm (https://www.npmjs.com/package/hash-wasm) + * (c) Dani Biro + * @license MIT + */ + +var A,I={name:"adler32",data:"AGFzbQEAAAABDANgAAF/YAAAYAF/AAMHBgABAgEAAgUEAQECAgYOAn8BQYCJBQt/AEGACAsHcAgGbWVtb3J5AgAOSGFzaF9HZXRCdWZmZXIAAAlIYXNoX0luaXQAAQtIYXNoX1VwZGF0ZQACCkhhc2hfRmluYWwAAw1IYXNoX0dldFN0YXRlAAQOSGFzaF9DYWxjdWxhdGUABQpTVEFURV9TSVpFAwEK6wkGBQBBgAkLCgBBAEEBNgKECAvjCAEHf0EAKAKECCIBQf//A3EhAiABQRB2IQMCQAJAIABBAUcNACACQQAtAIAJaiIBQY+AfGogASABQfD/A0sbIgEgA2oiBEEQdCIFQYCAPGogBSAEQfD/A0sbIAFyIQEMAQsCQAJAAkACQAJAIABBEEkNAEGACSEGIABBsCtJDQFBgAkhBgNAQQAhBQNAIAYgBWoiASgCACIEQf8BcSACaiICIANqIAIgBEEIdkH/AXFqIgJqIAIgBEEQdkH/AXFqIgJqIAIgBEEYdmoiAmogAiABQQRqKAIAIgRB/wFxaiICaiACIARBCHZB/wFxaiICaiACIARBEHZB/wFxaiICaiACIARBGHZqIgJqIAIgAUEIaigCACIEQf8BcWoiAmogAiAEQQh2Qf8BcWoiAmogAiAEQRB2Qf8BcWoiAmogAiAEQRh2aiIEaiAEIAFBDGooAgAiAUH/AXFqIgRqIAQgAUEIdkH/AXFqIgRqIAQgAUEQdkH/AXFqIgRqIAQgAUEYdmoiAmohAyAFQRBqIgVBsCtHDQALIANB8f8DcCEDIAJB8f8DcCECIAZBsCtqIQYgAEHQVGoiAEGvK0sNAAsgAEUNBCAAQQ9LDQEMAgsCQCAARQ0AAkACQCAAQQNxIgUNAEGACSEBIAAhBAwBCyAAQXxxIQRBACEBA0AgAiABQYAJai0AAGoiAiADaiEDIAUgAUEBaiIBRw0ACyAFQYAJaiEBCyAAQQRJDQADQCACIAEtAABqIgUgAS0AAWoiBiABLQACaiIAIAFBA2otAABqIgIgACAGIAUgA2pqamohAyABQQRqIQEgBEF8aiIEDQALCyACQY+AfGogAiACQfD/A0sbIANB8f8DcEEQdHIhAQwECwNAIAYoAgAiAUH/AXEgAmoiBCADaiAEIAFBCHZB/wFxaiIEaiAEIAFBEHZB/wFxaiIEaiAEIAFBGHZqIgRqIAQgBkEEaigCACIBQf8BcWoiBGogBCABQQh2Qf8BcWoiBGogBCABQRB2Qf8BcWoiBGogBCABQRh2aiIEaiAEIAZBCGooAgAiAUH/AXFqIgRqIAQgAUEIdkH/AXFqIgRqIAQgAUEQdkH/AXFqIgRqIAQgAUEYdmoiBGogBCAGQQxqKAIAIgFB/wFxaiIEaiAEIAFBCHZB/wFxaiIEaiAEIAFBEHZB/wFxaiIEaiAEIAFBGHZqIgJqIQMgBkEQaiEGIABBcGoiAEEPSw0ACyAARQ0BCyAAQX9qIQcCQCAAQQNxIgVFDQAgAEF8cSEAIAUhBCAGIQEDQCACIAEtAABqIgIgA2ohAyABQQFqIQEgBEF/aiIEDQALIAYgBWohBgsgB0EDSQ0AA0AgAiAGLQAAaiIBIAYtAAFqIgQgBi0AAmoiBSAGQQNqLQAAaiICIAUgBCABIANqampqIQMgBkEEaiEGIABBfGoiAA0ACwsgA0Hx/wNwIQMgAkHx/wNwIQILIAIgA0EQdHIhAQtBACABNgKECAsxAQF/QQBBACgChAgiAEEYdCAAQYD+A3FBCHRyIABBCHZBgP4DcSAAQRh2cnI2AoAJCwUAQYQICzsAQQBBATYChAggABACQQBBACgChAgiAEEYdCAAQYD+A3FBCHRyIABBCHZBgP4DcSAAQRh2cnI2AoAJCwsVAgBBgAgLBAQAAAAAQYQICwQBAAAA",hash:"02ddbd17"};function B(A,I,B,g){return new(B||(B=Promise))((function(Q,C){function i(A){try{o(g.next(A))}catch(A){C(A)}}function E(A){try{o(g.throw(A))}catch(A){C(A)}}function o(A){var I;A.done?Q(A.value):(I=A.value,I instanceof B?I:new B((function(A){A(I)}))).then(i,E)}o((g=g.apply(A,I||[])).next())}))}"function"==typeof SuppressedError&&SuppressedError;class g{constructor(){this.mutex=Promise.resolve()}lock(){let A=()=>{};return this.mutex=this.mutex.then((()=>new Promise(A))),new Promise((I=>{A=I}))}dispatch(A){return B(this,void 0,void 0,(function*(){const I=yield this.lock();try{return yield Promise.resolve(A())}finally{I()}}))}}const Q="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:global,C=null!==(A=Q.Buffer)&&void 0!==A?A:null,i=Q.TextEncoder?new Q.TextEncoder:null;function E(A,I){return(15&A)+(A>>6|A>>3&8)<<4|(15&I)+(I>>6|I>>3&8)}function o(A,I){const B=I.length>>1;for(let g=0;g>>4;A[g++]=B>9?B+F:B+D,B=15&I[Q],A[g++]=B>9?B+F:B+D}return String.fromCharCode.apply(null,A)}const h=null!==C?A=>{if("string"==typeof A){const I=C.from(A,"utf8");return new Uint8Array(I.buffer,I.byteOffset,I.length)}if(C.isBuffer(A))return new Uint8Array(A.buffer,A.byteOffset,A.length);if(ArrayBuffer.isView(A))return new Uint8Array(A.buffer,A.byteOffset,A.byteLength);throw new Error("Invalid data type!")}:A=>{if("string"==typeof A)return i.encode(A);if(ArrayBuffer.isView(A))return new Uint8Array(A.buffer,A.byteOffset,A.byteLength);throw new Error("Invalid data type!")},a="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",w=new Uint8Array(256);for(let A=0;A>18&63)+a.charAt(B>>12&63)+a.charAt(B>>6&63)+a.charAt(63&B);Q.push(g)}if(1===g){const g=A[B-1],C=a.charAt(g>>2),i=a.charAt(g<<4&63);Q.push(`${C}${i}`),I&&Q.push("==")}else if(2===g){const g=(A[B-2]<<8)+A[B-1],C=a.charAt(g>>10),i=a.charAt(g>>4&63),E=a.charAt(g<<2&63);Q.push(`${C}${i}${E}`),I&&Q.push("=")}return Q.join("")}function G(A){let I=Math.floor(.75*A.length);const B=A.length;return"="===A[B-1]&&(I-=1,"="===A[B-2]&&(I-=1)),I}function n(A){const I=G(A),B=A.length,g=new Uint8Array(I);let Q=0;for(let I=0;I>4,Q+=1,g[Q]=(15&C)<<4|i>>2,Q+=1,g[Q]=(3&i)<<6|63&E,Q+=1}return g}const y=new g,H=new Map;function d(A,I){return B(this,void 0,void 0,(function*(){let g=null,Q=null,C=!1;if("undefined"==typeof WebAssembly)throw new Error("WebAssembly is not supported in this environment!");const i=()=>new DataView(g.exports.memory.buffer).getUint32(g.exports.STATE_SIZE,!0),F=y.dispatch((()=>B(this,void 0,void 0,(function*(){if(!H.has(A.name)){const I=n(A.data),B=WebAssembly.compile(I);H.set(A.name,B)}const I=yield H.get(A.name);g=yield WebAssembly.instantiate(I,{})})))),D=(A=null)=>{C=!0,g.exports.Hash_Init(A)},a=A=>{if(!C)throw new Error("update() called before init()");(A=>{let I=0;for(;I{if(!C)throw new Error("digest() called before init()");return C=!1,g.exports.Hash_Final(B),"binary"===A?Q.slice(0,I):c(w,Q,I)},G=A=>"string"==typeof A?A.length<4096:A.byteLength<16384;let d=G;switch(A.name){case"argon2":case"scrypt":d=()=>!0;break;case"blake2b":case"blake2s":d=(A,I)=>I<=512&&G(A);break;case"blake3":d=(A,I)=>0===I&&G(A);break;case"xxhash64":case"xxhash3":case"xxhash128":case"crc64":d=()=>!1}return yield(()=>B(this,void 0,void 0,(function*(){g||(yield F);const A=g.exports.Hash_GetBuffer(),I=g.exports.memory.buffer;Q=new Uint8Array(I,A,16384)})))(),{getMemory:()=>Q,writeMemory:(A,I=0)=>{Q.set(A,I)},getExports:()=>g.exports,setMemorySize:A=>{g.exports.Hash_SetMemorySize(A);const I=g.exports.Hash_GetBuffer(),B=g.exports.memory.buffer;Q=new Uint8Array(B,I,A)},init:D,update:a,digest:k,save:()=>{if(!C)throw new Error("save() can only be called after init() and before digest()");const I=g.exports.Hash_GetState(),B=i(),Q=g.exports.memory.buffer,E=new Uint8Array(Q,I,B),F=new Uint8Array(4+B);return o(F,A.hash),F.set(E,4),F},load:I=>{if(!(I instanceof Uint8Array))throw new Error("load() expects an Uint8Array generated by save()");const B=g.exports.Hash_GetState(),Q=i(),o=4+Q,F=g.exports.memory.buffer;if(I.length!==o)throw new Error(`Bad state length (expected ${o} bytes, got ${I.length})`);if(!function(A,I){if(A.length!==2*I.length)return!1;for(let B=0;B{if(!d(A,B))return D(B),a(A),k("hex",C);const i=h(A);return Q.set(i),g.exports.Hash_Calculate(i.length,B,C),c(w,Q,I)},hashLength:I}}))}function U(A,I,g){return B(this,void 0,void 0,(function*(){const B=yield A.lock(),Q=yield d(I,g);return B(),Q}))}const e=new g;let S=null;function N(A){if(null===S)return U(e,I,4).then((I=>(S=I,S.calculate(A))));try{const I=S.calculate(A);return Promise.resolve(I)}catch(A){return Promise.reject(A)}}function t(){return d(I,4).then((A=>{A.init();const I={init:()=>(A.init(),I),update:B=>(A.update(B),I),digest:I=>A.digest(I),save:()=>A.save(),load:B=>(A.load(B),I),blockSize:4,digestSize:4};return I}))}var J={name:"argon2",data:"AGFzbQEAAAABKQVgAX8Bf2AAAX9gEH9/f39/f39/f39/f39/f38AYAR/f39/AGACf38AAwYFAAECAwQFBgEBAoCAAgYIAX8BQZCoBAsHQQQGbWVtb3J5AgASSGFzaF9TZXRNZW1vcnlTaXplAAAOSGFzaF9HZXRCdWZmZXIAAQ5IYXNoX0NhbGN1bGF0ZQAECvEyBVgBAn9BACEBAkAgAEEAKAKICCICRg0AAkAgACACayIAQRB2IABBgIB8cSAASWoiAEAAQX9HDQBB/wHADwtBACEBQQBBACkDiAggAEEQdK18NwOICAsgAcALcAECfwJAQQAoAoAIIgANAEEAPwBBEHQiADYCgAhBACgCiAgiAUGAgCBGDQACQEGAgCAgAWsiAEEQdiAAQYCAfHEgAElqIgBAAEF/Rw0AQQAPC0EAQQApA4gIIABBEHStfDcDiAhBACgCgAghAAsgAAvcDgECfiAAIAQpAwAiECAAKQMAIhF8IBFCAYZC/v///x+DIBBC/////w+DfnwiEDcDACAMIBAgDCkDAIVCIIkiEDcDACAIIBAgCCkDACIRfCARQgGGQv7///8fgyAQQv////8Pg358IhA3AwAgBCAQIAQpAwCFQiiJIhA3AwAgACAQIAApAwAiEXwgEEL/////D4MgEUIBhkL+////H4N+fCIQNwMAIAwgECAMKQMAhUIwiSIQNwMAIAggECAIKQMAIhF8IBBC/////w+DIBFCAYZC/v///x+DfnwiEDcDACAEIBAgBCkDAIVCAYk3AwAgASAFKQMAIhAgASkDACIRfCARQgGGQv7///8fgyAQQv////8Pg358IhA3AwAgDSAQIA0pAwCFQiCJIhA3AwAgCSAQIAkpAwAiEXwgEUIBhkL+////H4MgEEL/////D4N+fCIQNwMAIAUgECAFKQMAhUIoiSIQNwMAIAEgECABKQMAIhF8IBBC/////w+DIBFCAYZC/v///x+DfnwiEDcDACANIBAgDSkDAIVCMIkiEDcDACAJIBAgCSkDACIRfCAQQv////8PgyARQgGGQv7///8fg358IhA3AwAgBSAQIAUpAwCFQgGJNwMAIAIgBikDACIQIAIpAwAiEXwgEUIBhkL+////H4MgEEL/////D4N+fCIQNwMAIA4gECAOKQMAhUIgiSIQNwMAIAogECAKKQMAIhF8IBFCAYZC/v///x+DIBBC/////w+DfnwiEDcDACAGIBAgBikDAIVCKIkiEDcDACACIBAgAikDACIRfCAQQv////8PgyARQgGGQv7///8fg358IhA3AwAgDiAQIA4pAwCFQjCJIhA3AwAgCiAQIAopAwAiEXwgEEL/////D4MgEUIBhkL+////H4N+fCIQNwMAIAYgECAGKQMAhUIBiTcDACADIAcpAwAiECADKQMAIhF8IBFCAYZC/v///x+DIBBC/////w+DfnwiEDcDACAPIBAgDykDAIVCIIkiEDcDACALIBAgCykDACIRfCARQgGGQv7///8fgyAQQv////8Pg358IhA3AwAgByAQIAcpAwCFQiiJIhA3AwAgAyAQIAMpAwAiEXwgEEL/////D4MgEUIBhkL+////H4N+fCIQNwMAIA8gECAPKQMAhUIwiSIQNwMAIAsgECALKQMAIhF8IBBC/////w+DIBFCAYZC/v///x+DfnwiEDcDACAHIBAgBykDAIVCAYk3AwAgACAFKQMAIhAgACkDACIRfCARQgGGQv7///8fgyAQQv////8Pg358IhA3AwAgDyAQIA8pAwCFQiCJIhA3AwAgCiAQIAopAwAiEXwgEUIBhkL+////H4MgEEL/////D4N+fCIQNwMAIAUgECAFKQMAhUIoiSIQNwMAIAAgECAAKQMAIhF8IBBC/////w+DIBFCAYZC/v///x+DfnwiEDcDACAPIBAgDykDAIVCMIkiEDcDACAKIBAgCikDACIRfCAQQv////8PgyARQgGGQv7///8fg358IhA3AwAgBSAQIAUpAwCFQgGJNwMAIAEgBikDACIQIAEpAwAiEXwgEUIBhkL+////H4MgEEL/////D4N+fCIQNwMAIAwgECAMKQMAhUIgiSIQNwMAIAsgECALKQMAIhF8IBFCAYZC/v///x+DIBBC/////w+DfnwiEDcDACAGIBAgBikDAIVCKIkiEDcDACABIBAgASkDACIRfCAQQv////8PgyARQgGGQv7///8fg358IhA3AwAgDCAQIAwpAwCFQjCJIhA3AwAgCyAQIAspAwAiEXwgEEL/////D4MgEUIBhkL+////H4N+fCIQNwMAIAYgECAGKQMAhUIBiTcDACACIAcpAwAiECACKQMAIhF8IBFCAYZC/v///x+DIBBC/////w+DfnwiEDcDACANIBAgDSkDAIVCIIkiEDcDACAIIBAgCCkDACIRfCARQgGGQv7///8fgyAQQv////8Pg358IhA3AwAgByAQIAcpAwCFQiiJIhA3AwAgAiAQIAIpAwAiEXwgEEL/////D4MgEUIBhkL+////H4N+fCIQNwMAIA0gECANKQMAhUIwiSIQNwMAIAggECAIKQMAIhF8IBBC/////w+DIBFCAYZC/v///x+DfnwiEDcDACAHIBAgBykDAIVCAYk3AwAgAyAEKQMAIhAgAykDACIRfCARQgGGQv7///8fgyAQQv////8Pg358IhA3AwAgDiAQIA4pAwCFQiCJIhA3AwAgCSAQIAkpAwAiEXwgEUIBhkL+////H4MgEEL/////D4N+fCIQNwMAIAQgECAEKQMAhUIoiSIQNwMAIAMgECADKQMAIhF8IBBC/////w+DIBFCAYZC/v///x+DfnwiEDcDACAOIBAgDikDAIVCMIkiEDcDACAJIBAgCSkDACIRfCAQQv////8PgyARQgGGQv7///8fg358IhA3AwAgBCAQIAQpAwCFQgGJNwMAC98aAQN/QQAhBEEAIAIpAwAgASkDAIU3A5AIQQAgAikDCCABKQMIhTcDmAhBACACKQMQIAEpAxCFNwOgCEEAIAIpAxggASkDGIU3A6gIQQAgAikDICABKQMghTcDsAhBACACKQMoIAEpAyiFNwO4CEEAIAIpAzAgASkDMIU3A8AIQQAgAikDOCABKQM4hTcDyAhBACACKQNAIAEpA0CFNwPQCEEAIAIpA0ggASkDSIU3A9gIQQAgAikDUCABKQNQhTcD4AhBACACKQNYIAEpA1iFNwPoCEEAIAIpA2AgASkDYIU3A/AIQQAgAikDaCABKQNohTcD+AhBACACKQNwIAEpA3CFNwOACUEAIAIpA3ggASkDeIU3A4gJQQAgAikDgAEgASkDgAGFNwOQCUEAIAIpA4gBIAEpA4gBhTcDmAlBACACKQOQASABKQOQAYU3A6AJQQAgAikDmAEgASkDmAGFNwOoCUEAIAIpA6ABIAEpA6ABhTcDsAlBACACKQOoASABKQOoAYU3A7gJQQAgAikDsAEgASkDsAGFNwPACUEAIAIpA7gBIAEpA7gBhTcDyAlBACACKQPAASABKQPAAYU3A9AJQQAgAikDyAEgASkD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",hash:"e4cdc523"},f={name:"blake2b",data:"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",hash:"c6f286e6"};const q=new g;let M=null;function K(A){return!Number.isInteger(A)||A<8||A>512||A%8!=0?new Error("Invalid variant! Valid values: 8, 16, ..., 512"):null}function p(A,I){return A|I<<16}function s(A,I=512,B=null){if(K(I))return Promise.reject(K(I));let g=null,Q=I;if(null!==B){if(g=h(B),g.length>64)return Promise.reject(new Error("Max key length is 64 bytes"));Q=p(I,g.length)}const C=I/8;if(null===M||M.hashLength!==C)return U(q,f,C).then((I=>(M=I,Q>512&&M.writeMemory(g),M.calculate(A,Q))));try{Q>512&&M.writeMemory(g);const I=M.calculate(A,Q);return Promise.resolve(I)}catch(A){return Promise.reject(A)}}function Y(A=512,I=null){if(K(A))return Promise.reject(K(A));let B=null,g=A;if(null!==I){if(B=h(I),B.length>64)return Promise.reject(new Error("Max key length is 64 bytes"));g=p(A,B.length)}const Q=A/8;return d(f,Q).then((A=>{g>512&&A.writeMemory(B),A.init(g);const I={init:g>512?()=>(A.writeMemory(B),A.init(g),I):()=>(A.init(g),I),update:B=>(A.update(B),I),digest:I=>A.digest(I),save:()=>A.save(),load:B=>(A.load(B),I),blockSize:128,digestSize:Q};return I}))}const r=new DataView(new ArrayBuffer(4));function R(A){return r.setInt32(0,A,!0),new Uint8Array(r.buffer)}function l(A,I,g){return B(this,void 0,void 0,(function*(){if(g<=64){const A=yield Y(8*g);return A.update(R(g)),A.update(I),A.digest("binary")}const B=Math.ceil(g/32)-2,Q=new Uint8Array(g);A.init(),A.update(R(g)),A.update(I);let C=A.digest("binary");Q.set(C.subarray(0,32),0);for(let I=1;I{var I;if(!A||"object"!=typeof A)throw new Error("Invalid options parameter. It requires an object.");if(!A.password)throw new Error("Password must be specified");if(A.password=h(A.password),A.password.length<1)throw new Error("Password must be specified");if(!A.salt)throw new Error("Salt must be specified");if(A.salt=h(A.salt),A.salt.length<8)throw new Error("Salt should be at least 8 bytes long");if(A.secret=h(null!==(I=A.secret)&&void 0!==I?I:""),!Number.isInteger(A.iterations)||A.iterations<1)throw new Error("Iterations should be a positive number");if(!Number.isInteger(A.parallelism)||A.parallelism<1)throw new Error("Parallelism should be a positive number");if(!Number.isInteger(A.hashLength)||A.hashLength<4)throw new Error("Hash length should be at least 4 bytes.");if(!Number.isInteger(A.memorySize))throw new Error("Memory size should be specified.");if(A.memorySize<8*A.parallelism)throw new Error("Memory size should be at least 8 * parallelism.");if(void 0===A.outputType&&(A.outputType="hex"),!["hex","binary","encoded"].includes(A.outputType))throw new Error(`Insupported output type ${A.outputType}. Valid values: ['hex', 'binary', 'encoded']`)};function V(A){return B(this,void 0,void 0,(function*(){return z(A),X(Object.assign(Object.assign({},A),{hashType:"i"}))}))}function Z(A){return B(this,void 0,void 0,(function*(){return z(A),X(Object.assign(Object.assign({},A),{hashType:"id"}))}))}function m(A){return B(this,void 0,void 0,(function*(){return z(A),X(Object.assign(Object.assign({},A),{hashType:"d"}))}))}function L(A){return B(this,void 0,void 0,(function*(){(A=>{if(!A||"object"!=typeof A)throw new Error("Invalid options parameter. It requires an object.");if(void 0===A.hash||"string"!=typeof A.hash)throw new Error("Hash should be specified")})(A);const I=((A,I,B)=>{const g=I.match(/^\$argon2(id|i|d)\$v=([0-9]+)\$((?:[mtp]=[0-9]+,){2}[mtp]=[0-9]+)\$([A-Za-z0-9+/]+)\$([A-Za-z0-9+/]+)$/);if(!g)throw new Error("Invalid hash");const[,Q,C,i,E,o]=g;if("19"!==C)throw new Error(`Unsupported version: ${C}`);const F={},D={m:"memorySize",p:"parallelism",t:"iterations"};for(const A of i.split(",")){const[I,B]=A.split("=");F[D[I]]=Number(B)}return Object.assign(Object.assign({},F),{password:A,secret:B,hashType:Q,salt:n(E),hashLength:G(o),outputType:"encoded"})})(A.password,A.hash,A.secret);z(I);const B=A.hash.lastIndexOf("$")+1;return(yield X(I)).substring(B)===A.hash.substring(B)}))}var W={name:"blake2s",data:"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",hash:"5c0ff166"};const u=new g;let x=null;function O(A){return!Number.isInteger(A)||A<8||A>256||A%8!=0?new Error("Invalid variant! Valid values: 8, 16, ..., 256"):null}function P(A,I){return A|I<<16}function b(A,I=256,B=null){if(O(I))return Promise.reject(O(I));let g=null,Q=I;if(null!==B){if(g=h(B),g.length>32)return Promise.reject(new Error("Max key length is 32 bytes"));Q=P(I,g.length)}const C=I/8;if(null===x||x.hashLength!==C)return U(u,W,C).then((I=>(x=I,Q>512&&x.writeMemory(g),x.calculate(A,Q))));try{Q>512&&x.writeMemory(g);const I=x.calculate(A,Q);return Promise.resolve(I)}catch(A){return Promise.reject(A)}}function v(A=256,I=null){if(O(A))return Promise.reject(O(A));let B=null,g=A;if(null!==I){if(B=h(I),B.length>32)return Promise.reject(new Error("Max key length is 32 bytes"));g=P(A,B.length)}const Q=A/8;return d(W,Q).then((A=>{g>512&&A.writeMemory(B),A.init(g);const I={init:g>512?()=>(A.writeMemory(B),A.init(g),I):()=>(A.init(g),I),update:B=>(A.update(B),I),digest:I=>A.digest(I),save:()=>A.save(),load:B=>(A.load(B),I),blockSize:64,digestSize:Q};return I}))}var j={name:"blake3",data:"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IQEgAkFAaiICQcAASw0ACwsCQEHAACAHQf8BcSIGayIFIAIgBSACSRsiCUUNACAJQQNxIQtBACEFAkAgCUEESQ0AIAAgBmohByAJQfwAcSEIQQAhBQNAIAcgBWoiAkEoaiABIAVqIgotAAA6AAAgAkEpaiAKQQFqLQAAOgAAIAJBKmogCkECai0AADoAACACQStqIApBA2otAAA6AAAgCCAFQQRqIgVHDQALCwJAIAtFDQAgASAFaiEBIAUgBmogAGpBKGohBQNAIAUgAS0AADoAACABQQFqIQEgBUEBaiEFIAtBf2oiCw0ACwsgAC0AaCEHCyAAIAcgCWo6AGggA0HAAGokAAveAwQFfwN+BX8GfiMAQdABayIBJAACQCAAe6ciAkEALQCQigEiA08NAEEALQCKigFBBHIhBCABQShqIQVBACkDmIkBIQBBACkDkIkBIQZBACkDiIkBIQdBACkDgIkBIQggAyEJA0AgASAANwMYIAEgBjcDECABIAc3AwggASAINwMAIAEgA0EFdCIDQdGJAWoiCikDADcDKCABIANB2YkBaiILKQMANwMwIAEgA0HhiQFqIgwpAwA3AzggASADQemJAWoiDSkDADcDQCABIANB8YkBaikDADcDSCABIANB+YkBaikDADcDUCABIANBgYoBaikDADcDWCADQYmKAWopAwAhDiABQcAAOgBoIAEgDjcDYCABQgA3AyAgASAEOgBpIAEgADcDiAEgASAGNwOAASABIAc3A3ggASAINwNwIAFBkAFqIAFB8ABqIAVBwABCACAEQf8BcRACIAEpA7ABIQ4gASkDkAEhDyABKQO4ASEQIAEpA5gBIREgASkDwAEhEiABKQOgASETIA0gASkDyAEgASkDqAGFNwMAIAwgEiAThTcDACALIBAgEYU3AwAgCiAOIA+FNwMAIAlBf2oiCUH/AXEiAyACSw0AC0EAIAk6AJCKAQsgAUHQAWokAAvHCQIKfwV+IwBB4AJrIgUkAAJAAkAgAUGACEsNACAFIAA2AvwBIAVB/AFqIAFBgAhGIgZBECACQQEgA0EBQQIgBBABIAZBCnQiByABTw0BIAVB4ABqIgZCADcDACAFQdgAaiIIQgA3AwAgBUHQAGoiCUIANwMAIAVByABqIgpCADcDACAFQcAAaiILQgA3AwAgBUE4aiIMQgA3AwAgBUEwaiINQgA3AwAgBSADOgBqIAVCADcDKCAFQQA7AWggBUEAKQOAiQE3AwAgBUEAKQOIiQE3AwggBUEAKQOQiQE3AxAgBUEAKQOYiQE3AxggBSABQYAIRiIOrSACfDcDICAFIAAgB2pBACABIA4bEAQgBUGIAWpBMGogDSkDADcDACAFQYgBakE4aiAMKQMANwMAIAUgBSkDACIPNwOIASAFIAUpAwgiEDcDkAEgBSAFKQMQIhE3A5gBIAUgBSkDGCISNwOgASAFIAUpAyg3A7ABIAUtAGohACAFLQBpIQcgBSkDICECIAUtAGghASAFQYgBakHAAGogCykDADcDACAFQYgBakHIAGogCikDADcDACAFQYgBakHQAGogCSkDADcDACAFQYgBakHYAGogCCkDADcDACAFQYgBakHgAGogBikDADcDACAFIAE6APABIAUgAjcDqAEgBSAAIAdFckECciIAOgDxASAFIBI3A5gCIAUgETcDkAIgBSAQNwOIAiAFIA83A4ACIAVBoAJqIAVBgAJqIAVBsAFqIAEgAiAAQf8BcRACIAUpA8ACIQIgBSkDoAIhDyAFKQPIAiEQIAUpA6gCIREgBSkD0AIhEiAFKQOwAiETIAQgDkEFdGoiASAFKQPYAiAFKQO4AoU3AxggASASIBOFNwMQIAEgECARhTcDCCABIAIgD4U3AwBBAkEBIA4bIQYMAQsgAEIBIAFBf2pBCnZBAXKteUI/hYYiD6dBCnQiDiACIAMgBRAGIQcgACAOaiABIA5rIA9C////AYMgAnwgAyAFQcAAQSAgDkGACEsbahAGIQECQCAHQQFHDQAgBCAFKQMANwMAIAQgBSkDCDcDCCAEIAUpAxA3AxAgBCAFKQMYNwMYIAQgBSkDIDcDICAEIAUpAyg3AyggBCAFKQMwNwMwIAQgBSkDODcDOEECIQYMAQtBACEGQQAhAAJAIAEgB2oiCUECSQ0AIAlBfmoiCkEBdkEBaiIGQQNxIQ5BACEHAkAgCkEGSQ0AIAZB/P///wdxIQhBACEHIAVBiAFqIQEgBSEAA0AgASAANgIAIAFBDGogAEHAAWo2AgAgAUEIaiAAQYABajYCACABQQRqIABBwABqNgIAIABBgAJqIQAgAUEQaiEBIAggB0EEaiIHRw0ACwsgCkF+cSEIAkAgDkUNACAFIAdBBnRqIQEgBUGIAWogB0ECdGohAANAIAAgATYCACABQcAAaiEBIABBBGohACAOQX9qIg4NAAsLIAhBAmohAAsgBUGIAWogBkEBQgBBACADQQRyQQBBACAEEAEgACAJTw0AIAQgBkEFdGoiASAFIAZBBnRqIgApAwA3AwAgASAAKQMINwMIIAEgACkDEDcDECABIAApAxg3AxggBkEBaiEGCyAFQeACaiQAIAYLrRAIAn8EfgF/AX4EfwR+BH8EfiMAQfABayIBJAACQCAARQ0AAkBBAC0AkIoBIgINACABQTBqQQApA9CJATcDACABQThqQQApA9iJATcDACABQQApA6CJASIDNwMAIAFBACkDqIkBIgQ3AwggAUEAKQOwiQEiBTcDECABQQApA7iJASIGNwMYIAFBACkDyIkBNwMoQQAtAIqKASECQQAtAImKASEHQQApA8CJASEIQQAtAIiKASEJIAFBwABqQQApA+CJATcDACABQcgAakEAKQPoiQE3AwAgAUHQAGpBACkD8IkBNwMAIAFB2ABqQQApA/iJATcDACABQeAAakEAKQOAigE3AwAgASAJOgBoIAEgCDcDICABIAIgB0VyIgJBAnI6AGkgAUEoaiEKQgAhCEGACSELIAJBCnJB/wFxIQwDQCABQbABaiABIAogCUH/AXEgCCAMEAIgASABKQPQASINIAEpA7ABhTcDcCABIAEpA9gBIg4gASkDuAGFNwN4IAEgASkD4AEiDyABKQPAAYU3A4ABIAEgASkD6AEiECAGhTcDqAEgASAPIAWFNwOgASABIA4gBIU3A5gBIAEgDSADhTcDkAEgASAQIAEpA8gBhTcDiAEgAEHAACAAQcAASRsiEUF/aiESAkACQCARQQdxIhMNACABQfAAaiECIAshByARIRQMAQsgEUH4AHEhFCABQfAAaiECIAshBwNAIAcgAi0AADoAACAHQQFqIQcgAkEBaiECIBNBf2oiEw0ACwsCQCASQQdJDQADQCAHIAIpAAA3AAAgB0EIaiEHIAJBCGohAiAUQXhqIhQNAAsLIAhCAXwhCCALIBFqIQsgACARayIADQAMAgsLAkACQAJAQQAtAImKASIHQQZ0QQBBAC0AiIoBIhFrRg0AIAEgEToAaCABQQApA4CKATcDYCABQQApA/iJATcDWCABQQApA/CJATcDUCABQQApA+iJATcDSCABQQApA+CJATcDQCABQQApA9iJATcDOCABQQApA9CJATcDMCABQQApA8iJATcDKCABQQApA8CJASIINwMgIAFBACkDuIkBIgM3AxggAUEAKQOwiQEiBDcDECABQQApA6iJASIFNwMIIAFBACkDoIkBIgY3AwAgAUEALQCKigEiEyAHRXJBAnIiCzoAaSATQQRyIRNBACkDmIkBIQ1BACkDkIkBIQ5BACkDiIkBIQ9BACkDgIkBIRAMAQtBwAAhESABQcAAOgBoQgAhCCABQgA3AyAgAUEAKQOYiQEiDTcDGCABQQApA5CJASIONwMQIAFBACkDiIkBIg83AwggAUEAKQOAiQEiEDcDACABQQAtAIqKAUEEciITOgBpIAEgAkF+aiICQQV0IgdByYoBaikDADcDYCABIAdBwYoBaikDADcDWCABIAdBuYoBaikDADcDUCABIAdBsYoBaikDADcDSCABIAdBqYoBaikDADcDQCABIAdBoYoBaikDADcDOCABIAdBmYoBaikDADcDMCABIAdBkYoBaikDADcDKCATIQsgECEGIA8hBSAOIQQgDSEDIAJFDQELIAJBf2oiB0EFdCIUQZGKAWopAwAhFSAUQZmKAWopAwAhFiAUQaGKAWopAwAhFyAUQamKAWopAwAhGCABIAM3A4gBIAEgBDcDgAEgASAFNwN4IAEgBjcDcCABQbABaiABQfAAaiABQShqIhQgESAIIAtB/wFxEAIgASATOgBpIAFBwAA6AGggASAYNwNAIAEgFzcDOCABIBY3AzAgASAVNwMoIAFCADcDICABIA03AxggASAONwMQIAEgDzcDCCABIBA3AwAgASABKQPoASABKQPIAYU3A2AgASABKQPgASABKQPAAYU3A1ggASABKQPYASABKQO4AYU3A1AgASABKQPQASABKQOwAYU3A0ggB0UNACACQQV0QemJAWohAiATQf8BcSERA0AgAkFoaikDACEIIAJBcGopAwAhAyACQXhqKQMAIQQgAikDACEFIAEgDTcDiAEgASAONwOAASABIA83A3ggASAQNwNwIAFBsAFqIAFB8ABqIBRBwABCACAREAIgASATOgBpIAFBwAA6AGggASAFNwNAIAEgBDcDOCABIAM3AzAgASAINwMoIAFCADcDICABIA03AxggASAONwMQIAEgDzcDCCABIBA3AwAgASABKQPoASABKQPIAYU3A2AgASABKQPgASABKQPAAYU3A1ggASABKQPYASABKQO4AYU3A1AgASABKQPQASABKQOwAYU3A0ggAkFgaiECIAdBf2oiBw0ACwsgAUEoaiEJQgAhCEGACSELIBNBCHJB/wFxIQoDQCABQbABaiABIAlBwAAgCCAKEAIgASABKQPQASIDIAEpA7ABhTcDcCABIAEpA9gBIgQgASkDuAGFNwN4IAEgASkD4AEiBSABKQPAAYU3A4ABIAEgDSABKQPoASIGhTcDqAEgASAOIAWFNwOgASABIA8gBIU3A5gBIAEgECADhTcDkAEgASAGIAEpA8gBhTcDiAEgAEHAACAAQcAASRsiEUF/aiESAkACQCARQQdxIhMNACABQfAAaiECIAshByARIRQMAQsgEUH4AHEhFCABQfAAaiECIAshBwNAIAcgAi0AADoAACAHQQFqIQcgAkEBaiECIBNBf2oiEw0ACwsCQCASQQdJDQADQCAHIAIpAAA3AAAgB0EIaiEHIAJBCGohAiAUQXhqIhQNAAsLIAhCAXwhCCALIBFqIQsgACARayIADQALCyABQfABaiQAC6MCAQR+AkACQCAAQSBGDQBCq7OP/JGjs/DbACEBQv+kuYjFkdqCm38hAkLy5rvjo6f9p6V/IQNC58yn0NbQ67O7fyEEQQAhAAwBC0EAKQOYCSEBQQApA5AJIQJBACkDiAkhA0EAKQOACSEEQRAhAAtBACAAOgCKigFBAEIANwOAigFBAEIANwP4iQFBAEIANwPwiQFBAEIANwPoiQFBAEIANwPgiQFBAEIANwPYiQFBAEIANwPQiQFBAEIANwPIiQFBAEIANwPAiQFBACABNwO4iQFBACACNwOwiQFBACADNwOoiQFBACAENwOgiQFBACABNwOYiQFBACACNwOQiQFBACADNwOIiQFBACAENwOAiQFBAEEAOgCQigFBAEEAOwGIigELBgAgABADCwYAIAAQBwsGAEGAiQELqwIBBH4CQAJAIAFBIEYNAEKrs4/8kaOz8NsAIQNC/6S5iMWR2oKbfyEEQvLmu+Ojp/2npX8hBULnzKfQ1tDrs7t/IQZBACEBDAELQQApA5gJIQNBACkDkAkhBEEAKQOICSEFQQApA4AJIQZBECEBC0EAIAE6AIqKAUEAQgA3A4CKAUEAQgA3A/iJAUEAQgA3A/CJAUEAQgA3A+iJAUEAQgA3A+CJAUEAQgA3A9iJAUEAQgA3A9CJAUEAQgA3A8iJAUEAQgA3A8CJAUEAIAM3A7iJAUEAIAQ3A7CJAUEAIAU3A6iJAUEAIAY3A6CJAUEAIAM3A5iJAUEAIAQ3A5CJAUEAIAU3A4iJAUEAIAY3A4CJAUEAQQA6AJCKAUEAQQA7AYiKASAAEAMgAhAHCwsLAQBBgAgLBHgHAAA=",hash:"215d875f"};const T=new g;let $=null;function _(A){return!Number.isInteger(A)||A<8||A%8!=0?new Error("Invalid variant! Valid values: 8, 16, ..."):null}function AA(A,I=256,B=null){if(_(I))return Promise.reject(_(I));let g=null,Q=0;if(null!==B){if(g=h(B),32!==g.length)return Promise.reject(new Error("Key length must be exactly 32 bytes"));Q=32}const C=I/8,i=C;if(null===$||$.hashLength!==C)return U(T,j,C).then((I=>($=I,32===Q&&$.writeMemory(g),$.calculate(A,Q,i))));try{32===Q&&$.writeMemory(g);const I=$.calculate(A,Q,i);return Promise.resolve(I)}catch(A){return Promise.reject(A)}}function IA(A=256,I=null){if(_(A))return Promise.reject(_(A));let B=null,g=0;if(null!==I){if(B=h(I),32!==B.length)return Promise.reject(new Error("Key length must be exactly 32 bytes"));g=32}const Q=A/8,C=Q;return d(j,Q).then((A=>{32===g&&A.writeMemory(B),A.init(g);const I={init:32===g?()=>(A.writeMemory(B),A.init(g),I):()=>(A.init(g),I),update:B=>(A.update(B),I),digest:I=>A.digest(I,C),save:()=>A.save(),load:B=>(A.load(B),I),blockSize:64,digestSize:Q};return I}))}var BA={name:"crc32",data:"AGFzbQEAAAABEQRgAAF/YAF/AGAAAGACf38AAwgHAAEBAQIAAwUEAQECAgYOAn8BQZDJBQt/AEGACAsHcAgGbWVtb3J5AgAOSGFzaF9HZXRCdWZmZXIAAAlIYXNoX0luaXQAAgtIYXNoX1VwZGF0ZQADCkhhc2hfRmluYWwABA1IYXNoX0dldFN0YXRlAAUOSGFzaF9DYWxjdWxhdGUABgpTVEFURV9TSVpFAwEKkggHBQBBgAkLwwMBA39BgIkBIQFBACECA0AgAUEAQQBBAEEAQQBBAEEAQQAgAkEBcWsgAHEgAkEBdnMiA0EBcWsgAHEgA0EBdnMiA0EBcWsgAHEgA0EBdnMiA0EBcWsgAHEgA0EBdnMiA0EBcWsgAHEgA0EBdnMiA0EBcWsgAHEgA0EBdnMiA0EBcWsgAHEgA0EBdnMiA0EBcWsgAHEgA0EBdnM2AgAgAUEEaiEBIAJBAWoiAkGAAkcNAAtBACEAA0AgAEGEkQFqIABBhIkBaigCACICQf8BcUECdEGAiQFqKAIAIAJBCHZzIgI2AgAgAEGEmQFqIAJB/wFxQQJ0QYCJAWooAgAgAkEIdnMiAjYCACAAQYShAWogAkH/AXFBAnRBgIkBaigCACACQQh2cyICNgIAIABBhKkBaiACQf8BcUECdEGAiQFqKAIAIAJBCHZzIgI2AgAgAEGEsQFqIAJB/wFxQQJ0QYCJAWooAgAgAkEIdnMiAjYCACAAQYS5AWogAkH/AXFBAnRBgIkBaigCACACQQh2cyICNgIAIABBhMEBaiACQf8BcUECdEGAiQFqKAIAIAJBCHZzNgIAIABBBGoiAEH8B0cNAAsLJwACQEEAKAKAyQEgAEYNACAAEAFBACAANgKAyQELQQBBADYChMkBC4gDAQN/QQAoAoTJAUF/cyEBQYAJIQICQCAAQQhJDQBBgAkhAgNAIAJBBGooAgAiA0EOdkH8B3FBgJEBaigCACADQRZ2QfwHcUGAiQFqKAIAcyADQQZ2QfwHcUGAmQFqKAIAcyADQf8BcUECdEGAoQFqKAIAcyACKAIAIAFzIgFBFnZB/AdxQYCpAWooAgBzIAFBDnZB/AdxQYCxAWooAgBzIAFBBnZB/AdxQYC5AWooAgBzIAFB/wFxQQJ0QYDBAWooAgBzIQEgAkEIaiECIABBeGoiAEEHSw0ACwsCQCAARQ0AAkACQCAAQQFxDQAgACEDDAELIAFB/wFxIAItAABzQQJ0QYCJAWooAgAgAUEIdnMhASACQQFqIQIgAEF/aiEDCyAAQQFGDQADQCABQf8BcSACLQAAc0ECdEGAiQFqKAIAIAFBCHZzIgFB/wFxIAJBAWotAABzQQJ0QYCJAWooAgAgAUEIdnMhASACQQJqIQIgA0F+aiIDDQALC0EAIAFBf3M2AoTJAQsyAQF/QQBBACgChMkBIgBBGHQgAEGA/gNxQQh0ciAAQQh2QYD+A3EgAEEYdnJyNgKACQsGAEGEyQELWQACQEEAKAKAyQEgAUYNACABEAFBACABNgKAyQELQQBBADYChMkBIAAQA0EAQQAoAoTJASIBQRh0IAFBgP4DcUEIdHIgAUEIdkGA/gNxIAFBGHZycjYCgAkLCwsBAEGACAsEBAAAAA==",hash:"d2eba587"};const gA=new g;let QA=null;function CA(A){return!Number.isInteger(A)||A<0||A>4294967295?new Error("Polynomial must be a valid 32-bit long unsigned integer"):null}function iA(A,I=3988292384){if(CA(I))return Promise.reject(CA(I));if(null===QA)return U(gA,BA,4).then((B=>(QA=B,QA.calculate(A,I))));try{const B=QA.calculate(A,I);return Promise.resolve(B)}catch(A){return Promise.reject(A)}}function EA(A=3988292384){return CA(A)?Promise.reject(CA(A)):d(BA,4).then((I=>{I.init(A);const B={init:()=>(I.init(A),B),update:A=>(I.update(A),B),digest:A=>I.digest(A),save:()=>I.save(),load:A=>(I.load(A),B),blockSize:4,digestSize:4};return B}))}var oA={name:"crc64",data:"AGFzbQEAAAABDANgAAF/YAAAYAF/AAMHBgABAgEAAQUEAQECAgYOAn8BQZCJBgt/AEGACAsHcAgGbWVtb3J5AgAOSGFzaF9HZXRCdWZmZXIAAAlIYXNoX0luaXQAAQtIYXNoX1VwZGF0ZQACCkhhc2hfRmluYWwAAw1IYXNoX0dldFN0YXRlAAQOSGFzaF9DYWxjdWxhdGUABQpTVEFURV9TSVpFAwEKgwgGBQBBgAkL9QMDAX4BfwJ+AkBBACkDgIkCQQApA4AJIgBRDQBBgIkBIQFCACECA0AgAUIAQgBCAEIAQgBCAEIAQgAgAkIBg30gAIMgAkIBiIUiA0IBg30gAIMgA0IBiIUiA0IBg30gAIMgA0IBiIUiA0IBg30gAIMgA0IBiIUiA0IBg30gAIMgA0IBiIUiA0IBg30gAIMgA0IBiIUiA0IBg30gAIMgA0IBiIUiA0IBg30gAIMgA0IBiIU3AwAgAUEIaiEBIAJCAXwiAkKAAlINAAtBACEBA0AgAUGImQFqIAFBiIkBaikDACICp0H/AXFBA3RBgIkBaikDACACQgiIhSICNwMAIAFBiKkBaiACp0H/AXFBA3RBgIkBaikDACACQgiIhSICNwMAIAFBiLkBaiACp0H/AXFBA3RBgIkBaikDACACQgiIhSICNwMAIAFBiMkBaiACp0H/AXFBA3RBgIkBaikDACACQgiIhSICNwMAIAFBiNkBaiACp0H/AXFBA3RBgIkBaikDACACQgiIhSICNwMAIAFBiOkBaiACp0H/AXFBA3RBgIkBaikDACACQgiIhSICNwMAIAFBiPkBaiACp0H/AXFBA3RBgIkBaikDACACQgiIhTcDACABQQhqIgFB+A9HDQALQQAgADcDgIkCC0EAQgA3A4iJAguUAwIBfgJ/QQApA4iJAkJ/hSEBQYAJIQICQCAAQQhJDQBBgAkhAgNAIAIpAwAgAYUiAUIwiKdB/wFxQQN0QYCZAWopAwAgAUI4iKdBA3RBgIkBaikDAIUgAUIoiKdB/wFxQQN0QYCpAWopAwCFIAFCIIinQf8BcUEDdEGAuQFqKQMAhSABpyIDQRV2QfgPcUGAyQFqKQMAhSADQQ12QfgPcUGA2QFqKQMAhSADQQV2QfgPcUGA6QFqKQMAhSADQf8BcUEDdEGA+QFqKQMAhSEBIAJBCGohAiAAQXhqIgBBB0sNAAsLAkAgAEUNAAJAAkAgAEEBcQ0AIAAhAwwBCyABQv8BgyACMQAAhadBA3RBgIkBaikDACABQgiIhSEBIAJBAWohAiAAQX9qIQMLIABBAUYNAANAIAFC/wGDIAIxAACFp0EDdEGAiQFqKQMAIAFCCIiFIgFC/wGDIAJBAWoxAACFp0EDdEGAiQFqKQMAIAFCCIiFIQEgAkECaiECIANBfmoiAw0ACwtBACABQn+FNwOIiQILZAEBfkEAQQApA4iJAiIAQjiGIABCgP4Dg0IohoQgAEKAgPwHg0IYhiAAQoCAgPgPg0IIhoSEIABCCIhCgICA+A+DIABCGIhCgID8B4OEIABCKIhCgP4DgyAAQjiIhISENwOACQsGAEGIiQILAgALCwsBAEGACAsECAAAAA==",hash:"c5ac6c16"};const FA=new g;let DA=null;const cA=new Uint8Array(8);function hA(A){const I="Polynomial must be provided as a 16 char long hex string";if("string"!=typeof A||16!==A.length)return{hi:0,lo:0,err:new Error(I)};const B=Number(`0x${A.slice(0,8)}`),g=Number(`0x${A.slice(8)}`);return Number.isNaN(B)||Number.isNaN(g)?{hi:B,lo:g,err:new Error(I)}:{hi:B,lo:g,err:null}}function aA(A,I,B){const g=new DataView(A);g.setUint32(0,I,!0),g.setUint32(4,B,!0)}function wA(A,I="c96c5795d7870f42"){const{hi:B,lo:g,err:Q}=hA(I);if(null!==Q)return Promise.reject(Q);if(null===DA)return U(FA,oA,8).then((I=>(DA=I,aA(cA.buffer,g,B),DA.writeMemory(cA),DA.calculate(A))));try{aA(cA.buffer,g,B),DA.writeMemory(cA);const I=DA.calculate(A);return Promise.resolve(I)}catch(Q){return Promise.reject(Q)}}function kA(A="c96c5795d7870f42"){const{hi:I,lo:B,err:g}=hA(A);return null!==g?Promise.reject(g):d(oA,8).then((A=>{const g=new Uint8Array(8);aA(g.buffer,B,I),A.writeMemory(g),A.init();const Q={init:()=>(A.writeMemory(g),A.init(),Q),update:I=>(A.update(I),Q),digest:I=>A.digest(I),save:()=>A.save(),load:I=>(A.load(I),Q),blockSize:8,digestSize:8};return Q}))}var GA={name:"md4",data:"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",hash:"bd8ce7c7"};const nA=new g;let yA=null;function HA(A){if(null===yA)return U(nA,GA,16).then((I=>(yA=I,yA.calculate(A))));try{const I=yA.calculate(A);return Promise.resolve(I)}catch(A){return Promise.reject(A)}}function dA(){return d(GA,16).then((A=>{A.init();const I={init:()=>(A.init(),I),update:B=>(A.update(B),I),digest:I=>A.digest(I),save:()=>A.save(),load:B=>(A.load(B),I),blockSize:64,digestSize:16};return I}))}var UA={name:"md5",data:"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",hash:"e6508e4b"};const eA=new g;let SA=null;function NA(A){if(null===SA)return U(eA,UA,16).then((I=>(SA=I,SA.calculate(A))));try{const I=SA.calculate(A);return Promise.resolve(I)}catch(A){return Promise.reject(A)}}function tA(){return d(UA,16).then((A=>{A.init();const I={init:()=>(A.init(),I),update:B=>(A.update(B),I),digest:I=>A.digest(I),save:()=>A.save(),load:B=>(A.load(B),I),blockSize:64,digestSize:16};return I}))}var JA={name:"sha1",data:"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",hash:"6b530c24"};const fA=new g;let qA=null;function MA(A){if(null===qA)return U(fA,JA,20).then((I=>(qA=I,qA.calculate(A))));try{const I=qA.calculate(A);return Promise.resolve(I)}catch(A){return Promise.reject(A)}}function KA(){return d(JA,20).then((A=>{A.init();const I={init:()=>(A.init(),I),update:B=>(A.update(B),I),digest:I=>A.digest(I),save:()=>A.save(),load:B=>(A.load(B),I),blockSize:64,digestSize:20};return I}))}var pA={name:"sha3",data:"AGFzbQEAAAABFARgAAF/YAF/AGACf38AYAN/f38AAwgHAAEBAgEAAwUEAQECAgYOAn8BQZCNBQt/AEGACAsHcAgGbWVtb3J5AgAOSGFzaF9HZXRCdWZmZXIAAAlIYXNoX0luaXQAAQtIYXNoX1VwZGF0ZQACCkhhc2hfRmluYWwABA1IYXNoX0dldFN0YXRlAAUOSGFzaF9DYWxjdWxhdGUABgpTVEFURV9TSVpFAwEKpBwHBQBBgAoL1wMAQQBCADcDgI0BQQBCADcD+IwBQQBCADcD8IwBQQBCADcD6IwBQQBCADcD4IwBQQBCADcD2IwBQQBCADcD0IwBQQBCADcDyIwBQQBCADcDwIwBQQBCADcDuIwBQQBCADcDsIwBQQBCADcDqIwBQQBCADcDoIwBQQBCADcDmIwBQQBCADcDkIwBQQBCADcDiIwBQQBCADcDgIwBQQBCADcD+IsBQQBCADcD8IsBQQBCADcD6IsBQQBCADcD4IsBQQBCADcD2IsBQQBCADcD0IsBQQBCADcDyIsBQQBCADcDwIsBQQBCADcDuIsBQQBCADcDsIsBQQBCADcDqIsBQQBCADcDoIsBQQBCADcDmIsBQQBCADcDkIsBQQBCADcDiIsBQQBCADcDgIsBQQBCADcD+IoBQQBCADcD8IoBQQBCADcD6IoBQQBCADcD4IoBQQBCADcD2IoBQQBCADcD0IoBQQBCADcDyIoBQQBCADcDwIoBQQBCADcDuIoBQQBCADcDsIoBQQBCADcDqIoBQQBCADcDoIoBQQBCADcDmIoBQQBCADcDkIoBQQBCADcDiIoBQQBCADcDgIoBQQBBwAwgAEEBdGtBA3Y2AoyNAUEAQQA2AoiNAQuMAwEIfwJAQQAoAoiNASIBQQBIDQBBACABIABqQQAoAoyNASICcDYCiI0BAkACQCABDQBBgAohAwwBCwJAIAIgAWsiBCAAIAQgAEkbIgNFDQAgA0EDcSEFQQAhBgJAIANBBEkNACABQYCKAWohByADQXxxIQhBACEGA0AgByAGaiIDQcgBaiAGQYAKai0AADoAACADQckBaiAGQYEKai0AADoAACADQcoBaiAGQYIKai0AADoAACADQcsBaiAGQYMKai0AADoAACAIIAZBBGoiBkcNAAsLIAVFDQAgAUHIiwFqIQMDQCADIAZqIAZBgApqLQAAOgAAIAZBAWohBiAFQX9qIgUNAAsLIAAgBEkNAUHIiwEgAhADIAAgBGshACAEQYAKaiEDCwJAIAAgAkkNAANAIAMgAhADIAMgAmohAyAAIAJrIgAgAk8NAAsLIABFDQBBACECQcgBIQYDQCAGQYCKAWogAyAGakG4fmotAAA6AAAgBkEBaiEGIAAgAkEBaiICQf8BcUsNAAsLC+ALAS1+IAApA0AhAkEAKQPAigEhAyAAKQM4IQRBACkDuIoBIQUgACkDMCEGQQApA7CKASEHIAApAyghCEEAKQOoigEhCSAAKQMgIQpBACkDoIoBIQsgACkDGCEMQQApA5iKASENIAApAxAhDkEAKQOQigEhDyAAKQMIIRBBACkDiIoBIREgACkDACESQQApA4CKASETQQApA8iKASEUAkACQCABQcgASw0AQQApA+iKASEVQQApA/iKASEWQQApA/CKASEXQQApA4CLASEYQQApA9CKASEZQQApA+CKASEaQQApA9iKASEbDAELQQApA+CKASAAKQNghSEaQQApA9iKASAAKQNYhSEbQQApA9CKASAAKQNQhSEZIBQgACkDSIUhFEEAKQPoigEhFUEAKQP4igEhFkEAKQPwigEhF0EAKQOAiwEhGCABQekASQ0AIBggACkDgAGFIRggFiAAKQN4hSEWIBcgACkDcIUhFyAVIAApA2iFIRUgAUGJAUkNAEEAQQApA4iLASAAKQOIAYU3A4iLAQsgAyAChSEcIAUgBIUhHSAHIAaFIQcgCSAIhSEIIAsgCoUhHiANIAyFIQkgDyAOhSEKIBEgEIUhCyATIBKFIQxBACkDuIsBIRBBACkDkIsBIRFBACkDoIsBIRJBACkDsIsBIRNBACkDiIsBIQ1BACkDwIsBIQ5BACkDmIsBIR9BACkDqIsBIQ9BwH4hAANAIB4gByALhSAbhSAYhSAPhUIBiYUgFIUgF4UgH4UgDoUhAiAMIB0gCoUgGoUgDYUgE4VCAYmFIAiFIBmFIBaFIBKFIgMgB4UhICAJIAggDIUgGYUgFoUgEoVCAYmFIByFIBWFIBGFIBCFIgQgDoUhISAcIAogFCAehSAXhSAfhSAOhUIBiYUgHYUgGoUgDYUgE4UiBYVCN4kiIiALIBwgCYUgFYUgEYUgEIVCAYmFIAeFIBuFIBiFIA+FIgYgCoVCPokiI0J/hYMgAyAPhUICiSIkhSEOIBYgAoVCKYkiJSAEIBeFQieJIiZCf4WDICKFIQ8gECAFhUI4iSIQIAYgDYVCD4kiJ0J/hYMgAyAbhUIKiSIohSENIAQgHoVCG4kiKSAoIAggAoVCJIkiKkJ/hYOFIRYgBiAdhUIGiSIrIAMgC4VCAYkiLEJ/hYMgEiAChUISiSIthSEXICsgBCAfhUIIiSIuIBUgBYVCGYkiFUJ/hYOFIRsgBiAThUI9iSIdIAQgFIVCFIkiBCAJIAWFQhyJIghCf4WDhSEUIAggHUJ/hYMgAyAYhUItiSIDhSEcIB0gA0J/hYMgGSAChUIDiSIJhSEdIAQgAyAJQn+Fg4UhByAJIARCf4WDIAiFIQggDCAChSICICFCDokiA0J/hYMgESAFhUIViSIEhSEJIAYgGoVCK4kiBSADIARCf4WDhSEKIAQgBUJ/hYMgIEIsiSIEhSELIABB0AlqKQMAIAUgBEJ/hYOFIAKFIQwgJyAoQn+FgyAqhSIFIRggAyAEIAJCf4WDhSICIR4gKiApQn+FgyAQhSIDIR8gLSAuQn+FgyAVhSIEIRogJiAkICVCf4WDhSIGIRMgFSArQn+FgyAshSIoIRkgIyAmICJCf4WDhSIiIRIgLiAsIC1Cf4WDhSImIRUgJyApIBBCf4WDhSInIREgIyAkQn+FgyAlhSIjIRAgAEEIaiIADQALQQAgDzcDqIsBQQAgBTcDgIsBQQAgGzcD2IoBQQAgBzcDsIoBQQAgCzcDiIoBQQAgDjcDwIsBQQAgAzcDmIsBQQAgFzcD8IoBQQAgFDcDyIoBQQAgAjcDoIoBQQAgBjcDsIsBQQAgDTcDiIsBQQAgBDcD4IoBQQAgHTcDuIoBQQAgCjcDkIoBQQAgIjcDoIsBQQAgFjcD+IoBQQAgKDcD0IoBQQAgCDcDqIoBQQAgDDcDgIoBQQAgIzcDuIsBQQAgJzcDkIsBQQAgJjcD6IoBQQAgHDcDwIoBQQAgCTcDmIoBC/gCAQV/QeQAQQAoAoyNASIBQQF2ayECAkBBACgCiI0BIgNBAEgNACABIQQCQCABIANGDQAgA0HIiwFqIQVBACEDA0AgBSADakEAOgAAIANBAWoiAyABQQAoAoiNASIEa0kNAAsLIARByIsBaiIDIAMtAAAgAHI6AAAgAUHHiwFqIgMgAy0AAEGAAXI6AABByIsBIAEQA0EAQYCAgIB4NgKIjQELAkAgAkEESQ0AIAJBAnYiA0EDcSEFQQAhBAJAIANBf2pBA0kNACADQfz///8DcSEBQQAhA0EAIQQDQCADQYAKaiADQYCKAWooAgA2AgAgA0GECmogA0GEigFqKAIANgIAIANBiApqIANBiIoBaigCADYCACADQYwKaiADQYyKAWooAgA2AgAgA0EQaiEDIAEgBEEEaiIERw0ACwsgBUUNACAFQQJ0IQEgBEECdCEDA0AgA0GACmogA0GAigFqKAIANgIAIANBBGohAyABQXxqIgENAAsLCwYAQYCKAQvRBgEDf0EAQgA3A4CNAUEAQgA3A/iMAUEAQgA3A/CMAUEAQgA3A+iMAUEAQgA3A+CMAUEAQgA3A9iMAUEAQgA3A9CMAUEAQgA3A8iMAUEAQgA3A8CMAUEAQgA3A7iMAUEAQgA3A7CMAUEAQgA3A6iMAUEAQgA3A6CMAUEAQgA3A5iMAUEAQgA3A5CMAUEAQgA3A4iMAUEAQgA3A4CMAUEAQgA3A/iLAUEAQgA3A/CLAUEAQgA3A+iLAUEAQgA3A+CLAUEAQgA3A9iLAUEAQgA3A9CLAUEAQgA3A8iLAUEAQgA3A8CLAUEAQgA3A7iLAUEAQgA3A7CLAUEAQgA3A6iLAUEAQgA3A6CLAUEAQgA3A5iLAUEAQgA3A5CLAUEAQgA3A4iLAUEAQgA3A4CLAUEAQgA3A/iKAUEAQgA3A/CKAUEAQgA3A+iKAUEAQgA3A+CKAUEAQgA3A9iKAUEAQgA3A9CKAUEAQgA3A8iKAUEAQgA3A8CKAUEAQgA3A7iKAUEAQgA3A7CKAUEAQgA3A6iKAUEAQgA3A6CKAUEAQgA3A5iKAUEAQgA3A5CKAUEAQgA3A4iKAUEAQgA3A4CKAUEAQcAMIAFBAXRrQQN2NgKMjQFBAEEANgKIjQEgABACQeQAQQAoAoyNASIAQQF2ayEDAkBBACgCiI0BIgFBAEgNACAAIQQCQCAAIAFGDQAgAUHIiwFqIQVBACEBA0AgBSABakEAOgAAIAFBAWoiASAAQQAoAoiNASIEa0kNAAsLIARByIsBaiIBIAEtAAAgAnI6AAAgAEHHiwFqIgEgAS0AAEGAAXI6AABByIsBIAAQA0EAQYCAgIB4NgKIjQELAkAgA0EESQ0AIANBAnYiAUEDcSEFQQAhBAJAIAFBf2pBA0kNACABQfz///8DcSEAQQAhAUEAIQQDQCABQYAKaiABQYCKAWooAgA2AgAgAUGECmogAUGEigFqKAIANgIAIAFBiApqIAFBiIoBaigCADYCACABQYwKaiABQYyKAWooAgA2AgAgAUEQaiEBIAAgBEEEaiIERw0ACwsgBUUNACAFQQJ0IQAgBEECdCEBA0AgAUGACmogAUGAigFqKAIANgIAIAFBBGohASAAQXxqIgANAAsLCwvYAQEAQYAIC9ABkAEAAAAAAAAAAAAAAAAAAAEAAAAAAAAAgoAAAAAAAACKgAAAAAAAgACAAIAAAACAi4AAAAAAAAABAACAAAAAAIGAAIAAAACACYAAAAAAAICKAAAAAAAAAIgAAAAAAAAACYAAgAAAAAAKAACAAAAAAIuAAIAAAAAAiwAAAAAAAICJgAAAAAAAgAOAAAAAAACAAoAAAAAAAICAAAAAAAAAgAqAAAAAAAAACgAAgAAAAICBgACAAAAAgICAAAAAAACAAQAAgAAAAAAIgACAAAAAgA==",hash:"fb24e536"};const sA=new g;let YA=null;function rA(A){return[224,256,384,512].includes(A)?null:new Error("Invalid variant! Valid values: 224, 256, 384, 512")}function RA(A,I=512){if(rA(I))return Promise.reject(rA(I));const B=I/8;if(null===YA||YA.hashLength!==B)return U(sA,pA,B).then((B=>(YA=B,YA.calculate(A,I,6))));try{const B=YA.calculate(A,I,6);return Promise.resolve(B)}catch(A){return Promise.reject(A)}}function lA(A=512){if(rA(A))return Promise.reject(rA(A));const I=A/8;return d(pA,I).then((B=>{B.init(A);const g={init:()=>(B.init(A),g),update:A=>(B.update(A),g),digest:A=>B.digest(A,6),save:()=>B.save(),load:A=>(B.load(A),g),blockSize:200-2*I,digestSize:I};return g}))}const XA=new g;let zA=null;function VA(A){return[224,256,384,512].includes(A)?null:new Error("Invalid variant! Valid values: 224, 256, 384, 512")}function ZA(A,I=512){if(VA(I))return Promise.reject(VA(I));const B=I/8;if(null===zA||zA.hashLength!==B)return U(XA,pA,B).then((B=>(zA=B,zA.calculate(A,I,1))));try{const B=zA.calculate(A,I,1);return Promise.resolve(B)}catch(A){return Promise.reject(A)}}function mA(A=512){if(VA(A))return Promise.reject(VA(A));const I=A/8;return d(pA,I).then((B=>{B.init(A);const g={init:()=>(B.init(A),g),update:A=>(B.update(A),g),digest:A=>B.digest(A,1),save:()=>B.save(),load:A=>(B.load(A),g),blockSize:200-2*I,digestSize:I};return g}))}var LA={name:"sha256",data:"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c2pBx6KerX1qIhkgASADcyACcSABIANxcyABQR53IAFBE3dzIAFBCndzaiAaaiICaiIJIBMgEnNxIBJzaiAJQRp3IAlBFXdzIAlBB3dzakHRxqk2aiIaIAIgAXMgA3EgAiABcXMgAkEedyACQRN3cyACQQp3c2ogGGoiA2oiESAJIBNzcSATc2ogEUEadyARQRV3cyARQQd3c2pB59KkoQFqIhggAyACcyABcSADIAJxcyADQR53IANBE3dzIANBCndzaiAUaiIBaiISIBEgCXNxIAlzaiASQRp3IBJBFXdzIBJBB3dzakGFldy9AmoiFCABIANzIAJxIAEgA3FzIAFBHncgAUETd3MgAUEKd3NqIBdqIgJqIhMgI2ogJiASaiAiIBFqICUgCWogEyASIBFzcSARc2ogE0EadyATQRV3cyATQQd3c2pBuMLs8AJqIhcgAiABcyADcSACIAFxcyACQR53IAJBE3dzIAJBCndzaiAZaiIDaiIJIBMgEnNxIBJzaiAJQRp3IAlBFXdzIAlBB3dzakH827HpBGoiGSADIAJzIAFxIAMgAnFzIANBHncgA0ETd3MgA0EKd3NqIBpqIgFqIhEgCSATc3EgE3NqIBFBGncgEUEVd3MgEUEHd3NqQZOa4JkFaiIaIAEgA3MgAnEgASADcXMgAUEedyABQRN3cyABQQp3c2ogGGoiAmoiEiARIAlzcSAJc2ogEkEadyASQRV3cyASQQd3c2pB1OapqAZqIhggAiABcyADcSACIAFxcyACQR53IAJBE3dzIAJBCndzaiAUaiIDaiITaiAoIBJqICQgEWogJyAJaiATIBIgEXNxIBFzaiATQRp3IBNBFXdzIBNBB3dzakG7laizB2oiFCADIAJzIAFxIAMgAnFzIANBHncgA0ETd3MgA0EKd3NqIBdqIgFqIgkgEyASc3EgEnNqIAlBGncgCUEVd3MgCUEHd3NqQa6Si454aiIXIAEgA3MgAnEgASADcXMgAUEedyABQRN3cyABQQp3c2ogGWoiAmoiESAJIBNzcSATc2ogEUEadyARQRV3cyARQQd3c2pBhdnIk3lqIhkgAiABcyADcSACIAFxcyACQR53IAJBE3dzIAJBCndzaiAaaiIDaiISIBEgCXNxIAlzaiASQRp3IBJBFXdzIBJBB3dzakGh0f+VemoiGiADIAJz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",hash:"8c18dd94"};const WA=new g;let uA=null;function xA(A){if(null===uA)return U(WA,LA,28).then((I=>(uA=I,uA.calculate(A,224))));try{const I=uA.calculate(A,224);return Promise.resolve(I)}catch(A){return Promise.reject(A)}}function OA(){return d(LA,28).then((A=>{A.init(224);const I={init:()=>(A.init(224),I),update:B=>(A.update(B),I),digest:I=>A.digest(I),save:()=>A.save(),load:B=>(A.load(B),I),blockSize:64,digestSize:28};return I}))}const PA=new g;let bA=null;function vA(A){if(null===bA)return U(PA,LA,32).then((I=>(bA=I,bA.calculate(A,256))));try{const I=bA.calculate(A,256);return Promise.resolve(I)}catch(A){return Promise.reject(A)}}function jA(){return d(LA,32).then((A=>{A.init(256);const I={init:()=>(A.init(256),I),update:B=>(A.update(B),I),digest:I=>A.digest(I),save:()=>A.save(),load:B=>(A.load(B),I),blockSize:64,digestSize:32};return I}))}var TA={name:"sha512",data:"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",hash:"f2e40eb1"};const $A=new g;let _A=null;function AI(A){if(null===_A)return U($A,TA,48).then((I=>(_A=I,_A.calculate(A,384))));try{const I=_A.calculate(A,384);return Promise.resolve(I)}catch(A){return Promise.reject(A)}}function II(){return d(TA,48).then((A=>{A.init(384);const I={init:()=>(A.init(384),I),update:B=>(A.update(B),I),digest:I=>A.digest(I),save:()=>A.save(),load:B=>(A.load(B),I),blockSize:128,digestSize:48};return I}))}const BI=new g;let gI=null;function QI(A){if(null===gI)return U(BI,TA,64).then((I=>(gI=I,gI.calculate(A,512))));try{const I=gI.calculate(A,512);return Promise.resolve(I)}catch(A){return Promise.reject(A)}}function CI(){return d(TA,64).then((A=>{A.init(512);const I={init:()=>(A.init(512),I),update:B=>(A.update(B),I),digest:I=>A.digest(I),save:()=>A.save(),load:B=>(A.load(B),I),blockSize:128,digestSize:64};return I}))}var iI={name:"xxhash32",data:"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",hash:"4bb12485"};const EI=new g;let oI=null;function FI(A){return!Number.isInteger(A)||A<0||A>4294967295?new Error("Seed must be a valid 32-bit long unsigned integer."):null}function DI(A,I=0){if(FI(I))return Promise.reject(FI(I));if(null===oI)return U(EI,iI,4).then((B=>(oI=B,oI.calculate(A,I))));try{const B=oI.calculate(A,I);return Promise.resolve(B)}catch(A){return Promise.reject(A)}}function cI(A=0){return FI(A)?Promise.reject(FI(A)):d(iI,4).then((I=>{I.init(A);const B={init:()=>(I.init(A),B),update:A=>(I.update(A),B),digest:A=>I.digest(A),save:()=>I.save(),load:A=>(I.load(A),B),blockSize:16,digestSize:4};return B}))}var hI={name:"xxhash64",data:"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",hash:"177fbfa3"};const aI=new g;let wI=null;const kI=new Uint8Array(8);function GI(A){return!Number.isInteger(A)||A<0||A>4294967295?new Error("Seed must be given as two valid 32-bit long unsigned integers (lo + high)."):null}function nI(A,I,B){const g=new DataView(A);g.setUint32(0,I,!0),g.setUint32(4,B,!0)}function yI(A,I=0,B=0){if(GI(I))return Promise.reject(GI(I));if(GI(B))return Promise.reject(GI(B));if(null===wI)return U(aI,hI,8).then((g=>(wI=g,nI(kI.buffer,I,B),wI.writeMemory(kI),wI.calculate(A))));try{nI(kI.buffer,I,B),wI.writeMemory(kI);const g=wI.calculate(A);return Promise.resolve(g)}catch(A){return Promise.reject(A)}}function HI(A=0,I=0){return GI(A)?Promise.reject(GI(A)):GI(I)?Promise.reject(GI(I)):d(hI,8).then((B=>{const g=new Uint8Array(8);nI(g.buffer,A,I),B.writeMemory(g),B.init();const Q={init:()=>(B.writeMemory(g),B.init(),Q),update:A=>(B.update(A),Q),digest:A=>B.digest(A),save:()=>B.save(),load:A=>(B.load(A),Q),blockSize:32,digestSize:8};return Q}))}var dI={name:"xxhash3",data:"AGFzbQEAAAABNAhgAAF/YAR/f39/AGAHf39/f39/fwBgBH9+fn4BfmAEf39/fgF+YAN/f34BfmAAAGABfwADDg0AAQIDBAUFBQYHBgAGBQQBAQICBg4CfwFBwI4FC38AQcAJCwdwCAZtZW1vcnkCAA5IYXNoX0dldEJ1ZmZlcgAACUhhc2hfSW5pdAAIC0hhc2hfVXBkYXRlAAkKSGFzaF9GaW5hbAAKDUhhc2hfR2V0U3RhdGUACw5IYXNoX0NhbGN1bGF0ZQAMClNUQVRFX1NJWkUDAQr6QQ0FAEGACgvkAwMPfgF/AX4CQCADRQ0AIAApAzAhBCAAKQM4IQUgACkDICEGIAApAyghByAAKQMQIQggACkDGCEJIAApAwAhCiAAKQMIIQsDQCAFIAFBMGopAwAiDHwgAkE4aikDACABQThqKQMAIg2FIgVCIIggBUL/////D4N+fCEFIAcgAUEgaikDACIOfCACQShqKQMAIAFBKGopAwAiD4UiB0IgiCAHQv////8Pg358IQcgCSABQRBqKQMAIhB8IAJBGGopAwAgAUEYaikDACIRhSIJQiCIIAlC/////w+DfnwhCSALIAEpAwAiEnwgAkEIaiITKQMAIAFBCGopAwAiFIUiC0IgiCALQv////8Pg358IQsgAkEwaikDACAMhSIMQiCIIAxC/////w+DfiAEfCANfCEEIAJBIGopAwAgDoUiDEIgiCAMQv////8Pg34gBnwgD3whBiACQRBqKQMAIBCFIgxCIIggDEL/////D4N+IAh8IBF8IQggAikDACAShSIMQiCIIAxC/////w+DfiAKfCAUfCEKIAFBwABqIQEgEyECIANBf2oiAw0ACyAAIAk3AxggACAKNwMAIAAgCzcDCCAAIAc3AyggACAINwMQIAAgBTcDOCAAIAY3AyAgACAENwMwCwveAgIBfwF+AkAgBCACIAEoAgAiB2siAkkNACAAIAMgBSAHQQN0aiACEAEgACAFIAZqIgcpAwAgACkDACIIQi+IhSAIhUKx893xCX43AwAgACAHKQMIIAApAwgiCEIviIUgCIVCsfPd8Ql+NwMIIAAgBykDECAAKQMQIghCL4iFIAiFQrHz3fEJfjcDECAAIAcpAxggACkDGCIIQi+IhSAIhUKx893xCX43AxggACAHKQMgIAApAyAiCEIviIUgCIVCsfPd8Ql+NwMgIAAgBykDKCAAKQMoIghCL4iFIAiFQrHz3fEJfjcDKCAAIAcpAzAgACkDMCIIQi+IhSAIhUKx893xCX43AzAgACAHKQM4IAApAzgiCEIviIUgCIVCsfPd8Ql+NwM4IAAgAyACQQZ0aiAFIAQgAmsiBxABIAEgBzYCAA8LIAAgAyAFIAdBA3RqIAQQASABIAcgBGo2AgALhQEBAX8gAiABhSADpyIEQRh0IARBgP4DcUEIdHIgBEEIdkGA/gNxIARBGHZycq1CIIYgA4V9QQA1AoCMAUIghiAAQfyLAWo1AgCEhSIDQjGJIANCGImFIAOFQqW+4/TRjIfZn39+IgNCI4ggAK18IAOFQqW+4/TRjIfZn39+IgNCHIggA4ULZwAgAiABc60gA3wiA0IhiEEALQCAjAFBEHQgAEEIdHIgAEEBdkGAjAFqLQAAQRh0ciAAQf+LAWotAAByrYUgA4VCz9bTvtLHq9lCfiIDQh2IIAOFQvnz3fGZ9pmrFn4iA0IgiCADhQuJAwEEfgJAIABBCUkNAEEAKQOAjAEgASkDICABKQMYhSACfIUiA0I4hiADQoD+A4NCKIaEIANCgID8B4NCGIYgA0KAgID4D4NCCIaEhCADQgiIQoCAgPgPgyADQhiIQoCA/AeDhCADQiiIQoD+A4MgA0I4iISEhCAArXwgAEH4iwFqKQMAIAEpAzAgASkDKIUgAn2FIgJ8IAJC/////w+DIgQgA0IgiCIFfiIGQv////8PgyACQiCIIgIgA0L/////D4MiA358IAQgA34iA0IgiHwiBEIghiADQv////8Pg4QgBkIgiCACIAV+fCAEQiCIfIV8IgNCJYggA4VC+fPd8ZnymasWfiIDQiCIIAOFDwsCQCAAQQRJDQAgACABQQhqKQMAIAFBEGopAwAgAhADDwsCQCAARQ0AIAAgASgCACABQQRqKAIAIAIQBA8LIAEpAzggASkDQIUgAoUiA0IhiCADhULP1tO+0ser2UJ+IgNCHYggA4VC+fPd8Zn2masWfiIDQiCIIAOFC94IAQZ+IACtQoeVr6+Ytt6bnn9+IQMCQCAAQSFJDQACQCAAQcEASQ0AAkAgAEHhAEkNACABKQNoIAJ9QQApA7iMAYUiBEL/////D4MiBSABKQNgIAJ8QQApA7CMAYUiBkIgiCIHfiIIQv////8PgyAEQiCIIgQgBkL/////D4MiBn58IAUgBn4iBUIgiHwiBkIghiAFQv////8Pg4QgCEIgiCAEIAd+fCAGQiCIfIUgA3wgASkDeCACfSAAQciLAWopAwCFIgNC/////w+DIgQgASkDcCACfCAAQcCLAWopAwCFIgVCIIgiBn4iB0L/////D4MgA0IgiCIDIAVC/////w+DIgV+fCAEIAV+IgRCIIh8IgVCIIYgBEL/////D4OEIAdCIIggAyAGfnwgBUIgiHyFfCEDCyABKQNIIAJ9QQApA6iMAYUiBEL/////D4MiBSABKQNAIAJ8QQApA6CMAYUiBkIgiCIHfiIIQv////8PgyAEQiCIIgQgBkL/////D4MiBn58IAUgBn4iBUIgiHwiBkIghiAFQv////8Pg4QgCEIgiCAEIAd+fCAGQiCIfIUgA3wgASkDWCACfSAAQdiLAWopAwCFIgNC/////w+DIgQgASkDUCACfCAAQdCLAWopAwCFIgVCIIgiBn4iB0L/////D4MgA0IgiCIDIAVC/////w+DIgV+fCAEIAV+IgRCIIh8IgVCIIYgBEL/////D4OEIAdCIIggAyAGfnwgBUIgiHyFfCEDCyABKQMoIAJ9QQApA5iMAYUiBEL/////D4MiBSABKQMgIAJ8QQApA5CMAYUiBkIgiCIHfiIIQv////8PgyAEQiCIIgQgBkL/////D4MiBn58IAUgBn4iBUIgiHwiBkIghiAFQv////8Pg4QgCEIgiCAEIAd+fCAGQiCIfIUgA3wgASkDOCACfSAAQeiLAWopAwCFIgNC/////w+DIgQgASkDMCACfCAAQeCLAWopAwCFIgVCIIgiBn4iB0L/////D4MgA0IgiCIDIAVC/////w+DIgV+fCAEIAV+IgRCIIh8IgVCIIYgBEL/////D4OEIAdCIIggAyAGfnwgBUIgiHyFfCEDCyABKQMIIAJ9QQApA4iMAYUiBEL/////D4MiBSABKQMAIAJ8QQApA4CMAYUiBkIgiCIHfiIIQv////8PgyAEQiCIIgQgBkL/////D4MiBn58IAUgBn4iBUIgiHwiBkIghiAFQv////8Pg4QgCEIgiCAEIAd+fCAGQiCIfIUgA3wgASkDGCACfSAAQfiLAWopAwCFIgNC/////w+DIgQgASkDECACfCAAQfCLAWopAwCFIgJCIIgiBX4iBkL/////D4MgA0IgiCIDIAJC/////w+DIgJ+fCAEIAJ+IgJCIIh8IgRCIIYgAkL/////D4OEIAZCIIggAyAFfnwgBEIgiHyFfCICQiWIIAKFQvnz3fGZ8pmrFn4iAkIgiCAChQv8CgQBfwV+An8BfkEAIQMgASkDeCACfUEAKQP4jAGFIgRC/////w+DIgUgASkDcCACfEEAKQPwjAGFIgZCIIgiB34iCEL/////D4MgBEIgiCIEIAZC/////w+DIgZ+fCAFIAZ+IgVCIIh8IgZCIIYgBUL/////D4OEIAhCIIggBCAHfnwgBkIgiHyFIAEpA2ggAn1BACkD6IwBhSIEQv////8PgyIFIAEpA2AgAnxBACkD4IwBhSIGQiCIIgd+IghC/////w+DIARCIIgiBCAGQv////8PgyIGfnwgBSAGfiIFQiCIfCIGQiCGIAVC/////w+DhCAIQiCIIAQgB358IAZCIIh8hSABKQNYIAJ9QQApA9iMAYUiBEL/////D4MiBSABKQNQIAJ8QQApA9CMAYUiBkIgiCIHfiIIQv////8PgyAEQiCIIgQgBkL/////D4MiBn58IAUgBn4iBUIgiHwiBkIghiAFQv////8Pg4QgCEIgiCAEIAd+fCAGQiCIfIUgASkDSCACfUEAKQPIjAGFIgRC/////w+DIgUgASkDQCACfEEAKQPAjAGFIgZCIIgiB34iCEL/////D4MgBEIgiCIEIAZC/////w+DIgZ+fCAFIAZ+IgVCIIh8IgZCIIYgBUL/////D4OEIAhCIIggBCAHfnwgBkIgiHyFIAEpAzggAn1BACkDuIwBhSIEQv////8PgyIFIAEpAzAgAnxBACkDsIwBhSIGQiCIIgd+IghC/////w+DIARCIIgiBCAGQv////8PgyIGfnwgBSAGfiIFQiCIfCIGQiCGIAVC/////w+DhCAIQiCIIAQgB358IAZCIIh8hSABKQMoIAJ9QQApA6iMAYUiBEL/////D4MiBSABKQMgIAJ8QQApA6CMAYUiBkIgiCIHfiIIQv////8PgyAEQiCIIgQgBkL/////D4MiBn58IAUgBn4iBUIgiHwiBkIghiAFQv////8Pg4QgCEIgiCAEIAd+fCAGQiCIfIUgASkDGCACfUEAKQOYjAGFIgRC/////w+DIgUgASkDECACfEEAKQOQjAGFIgZCIIgiB34iCEL/////D4MgBEIgiCIEIAZC/////w+DIgZ+fCAFIAZ+IgVCIIh8IgZCIIYgBUL/////D4OEIAhCIIggBCAHfnwgBkIgiHyFIAEpAwggAn1BACkDiIwBhSIEQv////8PgyIFIAEpAwAgAnxBACkDgIwBhSIGQiCIIgd+IghC/////w+DIARCIIgiBCAGQv////8PgyIGfnwgBSAGfiIFQiCIfCIGQiCGIAVC/////w+DhCAIQiCIIAQgB358IAZCIIh8hSAArUKHla+vmLbem55/fnx8fHx8fHx8IgRCJYggBIVC+fPd8ZnymasWfiIEQiCIIASFIQQCQCAAQZABSA0AIABBBHZBeGohCQNAIAEgA2oiCkELaikDACACfSADQYiNAWopAwCFIgVC/////w+DIgYgCkEDaikDACACfCADQYCNAWopAwCFIgdCIIgiCH4iC0L/////D4MgBUIgiCIFIAdC/////w+DIgd+fCAGIAd+IgZCIIh8IgdCIIYgBkL/////D4OEIAtCIIggBSAIfnwgB0IgiHyFIAR8IQQgA0EQaiEDIAlBf2oiCQ0ACwsgASkDfyACfSAAQfiLAWopAwCFIgVC/////w+DIgYgASkDdyACfCAAQfCLAWopAwCFIgJCIIgiB34iCEL/////D4MgBUIgiCIFIAJC/////w+DIgJ+fCAGIAJ+IgJCIIh8IgZCIIYgAkL/////D4OEIAhCIIggBSAHfnwgBkIgiHyFIAR8IgJCJYggAoVC+fPd8ZnymasWfiICQiCIIAKFC98FAgF+AX8CQAJAQQApA4AKIgBQRQ0AQYAIIQFCACEADAELAkBBACkDoI4BIABSDQBBACEBDAELQQAhAUEAQq+v79e895Kg/gAgAH03A/iLAUEAIABCxZbr+djShYIofDcD8IsBQQBCj/Hjja2P9JhOIAB9NwPoiwFBACAAQqus+MXV79HQfHw3A+CLAUEAQtOt1LKShbW0nn8gAH03A9iLAUEAIABCl5r0jvWWvO3JAHw3A9CLAUEAQsWDgv2v/8SxayAAfTcDyIsBQQAgAELqi7OdyOb09UN8NwPAiwFBAELIv/rLnJveueQAIAB9NwO4iwFBACAAQoqjgd/Ume2sMXw3A7CLAUEAQvm57738+MKnHSAA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QQApA4CKATcDACACQQApA4iKATcDCCACQQApA5CKATcDECACQQApA5iKATcDGCACQQApA6CKATcDICACQQApA6iKATcDKCACQQApA7CKASIFNwMwIAJBACkDuIoBIgY3AzgCQAJAQQAoAoCOASIHQcAASQ0AIAJBACgCiI4BNgJAIAIgAkHAAGpBACgCmI4BQYCMASAHQX9qQQZ2IANBACgCnI4BIgAQAiADIABqIgBBeWopAwAhCCAAKQMJIQkgACkDGSEKIAApAykhCyAHQcCLAWopAwAhBSAAKQMBIQwgB0HIiwFqKQMAIQYgB0HQiwFqKQMAIQ0gACkDESEOIAdB2IsBaikDACEPIAdB4IsBaikDACEQIAApAyEhESAHQeiLAWopAwAhEiACKQMAIRMgAikDECEUIAIpAyAhFSACKQMwIRYgAikDCCEXIAIpAxghGCACKQMoIRkgAiACKQM4IAdB8IsBaikDACIafCAAKQMxIAdB+IsBaikDACIbhSIcQiCIIBxC/////w+Dfnw3AzggGSAQfCARIBKFIhFCIIggEUL/////D4N+fCERIBggDXwgDiAPhSIOQiCIIA5C/////w+DfnwhDiAXIAV8IAwgBoUiDEIgiCAMQv////8Pg358IQwgGyAWIAsgGoUiC0IgiCALQv////8Pg358fCELIBIgFSAKIBCFIhBCIIggEEL/////D4N+fHwhECAPIBQgCSANhSINQiCIIA1C/////w+Dfnx8IRIgBiATIAggBYUiBUIgiCAFQv////8Pg358fCEIDAELIAdBwI0BaiEdQcAAIAdrIR4gAkHAAGohAAJAAkACQCAHQThNDQAgHiEfDAELAkACQEE4IAdrQQN2QQFqQQdxIh8NACACQcAAaiEAIB4hHwwBCyACQcAAaiEAIB9BA3QiICEfA0AgACAdKQMANwMAIABBCGohACAdQQhqIR0gH0F4aiIfDQALQcAAIAcgIGprIR8LAkAgBw0AA0AgACAdKQMANwMAIABBCGogHUEIaikDADcDACAAQRBqIB1BEGopAwA3AwAgAEEYaiAdQRhqKQMANwMAIABBIGogHUEgaikDADcDACAAQShqIB1BKGopAwA3AwAgAEEwaiAdQTBqKQMANwMAIABBOGogHUE4aikDADcDACAAQcAAaiEAIB1BwABqIR0gH0FAaiIfQQdLDQALCyAfRQ0BCyAfQX9qISECQCAfQQdxIiBFDQAgH0F4cSEfA0AgACAdLQAAOgAAIABBAWohACAdQQFqIR0gIEF/aiIgDQALCyAhQQdJDQADQCAAIB0pAAA3AAAgAEEIaiEAIB1BCGohHSAfQXhqIh8NAAsLIAJBwABqIB5qIR1BgIwBIQACQAJAAkAgB0EISQ0AAkAgB0E4akEDdkEBakEHcSIfDQAMAgsgH0EDdCEgQYCMASEAA0AgHSAAKQMANwMAIB1BCGohHSAAQQhqIQAgH0F/aiIfDQALIAcgIGshBwsgB0UNAQJAAkAgB0EHcSIgDQAgByEfDAELIAdBeHEhHwNAIB0gAC0AADoAACAdQQFqIR0gAEEBaiEAICBBf2oiIA0ACwsgB0EISQ0BCwNAIB0gACkAADcAACAdQQhqIR0gAEEIaiEAIB9BeGoiHw0ACwsgA0EAKAKcjgFqIgBBeWopAwAhCiAAKQMJIRMgACkDGSEUIAApAykhCyAAKQMBIQwgACkDESEOIAApAyEhESACKQMAIRUgAikDECEWIAIpAyAhFyACKQMIIRggAikDQCENIAIpA0ghDyACKQMYIRkgAikDUCESIAIpA1ghCCACKQMoIRogAikDYCEQIAIpA2ghCSACIAYgAikDcCIbfCAAKQMxIAIpA3giBoUiHEIgiCAcQv////8Pg358NwM4IBogEHwgESAJhSIRQiCIIBFC/////w+DfnwhESAZIBJ8IA4gCIUiDkIgiCAOQv////8Pg358IQ4gGCANfCAMIA+FIgxCIIggDEL/////D4N+fCEMIAYgCyAbhSILQiCIIAtC/////w+DfiAFfHwhCyAJIBcgFCAQhSIFQiCIIAVC/////w+Dfnx8IRAgCCAWIBMgEoUiBUIgiCAFQv////8Pg358fCESIA8gFSAKIA2FIgVCIIggBUL/////D4N+fHwhCAsgAykDQyACKQM4hSIFQv////8PgyIGIAMpAzsgC4UiC0IgiCINfiIPQv////8PgyAFQiCIIgUgC0L/////D4MiC358IAYgC34iBkIgiHwiC0IghiAGQv////8Pg4QgD0IgiCAFIA1+fCALQiCIfIUgAykDMyARhSIFQv////8PgyIGIAMpAysgEIUiC0IgiCINfiIPQv////8PgyAFQiCIIgUgC0L/////D4MiC358IAYgC34iBkIgiHwiC0IghiAGQv////8Pg4QgD0IgiCAFIA1+fCALQiCIfIUgAykDIyAOhSIFQv////8PgyIGIAMpAxsgEoUiC0IgiCINfiIPQv////8PgyAFQiCIIgUgC0L/////D4MiC358IAYgC34iBkIgiHwiC0IghiAGQv////8Pg4QgD0IgiCAFIA1+fCALQiCIfIUgAykDEyAMhSIFQv////8PgyIGIAMpAwsgCIUiC0IgiCINfiIPQv////8PgyAFQiCIIgUgC0L/////D4MiC358IAYgC34iBkIgiHwiC0IghiAGQv////8Pg4QgD0IgiCAFIA1+fCALQiCIfIUgBEKHla+vmLbem55/fnx8fHwiBEIliCAEhUL5893xmfKZqxZ+IgRCIIggBIUhBAwBCyAEpyEAAkBBACkDoI4BIgRQDQACQCAAQRBLDQAgAEGACCAEEAUhBAwCCwJAIABBgAFLDQAgAEGACCAEEAYhBAwCCyAAQYAIIAQQByEEDAELAkAgAEEQSw0AIAAgA0IAEAUhBAwBCwJAIABBgAFLDQAgACADQgAQBiEEDAELIAAgA0IAEAchBAtBACAEQjiGIARCgP4Dg0IohoQgBEKAgPwHg0IYhiAEQoCAgPgPg0IIhoSEIARCCIhCgICA+A+DIARCGIhCgID8B4OEIARCKIhCgP4DgyAEQjiIhISENwOACiABJAALBgBBgIoBCwIACwvMAQEAQYAIC8QBuP5sOSOkS758AYEs9yGtHN7UbemDkJfbckCkpLezZx/LeeZOzMDleIJa0H3M/3IhuAhGdPdDJI7gNZDmgTomTDwoUruRwwDLiNBlixtTLqNxZEiXog35TjgZ70ap3qzYqPp2P+OcND/53LvHxwtPHYpR4EvNtFkxyJ9+ydl4c2TqxayDNNPrw8WBoP/6E2PrFw3dUbfw2knTFlUmKdRonisWvlh9R6H8j/i40XrQMc5FyzqPlRYEKK/X+8q7S0B+QAIAAA==",hash:"5a2fbdbb"};const UI=new g;let eI=null;const SI=new Uint8Array(8);function NI(A){return!Number.isInteger(A)||A<0||A>4294967295?new Error("Seed must be given as two valid 32-bit long unsigned integers (lo + high)."):null}function tI(A,I,B){const g=new DataView(A);g.setUint32(0,I,!0),g.setUint32(4,B,!0)}function JI(A,I=0,B=0){if(NI(I))return Promise.reject(NI(I));if(NI(B))return Promise.reject(NI(B));if(null===eI)return U(UI,dI,8).then((g=>(eI=g,tI(SI.buffer,I,B),eI.writeMemory(SI),eI.calculate(A))));try{tI(SI.buffer,I,B),eI.writeMemory(SI);const g=eI.calculate(A);return Promise.resolve(g)}catch(A){return Promise.reject(A)}}function fI(A=0,I=0){return NI(A)?Promise.reject(NI(A)):NI(I)?Promise.reject(NI(I)):d(dI,8).then((B=>{const g=new Uint8Array(8);tI(g.buffer,A,I),B.writeMemory(g),B.init();const Q={init:()=>(B.writeMemory(g),B.init(),Q),update:A=>(B.update(A),Q),digest:A=>B.digest(A),save:()=>B.save(),load:A=>(B.load(A),Q),blockSize:512,digestSize:8};return Q}))}var qI={name:"xxhash128",data:"AGFzbQEAAAABKwdgAAF/YAR/f39/AGAHf39/f39/fwBgA39/fgF+YAR/f39+AGAAAGABfwADDQwAAQIDBAQEBQYFAAUFBAEBAgIGDgJ/AUHAjgULfwBBwAkLB3AIBm1lbW9yeQIADkhhc2hfR2V0QnVmZmVyAAAJSGFzaF9Jbml0AAcLSGFzaF9VcGRhdGUACApIYXNoX0ZpbmFsAAkNSGFzaF9HZXRTdGF0ZQAKDkhhc2hfQ2FsY3VsYXRlAAsKU1RBVEVfU0laRQMBCqBNDAUAQYAKC+QDAw9+AX8BfgJAIANFDQAgACkDMCEEIAApAzghBSAAKQMgIQYgACkDKCEHIAApAxAhCCAAKQMYIQkgACkDACEKIAApAwghCwNAIAUgAUEwaikDACIMfCACQThqKQMAIAFBOGopAwAiDYUiBUIgiCAFQv////8Pg358IQUgByABQSBqKQMAIg58IAJBKGopAwAgAUEoaikDACIPhSIHQiCIIAdC/////w+DfnwhByAJIAFBEGopAwAiEHwgAkEYaikDACABQRhqKQMAIhGFIglCIIggCUL/////D4N+fCEJIAsgASkDACISfCACQQhqIhMpAwAgAUEIaikDACIUhSILQiCIIAtC/////w+DfnwhCyACQTBqKQMAIAyFIgxCIIggDEL/////D4N+IAR8IA18IQQgAkEgaikDACAOhSIMQiCIIAxC/////w+DfiAGfCAPfCEGIAJBEGopAwAgEIUiDEIgiCAMQv////8Pg34gCHwgEXwhCCACKQMAIBKFIgxCIIggDEL/////D4N+IAp8IBR8IQogAUHAAGohASATIQIgA0F/aiIDDQALIAAgCTcDGCAAIAo3AwAgACALNwMIIAAgBzcDKCAAIAg3AxAgACAFNwM4IAAgBjcDICAAIAQ3AzALC94CAgF/AX4CQCAEIAIgASgCACIHayICSQ0AIAAgAyAFIAdBA3RqIAIQASAAIAUgBmoiBykDACAAKQMAIghCL4iFIAiFQrHz3fEJfjcDACAAIAcpAwggACkDCCIIQi+IhSAIhUKx893xCX43AwggACAHKQMQIAApAxAiCEIviIUgCIVCsfPd8Ql+NwMQIAAgBykDGCAAKQMYIghCL4iFIAiFQrHz3fEJfjcDGCAAIAcpAyAgACkDICIIQi+IhSAIhUKx893xCX43AyAgACAHKQMoIAApAygiCEIviIUgCIVCsfPd8Ql+NwMoIAAgBykDMCAAKQMwIghCL4iFIAiFQrHz3fEJfjcDMCAAIAcpAzggACkDOCIIQi+IhSAIhUKx893xCX43AzggACADIAJBBnRqIAUgBCACayIHEAEgASAHNgIADwsgACADIAUgB0EDdGogBBABIAEgByAEajYCAAvtAwEFfiABKQM4IAApAziFIgNC/////w+DIgQgASkDMCAAKQMwhSIFQiCIIgZ+IgdC/////w+DIANCIIgiAyAFQv////8PgyIFfnwgBCAFfiIEQiCIfCIFQiCGIARC/////w+DhCAHQiCIIAMgBn58IAVCIIh8hSABKQMoIAApAyiFIgNC/////w+DIgQgASkDICAAKQMghSIFQiCIIgZ+IgdC/////w+DIANCIIgiAyAFQv////8PgyIFfnwgBCAFfiIEQiCIfCIFQiCGIARC/////w+DhCAHQiCIIAMgBn58IAVCIIh8hSABKQMYIAApAxiFIgNC/////w+DIgQgASkDECAAKQMQhSIFQiCIIgZ+IgdC/////w+DIANCIIgiAyAFQv////8PgyIFfnwgBCAFfiIEQiCIfCIFQiCGIARC/////w+DhCAHQiCIIAMgBn58IAVCIIh8hSABKQMIIAApAwiFIgNC/////w+DIgQgASkDACAAKQMAhSIFQiCIIgZ+IgdC/////w+DIANCIIgiAyAFQv////8PgyIFfnwgBCAFfiIEQiCIfCIFQiCGIARC/////w+DhCAHQiCIIAMgBn58IAVCIIh8hSACfHx8fCICQiWIIAKFQvnz3fGZ8pmrFn4iAkIgiCAChQu6CAIFfgN/AkAgAUEJSQ0AIAAgAUH4iwFqKQMAIgQgAikDOCACKQMwhSADfIUiBUL/////D4NC95Svrwh+IAVCgICAgHCDfEEAKQOAjAEgAikDKCACKQMghSADfYUgBIUiA0IgiCIEQrHz3fEJfnwgBEKHla+vCH4iBEIgiHwgBEL/////D4MgA0L/////D4MiA0Kx893xCX58IANCh5Wvrwh+IgRCIIh8IgVCIIh8IgNCOIYgA0KA/gODQiiGhCADQoCA/AeDQhiGIANCgICA+A+DQgiGhIQgA0IIiEKAgID4D4MgA0IYiEKAgPwHg4QgA0IoiEKA/gODIANCOIiEhIQgBEL/////D4MgAUF/aq1CNoaEIAVCIIZ8hSIEQiCIIgVCz9bTvgJ+IgZC/////w+DIARC/////w+DIgRCvdzKlQx+fCAEQs/W074CfiIEQiCIfCIHQiCGIghCJYggCCAEQv////8Pg4SFQvnz3fGZ8pmrFn4iBEIgiCAEhTcDACAAIAVCvdzKlQx+IANCz9bTvtLHq9lCfnwgBkIgiHwgB0IgiHwiA0IliCADhUL5893xmfKZqxZ+IgNCIIggA4U3AwgPCwJAIAFBBEkNACAAIAIpAxggAikDEIUgA6ciAkEYdCACQYD+A3FBCHRyIAJBCHZBgP4DcSACQRh2cnKtQiCGIAOFfCABQfyLAWo1AgBCIIZBADUCgIwBhIUiA0IgiCIEIAFBAnRBh5Wvr3hqrSIFfiIGQiCIIARCsfPd8Ql+fCAGQv////8PgyADQv////8PgyIDQrHz3fEJfnwgAyAFfiIDQiCIfCIEQiCIfCAEQiCGIANC/////w+DhCIEQgGGfCIDQiWIIAOFQvnz3fGZ8pmrFn4iBUIgiCAFhTcDCCAAIANCA4ggBIUiA0IjiCADhUKlvuP00YyH2Z9/fiIDQhyIIAOFNwMADwsCQCABRQ0AIAAgAigCBCACKAIAc60gA3wiBEIhiEEALQCAjAFBEHQgAUEIdHIiCSABQQF2QYCMAWotAABBGHRyIgogAUH/iwFqLQAAIgFyIguthSAEhULP1tO+0ser2UJ+IgRCHYggBIVC+fPd8Zn2masWfiIEQiCIIASFNwMAIAAgAigCDCACKAIIc60gA30iA0IhiCABQRh0IAtBgP4DcUEIdHIgCUEIdkGA/gNxIApBGHZyckENd62FIAOFQs/W077Sx6vZQn4iA0IdiCADhUL5893xmfaZqxZ+IgNCIIggA4U3AwgPCyAAIAIpA1AgAikDWIUgA4UiBEIhiCAEhULP1tO+0ser2UJ+IgRCHYggBIVC+fPd8Zn2masWfiIEQiCIIASFNwMIIAAgAikDQCACKQNIhSADhSIDQiGIIAOFQs/W077Sx6vZQn4iA0IdiCADhUL5893xmfaZqxZ+IgNCIIggA4U3AwALwwoBCn4gAa0iBEKHla+vmLbem55/fiEFAkACQCABQSFPDQBCACEGDAELQgAhBwJAIAFBwQBJDQBCACEHAkAgAUHhAEkNACACQfgAaikDACADfSABQciLAWopAwAiCIUiB0L/////D4MiCSACKQNwIAN8IAFBwIsBaikDACIKhSILQiCIIgx+Ig1CIIggB0IgiCIHIAx+fCANQv////8PgyAHIAtC/////w+DIgt+fCAJIAt+IgdCIIh8IglCIIh8QQApA7iMASILQQApA7CMASIMfIUgCUIghiAHQv////8Pg4SFIQcgAkHoAGopAwAgA30gC4UiCUL/////D4MiCyACKQNgIAN8IAyFIgxCIIgiDX4iBkL/////D4MgCUIgiCIJIAxC/////w+DIgx+fCALIAx+IgtCIIh8IgxCIIYgC0L/////D4OEIAZCIIggCSANfnwgDEIgiHyFIAV8IAggCnyFIQULIAJB2ABqKQMAIAN9IAFB2IsBaikDACIIhSIJQv////8PgyIKIAIpA1AgA3wgAUHQiwFqKQMAIguFIgxCIIgiDX4iBkL/////D4MgCUIgiCIJIAxC/////w+DIgx+fCAKIAx+IgpCIIh8IgxCIIYgCkL/////D4OEIAZCIIggCSANfnwgDEIgiHyFIAd8QQApA6iMASIJQQApA6CMASIKfIUhByACQcgAaikDACADfSAJhSIJQv////8PgyIMIAIpA0AgA3wgCoUiCkIgiCINfiIGQv////8PgyAJQiCIIgkgCkL/////D4MiCn58IAwgCn4iCkIgiHwiDEIghiAKQv////8Pg4QgBkIgiCAJIA1+fCAMQiCIfIUgBXwgCCALfIUhBQsgAkE4aikDACADfSABQeiLAWopAwAiCIUiCUL/////D4MiCiACKQMwIAN8IAFB4IsBaikDACILhSIMQiCIIg1+IgZC/////w+DIAlCIIgiCSAMQv////8PgyIMfnwgCiAMfiIKQiCIfCIMQiCGIApC/////w+DhCAGQiCIIAkgDX58IAxCIIh8hSAHfEEAKQOYjAEiB0EAKQOQjAEiCXyFIQYgAkEoaikDACADfSAHhSIHQv////8PgyIKIAIpAyAgA3wgCYUiCUIgiCIMfiINQv////8PgyAHQiCIIgcgCUL/////D4MiCX58IAogCX4iCUIgiHwiCkIghiAJQv////8Pg4QgDUIgiCAHIAx+fCAKQiCIfIUgBXwgCCALfIUhBQsgACACQRhqKQMAIAN9IAFB+IsBaikDACIHhSIIQv////8PgyIJIAIpAxAgA3wgAUHwiwFqKQMAIgqFIgtCIIgiDH4iDUL/////D4MgCEIgiCIIIAtC/////w+DIgt+fCAJIAt+IglCIIh8IgtCIIYgCUL/////D4OEIA1CIIggCCAMfnwgC0IgiHyFIAZ8QQApA4iMASIIQQApA4CMASIJfIUiCyACQQhqKQMAIAN9IAiFIghC/////w+DIgwgAikDACADfCAJhSIJQiCIIg1+IgZC/////w+DIAhCIIgiCCAJQv////8PgyIJfnwgDCAJfiIJQiCIfCIMQiCGIAlC/////w+DhCAGQiCIIAggDX58IAxCIIh8hSAFfCAHIAp8hSIFfCIHQiWIIAeFQvnz3fGZ8pmrFn4iB0IgiCAHhTcDACAAQgAgBUKHla+vmLbem55/fiAEIAN9Qs/W077Sx6vZQn58IAtC49zKlfzO8vWFf358IgNCJYggA4VC+fPd8ZnymasWfiIDQiCIIAOFfTcDCAuhDwMBfxR+An9BACEEIAJB+ABqKQMAIAN9QQApA/iMASIFhSIGQv////8PgyIHIAIpA3AgA3xBACkD8IwBIgiFIglCIIgiCn4iC0L/////D4MgBkIgiCIGIAlC/////w+DIgl+fCAHIAl+IgdCIIh8IglCIIYgB0L/////D4OEIAtCIIggBiAKfnwgCUIgiHyFIAJB2ABqKQMAIAN9QQApA9iMASIHhSIGQv////8PgyIJIAIpA1AgA3xBACkD0IwBIgqFIgtCIIgiDH4iDUL/////D4MgBkIgiCIGIAtC/////w+DIgt+fCAJIAt+IglCIIh8IgtCIIYgCUL/////D4OEIA1CIIggBiAMfnwgC0IgiHyFIAJBOGopAwAgA31BACkDuIwBIgmFIgZC/////w+DIgsgAikDMCADfEEAKQOwjAEiDIUiDUIgiCIOfiIPQv////8PgyAGQiCIIgYgDUL/////D4MiDX58IAsgDX4iC0IgiHwiDUIghiALQv////8Pg4QgD0IgiCAGIA5+fCANQiCIfIUgAkEYaikDACADfUEAKQOYjAEiC4UiBkL/////D4MiDSACKQMQIAN8QQApA5CMASIOhSIPQiCIIhB+IhFC/////w+DIAZCIIgiBiAPQv////8PgyIPfnwgDSAPfiINQiCIfCIPQiCGIA1C/////w+DhCARQiCIIAYgEH58IA9CIIh8hUEAKQOIjAEiDUEAKQOAjAEiD3yFfEEAKQOojAEiEEEAKQOgjAEiEXyFfEEAKQPIjAEiEkEAKQPAjAEiE3yFfEEAKQPojAEiFEEAKQPgjAEiFXyFIgZCJYggBoVC+fPd8ZnymasWfiIGQiCIIAaFIQYgAkHoAGopAwAgA30gFIUiFEL/////D4MiFiACKQNgIAN8IBWFIhVCIIgiF34iGEL/////D4MgFEIgiCIUIBVC/////w+DIhV+fCAWIBV+IhVCIIh8IhZCIIYgFUL/////D4OEIBhCIIggFCAXfnwgFkIgiHyFIAJByABqKQMAIAN9IBKFIhJC/////w+DIhQgAikDQCADfCAThSITQiCIIhV+IhZC/////w+DIBJCIIgiEiATQv////8PgyITfnwgFCATfiITQiCIfCIUQiCGIBNC/////w+DhCAWQiCIIBIgFX58IBRCIIh8hSACQShqKQMAIAN9IBCFIhBC/////w+DIhIgAikDICADfCARhSIRQiCIIhN+IhRC/////w+DIBBCIIgiECARQv////8PgyIRfnwgEiARfiIRQiCIfCISQiCGIBFC/////w+DhCAUQiCIIBAgE358IBJCIIh8hSACQQhqKQMAIAN9IA2FIg1C/////w+DIhAgAikDACADfCAPhSIPQiCIIhF+IhJC/////w+DIA1CIIgiDSAPQv////8PgyIPfnwgECAPfiIPQiCIfCIQQiCGIA9C/////w+DhCASQiCIIA0gEX58IBBCIIh8hSABrSIPQoeVr6+Ytt6bnn9+fCALIA58hXwgCSAMfIV8IAcgCnyFfCAFIAh8hSIFQiWIIAWFQvnz3fGZ8pmrFn4iBUIgiCAFhSEFAkAgAUGgAUgNACABQQV2QXxqIRkDQCACIARqIhpBG2opAwAgA30gBEGYjQFqKQMAIgeFIghC/////w+DIgkgGkETaikDACADfCAEQZCNAWopAwAiCoUiC0IgiCIMfiINQv////8PgyAIQiCIIgggC0L/////D4MiC358IAkgC34iCUIgiHwiC0IghiAJQv////8Pg4QgDUIgiCAIIAx+fCALQiCIfIUgBnwgBEGIjQFqKQMAIgggBEGAjQFqKQMAIgl8hSEGIBpBC2opAwAgA30gCIUiCEL/////D4MiCyAaQQNqKQMAIAN8IAmFIglCIIgiDH4iDUL/////D4MgCEIgiCIIIAlC/////w+DIgl+fCALIAl+IglCIIh8IgtCIIYgCUL/////D4OEIA1CIIggCCAMfnwgC0IgiHyFIAV8IAcgCnyFIQUgBEEgaiEEIBlBf2oiGQ0ACwsgACACQf8AaikDACADfCABQeiLAWopAwAiB4UiCEL/////D4MiCSACKQN3IAN9IAFB4IsBaikDACIKhSILQiCIIgx+Ig1C/////w+DIAhCIIgiCCALQv////8PgyILfnwgCSALfiIJQiCIfCILQiCGIAlC/////w+DhCANQiCIIAggDH58IAtCIIh8hSAGfCABQfiLAWopAwAiBiABQfCLAWopAwAiCHyFIgkgAkHvAGopAwAgA3wgBoUiBkL/////D4MiCyACKQNnIAN9IAiFIghCIIgiDH4iDUL/////D4MgBkIgiCIGIAhC/////w+DIgh+fCALIAh+IghCIIh8IgtCIIYgCEL/////D4OEIA1CIIggBiAMfnwgC0IgiHyFIAV8IAcgCnyFIgZ8IgVCJYggBYVC+fPd8ZnymasWfiIFQiCIIAWFNwMAIABCACAGQoeVr6+Ytt6bnn9+IA8gA31Cz9bTvtLHq9lCfnwgCULj3MqV/M7y9YV/fnwiA0IliCADhUL5893xmfKZqxZ+IgNCIIggA4V9NwMIC98FAgF+AX8CQAJAQQApA4AKIgBQRQ0AQYAIIQFCACEADAELAkBBACkDoI4BIABSDQBBACEBDAELQQAhAUEAQq+v79e895Kg/gAgAH03A/iLAUEAIABCxZbr+djShYIofDcD8IsBQQBCj/Hjja2P9JhOIAB9NwPoiwFBACAAQqus+MXV79HQfHw3A+CLAUEAQtOt1LKShbW0nn8gAH03A9iLAUEAIABCl5r0jvWWvO3JAHw3A9CLAUEAQsWDgv2v/8SxayAAfTcDyIsBQQAgAELqi7OdyOb09UN8NwPAiwFBAELIv/rLnJveueQAIAB9NwO4iwFBACAAQoqjgd/Ume2sMXw3A7CLAUEAQvm57738+MKnHSAAfTcDqIsBQQAgAEKo9dv7s5ynmj98NwOgiwFBAEK4sry3lNW31lggAH03A5iLAUEAIABC8cihuqm0w/zOAHw3A5CLAUEAQoihl9u445SXo38gAH03A4iL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AkHAAGogDGohC0GAjAEhAAJAAkACQCAHQQhJDQACQCAHQThqQQN2QQFqQQdxIg0NAAwCCyANQQN0IQ5BgIwBIQADQCALIAApAwA3AwAgC0EIaiELIABBCGohACANQX9qIg0NAAsgByAOayEHCyAHRQ0BAkACQCAHQQdxIg4NACAHIQ0MAQsgB0F4cSENA0AgCyAALQAAOgAAIAtBAWohCyAAQQFqIQAgDkF/aiIODQALCyAHQQhJDQELA0AgCyAAKQAANwAAIAtBCGohCyAAQQhqIQAgDUF4aiINDQALCyACIAIpAwggAikDQCIIfCADQQAoApyOAWoiACkDASACKQNIIgmFIgpCIIggCkL/////D4N+fDcDCCACIAIpAxggAikDUCIKfCAAKQMRIAIpA1giEIUiEUIgiCARQv////8Pg358NwMYIAIgECAKIAApAwmFIgpCIIggCkL/////D4N+IAIpAxB8fDcDECACIAkgCCAAQXlqKQMAhSIIQiCIIAhC/////w+DfiACKQMAfHw3AwAgACkDGSEIIAIpAyAhCSACIAIpAyggAikDYCIKfCAAKQMhIAIpA2giEIUiEUIgiCARQv////8Pg358NwMoIAIgECAJIAggCoUiCEIgiCAIQv////8Pg358fDcDICACIAYgAikDcCIIfCAAKQMxIAIpA3giBoUiCUIgiCAJQv////8Pg358NwM4IAIgBiAIIAApAymFIghCIIggCEL/////D4N+IAV8fDcDMAsgAiACIANBC2ogBEKHla+vmLbem55/fhADNwNAIAIgAiADQQAoApyOAWpBdWogBELP1tO+0ser2UJ+Qn+FEAM3A0gMAQsgBKchAAJAQQApA6COASIEUA0AAkAgAEEQSw0AIAJBwABqIABBgAggBBAEDAILAkAgAEGAAUsNACACQcAAaiAAQYAIIAQQBQwCCyACQcAAaiAAQYAIIAQQBgwBCwJAIABBEEsNACACQcAAaiAAIANCABAEDAELAkAgAEGAAUsNACACQcAAaiAAIANCABAFDAELIAJBwABqIAAgA0IAEAYLQQAgAikDcDcDuApBACACKQNgNwOoCkEAIAIpA1A3A5gKQQAgAkH4AGopAwA3A8AKQQAgAkHoAGopAwA3A7AKQQAgAkHYAGopAwA3A6AKQQAgAikDSCIEQjiGIARCgP4Dg0IohoQgBEKAgPwHg0IYhiAEQoCAgPgPg0IIhoSEIARCCIhCgICA+A+DIARCGIhCgID8B4OEIARCKIhCgP4DgyAEQjiIhISEIgQ3A4AKQQAgBDcDkApBACACKQNAIgRCOIYgBEKA/gODQiiGhCAEQoCA/AeDQhiGIARCgICA+A+DQgiGhIQgBEIIiEKAgID4D4MgBEIYiEKAgPwHg4QgBEIoiEKA/gODIARCOIiEhIQ3A4gKIAEkAAsGAEGAigELAgALC8wBAQBBgAgLxAG4/mw5I6RLvnwBgSz3Ia0c3tRt6YOQl9tyQKSkt7NnH8t55k7MwOV4glrQfcz/ciG4CEZ090MkjuA1kOaBOiZMPChSu5HDAMuI0GWLG1Muo3FkSJeiDflOOBnvRqnerNio+nY/45w0P/ncu8fHC08dilHgS820WTHIn37J2XhzZOrFrIM00+vDxYGg//oTY+sXDd1Rt/DaSdMWVSYp1GieKxa+WH1HofyP+LjRetAxzkXLOo+VFgQor9f7yrtLQH5AAgAA",hash:"b9ab74e2"};const MI=new g;let KI=null;const pI=new Uint8Array(8);function sI(A){return!Number.isInteger(A)||A<0||A>4294967295?new Error("Seed must be given as two valid 32-bit long unsigned integers (lo + high)."):null}function YI(A,I,B){const g=new DataView(A);g.setUint32(0,I,!0),g.setUint32(4,B,!0)}function rI(A,I=0,B=0){if(sI(I))return Promise.reject(sI(I));if(sI(B))return Promise.reject(sI(B));if(null===KI)return U(MI,qI,16).then((g=>(KI=g,YI(pI.buffer,I,B),KI.writeMemory(pI),KI.calculate(A))));try{YI(pI.buffer,I,B),KI.writeMemory(pI);const g=KI.calculate(A);return Promise.resolve(g)}catch(A){return Promise.reject(A)}}function RI(A=0,I=0){return sI(A)?Promise.reject(sI(A)):sI(I)?Promise.reject(sI(I)):d(qI,16).then((B=>{const g=new Uint8Array(8);YI(g.buffer,A,I),B.writeMemory(g),B.init();const Q={init:()=>(B.writeMemory(g),B.init(),Q),update:A=>(B.update(A),Q),digest:A=>B.digest(A),save:()=>B.save(),load:A=>(B.load(A),Q),blockSize:512,digestSize:16};return Q}))}var lI={name:"ripemd160",data:"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",hash:"6abbce74"};const XI=new g;let zI=null;function VI(A){if(null===zI)return U(XI,lI,20).then((I=>(zI=I,zI.calculate(A))));try{const I=zI.calculate(A);return Promise.resolve(I)}catch(A){return Promise.reject(A)}}function ZI(){return d(lI,20).then((A=>{A.init();const I={init:()=>(A.init(),I),update:B=>(A.update(B),I),digest:I=>A.digest(I),save:()=>A.save(),load:B=>(A.load(B),I),blockSize:64,digestSize:20};return I}))}function mI(A,I){A.init();const{blockSize:B}=A,g=function(A,I){const{blockSize:B}=A,g=h(I);if(g.length>B){A.update(g);const I=A.digest("binary");return A.init(),I}return new Uint8Array(g.buffer,g.byteOffset,g.length)}(A,I),Q=new Uint8Array(B);Q.set(g);const C=new Uint8Array(B);for(let A=0;A(A.init(),A.update(Q),i),update:I=>(A.update(I),i),digest:I=>{const B=A.digest("binary");return A.init(),A.update(C),A.update(B),A.digest(I)},save:()=>{throw new Error("save() not supported")},load:()=>{throw new Error("load() not supported")},blockSize:A.blockSize,digestSize:A.digestSize};return i}function LI(A,I){if(!A||!A.then)throw new Error('Invalid hash function is provided! Usage: createHMAC(createMD5(), "key").');return A.then((A=>mI(A,I)))}function WI(A){return B(this,void 0,void 0,(function*(){(A=>{if(!A||"object"!=typeof A)throw new Error("Invalid options parameter. It requires an object.");if(!A.hashFunction||!A.hashFunction.then)throw new Error('Invalid hash function is provided! Usage: pbkdf2("password", "salt", 1000, 32, createSHA1()).');if(!Number.isInteger(A.iterations)||A.iterations<1)throw new Error("Iterations should be a positive number");if(!Number.isInteger(A.hashLength)||A.hashLength<1)throw new Error("Hash length should be a positive number");if(void 0===A.outputType&&(A.outputType="hex"),!["hex","binary"].includes(A.outputType))throw new Error(`Insupported output type ${A.outputType}. Valid values: ['hex', 'binary']`)})(A);return function(A,I,g,Q,C){return B(this,void 0,void 0,(function*(){const B=new Uint8Array(Q),i=new Uint8Array(I.length+4),E=new DataView(i.buffer),o=h(I),F=new Uint8Array(o.buffer,o.byteOffset,o.length);i.set(F);let D=0;const a=A.digestSize,w=Math.ceil(Q/a);let k=null,G=null;for(let C=1;C<=w;C++){E.setUint32(I.length,C),A.init(),A.update(i),k=A.digest("binary"),G=k.slice();for(let I=1;I{if(!A||"object"!=typeof A)throw new Error("Invalid options parameter. It requires an object.");if(!Number.isInteger(A.blockSize)||A.blockSize<1)throw new Error("Block size should be a positive number");if(!Number.isInteger(A.costFactor)||A.costFactor<2||!(I=A.costFactor)||I&I-1)throw new Error("Cost factor should be a power of 2, greater than 1");var I;if(!Number.isInteger(A.parallelism)||A.parallelism<1)throw new Error("Parallelism should be a positive number");if(!Number.isInteger(A.hashLength)||A.hashLength<1)throw new Error("Hash length should be a positive number.");if(void 0===A.outputType&&(A.outputType="hex"),!["hex","binary"].includes(A.outputType))throw new Error(`Insupported output type ${A.outputType}. Valid values: ['hex', 'binary']`)})(A),function(A){return B(this,void 0,void 0,(function*(){const{costFactor:I,blockSize:B,parallelism:g,hashLength:Q}=A,C=jA(),i=yield WI({password:A.password,salt:A.salt,iterations:1,hashLength:128*B*g,hashFunction:C,outputType:"binary"}),E=yield d(uI,0),o=128*B*I,F=256*B;E.setMemorySize(i.length+o+F),E.writeMemory(i,0),E.getExports().scrypt(B,I,g);const D=E.getMemory().subarray(0,128*B*g),h=yield WI({password:A.password,salt:D,iterations:1,hashLength:Q,hashFunction:C,outputType:"binary"});return"hex"===A.outputType?c(new Uint8Array(2*Q),h,Q):h}))}(A)}))}var OI={name:"bcrypt",data:"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",hash:"8bd8822d"};function PI(A){return B(this,void 0,void 0,(function*(){const{costFactor:I,password:B,salt:g}=A,Q=yield d(OI,0);Q.writeMemory(h(g),0);const C=h(B);Q.writeMemory(C,16);const i="encoded"===A.outputType?1:0;Q.getExports().bcrypt(C.length,I,i);const E=Q.getMemory();if("encoded"===A.outputType)return o=E,F=60,String.fromCharCode(...o.subarray(0,F));var o,F;if("hex"===A.outputType){return c(new Uint8Array(48),E,24)}return E.slice(0,24)}))}function bI(A){return B(this,void 0,void 0,(function*(){return(A=>{if(!A||"object"!=typeof A)throw new Error("Invalid options parameter. It requires an object.");if(!Number.isInteger(A.costFactor)||A.costFactor<4||A.costFactor>31)throw new Error("Cost factor should be a number between 4 and 31");if(A.password=h(A.password),A.password.length<1)throw new Error("Password should be at least 1 byte long");if(A.password.length>72)throw new Error("Password should be at most 72 bytes long");if(A.salt=h(A.salt),16!==A.salt.length)throw new Error("Salt should be 16 bytes long");if(void 0===A.outputType&&(A.outputType="encoded"),!["hex","binary","encoded"].includes(A.outputType))throw new Error(`Insupported output type ${A.outputType}. Valid values: ['hex', 'binary', 'encoded']`)})(A),PI(A)}))}const vI=A=>{if(!A||"object"!=typeof A)throw new Error("Invalid options parameter. It requires an object.");if(void 0===A.hash||"string"!=typeof A.hash)throw new Error("Hash should be specified");if(60!==A.hash.length)throw new Error("Hash should be 60 bytes long");if(!(A=>!(!/^\$2[axyb]\$[0-3][0-9]\$[./A-Za-z0-9]{53}$/.test(A)||"0"===A[4]&&Number(A[5])<4||"3"===A[4]&&Number(A[5])>1))(A.hash))throw new Error("Invalid hash");if(A.password=h(A.password),A.password.length<1)throw new Error("Password should be at least 1 byte long");if(A.password.length>72)throw new Error("Password should be at most 72 bytes long")};function jI(A){return B(this,void 0,void 0,(function*(){vI(A);const{hash:I,password:B}=A,g=yield d(OI,0);g.writeMemory(h(I),0);const Q=h(B);return g.writeMemory(Q,60),!!g.getExports().bcrypt_verify(Q.length)}))}var TI={name:"whirlpool",data:"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",hash:"8d8f6035"};const $I=new g;let _I=null;function AB(A){if(null===_I)return U($I,TI,64).then((I=>(_I=I,_I.calculate(A))));try{const I=_I.calculate(A);return Promise.resolve(I)}catch(A){return Promise.reject(A)}}function IB(){return d(TI,64).then((A=>{A.init();const I={init:()=>(A.init(),I),update:B=>(A.update(B),I),digest:I=>A.digest(I),save:()=>A.save(),load:B=>(A.load(B),I),blockSize:64,digestSize:64};return I}))}var BB={name:"sm3",data:"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",hash:"b6fb4b8e"};const gB=new g;let QB=null;function CB(A){if(null===QB)return U(gB,BB,32).then((I=>(QB=I,QB.calculate(A))));try{const I=QB.calculate(A);return Promise.resolve(I)}catch(A){return Promise.reject(A)}}function iB(){return d(BB,32).then((A=>{A.init();const I={init:()=>(A.init(),I),update:B=>(A.update(B),I),digest:I=>A.digest(I),save:()=>A.save(),load:B=>(A.load(B),I),blockSize:64,digestSize:32};return I}))}export{N as adler32,L as argon2Verify,m as argon2d,V as argon2i,Z as argon2id,bI as bcrypt,jI as bcryptVerify,s as blake2b,b as blake2s,AA as blake3,iA as crc32,wA as crc64,t as createAdler32,Y as createBLAKE2b,v as createBLAKE2s,IA as createBLAKE3,EA as createCRC32,kA as createCRC64,LI as createHMAC,mA as createKeccak,dA as createMD4,tA as createMD5,ZI as createRIPEMD160,KA as createSHA1,OA as createSHA224,jA as createSHA256,lA as createSHA3,II as createSHA384,CI as createSHA512,iB as createSM3,IB as createWhirlpool,RI as createXXHash128,fI as createXXHash3,cI as createXXHash32,HI as createXXHash64,ZA as keccak,HA as md4,NA as md5,WI as pbkdf2,VI as ripemd160,xI as scrypt,MA as sha1,xA as sha224,vA as sha256,RA as sha3,AI as sha384,QI as sha512,CB as sm3,AB as whirlpool,rI as xxhash128,JI as xxhash3,DI as xxhash32,yI as xxhash64}; diff --git a/frontend/node_modules/hash-wasm/dist/index.umd.js b/frontend/node_modules/hash-wasm/dist/index.umd.js new file mode 100644 index 0000000..2e38daf --- /dev/null +++ b/frontend/node_modules/hash-wasm/dist/index.umd.js @@ -0,0 +1,2731 @@ +/*! + * hash-wasm (https://www.npmjs.com/package/hash-wasm) + * (c) Dani Biro + * @license MIT + */ + +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) : + typeof define === 'function' && define.amd ? define(['exports'], factory) : + (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.hashwasm = {})); +})(this, (function (exports) { 'use strict'; + + var name$l = "adler32"; + var data$l = "AGFzbQEAAAABDANgAAF/YAAAYAF/AAMHBgABAgEAAgUEAQECAgYOAn8BQYCJBQt/AEGACAsHcAgGbWVtb3J5AgAOSGFzaF9HZXRCdWZmZXIAAAlIYXNoX0luaXQAAQtIYXNoX1VwZGF0ZQACCkhhc2hfRmluYWwAAw1IYXNoX0dldFN0YXRlAAQOSGFzaF9DYWxjdWxhdGUABQpTVEFURV9TSVpFAwEK6wkGBQBBgAkLCgBBAEEBNgKECAvjCAEHf0EAKAKECCIBQf//A3EhAiABQRB2IQMCQAJAIABBAUcNACACQQAtAIAJaiIBQY+AfGogASABQfD/A0sbIgEgA2oiBEEQdCIFQYCAPGogBSAEQfD/A0sbIAFyIQEMAQsCQAJAAkACQAJAIABBEEkNAEGACSEGIABBsCtJDQFBgAkhBgNAQQAhBQNAIAYgBWoiASgCACIEQf8BcSACaiICIANqIAIgBEEIdkH/AXFqIgJqIAIgBEEQdkH/AXFqIgJqIAIgBEEYdmoiAmogAiABQQRqKAIAIgRB/wFxaiICaiACIARBCHZB/wFxaiICaiACIARBEHZB/wFxaiICaiACIARBGHZqIgJqIAIgAUEIaigCACIEQf8BcWoiAmogAiAEQQh2Qf8BcWoiAmogAiAEQRB2Qf8BcWoiAmogAiAEQRh2aiIEaiAEIAFBDGooAgAiAUH/AXFqIgRqIAQgAUEIdkH/AXFqIgRqIAQgAUEQdkH/AXFqIgRqIAQgAUEYdmoiAmohAyAFQRBqIgVBsCtHDQALIANB8f8DcCEDIAJB8f8DcCECIAZBsCtqIQYgAEHQVGoiAEGvK0sNAAsgAEUNBCAAQQ9LDQEMAgsCQCAARQ0AAkACQCAAQQNxIgUNAEGACSEBIAAhBAwBCyAAQXxxIQRBACEBA0AgAiABQYAJai0AAGoiAiADaiEDIAUgAUEBaiIBRw0ACyAFQYAJaiEBCyAAQQRJDQADQCACIAEtAABqIgUgAS0AAWoiBiABLQACaiIAIAFBA2otAABqIgIgACAGIAUgA2pqamohAyABQQRqIQEgBEF8aiIEDQALCyACQY+AfGogAiACQfD/A0sbIANB8f8DcEEQdHIhAQwECwNAIAYoAgAiAUH/AXEgAmoiBCADaiAEIAFBCHZB/wFxaiIEaiAEIAFBEHZB/wFxaiIEaiAEIAFBGHZqIgRqIAQgBkEEaigCACIBQf8BcWoiBGogBCABQQh2Qf8BcWoiBGogBCABQRB2Qf8BcWoiBGogBCABQRh2aiIEaiAEIAZBCGooAgAiAUH/AXFqIgRqIAQgAUEIdkH/AXFqIgRqIAQgAUEQdkH/AXFqIgRqIAQgAUEYdmoiBGogBCAGQQxqKAIAIgFB/wFxaiIEaiAEIAFBCHZB/wFxaiIEaiAEIAFBEHZB/wFxaiIEaiAEIAFBGHZqIgJqIQMgBkEQaiEGIABBcGoiAEEPSw0ACyAARQ0BCyAAQX9qIQcCQCAAQQNxIgVFDQAgAEF8cSEAIAUhBCAGIQEDQCACIAEtAABqIgIgA2ohAyABQQFqIQEgBEF/aiIEDQALIAYgBWohBgsgB0EDSQ0AA0AgAiAGLQAAaiIBIAYtAAFqIgQgBi0AAmoiBSAGQQNqLQAAaiICIAUgBCABIANqampqIQMgBkEEaiEGIABBfGoiAA0ACwsgA0Hx/wNwIQMgAkHx/wNwIQILIAIgA0EQdHIhAQtBACABNgKECAsxAQF/QQBBACgChAgiAEEYdCAAQYD+A3FBCHRyIABBCHZBgP4DcSAAQRh2cnI2AoAJCwUAQYQICzsAQQBBATYChAggABACQQBBACgChAgiAEEYdCAAQYD+A3FBCHRyIABBCHZBgP4DcSAAQRh2cnI2AoAJCwsVAgBBgAgLBAQAAAAAQYQICwQBAAAA"; + var hash$l = "02ddbd17"; + var wasmJson$l = { + name: name$l, + data: data$l, + hash: hash$l + }; + + /****************************************************************************** + Copyright (c) Microsoft Corporation. + + Permission to use, copy, modify, and/or distribute this software for any + purpose with or without fee is hereby granted. + + THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH + REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY + AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, + INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM + LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR + OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + PERFORMANCE OF THIS SOFTWARE. + ***************************************************************************** */ + /* global Reflect, Promise, SuppressedError, Symbol, Iterator */ + + + function __awaiter(thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); + } + + typeof SuppressedError === "function" ? SuppressedError : function (error, suppressed, message) { + var e = new Error(message); + return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e; + }; + + class Mutex { + constructor() { + this.mutex = Promise.resolve(); + } + lock() { + let begin = () => { }; + this.mutex = this.mutex.then(() => new Promise(begin)); + return new Promise((res) => { + begin = res; + }); + } + dispatch(fn) { + return __awaiter(this, void 0, void 0, function* () { + const unlock = yield this.lock(); + try { + return yield Promise.resolve(fn()); + } + finally { + unlock(); + } + }); + } + } + + var _a; + function getGlobal() { + if (typeof globalThis !== "undefined") + return globalThis; + if (typeof self !== "undefined") + return self; + if (typeof window !== "undefined") + return window; + return global; + } + const globalObject = getGlobal(); + const nodeBuffer = (_a = globalObject.Buffer) !== null && _a !== void 0 ? _a : null; + const textEncoder = globalObject.TextEncoder + ? new globalObject.TextEncoder() + : null; + function intArrayToString(arr, len) { + return String.fromCharCode(...arr.subarray(0, len)); + } + function hexCharCodesToInt(a, b) { + return ((((a & 0xf) + ((a >> 6) | ((a >> 3) & 0x8))) << 4) | + ((b & 0xf) + ((b >> 6) | ((b >> 3) & 0x8)))); + } + function writeHexToUInt8(buf, str) { + const size = str.length >> 1; + for (let i = 0; i < size; i++) { + const index = i << 1; + buf[i] = hexCharCodesToInt(str.charCodeAt(index), str.charCodeAt(index + 1)); + } + } + function hexStringEqualsUInt8(str, buf) { + if (str.length !== buf.length * 2) { + return false; + } + for (let i = 0; i < buf.length; i++) { + const strIndex = i << 1; + if (buf[i] !== + hexCharCodesToInt(str.charCodeAt(strIndex), str.charCodeAt(strIndex + 1))) { + return false; + } + } + return true; + } + const alpha = "a".charCodeAt(0) - 10; + const digit = "0".charCodeAt(0); + function getDigestHex(tmpBuffer, input, hashLength) { + let p = 0; + for (let i = 0; i < hashLength; i++) { + let nibble = input[i] >>> 4; + tmpBuffer[p++] = nibble > 9 ? nibble + alpha : nibble + digit; + nibble = input[i] & 0xf; + tmpBuffer[p++] = nibble > 9 ? nibble + alpha : nibble + digit; + } + return String.fromCharCode.apply(null, tmpBuffer); + } + const getUInt8Buffer = nodeBuffer !== null + ? (data) => { + if (typeof data === "string") { + const buf = nodeBuffer.from(data, "utf8"); + return new Uint8Array(buf.buffer, buf.byteOffset, buf.length); + } + if (nodeBuffer.isBuffer(data)) { + return new Uint8Array(data.buffer, data.byteOffset, data.length); + } + if (ArrayBuffer.isView(data)) { + return new Uint8Array(data.buffer, data.byteOffset, data.byteLength); + } + throw new Error("Invalid data type!"); + } + : (data) => { + if (typeof data === "string") { + return textEncoder.encode(data); + } + if (ArrayBuffer.isView(data)) { + return new Uint8Array(data.buffer, data.byteOffset, data.byteLength); + } + throw new Error("Invalid data type!"); + }; + const base64Chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; + const base64Lookup = new Uint8Array(256); + for (let i = 0; i < base64Chars.length; i++) { + base64Lookup[base64Chars.charCodeAt(i)] = i; + } + function encodeBase64(data, pad = true) { + const len = data.length; + const extraBytes = len % 3; + const parts = []; + const len2 = len - extraBytes; + for (let i = 0; i < len2; i += 3) { + const tmp = ((data[i] << 16) & 0xff0000) + + ((data[i + 1] << 8) & 0xff00) + + (data[i + 2] & 0xff); + const triplet = base64Chars.charAt((tmp >> 18) & 0x3f) + + base64Chars.charAt((tmp >> 12) & 0x3f) + + base64Chars.charAt((tmp >> 6) & 0x3f) + + base64Chars.charAt(tmp & 0x3f); + parts.push(triplet); + } + if (extraBytes === 1) { + const tmp = data[len - 1]; + const a = base64Chars.charAt(tmp >> 2); + const b = base64Chars.charAt((tmp << 4) & 0x3f); + parts.push(`${a}${b}`); + if (pad) { + parts.push("=="); + } + } + else if (extraBytes === 2) { + const tmp = (data[len - 2] << 8) + data[len - 1]; + const a = base64Chars.charAt(tmp >> 10); + const b = base64Chars.charAt((tmp >> 4) & 0x3f); + const c = base64Chars.charAt((tmp << 2) & 0x3f); + parts.push(`${a}${b}${c}`); + if (pad) { + parts.push("="); + } + } + return parts.join(""); + } + function getDecodeBase64Length(data) { + let bufferLength = Math.floor(data.length * 0.75); + const len = data.length; + if (data[len - 1] === "=") { + bufferLength -= 1; + if (data[len - 2] === "=") { + bufferLength -= 1; + } + } + return bufferLength; + } + function decodeBase64(data) { + const bufferLength = getDecodeBase64Length(data); + const len = data.length; + const bytes = new Uint8Array(bufferLength); + let p = 0; + for (let i = 0; i < len; i += 4) { + const encoded1 = base64Lookup[data.charCodeAt(i)]; + const encoded2 = base64Lookup[data.charCodeAt(i + 1)]; + const encoded3 = base64Lookup[data.charCodeAt(i + 2)]; + const encoded4 = base64Lookup[data.charCodeAt(i + 3)]; + bytes[p] = (encoded1 << 2) | (encoded2 >> 4); + p += 1; + bytes[p] = ((encoded2 & 15) << 4) | (encoded3 >> 2); + p += 1; + bytes[p] = ((encoded3 & 3) << 6) | (encoded4 & 63); + p += 1; + } + return bytes; + } + + const MAX_HEAP = 16 * 1024; + const WASM_FUNC_HASH_LENGTH = 4; + const wasmMutex = new Mutex(); + const wasmModuleCache = new Map(); + function WASMInterface(binary, hashLength) { + return __awaiter(this, void 0, void 0, function* () { + let wasmInstance = null; + let memoryView = null; + let initialized = false; + if (typeof WebAssembly === "undefined") { + throw new Error("WebAssembly is not supported in this environment!"); + } + const writeMemory = (data, offset = 0) => { + memoryView.set(data, offset); + }; + const getMemory = () => memoryView; + const getExports = () => wasmInstance.exports; + const setMemorySize = (totalSize) => { + wasmInstance.exports.Hash_SetMemorySize(totalSize); + const arrayOffset = wasmInstance.exports.Hash_GetBuffer(); + const memoryBuffer = wasmInstance.exports.memory.buffer; + memoryView = new Uint8Array(memoryBuffer, arrayOffset, totalSize); + }; + const getStateSize = () => { + const view = new DataView(wasmInstance.exports.memory.buffer); + const stateSize = view.getUint32(wasmInstance.exports.STATE_SIZE, true); + return stateSize; + }; + const loadWASMPromise = wasmMutex.dispatch(() => __awaiter(this, void 0, void 0, function* () { + if (!wasmModuleCache.has(binary.name)) { + const asm = decodeBase64(binary.data); + const promise = WebAssembly.compile(asm); + wasmModuleCache.set(binary.name, promise); + } + const module = yield wasmModuleCache.get(binary.name); + wasmInstance = yield WebAssembly.instantiate(module, { + // env: { + // emscripten_memcpy_big: (dest, src, num) => { + // const memoryBuffer = wasmInstance.exports.memory.buffer; + // const memView = new Uint8Array(memoryBuffer, 0); + // memView.set(memView.subarray(src, src + num), dest); + // }, + // print_memory: (offset, len) => { + // const memoryBuffer = wasmInstance.exports.memory.buffer; + // const memView = new Uint8Array(memoryBuffer, 0); + // console.log('print_int32', memView.subarray(offset, offset + len)); + // }, + // }, + }); + // wasmInstance.exports._start(); + })); + const setupInterface = () => __awaiter(this, void 0, void 0, function* () { + if (!wasmInstance) { + yield loadWASMPromise; + } + const arrayOffset = wasmInstance.exports.Hash_GetBuffer(); + const memoryBuffer = wasmInstance.exports.memory.buffer; + memoryView = new Uint8Array(memoryBuffer, arrayOffset, MAX_HEAP); + }); + const init = (bits = null) => { + initialized = true; + wasmInstance.exports.Hash_Init(bits); + }; + const updateUInt8Array = (data) => { + let read = 0; + while (read < data.length) { + const chunk = data.subarray(read, read + MAX_HEAP); + read += chunk.length; + memoryView.set(chunk); + wasmInstance.exports.Hash_Update(chunk.length); + } + }; + const update = (data) => { + if (!initialized) { + throw new Error("update() called before init()"); + } + const Uint8Buffer = getUInt8Buffer(data); + updateUInt8Array(Uint8Buffer); + }; + const digestChars = new Uint8Array(hashLength * 2); + const digest = (outputType, padding = null) => { + if (!initialized) { + throw new Error("digest() called before init()"); + } + initialized = false; + wasmInstance.exports.Hash_Final(padding); + if (outputType === "binary") { + // the data is copied to allow GC of the original memory object + return memoryView.slice(0, hashLength); + } + return getDigestHex(digestChars, memoryView, hashLength); + }; + const save = () => { + if (!initialized) { + throw new Error("save() can only be called after init() and before digest()"); + } + const stateOffset = wasmInstance.exports.Hash_GetState(); + const stateLength = getStateSize(); + const memoryBuffer = wasmInstance.exports.memory.buffer; + const internalState = new Uint8Array(memoryBuffer, stateOffset, stateLength); + // prefix is 4 bytes from SHA1 hash of the WASM binary + // it is used to detect incompatible internal states between different versions of hash-wasm + const prefixedState = new Uint8Array(WASM_FUNC_HASH_LENGTH + stateLength); + writeHexToUInt8(prefixedState, binary.hash); + prefixedState.set(internalState, WASM_FUNC_HASH_LENGTH); + return prefixedState; + }; + const load = (state) => { + if (!(state instanceof Uint8Array)) { + throw new Error("load() expects an Uint8Array generated by save()"); + } + const stateOffset = wasmInstance.exports.Hash_GetState(); + const stateLength = getStateSize(); + const overallLength = WASM_FUNC_HASH_LENGTH + stateLength; + const memoryBuffer = wasmInstance.exports.memory.buffer; + if (state.length !== overallLength) { + throw new Error(`Bad state length (expected ${overallLength} bytes, got ${state.length})`); + } + if (!hexStringEqualsUInt8(binary.hash, state.subarray(0, WASM_FUNC_HASH_LENGTH))) { + throw new Error("This state was written by an incompatible hash implementation"); + } + const internalState = state.subarray(WASM_FUNC_HASH_LENGTH); + new Uint8Array(memoryBuffer, stateOffset, stateLength).set(internalState); + initialized = true; + }; + const isDataShort = (data) => { + if (typeof data === "string") { + // worst case is 4 bytes / char + return data.length < MAX_HEAP / 4; + } + return data.byteLength < MAX_HEAP; + }; + let canSimplify = isDataShort; + switch (binary.name) { + case "argon2": + case "scrypt": + canSimplify = () => true; + break; + case "blake2b": + case "blake2s": + // if there is a key at blake2 then cannot simplify + canSimplify = (data, initParam) => initParam <= 512 && isDataShort(data); + break; + case "blake3": + // if there is a key at blake3 then cannot simplify + canSimplify = (data, initParam) => initParam === 0 && isDataShort(data); + break; + case "xxhash64": // cannot simplify + case "xxhash3": + case "xxhash128": + case "crc64": + canSimplify = () => false; + break; + } + // shorthand for (init + update + digest) for better performance + const calculate = (data, initParam = null, digestParam = null) => { + if (!canSimplify(data, initParam)) { + init(initParam); + update(data); + return digest("hex", digestParam); + } + const buffer = getUInt8Buffer(data); + memoryView.set(buffer); + wasmInstance.exports.Hash_Calculate(buffer.length, initParam, digestParam); + return getDigestHex(digestChars, memoryView, hashLength); + }; + yield setupInterface(); + return { + getMemory, + writeMemory, + getExports, + setMemorySize, + init, + update, + digest, + save, + load, + calculate, + hashLength, + }; + }); + } + + function lockedCreate(mutex, binary, hashLength) { + return __awaiter(this, void 0, void 0, function* () { + const unlock = yield mutex.lock(); + const wasm = yield WASMInterface(binary, hashLength); + unlock(); + return wasm; + }); + } + + const mutex$l = new Mutex(); + let wasmCache$l = null; + /** + * Calculates Adler-32 hash. The resulting 32-bit hash is stored in + * network byte order (big-endian). + * + * @param data Input data (string, Buffer or TypedArray) + * @returns Computed hash as a hexadecimal string + */ + function adler32(data) { + if (wasmCache$l === null) { + return lockedCreate(mutex$l, wasmJson$l, 4).then((wasm) => { + wasmCache$l = wasm; + return wasmCache$l.calculate(data); + }); + } + try { + const hash = wasmCache$l.calculate(data); + return Promise.resolve(hash); + } + catch (err) { + return Promise.reject(err); + } + } + /** + * Creates a new Adler-32 hash instance + */ + function createAdler32() { + return WASMInterface(wasmJson$l, 4).then((wasm) => { + wasm.init(); + const obj = { + init: () => { + wasm.init(); + return obj; + }, + update: (data) => { + wasm.update(data); + return obj; + }, + // biome-ignore lint/suspicious/noExplicitAny: Conflict with IHasher type + digest: (outputType) => wasm.digest(outputType), + save: () => wasm.save(), + load: (data) => { + wasm.load(data); + return obj; + }, + blockSize: 4, + digestSize: 4, + }; + return obj; + }); + } + + var name$k = "argon2"; + var data$k = "AGFzbQEAAAABKQVgAX8Bf2AAAX9gEH9/f39/f39/f39/f39/f38AYAR/f39/AGACf38AAwYFAAECAwQFBgEBAoCAAgYIAX8BQZCoBAsHQQQGbWVtb3J5AgASSGFzaF9TZXRNZW1vcnlTaXplAAAOSGFzaF9HZXRCdWZmZXIAAQ5IYXNoX0NhbGN1bGF0ZQAECvEyBVgBAn9BACEBAkAgAEEAKAKICCICRg0AAkAgACACayIAQRB2IABBgIB8cSAASWoiAEAAQX9HDQBB/wHADwtBACEBQQBBACkDiAggAEEQdK18NwOICAsgAcALcAECfwJAQQAoAoAIIgANAEEAPwBBEHQiADYCgAhBACgCiAgiAUGAgCBGDQACQEGAgCAgAWsiAEEQdiAAQYCAfHEgAElqIgBAAEF/Rw0AQQAPC0EAQQApA4gIIABBEHStfDcDiAhBACgCgAghAAsgAAvcDgECfiAAIAQpAwAiECAAKQMAIhF8IBFCAYZC/v///x+DIBBC/////w+DfnwiEDcDACAMIBAgDCkDAIVCIIkiEDcDACAIIBAgCCkDACIRfCARQgGGQv7///8fgyAQQv////8Pg358IhA3AwAgBCAQIAQpAwCFQiiJIhA3AwAgACAQIAApAwAiEXwgEEL/////D4MgEUIBhkL+////H4N+fCIQNwMAIAwgECAMKQMAhUIwiSIQNwMAIAggECAIKQMAIhF8IBBC/////w+DIBFCAYZC/v///x+DfnwiEDcDACAEIBAgBCkDAIVCAYk3AwAgASAFKQMAIhAgASkDACIRfCARQgGGQv7///8fgyAQQv////8Pg358IhA3AwAgDSAQIA0pAwCFQiCJIhA3AwAgCSAQIAkpAwAiEXwgEUIBhkL+////H4MgEEL/////D4N+fCIQNwMAIAUgECAFKQMAhUIoiSIQNwMAIAEgECABKQMAIhF8IBBC/////w+DIBFCAYZC/v///x+DfnwiEDcDACANIBAgDSkDAIVCMIkiEDcDACAJIBAgCSkDACIRfCAQQv////8PgyARQgGGQv7///8fg358IhA3AwAgBSAQIAUpAwCFQgGJNwMAIAIgBikDACIQIAIpAwAiEXwgEUIBhkL+////H4MgEEL/////D4N+fCIQNwMAIA4gECAOKQMAhUIgiSIQNwMAIAogECAKKQMAIhF8IBFCAYZC/v///x+DIBBC/////w+DfnwiEDcDACAGIBAgBikDAIVCKIkiEDcDACACIBAgAikDACIRfCAQQv////8PgyARQgGGQv7///8fg358IhA3AwAgDiAQIA4pAwCFQjCJIhA3AwAgCiAQIAopAwAiEXwgEEL/////D4MgEUIBhkL+////H4N+fCIQNwMAIAYgECAGKQMAhUIBiTcDACADIAcpAwAiECADKQMAIhF8IBFCAYZC/v///x+DIBBC/////w+DfnwiEDcDACAPIBAgDykDAIVCIIkiEDcDACALIBAgCykDACIRfCARQgGGQv7///8fgyAQQv////8Pg358IhA3AwAgByAQIAcpAwCFQiiJIhA3AwAgAyAQIAMpAwAiEXwgEEL/////D4MgEUIBhkL+////H4N+fCIQNwMAIA8gECAPKQMAhUIwiSIQNwMAIAsgECALKQMAIhF8IBBC/////w+DIBFCAYZC/v///x+DfnwiEDcDACAHIBAgBykDAIVCAYk3AwAgACAFKQMAIhAgACkDACIRfCARQgGGQv7///8fgyAQQv////8Pg358IhA3AwAgDyAQIA8pAwCFQiCJIhA3AwAgCiAQIAopAwAiEXwgEUIBhkL+////H4MgEEL/////D4N+fCIQNwMAIAUgECAFKQMAhUIoiSIQNwMAIAAgECAAKQMAIhF8IBBC/////w+DIBFCAYZC/v///x+DfnwiEDcDACAPIBAgDykDAIVCMIkiEDcDACAKIBAgCikDACIRfCAQQv////8PgyARQgGGQv7///8fg358IhA3AwAgBSAQIAUpAwCFQgGJNwMAIAEgBikDACIQIAEpAwAiEXwgEUIBhkL+////H4MgEEL/////D4N+fCIQNwMAIAwgECAMKQMAhUIgiSIQNwMAIAsgECALKQMAIhF8IBFCAYZC/v///x+DIBBC/////w+DfnwiEDcDACAGIBAgBikDAIVCKIkiEDcDACABIBAgASkDACIRfCAQQv////8PgyARQgGGQv7///8fg358IhA3AwAgDCAQIAwpAwCFQjCJIhA3AwAgCyAQIAspAwAiEXwgEEL/////D4MgEUIBhkL+////H4N+fCIQNwMAIAYgECAGKQMAhUIBiTcDACACIAcpAwAiECACKQMAIhF8IBFCAYZC/v///x+DIBBC/////w+DfnwiEDcDACANIBAgDSkDAIVCIIkiEDcDACAIIBAgCCkDACIRfCARQgGGQv7///8fgyAQQv////8Pg358IhA3AwAgByAQIAcpAwCFQiiJIhA3AwAgAiAQIAIpAwAiEXwgEEL/////D4MgEUIBhkL+////H4N+fCIQNwMAIA0gECANKQMAhUIwiSIQNwMAIAggECAIKQMAIhF8IBBC/////w+DIBFCAYZC/v///x+DfnwiEDcDACAHIBAgBykDAIVCAYk3AwAgAyAEKQMAIhAgAykDACIRfCARQgGGQv7///8fgyAQQv////8Pg358IhA3AwAgDiAQIA4pAwCFQiCJIhA3AwAgCSAQIAkpAwAiEXwgEUIBhkL+////H4MgEEL/////D4N+fCIQNwMAIAQgECAEKQMAhUIoiSIQNwMAIAMgECADKQMAIhF8IBBC/////w+DIBFCAYZC/v///x+DfnwiEDcDACAOIBAgDikDAIVCMIkiEDcDACAJIBAgCSkDACIRfCAQQv////8PgyARQgGGQv7///8fg358IhA3AwAgBCAQIAQpAwCFQgGJNwMAC98aAQN/QQAhBEEAIAIpAwAgASkDAIU3A5AIQQAgAikDCCABKQMIhTcDmAhBACACKQMQIAEpAxCFNwOgCEEAIAIpAxggASkDGIU3A6gIQQAgAikDICABKQMghTcDsAhBACACKQMoIAEpAyiFNwO4CEEAIAIpAzAgASkDMIU3A8AIQQAgAikDOCABKQM4hTcDyAhBACACKQNAIAEpA0CFNwPQCEEAIAIpA0ggASkDSIU3A9gIQQAgAikDUCABKQNQhTcD4AhBACACKQNYIAEpA1iFNwPoCEEAIAIpA2AgASkDYIU3A/AIQQAgAikDaCABKQNohTcD+AhBACACKQNwIAEpA3CFNwOACUEAIAIpA3ggASkDeIU3A4gJQQAgAikDgAEgASkDgAGFNwOQCUEAIAIpA4gBIAEpA4gBhTcDmAlBACACKQOQASABKQOQAYU3A6AJQQAgAikDmAEgASkDmAGFNwOoCUEAIAIpA6ABIAEpA6ABhTcDsAlBACACKQOoASABKQOoAYU3A7gJQQAgAikDsAEgASkDsAGFNwPACUEAIAIpA7gBIAEpA7gBhTcDyAlBACACKQPAASABKQPAAYU3A9AJQQAgAikDyAEgASkD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"; + var hash$k = "e4cdc523"; + var wasmJson$k = { + name: name$k, + data: data$k, + hash: hash$k + }; + + var name$j = "blake2b"; + var data$j = "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"; + var hash$j = "c6f286e6"; + var wasmJson$j = { + name: name$j, + data: data$j, + hash: hash$j + }; + + const mutex$k = new Mutex(); + let wasmCache$k = null; + function validateBits$4(bits) { + if (!Number.isInteger(bits) || bits < 8 || bits > 512 || bits % 8 !== 0) { + return new Error("Invalid variant! Valid values: 8, 16, ..., 512"); + } + return null; + } + function getInitParam$1(outputBits, keyBits) { + return outputBits | (keyBits << 16); + } + /** + * Calculates BLAKE2b hash + * @param data Input data (string, Buffer or TypedArray) + * @param bits Number of output bits, which has to be a number + * divisible by 8, between 8 and 512. Defaults to 512. + * @param key Optional key (string, Buffer or TypedArray). Maximum length is 64 bytes. + * @returns Computed hash as a hexadecimal string + */ + function blake2b(data, bits = 512, key = null) { + if (validateBits$4(bits)) { + return Promise.reject(validateBits$4(bits)); + } + let keyBuffer = null; + let initParam = bits; + if (key !== null) { + keyBuffer = getUInt8Buffer(key); + if (keyBuffer.length > 64) { + return Promise.reject(new Error("Max key length is 64 bytes")); + } + initParam = getInitParam$1(bits, keyBuffer.length); + } + const hashLength = bits / 8; + if (wasmCache$k === null || wasmCache$k.hashLength !== hashLength) { + return lockedCreate(mutex$k, wasmJson$j, hashLength).then((wasm) => { + wasmCache$k = wasm; + if (initParam > 512) { + wasmCache$k.writeMemory(keyBuffer); + } + return wasmCache$k.calculate(data, initParam); + }); + } + try { + if (initParam > 512) { + wasmCache$k.writeMemory(keyBuffer); + } + const hash = wasmCache$k.calculate(data, initParam); + return Promise.resolve(hash); + } + catch (err) { + return Promise.reject(err); + } + } + /** + * Creates a new BLAKE2b hash instance + * @param bits Number of output bits, which has to be a number + * divisible by 8, between 8 and 512. Defaults to 512. + * @param key Optional key (string, Buffer or TypedArray). Maximum length is 64 bytes. + */ + function createBLAKE2b(bits = 512, key = null) { + if (validateBits$4(bits)) { + return Promise.reject(validateBits$4(bits)); + } + let keyBuffer = null; + let initParam = bits; + if (key !== null) { + keyBuffer = getUInt8Buffer(key); + if (keyBuffer.length > 64) { + return Promise.reject(new Error("Max key length is 64 bytes")); + } + initParam = getInitParam$1(bits, keyBuffer.length); + } + const outputSize = bits / 8; + return WASMInterface(wasmJson$j, outputSize).then((wasm) => { + if (initParam > 512) { + wasm.writeMemory(keyBuffer); + } + wasm.init(initParam); + const obj = { + init: initParam > 512 + ? () => { + wasm.writeMemory(keyBuffer); + wasm.init(initParam); + return obj; + } + : () => { + wasm.init(initParam); + return obj; + }, + update: (data) => { + wasm.update(data); + return obj; + }, + // biome-ignore lint/suspicious/noExplicitAny: Conflict with IHasher type + digest: (outputType) => wasm.digest(outputType), + save: () => wasm.save(), + load: (data) => { + wasm.load(data); + return obj; + }, + blockSize: 128, + digestSize: outputSize, + }; + return obj; + }); + } + + function encodeResult(salt, options, res) { + const parameters = [ + `m=${options.memorySize}`, + `t=${options.iterations}`, + `p=${options.parallelism}`, + ].join(","); + return `$argon2${options.hashType}$v=19$${parameters}$${encodeBase64(salt, false)}$${encodeBase64(res, false)}`; + } + const uint32View = new DataView(new ArrayBuffer(4)); + function int32LE(x) { + uint32View.setInt32(0, x, true); + return new Uint8Array(uint32View.buffer); + } + function hashFunc(blake512, buf, len) { + return __awaiter(this, void 0, void 0, function* () { + if (len <= 64) { + const blake = yield createBLAKE2b(len * 8); + blake.update(int32LE(len)); + blake.update(buf); + return blake.digest("binary"); + } + const r = Math.ceil(len / 32) - 2; + const ret = new Uint8Array(len); + blake512.init(); + blake512.update(int32LE(len)); + blake512.update(buf); + let vp = blake512.digest("binary"); + ret.set(vp.subarray(0, 32), 0); + for (let i = 1; i < r; i++) { + blake512.init(); + blake512.update(vp); + vp = blake512.digest("binary"); + ret.set(vp.subarray(0, 32), i * 32); + } + const partialBytesNeeded = len - 32 * r; + let blakeSmall; + if (partialBytesNeeded === 64) { + blakeSmall = blake512; + blakeSmall.init(); + } + else { + blakeSmall = yield createBLAKE2b(partialBytesNeeded * 8); + } + blakeSmall.update(vp); + vp = blakeSmall.digest("binary"); + ret.set(vp.subarray(0, partialBytesNeeded), r * 32); + return ret; + }); + } + function getHashType(type) { + switch (type) { + case "d": + return 0; + case "i": + return 1; + default: + return 2; + } + } + function argon2Internal(options) { + return __awaiter(this, void 0, void 0, function* () { + var _a; + const { parallelism, iterations, hashLength } = options; + const password = getUInt8Buffer(options.password); + const salt = getUInt8Buffer(options.salt); + const version = 0x13; + const hashType = getHashType(options.hashType); + const { memorySize } = options; // in KB + const secret = getUInt8Buffer((_a = options.secret) !== null && _a !== void 0 ? _a : ""); + const [argon2Interface, blake512] = yield Promise.all([ + WASMInterface(wasmJson$k, 1024), + createBLAKE2b(512), + ]); + // last block is for storing the init vector + argon2Interface.setMemorySize(memorySize * 1024 + 1024); + const initVector = new Uint8Array(24); + const initVectorView = new DataView(initVector.buffer); + initVectorView.setInt32(0, parallelism, true); + initVectorView.setInt32(4, hashLength, true); + initVectorView.setInt32(8, memorySize, true); + initVectorView.setInt32(12, iterations, true); + initVectorView.setInt32(16, version, true); + initVectorView.setInt32(20, hashType, true); + argon2Interface.writeMemory(initVector, memorySize * 1024); + blake512.init(); + blake512.update(initVector); + blake512.update(int32LE(password.length)); + blake512.update(password); + blake512.update(int32LE(salt.length)); + blake512.update(salt); + blake512.update(int32LE(secret.length)); + blake512.update(secret); + blake512.update(int32LE(0)); // associatedData length + associatedData + const segments = Math.floor(memorySize / (parallelism * 4)); // length of each lane + const lanes = segments * 4; + const param = new Uint8Array(72); + const H0 = blake512.digest("binary"); + param.set(H0); + for (let lane = 0; lane < parallelism; lane++) { + param.set(int32LE(0), 64); + param.set(int32LE(lane), 68); + let position = lane * lanes; + let chunk = yield hashFunc(blake512, param, 1024); + argon2Interface.writeMemory(chunk, position * 1024); + position += 1; + param.set(int32LE(1), 64); + chunk = yield hashFunc(blake512, param, 1024); + argon2Interface.writeMemory(chunk, position * 1024); + } + const C = new Uint8Array(1024); + writeHexToUInt8(C, argon2Interface.calculate(new Uint8Array([]), memorySize)); + const res = yield hashFunc(blake512, C, hashLength); + if (options.outputType === "hex") { + const digestChars = new Uint8Array(hashLength * 2); + return getDigestHex(digestChars, res, hashLength); + } + if (options.outputType === "encoded") { + return encodeResult(salt, options, res); + } + // return binary format + return res; + }); + } + const validateOptions$3 = (options) => { + var _a; + if (!options || typeof options !== "object") { + throw new Error("Invalid options parameter. It requires an object."); + } + if (!options.password) { + throw new Error("Password must be specified"); + } + options.password = getUInt8Buffer(options.password); + if (options.password.length < 1) { + throw new Error("Password must be specified"); + } + if (!options.salt) { + throw new Error("Salt must be specified"); + } + options.salt = getUInt8Buffer(options.salt); + if (options.salt.length < 8) { + throw new Error("Salt should be at least 8 bytes long"); + } + options.secret = getUInt8Buffer((_a = options.secret) !== null && _a !== void 0 ? _a : ""); + if (!Number.isInteger(options.iterations) || options.iterations < 1) { + throw new Error("Iterations should be a positive number"); + } + if (!Number.isInteger(options.parallelism) || options.parallelism < 1) { + throw new Error("Parallelism should be a positive number"); + } + if (!Number.isInteger(options.hashLength) || options.hashLength < 4) { + throw new Error("Hash length should be at least 4 bytes."); + } + if (!Number.isInteger(options.memorySize)) { + throw new Error("Memory size should be specified."); + } + if (options.memorySize < 8 * options.parallelism) { + throw new Error("Memory size should be at least 8 * parallelism."); + } + if (options.outputType === undefined) { + options.outputType = "hex"; + } + if (!["hex", "binary", "encoded"].includes(options.outputType)) { + throw new Error(`Insupported output type ${options.outputType}. Valid values: ['hex', 'binary', 'encoded']`); + } + }; + /** + * Calculates hash using the argon2i password-hashing function + * @returns Computed hash + */ + function argon2i(options) { + return __awaiter(this, void 0, void 0, function* () { + validateOptions$3(options); + return argon2Internal(Object.assign(Object.assign({}, options), { hashType: "i" })); + }); + } + /** + * Calculates hash using the argon2id password-hashing function + * @returns Computed hash + */ + function argon2id(options) { + return __awaiter(this, void 0, void 0, function* () { + validateOptions$3(options); + return argon2Internal(Object.assign(Object.assign({}, options), { hashType: "id" })); + }); + } + /** + * Calculates hash using the argon2d password-hashing function + * @returns Computed hash + */ + function argon2d(options) { + return __awaiter(this, void 0, void 0, function* () { + validateOptions$3(options); + return argon2Internal(Object.assign(Object.assign({}, options), { hashType: "d" })); + }); + } + const getHashParameters = (password, encoded, secret) => { + const regex = /^\$argon2(id|i|d)\$v=([0-9]+)\$((?:[mtp]=[0-9]+,){2}[mtp]=[0-9]+)\$([A-Za-z0-9+/]+)\$([A-Za-z0-9+/]+)$/; + const match = encoded.match(regex); + if (!match) { + throw new Error("Invalid hash"); + } + const [, hashType, version, parameters, salt, hash] = match; + if (version !== "19") { + throw new Error(`Unsupported version: ${version}`); + } + const parsedParameters = {}; + const paramMap = { m: "memorySize", p: "parallelism", t: "iterations" }; + for (const x of parameters.split(",")) { + const [n, v] = x.split("="); + parsedParameters[paramMap[n]] = Number(v); + } + return Object.assign(Object.assign({}, parsedParameters), { password, + secret, hashType: hashType, salt: decodeBase64(salt), hashLength: getDecodeBase64Length(hash), outputType: "encoded" }); + }; + const validateVerifyOptions$1 = (options) => { + if (!options || typeof options !== "object") { + throw new Error("Invalid options parameter. It requires an object."); + } + if (options.hash === undefined || typeof options.hash !== "string") { + throw new Error("Hash should be specified"); + } + }; + /** + * Verifies password using the argon2 password-hashing function + * @returns True if the encoded hash matches the password + */ + function argon2Verify(options) { + return __awaiter(this, void 0, void 0, function* () { + validateVerifyOptions$1(options); + const params = getHashParameters(options.password, options.hash, options.secret); + validateOptions$3(params); + const hashStart = options.hash.lastIndexOf("$") + 1; + const result = (yield argon2Internal(params)); + return result.substring(hashStart) === options.hash.substring(hashStart); + }); + } + + var name$i = "blake2s"; + var data$i = "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"; + var hash$i = "5c0ff166"; + var wasmJson$i = { + name: name$i, + data: data$i, + hash: hash$i + }; + + const mutex$j = new Mutex(); + let wasmCache$j = null; + function validateBits$3(bits) { + if (!Number.isInteger(bits) || bits < 8 || bits > 256 || bits % 8 !== 0) { + return new Error("Invalid variant! Valid values: 8, 16, ..., 256"); + } + return null; + } + function getInitParam(outputBits, keyBits) { + return outputBits | (keyBits << 16); + } + /** + * Calculates BLAKE2s hash + * @param data Input data (string, Buffer or TypedArray) + * @param bits Number of output bits, which has to be a number + * divisible by 8, between 8 and 256. Defaults to 256. + * @param key Optional key (string, Buffer or TypedArray). Maximum length is 32 bytes. + * @returns Computed hash as a hexadecimal string + */ + function blake2s(data, bits = 256, key = null) { + if (validateBits$3(bits)) { + return Promise.reject(validateBits$3(bits)); + } + let keyBuffer = null; + let initParam = bits; + if (key !== null) { + keyBuffer = getUInt8Buffer(key); + if (keyBuffer.length > 32) { + return Promise.reject(new Error("Max key length is 32 bytes")); + } + initParam = getInitParam(bits, keyBuffer.length); + } + const hashLength = bits / 8; + if (wasmCache$j === null || wasmCache$j.hashLength !== hashLength) { + return lockedCreate(mutex$j, wasmJson$i, hashLength).then((wasm) => { + wasmCache$j = wasm; + if (initParam > 512) { + wasmCache$j.writeMemory(keyBuffer); + } + return wasmCache$j.calculate(data, initParam); + }); + } + try { + if (initParam > 512) { + wasmCache$j.writeMemory(keyBuffer); + } + const hash = wasmCache$j.calculate(data, initParam); + return Promise.resolve(hash); + } + catch (err) { + return Promise.reject(err); + } + } + /** + * Creates a new BLAKE2s hash instance + * @param bits Number of output bits, which has to be a number + * divisible by 8, between 8 and 256. Defaults to 256. + * @param key Optional key (string, Buffer or TypedArray). Maximum length is 32 bytes. + */ + function createBLAKE2s(bits = 256, key = null) { + if (validateBits$3(bits)) { + return Promise.reject(validateBits$3(bits)); + } + let keyBuffer = null; + let initParam = bits; + if (key !== null) { + keyBuffer = getUInt8Buffer(key); + if (keyBuffer.length > 32) { + return Promise.reject(new Error("Max key length is 32 bytes")); + } + initParam = getInitParam(bits, keyBuffer.length); + } + const outputSize = bits / 8; + return WASMInterface(wasmJson$i, outputSize).then((wasm) => { + if (initParam > 512) { + wasm.writeMemory(keyBuffer); + } + wasm.init(initParam); + const obj = { + init: initParam > 512 + ? () => { + wasm.writeMemory(keyBuffer); + wasm.init(initParam); + return obj; + } + : () => { + wasm.init(initParam); + return obj; + }, + update: (data) => { + wasm.update(data); + return obj; + }, + // biome-ignore lint/suspicious/noExplicitAny: Conflict with IHasher type + digest: (outputType) => wasm.digest(outputType), + save: () => wasm.save(), + load: (data) => { + wasm.load(data); + return obj; + }, + blockSize: 64, + digestSize: outputSize, + }; + return obj; + }); + } + + var name$h = "blake3"; + var data$h = "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IQEgAkFAaiICQcAASw0ACwsCQEHAACAHQf8BcSIGayIFIAIgBSACSRsiCUUNACAJQQNxIQtBACEFAkAgCUEESQ0AIAAgBmohByAJQfwAcSEIQQAhBQNAIAcgBWoiAkEoaiABIAVqIgotAAA6AAAgAkEpaiAKQQFqLQAAOgAAIAJBKmogCkECai0AADoAACACQStqIApBA2otAAA6AAAgCCAFQQRqIgVHDQALCwJAIAtFDQAgASAFaiEBIAUgBmogAGpBKGohBQNAIAUgAS0AADoAACABQQFqIQEgBUEBaiEFIAtBf2oiCw0ACwsgAC0AaCEHCyAAIAcgCWo6AGggA0HAAGokAAveAwQFfwN+BX8GfiMAQdABayIBJAACQCAAe6ciAkEALQCQigEiA08NAEEALQCKigFBBHIhBCABQShqIQVBACkDmIkBIQBBACkDkIkBIQZBACkDiIkBIQdBACkDgIkBIQggAyEJA0AgASAANwMYIAEgBjcDECABIAc3AwggASAINwMAIAEgA0EFdCIDQdGJAWoiCikDADcDKCABIANB2YkBaiILKQMANwMwIAEgA0HhiQFqIgwpAwA3AzggASADQemJAWoiDSkDADcDQCABIANB8YkBaikDADcDSCABIANB+YkBaikDADcDUCABIANBgYoBaikDADcDWCADQYmKAWopAwAhDiABQcAAOgBoIAEgDjcDYCABQgA3AyAgASAEOgBpIAEgADcDiAEgASAGNwOAASABIAc3A3ggASAINwNwIAFBkAFqIAFB8ABqIAVBwABCACAEQf8BcRACIAEpA7ABIQ4gASkDkAEhDyABKQO4ASEQIAEpA5gBIREgASkDwAEhEiABKQOgASETIA0gASkDyAEgASkDqAGFNwMAIAwgEiAThTcDACALIBAgEYU3AwAgCiAOIA+FNwMAIAlBf2oiCUH/AXEiAyACSw0AC0EAIAk6AJCKAQsgAUHQAWokAAvHCQIKfwV+IwBB4AJrIgUkAAJAAkAgAUGACEsNACAFIAA2AvwBIAVB/AFqIAFBgAhGIgZBECACQQEgA0EBQQIgBBABIAZBCnQiByABTw0BIAVB4ABqIgZCADcDACAFQdgAaiIIQgA3AwAgBUHQAGoiCUIANwMAIAVByABqIgpCADcDACAFQcAAaiILQgA3AwAgBUE4aiIMQgA3AwAgBUEwaiINQgA3AwAgBSADOgBqIAVCADcDKCAFQQA7AWggBUEAKQOAiQE3AwAgBUEAKQOIiQE3AwggBUEAKQOQiQE3AxAgBUEAKQOYiQE3AxggBSABQYAIRiIOrSACfDcDICAFIAAgB2pBACABIA4bEAQgBUGIAWpBMGogDSkDADcDACAFQYgBakE4aiAMKQMANwMAIAUgBSkDACIPNwOIASAFIAUpAwgiEDcDkAEgBSAFKQMQIhE3A5gBIAUgBSkDGCISNwOgASAFIAUpAyg3A7ABIAUtAGohACAFLQBpIQcgBSkDICECIAUtAGghASAFQYgBakHAAGogCykDADcDACAFQYgBakHIAGogCikDADcDACAFQYgBakHQAGogCSkDADcDACAFQYgBakHYAGogCCkDADcDACAFQYgBakHgAGogBikDADcDACAFIAE6APABIAUgAjcDqAEgBSAAIAdFckECciIAOgDxASAFIBI3A5gCIAUgETcDkAIgBSAQNwOIAiAFIA83A4ACIAVBoAJqIAVBgAJqIAVBsAFqIAEgAiAAQf8BcRACIAUpA8ACIQIgBSkDoAIhDyAFKQPIAiEQIAUpA6gCIREgBSkD0AIhEiAFKQOwAiETIAQgDkEFdGoiASAFKQPYAiAFKQO4AoU3AxggASASIBOFNwMQIAEgECARhTcDCCABIAIgD4U3AwBBAkEBIA4bIQYMAQsgAEIBIAFBf2pBCnZBAXKteUI/hYYiD6dBCnQiDiACIAMgBRAGIQcgACAOaiABIA5rIA9C////AYMgAnwgAyAFQcAAQSAgDkGACEsbahAGIQECQCAHQQFHDQAgBCAFKQMANwMAIAQgBSkDCDcDCCAEIAUpAxA3AxAgBCAFKQMYNwMYIAQgBSkDIDcDICAEIAUpAyg3AyggBCAFKQMwNwMwIAQgBSkDODcDOEECIQYMAQtBACEGQQAhAAJAIAEgB2oiCUECSQ0AIAlBfmoiCkEBdkEBaiIGQQNxIQ5BACEHAkAgCkEGSQ0AIAZB/P///wdxIQhBACEHIAVBiAFqIQEgBSEAA0AgASAANgIAIAFBDGogAEHAAWo2AgAgAUEIaiAAQYABajYCACABQQRqIABBwABqNgIAIABBgAJqIQAgAUEQaiEBIAggB0EEaiIHRw0ACwsgCkF+cSEIAkAgDkUNACAFIAdBBnRqIQEgBUGIAWogB0ECdGohAANAIAAgATYCACABQcAAaiEBIABBBGohACAOQX9qIg4NAAsLIAhBAmohAAsgBUGIAWogBkEBQgBBACADQQRyQQBBACAEEAEgACAJTw0AIAQgBkEFdGoiASAFIAZBBnRqIgApAwA3AwAgASAAKQMINwMIIAEgACkDEDcDECABIAApAxg3AxggBkEBaiEGCyAFQeACaiQAIAYLrRAIAn8EfgF/AX4EfwR+BH8EfiMAQfABayIBJAACQCAARQ0AAkBBAC0AkIoBIgINACABQTBqQQApA9CJATcDACABQThqQQApA9iJATcDACABQQApA6CJASIDNwMAIAFBACkDqIkBIgQ3AwggAUEAKQOwiQEiBTcDECABQQApA7iJASIGNwMYIAFBACkDyIkBNwMoQQAtAIqKASECQQAtAImKASEHQQApA8CJASEIQQAtAIiKASEJIAFBwABqQQApA+CJATcDACABQcgAakEAKQPoiQE3AwAgAUHQAGpBACkD8IkBNwMAIAFB2ABqQQApA/iJATcDACABQeAAakEAKQOAigE3AwAgASAJOgBoIAEgCDcDICABIAIgB0VyIgJBAnI6AGkgAUEoaiEKQgAhCEGACSELIAJBCnJB/wFxIQwDQCABQbABaiABIAogCUH/AXEgCCAMEAIgASABKQPQASINIAEpA7ABhTcDcCABIAEpA9gBIg4gASkDuAGFNwN4IAEgASkD4AEiDyABKQPAAYU3A4ABIAEgASkD6AEiECAGhTcDqAEgASAPIAWFNwOgASABIA4gBIU3A5gBIAEgDSADhTcDkAEgASAQIAEpA8gBhTcDiAEgAEHAACAAQcAASRsiEUF/aiESAkACQCARQQdxIhMNACABQfAAaiECIAshByARIRQMAQsgEUH4AHEhFCABQfAAaiECIAshBwNAIAcgAi0AADoAACAHQQFqIQcgAkEBaiECIBNBf2oiEw0ACwsCQCASQQdJDQADQCAHIAIpAAA3AAAgB0EIaiEHIAJBCGohAiAUQXhqIhQNAAsLIAhCAXwhCCALIBFqIQsgACARayIADQAMAgsLAkACQAJAQQAtAImKASIHQQZ0QQBBAC0AiIoBIhFrRg0AIAEgEToAaCABQQApA4CKATcDYCABQQApA/iJATcDWCABQQApA/CJATcDUCABQQApA+iJATcDSCABQQApA+CJATcDQCABQQApA9iJATcDOCABQQApA9CJATcDMCABQQApA8iJATcDKCABQQApA8CJASIINwMgIAFBACkDuIkBIgM3AxggAUEAKQOwiQEiBDcDECABQQApA6iJASIFNwMIIAFBACkDoIkBIgY3AwAgAUEALQCKigEiEyAHRXJBAnIiCzoAaSATQQRyIRNBACkDmIkBIQ1BACkDkIkBIQ5BACkDiIkBIQ9BACkDgIkBIRAMAQtBwAAhESABQcAAOgBoQgAhCCABQgA3AyAgAUEAKQOYiQEiDTcDGCABQQApA5CJASIONwMQIAFBACkDiIkBIg83AwggAUEAKQOAiQEiEDcDACABQQAtAIqKAUEEciITOgBpIAEgAkF+aiICQQV0IgdByYoBaikDADcDYCABIAdBwYoBaikDADcDWCABIAdBuYoBaikDADcDUCABIAdBsYoBaikDADcDSCABIAdBqYoBaikDADcDQCABIAdBoYoBaikDADcDOCABIAdBmYoBaikDADcDMCABIAdBkYoBaikDADcDKCATIQsgECEGIA8hBSAOIQQgDSEDIAJFDQELIAJBf2oiB0EFdCIUQZGKAWopAwAhFSAUQZmKAWopAwAhFiAUQaGKAWopAwAhFyAUQamKAWopAwAhGCABIAM3A4gBIAEgBDcDgAEgASAFNwN4IAEgBjcDcCABQbABaiABQfAAaiABQShqIhQgESAIIAtB/wFxEAIgASATOgBpIAFBwAA6AGggASAYNwNAIAEgFzcDOCABIBY3AzAgASAVNwMoIAFCADcDICABIA03AxggASAONwMQIAEgDzcDCCABIBA3AwAgASABKQPoASABKQPIAYU3A2AgASABKQPgASABKQPAAYU3A1ggASABKQPYASABKQO4AYU3A1AgASABKQPQASABKQOwAYU3A0ggB0UNACACQQV0QemJAWohAiATQf8BcSERA0AgAkFoaikDACEIIAJBcGopAwAhAyACQXhqKQMAIQQgAikDACEFIAEgDTcDiAEgASAONwOAASABIA83A3ggASAQNwNwIAFBsAFqIAFB8ABqIBRBwABCACAREAIgASATOgBpIAFBwAA6AGggASAFNwNAIAEgBDcDOCABIAM3AzAgASAINwMoIAFCADcDICABIA03AxggASAONwMQIAEgDzcDCCABIBA3AwAgASABKQPoASABKQPIAYU3A2AgASABKQPgASABKQPAAYU3A1ggASABKQPYASABKQO4AYU3A1AgASABKQPQASABKQOwAYU3A0ggAkFgaiECIAdBf2oiBw0ACwsgAUEoaiEJQgAhCEGACSELIBNBCHJB/wFxIQoDQCABQbABaiABIAlBwAAgCCAKEAIgASABKQPQASIDIAEpA7ABhTcDcCABIAEpA9gBIgQgASkDuAGFNwN4IAEgASkD4AEiBSABKQPAAYU3A4ABIAEgDSABKQPoASIGhTcDqAEgASAOIAWFNwOgASABIA8gBIU3A5gBIAEgECADhTcDkAEgASAGIAEpA8gBhTcDiAEgAEHAACAAQcAASRsiEUF/aiESAkACQCARQQdxIhMNACABQfAAaiECIAshByARIRQMAQsgEUH4AHEhFCABQfAAaiECIAshBwNAIAcgAi0AADoAACAHQQFqIQcgAkEBaiECIBNBf2oiEw0ACwsCQCASQQdJDQADQCAHIAIpAAA3AAAgB0EIaiEHIAJBCGohAiAUQXhqIhQNAAsLIAhCAXwhCCALIBFqIQsgACARayIADQALCyABQfABaiQAC6MCAQR+AkACQCAAQSBGDQBCq7OP/JGjs/DbACEBQv+kuYjFkdqCm38hAkLy5rvjo6f9p6V/IQNC58yn0NbQ67O7fyEEQQAhAAwBC0EAKQOYCSEBQQApA5AJIQJBACkDiAkhA0EAKQOACSEEQRAhAAtBACAAOgCKigFBAEIANwOAigFBAEIANwP4iQFBAEIANwPwiQFBAEIANwPoiQFBAEIANwPgiQFBAEIANwPYiQFBAEIANwPQiQFBAEIANwPIiQFBAEIANwPAiQFBACABNwO4iQFBACACNwOwiQFBACADNwOoiQFBACAENwOgiQFBACABNwOYiQFBACACNwOQiQFBACADNwOIiQFBACAENwOAiQFBAEEAOgCQigFBAEEAOwGIigELBgAgABADCwYAIAAQBwsGAEGAiQELqwIBBH4CQAJAIAFBIEYNAEKrs4/8kaOz8NsAIQNC/6S5iMWR2oKbfyEEQvLmu+Ojp/2npX8hBULnzKfQ1tDrs7t/IQZBACEBDAELQQApA5gJIQNBACkDkAkhBEEAKQOICSEFQQApA4AJIQZBECEBC0EAIAE6AIqKAUEAQgA3A4CKAUEAQgA3A/iJAUEAQgA3A/CJAUEAQgA3A+iJAUEAQgA3A+CJAUEAQgA3A9iJAUEAQgA3A9CJAUEAQgA3A8iJAUEAQgA3A8CJAUEAIAM3A7iJAUEAIAQ3A7CJAUEAIAU3A6iJAUEAIAY3A6CJAUEAIAM3A5iJAUEAIAQ3A5CJAUEAIAU3A4iJAUEAIAY3A4CJAUEAQQA6AJCKAUEAQQA7AYiKASAAEAMgAhAHCwsLAQBBgAgLBHgHAAA="; + var hash$h = "215d875f"; + var wasmJson$h = { + name: name$h, + data: data$h, + hash: hash$h + }; + + const mutex$i = new Mutex(); + let wasmCache$i = null; + function validateBits$2(bits) { + if (!Number.isInteger(bits) || bits < 8 || bits % 8 !== 0) { + return new Error("Invalid variant! Valid values: 8, 16, ..."); + } + return null; + } + /** + * Calculates BLAKE3 hash + * @param data Input data (string, Buffer or TypedArray) + * @param bits Number of output bits, which has to be a number + * divisible by 8. Defaults to 256. + * @param key Optional key (string, Buffer or TypedArray). Length should be 32 bytes. + * @returns Computed hash as a hexadecimal string + */ + function blake3(data, bits = 256, key = null) { + if (validateBits$2(bits)) { + return Promise.reject(validateBits$2(bits)); + } + let keyBuffer = null; + let initParam = 0; // key is empty by default + if (key !== null) { + keyBuffer = getUInt8Buffer(key); + if (keyBuffer.length !== 32) { + return Promise.reject(new Error("Key length must be exactly 32 bytes")); + } + initParam = 32; + } + const hashLength = bits / 8; + const digestParam = hashLength; + if (wasmCache$i === null || wasmCache$i.hashLength !== hashLength) { + return lockedCreate(mutex$i, wasmJson$h, hashLength).then((wasm) => { + wasmCache$i = wasm; + if (initParam === 32) { + wasmCache$i.writeMemory(keyBuffer); + } + return wasmCache$i.calculate(data, initParam, digestParam); + }); + } + try { + if (initParam === 32) { + wasmCache$i.writeMemory(keyBuffer); + } + const hash = wasmCache$i.calculate(data, initParam, digestParam); + return Promise.resolve(hash); + } + catch (err) { + return Promise.reject(err); + } + } + /** + * Creates a new BLAKE3 hash instance + * @param bits Number of output bits, which has to be a number + * divisible by 8. Defaults to 256. + * @param key Optional key (string, Buffer or TypedArray). Length should be 32 bytes. + */ + function createBLAKE3(bits = 256, key = null) { + if (validateBits$2(bits)) { + return Promise.reject(validateBits$2(bits)); + } + let keyBuffer = null; + let initParam = 0; // key is empty by default + if (key !== null) { + keyBuffer = getUInt8Buffer(key); + if (keyBuffer.length !== 32) { + return Promise.reject(new Error("Key length must be exactly 32 bytes")); + } + initParam = 32; + } + const outputSize = bits / 8; + const digestParam = outputSize; + return WASMInterface(wasmJson$h, outputSize).then((wasm) => { + if (initParam === 32) { + wasm.writeMemory(keyBuffer); + } + wasm.init(initParam); + const obj = { + init: initParam === 32 + ? () => { + wasm.writeMemory(keyBuffer); + wasm.init(initParam); + return obj; + } + : () => { + wasm.init(initParam); + return obj; + }, + update: (data) => { + wasm.update(data); + return obj; + }, + // biome-ignore lint/suspicious/noExplicitAny: Conflict with IHasher type + digest: (outputType) => wasm.digest(outputType, digestParam), + save: () => wasm.save(), + load: (data) => { + wasm.load(data); + return obj; + }, + blockSize: 64, + digestSize: outputSize, + }; + return obj; + }); + } + + var name$g = "crc32"; + var data$g = "AGFzbQEAAAABEQRgAAF/YAF/AGAAAGACf38AAwgHAAEBAQIAAwUEAQECAgYOAn8BQZDJBQt/AEGACAsHcAgGbWVtb3J5AgAOSGFzaF9HZXRCdWZmZXIAAAlIYXNoX0luaXQAAgtIYXNoX1VwZGF0ZQADCkhhc2hfRmluYWwABA1IYXNoX0dldFN0YXRlAAUOSGFzaF9DYWxjdWxhdGUABgpTVEFURV9TSVpFAwEKkggHBQBBgAkLwwMBA39BgIkBIQFBACECA0AgAUEAQQBBAEEAQQBBAEEAQQAgAkEBcWsgAHEgAkEBdnMiA0EBcWsgAHEgA0EBdnMiA0EBcWsgAHEgA0EBdnMiA0EBcWsgAHEgA0EBdnMiA0EBcWsgAHEgA0EBdnMiA0EBcWsgAHEgA0EBdnMiA0EBcWsgAHEgA0EBdnMiA0EBcWsgAHEgA0EBdnM2AgAgAUEEaiEBIAJBAWoiAkGAAkcNAAtBACEAA0AgAEGEkQFqIABBhIkBaigCACICQf8BcUECdEGAiQFqKAIAIAJBCHZzIgI2AgAgAEGEmQFqIAJB/wFxQQJ0QYCJAWooAgAgAkEIdnMiAjYCACAAQYShAWogAkH/AXFBAnRBgIkBaigCACACQQh2cyICNgIAIABBhKkBaiACQf8BcUECdEGAiQFqKAIAIAJBCHZzIgI2AgAgAEGEsQFqIAJB/wFxQQJ0QYCJAWooAgAgAkEIdnMiAjYCACAAQYS5AWogAkH/AXFBAnRBgIkBaigCACACQQh2cyICNgIAIABBhMEBaiACQf8BcUECdEGAiQFqKAIAIAJBCHZzNgIAIABBBGoiAEH8B0cNAAsLJwACQEEAKAKAyQEgAEYNACAAEAFBACAANgKAyQELQQBBADYChMkBC4gDAQN/QQAoAoTJAUF/cyEBQYAJIQICQCAAQQhJDQBBgAkhAgNAIAJBBGooAgAiA0EOdkH8B3FBgJEBaigCACADQRZ2QfwHcUGAiQFqKAIAcyADQQZ2QfwHcUGAmQFqKAIAcyADQf8BcUECdEGAoQFqKAIAcyACKAIAIAFzIgFBFnZB/AdxQYCpAWooAgBzIAFBDnZB/AdxQYCxAWooAgBzIAFBBnZB/AdxQYC5AWooAgBzIAFB/wFxQQJ0QYDBAWooAgBzIQEgAkEIaiECIABBeGoiAEEHSw0ACwsCQCAARQ0AAkACQCAAQQFxDQAgACEDDAELIAFB/wFxIAItAABzQQJ0QYCJAWooAgAgAUEIdnMhASACQQFqIQIgAEF/aiEDCyAAQQFGDQADQCABQf8BcSACLQAAc0ECdEGAiQFqKAIAIAFBCHZzIgFB/wFxIAJBAWotAABzQQJ0QYCJAWooAgAgAUEIdnMhASACQQJqIQIgA0F+aiIDDQALC0EAIAFBf3M2AoTJAQsyAQF/QQBBACgChMkBIgBBGHQgAEGA/gNxQQh0ciAAQQh2QYD+A3EgAEEYdnJyNgKACQsGAEGEyQELWQACQEEAKAKAyQEgAUYNACABEAFBACABNgKAyQELQQBBADYChMkBIAAQA0EAQQAoAoTJASIBQRh0IAFBgP4DcUEIdHIgAUEIdkGA/gNxIAFBGHZycjYCgAkLCwsBAEGACAsEBAAAAA=="; + var hash$g = "d2eba587"; + var wasmJson$g = { + name: name$g, + data: data$g, + hash: hash$g + }; + + const mutex$h = new Mutex(); + let wasmCache$h = null; + function validatePoly(poly) { + if (!Number.isInteger(poly) || poly < 0 || poly > 0xffffffff) { + return new Error("Polynomial must be a valid 32-bit long unsigned integer"); + } + return null; + } + /** + * Calculates CRC-32 hash + * @param data Input data (string, Buffer or TypedArray) + * @param polynomial Input polynomial (defaults to 0xedb88320, for CRC32C use 0x82f63b78) + * @returns Computed hash as a hexadecimal string + */ + function crc32(data, polynomial = 0xedb88320) { + if (validatePoly(polynomial)) { + return Promise.reject(validatePoly(polynomial)); + } + if (wasmCache$h === null) { + return lockedCreate(mutex$h, wasmJson$g, 4).then((wasm) => { + wasmCache$h = wasm; + return wasmCache$h.calculate(data, polynomial); + }); + } + try { + const hash = wasmCache$h.calculate(data, polynomial); + return Promise.resolve(hash); + } + catch (err) { + return Promise.reject(err); + } + } + /** + * Creates a new CRC-32 hash instance + * @param polynomial Input polynomial (defaults to 0xedb88320, for CRC32C use 0x82f63b78) + */ + function createCRC32(polynomial = 0xedb88320) { + if (validatePoly(polynomial)) { + return Promise.reject(validatePoly(polynomial)); + } + return WASMInterface(wasmJson$g, 4).then((wasm) => { + wasm.init(polynomial); + const obj = { + init: () => { + wasm.init(polynomial); + return obj; + }, + update: (data) => { + wasm.update(data); + return obj; + }, + // biome-ignore lint/suspicious/noExplicitAny: Conflict with IHasher type + digest: (outputType) => wasm.digest(outputType), + save: () => wasm.save(), + load: (data) => { + wasm.load(data); + return obj; + }, + blockSize: 4, + digestSize: 4, + }; + return obj; + }); + } + + var name$f = "crc64"; + var data$f = "AGFzbQEAAAABDANgAAF/YAAAYAF/AAMHBgABAgEAAQUEAQECAgYOAn8BQZCJBgt/AEGACAsHcAgGbWVtb3J5AgAOSGFzaF9HZXRCdWZmZXIAAAlIYXNoX0luaXQAAQtIYXNoX1VwZGF0ZQACCkhhc2hfRmluYWwAAw1IYXNoX0dldFN0YXRlAAQOSGFzaF9DYWxjdWxhdGUABQpTVEFURV9TSVpFAwEKgwgGBQBBgAkL9QMDAX4BfwJ+AkBBACkDgIkCQQApA4AJIgBRDQBBgIkBIQFCACECA0AgAUIAQgBCAEIAQgBCAEIAQgAgAkIBg30gAIMgAkIBiIUiA0IBg30gAIMgA0IBiIUiA0IBg30gAIMgA0IBiIUiA0IBg30gAIMgA0IBiIUiA0IBg30gAIMgA0IBiIUiA0IBg30gAIMgA0IBiIUiA0IBg30gAIMgA0IBiIUiA0IBg30gAIMgA0IBiIU3AwAgAUEIaiEBIAJCAXwiAkKAAlINAAtBACEBA0AgAUGImQFqIAFBiIkBaikDACICp0H/AXFBA3RBgIkBaikDACACQgiIhSICNwMAIAFBiKkBaiACp0H/AXFBA3RBgIkBaikDACACQgiIhSICNwMAIAFBiLkBaiACp0H/AXFBA3RBgIkBaikDACACQgiIhSICNwMAIAFBiMkBaiACp0H/AXFBA3RBgIkBaikDACACQgiIhSICNwMAIAFBiNkBaiACp0H/AXFBA3RBgIkBaikDACACQgiIhSICNwMAIAFBiOkBaiACp0H/AXFBA3RBgIkBaikDACACQgiIhSICNwMAIAFBiPkBaiACp0H/AXFBA3RBgIkBaikDACACQgiIhTcDACABQQhqIgFB+A9HDQALQQAgADcDgIkCC0EAQgA3A4iJAguUAwIBfgJ/QQApA4iJAkJ/hSEBQYAJIQICQCAAQQhJDQBBgAkhAgNAIAIpAwAgAYUiAUIwiKdB/wFxQQN0QYCZAWopAwAgAUI4iKdBA3RBgIkBaikDAIUgAUIoiKdB/wFxQQN0QYCpAWopAwCFIAFCIIinQf8BcUEDdEGAuQFqKQMAhSABpyIDQRV2QfgPcUGAyQFqKQMAhSADQQ12QfgPcUGA2QFqKQMAhSADQQV2QfgPcUGA6QFqKQMAhSADQf8BcUEDdEGA+QFqKQMAhSEBIAJBCGohAiAAQXhqIgBBB0sNAAsLAkAgAEUNAAJAAkAgAEEBcQ0AIAAhAwwBCyABQv8BgyACMQAAhadBA3RBgIkBaikDACABQgiIhSEBIAJBAWohAiAAQX9qIQMLIABBAUYNAANAIAFC/wGDIAIxAACFp0EDdEGAiQFqKQMAIAFCCIiFIgFC/wGDIAJBAWoxAACFp0EDdEGAiQFqKQMAIAFCCIiFIQEgAkECaiECIANBfmoiAw0ACwtBACABQn+FNwOIiQILZAEBfkEAQQApA4iJAiIAQjiGIABCgP4Dg0IohoQgAEKAgPwHg0IYhiAAQoCAgPgPg0IIhoSEIABCCIhCgICA+A+DIABCGIhCgID8B4OEIABCKIhCgP4DgyAAQjiIhISENwOACQsGAEGIiQILAgALCwsBAEGACAsECAAAAA=="; + var hash$f = "c5ac6c16"; + var wasmJson$f = { + name: name$f, + data: data$f, + hash: hash$f + }; + + const mutex$g = new Mutex(); + let wasmCache$g = null; + const polyBuffer = new Uint8Array(8); + function parsePoly(poly) { + const errText = "Polynomial must be provided as a 16 char long hex string"; + if (typeof poly !== "string" || poly.length !== 16) { + return { hi: 0, lo: 0, err: new Error(errText) }; + } + const hi = Number(`0x${poly.slice(0, 8)}`); + const lo = Number(`0x${poly.slice(8)}`); + if (Number.isNaN(hi) || Number.isNaN(lo)) { + return { hi, lo, err: new Error(errText) }; + } + return { hi, lo, err: null }; + } + function writePoly(arr, lo, hi) { + // write in little-endian format + const buffer = new DataView(arr); + buffer.setUint32(0, lo, true); + buffer.setUint32(4, hi, true); + } + /** + * Calculates CRC-64 hash + * @param data Input data (string, Buffer or TypedArray) + * @param polynomial Input polynomial (defaults to 'c96c5795d7870f42' - ECMA) + * @returns Computed hash as a hexadecimal string + */ + function crc64(data, polynomial = "c96c5795d7870f42") { + const { hi, lo, err } = parsePoly(polynomial); + if (err !== null) { + return Promise.reject(err); + } + if (wasmCache$g === null) { + return lockedCreate(mutex$g, wasmJson$f, 8).then((wasm) => { + wasmCache$g = wasm; + writePoly(polyBuffer.buffer, lo, hi); + wasmCache$g.writeMemory(polyBuffer); + return wasmCache$g.calculate(data); + }); + } + try { + writePoly(polyBuffer.buffer, lo, hi); + wasmCache$g.writeMemory(polyBuffer); + const hash = wasmCache$g.calculate(data); + return Promise.resolve(hash); + } + catch (err) { + return Promise.reject(err); + } + } + /** + * Creates a new CRC-64 hash instance + * @param polynomial Input polynomial (defaults to 'c96c5795d7870f42' - ECMA) + */ + function createCRC64(polynomial = "c96c5795d7870f42") { + const { hi, lo, err } = parsePoly(polynomial); + if (err !== null) { + return Promise.reject(err); + } + return WASMInterface(wasmJson$f, 8).then((wasm) => { + const instanceBuffer = new Uint8Array(8); + writePoly(instanceBuffer.buffer, lo, hi); + wasm.writeMemory(instanceBuffer); + wasm.init(); + const obj = { + init: () => { + wasm.writeMemory(instanceBuffer); + wasm.init(); + return obj; + }, + update: (data) => { + wasm.update(data); + return obj; + }, + // biome-ignore lint/suspicious/noExplicitAny: Conflict with IHasher type + digest: (outputType) => wasm.digest(outputType), + save: () => wasm.save(), + load: (data) => { + wasm.load(data); + return obj; + }, + blockSize: 8, + digestSize: 8, + }; + return obj; + }); + } + + var name$e = "md4"; + var data$e = "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"; + var hash$e = "bd8ce7c7"; + var wasmJson$e = { + name: name$e, + data: data$e, + hash: hash$e + }; + + const mutex$f = new Mutex(); + let wasmCache$f = null; + /** + * Calculates MD4 hash + * @param data Input data (string, Buffer or TypedArray) + * @returns Computed hash as a hexadecimal string + */ + function md4(data) { + if (wasmCache$f === null) { + return lockedCreate(mutex$f, wasmJson$e, 16).then((wasm) => { + wasmCache$f = wasm; + return wasmCache$f.calculate(data); + }); + } + try { + const hash = wasmCache$f.calculate(data); + return Promise.resolve(hash); + } + catch (err) { + return Promise.reject(err); + } + } + /** + * Creates a new MD4 hash instance + */ + function createMD4() { + return WASMInterface(wasmJson$e, 16).then((wasm) => { + wasm.init(); + const obj = { + init: () => { + wasm.init(); + return obj; + }, + update: (data) => { + wasm.update(data); + return obj; + }, + // biome-ignore lint/suspicious/noExplicitAny: Conflict with IHasher type + digest: (outputType) => wasm.digest(outputType), + save: () => wasm.save(), + load: (data) => { + wasm.load(data); + return obj; + }, + blockSize: 64, + digestSize: 16, + }; + return obj; + }); + } + + var name$d = "md5"; + var data$d = "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"; + var hash$d = "e6508e4b"; + var wasmJson$d = { + name: name$d, + data: data$d, + hash: hash$d + }; + + const mutex$e = new Mutex(); + let wasmCache$e = null; + /** + * Calculates MD5 hash + * @param data Input data (string, Buffer or TypedArray) + * @returns Computed hash as a hexadecimal string + */ + function md5(data) { + if (wasmCache$e === null) { + return lockedCreate(mutex$e, wasmJson$d, 16).then((wasm) => { + wasmCache$e = wasm; + return wasmCache$e.calculate(data); + }); + } + try { + const hash = wasmCache$e.calculate(data); + return Promise.resolve(hash); + } + catch (err) { + return Promise.reject(err); + } + } + /** + * Creates a new MD5 hash instance + */ + function createMD5() { + return WASMInterface(wasmJson$d, 16).then((wasm) => { + wasm.init(); + const obj = { + init: () => { + wasm.init(); + return obj; + }, + update: (data) => { + wasm.update(data); + return obj; + }, + // biome-ignore lint/suspicious/noExplicitAny: Conflict with IHasher type + digest: (outputType) => wasm.digest(outputType), + save: () => wasm.save(), + load: (data) => { + wasm.load(data); + return obj; + }, + blockSize: 64, + digestSize: 16, + }; + return obj; + }); + } + + var name$c = "sha1"; + var data$c = "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"; + var hash$c = "6b530c24"; + var wasmJson$c = { + name: name$c, + data: data$c, + hash: hash$c + }; + + const mutex$d = new Mutex(); + let wasmCache$d = null; + /** + * Calculates SHA-1 hash + * @param data Input data (string, Buffer or TypedArray) + * @returns Computed hash as a hexadecimal string + */ + function sha1(data) { + if (wasmCache$d === null) { + return lockedCreate(mutex$d, wasmJson$c, 20).then((wasm) => { + wasmCache$d = wasm; + return wasmCache$d.calculate(data); + }); + } + try { + const hash = wasmCache$d.calculate(data); + return Promise.resolve(hash); + } + catch (err) { + return Promise.reject(err); + } + } + /** + * Creates a new SHA-1 hash instance + */ + function createSHA1() { + return WASMInterface(wasmJson$c, 20).then((wasm) => { + wasm.init(); + const obj = { + init: () => { + wasm.init(); + return obj; + }, + update: (data) => { + wasm.update(data); + return obj; + }, + // biome-ignore lint/suspicious/noExplicitAny: Conflict with IHasher type + digest: (outputType) => wasm.digest(outputType), + save: () => wasm.save(), + load: (data) => { + wasm.load(data); + return obj; + }, + blockSize: 64, + digestSize: 20, + }; + return obj; + }); + } + + var name$b = "sha3"; + var data$b = "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"; + var hash$b = "fb24e536"; + var wasmJson$b = { + name: name$b, + data: data$b, + hash: hash$b + }; + + const mutex$c = new Mutex(); + let wasmCache$c = null; + function validateBits$1(bits) { + if (![224, 256, 384, 512].includes(bits)) { + return new Error("Invalid variant! Valid values: 224, 256, 384, 512"); + } + return null; + } + /** + * Calculates SHA-3 hash + * @param data Input data (string, Buffer or TypedArray) + * @param bits Number of output bits. Valid values: 224, 256, 384, 512 + * @returns Computed hash as a hexadecimal string + */ + function sha3(data, bits = 512) { + if (validateBits$1(bits)) { + return Promise.reject(validateBits$1(bits)); + } + const hashLength = bits / 8; + if (wasmCache$c === null || wasmCache$c.hashLength !== hashLength) { + return lockedCreate(mutex$c, wasmJson$b, hashLength).then((wasm) => { + wasmCache$c = wasm; + return wasmCache$c.calculate(data, bits, 0x06); + }); + } + try { + const hash = wasmCache$c.calculate(data, bits, 0x06); + return Promise.resolve(hash); + } + catch (err) { + return Promise.reject(err); + } + } + /** + * Creates a new SHA-3 hash instance + * @param bits Number of output bits. Valid values: 224, 256, 384, 512 + */ + function createSHA3(bits = 512) { + if (validateBits$1(bits)) { + return Promise.reject(validateBits$1(bits)); + } + const outputSize = bits / 8; + return WASMInterface(wasmJson$b, outputSize).then((wasm) => { + wasm.init(bits); + const obj = { + init: () => { + wasm.init(bits); + return obj; + }, + update: (data) => { + wasm.update(data); + return obj; + }, + // biome-ignore lint/suspicious/noExplicitAny: Conflict with IHasher type + digest: (outputType) => wasm.digest(outputType, 0x06), + save: () => wasm.save(), + load: (data) => { + wasm.load(data); + return obj; + }, + blockSize: 200 - 2 * outputSize, + digestSize: outputSize, + }; + return obj; + }); + } + + const mutex$b = new Mutex(); + let wasmCache$b = null; + function validateBits(bits) { + if (![224, 256, 384, 512].includes(bits)) { + return new Error("Invalid variant! Valid values: 224, 256, 384, 512"); + } + return null; + } + /** + * Calculates Keccak hash + * @param data Input data (string, Buffer or TypedArray) + * @param bits Number of output bits. Valid values: 224, 256, 384, 512 + * @returns Computed hash as a hexadecimal string + */ + function keccak(data, bits = 512) { + if (validateBits(bits)) { + return Promise.reject(validateBits(bits)); + } + const hashLength = bits / 8; + if (wasmCache$b === null || wasmCache$b.hashLength !== hashLength) { + return lockedCreate(mutex$b, wasmJson$b, hashLength).then((wasm) => { + wasmCache$b = wasm; + return wasmCache$b.calculate(data, bits, 0x01); + }); + } + try { + const hash = wasmCache$b.calculate(data, bits, 0x01); + return Promise.resolve(hash); + } + catch (err) { + return Promise.reject(err); + } + } + /** + * Creates a new Keccak hash instance + * @param bits Number of output bits. Valid values: 224, 256, 384, 512 + */ + function createKeccak(bits = 512) { + if (validateBits(bits)) { + return Promise.reject(validateBits(bits)); + } + const outputSize = bits / 8; + return WASMInterface(wasmJson$b, outputSize).then((wasm) => { + wasm.init(bits); + const obj = { + init: () => { + wasm.init(bits); + return obj; + }, + update: (data) => { + wasm.update(data); + return obj; + }, + // biome-ignore lint/suspicious/noExplicitAny: Conflict with IHasher type + digest: (outputType) => wasm.digest(outputType, 0x01), + save: () => wasm.save(), + load: (data) => { + wasm.load(data); + return obj; + }, + blockSize: 200 - 2 * outputSize, + digestSize: outputSize, + }; + return obj; + }); + } + + var name$a = "sha256"; + var data$a = "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c2pBx6KerX1qIhkgASADcyACcSABIANxcyABQR53IAFBE3dzIAFBCndzaiAaaiICaiIJIBMgEnNxIBJzaiAJQRp3IAlBFXdzIAlBB3dzakHRxqk2aiIaIAIgAXMgA3EgAiABcXMgAkEedyACQRN3cyACQQp3c2ogGGoiA2oiESAJIBNzcSATc2ogEUEadyARQRV3cyARQQd3c2pB59KkoQFqIhggAyACcyABcSADIAJxcyADQR53IANBE3dzIANBCndzaiAUaiIBaiISIBEgCXNxIAlzaiASQRp3IBJBFXdzIBJBB3dzakGFldy9AmoiFCABIANzIAJxIAEgA3FzIAFBHncgAUETd3MgAUEKd3NqIBdqIgJqIhMgI2ogJiASaiAiIBFqICUgCWogEyASIBFzcSARc2ogE0EadyATQRV3cyATQQd3c2pBuMLs8AJqIhcgAiABcyADcSACIAFxcyACQR53IAJBE3dzIAJBCndzaiAZaiIDaiIJIBMgEnNxIBJzaiAJQRp3IAlBFXdzIAlBB3dzakH827HpBGoiGSADIAJzIAFxIAMgAnFzIANBHncgA0ETd3MgA0EKd3NqIBpqIgFqIhEgCSATc3EgE3NqIBFBGncgEUEVd3MgEUEHd3NqQZOa4JkFaiIaIAEgA3MgAnEgASADcXMgAUEedyABQRN3cyABQQp3c2ogGGoiAmoiEiARIAlzcSAJc2ogEkEadyASQRV3cyASQQd3c2pB1OapqAZqIhggAiABcyADcSACIAFxcyACQR53IAJBE3dzIAJBCndzaiAUaiIDaiITaiAoIBJqICQgEWogJyAJaiATIBIgEXNxIBFzaiATQRp3IBNBFXdzIBNBB3dzakG7laizB2oiFCADIAJzIAFxIAMgAnFzIANBHncgA0ETd3MgA0EKd3NqIBdqIgFqIgkgEyASc3EgEnNqIAlBGncgCUEVd3MgCUEHd3NqQa6Si454aiIXIAEgA3MgAnEgASADcXMgAUEedyABQRN3cyABQQp3c2ogGWoiAmoiESAJIBNzcSATc2ogEUEadyARQRV3cyARQQd3c2pBhdnIk3lqIhkgAiABcyADcSACIAFxcyACQR53IAJBE3dzIAJBCndzaiAaaiIDaiISIBEgCXNxIAlzaiASQRp3IBJBFXdzIBJBB3dzakGh0f+VemoiGiADIAJz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"; + var hash$a = "8c18dd94"; + var wasmJson$a = { + name: name$a, + data: data$a, + hash: hash$a + }; + + const mutex$a = new Mutex(); + let wasmCache$a = null; + /** + * Calculates SHA-2 (SHA-224) hash + * @param data Input data (string, Buffer or TypedArray) + * @returns Computed hash as a hexadecimal string + */ + function sha224(data) { + if (wasmCache$a === null) { + return lockedCreate(mutex$a, wasmJson$a, 28).then((wasm) => { + wasmCache$a = wasm; + return wasmCache$a.calculate(data, 224); + }); + } + try { + const hash = wasmCache$a.calculate(data, 224); + return Promise.resolve(hash); + } + catch (err) { + return Promise.reject(err); + } + } + /** + * Creates a new SHA-2 (SHA-224) hash instance + */ + function createSHA224() { + return WASMInterface(wasmJson$a, 28).then((wasm) => { + wasm.init(224); + const obj = { + init: () => { + wasm.init(224); + return obj; + }, + update: (data) => { + wasm.update(data); + return obj; + }, + // biome-ignore lint/suspicious/noExplicitAny: Conflict with IHasher type + digest: (outputType) => wasm.digest(outputType), + save: () => wasm.save(), + load: (data) => { + wasm.load(data); + return obj; + }, + blockSize: 64, + digestSize: 28, + }; + return obj; + }); + } + + const mutex$9 = new Mutex(); + let wasmCache$9 = null; + /** + * Calculates SHA-2 (SHA-256) hash + * @param data Input data (string, Buffer or TypedArray) + * @returns Computed hash as a hexadecimal string + */ + function sha256(data) { + if (wasmCache$9 === null) { + return lockedCreate(mutex$9, wasmJson$a, 32).then((wasm) => { + wasmCache$9 = wasm; + return wasmCache$9.calculate(data, 256); + }); + } + try { + const hash = wasmCache$9.calculate(data, 256); + return Promise.resolve(hash); + } + catch (err) { + return Promise.reject(err); + } + } + /** + * Creates a new SHA-2 (SHA-256) hash instance + */ + function createSHA256() { + return WASMInterface(wasmJson$a, 32).then((wasm) => { + wasm.init(256); + const obj = { + init: () => { + wasm.init(256); + return obj; + }, + update: (data) => { + wasm.update(data); + return obj; + }, + // biome-ignore lint/suspicious/noExplicitAny: Conflict with IHasher type + digest: (outputType) => wasm.digest(outputType), + save: () => wasm.save(), + load: (data) => { + wasm.load(data); + return obj; + }, + blockSize: 64, + digestSize: 32, + }; + return obj; + }); + } + + var name$9 = "sha512"; + var data$9 = "AGFzbQEAAAABEQRgAAF/YAF/AGAAAGACf38AAwgHAAEBAQIAAwUEAQECAgYOAn8BQdCKBQt/AEGACAsHcAgGbWVtb3J5AgAOSGFzaF9HZXRCdWZmZXIAAAlIYXNoX0luaXQAAQtIYXNoX1VwZGF0ZQACCkhhc2hfRmluYWwABA1IYXNoX0dldFN0YXRlAAUOSGFzaF9DYWxjdWxhdGUABgpTVEFURV9TSVpFAwEKlWgHBQBBgAkLmwIAQQBCADcDgIoBQQBBMEHAACAAQYADRiIAGzYCyIoBQQBCpJ/p99uD0trHAEL5wvibkaOz8NsAIAAbNwPAigFBAEKnn+an1sGLhltC6/qG2r+19sEfIAAbNwO4igFBAEKRquDC9tCS2o5/Qp/Y+dnCkdqCm38gABs3A7CKAUEAQrGWgP7/zMmZ5wBC0YWa7/rPlIfRACAAGzcDqIoBQQBCubK5uI+b+5cVQvHt9Pilp/2npX8gABs3A6CKAUEAQpe6w4Ojq8CskX9Cq/DT9K/uvLc8IAAbNwOYigFBAEKHqvOzo6WKzeIAQrvOqqbY0Ouzu38gABs3A5CKAUEAQti9lojcq+fdS0KIkvOd/8z5hOoAIAAbNwOIigEL8gICAX4Gf0EAQQApA4CKASIBIACtfDcDgIoBAkACQAJAIAGnQf8AcSICDQBBgAkhAwwBCwJAQYABIAJrIgQgACAEIABJGyIDRQ0AIANBA3EhBSACQYCJAWohBkEAIQICQCADQQRJDQAgA0H8AXEhB0EAIQIDQCAGIAJqIgMgAkGACWotAAA6AAAgA0EBaiACQYEJai0AADoAACADQQJqIAJBgglqLQAAOgAAIANBA2ogAkGDCWotAAA6AAAgByACQQRqIgJHDQALCyAFRQ0AA0AgBiACaiACQYAJai0AADoAACACQQFqIQIgBUF/aiIFDQALCyAAIARJDQFBgIkBEAMgACAEayEAIARBgAlqIQMLAkAgAEGAAUkNAANAIAMQAyADQYABaiEDIABBgH9qIgBB/wBLDQALCyAARQ0AQQAhAkEAIQUDQCACQYCJAWogAyACai0AADoAACACQQFqIQIgACAFQQFqIgVB/wFxSw0ACwsL3FYBVn5BACAAKQMIIgFCOIYgAUKA/gODQiiGhCABQoCA/AeDQhiGIAFCgICA+A+DQgiGhIQgAUIIiEKAgID4D4MgAUIYiEKAgPwHg4QgAUIoiEKA/gODIAFCOIiEhIQiAkI/iSACQjiJhSACQgeIhSAAKQMAIgFCOIYgAUKA/gODQiiGhCABQoCA/AeDQhiGIAFCgICA+A+DQgiGhIQgAUIIiEKAgID4D4MgAUIYiEKAgPwHg4QgAUIoiEKA/gODIAFCOIiEhIQiA3wgACkDSCIBQjiGIAFCgP4Dg0IohoQgAUKAgPwHg0IYhiABQoCAgPgPg0IIhoSEIAFCCIhCgICA+A+DIAFCGIhCgID8B4OEIAFCKIhCgP4DgyABQjiIhISEIgR8IAApA3AiAUI4hiABQoD+A4NCKIaEIAFCgID8B4NCGIYgAUKAgID4D4NCCIaEhCABQgiIQoCAgPgPgyABQhiIQoCA/AeDhCABQiiIQoD+A4MgAUI4iISEhCIFQi2JIAVCA4mFIAVCBoiFfCIGQj+JIAZCOImFIAZCB4iFIAApA3giAUI4hiABQoD+A4NCKIaEIAFCgID8B4NCGIYgAUKAgID4D4NCCIaEhCABQgiIQoCAgPgPgyABQhiIQoCA/AeDhCABQiiIQoD+A4MgAUI4iISEhCIHfCAEQj+JIARCOImFIARCB4iFIAApA0AiAUI4hiABQoD+A4NCKIaEIAFCgID8B4NCGIYgAUKAgID4D4NCCIaEhCABQgiIQoCAgPgPgyABQhiIQoCA/AeDhCABQiiIQoD+A4MgAUI4iISEhCIIfCAAKQMQIgFCOIYgAUKA/gODQiiGhCABQoCA/AeDQhiGIAFCgICA+A+DQgiGhIQgAUIIiEKAgID4D4MgAUIYiEKAgPwHg4QgAUIoiEKA/gODIAFCOIiEhIQiCUI/iSAJQjiJhSAJQgeIhSACfCAAKQNQIgFCOIYgAUKA/gODQiiGhCABQoCA/AeDQhiGIAFCgICA+A+DQgiGhIQgAUIIiEKAgID4D4MgAUIYiEKAgPwHg4QgAUIoiEKA/gODIAFCOIiEhIQiCnwgB0ItiSAHQgOJhSAHQgaIhXwiC3wgACkDOCIBQjiGIAFCgP4Dg0IohoQgAUKAgPwHg0IYhiABQoCAgPgPg0IIhoSEIAFCCIhCgICA+A+DIAFCGIhCgID8B4OEIAFCKIhCgP4DgyABQjiIhISEIgxCP4kgDEI4iYUgDEIHiIUgACkDMCIBQjiGIAFCgP4Dg0IohoQgAUKAgPwHg0IYhiABQoCAgPgPg0IIhoSEIAFCCIhCgICA+A+DIAFCGIhCgID8B4OEIAFCKIhCgP4DgyABQjiIhISEIg18IAd8IAApAygiAUI4hiABQoD+A4NCKIaEIAFCgID8B4NCGIYgAUKAgID4D4NCCIaEhCABQgiIQoCAgPgPgyABQhiIQoCA/AeDhCABQiiIQoD+A4MgAUI4iISEhCIOQj+JIA5COImFIA5CB4iFIAApAyAiAUI4hiABQoD+A4NCKIaEIAFCgID8B4NCGIYgAUKAgID4D4NCCIaEhCABQgiIQoCAgPgPgyABQhiIQoCA/AeDhCABQiiIQoD+A4MgAUI4iISEhCIPfCAAKQNoIgFCOIYgAUKA/gODQiiGhCABQoCA/AeDQhiGIAFCgICA+A+DQgiGhIQgAUIIiEKAgID4D4MgAUIYiEKAgPwHg4QgAUIoiEKA/gODIAFCOIiEhIQiEHwgACkDGCIBQjiGIAFCgP4Dg0IohoQgAUKAgPwHg0IYhiABQoCAgPgPg0IIhoSEIAFCCIhCgICA+A+DIAFCGIhCgID8B4OEIAFCKIhCgP4DgyABQjiIhISEIhFCP4kgEUI4iYUgEUIHiIUgCXwgACkDWCIBQjiGIAFCgP4Dg0IohoQgAUKAgPwHg0IYhiABQoCAgPgPg0IIhoSEIAFCCIhCgICA+A+DIAFCGIhCgID8B4OEIAFCKIhCgP4DgyABQjiIhISEIhJ8IAZCLYkgBkIDiYUgBkIGiIV8IhNCLYkgE0IDiYUgE0IGiIV8IhRCLYkgFEIDiYUgFEIGiIV8IhVCLYkgFUIDiYUgFUIGiIV8IhZ8IAVCP4kgBUI4iYUgBUIHiIUgEHwgFXwgACkDYCIBQjiGIAFCgP4Dg0IohoQgAUKAgPwHg0IYhiABQoCAgPgPg0IIhoSEIAFCCIhCgICA+A+DIAFCGIhCgID8B4OEIAFCKIhCgP4DgyABQjiIhISEIhdCP4kgF0I4iYUgF0IHiIUgEnwgFHwgCkI/iSAKQjiJhSAKQgeIhSAEfCATfCAIQj+JIAhCOImFIAhCB4iFIAx8IAZ8IA1CP4kgDUI4iYUgDUIHiIUgDnwgBXwgD0I/iSAPQjiJhSAPQgeIhSARfCAXfCALQi2JIAtCA4mFIAtCBoiFfCIYQi2JIBhCA4mFIBhCBoiFfCIZQi2JIBlCA4mFIBlCBoiFfCIaQi2JIBpCA4mFIBpCBoiFfCIbQi2JIBtCA4mFIBtCBoiFfCIcQi2JIBxCA4mFIBxCBoiFfCIdQi2JIB1CA4mFIB1CBoiFfCIeQj+JIB5COImFIB5CB4iFIAdCP4kgB0I4iYUgB0IHiIUgBXwgGnwgEEI/iSAQQjiJhSAQQgeIhSAXfCAZfCASQj+JIBJCOImFIBJCB4iFIAp8IBh8IBZCLYkgFkIDiYUgFkIGiIV8Ih9CLYkgH0IDiYUgH0IGiIV8IiBCLYkgIEIDiYUgIEIGiIV8IiF8IBZCP4kgFkI4iYUgFkIHiIUgGnwgC0I/iSALQjiJhSALQgeIhSAGfCAbfCAhQi2JICFCA4mFICFCBoiFfCIifCAVQj+JIBVCOImFIBVCB4iFIBl8ICF8IBRCP4kgFEI4iYUgFEIHiIUgGHwgIHwgE0I/iSATQjiJhSATQgeIhSALfCAffCAeQi2JIB5CA4mFIB5CBoiFfCIjQi2JICNCA4mFICNCBoiFfCIkQi2JICRCA4mFICRCBoiFfCIlQi2JICVCA4mFICVCBoiFfCImfCAdQj+JIB1COImFIB1CB4iFICB8ICV8IBxCP4kgHEI4iYUgHEIHiIUgH3wgJHwgG0I/iSAbQjiJhSAbQgeIhSAWfCAjfCAaQj+JIBpCOImFIBpCB4iFIBV8IB58IBlCP4kgGUI4iYUgGUIHiIUgFHwgHXwgGEI/iSAYQjiJhSAYQgeIhSATfCAcfCAiQi2JICJCA4mFICJCBoiFfCInQi2JICdCA4mFICdCBoiFfCIoQi2JIChCA4mFIChCBoiFfCIpQi2JIClCA4mFIClCBoiFfCIqQi2JICpCA4mFICpCBoiFfCIrQi2JICtCA4mFICtCBoiFfCIsQi2JICxCA4mFICxCBoiFfCItQj+JIC1COImFIC1CB4iFICFCP4kgIUI4iYUgIUIHiIUgHXwgKXwgIEI/iSAgQjiJhSAgQgeIhSAcfCAofCAfQj+JIB9COImFIB9CB4iFIBt8ICd8ICZCLYkgJkIDiYUgJkIGiIV8Ii5CLYkgLkIDiYUgLkIGiIV8Ii9CLYkgL0IDiYUgL0IGiIV8IjB8ICZCP4kgJkI4iYUgJkIHiIUgKXwgIkI/iSAiQjiJhSAiQgeIhSAefCAqfCAwQi2JIDBCA4mFIDBCBoiFfCIxfCAlQj+JICVCOImFICVCB4iFICh8IDB8ICRCP4kgJEI4iYUgJEIHiIUgJ3wgL3wgI0I/iSAjQjiJhSAjQgeIhSAifCAufCAtQi2JIC1CA4mFIC1CBoiFfCIyQi2JIDJCA4mFIDJCBoiFfCIzQi2JIDNCA4mFIDNCBoiFfCI0Qi2JIDRCA4mFIDRCBoiFfCI1fCAsQj+JICxCOImFICxCB4iFIC98IDR8ICtCP4kgK0I4iYUgK0IHiIUgLnwgM3wgKkI/iSAqQjiJhSAqQgeIhSAmfCAyfCApQj+JIClCOImFIClCB4iFICV8IC18IChCP4kgKEI4iYUgKEIHiIUgJHwgLHwgJ0I/iSAnQjiJhSAnQgeIhSAjfCArfCAxQi2JIDFCA4mFIDFCBoiFfCI2Qi2JIDZCA4mFIDZCBoiFfCI3Qi2JIDdCA4mFIDdCBoiFfCI4Qi2JIDhCA4mFIDhCBoiFfCI5Qi2JIDlCA4mFIDlCBoiFfCI6Qi2JIDpCA4mFIDpCBoiFfCI7Qi2JIDtCA4mFIDtCBoiFfCI8Qj+JIDxCOImFIDxCB4iFIDBCP4kgMEI4iYUgMEIHiIUgLHwgOHwgL0I/iSAvQjiJhSAvQgeIhSArfCA3fCAuQj+JIC5COImFIC5CB4iFICp8IDZ8IDVCLYkgNUIDiYUgNUIGiIV8Ij1CLYkgPUIDiYUgPUIGiIV8Ij5CLYkgPkIDiYUgPkIGiIV8Ij98IDVCP4kgNUI4iYUgNUIHiIUgOHwgMUI/iSAxQjiJhSAxQgeIhSAtfCA5fCA/Qi2JID9CA4mFID9CBoiFfCJAfCA0Qj+JIDRCOImFIDRCB4iFIDd8ID98IDNCP4kgM0I4iYUgM0IHiIUgNnwgPnwgMkI/iSAyQjiJhSAyQgeIhSAxfCA9fCA8Qi2JIDxCA4mFIDxCBoiFfCJBQi2JIEFCA4mFIEFCBoiFfCJCQi2JIEJCA4mFIEJCBoiFfCJDQi2JIENCA4mFIENCBoiFfCJEfCA7Qj+JIDtCOImFIDtCB4iFID58IEN8IDpCP4kgOkI4iYUgOkIHiIUgPXwgQnwgOUI/iSA5QjiJhSA5QgeIhSA1fCBBfCA4Qj+JIDhCOImFIDhCB4iFIDR8IDx8IDdCP4kgN0I4iYUgN0IHiIUgM3wgO3wgNkI/iSA2QjiJhSA2QgeIhSAyfCA6fCBAQi2JIEBCA4mFIEBCBoiFfCJFQi2JIEVCA4mFIEVCBoiFfCJGQi2JIEZCA4mFIEZCBoiFfCJHQi2JIEdCA4mFIEdCBoiFfCJIQi2JIEhCA4mFIEhCBoiFfCJJQi2JIElCA4mFIElCBoiFfCJKQi2JIEpCA4mFIEpCBoiFfCJLIEkgRSA/ID0gMiAsICogIiAgIBYgBiAXIAhBACkDqIoBIkxCMokgTEIuiYUgTEIXiYVBACkDwIoBIk18QQApA7iKASJOQQApA7CKASJPhSBMgyBOhXwgA3xCotyiuY3zi8XCAHwiA0EAKQOgigEiUHwiASAPfCBMIBF8IE8gCXwgTiACfCABIE8gTIWDIE+FfCABQjKJIAFCLomFIAFCF4mFfELNy72fkpLRm/EAfCJRQQApA5iKASJSfCIJIAEgTIWDIEyFfCAJQjKJIAlCLomFIAlCF4mFfEKv9rTi/vm+4LV/fCJTQQApA5CKASJUfCIPIAkgAYWDIAGFfCAPQjKJIA9CLomFIA9CF4mFfEK8t6eM2PT22ml8IlVBACkDiIoBIgF8IhEgDyAJhYMgCYV8IBFCMokgEUIuiYUgEUIXiYV8Qrjqopq/y7CrOXwiViBSIFQgAYWDIFQgAYOFIAFCJIkgAUIeiYUgAUIZiYV8IAN8IgJ8IgN8IAwgEXwgDSAPfCAOIAl8IAMgESAPhYMgD4V8IANCMokgA0IuiYUgA0IXiYV8Qpmgl7CbvsT42QB8Ig0gAiABhSBUgyACIAGDhSACQiSJIAJCHomFIAJCGYmFfCBRfCIJfCIIIAMgEYWDIBGFfCAIQjKJIAhCLomFIAhCF4mFfEKbn+X4ytTgn5J/fCIOIAkgAoUgAYMgCSACg4UgCUIkiSAJQh6JhSAJQhmJhXwgU3wiD3wiESAIIAOFgyADhXwgEUIyiSARQi6JhSARQheJhXxCmIK2093al46rf3wiUSAPIAmFIAKDIA8gCYOFIA9CJIkgD0IeiYUgD0IZiYV8IFV8IgJ8IgMgESAIhYMgCIV8IANCMokgA0IuiYUgA0IXiYV8QsKEjJiK0+qDWHwiUyACIA+FIAmDIAIgD4OFIAJCJIkgAkIeiYUgAkIZiYV8IFZ8Igl8Igx8IBIgA3wgCiARfCAEIAh8IAwgAyARhYMgEYV8IAxCMokgDEIuiYUgDEIXiYV8Qr7fwauU4NbBEnwiBCAJIAKFIA+DIAkgAoOFIAlCJIkgCUIeiYUgCUIZiYV8IA18Ig98IhEgDCADhYMgA4V8IBFCMokgEUIuiYUgEUIXiYV8Qozlkvfkt+GYJHwiCiAPIAmFIAKDIA8gCYOFIA9CJIkgD0IeiYUgD0IZiYV8IA58IgJ8IgMgESAMhYMgDIV8IANCMokgA0IuiYUgA0IXiYV8QuLp/q+9uJ+G1QB8IhIgAiAPhSAJgyACIA+DhSACQiSJIAJCHomFIAJCGYmFfCBRfCIJfCIIIAMgEYWDIBGFfCAIQjKJIAhCLomFIAhCF4mFfELvku6Tz66X3/IAfCIXIAkgAoUgD4MgCSACg4UgCUIkiSAJQh6JhSAJQhmJhXwgU3wiD3wiDHwgByAIfCAFIAN8IBAgEXwgDCAIIAOFgyADhXwgDEIyiSAMQi6JhSAMQheJhXxCsa3a2OO/rO+Af3wiAyAPIAmFIAKDIA8gCYOFIA9CJIkgD0IeiYUgD0IZiYV8IAR8IgV8IgIgDCAIhYMgCIV8IAJCMokgAkIuiYUgAkIXiYV8QrWknK7y1IHum398IgggBSAPhSAJgyAFIA+DhSAFQiSJIAVCHomFIAVCGYmFfCAKfCIGfCIJIAIgDIWDIAyFfCAJQjKJIAlCLomFIAlCF4mFfEKUzaT7zK78zUF8IgwgBiAFhSAPgyAGIAWDhSAGQiSJIAZCHomFIAZCGYmFfCASfCIHfCIPIAkgAoWDIAKFfCAPQjKJIA9CLomFIA9CF4mFfELSlcX3mbjazWR8IgQgByAGhSAFgyAHIAaDhSAHQiSJIAdCHomFIAdCGYmFfCAXfCIFfCIRIBR8IBggD3wgEyAJfCALIAJ8IBEgDyAJhYMgCYV8IBFCMokgEUIuiYUgEUIXiYV8QuPLvMLj8JHfb3wiAiAFIAeFIAaDIAUgB4OFIAVCJIkgBUIeiYUgBUIZiYV8IAN8IgZ8IgsgESAPhYMgD4V8IAtCMokgC0IuiYUgC0IXiYV8QrWrs9zouOfgD3wiCSAGIAWFIAeDIAYgBYOFIAZCJIkgBkIeiYUgBkIZiYV8IAh8Igd8IhMgCyARhYMgEYV8IBNCMokgE0IuiYUgE0IXiYV8QuW4sr3HuaiGJHwiDyAHIAaFIAWDIAcgBoOFIAdCJIkgB0IeiYUgB0IZiYV8IAx8IgV8IhQgEyALhYMgC4V8IBRCMokgFEIuiYUgFEIXiYV8QvWErMn1jcv0LXwiESAFIAeFIAaDIAUgB4OFIAVCJIkgBUIeiYUgBUIZiYV8IAR8IgZ8Ihh8IBogFHwgFSATfCAZIAt8IBggFCAThYMgE4V8IBhCMokgGEIuiYUgGEIXiYV8QoPJm/WmlaG6ygB8IhYgBiAFhSAHgyAGIAWDhSAGQiSJIAZCHomFIAZCGYmFfCACfCIHfCILIBggFIWDIBSFfCALQjKJIAtCLomFIAtCF4mFfELU94fqy7uq2NwAfCIZIAcgBoUgBYMgByAGg4UgB0IkiSAHQh6JhSAHQhmJhXwgCXwiBXwiEyALIBiFgyAYhXwgE0IyiSATQi6JhSATQheJhXxCtafFmKib4vz2AHwiGCAFIAeFIAaDIAUgB4OFIAVCJIkgBUIeiYUgBUIZiYV8IA98IgZ8IhQgEyALhYMgC4V8IBRCMokgFEIuiYUgFEIXiYV8Qqu/m/OuqpSfmH98IhogBiAFhSAHgyAGIAWDhSAGQiSJIAZCHomFIAZCGYmFfCARfCIHfCIVfCAcIBR8IB8gE3wgGyALfCAVIBQgE4WDIBOFfCAVQjKJIBVCLomFIBVCF4mFfEKQ5NDt0s3xmKh/fCIbIAcgBoUgBYMgByAGg4UgB0IkiSAHQh6JhSAHQhmJhXwgFnwiBXwiCyAVIBSFgyAUhXwgC0IyiSALQi6JhSALQheJhXxCv8Lsx4n5yYGwf3wiFiAFIAeFIAaDIAUgB4OFIAVCJIkgBUIeiYUgBUIZiYV8IBl8IgZ8IhMgCyAVhYMgFYV8IBNCMokgE0IuiYUgE0IXiYV8QuSdvPf7+N+sv398IhkgBiAFhSAHgyAGIAWDhSAGQiSJIAZCHomFIAZCGYmFfCAYfCIHfCIUIBMgC4WDIAuFfCAUQjKJIBRCLomFIBRCF4mFfELCn6Lts/6C8EZ8IhggByAGhSAFgyAHIAaDhSAHQiSJIAdCHomFIAdCGYmFfCAafCIFfCIVfCAeIBR8ICEgE3wgHSALfCAVIBQgE4WDIBOFfCAVQjKJIBVCLomFIBVCF4mFfEKlzqqY+ajk01V8IhogBSAHhSAGgyAFIAeDhSAFQiSJIAVCHomFIAVCGYmFfCAbfCIGfCILIBUgFIWDIBSFfCALQjKJIAtCLomFIAtCF4mFfELvhI6AnuqY5QZ8IhsgBiAFhSAHgyAGIAWDhSAGQiSJIAZCHomFIAZCGYmFfCAWfCIHfCITIAsgFYWDIBWFfCATQjKJIBNCLomFIBNCF4mFfELw3LnQ8KzKlBR8IhYgByAGhSAFgyAHIAaDhSAHQiSJIAdCHomFIAdCGYmFfCAZfCIFfCIUIBMgC4WDIAuFfCAUQjKJIBRCLomFIBRCF4mFfEL838i21NDC2yd8IhkgBSAHhSAGgyAFIAeDhSAFQiSJIAVCHomFIAVCGYmFfCAYfCIGfCIVICh8ICQgFHwgJyATfCAjIAt8IBUgFCAThYMgE4V8IBVCMokgFUIuiYUgFUIXiYV8QqaSm+GFp8iNLnwiGCAGIAWFIAeDIAYgBYOFIAZCJIkgBkIeiYUgBkIZiYV8IBp8Igd8IgsgFSAUhYMgFIV8IAtCMokgC0IuiYUgC0IXiYV8Qu3VkNbFv5uWzQB8IhogByAGhSAFgyAHIAaDhSAHQiSJIAdCHomFIAdCGYmFfCAbfCIFfCITIAsgFYWDIBWFfCATQjKJIBNCLomFIBNCF4mFfELf59bsuaKDnNMAfCIbIAUgB4UgBoMgBSAHg4UgBUIkiSAFQh6JhSAFQhmJhXwgFnwiBnwiFCATIAuFgyALhXwgFEIyiSAUQi6JhSAUQheJhXxC3se93cjqnIXlAHwiFiAGIAWFIAeDIAYgBYOFIAZCJIkgBkIeiYUgBkIZiYV8IBl8Igd8IhV8ICYgFHwgKSATfCAlIAt8IBUgFCAThYMgE4V8IBVCMokgFUIuiYUgFUIXiYV8Qqjl3uOz14K19gB8IhkgByAGhSAFgyAHIAaDhSAHQiSJIAdCHomFIAdCGYmFfCAYfCIFfCILIBUgFIWDIBSFfCALQjKJIAtCLomFIAtCF4mFfELm3ba/5KWy4YF/fCIYIAUgB4UgBoMgBSAHg4UgBUIkiSAFQh6JhSAFQhmJhXwgGnwiBnwiEyALIBWFgyAVhXwgE0IyiSATQi6JhSATQheJhXxCu+qIpNGQi7mSf3wiGiAGIAWFIAeDIAYgBYOFIAZCJIkgBkIeiYUgBkIZiYV8IBt8Igd8IhQgEyALhYMgC4V8IBRCMokgFEIuiYUgFEIXiYV8QuSGxOeUlPrfon98IhsgByAGhSAFgyAHIAaDhSAHQiSJIAdCHomFIAdCGYmFfCAWfCIFfCIVfCAvIBR8ICsgE3wgLiALfCAVIBQgE4WDIBOFfCAVQjKJIBVCLomFIBVCF4mFfEKB4Ijiu8mZjah/fCIWIAUgB4UgBoMgBSAHg4UgBUIkiSAFQh6JhSAFQhmJhXwgGXwiBnwiCyAVIBSFgyAUhXwgC0IyiSALQi6JhSALQheJhXxCka/ih43u4qVCfCIZIAYgBYUgB4MgBiAFg4UgBkIkiSAGQh6JhSAGQhmJhXwgGHwiB3wiEyALIBWFgyAVhXwgE0IyiSATQi6JhSATQheJhXxCsPzSsrC0lLZHfCIYIAcgBoUgBYMgByAGg4UgB0IkiSAHQh6JhSAHQhmJhXwgGnwiBXwiFCATIAuFgyALhXwgFEIyiSAUQi6JhSAUQheJhXxCmKS9t52DuslRfCIaIAUgB4UgBoMgBSAHg4UgBUIkiSAFQh6JhSAFQhmJhXwgG3wiBnwiFXwgMSAUfCAtIBN8IDAgC3wgFSAUIBOFgyAThXwgFUIyiSAVQi6JhSAVQheJhXxCkNKWq8XEwcxWfCIbIAYgBYUgB4MgBiAFg4UgBkIkiSAGQh6JhSAGQhmJhXwgFnwiB3wiCyAVIBSFgyAUhXwgC0IyiSALQi6JhSALQheJhXxCqsDEu9WwjYd0fCIWIAcgBoUgBYMgByAGg4UgB0IkiSAHQh6JhSAHQhmJhXwgGXwiBXwiEyALIBWFgyAVhXwgE0IyiSATQi6JhSATQheJhXxCuKPvlYOOqLUQfCIZIAUgB4UgBoMgBSAHg4UgBUIkiSAFQh6JhSAFQhmJhXwgGHwiBnwiFCATIAuFgyALhXwgFEIyiSAUQi6JhSAUQheJhXxCyKHLxuuisNIZfCIYIAYgBYUgB4MgBiAFg4UgBkIkiSAGQh6JhSAGQhmJhXwgGnwiB3wiFSA0fCA3IBR8IDMgE3wgNiALfCAVIBQgE4WDIBOFfCAVQjKJIBVCLomFIBVCF4mFfELT1oaKhYHbmx58IhogByAGhSAFgyAHIAaDhSAHQiSJIAdCHomFIAdCGYmFfCAbfCIFfCILIBUgFIWDIBSFfCALQjKJIAtCLomFIAtCF4mFfEKZ17v8zemdpCd8IhsgBSAHhSAGgyAFIAeDhSAFQiSJIAVCHomFIAVCGYmFfCAWfCIGfCITIAsgFYWDIBWFfCATQjKJIBNCLomFIBNCF4mFfEKoke2M3pav2DR8IhYgBiAFhSAHgyAGIAWDhSAGQiSJIAZCHomFIAZCGYmFfCAZfCIHfCIUIBMgC4WDIAuFfCAUQjKJIBRCLomFIBRCF4mFfELjtKWuvJaDjjl8IhkgByAGhSAFgyAHIAaDhSAHQiSJIAdCHomFIAdCGYmFfCAYfCIFfCIVfCA5IBR8IDUgE3wgOCALfCAVIBQgE4WDIBOFfCAVQjKJIBVCLomFIBVCF4mFfELLlYaarsmq7M4AfCIYIAUgB4UgBoMgBSAHg4UgBUIkiSAFQh6JhSAFQhmJhXwgGnwiBnwiCyAVIBSFgyAUhXwgC0IyiSALQi6JhSALQheJhXxC88aPu/fJss7bAHwiGiAGIAWFIAeDIAYgBYOFIAZCJIkgBkIeiYUgBkIZiYV8IBt8Igd8IhMgCyAVhYMgFYV8IBNCMokgE0IuiYUgE0IXiYV8QqPxyrW9/puX6AB8IhsgByAGhSAFgyAHIAaDhSAHQiSJIAdCHomFIAdCGYmFfCAWfCIFfCIUIBMgC4WDIAuFfCAUQjKJIBRCLomFIBRCF4mFfEL85b7v5d3gx/QAfCIWIAUgB4UgBoMgBSAHg4UgBUIkiSAFQh6JhSAFQhmJhXwgGXwiBnwiFXwgOyAUfCA+IBN8IDogC3wgFSAUIBOFgyAThXwgFUIyiSAVQi6JhSAVQheJhXxC4N7cmPTt2NL4AHwiGSAGIAWFIAeDIAYgBYOFIAZCJIkgBkIeiYUgBkIZiYV8IBh8Igd8IgsgFSAUhYMgFIV8IAtCMokgC0IuiYUgC0IXiYV8QvLWwo/Kgp7khH98IhggByAGhSAFgyAHIAaDhSAHQiSJIAdCHomFIAdCGYmFfCAafCIFfCITIAsgFYWDIBWFfCATQjKJIBNCLomFIBNCF4mFfELs85DTgcHA44x/fCIaIAUgB4UgBoMgBSAHg4UgBUIkiSAFQh6JhSAFQhmJhXwgG3wiBnwiFCATIAuFgyALhXwgFEIyiSAUQi6JhSAUQheJhXxCqLyMm6L/v9+Qf3wiGyAGIAWFIAeDIAYgBYOFIAZCJIkgBkIeiYUgBkIZiYV8IBZ8Igd8IhV8IEEgFHwgQCATfCA8IAt8IBUgFCAThYMgE4V8IBVCMokgFUIuiYUgFUIXiYV8Qun7ivS9nZuopH98IhYgByAGhSAFgyAHIAaDhSAHQiSJIAdCHomFIAdCGYmFfCAZfCIFfCILIBUgFIWDIBSFfCALQjKJIAtCLomFIAtCF4mFfEKV8pmW+/7o/L5/fCIZIAUgB4UgBoMgBSAHg4UgBUIkiSAFQh6JhSAFQhmJhXwgGHwiBnwiEyALIBWFgyAVhXwgE0IyiSATQi6JhSATQheJhXxCq6bJm66e3rhGfCIYIAYgBYUgB4MgBiAFg4UgBkIkiSAGQh6JhSAGQhmJhXwgGnwiB3wiFCATIAuFgyALhXwgFEIyiSAUQi6JhSAUQheJhXxCnMOZ0e7Zz5NKfCIaIAcgBoUgBYMgByAGg4UgB0IkiSAHQh6JhSAHQhmJhXwgG3wiBXwiFSBHfCBDIBR8IEYgE3wgQiALfCAVIBQgE4WDIBOFfCAVQjKJIBVCLomFIBVCF4mFfEKHhIOO8piuw1F8IhsgBSAHhSAGgyAFIAeDhSAFQiSJIAVCHomFIAVCGYmFfCAWfCIGfCILIBUgFIWDIBSFfCALQjKJIAtCLomFIAtCF4mFfEKe1oPv7Lqf7Wp8IhYgBiAFhSAHgyAGIAWDhSAGQiSJIAZCHomFIAZCGYmFfCAZfCIHfCITIAsgFYWDIBWFfCATQjKJIBNCLomFIBNCF4mFfEL4orvz/u/TvnV8IhkgByAGhSAFgyAHIAaDhSAHQiSJIAdCHomFIAdCGYmFfCAYfCIFfCIUIBMgC4WDIAuFfCAUQjKJIBRCLomFIBRCF4mFfEK6392Qp/WZ+AZ8IhwgBSAHhSAGgyAFIAeDhSAFQiSJIAVCHomFIAVCGYmFfCAafCIGfCIVfCA9Qj+JID1COImFID1CB4iFIDl8IEV8IERCLYkgREIDiYUgREIGiIV8IhggFHwgSCATfCBEIAt8IBUgFCAThYMgE4V8IBVCMokgFUIuiYUgFUIXiYV8QqaxopbauN+xCnwiGiAGIAWFIAeDIAYgBYOFIAZCJIkgBkIeiYUgBkIZiYV8IBt8Igd8IgsgFSAUhYMgFIV8IAtCMokgC0IuiYUgC0IXiYV8Qq6b5PfLgOafEXwiGyAHIAaFIAWDIAcgBoOFIAdCJIkgB0IeiYUgB0IZiYV8IBZ8IgV8IhMgCyAVhYMgFYV8IBNCMokgE0IuiYUgE0IXiYV8QpuO8ZjR5sK4G3wiHSAFIAeFIAaDIAUgB4OFIAVCJIkgBUIeiYUgBUIZiYV8IBl8IgZ8IhQgEyALhYMgC4V8IBRCMokgFEIuiYUgFEIXiYV8QoT7kZjS/t3tKHwiHiAGIAWFIAeDIAYgBYOFIAZCJIkgBkIeiYUgBkIZiYV8IBx8Igd8IhV8ID9CP4kgP0I4iYUgP0IHiIUgO3wgR3wgPkI/iSA+QjiJhSA+QgeIhSA6fCBGfCAYQi2JIBhCA4mFIBhCBoiFfCIWQi2JIBZCA4mFIBZCBoiFfCIZIBR8IEogE3wgFiALfCAVIBQgE4WDIBOFfCAVQjKJIBVCLomFIBVCF4mFfEKTyZyGtO+q5TJ8IgsgByAGhSAFgyAHIAaDhSAHQiSJIAdCHomFIAdCGYmFfCAafCIFfCITIBUgFIWDIBSFfCATQjKJIBNCLomFIBNCF4mFfEK8/aauocGvzzx8IhogBSAHhSAGgyAFIAeDhSAFQiSJIAVCHomFIAVCGYmFfCAbfCIGfCIUIBMgFYWDIBWFfCAUQjKJIBRCLomFIBRCF4mFfELMmsDgyfjZjsMAfCIbIAYgBYUgB4MgBiAFg4UgBkIkiSAGQh6JhSAGQhmJhXwgHXwiB3wiFSAUIBOFgyAThXwgFUIyiSAVQi6JhSAVQheJhXxCtoX52eyX9eLMAHwiHCAHIAaFIAWDIAcgBoOFIAdCJIkgB0IeiYUgB0IZiYV8IB58IgV8IhYgTXw3A8CKAUEAIFAgBSAHhSAGgyAFIAeDhSAFQiSJIAVCHomFIAVCGYmFfCALfCIGIAWFIAeDIAYgBYOFIAZCJIkgBkIeiYUgBkIZiYV8IBp8IgcgBoUgBYMgByAGg4UgB0IkiSAHQh6JhSAHQhmJhXwgG3wiBSAHhSAGgyAFIAeDhSAFQiSJIAVCHomFIAVCGYmFfCAcfCILfDcDoIoBQQAgTiBAQj+JIEBCOImFIEBCB4iFIDx8IEh8IBlCLYkgGUIDiYUgGUIGiIV8IhkgE3wgFiAVIBSFgyAUhXwgFkIyiSAWQi6JhSAWQheJhXxCqvyV48+zyr/ZAHwiGiAGfCITfDcDuIoBQQAgUiALIAWFIAeDIAsgBYOFIAtCJIkgC0IeiYUgC0IZiYV8IBp8IgZ8NwOYigFBACBPIEFCP4kgQUI4iYUgQUIHiIUgQHwgGHwgS0ItiSBLQgOJhSBLQgaIhXwgFHwgEyAWIBWFgyAVhXwgE0IyiSATQi6JhSATQheJhXxC7PXb1rP12+XfAHwiGCAHfCIUfDcDsIoBQQAgVCAGIAuFIAWDIAYgC4OFIAZCJIkgBkIeiYUgBkIZiYV8IBh8Igd8NwOQigFBACBMIEVCP4kgRUI4iYUgRUIHiIUgQXwgSXwgGUItiSAZQgOJhSAZQgaIhXwgFXwgFCATIBaFgyAWhXwgFEIyiSAUQi6JhSAUQheJhXxCl7Cd0sSxhqLsAHwiEyAFfHw3A6iKAUEAIAEgByAGhSALgyAHIAaDhSAHQiSJIAdCHomFIAdCGYmFfCATfHw3A4iKAQvzCQIBfgR/QQApA4CKASIAp0EDdkEPcSIBQQN0QYCJAWoiAiACKQMAQn8gAEIDhiIAhkJ/hYNCgAEgAIaFNwMAIAFBAWohAwJAIAFBDkkNAAJAIANBD0cNAEEAQgA3A/iJAQtBgIkBEANBACEDCyADIQQCQEEHIANrQQdxIgJFDQAgAyACaiEEIANBA3RBgIkBaiEBA0AgAUIANwMAIAFBCGohASACQX9qIgINAAsLAkAgA0F4akEHSQ0AIARBA3QhAQNAIAFBuIkBakIANwMAIAFBsIkBakIANwMAIAFBqIkBakIANwMAIAFBoIkBakIANwMAIAFBmIkBakIANwMAIAFBkIkBakIANwMAIAFBiIkBakIANwMAIAFBgIkBakIANwMAIAFBwABqIgFB+ABHDQALC0EAIQFBAEEAKQOAigEiAEI7hiAAQiuGQoCAgICAgMD/AIOEIABCG4ZCgICAgIDgP4MgAEILhkKAgICA8B+DhIQgAEIFiEKAgID4D4MgAEIViEKAgPwHg4QgAEIliEKA/gODIABCA4ZCOIiEhIQ3A/iJAUGAiQEQA0EAQQApA8CKASIAQjiGIABCgP4Dg0IohoQgAEKAgPwHg0IYhiAAQoCAgPgPg0IIhoSEIABCCIhCgICA+A+DIABCGIhCgID8B4OEIABCKIhCgP4DgyAAQjiIhISENwPAigFBAEEAKQO4igEiAEI4hiAAQoD+A4NCKIaEIABCgID8B4NCGIYgAEKAgID4D4NCCIaEhCAAQgiIQoCAgPgPgyAAQhiIQoCA/AeDhCAAQiiIQoD+A4MgAEI4iISEhDcDuIoBQQBBACkDsIoBIgBCOIYgAEKA/gODQiiGhCAAQoCA/AeDQhiGIABCgICA+A+DQgiGhIQgAEIIiEKAgID4D4MgAEIYiEKAgPwHg4QgAEIoiEKA/gODIABCOIiEhIQ3A7CKAUEAQQApA6iKASIAQjiGIABCgP4Dg0IohoQgAEKAgPwHg0IYhiAAQoCAgPgPg0IIhoSEIABCCIhCgICA+A+DIABCGIhCgID8B4OEIABCKIhCgP4DgyAAQjiIhISENwOoigFBAEEAKQOgigEiAEI4hiAAQoD+A4NCKIaEIABCgID8B4NCGIYgAEKAgID4D4NCCIaEhCAAQgiIQoCAgPgPgyAAQhiIQoCA/AeDhCAAQiiIQoD+A4MgAEI4iISEhDcDoIoBQQBBACkDmIoBIgBCOIYgAEKA/gODQiiGhCAAQoCA/AeDQhiGIABCgICA+A+DQgiGhIQgAEIIiEKAgID4D4MgAEIYiEKAgPwHg4QgAEIoiEKA/gODIABCOIiEhIQ3A5iKAUEAQQApA5CKASIAQjiGIABCgP4Dg0IohoQgAEKAgPwHg0IYhiAAQoCAgPgPg0IIhoSEIABCCIhCgICA+A+DIABCGIhCgID8B4OEIABCKIhCgP4DgyAAQjiIhISENwOQigFBAEEAKQOIigEiAEI4hiAAQoD+A4NCKIaEIABCgID8B4NCGIYgAEKAgID4D4NCCIaEhCAAQgiIQoCAgPgPgyAAQhiIQoCA/AeDhCAAQiiIQoD+A4MgAEI4iISEhDcDiIoBAkBBACgCyIoBIgNFDQBBACECA0AgAUGACWogAUGIigFqLQAAOgAAIAFBAWohASADIAJBAWoiAkH/AXFLDQALCwsGAEGAiQELoQIAQQBCADcDgIoBQQBBMEHAACABQYADRiIBGzYCyIoBQQBCpJ/p99uD0trHAEL5wvibkaOz8NsAIAEbNwPAigFBAEKnn+an1sGLhltC6/qG2r+19sEfIAEbNwO4igFBAEKRquDC9tCS2o5/Qp/Y+dnCkdqCm38gARs3A7CKAUEAQrGWgP7/zMmZ5wBC0YWa7/rPlIfRACABGzcDqIoBQQBCubK5uI+b+5cVQvHt9Pilp/2npX8gARs3A6CKAUEAQpe6w4Ojq8CskX9Cq/DT9K/uvLc8IAEbNwOYigFBAEKHqvOzo6WKzeIAQrvOqqbY0Ouzu38gARs3A5CKAUEAQti9lojcq+fdS0KIkvOd/8z5hOoAIAEbNwOIigEgABACEAQLCwsBAEGACAsE0AAAAA=="; + var hash$9 = "f2e40eb1"; + var wasmJson$9 = { + name: name$9, + data: data$9, + hash: hash$9 + }; + + const mutex$8 = new Mutex(); + let wasmCache$8 = null; + /** + * Calculates SHA-2 (SHA-384) hash + * @param data Input data (string, Buffer or TypedArray) + * @returns Computed hash as a hexadecimal string + */ + function sha384(data) { + if (wasmCache$8 === null) { + return lockedCreate(mutex$8, wasmJson$9, 48).then((wasm) => { + wasmCache$8 = wasm; + return wasmCache$8.calculate(data, 384); + }); + } + try { + const hash = wasmCache$8.calculate(data, 384); + return Promise.resolve(hash); + } + catch (err) { + return Promise.reject(err); + } + } + /** + * Creates a new SHA-2 (SHA-384) hash instance + */ + function createSHA384() { + return WASMInterface(wasmJson$9, 48).then((wasm) => { + wasm.init(384); + const obj = { + init: () => { + wasm.init(384); + return obj; + }, + update: (data) => { + wasm.update(data); + return obj; + }, + // biome-ignore lint/suspicious/noExplicitAny: Conflict with IHasher type + digest: (outputType) => wasm.digest(outputType), + save: () => wasm.save(), + load: (data) => { + wasm.load(data); + return obj; + }, + blockSize: 128, + digestSize: 48, + }; + return obj; + }); + } + + const mutex$7 = new Mutex(); + let wasmCache$7 = null; + /** + * Calculates SHA-2 (SHA-512) hash + * @param data Input data (string, Buffer or TypedArray) + * @returns Computed hash as a hexadecimal string + */ + function sha512(data) { + if (wasmCache$7 === null) { + return lockedCreate(mutex$7, wasmJson$9, 64).then((wasm) => { + wasmCache$7 = wasm; + return wasmCache$7.calculate(data, 512); + }); + } + try { + const hash = wasmCache$7.calculate(data, 512); + return Promise.resolve(hash); + } + catch (err) { + return Promise.reject(err); + } + } + /** + * Creates a new SHA-2 (SHA-512) hash instance + */ + function createSHA512() { + return WASMInterface(wasmJson$9, 64).then((wasm) => { + wasm.init(512); + const obj = { + init: () => { + wasm.init(512); + return obj; + }, + update: (data) => { + wasm.update(data); + return obj; + }, + // biome-ignore lint/suspicious/noExplicitAny: Conflict with IHasher type + digest: (outputType) => wasm.digest(outputType), + save: () => wasm.save(), + load: (data) => { + wasm.load(data); + return obj; + }, + blockSize: 128, + digestSize: 64, + }; + return obj; + }); + } + + var name$8 = "xxhash32"; + var data$8 = "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"; + var hash$8 = "4bb12485"; + var wasmJson$8 = { + name: name$8, + data: data$8, + hash: hash$8 + }; + + const mutex$6 = new Mutex(); + let wasmCache$6 = null; + function validateSeed$3(seed) { + if (!Number.isInteger(seed) || seed < 0 || seed > 0xffffffff) { + return new Error("Seed must be a valid 32-bit long unsigned integer."); + } + return null; + } + /** + * Calculates xxHash32 hash + * @param data Input data (string, Buffer or TypedArray) + * @param seed Number used to initialize the internal state of the algorithm (defaults to 0) + * @returns Computed hash as a hexadecimal string + */ + function xxhash32(data, seed = 0) { + if (validateSeed$3(seed)) { + return Promise.reject(validateSeed$3(seed)); + } + if (wasmCache$6 === null) { + return lockedCreate(mutex$6, wasmJson$8, 4).then((wasm) => { + wasmCache$6 = wasm; + return wasmCache$6.calculate(data, seed); + }); + } + try { + const hash = wasmCache$6.calculate(data, seed); + return Promise.resolve(hash); + } + catch (err) { + return Promise.reject(err); + } + } + /** + * Creates a new xxHash32 hash instance + * @param data Input data (string, Buffer or TypedArray) + * @param seed Number used to initialize the internal state of the algorithm (defaults to 0) + */ + function createXXHash32(seed = 0) { + if (validateSeed$3(seed)) { + return Promise.reject(validateSeed$3(seed)); + } + return WASMInterface(wasmJson$8, 4).then((wasm) => { + wasm.init(seed); + const obj = { + init: () => { + wasm.init(seed); + return obj; + }, + update: (data) => { + wasm.update(data); + return obj; + }, + // biome-ignore lint/suspicious/noExplicitAny: Conflict with IHasher type + digest: (outputType) => wasm.digest(outputType), + save: () => wasm.save(), + load: (data) => { + wasm.load(data); + return obj; + }, + blockSize: 16, + digestSize: 4, + }; + return obj; + }); + } + + var name$7 = "xxhash64"; + var data$7 = "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"; + var hash$7 = "177fbfa3"; + var wasmJson$7 = { + name: name$7, + data: data$7, + hash: hash$7 + }; + + const mutex$5 = new Mutex(); + let wasmCache$5 = null; + const seedBuffer$2 = new Uint8Array(8); + function validateSeed$2(seed) { + if (!Number.isInteger(seed) || seed < 0 || seed > 0xffffffff) { + return new Error("Seed must be given as two valid 32-bit long unsigned integers (lo + high)."); + } + return null; + } + function writeSeed$2(arr, low, high) { + // write in little-endian format + const buffer = new DataView(arr); + buffer.setUint32(0, low, true); + buffer.setUint32(4, high, true); + } + /** + * Calculates xxHash64 hash + * @param data Input data (string, Buffer or TypedArray) + * @param seedLow Lower 32 bits of the number used to + * initialize the internal state of the algorithm (defaults to 0) + * @param seedHigh Higher 32 bits of the number used to + * initialize the internal state of the algorithm (defaults to 0) + * @returns Computed hash as a hexadecimal string + */ + function xxhash64(data, seedLow = 0, seedHigh = 0) { + if (validateSeed$2(seedLow)) { + return Promise.reject(validateSeed$2(seedLow)); + } + if (validateSeed$2(seedHigh)) { + return Promise.reject(validateSeed$2(seedHigh)); + } + if (wasmCache$5 === null) { + return lockedCreate(mutex$5, wasmJson$7, 8).then((wasm) => { + wasmCache$5 = wasm; + writeSeed$2(seedBuffer$2.buffer, seedLow, seedHigh); + wasmCache$5.writeMemory(seedBuffer$2); + return wasmCache$5.calculate(data); + }); + } + try { + writeSeed$2(seedBuffer$2.buffer, seedLow, seedHigh); + wasmCache$5.writeMemory(seedBuffer$2); + const hash = wasmCache$5.calculate(data); + return Promise.resolve(hash); + } + catch (err) { + return Promise.reject(err); + } + } + /** + * Creates a new xxHash64 hash instance + * @param seedLow Lower 32 bits of the number used to + * initialize the internal state of the algorithm (defaults to 0) + * @param seedHigh Higher 32 bits of the number used to + * initialize the internal state of the algorithm (defaults to 0) + */ + function createXXHash64(seedLow = 0, seedHigh = 0) { + if (validateSeed$2(seedLow)) { + return Promise.reject(validateSeed$2(seedLow)); + } + if (validateSeed$2(seedHigh)) { + return Promise.reject(validateSeed$2(seedHigh)); + } + return WASMInterface(wasmJson$7, 8).then((wasm) => { + const instanceBuffer = new Uint8Array(8); + writeSeed$2(instanceBuffer.buffer, seedLow, seedHigh); + wasm.writeMemory(instanceBuffer); + wasm.init(); + const obj = { + init: () => { + wasm.writeMemory(instanceBuffer); + wasm.init(); + return obj; + }, + update: (data) => { + wasm.update(data); + return obj; + }, + // biome-ignore lint/suspicious/noExplicitAny: Conflict with IHasher type + digest: (outputType) => wasm.digest(outputType), + save: () => wasm.save(), + load: (data) => { + wasm.load(data); + return obj; + }, + blockSize: 32, + digestSize: 8, + }; + return obj; + }); + } + + var name$6 = "xxhash3"; + var data$6 = "AGFzbQEAAAABNAhgAAF/YAR/f39/AGAHf39/f39/fwBgBH9+fn4BfmAEf39/fgF+YAN/f34BfmAAAGABfwADDg0AAQIDBAUFBQYHBgAGBQQBAQICBg4CfwFBwI4FC38AQcAJCwdwCAZtZW1vcnkCAA5IYXNoX0dldEJ1ZmZlcgAACUhhc2hfSW5pdAAIC0hhc2hfVXBkYXRlAAkKSGFzaF9GaW5hbAAKDUhhc2hfR2V0U3RhdGUACw5IYXNoX0NhbGN1bGF0ZQAMClNUQVRFX1NJWkUDAQr6QQ0FAEGACgvkAwMPfgF/AX4CQCADRQ0AIAApAzAhBCAAKQM4IQUgACkDICEGIAApAyghByAAKQMQIQggACkDGCEJIAApAwAhCiAAKQMIIQsDQCAFIAFBMGopAwAiDHwgAkE4aikDACABQThqKQMAIg2FIgVCIIggBUL/////D4N+fCEFIAcgAUEgaikDACIOfCACQShqKQMAIAFBKGopAwAiD4UiB0IgiCAHQv////8Pg358IQcgCSABQRBqKQMAIhB8IAJBGGopAwAgAUEYaikDACIRhSIJQiCIIAlC/////w+DfnwhCSALIAEpAwAiEnwgAkEIaiITKQMAIAFBCGopAwAiFIUiC0IgiCALQv////8Pg358IQsgAkEwaikDACAMhSIMQiCIIAxC/////w+DfiAEfCANfCEEIAJBIGopAwAgDoUiDEIgiCAMQv////8Pg34gBnwgD3whBiACQRBqKQMAIBCFIgxCIIggDEL/////D4N+IAh8IBF8IQggAikDACAShSIMQiCIIAxC/////w+DfiAKfCAUfCEKIAFBwABqIQEgEyECIANBf2oiAw0ACyAAIAk3AxggACAKNwMAIAAgCzcDCCAAIAc3AyggACAINwMQIAAgBTcDOCAAIAY3AyAgACAENwMwCwveAgIBfwF+AkAgBCACIAEoAgAiB2siAkkNACAAIAMgBSAHQQN0aiACEAEgACAFIAZqIgcpAwAgACkDACIIQi+IhSAIhUKx893xCX43AwAgACAHKQMIIAApAwgiCEIviIUgCIVCsfPd8Ql+NwMIIAAgBykDECAAKQMQIghCL4iFIAiFQrHz3fEJfjcDECAAIAcpAxggACkDGCIIQi+IhSAIhUKx893xCX43AxggACAHKQMgIAApAyAiCEIviIUgCIVCsfPd8Ql+NwMgIAAgBykDKCAAKQMoIghCL4iFIAiFQrHz3fEJfjcDKCAAIAcpAzAgACkDMCIIQi+IhSAIhUKx893xCX43AzAgACAHKQM4IAApAzgiCEIviIUgCIVCsfPd8Ql+NwM4IAAgAyACQQZ0aiAFIAQgAmsiBxABIAEgBzYCAA8LIAAgAyAFIAdBA3RqIAQQASABIAcgBGo2AgALhQEBAX8gAiABhSADpyIEQRh0IARBgP4DcUEIdHIgBEEIdkGA/gNxIARBGHZycq1CIIYgA4V9QQA1AoCMAUIghiAAQfyLAWo1AgCEhSIDQjGJIANCGImFIAOFQqW+4/TRjIfZn39+IgNCI4ggAK18IAOFQqW+4/TRjIfZn39+IgNCHIggA4ULZwAgAiABc60gA3wiA0IhiEEALQCAjAFBEHQgAEEIdHIgAEEBdkGAjAFqLQAAQRh0ciAAQf+LAWotAAByrYUgA4VCz9bTvtLHq9lCfiIDQh2IIAOFQvnz3fGZ9pmrFn4iA0IgiCADhQuJAwEEfgJAIABBCUkNAEEAKQOAjAEgASkDICABKQMYhSACfIUiA0I4hiADQoD+A4NCKIaEIANCgID8B4NCGIYgA0KAgID4D4NCCIaEhCADQgiIQoCAgPgPgyADQhiIQoCA/AeDhCADQiiIQoD+A4MgA0I4iISEhCAArXwgAEH4iwFqKQMAIAEpAzAgASkDKIUgAn2FIgJ8IAJC/////w+DIgQgA0IgiCIFfiIGQv////8PgyACQiCIIgIgA0L/////D4MiA358IAQgA34iA0IgiHwiBEIghiADQv////8Pg4QgBkIgiCACIAV+fCAEQiCIfIV8IgNCJYggA4VC+fPd8ZnymasWfiIDQiCIIAOFDwsCQCAAQQRJDQAgACABQQhqKQMAIAFBEGopAwAgAhADDwsCQCAARQ0AIAAgASgCACABQQRqKAIAIAIQBA8LIAEpAzggASkDQIUgAoUiA0IhiCADhULP1tO+0ser2UJ+IgNCHYggA4VC+fPd8Zn2masWfiIDQiCIIAOFC94IAQZ+IACtQoeVr6+Ytt6bnn9+IQMCQCAAQSFJDQACQCAAQcEASQ0AAkAgAEHhAEkNACABKQNoIAJ9QQApA7iMAYUiBEL/////D4MiBSABKQNgIAJ8QQApA7CMAYUiBkIgiCIHfiIIQv////8PgyAEQiCIIgQgBkL/////D4MiBn58IAUgBn4iBUIgiHwiBkIghiAFQv////8Pg4QgCEIgiCAEIAd+fCAGQiCIfIUgA3wgASkDeCACfSAAQciLAWopAwCFIgNC/////w+DIgQgASkDcCACfCAAQcCLAWopAwCFIgVCIIgiBn4iB0L/////D4MgA0IgiCIDIAVC/////w+DIgV+fCAEIAV+IgRCIIh8IgVCIIYgBEL/////D4OEIAdCIIggAyAGfnwgBUIgiHyFfCEDCyABKQNIIAJ9QQApA6iMAYUiBEL/////D4MiBSABKQNAIAJ8QQApA6CMAYUiBkIgiCIHfiIIQv////8PgyAEQiCIIgQgBkL/////D4MiBn58IAUgBn4iBUIgiHwiBkIghiAFQv////8Pg4QgCEIgiCAEIAd+fCAGQiCIfIUgA3wgASkDWCACfSAAQdiLAWopAwCFIgNC/////w+DIgQgASkDUCACfCAAQdCLAWopAwCFIgVCIIgiBn4iB0L/////D4MgA0IgiCIDIAVC/////w+DIgV+fCAEIAV+IgRCIIh8IgVCIIYgBEL/////D4OEIAdCIIggAyAGfnwgBUIgiHyFfCEDCyABKQMoIAJ9QQApA5iMAYUiBEL/////D4MiBSABKQMgIAJ8QQApA5CMAYUiBkIgiCIHfiIIQv////8PgyAEQiCIIgQgBkL/////D4MiBn58IAUgBn4iBUIgiHwiBkIghiAFQv////8Pg4QgCEIgiCAEIAd+fCAGQiCIfIUgA3wgASkDOCACfSAAQeiLAWopAwCFIgNC/////w+DIgQgASkDMCACfCAAQeCLAWopAwCFIgVCIIgiBn4iB0L/////D4MgA0IgiCIDIAVC/////w+DIgV+fCAEIAV+IgRCIIh8IgVCIIYgBEL/////D4OEIAdCIIggAyAGfnwgBUIgiHyFfCEDCyABKQMIIAJ9QQApA4iMAYUiBEL/////D4MiBSABKQMAIAJ8QQApA4CMAYUiBkIgiCIHfiIIQv////8PgyAEQiCIIgQgBkL/////D4MiBn58IAUgBn4iBUIgiHwiBkIghiAFQv////8Pg4QgCEIgiCAEIAd+fCAGQiCIfIUgA3wgASkDGCACfSAAQfiLAWopAwCFIgNC/////w+DIgQgASkDECACfCAAQfCLAWopAwCFIgJCIIgiBX4iBkL/////D4MgA0IgiCIDIAJC/////w+DIgJ+fCAEIAJ+IgJCIIh8IgRCIIYgAkL/////D4OEIAZCIIggAyAFfnwgBEIgiHyFfCICQiWIIAKFQvnz3fGZ8pmrFn4iAkIgiCAChQv8CgQBfwV+An8BfkEAIQMgASkDeCACfUEAKQP4jAGFIgRC/////w+DIgUgASkDcCACfEEAKQPwjAGFIgZCIIgiB34iCEL/////D4MgBEIgiCIEIAZC/////w+DIgZ+fCAFIAZ+IgVCIIh8IgZCIIYgBUL/////D4OEIAhCIIggBCAHfnwgBkIgiHyFIAEpA2ggAn1BACkD6IwBhSIEQv////8PgyIFIAEpA2AgAnxBACkD4IwBhSIGQiCIIgd+IghC/////w+DIARCIIgiBCAGQv////8PgyIGfnwgBSAGfiIFQiCIfCIGQiCGIAVC/////w+DhCAIQiCIIAQgB358IAZCIIh8hSABKQNYIAJ9QQApA9iMAYUiBEL/////D4MiBSABKQNQIAJ8QQApA9CMAYUiBkIgiCIHfiIIQv////8PgyAEQiCIIgQgBkL/////D4MiBn58IAUgBn4iBUIgiHwiBkIghiAFQv////8Pg4QgCEIgiCAEIAd+fCAGQiCIfIUgASkDSCACfUEAKQPIjAGFIgRC/////w+DIgUgASkDQCACfEEAKQPAjAGFIgZCIIgiB34iCEL/////D4MgBEIgiCIEIAZC/////w+DIgZ+fCAFIAZ+IgVCIIh8IgZCIIYgBUL/////D4OEIAhCIIggBCAHfnwgBkIgiHyFIAEpAzggAn1BACkDuIwBhSIEQv////8PgyIFIAEpAzAgAnxBACkDsIwBhSIGQiCIIgd+IghC/////w+DIARCIIgiBCAGQv////8PgyIGfnwgBSAGfiIFQiCIfCIGQiCGIAVC/////w+DhCAIQiCIIAQgB358IAZCIIh8hSABKQMoIAJ9QQApA6iMAYUiBEL/////D4MiBSABKQMgIAJ8QQApA6CMAYUiBkIgiCIHfiIIQv////8PgyAEQiCIIgQgBkL/////D4MiBn58IAUgBn4iBUIgiHwiBkIghiAFQv////8Pg4QgCEIgiCAEIAd+fCAGQiCIfIUgASkDGCACfUEAKQOYjAGFIgRC/////w+DIgUgASkDECACfEEAKQOQjAGFIgZCIIgiB34iCEL/////D4MgBEIgiCIEIAZC/////w+DIgZ+fCAFIAZ+IgVCIIh8IgZCIIYgBUL/////D4OEIAhCIIggBCAHfnwgBkIgiHyFIAEpAwggAn1BACkDiIwBhSIEQv////8PgyIFIAEpAwAgAnxBACkDgIwBhSIGQiCIIgd+IghC/////w+DIARCIIgiBCAGQv////8PgyIGfnwgBSAGfiIFQiCIfCIGQiCGIAVC/////w+DhCAIQiCIIAQgB358IAZCIIh8hSAArUKHla+vmLbem55/fnx8fHx8fHx8IgRCJYggBIVC+fPd8ZnymasWfiIEQiCIIASFIQQCQCAAQZABSA0AIABBBHZBeGohCQNAIAEgA2oiCkELaikDACACfSADQYiNAWopAwCFIgVC/////w+DIgYgCkEDaikDACACfCADQYCNAWopAwCFIgdCIIgiCH4iC0L/////D4MgBUIgiCIFIAdC/////w+DIgd+fCAGIAd+IgZCIIh8IgdCIIYgBkL/////D4OEIAtCIIggBSAIfnwgB0IgiHyFIAR8IQQgA0EQaiEDIAlBf2oiCQ0ACwsgASkDfyACfSAAQfiLAWopAwCFIgVC/////w+DIgYgASkDdyACfCAAQfCLAWopAwCFIgJCIIgiB34iCEL/////D4MgBUIgiCIFIAJC/////w+DIgJ+fCAGIAJ+IgJCIIh8IgZCIIYgAkL/////D4OEIAhCIIggBSAHfnwgBkIgiHyFIAR8IgJCJYggAoVC+fPd8ZnymasWfiICQiCIIAKFC98FAgF+AX8CQAJAQQApA4AKIgBQRQ0AQYAIIQFCACEADAELAkBBACkDoI4BIABSDQBBACEBDAELQQAhAUEAQq+v79e895Kg/gAgAH03A/iLAUEAIABCxZbr+djShYIofDcD8IsBQQBCj/Hjja2P9JhOIAB9NwPoiwFBACAAQqus+MXV79HQfHw3A+CLAUEAQtOt1LKShbW0nn8gAH03A9iLAUEAIABCl5r0jvWWvO3JAHw3A9CLAUEAQsWDgv2v/8SxayAAfTcDyIsBQQAgAELqi7OdyOb09UN8NwPAiwFBAELIv/rLnJveueQAIAB9NwO4iwFBACAAQoqjgd/Ume2sMXw3A7CLAUEAQvm57738+MKnHSAA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QQApA4CKATcDACACQQApA4iKATcDCCACQQApA5CKATcDECACQQApA5iKATcDGCACQQApA6CKATcDICACQQApA6iKATcDKCACQQApA7CKASIFNwMwIAJBACkDuIoBIgY3AzgCQAJAQQAoAoCOASIHQcAASQ0AIAJBACgCiI4BNgJAIAIgAkHAAGpBACgCmI4BQYCMASAHQX9qQQZ2IANBACgCnI4BIgAQAiADIABqIgBBeWopAwAhCCAAKQMJIQkgACkDGSEKIAApAykhCyAHQcCLAWopAwAhBSAAKQMBIQwgB0HIiwFqKQMAIQYgB0HQiwFqKQMAIQ0gACkDESEOIAdB2IsBaikDACEPIAdB4IsBaikDACEQIAApAyEhESAHQeiLAWopAwAhEiACKQMAIRMgAikDECEUIAIpAyAhFSACKQMwIRYgAikDCCEXIAIpAxghGCACKQMoIRkgAiACKQM4IAdB8IsBaikDACIafCAAKQMxIAdB+IsBaikDACIbhSIcQiCIIBxC/////w+Dfnw3AzggGSAQfCARIBKFIhFCIIggEUL/////D4N+fCERIBggDXwgDiAPhSIOQiCIIA5C/////w+DfnwhDiAXIAV8IAwgBoUiDEIgiCAMQv////8Pg358IQwgGyAWIAsgGoUiC0IgiCALQv////8Pg358fCELIBIgFSAKIBCFIhBCIIggEEL/////D4N+fHwhECAPIBQgCSANhSINQiCIIA1C/////w+Dfnx8IRIgBiATIAggBYUiBUIgiCAFQv////8Pg358fCEIDAELIAdBwI0BaiEdQcAAIAdrIR4gAkHAAGohAAJAAkACQCAHQThNDQAgHiEfDAELAkACQEE4IAdrQQN2QQFqQQdxIh8NACACQcAAaiEAIB4hHwwBCyACQcAAaiEAIB9BA3QiICEfA0AgACAdKQMANwMAIABBCGohACAdQQhqIR0gH0F4aiIfDQALQcAAIAcgIGprIR8LAkAgBw0AA0AgACAdKQMANwMAIABBCGogHUEIaikDADcDACAAQRBqIB1BEGopAwA3AwAgAEEYaiAdQRhqKQMANwMAIABBIGogHUEgaikDADcDACAAQShqIB1BKGopAwA3AwAgAEEwaiAdQTBqKQMANwMAIABBOGogHUE4aikDADcDACAAQcAAaiEAIB1BwABqIR0gH0FAaiIfQQdLDQALCyAfRQ0BCyAfQX9qISECQCAfQQdxIiBFDQAgH0F4cSEfA0AgACAdLQAAOgAAIABBAWohACAdQQFqIR0gIEF/aiIgDQALCyAhQQdJDQADQCAAIB0pAAA3AAAgAEEIaiEAIB1BCGohHSAfQXhqIh8NAAsLIAJBwABqIB5qIR1BgIwBIQACQAJAAkAgB0EISQ0AAkAgB0E4akEDdkEBakEHcSIfDQAMAgsgH0EDdCEgQYCMASEAA0AgHSAAKQMANwMAIB1BCGohHSAAQQhqIQAgH0F/aiIfDQALIAcgIGshBwsgB0UNAQJAAkAgB0EHcSIgDQAgByEfDAELIAdBeHEhHwNAIB0gAC0AADoAACAdQQFqIR0gAEEBaiEAICBBf2oiIA0ACwsgB0EISQ0BCwNAIB0gACkAADcAACAdQQhqIR0gAEEIaiEAIB9BeGoiHw0ACwsgA0EAKAKcjgFqIgBBeWopAwAhCiAAKQMJIRMgACkDGSEUIAApAykhCyAAKQMBIQwgACkDESEOIAApAyEhESACKQMAIRUgAikDECEWIAIpAyAhFyACKQMIIRggAikDQCENIAIpA0ghDyACKQMYIRkgAikDUCESIAIpA1ghCCACKQMoIRogAikDYCEQIAIpA2ghCSACIAYgAikDcCIbfCAAKQMxIAIpA3giBoUiHEIgiCAcQv////8Pg358NwM4IBogEHwgESAJhSIRQiCIIBFC/////w+DfnwhESAZIBJ8IA4gCIUiDkIgiCAOQv////8Pg358IQ4gGCANfCAMIA+FIgxCIIggDEL/////D4N+fCEMIAYgCyAbhSILQiCIIAtC/////w+DfiAFfHwhCyAJIBcgFCAQhSIFQiCIIAVC/////w+Dfnx8IRAgCCAWIBMgEoUiBUIgiCAFQv////8Pg358fCESIA8gFSAKIA2FIgVCIIggBUL/////D4N+fHwhCAsgAykDQyACKQM4hSIFQv////8PgyIGIAMpAzsgC4UiC0IgiCINfiIPQv////8PgyAFQiCIIgUgC0L/////D4MiC358IAYgC34iBkIgiHwiC0IghiAGQv////8Pg4QgD0IgiCAFIA1+fCALQiCIfIUgAykDMyARhSIFQv////8PgyIGIAMpAysgEIUiC0IgiCINfiIPQv////8PgyAFQiCIIgUgC0L/////D4MiC358IAYgC34iBkIgiHwiC0IghiAGQv////8Pg4QgD0IgiCAFIA1+fCALQiCIfIUgAykDIyAOhSIFQv////8PgyIGIAMpAxsgEoUiC0IgiCINfiIPQv////8PgyAFQiCIIgUgC0L/////D4MiC358IAYgC34iBkIgiHwiC0IghiAGQv////8Pg4QgD0IgiCAFIA1+fCALQiCIfIUgAykDEyAMhSIFQv////8PgyIGIAMpAwsgCIUiC0IgiCINfiIPQv////8PgyAFQiCIIgUgC0L/////D4MiC358IAYgC34iBkIgiHwiC0IghiAGQv////8Pg4QgD0IgiCAFIA1+fCALQiCIfIUgBEKHla+vmLbem55/fnx8fHwiBEIliCAEhUL5893xmfKZqxZ+IgRCIIggBIUhBAwBCyAEpyEAAkBBACkDoI4BIgRQDQACQCAAQRBLDQAgAEGACCAEEAUhBAwCCwJAIABBgAFLDQAgAEGACCAEEAYhBAwCCyAAQYAIIAQQByEEDAELAkAgAEEQSw0AIAAgA0IAEAUhBAwBCwJAIABBgAFLDQAgACADQgAQBiEEDAELIAAgA0IAEAchBAtBACAEQjiGIARCgP4Dg0IohoQgBEKAgPwHg0IYhiAEQoCAgPgPg0IIhoSEIARCCIhCgICA+A+DIARCGIhCgID8B4OEIARCKIhCgP4DgyAEQjiIhISENwOACiABJAALBgBBgIoBCwIACwvMAQEAQYAIC8QBuP5sOSOkS758AYEs9yGtHN7UbemDkJfbckCkpLezZx/LeeZOzMDleIJa0H3M/3IhuAhGdPdDJI7gNZDmgTomTDwoUruRwwDLiNBlixtTLqNxZEiXog35TjgZ70ap3qzYqPp2P+OcND/53LvHxwtPHYpR4EvNtFkxyJ9+ydl4c2TqxayDNNPrw8WBoP/6E2PrFw3dUbfw2knTFlUmKdRonisWvlh9R6H8j/i40XrQMc5FyzqPlRYEKK/X+8q7S0B+QAIAAA=="; + var hash$6 = "5a2fbdbb"; + var wasmJson$6 = { + name: name$6, + data: data$6, + hash: hash$6 + }; + + const mutex$4 = new Mutex(); + let wasmCache$4 = null; + const seedBuffer$1 = new Uint8Array(8); + function validateSeed$1(seed) { + if (!Number.isInteger(seed) || seed < 0 || seed > 0xffffffff) { + return new Error("Seed must be given as two valid 32-bit long unsigned integers (lo + high)."); + } + return null; + } + function writeSeed$1(arr, low, high) { + // write in little-endian format + const buffer = new DataView(arr); + buffer.setUint32(0, low, true); + buffer.setUint32(4, high, true); + } + /** + * Calculates xxHash3 hash + * @param data Input data (string, Buffer or TypedArray) + * @param seedLow Lower 32 bits of the number used to + * initialize the internal state of the algorithm (defaults to 0) + * @param seedHigh Higher 32 bits of the number used to + * initialize the internal state of the algorithm (defaults to 0) + * @returns Computed hash as a hexadecimal string + */ + function xxhash3(data, seedLow = 0, seedHigh = 0) { + if (validateSeed$1(seedLow)) { + return Promise.reject(validateSeed$1(seedLow)); + } + if (validateSeed$1(seedHigh)) { + return Promise.reject(validateSeed$1(seedHigh)); + } + if (wasmCache$4 === null) { + return lockedCreate(mutex$4, wasmJson$6, 8).then((wasm) => { + wasmCache$4 = wasm; + writeSeed$1(seedBuffer$1.buffer, seedLow, seedHigh); + wasmCache$4.writeMemory(seedBuffer$1); + return wasmCache$4.calculate(data); + }); + } + try { + writeSeed$1(seedBuffer$1.buffer, seedLow, seedHigh); + wasmCache$4.writeMemory(seedBuffer$1); + const hash = wasmCache$4.calculate(data); + return Promise.resolve(hash); + } + catch (err) { + return Promise.reject(err); + } + } + /** + * Creates a new xxHash3 hash instance + * @param seedLow Lower 32 bits of the number used to + * initialize the internal state of the algorithm (defaults to 0) + * @param seedHigh Higher 32 bits of the number used to + * initialize the internal state of the algorithm (defaults to 0) + */ + function createXXHash3(seedLow = 0, seedHigh = 0) { + if (validateSeed$1(seedLow)) { + return Promise.reject(validateSeed$1(seedLow)); + } + if (validateSeed$1(seedHigh)) { + return Promise.reject(validateSeed$1(seedHigh)); + } + return WASMInterface(wasmJson$6, 8).then((wasm) => { + const instanceBuffer = new Uint8Array(8); + writeSeed$1(instanceBuffer.buffer, seedLow, seedHigh); + wasm.writeMemory(instanceBuffer); + wasm.init(); + const obj = { + init: () => { + wasm.writeMemory(instanceBuffer); + wasm.init(); + return obj; + }, + update: (data) => { + wasm.update(data); + return obj; + }, + // biome-ignore lint/suspicious/noExplicitAny: Conflict with IHasher type + digest: (outputType) => wasm.digest(outputType), + save: () => wasm.save(), + load: (data) => { + wasm.load(data); + return obj; + }, + blockSize: 512, + digestSize: 8, + }; + return obj; + }); + } + + var name$5 = "xxhash128"; + var data$5 = "AGFzbQEAAAABKwdgAAF/YAR/f39/AGAHf39/f39/fwBgA39/fgF+YAR/f39+AGAAAGABfwADDQwAAQIDBAQEBQYFAAUFBAEBAgIGDgJ/AUHAjgULfwBBwAkLB3AIBm1lbW9yeQIADkhhc2hfR2V0QnVmZmVyAAAJSGFzaF9Jbml0AAcLSGFzaF9VcGRhdGUACApIYXNoX0ZpbmFsAAkNSGFzaF9HZXRTdGF0ZQAKDkhhc2hfQ2FsY3VsYXRlAAsKU1RBVEVfU0laRQMBCqBNDAUAQYAKC+QDAw9+AX8BfgJAIANFDQAgACkDMCEEIAApAzghBSAAKQMgIQYgACkDKCEHIAApAxAhCCAAKQMYIQkgACkDACEKIAApAwghCwNAIAUgAUEwaikDACIMfCACQThqKQMAIAFBOGopAwAiDYUiBUIgiCAFQv////8Pg358IQUgByABQSBqKQMAIg58IAJBKGopAwAgAUEoaikDACIPhSIHQiCIIAdC/////w+DfnwhByAJIAFBEGopAwAiEHwgAkEYaikDACABQRhqKQMAIhGFIglCIIggCUL/////D4N+fCEJIAsgASkDACISfCACQQhqIhMpAwAgAUEIaikDACIUhSILQiCIIAtC/////w+DfnwhCyACQTBqKQMAIAyFIgxCIIggDEL/////D4N+IAR8IA18IQQgAkEgaikDACAOhSIMQiCIIAxC/////w+DfiAGfCAPfCEGIAJBEGopAwAgEIUiDEIgiCAMQv////8Pg34gCHwgEXwhCCACKQMAIBKFIgxCIIggDEL/////D4N+IAp8IBR8IQogAUHAAGohASATIQIgA0F/aiIDDQALIAAgCTcDGCAAIAo3AwAgACALNwMIIAAgBzcDKCAAIAg3AxAgACAFNwM4IAAgBjcDICAAIAQ3AzALC94CAgF/AX4CQCAEIAIgASgCACIHayICSQ0AIAAgAyAFIAdBA3RqIAIQASAAIAUgBmoiBykDACAAKQMAIghCL4iFIAiFQrHz3fEJfjcDACAAIAcpAwggACkDCCIIQi+IhSAIhUKx893xCX43AwggACAHKQMQIAApAxAiCEIviIUgCIVCsfPd8Ql+NwMQIAAgBykDGCAAKQMYIghCL4iFIAiFQrHz3fEJfjcDGCAAIAcpAyAgACkDICIIQi+IhSAIhUKx893xCX43AyAgACAHKQMoIAApAygiCEIviIUgCIVCsfPd8Ql+NwMoIAAgBykDMCAAKQMwIghCL4iFIAiFQrHz3fEJfjcDMCAAIAcpAzggACkDOCIIQi+IhSAIhUKx893xCX43AzggACADIAJBBnRqIAUgBCACayIHEAEgASAHNgIADwsgACADIAUgB0EDdGogBBABIAEgByAEajYCAAvtAwEFfiABKQM4IAApAziFIgNC/////w+DIgQgASkDMCAAKQMwhSIFQiCIIgZ+IgdC/////w+DIANCIIgiAyAFQv////8PgyIFfnwgBCAFfiIEQiCIfCIFQiCGIARC/////w+DhCAHQiCIIAMgBn58IAVCIIh8hSABKQMoIAApAyiFIgNC/////w+DIgQgASkDICAAKQMghSIFQiCIIgZ+IgdC/////w+DIANCIIgiAyAFQv////8PgyIFfnwgBCAFfiIEQiCIfCIFQiCGIARC/////w+DhCAHQiCIIAMgBn58IAVCIIh8hSABKQMYIAApAxiFIgNC/////w+DIgQgASkDECAAKQMQhSIFQiCIIgZ+IgdC/////w+DIANCIIgiAyAFQv////8PgyIFfnwgBCAFfiIEQiCIfCIFQiCGIARC/////w+DhCAHQiCIIAMgBn58IAVCIIh8hSABKQMIIAApAwiFIgNC/////w+DIgQgASkDACAAKQMAhSIFQiCIIgZ+IgdC/////w+DIANCIIgiAyAFQv////8PgyIFfnwgBCAFfiIEQiCIfCIFQiCGIARC/////w+DhCAHQiCIIAMgBn58IAVCIIh8hSACfHx8fCICQiWIIAKFQvnz3fGZ8pmrFn4iAkIgiCAChQu6CAIFfgN/AkAgAUEJSQ0AIAAgAUH4iwFqKQMAIgQgAikDOCACKQMwhSADfIUiBUL/////D4NC95Svrwh+IAVCgICAgHCDfEEAKQOAjAEgAikDKCACKQMghSADfYUgBIUiA0IgiCIEQrHz3fEJfnwgBEKHla+vCH4iBEIgiHwgBEL/////D4MgA0L/////D4MiA0Kx893xCX58IANCh5Wvrwh+IgRCIIh8IgVCIIh8IgNCOIYgA0KA/gODQiiGhCADQoCA/AeDQhiGIANCgICA+A+DQgiGhIQgA0IIiEKAgID4D4MgA0IYiEKAgPwHg4QgA0IoiEKA/gODIANCOIiEhIQgBEL/////D4MgAUF/aq1CNoaEIAVCIIZ8hSIEQiCIIgVCz9bTvgJ+IgZC/////w+DIARC/////w+DIgRCvdzKlQx+fCAEQs/W074CfiIEQiCIfCIHQiCGIghCJYggCCAEQv////8Pg4SFQvnz3fGZ8pmrFn4iBEIgiCAEhTcDACAAIAVCvdzKlQx+IANCz9bTvtLHq9lCfnwgBkIgiHwgB0IgiHwiA0IliCADhUL5893xmfKZqxZ+IgNCIIggA4U3AwgPCwJAIAFBBEkNACAAIAIpAxggAikDEIUgA6ciAkEYdCACQYD+A3FBCHRyIAJBCHZBgP4DcSACQRh2cnKtQiCGIAOFfCABQfyLAWo1AgBCIIZBADUCgIwBhIUiA0IgiCIEIAFBAnRBh5Wvr3hqrSIFfiIGQiCIIARCsfPd8Ql+fCAGQv////8PgyADQv////8PgyIDQrHz3fEJfnwgAyAFfiIDQiCIfCIEQiCIfCAEQiCGIANC/////w+DhCIEQgGGfCIDQiWIIAOFQvnz3fGZ8pmrFn4iBUIgiCAFhTcDCCAAIANCA4ggBIUiA0IjiCADhUKlvuP00YyH2Z9/fiIDQhyIIAOFNwMADwsCQCABRQ0AIAAgAigCBCACKAIAc60gA3wiBEIhiEEALQCAjAFBEHQgAUEIdHIiCSABQQF2QYCMAWotAABBGHRyIgogAUH/iwFqLQAAIgFyIguthSAEhULP1tO+0ser2UJ+IgRCHYggBIVC+fPd8Zn2masWfiIEQiCIIASFNwMAIAAgAigCDCACKAIIc60gA30iA0IhiCABQRh0IAtBgP4DcUEIdHIgCUEIdkGA/gNxIApBGHZyckENd62FIAOFQs/W077Sx6vZQn4iA0IdiCADhUL5893xmfaZqxZ+IgNCIIggA4U3AwgPCyAAIAIpA1AgAikDWIUgA4UiBEIhiCAEhULP1tO+0ser2UJ+IgRCHYggBIVC+fPd8Zn2masWfiIEQiCIIASFNwMIIAAgAikDQCACKQNIhSADhSIDQiGIIAOFQs/W077Sx6vZQn4iA0IdiCADhUL5893xmfaZqxZ+IgNCIIggA4U3AwALwwoBCn4gAa0iBEKHla+vmLbem55/fiEFAkACQCABQSFPDQBCACEGDAELQgAhBwJAIAFBwQBJDQBCACEHAkAgAUHhAEkNACACQfgAaikDACADfSABQciLAWopAwAiCIUiB0L/////D4MiCSACKQNwIAN8IAFBwIsBaikDACIKhSILQiCIIgx+Ig1CIIggB0IgiCIHIAx+fCANQv////8PgyAHIAtC/////w+DIgt+fCAJIAt+IgdCIIh8IglCIIh8QQApA7iMASILQQApA7CMASIMfIUgCUIghiAHQv////8Pg4SFIQcgAkHoAGopAwAgA30gC4UiCUL/////D4MiCyACKQNgIAN8IAyFIgxCIIgiDX4iBkL/////D4MgCUIgiCIJIAxC/////w+DIgx+fCALIAx+IgtCIIh8IgxCIIYgC0L/////D4OEIAZCIIggCSANfnwgDEIgiHyFIAV8IAggCnyFIQULIAJB2ABqKQMAIAN9IAFB2IsBaikDACIIhSIJQv////8PgyIKIAIpA1AgA3wgAUHQiwFqKQMAIguFIgxCIIgiDX4iBkL/////D4MgCUIgiCIJIAxC/////w+DIgx+fCAKIAx+IgpCIIh8IgxCIIYgCkL/////D4OEIAZCIIggCSANfnwgDEIgiHyFIAd8QQApA6iMASIJQQApA6CMASIKfIUhByACQcgAaikDACADfSAJhSIJQv////8PgyIMIAIpA0AgA3wgCoUiCkIgiCINfiIGQv////8PgyAJQiCIIgkgCkL/////D4MiCn58IAwgCn4iCkIgiHwiDEIghiAKQv////8Pg4QgBkIgiCAJIA1+fCAMQiCIfIUgBXwgCCALfIUhBQsgAkE4aikDACADfSABQeiLAWopAwAiCIUiCUL/////D4MiCiACKQMwIAN8IAFB4IsBaikDACILhSIMQiCIIg1+IgZC/////w+DIAlCIIgiCSAMQv////8PgyIMfnwgCiAMfiIKQiCIfCIMQiCGIApC/////w+DhCAGQiCIIAkgDX58IAxCIIh8hSAHfEEAKQOYjAEiB0EAKQOQjAEiCXyFIQYgAkEoaikDACADfSAHhSIHQv////8PgyIKIAIpAyAgA3wgCYUiCUIgiCIMfiINQv////8PgyAHQiCIIgcgCUL/////D4MiCX58IAogCX4iCUIgiHwiCkIghiAJQv////8Pg4QgDUIgiCAHIAx+fCAKQiCIfIUgBXwgCCALfIUhBQsgACACQRhqKQMAIAN9IAFB+IsBaikDACIHhSIIQv////8PgyIJIAIpAxAgA3wgAUHwiwFqKQMAIgqFIgtCIIgiDH4iDUL/////D4MgCEIgiCIIIAtC/////w+DIgt+fCAJIAt+IglCIIh8IgtCIIYgCUL/////D4OEIA1CIIggCCAMfnwgC0IgiHyFIAZ8QQApA4iMASIIQQApA4CMASIJfIUiCyACQQhqKQMAIAN9IAiFIghC/////w+DIgwgAikDACADfCAJhSIJQiCIIg1+IgZC/////w+DIAhCIIgiCCAJQv////8PgyIJfnwgDCAJfiIJQiCIfCIMQiCGIAlC/////w+DhCAGQiCIIAggDX58IAxCIIh8hSAFfCAHIAp8hSIFfCIHQiWIIAeFQvnz3fGZ8pmrFn4iB0IgiCAHhTcDACAAQgAgBUKHla+vmLbem55/fiAEIAN9Qs/W077Sx6vZQn58IAtC49zKlfzO8vWFf358IgNCJYggA4VC+fPd8ZnymasWfiIDQiCIIAOFfTcDCAuhDwMBfxR+An9BACEEIAJB+ABqKQMAIAN9QQApA/iMASIFhSIGQv////8PgyIHIAIpA3AgA3xBACkD8IwBIgiFIglCIIgiCn4iC0L/////D4MgBkIgiCIGIAlC/////w+DIgl+fCAHIAl+IgdCIIh8IglCIIYgB0L/////D4OEIAtCIIggBiAKfnwgCUIgiHyFIAJB2ABqKQMAIAN9QQApA9iMASIHhSIGQv////8PgyIJIAIpA1AgA3xBACkD0IwBIgqFIgtCIIgiDH4iDUL/////D4MgBkIgiCIGIAtC/////w+DIgt+fCAJIAt+IglCIIh8IgtCIIYgCUL/////D4OEIA1CIIggBiAMfnwgC0IgiHyFIAJBOGopAwAgA31BACkDuIwBIgmFIgZC/////w+DIgsgAikDMCADfEEAKQOwjAEiDIUiDUIgiCIOfiIPQv////8PgyAGQiCIIgYgDUL/////D4MiDX58IAsgDX4iC0IgiHwiDUIghiALQv////8Pg4QgD0IgiCAGIA5+fCANQiCIfIUgAkEYaikDACADfUEAKQOYjAEiC4UiBkL/////D4MiDSACKQMQIAN8QQApA5CMASIOhSIPQiCIIhB+IhFC/////w+DIAZCIIgiBiAPQv////8PgyIPfnwgDSAPfiINQiCIfCIPQiCGIA1C/////w+DhCARQiCIIAYgEH58IA9CIIh8hUEAKQOIjAEiDUEAKQOAjAEiD3yFfEEAKQOojAEiEEEAKQOgjAEiEXyFfEEAKQPIjAEiEkEAKQPAjAEiE3yFfEEAKQPojAEiFEEAKQPgjAEiFXyFIgZCJYggBoVC+fPd8ZnymasWfiIGQiCIIAaFIQYgAkHoAGopAwAgA30gFIUiFEL/////D4MiFiACKQNgIAN8IBWFIhVCIIgiF34iGEL/////D4MgFEIgiCIUIBVC/////w+DIhV+fCAWIBV+IhVCIIh8IhZCIIYgFUL/////D4OEIBhCIIggFCAXfnwgFkIgiHyFIAJByABqKQMAIAN9IBKFIhJC/////w+DIhQgAikDQCADfCAThSITQiCIIhV+IhZC/////w+DIBJCIIgiEiATQv////8PgyITfnwgFCATfiITQiCIfCIUQiCGIBNC/////w+DhCAWQiCIIBIgFX58IBRCIIh8hSACQShqKQMAIAN9IBCFIhBC/////w+DIhIgAikDICADfCARhSIRQiCIIhN+IhRC/////w+DIBBCIIgiECARQv////8PgyIRfnwgEiARfiIRQiCIfCISQiCGIBFC/////w+DhCAUQiCIIBAgE358IBJCIIh8hSACQQhqKQMAIAN9IA2FIg1C/////w+DIhAgAikDACADfCAPhSIPQiCIIhF+IhJC/////w+DIA1CIIgiDSAPQv////8PgyIPfnwgECAPfiIPQiCIfCIQQiCGIA9C/////w+DhCASQiCIIA0gEX58IBBCIIh8hSABrSIPQoeVr6+Ytt6bnn9+fCALIA58hXwgCSAMfIV8IAcgCnyFfCAFIAh8hSIFQiWIIAWFQvnz3fGZ8pmrFn4iBUIgiCAFhSEFAkAgAUGgAUgNACABQQV2QXxqIRkDQCACIARqIhpBG2opAwAgA30gBEGYjQFqKQMAIgeFIghC/////w+DIgkgGkETaikDACADfCAEQZCNAWopAwAiCoUiC0IgiCIMfiINQv////8PgyAIQiCIIgggC0L/////D4MiC358IAkgC34iCUIgiHwiC0IghiAJQv////8Pg4QgDUIgiCAIIAx+fCALQiCIfIUgBnwgBEGIjQFqKQMAIgggBEGAjQFqKQMAIgl8hSEGIBpBC2opAwAgA30gCIUiCEL/////D4MiCyAaQQNqKQMAIAN8IAmFIglCIIgiDH4iDUL/////D4MgCEIgiCIIIAlC/////w+DIgl+fCALIAl+IglCIIh8IgtCIIYgCUL/////D4OEIA1CIIggCCAMfnwgC0IgiHyFIAV8IAcgCnyFIQUgBEEgaiEEIBlBf2oiGQ0ACwsgACACQf8AaikDACADfCABQeiLAWopAwAiB4UiCEL/////D4MiCSACKQN3IAN9IAFB4IsBaikDACIKhSILQiCIIgx+Ig1C/////w+DIAhCIIgiCCALQv////8PgyILfnwgCSALfiIJQiCIfCILQiCGIAlC/////w+DhCANQiCIIAggDH58IAtCIIh8hSAGfCABQfiLAWopAwAiBiABQfCLAWopAwAiCHyFIgkgAkHvAGopAwAgA3wgBoUiBkL/////D4MiCyACKQNnIAN9IAiFIghCIIgiDH4iDUL/////D4MgBkIgiCIGIAhC/////w+DIgh+fCALIAh+IghCIIh8IgtCIIYgCEL/////D4OEIA1CIIggBiAMfnwgC0IgiHyFIAV8IAcgCnyFIgZ8IgVCJYggBYVC+fPd8ZnymasWfiIFQiCIIAWFNwMAIABCACAGQoeVr6+Ytt6bnn9+IA8gA31Cz9bTvtLHq9lCfnwgCULj3MqV/M7y9YV/fnwiA0IliCADhUL5893xmfKZqxZ+IgNCIIggA4V9NwMIC98FAgF+AX8CQAJAQQApA4AKIgBQRQ0AQYAIIQFCACEADAELAkBBACkDoI4BIABSDQBBACEBDAELQQAhAUEAQq+v79e895Kg/gAgAH03A/iLAUEAIABCxZbr+djShYIofDcD8IsBQQBCj/Hjja2P9JhOIAB9NwPoiwFBACAAQqus+MXV79HQfHw3A+CLAUEAQtOt1LKShbW0nn8gAH03A9iLAUEAIABCl5r0jvWWvO3JAHw3A9CLAUEAQsWDgv2v/8SxayAAfTcDyIsBQQAgAELqi7OdyOb09UN8NwPAiwFBAELIv/rLnJveueQAIAB9NwO4iwFBACAAQoqjgd/Ume2sMXw3A7CLAUEAQvm57738+MKnHSAAfTcDqIsBQQAgAEKo9dv7s5ynmj98NwOgiwFBAEK4sry3lNW31lggAH03A5iLAUEAIABC8cihuqm0w/zOAHw3A5CLAUEAQoihl9u445SXo38gAH03A4iL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AkHAAGogDGohC0GAjAEhAAJAAkACQCAHQQhJDQACQCAHQThqQQN2QQFqQQdxIg0NAAwCCyANQQN0IQ5BgIwBIQADQCALIAApAwA3AwAgC0EIaiELIABBCGohACANQX9qIg0NAAsgByAOayEHCyAHRQ0BAkACQCAHQQdxIg4NACAHIQ0MAQsgB0F4cSENA0AgCyAALQAAOgAAIAtBAWohCyAAQQFqIQAgDkF/aiIODQALCyAHQQhJDQELA0AgCyAAKQAANwAAIAtBCGohCyAAQQhqIQAgDUF4aiINDQALCyACIAIpAwggAikDQCIIfCADQQAoApyOAWoiACkDASACKQNIIgmFIgpCIIggCkL/////D4N+fDcDCCACIAIpAxggAikDUCIKfCAAKQMRIAIpA1giEIUiEUIgiCARQv////8Pg358NwMYIAIgECAKIAApAwmFIgpCIIggCkL/////D4N+IAIpAxB8fDcDECACIAkgCCAAQXlqKQMAhSIIQiCIIAhC/////w+DfiACKQMAfHw3AwAgACkDGSEIIAIpAyAhCSACIAIpAyggAikDYCIKfCAAKQMhIAIpA2giEIUiEUIgiCARQv////8Pg358NwMoIAIgECAJIAggCoUiCEIgiCAIQv////8Pg358fDcDICACIAYgAikDcCIIfCAAKQMxIAIpA3giBoUiCUIgiCAJQv////8Pg358NwM4IAIgBiAIIAApAymFIghCIIggCEL/////D4N+IAV8fDcDMAsgAiACIANBC2ogBEKHla+vmLbem55/fhADNwNAIAIgAiADQQAoApyOAWpBdWogBELP1tO+0ser2UJ+Qn+FEAM3A0gMAQsgBKchAAJAQQApA6COASIEUA0AAkAgAEEQSw0AIAJBwABqIABBgAggBBAEDAILAkAgAEGAAUsNACACQcAAaiAAQYAIIAQQBQwCCyACQcAAaiAAQYAIIAQQBgwBCwJAIABBEEsNACACQcAAaiAAIANCABAEDAELAkAgAEGAAUsNACACQcAAaiAAIANCABAFDAELIAJBwABqIAAgA0IAEAYLQQAgAikDcDcDuApBACACKQNgNwOoCkEAIAIpA1A3A5gKQQAgAkH4AGopAwA3A8AKQQAgAkHoAGopAwA3A7AKQQAgAkHYAGopAwA3A6AKQQAgAikDSCIEQjiGIARCgP4Dg0IohoQgBEKAgPwHg0IYhiAEQoCAgPgPg0IIhoSEIARCCIhCgICA+A+DIARCGIhCgID8B4OEIARCKIhCgP4DgyAEQjiIhISEIgQ3A4AKQQAgBDcDkApBACACKQNAIgRCOIYgBEKA/gODQiiGhCAEQoCA/AeDQhiGIARCgICA+A+DQgiGhIQgBEIIiEKAgID4D4MgBEIYiEKAgPwHg4QgBEIoiEKA/gODIARCOIiEhIQ3A4gKIAEkAAsGAEGAigELAgALC8wBAQBBgAgLxAG4/mw5I6RLvnwBgSz3Ia0c3tRt6YOQl9tyQKSkt7NnH8t55k7MwOV4glrQfcz/ciG4CEZ090MkjuA1kOaBOiZMPChSu5HDAMuI0GWLG1Muo3FkSJeiDflOOBnvRqnerNio+nY/45w0P/ncu8fHC08dilHgS820WTHIn37J2XhzZOrFrIM00+vDxYGg//oTY+sXDd1Rt/DaSdMWVSYp1GieKxa+WH1HofyP+LjRetAxzkXLOo+VFgQor9f7yrtLQH5AAgAA"; + var hash$5 = "b9ab74e2"; + var wasmJson$5 = { + name: name$5, + data: data$5, + hash: hash$5 + }; + + const mutex$3 = new Mutex(); + let wasmCache$3 = null; + const seedBuffer = new Uint8Array(8); + function validateSeed(seed) { + if (!Number.isInteger(seed) || seed < 0 || seed > 0xffffffff) { + return new Error("Seed must be given as two valid 32-bit long unsigned integers (lo + high)."); + } + return null; + } + function writeSeed(arr, low, high) { + // write in little-endian format + const buffer = new DataView(arr); + buffer.setUint32(0, low, true); + buffer.setUint32(4, high, true); + } + /** + * Calculates xxHash128 hash + * @param data Input data (string, Buffer or TypedArray) + * @param seedLow Lower 32 bits of the number used to + * initialize the internal state of the algorithm (defaults to 0) + * @param seedHigh Higher 32 bits of the number used to + * initialize the internal state of the algorithm (defaults to 0) + * @returns Computed hash as a hexadecimal string + */ + function xxhash128(data, seedLow = 0, seedHigh = 0) { + if (validateSeed(seedLow)) { + return Promise.reject(validateSeed(seedLow)); + } + if (validateSeed(seedHigh)) { + return Promise.reject(validateSeed(seedHigh)); + } + if (wasmCache$3 === null) { + return lockedCreate(mutex$3, wasmJson$5, 16).then((wasm) => { + wasmCache$3 = wasm; + writeSeed(seedBuffer.buffer, seedLow, seedHigh); + wasmCache$3.writeMemory(seedBuffer); + return wasmCache$3.calculate(data); + }); + } + try { + writeSeed(seedBuffer.buffer, seedLow, seedHigh); + wasmCache$3.writeMemory(seedBuffer); + const hash = wasmCache$3.calculate(data); + return Promise.resolve(hash); + } + catch (err) { + return Promise.reject(err); + } + } + /** + * Creates a new xxHash128 hash instance + * @param seedLow Lower 32 bits of the number used to + * initialize the internal state of the algorithm (defaults to 0) + * @param seedHigh Higher 32 bits of the number used to + * initialize the internal state of the algorithm (defaults to 0) + */ + function createXXHash128(seedLow = 0, seedHigh = 0) { + if (validateSeed(seedLow)) { + return Promise.reject(validateSeed(seedLow)); + } + if (validateSeed(seedHigh)) { + return Promise.reject(validateSeed(seedHigh)); + } + return WASMInterface(wasmJson$5, 16).then((wasm) => { + const instanceBuffer = new Uint8Array(8); + writeSeed(instanceBuffer.buffer, seedLow, seedHigh); + wasm.writeMemory(instanceBuffer); + wasm.init(); + const obj = { + init: () => { + wasm.writeMemory(instanceBuffer); + wasm.init(); + return obj; + }, + update: (data) => { + wasm.update(data); + return obj; + }, + // biome-ignore lint/suspicious/noExplicitAny: Conflict with IHasher type + digest: (outputType) => wasm.digest(outputType), + save: () => wasm.save(), + load: (data) => { + wasm.load(data); + return obj; + }, + blockSize: 512, + digestSize: 16, + }; + return obj; + }); + } + + var name$4 = "ripemd160"; + var data$4 = "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"; + var hash$4 = "6abbce74"; + var wasmJson$4 = { + name: name$4, + data: data$4, + hash: hash$4 + }; + + const mutex$2 = new Mutex(); + let wasmCache$2 = null; + /** + * Calculates RIPEMD-160 hash + * @param data Input data (string, Buffer or TypedArray) + * @returns Computed hash as a hexadecimal string + */ + function ripemd160(data) { + if (wasmCache$2 === null) { + return lockedCreate(mutex$2, wasmJson$4, 20).then((wasm) => { + wasmCache$2 = wasm; + return wasmCache$2.calculate(data); + }); + } + try { + const hash = wasmCache$2.calculate(data); + return Promise.resolve(hash); + } + catch (err) { + return Promise.reject(err); + } + } + /** + * Creates a new RIPEMD-160 hash instance + */ + function createRIPEMD160() { + return WASMInterface(wasmJson$4, 20).then((wasm) => { + wasm.init(); + const obj = { + init: () => { + wasm.init(); + return obj; + }, + update: (data) => { + wasm.update(data); + return obj; + }, + // biome-ignore lint/suspicious/noExplicitAny: Conflict with IHasher type + digest: (outputType) => wasm.digest(outputType), + save: () => wasm.save(), + load: (data) => { + wasm.load(data); + return obj; + }, + blockSize: 64, + digestSize: 20, + }; + return obj; + }); + } + + function calculateKeyBuffer(hasher, key) { + const { blockSize } = hasher; + const buf = getUInt8Buffer(key); + if (buf.length > blockSize) { + hasher.update(buf); + const uintArr = hasher.digest("binary"); + hasher.init(); + return uintArr; + } + return new Uint8Array(buf.buffer, buf.byteOffset, buf.length); + } + function calculateHmac(hasher, key) { + hasher.init(); + const { blockSize } = hasher; + const keyBuf = calculateKeyBuffer(hasher, key); + const keyBuffer = new Uint8Array(blockSize); + keyBuffer.set(keyBuf); + const opad = new Uint8Array(blockSize); + for (let i = 0; i < blockSize; i++) { + const v = keyBuffer[i]; + opad[i] = v ^ 0x5c; + keyBuffer[i] = v ^ 0x36; + } + hasher.update(keyBuffer); + const obj = { + init: () => { + hasher.init(); + hasher.update(keyBuffer); + return obj; + }, + update: (data) => { + hasher.update(data); + return obj; + }, + digest: ((outputType) => { + const uintArr = hasher.digest("binary"); + hasher.init(); + hasher.update(opad); + hasher.update(uintArr); + return hasher.digest(outputType); + // biome-ignore lint/suspicious/noExplicitAny: Conflict with IHasher type + }), + save: () => { + throw new Error("save() not supported"); + }, + load: () => { + throw new Error("load() not supported"); + }, + blockSize: hasher.blockSize, + digestSize: hasher.digestSize, + }; + return obj; + } + /** + * Calculates HMAC hash + * @param hash Hash algorithm to use. It has to be the return value of a function like createSHA1() + * @param key Key (string, Buffer or TypedArray) + */ + function createHMAC(hash, key) { + if (!hash || !hash.then) { + throw new Error('Invalid hash function is provided! Usage: createHMAC(createMD5(), "key").'); + } + return hash.then((hasher) => calculateHmac(hasher, key)); + } + + function calculatePBKDF2(digest, salt, iterations, hashLength, outputType) { + return __awaiter(this, void 0, void 0, function* () { + const DK = new Uint8Array(hashLength); + const block1 = new Uint8Array(salt.length + 4); + const block1View = new DataView(block1.buffer); + const saltBuffer = getUInt8Buffer(salt); + const saltUIntBuffer = new Uint8Array(saltBuffer.buffer, saltBuffer.byteOffset, saltBuffer.length); + block1.set(saltUIntBuffer); + let destPos = 0; + const hLen = digest.digestSize; + const l = Math.ceil(hashLength / hLen); + let T = null; + let U = null; + for (let i = 1; i <= l; i++) { + block1View.setUint32(salt.length, i); + digest.init(); + digest.update(block1); + T = digest.digest("binary"); + U = T.slice(); + for (let j = 1; j < iterations; j++) { + digest.init(); + digest.update(U); + U = digest.digest("binary"); + for (let k = 0; k < hLen; k++) { + T[k] ^= U[k]; + } + } + DK.set(T.subarray(0, hashLength - destPos), destPos); + destPos += hLen; + } + if (outputType === "binary") { + return DK; + } + const digestChars = new Uint8Array(hashLength * 2); + return getDigestHex(digestChars, DK, hashLength); + }); + } + const validateOptions$2 = (options) => { + if (!options || typeof options !== "object") { + throw new Error("Invalid options parameter. It requires an object."); + } + if (!options.hashFunction || !options.hashFunction.then) { + throw new Error('Invalid hash function is provided! Usage: pbkdf2("password", "salt", 1000, 32, createSHA1()).'); + } + if (!Number.isInteger(options.iterations) || options.iterations < 1) { + throw new Error("Iterations should be a positive number"); + } + if (!Number.isInteger(options.hashLength) || options.hashLength < 1) { + throw new Error("Hash length should be a positive number"); + } + if (options.outputType === undefined) { + options.outputType = "hex"; + } + if (!["hex", "binary"].includes(options.outputType)) { + throw new Error(`Insupported output type ${options.outputType}. Valid values: ['hex', 'binary']`); + } + }; + /** + * Generates a new PBKDF2 hash for the supplied password + */ + function pbkdf2(options) { + return __awaiter(this, void 0, void 0, function* () { + validateOptions$2(options); + const hmac = yield createHMAC(options.hashFunction, options.password); + return calculatePBKDF2(hmac, options.salt, options.iterations, options.hashLength, options.outputType); + }); + } + + var name$3 = "scrypt"; + var data$3 = "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cyICajYCOCAAIAAoAjwgAiAKakESdyAGc2o2AjwLvxIDFX8Bfg5/AkAgAkUNACAAQQd0IgNBQGoiBEEAKAKACCIFIAMgAmwiBmogAyABbGoiByADaiIIaiEJIAAgAkEHdCIKIAFBB3RqIgtsIQwgACALQYABamwhDSAAQQV0IgtBASALQQFLGyILQWBxIQ4gC0EBcSEPIAdBeGohECAHQXBqIREgB0FoaiESIAdBYGohEyAHQVhqIRQgB0FQaiEVIAdBSGohFiAHQUBqIRcgAa1Cf3whGCAEIAdqIRkgByAAQQh0IhpqIRsgACAKQYABamwhHCALQQRJIR1BACEeQQAhHwNAQQAoAoAIIiAgAyAfbGohIQJAIABFDQBBACEiAkAgHQ0AICAgHmohI0EAIQtBACEiA0AgByALaiIEICMgC2oiJCgCADYCACAEQQRqICRBBGooAgA2AgAgBEEIaiAkQQhqKAIANgIAIARBDGogJEEMaigCADYCACALQRBqIQsgDiAiQQRqIiJHDQALCyAPRQ0AIAcgIkECdCILaiAhIAtqKAIANgIACwJAIAFFDQBBACElIBwhIyAGISYDQCAFISQgACEiAkACQCAADQAgGyAXKQMANwMAIBsgFikDADcDCCAbIBUpAwA3AxAgGyAUKQMANwMYIBsgEykDADcDICAbIBIpAwA3AyggGyARKQMANwMwIBsgECkDADcDOAwBCwNAICQgJmoiCyAkIAxqIgQpAwA3AwAgC0EIaiAEQQhqKQMANwMAIAtBEGogBEEQaikDADcDACALQRhqIARBGGopAwA3AwAgC0EgaiAEQSBqKQMANwMAIAtBKGogBEEoaikDADcDACALQTBqIARBMGopAwA3AwAgC0E4aiAEQThqKQMANwMAIAtBwABqIARBwABqKQMANwMAIAtByABqIARByABqKQMANwMAIAtB0ABqIARB0ABqKQMANwMAIAtB2ABqIARB2ABqKQMANwMAIAtB4ABqIARB4ABqKQMANwMAIAtB6ABqIARB6ABqKQMANwMAIAtB8ABqIARB8ABqKQMANwMAIAtB+ABqIARB+ABqKQMANwMAICRBgAFqISQgIkF/aiIiDQALIAcgCCAbIAAQAiAFISQgACEiA0AgJCAjaiILICQgDWoiBCkDADcDACALQQhqIARBCGopAwA3AwAgC0EQaiAEQRBqKQMANwMAIAtBGGogBEEYaikDADcDACALQSBqIARBIGopAwA3AwAgC0EoaiAEQShqKQMANwMAIAtBMGogBEEwaikDADcDACALQThqIARBOGopAwA3AwAgC0HAAGogBEHAAGopAwA3AwAgC0HIAGogBEHIAGopAwA3AwAgC0HQAGogBEHQAGopAwA3AwAgC0HYAGogBEHYAGopAwA3AwAgC0HgAGogBEHgAGopAwA3AwAgC0HoAGogBEHoAGopAwA3AwAgC0HwAGogBEHwAGopAwA3AwAgC0H4AGogBEH4AGopAwA3AwAgJEGAAWohJCAiQX9qIiINAAsLIAggByAbIAAQAiAjIBpqISMgJiAaaiEmICVBAmoiJSABSQ0AC0EAISUDQAJAAkAgAA0AIBsgFykDADcDACAbIBYpAwA3AwggGyAVKQMANwMQIBsgFCkDADcDGCAbIBMpAwA3AyAgGyASKQMANwMoIBsgESkDADcDMCAbIBApAwA3AzgMAQsgACAKIBkpAgAgGIOnQQd0amwhJiAFISQgACEiA0AgJCAMaiILIAspAwAgJCAmaiIEKQMAhTcDACALQQhqIiMgIykDACAEQQhqKQMAhTcDACALQRBqIiMgIykDACAEQRBqKQMAhTcDACALQRhqIiMgIykDACAEQRhqKQMAhTcDACALQSBqIiMgIykDACAEQSBqKQMAhTcDACALQShqIiMgIykDACAEQShqKQMAhTcDACALQTBqIiMgIykDACAEQTBqKQMAhTcDACALQThqIiMgIykDACAEQThqKQMAhTcDACALQcAAaiIjICMpAwAgBEHAAGopAwCFNwMAIAtByABqIiMgIykDACAEQcgAaikDAIU3AwAgC0HQAGoiIyAjKQMAIARB0ABqKQMAhTcDACALQdgAaiIjICMpAwAgBEHYAGopAwCFNwMAIAtB4ABqIiMgIykDACAEQeAAaikDAIU3AwAgC0HoAGoiIyAjKQMAIARB6ABqKQMAhTcDACALQfAAaiIjICMpAwAgBEHwAGopAwCFNwMAIAtB+ABqIgsgCykDACAEQfgAaikDAIU3AwAgJEGAAWohJCAiQX9qIiINAAsgByAIIBsgABACIAAgCiAJKQIAIBiDp0EHdGpsISYgBSEkIAAhIgNAICQgDWoiCyALKQMAICQgJmoiBCkDAIU3AwAgC0EIaiIjICMpAwAgBEEIaikDAIU3AwAgC0EQaiIjICMpAwAgBEEQaikDAIU3AwAgC0EYaiIjICMpAwAgBEEYaikDAIU3AwAgC0EgaiIjICMpAwAgBEEgaikDAIU3AwAgC0EoaiIjICMpAwAgBEEoaikDAIU3AwAgC0EwaiIjICMpAwAgBEEwaikDAIU3AwAgC0E4aiIjICMpAwAgBEE4aikDAIU3AwAgC0HAAGoiIyAjKQMAIARBwABqKQMAhTcDACALQcgAaiIjICMpAwAgBEHIAGopAwCFNwMAIAtB0ABqIiMgIykDACAEQdAAaikDAIU3AwAgC0HYAGoiIyAjKQMAIARB2ABqKQMAhTcDACALQeAAaiIjICMpAwAgBEHgAGopAwCFNwMAIAtB6ABqIiMgIykDACAEQegAaikDAIU3AwAgC0HwAGoiIyAjKQMAIARB8ABqKQMAhTcDACALQfgAaiILIAspAwAgBEH4AGopAwCFNwMAICRBgAFqISQgIkF/aiIiDQALCyAIIAcgGyAAEAIgJUECaiIlIAFJDQALCwJAIABFDQBBACEiAkAgHQ0AICAgHmohI0EAIQtBACEiA0AgIyALaiIEIAcgC2oiJCgCADYCACAEQQRqICRBBGooAgA2AgAgBEEIaiAkQQhqKAIANgIAIARBDGogJEEMaigCADYCACALQRBqIQsgDiAiQQRqIiJHDQALCyAPRQ0AICEgIkECdCILaiAHIAtqKAIANgIACyAeIANqIR4gH0EBaiIfIAJHDQALCws="; + var hash$3 = "b32721f8"; + var wasmJson$3 = { + name: name$3, + data: data$3, + hash: hash$3 + }; + + function scryptInternal(options) { + return __awaiter(this, void 0, void 0, function* () { + const { costFactor, blockSize, parallelism, hashLength } = options; + const SHA256Hasher = createSHA256(); + const blockData = yield pbkdf2({ + password: options.password, + salt: options.salt, + iterations: 1, + hashLength: 128 * blockSize * parallelism, + hashFunction: SHA256Hasher, + outputType: "binary", + }); + const scryptInterface = yield WASMInterface(wasmJson$3, 0); + // last block is for storing the temporary vectors + const VSize = 128 * blockSize * costFactor; + const XYSize = 256 * blockSize; + scryptInterface.setMemorySize(blockData.length + VSize + XYSize); + scryptInterface.writeMemory(blockData, 0); + // mix blocks + scryptInterface.getExports().scrypt(blockSize, costFactor, parallelism); + const expensiveSalt = scryptInterface + .getMemory() + .subarray(0, 128 * blockSize * parallelism); + const outputData = yield pbkdf2({ + password: options.password, + salt: expensiveSalt, + iterations: 1, + hashLength, + hashFunction: SHA256Hasher, + outputType: "binary", + }); + if (options.outputType === "hex") { + const digestChars = new Uint8Array(hashLength * 2); + return getDigestHex(digestChars, outputData, hashLength); + } + // return binary format + return outputData; + }); + } + const isPowerOfTwo = (v) => v && !(v & (v - 1)); + const validateOptions$1 = (options) => { + if (!options || typeof options !== "object") { + throw new Error("Invalid options parameter. It requires an object."); + } + if (!Number.isInteger(options.blockSize) || options.blockSize < 1) { + throw new Error("Block size should be a positive number"); + } + if (!Number.isInteger(options.costFactor) || + options.costFactor < 2 || + !isPowerOfTwo(options.costFactor)) { + throw new Error("Cost factor should be a power of 2, greater than 1"); + } + if (!Number.isInteger(options.parallelism) || options.parallelism < 1) { + throw new Error("Parallelism should be a positive number"); + } + if (!Number.isInteger(options.hashLength) || options.hashLength < 1) { + throw new Error("Hash length should be a positive number."); + } + if (options.outputType === undefined) { + options.outputType = "hex"; + } + if (!["hex", "binary"].includes(options.outputType)) { + throw new Error(`Insupported output type ${options.outputType}. Valid values: ['hex', 'binary']`); + } + }; + /** + * Calculates hash using the scrypt password-based key derivation function + * @returns Computed hash as a hexadecimal string or as + * Uint8Array depending on the outputType option + */ + function scrypt(options) { + return __awaiter(this, void 0, void 0, function* () { + validateOptions$1(options); + return scryptInternal(options); + }); + } + + var name$2 = "bcrypt"; + var data$2 = "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"; + var hash$2 = "8bd8822d"; + var wasmJson$2 = { + name: name$2, + data: data$2, + hash: hash$2 + }; + + function bcryptInternal(options) { + return __awaiter(this, void 0, void 0, function* () { + const { costFactor, password, salt } = options; + const bcryptInterface = yield WASMInterface(wasmJson$2, 0); + bcryptInterface.writeMemory(getUInt8Buffer(salt), 0); + const passwordBuffer = getUInt8Buffer(password); + bcryptInterface.writeMemory(passwordBuffer, 16); + const shouldEncode = options.outputType === "encoded" ? 1 : 0; + bcryptInterface + .getExports() + .bcrypt(passwordBuffer.length, costFactor, shouldEncode); + const memory = bcryptInterface.getMemory(); + if (options.outputType === "encoded") { + return intArrayToString(memory, 60); + } + if (options.outputType === "hex") { + const digestChars = new Uint8Array(24 * 2); + return getDigestHex(digestChars, memory, 24); + } + // return binary format + // the data is copied to allow GC of the original memory buffer + return memory.slice(0, 24); + }); + } + const validateOptions = (options) => { + if (!options || typeof options !== "object") { + throw new Error("Invalid options parameter. It requires an object."); + } + if (!Number.isInteger(options.costFactor) || + options.costFactor < 4 || + options.costFactor > 31) { + throw new Error("Cost factor should be a number between 4 and 31"); + } + options.password = getUInt8Buffer(options.password); + if (options.password.length < 1) { + throw new Error("Password should be at least 1 byte long"); + } + if (options.password.length > 72) { + throw new Error("Password should be at most 72 bytes long"); + } + options.salt = getUInt8Buffer(options.salt); + if (options.salt.length !== 16) { + throw new Error("Salt should be 16 bytes long"); + } + if (options.outputType === undefined) { + options.outputType = "encoded"; + } + if (!["hex", "binary", "encoded"].includes(options.outputType)) { + throw new Error(`Insupported output type ${options.outputType}. Valid values: ['hex', 'binary', 'encoded']`); + } + }; + /** + * Calculates hash using the bcrypt password-hashing function + * @returns Computed hash + */ + function bcrypt(options) { + return __awaiter(this, void 0, void 0, function* () { + validateOptions(options); + return bcryptInternal(options); + }); + } + const validateHashCharacters = (hash) => { + if (!/^\$2[axyb]\$[0-3][0-9]\$[./A-Za-z0-9]{53}$/.test(hash)) { + return false; + } + if (hash[4] === "0" && Number(hash[5]) < 4) { + return false; + } + if (hash[4] === "3" && Number(hash[5]) > 1) { + return false; + } + return true; + }; + const validateVerifyOptions = (options) => { + if (!options || typeof options !== "object") { + throw new Error("Invalid options parameter. It requires an object."); + } + if (options.hash === undefined || typeof options.hash !== "string") { + throw new Error("Hash should be specified"); + } + if (options.hash.length !== 60) { + throw new Error("Hash should be 60 bytes long"); + } + if (!validateHashCharacters(options.hash)) { + throw new Error("Invalid hash"); + } + options.password = getUInt8Buffer(options.password); + if (options.password.length < 1) { + throw new Error("Password should be at least 1 byte long"); + } + if (options.password.length > 72) { + throw new Error("Password should be at most 72 bytes long"); + } + }; + /** + * Verifies password using bcrypt password-hashing function + * @returns True if the encoded hash matches the password + */ + function bcryptVerify(options) { + return __awaiter(this, void 0, void 0, function* () { + validateVerifyOptions(options); + const { hash, password } = options; + const bcryptInterface = yield WASMInterface(wasmJson$2, 0); + bcryptInterface.writeMemory(getUInt8Buffer(hash), 0); + const passwordBuffer = getUInt8Buffer(password); + bcryptInterface.writeMemory(passwordBuffer, 60); + return !!bcryptInterface.getExports().bcrypt_verify(passwordBuffer.length); + }); + } + + var name$1 = "whirlpool"; + var data$1 = "AGFzbQEAAAABEQRgAAF/YAF/AGACf38AYAAAAwkIAAECAwEDAAEFBAEBAgIGDgJ/AUHQmwULfwBBgAgLB3AIBm1lbW9yeQIADkhhc2hfR2V0QnVmZmVyAAAJSGFzaF9Jbml0AAMLSGFzaF9VcGRhdGUABApIYXNoX0ZpbmFsAAUNSGFzaF9HZXRTdGF0ZQAGDkhhc2hfQ2FsY3VsYXRlAAcKU1RBVEVfU0laRQMBCu0bCAUAQYAZC8wGAQl+IAApAwAhAUEAQQApA4CbASICNwPAmQEgACkDGCEDIAApAxAhBCAAKQMIIQVBAEEAKQOYmwEiBjcD2JkBQQBBACkDkJsBIgc3A9CZAUEAQQApA4ibASIINwPImQFBACABIAKFNwOAmgFBACAFIAiFNwOImgFBACAEIAeFNwOQmgFBACADIAaFNwOYmgEgACkDICEDQQBBACkDoJsBIgE3A+CZAUEAIAMgAYU3A6CaASAAKQMoIQRBAEEAKQOomwEiAzcD6JkBQQAgBCADhTcDqJoBIAApAzAhBUEAQQApA7CbASIENwPwmQFBACAFIASFNwOwmgEgACkDOCEJQQBBACkDuJsBIgU3A/iZAUEAIAkgBYU3A7iaAUEAQpjGmMb+kO6AzwA3A4CZAUHAmQFBgJkBEAJBgJoBQcCZARACQQBCtszKrp/v28jSADcDgJkBQcCZAUGAmQEQAkGAmgFBwJkBEAJBAELg+O70uJTDvTU3A4CZAUHAmQFBgJkBEAJBgJoBQcCZARACQQBCncDfluzlkv/XADcDgJkBQcCZAUGAmQEQAkGAmgFBwJkBEAJBAEKV7t2p/pO8pVo3A4CZAUHAmQFBgJkBEAJBgJoBQcCZARACQQBC2JKn0ZCW6LWFfzcDgJkBQcCZAUGAmQEQAkGAmgFBwJkBEAJBAEK9u8Ggv9nPgucANwOAmQFBwJkBQYCZARACQYCaAUHAmQEQAkEAQuTPhNr4tN/KWDcDgJkBQcCZAUGAmQEQAkGAmgFBwJkBEAJBAEL73fOz1vvFo55/NwOAmQFBwJkBQYCZARACQYCaAUHAmQEQAkEAQsrb/L3Q1dbBMzcDgJkBQcCZAUGAmQEQAkGAmgFBwJkBEAJBACACQQApA4CaASAAKQMAhYU3A4CbAUEAIAhBACkDiJoBIAApAwiFhTcDiJsBQQAgB0EAKQOQmgEgACkDEIWFNwOQmwFBACAGQQApA5iaASAAKQMYhYU3A5ibAUEAIAFBACkDoJoBIAApAyCFhTcDoJsBQQAgA0EAKQOomgEgACkDKIWFNwOomwFBACAEQQApA7CaASAAKQMwhYU3A7CbAUEAIAVBACkDuJoBIAApAziFhTcDuJsBC4YMCgF+AX8BfgF/AX4BfwF+AX8EfgN/IAAgACkDACICpyIDQf8BcUEDdEGQCGopAwBCOIkgACkDOCIEpyIFQQV2QfgPcUGQCGopAwCFQjiJIAApAzAiBqciB0ENdkH4D3FBkAhqKQMAhUI4iSAAKQMoIginIglBFXZB+A9xQZAIaikDAIVCOIkgACkDICIKQiCIp0H/AXFBA3RBkAhqKQMAhUI4iSAAKQMYIgtCKIinQf8BcUEDdEGQCGopAwCFQjiJIAApAxAiDEIwiKdB/wFxQQN0QZAIaikDAIVCOIkgACkDCCINQjiIp0EDdEGQCGopAwCFQjiJIAEpAwCFNwMAIAAgDaciDkH/AXFBA3RBkAhqKQMAQjiJIANBBXZB+A9xQZAIaikDAIVCOIkgBUENdkH4D3FBkAhqKQMAhUI4iSAHQRV2QfgPcUGQCGopAwCFQjiJIAhCIIinQf8BcUEDdEGQCGopAwCFQjiJIApCKIinQf8BcUEDdEGQCGopAwCFQjiJIAtCMIinQf8BcUEDdEGQCGopAwCFQjiJIAxCOIinQQN0QZAIaikDAIVCOIkgASkDCIU3AwggACAMpyIPQf8BcUEDdEGQCGopAwBCOIkgDkEFdkH4D3FBkAhqKQMAhUI4iSADQQ12QfgPcUGQCGopAwCFQjiJIAVBFXZB+A9xQZAIaikDAIVCOIkgBkIgiKdB/wFxQQN0QZAIaikDAIVCOIkgCEIoiKdB/wFxQQN0QZAIaikDAIVCOIkgCkIwiKdB/wFxQQN0QZAIaikDAIVCOIkgC0I4iKdBA3RBkAhqKQMAhUI4iSABKQMQhTcDECAAIAunIhBB/wFxQQN0QZAIaikDAEI4iSAPQQV2QfgPcUGQCGopAwCFQjiJIA5BDXZB+A9xQZAIaikDAIVCOIkgA0EVdkH4D3FBkAhqKQMAhUI4iSAEQiCIp0H/AXFBA3RBkAhqKQMAhUI4iSAGQiiIp0H/AXFBA3RBkAhqKQMAhUI4iSAIQjCIp0H/AXFBA3RBkAhqKQMAhUI4iSAKQjiIp0EDdEGQCGopAwCFQjiJIAEpAxiFNwMYIAAgCqciA0H/AXFBA3RBkAhqKQMAQjiJIBBBBXZB+A9xQZAIaikDAIVCOIkgD0ENdkH4D3FBkAhqKQMAhUI4iSAOQRV2QfgPcUGQCGopAwCFQjiJIAJCIIinQf8BcUEDdEGQCGopAwCFQjiJIARCKIinQf8BcUEDdEGQCGopAwCFQjiJIAZCMIinQf8BcUEDdEGQCGopAwCFQjiJIAhCOIinQQN0QZAIaikDAIVCOIkgASkDIIU3AyAgACAJQf8BcUEDdEGQCGopAwBCOIkgA0EFdkH4D3FBkAhqKQMAhUI4iSAQQQ12QfgPcUGQCGopAwCFQjiJIA9BFXZB+A9xQZAIaikDAIVCOIkgDUIgiKdB/wFxQQN0QZAIaikDAIVCOIkgAkIoiKdB/wFxQQN0QZAIaikDAIVCOIkgBEIwiKdB/wFxQQN0QZAIaikDAIVCOIkgBkI4iKdBA3RBkAhqKQMAhUI4iSABKQMohTcDKCAAIAdB/wFxQQN0QZAIaikDAEI4iSAJQQV2QfgPcUGQCGopAwCFQjiJIANBDXZB+A9xQZAIaikDAIVCOIkgEEEVdkH4D3FBkAhqKQMAhUI4iSAMQiCIp0H/AXFBA3RBkAhqKQMAhUI4iSANQiiIp0H/AXFBA3RBkAhqKQMAhUI4iSACQjCIp0H/AXFBA3RBkAhqKQMAhUI4iSAEQjiIp0EDdEGQCGopAwCFQjiJIAEpAzCFNwMwIAAgBUH/AXFBA3RBkAhqKQMAQjiJIAdBBXZB+A9xQZAIaikDAIVCOIkgCUENdkH4D3FBkAhqKQMAhUI4iSADQRV2QfgPcUGQCGopAwCFQjiJIAtCIIinQf8BcUEDdEGQCGopAwCFQjiJIAxCKIinQf8BcUEDdEGQCGopAwCFQjiJIA1CMIinQf8BcUEDdEGQCGopAwCFQjiJIAJCOIinQQN0QZAIaikDAIVCOIkgASkDOIU3AzgLXABBAEIANwPImwFBAEIANwO4mwFBAEIANwOwmwFBAEIANwOomwFBAEIANwOgmwFBAEIANwOYmwFBAEIANwOQmwFBAEIANwOImwFBAEIANwOAmwFBAEEANgLAmwELxgMBB39BACEBQQBBACkDyJsBIACtfDcDyJsBAkBBACgCwJsBIgJFDQBBACEBAkAgAiAAaiIDQcAAIANBwABJGyIEIAJB/wFxIgVNDQAgBCAFayIBQQNxIQYCQAJAIAQgBUF/c2pBA08NAEEAIQEMAQsgAUF8cSEHQQAhAQNAIAUgAWoiAkHAmgFqIAFBgBlqLQAAOgAAIAJBwZoBaiABQYEZai0AADoAACACQcKaAWogAUGCGWotAAA6AAAgAkHDmgFqIAFBgxlqLQAAOgAAIAcgAUEEaiIBRw0ACyAFIAFqIgUhAgsgBkUNACACQf8BcUEBaiECA0AgBUHAmgFqIAFBgBlqLQAAOgAAIAIiBUEBaiECIAFBAWohASAFIQUgBkF/aiIGDQALCwJAIANBP00NAEHAmgEQAUEAIQQLQQAgBDYCwJsBCwJAIAAgAWsiAkHAAEkNAANAIAFBgBlqEAEgAUHAAGohASACQUBqIgJBP0sNAAsLAkAgASAARg0AQQAgAjYCwJsBIAJFDQBBACECQQAhBQNAIAJBwJoBaiACIAFqQYAZai0AADoAAEEAKALAmwEgBUEBaiIFQf8BcSICSw0ACwsL/wMCBH8BfiMAQcAAayIAJAAgAEE4akIANwMAIABBMGpCADcDACAAQShqQgA3AwAgAEEgakIANwMAIABBGGpCADcDACAAQRBqQgA3AwAgAEIANwMIIABCADcDAEEAIQECQAJAQQAoAsCbASICRQ0AQQAhAwNAIAAgAWogAUHAmgFqLQAAOgAAIAFBAWohASACIANBAWoiA0H/AXFLDQALQQAgAkEBajYCwJsBIAAgAmpBgAE6AAAgAkFgcUEgRw0BIAAQASAAQgA3AxggAEIANwMQIABCADcDCCAAQgA3AwAMAQtBAEEBNgLAmwEgAEGAAToAAAtBACkDyJsBIQRBAEIANwPImwEgAEEAOgA2IABBADYBMiAAQgA3ASogAEEAOgApIABCADcAISAAQQA6ACAgACAEQgWIPAA+IAAgBEINiDwAPSAAIARCFYg8ADwgACAEQh2IPAA7IAAgBEIliDwAOiAAIARCLYg8ADkgACAEQjWIPAA4IAAgBEI9iDwANyAAIASnQQN0OgA/IAAQAUEAQQApA4CbATcDgBlBAEEAKQOImwE3A4gZQQBBACkDkJsBNwOQGUEAQQApA5ibATcDmBlBAEEAKQOgmwE3A6AZQQBBACkDqJsBNwOoGUEAQQApA7CbATcDsBlBAEEAKQO4mwE3A7gZIABBwABqJAALBgBBwJoBC2IAQQBCADcDyJsBQQBCADcDuJsBQQBCADcDsJsBQQBCADcDqJsBQQBCADcDoJsBQQBCADcDmJsBQQBCADcDkJsBQQBCADcDiJsBQQBCADcDgJsBQQBBADYCwJsBIAAQBBAFCwuYEAEAQYAIC5AQkAAAAAAAAAAAAAAAAAAAABgYYBjAeDDYIyOMIwWvRibGxj/GfvmRuOjoh+gTb837h4cmh0yhE8u4uNq4qWJtEQEBBAEIBQIJT08hT0Jung02Ntg2re5sm6amoqZZBFH/0tJv0t69uQz19fP1+wb3Dnl5+XnvgPKWb2+hb1/O3jCRkX6R/O8/bVJSVVKqB6T4YGCdYCf9wEe8vMq8iXZlNZubVpuszSs3jo4CjgSMAYqjo7ajcRVb0gwMMAxgPBhse3vxe/+K9oQ1NdQ1teFqgB0ddB3oaTr14OCn4FNH3bPX13vX9qyzIcLCL8Je7ZmcLi64Lm2WXENLSzFLYnqWKf7+3/6jIeFdV1dBV4IWrtUVFVQVqEEqvXd3wXeftu7oNzfcN6XrbpLl5bPle1bXnp+fRp+M2SMT8PDn8NMX/SNKSjVKan+UINraT9qelalEWFh9WPolsKLJyQPJBsqPzykppClVjVJ8CgooClAiFFqxsf6x4U9/UKCguqBpGl3Ja2uxa3/a1hSFhS6FXKsX2b29zr2Bc2c8XV1pXdI0uo8QEEAQgFAgkPT09/TzA/UHy8sLyxbAi90+Pvg+7cZ80wUFFAUoEQotZ2eBZx/mznjk5Lfkc1PVlycnnCclu04CQUEZQTJYgnOLixaLLJ0Lp6enpqdRAVP2fX3pfc+U+rKVlW6V3Ps3SdjYR9iOn61W+/vL+4sw63Du7p/uI3HBzXx87XzHkfi7ZmaFZhfjzHHd3VPdpo6nexcXXBe4Sy6vR0cBRwJGjkWenkKehNwhGsrKD8oexYnULS20LXWZWli/v8a/kXljLgcHHAc4Gw4/ra2OrQEjR6xaWnVa6i+0sIODNoNstRvvMzPMM4X/ZrZjY5FjP/LGXAICCAIQCgQSqqqSqjk4SZNxcdlxr6ji3sjIB8gOz43GGRlkGch9MtFJSTlJcnCSO9nZQ9mGmq9f8vLv8sMd+THj46vjS0jbqFtbcVviKra5iIgaiDSSDbyamlKapMgpPiYmmCYtvkwLMjLIMo36ZL+wsPqw6Up9Wenpg+kbas/yDw88D3gzHnfV1XPV5qa3M4CAOoB0uh30vr7Cvpl8YSfNzRPNJt6H6zQ00DS95GiJSEg9SHp1kDL//9v/qyTjVHp69Xr3j/SNkJB6kPTqPWRfX2Ffwj6+nSAggCAdoEA9aGi9aGfV0A8aGmga0HI0yq6ugq4ZLEG3tLTqtMledX1UVE1UmhmozpOTdpPs5Tt/IiKIIg2qRC9kZI1kB+nIY/Hx4/HbEv8qc3PRc7+i5swSEkgSkFokgkBAHUA6XYB6CAggCEAoEEjDwyvDVuiblezsl+wze8Xf29tL25aQq02hob6hYR9fwI2NDo0cgweRPT30PfXJesiXl2aXzPEzWwAAAAAAAAAAz88bzzbUg/krK6wrRYdWbnZ2xXaXs+zhgoIygmSwGebW1n/W/qmxKBsbbBvYdzbDtbXutcFbd3Svr4avESlDvmpqtWp339QdUFBdULoNoOpFRQlFEkyKV/Pz6/PLGPs4MDDAMJ3wYK3v75vvK3TDxD8//D/lw37aVVVJVZIcqseiorKieRBZ2+rqj+oDZcnpZWWJZQ/symq6utK6uWhpAy8vvC9lk15KwMAnwE7nnY7e3l/evoGhYBwccBzgbDj8/f3T/bsu50ZNTSlNUmSaH5KScpLk4Dl2dXXJdY+86voGBhgGMB4MNoqKEookmAmusrLysvlAeUvm5r/mY1nRhQ4OOA5wNhx+Hx98H/hjPudiYpViN/fEVdTUd9Tuo7U6qKiaqCkyTYGWlmKWxPQxUvn5w/mbOu9ixcUzxWb2l6MlJZQlNbFKEFlZeVnyILKrhIQqhFSuFdByctVyt6fkxTk55DnV3XLsTEwtTFphmBZeXmVeyju8lHh4/XjnhfCfODjgON3YcOWMjAqMFIYFmNHRY9HGsr8XpaWupUELV+Ti4q/iQ03ZoWFhmWEv+MJOs7P2s/FFe0IhIYQhFaVCNJycSpyU1iUIHh54HvBmPO5DQxFDIlKGYcfHO8d2/JOx/PzX/LMr5U8EBBAEIBQIJFFRWVGyCKLjmZlembzHLyVtbaltT8TaIg0NNA1oORpl+vrP+oM16Xnf31vftoSjaX5+5X7Xm/ypJCSQJD20SBk7O+w7xdd2/qurlqsxPUuazs4fzj7RgfAREUQRiFUimY+PBo8MiQODTk4lTkprnAS3t+a30VFzZuvri+sLYMvgPDzwPP3MeMGBgT6BfL8f/ZSUapTU/jVA9/f79+sM8xy5ud65oWdvGBMTTBOYXyaLLCywLH2cWFHT02vT1ri7Befnu+drXNOMbm6lblfL3DnExDfEbvOVqgMDDAMYDwYbVlZFVooTrNxERA1EGkmIXn9/4X/fnv6gqameqSE3T4gqKqgqTYJUZ7u71ruxbWsKwcEjwUbin4dTU1FTogKm8dzcV9yui6VyCwssC1gnFlOdnU6dnNMnAWxsrWxHwdgrMTHEMZX1YqR0dM10h7no8/b2//bjCfEVRkYFRgpDjEysrIqsCSZFpYmJHok8lw+1FBRQFKBEKLTh4aPhW0LfuhYWWBawTiymOjroOs3SdPdpablpb9DSBgkJJAlILRJBcHDdcKet4Ne2tuK22VRxb9DQZ9DOt70e7e2T7Tt+x9bMzBfMLtuF4kJCFUIqV4RomJhamLTCLSykpKqkSQ5V7SgooChdiFB1XFxtXNoxuIb4+Mf4kz/ta4aGIoZEpBHC"; + var hash$1 = "8d8f6035"; + var wasmJson$1 = { + name: name$1, + data: data$1, + hash: hash$1 + }; + + const mutex$1 = new Mutex(); + let wasmCache$1 = null; + /** + * Calculates Whirlpool hash + * @param data Input data (string, Buffer or TypedArray) + * @returns Computed hash as a hexadecimal string + */ + function whirlpool(data) { + if (wasmCache$1 === null) { + return lockedCreate(mutex$1, wasmJson$1, 64).then((wasm) => { + wasmCache$1 = wasm; + return wasmCache$1.calculate(data); + }); + } + try { + const hash = wasmCache$1.calculate(data); + return Promise.resolve(hash); + } + catch (err) { + return Promise.reject(err); + } + } + /** + * Creates a new Whirlpool hash instance + */ + function createWhirlpool() { + return WASMInterface(wasmJson$1, 64).then((wasm) => { + wasm.init(); + const obj = { + init: () => { + wasm.init(); + return obj; + }, + update: (data) => { + wasm.update(data); + return obj; + }, + // biome-ignore lint/suspicious/noExplicitAny: Conflict with IHasher type + digest: (outputType) => wasm.digest(outputType), + save: () => wasm.save(), + load: (data) => { + wasm.load(data); + return obj; + }, + blockSize: 64, + digestSize: 64, + }; + return obj; + }); + } + + var name = "sm3"; + var data = "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"; + var hash = "b6fb4b8e"; + var wasmJson = { + name: name, + data: data, + hash: hash + }; + + const mutex = new Mutex(); + let wasmCache = null; + /** + * Calculates SM3 hash + * @param data Input data (string, Buffer or TypedArray) + * @returns Computed hash as a hexadecimal string + */ + function sm3(data) { + if (wasmCache === null) { + return lockedCreate(mutex, wasmJson, 32).then((wasm) => { + wasmCache = wasm; + return wasmCache.calculate(data); + }); + } + try { + const hash = wasmCache.calculate(data); + return Promise.resolve(hash); + } + catch (err) { + return Promise.reject(err); + } + } + /** + * Creates a new SM3 hash instance + */ + function createSM3() { + return WASMInterface(wasmJson, 32).then((wasm) => { + wasm.init(); + const obj = { + init: () => { + wasm.init(); + return obj; + }, + update: (data) => { + wasm.update(data); + return obj; + }, + // biome-ignore lint/suspicious/noExplicitAny: Conflict with IHasher type + digest: (outputType) => wasm.digest(outputType), + save: () => wasm.save(), + load: (data) => { + wasm.load(data); + return obj; + }, + blockSize: 64, + digestSize: 32, + }; + return obj; + }); + } + + exports.adler32 = adler32; + exports.argon2Verify = argon2Verify; + exports.argon2d = argon2d; + exports.argon2i = argon2i; + exports.argon2id = argon2id; + exports.bcrypt = bcrypt; + exports.bcryptVerify = bcryptVerify; + exports.blake2b = blake2b; + exports.blake2s = blake2s; + exports.blake3 = blake3; + exports.crc32 = crc32; + exports.crc64 = crc64; + exports.createAdler32 = createAdler32; + exports.createBLAKE2b = createBLAKE2b; + exports.createBLAKE2s = createBLAKE2s; + exports.createBLAKE3 = createBLAKE3; + exports.createCRC32 = createCRC32; + exports.createCRC64 = createCRC64; + exports.createHMAC = createHMAC; + exports.createKeccak = createKeccak; + exports.createMD4 = createMD4; + exports.createMD5 = createMD5; + exports.createRIPEMD160 = createRIPEMD160; + exports.createSHA1 = createSHA1; + exports.createSHA224 = createSHA224; + exports.createSHA256 = createSHA256; + exports.createSHA3 = createSHA3; + exports.createSHA384 = createSHA384; + exports.createSHA512 = createSHA512; + exports.createSM3 = createSM3; + exports.createWhirlpool = createWhirlpool; + exports.createXXHash128 = createXXHash128; + exports.createXXHash3 = createXXHash3; + exports.createXXHash32 = createXXHash32; + exports.createXXHash64 = createXXHash64; + exports.keccak = keccak; + exports.md4 = md4; + exports.md5 = md5; + exports.pbkdf2 = pbkdf2; + exports.ripemd160 = ripemd160; + exports.scrypt = scrypt; + exports.sha1 = sha1; + exports.sha224 = sha224; + exports.sha256 = sha256; + exports.sha3 = sha3; + exports.sha384 = sha384; + exports.sha512 = sha512; + exports.sm3 = sm3; + exports.whirlpool = whirlpool; + exports.xxhash128 = xxhash128; + exports.xxhash3 = xxhash3; + exports.xxhash32 = xxhash32; + exports.xxhash64 = xxhash64; + +})); diff --git a/frontend/node_modules/hash-wasm/dist/index.umd.min.js b/frontend/node_modules/hash-wasm/dist/index.umd.min.js new file mode 100644 index 0000000..134fa2a --- /dev/null +++ b/frontend/node_modules/hash-wasm/dist/index.umd.min.js @@ -0,0 +1,7 @@ +/*! + * hash-wasm (https://www.npmjs.com/package/hash-wasm) + * (c) Dani Biro + * @license MIT + */ + +!function(A,I){"object"==typeof exports&&"undefined"!=typeof module?I(exports):"function"==typeof define&&define.amd?define(["exports"],I):I((A="undefined"!=typeof globalThis?globalThis:A||self).hashwasm={})}(this,(function(A){"use strict";var I,B={name:"adler32",data:"AGFzbQEAAAABDANgAAF/YAAAYAF/AAMHBgABAgEAAgUEAQECAgYOAn8BQYCJBQt/AEGACAsHcAgGbWVtb3J5AgAOSGFzaF9HZXRCdWZmZXIAAAlIYXNoX0luaXQAAQtIYXNoX1VwZGF0ZQACCkhhc2hfRmluYWwAAw1IYXNoX0dldFN0YXRlAAQOSGFzaF9DYWxjdWxhdGUABQpTVEFURV9TSVpFAwEK6wkGBQBBgAkLCgBBAEEBNgKECAvjCAEHf0EAKAKECCIBQf//A3EhAiABQRB2IQMCQAJAIABBAUcNACACQQAtAIAJaiIBQY+AfGogASABQfD/A0sbIgEgA2oiBEEQdCIFQYCAPGogBSAEQfD/A0sbIAFyIQEMAQsCQAJAAkACQAJAIABBEEkNAEGACSEGIABBsCtJDQFBgAkhBgNAQQAhBQNAIAYgBWoiASgCACIEQf8BcSACaiICIANqIAIgBEEIdkH/AXFqIgJqIAIgBEEQdkH/AXFqIgJqIAIgBEEYdmoiAmogAiABQQRqKAIAIgRB/wFxaiICaiACIARBCHZB/wFxaiICaiACIARBEHZB/wFxaiICaiACIARBGHZqIgJqIAIgAUEIaigCACIEQf8BcWoiAmogAiAEQQh2Qf8BcWoiAmogAiAEQRB2Qf8BcWoiAmogAiAEQRh2aiIEaiAEIAFBDGooAgAiAUH/AXFqIgRqIAQgAUEIdkH/AXFqIgRqIAQgAUEQdkH/AXFqIgRqIAQgAUEYdmoiAmohAyAFQRBqIgVBsCtHDQALIANB8f8DcCEDIAJB8f8DcCECIAZBsCtqIQYgAEHQVGoiAEGvK0sNAAsgAEUNBCAAQQ9LDQEMAgsCQCAARQ0AAkACQCAAQQNxIgUNAEGACSEBIAAhBAwBCyAAQXxxIQRBACEBA0AgAiABQYAJai0AAGoiAiADaiEDIAUgAUEBaiIBRw0ACyAFQYAJaiEBCyAAQQRJDQADQCACIAEtAABqIgUgAS0AAWoiBiABLQACaiIAIAFBA2otAABqIgIgACAGIAUgA2pqamohAyABQQRqIQEgBEF8aiIEDQALCyACQY+AfGogAiACQfD/A0sbIANB8f8DcEEQdHIhAQwECwNAIAYoAgAiAUH/AXEgAmoiBCADaiAEIAFBCHZB/wFxaiIEaiAEIAFBEHZB/wFxaiIEaiAEIAFBGHZqIgRqIAQgBkEEaigCACIBQf8BcWoiBGogBCABQQh2Qf8BcWoiBGogBCABQRB2Qf8BcWoiBGogBCABQRh2aiIEaiAEIAZBCGooAgAiAUH/AXFqIgRqIAQgAUEIdkH/AXFqIgRqIAQgAUEQdkH/AXFqIgRqIAQgAUEYdmoiBGogBCAGQQxqKAIAIgFB/wFxaiIEaiAEIAFBCHZB/wFxaiIEaiAEIAFBEHZB/wFxaiIEaiAEIAFBGHZqIgJqIQMgBkEQaiEGIABBcGoiAEEPSw0ACyAARQ0BCyAAQX9qIQcCQCAAQQNxIgVFDQAgAEF8cSEAIAUhBCAGIQEDQCACIAEtAABqIgIgA2ohAyABQQFqIQEgBEF/aiIEDQALIAYgBWohBgsgB0EDSQ0AA0AgAiAGLQAAaiIBIAYtAAFqIgQgBi0AAmoiBSAGQQNqLQAAaiICIAUgBCABIANqampqIQMgBkEEaiEGIABBfGoiAA0ACwsgA0Hx/wNwIQMgAkHx/wNwIQILIAIgA0EQdHIhAQtBACABNgKECAsxAQF/QQBBACgChAgiAEEYdCAAQYD+A3FBCHRyIABBCHZBgP4DcSAAQRh2cnI2AoAJCwUAQYQICzsAQQBBATYChAggABACQQBBACgChAgiAEEYdCAAQYD+A3FBCHRyIABBCHZBgP4DcSAAQRh2cnI2AoAJCwsVAgBBgAgLBAQAAAAAQYQICwQBAAAA",hash:"02ddbd17"};function g(A,I,B,g){return new(B||(B=Promise))((function(Q,C){function i(A){try{o(g.next(A))}catch(A){C(A)}}function E(A){try{o(g.throw(A))}catch(A){C(A)}}function o(A){var I;A.done?Q(A.value):(I=A.value,I instanceof B?I:new B((function(A){A(I)}))).then(i,E)}o((g=g.apply(A,I||[])).next())}))}"function"==typeof SuppressedError&&SuppressedError;class Q{constructor(){this.mutex=Promise.resolve()}lock(){let A=()=>{};return this.mutex=this.mutex.then((()=>new Promise(A))),new Promise((I=>{A=I}))}dispatch(A){return g(this,void 0,void 0,(function*(){const I=yield this.lock();try{return yield Promise.resolve(A())}finally{I()}}))}}const C="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:global,i=null!==(I=C.Buffer)&&void 0!==I?I:null,E=C.TextEncoder?new C.TextEncoder:null;function o(A,I){return(15&A)+(A>>6|A>>3&8)<<4|(15&I)+(I>>6|I>>3&8)}function F(A,I){const B=I.length>>1;for(let g=0;g>>4;A[g++]=B>9?B+D:B+c,B=15&I[Q],A[g++]=B>9?B+D:B+c}return String.fromCharCode.apply(null,A)}const a=null!==i?A=>{if("string"==typeof A){const I=i.from(A,"utf8");return new Uint8Array(I.buffer,I.byteOffset,I.length)}if(i.isBuffer(A))return new Uint8Array(A.buffer,A.byteOffset,A.length);if(ArrayBuffer.isView(A))return new Uint8Array(A.buffer,A.byteOffset,A.byteLength);throw new Error("Invalid data type!")}:A=>{if("string"==typeof A)return E.encode(A);if(ArrayBuffer.isView(A))return new Uint8Array(A.buffer,A.byteOffset,A.byteLength);throw new Error("Invalid data type!")},w="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",k=new Uint8Array(256);for(let A=0;A>18&63)+w.charAt(B>>12&63)+w.charAt(B>>6&63)+w.charAt(63&B);Q.push(g)}if(1===g){const g=A[B-1],C=w.charAt(g>>2),i=w.charAt(g<<4&63);Q.push(`${C}${i}`),I&&Q.push("==")}else if(2===g){const g=(A[B-2]<<8)+A[B-1],C=w.charAt(g>>10),i=w.charAt(g>>4&63),E=w.charAt(g<<2&63);Q.push(`${C}${i}${E}`),I&&Q.push("=")}return Q.join("")}function n(A){let I=Math.floor(.75*A.length);const B=A.length;return"="===A[B-1]&&(I-=1,"="===A[B-2]&&(I-=1)),I}function d(A){const I=n(A),B=A.length,g=new Uint8Array(I);let Q=0;for(let I=0;I>4,Q+=1,g[Q]=(15&C)<<4|i>>2,Q+=1,g[Q]=(3&i)<<6|63&E,Q+=1}return g}const y=16384,H=new Q,U=new Map;function e(A,I){return g(this,void 0,void 0,(function*(){let B=null,Q=null,C=!1;if("undefined"==typeof WebAssembly)throw new Error("WebAssembly is not supported in this environment!");const i=()=>new DataView(B.exports.memory.buffer).getUint32(B.exports.STATE_SIZE,!0),E=H.dispatch((()=>g(this,void 0,void 0,(function*(){if(!U.has(A.name)){const I=d(A.data),B=WebAssembly.compile(I);U.set(A.name,B)}const I=yield U.get(A.name);B=yield WebAssembly.instantiate(I,{})})))),D=(A=null)=>{C=!0,B.exports.Hash_Init(A)},c=A=>{if(!C)throw new Error("update() called before init()");(A=>{let I=0;for(;I{if(!C)throw new Error("digest() called before init()");return C=!1,B.exports.Hash_Final(g),"binary"===A?Q.slice(0,I):h(w,Q,I)},G=A=>"string"==typeof A?A.length<4096:A.byteLength!0;break;case"blake2b":case"blake2s":n=(A,I)=>I<=512&&G(A);break;case"blake3":n=(A,I)=>0===I&&G(A);break;case"xxhash64":case"xxhash3":case"xxhash128":case"crc64":n=()=>!1}return yield(()=>g(this,void 0,void 0,(function*(){B||(yield E);const A=B.exports.Hash_GetBuffer(),I=B.exports.memory.buffer;Q=new Uint8Array(I,A,y)})))(),{getMemory:()=>Q,writeMemory:(A,I=0)=>{Q.set(A,I)},getExports:()=>B.exports,setMemorySize:A=>{B.exports.Hash_SetMemorySize(A);const I=B.exports.Hash_GetBuffer(),g=B.exports.memory.buffer;Q=new Uint8Array(g,I,A)},init:D,update:c,digest:k,save:()=>{if(!C)throw new Error("save() can only be called after init() and before digest()");const I=B.exports.Hash_GetState(),g=i(),Q=B.exports.memory.buffer,E=new Uint8Array(Q,I,g),o=new Uint8Array(4+g);return F(o,A.hash),o.set(E,4),o},load:I=>{if(!(I instanceof Uint8Array))throw new Error("load() expects an Uint8Array generated by save()");const g=B.exports.Hash_GetState(),Q=i(),E=4+Q,F=B.exports.memory.buffer;if(I.length!==E)throw new Error(`Bad state length (expected ${E} bytes, got ${I.length})`);if(!function(A,I){if(A.length!==2*I.length)return!1;for(let B=0;B{if(!n(A,g))return D(g),c(A),k("hex",C);const i=a(A);return Q.set(i),B.exports.Hash_Calculate(i.length,g,C),h(w,Q,I)},hashLength:I}}))}function S(A,I,B){return g(this,void 0,void 0,(function*(){const g=yield A.lock(),Q=yield e(I,B);return g(),Q}))}const N=new Q;let t=null;var J={name:"argon2",data:"AGFzbQEAAAABKQVgAX8Bf2AAAX9gEH9/f39/f39/f39/f39/f38AYAR/f39/AGACf38AAwYFAAECAwQFBgEBAoCAAgYIAX8BQZCoBAsHQQQGbWVtb3J5AgASSGFzaF9TZXRNZW1vcnlTaXplAAAOSGFzaF9HZXRCdWZmZXIAAQ5IYXNoX0NhbGN1bGF0ZQAECvEyBVgBAn9BACEBAkAgAEEAKAKICCICRg0AAkAgACACayIAQRB2IABBgIB8cSAASWoiAEAAQX9HDQBB/wHADwtBACEBQQBBACkDiAggAEEQdK18NwOICAsgAcALcAECfwJAQQAoAoAIIgANAEEAPwBBEHQiADYCgAhBACgCiAgiAUGAgCBGDQACQEGAgCAgAWsiAEEQdiAAQYCAfHEgAElqIgBAAEF/Rw0AQQAPC0EAQQApA4gIIABBEHStfDcDiAhBACgCgAghAAsgAAvcDgECfiAAIAQpAwAiECAAKQMAIhF8IBFCAYZC/v///x+DIBBC/////w+DfnwiEDcDACAMIBAgDCkDAIVCIIkiEDcDACAIIBAgCCkDACIRfCARQgGGQv7///8fgyAQQv////8Pg358IhA3AwAgBCAQIAQpAwCFQiiJIhA3AwAgACAQIAApAwAiEXwgEEL/////D4MgEUIBhkL+////H4N+fCIQNwMAIAwgECAMKQMAhUIwiSIQNwMAIAggECAIKQMAIhF8IBBC/////w+DIBFCAYZC/v///x+DfnwiEDcDACAEIBAgBCkDAIVCAYk3AwAgASAFKQMAIhAgASkDACIRfCARQgGGQv7///8fgyAQQv////8Pg358IhA3AwAgDSAQIA0pAwCFQiCJIhA3AwAgCSAQIAkpAwAiEXwgEUIBhkL+////H4MgEEL/////D4N+fCIQNwMAIAUgECAFKQMAhUIoiSIQNwMAIAEgECABKQMAIhF8IBBC/////w+DIBFCAYZC/v///x+DfnwiEDcDACANIBAgDSkDAIVCMIkiEDcDACAJIBAgCSkDACIRfCAQQv////8PgyARQgGGQv7///8fg358IhA3AwAgBSAQIAUpAwCFQgGJNwMAIAIgBikDACIQIAIpAwAiEXwgEUIBhkL+////H4MgEEL/////D4N+fCIQNwMAIA4gECAOKQMAhUIgiSIQNwMAIAogECAKKQMAIhF8IBFCAYZC/v///x+DIBBC/////w+DfnwiEDcDACAGIBAgBikDAIVCKIkiEDcDACACIBAgAikDACIRfCAQQv////8PgyARQgGGQv7///8fg358IhA3AwAgDiAQIA4pAwCFQjCJIhA3AwAgCiAQIAopAwAiEXwgEEL/////D4MgEUIBhkL+////H4N+fCIQNwMAIAYgECAGKQMAhUIBiTcDACADIAcpAwAiECADKQMAIhF8IBFCAYZC/v///x+DIBBC/////w+DfnwiEDcDACAPIBAgDykDAIVCIIkiEDcDACALIBAgCykDACIRfCARQgGGQv7///8fgyAQQv////8Pg358IhA3AwAgByAQIAcpAwCFQiiJIhA3AwAgAyAQIAMpAwAiEXwgEEL/////D4MgEUIBhkL+////H4N+fCIQNwMAIA8gECAPKQMAhUIwiSIQNwMAIAsgECALKQMAIhF8IBBC/////w+DIBFCAYZC/v///x+DfnwiEDcDACAHIBAgBykDAIVCAYk3AwAgACAFKQMAIhAgACkDACIRfCARQgGGQv7///8fgyAQQv////8Pg358IhA3AwAgDyAQIA8pAwCFQiCJIhA3AwAgCiAQIAopAwAiEXwgEUIBhkL+////H4MgEEL/////D4N+fCIQNwMAIAUgECAFKQMAhUIoiSIQNwMAIAAgECAAKQMAIhF8IBBC/////w+DIBFCAYZC/v///x+DfnwiEDcDACAPIBAgDykDAIVCMIkiEDcDACAKIBAgCikDACIRfCAQQv////8PgyARQgGGQv7///8fg358IhA3AwAgBSAQIAUpAwCFQgGJNwMAIAEgBikDACIQIAEpAwAiEXwgEUIBhkL+////H4MgEEL/////D4N+fCIQNwMAIAwgECAMKQMAhUIgiSIQNwMAIAsgECALKQMAIhF8IBFCAYZC/v///x+DIBBC/////w+DfnwiEDcDACAGIBAgBikDAIVCKIkiEDcDACABIBAgASkDACIRfCAQQv////8PgyARQgGGQv7///8fg358IhA3AwAgDCAQIAwpAwCFQjCJIhA3AwAgCyAQIAspAwAiEXwgEEL/////D4MgEUIBhkL+////H4N+fCIQNwMAIAYgECAGKQMAhUIBiTcDACACIAcpAwAiECACKQMAIhF8IBFCAYZC/v///x+DIBBC/////w+DfnwiEDcDACANIBAgDSkDAIVCIIkiEDcDACAIIBAgCCkDACIRfCARQgGGQv7///8fgyAQQv////8Pg358IhA3AwAgByAQIAcpAwCFQiiJIhA3AwAgAiAQIAIpAwAiEXwgEEL/////D4MgEUIBhkL+////H4N+fCIQNwMAIA0gECANKQMAhUIwiSIQNwMAIAggECAIKQMAIhF8IBBC/////w+DIBFCAYZC/v///x+DfnwiEDcDACAHIBAgBykDAIVCAYk3AwAgAyAEKQMAIhAgAykDACIRfCARQgGGQv7///8fgyAQQv////8Pg358IhA3AwAgDiAQIA4pAwCFQiCJIhA3AwAgCSAQIAkpAwAiEXwgEUIBhkL+////H4MgEEL/////D4N+fCIQNwMAIAQgECAEKQMAhUIoiSIQNwMAIAMgECADKQMAIhF8IBBC/////w+DIBFCAYZC/v///x+DfnwiEDcDACAOIBAgDikDAIVCMIkiEDcDACAJIBAgCSkDACIRfCAQQv////8PgyARQgGGQv7///8fg358IhA3AwAgBCAQIAQpAwCFQgGJNwMAC98aAQN/QQAhBEEAIAIpAwAgASkDAIU3A5AIQQAgAikDCCABKQMIhTcDmAhBACACKQMQIAEpAxCFNwOgCEEAIAIpAxggASkDGIU3A6gIQQAgAikDICABKQMghTcDsAhBACACKQMoIAEpAyiFNwO4CEEAIAIpAzAgASkDMIU3A8AIQQAgAikDOCABKQM4hTcDyAhBACACKQNAIAEpA0CFNwPQCEEAIAIpA0ggASkDSIU3A9gIQQAgAikDUCABKQNQhTcD4AhBACACKQNYIAEpA1iFNwPoCEEAIAIpA2AgASkDYIU3A/AIQQAgAikDaCABKQNohTcD+AhBACACKQNwIAEpA3CFNwOACUEAIAIpA3ggASkDeIU3A4gJQQAgAikDgAEgASkDgAGFNwOQCUEAIAIpA4gBIAEpA4gBhTcDmAlBACACKQOQASABKQOQAYU3A6AJQQAgAikDmAEgASkDmAGFNwOoCUEAIAIpA6ABIAEpA6ABhTcDsAlBACACKQOoASABKQOoAYU3A7gJQQAgAikDsAEgASkDsAGFNwPACUEAIAIpA7gBIAEpA7gBhTcDyAlBACACKQPAASABKQPAAYU3A9AJQQAgAikDyAEgASkD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",hash:"e4cdc523"},f={name:"blake2b",data:"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",hash:"c6f286e6"};const q=new Q;let M=null;function K(A){return!Number.isInteger(A)||A<8||A>512||A%8!=0?new Error("Invalid variant! Valid values: 8, 16, ..., 512"):null}function p(A,I){return A|I<<16}function s(A=512,I=null){if(K(A))return Promise.reject(K(A));let B=null,g=A;if(null!==I){if(B=a(I),B.length>64)return Promise.reject(new Error("Max key length is 64 bytes"));g=p(A,B.length)}const Q=A/8;return e(f,Q).then((A=>{g>512&&A.writeMemory(B),A.init(g);const I={init:g>512?()=>(A.writeMemory(B),A.init(g),I):()=>(A.init(g),I),update:B=>(A.update(B),I),digest:I=>A.digest(I),save:()=>A.save(),load:B=>(A.load(B),I),blockSize:128,digestSize:Q};return I}))}const r=new DataView(new ArrayBuffer(4));function Y(A){return r.setInt32(0,A,!0),new Uint8Array(r.buffer)}function R(A,I,B){return g(this,void 0,void 0,(function*(){if(B<=64){const A=yield s(8*B);return A.update(Y(B)),A.update(I),A.digest("binary")}const g=Math.ceil(B/32)-2,Q=new Uint8Array(B);A.init(),A.update(Y(B)),A.update(I);let C=A.digest("binary");Q.set(C.subarray(0,32),0);for(let I=1;I{var I;if(!A||"object"!=typeof A)throw new Error("Invalid options parameter. It requires an object.");if(!A.password)throw new Error("Password must be specified");if(A.password=a(A.password),A.password.length<1)throw new Error("Password must be specified");if(!A.salt)throw new Error("Salt must be specified");if(A.salt=a(A.salt),A.salt.length<8)throw new Error("Salt should be at least 8 bytes long");if(A.secret=a(null!==(I=A.secret)&&void 0!==I?I:""),!Number.isInteger(A.iterations)||A.iterations<1)throw new Error("Iterations should be a positive number");if(!Number.isInteger(A.parallelism)||A.parallelism<1)throw new Error("Parallelism should be a positive number");if(!Number.isInteger(A.hashLength)||A.hashLength<4)throw new Error("Hash length should be at least 4 bytes.");if(!Number.isInteger(A.memorySize))throw new Error("Memory size should be specified.");if(A.memorySize<8*A.parallelism)throw new Error("Memory size should be at least 8 * parallelism.");if(void 0===A.outputType&&(A.outputType="hex"),!["hex","binary","encoded"].includes(A.outputType))throw new Error(`Insupported output type ${A.outputType}. Valid values: ['hex', 'binary', 'encoded']`)};var z={name:"blake2s",data:"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",hash:"5c0ff166"};const V=new Q;let Z=null;function m(A){return!Number.isInteger(A)||A<8||A>256||A%8!=0?new Error("Invalid variant! Valid values: 8, 16, ..., 256"):null}function L(A,I){return A|I<<16}var x={name:"blake3",data:"AGFzbQEAAAABMQdgAAF/YAl/f39+f39/f38AYAZ/f39/fn8AYAF/AGADf39/AGABfgBgBX9/fn9/AX8DDg0AAQIDBAUGAwMDAwAEBQQBAQICBg4CfwFBgJgFC38AQYAICwdwCAZtZW1vcnkCAA5IYXNoX0dldEJ1ZmZlcgAACUhhc2hfSW5pdAAIC0hhc2hfVXBkYXRlAAkKSGFzaF9GaW5hbAAKDUhhc2hfR2V0U3RhdGUACw5IYXNoX0NhbGN1bGF0ZQAMClNUQVRFX1NJWkUDAQqQWw0FAEGACQufAwIDfwV+IwBB4ABrIgkkAAJAIAFFDQAgByAFciEKIAdBACACQQFGGyAGciAFciELIARBAEetIQwDQCAAKAIAIQcgCUEAKQOAiQE3AwAgCUEAKQOIiQE3AwggCUEAKQOQiQE3AxAgCUEAKQOYiQE3AxggCUEgaiAJIAdBwAAgAyALEAIgCSAJKQNAIAkpAyCFIg03AwAgCSAJKQNIIAkpAyiFIg43AwggCSAJKQNQIAkpAzCFIg83AxAgCSAJKQNYIAkpAziFIhA3AxggB0HAAGohByACIQQCQANAIAUhBgJAAkAgBEF/aiIEDgIDAAELIAohBgsgCUEgaiAJIAdBwAAgAyAGEAIgCSAJKQNAIAkpAyCFIg03AwAgCSAJKQNIIAkpAyiFIg43AwggCSAJKQNQIAkpAzCFIg83AxAgCSAJKQNYIAkpAziFIhA3AxggB0HAAGohBwwACwsgCCAQNwMYIAggDzcDECAIIA43AwggCCANNwMAIAhBIGohCCAAQQRqIQAgAyAMfCEDIAFBf2oiAQ0ACwsgCUHgAGokAAv4GwIMfh9/IAIpAyghBiACKQM4IQcgAikDMCEIIAIpAxAhCSACKQMgIQogAikDACELIAIpAwghDCACKQMYIQ0gACABKQMAIg43AwAgACABKQMIIg83AwggACABKQMQIhA3AxAgACAPQiCIpyANpyICaiABKQMYIhFCIIinIhJqIhMgDUIgiKciAWogEyAFc0EQdyIUQbrqv6p6aiIVIBJzQRR3IhZqIhcgDqcgC6ciBWogEKciE2oiGCALQiCIpyISaiAYIASnc0EQdyIYQefMp9AGaiIZIBNzQRR3IhNqIhogGHNBGHciGyAZaiIcIBNzQRl3Ih1qIAenIhNqIh4gB0IgiKciGGogHiAPpyAJpyIZaiARpyIfaiIgIAlCIIinIiFqICAgA3NBEHciA0Hy5rvjA2oiICAfc0EUdyIfaiIiIANzQRh3IiNzQRB3IiQgDkIgiKcgDKciA2ogEEIgiKciJWoiJiAMQiCIpyIeaiAmIARCIIinc0EQdyImQYXdntt7aiInICVzQRR3IiVqIiggJnNBGHciJiAnaiInaiIpIB1zQRR3Ih1qIiogGWogFyAUc0EYdyIrIBVqIiwgFnNBGXciFiAiaiAIpyIUaiIXIAhCIIinIhVqIBcgJnNBEHciFyAcaiIcIBZzQRR3IhZqIiIgF3NBGHciJiAcaiItIBZzQRl3Ii5qIhwgFWogJyAlc0EZdyIlIBpqIAqnIhZqIhogCkIgiKciF2ogGiArc0EQdyIaICMgIGoiIGoiIyAlc0EUdyIlaiInIBpzQRh3IisgHHNBEHciLyAgIB9zQRl3Ih8gKGogBqciGmoiICAGQiCIpyIcaiAgIBtzQRB3IhsgLGoiICAfc0EUdyIfaiIoIBtzQRh3IhsgIGoiIGoiLCAuc0EUdyIuaiIwICcgA2ogKiAkc0EYdyIkIClqIicgHXNBGXciHWoiKSACaiAbIClzQRB3IhsgLWoiKSAdc0EUdyIdaiIqIBtzQRh3IhsgKWoiKSAdc0EZdyIdaiAYaiItIBZqIC0gIiABaiAgIB9zQRl3Ih9qIiAgBWogJCAgc0EQdyIgICsgI2oiImoiIyAfc0EUdyIfaiIkICBzQRh3IiBzQRB3IisgKCAeaiAiICVzQRl3IiJqIiUgGmogJiAlc0EQdyIlICdqIiYgInNBFHciImoiJyAlc0EYdyIlICZqIiZqIiggHXNBFHciHWoiLSABaiAwIC9zQRh3Ii8gLGoiLCAuc0EZdyIuICRqIBdqIiQgE2ogJCAlc0EQdyIkIClqIiUgLnNBFHciKWoiLiAkc0EYdyIkICVqIiUgKXNBGXciKWoiMCATaiAmICJzQRl3IiIgKmogEmoiJiAcaiAmIC9zQRB3IiYgICAjaiIgaiIjICJzQRR3IiJqIiogJnNBGHciJiAwc0EQdyIvICAgH3NBGXciHyAnaiAUaiIgICFqICAgG3NBEHciGyAsaiIgIB9zQRR3Ih9qIicgG3NBGHciGyAgaiIgaiIsIClzQRR3IilqIjAgKiAeaiAtICtzQRh3IiogKGoiKCAdc0EZdyIdaiIrIBlqIBsgK3NBEHciGyAlaiIlIB1zQRR3Ih1qIisgG3NBGHciGyAlaiIlIB1zQRl3Ih1qIBZqIi0gEmogLSAuIBVqICAgH3NBGXciH2oiICADaiAqICBzQRB3IiAgJiAjaiIjaiImIB9zQRR3Ih9qIiogIHNBGHciIHNBEHciLSAnIBpqICMgInNBGXciImoiIyAUaiAkICNzQRB3IiMgKGoiJCAic0EUdyIiaiInICNzQRh3IiMgJGoiJGoiKCAdc0EUdyIdaiIuIBVqIDAgL3NBGHciLyAsaiIsIClzQRl3IikgKmogHGoiKiAYaiAqICNzQRB3IiMgJWoiJSApc0EUdyIpaiIqICNzQRh3IiMgJWoiJSApc0EZdyIpaiIwIBhqICQgInNBGXciIiAraiACaiIkICFqICQgL3NBEHciJCAgICZqIiBqIiYgInNBFHciImoiKyAkc0EYdyIkIDBzQRB3Ii8gICAfc0EZdyIfICdqIBdqIiAgBWogICAbc0EQdyIbICxqIiAgH3NBFHciH2oiJyAbc0EYdyIbICBqIiBqIiwgKXNBFHciKWoiMCArIBpqIC4gLXNBGHciKyAoaiIoIB1zQRl3Ih1qIi0gAWogGyAtc0EQdyIbICVqIiUgHXNBFHciHWoiLSAbc0EYdyIbICVqIiUgHXNBGXciHWogEmoiLiACaiAuICogE2ogICAfc0EZdyIfaiIgIB5qICsgIHNBEHciICAkICZqIiRqIiYgH3NBFHciH2oiKiAgc0EYdyIgc0EQdyIrICcgFGogJCAic0EZdyIiaiIkIBdqICMgJHNBEHciIyAoaiIkICJzQRR3IiJqIicgI3NBGHciIyAkaiIkaiIoIB1zQRR3Ih1qIi4gE2ogMCAvc0EYdyIvICxqIiwgKXNBGXciKSAqaiAhaiIqIBZqICogI3NBEHciIyAlaiIlIClzQRR3IilqIiogI3NBGHciIyAlaiIlIClzQRl3IilqIjAgFmogJCAic0EZdyIiIC1qIBlqIiQgBWogJCAvc0EQdyIkICAgJmoiIGoiJiAic0EUdyIiaiItICRzQRh3IiQgMHNBEHciLyAgIB9zQRl3Ih8gJ2ogHGoiICADaiAgIBtzQRB3IhsgLGoiICAfc0EUdyIfaiInIBtzQRh3IhsgIGoiIGoiLCApc0EUdyIpaiIwIC9zQRh3Ii8gLGoiLCApc0EZdyIpICogGGogICAfc0EZdyIfaiIgIBpqIC4gK3NBGHciKiAgc0EQdyIgICQgJmoiJGoiJiAfc0EUdyIfaiIraiAFaiIuIBJqIC4gJyAXaiAkICJzQRl3IiJqIiQgHGogIyAkc0EQdyIjICogKGoiJGoiJyAic0EUdyIiaiIoICNzQRh3IiNzQRB3IiogLSAUaiAkIB1zQRl3Ih1qIiQgFWogGyAkc0EQdyIbICVqIiQgHXNBFHciHWoiJSAbc0EYdyIbICRqIiRqIi0gKXNBFHciKWoiLiAWaiArICBzQRh3IiAgJmoiJiAfc0EZdyIfIChqICFqIiggHmogKCAbc0EQdyIbICxqIiggH3NBFHciH2oiKyAbc0EYdyIbIChqIiggH3NBGXciH2oiLCAUaiAwICQgHXNBGXciHWogAmoiJCAZaiAkICBzQRB3IiAgIyAnaiIjaiIkIB1zQRR3Ih1qIicgIHNBGHciICAsc0EQdyIsICMgInNBGXciIiAlaiABaiIjIANqICMgL3NBEHciIyAmaiIlICJzQRR3IiJqIiYgI3NBGHciIyAlaiIlaiIvIB9zQRR3Ih9qIjAgLHNBGHciLCAvaiIvIB9zQRl3Ih8gKyAcaiAlICJzQRl3IiJqIiUgIWogLiAqc0EYdyIqICVzQRB3IiUgICAkaiIgaiIkICJzQRR3IiJqIitqIAVqIi4gGmogLiAmIBdqICAgHXNBGXciHWoiICATaiAbICBzQRB3IhsgKiAtaiIgaiImIB1zQRR3Ih1qIiogG3NBGHciG3NBEHciLSAnIBhqICAgKXNBGXciIGoiJyASaiAjICdzQRB3IiMgKGoiJyAgc0EUdyIgaiIoICNzQRh3IiMgJ2oiJ2oiKSAfc0EUdyIfaiIuICFqICsgJXNBGHciISAkaiIkICJzQRl3IiIgKmogFWoiJSAeaiAlICNzQRB3IiMgL2oiJSAic0EUdyIiaiIqICNzQRh3IiMgJWoiJSAic0EZdyIiaiIrIAVqICcgIHNBGXciBSAwaiADaiIgIAJqICAgIXNBEHciISAbICZqIhtqIiAgBXNBFHciBWoiJiAhc0EYdyIhICtzQRB3IicgKCAbIB1zQRl3IhtqIBlqIh0gAWogHSAsc0EQdyIdICRqIiQgG3NBFHciG2oiKCAdc0EYdyIdICRqIiRqIisgInNBFHciImoiLCAnc0EYdyInICtqIisgInNBGXciIiAqIBxqICQgG3NBGXciHGoiGyAYaiAuIC1zQRh3IhggG3NBEHciGyAhICBqIiFqIiAgHHNBFHciHGoiJGogE2oiEyAaaiATICggFmogISAFc0EZdyIFaiIhIAJqICMgIXNBEHciAiAYIClqIhhqIiEgBXNBFHciBWoiFiACc0EYdyICc0EQdyITICYgEmogGCAfc0EZdyISaiIYIBdqIB0gGHNBEHciGCAlaiIXIBJzQRR3IhJqIhogGHNBGHciGCAXaiIXaiIdICJzQRR3Ih9qIiI2AgAgACAXIBJzQRl3IhIgLGogA2oiAyAUaiADICQgG3NBGHciFHNBEHciAyACICFqIgJqIiEgEnNBFHciEmoiFyADc0EYdyIDNgIwIAAgFiAUICBqIhQgHHNBGXciHGogAWoiASAVaiABIBhzQRB3IgEgK2oiGCAcc0EUdyIVaiIWIAFzQRh3IgEgGGoiGCAVc0EZdzYCECAAIBc2AgQgACACIAVzQRl3IgIgGmogHmoiBSAZaiAFICdzQRB3IgUgFGoiGSACc0EUdyICaiIeIAVzQRh3IgU2AjQgACAFIBlqIgU2AiAgACAiIBNzQRh3IhMgHWoiGSAfc0EZdzYCFCAAIBg2AiQgACAeNgIIIAAgATYCOCAAIAMgIWoiASASc0EZdzYCGCAAIBk2AiggACAWNgIMIAAgEzYCPCAAIAUgAnNBGXc2AhwgACABNgIsC6USCwN/BH4CfwF+AX8EfgJ/AX4CfwF+BH8jAEHQAmsiASQAAkAgAEUNAAJAAkBBAC0AiYoBQQZ0QQAtAIiKAWoiAg0AQYAJIQMMAQtBoIkBQYAJQYAIIAJrIgIgACACIABJGyICEAQgACACayIARQ0BIAFBoAFqQQApA9CJATcDACABQagBakEAKQPYiQE3AwAgAUEAKQOgiQEiBDcDcCABQQApA6iJASIFNwN4IAFBACkDsIkBIgY3A4ABIAFBACkDuIkBIgc3A4gBIAFBACkDyIkBNwOYAUEALQCKigEhCEEALQCJigEhCUEAKQPAiQEhCkEALQCIigEhCyABQbABakEAKQPgiQE3AwAgAUG4AWpBACkD6IkBNwMAIAFBwAFqQQApA/CJATcDACABQcgBakEAKQP4iQE3AwAgAUHQAWpBACkDgIoBNwMAIAEgCzoA2AEgASAKNwOQASABIAggCUVyQQJyIgg6ANkBIAEgBzcD+AEgASAGNwPwASABIAU3A+gBIAEgBDcD4AEgASABQeABaiABQZgBaiALIAogCEH/AXEQAiABKQMgIQQgASkDACEFIAEpAyghBiABKQMIIQcgASkDMCEMIAEpAxAhDSABKQM4IQ4gASkDGCEPIAoQBUEAQgA3A4CKAUEAQgA3A/iJAUEAQgA3A/CJAUEAQgA3A+iJAUEAQgA3A+CJAUEAQgA3A9iJAUEAQgA3A9CJAUEAQgA3A8iJAUEAQQApA4CJATcDoIkBQQBBACkDiIkBNwOoiQFBAEEAKQOQiQE3A7CJAUEAQQApA5iJATcDuIkBQQBBAC0AkIoBIgtBAWo6AJCKAUEAQQApA8CJAUIBfDcDwIkBIAtBBXQiC0GpigFqIA4gD4U3AwAgC0GhigFqIAwgDYU3AwAgC0GZigFqIAYgB4U3AwAgC0GRigFqIAQgBYU3AwBBAEEAOwGIigEgAkGACWohAwsCQCAAQYEISQ0AQQApA8CJASEEIAFBKGohEANAIARCCoYhCkIBIABBAXKteUI/hYanIQIDQCACIhFBAXYhAiAKIBFBf2qtg0IAUg0ACyARQQp2rSESAkACQCARQYAISw0AIAFBADsB2AEgAUIANwPQASABQgA3A8gBIAFCADcDwAEgAUIANwO4ASABQgA3A7ABIAFCADcDqAEgAUIANwOgASABQgA3A5gBIAFBACkDgIkBNwNwIAFBACkDiIkBNwN4IAFBACkDkIkBNwOAASABQQAtAIqKAToA2gEgAUEAKQOYiQE3A4gBIAEgBDcDkAEgAUHwAGogAyAREAQgASABKQNwIgQ3AwAgASABKQN4IgU3AwggASABKQOAASIGNwMQIAEgASkDiAEiBzcDGCABIAEpA5gBNwMoIAEgASkDoAE3AzAgASABKQOoATcDOCABLQDaASECIAEtANkBIQsgASkDkAEhCiABIAEtANgBIgg6AGggASAKNwMgIAEgASkDsAE3A0AgASABKQO4ATcDSCABIAEpA8ABNwNQIAEgASkDyAE3A1ggASABKQPQATcDYCABIAIgC0VyQQJyIgI6AGkgASAHNwO4AiABIAY3A7ACIAEgBTcDqAIgASAENwOgAiABQeABaiABQaACaiAQIAggCiACQf8BcRACIAEpA4ACIQQgASkD4AEhBSABKQOIAiEGIAEpA+gBIQcgASkDkAIhDCABKQPwASENIAEpA5gCIQ4gASkD+AEhDyAKEAVBAEEALQCQigEiAkEBajoAkIoBIAJBBXQiAkGpigFqIA4gD4U3AwAgAkGhigFqIAwgDYU3AwAgAkGZigFqIAYgB4U3AwAgAkGRigFqIAQgBYU3AwAMAQsCQAJAIAMgESAEQQAtAIqKASICIAEQBiITQQJLDQAgASkDGCEKIAEpAxAhBCABKQMIIQUgASkDACEGDAELIAJBBHIhFEEAKQOYiQEhDUEAKQOQiQEhDkEAKQOIiQEhD0EAKQOAiQEhFQNAIBNBfmoiFkEBdiIXQQFqIhhBA3EhCEEAIQkCQCAWQQZJDQAgGEH8////B3EhGUEAIQkgAUHIAmohAiABIQsDQCACIAs2AgAgAkEMaiALQcABajYCACACQQhqIAtBgAFqNgIAIAJBBGogC0HAAGo2AgAgC0GAAmohCyACQRBqIQIgGSAJQQRqIglHDQALCwJAIAhFDQAgASAJQQZ0aiECIAFByAJqIAlBAnRqIQsDQCALIAI2AgAgAkHAAGohAiALQQRqIQsgCEF/aiIIDQALCyABQcgCaiELIAFBoAJqIQIgGCEIA0AgCygCACEJIAEgDTcD+AEgASAONwPwASABIA83A+gBIAEgFTcD4AEgAUHwAGogAUHgAWogCUHAAEIAIBQQAiABKQOQASEKIAEpA3AhBCABKQOYASEFIAEpA3ghBiABKQOgASEHIAEpA4ABIQwgAkEYaiABKQOoASABKQOIAYU3AwAgAkEQaiAHIAyFNwMAIAJBCGogBSAGhTcDACACIAogBIU3AwAgAkEgaiECIAtBBGohCyAIQX9qIggNAAsCQAJAIBZBfnFBAmogE0kNACAYIRMMAQsgAUGgAmogGEEFdGoiAiABIBhBBnRqIgspAwA3AwAgAiALKQMINwMIIAIgCykDEDcDECACIAspAxg3AxggF0ECaiETCyABIAEpA6ACIgY3AwAgASABKQOoAiIFNwMIIAEgASkDsAIiBDcDECABIAEpA7gCIgo3AxggE0ECSw0ACwsgASkDICEHIAEpAyghDCABKQMwIQ0gASkDOCEOQQApA8CJARAFQQBBAC0AkIoBIgJBAWo6AJCKASACQQV0IgJBqYoBaiAKNwMAIAJBoYoBaiAENwMAIAJBmYoBaiAFNwMAIAJBkYoBaiAGNwMAQQApA8CJASASQgGIfBAFQQBBAC0AkIoBIgJBAWo6AJCKASACQQV0IgJBqYoBaiAONwMAIAJBoYoBaiANNwMAIAJBmYoBaiAMNwMAIAJBkYoBaiAHNwMAC0EAQQApA8CJASASfCIENwPAiQEgAyARaiEDIAAgEWsiAEGACEsNAAsgAEUNAQtBoIkBIAMgABAEQQApA8CJARAFCyABQdACaiQAC4YHAgl/AX4jAEHAAGsiAyQAAkACQCAALQBoIgRFDQACQEHAACAEayIFIAIgBSACSRsiBkUNACAGQQNxIQdBACEFAkAgBkEESQ0AIAAgBGohCCAGQXxxIQlBACEFA0AgCCAFaiIKQShqIAEgBWoiCy0AADoAACAKQSlqIAtBAWotAAA6AAAgCkEqaiALQQJqLQAAOgAAIApBK2ogC0EDai0AADoAACAJIAVBBGoiBUcNAAsLAkAgB0UNACABIAVqIQogBSAEaiAAakEoaiEFA0AgBSAKLQAAOgAAIApBAWohCiAFQQFqIQUgB0F/aiIHDQALCyAALQBoIQQLIAAgBCAGaiIHOgBoIAEgBmohAQJAIAIgBmsiAg0AQQAhAgwCCyADIAAgAEEoakHAACAAKQMgIAAtAGogAEHpAGoiBS0AACIKRXIQAiAAIAMpAyAgAykDAIU3AwAgACADKQMoIAMpAwiFNwMIIAAgAykDMCADKQMQhTcDECAAIAMpAzggAykDGIU3AxggAEEAOgBoIAUgCkEBajoAACAAQeAAakIANwMAIABB2ABqQgA3AwAgAEHQAGpCADcDACAAQcgAakIANwMAIABBwABqQgA3AwAgAEE4akIANwMAIABBMGpCADcDACAAQgA3AygLQQAhByACQcEASQ0AIABB6QBqIgotAAAhBSAALQBqIQsgACkDICEMA0AgAyAAIAFBwAAgDCALIAVB/wFxRXJB/wFxEAIgACADKQMgIAMpAwCFNwMAIAAgAykDKCADKQMIhTcDCCAAIAMpAzAgAykDEIU3AxAgACADKQM4IAMpAxiFNwMYIAogBUEBaiIFOgAAIAFBwABqIQEgAkFAaiICQcAASw0ACwsCQEHAACAHQf8BcSIGayIFIAIgBSACSRsiCUUNACAJQQNxIQtBACEFAkAgCUEESQ0AIAAgBmohByAJQfwAcSEIQQAhBQNAIAcgBWoiAkEoaiABIAVqIgotAAA6AAAgAkEpaiAKQQFqLQAAOgAAIAJBKmogCkECai0AADoAACACQStqIApBA2otAAA6AAAgCCAFQQRqIgVHDQALCwJAIAtFDQAgASAFaiEBIAUgBmogAGpBKGohBQNAIAUgAS0AADoAACABQQFqIQEgBUEBaiEFIAtBf2oiCw0ACwsgAC0AaCEHCyAAIAcgCWo6AGggA0HAAGokAAveAwQFfwN+BX8GfiMAQdABayIBJAACQCAAe6ciAkEALQCQigEiA08NAEEALQCKigFBBHIhBCABQShqIQVBACkDmIkBIQBBACkDkIkBIQZBACkDiIkBIQdBACkDgIkBIQggAyEJA0AgASAANwMYIAEgBjcDECABIAc3AwggASAINwMAIAEgA0EFdCIDQdGJAWoiCikDADcDKCABIANB2YkBaiILKQMANwMwIAEgA0HhiQFqIgwpAwA3AzggASADQemJAWoiDSkDADcDQCABIANB8YkBaikDADcDSCABIANB+YkBaikDADcDUCABIANBgYoBaikDADcDWCADQYmKAWopAwAhDiABQcAAOgBoIAEgDjcDYCABQgA3AyAgASAEOgBpIAEgADcDiAEgASAGNwOAASABIAc3A3ggASAINwNwIAFBkAFqIAFB8ABqIAVBwABCACAEQf8BcRACIAEpA7ABIQ4gASkDkAEhDyABKQO4ASEQIAEpA5gBIREgASkDwAEhEiABKQOgASETIA0gASkDyAEgASkDqAGFNwMAIAwgEiAThTcDACALIBAgEYU3AwAgCiAOIA+FNwMAIAlBf2oiCUH/AXEiAyACSw0AC0EAIAk6AJCKAQsgAUHQAWokAAvHCQIKfwV+IwBB4AJrIgUkAAJAAkAgAUGACEsNACAFIAA2AvwBIAVB/AFqIAFBgAhGIgZBECACQQEgA0EBQQIgBBABIAZBCnQiByABTw0BIAVB4ABqIgZCADcDACAFQdgAaiIIQgA3AwAgBUHQAGoiCUIANwMAIAVByABqIgpCADcDACAFQcAAaiILQgA3AwAgBUE4aiIMQgA3AwAgBUEwaiINQgA3AwAgBSADOgBqIAVCADcDKCAFQQA7AWggBUEAKQOAiQE3AwAgBUEAKQOIiQE3AwggBUEAKQOQiQE3AxAgBUEAKQOYiQE3AxggBSABQYAIRiIOrSACfDcDICAFIAAgB2pBACABIA4bEAQgBUGIAWpBMGogDSkDADcDACAFQYgBakE4aiAMKQMANwMAIAUgBSkDACIPNwOIASAFIAUpAwgiEDcDkAEgBSAFKQMQIhE3A5gBIAUgBSkDGCISNwOgASAFIAUpAyg3A7ABIAUtAGohACAFLQBpIQcgBSkDICECIAUtAGghASAFQYgBakHAAGogCykDADcDACAFQYgBakHIAGogCikDADcDACAFQYgBakHQAGogCSkDADcDACAFQYgBakHYAGogCCkDADcDACAFQYgBakHgAGogBikDADcDACAFIAE6APABIAUgAjcDqAEgBSAAIAdFckECciIAOgDxASAFIBI3A5gCIAUgETcDkAIgBSAQNwOIAiAFIA83A4ACIAVBoAJqIAVBgAJqIAVBsAFqIAEgAiAAQf8BcRACIAUpA8ACIQIgBSkDoAIhDyAFKQPIAiEQIAUpA6gCIREgBSkD0AIhEiAFKQOwAiETIAQgDkEFdGoiASAFKQPYAiAFKQO4AoU3AxggASASIBOFNwMQIAEgECARhTcDCCABIAIgD4U3AwBBAkEBIA4bIQYMAQsgAEIBIAFBf2pBCnZBAXKteUI/hYYiD6dBCnQiDiACIAMgBRAGIQcgACAOaiABIA5rIA9C////AYMgAnwgAyAFQcAAQSAgDkGACEsbahAGIQECQCAHQQFHDQAgBCAFKQMANwMAIAQgBSkDCDcDCCAEIAUpAxA3AxAgBCAFKQMYNwMYIAQgBSkDIDcDICAEIAUpAyg3AyggBCAFKQMwNwMwIAQgBSkDODcDOEECIQYMAQtBACEGQQAhAAJAIAEgB2oiCUECSQ0AIAlBfmoiCkEBdkEBaiIGQQNxIQ5BACEHAkAgCkEGSQ0AIAZB/P///wdxIQhBACEHIAVBiAFqIQEgBSEAA0AgASAANgIAIAFBDGogAEHAAWo2AgAgAUEIaiAAQYABajYCACABQQRqIABBwABqNgIAIABBgAJqIQAgAUEQaiEBIAggB0EEaiIHRw0ACwsgCkF+cSEIAkAgDkUNACAFIAdBBnRqIQEgBUGIAWogB0ECdGohAANAIAAgATYCACABQcAAaiEBIABBBGohACAOQX9qIg4NAAsLIAhBAmohAAsgBUGIAWogBkEBQgBBACADQQRyQQBBACAEEAEgACAJTw0AIAQgBkEFdGoiASAFIAZBBnRqIgApAwA3AwAgASAAKQMINwMIIAEgACkDEDcDECABIAApAxg3AxggBkEBaiEGCyAFQeACaiQAIAYLrRAIAn8EfgF/AX4EfwR+BH8EfiMAQfABayIBJAACQCAARQ0AAkBBAC0AkIoBIgINACABQTBqQQApA9CJATcDACABQThqQQApA9iJATcDACABQQApA6CJASIDNwMAIAFBACkDqIkBIgQ3AwggAUEAKQOwiQEiBTcDECABQQApA7iJASIGNwMYIAFBACkDyIkBNwMoQQAtAIqKASECQQAtAImKASEHQQApA8CJASEIQQAtAIiKASEJIAFBwABqQQApA+CJATcDACABQcgAakEAKQPoiQE3AwAgAUHQAGpBACkD8IkBNwMAIAFB2ABqQQApA/iJATcDACABQeAAakEAKQOAigE3AwAgASAJOgBoIAEgCDcDICABIAIgB0VyIgJBAnI6AGkgAUEoaiEKQgAhCEGACSELIAJBCnJB/wFxIQwDQCABQbABaiABIAogCUH/AXEgCCAMEAIgASABKQPQASINIAEpA7ABhTcDcCABIAEpA9gBIg4gASkDuAGFNwN4IAEgASkD4AEiDyABKQPAAYU3A4ABIAEgASkD6AEiECAGhTcDqAEgASAPIAWFNwOgASABIA4gBIU3A5gBIAEgDSADhTcDkAEgASAQIAEpA8gBhTcDiAEgAEHAACAAQcAASRsiEUF/aiESAkACQCARQQdxIhMNACABQfAAaiECIAshByARIRQMAQsgEUH4AHEhFCABQfAAaiECIAshBwNAIAcgAi0AADoAACAHQQFqIQcgAkEBaiECIBNBf2oiEw0ACwsCQCASQQdJDQADQCAHIAIpAAA3AAAgB0EIaiEHIAJBCGohAiAUQXhqIhQNAAsLIAhCAXwhCCALIBFqIQsgACARayIADQAMAgsLAkACQAJAQQAtAImKASIHQQZ0QQBBAC0AiIoBIhFrRg0AIAEgEToAaCABQQApA4CKATcDYCABQQApA/iJATcDWCABQQApA/CJATcDUCABQQApA+iJATcDSCABQQApA+CJATcDQCABQQApA9iJATcDOCABQQApA9CJATcDMCABQQApA8iJATcDKCABQQApA8CJASIINwMgIAFBACkDuIkBIgM3AxggAUEAKQOwiQEiBDcDECABQQApA6iJASIFNwMIIAFBACkDoIkBIgY3AwAgAUEALQCKigEiEyAHRXJBAnIiCzoAaSATQQRyIRNBACkDmIkBIQ1BACkDkIkBIQ5BACkDiIkBIQ9BACkDgIkBIRAMAQtBwAAhESABQcAAOgBoQgAhCCABQgA3AyAgAUEAKQOYiQEiDTcDGCABQQApA5CJASIONwMQIAFBACkDiIkBIg83AwggAUEAKQOAiQEiEDcDACABQQAtAIqKAUEEciITOgBpIAEgAkF+aiICQQV0IgdByYoBaikDADcDYCABIAdBwYoBaikDADcDWCABIAdBuYoBaikDADcDUCABIAdBsYoBaikDADcDSCABIAdBqYoBaikDADcDQCABIAdBoYoBaikDADcDOCABIAdBmYoBaikDADcDMCABIAdBkYoBaikDADcDKCATIQsgECEGIA8hBSAOIQQgDSEDIAJFDQELIAJBf2oiB0EFdCIUQZGKAWopAwAhFSAUQZmKAWopAwAhFiAUQaGKAWopAwAhFyAUQamKAWopAwAhGCABIAM3A4gBIAEgBDcDgAEgASAFNwN4IAEgBjcDcCABQbABaiABQfAAaiABQShqIhQgESAIIAtB/wFxEAIgASATOgBpIAFBwAA6AGggASAYNwNAIAEgFzcDOCABIBY3AzAgASAVNwMoIAFCADcDICABIA03AxggASAONwMQIAEgDzcDCCABIBA3AwAgASABKQPoASABKQPIAYU3A2AgASABKQPgASABKQPAAYU3A1ggASABKQPYASABKQO4AYU3A1AgASABKQPQASABKQOwAYU3A0ggB0UNACACQQV0QemJAWohAiATQf8BcSERA0AgAkFoaikDACEIIAJBcGopAwAhAyACQXhqKQMAIQQgAikDACEFIAEgDTcDiAEgASAONwOAASABIA83A3ggASAQNwNwIAFBsAFqIAFB8ABqIBRBwABCACAREAIgASATOgBpIAFBwAA6AGggASAFNwNAIAEgBDcDOCABIAM3AzAgASAINwMoIAFCADcDICABIA03AxggASAONwMQIAEgDzcDCCABIBA3AwAgASABKQPoASABKQPIAYU3A2AgASABKQPgASABKQPAAYU3A1ggASABKQPYASABKQO4AYU3A1AgASABKQPQASABKQOwAYU3A0ggAkFgaiECIAdBf2oiBw0ACwsgAUEoaiEJQgAhCEGACSELIBNBCHJB/wFxIQoDQCABQbABaiABIAlBwAAgCCAKEAIgASABKQPQASIDIAEpA7ABhTcDcCABIAEpA9gBIgQgASkDuAGFNwN4IAEgASkD4AEiBSABKQPAAYU3A4ABIAEgDSABKQPoASIGhTcDqAEgASAOIAWFNwOgASABIA8gBIU3A5gBIAEgECADhTcDkAEgASAGIAEpA8gBhTcDiAEgAEHAACAAQcAASRsiEUF/aiESAkACQCARQQdxIhMNACABQfAAaiECIAshByARIRQMAQsgEUH4AHEhFCABQfAAaiECIAshBwNAIAcgAi0AADoAACAHQQFqIQcgAkEBaiECIBNBf2oiEw0ACwsCQCASQQdJDQADQCAHIAIpAAA3AAAgB0EIaiEHIAJBCGohAiAUQXhqIhQNAAsLIAhCAXwhCCALIBFqIQsgACARayIADQALCyABQfABaiQAC6MCAQR+AkACQCAAQSBGDQBCq7OP/JGjs/DbACEBQv+kuYjFkdqCm38hAkLy5rvjo6f9p6V/IQNC58yn0NbQ67O7fyEEQQAhAAwBC0EAKQOYCSEBQQApA5AJIQJBACkDiAkhA0EAKQOACSEEQRAhAAtBACAAOgCKigFBAEIANwOAigFBAEIANwP4iQFBAEIANwPwiQFBAEIANwPoiQFBAEIANwPgiQFBAEIANwPYiQFBAEIANwPQiQFBAEIANwPIiQFBAEIANwPAiQFBACABNwO4iQFBACACNwOwiQFBACADNwOoiQFBACAENwOgiQFBACABNwOYiQFBACACNwOQiQFBACADNwOIiQFBACAENwOAiQFBAEEAOgCQigFBAEEAOwGIigELBgAgABADCwYAIAAQBwsGAEGAiQELqwIBBH4CQAJAIAFBIEYNAEKrs4/8kaOz8NsAIQNC/6S5iMWR2oKbfyEEQvLmu+Ojp/2npX8hBULnzKfQ1tDrs7t/IQZBACEBDAELQQApA5gJIQNBACkDkAkhBEEAKQOICSEFQQApA4AJIQZBECEBC0EAIAE6AIqKAUEAQgA3A4CKAUEAQgA3A/iJAUEAQgA3A/CJAUEAQgA3A+iJAUEAQgA3A+CJAUEAQgA3A9iJAUEAQgA3A9CJAUEAQgA3A8iJAUEAQgA3A8CJAUEAIAM3A7iJAUEAIAQ3A7CJAUEAIAU3A6iJAUEAIAY3A6CJAUEAIAM3A5iJAUEAIAQ3A5CJAUEAIAU3A4iJAUEAIAY3A4CJAUEAQQA6AJCKAUEAQQA7AYiKASAAEAMgAhAHCwsLAQBBgAgLBHgHAAA=",hash:"215d875f"};const u=new Q;let W=null;function O(A){return!Number.isInteger(A)||A<8||A%8!=0?new Error("Invalid variant! Valid values: 8, 16, ..."):null}var P={name:"crc32",data:"AGFzbQEAAAABEQRgAAF/YAF/AGAAAGACf38AAwgHAAEBAQIAAwUEAQECAgYOAn8BQZDJBQt/AEGACAsHcAgGbWVtb3J5AgAOSGFzaF9HZXRCdWZmZXIAAAlIYXNoX0luaXQAAgtIYXNoX1VwZGF0ZQADCkhhc2hfRmluYWwABA1IYXNoX0dldFN0YXRlAAUOSGFzaF9DYWxjdWxhdGUABgpTVEFURV9TSVpFAwEKkggHBQBBgAkLwwMBA39BgIkBIQFBACECA0AgAUEAQQBBAEEAQQBBAEEAQQAgAkEBcWsgAHEgAkEBdnMiA0EBcWsgAHEgA0EBdnMiA0EBcWsgAHEgA0EBdnMiA0EBcWsgAHEgA0EBdnMiA0EBcWsgAHEgA0EBdnMiA0EBcWsgAHEgA0EBdnMiA0EBcWsgAHEgA0EBdnMiA0EBcWsgAHEgA0EBdnM2AgAgAUEEaiEBIAJBAWoiAkGAAkcNAAtBACEAA0AgAEGEkQFqIABBhIkBaigCACICQf8BcUECdEGAiQFqKAIAIAJBCHZzIgI2AgAgAEGEmQFqIAJB/wFxQQJ0QYCJAWooAgAgAkEIdnMiAjYCACAAQYShAWogAkH/AXFBAnRBgIkBaigCACACQQh2cyICNgIAIABBhKkBaiACQf8BcUECdEGAiQFqKAIAIAJBCHZzIgI2AgAgAEGEsQFqIAJB/wFxQQJ0QYCJAWooAgAgAkEIdnMiAjYCACAAQYS5AWogAkH/AXFBAnRBgIkBaigCACACQQh2cyICNgIAIABBhMEBaiACQf8BcUECdEGAiQFqKAIAIAJBCHZzNgIAIABBBGoiAEH8B0cNAAsLJwACQEEAKAKAyQEgAEYNACAAEAFBACAANgKAyQELQQBBADYChMkBC4gDAQN/QQAoAoTJAUF/cyEBQYAJIQICQCAAQQhJDQBBgAkhAgNAIAJBBGooAgAiA0EOdkH8B3FBgJEBaigCACADQRZ2QfwHcUGAiQFqKAIAcyADQQZ2QfwHcUGAmQFqKAIAcyADQf8BcUECdEGAoQFqKAIAcyACKAIAIAFzIgFBFnZB/AdxQYCpAWooAgBzIAFBDnZB/AdxQYCxAWooAgBzIAFBBnZB/AdxQYC5AWooAgBzIAFB/wFxQQJ0QYDBAWooAgBzIQEgAkEIaiECIABBeGoiAEEHSw0ACwsCQCAARQ0AAkACQCAAQQFxDQAgACEDDAELIAFB/wFxIAItAABzQQJ0QYCJAWooAgAgAUEIdnMhASACQQFqIQIgAEF/aiEDCyAAQQFGDQADQCABQf8BcSACLQAAc0ECdEGAiQFqKAIAIAFBCHZzIgFB/wFxIAJBAWotAABzQQJ0QYCJAWooAgAgAUEIdnMhASACQQJqIQIgA0F+aiIDDQALC0EAIAFBf3M2AoTJAQsyAQF/QQBBACgChMkBIgBBGHQgAEGA/gNxQQh0ciAAQQh2QYD+A3EgAEEYdnJyNgKACQsGAEGEyQELWQACQEEAKAKAyQEgAUYNACABEAFBACABNgKAyQELQQBBADYChMkBIAAQA0EAQQAoAoTJASIBQRh0IAFBgP4DcUEIdHIgAUEIdkGA/gNxIAFBGHZycjYCgAkLCwsBAEGACAsEBAAAAA==",hash:"d2eba587"};const b=new Q;let v=null;function j(A){return!Number.isInteger(A)||A<0||A>4294967295?new Error("Polynomial must be a valid 32-bit long unsigned integer"):null}var T={name:"crc64",data:"AGFzbQEAAAABDANgAAF/YAAAYAF/AAMHBgABAgEAAQUEAQECAgYOAn8BQZCJBgt/AEGACAsHcAgGbWVtb3J5AgAOSGFzaF9HZXRCdWZmZXIAAAlIYXNoX0luaXQAAQtIYXNoX1VwZGF0ZQACCkhhc2hfRmluYWwAAw1IYXNoX0dldFN0YXRlAAQOSGFzaF9DYWxjdWxhdGUABQpTVEFURV9TSVpFAwEKgwgGBQBBgAkL9QMDAX4BfwJ+AkBBACkDgIkCQQApA4AJIgBRDQBBgIkBIQFCACECA0AgAUIAQgBCAEIAQgBCAEIAQgAgAkIBg30gAIMgAkIBiIUiA0IBg30gAIMgA0IBiIUiA0IBg30gAIMgA0IBiIUiA0IBg30gAIMgA0IBiIUiA0IBg30gAIMgA0IBiIUiA0IBg30gAIMgA0IBiIUiA0IBg30gAIMgA0IBiIUiA0IBg30gAIMgA0IBiIU3AwAgAUEIaiEBIAJCAXwiAkKAAlINAAtBACEBA0AgAUGImQFqIAFBiIkBaikDACICp0H/AXFBA3RBgIkBaikDACACQgiIhSICNwMAIAFBiKkBaiACp0H/AXFBA3RBgIkBaikDACACQgiIhSICNwMAIAFBiLkBaiACp0H/AXFBA3RBgIkBaikDACACQgiIhSICNwMAIAFBiMkBaiACp0H/AXFBA3RBgIkBaikDACACQgiIhSICNwMAIAFBiNkBaiACp0H/AXFBA3RBgIkBaikDACACQgiIhSICNwMAIAFBiOkBaiACp0H/AXFBA3RBgIkBaikDACACQgiIhSICNwMAIAFBiPkBaiACp0H/AXFBA3RBgIkBaikDACACQgiIhTcDACABQQhqIgFB+A9HDQALQQAgADcDgIkCC0EAQgA3A4iJAguUAwIBfgJ/QQApA4iJAkJ/hSEBQYAJIQICQCAAQQhJDQBBgAkhAgNAIAIpAwAgAYUiAUIwiKdB/wFxQQN0QYCZAWopAwAgAUI4iKdBA3RBgIkBaikDAIUgAUIoiKdB/wFxQQN0QYCpAWopAwCFIAFCIIinQf8BcUEDdEGAuQFqKQMAhSABpyIDQRV2QfgPcUGAyQFqKQMAhSADQQ12QfgPcUGA2QFqKQMAhSADQQV2QfgPcUGA6QFqKQMAhSADQf8BcUEDdEGA+QFqKQMAhSEBIAJBCGohAiAAQXhqIgBBB0sNAAsLAkAgAEUNAAJAAkAgAEEBcQ0AIAAhAwwBCyABQv8BgyACMQAAhadBA3RBgIkBaikDACABQgiIhSEBIAJBAWohAiAAQX9qIQMLIABBAUYNAANAIAFC/wGDIAIxAACFp0EDdEGAiQFqKQMAIAFCCIiFIgFC/wGDIAJBAWoxAACFp0EDdEGAiQFqKQMAIAFCCIiFIQEgAkECaiECIANBfmoiAw0ACwtBACABQn+FNwOIiQILZAEBfkEAQQApA4iJAiIAQjiGIABCgP4Dg0IohoQgAEKAgPwHg0IYhiAAQoCAgPgPg0IIhoSEIABCCIhCgICA+A+DIABCGIhCgID8B4OEIABCKIhCgP4DgyAAQjiIhISENwOACQsGAEGIiQILAgALCwsBAEGACAsECAAAAA==",hash:"c5ac6c16"};const $=new Q;let _=null;const AA=new Uint8Array(8);function IA(A){const I="Polynomial must be provided as a 16 char long hex string";if("string"!=typeof A||16!==A.length)return{hi:0,lo:0,err:new Error(I)};const B=Number(`0x${A.slice(0,8)}`),g=Number(`0x${A.slice(8)}`);return Number.isNaN(B)||Number.isNaN(g)?{hi:B,lo:g,err:new Error(I)}:{hi:B,lo:g,err:null}}function BA(A,I,B){const g=new DataView(A);g.setUint32(0,I,!0),g.setUint32(4,B,!0)}var gA={name:"md4",data:"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",hash:"bd8ce7c7"};const QA=new Q;let CA=null;var iA={name:"md5",data:"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",hash:"e6508e4b"};const EA=new Q;let oA=null;var FA={name:"sha1",data:"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",hash:"6b530c24"};const DA=new Q;let cA=null;var hA={name:"sha3",data:"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",hash:"fb24e536"};const aA=new Q;let wA=null;function kA(A){return[224,256,384,512].includes(A)?null:new Error("Invalid variant! Valid values: 224, 256, 384, 512")}const GA=new Q;let nA=null;function dA(A){return[224,256,384,512].includes(A)?null:new Error("Invalid variant! Valid values: 224, 256, 384, 512")}var yA={name:"sha256",data:"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c2pBx6KerX1qIhkgASADcyACcSABIANxcyABQR53IAFBE3dzIAFBCndzaiAaaiICaiIJIBMgEnNxIBJzaiAJQRp3IAlBFXdzIAlBB3dzakHRxqk2aiIaIAIgAXMgA3EgAiABcXMgAkEedyACQRN3cyACQQp3c2ogGGoiA2oiESAJIBNzcSATc2ogEUEadyARQRV3cyARQQd3c2pB59KkoQFqIhggAyACcyABcSADIAJxcyADQR53IANBE3dzIANBCndzaiAUaiIBaiISIBEgCXNxIAlzaiASQRp3IBJBFXdzIBJBB3dzakGFldy9AmoiFCABIANzIAJxIAEgA3FzIAFBHncgAUETd3MgAUEKd3NqIBdqIgJqIhMgI2ogJiASaiAiIBFqICUgCWogEyASIBFzcSARc2ogE0EadyATQRV3cyATQQd3c2pBuMLs8AJqIhcgAiABcyADcSACIAFxcyACQR53IAJBE3dzIAJBCndzaiAZaiIDaiIJIBMgEnNxIBJzaiAJQRp3IAlBFXdzIAlBB3dzakH827HpBGoiGSADIAJzIAFxIAMgAnFzIANBHncgA0ETd3MgA0EKd3NqIBpqIgFqIhEgCSATc3EgE3NqIBFBGncgEUEVd3MgEUEHd3NqQZOa4JkFaiIaIAEgA3MgAnEgASADcXMgAUEedyABQRN3cyABQQp3c2ogGGoiAmoiEiARIAlzcSAJc2ogEkEadyASQRV3cyASQQd3c2pB1OapqAZqIhggAiABcyADcSACIAFxcyACQR53IAJBE3dzIAJBCndzaiAUaiIDaiITaiAoIBJqICQgEWogJyAJaiATIBIgEXNxIBFzaiATQRp3IBNBFXdzIBNBB3dzakG7laizB2oiFCADIAJzIAFxIAMgAnFzIANBHncgA0ETd3MgA0EKd3NqIBdqIgFqIgkgEyASc3EgEnNqIAlBGncgCUEVd3MgCUEHd3NqQa6Si454aiIXIAEgA3MgAnEgASADcXMgAUEedyABQRN3cyABQQp3c2ogGWoiAmoiESAJIBNzcSATc2ogEUEadyARQRV3cyARQQd3c2pBhdnIk3lqIhkgAiABcyADcSACIAFxcyACQR53IAJBE3dzIAJBCndzaiAaaiIDaiISIBEgCXNxIAlzaiASQRp3IBJBFXdzIBJBB3dzakGh0f+VemoiGiADIAJz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",hash:"8c18dd94"};const HA=new Q;let UA=null;const eA=new Q;let SA=null;function NA(){return e(yA,32).then((A=>{A.init(256);const I={init:()=>(A.init(256),I),update:B=>(A.update(B),I),digest:I=>A.digest(I),save:()=>A.save(),load:B=>(A.load(B),I),blockSize:64,digestSize:32};return I}))}var tA={name:"sha512",data:"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",hash:"f2e40eb1"};const JA=new Q;let fA=null;const qA=new Q;let MA=null;var KA={name:"xxhash32",data:"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",hash:"4bb12485"};const pA=new Q;let sA=null;function rA(A){return!Number.isInteger(A)||A<0||A>4294967295?new Error("Seed must be a valid 32-bit long unsigned integer."):null}var YA={name:"xxhash64",data:"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",hash:"177fbfa3"};const RA=new Q;let lA=null;const XA=new Uint8Array(8);function zA(A){return!Number.isInteger(A)||A<0||A>4294967295?new Error("Seed must be given as two valid 32-bit long unsigned integers (lo + high)."):null}function VA(A,I,B){const g=new DataView(A);g.setUint32(0,I,!0),g.setUint32(4,B,!0)}var ZA={name:"xxhash3",data:"AGFzbQEAAAABNAhgAAF/YAR/f39/AGAHf39/f39/fwBgBH9+fn4BfmAEf39/fgF+YAN/f34BfmAAAGABfwADDg0AAQIDBAUFBQYHBgAGBQQBAQICBg4CfwFBwI4FC38AQcAJCwdwCAZtZW1vcnkCAA5IYXNoX0dldEJ1ZmZlcgAACUhhc2hfSW5pdAAIC0hhc2hfVXBkYXRlAAkKSGFzaF9GaW5hbAAKDUhhc2hfR2V0U3RhdGUACw5IYXNoX0NhbGN1bGF0ZQAMClNUQVRFX1NJWkUDAQr6QQ0FAEGACgvkAwMPfgF/AX4CQCADRQ0AIAApAzAhBCAAKQM4IQUgACkDICEGIAApAyghByAAKQMQIQggACkDGCEJIAApAwAhCiAAKQMIIQsDQCAFIAFBMGopAwAiDHwgAkE4aikDACABQThqKQMAIg2FIgVCIIggBUL/////D4N+fCEFIAcgAUEgaikDACIOfCACQShqKQMAIAFBKGopAwAiD4UiB0IgiCAHQv////8Pg358IQcgCSABQRBqKQMAIhB8IAJBGGopAwAgAUEYaikDACIRhSIJQiCIIAlC/////w+DfnwhCSALIAEpAwAiEnwgAkEIaiITKQMAIAFBCGopAwAiFIUiC0IgiCALQv////8Pg358IQsgAkEwaikDACAMhSIMQiCIIAxC/////w+DfiAEfCANfCEEIAJBIGopAwAgDoUiDEIgiCAMQv////8Pg34gBnwgD3whBiACQRBqKQMAIBCFIgxCIIggDEL/////D4N+IAh8IBF8IQggAikDACAShSIMQiCIIAxC/////w+DfiAKfCAUfCEKIAFBwABqIQEgEyECIANBf2oiAw0ACyAAIAk3AxggACAKNwMAIAAgCzcDCCAAIAc3AyggACAINwMQIAAgBTcDOCAAIAY3AyAgACAENwMwCwveAgIBfwF+AkAgBCACIAEoAgAiB2siAkkNACAAIAMgBSAHQQN0aiACEAEgACAFIAZqIgcpAwAgACkDACIIQi+IhSAIhUKx893xCX43AwAgACAHKQMIIAApAwgiCEIviIUgCIVCsfPd8Ql+NwMIIAAgBykDECAAKQMQIghCL4iFIAiFQrHz3fEJfjcDECAAIAcpAxggACkDGCIIQi+IhSAIhUKx893xCX43AxggACAHKQMgIAApAyAiCEIviIUgCIVCsfPd8Ql+NwMgIAAgBykDKCAAKQMoIghCL4iFIAiFQrHz3fEJfjcDKCAAIAcpAzAgACkDMCIIQi+IhSAIhUKx893xCX43AzAgACAHKQM4IAApAzgiCEIviIUgCIVCsfPd8Ql+NwM4IAAgAyACQQZ0aiAFIAQgAmsiBxABIAEgBzYCAA8LIAAgAyAFIAdBA3RqIAQQASABIAcgBGo2AgALhQEBAX8gAiABhSADpyIEQRh0IARBgP4DcUEIdHIgBEEIdkGA/gNxIARBGHZycq1CIIYgA4V9QQA1AoCMAUIghiAAQfyLAWo1AgCEhSIDQjGJIANCGImFIAOFQqW+4/TRjIfZn39+IgNCI4ggAK18IAOFQqW+4/TRjIfZn39+IgNCHIggA4ULZwAgAiABc60gA3wiA0IhiEEALQCAjAFBEHQgAEEIdHIgAEEBdkGAjAFqLQAAQRh0ciAAQf+LAWotAAByrYUgA4VCz9bTvtLHq9lCfiIDQh2IIAOFQvnz3fGZ9pmrFn4iA0IgiCADhQuJAwEEfgJAIABBCUkNAEEAKQOAjAEgASkDICABKQMYhSACfIUiA0I4hiADQoD+A4NCKIaEIANCgID8B4NCGIYgA0KAgID4D4NCCIaEhCADQgiIQoCAgPgPgyADQhiIQoCA/AeDhCADQiiIQoD+A4MgA0I4iISEhCAArXwgAEH4iwFqKQMAIAEpAzAgASkDKIUgAn2FIgJ8IAJC/////w+DIgQgA0IgiCIFfiIGQv////8PgyACQiCIIgIgA0L/////D4MiA358IAQgA34iA0IgiHwiBEIghiADQv////8Pg4QgBkIgiCACIAV+fCAEQiCIfIV8IgNCJYggA4VC+fPd8ZnymasWfiIDQiCIIAOFDwsCQCAAQQRJDQAgACABQQhqKQMAIAFBEGopAwAgAhADDwsCQCAARQ0AIAAgASgCACABQQRqKAIAIAIQBA8LIAEpAzggASkDQIUgAoUiA0IhiCADhULP1tO+0ser2UJ+IgNCHYggA4VC+fPd8Zn2masWfiIDQiCIIAOFC94IAQZ+IACtQoeVr6+Ytt6bnn9+IQMCQCAAQSFJDQACQCAAQcEASQ0AAkAgAEHhAEkNACABKQNoIAJ9QQApA7iMAYUiBEL/////D4MiBSABKQNgIAJ8QQApA7CMAYUiBkIgiCIHfiIIQv////8PgyAEQiCIIgQgBkL/////D4MiBn58IAUgBn4iBUIgiHwiBkIghiAFQv////8Pg4QgCEIgiCAEIAd+fCAGQiCIfIUgA3wgASkDeCACfSAAQciLAWopAwCFIgNC/////w+DIgQgASkDcCACfCAAQcCLAWopAwCFIgVCIIgiBn4iB0L/////D4MgA0IgiCIDIAVC/////w+DIgV+fCAEIAV+IgRCIIh8IgVCIIYgBEL/////D4OEIAdCIIggAyAGfnwgBUIgiHyFfCEDCyABKQNIIAJ9QQApA6iMAYUiBEL/////D4MiBSABKQNAIAJ8QQApA6CMAYUiBkIgiCIHfiIIQv////8PgyAEQiCIIgQgBkL/////D4MiBn58IAUgBn4iBUIgiHwiBkIghiAFQv////8Pg4QgCEIgiCAEIAd+fCAGQiCIfIUgA3wgASkDWCACfSAAQdiLAWopAwCFIgNC/////w+DIgQgASkDUCACfCAAQdCLAWopAwCFIgVCIIgiBn4iB0L/////D4MgA0IgiCIDIAVC/////w+DIgV+fCAEIAV+IgRCIIh8IgVCIIYgBEL/////D4OEIAdCIIggAyAGfnwgBUIgiHyFfCEDCyABKQMoIAJ9QQApA5iMAYUiBEL/////D4MiBSABKQMgIAJ8QQApA5CMAYUiBkIgiCIHfiIIQv////8PgyAEQiCIIgQgBkL/////D4MiBn58IAUgBn4iBUIgiHwiBkIghiAFQv////8Pg4QgCEIgiCAEIAd+fCAGQiCIfIUgA3wgASkDOCACfSAAQeiLAWopAwCFIgNC/////w+DIgQgASkDMCACfCAAQeCLAWopAwCFIgVCIIgiBn4iB0L/////D4MgA0IgiCIDIAVC/////w+DIgV+fCAEIAV+IgRCIIh8IgVCIIYgBEL/////D4OEIAdCIIggAyAGfnwgBUIgiHyFfCEDCyABKQMIIAJ9QQApA4iMAYUiBEL/////D4MiBSABKQMAIAJ8QQApA4CMAYUiBkIgiCIHfiIIQv////8PgyAEQiCIIgQgBkL/////D4MiBn58IAUgBn4iBUIgiHwiBkIghiAFQv////8Pg4QgCEIgiCAEIAd+fCAGQiCIfIUgA3wgASkDGCACfSAAQfiLAWopAwCFIgNC/////w+DIgQgASkDECACfCAAQfCLAWopAwCFIgJCIIgiBX4iBkL/////D4MgA0IgiCIDIAJC/////w+DIgJ+fCAEIAJ+IgJCIIh8IgRCIIYgAkL/////D4OEIAZCIIggAyAFfnwgBEIgiHyFfCICQiWIIAKFQvnz3fGZ8pmrFn4iAkIgiCAChQv8CgQBfwV+An8BfkEAIQMgASkDeCACfUEAKQP4jAGFIgRC/////w+DIgUgASkDcCACfEEAKQPwjAGFIgZCIIgiB34iCEL/////D4MgBEIgiCIEIAZC/////w+DIgZ+fCAFIAZ+IgVCIIh8IgZCIIYgBUL/////D4OEIAhCIIggBCAHfnwgBkIgiHyFIAEpA2ggAn1BACkD6IwBhSIEQv////8PgyIFIAEpA2AgAnxBACkD4IwBhSIGQiCIIgd+IghC/////w+DIARCIIgiBCAGQv////8PgyIGfnwgBSAGfiIFQiCIfCIGQiCGIAVC/////w+DhCAIQiCIIAQgB358IAZCIIh8hSABKQNYIAJ9QQApA9iMAYUiBEL/////D4MiBSABKQNQIAJ8QQApA9CMAYUiBkIgiCIHfiIIQv////8PgyAEQiCIIgQgBkL/////D4MiBn58IAUgBn4iBUIgiHwiBkIghiAFQv////8Pg4QgCEIgiCAEIAd+fCAGQiCIfIUgASkDSCACfUEAKQPIjAGFIgRC/////w+DIgUgASkDQCACfEEAKQPAjAGFIgZCIIgiB34iCEL/////D4MgBEIgiCIEIAZC/////w+DIgZ+fCAFIAZ+IgVCIIh8IgZCIIYgBUL/////D4OEIAhCIIggBCAHfnwgBkIgiHyFIAEpAzggAn1BACkDuIwBhSIEQv////8PgyIFIAEpAzAgAnxBACkDsIwBhSIGQiCIIgd+IghC/////w+DIARCIIgiBCAGQv////8PgyIGfnwgBSAGfiIFQiCIfCIGQiCGIAVC/////w+DhCAIQiCIIAQgB358IAZCIIh8hSABKQMoIAJ9QQApA6iMAYUiBEL/////D4MiBSABKQMgIAJ8QQApA6CMAYUiBkIgiCIHfiIIQv////8PgyAEQiCIIgQgBkL/////D4MiBn58IAUgBn4iBUIgiHwiBkIghiAFQv////8Pg4QgCEIgiCAEIAd+fCAGQiCIfIUgASkDGCACfUEAKQOYjAGFIgRC/////w+DIgUgASkDECACfEEAKQOQjAGFIgZCIIgiB34iCEL/////D4MgBEIgiCIEIAZC/////w+DIgZ+fCAFIAZ+IgVCIIh8IgZCIIYgBUL/////D4OEIAhCIIggBCAHfnwgBkIgiHyFIAEpAwggAn1BACkDiIwBhSIEQv////8PgyIFIAEpAwAgAnxBACkDgIwBhSIGQiCIIgd+IghC/////w+DIARCIIgiBCAGQv////8PgyIGfnwgBSAGfiIFQiCIfCIGQiCGIAVC/////w+DhCAIQiCIIAQgB358IAZCIIh8hSAArUKHla+vmLbem55/fnx8fHx8fHx8IgRCJYggBIVC+fPd8ZnymasWfiIEQiCIIASFIQQCQCAAQZABSA0AIABBBHZBeGohCQNAIAEgA2oiCkELaikDACACfSADQYiNAWopAwCFIgVC/////w+DIgYgCkEDaikDACACfCADQYCNAWopAwCFIgdCIIgiCH4iC0L/////D4MgBUIgiCIFIAdC/////w+DIgd+fCAGIAd+IgZCIIh8IgdCIIYgBkL/////D4OEIAtCIIggBSAIfnwgB0IgiHyFIAR8IQQgA0EQaiEDIAlBf2oiCQ0ACwsgASkDfyACfSAAQfiLAWopAwCFIgVC/////w+DIgYgASkDdyACfCAAQfCLAWopAwCFIgJCIIgiB34iCEL/////D4MgBUIgiCIFIAJC/////w+DIgJ+fCAGIAJ+IgJCIIh8IgZCIIYgAkL/////D4OEIAhCIIggBSAHfnwgBkIgiHyFIAR8IgJCJYggAoVC+fPd8ZnymasWfiICQiCIIAKFC98FAgF+AX8CQAJAQQApA4AKIgBQRQ0AQYAIIQFCACEADAELAkBBACkDoI4BIABSDQBBACEBDAELQQAhAUEAQq+v79e895Kg/gAgAH03A/iLAUEAIABCxZbr+djShYIofDcD8IsBQQBCj/Hjja2P9JhOIAB9NwPoiwFBACAAQqus+MXV79HQfHw3A+CLAUEAQtOt1LKShbW0nn8gAH03A9iLAUEAIABCl5r0jvWWvO3JAHw3A9CLAUEAQsWDgv2v/8SxayAAfTcDyIsBQQAgAELqi7OdyOb09UN8NwPAiwFBAELIv/rLnJveueQAIAB9NwO4iwFBACAAQoqjgd/Ume2sMXw3A7CLAUEAQvm57738+MKnHSAA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QQApA4CKATcDACACQQApA4iKATcDCCACQQApA5CKATcDECACQQApA5iKATcDGCACQQApA6CKATcDICACQQApA6iKATcDKCACQQApA7CKASIFNwMwIAJBACkDuIoBIgY3AzgCQAJAQQAoAoCOASIHQcAASQ0AIAJBACgCiI4BNgJAIAIgAkHAAGpBACgCmI4BQYCMASAHQX9qQQZ2IANBACgCnI4BIgAQAiADIABqIgBBeWopAwAhCCAAKQMJIQkgACkDGSEKIAApAykhCyAHQcCLAWopAwAhBSAAKQMBIQwgB0HIiwFqKQMAIQYgB0HQiwFqKQMAIQ0gACkDESEOIAdB2IsBaikDACEPIAdB4IsBaikDACEQIAApAyEhESAHQeiLAWopAwAhEiACKQMAIRMgAikDECEUIAIpAyAhFSACKQMwIRYgAikDCCEXIAIpAxghGCACKQMoIRkgAiACKQM4IAdB8IsBaikDACIafCAAKQMxIAdB+IsBaikDACIbhSIcQiCIIBxC/////w+Dfnw3AzggGSAQfCARIBKFIhFCIIggEUL/////D4N+fCERIBggDXwgDiAPhSIOQiCIIA5C/////w+DfnwhDiAXIAV8IAwgBoUiDEIgiCAMQv////8Pg358IQwgGyAWIAsgGoUiC0IgiCALQv////8Pg358fCELIBIgFSAKIBCFIhBCIIggEEL/////D4N+fHwhECAPIBQgCSANhSINQiCIIA1C/////w+Dfnx8IRIgBiATIAggBYUiBUIgiCAFQv////8Pg358fCEIDAELIAdBwI0BaiEdQcAAIAdrIR4gAkHAAGohAAJAAkACQCAHQThNDQAgHiEfDAELAkACQEE4IAdrQQN2QQFqQQdxIh8NACACQcAAaiEAIB4hHwwBCyACQcAAaiEAIB9BA3QiICEfA0AgACAdKQMANwMAIABBCGohACAdQQhqIR0gH0F4aiIfDQALQcAAIAcgIGprIR8LAkAgBw0AA0AgACAdKQMANwMAIABBCGogHUEIaikDADcDACAAQRBqIB1BEGopAwA3AwAgAEEYaiAdQRhqKQMANwMAIABBIGogHUEgaikDADcDACAAQShqIB1BKGopAwA3AwAgAEEwaiAdQTBqKQMANwMAIABBOGogHUE4aikDADcDACAAQcAAaiEAIB1BwABqIR0gH0FAaiIfQQdLDQALCyAfRQ0BCyAfQX9qISECQCAfQQdxIiBFDQAgH0F4cSEfA0AgACAdLQAAOgAAIABBAWohACAdQQFqIR0gIEF/aiIgDQALCyAhQQdJDQADQCAAIB0pAAA3AAAgAEEIaiEAIB1BCGohHSAfQXhqIh8NAAsLIAJBwABqIB5qIR1BgIwBIQACQAJAAkAgB0EISQ0AAkAgB0E4akEDdkEBakEHcSIfDQAMAgsgH0EDdCEgQYCMASEAA0AgHSAAKQMANwMAIB1BCGohHSAAQQhqIQAgH0F/aiIfDQALIAcgIGshBwsgB0UNAQJAAkAgB0EHcSIgDQAgByEfDAELIAdBeHEhHwNAIB0gAC0AADoAACAdQQFqIR0gAEEBaiEAICBBf2oiIA0ACwsgB0EISQ0BCwNAIB0gACkAADcAACAdQQhqIR0gAEEIaiEAIB9BeGoiHw0ACwsgA0EAKAKcjgFqIgBBeWopAwAhCiAAKQMJIRMgACkDGSEUIAApAykhCyAAKQMBIQwgACkDESEOIAApAyEhESACKQMAIRUgAikDECEWIAIpAyAhFyACKQMIIRggAikDQCENIAIpA0ghDyACKQMYIRkgAikDUCESIAIpA1ghCCACKQMoIRogAikDYCEQIAIpA2ghCSACIAYgAikDcCIbfCAAKQMxIAIpA3giBoUiHEIgiCAcQv////8Pg358NwM4IBogEHwgESAJhSIRQiCIIBFC/////w+DfnwhESAZIBJ8IA4gCIUiDkIgiCAOQv////8Pg358IQ4gGCANfCAMIA+FIgxCIIggDEL/////D4N+fCEMIAYgCyAbhSILQiCIIAtC/////w+DfiAFfHwhCyAJIBcgFCAQhSIFQiCIIAVC/////w+Dfnx8IRAgCCAWIBMgEoUiBUIgiCAFQv////8Pg358fCESIA8gFSAKIA2FIgVCIIggBUL/////D4N+fHwhCAsgAykDQyACKQM4hSIFQv////8PgyIGIAMpAzsgC4UiC0IgiCINfiIPQv////8PgyAFQiCIIgUgC0L/////D4MiC358IAYgC34iBkIgiHwiC0IghiAGQv////8Pg4QgD0IgiCAFIA1+fCALQiCIfIUgAykDMyARhSIFQv////8PgyIGIAMpAysgEIUiC0IgiCINfiIPQv////8PgyAFQiCIIgUgC0L/////D4MiC358IAYgC34iBkIgiHwiC0IghiAGQv////8Pg4QgD0IgiCAFIA1+fCALQiCIfIUgAykDIyAOhSIFQv////8PgyIGIAMpAxsgEoUiC0IgiCINfiIPQv////8PgyAFQiCIIgUgC0L/////D4MiC358IAYgC34iBkIgiHwiC0IghiAGQv////8Pg4QgD0IgiCAFIA1+fCALQiCIfIUgAykDEyAMhSIFQv////8PgyIGIAMpAwsgCIUiC0IgiCINfiIPQv////8PgyAFQiCIIgUgC0L/////D4MiC358IAYgC34iBkIgiHwiC0IghiAGQv////8Pg4QgD0IgiCAFIA1+fCALQiCIfIUgBEKHla+vmLbem55/fnx8fHwiBEIliCAEhUL5893xmfKZqxZ+IgRCIIggBIUhBAwBCyAEpyEAAkBBACkDoI4BIgRQDQACQCAAQRBLDQAgAEGACCAEEAUhBAwCCwJAIABBgAFLDQAgAEGACCAEEAYhBAwCCyAAQYAIIAQQByEEDAELAkAgAEEQSw0AIAAgA0IAEAUhBAwBCwJAIABBgAFLDQAgACADQgAQBiEEDAELIAAgA0IAEAchBAtBACAEQjiGIARCgP4Dg0IohoQgBEKAgPwHg0IYhiAEQoCAgPgPg0IIhoSEIARCCIhCgICA+A+DIARCGIhCgID8B4OEIARCKIhCgP4DgyAEQjiIhISENwOACiABJAALBgBBgIoBCwIACwvMAQEAQYAIC8QBuP5sOSOkS758AYEs9yGtHN7UbemDkJfbckCkpLezZx/LeeZOzMDleIJa0H3M/3IhuAhGdPdDJI7gNZDmgTomTDwoUruRwwDLiNBlixtTLqNxZEiXog35TjgZ70ap3qzYqPp2P+OcND/53LvHxwtPHYpR4EvNtFkxyJ9+ydl4c2TqxayDNNPrw8WBoP/6E2PrFw3dUbfw2knTFlUmKdRonisWvlh9R6H8j/i40XrQMc5FyzqPlRYEKK/X+8q7S0B+QAIAAA==",hash:"5a2fbdbb"};const mA=new Q;let LA=null;const xA=new Uint8Array(8);function uA(A){return!Number.isInteger(A)||A<0||A>4294967295?new Error("Seed must be given as two valid 32-bit long unsigned integers (lo + high)."):null}function WA(A,I,B){const g=new DataView(A);g.setUint32(0,I,!0),g.setUint32(4,B,!0)}var OA={name:"xxhash128",data:"AGFzbQEAAAABKwdgAAF/YAR/f39/AGAHf39/f39/fwBgA39/fgF+YAR/f39+AGAAAGABfwADDQwAAQIDBAQEBQYFAAUFBAEBAgIGDgJ/AUHAjgULfwBBwAkLB3AIBm1lbW9yeQIADkhhc2hfR2V0QnVmZmVyAAAJSGFzaF9Jbml0AAcLSGFzaF9VcGRhdGUACApIYXNoX0ZpbmFsAAkNSGFzaF9HZXRTdGF0ZQAKDkhhc2hfQ2FsY3VsYXRlAAsKU1RBVEVfU0laRQMBCqBNDAUAQYAKC+QDAw9+AX8BfgJAIANFDQAgACkDMCEEIAApAzghBSAAKQMgIQYgACkDKCEHIAApAxAhCCAAKQMYIQkgACkDACEKIAApAwghCwNAIAUgAUEwaikDACIMfCACQThqKQMAIAFBOGopAwAiDYUiBUIgiCAFQv////8Pg358IQUgByABQSBqKQMAIg58IAJBKGopAwAgAUEoaikDACIPhSIHQiCIIAdC/////w+DfnwhByAJIAFBEGopAwAiEHwgAkEYaikDACABQRhqKQMAIhGFIglCIIggCUL/////D4N+fCEJIAsgASkDACISfCACQQhqIhMpAwAgAUEIaikDACIUhSILQiCIIAtC/////w+DfnwhCyACQTBqKQMAIAyFIgxCIIggDEL/////D4N+IAR8IA18IQQgAkEgaikDACAOhSIMQiCIIAxC/////w+DfiAGfCAPfCEGIAJBEGopAwAgEIUiDEIgiCAMQv////8Pg34gCHwgEXwhCCACKQMAIBKFIgxCIIggDEL/////D4N+IAp8IBR8IQogAUHAAGohASATIQIgA0F/aiIDDQALIAAgCTcDGCAAIAo3AwAgACALNwMIIAAgBzcDKCAAIAg3AxAgACAFNwM4IAAgBjcDICAAIAQ3AzALC94CAgF/AX4CQCAEIAIgASgCACIHayICSQ0AIAAgAyAFIAdBA3RqIAIQASAAIAUgBmoiBykDACAAKQMAIghCL4iFIAiFQrHz3fEJfjcDACAAIAcpAwggACkDCCIIQi+IhSAIhUKx893xCX43AwggACAHKQMQIAApAxAiCEIviIUgCIVCsfPd8Ql+NwMQIAAgBykDGCAAKQMYIghCL4iFIAiFQrHz3fEJfjcDGCAAIAcpAyAgACkDICIIQi+IhSAIhUKx893xCX43AyAgACAHKQMoIAApAygiCEIviIUgCIVCsfPd8Ql+NwMoIAAgBykDMCAAKQMwIghCL4iFIAiFQrHz3fEJfjcDMCAAIAcpAzggACkDOCIIQi+IhSAIhUKx893xCX43AzggACADIAJBBnRqIAUgBCACayIHEAEgASAHNgIADwsgACADIAUgB0EDdGogBBABIAEgByAEajYCAAvtAwEFfiABKQM4IAApAziFIgNC/////w+DIgQgASkDMCAAKQMwhSIFQiCIIgZ+IgdC/////w+DIANCIIgiAyAFQv////8PgyIFfnwgBCAFfiIEQiCIfCIFQiCGIARC/////w+DhCAHQiCIIAMgBn58IAVCIIh8hSABKQMoIAApAyiFIgNC/////w+DIgQgASkDICAAKQMghSIFQiCIIgZ+IgdC/////w+DIANCIIgiAyAFQv////8PgyIFfnwgBCAFfiIEQiCIfCIFQiCGIARC/////w+DhCAHQiCIIAMgBn58IAVCIIh8hSABKQMYIAApAxiFIgNC/////w+DIgQgASkDECAAKQMQhSIFQiCIIgZ+IgdC/////w+DIANCIIgiAyAFQv////8PgyIFfnwgBCAFfiIEQiCIfCIFQiCGIARC/////w+DhCAHQiCIIAMgBn58IAVCIIh8hSABKQMIIAApAwiFIgNC/////w+DIgQgASkDACAAKQMAhSIFQiCIIgZ+IgdC/////w+DIANCIIgiAyAFQv////8PgyIFfnwgBCAFfiIEQiCIfCIFQiCGIARC/////w+DhCAHQiCIIAMgBn58IAVCIIh8hSACfHx8fCICQiWIIAKFQvnz3fGZ8pmrFn4iAkIgiCAChQu6CAIFfgN/AkAgAUEJSQ0AIAAgAUH4iwFqKQMAIgQgAikDOCACKQMwhSADfIUiBUL/////D4NC95Svrwh+IAVCgICAgHCDfEEAKQOAjAEgAikDKCACKQMghSADfYUgBIUiA0IgiCIEQrHz3fEJfnwgBEKHla+vCH4iBEIgiHwgBEL/////D4MgA0L/////D4MiA0Kx893xCX58IANCh5Wvrwh+IgRCIIh8IgVCIIh8IgNCOIYgA0KA/gODQiiGhCADQoCA/AeDQhiGIANCgICA+A+DQgiGhIQgA0IIiEKAgID4D4MgA0IYiEKAgPwHg4QgA0IoiEKA/gODIANCOIiEhIQgBEL/////D4MgAUF/aq1CNoaEIAVCIIZ8hSIEQiCIIgVCz9bTvgJ+IgZC/////w+DIARC/////w+DIgRCvdzKlQx+fCAEQs/W074CfiIEQiCIfCIHQiCGIghCJYggCCAEQv////8Pg4SFQvnz3fGZ8pmrFn4iBEIgiCAEhTcDACAAIAVCvdzKlQx+IANCz9bTvtLHq9lCfnwgBkIgiHwgB0IgiHwiA0IliCADhUL5893xmfKZqxZ+IgNCIIggA4U3AwgPCwJAIAFBBEkNACAAIAIpAxggAikDEIUgA6ciAkEYdCACQYD+A3FBCHRyIAJBCHZBgP4DcSACQRh2cnKtQiCGIAOFfCABQfyLAWo1AgBCIIZBADUCgIwBhIUiA0IgiCIEIAFBAnRBh5Wvr3hqrSIFfiIGQiCIIARCsfPd8Ql+fCAGQv////8PgyADQv////8PgyIDQrHz3fEJfnwgAyAFfiIDQiCIfCIEQiCIfCAEQiCGIANC/////w+DhCIEQgGGfCIDQiWIIAOFQvnz3fGZ8pmrFn4iBUIgiCAFhTcDCCAAIANCA4ggBIUiA0IjiCADhUKlvuP00YyH2Z9/fiIDQhyIIAOFNwMADwsCQCABRQ0AIAAgAigCBCACKAIAc60gA3wiBEIhiEEALQCAjAFBEHQgAUEIdHIiCSABQQF2QYCMAWotAABBGHRyIgogAUH/iwFqLQAAIgFyIguthSAEhULP1tO+0ser2UJ+IgRCHYggBIVC+fPd8Zn2masWfiIEQiCIIASFNwMAIAAgAigCDCACKAIIc60gA30iA0IhiCABQRh0IAtBgP4DcUEIdHIgCUEIdkGA/gNxIApBGHZyckENd62FIAOFQs/W077Sx6vZQn4iA0IdiCADhUL5893xmfaZqxZ+IgNCIIggA4U3AwgPCyAAIAIpA1AgAikDWIUgA4UiBEIhiCAEhULP1tO+0ser2UJ+IgRCHYggBIVC+fPd8Zn2masWfiIEQiCIIASFNwMIIAAgAikDQCACKQNIhSADhSIDQiGIIAOFQs/W077Sx6vZQn4iA0IdiCADhUL5893xmfaZqxZ+IgNCIIggA4U3AwALwwoBCn4gAa0iBEKHla+vmLbem55/fiEFAkACQCABQSFPDQBCACEGDAELQgAhBwJAIAFBwQBJDQBCACEHAkAgAUHhAEkNACACQfgAaikDACADfSABQciLAWopAwAiCIUiB0L/////D4MiCSACKQNwIAN8IAFBwIsBaikDACIKhSILQiCIIgx+Ig1CIIggB0IgiCIHIAx+fCANQv////8PgyAHIAtC/////w+DIgt+fCAJIAt+IgdCIIh8IglCIIh8QQApA7iMASILQQApA7CMASIMfIUgCUIghiAHQv////8Pg4SFIQcgAkHoAGopAwAgA30gC4UiCUL/////D4MiCyACKQNgIAN8IAyFIgxCIIgiDX4iBkL/////D4MgCUIgiCIJIAxC/////w+DIgx+fCALIAx+IgtCIIh8IgxCIIYgC0L/////D4OEIAZCIIggCSANfnwgDEIgiHyFIAV8IAggCnyFIQULIAJB2ABqKQMAIAN9IAFB2IsBaikDACIIhSIJQv////8PgyIKIAIpA1AgA3wgAUHQiwFqKQMAIguFIgxCIIgiDX4iBkL/////D4MgCUIgiCIJIAxC/////w+DIgx+fCAKIAx+IgpCIIh8IgxCIIYgCkL/////D4OEIAZCIIggCSANfnwgDEIgiHyFIAd8QQApA6iMASIJQQApA6CMASIKfIUhByACQcgAaikDACADfSAJhSIJQv////8PgyIMIAIpA0AgA3wgCoUiCkIgiCINfiIGQv////8PgyAJQiCIIgkgCkL/////D4MiCn58IAwgCn4iCkIgiHwiDEIghiAKQv////8Pg4QgBkIgiCAJIA1+fCAMQiCIfIUgBXwgCCALfIUhBQsgAkE4aikDACADfSABQeiLAWopAwAiCIUiCUL/////D4MiCiACKQMwIAN8IAFB4IsBaikDACILhSIMQiCIIg1+IgZC/////w+DIAlCIIgiCSAMQv////8PgyIMfnwgCiAMfiIKQiCIfCIMQiCGIApC/////w+DhCAGQiCIIAkgDX58IAxCIIh8hSAHfEEAKQOYjAEiB0EAKQOQjAEiCXyFIQYgAkEoaikDACADfSAHhSIHQv////8PgyIKIAIpAyAgA3wgCYUiCUIgiCIMfiINQv////8PgyAHQiCIIgcgCUL/////D4MiCX58IAogCX4iCUIgiHwiCkIghiAJQv////8Pg4QgDUIgiCAHIAx+fCAKQiCIfIUgBXwgCCALfIUhBQsgACACQRhqKQMAIAN9IAFB+IsBaikDACIHhSIIQv////8PgyIJIAIpAxAgA3wgAUHwiwFqKQMAIgqFIgtCIIgiDH4iDUL/////D4MgCEIgiCIIIAtC/////w+DIgt+fCAJIAt+IglCIIh8IgtCIIYgCUL/////D4OEIA1CIIggCCAMfnwgC0IgiHyFIAZ8QQApA4iMASIIQQApA4CMASIJfIUiCyACQQhqKQMAIAN9IAiFIghC/////w+DIgwgAikDACADfCAJhSIJQiCIIg1+IgZC/////w+DIAhCIIgiCCAJQv////8PgyIJfnwgDCAJfiIJQiCIfCIMQiCGIAlC/////w+DhCAGQiCIIAggDX58IAxCIIh8hSAFfCAHIAp8hSIFfCIHQiWIIAeFQvnz3fGZ8pmrFn4iB0IgiCAHhTcDACAAQgAgBUKHla+vmLbem55/fiAEIAN9Qs/W077Sx6vZQn58IAtC49zKlfzO8vWFf358IgNCJYggA4VC+fPd8ZnymasWfiIDQiCIIAOFfTcDCAuhDwMBfxR+An9BACEEIAJB+ABqKQMAIAN9QQApA/iMASIFhSIGQv////8PgyIHIAIpA3AgA3xBACkD8IwBIgiFIglCIIgiCn4iC0L/////D4MgBkIgiCIGIAlC/////w+DIgl+fCAHIAl+IgdCIIh8IglCIIYgB0L/////D4OEIAtCIIggBiAKfnwgCUIgiHyFIAJB2ABqKQMAIAN9QQApA9iMASIHhSIGQv////8PgyIJIAIpA1AgA3xBACkD0IwBIgqFIgtCIIgiDH4iDUL/////D4MgBkIgiCIGIAtC/////w+DIgt+fCAJIAt+IglCIIh8IgtCIIYgCUL/////D4OEIA1CIIggBiAMfnwgC0IgiHyFIAJBOGopAwAgA31BACkDuIwBIgmFIgZC/////w+DIgsgAikDMCADfEEAKQOwjAEiDIUiDUIgiCIOfiIPQv////8PgyAGQiCIIgYgDUL/////D4MiDX58IAsgDX4iC0IgiHwiDUIghiALQv////8Pg4QgD0IgiCAGIA5+fCANQiCIfIUgAkEYaikDACADfUEAKQOYjAEiC4UiBkL/////D4MiDSACKQMQIAN8QQApA5CMASIOhSIPQiCIIhB+IhFC/////w+DIAZCIIgiBiAPQv////8PgyIPfnwgDSAPfiINQiCIfCIPQiCGIA1C/////w+DhCARQiCIIAYgEH58IA9CIIh8hUEAKQOIjAEiDUEAKQOAjAEiD3yFfEEAKQOojAEiEEEAKQOgjAEiEXyFfEEAKQPIjAEiEkEAKQPAjAEiE3yFfEEAKQPojAEiFEEAKQPgjAEiFXyFIgZCJYggBoVC+fPd8ZnymasWfiIGQiCIIAaFIQYgAkHoAGopAwAgA30gFIUiFEL/////D4MiFiACKQNgIAN8IBWFIhVCIIgiF34iGEL/////D4MgFEIgiCIUIBVC/////w+DIhV+fCAWIBV+IhVCIIh8IhZCIIYgFUL/////D4OEIBhCIIggFCAXfnwgFkIgiHyFIAJByABqKQMAIAN9IBKFIhJC/////w+DIhQgAikDQCADfCAThSITQiCIIhV+IhZC/////w+DIBJCIIgiEiATQv////8PgyITfnwgFCATfiITQiCIfCIUQiCGIBNC/////w+DhCAWQiCIIBIgFX58IBRCIIh8hSACQShqKQMAIAN9IBCFIhBC/////w+DIhIgAikDICADfCARhSIRQiCIIhN+IhRC/////w+DIBBCIIgiECARQv////8PgyIRfnwgEiARfiIRQiCIfCISQiCGIBFC/////w+DhCAUQiCIIBAgE358IBJCIIh8hSACQQhqKQMAIAN9IA2FIg1C/////w+DIhAgAikDACADfCAPhSIPQiCIIhF+IhJC/////w+DIA1CIIgiDSAPQv////8PgyIPfnwgECAPfiIPQiCIfCIQQiCGIA9C/////w+DhCASQiCIIA0gEX58IBBCIIh8hSABrSIPQoeVr6+Ytt6bnn9+fCALIA58hXwgCSAMfIV8IAcgCnyFfCAFIAh8hSIFQiWIIAWFQvnz3fGZ8pmrFn4iBUIgiCAFhSEFAkAgAUGgAUgNACABQQV2QXxqIRkDQCACIARqIhpBG2opAwAgA30gBEGYjQFqKQMAIgeFIghC/////w+DIgkgGkETaikDACADfCAEQZCNAWopAwAiCoUiC0IgiCIMfiINQv////8PgyAIQiCIIgggC0L/////D4MiC358IAkgC34iCUIgiHwiC0IghiAJQv////8Pg4QgDUIgiCAIIAx+fCALQiCIfIUgBnwgBEGIjQFqKQMAIgggBEGAjQFqKQMAIgl8hSEGIBpBC2opAwAgA30gCIUiCEL/////D4MiCyAaQQNqKQMAIAN8IAmFIglCIIgiDH4iDUL/////D4MgCEIgiCIIIAlC/////w+DIgl+fCALIAl+IglCIIh8IgtCIIYgCUL/////D4OEIA1CIIggCCAMfnwgC0IgiHyFIAV8IAcgCnyFIQUgBEEgaiEEIBlBf2oiGQ0ACwsgACACQf8AaikDACADfCABQeiLAWopAwAiB4UiCEL/////D4MiCSACKQN3IAN9IAFB4IsBaikDACIKhSILQiCIIgx+Ig1C/////w+DIAhCIIgiCCALQv////8PgyILfnwgCSALfiIJQiCIfCILQiCGIAlC/////w+DhCANQiCIIAggDH58IAtCIIh8hSAGfCABQfiLAWopAwAiBiABQfCLAWopAwAiCHyFIgkgAkHvAGopAwAgA3wgBoUiBkL/////D4MiCyACKQNnIAN9IAiFIghCIIgiDH4iDUL/////D4MgBkIgiCIGIAhC/////w+DIgh+fCALIAh+IghCIIh8IgtCIIYgCEL/////D4OEIA1CIIggBiAMfnwgC0IgiHyFIAV8IAcgCnyFIgZ8IgVCJYggBYVC+fPd8ZnymasWfiIFQiCIIAWFNwMAIABCACAGQoeVr6+Ytt6bnn9+IA8gA31Cz9bTvtLHq9lCfnwgCULj3MqV/M7y9YV/fnwiA0IliCADhUL5893xmfKZqxZ+IgNCIIggA4V9NwMIC98FAgF+AX8CQAJAQQApA4AKIgBQRQ0AQYAIIQFCACEADAELAkBBACkDoI4BIABSDQBBACEBDAELQQAhAUEAQq+v79e895Kg/gAgAH03A/iLAUEAIABCxZbr+djShYIofDcD8IsBQQBCj/Hjja2P9JhOIAB9NwPoiwFBACAAQqus+MXV79HQfHw3A+CLAUEAQtOt1LKShbW0nn8gAH03A9iLAUEAIABCl5r0jvWWvO3JAHw3A9CLAUEAQsWDgv2v/8SxayAAfTcDyIsBQQAgAELqi7OdyOb09UN8NwPAiwFBAELIv/rLnJveueQAIAB9NwO4iwFBACAAQoqjgd/Ume2sMXw3A7CLAUEAQvm57738+MKnHSAAfTcDqIsBQQAgAEKo9dv7s5ynmj98NwOgiwFBAEK4sry3lNW31lggAH03A5iLAUEAIABC8cihuqm0w/zOAHw3A5CLAUEAQoihl9u445SXo38gAH03A4iL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AkHAAGogDGohC0GAjAEhAAJAAkACQCAHQQhJDQACQCAHQThqQQN2QQFqQQdxIg0NAAwCCyANQQN0IQ5BgIwBIQADQCALIAApAwA3AwAgC0EIaiELIABBCGohACANQX9qIg0NAAsgByAOayEHCyAHRQ0BAkACQCAHQQdxIg4NACAHIQ0MAQsgB0F4cSENA0AgCyAALQAAOgAAIAtBAWohCyAAQQFqIQAgDkF/aiIODQALCyAHQQhJDQELA0AgCyAAKQAANwAAIAtBCGohCyAAQQhqIQAgDUF4aiINDQALCyACIAIpAwggAikDQCIIfCADQQAoApyOAWoiACkDASACKQNIIgmFIgpCIIggCkL/////D4N+fDcDCCACIAIpAxggAikDUCIKfCAAKQMRIAIpA1giEIUiEUIgiCARQv////8Pg358NwMYIAIgECAKIAApAwmFIgpCIIggCkL/////D4N+IAIpAxB8fDcDECACIAkgCCAAQXlqKQMAhSIIQiCIIAhC/////w+DfiACKQMAfHw3AwAgACkDGSEIIAIpAyAhCSACIAIpAyggAikDYCIKfCAAKQMhIAIpA2giEIUiEUIgiCARQv////8Pg358NwMoIAIgECAJIAggCoUiCEIgiCAIQv////8Pg358fDcDICACIAYgAikDcCIIfCAAKQMxIAIpA3giBoUiCUIgiCAJQv////8Pg358NwM4IAIgBiAIIAApAymFIghCIIggCEL/////D4N+IAV8fDcDMAsgAiACIANBC2ogBEKHla+vmLbem55/fhADNwNAIAIgAiADQQAoApyOAWpBdWogBELP1tO+0ser2UJ+Qn+FEAM3A0gMAQsgBKchAAJAQQApA6COASIEUA0AAkAgAEEQSw0AIAJBwABqIABBgAggBBAEDAILAkAgAEGAAUsNACACQcAAaiAAQYAIIAQQBQwCCyACQcAAaiAAQYAIIAQQBgwBCwJAIABBEEsNACACQcAAaiAAIANCABAEDAELAkAgAEGAAUsNACACQcAAaiAAIANCABAFDAELIAJBwABqIAAgA0IAEAYLQQAgAikDcDcDuApBACACKQNgNwOoCkEAIAIpA1A3A5gKQQAgAkH4AGopAwA3A8AKQQAgAkHoAGopAwA3A7AKQQAgAkHYAGopAwA3A6AKQQAgAikDSCIEQjiGIARCgP4Dg0IohoQgBEKAgPwHg0IYhiAEQoCAgPgPg0IIhoSEIARCCIhCgICA+A+DIARCGIhCgID8B4OEIARCKIhCgP4DgyAEQjiIhISEIgQ3A4AKQQAgBDcDkApBACACKQNAIgRCOIYgBEKA/gODQiiGhCAEQoCA/AeDQhiGIARCgICA+A+DQgiGhIQgBEIIiEKAgID4D4MgBEIYiEKAgPwHg4QgBEIoiEKA/gODIARCOIiEhIQ3A4gKIAEkAAsGAEGAigELAgALC8wBAQBBgAgLxAG4/mw5I6RLvnwBgSz3Ia0c3tRt6YOQl9tyQKSkt7NnH8t55k7MwOV4glrQfcz/ciG4CEZ090MkjuA1kOaBOiZMPChSu5HDAMuI0GWLG1Muo3FkSJeiDflOOBnvRqnerNio+nY/45w0P/ncu8fHC08dilHgS820WTHIn37J2XhzZOrFrIM00+vDxYGg//oTY+sXDd1Rt/DaSdMWVSYp1GieKxa+WH1HofyP+LjRetAxzkXLOo+VFgQor9f7yrtLQH5AAgAA",hash:"b9ab74e2"};const PA=new Q;let bA=null;const vA=new Uint8Array(8);function jA(A){return!Number.isInteger(A)||A<0||A>4294967295?new Error("Seed must be given as two valid 32-bit long unsigned integers (lo + high)."):null}function TA(A,I,B){const g=new DataView(A);g.setUint32(0,I,!0),g.setUint32(4,B,!0)}var $A={name:"ripemd160",data:"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",hash:"6abbce74"};const _A=new Q;let AI=null;function II(A,I){A.init();const{blockSize:B}=A,g=function(A,I){const{blockSize:B}=A,g=a(I);if(g.length>B){A.update(g);const I=A.digest("binary");return A.init(),I}return new Uint8Array(g.buffer,g.byteOffset,g.length)}(A,I),Q=new Uint8Array(B);Q.set(g);const C=new Uint8Array(B);for(let A=0;A(A.init(),A.update(Q),i),update:I=>(A.update(I),i),digest:I=>{const B=A.digest("binary");return A.init(),A.update(C),A.update(B),A.digest(I)},save:()=>{throw new Error("save() not supported")},load:()=>{throw new Error("load() not supported")},blockSize:A.blockSize,digestSize:A.digestSize};return i}function BI(A,I){if(!A||!A.then)throw new Error('Invalid hash function is provided! Usage: createHMAC(createMD5(), "key").');return A.then((A=>II(A,I)))}function gI(A){return g(this,void 0,void 0,(function*(){(A=>{if(!A||"object"!=typeof A)throw new Error("Invalid options parameter. It requires an object.");if(!A.hashFunction||!A.hashFunction.then)throw new Error('Invalid hash function is provided! Usage: pbkdf2("password", "salt", 1000, 32, createSHA1()).');if(!Number.isInteger(A.iterations)||A.iterations<1)throw new Error("Iterations should be a positive number");if(!Number.isInteger(A.hashLength)||A.hashLength<1)throw new Error("Hash length should be a positive number");if(void 0===A.outputType&&(A.outputType="hex"),!["hex","binary"].includes(A.outputType))throw new Error(`Insupported output type ${A.outputType}. Valid values: ['hex', 'binary']`)})(A);return function(A,I,B,Q,C){return g(this,void 0,void 0,(function*(){const g=new Uint8Array(Q),i=new Uint8Array(I.length+4),E=new DataView(i.buffer),o=a(I),F=new Uint8Array(o.buffer,o.byteOffset,o.length);i.set(F);let D=0;const c=A.digestSize,w=Math.ceil(Q/c);let k=null,G=null;for(let C=1;C<=w;C++){E.setUint32(I.length,C),A.init(),A.update(i),k=A.digest("binary"),G=k.slice();for(let I=1;I{if(!A||"object"!=typeof A)throw new Error("Invalid options parameter. It requires an object.");if(void 0===A.hash||"string"!=typeof A.hash)throw new Error("Hash should be specified");if(60!==A.hash.length)throw new Error("Hash should be 60 bytes long");if(!(A=>!(!/^\$2[axyb]\$[0-3][0-9]\$[./A-Za-z0-9]{53}$/.test(A)||"0"===A[4]&&Number(A[5])<4||"3"===A[4]&&Number(A[5])>1))(A.hash))throw new Error("Invalid hash");if(A.password=a(A.password),A.password.length<1)throw new Error("Password should be at least 1 byte long");if(A.password.length>72)throw new Error("Password should be at most 72 bytes long")};var oI={name:"whirlpool",data:"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",hash:"8d8f6035"};const FI=new Q;let DI=null;var cI={name:"sm3",data:"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",hash:"b6fb4b8e"};const hI=new Q;let aI=null;A.adler32=function(A){if(null===t)return S(N,B,4).then((I=>(t=I,t.calculate(A))));try{const I=t.calculate(A);return Promise.resolve(I)}catch(A){return Promise.reject(A)}},A.argon2Verify=function(A){return g(this,void 0,void 0,(function*(){(A=>{if(!A||"object"!=typeof A)throw new Error("Invalid options parameter. It requires an object.");if(void 0===A.hash||"string"!=typeof A.hash)throw new Error("Hash should be specified")})(A);const I=((A,I,B)=>{const g=I.match(/^\$argon2(id|i|d)\$v=([0-9]+)\$((?:[mtp]=[0-9]+,){2}[mtp]=[0-9]+)\$([A-Za-z0-9+/]+)\$([A-Za-z0-9+/]+)$/);if(!g)throw new Error("Invalid hash");const[,Q,C,i,E,o]=g;if("19"!==C)throw new Error(`Unsupported version: ${C}`);const F={},D={m:"memorySize",p:"parallelism",t:"iterations"};for(const A of i.split(",")){const[I,B]=A.split("=");F[D[I]]=Number(B)}return Object.assign(Object.assign({},F),{password:A,secret:B,hashType:Q,salt:d(E),hashLength:n(o),outputType:"encoded"})})(A.password,A.hash,A.secret);X(I);const B=A.hash.lastIndexOf("$")+1;return(yield l(I)).substring(B)===A.hash.substring(B)}))},A.argon2d=function(A){return g(this,void 0,void 0,(function*(){return X(A),l(Object.assign(Object.assign({},A),{hashType:"d"}))}))},A.argon2i=function(A){return g(this,void 0,void 0,(function*(){return X(A),l(Object.assign(Object.assign({},A),{hashType:"i"}))}))},A.argon2id=function(A){return g(this,void 0,void 0,(function*(){return X(A),l(Object.assign(Object.assign({},A),{hashType:"id"}))}))},A.bcrypt=function(A){return g(this,void 0,void 0,(function*(){return(A=>{if(!A||"object"!=typeof A)throw new Error("Invalid options parameter. It requires an object.");if(!Number.isInteger(A.costFactor)||A.costFactor<4||A.costFactor>31)throw new Error("Cost factor should be a number between 4 and 31");if(A.password=a(A.password),A.password.length<1)throw new Error("Password should be at least 1 byte long");if(A.password.length>72)throw new Error("Password should be at most 72 bytes long");if(A.salt=a(A.salt),16!==A.salt.length)throw new Error("Salt should be 16 bytes long");if(void 0===A.outputType&&(A.outputType="encoded"),!["hex","binary","encoded"].includes(A.outputType))throw new Error(`Insupported output type ${A.outputType}. Valid values: ['hex', 'binary', 'encoded']`)})(A),iI(A)}))},A.bcryptVerify=function(A){return g(this,void 0,void 0,(function*(){EI(A);const{hash:I,password:B}=A,g=yield e(CI,0);g.writeMemory(a(I),0);const Q=a(B);return g.writeMemory(Q,60),!!g.getExports().bcrypt_verify(Q.length)}))},A.blake2b=function(A,I=512,B=null){if(K(I))return Promise.reject(K(I));let g=null,Q=I;if(null!==B){if(g=a(B),g.length>64)return Promise.reject(new Error("Max key length is 64 bytes"));Q=p(I,g.length)}const C=I/8;if(null===M||M.hashLength!==C)return S(q,f,C).then((I=>(M=I,Q>512&&M.writeMemory(g),M.calculate(A,Q))));try{Q>512&&M.writeMemory(g);const I=M.calculate(A,Q);return Promise.resolve(I)}catch(A){return Promise.reject(A)}},A.blake2s=function(A,I=256,B=null){if(m(I))return Promise.reject(m(I));let g=null,Q=I;if(null!==B){if(g=a(B),g.length>32)return Promise.reject(new Error("Max key length is 32 bytes"));Q=L(I,g.length)}const C=I/8;if(null===Z||Z.hashLength!==C)return S(V,z,C).then((I=>(Z=I,Q>512&&Z.writeMemory(g),Z.calculate(A,Q))));try{Q>512&&Z.writeMemory(g);const I=Z.calculate(A,Q);return Promise.resolve(I)}catch(A){return Promise.reject(A)}},A.blake3=function(A,I=256,B=null){if(O(I))return Promise.reject(O(I));let g=null,Q=0;if(null!==B){if(g=a(B),32!==g.length)return Promise.reject(new Error("Key length must be exactly 32 bytes"));Q=32}const C=I/8,i=C;if(null===W||W.hashLength!==C)return S(u,x,C).then((I=>(W=I,32===Q&&W.writeMemory(g),W.calculate(A,Q,i))));try{32===Q&&W.writeMemory(g);const I=W.calculate(A,Q,i);return Promise.resolve(I)}catch(A){return Promise.reject(A)}},A.crc32=function(A,I=3988292384){if(j(I))return Promise.reject(j(I));if(null===v)return S(b,P,4).then((B=>(v=B,v.calculate(A,I))));try{const B=v.calculate(A,I);return Promise.resolve(B)}catch(A){return Promise.reject(A)}},A.crc64=function(A,I="c96c5795d7870f42"){const{hi:B,lo:g,err:Q}=IA(I);if(null!==Q)return Promise.reject(Q);if(null===_)return S($,T,8).then((I=>(_=I,BA(AA.buffer,g,B),_.writeMemory(AA),_.calculate(A))));try{BA(AA.buffer,g,B),_.writeMemory(AA);const I=_.calculate(A);return Promise.resolve(I)}catch(Q){return Promise.reject(Q)}},A.createAdler32=function(){return e(B,4).then((A=>{A.init();const I={init:()=>(A.init(),I),update:B=>(A.update(B),I),digest:I=>A.digest(I),save:()=>A.save(),load:B=>(A.load(B),I),blockSize:4,digestSize:4};return I}))},A.createBLAKE2b=s,A.createBLAKE2s=function(A=256,I=null){if(m(A))return Promise.reject(m(A));let B=null,g=A;if(null!==I){if(B=a(I),B.length>32)return Promise.reject(new Error("Max key length is 32 bytes"));g=L(A,B.length)}const Q=A/8;return e(z,Q).then((A=>{g>512&&A.writeMemory(B),A.init(g);const I={init:g>512?()=>(A.writeMemory(B),A.init(g),I):()=>(A.init(g),I),update:B=>(A.update(B),I),digest:I=>A.digest(I),save:()=>A.save(),load:B=>(A.load(B),I),blockSize:64,digestSize:Q};return I}))},A.createBLAKE3=function(A=256,I=null){if(O(A))return Promise.reject(O(A));let B=null,g=0;if(null!==I){if(B=a(I),32!==B.length)return Promise.reject(new Error("Key length must be exactly 32 bytes"));g=32}const Q=A/8,C=Q;return e(x,Q).then((A=>{32===g&&A.writeMemory(B),A.init(g);const I={init:32===g?()=>(A.writeMemory(B),A.init(g),I):()=>(A.init(g),I),update:B=>(A.update(B),I),digest:I=>A.digest(I,C),save:()=>A.save(),load:B=>(A.load(B),I),blockSize:64,digestSize:Q};return I}))},A.createCRC32=function(A=3988292384){return j(A)?Promise.reject(j(A)):e(P,4).then((I=>{I.init(A);const B={init:()=>(I.init(A),B),update:A=>(I.update(A),B),digest:A=>I.digest(A),save:()=>I.save(),load:A=>(I.load(A),B),blockSize:4,digestSize:4};return B}))},A.createCRC64=function(A="c96c5795d7870f42"){const{hi:I,lo:B,err:g}=IA(A);return null!==g?Promise.reject(g):e(T,8).then((A=>{const g=new Uint8Array(8);BA(g.buffer,B,I),A.writeMemory(g),A.init();const Q={init:()=>(A.writeMemory(g),A.init(),Q),update:I=>(A.update(I),Q),digest:I=>A.digest(I),save:()=>A.save(),load:I=>(A.load(I),Q),blockSize:8,digestSize:8};return Q}))},A.createHMAC=BI,A.createKeccak=function(A=512){if(dA(A))return Promise.reject(dA(A));const I=A/8;return e(hA,I).then((B=>{B.init(A);const g={init:()=>(B.init(A),g),update:A=>(B.update(A),g),digest:A=>B.digest(A,1),save:()=>B.save(),load:A=>(B.load(A),g),blockSize:200-2*I,digestSize:I};return g}))},A.createMD4=function(){return e(gA,16).then((A=>{A.init();const I={init:()=>(A.init(),I),update:B=>(A.update(B),I),digest:I=>A.digest(I),save:()=>A.save(),load:B=>(A.load(B),I),blockSize:64,digestSize:16};return I}))},A.createMD5=function(){return e(iA,16).then((A=>{A.init();const I={init:()=>(A.init(),I),update:B=>(A.update(B),I),digest:I=>A.digest(I),save:()=>A.save(),load:B=>(A.load(B),I),blockSize:64,digestSize:16};return I}))},A.createRIPEMD160=function(){return e($A,20).then((A=>{A.init();const I={init:()=>(A.init(),I),update:B=>(A.update(B),I),digest:I=>A.digest(I),save:()=>A.save(),load:B=>(A.load(B),I),blockSize:64,digestSize:20};return I}))},A.createSHA1=function(){return e(FA,20).then((A=>{A.init();const I={init:()=>(A.init(),I),update:B=>(A.update(B),I),digest:I=>A.digest(I),save:()=>A.save(),load:B=>(A.load(B),I),blockSize:64,digestSize:20};return I}))},A.createSHA224=function(){return e(yA,28).then((A=>{A.init(224);const I={init:()=>(A.init(224),I),update:B=>(A.update(B),I),digest:I=>A.digest(I),save:()=>A.save(),load:B=>(A.load(B),I),blockSize:64,digestSize:28};return I}))},A.createSHA256=NA,A.createSHA3=function(A=512){if(kA(A))return Promise.reject(kA(A));const I=A/8;return e(hA,I).then((B=>{B.init(A);const g={init:()=>(B.init(A),g),update:A=>(B.update(A),g),digest:A=>B.digest(A,6),save:()=>B.save(),load:A=>(B.load(A),g),blockSize:200-2*I,digestSize:I};return g}))},A.createSHA384=function(){return e(tA,48).then((A=>{A.init(384);const I={init:()=>(A.init(384),I),update:B=>(A.update(B),I),digest:I=>A.digest(I),save:()=>A.save(),load:B=>(A.load(B),I),blockSize:128,digestSize:48};return I}))},A.createSHA512=function(){return e(tA,64).then((A=>{A.init(512);const I={init:()=>(A.init(512),I),update:B=>(A.update(B),I),digest:I=>A.digest(I),save:()=>A.save(),load:B=>(A.load(B),I),blockSize:128,digestSize:64};return I}))},A.createSM3=function(){return e(cI,32).then((A=>{A.init();const I={init:()=>(A.init(),I),update:B=>(A.update(B),I),digest:I=>A.digest(I),save:()=>A.save(),load:B=>(A.load(B),I),blockSize:64,digestSize:32};return I}))},A.createWhirlpool=function(){return e(oI,64).then((A=>{A.init();const I={init:()=>(A.init(),I),update:B=>(A.update(B),I),digest:I=>A.digest(I),save:()=>A.save(),load:B=>(A.load(B),I),blockSize:64,digestSize:64};return I}))},A.createXXHash128=function(A=0,I=0){return jA(A)?Promise.reject(jA(A)):jA(I)?Promise.reject(jA(I)):e(OA,16).then((B=>{const g=new Uint8Array(8);TA(g.buffer,A,I),B.writeMemory(g),B.init();const Q={init:()=>(B.writeMemory(g),B.init(),Q),update:A=>(B.update(A),Q),digest:A=>B.digest(A),save:()=>B.save(),load:A=>(B.load(A),Q),blockSize:512,digestSize:16};return Q}))},A.createXXHash3=function(A=0,I=0){return uA(A)?Promise.reject(uA(A)):uA(I)?Promise.reject(uA(I)):e(ZA,8).then((B=>{const g=new Uint8Array(8);WA(g.buffer,A,I),B.writeMemory(g),B.init();const Q={init:()=>(B.writeMemory(g),B.init(),Q),update:A=>(B.update(A),Q),digest:A=>B.digest(A),save:()=>B.save(),load:A=>(B.load(A),Q),blockSize:512,digestSize:8};return Q}))},A.createXXHash32=function(A=0){return rA(A)?Promise.reject(rA(A)):e(KA,4).then((I=>{I.init(A);const B={init:()=>(I.init(A),B),update:A=>(I.update(A),B),digest:A=>I.digest(A),save:()=>I.save(),load:A=>(I.load(A),B),blockSize:16,digestSize:4};return B}))},A.createXXHash64=function(A=0,I=0){return zA(A)?Promise.reject(zA(A)):zA(I)?Promise.reject(zA(I)):e(YA,8).then((B=>{const g=new Uint8Array(8);VA(g.buffer,A,I),B.writeMemory(g),B.init();const Q={init:()=>(B.writeMemory(g),B.init(),Q),update:A=>(B.update(A),Q),digest:A=>B.digest(A),save:()=>B.save(),load:A=>(B.load(A),Q),blockSize:32,digestSize:8};return Q}))},A.keccak=function(A,I=512){if(dA(I))return Promise.reject(dA(I));const B=I/8;if(null===nA||nA.hashLength!==B)return S(GA,hA,B).then((B=>(nA=B,nA.calculate(A,I,1))));try{const B=nA.calculate(A,I,1);return Promise.resolve(B)}catch(A){return Promise.reject(A)}},A.md4=function(A){if(null===CA)return S(QA,gA,16).then((I=>(CA=I,CA.calculate(A))));try{const I=CA.calculate(A);return Promise.resolve(I)}catch(A){return Promise.reject(A)}},A.md5=function(A){if(null===oA)return S(EA,iA,16).then((I=>(oA=I,oA.calculate(A))));try{const I=oA.calculate(A);return Promise.resolve(I)}catch(A){return Promise.reject(A)}},A.pbkdf2=gI,A.ripemd160=function(A){if(null===AI)return S(_A,$A,20).then((I=>(AI=I,AI.calculate(A))));try{const I=AI.calculate(A);return Promise.resolve(I)}catch(A){return Promise.reject(A)}},A.scrypt=function(A){return g(this,void 0,void 0,(function*(){return(A=>{if(!A||"object"!=typeof A)throw new Error("Invalid options parameter. It requires an object.");if(!Number.isInteger(A.blockSize)||A.blockSize<1)throw new Error("Block size should be a positive number");if(!Number.isInteger(A.costFactor)||A.costFactor<2||!(I=A.costFactor)||I&I-1)throw new Error("Cost factor should be a power of 2, greater than 1");var I;if(!Number.isInteger(A.parallelism)||A.parallelism<1)throw new Error("Parallelism should be a positive number");if(!Number.isInteger(A.hashLength)||A.hashLength<1)throw new Error("Hash length should be a positive number.");if(void 0===A.outputType&&(A.outputType="hex"),!["hex","binary"].includes(A.outputType))throw new Error(`Insupported output type ${A.outputType}. Valid values: ['hex', 'binary']`)})(A),function(A){return g(this,void 0,void 0,(function*(){const{costFactor:I,blockSize:B,parallelism:g,hashLength:Q}=A,C=NA(),i=yield gI({password:A.password,salt:A.salt,iterations:1,hashLength:128*B*g,hashFunction:C,outputType:"binary"}),E=yield e(QI,0),o=128*B*I,F=256*B;E.setMemorySize(i.length+o+F),E.writeMemory(i,0),E.getExports().scrypt(B,I,g);const D=E.getMemory().subarray(0,128*B*g),c=yield gI({password:A.password,salt:D,iterations:1,hashLength:Q,hashFunction:C,outputType:"binary"});return"hex"===A.outputType?h(new Uint8Array(2*Q),c,Q):c}))}(A)}))},A.sha1=function(A){if(null===cA)return S(DA,FA,20).then((I=>(cA=I,cA.calculate(A))));try{const I=cA.calculate(A);return Promise.resolve(I)}catch(A){return Promise.reject(A)}},A.sha224=function(A){if(null===UA)return S(HA,yA,28).then((I=>(UA=I,UA.calculate(A,224))));try{const I=UA.calculate(A,224);return Promise.resolve(I)}catch(A){return Promise.reject(A)}},A.sha256=function(A){if(null===SA)return S(eA,yA,32).then((I=>(SA=I,SA.calculate(A,256))));try{const I=SA.calculate(A,256);return Promise.resolve(I)}catch(A){return Promise.reject(A)}},A.sha3=function(A,I=512){if(kA(I))return Promise.reject(kA(I));const B=I/8;if(null===wA||wA.hashLength!==B)return S(aA,hA,B).then((B=>(wA=B,wA.calculate(A,I,6))));try{const B=wA.calculate(A,I,6);return Promise.resolve(B)}catch(A){return Promise.reject(A)}},A.sha384=function(A){if(null===fA)return S(JA,tA,48).then((I=>(fA=I,fA.calculate(A,384))));try{const I=fA.calculate(A,384);return Promise.resolve(I)}catch(A){return Promise.reject(A)}},A.sha512=function(A){if(null===MA)return S(qA,tA,64).then((I=>(MA=I,MA.calculate(A,512))));try{const I=MA.calculate(A,512);return Promise.resolve(I)}catch(A){return Promise.reject(A)}},A.sm3=function(A){if(null===aI)return S(hI,cI,32).then((I=>(aI=I,aI.calculate(A))));try{const I=aI.calculate(A);return Promise.resolve(I)}catch(A){return Promise.reject(A)}},A.whirlpool=function(A){if(null===DI)return S(FI,oI,64).then((I=>(DI=I,DI.calculate(A))));try{const I=DI.calculate(A);return Promise.resolve(I)}catch(A){return Promise.reject(A)}},A.xxhash128=function(A,I=0,B=0){if(jA(I))return Promise.reject(jA(I));if(jA(B))return Promise.reject(jA(B));if(null===bA)return S(PA,OA,16).then((g=>(bA=g,TA(vA.buffer,I,B),bA.writeMemory(vA),bA.calculate(A))));try{TA(vA.buffer,I,B),bA.writeMemory(vA);const g=bA.calculate(A);return Promise.resolve(g)}catch(A){return Promise.reject(A)}},A.xxhash3=function(A,I=0,B=0){if(uA(I))return Promise.reject(uA(I));if(uA(B))return Promise.reject(uA(B));if(null===LA)return S(mA,ZA,8).then((g=>(LA=g,WA(xA.buffer,I,B),LA.writeMemory(xA),LA.calculate(A))));try{WA(xA.buffer,I,B),LA.writeMemory(xA);const g=LA.calculate(A);return Promise.resolve(g)}catch(A){return Promise.reject(A)}},A.xxhash32=function(A,I=0){if(rA(I))return Promise.reject(rA(I));if(null===sA)return S(pA,KA,4).then((B=>(sA=B,sA.calculate(A,I))));try{const B=sA.calculate(A,I);return Promise.resolve(B)}catch(A){return Promise.reject(A)}},A.xxhash64=function(A,I=0,B=0){if(zA(I))return Promise.reject(zA(I));if(zA(B))return Promise.reject(zA(B));if(null===lA)return S(RA,YA,8).then((g=>(lA=g,VA(XA.buffer,I,B),lA.writeMemory(XA),lA.calculate(A))));try{VA(XA.buffer,I,B),lA.writeMemory(XA);const g=lA.calculate(A);return Promise.resolve(g)}catch(A){return Promise.reject(A)}}})); diff --git a/frontend/node_modules/hash-wasm/dist/keccak.umd.min.js b/frontend/node_modules/hash-wasm/dist/keccak.umd.min.js new file mode 100644 index 0000000..8f0196c --- /dev/null +++ b/frontend/node_modules/hash-wasm/dist/keccak.umd.min.js @@ -0,0 +1,7 @@ +/*! + * hash-wasm (https://www.npmjs.com/package/hash-wasm) + * (c) Dani Biro + * @license MIT + */ + +!function(A,Q){"object"==typeof exports&&"undefined"!=typeof module?Q(exports):"function"==typeof define&&define.amd?define(["exports"],Q):Q((A="undefined"!=typeof globalThis?globalThis:A||self).hashwasm=A.hashwasm||{})}(this,(function(A){"use strict";var Q,e={name:"sha3",data:"AGFzbQEAAAABFARgAAF/YAF/AGACf38AYAN/f38AAwgHAAEBAgEAAwUEAQECAgYOAn8BQZCNBQt/AEGACAsHcAgGbWVtb3J5AgAOSGFzaF9HZXRCdWZmZXIAAAlIYXNoX0luaXQAAQtIYXNoX1VwZGF0ZQACCkhhc2hfRmluYWwABA1IYXNoX0dldFN0YXRlAAUOSGFzaF9DYWxjdWxhdGUABgpTVEFURV9TSVpFAwEKpBwHBQBBgAoL1wMAQQBCADcDgI0BQQBCADcD+IwBQQBCADcD8IwBQQBCADcD6IwBQQBCADcD4IwBQQBCADcD2IwBQQBCADcD0IwBQQBCADcDyIwBQQBCADcDwIwBQQBCADcDuIwBQQBCADcDsIwBQQBCADcDqIwBQQBCADcDoIwBQQBCADcDmIwBQQBCADcDkIwBQQBCADcDiIwBQQBCADcDgIwBQQBCADcD+IsBQQBCADcD8IsBQQBCADcD6IsBQQBCADcD4IsBQQBCADcD2IsBQQBCADcD0IsBQQBCADcDyIsBQQBCADcDwIsBQQBCADcDuIsBQQBCADcDsIsBQQBCADcDqIsBQQBCADcDoIsBQQBCADcDmIsBQQBCADcDkIsBQQBCADcDiIsBQQBCADcDgIsBQQBCADcD+IoBQQBCADcD8IoBQQBCADcD6IoBQQBCADcD4IoBQQBCADcD2IoBQQBCADcD0IoBQQBCADcDyIoBQQBCADcDwIoBQQBCADcDuIoBQQBCADcDsIoBQQBCADcDqIoBQQBCADcDoIoBQQBCADcDmIoBQQBCADcDkIoBQQBCADcDiIoBQQBCADcDgIoBQQBBwAwgAEEBdGtBA3Y2AoyNAUEAQQA2AoiNAQuMAwEIfwJAQQAoAoiNASIBQQBIDQBBACABIABqQQAoAoyNASICcDYCiI0BAkACQCABDQBBgAohAwwBCwJAIAIgAWsiBCAAIAQgAEkbIgNFDQAgA0EDcSEFQQAhBgJAIANBBEkNACABQYCKAWohByADQXxxIQhBACEGA0AgByAGaiIDQcgBaiAGQYAKai0AADoAACADQckBaiAGQYEKai0AADoAACADQcoBaiAGQYIKai0AADoAACADQcsBaiAGQYMKai0AADoAACAIIAZBBGoiBkcNAAsLIAVFDQAgAUHIiwFqIQMDQCADIAZqIAZBgApqLQAAOgAAIAZBAWohBiAFQX9qIgUNAAsLIAAgBEkNAUHIiwEgAhADIAAgBGshACAEQYAKaiEDCwJAIAAgAkkNAANAIAMgAhADIAMgAmohAyAAIAJrIgAgAk8NAAsLIABFDQBBACECQcgBIQYDQCAGQYCKAWogAyAGakG4fmotAAA6AAAgBkEBaiEGIAAgAkEBaiICQf8BcUsNAAsLC+ALAS1+IAApA0AhAkEAKQPAigEhAyAAKQM4IQRBACkDuIoBIQUgACkDMCEGQQApA7CKASEHIAApAyghCEEAKQOoigEhCSAAKQMgIQpBACkDoIoBIQsgACkDGCEMQQApA5iKASENIAApAxAhDkEAKQOQigEhDyAAKQMIIRBBACkDiIoBIREgACkDACESQQApA4CKASETQQApA8iKASEUAkACQCABQcgASw0AQQApA+iKASEVQQApA/iKASEWQQApA/CKASEXQQApA4CLASEYQQApA9CKASEZQQApA+CKASEaQQApA9iKASEbDAELQQApA+CKASAAKQNghSEaQQApA9iKASAAKQNYhSEbQQApA9CKASAAKQNQhSEZIBQgACkDSIUhFEEAKQPoigEhFUEAKQP4igEhFkEAKQPwigEhF0EAKQOAiwEhGCABQekASQ0AIBggACkDgAGFIRggFiAAKQN4hSEWIBcgACkDcIUhFyAVIAApA2iFIRUgAUGJAUkNAEEAQQApA4iLASAAKQOIAYU3A4iLAQsgAyAChSEcIAUgBIUhHSAHIAaFIQcgCSAIhSEIIAsgCoUhHiANIAyFIQkgDyAOhSEKIBEgEIUhCyATIBKFIQxBACkDuIsBIRBBACkDkIsBIRFBACkDoIsBIRJBACkDsIsBIRNBACkDiIsBIQ1BACkDwIsBIQ5BACkDmIsBIR9BACkDqIsBIQ9BwH4hAANAIB4gByALhSAbhSAYhSAPhUIBiYUgFIUgF4UgH4UgDoUhAiAMIB0gCoUgGoUgDYUgE4VCAYmFIAiFIBmFIBaFIBKFIgMgB4UhICAJIAggDIUgGYUgFoUgEoVCAYmFIByFIBWFIBGFIBCFIgQgDoUhISAcIAogFCAehSAXhSAfhSAOhUIBiYUgHYUgGoUgDYUgE4UiBYVCN4kiIiALIBwgCYUgFYUgEYUgEIVCAYmFIAeFIBuFIBiFIA+FIgYgCoVCPokiI0J/hYMgAyAPhUICiSIkhSEOIBYgAoVCKYkiJSAEIBeFQieJIiZCf4WDICKFIQ8gECAFhUI4iSIQIAYgDYVCD4kiJ0J/hYMgAyAbhUIKiSIohSENIAQgHoVCG4kiKSAoIAggAoVCJIkiKkJ/hYOFIRYgBiAdhUIGiSIrIAMgC4VCAYkiLEJ/hYMgEiAChUISiSIthSEXICsgBCAfhUIIiSIuIBUgBYVCGYkiFUJ/hYOFIRsgBiAThUI9iSIdIAQgFIVCFIkiBCAJIAWFQhyJIghCf4WDhSEUIAggHUJ/hYMgAyAYhUItiSIDhSEcIB0gA0J/hYMgGSAChUIDiSIJhSEdIAQgAyAJQn+Fg4UhByAJIARCf4WDIAiFIQggDCAChSICICFCDokiA0J/hYMgESAFhUIViSIEhSEJIAYgGoVCK4kiBSADIARCf4WDhSEKIAQgBUJ/hYMgIEIsiSIEhSELIABB0AlqKQMAIAUgBEJ/hYOFIAKFIQwgJyAoQn+FgyAqhSIFIRggAyAEIAJCf4WDhSICIR4gKiApQn+FgyAQhSIDIR8gLSAuQn+FgyAVhSIEIRogJiAkICVCf4WDhSIGIRMgFSArQn+FgyAshSIoIRkgIyAmICJCf4WDhSIiIRIgLiAsIC1Cf4WDhSImIRUgJyApIBBCf4WDhSInIREgIyAkQn+FgyAlhSIjIRAgAEEIaiIADQALQQAgDzcDqIsBQQAgBTcDgIsBQQAgGzcD2IoBQQAgBzcDsIoBQQAgCzcDiIoBQQAgDjcDwIsBQQAgAzcDmIsBQQAgFzcD8IoBQQAgFDcDyIoBQQAgAjcDoIoBQQAgBjcDsIsBQQAgDTcDiIsBQQAgBDcD4IoBQQAgHTcDuIoBQQAgCjcDkIoBQQAgIjcDoIsBQQAgFjcD+IoBQQAgKDcD0IoBQQAgCDcDqIoBQQAgDDcDgIoBQQAgIzcDuIsBQQAgJzcDkIsBQQAgJjcD6IoBQQAgHDcDwIoBQQAgCTcDmIoBC/gCAQV/QeQAQQAoAoyNASIBQQF2ayECAkBBACgCiI0BIgNBAEgNACABIQQCQCABIANGDQAgA0HIiwFqIQVBACEDA0AgBSADakEAOgAAIANBAWoiAyABQQAoAoiNASIEa0kNAAsLIARByIsBaiIDIAMtAAAgAHI6AAAgAUHHiwFqIgMgAy0AAEGAAXI6AABByIsBIAEQA0EAQYCAgIB4NgKIjQELAkAgAkEESQ0AIAJBAnYiA0EDcSEFQQAhBAJAIANBf2pBA0kNACADQfz///8DcSEBQQAhA0EAIQQDQCADQYAKaiADQYCKAWooAgA2AgAgA0GECmogA0GEigFqKAIANgIAIANBiApqIANBiIoBaigCADYCACADQYwKaiADQYyKAWooAgA2AgAgA0EQaiEDIAEgBEEEaiIERw0ACwsgBUUNACAFQQJ0IQEgBEECdCEDA0AgA0GACmogA0GAigFqKAIANgIAIANBBGohAyABQXxqIgENAAsLCwYAQYCKAQvRBgEDf0EAQgA3A4CNAUEAQgA3A/iMAUEAQgA3A/CMAUEAQgA3A+iMAUEAQgA3A+CMAUEAQgA3A9iMAUEAQgA3A9CMAUEAQgA3A8iMAUEAQgA3A8CMAUEAQgA3A7iMAUEAQgA3A7CMAUEAQgA3A6iMAUEAQgA3A6CMAUEAQgA3A5iMAUEAQgA3A5CMAUEAQgA3A4iMAUEAQgA3A4CMAUEAQgA3A/iLAUEAQgA3A/CLAUEAQgA3A+iLAUEAQgA3A+CLAUEAQgA3A9iLAUEAQgA3A9CLAUEAQgA3A8iLAUEAQgA3A8CLAUEAQgA3A7iLAUEAQgA3A7CLAUEAQgA3A6iLAUEAQgA3A6CLAUEAQgA3A5iLAUEAQgA3A5CLAUEAQgA3A4iLAUEAQgA3A4CLAUEAQgA3A/iKAUEAQgA3A/CKAUEAQgA3A+iKAUEAQgA3A+CKAUEAQgA3A9iKAUEAQgA3A9CKAUEAQgA3A8iKAUEAQgA3A8CKAUEAQgA3A7iKAUEAQgA3A7CKAUEAQgA3A6iKAUEAQgA3A6CKAUEAQgA3A5iKAUEAQgA3A5CKAUEAQgA3A4iKAUEAQgA3A4CKAUEAQcAMIAFBAXRrQQN2NgKMjQFBAEEANgKIjQEgABACQeQAQQAoAoyNASIAQQF2ayEDAkBBACgCiI0BIgFBAEgNACAAIQQCQCAAIAFGDQAgAUHIiwFqIQVBACEBA0AgBSABakEAOgAAIAFBAWoiASAAQQAoAoiNASIEa0kNAAsLIARByIsBaiIBIAEtAAAgAnI6AAAgAEHHiwFqIgEgAS0AAEGAAXI6AABByIsBIAAQA0EAQYCAgIB4NgKIjQELAkAgA0EESQ0AIANBAnYiAUEDcSEFQQAhBAJAIAFBf2pBA0kNACABQfz///8DcSEAQQAhAUEAIQQDQCABQYAKaiABQYCKAWooAgA2AgAgAUGECmogAUGEigFqKAIANgIAIAFBiApqIAFBiIoBaigCADYCACABQYwKaiABQYyKAWooAgA2AgAgAUEQaiEBIAAgBEEEaiIERw0ACwsgBUUNACAFQQJ0IQAgBEECdCEBA0AgAUGACmogAUGAigFqKAIANgIAIAFBBGohASAAQXxqIgANAAsLCwvYAQEAQYAIC9ABkAEAAAAAAAAAAAAAAAAAAAEAAAAAAAAAgoAAAAAAAACKgAAAAAAAgACAAIAAAACAi4AAAAAAAAABAACAAAAAAIGAAIAAAACACYAAAAAAAICKAAAAAAAAAIgAAAAAAAAACYAAgAAAAAAKAACAAAAAAIuAAIAAAAAAiwAAAAAAAICJgAAAAAAAgAOAAAAAAACAAoAAAAAAAICAAAAAAAAAgAqAAAAAAAAACgAAgAAAAICBgACAAAAAgICAAAAAAACAAQAAgAAAAAAIgACAAAAAgA==",hash:"fb24e536"};function I(A,Q,e,I){return new(e||(e=Promise))((function(g,t){function B(A){try{o(I.next(A))}catch(A){t(A)}}function i(A){try{o(I.throw(A))}catch(A){t(A)}}function o(A){var Q;A.done?g(A.value):(Q=A.value,Q instanceof e?Q:new e((function(A){A(Q)}))).then(B,i)}o((I=I.apply(A,Q||[])).next())}))}"function"==typeof SuppressedError&&SuppressedError;class g{constructor(){this.mutex=Promise.resolve()}lock(){let A=()=>{};return this.mutex=this.mutex.then((()=>new Promise(A))),new Promise((Q=>{A=Q}))}dispatch(A){return I(this,void 0,void 0,(function*(){const Q=yield this.lock();try{return yield Promise.resolve(A())}finally{Q()}}))}}const t="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:global,B=null!==(Q=t.Buffer)&&void 0!==Q?Q:null,i=t.TextEncoder?new t.TextEncoder:null;function o(A,Q){return(15&A)+(A>>6|A>>3&8)<<4|(15&Q)+(Q>>6|Q>>3&8)}const n="a".charCodeAt(0)-10,C="0".charCodeAt(0);function r(A,Q,e){let I=0;for(let g=0;g>>4;A[I++]=e>9?e+n:e+C,e=15&Q[g],A[I++]=e>9?e+n:e+C}return String.fromCharCode.apply(null,A)}const s=null!==B?A=>{if("string"==typeof A){const Q=B.from(A,"utf8");return new Uint8Array(Q.buffer,Q.byteOffset,Q.length)}if(B.isBuffer(A))return new Uint8Array(A.buffer,A.byteOffset,A.length);if(ArrayBuffer.isView(A))return new Uint8Array(A.buffer,A.byteOffset,A.byteLength);throw new Error("Invalid data type!")}:A=>{if("string"==typeof A)return i.encode(A);if(ArrayBuffer.isView(A))return new Uint8Array(A.buffer,A.byteOffset,A.byteLength);throw new Error("Invalid data type!")},E="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",D=new Uint8Array(256);for(let A=0;A>4,g+=1,I[g]=(15&t)<<4|B>>2,g+=1,I[g]=(3&B)<<6|63&i,g+=1}return I}const a=16384,h=new g,f=new Map;function l(A,Q){return I(this,void 0,void 0,(function*(){let e=null,g=null,t=!1;if("undefined"==typeof WebAssembly)throw new Error("WebAssembly is not supported in this environment!");const B=()=>new DataView(e.exports.memory.buffer).getUint32(e.exports.STATE_SIZE,!0),i=h.dispatch((()=>I(this,void 0,void 0,(function*(){if(!f.has(A.name)){const Q=c(A.data),e=WebAssembly.compile(Q);f.set(A.name,e)}const Q=yield f.get(A.name);e=yield WebAssembly.instantiate(Q,{})})))),n=(A=null)=>{t=!0,e.exports.Hash_Init(A)},C=A=>{if(!t)throw new Error("update() called before init()");(A=>{let Q=0;for(;Q{if(!t)throw new Error("digest() called before init()");return t=!1,e.exports.Hash_Final(I),"binary"===A?g.slice(0,Q):r(E,g,Q)},l=A=>"string"==typeof A?A.length<4096:A.byteLength!0;break;case"blake2b":case"blake2s":U=(A,Q)=>Q<=512&&l(A);break;case"blake3":U=(A,Q)=>0===Q&&l(A);break;case"xxhash64":case"xxhash3":case"xxhash128":case"crc64":U=()=>!1}return yield(()=>I(this,void 0,void 0,(function*(){e||(yield i);const A=e.exports.Hash_GetBuffer(),Q=e.exports.memory.buffer;g=new Uint8Array(Q,A,a)})))(),{getMemory:()=>g,writeMemory:(A,Q=0)=>{g.set(A,Q)},getExports:()=>e.exports,setMemorySize:A=>{e.exports.Hash_SetMemorySize(A);const Q=e.exports.Hash_GetBuffer(),I=e.exports.memory.buffer;g=new Uint8Array(I,Q,A)},init:n,update:C,digest:D,save:()=>{if(!t)throw new Error("save() can only be called after init() and before digest()");const Q=e.exports.Hash_GetState(),I=B(),g=e.exports.memory.buffer,i=new Uint8Array(g,Q,I),n=new Uint8Array(4+I);return function(A,Q){const e=Q.length>>1;for(let I=0;I{if(!(Q instanceof Uint8Array))throw new Error("load() expects an Uint8Array generated by save()");const I=e.exports.Hash_GetState(),g=B(),i=4+g,n=e.exports.memory.buffer;if(Q.length!==i)throw new Error(`Bad state length (expected ${i} bytes, got ${Q.length})`);if(!function(A,Q){if(A.length!==2*Q.length)return!1;for(let e=0;e{if(!U(A,I))return n(I),C(A),D("hex",t);const B=s(A);return g.set(B),e.exports.Hash_Calculate(B.length,I,t),r(E,g,Q)},hashLength:Q}}))}const U=new g;let u=null;function y(A){return[224,256,384,512].includes(A)?null:new Error("Invalid variant! Valid values: 224, 256, 384, 512")}A.createKeccak=function(A=512){if(y(A))return Promise.reject(y(A));const Q=A/8;return l(e,Q).then((e=>{e.init(A);const I={init:()=>(e.init(A),I),update:A=>(e.update(A),I),digest:A=>e.digest(A,1),save:()=>e.save(),load:A=>(e.load(A),I),blockSize:200-2*Q,digestSize:Q};return I}))},A.keccak=function(A,Q=512){if(y(Q))return Promise.reject(y(Q));const g=Q/8;if(null===u||u.hashLength!==g)return function(A,Q,e){return I(this,void 0,void 0,(function*(){const I=yield A.lock(),g=yield l(Q,e);return I(),g}))}(U,e,g).then((e=>(u=e,u.calculate(A,Q,1))));try{const e=u.calculate(A,Q,1);return Promise.resolve(e)}catch(A){return Promise.reject(A)}}})); diff --git a/frontend/node_modules/hash-wasm/dist/lib/WASMInterface.d.ts b/frontend/node_modules/hash-wasm/dist/lib/WASMInterface.d.ts new file mode 100644 index 0000000..9ae0a11 --- /dev/null +++ b/frontend/node_modules/hash-wasm/dist/lib/WASMInterface.d.ts @@ -0,0 +1,60 @@ +import { type IDataType, type IEmbeddedWasm } from "./util"; +export declare const MAX_HEAP: number; +type ThenArg = T extends Promise ? U : T extends (...args: any[]) => Promise ? V : T; +export type IHasher = { + /** + * Initializes hash state to default value + */ + init: () => IHasher; + /** + * Updates the hash content with the given data + */ + update: (data: IDataType) => IHasher; + /** + * Calculates the hash of all of the data passed to be hashed with hash.update(). + * Defaults to hexadecimal string + * @param outputType If outputType is "binary", it returns Uint8Array. Otherwise it + * returns hexadecimal string + */ + digest: { + (outputType: "binary"): Uint8Array; + (outputType?: "hex"): string; + }; + /** + * Save the current internal state of the hasher for later resumption with load(). + * Cannot be called before .init() or after .digest() + * + * Note that this state can include arbitrary information about the value being hashed (e.g. + * could include N plaintext bytes from the value), so needs to be treated as being as + * sensitive as the input value itself. + */ + save: () => Uint8Array; + /** + * Resume a state that was created by save(). If this state was not created by a + * compatible build of hash-wasm, an exception will be thrown. + */ + load: (state: Uint8Array) => IHasher; + /** + * Block size in bytes + */ + blockSize: number; + /** + * Digest size in bytes + */ + digestSize: number; +}; +export declare function WASMInterface(binary: IEmbeddedWasm, hashLength: number): Promise<{ + getMemory: () => Uint8Array; + writeMemory: (data: Uint8Array, offset?: number) => void; + getExports: () => any; + setMemorySize: (totalSize: number) => void; + init: (bits?: number) => void; + update: (data: IDataType) => void; + digest: (outputType: "hex" | "binary", padding?: number) => Uint8Array | string; + save: () => Uint8Array; + load: (state: Uint8Array) => void; + calculate: (data: IDataType, initParam?: any, digestParam?: any) => string; + hashLength: number; +}>; +export type IWASMInterface = ThenArg>; +export {}; diff --git a/frontend/node_modules/hash-wasm/dist/lib/adler32.d.ts b/frontend/node_modules/hash-wasm/dist/lib/adler32.d.ts new file mode 100644 index 0000000..0838121 --- /dev/null +++ b/frontend/node_modules/hash-wasm/dist/lib/adler32.d.ts @@ -0,0 +1,14 @@ +import { type IHasher } from "./WASMInterface"; +import type { IDataType } from "./util"; +/** + * Calculates Adler-32 hash. The resulting 32-bit hash is stored in + * network byte order (big-endian). + * + * @param data Input data (string, Buffer or TypedArray) + * @returns Computed hash as a hexadecimal string + */ +export declare function adler32(data: IDataType): Promise; +/** + * Creates a new Adler-32 hash instance + */ +export declare function createAdler32(): Promise; diff --git a/frontend/node_modules/hash-wasm/dist/lib/argon2.d.ts b/frontend/node_modules/hash-wasm/dist/lib/argon2.d.ts new file mode 100644 index 0000000..8be0b93 --- /dev/null +++ b/frontend/node_modules/hash-wasm/dist/lib/argon2.d.ts @@ -0,0 +1,74 @@ +import { type IDataType } from "./util"; +export interface IArgon2Options { + /** + * Password (or message) to be hashed + */ + password: IDataType; + /** + * Salt (usually containing random bytes) + */ + salt: IDataType; + /** + * Secret for keyed hashing + */ + secret?: IDataType; + /** + * Number of iterations to perform + */ + iterations: number; + /** + * Degree of parallelism + */ + parallelism: number; + /** + * Amount of memory to be used in kibibytes (1024 bytes) + */ + memorySize: number; + /** + * Output size in bytes + */ + hashLength: number; + /** + * Desired output type. Defaults to 'hex' + */ + outputType?: "hex" | "binary" | "encoded"; +} +interface IArgon2OptionsBinary { + outputType: "binary"; +} +type Argon2ReturnType = T extends IArgon2OptionsBinary ? Uint8Array : string; +/** + * Calculates hash using the argon2i password-hashing function + * @returns Computed hash + */ +export declare function argon2i(options: T): Promise>; +/** + * Calculates hash using the argon2id password-hashing function + * @returns Computed hash + */ +export declare function argon2id(options: T): Promise>; +/** + * Calculates hash using the argon2d password-hashing function + * @returns Computed hash + */ +export declare function argon2d(options: T): Promise>; +export interface Argon2VerifyOptions { + /** + * Password to be verified + */ + password: IDataType; + /** + * Secret used on hash creation + */ + secret?: IDataType; + /** + * A previously generated argon2 hash in the 'encoded' output format + */ + hash: string; +} +/** + * Verifies password using the argon2 password-hashing function + * @returns True if the encoded hash matches the password + */ +export declare function argon2Verify(options: Argon2VerifyOptions): Promise; +export {}; diff --git a/frontend/node_modules/hash-wasm/dist/lib/bcrypt.d.ts b/frontend/node_modules/hash-wasm/dist/lib/bcrypt.d.ts new file mode 100644 index 0000000..47307db --- /dev/null +++ b/frontend/node_modules/hash-wasm/dist/lib/bcrypt.d.ts @@ -0,0 +1,44 @@ +import { type IDataType } from "./util"; +export interface BcryptOptions { + /** + * Password to be hashed + */ + password: IDataType; + /** + * Salt (16 bytes long - usually containing random bytes) + */ + salt: IDataType; + /** + * Number of iterations to perform (4 - 31) + */ + costFactor: number; + /** + * Desired output type. Defaults to 'encoded' + */ + outputType?: "hex" | "binary" | "encoded"; +} +interface IBcryptOptionsBinary { + outputType: "binary"; +} +type BcryptReturnType = T extends IBcryptOptionsBinary ? Uint8Array : string; +/** + * Calculates hash using the bcrypt password-hashing function + * @returns Computed hash + */ +export declare function bcrypt(options: T): Promise>; +export interface BcryptVerifyOptions { + /** + * Password to be verified + */ + password: IDataType; + /** + * A previously generated bcrypt hash in the 'encoded' output format + */ + hash: string; +} +/** + * Verifies password using bcrypt password-hashing function + * @returns True if the encoded hash matches the password + */ +export declare function bcryptVerify(options: BcryptVerifyOptions): Promise; +export {}; diff --git a/frontend/node_modules/hash-wasm/dist/lib/blake2b.d.ts b/frontend/node_modules/hash-wasm/dist/lib/blake2b.d.ts new file mode 100644 index 0000000..e1be8b4 --- /dev/null +++ b/frontend/node_modules/hash-wasm/dist/lib/blake2b.d.ts @@ -0,0 +1,18 @@ +import { type IHasher } from "./WASMInterface"; +import { type IDataType } from "./util"; +/** + * Calculates BLAKE2b hash + * @param data Input data (string, Buffer or TypedArray) + * @param bits Number of output bits, which has to be a number + * divisible by 8, between 8 and 512. Defaults to 512. + * @param key Optional key (string, Buffer or TypedArray). Maximum length is 64 bytes. + * @returns Computed hash as a hexadecimal string + */ +export declare function blake2b(data: IDataType, bits?: number, key?: IDataType): Promise; +/** + * Creates a new BLAKE2b hash instance + * @param bits Number of output bits, which has to be a number + * divisible by 8, between 8 and 512. Defaults to 512. + * @param key Optional key (string, Buffer or TypedArray). Maximum length is 64 bytes. + */ +export declare function createBLAKE2b(bits?: number, key?: IDataType): Promise; diff --git a/frontend/node_modules/hash-wasm/dist/lib/blake2s.d.ts b/frontend/node_modules/hash-wasm/dist/lib/blake2s.d.ts new file mode 100644 index 0000000..8b260b1 --- /dev/null +++ b/frontend/node_modules/hash-wasm/dist/lib/blake2s.d.ts @@ -0,0 +1,18 @@ +import { type IHasher } from "./WASMInterface"; +import { type IDataType } from "./util"; +/** + * Calculates BLAKE2s hash + * @param data Input data (string, Buffer or TypedArray) + * @param bits Number of output bits, which has to be a number + * divisible by 8, between 8 and 256. Defaults to 256. + * @param key Optional key (string, Buffer or TypedArray). Maximum length is 32 bytes. + * @returns Computed hash as a hexadecimal string + */ +export declare function blake2s(data: IDataType, bits?: number, key?: IDataType): Promise; +/** + * Creates a new BLAKE2s hash instance + * @param bits Number of output bits, which has to be a number + * divisible by 8, between 8 and 256. Defaults to 256. + * @param key Optional key (string, Buffer or TypedArray). Maximum length is 32 bytes. + */ +export declare function createBLAKE2s(bits?: number, key?: IDataType): Promise; diff --git a/frontend/node_modules/hash-wasm/dist/lib/blake3.d.ts b/frontend/node_modules/hash-wasm/dist/lib/blake3.d.ts new file mode 100644 index 0000000..5bfaa02 --- /dev/null +++ b/frontend/node_modules/hash-wasm/dist/lib/blake3.d.ts @@ -0,0 +1,18 @@ +import { type IHasher } from "./WASMInterface"; +import { type IDataType } from "./util"; +/** + * Calculates BLAKE3 hash + * @param data Input data (string, Buffer or TypedArray) + * @param bits Number of output bits, which has to be a number + * divisible by 8. Defaults to 256. + * @param key Optional key (string, Buffer or TypedArray). Length should be 32 bytes. + * @returns Computed hash as a hexadecimal string + */ +export declare function blake3(data: IDataType, bits?: number, key?: IDataType): Promise; +/** + * Creates a new BLAKE3 hash instance + * @param bits Number of output bits, which has to be a number + * divisible by 8. Defaults to 256. + * @param key Optional key (string, Buffer or TypedArray). Length should be 32 bytes. + */ +export declare function createBLAKE3(bits?: number, key?: IDataType): Promise; diff --git a/frontend/node_modules/hash-wasm/dist/lib/crc32.d.ts b/frontend/node_modules/hash-wasm/dist/lib/crc32.d.ts new file mode 100644 index 0000000..f45fee0 --- /dev/null +++ b/frontend/node_modules/hash-wasm/dist/lib/crc32.d.ts @@ -0,0 +1,14 @@ +import { type IHasher } from "./WASMInterface"; +import type { IDataType } from "./util"; +/** + * Calculates CRC-32 hash + * @param data Input data (string, Buffer or TypedArray) + * @param polynomial Input polynomial (defaults to 0xedb88320, for CRC32C use 0x82f63b78) + * @returns Computed hash as a hexadecimal string + */ +export declare function crc32(data: IDataType, polynomial?: number): Promise; +/** + * Creates a new CRC-32 hash instance + * @param polynomial Input polynomial (defaults to 0xedb88320, for CRC32C use 0x82f63b78) + */ +export declare function createCRC32(polynomial?: number): Promise; diff --git a/frontend/node_modules/hash-wasm/dist/lib/crc64.d.ts b/frontend/node_modules/hash-wasm/dist/lib/crc64.d.ts new file mode 100644 index 0000000..dad998c --- /dev/null +++ b/frontend/node_modules/hash-wasm/dist/lib/crc64.d.ts @@ -0,0 +1,14 @@ +import { type IHasher } from "./WASMInterface"; +import type { IDataType } from "./util"; +/** + * Calculates CRC-64 hash + * @param data Input data (string, Buffer or TypedArray) + * @param polynomial Input polynomial (defaults to 'c96c5795d7870f42' - ECMA) + * @returns Computed hash as a hexadecimal string + */ +export declare function crc64(data: IDataType, polynomial?: string): Promise; +/** + * Creates a new CRC-64 hash instance + * @param polynomial Input polynomial (defaults to 'c96c5795d7870f42' - ECMA) + */ +export declare function createCRC64(polynomial?: string): Promise; diff --git a/frontend/node_modules/hash-wasm/dist/lib/hmac.d.ts b/frontend/node_modules/hash-wasm/dist/lib/hmac.d.ts new file mode 100644 index 0000000..f546454 --- /dev/null +++ b/frontend/node_modules/hash-wasm/dist/lib/hmac.d.ts @@ -0,0 +1,8 @@ +import type { IHasher } from "./WASMInterface"; +import { type IDataType } from "./util"; +/** + * Calculates HMAC hash + * @param hash Hash algorithm to use. It has to be the return value of a function like createSHA1() + * @param key Key (string, Buffer or TypedArray) + */ +export declare function createHMAC(hash: Promise, key: IDataType): Promise; diff --git a/frontend/node_modules/hash-wasm/dist/lib/index.d.ts b/frontend/node_modules/hash-wasm/dist/lib/index.d.ts new file mode 100644 index 0000000..4bb4aaf --- /dev/null +++ b/frontend/node_modules/hash-wasm/dist/lib/index.d.ts @@ -0,0 +1,29 @@ +export * from "./adler32"; +export * from "./argon2"; +export * from "./blake2b"; +export * from "./blake2s"; +export * from "./blake3"; +export * from "./crc32"; +export * from "./crc64"; +export * from "./md4"; +export * from "./md5"; +export * from "./sha1"; +export * from "./sha3"; +export * from "./keccak"; +export * from "./sha224"; +export * from "./sha256"; +export * from "./sha384"; +export * from "./sha512"; +export * from "./xxhash32"; +export * from "./xxhash64"; +export * from "./xxhash3"; +export * from "./xxhash128"; +export * from "./ripemd160"; +export * from "./hmac"; +export * from "./pbkdf2"; +export * from "./scrypt"; +export * from "./bcrypt"; +export * from "./whirlpool"; +export * from "./sm3"; +export type { IDataType } from "./util"; +export type { IHasher } from "./WASMInterface"; diff --git a/frontend/node_modules/hash-wasm/dist/lib/keccak.d.ts b/frontend/node_modules/hash-wasm/dist/lib/keccak.d.ts new file mode 100644 index 0000000..f624eed --- /dev/null +++ b/frontend/node_modules/hash-wasm/dist/lib/keccak.d.ts @@ -0,0 +1,16 @@ +import { type IHasher } from "./WASMInterface"; +import type { IDataType } from "./util"; +type IValidBits = 224 | 256 | 384 | 512; +/** + * Calculates Keccak hash + * @param data Input data (string, Buffer or TypedArray) + * @param bits Number of output bits. Valid values: 224, 256, 384, 512 + * @returns Computed hash as a hexadecimal string + */ +export declare function keccak(data: IDataType, bits?: IValidBits): Promise; +/** + * Creates a new Keccak hash instance + * @param bits Number of output bits. Valid values: 224, 256, 384, 512 + */ +export declare function createKeccak(bits?: IValidBits): Promise; +export {}; diff --git a/frontend/node_modules/hash-wasm/dist/lib/lockedCreate.d.ts b/frontend/node_modules/hash-wasm/dist/lib/lockedCreate.d.ts new file mode 100644 index 0000000..ba83dcd --- /dev/null +++ b/frontend/node_modules/hash-wasm/dist/lib/lockedCreate.d.ts @@ -0,0 +1,4 @@ +import { type IWASMInterface } from "./WASMInterface"; +import type Mutex from "./mutex"; +import type { IEmbeddedWasm } from "./util"; +export default function lockedCreate(mutex: Mutex, binary: IEmbeddedWasm, hashLength: number): Promise; diff --git a/frontend/node_modules/hash-wasm/dist/lib/md4.d.ts b/frontend/node_modules/hash-wasm/dist/lib/md4.d.ts new file mode 100644 index 0000000..47d3174 --- /dev/null +++ b/frontend/node_modules/hash-wasm/dist/lib/md4.d.ts @@ -0,0 +1,12 @@ +import { type IHasher } from "./WASMInterface"; +import type { IDataType } from "./util"; +/** + * Calculates MD4 hash + * @param data Input data (string, Buffer or TypedArray) + * @returns Computed hash as a hexadecimal string + */ +export declare function md4(data: IDataType): Promise; +/** + * Creates a new MD4 hash instance + */ +export declare function createMD4(): Promise; diff --git a/frontend/node_modules/hash-wasm/dist/lib/md5.d.ts b/frontend/node_modules/hash-wasm/dist/lib/md5.d.ts new file mode 100644 index 0000000..2b1bdfc --- /dev/null +++ b/frontend/node_modules/hash-wasm/dist/lib/md5.d.ts @@ -0,0 +1,12 @@ +import { type IHasher } from "./WASMInterface"; +import type { IDataType } from "./util"; +/** + * Calculates MD5 hash + * @param data Input data (string, Buffer or TypedArray) + * @returns Computed hash as a hexadecimal string + */ +export declare function md5(data: IDataType): Promise; +/** + * Creates a new MD5 hash instance + */ +export declare function createMD5(): Promise; diff --git a/frontend/node_modules/hash-wasm/dist/lib/mutex.d.ts b/frontend/node_modules/hash-wasm/dist/lib/mutex.d.ts new file mode 100644 index 0000000..83fd6ff --- /dev/null +++ b/frontend/node_modules/hash-wasm/dist/lib/mutex.d.ts @@ -0,0 +1,6 @@ +declare class Mutex { + private mutex; + lock(): PromiseLike<() => void>; + dispatch(fn: () => PromiseLike): Promise; +} +export default Mutex; diff --git a/frontend/node_modules/hash-wasm/dist/lib/pbkdf2.d.ts b/frontend/node_modules/hash-wasm/dist/lib/pbkdf2.d.ts new file mode 100644 index 0000000..2d065bd --- /dev/null +++ b/frontend/node_modules/hash-wasm/dist/lib/pbkdf2.d.ts @@ -0,0 +1,37 @@ +import type { IHasher } from "./WASMInterface"; +import { type IDataType } from "./util"; +export interface IPBKDF2Options { + /** + * Password (or message) to be hashed + */ + password: IDataType; + /** + * Salt (usually containing random bytes) + */ + salt: IDataType; + /** + * Number of iterations to perform + */ + iterations: number; + /** + * Output size in bytes + */ + hashLength: number; + /** + * Hash algorithm to use. It has to be the return value of a function like createSHA1() + */ + hashFunction: Promise; + /** + * Desired output type. Defaults to 'hex' + */ + outputType?: "hex" | "binary"; +} +interface IPBKDF2OptionsBinary { + outputType: "binary"; +} +type PBKDF2ReturnType = T extends IPBKDF2OptionsBinary ? Uint8Array : string; +/** + * Generates a new PBKDF2 hash for the supplied password + */ +export declare function pbkdf2(options: T): Promise>; +export {}; diff --git a/frontend/node_modules/hash-wasm/dist/lib/ripemd160.d.ts b/frontend/node_modules/hash-wasm/dist/lib/ripemd160.d.ts new file mode 100644 index 0000000..a600f7a --- /dev/null +++ b/frontend/node_modules/hash-wasm/dist/lib/ripemd160.d.ts @@ -0,0 +1,12 @@ +import { type IHasher } from "./WASMInterface"; +import type { IDataType } from "./util"; +/** + * Calculates RIPEMD-160 hash + * @param data Input data (string, Buffer or TypedArray) + * @returns Computed hash as a hexadecimal string + */ +export declare function ripemd160(data: IDataType): Promise; +/** + * Creates a new RIPEMD-160 hash instance + */ +export declare function createRIPEMD160(): Promise; diff --git a/frontend/node_modules/hash-wasm/dist/lib/scrypt.d.ts b/frontend/node_modules/hash-wasm/dist/lib/scrypt.d.ts new file mode 100644 index 0000000..a4572f2 --- /dev/null +++ b/frontend/node_modules/hash-wasm/dist/lib/scrypt.d.ts @@ -0,0 +1,42 @@ +import { type IDataType } from "./util"; +export interface ScryptOptions { + /** + * Password (or message) to be hashed + */ + password: IDataType; + /** + * Salt (usually containing random bytes) + */ + salt: IDataType; + /** + * CPU / memory cost - must be a power of 2 (e.g. 1024) + */ + costFactor: number; + /** + * Block size (8 is commonly used) + */ + blockSize: number; + /** + * Degree of parallelism + */ + parallelism: number; + /** + * Output size in bytes + */ + hashLength: number; + /** + * Output data type. Defaults to hexadecimal string + */ + outputType?: "hex" | "binary"; +} +interface IScryptOptionsBinary { + outputType: "binary"; +} +type ScryptReturnType = T extends IScryptOptionsBinary ? Uint8Array : string; +/** + * Calculates hash using the scrypt password-based key derivation function + * @returns Computed hash as a hexadecimal string or as + * Uint8Array depending on the outputType option + */ +export declare function scrypt(options: T): Promise>; +export {}; diff --git a/frontend/node_modules/hash-wasm/dist/lib/sha1.d.ts b/frontend/node_modules/hash-wasm/dist/lib/sha1.d.ts new file mode 100644 index 0000000..5bff40c --- /dev/null +++ b/frontend/node_modules/hash-wasm/dist/lib/sha1.d.ts @@ -0,0 +1,12 @@ +import { type IHasher } from "./WASMInterface"; +import type { IDataType } from "./util"; +/** + * Calculates SHA-1 hash + * @param data Input data (string, Buffer or TypedArray) + * @returns Computed hash as a hexadecimal string + */ +export declare function sha1(data: IDataType): Promise; +/** + * Creates a new SHA-1 hash instance + */ +export declare function createSHA1(): Promise; diff --git a/frontend/node_modules/hash-wasm/dist/lib/sha224.d.ts b/frontend/node_modules/hash-wasm/dist/lib/sha224.d.ts new file mode 100644 index 0000000..1d67e9e --- /dev/null +++ b/frontend/node_modules/hash-wasm/dist/lib/sha224.d.ts @@ -0,0 +1,12 @@ +import { type IHasher } from "./WASMInterface"; +import type { IDataType } from "./util"; +/** + * Calculates SHA-2 (SHA-224) hash + * @param data Input data (string, Buffer or TypedArray) + * @returns Computed hash as a hexadecimal string + */ +export declare function sha224(data: IDataType): Promise; +/** + * Creates a new SHA-2 (SHA-224) hash instance + */ +export declare function createSHA224(): Promise; diff --git a/frontend/node_modules/hash-wasm/dist/lib/sha256.d.ts b/frontend/node_modules/hash-wasm/dist/lib/sha256.d.ts new file mode 100644 index 0000000..d4fb620 --- /dev/null +++ b/frontend/node_modules/hash-wasm/dist/lib/sha256.d.ts @@ -0,0 +1,12 @@ +import { type IHasher } from "./WASMInterface"; +import type { IDataType } from "./util"; +/** + * Calculates SHA-2 (SHA-256) hash + * @param data Input data (string, Buffer or TypedArray) + * @returns Computed hash as a hexadecimal string + */ +export declare function sha256(data: IDataType): Promise; +/** + * Creates a new SHA-2 (SHA-256) hash instance + */ +export declare function createSHA256(): Promise; diff --git a/frontend/node_modules/hash-wasm/dist/lib/sha3.d.ts b/frontend/node_modules/hash-wasm/dist/lib/sha3.d.ts new file mode 100644 index 0000000..ac304f1 --- /dev/null +++ b/frontend/node_modules/hash-wasm/dist/lib/sha3.d.ts @@ -0,0 +1,16 @@ +import { type IHasher } from "./WASMInterface"; +import type { IDataType } from "./util"; +type IValidBits = 224 | 256 | 384 | 512; +/** + * Calculates SHA-3 hash + * @param data Input data (string, Buffer or TypedArray) + * @param bits Number of output bits. Valid values: 224, 256, 384, 512 + * @returns Computed hash as a hexadecimal string + */ +export declare function sha3(data: IDataType, bits?: IValidBits): Promise; +/** + * Creates a new SHA-3 hash instance + * @param bits Number of output bits. Valid values: 224, 256, 384, 512 + */ +export declare function createSHA3(bits?: IValidBits): Promise; +export {}; diff --git a/frontend/node_modules/hash-wasm/dist/lib/sha384.d.ts b/frontend/node_modules/hash-wasm/dist/lib/sha384.d.ts new file mode 100644 index 0000000..f69f5c0 --- /dev/null +++ b/frontend/node_modules/hash-wasm/dist/lib/sha384.d.ts @@ -0,0 +1,12 @@ +import { type IHasher } from "./WASMInterface"; +import type { IDataType } from "./util"; +/** + * Calculates SHA-2 (SHA-384) hash + * @param data Input data (string, Buffer or TypedArray) + * @returns Computed hash as a hexadecimal string + */ +export declare function sha384(data: IDataType): Promise; +/** + * Creates a new SHA-2 (SHA-384) hash instance + */ +export declare function createSHA384(): Promise; diff --git a/frontend/node_modules/hash-wasm/dist/lib/sha512.d.ts b/frontend/node_modules/hash-wasm/dist/lib/sha512.d.ts new file mode 100644 index 0000000..c83ccd4 --- /dev/null +++ b/frontend/node_modules/hash-wasm/dist/lib/sha512.d.ts @@ -0,0 +1,12 @@ +import { type IHasher } from "./WASMInterface"; +import type { IDataType } from "./util"; +/** + * Calculates SHA-2 (SHA-512) hash + * @param data Input data (string, Buffer or TypedArray) + * @returns Computed hash as a hexadecimal string + */ +export declare function sha512(data: IDataType): Promise; +/** + * Creates a new SHA-2 (SHA-512) hash instance + */ +export declare function createSHA512(): Promise; diff --git a/frontend/node_modules/hash-wasm/dist/lib/sm3.d.ts b/frontend/node_modules/hash-wasm/dist/lib/sm3.d.ts new file mode 100644 index 0000000..807de5c --- /dev/null +++ b/frontend/node_modules/hash-wasm/dist/lib/sm3.d.ts @@ -0,0 +1,12 @@ +import { type IHasher } from "./WASMInterface"; +import type { IDataType } from "./util"; +/** + * Calculates SM3 hash + * @param data Input data (string, Buffer or TypedArray) + * @returns Computed hash as a hexadecimal string + */ +export declare function sm3(data: IDataType): Promise; +/** + * Creates a new SM3 hash instance + */ +export declare function createSM3(): Promise; diff --git a/frontend/node_modules/hash-wasm/dist/lib/util.d.ts b/frontend/node_modules/hash-wasm/dist/lib/util.d.ts new file mode 100644 index 0000000..43e5e45 --- /dev/null +++ b/frontend/node_modules/hash-wasm/dist/lib/util.d.ts @@ -0,0 +1,15 @@ +export type ITypedArray = Uint8Array | Uint16Array | Uint32Array; +export type IDataType = string | Buffer | ITypedArray; +export type IEmbeddedWasm = { + name: string; + data: string; + hash: string; +}; +export declare function intArrayToString(arr: Uint8Array, len: number): string; +export declare function writeHexToUInt8(buf: Uint8Array, str: string): void; +export declare function hexStringEqualsUInt8(str: string, buf: Uint8Array): boolean; +export declare function getDigestHex(tmpBuffer: Uint8Array, input: Uint8Array, hashLength: number): string; +export declare const getUInt8Buffer: (data: IDataType) => Uint8Array; +export declare function encodeBase64(data: Uint8Array, pad?: boolean): string; +export declare function getDecodeBase64Length(data: string): number; +export declare function decodeBase64(data: string): Uint8Array; diff --git a/frontend/node_modules/hash-wasm/dist/lib/whirlpool.d.ts b/frontend/node_modules/hash-wasm/dist/lib/whirlpool.d.ts new file mode 100644 index 0000000..bbaffec --- /dev/null +++ b/frontend/node_modules/hash-wasm/dist/lib/whirlpool.d.ts @@ -0,0 +1,12 @@ +import { type IHasher } from "./WASMInterface"; +import type { IDataType } from "./util"; +/** + * Calculates Whirlpool hash + * @param data Input data (string, Buffer or TypedArray) + * @returns Computed hash as a hexadecimal string + */ +export declare function whirlpool(data: IDataType): Promise; +/** + * Creates a new Whirlpool hash instance + */ +export declare function createWhirlpool(): Promise; diff --git a/frontend/node_modules/hash-wasm/dist/lib/xxhash128.d.ts b/frontend/node_modules/hash-wasm/dist/lib/xxhash128.d.ts new file mode 100644 index 0000000..3c92f05 --- /dev/null +++ b/frontend/node_modules/hash-wasm/dist/lib/xxhash128.d.ts @@ -0,0 +1,20 @@ +import { type IHasher } from "./WASMInterface"; +import type { IDataType } from "./util"; +/** + * Calculates xxHash128 hash + * @param data Input data (string, Buffer or TypedArray) + * @param seedLow Lower 32 bits of the number used to + * initialize the internal state of the algorithm (defaults to 0) + * @param seedHigh Higher 32 bits of the number used to + * initialize the internal state of the algorithm (defaults to 0) + * @returns Computed hash as a hexadecimal string + */ +export declare function xxhash128(data: IDataType, seedLow?: number, seedHigh?: number): Promise; +/** + * Creates a new xxHash128 hash instance + * @param seedLow Lower 32 bits of the number used to + * initialize the internal state of the algorithm (defaults to 0) + * @param seedHigh Higher 32 bits of the number used to + * initialize the internal state of the algorithm (defaults to 0) + */ +export declare function createXXHash128(seedLow?: number, seedHigh?: number): Promise; diff --git a/frontend/node_modules/hash-wasm/dist/lib/xxhash3.d.ts b/frontend/node_modules/hash-wasm/dist/lib/xxhash3.d.ts new file mode 100644 index 0000000..83c6237 --- /dev/null +++ b/frontend/node_modules/hash-wasm/dist/lib/xxhash3.d.ts @@ -0,0 +1,20 @@ +import { type IHasher } from "./WASMInterface"; +import type { IDataType } from "./util"; +/** + * Calculates xxHash3 hash + * @param data Input data (string, Buffer or TypedArray) + * @param seedLow Lower 32 bits of the number used to + * initialize the internal state of the algorithm (defaults to 0) + * @param seedHigh Higher 32 bits of the number used to + * initialize the internal state of the algorithm (defaults to 0) + * @returns Computed hash as a hexadecimal string + */ +export declare function xxhash3(data: IDataType, seedLow?: number, seedHigh?: number): Promise; +/** + * Creates a new xxHash3 hash instance + * @param seedLow Lower 32 bits of the number used to + * initialize the internal state of the algorithm (defaults to 0) + * @param seedHigh Higher 32 bits of the number used to + * initialize the internal state of the algorithm (defaults to 0) + */ +export declare function createXXHash3(seedLow?: number, seedHigh?: number): Promise; diff --git a/frontend/node_modules/hash-wasm/dist/lib/xxhash32.d.ts b/frontend/node_modules/hash-wasm/dist/lib/xxhash32.d.ts new file mode 100644 index 0000000..be113d1 --- /dev/null +++ b/frontend/node_modules/hash-wasm/dist/lib/xxhash32.d.ts @@ -0,0 +1,15 @@ +import { type IHasher } from "./WASMInterface"; +import type { IDataType } from "./util"; +/** + * Calculates xxHash32 hash + * @param data Input data (string, Buffer or TypedArray) + * @param seed Number used to initialize the internal state of the algorithm (defaults to 0) + * @returns Computed hash as a hexadecimal string + */ +export declare function xxhash32(data: IDataType, seed?: number): Promise; +/** + * Creates a new xxHash32 hash instance + * @param data Input data (string, Buffer or TypedArray) + * @param seed Number used to initialize the internal state of the algorithm (defaults to 0) + */ +export declare function createXXHash32(seed?: number): Promise; diff --git a/frontend/node_modules/hash-wasm/dist/lib/xxhash64.d.ts b/frontend/node_modules/hash-wasm/dist/lib/xxhash64.d.ts new file mode 100644 index 0000000..b8ee688 --- /dev/null +++ b/frontend/node_modules/hash-wasm/dist/lib/xxhash64.d.ts @@ -0,0 +1,20 @@ +import { type IHasher } from "./WASMInterface"; +import type { IDataType } from "./util"; +/** + * Calculates xxHash64 hash + * @param data Input data (string, Buffer or TypedArray) + * @param seedLow Lower 32 bits of the number used to + * initialize the internal state of the algorithm (defaults to 0) + * @param seedHigh Higher 32 bits of the number used to + * initialize the internal state of the algorithm (defaults to 0) + * @returns Computed hash as a hexadecimal string + */ +export declare function xxhash64(data: IDataType, seedLow?: number, seedHigh?: number): Promise; +/** + * Creates a new xxHash64 hash instance + * @param seedLow Lower 32 bits of the number used to + * initialize the internal state of the algorithm (defaults to 0) + * @param seedHigh Higher 32 bits of the number used to + * initialize the internal state of the algorithm (defaults to 0) + */ +export declare function createXXHash64(seedLow?: number, seedHigh?: number): Promise; diff --git a/frontend/node_modules/hash-wasm/dist/md4.umd.min.js b/frontend/node_modules/hash-wasm/dist/md4.umd.min.js new file mode 100644 index 0000000..df61434 --- /dev/null +++ b/frontend/node_modules/hash-wasm/dist/md4.umd.min.js @@ -0,0 +1,7 @@ +/*! + * hash-wasm (https://www.npmjs.com/package/hash-wasm) + * (c) Dani Biro + * @license MIT + */ + +!function(A,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports):"function"==typeof define&&define.amd?define(["exports"],e):e((A="undefined"!=typeof globalThis?globalThis:A||self).hashwasm=A.hashwasm||{})}(this,(function(A){"use strict";var e,t={name:"md4",data:"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",hash:"bd8ce7c7"};function n(A,e,t,n){return new(t||(t=Promise))((function(i,o){function B(A){try{a(n.next(A))}catch(A){o(A)}}function r(A){try{a(n.throw(A))}catch(A){o(A)}}function a(A){var e;A.done?i(A.value):(e=A.value,e instanceof t?e:new t((function(A){A(e)}))).then(B,r)}a((n=n.apply(A,e||[])).next())}))}"function"==typeof SuppressedError&&SuppressedError;class i{constructor(){this.mutex=Promise.resolve()}lock(){let A=()=>{};return this.mutex=this.mutex.then((()=>new Promise(A))),new Promise((e=>{A=e}))}dispatch(A){return n(this,void 0,void 0,(function*(){const e=yield this.lock();try{return yield Promise.resolve(A())}finally{e()}}))}}const o="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:global,B=null!==(e=o.Buffer)&&void 0!==e?e:null,r=o.TextEncoder?new o.TextEncoder:null;function a(A,e){return(15&A)+(A>>6|A>>3&8)<<4|(15&e)+(e>>6|e>>3&8)}const I="a".charCodeAt(0)-10,g="0".charCodeAt(0);function E(A,e,t){let n=0;for(let i=0;i>>4;A[n++]=t>9?t+I:t+g,t=15&e[i],A[n++]=t>9?t+I:t+g}return String.fromCharCode.apply(null,A)}const Q=null!==B?A=>{if("string"==typeof A){const e=B.from(A,"utf8");return new Uint8Array(e.buffer,e.byteOffset,e.length)}if(B.isBuffer(A))return new Uint8Array(A.buffer,A.byteOffset,A.length);if(ArrayBuffer.isView(A))return new Uint8Array(A.buffer,A.byteOffset,A.byteLength);throw new Error("Invalid data type!")}:A=>{if("string"==typeof A)return r.encode(A);if(ArrayBuffer.isView(A))return new Uint8Array(A.buffer,A.byteOffset,A.byteLength);throw new Error("Invalid data type!")},c="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",s=new Uint8Array(256);for(let A=0;A>4,i+=1,n[i]=(15&o)<<4|B>>2,i+=1,n[i]=(3&B)<<6|63&r,i+=1}return n}const h=16384,l=new i,y=new Map;function d(A,e){return n(this,void 0,void 0,(function*(){let t=null,i=null,o=!1;if("undefined"==typeof WebAssembly)throw new Error("WebAssembly is not supported in this environment!");const B=()=>new DataView(t.exports.memory.buffer).getUint32(t.exports.STATE_SIZE,!0),r=l.dispatch((()=>n(this,void 0,void 0,(function*(){if(!y.has(A.name)){const e=f(A.data),t=WebAssembly.compile(e);y.set(A.name,t)}const e=yield y.get(A.name);t=yield WebAssembly.instantiate(e,{})})))),I=(A=null)=>{o=!0,t.exports.Hash_Init(A)},g=A=>{if(!o)throw new Error("update() called before init()");(A=>{let e=0;for(;e{if(!o)throw new Error("digest() called before init()");return o=!1,t.exports.Hash_Final(n),"binary"===A?i.slice(0,e):E(c,i,e)},d=A=>"string"==typeof A?A.length<4096:A.byteLength!0;break;case"blake2b":case"blake2s":C=(A,e)=>e<=512&&d(A);break;case"blake3":C=(A,e)=>0===e&&d(A);break;case"xxhash64":case"xxhash3":case"xxhash128":case"crc64":C=()=>!1}return yield(()=>n(this,void 0,void 0,(function*(){t||(yield r);const A=t.exports.Hash_GetBuffer(),e=t.exports.memory.buffer;i=new Uint8Array(e,A,h)})))(),{getMemory:()=>i,writeMemory:(A,e=0)=>{i.set(A,e)},getExports:()=>t.exports,setMemorySize:A=>{t.exports.Hash_SetMemorySize(A);const e=t.exports.Hash_GetBuffer(),n=t.exports.memory.buffer;i=new Uint8Array(n,e,A)},init:I,update:g,digest:s,save:()=>{if(!o)throw new Error("save() can only be called after init() and before digest()");const e=t.exports.Hash_GetState(),n=B(),i=t.exports.memory.buffer,r=new Uint8Array(i,e,n),I=new Uint8Array(4+n);return function(A,e){const t=e.length>>1;for(let n=0;n{if(!(e instanceof Uint8Array))throw new Error("load() expects an Uint8Array generated by save()");const n=t.exports.Hash_GetState(),i=B(),r=4+i,I=t.exports.memory.buffer;if(e.length!==r)throw new Error(`Bad state length (expected ${r} bytes, got ${e.length})`);if(!function(A,e){if(A.length!==2*e.length)return!1;for(let t=0;t{if(!C(A,n))return I(n),g(A),s("hex",o);const B=Q(A);return i.set(B),t.exports.Hash_Calculate(B.length,n,o),E(c,i,e)},hashLength:e}}))}const C=new i;let u=null;A.createMD4=function(){return d(t,16).then((A=>{A.init();const e={init:()=>(A.init(),e),update:t=>(A.update(t),e),digest:e=>A.digest(e),save:()=>A.save(),load:t=>(A.load(t),e),blockSize:64,digestSize:16};return e}))},A.md4=function(A){if(null===u)return function(A,e,t){return n(this,void 0,void 0,(function*(){const n=yield A.lock(),i=yield d(e,t);return n(),i}))}(C,t,16).then((e=>(u=e,u.calculate(A))));try{const e=u.calculate(A);return Promise.resolve(e)}catch(A){return Promise.reject(A)}}})); diff --git a/frontend/node_modules/hash-wasm/dist/md5.umd.min.js b/frontend/node_modules/hash-wasm/dist/md5.umd.min.js new file mode 100644 index 0000000..b4fd4eb --- /dev/null +++ b/frontend/node_modules/hash-wasm/dist/md5.umd.min.js @@ -0,0 +1,7 @@ +/*! + * hash-wasm (https://www.npmjs.com/package/hash-wasm) + * (c) Dani Biro + * @license MIT + */ + +!function(A,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports):"function"==typeof define&&define.amd?define(["exports"],e):e((A="undefined"!=typeof globalThis?globalThis:A||self).hashwasm=A.hashwasm||{})}(this,(function(A){"use strict";var e,B={name:"md5",data:"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",hash:"e6508e4b"};function t(A,e,B,t){return new(B||(B=Promise))((function(i,I){function o(A){try{n(t.next(A))}catch(A){I(A)}}function a(A){try{n(t.throw(A))}catch(A){I(A)}}function n(A){var e;A.done?i(A.value):(e=A.value,e instanceof B?e:new B((function(A){A(e)}))).then(o,a)}n((t=t.apply(A,e||[])).next())}))}"function"==typeof SuppressedError&&SuppressedError;class i{constructor(){this.mutex=Promise.resolve()}lock(){let A=()=>{};return this.mutex=this.mutex.then((()=>new Promise(A))),new Promise((e=>{A=e}))}dispatch(A){return t(this,void 0,void 0,(function*(){const e=yield this.lock();try{return yield Promise.resolve(A())}finally{e()}}))}}const I="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:global,o=null!==(e=I.Buffer)&&void 0!==e?e:null,a=I.TextEncoder?new I.TextEncoder:null;function n(A,e){return(15&A)+(A>>6|A>>3&8)<<4|(15&e)+(e>>6|e>>3&8)}const g="a".charCodeAt(0)-10,Q="0".charCodeAt(0);function E(A,e,B){let t=0;for(let i=0;i>>4;A[t++]=B>9?B+g:B+Q,B=15&e[i],A[t++]=B>9?B+g:B+Q}return String.fromCharCode.apply(null,A)}const r=null!==o?A=>{if("string"==typeof A){const e=o.from(A,"utf8");return new Uint8Array(e.buffer,e.byteOffset,e.length)}if(o.isBuffer(A))return new Uint8Array(A.buffer,A.byteOffset,A.length);if(ArrayBuffer.isView(A))return new Uint8Array(A.buffer,A.byteOffset,A.byteLength);throw new Error("Invalid data type!")}:A=>{if("string"==typeof A)return a.encode(A);if(ArrayBuffer.isView(A))return new Uint8Array(A.buffer,A.byteOffset,A.byteLength);throw new Error("Invalid data type!")},c="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",s=new Uint8Array(256);for(let A=0;A>4,i+=1,t[i]=(15&I)<<4|o>>2,i+=1,t[i]=(3&o)<<6|63&a,i+=1}return t}const h=16384,f=new i,l=new Map;function p(A,e){return t(this,void 0,void 0,(function*(){let B=null,i=null,I=!1;if("undefined"==typeof WebAssembly)throw new Error("WebAssembly is not supported in this environment!");const o=()=>new DataView(B.exports.memory.buffer).getUint32(B.exports.STATE_SIZE,!0),a=f.dispatch((()=>t(this,void 0,void 0,(function*(){if(!l.has(A.name)){const e=C(A.data),B=WebAssembly.compile(e);l.set(A.name,B)}const e=yield l.get(A.name);B=yield WebAssembly.instantiate(e,{})})))),g=(A=null)=>{I=!0,B.exports.Hash_Init(A)},Q=A=>{if(!I)throw new Error("update() called before init()");(A=>{let e=0;for(;e{if(!I)throw new Error("digest() called before init()");return I=!1,B.exports.Hash_Final(t),"binary"===A?i.slice(0,e):E(c,i,e)},p=A=>"string"==typeof A?A.length<4096:A.byteLength!0;break;case"blake2b":case"blake2s":y=(A,e)=>e<=512&&p(A);break;case"blake3":y=(A,e)=>0===e&&p(A);break;case"xxhash64":case"xxhash3":case"xxhash128":case"crc64":y=()=>!1}return yield(()=>t(this,void 0,void 0,(function*(){B||(yield a);const A=B.exports.Hash_GetBuffer(),e=B.exports.memory.buffer;i=new Uint8Array(e,A,h)})))(),{getMemory:()=>i,writeMemory:(A,e=0)=>{i.set(A,e)},getExports:()=>B.exports,setMemorySize:A=>{B.exports.Hash_SetMemorySize(A);const e=B.exports.Hash_GetBuffer(),t=B.exports.memory.buffer;i=new Uint8Array(t,e,A)},init:g,update:Q,digest:s,save:()=>{if(!I)throw new Error("save() can only be called after init() and before digest()");const e=B.exports.Hash_GetState(),t=o(),i=B.exports.memory.buffer,a=new Uint8Array(i,e,t),g=new Uint8Array(4+t);return function(A,e){const B=e.length>>1;for(let t=0;t{if(!(e instanceof Uint8Array))throw new Error("load() expects an Uint8Array generated by save()");const t=B.exports.Hash_GetState(),i=o(),a=4+i,g=B.exports.memory.buffer;if(e.length!==a)throw new Error(`Bad state length (expected ${a} bytes, got ${e.length})`);if(!function(A,e){if(A.length!==2*e.length)return!1;for(let B=0;B{if(!y(A,t))return g(t),Q(A),s("hex",I);const o=r(A);return i.set(o),B.exports.Hash_Calculate(o.length,t,I),E(c,i,e)},hashLength:e}}))}const y=new i;let q=null;A.createMD5=function(){return p(B,16).then((A=>{A.init();const e={init:()=>(A.init(),e),update:B=>(A.update(B),e),digest:e=>A.digest(e),save:()=>A.save(),load:B=>(A.load(B),e),blockSize:64,digestSize:16};return e}))},A.md5=function(A){if(null===q)return function(A,e,B){return t(this,void 0,void 0,(function*(){const t=yield A.lock(),i=yield p(e,B);return t(),i}))}(y,B,16).then((e=>(q=e,q.calculate(A))));try{const e=q.calculate(A);return Promise.resolve(e)}catch(A){return Promise.reject(A)}}})); diff --git a/frontend/node_modules/hash-wasm/dist/pbkdf2.umd.min.js b/frontend/node_modules/hash-wasm/dist/pbkdf2.umd.min.js new file mode 100644 index 0000000..550aa28 --- /dev/null +++ b/frontend/node_modules/hash-wasm/dist/pbkdf2.umd.min.js @@ -0,0 +1,7 @@ +/*! + * hash-wasm (https://www.npmjs.com/package/hash-wasm) + * (c) Dani Biro + * @license MIT + */ + +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).hashwasm=e.hashwasm||{})}(this,(function(e){"use strict";function t(e,t,n,r){return new(n||(n=Promise))((function(i,o){function u(e){try{f(r.next(e))}catch(e){o(e)}}function a(e){try{f(r.throw(e))}catch(e){o(e)}}function f(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(u,a)}f((r=r.apply(e,t||[])).next())}))}var n;"function"==typeof SuppressedError&&SuppressedError;const r="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:global,i=null!==(n=r.Buffer)&&void 0!==n?n:null,o=r.TextEncoder?new r.TextEncoder:null,u="a".charCodeAt(0)-10,a="0".charCodeAt(0);const f=null!==i?e=>{if("string"==typeof e){const t=i.from(e,"utf8");return new Uint8Array(t.buffer,t.byteOffset,t.length)}if(i.isBuffer(e))return new Uint8Array(e.buffer,e.byteOffset,e.length);if(ArrayBuffer.isView(e))return new Uint8Array(e.buffer,e.byteOffset,e.byteLength);throw new Error("Invalid data type!")}:e=>{if("string"==typeof e)return o.encode(e);if(ArrayBuffer.isView(e))return new Uint8Array(e.buffer,e.byteOffset,e.byteLength);throw new Error("Invalid data type!")},s="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",d=new Uint8Array(256);for(let e=0;en){e.update(r);const t=e.digest("binary");return e.init(),t}return new Uint8Array(r.buffer,r.byteOffset,r.length)}(e,t),i=new Uint8Array(n);i.set(r);const o=new Uint8Array(n);for(let e=0;e(e.init(),e.update(i),u),update:t=>(e.update(t),u),digest:t=>{const n=e.digest("binary");return e.init(),e.update(o),e.update(n),e.digest(t)},save:()=>{throw new Error("save() not supported")},load:()=>{throw new Error("load() not supported")},blockSize:e.blockSize,digestSize:e.digestSize};return u}function h(e,n,r,i,o){return t(this,void 0,void 0,(function*(){const t=new Uint8Array(i),s=new Uint8Array(n.length+4),d=new DataView(s.buffer),l=f(n),h=new Uint8Array(l.buffer,l.byteOffset,l.length);s.set(h);let p=0;const c=e.digestSize,y=Math.ceil(i/c);let w=null,b=null;for(let o=1;o<=y;o++){d.setUint32(n.length,o),e.init(),e.update(s),w=e.digest("binary"),b=w.slice();for(let t=1;t>>4;e[r++]=n>9?n+u:n+a,n=15&t[i],e[r++]=n>9?n+u:n+a}return String.fromCharCode.apply(null,e)}(new Uint8Array(2*i),t,i)}))}e.pbkdf2=function(e){return t(this,void 0,void 0,(function*(){(e=>{if(!e||"object"!=typeof e)throw new Error("Invalid options parameter. It requires an object.");if(!e.hashFunction||!e.hashFunction.then)throw new Error('Invalid hash function is provided! Usage: pbkdf2("password", "salt", 1000, 32, createSHA1()).');if(!Number.isInteger(e.iterations)||e.iterations<1)throw new Error("Iterations should be a positive number");if(!Number.isInteger(e.hashLength)||e.hashLength<1)throw new Error("Hash length should be a positive number");if(void 0===e.outputType&&(e.outputType="hex"),!["hex","binary"].includes(e.outputType))throw new Error(`Insupported output type ${e.outputType}. Valid values: ['hex', 'binary']`)})(e);return h(yield function(e,t){if(!e||!e.then)throw new Error('Invalid hash function is provided! Usage: createHMAC(createMD5(), "key").');return e.then((e=>l(e,t)))}(e.hashFunction,e.password),e.salt,e.iterations,e.hashLength,e.outputType)}))}})); diff --git a/frontend/node_modules/hash-wasm/dist/ripemd160.umd.min.js b/frontend/node_modules/hash-wasm/dist/ripemd160.umd.min.js new file mode 100644 index 0000000..6ed0d73 --- /dev/null +++ b/frontend/node_modules/hash-wasm/dist/ripemd160.umd.min.js @@ -0,0 +1,7 @@ +/*! + * hash-wasm (https://www.npmjs.com/package/hash-wasm) + * (c) Dani Biro + * @license MIT + */ + +!function(A,I){"object"==typeof exports&&"undefined"!=typeof module?I(exports):"function"==typeof define&&define.amd?define(["exports"],I):I((A="undefined"!=typeof globalThis?globalThis:A||self).hashwasm=A.hashwasm||{})}(this,(function(A){"use strict";var I,B={name:"ripemd160",data:"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",hash:"6abbce74"};function i(A,I,B,i){return new(B||(B=Promise))((function(a,g){function Q(A){try{c(i.next(A))}catch(A){g(A)}}function e(A){try{c(i.throw(A))}catch(A){g(A)}}function c(A){var I;A.done?a(A.value):(I=A.value,I instanceof B?I:new B((function(A){A(I)}))).then(Q,e)}c((i=i.apply(A,I||[])).next())}))}"function"==typeof SuppressedError&&SuppressedError;class a{constructor(){this.mutex=Promise.resolve()}lock(){let A=()=>{};return this.mutex=this.mutex.then((()=>new Promise(A))),new Promise((I=>{A=I}))}dispatch(A){return i(this,void 0,void 0,(function*(){const I=yield this.lock();try{return yield Promise.resolve(A())}finally{I()}}))}}const g="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:global,Q=null!==(I=g.Buffer)&&void 0!==I?I:null,e=g.TextEncoder?new g.TextEncoder:null;function c(A,I){return(15&A)+(A>>6|A>>3&8)<<4|(15&I)+(I>>6|I>>3&8)}const n="a".charCodeAt(0)-10,o="0".charCodeAt(0);function t(A,I,B){let i=0;for(let a=0;a>>4;A[i++]=B>9?B+n:B+o,B=15&I[a],A[i++]=B>9?B+n:B+o}return String.fromCharCode.apply(null,A)}const E=null!==Q?A=>{if("string"==typeof A){const I=Q.from(A,"utf8");return new Uint8Array(I.buffer,I.byteOffset,I.length)}if(Q.isBuffer(A))return new Uint8Array(A.buffer,A.byteOffset,A.length);if(ArrayBuffer.isView(A))return new Uint8Array(A.buffer,A.byteOffset,A.byteLength);throw new Error("Invalid data type!")}:A=>{if("string"==typeof A)return e.encode(A);if(ArrayBuffer.isView(A))return new Uint8Array(A.buffer,A.byteOffset,A.byteLength);throw new Error("Invalid data type!")},d="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",r=new Uint8Array(256);for(let A=0;A>4,a+=1,i[a]=(15&g)<<4|Q>>2,a+=1,i[a]=(3&Q)<<6|63&e,a+=1}return i}const p=16384,y=new a,q=new Map;function F(A,I){return i(this,void 0,void 0,(function*(){let B=null,a=null,g=!1;if("undefined"==typeof WebAssembly)throw new Error("WebAssembly is not supported in this environment!");const Q=()=>new DataView(B.exports.memory.buffer).getUint32(B.exports.STATE_SIZE,!0),e=y.dispatch((()=>i(this,void 0,void 0,(function*(){if(!q.has(A.name)){const I=h(A.data),B=WebAssembly.compile(I);q.set(A.name,B)}const I=yield q.get(A.name);B=yield WebAssembly.instantiate(I,{})})))),n=(A=null)=>{g=!0,B.exports.Hash_Init(A)},o=A=>{if(!g)throw new Error("update() called before init()");(A=>{let I=0;for(;I{if(!g)throw new Error("digest() called before init()");return g=!1,B.exports.Hash_Final(i),"binary"===A?a.slice(0,I):t(d,a,I)},F=A=>"string"==typeof A?A.length<4096:A.byteLength!0;break;case"blake2b":case"blake2s":C=(A,I)=>I<=512&&F(A);break;case"blake3":C=(A,I)=>0===I&&F(A);break;case"xxhash64":case"xxhash3":case"xxhash128":case"crc64":C=()=>!1}return yield(()=>i(this,void 0,void 0,(function*(){B||(yield e);const A=B.exports.Hash_GetBuffer(),I=B.exports.memory.buffer;a=new Uint8Array(I,A,p)})))(),{getMemory:()=>a,writeMemory:(A,I=0)=>{a.set(A,I)},getExports:()=>B.exports,setMemorySize:A=>{B.exports.Hash_SetMemorySize(A);const I=B.exports.Hash_GetBuffer(),i=B.exports.memory.buffer;a=new Uint8Array(i,I,A)},init:n,update:o,digest:r,save:()=>{if(!g)throw new Error("save() can only be called after init() and before digest()");const I=B.exports.Hash_GetState(),i=Q(),a=B.exports.memory.buffer,e=new Uint8Array(a,I,i),n=new Uint8Array(4+i);return function(A,I){const B=I.length>>1;for(let i=0;i{if(!(I instanceof Uint8Array))throw new Error("load() expects an Uint8Array generated by save()");const i=B.exports.Hash_GetState(),a=Q(),e=4+a,n=B.exports.memory.buffer;if(I.length!==e)throw new Error(`Bad state length (expected ${e} bytes, got ${I.length})`);if(!function(A,I){if(A.length!==2*I.length)return!1;for(let B=0;B{if(!C(A,i))return n(i),o(A),r("hex",g);const Q=E(A);return a.set(Q),B.exports.Hash_Calculate(Q.length,i,g),t(d,a,I)},hashLength:I}}))}const C=new a;let f=null;A.createRIPEMD160=function(){return F(B,20).then((A=>{A.init();const I={init:()=>(A.init(),I),update:B=>(A.update(B),I),digest:I=>A.digest(I),save:()=>A.save(),load:B=>(A.load(B),I),blockSize:64,digestSize:20};return I}))},A.ripemd160=function(A){if(null===f)return function(A,I,B){return i(this,void 0,void 0,(function*(){const i=yield A.lock(),a=yield F(I,B);return i(),a}))}(C,B,20).then((I=>(f=I,f.calculate(A))));try{const I=f.calculate(A);return Promise.resolve(I)}catch(A){return Promise.reject(A)}}})); diff --git a/frontend/node_modules/hash-wasm/dist/scrypt.umd.min.js b/frontend/node_modules/hash-wasm/dist/scrypt.umd.min.js new file mode 100644 index 0000000..2e86069 --- /dev/null +++ b/frontend/node_modules/hash-wasm/dist/scrypt.umd.min.js @@ -0,0 +1,7 @@ +/*! + * hash-wasm (https://www.npmjs.com/package/hash-wasm) + * (c) Dani Biro + * @license MIT + */ + +!function(A,I){"object"==typeof exports&&"undefined"!=typeof module?I(exports):"function"==typeof define&&define.amd?define(["exports"],I):I((A="undefined"!=typeof globalThis?globalThis:A||self).hashwasm=A.hashwasm||{})}(this,(function(A){"use strict";function I(A,I,g,B){return new(g||(g=Promise))((function(E,i){function Q(A){try{d(B.next(A))}catch(A){i(A)}}function c(A){try{d(B.throw(A))}catch(A){i(A)}}function d(A){var I;A.done?E(A.value):(I=A.value,I instanceof g?I:new g((function(A){A(I)}))).then(Q,c)}d((B=B.apply(A,I||[])).next())}))}"function"==typeof SuppressedError&&SuppressedError;var g,B={name:"scrypt",data:"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cyICajYCOCAAIAAoAjwgAiAKakESdyAGc2o2AjwLvxIDFX8Bfg5/AkAgAkUNACAAQQd0IgNBQGoiBEEAKAKACCIFIAMgAmwiBmogAyABbGoiByADaiIIaiEJIAAgAkEHdCIKIAFBB3RqIgtsIQwgACALQYABamwhDSAAQQV0IgtBASALQQFLGyILQWBxIQ4gC0EBcSEPIAdBeGohECAHQXBqIREgB0FoaiESIAdBYGohEyAHQVhqIRQgB0FQaiEVIAdBSGohFiAHQUBqIRcgAa1Cf3whGCAEIAdqIRkgByAAQQh0IhpqIRsgACAKQYABamwhHCALQQRJIR1BACEeQQAhHwNAQQAoAoAIIiAgAyAfbGohIQJAIABFDQBBACEiAkAgHQ0AICAgHmohI0EAIQtBACEiA0AgByALaiIEICMgC2oiJCgCADYCACAEQQRqICRBBGooAgA2AgAgBEEIaiAkQQhqKAIANgIAIARBDGogJEEMaigCADYCACALQRBqIQsgDiAiQQRqIiJHDQALCyAPRQ0AIAcgIkECdCILaiAhIAtqKAIANgIACwJAIAFFDQBBACElIBwhIyAGISYDQCAFISQgACEiAkACQCAADQAgGyAXKQMANwMAIBsgFikDADcDCCAbIBUpAwA3AxAgGyAUKQMANwMYIBsgEykDADcDICAbIBIpAwA3AyggGyARKQMANwMwIBsgECkDADcDOAwBCwNAICQgJmoiCyAkIAxqIgQpAwA3AwAgC0EIaiAEQQhqKQMANwMAIAtBEGogBEEQaikDADcDACALQRhqIARBGGopAwA3AwAgC0EgaiAEQSBqKQMANwMAIAtBKGogBEEoaikDADcDACALQTBqIARBMGopAwA3AwAgC0E4aiAEQThqKQMANwMAIAtBwABqIARBwABqKQMANwMAIAtByABqIARByABqKQMANwMAIAtB0ABqIARB0ABqKQMANwMAIAtB2ABqIARB2ABqKQMANwMAIAtB4ABqIARB4ABqKQMANwMAIAtB6ABqIARB6ABqKQMANwMAIAtB8ABqIARB8ABqKQMANwMAIAtB+ABqIARB+ABqKQMANwMAICRBgAFqISQgIkF/aiIiDQALIAcgCCAbIAAQAiAFISQgACEiA0AgJCAjaiILICQgDWoiBCkDADcDACALQQhqIARBCGopAwA3AwAgC0EQaiAEQRBqKQMANwMAIAtBGGogBEEYaikDADcDACALQSBqIARBIGopAwA3AwAgC0EoaiAEQShqKQMANwMAIAtBMGogBEEwaikDADcDACALQThqIARBOGopAwA3AwAgC0HAAGogBEHAAGopAwA3AwAgC0HIAGogBEHIAGopAwA3AwAgC0HQAGogBEHQAGopAwA3AwAgC0HYAGogBEHYAGopAwA3AwAgC0HgAGogBEHgAGopAwA3AwAgC0HoAGogBEHoAGopAwA3AwAgC0HwAGogBEHwAGopAwA3AwAgC0H4AGogBEH4AGopAwA3AwAgJEGAAWohJCAiQX9qIiINAAsLIAggByAbIAAQAiAjIBpqISMgJiAaaiEmICVBAmoiJSABSQ0AC0EAISUDQAJAAkAgAA0AIBsgFykDADcDACAbIBYpAwA3AwggGyAVKQMANwMQIBsgFCkDADcDGCAbIBMpAwA3AyAgGyASKQMANwMoIBsgESkDADcDMCAbIBApAwA3AzgMAQsgACAKIBkpAgAgGIOnQQd0amwhJiAFISQgACEiA0AgJCAMaiILIAspAwAgJCAmaiIEKQMAhTcDACALQQhqIiMgIykDACAEQQhqKQMAhTcDACALQRBqIiMgIykDACAEQRBqKQMAhTcDACALQRhqIiMgIykDACAEQRhqKQMAhTcDACALQSBqIiMgIykDACAEQSBqKQMAhTcDACALQShqIiMgIykDACAEQShqKQMAhTcDACALQTBqIiMgIykDACAEQTBqKQMAhTcDACALQThqIiMgIykDACAEQThqKQMAhTcDACALQcAAaiIjICMpAwAgBEHAAGopAwCFNwMAIAtByABqIiMgIykDACAEQcgAaikDAIU3AwAgC0HQAGoiIyAjKQMAIARB0ABqKQMAhTcDACALQdgAaiIjICMpAwAgBEHYAGopAwCFNwMAIAtB4ABqIiMgIykDACAEQeAAaikDAIU3AwAgC0HoAGoiIyAjKQMAIARB6ABqKQMAhTcDACALQfAAaiIjICMpAwAgBEHwAGopAwCFNwMAIAtB+ABqIgsgCykDACAEQfgAaikDAIU3AwAgJEGAAWohJCAiQX9qIiINAAsgByAIIBsgABACIAAgCiAJKQIAIBiDp0EHdGpsISYgBSEkIAAhIgNAICQgDWoiCyALKQMAICQgJmoiBCkDAIU3AwAgC0EIaiIjICMpAwAgBEEIaikDAIU3AwAgC0EQaiIjICMpAwAgBEEQaikDAIU3AwAgC0EYaiIjICMpAwAgBEEYaikDAIU3AwAgC0EgaiIjICMpAwAgBEEgaikDAIU3AwAgC0EoaiIjICMpAwAgBEEoaikDAIU3AwAgC0EwaiIjICMpAwAgBEEwaikDAIU3AwAgC0E4aiIjICMpAwAgBEE4aikDAIU3AwAgC0HAAGoiIyAjKQMAIARBwABqKQMAhTcDACALQcgAaiIjICMpAwAgBEHIAGopAwCFNwMAIAtB0ABqIiMgIykDACAEQdAAaikDAIU3AwAgC0HYAGoiIyAjKQMAIARB2ABqKQMAhTcDACALQeAAaiIjICMpAwAgBEHgAGopAwCFNwMAIAtB6ABqIiMgIykDACAEQegAaikDAIU3AwAgC0HwAGoiIyAjKQMAIARB8ABqKQMAhTcDACALQfgAaiILIAspAwAgBEH4AGopAwCFNwMAICRBgAFqISQgIkF/aiIiDQALCyAIIAcgGyAAEAIgJUECaiIlIAFJDQALCwJAIABFDQBBACEiAkAgHQ0AICAgHmohI0EAIQtBACEiA0AgIyALaiIEIAcgC2oiJCgCADYCACAEQQRqICRBBGooAgA2AgAgBEEIaiAkQQhqKAIANgIAIARBDGogJEEMaigCADYCACALQRBqIQsgDiAiQQRqIiJHDQALCyAPRQ0AICEgIkECdCILaiAHIAtqKAIANgIACyAeIANqIR4gH0EBaiIfIAJHDQALCws=",hash:"b32721f8"};class E{constructor(){this.mutex=Promise.resolve()}lock(){let A=()=>{};return this.mutex=this.mutex.then((()=>new Promise(A))),new Promise((I=>{A=I}))}dispatch(A){return I(this,void 0,void 0,(function*(){const I=yield this.lock();try{return yield Promise.resolve(A())}finally{I()}}))}}const i="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:global,Q=null!==(g=i.Buffer)&&void 0!==g?g:null,c=i.TextEncoder?new i.TextEncoder:null;function d(A,I){return(15&A)+(A>>6|A>>3&8)<<4|(15&I)+(I>>6|I>>3&8)}const C="a".charCodeAt(0)-10,o="0".charCodeAt(0);function a(A,I,g){let B=0;for(let E=0;E>>4;A[B++]=g>9?g+C:g+o,g=15&I[E],A[B++]=g>9?g+C:g+o}return String.fromCharCode.apply(null,A)}const n=null!==Q?A=>{if("string"==typeof A){const I=Q.from(A,"utf8");return new Uint8Array(I.buffer,I.byteOffset,I.length)}if(Q.isBuffer(A))return new Uint8Array(A.buffer,A.byteOffset,A.length);if(ArrayBuffer.isView(A))return new Uint8Array(A.buffer,A.byteOffset,A.byteLength);throw new Error("Invalid data type!")}:A=>{if("string"==typeof A)return c.encode(A);if(ArrayBuffer.isView(A))return new Uint8Array(A.buffer,A.byteOffset,A.byteLength);throw new Error("Invalid data type!")},e="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",t=new Uint8Array(256);for(let A=0;A>4,E+=1,B[E]=(15&i)<<4|Q>>2,E+=1,B[E]=(3&Q)<<6|63&c,E+=1}return B}const D=16384,N=new E,r=new Map;function M(A,g){return I(this,void 0,void 0,(function*(){let B=null,E=null,i=!1;if("undefined"==typeof WebAssembly)throw new Error("WebAssembly is not supported in this environment!");const Q=()=>new DataView(B.exports.memory.buffer).getUint32(B.exports.STATE_SIZE,!0),c=N.dispatch((()=>I(this,void 0,void 0,(function*(){if(!r.has(A.name)){const I=y(A.data),g=WebAssembly.compile(I);r.set(A.name,g)}const I=yield r.get(A.name);B=yield WebAssembly.instantiate(I,{})})))),C=(A=null)=>{i=!0,B.exports.Hash_Init(A)},o=A=>{if(!i)throw new Error("update() called before init()");(A=>{let I=0;for(;I{if(!i)throw new Error("digest() called before init()");return i=!1,B.exports.Hash_Final(I),"binary"===A?E.slice(0,g):a(e,E,g)},M=A=>"string"==typeof A?A.length<4096:A.byteLength!0;break;case"blake2b":case"blake2s":h=(A,I)=>I<=512&&M(A);break;case"blake3":h=(A,I)=>0===I&&M(A);break;case"xxhash64":case"xxhash3":case"xxhash128":case"crc64":h=()=>!1}return yield(()=>I(this,void 0,void 0,(function*(){B||(yield c);const A=B.exports.Hash_GetBuffer(),I=B.exports.memory.buffer;E=new Uint8Array(I,A,D)})))(),{getMemory:()=>E,writeMemory:(A,I=0)=>{E.set(A,I)},getExports:()=>B.exports,setMemorySize:A=>{B.exports.Hash_SetMemorySize(A);const I=B.exports.Hash_GetBuffer(),g=B.exports.memory.buffer;E=new Uint8Array(g,I,A)},init:C,update:o,digest:t,save:()=>{if(!i)throw new Error("save() can only be called after init() and before digest()");const I=B.exports.Hash_GetState(),g=Q(),E=B.exports.memory.buffer,c=new Uint8Array(E,I,g),C=new Uint8Array(4+g);return function(A,I){const g=I.length>>1;for(let B=0;B{if(!(I instanceof Uint8Array))throw new Error("load() expects an Uint8Array generated by save()");const g=B.exports.Hash_GetState(),E=Q(),c=4+E,C=B.exports.memory.buffer;if(I.length!==c)throw new Error(`Bad state length (expected ${c} bytes, got ${I.length})`);if(!function(A,I){if(A.length!==2*I.length)return!1;for(let g=0;g{if(!h(A,I))return C(I),o(A),t("hex",i);const Q=n(A);return E.set(Q),B.exports.Hash_Calculate(Q.length,I,i),a(e,E,g)},hashLength:g}}))}function h(A,I){A.init();const{blockSize:g}=A,B=function(A,I){const{blockSize:g}=A,B=n(I);if(B.length>g){A.update(B);const I=A.digest("binary");return A.init(),I}return new Uint8Array(B.buffer,B.byteOffset,B.length)}(A,I),E=new Uint8Array(g);E.set(B);const i=new Uint8Array(g);for(let A=0;A(A.init(),A.update(E),Q),update:I=>(A.update(I),Q),digest:I=>{const g=A.digest("binary");return A.init(),A.update(i),A.update(g),A.digest(I)},save:()=>{throw new Error("save() not supported")},load:()=>{throw new Error("load() not supported")},blockSize:A.blockSize,digestSize:A.digestSize};return Q}function q(A){return I(this,void 0,void 0,(function*(){(A=>{if(!A||"object"!=typeof A)throw new Error("Invalid options parameter. It requires an object.");if(!A.hashFunction||!A.hashFunction.then)throw new Error('Invalid hash function is provided! Usage: pbkdf2("password", "salt", 1000, 32, createSHA1()).');if(!Number.isInteger(A.iterations)||A.iterations<1)throw new Error("Iterations should be a positive number");if(!Number.isInteger(A.hashLength)||A.hashLength<1)throw new Error("Hash length should be a positive number");if(void 0===A.outputType&&(A.outputType="hex"),!["hex","binary"].includes(A.outputType))throw new Error(`Insupported output type ${A.outputType}. Valid values: ['hex', 'binary']`)})(A);return function(A,g,B,E,i){return I(this,void 0,void 0,(function*(){const I=new Uint8Array(E),Q=new Uint8Array(g.length+4),c=new DataView(Q.buffer),d=n(g),C=new Uint8Array(d.buffer,d.byteOffset,d.length);Q.set(C);let o=0;const e=A.digestSize,t=Math.ceil(E/e);let y=null,D=null;for(let i=1;i<=t;i++){c.setUint32(g.length,i),A.init(),A.update(Q),y=A.digest("binary"),D=y.slice();for(let I=1;Ih(A,I)))}(A.hashFunction,A.password),A.salt,A.iterations,A.hashLength,A.outputType)}))}var p={name:"sha256",data:"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c2pBx6KerX1qIhkgASADcyACcSABIANxcyABQR53IAFBE3dzIAFBCndzaiAaaiICaiIJIBMgEnNxIBJzaiAJQRp3IAlBFXdzIAlBB3dzakHRxqk2aiIaIAIgAXMgA3EgAiABcXMgAkEedyACQRN3cyACQQp3c2ogGGoiA2oiESAJIBNzcSATc2ogEUEadyARQRV3cyARQQd3c2pB59KkoQFqIhggAyACcyABcSADIAJxcyADQR53IANBE3dzIANBCndzaiAUaiIBaiISIBEgCXNxIAlzaiASQRp3IBJBFXdzIBJBB3dzakGFldy9AmoiFCABIANzIAJxIAEgA3FzIAFBHncgAUETd3MgAUEKd3NqIBdqIgJqIhMgI2ogJiASaiAiIBFqICUgCWogEyASIBFzcSARc2ogE0EadyATQRV3cyATQQd3c2pBuMLs8AJqIhcgAiABcyADcSACIAFxcyACQR53IAJBE3dzIAJBCndzaiAZaiIDaiIJIBMgEnNxIBJzaiAJQRp3IAlBFXdzIAlBB3dzakH827HpBGoiGSADIAJzIAFxIAMgAnFzIANBHncgA0ETd3MgA0EKd3NqIBpqIgFqIhEgCSATc3EgE3NqIBFBGncgEUEVd3MgEUEHd3NqQZOa4JkFaiIaIAEgA3MgAnEgASADcXMgAUEedyABQRN3cyABQQp3c2ogGGoiAmoiEiARIAlzcSAJc2ogEkEadyASQRV3cyASQQd3c2pB1OapqAZqIhggAiABcyADcSACIAFxcyACQR53IAJBE3dzIAJBCndzaiAUaiIDaiITaiAoIBJqICQgEWogJyAJaiATIBIgEXNxIBFzaiATQRp3IBNBFXdzIBNBB3dzakG7laizB2oiFCADIAJzIAFxIAMgAnFzIANBHncgA0ETd3MgA0EKd3NqIBdqIgFqIgkgEyASc3EgEnNqIAlBGncgCUEVd3MgCUEHd3NqQa6Si454aiIXIAEgA3MgAnEgASADcXMgAUEedyABQRN3cyABQQp3c2ogGWoiAmoiESAJIBNzcSATc2ogEUEadyARQRV3cyARQQd3c2pBhdnIk3lqIhkgAiABcyADcSACIAFxcyACQR53IAJBE3dzIAJBCndzaiAaaiIDaiISIBEgCXNxIAlzaiASQRp3IBJBFXdzIBJBB3dzakGh0f+VemoiGiADIAJz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",hash:"8c18dd94"};function s(A){return I(this,void 0,void 0,(function*(){const{costFactor:I,blockSize:g,parallelism:E,hashLength:i}=A,Q=M(p,32).then((A=>{A.init(256);const I={init:()=>(A.init(256),I),update:g=>(A.update(g),I),digest:I=>A.digest(I),save:()=>A.save(),load:g=>(A.load(g),I),blockSize:64,digestSize:32};return I})),c=yield q({password:A.password,salt:A.salt,iterations:1,hashLength:128*g*E,hashFunction:Q,outputType:"binary"}),d=yield M(B,0),C=128*g*I,o=256*g;d.setMemorySize(c.length+C+o),d.writeMemory(c,0),d.getExports().scrypt(g,I,E);const n=d.getMemory().subarray(0,128*g*E),e=yield q({password:A.password,salt:n,iterations:1,hashLength:i,hashFunction:Q,outputType:"binary"});if("hex"===A.outputType){return a(new Uint8Array(2*i),e,i)}return e}))}new E;A.scrypt=function(A){return I(this,void 0,void 0,(function*(){return(A=>{if(!A||"object"!=typeof A)throw new Error("Invalid options parameter. It requires an object.");if(!Number.isInteger(A.blockSize)||A.blockSize<1)throw new Error("Block size should be a positive number");if(!Number.isInteger(A.costFactor)||A.costFactor<2||!(I=A.costFactor)||I&I-1)throw new Error("Cost factor should be a power of 2, greater than 1");var I;if(!Number.isInteger(A.parallelism)||A.parallelism<1)throw new Error("Parallelism should be a positive number");if(!Number.isInteger(A.hashLength)||A.hashLength<1)throw new Error("Hash length should be a positive number.");if(void 0===A.outputType&&(A.outputType="hex"),!["hex","binary"].includes(A.outputType))throw new Error(`Insupported output type ${A.outputType}. Valid values: ['hex', 'binary']`)})(A),s(A)}))}})); diff --git a/frontend/node_modules/hash-wasm/dist/sha1.umd.min.js b/frontend/node_modules/hash-wasm/dist/sha1.umd.min.js new file mode 100644 index 0000000..fc1be48 --- /dev/null +++ b/frontend/node_modules/hash-wasm/dist/sha1.umd.min.js @@ -0,0 +1,7 @@ +/*! + * hash-wasm (https://www.npmjs.com/package/hash-wasm) + * (c) Dani Biro + * @license MIT + */ + +!function(A,I){"object"==typeof exports&&"undefined"!=typeof module?I(exports):"function"==typeof define&&define.amd?define(["exports"],I):I((A="undefined"!=typeof globalThis?globalThis:A||self).hashwasm=A.hashwasm||{})}(this,(function(A){"use strict";var I,i={name:"sha1",data:"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",hash:"6b530c24"};function g(A,I,i,g){return new(i||(i=Promise))((function(B,e){function n(A){try{Q(g.next(A))}catch(A){e(A)}}function c(A){try{Q(g.throw(A))}catch(A){e(A)}}function Q(A){var I;A.done?B(A.value):(I=A.value,I instanceof i?I:new i((function(A){A(I)}))).then(n,c)}Q((g=g.apply(A,I||[])).next())}))}"function"==typeof SuppressedError&&SuppressedError;class B{constructor(){this.mutex=Promise.resolve()}lock(){let A=()=>{};return this.mutex=this.mutex.then((()=>new Promise(A))),new Promise((I=>{A=I}))}dispatch(A){return g(this,void 0,void 0,(function*(){const I=yield this.lock();try{return yield Promise.resolve(A())}finally{I()}}))}}const e="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:global,n=null!==(I=e.Buffer)&&void 0!==I?I:null,c=e.TextEncoder?new e.TextEncoder:null;function Q(A,I){return(15&A)+(A>>6|A>>3&8)<<4|(15&I)+(I>>6|I>>3&8)}const t="a".charCodeAt(0)-10,o="0".charCodeAt(0);function a(A,I,i){let g=0;for(let B=0;B>>4;A[g++]=i>9?i+t:i+o,i=15&I[B],A[g++]=i>9?i+t:i+o}return String.fromCharCode.apply(null,A)}const E=null!==n?A=>{if("string"==typeof A){const I=n.from(A,"utf8");return new Uint8Array(I.buffer,I.byteOffset,I.length)}if(n.isBuffer(A))return new Uint8Array(A.buffer,A.byteOffset,A.length);if(ArrayBuffer.isView(A))return new Uint8Array(A.buffer,A.byteOffset,A.byteLength);throw new Error("Invalid data type!")}:A=>{if("string"==typeof A)return c.encode(A);if(ArrayBuffer.isView(A))return new Uint8Array(A.buffer,A.byteOffset,A.byteLength);throw new Error("Invalid data type!")},r="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",d=new Uint8Array(256);for(let A=0;A>4,B+=1,g[B]=(15&e)<<4|n>>2,B+=1,g[B]=(3&n)<<6|63&c,B+=1}return g}const C=16384,h=new B,s=new Map;function F(A,I){return g(this,void 0,void 0,(function*(){let i=null,B=null,e=!1;if("undefined"==typeof WebAssembly)throw new Error("WebAssembly is not supported in this environment!");const n=()=>new DataView(i.exports.memory.buffer).getUint32(i.exports.STATE_SIZE,!0),c=h.dispatch((()=>g(this,void 0,void 0,(function*(){if(!s.has(A.name)){const I=y(A.data),i=WebAssembly.compile(I);s.set(A.name,i)}const I=yield s.get(A.name);i=yield WebAssembly.instantiate(I,{})})))),t=(A=null)=>{e=!0,i.exports.Hash_Init(A)},o=A=>{if(!e)throw new Error("update() called before init()");(A=>{let I=0;for(;I{if(!e)throw new Error("digest() called before init()");return e=!1,i.exports.Hash_Final(g),"binary"===A?B.slice(0,I):a(r,B,I)},F=A=>"string"==typeof A?A.length<4096:A.byteLength!0;break;case"blake2b":case"blake2s":f=(A,I)=>I<=512&&F(A);break;case"blake3":f=(A,I)=>0===I&&F(A);break;case"xxhash64":case"xxhash3":case"xxhash128":case"crc64":f=()=>!1}return yield(()=>g(this,void 0,void 0,(function*(){i||(yield c);const A=i.exports.Hash_GetBuffer(),I=i.exports.memory.buffer;B=new Uint8Array(I,A,C)})))(),{getMemory:()=>B,writeMemory:(A,I=0)=>{B.set(A,I)},getExports:()=>i.exports,setMemorySize:A=>{i.exports.Hash_SetMemorySize(A);const I=i.exports.Hash_GetBuffer(),g=i.exports.memory.buffer;B=new Uint8Array(g,I,A)},init:t,update:o,digest:d,save:()=>{if(!e)throw new Error("save() can only be called after init() and before digest()");const I=i.exports.Hash_GetState(),g=n(),B=i.exports.memory.buffer,c=new Uint8Array(B,I,g),t=new Uint8Array(4+g);return function(A,I){const i=I.length>>1;for(let g=0;g{if(!(I instanceof Uint8Array))throw new Error("load() expects an Uint8Array generated by save()");const g=i.exports.Hash_GetState(),B=n(),c=4+B,t=i.exports.memory.buffer;if(I.length!==c)throw new Error(`Bad state length (expected ${c} bytes, got ${I.length})`);if(!function(A,I){if(A.length!==2*I.length)return!1;for(let i=0;i{if(!f(A,g))return t(g),o(A),d("hex",e);const n=E(A);return B.set(n),i.exports.Hash_Calculate(n.length,g,e),a(r,B,I)},hashLength:I}}))}const f=new B;let H=null;A.createSHA1=function(){return F(i,20).then((A=>{A.init();const I={init:()=>(A.init(),I),update:i=>(A.update(i),I),digest:I=>A.digest(I),save:()=>A.save(),load:i=>(A.load(i),I),blockSize:64,digestSize:20};return I}))},A.sha1=function(A){if(null===H)return function(A,I,i){return g(this,void 0,void 0,(function*(){const g=yield A.lock(),B=yield F(I,i);return g(),B}))}(f,i,20).then((I=>(H=I,H.calculate(A))));try{const I=H.calculate(A);return Promise.resolve(I)}catch(A){return Promise.reject(A)}}})); diff --git a/frontend/node_modules/hash-wasm/dist/sha224.umd.min.js b/frontend/node_modules/hash-wasm/dist/sha224.umd.min.js new file mode 100644 index 0000000..1dd3096 --- /dev/null +++ b/frontend/node_modules/hash-wasm/dist/sha224.umd.min.js @@ -0,0 +1,7 @@ +/*! + * hash-wasm (https://www.npmjs.com/package/hash-wasm) + * (c) Dani Biro + * @license MIT + */ + +!function(A,I){"object"==typeof exports&&"undefined"!=typeof module?I(exports):"function"==typeof define&&define.amd?define(["exports"],I):I((A="undefined"!=typeof globalThis?globalThis:A||self).hashwasm=A.hashwasm||{})}(this,(function(A){"use strict";var I,g={name:"sha256",data:"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c2pBx6KerX1qIhkgASADcyACcSABIANxcyABQR53IAFBE3dzIAFBCndzaiAaaiICaiIJIBMgEnNxIBJzaiAJQRp3IAlBFXdzIAlBB3dzakHRxqk2aiIaIAIgAXMgA3EgAiABcXMgAkEedyACQRN3cyACQQp3c2ogGGoiA2oiESAJIBNzcSATc2ogEUEadyARQRV3cyARQQd3c2pB59KkoQFqIhggAyACcyABcSADIAJxcyADQR53IANBE3dzIANBCndzaiAUaiIBaiISIBEgCXNxIAlzaiASQRp3IBJBFXdzIBJBB3dzakGFldy9AmoiFCABIANzIAJxIAEgA3FzIAFBHncgAUETd3MgAUEKd3NqIBdqIgJqIhMgI2ogJiASaiAiIBFqICUgCWogEyASIBFzcSARc2ogE0EadyATQRV3cyATQQd3c2pBuMLs8AJqIhcgAiABcyADcSACIAFxcyACQR53IAJBE3dzIAJBCndzaiAZaiIDaiIJIBMgEnNxIBJzaiAJQRp3IAlBFXdzIAlBB3dzakH827HpBGoiGSADIAJzIAFxIAMgAnFzIANBHncgA0ETd3MgA0EKd3NqIBpqIgFqIhEgCSATc3EgE3NqIBFBGncgEUEVd3MgEUEHd3NqQZOa4JkFaiIaIAEgA3MgAnEgASADcXMgAUEedyABQRN3cyABQQp3c2ogGGoiAmoiEiARIAlzcSAJc2ogEkEadyASQRV3cyASQQd3c2pB1OapqAZqIhggAiABcyADcSACIAFxcyACQR53IAJBE3dzIAJBCndzaiAUaiIDaiITaiAoIBJqICQgEWogJyAJaiATIBIgEXNxIBFzaiATQRp3IBNBFXdzIBNBB3dzakG7laizB2oiFCADIAJzIAFxIAMgAnFzIANBHncgA0ETd3MgA0EKd3NqIBdqIgFqIgkgEyASc3EgEnNqIAlBGncgCUEVd3MgCUEHd3NqQa6Si454aiIXIAEgA3MgAnEgASADcXMgAUEedyABQRN3cyABQQp3c2ogGWoiAmoiESAJIBNzcSATc2ogEUEadyARQRV3cyARQQd3c2pBhdnIk3lqIhkgAiABcyADcSACIAFxcyACQR53IAJBE3dzIAJBCndzaiAaaiIDaiISIBEgCXNxIAlzaiASQRp3IBJBFXdzIBJBB3dzakGh0f+VemoiGiADIAJz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",hash:"8c18dd94"};function B(A,I,g,B){return new(g||(g=Promise))((function(E,Q){function c(A){try{i(B.next(A))}catch(A){Q(A)}}function d(A){try{i(B.throw(A))}catch(A){Q(A)}}function i(A){var I;A.done?E(A.value):(I=A.value,I instanceof g?I:new g((function(A){A(I)}))).then(c,d)}i((B=B.apply(A,I||[])).next())}))}"function"==typeof SuppressedError&&SuppressedError;class E{constructor(){this.mutex=Promise.resolve()}lock(){let A=()=>{};return this.mutex=this.mutex.then((()=>new Promise(A))),new Promise((I=>{A=I}))}dispatch(A){return B(this,void 0,void 0,(function*(){const I=yield this.lock();try{return yield Promise.resolve(A())}finally{I()}}))}}const Q="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:global,c=null!==(I=Q.Buffer)&&void 0!==I?I:null,d=Q.TextEncoder?new Q.TextEncoder:null;function i(A,I){return(15&A)+(A>>6|A>>3&8)<<4|(15&I)+(I>>6|I>>3&8)}const n="a".charCodeAt(0)-10,o="0".charCodeAt(0);function a(A,I,g){let B=0;for(let E=0;E>>4;A[B++]=g>9?g+n:g+o,g=15&I[E],A[B++]=g>9?g+n:g+o}return String.fromCharCode.apply(null,A)}const e=null!==c?A=>{if("string"==typeof A){const I=c.from(A,"utf8");return new Uint8Array(I.buffer,I.byteOffset,I.length)}if(c.isBuffer(A))return new Uint8Array(A.buffer,A.byteOffset,A.length);if(ArrayBuffer.isView(A))return new Uint8Array(A.buffer,A.byteOffset,A.byteLength);throw new Error("Invalid data type!")}:A=>{if("string"==typeof A)return d.encode(A);if(ArrayBuffer.isView(A))return new Uint8Array(A.buffer,A.byteOffset,A.byteLength);throw new Error("Invalid data type!")},N="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",y=new Uint8Array(256);for(let A=0;A>4,E+=1,B[E]=(15&Q)<<4|c>>2,E+=1,B[E]=(3&c)<<6|63&d,E+=1}return B}const C=16384,D=new E,r=new Map;function q(A,I){return B(this,void 0,void 0,(function*(){let g=null,E=null,Q=!1;if("undefined"==typeof WebAssembly)throw new Error("WebAssembly is not supported in this environment!");const c=()=>new DataView(g.exports.memory.buffer).getUint32(g.exports.STATE_SIZE,!0),d=D.dispatch((()=>B(this,void 0,void 0,(function*(){if(!r.has(A.name)){const I=t(A.data),g=WebAssembly.compile(I);r.set(A.name,g)}const I=yield r.get(A.name);g=yield WebAssembly.instantiate(I,{})})))),n=(A=null)=>{Q=!0,g.exports.Hash_Init(A)},o=A=>{if(!Q)throw new Error("update() called before init()");(A=>{let I=0;for(;I{if(!Q)throw new Error("digest() called before init()");return Q=!1,g.exports.Hash_Final(B),"binary"===A?E.slice(0,I):a(N,E,I)},q=A=>"string"==typeof A?A.length<4096:A.byteLength!0;break;case"blake2b":case"blake2s":z=(A,I)=>I<=512&&q(A);break;case"blake3":z=(A,I)=>0===I&&q(A);break;case"xxhash64":case"xxhash3":case"xxhash128":case"crc64":z=()=>!1}return yield(()=>B(this,void 0,void 0,(function*(){g||(yield d);const A=g.exports.Hash_GetBuffer(),I=g.exports.memory.buffer;E=new Uint8Array(I,A,C)})))(),{getMemory:()=>E,writeMemory:(A,I=0)=>{E.set(A,I)},getExports:()=>g.exports,setMemorySize:A=>{g.exports.Hash_SetMemorySize(A);const I=g.exports.Hash_GetBuffer(),B=g.exports.memory.buffer;E=new Uint8Array(B,I,A)},init:n,update:o,digest:y,save:()=>{if(!Q)throw new Error("save() can only be called after init() and before digest()");const I=g.exports.Hash_GetState(),B=c(),E=g.exports.memory.buffer,d=new Uint8Array(E,I,B),n=new Uint8Array(4+B);return function(A,I){const g=I.length>>1;for(let B=0;B{if(!(I instanceof Uint8Array))throw new Error("load() expects an Uint8Array generated by save()");const B=g.exports.Hash_GetState(),E=c(),d=4+E,n=g.exports.memory.buffer;if(I.length!==d)throw new Error(`Bad state length (expected ${d} bytes, got ${I.length})`);if(!function(A,I){if(A.length!==2*I.length)return!1;for(let g=0;g{if(!z(A,B))return n(B),o(A),y("hex",Q);const c=e(A);return E.set(c),g.exports.Hash_Calculate(c.length,B,Q),a(N,E,I)},hashLength:I}}))}const z=new E;let F=null;A.createSHA224=function(){return q(g,28).then((A=>{A.init(224);const I={init:()=>(A.init(224),I),update:g=>(A.update(g),I),digest:I=>A.digest(I),save:()=>A.save(),load:g=>(A.load(g),I),blockSize:64,digestSize:28};return I}))},A.sha224=function(A){if(null===F)return function(A,I,g){return B(this,void 0,void 0,(function*(){const B=yield A.lock(),E=yield q(I,g);return B(),E}))}(z,g,28).then((I=>(F=I,F.calculate(A,224))));try{const I=F.calculate(A,224);return Promise.resolve(I)}catch(A){return Promise.reject(A)}}})); diff --git a/frontend/node_modules/hash-wasm/dist/sha256.umd.min.js b/frontend/node_modules/hash-wasm/dist/sha256.umd.min.js new file mode 100644 index 0000000..fcf8218 --- /dev/null +++ b/frontend/node_modules/hash-wasm/dist/sha256.umd.min.js @@ -0,0 +1,7 @@ +/*! + * hash-wasm (https://www.npmjs.com/package/hash-wasm) + * (c) Dani Biro + * @license MIT + */ + +!function(A,I){"object"==typeof exports&&"undefined"!=typeof module?I(exports):"function"==typeof define&&define.amd?define(["exports"],I):I((A="undefined"!=typeof globalThis?globalThis:A||self).hashwasm=A.hashwasm||{})}(this,(function(A){"use strict";var I,g={name:"sha256",data:"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c2pBx6KerX1qIhkgASADcyACcSABIANxcyABQR53IAFBE3dzIAFBCndzaiAaaiICaiIJIBMgEnNxIBJzaiAJQRp3IAlBFXdzIAlBB3dzakHRxqk2aiIaIAIgAXMgA3EgAiABcXMgAkEedyACQRN3cyACQQp3c2ogGGoiA2oiESAJIBNzcSATc2ogEUEadyARQRV3cyARQQd3c2pB59KkoQFqIhggAyACcyABcSADIAJxcyADQR53IANBE3dzIANBCndzaiAUaiIBaiISIBEgCXNxIAlzaiASQRp3IBJBFXdzIBJBB3dzakGFldy9AmoiFCABIANzIAJxIAEgA3FzIAFBHncgAUETd3MgAUEKd3NqIBdqIgJqIhMgI2ogJiASaiAiIBFqICUgCWogEyASIBFzcSARc2ogE0EadyATQRV3cyATQQd3c2pBuMLs8AJqIhcgAiABcyADcSACIAFxcyACQR53IAJBE3dzIAJBCndzaiAZaiIDaiIJIBMgEnNxIBJzaiAJQRp3IAlBFXdzIAlBB3dzakH827HpBGoiGSADIAJzIAFxIAMgAnFzIANBHncgA0ETd3MgA0EKd3NqIBpqIgFqIhEgCSATc3EgE3NqIBFBGncgEUEVd3MgEUEHd3NqQZOa4JkFaiIaIAEgA3MgAnEgASADcXMgAUEedyABQRN3cyABQQp3c2ogGGoiAmoiEiARIAlzcSAJc2ogEkEadyASQRV3cyASQQd3c2pB1OapqAZqIhggAiABcyADcSACIAFxcyACQR53IAJBE3dzIAJBCndzaiAUaiIDaiITaiAoIBJqICQgEWogJyAJaiATIBIgEXNxIBFzaiATQRp3IBNBFXdzIBNBB3dzakG7laizB2oiFCADIAJzIAFxIAMgAnFzIANBHncgA0ETd3MgA0EKd3NqIBdqIgFqIgkgEyASc3EgEnNqIAlBGncgCUEVd3MgCUEHd3NqQa6Si454aiIXIAEgA3MgAnEgASADcXMgAUEedyABQRN3cyABQQp3c2ogGWoiAmoiESAJIBNzcSATc2ogEUEadyARQRV3cyARQQd3c2pBhdnIk3lqIhkgAiABcyADcSACIAFxcyACQR53IAJBE3dzIAJBCndzaiAaaiIDaiISIBEgCXNxIAlzaiASQRp3IBJBFXdzIBJBB3dzakGh0f+VemoiGiADIAJz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",hash:"8c18dd94"};function B(A,I,g,B){return new(g||(g=Promise))((function(E,Q){function c(A){try{i(B.next(A))}catch(A){Q(A)}}function d(A){try{i(B.throw(A))}catch(A){Q(A)}}function i(A){var I;A.done?E(A.value):(I=A.value,I instanceof g?I:new g((function(A){A(I)}))).then(c,d)}i((B=B.apply(A,I||[])).next())}))}"function"==typeof SuppressedError&&SuppressedError;class E{constructor(){this.mutex=Promise.resolve()}lock(){let A=()=>{};return this.mutex=this.mutex.then((()=>new Promise(A))),new Promise((I=>{A=I}))}dispatch(A){return B(this,void 0,void 0,(function*(){const I=yield this.lock();try{return yield Promise.resolve(A())}finally{I()}}))}}const Q="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:global,c=null!==(I=Q.Buffer)&&void 0!==I?I:null,d=Q.TextEncoder?new Q.TextEncoder:null;function i(A,I){return(15&A)+(A>>6|A>>3&8)<<4|(15&I)+(I>>6|I>>3&8)}const n="a".charCodeAt(0)-10,o="0".charCodeAt(0);function a(A,I,g){let B=0;for(let E=0;E>>4;A[B++]=g>9?g+n:g+o,g=15&I[E],A[B++]=g>9?g+n:g+o}return String.fromCharCode.apply(null,A)}const e=null!==c?A=>{if("string"==typeof A){const I=c.from(A,"utf8");return new Uint8Array(I.buffer,I.byteOffset,I.length)}if(c.isBuffer(A))return new Uint8Array(A.buffer,A.byteOffset,A.length);if(ArrayBuffer.isView(A))return new Uint8Array(A.buffer,A.byteOffset,A.byteLength);throw new Error("Invalid data type!")}:A=>{if("string"==typeof A)return d.encode(A);if(ArrayBuffer.isView(A))return new Uint8Array(A.buffer,A.byteOffset,A.byteLength);throw new Error("Invalid data type!")},N="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",y=new Uint8Array(256);for(let A=0;A>4,E+=1,B[E]=(15&Q)<<4|c>>2,E+=1,B[E]=(3&c)<<6|63&d,E+=1}return B}const C=16384,D=new E,r=new Map;function q(A,I){return B(this,void 0,void 0,(function*(){let g=null,E=null,Q=!1;if("undefined"==typeof WebAssembly)throw new Error("WebAssembly is not supported in this environment!");const c=()=>new DataView(g.exports.memory.buffer).getUint32(g.exports.STATE_SIZE,!0),d=D.dispatch((()=>B(this,void 0,void 0,(function*(){if(!r.has(A.name)){const I=t(A.data),g=WebAssembly.compile(I);r.set(A.name,g)}const I=yield r.get(A.name);g=yield WebAssembly.instantiate(I,{})})))),n=(A=null)=>{Q=!0,g.exports.Hash_Init(A)},o=A=>{if(!Q)throw new Error("update() called before init()");(A=>{let I=0;for(;I{if(!Q)throw new Error("digest() called before init()");return Q=!1,g.exports.Hash_Final(B),"binary"===A?E.slice(0,I):a(N,E,I)},q=A=>"string"==typeof A?A.length<4096:A.byteLength!0;break;case"blake2b":case"blake2s":z=(A,I)=>I<=512&&q(A);break;case"blake3":z=(A,I)=>0===I&&q(A);break;case"xxhash64":case"xxhash3":case"xxhash128":case"crc64":z=()=>!1}return yield(()=>B(this,void 0,void 0,(function*(){g||(yield d);const A=g.exports.Hash_GetBuffer(),I=g.exports.memory.buffer;E=new Uint8Array(I,A,C)})))(),{getMemory:()=>E,writeMemory:(A,I=0)=>{E.set(A,I)},getExports:()=>g.exports,setMemorySize:A=>{g.exports.Hash_SetMemorySize(A);const I=g.exports.Hash_GetBuffer(),B=g.exports.memory.buffer;E=new Uint8Array(B,I,A)},init:n,update:o,digest:y,save:()=>{if(!Q)throw new Error("save() can only be called after init() and before digest()");const I=g.exports.Hash_GetState(),B=c(),E=g.exports.memory.buffer,d=new Uint8Array(E,I,B),n=new Uint8Array(4+B);return function(A,I){const g=I.length>>1;for(let B=0;B{if(!(I instanceof Uint8Array))throw new Error("load() expects an Uint8Array generated by save()");const B=g.exports.Hash_GetState(),E=c(),d=4+E,n=g.exports.memory.buffer;if(I.length!==d)throw new Error(`Bad state length (expected ${d} bytes, got ${I.length})`);if(!function(A,I){if(A.length!==2*I.length)return!1;for(let g=0;g{if(!z(A,B))return n(B),o(A),y("hex",Q);const c=e(A);return E.set(c),g.exports.Hash_Calculate(c.length,B,Q),a(N,E,I)},hashLength:I}}))}const z=new E;let F=null;A.createSHA256=function(){return q(g,32).then((A=>{A.init(256);const I={init:()=>(A.init(256),I),update:g=>(A.update(g),I),digest:I=>A.digest(I),save:()=>A.save(),load:g=>(A.load(g),I),blockSize:64,digestSize:32};return I}))},A.sha256=function(A){if(null===F)return function(A,I,g){return B(this,void 0,void 0,(function*(){const B=yield A.lock(),E=yield q(I,g);return B(),E}))}(z,g,32).then((I=>(F=I,F.calculate(A,256))));try{const I=F.calculate(A,256);return Promise.resolve(I)}catch(A){return Promise.reject(A)}}})); diff --git a/frontend/node_modules/hash-wasm/dist/sha3.umd.min.js b/frontend/node_modules/hash-wasm/dist/sha3.umd.min.js new file mode 100644 index 0000000..3bdeb04 --- /dev/null +++ b/frontend/node_modules/hash-wasm/dist/sha3.umd.min.js @@ -0,0 +1,7 @@ +/*! + * hash-wasm (https://www.npmjs.com/package/hash-wasm) + * (c) Dani Biro + * @license MIT + */ + +!function(A,Q){"object"==typeof exports&&"undefined"!=typeof module?Q(exports):"function"==typeof define&&define.amd?define(["exports"],Q):Q((A="undefined"!=typeof globalThis?globalThis:A||self).hashwasm=A.hashwasm||{})}(this,(function(A){"use strict";var Q,e={name:"sha3",data:"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",hash:"fb24e536"};function I(A,Q,e,I){return new(e||(e=Promise))((function(g,t){function B(A){try{o(I.next(A))}catch(A){t(A)}}function i(A){try{o(I.throw(A))}catch(A){t(A)}}function o(A){var Q;A.done?g(A.value):(Q=A.value,Q instanceof e?Q:new e((function(A){A(Q)}))).then(B,i)}o((I=I.apply(A,Q||[])).next())}))}"function"==typeof SuppressedError&&SuppressedError;class g{constructor(){this.mutex=Promise.resolve()}lock(){let A=()=>{};return this.mutex=this.mutex.then((()=>new Promise(A))),new Promise((Q=>{A=Q}))}dispatch(A){return I(this,void 0,void 0,(function*(){const Q=yield this.lock();try{return yield Promise.resolve(A())}finally{Q()}}))}}const t="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:global,B=null!==(Q=t.Buffer)&&void 0!==Q?Q:null,i=t.TextEncoder?new t.TextEncoder:null;function o(A,Q){return(15&A)+(A>>6|A>>3&8)<<4|(15&Q)+(Q>>6|Q>>3&8)}const n="a".charCodeAt(0)-10,C="0".charCodeAt(0);function r(A,Q,e){let I=0;for(let g=0;g>>4;A[I++]=e>9?e+n:e+C,e=15&Q[g],A[I++]=e>9?e+n:e+C}return String.fromCharCode.apply(null,A)}const s=null!==B?A=>{if("string"==typeof A){const Q=B.from(A,"utf8");return new Uint8Array(Q.buffer,Q.byteOffset,Q.length)}if(B.isBuffer(A))return new Uint8Array(A.buffer,A.byteOffset,A.length);if(ArrayBuffer.isView(A))return new Uint8Array(A.buffer,A.byteOffset,A.byteLength);throw new Error("Invalid data type!")}:A=>{if("string"==typeof A)return i.encode(A);if(ArrayBuffer.isView(A))return new Uint8Array(A.buffer,A.byteOffset,A.byteLength);throw new Error("Invalid data type!")},E="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",D=new Uint8Array(256);for(let A=0;A>4,g+=1,I[g]=(15&t)<<4|B>>2,g+=1,I[g]=(3&B)<<6|63&i,g+=1}return I}const a=16384,h=new g,f=new Map;function l(A,Q){return I(this,void 0,void 0,(function*(){let e=null,g=null,t=!1;if("undefined"==typeof WebAssembly)throw new Error("WebAssembly is not supported in this environment!");const B=()=>new DataView(e.exports.memory.buffer).getUint32(e.exports.STATE_SIZE,!0),i=h.dispatch((()=>I(this,void 0,void 0,(function*(){if(!f.has(A.name)){const Q=c(A.data),e=WebAssembly.compile(Q);f.set(A.name,e)}const Q=yield f.get(A.name);e=yield WebAssembly.instantiate(Q,{})})))),n=(A=null)=>{t=!0,e.exports.Hash_Init(A)},C=A=>{if(!t)throw new Error("update() called before init()");(A=>{let Q=0;for(;Q{if(!t)throw new Error("digest() called before init()");return t=!1,e.exports.Hash_Final(I),"binary"===A?g.slice(0,Q):r(E,g,Q)},l=A=>"string"==typeof A?A.length<4096:A.byteLength!0;break;case"blake2b":case"blake2s":U=(A,Q)=>Q<=512&&l(A);break;case"blake3":U=(A,Q)=>0===Q&&l(A);break;case"xxhash64":case"xxhash3":case"xxhash128":case"crc64":U=()=>!1}return yield(()=>I(this,void 0,void 0,(function*(){e||(yield i);const A=e.exports.Hash_GetBuffer(),Q=e.exports.memory.buffer;g=new Uint8Array(Q,A,a)})))(),{getMemory:()=>g,writeMemory:(A,Q=0)=>{g.set(A,Q)},getExports:()=>e.exports,setMemorySize:A=>{e.exports.Hash_SetMemorySize(A);const Q=e.exports.Hash_GetBuffer(),I=e.exports.memory.buffer;g=new Uint8Array(I,Q,A)},init:n,update:C,digest:D,save:()=>{if(!t)throw new Error("save() can only be called after init() and before digest()");const Q=e.exports.Hash_GetState(),I=B(),g=e.exports.memory.buffer,i=new Uint8Array(g,Q,I),n=new Uint8Array(4+I);return function(A,Q){const e=Q.length>>1;for(let I=0;I{if(!(Q instanceof Uint8Array))throw new Error("load() expects an Uint8Array generated by save()");const I=e.exports.Hash_GetState(),g=B(),i=4+g,n=e.exports.memory.buffer;if(Q.length!==i)throw new Error(`Bad state length (expected ${i} bytes, got ${Q.length})`);if(!function(A,Q){if(A.length!==2*Q.length)return!1;for(let e=0;e{if(!U(A,I))return n(I),C(A),D("hex",t);const B=s(A);return g.set(B),e.exports.Hash_Calculate(B.length,I,t),r(E,g,Q)},hashLength:Q}}))}const U=new g;let u=null;function y(A){return[224,256,384,512].includes(A)?null:new Error("Invalid variant! Valid values: 224, 256, 384, 512")}A.createSHA3=function(A=512){if(y(A))return Promise.reject(y(A));const Q=A/8;return l(e,Q).then((e=>{e.init(A);const I={init:()=>(e.init(A),I),update:A=>(e.update(A),I),digest:A=>e.digest(A,6),save:()=>e.save(),load:A=>(e.load(A),I),blockSize:200-2*Q,digestSize:Q};return I}))},A.sha3=function(A,Q=512){if(y(Q))return Promise.reject(y(Q));const g=Q/8;if(null===u||u.hashLength!==g)return function(A,Q,e){return I(this,void 0,void 0,(function*(){const I=yield A.lock(),g=yield l(Q,e);return I(),g}))}(U,e,g).then((e=>(u=e,u.calculate(A,Q,6))));try{const e=u.calculate(A,Q,6);return Promise.resolve(e)}catch(A){return Promise.reject(A)}}})); diff --git a/frontend/node_modules/hash-wasm/dist/sha384.umd.min.js b/frontend/node_modules/hash-wasm/dist/sha384.umd.min.js new file mode 100644 index 0000000..75840ae --- /dev/null +++ b/frontend/node_modules/hash-wasm/dist/sha384.umd.min.js @@ -0,0 +1,7 @@ +/*! + * hash-wasm (https://www.npmjs.com/package/hash-wasm) + * (c) Dani Biro + * @license MIT + */ + +!function(A,I){"object"==typeof exports&&"undefined"!=typeof module?I(exports):"function"==typeof define&&define.amd?define(["exports"],I):I((A="undefined"!=typeof globalThis?globalThis:A||self).hashwasm=A.hashwasm||{})}(this,(function(A){"use strict";var I,C={name:"sha512",data:"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",hash:"f2e40eb1"};function g(A,I,C,g){return new(C||(C=Promise))((function(i,B){function F(A){try{Q(g.next(A))}catch(A){B(A)}}function h(A){try{Q(g.throw(A))}catch(A){B(A)}}function Q(A){var I;A.done?i(A.value):(I=A.value,I instanceof C?I:new C((function(A){A(I)}))).then(F,h)}Q((g=g.apply(A,I||[])).next())}))}"function"==typeof SuppressedError&&SuppressedError;class i{constructor(){this.mutex=Promise.resolve()}lock(){let A=()=>{};return this.mutex=this.mutex.then((()=>new Promise(A))),new Promise((I=>{A=I}))}dispatch(A){return g(this,void 0,void 0,(function*(){const I=yield this.lock();try{return yield Promise.resolve(A())}finally{I()}}))}}const B="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:global,F=null!==(I=B.Buffer)&&void 0!==I?I:null,h=B.TextEncoder?new B.TextEncoder:null;function Q(A,I){return(15&A)+(A>>6|A>>3&8)<<4|(15&I)+(I>>6|I>>3&8)}const o="a".charCodeAt(0)-10,e="0".charCodeAt(0);function f(A,I,C){let g=0;for(let i=0;i>>4;A[g++]=C>9?C+o:C+e,C=15&I[i],A[g++]=C>9?C+o:C+e}return String.fromCharCode.apply(null,A)}const E=null!==F?A=>{if("string"==typeof A){const I=F.from(A,"utf8");return new Uint8Array(I.buffer,I.byteOffset,I.length)}if(F.isBuffer(A))return new Uint8Array(A.buffer,A.byteOffset,A.length);if(ArrayBuffer.isView(A))return new Uint8Array(A.buffer,A.byteOffset,A.byteLength);throw new Error("Invalid data type!")}:A=>{if("string"==typeof A)return h.encode(A);if(ArrayBuffer.isView(A))return new Uint8Array(A.buffer,A.byteOffset,A.byteLength);throw new Error("Invalid data type!")},D="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",t=new Uint8Array(256);for(let A=0;A>4,i+=1,g[i]=(15&B)<<4|F>>2,i+=1,g[i]=(3&F)<<6|63&h,i+=1}return g}const U=16384,J=new i,Y=new Map;function w(A,I){return g(this,void 0,void 0,(function*(){let C=null,i=null,B=!1;if("undefined"==typeof WebAssembly)throw new Error("WebAssembly is not supported in this environment!");const F=()=>new DataView(C.exports.memory.buffer).getUint32(C.exports.STATE_SIZE,!0),h=J.dispatch((()=>g(this,void 0,void 0,(function*(){if(!Y.has(A.name)){const I=S(A.data),C=WebAssembly.compile(I);Y.set(A.name,C)}const I=yield Y.get(A.name);C=yield WebAssembly.instantiate(I,{})})))),o=(A=null)=>{B=!0,C.exports.Hash_Init(A)},e=A=>{if(!B)throw new Error("update() called before init()");(A=>{let I=0;for(;I{if(!B)throw new Error("digest() called before init()");return B=!1,C.exports.Hash_Final(g),"binary"===A?i.slice(0,I):f(D,i,I)},w=A=>"string"==typeof A?A.length<4096:A.byteLength!0;break;case"blake2b":case"blake2s":n=(A,I)=>I<=512&&w(A);break;case"blake3":n=(A,I)=>0===I&&w(A);break;case"xxhash64":case"xxhash3":case"xxhash128":case"crc64":n=()=>!1}return yield(()=>g(this,void 0,void 0,(function*(){C||(yield h);const A=C.exports.Hash_GetBuffer(),I=C.exports.memory.buffer;i=new Uint8Array(I,A,U)})))(),{getMemory:()=>i,writeMemory:(A,I=0)=>{i.set(A,I)},getExports:()=>C.exports,setMemorySize:A=>{C.exports.Hash_SetMemorySize(A);const I=C.exports.Hash_GetBuffer(),g=C.exports.memory.buffer;i=new Uint8Array(g,I,A)},init:o,update:e,digest:t,save:()=>{if(!B)throw new Error("save() can only be called after init() and before digest()");const I=C.exports.Hash_GetState(),g=F(),i=C.exports.memory.buffer,h=new Uint8Array(i,I,g),o=new Uint8Array(4+g);return function(A,I){const C=I.length>>1;for(let g=0;g{if(!(I instanceof Uint8Array))throw new Error("load() expects an Uint8Array generated by save()");const g=C.exports.Hash_GetState(),i=F(),h=4+i,o=C.exports.memory.buffer;if(I.length!==h)throw new Error(`Bad state length (expected ${h} bytes, got ${I.length})`);if(!function(A,I){if(A.length!==2*I.length)return!1;for(let C=0;C{if(!n(A,g))return o(g),e(A),t("hex",B);const F=E(A);return i.set(F),C.exports.Hash_Calculate(F.length,g,B),f(D,i,I)},hashLength:I}}))}const n=new i;let m=null;A.createSHA384=function(){return w(C,48).then((A=>{A.init(384);const I={init:()=>(A.init(384),I),update:C=>(A.update(C),I),digest:I=>A.digest(I),save:()=>A.save(),load:C=>(A.load(C),I),blockSize:128,digestSize:48};return I}))},A.sha384=function(A){if(null===m)return function(A,I,C){return g(this,void 0,void 0,(function*(){const g=yield A.lock(),i=yield w(I,C);return g(),i}))}(n,C,48).then((I=>(m=I,m.calculate(A,384))));try{const I=m.calculate(A,384);return Promise.resolve(I)}catch(A){return Promise.reject(A)}}})); diff --git a/frontend/node_modules/hash-wasm/dist/sha512.umd.min.js b/frontend/node_modules/hash-wasm/dist/sha512.umd.min.js new file mode 100644 index 0000000..6f9d03c --- /dev/null +++ b/frontend/node_modules/hash-wasm/dist/sha512.umd.min.js @@ -0,0 +1,7 @@ +/*! + * hash-wasm (https://www.npmjs.com/package/hash-wasm) + * (c) Dani Biro + * @license MIT + */ + +!function(A,I){"object"==typeof exports&&"undefined"!=typeof module?I(exports):"function"==typeof define&&define.amd?define(["exports"],I):I((A="undefined"!=typeof globalThis?globalThis:A||self).hashwasm=A.hashwasm||{})}(this,(function(A){"use strict";var I,C={name:"sha512",data:"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",hash:"f2e40eb1"};function g(A,I,C,g){return new(C||(C=Promise))((function(i,B){function F(A){try{Q(g.next(A))}catch(A){B(A)}}function h(A){try{Q(g.throw(A))}catch(A){B(A)}}function Q(A){var I;A.done?i(A.value):(I=A.value,I instanceof C?I:new C((function(A){A(I)}))).then(F,h)}Q((g=g.apply(A,I||[])).next())}))}"function"==typeof SuppressedError&&SuppressedError;class i{constructor(){this.mutex=Promise.resolve()}lock(){let A=()=>{};return this.mutex=this.mutex.then((()=>new Promise(A))),new Promise((I=>{A=I}))}dispatch(A){return g(this,void 0,void 0,(function*(){const I=yield this.lock();try{return yield Promise.resolve(A())}finally{I()}}))}}const B="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:global,F=null!==(I=B.Buffer)&&void 0!==I?I:null,h=B.TextEncoder?new B.TextEncoder:null;function Q(A,I){return(15&A)+(A>>6|A>>3&8)<<4|(15&I)+(I>>6|I>>3&8)}const o="a".charCodeAt(0)-10,e="0".charCodeAt(0);function f(A,I,C){let g=0;for(let i=0;i>>4;A[g++]=C>9?C+o:C+e,C=15&I[i],A[g++]=C>9?C+o:C+e}return String.fromCharCode.apply(null,A)}const E=null!==F?A=>{if("string"==typeof A){const I=F.from(A,"utf8");return new Uint8Array(I.buffer,I.byteOffset,I.length)}if(F.isBuffer(A))return new Uint8Array(A.buffer,A.byteOffset,A.length);if(ArrayBuffer.isView(A))return new Uint8Array(A.buffer,A.byteOffset,A.byteLength);throw new Error("Invalid data type!")}:A=>{if("string"==typeof A)return h.encode(A);if(ArrayBuffer.isView(A))return new Uint8Array(A.buffer,A.byteOffset,A.byteLength);throw new Error("Invalid data type!")},D="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",t=new Uint8Array(256);for(let A=0;A>4,i+=1,g[i]=(15&B)<<4|F>>2,i+=1,g[i]=(3&F)<<6|63&h,i+=1}return g}const U=16384,J=new i,Y=new Map;function w(A,I){return g(this,void 0,void 0,(function*(){let C=null,i=null,B=!1;if("undefined"==typeof WebAssembly)throw new Error("WebAssembly is not supported in this environment!");const F=()=>new DataView(C.exports.memory.buffer).getUint32(C.exports.STATE_SIZE,!0),h=J.dispatch((()=>g(this,void 0,void 0,(function*(){if(!Y.has(A.name)){const I=S(A.data),C=WebAssembly.compile(I);Y.set(A.name,C)}const I=yield Y.get(A.name);C=yield WebAssembly.instantiate(I,{})})))),o=(A=null)=>{B=!0,C.exports.Hash_Init(A)},e=A=>{if(!B)throw new Error("update() called before init()");(A=>{let I=0;for(;I{if(!B)throw new Error("digest() called before init()");return B=!1,C.exports.Hash_Final(g),"binary"===A?i.slice(0,I):f(D,i,I)},w=A=>"string"==typeof A?A.length<4096:A.byteLength!0;break;case"blake2b":case"blake2s":n=(A,I)=>I<=512&&w(A);break;case"blake3":n=(A,I)=>0===I&&w(A);break;case"xxhash64":case"xxhash3":case"xxhash128":case"crc64":n=()=>!1}return yield(()=>g(this,void 0,void 0,(function*(){C||(yield h);const A=C.exports.Hash_GetBuffer(),I=C.exports.memory.buffer;i=new Uint8Array(I,A,U)})))(),{getMemory:()=>i,writeMemory:(A,I=0)=>{i.set(A,I)},getExports:()=>C.exports,setMemorySize:A=>{C.exports.Hash_SetMemorySize(A);const I=C.exports.Hash_GetBuffer(),g=C.exports.memory.buffer;i=new Uint8Array(g,I,A)},init:o,update:e,digest:t,save:()=>{if(!B)throw new Error("save() can only be called after init() and before digest()");const I=C.exports.Hash_GetState(),g=F(),i=C.exports.memory.buffer,h=new Uint8Array(i,I,g),o=new Uint8Array(4+g);return function(A,I){const C=I.length>>1;for(let g=0;g{if(!(I instanceof Uint8Array))throw new Error("load() expects an Uint8Array generated by save()");const g=C.exports.Hash_GetState(),i=F(),h=4+i,o=C.exports.memory.buffer;if(I.length!==h)throw new Error(`Bad state length (expected ${h} bytes, got ${I.length})`);if(!function(A,I){if(A.length!==2*I.length)return!1;for(let C=0;C{if(!n(A,g))return o(g),e(A),t("hex",B);const F=E(A);return i.set(F),C.exports.Hash_Calculate(F.length,g,B),f(D,i,I)},hashLength:I}}))}const n=new i;let m=null;A.createSHA512=function(){return w(C,64).then((A=>{A.init(512);const I={init:()=>(A.init(512),I),update:C=>(A.update(C),I),digest:I=>A.digest(I),save:()=>A.save(),load:C=>(A.load(C),I),blockSize:128,digestSize:64};return I}))},A.sha512=function(A){if(null===m)return function(A,I,C){return g(this,void 0,void 0,(function*(){const g=yield A.lock(),i=yield w(I,C);return g(),i}))}(n,C,64).then((I=>(m=I,m.calculate(A,512))));try{const I=m.calculate(A,512);return Promise.resolve(I)}catch(A){return Promise.reject(A)}}})); diff --git a/frontend/node_modules/hash-wasm/dist/sm3.umd.min.js b/frontend/node_modules/hash-wasm/dist/sm3.umd.min.js new file mode 100644 index 0000000..f024d27 --- /dev/null +++ b/frontend/node_modules/hash-wasm/dist/sm3.umd.min.js @@ -0,0 +1,7 @@ +/*! + * hash-wasm (https://www.npmjs.com/package/hash-wasm) + * (c) Dani Biro + * @license MIT + */ + +!function(A,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports):"function"==typeof define&&define.amd?define(["exports"],e):e((A="undefined"!=typeof globalThis?globalThis:A||self).hashwasm=A.hashwasm||{})}(this,(function(A){"use strict";var e,Q={name:"sm3",data:"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",hash:"b6fb4b8e"};function B(A,e,Q,B){return new(Q||(Q=Promise))((function(t,g){function i(A){try{I(B.next(A))}catch(A){g(A)}}function C(A){try{I(B.throw(A))}catch(A){g(A)}}function I(A){var e;A.done?t(A.value):(e=A.value,e instanceof Q?e:new Q((function(A){A(e)}))).then(i,C)}I((B=B.apply(A,e||[])).next())}))}"function"==typeof SuppressedError&&SuppressedError;class t{constructor(){this.mutex=Promise.resolve()}lock(){let A=()=>{};return this.mutex=this.mutex.then((()=>new Promise(A))),new Promise((e=>{A=e}))}dispatch(A){return B(this,void 0,void 0,(function*(){const e=yield this.lock();try{return yield Promise.resolve(A())}finally{e()}}))}}const g="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:global,i=null!==(e=g.Buffer)&&void 0!==e?e:null,C=g.TextEncoder?new g.TextEncoder:null;function I(A,e){return(15&A)+(A>>6|A>>3&8)<<4|(15&e)+(e>>6|e>>3&8)}const n="a".charCodeAt(0)-10,o="0".charCodeAt(0);function E(A,e,Q){let B=0;for(let t=0;t>>4;A[B++]=Q>9?Q+n:Q+o,Q=15&e[t],A[B++]=Q>9?Q+n:Q+o}return String.fromCharCode.apply(null,A)}const r=null!==i?A=>{if("string"==typeof A){const e=i.from(A,"utf8");return new Uint8Array(e.buffer,e.byteOffset,e.length)}if(i.isBuffer(A))return new Uint8Array(A.buffer,A.byteOffset,A.length);if(ArrayBuffer.isView(A))return new Uint8Array(A.buffer,A.byteOffset,A.byteLength);throw new Error("Invalid data type!")}:A=>{if("string"==typeof A)return C.encode(A);if(ArrayBuffer.isView(A))return new Uint8Array(A.buffer,A.byteOffset,A.byteLength);throw new Error("Invalid data type!")},h="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",a=new Uint8Array(256);for(let A=0;A>4,t+=1,B[t]=(15&g)<<4|i>>2,t+=1,B[t]=(3&i)<<6|63&C,t+=1}return B}const s=16384,d=new t,y=new Map;function l(A,e){return B(this,void 0,void 0,(function*(){let Q=null,t=null,g=!1;if("undefined"==typeof WebAssembly)throw new Error("WebAssembly is not supported in this environment!");const i=()=>new DataView(Q.exports.memory.buffer).getUint32(Q.exports.STATE_SIZE,!0),C=d.dispatch((()=>B(this,void 0,void 0,(function*(){if(!y.has(A.name)){const e=c(A.data),Q=WebAssembly.compile(e);y.set(A.name,Q)}const e=yield y.get(A.name);Q=yield WebAssembly.instantiate(e,{})})))),n=(A=null)=>{g=!0,Q.exports.Hash_Init(A)},o=A=>{if(!g)throw new Error("update() called before init()");(A=>{let e=0;for(;e{if(!g)throw new Error("digest() called before init()");return g=!1,Q.exports.Hash_Final(B),"binary"===A?t.slice(0,e):E(h,t,e)},l=A=>"string"==typeof A?A.length<4096:A.byteLength!0;break;case"blake2b":case"blake2s":D=(A,e)=>e<=512&&l(A);break;case"blake3":D=(A,e)=>0===e&&l(A);break;case"xxhash64":case"xxhash3":case"xxhash128":case"crc64":D=()=>!1}return yield(()=>B(this,void 0,void 0,(function*(){Q||(yield C);const A=Q.exports.Hash_GetBuffer(),e=Q.exports.memory.buffer;t=new Uint8Array(e,A,s)})))(),{getMemory:()=>t,writeMemory:(A,e=0)=>{t.set(A,e)},getExports:()=>Q.exports,setMemorySize:A=>{Q.exports.Hash_SetMemorySize(A);const e=Q.exports.Hash_GetBuffer(),B=Q.exports.memory.buffer;t=new Uint8Array(B,e,A)},init:n,update:o,digest:a,save:()=>{if(!g)throw new Error("save() can only be called after init() and before digest()");const e=Q.exports.Hash_GetState(),B=i(),t=Q.exports.memory.buffer,C=new Uint8Array(t,e,B),n=new Uint8Array(4+B);return function(A,e){const Q=e.length>>1;for(let B=0;B{if(!(e instanceof Uint8Array))throw new Error("load() expects an Uint8Array generated by save()");const B=Q.exports.Hash_GetState(),t=i(),C=4+t,n=Q.exports.memory.buffer;if(e.length!==C)throw new Error(`Bad state length (expected ${C} bytes, got ${e.length})`);if(!function(A,e){if(A.length!==2*e.length)return!1;for(let Q=0;Q{if(!D(A,B))return n(B),o(A),a("hex",g);const i=r(A);return t.set(i),Q.exports.Hash_Calculate(i.length,B,g),E(h,t,e)},hashLength:e}}))}const D=new t;let f=null;A.createSM3=function(){return l(Q,32).then((A=>{A.init();const e={init:()=>(A.init(),e),update:Q=>(A.update(Q),e),digest:e=>A.digest(e),save:()=>A.save(),load:Q=>(A.load(Q),e),blockSize:64,digestSize:32};return e}))},A.sm3=function(A){if(null===f)return function(A,e,Q){return B(this,void 0,void 0,(function*(){const B=yield A.lock(),t=yield l(e,Q);return B(),t}))}(D,Q,32).then((e=>(f=e,f.calculate(A))));try{const e=f.calculate(A);return Promise.resolve(e)}catch(A){return Promise.reject(A)}}})); diff --git a/frontend/node_modules/hash-wasm/dist/whirlpool.umd.min.js b/frontend/node_modules/hash-wasm/dist/whirlpool.umd.min.js new file mode 100644 index 0000000..93b7663 --- /dev/null +++ b/frontend/node_modules/hash-wasm/dist/whirlpool.umd.min.js @@ -0,0 +1,7 @@ +/*! + * hash-wasm (https://www.npmjs.com/package/hash-wasm) + * (c) Dani Biro + * @license MIT + */ + +!function(A,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports):"function"==typeof define&&define.amd?define(["exports"],e):e((A="undefined"!=typeof globalThis?globalThis:A||self).hashwasm=A.hashwasm||{})}(this,(function(A){"use strict";var e,Q={name:"whirlpool",data:"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",hash:"8d8f6035"};function B(A,e,Q,B){return new(Q||(Q=Promise))((function(t,i){function I(A){try{o(B.next(A))}catch(A){i(A)}}function n(A){try{o(B.throw(A))}catch(A){i(A)}}function o(A){var e;A.done?t(A.value):(e=A.value,e instanceof Q?e:new Q((function(A){A(e)}))).then(I,n)}o((B=B.apply(A,e||[])).next())}))}"function"==typeof SuppressedError&&SuppressedError;class t{constructor(){this.mutex=Promise.resolve()}lock(){let A=()=>{};return this.mutex=this.mutex.then((()=>new Promise(A))),new Promise((e=>{A=e}))}dispatch(A){return B(this,void 0,void 0,(function*(){const e=yield this.lock();try{return yield Promise.resolve(A())}finally{e()}}))}}const i="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:global,I=null!==(e=i.Buffer)&&void 0!==e?e:null,n=i.TextEncoder?new i.TextEncoder:null;function o(A,e){return(15&A)+(A>>6|A>>3&8)<<4|(15&e)+(e>>6|e>>3&8)}const r="a".charCodeAt(0)-10,C="0".charCodeAt(0);function g(A,e,Q){let B=0;for(let t=0;t>>4;A[B++]=Q>9?Q+r:Q+C,Q=15&e[t],A[B++]=Q>9?Q+r:Q+C}return String.fromCharCode.apply(null,A)}const E=null!==I?A=>{if("string"==typeof A){const e=I.from(A,"utf8");return new Uint8Array(e.buffer,e.byteOffset,e.length)}if(I.isBuffer(A))return new Uint8Array(A.buffer,A.byteOffset,A.length);if(ArrayBuffer.isView(A))return new Uint8Array(A.buffer,A.byteOffset,A.byteLength);throw new Error("Invalid data type!")}:A=>{if("string"==typeof A)return n.encode(A);if(ArrayBuffer.isView(A))return new Uint8Array(A.buffer,A.byteOffset,A.byteLength);throw new Error("Invalid data type!")},a="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",s=new Uint8Array(256);for(let A=0;A>4,t+=1,B[t]=(15&i)<<4|I>>2,t+=1,B[t]=(3&I)<<6|63&n,t+=1}return B}const w=16384,h=new t,f=new Map;function l(A,e){return B(this,void 0,void 0,(function*(){let Q=null,t=null,i=!1;if("undefined"==typeof WebAssembly)throw new Error("WebAssembly is not supported in this environment!");const I=()=>new DataView(Q.exports.memory.buffer).getUint32(Q.exports.STATE_SIZE,!0),n=h.dispatch((()=>B(this,void 0,void 0,(function*(){if(!f.has(A.name)){const e=c(A.data),Q=WebAssembly.compile(e);f.set(A.name,Q)}const e=yield f.get(A.name);Q=yield WebAssembly.instantiate(e,{})})))),r=(A=null)=>{i=!0,Q.exports.Hash_Init(A)},C=A=>{if(!i)throw new Error("update() called before init()");(A=>{let e=0;for(;e{if(!i)throw new Error("digest() called before init()");return i=!1,Q.exports.Hash_Final(B),"binary"===A?t.slice(0,e):g(a,t,e)},l=A=>"string"==typeof A?A.length<4096:A.byteLength!0;break;case"blake2b":case"blake2s":k=(A,e)=>e<=512&&l(A);break;case"blake3":k=(A,e)=>0===e&&l(A);break;case"xxhash64":case"xxhash3":case"xxhash128":case"crc64":k=()=>!1}return yield(()=>B(this,void 0,void 0,(function*(){Q||(yield n);const A=Q.exports.Hash_GetBuffer(),e=Q.exports.memory.buffer;t=new Uint8Array(e,A,w)})))(),{getMemory:()=>t,writeMemory:(A,e=0)=>{t.set(A,e)},getExports:()=>Q.exports,setMemorySize:A=>{Q.exports.Hash_SetMemorySize(A);const e=Q.exports.Hash_GetBuffer(),B=Q.exports.memory.buffer;t=new Uint8Array(B,e,A)},init:r,update:C,digest:s,save:()=>{if(!i)throw new Error("save() can only be called after init() and before digest()");const e=Q.exports.Hash_GetState(),B=I(),t=Q.exports.memory.buffer,n=new Uint8Array(t,e,B),r=new Uint8Array(4+B);return function(A,e){const Q=e.length>>1;for(let B=0;B{if(!(e instanceof Uint8Array))throw new Error("load() expects an Uint8Array generated by save()");const B=Q.exports.Hash_GetState(),t=I(),n=4+t,r=Q.exports.memory.buffer;if(e.length!==n)throw new Error(`Bad state length (expected ${n} bytes, got ${e.length})`);if(!function(A,e){if(A.length!==2*e.length)return!1;for(let Q=0;Q{if(!k(A,B))return r(B),C(A),s("hex",i);const I=E(A);return t.set(I),Q.exports.Hash_Calculate(I.length,B,i),g(a,t,e)},hashLength:e}}))}const k=new t;let D=null;A.createWhirlpool=function(){return l(Q,64).then((A=>{A.init();const e={init:()=>(A.init(),e),update:Q=>(A.update(Q),e),digest:e=>A.digest(e),save:()=>A.save(),load:Q=>(A.load(Q),e),blockSize:64,digestSize:64};return e}))},A.whirlpool=function(A){if(null===D)return function(A,e,Q){return B(this,void 0,void 0,(function*(){const B=yield A.lock(),t=yield l(e,Q);return B(),t}))}(k,Q,64).then((e=>(D=e,D.calculate(A))));try{const e=D.calculate(A);return Promise.resolve(e)}catch(A){return Promise.reject(A)}}})); diff --git a/frontend/node_modules/hash-wasm/dist/xxhash128.umd.min.js b/frontend/node_modules/hash-wasm/dist/xxhash128.umd.min.js new file mode 100644 index 0000000..cfc4e71 --- /dev/null +++ b/frontend/node_modules/hash-wasm/dist/xxhash128.umd.min.js @@ -0,0 +1,7 @@ +/*! + * hash-wasm (https://www.npmjs.com/package/hash-wasm) + * (c) Dani Biro + * @license MIT + */ + +!function(A,I){"object"==typeof exports&&"undefined"!=typeof module?I(exports):"function"==typeof define&&define.amd?define(["exports"],I):I((A="undefined"!=typeof globalThis?globalThis:A||self).hashwasm=A.hashwasm||{})}(this,(function(A){"use strict";var I,C={name:"xxhash128",data:"AGFzbQEAAAABKwdgAAF/YAR/f39/AGAHf39/f39/fwBgA39/fgF+YAR/f39+AGAAAGABfwADDQwAAQIDBAQEBQYFAAUFBAEBAgIGDgJ/AUHAjgULfwBBwAkLB3AIBm1lbW9yeQIADkhhc2hfR2V0QnVmZmVyAAAJSGFzaF9Jbml0AAcLSGFzaF9VcGRhdGUACApIYXNoX0ZpbmFsAAkNSGFzaF9HZXRTdGF0ZQAKDkhhc2hfQ2FsY3VsYXRlAAsKU1RBVEVfU0laRQMBCqBNDAUAQYAKC+QDAw9+AX8BfgJAIANFDQAgACkDMCEEIAApAzghBSAAKQMgIQYgACkDKCEHIAApAxAhCCAAKQMYIQkgACkDACEKIAApAwghCwNAIAUgAUEwaikDACIMfCACQThqKQMAIAFBOGopAwAiDYUiBUIgiCAFQv////8Pg358IQUgByABQSBqKQMAIg58IAJBKGopAwAgAUEoaikDACIPhSIHQiCIIAdC/////w+DfnwhByAJIAFBEGopAwAiEHwgAkEYaikDACABQRhqKQMAIhGFIglCIIggCUL/////D4N+fCEJIAsgASkDACISfCACQQhqIhMpAwAgAUEIaikDACIUhSILQiCIIAtC/////w+DfnwhCyACQTBqKQMAIAyFIgxCIIggDEL/////D4N+IAR8IA18IQQgAkEgaikDACAOhSIMQiCIIAxC/////w+DfiAGfCAPfCEGIAJBEGopAwAgEIUiDEIgiCAMQv////8Pg34gCHwgEXwhCCACKQMAIBKFIgxCIIggDEL/////D4N+IAp8IBR8IQogAUHAAGohASATIQIgA0F/aiIDDQALIAAgCTcDGCAAIAo3AwAgACALNwMIIAAgBzcDKCAAIAg3AxAgACAFNwM4IAAgBjcDICAAIAQ3AzALC94CAgF/AX4CQCAEIAIgASgCACIHayICSQ0AIAAgAyAFIAdBA3RqIAIQASAAIAUgBmoiBykDACAAKQMAIghCL4iFIAiFQrHz3fEJfjcDACAAIAcpAwggACkDCCIIQi+IhSAIhUKx893xCX43AwggACAHKQMQIAApAxAiCEIviIUgCIVCsfPd8Ql+NwMQIAAgBykDGCAAKQMYIghCL4iFIAiFQrHz3fEJfjcDGCAAIAcpAyAgACkDICIIQi+IhSAIhUKx893xCX43AyAgACAHKQMoIAApAygiCEIviIUgCIVCsfPd8Ql+NwMoIAAgBykDMCAAKQMwIghCL4iFIAiFQrHz3fEJfjcDMCAAIAcpAzggACkDOCIIQi+IhSAIhUKx893xCX43AzggACADIAJBBnRqIAUgBCACayIHEAEgASAHNgIADwsgACADIAUgB0EDdGogBBABIAEgByAEajYCAAvtAwEFfiABKQM4IAApAziFIgNC/////w+DIgQgASkDMCAAKQMwhSIFQiCIIgZ+IgdC/////w+DIANCIIgiAyAFQv////8PgyIFfnwgBCAFfiIEQiCIfCIFQiCGIARC/////w+DhCAHQiCIIAMgBn58IAVCIIh8hSABKQMoIAApAyiFIgNC/////w+DIgQgASkDICAAKQMghSIFQiCIIgZ+IgdC/////w+DIANCIIgiAyAFQv////8PgyIFfnwgBCAFfiIEQiCIfCIFQiCGIARC/////w+DhCAHQiCIIAMgBn58IAVCIIh8hSABKQMYIAApAxiFIgNC/////w+DIgQgASkDECAAKQMQhSIFQiCIIgZ+IgdC/////w+DIANCIIgiAyAFQv////8PgyIFfnwgBCAFfiIEQiCIfCIFQiCGIARC/////w+DhCAHQiCIIAMgBn58IAVCIIh8hSABKQMIIAApAwiFIgNC/////w+DIgQgASkDACAAKQMAhSIFQiCIIgZ+IgdC/////w+DIANCIIgiAyAFQv////8PgyIFfnwgBCAFfiIEQiCIfCIFQiCGIARC/////w+DhCAHQiCIIAMgBn58IAVCIIh8hSACfHx8fCICQiWIIAKFQvnz3fGZ8pmrFn4iAkIgiCAChQu6CAIFfgN/AkAgAUEJSQ0AIAAgAUH4iwFqKQMAIgQgAikDOCACKQMwhSADfIUiBUL/////D4NC95Svrwh+IAVCgICAgHCDfEEAKQOAjAEgAikDKCACKQMghSADfYUgBIUiA0IgiCIEQrHz3fEJfnwgBEKHla+vCH4iBEIgiHwgBEL/////D4MgA0L/////D4MiA0Kx893xCX58IANCh5Wvrwh+IgRCIIh8IgVCIIh8IgNCOIYgA0KA/gODQiiGhCADQoCA/AeDQhiGIANCgICA+A+DQgiGhIQgA0IIiEKAgID4D4MgA0IYiEKAgPwHg4QgA0IoiEKA/gODIANCOIiEhIQgBEL/////D4MgAUF/aq1CNoaEIAVCIIZ8hSIEQiCIIgVCz9bTvgJ+IgZC/////w+DIARC/////w+DIgRCvdzKlQx+fCAEQs/W074CfiIEQiCIfCIHQiCGIghCJYggCCAEQv////8Pg4SFQvnz3fGZ8pmrFn4iBEIgiCAEhTcDACAAIAVCvdzKlQx+IANCz9bTvtLHq9lCfnwgBkIgiHwgB0IgiHwiA0IliCADhUL5893xmfKZqxZ+IgNCIIggA4U3AwgPCwJAIAFBBEkNACAAIAIpAxggAikDEIUgA6ciAkEYdCACQYD+A3FBCHRyIAJBCHZBgP4DcSACQRh2cnKtQiCGIAOFfCABQfyLAWo1AgBCIIZBADUCgIwBhIUiA0IgiCIEIAFBAnRBh5Wvr3hqrSIFfiIGQiCIIARCsfPd8Ql+fCAGQv////8PgyADQv////8PgyIDQrHz3fEJfnwgAyAFfiIDQiCIfCIEQiCIfCAEQiCGIANC/////w+DhCIEQgGGfCIDQiWIIAOFQvnz3fGZ8pmrFn4iBUIgiCAFhTcDCCAAIANCA4ggBIUiA0IjiCADhUKlvuP00YyH2Z9/fiIDQhyIIAOFNwMADwsCQCABRQ0AIAAgAigCBCACKAIAc60gA3wiBEIhiEEALQCAjAFBEHQgAUEIdHIiCSABQQF2QYCMAWotAABBGHRyIgogAUH/iwFqLQAAIgFyIguthSAEhULP1tO+0ser2UJ+IgRCHYggBIVC+fPd8Zn2masWfiIEQiCIIASFNwMAIAAgAigCDCACKAIIc60gA30iA0IhiCABQRh0IAtBgP4DcUEIdHIgCUEIdkGA/gNxIApBGHZyckENd62FIAOFQs/W077Sx6vZQn4iA0IdiCADhUL5893xmfaZqxZ+IgNCIIggA4U3AwgPCyAAIAIpA1AgAikDWIUgA4UiBEIhiCAEhULP1tO+0ser2UJ+IgRCHYggBIVC+fPd8Zn2masWfiIEQiCIIASFNwMIIAAgAikDQCACKQNIhSADhSIDQiGIIAOFQs/W077Sx6vZQn4iA0IdiCADhUL5893xmfaZqxZ+IgNCIIggA4U3AwALwwoBCn4gAa0iBEKHla+vmLbem55/fiEFAkACQCABQSFPDQBCACEGDAELQgAhBwJAIAFBwQBJDQBCACEHAkAgAUHhAEkNACACQfgAaikDACADfSABQciLAWopAwAiCIUiB0L/////D4MiCSACKQNwIAN8IAFBwIsBaikDACIKhSILQiCIIgx+Ig1CIIggB0IgiCIHIAx+fCANQv////8PgyAHIAtC/////w+DIgt+fCAJIAt+IgdCIIh8IglCIIh8QQApA7iMASILQQApA7CMASIMfIUgCUIghiAHQv////8Pg4SFIQcgAkHoAGopAwAgA30gC4UiCUL/////D4MiCyACKQNgIAN8IAyFIgxCIIgiDX4iBkL/////D4MgCUIgiCIJIAxC/////w+DIgx+fCALIAx+IgtCIIh8IgxCIIYgC0L/////D4OEIAZCIIggCSANfnwgDEIgiHyFIAV8IAggCnyFIQULIAJB2ABqKQMAIAN9IAFB2IsBaikDACIIhSIJQv////8PgyIKIAIpA1AgA3wgAUHQiwFqKQMAIguFIgxCIIgiDX4iBkL/////D4MgCUIgiCIJIAxC/////w+DIgx+fCAKIAx+IgpCIIh8IgxCIIYgCkL/////D4OEIAZCIIggCSANfnwgDEIgiHyFIAd8QQApA6iMASIJQQApA6CMASIKfIUhByACQcgAaikDACADfSAJhSIJQv////8PgyIMIAIpA0AgA3wgCoUiCkIgiCINfiIGQv////8PgyAJQiCIIgkgCkL/////D4MiCn58IAwgCn4iCkIgiHwiDEIghiAKQv////8Pg4QgBkIgiCAJIA1+fCAMQiCIfIUgBXwgCCALfIUhBQsgAkE4aikDACADfSABQeiLAWopAwAiCIUiCUL/////D4MiCiACKQMwIAN8IAFB4IsBaikDACILhSIMQiCIIg1+IgZC/////w+DIAlCIIgiCSAMQv////8PgyIMfnwgCiAMfiIKQiCIfCIMQiCGIApC/////w+DhCAGQiCIIAkgDX58IAxCIIh8hSAHfEEAKQOYjAEiB0EAKQOQjAEiCXyFIQYgAkEoaikDACADfSAHhSIHQv////8PgyIKIAIpAyAgA3wgCYUiCUIgiCIMfiINQv////8PgyAHQiCIIgcgCUL/////D4MiCX58IAogCX4iCUIgiHwiCkIghiAJQv////8Pg4QgDUIgiCAHIAx+fCAKQiCIfIUgBXwgCCALfIUhBQsgACACQRhqKQMAIAN9IAFB+IsBaikDACIHhSIIQv////8PgyIJIAIpAxAgA3wgAUHwiwFqKQMAIgqFIgtCIIgiDH4iDUL/////D4MgCEIgiCIIIAtC/////w+DIgt+fCAJIAt+IglCIIh8IgtCIIYgCUL/////D4OEIA1CIIggCCAMfnwgC0IgiHyFIAZ8QQApA4iMASIIQQApA4CMASIJfIUiCyACQQhqKQMAIAN9IAiFIghC/////w+DIgwgAikDACADfCAJhSIJQiCIIg1+IgZC/////w+DIAhCIIgiCCAJQv////8PgyIJfnwgDCAJfiIJQiCIfCIMQiCGIAlC/////w+DhCAGQiCIIAggDX58IAxCIIh8hSAFfCAHIAp8hSIFfCIHQiWIIAeFQvnz3fGZ8pmrFn4iB0IgiCAHhTcDACAAQgAgBUKHla+vmLbem55/fiAEIAN9Qs/W077Sx6vZQn58IAtC49zKlfzO8vWFf358IgNCJYggA4VC+fPd8ZnymasWfiIDQiCIIAOFfTcDCAuhDwMBfxR+An9BACEEIAJB+ABqKQMAIAN9QQApA/iMASIFhSIGQv////8PgyIHIAIpA3AgA3xBACkD8IwBIgiFIglCIIgiCn4iC0L/////D4MgBkIgiCIGIAlC/////w+DIgl+fCAHIAl+IgdCIIh8IglCIIYgB0L/////D4OEIAtCIIggBiAKfnwgCUIgiHyFIAJB2ABqKQMAIAN9QQApA9iMASIHhSIGQv////8PgyIJIAIpA1AgA3xBACkD0IwBIgqFIgtCIIgiDH4iDUL/////D4MgBkIgiCIGIAtC/////w+DIgt+fCAJIAt+IglCIIh8IgtCIIYgCUL/////D4OEIA1CIIggBiAMfnwgC0IgiHyFIAJBOGopAwAgA31BACkDuIwBIgmFIgZC/////w+DIgsgAikDMCADfEEAKQOwjAEiDIUiDUIgiCIOfiIPQv////8PgyAGQiCIIgYgDUL/////D4MiDX58IAsgDX4iC0IgiHwiDUIghiALQv////8Pg4QgD0IgiCAGIA5+fCANQiCIfIUgAkEYaikDACADfUEAKQOYjAEiC4UiBkL/////D4MiDSACKQMQIAN8QQApA5CMASIOhSIPQiCIIhB+IhFC/////w+DIAZCIIgiBiAPQv////8PgyIPfnwgDSAPfiINQiCIfCIPQiCGIA1C/////w+DhCARQiCIIAYgEH58IA9CIIh8hUEAKQOIjAEiDUEAKQOAjAEiD3yFfEEAKQOojAEiEEEAKQOgjAEiEXyFfEEAKQPIjAEiEkEAKQPAjAEiE3yFfEEAKQPojAEiFEEAKQPgjAEiFXyFIgZCJYggBoVC+fPd8ZnymasWfiIGQiCIIAaFIQYgAkHoAGopAwAgA30gFIUiFEL/////D4MiFiACKQNgIAN8IBWFIhVCIIgiF34iGEL/////D4MgFEIgiCIUIBVC/////w+DIhV+fCAWIBV+IhVCIIh8IhZCIIYgFUL/////D4OEIBhCIIggFCAXfnwgFkIgiHyFIAJByABqKQMAIAN9IBKFIhJC/////w+DIhQgAikDQCADfCAThSITQiCIIhV+IhZC/////w+DIBJCIIgiEiATQv////8PgyITfnwgFCATfiITQiCIfCIUQiCGIBNC/////w+DhCAWQiCIIBIgFX58IBRCIIh8hSACQShqKQMAIAN9IBCFIhBC/////w+DIhIgAikDICADfCARhSIRQiCIIhN+IhRC/////w+DIBBCIIgiECARQv////8PgyIRfnwgEiARfiIRQiCIfCISQiCGIBFC/////w+DhCAUQiCIIBAgE358IBJCIIh8hSACQQhqKQMAIAN9IA2FIg1C/////w+DIhAgAikDACADfCAPhSIPQiCIIhF+IhJC/////w+DIA1CIIgiDSAPQv////8PgyIPfnwgECAPfiIPQiCIfCIQQiCGIA9C/////w+DhCASQiCIIA0gEX58IBBCIIh8hSABrSIPQoeVr6+Ytt6bnn9+fCALIA58hXwgCSAMfIV8IAcgCnyFfCAFIAh8hSIFQiWIIAWFQvnz3fGZ8pmrFn4iBUIgiCAFhSEFAkAgAUGgAUgNACABQQV2QXxqIRkDQCACIARqIhpBG2opAwAgA30gBEGYjQFqKQMAIgeFIghC/////w+DIgkgGkETaikDACADfCAEQZCNAWopAwAiCoUiC0IgiCIMfiINQv////8PgyAIQiCIIgggC0L/////D4MiC358IAkgC34iCUIgiHwiC0IghiAJQv////8Pg4QgDUIgiCAIIAx+fCALQiCIfIUgBnwgBEGIjQFqKQMAIgggBEGAjQFqKQMAIgl8hSEGIBpBC2opAwAgA30gCIUiCEL/////D4MiCyAaQQNqKQMAIAN8IAmFIglCIIgiDH4iDUL/////D4MgCEIgiCIIIAlC/////w+DIgl+fCALIAl+IglCIIh8IgtCIIYgCUL/////D4OEIA1CIIggCCAMfnwgC0IgiHyFIAV8IAcgCnyFIQUgBEEgaiEEIBlBf2oiGQ0ACwsgACACQf8AaikDACADfCABQeiLAWopAwAiB4UiCEL/////D4MiCSACKQN3IAN9IAFB4IsBaikDACIKhSILQiCIIgx+Ig1C/////w+DIAhCIIgiCCALQv////8PgyILfnwgCSALfiIJQiCIfCILQiCGIAlC/////w+DhCANQiCIIAggDH58IAtCIIh8hSAGfCABQfiLAWopAwAiBiABQfCLAWopAwAiCHyFIgkgAkHvAGopAwAgA3wgBoUiBkL/////D4MiCyACKQNnIAN9IAiFIghCIIgiDH4iDUL/////D4MgBkIgiCIGIAhC/////w+DIgh+fCALIAh+IghCIIh8IgtCIIYgCEL/////D4OEIA1CIIggBiAMfnwgC0IgiHyFIAV8IAcgCnyFIgZ8IgVCJYggBYVC+fPd8ZnymasWfiIFQiCIIAWFNwMAIABCACAGQoeVr6+Ytt6bnn9+IA8gA31Cz9bTvtLHq9lCfnwgCULj3MqV/M7y9YV/fnwiA0IliCADhUL5893xmfKZqxZ+IgNCIIggA4V9NwMIC98FAgF+AX8CQAJAQQApA4AKIgBQRQ0AQYAIIQFCACEADAELAkBBACkDoI4BIABSDQBBACEBDAELQQAhAUEAQq+v79e895Kg/gAgAH03A/iLAUEAIABCxZbr+djShYIofDcD8IsBQQBCj/Hjja2P9JhOIAB9NwPoiwFBACAAQqus+MXV79HQfHw3A+CLAUEAQtOt1LKShbW0nn8gAH03A9iLAUEAIABCl5r0jvWWvO3JAHw3A9CLAUEAQsWDgv2v/8SxayAAfTcDyIsBQQAgAELqi7OdyOb09UN8NwPAiwFBAELIv/rLnJveueQAIAB9NwO4iwFBACAAQoqjgd/Ume2sMXw3A7CLAUEAQvm57738+MKnHSAAfTcDqIsBQQAgAEKo9dv7s5ynmj98NwOgiwFBAEK4sry3lNW31lggAH03A5iLAUEAIABC8cihuqm0w/zOAHw3A5CLAUEAQoihl9u445SXo38gAH03A4iL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AkHAAGogDGohC0GAjAEhAAJAAkACQCAHQQhJDQACQCAHQThqQQN2QQFqQQdxIg0NAAwCCyANQQN0IQ5BgIwBIQADQCALIAApAwA3AwAgC0EIaiELIABBCGohACANQX9qIg0NAAsgByAOayEHCyAHRQ0BAkACQCAHQQdxIg4NACAHIQ0MAQsgB0F4cSENA0AgCyAALQAAOgAAIAtBAWohCyAAQQFqIQAgDkF/aiIODQALCyAHQQhJDQELA0AgCyAAKQAANwAAIAtBCGohCyAAQQhqIQAgDUF4aiINDQALCyACIAIpAwggAikDQCIIfCADQQAoApyOAWoiACkDASACKQNIIgmFIgpCIIggCkL/////D4N+fDcDCCACIAIpAxggAikDUCIKfCAAKQMRIAIpA1giEIUiEUIgiCARQv////8Pg358NwMYIAIgECAKIAApAwmFIgpCIIggCkL/////D4N+IAIpAxB8fDcDECACIAkgCCAAQXlqKQMAhSIIQiCIIAhC/////w+DfiACKQMAfHw3AwAgACkDGSEIIAIpAyAhCSACIAIpAyggAikDYCIKfCAAKQMhIAIpA2giEIUiEUIgiCARQv////8Pg358NwMoIAIgECAJIAggCoUiCEIgiCAIQv////8Pg358fDcDICACIAYgAikDcCIIfCAAKQMxIAIpA3giBoUiCUIgiCAJQv////8Pg358NwM4IAIgBiAIIAApAymFIghCIIggCEL/////D4N+IAV8fDcDMAsgAiACIANBC2ogBEKHla+vmLbem55/fhADNwNAIAIgAiADQQAoApyOAWpBdWogBELP1tO+0ser2UJ+Qn+FEAM3A0gMAQsgBKchAAJAQQApA6COASIEUA0AAkAgAEEQSw0AIAJBwABqIABBgAggBBAEDAILAkAgAEGAAUsNACACQcAAaiAAQYAIIAQQBQwCCyACQcAAaiAAQYAIIAQQBgwBCwJAIABBEEsNACACQcAAaiAAIANCABAEDAELAkAgAEGAAUsNACACQcAAaiAAIANCABAFDAELIAJBwABqIAAgA0IAEAYLQQAgAikDcDcDuApBACACKQNgNwOoCkEAIAIpA1A3A5gKQQAgAkH4AGopAwA3A8AKQQAgAkHoAGopAwA3A7AKQQAgAkHYAGopAwA3A6AKQQAgAikDSCIEQjiGIARCgP4Dg0IohoQgBEKAgPwHg0IYhiAEQoCAgPgPg0IIhoSEIARCCIhCgICA+A+DIARCGIhCgID8B4OEIARCKIhCgP4DgyAEQjiIhISEIgQ3A4AKQQAgBDcDkApBACACKQNAIgRCOIYgBEKA/gODQiiGhCAEQoCA/AeDQhiGIARCgICA+A+DQgiGhIQgBEIIiEKAgID4D4MgBEIYiEKAgPwHg4QgBEIoiEKA/gODIARCOIiEhIQ3A4gKIAEkAAsGAEGAigELAgALC8wBAQBBgAgLxAG4/mw5I6RLvnwBgSz3Ia0c3tRt6YOQl9tyQKSkt7NnH8t55k7MwOV4glrQfcz/ciG4CEZ090MkjuA1kOaBOiZMPChSu5HDAMuI0GWLG1Muo3FkSJeiDflOOBnvRqnerNio+nY/45w0P/ncu8fHC08dilHgS820WTHIn37J2XhzZOrFrIM00+vDxYGg//oTY+sXDd1Rt/DaSdMWVSYp1GieKxa+WH1HofyP+LjRetAxzkXLOo+VFgQor9f7yrtLQH5AAgAA",hash:"b9ab74e2"};function g(A,I,C,g){return new(C||(C=Promise))((function(i,Q){function B(A){try{e(g.next(A))}catch(A){Q(A)}}function D(A){try{e(g.throw(A))}catch(A){Q(A)}}function e(A){var I;A.done?i(A.value):(I=A.value,I instanceof C?I:new C((function(A){A(I)}))).then(B,D)}e((g=g.apply(A,I||[])).next())}))}"function"==typeof SuppressedError&&SuppressedError;class i{constructor(){this.mutex=Promise.resolve()}lock(){let A=()=>{};return this.mutex=this.mutex.then((()=>new Promise(A))),new Promise((I=>{A=I}))}dispatch(A){return g(this,void 0,void 0,(function*(){const I=yield this.lock();try{return yield Promise.resolve(A())}finally{I()}}))}}const Q="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:global,B=null!==(I=Q.Buffer)&&void 0!==I?I:null,D=Q.TextEncoder?new Q.TextEncoder:null;function e(A,I){return(15&A)+(A>>6|A>>3&8)<<4|(15&I)+(I>>6|I>>3&8)}const t="a".charCodeAt(0)-10,E="0".charCodeAt(0);function w(A,I,C){let g=0;for(let i=0;i>>4;A[g++]=C>9?C+t:C+E,C=15&I[i],A[g++]=C>9?C+t:C+E}return String.fromCharCode.apply(null,A)}const n=null!==B?A=>{if("string"==typeof A){const I=B.from(A,"utf8");return new Uint8Array(I.buffer,I.byteOffset,I.length)}if(B.isBuffer(A))return new Uint8Array(A.buffer,A.byteOffset,A.length);if(ArrayBuffer.isView(A))return new Uint8Array(A.buffer,A.byteOffset,A.byteLength);throw new Error("Invalid data type!")}:A=>{if("string"==typeof A)return D.encode(A);if(ArrayBuffer.isView(A))return new Uint8Array(A.buffer,A.byteOffset,A.byteLength);throw new Error("Invalid data type!")},h="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",o=new Uint8Array(256);for(let A=0;A>4,i+=1,g[i]=(15&Q)<<4|B>>2,i+=1,g[i]=(3&B)<<6|63&D,i+=1}return g}const r=16384,s=new i,a=new Map;function F(A,I){return g(this,void 0,void 0,(function*(){let C=null,i=null,Q=!1;if("undefined"==typeof WebAssembly)throw new Error("WebAssembly is not supported in this environment!");const B=()=>new DataView(C.exports.memory.buffer).getUint32(C.exports.STATE_SIZE,!0),D=s.dispatch((()=>g(this,void 0,void 0,(function*(){if(!a.has(A.name)){const I=f(A.data),C=WebAssembly.compile(I);a.set(A.name,C)}const I=yield a.get(A.name);C=yield WebAssembly.instantiate(I,{})})))),t=(A=null)=>{Q=!0,C.exports.Hash_Init(A)},E=A=>{if(!Q)throw new Error("update() called before init()");(A=>{let I=0;for(;I{if(!Q)throw new Error("digest() called before init()");return Q=!1,C.exports.Hash_Final(g),"binary"===A?i.slice(0,I):w(h,i,I)},F=A=>"string"==typeof A?A.length<4096:A.byteLength!0;break;case"blake2b":case"blake2s":c=(A,I)=>I<=512&&F(A);break;case"blake3":c=(A,I)=>0===I&&F(A);break;case"xxhash64":case"xxhash3":case"xxhash128":case"crc64":c=()=>!1}return yield(()=>g(this,void 0,void 0,(function*(){C||(yield D);const A=C.exports.Hash_GetBuffer(),I=C.exports.memory.buffer;i=new Uint8Array(I,A,r)})))(),{getMemory:()=>i,writeMemory:(A,I=0)=>{i.set(A,I)},getExports:()=>C.exports,setMemorySize:A=>{C.exports.Hash_SetMemorySize(A);const I=C.exports.Hash_GetBuffer(),g=C.exports.memory.buffer;i=new Uint8Array(g,I,A)},init:t,update:E,digest:o,save:()=>{if(!Q)throw new Error("save() can only be called after init() and before digest()");const I=C.exports.Hash_GetState(),g=B(),i=C.exports.memory.buffer,D=new Uint8Array(i,I,g),t=new Uint8Array(4+g);return function(A,I){const C=I.length>>1;for(let g=0;g{if(!(I instanceof Uint8Array))throw new Error("load() expects an Uint8Array generated by save()");const g=C.exports.Hash_GetState(),i=B(),D=4+i,t=C.exports.memory.buffer;if(I.length!==D)throw new Error(`Bad state length (expected ${D} bytes, got ${I.length})`);if(!function(A,I){if(A.length!==2*I.length)return!1;for(let C=0;C{if(!c(A,g))return t(g),E(A),o("hex",Q);const B=n(A);return i.set(B),C.exports.Hash_Calculate(B.length,g,Q),w(h,i,I)},hashLength:I}}))}const c=new i;let y=null;const M=new Uint8Array(8);function k(A){return!Number.isInteger(A)||A<0||A>4294967295?new Error("Seed must be given as two valid 32-bit long unsigned integers (lo + high)."):null}function N(A,I,C){const g=new DataView(A);g.setUint32(0,I,!0),g.setUint32(4,C,!0)}A.createXXHash128=function(A=0,I=0){return k(A)?Promise.reject(k(A)):k(I)?Promise.reject(k(I)):F(C,16).then((C=>{const g=new Uint8Array(8);N(g.buffer,A,I),C.writeMemory(g),C.init();const i={init:()=>(C.writeMemory(g),C.init(),i),update:A=>(C.update(A),i),digest:A=>C.digest(A),save:()=>C.save(),load:A=>(C.load(A),i),blockSize:512,digestSize:16};return i}))},A.xxhash128=function(A,I=0,i=0){if(k(I))return Promise.reject(k(I));if(k(i))return Promise.reject(k(i));if(null===y)return function(A,I,C){return g(this,void 0,void 0,(function*(){const g=yield A.lock(),i=yield F(I,C);return g(),i}))}(c,C,16).then((C=>(y=C,N(M.buffer,I,i),y.writeMemory(M),y.calculate(A))));try{N(M.buffer,I,i),y.writeMemory(M);const C=y.calculate(A);return Promise.resolve(C)}catch(A){return Promise.reject(A)}}})); diff --git a/frontend/node_modules/hash-wasm/dist/xxhash3.umd.min.js b/frontend/node_modules/hash-wasm/dist/xxhash3.umd.min.js new file mode 100644 index 0000000..bdcb698 --- /dev/null +++ b/frontend/node_modules/hash-wasm/dist/xxhash3.umd.min.js @@ -0,0 +1,7 @@ +/*! + * hash-wasm (https://www.npmjs.com/package/hash-wasm) + * (c) Dani Biro + * @license MIT + */ + +!function(A,I){"object"==typeof exports&&"undefined"!=typeof module?I(exports):"function"==typeof define&&define.amd?define(["exports"],I):I((A="undefined"!=typeof globalThis?globalThis:A||self).hashwasm=A.hashwasm||{})}(this,(function(A){"use strict";var I,g={name:"xxhash3",data:"AGFzbQEAAAABNAhgAAF/YAR/f39/AGAHf39/f39/fwBgBH9+fn4BfmAEf39/fgF+YAN/f34BfmAAAGABfwADDg0AAQIDBAUFBQYHBgAGBQQBAQICBg4CfwFBwI4FC38AQcAJCwdwCAZtZW1vcnkCAA5IYXNoX0dldEJ1ZmZlcgAACUhhc2hfSW5pdAAIC0hhc2hfVXBkYXRlAAkKSGFzaF9GaW5hbAAKDUhhc2hfR2V0U3RhdGUACw5IYXNoX0NhbGN1bGF0ZQAMClNUQVRFX1NJWkUDAQr6QQ0FAEGACgvkAwMPfgF/AX4CQCADRQ0AIAApAzAhBCAAKQM4IQUgACkDICEGIAApAyghByAAKQMQIQggACkDGCEJIAApAwAhCiAAKQMIIQsDQCAFIAFBMGopAwAiDHwgAkE4aikDACABQThqKQMAIg2FIgVCIIggBUL/////D4N+fCEFIAcgAUEgaikDACIOfCACQShqKQMAIAFBKGopAwAiD4UiB0IgiCAHQv////8Pg358IQcgCSABQRBqKQMAIhB8IAJBGGopAwAgAUEYaikDACIRhSIJQiCIIAlC/////w+DfnwhCSALIAEpAwAiEnwgAkEIaiITKQMAIAFBCGopAwAiFIUiC0IgiCALQv////8Pg358IQsgAkEwaikDACAMhSIMQiCIIAxC/////w+DfiAEfCANfCEEIAJBIGopAwAgDoUiDEIgiCAMQv////8Pg34gBnwgD3whBiACQRBqKQMAIBCFIgxCIIggDEL/////D4N+IAh8IBF8IQggAikDACAShSIMQiCIIAxC/////w+DfiAKfCAUfCEKIAFBwABqIQEgEyECIANBf2oiAw0ACyAAIAk3AxggACAKNwMAIAAgCzcDCCAAIAc3AyggACAINwMQIAAgBTcDOCAAIAY3AyAgACAENwMwCwveAgIBfwF+AkAgBCACIAEoAgAiB2siAkkNACAAIAMgBSAHQQN0aiACEAEgACAFIAZqIgcpAwAgACkDACIIQi+IhSAIhUKx893xCX43AwAgACAHKQMIIAApAwgiCEIviIUgCIVCsfPd8Ql+NwMIIAAgBykDECAAKQMQIghCL4iFIAiFQrHz3fEJfjcDECAAIAcpAxggACkDGCIIQi+IhSAIhUKx893xCX43AxggACAHKQMgIAApAyAiCEIviIUgCIVCsfPd8Ql+NwMgIAAgBykDKCAAKQMoIghCL4iFIAiFQrHz3fEJfjcDKCAAIAcpAzAgACkDMCIIQi+IhSAIhUKx893xCX43AzAgACAHKQM4IAApAzgiCEIviIUgCIVCsfPd8Ql+NwM4IAAgAyACQQZ0aiAFIAQgAmsiBxABIAEgBzYCAA8LIAAgAyAFIAdBA3RqIAQQASABIAcgBGo2AgALhQEBAX8gAiABhSADpyIEQRh0IARBgP4DcUEIdHIgBEEIdkGA/gNxIARBGHZycq1CIIYgA4V9QQA1AoCMAUIghiAAQfyLAWo1AgCEhSIDQjGJIANCGImFIAOFQqW+4/TRjIfZn39+IgNCI4ggAK18IAOFQqW+4/TRjIfZn39+IgNCHIggA4ULZwAgAiABc60gA3wiA0IhiEEALQCAjAFBEHQgAEEIdHIgAEEBdkGAjAFqLQAAQRh0ciAAQf+LAWotAAByrYUgA4VCz9bTvtLHq9lCfiIDQh2IIAOFQvnz3fGZ9pmrFn4iA0IgiCADhQuJAwEEfgJAIABBCUkNAEEAKQOAjAEgASkDICABKQMYhSACfIUiA0I4hiADQoD+A4NCKIaEIANCgID8B4NCGIYgA0KAgID4D4NCCIaEhCADQgiIQoCAgPgPgyADQhiIQoCA/AeDhCADQiiIQoD+A4MgA0I4iISEhCAArXwgAEH4iwFqKQMAIAEpAzAgASkDKIUgAn2FIgJ8IAJC/////w+DIgQgA0IgiCIFfiIGQv////8PgyACQiCIIgIgA0L/////D4MiA358IAQgA34iA0IgiHwiBEIghiADQv////8Pg4QgBkIgiCACIAV+fCAEQiCIfIV8IgNCJYggA4VC+fPd8ZnymasWfiIDQiCIIAOFDwsCQCAAQQRJDQAgACABQQhqKQMAIAFBEGopAwAgAhADDwsCQCAARQ0AIAAgASgCACABQQRqKAIAIAIQBA8LIAEpAzggASkDQIUgAoUiA0IhiCADhULP1tO+0ser2UJ+IgNCHYggA4VC+fPd8Zn2masWfiIDQiCIIAOFC94IAQZ+IACtQoeVr6+Ytt6bnn9+IQMCQCAAQSFJDQACQCAAQcEASQ0AAkAgAEHhAEkNACABKQNoIAJ9QQApA7iMAYUiBEL/////D4MiBSABKQNgIAJ8QQApA7CMAYUiBkIgiCIHfiIIQv////8PgyAEQiCIIgQgBkL/////D4MiBn58IAUgBn4iBUIgiHwiBkIghiAFQv////8Pg4QgCEIgiCAEIAd+fCAGQiCIfIUgA3wgASkDeCACfSAAQciLAWopAwCFIgNC/////w+DIgQgASkDcCACfCAAQcCLAWopAwCFIgVCIIgiBn4iB0L/////D4MgA0IgiCIDIAVC/////w+DIgV+fCAEIAV+IgRCIIh8IgVCIIYgBEL/////D4OEIAdCIIggAyAGfnwgBUIgiHyFfCEDCyABKQNIIAJ9QQApA6iMAYUiBEL/////D4MiBSABKQNAIAJ8QQApA6CMAYUiBkIgiCIHfiIIQv////8PgyAEQiCIIgQgBkL/////D4MiBn58IAUgBn4iBUIgiHwiBkIghiAFQv////8Pg4QgCEIgiCAEIAd+fCAGQiCIfIUgA3wgASkDWCACfSAAQdiLAWopAwCFIgNC/////w+DIgQgASkDUCACfCAAQdCLAWopAwCFIgVCIIgiBn4iB0L/////D4MgA0IgiCIDIAVC/////w+DIgV+fCAEIAV+IgRCIIh8IgVCIIYgBEL/////D4OEIAdCIIggAyAGfnwgBUIgiHyFfCEDCyABKQMoIAJ9QQApA5iMAYUiBEL/////D4MiBSABKQMgIAJ8QQApA5CMAYUiBkIgiCIHfiIIQv////8PgyAEQiCIIgQgBkL/////D4MiBn58IAUgBn4iBUIgiHwiBkIghiAFQv////8Pg4QgCEIgiCAEIAd+fCAGQiCIfIUgA3wgASkDOCACfSAAQeiLAWopAwCFIgNC/////w+DIgQgASkDMCACfCAAQeCLAWopAwCFIgVCIIgiBn4iB0L/////D4MgA0IgiCIDIAVC/////w+DIgV+fCAEIAV+IgRCIIh8IgVCIIYgBEL/////D4OEIAdCIIggAyAGfnwgBUIgiHyFfCEDCyABKQMIIAJ9QQApA4iMAYUiBEL/////D4MiBSABKQMAIAJ8QQApA4CMAYUiBkIgiCIHfiIIQv////8PgyAEQiCIIgQgBkL/////D4MiBn58IAUgBn4iBUIgiHwiBkIghiAFQv////8Pg4QgCEIgiCAEIAd+fCAGQiCIfIUgA3wgASkDGCACfSAAQfiLAWopAwCFIgNC/////w+DIgQgASkDECACfCAAQfCLAWopAwCFIgJCIIgiBX4iBkL/////D4MgA0IgiCIDIAJC/////w+DIgJ+fCAEIAJ+IgJCIIh8IgRCIIYgAkL/////D4OEIAZCIIggAyAFfnwgBEIgiHyFfCICQiWIIAKFQvnz3fGZ8pmrFn4iAkIgiCAChQv8CgQBfwV+An8BfkEAIQMgASkDeCACfUEAKQP4jAGFIgRC/////w+DIgUgASkDcCACfEEAKQPwjAGFIgZCIIgiB34iCEL/////D4MgBEIgiCIEIAZC/////w+DIgZ+fCAFIAZ+IgVCIIh8IgZCIIYgBUL/////D4OEIAhCIIggBCAHfnwgBkIgiHyFIAEpA2ggAn1BACkD6IwBhSIEQv////8PgyIFIAEpA2AgAnxBACkD4IwBhSIGQiCIIgd+IghC/////w+DIARCIIgiBCAGQv////8PgyIGfnwgBSAGfiIFQiCIfCIGQiCGIAVC/////w+DhCAIQiCIIAQgB358IAZCIIh8hSABKQNYIAJ9QQApA9iMAYUiBEL/////D4MiBSABKQNQIAJ8QQApA9CMAYUiBkIgiCIHfiIIQv////8PgyAEQiCIIgQgBkL/////D4MiBn58IAUgBn4iBUIgiHwiBkIghiAFQv////8Pg4QgCEIgiCAEIAd+fCAGQiCIfIUgASkDSCACfUEAKQPIjAGFIgRC/////w+DIgUgASkDQCACfEEAKQPAjAGFIgZCIIgiB34iCEL/////D4MgBEIgiCIEIAZC/////w+DIgZ+fCAFIAZ+IgVCIIh8IgZCIIYgBUL/////D4OEIAhCIIggBCAHfnwgBkIgiHyFIAEpAzggAn1BACkDuIwBhSIEQv////8PgyIFIAEpAzAgAnxBACkDsIwBhSIGQiCIIgd+IghC/////w+DIARCIIgiBCAGQv////8PgyIGfnwgBSAGfiIFQiCIfCIGQiCGIAVC/////w+DhCAIQiCIIAQgB358IAZCIIh8hSABKQMoIAJ9QQApA6iMAYUiBEL/////D4MiBSABKQMgIAJ8QQApA6CMAYUiBkIgiCIHfiIIQv////8PgyAEQiCIIgQgBkL/////D4MiBn58IAUgBn4iBUIgiHwiBkIghiAFQv////8Pg4QgCEIgiCAEIAd+fCAGQiCIfIUgASkDGCACfUEAKQOYjAGFIgRC/////w+DIgUgASkDECACfEEAKQOQjAGFIgZCIIgiB34iCEL/////D4MgBEIgiCIEIAZC/////w+DIgZ+fCAFIAZ+IgVCIIh8IgZCIIYgBUL/////D4OEIAhCIIggBCAHfnwgBkIgiHyFIAEpAwggAn1BACkDiIwBhSIEQv////8PgyIFIAEpAwAgAnxBACkDgIwBhSIGQiCIIgd+IghC/////w+DIARCIIgiBCAGQv////8PgyIGfnwgBSAGfiIFQiCIfCIGQiCGIAVC/////w+DhCAIQiCIIAQgB358IAZCIIh8hSAArUKHla+vmLbem55/fnx8fHx8fHx8IgRCJYggBIVC+fPd8ZnymasWfiIEQiCIIASFIQQCQCAAQZABSA0AIABBBHZBeGohCQNAIAEgA2oiCkELaikDACACfSADQYiNAWopAwCFIgVC/////w+DIgYgCkEDaikDACACfCADQYCNAWopAwCFIgdCIIgiCH4iC0L/////D4MgBUIgiCIFIAdC/////w+DIgd+fCAGIAd+IgZCIIh8IgdCIIYgBkL/////D4OEIAtCIIggBSAIfnwgB0IgiHyFIAR8IQQgA0EQaiEDIAlBf2oiCQ0ACwsgASkDfyACfSAAQfiLAWopAwCFIgVC/////w+DIgYgASkDdyACfCAAQfCLAWopAwCFIgJCIIgiB34iCEL/////D4MgBUIgiCIFIAJC/////w+DIgJ+fCAGIAJ+IgJCIIh8IgZCIIYgAkL/////D4OEIAhCIIggBSAHfnwgBkIgiHyFIAR8IgJCJYggAoVC+fPd8ZnymasWfiICQiCIIAKFC98FAgF+AX8CQAJAQQApA4AKIgBQRQ0AQYAIIQFCACEADAELAkBBACkDoI4BIABSDQBBACEBDAELQQAhAUEAQq+v79e895Kg/gAgAH03A/iLAUEAIABCxZbr+djShYIofDcD8IsBQQBCj/Hjja2P9JhOIAB9NwPoiwFBACAAQqus+MXV79HQfHw3A+CLAUEAQtOt1LKShbW0nn8gAH03A9iLAUEAIABCl5r0jvWWvO3JAHw3A9CLAUEAQsWDgv2v/8SxayAAfTcDyIsBQQAgAELqi7OdyOb09UN8NwPAiwFBAELIv/rLnJveueQAIAB9NwO4iwFBACAAQoqjgd/Ume2sMXw3A7CLAUEAQvm57738+MKnHSAA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QQApA4CKATcDACACQQApA4iKATcDCCACQQApA5CKATcDECACQQApA5iKATcDGCACQQApA6CKATcDICACQQApA6iKATcDKCACQQApA7CKASIFNwMwIAJBACkDuIoBIgY3AzgCQAJAQQAoAoCOASIHQcAASQ0AIAJBACgCiI4BNgJAIAIgAkHAAGpBACgCmI4BQYCMASAHQX9qQQZ2IANBACgCnI4BIgAQAiADIABqIgBBeWopAwAhCCAAKQMJIQkgACkDGSEKIAApAykhCyAHQcCLAWopAwAhBSAAKQMBIQwgB0HIiwFqKQMAIQYgB0HQiwFqKQMAIQ0gACkDESEOIAdB2IsBaikDACEPIAdB4IsBaikDACEQIAApAyEhESAHQeiLAWopAwAhEiACKQMAIRMgAikDECEUIAIpAyAhFSACKQMwIRYgAikDCCEXIAIpAxghGCACKQMoIRkgAiACKQM4IAdB8IsBaikDACIafCAAKQMxIAdB+IsBaikDACIbhSIcQiCIIBxC/////w+Dfnw3AzggGSAQfCARIBKFIhFCIIggEUL/////D4N+fCERIBggDXwgDiAPhSIOQiCIIA5C/////w+DfnwhDiAXIAV8IAwgBoUiDEIgiCAMQv////8Pg358IQwgGyAWIAsgGoUiC0IgiCALQv////8Pg358fCELIBIgFSAKIBCFIhBCIIggEEL/////D4N+fHwhECAPIBQgCSANhSINQiCIIA1C/////w+Dfnx8IRIgBiATIAggBYUiBUIgiCAFQv////8Pg358fCEIDAELIAdBwI0BaiEdQcAAIAdrIR4gAkHAAGohAAJAAkACQCAHQThNDQAgHiEfDAELAkACQEE4IAdrQQN2QQFqQQdxIh8NACACQcAAaiEAIB4hHwwBCyACQcAAaiEAIB9BA3QiICEfA0AgACAdKQMANwMAIABBCGohACAdQQhqIR0gH0F4aiIfDQALQcAAIAcgIGprIR8LAkAgBw0AA0AgACAdKQMANwMAIABBCGogHUEIaikDADcDACAAQRBqIB1BEGopAwA3AwAgAEEYaiAdQRhqKQMANwMAIABBIGogHUEgaikDADcDACAAQShqIB1BKGopAwA3AwAgAEEwaiAdQTBqKQMANwMAIABBOGogHUE4aikDADcDACAAQcAAaiEAIB1BwABqIR0gH0FAaiIfQQdLDQALCyAfRQ0BCyAfQX9qISECQCAfQQdxIiBFDQAgH0F4cSEfA0AgACAdLQAAOgAAIABBAWohACAdQQFqIR0gIEF/aiIgDQALCyAhQQdJDQADQCAAIB0pAAA3AAAgAEEIaiEAIB1BCGohHSAfQXhqIh8NAAsLIAJBwABqIB5qIR1BgIwBIQACQAJAAkAgB0EISQ0AAkAgB0E4akEDdkEBakEHcSIfDQAMAgsgH0EDdCEgQYCMASEAA0AgHSAAKQMANwMAIB1BCGohHSAAQQhqIQAgH0F/aiIfDQALIAcgIGshBwsgB0UNAQJAAkAgB0EHcSIgDQAgByEfDAELIAdBeHEhHwNAIB0gAC0AADoAACAdQQFqIR0gAEEBaiEAICBBf2oiIA0ACwsgB0EISQ0BCwNAIB0gACkAADcAACAdQQhqIR0gAEEIaiEAIB9BeGoiHw0ACwsgA0EAKAKcjgFqIgBBeWopAwAhCiAAKQMJIRMgACkDGSEUIAApAykhCyAAKQMBIQwgACkDESEOIAApAyEhESACKQMAIRUgAikDECEWIAIpAyAhFyACKQMIIRggAikDQCENIAIpA0ghDyACKQMYIRkgAikDUCESIAIpA1ghCCACKQMoIRogAikDYCEQIAIpA2ghCSACIAYgAikDcCIbfCAAKQMxIAIpA3giBoUiHEIgiCAcQv////8Pg358NwM4IBogEHwgESAJhSIRQiCIIBFC/////w+DfnwhESAZIBJ8IA4gCIUiDkIgiCAOQv////8Pg358IQ4gGCANfCAMIA+FIgxCIIggDEL/////D4N+fCEMIAYgCyAbhSILQiCIIAtC/////w+DfiAFfHwhCyAJIBcgFCAQhSIFQiCIIAVC/////w+Dfnx8IRAgCCAWIBMgEoUiBUIgiCAFQv////8Pg358fCESIA8gFSAKIA2FIgVCIIggBUL/////D4N+fHwhCAsgAykDQyACKQM4hSIFQv////8PgyIGIAMpAzsgC4UiC0IgiCINfiIPQv////8PgyAFQiCIIgUgC0L/////D4MiC358IAYgC34iBkIgiHwiC0IghiAGQv////8Pg4QgD0IgiCAFIA1+fCALQiCIfIUgAykDMyARhSIFQv////8PgyIGIAMpAysgEIUiC0IgiCINfiIPQv////8PgyAFQiCIIgUgC0L/////D4MiC358IAYgC34iBkIgiHwiC0IghiAGQv////8Pg4QgD0IgiCAFIA1+fCALQiCIfIUgAykDIyAOhSIFQv////8PgyIGIAMpAxsgEoUiC0IgiCINfiIPQv////8PgyAFQiCIIgUgC0L/////D4MiC358IAYgC34iBkIgiHwiC0IghiAGQv////8Pg4QgD0IgiCAFIA1+fCALQiCIfIUgAykDEyAMhSIFQv////8PgyIGIAMpAwsgCIUiC0IgiCINfiIPQv////8PgyAFQiCIIgUgC0L/////D4MiC358IAYgC34iBkIgiHwiC0IghiAGQv////8Pg4QgD0IgiCAFIA1+fCALQiCIfIUgBEKHla+vmLbem55/fnx8fHwiBEIliCAEhUL5893xmfKZqxZ+IgRCIIggBIUhBAwBCyAEpyEAAkBBACkDoI4BIgRQDQACQCAAQRBLDQAgAEGACCAEEAUhBAwCCwJAIABBgAFLDQAgAEGACCAEEAYhBAwCCyAAQYAIIAQQByEEDAELAkAgAEEQSw0AIAAgA0IAEAUhBAwBCwJAIABBgAFLDQAgACADQgAQBiEEDAELIAAgA0IAEAchBAtBACAEQjiGIARCgP4Dg0IohoQgBEKAgPwHg0IYhiAEQoCAgPgPg0IIhoSEIARCCIhCgICA+A+DIARCGIhCgID8B4OEIARCKIhCgP4DgyAEQjiIhISENwOACiABJAALBgBBgIoBCwIACwvMAQEAQYAIC8QBuP5sOSOkS758AYEs9yGtHN7UbemDkJfbckCkpLezZx/LeeZOzMDleIJa0H3M/3IhuAhGdPdDJI7gNZDmgTomTDwoUruRwwDLiNBlixtTLqNxZEiXog35TjgZ70ap3qzYqPp2P+OcND/53LvHxwtPHYpR4EvNtFkxyJ9+ydl4c2TqxayDNNPrw8WBoP/6E2PrFw3dUbfw2knTFlUmKdRonisWvlh9R6H8j/i40XrQMc5FyzqPlRYEKK/X+8q7S0B+QAIAAA==",hash:"5a2fbdbb"};function C(A,I,g,C){return new(g||(g=Promise))((function(Q,i){function B(A){try{E(C.next(A))}catch(A){i(A)}}function e(A){try{E(C.throw(A))}catch(A){i(A)}}function E(A){var I;A.done?Q(A.value):(I=A.value,I instanceof g?I:new g((function(A){A(I)}))).then(B,e)}E((C=C.apply(A,I||[])).next())}))}"function"==typeof SuppressedError&&SuppressedError;class Q{constructor(){this.mutex=Promise.resolve()}lock(){let A=()=>{};return this.mutex=this.mutex.then((()=>new Promise(A))),new Promise((I=>{A=I}))}dispatch(A){return C(this,void 0,void 0,(function*(){const I=yield this.lock();try{return yield Promise.resolve(A())}finally{I()}}))}}const i="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:global,B=null!==(I=i.Buffer)&&void 0!==I?I:null,e=i.TextEncoder?new i.TextEncoder:null;function E(A,I){return(15&A)+(A>>6|A>>3&8)<<4|(15&I)+(I>>6|I>>3&8)}const t="a".charCodeAt(0)-10,n="0".charCodeAt(0);function D(A,I,g){let C=0;for(let Q=0;Q>>4;A[C++]=g>9?g+t:g+n,g=15&I[Q],A[C++]=g>9?g+t:g+n}return String.fromCharCode.apply(null,A)}const o=null!==B?A=>{if("string"==typeof A){const I=B.from(A,"utf8");return new Uint8Array(I.buffer,I.byteOffset,I.length)}if(B.isBuffer(A))return new Uint8Array(A.buffer,A.byteOffset,A.length);if(ArrayBuffer.isView(A))return new Uint8Array(A.buffer,A.byteOffset,A.byteLength);throw new Error("Invalid data type!")}:A=>{if("string"==typeof A)return e.encode(A);if(ArrayBuffer.isView(A))return new Uint8Array(A.buffer,A.byteOffset,A.byteLength);throw new Error("Invalid data type!")},f="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",w=new Uint8Array(256);for(let A=0;A>4,Q+=1,C[Q]=(15&i)<<4|B>>2,Q+=1,C[Q]=(3&B)<<6|63&e,Q+=1}return C}const h=16384,s=new Q,a=new Map;function c(A,I){return C(this,void 0,void 0,(function*(){let g=null,Q=null,i=!1;if("undefined"==typeof WebAssembly)throw new Error("WebAssembly is not supported in this environment!");const B=()=>new DataView(g.exports.memory.buffer).getUint32(g.exports.STATE_SIZE,!0),e=s.dispatch((()=>C(this,void 0,void 0,(function*(){if(!a.has(A.name)){const I=r(A.data),g=WebAssembly.compile(I);a.set(A.name,g)}const I=yield a.get(A.name);g=yield WebAssembly.instantiate(I,{})})))),t=(A=null)=>{i=!0,g.exports.Hash_Init(A)},n=A=>{if(!i)throw new Error("update() called before init()");(A=>{let I=0;for(;I{if(!i)throw new Error("digest() called before init()");return i=!1,g.exports.Hash_Final(C),"binary"===A?Q.slice(0,I):D(f,Q,I)},c=A=>"string"==typeof A?A.length<4096:A.byteLength!0;break;case"blake2b":case"blake2s":y=(A,I)=>I<=512&&c(A);break;case"blake3":y=(A,I)=>0===I&&c(A);break;case"xxhash64":case"xxhash3":case"xxhash128":case"crc64":y=()=>!1}return yield(()=>C(this,void 0,void 0,(function*(){g||(yield e);const A=g.exports.Hash_GetBuffer(),I=g.exports.memory.buffer;Q=new Uint8Array(I,A,h)})))(),{getMemory:()=>Q,writeMemory:(A,I=0)=>{Q.set(A,I)},getExports:()=>g.exports,setMemorySize:A=>{g.exports.Hash_SetMemorySize(A);const I=g.exports.Hash_GetBuffer(),C=g.exports.memory.buffer;Q=new Uint8Array(C,I,A)},init:t,update:n,digest:w,save:()=>{if(!i)throw new Error("save() can only be called after init() and before digest()");const I=g.exports.Hash_GetState(),C=B(),Q=g.exports.memory.buffer,e=new Uint8Array(Q,I,C),t=new Uint8Array(4+C);return function(A,I){const g=I.length>>1;for(let C=0;C{if(!(I instanceof Uint8Array))throw new Error("load() expects an Uint8Array generated by save()");const C=g.exports.Hash_GetState(),Q=B(),e=4+Q,t=g.exports.memory.buffer;if(I.length!==e)throw new Error(`Bad state length (expected ${e} bytes, got ${I.length})`);if(!function(A,I){if(A.length!==2*I.length)return!1;for(let g=0;g{if(!y(A,C))return t(C),n(A),w("hex",i);const B=o(A);return Q.set(B),g.exports.Hash_Calculate(B.length,C,i),D(f,Q,I)},hashLength:I}}))}const y=new Q;let k=null;const F=new Uint8Array(8);function M(A){return!Number.isInteger(A)||A<0||A>4294967295?new Error("Seed must be given as two valid 32-bit long unsigned integers (lo + high)."):null}function d(A,I,g){const C=new DataView(A);C.setUint32(0,I,!0),C.setUint32(4,g,!0)}A.createXXHash3=function(A=0,I=0){return M(A)?Promise.reject(M(A)):M(I)?Promise.reject(M(I)):c(g,8).then((g=>{const C=new Uint8Array(8);d(C.buffer,A,I),g.writeMemory(C),g.init();const Q={init:()=>(g.writeMemory(C),g.init(),Q),update:A=>(g.update(A),Q),digest:A=>g.digest(A),save:()=>g.save(),load:A=>(g.load(A),Q),blockSize:512,digestSize:8};return Q}))},A.xxhash3=function(A,I=0,Q=0){if(M(I))return Promise.reject(M(I));if(M(Q))return Promise.reject(M(Q));if(null===k)return function(A,I,g){return C(this,void 0,void 0,(function*(){const C=yield A.lock(),Q=yield c(I,g);return C(),Q}))}(y,g,8).then((g=>(k=g,d(F.buffer,I,Q),k.writeMemory(F),k.calculate(A))));try{d(F.buffer,I,Q),k.writeMemory(F);const g=k.calculate(A);return Promise.resolve(g)}catch(A){return Promise.reject(A)}}})); diff --git a/frontend/node_modules/hash-wasm/dist/xxhash32.umd.min.js b/frontend/node_modules/hash-wasm/dist/xxhash32.umd.min.js new file mode 100644 index 0000000..957d4b9 --- /dev/null +++ b/frontend/node_modules/hash-wasm/dist/xxhash32.umd.min.js @@ -0,0 +1,7 @@ +/*! + * hash-wasm (https://www.npmjs.com/package/hash-wasm) + * (c) Dani Biro + * @license MIT + */ + +!function(A,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports):"function"==typeof define&&define.amd?define(["exports"],e):e((A="undefined"!=typeof globalThis?globalThis:A||self).hashwasm=A.hashwasm||{})}(this,(function(A){"use strict";var e,t={name:"xxhash32",data:"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",hash:"4bb12485"};function n(A,e,t,n){return new(t||(t=Promise))((function(r,o){function i(A){try{s(n.next(A))}catch(A){o(A)}}function Q(A){try{s(n.throw(A))}catch(A){o(A)}}function s(A){var e;A.done?r(A.value):(e=A.value,e instanceof t?e:new t((function(A){A(e)}))).then(i,Q)}s((n=n.apply(A,e||[])).next())}))}"function"==typeof SuppressedError&&SuppressedError;class r{constructor(){this.mutex=Promise.resolve()}lock(){let A=()=>{};return this.mutex=this.mutex.then((()=>new Promise(A))),new Promise((e=>{A=e}))}dispatch(A){return n(this,void 0,void 0,(function*(){const e=yield this.lock();try{return yield Promise.resolve(A())}finally{e()}}))}}const o="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:global,i=null!==(e=o.Buffer)&&void 0!==e?e:null,Q=o.TextEncoder?new o.TextEncoder:null;function s(A,e){return(15&A)+(A>>6|A>>3&8)<<4|(15&e)+(e>>6|e>>3&8)}const B="a".charCodeAt(0)-10,a="0".charCodeAt(0);function E(A,e,t){let n=0;for(let r=0;r>>4;A[n++]=t>9?t+B:t+a,t=15&e[r],A[n++]=t>9?t+B:t+a}return String.fromCharCode.apply(null,A)}const C=null!==i?A=>{if("string"==typeof A){const e=i.from(A,"utf8");return new Uint8Array(e.buffer,e.byteOffset,e.length)}if(i.isBuffer(A))return new Uint8Array(A.buffer,A.byteOffset,A.length);if(ArrayBuffer.isView(A))return new Uint8Array(A.buffer,A.byteOffset,A.byteLength);throw new Error("Invalid data type!")}:A=>{if("string"==typeof A)return Q.encode(A);if(ArrayBuffer.isView(A))return new Uint8Array(A.buffer,A.byteOffset,A.byteLength);throw new Error("Invalid data type!")},g="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",I=new Uint8Array(256);for(let A=0;A>4,r+=1,n[r]=(15&o)<<4|i>>2,r+=1,n[r]=(3&i)<<6|63&Q,r+=1}return n}const h=16384,f=new r,c=new Map;function d(A,e){return n(this,void 0,void 0,(function*(){let t=null,r=null,o=!1;if("undefined"==typeof WebAssembly)throw new Error("WebAssembly is not supported in this environment!");const i=()=>new DataView(t.exports.memory.buffer).getUint32(t.exports.STATE_SIZE,!0),Q=f.dispatch((()=>n(this,void 0,void 0,(function*(){if(!c.has(A.name)){const e=l(A.data),t=WebAssembly.compile(e);c.set(A.name,t)}const e=yield c.get(A.name);t=yield WebAssembly.instantiate(e,{})})))),B=(A=null)=>{o=!0,t.exports.Hash_Init(A)},a=A=>{if(!o)throw new Error("update() called before init()");(A=>{let e=0;for(;e{if(!o)throw new Error("digest() called before init()");return o=!1,t.exports.Hash_Final(n),"binary"===A?r.slice(0,e):E(g,r,e)},d=A=>"string"==typeof A?A.length<4096:A.byteLength!0;break;case"blake2b":case"blake2s":u=(A,e)=>e<=512&&d(A);break;case"blake3":u=(A,e)=>0===e&&d(A);break;case"xxhash64":case"xxhash3":case"xxhash128":case"crc64":u=()=>!1}return yield(()=>n(this,void 0,void 0,(function*(){t||(yield Q);const A=t.exports.Hash_GetBuffer(),e=t.exports.memory.buffer;r=new Uint8Array(e,A,h)})))(),{getMemory:()=>r,writeMemory:(A,e=0)=>{r.set(A,e)},getExports:()=>t.exports,setMemorySize:A=>{t.exports.Hash_SetMemorySize(A);const e=t.exports.Hash_GetBuffer(),n=t.exports.memory.buffer;r=new Uint8Array(n,e,A)},init:B,update:a,digest:I,save:()=>{if(!o)throw new Error("save() can only be called after init() and before digest()");const e=t.exports.Hash_GetState(),n=i(),r=t.exports.memory.buffer,Q=new Uint8Array(r,e,n),B=new Uint8Array(4+n);return function(A,e){const t=e.length>>1;for(let n=0;n{if(!(e instanceof Uint8Array))throw new Error("load() expects an Uint8Array generated by save()");const n=t.exports.Hash_GetState(),r=i(),Q=4+r,B=t.exports.memory.buffer;if(e.length!==Q)throw new Error(`Bad state length (expected ${Q} bytes, got ${e.length})`);if(!function(A,e){if(A.length!==2*e.length)return!1;for(let t=0;t{if(!u(A,n))return B(n),a(A),I("hex",o);const i=C(A);return r.set(i),t.exports.Hash_Calculate(i.length,n,o),E(g,r,e)},hashLength:e}}))}const u=new r;let y=null;function w(A){return!Number.isInteger(A)||A<0||A>4294967295?new Error("Seed must be a valid 32-bit long unsigned integer."):null}A.createXXHash32=function(A=0){return w(A)?Promise.reject(w(A)):d(t,4).then((e=>{e.init(A);const t={init:()=>(e.init(A),t),update:A=>(e.update(A),t),digest:A=>e.digest(A),save:()=>e.save(),load:A=>(e.load(A),t),blockSize:16,digestSize:4};return t}))},A.xxhash32=function(A,e=0){if(w(e))return Promise.reject(w(e));if(null===y)return function(A,e,t){return n(this,void 0,void 0,(function*(){const n=yield A.lock(),r=yield d(e,t);return n(),r}))}(u,t,4).then((t=>(y=t,y.calculate(A,e))));try{const t=y.calculate(A,e);return Promise.resolve(t)}catch(A){return Promise.reject(A)}}})); diff --git a/frontend/node_modules/hash-wasm/dist/xxhash64.umd.min.js b/frontend/node_modules/hash-wasm/dist/xxhash64.umd.min.js new file mode 100644 index 0000000..e645039 --- /dev/null +++ b/frontend/node_modules/hash-wasm/dist/xxhash64.umd.min.js @@ -0,0 +1,7 @@ +/*! + * hash-wasm (https://www.npmjs.com/package/hash-wasm) + * (c) Dani Biro + * @license MIT + */ + +!function(A,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports):"function"==typeof define&&define.amd?define(["exports"],e):e((A="undefined"!=typeof globalThis?globalThis:A||self).hashwasm=A.hashwasm||{})}(this,(function(A){"use strict";var e,t={name:"xxhash64",data:"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",hash:"177fbfa3"};function n(A,e,t,n){return new(t||(t=Promise))((function(r,i){function o(A){try{Q(n.next(A))}catch(A){i(A)}}function s(A){try{Q(n.throw(A))}catch(A){i(A)}}function Q(A){var e;A.done?r(A.value):(e=A.value,e instanceof t?e:new t((function(A){A(e)}))).then(o,s)}Q((n=n.apply(A,e||[])).next())}))}"function"==typeof SuppressedError&&SuppressedError;class r{constructor(){this.mutex=Promise.resolve()}lock(){let A=()=>{};return this.mutex=this.mutex.then((()=>new Promise(A))),new Promise((e=>{A=e}))}dispatch(A){return n(this,void 0,void 0,(function*(){const e=yield this.lock();try{return yield Promise.resolve(A())}finally{e()}}))}}const i="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:global,o=null!==(e=i.Buffer)&&void 0!==e?e:null,s=i.TextEncoder?new i.TextEncoder:null;function Q(A,e){return(15&A)+(A>>6|A>>3&8)<<4|(15&e)+(e>>6|e>>3&8)}const f="a".charCodeAt(0)-10,a="0".charCodeAt(0);function l(A,e,t){let n=0;for(let r=0;r>>4;A[n++]=t>9?t+f:t+a,t=15&e[r],A[n++]=t>9?t+f:t+a}return String.fromCharCode.apply(null,A)}const C=null!==o?A=>{if("string"==typeof A){const e=o.from(A,"utf8");return new Uint8Array(e.buffer,e.byteOffset,e.length)}if(o.isBuffer(A))return new Uint8Array(A.buffer,A.byteOffset,A.length);if(ArrayBuffer.isView(A))return new Uint8Array(A.buffer,A.byteOffset,A.byteLength);throw new Error("Invalid data type!")}:A=>{if("string"==typeof A)return s.encode(A);if(ArrayBuffer.isView(A))return new Uint8Array(A.buffer,A.byteOffset,A.byteLength);throw new Error("Invalid data type!")},h="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",I=new Uint8Array(256);for(let A=0;A>4,r+=1,n[r]=(15&i)<<4|o>>2,r+=1,n[r]=(3&o)<<6|63&s,r+=1}return n}const B=16384,u=new r,c=new Map;function E(A,e){return n(this,void 0,void 0,(function*(){let t=null,r=null,i=!1;if("undefined"==typeof WebAssembly)throw new Error("WebAssembly is not supported in this environment!");const o=()=>new DataView(t.exports.memory.buffer).getUint32(t.exports.STATE_SIZE,!0),s=u.dispatch((()=>n(this,void 0,void 0,(function*(){if(!c.has(A.name)){const e=g(A.data),t=WebAssembly.compile(e);c.set(A.name,t)}const e=yield c.get(A.name);t=yield WebAssembly.instantiate(e,{})})))),f=(A=null)=>{i=!0,t.exports.Hash_Init(A)},a=A=>{if(!i)throw new Error("update() called before init()");(A=>{let e=0;for(;e{if(!i)throw new Error("digest() called before init()");return i=!1,t.exports.Hash_Final(n),"binary"===A?r.slice(0,e):l(h,r,e)},E=A=>"string"==typeof A?A.length<4096:A.byteLength!0;break;case"blake2b":case"blake2s":w=(A,e)=>e<=512&&E(A);break;case"blake3":w=(A,e)=>0===e&&E(A);break;case"xxhash64":case"xxhash3":case"xxhash128":case"crc64":w=()=>!1}return yield(()=>n(this,void 0,void 0,(function*(){t||(yield s);const A=t.exports.Hash_GetBuffer(),e=t.exports.memory.buffer;r=new Uint8Array(e,A,B)})))(),{getMemory:()=>r,writeMemory:(A,e=0)=>{r.set(A,e)},getExports:()=>t.exports,setMemorySize:A=>{t.exports.Hash_SetMemorySize(A);const e=t.exports.Hash_GetBuffer(),n=t.exports.memory.buffer;r=new Uint8Array(n,e,A)},init:f,update:a,digest:I,save:()=>{if(!i)throw new Error("save() can only be called after init() and before digest()");const e=t.exports.Hash_GetState(),n=o(),r=t.exports.memory.buffer,s=new Uint8Array(r,e,n),f=new Uint8Array(4+n);return function(A,e){const t=e.length>>1;for(let n=0;n{if(!(e instanceof Uint8Array))throw new Error("load() expects an Uint8Array generated by save()");const n=t.exports.Hash_GetState(),r=o(),s=4+r,f=t.exports.memory.buffer;if(e.length!==s)throw new Error(`Bad state length (expected ${s} bytes, got ${e.length})`);if(!function(A,e){if(A.length!==2*e.length)return!1;for(let t=0;t{if(!w(A,n))return f(n),a(A),I("hex",i);const o=C(A);return r.set(o),t.exports.Hash_Calculate(o.length,n,i),l(h,r,e)},hashLength:e}}))}const w=new r;let d=null;const y=new Uint8Array(8);function b(A){return!Number.isInteger(A)||A<0||A>4294967295?new Error("Seed must be given as two valid 32-bit long unsigned integers (lo + high)."):null}function m(A,e,t){const n=new DataView(A);n.setUint32(0,e,!0),n.setUint32(4,t,!0)}A.createXXHash64=function(A=0,e=0){return b(A)?Promise.reject(b(A)):b(e)?Promise.reject(b(e)):E(t,8).then((t=>{const n=new Uint8Array(8);m(n.buffer,A,e),t.writeMemory(n),t.init();const r={init:()=>(t.writeMemory(n),t.init(),r),update:A=>(t.update(A),r),digest:A=>t.digest(A),save:()=>t.save(),load:A=>(t.load(A),r),blockSize:32,digestSize:8};return r}))},A.xxhash64=function(A,e=0,r=0){if(b(e))return Promise.reject(b(e));if(b(r))return Promise.reject(b(r));if(null===d)return function(A,e,t){return n(this,void 0,void 0,(function*(){const n=yield A.lock(),r=yield E(e,t);return n(),r}))}(w,t,8).then((t=>(d=t,m(y.buffer,e,r),d.writeMemory(y),d.calculate(A))));try{m(y.buffer,e,r),d.writeMemory(y);const t=d.calculate(A);return Promise.resolve(t)}catch(A){return Promise.reject(A)}}})); diff --git a/frontend/node_modules/hash-wasm/jest.config.js b/frontend/node_modules/hash-wasm/jest.config.js new file mode 100644 index 0000000..6e937ca --- /dev/null +++ b/frontend/node_modules/hash-wasm/jest.config.js @@ -0,0 +1,9 @@ +module.exports = { + roots: [ + '/test', + ], + transform: { + '^.+\\.ts$': 'ts-jest', + }, + cacheDirectory: '/.jest-cache', +}; diff --git a/frontend/node_modules/hash-wasm/lib/WASMInterface.ts b/frontend/node_modules/hash-wasm/lib/WASMInterface.ts new file mode 100644 index 0000000..1982937 --- /dev/null +++ b/frontend/node_modules/hash-wasm/lib/WASMInterface.ts @@ -0,0 +1,310 @@ +import Mutex from "./mutex"; +import { + type IDataType, + type IEmbeddedWasm, + decodeBase64, + getDigestHex, + getUInt8Buffer, + hexStringEqualsUInt8, + writeHexToUInt8, +} from "./util"; + +export const MAX_HEAP = 16 * 1024; +const WASM_FUNC_HASH_LENGTH = 4; +const wasmMutex = new Mutex(); + +type ThenArg = T extends Promise + ? U + : // biome-ignore lint/suspicious/noExplicitAny: TS quirks + T extends (...args: any[]) => Promise + ? V + : T; + +export type IHasher = { + /** + * Initializes hash state to default value + */ + init: () => IHasher; + /** + * Updates the hash content with the given data + */ + update: (data: IDataType) => IHasher; + /** + * Calculates the hash of all of the data passed to be hashed with hash.update(). + * Defaults to hexadecimal string + * @param outputType If outputType is "binary", it returns Uint8Array. Otherwise it + * returns hexadecimal string + */ + digest: { + (outputType: "binary"): Uint8Array; + (outputType?: "hex"): string; + }; + /** + * Save the current internal state of the hasher for later resumption with load(). + * Cannot be called before .init() or after .digest() + * + * Note that this state can include arbitrary information about the value being hashed (e.g. + * could include N plaintext bytes from the value), so needs to be treated as being as + * sensitive as the input value itself. + */ + save: () => Uint8Array; + /** + * Resume a state that was created by save(). If this state was not created by a + * compatible build of hash-wasm, an exception will be thrown. + */ + load: (state: Uint8Array) => IHasher; + /** + * Block size in bytes + */ + blockSize: number; + /** + * Digest size in bytes + */ + digestSize: number; +}; + +const wasmModuleCache = new Map>(); + +export async function WASMInterface(binary: IEmbeddedWasm, hashLength: number) { + let wasmInstance = null; + let memoryView: Uint8Array = null; + let initialized = false; + + if (typeof WebAssembly === "undefined") { + throw new Error("WebAssembly is not supported in this environment!"); + } + + const writeMemory = (data: Uint8Array, offset = 0) => { + memoryView.set(data, offset); + }; + + const getMemory = () => memoryView; + const getExports = () => wasmInstance.exports; + + const setMemorySize = (totalSize: number) => { + wasmInstance.exports.Hash_SetMemorySize(totalSize); + const arrayOffset: number = wasmInstance.exports.Hash_GetBuffer(); + const memoryBuffer = wasmInstance.exports.memory.buffer; + memoryView = new Uint8Array(memoryBuffer, arrayOffset, totalSize); + }; + + const getStateSize = () => { + const view = new DataView(wasmInstance.exports.memory.buffer); + const stateSize = view.getUint32(wasmInstance.exports.STATE_SIZE, true); + return stateSize; + }; + + const loadWASMPromise = wasmMutex.dispatch(async () => { + if (!wasmModuleCache.has(binary.name)) { + const asm = decodeBase64(binary.data); + const promise = WebAssembly.compile(asm); + + wasmModuleCache.set(binary.name, promise); + } + + const module = await wasmModuleCache.get(binary.name); + wasmInstance = await WebAssembly.instantiate(module, { + // env: { + // emscripten_memcpy_big: (dest, src, num) => { + // const memoryBuffer = wasmInstance.exports.memory.buffer; + // const memView = new Uint8Array(memoryBuffer, 0); + // memView.set(memView.subarray(src, src + num), dest); + // }, + // print_memory: (offset, len) => { + // const memoryBuffer = wasmInstance.exports.memory.buffer; + // const memView = new Uint8Array(memoryBuffer, 0); + // console.log('print_int32', memView.subarray(offset, offset + len)); + // }, + // }, + }); + + // wasmInstance.exports._start(); + }); + + const setupInterface = async () => { + if (!wasmInstance) { + await loadWASMPromise; + } + + const arrayOffset: number = wasmInstance.exports.Hash_GetBuffer(); + const memoryBuffer = wasmInstance.exports.memory.buffer; + memoryView = new Uint8Array(memoryBuffer, arrayOffset, MAX_HEAP); + }; + + const init = (bits: number = null) => { + initialized = true; + wasmInstance.exports.Hash_Init(bits); + }; + + const updateUInt8Array = (data: Uint8Array): void => { + let read = 0; + while (read < data.length) { + const chunk = data.subarray(read, read + MAX_HEAP); + read += chunk.length; + memoryView.set(chunk); + wasmInstance.exports.Hash_Update(chunk.length); + } + }; + + const update = (data: IDataType) => { + if (!initialized) { + throw new Error("update() called before init()"); + } + const Uint8Buffer = getUInt8Buffer(data); + updateUInt8Array(Uint8Buffer); + }; + + const digestChars = new Uint8Array(hashLength * 2); + + const digest = ( + outputType: "hex" | "binary", + padding: number = null, + ): Uint8Array | string => { + if (!initialized) { + throw new Error("digest() called before init()"); + } + initialized = false; + + wasmInstance.exports.Hash_Final(padding); + + if (outputType === "binary") { + // the data is copied to allow GC of the original memory object + return memoryView.slice(0, hashLength); + } + + return getDigestHex(digestChars, memoryView, hashLength); + }; + + const save = (): Uint8Array => { + if (!initialized) { + throw new Error( + "save() can only be called after init() and before digest()", + ); + } + + const stateOffset: number = wasmInstance.exports.Hash_GetState(); + const stateLength: number = getStateSize(); + const memoryBuffer = wasmInstance.exports.memory.buffer; + const internalState = new Uint8Array( + memoryBuffer, + stateOffset, + stateLength, + ); + + // prefix is 4 bytes from SHA1 hash of the WASM binary + // it is used to detect incompatible internal states between different versions of hash-wasm + const prefixedState = new Uint8Array(WASM_FUNC_HASH_LENGTH + stateLength); + writeHexToUInt8(prefixedState, binary.hash); + prefixedState.set(internalState, WASM_FUNC_HASH_LENGTH); + return prefixedState; + }; + + const load = (state: Uint8Array) => { + if (!(state instanceof Uint8Array)) { + throw new Error("load() expects an Uint8Array generated by save()"); + } + + const stateOffset: number = wasmInstance.exports.Hash_GetState(); + const stateLength: number = getStateSize(); + const overallLength: number = WASM_FUNC_HASH_LENGTH + stateLength; + const memoryBuffer = wasmInstance.exports.memory.buffer; + + if (state.length !== overallLength) { + throw new Error( + `Bad state length (expected ${overallLength} bytes, got ${state.length})`, + ); + } + + if ( + !hexStringEqualsUInt8( + binary.hash, + state.subarray(0, WASM_FUNC_HASH_LENGTH), + ) + ) { + throw new Error( + "This state was written by an incompatible hash implementation", + ); + } + + const internalState = state.subarray(WASM_FUNC_HASH_LENGTH); + new Uint8Array(memoryBuffer, stateOffset, stateLength).set(internalState); + initialized = true; + }; + + const isDataShort = (data: IDataType) => { + if (typeof data === "string") { + // worst case is 4 bytes / char + return data.length < MAX_HEAP / 4; + } + + return data.byteLength < MAX_HEAP; + }; + + let canSimplify: (data: IDataType, initParam?: number) => boolean = + isDataShort; + + switch (binary.name) { + case "argon2": + case "scrypt": + canSimplify = () => true; + break; + + case "blake2b": + case "blake2s": + // if there is a key at blake2 then cannot simplify + canSimplify = (data, initParam) => initParam <= 512 && isDataShort(data); + break; + + case "blake3": + // if there is a key at blake3 then cannot simplify + canSimplify = (data, initParam) => initParam === 0 && isDataShort(data); + break; + + case "xxhash64": // cannot simplify + case "xxhash3": + case "xxhash128": + case "crc64": + canSimplify = () => false; + break; + + default: + break; + } + + // shorthand for (init + update + digest) for better performance + const calculate = ( + data: IDataType, + initParam = null, + digestParam = null, + ): string => { + if (!canSimplify(data, initParam)) { + init(initParam); + update(data); + return digest("hex", digestParam) as string; + } + + const buffer = getUInt8Buffer(data); + memoryView.set(buffer); + wasmInstance.exports.Hash_Calculate(buffer.length, initParam, digestParam); + + return getDigestHex(digestChars, memoryView, hashLength); + }; + + await setupInterface(); + + return { + getMemory, + writeMemory, + getExports, + setMemorySize, + init, + update, + digest, + save, + load, + calculate, + hashLength, + }; +} + +export type IWASMInterface = ThenArg>; diff --git a/frontend/node_modules/hash-wasm/lib/adler32.ts b/frontend/node_modules/hash-wasm/lib/adler32.ts new file mode 100644 index 0000000..ac2f868 --- /dev/null +++ b/frontend/node_modules/hash-wasm/lib/adler32.ts @@ -0,0 +1,64 @@ +import wasmJson from "../wasm/adler32.wasm.json"; +import { + type IHasher, + type IWASMInterface, + WASMInterface, +} from "./WASMInterface"; +import lockedCreate from "./lockedCreate"; +import Mutex from "./mutex"; +import type { IDataType } from "./util"; + +const mutex = new Mutex(); +let wasmCache: IWASMInterface = null; + +/** + * Calculates Adler-32 hash. The resulting 32-bit hash is stored in + * network byte order (big-endian). + * + * @param data Input data (string, Buffer or TypedArray) + * @returns Computed hash as a hexadecimal string + */ +export function adler32(data: IDataType): Promise { + if (wasmCache === null) { + return lockedCreate(mutex, wasmJson, 4).then((wasm) => { + wasmCache = wasm; + return wasmCache.calculate(data); + }); + } + + try { + const hash = wasmCache.calculate(data); + return Promise.resolve(hash); + } catch (err) { + return Promise.reject(err); + } +} + +/** + * Creates a new Adler-32 hash instance + */ +export function createAdler32(): Promise { + return WASMInterface(wasmJson, 4).then((wasm) => { + wasm.init(); + const obj: IHasher = { + init: () => { + wasm.init(); + return obj; + }, + update: (data) => { + wasm.update(data); + return obj; + }, + // biome-ignore lint/suspicious/noExplicitAny: Conflict with IHasher type + digest: (outputType) => wasm.digest(outputType) as any, + save: () => wasm.save(), + load: (data) => { + wasm.load(data); + return obj; + }, + blockSize: 4, + digestSize: 4, + }; + return obj; + }); +} diff --git a/frontend/node_modules/hash-wasm/lib/argon2.ts b/frontend/node_modules/hash-wasm/lib/argon2.ts new file mode 100644 index 0000000..4357824 --- /dev/null +++ b/frontend/node_modules/hash-wasm/lib/argon2.ts @@ -0,0 +1,396 @@ +import wasmJson from "../wasm/argon2.wasm.json"; +import { type IHasher, WASMInterface } from "./WASMInterface"; +import { createBLAKE2b } from "./blake2b"; +import { + type IDataType, + decodeBase64, + encodeBase64, + getDecodeBase64Length, + getDigestHex, + getUInt8Buffer, + writeHexToUInt8, +} from "./util"; + +export interface IArgon2Options { + /** + * Password (or message) to be hashed + */ + password: IDataType; + /** + * Salt (usually containing random bytes) + */ + salt: IDataType; + /** + * Secret for keyed hashing + */ + secret?: IDataType; + /** + * Number of iterations to perform + */ + iterations: number; + /** + * Degree of parallelism + */ + parallelism: number; + /** + * Amount of memory to be used in kibibytes (1024 bytes) + */ + memorySize: number; + /** + * Output size in bytes + */ + hashLength: number; + /** + * Desired output type. Defaults to 'hex' + */ + outputType?: "hex" | "binary" | "encoded"; +} + +interface IArgon2OptionsExtended extends IArgon2Options { + hashType: "i" | "d" | "id"; +} + +function encodeResult( + salt: Uint8Array, + options: IArgon2OptionsExtended, + res: Uint8Array, +): string { + const parameters = [ + `m=${options.memorySize}`, + `t=${options.iterations}`, + `p=${options.parallelism}`, + ].join(","); + + return `$argon2${options.hashType}$v=19$${parameters}$${encodeBase64( + salt, + false, + )}$${encodeBase64(res, false)}`; +} + +const uint32View = new DataView(new ArrayBuffer(4)); +function int32LE(x: number): Uint8Array { + uint32View.setInt32(0, x, true); + return new Uint8Array(uint32View.buffer); +} + +async function hashFunc( + blake512: IHasher, + buf: Uint8Array, + len: number, +): Promise { + if (len <= 64) { + const blake = await createBLAKE2b(len * 8); + blake.update(int32LE(len)); + blake.update(buf); + return blake.digest("binary"); + } + + const r = Math.ceil(len / 32) - 2; + const ret = new Uint8Array(len); + + blake512.init(); + blake512.update(int32LE(len)); + blake512.update(buf); + let vp = blake512.digest("binary"); + ret.set(vp.subarray(0, 32), 0); + + for (let i = 1; i < r; i++) { + blake512.init(); + blake512.update(vp); + vp = blake512.digest("binary"); + ret.set(vp.subarray(0, 32), i * 32); + } + + const partialBytesNeeded = len - 32 * r; + + let blakeSmall: IHasher; + if (partialBytesNeeded === 64) { + blakeSmall = blake512; + blakeSmall.init(); + } else { + blakeSmall = await createBLAKE2b(partialBytesNeeded * 8); + } + + blakeSmall.update(vp); + vp = blakeSmall.digest("binary"); + ret.set(vp.subarray(0, partialBytesNeeded), r * 32); + + return ret; +} + +function getHashType(type: IArgon2OptionsExtended["hashType"]): number { + switch (type) { + case "d": + return 0; + case "i": + return 1; + default: + return 2; + } +} + +async function argon2Internal( + options: IArgon2OptionsExtended, +): Promise { + const { parallelism, iterations, hashLength } = options; + const password = getUInt8Buffer(options.password); + const salt = getUInt8Buffer(options.salt); + const version = 0x13; + const hashType = getHashType(options.hashType); + const { memorySize } = options; // in KB + const secret = getUInt8Buffer(options.secret ?? ""); + + const [argon2Interface, blake512] = await Promise.all([ + WASMInterface(wasmJson, 1024), + createBLAKE2b(512), + ]); + + // last block is for storing the init vector + argon2Interface.setMemorySize(memorySize * 1024 + 1024); + + const initVector = new Uint8Array(24); + const initVectorView = new DataView(initVector.buffer); + initVectorView.setInt32(0, parallelism, true); + initVectorView.setInt32(4, hashLength, true); + initVectorView.setInt32(8, memorySize, true); + initVectorView.setInt32(12, iterations, true); + initVectorView.setInt32(16, version, true); + initVectorView.setInt32(20, hashType, true); + argon2Interface.writeMemory(initVector, memorySize * 1024); + + blake512.init(); + blake512.update(initVector); + blake512.update(int32LE(password.length)); + blake512.update(password); + blake512.update(int32LE(salt.length)); + blake512.update(salt); + blake512.update(int32LE(secret.length)); + blake512.update(secret); + blake512.update(int32LE(0)); // associatedData length + associatedData + + const segments = Math.floor(memorySize / (parallelism * 4)); // length of each lane + const lanes = segments * 4; + + const param = new Uint8Array(72); + const H0 = blake512.digest("binary"); + param.set(H0); + + for (let lane = 0; lane < parallelism; lane++) { + param.set(int32LE(0), 64); + param.set(int32LE(lane), 68); + + let position = lane * lanes; + let chunk = await hashFunc(blake512, param, 1024); + argon2Interface.writeMemory(chunk, position * 1024); + + position += 1; + param.set(int32LE(1), 64); + chunk = await hashFunc(blake512, param, 1024); + argon2Interface.writeMemory(chunk, position * 1024); + } + + const C = new Uint8Array(1024); + writeHexToUInt8(C, argon2Interface.calculate(new Uint8Array([]), memorySize)); + + const res = await hashFunc(blake512, C, hashLength); + + if (options.outputType === "hex") { + const digestChars = new Uint8Array(hashLength * 2); + return getDigestHex(digestChars, res, hashLength); + } + + if (options.outputType === "encoded") { + return encodeResult(salt, options, res); + } + + // return binary format + return res; +} + +const validateOptions = (options: IArgon2Options) => { + if (!options || typeof options !== "object") { + throw new Error("Invalid options parameter. It requires an object."); + } + + if (!options.password) { + throw new Error("Password must be specified"); + } + + options.password = getUInt8Buffer(options.password); + if (options.password.length < 1) { + throw new Error("Password must be specified"); + } + + if (!options.salt) { + throw new Error("Salt must be specified"); + } + + options.salt = getUInt8Buffer(options.salt); + if (options.salt.length < 8) { + throw new Error("Salt should be at least 8 bytes long"); + } + + options.secret = getUInt8Buffer(options.secret ?? ""); + + if (!Number.isInteger(options.iterations) || options.iterations < 1) { + throw new Error("Iterations should be a positive number"); + } + + if (!Number.isInteger(options.parallelism) || options.parallelism < 1) { + throw new Error("Parallelism should be a positive number"); + } + + if (!Number.isInteger(options.hashLength) || options.hashLength < 4) { + throw new Error("Hash length should be at least 4 bytes."); + } + + if (!Number.isInteger(options.memorySize)) { + throw new Error("Memory size should be specified."); + } + + if (options.memorySize < 8 * options.parallelism) { + throw new Error("Memory size should be at least 8 * parallelism."); + } + + if (options.outputType === undefined) { + options.outputType = "hex"; + } + + if (!["hex", "binary", "encoded"].includes(options.outputType)) { + throw new Error( + `Insupported output type ${options.outputType}. Valid values: ['hex', 'binary', 'encoded']`, + ); + } +}; + +interface IArgon2OptionsBinary { + outputType: "binary"; +} + +type Argon2ReturnType = T extends IArgon2OptionsBinary ? Uint8Array : string; + +/** + * Calculates hash using the argon2i password-hashing function + * @returns Computed hash + */ +export async function argon2i( + options: T, +): Promise> { + validateOptions(options); + + return argon2Internal({ + ...options, + hashType: "i", + }) as Promise>; +} + +/** + * Calculates hash using the argon2id password-hashing function + * @returns Computed hash + */ +export async function argon2id( + options: T, +): Promise> { + validateOptions(options); + + return argon2Internal({ + ...options, + hashType: "id", + }) as Promise>; +} + +/** + * Calculates hash using the argon2d password-hashing function + * @returns Computed hash + */ +export async function argon2d( + options: T, +): Promise> { + validateOptions(options); + + return argon2Internal({ + ...options, + hashType: "d", + }) as Promise>; +} + +export interface Argon2VerifyOptions { + /** + * Password to be verified + */ + password: IDataType; + /** + * Secret used on hash creation + */ + secret?: IDataType; + /** + * A previously generated argon2 hash in the 'encoded' output format + */ + hash: string; +} + +const getHashParameters = ( + password: IDataType, + encoded: string, + secret?: IDataType, +): IArgon2OptionsExtended => { + const regex = + /^\$argon2(id|i|d)\$v=([0-9]+)\$((?:[mtp]=[0-9]+,){2}[mtp]=[0-9]+)\$([A-Za-z0-9+/]+)\$([A-Za-z0-9+/]+)$/; + const match = encoded.match(regex); + if (!match) { + throw new Error("Invalid hash"); + } + + const [, hashType, version, parameters, salt, hash] = match; + if (version !== "19") { + throw new Error(`Unsupported version: ${version}`); + } + + const parsedParameters: Partial = {}; + const paramMap = { m: "memorySize", p: "parallelism", t: "iterations" }; + for (const x of parameters.split(",")) { + const [n, v] = x.split("="); + parsedParameters[paramMap[n]] = Number(v); + } + + return { + ...parsedParameters, + password, + secret, + hashType: hashType as IArgon2OptionsExtended["hashType"], + salt: decodeBase64(salt), + hashLength: getDecodeBase64Length(hash), + outputType: "encoded", + } as IArgon2OptionsExtended; +}; + +const validateVerifyOptions = (options: Argon2VerifyOptions) => { + if (!options || typeof options !== "object") { + throw new Error("Invalid options parameter. It requires an object."); + } + + if (options.hash === undefined || typeof options.hash !== "string") { + throw new Error("Hash should be specified"); + } +}; + +/** + * Verifies password using the argon2 password-hashing function + * @returns True if the encoded hash matches the password + */ +export async function argon2Verify( + options: Argon2VerifyOptions, +): Promise { + validateVerifyOptions(options); + + const params = getHashParameters( + options.password, + options.hash, + options.secret, + ); + validateOptions(params); + + const hashStart = options.hash.lastIndexOf("$") + 1; + const result = (await argon2Internal(params)) as string; + return result.substring(hashStart) === options.hash.substring(hashStart); +} diff --git a/frontend/node_modules/hash-wasm/lib/bcrypt.ts b/frontend/node_modules/hash-wasm/lib/bcrypt.ts new file mode 100644 index 0000000..c8d4b93 --- /dev/null +++ b/frontend/node_modules/hash-wasm/lib/bcrypt.ts @@ -0,0 +1,186 @@ +import wasmJson from "../wasm/bcrypt.wasm.json"; +import { WASMInterface } from "./WASMInterface"; +import { + type IDataType, + getDigestHex, + getUInt8Buffer, + intArrayToString, +} from "./util"; + +export interface BcryptOptions { + /** + * Password to be hashed + */ + password: IDataType; + /** + * Salt (16 bytes long - usually containing random bytes) + */ + salt: IDataType; + /** + * Number of iterations to perform (4 - 31) + */ + costFactor: number; + /** + * Desired output type. Defaults to 'encoded' + */ + outputType?: "hex" | "binary" | "encoded"; +} + +async function bcryptInternal( + options: BcryptOptions, +): Promise { + const { costFactor, password, salt } = options; + + const bcryptInterface = await WASMInterface(wasmJson, 0); + bcryptInterface.writeMemory(getUInt8Buffer(salt), 0); + const passwordBuffer = getUInt8Buffer(password); + bcryptInterface.writeMemory(passwordBuffer, 16); + const shouldEncode = options.outputType === "encoded" ? 1 : 0; + bcryptInterface + .getExports() + .bcrypt(passwordBuffer.length, costFactor, shouldEncode); + const memory = bcryptInterface.getMemory(); + + if (options.outputType === "encoded") { + return intArrayToString(memory, 60); + } + + if (options.outputType === "hex") { + const digestChars = new Uint8Array(24 * 2); + return getDigestHex(digestChars, memory, 24); + } + + // return binary format + // the data is copied to allow GC of the original memory buffer + return memory.slice(0, 24); +} + +const validateOptions = (options: BcryptOptions) => { + if (!options || typeof options !== "object") { + throw new Error("Invalid options parameter. It requires an object."); + } + + if ( + !Number.isInteger(options.costFactor) || + options.costFactor < 4 || + options.costFactor > 31 + ) { + throw new Error("Cost factor should be a number between 4 and 31"); + } + + options.password = getUInt8Buffer(options.password); + if (options.password.length < 1) { + throw new Error("Password should be at least 1 byte long"); + } + + if (options.password.length > 72) { + throw new Error("Password should be at most 72 bytes long"); + } + + options.salt = getUInt8Buffer(options.salt); + if (options.salt.length !== 16) { + throw new Error("Salt should be 16 bytes long"); + } + + if (options.outputType === undefined) { + options.outputType = "encoded"; + } + + if (!["hex", "binary", "encoded"].includes(options.outputType)) { + throw new Error( + `Insupported output type ${options.outputType}. Valid values: ['hex', 'binary', 'encoded']`, + ); + } +}; + +interface IBcryptOptionsBinary { + outputType: "binary"; +} + +type BcryptReturnType = T extends IBcryptOptionsBinary ? Uint8Array : string; + +/** + * Calculates hash using the bcrypt password-hashing function + * @returns Computed hash + */ +export async function bcrypt( + options: T, +): Promise> { + validateOptions(options); + + return bcryptInternal(options) as Promise>; +} + +export interface BcryptVerifyOptions { + /** + * Password to be verified + */ + password: IDataType; + /** + * A previously generated bcrypt hash in the 'encoded' output format + */ + hash: string; +} + +const validateHashCharacters = (hash: string): boolean => { + if (!/^\$2[axyb]\$[0-3][0-9]\$[./A-Za-z0-9]{53}$/.test(hash)) { + return false; + } + + if (hash[4] === "0" && Number(hash[5]) < 4) { + return false; + } + + if (hash[4] === "3" && Number(hash[5]) > 1) { + return false; + } + + return true; +}; + +const validateVerifyOptions = (options: BcryptVerifyOptions) => { + if (!options || typeof options !== "object") { + throw new Error("Invalid options parameter. It requires an object."); + } + + if (options.hash === undefined || typeof options.hash !== "string") { + throw new Error("Hash should be specified"); + } + + if (options.hash.length !== 60) { + throw new Error("Hash should be 60 bytes long"); + } + + if (!validateHashCharacters(options.hash)) { + throw new Error("Invalid hash"); + } + + options.password = getUInt8Buffer(options.password); + if (options.password.length < 1) { + throw new Error("Password should be at least 1 byte long"); + } + + if (options.password.length > 72) { + throw new Error("Password should be at most 72 bytes long"); + } +}; + +/** + * Verifies password using bcrypt password-hashing function + * @returns True if the encoded hash matches the password + */ +export async function bcryptVerify( + options: BcryptVerifyOptions, +): Promise { + validateVerifyOptions(options); + + const { hash, password } = options; + + const bcryptInterface = await WASMInterface(wasmJson, 0); + bcryptInterface.writeMemory(getUInt8Buffer(hash), 0); + + const passwordBuffer = getUInt8Buffer(password); + bcryptInterface.writeMemory(passwordBuffer, 60); + + return !!bcryptInterface.getExports().bcrypt_verify(passwordBuffer.length); +} diff --git a/frontend/node_modules/hash-wasm/lib/blake2b.ts b/frontend/node_modules/hash-wasm/lib/blake2b.ts new file mode 100644 index 0000000..39ea645 --- /dev/null +++ b/frontend/node_modules/hash-wasm/lib/blake2b.ts @@ -0,0 +1,135 @@ +import wasmJson from "../wasm/blake2b.wasm.json"; +import { + type IHasher, + type IWASMInterface, + WASMInterface, +} from "./WASMInterface"; +import lockedCreate from "./lockedCreate"; +import Mutex from "./mutex"; +import { type IDataType, getUInt8Buffer } from "./util"; + +const mutex = new Mutex(); +let wasmCache: IWASMInterface = null; + +function validateBits(bits: number) { + if (!Number.isInteger(bits) || bits < 8 || bits > 512 || bits % 8 !== 0) { + return new Error("Invalid variant! Valid values: 8, 16, ..., 512"); + } + return null; +} + +function getInitParam(outputBits, keyBits) { + return outputBits | (keyBits << 16); +} + +/** + * Calculates BLAKE2b hash + * @param data Input data (string, Buffer or TypedArray) + * @param bits Number of output bits, which has to be a number + * divisible by 8, between 8 and 512. Defaults to 512. + * @param key Optional key (string, Buffer or TypedArray). Maximum length is 64 bytes. + * @returns Computed hash as a hexadecimal string + */ +export function blake2b( + data: IDataType, + bits = 512, + key: IDataType = null, +): Promise { + if (validateBits(bits)) { + return Promise.reject(validateBits(bits)); + } + + let keyBuffer = null; + let initParam = bits; + if (key !== null) { + keyBuffer = getUInt8Buffer(key); + if (keyBuffer.length > 64) { + return Promise.reject(new Error("Max key length is 64 bytes")); + } + initParam = getInitParam(bits, keyBuffer.length); + } + + const hashLength = bits / 8; + + if (wasmCache === null || wasmCache.hashLength !== hashLength) { + return lockedCreate(mutex, wasmJson, hashLength).then((wasm) => { + wasmCache = wasm; + if (initParam > 512) { + wasmCache.writeMemory(keyBuffer); + } + return wasmCache.calculate(data, initParam); + }); + } + + try { + if (initParam > 512) { + wasmCache.writeMemory(keyBuffer); + } + const hash = wasmCache.calculate(data, initParam); + return Promise.resolve(hash); + } catch (err) { + return Promise.reject(err); + } +} + +/** + * Creates a new BLAKE2b hash instance + * @param bits Number of output bits, which has to be a number + * divisible by 8, between 8 and 512. Defaults to 512. + * @param key Optional key (string, Buffer or TypedArray). Maximum length is 64 bytes. + */ +export function createBLAKE2b( + bits = 512, + key: IDataType = null, +): Promise { + if (validateBits(bits)) { + return Promise.reject(validateBits(bits)); + } + + let keyBuffer = null; + let initParam = bits; + if (key !== null) { + keyBuffer = getUInt8Buffer(key); + if (keyBuffer.length > 64) { + return Promise.reject(new Error("Max key length is 64 bytes")); + } + initParam = getInitParam(bits, keyBuffer.length); + } + + const outputSize = bits / 8; + + return WASMInterface(wasmJson, outputSize).then((wasm) => { + if (initParam > 512) { + wasm.writeMemory(keyBuffer); + } + wasm.init(initParam); + + const obj: IHasher = { + init: + initParam > 512 + ? () => { + wasm.writeMemory(keyBuffer); + wasm.init(initParam); + return obj; + } + : () => { + wasm.init(initParam); + return obj; + }, + update: (data) => { + wasm.update(data); + return obj; + }, + // biome-ignore lint/suspicious/noExplicitAny: Conflict with IHasher type + digest: (outputType) => wasm.digest(outputType) as any, + save: () => wasm.save(), + load: (data) => { + wasm.load(data); + return obj; + }, + blockSize: 128, + digestSize: outputSize, + }; + return obj; + }); +} diff --git a/frontend/node_modules/hash-wasm/lib/blake2s.ts b/frontend/node_modules/hash-wasm/lib/blake2s.ts new file mode 100644 index 0000000..ec10e43 --- /dev/null +++ b/frontend/node_modules/hash-wasm/lib/blake2s.ts @@ -0,0 +1,135 @@ +import wasmJson from "../wasm/blake2s.wasm.json"; +import { + type IHasher, + type IWASMInterface, + WASMInterface, +} from "./WASMInterface"; +import lockedCreate from "./lockedCreate"; +import Mutex from "./mutex"; +import { type IDataType, getUInt8Buffer } from "./util"; + +const mutex = new Mutex(); +let wasmCache: IWASMInterface = null; + +function validateBits(bits: number) { + if (!Number.isInteger(bits) || bits < 8 || bits > 256 || bits % 8 !== 0) { + return new Error("Invalid variant! Valid values: 8, 16, ..., 256"); + } + return null; +} + +function getInitParam(outputBits, keyBits) { + return outputBits | (keyBits << 16); +} + +/** + * Calculates BLAKE2s hash + * @param data Input data (string, Buffer or TypedArray) + * @param bits Number of output bits, which has to be a number + * divisible by 8, between 8 and 256. Defaults to 256. + * @param key Optional key (string, Buffer or TypedArray). Maximum length is 32 bytes. + * @returns Computed hash as a hexadecimal string + */ +export function blake2s( + data: IDataType, + bits = 256, + key: IDataType = null, +): Promise { + if (validateBits(bits)) { + return Promise.reject(validateBits(bits)); + } + + let keyBuffer = null; + let initParam = bits; + if (key !== null) { + keyBuffer = getUInt8Buffer(key); + if (keyBuffer.length > 32) { + return Promise.reject(new Error("Max key length is 32 bytes")); + } + initParam = getInitParam(bits, keyBuffer.length); + } + + const hashLength = bits / 8; + + if (wasmCache === null || wasmCache.hashLength !== hashLength) { + return lockedCreate(mutex, wasmJson, hashLength).then((wasm) => { + wasmCache = wasm; + if (initParam > 512) { + wasmCache.writeMemory(keyBuffer); + } + return wasmCache.calculate(data, initParam); + }); + } + + try { + if (initParam > 512) { + wasmCache.writeMemory(keyBuffer); + } + const hash = wasmCache.calculate(data, initParam); + return Promise.resolve(hash); + } catch (err) { + return Promise.reject(err); + } +} + +/** + * Creates a new BLAKE2s hash instance + * @param bits Number of output bits, which has to be a number + * divisible by 8, between 8 and 256. Defaults to 256. + * @param key Optional key (string, Buffer or TypedArray). Maximum length is 32 bytes. + */ +export function createBLAKE2s( + bits = 256, + key: IDataType = null, +): Promise { + if (validateBits(bits)) { + return Promise.reject(validateBits(bits)); + } + + let keyBuffer = null; + let initParam = bits; + if (key !== null) { + keyBuffer = getUInt8Buffer(key); + if (keyBuffer.length > 32) { + return Promise.reject(new Error("Max key length is 32 bytes")); + } + initParam = getInitParam(bits, keyBuffer.length); + } + + const outputSize = bits / 8; + + return WASMInterface(wasmJson, outputSize).then((wasm) => { + if (initParam > 512) { + wasm.writeMemory(keyBuffer); + } + wasm.init(initParam); + + const obj: IHasher = { + init: + initParam > 512 + ? () => { + wasm.writeMemory(keyBuffer); + wasm.init(initParam); + return obj; + } + : () => { + wasm.init(initParam); + return obj; + }, + update: (data) => { + wasm.update(data); + return obj; + }, + // biome-ignore lint/suspicious/noExplicitAny: Conflict with IHasher type + digest: (outputType) => wasm.digest(outputType) as any, + save: () => wasm.save(), + load: (data) => { + wasm.load(data); + return obj; + }, + blockSize: 64, + digestSize: outputSize, + }; + return obj; + }); +} diff --git a/frontend/node_modules/hash-wasm/lib/blake3.ts b/frontend/node_modules/hash-wasm/lib/blake3.ts new file mode 100644 index 0000000..a8c2e9c --- /dev/null +++ b/frontend/node_modules/hash-wasm/lib/blake3.ts @@ -0,0 +1,133 @@ +import wasmJson from "../wasm/blake3.wasm.json"; +import { + type IHasher, + type IWASMInterface, + WASMInterface, +} from "./WASMInterface"; +import lockedCreate from "./lockedCreate"; +import Mutex from "./mutex"; +import { type IDataType, getUInt8Buffer } from "./util"; + +const mutex = new Mutex(); +let wasmCache: IWASMInterface = null; + +function validateBits(bits: number) { + if (!Number.isInteger(bits) || bits < 8 || bits % 8 !== 0) { + return new Error("Invalid variant! Valid values: 8, 16, ..."); + } + return null; +} + +/** + * Calculates BLAKE3 hash + * @param data Input data (string, Buffer or TypedArray) + * @param bits Number of output bits, which has to be a number + * divisible by 8. Defaults to 256. + * @param key Optional key (string, Buffer or TypedArray). Length should be 32 bytes. + * @returns Computed hash as a hexadecimal string + */ +export function blake3( + data: IDataType, + bits = 256, + key: IDataType = null, +): Promise { + if (validateBits(bits)) { + return Promise.reject(validateBits(bits)); + } + + let keyBuffer = null; + let initParam = 0; // key is empty by default + if (key !== null) { + keyBuffer = getUInt8Buffer(key); + if (keyBuffer.length !== 32) { + return Promise.reject(new Error("Key length must be exactly 32 bytes")); + } + initParam = 32; + } + + const hashLength = bits / 8; + const digestParam = hashLength; + + if (wasmCache === null || wasmCache.hashLength !== hashLength) { + return lockedCreate(mutex, wasmJson, hashLength).then((wasm) => { + wasmCache = wasm; + if (initParam === 32) { + wasmCache.writeMemory(keyBuffer); + } + return wasmCache.calculate(data, initParam, digestParam); + }); + } + + try { + if (initParam === 32) { + wasmCache.writeMemory(keyBuffer); + } + const hash = wasmCache.calculate(data, initParam, digestParam); + return Promise.resolve(hash); + } catch (err) { + return Promise.reject(err); + } +} + +/** + * Creates a new BLAKE3 hash instance + * @param bits Number of output bits, which has to be a number + * divisible by 8. Defaults to 256. + * @param key Optional key (string, Buffer or TypedArray). Length should be 32 bytes. + */ +export function createBLAKE3( + bits = 256, + key: IDataType = null, +): Promise { + if (validateBits(bits)) { + return Promise.reject(validateBits(bits)); + } + + let keyBuffer = null; + let initParam = 0; // key is empty by default + if (key !== null) { + keyBuffer = getUInt8Buffer(key); + if (keyBuffer.length !== 32) { + return Promise.reject(new Error("Key length must be exactly 32 bytes")); + } + initParam = 32; + } + + const outputSize = bits / 8; + const digestParam = outputSize; + + return WASMInterface(wasmJson, outputSize).then((wasm) => { + if (initParam === 32) { + wasm.writeMemory(keyBuffer); + } + wasm.init(initParam); + + const obj: IHasher = { + init: + initParam === 32 + ? () => { + wasm.writeMemory(keyBuffer); + wasm.init(initParam); + return obj; + } + : () => { + wasm.init(initParam); + return obj; + }, + update: (data) => { + wasm.update(data); + return obj; + }, + // biome-ignore lint/suspicious/noExplicitAny: Conflict with IHasher type + digest: (outputType) => wasm.digest(outputType, digestParam) as any, + save: () => wasm.save(), + load: (data) => { + wasm.load(data); + return obj; + }, + blockSize: 64, + digestSize: outputSize, + }; + return obj; + }); +} diff --git a/frontend/node_modules/hash-wasm/lib/crc32.ts b/frontend/node_modules/hash-wasm/lib/crc32.ts new file mode 100644 index 0000000..1f294d2 --- /dev/null +++ b/frontend/node_modules/hash-wasm/lib/crc32.ts @@ -0,0 +1,82 @@ +import wasmJson from "../wasm/crc32.wasm.json"; +import { + type IHasher, + type IWASMInterface, + WASMInterface, +} from "./WASMInterface"; +import lockedCreate from "./lockedCreate"; +import Mutex from "./mutex"; +import type { IDataType } from "./util"; + +const mutex = new Mutex(); +let wasmCache: IWASMInterface = null; + +function validatePoly(poly: number) { + if (!Number.isInteger(poly) || poly < 0 || poly > 0xffffffff) { + return new Error("Polynomial must be a valid 32-bit long unsigned integer"); + } + return null; +} + +/** + * Calculates CRC-32 hash + * @param data Input data (string, Buffer or TypedArray) + * @param polynomial Input polynomial (defaults to 0xedb88320, for CRC32C use 0x82f63b78) + * @returns Computed hash as a hexadecimal string + */ +export function crc32( + data: IDataType, + polynomial = 0xedb88320, +): Promise { + if (validatePoly(polynomial)) { + return Promise.reject(validatePoly(polynomial)); + } + + if (wasmCache === null) { + return lockedCreate(mutex, wasmJson, 4).then((wasm) => { + wasmCache = wasm; + return wasmCache.calculate(data, polynomial); + }); + } + + try { + const hash = wasmCache.calculate(data, polynomial); + return Promise.resolve(hash); + } catch (err) { + return Promise.reject(err); + } +} + +/** + * Creates a new CRC-32 hash instance + * @param polynomial Input polynomial (defaults to 0xedb88320, for CRC32C use 0x82f63b78) + */ +export function createCRC32(polynomial = 0xedb88320): Promise { + if (validatePoly(polynomial)) { + return Promise.reject(validatePoly(polynomial)); + } + + return WASMInterface(wasmJson, 4).then((wasm) => { + wasm.init(polynomial); + const obj: IHasher = { + init: () => { + wasm.init(polynomial); + return obj; + }, + update: (data) => { + wasm.update(data); + return obj; + }, + // biome-ignore lint/suspicious/noExplicitAny: Conflict with IHasher type + digest: (outputType) => wasm.digest(outputType) as any, + save: () => wasm.save(), + load: (data) => { + wasm.load(data); + return obj; + }, + blockSize: 4, + digestSize: 4, + }; + return obj; + }); +} diff --git a/frontend/node_modules/hash-wasm/lib/crc64.ts b/frontend/node_modules/hash-wasm/lib/crc64.ts new file mode 100644 index 0000000..fce594c --- /dev/null +++ b/frontend/node_modules/hash-wasm/lib/crc64.ts @@ -0,0 +1,110 @@ +import wasmJson from "../wasm/crc64.wasm.json"; +import { + type IHasher, + type IWASMInterface, + WASMInterface, +} from "./WASMInterface"; +import lockedCreate from "./lockedCreate"; +import Mutex from "./mutex"; +import type { IDataType } from "./util"; + +const mutex = new Mutex(); +let wasmCache: IWASMInterface = null; +const polyBuffer = new Uint8Array(8); + +function parsePoly(poly: string) { + const errText = "Polynomial must be provided as a 16 char long hex string"; + + if (typeof poly !== "string" || poly.length !== 16) { + return { hi: 0, lo: 0, err: new Error(errText) }; + } + + const hi = Number(`0x${poly.slice(0, 8)}`); + const lo = Number(`0x${poly.slice(8)}`); + + if (Number.isNaN(hi) || Number.isNaN(lo)) { + return { hi, lo, err: new Error(errText) }; + } + + return { hi, lo, err: null }; +} + +function writePoly(arr: ArrayBuffer, lo: number, hi: number) { + // write in little-endian format + const buffer = new DataView(arr); + buffer.setUint32(0, lo, true); + buffer.setUint32(4, hi, true); +} + +/** + * Calculates CRC-64 hash + * @param data Input data (string, Buffer or TypedArray) + * @param polynomial Input polynomial (defaults to 'c96c5795d7870f42' - ECMA) + * @returns Computed hash as a hexadecimal string + */ +export function crc64( + data: IDataType, + polynomial = "c96c5795d7870f42", +): Promise { + const { hi, lo, err } = parsePoly(polynomial); + if (err !== null) { + return Promise.reject(err); + } + + if (wasmCache === null) { + return lockedCreate(mutex, wasmJson, 8).then((wasm) => { + wasmCache = wasm; + writePoly(polyBuffer.buffer, lo, hi); + wasmCache.writeMemory(polyBuffer); + return wasmCache.calculate(data); + }); + } + + try { + writePoly(polyBuffer.buffer, lo, hi); + wasmCache.writeMemory(polyBuffer); + const hash = wasmCache.calculate(data); + return Promise.resolve(hash); + } catch (err) { + return Promise.reject(err); + } +} + +/** + * Creates a new CRC-64 hash instance + * @param polynomial Input polynomial (defaults to 'c96c5795d7870f42' - ECMA) + */ +export function createCRC64(polynomial = "c96c5795d7870f42"): Promise { + const { hi, lo, err } = parsePoly(polynomial); + if (err !== null) { + return Promise.reject(err); + } + + return WASMInterface(wasmJson, 8).then((wasm) => { + const instanceBuffer = new Uint8Array(8); + writePoly(instanceBuffer.buffer, lo, hi); + wasm.writeMemory(instanceBuffer); + wasm.init(); + const obj: IHasher = { + init: () => { + wasm.writeMemory(instanceBuffer); + wasm.init(); + return obj; + }, + update: (data) => { + wasm.update(data); + return obj; + }, + // biome-ignore lint/suspicious/noExplicitAny: Conflict with IHasher type + digest: (outputType) => wasm.digest(outputType) as any, + save: () => wasm.save(), + load: (data) => { + wasm.load(data); + return obj; + }, + blockSize: 8, + digestSize: 8, + }; + return obj; + }); +} diff --git a/frontend/node_modules/hash-wasm/lib/hmac.ts b/frontend/node_modules/hash-wasm/lib/hmac.ts new file mode 100644 index 0000000..30d315c --- /dev/null +++ b/frontend/node_modules/hash-wasm/lib/hmac.ts @@ -0,0 +1,86 @@ +import type { IHasher } from "./WASMInterface"; +import { type IDataType, getUInt8Buffer } from "./util"; + +function calculateKeyBuffer(hasher: IHasher, key: IDataType): Uint8Array { + const { blockSize } = hasher; + + const buf = getUInt8Buffer(key); + + if (buf.length > blockSize) { + hasher.update(buf); + const uintArr = hasher.digest("binary"); + hasher.init(); + return uintArr; + } + + return new Uint8Array(buf.buffer, buf.byteOffset, buf.length); +} + +function calculateHmac(hasher: IHasher, key: IDataType): IHasher { + hasher.init(); + + const { blockSize } = hasher; + const keyBuf = calculateKeyBuffer(hasher, key); + const keyBuffer = new Uint8Array(blockSize); + keyBuffer.set(keyBuf); + + const opad = new Uint8Array(blockSize); + + for (let i = 0; i < blockSize; i++) { + const v = keyBuffer[i]; + opad[i] = v ^ 0x5c; + keyBuffer[i] = v ^ 0x36; + } + + hasher.update(keyBuffer); + + const obj: IHasher = { + init: () => { + hasher.init(); + hasher.update(keyBuffer); + return obj; + }, + + update: (data: IDataType) => { + hasher.update(data); + return obj; + }, + + digest: ((outputType) => { + const uintArr = hasher.digest("binary"); + hasher.init(); + hasher.update(opad); + hasher.update(uintArr); + return hasher.digest(outputType); + // biome-ignore lint/suspicious/noExplicitAny: Conflict with IHasher type + }) as any, + save: () => { + throw new Error("save() not supported"); + }, + load: () => { + throw new Error("load() not supported"); + }, + + blockSize: hasher.blockSize, + digestSize: hasher.digestSize, + }; + return obj; +} + +/** + * Calculates HMAC hash + * @param hash Hash algorithm to use. It has to be the return value of a function like createSHA1() + * @param key Key (string, Buffer or TypedArray) + */ +export function createHMAC( + hash: Promise, + key: IDataType, +): Promise { + if (!hash || !hash.then) { + throw new Error( + 'Invalid hash function is provided! Usage: createHMAC(createMD5(), "key").', + ); + } + + return hash.then((hasher) => calculateHmac(hasher, key)); +} diff --git a/frontend/node_modules/hash-wasm/lib/index.ts b/frontend/node_modules/hash-wasm/lib/index.ts new file mode 100644 index 0000000..ec5bfb6 --- /dev/null +++ b/frontend/node_modules/hash-wasm/lib/index.ts @@ -0,0 +1,30 @@ +export * from "./adler32"; +export * from "./argon2"; +export * from "./blake2b"; +export * from "./blake2s"; +export * from "./blake3"; +export * from "./crc32"; +export * from "./crc64"; +export * from "./md4"; +export * from "./md5"; +export * from "./sha1"; +export * from "./sha3"; +export * from "./keccak"; +export * from "./sha224"; +export * from "./sha256"; +export * from "./sha384"; +export * from "./sha512"; +export * from "./xxhash32"; +export * from "./xxhash64"; +export * from "./xxhash3"; +export * from "./xxhash128"; +export * from "./ripemd160"; +export * from "./hmac"; +export * from "./pbkdf2"; +export * from "./scrypt"; +export * from "./bcrypt"; +export * from "./whirlpool"; +export * from "./sm3"; + +export type { IDataType } from "./util"; +export type { IHasher } from "./WASMInterface"; diff --git a/frontend/node_modules/hash-wasm/lib/keccak.ts b/frontend/node_modules/hash-wasm/lib/keccak.ts new file mode 100644 index 0000000..6ffceef --- /dev/null +++ b/frontend/node_modules/hash-wasm/lib/keccak.ts @@ -0,0 +1,88 @@ +import wasmJson from "../wasm/sha3.wasm.json"; +import { + type IHasher, + type IWASMInterface, + WASMInterface, +} from "./WASMInterface"; +import lockedCreate from "./lockedCreate"; +import Mutex from "./mutex"; +import type { IDataType } from "./util"; + +type IValidBits = 224 | 256 | 384 | 512; +const mutex = new Mutex(); +let wasmCache: IWASMInterface = null; + +function validateBits(bits: IValidBits) { + if (![224, 256, 384, 512].includes(bits)) { + return new Error("Invalid variant! Valid values: 224, 256, 384, 512"); + } + + return null; +} + +/** + * Calculates Keccak hash + * @param data Input data (string, Buffer or TypedArray) + * @param bits Number of output bits. Valid values: 224, 256, 384, 512 + * @returns Computed hash as a hexadecimal string + */ +export function keccak( + data: IDataType, + bits: IValidBits = 512, +): Promise { + if (validateBits(bits)) { + return Promise.reject(validateBits(bits)); + } + + const hashLength = bits / 8; + + if (wasmCache === null || wasmCache.hashLength !== hashLength) { + return lockedCreate(mutex, wasmJson, hashLength).then((wasm) => { + wasmCache = wasm; + return wasmCache.calculate(data, bits, 0x01); + }); + } + + try { + const hash = wasmCache.calculate(data, bits, 0x01); + return Promise.resolve(hash); + } catch (err) { + return Promise.reject(err); + } +} + +/** + * Creates a new Keccak hash instance + * @param bits Number of output bits. Valid values: 224, 256, 384, 512 + */ +export function createKeccak(bits: IValidBits = 512): Promise { + if (validateBits(bits)) { + return Promise.reject(validateBits(bits)); + } + + const outputSize = bits / 8; + + return WASMInterface(wasmJson, outputSize).then((wasm) => { + wasm.init(bits); + const obj: IHasher = { + init: () => { + wasm.init(bits); + return obj; + }, + update: (data) => { + wasm.update(data); + return obj; + }, + // biome-ignore lint/suspicious/noExplicitAny: Conflict with IHasher type + digest: (outputType) => wasm.digest(outputType, 0x01) as any, + save: () => wasm.save(), + load: (data) => { + wasm.load(data); + return obj; + }, + blockSize: 200 - 2 * outputSize, + digestSize: outputSize, + }; + return obj; + }); +} diff --git a/frontend/node_modules/hash-wasm/lib/lockedCreate.ts b/frontend/node_modules/hash-wasm/lib/lockedCreate.ts new file mode 100644 index 0000000..77e218a --- /dev/null +++ b/frontend/node_modules/hash-wasm/lib/lockedCreate.ts @@ -0,0 +1,14 @@ +import { type IWASMInterface, WASMInterface } from "./WASMInterface"; +import type Mutex from "./mutex"; +import type { IEmbeddedWasm } from "./util"; + +export default async function lockedCreate( + mutex: Mutex, + binary: IEmbeddedWasm, + hashLength: number, +): Promise { + const unlock = await mutex.lock(); + const wasm = await WASMInterface(binary, hashLength); + unlock(); + return wasm; +} diff --git a/frontend/node_modules/hash-wasm/lib/md4.ts b/frontend/node_modules/hash-wasm/lib/md4.ts new file mode 100644 index 0000000..89744bd --- /dev/null +++ b/frontend/node_modules/hash-wasm/lib/md4.ts @@ -0,0 +1,62 @@ +import wasmJson from "../wasm/md4.wasm.json"; +import { + type IHasher, + type IWASMInterface, + WASMInterface, +} from "./WASMInterface"; +import lockedCreate from "./lockedCreate"; +import Mutex from "./mutex"; +import type { IDataType } from "./util"; + +const mutex = new Mutex(); +let wasmCache: IWASMInterface = null; + +/** + * Calculates MD4 hash + * @param data Input data (string, Buffer or TypedArray) + * @returns Computed hash as a hexadecimal string + */ +export function md4(data: IDataType): Promise { + if (wasmCache === null) { + return lockedCreate(mutex, wasmJson, 16).then((wasm) => { + wasmCache = wasm; + return wasmCache.calculate(data); + }); + } + + try { + const hash = wasmCache.calculate(data); + return Promise.resolve(hash); + } catch (err) { + return Promise.reject(err); + } +} + +/** + * Creates a new MD4 hash instance + */ +export function createMD4(): Promise { + return WASMInterface(wasmJson, 16).then((wasm) => { + wasm.init(); + const obj: IHasher = { + init: () => { + wasm.init(); + return obj; + }, + update: (data) => { + wasm.update(data); + return obj; + }, + // biome-ignore lint/suspicious/noExplicitAny: Conflict with IHasher type + digest: (outputType) => wasm.digest(outputType) as any, + save: () => wasm.save(), + load: (data) => { + wasm.load(data); + return obj; + }, + blockSize: 64, + digestSize: 16, + }; + return obj; + }); +} diff --git a/frontend/node_modules/hash-wasm/lib/md5.ts b/frontend/node_modules/hash-wasm/lib/md5.ts new file mode 100644 index 0000000..9befb05 --- /dev/null +++ b/frontend/node_modules/hash-wasm/lib/md5.ts @@ -0,0 +1,62 @@ +import wasmJson from "../wasm/md5.wasm.json"; +import { + type IHasher, + type IWASMInterface, + WASMInterface, +} from "./WASMInterface"; +import lockedCreate from "./lockedCreate"; +import Mutex from "./mutex"; +import type { IDataType } from "./util"; + +const mutex = new Mutex(); +let wasmCache: IWASMInterface = null; + +/** + * Calculates MD5 hash + * @param data Input data (string, Buffer or TypedArray) + * @returns Computed hash as a hexadecimal string + */ +export function md5(data: IDataType): Promise { + if (wasmCache === null) { + return lockedCreate(mutex, wasmJson, 16).then((wasm) => { + wasmCache = wasm; + return wasmCache.calculate(data); + }); + } + + try { + const hash = wasmCache.calculate(data); + return Promise.resolve(hash); + } catch (err) { + return Promise.reject(err); + } +} + +/** + * Creates a new MD5 hash instance + */ +export function createMD5(): Promise { + return WASMInterface(wasmJson, 16).then((wasm) => { + wasm.init(); + const obj: IHasher = { + init: () => { + wasm.init(); + return obj; + }, + update: (data) => { + wasm.update(data); + return obj; + }, + // biome-ignore lint/suspicious/noExplicitAny: Conflict with IHasher type + digest: (outputType) => wasm.digest(outputType) as any, + save: () => wasm.save(), + load: (data) => { + wasm.load(data); + return obj; + }, + blockSize: 64, + digestSize: 16, + }; + return obj; + }); +} diff --git a/frontend/node_modules/hash-wasm/lib/mutex.ts b/frontend/node_modules/hash-wasm/lib/mutex.ts new file mode 100644 index 0000000..af6f75d --- /dev/null +++ b/frontend/node_modules/hash-wasm/lib/mutex.ts @@ -0,0 +1,24 @@ +class Mutex { + private mutex = Promise.resolve(); + + lock(): PromiseLike<() => void> { + let begin: (unlock: () => void) => void = () => {}; + + this.mutex = this.mutex.then(() => new Promise(begin)); + + return new Promise((res) => { + begin = res; + }); + } + + async dispatch(fn: () => PromiseLike): Promise { + const unlock = await this.lock(); + try { + return await Promise.resolve(fn()); + } finally { + unlock(); + } + } +} + +export default Mutex; diff --git a/frontend/node_modules/hash-wasm/lib/pbkdf2.ts b/frontend/node_modules/hash-wasm/lib/pbkdf2.ts new file mode 100644 index 0000000..31db238 --- /dev/null +++ b/frontend/node_modules/hash-wasm/lib/pbkdf2.ts @@ -0,0 +1,138 @@ +import type { IHasher } from "./WASMInterface"; +import { createHMAC } from "./hmac"; +import { type IDataType, getDigestHex, getUInt8Buffer } from "./util"; + +export interface IPBKDF2Options { + /** + * Password (or message) to be hashed + */ + password: IDataType; + /** + * Salt (usually containing random bytes) + */ + salt: IDataType; + /** + * Number of iterations to perform + */ + iterations: number; + /** + * Output size in bytes + */ + hashLength: number; + /** + * Hash algorithm to use. It has to be the return value of a function like createSHA1() + */ + hashFunction: Promise; + /** + * Desired output type. Defaults to 'hex' + */ + outputType?: "hex" | "binary"; +} + +async function calculatePBKDF2( + digest: IHasher, + salt: IDataType, + iterations: number, + hashLength: number, + outputType?: "hex" | "binary", +): Promise { + const DK = new Uint8Array(hashLength); + const block1 = new Uint8Array(salt.length + 4); + const block1View = new DataView(block1.buffer); + const saltBuffer = getUInt8Buffer(salt); + const saltUIntBuffer = new Uint8Array( + saltBuffer.buffer, + saltBuffer.byteOffset, + saltBuffer.length, + ); + block1.set(saltUIntBuffer); + + let destPos = 0; + const hLen = digest.digestSize; + const l = Math.ceil(hashLength / hLen); + + let T: Uint8Array = null; + let U: Uint8Array = null; + + for (let i = 1; i <= l; i++) { + block1View.setUint32(salt.length, i); + + digest.init(); + digest.update(block1); + T = digest.digest("binary"); + U = T.slice(); + + for (let j = 1; j < iterations; j++) { + digest.init(); + digest.update(U); + U = digest.digest("binary"); + for (let k = 0; k < hLen; k++) { + T[k] ^= U[k]; + } + } + + DK.set(T.subarray(0, hashLength - destPos), destPos); + destPos += hLen; + } + + if (outputType === "binary") { + return DK; + } + + const digestChars = new Uint8Array(hashLength * 2); + return getDigestHex(digestChars, DK, hashLength); +} + +const validateOptions = (options: IPBKDF2Options) => { + if (!options || typeof options !== "object") { + throw new Error("Invalid options parameter. It requires an object."); + } + + if (!options.hashFunction || !options.hashFunction.then) { + throw new Error( + 'Invalid hash function is provided! Usage: pbkdf2("password", "salt", 1000, 32, createSHA1()).', + ); + } + + if (!Number.isInteger(options.iterations) || options.iterations < 1) { + throw new Error("Iterations should be a positive number"); + } + + if (!Number.isInteger(options.hashLength) || options.hashLength < 1) { + throw new Error("Hash length should be a positive number"); + } + + if (options.outputType === undefined) { + options.outputType = "hex"; + } + + if (!["hex", "binary"].includes(options.outputType)) { + throw new Error( + `Insupported output type ${options.outputType}. Valid values: ['hex', 'binary']`, + ); + } +}; + +interface IPBKDF2OptionsBinary { + outputType: "binary"; +} + +type PBKDF2ReturnType = T extends IPBKDF2OptionsBinary ? Uint8Array : string; + +/** + * Generates a new PBKDF2 hash for the supplied password + */ +export async function pbkdf2( + options: T, +): Promise> { + validateOptions(options); + + const hmac = await createHMAC(options.hashFunction, options.password); + return calculatePBKDF2( + hmac, + options.salt, + options.iterations, + options.hashLength, + options.outputType, + ) as Promise>; +} diff --git a/frontend/node_modules/hash-wasm/lib/ripemd160.ts b/frontend/node_modules/hash-wasm/lib/ripemd160.ts new file mode 100644 index 0000000..4dc73ce --- /dev/null +++ b/frontend/node_modules/hash-wasm/lib/ripemd160.ts @@ -0,0 +1,62 @@ +import wasmJson from "../wasm/ripemd160.wasm.json"; +import { + type IHasher, + type IWASMInterface, + WASMInterface, +} from "./WASMInterface"; +import lockedCreate from "./lockedCreate"; +import Mutex from "./mutex"; +import type { IDataType } from "./util"; + +const mutex = new Mutex(); +let wasmCache: IWASMInterface = null; + +/** + * Calculates RIPEMD-160 hash + * @param data Input data (string, Buffer or TypedArray) + * @returns Computed hash as a hexadecimal string + */ +export function ripemd160(data: IDataType): Promise { + if (wasmCache === null) { + return lockedCreate(mutex, wasmJson, 20).then((wasm) => { + wasmCache = wasm; + return wasmCache.calculate(data); + }); + } + + try { + const hash = wasmCache.calculate(data); + return Promise.resolve(hash); + } catch (err) { + return Promise.reject(err); + } +} + +/** + * Creates a new RIPEMD-160 hash instance + */ +export function createRIPEMD160(): Promise { + return WASMInterface(wasmJson, 20).then((wasm) => { + wasm.init(); + const obj: IHasher = { + init: () => { + wasm.init(); + return obj; + }, + update: (data) => { + wasm.update(data); + return obj; + }, + // biome-ignore lint/suspicious/noExplicitAny: Conflict with IHasher type + digest: (outputType) => wasm.digest(outputType) as any, + save: () => wasm.save(), + load: (data) => { + wasm.load(data); + return obj; + }, + blockSize: 64, + digestSize: 20, + }; + return obj; + }); +} diff --git a/frontend/node_modules/hash-wasm/lib/scrypt.ts b/frontend/node_modules/hash-wasm/lib/scrypt.ts new file mode 100644 index 0000000..ba1cfea --- /dev/null +++ b/frontend/node_modules/hash-wasm/lib/scrypt.ts @@ -0,0 +1,141 @@ +import wasmJson from "../wasm/scrypt.wasm.json"; +import { WASMInterface } from "./WASMInterface"; +import { pbkdf2 } from "./pbkdf2"; +import { createSHA256 } from "./sha256"; +import { type IDataType, getDigestHex } from "./util"; + +export interface ScryptOptions { + /** + * Password (or message) to be hashed + */ + password: IDataType; + /** + * Salt (usually containing random bytes) + */ + salt: IDataType; + /** + * CPU / memory cost - must be a power of 2 (e.g. 1024) + */ + costFactor: number; + /** + * Block size (8 is commonly used) + */ + blockSize: number; + /** + * Degree of parallelism + */ + parallelism: number; + /** + * Output size in bytes + */ + hashLength: number; + /** + * Output data type. Defaults to hexadecimal string + */ + outputType?: "hex" | "binary"; +} + +async function scryptInternal( + options: ScryptOptions, +): Promise { + const { costFactor, blockSize, parallelism, hashLength } = options; + const SHA256Hasher = createSHA256(); + + const blockData = await pbkdf2({ + password: options.password, + salt: options.salt, + iterations: 1, + hashLength: 128 * blockSize * parallelism, + hashFunction: SHA256Hasher, + outputType: "binary", + }); + + const scryptInterface = await WASMInterface(wasmJson, 0); + + // last block is for storing the temporary vectors + const VSize = 128 * blockSize * costFactor; + const XYSize = 256 * blockSize; + scryptInterface.setMemorySize(blockData.length + VSize + XYSize); + scryptInterface.writeMemory(blockData, 0); + + // mix blocks + scryptInterface.getExports().scrypt(blockSize, costFactor, parallelism); + + const expensiveSalt = scryptInterface + .getMemory() + .subarray(0, 128 * blockSize * parallelism); + + const outputData = await pbkdf2({ + password: options.password, + salt: expensiveSalt, + iterations: 1, + hashLength, + hashFunction: SHA256Hasher, + outputType: "binary", + }); + + if (options.outputType === "hex") { + const digestChars = new Uint8Array(hashLength * 2); + return getDigestHex(digestChars, outputData, hashLength); + } + + // return binary format + return outputData; +} + +const isPowerOfTwo = (v: number): boolean => v && !(v & (v - 1)); + +const validateOptions = (options: ScryptOptions) => { + if (!options || typeof options !== "object") { + throw new Error("Invalid options parameter. It requires an object."); + } + + if (!Number.isInteger(options.blockSize) || options.blockSize < 1) { + throw new Error("Block size should be a positive number"); + } + + if ( + !Number.isInteger(options.costFactor) || + options.costFactor < 2 || + !isPowerOfTwo(options.costFactor) + ) { + throw new Error("Cost factor should be a power of 2, greater than 1"); + } + + if (!Number.isInteger(options.parallelism) || options.parallelism < 1) { + throw new Error("Parallelism should be a positive number"); + } + + if (!Number.isInteger(options.hashLength) || options.hashLength < 1) { + throw new Error("Hash length should be a positive number."); + } + + if (options.outputType === undefined) { + options.outputType = "hex"; + } + + if (!["hex", "binary"].includes(options.outputType)) { + throw new Error( + `Insupported output type ${options.outputType}. Valid values: ['hex', 'binary']`, + ); + } +}; + +interface IScryptOptionsBinary { + outputType: "binary"; +} + +type ScryptReturnType = T extends IScryptOptionsBinary ? Uint8Array : string; + +/** + * Calculates hash using the scrypt password-based key derivation function + * @returns Computed hash as a hexadecimal string or as + * Uint8Array depending on the outputType option + */ +export async function scrypt( + options: T, +): Promise> { + validateOptions(options); + + return scryptInternal(options) as Promise>; +} diff --git a/frontend/node_modules/hash-wasm/lib/sha1.ts b/frontend/node_modules/hash-wasm/lib/sha1.ts new file mode 100644 index 0000000..b154906 --- /dev/null +++ b/frontend/node_modules/hash-wasm/lib/sha1.ts @@ -0,0 +1,62 @@ +import wasmJson from "../wasm/sha1.wasm.json"; +import { + type IHasher, + type IWASMInterface, + WASMInterface, +} from "./WASMInterface"; +import lockedCreate from "./lockedCreate"; +import Mutex from "./mutex"; +import type { IDataType } from "./util"; + +const mutex = new Mutex(); +let wasmCache: IWASMInterface = null; + +/** + * Calculates SHA-1 hash + * @param data Input data (string, Buffer or TypedArray) + * @returns Computed hash as a hexadecimal string + */ +export function sha1(data: IDataType): Promise { + if (wasmCache === null) { + return lockedCreate(mutex, wasmJson, 20).then((wasm) => { + wasmCache = wasm; + return wasmCache.calculate(data); + }); + } + + try { + const hash = wasmCache.calculate(data); + return Promise.resolve(hash); + } catch (err) { + return Promise.reject(err); + } +} + +/** + * Creates a new SHA-1 hash instance + */ +export function createSHA1(): Promise { + return WASMInterface(wasmJson, 20).then((wasm) => { + wasm.init(); + const obj: IHasher = { + init: () => { + wasm.init(); + return obj; + }, + update: (data) => { + wasm.update(data); + return obj; + }, + // biome-ignore lint/suspicious/noExplicitAny: Conflict with IHasher type + digest: (outputType) => wasm.digest(outputType) as any, + save: () => wasm.save(), + load: (data) => { + wasm.load(data); + return obj; + }, + blockSize: 64, + digestSize: 20, + }; + return obj; + }); +} diff --git a/frontend/node_modules/hash-wasm/lib/sha224.ts b/frontend/node_modules/hash-wasm/lib/sha224.ts new file mode 100644 index 0000000..78efd1f --- /dev/null +++ b/frontend/node_modules/hash-wasm/lib/sha224.ts @@ -0,0 +1,62 @@ +import wasmJson from "../wasm/sha256.wasm.json"; +import { + type IHasher, + type IWASMInterface, + WASMInterface, +} from "./WASMInterface"; +import lockedCreate from "./lockedCreate"; +import Mutex from "./mutex"; +import type { IDataType } from "./util"; + +const mutex = new Mutex(); +let wasmCache: IWASMInterface = null; + +/** + * Calculates SHA-2 (SHA-224) hash + * @param data Input data (string, Buffer or TypedArray) + * @returns Computed hash as a hexadecimal string + */ +export function sha224(data: IDataType): Promise { + if (wasmCache === null) { + return lockedCreate(mutex, wasmJson, 28).then((wasm) => { + wasmCache = wasm; + return wasmCache.calculate(data, 224); + }); + } + + try { + const hash = wasmCache.calculate(data, 224); + return Promise.resolve(hash); + } catch (err) { + return Promise.reject(err); + } +} + +/** + * Creates a new SHA-2 (SHA-224) hash instance + */ +export function createSHA224(): Promise { + return WASMInterface(wasmJson, 28).then((wasm) => { + wasm.init(224); + const obj: IHasher = { + init: () => { + wasm.init(224); + return obj; + }, + update: (data) => { + wasm.update(data); + return obj; + }, + // biome-ignore lint/suspicious/noExplicitAny: Conflict with IHasher type + digest: (outputType) => wasm.digest(outputType) as any, + save: () => wasm.save(), + load: (data) => { + wasm.load(data); + return obj; + }, + blockSize: 64, + digestSize: 28, + }; + return obj; + }); +} diff --git a/frontend/node_modules/hash-wasm/lib/sha256.ts b/frontend/node_modules/hash-wasm/lib/sha256.ts new file mode 100644 index 0000000..830a5d6 --- /dev/null +++ b/frontend/node_modules/hash-wasm/lib/sha256.ts @@ -0,0 +1,62 @@ +import wasmJson from "../wasm/sha256.wasm.json"; +import { + type IHasher, + type IWASMInterface, + WASMInterface, +} from "./WASMInterface"; +import lockedCreate from "./lockedCreate"; +import Mutex from "./mutex"; +import type { IDataType } from "./util"; + +const mutex = new Mutex(); +let wasmCache: IWASMInterface = null; + +/** + * Calculates SHA-2 (SHA-256) hash + * @param data Input data (string, Buffer or TypedArray) + * @returns Computed hash as a hexadecimal string + */ +export function sha256(data: IDataType): Promise { + if (wasmCache === null) { + return lockedCreate(mutex, wasmJson, 32).then((wasm) => { + wasmCache = wasm; + return wasmCache.calculate(data, 256); + }); + } + + try { + const hash = wasmCache.calculate(data, 256); + return Promise.resolve(hash); + } catch (err) { + return Promise.reject(err); + } +} + +/** + * Creates a new SHA-2 (SHA-256) hash instance + */ +export function createSHA256(): Promise { + return WASMInterface(wasmJson, 32).then((wasm) => { + wasm.init(256); + const obj: IHasher = { + init: () => { + wasm.init(256); + return obj; + }, + update: (data) => { + wasm.update(data); + return obj; + }, + // biome-ignore lint/suspicious/noExplicitAny: Conflict with IHasher type + digest: (outputType) => wasm.digest(outputType) as any, + save: () => wasm.save(), + load: (data) => { + wasm.load(data); + return obj; + }, + blockSize: 64, + digestSize: 32, + }; + return obj; + }); +} diff --git a/frontend/node_modules/hash-wasm/lib/sha3.ts b/frontend/node_modules/hash-wasm/lib/sha3.ts new file mode 100644 index 0000000..67ac692 --- /dev/null +++ b/frontend/node_modules/hash-wasm/lib/sha3.ts @@ -0,0 +1,84 @@ +import wasmJson from "../wasm/sha3.wasm.json"; +import { + type IHasher, + type IWASMInterface, + WASMInterface, +} from "./WASMInterface"; +import lockedCreate from "./lockedCreate"; +import Mutex from "./mutex"; +import type { IDataType } from "./util"; + +type IValidBits = 224 | 256 | 384 | 512; +const mutex = new Mutex(); +let wasmCache: IWASMInterface = null; + +function validateBits(bits: IValidBits) { + if (![224, 256, 384, 512].includes(bits)) { + return new Error("Invalid variant! Valid values: 224, 256, 384, 512"); + } + return null; +} + +/** + * Calculates SHA-3 hash + * @param data Input data (string, Buffer or TypedArray) + * @param bits Number of output bits. Valid values: 224, 256, 384, 512 + * @returns Computed hash as a hexadecimal string + */ +export function sha3(data: IDataType, bits: IValidBits = 512): Promise { + if (validateBits(bits)) { + return Promise.reject(validateBits(bits)); + } + + const hashLength = bits / 8; + + if (wasmCache === null || wasmCache.hashLength !== hashLength) { + return lockedCreate(mutex, wasmJson, hashLength).then((wasm) => { + wasmCache = wasm; + return wasmCache.calculate(data, bits, 0x06); + }); + } + + try { + const hash = wasmCache.calculate(data, bits, 0x06); + return Promise.resolve(hash); + } catch (err) { + return Promise.reject(err); + } +} + +/** + * Creates a new SHA-3 hash instance + * @param bits Number of output bits. Valid values: 224, 256, 384, 512 + */ +export function createSHA3(bits: IValidBits = 512): Promise { + if (validateBits(bits)) { + return Promise.reject(validateBits(bits)); + } + + const outputSize = bits / 8; + + return WASMInterface(wasmJson, outputSize).then((wasm) => { + wasm.init(bits); + const obj: IHasher = { + init: () => { + wasm.init(bits); + return obj; + }, + update: (data) => { + wasm.update(data); + return obj; + }, + // biome-ignore lint/suspicious/noExplicitAny: Conflict with IHasher type + digest: (outputType) => wasm.digest(outputType, 0x06) as any, + save: () => wasm.save(), + load: (data) => { + wasm.load(data); + return obj; + }, + blockSize: 200 - 2 * outputSize, + digestSize: outputSize, + }; + return obj; + }); +} diff --git a/frontend/node_modules/hash-wasm/lib/sha384.ts b/frontend/node_modules/hash-wasm/lib/sha384.ts new file mode 100644 index 0000000..70b0191 --- /dev/null +++ b/frontend/node_modules/hash-wasm/lib/sha384.ts @@ -0,0 +1,62 @@ +import wasmJson from "../wasm/sha512.wasm.json"; +import { + type IHasher, + type IWASMInterface, + WASMInterface, +} from "./WASMInterface"; +import lockedCreate from "./lockedCreate"; +import Mutex from "./mutex"; +import type { IDataType } from "./util"; + +const mutex = new Mutex(); +let wasmCache: IWASMInterface = null; + +/** + * Calculates SHA-2 (SHA-384) hash + * @param data Input data (string, Buffer or TypedArray) + * @returns Computed hash as a hexadecimal string + */ +export function sha384(data: IDataType): Promise { + if (wasmCache === null) { + return lockedCreate(mutex, wasmJson, 48).then((wasm) => { + wasmCache = wasm; + return wasmCache.calculate(data, 384); + }); + } + + try { + const hash = wasmCache.calculate(data, 384); + return Promise.resolve(hash); + } catch (err) { + return Promise.reject(err); + } +} + +/** + * Creates a new SHA-2 (SHA-384) hash instance + */ +export function createSHA384(): Promise { + return WASMInterface(wasmJson, 48).then((wasm) => { + wasm.init(384); + const obj: IHasher = { + init: () => { + wasm.init(384); + return obj; + }, + update: (data) => { + wasm.update(data); + return obj; + }, + // biome-ignore lint/suspicious/noExplicitAny: Conflict with IHasher type + digest: (outputType) => wasm.digest(outputType) as any, + save: () => wasm.save(), + load: (data) => { + wasm.load(data); + return obj; + }, + blockSize: 128, + digestSize: 48, + }; + return obj; + }); +} diff --git a/frontend/node_modules/hash-wasm/lib/sha512.ts b/frontend/node_modules/hash-wasm/lib/sha512.ts new file mode 100644 index 0000000..beeb3e8 --- /dev/null +++ b/frontend/node_modules/hash-wasm/lib/sha512.ts @@ -0,0 +1,62 @@ +import wasmJson from "../wasm/sha512.wasm.json"; +import { + type IHasher, + type IWASMInterface, + WASMInterface, +} from "./WASMInterface"; +import lockedCreate from "./lockedCreate"; +import Mutex from "./mutex"; +import type { IDataType } from "./util"; + +const mutex = new Mutex(); +let wasmCache: IWASMInterface = null; + +/** + * Calculates SHA-2 (SHA-512) hash + * @param data Input data (string, Buffer or TypedArray) + * @returns Computed hash as a hexadecimal string + */ +export function sha512(data: IDataType): Promise { + if (wasmCache === null) { + return lockedCreate(mutex, wasmJson, 64).then((wasm) => { + wasmCache = wasm; + return wasmCache.calculate(data, 512); + }); + } + + try { + const hash = wasmCache.calculate(data, 512); + return Promise.resolve(hash); + } catch (err) { + return Promise.reject(err); + } +} + +/** + * Creates a new SHA-2 (SHA-512) hash instance + */ +export function createSHA512(): Promise { + return WASMInterface(wasmJson, 64).then((wasm) => { + wasm.init(512); + const obj: IHasher = { + init: () => { + wasm.init(512); + return obj; + }, + update: (data) => { + wasm.update(data); + return obj; + }, + // biome-ignore lint/suspicious/noExplicitAny: Conflict with IHasher type + digest: (outputType) => wasm.digest(outputType) as any, + save: () => wasm.save(), + load: (data) => { + wasm.load(data); + return obj; + }, + blockSize: 128, + digestSize: 64, + }; + return obj; + }); +} diff --git a/frontend/node_modules/hash-wasm/lib/sm3.ts b/frontend/node_modules/hash-wasm/lib/sm3.ts new file mode 100644 index 0000000..9f5987b --- /dev/null +++ b/frontend/node_modules/hash-wasm/lib/sm3.ts @@ -0,0 +1,62 @@ +import wasmJson from "../wasm/sm3.wasm.json"; +import { + type IHasher, + type IWASMInterface, + WASMInterface, +} from "./WASMInterface"; +import lockedCreate from "./lockedCreate"; +import Mutex from "./mutex"; +import type { IDataType } from "./util"; + +const mutex = new Mutex(); +let wasmCache: IWASMInterface = null; + +/** + * Calculates SM3 hash + * @param data Input data (string, Buffer or TypedArray) + * @returns Computed hash as a hexadecimal string + */ +export function sm3(data: IDataType): Promise { + if (wasmCache === null) { + return lockedCreate(mutex, wasmJson, 32).then((wasm) => { + wasmCache = wasm; + return wasmCache.calculate(data); + }); + } + + try { + const hash = wasmCache.calculate(data); + return Promise.resolve(hash); + } catch (err) { + return Promise.reject(err); + } +} + +/** + * Creates a new SM3 hash instance + */ +export function createSM3(): Promise { + return WASMInterface(wasmJson, 32).then((wasm) => { + wasm.init(); + const obj: IHasher = { + init: () => { + wasm.init(); + return obj; + }, + update: (data) => { + wasm.update(data); + return obj; + }, + // biome-ignore lint/suspicious/noExplicitAny: Conflict with IHasher type + digest: (outputType) => wasm.digest(outputType) as any, + save: () => wasm.save(), + load: (data) => { + wasm.load(data); + return obj; + }, + blockSize: 64, + digestSize: 32, + }; + return obj; + }); +} diff --git a/frontend/node_modules/hash-wasm/lib/util.ts b/frontend/node_modules/hash-wasm/lib/util.ts new file mode 100644 index 0000000..39a6217 --- /dev/null +++ b/frontend/node_modules/hash-wasm/lib/util.ts @@ -0,0 +1,191 @@ +function getGlobal() { + if (typeof globalThis !== "undefined") return globalThis; + if (typeof self !== "undefined") return self; + if (typeof window !== "undefined") return window; + return global; +} + +const globalObject = getGlobal(); +const nodeBuffer = globalObject.Buffer ?? null; +const textEncoder = globalObject.TextEncoder + ? new globalObject.TextEncoder() + : null; + +export type ITypedArray = Uint8Array | Uint16Array | Uint32Array; +export type IDataType = string | Buffer | ITypedArray; +export type IEmbeddedWasm = { name: string; data: string; hash: string }; + +export function intArrayToString(arr: Uint8Array, len: number): string { + return String.fromCharCode(...arr.subarray(0, len)); +} + +function hexCharCodesToInt(a: number, b: number): number { + return ( + (((a & 0xf) + ((a >> 6) | ((a >> 3) & 0x8))) << 4) | + ((b & 0xf) + ((b >> 6) | ((b >> 3) & 0x8))) + ); +} + +export function writeHexToUInt8(buf: Uint8Array, str: string) { + const size = str.length >> 1; + for (let i = 0; i < size; i++) { + const index = i << 1; + buf[i] = hexCharCodesToInt( + str.charCodeAt(index), + str.charCodeAt(index + 1), + ); + } +} + +export function hexStringEqualsUInt8(str: string, buf: Uint8Array): boolean { + if (str.length !== buf.length * 2) { + return false; + } + for (let i = 0; i < buf.length; i++) { + const strIndex = i << 1; + if ( + buf[i] !== + hexCharCodesToInt(str.charCodeAt(strIndex), str.charCodeAt(strIndex + 1)) + ) { + return false; + } + } + return true; +} + +const alpha = "a".charCodeAt(0) - 10; +const digit = "0".charCodeAt(0); +export function getDigestHex( + tmpBuffer: Uint8Array, + input: Uint8Array, + hashLength: number, +): string { + let p = 0; + for (let i = 0; i < hashLength; i++) { + let nibble = input[i] >>> 4; + tmpBuffer[p++] = nibble > 9 ? nibble + alpha : nibble + digit; + nibble = input[i] & 0xf; + tmpBuffer[p++] = nibble > 9 ? nibble + alpha : nibble + digit; + } + + return String.fromCharCode.apply(null, tmpBuffer); +} + +export const getUInt8Buffer = + nodeBuffer !== null + ? (data: IDataType): Uint8Array => { + if (typeof data === "string") { + const buf = nodeBuffer.from(data, "utf8"); + return new Uint8Array(buf.buffer, buf.byteOffset, buf.length); + } + + if (nodeBuffer.isBuffer(data)) { + return new Uint8Array(data.buffer, data.byteOffset, data.length); + } + + if (ArrayBuffer.isView(data)) { + return new Uint8Array(data.buffer, data.byteOffset, data.byteLength); + } + + throw new Error("Invalid data type!"); + } + : (data: IDataType): Uint8Array => { + if (typeof data === "string") { + return textEncoder.encode(data); + } + + if (ArrayBuffer.isView(data)) { + return new Uint8Array(data.buffer, data.byteOffset, data.byteLength); + } + + throw new Error("Invalid data type!"); + }; + +const base64Chars = + "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; +const base64Lookup = new Uint8Array(256); +for (let i = 0; i < base64Chars.length; i++) { + base64Lookup[base64Chars.charCodeAt(i)] = i; +} + +export function encodeBase64(data: Uint8Array, pad = true): string { + const len = data.length; + const extraBytes = len % 3; + const parts = []; + + const len2 = len - extraBytes; + for (let i = 0; i < len2; i += 3) { + const tmp = + ((data[i] << 16) & 0xff0000) + + ((data[i + 1] << 8) & 0xff00) + + (data[i + 2] & 0xff); + + const triplet = + base64Chars.charAt((tmp >> 18) & 0x3f) + + base64Chars.charAt((tmp >> 12) & 0x3f) + + base64Chars.charAt((tmp >> 6) & 0x3f) + + base64Chars.charAt(tmp & 0x3f); + + parts.push(triplet); + } + + if (extraBytes === 1) { + const tmp = data[len - 1]; + const a = base64Chars.charAt(tmp >> 2); + const b = base64Chars.charAt((tmp << 4) & 0x3f); + + parts.push(`${a}${b}`); + if (pad) { + parts.push("=="); + } + } else if (extraBytes === 2) { + const tmp = (data[len - 2] << 8) + data[len - 1]; + const a = base64Chars.charAt(tmp >> 10); + const b = base64Chars.charAt((tmp >> 4) & 0x3f); + const c = base64Chars.charAt((tmp << 2) & 0x3f); + parts.push(`${a}${b}${c}`); + if (pad) { + parts.push("="); + } + } + + return parts.join(""); +} + +export function getDecodeBase64Length(data: string): number { + let bufferLength = Math.floor(data.length * 0.75); + const len = data.length; + + if (data[len - 1] === "=") { + bufferLength -= 1; + if (data[len - 2] === "=") { + bufferLength -= 1; + } + } + + return bufferLength; +} + +export function decodeBase64(data: string): Uint8Array { + const bufferLength = getDecodeBase64Length(data); + const len = data.length; + + const bytes = new Uint8Array(bufferLength); + + let p = 0; + for (let i = 0; i < len; i += 4) { + const encoded1 = base64Lookup[data.charCodeAt(i)]; + const encoded2 = base64Lookup[data.charCodeAt(i + 1)]; + const encoded3 = base64Lookup[data.charCodeAt(i + 2)]; + const encoded4 = base64Lookup[data.charCodeAt(i + 3)]; + + bytes[p] = (encoded1 << 2) | (encoded2 >> 4); + p += 1; + bytes[p] = ((encoded2 & 15) << 4) | (encoded3 >> 2); + p += 1; + bytes[p] = ((encoded3 & 3) << 6) | (encoded4 & 63); + p += 1; + } + + return bytes; +} diff --git a/frontend/node_modules/hash-wasm/lib/whirlpool.ts b/frontend/node_modules/hash-wasm/lib/whirlpool.ts new file mode 100644 index 0000000..0dff891 --- /dev/null +++ b/frontend/node_modules/hash-wasm/lib/whirlpool.ts @@ -0,0 +1,62 @@ +import wasmJson from "../wasm/whirlpool.wasm.json"; +import { + type IHasher, + type IWASMInterface, + WASMInterface, +} from "./WASMInterface"; +import lockedCreate from "./lockedCreate"; +import Mutex from "./mutex"; +import type { IDataType } from "./util"; + +const mutex = new Mutex(); +let wasmCache: IWASMInterface = null; + +/** + * Calculates Whirlpool hash + * @param data Input data (string, Buffer or TypedArray) + * @returns Computed hash as a hexadecimal string + */ +export function whirlpool(data: IDataType): Promise { + if (wasmCache === null) { + return lockedCreate(mutex, wasmJson, 64).then((wasm) => { + wasmCache = wasm; + return wasmCache.calculate(data); + }); + } + + try { + const hash = wasmCache.calculate(data); + return Promise.resolve(hash); + } catch (err) { + return Promise.reject(err); + } +} + +/** + * Creates a new Whirlpool hash instance + */ +export function createWhirlpool(): Promise { + return WASMInterface(wasmJson, 64).then((wasm) => { + wasm.init(); + const obj: IHasher = { + init: () => { + wasm.init(); + return obj; + }, + update: (data) => { + wasm.update(data); + return obj; + }, + // biome-ignore lint/suspicious/noExplicitAny: Conflict with IHasher type + digest: (outputType) => wasm.digest(outputType) as any, + save: () => wasm.save(), + load: (data) => { + wasm.load(data); + return obj; + }, + blockSize: 64, + digestSize: 64, + }; + return obj; + }); +} diff --git a/frontend/node_modules/hash-wasm/lib/xxhash128.ts b/frontend/node_modules/hash-wasm/lib/xxhash128.ts new file mode 100644 index 0000000..cf59dc5 --- /dev/null +++ b/frontend/node_modules/hash-wasm/lib/xxhash128.ts @@ -0,0 +1,115 @@ +import wasmJson from "../wasm/xxhash128.wasm.json"; +import { + type IHasher, + type IWASMInterface, + WASMInterface, +} from "./WASMInterface"; +import lockedCreate from "./lockedCreate"; +import Mutex from "./mutex"; +import type { IDataType } from "./util"; + +const mutex = new Mutex(); +let wasmCache: IWASMInterface = null; +const seedBuffer = new Uint8Array(8); + +function validateSeed(seed: number) { + if (!Number.isInteger(seed) || seed < 0 || seed > 0xffffffff) { + return new Error( + "Seed must be given as two valid 32-bit long unsigned integers (lo + high).", + ); + } + return null; +} + +function writeSeed(arr: ArrayBuffer, low: number, high: number) { + // write in little-endian format + const buffer = new DataView(arr); + buffer.setUint32(0, low, true); + buffer.setUint32(4, high, true); +} + +/** + * Calculates xxHash128 hash + * @param data Input data (string, Buffer or TypedArray) + * @param seedLow Lower 32 bits of the number used to + * initialize the internal state of the algorithm (defaults to 0) + * @param seedHigh Higher 32 bits of the number used to + * initialize the internal state of the algorithm (defaults to 0) + * @returns Computed hash as a hexadecimal string + */ +export function xxhash128( + data: IDataType, + seedLow = 0, + seedHigh = 0, +): Promise { + if (validateSeed(seedLow)) { + return Promise.reject(validateSeed(seedLow)); + } + + if (validateSeed(seedHigh)) { + return Promise.reject(validateSeed(seedHigh)); + } + + if (wasmCache === null) { + return lockedCreate(mutex, wasmJson, 16).then((wasm) => { + wasmCache = wasm; + writeSeed(seedBuffer.buffer, seedLow, seedHigh); + wasmCache.writeMemory(seedBuffer); + return wasmCache.calculate(data); + }); + } + + try { + writeSeed(seedBuffer.buffer, seedLow, seedHigh); + wasmCache.writeMemory(seedBuffer); + const hash = wasmCache.calculate(data); + return Promise.resolve(hash); + } catch (err) { + return Promise.reject(err); + } +} + +/** + * Creates a new xxHash128 hash instance + * @param seedLow Lower 32 bits of the number used to + * initialize the internal state of the algorithm (defaults to 0) + * @param seedHigh Higher 32 bits of the number used to + * initialize the internal state of the algorithm (defaults to 0) + */ +export function createXXHash128(seedLow = 0, seedHigh = 0): Promise { + if (validateSeed(seedLow)) { + return Promise.reject(validateSeed(seedLow)); + } + + if (validateSeed(seedHigh)) { + return Promise.reject(validateSeed(seedHigh)); + } + + return WASMInterface(wasmJson, 16).then((wasm) => { + const instanceBuffer = new Uint8Array(8); + writeSeed(instanceBuffer.buffer, seedLow, seedHigh); + wasm.writeMemory(instanceBuffer); + wasm.init(); + const obj: IHasher = { + init: () => { + wasm.writeMemory(instanceBuffer); + wasm.init(); + return obj; + }, + update: (data) => { + wasm.update(data); + return obj; + }, + // biome-ignore lint/suspicious/noExplicitAny: Conflict with IHasher type + digest: (outputType) => wasm.digest(outputType) as any, + save: () => wasm.save(), + load: (data) => { + wasm.load(data); + return obj; + }, + blockSize: 512, + digestSize: 16, + }; + return obj; + }); +} diff --git a/frontend/node_modules/hash-wasm/lib/xxhash3.ts b/frontend/node_modules/hash-wasm/lib/xxhash3.ts new file mode 100644 index 0000000..fabcb9f --- /dev/null +++ b/frontend/node_modules/hash-wasm/lib/xxhash3.ts @@ -0,0 +1,115 @@ +import wasmJson from "../wasm/xxhash3.wasm.json"; +import { + type IHasher, + type IWASMInterface, + WASMInterface, +} from "./WASMInterface"; +import lockedCreate from "./lockedCreate"; +import Mutex from "./mutex"; +import type { IDataType } from "./util"; + +const mutex = new Mutex(); +let wasmCache: IWASMInterface = null; +const seedBuffer = new Uint8Array(8); + +function validateSeed(seed: number) { + if (!Number.isInteger(seed) || seed < 0 || seed > 0xffffffff) { + return new Error( + "Seed must be given as two valid 32-bit long unsigned integers (lo + high).", + ); + } + return null; +} + +function writeSeed(arr: ArrayBuffer, low: number, high: number) { + // write in little-endian format + const buffer = new DataView(arr); + buffer.setUint32(0, low, true); + buffer.setUint32(4, high, true); +} + +/** + * Calculates xxHash3 hash + * @param data Input data (string, Buffer or TypedArray) + * @param seedLow Lower 32 bits of the number used to + * initialize the internal state of the algorithm (defaults to 0) + * @param seedHigh Higher 32 bits of the number used to + * initialize the internal state of the algorithm (defaults to 0) + * @returns Computed hash as a hexadecimal string + */ +export function xxhash3( + data: IDataType, + seedLow = 0, + seedHigh = 0, +): Promise { + if (validateSeed(seedLow)) { + return Promise.reject(validateSeed(seedLow)); + } + + if (validateSeed(seedHigh)) { + return Promise.reject(validateSeed(seedHigh)); + } + + if (wasmCache === null) { + return lockedCreate(mutex, wasmJson, 8).then((wasm) => { + wasmCache = wasm; + writeSeed(seedBuffer.buffer, seedLow, seedHigh); + wasmCache.writeMemory(seedBuffer); + return wasmCache.calculate(data); + }); + } + + try { + writeSeed(seedBuffer.buffer, seedLow, seedHigh); + wasmCache.writeMemory(seedBuffer); + const hash = wasmCache.calculate(data); + return Promise.resolve(hash); + } catch (err) { + return Promise.reject(err); + } +} + +/** + * Creates a new xxHash3 hash instance + * @param seedLow Lower 32 bits of the number used to + * initialize the internal state of the algorithm (defaults to 0) + * @param seedHigh Higher 32 bits of the number used to + * initialize the internal state of the algorithm (defaults to 0) + */ +export function createXXHash3(seedLow = 0, seedHigh = 0): Promise { + if (validateSeed(seedLow)) { + return Promise.reject(validateSeed(seedLow)); + } + + if (validateSeed(seedHigh)) { + return Promise.reject(validateSeed(seedHigh)); + } + + return WASMInterface(wasmJson, 8).then((wasm) => { + const instanceBuffer = new Uint8Array(8); + writeSeed(instanceBuffer.buffer, seedLow, seedHigh); + wasm.writeMemory(instanceBuffer); + wasm.init(); + const obj: IHasher = { + init: () => { + wasm.writeMemory(instanceBuffer); + wasm.init(); + return obj; + }, + update: (data) => { + wasm.update(data); + return obj; + }, + // biome-ignore lint/suspicious/noExplicitAny: Conflict with IHasher type + digest: (outputType) => wasm.digest(outputType) as any, + save: () => wasm.save(), + load: (data) => { + wasm.load(data); + return obj; + }, + blockSize: 512, + digestSize: 8, + }; + return obj; + }); +} diff --git a/frontend/node_modules/hash-wasm/lib/xxhash32.ts b/frontend/node_modules/hash-wasm/lib/xxhash32.ts new file mode 100644 index 0000000..73e5e61 --- /dev/null +++ b/frontend/node_modules/hash-wasm/lib/xxhash32.ts @@ -0,0 +1,79 @@ +import wasmJson from "../wasm/xxhash32.wasm.json"; +import { + type IHasher, + type IWASMInterface, + WASMInterface, +} from "./WASMInterface"; +import lockedCreate from "./lockedCreate"; +import Mutex from "./mutex"; +import type { IDataType } from "./util"; + +const mutex = new Mutex(); +let wasmCache: IWASMInterface = null; + +function validateSeed(seed: number) { + if (!Number.isInteger(seed) || seed < 0 || seed > 0xffffffff) { + return new Error("Seed must be a valid 32-bit long unsigned integer."); + } + return null; +} +/** + * Calculates xxHash32 hash + * @param data Input data (string, Buffer or TypedArray) + * @param seed Number used to initialize the internal state of the algorithm (defaults to 0) + * @returns Computed hash as a hexadecimal string + */ +export function xxhash32(data: IDataType, seed = 0): Promise { + if (validateSeed(seed)) { + return Promise.reject(validateSeed(seed)); + } + + if (wasmCache === null) { + return lockedCreate(mutex, wasmJson, 4).then((wasm) => { + wasmCache = wasm; + return wasmCache.calculate(data, seed); + }); + } + + try { + const hash = wasmCache.calculate(data, seed); + return Promise.resolve(hash); + } catch (err) { + return Promise.reject(err); + } +} + +/** + * Creates a new xxHash32 hash instance + * @param data Input data (string, Buffer or TypedArray) + * @param seed Number used to initialize the internal state of the algorithm (defaults to 0) + */ +export function createXXHash32(seed = 0): Promise { + if (validateSeed(seed)) { + return Promise.reject(validateSeed(seed)); + } + + return WASMInterface(wasmJson, 4).then((wasm) => { + wasm.init(seed); + const obj: IHasher = { + init: () => { + wasm.init(seed); + return obj; + }, + update: (data) => { + wasm.update(data); + return obj; + }, + // biome-ignore lint/suspicious/noExplicitAny: Conflict with IHasher type + digest: (outputType) => wasm.digest(outputType) as any, + save: () => wasm.save(), + load: (data) => { + wasm.load(data); + return obj; + }, + blockSize: 16, + digestSize: 4, + }; + return obj; + }); +} diff --git a/frontend/node_modules/hash-wasm/lib/xxhash64.ts b/frontend/node_modules/hash-wasm/lib/xxhash64.ts new file mode 100644 index 0000000..11c1549 --- /dev/null +++ b/frontend/node_modules/hash-wasm/lib/xxhash64.ts @@ -0,0 +1,115 @@ +import wasmJson from "../wasm/xxhash64.wasm.json"; +import { + type IHasher, + type IWASMInterface, + WASMInterface, +} from "./WASMInterface"; +import lockedCreate from "./lockedCreate"; +import Mutex from "./mutex"; +import type { IDataType } from "./util"; + +const mutex = new Mutex(); +let wasmCache: IWASMInterface = null; +const seedBuffer = new Uint8Array(8); + +function validateSeed(seed: number) { + if (!Number.isInteger(seed) || seed < 0 || seed > 0xffffffff) { + return new Error( + "Seed must be given as two valid 32-bit long unsigned integers (lo + high).", + ); + } + return null; +} + +function writeSeed(arr: ArrayBuffer, low: number, high: number) { + // write in little-endian format + const buffer = new DataView(arr); + buffer.setUint32(0, low, true); + buffer.setUint32(4, high, true); +} + +/** + * Calculates xxHash64 hash + * @param data Input data (string, Buffer or TypedArray) + * @param seedLow Lower 32 bits of the number used to + * initialize the internal state of the algorithm (defaults to 0) + * @param seedHigh Higher 32 bits of the number used to + * initialize the internal state of the algorithm (defaults to 0) + * @returns Computed hash as a hexadecimal string + */ +export function xxhash64( + data: IDataType, + seedLow = 0, + seedHigh = 0, +): Promise { + if (validateSeed(seedLow)) { + return Promise.reject(validateSeed(seedLow)); + } + + if (validateSeed(seedHigh)) { + return Promise.reject(validateSeed(seedHigh)); + } + + if (wasmCache === null) { + return lockedCreate(mutex, wasmJson, 8).then((wasm) => { + wasmCache = wasm; + writeSeed(seedBuffer.buffer, seedLow, seedHigh); + wasmCache.writeMemory(seedBuffer); + return wasmCache.calculate(data); + }); + } + + try { + writeSeed(seedBuffer.buffer, seedLow, seedHigh); + wasmCache.writeMemory(seedBuffer); + const hash = wasmCache.calculate(data); + return Promise.resolve(hash); + } catch (err) { + return Promise.reject(err); + } +} + +/** + * Creates a new xxHash64 hash instance + * @param seedLow Lower 32 bits of the number used to + * initialize the internal state of the algorithm (defaults to 0) + * @param seedHigh Higher 32 bits of the number used to + * initialize the internal state of the algorithm (defaults to 0) + */ +export function createXXHash64(seedLow = 0, seedHigh = 0): Promise { + if (validateSeed(seedLow)) { + return Promise.reject(validateSeed(seedLow)); + } + + if (validateSeed(seedHigh)) { + return Promise.reject(validateSeed(seedHigh)); + } + + return WASMInterface(wasmJson, 8).then((wasm) => { + const instanceBuffer = new Uint8Array(8); + writeSeed(instanceBuffer.buffer, seedLow, seedHigh); + wasm.writeMemory(instanceBuffer); + wasm.init(); + const obj: IHasher = { + init: () => { + wasm.writeMemory(instanceBuffer); + wasm.init(); + return obj; + }, + update: (data) => { + wasm.update(data); + return obj; + }, + // biome-ignore lint/suspicious/noExplicitAny: Conflict with IHasher type + digest: (outputType) => wasm.digest(outputType) as any, + save: () => wasm.save(), + load: (data) => { + wasm.load(data); + return obj; + }, + blockSize: 32, + digestSize: 8, + }; + return obj; + }); +} diff --git a/frontend/node_modules/hash-wasm/package.json b/frontend/node_modules/hash-wasm/package.json new file mode 100644 index 0000000..f764536 --- /dev/null +++ b/frontend/node_modules/hash-wasm/package.json @@ -0,0 +1,100 @@ +{ + "name": "hash-wasm", + "version": "4.12.0", + "description": "Lightning fast hash functions for browsers and Node.js using hand-tuned WebAssembly binaries (MD4, MD5, SHA-1, SHA-2, SHA-3, Keccak, BLAKE2, BLAKE3, PBKDF2, Argon2, bcrypt, scrypt, Adler-32, CRC32, CRC32C, RIPEMD-160, HMAC, xxHash, SM3, Whirlpool)", + "main": "dist/index.umd.js", + "module": "dist/index.esm.js", + "types": "dist/lib/index.d.ts", + "scripts": { + "build": "sh -c ./scripts/build.sh", + "lint": "npx @biomejs/biome check lib test", + "prepublishOnly": "sh -c ./scripts/build.sh", + "test": "node --expose-gc ./node_modules/.bin/jest --coverage --logHeapUsage", + "webpack": "node webpack/webpack.js" + }, + "sideEffects": false, + "repository": { + "type": "git", + "url": "git+https://github.com/Daninet/hash-wasm.git" + }, + "keywords": [ + "hash", + "wasm", + "webassembly", + "md5", + "adler-32", + "crc32", + "crc64", + "sha-1", + "sha-2", + "sha-3", + "xxhash", + "keccak", + "ripemd", + "hmac", + "pbkdf2", + "blake2", + "blake2b", + "blake2s", + "blake3", + "fast", + "hashing", + "browser", + "key", + "derivation", + "password", + "md4", + "sha", + "sha1", + "sha2", + "sha224", + "sha-224", + "sha256", + "sha-256", + "sha384", + "sha-384", + "sha512", + "sha-512", + "sha3", + "sha3-224", + "sha3-256", + "sha3-384", + "sha3-512", + "xxhash32", + "xxhash64", + "ripemd160", + "argon2", + "argon2i", + "argon2d", + "argon2id", + "scrypt", + "bcrypt", + "sm3", + "whirlpool" + ], + "bugs": { + "url": "https://github.com/Daninet/hash-wasm/issues" + }, + "homepage": "https://github.com/Daninet/hash-wasm#readme", + "author": "Dani Biró (https://danibiro.com)", + "license": "MIT", + "devDependencies": { + "@biomejs/biome": "1.9.4", + "@rollup/plugin-json": "^6.1.0", + "@rollup/plugin-typescript": "^12.1.1", + "@types/estree": "^1.0.6", + "@types/jest": "^29.5.14", + "@types/node": "^22.9.0", + "binaryen": "^120.0.0", + "jest": "^29.7.0", + "rollup": "^4.27.3", + "rollup-plugin-gzip": "^4.0.1", + "rollup-plugin-license": "^3.5.3", + "rollup-plugin-terser": "^7.0.2", + "ts-jest": "^29.2.5", + "ts-loader": "^9.5.1", + "ts-node": "^10.9.2", + "tslib": "^2.8.1", + "typescript": "^5.6.3" + } +} diff --git a/frontend/node_modules/hash-wasm/rollup.config.mjs b/frontend/node_modules/hash-wasm/rollup.config.mjs new file mode 100644 index 0000000..fbbfa8f --- /dev/null +++ b/frontend/node_modules/hash-wasm/rollup.config.mjs @@ -0,0 +1,112 @@ +import typescript from "@rollup/plugin-typescript"; +import json from "@rollup/plugin-json"; +import { terser } from "rollup-plugin-terser"; +// import gzipPlugin from 'rollup-plugin-gzip'; +import license from "rollup-plugin-license"; + +const ALGORITHMS = [ + "adler32", + "argon2", + "bcrypt", + "blake2b", + "blake2s", + "blake3", + "crc32", + "crc64", + "hmac", + "keccak", + "md4", + "md5", + "pbkdf2", + "ripemd160", + "scrypt", + "sha1", + "sha3", + "sha224", + "sha256", + "sha384", + "sha512", + "sm3", + "whirlpool", + "xxhash32", + "xxhash64", + "xxhash3", + "xxhash128", +]; + +const TERSER_CONFIG = { + output: { + comments: false, + }, +}; + +const LICENSE_CONFIG = { + banner: { + commentStyle: "ignored", + content: `hash-wasm (https://www.npmjs.com/package/hash-wasm) + (c) Dani Biro + @license MIT`, + }, +}; + +const MAIN_BUNDLE_CONFIG = { + input: "lib/index.ts", + output: [ + { + file: "dist/index.umd.js", + name: "hashwasm", + format: "umd", + }, + { + file: "dist/index.esm.js", + format: "es", + }, + ], + plugins: [json(), typescript(), license(LICENSE_CONFIG)], +}; + +const MINIFIED_MAIN_BUNDLE_CONFIG = { + input: "lib/index.ts", + output: [ + { + file: "dist/index.umd.min.js", + name: "hashwasm", + format: "umd", + }, + { + file: "dist/index.esm.min.js", + format: "es", + }, + ], + plugins: [ + json(), + typescript(), + terser(TERSER_CONFIG), + license(LICENSE_CONFIG), + ], +}; + +const INDIVIDUAL_BUNDLE_CONFIG = (algorithm) => ({ + input: `lib/${algorithm}.ts`, + output: [ + { + file: `dist/${algorithm}.umd.min.js`, + name: "hashwasm", + format: "umd", + extend: true, + }, + ], + plugins: [ + json(), + typescript(), + terser(TERSER_CONFIG), + license(LICENSE_CONFIG), + // gzipPlugin(), + ], +}); + +export default [ + MAIN_BUNDLE_CONFIG, + MINIFIED_MAIN_BUNDLE_CONFIG, + ...ALGORITHMS.map(INDIVIDUAL_BUNDLE_CONFIG), +]; diff --git a/frontend/node_modules/hash-wasm/src/adler32.c b/frontend/node_modules/hash-wasm/src/adler32.c new file mode 100644 index 0000000..40d52ab --- /dev/null +++ b/frontend/node_modules/hash-wasm/src/adler32.c @@ -0,0 +1,143 @@ +/* + adler32.c -- compute the Adler-32 checksum of a data stream + Copyright (C) 1995-2011, 2016 Mark Adler + + Licensed under the zlib license: + + Copyright (C) 1995-2017 Jean-loup Gailly and Mark Adler + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. + + Jean-loup Gailly Mark Adler + jloup@gzip.org madler@alumni.caltech.edu + + Modified for hash-wasm by Nicholas Sherlock and Dani Biro, 2021 +*/ + +#define WITH_BUFFER +#include "hash-wasm.h" + +#define bswap_32(x) __builtin_bswap32(x) + +#define BASE 65521U /* largest prime smaller than 65536 */ +#define NMAX 5552 +/* NMAX is the largest n such that 255n(n+1)/2 + (n+1)(BASE-1) <= 2^32-1 */ + +#define DO1(b,i) adler += ((b) >> i) & 0xFF; sum2 += adler; +#define DO4(buf,i) { uint32_t b = ((uint32_t*)buf)[i]; DO1(b,0); DO1(b,8); DO1(b,16); DO1(b,24); } +#define DO16(buf) DO4(buf,0); DO4(buf,1); DO4(buf,2); DO4(buf,3); + + +#define MOD(a) a %= BASE +#define MOD28(a) a %= BASE +#define MOD63(a) a %= BASE + +uint32_t previousAdler = 1; + +WASM_EXPORT +void Hash_Init() { + previousAdler = 1; +} + +static uint32_t adler32(uint32_t adler, const uint8_t *buf, uint32_t len) { + /* split Adler-32 into component sums */ + uint32_t sum2 = (adler >> 16) & 0xffff; + adler &= 0xffff; + + /* in case user likes doing a byte at a time, keep it fast */ + if (len == 1) { + adler += buf[0]; + if (adler >= BASE) { + adler -= BASE; + } + sum2 += adler; + if (sum2 >= BASE) { + sum2 -= BASE; + } + return adler | (sum2 << 16); + } + + /* in case short lengths are provided, keep it somewhat fast */ + if (len < 16) { + while (len--) { + adler += *buf++; + sum2 += adler; + } + if (adler >= BASE) { + adler -= BASE; + } + MOD28(sum2); /* only added so many BASE's */ + return adler | (sum2 << 16); + } + + /* do length NMAX blocks -- requires just one modulo operation */ + while (len >= NMAX) { + len -= NMAX; + uint32_t n = NMAX / 16; /* NMAX is divisible by 16 */ + do { + DO16(buf); /* 16 sums unrolled */ + buf += 16; + } while (--n); + MOD(adler); + MOD(sum2); + } + + /* do remaining bytes (less than NMAX, still just one modulo) */ + if (len) { /* avoid modulos if none remaining */ + while (len >= 16) { + len -= 16; + DO16(buf); + buf += 16; + } + while (len--) { + adler += *buf++; + sum2 += adler; + } + MOD(adler); + MOD(sum2); + } + + /* return recombined sums */ + return adler | (sum2 << 16); +} + +WASM_EXPORT +void Hash_Update(uint32_t len) { + const uint8_t *buf = main_buffer; + + previousAdler = adler32(previousAdler, buf, len); +} + +WASM_EXPORT +void Hash_Final() { + ((uint32_t*)main_buffer)[0] = bswap_32(previousAdler); +} + +WASM_EXPORT +const uint32_t STATE_SIZE = sizeof(previousAdler); + +WASM_EXPORT +uint8_t* Hash_GetState() { + return (uint8_t*) &previousAdler; +} + +WASM_EXPORT +void Hash_Calculate(uint32_t length) { + Hash_Init(); + Hash_Update(length); + Hash_Final(); +} diff --git a/frontend/node_modules/hash-wasm/src/argon2.c b/frontend/node_modules/hash-wasm/src/argon2.c new file mode 100644 index 0000000..b40d676 --- /dev/null +++ b/frontend/node_modules/hash-wasm/src/argon2.c @@ -0,0 +1,237 @@ +/* + Based on Golang's Argon2 implementation from crypto package + + Written for hash-wasm by Dani Biró +*/ + +#include "hash-wasm.h" + +#define BYTES_PER_PAGE 65536 + +uint8_t *B = NULL; +uint64_t B_size = 0; + +WASM_EXPORT +int8_t Hash_SetMemorySize(uint32_t total_bytes) { + uint32_t bytes_required = total_bytes - B_size; + + if (bytes_required > 0) { + uint32_t blocks = bytes_required / BYTES_PER_PAGE; + if (blocks * BYTES_PER_PAGE < bytes_required) { + blocks += 1; + } + + if (__builtin_wasm_memory_grow(0, blocks) == -1) { + return -1; + } + + B_size += blocks * BYTES_PER_PAGE; + } + + return 0; +} + +WASM_EXPORT +uint8_t *Hash_GetBuffer() { + if (B == NULL) { + // start of new memory + B = (uint8_t *)(__builtin_wasm_memory_size(0) * BYTES_PER_PAGE); + if (Hash_SetMemorySize(512 * 1024) == -1) { // always preallocate 16kb to not cause problems with the other hashes + return NULL; + } + } + + return B; +} + +static __inline__ uint64_t rotr64(const uint64_t w, const unsigned c) { + return (w >> c) | (w << (64 - c)); +} + +#define G(a, b, c, d) \ + do { \ + a = a + b + 2 * (a & 0xFFFFFFFF) * (b & 0xFFFFFFFF); \ + d = rotr64(d ^ a, 32); \ + c = c + d + 2 * (c & 0xFFFFFFFF) * (d & 0xFFFFFFFF); \ + b = rotr64(b ^ c, 24); \ + a = a + b + 2 * (a & 0xFFFFFFFF) * (b & 0xFFFFFFFF); \ + d = rotr64(d ^ a, 16); \ + c = c + d + 2 * (c & 0xFFFFFFFF) * (d & 0xFFFFFFFF); \ + b = rotr64(b ^ c, 63); \ + } while (0) + +void P( + uint64_t *a0, uint64_t *a1, uint64_t *a2, uint64_t *a3, + uint64_t *a4, uint64_t *a5, uint64_t *a6, uint64_t *a7, + uint64_t *a8, uint64_t *a9, uint64_t *a10, uint64_t *a11, + uint64_t *a12, uint64_t *a13, uint64_t *a14, uint64_t *a15 +) { + G(*a0, *a4, *a8, *a12); + G(*a1, *a5, *a9, *a13); + G(*a2, *a6, *a10, *a14); + G(*a3, *a7, *a11, *a15); + G(*a0, *a5, *a10, *a15); + G(*a1, *a6, *a11, *a12); + G(*a2, *a7, *a8, *a13); + G(*a3, *a4, *a9, *a14); +} + +uint32_t indexAlpha( + uint64_t rand, uint32_t lanes, uint32_t segments, + uint32_t parallelism, uint32_t k, uint32_t slice, + uint32_t lane, uint32_t index +) { + uint32_t rlane = ((uint32_t)(rand >> 32)) % parallelism; + + if (k == 0 && slice == 0) { + rlane = lane; + } + + uint32_t max = segments * 3; + uint32_t start = ((slice + 1) % 4) * segments; + + if (lane == rlane) { + max += index; + } + + if (k == 0) { + max = slice * segments; + start = 0; + if (slice == 0 || lane == rlane) { + max += index; + } + } + + if (index == 0 || lane == rlane) { + max--; + } + + uint64_t phi = rand & 0xFFFFFFFF; + phi = phi * phi >> 32; + phi = phi * max >> 32; + uint32_t ri = (start + max - 1 - phi) % (uint64_t)lanes; + + return rlane * lanes + ri; +} + +uint64_t t[128]; + +void block(uint64_t *z, uint64_t *a, uint64_t *b, int32_t xor) { + #pragma clang loop unroll(full) + for (int i = 0; i < 128; i++) { + t[i] = a[i] ^ b[i]; + } + + #pragma clang loop unroll(full) + for (int i = 0; i < 128; i += 16) { + P( + &t[i], &t[i + 1], &t[i + 2], &t[i + 3], &t[i + 4], &t[i + 5], &t[i + 6], &t[i + 7], + &t[i + 8], &t[i + 9], &t[i + 10], &t[i + 11], &t[i + 12], &t[i + 13], &t[i + 14], &t[i + 15] + ); + } + + #pragma clang loop unroll(full) + for (int i = 0; i < 16; i += 2) { + P( + &t[i], &t[i + 1], &t[i + 16], &t[i + 17], &t[i + 32], &t[i + 33], &t[i + 48], &t[i + 49], + &t[i + 64], &t[i + 65], &t[i + 80], &t[i + 81], &t[i + 96], &t[i + 97], &t[i + 112], &t[i + 113] + ); + } + + if (xor) { + for (int i = 0; i < 128; i++) { + z[i] ^= a[i] ^ b[i] ^ t[i]; + } + } else { + for (int i = 0; i < 128; i++) { + z[i] = a[i] ^ b[i] ^ t[i]; + } + } +} + +uint64_t addresses[128]; +uint64_t zero[128]; +uint64_t in[128]; + +WASM_EXPORT +void Hash_Calculate(uint32_t length, uint32_t memorySize) { + uint32_t *initVector = (uint32_t *)(B + 1024 * memorySize); + uint32_t parallelism = initVector[0]; + uint32_t hashLength = initVector[1]; + uint32_t memorySize2 = initVector[2]; + uint32_t iterations = initVector[3]; + uint32_t version = initVector[4]; + uint32_t hashType = initVector[5]; + if (memorySize2 != memorySize) { + return; + } + + uint32_t segments = memorySize / (parallelism * 4); + memorySize = segments * parallelism * 4; + uint32_t lanes = segments * 4; + + in[3] = memorySize; + in[4] = iterations; + in[5] = hashType; + + for (uint32_t k = 0; k < iterations; k++) { + in[0] = k; + for (uint8_t slice = 0; slice < 4; slice++) { + in[2] = slice; + for (uint32_t lane = 0; lane < parallelism; lane++) { + in[1] = lane; + in[6] = 0; + uint32_t index = 0; + if (k == 0 && slice == 0) { + index = 2; + if (hashType == 1 || hashType == 2) { + in[6]++; + block(addresses, in, zero, 0); + block(addresses, addresses, zero, 0); + } + } + uint32_t offset = lane * lanes + slice * segments + index; + while (index < segments) { + uint32_t prev = offset - 1; + if (index == 0 && slice == 0) { + prev += lanes; + } + + uint64_t rand; + if (hashType == 1 || (hashType == 2 && k == 0 && slice < 2)) { + if (index % 128 == 0) { + in[6]++; + block(addresses, in, zero, 0); + block(addresses, addresses, zero, 0); + } + rand = addresses[index % 128]; + } else { + rand = *(uint64_t *)(B + prev * 1024); + } + uint32_t newOffset = indexAlpha(rand, lanes, segments, parallelism, k, slice, lane, index); + + block( + (uint64_t *)&B[offset * 1024], + (uint64_t *)&B[prev * 1024], + (uint64_t *)&B[newOffset * 1024], + 1 + ); + index++; + offset++; + } + } + } + } + + uint32_t destIndex = (memorySize - 1) * 1024; + for (uint32_t lane = 0; lane < parallelism - 1; lane++) { + uint32_t sourceIndex = (lane * lanes + lanes - 1) * 1024; + for (uint32_t i = 0; i < 1024; i += 8) { + *(uint64_t *)&B[destIndex + i] ^= *(uint64_t *)&B[sourceIndex + i]; + } + } + + for (uint16_t i = 0; i < 1024; i += 8) { + *(uint64_t *)&B[i] = *(uint64_t *)&B[destIndex + i]; + } +} diff --git a/frontend/node_modules/hash-wasm/src/bcrypt.c b/frontend/node_modules/hash-wasm/src/bcrypt.c new file mode 100644 index 0000000..f1e50d8 --- /dev/null +++ b/frontend/node_modules/hash-wasm/src/bcrypt.c @@ -0,0 +1,787 @@ +/* + * The crypt_blowfish homepage is: + * + * http://www.openwall.com/crypt/ + * + * This code comes from John the Ripper password cracker, with reentrant + * and crypt(3) interfaces added, but optimizations specific to password + * cracking removed. + * + * Written by Solar Designer in 1998-2014. + * No copyright is claimed, and the software is hereby placed in the public + * domain. In case this attempt to disclaim copyright and place the software + * in the public domain is deemed null and void, then the software is + * Copyright (c) 1998-2014 Solar Designer and it is hereby released to the + * general public under the following terms: + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted. + * + * There's ABSOLUTELY NO WARRANTY, express or implied. + * + * It is my intent that you should be able to use this on your system, + * as part of a software package, or anywhere else to improve security, + * ensure compatibility, or for any other purpose. I would appreciate + * it if you give credit where it is due and keep your modifications in + * the public domain as well, but I don't require that in order to let + * you place this code and any modifications you make under a license + * of your choice. + * + * This implementation is fully compatible with OpenBSD's bcrypt.c for prefix + * "$2b$", originally by Niels Provos , and it uses + * some of his ideas. The password hashing algorithm was designed by David + * Mazieres . For information on the level of + * compatibility for bcrypt hash prefixes other than "$2b$", please refer to + * the comments in BF_set_key() below and to the included crypt(3) man page. + * + * There's a paper on the algorithm that explains its design decisions: + * + * http://www.usenix.org/events/usenix99/provos.html + * + * Some of the tricks in BF_ROUND might be inspired by Eric Young's + * Blowfish library (I can't be sure if I would think of something if I + * hadn't seen his code). + * + * Modified for hash-wasm by Dani Biró + */ + +#define WITH_BUFFER +#include "hash-wasm.h" + +typedef unsigned int BF_word; +typedef signed int BF_word_signed; + +/* Number of Blowfish rounds, this is also hardcoded into a few places */ +#define BF_N 16 + +typedef BF_word BF_key[BF_N + 2]; + +typedef struct { + BF_word S[4][0x100]; + BF_key P; +} BF_ctx; + +/* + * Magic IV for 64 Blowfish encryptions that we do at the end. + * The string is "OrpheanBeholderScryDoubt" on big-endian. + */ +static BF_word BF_magic_w[6] = { + 0x4F727068, 0x65616E42, 0x65686F6C, + 0x64657253, 0x63727944, 0x6F756274 +}; + +/* + * P-box and S-box tables initialized with digits of Pi. + */ +BF_ctx ctx = { + { + { + 0xd1310ba6, 0x98dfb5ac, 0x2ffd72db, 0xd01adfb7, + 0xb8e1afed, 0x6a267e96, 0xba7c9045, 0xf12c7f99, + 0x24a19947, 0xb3916cf7, 0x0801f2e2, 0x858efc16, + 0x636920d8, 0x71574e69, 0xa458fea3, 0xf4933d7e, + 0x0d95748f, 0x728eb658, 0x718bcd58, 0x82154aee, + 0x7b54a41d, 0xc25a59b5, 0x9c30d539, 0x2af26013, + 0xc5d1b023, 0x286085f0, 0xca417918, 0xb8db38ef, + 0x8e79dcb0, 0x603a180e, 0x6c9e0e8b, 0xb01e8a3e, + 0xd71577c1, 0xbd314b27, 0x78af2fda, 0x55605c60, + 0xe65525f3, 0xaa55ab94, 0x57489862, 0x63e81440, + 0x55ca396a, 0x2aab10b6, 0xb4cc5c34, 0x1141e8ce, + 0xa15486af, 0x7c72e993, 0xb3ee1411, 0x636fbc2a, + 0x2ba9c55d, 0x741831f6, 0xce5c3e16, 0x9b87931e, + 0xafd6ba33, 0x6c24cf5c, 0x7a325381, 0x28958677, + 0x3b8f4898, 0x6b4bb9af, 0xc4bfe81b, 0x66282193, + 0x61d809cc, 0xfb21a991, 0x487cac60, 0x5dec8032, + 0xef845d5d, 0xe98575b1, 0xdc262302, 0xeb651b88, + 0x23893e81, 0xd396acc5, 0x0f6d6ff3, 0x83f44239, + 0x2e0b4482, 0xa4842004, 0x69c8f04a, 0x9e1f9b5e, + 0x21c66842, 0xf6e96c9a, 0x670c9c61, 0xabd388f0, + 0x6a51a0d2, 0xd8542f68, 0x960fa728, 0xab5133a3, + 0x6eef0b6c, 0x137a3be4, 0xba3bf050, 0x7efb2a98, + 0xa1f1651d, 0x39af0176, 0x66ca593e, 0x82430e88, + 0x8cee8619, 0x456f9fb4, 0x7d84a5c3, 0x3b8b5ebe, + 0xe06f75d8, 0x85c12073, 0x401a449f, 0x56c16aa6, + 0x4ed3aa62, 0x363f7706, 0x1bfedf72, 0x429b023d, + 0x37d0d724, 0xd00a1248, 0xdb0fead3, 0x49f1c09b, + 0x075372c9, 0x80991b7b, 0x25d479d8, 0xf6e8def7, + 0xe3fe501a, 0xb6794c3b, 0x976ce0bd, 0x04c006ba, + 0xc1a94fb6, 0x409f60c4, 0x5e5c9ec2, 0x196a2463, + 0x68fb6faf, 0x3e6c53b5, 0x1339b2eb, 0x3b52ec6f, + 0x6dfc511f, 0x9b30952c, 0xcc814544, 0xaf5ebd09, + 0xbee3d004, 0xde334afd, 0x660f2807, 0x192e4bb3, + 0xc0cba857, 0x45c8740f, 0xd20b5f39, 0xb9d3fbdb, + 0x5579c0bd, 0x1a60320a, 0xd6a100c6, 0x402c7279, + 0x679f25fe, 0xfb1fa3cc, 0x8ea5e9f8, 0xdb3222f8, + 0x3c7516df, 0xfd616b15, 0x2f501ec8, 0xad0552ab, + 0x323db5fa, 0xfd238760, 0x53317b48, 0x3e00df82, + 0x9e5c57bb, 0xca6f8ca0, 0x1a87562e, 0xdf1769db, + 0xd542a8f6, 0x287effc3, 0xac6732c6, 0x8c4f5573, + 0x695b27b0, 0xbbca58c8, 0xe1ffa35d, 0xb8f011a0, + 0x10fa3d98, 0xfd2183b8, 0x4afcb56c, 0x2dd1d35b, + 0x9a53e479, 0xb6f84565, 0xd28e49bc, 0x4bfb9790, + 0xe1ddf2da, 0xa4cb7e33, 0x62fb1341, 0xcee4c6e8, + 0xef20cada, 0x36774c01, 0xd07e9efe, 0x2bf11fb4, + 0x95dbda4d, 0xae909198, 0xeaad8e71, 0x6b93d5a0, + 0xd08ed1d0, 0xafc725e0, 0x8e3c5b2f, 0x8e7594b7, + 0x8ff6e2fb, 0xf2122b64, 0x8888b812, 0x900df01c, + 0x4fad5ea0, 0x688fc31c, 0xd1cff191, 0xb3a8c1ad, + 0x2f2f2218, 0xbe0e1777, 0xea752dfe, 0x8b021fa1, + 0xe5a0cc0f, 0xb56f74e8, 0x18acf3d6, 0xce89e299, + 0xb4a84fe0, 0xfd13e0b7, 0x7cc43b81, 0xd2ada8d9, + 0x165fa266, 0x80957705, 0x93cc7314, 0x211a1477, + 0xe6ad2065, 0x77b5fa86, 0xc75442f5, 0xfb9d35cf, + 0xebcdaf0c, 0x7b3e89a0, 0xd6411bd3, 0xae1e7e49, + 0x00250e2d, 0x2071b35e, 0x226800bb, 0x57b8e0af, + 0x2464369b, 0xf009b91e, 0x5563911d, 0x59dfa6aa, + 0x78c14389, 0xd95a537f, 0x207d5ba2, 0x02e5b9c5, + 0x83260376, 0x6295cfa9, 0x11c81968, 0x4e734a41, + 0xb3472dca, 0x7b14a94a, 0x1b510052, 0x9a532915, + 0xd60f573f, 0xbc9bc6e4, 0x2b60a476, 0x81e67400, + 0x08ba6fb5, 0x571be91f, 0xf296ec6b, 0x2a0dd915, + 0xb6636521, 0xe7b9f9b6, 0xff34052e, 0xc5855664, + 0x53b02d5d, 0xa99f8fa1, 0x08ba4799, 0x6e85076a + }, { + 0x4b7a70e9, 0xb5b32944, 0xdb75092e, 0xc4192623, + 0xad6ea6b0, 0x49a7df7d, 0x9cee60b8, 0x8fedb266, + 0xecaa8c71, 0x699a17ff, 0x5664526c, 0xc2b19ee1, + 0x193602a5, 0x75094c29, 0xa0591340, 0xe4183a3e, + 0x3f54989a, 0x5b429d65, 0x6b8fe4d6, 0x99f73fd6, + 0xa1d29c07, 0xefe830f5, 0x4d2d38e6, 0xf0255dc1, + 0x4cdd2086, 0x8470eb26, 0x6382e9c6, 0x021ecc5e, + 0x09686b3f, 0x3ebaefc9, 0x3c971814, 0x6b6a70a1, + 0x687f3584, 0x52a0e286, 0xb79c5305, 0xaa500737, + 0x3e07841c, 0x7fdeae5c, 0x8e7d44ec, 0x5716f2b8, + 0xb03ada37, 0xf0500c0d, 0xf01c1f04, 0x0200b3ff, + 0xae0cf51a, 0x3cb574b2, 0x25837a58, 0xdc0921bd, + 0xd19113f9, 0x7ca92ff6, 0x94324773, 0x22f54701, + 0x3ae5e581, 0x37c2dadc, 0xc8b57634, 0x9af3dda7, + 0xa9446146, 0x0fd0030e, 0xecc8c73e, 0xa4751e41, + 0xe238cd99, 0x3bea0e2f, 0x3280bba1, 0x183eb331, + 0x4e548b38, 0x4f6db908, 0x6f420d03, 0xf60a04bf, + 0x2cb81290, 0x24977c79, 0x5679b072, 0xbcaf89af, + 0xde9a771f, 0xd9930810, 0xb38bae12, 0xdccf3f2e, + 0x5512721f, 0x2e6b7124, 0x501adde6, 0x9f84cd87, + 0x7a584718, 0x7408da17, 0xbc9f9abc, 0xe94b7d8c, + 0xec7aec3a, 0xdb851dfa, 0x63094366, 0xc464c3d2, + 0xef1c1847, 0x3215d908, 0xdd433b37, 0x24c2ba16, + 0x12a14d43, 0x2a65c451, 0x50940002, 0x133ae4dd, + 0x71dff89e, 0x10314e55, 0x81ac77d6, 0x5f11199b, + 0x043556f1, 0xd7a3c76b, 0x3c11183b, 0x5924a509, + 0xf28fe6ed, 0x97f1fbfa, 0x9ebabf2c, 0x1e153c6e, + 0x86e34570, 0xeae96fb1, 0x860e5e0a, 0x5a3e2ab3, + 0x771fe71c, 0x4e3d06fa, 0x2965dcb9, 0x99e71d0f, + 0x803e89d6, 0x5266c825, 0x2e4cc978, 0x9c10b36a, + 0xc6150eba, 0x94e2ea78, 0xa5fc3c53, 0x1e0a2df4, + 0xf2f74ea7, 0x361d2b3d, 0x1939260f, 0x19c27960, + 0x5223a708, 0xf71312b6, 0xebadfe6e, 0xeac31f66, + 0xe3bc4595, 0xa67bc883, 0xb17f37d1, 0x018cff28, + 0xc332ddef, 0xbe6c5aa5, 0x65582185, 0x68ab9802, + 0xeecea50f, 0xdb2f953b, 0x2aef7dad, 0x5b6e2f84, + 0x1521b628, 0x29076170, 0xecdd4775, 0x619f1510, + 0x13cca830, 0xeb61bd96, 0x0334fe1e, 0xaa0363cf, + 0xb5735c90, 0x4c70a239, 0xd59e9e0b, 0xcbaade14, + 0xeecc86bc, 0x60622ca7, 0x9cab5cab, 0xb2f3846e, + 0x648b1eaf, 0x19bdf0ca, 0xa02369b9, 0x655abb50, + 0x40685a32, 0x3c2ab4b3, 0x319ee9d5, 0xc021b8f7, + 0x9b540b19, 0x875fa099, 0x95f7997e, 0x623d7da8, + 0xf837889a, 0x97e32d77, 0x11ed935f, 0x16681281, + 0x0e358829, 0xc7e61fd6, 0x96dedfa1, 0x7858ba99, + 0x57f584a5, 0x1b227263, 0x9b83c3ff, 0x1ac24696, + 0xcdb30aeb, 0x532e3054, 0x8fd948e4, 0x6dbc3128, + 0x58ebf2ef, 0x34c6ffea, 0xfe28ed61, 0xee7c3c73, + 0x5d4a14d9, 0xe864b7e3, 0x42105d14, 0x203e13e0, + 0x45eee2b6, 0xa3aaabea, 0xdb6c4f15, 0xfacb4fd0, + 0xc742f442, 0xef6abbb5, 0x654f3b1d, 0x41cd2105, + 0xd81e799e, 0x86854dc7, 0xe44b476a, 0x3d816250, + 0xcf62a1f2, 0x5b8d2646, 0xfc8883a0, 0xc1c7b6a3, + 0x7f1524c3, 0x69cb7492, 0x47848a0b, 0x5692b285, + 0x095bbf00, 0xad19489d, 0x1462b174, 0x23820e00, + 0x58428d2a, 0x0c55f5ea, 0x1dadf43e, 0x233f7061, + 0x3372f092, 0x8d937e41, 0xd65fecf1, 0x6c223bdb, + 0x7cde3759, 0xcbee7460, 0x4085f2a7, 0xce77326e, + 0xa6078084, 0x19f8509e, 0xe8efd855, 0x61d99735, + 0xa969a7aa, 0xc50c06c2, 0x5a04abfc, 0x800bcadc, + 0x9e447a2e, 0xc3453484, 0xfdd56705, 0x0e1e9ec9, + 0xdb73dbd3, 0x105588cd, 0x675fda79, 0xe3674340, + 0xc5c43465, 0x713e38d8, 0x3d28f89e, 0xf16dff20, + 0x153e21e7, 0x8fb03d4a, 0xe6e39f2b, 0xdb83adf7 + }, { + 0xe93d5a68, 0x948140f7, 0xf64c261c, 0x94692934, + 0x411520f7, 0x7602d4f7, 0xbcf46b2e, 0xd4a20068, + 0xd4082471, 0x3320f46a, 0x43b7d4b7, 0x500061af, + 0x1e39f62e, 0x97244546, 0x14214f74, 0xbf8b8840, + 0x4d95fc1d, 0x96b591af, 0x70f4ddd3, 0x66a02f45, + 0xbfbc09ec, 0x03bd9785, 0x7fac6dd0, 0x31cb8504, + 0x96eb27b3, 0x55fd3941, 0xda2547e6, 0xabca0a9a, + 0x28507825, 0x530429f4, 0x0a2c86da, 0xe9b66dfb, + 0x68dc1462, 0xd7486900, 0x680ec0a4, 0x27a18dee, + 0x4f3ffea2, 0xe887ad8c, 0xb58ce006, 0x7af4d6b6, + 0xaace1e7c, 0xd3375fec, 0xce78a399, 0x406b2a42, + 0x20fe9e35, 0xd9f385b9, 0xee39d7ab, 0x3b124e8b, + 0x1dc9faf7, 0x4b6d1856, 0x26a36631, 0xeae397b2, + 0x3a6efa74, 0xdd5b4332, 0x6841e7f7, 0xca7820fb, + 0xfb0af54e, 0xd8feb397, 0x454056ac, 0xba489527, + 0x55533a3a, 0x20838d87, 0xfe6ba9b7, 0xd096954b, + 0x55a867bc, 0xa1159a58, 0xcca92963, 0x99e1db33, + 0xa62a4a56, 0x3f3125f9, 0x5ef47e1c, 0x9029317c, + 0xfdf8e802, 0x04272f70, 0x80bb155c, 0x05282ce3, + 0x95c11548, 0xe4c66d22, 0x48c1133f, 0xc70f86dc, + 0x07f9c9ee, 0x41041f0f, 0x404779a4, 0x5d886e17, + 0x325f51eb, 0xd59bc0d1, 0xf2bcc18f, 0x41113564, + 0x257b7834, 0x602a9c60, 0xdff8e8a3, 0x1f636c1b, + 0x0e12b4c2, 0x02e1329e, 0xaf664fd1, 0xcad18115, + 0x6b2395e0, 0x333e92e1, 0x3b240b62, 0xeebeb922, + 0x85b2a20e, 0xe6ba0d99, 0xde720c8c, 0x2da2f728, + 0xd0127845, 0x95b794fd, 0x647d0862, 0xe7ccf5f0, + 0x5449a36f, 0x877d48fa, 0xc39dfd27, 0xf33e8d1e, + 0x0a476341, 0x992eff74, 0x3a6f6eab, 0xf4f8fd37, + 0xa812dc60, 0xa1ebddf8, 0x991be14c, 0xdb6e6b0d, + 0xc67b5510, 0x6d672c37, 0x2765d43b, 0xdcd0e804, + 0xf1290dc7, 0xcc00ffa3, 0xb5390f92, 0x690fed0b, + 0x667b9ffb, 0xcedb7d9c, 0xa091cf0b, 0xd9155ea3, + 0xbb132f88, 0x515bad24, 0x7b9479bf, 0x763bd6eb, + 0x37392eb3, 0xcc115979, 0x8026e297, 0xf42e312d, + 0x6842ada7, 0xc66a2b3b, 0x12754ccc, 0x782ef11c, + 0x6a124237, 0xb79251e7, 0x06a1bbe6, 0x4bfb6350, + 0x1a6b1018, 0x11caedfa, 0x3d25bdd8, 0xe2e1c3c9, + 0x44421659, 0x0a121386, 0xd90cec6e, 0xd5abea2a, + 0x64af674e, 0xda86a85f, 0xbebfe988, 0x64e4c3fe, + 0x9dbc8057, 0xf0f7c086, 0x60787bf8, 0x6003604d, + 0xd1fd8346, 0xf6381fb0, 0x7745ae04, 0xd736fccc, + 0x83426b33, 0xf01eab71, 0xb0804187, 0x3c005e5f, + 0x77a057be, 0xbde8ae24, 0x55464299, 0xbf582e61, + 0x4e58f48f, 0xf2ddfda2, 0xf474ef38, 0x8789bdc2, + 0x5366f9c3, 0xc8b38e74, 0xb475f255, 0x46fcd9b9, + 0x7aeb2661, 0x8b1ddf84, 0x846a0e79, 0x915f95e2, + 0x466e598e, 0x20b45770, 0x8cd55591, 0xc902de4c, + 0xb90bace1, 0xbb8205d0, 0x11a86248, 0x7574a99e, + 0xb77f19b6, 0xe0a9dc09, 0x662d09a1, 0xc4324633, + 0xe85a1f02, 0x09f0be8c, 0x4a99a025, 0x1d6efe10, + 0x1ab93d1d, 0x0ba5a4df, 0xa186f20f, 0x2868f169, + 0xdcb7da83, 0x573906fe, 0xa1e2ce9b, 0x4fcd7f52, + 0x50115e01, 0xa70683fa, 0xa002b5c4, 0x0de6d027, + 0x9af88c27, 0x773f8641, 0xc3604c06, 0x61a806b5, + 0xf0177a28, 0xc0f586e0, 0x006058aa, 0x30dc7d62, + 0x11e69ed7, 0x2338ea63, 0x53c2dd94, 0xc2c21634, + 0xbbcbee56, 0x90bcb6de, 0xebfc7da1, 0xce591d76, + 0x6f05e409, 0x4b7c0188, 0x39720a3d, 0x7c927c24, + 0x86e3725f, 0x724d9db9, 0x1ac15bb4, 0xd39eb8fc, + 0xed545578, 0x08fca5b5, 0xd83d7cd3, 0x4dad0fc4, + 0x1e50ef5e, 0xb161e6f8, 0xa28514d9, 0x6c51133c, + 0x6fd5c7e7, 0x56e14ec4, 0x362abfce, 0xddc6c837, + 0xd79a3234, 0x92638212, 0x670efa8e, 0x406000e0 + }, { + 0x3a39ce37, 0xd3faf5cf, 0xabc27737, 0x5ac52d1b, + 0x5cb0679e, 0x4fa33742, 0xd3822740, 0x99bc9bbe, + 0xd5118e9d, 0xbf0f7315, 0xd62d1c7e, 0xc700c47b, + 0xb78c1b6b, 0x21a19045, 0xb26eb1be, 0x6a366eb4, + 0x5748ab2f, 0xbc946e79, 0xc6a376d2, 0x6549c2c8, + 0x530ff8ee, 0x468dde7d, 0xd5730a1d, 0x4cd04dc6, + 0x2939bbdb, 0xa9ba4650, 0xac9526e8, 0xbe5ee304, + 0xa1fad5f0, 0x6a2d519a, 0x63ef8ce2, 0x9a86ee22, + 0xc089c2b8, 0x43242ef6, 0xa51e03aa, 0x9cf2d0a4, + 0x83c061ba, 0x9be96a4d, 0x8fe51550, 0xba645bd6, + 0x2826a2f9, 0xa73a3ae1, 0x4ba99586, 0xef5562e9, + 0xc72fefd3, 0xf752f7da, 0x3f046f69, 0x77fa0a59, + 0x80e4a915, 0x87b08601, 0x9b09e6ad, 0x3b3ee593, + 0xe990fd5a, 0x9e34d797, 0x2cf0b7d9, 0x022b8b51, + 0x96d5ac3a, 0x017da67d, 0xd1cf3ed6, 0x7c7d2d28, + 0x1f9f25cf, 0xadf2b89b, 0x5ad6b472, 0x5a88f54c, + 0xe029ac71, 0xe019a5e6, 0x47b0acfd, 0xed93fa9b, + 0xe8d3c48d, 0x283b57cc, 0xf8d56629, 0x79132e28, + 0x785f0191, 0xed756055, 0xf7960e44, 0xe3d35e8c, + 0x15056dd4, 0x88f46dba, 0x03a16125, 0x0564f0bd, + 0xc3eb9e15, 0x3c9057a2, 0x97271aec, 0xa93a072a, + 0x1b3f6d9b, 0x1e6321f5, 0xf59c66fb, 0x26dcf319, + 0x7533d928, 0xb155fdf5, 0x03563482, 0x8aba3cbb, + 0x28517711, 0xc20ad9f8, 0xabcc5167, 0xccad925f, + 0x4de81751, 0x3830dc8e, 0x379d5862, 0x9320f991, + 0xea7a90c2, 0xfb3e7bce, 0x5121ce64, 0x774fbe32, + 0xa8b6e37e, 0xc3293d46, 0x48de5369, 0x6413e680, + 0xa2ae0810, 0xdd6db224, 0x69852dfd, 0x09072166, + 0xb39a460a, 0x6445c0dd, 0x586cdecf, 0x1c20c8ae, + 0x5bbef7dd, 0x1b588d40, 0xccd2017f, 0x6bb4e3bb, + 0xdda26a7e, 0x3a59ff45, 0x3e350a44, 0xbcb4cdd5, + 0x72eacea8, 0xfa6484bb, 0x8d6612ae, 0xbf3c6f47, + 0xd29be463, 0x542f5d9e, 0xaec2771b, 0xf64e6370, + 0x740e0d8d, 0xe75b1357, 0xf8721671, 0xaf537d5d, + 0x4040cb08, 0x4eb4e2cc, 0x34d2466a, 0x0115af84, + 0xe1b00428, 0x95983a1d, 0x06b89fb4, 0xce6ea048, + 0x6f3f3b82, 0x3520ab82, 0x011a1d4b, 0x277227f8, + 0x611560b1, 0xe7933fdc, 0xbb3a792b, 0x344525bd, + 0xa08839e1, 0x51ce794b, 0x2f32c9b7, 0xa01fbac9, + 0xe01cc87e, 0xbcc7d1f6, 0xcf0111c3, 0xa1e8aac7, + 0x1a908749, 0xd44fbd9a, 0xd0dadecb, 0xd50ada38, + 0x0339c32a, 0xc6913667, 0x8df9317c, 0xe0b12b4f, + 0xf79e59b7, 0x43f5bb3a, 0xf2d519ff, 0x27d9459c, + 0xbf97222c, 0x15e6fc2a, 0x0f91fc71, 0x9b941525, + 0xfae59361, 0xceb69ceb, 0xc2a86459, 0x12baa8d1, + 0xb6c1075e, 0xe3056a0c, 0x10d25065, 0xcb03a442, + 0xe0ec6e0e, 0x1698db3b, 0x4c98a0be, 0x3278e964, + 0x9f1f9532, 0xe0d392df, 0xd3a0342b, 0x8971f21e, + 0x1b0a7441, 0x4ba3348c, 0xc5be7120, 0xc37632d8, + 0xdf359f8d, 0x9b992f2e, 0xe60b6f47, 0x0fe3f11d, + 0xe54cda54, 0x1edad891, 0xce6279cf, 0xcd3e7e6f, + 0x1618b166, 0xfd2c1d05, 0x848fd2c5, 0xf6fb2299, + 0xf523f357, 0xa6327623, 0x93a83531, 0x56cccd02, + 0xacf08162, 0x5a75ebb5, 0x6e163697, 0x88d273cc, + 0xde966292, 0x81b949d0, 0x4c50901b, 0x71c65614, + 0xe6c6c7bd, 0x327a140a, 0x45e1d006, 0xc3f27b9a, + 0xc9aa53fd, 0x62a80f00, 0xbb25bfe2, 0x35bdd2f6, + 0x71126905, 0xb2040222, 0xb6cbcf7c, 0xcd769c2b, + 0x53113ec0, 0x1640e3d3, 0x38abbd60, 0x2547adf0, + 0xba38209c, 0xf746ce76, 0x77afa1c5, 0x20756060, + 0x85cbfe4e, 0x8ae88dd8, 0x7aaaf9b0, 0x4cf9aa7e, + 0x1948c25c, 0x02fb8a8c, 0x01c36ae4, 0xd6ebe1f9, + 0x90d4f869, 0xa65cdea0, 0x3f09252d, 0xc208e69f, + 0xb74e6132, 0xce77e25b, 0x578fdfe3, 0x3ac372e6 + } + }, { + 0x243f6a88, 0x85a308d3, 0x13198a2e, 0x03707344, + 0xa4093822, 0x299f31d0, 0x082efa98, 0xec4e6c89, + 0x452821e6, 0x38d01377, 0xbe5466cf, 0x34e90c6c, + 0xc0ac29b7, 0xc97c50dd, 0x3f84d5b5, 0xb5470917, + 0x9216d5d9, 0x8979fb1b + } +}; + +static unsigned char BF_itoa64[64 + 1] = + "./ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"; + +static unsigned char BF_atoi64[0x60] = { + 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 0, 1, + 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 64, 64, 64, 64, 64, + 64, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, + 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 64, 64, 64, 64, 64, + 64, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, + 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 64, 64, 64, 64, 64 +}; + +union { + BF_word LR[2]; + uint64_t LR64; +} block; + +// EM_JS(void, print_memory, (uint32_t offset, uint32_t len), { +// console.log(x); +// }); + +#define BF_safe_atoi64(dst, src) \ +{ \ + tmp = (unsigned char)(src); \ + if ((unsigned int)(tmp -= 0x20) >= 0x60) return -1; \ + tmp = BF_atoi64[tmp]; \ + if (tmp > 63) return -1; \ + (dst) = tmp; \ +} + +static int BF_decode(BF_word *dst, const char *src, int size) +{ + unsigned char *dptr = (unsigned char *)dst; + unsigned char *end = dptr + size; + const unsigned char *sptr = (const unsigned char *)src; + unsigned int tmp, c1, c2, c3, c4; + + do { + BF_safe_atoi64(c1, *sptr++); + BF_safe_atoi64(c2, *sptr++); + *dptr++ = (c1 << 2) | ((c2 & 0x30) >> 4); + if (dptr >= end) break; + + BF_safe_atoi64(c3, *sptr++); + *dptr++ = ((c2 & 0x0F) << 4) | ((c3 & 0x3C) >> 2); + if (dptr >= end) break; + + BF_safe_atoi64(c4, *sptr++); + *dptr++ = ((c3 & 0x03) << 6) | c4; + } while (dptr < end); + + return 0; +} + +static void BF_encode(char *dst, const BF_word *src, int size) +{ + const unsigned char *sptr = (const unsigned char *)src; + const unsigned char *end = sptr + size; + unsigned char *dptr = (unsigned char *)dst; + unsigned int c1, c2; + + do { + c1 = *sptr++; + *dptr++ = BF_itoa64[c1 >> 2]; + c1 = (c1 & 0x03) << 4; + if (sptr >= end) { + *dptr++ = BF_itoa64[c1]; + break; + } + + c2 = *sptr++; + c1 |= c2 >> 4; + *dptr++ = BF_itoa64[c1]; + c1 = (c2 & 0x0f) << 2; + if (sptr >= end) { + *dptr++ = BF_itoa64[c1]; + break; + } + + c2 = *sptr++; + c1 |= c2 >> 6; + *dptr++ = BF_itoa64[c1]; + *dptr++ = BF_itoa64[c2 & 0x3f]; + } while (sptr < end); +} + +static void BF_swap(BF_word *x, int count) +{ + BF_word tmp; + + do { + tmp = *x; + tmp = (tmp << 16) | (tmp >> 16); + *x++ = ((tmp & 0x00FF00FF) << 8) | ((tmp >> 8) & 0x00FF00FF); + } while (--count); +} + +#define BF_ROUND(L, R, N) \ + tmp1 = ctx.S[3][L & 0xFF]; \ + tmp2 = ctx.S[2][(L >> 8) & 0xFF]; \ + tmp3 = ctx.S[1][(L >> 16) & 0xFF]; \ + tmp3 += ctx.S[0][L >> 24]; \ + tmp3 ^= tmp2; \ + R ^= ctx.P[N + 1]; \ + tmp3 += tmp1; \ + R ^= tmp3; + +/* + * Encrypt one block, BF_N is hardcoded here. + */ +#define BF_ENCRYPT \ + block.LR[0] ^= ctx.P[0]; \ + BF_ROUND(block.LR[0], block.LR[1], 0); \ + BF_ROUND(block.LR[1], block.LR[0], 1); \ + BF_ROUND(block.LR[0], block.LR[1], 2); \ + BF_ROUND(block.LR[1], block.LR[0], 3); \ + BF_ROUND(block.LR[0], block.LR[1], 4); \ + BF_ROUND(block.LR[1], block.LR[0], 5); \ + BF_ROUND(block.LR[0], block.LR[1], 6); \ + BF_ROUND(block.LR[1], block.LR[0], 7); \ + BF_ROUND(block.LR[0], block.LR[1], 8); \ + BF_ROUND(block.LR[1], block.LR[0], 9); \ + BF_ROUND(block.LR[0], block.LR[1], 10); \ + BF_ROUND(block.LR[1], block.LR[0], 11); \ + BF_ROUND(block.LR[0], block.LR[1], 12); \ + BF_ROUND(block.LR[1], block.LR[0], 13); \ + BF_ROUND(block.LR[0], block.LR[1], 14); \ + BF_ROUND(block.LR[1], block.LR[0], 15); \ + tmp4 = block.LR[1]; \ + block.LR[1] = block.LR[0]; \ + block.LR[0] = tmp4 ^ ctx.P[BF_N + 1]; + +#define BF_body() \ + block.LR64 = 0; \ + ptr = ctx.P; \ + do { \ + ptr += 2; \ + BF_ENCRYPT; \ + *(ptr - 2) = block.LR[0]; \ + *(ptr - 1) = block.LR[1]; \ + } while (ptr < &ctx.P[BF_N + 2]); \ +\ + ptr = ctx.S[0]; \ + do { \ + ptr += 2; \ + BF_ENCRYPT; \ + *(ptr - 2) = block.LR[0]; \ + *(ptr - 1) = block.LR[1]; \ + } while (ptr < &ctx.S[3][0xFF]); + +static void BF_set_key(const char *key, BF_key expanded, BF_key initial, + unsigned char flags) +{ + const char *ptr = key; + unsigned int bug, i, j; + BF_word safety, sign, diff, tmp[2]; + +/* + * There was a sign extension bug in older revisions of this function. While + * we would have liked to simply fix the bug and move on, we have to provide + * a backwards compatibility feature (essentially the bug) for some systems and + * a safety measure for some others. The latter is needed because for certain + * multiple inputs to the buggy algorithm there exist easily found inputs to + * the correct algorithm that produce the same hash. Thus, we optionally + * deviate from the correct algorithm just enough to avoid such collisions. + * While the bug itself affected the majority of passwords containing + * characters with the 8th bit set (although only a percentage of those in a + * collision-producing way), the anti-collision safety measure affects + * only a subset of passwords containing the '\xff' character (not even all of + * those passwords, just some of them). This character is not found in valid + * UTF-8 sequences and is rarely used in popular 8-bit character encodings. + * Thus, the safety measure is unlikely to cause much annoyance, and is a + * reasonable tradeoff to use when authenticating against existing hashes that + * are not reliably known to have been computed with the correct algorithm. + * + * We use an approach that tries to minimize side-channel leaks of password + * information - that is, we mostly use fixed-cost bitwise operations instead + * of branches or table lookups. (One conditional branch based on password + * length remains. It is not part of the bug aftermath, though, and is + * difficult and possibly unreasonable to avoid given the use of C strings by + * the caller, which results in similar timing leaks anyway.) + * + * For actual implementation, we set an array index in the variable "bug" + * (0 means no bug, 1 means sign extension bug emulation) and a flag in the + * variable "safety" (bit 16 is set when the safety measure is requested). + * Valid combinations of settings are: + * + * Prefix "$2a$": bug = 0, safety = 0x10000 + * Prefix "$2b$": bug = 0, safety = 0 + * Prefix "$2x$": bug = 1, safety = 0 + * Prefix "$2y$": bug = 0, safety = 0 + */ + bug = (unsigned int)flags & 1; + safety = ((BF_word)flags & 2) << 15; + + sign = diff = 0; + + for (i = 0; i < BF_N + 2; i++) { + tmp[0] = tmp[1] = 0; + for (j = 0; j < 4; j++) { + tmp[0] <<= 8; + tmp[0] |= (unsigned char)*ptr; /* correct */ + tmp[1] <<= 8; + tmp[1] |= (BF_word_signed)(signed char)*ptr; /* bug */ +/* + * Sign extension in the first char has no effect - nothing to overwrite yet, + * and those extra 24 bits will be fully shifted out of the 32-bit word. For + * chars 2, 3, 4 in each four-char block, we set bit 7 of "sign" if sign + * extension in tmp[1] occurs. Once this flag is set, it remains set. + */ + if (j) + sign |= tmp[1] & 0x80; + if (!*ptr) + ptr = key; + else + ptr++; + } + diff |= tmp[0] ^ tmp[1]; /* Non-zero on any differences */ + + expanded[i] = tmp[bug]; + initial[i] = ctx.P[i] ^ tmp[bug]; + } + +/* + * At this point, "diff" is zero iff the correct and buggy algorithms produced + * exactly the same result. If so and if "sign" is non-zero, which indicates + * that there was a non-benign sign extension, this means that we have a + * collision between the correctly computed hash for this password and a set of + * passwords that could be supplied to the buggy algorithm. Our safety measure + * is meant to protect from such many-buggy to one-correct collisions, by + * deviating from the correct algorithm in such cases. Let's check for this. + */ + diff |= diff >> 16; /* still zero iff exact match */ + diff &= 0xffff; /* ditto */ + diff += 0xffff; /* bit 16 set iff "diff" was non-zero (on non-match) */ + sign <<= 9; /* move the non-benign sign extension flag to bit 16 */ + sign &= ~diff & safety; /* action needed? */ + +/* + * If we have determined that we need to deviate from the correct algorithm, + * flip bit 16 in initial expanded key. (The choice of 16 is arbitrary, but + * let's stick to it now. It came out of the approach we used above, and it's + * not any worse than any other choice we could make.) + * + * It is crucial that we don't do the same to the expanded key used in the main + * Eksblowfish loop. By doing it to only one of these two, we deviate from a + * state that could be directly specified by a password to the buggy algorithm + * (and to the fully correct one as well, but that's a side-effect). + */ + initial[0] ^= sign; +} + +static const unsigned char flags_by_subtype[26] = + {2, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 0}; + +static char *BF_crypt(const char *key, const char *setting, + char *output, int size, + BF_word min, int should_encode) +{ + BF_key expanded_key; + union { + BF_word salt[4]; + BF_word output[6]; + } binary; + BF_word tmp1, tmp2, tmp3, tmp4; + BF_word *ptr; + uint64_t *ptr64; + BF_word count; + int i; + + count = (BF_word)1 << ((setting[4] - '0') * 10 + (setting[5] - '0')); + if (count < min || BF_decode(binary.salt, &setting[7], 16)) { + return NULL; + } + BF_swap(binary.salt, 4); + + BF_set_key(key, expanded_key, ctx.P, + flags_by_subtype[(unsigned int)(unsigned char)setting[2] - 'a']); + + block.LR64 = 0; + for (i = 0; i < BF_N + 2; i += 2) { + block.LR64 ^= *(uint64_t*)&binary.salt[i & 2]; + BF_ENCRYPT; + *(uint64_t*)&ctx.P[i] = block.LR64; + } + + ptr = ctx.S[0]; + do { + ptr += 4; + block.LR[0] ^= binary.salt[(BF_N + 2) & 3]; + block.LR[1] ^= binary.salt[(BF_N + 3) & 3]; + BF_ENCRYPT; + *(ptr - 4) = block.LR[0]; + *(ptr - 3) = block.LR[1]; + + block.LR[0] ^= binary.salt[(BF_N + 4) & 3]; + block.LR[1] ^= binary.salt[(BF_N + 5) & 3]; + BF_ENCRYPT; + *(ptr - 2) = block.LR[0]; + *(ptr - 1) = block.LR[1]; + } while (ptr < &ctx.S[3][0xFF]); + + do { + int done; + + for (i = 0; i < BF_N + 2; i += 2) { + ctx.P[i] ^= expanded_key[i]; + ctx.P[i + 1] ^= expanded_key[i + 1]; + } + + done = 0; + uint64_t tmp1x = ((uint64_t*)binary.salt)[0]; + uint64_t tmp3x = ((uint64_t*)binary.salt)[1]; + do { + BF_body(); + if (done) + break; + done = 1; + + for (i = 0; i < BF_N; i += 4) { + *(uint64_t*)(&ctx.P[i]) ^= tmp1x; + *(uint64_t*)(&ctx.P[i + 2]) ^= tmp3x; + } + *(uint64_t*)(&ctx.P[16]) ^= tmp1x; + } while (1); + } while (--count); + + for (i = 0; i < 6; i += 2) { + block.LR64 = *(uint64_t*)&BF_magic_w[i]; + + count = 64; + do { + BF_ENCRYPT; + } while (--count); + + *(uint64_t*)&(binary.output[i]) = block.LR64; + } + + // memcpy(output, setting, 7 + 22 - 1); + for (uint8_t z = 0; z < 7; z++) { + ((uint32_t*)output)[z] = ((uint32_t*)setting)[z]; + } + + output[28] = BF_itoa64[(int) + BF_atoi64[(int)setting[28] - 0x20] & 0x30]; + +/* This has to be bug-compatible with the original implementation, so + * only encode 23 of the 24 bytes. :-) */ + BF_swap(binary.output, 6); + + if (should_encode) { + BF_encode(&output[7 + 22], binary.output, 23); + } else { + uint8_t *source = (uint8_t*)binary.output; + for (uint8_t z = 0; z < 3; z++) { + ((uint64_t*)output)[z] = ((uint64_t*)source)[z]; + } + } + output[7 + 22 + 31] = '\0'; + + return output; +} + +int _crypt_output_magic(const char *setting, char *output, int size) +{ + if (size < 3) + return -1; + + output[0] = '*'; + output[1] = '0'; + output[2] = '\0'; + + if (setting[0] == '*' && setting[1] == '0') + output[1] = '1'; + + return 0; +} + +char *_crypt_blowfish_rn(const char *key, const char *setting, + char *output, int size, int should_encode) +{ + _crypt_output_magic(setting, output, size); + return BF_crypt(key, setting, output, size, 16, should_encode); +} + +char *_crypt_gensalt_blowfish_rn(const char *prefix, unsigned long count, + const char *input, char *output) +{ + output[0] = '$'; + output[1] = '2'; + output[2] = prefix[2]; + output[3] = '$'; + output[4] = '0' + count / 10; + output[5] = '0' + count % 10; + output[6] = '$'; + + BF_encode(&output[7], (const BF_word *)input, 16); + output[7 + 22] = '\0'; + + return output; +} + +WASM_EXPORT +void bcrypt(uint32_t password_length, uint32_t cost_factor, uint32_t should_encode) { + uint8_t *salt = &main_buffer[0]; + uint8_t *key = &main_buffer[16]; + key[password_length] = 0; + + uint8_t setting[30]; + _crypt_gensalt_blowfish_rn("$2a", cost_factor, (char*)salt, (char*)setting); + + uint8_t output[60]; + _crypt_blowfish_rn((char*)key, (char*)setting, (char*)output, 60, should_encode); + + for (uint8_t i = 0; i < 60; i++) { + main_buffer[i] = output[i]; + } +} + +WASM_EXPORT +uint32_t bcrypt_verify(uint32_t passwordLength) { + uint8_t *hash = &main_buffer[0]; + uint8_t *key = &main_buffer[60]; + key[passwordLength] = 0; + + uint8_t output[60]; + _crypt_blowfish_rn((char*)key, (char*)main_buffer, (char*)output, 60, 1); + + // 0-28 => setting + // 29-59 => hash + + uint8_t res = 0; + uint64_t *out64 = (uint64_t*)&output[28]; + uint64_t *hash64 = (uint64_t*)&hash[28]; + for (uint8_t i = 0; i < 4; i++) { + res += out64[i] != hash64[i]; + } + return res == 0; +} diff --git a/frontend/node_modules/hash-wasm/src/blake2b.c b/frontend/node_modules/hash-wasm/src/blake2b.c new file mode 100644 index 0000000..c30f78e --- /dev/null +++ b/frontend/node_modules/hash-wasm/src/blake2b.c @@ -0,0 +1,298 @@ +/* + BLAKE2 reference source code package - reference C implementations + Copyright 2012, Samuel Neves . You may use this under the + terms of the CC0, the OpenSSL Licence, or the Apache Public License 2.0, at + your option. The terms of these licenses can be found at: + - CC0 1.0 Universal : http://creativecommons.org/publicdomain/zero/1.0 + - OpenSSL license : https://www.openssl.org/source/license.html + - Apache 2.0 : http://www.apache.org/licenses/LICENSE-2.0 + + More information about the BLAKE2 hash function can be found at + https://blake2.net. + + Modified for hash-wasm by Dani Biró +*/ + +#define WITH_BUFFER +#include "hash-wasm.h" + +#define BLAKE2_PACKED(x) x __attribute__((packed)) + +enum blake2b_constant { + BLAKE2B_BLOCKBYTES = 128, + BLAKE2B_OUTBYTES = 64, + BLAKE2B_KEYBYTES = 64, + BLAKE2B_SALTBYTES = 16, + BLAKE2B_PERSONALBYTES = 16 +}; + +typedef struct blake2b_state__ { + uint64_t h[8]; + uint64_t t[2]; + uint64_t f[2]; + uint8_t buf[BLAKE2B_BLOCKBYTES]; + int buflen; + int outlen; + uint8_t last_node; +} blake2b_state; + +blake2b_state S[1]; + +BLAKE2_PACKED(struct blake2b_param__ { + uint8_t digest_length; /* 1 */ + uint8_t key_length; /* 2 */ + uint8_t fanout; /* 3 */ + uint8_t depth; /* 4 */ + uint32_t leaf_length; /* 8 */ + uint32_t node_offset; /* 12 */ + uint32_t xof_length; /* 16 */ + uint8_t node_depth; /* 17 */ + uint8_t inner_length; /* 18 */ + uint8_t reserved[14]; /* 32 */ + uint8_t salt[BLAKE2B_SALTBYTES]; /* 48 */ + uint8_t personal[BLAKE2B_PERSONALBYTES]; /* 64 */ +}); + +typedef struct blake2b_param__ blake2b_param; + +blake2b_param P[1]; + +static __inline__ uint64_t load64(const void *src) { + return *(uint64_t *)src; +} + +static __inline__ void store64(void *dst, uint64_t w) { + *(uint64_t *)dst = w; +} + +static __inline__ uint64_t rotr64(const uint64_t w, const unsigned c) { + return (w >> c) | (w << (64 - c)); +} + +static const uint64_t blake2b_IV[8] = { + 0x6a09e667f3bcc908ULL, 0xbb67ae8584caa73bULL, + 0x3c6ef372fe94f82bULL, 0xa54ff53a5f1d36f1ULL, + 0x510e527fade682d1ULL, 0x9b05688c2b3e6c1fULL, + 0x1f83d9abfb41bd6bULL, 0x5be0cd19137e2179ULL +}; + +static const uint8_t blake2b_sigma[12][16] = { + { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 }, + { 14, 10, 4, 8, 9, 15, 13, 6, 1, 12, 0, 2, 11, 7, 5, 3 }, + { 11, 8, 12, 0, 5, 2, 15, 13, 10, 14, 3, 6, 7, 1, 9, 4 }, + { 7, 9, 3, 1, 13, 12, 11, 14, 2, 6, 5, 10, 4, 0, 15, 8 }, + { 9, 0, 5, 7, 2, 4, 10, 15, 14, 1, 11, 12, 6, 8, 3, 13 }, + { 2, 12, 6, 10, 0, 11, 8, 3, 4, 13, 7, 5, 15, 14, 1, 9 }, + { 12, 5, 1, 15, 14, 13, 4, 10, 0, 7, 6, 3, 9, 2, 8, 11 }, + { 13, 11, 7, 14, 12, 1, 3, 9, 5, 0, 15, 4, 8, 6, 2, 10 }, + { 6, 15, 14, 9, 11, 3, 0, 8, 12, 2, 13, 7, 1, 4, 10, 5 }, + { 10, 2, 8, 4, 7, 6, 1, 5, 15, 11, 9, 14, 3, 12, 13 , 0 }, + { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 }, + { 14, 10, 4, 8, 9, 15, 13, 6, 1, 12, 0, 2, 11, 7, 5, 3 } +}; + +static __inline__ void blake2b_set_lastnode() { S->f[1] = (uint64_t)-1; } + +/* Some helper functions, not necessarily useful */ +static __inline__ int blake2b_is_lastblock() { return S->f[0] != 0; } + +static __inline__ void blake2b_set_lastblock() { + if (S->last_node) blake2b_set_lastnode(); + + S->f[0] = (uint64_t)-1; +} + +static __inline__ void blake2b_increment_counter(const uint64_t inc) { + S->t[0] += inc; + S->t[1] += (S->t[0] < inc); +} + +#define G(r, i, a, b, c, d) \ + do { \ + a = a + b + m[blake2b_sigma[r][2 * i + 0]]; \ + d = rotr64(d ^ a, 32); \ + c = c + d; \ + b = rotr64(b ^ c, 24); \ + a = a + b + m[blake2b_sigma[r][2 * i + 1]]; \ + d = rotr64(d ^ a, 16); \ + c = c + d; \ + b = rotr64(b ^ c, 63); \ + } while (0) + +static void round(uint32_t r, uint64_t m[16], uint64_t v[16]) { + G(r, 0, v[0], v[4], v[8], v[12]); + G(r, 1, v[1], v[5], v[9], v[13]); + G(r, 2, v[2], v[6], v[10], v[14]); + G(r, 3, v[3], v[7], v[11], v[15]); + G(r, 4, v[0], v[5], v[10], v[15]); + G(r, 5, v[1], v[6], v[11], v[12]); + G(r, 6, v[2], v[7], v[8], v[13]); + G(r, 7, v[3], v[4], v[9], v[14]); +}; + +static void blake2b_compress(const uint8_t block[BLAKE2B_BLOCKBYTES]) { + uint64_t m[16]; + uint64_t v[16]; + + #pragma clang loop unroll(full) + for (int i = 0; i < 16; ++i) { + m[i] = load64(block + i * sizeof(m[i])); + } + + #pragma clang loop unroll(full) + for (int i = 0; i < 8; ++i) { + v[i] = S->h[i]; + } + + v[8] = blake2b_IV[0]; + v[9] = blake2b_IV[1]; + v[10] = blake2b_IV[2]; + v[11] = blake2b_IV[3]; + v[12] = blake2b_IV[4] ^ S->t[0]; + v[13] = blake2b_IV[5] ^ S->t[1]; + v[14] = blake2b_IV[6] ^ S->f[0]; + v[15] = blake2b_IV[7] ^ S->f[1]; + + #pragma clang loop unroll(full) + for (int i = 0; i < 12; ++i) { + round(i, m, v); + } + + #pragma clang loop unroll(full) + for (int i = 0; i < 8; ++i) { + S->h[i] = S->h[i] ^ v[i] ^ v[i + 8]; + } +} + +#undef G + +void blake2b_update(const void *pin, int inlen) { + const unsigned char *in = (const unsigned char *)pin; + if (inlen > 0) { + int left = S->buflen; + int fill = BLAKE2B_BLOCKBYTES - left; + if (inlen > fill) { + S->buflen = 0; + /* Fill buffer */ + for (uint8_t i = 0; i < fill; i++) { + S->buf[left + i] = in[i]; + } + blake2b_increment_counter(BLAKE2B_BLOCKBYTES); + blake2b_compress(S->buf); /* Compress */ + in += fill; + inlen -= fill; + while (inlen > BLAKE2B_BLOCKBYTES) { + blake2b_increment_counter(BLAKE2B_BLOCKBYTES); + blake2b_compress(in); + in += BLAKE2B_BLOCKBYTES; + inlen -= BLAKE2B_BLOCKBYTES; + } + } + for (uint8_t i = 0; i < inlen; i++) { + S->buf[S->buflen + i] = in[i]; + } + S->buflen += inlen; + } +} + +WASM_EXPORT +void Hash_Final() { + int outlen = S->outlen; + uint8_t buffer[BLAKE2B_OUTBYTES] = {0}; + + if (blake2b_is_lastblock()) { + return; + } + + blake2b_increment_counter(S->buflen); + blake2b_set_lastblock(); + for (int i = 0; i < BLAKE2B_BLOCKBYTES - S->buflen; i++) { /* Padding */ + (S->buf + S->buflen)[i] = 0; + } + blake2b_compress(S->buf); + + for (int i = 0; i < 8; ++i) { + /* Output full hash to temp buffer */ + store64(buffer + sizeof(S->h[i]) * i, S->h[i]); + } + + for (uint8_t i = 0; i < S->outlen; i++) { + main_buffer[i] = buffer[i]; + } +} + +static void blake2b_init0() { + memset(S, 0, sizeof(blake2b_state)); + + for (int i = 0; i < 8; ++i) { + S->h[i] = blake2b_IV[i]; + } +} + +/* init xors IV with input parameter block */ +void blake2b_init_param() { + const uint8_t *p = (const uint8_t *)(P); + int i; + + blake2b_init0(); + + /* IV XOR ParamBlock */ + for (i = 0; i < 8; ++i) { + S->h[i] ^= load64(p + sizeof(S->h[i]) * i); + } + + S->outlen = P->digest_length; +} + +void blake2b_init_key(int outlen, const uint8_t *key, int keylen) { + P->digest_length = (uint8_t)outlen; + P->key_length = (uint8_t)keylen; + P->fanout = 1; + P->depth = 1; + // P->leaf_length = 0; + // P->node_offset = 0; + // P->xof_length = 0; + // P->node_depth = 0; + // P->inner_length = 0; + // memset(P->reserved, 0, sizeof(P->reserved)); + // memset(P->salt, 0, sizeof(P->salt)); + // memset(P->personal, 0, sizeof(P->personal)); + + blake2b_init_param(); + + if (keylen > 0) { + uint8_t block[BLAKE2B_BLOCKBYTES]; + memset128(block, 0); + for (uint8_t i = 0; i < keylen; i++) { + block[i] = key[i]; + } + blake2b_update(block, BLAKE2B_BLOCKBYTES); + } +} + +WASM_EXPORT +void Hash_Init(uint32_t bits) { + int outlen = bits & 0xFFFF; + int keylen = bits >> 16; + blake2b_init_key(outlen / 8, main_buffer, keylen); +} + +WASM_EXPORT +void Hash_Update(uint32_t size) { + blake2b_update(main_buffer, size); +} + +WASM_EXPORT +const uint32_t STATE_SIZE = sizeof(S); + +WASM_EXPORT +uint8_t* Hash_GetState() { + return (uint8_t*) S; +} + +WASM_EXPORT +void Hash_Calculate(uint32_t length, uint32_t initParam) { + Hash_Init(initParam); + Hash_Update(length); + Hash_Final(); +} diff --git a/frontend/node_modules/hash-wasm/src/blake2s.c b/frontend/node_modules/hash-wasm/src/blake2s.c new file mode 100644 index 0000000..26b3afe --- /dev/null +++ b/frontend/node_modules/hash-wasm/src/blake2s.c @@ -0,0 +1,284 @@ +/* + BLAKE2 reference source code package - reference C implementations + Copyright 2012, Samuel Neves . You may use this under the + terms of the CC0, the OpenSSL Licence, or the Apache Public License 2.0, at + your option. The terms of these licenses can be found at: + - CC0 1.0 Universal : http://creativecommons.org/publicdomain/zero/1.0 + - OpenSSL license : https://www.openssl.org/source/license.html + - Apache 2.0 : http://www.apache.org/licenses/LICENSE-2.0 + + More information about the BLAKE2 hash function can be found at + https://blake2.net. + + Modified for hash-wasm by Dani Biró +*/ + +#define WITH_BUFFER +#include "hash-wasm.h" + +#define BLAKE2_PACKED(x) x __attribute__((packed)) + +enum blake2s_constant { + BLAKE2S_BLOCKBYTES = 64, + BLAKE2S_OUTBYTES = 32, + BLAKE2S_KEYBYTES = 32, + BLAKE2S_SALTBYTES = 8, + BLAKE2S_PERSONALBYTES = 8 +}; + +typedef struct blake2s_state__ { + uint32_t h[8]; + uint32_t t[2]; + uint32_t f[2]; + uint8_t buf[BLAKE2S_BLOCKBYTES]; + int buflen; + int outlen; + uint8_t last_node; +} blake2s_state; + +blake2s_state S[1]; + +BLAKE2_PACKED(struct blake2s_param__ { + uint8_t digest_length; /* 1 */ + uint8_t key_length; /* 2 */ + uint8_t fanout; /* 3 */ + uint8_t depth; /* 4 */ + uint32_t leaf_length; /* 8 */ + uint32_t node_offset; /* 12 */ + uint16_t xof_length; /* 14 */ + uint8_t node_depth; /* 15 */ + uint8_t inner_length; /* 16 */ + uint8_t salt[BLAKE2S_SALTBYTES]; /* 24 */ + uint8_t personal[BLAKE2S_PERSONALBYTES]; /* 32 */ +}); + +typedef struct blake2s_param__ blake2s_param; + +blake2s_param P[1]; + +static __inline__ uint32_t load32(const void *src) { + return *(uint32_t *)src; +} + +static __inline__ void store32(void *dst, uint32_t w) { + *(uint32_t *)dst = w; +} + +static __inline__ uint64_t rotr32(const uint32_t w, const unsigned c) { + return (w >> c) | (w << (32 - c)); +} + +static const uint32_t blake2s_IV[8] = { + 0x6A09E667UL, 0xBB67AE85UL, 0x3C6EF372UL, 0xA54FF53AUL, + 0x510E527FUL, 0x9B05688CUL, 0x1F83D9ABUL, 0x5BE0CD19UL +}; + +static const uint8_t blake2s_sigma[10][16] = { + { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 } , + { 14, 10, 4, 8, 9, 15, 13, 6, 1, 12, 0, 2, 11, 7, 5, 3 } , + { 11, 8, 12, 0, 5, 2, 15, 13, 10, 14, 3, 6, 7, 1, 9, 4 } , + { 7, 9, 3, 1, 13, 12, 11, 14, 2, 6, 5, 10, 4, 0, 15, 8 } , + { 9, 0, 5, 7, 2, 4, 10, 15, 14, 1, 11, 12, 6, 8, 3, 13 } , + { 2, 12, 6, 10, 0, 11, 8, 3, 4, 13, 7, 5, 15, 14, 1, 9 } , + { 12, 5, 1, 15, 14, 13, 4, 10, 0, 7, 6, 3, 9, 2, 8, 11 } , + { 13, 11, 7, 14, 12, 1, 3, 9, 5, 0, 15, 4, 8, 6, 2, 10 } , + { 6, 15, 14, 9, 11, 3, 0, 8, 12, 2, 13, 7, 1, 4, 10, 5 } , + { 10, 2, 8, 4, 7, 6, 1, 5, 15, 11, 9, 14, 3, 12, 13 , 0 } +}; + +static __inline__ void blake2s_set_lastnode() { S->f[1] = (uint32_t)-1; } + +/* Some helper functions, not necessarily useful */ +static __inline__ int blake2s_is_lastblock() { return S->f[0] != 0; } + +static __inline__ void blake2s_set_lastblock() { + if (S->last_node) blake2s_set_lastnode(); + + S->f[0] = (uint32_t)-1; +} + +static __inline__ void blake2s_increment_counter(const uint32_t inc) { + S->t[0] += inc; + S->t[1] += (S->t[0] < inc); +} + +#define G(r, i, a, b, c, d) \ + do { \ + a = a + b + m[blake2s_sigma[r][2 * i + 0]]; \ + d = rotr32(d ^ a, 16); \ + c = c + d; \ + b = rotr32(b ^ c, 12); \ + a = a + b + m[blake2s_sigma[r][2 * i + 1]]; \ + d = rotr32(d ^ a, 8); \ + c = c + d; \ + b = rotr32(b ^ c, 7); \ + } while (0) + +static void round(uint32_t r, uint32_t m[16], uint32_t v[16]) { + G(r, 0, v[0], v[4], v[8], v[12]); + G(r, 1, v[1], v[5], v[9], v[13]); + G(r, 2, v[2], v[6], v[10], v[14]); + G(r, 3, v[3], v[7], v[11], v[15]); + G(r, 4, v[0], v[5], v[10], v[15]); + G(r, 5, v[1], v[6], v[11], v[12]); + G(r, 6, v[2], v[7], v[8], v[13]); + G(r, 7, v[3], v[4], v[9], v[14]); +} + +static void blake2s_compress(const uint8_t block[BLAKE2S_BLOCKBYTES]) { + uint32_t m[16]; + uint32_t v[16]; + + memcpy64(m, block); + + memcpy32(v, S->h); + + uint64_t* v64 = (uint64_t*)v; + uint64_t* blake2s_IV64 = (uint64_t*)blake2s_IV; + uint64_t* st64 = (uint64_t*)S->t; + uint64_t* sf64 = (uint64_t*)S->f; + v64[4] = blake2s_IV64[0]; + v64[5] = blake2s_IV64[1]; + v64[6] = blake2s_IV64[2] ^ st64[0]; + v64[7] = blake2s_IV64[3] ^ sf64[0]; + + #pragma clang loop unroll(full) + for (int i = 0; i < 10; ++i) { + round(i, m, v); + } + + uint64_t* sh64 = (uint64_t*)S->h; + #pragma clang loop unroll(full) + for (int i = 0; i < 4; ++i) { + sh64[i] = sh64[i] ^ v64[i] ^ v64[i + 4]; + } +} + +#undef G + +void blake2s_update(const void *pin, int inlen) { + const unsigned char *in = (const unsigned char *)pin; + if (inlen > 0) { + int left = S->buflen; + int fill = BLAKE2S_BLOCKBYTES - left; + if (inlen > fill) { + S->buflen = 0; + /* Fill buffer */ + memcpy(&S->buf[left], in, fill); + blake2s_increment_counter(BLAKE2S_BLOCKBYTES); + blake2s_compress(S->buf); /* Compress */ + in += fill; + inlen -= fill; + while (inlen > BLAKE2S_BLOCKBYTES) { + blake2s_increment_counter(BLAKE2S_BLOCKBYTES); + blake2s_compress(in); + in += BLAKE2S_BLOCKBYTES; + inlen -= BLAKE2S_BLOCKBYTES; + } + } + memcpy(&S->buf[S->buflen], in, inlen); + S->buflen += inlen; + } +} + +WASM_EXPORT +void Hash_Final() { + int outlen = S->outlen; + uint8_t buffer[BLAKE2S_OUTBYTES] = {0}; + + if (blake2s_is_lastblock()) { + return; + } + + blake2s_increment_counter(S->buflen); + blake2s_set_lastblock(); + for (int i = 0; i < BLAKE2S_BLOCKBYTES - S->buflen; i++) { /* Padding */ + (S->buf + S->buflen)[i] = 0; + } + blake2s_compress(S->buf); + + for (int i = 0; i < 8; ++i) { + /* Output full hash to temp buffer */ + store32(buffer + sizeof(S->h[i]) * i, S->h[i]); + } + + for (uint8_t i = 0; i < S->outlen; i++) { + main_buffer[i] = buffer[i]; + } +} + +static void blake2s_init0() { + for (int i = 0; i < sizeof(blake2s_state); i++) { + ((uint8_t*)S)[i] = 0; + } + + for (int i = 0; i < 8; ++i) { + S->h[i] = blake2s_IV[i]; + } +} + +/* init xors IV with input parameter block */ +void blake2s_init_param() { + const uint8_t *p = (const uint8_t *)(P); + + blake2s_init0(); + + /* IV XOR ParamBlock */ + for (int i = 0; i < 8; ++i) { + S->h[i] ^= load32(p + sizeof(S->h[i]) * i); + } + + S->outlen = P->digest_length; +} + +void blake2s_init_key(int outlen, const uint8_t *key, int keylen) { + P->digest_length = (uint8_t)outlen; + P->key_length = (uint8_t)keylen; + P->fanout = 1; + P->depth = 1; + // P->leaf_length = 0; + // P->node_offset = 0; + // P->xof_length = 0; + // P->node_depth = 0; + // P->inner_length = 0; + // memset(P->reserved, 0, sizeof(P->reserved)); + // memset(P->salt, 0, sizeof(P->salt)); + // memset(P->personal, 0, sizeof(P->personal)); + + blake2s_init_param(); + + if (keylen > 0) { + uint8_t block[BLAKE2S_BLOCKBYTES] = { 0 }; + for (uint8_t i = 0; i < keylen; i++) { + block[i] = key[i]; + } + blake2s_update(block, BLAKE2S_BLOCKBYTES); + } +} + +WASM_EXPORT +void Hash_Init(uint32_t bits) { + int outlen = bits & 0xFFFF; + int keylen = bits >> 16; + blake2s_init_key(outlen / 8, main_buffer, keylen); +} + +WASM_EXPORT +void Hash_Update(uint32_t size) { + blake2s_update(main_buffer, size); +} + +WASM_EXPORT +const uint32_t STATE_SIZE = sizeof(S); + +WASM_EXPORT +uint8_t* Hash_GetState() { + return (uint8_t*) S; +} + +WASM_EXPORT +void Hash_Calculate(uint32_t length, uint32_t initParam) { + Hash_Init(initParam); + Hash_Update(length); + Hash_Final(); +} diff --git a/frontend/node_modules/hash-wasm/src/blake3.c b/frontend/node_modules/hash-wasm/src/blake3.c new file mode 100644 index 0000000..b234a87 --- /dev/null +++ b/frontend/node_modules/hash-wasm/src/blake3.c @@ -0,0 +1,867 @@ +/* + BLAKE3 - reference C implementation + https://github.com/BLAKE3-team/BLAKE3 + This work is released into the public domain with CC0 1.0. Alternatively, it + is licensed under the Apache License 2.0. + + Modified for hash-wasm by Dani Biró +*/ + +#define WITH_BUFFER +#include +#include + +#include "hash-wasm.h" + +#define BLAKE3_VERSION_STRING "0.3.7" +#define BLAKE3_KEY_LEN 32 +#define BLAKE3_OUT_LEN 32 +#define BLAKE3_BLOCK_LEN 64 +#define BLAKE3_CHUNK_LEN 1024 +#define BLAKE3_MAX_DEPTH 54 +#define MAX_SIMD_DEGREE 1 +#define MAX_SIMD_DEGREE_OR_2 (MAX_SIMD_DEGREE > 2 ? MAX_SIMD_DEGREE : 2) +#define bool uint8_t +#define true 1 +#define false 0 + +enum blake3_flags { + CHUNK_START = 1 << 0, + CHUNK_END = 1 << 1, + PARENT = 1 << 2, + ROOT = 1 << 3, + KEYED_HASH = 1 << 4, + DERIVE_KEY_CONTEXT = 1 << 5, + DERIVE_KEY_MATERIAL = 1 << 6, +}; + +static const uint32_t IV[8] = + { + 0x6A09E667UL, 0xBB67AE85UL, 0x3C6EF372UL, + 0xA54FF53AUL, 0x510E527FUL, 0x9B05688CUL, + 0x1F83D9ABUL, 0x5BE0CD19UL + }; + +static const uint8_t MSG_SCHEDULE[7][16] = { + {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, + {2, 6, 3, 10, 7, 0, 4, 13, 1, 11, 12, 5, 9, 14, 15, 8}, + {3, 4, 10, 12, 13, 2, 7, 14, 6, 5, 9, 0, 11, 15, 8, 1}, + {10, 7, 12, 9, 14, 3, 13, 15, 4, 0, 11, 2, 5, 8, 1, 6}, + {12, 13, 9, 11, 15, 10, 14, 8, 7, 2, 5, 3, 0, 1, 6, 4}, + {9, 14, 11, 5, 8, 12, 15, 1, 13, 3, 0, 10, 2, 6, 4, 7}, + {11, 15, 5, 0, 1, 9, 8, 6, 14, 10, 2, 12, 3, 4, 7, 13}, +}; + +size_t blake3_simd_degree(void) { return 1; } + +// This struct is a private implementation detail. It has to be here because +// it's part of blake3_hasher below. +typedef struct { + uint32_t cv[8]; + uint64_t chunk_counter; + uint8_t buf[BLAKE3_BLOCK_LEN]; + uint8_t buf_len; + uint8_t blocks_compressed; + uint8_t flags; +} blake3_chunk_state; + +typedef struct { + uint32_t key[8]; + blake3_chunk_state chunk; + uint8_t cv_stack_len; + // The stack size is MAX_DEPTH + 1 because we do lazy merging. For example, + // with 7 chunks, we have 3 entries in the stack. Adding an 8th chunk + // requires a 4th entry, rather than merging everything down to 1, because we + // don't know whether more input is coming. This is different from how the + // reference implementation does things. + uint8_t cv_stack[(BLAKE3_MAX_DEPTH + 1) * BLAKE3_OUT_LEN]; +} blake3_hasher; + +/* Find index of the highest set bit */ +/* x is assumed to be nonzero. */ +static unsigned int highest_one(uint64_t x) { + return 63 ^ __builtin_clzll(x); +} + +// Count the number of 1 bits. +static __inline__ unsigned int popcnt(uint64_t x) { + return __builtin_popcountll(x); +} + +static __inline__ uint64_t round_down_to_power_of_2(uint64_t x) { + return 1ULL << highest_one(x | 1); +} + +static __inline__ uint32_t counter_low(uint64_t counter) { + return (uint32_t)counter; +} + +static __inline__ uint32_t counter_high(uint64_t counter) { + return (uint32_t)(counter >> 32); +} + +static __inline__ uint32_t load32(const void *src) { + const uint32_t *p = (const uint32_t *)src; + return p[0]; +} + +static __inline__ uint32_t rotr32(uint32_t w, uint32_t c) { + return (w >> c) | (w << (32 - c)); +} + +static __inline__ void g( + uint32_t *state, size_t a, size_t b, size_t c, size_t d, uint32_t x, uint32_t y +) { + state[a] = state[a] + state[b] + x; + state[d] = rotr32(state[d] ^ state[a], 16); + state[c] = state[c] + state[d]; + state[b] = rotr32(state[b] ^ state[c], 12); + state[a] = state[a] + state[b] + y; + state[d] = rotr32(state[d] ^ state[a], 8); + state[c] = state[c] + state[d]; + state[b] = rotr32(state[b] ^ state[c], 7); +} + +static __inline__ void round_fn( + uint32_t state[16], const uint32_t *msg, size_t round +) { + // Select the message schedule based on the round. + const uint8_t *schedule = MSG_SCHEDULE[round]; + + // Mix the columns. + g(state, 0, 4, 8, 12, msg[schedule[0]], msg[schedule[1]]); + g(state, 1, 5, 9, 13, msg[schedule[2]], msg[schedule[3]]); + g(state, 2, 6, 10, 14, msg[schedule[4]], msg[schedule[5]]); + g(state, 3, 7, 11, 15, msg[schedule[6]], msg[schedule[7]]); + + // Mix the rows. + g(state, 0, 5, 10, 15, msg[schedule[8]], msg[schedule[9]]); + g(state, 1, 6, 11, 12, msg[schedule[10]], msg[schedule[11]]); + g(state, 2, 7, 8, 13, msg[schedule[12]], msg[schedule[13]]); + g(state, 3, 4, 9, 14, msg[schedule[14]], msg[schedule[15]]); +} + +static __inline__ void load_key_words( + const uint8_t key[BLAKE3_KEY_LEN], uint32_t key_words[8] +) { + memcpy32(key_words, key); +} + +static __inline__ void compress_pre( + uint32_t state[16], const uint32_t cv[8], const uint8_t block[BLAKE3_BLOCK_LEN], + uint8_t block_len, uint64_t counter, uint8_t flags +) { + uint32_t block_words[16]; + + memcpy64(block_words, block); + memcpy32(state, cv); + memcpy16(&state[8], IV); + + state[12] = counter_low(counter); + state[13] = counter_high(counter); + state[14] = (uint32_t)block_len; + state[15] = (uint32_t)flags; + + #pragma clang loop unroll(full) + for (int i = 0; i < 7; i++) { + // Select the message schedule based on the round. + round_fn(state, &block_words[0], i); + } +} + +static __inline__ void store32(void *dst, uint32_t w) { + uint32_t *p = (uint32_t *)dst; + p[0] = w; +} + +static __inline__ void store_cv_words(uint8_t bytes_out[32], uint32_t cv_words[8]) { + memcpy32(bytes_out, cv_words); +} + +void blake3_compress_xof_portable( + const uint32_t cv[8], const uint8_t block[BLAKE3_BLOCK_LEN], uint8_t block_len, + uint64_t counter, uint8_t flags, uint8_t out[64] +) { + uint32_t state[16]; + compress_pre(state, cv, block, block_len, counter, flags); + + uint64_t *state64 = (uint64_t *)state; + uint64_t *out64 = (uint64_t *)out; + uint64_t *cv64 = (uint64_t *)cv; + + out64[0] = state64[0] ^ state64[4]; + out64[1] = state64[1] ^ state64[5]; + out64[2] = state64[2] ^ state64[6]; + out64[3] = state64[3] ^ state64[7]; + out64[4] = state64[4] ^ cv64[0]; + out64[5] = state64[5] ^ cv64[1]; + out64[6] = state64[6] ^ cv64[2]; + out64[7] = state64[7] ^ cv64[3]; +} + +void blake3_compress_in_place_portable( + uint32_t cv[8], const uint8_t block[BLAKE3_BLOCK_LEN], uint8_t block_len, + uint64_t counter, uint8_t flags +) { + uint32_t state[16]; + compress_pre(state, cv, block, block_len, counter, flags); + + uint64_t *state64 = (uint64_t *)state; + uint64_t *cv64 = (uint64_t *)cv; + cv64[0] = state64[0] ^ state64[4]; + cv64[1] = state64[1] ^ state64[5]; + cv64[2] = state64[2] ^ state64[6]; + cv64[3] = state64[3] ^ state64[7]; +} + +static __inline__ void chunk_state_init(blake3_chunk_state *self, const uint32_t key[8], uint8_t flags) { + memcpy32(self->cv, key); + self->chunk_counter = 0; + memset64(self->buf, 0); + self->buf_len = 0; + self->blocks_compressed = 0; + self->flags = flags; +} + +static __inline__ void chunk_state_reset( + blake3_chunk_state *self, const uint32_t key[8], uint64_t chunk_counter +) { + memcpy32(self->cv, key); + self->chunk_counter = chunk_counter; + self->blocks_compressed = 0; + memset64(self->buf, 0); + self->buf_len = 0; +} + +static __inline__ size_t chunk_state_len(const blake3_chunk_state *self) { + return (BLAKE3_BLOCK_LEN * (size_t)self->blocks_compressed) + ((size_t)self->buf_len); +} + +static __inline__ size_t chunk_state_fill_buf( + blake3_chunk_state *self, const uint8_t *input, size_t input_len +) { + size_t take = BLAKE3_BLOCK_LEN - ((size_t)self->buf_len); + if (take > input_len) { + take = input_len; + } + uint8_t *dest = self->buf + ((size_t)self->buf_len); + for (size_t i = 0; i < take; i++) { + dest[i] = input[i]; + } + self->buf_len += (uint8_t)take; + return take; +} + +static __inline__ uint8_t chunk_state_maybe_start_flag(const blake3_chunk_state *self) { + if (self->blocks_compressed == 0) { + return CHUNK_START; + } else { + return 0; + } +} + +typedef struct { + uint32_t input_cv[8]; + uint64_t counter; + uint8_t block[BLAKE3_BLOCK_LEN]; + uint8_t block_len; + uint8_t flags; +} output_t; + +static __inline__ output_t make_output( + const uint32_t input_cv[8], const uint8_t block[BLAKE3_BLOCK_LEN], + uint8_t block_len, uint64_t counter, uint8_t flags +) { + output_t ret; + memcpy32(ret.input_cv, input_cv); + memcpy64(ret.block, block); + + ret.block_len = block_len; + ret.counter = counter; + ret.flags = flags; + return ret; +} + +// Chaining values within a given chunk (specifically the compress_in_place +// interface) are represented as words. This avoids unnecessary bytes<->words +// conversion overhead in the portable implementation. However, the hash_many +// interface handles both user input and parent node blocks, so it accepts +// bytes. For that reason, chaining values in the CV stack are represented as +// bytes. +static __inline__ void output_chaining_value(const output_t *self, uint8_t cv[32]) { + uint32_t cv_words[8]; + memcpy32(cv_words, self->input_cv); + blake3_compress_in_place_portable( + cv_words, self->block, self->block_len, self->counter, self->flags + ); + store_cv_words(cv, cv_words); +} + +static __inline__ void output_root_bytes( + const output_t *self, uint64_t seek, uint8_t *out, size_t out_len +) { + uint64_t output_block_counter = seek / 64; + size_t offset_within_block = seek % 64; + uint8_t wide_buf[64]; + while (out_len > 0) { + blake3_compress_xof_portable( + self->input_cv, self->block, self->block_len, output_block_counter, self->flags | ROOT, wide_buf + ); + size_t available_bytes = 64 - offset_within_block; + size_t memcpy_len; + if (out_len > available_bytes) { + memcpy_len = available_bytes; + } else { + memcpy_len = out_len; + } + memcpy(out, wide_buf + offset_within_block, memcpy_len); + out += memcpy_len; + out_len -= memcpy_len; + output_block_counter += 1; + offset_within_block = 0; + } +} + +static __inline__ void chunk_state_update( + blake3_chunk_state *self, const uint8_t *input, size_t input_len +) { + if (self->buf_len > 0) { + size_t take = chunk_state_fill_buf(self, input, input_len); + input += take; + input_len -= take; + if (input_len > 0) { + blake3_compress_in_place_portable( + self->cv, self->buf, BLAKE3_BLOCK_LEN, self->chunk_counter, + self->flags | chunk_state_maybe_start_flag(self) + ); + self->blocks_compressed += 1; + self->buf_len = 0; + memset64(self->buf, 0); + } + } + + while (input_len > BLAKE3_BLOCK_LEN) { + blake3_compress_in_place_portable( + self->cv, input, BLAKE3_BLOCK_LEN, self->chunk_counter, + self->flags | chunk_state_maybe_start_flag(self) + ); + self->blocks_compressed += 1; + input += BLAKE3_BLOCK_LEN; + input_len -= BLAKE3_BLOCK_LEN; + } + + size_t take = chunk_state_fill_buf(self, input, input_len); + input += take; + input_len -= take; +} + +static __inline__ output_t chunk_state_output(const blake3_chunk_state *self) { + uint8_t block_flags = + self->flags | chunk_state_maybe_start_flag(self) | CHUNK_END; + + return make_output(self->cv, self->buf, self->buf_len, self->chunk_counter, block_flags); +} + +static __inline__ output_t parent_output( + const uint8_t block[BLAKE3_BLOCK_LEN], const uint32_t key[8], uint8_t flags +) { + return make_output(key, block, BLAKE3_BLOCK_LEN, 0, flags | PARENT); +} + +// Given some input larger than one chunk, return the number of bytes that +// should go in the left subtree. This is the largest power-of-2 number of +// chunks that leaves at least 1 byte for the right subtree. +static __inline__ size_t left_len(size_t content_len) { + // Subtract 1 to reserve at least one byte for the right side. content_len + // should always be greater than BLAKE3_CHUNK_LEN. + size_t full_chunks = (content_len - 1) / BLAKE3_CHUNK_LEN; + return round_down_to_power_of_2(full_chunks) * BLAKE3_CHUNK_LEN; +} + +static __inline__ void hash_one_portable( + const uint8_t *input, size_t blocks, const uint32_t key[8], uint64_t counter, + uint8_t flags, uint8_t flags_start, uint8_t flags_end, uint8_t out[BLAKE3_OUT_LEN] +) { + uint32_t cv[8]; + memcpy32(cv, key); + uint8_t block_flags = flags | flags_start; + while (blocks > 0) { + if (blocks == 1) { + block_flags |= flags_end; + } + blake3_compress_in_place_portable(cv, input, BLAKE3_BLOCK_LEN, counter, block_flags); + input = &input[BLAKE3_BLOCK_LEN]; + blocks -= 1; + block_flags = flags; + } + store_cv_words(out, cv); +} + +void blake3_hash_many_portable( + const uint8_t *const *inputs, size_t num_inputs, size_t blocks, const uint32_t key[8], + uint64_t counter, bool increment_counter, uint8_t flags, uint8_t flags_start, + uint8_t flags_end, uint8_t *out +) { + while (num_inputs > 0) { + hash_one_portable(inputs[0], blocks, key, counter, flags, flags_start, flags_end, out); + if (increment_counter) { + counter += 1; + } + inputs += 1; + num_inputs -= 1; + out = &out[BLAKE3_OUT_LEN]; + } +} + +// Use SIMD parallelism to hash up to MAX_SIMD_DEGREE chunks at the same time +// on a single thread. Write out the chunk chaining values and return the +// number of chunks hashed. These chunks are never the root and never empty; +// those cases use a different codepath. +static __inline__ size_t compress_chunks_parallel( + const uint8_t *input, size_t input_len, const uint32_t key[8], + uint64_t chunk_counter, uint8_t flags, uint8_t *out +) { + const uint8_t *chunks_array[MAX_SIMD_DEGREE]; + size_t input_position = 0; + size_t chunks_array_len = 0; + while (input_len - input_position >= BLAKE3_CHUNK_LEN) { + chunks_array[chunks_array_len] = &input[input_position]; + input_position += BLAKE3_CHUNK_LEN; + chunks_array_len += 1; + } + + blake3_hash_many_portable( + chunks_array, chunks_array_len, BLAKE3_CHUNK_LEN / BLAKE3_BLOCK_LEN, key, + chunk_counter, true, flags, CHUNK_START, CHUNK_END, out + ); + + // Hash the remaining partial chunk, if there is one. Note that the empty + // chunk (meaning the empty message) is a different codepath. + if (input_len > input_position) { + uint64_t counter = chunk_counter + (uint64_t)chunks_array_len; + blake3_chunk_state chunk_state; + chunk_state_init(&chunk_state, key, flags); + chunk_state.chunk_counter = counter; + chunk_state_update( + &chunk_state, &input[input_position], input_len - input_position + ); + output_t output = chunk_state_output(&chunk_state); + output_chaining_value(&output, &out[chunks_array_len * BLAKE3_OUT_LEN]); + return chunks_array_len + 1; + } else { + return chunks_array_len; + } +} + +// Use SIMD parallelism to hash up to MAX_SIMD_DEGREE parents at the same time +// on a single thread. Write out the parent chaining values and return the +// number of parents hashed. (If there's an odd input chaining value left over, +// return it as an additional output.) These parents are never the root and +// never empty; those cases use a different codepath. +static __inline__ size_t compress_parents_parallel( + const uint8_t *child_chaining_values, size_t num_chaining_values, + const uint32_t key[8], uint8_t flags, uint8_t *out +) { + const uint8_t *parents_array[MAX_SIMD_DEGREE_OR_2]; + size_t parents_array_len = 0; + + while (num_chaining_values - (2 * parents_array_len) >= 2) { + parents_array[parents_array_len] = + &child_chaining_values[2 * parents_array_len * BLAKE3_OUT_LEN]; + parents_array_len += 1; + } + + blake3_hash_many_portable(parents_array, parents_array_len, 1, key, + 0, // Parents always use counter 0. + false, flags | PARENT, + 0, // Parents have no start flags. + 0, // Parents have no end flags. + out); + + // If there's an odd child left over, it becomes an output. + if (num_chaining_values > 2 * parents_array_len) { + memcpy32( + &out[parents_array_len * BLAKE3_OUT_LEN], + &child_chaining_values[2 * parents_array_len * BLAKE3_OUT_LEN] + ); + return parents_array_len + 1; + } else { + return parents_array_len; + } +} + +// The wide helper function returns (writes out) an array of chaining values +// and returns the length of that array. The number of chaining values returned +// is the dyanmically detected SIMD degree, at most MAX_SIMD_DEGREE. Or fewer, +// if the input is shorter than that many chunks. The reason for maintaining a +// wide array of chaining values going back up the tree, is to allow the +// implementation to hash as many parents in parallel as possible. +// +// As a special case when the SIMD degree is 1, this function will still return +// at least 2 outputs. This guarantees that this function doesn't perform the +// root compression. (If it did, it would use the wrong flags, and also we +// wouldn't be able to implement exendable ouput.) Note that this function is +// not used when the whole input is only 1 chunk long; that's a different +// codepath. +// +// Why not just have the caller split the input on the first update(), instead +// of implementing this special rule? Because we don't want to limit SIMD or +// multi-threading parallelism for that update(). +static size_t blake3_compress_subtree_wide( + const uint8_t *input, size_t input_len, const uint32_t key[8], + uint64_t chunk_counter, uint8_t flags, uint8_t *out +) { + // Note that the single chunk case does *not* bump the SIMD degree up to 2 + // when it is 1. If this implementation adds multi-threading in the future, + // this gives us the option of multi-threading even the 2-chunk case, which + // can help performance on smaller platforms. + if (input_len <= blake3_simd_degree() * BLAKE3_CHUNK_LEN) { + return compress_chunks_parallel(input, input_len, key, chunk_counter, flags, out); + } + + // With more than simd_degree chunks, we need to recurse. Start by dividing + // the input into left and right subtrees. (Note that this is only optimal + // as long as the SIMD degree is a power of 2. If we ever get a SIMD degree + // of 3 or something, we'll need a more complicated strategy.) + size_t left_input_len = left_len(input_len); + size_t right_input_len = input_len - left_input_len; + const uint8_t *right_input = &input[left_input_len]; + + uint64_t right_chunk_counter = + chunk_counter + (uint64_t)(left_input_len / BLAKE3_CHUNK_LEN); + + // Make space for the child outputs. Here we use MAX_SIMD_DEGREE_OR_2 to + // account for the special case of returning 2 outputs when the SIMD degree + // is 1. + uint8_t cv_array[2 * MAX_SIMD_DEGREE_OR_2 * BLAKE3_OUT_LEN]; + size_t degree = blake3_simd_degree(); + if (left_input_len > BLAKE3_CHUNK_LEN && degree == 1) { + // The special case: We always use a degree of at least two, to make + // sure there are two outputs. Except, as noted above, at the chunk + // level, where we allow degree=1. (Note that the 1-chunk-input case is + // a different codepath.) + degree = 2; + } + + uint8_t *right_cvs = &cv_array[degree * BLAKE3_OUT_LEN]; + + // Recurse! If this implementation adds multi-threading support in the + // future, this is where it will go. + size_t left_n = blake3_compress_subtree_wide(input, left_input_len, key, chunk_counter, flags, cv_array); + size_t right_n = blake3_compress_subtree_wide(right_input, right_input_len, key, right_chunk_counter, flags, right_cvs); + + // The special case again. If simd_degree=1, then we'll have left_n=1 and + // right_n=1. Rather than compressing them into a single output, return + // them directly, to make sure we always have at least two outputs. + if (left_n == 1) { + memcpy64(out, cv_array); + return 2; + } + + // Otherwise, do one layer of parent node compression. + size_t num_chaining_values = left_n + right_n; + return compress_parents_parallel(cv_array, num_chaining_values, key, flags, out); +} + +// Hash a subtree with compress_subtree_wide(), and then condense the resulting +// list of chaining values down to a single parent node. Don't compress that +// last parent node, however. Instead, return its message bytes (the +// concatenated chaining values of its children). This is necessary when the +// first call to update() supplies a complete subtree, because the topmost +// parent node of that subtree could end up being the root. It's also necessary +// for extended output in the general case. +// +// As with compress_subtree_wide(), this function is not used on inputs of 1 +// chunk or less. That's a different codepath. +static __inline__ void compress_subtree_to_parent_node( + const uint8_t *input, size_t input_len, const uint32_t key[8], + uint64_t chunk_counter, uint8_t flags, uint8_t out[2 * BLAKE3_OUT_LEN] +) { + uint8_t cv_array[MAX_SIMD_DEGREE_OR_2 * BLAKE3_OUT_LEN]; + size_t num_cvs = blake3_compress_subtree_wide(input, input_len, key, chunk_counter, flags, cv_array); + + // If MAX_SIMD_DEGREE is greater than 2 and there's enough input, + // compress_subtree_wide() returns more than 2 chaining values. Condense + // them into 2 by forming parent nodes repeatedly. + uint8_t out_array[MAX_SIMD_DEGREE_OR_2 * BLAKE3_OUT_LEN / 2]; + while (num_cvs > 2) { + num_cvs = + compress_parents_parallel(cv_array, num_cvs, key, flags, out_array); + if (num_cvs > 0) { + memcpy32(cv_array, out_array); + } + } + memcpy64(out, cv_array); +} + +static __inline__ void hasher_init_base(blake3_hasher *self, const uint32_t key[8], uint8_t flags) { + memcpy32(self->key, key); + chunk_state_init(&self->chunk, key, flags); + self->cv_stack_len = 0; +} + +void blake3_hasher_init(blake3_hasher *self) { + hasher_init_base(self, IV, 0); +} + +void blake3_hasher_init_keyed(blake3_hasher *self, const uint8_t key[BLAKE3_KEY_LEN]) { + uint32_t key_words[8]; + load_key_words(key, key_words); + hasher_init_base(self, key_words, KEYED_HASH); +} + +// As described in hasher_push_cv() below, we do "lazy merging", delaying +// merges until right before the next CV is about to be added. This is +// different from the reference implementation. Another difference is that we +// aren't always merging 1 chunk at a time. Instead, each CV might represent +// any power-of-two number of chunks, as long as the smaller-above-larger stack +// order is maintained. Instead of the "count the trailing 0-bits" algorithm +// described in the spec, we use a "count the total number of 1-bits" variant +// that doesn't require us to retain the subtree size of the CV on top of the +// stack. The principle is the same: each CV that should remain in the stack is +// represented by a 1-bit in the total number of chunks (or bytes) so far. +static __inline__ void hasher_merge_cv_stack(blake3_hasher *self, uint64_t total_len) { + size_t post_merge_stack_len = (size_t)popcnt(total_len); + while (self->cv_stack_len > post_merge_stack_len) { + uint8_t *parent_node = + &self->cv_stack[(self->cv_stack_len - 2) * BLAKE3_OUT_LEN]; + output_t output = parent_output(parent_node, self->key, self->chunk.flags); + output_chaining_value(&output, parent_node); + self->cv_stack_len -= 1; + } +} + +// In reference_impl.rs, we merge the new CV with existing CVs from the stack +// before pushing it. We can do that because we know more input is coming, so +// we know none of the merges are root. +// +// This setting is different. We want to feed as much input as possible to +// compress_subtree_wide(), without setting aside anything for the chunk_state. +// If the user gives us 64 KiB, we want to parallelize over all 64 KiB at once +// as a single subtree, if at all possible. +// +// This leads to two problems: +// 1) This 64 KiB input might be the only call that ever gets made to update. +// In this case, the root node of the 64 KiB subtree would be the root node +// of the whole tree, and it would need to be ROOT finalized. We can't +// compress it until we know. +// 2) This 64 KiB input might complete a larger tree, whose root node is +// similarly going to be the the root of the whole tree. For example, maybe +// we have 196 KiB (that is, 128 + 64) hashed so far. We can't compress the +// node at the root of the 256 KiB subtree until we know how to finalize it. +// +// The second problem is solved with "lazy merging". That is, when we're about +// to add a CV to the stack, we don't merge it with anything first, as the +// reference impl does. Instead we do merges using the *previous* CV that was +// added, which is sitting on top of the stack, and we put the new CV +// (unmerged) on top of the stack afterwards. This guarantees that we never +// merge the root node until finalize(). +// +// Solving the first problem requires an additional tool, +// compress_subtree_to_parent_node(). That function always returns the top +// *two* chaining values of the subtree it's compressing. We then do lazy +// merging with each of them separately, so that the second CV will always +// remain unmerged. (That also helps us support extendable output when we're +// hashing an input all-at-once.) +static __inline__ void hasher_push_cv( + blake3_hasher *self, uint8_t new_cv[BLAKE3_OUT_LEN], uint64_t chunk_counter +) { + hasher_merge_cv_stack(self, chunk_counter); + memcpy32(&self->cv_stack[self->cv_stack_len * BLAKE3_OUT_LEN], new_cv); + self->cv_stack_len += 1; +} + +void blake3_hasher_update(blake3_hasher *self, const void *input, size_t input_len) { + // Explicitly checking for zero avoids causing UB by passing a null pointer + // to memcpy. This comes up in practice with things like: + // std::vector v; + // blake3_hasher_update(&hasher, v.data(), v.size()); + if (input_len == 0) { + return; + } + + const uint8_t *input_bytes = (const uint8_t *)input; + + // If we have some partial chunk bytes in the internal chunk_state, we need + // to finish that chunk first. + if (chunk_state_len(&self->chunk) > 0) { + size_t take = BLAKE3_CHUNK_LEN - chunk_state_len(&self->chunk); + if (take > input_len) { + take = input_len; + } + chunk_state_update(&self->chunk, input_bytes, take); + input_bytes += take; + input_len -= take; + // If we've filled the current chunk and there's more coming, finalize this + // chunk and proceed. In this case we know it's not the root. + if (input_len > 0) { + output_t output = chunk_state_output(&self->chunk); + uint8_t chunk_cv[32]; + output_chaining_value(&output, chunk_cv); + hasher_push_cv(self, chunk_cv, self->chunk.chunk_counter); + chunk_state_reset(&self->chunk, self->key, self->chunk.chunk_counter + 1); + } else { + return; + } + } + + // Now the chunk_state is clear, and we have more input. If there's more than + // a single chunk (so, definitely not the root chunk), hash the largest whole + // subtree we can, with the full benefits of SIMD (and maybe in the future, + // multi-threading) parallelism. Two restrictions: + // - The subtree has to be a power-of-2 number of chunks. Only subtrees along + // the right edge can be incomplete, and we don't know where the right edge + // is going to be until we get to finalize(). + // - The subtree must evenly divide the total number of chunks up until this + // point (if total is not 0). If the current incomplete subtree is only + // waiting for 1 more chunk, we can't hash a subtree of 4 chunks. We have + // to complete the current subtree first. + // Because we might need to break up the input to form powers of 2, or to + // evenly divide what we already have, this part runs in a loop. + while (input_len > BLAKE3_CHUNK_LEN) { + size_t subtree_len = round_down_to_power_of_2(input_len); + uint64_t count_so_far = self->chunk.chunk_counter * BLAKE3_CHUNK_LEN; + // Shrink the subtree_len until it evenly divides the count so far. We know + // that subtree_len itself is a power of 2, so we can use a bitmasking + // trick instead of an actual remainder operation. (Note that if the caller + // consistently passes power-of-2 inputs of the same size, as is hopefully + // typical, this loop condition will always fail, and subtree_len will + // always be the full length of the input.) + // + // An aside: We don't have to shrink subtree_len quite this much. For + // example, if count_so_far is 1, we could pass 2 chunks to + // compress_subtree_to_parent_node. Since we'll get 2 CVs back, we'll still + // get the right answer in the end, and we might get to use 2-way SIMD + // parallelism. The problem with this optimization, is that it gets us + // stuck always hashing 2 chunks. The total number of chunks will remain + // odd, and we'll never graduate to higher degrees of parallelism. See + // https://github.com/BLAKE3-team/BLAKE3/issues/69. + while ((((uint64_t)(subtree_len - 1)) & count_so_far) != 0) { + subtree_len /= 2; + } + // The shrunken subtree_len might now be 1 chunk long. If so, hash that one + // chunk by itself. Otherwise, compress the subtree into a pair of CVs. + uint64_t subtree_chunks = subtree_len / BLAKE3_CHUNK_LEN; + if (subtree_len <= BLAKE3_CHUNK_LEN) { + blake3_chunk_state chunk_state; + chunk_state_init(&chunk_state, self->key, self->chunk.flags); + chunk_state.chunk_counter = self->chunk.chunk_counter; + chunk_state_update(&chunk_state, input_bytes, subtree_len); + output_t output = chunk_state_output(&chunk_state); + uint8_t cv[BLAKE3_OUT_LEN]; + output_chaining_value(&output, cv); + hasher_push_cv(self, cv, chunk_state.chunk_counter); + } else { + // This is the high-performance happy path, though getting here depends + // on the caller giving us a long enough input. + uint8_t cv_pair[2 * BLAKE3_OUT_LEN]; + compress_subtree_to_parent_node( + input_bytes, subtree_len, self->key, + self->chunk.chunk_counter, self->chunk.flags, cv_pair + ); + hasher_push_cv(self, cv_pair, self->chunk.chunk_counter); + hasher_push_cv( + self, &cv_pair[BLAKE3_OUT_LEN], self->chunk.chunk_counter + (subtree_chunks / 2) + ); + } + self->chunk.chunk_counter += subtree_chunks; + input_bytes += subtree_len; + input_len -= subtree_len; + } + + // If there's any remaining input less than a full chunk, add it to the chunk + // state. In that case, also do a final merge loop to make sure the subtree + // stack doesn't contain any unmerged pairs. The remaining input means we + // know these merges are non-root. This merge loop isn't strictly necessary + // here, because hasher_push_chunk_cv already does its own merge loop, but it + // simplifies blake3_hasher_finalize below. + if (input_len > 0) { + chunk_state_update(&self->chunk, input_bytes, input_len); + hasher_merge_cv_stack(self, self->chunk.chunk_counter); + } +} + +void blake3_hasher_finalize_seek( + const blake3_hasher *self, uint64_t seek, uint8_t *out, size_t out_len +) { + // Explicitly checking for zero avoids causing UB by passing a null pointer + // to memcpy. This comes up in practice with things like: + // std::vector v; + // blake3_hasher_finalize(&hasher, v.data(), v.size()); + if (out_len == 0) { + return; + } + + // If the subtree stack is empty, then the current chunk is the root. + if (self->cv_stack_len == 0) { + output_t output = chunk_state_output(&self->chunk); + output_root_bytes(&output, seek, out, out_len); + return; + } + // If there are any bytes in the chunk state, finalize that chunk and do a + // roll-up merge between that chunk hash and every subtree in the stack. In + // this case, the extra merge loop at the end of blake3_hasher_update + // guarantees that none of the subtrees in the stack need to be merged with + // each other first. Otherwise, if there are no bytes in the chunk state, + // then the top of the stack is a chunk hash, and we start the merge from + // that. + output_t output; + size_t cvs_remaining; + if (chunk_state_len(&self->chunk) > 0) { + cvs_remaining = self->cv_stack_len; + output = chunk_state_output(&self->chunk); + } else { + // There are always at least 2 CVs in the stack in this case. + cvs_remaining = self->cv_stack_len - 2; + output = parent_output(&self->cv_stack[cvs_remaining * 32], self->key, self->chunk.flags); + } + while (cvs_remaining > 0) { + cvs_remaining -= 1; + uint8_t parent_block[BLAKE3_BLOCK_LEN]; + memcpy32(parent_block, &self->cv_stack[cvs_remaining * 32]); + output_chaining_value(&output, &parent_block[32]); + output = parent_output(parent_block, self->key, self->chunk.flags); + } + output_root_bytes(&output, seek, out, out_len); +} + +void blake3_hasher_finalize(const blake3_hasher *self, uint8_t *out, size_t out_len) { + blake3_hasher_finalize_seek(self, 0, out, out_len); +} + +blake3_hasher hasher; + +WASM_EXPORT +void Hash_Init(uint32_t keyLen) { + if (keyLen == 32) { + blake3_hasher_init_keyed(&hasher, main_buffer); + } else { + blake3_hasher_init(&hasher); + } +} + +WASM_EXPORT +void Hash_Update(uint32_t len) { + blake3_hasher_update(&hasher, main_buffer, len); +} + +/* Add padding and return the message digest. */ +WASM_EXPORT +void Hash_Final(uint32_t digestBytes) { + blake3_hasher_finalize(&hasher, main_buffer, digestBytes); +} + +WASM_EXPORT +const uint32_t STATE_SIZE = sizeof(hasher); + +WASM_EXPORT +uint8_t* Hash_GetState() { + return (uint8_t*) &hasher; +} + +WASM_EXPORT +void Hash_Calculate(uint32_t length, uint32_t initParam, uint32_t digestBytes) { + Hash_Init(initParam); + Hash_Update(length); + Hash_Final(digestBytes); +} diff --git a/frontend/node_modules/hash-wasm/src/crc32.c b/frontend/node_modules/hash-wasm/src/crc32.c new file mode 100644 index 0000000..ea6df49 --- /dev/null +++ b/frontend/node_modules/hash-wasm/src/crc32.c @@ -0,0 +1,94 @@ +// ////////////////////////////////////////////////////////// +// Crc32.cpp +// Copyright (c) 2011-2019 Stephan Brumme. All rights reserved. +// Slicing-by-16 contributed by Bulat Ziganshin +// Tableless bytewise CRC contributed by Hagai Gold +// see http://create.stephan-brumme.com/disclaimer.html +// +// Modified for hash-wasm by Dani Biró +// + +#define WITH_BUFFER +#include "hash-wasm.h" + +#define bswap_32(x) __builtin_bswap32(x) + +alignas(128) static uint32_t crc32_lookup[8][256] = {0}; + +void init_lut(uint32_t polynomial) { + for (int i = 0; i < 256; ++i) { + uint32_t crc = i; + for (int j = 0; j < 8; ++j) { + crc = (crc >> 1) ^ (-(int32_t)(crc & 1) & polynomial); + } + crc32_lookup[0][i] = crc; + } + + for (int i = 1; i < 256; ++i) { + uint32_t lv = crc32_lookup[0][i]; + for (int j = 1; j < 8; ++j) { + lv = (lv >> 8) ^ crc32_lookup[0][lv & 255]; + crc32_lookup[j][i] = lv; + } + } +} + +uint32_t crc32_lut_initialized_to = 0; +uint32_t previous_crc32 = 0; + +WASM_EXPORT +void Hash_Init(uint32_t polynomial) { + if (crc32_lut_initialized_to != polynomial) { + init_lut(polynomial); + crc32_lut_initialized_to = polynomial; + } + + previous_crc32 = 0; +} + +WASM_EXPORT +void Hash_Update(uint32_t length) { + const uint8_t *data = main_buffer; + + uint32_t crc = ~previous_crc32; // same as previous_crc32 ^ 0xFFFFFFFF + const uint32_t *current = (const uint32_t *)data; + + // process eight bytes at once (Slicing-by-8) + while (length >= 8) { + uint32_t one = *current++ ^ crc; + uint32_t two = *current++; + crc = crc32_lookup[0][(two >> 24) & 0xFF] ^ + crc32_lookup[1][(two >> 16) & 0xFF] ^ + crc32_lookup[2][(two >> 8) & 0xFF] ^ crc32_lookup[3][two & 0xFF] ^ + crc32_lookup[4][(one >> 24) & 0xFF] ^ + crc32_lookup[5][(one >> 16) & 0xFF] ^ + crc32_lookup[6][(one >> 8) & 0xFF] ^ crc32_lookup[7][one & 0xFF]; + + length -= 8; + } + + const uint8_t *currentChar = (const uint8_t *)current; + + // remaining 1 to 7 bytes (standard algorithm) + while (length-- != 0) { + crc = (crc >> 8) ^ crc32_lookup[0][(crc & 0xFF) ^ *currentChar++]; + } + + previous_crc32 = ~crc; // same as crc ^ 0xFFFFFFFF +} + +WASM_EXPORT +void Hash_Final() { ((uint32_t *)main_buffer)[0] = bswap_32(previous_crc32); } + +WASM_EXPORT +const uint32_t STATE_SIZE = sizeof(previous_crc32); + +WASM_EXPORT +uint8_t *Hash_GetState() { return (uint8_t *)&previous_crc32; } + +WASM_EXPORT +void Hash_Calculate(uint32_t length, uint32_t initParam) { + Hash_Init(initParam); + Hash_Update(length); + Hash_Final(); +} diff --git a/frontend/node_modules/hash-wasm/src/crc64.c b/frontend/node_modules/hash-wasm/src/crc64.c new file mode 100644 index 0000000..3be77f6 --- /dev/null +++ b/frontend/node_modules/hash-wasm/src/crc64.c @@ -0,0 +1,86 @@ +// Based on crc32.c implementation of Stephan Brumme +// Modified for hash-wasm by Dani Biró + +#include +#define WITH_BUFFER +#include "hash-wasm.h" + +#define bswap_64(x) __builtin_bswap64(x) + +alignas(128) static uint64_t crc64_lookup[8][256] = {0}; + +void init_lut(uint64_t polynomial) { + for (int i = 0; i < 256; ++i) { + uint64_t crc = i; + for (int j = 0; j < 8; ++j) { + crc = (crc >> 1) ^ (-(int64_t)(crc & 1) & polynomial); + } + crc64_lookup[0][i] = crc; + } + + for (int i = 1; i < 256; ++i) { + uint64_t lv = crc64_lookup[0][i]; + for (int j = 1; j < 8; ++j) { + lv = (lv >> 8) ^ crc64_lookup[0][lv & 255]; + crc64_lookup[j][i] = lv; + } + } +} + +uint64_t crc64_lut_initialized_to = 0; +uint64_t previous_crc64 = 0; + +WASM_EXPORT +void Hash_Init() { + // polynomial is at the memory object + uint64_t polynomial = *((uint64_t *)main_buffer); + + if (crc64_lut_initialized_to != polynomial) { + init_lut(polynomial); + crc64_lut_initialized_to = polynomial; + } + + previous_crc64 = 0; +} + +WASM_EXPORT +void Hash_Update(uint32_t length) { + const uint8_t *data = main_buffer; + + uint64_t crc = ~previous_crc64; // same as previous_crc64 ^ 0xFFFFFFFF + const uint64_t *current = (const uint64_t *)data; + + // process eight bytes at once (Slicing-by-8) + while (length >= 8) { + uint64_t val = *current++ ^ crc; + crc = crc64_lookup[0][(val >> 56)] ^ crc64_lookup[1][(val >> 48) & 0xFF] ^ + crc64_lookup[2][(val >> 40) & 0xFF] ^ + crc64_lookup[3][(val >> 32) & 0xFF] ^ + crc64_lookup[4][(val >> 24) & 0xFF] ^ + crc64_lookup[5][(val >> 16) & 0xFF] ^ + crc64_lookup[6][(val >> 8) & 0xFF] ^ crc64_lookup[7][val & 0xFF]; + + length -= 8; + } + + const uint8_t *currentChar = (const uint8_t *)current; + + // remaining 1 to 7 bytes (standard algorithm) + while (length-- != 0) { + crc = (crc >> 8) ^ crc64_lookup[0][(crc & 0xFF) ^ *currentChar++]; + } + + previous_crc64 = ~crc; +} + +WASM_EXPORT +void Hash_Final() { ((uint64_t *)main_buffer)[0] = bswap_64(previous_crc64); } + +WASM_EXPORT +const uint32_t STATE_SIZE = sizeof(previous_crc64); + +WASM_EXPORT +uint8_t *Hash_GetState() { return (uint8_t *)&previous_crc64; } + +WASM_EXPORT +void Hash_Calculate() { return; } diff --git a/frontend/node_modules/hash-wasm/src/hash-wasm.h b/frontend/node_modules/hash-wasm/src/hash-wasm.h new file mode 100644 index 0000000..5509845 --- /dev/null +++ b/frontend/node_modules/hash-wasm/src/hash-wasm.h @@ -0,0 +1,132 @@ +#include +#include + +#ifndef NULL +#define NULL 0 +#endif + +#ifdef _MSC_VER +#define WASM_EXPORT +#define __inline__ +#else +#define WASM_EXPORT __attribute__((visibility("default"))) +#endif + +#ifdef WITH_BUFFER + +#define MAIN_BUFFER_SIZE 16 * 1024 +alignas(128) uint8_t main_buffer[MAIN_BUFFER_SIZE]; + +WASM_EXPORT +uint8_t *Hash_GetBuffer() { + return main_buffer; +} + +#endif + +// Sometimes LLVM emits these functions during the optimization step +// even with -nostdlib -fno-builtin flags +static __inline__ void* memcpy(void* dst, const void* src, uint32_t cnt) { + uint8_t *destination = dst; + const uint8_t *source = src; + while (cnt) { + *(destination++)= *(source++); + --cnt; + } + return dst; +} + +static __inline__ void* memset(void* dst, const uint8_t value, uint32_t cnt) { + uint8_t *p = dst; + while (cnt--) { + *p++ = value; + } + return dst; +} + +static __inline__ void* memcpy2(void* dst, const void* src, uint32_t cnt) { + uint64_t *destination64 = dst; + const uint64_t *source64 = src; + while (cnt >= 8) { + *(destination64++)= *(source64++); + cnt -= 8; + } + + uint8_t *destination = (uint8_t*)destination64; + const uint8_t *source = (uint8_t*)source64; + while (cnt) { + *(destination++)= *(source++); + --cnt; + } + return dst; +} + +static __inline__ void memcpy16(void* dst, const void* src) { + uint64_t* dst64 = (uint64_t*)dst; + uint64_t* src64 = (uint64_t*)src; + + dst64[0] = src64[0]; + dst64[1] = src64[1]; +} + +static __inline__ void memcpy32(void* dst, const void* src) { + uint64_t* dst64 = (uint64_t*)dst; + uint64_t* src64 = (uint64_t*)src; + + #pragma clang loop unroll(full) + for (int i = 0; i < 4; i++) { + dst64[i] = src64[i]; + } +} + +static __inline__ void memcpy64(void* dst, const void* src) { + uint64_t* dst64 = (uint64_t*)dst; + uint64_t* src64 = (uint64_t*)src; + + #pragma clang loop unroll(full) + for (int i = 0; i < 8; i++) { + dst64[i] = src64[i]; + } +} + +static __inline__ uint64_t widen8to64(const uint8_t value) { + return value | (value << 8) | (value << 16) | (value << 24); +} + +static __inline__ void memset16(void* dst, const uint8_t value) { + uint64_t val = widen8to64(value); + uint64_t* dst64 = (uint64_t*)dst; + + dst64[0] = val; + dst64[1] = val; +} + +static __inline__ void memset32(void* dst, const uint8_t value) { + uint64_t val = widen8to64(value); + uint64_t* dst64 = (uint64_t*)dst; + + #pragma clang loop unroll(full) + for (int i = 0; i < 4; i++) { + dst64[i] = val; + } +} + +static __inline__ void memset64(void* dst, const uint8_t value) { + uint64_t val = widen8to64(value); + uint64_t* dst64 = (uint64_t*)dst; + + #pragma clang loop unroll(full) + for (int i = 0; i < 8; i++) { + dst64[i] = val; + } +} + +static __inline__ void memset128(void* dst, const uint8_t value) { + uint64_t val = widen8to64(value); + uint64_t* dst64 = (uint64_t*)dst; + + #pragma clang loop unroll(full) + for (int i = 0; i < 16; i++) { + dst64[i] = val; + } +} diff --git a/frontend/node_modules/hash-wasm/src/md4.c b/frontend/node_modules/hash-wasm/src/md4.c new file mode 100644 index 0000000..1661724 --- /dev/null +++ b/frontend/node_modules/hash-wasm/src/md4.c @@ -0,0 +1,290 @@ +/* + * This is an OpenSSL-compatible implementation of the RSA Data Security, Inc. + * MD4 Message-Digest Algorithm (RFC 1320). + * + * Homepage: + * http://openwall.info/wiki/people/solar/software/public-domain-source-code/md4 + * + * Author: + * Alexander Peslyak, better known as Solar Designer + * + * This software was written by Alexander Peslyak in 2001. No copyright is + * claimed, and the software is hereby placed in the public domain. + * In case this attempt to disclaim copyright and place the software in the + * public domain is deemed null and void, then the software is + * Copyright (c) 2001 Alexander Peslyak and it is hereby released to the + * general public under the following terms: + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted. + * + * There's ABSOLUTELY NO WARRANTY, express or implied. + * + * (This is a heavily cut-down "BSD license".) + * + * This differs from Colin Plumb's older public domain implementation in that + * no exactly 32-bit integer data type is required (any 32-bit or wider + * unsigned integer data type will do), there's no compile-time endianness + * configuration, and the function prototypes match OpenSSL's. No code from + * Colin Plumb's implementation has been reused; this comment merely compares + * the properties of the two independent implementations. + * + * The primary goals of this implementation are portability and ease of use. + * It is meant to be fast, but not as fast as possible. Some known + * optimizations are not included to reduce source code size and avoid + * compile-time configuration. + * + * Modified for hash-wasm by Dani Biró + */ + +#define WITH_BUFFER +#include "hash-wasm.h" + +struct MD4_CTX { + uint32_t lo, hi; + uint32_t a, b, c, d; + uint8_t buffer[64]; + uint32_t block[16]; +}; + +struct MD4_CTX sctx; +struct MD4_CTX *ctx = &sctx; + +/* + * The basic MD4 functions. + * + * F and G are optimized compared to their RFC 1320 definitions, with the + * optimization for F borrowed from Colin Plumb's MD5 implementation. + */ +#define F(x, y, z) ((z) ^ ((x) & ((y) ^ (z)))) +#define G(x, y, z) (((x) & ((y) | (z))) | ((y) & (z))) +#define H(x, y, z) ((x) ^ (y) ^ (z)) + +/* + * The MD4 transformation for all three rounds. + */ +#define STEP(f, a, b, c, d, x, s) \ + (a) += f((b), (c), (d)) + (x); \ + (a) = (((a) << (s)) | (((a) & 0xffffffff) >> (32 - (s)))); + +/* + * SET reads 4 input bytes in little-endian byte order and stores them in a + * properly aligned word in host byte order. + * + * The check for little-endian architectures that tolerate unaligned memory + * accesses is just an optimization. Nothing will break if it fails to detect + * a suitable architecture. + * + * Unfortunately, this optimization may be a C strict aliasing rules violation + * if the caller's data buffer has effective type that cannot be aliased by + * uint32_t. In practice, this problem may occur if these MD4 routines are + * inlined into a calling function, or with future and dangerously advanced + * link-time optimizations. For the time being, keeping these MD4 routines in + * their own translation unit avoids the problem. + */ + +#define SET(n) (*(uint32_t *)&ptr[(n)*4]) +#define GET(n) SET(n) + +/* + * This processes one or more 64-byte data blocks, but does NOT update the bit + * counters. There are no alignment requirements. + */ +static const void *body(const void *data, uint32_t size) { + const uint8_t *ptr; + uint32_t a, b, c, d; + uint32_t saved_a, saved_b, saved_c, saved_d; + const uint32_t ac1 = 0x5a827999, ac2 = 0x6ed9eba1; + + ptr = (const uint8_t *)data; + + a = ctx->a; + b = ctx->b; + c = ctx->c; + d = ctx->d; + + do { + saved_a = a; + saved_b = b; + saved_c = c; + saved_d = d; + + /* Round 1 */ + STEP(F, a, b, c, d, SET(0), 3) + STEP(F, d, a, b, c, SET(1), 7) + STEP(F, c, d, a, b, SET(2), 11) + STEP(F, b, c, d, a, SET(3), 19) + STEP(F, a, b, c, d, SET(4), 3) + STEP(F, d, a, b, c, SET(5), 7) + STEP(F, c, d, a, b, SET(6), 11) + STEP(F, b, c, d, a, SET(7), 19) + STEP(F, a, b, c, d, SET(8), 3) + STEP(F, d, a, b, c, SET(9), 7) + STEP(F, c, d, a, b, SET(10), 11) + STEP(F, b, c, d, a, SET(11), 19) + STEP(F, a, b, c, d, SET(12), 3) + STEP(F, d, a, b, c, SET(13), 7) + STEP(F, c, d, a, b, SET(14), 11) + STEP(F, b, c, d, a, SET(15), 19) + + /* Round 2 */ + STEP(G, a, b, c, d, GET(0) + ac1, 3) + STEP(G, d, a, b, c, GET(4) + ac1, 5) + STEP(G, c, d, a, b, GET(8) + ac1, 9) + STEP(G, b, c, d, a, GET(12) + ac1, 13) + STEP(G, a, b, c, d, GET(1) + ac1, 3) + STEP(G, d, a, b, c, GET(5) + ac1, 5) + STEP(G, c, d, a, b, GET(9) + ac1, 9) + STEP(G, b, c, d, a, GET(13) + ac1, 13) + STEP(G, a, b, c, d, GET(2) + ac1, 3) + STEP(G, d, a, b, c, GET(6) + ac1, 5) + STEP(G, c, d, a, b, GET(10) + ac1, 9) + STEP(G, b, c, d, a, GET(14) + ac1, 13) + STEP(G, a, b, c, d, GET(3) + ac1, 3) + STEP(G, d, a, b, c, GET(7) + ac1, 5) + STEP(G, c, d, a, b, GET(11) + ac1, 9) + STEP(G, b, c, d, a, GET(15) + ac1, 13) + + /* Round 3 */ + STEP(H, a, b, c, d, GET(0) + ac2, 3) + STEP(H, d, a, b, c, GET(8) + ac2, 9) + STEP(H, c, d, a, b, GET(4) + ac2, 11) + STEP(H, b, c, d, a, GET(12) + ac2, 15) + STEP(H, a, b, c, d, GET(2) + ac2, 3) + STEP(H, d, a, b, c, GET(10) + ac2, 9) + STEP(H, c, d, a, b, GET(6) + ac2, 11) + STEP(H, b, c, d, a, GET(14) + ac2, 15) + STEP(H, a, b, c, d, GET(1) + ac2, 3) + STEP(H, d, a, b, c, GET(9) + ac2, 9) + STEP(H, c, d, a, b, GET(5) + ac2, 11) + STEP(H, b, c, d, a, GET(13) + ac2, 15) + STEP(H, a, b, c, d, GET(3) + ac2, 3) + STEP(H, d, a, b, c, GET(11) + ac2, 9) + STEP(H, c, d, a, b, GET(7) + ac2, 11) + STEP(H, b, c, d, a, GET(15) + ac2, 15) + + a += saved_a; + b += saved_b; + c += saved_c; + d += saved_d; + + ptr += 64; + } while (size -= 64); + + ctx->a = a; + ctx->b = b; + ctx->c = c; + ctx->d = d; + + return ptr; +} + +WASM_EXPORT +void Hash_Init() { + ctx->a = 0x67452301; + ctx->b = 0xefcdab89; + ctx->c = 0x98badcfe; + ctx->d = 0x10325476; + + ctx->lo = 0; + ctx->hi = 0; +} + +WASM_EXPORT +void Hash_Update(uint32_t size) { + const uint8_t *data = main_buffer; + uint32_t saved_lo; + uint32_t used, available; + + saved_lo = ctx->lo; + if ((ctx->lo = (saved_lo + size) & 0x1fffffff) < saved_lo) { + ctx->hi++; + } + ctx->hi += size >> 29; + + used = saved_lo & 0x3f; + + if (used) { + available = 64 - used; + + if (size < available) { + for (uint32_t i = 0; i < size; i++) { + ctx->buffer[used + i] = data[i]; + } + return; + } + + for (uint32_t i = 0; i < available; i++) { + ctx->buffer[used + i] = data[i]; + } + data = (const uint8_t *)data + available; + size -= available; + body(ctx->buffer, 64); + } + + if (size >= 64) { + data = body(data, size & ~(uint32_t)0x3f); + size &= 0x3f; + } + + for (uint32_t i = 0; i < size; i++) { + ctx->buffer[i] = data[i]; + } +} + +#define OUT(dst, src) \ + (dst)[0] = (uint8_t)(src); \ + (dst)[1] = (uint8_t)((src) >> 8); \ + (dst)[2] = (uint8_t)((src) >> 16); \ + (dst)[3] = (uint8_t)((src) >> 24); + +WASM_EXPORT +void Hash_Final() { + uint8_t *result = main_buffer; + uint32_t used, available; + + used = ctx->lo & 0x3f; + + ctx->buffer[used++] = 0x80; + + available = 64 - used; + + if (available < 8) { + for (int i = 0; i < available; i++) { + ctx->buffer[used + i] = 0; + } + body(ctx->buffer, 64); + used = 0; + available = 64; + } + + for (int i = available - 9; i >= 0; i--) { + ctx->buffer[used + i] = 0; + } + + ctx->lo <<= 3; + OUT(&ctx->buffer[56], ctx->lo) + OUT(&ctx->buffer[60], ctx->hi) + + body(ctx->buffer, 64); + + OUT(&result[0], ctx->a) + OUT(&result[4], ctx->b) + OUT(&result[8], ctx->c) + OUT(&result[12], ctx->d) +} + +WASM_EXPORT +const uint32_t STATE_SIZE = sizeof(*ctx); + +WASM_EXPORT +uint8_t* Hash_GetState() { + return (uint8_t*) ctx; +} + +WASM_EXPORT +void Hash_Calculate(uint32_t length) { + Hash_Init(); + Hash_Update(length); + Hash_Final(); +} diff --git a/frontend/node_modules/hash-wasm/src/md5.c b/frontend/node_modules/hash-wasm/src/md5.c new file mode 100644 index 0000000..54a91c8 --- /dev/null +++ b/frontend/node_modules/hash-wasm/src/md5.c @@ -0,0 +1,311 @@ +/* + * This is an OpenSSL-compatible implementation of the RSA Data Security, Inc. + * MD5 Message-Digest Algorithm (RFC 1321). + * + * Homepage: + * http://openwall.info/wiki/people/solar/software/public-domain-source-code/md5 + * + * Author: + * Alexander Peslyak, better known as Solar Designer + * + * This software was written by Alexander Peslyak in 2001. No copyright is + * claimed, and the software is hereby placed in the public domain. + * In case this attempt to disclaim copyright and place the software in the + * public domain is deemed null and void, then the software is + * Copyright (c) 2001 Alexander Peslyak and it is hereby released to the + * general public under the following terms: + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted. + * + * There's ABSOLUTELY NO WARRANTY, express or implied. + * + * (This is a heavily cut-down "BSD license".) + * + * This differs from Colin Plumb's older public domain implementation in that + * no exactly 32-bit integer data type is required (any 32-bit or wider + * unsigned integer data type will do), there's no compile-time endianness + * configuration, and the function prototypes match OpenSSL's. No code from + * Colin Plumb's implementation has been reused; this comment merely compares + * the properties of the two independent implementations. + * + * The primary goals of this implementation are portability and ease of use. + * It is meant to be fast, but not as fast as possible. Some known + * optimizations are not included to reduce source code size and avoid + * compile-time configuration. + * + * Modified for hash-wasm by Dani Biró + */ + +#define WITH_BUFFER +#include "hash-wasm.h" + +struct MD5_CTX { + uint32_t lo, hi; + uint32_t a, b, c, d; + uint8_t buffer[64]; + uint32_t block[16]; +}; + +struct MD5_CTX sctx; +struct MD5_CTX *ctx = &sctx; + +/* + * The basic MD5 functions. + * + * F and G are optimized compared to their RFC 1321 definitions for + * architectures that lack an AND-NOT instruction, just like in Colin Plumb's + * implementation. + */ +#define F(x, y, z) ((z) ^ ((x) & ((y) ^ (z)))) +#define G(x, y, z) ((y) ^ ((z) & ((x) ^ (y)))) +#define H(x, y, z) (((x) ^ (y)) ^ (z)) +#define H2(x, y, z) ((x) ^ ((y) ^ (z))) +#define I(x, y, z) ((y) ^ ((x) | ~(z))) + +/* + * The MD5 transformation for all four rounds. + */ +#define STEP(f, a, b, c, d, x, t, s) \ + (a) += f((b), (c), (d)) + (x) + (t); \ + (a) = (((a) << (s)) | (((a)&0xffffffff) >> (32 - (s)))); \ + (a) += (b); + +/* + * SET reads 4 input bytes in little-endian byte order and stores them in a + * properly aligned word in host byte order. + * + * The check for little-endian architectures that tolerate unaligned memory + * accesses is just an optimization. Nothing will break if it fails to detect + * a suitable architecture. + * + * Unfortunately, this optimization may be a C strict aliasing rules violation + * if the caller's data buffer has effective type that cannot be aliased by + * uint32_t. In practice, this problem may occur if these MD5 routines are + * inlined into a calling function, or with future and dangerously advanced + * link-time optimizations. For the time being, keeping these MD5 routines in + * their own translation unit avoids the problem. + */ + +#define SET(n) (*(uint32_t *)&ptr[(n)*4]) +#define GET(n) SET(n) + +/* + * This processes one or more 64-byte data blocks, but does NOT update the bit + * counters. There are no alignment requirements. + */ +static const void *body(const void *data, uint32_t size) { + const uint8_t *ptr; + uint32_t a, b, c, d; + uint32_t saved_a, saved_b, saved_c, saved_d; + + ptr = (const uint8_t *)data; + + a = ctx->a; + b = ctx->b; + c = ctx->c; + d = ctx->d; + + do { + saved_a = a; + saved_b = b; + saved_c = c; + saved_d = d; + + /* Round 1 */ + STEP(F, a, b, c, d, SET(0), 0xd76aa478, 7) + STEP(F, d, a, b, c, SET(1), 0xe8c7b756, 12) + STEP(F, c, d, a, b, SET(2), 0x242070db, 17) + STEP(F, b, c, d, a, SET(3), 0xc1bdceee, 22) + STEP(F, a, b, c, d, SET(4), 0xf57c0faf, 7) + STEP(F, d, a, b, c, SET(5), 0x4787c62a, 12) + STEP(F, c, d, a, b, SET(6), 0xa8304613, 17) + STEP(F, b, c, d, a, SET(7), 0xfd469501, 22) + STEP(F, a, b, c, d, SET(8), 0x698098d8, 7) + STEP(F, d, a, b, c, SET(9), 0x8b44f7af, 12) + STEP(F, c, d, a, b, SET(10), 0xffff5bb1, 17) + STEP(F, b, c, d, a, SET(11), 0x895cd7be, 22) + STEP(F, a, b, c, d, SET(12), 0x6b901122, 7) + STEP(F, d, a, b, c, SET(13), 0xfd987193, 12) + STEP(F, c, d, a, b, SET(14), 0xa679438e, 17) + STEP(F, b, c, d, a, SET(15), 0x49b40821, 22) + + /* Round 2 */ + STEP(G, a, b, c, d, GET(1), 0xf61e2562, 5) + STEP(G, d, a, b, c, GET(6), 0xc040b340, 9) + STEP(G, c, d, a, b, GET(11), 0x265e5a51, 14) + STEP(G, b, c, d, a, GET(0), 0xe9b6c7aa, 20) + STEP(G, a, b, c, d, GET(5), 0xd62f105d, 5) + STEP(G, d, a, b, c, GET(10), 0x02441453, 9) + STEP(G, c, d, a, b, GET(15), 0xd8a1e681, 14) + STEP(G, b, c, d, a, GET(4), 0xe7d3fbc8, 20) + STEP(G, a, b, c, d, GET(9), 0x21e1cde6, 5) + STEP(G, d, a, b, c, GET(14), 0xc33707d6, 9) + STEP(G, c, d, a, b, GET(3), 0xf4d50d87, 14) + STEP(G, b, c, d, a, GET(8), 0x455a14ed, 20) + STEP(G, a, b, c, d, GET(13), 0xa9e3e905, 5) + STEP(G, d, a, b, c, GET(2), 0xfcefa3f8, 9) + STEP(G, c, d, a, b, GET(7), 0x676f02d9, 14) + STEP(G, b, c, d, a, GET(12), 0x8d2a4c8a, 20) + + /* Round 3 */ + STEP(H, a, b, c, d, GET(5), 0xfffa3942, 4) + STEP(H2, d, a, b, c, GET(8), 0x8771f681, 11) + STEP(H, c, d, a, b, GET(11), 0x6d9d6122, 16) + STEP(H2, b, c, d, a, GET(14), 0xfde5380c, 23) + STEP(H, a, b, c, d, GET(1), 0xa4beea44, 4) + STEP(H2, d, a, b, c, GET(4), 0x4bdecfa9, 11) + STEP(H, c, d, a, b, GET(7), 0xf6bb4b60, 16) + STEP(H2, b, c, d, a, GET(10), 0xbebfbc70, 23) + STEP(H, a, b, c, d, GET(13), 0x289b7ec6, 4) + STEP(H2, d, a, b, c, GET(0), 0xeaa127fa, 11) + STEP(H, c, d, a, b, GET(3), 0xd4ef3085, 16) + STEP(H2, b, c, d, a, GET(6), 0x04881d05, 23) + STEP(H, a, b, c, d, GET(9), 0xd9d4d039, 4) + STEP(H2, d, a, b, c, GET(12), 0xe6db99e5, 11) + STEP(H, c, d, a, b, GET(15), 0x1fa27cf8, 16) + STEP(H2, b, c, d, a, GET(2), 0xc4ac5665, 23) + + /* Round 4 */ + STEP(I, a, b, c, d, GET(0), 0xf4292244, 6) + STEP(I, d, a, b, c, GET(7), 0x432aff97, 10) + STEP(I, c, d, a, b, GET(14), 0xab9423a7, 15) + STEP(I, b, c, d, a, GET(5), 0xfc93a039, 21) + STEP(I, a, b, c, d, GET(12), 0x655b59c3, 6) + STEP(I, d, a, b, c, GET(3), 0x8f0ccc92, 10) + STEP(I, c, d, a, b, GET(10), 0xffeff47d, 15) + STEP(I, b, c, d, a, GET(1), 0x85845dd1, 21) + STEP(I, a, b, c, d, GET(8), 0x6fa87e4f, 6) + STEP(I, d, a, b, c, GET(15), 0xfe2ce6e0, 10) + STEP(I, c, d, a, b, GET(6), 0xa3014314, 15) + STEP(I, b, c, d, a, GET(13), 0x4e0811a1, 21) + STEP(I, a, b, c, d, GET(4), 0xf7537e82, 6) + STEP(I, d, a, b, c, GET(11), 0xbd3af235, 10) + STEP(I, c, d, a, b, GET(2), 0x2ad7d2bb, 15) + STEP(I, b, c, d, a, GET(9), 0xeb86d391, 21) + + a += saved_a; + b += saved_b; + c += saved_c; + d += saved_d; + + ptr += 64; + } while (size -= 64); + + ctx->a = a; + ctx->b = b; + ctx->c = c; + ctx->d = d; + + return ptr; +} + +WASM_EXPORT +void Hash_Init() { + ctx->a = 0x67452301; + ctx->b = 0xefcdab89; + ctx->c = 0x98badcfe; + ctx->d = 0x10325476; + + ctx->lo = 0; + ctx->hi = 0; +} + +WASM_EXPORT +void Hash_Update(uint32_t size) { + const uint8_t *data = main_buffer; + uint32_t saved_lo; + uint32_t used, available; + + saved_lo = ctx->lo; + if ((ctx->lo = (saved_lo + size) & 0x1fffffff) < saved_lo) { + ctx->hi++; + } + ctx->hi += size >> 29; + + used = saved_lo & 0x3f; + + if (used) { + available = 64 - used; + + if (size < available) { + for (uint32_t i = 0; i < size; i++) { + ctx->buffer[used + i] = data[i]; + } + return; + } + + for (uint32_t i = 0; i < available; i++) { + ctx->buffer[used + i] = data[i]; + } + data = (const uint8_t *)data + available; + size -= available; + body(ctx->buffer, 64); + } + + if (size >= 64) { + data = body(data, size & ~(uint32_t)0x3f); + size &= 0x3f; + } + + for (uint32_t i = 0; i < size; i++) { + ctx->buffer[i] = data[i]; + } +} + +#define OUT(dst, src) \ + (dst)[0] = (uint8_t)(src); \ + (dst)[1] = (uint8_t)((src) >> 8); \ + (dst)[2] = (uint8_t)((src) >> 16); \ + (dst)[3] = (uint8_t)((src) >> 24); + +WASM_EXPORT +void Hash_Final() { + uint8_t *result = main_buffer; + uint32_t used, available; + + used = ctx->lo & 0x3f; + + ctx->buffer[used++] = 0x80; + + available = 64 - used; + + if (available < 8) { + for (int i = 0; i < available; i++) { + ctx->buffer[used + i] = 0; + } + body(ctx->buffer, 64); + used = 0; + available = 64; + } + + for (int i = available - 9; i >= 0; i--) { + ctx->buffer[used + i] = 0; + } + + ctx->lo <<= 3; + OUT(&ctx->buffer[56], ctx->lo) + OUT(&ctx->buffer[60], ctx->hi) + + body(ctx->buffer, 64); + + OUT(&result[0], ctx->a) + OUT(&result[4], ctx->b) + OUT(&result[8], ctx->c) + OUT(&result[12], ctx->d) +} + +WASM_EXPORT +const uint32_t STATE_SIZE = sizeof(*ctx); + +WASM_EXPORT +uint8_t* Hash_GetState() { + return (uint8_t*) ctx; +} + +WASM_EXPORT +void Hash_Calculate(uint32_t length) { + Hash_Init(); + Hash_Update(length); + Hash_Final(); +} diff --git a/frontend/node_modules/hash-wasm/src/ripemd160.c b/frontend/node_modules/hash-wasm/src/ripemd160.c new file mode 100644 index 0000000..7d6f0e7 --- /dev/null +++ b/frontend/node_modules/hash-wasm/src/ripemd160.c @@ -0,0 +1,308 @@ +/* + * RIPE MD-160 implementation + * + * Copyright (C) 2006-2015, ARM Limited, All Rights Reserved + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * This file is part of mbed TLS (https://tls.mbed.org) + * + * Modified for hash-wasm by Dani Biró + */ + +/* + * The RIPEMD-160 algorithm was designed by RIPE in 1996 + * http://homes.esat.kuleuven.be/~bosselae/ripemd160.html + * http://ehash.iaik.tugraz.at/wiki/RIPEMD-160 + */ + +#define WITH_BUFFER +#include "hash-wasm.h" + +#define RIPEMD160_BLOCK_LENGTH 64 +#define RIPEMD160_DIGEST_LENGTH 20 + +struct RIPEMD160_CTX { + uint32_t total[2]; + uint32_t state[5]; + uint8_t buffer[RIPEMD160_BLOCK_LENGTH]; +}; + +struct RIPEMD160_CTX sctx; +struct RIPEMD160_CTX* ctx = &sctx; + + +WASM_EXPORT +void Hash_Init() { + ctx->total[0] = 0; + ctx->total[1] = 0; + ctx->state[0] = 0x67452301; + ctx->state[1] = 0xEFCDAB89; + ctx->state[2] = 0x98BADCFE; + ctx->state[3] = 0x10325476; + ctx->state[4] = 0xC3D2E1F0; +} + +void ripemd160_process(const uint8_t data[RIPEMD160_BLOCK_LENGTH]) { + uint32_t A, B, C, D, E, Ap, Bp, Cp, Dp, Ep, X[16]; + + #pragma clang loop unroll(full) + for (uint8_t i = 0; i < 16; i++) { + X[i] = ((uint32_t*)data)[i]; + } + + A = Ap = ctx->state[0]; + B = Bp = ctx->state[1]; + C = Cp = ctx->state[2]; + D = Dp = ctx->state[3]; + E = Ep = ctx->state[4]; + +#define F1(x, y, z) (x ^ y ^ z) +#define F2(x, y, z) ((x & y) | (~x & z)) +#define F3(x, y, z) ((x | ~y) ^ z) +#define F4(x, y, z) ((x & z) | (y & ~z)) +#define F5(x, y, z) (x ^ (y | ~z)) + +#define S(x, n) ((x << n) | (x >> (32 - n))) + +#define P(a, b, c, d, e, r, s, f, k) \ + a += f(b, c, d) + X[r] + k; \ + a = S(a, s) + e; \ + c = S(c, 10); + +#define P2(a, b, c, d, e, r, s, rp, sp) \ + P(a, b, c, d, e, r, s, F, K); \ + P(a ## p, b ## p, c ## p, d ## p, e ## p, rp, sp, Fp, Kp); + +#define F F1 +#define K 0x00000000 +#define Fp F5 +#define Kp 0x50A28BE6 + P2(A, B, C, D, E, 0, 11, 5, 8); + P2(E, A, B, C, D, 1, 14, 14, 9); + P2(D, E, A, B, C, 2, 15, 7, 9); + P2(C, D, E, A, B, 3, 12, 0, 11); + P2(B, C, D, E, A, 4, 5, 9, 13); + P2(A, B, C, D, E, 5, 8, 2, 15); + P2(E, A, B, C, D, 6, 7, 11, 15); + P2(D, E, A, B, C, 7, 9, 4, 5); + P2(C, D, E, A, B, 8, 11, 13, 7); + P2(B, C, D, E, A, 9, 13, 6, 7); + P2(A, B, C, D, E, 10, 14, 15, 8); + P2(E, A, B, C, D, 11, 15, 8, 11); + P2(D, E, A, B, C, 12, 6, 1, 14); + P2(C, D, E, A, B, 13, 7, 10, 14); + P2(B, C, D, E, A, 14, 9, 3, 12); + P2(A, B, C, D, E, 15, 8, 12, 6); +#undef F +#undef K +#undef Fp +#undef Kp + +#define F F2 +#define K 0x5A827999 +#define Fp F4 +#define Kp 0x5C4DD124 + P2(E, A, B, C, D, 7, 7, 6, 9); + P2(D, E, A, B, C, 4, 6, 11, 13); + P2(C, D, E, A, B, 13, 8, 3, 15); + P2(B, C, D, E, A, 1, 13, 7, 7); + P2(A, B, C, D, E, 10, 11, 0, 12); + P2(E, A, B, C, D, 6, 9, 13, 8); + P2(D, E, A, B, C, 15, 7, 5, 9); + P2(C, D, E, A, B, 3, 15, 10, 11); + P2(B, C, D, E, A, 12, 7, 14, 7); + P2(A, B, C, D, E, 0, 12, 15, 7); + P2(E, A, B, C, D, 9, 15, 8, 12); + P2(D, E, A, B, C, 5, 9, 12, 7); + P2(C, D, E, A, B, 2, 11, 4, 6); + P2(B, C, D, E, A, 14, 7, 9, 15); + P2(A, B, C, D, E, 11, 13, 1, 13); + P2(E, A, B, C, D, 8, 12, 2, 11); +#undef F +#undef K +#undef Fp +#undef Kp + +#define F F3 +#define K 0x6ED9EBA1 +#define Fp F3 +#define Kp 0x6D703EF3 + P2(D, E, A, B, C, 3, 11, 15, 9); + P2(C, D, E, A, B, 10, 13, 5, 7); + P2(B, C, D, E, A, 14, 6, 1, 15); + P2(A, B, C, D, E, 4, 7, 3, 11); + P2(E, A, B, C, D, 9, 14, 7, 8); + P2(D, E, A, B, C, 15, 9, 14, 6); + P2(C, D, E, A, B, 8, 13, 6, 6); + P2(B, C, D, E, A, 1, 15, 9, 14); + P2(A, B, C, D, E, 2, 14, 11, 12); + P2(E, A, B, C, D, 7, 8, 8, 13); + P2(D, E, A, B, C, 0, 13, 12, 5); + P2(C, D, E, A, B, 6, 6, 2, 14); + P2(B, C, D, E, A, 13, 5, 10, 13); + P2(A, B, C, D, E, 11, 12, 0, 13); + P2(E, A, B, C, D, 5, 7, 4, 7); + P2(D, E, A, B, C, 12, 5, 13, 5); +#undef F +#undef K +#undef Fp +#undef Kp + +#define F F4 +#define K 0x8F1BBCDC +#define Fp F2 +#define Kp 0x7A6D76E9 + P2(C, D, E, A, B, 1, 11, 8, 15); + P2(B, C, D, E, A, 9, 12, 6, 5); + P2(A, B, C, D, E, 11, 14, 4, 8); + P2(E, A, B, C, D, 10, 15, 1, 11); + P2(D, E, A, B, C, 0, 14, 3, 14); + P2(C, D, E, A, B, 8, 15, 11, 14); + P2(B, C, D, E, A, 12, 9, 15, 6); + P2(A, B, C, D, E, 4, 8, 0, 14); + P2(E, A, B, C, D, 13, 9, 5, 6); + P2(D, E, A, B, C, 3, 14, 12, 9); + P2(C, D, E, A, B, 7, 5, 2, 12); + P2(B, C, D, E, A, 15, 6, 13, 9); + P2(A, B, C, D, E, 14, 8, 9, 12); + P2(E, A, B, C, D, 5, 6, 7, 5); + P2(D, E, A, B, C, 6, 5, 10, 15); + P2(C, D, E, A, B, 2, 12, 14, 8); +#undef F +#undef K +#undef Fp +#undef Kp + +#define F F5 +#define K 0xA953FD4E +#define Fp F1 +#define Kp 0x00000000 + P2(B, C, D, E, A, 4, 9, 12, 8); + P2(A, B, C, D, E, 0, 15, 15, 5); + P2(E, A, B, C, D, 5, 5, 10, 12); + P2(D, E, A, B, C, 9, 11, 4, 9); + P2(C, D, E, A, B, 7, 6, 1, 12); + P2(B, C, D, E, A, 12, 8, 5, 5); + P2(A, B, C, D, E, 2, 13, 8, 14); + P2(E, A, B, C, D, 10, 12, 7, 6); + P2(D, E, A, B, C, 14, 5, 6, 8); + P2(C, D, E, A, B, 1, 12, 2, 13); + P2(B, C, D, E, A, 3, 13, 13, 6); + P2(A, B, C, D, E, 8, 14, 14, 5); + P2(E, A, B, C, D, 11, 11, 0, 15); + P2(D, E, A, B, C, 6, 8, 3, 13); + P2(C, D, E, A, B, 15, 5, 9, 11); + P2(B, C, D, E, A, 13, 6, 11, 11); +#undef F +#undef K +#undef Fp +#undef Kp + C = ctx->state[1] + C + Dp; + ctx->state[1] = ctx->state[2] + D + Ep; + ctx->state[2] = ctx->state[3] + E + Ap; + ctx->state[3] = ctx->state[4] + A + Bp; + ctx->state[4] = ctx->state[0] + B + Cp; + ctx->state[0] = C; +} + +WASM_EXPORT +void ripemd160_update(const uint8_t* input, uint32_t ilen) { + uint32_t fill; + uint32_t left; + + if (ilen == 0) { + return; + } + + left = ctx->total[0] & 0x3F; + fill = RIPEMD160_BLOCK_LENGTH - left; + + ctx->total[0] += (uint32_t)ilen; + ctx->total[0] &= 0xFFFFFFFF; + + if (ctx->total[0] < (uint32_t)ilen) { + ctx->total[1]++; + } + + if (left && ilen >= fill) { + for (uint8_t i = 0; i < fill; i++) { + ctx->buffer[left + i] = input[i]; + } + ripemd160_process(ctx->buffer); + input += fill; + ilen -= fill; + left = 0; + } + + while (ilen >= RIPEMD160_BLOCK_LENGTH) { + ripemd160_process(input); + input += RIPEMD160_BLOCK_LENGTH; + ilen -= RIPEMD160_BLOCK_LENGTH; + } + + if (ilen > 0) { + for (uint8_t i = 0; i < ilen; i++) { + ctx->buffer[left + i] = input[i]; + } + } +} + +WASM_EXPORT +void Hash_Update(uint32_t ilen) { + ripemd160_update(main_buffer, ilen); +} + +static const uint8_t ripemd160_padding[RIPEMD160_BLOCK_LENGTH] = { + 0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +}; + +WASM_EXPORT +void Hash_Final() { + uint8_t* result = main_buffer; + uint32_t last, padn; + uint8_t msglen[8]; + + ((uint32_t*)msglen)[0] = (ctx->total[0] << 3); + ((uint32_t*)msglen)[1] = (ctx->total[0] >> 29) | (ctx->total[1] << 3); + + last = ctx->total[0] & 0x3F; + padn = (last < 56) ? (56 - last) : (120 - last); + + ripemd160_update(ripemd160_padding, padn); + ripemd160_update(msglen, 8); + + #pragma clang loop unroll(full) + for (int i = 0; i < 5; i++) { + ((uint32_t*)result)[i] = ctx->state[i]; + } +} + +WASM_EXPORT +const uint32_t STATE_SIZE = sizeof(*ctx); + +WASM_EXPORT +uint8_t* Hash_GetState() { + return (uint8_t*) ctx; +} + +WASM_EXPORT +void Hash_Calculate(uint32_t length) { + Hash_Init(); + Hash_Update(length); + Hash_Final(); +} diff --git a/frontend/node_modules/hash-wasm/src/scrypt.c b/frontend/node_modules/hash-wasm/src/scrypt.c new file mode 100644 index 0000000..5271ed8 --- /dev/null +++ b/frontend/node_modules/hash-wasm/src/scrypt.c @@ -0,0 +1,294 @@ +/* + * Copyright 2009 Colin Percival + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * This file was originally written by Colin Percival as part of the Tarsnap + * online backup system. + * + * Modified for hash-wasm by Dani Biró + */ + +#include "hash-wasm.h" + +#define BYTES_PER_PAGE 65536 + +uint8_t *B = NULL; +uint64_t B_size = 0; + +WASM_EXPORT +int8_t Hash_SetMemorySize(uint32_t total_bytes) { + uint32_t bytes_required = total_bytes - B_size; + + if (bytes_required > 0) { + uint32_t blocks = bytes_required / BYTES_PER_PAGE; + if (blocks * BYTES_PER_PAGE < bytes_required) { + blocks += 1; + } + + if (__builtin_wasm_memory_grow(0, blocks) == -1) { + return -1; + } + + B_size += blocks * BYTES_PER_PAGE; + } + + return 0; +} + +WASM_EXPORT +uint8_t *Hash_GetBuffer() { + if (B == NULL) { + // start of new memory + B = (uint8_t *)(__builtin_wasm_memory_size(0) * BYTES_PER_PAGE); + // always preallocate 16kb to not cause problems with the other hashes + if (Hash_SetMemorySize(512 * 1024) == -1) { + return NULL; + } + } + + return B; +} + +static inline uint32_t le32dec(const void *pp) { + return ((uint32_t *)pp)[0]; +} + +static inline void le32enc(void *pp, uint32_t x) { + ((uint32_t *)pp)[0] = x; +} + +/** + * salsa20_8(B): + * Apply the salsa20/8 core to the provided block. + */ +static void salsa20_8(uint32_t B[16]) { + uint32_t x[16]; + + #pragma clang loop unroll(full) + for (uint8_t i = 0; i < 8; i++) { + ((uint64_t *)x)[i] = ((uint64_t *)B)[i]; + } + + #pragma clang loop unroll(full) + for (uint8_t i = 0; i < 8; i += 2) { + #define R(a, b) (((a) << (b)) | ((a) >> (32 - (b)))) + /* Operate on columns. */ + x[4] ^= R(x[0] + x[12], 7); + x[8] ^= R(x[4] + x[0], 9); + x[12] ^= R(x[8] + x[4], 13); + x[0] ^= R(x[12] + x[8], 18); + + x[9] ^= R(x[5] + x[1], 7); + x[13] ^= R(x[9] + x[5], 9); + x[1] ^= R(x[13] + x[9], 13); + x[5] ^= R(x[1] + x[13], 18); + + x[14] ^= R(x[10] + x[6], 7); + x[2] ^= R(x[14] + x[10], 9); + x[6] ^= R(x[2] + x[14], 13); + x[10] ^= R(x[6] + x[2], 18); + + x[3] ^= R(x[15] + x[11], 7); + x[7] ^= R(x[3] + x[15], 9); + x[11] ^= R(x[7] + x[3], 13); + x[15] ^= R(x[11] + x[7], 18); + + /* Operate on rows. */ + x[1] ^= R(x[0] + x[3], 7); + x[2] ^= R(x[1] + x[0], 9); + x[3] ^= R(x[2] + x[1], 13); + x[0] ^= R(x[3] + x[2], 18); + + x[6] ^= R(x[5] + x[4], 7); + x[7] ^= R(x[6] + x[5], 9); + x[4] ^= R(x[7] + x[6], 13); + x[5] ^= R(x[4] + x[7], 18); + + x[11] ^= R(x[10] + x[9], 7); + x[8] ^= R(x[11] + x[10], 9); + x[9] ^= R(x[8] + x[11], 13); + x[10] ^= R(x[9] + x[8], 18); + + x[12] ^= R(x[15] + x[14], 7); + x[13] ^= R(x[12] + x[15], 9); + x[14] ^= R(x[13] + x[12], 13); + x[15] ^= R(x[14] + x[13], 18); + #undef R + } + + #pragma clang loop unroll(full) + for (uint8_t i = 0; i < 16; i++) { + B[i] += x[i]; + } +} + +/** + * blockmix_salsa8(Bin, Bout, X, r): + * Compute Bout = BlockMix_{salsa20/8, r}(Bin). The input Bin must be 128r + * bytes in length; the output Bout must also be the same size. The + * temporary space X must be 64 bytes. + */ +static void blockmix_salsa8(const uint32_t *Bin, uint32_t *Bout, uint32_t *X, int r) { + /* 1: X <-- B_{2r - 1} */ + #pragma clang loop unroll(full) + for (uint8_t i = 0; i < 8; i++) { + ((uint64_t *)X)[i] = ((uint64_t *)&Bin[(2 * r - 1) * 16])[i]; + } + + /* 2: for i = 0 to 2r - 1 do */ + for (uint32_t i = 0; i < 2 * r; i += 2) { + /* 3: X <-- H(X \xor B_i) */ + #pragma clang loop unroll(full) + for (uint8_t j = 0; j < 8; j++) { + ((uint64_t *)X)[j] ^= ((uint64_t *)&Bin[i * 16])[j]; + } + salsa20_8(X); + + /* 4: Y_i <-- X */ + /* 6: B' <-- (Y_0, Y_2 ... Y_{2r-2}, Y_1, Y_3 ... Y_{2r-1}) */ + #pragma clang loop unroll(full) + for (uint8_t j = 0; j < 8; j++) { + ((uint64_t *)&Bout[i * 8])[j] = ((uint64_t *)X)[j]; + } + + /* 3: X <-- H(X \xor B_i) */ + #pragma clang loop unroll(full) + for (uint8_t j = 0; j < 8; j++) { + ((uint64_t *)X)[j] ^= ((uint64_t *)&Bin[i * 16 + 16])[j]; + } + salsa20_8(X); + + /* 4: Y_i <-- X */ + /* 6: B' <-- (Y_0, Y_2 ... Y_{2r-2}, Y_1, Y_3 ... Y_{2r-1}) */ + #pragma clang loop unroll(full) + for (uint8_t j = 0; j < 8; j++) { + ((uint64_t *)&Bout[i * 8 + r * 16])[j] = ((uint64_t *)X)[j]; + } + } +} + +/** + * integerify(B, r): + * Return the result of parsing B_{2r-1} as a little-endian integer. + */ +static inline uint64_t integerify(const void *B, int r) { + const uint32_t *X = (const void *)((uintptr_t)(B) + (2 * r - 1) * 64); + + return (((uint64_t)(X[1]) << 32) + X[0]); +} + +/** + * smix(B, r, N, V, XY): + * Compute B = SMix_r(B, N). The input B must be 128r bytes in length; + * the temporary storage V must be 128rN bytes in length; the temporary + * storage XY must be 256r + 64 bytes in length. The value N must be a + * power of 2 greater than 1. The arrays B, V, and XY must be aligned to a + * multiple of 64 bytes. + */ +void smix(uint8_t *B, int r, uint64_t N, void *_V, void *XY) { + uint32_t *X = XY; + uint32_t *Y = (void *)((uint8_t *)(XY) + 128 * r); + uint32_t *Z = (void *)((uint8_t *)(XY) + 256 * r); + uint32_t *V = _V; + + /* 1: X <-- B */ + for (uint32_t k = 0; k < 32 * r; k++) { + X[k] = le32dec(&B[4 * k]); + } + + /* 2: for i = 0 to N - 1 do */ + for (uint32_t i = 0; i < N; i += 2) { + /* 3: V_i <-- X */ + + for (uint32_t j = 0; j < r; j++) { + uint64_t *dest = &(((uint64_t *)&V[i * (32 * r)])[j * 16]); + uint64_t *src = &(((uint64_t *)X)[j * 16]); + #pragma clang loop unroll(full) + for (uint8_t jj = 0; jj < 16; jj++) { + dest[jj] = src[jj]; + } + } + /* 4: X <-- H(X) */ + blockmix_salsa8(X, Y, Z, r); + + /* 3: V_i <-- X */ + for (uint32_t j = 0; j < r; j++) { + uint64_t *dest = &(((uint64_t *)&V[(i + 1) * (32 * r)])[j * 16]); + uint64_t *src = &(((uint64_t *)Y)[j * 16]); + #pragma clang loop unroll(full) + for (uint8_t jj = 0; jj < 16; jj++) { + dest[jj] = src[jj]; + } + } + + /* 4: X <-- H(X) */ + blockmix_salsa8(Y, X, Z, r); + } + + /* 6: for i = 0 to N - 1 do */ + for (uint32_t i = 0; i < N; i += 2) { + /* 7: j <-- Integerify(X) mod N */ + uint32_t j = integerify(X, r) & (N - 1); + + /* 8: X <-- H(X \xor V_j) */ + for (uint32_t z = 0; z < r; z++) { + uint64_t *dest = &(((uint64_t *)X)[z * 16]); + uint64_t *src = &(((uint64_t *)&V[j * (32 * r)])[z * 16]); + #pragma clang loop unroll(full) + for (uint8_t zz = 0; zz < 16; zz++) { + dest[zz] ^= src[zz]; + } + } + blockmix_salsa8(X, Y, Z, r); + + /* 7: j <-- Integerify(X) mod N */ + j = integerify(Y, r) & (N - 1); + + /* 8: X <-- H(X \xor V_j) */ + for (uint32_t z = 0; z < r; z++) { + uint64_t *dest = &(((uint64_t *)Y)[z * 16]); + uint64_t *src = &(((uint64_t *)&V[j * (32 * r)])[z * 16]); + #pragma clang loop unroll(full) + for (uint8_t zz = 0; zz < 16; zz++) { + dest[zz] ^= src[zz]; + } + } + blockmix_salsa8(Y, X, Z, r); + } + + /* 10: B' <-- X */ + for (uint32_t k = 0; k < 32 * r; k++) { + le32enc(&B[4 * k], X[k]); + } +} + +WASM_EXPORT +void scrypt(uint32_t blockSize, uint32_t costFactor, uint32_t parallelism) { + uint8_t *V = &B[128 * blockSize * parallelism]; + uint8_t *XY = &V[128 * blockSize * costFactor]; + + for (uint32_t i = 0; i < parallelism; i++) { + smix(&B[i * 128 * blockSize], blockSize, costFactor, V, XY); + } +} diff --git a/frontend/node_modules/hash-wasm/src/sha1.c b/frontend/node_modules/hash-wasm/src/sha1.c new file mode 100644 index 0000000..e56c8c8 --- /dev/null +++ b/frontend/node_modules/hash-wasm/src/sha1.c @@ -0,0 +1,192 @@ +/* +SHA-1 in C +By Steve Reid +100% Public Domain + +Modified for hash-wasm by Dani Biró +*/ + +#define WITH_BUFFER +#include "hash-wasm.h" + +#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits)))) + +/* blk0() and blk() perform the initial expand. */ +/* I got the idea of expanding during the round function from SSLeay */ +#define blk0(i) \ + (block->l[i] = (rol(block->l[i], 24) & 0xFF00FF00) | \ + (rol(block->l[i], 8) & 0x00FF00FF)) + +#define blk(i) \ + (block->l[i & 15] = rol(block->l[(i + 13) & 15] ^ \ + block->l[(i + 8) & 15] ^ \ + block->l[(i + 2) & 15] ^ \ + block->l[i & 15], \ + 1)) + +struct SHA1_CTX { + uint32_t state[5]; + uint32_t count[2]; + uint8_t buffer[64]; +}; + +struct SHA1_CTX sctx; +struct SHA1_CTX* context = &sctx; + +/* (R0+R1), R2, R3, R4 are the different operations used in SHA1 */ +#define R0(v, w, x, y, z, i) \ + z += ((w & (x ^ y)) ^ y) + blk0(i) + 0x5A827999 + rol(v, 5); \ + w = rol(w, 30); +#define R1(v, w, x, y, z, i) \ + z += ((w & (x ^ y)) ^ y) + blk(i) + 0x5A827999 + rol(v, 5); \ + w = rol(w, 30); +#define R2(v, w, x, y, z, i) \ + z += (w ^ x ^ y) + blk(i) + 0x6ED9EBA1 + rol(v, 5); \ + w = rol(w, 30); +#define R3(v, w, x, y, z, i) \ + z += (((w | x) & y) | (w & x)) + blk(i) + 0x8F1BBCDC + rol(v, 5); \ + w = rol(w, 30); +#define R4(v, w, x, y, z, i) \ + z += (w ^ x ^ y) + blk(i) + 0xCA62C1D6 + rol(v, 5); \ + w = rol(w, 30); + +/* Hash a single 512-bit block. This is the core of the algorithm. */ +void SHA1Transform(uint32_t state[5], const uint8_t buffer[64]) { + uint32_t a, b, c, d, e; + typedef union { + uint8_t c[64]; + uint32_t l[16]; + uint64_t ll[8]; + } CHAR64LONG16; + + CHAR64LONG16 block[1]; /* use array to appear as a pointer */ + + #pragma clang loop unroll(full) + for (uint8_t i = 0; i < 8; i++) { + block->ll[i] = *(uint64_t*)&buffer[i * 8]; + } + + /* Copy context->state[] to working vars */ + a = state[0]; + b = state[1]; + c = state[2]; + d = state[3]; + e = state[4]; + + /* 4 rounds of 20 operations each. Loop unrolled. */ + R0(a, b, c, d, e, 0); R0(e, a, b, c, d, 1); R0(d, e, a, b, c, 2); R0(c, d, e, a, b, 3); + R0(b, c, d, e, a, 4); R0(a, b, c, d, e, 5); R0(e, a, b, c, d, 6); R0(d, e, a, b, c, 7); + R0(c, d, e, a, b, 8); R0(b, c, d, e, a, 9); R0(a, b, c, d, e, 10); R0(e, a, b, c, d, 11); + R0(d, e, a, b, c, 12); R0(c, d, e, a, b, 13); R0(b, c, d, e, a, 14); R0(a, b, c, d, e, 15); + R1(e, a, b, c, d, 16); R1(d, e, a, b, c, 17); R1(c, d, e, a, b, 18); R1(b, c, d, e, a, 19); + R2(a, b, c, d, e, 20); R2(e, a, b, c, d, 21); R2(d, e, a, b, c, 22); R2(c, d, e, a, b, 23); + R2(b, c, d, e, a, 24); R2(a, b, c, d, e, 25); R2(e, a, b, c, d, 26); R2(d, e, a, b, c, 27); + R2(c, d, e, a, b, 28); R2(b, c, d, e, a, 29); R2(a, b, c, d, e, 30); R2(e, a, b, c, d, 31); + R2(d, e, a, b, c, 32); R2(c, d, e, a, b, 33); R2(b, c, d, e, a, 34); R2(a, b, c, d, e, 35); + R2(e, a, b, c, d, 36); R2(d, e, a, b, c, 37); R2(c, d, e, a, b, 38); R2(b, c, d, e, a, 39); + R3(a, b, c, d, e, 40); R3(e, a, b, c, d, 41); R3(d, e, a, b, c, 42); R3(c, d, e, a, b, 43); + R3(b, c, d, e, a, 44); R3(a, b, c, d, e, 45); R3(e, a, b, c, d, 46); R3(d, e, a, b, c, 47); + R3(c, d, e, a, b, 48); R3(b, c, d, e, a, 49); R3(a, b, c, d, e, 50); R3(e, a, b, c, d, 51); + R3(d, e, a, b, c, 52); R3(c, d, e, a, b, 53); R3(b, c, d, e, a, 54); R3(a, b, c, d, e, 55); + R3(e, a, b, c, d, 56); R3(d, e, a, b, c, 57); R3(c, d, e, a, b, 58); R3(b, c, d, e, a, 59); + R4(a, b, c, d, e, 60); R4(e, a, b, c, d, 61); R4(d, e, a, b, c, 62); R4(c, d, e, a, b, 63); + R4(b, c, d, e, a, 64); R4(a, b, c, d, e, 65); R4(e, a, b, c, d, 66); R4(d, e, a, b, c, 67); + R4(c, d, e, a, b, 68); R4(b, c, d, e, a, 69); R4(a, b, c, d, e, 70); R4(e, a, b, c, d, 71); + R4(d, e, a, b, c, 72); R4(c, d, e, a, b, 73); R4(b, c, d, e, a, 74); R4(a, b, c, d, e, 75); + R4(e, a, b, c, d, 76); R4(d, e, a, b, c, 77); R4(c, d, e, a, b, 78); R4(b, c, d, e, a, 79); + + /* Add the working vars back into context.state[] */ + state[0] += a; + state[1] += b; + state[2] += c; + state[3] += d; + state[4] += e; +} + +/* SHA1Init - Initialize new context */ +WASM_EXPORT +void Hash_Init() { + context->state[0] = 0x67452301; + context->state[1] = 0xEFCDAB89; + context->state[2] = 0x98BADCFE; + context->state[3] = 0x10325476; + context->state[4] = 0xC3D2E1F0; + context->count[0] = context->count[1] = 0; +} + +void SHA1Update(const uint8_t* data, uint32_t len) { + uint32_t i; + + uint32_t j = context->count[0]; + if ((context->count[0] += len << 3) < j) { + context->count[1]++; + } + + context->count[1] += (len >> 29); + j = (j >> 3) & 63; + + if ((j + len) > 63) { + uint8_t end = i = 64 - j; + for (uint8_t z = 0; z < end; z++) { + context->buffer[j + z] = data[z]; + } + SHA1Transform(context->state, context->buffer); + for (; i + 63 < len; i += 64) { + SHA1Transform(context->state, &data[i]); + } + j = 0; + } else { + i = 0; + } + + for (uint8_t z = 0; z < len - i; z++) { + context->buffer[j + z] = data[i + z]; + } +} + +WASM_EXPORT +void Hash_Update(uint32_t len) { + SHA1Update(main_buffer, len); +} + +/* Add padding and return the message digest. */ +WASM_EXPORT +void Hash_Final() { + uint8_t* result = main_buffer; + uint8_t finalcount[8]; + uint8_t c; + + for (uint8_t i = 0; i < 8; i++) { + finalcount[i] = (uint8_t)( + (context->count[(i >= 4 ? 0 : 1)] >> ((3 - (i & 3)) * 8)) & 255); + } + + c = 0200; + SHA1Update(&c, 1); + while ((context->count[0] & 504) != 448) { + c = 0000; + SHA1Update(&c, 1); + } + + SHA1Update(finalcount, 8); /* Should cause a SHA1Transform() */ + + for (uint8_t i = 0; i < 20; i++) { + result[i] = + (uint8_t)((context->state[i >> 2] >> ((3 - (i & 3)) * 8)) & 255); + } +} + +WASM_EXPORT +const uint32_t STATE_SIZE = sizeof(*context); + +WASM_EXPORT +uint8_t* Hash_GetState() { + return (uint8_t*) context; +} + +WASM_EXPORT +void Hash_Calculate(uint32_t length) { + Hash_Init(); + Hash_Update(length); + Hash_Final(); +} diff --git a/frontend/node_modules/hash-wasm/src/sha256.c b/frontend/node_modules/hash-wasm/src/sha256.c new file mode 100644 index 0000000..0e2bb1e --- /dev/null +++ b/frontend/node_modules/hash-wasm/src/sha256.c @@ -0,0 +1,295 @@ +/* sha256.c - an implementation of SHA-256/224 hash functions + * based on FIPS 180-3 (Federal Information Processing Standart). + * + * Copyright (c) 2010, Aleksey Kravchenko + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH + * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, + * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM + * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE + * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + * PERFORMANCE OF THIS SOFTWARE. + + * Modified for hash-wasm by Dani Biró + */ + +#define WITH_BUFFER +#include "hash-wasm.h" + +#define sha256_block_size 64 +#define sha256_hash_size 32 +#define sha224_hash_size 28 +#define ROTR32(dword, n) ((dword) >> (n) ^ ((dword) << (32 - (n)))) +#define bswap_32(x) __builtin_bswap32(x) + +struct sha256_ctx { + uint32_t message[16]; /* 512-bit buffer for leftovers */ + uint64_t length; /* number of processed bytes */ + uint32_t hash[8]; /* 256-bit algorithm internal hashing state */ + uint32_t digest_length; /* length of the algorithm digest in bytes */ +}; + +struct sha256_ctx sctx; +struct sha256_ctx* ctx = &sctx; + +/* SHA-224 and SHA-256 constants for 64 rounds. These words represent + * the first 32 bits of the fractional parts of the cube + * roots of the first 64 prime numbers. */ +static const uint32_t rhash_k256[64] = { + 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, + 0x923f82a4, 0xab1c5ed5, 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, + 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174, 0xe49b69c1, 0xefbe4786, + 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da, + 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, + 0x06ca6351, 0x14292967, 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, + 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85, 0xa2bfe8a1, 0xa81a664b, + 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070, + 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, + 0x5b9cca4f, 0x682e6ff3, 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, + 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2 +}; + +/* The SHA256/224 functions defined by FIPS 180-3, 4.1.2 */ +/* Optimized version of Ch(x,y,z)=((x & y) | (~x & z)) */ +#define Ch(x, y, z) ((z) ^ ((x) & ((y) ^ (z)))) +/* Optimized version of Maj(x,y,z)=((x & y) ^ (x & z) ^ (y & z)) */ +#define Maj(x, y, z) (((x) & (y)) ^ ((z) & ((x) ^ (y)))) + +#define Sigma0(x) (ROTR32((x), 2) ^ ROTR32((x), 13) ^ ROTR32((x), 22)) +#define Sigma1(x) (ROTR32((x), 6) ^ ROTR32((x), 11) ^ ROTR32((x), 25)) +#define sigma0(x) (ROTR32((x), 7) ^ ROTR32((x), 18) ^ ((x) >> 3)) +#define sigma1(x) (ROTR32((x), 17) ^ ROTR32((x), 19) ^ ((x) >> 10)) + +/* Recalculate element n-th of circular buffer W using formula + * W[n] = sigma1(W[n - 2]) + W[n - 7] + sigma0(W[n - 15]) + W[n - 16]; */ +#define RECALCULATE_W(W, n) \ + (W[n] += \ + (sigma1(W[(n - 2) & 15]) + W[(n - 7) & 15] + sigma0(W[(n - 15) & 15]))) + +#define ROUND(a, b, c, d, e, f, g, h, k, data) \ + { \ + uint32_t T1 = h + Sigma1(e) + Ch(e, f, g) + k + (data); \ + d += T1, h = T1 + Sigma0(a) + Maj(a, b, c); \ + } +#define ROUND_1_16(a, b, c, d, e, f, g, h, n) \ + ROUND(a, b, c, d, e, f, g, h, rhash_k256[n], W[n] = bswap_32(block[n])) +#define ROUND_17_64(a, b, c, d, e, f, g, h, n) \ + ROUND(a, b, c, d, e, f, g, h, k[n], RECALCULATE_W(W, n)) + +/** + * Initialize context before calculaing hash. + * + */ +void sha256_init() { + /* Initial values. These words were obtained by taking the first 32 + * bits of the fractional parts of the square roots of the first + * eight prime numbers. */ + static const uint32_t SHA256_H0[8] = { + 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a, + 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19 + }; + + ctx->length = 0; + ctx->digest_length = sha256_hash_size; + + /* initialize algorithm state */ + + #pragma clang loop unroll(full) + for (uint8_t i = 0; i < 8; i += 2) { + *(uint64_t*)&ctx->hash[i] = *(uint64_t*)&SHA256_H0[i]; + } +} + +/** + * Initialize context before calculaing hash. + * + */ +void sha224_init() { + /* Initial values from FIPS 180-3. These words were obtained by taking + * bits from 33th to 64th of the fractional parts of the square + * roots of ninth through sixteenth prime numbers. */ + static const uint32_t SHA224_H0[8] = { + 0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939, + 0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4 + }; + + ctx->length = 0; + ctx->digest_length = sha224_hash_size; + + #pragma clang loop unroll(full) + for (uint8_t i = 0; i < 8; i += 2) { + *(uint64_t*)&ctx->hash[i] = *(uint64_t*)&SHA224_H0[i]; + } +} + +WASM_EXPORT +void Hash_Init(uint32_t bits) { + if (bits == 224) { + sha224_init(); + } else { + sha256_init(); + } +} + +/** + * The core transformation. Process a 512-bit block. + * + * @param hash algorithm state + * @param block the message block to process + */ +static void sha256_process_block(uint32_t hash[8], uint32_t block[16]) { + uint32_t A, B, C, D, E, F, G, H; + uint32_t W[16]; + const uint32_t* k; + int i; + + A = hash[0], B = hash[1], C = hash[2], D = hash[3]; + E = hash[4], F = hash[5], G = hash[6], H = hash[7]; + + /* Compute SHA using alternate Method: FIPS 180-3 6.1.3 */ + ROUND_1_16(A, B, C, D, E, F, G, H, 0); + ROUND_1_16(H, A, B, C, D, E, F, G, 1); + ROUND_1_16(G, H, A, B, C, D, E, F, 2); + ROUND_1_16(F, G, H, A, B, C, D, E, 3); + ROUND_1_16(E, F, G, H, A, B, C, D, 4); + ROUND_1_16(D, E, F, G, H, A, B, C, 5); + ROUND_1_16(C, D, E, F, G, H, A, B, 6); + ROUND_1_16(B, C, D, E, F, G, H, A, 7); + ROUND_1_16(A, B, C, D, E, F, G, H, 8); + ROUND_1_16(H, A, B, C, D, E, F, G, 9); + ROUND_1_16(G, H, A, B, C, D, E, F, 10); + ROUND_1_16(F, G, H, A, B, C, D, E, 11); + ROUND_1_16(E, F, G, H, A, B, C, D, 12); + ROUND_1_16(D, E, F, G, H, A, B, C, 13); + ROUND_1_16(C, D, E, F, G, H, A, B, 14); + ROUND_1_16(B, C, D, E, F, G, H, A, 15); + + #pragma clang loop unroll(full) + for (i = 16, k = &rhash_k256[16]; i < 64; i += 16, k += 16) { + ROUND_17_64(A, B, C, D, E, F, G, H, 0); + ROUND_17_64(H, A, B, C, D, E, F, G, 1); + ROUND_17_64(G, H, A, B, C, D, E, F, 2); + ROUND_17_64(F, G, H, A, B, C, D, E, 3); + ROUND_17_64(E, F, G, H, A, B, C, D, 4); + ROUND_17_64(D, E, F, G, H, A, B, C, 5); + ROUND_17_64(C, D, E, F, G, H, A, B, 6); + ROUND_17_64(B, C, D, E, F, G, H, A, 7); + ROUND_17_64(A, B, C, D, E, F, G, H, 8); + ROUND_17_64(H, A, B, C, D, E, F, G, 9); + ROUND_17_64(G, H, A, B, C, D, E, F, 10); + ROUND_17_64(F, G, H, A, B, C, D, E, 11); + ROUND_17_64(E, F, G, H, A, B, C, D, 12); + ROUND_17_64(D, E, F, G, H, A, B, C, 13); + ROUND_17_64(C, D, E, F, G, H, A, B, 14); + ROUND_17_64(B, C, D, E, F, G, H, A, 15); + } + + hash[0] += A, hash[1] += B, hash[2] += C, hash[3] += D; + hash[4] += E, hash[5] += F, hash[6] += G, hash[7] += H; +} + +/** + * Calculate message hash. + * Can be called repeatedly with chunks of the message to be hashed. + * + * @param size length of the message chunk + */ +WASM_EXPORT +void Hash_Update(uint32_t size) { + const uint8_t* msg = main_buffer; + uint32_t index = (uint32_t)ctx->length & 63; + ctx->length += size; + + /* fill partial block */ + if (index) { + uint32_t left = sha256_block_size - index; + uint32_t end = size < left ? size : left; + uint8_t* message8 = (uint8_t*)ctx->message; + for (uint8_t i = 0; i < end; i++) { + *(message8 + index + i) = msg[i]; + } + if (size < left) return; + + /* process partial block */ + sha256_process_block(ctx->hash, (uint32_t*)ctx->message); + msg += left; + size -= left; + } + + while (size >= sha256_block_size) { + uint32_t* aligned_message_block = (uint32_t*)msg; + + sha256_process_block(ctx->hash, aligned_message_block); + msg += sha256_block_size; + size -= sha256_block_size; + } + + if (size) { + /* save leftovers */ + for (uint8_t i = 0; i < size; i++) { + *(((uint8_t*)ctx->message) + i) = msg[i]; + } + } +} + +/** + * Store calculated hash into the given array. + * + */ +WASM_EXPORT +void Hash_Final() { + uint32_t index = ((uint32_t)ctx->length & 63) >> 2; + uint32_t shift = ((uint32_t)ctx->length & 3) * 8; + + /* pad message and run for last block */ + + /* append the byte 0x80 to the message */ + ctx->message[index] &= ~(0xFFFFFFFFu << shift); + ctx->message[index++] ^= 0x80u << shift; + + /* if no room left in the message to store 64-bit message length */ + if (index > 14) { + /* then fill the rest with zeros and process it */ + while (index < 16) { + ctx->message[index++] = 0; + } + sha256_process_block(ctx->hash, ctx->message); + index = 0; + } + + while (index < 14) { + ctx->message[index++] = 0; + } + + ctx->message[14] = bswap_32((uint32_t)(ctx->length >> 29)); + ctx->message[15] = bswap_32((uint32_t)(ctx->length << 3)); + sha256_process_block(ctx->hash, ctx->message); + + #pragma clang loop unroll(full) + for (int32_t i = 7; i >= 0; i--) { + ctx->hash[i] = bswap_32(ctx->hash[i]); + } + + for (uint8_t i = 0; i < ctx->digest_length; i++) { + main_buffer[i] = *(((uint8_t*)ctx->hash) + i); + } +} + +WASM_EXPORT +const uint32_t STATE_SIZE = sizeof(*ctx); + +WASM_EXPORT +uint8_t* Hash_GetState() { + return (uint8_t*) ctx; +} + +WASM_EXPORT +void Hash_Calculate(uint32_t length, uint32_t initParam) { + Hash_Init(initParam); + Hash_Update(length); + Hash_Final(); +} diff --git a/frontend/node_modules/hash-wasm/src/sha3.c b/frontend/node_modules/hash-wasm/src/sha3.c new file mode 100644 index 0000000..80057c7 --- /dev/null +++ b/frontend/node_modules/hash-wasm/src/sha3.c @@ -0,0 +1,332 @@ +/* sha3.c - an implementation of Secure Hash Algorithm 3 (Keccak). + * based on the + * The Keccak SHA-3 submission. Submission to NIST (Round 3), 2011 + * by Guido Bertoni, Joan Daemen, Michaël Peeters and Gilles Van Assche + * + * Copyright (c) 2013, Aleksey Kravchenko + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH + * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, + * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM + * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE + * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + * PERFORMANCE OF THIS SOFTWARE. + + * Modified for hash-wasm by Dani Biró + */ + +#define WITH_BUFFER +#include "hash-wasm.h" + +#define NumberOfRounds 24 +#define sha3_max_permutation_size 25 +#define sha3_max_rate_in_qwords 24 + +#define I64(x) x##ULL +#define ROTL64(qword, n) ((qword) << (n) ^ ((qword) >> (64 - (n)))) + +struct SHA3_CTX { + /* 1600 bits algorithm hashing state */ + uint64_t hash[sha3_max_permutation_size]; + /* 1536-bit buffer for leftovers */ + uint64_t message[sha3_max_rate_in_qwords]; + /* count of bytes in the message[] buffer */ + unsigned rest; + /* size of a message block processed at once */ + unsigned block_size; +}; + +struct SHA3_CTX sctx; +struct SHA3_CTX* ctx = &sctx; + +/* SHA3 (Keccak) constants for 24 rounds */ +static uint64_t keccak_round_constants[NumberOfRounds] = { + I64(0x0000000000000001), I64(0x0000000000008082), I64(0x800000000000808A), I64(0x8000000080008000), + I64(0x000000000000808B), I64(0x0000000080000001), I64(0x8000000080008081), I64(0x8000000000008009), + I64(0x000000000000008A), I64(0x0000000000000088), I64(0x0000000080008009), I64(0x000000008000000A), + I64(0x000000008000808B), I64(0x800000000000008B), I64(0x8000000000008089), I64(0x8000000000008003), + I64(0x8000000000008002), I64(0x8000000000000080), I64(0x000000000000800A), I64(0x800000008000000A), + I64(0x8000000080008081), I64(0x8000000000008080), I64(0x0000000080000001), I64(0x8000000080008008) +}; + +/* Initializing a sha3 context for given number of output bits */ +WASM_EXPORT +void Hash_Init(uint32_t bits) { + /* NB: The Keccak capacity parameter = bits * 2 */ + uint32_t rate = 1600 - bits * 2; + + for(int i = 0; i < sha3_max_permutation_size; i++) { + ctx->hash[i] = 0; + } + + for(int i = 0; i < sha3_max_rate_in_qwords; i++) { + ctx->message[i] = 0; + } + + ctx->rest = 0; + ctx->block_size = rate / 8; +} + +#define XORED_A(i) A[(i)] ^ A[(i) + 5] ^ A[(i) + 10] ^ A[(i) + 15] ^ A[(i) + 20] +#define THETA_STEP(i) \ + A[(i)] ^= D[(i)]; \ + A[(i) + 5] ^= D[(i)]; \ + A[(i) + 10] ^= D[(i)]; \ + A[(i) + 15] ^= D[(i)]; \ + A[(i) + 20] ^= D[(i)] + +/* Keccak theta() transformation */ +static void keccak_theta(uint64_t* A) { + uint64_t D[5]; + D[0] = ROTL64(XORED_A(1), 1) ^ XORED_A(4); + D[1] = ROTL64(XORED_A(2), 1) ^ XORED_A(0); + D[2] = ROTL64(XORED_A(3), 1) ^ XORED_A(1); + D[3] = ROTL64(XORED_A(4), 1) ^ XORED_A(2); + D[4] = ROTL64(XORED_A(0), 1) ^ XORED_A(3); + THETA_STEP(0); + THETA_STEP(1); + THETA_STEP(2); + THETA_STEP(3); + THETA_STEP(4); +} + +/* Keccak pi() transformation */ +static void keccak_pi(uint64_t* A) { + uint64_t A1; + A1 = A[1]; + A[1] = A[6]; + A[6] = A[9]; + A[9] = A[22]; + A[22] = A[14]; + A[14] = A[20]; + A[20] = A[2]; + A[2] = A[12]; + A[12] = A[13]; + A[13] = A[19]; + A[19] = A[23]; + A[23] = A[15]; + A[15] = A[4]; + A[4] = A[24]; + A[24] = A[21]; + A[21] = A[8]; + A[8] = A[16]; + A[16] = A[5]; + A[5] = A[3]; + A[3] = A[18]; + A[18] = A[17]; + A[17] = A[11]; + A[11] = A[7]; + A[7] = A[10]; + A[10] = A1; + /* note: A[ 0] is left as is */ +} + +#define CHI_STEP(i) \ + A0 = A[0 + (i)]; \ + A1 = A[1 + (i)]; \ + A[0 + (i)] ^= ~A1 & A[2 + (i)]; \ + A[1 + (i)] ^= ~A[2 + (i)] & A[3 + (i)]; \ + A[2 + (i)] ^= ~A[3 + (i)] & A[4 + (i)]; \ + A[3 + (i)] ^= ~A[4 + (i)] & A0; \ + A[4 + (i)] ^= ~A0 & A1 + +/* Keccak chi() transformation */ +static void keccak_chi(uint64_t* A) { + uint64_t A0, A1; + CHI_STEP(0); + CHI_STEP(5); + CHI_STEP(10); + CHI_STEP(15); + CHI_STEP(20); +} + +static void sha3_permutation(uint64_t* state) { + for (int round = 0; round < NumberOfRounds; round++) { + keccak_theta(state); + + /* apply Keccak rho() transformation */ + state[ 1] = ROTL64(state[ 1], 1); + state[ 2] = ROTL64(state[ 2], 62); + state[ 3] = ROTL64(state[ 3], 28); + state[ 4] = ROTL64(state[ 4], 27); + state[ 5] = ROTL64(state[ 5], 36); + state[ 6] = ROTL64(state[ 6], 44); + state[ 7] = ROTL64(state[ 7], 6); + state[ 8] = ROTL64(state[ 8], 55); + state[ 9] = ROTL64(state[ 9], 20); + state[10] = ROTL64(state[10], 3); + state[11] = ROTL64(state[11], 10); + state[12] = ROTL64(state[12], 43); + state[13] = ROTL64(state[13], 25); + state[14] = ROTL64(state[14], 39); + state[15] = ROTL64(state[15], 41); + state[16] = ROTL64(state[16], 45); + state[17] = ROTL64(state[17], 15); + state[18] = ROTL64(state[18], 21); + state[19] = ROTL64(state[19], 8); + state[20] = ROTL64(state[20], 18); + state[21] = ROTL64(state[21], 2); + state[22] = ROTL64(state[22], 61); + state[23] = ROTL64(state[23], 56); + state[24] = ROTL64(state[24], 14); + + keccak_pi(state); + keccak_chi(state); + + /* apply iota(state, round) */ + *state ^= keccak_round_constants[round]; + } +} + +/** + * The core transformation. Process the specified block of data. + * + * @param hash the algorithm state + * @param block the message block to process + * @param block_size the size of the processed block in bytes + */ +static void sha3_process_block( + uint64_t hash[25], const uint64_t* block, uint32_t block_size +) { + /* expanded loop */ + hash[0] ^= block[0]; + hash[1] ^= block[1]; + hash[2] ^= block[2]; + hash[3] ^= block[3]; + hash[4] ^= block[4]; + hash[5] ^= block[5]; + hash[6] ^= block[6]; + hash[7] ^= block[7]; + hash[8] ^= block[8]; + /* if not sha3-512 */ + if (block_size > 72) { + hash[9] ^= block[9]; + hash[10] ^= block[10]; + hash[11] ^= block[11]; + hash[12] ^= block[12]; + /* if not sha3-384 */ + if (block_size > 104) { + hash[13] ^= block[13]; + hash[14] ^= block[14]; + hash[15] ^= block[15]; + hash[16] ^= block[16]; + /* if not sha3-256 */ + if (block_size > 136) { + hash[17] ^= block[17]; +#ifdef FULL_SHA3_FAMILY_SUPPORT + /* if not sha3-224 */ + if (block_size > 144) { + hash[18] ^= block[18]; + hash[19] ^= block[19]; + hash[20] ^= block[20]; + hash[21] ^= block[21]; + hash[22] ^= block[22]; + hash[23] ^= block[23]; + hash[24] ^= block[24]; + } +#endif + } + } + } + /* make a permutation of the hash */ + sha3_permutation(hash); +} + +#define SHA3_FINALIZED 0x80000000 + +/** + * Calculate message hash. + * Can be called repeatedly with chunks of the message to be hashed. + * + * @param msg message chunk + * @param size length of the message chunk + */ +WASM_EXPORT +void Hash_Update(uint32_t size) { + const uint8_t* msg = main_buffer; + uint32_t index = (uint32_t)ctx->rest; + uint32_t block_size = (uint32_t)ctx->block_size; + + if (ctx->rest & SHA3_FINALIZED) return; /* too late for additional input */ + ctx->rest = (unsigned)((ctx->rest + size) % block_size); + + /* fill partial block */ + if (index) { + uint32_t left = block_size - index; + uint32_t end = size < left ? size : left; + uint8_t* msg_pointer = (uint8_t*)ctx->message + index; + for (uint32_t i = 0; i < end; i++) { + msg_pointer[i] = msg[i]; + } + if (size < left) return; + + /* process partial block */ + sha3_process_block(ctx->hash, ctx->message, block_size); + msg += left; + size -= left; + } + + while (size >= block_size) { + uint64_t* aligned_message_block = (uint64_t*)msg; + + sha3_process_block(ctx->hash, aligned_message_block, block_size); + msg += block_size; + size -= block_size; + } + + if (size) { + /* save leftovers */ + uint8_t* msg_pointer = (uint8_t*)ctx->message; + for (uint8_t i = 0; i < size; i++) { + msg_pointer[i] = msg[i]; + } + } +} + +/** + * Store calculated hash into the given array. + */ +WASM_EXPORT +void Hash_Final(uint8_t padding) { + uint32_t digest_length = 100 - ctx->block_size / 2; + const uint32_t block_size = ctx->block_size; + + if (!(ctx->rest & SHA3_FINALIZED)) { + /* clear the rest of the data queue */ + int8_t* start = (int8_t*)ctx->message + ctx->rest; + for (int i = 0; i < block_size - ctx->rest; i++) { + start[i] = 0; + } + ((int8_t*)ctx->message)[ctx->rest] |= padding; + ((int8_t*)ctx->message)[block_size - 1] |= 0x80; + + /* process final block */ + sha3_process_block(ctx->hash, ctx->message, block_size); + ctx->rest = SHA3_FINALIZED; /* mark context as finalized */ + } + + uint32_t* array32 = (uint32_t*)main_buffer; + uint32_t* hash32 = (uint32_t*)ctx->hash; + for (uint32_t i = 0; i < digest_length / 4; i++) { + array32[i] = hash32[i]; + } +} + +WASM_EXPORT +const uint32_t STATE_SIZE = sizeof(*ctx); + +WASM_EXPORT +uint8_t* Hash_GetState() { + return (uint8_t*) ctx; +} + +WASM_EXPORT +void Hash_Calculate(uint32_t length, uint32_t initParam, uint8_t finalParam) { + Hash_Init(initParam); + Hash_Update(length); + Hash_Final(finalParam); +} diff --git a/frontend/node_modules/hash-wasm/src/sha512.c b/frontend/node_modules/hash-wasm/src/sha512.c new file mode 100644 index 0000000..3f7ad01 --- /dev/null +++ b/frontend/node_modules/hash-wasm/src/sha512.c @@ -0,0 +1,308 @@ +/* sha512.c - an implementation of SHA-384/512 hash functions + * based on FIPS 180-3 (Federal Information Processing Standart). + * + * Copyright (c) 2010, Aleksey Kravchenko + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH + * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, + * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM + * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE + * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + * PERFORMANCE OF THIS SOFTWARE. + + * Modified for hash-wasm by Dani Biró + */ + +#define WITH_BUFFER +#include "hash-wasm.h" + +#define sha512_block_size 128 +#define sha512_hash_size 64 +#define sha384_hash_size 48 +#define I64(x) x##ULL +#define ROTR64(qword, n) ((qword) >> (n) ^ ((qword) << (64 - (n)))) +#define bswap_64(x) __builtin_bswap64(x) + +struct sha512_ctx { + uint64_t message[16]; /* 1024-bit buffer for leftovers */ + uint64_t length; /* number of processed bytes */ + uint64_t hash[8]; /* 512-bit algorithm internal hashing state */ + uint32_t digest_length; /* length of the algorithm digest in bytes */ +}; + +struct sha512_ctx sctx; +struct sha512_ctx* ctx = &sctx; + +/* SHA-384 and SHA-512 constants for 80 rounds. These qwords represent + * the first 64 bits of the fractional parts of the cube + * roots of the first 80 prime numbers. */ +static const uint64_t rhash_k512[80] = { + I64(0x428a2f98d728ae22), I64(0x7137449123ef65cd), I64(0xb5c0fbcfec4d3b2f), + I64(0xe9b5dba58189dbbc), I64(0x3956c25bf348b538), I64(0x59f111f1b605d019), + I64(0x923f82a4af194f9b), I64(0xab1c5ed5da6d8118), I64(0xd807aa98a3030242), + I64(0x12835b0145706fbe), I64(0x243185be4ee4b28c), I64(0x550c7dc3d5ffb4e2), + I64(0x72be5d74f27b896f), I64(0x80deb1fe3b1696b1), I64(0x9bdc06a725c71235), + I64(0xc19bf174cf692694), I64(0xe49b69c19ef14ad2), I64(0xefbe4786384f25e3), + I64(0x0fc19dc68b8cd5b5), I64(0x240ca1cc77ac9c65), I64(0x2de92c6f592b0275), + I64(0x4a7484aa6ea6e483), I64(0x5cb0a9dcbd41fbd4), I64(0x76f988da831153b5), + I64(0x983e5152ee66dfab), I64(0xa831c66d2db43210), I64(0xb00327c898fb213f), + I64(0xbf597fc7beef0ee4), I64(0xc6e00bf33da88fc2), I64(0xd5a79147930aa725), + I64(0x06ca6351e003826f), I64(0x142929670a0e6e70), I64(0x27b70a8546d22ffc), + I64(0x2e1b21385c26c926), I64(0x4d2c6dfc5ac42aed), I64(0x53380d139d95b3df), + I64(0x650a73548baf63de), I64(0x766a0abb3c77b2a8), I64(0x81c2c92e47edaee6), + I64(0x92722c851482353b), I64(0xa2bfe8a14cf10364), I64(0xa81a664bbc423001), + I64(0xc24b8b70d0f89791), I64(0xc76c51a30654be30), I64(0xd192e819d6ef5218), + I64(0xd69906245565a910), I64(0xf40e35855771202a), I64(0x106aa07032bbd1b8), + I64(0x19a4c116b8d2d0c8), I64(0x1e376c085141ab53), I64(0x2748774cdf8eeb99), + I64(0x34b0bcb5e19b48a8), I64(0x391c0cb3c5c95a63), I64(0x4ed8aa4ae3418acb), + I64(0x5b9cca4f7763e373), I64(0x682e6ff3d6b2b8a3), I64(0x748f82ee5defb2fc), + I64(0x78a5636f43172f60), I64(0x84c87814a1f0ab72), I64(0x8cc702081a6439ec), + I64(0x90befffa23631e28), I64(0xa4506cebde82bde9), I64(0xbef9a3f7b2c67915), + I64(0xc67178f2e372532b), I64(0xca273eceea26619c), I64(0xd186b8c721c0c207), + I64(0xeada7dd6cde0eb1e), I64(0xf57d4f7fee6ed178), I64(0x06f067aa72176fba), + I64(0x0a637dc5a2c898a6), I64(0x113f9804bef90dae), I64(0x1b710b35131c471b), + I64(0x28db77f523047d84), I64(0x32caab7b40c72493), I64(0x3c9ebe0a15c9bebc), + I64(0x431d67c49c100d4c), I64(0x4cc5d4becb3e42b6), I64(0x597f299cfc657e2a), + I64(0x5fcb6fab3ad6faec), I64(0x6c44198c4a475817) +}; + +/* The SHA512/384 functions defined by FIPS 180-3, 4.1.3 */ +/* Optimized version of Ch(x,y,z)=((x & y) | (~x & z)) */ +#define Ch(x, y, z) ((z) ^ ((x) & ((y) ^ (z)))) +/* Optimized version of Maj(x,y,z)=((x & y) ^ (x & z) ^ (y & z)) */ +#define Maj(x, y, z) (((x) & (y)) ^ ((z) & ((x) ^ (y)))) + +#define Sigma0(x) (ROTR64((x), 28) ^ ROTR64((x), 34) ^ ROTR64((x), 39)) +#define Sigma1(x) (ROTR64((x), 14) ^ ROTR64((x), 18) ^ ROTR64((x), 41)) +#define sigma0(x) (ROTR64((x), 1) ^ ROTR64((x), 8) ^ ((x) >> 7)) +#define sigma1(x) (ROTR64((x), 19) ^ ROTR64((x), 61) ^ ((x) >> 6)) + +/* Recalculate element n-th of circular buffer W using formula + * W[n] = sigma1(W[n - 2]) + W[n - 7] + sigma0(W[n - 15]) + W[n - 16]; */ +#define RECALCULATE_W(W, n) \ + (W[n] += \ + (sigma1(W[(n - 2) & 15]) + W[(n - 7) & 15] + sigma0(W[(n - 15) & 15]))) + +#define ROUND(a, b, c, d, e, f, g, h, k, data) \ + { \ + uint64_t T1 = h + Sigma1(e) + Ch(e, f, g) + k + (data); \ + d += T1, h = T1 + Sigma0(a) + Maj(a, b, c); \ + } +#define ROUND_1_16(a, b, c, d, e, f, g, h, n) \ + ROUND(a, b, c, d, e, f, g, h, rhash_k512[n], W[n] = bswap_64(block[n])) +#define ROUND_17_80(a, b, c, d, e, f, g, h, n) \ + ROUND(a, b, c, d, e, f, g, h, k[n], RECALCULATE_W(W, n)) + +/** + * Initialize context before calculating hash. + * + */ +void sha512_init() { + /* Initial values. These words were obtained by taking the first 32 + * bits of the fractional parts of the square roots of the first + * eight prime numbers. */ + static const uint64_t SHA512_H0[8] = { + I64(0x6a09e667f3bcc908), I64(0xbb67ae8584caa73b), I64(0x3c6ef372fe94f82b), + I64(0xa54ff53a5f1d36f1), I64(0x510e527fade682d1), I64(0x9b05688c2b3e6c1f), + I64(0x1f83d9abfb41bd6b), I64(0x5be0cd19137e2179) + }; + + ctx->length = 0; + ctx->digest_length = sha512_hash_size; + + /* initialize algorithm state */ + #pragma clang loop unroll(full) + for (uint8_t i = 0; i < 8; i++) { + ctx->hash[i] = SHA512_H0[i]; + } +} + +/** + * Initialize context before calculaing hash. + * + */ +void sha384_init() { + /* Initial values from FIPS 180-3. These words were obtained by taking + * the first sixty-four bits of the fractional parts of the square + * roots of ninth through sixteenth prime numbers. */ + static const uint64_t SHA384_H0[8] = { + I64(0xcbbb9d5dc1059ed8), I64(0x629a292a367cd507), I64(0x9159015a3070dd17), + I64(0x152fecd8f70e5939), I64(0x67332667ffc00b31), I64(0x8eb44a8768581511), + I64(0xdb0c2e0d64f98fa7), I64(0x47b5481dbefa4fa4) + }; + + ctx->length = 0; + ctx->digest_length = sha384_hash_size; + + #pragma clang loop unroll(full) + for (uint8_t i = 0; i < 8; i++) { + ctx->hash[i] = SHA384_H0[i]; + } +} + +WASM_EXPORT +void Hash_Init(uint32_t bits) { + if (bits == 384) { + sha384_init(); + } else { + sha512_init(); + } +} + +/** + * The core transformation. Process a 512-bit block. + * + * @param hash algorithm state + * @param block the message block to process + */ +static void sha512_process_block(uint64_t hash[8], uint64_t block[16]) { + uint64_t A, B, C, D, E, F, G, H; + uint64_t W[16]; + const uint64_t* k; + int i; + + A = hash[0], B = hash[1], C = hash[2], D = hash[3]; + E = hash[4], F = hash[5], G = hash[6], H = hash[7]; + + /* Compute SHA using alternate Method: FIPS 180-3 6.1.3 */ + ROUND_1_16(A, B, C, D, E, F, G, H, 0); + ROUND_1_16(H, A, B, C, D, E, F, G, 1); + ROUND_1_16(G, H, A, B, C, D, E, F, 2); + ROUND_1_16(F, G, H, A, B, C, D, E, 3); + ROUND_1_16(E, F, G, H, A, B, C, D, 4); + ROUND_1_16(D, E, F, G, H, A, B, C, 5); + ROUND_1_16(C, D, E, F, G, H, A, B, 6); + ROUND_1_16(B, C, D, E, F, G, H, A, 7); + ROUND_1_16(A, B, C, D, E, F, G, H, 8); + ROUND_1_16(H, A, B, C, D, E, F, G, 9); + ROUND_1_16(G, H, A, B, C, D, E, F, 10); + ROUND_1_16(F, G, H, A, B, C, D, E, 11); + ROUND_1_16(E, F, G, H, A, B, C, D, 12); + ROUND_1_16(D, E, F, G, H, A, B, C, 13); + ROUND_1_16(C, D, E, F, G, H, A, B, 14); + ROUND_1_16(B, C, D, E, F, G, H, A, 15); + + #pragma clang loop unroll(full) + for (i = 16, k = &rhash_k512[16]; i < 80; i += 16, k += 16) { + ROUND_17_80(A, B, C, D, E, F, G, H, 0); + ROUND_17_80(H, A, B, C, D, E, F, G, 1); + ROUND_17_80(G, H, A, B, C, D, E, F, 2); + ROUND_17_80(F, G, H, A, B, C, D, E, 3); + ROUND_17_80(E, F, G, H, A, B, C, D, 4); + ROUND_17_80(D, E, F, G, H, A, B, C, 5); + ROUND_17_80(C, D, E, F, G, H, A, B, 6); + ROUND_17_80(B, C, D, E, F, G, H, A, 7); + ROUND_17_80(A, B, C, D, E, F, G, H, 8); + ROUND_17_80(H, A, B, C, D, E, F, G, 9); + ROUND_17_80(G, H, A, B, C, D, E, F, 10); + ROUND_17_80(F, G, H, A, B, C, D, E, 11); + ROUND_17_80(E, F, G, H, A, B, C, D, 12); + ROUND_17_80(D, E, F, G, H, A, B, C, 13); + ROUND_17_80(C, D, E, F, G, H, A, B, 14); + ROUND_17_80(B, C, D, E, F, G, H, A, 15); + } + + hash[0] += A, hash[1] += B, hash[2] += C, hash[3] += D; + hash[4] += E, hash[5] += F, hash[6] += G, hash[7] += H; +} + +/** + * Calculate message hash. + * Can be called repeatedly with chunks of the message to be hashed. + * + * @param size length of the message chunk + */ +WASM_EXPORT +void Hash_Update(uint32_t size) { + const uint8_t* msg = main_buffer; + uint32_t index = (uint32_t)ctx->length & 127; + ctx->length += size; + + /* fill partial block */ + if (index) { + uint32_t left = sha512_block_size - index; + uint32_t end = size < left ? size : left; + uint8_t* message8 = (uint8_t*)ctx->message; + for (uint8_t i = 0; i < end; i++) { + *(message8 + index + i) = msg[i]; + } + if (size < left) return; + + /* process partial block */ + sha512_process_block(ctx->hash, ctx->message); + msg += left; + size -= left; + } + + while (size >= sha512_block_size) { + uint64_t* aligned_message_block = (uint64_t*)msg; + + sha512_process_block(ctx->hash, aligned_message_block); + msg += sha512_block_size; + size -= sha512_block_size; + } + + if (size) { + /* save leftovers */ + for (uint8_t i = 0; i < size; i++) { + *(((uint8_t*)ctx->message) + i) = msg[i]; + } + } +} + +/** + * Store calculated hash into the given array. + */ +WASM_EXPORT +void Hash_Final() { + uint32_t index = ((uint32_t)ctx->length & 127) >> 3; + uint32_t shift = ((uint32_t)ctx->length & 7) * 8; + + /* pad message and process the last block */ + + /* append the byte 0x80 to the message */ + ctx->message[index] &= ~(I64(0xFFFFFFFFFFFFFFFF) << shift); + ctx->message[index++] ^= I64(0x80) << shift; + + /* if no room left in the message to store 128-bit message length */ + if (index >= 15) { + if (index == 15) ctx->message[index] = 0; + sha512_process_block(ctx->hash, ctx->message); + index = 0; + } + + while (index < 15) { + ctx->message[index++] = 0; + } + + ctx->message[15] = bswap_64(ctx->length << 3); + sha512_process_block(ctx->hash, ctx->message); + + #pragma clang loop unroll(full) + for (int32_t i = 7; i >= 0; i--) { + ctx->hash[i] = bswap_64(ctx->hash[i]); + } + + for (uint8_t i = 0; i < ctx->digest_length; i++) { + main_buffer[i] = *(((uint8_t*)ctx->hash) + i); + } +} + +WASM_EXPORT +const uint32_t STATE_SIZE = sizeof(*ctx); + +WASM_EXPORT +uint8_t* Hash_GetState() { + return (uint8_t*) ctx; +} + +WASM_EXPORT +void Hash_Calculate(uint32_t length, uint32_t initParam) { + Hash_Init(initParam); + Hash_Update(length); + Hash_Final(); +} diff --git a/frontend/node_modules/hash-wasm/src/sm3.c b/frontend/node_modules/hash-wasm/src/sm3.c new file mode 100644 index 0000000..c82fab0 --- /dev/null +++ b/frontend/node_modules/hash-wasm/src/sm3.c @@ -0,0 +1,231 @@ +/******************************************************************************* + * SM3 function implementation + * Copyright 2016 Yanbo Li dreamfly281@gmail.com, goldboar@163.com + * MIT License + * + * Modified for hash-wasm by Dani Biró + */ + + +#define WITH_BUFFER +#include "hash-wasm.h" + +#define SM3_DIGEST_LEN 32 + +#define u8 uint8_t +#define u32 uint32_t + +struct sm3_ctx { + u32 total[2]; + u32 state[8]; + u8 buffer[64]; +}; + +#define S(x,n) ((x << n) | (x >> (32 - n))) + +#define P0(x) (x ^ S(x, 9) ^ S(x,17)) +#define P1(x) (x ^ S(x,15) ^ S(x,23)) + +#define PW(t) \ +( \ + temp = W[t - 16] ^ W[t - 9] ^ (S(W[t - 3], 15)), \ + P1(temp) ^ W[t - 6] ^ (S(W[t - 13], 7)) \ +) + +#define FF1(x,y,z) (x ^ y ^ z) +#define FF2(x,y,z) ((x & y) | (x & z) | (y & z)) + +#define GG1(x,y,z) (x ^ y ^ z) +#define GG2(x,y,z) ((x & y) | ((~x) & z)) + +#define T1 0x79cc4519 +#define T2 0x7a879d8a + +#define bswap_32(x) __builtin_bswap32(x) + +void sm3_init(struct sm3_ctx *ctx) { + ctx->total[0] = 0; + ctx->total[1] = 0; + + ctx->state[0] = 0x7380166f; + ctx->state[1] = 0x4914b2b9; + ctx->state[2] = 0x172442d7; + ctx->state[3] = 0xda8a0600; + ctx->state[4] = 0xa96f30bc; + ctx->state[5] = 0x163138aa; + ctx->state[6] = 0xe38dee4d; + ctx->state[7] = 0xb0fb0e4e; +} + +static void sm3_process(struct sm3_ctx *ctx, const u8 data[64]) { + u32 temp, W[68], WP[64], A, B, C, D, E, F, G, H, SS1, SS2, TT1, TT2; + int j, k; + + #pragma clang loop unroll(full) + for (int i = 0; i < 16; i++) { + W[i] = bswap_32(((u32 *) data)[i]); + } + + W[16] = PW(16); + W[17] = PW(17); + W[18] = PW(18); + W[19] = PW(19); + + A = ctx->state[0]; + B = ctx->state[1]; + C = ctx->state[2]; + D = ctx->state[3]; + E = ctx->state[4]; + F = ctx->state[5]; + G = ctx->state[6]; + H = ctx->state[7]; + + // #pragma clang loop unroll(full) + for (int i = 0; i < 16; i++) { + WP[i] = W[i] ^ W[i+4]; + + SS1 = S(A, 12) + E + S(T1, i); + SS1 = S(SS1, 7); + SS2 = SS1 ^ S(A, 12); + TT1 = FF1(A, B, C) + D + SS2 + WP[i]; + TT2 = GG1(E, F, G) + H + SS1 + W[i]; + D = C; + C = S(B,9); + B = A; + A = TT1; + H = G; + G = S(F,19); + F = E; + E = P0(TT2); + } + + // #pragma clang loop unroll(full) + for (int i = 16; i < 64; i++) { + k = i + 4; + W[k] = PW(k); + WP[i] = W[i] ^ W[i + 4]; + + j = i % 32; + + SS1 = S(A, 12) + E + S(T2, j); + SS1 = S(SS1, 7); + SS2 = SS1 ^ S(A, 12); + TT1 = FF2(A, B, C) + D + SS2 + WP[i]; + TT2 = GG2(E, F, G) + H + SS1 + W[i]; + D = C; + C = S(B, 9); + B = A; + A = TT1; + H = G; + G = S(F, 19); + F = E; + E = P0(TT2); + } + + ctx->state[0] ^= A; + ctx->state[1] ^= B; + ctx->state[2] ^= C; + ctx->state[3] ^= D; + ctx->state[4] ^= E; + ctx->state[5] ^= F; + ctx->state[6] ^= G; + ctx->state[7] ^= H; +} + +static void sm3_update(struct sm3_ctx *ctx, const u8 *msg, u32 len) { + u32 left, fill; + + if (!len) { + return; + } + + left = ctx->total[0] & 0x3F; + fill = 64 - left; + + ctx->total[0] += len; + ctx->total[0] &= 0xFFFFFFFF; + + if (ctx->total[0] < len) { + ctx->total[1]++; + } + + if (left && (len >= fill)) { + memcpy((void *)(ctx->buffer + left), (void *)msg, fill); + sm3_process(ctx, ctx->buffer); + len -= fill; + msg += fill; + left = 0; + } + + while (len >= 64) { + sm3_process(ctx, msg); + len -= 64; + msg += 64; + } + + if (len) { + memcpy((void *)(ctx->buffer + left), (void *)msg, len); + } +} + +static u8 sm3_padding[64] = { + 0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +}; + +static void sm3_finish(struct sm3_ctx *ctx, u8 digest[32]) { + u32 last, padn; + u32 high, low; + u8 msglen[8]; + + high = (ctx->total[0] >> 29) + | (ctx->total[1] << 3); + low = (ctx->total[0] << 3); + + ((u32 *)msglen)[0] = bswap_32(high); + ((u32 *)msglen)[1] = bswap_32(low); + + last = ctx->total[0] & 0x3F; + padn = (last < 56 ) ? (56 - last) : (120 - last); + + sm3_update(ctx, sm3_padding, padn); + sm3_update(ctx, msglen, 8); + + for (int i = 0; i < 8; i++) { + ((u32 *)digest)[i] = bswap_32(ctx->state[i]); + } +} + +struct sm3_ctx ctx; + +WASM_EXPORT +void Hash_Init() { + sm3_init(&ctx); +} + +WASM_EXPORT +void Hash_Update(uint32_t size) { + sm3_update(&ctx, main_buffer, size); +} + +WASM_EXPORT +void Hash_Final() { + sm3_finish(&ctx, main_buffer); +} + +WASM_EXPORT +const uint32_t STATE_SIZE = sizeof(ctx); + +WASM_EXPORT +uint8_t* Hash_GetState() { + return (uint8_t*) &ctx; +} + +WASM_EXPORT +void Hash_Calculate(uint32_t length) { + Hash_Init(); + Hash_Update(length); + Hash_Final(); +} diff --git a/frontend/node_modules/hash-wasm/src/whirlpool.c b/frontend/node_modules/hash-wasm/src/whirlpool.c new file mode 100644 index 0000000..2f5eb00 --- /dev/null +++ b/frontend/node_modules/hash-wasm/src/whirlpool.c @@ -0,0 +1,243 @@ +/** + * Whirlpool hash in C + * + * Copyright (c) 2017 Project Nayuki. (MIT License) + * https://www.nayuki.io/page/fast-whirlpool-hash-in-x86-assembly + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in + * the Software without restriction, including without limitation the rights to + * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of + * the Software, and to permit persons to whom the Software is furnished to do so, + * subject to the following conditions: + * - The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * - The Software is provided "as is", without warranty of any kind, express or + * implied, including but not limited to the warranties of merchantability, + * fitness for a particular purpose and noninfringement. In no event shall the + * authors or copyright holders be liable for any claim, damages or other + * liability, whether in an action of contract, tort or otherwise, arising from, + * out of or in connection with the Software or the use or other dealings in the + * Software. + * + * Modified for hash-wasm by Dani Biró + */ + +#define WITH_BUFFER +#include "hash-wasm.h" + +#define BLOCK_LEN 64 // In bytes +#define STATE_LEN 64 // In bytes + +struct Whirlpool_CTX { + uint8_t buffer[BLOCK_LEN]; /* buffer of data to hash */ + uint8_t hash[STATE_LEN]; /* the hashing state */ + uint32_t rem; + uint64_t totalBytes; +}; + +static struct Whirlpool_CTX sctx; + +static void whirlpool_round(uint64_t block[static 8], const uint64_t key[static 8]); + +static uint64_t ROUND_CONSTANTS[32] = { + UINT64_C(0x4F01B887E8C62318), UINT64_C(0x52916F79F5D2A636), UINT64_C(0x357B0CA38E9BBC60), UINT64_C(0x57FE4B2EC2D7E01D), + UINT64_C(0xDA4AF09FE5377715), UINT64_C(0x856BA0B10A29C958), UINT64_C(0x67053ECBF4105DBD), UINT64_C(0xD8957DA78B4127E4), + UINT64_C(0x9E4717DD667CEEFB), UINT64_C(0x33835AAD07BF2DCA), UINT64_C(0xD94919C871AA0263), UINT64_C(0xB032269A885BE3F2), + UINT64_C(0x4834CDBE80D50FE9), UINT64_C(0xAE1A68205F907AFF), UINT64_C(0x1273F164229354B4), UINT64_C(0x3D8DA1DBECC30840), + UINT64_C(0x1BD682762BCF0097), UINT64_C(0xEF30F345506AAFB5), UINT64_C(0xC02FBA65EAA2553F), UINT64_C(0x8A0675924DFD1CDE), + UINT64_C(0x96A8D4621F0EE6B2), UINT64_C(0x4C3972845925C5F9), UINT64_C(0x61E2A5D18C38785E), UINT64_C(0x04FCC7431E9C21B3), + UINT64_C(0x247EDFFA0D6D9951), UINT64_C(0xEBB74E8F11CEAB3B), UINT64_C(0xD32C13B9F794813C), UINT64_C(0xA97F445603C46EE7), + UINT64_C(0x6C9D0BDC53C1BB2A), UINT64_C(0xE11489AC46F67431), UINT64_C(0xEDD0B67009693A16), UINT64_C(0x86F85C28A49842CC), +}; + +// Temporary state that doesn't need to be preserved between calls to _compress() +uint64_t tempState[8]; +uint64_t tempBlock[8]; +uint64_t rcon[8] = {0}; + +void whirlpool_compress(uint8_t state[static 64], const uint8_t block[static 64]) { + const int NUM_ROUNDS = 10; // Any number from 0 to 32 is allowed + + // Initialization + #pragma clang loop unroll(full) + for (int i = 0; i < 8; i++) { + int j = i << 3; + uint64_t x = *(uint64_t*)(state + j); + uint64_t y = *(uint64_t*)(block + j); + tempState[i] = x; + tempBlock[i] = x ^ y; + } + + // Hashing rounds + #pragma clang loop unroll(full) + for (int i = 0; i < NUM_ROUNDS; i++) { + rcon[0] = ROUND_CONSTANTS[i]; + whirlpool_round(tempState, rcon); + whirlpool_round(tempBlock, tempState); + } + + // Final combining + #pragma clang loop unroll(full) + for (uint8_t i = 0; i < 8; i++) { + ((uint64_t*)state)[i] ^= ((uint64_t*)block)[i] ^ tempBlock[i]; + } +} + +// The combined effect of gamma (SubBytes) and theta (MixRows) +static uint64_t MAGIC_TABLE[256] = { + UINT64_C(0xD83078C018601818), UINT64_C(0x2646AF05238C2323), UINT64_C(0xB891F97EC63FC6C6), UINT64_C(0xFBCD6F13E887E8E8), UINT64_C(0xCB13A14C87268787), UINT64_C(0x116D62A9B8DAB8B8), UINT64_C(0x0902050801040101), UINT64_C(0x0D9E6E424F214F4F), + UINT64_C(0x9B6CEEAD36D83636), UINT64_C(0xFF510459A6A2A6A6), UINT64_C(0x0CB9BDDED26FD2D2), UINT64_C(0x0EF706FBF5F3F5F5), UINT64_C(0x96F280EF79F97979), UINT64_C(0x30DECE5F6FA16F6F), UINT64_C(0x6D3FEFFC917E9191), UINT64_C(0xF8A407AA52555252), + UINT64_C(0x47C0FD27609D6060), UINT64_C(0x35657689BCCABCBC), UINT64_C(0x372BCDAC9B569B9B), UINT64_C(0x8A018C048E028E8E), UINT64_C(0xD25B1571A3B6A3A3), UINT64_C(0x6C183C600C300C0C), UINT64_C(0x84F68AFF7BF17B7B), UINT64_C(0x806AE1B535D43535), + UINT64_C(0xF53A69E81D741D1D), UINT64_C(0xB3DD4753E0A7E0E0), UINT64_C(0x21B3ACF6D77BD7D7), UINT64_C(0x9C99ED5EC22FC2C2), UINT64_C(0x435C966D2EB82E2E), UINT64_C(0x29967A624B314B4B), UINT64_C(0x5DE121A3FEDFFEFE), UINT64_C(0xD5AE168257415757), + UINT64_C(0xBD2A41A815541515), UINT64_C(0xE8EEB69F77C17777), UINT64_C(0x926EEBA537DC3737), UINT64_C(0x9ED7567BE5B3E5E5), UINT64_C(0x1323D98C9F469F9F), UINT64_C(0x23FD17D3F0E7F0F0), UINT64_C(0x20947F6A4A354A4A), UINT64_C(0x44A9959EDA4FDADA), + UINT64_C(0xA2B025FA587D5858), UINT64_C(0xCF8FCA06C903C9C9), UINT64_C(0x7C528D5529A42929), UINT64_C(0x5A1422500A280A0A), UINT64_C(0x507F4FE1B1FEB1B1), UINT64_C(0xC95D1A69A0BAA0A0), UINT64_C(0x14D6DA7F6BB16B6B), UINT64_C(0xD917AB5C852E8585), + UINT64_C(0x3C677381BDCEBDBD), UINT64_C(0x8FBA34D25D695D5D), UINT64_C(0x9020508010401010), UINT64_C(0x07F503F3F4F7F4F4), UINT64_C(0xDD8BC016CB0BCBCB), UINT64_C(0xD37CC6ED3EF83E3E), UINT64_C(0x2D0A112805140505), UINT64_C(0x78CEE61F67816767), + UINT64_C(0x97D55373E4B7E4E4), UINT64_C(0x024EBB25279C2727), UINT64_C(0x7382583241194141), UINT64_C(0xA70B9D2C8B168B8B), UINT64_C(0xF6530151A7A6A7A7), UINT64_C(0xB2FA94CF7DE97D7D), UINT64_C(0x4937FBDC956E9595), UINT64_C(0x56AD9F8ED847D8D8), + UINT64_C(0x70EB308BFBCBFBFB), UINT64_C(0xCDC17123EE9FEEEE), UINT64_C(0xBBF891C77CED7C7C), UINT64_C(0x71CCE31766856666), UINT64_C(0x7BA78EA6DD53DDDD), UINT64_C(0xAF2E4BB8175C1717), UINT64_C(0x458E460247014747), UINT64_C(0x1A21DC849E429E9E), + UINT64_C(0xD489C51ECA0FCACA), UINT64_C(0x585A99752DB42D2D), UINT64_C(0x2E637991BFC6BFBF), UINT64_C(0x3F0E1B38071C0707), UINT64_C(0xAC472301AD8EADAD), UINT64_C(0xB0B42FEA5A755A5A), UINT64_C(0xEF1BB56C83368383), UINT64_C(0xB666FF8533CC3333), + UINT64_C(0x5CC6F23F63916363), UINT64_C(0x12040A1002080202), UINT64_C(0x93493839AA92AAAA), UINT64_C(0xDEE2A8AF71D97171), UINT64_C(0xC68DCF0EC807C8C8), UINT64_C(0xD1327DC819641919), UINT64_C(0x3B92707249394949), UINT64_C(0x5FAF9A86D943D9D9), + UINT64_C(0x31F91DC3F2EFF2F2), UINT64_C(0xA8DB484BE3ABE3E3), UINT64_C(0xB9B62AE25B715B5B), UINT64_C(0xBC0D9234881A8888), UINT64_C(0x3E29C8A49A529A9A), UINT64_C(0x0B4CBE2D26982626), UINT64_C(0xBF64FA8D32C83232), UINT64_C(0x597D4AE9B0FAB0B0), + UINT64_C(0xF2CF6A1BE983E9E9), UINT64_C(0x771E33780F3C0F0F), UINT64_C(0x33B7A6E6D573D5D5), UINT64_C(0xF41DBA74803A8080), UINT64_C(0x27617C99BEC2BEBE), UINT64_C(0xEB87DE26CD13CDCD), UINT64_C(0x8968E4BD34D03434), UINT64_C(0x3290757A483D4848), + UINT64_C(0x54E324ABFFDBFFFF), UINT64_C(0x8DF48FF77AF57A7A), UINT64_C(0x643DEAF4907A9090), UINT64_C(0x9DBE3EC25F615F5F), UINT64_C(0x3D40A01D20802020), UINT64_C(0x0FD0D56768BD6868), UINT64_C(0xCA3472D01A681A1A), UINT64_C(0xB7412C19AE82AEAE), + UINT64_C(0x7D755EC9B4EAB4B4), UINT64_C(0xCEA8199A544D5454), UINT64_C(0x7F3BE5EC93769393), UINT64_C(0x2F44AA0D22882222), UINT64_C(0x63C8E907648D6464), UINT64_C(0x2AFF12DBF1E3F1F1), UINT64_C(0xCCE6A2BF73D17373), UINT64_C(0x82245A9012481212), + UINT64_C(0x7A805D3A401D4040), UINT64_C(0x4810284008200808), UINT64_C(0x959BE856C32BC3C3), UINT64_C(0xDFC57B33EC97ECEC), UINT64_C(0x4DAB9096DB4BDBDB), UINT64_C(0xC05F1F61A1BEA1A1), UINT64_C(0x9107831C8D0E8D8D), UINT64_C(0xC87AC9F53DF43D3D), + UINT64_C(0x5B33F1CC97669797), UINT64_C(0x0000000000000000), UINT64_C(0xF983D436CF1BCFCF), UINT64_C(0x6E5687452BAC2B2B), UINT64_C(0xE1ECB39776C57676), UINT64_C(0xE619B06482328282), UINT64_C(0x28B1A9FED67FD6D6), UINT64_C(0xC33677D81B6C1B1B), + UINT64_C(0x74775BC1B5EEB5B5), UINT64_C(0xBE432911AF86AFAF), UINT64_C(0x1DD4DF776AB56A6A), UINT64_C(0xEAA00DBA505D5050), UINT64_C(0x578A4C1245094545), UINT64_C(0x38FB18CBF3EBF3F3), UINT64_C(0xAD60F09D30C03030), UINT64_C(0xC4C3742BEF9BEFEF), + UINT64_C(0xDA7EC3E53FFC3F3F), UINT64_C(0xC7AA1C9255495555), UINT64_C(0xDB591079A2B2A2A2), UINT64_C(0xE9C96503EA8FEAEA), UINT64_C(0x6ACAEC0F65896565), UINT64_C(0x036968B9BAD2BABA), UINT64_C(0x4A5E93652FBC2F2F), UINT64_C(0x8E9DE74EC027C0C0), + UINT64_C(0x60A181BEDE5FDEDE), UINT64_C(0xFC386CE01C701C1C), UINT64_C(0x46E72EBBFDD3FDFD), UINT64_C(0x1F9A64524D294D4D), UINT64_C(0x7639E0E492729292), UINT64_C(0xFAEABC8F75C97575), UINT64_C(0x360C1E3006180606), UINT64_C(0xAE0998248A128A8A), + UINT64_C(0x4B7940F9B2F2B2B2), UINT64_C(0x85D15963E6BFE6E6), UINT64_C(0x7E1C36700E380E0E), UINT64_C(0xE73E63F81F7C1F1F), UINT64_C(0x55C4F73762956262), UINT64_C(0x3AB5A3EED477D4D4), UINT64_C(0x814D3229A89AA8A8), UINT64_C(0x5231F4C496629696), + UINT64_C(0x62EF3A9BF9C3F9F9), UINT64_C(0xA397F666C533C5C5), UINT64_C(0x104AB13525942525), UINT64_C(0xABB220F259795959), UINT64_C(0xD015AE54842A8484), UINT64_C(0xC5E4A7B772D57272), UINT64_C(0xEC72DDD539E43939), UINT64_C(0x1698615A4C2D4C4C), + UINT64_C(0x94BC3BCA5E655E5E), UINT64_C(0x9FF085E778FD7878), UINT64_C(0xE570D8DD38E03838), UINT64_C(0x980586148C0A8C8C), UINT64_C(0x17BFB2C6D163D1D1), UINT64_C(0xE4570B41A5AEA5A5), UINT64_C(0xA1D94D43E2AFE2E2), UINT64_C(0x4EC2F82F61996161), + UINT64_C(0x427B45F1B3F6B3B3), UINT64_C(0x3442A51521842121), UINT64_C(0x0825D6949C4A9C9C), UINT64_C(0xEE3C66F01E781E1E), UINT64_C(0x6186522243114343), UINT64_C(0xB193FC76C73BC7C7), UINT64_C(0x4FE52BB3FCD7FCFC), UINT64_C(0x2408142004100404), + UINT64_C(0xE3A208B251595151), UINT64_C(0x252FC7BC995E9999), UINT64_C(0x22DAC44F6DA96D6D), UINT64_C(0x651A39680D340D0D), UINT64_C(0x79E93583FACFFAFA), UINT64_C(0x69A384B6DF5BDFDF), UINT64_C(0xA9FC9BD77EE57E7E), UINT64_C(0x1948B43D24902424), + UINT64_C(0xFE76D7C53BEC3B3B), UINT64_C(0x9A4B3D31AB96ABAB), UINT64_C(0xF081D13ECE1FCECE), UINT64_C(0x9922558811441111), UINT64_C(0x8303890C8F068F8F), UINT64_C(0x049C6B4A4E254E4E), UINT64_C(0x667351D1B7E6B7B7), UINT64_C(0xE0CB600BEB8BEBEB), + UINT64_C(0xC178CCFD3CF03C3C), UINT64_C(0xFD1FBF7C813E8181), UINT64_C(0x4035FED4946A9494), UINT64_C(0x1CF30CEBF7FBF7F7), UINT64_C(0x186F67A1B9DEB9B9), UINT64_C(0x8B265F98134C1313), UINT64_C(0x51589C7D2CB02C2C), UINT64_C(0x05BBB8D6D36BD3D3), + UINT64_C(0x8CD35C6BE7BBE7E7), UINT64_C(0x39DCCB576EA56E6E), UINT64_C(0xAA95F36EC437C4C4), UINT64_C(0x1B060F18030C0303), UINT64_C(0xDCAC138A56455656), UINT64_C(0x5E88491A440D4444), UINT64_C(0xA0FE9EDF7FE17F7F), UINT64_C(0x884F3721A99EA9A9), + UINT64_C(0x6754824D2AA82A2A), UINT64_C(0x0A6B6DB1BBD6BBBB), UINT64_C(0x879FE246C123C1C1), UINT64_C(0xF1A602A253515353), UINT64_C(0x72A58BAEDC57DCDC), UINT64_C(0x531627580B2C0B0B), UINT64_C(0x0127D39C9D4E9D9D), UINT64_C(0x2BD8C1476CAD6C6C), + UINT64_C(0xA462F59531C43131), UINT64_C(0xF3E8B98774CD7474), UINT64_C(0x15F109E3F6FFF6F6), UINT64_C(0x4C8C430A46054646), UINT64_C(0xA5452609AC8AACAC), UINT64_C(0xB50F973C891E8989), UINT64_C(0xB42844A014501414), UINT64_C(0xBADF425BE1A3E1E1), + UINT64_C(0xA62C4EB016581616), UINT64_C(0xF774D2CD3AE83A3A), UINT64_C(0x06D2D06F69B96969), UINT64_C(0x41122D4809240909), UINT64_C(0xD7E0ADA770DD7070), UINT64_C(0x6F7154D9B6E2B6B6), UINT64_C(0x1EBDB7CED067D0D0), UINT64_C(0xD6C77E3BED93EDED), + UINT64_C(0xE285DB2ECC17CCCC), UINT64_C(0x6884572A42154242), UINT64_C(0x2C2DC2B4985A9898), UINT64_C(0xED550E49A4AAA4A4), UINT64_C(0x7550885D28A02828), UINT64_C(0x86B831DA5C6D5C5C), UINT64_C(0x6BED3F93F8C7F8F8), UINT64_C(0xC211A44486228686), +}; + +static void whirlpool_round(uint64_t block[static 8], const uint64_t key[static 8]) { + uint64_t a = block[0]; + uint64_t b = block[1]; + uint64_t c = block[2]; + uint64_t d = block[3]; + uint64_t e = block[4]; + uint64_t f = block[5]; + uint64_t g = block[6]; + uint64_t h = block[7]; + + uint64_t r; + #define ROTR64(x, n) (((0U + (x)) << (64 - (n))) | ((x) >> (n))) // Assumes that x is uint64_t and 0 < n < 64 + #define DOROW(i, s, t, u, v, w, x, y, z) \ + r = MAGIC_TABLE[(uint8_t)s]; r = ROTR64(r, 8); \ + r ^= MAGIC_TABLE[(uint8_t)(t >> 8)]; r = ROTR64(r, 8); \ + r ^= MAGIC_TABLE[(uint8_t)(u >> 16)]; r = ROTR64(r, 8); \ + r ^= MAGIC_TABLE[(uint8_t)(v >> 24)]; r = ROTR64(r, 8); \ + r ^= MAGIC_TABLE[(uint8_t)(w >> 32)]; r = ROTR64(r, 8); \ + r ^= MAGIC_TABLE[(uint8_t)(x >> 40)]; r = ROTR64(r, 8); \ + r ^= MAGIC_TABLE[(uint8_t)(y >> 48)]; r = ROTR64(r, 8); \ + r ^= MAGIC_TABLE[(uint8_t)(z >> 56)]; r = ROTR64(r, 8); \ + block[i] = r ^ key[i]; + + DOROW(0, a, h, g, f, e, d, c, b) + DOROW(1, b, a, h, g, f, e, d, c) + DOROW(2, c, b, a, h, g, f, e, d) + DOROW(3, d, c, b, a, h, g, f, e) + DOROW(4, e, d, c, b, a, h, g, f) + DOROW(5, f, e, d, c, b, a, h, g) + DOROW(6, g, f, e, d, c, b, a, h) + DOROW(7, h, g, f, e, d, c, b, a) +} + +WASM_EXPORT +void Hash_Init() { + for (uint32_t i = 0; i < 64; i+=8) { + *(uint64_t*)(sctx.hash + i) = 0; + } + sctx.totalBytes = 0; + sctx.rem = 0; +} + +inline uint32_t min(uint32_t a, uint32_t b) { + if (a < b) return a; + return b; +} + +WASM_EXPORT +void Hash_Update(uint32_t len) { + sctx.totalBytes += len; + uint32_t read = 0; + if (sctx.rem > 0) { + uint32_t end = min(64, sctx.rem + len); + for (uint8_t z = sctx.rem; z < end; z++) { + sctx.buffer[z] = main_buffer[read++]; + } + if (end == 64) { + whirlpool_compress(sctx.hash, sctx.buffer); + sctx.rem = 0; + } else { + sctx.rem = end; + } + } + + while (len - read >= 64) { + whirlpool_compress(sctx.hash, &main_buffer[read]); + read += 64; + } + + if (len - read > 0) { + sctx.rem = len - read; + for (uint8_t z = 0; z < sctx.rem; z++) { + sctx.buffer[z] = main_buffer[read + z]; + } + } +} + +WASM_EXPORT +void Hash_Final() { + const int LENGTH_SIZE = 32; + + uint8_t temp[64] = {0}; + for (uint8_t i = 0; i < sctx.rem; i++) { + temp[i] = sctx.buffer[i]; + } + temp[sctx.rem] = 0x80; + sctx.rem++; + + if (BLOCK_LEN - sctx.rem < LENGTH_SIZE) { + whirlpool_compress(sctx.hash, temp); + for (uint32_t i = 0; i < 32; i+=8) { + *(uint64_t*)(temp + i) = 0; + } + } + + temp[BLOCK_LEN - 1] = (uint8_t)((sctx.totalBytes & 0x1FU) << 3); + sctx.totalBytes >>= 5; + for (int i = 1; i < LENGTH_SIZE; i++, sctx.totalBytes >>= 8) { + temp[BLOCK_LEN - 1 - i] = (uint8_t)(sctx.totalBytes & 0xFFU); + } + whirlpool_compress(sctx.hash, temp); + + for (uint32_t i = 0; i < 64; i+=8) { + *(uint64_t*)(main_buffer + i) = *(uint64_t*)(sctx.hash + i); + } +} + +WASM_EXPORT +const uint32_t STATE_SIZE = sizeof(sctx); + +WASM_EXPORT +uint8_t* Hash_GetState() { + return (uint8_t*) &sctx; +} + +WASM_EXPORT +void Hash_Calculate(uint32_t length) { + Hash_Init(); + Hash_Update(length); + Hash_Final(); +} diff --git a/frontend/node_modules/hash-wasm/src/xxhash128.c b/frontend/node_modules/hash-wasm/src/xxhash128.c new file mode 100644 index 0000000..9e5ab58 --- /dev/null +++ b/frontend/node_modules/hash-wasm/src/xxhash128.c @@ -0,0 +1,1003 @@ +/* + * xxHash - Extremely Fast Hash algorithm + * Header File + * Copyright (C) 2012-2020 Yann Collet + * + * BSD 2-Clause License (https://www.opensource.org/licenses/bsd-license.php) + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * You can contact the author at: + * - xxHash homepage: https://www.xxhash.com + * - xxHash source repository: https://github.com/Cyan4973/xxHash + * + * Modified for hash-wasm by Dani Biró + */ + +#define WITH_BUFFER +#include + +#include "hash-wasm.h" + +typedef uint8_t xxh_u8; +typedef uint32_t XXH32_hash_t; +typedef XXH32_hash_t xxh_u32; +typedef uint64_t XXH64_hash_t; +typedef XXH64_hash_t xxh_u64; +typedef struct { + XXH64_hash_t low64; /*!< `value & 0xFFFFFFFFFFFFFFFF` */ + XXH64_hash_t high64; /*!< `value >> 64` */ +} XXH128_hash_t; + +#define XXH_RESTRICT restrict +#define XXH_NO_INLINE static +#define XXH_likely(x) __builtin_expect(x, 1) +#define XXH_unlikely(x) __builtin_expect(x, 0) +#define XXH_swap64 __builtin_bswap64 +#define XXH_swap32 __builtin_bswap32 +#define XXH_rotl32 __builtin_rotateleft32 +#define XXH_rotl64 __builtin_rotateleft64 +#define XXH_FORCE_INLINE inline static + +#define XXH_ALIGN(n) alignas(n) +#define XXH_ALIGN_MEMBER(align, type) XXH_ALIGN(align) type +#define XXH3_INTERNALBUFFER_SIZE 256 +#define XXH3_SECRET_DEFAULT_SIZE 192 +#define XXH3_SECRET_SIZE_MIN 136 +#define XXH_SECRET_DEFAULT_SIZE 192 /* minimum XXH3_SECRET_SIZE_MIN */ +#define XXH_STRIPE_LEN 64 +#define XXH_SECRET_CONSUME_RATE \ + 8 /* nb of secret bytes consumed at each accumulation */ +#define XXH_ASSERT(c) ((void)0) +#define XXH_STATIC_ASSERT(c) \ + do { \ + enum { XXH_sa = 1 / (int)(!!(c)) }; \ + } while (0) +#define XXH_ACC_ALIGN 64 +#define XXH_ACC_NB (XXH_STRIPE_LEN / sizeof(xxh_u64)) +#define XXH_SECRET_MERGEACCS_START 11 +#define XXH3_MIDSIZE_MAX 240 +#define XXH_SECRET_LASTACC_START 7 +#define XXH3_MIDSIZE_STARTOFFSET 3 +#define XXH3_MIDSIZE_LASTOFFSET 17 +#define XXH_SEC_ALIGN 64 + +XXH_FORCE_INLINE xxh_u64 XXH_mult32to64(xxh_u64 x, xxh_u64 y) { + return (x & 0xFFFFFFFF) * (y & 0xFFFFFFFF); +} + +XXH_FORCE_INLINE xxh_u32 XXH_read32(const void* memPtr) { + return *(const xxh_u32*)memPtr; +} + +XXH_FORCE_INLINE xxh_u32 XXH_readLE32(const void* ptr) { + return XXH_read32(ptr); +} + +XXH_FORCE_INLINE xxh_u64 XXH_read64(const void* memPtr) { + return *(const xxh_u64*)memPtr; +} + +XXH_FORCE_INLINE xxh_u64 XXH_readLE64(const void* ptr) { + return XXH_read64(ptr); +} + +XXH_FORCE_INLINE void XXH_writeLE64(void* dst, xxh_u64 v64) { + memcpy64(dst, &v64); +} + +XXH_FORCE_INLINE xxh_u64 XXH_xorshift64(xxh_u64 v64, int shift) { + XXH_ASSERT(0 <= shift && shift < 64); + return v64 ^ (v64 >> shift); +} + +XXH_FORCE_INLINE XXH128_hash_t XXH_mult64to128(xxh_u64 lhs, xxh_u64 rhs) { + /* First calculate all of the cross products. */ + xxh_u64 const lo_lo = XXH_mult32to64(lhs & 0xFFFFFFFF, rhs & 0xFFFFFFFF); + xxh_u64 const hi_lo = XXH_mult32to64(lhs >> 32, rhs & 0xFFFFFFFF); + xxh_u64 const lo_hi = XXH_mult32to64(lhs & 0xFFFFFFFF, rhs >> 32); + xxh_u64 const hi_hi = XXH_mult32to64(lhs >> 32, rhs >> 32); + + /* Now add the products together. These will never overflow. */ + xxh_u64 const cross = (lo_lo >> 32) + (hi_lo & 0xFFFFFFFF) + lo_hi; + xxh_u64 const upper = (hi_lo >> 32) + (cross >> 32) + hi_hi; + xxh_u64 const lower = (cross << 32) | (lo_lo & 0xFFFFFFFF); + + XXH128_hash_t r128; + r128.low64 = lower; + r128.high64 = upper; + return r128; +} + +#define XXH_PREFETCH(ptr) (void)(ptr) /* disabled */ +typedef XXH128_hash_t (*XXH3_hashLong128_f)(const void* XXH_RESTRICT, size_t, + XXH64_hash_t, + const void* XXH_RESTRICT, size_t); +#define XXH_PREFETCH_DIST 320 + +#define XXH_PRIME32_1 0x9E3779B1U /*!< 0b10011110001101110111100110110001 */ +#define XXH_PRIME32_2 0x85EBCA77U /*!< 0b10000101111010111100101001110111 */ +#define XXH_PRIME32_3 0xC2B2AE3DU /*!< 0b11000010101100101010111000111101 */ +#define XXH_PRIME32_4 0x27D4EB2FU /*!< 0b00100111110101001110101100101111 */ +#define XXH_PRIME32_5 0x165667B1U /*!< 0b00010110010101100110011110110001 */ + +#define XXH_PRIME64_1 0x9E3779B185EBCA87ULL +#define XXH_PRIME64_2 0xC2B2AE3D27D4EB4FULL +#define XXH_PRIME64_3 0x165667B19E3779F9ULL +#define XXH_PRIME64_4 0x85EBCA77C2B2AE63ULL +#define XXH_PRIME64_5 0x27D4EB2F165667C5ULL + +XXH_ALIGN(64) +static const xxh_u8 XXH3_kSecret[XXH_SECRET_DEFAULT_SIZE] = { + 0xb8, 0xfe, 0x6c, 0x39, 0x23, 0xa4, 0x4b, 0xbe, 0x7c, 0x01, 0x81, 0x2c, + 0xf7, 0x21, 0xad, 0x1c, 0xde, 0xd4, 0x6d, 0xe9, 0x83, 0x90, 0x97, 0xdb, + 0x72, 0x40, 0xa4, 0xa4, 0xb7, 0xb3, 0x67, 0x1f, 0xcb, 0x79, 0xe6, 0x4e, + 0xcc, 0xc0, 0xe5, 0x78, 0x82, 0x5a, 0xd0, 0x7d, 0xcc, 0xff, 0x72, 0x21, + 0xb8, 0x08, 0x46, 0x74, 0xf7, 0x43, 0x24, 0x8e, 0xe0, 0x35, 0x90, 0xe6, + 0x81, 0x3a, 0x26, 0x4c, 0x3c, 0x28, 0x52, 0xbb, 0x91, 0xc3, 0x00, 0xcb, + 0x88, 0xd0, 0x65, 0x8b, 0x1b, 0x53, 0x2e, 0xa3, 0x71, 0x64, 0x48, 0x97, + 0xa2, 0x0d, 0xf9, 0x4e, 0x38, 0x19, 0xef, 0x46, 0xa9, 0xde, 0xac, 0xd8, + 0xa8, 0xfa, 0x76, 0x3f, 0xe3, 0x9c, 0x34, 0x3f, 0xf9, 0xdc, 0xbb, 0xc7, + 0xc7, 0x0b, 0x4f, 0x1d, 0x8a, 0x51, 0xe0, 0x4b, 0xcd, 0xb4, 0x59, 0x31, + 0xc8, 0x9f, 0x7e, 0xc9, 0xd9, 0x78, 0x73, 0x64, 0xea, 0xc5, 0xac, 0x83, + 0x34, 0xd3, 0xeb, 0xc3, 0xc5, 0x81, 0xa0, 0xff, 0xfa, 0x13, 0x63, 0xeb, + 0x17, 0x0d, 0xdd, 0x51, 0xb7, 0xf0, 0xda, 0x49, 0xd3, 0x16, 0x55, 0x26, + 0x29, 0xd4, 0x68, 0x9e, 0x2b, 0x16, 0xbe, 0x58, 0x7d, 0x47, 0xa1, 0xfc, + 0x8f, 0xf8, 0xb8, 0xd1, 0x7a, 0xd0, 0x31, 0xce, 0x45, 0xcb, 0x3a, 0x8f, + 0x95, 0x16, 0x04, 0x28, 0xaf, 0xd7, 0xfb, 0xca, 0xbb, 0x4b, 0x40, 0x7e, +}; + +#define XXH3_INIT_ACC \ + { \ + XXH_PRIME32_3, XXH_PRIME64_1, XXH_PRIME64_2, XXH_PRIME64_3, XXH_PRIME64_4, \ + XXH_PRIME32_2, XXH_PRIME64_5, XXH_PRIME32_1 \ + } + +struct XXH3_state_s { + XXH_ALIGN_MEMBER(64, XXH64_hash_t acc[8]); + /*!< The 8 accumulators. Similar to `vN` in @ref XXH32_state_s::v1 and @ref + * XXH64_state_s */ + XXH_ALIGN_MEMBER(64, unsigned char customSecret[XXH3_SECRET_DEFAULT_SIZE]); + /*!< Used to store a custom secret generated from a seed. */ + XXH_ALIGN_MEMBER(64, unsigned char buffer[XXH3_INTERNALBUFFER_SIZE]); + /*!< The internal buffer. @see XXH32_state_s::mem32 */ + XXH32_hash_t bufferedSize; + /*!< The amount of memory in @ref buffer, @see XXH32_state_s::memsize */ + XXH32_hash_t reserved32; + /*!< Reserved field. Needed for padding on 64-bit. */ + size_t nbStripesSoFar; + /*!< Number or stripes processed. */ + XXH64_hash_t totalLen; + /*!< Total length hashed. 64-bit even on 32-bit targets. */ + size_t nbStripesPerBlock; + /*!< Number of stripes per block. */ + size_t secretLimit; + /*!< Size of @ref customSecret or @ref extSecret */ + XXH64_hash_t seed; + /*!< Seed for _withSeed variants. Must be zero otherwise, @see + * XXH3_INITSTATE() */ + XXH64_hash_t reserved64; + /*!< Reserved field. */ + const unsigned char* extSecret; + /*!< Reference to an external secret for the _withSecret variants, NULL + * for other variants. */ + /* note: there may be some padding at the end due to alignment on 64 bytes */ +}; /* typedef'd to XXH3_state_t */ + +typedef struct XXH3_state_s XXH3_state_t; + +XXH_FORCE_INLINE xxh_u64 XXH64_avalanche(xxh_u64 h64) { + h64 ^= h64 >> 33; + h64 *= XXH_PRIME64_2; + h64 ^= h64 >> 29; + h64 *= XXH_PRIME64_3; + h64 ^= h64 >> 32; + return h64; +} + +XXH_FORCE_INLINE xxh_u64 XXH3_mul128_fold64(xxh_u64 lhs, xxh_u64 rhs) { + XXH128_hash_t product = XXH_mult64to128(lhs, rhs); + return product.low64 ^ product.high64; +} + +XXH_FORCE_INLINE xxh_u64 XXH3_mix16B( + const xxh_u8* XXH_RESTRICT input, + const xxh_u8* XXH_RESTRICT secret, xxh_u64 seed64 +) { + xxh_u64 const input_lo = XXH_readLE64(input); + xxh_u64 const input_hi = XXH_readLE64(input + 8); + return XXH3_mul128_fold64( + input_lo ^ (XXH_readLE64(secret) + seed64), + input_hi ^ (XXH_readLE64(secret + 8) - seed64) + ); +} + +static void XXH3_reset_internal( + XXH3_state_t* statePtr, XXH64_hash_t seed, + const void* secret, size_t secretSize +) { + size_t const initStart = offsetof(XXH3_state_t, bufferedSize); + size_t const initLength = + offsetof(XXH3_state_t, nbStripesPerBlock) - initStart; + XXH_ASSERT(offsetof(XXH3_state_t, nbStripesPerBlock) > initStart); + XXH_ASSERT(statePtr != NULL); + /* set members from bufferedSize to nbStripesPerBlock (excluded) to 0 */ + memset((char*)statePtr + initStart, 0, initLength); + statePtr->acc[0] = XXH_PRIME32_3; + statePtr->acc[1] = XXH_PRIME64_1; + statePtr->acc[2] = XXH_PRIME64_2; + statePtr->acc[3] = XXH_PRIME64_3; + statePtr->acc[4] = XXH_PRIME64_4; + statePtr->acc[5] = XXH_PRIME32_2; + statePtr->acc[6] = XXH_PRIME64_5; + statePtr->acc[7] = XXH_PRIME32_1; + statePtr->seed = seed; + statePtr->extSecret = (const unsigned char*)secret; + XXH_ASSERT(secretSize >= XXH3_SECRET_SIZE_MIN); + statePtr->secretLimit = secretSize - XXH_STRIPE_LEN; + statePtr->nbStripesPerBlock = statePtr->secretLimit / XXH_SECRET_CONSUME_RATE; +} + +static void XXH3_128bits_reset(XXH3_state_t* statePtr) { + XXH3_reset_internal(statePtr, 0, XXH3_kSecret, XXH_SECRET_DEFAULT_SIZE); +} + +static void XXH3_initCustomSecret_scalar( + void* XXH_RESTRICT customSecret, xxh_u64 seed64 +) { + const xxh_u8* kSecretPtr = XXH3_kSecret; + XXH_STATIC_ASSERT((XXH_SECRET_DEFAULT_SIZE & 15) == 0); + + XXH_ASSERT(kSecretPtr == XXH3_kSecret); + + int const nbRounds = XXH_SECRET_DEFAULT_SIZE / 16; + for (int i = 0; i < nbRounds; i++) { + /* + * The asm hack causes Clang to assume that kSecretPtr aliases with + * customSecret, and on aarch64, this prevented LDP from merging two + * loads together for free. Putting the loads together before the stores + * properly generates LDP. + */ + xxh_u64 lo = XXH_readLE64(kSecretPtr + 16 * i) + seed64; + xxh_u64 hi = XXH_readLE64(kSecretPtr + 16 * i + 8) - seed64; + XXH_writeLE64((xxh_u8*)customSecret + 16 * i, lo); + XXH_writeLE64((xxh_u8*)customSecret + 16 * i + 8, hi); + } +} + +static void XXH3_128bits_reset_withSeed( + XXH3_state_t* statePtr, XXH64_hash_t seed +) { + if (seed == 0) return XXH3_128bits_reset(statePtr); + if (seed != statePtr->seed) + XXH3_initCustomSecret_scalar(statePtr->customSecret, seed); + XXH3_reset_internal(statePtr, seed, NULL, XXH_SECRET_DEFAULT_SIZE); +} + +void XXH3_accumulate_512_scalar( + void* XXH_RESTRICT acc, const void* XXH_RESTRICT input, const void* XXH_RESTRICT secret +) { + XXH_ALIGN(XXH_ACC_ALIGN) + xxh_u64* const xacc = (xxh_u64*)acc; /* presumed aligned */ + const xxh_u8* const xinput = + (const xxh_u8*)input; /* no alignment restriction */ + const xxh_u8* const xsecret = + (const xxh_u8*)secret; /* no alignment restriction */ + XXH_ASSERT(((size_t)acc & (XXH_ACC_ALIGN - 1)) == 0); + for (size_t i = 0; i < XXH_ACC_NB; i++) { + xxh_u64 const data_val = XXH_readLE64(xinput + 8 * i); + xxh_u64 const data_key = data_val ^ XXH_readLE64(xsecret + i * 8); + xacc[i ^ 1] += data_val; /* swap adjacent lanes */ + xacc[i] += XXH_mult32to64(data_key & 0xFFFFFFFF, data_key >> 32); + } +} + +void XXH3_scrambleAcc_scalar( + void* XXH_RESTRICT acc, const void* XXH_RESTRICT secret +) { + XXH_ALIGN(XXH_ACC_ALIGN) + xxh_u64* const xacc = (xxh_u64*)acc; /* presumed aligned */ + const xxh_u8* const xsecret = + (const xxh_u8*)secret; /* no alignment restriction */ + XXH_ASSERT((((size_t)acc) & (XXH_ACC_ALIGN - 1)) == 0); + for (size_t i = 0; i < XXH_ACC_NB; i++) { + xxh_u64 const key64 = XXH_readLE64(xsecret + 8 * i); + xxh_u64 acc64 = xacc[i]; + acc64 = XXH_xorshift64(acc64, 47); + acc64 ^= key64; + acc64 *= XXH_PRIME32_1; + xacc[i] = acc64; + } +} + +/* + * XXH3_accumulate() + * Loops over XXH3_accumulate_512(). + * Assumption: nbStripes will not overflow the secret size + */ +void XXH3_accumulate( + xxh_u64* XXH_RESTRICT acc, + const xxh_u8* XXH_RESTRICT input, + const xxh_u8* XXH_RESTRICT secret, size_t nbStripes +) { + for (size_t n = 0; n < nbStripes; n++) { + const xxh_u8* const in = input + n * XXH_STRIPE_LEN; + XXH_PREFETCH(in + XXH_PREFETCH_DIST); + XXH3_accumulate_512_scalar(acc, in, secret + n * XXH_SECRET_CONSUME_RATE); + } +} + +/* Note : when XXH3_consumeStripes() is invoked, + * there must be a guarantee that at least one more byte must be consumed from + * input + * so that the function can blindly consume all stripes using the "normal" + * secret segment */ +void XXH3_consumeStripes( + xxh_u64* XXH_RESTRICT acc, + size_t* XXH_RESTRICT nbStripesSoFarPtr, + size_t nbStripesPerBlock, + const xxh_u8* XXH_RESTRICT input, size_t nbStripes, + const xxh_u8* XXH_RESTRICT secret, + size_t secretLimit +) { + XXH_ASSERT(nbStripes <= + nbStripesPerBlock); /* can handle max 1 scramble per invocation */ + XXH_ASSERT(*nbStripesSoFarPtr < nbStripesPerBlock); + if (nbStripesPerBlock - *nbStripesSoFarPtr <= nbStripes) { + /* need a scrambling operation */ + size_t const nbStripesToEndofBlock = nbStripesPerBlock - *nbStripesSoFarPtr; + size_t const nbStripesAfterBlock = nbStripes - nbStripesToEndofBlock; + XXH3_accumulate(acc, input, + secret + nbStripesSoFarPtr[0] * XXH_SECRET_CONSUME_RATE, + nbStripesToEndofBlock); + XXH3_scrambleAcc_scalar(acc, secret + secretLimit); + XXH3_accumulate(acc, input + nbStripesToEndofBlock * XXH_STRIPE_LEN, secret, + nbStripesAfterBlock); + *nbStripesSoFarPtr = nbStripesAfterBlock; + } else { + XXH3_accumulate(acc, input, + secret + nbStripesSoFarPtr[0] * XXH_SECRET_CONSUME_RATE, + nbStripes); + *nbStripesSoFarPtr += nbStripes; + } +} + +void XXH3_update(XXH3_state_t* state, const xxh_u8* input, size_t len) { + { + const xxh_u8* const bEnd = input + len; + const unsigned char* const secret = + (state->extSecret == NULL) ? state->customSecret : state->extSecret; + + state->totalLen += len; + XXH_ASSERT(state->bufferedSize <= XXH3_INTERNALBUFFER_SIZE); + + if (state->bufferedSize + len <= XXH3_INTERNALBUFFER_SIZE) { /* fill in tmp buffer */ + memcpy2(state->buffer + state->bufferedSize, input, len); + state->bufferedSize += (XXH32_hash_t)len; + return; + } + /* total input is now > XXH3_INTERNALBUFFER_SIZE */ + +#define XXH3_INTERNALBUFFER_STRIPES (XXH3_INTERNALBUFFER_SIZE / XXH_STRIPE_LEN) + XXH_STATIC_ASSERT(XXH3_INTERNALBUFFER_SIZE % XXH_STRIPE_LEN == + 0); /* clean multiple */ + + /* + * Internal buffer is partially filled (always, except at beginning) + * Complete it, then consume it. + */ + if (state->bufferedSize) { + size_t const loadSize = XXH3_INTERNALBUFFER_SIZE - state->bufferedSize; + memcpy2(state->buffer + state->bufferedSize, input, loadSize); + input += loadSize; + XXH3_consumeStripes( + state->acc, &state->nbStripesSoFar, + state->nbStripesPerBlock, state->buffer, + XXH3_INTERNALBUFFER_STRIPES, secret, + state->secretLimit + ); + state->bufferedSize = 0; + } + XXH_ASSERT(input < bEnd); + + /* Consume input by a multiple of internal buffer size */ + if (input + XXH3_INTERNALBUFFER_SIZE < bEnd) { + const xxh_u8* const limit = bEnd - XXH3_INTERNALBUFFER_SIZE; + do { + XXH3_consumeStripes( + state->acc, &state->nbStripesSoFar, state->nbStripesPerBlock, input, + XXH3_INTERNALBUFFER_STRIPES, secret, state->secretLimit + ); + input += XXH3_INTERNALBUFFER_SIZE; + } while (input < limit); + /* for last partial stripe */ + memcpy64( + state->buffer + sizeof(state->buffer) - XXH_STRIPE_LEN, + input - XXH_STRIPE_LEN + ); + } + XXH_ASSERT(input < bEnd); + + /* Some remaining input (always) : buffer it */ + memcpy2(state->buffer, input, (size_t)(bEnd - input)); + state->bufferedSize = (XXH32_hash_t)(bEnd - input); + } + + return; +} + +void XXH3_128bits_update(XXH3_state_t* state, const void* input, size_t len) { + XXH3_update(state, (const xxh_u8*)input, len); +} + +xxh_u64 XXH3_mix2Accs( + const xxh_u64* XXH_RESTRICT acc, + const xxh_u8* XXH_RESTRICT secret +) { + return XXH3_mul128_fold64(acc[0] ^ XXH_readLE64(secret), + acc[1] ^ XXH_readLE64(secret + 8)); +} + +/* + * This is a fast avalanche stage, + * suitable when input bits are already partially mixed + */ +XXH64_hash_t XXH3_avalanche(xxh_u64 h64) { + h64 = XXH_xorshift64(h64, 37); + h64 *= 0x165667919E3779F9ULL; + h64 = XXH_xorshift64(h64, 32); + return h64; +} + +XXH64_hash_t XXH3_mergeAccs( + const xxh_u64* XXH_RESTRICT acc, + const xxh_u8* XXH_RESTRICT secret, xxh_u64 start +) { + xxh_u64 result64 = start; + + for (size_t i = 0; i < 4; i++) { + result64 += XXH3_mix2Accs(acc + 2 * i, secret + 16 * i); + } + + return XXH3_avalanche(result64); +} + +void XXH3_digest_long( + XXH64_hash_t* acc, + const XXH3_state_t* state, + const unsigned char* secret +) { + /* + * Digest on a local copy. This way, the state remains unaltered, and it can + * continue ingesting more input afterwards. + */ + memcpy2(acc, state->acc, sizeof(state->acc)); + if (state->bufferedSize >= XXH_STRIPE_LEN) { + size_t const nbStripes = (state->bufferedSize - 1) / XXH_STRIPE_LEN; + size_t nbStripesSoFar = state->nbStripesSoFar; + XXH3_consumeStripes( + acc, &nbStripesSoFar, state->nbStripesPerBlock, + state->buffer, nbStripes, secret, state->secretLimit + ); + /* last stripe */ + XXH3_accumulate_512_scalar( + acc, state->buffer + state->bufferedSize - XXH_STRIPE_LEN, + secret + state->secretLimit - XXH_SECRET_LASTACC_START + ); + } else { /* bufferedSize < XXH_STRIPE_LEN */ + xxh_u8 lastStripe[XXH_STRIPE_LEN]; + size_t const catchupSize = XXH_STRIPE_LEN - state->bufferedSize; + XXH_ASSERT(state->bufferedSize > 0); /* there is always some input buffered */ + memcpy2(lastStripe, state->buffer + sizeof(state->buffer) - catchupSize, catchupSize); + memcpy2(lastStripe + catchupSize, state->buffer, state->bufferedSize); + XXH3_accumulate_512_scalar( + acc, lastStripe, + secret + state->secretLimit - XXH_SECRET_LASTACC_START + ); + } +} + +XXH128_hash_t XXH3_len_1to3_128b( + const xxh_u8* input, size_t len, + const xxh_u8* secret, XXH64_hash_t seed +) { + /* A doubled version of 1to3_64b with different constants. */ + XXH_ASSERT(input != NULL); + XXH_ASSERT(1 <= len && len <= 3); + XXH_ASSERT(secret != NULL); + /* + * len = 1: combinedl = { input[0], 0x01, input[0], input[0] } + * len = 2: combinedl = { input[1], 0x02, input[0], input[1] } + * len = 3: combinedl = { input[2], 0x03, input[0], input[1] } + */ + { + xxh_u8 const c1 = input[0]; + xxh_u8 const c2 = input[len >> 1]; + xxh_u8 const c3 = input[len - 1]; + xxh_u32 const combinedl = ((xxh_u32)c1 << 16) | ((xxh_u32)c2 << 24) | + ((xxh_u32)c3 << 0) | ((xxh_u32)len << 8); + xxh_u32 const combinedh = XXH_rotl32(XXH_swap32(combinedl), 13); + xxh_u64 const bitflipl = + (XXH_readLE32(secret) ^ XXH_readLE32(secret + 4)) + seed; + xxh_u64 const bitfliph = + (XXH_readLE32(secret + 8) ^ XXH_readLE32(secret + 12)) - seed; + xxh_u64 const keyed_lo = (xxh_u64)combinedl ^ bitflipl; + xxh_u64 const keyed_hi = (xxh_u64)combinedh ^ bitfliph; + XXH128_hash_t h128; + h128.low64 = XXH64_avalanche(keyed_lo); + h128.high64 = XXH64_avalanche(keyed_hi); + return h128; + } +} + +XXH128_hash_t XXH3_len_4to8_128b( + const xxh_u8* input, size_t len, + const xxh_u8* secret, XXH64_hash_t seed +) { + XXH_ASSERT(input != NULL); + XXH_ASSERT(secret != NULL); + XXH_ASSERT(4 <= len && len <= 8); + seed ^= (xxh_u64)XXH_swap32((xxh_u32)seed) << 32; + { + xxh_u32 const input_lo = XXH_readLE32(input); + xxh_u32 const input_hi = XXH_readLE32(input + len - 4); + xxh_u64 const input_64 = input_lo + ((xxh_u64)input_hi << 32); + xxh_u64 const bitflip = + (XXH_readLE64(secret + 16) ^ XXH_readLE64(secret + 24)) + seed; + xxh_u64 const keyed = input_64 ^ bitflip; + + /* Shift len to the left to ensure it is even, this avoids even multiplies. + */ + XXH128_hash_t m128 = XXH_mult64to128(keyed, XXH_PRIME64_1 + (len << 2)); + + m128.high64 += (m128.low64 << 1); + m128.low64 ^= (m128.high64 >> 3); + + m128.low64 = XXH_xorshift64(m128.low64, 35); + m128.low64 *= 0x9FB21C651E98DF25ULL; + m128.low64 = XXH_xorshift64(m128.low64, 28); + m128.high64 = XXH3_avalanche(m128.high64); + return m128; + } +} + +XXH128_hash_t XXH3_len_9to16_128b( + const xxh_u8* input, size_t len, + const xxh_u8* secret, XXH64_hash_t seed +) { + XXH_ASSERT(input != NULL); + XXH_ASSERT(secret != NULL); + XXH_ASSERT(9 <= len && len <= 16); + { + xxh_u64 const bitflipl = + (XXH_readLE64(secret + 32) ^ XXH_readLE64(secret + 40)) - seed; + xxh_u64 const bitfliph = + (XXH_readLE64(secret + 48) ^ XXH_readLE64(secret + 56)) + seed; + xxh_u64 const input_lo = XXH_readLE64(input); + xxh_u64 input_hi = XXH_readLE64(input + len - 8); + XXH128_hash_t m128 = + XXH_mult64to128(input_lo ^ input_hi ^ bitflipl, XXH_PRIME64_1); + /* + * Put len in the middle of m128 to ensure that the length gets mixed to + * both the low and high bits in the 128x64 multiply below. + */ + m128.low64 += (xxh_u64)(len - 1) << 54; + input_hi ^= bitfliph; + /* + * Add the high 32 bits of input_hi to the high 32 bits of m128, then + * add the long product of the low 32 bits of input_hi and XXH_PRIME32_2 to + * the high 64 bits of m128. + * + * The best approach to this operation is different on 32-bit and 64-bit. + */ + if (sizeof(void*) < sizeof(xxh_u64)) { /* 32-bit */ + /* + * 32-bit optimized version, which is more readable. + * + * On 32-bit, it removes an ADC and delays a dependency between the two + * halves of m128.high64, but it generates an extra mask on 64-bit. + */ + m128.high64 += (input_hi & 0xFFFFFFFF00000000ULL) + + XXH_mult32to64((xxh_u32)input_hi, XXH_PRIME32_2); + } else { + /* + * 64-bit optimized (albeit more confusing) version. + * + * Uses some properties of addition and multiplication to remove the mask: + * + * Let: + * a = input_hi.lo = (input_hi & 0x00000000FFFFFFFF) + * b = input_hi.hi = (input_hi & 0xFFFFFFFF00000000) + * c = XXH_PRIME32_2 + * + * a + (b * c) + * Inverse Property: x + y - x == y + * a + (b * (1 + c - 1)) + * Distributive Property: x * (y + z) == (x * y) + (x * z) + * a + (b * 1) + (b * (c - 1)) + * Identity Property: x * 1 == x + * a + b + (b * (c - 1)) + * + * Substitute a, b, and c: + * input_hi.hi + input_hi.lo + ((xxh_u64)input_hi.lo * (XXH_PRIME32_2 - + * 1)) + * + * Since input_hi.hi + input_hi.lo == input_hi, we get this: + * input_hi + ((xxh_u64)input_hi.lo * (XXH_PRIME32_2 - 1)) + */ + m128.high64 += + input_hi + XXH_mult32to64((xxh_u32)input_hi, XXH_PRIME32_2 - 1); + } + /* m128 ^= XXH_swap64(m128 >> 64); */ + m128.low64 ^= XXH_swap64(m128.high64); + + { /* 128x64 multiply: h128 = m128 * XXH_PRIME64_2; */ + XXH128_hash_t h128 = XXH_mult64to128(m128.low64, XXH_PRIME64_2); + h128.high64 += m128.high64 * XXH_PRIME64_2; + + h128.low64 = XXH3_avalanche(h128.low64); + h128.high64 = XXH3_avalanche(h128.high64); + return h128; + } + } +} + +XXH128_hash_t XXH3_len_0to16_128b( + const xxh_u8* input, size_t len, + const xxh_u8* secret, XXH64_hash_t seed +) { + XXH_ASSERT(len <= 16); + { + if (len > 8) return XXH3_len_9to16_128b(input, len, secret, seed); + if (len >= 4) return XXH3_len_4to8_128b(input, len, secret, seed); + if (len) return XXH3_len_1to3_128b(input, len, secret, seed); + { + XXH128_hash_t h128; + xxh_u64 const bitflipl = + XXH_readLE64(secret + 64) ^ XXH_readLE64(secret + 72); + xxh_u64 const bitfliph = + XXH_readLE64(secret + 80) ^ XXH_readLE64(secret + 88); + h128.low64 = XXH64_avalanche(seed ^ bitflipl); + h128.high64 = XXH64_avalanche(seed ^ bitfliph); + return h128; + } + } +} + +/* + * A bit slower than XXH3_mix16B, but handles multiply by zero better. + */ +XXH128_hash_t XXH128_mix32B( + XXH128_hash_t acc, const xxh_u8* input_1, + const xxh_u8* input_2, const xxh_u8* secret, + XXH64_hash_t seed +) { + acc.low64 += XXH3_mix16B(input_1, secret + 0, seed); + acc.low64 ^= XXH_readLE64(input_2) + XXH_readLE64(input_2 + 8); + acc.high64 += XXH3_mix16B(input_2, secret + 16, seed); + acc.high64 ^= XXH_readLE64(input_1) + XXH_readLE64(input_1 + 8); + return acc; +} + +XXH128_hash_t XXH3_len_17to128_128b( + const xxh_u8* XXH_RESTRICT input, + size_t len, + const xxh_u8* XXH_RESTRICT secret, + size_t secretSize, XXH64_hash_t seed +) { + XXH_ASSERT(secretSize >= XXH3_SECRET_SIZE_MIN); + (void)secretSize; + XXH_ASSERT(16 < len && len <= 128); + + { + XXH128_hash_t acc; + acc.low64 = len * XXH_PRIME64_1; + acc.high64 = 0; + if (len > 32) { + if (len > 64) { + if (len > 96) { + acc = XXH128_mix32B(acc, input + 48, input + len - 64, secret + 96, + seed); + } + acc = + XXH128_mix32B(acc, input + 32, input + len - 48, secret + 64, seed); + } + acc = XXH128_mix32B(acc, input + 16, input + len - 32, secret + 32, seed); + } + acc = XXH128_mix32B(acc, input, input + len - 16, secret, seed); + { + XXH128_hash_t h128; + h128.low64 = acc.low64 + acc.high64; + h128.high64 = (acc.low64 * XXH_PRIME64_1) + (acc.high64 * XXH_PRIME64_4) + + ((len - seed) * XXH_PRIME64_2); + h128.low64 = XXH3_avalanche(h128.low64); + h128.high64 = (XXH64_hash_t)0 - XXH3_avalanche(h128.high64); + return h128; + } + } +} + +XXH128_hash_t XXH3_len_129to240_128b( + const xxh_u8* XXH_RESTRICT input, + size_t len, + const xxh_u8* XXH_RESTRICT secret, + size_t secretSize, XXH64_hash_t seed +) { + XXH_ASSERT(secretSize >= XXH3_SECRET_SIZE_MIN); + (void)secretSize; + XXH_ASSERT(128 < len && len <= XXH3_MIDSIZE_MAX); + + { + XXH128_hash_t acc; + int const nbRounds = (int)len / 32; + int i; + acc.low64 = len * XXH_PRIME64_1; + acc.high64 = 0; + for (i = 0; i < 4; i++) { + acc = XXH128_mix32B(acc, input + (32 * i), input + (32 * i) + 16, + secret + (32 * i), seed); + } + acc.low64 = XXH3_avalanche(acc.low64); + acc.high64 = XXH3_avalanche(acc.high64); + XXH_ASSERT(nbRounds >= 4); + for (i = 4; i < nbRounds; i++) { + acc = XXH128_mix32B(acc, input + (32 * i), input + (32 * i) + 16, + secret + XXH3_MIDSIZE_STARTOFFSET + (32 * (i - 4)), + seed); + } + /* last bytes */ + acc = XXH128_mix32B( + acc, input + len - 16, input + len - 32, + secret + XXH3_SECRET_SIZE_MIN - XXH3_MIDSIZE_LASTOFFSET - 16, + 0ULL - seed); + + { + XXH128_hash_t h128; + h128.low64 = acc.low64 + acc.high64; + h128.high64 = (acc.low64 * XXH_PRIME64_1) + (acc.high64 * XXH_PRIME64_4) + + ((len - seed) * XXH_PRIME64_2); + h128.low64 = XXH3_avalanche(h128.low64); + h128.high64 = (XXH64_hash_t)0 - XXH3_avalanche(h128.high64); + return h128; + } + } +} + +void XXH3_hashLong_internal_loop( + xxh_u64* XXH_RESTRICT acc, + const xxh_u8* XXH_RESTRICT input, size_t len, + const xxh_u8* XXH_RESTRICT secret, + size_t secretSize +) { + size_t const nbStripesPerBlock = + (secretSize - XXH_STRIPE_LEN) / XXH_SECRET_CONSUME_RATE; + size_t const block_len = XXH_STRIPE_LEN * nbStripesPerBlock; + size_t const nb_blocks = (len - 1) / block_len; + + size_t n; + + XXH_ASSERT(secretSize >= XXH3_SECRET_SIZE_MIN); + + for (n = 0; n < nb_blocks; n++) { + XXH3_accumulate(acc, input + n * block_len, secret, nbStripesPerBlock); + XXH3_scrambleAcc_scalar(acc, secret + secretSize - XXH_STRIPE_LEN); + } + + /* last partial block */ + XXH_ASSERT(len > XXH_STRIPE_LEN); + { + size_t const nbStripes = + ((len - 1) - (block_len * nb_blocks)) / XXH_STRIPE_LEN; + XXH_ASSERT(nbStripes <= (secretSize / XXH_SECRET_CONSUME_RATE)); + XXH3_accumulate(acc, input + nb_blocks * block_len, secret, nbStripes); + + /* last stripe */ + { + const xxh_u8* const p = input + len - XXH_STRIPE_LEN; +#define XXH_SECRET_LASTACC_START \ + 7 /* not aligned on 8, last secret is different from acc & scrambler */ + XXH3_accumulate_512_scalar( + acc, p, + secret + secretSize - XXH_STRIPE_LEN - XXH_SECRET_LASTACC_START); + } + } +} + +XXH128_hash_t XXH3_hashLong_128b_internal( + const void* XXH_RESTRICT input, + size_t len, + const xxh_u8* XXH_RESTRICT secret, + size_t secretSize +) { + XXH_ALIGN(XXH_ACC_ALIGN) xxh_u64 acc[XXH_ACC_NB] = XXH3_INIT_ACC; + + XXH3_hashLong_internal_loop(acc, (const xxh_u8*)input, len, secret, + secretSize); + + /* converge into final hash */ + XXH_STATIC_ASSERT(sizeof(acc) == 64); + XXH_ASSERT(secretSize >= sizeof(acc) + XXH_SECRET_MERGEACCS_START); + { + XXH128_hash_t h128; + h128.low64 = XXH3_mergeAccs( + acc, secret + XXH_SECRET_MERGEACCS_START, + (xxh_u64)len * XXH_PRIME64_1 + ); + h128.high64 = XXH3_mergeAccs( + acc, secret + secretSize - sizeof(acc) - XXH_SECRET_MERGEACCS_START, + ~((xxh_u64)len * XXH_PRIME64_2) + ); + return h128; + } +} + +XXH128_hash_t XXH3_hashLong_128b_withSeed_internal( + const void* XXH_RESTRICT input, size_t len, XXH64_hash_t seed64 +) { + if (seed64 == 0) + return XXH3_hashLong_128b_internal( + input, len, XXH3_kSecret, sizeof(XXH3_kSecret) + ); + { + XXH_ALIGN(XXH_SEC_ALIGN) xxh_u8 secret[XXH_SECRET_DEFAULT_SIZE]; + XXH3_initCustomSecret_scalar(secret, seed64); + return XXH3_hashLong_128b_internal( + input, len, (const xxh_u8*)secret, sizeof(secret) + ); + } +} + +/* + * It's important for performance that XXH3_hashLong is not inlined. + */ + +XXH128_hash_t XXH3_hashLong_128b_withSeed( + const void* input, size_t len, + XXH64_hash_t seed64, + const void* XXH_RESTRICT secret, + size_t secretLen +) { + return XXH3_hashLong_128b_withSeed_internal(input, len, seed64); +} + +XXH128_hash_t XXH3_128bits_internal( + const void* input, size_t len, + XXH64_hash_t seed64, + const void* XXH_RESTRICT secret, + size_t secretLen, + XXH3_hashLong128_f f_hl128 +) { + XXH_ASSERT(secretLen >= XXH3_SECRET_SIZE_MIN); + /* + * If an action is to be taken if `secret` conditions are not respected, + * it should be done here. + * For now, it's a contract pre-condition. + * Adding a check and a branch here would cost performance at every hash. + */ + if (len <= 16) + return XXH3_len_0to16_128b( + (const xxh_u8*)input, len, (const xxh_u8*)secret, seed64 + ); + if (len <= 128) + return XXH3_len_17to128_128b( + (const xxh_u8*)input, len, (const xxh_u8*)secret, secretLen, seed64 + ); + if (len <= XXH3_MIDSIZE_MAX) + return XXH3_len_129to240_128b( + (const xxh_u8*)input, len, (const xxh_u8*)secret, secretLen, seed64 + ); + return f_hl128(input, len, seed64, secret, secretLen); +} + +XXH128_hash_t XXH3_128bits_withSeed( + const void* input, size_t len, XXH64_hash_t seed +) { + return XXH3_128bits_internal( + input, len, seed, XXH3_kSecret, sizeof(XXH3_kSecret), XXH3_hashLong_128b_withSeed + ); +} + +XXH128_hash_t XXH3_hashLong_128b_withSecret( + const void* XXH_RESTRICT input, + size_t len, XXH64_hash_t seed64, + const void* XXH_RESTRICT secret, + size_t secretLen +) { + return XXH3_hashLong_128b_internal( + input, len, (const xxh_u8*)secret, secretLen + ); +} + +XXH128_hash_t XXH3_128bits_withSecret( + const void* input, size_t len, const void* secret, size_t secretSize +) { + return XXH3_128bits_internal( + input, len, 0, (const xxh_u8*)secret, secretSize, XXH3_hashLong_128b_withSecret + ); +} + +XXH128_hash_t XXH3_128bits_digest(const XXH3_state_t* state) { + const unsigned char* const secret = + (state->extSecret == NULL) ? state->customSecret : state->extSecret; + if (state->totalLen > XXH3_MIDSIZE_MAX) { + XXH_ALIGN(XXH_ACC_ALIGN) XXH64_hash_t acc[XXH_ACC_NB]; + XXH3_digest_long(acc, state, secret); + XXH_ASSERT(state->secretLimit + XXH_STRIPE_LEN >= sizeof(acc) + XXH_SECRET_MERGEACCS_START); + { + XXH128_hash_t h128; + h128.low64 = XXH3_mergeAccs( + acc, secret + XXH_SECRET_MERGEACCS_START, (xxh_u64)state->totalLen * XXH_PRIME64_1 + ); + h128.high64 = + XXH3_mergeAccs( + acc, + secret + state->secretLimit + XXH_STRIPE_LEN - sizeof(acc) - XXH_SECRET_MERGEACCS_START, + ~((xxh_u64)state->totalLen * XXH_PRIME64_2) + ); + return h128; + } + } + /* len <= XXH3_MIDSIZE_MAX : short code */ + if (state->seed) + return XXH3_128bits_withSeed( + state->buffer, (size_t)state->totalLen, state->seed + ); + return XXH3_128bits_withSecret( + state->buffer, (size_t)(state->totalLen), secret, state->secretLimit + XXH_STRIPE_LEN + ); +} + +static struct XXH3_state_s sctx; +XXH3_state_t* state = &sctx; + +WASM_EXPORT +void Hash_Init() { + // seed is at the memory object + uint64_t seed = *((uint64_t*)main_buffer); + XXH3_128bits_reset_withSeed(state, seed); +} + +WASM_EXPORT +void Hash_Update(uint32_t length) { + const void* input = main_buffer; + XXH3_128bits_update(state, input, length); +} + +WASM_EXPORT +void Hash_Final() { + XXH128_hash_t result = XXH3_128bits_digest(state); + result.high64 = XXH_swap64(result.high64); + memcpy64(main_buffer, &result.high64); + result.low64 = XXH_swap64(result.low64); + memcpy64(main_buffer + 8, &result.low64); +} + +WASM_EXPORT +const uint32_t STATE_SIZE = sizeof(sctx); + +WASM_EXPORT +uint8_t* Hash_GetState() { return (uint8_t*)&sctx; } + +WASM_EXPORT +void Hash_Calculate() { return; } diff --git a/frontend/node_modules/hash-wasm/src/xxhash3.c b/frontend/node_modules/hash-wasm/src/xxhash3.c new file mode 100644 index 0000000..fdb1954 --- /dev/null +++ b/frontend/node_modules/hash-wasm/src/xxhash3.c @@ -0,0 +1,871 @@ +/* + * xxHash - Extremely Fast Hash algorithm + * Header File + * Copyright (C) 2012-2020 Yann Collet + * + * BSD 2-Clause License (https://www.opensource.org/licenses/bsd-license.php) + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * You can contact the author at: + * - xxHash homepage: https://www.xxhash.com + * - xxHash source repository: https://github.com/Cyan4973/xxHash + * + * Modified for hash-wasm by Dani Biró + */ + +#define WITH_BUFFER +#include + +#include "hash-wasm.h" + +typedef uint8_t xxh_u8; +typedef uint32_t XXH32_hash_t; +typedef XXH32_hash_t xxh_u32; +typedef uint64_t XXH64_hash_t; +typedef XXH64_hash_t xxh_u64; +typedef struct { + XXH64_hash_t low64; /*!< `value & 0xFFFFFFFFFFFFFFFF` */ + XXH64_hash_t high64; /*!< `value >> 64` */ +} XXH128_hash_t; + +#define XXH_RESTRICT restrict +#define XXH_NO_INLINE static +#define XXH_likely(x) __builtin_expect(x, 1) +#define XXH_unlikely(x) __builtin_expect(x, 0) +#define XXH_swap64 __builtin_bswap64 +#define XXH_swap32 __builtin_bswap32 +#define XXH_rotl32 __builtin_rotateleft32 +#define XXH_rotl64 __builtin_rotateleft64 +#define XXH_FORCE_INLINE inline static + +#define XXH_ALIGN(n) alignas(n) +#define XXH_ALIGN_MEMBER(align, type) XXH_ALIGN(align) type +#define XXH3_INTERNALBUFFER_SIZE 256 +#define XXH3_SECRET_DEFAULT_SIZE 192 +#define XXH3_SECRET_SIZE_MIN 136 +#define XXH_SECRET_DEFAULT_SIZE 192 /* minimum XXH3_SECRET_SIZE_MIN */ +#define XXH_STRIPE_LEN 64 +#define XXH_SECRET_CONSUME_RATE \ + 8 /* nb of secret bytes consumed at each accumulation */ +#define XXH_ASSERT(c) ((void)0) +#define XXH_STATIC_ASSERT(c) \ + do { \ + enum { XXH_sa = 1 / (int)(!!(c)) }; \ + } while (0) +#define XXH_ACC_ALIGN 64 +#define XXH_ACC_NB (XXH_STRIPE_LEN / sizeof(xxh_u64)) +#define XXH_SECRET_MERGEACCS_START 11 +#define XXH3_MIDSIZE_MAX 240 +#define XXH_SECRET_LASTACC_START 7 +#define XXH3_MIDSIZE_STARTOFFSET 3 +#define XXH3_MIDSIZE_LASTOFFSET 17 +#define XXH_SEC_ALIGN 64 + +XXH_FORCE_INLINE xxh_u64 XXH_mult32to64(xxh_u64 x, xxh_u64 y) { + return (x & 0xFFFFFFFF) * (y & 0xFFFFFFFF); +} + +XXH_FORCE_INLINE xxh_u32 XXH_read32(const void* memPtr) { + return *(const xxh_u32*)memPtr; +} + +XXH_FORCE_INLINE xxh_u32 XXH_readLE32(const void* ptr) { + return XXH_read32(ptr); +} + +XXH_FORCE_INLINE xxh_u64 XXH_read64(const void* memPtr) { + return *(const xxh_u64*)memPtr; +} + +XXH_FORCE_INLINE xxh_u64 XXH_readLE64(const void* ptr) { + return XXH_read64(ptr); +} + +XXH_FORCE_INLINE void XXH_writeLE64(void* dst, xxh_u64 v64) { + memcpy64(dst, &v64); +} + +XXH_FORCE_INLINE xxh_u64 XXH_xorshift64(xxh_u64 v64, int shift) { + XXH_ASSERT(0 <= shift && shift < 64); + return v64 ^ (v64 >> shift); +} + +/* + * This is a stronger avalanche, + * inspired by Pelle Evensen's rrmxmx + * preferable when input has not been previously mixed + */ +XXH_FORCE_INLINE XXH64_hash_t XXH3_rrmxmx(xxh_u64 h64, xxh_u64 len) { + /* this mix is inspired by Pelle Evensen's rrmxmx */ + h64 ^= XXH_rotl64(h64, 49) ^ XXH_rotl64(h64, 24); + h64 *= 0x9FB21C651E98DF25ULL; + h64 ^= (h64 >> 35) + len; + h64 *= 0x9FB21C651E98DF25ULL; + return XXH_xorshift64(h64, 28); +} + +XXH_FORCE_INLINE XXH128_hash_t XXH_mult64to128(xxh_u64 lhs, xxh_u64 rhs) { + /* First calculate all of the cross products. */ + xxh_u64 const lo_lo = XXH_mult32to64(lhs & 0xFFFFFFFF, rhs & 0xFFFFFFFF); + xxh_u64 const hi_lo = XXH_mult32to64(lhs >> 32, rhs & 0xFFFFFFFF); + xxh_u64 const lo_hi = XXH_mult32to64(lhs & 0xFFFFFFFF, rhs >> 32); + xxh_u64 const hi_hi = XXH_mult32to64(lhs >> 32, rhs >> 32); + + /* Now add the products together. These will never overflow. */ + xxh_u64 const cross = (lo_lo >> 32) + (hi_lo & 0xFFFFFFFF) + lo_hi; + xxh_u64 const upper = (hi_lo >> 32) + (cross >> 32) + hi_hi; + xxh_u64 const lower = (cross << 32) | (lo_lo & 0xFFFFFFFF); + + XXH128_hash_t r128; + r128.low64 = lower; + r128.high64 = upper; + return r128; +} + +#define XXH_PREFETCH(ptr) (void)(ptr) /* disabled */ +typedef XXH64_hash_t (*XXH3_hashLong64_f)( + const void* XXH_RESTRICT, size_t, + XXH64_hash_t, + const xxh_u8* XXH_RESTRICT, size_t +); +#define XXH_PREFETCH_DIST 320 + +#define XXH_PRIME32_1 0x9E3779B1U /*!< 0b10011110001101110111100110110001 */ +#define XXH_PRIME32_2 0x85EBCA77U /*!< 0b10000101111010111100101001110111 */ +#define XXH_PRIME32_3 0xC2B2AE3DU /*!< 0b11000010101100101010111000111101 */ +#define XXH_PRIME32_4 0x27D4EB2FU /*!< 0b00100111110101001110101100101111 */ +#define XXH_PRIME32_5 0x165667B1U /*!< 0b00010110010101100110011110110001 */ + +#define XXH_PRIME64_1 0x9E3779B185EBCA87ULL +#define XXH_PRIME64_2 0xC2B2AE3D27D4EB4FULL +#define XXH_PRIME64_3 0x165667B19E3779F9ULL +#define XXH_PRIME64_4 0x85EBCA77C2B2AE63ULL +#define XXH_PRIME64_5 0x27D4EB2F165667C5ULL + +XXH_ALIGN(64) +static const xxh_u8 XXH3_kSecret[XXH_SECRET_DEFAULT_SIZE] = { + 0xb8, 0xfe, 0x6c, 0x39, 0x23, 0xa4, 0x4b, 0xbe, 0x7c, 0x01, 0x81, 0x2c, + 0xf7, 0x21, 0xad, 0x1c, 0xde, 0xd4, 0x6d, 0xe9, 0x83, 0x90, 0x97, 0xdb, + 0x72, 0x40, 0xa4, 0xa4, 0xb7, 0xb3, 0x67, 0x1f, 0xcb, 0x79, 0xe6, 0x4e, + 0xcc, 0xc0, 0xe5, 0x78, 0x82, 0x5a, 0xd0, 0x7d, 0xcc, 0xff, 0x72, 0x21, + 0xb8, 0x08, 0x46, 0x74, 0xf7, 0x43, 0x24, 0x8e, 0xe0, 0x35, 0x90, 0xe6, + 0x81, 0x3a, 0x26, 0x4c, 0x3c, 0x28, 0x52, 0xbb, 0x91, 0xc3, 0x00, 0xcb, + 0x88, 0xd0, 0x65, 0x8b, 0x1b, 0x53, 0x2e, 0xa3, 0x71, 0x64, 0x48, 0x97, + 0xa2, 0x0d, 0xf9, 0x4e, 0x38, 0x19, 0xef, 0x46, 0xa9, 0xde, 0xac, 0xd8, + 0xa8, 0xfa, 0x76, 0x3f, 0xe3, 0x9c, 0x34, 0x3f, 0xf9, 0xdc, 0xbb, 0xc7, + 0xc7, 0x0b, 0x4f, 0x1d, 0x8a, 0x51, 0xe0, 0x4b, 0xcd, 0xb4, 0x59, 0x31, + 0xc8, 0x9f, 0x7e, 0xc9, 0xd9, 0x78, 0x73, 0x64, 0xea, 0xc5, 0xac, 0x83, + 0x34, 0xd3, 0xeb, 0xc3, 0xc5, 0x81, 0xa0, 0xff, 0xfa, 0x13, 0x63, 0xeb, + 0x17, 0x0d, 0xdd, 0x51, 0xb7, 0xf0, 0xda, 0x49, 0xd3, 0x16, 0x55, 0x26, + 0x29, 0xd4, 0x68, 0x9e, 0x2b, 0x16, 0xbe, 0x58, 0x7d, 0x47, 0xa1, 0xfc, + 0x8f, 0xf8, 0xb8, 0xd1, 0x7a, 0xd0, 0x31, 0xce, 0x45, 0xcb, 0x3a, 0x8f, + 0x95, 0x16, 0x04, 0x28, 0xaf, 0xd7, 0xfb, 0xca, 0xbb, 0x4b, 0x40, 0x7e, +}; + +#define XXH3_INIT_ACC \ + { \ + XXH_PRIME32_3, XXH_PRIME64_1, XXH_PRIME64_2, XXH_PRIME64_3, XXH_PRIME64_4, \ + XXH_PRIME32_2, XXH_PRIME64_5, XXH_PRIME32_1 \ + } + +struct XXH3_state_s { + XXH_ALIGN_MEMBER(64, XXH64_hash_t acc[8]); + /*!< The 8 accumulators. Similar to `vN` in @ref XXH32_state_s::v1 and @ref + * XXH64_state_s */ + XXH_ALIGN_MEMBER(64, unsigned char customSecret[XXH3_SECRET_DEFAULT_SIZE]); + /*!< Used to store a custom secret generated from a seed. */ + XXH_ALIGN_MEMBER(64, unsigned char buffer[XXH3_INTERNALBUFFER_SIZE]); + /*!< The internal buffer. @see XXH32_state_s::mem32 */ + XXH32_hash_t bufferedSize; + /*!< The amount of memory in @ref buffer, @see XXH32_state_s::memsize */ + XXH32_hash_t reserved32; + /*!< Reserved field. Needed for padding on 64-bit. */ + size_t nbStripesSoFar; + /*!< Number or stripes processed. */ + XXH64_hash_t totalLen; + /*!< Total length hashed. 64-bit even on 32-bit targets. */ + size_t nbStripesPerBlock; + /*!< Number of stripes per block. */ + size_t secretLimit; + /*!< Size of @ref customSecret or @ref extSecret */ + XXH64_hash_t seed; + /*!< Seed for _withSeed variants. Must be zero otherwise, @see + * XXH3_INITSTATE() */ + XXH64_hash_t reserved64; + /*!< Reserved field. */ + const unsigned char* extSecret; + /*!< Reference to an external secret for the _withSecret variants, NULL + * for other variants. */ + /* note: there may be some padding at the end due to alignment on 64 bytes */ +}; /* typedef'd to XXH3_state_t */ + +typedef struct XXH3_state_s XXH3_state_t; + +static xxh_u64 XXH64_avalanche(xxh_u64 h64) { + h64 ^= h64 >> 33; + h64 *= XXH_PRIME64_2; + h64 ^= h64 >> 29; + h64 *= XXH_PRIME64_3; + h64 ^= h64 >> 32; + return h64; +} + +static xxh_u64 XXH3_mul128_fold64(xxh_u64 lhs, xxh_u64 rhs) { + XXH128_hash_t product = XXH_mult64to128(lhs, rhs); + return product.low64 ^ product.high64; +} + +inline xxh_u64 XXH3_mix16B( + const xxh_u8* XXH_RESTRICT input, + const xxh_u8* XXH_RESTRICT secret, + xxh_u64 seed64 +) { + xxh_u64 const input_lo = XXH_readLE64(input); + xxh_u64 const input_hi = XXH_readLE64(input + 8); + return XXH3_mul128_fold64(input_lo ^ (XXH_readLE64(secret) + seed64), + input_hi ^ (XXH_readLE64(secret + 8) - seed64)); +} + +static void XXH3_reset_internal( + XXH3_state_t* statePtr, XXH64_hash_t seed, + const void* secret, size_t secretSize +) { + size_t const initStart = offsetof(XXH3_state_t, bufferedSize); + size_t const initLength = offsetof(XXH3_state_t, nbStripesPerBlock) - initStart; + XXH_ASSERT(offsetof(XXH3_state_t, nbStripesPerBlock) > initStart); + XXH_ASSERT(statePtr != NULL); + /* set members from bufferedSize to nbStripesPerBlock (excluded) to 0 */ + memset((char*)statePtr + initStart, 0, initLength); + statePtr->acc[0] = XXH_PRIME32_3; + statePtr->acc[1] = XXH_PRIME64_1; + statePtr->acc[2] = XXH_PRIME64_2; + statePtr->acc[3] = XXH_PRIME64_3; + statePtr->acc[4] = XXH_PRIME64_4; + statePtr->acc[5] = XXH_PRIME32_2; + statePtr->acc[6] = XXH_PRIME64_5; + statePtr->acc[7] = XXH_PRIME32_1; + statePtr->seed = seed; + statePtr->extSecret = (const unsigned char*)secret; + XXH_ASSERT(secretSize >= XXH3_SECRET_SIZE_MIN); + statePtr->secretLimit = secretSize - XXH_STRIPE_LEN; + statePtr->nbStripesPerBlock = statePtr->secretLimit / XXH_SECRET_CONSUME_RATE; +} + +static void XXH3_64bits_reset(XXH3_state_t* statePtr) { + XXH3_reset_internal(statePtr, 0, XXH3_kSecret, XXH_SECRET_DEFAULT_SIZE); +} + +static void XXH3_initCustomSecret_scalar( + void* XXH_RESTRICT customSecret, xxh_u64 seed64 +) { + const xxh_u8* kSecretPtr = XXH3_kSecret; + XXH_STATIC_ASSERT((XXH_SECRET_DEFAULT_SIZE & 15) == 0); + + XXH_ASSERT(kSecretPtr == XXH3_kSecret); + + int const nbRounds = XXH_SECRET_DEFAULT_SIZE / 16; + for (int i = 0; i < nbRounds; i++) { + /* + * The asm hack causes Clang to assume that kSecretPtr aliases with + * customSecret, and on aarch64, this prevented LDP from merging two + * loads together for free. Putting the loads together before the stores + * properly generates LDP. + */ + xxh_u64 lo = XXH_readLE64(kSecretPtr + 16 * i) + seed64; + xxh_u64 hi = XXH_readLE64(kSecretPtr + 16 * i + 8) - seed64; + XXH_writeLE64((xxh_u8*)customSecret + 16 * i, lo); + XXH_writeLE64((xxh_u8*)customSecret + 16 * i + 8, hi); + } +} + +static void XXH3_64bits_reset_withSeed( + XXH3_state_t* statePtr, XXH64_hash_t seed +) { + if (seed == 0) return XXH3_64bits_reset(statePtr); + if (seed != statePtr->seed) + XXH3_initCustomSecret_scalar(statePtr->customSecret, seed); + XXH3_reset_internal(statePtr, seed, NULL, XXH_SECRET_DEFAULT_SIZE); +} + +void XXH3_accumulate_512_scalar( + void* XXH_RESTRICT acc, + const void* XXH_RESTRICT input, + const void* XXH_RESTRICT secret +) { + XXH_ALIGN(XXH_ACC_ALIGN) + xxh_u64* const xacc = (xxh_u64*)acc; /* presumed aligned */ + const xxh_u8* const xinput = (const xxh_u8*)input; /* no alignment restriction */ + const xxh_u8* const xsecret = (const xxh_u8*)secret; /* no alignment restriction */ + XXH_ASSERT(((size_t)acc & (XXH_ACC_ALIGN - 1)) == 0); + for (size_t i = 0; i < XXH_ACC_NB; i++) { + xxh_u64 const data_val = XXH_readLE64(xinput + 8 * i); + xxh_u64 const data_key = data_val ^ XXH_readLE64(xsecret + i * 8); + xacc[i ^ 1] += data_val; /* swap adjacent lanes */ + xacc[i] += XXH_mult32to64(data_key & 0xFFFFFFFF, data_key >> 32); + } +} + +void XXH3_scrambleAcc_scalar( + void* XXH_RESTRICT acc, const void* XXH_RESTRICT secret +) { + XXH_ALIGN(XXH_ACC_ALIGN) + xxh_u64* const xacc = (xxh_u64*)acc; /* presumed aligned */ + const xxh_u8* const xsecret = (const xxh_u8*)secret; /* no alignment restriction */ + XXH_ASSERT((((size_t)acc) & (XXH_ACC_ALIGN - 1)) == 0); + for (size_t i = 0; i < XXH_ACC_NB; i++) { + xxh_u64 const key64 = XXH_readLE64(xsecret + 8 * i); + xxh_u64 acc64 = xacc[i]; + acc64 = XXH_xorshift64(acc64, 47); + acc64 ^= key64; + acc64 *= XXH_PRIME32_1; + xacc[i] = acc64; + } +} + +/* + * XXH3_accumulate() + * Loops over XXH3_accumulate_512(). + * Assumption: nbStripes will not overflow the secret size + */ +void XXH3_accumulate( + xxh_u64* XXH_RESTRICT acc, + const xxh_u8* XXH_RESTRICT input, + const xxh_u8* XXH_RESTRICT secret, size_t nbStripes +) { + for (size_t n = 0; n < nbStripes; n++) { + const xxh_u8* const in = input + n * XXH_STRIPE_LEN; + XXH_PREFETCH(in + XXH_PREFETCH_DIST); + XXH3_accumulate_512_scalar(acc, in, secret + n * XXH_SECRET_CONSUME_RATE); + } +} + +/* Note : when XXH3_consumeStripes() is invoked, + * there must be a guarantee that at least one more byte must be consumed from + * input + * so that the function can blindly consume all stripes using the "normal" + * secret segment */ +void XXH3_consumeStripes( + xxh_u64* XXH_RESTRICT acc, + size_t* XXH_RESTRICT nbStripesSoFarPtr, + size_t nbStripesPerBlock, + const xxh_u8* XXH_RESTRICT input, + size_t nbStripes, + const xxh_u8* XXH_RESTRICT secret, + size_t secretLimit +) { + XXH_ASSERT(nbStripes <= nbStripesPerBlock); /* can handle max 1 scramble per invocation */ + XXH_ASSERT(*nbStripesSoFarPtr < nbStripesPerBlock); + if (nbStripesPerBlock - *nbStripesSoFarPtr <= nbStripes) { + /* need a scrambling operation */ + size_t const nbStripesToEndofBlock = nbStripesPerBlock - *nbStripesSoFarPtr; + size_t const nbStripesAfterBlock = nbStripes - nbStripesToEndofBlock; + XXH3_accumulate( + acc, + input, + secret + nbStripesSoFarPtr[0] * XXH_SECRET_CONSUME_RATE, + nbStripesToEndofBlock + ); + XXH3_scrambleAcc_scalar(acc, secret + secretLimit); + XXH3_accumulate( + acc, + input + nbStripesToEndofBlock * XXH_STRIPE_LEN, + secret, + nbStripesAfterBlock + ); + *nbStripesSoFarPtr = nbStripesAfterBlock; + } else { + XXH3_accumulate( + acc, + input, + secret + nbStripesSoFarPtr[0] * XXH_SECRET_CONSUME_RATE, + nbStripes + ); + *nbStripesSoFarPtr += nbStripes; + } +} + +void XXH3_update(XXH3_state_t* state, const xxh_u8* input, size_t len) { + { + const xxh_u8* const bEnd = input + len; + const unsigned char* const secret = + (state->extSecret == NULL) ? state->customSecret : state->extSecret; + + state->totalLen += len; + XXH_ASSERT(state->bufferedSize <= XXH3_INTERNALBUFFER_SIZE); + + if (state->bufferedSize + len <= XXH3_INTERNALBUFFER_SIZE) { /* fill in tmp buffer */ + memcpy2(state->buffer + state->bufferedSize, input, len); + state->bufferedSize += (XXH32_hash_t)len; + return; + } + /* total input is now > XXH3_INTERNALBUFFER_SIZE */ + +#define XXH3_INTERNALBUFFER_STRIPES (XXH3_INTERNALBUFFER_SIZE / XXH_STRIPE_LEN) + XXH_STATIC_ASSERT(XXH3_INTERNALBUFFER_SIZE % XXH_STRIPE_LEN == + 0); /* clean multiple */ + + /* + * Internal buffer is partially filled (always, except at beginning) + * Complete it, then consume it. + */ + if (state->bufferedSize) { + size_t const loadSize = XXH3_INTERNALBUFFER_SIZE - state->bufferedSize; + memcpy2(state->buffer + state->bufferedSize, input, loadSize); + input += loadSize; + XXH3_consumeStripes(state->acc, &state->nbStripesSoFar, + state->nbStripesPerBlock, state->buffer, + XXH3_INTERNALBUFFER_STRIPES, secret, + state->secretLimit); + state->bufferedSize = 0; + } + XXH_ASSERT(input < bEnd); + + /* Consume input by a multiple of internal buffer size */ + if (input + XXH3_INTERNALBUFFER_SIZE < bEnd) { + const xxh_u8* const limit = bEnd - XXH3_INTERNALBUFFER_SIZE; + do { + XXH3_consumeStripes( + state->acc, &state->nbStripesSoFar, state->nbStripesPerBlock, input, + XXH3_INTERNALBUFFER_STRIPES, secret, state->secretLimit); + input += XXH3_INTERNALBUFFER_SIZE; + } while (input < limit); + /* for last partial stripe */ + memcpy64(state->buffer + sizeof(state->buffer) - XXH_STRIPE_LEN, + input - XXH_STRIPE_LEN); + } + XXH_ASSERT(input < bEnd); + + /* Some remaining input (always) : buffer it */ + memcpy2(state->buffer, input, (size_t)(bEnd - input)); + state->bufferedSize = (XXH32_hash_t)(bEnd - input); + } + + return; +} + +void XXH3_64bits_update(XXH3_state_t* state, const void* input, size_t len) { + XXH3_update(state, (const xxh_u8*)input, len); +} + +xxh_u64 XXH3_mix2Accs( + const xxh_u64* XXH_RESTRICT acc, + const xxh_u8* XXH_RESTRICT secret +) { + return XXH3_mul128_fold64( + acc[0] ^ XXH_readLE64(secret), + acc[1] ^ XXH_readLE64(secret + 8) + ); +} + +/* + * This is a fast avalanche stage, + * suitable when input bits are already partially mixed + */ +XXH64_hash_t XXH3_avalanche(xxh_u64 h64) { + h64 = XXH_xorshift64(h64, 37); + h64 *= 0x165667919E3779F9ULL; + h64 = XXH_xorshift64(h64, 32); + return h64; +} + +XXH64_hash_t XXH3_mergeAccs( + const xxh_u64* XXH_RESTRICT acc, + const xxh_u8* XXH_RESTRICT secret, + xxh_u64 start +) { + xxh_u64 result64 = start; + + for (size_t i = 0; i < 4; i++) { + result64 += XXH3_mix2Accs(acc + 2 * i, secret + 16 * i); + } + + return XXH3_avalanche(result64); +} + +void XXH3_digest_long( + XXH64_hash_t* acc, + const XXH3_state_t* state, + const unsigned char* secret +) { + /* + * Digest on a local copy. This way, the state remains unaltered, and it can + * continue ingesting more input afterwards. + */ + memcpy2(acc, state->acc, sizeof(state->acc)); + if (state->bufferedSize >= XXH_STRIPE_LEN) { + size_t const nbStripes = (state->bufferedSize - 1) / XXH_STRIPE_LEN; + size_t nbStripesSoFar = state->nbStripesSoFar; + XXH3_consumeStripes(acc, &nbStripesSoFar, state->nbStripesPerBlock, + state->buffer, nbStripes, secret, state->secretLimit); + /* last stripe */ + XXH3_accumulate_512_scalar( + acc, state->buffer + state->bufferedSize - XXH_STRIPE_LEN, + secret + state->secretLimit - XXH_SECRET_LASTACC_START); + } else { /* bufferedSize < XXH_STRIPE_LEN */ + xxh_u8 lastStripe[XXH_STRIPE_LEN]; + size_t const catchupSize = XXH_STRIPE_LEN - state->bufferedSize; + XXH_ASSERT(state->bufferedSize > 0); /* there is always some input buffered */ + memcpy2(lastStripe, state->buffer + sizeof(state->buffer) - catchupSize, catchupSize); + memcpy2(lastStripe + catchupSize, state->buffer, state->bufferedSize); + XXH3_accumulate_512_scalar( + acc, + lastStripe, + secret + state->secretLimit - XXH_SECRET_LASTACC_START + ); + } +} + +XXH64_hash_t XXH3_len_9to16_64b( + const xxh_u8* input, + size_t len, + const xxh_u8* secret, + XXH64_hash_t seed +) { + XXH_ASSERT(input != NULL); + XXH_ASSERT(secret != NULL); + XXH_ASSERT(8 <= len && len <= 16); + xxh_u64 const bitflip1 = + (XXH_readLE64(secret + 24) ^ XXH_readLE64(secret + 32)) + seed; + xxh_u64 const bitflip2 = + (XXH_readLE64(secret + 40) ^ XXH_readLE64(secret + 48)) - seed; + xxh_u64 const input_lo = XXH_readLE64(input) ^ bitflip1; + xxh_u64 const input_hi = XXH_readLE64(input + len - 8) ^ bitflip2; + xxh_u64 const acc = + len + XXH_swap64(input_lo) + input_hi + XXH3_mul128_fold64(input_lo, input_hi); + return XXH3_avalanche(acc); +} + +XXH64_hash_t XXH3_len_4to8_64b( + const xxh_u8* input, + size_t len, + const xxh_u8* secret, + XXH64_hash_t seed +) { + XXH_ASSERT(input != NULL); + XXH_ASSERT(secret != NULL); + XXH_ASSERT(4 <= len && len <= 8); + seed ^= (xxh_u64)XXH_swap32((xxh_u32)seed) << 32; + xxh_u32 const input1 = XXH_readLE32(input); + xxh_u32 const input2 = XXH_readLE32(input + len - 4); + xxh_u64 const bitflip = + (XXH_readLE64(secret + 8) ^ XXH_readLE64(secret + 16)) - seed; + xxh_u64 const input64 = input2 + (((xxh_u64)input1) << 32); + xxh_u64 const keyed = input64 ^ bitflip; + return XXH3_rrmxmx(keyed, len); +} + +XXH64_hash_t XXH3_len_1to3_64b( + const xxh_u8* input, + size_t len, + const xxh_u8* secret, + XXH64_hash_t seed +) { + XXH_ASSERT(input != NULL); + XXH_ASSERT(1 <= len && len <= 3); + XXH_ASSERT(secret != NULL); + /* + * len = 1: combined = { input[0], 0x01, input[0], input[0] } + * len = 2: combined = { input[1], 0x02, input[0], input[1] } + * len = 3: combined = { input[2], 0x03, input[0], input[1] } + */ + xxh_u8 const c1 = input[0]; + xxh_u8 const c2 = input[len >> 1]; + xxh_u8 const c3 = input[len - 1]; + xxh_u32 const combined = ((xxh_u32)c1 << 16) | ((xxh_u32)c2 << 24) | + ((xxh_u32)c3 << 0) | ((xxh_u32)len << 8); + xxh_u64 const bitflip = + (XXH_readLE32(secret) ^ XXH_readLE32(secret + 4)) + seed; + xxh_u64 const keyed = (xxh_u64)combined ^ bitflip; + return XXH64_avalanche(keyed); +} + +XXH64_hash_t XXH3_len_0to16_64b( + const xxh_u8* input, + size_t len, + const xxh_u8* secret, + XXH64_hash_t seed +) { + XXH_ASSERT(len <= 16); + if (XXH_likely(len > 8)) + return XXH3_len_9to16_64b(input, len, secret, seed); + if (XXH_likely(len >= 4)) + return XXH3_len_4to8_64b(input, len, secret, seed); + if (len) return XXH3_len_1to3_64b(input, len, secret, seed); + return XXH64_avalanche( + seed ^ (XXH_readLE64(secret + 56) ^ XXH_readLE64(secret + 64))); +} + +/* For mid range keys, XXH3 uses a Mum-hash variant. */ +XXH64_hash_t XXH3_len_17to128_64b( + const xxh_u8* XXH_RESTRICT input, + size_t len, + const xxh_u8* XXH_RESTRICT secret, + size_t secretSize, + XXH64_hash_t seed +) { + XXH_ASSERT(secretSize >= XXH3_SECRET_SIZE_MIN); + (void)secretSize; + XXH_ASSERT(16 < len && len <= 128); + + xxh_u64 acc = len * XXH_PRIME64_1; + if (len > 32) { + if (len > 64) { + if (len > 96) { + acc += XXH3_mix16B(input + 48, secret + 96, seed); + acc += XXH3_mix16B(input + len - 64, secret + 112, seed); + } + acc += XXH3_mix16B(input + 32, secret + 64, seed); + acc += XXH3_mix16B(input + len - 48, secret + 80, seed); + } + acc += XXH3_mix16B(input + 16, secret + 32, seed); + acc += XXH3_mix16B(input + len - 32, secret + 48, seed); + } + acc += XXH3_mix16B(input + 0, secret + 0, seed); + acc += XXH3_mix16B(input + len - 16, secret + 16, seed); + + return XXH3_avalanche(acc); +} + +XXH64_hash_t XXH3_len_129to240_64b( + const xxh_u8* XXH_RESTRICT input, size_t len, + const xxh_u8* XXH_RESTRICT secret, + size_t secretSize, XXH64_hash_t seed +) { + XXH_ASSERT(secretSize >= XXH3_SECRET_SIZE_MIN); + (void)secretSize; + XXH_ASSERT(128 < len && len <= XXH3_MIDSIZE_MAX); + + { + xxh_u64 acc = len * XXH_PRIME64_1; + int const nbRounds = (int)len / 16; + int i; + for (i = 0; i < 8; i++) { + acc += XXH3_mix16B(input + (16 * i), secret + (16 * i), seed); + } + acc = XXH3_avalanche(acc); + XXH_ASSERT(nbRounds >= 8); + for (i = 8; i < nbRounds; i++) { + acc += + XXH3_mix16B(input + (16 * i), + secret + (16 * (i - 8)) + XXH3_MIDSIZE_STARTOFFSET, seed); + } + /* last bytes */ + acc += XXH3_mix16B(input + len - 16, + secret + XXH3_SECRET_SIZE_MIN - XXH3_MIDSIZE_LASTOFFSET, + seed); + return XXH3_avalanche(acc); + } +} + +void XXH3_hashLong_internal_loop( + xxh_u64* XXH_RESTRICT acc, + const xxh_u8* XXH_RESTRICT input, size_t len, + const xxh_u8* XXH_RESTRICT secret, + size_t secretSize +) { + size_t const nbStripesPerBlock = + (secretSize - XXH_STRIPE_LEN) / XXH_SECRET_CONSUME_RATE; + size_t const block_len = XXH_STRIPE_LEN * nbStripesPerBlock; + size_t const nb_blocks = (len - 1) / block_len; + + size_t n; + + XXH_ASSERT(secretSize >= XXH3_SECRET_SIZE_MIN); + + for (n = 0; n < nb_blocks; n++) { + XXH3_accumulate(acc, input + n * block_len, secret, nbStripesPerBlock); + XXH3_scrambleAcc_scalar(acc, secret + secretSize - XXH_STRIPE_LEN); + } + + /* last partial block */ + XXH_ASSERT(len > XXH_STRIPE_LEN); + { + size_t const nbStripes = + ((len - 1) - (block_len * nb_blocks)) / XXH_STRIPE_LEN; + XXH_ASSERT(nbStripes <= (secretSize / XXH_SECRET_CONSUME_RATE)); + XXH3_accumulate(acc, input + nb_blocks * block_len, secret, nbStripes); + + /* last stripe */ + { + const xxh_u8* const p = input + len - XXH_STRIPE_LEN; +#define XXH_SECRET_LASTACC_START \ + 7 /* not aligned on 8, last secret is different from acc & scrambler */ + XXH3_accumulate_512_scalar( + acc, p, + secret + secretSize - XXH_STRIPE_LEN - XXH_SECRET_LASTACC_START); + } + } +} + +XXH64_hash_t XXH3_hashLong_64b_internal( + const void* XXH_RESTRICT input, + size_t len, + const void* XXH_RESTRICT secret, + size_t secretSize +) { + XXH_ALIGN(XXH_ACC_ALIGN) xxh_u64 acc[XXH_ACC_NB] = XXH3_INIT_ACC; + + XXH3_hashLong_internal_loop(acc, (const xxh_u8*)input, len, + (const xxh_u8*)secret, secretSize); + + /* converge into final hash */ + XXH_STATIC_ASSERT(sizeof(acc) == 64); + /* do not align on 8, so that the secret is different from the accumulator */ + XXH_ASSERT(secretSize >= sizeof(acc) + XXH_SECRET_MERGEACCS_START); + return XXH3_mergeAccs(acc, (const xxh_u8*)secret + XXH_SECRET_MERGEACCS_START, (xxh_u64)len * XXH_PRIME64_1); +} + +XXH64_hash_t XXH3_hashLong_64b_withSeed_internal( + const void* input, size_t len, XXH64_hash_t seed +) { + if (seed == 0) + return XXH3_hashLong_64b_internal( + input, len, XXH3_kSecret, sizeof(XXH3_kSecret) + ); + { + XXH_ALIGN(XXH_SEC_ALIGN) xxh_u8 secret[XXH_SECRET_DEFAULT_SIZE]; + XXH3_initCustomSecret_scalar(secret, seed); + return XXH3_hashLong_64b_internal(input, len, secret, sizeof(secret)); + } +} + +/* + * It's important for performance that XXH3_hashLong is not inlined. + */ +XXH64_hash_t XXH3_hashLong_64b_withSeed( + const void* input, size_t len, + XXH64_hash_t seed, const xxh_u8* secret, + size_t secretLen +) { + return XXH3_hashLong_64b_withSeed_internal(input, len, seed); +} + +XXH64_hash_t XXH3_hashLong_64b_withSecret( + const void* XXH_RESTRICT input, + size_t len, XXH64_hash_t seed64, + const xxh_u8* XXH_RESTRICT secret, + size_t secretLen +) { + return XXH3_hashLong_64b_internal(input, len, secret, secretLen); +} + +XXH64_hash_t XXH3_64bits_internal( + const void* XXH_RESTRICT input, size_t len, + XXH64_hash_t seed64, + const void* XXH_RESTRICT secret, + size_t secretLen, + XXH3_hashLong64_f f_hashLong +) { + XXH_ASSERT(secretLen >= XXH3_SECRET_SIZE_MIN); + /* + * If an action is to be taken if `secretLen` condition is not respected, + * it should be done here. + * For now, it's a contract pre-condition. + * Adding a check and a branch here would cost performance at every hash. + * Also, note that function signature doesn't offer room to return an error. + */ + if (len <= 16) + return XXH3_len_0to16_64b( + (const xxh_u8*)input, len, (const xxh_u8*)secret, seed64 + ); + if (len <= 128) + return XXH3_len_17to128_64b( + (const xxh_u8*)input, len, (const xxh_u8*)secret, secretLen, seed64 + ); + if (len <= XXH3_MIDSIZE_MAX) + return XXH3_len_129to240_64b( + (const xxh_u8*)input, len, (const xxh_u8*)secret, secretLen, seed64 + ); + return f_hashLong(input, len, seed64, (const xxh_u8*)secret, secretLen); +} + +XXH64_hash_t XXH3_64bits_withSeed( + const void* input, size_t len, XXH64_hash_t seed +) { + return XXH3_64bits_internal(input, len, seed, XXH3_kSecret, sizeof(XXH3_kSecret), XXH3_hashLong_64b_withSeed); +} + +XXH64_hash_t XXH3_64bits_withSecret( + const void* input, size_t len, const void* secret, size_t secretSize +) { + return XXH3_64bits_internal(input, len, 0, secret, secretSize, XXH3_hashLong_64b_withSecret); +} + +XXH64_hash_t XXH3_64bits_digest(const XXH3_state_t* state) { + const unsigned char* const secret = + (state->extSecret == NULL) ? state->customSecret : state->extSecret; + if (state->totalLen > XXH3_MIDSIZE_MAX) { + XXH_ALIGN(XXH_ACC_ALIGN) XXH64_hash_t acc[XXH_ACC_NB]; + XXH3_digest_long(acc, state, secret); + return XXH3_mergeAccs( + acc, secret + XXH_SECRET_MERGEACCS_START, + (xxh_u64)state->totalLen * XXH_PRIME64_1 + ); + } + /* totalLen <= XXH3_MIDSIZE_MAX: digesting a short input */ + if (state->seed) + return XXH3_64bits_withSeed( + state->buffer, (size_t)state->totalLen, state->seed + ); + return XXH3_64bits_withSecret( + state->buffer, (size_t)(state->totalLen), + secret, state->secretLimit + XXH_STRIPE_LEN + ); +} + +static struct XXH3_state_s sctx; +XXH3_state_t* state = &sctx; + +WASM_EXPORT +void Hash_Init() { + // seed is at the memory object + uint64_t seed = *((uint64_t*)main_buffer); + XXH3_64bits_reset_withSeed(state, seed); +} + +WASM_EXPORT +void Hash_Update(uint32_t length) { + const void* input = main_buffer; + XXH3_64bits_update(state, input, length); +} + +WASM_EXPORT +void Hash_Final() { + XXH64_hash_t const result = XXH_swap64(XXH3_64bits_digest(state)); + memcpy64(main_buffer, &result); +} + +WASM_EXPORT +const uint32_t STATE_SIZE = sizeof(sctx); + +WASM_EXPORT +uint8_t* Hash_GetState() { + return (uint8_t*)&sctx; +} + +WASM_EXPORT +void Hash_Calculate() { + return; +} diff --git a/frontend/node_modules/hash-wasm/src/xxhash32.c b/frontend/node_modules/hash-wasm/src/xxhash32.c new file mode 100644 index 0000000..2506ffc --- /dev/null +++ b/frontend/node_modules/hash-wasm/src/xxhash32.c @@ -0,0 +1,183 @@ +// ////////////////////////////////////////////////////////// +// xxhash32.h +// Copyright (c) 2016 Stephan Brumme. All rights reserved. +// see http://create.stephan-brumme.com/disclaimer.html +// +// XXHash (32 bit), based on Yann Collet's descriptions, see +// http://cyan4973.github.io/xxHash/ +// +// Modified for hash-wasm by Dani Biró +// + +#define WITH_BUFFER +#include "hash-wasm.h" +#define bswap32 __builtin_bswap32 + +static const uint32_t Prime1 = 2654435761U; +static const uint32_t Prime2 = 2246822519U; +static const uint32_t Prime3 = 3266489917U; +static const uint32_t Prime4 = 668265263U; +static const uint32_t Prime5 = 374761393U; + +// temporarily store up to 15 bytes between multiple add() calls +#define MAX_BUFFER_SIZE (15 + 1) + +// internal state and temporary buffer +struct XXHash32_CTX { + uint32_t state[4]; // state[2] == seed if totalLength < MAX_BUFFER_SIZE + unsigned char buffer[MAX_BUFFER_SIZE]; + unsigned int bufferSize; + uint64_t totalLength; +}; + +static struct XXHash32_CTX sctx; + +// rotate bits, should compile to a single CPU instruction (ROL) +static inline uint32_t rotateLeft(uint32_t x, unsigned char bits) { + return (x << bits) | (x >> (32 - bits)); +} + +// process a block of 4x4 bytes, this is the main part of the XXHash32 +// algorithm +static inline void process( + const void* data, uint32_t* state0, uint32_t* state1, + uint32_t* state2, uint32_t* state3 +) { + const uint32_t* block = (const uint32_t*)data; + *state0 = rotateLeft(*state0 + block[0] * Prime2, 13) * Prime1; + *state1 = rotateLeft(*state1 + block[1] * Prime2, 13) * Prime1; + *state2 = rotateLeft(*state2 + block[2] * Prime2, 13) * Prime1; + *state3 = rotateLeft(*state3 + block[3] * Prime2, 13) * Prime1; +} + +// create new XXHash (32 bit) +/** @param seed your seed value, even zero is a valid seed and e.g. used by LZ4 + * **/ +WASM_EXPORT +void Hash_Init(uint32_t seed) { + sctx.state[0] = seed + Prime1 + Prime2; + sctx.state[1] = seed + Prime2; + sctx.state[2] = seed; + sctx.state[3] = seed - Prime1; + sctx.bufferSize = 0; + sctx.totalLength = 0; +} + +// add a chunk of bytes +/** @param length number of bytes + @return false if parameters are invalid / zero **/ + +WASM_EXPORT +void Hash_Update(uint32_t length) { + const void* input = main_buffer; + + // no data ? + if (!input || length == 0) return; + + sctx.totalLength += length; + // byte-wise access + const unsigned char* data = (const unsigned char*)input; + + // unprocessed old data plus new data still fit in temporary buffer ? + if (sctx.bufferSize + length < MAX_BUFFER_SIZE) { + // just add new data + while (length-- > 0) { + sctx.buffer[sctx.bufferSize++] = *data++; + } + return; + } + + // point beyond last byte + const unsigned char* stop = data + length; + const unsigned char* stopBlock = stop - MAX_BUFFER_SIZE; + + // some data left from previous update ? + if (sctx.bufferSize > 0) { + // make sure temporary buffer is full (16 bytes) + while (sctx.bufferSize < MAX_BUFFER_SIZE) { + sctx.buffer[sctx.bufferSize++] = *data++; + } + + // process these 16 bytes (4x4) + process(sctx.buffer, &sctx.state[0], &sctx.state[1], &sctx.state[2], &sctx.state[3]); + } + + // copying state to local variables helps optimizer A LOT + uint32_t s0 = sctx.state[0], s1 = sctx.state[1], s2 = sctx.state[2], s3 = sctx.state[3]; + // 16 bytes at once + while (data <= stopBlock) { + // local variables s0..s3 instead of state[0]..state[3] are much faster + process(data, &s0, &s1, &s2, &s3); + data += 16; + } + // copy back + sctx.state[0] = s0; + sctx.state[1] = s1; + sctx.state[2] = s2; + sctx.state[3] = s3; + + // copy remainder to temporary buffer + sctx.bufferSize = stop - data; + for (unsigned int i = 0; i < sctx.bufferSize; i++) { + sctx.buffer[i] = data[i]; + } +} + +// get current hash +/** @return 32 bit XXHash **/ +WASM_EXPORT +void Hash_Final() { + uint32_t result = (uint32_t)sctx.totalLength; + + // fold 128 bit state into one single 32 bit value + if (sctx.totalLength >= MAX_BUFFER_SIZE) { + result += rotateLeft(sctx.state[0], 1) + + rotateLeft(sctx.state[1], 7) + + rotateLeft(sctx.state[2], 12) + + rotateLeft(sctx.state[3], 18); + } else { + // internal state wasn't set in add(), therefore original seed is still + // stored in state2 + result += sctx.state[2] + Prime5; + } + + // process remaining bytes in temporary buffer + const unsigned char* data = sctx.buffer; + // point beyond last byte + const unsigned char* stop = data + sctx.bufferSize; + + // at least 4 bytes left ? => eat 4 bytes per step + for (; data + 4 <= stop; data += 4) { + result = rotateLeft(result + *(uint32_t*)data * Prime3, 17) * Prime4; + } + + // take care of remaining 0..3 bytes, eat 1 byte per step + while (data != stop) { + result = rotateLeft(result + (*data++) * Prime5, 11) * Prime1; + } + + // mix bits + result ^= result >> 15; + result *= Prime2; + result ^= result >> 13; + result *= Prime3; + result ^= result >> 16; + + result = bswap32(result); + memcpy32(main_buffer, &result); +} + +WASM_EXPORT +const uint32_t STATE_SIZE = sizeof(sctx); + +WASM_EXPORT +uint8_t* Hash_GetState() { + return (uint8_t*) &sctx; +} + +WASM_EXPORT +void Hash_Calculate(uint32_t length, uint32_t initParam) { + Hash_Init(initParam); + Hash_Update(length); + Hash_Final(); +} diff --git a/frontend/node_modules/hash-wasm/src/xxhash64.c b/frontend/node_modules/hash-wasm/src/xxhash64.c new file mode 100644 index 0000000..59a767d --- /dev/null +++ b/frontend/node_modules/hash-wasm/src/xxhash64.c @@ -0,0 +1,199 @@ +// ////////////////////////////////////////////////////////// +// xxhash64.h +// Copyright (c) 2016 Stephan Brumme. All rights reserved. +// see http://create.stephan-brumme.com/disclaimer.html +// +// XXHash (64 bit), based on Yann Collet's descriptions, see +// http://cyan4973.github.io/xxHash/ +// +// Modified for hash-wasm by Dani Biró +// + +#define WITH_BUFFER +#include "hash-wasm.h" +#define bswap64 __builtin_bswap64 + +const uint64_t Prime1 = 11400714785074694791ULL; +const uint64_t Prime2 = 14029467366897019727ULL; +const uint64_t Prime3 = 1609587929392839161ULL; +const uint64_t Prime4 = 9650029242287828579ULL; +const uint64_t Prime5 = 2870177450012600261ULL; + +// temporarily store up to 31 bytes between multiple add() calls +#define MAX_BUFFER_SIZE (31 + 1) + +struct XXHash64_CTX { + uint64_t state[4]; + unsigned char buffer[MAX_BUFFER_SIZE]; + unsigned int bufferSize; + uint64_t totalLength; +}; + +static struct XXHash64_CTX sctx; + +// rotate bits, should compile to a single CPU instruction (ROL) +static inline uint64_t rotateLeft(uint64_t x, unsigned char bits) { + return (x << bits) | (x >> (64 - bits)); +} + +// process a single 64 bit value +static inline uint64_t processSingle(uint64_t previous, uint64_t input) { + return rotateLeft(previous + input * Prime2, 31) * Prime1; +} + +// process a block of 4x4 bytes, this is the main part of the XXHash32 +// algorithm +static inline void process( + const void* data, uint64_t* state0, uint64_t* state1, + uint64_t* state2, uint64_t* state3 +) { + const uint64_t* block = (const uint64_t*)data; + *state0 = processSingle(*state0, block[0]); + *state1 = processSingle(*state1, block[1]); + *state2 = processSingle(*state2, block[2]); + *state3 = processSingle(*state3, block[3]); +} + +WASM_EXPORT +void Hash_Init() { + // seed is at the memory object + uint64_t seed = *((uint64_t*)main_buffer); + + sctx.state[0] = seed + Prime1 + Prime2; + sctx.state[1] = seed + Prime2; + sctx.state[2] = seed; + sctx.state[3] = seed - Prime1; + sctx.bufferSize = 0; + sctx.totalLength = 0; +} + +// add a chunk of bytes +/** @param length number of bytes + @return false if parameters are invalid / zero **/ + +WASM_EXPORT +void Hash_Update(uint32_t length) { + const void* input = main_buffer; + + // no data ? + if (length == 0) return; + + sctx.totalLength += length; + // byte-wise access + const unsigned char* data = (const unsigned char*)input; + + // unprocessed old data plus new data still fit in temporary buffer ? + if (sctx.bufferSize + length < MAX_BUFFER_SIZE) { + // just add new data + while (length-- > 0) { + sctx.buffer[sctx.bufferSize++] = *data++; + } + + return; + } + + // point beyond last byte + const unsigned char* stop = data + length; + const unsigned char* stopBlock = stop - MAX_BUFFER_SIZE; + + // some data left from previous update ? + if (sctx.bufferSize > 0) { + // make sure temporary buffer is full (16 bytes) + while (sctx.bufferSize < MAX_BUFFER_SIZE) { + sctx.buffer[sctx.bufferSize++] = *data++; + } + + // process these 32 bytes (4x8) + process(sctx.buffer, &sctx.state[0], &sctx.state[1], &sctx.state[2], &sctx.state[3]); + } + + // copying state to local variables helps optimizer A LOT + uint64_t s0 = sctx.state[0], s1 = sctx.state[1], s2 = sctx.state[2], s3 = sctx.state[3]; + // 32 bytes at once + while (data <= stopBlock) { + // local variables s0..s3 instead of state[0]..state[3] are much faster + process(data, &s0, &s1, &s2, &s3); + data += 32; + } + // copy back + sctx.state[0] = s0; + sctx.state[1] = s1; + sctx.state[2] = s2; + sctx.state[3] = s3; + + // copy remainder to temporary buffer + sctx.bufferSize = stop - data; + for (unsigned int i = 0; i < sctx.bufferSize; i++) { + sctx.buffer[i] = data[i]; + } + + return; +} + +/// get current hash +WASM_EXPORT +void Hash_Final() { + // fold 256 bit state into one single 64 bit value + uint64_t result; + if (sctx.totalLength >= MAX_BUFFER_SIZE) { + result = rotateLeft(sctx.state[0], 1) + rotateLeft(sctx.state[1], 7) + + rotateLeft(sctx.state[2], 12) + rotateLeft(sctx.state[3], 18); + result = (result ^ processSingle(0, sctx.state[0])) * Prime1 + Prime4; + result = (result ^ processSingle(0, sctx.state[1])) * Prime1 + Prime4; + result = (result ^ processSingle(0, sctx.state[2])) * Prime1 + Prime4; + result = (result ^ processSingle(0, sctx.state[3])) * Prime1 + Prime4; + } else { + // internal state wasn't set in add(), therefore original seed is still + // stored in state2 + result = sctx.state[2] + Prime5; + } + + result += sctx.totalLength; + + // process remaining bytes in temporary buffer + const unsigned char* data = sctx.buffer; + // point beyond last byte + const unsigned char* stop = data + sctx.bufferSize; + + // at least 8 bytes left ? => eat 8 bytes per step + for (; data + 8 <= stop; data += 8) { + result = + rotateLeft(result ^ processSingle(0, *(uint64_t*)data), 27) * Prime1 + + Prime4; + } + + // 4 bytes left ? => eat those + if (data + 4 <= stop) { + result = + rotateLeft(result ^ (*(uint32_t*)data) * Prime1, 23) * Prime2 + Prime3; + data += 4; + } + + // take care of remaining 0..3 bytes, eat 1 byte per step + while (data != stop) { + result = rotateLeft(result ^ (*data++) * Prime5, 11) * Prime1; + } + + // mix bits + result ^= result >> 33; + result *= Prime2; + result ^= result >> 29; + result *= Prime3; + result ^= result >> 32; + + result = bswap64(result); + memcpy64(main_buffer, &result); +} + +WASM_EXPORT +const uint32_t STATE_SIZE = sizeof(sctx); + +WASM_EXPORT +uint8_t* Hash_GetState() { + return (uint8_t*) &sctx; +} + +WASM_EXPORT +void Hash_Calculate() { + return; +} diff --git a/frontend/node_modules/hash-wasm/tsconfig.json b/frontend/node_modules/hash-wasm/tsconfig.json new file mode 100644 index 0000000..c462cad --- /dev/null +++ b/frontend/node_modules/hash-wasm/tsconfig.json @@ -0,0 +1,16 @@ +{ + "compilerOptions": { + "target": "ES6", + "module": "ES6", + "lib": ["es2017", "es7", "es6", "dom"], + "baseUrl": ".", + "strict": false, + "esModuleInterop": true, + "downlevelIteration": true, + "moduleResolution": "node", + "resolveJsonModule": true + }, + "include": [ + "lib", + ] +} \ No newline at end of file diff --git a/frontend/package-lock.json b/frontend/package-lock.json index c805d2e..5ad8d29 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -8,6 +8,7 @@ "name": "shiftplan-frontend", "version": "1.0.0", "dependencies": { + "altcha": "^3.2.1", "lucide-react": "^0.424.0", "react": "^18.3.1", "react-dom": "^18.3.1" @@ -1293,6 +1294,15 @@ "vite": "^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0" } }, + "node_modules/altcha": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/altcha/-/altcha-3.2.1.tgz", + "integrity": "sha512-MXsnNmgg3BGJja0DXbflv9Bp29uyGv6wUImaaT1yLxCKOj+x9QBMpi/Vdh6XbP4Uf0PykaeQwl8ivJAvIhoo0A==", + "license": "MIT", + "dependencies": { + "hash-wasm": "^4.12.0" + } + }, "node_modules/any-promise": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", @@ -1750,6 +1760,12 @@ "node": ">=10.13.0" } }, + "node_modules/hash-wasm": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/hash-wasm/-/hash-wasm-4.12.0.tgz", + "integrity": "sha512-+/2B2rYLb48I/evdOIhP+K/DD2ca2fgBjp6O+GBEnCDk2e4rpeXIK8GvIyRPjTezgmWn9gmKwkQjjx6BtqDHVQ==", + "license": "MIT" + }, "node_modules/hasown": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.4.tgz", diff --git a/frontend/package.json b/frontend/package.json index d8677ae..789b7df 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -10,9 +10,10 @@ "preview": "vite preview" }, "dependencies": { + "altcha": "^3.2.1", + "lucide-react": "^0.424.0", "react": "^18.3.1", - "react-dom": "^18.3.1", - "lucide-react": "^0.424.0" + "react-dom": "^18.3.1" }, "devDependencies": { "@types/react": "^18.3.3", diff --git a/frontend/src/components/GuestSignupModal.jsx b/frontend/src/components/GuestSignupModal.jsx index 2c94344..ed4d015 100644 --- a/frontend/src/components/GuestSignupModal.jsx +++ b/frontend/src/components/GuestSignupModal.jsx @@ -1,5 +1,6 @@ import React, { useState, useEffect, useRef } from 'react'; import { X, ShieldCheck, UserCheck, AlertCircle, CheckCircle2 } from 'lucide-react'; +import 'altcha'; export default function GuestSignupModal({ shift, onClose, onSubmit }) { const [guestName, setGuestName] = useState(''); @@ -7,7 +8,7 @@ export default function GuestSignupModal({ shift, onClose, onSubmit }) { return sessionStorage.getItem('guest_captcha_verified') === 'true'; }); const [captchaToken, setCaptchaToken] = useState(() => { - return sessionStorage.getItem('guest_captcha_verified') === 'true' ? 'acaptcha-session-verified' : ''; + return sessionStorage.getItem('guest_captcha_verified') === 'true' ? 'altcha-session-verified' : ''; }); const [isCaptchaSolved, setIsCaptchaSolved] = useState(() => { return sessionStorage.getItem('guest_captcha_verified') === 'true'; @@ -30,35 +31,21 @@ export default function GuestSignupModal({ shift, onClose, onSubmit }) { const el = captchaRef.current; if (!el) return; - const handleVerified = (e) => { - const isVerified = e?.detail?.verified || (el.isValid && el.isValid()); - if (isVerified) { + const handleStateChange = (e) => { + const state = e?.detail?.state; + const payload = e?.detail?.payload; + if (state === 'verified') { sessionStorage.setItem('guest_captcha_verified', 'true'); setSessionVerified(true); setIsCaptchaSolved(true); - const token = 'acaptcha-verified-' + Math.random().toString(36).substring(2, 10); - setCaptchaToken(token); + setCaptchaToken(payload || ('altcha-verified-' + Math.random().toString(36).substring(2, 10))); } }; - const handleReset = () => { - setIsCaptchaSolved(false); - setCaptchaToken(''); - }; - - el.addEventListener('verified', handleVerified); - el.addEventListener('statuschange', handleVerified); - el.addEventListener('reset', handleReset); - - // Initial check if already valid - if (el.isValid && el.isValid()) { - handleVerified({ detail: { verified: true } }); - } + el.addEventListener('statechange', handleStateChange); return () => { - el.removeEventListener('verified', handleVerified); - el.removeEventListener('statuschange', handleVerified); - el.removeEventListener('reset', handleReset); + el.removeEventListener('statechange', handleStateChange); }; }, [sessionVerified]); @@ -74,11 +61,11 @@ export default function GuestSignupModal({ shift, onClose, onSubmit }) { const isVerified = sessionVerified || isCaptchaSolved; if (!isVerified) { - setError('Bitte löse zuerst das Captcha.'); + setError('Bitte schließe zuerst den ALTCHA Security Check ab.'); return; } - const token = captchaToken || 'acaptcha-session-verified'; + const token = captchaToken || 'altcha-session-verified'; // Save in localStorage for guest convenience localStorage.setItem('guest_display_name', guestName.trim()); @@ -140,11 +127,11 @@ export default function GuestSignupModal({ shift, onClose, onSubmit }) {

- {/* Security Check Section */} + {/* ALTCHA Security Check Section */} {sessionVerified ? (
- Security Check verifiziert + ALTCHA Spamschutz verifiziert [ In dieser Sitzung aktiv ]
@@ -152,31 +139,30 @@ export default function GuestSignupModal({ shift, onClose, onSubmit }) {
- Security Check (aCAPTCHA) + Security Check (ALTCHA) - aCAPTCHA v1.1 + ALTCHA.org
-
- + + test="true" + auto="onload" + hidefooter="true" + style={{ width: '100%' }} + > {isCaptchaSolved && (
- Captcha verifiziert! + ALTCHA erfolgreich verifiziert!
)}