node-ip-ts 1.0.0 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,394 @@
1
+ "use strict";
2
+ // Pure IP utility functions — no Node.js built-in dependencies.
3
+ // Safe to use in any environment: Node.js, browser, Deno, edge runtimes.
4
+ Object.defineProperty(exports, "__esModule", { value: true });
5
+ exports.normalizeFamily = normalizeFamily;
6
+ exports.toBuffer = toBuffer;
7
+ exports.toString = toString;
8
+ exports.isV4Format = isV4Format;
9
+ exports.isV6Format = isV6Format;
10
+ exports.fromPrefixLen = fromPrefixLen;
11
+ exports.mask = mask;
12
+ exports.cidr = cidr;
13
+ exports.subnet = subnet;
14
+ exports.cidrSubnet = cidrSubnet;
15
+ exports.not = not;
16
+ exports.or = or;
17
+ exports.isEqual = isEqual;
18
+ exports.isLoopback = isLoopback;
19
+ exports.isPrivate = isPrivate;
20
+ exports.isPublic = isPublic;
21
+ exports.loopback = loopback;
22
+ exports.toLong = toLong;
23
+ exports.fromLong = fromLong;
24
+ exports.normalizeToLong = normalizeToLong;
25
+ // ─── Internal helpers ─────────────────────────────────────────────────────────
26
+ function normalizeFamily(family) {
27
+ if (family === 4)
28
+ return 'ipv4';
29
+ if (family === 6)
30
+ return 'ipv6';
31
+ return family ? family.toLowerCase() : 'ipv4';
32
+ }
33
+ // ─── Buffer ↔ String conversion ───────────────────────────────────────────────
34
+ /**
35
+ * Convert an IP address string to a Buffer.
36
+ * Optionally write into an existing buffer at a given offset.
37
+ */
38
+ function toBuffer(ip, buff, offset) {
39
+ const off = offset !== undefined ? ~~offset : 0;
40
+ let result;
41
+ if (isV4Format(ip)) {
42
+ result = buff ?? Buffer.alloc(off + 4);
43
+ let pos = off;
44
+ for (const byte of ip.split('.')) {
45
+ result[pos++] = parseInt(byte, 10) & 0xff;
46
+ }
47
+ return result;
48
+ }
49
+ if (isV6Format(ip)) {
50
+ const sections = ip.split(':', 8);
51
+ for (let i = 0; i < sections.length; i++) {
52
+ if (isV4Format(sections[i])) {
53
+ const v4buf = toBuffer(sections[i]);
54
+ sections[i] = v4buf.subarray(0, 2).toString('hex');
55
+ if (++i < 8) {
56
+ sections.splice(i, 0, v4buf.subarray(2, 4).toString('hex'));
57
+ }
58
+ }
59
+ }
60
+ // Expand ::
61
+ if (sections[0] === '') {
62
+ while (sections.length < 8)
63
+ sections.unshift('0');
64
+ }
65
+ else if (sections[sections.length - 1] === '') {
66
+ while (sections.length < 8)
67
+ sections.push('0');
68
+ }
69
+ else if (sections.length < 8) {
70
+ let emptyIdx = 0;
71
+ for (; emptyIdx < sections.length && sections[emptyIdx] !== ''; emptyIdx++)
72
+ ;
73
+ const toInsert = 9 - sections.length;
74
+ sections.splice(emptyIdx, 1, ...Array(toInsert).fill('0'));
75
+ }
76
+ result = buff ?? Buffer.alloc(off + 16);
77
+ let pos = off;
78
+ for (const section of sections) {
79
+ const word = parseInt(section, 16);
80
+ result[pos++] = (word >> 8) & 0xff;
81
+ result[pos++] = word & 0xff;
82
+ }
83
+ return result;
84
+ }
85
+ throw new Error(`Invalid ip address: ${ip}`);
86
+ }
87
+ /**
88
+ * Convert a Buffer back to an IP address string.
89
+ */
90
+ function toString(buff, offset = 0, length) {
91
+ const len = length ?? buff.length - offset;
92
+ if (len === 4) {
93
+ const parts = [];
94
+ for (let i = 0; i < 4; i++)
95
+ parts.push(buff[offset + i]);
96
+ return parts.join('.');
97
+ }
98
+ if (len === 16) {
99
+ const parts = [];
100
+ for (let i = 0; i < 16; i += 2) {
101
+ parts.push(buff.readUInt16BE(offset + i).toString(16));
102
+ }
103
+ let result = parts.join(':');
104
+ result = result.replace(/(^|:)0(:0)*:0(:|$)/, '$1::$3');
105
+ result = result.replace(/:{3,4}/, '::');
106
+ return result;
107
+ }
108
+ return '';
109
+ }
110
+ // ─── Format detection ─────────────────────────────────────────────────────────
111
+ const IPV4_REGEX = /^(\d{1,3}\.){3}\d{1,3}$/;
112
+ const IPV6_REGEX = /^(::)?(((\d{1,3}\.){3}(\d{1,3}){1})?([0-9a-f]){0,4}:{0,2}){1,8}(::)?$/i;
113
+ function isV4Format(ip) {
114
+ return IPV4_REGEX.test(ip);
115
+ }
116
+ function isV6Format(ip) {
117
+ return IPV6_REGEX.test(ip);
118
+ }
119
+ // ─── Mask / CIDR utilities ───────────────────────────────────────────────────
120
+ /**
121
+ * Create a subnet mask from a prefix length.
122
+ */
123
+ function fromPrefixLen(prefixlen, family) {
124
+ const fam = prefixlen > 32 ? 'ipv6' : normalizeFamily(family);
125
+ const len = fam === 'ipv6' ? 16 : 4;
126
+ const buff = Buffer.alloc(len);
127
+ let remaining = prefixlen;
128
+ for (let i = 0; i < len; i++) {
129
+ const bits = Math.min(remaining, 8);
130
+ remaining -= bits;
131
+ buff[i] = ~(0xff >> bits) & 0xff;
132
+ }
133
+ return toString(buff);
134
+ }
135
+ /**
136
+ * Apply a subnet mask to an address.
137
+ */
138
+ function mask(addr, maskStr) {
139
+ const addrBuf = toBuffer(addr);
140
+ const maskBuf = toBuffer(maskStr);
141
+ const result = Buffer.alloc(Math.max(addrBuf.length, maskBuf.length));
142
+ if (addrBuf.length === maskBuf.length) {
143
+ for (let i = 0; i < addrBuf.length; i++) {
144
+ result[i] = addrBuf[i] & maskBuf[i];
145
+ }
146
+ }
147
+ else if (maskBuf.length === 4) {
148
+ // IPv6 address, IPv4 mask → mask low 4 bytes
149
+ for (let i = 0; i < maskBuf.length; i++) {
150
+ result[i] = addrBuf[addrBuf.length - 4 + i] & maskBuf[i];
151
+ }
152
+ }
153
+ else {
154
+ // IPv6 mask, IPv4 address → embed as ::ffff:ipv4
155
+ for (let i = 0; i < result.length - 6; i++)
156
+ result[i] = 0;
157
+ result[10] = 0xff;
158
+ result[11] = 0xff;
159
+ for (let i = 0; i < addrBuf.length; i++) {
160
+ result[i + 12] = addrBuf[i] & maskBuf[i + 12];
161
+ }
162
+ }
163
+ return toString(result);
164
+ }
165
+ /**
166
+ * Return the network address for a CIDR string (e.g. "192.168.1.1/24").
167
+ */
168
+ function cidr(cidrString) {
169
+ const [addr, prefixStr] = cidrString.split('/');
170
+ if (!prefixStr)
171
+ throw new Error(`invalid CIDR subnet: ${cidrString}`);
172
+ return mask(addr, fromPrefixLen(parseInt(prefixStr, 10)));
173
+ }
174
+ /**
175
+ * Compute full subnet information from address + mask.
176
+ */
177
+ function subnet(addr, subnetMask) {
178
+ const networkAddress = toLong(mask(addr, subnetMask));
179
+ const maskBuf = toBuffer(subnetMask);
180
+ let maskLength = 0;
181
+ for (const byte of maskBuf) {
182
+ if (byte === 0xff) {
183
+ maskLength += 8;
184
+ }
185
+ else {
186
+ let octet = byte & 0xff;
187
+ while (octet) {
188
+ octet = (octet << 1) & 0xff;
189
+ maskLength++;
190
+ }
191
+ }
192
+ }
193
+ const numberOfAddresses = 2 ** (32 - maskLength);
194
+ return {
195
+ networkAddress: fromLong(networkAddress),
196
+ firstAddress: numberOfAddresses <= 2
197
+ ? fromLong(networkAddress)
198
+ : fromLong(networkAddress + 1),
199
+ lastAddress: numberOfAddresses <= 2
200
+ ? fromLong(networkAddress + numberOfAddresses - 1)
201
+ : fromLong(networkAddress + numberOfAddresses - 2),
202
+ broadcastAddress: fromLong(networkAddress + numberOfAddresses - 1),
203
+ subnetMask,
204
+ subnetMaskLength: maskLength,
205
+ numHosts: numberOfAddresses <= 2 ? numberOfAddresses : numberOfAddresses - 2,
206
+ length: numberOfAddresses,
207
+ contains(other) {
208
+ return networkAddress === toLong(mask(other, subnetMask));
209
+ },
210
+ };
211
+ }
212
+ /**
213
+ * Compute full subnet information from a CIDR string.
214
+ */
215
+ function cidrSubnet(cidrString) {
216
+ const [addr, prefixStr] = cidrString.split('/');
217
+ if (!prefixStr)
218
+ throw new Error(`invalid CIDR subnet: ${cidrString}`);
219
+ return subnet(addr, fromPrefixLen(parseInt(prefixStr, 10)));
220
+ }
221
+ // ─── Bitwise operations ───────────────────────────────────────────────────────
222
+ /** Bitwise NOT of an IP address. */
223
+ function not(addr) {
224
+ const buff = toBuffer(addr);
225
+ for (let i = 0; i < buff.length; i++)
226
+ buff[i] ^= 0xff;
227
+ return toString(buff);
228
+ }
229
+ /** Bitwise OR of two IP addresses (supports mixed protocol). */
230
+ function or(a, b) {
231
+ let bufA = toBuffer(a);
232
+ let bufB = toBuffer(b);
233
+ if (bufA.length === bufB.length) {
234
+ for (let i = 0; i < bufA.length; i++)
235
+ bufA[i] |= bufB[i];
236
+ return toString(bufA);
237
+ }
238
+ // Ensure bufLong is the longer buffer
239
+ let bufLong = bufA.length > bufB.length ? bufA : bufB;
240
+ const bufShort = bufA.length > bufB.length ? bufB : bufA;
241
+ bufLong = Buffer.from(bufLong); // avoid mutating original ref
242
+ const offset = bufLong.length - bufShort.length;
243
+ for (let i = offset; i < bufLong.length; i++) {
244
+ bufLong[i] |= bufShort[i - offset];
245
+ }
246
+ return toString(bufLong);
247
+ }
248
+ /** Deep equality check for two IP addresses (supports mixed IPv4/IPv6). */
249
+ function isEqual(a, b) {
250
+ let bufA = toBuffer(a);
251
+ let bufB = toBuffer(b);
252
+ if (bufA.length === bufB.length) {
253
+ for (let i = 0; i < bufA.length; i++) {
254
+ if (bufA[i] !== bufB[i])
255
+ return false;
256
+ }
257
+ return true;
258
+ }
259
+ // Ensure bufA is IPv4 (shorter)
260
+ if (bufB.length === 4) {
261
+ const tmp = bufB;
262
+ bufB = bufA;
263
+ bufA = tmp;
264
+ }
265
+ for (let i = 0; i < 10; i++) {
266
+ if (bufB[i] !== 0)
267
+ return false;
268
+ }
269
+ const word = bufB.readUInt16BE(10);
270
+ if (word !== 0 && word !== 0xffff)
271
+ return false;
272
+ for (let i = 0; i < 4; i++) {
273
+ if (bufA[i] !== bufB[i + 12])
274
+ return false;
275
+ }
276
+ return true;
277
+ }
278
+ // ─── Address classification ───────────────────────────────────────────────────
279
+ /** Returns true if the address is a loopback address. */
280
+ function isLoopback(addr) {
281
+ // Plain long integer (no dots or colons) → convert to dotted decimal
282
+ if (!/\./.test(addr) && !/:/.test(addr)) {
283
+ addr = fromLong(Number(addr));
284
+ }
285
+ return (/^(::f{4}:)?127\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})/.test(addr) ||
286
+ /^0177\./.test(addr) ||
287
+ /^0x7f\./i.test(addr) ||
288
+ /^fe80::1$/i.test(addr) ||
289
+ /^::1$/.test(addr) ||
290
+ /^::$/.test(addr));
291
+ }
292
+ /** Returns true if the address is a private (RFC 1918 / ULA) address. */
293
+ function isPrivate(addr) {
294
+ if (isLoopback(addr))
295
+ return true;
296
+ // For IPv4-only addresses, normalize first
297
+ if (!isV6Format(addr)) {
298
+ const ipl = normalizeToLong(addr);
299
+ if (ipl < 0)
300
+ throw new Error('invalid ipv4 address');
301
+ addr = fromLong(ipl);
302
+ }
303
+ return (/^(::f{4}:)?10\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})$/i.test(addr) ||
304
+ /^(::f{4}:)?192\.168\.([0-9]{1,3})\.([0-9]{1,3})$/i.test(addr) ||
305
+ /^(::f{4}:)?172\.(1[6-9]|2\d|30|31)\.([0-9]{1,3})\.([0-9]{1,3})$/i.test(addr) ||
306
+ /^(::f{4}:)?169\.254\.([0-9]{1,3})\.([0-9]{1,3})$/i.test(addr) ||
307
+ /^f[cd][0-9a-f]{2}:/i.test(addr) ||
308
+ /^fe80:/i.test(addr) ||
309
+ /^::1$/.test(addr) ||
310
+ /^::$/.test(addr));
311
+ }
312
+ /** Returns true if the address is a publicly routable address. */
313
+ function isPublic(addr) {
314
+ return !isPrivate(addr);
315
+ }
316
+ // ─── Loopback & address resolution ───────────────────────────────────────────
317
+ /** Return the loopback address for the given IP family. */
318
+ function loopback(family) {
319
+ const fam = normalizeFamily(family);
320
+ if (fam !== 'ipv4' && fam !== 'ipv6') {
321
+ throw new Error('family must be ipv4 or ipv6');
322
+ }
323
+ return fam === 'ipv4' ? '127.0.0.1' : 'fe80::1';
324
+ }
325
+ /**
326
+ * Return a network interface address.
327
+ * - `name`: interface name, `'public'`, `'private'`, or `undefined` (any private)
328
+ * - `family`: `'ipv4'` (default) or `'ipv6'`
329
+ */
330
+ // ─── Long integer conversion ──────────────────────────────────────────────────
331
+ /** Convert a dotted-decimal IPv4 address to a 32-bit unsigned integer. */
332
+ function toLong(ip) {
333
+ let ipl = 0;
334
+ for (const octet of ip.split('.')) {
335
+ ipl = (ipl << 8) + parseInt(octet, 10);
336
+ }
337
+ return ipl >>> 0;
338
+ }
339
+ /** Convert a 32-bit unsigned integer to a dotted-decimal IPv4 address. */
340
+ function fromLong(ipl) {
341
+ return [
342
+ (ipl >>> 24) & 255,
343
+ (ipl >>> 16) & 255,
344
+ (ipl >>> 8) & 255,
345
+ ipl & 255,
346
+ ].join('.');
347
+ }
348
+ /**
349
+ * Normalize an IPv4 address (supports decimal, octal, hex, and compact notations)
350
+ * and return it as a 32-bit unsigned long. Returns -1 on error.
351
+ */
352
+ function normalizeToLong(addr) {
353
+ const parts = addr.split('.').map((part) => {
354
+ if (part.startsWith('0x') || part.startsWith('0X')) {
355
+ const v = parseInt(part, 16);
356
+ return Number.isNaN(v) ? NaN : v;
357
+ }
358
+ if (part.startsWith('0') && part !== '0' && /^[0-7]+$/.test(part)) {
359
+ return parseInt(part, 8);
360
+ }
361
+ if (/^[1-9]\d*$/.test(part) || part === '0') {
362
+ return parseInt(part, 10);
363
+ }
364
+ return NaN;
365
+ });
366
+ if (parts.some(Number.isNaN))
367
+ return -1;
368
+ const n = parts.length;
369
+ let val = 0;
370
+ switch (n) {
371
+ case 1:
372
+ val = parts[0];
373
+ break;
374
+ case 2:
375
+ if (parts[0] > 0xff || parts[1] > 0xffffff)
376
+ return -1;
377
+ val = (parts[0] << 24) | (parts[1] & 0xffffff);
378
+ break;
379
+ case 3:
380
+ if (parts[0] > 0xff || parts[1] > 0xff || parts[2] > 0xffff)
381
+ return -1;
382
+ val = (parts[0] << 24) | (parts[1] << 16) | (parts[2] & 0xffff);
383
+ break;
384
+ case 4:
385
+ if (parts.some((p) => p > 0xff))
386
+ return -1;
387
+ val = (parts[0] << 24) | (parts[1] << 16) | (parts[2] << 8) | parts[3];
388
+ break;
389
+ default:
390
+ return -1;
391
+ }
392
+ return val >>> 0;
393
+ }
394
+ //# sourceMappingURL=core.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"core.js","sourceRoot":"","sources":["../../src/core.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,62 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.normalizeToLong = exports.fromLong = exports.toLong = exports.loopback = exports.isPublic = exports.isPrivate = exports.isLoopback = exports.isEqual = exports.or = exports.not = exports.cidrSubnet = exports.subnet = exports.cidr = exports.mask = exports.fromPrefixLen = exports.isV6Format = exports.isV4Format = exports.toBuffer = void 0;
4
+ exports.address = address;
5
+ // Node.js entry point.
6
+ // Exports all pure functions from core.ts plus address() which uses the `os` module.
7
+ // Browser bundlers (Vite/esbuild/webpack) are redirected to index.browser.ts
8
+ // via the "browser" field in package.json, which never imports `os`.
9
+ const os_1 = require("os");
10
+ const core_js_1 = require("./core.js");
11
+ var core_js_2 = require("./core.js");
12
+ Object.defineProperty(exports, "toBuffer", { enumerable: true, get: function () { return core_js_2.toBuffer; } });
13
+ Object.defineProperty(exports, "toString", { enumerable: true, get: function () { return core_js_2.toString; } });
14
+ Object.defineProperty(exports, "isV4Format", { enumerable: true, get: function () { return core_js_2.isV4Format; } });
15
+ Object.defineProperty(exports, "isV6Format", { enumerable: true, get: function () { return core_js_2.isV6Format; } });
16
+ Object.defineProperty(exports, "fromPrefixLen", { enumerable: true, get: function () { return core_js_2.fromPrefixLen; } });
17
+ Object.defineProperty(exports, "mask", { enumerable: true, get: function () { return core_js_2.mask; } });
18
+ Object.defineProperty(exports, "cidr", { enumerable: true, get: function () { return core_js_2.cidr; } });
19
+ Object.defineProperty(exports, "subnet", { enumerable: true, get: function () { return core_js_2.subnet; } });
20
+ Object.defineProperty(exports, "cidrSubnet", { enumerable: true, get: function () { return core_js_2.cidrSubnet; } });
21
+ Object.defineProperty(exports, "not", { enumerable: true, get: function () { return core_js_2.not; } });
22
+ Object.defineProperty(exports, "or", { enumerable: true, get: function () { return core_js_2.or; } });
23
+ Object.defineProperty(exports, "isEqual", { enumerable: true, get: function () { return core_js_2.isEqual; } });
24
+ Object.defineProperty(exports, "isLoopback", { enumerable: true, get: function () { return core_js_2.isLoopback; } });
25
+ Object.defineProperty(exports, "isPrivate", { enumerable: true, get: function () { return core_js_2.isPrivate; } });
26
+ Object.defineProperty(exports, "isPublic", { enumerable: true, get: function () { return core_js_2.isPublic; } });
27
+ Object.defineProperty(exports, "loopback", { enumerable: true, get: function () { return core_js_2.loopback; } });
28
+ Object.defineProperty(exports, "toLong", { enumerable: true, get: function () { return core_js_2.toLong; } });
29
+ Object.defineProperty(exports, "fromLong", { enumerable: true, get: function () { return core_js_2.fromLong; } });
30
+ Object.defineProperty(exports, "normalizeToLong", { enumerable: true, get: function () { return core_js_2.normalizeToLong; } });
31
+ /**
32
+ * Return a network interface address.
33
+ * - `name`: interface name, `'public'`, `'private'`, or `undefined` (any private)
34
+ * - `family`: `'ipv4'` (default) or `'ipv6'`
35
+ */
36
+ function address(name, family) {
37
+ const ifaces = (0, os_1.networkInterfaces)();
38
+ const fam = (0, core_js_1.normalizeFamily)(family);
39
+ if (name && name !== 'private' && name !== 'public') {
40
+ const iface = ifaces[name];
41
+ if (!iface)
42
+ return (0, core_js_1.loopback)(fam);
43
+ const match = iface.filter((d) => (0, core_js_1.normalizeFamily)(d.family) === fam);
44
+ return match.length ? match[0].address : (0, core_js_1.loopback)(fam);
45
+ }
46
+ const all = Object.values(ifaces)
47
+ .flat()
48
+ .filter((d) => {
49
+ if (!d)
50
+ return false;
51
+ if ((0, core_js_1.normalizeFamily)(d.family) !== fam)
52
+ return false;
53
+ if ((0, core_js_1.isLoopback)(d.address))
54
+ return false;
55
+ if (!name)
56
+ return true;
57
+ return name === 'public' ? (0, core_js_1.isPublic)(d.address) : (0, core_js_1.isPrivate)(d.address);
58
+ })
59
+ .map((d) => d.address);
60
+ return all.length ? all[0] : (0, core_js_1.loopback)(fam);
61
+ }
62
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;AA2CA,0BAuBC;AAlED,uBAAuB;AACvB,qFAAqF;AACrF,6EAA6E;AAC7E,qEAAqE;AACrE,2BAAgE;AAEhE,uCAMmB;AAEnB,qCAoBmB;AAnBjB,mGAAA,QAAQ,OAAA;AACR,mGAAA,QAAQ,OAAA;AACR,qGAAA,UAAU,OAAA;AACV,qGAAA,UAAU,OAAA;AACV,wGAAA,aAAa,OAAA;AACb,+FAAA,IAAI,OAAA;AACJ,+FAAA,IAAI,OAAA;AACJ,iGAAA,MAAM,OAAA;AACN,qGAAA,UAAU,OAAA;AACV,8FAAA,GAAG,OAAA;AACH,6FAAA,EAAE,OAAA;AACF,kGAAA,OAAO,OAAA;AACP,qGAAA,UAAU,OAAA;AACV,oGAAA,SAAS,OAAA;AACT,mGAAA,QAAQ,OAAA;AACR,mGAAA,QAAQ,OAAA;AACR,iGAAA,MAAM,OAAA;AACN,mGAAA,QAAQ,OAAA;AACR,0GAAA,eAAe,OAAA;AAKjB;;;;GAIG;AACH,SAAgB,OAAO,CAAC,IAAa,EAAE,MAAwB;IAC7D,MAAM,MAAM,GAAG,IAAA,sBAAqB,GAAE,CAAC;IACvC,MAAM,GAAG,GAAG,IAAA,yBAAe,EAAC,MAAM,CAAC,CAAC;IAEpC,IAAI,IAAI,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;QACpD,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;QAC3B,IAAI,CAAC,KAAK;YAAE,OAAO,IAAA,kBAAQ,EAAC,GAAG,CAAC,CAAC;QACjC,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAA,yBAAe,EAAC,CAAC,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC;QACrE,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAA,kBAAQ,EAAC,GAAG,CAAC,CAAC;IACzD,CAAC;IAED,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC;SAC9B,IAAI,EAAE;SACN,MAAM,CAAC,CAAC,CAAC,EAA8B,EAAE;QACxC,IAAI,CAAC,CAAC;YAAE,OAAO,KAAK,CAAC;QACrB,IAAI,IAAA,yBAAe,EAAC,CAAC,CAAC,MAAM,CAAC,KAAK,GAAG;YAAE,OAAO,KAAK,CAAC;QACpD,IAAI,IAAA,oBAAU,EAAC,CAAC,CAAC,OAAO,CAAC;YAAE,OAAO,KAAK,CAAC;QACxC,IAAI,CAAC,IAAI;YAAE,OAAO,IAAI,CAAC;QACvB,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAA,kBAAQ,EAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAA,mBAAS,EAAC,CAAC,CAAC,OAAO,CAAC,CAAC;IACxE,CAAC,CAAC;SACD,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;IAEzB,OAAO,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAA,kBAAQ,EAAC,GAAG,CAAC,CAAC;AAC7C,CAAC"}