Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

@adraffy/ens-normalize

Package Overview
Dependencies
Maintainers
1
Versions
51
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@adraffy/ens-normalize - npm Package Compare versions

Comparing version 1.1.0 to 1.1.1

319

dist/ens-normalize.js

@@ -1,45 +0,41 @@

export const VERSION = '1.1.0';
export const UNICODE_VERSION = '14.0.0';
// injected from ./build-source.js
function bytes_from_base64(s) {
return Uint8Array.from(atob(s), c => c.charCodeAt(0));
}
// injected from ./build-source.js
function decode2(v) {
let buf = 0;
let n = 0;
let ret = [];
next: for (let x of v) {
buf = (buf << 8) | x;
n += 8;
while (n >= 3) {
switch ((buf >> (n - 2)) & 3) { // upper 2 bits
case 3:
if (n < 10) continue next;
ret.push((buf >> (n -= 10)) & 255);
continue;
case 2:
if (n < 6) continue next;
ret.push((buf >> (n -= 6)) & 15);
continue;
default:
ret.push((buf >> (n -= 3)) & 3);
export const VERSION = '1.1.1';
export const UNICODE = '14.0.0';
// injected from ./decoder.js
class Decoder {
constructor(bytes) {
let buf = 0;
let n = 0;
let ret = [];
next: for (let x of bytes) {
buf = (buf << 8) | x;
n += 8;
while (n >= 3) {
switch ((buf >> (n - 2)) & 3) { // upper 2 bits
case 3:
if (n < 10) continue next;
ret.push((buf >> (n -= 10)) & 255);
continue;
case 2:
if (n < 6) continue next;
ret.push((buf >> (n -= 6)) & 15);
continue;
default:
ret.push((buf >> (n -= 3)) & 3);
}
}
}
}
return ret;
}
// injected from ./decoder.js
class TableReader {
constructor(table) {
this.table = table;
this.buf = ret;
//this.buf = bytes;
this.pos = 0;
}
/*
get more() {
return this.pos < this.table.length;
}
read_byte() { return this.table[this.pos++]; }
read() { // unsigned pseudo-huffman (note: assumes tables are valid)
let {table, pos} = this;
let x0 = table[pos];
*/
// unsigned pseudo-huffman
// note: no overflow check
read() {
let {buf, pos} = this;
let x0 = buf[pos];
if (x0 < 0x80) {

@@ -51,6 +47,6 @@ this.pos += 1;

this.pos += 2;
return 0x80 + (((x0 & 0x7F) << 8) | table[pos+1]);
return 0x80 + (((x0 & 0x7F) << 8) | buf[pos+1]);
}
this.pos += 4;
return 0x7F80 + ((table[pos+1] << 16) | (table[pos+2] << 8) | table[pos+3]);
return 0x7F80 + ((buf[pos+1] << 16) | (buf[pos+2] << 8) | buf[pos+3]);
}

@@ -61,88 +57,95 @@ read_signed() { // eg. [0,1,2,3...] => [0,-1,1,-2,...]

}
}
// injected from ./decoder.js
function lookup_member(table, cp) {
let x = 0;
let r = new TableReader(table);
while (r.more) {
x += r.read();
if (x == cp) return true;
if (x > cp) break;
read_counts(n) {
let v = Array(n);
for (let i = 0; i < n; i++) v[i] = 1 + this.read();
return v;
}
return false;
}
// injected from ./decoder.js
function lookup_member_span(table, cp) {
let x = 0;
let r = new TableReader(table);
while (r.more) {
x += r.read();
let d = cp - x;
if (d < 0) break;
let n = r.read();
if (d < n) return true;
x += n;
read_ascending(n) {
let v = Array(n);
for (let i = 0, x = -1; i < n; i++) v[i] = x += 1 + this.read();
return v;
}
return false;
}
// injected from ./decoder.js
function lookup_mapped(table, width, cp) {
let x = 0, y = 0;
let r = new TableReader(table);
while (r.more) {
x += r.read();
if (x > cp) break;
if (x == cp) {
let v = [];
for (let i = 0; i < width; i++) {
v.push(y += r.read_signed());
read_deltas(n) {
let v = Array(n);
for (let i = 0, x = 0; i < n; i++) v[i] = x += this.read_signed();
return v;
}
// returns [[x, n], ...] s.t. [x,3] == [x,x+1,x+2]
read_member_table() {
let v1 = this.read_ascending(this.read());
let n = this.read();
let vX = this.read_ascending(n);
let vN = this.read_counts(n);
return [
...v1.map(x => [x, 1]),
...vX.map((x, i) => [x, vN[i]])
].sort((a, b) => a[0] - b[0]);
}
// returns array of
// [x, ys] => single replacement rule
// [x, ys, n, dx, dx] => linear map
read_mapped_table() {
let ret = [];
for (let n = this.read(), i = 0; i < n; i++) {
ret.push(this.read_linear_table());
}
for (let n = 1 + this.read(), i = 1; i < n; i++) {
ret.push(this.read_mapped_replacement(i));
}
return ret.flat().sort((a, b) => a[0] - b[0]);
}
read_ys_transposed(n, w) {
let m = [this.read_deltas(n)];
for (let j = 1; j < w; j++) {
let v = Array(n);
let prev = m[j - 1];
for (let i = 0; i < n; i++) {
v[i] = prev[i] + this.read_signed();
}
return v;
m.push(v);
}
for (let i = 0; i < width; i++) {
y += r.read_signed();
}
return m;
}
}
// injected from ./decoder.js
function lookup_linear(table, step, cp) {
let x = 0, y = 0;
let r = new TableReader(table);
while (r.more) {
x += r.read();
let d = cp - x;
if (d < 0) break;
let n = r.read();
y += r.read_signed();
if (d < n && d % step == 0) return [y + d];
x += n;
read_mapped_replacement(w) {
let n = this.read();
let vX = this.read_ascending(n);
let mY = this.read_ys_transposed(n, w);
return vX.map((x, i) => [x, mY.map(v => v[i])])
}
}
// injected from ./decoder.js
function decode_emoji(table) {
let r = new TableReader(table);
let buckets = []; // stored by zwnj position
while (r.more) {
let n = r.read(); // group size
let w = r.read_byte(); // group width
let p = r.read(); // bit positions of zwnj
let m = []; // columns of cp
for (let i = 0; i < n; i++) m.push([]);
let z = []; // position of zwnj
for (let i = 0; i < w; i++) { // signed delta-encoded, transposed
if (p & (1 << (i - 1))) {
z.push(i);
m.forEach(v => v.push(0x200D)); // insert zwnj
} else {
let y = 0;
for (let v of m) v.push(y += r.read_signed());
read_linear_table() {
let w = 1 + this.read();
let dx = 1 + this.read();
let dy = this.read();
let n = 1 + this.read();
let vX = this.read_ascending(n);
let vN = this.read_counts(n);
let mY = this.read_ys_transposed(n, w);
return vX.map((x, i) => [x, mY.map(v => v[i]), vN[i], dx, dy]);
}
read_emoji() {
let buckets = [];
for (let k = this.read(); k > 0; k--) {
let n = 1 + this.read(); // group size
let w = 1 + this.read(); // group width w/o ZWNJ
let p = 1 + this.read(); // bit positions of zwnj
let z = []; // position of zwnj
let m = []; // emoji vectors
for (let i = 0; i < n; i++) m.push([]);
for (let i = 0; i < w; i++) {
if (p & (1 << (i - 1))) {
w++; // increase width
z.push(i); // remember position
m.forEach(v => v.push(0x200D)); // insert zwnj
} else {
this.read_deltas(n).forEach((x, i) => m[i].push(x));
}
}
for (let b of z) {
let bucket = buckets[b];
if (!bucket) buckets[b] = bucket = [];
bucket.push(...m);
}
}
for (let b of z) {
let bucket = buckets[b];
if (!bucket) buckets[b] = bucket = [];
bucket.push(...m);
}
return buckets;
}
return buckets;
}

@@ -154,16 +157,38 @@ // injected from ./utils.js

// compressed lookup tables
const TABLE_I = decode2(bytes_from_base64('4DLTwWQnlM7ZPD72dULP/jXsbxDgNvP/jPsgk/+vxPc4DcM='));
const TABLE_D = decode2(bytes_from_base64('GWo1T41NjWTTmYyFngefm4DGmyZpSTih4DnTt5yZZkmc3oxuSbEcWPAaAcwWdrZbs7WYq844ia5cfp0o8BkJoSWLGclyKlJSUGRGVYymZpEsWM5RRSJlkSbM8hM+I1M0lnFjOUZVUWWjfIrJ5yzQksWM5RlVKSc7kRlWJVIzNmRokppt2SStmRGY3YrLaWcXOIKksyTotFSKqfFizi5qMqpLMk6mRkVRVtpZzMszSYgsaLOJPGDSSp2ZJiTRNUnZnUmO5KiTKcYJOLqUkzKpSZBpBySTJzkhvNuS8BkGTmUrgL1wG0GRTkmRZSZFkJkU5JkV5zkyLQ1kDxqbVlMuCBxx6zPi1OMU4pZaWVZmiyhVTVTTGc1zazPlcujVY+bJLJC8qUteWSY1NW8+WgnHVXNVNcsfzHTXl53SjPHe88nytV0ZXLwPLKZZMplQSSScfWamclszuRTSWysz3NTmxmiwk0PFSWa0piXWTJa8hvyHEWsrOoGiTgNQNq4HN8ZrxXFNC4XPnwG+rIDwHuy5aTKVnE6uximczmczmczmcznfsixo6zZwGrZXn51ZJbHLlZzM5UdUsxDROA/4yHED+GaPN6eA9zFOAzijgNLlRJlxjO3VNnFGjUWTbpXjz041yZCc3puVS2fGMcqmUympnM5zyTflVN1eSWYvJmPQcJwH3LasmnsllsNplJKKO+4hwFc3AdYs2nOQVLFCZVPiBU11RmMikNpJZJJJO/I2o1T41NjUmgnHnMplMm2WZ8RsONHEyjersi3uVyZa9YNrOX5dwCx15jfjkmSU49LlcuPHJZLsq4DHlVNkkmSSZRRmldhvM5RrN5nK0PgO3pxaqjGJjlRp0WZE5YUysXOkUU5hiZUuQvG5ToGcSYosyKloLOOpyVT0z6BkGTyWU5s8dWNy41PJZPqGk5vmduZz5dRVwHTY+cqLS07KKMqxbGsmxzFMXp06TJKc+MtuMz1TZqcSoyenYDileJHLNBnJMhvNc2dy1TSGhJYsZyjKakk0ZjLOp3LwFeuGXHtIoq4DJs2WTZFotdU1uJ51NVm2Nq+TF+AznPNk1OyhFUFHHilZTVo1Cy5V43pFGp26TwHD0nLTdVjryBYsbtJnKOWMlGmiqaYo5KUZp6uA7bGeAzc35lbweN7Nt5lr4DROJ8zY7eD6/j9R4Hx+hznge5nx81SaiapseU1WjVVGc4rLifBZhrey6XJnM+I6BLWruX3ijhNWyqnotnkM5R4Do8teIyUcDZxHCbXLa6Z6lRyPuZcsXp3TPOA3arJ1pVG4Yro3AY1ilmr04zwE+qnRykUlIbCTOdBMioM5xwyGUlzngPUXAdIuCz6+U38H6GP8BsM5xFTlGXgNVy13KqRcB4GP4jnUp4TYJzIUbzwGirEMp0ySqRcFyOiaZnvAaFIcbKJRNRkJJmMhJJLKJRJJJJKJUhnMhkJNRxGVmU4jmi4Djssk2Sy9Xm85LisuNcBJnGO25ZJTOrpuAxrg9YlxB2vdLNZnskN9kmcUVTZRRjyWncB6llylcrnpx11yzVVTUUT08BiZzfJauD4b/xk+wZBx/cz8Bry5ZXc52PF8/tBrPAZUc/OvnXuF2LkvL/+rbs14DcP/W/ch'));
const TABLE_L1 = decode2(bytes_from_base64('0HGuA0LZcX4DfjPmHBZS+E+qbEaDTkmovgLxiHA5UMgz/gOBybgfi47IZuc57iMSyvhe/T1rc6Og6vInw2LaI+CxOeTFKnnnAeTR3GwUTZBVRkFFGQUTZBjVGgcBwk3e+vNVPZJu2/urGZOK0Dgunp4rvdNxrYBjQ4blsw9fHuE4d9r7Im4D2i+A9M1TDFeAzDFJdrnescBrj4DI3LiW7Td9/EkuUKbFBJd+/46h3WO+d8j5unguak9P4uA0ur383nxrYpsaGVTfBqUkuUKbFK33+kibgPaL4D0zVM5uAzBTWKaxOyyTn+64Pk8o/86L2HAUZJwHwcBjlfAf8b8YM+QcD0b/88RsvCaPmf/nluA4vbcg5fgPVGQf+Mr8D5cgxr/1rm+jGgMaAnBxLEBjV4xoWyY0aKhJkbnuNeIDGsdGNByTKiwz4kcayNyTGWqWfFDjWRjGgMaAxoDGgMaAxoDGgMaAxoDGgMaAxoSYjw2QGfJDiORmfJJ8RyMz5IcRyMz5JPiORmfJDiORmfJJ8RyMz5IcRyMz5JPiORmfJDiORmfJK6uG6UVAVAVAVDkOAyL/3qWycJtEn/vRs9xyQa61jrHBLGuL0Xismq2H'));
const TABLE_L2 = bytes_from_base64('gIAwgYIJBnICCBABLhIBBl4hBk4nEFoBEiIIKDQCElQSCkiBCBiCpHAigJAINlQBDm4BYB6YUIAWseAKYIDAWQiA4IyGBpmuE2Qy+Nwu/wB0ABIcgACABg6AxAI+IA4KgBgOFDAKEDw=');
const TABLE_M = [decode2(bytes_from_base64('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')),decode2(bytes_from_base64('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')),decode2(bytes_from_base64('4DPNi7/pu/58y9/03f9GV3/Rd/z/HZzz2+cAceWzcA8e5DO+g+QBzAcBtXfnHbsarpy7FeAt7/pu/5k19/03f8qr+/6bv+hJ7/pO/6Evv+m7/nTL3/Sd/zpff9F3/Ok9/0Hf86Z+/6bv+bJ7/nu/5s09/03f8uae/6Lv+XMvf893/Lk9/zXf8vJsQEmNYyJcex0TgCTGsZEuPY6Ltx7/qO/6HgMk8PcAHMBx/QeF/dGO7zs5/8admB/8adlo/8adlx/8adlq/8adli/8ab4uNYqqsQx/NPf/zgM0yFcBbwGPbGc1m4DFHwGI8BiW5nHeAyTNztNvAWPe+AVh4C3gLspWv51sU/AYvuWIya7wGLcBKa9w0E5bwGJZ7Joe4bGa9w1U37xwEsuVYrUbtV0BY1q23vINJ3ibK8oxR5jjtxsybTTlmZbmdC0TgJzoWjbys6x7RVlWWamck0LITj+hYisp3PgLjjOa4wcexrd6NqzDZTm2YZCaeAn4DInfluoSYzq9Vfwdaf/Gw8kf/Gw8eP/Gw8gf/Gw8ev/Gw8cf/Gw8fJ/42HjD/42Hj5v/Gw8Uf/Gw8fR/42HiD/42Hj6v/Gw8Mf/Gw8fZ/42HhD/42Hj7v/Gw8Ef/Gw8fiH/jYeAP/jYeNf/jYeSP/jYeNP/jYeQP/jYeNH/jYeOP/jYeNX/jYeMP/jYeNk/8bDxR/8bDkOIY60cikxvEt1OyYlud+wPFqTLkhxmnJDkqyQ14vkleMjdTsWKbqtyk3U7sNzOwYpua3CTczunheh4Xhu+rHTjE2OmzEsdORZDNkuITXuyeYqSV0CWXEvC77wvPOL+F9HhefVu5/8aX9R/8aX84/8aX9B/8aX86/8aX8x/8aX88n/jS/kP/jS/nm/8aX8R/8aX89H/jS/gP/jS/nq/8aX7x/8aX89n/jS/cP/jS/nu/8aX7R/8aX8+If+NL9g/+NL+V/+NL+o/+NL+U/+NL+g/+NL+Uf+NL+Y/+NL+Vf+NL+Q/+NL+WT/xpfxH/xpfyzf+NL+A/+NL+Wj/xpfvH/xpfy1f+NL9w/+NL+Wz/xpftH/xpfy3f+NL9g/+NL+OX/xpf1H/xpfxv/xpf0H/xpe914t/40fhKxMZRZlHFb1rNR1DWbOB0XgN8xyY5Dj0hyHIFrmmyZkc1mJcxLmzA5rRlxzXNsxLzbLzLm2Wl5ll5OZZeRmFRznMKDldZN1qNludHK8ky82ZJl5syTMTdkgOR5IDj94OIXg4hkAOQ25gchtzA5DfnhyvIstNmRZabMiByHIgcdxHODkt+XHHb8uON45l5xTHMvOKY4DjeOVHIcZzI4vjAOL4wDi+MUHHcWBxXFqjj+LUG/JcuM+S5cZZsvOVTAnLcwJy3OjXlucGnLwcwy8HMMry4nK8uJWXnLll5zDLycyy/MCMvzo05ijmGY5kRlrOZZblzGYyHMnmJzZgrMcwKzHODLmeZFZnmRWZ50ZTUZzQVSDVSDnNmcHP5M8OfyZ0c9ozg5/Rmxz3Nqjn+bUHOcyqOdrODnOZUHK6c2OT350crtzo5PiOdGvL88NaqIznOiM7zwimo0io3zVGfMc6N82XnLstzA4vjFRtkqM+Zo5hlucGvL8yLkBOX5kVmaJWdHOTnhpzHPDiNFR0OrOjbIDi+M5kcfyAHI6c4M+Z55lOU49wHOHgOfk4DnKOA7nHqv/Gp/P/7xbnsaxI5XjWKHLcaxY5fjWMHMcaxrWeAu4DJ8SPAYxwGU4keAxbgMnxQ8Bi3AZTinPfV/68PNfe8H3vEyT3vJFnAbl73efb2H29aT3e1d3s5Pebh3m2k+ttXrbOT/4Plf+D45Px/98f9k/+Lpv/FzJ8XEvFvJ+qb6n8=')),bytes_from_base64('n9e/5AAAAIB7v4G/pr+lARWADBkAABAaGQAAiBXDBAAAAIh0nG5eVmcBS4ASK2cBAoAiMW8CBE5QgAUED4AogCGAIgSAIXxLCgE5gAQFJAWAHXAKJAGAG3pVeAiAGXweXQQvIRZ4AmdmEoAFDEBYHwEGK2OAMmcKKnGAHlUGLHMWfAUbX3wMBCNpOFYBIzZnRgQBTQpGAwAiSyor7f6RtZ9p08gK/wByJQ8DFh8CwtDCw4ABHmLC5MLTB/8ASqyLADoABgE/ODUSASgvMCsBDB4VGAEnBCoHARUWDAUBAikiAgQngLaAyTo='),bytes_from_base64('sofg0CITgBplDjeAAHlyEQJlgAAEVwoCL3IRL1YBgAd4XS+AEgZvfGN2NwsdVoABcFUDGGMuHkYEK2eAEEsMAholFx+ACAIlUSB6IREZKndgGAMnFjNYIQwCDlUrgAJY4IEhBsLiwsM='),bytes_from_base64('spbg2oAAFzZnRoAZ4HEhBsLiwsOAAQ==')];
const TABLE_CM = decode2(bytes_from_base64('4LgNw4Dk5+A4fLSSiidIrzDFcQOyzqZIyZGcexvW686ppOMSGksy5W88oyrGDkObM4kZ6ljrzgmdJOk1LGinnBMsiTZx5M1vOCaCy8UWLTF5wTOknO6ljxzuVsyUnKJc3JnLMk6rWOvOCZyzJOq1jkmbozlmSk1LHXoxkmJNGJLPSp7KNiKprm0pY2SSZFmOKFS1nJKTsmKYvJIy1O5LbCapOCz98HmUmOPHVjy0DIKTlrJ3VZEd2sks4DW5c5qOOo5hj+Yy5fiOTU2PHrc4uzDFOAxhnFZDMU+A0bQOC1DIeL358BadgyDgeqm2lfrqkhqyBaguA5AsyHF5ZDqazLEsaxK05NRjNuWSZfdkh0O6w0LLXmRLSlROUyyrgNsoK87sDwWw4hiGIcHpp4DYjwGKy8NMypZMoch4DJVwPeycC1wGM15jJvTzW/KSlVJltc5z15JdiCyw2PMLqJCtcsmPAZBZismbozpJ0mpKdy8BoGJYudRxTgNrnVONrUsR2q3Zb+A4C/gN1mKUhJXAWzqdnHKsonMlBpry7EOBxWg0alixu3qZkozk6FKUZeA9uTy95lzufg+YJzeeTUTWvMytcj8OXLF+B56VzUUKfHpOAxR8PnebyZlQbji0pv4T0JziKnKMvAcLPwH7nPZOF2CfbZ//r5jNeA3D'));
const TABLE_V = bytes_from_base64('iM2AAIAAgACAAIAAgACAAG4BEX1wgACASoA1AYZaAR+AHoIOgGRmAUcBkQz6ByaAGIAPbYC2gHfd0oWHKg86egGADHWANWOAdYAAgH2AAHd1gI6AhAGAIlQTUoEmgIUBUg==');
const TABLE_LD = decode2(bytes_from_base64('4XoDKSTLJaZysjVGIYlkxVJJKyho4k5ZDSSSVj9bvUhKam0rIdWlRNRNRMiOOlS4lVKlMb+O744xrN2RE/+MQxXM/h82Wgy1F1ScBiJJbKJRxxcB6ORE8DxjOI2PHJFZlxKkKRRKMq/8az2miQ=='));
const TABLE_RD = decode2(bytes_from_base64('4XoCceNWRos6+TjCqaOIE49juZ6VkOq4zOTIZJcTZU2I2nG+O744xrN2RE/+MQxXMvh86Ykp0mpGaXgMQxLF5uA9LI+B4zFbJMbxLLiZTQZJF/41ntdE'));
const TABLE_T = decode2(bytes_from_base64('4DLTwPpbhwHJz8Bw+WklFE6RWTl2K4gdlnUyRkyEk49jet151TScYkNJZlyt55RlWMHIM3JMlEhc9Sx050ZJKDiixopZyZFIk2ceTNazkySlSHFFi0xOdFEyUGdVrHjnpsOZFnNyXKzJOq1jpzoozGVYoscWcqSSg4osdOkGdk60VPZRsRVNc2lLGySTm9xlKlrOSUnZpDMUljKkeISWlKY3ngs/fB5k8dWPLHloCM9BVdJy1k7qsiO7ORUmZ8BraRzomcklUTVI5hj+YyZgTKTKcopsWQSJF5wSmS86oS4DGGbTPIZi1wGjaBwPFlLGpcxllm2DIeL358BadgyDgeqk2tfrqkhqyBaguA5AsyHGVKeAxdY1iVpyajGa8ueYFSJZOdDmSSsNBy85mS0pUTlSoPAbcUZD53YHgthxDEMQ4DTzwG8vgeBPAbEeAxWXhpmVLJlDkPAZKuB72TgWuAxmvMZN7ObX5SUqnmMiU5z15JKaM+NizSmqRHX2iVMeAyAujFVnKZyWdy8BodCZOLnVJiZEVwG3STIrG1qtCJW1ElTE7K1IZeA4OkrgOARMh4DEJEpDkFWUTKSg0zJ5daVwOLTmYnUsWU5RW9TMlGcnSEyTwHtrlO7p7bN5c7n4PmDn8monzM4Rk5H3MuWL8D0DpxBT49JwGKPh87zeTMqDccWlN/CehOcRU5Rl4DhZ+A/c57JwuwT7bR/9fL5qce2DgBwG4Q=='));
const ZWNJ_EMOJI = decode_emoji(decode2(decode2(bytes_from_base64('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'))));
let r = new Decoder(Uint8Array.from(atob('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BAAAAAAAAACcAAAAAAAAAIAAAAAAAAAIAAAAAAAAAIAAAAAAAAAIAAAAAAAAATgAAAAAAAABAAAAAAAAABAAAAAAAAABAAAAAAAAABAAAAAAAAACcIIIIThBBBCcIIIIThBBBCcIIIIThBBBCcIIIIThBBBCcIIIIThBBBCcIIIIThBBBCcIIIIThBBBCcIIIIThBBBCcIIIIThBBBCcIIIIThBBBCcIIIIThBBBCcIIIIThBBBCcIIIIThBBBCcIIIIThBBBCcIIIIThBBBCcIIIIThBBBCcIIIIThBBBCcIIIIThBBBCcIIIIThBBBCcIIIIThBBBCcIIIIThBBBCcIIIIThBBBCcIIIIThBBBCcIIIITgBABABABACcAIAIAIAIATgBABABABAD/3s/EAAf+8a11cBsn/vGPs2rEsuyKjgJpOBxxcBq1XBZRknC91jS/95N564DZP/eMfZtWJZdkVHATScDji4DVquCyjJOF7rGl/7ybz1wGyf+8Y+zasSy7IqOAmk4HHFwGrVcFlGScL3WNL/3k3nrgNk/94x9m1Yll2RUcBNJwOOLgNWq4LKMk4XusaX/vJvPXAbJ/7xj7NqxLLsio4CaTgccXAatVwWUZJwvdY0v/eTeeuA2T/3jH2bViWXZFRwE0nA44uA1argsoyThe6xpf+8m89cBsn/vGPs2rEsuyKjgJpOBxxcBq1XBZRknC91jS/95N564DZP/eMfZtWJZdkVHATScDji4DVquCyjJOF7rGl/7ybz1wGyf+8Y+zasSy7IqOAmk4HHFwGrVcFlGScL3WNL/3k3nrgNk/94x9m1Yll2RUcBNJwOOLgNWq4LKMk4XusaX/vJvPXAbJ/7xj7NqxLLsio4CaTgccXAatVwWUZJwvdY0v/eTeeuA2T/3jH2bViWXZFRwE0nA44uA1argsoyThe6xpf+8m89cBsn/vGPs2rEsuyKjgJpOBxxcBq1XBZRknC91jS/95N564DZP/eMfZtWJZdkVHATScDji4DVquCyjJOF7rGl/7ybz1wGyf+8Y+zasSy7IqOAmk4HHFwGrVcFlGScL3WNL/3k+8yORyORyORyORyORyORyORyORyORyORyORyORyORyORyORyORyORyORyORyORyORyORyORyORyORyORyORyORyORyORyORyORyORyORyORyORyORyORyORyORyORyORyORyORyORyORyORyORyORyORyORyORyORyORyORyORyORyORyORyORyORyORyORyORyORyORyORyORyORyORyORyORyORyORyORyORyORyORyORyORyORyORyORyORyORyORyORyORyORyORyORyORyORyORyORyORyORyORyORyORyORyORyORyORyORyORyORyORyORyORyORyORyORyORyORyORyORyf+8n1xJSpKVJSpKVJSpKVJSpKVJSpKVJSpKVJSpKVJYmz/73bYgAAAAAAAAB/72jdgAgAgAgAgB/73bZAAAAAAAAAB/72jeElPIlOpFOlJOkpQDwHD6DuFuL8BmGT8Ddo8qxHWVfwHQcdo3EVWZZuSsbVClTKzqmRJcB5d999+P6fj9/AV14rJt12JOTEDkl/A5XwHbarjPDdfvvB51wG7sqZ04qaU6SlwGrFnar6Zpf3/Tzth4DTzrGQy08D8+Qkk43kRJLLLbbJJbbbc7bbZOOLEMfx1YlfTNOmVM7J555aOD5bgMv4DP675+B2ym2mSpcJpPF8/6uP/Ln+M4zjM+I4zjczknmnqxnGVLRPjKkpnxnGcZxnGcZxnGcZxnGcZx3EZ8RtxGfEbcRnxG3EZ8RtxGfEcRpppp5DieE3+mrFKs2oqc1OK08D/XFZ//43zuNX3PT+AyLGTi0xJRxChX4/kspypGckklEkpklTyzzyzkmWlkolkkmjGcZy8klSqnFCSZCiSjIZZJXp5KJJJJLJJJJJJJJJJJJJJJJJJpxnGSTLJKSVKqZZZUXk+R1XTEkklZlj+P4zjOMzYjjOMkudzVYzjJc82MlyTYzjOM4zjOM4zjOM4zjOM4ziE2ITYhNiE2ITYhNiE2ITYhNiE1NNNNOQllkklFHGaSSTwGha7wHuZhwWebRwG2cB7WgZvknAX8DlWf8D8XOc9z3u8xz2tdB2M2NcHnHB6vwe3dp+3ceHwv+ZRw2Q8L/WUcFneKZBdJV3GwZBkGQZBoHAZBoGQd968+7Yhi+JY3NxWrcVq9VY97yvfy3YB6+PensP/jIuK/8Sz8B7HAejwHtcB6c3AZhwGM8B83AenViXA2cB2etY1wHOzWTd93GgZRil3dY7/40zWv/Gz/niHAettFmSelQ563RiHp7KkkkkkkkkkkkliCSSSXF9vNsQ9HyO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'), c => c.charCodeAt(0)));
const COMBINING_MARKS = r.read_member_table();
const IGNORED = r.read_member_table();
const DISALLOWED = r.read_member_table();
const JOIN_T = r.read_member_table();
const JOIN_LD = r.read_member_table();
const JOIN_RD = r.read_member_table();
const VIRAMA = r.read_member_table();
const ZWNJ_EMOJI = r.read_emoji();
const MAPPED = r.read_mapped_table();
r = null;
export const DEBUG = {TABLE_I, TABLE_D, TABLE_L1, TABLE_L2, TABLE_M, TABLE_CM, TABLE_V, TABLE_LD, TABLE_RD, TABLE_T, ZWNJ_EMOJI};
function lookup_member(table, cp) {
for (let [x, n] of table) {
let d = cp - x;
if (d < 0) break;
if (d < n) return true;
}
return false;
}
function lookup_mapped(cp) {
for (let [x, y, n, dx, dy] of MAPPED) {
let d = cp - x;
if (d < 0) break;
if (n > 0) {
if (d < n && d % dx == 0) {
let r = d / dx;
return y.map(x => x + r * dy);
}
} else if (d == 0) {
return y;
}
}
}
export function is_zwnj_emoji(v, pos) {

@@ -257,24 +282,20 @@ let {length} = v;

function is_virama(cp) {
return lookup_member(VIRAMA, cp);
}
function is_combining_mark(cp) {
return lookup_member(COMBINING_MARKS, cp);
}
// warning: these should not be used directly
// expects code-point (number)
// is_* returns boolean
// get_* returns list of code-points or undefined
export function is_disallowed(cp) {
return lookup_member_span(TABLE_D, cp);
return lookup_member(DISALLOWED, cp);
}
export function is_ignored(cp) {
return lookup_member_span(TABLE_I, cp);
return lookup_member(IGNORED, cp);
}
export function is_combining_mark(cp) {
return lookup_member_span(TABLE_CM, cp);
}
export function get_mapped(cp) {
let mapped = lookup_linear(TABLE_L1, 1, cp);
if (mapped) return mapped;
mapped = lookup_linear(TABLE_L2, 2, cp);
if (mapped) return mapped;
for (let i = 0; i < TABLE_M.length; i++) {
mapped = lookup_mapped(TABLE_M[i], i + 1, cp);
if (mapped) return mapped;
}
return lookup_mapped(cp)?.slice();
}

@@ -313,3 +334,3 @@

// V = Combining_Class "Virama"
if (i > 0 && lookup_member(TABLE_V, v[i - 1])) {
if (i > 0 && is_virama(v[i - 1])) {
return cp; // allowed

@@ -321,7 +342,7 @@ }

let head = i - 1;
while (head > 0 && lookup_member_span(TABLE_T, v[head])) head--; // T*
if (lookup_member_span(TABLE_LD, v[head])) { // L or D
while (head > 0 && lookup_member(JOIN_T, v[head])) head--; // T*
if (lookup_member(JOIN_LD, v[head])) { // L or D
let tail = i + 1;
while (tail < v.length - 1 && lookup_member_span(TABLE_T, v[tail])) tail++; // T*
if (lookup_member_span(TABLE_RD, v[tail])) { // R or D
while (tail < v.length - 1 && lookup_member(JOIN_T, v[tail])) tail++; // T*
if (lookup_member(JOIN_RD, v[tail])) { // R or D
return cp; // allowed

@@ -336,3 +357,3 @@ }

// V = Combining_Class "Virama"
if (i > 0 && lookup_member(TABLE_V, v[i - 1])) {
if (i > 0 && is_virama(v[i - 1])) {
return cp; // allowed

@@ -347,3 +368,3 @@ }

}
return get_mapped(cp) ?? cp;
return lookup_mapped(cp) ?? cp;
}).flat()).normalize('NFC');

@@ -350,0 +371,0 @@ }

@@ -1,1 +0,1 @@

export const VERSION="1.1.0";export const UNICODE_VERSION="14.0.0";function A(A){return Uint8Array.from(atob(A),A=>A.charCodeAt(0))}function e(e){let n=0;let c=0;let H=[];A:for(let A of e){n=n<<8|A;c+=8;while(c>=3){switch(n>>c-2&3){case 3:if(c<10)continue A;H.push(n>>(c-=10)&255);continue;case 2:if(c<6)continue A;H.push(n>>(c-=6)&15);continue;default:H.push(n>>(c-=3)&3)}}}return H}class o{constructor(A){this.table=A;this.pos=0}get more(){return this.pos<this.table.length}read_byte(){return this.table[this.pos++]}read(){let{table:A,pos:e}=this;let n=A[e];if(n<128){this.pos+=1;return n}if(n<255){this.pos+=2;return 128+((n&127)<<8|A[e+1])}this.pos+=4;return 32640+(A[e+1]<<16|A[e+2]<<8|A[e+3])}read_signed(){let A=this.read();return A&1?~A>>1:A>>1}}function P(A,e){let n=0;let c=new o(A);while(c.more){n+=c.read();if(n==e)return true;if(n>e)break}return false}function t(A,n){let c=0;let H=new o(A);while(H.more){c+=H.read();let A=n-c;if(A<0)break;let e=H.read();if(A<e)return true;c+=e}return false}function c(A,n,e){let c=0,H=0;let O=new o(A);while(O.more){c+=O.read();if(c>e)break;if(c==e){let e=[];for(let A=0;A<n;A++){e.push(H+=O.read_signed())}return e}for(let A=0;A<n;A++){H+=O.read_signed()}}}function H(A,n,c){let H=0,O=0;let P=new o(A);while(P.more){H+=P.read();let A=c-H;if(A<0)break;let e=P.read();O+=P.read_signed();if(A<e&&A%n==0)return[O+A];H+=e}}function n(A){let P=new o(A);let t=[];while(P.more){let e=P.read();let n=P.read_byte();let c=P.read();let H=[];for(let A=0;A<e;A++)H.push([]);let O=[];for(let A=0;A<n;A++){if(c&1<<A-1){O.push(A);H.forEach(A=>A.push(8205))}else{let e=0;for(let A of H)A.push(e+=P.read_signed())}}for(let e of O){let A=t[e];if(!A)t[e]=A=[];A.push(...H)}}return t}function O(A){return A.replace(/[^\.\-a-z0-9]/giu,A=>`{${A.codePointAt(0).toString(16).toUpperCase()}}`)}const j=e(A("4DLTwWQnlM7ZPD72dULP/jXsbxDgNvP/jPsgk/+vxPc4DcM="));const l=e(A("GWo1T41NjWTTmYyFngefm4DGmyZpSTih4DnTt5yZZkmc3oxuSbEcWPAaAcwWdrZbs7WYq844ia5cfp0o8BkJoSWLGclyKlJSUGRGVYymZpEsWM5RRSJlkSbM8hM+I1M0lnFjOUZVUWWjfIrJ5yzQksWM5RlVKSc7kRlWJVIzNmRokppt2SStmRGY3YrLaWcXOIKksyTotFSKqfFizi5qMqpLMk6mRkVRVtpZzMszSYgsaLOJPGDSSp2ZJiTRNUnZnUmO5KiTKcYJOLqUkzKpSZBpBySTJzkhvNuS8BkGTmUrgL1wG0GRTkmRZSZFkJkU5JkV5zkyLQ1kDxqbVlMuCBxx6zPi1OMU4pZaWVZmiyhVTVTTGc1zazPlcujVY+bJLJC8qUteWSY1NW8+WgnHVXNVNcsfzHTXl53SjPHe88nytV0ZXLwPLKZZMplQSSScfWamclszuRTSWysz3NTmxmiwk0PFSWa0piXWTJa8hvyHEWsrOoGiTgNQNq4HN8ZrxXFNC4XPnwG+rIDwHuy5aTKVnE6uximczmczmczmcznfsixo6zZwGrZXn51ZJbHLlZzM5UdUsxDROA/4yHED+GaPN6eA9zFOAzijgNLlRJlxjO3VNnFGjUWTbpXjz041yZCc3puVS2fGMcqmUympnM5zyTflVN1eSWYvJmPQcJwH3LasmnsllsNplJKKO+4hwFc3AdYs2nOQVLFCZVPiBU11RmMikNpJZJJJO/I2o1T41NjUmgnHnMplMm2WZ8RsONHEyjersi3uVyZa9YNrOX5dwCx15jfjkmSU49LlcuPHJZLsq4DHlVNkkmSSZRRmldhvM5RrN5nK0PgO3pxaqjGJjlRp0WZE5YUysXOkUU5hiZUuQvG5ToGcSYosyKloLOOpyVT0z6BkGTyWU5s8dWNy41PJZPqGk5vmduZz5dRVwHTY+cqLS07KKMqxbGsmxzFMXp06TJKc+MtuMz1TZqcSoyenYDileJHLNBnJMhvNc2dy1TSGhJYsZyjKakk0ZjLOp3LwFeuGXHtIoq4DJs2WTZFotdU1uJ51NVm2Nq+TF+AznPNk1OyhFUFHHilZTVo1Cy5V43pFGp26TwHD0nLTdVjryBYsbtJnKOWMlGmiqaYo5KUZp6uA7bGeAzc35lbweN7Nt5lr4DROJ8zY7eD6/j9R4Hx+hznge5nx81SaiapseU1WjVVGc4rLifBZhrey6XJnM+I6BLWruX3ijhNWyqnotnkM5R4Do8teIyUcDZxHCbXLa6Z6lRyPuZcsXp3TPOA3arJ1pVG4Yro3AY1ilmr04zwE+qnRykUlIbCTOdBMioM5xwyGUlzngPUXAdIuCz6+U38H6GP8BsM5xFTlGXgNVy13KqRcB4GP4jnUp4TYJzIUbzwGirEMp0ySqRcFyOiaZnvAaFIcbKJRNRkJJmMhJJLKJRJJJJKJUhnMhkJNRxGVmU4jmi4Djssk2Sy9Xm85LisuNcBJnGO25ZJTOrpuAxrg9YlxB2vdLNZnskN9kmcUVTZRRjyWncB6llylcrnpx11yzVVTUUT08BiZzfJauD4b/xk+wZBx/cz8Bry5ZXc52PF8/tBrPAZUc/OvnXuF2LkvL/+rbs14DcP/W/ch"));const D=e(A("0HGuA0LZcX4DfjPmHBZS+E+qbEaDTkmovgLxiHA5UMgz/gOBybgfi47IZuc57iMSyvhe/T1rc6Og6vInw2LaI+CxOeTFKnnnAeTR3GwUTZBVRkFFGQUTZBjVGgcBwk3e+vNVPZJu2/urGZOK0Dgunp4rvdNxrYBjQ4blsw9fHuE4d9r7Im4D2i+A9M1TDFeAzDFJdrnescBrj4DI3LiW7Td9/EkuUKbFBJd+/46h3WO+d8j5unguak9P4uA0ur383nxrYpsaGVTfBqUkuUKbFK33+kibgPaL4D0zVM5uAzBTWKaxOyyTn+64Pk8o/86L2HAUZJwHwcBjlfAf8b8YM+QcD0b/88RsvCaPmf/nluA4vbcg5fgPVGQf+Mr8D5cgxr/1rm+jGgMaAnBxLEBjV4xoWyY0aKhJkbnuNeIDGsdGNByTKiwz4kcayNyTGWqWfFDjWRjGgMaAxoDGgMaAxoDGgMaAxoDGgMaAxoSYjw2QGfJDiORmfJJ8RyMz5IcRyMz5JPiORmfJDiORmfJJ8RyMz5IcRyMz5JPiORmfJDiORmfJK6uG6UVAVAVAVDkOAyL/3qWycJtEn/vRs9xyQa61jrHBLGuL0Xismq2H"));const f=A("gIAwgYIJBnICCBABLhIBBl4hBk4nEFoBEiIIKDQCElQSCkiBCBiCpHAigJAINlQBDm4BYB6YUIAWseAKYIDAWQiA4IyGBpmuE2Qy+Nwu/wB0ABIcgACABg6AxAI+IA4KgBgOFDAKEDw=");const g=[e(A("4DKuA0KjXSlw3JScNyp3zeuBsUmhbfPwHLrg9APA4+pFwOPHgcXXA44UeBxV8BkR4DeDIeBxFcDjhmVhJ4HHZOBywzKafFjwOXrgc2fA5WuBzY8Dl64HNCjwOWqRcDnB4HMZKM43BcBn51TKdBxr1bj6forgPDPq4w/T8dcCzwPJGba+D8c8Hvh4PdziB4PjjIbDwfJmTKOD1Q8HtpuNR4Putc4DVilki4DzMr4C9SLgPzXAf5TwG8T8BaeF2mXheqSK0DEjpJsONHECzSa8arNxkWKmVcBMtpO4cVyXK9BwOd933E1mX9xkPFycx6ZkOKGYog4gcyP/jxNQ4DJP/HmameA4o8Bw6kKPBbhVwWtngvoPBfKZDIUZDlZ4PXij2nxHuO/MhR4PaDIUeD2lUGQ8Dnh4HNzwelHtZCj3Hmmgo9x6B7T2zwe4nuPek7LPSjw2dnEjMUeF/go44airuA2zI+D1U8Hrp4PZDwWkngtYPB7WeD3IyGiTtesPa52dfPa9ge10s62TLiBxQo8Dl54HPCj2nSHtOhKPB9HJwv+cBrnaelwGrdp9KSSSzpJLO+30Qo8AT287xqrtvyPb0nt7j29dGdy9wCjwGant7aFL2/wFHgNNPbeye37CzgNZPbeue2+A9t7eLdxJr/f5+dyq8L0pPC8ezwvIl8L4TQcUOJHg9CPB7DLiBmK2bIZeD3B8Hs5RBBB4D/jwH9kGYhST0ET4guGx5cNjqx08Buh4DhSlIQUrjJLW+Gy44yQcaPeZFL4XskFGgrFzJjUsjxc4iUcSM8mNSyPFziJRxLgcq97tiuB0D38x4b9vX+JentZ7XpD2u/06udAOgmRen4Tmn9flzjB4PEits9T2FJLVvvAa5wHYf5rGqfPklv/jI+9OoHHDiRzQ6wbjlBzQ8JxR0w2HLjlByo7UcqOLHgO2PAZ4c4NRzw4kc2ONHMjtByQ5seF2g8BiB4PGDlxxA4sckPAYweDzo7AeA3A5ccmOWHbDMeC1Q4ocYONHgNoOIGo8BtRxQ40cQO9HIjkh4DIDwlR1w5UeF0g1HgMmOQHGjlR041HgeWOYHQDw+4HgJDlx3Q5gcSNx2g1HQDw/3Hgv+OMGo0HEDkhkPAZEeBzA1HgsmOKHZDccSOIHgM2Nx4HSDcdiORHXjwOtG45EeCuPAb4bDwH2HgMuOuHgt0PAcUeD/w5sdyOzHgKDixsOhHgMYOKHgs0NxxI4kcgOPGg8BjxoNh4fKjnh4PKjjBy48D2xxo8BcdcPB/cceOPHRjpR4G44weAmPA7gc+PA5EcqNR4HODwH4HgN6NhqPDeYcSPAdweA7QzHXjwGpHGjQbjwGiHRDYccPAecdmNB4D7jMcmPA7wdgNx4Cw4oZjihzw8Fyx4LoDih0w5YcQOKGg6gaDkRqONHNjjxxA7sceNGW/+O/2PNPf0heL7xmK4Dd//EtJR4D0jwHnngPUKq4DpZLshxko8B8hRoMhqNBkPAfyeBRkPAsoyGQo0GSbEjQcUNxqPAeUVJwGtlGY4kUZDihmk/jPjwHMHgOFPI5IeRyE6MdDPm+cfNzE7+cvPK+geD3E8htfAZLxnVHkfaPG8ser5DGf/Gq86ZCpLDIVN/47baDxHYHhMYPEdgeExg8JjB4jsDxHYHhMYPEdgeExg8JjB4TGDwmMPnPPX/jcffPAcweA4U8jkh5C08LmR4bUzw2oHhebPE6QenuPJaMeH+08Ty59T0j+nxnnbDwlR4HwT0f1HyfhPeawez9A9NOfM9E+b5B4jwT285+3bD/v+nhLD2W4H1e6P/jEtnPCcgezxQ91mJ0Y6GefzY8nsp4D7zyGcHYT229Hz9DP92H8tlPF4hkHobmZDIZDIUZDIZDIZDIZDIZDIZDMZDJPihmMxmmxIyfnlHsduZOA1P/x43jU4spF/45Thbv/HKdMv/Hlea//HlewpMY/8eV7JxM1HFi1tBy05Yf/Ho/ZiPDf6f/HldGe15g/+OU/RST3TWKTGv/Hn7WZjix/8efxT/8edjp1jgvj/8eZlB4foD/49LFz/49LTqv/HpU+bi//jk/2PlZOfPyw8HwZ7vbT4HenivmP/jF/uIP/i3FT+HAH+MTPDo8h7h6jZjyPcHjP0PBbseB/w8d1x8zmTwvZHhv8PC8Uegz48z7R5Djj/4xfXTxOzHruePG9cen6Q9fsR/8LGz0nbHq9EPDdcfM7U97zx4y4+llJ5DGjxmTHiukPd5If/DvPB/EeB849Hph4vnjxv9HicuPI9oeL4o8Blh47pjyUx4f+jwnLHytbPA7MeH8I8X6R539jy27HpvRPx7aeL8o91nB4fvDzfbnjNQPT7geT+o/33p4blDzXxHh7jwP1Hm/APA8gev6g/+J9xPtfkfc904+fQyA8N4h4v5j0nEHldpPofCeN+Y+DvB/mk817h4f1j021Hg9SPiZifL0g+j+55/VD0XbnvP+PHZOeu9Q+lnp4jtj3njHmsQPGaEe918+Pth8XzzyXJnv9OPfUno6j5n2nhP2PAaAes/A9Rph4rkDyGjHjd6P+5meCxo8T8R4rcjxuZHk/yPI+we44Y8R/R4f2jtx/8Yx8p6f1jxHxHx9WPw62eF7g8BsB4TtDynJHg/MPDA8Ujw/qHhN2POfceT+88r9R4Xzj/4XyngOYPB9oe35Y9fuh4PUD6+gngfYPDcYeP+Y9B0B5HET5HQnj+qPE64eDyY8Joh6brDwH3HlfiPAewej1w8TIeAyQ8DkB/8YjzJ9Pxj1/GHieIP15aekzU8JlB5XqDwGRHks0PEakePxg8RtB5z9Dy3AHneiP48Sfe8w/+J/JPU7IeA3A8Vjh4LNjxWtHgsgPC9IeI8o9tjh/8XbCehR+jFD/4txk8zrh6HIj4QPvd6eC/I8bkx5bYD4u/H/xTnJ4PTDyGWHkvcPA/seCzQ8P/R43wjwecHkuuPJZYckPI6seJ6w/+J/FPbbse07k918x4XED0WiHoPSPFfQeExA/bx54v6D0/dHje5PAZUeC2Q8nkZ4PzT2n/H+OvP0bYfh3c7KeY748P7R7Phj4WQnouyPGamfQ448brp5vgjzLPqfeea6U8RwD4TtFzfaPqOrPhYweG8A8Jsh0Q3HVD3dx7Trzwu/LjMqXE6Y+KB4GqTj9kONHWDxHMHmcrPF5kf/F3IngfyPAaYeC3g5seA1o8JjB4DUjwGiHg8wPAageG/g4oeH8w8DlB0w8BpB4bOjwHTHgPePB7QeJ2Q8B4x4HkDwmMHgP6PB7ceI148B7RxYk4gbDcdgKPAfIeAR4H/jwf0HKjuB4H4jwHTHg9QPAcwQeDzw8R+R4DjDwWrHcDwXaHajwnuHgOEPGeseB7g7wfvrP/vRdyP/tZW/n2M8Nzx4DGTwenng6jux4K47MeE8Y8BeeAoPAYkeE3A8BmR4DojkB4HnDwNh4b1DceA6A8BQeB9Y8Bth4Cs8Bxh1s8B0h4CQ8F0B4DMDth4HiDwPeHgPGNB3Y8P4x4BHguOPBdocfPAZceB3g8FkB4v8jxWxngN0PAbseCuPAdUdqPA6IZDwHrHIjmR4DLDiZ4LmDwelHgeePAfseB0A8B2R4LFDwNx4bGjwHdHhuUPB4geAqOQHgfSO5HWTthlOQngMYPAZEeC3w8H8B4H9DwPnHgc6PD8YeA048Bsx4DijpBxg7AeFy48Ryh/9cj7hrPLdEf/e4feeI3Y6Ef/fSdAeU44+Hwx/95/z54DFtH/8dn65yMzFSZQZMo4DjiDihBBBmIIIMhBBBrIIINRBBBrIIIOrEEEGQggg6GQQQSQQQZiCCCiCCDYQSQZCDWQcgINpBzAggg2EEEGggggsggg4kQUQQQaiCiCCDKQQQcoIKIyLSyCCDmhBJBkIUxBrINBBuIIIPAcaRifAcMQQRwPJej9U2VFYzz/Ckz8/wRRpKNpRlKxG+fn9Zl5/gCpff0/HeL2gogogogogogggogogggogogggogggogggogggogggogogogogogggogggogggogggogggogggogggoggg3EEEFEEEFEEEFEEEFEEEFEEEFEEEFEFEFEEEYzxfclaj6WXFH0svPv54UcXPA7ocRPAZCZDIZDId0MhkOjncjwGZmQyGQyFGQyGQyGQyGQyGQyGQzGQyT4oZjMZpsSMk+JGg8BmZS77syjwHpHgPPPAeoVVwHSyXZZ0G+lHElWSe/4hcRmUvAd4dW4XJv/OgbAVwO2f+eG1co8Hqp4L5jwFa4DID/49KY/+PSJJ4DGyj2v6HtfxNh4DFjwFJZZ3Y8Fs54LajtJzo6YUd9P/vOewP/n79rP/jyu/P/vOeuP/vOdtP/vOdwP/vPObPBb4UeD4s8HyR/95zzh/95zypRkOoFn/x6SP/j0f/Oen09SXp6GckKOJyf+852Q5R/403Yv/ee/ypCnM5isVp0mkrMyVbjXAe9wMh4HjMU4LgqO8x7Eu8no7v/j3mMmYyHGDSTiV9HeY9iXeT0d3/x7zGTMZDjBpJxK+jvMexLvJ6O7/495jJmMhxg0k4lfR3mPYl3k9Hd/8e8xkzGQ4waScSvo7zHsS7yeju/+PeYyZjIcYNJJzojle14TFCjQZlmRys0nFDk0uWmw4gcXONHITMcTKMxkNhkMh2g8BjBzE7GuAtNCzZ5ms6ly02HEDi5xpY2cTKMyxBUT43KlnSrUhyU2Kc40sbdaxBULgOAXAYquAtNCzZ5mcUOTG1SFHJTYcQOLnGljZxMozLEDIZDtC2ZcBuZRoMxzAo5WaTihyaXLTYcQOLnGjkJmOJlGYyGwyGSbIzQZlmRys0nFDk0uWmw4gcXONHITMcTKMxkNhkMnA/hxeWnHuA1b4Jrvi6w8bs547lT4vEnu6jynOH4cSPwfmeU4k9dvB5Xgjy3HnpsXPM/8eb309P4x6bpT6vlHj/FPXcofm/E8R9p7XNjzG+ngQeqyk4kf/EqPyaOee/E8XYed6g+pqR9XuT1vuHgdyPmbGe03A8dtpJ5v1j4pPDUH9uuxX4vrPLef/44bL+K+M0nEj/6+bQj/6+RngMcONHgLjwG4HPjwGOHLz2/wn/3kfcH/19Wsm45AcmP/r5/KP/vIdFPce4dMP/r5/8P/r5/nONHhcvPC6AcSP/yD1D/8g1M44e58c91nBxY6waj3WhnuvkMhzY5YcWKORHZDiBxI5kcUMhBB/9fb7R/9dn+57jyzlR/9ffxB/9fft5sOVHgOwPAaWcgOgHdDwGUHNDwExyA6EQcqOSHEDjx4LKDwPPngeiPA1nRjxGsnjdOPA9+dMOZHgODPAecSeA3Y/+v4/A/+v42M1HHjlBxA8AD/6/uw8BIf/X9b2deOMHgMdPAc4fG29eP2h2wg/+v95Q/+v84k5UceOMH/1/3lH/1/3Ym5ZwfI8E+Tnxxw8Bkh2U/+3lx/9nwT/7PjH/2dvMpyI8BpRR8r5T5eOHVjlR1g+Xxp/96l4R/96lxp8v6DMZjlB/+SrED/8lPTn/3R8xB/9eF758XPSD5man/3umxH3fEP/vhdvOJHzOPPmfcdmOKHRDwHIHzrTnZ87cD/7tB/92cyeA4I0GQs64coOkHGzix145QaDmhxY8BIeAyg6MeA3g/+7/4P/vEMdPAE8BrBzY8BoR/94hzR/94hjp4DOTm59LdT6f7HKjnx0s+nyp9XRjnR/94r3h/94p5p4HqjwHun1ffPrbgfW5E6Oes9wzHqtWPAaOez6I/zk58X/DQbDvRxU/+8Z2A/+9x3M+x8R4DaTwONHZj/7xjUD/7xjPTwGungdqPtbafa8o8BoR4C48B/h/94xux/94xefdlPu8kf/eN8Yf/eN5Kfd4s+75B1o5sUf/ePZIe64M93rx/94765/95Drh/95BvJxw8BpZ4D3jqB3I7WdQOPHGj/7x/sj/7yDUzwO7Hfj8P6n4uwM5/95Byh/95Fl54Laj/7yDYDsB/95BeeA2Y5qZT8nEn5PoOzGs7Yf/XU7gf/XUZ+f/eRd4f/eRWrgOYONHNj/7yf8D/7yfjzlR/95T4B4HPj/7ynszkR+nPT9O5H6dZIP1c8cqOVHKDwFR+r3T9fJH/3l3SH/3l23n/3l+UH/3l3hn/17HvH/16/On/3mfRHLjwHMH/30N5xg/brB/95pvxJ045of/eadSUQdWP29CfuyQ/dSeAyA/++n44/+84x074eAB+/UT/76uY/+86x8/+87oOrH/3nX1ngM4P4fufx6I4oaj/7z72jwPrEL/32Pkn/32fpH/3oGkmY/l4Z/99rmR/95/7Z/P4z+mIGk50f/ei8Yf/eieKf00M/rYd2PATH9ehP/vvtoOfH/332tn/33/AH/3o+en/3pFB/96P6J4DSjix/96VlR4DEj/70qU/+9LxA/+9K+8/+vm14/+9f5M/znR4DIj/O3n+fmPmcif/fNbIccPz+GcSP/r4+1Mx5rtD/4xb5T/fmGs5Iff1M+/vhkOKHUj/71HLD/71HLTuB4Cw8Bih4DkzwHaHVDwGwHgeHPAbcZDkB/96jmh4H6jwHVn/35/pn/wLDIdGP/vXfoP/vXdLP/vVMQP/v1MdNB/9+rkB4Hwj/79fTT/4WlHGDixkPAA6CeA4w6ueA648BkJ4CY5suAzY6Af/EnHn/xLpxmP/vXOIP/vW+fNx/8S+if/E1R/8ZR/p/+SjZjwH4H/38vnnEj/4ozI8BjR4DujwOLH/3sOTH/3sG8nLDwGaHgM4P/vY/wP/jbvVP/rdPxOOnaD/63bXD/63TkzwGkH/3tvaHNj/72vMTwGdHQD/72zuj/72zpTwPdHgO+KPAZueC3o5wf/e4aUf/e266f/GMbWf/GMeIf/e4A//JP0J/8Y1nR/HoT+WxH/3uniHgcqP/yX+ucQP/jG9UP/vePUP/yYnl5/+TFNIP/veeVIOeH/3vfNH/3vWTn/xjfun/xjm2HgN8ObHeD/4xz3z/8mP6If/fAd2eB9w8B/R/8ZB7pz4/+Mh3Q/++H04//JlGVn/5Mo5o8DyR4Dhj/74jKz/4yPST/4yPxjUbjihuOlH/3x1U=")),e(A("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")),e(A("4DPNi7/pu/58y9/03f9GV3/Rd/z/HZzz2+cAceWzcA8e5DO+g+QBzAcBtXfnHbsarpy7FeAt7/pu/5k19/03f8qr+/6bv+hJ7/pO/6Evv+m7/nTL3/Sd/zpff9F3/Ok9/0Hf86Z+/6bv+bJ7/nu/5s09/03f8uae/6Lv+XMvf893/Lk9/zXf8vJsQEmNYyJcex0TgCTGsZEuPY6Ltx7/qO/6HgMk8PcAHMBx/QeF/dGO7zs5/8admB/8adlo/8adlx/8adlq/8adli/8ab4uNYqqsQx/NPf/zgM0yFcBbwGPbGc1m4DFHwGI8BiW5nHeAyTNztNvAWPe+AVh4C3gLspWv51sU/AYvuWIya7wGLcBKa9w0E5bwGJZ7Joe4bGa9w1U37xwEsuVYrUbtV0BY1q23vINJ3ibK8oxR5jjtxsybTTlmZbmdC0TgJzoWjbys6x7RVlWWamck0LITj+hYisp3PgLjjOa4wcexrd6NqzDZTm2YZCaeAn4DInfluoSYzq9Vfwdaf/Gw8kf/Gw8eP/Gw8gf/Gw8ev/Gw8cf/Gw8fJ/42HjD/42Hj5v/Gw8Uf/Gw8fR/42HiD/42Hj6v/Gw8Mf/Gw8fZ/42HhD/42Hj7v/Gw8Ef/Gw8fiH/jYeAP/jYeNf/jYeSP/jYeNP/jYeQP/jYeNH/jYeOP/jYeNX/jYeMP/jYeNk/8bDxR/8bDkOIY60cikxvEt1OyYlud+wPFqTLkhxmnJDkqyQ14vkleMjdTsWKbqtyk3U7sNzOwYpua3CTczunheh4Xhu+rHTjE2OmzEsdORZDNkuITXuyeYqSV0CWXEvC77wvPOL+F9HhefVu5/8aX9R/8aX84/8aX9B/8aX86/8aX8x/8aX88n/jS/kP/jS/nm/8aX8R/8aX89H/jS/gP/jS/nq/8aX7x/8aX89n/jS/cP/jS/nu/8aX7R/8aX8+If+NL9g/+NL+V/+NL+o/+NL+U/+NL+g/+NL+Uf+NL+Y/+NL+Vf+NL+Q/+NL+WT/xpfxH/xpfyzf+NL+A/+NL+Wj/xpfvH/xpfy1f+NL9w/+NL+Wz/xpftH/xpfy3f+NL9g/+NL+OX/xpf1H/xpfxv/xpf0H/xpe914t/40fhKxMZRZlHFb1rNR1DWbOB0XgN8xyY5Dj0hyHIFrmmyZkc1mJcxLmzA5rRlxzXNsxLzbLzLm2Wl5ll5OZZeRmFRznMKDldZN1qNludHK8ky82ZJl5syTMTdkgOR5IDj94OIXg4hkAOQ25gchtzA5DfnhyvIstNmRZabMiByHIgcdxHODkt+XHHb8uON45l5xTHMvOKY4DjeOVHIcZzI4vjAOL4wDi+MUHHcWBxXFqjj+LUG/JcuM+S5cZZsvOVTAnLcwJy3OjXlucGnLwcwy8HMMry4nK8uJWXnLll5zDLycyy/MCMvzo05ijmGY5kRlrOZZblzGYyHMnmJzZgrMcwKzHODLmeZFZnmRWZ50ZTUZzQVSDVSDnNmcHP5M8OfyZ0c9ozg5/Rmxz3Nqjn+bUHOcyqOdrODnOZUHK6c2OT350crtzo5PiOdGvL88NaqIznOiM7zwimo0io3zVGfMc6N82XnLstzA4vjFRtkqM+Zo5hlucGvL8yLkBOX5kVmaJWdHOTnhpzHPDiNFR0OrOjbIDi+M5kcfyAHI6c4M+Z55lOU49wHOHgOfk4DnKOA7nHqv/Gp/P/7xbnsaxI5XjWKHLcaxY5fjWMHMcaxrWeAu4DJ8SPAYxwGU4keAxbgMnxQ8Bi3AZTinPfV/68PNfe8H3vEyT3vJFnAbl73efb2H29aT3e1d3s5Pebh3m2k+ttXrbOT/4Plf+D45Px/98f9k/+Lpv/FzJ8XEvFvJ+qb6n8=")),A("n9e/5AAAAIB7v4G/pr+lARWADBkAABAaGQAAiBXDBAAAAIh0nG5eVmcBS4ASK2cBAoAiMW8CBE5QgAUED4AogCGAIgSAIXxLCgE5gAQFJAWAHXAKJAGAG3pVeAiAGXweXQQvIRZ4AmdmEoAFDEBYHwEGK2OAMmcKKnGAHlUGLHMWfAUbX3wMBCNpOFYBIzZnRgQBTQpGAwAiSyor7f6RtZ9p08gK/wByJQ8DFh8CwtDCw4ABHmLC5MLTB/8ASqyLADoABgE/ODUSASgvMCsBDB4VGAEnBCoHARUWDAUBAikiAgQngLaAyTo="),A("sofg0CITgBplDjeAAHlyEQJlgAAEVwoCL3IRL1YBgAd4XS+AEgZvfGN2NwsdVoABcFUDGGMuHkYEK2eAEEsMAholFx+ACAIlUSB6IREZKndgGAMnFjNYIQwCDlUrgAJY4IEhBsLiwsM="),A("spbg2oAAFzZnRoAZ4HEhBsLiwsOAAQ==")];const r=e(A("4LgNw4Dk5+A4fLSSiidIrzDFcQOyzqZIyZGcexvW686ppOMSGksy5W88oyrGDkObM4kZ6ljrzgmdJOk1LGinnBMsiTZx5M1vOCaCy8UWLTF5wTOknO6ljxzuVsyUnKJc3JnLMk6rWOvOCZyzJOq1jkmbozlmSk1LHXoxkmJNGJLPSp7KNiKprm0pY2SSZFmOKFS1nJKTsmKYvJIy1O5LbCapOCz98HmUmOPHVjy0DIKTlrJ3VZEd2sks4DW5c5qOOo5hj+Yy5fiOTU2PHrc4uzDFOAxhnFZDMU+A0bQOC1DIeL358BadgyDgeqm2lfrqkhqyBaguA5AsyHF5ZDqazLEsaxK05NRjNuWSZfdkh0O6w0LLXmRLSlROUyyrgNsoK87sDwWw4hiGIcHpp4DYjwGKy8NMypZMoch4DJVwPeycC1wGM15jJvTzW/KSlVJltc5z15JdiCyw2PMLqJCtcsmPAZBZismbozpJ0mpKdy8BoGJYudRxTgNrnVONrUsR2q3Zb+A4C/gN1mKUhJXAWzqdnHKsonMlBpry7EOBxWg0alixu3qZkozk6FKUZeA9uTy95lzufg+YJzeeTUTWvMytcj8OXLF+B56VzUUKfHpOAxR8PnebyZlQbji0pv4T0JziKnKMvAcLPwH7nPZOF2CfbZ//r5jNeA3D"));const i=A("iM2AAIAAgACAAIAAgACAAG4BEX1wgACASoA1AYZaAR+AHoIOgGRmAUcBkQz6ByaAGIAPbYC2gHfd0oWHKg86egGADHWANWOAdYAAgH2AAHd1gI6AhAGAIlQTUoEmgIUBUg==");const x=e(A("4XoDKSTLJaZysjVGIYlkxVJJKyho4k5ZDSSSVj9bvUhKam0rIdWlRNRNRMiOOlS4lVKlMb+O744xrN2RE/+MQxXM/h82Wgy1F1ScBiJJbKJRxxcB6ORE8DxjOI2PHJFZlxKkKRRKMq/8az2miQ=="));const y=e(A("4XoCceNWRos6+TjCqaOIE49juZ6VkOq4zOTIZJcTZU2I2nG+O744xrN2RE/+MQxXMvh86Ykp0mpGaXgMQxLF5uA9LI+B4zFbJMbxLLiZTQZJF/41ntdE"));const w=e(A("4DLTwPpbhwHJz8Bw+WklFE6RWTl2K4gdlnUyRkyEk49jet151TScYkNJZlyt55RlWMHIM3JMlEhc9Sx050ZJKDiixopZyZFIk2ceTNazkySlSHFFi0xOdFEyUGdVrHjnpsOZFnNyXKzJOq1jpzoozGVYoscWcqSSg4osdOkGdk60VPZRsRVNc2lLGySTm9xlKlrOSUnZpDMUljKkeISWlKY3ngs/fB5k8dWPLHloCM9BVdJy1k7qsiO7ORUmZ8BraRzomcklUTVI5hj+YyZgTKTKcopsWQSJF5wSmS86oS4DGGbTPIZi1wGjaBwPFlLGpcxllm2DIeL358BadgyDgeqk2tfrqkhqyBaguA5AsyHGVKeAxdY1iVpyajGa8ueYFSJZOdDmSSsNBy85mS0pUTlSoPAbcUZD53YHgthxDEMQ4DTzwG8vgeBPAbEeAxWXhpmVLJlDkPAZKuB72TgWuAxmvMZN7ObX5SUqnmMiU5z15JKaM+NizSmqRHX2iVMeAyAujFVnKZyWdy8BodCZOLnVJiZEVwG3STIrG1qtCJW1ElTE7K1IZeA4OkrgOARMh4DEJEpDkFWUTKSg0zJ5daVwOLTmYnUsWU5RW9TMlGcnSEyTwHtrlO7p7bN5c7n4PmDn8monzM4Rk5H3MuWL8D0DpxBT49JwGKPh87zeTMqDccWlN/CehOcRU5Rl4DhZ+A/c57JwuwT7bR/9fL5qce2DgBwG4Q=="));const B=n(e(e(A("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"))));export const DEBUG={TABLE_I:j,TABLE_D:l,TABLE_L1:D,TABLE_L2:f,TABLE_M:g,TABLE_CM:r,TABLE_V:i,TABLE_LD:x,TABLE_RD:y,TABLE_T:w,ZWNJ_EMOJI:B};export function is_zwnj_emoji(H,O){let{length:P}=H;for(let c=Math.min(O,B.length);c>0;c--){let e=B[c];if(!e)continue;A:for(let A of e){let n=O-c;for(let e of A){if(n>=P)continue A;let A=H[n];if(A===65039){n++;continue}else if(e!=H[n++]){continue A}}return true}}return false}function s(c){let H=[];let O=c.lastIndexOf("-");for(let e=0;e<O;++e){let A=c.charCodeAt(e);if(A>=128)throw new Error("punycode: expected basic");H.push(A)}O++;const P=36;const t=1;const o=26;const j=38;const l=700;const D=P-t;const f=D*o>>1;let g=72;let r=128;let i=0;const{length:x}=c;while(O<x){let A=i;for(let e=1,n=P;;n+=P){if(O>=x)throw new Error("punycode: invalid");let A=c.charCodeAt(O++);if(A<58){A-=22}else if(A<91){A-=65}else if(A<123){A-=97}else{throw new Error(`punycode: invalid byte ${A}`)}i+=A*e;const w=n<=g?t:n>=g+o?o:n-g;if(A<w)break;e*=P-w}const y=H.length+1;let e=i-A;e=A==0?e/l|0:e>>1;e+=e/y|0;let n=0;while(e>f){e=e/D|0;n+=P}g=n+P*e/(e+j)|0;r+=i/y|0;i%=y;H.splice(i++,0,r)}return String.fromCodePoint(...H)}export function is_disallowed(A){return t(l,A)}export function is_ignored(A){return t(j,A)}export function is_combining_mark(A){return t(r,A)}export function get_mapped(e){let n=H(D,1,e);if(n)return n;n=H(f,2,e);if(n)return n;for(let A=0;A<g.length;A++){n=c(g[A],A+1,e);if(n)return n}}export class DisallowedLabelError extends Error{constructor(A,e){super(`Disallowed label "${O(e)}": ${A}`);this.label=e}}export class DisallowedCharacterError extends Error{constructor(A,e,n=""){super(`Disallowed character "${O(String.fromCodePoint(A))}" at position ${1+e}`+(n?`: ${n}`:""));this.codePoint=A;this.offset=e}}export function idna(A,c=false){if(typeof A!=="string")throw new TypeError("expected string");let H=[...A].map(A=>A.codePointAt(0));const O=[];return String.fromCodePoint(...H.map((e,n)=>{if(is_disallowed(e)){if(c)return O;throw new DisallowedCharacterError(e,n)}if(is_ignored(e))return O;if(e===8204){if(n>0&&P(i,H[n-1])){return e}if(n>0&&n<H.length-1){let A=n-1;while(A>0&&t(w,H[A]))A--;if(t(x,H[A])){let A=n+1;while(A<H.length-1&&t(w,H[A]))A++;if(t(y,H[A])){return e}}}if(c)return O;throw new DisallowedCharacterError(e,n,`ZWJ outside of context`)}else if(e===8205){if(n>0&&P(i,H[n-1])){return e}if(is_zwnj_emoji(H,n)){return e}if(c)return O;throw new DisallowedCharacterError(e,n,`ZWNJ outside of context`)}return get_mapped(e)??e}).flat()).normalize("NFC")}export function ens_normalize(A,e=false){return idna(A,e).split(".").map(e=>{if(e.startsWith("xn--")){let A=s(e.slice(4));if(A!=idna(A,true))throw new DisallowedLabelError(`puny not idna`,e);e=A}if(/^.{2}--/u.test(e))throw new DisallowedLabelError(`double-hyphen at position 3`,e);if(e.startsWith("-"))throw new DisallowedLabelError(`leading hyphen`,e);if(e.endsWith("-"))throw new DisallowedLabelError(`trailing hyphen`,e);if(e.length>0&&is_combining_mark(e.codePointAt(0)))throw new DisallowedLabelError(`leading combining mark`,e);return e}).join(".")}
export const VERSION="1.1.1";export const UNICODE="14.0.0";class A{constructor(e){let n=0;let t=0;let c=[];A:for(let A of e){n=n<<8|A;t+=8;while(t>=3){switch(n>>t-2&3){case 3:if(t<10)continue A;c.push(n>>(t-=10)&255);continue;case 2:if(t<6)continue A;c.push(n>>(t-=6)&15);continue;default:c.push(n>>(t-=3)&3)}}}this.buf=c;this.pos=0}read(){let{buf:A,pos:e}=this;let n=A[e];if(n<128){this.pos+=1;return n}if(n<255){this.pos+=2;return 128+((n&127)<<8|A[e+1])}this.pos+=4;return 32640+(A[e+1]<<16|A[e+2]<<8|A[e+3])}A(){let A=this.read();return A&1?~A>>1:A>>1}t(e){let n=Array(e);for(let A=0;A<e;A++)n[A]=1+this.read();return n}O(n){let t=Array(n);for(let A=0,e=-1;A<n;A++)t[A]=e+=1+this.read();return t}B(n){let t=Array(n);for(let A=0,e=0;A<n;A++)t[A]=e+=this.A();return t}l(){let A=this.O(this.read());let e=this.read();let n=this.O(e);let t=this.t(e);return[...A.map(A=>[A,1]),...n.map((A,e)=>[A,t[e]])].sort((A,e)=>A[0]-e[0])}k(){let n=[];for(let A=this.read(),e=0;e<A;e++){n.push(this.i())}for(let A=1+this.read(),e=1;e<A;e++){n.push(this.v(e))}return n.flat().sort((A,e)=>A[0]-e[0])}J(t,e){let c=[this.B(t)];for(let A=1;A<e;A++){let e=Array(t);let n=c[A-1];for(let A=0;A<t;A++){e[A]=n[A]+this.A()}c.push(e)}return c}v(A){let e=this.read();let n=this.O(e);let t=this.J(e,A);return n.map((A,e)=>[A,t.map(A=>A[e])])}i(){let A=1+this.read();let n=1+this.read();let t=this.read();let e=1+this.read();let c=this.O(e);let O=this.t(e);let r=this.J(e,A);return c.map((A,e)=>[A,r.map(A=>A[e]),O[e],n,t])}G(){let r=[];for(let A=this.read();A>0;A--){let e=1+this.read();let n=1+this.read();let t=1+this.read();let c=[];let O=[];for(let A=0;A<e;A++)O.push([]);for(let A=0;A<n;A++){if(t&1<<A-1){n++;c.push(A);O.forEach(A=>A.push(8205))}else{this.B(e).forEach((A,e)=>O[e].push(A))}}for(let e of c){let A=r[e];if(!A)r[e]=A=[];A.push(...O)}}return r}}function t(A){return A.replace(/[^\.\-a-z0-9]/giu,A=>`{${A.codePointAt(0).toString(16).toUpperCase()}}`)}let e=new A(Uint8Array.from(atob("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BAAAAAAAAACcAAAAAAAAAIAAAAAAAAAIAAAAAAAAAIAAAAAAAAAIAAAAAAAAATgAAAAAAAABAAAAAAAAABAAAAAAAAABAAAAAAAAABAAAAAAAAACcIIIIThBBBCcIIIIThBBBCcIIIIThBBBCcIIIIThBBBCcIIIIThBBBCcIIIIThBBBCcIIIIThBBBCcIIIIThBBBCcIIIIThBBBCcIIIIThBBBCcIIIIThBBBCcIIIIThBBBCcIIIIThBBBCcIIIIThBBBCcIIIIThBBBCcIIIIThBBBCcIIIIThBBBCcIIIIThBBBCcIIIIThBBBCcIIIIThBBBCcIIIIThBBBCcIIIIThBBBCcIIIIThBBBCcIIIITgBABABABACcAIAIAIAIATgBABABABAD/3s/EAAf+8a11cBsn/vGPs2rEsuyKjgJpOBxxcBq1XBZRknC91jS/95N564DZP/eMfZtWJZdkVHATScDji4DVquCyjJOF7rGl/7ybz1wGyf+8Y+zasSy7IqOAmk4HHFwGrVcFlGScL3WNL/3k3nrgNk/94x9m1Yll2RUcBNJwOOLgNWq4LKMk4XusaX/vJvPXAbJ/7xj7NqxLLsio4CaTgccXAatVwWUZJwvdY0v/eTeeuA2T/3jH2bViWXZFRwE0nA44uA1argsoyThe6xpf+8m89cBsn/vGPs2rEsuyKjgJpOBxxcBq1XBZRknC91jS/95N564DZP/eMfZtWJZdkVHATScDji4DVquCyjJOF7rGl/7ybz1wGyf+8Y+zasSy7IqOAmk4HHFwGrVcFlGScL3WNL/3k3nrgNk/94x9m1Yll2RUcBNJwOOLgNWq4LKMk4XusaX/vJvPXAbJ/7xj7NqxLLsio4CaTgccXAatVwWUZJwvdY0v/eTeeuA2T/3jH2bViWXZFRwE0nA44uA1argsoyThe6xpf+8m89cBsn/vGPs2rEsuyKjgJpOBxxcBq1XBZRknC91jS/95N564DZP/eMfZtWJZdkVHATScDji4DVquCyjJOF7rGl/7ybz1wGyf+8Y+zasSy7IqOAmk4HHFwGrVcFlGScL3WNL/3k+8yORyORyORyORyORyORyORyORyORyORyORyORyORyORyORyORyORyORyORyORyORyORyORyORyORyORyORyORyORyORyORyORyORyORyORyORyORyORyORyORyORyORyORyORyORyORyORyORyORyORyORyORyORyORyORyORyORyORyORyORyORyORyORyORyORyORyORyORyORyORyORyORyORyORyORyORyORyORyORyORyORyORyORyORyORyORyORyORyORyORyORyORyORyORyORyORyORyORyORyORyORyORyORyORyORyORyORyORyORyORyORyORyORyORyORyORyORyf+8n1xJSpKVJSpKVJSpKVJSpKVJSpKVJSpKVJSpKVJYmz/73bYgAAAAAAAAB/72jdgAgAgAgAgB/73bZAAAAAAAAAB/72jeElPIlOpFOlJOkpQDwHD6DuFuL8BmGT8Ddo8qxHWVfwHQcdo3EVWZZuSsbVClTKzqmRJcB5d999+P6fj9/AV14rJt12JOTEDkl/A5XwHbarjPDdfvvB51wG7sqZ04qaU6SlwGrFnar6Zpf3/Tzth4DTzrGQy08D8+Qkk43kRJLLLbbJJbbbc7bbZOOLEMfx1YlfTNOmVM7J555aOD5bgMv4DP675+B2ym2mSpcJpPF8/6uP/Ln+M4zjM+I4zjczknmnqxnGVLRPjKkpnxnGcZxnGcZxnGcZxnGcZx3EZ8RtxGfEbcRnxG3EZ8RtxGfEcRpppp5DieE3+mrFKs2oqc1OK08D/XFZ//43zuNX3PT+AyLGTi0xJRxChX4/kspypGckklEkpklTyzzyzkmWlkolkkmjGcZy8klSqnFCSZCiSjIZZJXp5KJJJJLJJJJJJJJJJJJJJJJJJpxnGSTLJKSVKqZZZUXk+R1XTEkklZlj+P4zjOMzYjjOMkudzVYzjJc82MlyTYzjOM4zjOM4zjOM4zjOM4ziE2ITYhNiE2ITYhNiE2ITYhNiE1NNNNOQllkklFHGaSSTwGha7wHuZhwWebRwG2cB7WgZvknAX8DlWf8D8XOc9z3u8xz2tdB2M2NcHnHB6vwe3dp+3ceHwv+ZRw2Q8L/WUcFneKZBdJV3GwZBkGQZBoHAZBoGQd968+7Yhi+JY3NxWrcVq9VY97yvfy3YB6+PensP/jIuK/8Sz8B7HAejwHtcB6c3AZhwGM8B83AenViXA2cB2etY1wHOzWTd93GgZRil3dY7/40zWv/Gz/niHAettFmSelQ563RiHp7KkkkkkkkkkkkliCSSSXF9vNsQ9HyO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"),A=>A.charCodeAt(0)));const n=e.l();const c=e.l();const O=e.l();const r=e.l();const B=e.l();const l=e.l();const f=e.l();const y=e.G();const w=e.k();e=null;function k(A,t){for(let[e,n]of A){let A=t-e;if(A<0)break;if(A<n)return true}return false}function x(r){for(let[e,n,t,c,O]of w){let A=r-e;if(A<0)break;if(t>0){if(A<t&&A%c==0){let e=A/c;return n.map(A=>A+e*O)}}else if(A==0){return n}}}export function is_zwnj_emoji(c,O){let{length:r}=c;for(let t=Math.min(O,y.length);t>0;t--){let e=y[t];if(!e)continue;A:for(let A of e){let n=O-t;for(let e of A){if(n>=r)continue A;let A=c[n];if(A===65039){n++;continue}else if(e!=c[n++]){continue A}}return true}}return false}function i(t){let c=[];let O=t.lastIndexOf("-");for(let e=0;e<O;++e){let A=t.charCodeAt(e);if(A>=128)throw new Error("punycode: expected basic");c.push(A)}O++;const r=36;const B=1;const l=26;const f=38;const y=700;const w=r-B;const k=w*l>>1;let x=72;let i=128;let v=0;const{length:s}=t;while(O<s){let A=v;for(let e=1,n=r;;n+=r){if(O>=s)throw new Error("punycode: invalid");let A=t.charCodeAt(O++);if(A<58){A-=22}else if(A<91){A-=65}else if(A<123){A-=97}else{throw new Error(`punycode: invalid byte ${A}`)}v+=A*e;const G=n<=x?B:n>=x+l?l:n-x;if(A<G)break;e*=r-G}const J=c.length+1;let e=v-A;e=A==0?e/y|0:e>>1;e+=e/J|0;let n=0;while(e>k){e=e/w|0;n+=r}x=n+r*e/(e+f)|0;i+=v/J|0;v%=J;c.splice(v++,0,i)}return String.fromCodePoint(...c)}function v(A){return k(f,A)}function s(A){return k(n,A)}export function is_disallowed(A){return k(O,A)}export function is_ignored(A){return k(c,A)}export function get_mapped(A){return x(A)?.slice()}export class DisallowedLabelError extends Error{constructor(A,e){super(`Disallowed label "${t(e)}": ${A}`);this.label=e}}export class DisallowedCharacterError extends Error{constructor(A,e,n=""){super(`Disallowed character "${t(String.fromCodePoint(A))}" at position ${1+e}`+(n?`: ${n}`:""));this.codePoint=A;this.offset=e}}export function idna(A,t=false){if(typeof A!=="string")throw new TypeError("expected string");let c=[...A].map(A=>A.codePointAt(0));const O=[];return String.fromCodePoint(...c.map((e,n)=>{if(is_disallowed(e)){if(t)return O;throw new DisallowedCharacterError(e,n)}if(is_ignored(e))return O;if(e===8204){if(n>0&&v(c[n-1])){return e}if(n>0&&n<c.length-1){let A=n-1;while(A>0&&k(r,c[A]))A--;if(k(B,c[A])){let A=n+1;while(A<c.length-1&&k(r,c[A]))A++;if(k(l,c[A])){return e}}}if(t)return O;throw new DisallowedCharacterError(e,n,`ZWJ outside of context`)}else if(e===8205){if(n>0&&v(c[n-1])){return e}if(is_zwnj_emoji(c,n)){return e}if(t)return O;throw new DisallowedCharacterError(e,n,`ZWNJ outside of context`)}return x(e)??e}).flat()).normalize("NFC")}export function ens_normalize(A,e=false){return idna(A,e).split(".").map(e=>{if(e.startsWith("xn--")){let A=i(e.slice(4));if(A!=idna(A,true))throw new DisallowedLabelError(`puny not idna`,e);e=A}if(/^.{2}--/u.test(e))throw new DisallowedLabelError(`double-hyphen at position 3`,e);if(e.startsWith("-"))throw new DisallowedLabelError(`leading hyphen`,e);if(e.endsWith("-"))throw new DisallowedLabelError(`trailing hyphen`,e);if(e.length>0&&s(e.codePointAt(0)))throw new DisallowedLabelError(`leading combining mark`,e);return e}).join(".")}
{
"name": "@adraffy/ens-normalize",
"version": "1.1.0",
"version": "1.1.1",
"description": "Compact ES6 Ethereum Name Service (ENS) Name Normalizer",

@@ -31,5 +31,8 @@ "keywords": [

"build-source": "node build/build-source.js",
"build-dist": "uglifyjs dist/ens-normalize.js --mangle --toplevel --output dist/ens-normalize.min.js",
"build": "(npm run test-source) && (npm run build-source) && (npm run test-build) && (npm run build-dist) && (npm run test-dist)"
"build-dist": "uglifyjs dist/ens-normalize.js --mangle --mangle-props regex=/^read/ --toplevel --output dist/ens-normalize.min.js",
"build": "(npm run test-source) && (npm run build-source) && (npm run test-build) && (npm run build-dist) && (npm run test-dist)",
"report-idna": "node test/report-idna.js",
"report-ens": "node test/report-ens.js",
"report-reg": "node test/report-registered.js"
}
}

@@ -27,4 +27,4 @@ # ens-normalize.js

// when truthy, disallowed characters are ignored
ens_normalize('_') // throws: disallowed
ens_normalize('_', true) // === ''
console.log(ens_normalize('_', true)); // === ''
console.log(ens_normalize('_')); // throws: disallowed

@@ -35,2 +35,3 @@ // errors:

// - puny decode failure
// - puny decode mismatch
// - label has double-hyphen at [3:4]

@@ -40,3 +41,3 @@ // - label starts/ends with hyphen

// note: does not enforce .eth TLD 3-byte minimum
// note: does not enforce .eth TLD 3-character minimum
```

@@ -43,0 +44,0 @@

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc