@rohal12/twee-ts 1.11.0 → 1.13.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.
package/dist/index.cjs CHANGED
@@ -21,6 +21,8 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
21
21
  var src_exports = {};
22
22
  __export(src_exports, {
23
23
  CONFIG_FILENAME: () => CONFIG_FILENAME,
24
+ ItemType: () => ItemType,
25
+ StoryBuilder: () => StoryBuilder,
24
26
  TweeLexer: () => TweeLexer,
25
27
  TweeTsError: () => TweeTsError,
26
28
  applyTagAliases: () => applyTagAliases,
@@ -28,6 +30,8 @@ __export(src_exports, {
28
30
  compile: () => compile,
29
31
  compileIncremental: () => compileIncremental,
30
32
  compileToFile: () => compileToFile,
33
+ createIFID: () => createIFID,
34
+ decompileHTML: () => decompileHTML,
31
35
  discoverCachedFormats: () => discoverCachedFormats,
32
36
  discoverFormats: () => discoverFormats,
33
37
  fetchAndCacheFormat: () => fetchAndCacheFormat,
@@ -63,6 +67,11 @@ var import_node_crypto = require("crypto");
63
67
  function generateIFID() {
64
68
  return (0, import_node_crypto.randomUUID)().toUpperCase();
65
69
  }
70
+ function createIFID(value) {
71
+ const err = validateIFID(value);
72
+ if (err) throw new Error(`Invalid IFID: ${err}`);
73
+ return value.toUpperCase();
74
+ }
66
75
  function validateIFID(ifid) {
67
76
  let uuid = ifid;
68
77
  switch (ifid.length) {
@@ -126,6 +135,10 @@ function tiddlerEscape(s) {
126
135
  if (s.length === 0) return s;
127
136
  return s.replace(/\\/g, "\\s").replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/"/g, "&quot;").replace(/\t/g, "\\t").replace(/\n/g, "\\n");
128
137
  }
138
+ function tiddlerUnescape(s) {
139
+ if (s.length === 0) return s;
140
+ return s.replace(/\\n/g, "\n").replace(/\\t/g, " ").replace(/\\s/g, "\\");
141
+ }
129
142
  function tweeEscape(s) {
130
143
  if (s.length === 0) return s;
131
144
  return s.replace(/[\\[\]{}]/g, (ch) => "\\" + ch);
@@ -540,6 +553,25 @@ function getStoryStats(story, wordCountMethod = "tweego") {
540
553
  }
541
554
  return { passages: story.passages.length, storyPassages, words };
542
555
  }
556
+ var StoryBuilder = class {
557
+ /** The mutable story, accessible during construction for loader functions. */
558
+ story;
559
+ constructor() {
560
+ this.story = createStory();
561
+ }
562
+ /** Add a passage, handling special passages (StoryData, StoryTitle, etc.). */
563
+ add(passage, diagnostics) {
564
+ storyAdd(this.story, passage, diagnostics);
565
+ }
566
+ /** Check if a passage name exists. */
567
+ has(name) {
568
+ return storyHas(this.story, name);
569
+ }
570
+ /** Finalize and return the story as read-only. */
571
+ build() {
572
+ return this.story;
573
+ }
574
+ };
543
575
 
544
576
  // src/filesystem.ts
545
577
  var import_node_fs = require("fs");
@@ -603,6 +635,8 @@ var KNOWN_EXTENSIONS = /* @__PURE__ */ new Set([
603
635
  "twee",
604
636
  "tw2",
605
637
  "twee2",
638
+ "htm",
639
+ "html",
606
640
  "css",
607
641
  "js",
608
642
  "otf",
@@ -961,6 +995,17 @@ function readFormatSource(format) {
961
995
  var import_node_path5 = require("path");
962
996
  var import_node_fs4 = require("fs");
963
997
 
998
+ // src/types.ts
999
+ var ItemType = {
1000
+ Error: 0,
1001
+ EOF: 1,
1002
+ Header: 2,
1003
+ Name: 3,
1004
+ Tags: 4,
1005
+ Metadata: 5,
1006
+ Content: 6
1007
+ };
1008
+
964
1009
  // src/lexer.ts
965
1010
  var EOF = -1;
966
1011
  var HEADER_DELIM = "::";
@@ -993,10 +1038,16 @@ var LexerContext = class {
993
1038
  throw new Error("backup would leave pos < start");
994
1039
  }
995
1040
  }
1041
+ // Line-counting invariant: next() increments this.line for each newline during
1042
+ // character-by-character scanning. However, Content items are produced by jumping
1043
+ // this.pos directly (e.g. via indexOf) without calling next(), so those newlines
1044
+ // haven't been counted yet. emit() re-counts newlines in [start, pos) for Content
1045
+ // items to compensate. This is safe because this.start is reset to this.pos after
1046
+ // every emit(), so no range is ever counted twice.
996
1047
  emit(type) {
997
1048
  const val = this.input.slice(this.start, this.pos);
998
1049
  this.items.push({ type, line: this.line, pos: this.start, val });
999
- if (type === 6 /* Content */) {
1050
+ if (type === ItemType.Content) {
1000
1051
  for (let i = this.start; i < this.pos; i++) {
1001
1052
  if (this.input.charCodeAt(i) === 10) this.line++;
1002
1053
  }
@@ -1017,7 +1068,7 @@ var LexerContext = class {
1017
1068
  }
1018
1069
  errorf(message) {
1019
1070
  this.items.push({
1020
- type: 0 /* Error */,
1071
+ type: ItemType.Error,
1021
1072
  line: this.line,
1022
1073
  pos: this.start,
1023
1074
  val: message
@@ -1059,7 +1110,7 @@ function lexProlog(ctx) {
1059
1110
  ctx.ignore();
1060
1111
  return lexHeaderDelim;
1061
1112
  }
1062
- ctx.emit(1 /* EOF */);
1113
+ ctx.emit(ItemType.EOF);
1063
1114
  return null;
1064
1115
  }
1065
1116
  function lexContent(ctx) {
@@ -1069,19 +1120,19 @@ function lexContent(ctx) {
1069
1120
  const i = ctx.input.indexOf(NEWLINE_HEADER_DELIM, ctx.pos);
1070
1121
  if (i > -1) {
1071
1122
  ctx.pos = i + 1;
1072
- ctx.emit(6 /* Content */);
1123
+ ctx.emit(ItemType.Content);
1073
1124
  return lexHeaderDelim;
1074
1125
  }
1075
1126
  ctx.pos = ctx.input.length;
1076
1127
  if (ctx.pos > ctx.start) {
1077
- ctx.emit(6 /* Content */);
1128
+ ctx.emit(ItemType.Content);
1078
1129
  }
1079
- ctx.emit(1 /* EOF */);
1130
+ ctx.emit(ItemType.EOF);
1080
1131
  return null;
1081
1132
  }
1082
1133
  function lexHeaderDelim(ctx) {
1083
1134
  ctx.pos += HEADER_DELIM.length;
1084
- ctx.emit(2 /* Header */);
1135
+ ctx.emit(ItemType.Header);
1085
1136
  return lexName;
1086
1137
  }
1087
1138
  function lexName(ctx) {
@@ -1110,7 +1161,7 @@ function lexName(ctx) {
1110
1161
  break outer;
1111
1162
  }
1112
1163
  }
1113
- ctx.emit(3 /* Name */);
1164
+ ctx.emit(ItemType.Name);
1114
1165
  switch (r) {
1115
1166
  case 91:
1116
1167
  return lexTags;
@@ -1127,7 +1178,7 @@ function lexName(ctx) {
1127
1178
  ctx.ignore();
1128
1179
  return lexContent;
1129
1180
  }
1130
- ctx.emit(1 /* EOF */);
1181
+ ctx.emit(ItemType.EOF);
1131
1182
  return null;
1132
1183
  }
1133
1184
  function lexNextOptionalBlock(ctx) {
@@ -1150,7 +1201,7 @@ function lexNextOptionalBlock(ctx) {
1150
1201
  ctx.ignore();
1151
1202
  return lexContent;
1152
1203
  case EOF:
1153
- ctx.emit(1 /* EOF */);
1204
+ ctx.emit(ItemType.EOF);
1154
1205
  return null;
1155
1206
  }
1156
1207
  return ctx.errorf(`illegal character '${String.fromCharCode(r)}' amid the optional blocks`);
@@ -1170,7 +1221,7 @@ function lexTags(ctx) {
1170
1221
  if (r === 10) ctx.backup();
1171
1222
  return ctx.errorf("unterminated tag block");
1172
1223
  case 93:
1173
- if (ctx.pos > ctx.start) ctx.emit(4 /* Tags */);
1224
+ if (ctx.pos > ctx.start) ctx.emit(ItemType.Tags);
1174
1225
  return lexNextOptionalBlock;
1175
1226
  case 91:
1176
1227
  return ctx.errorf(`unexpected left square bracket '['`);
@@ -1203,7 +1254,7 @@ function lexMetadata(ctx) {
1203
1254
  case 125:
1204
1255
  depth--;
1205
1256
  if (depth === 0) {
1206
- if (ctx.pos > ctx.start) ctx.emit(5 /* Metadata */);
1257
+ if (ctx.pos > ctx.start) ctx.emit(ItemType.Metadata);
1207
1258
  return lexNextOptionalBlock;
1208
1259
  }
1209
1260
  break;
@@ -1233,7 +1284,7 @@ var TweeLexer = class {
1233
1284
  nextItem() {
1234
1285
  const result = this.gen.next();
1235
1286
  if (result.done) {
1236
- return { item: { type: 1 /* EOF */, line: 0, pos: 0, val: "" }, done: true };
1287
+ return { item: { type: ItemType.EOF, line: 0, pos: 0, val: "" }, done: true };
1237
1288
  }
1238
1289
  return { item: result.value, done: false };
1239
1290
  }
@@ -1270,10 +1321,10 @@ function parseTwee(source, options = {}) {
1270
1321
  const passages = [];
1271
1322
  let current = null;
1272
1323
  let pCount = 0;
1273
- let lastType = 1 /* EOF */;
1324
+ let lastType = ItemType.EOF;
1274
1325
  for (const item of tweeLexer(source)) {
1275
1326
  switch (item.type) {
1276
- case 0 /* Error */:
1327
+ case ItemType.Error:
1277
1328
  diagnostics.push({
1278
1329
  level: "error",
1279
1330
  message: `line ${item.line}: Malformed twee source; ${item.val}.`,
@@ -1281,19 +1332,19 @@ function parseTwee(source, options = {}) {
1281
1332
  line: item.line
1282
1333
  });
1283
1334
  return { passages, diagnostics };
1284
- case 1 /* EOF */:
1335
+ case ItemType.EOF:
1285
1336
  if (pCount > 0 && current) {
1286
1337
  passages.push(current);
1287
1338
  }
1288
1339
  return { passages, diagnostics };
1289
- case 2 /* Header */:
1340
+ case ItemType.Header:
1290
1341
  pCount++;
1291
1342
  if (pCount > 1 && current) {
1292
1343
  passages.push(current);
1293
1344
  }
1294
1345
  current = { name: "", tags: [], text: "", source: { file: filename, line: item.line } };
1295
1346
  break;
1296
- case 3 /* Name */: {
1347
+ case ItemType.Name: {
1297
1348
  if (!current) break;
1298
1349
  const name = tweeUnescape(item.val).trim();
1299
1350
  if (name.length === 0) {
@@ -1308,9 +1359,9 @@ function parseTwee(source, options = {}) {
1308
1359
  current.name = name;
1309
1360
  break;
1310
1361
  }
1311
- case 4 /* Tags */: {
1362
+ case ItemType.Tags: {
1312
1363
  if (!current) break;
1313
- if (lastType !== 3 /* Name */) {
1364
+ if (lastType !== ItemType.Name) {
1314
1365
  diagnostics.push({
1315
1366
  level: "error",
1316
1367
  message: `line ${item.line}: Malformed twee source; optional tags block must immediately follow the passage name.`,
@@ -1323,9 +1374,9 @@ function parseTwee(source, options = {}) {
1323
1374
  current.tags = tweeUnescape(inner).split(/\s+/).filter(Boolean);
1324
1375
  break;
1325
1376
  }
1326
- case 5 /* Metadata */: {
1377
+ case ItemType.Metadata: {
1327
1378
  if (!current) break;
1328
- if (lastType !== 3 /* Name */ && lastType !== 4 /* Tags */) {
1379
+ if (lastType !== ItemType.Name && lastType !== ItemType.Tags) {
1329
1380
  diagnostics.push({
1330
1381
  level: "error",
1331
1382
  message: `line ${item.line}: Malformed twee source; optional metadata block must immediately follow the passage name or tags block.`,
@@ -1357,7 +1408,7 @@ function parseTwee(source, options = {}) {
1357
1408
  }
1358
1409
  break;
1359
1410
  }
1360
- case 6 /* Content */: {
1411
+ case ItemType.Content: {
1361
1412
  if (!current) break;
1362
1413
  if (trim) {
1363
1414
  current.text = item.val.trim();
@@ -1385,6 +1436,2808 @@ function parseTwee(source, options = {}) {
1385
1436
  return { passages, diagnostics };
1386
1437
  }
1387
1438
 
1439
+ // node_modules/.pnpm/entities@7.0.1/node_modules/entities/dist/esm/decode-codepoint.js
1440
+ var _a;
1441
+ var decodeMap = /* @__PURE__ */ new Map([
1442
+ [0, 65533],
1443
+ // C1 Unicode control character reference replacements
1444
+ [128, 8364],
1445
+ [130, 8218],
1446
+ [131, 402],
1447
+ [132, 8222],
1448
+ [133, 8230],
1449
+ [134, 8224],
1450
+ [135, 8225],
1451
+ [136, 710],
1452
+ [137, 8240],
1453
+ [138, 352],
1454
+ [139, 8249],
1455
+ [140, 338],
1456
+ [142, 381],
1457
+ [145, 8216],
1458
+ [146, 8217],
1459
+ [147, 8220],
1460
+ [148, 8221],
1461
+ [149, 8226],
1462
+ [150, 8211],
1463
+ [151, 8212],
1464
+ [152, 732],
1465
+ [153, 8482],
1466
+ [154, 353],
1467
+ [155, 8250],
1468
+ [156, 339],
1469
+ [158, 382],
1470
+ [159, 376]
1471
+ ]);
1472
+ var fromCodePoint = (
1473
+ // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition, n/no-unsupported-features/es-builtins
1474
+ (_a = String.fromCodePoint) !== null && _a !== void 0 ? _a : ((codePoint) => {
1475
+ let output = "";
1476
+ if (codePoint > 65535) {
1477
+ codePoint -= 65536;
1478
+ output += String.fromCharCode(codePoint >>> 10 & 1023 | 55296);
1479
+ codePoint = 56320 | codePoint & 1023;
1480
+ }
1481
+ output += String.fromCharCode(codePoint);
1482
+ return output;
1483
+ })
1484
+ );
1485
+ function replaceCodePoint(codePoint) {
1486
+ var _a3;
1487
+ if (codePoint >= 55296 && codePoint <= 57343 || codePoint > 1114111) {
1488
+ return 65533;
1489
+ }
1490
+ return (_a3 = decodeMap.get(codePoint)) !== null && _a3 !== void 0 ? _a3 : codePoint;
1491
+ }
1492
+
1493
+ // node_modules/.pnpm/entities@7.0.1/node_modules/entities/dist/esm/internal/decode-shared.js
1494
+ function decodeBase64(input) {
1495
+ const binary = (
1496
+ // eslint-disable-next-line n/no-unsupported-features/node-builtins
1497
+ typeof atob === "function" ? (
1498
+ // Browser (and Node >=16)
1499
+ // eslint-disable-next-line n/no-unsupported-features/node-builtins
1500
+ atob(input)
1501
+ ) : (
1502
+ // Older Node versions (<16)
1503
+ // eslint-disable-next-line n/no-unsupported-features/node-builtins
1504
+ typeof Buffer.from === "function" ? (
1505
+ // eslint-disable-next-line n/no-unsupported-features/node-builtins
1506
+ Buffer.from(input, "base64").toString("binary")
1507
+ ) : (
1508
+ // eslint-disable-next-line unicorn/no-new-buffer, n/no-deprecated-api
1509
+ new Buffer(input, "base64").toString("binary")
1510
+ )
1511
+ )
1512
+ );
1513
+ const evenLength = binary.length & ~1;
1514
+ const out = new Uint16Array(evenLength / 2);
1515
+ for (let index = 0, outIndex = 0; index < evenLength; index += 2) {
1516
+ const lo = binary.charCodeAt(index);
1517
+ const hi = binary.charCodeAt(index + 1);
1518
+ out[outIndex++] = lo | hi << 8;
1519
+ }
1520
+ return out;
1521
+ }
1522
+
1523
+ // node_modules/.pnpm/entities@7.0.1/node_modules/entities/dist/esm/generated/decode-data-html.js
1524
+ var htmlDecodeTree = /* @__PURE__ */ decodeBase64("QR08ALkAAgH6AYsDNQR2BO0EPgXZBQEGLAbdBxMISQrvCmQLfQurDKQNLw4fD4YPpA+6D/IPAAAAAAAAAAAAAAAAKhBMEY8TmxUWF2EYLBkxGuAa3RsJHDscWR8YIC8jSCSIJcMl6ie3Ku8rEC0CLjoupS7kLgAIRU1hYmNmZ2xtbm9wcnN0dVQAWgBeAGUAaQBzAHcAfgCBAIQAhwCSAJoAoACsALMAbABpAGcAO4DGAMZAUAA7gCYAJkBjAHUAdABlADuAwQDBQHIiZXZlAAJhAAFpeW0AcgByAGMAO4DCAMJAEGRyAADgNdgE3XIAYQB2AGUAO4DAAMBA8CFoYZFj4SFjcgBhZAAAoFMqAAFncIsAjgBvAG4ABGFmAADgNdg43fAlbHlGdW5jdGlvbgCgYSBpAG4AZwA7gMUAxUAAAWNzpACoAHIAAOA12Jzc6SFnbgCgVCJpAGwAZABlADuAwwDDQG0AbAA7gMQAxEAABGFjZWZvcnN1xQDYANoA7QDxAPYA+QD8AAABY3LJAM8AayNzbGFzaAAAoBYidgHTANUAAKDnKmUAZAAAoAYjeQARZIABY3J0AOAA5QDrAGEidXNlAACgNSLuI291bGxpcwCgLCFhAJJjcgAA4DXYBd1wAGYAAOA12Dnd5SF2ZdhiYwDyAOoAbSJwZXEAAKBOIgAHSE9hY2RlZmhpbG9yc3UXARoBHwE6AVIBVQFiAWQBZgGCAakB6QHtAfIBYwB5ACdkUABZADuAqQCpQIABY3B5ACUBKAE1AfUhdGUGYWmg0iJ0KGFsRGlmZmVyZW50aWFsRAAAoEUhbCJleXMAAKAtIQACYWVpb0EBRAFKAU0B8iFvbgxhZABpAGwAO4DHAMdAcgBjAAhhbiJpbnQAAKAwIm8AdAAKYQABZG5ZAV0BaSJsbGEAuGB0I2VyRG90ALdg8gA5AWkAp2NyImNsZQAAAkRNUFRwAXQBeQF9AW8AdAAAoJkiaSJudXMAAKCWIuwhdXMAoJUiaSJtZXMAAKCXIm8AAAFjc4cBlAFrKndpc2VDb250b3VySW50ZWdyYWwAAKAyImUjQ3VybHkAAAFEUZwBpAFvJXVibGVRdW90ZQAAoB0gdSJvdGUAAKAZIAACbG5wdbABtgHNAdgBbwBuAGWgNyIAoHQqgAFnaXQAvAHBAcUB8iJ1ZW50AKBhIm4AdAAAoC8i7yV1ckludGVncmFsAKAuIgABZnLRAdMBAKACIe8iZHVjdACgECJuLnRlckNsb2Nrd2lzZUNvbnRvdXJJbnRlZ3JhbAAAoDMi7yFzcwCgLypjAHIAAOA12J7ccABDoNMiYQBwAACgTSKABURKU1phY2VmaW9zAAsCEgIVAhgCGwIsAjQCOQI9AnMCfwNvoEUh9CJyYWhkAKARKWMAeQACZGMAeQAFZGMAeQAPZIABZ3JzACECJQIoAuchZXIAoCEgcgAAoKEhaAB2AACg5CoAAWF5MAIzAvIhb24OYRRkbAB0oAciYQCUY3IAAOA12AfdAAFhZkECawIAAWNtRQJnAvIjaXRpY2FsAAJBREdUUAJUAl8CYwJjInV0ZQC0YG8AdAFZAloC2WJiJGxlQWN1dGUA3WJyImF2ZQBgYGkibGRlANxi7yFuZACgxCJmJWVyZW50aWFsRAAAoEYhcAR9AgAAAAAAAIECjgIAABoDZgAA4DXYO91EoagAhQKJAm8AdAAAoNwgcSJ1YWwAAKBQIuIhbGUAA0NETFJVVpkCqAK1Au8C/wIRA28AbgB0AG8AdQByAEkAbgB0AGUAZwByAGEA7ADEAW8AdAKvAgAAAACwAqhgbiNBcnJvdwAAoNMhAAFlb7kC0AJmAHQAgAFBUlQAwQLGAs0CciJyb3cAAKDQIekkZ2h0QXJyb3cAoNQhZQDlACsCbgBnAAABTFLWAugC5SFmdAABQVLcAuECciJyb3cAAKD4J+kkZ2h0QXJyb3cAoPon6SRnaHRBcnJvdwCg+SdpImdodAAAAUFU9gL7AnIicm93AACg0iFlAGUAAKCoInAAQQIGAwAAAAALA3Iicm93AACg0SFvJHduQXJyb3cAAKDVIWUlcnRpY2FsQmFyAACgJSJuAAADQUJMUlRhJAM2AzoDWgNxA3oDciJyb3cAAKGTIUJVLAMwA2EAcgAAoBMpcCNBcnJvdwAAoPUhciJldmUAEWPlIWZ00gJDAwAASwMAAFIDaSVnaHRWZWN0b3IAAKBQKWUkZVZlY3RvcgAAoF4p5SJjdG9yQqC9IWEAcgAAoFYpaSJnaHQA1AFiAwAAaQNlJGVWZWN0b3IAAKBfKeUiY3RvckKgwSFhAHIAAKBXKWUAZQBBoKQiciJyb3cAAKCnIXIAcgBvAPcAtAIAAWN0gwOHA3IA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YwAAoN8i4SFycnCgtiEAoD0pgKIqImJjZG9zACsVMBU6FT4VQRVyImNhcAAAoEgqAAFhdTQVNxVwAACgRipwAACgSipvAHQAAKCNInIAAKBFKgDgKiIA/gACYWxydksVURVuFXMVcgByAG2gtyEAoDwpeQCAAWV2dwBYFWUVaRVxAHACXxUAAAAAYxVyAGUA4wAXFXUA4wAZFWUAZQAAoM4iZSJkZ2UAAKDPImUAbgA7gKQApEBlI2Fycm93AAABbHJ7FX8V5SFmdACgtiFpImdodAAAoLchZQDkAG0VAAFjaYsVkRVvAG4AaQBuAPQAkwFuAHQAAKAxImwiY3R5AACgLSOACUFIYWJjZGVmaGlqbG9yc3R1d3oAuBW7Fb8V1RXgFegV+RUKFhUWHxZUFlcWZRbFFtsW7xb7FgUXChdyAPIAtAJhAHIAAKBlKQACZ2xyc8YVyhXOFdAV5yFlcgCgICDlIXRoAKA4IfIA9QxoAHagECAAoKMiawHZFd4VYSJyb3cAAKAPKWEA4wBfAgABYXnkFecV8iFvbg9hNGQAoUYhYW/tFfQVAAFnciEC8RVyAACgyiF0InNlcQAAoHcqgAFnbG0A/xUCFgUWO4CwALBAdABhALRjcCJ0eXYAAKCxKQABaXIOFhIW8yFodACgfykA4DXYId1hAHIAAAFschsWHRYAoMMhAKDCIYACYWVnc3YAKBauAjYWOhY+Fm0AAKHEIm9zLhY0Fm4AZABzoMQi9SFpdACgZiZhIm1tYQDdY2kAbgAAoPIiAKH3AGlvQxZRFmQAZQAAgfcAO29KFksW90BuI3RpbWVzAACgxyJuAPgAUBZjAHkAUmRjAG8CXhYAAAAAYhZyAG4AAKAeI28AcAAAoA0jgAJscHR1dwBuFnEWdRaSFp4W7CFhciRgZgAA4DXYVd0AotkCZW1wc30WhBaJFo0WcQBkoFAibwB0AACgUSJpIm51cwAAoDgi7CF1cwCgFCLxInVhcmUAoKEiYgBsAGUAYgBhAHIAdwBlAGQAZwDlANcAbgCAAWFkaAClFqoWtBZyAHIAbwD3APUMbwB3AG4AYQByAHIAbwB3APMA8xVhI3Jwb29uAAABbHK8FsAWZQBmAPQAHBZpAGcAaAD0AB4WYgHJFs8WawBhAHIAbwD3AJILbwLUFgAAAADYFnIAbgAAoB8jbwBwAACgDCOAAWNvdADhFukW7BYAAXJ55RboFgDgNdi53FVkbAAAoPYp8iFvaxFhAAFkcvMW9xZvAHQAAKDxImkA5qC/JVsSAAFhaP8WAhdyAPIANQNhAPIA1wvhIm5nbGUAoKYpAAFjaQ4XEBd5AF9k5yJyYXJyAKD/JwAJRGFjZGVmZ2xtbm9wcXJzdHV4MRc4F0YXWxcyBF4XaRd5F40XrBe0F78X2RcVGCEYLRg1GEAYAAFEbzUXgRZvAPQA+BUAAWNzPBdCF3UAdABlADuA6QDpQPQhZXIAoG4qAAJhaW95TRdQF1YXWhfyIW9uG2FyAGOgViI7gOoA6kDsIW9uAKBVIk1kbwB0ABdhAAFEcmIXZhdvAHQAAKBSIgDgNdgi3XKhmipuF3QXYQB2AGUAO4DoAOhAZKCWKm8AdAAAoJgqgKGZKmlscwCAF4UXhxfuInRlcnMAoOcjAKATIWSglSpvAHQAAKCXKoABYXBzAJMXlheiF2MAcgATYXQAeQBzogUinxcAAAAAoRdlAHQAAKAFInAAMaADIDMBqRerFwCgBCAAoAUgAAFnc7AXsRdLYXAAAKACIAABZ3C4F7sXbwBuABlhZgAA4DXYVt2AAWFscwDFF8sXzxdyAHOg1SJsAACg4yl1AHMAAKBxKmkAAKG1A2x21RfYF28AbgC1Y/VjAAJjc3V24BfoF/0XEBgAAWlv5BdWF3IAYwAAoFYiaQLuFwAAAADwF+0ADQThIW50AAFnbPUX+Rd0AHIAAKCWKuUhc3MAoJUqgAFhZWkAAxgGGAoYbABzAD1gcwB0AACgXyJ2AESgYSJEAACgeCrwImFyc2wAoOUpAAFEYRkYHRhvAHQAAKBTInIAcgAAoHEpgAFjZGkAJxgqGO0XcgAAoC8hbwD0AIwCAAFhaDEYMhi3YzuA8ADwQAABbXI5GD0YbAA7gOsA60BvAACgrCCAAWNpcABGGEgYSxhsACFgcwD0ACwEAAFlb08YVxhjAHQAYQB0AGkAbwDuABoEbgBlAG4AdABpAGEAbADlADME4Ql1GAAAgRgAAIMYiBgAAAAAoRilGAAAqhgAALsYvhjRGAAA1xgnGWwAbABpAG4AZwBkAG8AdABzAGUA8QBlF3kARGRtImFsZQAAoEAmgAFpbHIAjRiRGJ0Y7CFpZwCgA/tpApcYAAAAAJoYZwAAoAD7aQBnAACgBPsA4DXYI93sIWlnAKAB++whaWcA4GYAagCAAWFsdACvGLIYthh0AACgbSZpAGcAAKAC+24AcwAAoLElbwBmAJJh8AHCGAAAxhhmAADgNdhX3QABYWvJGMwYbADsAGsEdqDUIgCg2SphI3J0aW50AACgDSoAAWFv2hgiGQABY3PeGB8ZsQPnGP0YBRkSGRUZAAAdGbID7xjyGPQY9xj5GAAA+xg7gL0AvUAAoFMhO4C8ALxAAKBVIQCgWSEAoFshswEBGQAAAxkAoFQhAKBWIbQCCxkOGQAAAAAQGTuAvgC+QACgVyEAoFwhNQAAoFghtgEZGQAAGxkAoFohAKBdITgAAKBeIWwAAKBEIHcAbgAAoCIjYwByAADgNdi73IAIRWFiY2RlZmdpamxub3JzdHYARhlKGVoZXhlmGWkZkhmWGZkZnRmgGa0ZxhnLGc8Z4BkjGmygZyIAoIwqgAFjbXAAUBlTGVgZ9SF0ZfVhbQBhAOSgswM6FgCghipyImV2ZQAfYQABaXliGWUZcgBjAB1hM2RvAHQAIWGAoWUibHFzAMYEcBl6GfGhZSLOBAAAdhlsAGEAbgD0AN8EgKF+KmNkbACBGYQZjBljAACgqSpvAHQAb6CAKmyggioAoIQqZeDbIgD+cwAAoJQqcgAA4DXYJN3noGsirATtIWVsAKA3IWMAeQBTZIChdyJFYWoApxmpGasZAKCSKgCgpSoAoKQqAAJFYWVztBm2Gb0ZwhkAoGkicABwoIoq8iFveACgiipxoIgq8aCIKrUZaQBtAACg5yJwAGYAAOA12FjdYQB2AOUAYwIAAWNp0xnWGXIAAKAKIW0AAKFzImVs3BneGQCgjioAoJAqAIM+ADtjZGxxco0E6xn0GfgZ/BkBGgABY2nvGfEZAKCnKnIAAKB6Km8AdAAAoNci0CFhcgCglSl1ImVzdAAAoHwqgAJhZGVscwAKGvQZFhrVBCAa8AEPGgAAFBpwAHIAbwD4AFkZcgAAoHgpcQAAAWxxxAQbGmwAZQBzAPMASRlpAO0A5AQAAWVuJxouGnIjdG5lcXEAAOBpIgD+xQAsGgAFQWFiY2Vma29zeUAaQxpmGmoabRqDGocalhrCGtMacgDyAMwCAAJpbG1yShpOGlAaVBpyAHMA8ABxD2YAvWBpAGwA9AASBQABZHJYGlsaYwB5AEpkAKGUIWN3YBpkGmkAcgAAoEgpAKCtIWEAcgAAoA8h6SFyYyVhgAFhbHIAcxp7Gn8a8iF0c3WgZSZpAHQAAKBlJuwhaXAAoCYg4yFvbgCguSJyAADgNdgl3XMAAAFld4wakRphInJvdwAAoCUpYSJyb3cAAKAmKYACYW1vcHIAnxqjGqcauhq+GnIAcgAAoP8h9CFodACgOyJrAAABbHKsGrMaZSRmdGFycm93AACgqSHpJGdodGFycm93AKCqIWYAAOA12Fnd4iFhcgCgFSCAAWNsdADIGswa0BpyAADgNdi93GEAcwDoAGka8iFvaydhAAFicNca2xr1IWxsAKBDIOghZW4AoBAg4Qr2GgAA/RoAAAgbExsaGwAAIRs7GwAAAAA+G2IbmRuVG6sbAACyG80b0htjAHUAdABlADuA7QDtQAChYyBpeQEbBhtyAGMAO4DuAO5AOGQAAWN4CxsNG3kANWRjAGwAO4ChAKFAAAFmcssCFhsA4DXYJt1yAGEAdgBlADuA7ADsQIChSCFpbm8AJxsyGzYbAAFpbisbLxtuAHQAAKAMKnQAAKAtIuYhaW4AoNwpdABhAACgKSHsIWlnM2GAAWFvcABDG1sbXhuAAWNndABJG0sbWRtyACthgAFlbHAAcQVRG1UbaQBuAOUAyAVhAHIA9AByBWgAMWFmAACgtyJlAGQAtWEAoggiY2ZvdGkbbRt1G3kb4SFyZQCgBSFpAG4AdKAeImkAZQAAoN0pZABvAPQAWxsAoisiY2VscIEbhRuPG5QbYQBsAACguiIAAWdyiRuNG2UAcgDzACMQ4wCCG2EicmhrAACgFyryIW9kAKA8KgACY2dwdJ8boRukG6gbeQBRZG8AbgAvYWYAAOA12FrdYQC5Y3UAZQBzAHQAO4C/AL9AAAFjabUbuRtyAADgNdi+3G4AAKIIIkVkc3bCG8QbyBvQAwCg+SJvAHQAAKD1Inag9CIAoPMiaaBiIOwhZGUpYesB1hsAANkbYwB5AFZkbAA7gO8A70AAA2NmbW9zdeYb7hvyG/Ub+hsFHAABaXnqG+0bcgBjADVhOWRyAADgNdgn3eEhdGg3YnAAZgAA4DXYW93jAf8bAAADHHIAAOA12L/c8iFjeVhk6yFjeVRkAARhY2ZnaGpvcxUcGhwiHCYcKhwtHDAcNRzwIXBhdqC6A/BjAAFleR4cIRzkIWls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ZmdobG1vcHJzdHV3CiwNLBEsHSwnLDEsQCxLLFIsYix6LIQsjyzLLOgs7Sz/LAotcgDyAAkDYQByAACgYykAAWNyFSwbLHUAdABlADuA+gD6QPIACQ1yAOMBIywAACUseQBeZHYAZQBtYQABaXkrLDAscgBjADuA+wD7QENkgAFhYmgANyw6LD0scgDyANEO7CFhY3FhYQDyAOAOAAFpckQsSCzzIWh0AKB+KQDgNdgy3XIAYQB2AGUAO4D5APlAYQFWLF8scgAAAWxyWixcLACgvyEAoL4hbABrAACggCUAAWN0Zix2LG8CbCwAAAAAcyxyAG4AZaAcI3IAAKAcI28AcAAAoA8jcgBpAACg+CUAAWFsfiyBLGMAcgBrYTuAqACoQAABZ3CILIssbwBuAHNhZgAA4DXYZt0AA2FkaGxzdZksniynLLgsuyzFLHIAcgBvAPcACQ1vAHcAbgBhAHIAcgBvAPcA2A5hI3Jwb29uAAABbHKvLLMsZQBmAPQAWyxpAGcAaAD0AF0sdQDzAKYOaQAAocUDaGzBLMIs0mNvAG4AxWPwI2Fycm93cwCgyCGAAWNpdADRLOEs5CxvAtcsAAAAAN4scgBuAGWgHSNyAACgHSNvAHAAAKAOI24AZwBvYXIAaQAAoPklYwByAADgNdjK3IABZGlyAPMs9yz6LG8AdAAAoPAi7CFkZWlhaQBmoLUlAKC0JQABYW0DLQYtcgDyAMosbAA7gPwA/EDhIm5nbGUAoKcpgAdBQkRhY2RlZmxub3Byc3oAJy0qLTAtNC2bLZ0toS2/LcMtxy3TLdgt3C3gLfwtcgDyABADYQByAHag6CoAoOkqYQBzAOgA/gIAAW5yOC08LechcnQAoJwpgANla25wcnN0AJkpSC1NLVQtXi1iLYItYQBwAHAA4QAaHG8AdABoAGkAbgDnAKEXgAFoaXIAoSmzJFotbwBwAPQAdCVooJUh7wD4JgABaXVmLWotZwBtAOEAuygAAWJwbi14LXMjZXRuZXEAceCKIgD+AODLKgD+cyNldG5lcQBx4IsiAP4A4MwqAP4AAWhyhi2KLWUAdADhABIraSNhbmdsZQAAAWxyki2WLeUhZnQAoLIiaSJnaHQAAKCzInkAMmThIXNoAKCiIoABZWxyAKcttC24LWKiKCKuLQAAAACyLWEAcgAAoLsicQAAoFoi7CFpcACg7iIAAWJ0vC1eD2EA8gBfD3IAAOA12DPddAByAOkAlS1zAHUAAAFicM0t0C0A4IIi0iAA4IMi0iBwAGYAAOA12GfdcgBvAPAAWQt0AHIA6QCaLQABY3XkLegtcgAA4DXYy9wAAWJw7C30LW4AAAFFZXUt8S0A4IoiAP5uAAABRWV/LfktAOCLIgD+6SJnemFnAKCaKYADY2Vmb3BycwANLhAuJS4pLiMuLi40LukhcmN1YQABZGkULiEuAAFiZxguHC5hAHIAAKBfKmUAcaAnIgCgWSLlIXJwAKAYIXIAAOA12DTdcABmAADgNdho3WWgQCJhAHQA6ABqD2MAcgAA4DXYzNzjCuQRUC4AAFQuAABYLmIuAAAAAGMubS5wLnQuAAAAAIguki4AAJouJxIqEnQAcgDpAB0ScgAA4DXYNd0AAUFhWy5eLnIA8gDnAnIA8gCTB75jAAFBYWYuaS5yAPIA4AJyAPIAjAdhAPAAeh5pAHMAAKD7IoABZHB0APgReS6DLgABZmx9LoAuAOA12GnddQDzAP8RaQBtAOUABBIAAUFhiy6OLnIA8gDuAnIA8gCaBwABY3GVLgoScgAA4DXYzdwAAXB0nS6hLmwAdQDzACUScgDpACASAARhY2VmaW9zdbEuvC7ELsguzC7PLtQu2S5jAAABdXm2LrsudABlADuA/QD9QE9kAAFpecAuwy5yAGMAd2FLZG4AO4ClAKVAcgAA4DXYNt1jAHkAV2RwAGYAAOA12GrdYwByAADgNdjO3AABY23dLt8ueQBOZGwAO4D/AP9AAAVhY2RlZmhpb3N38y73Lv8uAi8MLxAvEy8YLx0vIi9jInV0ZQB6YQABYXn7Lv4u8iFvbn5hN2RvAHQAfGEAAWV0Bi8KL3QAcgDmAB8QYQC2Y3IAAOA12DfdYwB5ADZk5yJyYXJyAKDdIXAAZgAA4DXYa91jAHIAAOA12M/cAAFqbiYvKC8AoA0gagAAoAwg");
1525
+
1526
+ // node_modules/.pnpm/entities@7.0.1/node_modules/entities/dist/esm/generated/decode-data-xml.js
1527
+ var xmlDecodeTree = /* @__PURE__ */ decodeBase64("AAJhZ2xxBwARABMAFQBtAg0AAAAAAA8AcAAmYG8AcwAnYHQAPmB0ADxg9SFvdCJg");
1528
+
1529
+ // node_modules/.pnpm/entities@7.0.1/node_modules/entities/dist/esm/internal/bin-trie-flags.js
1530
+ var BinTrieFlags;
1531
+ (function(BinTrieFlags3) {
1532
+ BinTrieFlags3[BinTrieFlags3["VALUE_LENGTH"] = 49152] = "VALUE_LENGTH";
1533
+ BinTrieFlags3[BinTrieFlags3["FLAG13"] = 8192] = "FLAG13";
1534
+ BinTrieFlags3[BinTrieFlags3["BRANCH_LENGTH"] = 8064] = "BRANCH_LENGTH";
1535
+ BinTrieFlags3[BinTrieFlags3["JUMP_TABLE"] = 127] = "JUMP_TABLE";
1536
+ })(BinTrieFlags || (BinTrieFlags = {}));
1537
+
1538
+ // node_modules/.pnpm/entities@7.0.1/node_modules/entities/dist/esm/decode.js
1539
+ var CharCodes;
1540
+ (function(CharCodes4) {
1541
+ CharCodes4[CharCodes4["NUM"] = 35] = "NUM";
1542
+ CharCodes4[CharCodes4["SEMI"] = 59] = "SEMI";
1543
+ CharCodes4[CharCodes4["EQUALS"] = 61] = "EQUALS";
1544
+ CharCodes4[CharCodes4["ZERO"] = 48] = "ZERO";
1545
+ CharCodes4[CharCodes4["NINE"] = 57] = "NINE";
1546
+ CharCodes4[CharCodes4["LOWER_A"] = 97] = "LOWER_A";
1547
+ CharCodes4[CharCodes4["LOWER_F"] = 102] = "LOWER_F";
1548
+ CharCodes4[CharCodes4["LOWER_X"] = 120] = "LOWER_X";
1549
+ CharCodes4[CharCodes4["LOWER_Z"] = 122] = "LOWER_Z";
1550
+ CharCodes4[CharCodes4["UPPER_A"] = 65] = "UPPER_A";
1551
+ CharCodes4[CharCodes4["UPPER_F"] = 70] = "UPPER_F";
1552
+ CharCodes4[CharCodes4["UPPER_Z"] = 90] = "UPPER_Z";
1553
+ })(CharCodes || (CharCodes = {}));
1554
+ var TO_LOWER_BIT = 32;
1555
+ function isNumber(code) {
1556
+ return code >= CharCodes.ZERO && code <= CharCodes.NINE;
1557
+ }
1558
+ function isHexadecimalCharacter(code) {
1559
+ return code >= CharCodes.UPPER_A && code <= CharCodes.UPPER_F || code >= CharCodes.LOWER_A && code <= CharCodes.LOWER_F;
1560
+ }
1561
+ function isAsciiAlphaNumeric(code) {
1562
+ return code >= CharCodes.UPPER_A && code <= CharCodes.UPPER_Z || code >= CharCodes.LOWER_A && code <= CharCodes.LOWER_Z || isNumber(code);
1563
+ }
1564
+ function isEntityInAttributeInvalidEnd(code) {
1565
+ return code === CharCodes.EQUALS || isAsciiAlphaNumeric(code);
1566
+ }
1567
+ var EntityDecoderState;
1568
+ (function(EntityDecoderState3) {
1569
+ EntityDecoderState3[EntityDecoderState3["EntityStart"] = 0] = "EntityStart";
1570
+ EntityDecoderState3[EntityDecoderState3["NumericStart"] = 1] = "NumericStart";
1571
+ EntityDecoderState3[EntityDecoderState3["NumericDecimal"] = 2] = "NumericDecimal";
1572
+ EntityDecoderState3[EntityDecoderState3["NumericHex"] = 3] = "NumericHex";
1573
+ EntityDecoderState3[EntityDecoderState3["NamedEntity"] = 4] = "NamedEntity";
1574
+ })(EntityDecoderState || (EntityDecoderState = {}));
1575
+ var DecodingMode;
1576
+ (function(DecodingMode3) {
1577
+ DecodingMode3[DecodingMode3["Legacy"] = 0] = "Legacy";
1578
+ DecodingMode3[DecodingMode3["Strict"] = 1] = "Strict";
1579
+ DecodingMode3[DecodingMode3["Attribute"] = 2] = "Attribute";
1580
+ })(DecodingMode || (DecodingMode = {}));
1581
+ var EntityDecoder = class {
1582
+ constructor(decodeTree, emitCodePoint, errors) {
1583
+ this.decodeTree = decodeTree;
1584
+ this.emitCodePoint = emitCodePoint;
1585
+ this.errors = errors;
1586
+ this.state = EntityDecoderState.EntityStart;
1587
+ this.consumed = 1;
1588
+ this.result = 0;
1589
+ this.treeIndex = 0;
1590
+ this.excess = 1;
1591
+ this.decodeMode = DecodingMode.Strict;
1592
+ this.runConsumed = 0;
1593
+ }
1594
+ /** Resets the instance to make it reusable. */
1595
+ startEntity(decodeMode) {
1596
+ this.decodeMode = decodeMode;
1597
+ this.state = EntityDecoderState.EntityStart;
1598
+ this.result = 0;
1599
+ this.treeIndex = 0;
1600
+ this.excess = 1;
1601
+ this.consumed = 1;
1602
+ this.runConsumed = 0;
1603
+ }
1604
+ /**
1605
+ * Write an entity to the decoder. This can be called multiple times with partial entities.
1606
+ * If the entity is incomplete, the decoder will return -1.
1607
+ *
1608
+ * Mirrors the implementation of `getDecoder`, but with the ability to stop decoding if the
1609
+ * entity is incomplete, and resume when the next string is written.
1610
+ *
1611
+ * @param input The string containing the entity (or a continuation of the entity).
1612
+ * @param offset The offset at which the entity begins. Should be 0 if this is not the first call.
1613
+ * @returns The number of characters that were consumed, or -1 if the entity is incomplete.
1614
+ */
1615
+ write(input, offset) {
1616
+ switch (this.state) {
1617
+ case EntityDecoderState.EntityStart: {
1618
+ if (input.charCodeAt(offset) === CharCodes.NUM) {
1619
+ this.state = EntityDecoderState.NumericStart;
1620
+ this.consumed += 1;
1621
+ return this.stateNumericStart(input, offset + 1);
1622
+ }
1623
+ this.state = EntityDecoderState.NamedEntity;
1624
+ return this.stateNamedEntity(input, offset);
1625
+ }
1626
+ case EntityDecoderState.NumericStart: {
1627
+ return this.stateNumericStart(input, offset);
1628
+ }
1629
+ case EntityDecoderState.NumericDecimal: {
1630
+ return this.stateNumericDecimal(input, offset);
1631
+ }
1632
+ case EntityDecoderState.NumericHex: {
1633
+ return this.stateNumericHex(input, offset);
1634
+ }
1635
+ case EntityDecoderState.NamedEntity: {
1636
+ return this.stateNamedEntity(input, offset);
1637
+ }
1638
+ }
1639
+ }
1640
+ /**
1641
+ * Switches between the numeric decimal and hexadecimal states.
1642
+ *
1643
+ * Equivalent to the `Numeric character reference state` in the HTML spec.
1644
+ *
1645
+ * @param input The string containing the entity (or a continuation of the entity).
1646
+ * @param offset The current offset.
1647
+ * @returns The number of characters that were consumed, or -1 if the entity is incomplete.
1648
+ */
1649
+ stateNumericStart(input, offset) {
1650
+ if (offset >= input.length) {
1651
+ return -1;
1652
+ }
1653
+ if ((input.charCodeAt(offset) | TO_LOWER_BIT) === CharCodes.LOWER_X) {
1654
+ this.state = EntityDecoderState.NumericHex;
1655
+ this.consumed += 1;
1656
+ return this.stateNumericHex(input, offset + 1);
1657
+ }
1658
+ this.state = EntityDecoderState.NumericDecimal;
1659
+ return this.stateNumericDecimal(input, offset);
1660
+ }
1661
+ /**
1662
+ * Parses a hexadecimal numeric entity.
1663
+ *
1664
+ * Equivalent to the `Hexademical character reference state` in the HTML spec.
1665
+ *
1666
+ * @param input The string containing the entity (or a continuation of the entity).
1667
+ * @param offset The current offset.
1668
+ * @returns The number of characters that were consumed, or -1 if the entity is incomplete.
1669
+ */
1670
+ stateNumericHex(input, offset) {
1671
+ while (offset < input.length) {
1672
+ const char = input.charCodeAt(offset);
1673
+ if (isNumber(char) || isHexadecimalCharacter(char)) {
1674
+ const digit = char <= CharCodes.NINE ? char - CharCodes.ZERO : (char | TO_LOWER_BIT) - CharCodes.LOWER_A + 10;
1675
+ this.result = this.result * 16 + digit;
1676
+ this.consumed++;
1677
+ offset++;
1678
+ } else {
1679
+ return this.emitNumericEntity(char, 3);
1680
+ }
1681
+ }
1682
+ return -1;
1683
+ }
1684
+ /**
1685
+ * Parses a decimal numeric entity.
1686
+ *
1687
+ * Equivalent to the `Decimal character reference state` in the HTML spec.
1688
+ *
1689
+ * @param input The string containing the entity (or a continuation of the entity).
1690
+ * @param offset The current offset.
1691
+ * @returns The number of characters that were consumed, or -1 if the entity is incomplete.
1692
+ */
1693
+ stateNumericDecimal(input, offset) {
1694
+ while (offset < input.length) {
1695
+ const char = input.charCodeAt(offset);
1696
+ if (isNumber(char)) {
1697
+ this.result = this.result * 10 + (char - CharCodes.ZERO);
1698
+ this.consumed++;
1699
+ offset++;
1700
+ } else {
1701
+ return this.emitNumericEntity(char, 2);
1702
+ }
1703
+ }
1704
+ return -1;
1705
+ }
1706
+ /**
1707
+ * Validate and emit a numeric entity.
1708
+ *
1709
+ * Implements the logic from the `Hexademical character reference start
1710
+ * state` and `Numeric character reference end state` in the HTML spec.
1711
+ *
1712
+ * @param lastCp The last code point of the entity. Used to see if the
1713
+ * entity was terminated with a semicolon.
1714
+ * @param expectedLength The minimum number of characters that should be
1715
+ * consumed. Used to validate that at least one digit
1716
+ * was consumed.
1717
+ * @returns The number of characters that were consumed.
1718
+ */
1719
+ emitNumericEntity(lastCp, expectedLength) {
1720
+ var _a3;
1721
+ if (this.consumed <= expectedLength) {
1722
+ (_a3 = this.errors) === null || _a3 === void 0 ? void 0 : _a3.absenceOfDigitsInNumericCharacterReference(this.consumed);
1723
+ return 0;
1724
+ }
1725
+ if (lastCp === CharCodes.SEMI) {
1726
+ this.consumed += 1;
1727
+ } else if (this.decodeMode === DecodingMode.Strict) {
1728
+ return 0;
1729
+ }
1730
+ this.emitCodePoint(replaceCodePoint(this.result), this.consumed);
1731
+ if (this.errors) {
1732
+ if (lastCp !== CharCodes.SEMI) {
1733
+ this.errors.missingSemicolonAfterCharacterReference();
1734
+ }
1735
+ this.errors.validateNumericCharacterReference(this.result);
1736
+ }
1737
+ return this.consumed;
1738
+ }
1739
+ /**
1740
+ * Parses a named entity.
1741
+ *
1742
+ * Equivalent to the `Named character reference state` in the HTML spec.
1743
+ *
1744
+ * @param input The string containing the entity (or a continuation of the entity).
1745
+ * @param offset The current offset.
1746
+ * @returns The number of characters that were consumed, or -1 if the entity is incomplete.
1747
+ */
1748
+ stateNamedEntity(input, offset) {
1749
+ const { decodeTree } = this;
1750
+ let current = decodeTree[this.treeIndex];
1751
+ let valueLength = (current & BinTrieFlags.VALUE_LENGTH) >> 14;
1752
+ while (offset < input.length) {
1753
+ if (valueLength === 0 && (current & BinTrieFlags.FLAG13) !== 0) {
1754
+ const runLength = (current & BinTrieFlags.BRANCH_LENGTH) >> 7;
1755
+ if (this.runConsumed === 0) {
1756
+ const firstChar = current & BinTrieFlags.JUMP_TABLE;
1757
+ if (input.charCodeAt(offset) !== firstChar) {
1758
+ return this.result === 0 ? 0 : this.emitNotTerminatedNamedEntity();
1759
+ }
1760
+ offset++;
1761
+ this.excess++;
1762
+ this.runConsumed++;
1763
+ }
1764
+ while (this.runConsumed < runLength) {
1765
+ if (offset >= input.length) {
1766
+ return -1;
1767
+ }
1768
+ const charIndexInPacked = this.runConsumed - 1;
1769
+ const packedWord = decodeTree[this.treeIndex + 1 + (charIndexInPacked >> 1)];
1770
+ const expectedChar = charIndexInPacked % 2 === 0 ? packedWord & 255 : packedWord >> 8 & 255;
1771
+ if (input.charCodeAt(offset) !== expectedChar) {
1772
+ this.runConsumed = 0;
1773
+ return this.result === 0 ? 0 : this.emitNotTerminatedNamedEntity();
1774
+ }
1775
+ offset++;
1776
+ this.excess++;
1777
+ this.runConsumed++;
1778
+ }
1779
+ this.runConsumed = 0;
1780
+ this.treeIndex += 1 + (runLength >> 1);
1781
+ current = decodeTree[this.treeIndex];
1782
+ valueLength = (current & BinTrieFlags.VALUE_LENGTH) >> 14;
1783
+ }
1784
+ if (offset >= input.length)
1785
+ break;
1786
+ const char = input.charCodeAt(offset);
1787
+ if (char === CharCodes.SEMI && valueLength !== 0 && (current & BinTrieFlags.FLAG13) !== 0) {
1788
+ return this.emitNamedEntityData(this.treeIndex, valueLength, this.consumed + this.excess);
1789
+ }
1790
+ this.treeIndex = determineBranch(decodeTree, current, this.treeIndex + Math.max(1, valueLength), char);
1791
+ if (this.treeIndex < 0) {
1792
+ return this.result === 0 || // If we are parsing an attribute
1793
+ this.decodeMode === DecodingMode.Attribute && // We shouldn't have consumed any characters after the entity,
1794
+ (valueLength === 0 || // And there should be no invalid characters.
1795
+ isEntityInAttributeInvalidEnd(char)) ? 0 : this.emitNotTerminatedNamedEntity();
1796
+ }
1797
+ current = decodeTree[this.treeIndex];
1798
+ valueLength = (current & BinTrieFlags.VALUE_LENGTH) >> 14;
1799
+ if (valueLength !== 0) {
1800
+ if (char === CharCodes.SEMI) {
1801
+ return this.emitNamedEntityData(this.treeIndex, valueLength, this.consumed + this.excess);
1802
+ }
1803
+ if (this.decodeMode !== DecodingMode.Strict && (current & BinTrieFlags.FLAG13) === 0) {
1804
+ this.result = this.treeIndex;
1805
+ this.consumed += this.excess;
1806
+ this.excess = 0;
1807
+ }
1808
+ }
1809
+ offset++;
1810
+ this.excess++;
1811
+ }
1812
+ return -1;
1813
+ }
1814
+ /**
1815
+ * Emit a named entity that was not terminated with a semicolon.
1816
+ *
1817
+ * @returns The number of characters consumed.
1818
+ */
1819
+ emitNotTerminatedNamedEntity() {
1820
+ var _a3;
1821
+ const { result, decodeTree } = this;
1822
+ const valueLength = (decodeTree[result] & BinTrieFlags.VALUE_LENGTH) >> 14;
1823
+ this.emitNamedEntityData(result, valueLength, this.consumed);
1824
+ (_a3 = this.errors) === null || _a3 === void 0 ? void 0 : _a3.missingSemicolonAfterCharacterReference();
1825
+ return this.consumed;
1826
+ }
1827
+ /**
1828
+ * Emit a named entity.
1829
+ *
1830
+ * @param result The index of the entity in the decode tree.
1831
+ * @param valueLength The number of bytes in the entity.
1832
+ * @param consumed The number of characters consumed.
1833
+ *
1834
+ * @returns The number of characters consumed.
1835
+ */
1836
+ emitNamedEntityData(result, valueLength, consumed) {
1837
+ const { decodeTree } = this;
1838
+ this.emitCodePoint(valueLength === 1 ? decodeTree[result] & ~(BinTrieFlags.VALUE_LENGTH | BinTrieFlags.FLAG13) : decodeTree[result + 1], consumed);
1839
+ if (valueLength === 3) {
1840
+ this.emitCodePoint(decodeTree[result + 2], consumed);
1841
+ }
1842
+ return consumed;
1843
+ }
1844
+ /**
1845
+ * Signal to the parser that the end of the input was reached.
1846
+ *
1847
+ * Remaining data will be emitted and relevant errors will be produced.
1848
+ *
1849
+ * @returns The number of characters consumed.
1850
+ */
1851
+ end() {
1852
+ var _a3;
1853
+ switch (this.state) {
1854
+ case EntityDecoderState.NamedEntity: {
1855
+ return this.result !== 0 && (this.decodeMode !== DecodingMode.Attribute || this.result === this.treeIndex) ? this.emitNotTerminatedNamedEntity() : 0;
1856
+ }
1857
+ // Otherwise, emit a numeric entity if we have one.
1858
+ case EntityDecoderState.NumericDecimal: {
1859
+ return this.emitNumericEntity(0, 2);
1860
+ }
1861
+ case EntityDecoderState.NumericHex: {
1862
+ return this.emitNumericEntity(0, 3);
1863
+ }
1864
+ case EntityDecoderState.NumericStart: {
1865
+ (_a3 = this.errors) === null || _a3 === void 0 ? void 0 : _a3.absenceOfDigitsInNumericCharacterReference(this.consumed);
1866
+ return 0;
1867
+ }
1868
+ case EntityDecoderState.EntityStart: {
1869
+ return 0;
1870
+ }
1871
+ }
1872
+ }
1873
+ };
1874
+ function determineBranch(decodeTree, current, nodeIndex, char) {
1875
+ const branchCount = (current & BinTrieFlags.BRANCH_LENGTH) >> 7;
1876
+ const jumpOffset = current & BinTrieFlags.JUMP_TABLE;
1877
+ if (branchCount === 0) {
1878
+ return jumpOffset !== 0 && char === jumpOffset ? nodeIndex : -1;
1879
+ }
1880
+ if (jumpOffset) {
1881
+ const value = char - jumpOffset;
1882
+ return value < 0 || value >= branchCount ? -1 : decodeTree[nodeIndex + value] - 1;
1883
+ }
1884
+ const packedKeySlots = branchCount + 1 >> 1;
1885
+ let lo = 0;
1886
+ let hi = branchCount - 1;
1887
+ while (lo <= hi) {
1888
+ const mid = lo + hi >>> 1;
1889
+ const slot = mid >> 1;
1890
+ const packed = decodeTree[nodeIndex + slot];
1891
+ const midKey = packed >> (mid & 1) * 8 & 255;
1892
+ if (midKey < char) {
1893
+ lo = mid + 1;
1894
+ } else if (midKey > char) {
1895
+ hi = mid - 1;
1896
+ } else {
1897
+ return decodeTree[nodeIndex + packedKeySlots + mid];
1898
+ }
1899
+ }
1900
+ return -1;
1901
+ }
1902
+
1903
+ // node_modules/.pnpm/htmlparser2@10.1.0/node_modules/htmlparser2/dist/esm/Tokenizer.js
1904
+ var CharCodes2;
1905
+ (function(CharCodes4) {
1906
+ CharCodes4[CharCodes4["Tab"] = 9] = "Tab";
1907
+ CharCodes4[CharCodes4["NewLine"] = 10] = "NewLine";
1908
+ CharCodes4[CharCodes4["FormFeed"] = 12] = "FormFeed";
1909
+ CharCodes4[CharCodes4["CarriageReturn"] = 13] = "CarriageReturn";
1910
+ CharCodes4[CharCodes4["Space"] = 32] = "Space";
1911
+ CharCodes4[CharCodes4["ExclamationMark"] = 33] = "ExclamationMark";
1912
+ CharCodes4[CharCodes4["Number"] = 35] = "Number";
1913
+ CharCodes4[CharCodes4["Amp"] = 38] = "Amp";
1914
+ CharCodes4[CharCodes4["SingleQuote"] = 39] = "SingleQuote";
1915
+ CharCodes4[CharCodes4["DoubleQuote"] = 34] = "DoubleQuote";
1916
+ CharCodes4[CharCodes4["Dash"] = 45] = "Dash";
1917
+ CharCodes4[CharCodes4["Slash"] = 47] = "Slash";
1918
+ CharCodes4[CharCodes4["Zero"] = 48] = "Zero";
1919
+ CharCodes4[CharCodes4["Nine"] = 57] = "Nine";
1920
+ CharCodes4[CharCodes4["Semi"] = 59] = "Semi";
1921
+ CharCodes4[CharCodes4["Lt"] = 60] = "Lt";
1922
+ CharCodes4[CharCodes4["Eq"] = 61] = "Eq";
1923
+ CharCodes4[CharCodes4["Gt"] = 62] = "Gt";
1924
+ CharCodes4[CharCodes4["Questionmark"] = 63] = "Questionmark";
1925
+ CharCodes4[CharCodes4["UpperA"] = 65] = "UpperA";
1926
+ CharCodes4[CharCodes4["LowerA"] = 97] = "LowerA";
1927
+ CharCodes4[CharCodes4["UpperF"] = 70] = "UpperF";
1928
+ CharCodes4[CharCodes4["LowerF"] = 102] = "LowerF";
1929
+ CharCodes4[CharCodes4["UpperZ"] = 90] = "UpperZ";
1930
+ CharCodes4[CharCodes4["LowerZ"] = 122] = "LowerZ";
1931
+ CharCodes4[CharCodes4["LowerX"] = 120] = "LowerX";
1932
+ CharCodes4[CharCodes4["OpeningSquareBracket"] = 91] = "OpeningSquareBracket";
1933
+ })(CharCodes2 || (CharCodes2 = {}));
1934
+ var State;
1935
+ (function(State2) {
1936
+ State2[State2["Text"] = 1] = "Text";
1937
+ State2[State2["BeforeTagName"] = 2] = "BeforeTagName";
1938
+ State2[State2["InTagName"] = 3] = "InTagName";
1939
+ State2[State2["InSelfClosingTag"] = 4] = "InSelfClosingTag";
1940
+ State2[State2["BeforeClosingTagName"] = 5] = "BeforeClosingTagName";
1941
+ State2[State2["InClosingTagName"] = 6] = "InClosingTagName";
1942
+ State2[State2["AfterClosingTagName"] = 7] = "AfterClosingTagName";
1943
+ State2[State2["BeforeAttributeName"] = 8] = "BeforeAttributeName";
1944
+ State2[State2["InAttributeName"] = 9] = "InAttributeName";
1945
+ State2[State2["AfterAttributeName"] = 10] = "AfterAttributeName";
1946
+ State2[State2["BeforeAttributeValue"] = 11] = "BeforeAttributeValue";
1947
+ State2[State2["InAttributeValueDq"] = 12] = "InAttributeValueDq";
1948
+ State2[State2["InAttributeValueSq"] = 13] = "InAttributeValueSq";
1949
+ State2[State2["InAttributeValueNq"] = 14] = "InAttributeValueNq";
1950
+ State2[State2["BeforeDeclaration"] = 15] = "BeforeDeclaration";
1951
+ State2[State2["InDeclaration"] = 16] = "InDeclaration";
1952
+ State2[State2["InProcessingInstruction"] = 17] = "InProcessingInstruction";
1953
+ State2[State2["BeforeComment"] = 18] = "BeforeComment";
1954
+ State2[State2["CDATASequence"] = 19] = "CDATASequence";
1955
+ State2[State2["InSpecialComment"] = 20] = "InSpecialComment";
1956
+ State2[State2["InCommentLike"] = 21] = "InCommentLike";
1957
+ State2[State2["BeforeSpecialS"] = 22] = "BeforeSpecialS";
1958
+ State2[State2["BeforeSpecialT"] = 23] = "BeforeSpecialT";
1959
+ State2[State2["SpecialStartSequence"] = 24] = "SpecialStartSequence";
1960
+ State2[State2["InSpecialTag"] = 25] = "InSpecialTag";
1961
+ State2[State2["InEntity"] = 26] = "InEntity";
1962
+ })(State || (State = {}));
1963
+ function isWhitespace(c) {
1964
+ return c === CharCodes2.Space || c === CharCodes2.NewLine || c === CharCodes2.Tab || c === CharCodes2.FormFeed || c === CharCodes2.CarriageReturn;
1965
+ }
1966
+ function isEndOfTagSection(c) {
1967
+ return c === CharCodes2.Slash || c === CharCodes2.Gt || isWhitespace(c);
1968
+ }
1969
+ function isASCIIAlpha(c) {
1970
+ return c >= CharCodes2.LowerA && c <= CharCodes2.LowerZ || c >= CharCodes2.UpperA && c <= CharCodes2.UpperZ;
1971
+ }
1972
+ var QuoteType;
1973
+ (function(QuoteType2) {
1974
+ QuoteType2[QuoteType2["NoValue"] = 0] = "NoValue";
1975
+ QuoteType2[QuoteType2["Unquoted"] = 1] = "Unquoted";
1976
+ QuoteType2[QuoteType2["Single"] = 2] = "Single";
1977
+ QuoteType2[QuoteType2["Double"] = 3] = "Double";
1978
+ })(QuoteType || (QuoteType = {}));
1979
+ var Sequences = {
1980
+ Cdata: new Uint8Array([67, 68, 65, 84, 65, 91]),
1981
+ // CDATA[
1982
+ CdataEnd: new Uint8Array([93, 93, 62]),
1983
+ // ]]>
1984
+ CommentEnd: new Uint8Array([45, 45, 62]),
1985
+ // `-->`
1986
+ ScriptEnd: new Uint8Array([60, 47, 115, 99, 114, 105, 112, 116]),
1987
+ // `</script`
1988
+ StyleEnd: new Uint8Array([60, 47, 115, 116, 121, 108, 101]),
1989
+ // `</style`
1990
+ TitleEnd: new Uint8Array([60, 47, 116, 105, 116, 108, 101]),
1991
+ // `</title`
1992
+ TextareaEnd: new Uint8Array([
1993
+ 60,
1994
+ 47,
1995
+ 116,
1996
+ 101,
1997
+ 120,
1998
+ 116,
1999
+ 97,
2000
+ 114,
2001
+ 101,
2002
+ 97
2003
+ ]),
2004
+ // `</textarea`
2005
+ XmpEnd: new Uint8Array([60, 47, 120, 109, 112])
2006
+ // `</xmp`
2007
+ };
2008
+ var Tokenizer = class {
2009
+ constructor({ xmlMode = false, decodeEntities = true }, cbs) {
2010
+ this.cbs = cbs;
2011
+ this.state = State.Text;
2012
+ this.buffer = "";
2013
+ this.sectionStart = 0;
2014
+ this.index = 0;
2015
+ this.entityStart = 0;
2016
+ this.baseState = State.Text;
2017
+ this.isSpecial = false;
2018
+ this.running = true;
2019
+ this.offset = 0;
2020
+ this.currentSequence = void 0;
2021
+ this.sequenceIndex = 0;
2022
+ this.xmlMode = xmlMode;
2023
+ this.decodeEntities = decodeEntities;
2024
+ this.entityDecoder = new EntityDecoder(xmlMode ? xmlDecodeTree : htmlDecodeTree, (cp, consumed) => this.emitCodePoint(cp, consumed));
2025
+ }
2026
+ reset() {
2027
+ this.state = State.Text;
2028
+ this.buffer = "";
2029
+ this.sectionStart = 0;
2030
+ this.index = 0;
2031
+ this.baseState = State.Text;
2032
+ this.currentSequence = void 0;
2033
+ this.running = true;
2034
+ this.offset = 0;
2035
+ }
2036
+ write(chunk) {
2037
+ this.offset += this.buffer.length;
2038
+ this.buffer = chunk;
2039
+ this.parse();
2040
+ }
2041
+ end() {
2042
+ if (this.running)
2043
+ this.finish();
2044
+ }
2045
+ pause() {
2046
+ this.running = false;
2047
+ }
2048
+ resume() {
2049
+ this.running = true;
2050
+ if (this.index < this.buffer.length + this.offset) {
2051
+ this.parse();
2052
+ }
2053
+ }
2054
+ stateText(c) {
2055
+ if (c === CharCodes2.Lt || !this.decodeEntities && this.fastForwardTo(CharCodes2.Lt)) {
2056
+ if (this.index > this.sectionStart) {
2057
+ this.cbs.ontext(this.sectionStart, this.index);
2058
+ }
2059
+ this.state = State.BeforeTagName;
2060
+ this.sectionStart = this.index;
2061
+ } else if (this.decodeEntities && c === CharCodes2.Amp) {
2062
+ this.startEntity();
2063
+ }
2064
+ }
2065
+ stateSpecialStartSequence(c) {
2066
+ const isEnd = this.sequenceIndex === this.currentSequence.length;
2067
+ const isMatch = isEnd ? (
2068
+ // If we are at the end of the sequence, make sure the tag name has ended
2069
+ isEndOfTagSection(c)
2070
+ ) : (
2071
+ // Otherwise, do a case-insensitive comparison
2072
+ (c | 32) === this.currentSequence[this.sequenceIndex]
2073
+ );
2074
+ if (!isMatch) {
2075
+ this.isSpecial = false;
2076
+ } else if (!isEnd) {
2077
+ this.sequenceIndex++;
2078
+ return;
2079
+ }
2080
+ this.sequenceIndex = 0;
2081
+ this.state = State.InTagName;
2082
+ this.stateInTagName(c);
2083
+ }
2084
+ /** Look for an end tag. For <title> tags, also decode entities. */
2085
+ stateInSpecialTag(c) {
2086
+ if (this.sequenceIndex === this.currentSequence.length) {
2087
+ if (c === CharCodes2.Gt || isWhitespace(c)) {
2088
+ const endOfText = this.index - this.currentSequence.length;
2089
+ if (this.sectionStart < endOfText) {
2090
+ const actualIndex = this.index;
2091
+ this.index = endOfText;
2092
+ this.cbs.ontext(this.sectionStart, endOfText);
2093
+ this.index = actualIndex;
2094
+ }
2095
+ this.isSpecial = false;
2096
+ this.sectionStart = endOfText + 2;
2097
+ this.stateInClosingTagName(c);
2098
+ return;
2099
+ }
2100
+ this.sequenceIndex = 0;
2101
+ }
2102
+ if ((c | 32) === this.currentSequence[this.sequenceIndex]) {
2103
+ this.sequenceIndex += 1;
2104
+ } else if (this.sequenceIndex === 0) {
2105
+ if (this.currentSequence === Sequences.TitleEnd) {
2106
+ if (this.decodeEntities && c === CharCodes2.Amp) {
2107
+ this.startEntity();
2108
+ }
2109
+ } else if (this.fastForwardTo(CharCodes2.Lt)) {
2110
+ this.sequenceIndex = 1;
2111
+ }
2112
+ } else {
2113
+ this.sequenceIndex = Number(c === CharCodes2.Lt);
2114
+ }
2115
+ }
2116
+ stateCDATASequence(c) {
2117
+ if (c === Sequences.Cdata[this.sequenceIndex]) {
2118
+ if (++this.sequenceIndex === Sequences.Cdata.length) {
2119
+ this.state = State.InCommentLike;
2120
+ this.currentSequence = Sequences.CdataEnd;
2121
+ this.sequenceIndex = 0;
2122
+ this.sectionStart = this.index + 1;
2123
+ }
2124
+ } else {
2125
+ this.sequenceIndex = 0;
2126
+ this.state = State.InDeclaration;
2127
+ this.stateInDeclaration(c);
2128
+ }
2129
+ }
2130
+ /**
2131
+ * When we wait for one specific character, we can speed things up
2132
+ * by skipping through the buffer until we find it.
2133
+ *
2134
+ * @returns Whether the character was found.
2135
+ */
2136
+ fastForwardTo(c) {
2137
+ while (++this.index < this.buffer.length + this.offset) {
2138
+ if (this.buffer.charCodeAt(this.index - this.offset) === c) {
2139
+ return true;
2140
+ }
2141
+ }
2142
+ this.index = this.buffer.length + this.offset - 1;
2143
+ return false;
2144
+ }
2145
+ /**
2146
+ * Comments and CDATA end with `-->` and `]]>`.
2147
+ *
2148
+ * Their common qualities are:
2149
+ * - Their end sequences have a distinct character they start with.
2150
+ * - That character is then repeated, so we have to check multiple repeats.
2151
+ * - All characters but the start character of the sequence can be skipped.
2152
+ */
2153
+ stateInCommentLike(c) {
2154
+ if (c === this.currentSequence[this.sequenceIndex]) {
2155
+ if (++this.sequenceIndex === this.currentSequence.length) {
2156
+ if (this.currentSequence === Sequences.CdataEnd) {
2157
+ this.cbs.oncdata(this.sectionStart, this.index, 2);
2158
+ } else {
2159
+ this.cbs.oncomment(this.sectionStart, this.index, 2);
2160
+ }
2161
+ this.sequenceIndex = 0;
2162
+ this.sectionStart = this.index + 1;
2163
+ this.state = State.Text;
2164
+ }
2165
+ } else if (this.sequenceIndex === 0) {
2166
+ if (this.fastForwardTo(this.currentSequence[0])) {
2167
+ this.sequenceIndex = 1;
2168
+ }
2169
+ } else if (c !== this.currentSequence[this.sequenceIndex - 1]) {
2170
+ this.sequenceIndex = 0;
2171
+ }
2172
+ }
2173
+ /**
2174
+ * HTML only allows ASCII alpha characters (a-z and A-Z) at the beginning of a tag name.
2175
+ *
2176
+ * XML allows a lot more characters here (@see https://www.w3.org/TR/REC-xml/#NT-NameStartChar).
2177
+ * We allow anything that wouldn't end the tag.
2178
+ */
2179
+ isTagStartChar(c) {
2180
+ return this.xmlMode ? !isEndOfTagSection(c) : isASCIIAlpha(c);
2181
+ }
2182
+ startSpecial(sequence, offset) {
2183
+ this.isSpecial = true;
2184
+ this.currentSequence = sequence;
2185
+ this.sequenceIndex = offset;
2186
+ this.state = State.SpecialStartSequence;
2187
+ }
2188
+ stateBeforeTagName(c) {
2189
+ if (c === CharCodes2.ExclamationMark) {
2190
+ this.state = State.BeforeDeclaration;
2191
+ this.sectionStart = this.index + 1;
2192
+ } else if (c === CharCodes2.Questionmark) {
2193
+ this.state = State.InProcessingInstruction;
2194
+ this.sectionStart = this.index + 1;
2195
+ } else if (this.isTagStartChar(c)) {
2196
+ const lower = c | 32;
2197
+ this.sectionStart = this.index;
2198
+ if (this.xmlMode) {
2199
+ this.state = State.InTagName;
2200
+ } else if (lower === Sequences.ScriptEnd[2]) {
2201
+ this.state = State.BeforeSpecialS;
2202
+ } else if (lower === Sequences.TitleEnd[2] || lower === Sequences.XmpEnd[2]) {
2203
+ this.state = State.BeforeSpecialT;
2204
+ } else {
2205
+ this.state = State.InTagName;
2206
+ }
2207
+ } else if (c === CharCodes2.Slash) {
2208
+ this.state = State.BeforeClosingTagName;
2209
+ } else {
2210
+ this.state = State.Text;
2211
+ this.stateText(c);
2212
+ }
2213
+ }
2214
+ stateInTagName(c) {
2215
+ if (isEndOfTagSection(c)) {
2216
+ this.cbs.onopentagname(this.sectionStart, this.index);
2217
+ this.sectionStart = -1;
2218
+ this.state = State.BeforeAttributeName;
2219
+ this.stateBeforeAttributeName(c);
2220
+ }
2221
+ }
2222
+ stateBeforeClosingTagName(c) {
2223
+ if (isWhitespace(c)) {
2224
+ } else if (c === CharCodes2.Gt) {
2225
+ this.state = State.Text;
2226
+ } else {
2227
+ this.state = this.isTagStartChar(c) ? State.InClosingTagName : State.InSpecialComment;
2228
+ this.sectionStart = this.index;
2229
+ }
2230
+ }
2231
+ stateInClosingTagName(c) {
2232
+ if (c === CharCodes2.Gt || isWhitespace(c)) {
2233
+ this.cbs.onclosetag(this.sectionStart, this.index);
2234
+ this.sectionStart = -1;
2235
+ this.state = State.AfterClosingTagName;
2236
+ this.stateAfterClosingTagName(c);
2237
+ }
2238
+ }
2239
+ stateAfterClosingTagName(c) {
2240
+ if (c === CharCodes2.Gt || this.fastForwardTo(CharCodes2.Gt)) {
2241
+ this.state = State.Text;
2242
+ this.sectionStart = this.index + 1;
2243
+ }
2244
+ }
2245
+ stateBeforeAttributeName(c) {
2246
+ if (c === CharCodes2.Gt) {
2247
+ this.cbs.onopentagend(this.index);
2248
+ if (this.isSpecial) {
2249
+ this.state = State.InSpecialTag;
2250
+ this.sequenceIndex = 0;
2251
+ } else {
2252
+ this.state = State.Text;
2253
+ }
2254
+ this.sectionStart = this.index + 1;
2255
+ } else if (c === CharCodes2.Slash) {
2256
+ this.state = State.InSelfClosingTag;
2257
+ } else if (!isWhitespace(c)) {
2258
+ this.state = State.InAttributeName;
2259
+ this.sectionStart = this.index;
2260
+ }
2261
+ }
2262
+ stateInSelfClosingTag(c) {
2263
+ if (c === CharCodes2.Gt) {
2264
+ this.cbs.onselfclosingtag(this.index);
2265
+ this.state = State.Text;
2266
+ this.sectionStart = this.index + 1;
2267
+ this.isSpecial = false;
2268
+ } else if (!isWhitespace(c)) {
2269
+ this.state = State.BeforeAttributeName;
2270
+ this.stateBeforeAttributeName(c);
2271
+ }
2272
+ }
2273
+ stateInAttributeName(c) {
2274
+ if (c === CharCodes2.Eq || isEndOfTagSection(c)) {
2275
+ this.cbs.onattribname(this.sectionStart, this.index);
2276
+ this.sectionStart = this.index;
2277
+ this.state = State.AfterAttributeName;
2278
+ this.stateAfterAttributeName(c);
2279
+ }
2280
+ }
2281
+ stateAfterAttributeName(c) {
2282
+ if (c === CharCodes2.Eq) {
2283
+ this.state = State.BeforeAttributeValue;
2284
+ } else if (c === CharCodes2.Slash || c === CharCodes2.Gt) {
2285
+ this.cbs.onattribend(QuoteType.NoValue, this.sectionStart);
2286
+ this.sectionStart = -1;
2287
+ this.state = State.BeforeAttributeName;
2288
+ this.stateBeforeAttributeName(c);
2289
+ } else if (!isWhitespace(c)) {
2290
+ this.cbs.onattribend(QuoteType.NoValue, this.sectionStart);
2291
+ this.state = State.InAttributeName;
2292
+ this.sectionStart = this.index;
2293
+ }
2294
+ }
2295
+ stateBeforeAttributeValue(c) {
2296
+ if (c === CharCodes2.DoubleQuote) {
2297
+ this.state = State.InAttributeValueDq;
2298
+ this.sectionStart = this.index + 1;
2299
+ } else if (c === CharCodes2.SingleQuote) {
2300
+ this.state = State.InAttributeValueSq;
2301
+ this.sectionStart = this.index + 1;
2302
+ } else if (!isWhitespace(c)) {
2303
+ this.sectionStart = this.index;
2304
+ this.state = State.InAttributeValueNq;
2305
+ this.stateInAttributeValueNoQuotes(c);
2306
+ }
2307
+ }
2308
+ handleInAttributeValue(c, quote2) {
2309
+ if (c === quote2 || !this.decodeEntities && this.fastForwardTo(quote2)) {
2310
+ this.cbs.onattribdata(this.sectionStart, this.index);
2311
+ this.sectionStart = -1;
2312
+ this.cbs.onattribend(quote2 === CharCodes2.DoubleQuote ? QuoteType.Double : QuoteType.Single, this.index + 1);
2313
+ this.state = State.BeforeAttributeName;
2314
+ } else if (this.decodeEntities && c === CharCodes2.Amp) {
2315
+ this.startEntity();
2316
+ }
2317
+ }
2318
+ stateInAttributeValueDoubleQuotes(c) {
2319
+ this.handleInAttributeValue(c, CharCodes2.DoubleQuote);
2320
+ }
2321
+ stateInAttributeValueSingleQuotes(c) {
2322
+ this.handleInAttributeValue(c, CharCodes2.SingleQuote);
2323
+ }
2324
+ stateInAttributeValueNoQuotes(c) {
2325
+ if (isWhitespace(c) || c === CharCodes2.Gt) {
2326
+ this.cbs.onattribdata(this.sectionStart, this.index);
2327
+ this.sectionStart = -1;
2328
+ this.cbs.onattribend(QuoteType.Unquoted, this.index);
2329
+ this.state = State.BeforeAttributeName;
2330
+ this.stateBeforeAttributeName(c);
2331
+ } else if (this.decodeEntities && c === CharCodes2.Amp) {
2332
+ this.startEntity();
2333
+ }
2334
+ }
2335
+ stateBeforeDeclaration(c) {
2336
+ if (c === CharCodes2.OpeningSquareBracket) {
2337
+ this.state = State.CDATASequence;
2338
+ this.sequenceIndex = 0;
2339
+ } else {
2340
+ this.state = c === CharCodes2.Dash ? State.BeforeComment : State.InDeclaration;
2341
+ }
2342
+ }
2343
+ stateInDeclaration(c) {
2344
+ if (c === CharCodes2.Gt || this.fastForwardTo(CharCodes2.Gt)) {
2345
+ this.cbs.ondeclaration(this.sectionStart, this.index);
2346
+ this.state = State.Text;
2347
+ this.sectionStart = this.index + 1;
2348
+ }
2349
+ }
2350
+ stateInProcessingInstruction(c) {
2351
+ if (c === CharCodes2.Gt || this.fastForwardTo(CharCodes2.Gt)) {
2352
+ this.cbs.onprocessinginstruction(this.sectionStart, this.index);
2353
+ this.state = State.Text;
2354
+ this.sectionStart = this.index + 1;
2355
+ }
2356
+ }
2357
+ stateBeforeComment(c) {
2358
+ if (c === CharCodes2.Dash) {
2359
+ this.state = State.InCommentLike;
2360
+ this.currentSequence = Sequences.CommentEnd;
2361
+ this.sequenceIndex = 2;
2362
+ this.sectionStart = this.index + 1;
2363
+ } else {
2364
+ this.state = State.InDeclaration;
2365
+ }
2366
+ }
2367
+ stateInSpecialComment(c) {
2368
+ if (c === CharCodes2.Gt || this.fastForwardTo(CharCodes2.Gt)) {
2369
+ this.cbs.oncomment(this.sectionStart, this.index, 0);
2370
+ this.state = State.Text;
2371
+ this.sectionStart = this.index + 1;
2372
+ }
2373
+ }
2374
+ stateBeforeSpecialS(c) {
2375
+ const lower = c | 32;
2376
+ if (lower === Sequences.ScriptEnd[3]) {
2377
+ this.startSpecial(Sequences.ScriptEnd, 4);
2378
+ } else if (lower === Sequences.StyleEnd[3]) {
2379
+ this.startSpecial(Sequences.StyleEnd, 4);
2380
+ } else {
2381
+ this.state = State.InTagName;
2382
+ this.stateInTagName(c);
2383
+ }
2384
+ }
2385
+ stateBeforeSpecialT(c) {
2386
+ const lower = c | 32;
2387
+ switch (lower) {
2388
+ case Sequences.TitleEnd[3]: {
2389
+ this.startSpecial(Sequences.TitleEnd, 4);
2390
+ break;
2391
+ }
2392
+ case Sequences.TextareaEnd[3]: {
2393
+ this.startSpecial(Sequences.TextareaEnd, 4);
2394
+ break;
2395
+ }
2396
+ case Sequences.XmpEnd[3]: {
2397
+ this.startSpecial(Sequences.XmpEnd, 4);
2398
+ break;
2399
+ }
2400
+ default: {
2401
+ this.state = State.InTagName;
2402
+ this.stateInTagName(c);
2403
+ }
2404
+ }
2405
+ }
2406
+ startEntity() {
2407
+ this.baseState = this.state;
2408
+ this.state = State.InEntity;
2409
+ this.entityStart = this.index;
2410
+ this.entityDecoder.startEntity(this.xmlMode ? DecodingMode.Strict : this.baseState === State.Text || this.baseState === State.InSpecialTag ? DecodingMode.Legacy : DecodingMode.Attribute);
2411
+ }
2412
+ stateInEntity() {
2413
+ const indexInBuffer = this.index - this.offset;
2414
+ const length = this.entityDecoder.write(this.buffer, indexInBuffer);
2415
+ if (length >= 0) {
2416
+ this.state = this.baseState;
2417
+ if (length === 0) {
2418
+ this.index -= 1;
2419
+ }
2420
+ } else {
2421
+ if (indexInBuffer < this.buffer.length && this.buffer.charCodeAt(indexInBuffer) === CharCodes2.Amp) {
2422
+ this.state = this.baseState;
2423
+ this.index -= 1;
2424
+ return;
2425
+ }
2426
+ this.index = this.offset + this.buffer.length - 1;
2427
+ }
2428
+ }
2429
+ /**
2430
+ * Remove data that has already been consumed from the buffer.
2431
+ */
2432
+ cleanup() {
2433
+ if (this.running && this.sectionStart !== this.index) {
2434
+ if (this.state === State.Text || this.state === State.InSpecialTag && this.sequenceIndex === 0) {
2435
+ this.cbs.ontext(this.sectionStart, this.index);
2436
+ this.sectionStart = this.index;
2437
+ } else if (this.state === State.InAttributeValueDq || this.state === State.InAttributeValueSq || this.state === State.InAttributeValueNq) {
2438
+ this.cbs.onattribdata(this.sectionStart, this.index);
2439
+ this.sectionStart = this.index;
2440
+ }
2441
+ }
2442
+ }
2443
+ shouldContinue() {
2444
+ return this.index < this.buffer.length + this.offset && this.running;
2445
+ }
2446
+ /**
2447
+ * Iterates through the buffer, calling the function corresponding to the current state.
2448
+ *
2449
+ * States that are more likely to be hit are higher up, as a performance improvement.
2450
+ */
2451
+ parse() {
2452
+ while (this.shouldContinue()) {
2453
+ const c = this.buffer.charCodeAt(this.index - this.offset);
2454
+ switch (this.state) {
2455
+ case State.Text: {
2456
+ this.stateText(c);
2457
+ break;
2458
+ }
2459
+ case State.SpecialStartSequence: {
2460
+ this.stateSpecialStartSequence(c);
2461
+ break;
2462
+ }
2463
+ case State.InSpecialTag: {
2464
+ this.stateInSpecialTag(c);
2465
+ break;
2466
+ }
2467
+ case State.CDATASequence: {
2468
+ this.stateCDATASequence(c);
2469
+ break;
2470
+ }
2471
+ case State.InAttributeValueDq: {
2472
+ this.stateInAttributeValueDoubleQuotes(c);
2473
+ break;
2474
+ }
2475
+ case State.InAttributeName: {
2476
+ this.stateInAttributeName(c);
2477
+ break;
2478
+ }
2479
+ case State.InCommentLike: {
2480
+ this.stateInCommentLike(c);
2481
+ break;
2482
+ }
2483
+ case State.InSpecialComment: {
2484
+ this.stateInSpecialComment(c);
2485
+ break;
2486
+ }
2487
+ case State.BeforeAttributeName: {
2488
+ this.stateBeforeAttributeName(c);
2489
+ break;
2490
+ }
2491
+ case State.InTagName: {
2492
+ this.stateInTagName(c);
2493
+ break;
2494
+ }
2495
+ case State.InClosingTagName: {
2496
+ this.stateInClosingTagName(c);
2497
+ break;
2498
+ }
2499
+ case State.BeforeTagName: {
2500
+ this.stateBeforeTagName(c);
2501
+ break;
2502
+ }
2503
+ case State.AfterAttributeName: {
2504
+ this.stateAfterAttributeName(c);
2505
+ break;
2506
+ }
2507
+ case State.InAttributeValueSq: {
2508
+ this.stateInAttributeValueSingleQuotes(c);
2509
+ break;
2510
+ }
2511
+ case State.BeforeAttributeValue: {
2512
+ this.stateBeforeAttributeValue(c);
2513
+ break;
2514
+ }
2515
+ case State.BeforeClosingTagName: {
2516
+ this.stateBeforeClosingTagName(c);
2517
+ break;
2518
+ }
2519
+ case State.AfterClosingTagName: {
2520
+ this.stateAfterClosingTagName(c);
2521
+ break;
2522
+ }
2523
+ case State.BeforeSpecialS: {
2524
+ this.stateBeforeSpecialS(c);
2525
+ break;
2526
+ }
2527
+ case State.BeforeSpecialT: {
2528
+ this.stateBeforeSpecialT(c);
2529
+ break;
2530
+ }
2531
+ case State.InAttributeValueNq: {
2532
+ this.stateInAttributeValueNoQuotes(c);
2533
+ break;
2534
+ }
2535
+ case State.InSelfClosingTag: {
2536
+ this.stateInSelfClosingTag(c);
2537
+ break;
2538
+ }
2539
+ case State.InDeclaration: {
2540
+ this.stateInDeclaration(c);
2541
+ break;
2542
+ }
2543
+ case State.BeforeDeclaration: {
2544
+ this.stateBeforeDeclaration(c);
2545
+ break;
2546
+ }
2547
+ case State.BeforeComment: {
2548
+ this.stateBeforeComment(c);
2549
+ break;
2550
+ }
2551
+ case State.InProcessingInstruction: {
2552
+ this.stateInProcessingInstruction(c);
2553
+ break;
2554
+ }
2555
+ case State.InEntity: {
2556
+ this.stateInEntity();
2557
+ break;
2558
+ }
2559
+ }
2560
+ this.index++;
2561
+ }
2562
+ this.cleanup();
2563
+ }
2564
+ finish() {
2565
+ if (this.state === State.InEntity) {
2566
+ this.entityDecoder.end();
2567
+ this.state = this.baseState;
2568
+ }
2569
+ this.handleTrailingData();
2570
+ this.cbs.onend();
2571
+ }
2572
+ /** Handle any trailing data. */
2573
+ handleTrailingData() {
2574
+ const endIndex = this.buffer.length + this.offset;
2575
+ if (this.sectionStart >= endIndex) {
2576
+ return;
2577
+ }
2578
+ if (this.state === State.InCommentLike) {
2579
+ if (this.currentSequence === Sequences.CdataEnd) {
2580
+ this.cbs.oncdata(this.sectionStart, endIndex, 0);
2581
+ } else {
2582
+ this.cbs.oncomment(this.sectionStart, endIndex, 0);
2583
+ }
2584
+ } else if (this.state === State.InTagName || this.state === State.BeforeAttributeName || this.state === State.BeforeAttributeValue || this.state === State.AfterAttributeName || this.state === State.InAttributeName || this.state === State.InAttributeValueSq || this.state === State.InAttributeValueDq || this.state === State.InAttributeValueNq || this.state === State.InClosingTagName) {
2585
+ } else {
2586
+ this.cbs.ontext(this.sectionStart, endIndex);
2587
+ }
2588
+ }
2589
+ emitCodePoint(cp, consumed) {
2590
+ if (this.baseState !== State.Text && this.baseState !== State.InSpecialTag) {
2591
+ if (this.sectionStart < this.entityStart) {
2592
+ this.cbs.onattribdata(this.sectionStart, this.entityStart);
2593
+ }
2594
+ this.sectionStart = this.entityStart + consumed;
2595
+ this.index = this.sectionStart - 1;
2596
+ this.cbs.onattribentity(cp);
2597
+ } else {
2598
+ if (this.sectionStart < this.entityStart) {
2599
+ this.cbs.ontext(this.sectionStart, this.entityStart);
2600
+ }
2601
+ this.sectionStart = this.entityStart + consumed;
2602
+ this.index = this.sectionStart - 1;
2603
+ this.cbs.ontextentity(cp, this.sectionStart);
2604
+ }
2605
+ }
2606
+ };
2607
+
2608
+ // node_modules/.pnpm/htmlparser2@10.1.0/node_modules/htmlparser2/dist/esm/Parser.js
2609
+ var formTags = /* @__PURE__ */ new Set([
2610
+ "input",
2611
+ "option",
2612
+ "optgroup",
2613
+ "select",
2614
+ "button",
2615
+ "datalist",
2616
+ "textarea"
2617
+ ]);
2618
+ var pTag = /* @__PURE__ */ new Set(["p"]);
2619
+ var tableSectionTags = /* @__PURE__ */ new Set(["thead", "tbody"]);
2620
+ var ddtTags = /* @__PURE__ */ new Set(["dd", "dt"]);
2621
+ var rtpTags = /* @__PURE__ */ new Set(["rt", "rp"]);
2622
+ var openImpliesClose = /* @__PURE__ */ new Map([
2623
+ ["tr", /* @__PURE__ */ new Set(["tr", "th", "td"])],
2624
+ ["th", /* @__PURE__ */ new Set(["th"])],
2625
+ ["td", /* @__PURE__ */ new Set(["thead", "th", "td"])],
2626
+ ["body", /* @__PURE__ */ new Set(["head", "link", "script"])],
2627
+ ["li", /* @__PURE__ */ new Set(["li"])],
2628
+ ["p", pTag],
2629
+ ["h1", pTag],
2630
+ ["h2", pTag],
2631
+ ["h3", pTag],
2632
+ ["h4", pTag],
2633
+ ["h5", pTag],
2634
+ ["h6", pTag],
2635
+ ["select", formTags],
2636
+ ["input", formTags],
2637
+ ["output", formTags],
2638
+ ["button", formTags],
2639
+ ["datalist", formTags],
2640
+ ["textarea", formTags],
2641
+ ["option", /* @__PURE__ */ new Set(["option"])],
2642
+ ["optgroup", /* @__PURE__ */ new Set(["optgroup", "option"])],
2643
+ ["dd", ddtTags],
2644
+ ["dt", ddtTags],
2645
+ ["address", pTag],
2646
+ ["article", pTag],
2647
+ ["aside", pTag],
2648
+ ["blockquote", pTag],
2649
+ ["details", pTag],
2650
+ ["div", pTag],
2651
+ ["dl", pTag],
2652
+ ["fieldset", pTag],
2653
+ ["figcaption", pTag],
2654
+ ["figure", pTag],
2655
+ ["footer", pTag],
2656
+ ["form", pTag],
2657
+ ["header", pTag],
2658
+ ["hr", pTag],
2659
+ ["main", pTag],
2660
+ ["nav", pTag],
2661
+ ["ol", pTag],
2662
+ ["pre", pTag],
2663
+ ["section", pTag],
2664
+ ["table", pTag],
2665
+ ["ul", pTag],
2666
+ ["rt", rtpTags],
2667
+ ["rp", rtpTags],
2668
+ ["tbody", tableSectionTags],
2669
+ ["tfoot", tableSectionTags]
2670
+ ]);
2671
+ var voidElements = /* @__PURE__ */ new Set([
2672
+ "area",
2673
+ "base",
2674
+ "basefont",
2675
+ "br",
2676
+ "col",
2677
+ "command",
2678
+ "embed",
2679
+ "frame",
2680
+ "hr",
2681
+ "img",
2682
+ "input",
2683
+ "isindex",
2684
+ "keygen",
2685
+ "link",
2686
+ "meta",
2687
+ "param",
2688
+ "source",
2689
+ "track",
2690
+ "wbr"
2691
+ ]);
2692
+ var foreignContextElements = /* @__PURE__ */ new Set(["math", "svg"]);
2693
+ var htmlIntegrationElements = /* @__PURE__ */ new Set([
2694
+ "mi",
2695
+ "mo",
2696
+ "mn",
2697
+ "ms",
2698
+ "mtext",
2699
+ "annotation-xml",
2700
+ "foreignobject",
2701
+ "desc",
2702
+ "title"
2703
+ ]);
2704
+ var reNameEnd = /\s|\//;
2705
+ var Parser = class {
2706
+ constructor(cbs, options = {}) {
2707
+ var _a3, _b, _c, _d, _e, _f;
2708
+ this.options = options;
2709
+ this.startIndex = 0;
2710
+ this.endIndex = 0;
2711
+ this.openTagStart = 0;
2712
+ this.tagname = "";
2713
+ this.attribname = "";
2714
+ this.attribvalue = "";
2715
+ this.attribs = null;
2716
+ this.stack = [];
2717
+ this.buffers = [];
2718
+ this.bufferOffset = 0;
2719
+ this.writeIndex = 0;
2720
+ this.ended = false;
2721
+ this.cbs = cbs !== null && cbs !== void 0 ? cbs : {};
2722
+ this.htmlMode = !this.options.xmlMode;
2723
+ this.lowerCaseTagNames = (_a3 = options.lowerCaseTags) !== null && _a3 !== void 0 ? _a3 : this.htmlMode;
2724
+ this.lowerCaseAttributeNames = (_b = options.lowerCaseAttributeNames) !== null && _b !== void 0 ? _b : this.htmlMode;
2725
+ this.recognizeSelfClosing = (_c = options.recognizeSelfClosing) !== null && _c !== void 0 ? _c : !this.htmlMode;
2726
+ this.tokenizer = new ((_d = options.Tokenizer) !== null && _d !== void 0 ? _d : Tokenizer)(this.options, this);
2727
+ this.foreignContext = [!this.htmlMode];
2728
+ (_f = (_e = this.cbs).onparserinit) === null || _f === void 0 ? void 0 : _f.call(_e, this);
2729
+ }
2730
+ // Tokenizer event handlers
2731
+ /** @internal */
2732
+ ontext(start, endIndex) {
2733
+ var _a3, _b;
2734
+ const data = this.getSlice(start, endIndex);
2735
+ this.endIndex = endIndex - 1;
2736
+ (_b = (_a3 = this.cbs).ontext) === null || _b === void 0 ? void 0 : _b.call(_a3, data);
2737
+ this.startIndex = endIndex;
2738
+ }
2739
+ /** @internal */
2740
+ ontextentity(cp, endIndex) {
2741
+ var _a3, _b;
2742
+ this.endIndex = endIndex - 1;
2743
+ (_b = (_a3 = this.cbs).ontext) === null || _b === void 0 ? void 0 : _b.call(_a3, fromCodePoint(cp));
2744
+ this.startIndex = endIndex;
2745
+ }
2746
+ /**
2747
+ * Checks if the current tag is a void element. Override this if you want
2748
+ * to specify your own additional void elements.
2749
+ */
2750
+ isVoidElement(name) {
2751
+ return this.htmlMode && voidElements.has(name);
2752
+ }
2753
+ /** @internal */
2754
+ onopentagname(start, endIndex) {
2755
+ this.endIndex = endIndex;
2756
+ let name = this.getSlice(start, endIndex);
2757
+ if (this.lowerCaseTagNames) {
2758
+ name = name.toLowerCase();
2759
+ }
2760
+ this.emitOpenTag(name);
2761
+ }
2762
+ emitOpenTag(name) {
2763
+ var _a3, _b, _c, _d;
2764
+ this.openTagStart = this.startIndex;
2765
+ this.tagname = name;
2766
+ const impliesClose = this.htmlMode && openImpliesClose.get(name);
2767
+ if (impliesClose) {
2768
+ while (this.stack.length > 0 && impliesClose.has(this.stack[0])) {
2769
+ const element = this.stack.shift();
2770
+ (_b = (_a3 = this.cbs).onclosetag) === null || _b === void 0 ? void 0 : _b.call(_a3, element, true);
2771
+ }
2772
+ }
2773
+ if (!this.isVoidElement(name)) {
2774
+ this.stack.unshift(name);
2775
+ if (this.htmlMode) {
2776
+ if (foreignContextElements.has(name)) {
2777
+ this.foreignContext.unshift(true);
2778
+ } else if (htmlIntegrationElements.has(name)) {
2779
+ this.foreignContext.unshift(false);
2780
+ }
2781
+ }
2782
+ }
2783
+ (_d = (_c = this.cbs).onopentagname) === null || _d === void 0 ? void 0 : _d.call(_c, name);
2784
+ if (this.cbs.onopentag)
2785
+ this.attribs = {};
2786
+ }
2787
+ endOpenTag(isImplied) {
2788
+ var _a3, _b;
2789
+ this.startIndex = this.openTagStart;
2790
+ if (this.attribs) {
2791
+ (_b = (_a3 = this.cbs).onopentag) === null || _b === void 0 ? void 0 : _b.call(_a3, this.tagname, this.attribs, isImplied);
2792
+ this.attribs = null;
2793
+ }
2794
+ if (this.cbs.onclosetag && this.isVoidElement(this.tagname)) {
2795
+ this.cbs.onclosetag(this.tagname, true);
2796
+ }
2797
+ this.tagname = "";
2798
+ }
2799
+ /** @internal */
2800
+ onopentagend(endIndex) {
2801
+ this.endIndex = endIndex;
2802
+ this.endOpenTag(false);
2803
+ this.startIndex = endIndex + 1;
2804
+ }
2805
+ /** @internal */
2806
+ onclosetag(start, endIndex) {
2807
+ var _a3, _b, _c, _d, _e, _f, _g, _h;
2808
+ this.endIndex = endIndex;
2809
+ let name = this.getSlice(start, endIndex);
2810
+ if (this.lowerCaseTagNames) {
2811
+ name = name.toLowerCase();
2812
+ }
2813
+ if (this.htmlMode && (foreignContextElements.has(name) || htmlIntegrationElements.has(name))) {
2814
+ this.foreignContext.shift();
2815
+ }
2816
+ if (!this.isVoidElement(name)) {
2817
+ const pos = this.stack.indexOf(name);
2818
+ if (pos !== -1) {
2819
+ for (let index = 0; index <= pos; index++) {
2820
+ const element = this.stack.shift();
2821
+ (_b = (_a3 = this.cbs).onclosetag) === null || _b === void 0 ? void 0 : _b.call(_a3, element, index !== pos);
2822
+ }
2823
+ } else if (this.htmlMode && name === "p") {
2824
+ this.emitOpenTag("p");
2825
+ this.closeCurrentTag(true);
2826
+ }
2827
+ } else if (this.htmlMode && name === "br") {
2828
+ (_d = (_c = this.cbs).onopentagname) === null || _d === void 0 ? void 0 : _d.call(_c, "br");
2829
+ (_f = (_e = this.cbs).onopentag) === null || _f === void 0 ? void 0 : _f.call(_e, "br", {}, true);
2830
+ (_h = (_g = this.cbs).onclosetag) === null || _h === void 0 ? void 0 : _h.call(_g, "br", false);
2831
+ }
2832
+ this.startIndex = endIndex + 1;
2833
+ }
2834
+ /** @internal */
2835
+ onselfclosingtag(endIndex) {
2836
+ this.endIndex = endIndex;
2837
+ if (this.recognizeSelfClosing || this.foreignContext[0]) {
2838
+ this.closeCurrentTag(false);
2839
+ this.startIndex = endIndex + 1;
2840
+ } else {
2841
+ this.onopentagend(endIndex);
2842
+ }
2843
+ }
2844
+ closeCurrentTag(isOpenImplied) {
2845
+ var _a3, _b;
2846
+ const name = this.tagname;
2847
+ this.endOpenTag(isOpenImplied);
2848
+ if (this.stack[0] === name) {
2849
+ (_b = (_a3 = this.cbs).onclosetag) === null || _b === void 0 ? void 0 : _b.call(_a3, name, !isOpenImplied);
2850
+ this.stack.shift();
2851
+ }
2852
+ }
2853
+ /** @internal */
2854
+ onattribname(start, endIndex) {
2855
+ this.startIndex = start;
2856
+ const name = this.getSlice(start, endIndex);
2857
+ this.attribname = this.lowerCaseAttributeNames ? name.toLowerCase() : name;
2858
+ }
2859
+ /** @internal */
2860
+ onattribdata(start, endIndex) {
2861
+ this.attribvalue += this.getSlice(start, endIndex);
2862
+ }
2863
+ /** @internal */
2864
+ onattribentity(cp) {
2865
+ this.attribvalue += fromCodePoint(cp);
2866
+ }
2867
+ /** @internal */
2868
+ onattribend(quote2, endIndex) {
2869
+ var _a3, _b;
2870
+ this.endIndex = endIndex;
2871
+ (_b = (_a3 = this.cbs).onattribute) === null || _b === void 0 ? void 0 : _b.call(_a3, this.attribname, this.attribvalue, quote2 === QuoteType.Double ? '"' : quote2 === QuoteType.Single ? "'" : quote2 === QuoteType.NoValue ? void 0 : null);
2872
+ if (this.attribs && !Object.prototype.hasOwnProperty.call(this.attribs, this.attribname)) {
2873
+ this.attribs[this.attribname] = this.attribvalue;
2874
+ }
2875
+ this.attribvalue = "";
2876
+ }
2877
+ getInstructionName(value) {
2878
+ const index = value.search(reNameEnd);
2879
+ let name = index < 0 ? value : value.substr(0, index);
2880
+ if (this.lowerCaseTagNames) {
2881
+ name = name.toLowerCase();
2882
+ }
2883
+ return name;
2884
+ }
2885
+ /** @internal */
2886
+ ondeclaration(start, endIndex) {
2887
+ this.endIndex = endIndex;
2888
+ const value = this.getSlice(start, endIndex);
2889
+ if (this.cbs.onprocessinginstruction) {
2890
+ const name = this.getInstructionName(value);
2891
+ this.cbs.onprocessinginstruction(`!${name}`, `!${value}`);
2892
+ }
2893
+ this.startIndex = endIndex + 1;
2894
+ }
2895
+ /** @internal */
2896
+ onprocessinginstruction(start, endIndex) {
2897
+ this.endIndex = endIndex;
2898
+ const value = this.getSlice(start, endIndex);
2899
+ if (this.cbs.onprocessinginstruction) {
2900
+ const name = this.getInstructionName(value);
2901
+ this.cbs.onprocessinginstruction(`?${name}`, `?${value}`);
2902
+ }
2903
+ this.startIndex = endIndex + 1;
2904
+ }
2905
+ /** @internal */
2906
+ oncomment(start, endIndex, offset) {
2907
+ var _a3, _b, _c, _d;
2908
+ this.endIndex = endIndex;
2909
+ (_b = (_a3 = this.cbs).oncomment) === null || _b === void 0 ? void 0 : _b.call(_a3, this.getSlice(start, endIndex - offset));
2910
+ (_d = (_c = this.cbs).oncommentend) === null || _d === void 0 ? void 0 : _d.call(_c);
2911
+ this.startIndex = endIndex + 1;
2912
+ }
2913
+ /** @internal */
2914
+ oncdata(start, endIndex, offset) {
2915
+ var _a3, _b, _c, _d, _e, _f, _g, _h, _j, _k;
2916
+ this.endIndex = endIndex;
2917
+ const value = this.getSlice(start, endIndex - offset);
2918
+ if (!this.htmlMode || this.options.recognizeCDATA) {
2919
+ (_b = (_a3 = this.cbs).oncdatastart) === null || _b === void 0 ? void 0 : _b.call(_a3);
2920
+ (_d = (_c = this.cbs).ontext) === null || _d === void 0 ? void 0 : _d.call(_c, value);
2921
+ (_f = (_e = this.cbs).oncdataend) === null || _f === void 0 ? void 0 : _f.call(_e);
2922
+ } else {
2923
+ (_h = (_g = this.cbs).oncomment) === null || _h === void 0 ? void 0 : _h.call(_g, `[CDATA[${value}]]`);
2924
+ (_k = (_j = this.cbs).oncommentend) === null || _k === void 0 ? void 0 : _k.call(_j);
2925
+ }
2926
+ this.startIndex = endIndex + 1;
2927
+ }
2928
+ /** @internal */
2929
+ onend() {
2930
+ var _a3, _b;
2931
+ if (this.cbs.onclosetag) {
2932
+ this.endIndex = this.startIndex;
2933
+ for (let index = 0; index < this.stack.length; index++) {
2934
+ this.cbs.onclosetag(this.stack[index], true);
2935
+ }
2936
+ }
2937
+ (_b = (_a3 = this.cbs).onend) === null || _b === void 0 ? void 0 : _b.call(_a3);
2938
+ }
2939
+ /**
2940
+ * Resets the parser to a blank state, ready to parse a new HTML document
2941
+ */
2942
+ reset() {
2943
+ var _a3, _b, _c, _d;
2944
+ (_b = (_a3 = this.cbs).onreset) === null || _b === void 0 ? void 0 : _b.call(_a3);
2945
+ this.tokenizer.reset();
2946
+ this.tagname = "";
2947
+ this.attribname = "";
2948
+ this.attribs = null;
2949
+ this.stack.length = 0;
2950
+ this.startIndex = 0;
2951
+ this.endIndex = 0;
2952
+ (_d = (_c = this.cbs).onparserinit) === null || _d === void 0 ? void 0 : _d.call(_c, this);
2953
+ this.buffers.length = 0;
2954
+ this.foreignContext.length = 0;
2955
+ this.foreignContext.unshift(!this.htmlMode);
2956
+ this.bufferOffset = 0;
2957
+ this.writeIndex = 0;
2958
+ this.ended = false;
2959
+ }
2960
+ /**
2961
+ * Resets the parser, then parses a complete document and
2962
+ * pushes it to the handler.
2963
+ *
2964
+ * @param data Document to parse.
2965
+ */
2966
+ parseComplete(data) {
2967
+ this.reset();
2968
+ this.end(data);
2969
+ }
2970
+ getSlice(start, end) {
2971
+ while (start - this.bufferOffset >= this.buffers[0].length) {
2972
+ this.shiftBuffer();
2973
+ }
2974
+ let slice = this.buffers[0].slice(start - this.bufferOffset, end - this.bufferOffset);
2975
+ while (end - this.bufferOffset > this.buffers[0].length) {
2976
+ this.shiftBuffer();
2977
+ slice += this.buffers[0].slice(0, end - this.bufferOffset);
2978
+ }
2979
+ return slice;
2980
+ }
2981
+ shiftBuffer() {
2982
+ this.bufferOffset += this.buffers[0].length;
2983
+ this.writeIndex--;
2984
+ this.buffers.shift();
2985
+ }
2986
+ /**
2987
+ * Parses a chunk of data and calls the corresponding callbacks.
2988
+ *
2989
+ * @param chunk Chunk to parse.
2990
+ */
2991
+ write(chunk) {
2992
+ var _a3, _b;
2993
+ if (this.ended) {
2994
+ (_b = (_a3 = this.cbs).onerror) === null || _b === void 0 ? void 0 : _b.call(_a3, new Error(".write() after done!"));
2995
+ return;
2996
+ }
2997
+ this.buffers.push(chunk);
2998
+ if (this.tokenizer.running) {
2999
+ this.tokenizer.write(chunk);
3000
+ this.writeIndex++;
3001
+ }
3002
+ }
3003
+ /**
3004
+ * Parses the end of the buffer and clears the stack, calls onend.
3005
+ *
3006
+ * @param chunk Optional final chunk to parse.
3007
+ */
3008
+ end(chunk) {
3009
+ var _a3, _b;
3010
+ if (this.ended) {
3011
+ (_b = (_a3 = this.cbs).onerror) === null || _b === void 0 ? void 0 : _b.call(_a3, new Error(".end() after done!"));
3012
+ return;
3013
+ }
3014
+ if (chunk)
3015
+ this.write(chunk);
3016
+ this.ended = true;
3017
+ this.tokenizer.end();
3018
+ }
3019
+ /**
3020
+ * Pauses parsing. The parser won't emit events until `resume` is called.
3021
+ */
3022
+ pause() {
3023
+ this.tokenizer.pause();
3024
+ }
3025
+ /**
3026
+ * Resumes parsing after `pause` was called.
3027
+ */
3028
+ resume() {
3029
+ this.tokenizer.resume();
3030
+ while (this.tokenizer.running && this.writeIndex < this.buffers.length) {
3031
+ this.tokenizer.write(this.buffers[this.writeIndex++]);
3032
+ }
3033
+ if (this.ended)
3034
+ this.tokenizer.end();
3035
+ }
3036
+ /**
3037
+ * Alias of `write`, for backwards compatibility.
3038
+ *
3039
+ * @param chunk Chunk to parse.
3040
+ * @deprecated
3041
+ */
3042
+ parseChunk(chunk) {
3043
+ this.write(chunk);
3044
+ }
3045
+ /**
3046
+ * Alias of `end`, for backwards compatibility.
3047
+ *
3048
+ * @param chunk Optional final chunk to parse.
3049
+ * @deprecated
3050
+ */
3051
+ done(chunk) {
3052
+ this.end(chunk);
3053
+ }
3054
+ };
3055
+
3056
+ // node_modules/.pnpm/domelementtype@2.3.0/node_modules/domelementtype/lib/esm/index.js
3057
+ var ElementType;
3058
+ (function(ElementType2) {
3059
+ ElementType2["Root"] = "root";
3060
+ ElementType2["Text"] = "text";
3061
+ ElementType2["Directive"] = "directive";
3062
+ ElementType2["Comment"] = "comment";
3063
+ ElementType2["Script"] = "script";
3064
+ ElementType2["Style"] = "style";
3065
+ ElementType2["Tag"] = "tag";
3066
+ ElementType2["CDATA"] = "cdata";
3067
+ ElementType2["Doctype"] = "doctype";
3068
+ })(ElementType || (ElementType = {}));
3069
+ function isTag(elem) {
3070
+ return elem.type === ElementType.Tag || elem.type === ElementType.Script || elem.type === ElementType.Style;
3071
+ }
3072
+ var Root = ElementType.Root;
3073
+ var Text = ElementType.Text;
3074
+ var Directive = ElementType.Directive;
3075
+ var Comment = ElementType.Comment;
3076
+ var Script = ElementType.Script;
3077
+ var Style = ElementType.Style;
3078
+ var Tag = ElementType.Tag;
3079
+ var CDATA = ElementType.CDATA;
3080
+ var Doctype = ElementType.Doctype;
3081
+
3082
+ // node_modules/.pnpm/domhandler@5.0.3/node_modules/domhandler/lib/esm/node.js
3083
+ var Node = class {
3084
+ constructor() {
3085
+ this.parent = null;
3086
+ this.prev = null;
3087
+ this.next = null;
3088
+ this.startIndex = null;
3089
+ this.endIndex = null;
3090
+ }
3091
+ // Read-write aliases for properties
3092
+ /**
3093
+ * Same as {@link parent}.
3094
+ * [DOM spec](https://dom.spec.whatwg.org)-compatible alias.
3095
+ */
3096
+ get parentNode() {
3097
+ return this.parent;
3098
+ }
3099
+ set parentNode(parent) {
3100
+ this.parent = parent;
3101
+ }
3102
+ /**
3103
+ * Same as {@link prev}.
3104
+ * [DOM spec](https://dom.spec.whatwg.org)-compatible alias.
3105
+ */
3106
+ get previousSibling() {
3107
+ return this.prev;
3108
+ }
3109
+ set previousSibling(prev) {
3110
+ this.prev = prev;
3111
+ }
3112
+ /**
3113
+ * Same as {@link next}.
3114
+ * [DOM spec](https://dom.spec.whatwg.org)-compatible alias.
3115
+ */
3116
+ get nextSibling() {
3117
+ return this.next;
3118
+ }
3119
+ set nextSibling(next) {
3120
+ this.next = next;
3121
+ }
3122
+ /**
3123
+ * Clone this node, and optionally its children.
3124
+ *
3125
+ * @param recursive Clone child nodes as well.
3126
+ * @returns A clone of the node.
3127
+ */
3128
+ cloneNode(recursive = false) {
3129
+ return cloneNode(this, recursive);
3130
+ }
3131
+ };
3132
+ var DataNode = class extends Node {
3133
+ /**
3134
+ * @param data The content of the data node
3135
+ */
3136
+ constructor(data) {
3137
+ super();
3138
+ this.data = data;
3139
+ }
3140
+ /**
3141
+ * Same as {@link data}.
3142
+ * [DOM spec](https://dom.spec.whatwg.org)-compatible alias.
3143
+ */
3144
+ get nodeValue() {
3145
+ return this.data;
3146
+ }
3147
+ set nodeValue(data) {
3148
+ this.data = data;
3149
+ }
3150
+ };
3151
+ var Text2 = class extends DataNode {
3152
+ constructor() {
3153
+ super(...arguments);
3154
+ this.type = ElementType.Text;
3155
+ }
3156
+ get nodeType() {
3157
+ return 3;
3158
+ }
3159
+ };
3160
+ var Comment2 = class extends DataNode {
3161
+ constructor() {
3162
+ super(...arguments);
3163
+ this.type = ElementType.Comment;
3164
+ }
3165
+ get nodeType() {
3166
+ return 8;
3167
+ }
3168
+ };
3169
+ var ProcessingInstruction = class extends DataNode {
3170
+ constructor(name, data) {
3171
+ super(data);
3172
+ this.name = name;
3173
+ this.type = ElementType.Directive;
3174
+ }
3175
+ get nodeType() {
3176
+ return 1;
3177
+ }
3178
+ };
3179
+ var NodeWithChildren = class extends Node {
3180
+ /**
3181
+ * @param children Children of the node. Only certain node types can have children.
3182
+ */
3183
+ constructor(children) {
3184
+ super();
3185
+ this.children = children;
3186
+ }
3187
+ // Aliases
3188
+ /** First child of the node. */
3189
+ get firstChild() {
3190
+ var _a3;
3191
+ return (_a3 = this.children[0]) !== null && _a3 !== void 0 ? _a3 : null;
3192
+ }
3193
+ /** Last child of the node. */
3194
+ get lastChild() {
3195
+ return this.children.length > 0 ? this.children[this.children.length - 1] : null;
3196
+ }
3197
+ /**
3198
+ * Same as {@link children}.
3199
+ * [DOM spec](https://dom.spec.whatwg.org)-compatible alias.
3200
+ */
3201
+ get childNodes() {
3202
+ return this.children;
3203
+ }
3204
+ set childNodes(children) {
3205
+ this.children = children;
3206
+ }
3207
+ };
3208
+ var CDATA2 = class extends NodeWithChildren {
3209
+ constructor() {
3210
+ super(...arguments);
3211
+ this.type = ElementType.CDATA;
3212
+ }
3213
+ get nodeType() {
3214
+ return 4;
3215
+ }
3216
+ };
3217
+ var Document = class extends NodeWithChildren {
3218
+ constructor() {
3219
+ super(...arguments);
3220
+ this.type = ElementType.Root;
3221
+ }
3222
+ get nodeType() {
3223
+ return 9;
3224
+ }
3225
+ };
3226
+ var Element = class extends NodeWithChildren {
3227
+ /**
3228
+ * @param name Name of the tag, eg. `div`, `span`.
3229
+ * @param attribs Object mapping attribute names to attribute values.
3230
+ * @param children Children of the node.
3231
+ */
3232
+ constructor(name, attribs, children = [], type = name === "script" ? ElementType.Script : name === "style" ? ElementType.Style : ElementType.Tag) {
3233
+ super(children);
3234
+ this.name = name;
3235
+ this.attribs = attribs;
3236
+ this.type = type;
3237
+ }
3238
+ get nodeType() {
3239
+ return 1;
3240
+ }
3241
+ // DOM Level 1 aliases
3242
+ /**
3243
+ * Same as {@link name}.
3244
+ * [DOM spec](https://dom.spec.whatwg.org)-compatible alias.
3245
+ */
3246
+ get tagName() {
3247
+ return this.name;
3248
+ }
3249
+ set tagName(name) {
3250
+ this.name = name;
3251
+ }
3252
+ get attributes() {
3253
+ return Object.keys(this.attribs).map((name) => {
3254
+ var _a3, _b;
3255
+ return {
3256
+ name,
3257
+ value: this.attribs[name],
3258
+ namespace: (_a3 = this["x-attribsNamespace"]) === null || _a3 === void 0 ? void 0 : _a3[name],
3259
+ prefix: (_b = this["x-attribsPrefix"]) === null || _b === void 0 ? void 0 : _b[name]
3260
+ };
3261
+ });
3262
+ }
3263
+ };
3264
+ function isTag2(node) {
3265
+ return isTag(node);
3266
+ }
3267
+ function isCDATA(node) {
3268
+ return node.type === ElementType.CDATA;
3269
+ }
3270
+ function isText(node) {
3271
+ return node.type === ElementType.Text;
3272
+ }
3273
+ function isComment(node) {
3274
+ return node.type === ElementType.Comment;
3275
+ }
3276
+ function isDirective(node) {
3277
+ return node.type === ElementType.Directive;
3278
+ }
3279
+ function isDocument(node) {
3280
+ return node.type === ElementType.Root;
3281
+ }
3282
+ function cloneNode(node, recursive = false) {
3283
+ let result;
3284
+ if (isText(node)) {
3285
+ result = new Text2(node.data);
3286
+ } else if (isComment(node)) {
3287
+ result = new Comment2(node.data);
3288
+ } else if (isTag2(node)) {
3289
+ const children = recursive ? cloneChildren(node.children) : [];
3290
+ const clone = new Element(node.name, { ...node.attribs }, children);
3291
+ children.forEach((child) => child.parent = clone);
3292
+ if (node.namespace != null) {
3293
+ clone.namespace = node.namespace;
3294
+ }
3295
+ if (node["x-attribsNamespace"]) {
3296
+ clone["x-attribsNamespace"] = { ...node["x-attribsNamespace"] };
3297
+ }
3298
+ if (node["x-attribsPrefix"]) {
3299
+ clone["x-attribsPrefix"] = { ...node["x-attribsPrefix"] };
3300
+ }
3301
+ result = clone;
3302
+ } else if (isCDATA(node)) {
3303
+ const children = recursive ? cloneChildren(node.children) : [];
3304
+ const clone = new CDATA2(children);
3305
+ children.forEach((child) => child.parent = clone);
3306
+ result = clone;
3307
+ } else if (isDocument(node)) {
3308
+ const children = recursive ? cloneChildren(node.children) : [];
3309
+ const clone = new Document(children);
3310
+ children.forEach((child) => child.parent = clone);
3311
+ if (node["x-mode"]) {
3312
+ clone["x-mode"] = node["x-mode"];
3313
+ }
3314
+ result = clone;
3315
+ } else if (isDirective(node)) {
3316
+ const instruction = new ProcessingInstruction(node.name, node.data);
3317
+ if (node["x-name"] != null) {
3318
+ instruction["x-name"] = node["x-name"];
3319
+ instruction["x-publicId"] = node["x-publicId"];
3320
+ instruction["x-systemId"] = node["x-systemId"];
3321
+ }
3322
+ result = instruction;
3323
+ } else {
3324
+ throw new Error(`Not implemented yet: ${node.type}`);
3325
+ }
3326
+ result.startIndex = node.startIndex;
3327
+ result.endIndex = node.endIndex;
3328
+ if (node.sourceCodeLocation != null) {
3329
+ result.sourceCodeLocation = node.sourceCodeLocation;
3330
+ }
3331
+ return result;
3332
+ }
3333
+ function cloneChildren(childs) {
3334
+ const children = childs.map((child) => cloneNode(child, true));
3335
+ for (let i = 1; i < children.length; i++) {
3336
+ children[i].prev = children[i - 1];
3337
+ children[i - 1].next = children[i];
3338
+ }
3339
+ return children;
3340
+ }
3341
+
3342
+ // node_modules/.pnpm/domhandler@5.0.3/node_modules/domhandler/lib/esm/index.js
3343
+ var defaultOpts = {
3344
+ withStartIndices: false,
3345
+ withEndIndices: false,
3346
+ xmlMode: false
3347
+ };
3348
+ var DomHandler = class {
3349
+ /**
3350
+ * @param callback Called once parsing has completed.
3351
+ * @param options Settings for the handler.
3352
+ * @param elementCB Callback whenever a tag is closed.
3353
+ */
3354
+ constructor(callback, options, elementCB) {
3355
+ this.dom = [];
3356
+ this.root = new Document(this.dom);
3357
+ this.done = false;
3358
+ this.tagStack = [this.root];
3359
+ this.lastNode = null;
3360
+ this.parser = null;
3361
+ if (typeof options === "function") {
3362
+ elementCB = options;
3363
+ options = defaultOpts;
3364
+ }
3365
+ if (typeof callback === "object") {
3366
+ options = callback;
3367
+ callback = void 0;
3368
+ }
3369
+ this.callback = callback !== null && callback !== void 0 ? callback : null;
3370
+ this.options = options !== null && options !== void 0 ? options : defaultOpts;
3371
+ this.elementCB = elementCB !== null && elementCB !== void 0 ? elementCB : null;
3372
+ }
3373
+ onparserinit(parser) {
3374
+ this.parser = parser;
3375
+ }
3376
+ // Resets the handler back to starting state
3377
+ onreset() {
3378
+ this.dom = [];
3379
+ this.root = new Document(this.dom);
3380
+ this.done = false;
3381
+ this.tagStack = [this.root];
3382
+ this.lastNode = null;
3383
+ this.parser = null;
3384
+ }
3385
+ // Signals the handler that parsing is done
3386
+ onend() {
3387
+ if (this.done)
3388
+ return;
3389
+ this.done = true;
3390
+ this.parser = null;
3391
+ this.handleCallback(null);
3392
+ }
3393
+ onerror(error) {
3394
+ this.handleCallback(error);
3395
+ }
3396
+ onclosetag() {
3397
+ this.lastNode = null;
3398
+ const elem = this.tagStack.pop();
3399
+ if (this.options.withEndIndices) {
3400
+ elem.endIndex = this.parser.endIndex;
3401
+ }
3402
+ if (this.elementCB)
3403
+ this.elementCB(elem);
3404
+ }
3405
+ onopentag(name, attribs) {
3406
+ const type = this.options.xmlMode ? ElementType.Tag : void 0;
3407
+ const element = new Element(name, attribs, void 0, type);
3408
+ this.addNode(element);
3409
+ this.tagStack.push(element);
3410
+ }
3411
+ ontext(data) {
3412
+ const { lastNode } = this;
3413
+ if (lastNode && lastNode.type === ElementType.Text) {
3414
+ lastNode.data += data;
3415
+ if (this.options.withEndIndices) {
3416
+ lastNode.endIndex = this.parser.endIndex;
3417
+ }
3418
+ } else {
3419
+ const node = new Text2(data);
3420
+ this.addNode(node);
3421
+ this.lastNode = node;
3422
+ }
3423
+ }
3424
+ oncomment(data) {
3425
+ if (this.lastNode && this.lastNode.type === ElementType.Comment) {
3426
+ this.lastNode.data += data;
3427
+ return;
3428
+ }
3429
+ const node = new Comment2(data);
3430
+ this.addNode(node);
3431
+ this.lastNode = node;
3432
+ }
3433
+ oncommentend() {
3434
+ this.lastNode = null;
3435
+ }
3436
+ oncdatastart() {
3437
+ const text = new Text2("");
3438
+ const node = new CDATA2([text]);
3439
+ this.addNode(node);
3440
+ text.parent = node;
3441
+ this.lastNode = text;
3442
+ }
3443
+ oncdataend() {
3444
+ this.lastNode = null;
3445
+ }
3446
+ onprocessinginstruction(name, data) {
3447
+ const node = new ProcessingInstruction(name, data);
3448
+ this.addNode(node);
3449
+ }
3450
+ handleCallback(error) {
3451
+ if (typeof this.callback === "function") {
3452
+ this.callback(error, this.dom);
3453
+ } else if (error) {
3454
+ throw error;
3455
+ }
3456
+ }
3457
+ addNode(node) {
3458
+ const parent = this.tagStack[this.tagStack.length - 1];
3459
+ const previousSibling = parent.children[parent.children.length - 1];
3460
+ if (this.options.withStartIndices) {
3461
+ node.startIndex = this.parser.startIndex;
3462
+ }
3463
+ if (this.options.withEndIndices) {
3464
+ node.endIndex = this.parser.endIndex;
3465
+ }
3466
+ parent.children.push(node);
3467
+ if (previousSibling) {
3468
+ node.prev = previousSibling;
3469
+ previousSibling.next = node;
3470
+ }
3471
+ node.parent = parent;
3472
+ this.lastNode = null;
3473
+ }
3474
+ };
3475
+
3476
+ // node_modules/.pnpm/entities@4.5.0/node_modules/entities/lib/esm/generated/decode-data-html.js
3477
+ var decode_data_html_default = new Uint16Array(
3478
+ // prettier-ignore
3479
+ '\u1D41<\xD5\u0131\u028A\u049D\u057B\u05D0\u0675\u06DE\u07A2\u07D6\u080F\u0A4A\u0A91\u0DA1\u0E6D\u0F09\u0F26\u10CA\u1228\u12E1\u1415\u149D\u14C3\u14DF\u1525\0\0\0\0\0\0\u156B\u16CD\u198D\u1C12\u1DDD\u1F7E\u2060\u21B0\u228D\u23C0\u23FB\u2442\u2824\u2912\u2D08\u2E48\u2FCE\u3016\u32BA\u3639\u37AC\u38FE\u3A28\u3A71\u3AE0\u3B2E\u0800EMabcfglmnoprstu\\bfms\x7F\x84\x8B\x90\x95\x98\xA6\xB3\xB9\xC8\xCFlig\u803B\xC6\u40C6P\u803B&\u4026cute\u803B\xC1\u40C1reve;\u4102\u0100iyx}rc\u803B\xC2\u40C2;\u4410r;\uC000\u{1D504}rave\u803B\xC0\u40C0pha;\u4391acr;\u4100d;\u6A53\u0100gp\x9D\xA1on;\u4104f;\uC000\u{1D538}plyFunction;\u6061ing\u803B\xC5\u40C5\u0100cs\xBE\xC3r;\uC000\u{1D49C}ign;\u6254ilde\u803B\xC3\u40C3ml\u803B\xC4\u40C4\u0400aceforsu\xE5\xFB\xFE\u0117\u011C\u0122\u0127\u012A\u0100cr\xEA\xF2kslash;\u6216\u0176\xF6\xF8;\u6AE7ed;\u6306y;\u4411\u0180crt\u0105\u010B\u0114ause;\u6235noullis;\u612Ca;\u4392r;\uC000\u{1D505}pf;\uC000\u{1D539}eve;\u42D8c\xF2\u0113mpeq;\u624E\u0700HOacdefhilorsu\u014D\u0151\u0156\u0180\u019E\u01A2\u01B5\u01B7\u01BA\u01DC\u0215\u0273\u0278\u027Ecy;\u4427PY\u803B\xA9\u40A9\u0180cpy\u015D\u0162\u017Aute;\u4106\u0100;i\u0167\u0168\u62D2talDifferentialD;\u6145leys;\u612D\u0200aeio\u0189\u018E\u0194\u0198ron;\u410Cdil\u803B\xC7\u40C7rc;\u4108nint;\u6230ot;\u410A\u0100dn\u01A7\u01ADilla;\u40B8terDot;\u40B7\xF2\u017Fi;\u43A7rcle\u0200DMPT\u01C7\u01CB\u01D1\u01D6ot;\u6299inus;\u6296lus;\u6295imes;\u6297o\u0100cs\u01E2\u01F8kwiseContourIntegral;\u6232eCurly\u0100DQ\u0203\u020FoubleQuote;\u601Duote;\u6019\u0200lnpu\u021E\u0228\u0247\u0255on\u0100;e\u0225\u0226\u6237;\u6A74\u0180git\u022F\u0236\u023Aruent;\u6261nt;\u622FourIntegral;\u622E\u0100fr\u024C\u024E;\u6102oduct;\u6210nterClockwiseContourIntegral;\u6233oss;\u6A2Fcr;\uC000\u{1D49E}p\u0100;C\u0284\u0285\u62D3ap;\u624D\u0580DJSZacefios\u02A0\u02AC\u02B0\u02B4\u02B8\u02CB\u02D7\u02E1\u02E6\u0333\u048D\u0100;o\u0179\u02A5trahd;\u6911cy;\u4402cy;\u4405cy;\u440F\u0180grs\u02BF\u02C4\u02C7ger;\u6021r;\u61A1hv;\u6AE4\u0100ay\u02D0\u02D5ron;\u410E;\u4414l\u0100;t\u02DD\u02DE\u6207a;\u4394r;\uC000\u{1D507}\u0100af\u02EB\u0327\u0100cm\u02F0\u0322ritical\u0200ADGT\u0300\u0306\u0316\u031Ccute;\u40B4o\u0174\u030B\u030D;\u42D9bleAcute;\u42DDrave;\u4060ilde;\u42DCond;\u62C4ferentialD;\u6146\u0470\u033D\0\0\0\u0342\u0354\0\u0405f;\uC000\u{1D53B}\u0180;DE\u0348\u0349\u034D\u40A8ot;\u60DCqual;\u6250ble\u0300CDLRUV\u0363\u0372\u0382\u03CF\u03E2\u03F8ontourIntegra\xEC\u0239o\u0274\u0379\0\0\u037B\xBB\u0349nArrow;\u61D3\u0100eo\u0387\u03A4ft\u0180ART\u0390\u0396\u03A1rrow;\u61D0ightArrow;\u61D4e\xE5\u02CAng\u0100LR\u03AB\u03C4eft\u0100AR\u03B3\u03B9rrow;\u67F8ightArrow;\u67FAightArrow;\u67F9ight\u0100AT\u03D8\u03DErrow;\u61D2ee;\u62A8p\u0241\u03E9\0\0\u03EFrrow;\u61D1ownArrow;\u61D5erticalBar;\u6225n\u0300ABLRTa\u0412\u042A\u0430\u045E\u047F\u037Crrow\u0180;BU\u041D\u041E\u0422\u6193ar;\u6913pArrow;\u61F5reve;\u4311eft\u02D2\u043A\0\u0446\0\u0450ightVector;\u6950eeVector;\u695Eector\u0100;B\u0459\u045A\u61BDar;\u6956ight\u01D4\u0467\0\u0471eeVector;\u695Fector\u0100;B\u047A\u047B\u61C1ar;\u6957ee\u0100;A\u0486\u0487\u62A4rrow;\u61A7\u0100ct\u0492\u0497r;\uC000\u{1D49F}rok;\u4110\u0800NTacdfglmopqstux\u04BD\u04C0\u04C4\u04CB\u04DE\u04E2\u04E7\u04EE\u04F5\u0521\u052F\u0536\u0552\u055D\u0560\u0565G;\u414AH\u803B\xD0\u40D0cute\u803B\xC9\u40C9\u0180aiy\u04D2\u04D7\u04DCron;\u411Arc\u803B\xCA\u40CA;\u442Dot;\u4116r;\uC000\u{1D508}rave\u803B\xC8\u40C8ement;\u6208\u0100ap\u04FA\u04FEcr;\u4112ty\u0253\u0506\0\0\u0512mallSquare;\u65FBerySmallSquare;\u65AB\u0100gp\u0526\u052Aon;\u4118f;\uC000\u{1D53C}silon;\u4395u\u0100ai\u053C\u0549l\u0100;T\u0542\u0543\u6A75ilde;\u6242librium;\u61CC\u0100ci\u0557\u055Ar;\u6130m;\u6A73a;\u4397ml\u803B\xCB\u40CB\u0100ip\u056A\u056Fsts;\u6203onentialE;\u6147\u0280cfios\u0585\u0588\u058D\u05B2\u05CCy;\u4424r;\uC000\u{1D509}lled\u0253\u0597\0\0\u05A3mallSquare;\u65FCerySmallSquare;\u65AA\u0370\u05BA\0\u05BF\0\0\u05C4f;\uC000\u{1D53D}All;\u6200riertrf;\u6131c\xF2\u05CB\u0600JTabcdfgorst\u05E8\u05EC\u05EF\u05FA\u0600\u0612\u0616\u061B\u061D\u0623\u066C\u0672cy;\u4403\u803B>\u403Emma\u0100;d\u05F7\u05F8\u4393;\u43DCreve;\u411E\u0180eiy\u0607\u060C\u0610dil;\u4122rc;\u411C;\u4413ot;\u4120r;\uC000\u{1D50A};\u62D9pf;\uC000\u{1D53E}eater\u0300EFGLST\u0635\u0644\u064E\u0656\u065B\u0666qual\u0100;L\u063E\u063F\u6265ess;\u62DBullEqual;\u6267reater;\u6AA2ess;\u6277lantEqual;\u6A7Eilde;\u6273cr;\uC000\u{1D4A2};\u626B\u0400Aacfiosu\u0685\u068B\u0696\u069B\u069E\u06AA\u06BE\u06CARDcy;\u442A\u0100ct\u0690\u0694ek;\u42C7;\u405Eirc;\u4124r;\u610ClbertSpace;\u610B\u01F0\u06AF\0\u06B2f;\u610DizontalLine;\u6500\u0100ct\u06C3\u06C5\xF2\u06A9rok;\u4126mp\u0144\u06D0\u06D8ownHum\xF0\u012Fqual;\u624F\u0700EJOacdfgmnostu\u06FA\u06FE\u0703\u0707\u070E\u071A\u071E\u0721\u0728\u0744\u0778\u078B\u078F\u0795cy;\u4415lig;\u4132cy;\u4401cute\u803B\xCD\u40CD\u0100iy\u0713\u0718rc\u803B\xCE\u40CE;\u4418ot;\u4130r;\u6111rave\u803B\xCC\u40CC\u0180;ap\u0720\u072F\u073F\u0100cg\u0734\u0737r;\u412AinaryI;\u6148lie\xF3\u03DD\u01F4\u0749\0\u0762\u0100;e\u074D\u074E\u622C\u0100gr\u0753\u0758ral;\u622Bsection;\u62C2isible\u0100CT\u076C\u0772omma;\u6063imes;\u6062\u0180gpt\u077F\u0783\u0788on;\u412Ef;\uC000\u{1D540}a;\u4399cr;\u6110ilde;\u4128\u01EB\u079A\0\u079Ecy;\u4406l\u803B\xCF\u40CF\u0280cfosu\u07AC\u07B7\u07BC\u07C2\u07D0\u0100iy\u07B1\u07B5rc;\u4134;\u4419r;\uC000\u{1D50D}pf;\uC000\u{1D541}\u01E3\u07C7\0\u07CCr;\uC000\u{1D4A5}rcy;\u4408kcy;\u4404\u0380HJacfos\u07E4\u07E8\u07EC\u07F1\u07FD\u0802\u0808cy;\u4425cy;\u440Cppa;\u439A\u0100ey\u07F6\u07FBdil;\u4136;\u441Ar;\uC000\u{1D50E}pf;\uC000\u{1D542}cr;\uC000\u{1D4A6}\u0580JTaceflmost\u0825\u0829\u082C\u0850\u0863\u09B3\u09B8\u09C7\u09CD\u0A37\u0A47cy;\u4409\u803B<\u403C\u0280cmnpr\u0837\u083C\u0841\u0844\u084Dute;\u4139bda;\u439Bg;\u67EAlacetrf;\u6112r;\u619E\u0180aey\u0857\u085C\u0861ron;\u413Ddil;\u413B;\u441B\u0100fs\u0868\u0970t\u0500ACDFRTUVar\u087E\u08A9\u08B1\u08E0\u08E6\u08FC\u092F\u095B\u0390\u096A\u0100nr\u0883\u088FgleBracket;\u67E8row\u0180;BR\u0899\u089A\u089E\u6190ar;\u61E4ightArrow;\u61C6eiling;\u6308o\u01F5\u08B7\0\u08C3bleBracket;\u67E6n\u01D4\u08C8\0\u08D2eeVector;\u6961ector\u0100;B\u08DB\u08DC\u61C3ar;\u6959loor;\u630Aight\u0100AV\u08EF\u08F5rrow;\u6194ector;\u694E\u0100er\u0901\u0917e\u0180;AV\u0909\u090A\u0910\u62A3rrow;\u61A4ector;\u695Aiangle\u0180;BE\u0924\u0925\u0929\u62B2ar;\u69CFqual;\u62B4p\u0180DTV\u0937\u0942\u094CownVector;\u6951eeVector;\u6960ector\u0100;B\u0956\u0957\u61BFar;\u6958ector\u0100;B\u0965\u0966\u61BCar;\u6952ight\xE1\u039Cs\u0300EFGLST\u097E\u098B\u0995\u099D\u09A2\u09ADqualGreater;\u62DAullEqual;\u6266reater;\u6276ess;\u6AA1lantEqual;\u6A7Dilde;\u6272r;\uC000\u{1D50F}\u0100;e\u09BD\u09BE\u62D8ftarrow;\u61DAidot;\u413F\u0180npw\u09D4\u0A16\u0A1Bg\u0200LRlr\u09DE\u09F7\u0A02\u0A10eft\u0100AR\u09E6\u09ECrrow;\u67F5ightArrow;\u67F7ightArrow;\u67F6eft\u0100ar\u03B3\u0A0Aight\xE1\u03BFight\xE1\u03CAf;\uC000\u{1D543}er\u0100LR\u0A22\u0A2CeftArrow;\u6199ightArrow;\u6198\u0180cht\u0A3E\u0A40\u0A42\xF2\u084C;\u61B0rok;\u4141;\u626A\u0400acefiosu\u0A5A\u0A5D\u0A60\u0A77\u0A7C\u0A85\u0A8B\u0A8Ep;\u6905y;\u441C\u0100dl\u0A65\u0A6FiumSpace;\u605Flintrf;\u6133r;\uC000\u{1D510}nusPlus;\u6213pf;\uC000\u{1D544}c\xF2\u0A76;\u439C\u0480Jacefostu\u0AA3\u0AA7\u0AAD\u0AC0\u0B14\u0B19\u0D91\u0D97\u0D9Ecy;\u440Acute;\u4143\u0180aey\u0AB4\u0AB9\u0ABEron;\u4147dil;\u4145;\u441D\u0180gsw\u0AC7\u0AF0\u0B0Eative\u0180MTV\u0AD3\u0ADF\u0AE8ediumSpace;\u600Bhi\u0100cn\u0AE6\u0AD8\xEB\u0AD9eryThi\xEE\u0AD9ted\u0100GL\u0AF8\u0B06reaterGreate\xF2\u0673essLes\xF3\u0A48Line;\u400Ar;\uC000\u{1D511}\u0200Bnpt\u0B22\u0B28\u0B37\u0B3Areak;\u6060BreakingSpace;\u40A0f;\u6115\u0680;CDEGHLNPRSTV\u0B55\u0B56\u0B6A\u0B7C\u0BA1\u0BEB\u0C04\u0C5E\u0C84\u0CA6\u0CD8\u0D61\u0D85\u6AEC\u0100ou\u0B5B\u0B64ngruent;\u6262pCap;\u626DoubleVerticalBar;\u6226\u0180lqx\u0B83\u0B8A\u0B9Bement;\u6209ual\u0100;T\u0B92\u0B93\u6260ilde;\uC000\u2242\u0338ists;\u6204reater\u0380;EFGLST\u0BB6\u0BB7\u0BBD\u0BC9\u0BD3\u0BD8\u0BE5\u626Fqual;\u6271ullEqual;\uC000\u2267\u0338reater;\uC000\u226B\u0338ess;\u6279lantEqual;\uC000\u2A7E\u0338ilde;\u6275ump\u0144\u0BF2\u0BFDownHump;\uC000\u224E\u0338qual;\uC000\u224F\u0338e\u0100fs\u0C0A\u0C27tTriangle\u0180;BE\u0C1A\u0C1B\u0C21\u62EAar;\uC000\u29CF\u0338qual;\u62ECs\u0300;EGLST\u0C35\u0C36\u0C3C\u0C44\u0C4B\u0C58\u626Equal;\u6270reater;\u6278ess;\uC000\u226A\u0338lantEqual;\uC000\u2A7D\u0338ilde;\u6274ested\u0100GL\u0C68\u0C79reaterGreater;\uC000\u2AA2\u0338essLess;\uC000\u2AA1\u0338recedes\u0180;ES\u0C92\u0C93\u0C9B\u6280qual;\uC000\u2AAF\u0338lantEqual;\u62E0\u0100ei\u0CAB\u0CB9verseElement;\u620CghtTriangle\u0180;BE\u0CCB\u0CCC\u0CD2\u62EBar;\uC000\u29D0\u0338qual;\u62ED\u0100qu\u0CDD\u0D0CuareSu\u0100bp\u0CE8\u0CF9set\u0100;E\u0CF0\u0CF3\uC000\u228F\u0338qual;\u62E2erset\u0100;E\u0D03\u0D06\uC000\u2290\u0338qual;\u62E3\u0180bcp\u0D13\u0D24\u0D4Eset\u0100;E\u0D1B\u0D1E\uC000\u2282\u20D2qual;\u6288ceeds\u0200;EST\u0D32\u0D33\u0D3B\u0D46\u6281qual;\uC000\u2AB0\u0338lantEqual;\u62E1ilde;\uC000\u227F\u0338erset\u0100;E\u0D58\u0D5B\uC000\u2283\u20D2qual;\u6289ilde\u0200;EFT\u0D6E\u0D6F\u0D75\u0D7F\u6241qual;\u6244ullEqual;\u6247ilde;\u6249erticalBar;\u6224cr;\uC000\u{1D4A9}ilde\u803B\xD1\u40D1;\u439D\u0700Eacdfgmoprstuv\u0DBD\u0DC2\u0DC9\u0DD5\u0DDB\u0DE0\u0DE7\u0DFC\u0E02\u0E20\u0E22\u0E32\u0E3F\u0E44lig;\u4152cute\u803B\xD3\u40D3\u0100iy\u0DCE\u0DD3rc\u803B\xD4\u40D4;\u441Eblac;\u4150r;\uC000\u{1D512}rave\u803B\xD2\u40D2\u0180aei\u0DEE\u0DF2\u0DF6cr;\u414Cga;\u43A9cron;\u439Fpf;\uC000\u{1D546}enCurly\u0100DQ\u0E0E\u0E1AoubleQuote;\u601Cuote;\u6018;\u6A54\u0100cl\u0E27\u0E2Cr;\uC000\u{1D4AA}ash\u803B\xD8\u40D8i\u016C\u0E37\u0E3Cde\u803B\xD5\u40D5es;\u6A37ml\u803B\xD6\u40D6er\u0100BP\u0E4B\u0E60\u0100ar\u0E50\u0E53r;\u603Eac\u0100ek\u0E5A\u0E5C;\u63DEet;\u63B4arenthesis;\u63DC\u0480acfhilors\u0E7F\u0E87\u0E8A\u0E8F\u0E92\u0E94\u0E9D\u0EB0\u0EFCrtialD;\u6202y;\u441Fr;\uC000\u{1D513}i;\u43A6;\u43A0usMinus;\u40B1\u0100ip\u0EA2\u0EADncareplan\xE5\u069Df;\u6119\u0200;eio\u0EB9\u0EBA\u0EE0\u0EE4\u6ABBcedes\u0200;EST\u0EC8\u0EC9\u0ECF\u0EDA\u627Aqual;\u6AAFlantEqual;\u627Cilde;\u627Eme;\u6033\u0100dp\u0EE9\u0EEEuct;\u620Fortion\u0100;a\u0225\u0EF9l;\u621D\u0100ci\u0F01\u0F06r;\uC000\u{1D4AB};\u43A8\u0200Ufos\u0F11\u0F16\u0F1B\u0F1FOT\u803B"\u4022r;\uC000\u{1D514}pf;\u611Acr;\uC000\u{1D4AC}\u0600BEacefhiorsu\u0F3E\u0F43\u0F47\u0F60\u0F73\u0FA7\u0FAA\u0FAD\u1096\u10A9\u10B4\u10BEarr;\u6910G\u803B\xAE\u40AE\u0180cnr\u0F4E\u0F53\u0F56ute;\u4154g;\u67EBr\u0100;t\u0F5C\u0F5D\u61A0l;\u6916\u0180aey\u0F67\u0F6C\u0F71ron;\u4158dil;\u4156;\u4420\u0100;v\u0F78\u0F79\u611Cerse\u0100EU\u0F82\u0F99\u0100lq\u0F87\u0F8Eement;\u620Builibrium;\u61CBpEquilibrium;\u696Fr\xBB\u0F79o;\u43A1ght\u0400ACDFTUVa\u0FC1\u0FEB\u0FF3\u1022\u1028\u105B\u1087\u03D8\u0100nr\u0FC6\u0FD2gleBracket;\u67E9row\u0180;BL\u0FDC\u0FDD\u0FE1\u6192ar;\u61E5eftArrow;\u61C4eiling;\u6309o\u01F5\u0FF9\0\u1005bleBracket;\u67E7n\u01D4\u100A\0\u1014eeVector;\u695Dector\u0100;B\u101D\u101E\u61C2ar;\u6955loor;\u630B\u0100er\u102D\u1043e\u0180;AV\u1035\u1036\u103C\u62A2rrow;\u61A6ector;\u695Biangle\u0180;BE\u1050\u1051\u1055\u62B3ar;\u69D0qual;\u62B5p\u0180DTV\u1063\u106E\u1078ownVector;\u694FeeVector;\u695Cector\u0100;B\u1082\u1083\u61BEar;\u6954ector\u0100;B\u1091\u1092\u61C0ar;\u6953\u0100pu\u109B\u109Ef;\u611DndImplies;\u6970ightarrow;\u61DB\u0100ch\u10B9\u10BCr;\u611B;\u61B1leDelayed;\u69F4\u0680HOacfhimoqstu\u10E4\u10F1\u10F7\u10FD\u1119\u111E\u1151\u1156\u1161\u1167\u11B5\u11BB\u11BF\u0100Cc\u10E9\u10EEHcy;\u4429y;\u4428FTcy;\u442Ccute;\u415A\u0280;aeiy\u1108\u1109\u110E\u1113\u1117\u6ABCron;\u4160dil;\u415Erc;\u415C;\u4421r;\uC000\u{1D516}ort\u0200DLRU\u112A\u1134\u113E\u1149ownArrow\xBB\u041EeftArrow\xBB\u089AightArrow\xBB\u0FDDpArrow;\u6191gma;\u43A3allCircle;\u6218pf;\uC000\u{1D54A}\u0272\u116D\0\0\u1170t;\u621Aare\u0200;ISU\u117B\u117C\u1189\u11AF\u65A1ntersection;\u6293u\u0100bp\u118F\u119Eset\u0100;E\u1197\u1198\u628Fqual;\u6291erset\u0100;E\u11A8\u11A9\u6290qual;\u6292nion;\u6294cr;\uC000\u{1D4AE}ar;\u62C6\u0200bcmp\u11C8\u11DB\u1209\u120B\u0100;s\u11CD\u11CE\u62D0et\u0100;E\u11CD\u11D5qual;\u6286\u0100ch\u11E0\u1205eeds\u0200;EST\u11ED\u11EE\u11F4\u11FF\u627Bqual;\u6AB0lantEqual;\u627Dilde;\u627FTh\xE1\u0F8C;\u6211\u0180;es\u1212\u1213\u1223\u62D1rset\u0100;E\u121C\u121D\u6283qual;\u6287et\xBB\u1213\u0580HRSacfhiors\u123E\u1244\u1249\u1255\u125E\u1271\u1276\u129F\u12C2\u12C8\u12D1ORN\u803B\xDE\u40DEADE;\u6122\u0100Hc\u124E\u1252cy;\u440By;\u4426\u0100bu\u125A\u125C;\u4009;\u43A4\u0180aey\u1265\u126A\u126Fron;\u4164dil;\u4162;\u4422r;\uC000\u{1D517}\u0100ei\u127B\u1289\u01F2\u1280\0\u1287efore;\u6234a;\u4398\u0100cn\u128E\u1298kSpace;\uC000\u205F\u200ASpace;\u6009lde\u0200;EFT\u12AB\u12AC\u12B2\u12BC\u623Cqual;\u6243ullEqual;\u6245ilde;\u6248pf;\uC000\u{1D54B}ipleDot;\u60DB\u0100ct\u12D6\u12DBr;\uC000\u{1D4AF}rok;\u4166\u0AE1\u12F7\u130E\u131A\u1326\0\u132C\u1331\0\0\0\0\0\u1338\u133D\u1377\u1385\0\u13FF\u1404\u140A\u1410\u0100cr\u12FB\u1301ute\u803B\xDA\u40DAr\u0100;o\u1307\u1308\u619Fcir;\u6949r\u01E3\u1313\0\u1316y;\u440Eve;\u416C\u0100iy\u131E\u1323rc\u803B\xDB\u40DB;\u4423blac;\u4170r;\uC000\u{1D518}rave\u803B\xD9\u40D9acr;\u416A\u0100di\u1341\u1369er\u0100BP\u1348\u135D\u0100ar\u134D\u1350r;\u405Fac\u0100ek\u1357\u1359;\u63DFet;\u63B5arenthesis;\u63DDon\u0100;P\u1370\u1371\u62C3lus;\u628E\u0100gp\u137B\u137Fon;\u4172f;\uC000\u{1D54C}\u0400ADETadps\u1395\u13AE\u13B8\u13C4\u03E8\u13D2\u13D7\u13F3rrow\u0180;BD\u1150\u13A0\u13A4ar;\u6912ownArrow;\u61C5ownArrow;\u6195quilibrium;\u696Eee\u0100;A\u13CB\u13CC\u62A5rrow;\u61A5own\xE1\u03F3er\u0100LR\u13DE\u13E8eftArrow;\u6196ightArrow;\u6197i\u0100;l\u13F9\u13FA\u43D2on;\u43A5ing;\u416Ecr;\uC000\u{1D4B0}ilde;\u4168ml\u803B\xDC\u40DC\u0480Dbcdefosv\u1427\u142C\u1430\u1433\u143E\u1485\u148A\u1490\u1496ash;\u62ABar;\u6AEBy;\u4412ash\u0100;l\u143B\u143C\u62A9;\u6AE6\u0100er\u1443\u1445;\u62C1\u0180bty\u144C\u1450\u147Aar;\u6016\u0100;i\u144F\u1455cal\u0200BLST\u1461\u1465\u146A\u1474ar;\u6223ine;\u407Ceparator;\u6758ilde;\u6240ThinSpace;\u600Ar;\uC000\u{1D519}pf;\uC000\u{1D54D}cr;\uC000\u{1D4B1}dash;\u62AA\u0280cefos\u14A7\u14AC\u14B1\u14B6\u14BCirc;\u4174dge;\u62C0r;\uC000\u{1D51A}pf;\uC000\u{1D54E}cr;\uC000\u{1D4B2}\u0200fios\u14CB\u14D0\u14D2\u14D8r;\uC000\u{1D51B};\u439Epf;\uC000\u{1D54F}cr;\uC000\u{1D4B3}\u0480AIUacfosu\u14F1\u14F5\u14F9\u14FD\u1504\u150F\u1514\u151A\u1520cy;\u442Fcy;\u4407cy;\u442Ecute\u803B\xDD\u40DD\u0100iy\u1509\u150Drc;\u4176;\u442Br;\uC000\u{1D51C}pf;\uC000\u{1D550}cr;\uC000\u{1D4B4}ml;\u4178\u0400Hacdefos\u1535\u1539\u153F\u154B\u154F\u155D\u1560\u1564cy;\u4416cute;\u4179\u0100ay\u1544\u1549ron;\u417D;\u4417ot;\u417B\u01F2\u1554\0\u155BoWidt\xE8\u0AD9a;\u4396r;\u6128pf;\u6124cr;\uC000\u{1D4B5}\u0BE1\u1583\u158A\u1590\0\u15B0\u15B6\u15BF\0\0\0\0\u15C6\u15DB\u15EB\u165F\u166D\0\u1695\u169B\u16B2\u16B9\0\u16BEcute\u803B\xE1\u40E1reve;\u4103\u0300;Ediuy\u159C\u159D\u15A1\u15A3\u15A8\u15AD\u623E;\uC000\u223E\u0333;\u623Frc\u803B\xE2\u40E2te\u80BB\xB4\u0306;\u4430lig\u803B\xE6\u40E6\u0100;r\xB2\u15BA;\uC000\u{1D51E}rave\u803B\xE0\u40E0\u0100ep\u15CA\u15D6\u0100fp\u15CF\u15D4sym;\u6135\xE8\u15D3ha;\u43B1\u0100ap\u15DFc\u0100cl\u15E4\u15E7r;\u4101g;\u6A3F\u0264\u15F0\0\0\u160A\u0280;adsv\u15FA\u15FB\u15FF\u1601\u1607\u6227nd;\u6A55;\u6A5Clope;\u6A58;\u6A5A\u0380;elmrsz\u1618\u1619\u161B\u161E\u163F\u164F\u1659\u6220;\u69A4e\xBB\u1619sd\u0100;a\u1625\u1626\u6221\u0461\u1630\u1632\u1634\u1636\u1638\u163A\u163C\u163E;\u69A8;\u69A9;\u69AA;\u69AB;\u69AC;\u69AD;\u69AE;\u69AFt\u0100;v\u1645\u1646\u621Fb\u0100;d\u164C\u164D\u62BE;\u699D\u0100pt\u1654\u1657h;\u6222\xBB\xB9arr;\u637C\u0100gp\u1663\u1667on;\u4105f;\uC000\u{1D552}\u0380;Eaeiop\u12C1\u167B\u167D\u1682\u1684\u1687\u168A;\u6A70cir;\u6A6F;\u624Ad;\u624Bs;\u4027rox\u0100;e\u12C1\u1692\xF1\u1683ing\u803B\xE5\u40E5\u0180cty\u16A1\u16A6\u16A8r;\uC000\u{1D4B6};\u402Amp\u0100;e\u12C1\u16AF\xF1\u0288ilde\u803B\xE3\u40E3ml\u803B\xE4\u40E4\u0100ci\u16C2\u16C8onin\xF4\u0272nt;\u6A11\u0800Nabcdefiklnoprsu\u16ED\u16F1\u1730\u173C\u1743\u1748\u1778\u177D\u17E0\u17E6\u1839\u1850\u170D\u193D\u1948\u1970ot;\u6AED\u0100cr\u16F6\u171Ek\u0200ceps\u1700\u1705\u170D\u1713ong;\u624Cpsilon;\u43F6rime;\u6035im\u0100;e\u171A\u171B\u623Dq;\u62CD\u0176\u1722\u1726ee;\u62BDed\u0100;g\u172C\u172D\u6305e\xBB\u172Drk\u0100;t\u135C\u1737brk;\u63B6\u0100oy\u1701\u1741;\u4431quo;\u601E\u0280cmprt\u1753\u175B\u1761\u1764\u1768aus\u0100;e\u010A\u0109ptyv;\u69B0s\xE9\u170Cno\xF5\u0113\u0180ahw\u176F\u1771\u1773;\u43B2;\u6136een;\u626Cr;\uC000\u{1D51F}g\u0380costuvw\u178D\u179D\u17B3\u17C1\u17D5\u17DB\u17DE\u0180aiu\u1794\u1796\u179A\xF0\u0760rc;\u65EFp\xBB\u1371\u0180dpt\u17A4\u17A8\u17ADot;\u6A00lus;\u6A01imes;\u6A02\u0271\u17B9\0\0\u17BEcup;\u6A06ar;\u6605riangle\u0100du\u17CD\u17D2own;\u65BDp;\u65B3plus;\u6A04e\xE5\u1444\xE5\u14ADarow;\u690D\u0180ako\u17ED\u1826\u1835\u0100cn\u17F2\u1823k\u0180lst\u17FA\u05AB\u1802ozenge;\u69EBriangle\u0200;dlr\u1812\u1813\u1818\u181D\u65B4own;\u65BEeft;\u65C2ight;\u65B8k;\u6423\u01B1\u182B\0\u1833\u01B2\u182F\0\u1831;\u6592;\u65914;\u6593ck;\u6588\u0100eo\u183E\u184D\u0100;q\u1843\u1846\uC000=\u20E5uiv;\uC000\u2261\u20E5t;\u6310\u0200ptwx\u1859\u185E\u1867\u186Cf;\uC000\u{1D553}\u0100;t\u13CB\u1863om\xBB\u13CCtie;\u62C8\u0600DHUVbdhmptuv\u1885\u1896\u18AA\u18BB\u18D7\u18DB\u18EC\u18FF\u1905\u190A\u1910\u1921\u0200LRlr\u188E\u1890\u1892\u1894;\u6557;\u6554;\u6556;\u6553\u0280;DUdu\u18A1\u18A2\u18A4\u18A6\u18A8\u6550;\u6566;\u6569;\u6564;\u6567\u0200LRlr\u18B3\u18B5\u18B7\u18B9;\u655D;\u655A;\u655C;\u6559\u0380;HLRhlr\u18CA\u18CB\u18CD\u18CF\u18D1\u18D3\u18D5\u6551;\u656C;\u6563;\u6560;\u656B;\u6562;\u655Fox;\u69C9\u0200LRlr\u18E4\u18E6\u18E8\u18EA;\u6555;\u6552;\u6510;\u650C\u0280;DUdu\u06BD\u18F7\u18F9\u18FB\u18FD;\u6565;\u6568;\u652C;\u6534inus;\u629Flus;\u629Eimes;\u62A0\u0200LRlr\u1919\u191B\u191D\u191F;\u655B;\u6558;\u6518;\u6514\u0380;HLRhlr\u1930\u1931\u1933\u1935\u1937\u1939\u193B\u6502;\u656A;\u6561;\u655E;\u653C;\u6524;\u651C\u0100ev\u0123\u1942bar\u803B\xA6\u40A6\u0200ceio\u1951\u1956\u195A\u1960r;\uC000\u{1D4B7}mi;\u604Fm\u0100;e\u171A\u171Cl\u0180;bh\u1968\u1969\u196B\u405C;\u69C5sub;\u67C8\u016C\u1974\u197El\u0100;e\u1979\u197A\u6022t\xBB\u197Ap\u0180;Ee\u012F\u1985\u1987;\u6AAE\u0100;q\u06DC\u06DB\u0CE1\u19A7\0\u19E8\u1A11\u1A15\u1A32\0\u1A37\u1A50\0\0\u1AB4\0\0\u1AC1\0\0\u1B21\u1B2E\u1B4D\u1B52\0\u1BFD\0\u1C0C\u0180cpr\u19AD\u19B2\u19DDute;\u4107\u0300;abcds\u19BF\u19C0\u19C4\u19CA\u19D5\u19D9\u6229nd;\u6A44rcup;\u6A49\u0100au\u19CF\u19D2p;\u6A4Bp;\u6A47ot;\u6A40;\uC000\u2229\uFE00\u0100eo\u19E2\u19E5t;\u6041\xEE\u0693\u0200aeiu\u19F0\u19FB\u1A01\u1A05\u01F0\u19F5\0\u19F8s;\u6A4Don;\u410Ddil\u803B\xE7\u40E7rc;\u4109ps\u0100;s\u1A0C\u1A0D\u6A4Cm;\u6A50ot;\u410B\u0180dmn\u1A1B\u1A20\u1A26il\u80BB\xB8\u01ADptyv;\u69B2t\u8100\xA2;e\u1A2D\u1A2E\u40A2r\xE4\u01B2r;\uC000\u{1D520}\u0180cei\u1A3D\u1A40\u1A4Dy;\u4447ck\u0100;m\u1A47\u1A48\u6713ark\xBB\u1A48;\u43C7r\u0380;Ecefms\u1A5F\u1A60\u1A62\u1A6B\u1AA4\u1AAA\u1AAE\u65CB;\u69C3\u0180;el\u1A69\u1A6A\u1A6D\u42C6q;\u6257e\u0261\u1A74\0\0\u1A88rrow\u0100lr\u1A7C\u1A81eft;\u61BAight;\u61BB\u0280RSacd\u1A92\u1A94\u1A96\u1A9A\u1A9F\xBB\u0F47;\u64C8st;\u629Birc;\u629Aash;\u629Dnint;\u6A10id;\u6AEFcir;\u69C2ubs\u0100;u\u1ABB\u1ABC\u6663it\xBB\u1ABC\u02EC\u1AC7\u1AD4\u1AFA\0\u1B0Aon\u0100;e\u1ACD\u1ACE\u403A\u0100;q\xC7\xC6\u026D\u1AD9\0\0\u1AE2a\u0100;t\u1ADE\u1ADF\u402C;\u4040\u0180;fl\u1AE8\u1AE9\u1AEB\u6201\xEE\u1160e\u0100mx\u1AF1\u1AF6ent\xBB\u1AE9e\xF3\u024D\u01E7\u1AFE\0\u1B07\u0100;d\u12BB\u1B02ot;\u6A6Dn\xF4\u0246\u0180fry\u1B10\u1B14\u1B17;\uC000\u{1D554}o\xE4\u0254\u8100\xA9;s\u0155\u1B1Dr;\u6117\u0100ao\u1B25\u1B29rr;\u61B5ss;\u6717\u0100cu\u1B32\u1B37r;\uC000\u{1D4B8}\u0100bp\u1B3C\u1B44\u0100;e\u1B41\u1B42\u6ACF;\u6AD1\u0100;e\u1B49\u1B4A\u6AD0;\u6AD2dot;\u62EF\u0380delprvw\u1B60\u1B6C\u1B77\u1B82\u1BAC\u1BD4\u1BF9arr\u0100lr\u1B68\u1B6A;\u6938;\u6935\u0270\u1B72\0\0\u1B75r;\u62DEc;\u62DFarr\u0100;p\u1B7F\u1B80\u61B6;\u693D\u0300;bcdos\u1B8F\u1B90\u1B96\u1BA1\u1BA5\u1BA8\u622Arcap;\u6A48\u0100au\u1B9B\u1B9Ep;\u6A46p;\u6A4Aot;\u628Dr;\u6A45;\uC000\u222A\uFE00\u0200alrv\u1BB5\u1BBF\u1BDE\u1BE3rr\u0100;m\u1BBC\u1BBD\u61B7;\u693Cy\u0180evw\u1BC7\u1BD4\u1BD8q\u0270\u1BCE\0\0\u1BD2re\xE3\u1B73u\xE3\u1B75ee;\u62CEedge;\u62CFen\u803B\xA4\u40A4earrow\u0100lr\u1BEE\u1BF3eft\xBB\u1B80ight\xBB\u1BBDe\xE4\u1BDD\u0100ci\u1C01\u1C07onin\xF4\u01F7nt;\u6231lcty;\u632D\u0980AHabcdefhijlorstuwz\u1C38\u1C3B\u1C3F\u1C5D\u1C69\u1C75\u1C8A\u1C9E\u1CAC\u1CB7\u1CFB\u1CFF\u1D0D\u1D7B\u1D91\u1DAB\u1DBB\u1DC6\u1DCDr\xF2\u0381ar;\u6965\u0200glrs\u1C48\u1C4D\u1C52\u1C54ger;\u6020eth;\u6138\xF2\u1133h\u0100;v\u1C5A\u1C5B\u6010\xBB\u090A\u016B\u1C61\u1C67arow;\u690Fa\xE3\u0315\u0100ay\u1C6E\u1C73ron;\u410F;\u4434\u0180;ao\u0332\u1C7C\u1C84\u0100gr\u02BF\u1C81r;\u61CAtseq;\u6A77\u0180glm\u1C91\u1C94\u1C98\u803B\xB0\u40B0ta;\u43B4ptyv;\u69B1\u0100ir\u1CA3\u1CA8sht;\u697F;\uC000\u{1D521}ar\u0100lr\u1CB3\u1CB5\xBB\u08DC\xBB\u101E\u0280aegsv\u1CC2\u0378\u1CD6\u1CDC\u1CE0m\u0180;os\u0326\u1CCA\u1CD4nd\u0100;s\u0326\u1CD1uit;\u6666amma;\u43DDin;\u62F2\u0180;io\u1CE7\u1CE8\u1CF8\u40F7de\u8100\xF7;o\u1CE7\u1CF0ntimes;\u62C7n\xF8\u1CF7cy;\u4452c\u026F\u1D06\0\0\u1D0Arn;\u631Eop;\u630D\u0280lptuw\u1D18\u1D1D\u1D22\u1D49\u1D55lar;\u4024f;\uC000\u{1D555}\u0280;emps\u030B\u1D2D\u1D37\u1D3D\u1D42q\u0100;d\u0352\u1D33ot;\u6251inus;\u6238lus;\u6214quare;\u62A1blebarwedg\xE5\xFAn\u0180adh\u112E\u1D5D\u1D67ownarrow\xF3\u1C83arpoon\u0100lr\u1D72\u1D76ef\xF4\u1CB4igh\xF4\u1CB6\u0162\u1D7F\u1D85karo\xF7\u0F42\u026F\u1D8A\0\0\u1D8Ern;\u631Fop;\u630C\u0180cot\u1D98\u1DA3\u1DA6\u0100ry\u1D9D\u1DA1;\uC000\u{1D4B9};\u4455l;\u69F6rok;\u4111\u0100dr\u1DB0\u1DB4ot;\u62F1i\u0100;f\u1DBA\u1816\u65BF\u0100ah\u1DC0\u1DC3r\xF2\u0429a\xF2\u0FA6angle;\u69A6\u0100ci\u1DD2\u1DD5y;\u445Fgrarr;\u67FF\u0900Dacdefglmnopqrstux\u1E01\u1E09\u1E19\u1E38\u0578\u1E3C\u1E49\u1E61\u1E7E\u1EA5\u1EAF\u1EBD\u1EE1\u1F2A\u1F37\u1F44\u1F4E\u1F5A\u0100Do\u1E06\u1D34o\xF4\u1C89\u0100cs\u1E0E\u1E14ute\u803B\xE9\u40E9ter;\u6A6E\u0200aioy\u1E22\u1E27\u1E31\u1E36ron;\u411Br\u0100;c\u1E2D\u1E2E\u6256\u803B\xEA\u40EAlon;\u6255;\u444Dot;\u4117\u0100Dr\u1E41\u1E45ot;\u6252;\uC000\u{1D522}\u0180;rs\u1E50\u1E51\u1E57\u6A9Aave\u803B\xE8\u40E8\u0100;d\u1E5C\u1E5D\u6A96ot;\u6A98\u0200;ils\u1E6A\u1E6B\u1E72\u1E74\u6A99nters;\u63E7;\u6113\u0100;d\u1E79\u1E7A\u6A95ot;\u6A97\u0180aps\u1E85\u1E89\u1E97cr;\u4113ty\u0180;sv\u1E92\u1E93\u1E95\u6205et\xBB\u1E93p\u01001;\u1E9D\u1EA4\u0133\u1EA1\u1EA3;\u6004;\u6005\u6003\u0100gs\u1EAA\u1EAC;\u414Bp;\u6002\u0100gp\u1EB4\u1EB8on;\u4119f;\uC000\u{1D556}\u0180als\u1EC4\u1ECE\u1ED2r\u0100;s\u1ECA\u1ECB\u62D5l;\u69E3us;\u6A71i\u0180;lv\u1EDA\u1EDB\u1EDF\u43B5on\xBB\u1EDB;\u43F5\u0200csuv\u1EEA\u1EF3\u1F0B\u1F23\u0100io\u1EEF\u1E31rc\xBB\u1E2E\u0269\u1EF9\0\0\u1EFB\xED\u0548ant\u0100gl\u1F02\u1F06tr\xBB\u1E5Dess\xBB\u1E7A\u0180aei\u1F12\u1F16\u1F1Als;\u403Dst;\u625Fv\u0100;D\u0235\u1F20D;\u6A78parsl;\u69E5\u0100Da\u1F2F\u1F33ot;\u6253rr;\u6971\u0180cdi\u1F3E\u1F41\u1EF8r;\u612Fo\xF4\u0352\u0100ah\u1F49\u1F4B;\u43B7\u803B\xF0\u40F0\u0100mr\u1F53\u1F57l\u803B\xEB\u40EBo;\u60AC\u0180cip\u1F61\u1F64\u1F67l;\u4021s\xF4\u056E\u0100eo\u1F6C\u1F74ctatio\xEE\u0559nential\xE5\u0579\u09E1\u1F92\0\u1F9E\0\u1FA1\u1FA7\0\0\u1FC6\u1FCC\0\u1FD3\0\u1FE6\u1FEA\u2000\0\u2008\u205Allingdotse\xF1\u1E44y;\u4444male;\u6640\u0180ilr\u1FAD\u1FB3\u1FC1lig;\u8000\uFB03\u0269\u1FB9\0\0\u1FBDg;\u8000\uFB00ig;\u8000\uFB04;\uC000\u{1D523}lig;\u8000\uFB01lig;\uC000fj\u0180alt\u1FD9\u1FDC\u1FE1t;\u666Dig;\u8000\uFB02ns;\u65B1of;\u4192\u01F0\u1FEE\0\u1FF3f;\uC000\u{1D557}\u0100ak\u05BF\u1FF7\u0100;v\u1FFC\u1FFD\u62D4;\u6AD9artint;\u6A0D\u0100ao\u200C\u2055\u0100cs\u2011\u2052\u03B1\u201A\u2030\u2038\u2045\u2048\0\u2050\u03B2\u2022\u2025\u2027\u202A\u202C\0\u202E\u803B\xBD\u40BD;\u6153\u803B\xBC\u40BC;\u6155;\u6159;\u615B\u01B3\u2034\0\u2036;\u6154;\u6156\u02B4\u203E\u2041\0\0\u2043\u803B\xBE\u40BE;\u6157;\u615C5;\u6158\u01B6\u204C\0\u204E;\u615A;\u615D8;\u615El;\u6044wn;\u6322cr;\uC000\u{1D4BB}\u0880Eabcdefgijlnorstv\u2082\u2089\u209F\u20A5\u20B0\u20B4\u20F0\u20F5\u20FA\u20FF\u2103\u2112\u2138\u0317\u213E\u2152\u219E\u0100;l\u064D\u2087;\u6A8C\u0180cmp\u2090\u2095\u209Dute;\u41F5ma\u0100;d\u209C\u1CDA\u43B3;\u6A86reve;\u411F\u0100iy\u20AA\u20AErc;\u411D;\u4433ot;\u4121\u0200;lqs\u063E\u0642\u20BD\u20C9\u0180;qs\u063E\u064C\u20C4lan\xF4\u0665\u0200;cdl\u0665\u20D2\u20D5\u20E5c;\u6AA9ot\u0100;o\u20DC\u20DD\u6A80\u0100;l\u20E2\u20E3\u6A82;\u6A84\u0100;e\u20EA\u20ED\uC000\u22DB\uFE00s;\u6A94r;\uC000\u{1D524}\u0100;g\u0673\u061Bmel;\u6137cy;\u4453\u0200;Eaj\u065A\u210C\u210E\u2110;\u6A92;\u6AA5;\u6AA4\u0200Eaes\u211B\u211D\u2129\u2134;\u6269p\u0100;p\u2123\u2124\u6A8Arox\xBB\u2124\u0100;q\u212E\u212F\u6A88\u0100;q\u212E\u211Bim;\u62E7pf;\uC000\u{1D558}\u0100ci\u2143\u2146r;\u610Am\u0180;el\u066B\u214E\u2150;\u6A8E;\u6A90\u8300>;cdlqr\u05EE\u2160\u216A\u216E\u2173\u2179\u0100ci\u2165\u2167;\u6AA7r;\u6A7Aot;\u62D7Par;\u6995uest;\u6A7C\u0280adels\u2184\u216A\u2190\u0656\u219B\u01F0\u2189\0\u218Epro\xF8\u209Er;\u6978q\u0100lq\u063F\u2196les\xF3\u2088i\xED\u066B\u0100en\u21A3\u21ADrtneqq;\uC000\u2269\uFE00\xC5\u21AA\u0500Aabcefkosy\u21C4\u21C7\u21F1\u21F5\u21FA\u2218\u221D\u222F\u2268\u227Dr\xF2\u03A0\u0200ilmr\u21D0\u21D4\u21D7\u21DBrs\xF0\u1484f\xBB\u2024il\xF4\u06A9\u0100dr\u21E0\u21E4cy;\u444A\u0180;cw\u08F4\u21EB\u21EFir;\u6948;\u61ADar;\u610Firc;\u4125\u0180alr\u2201\u220E\u2213rts\u0100;u\u2209\u220A\u6665it\xBB\u220Alip;\u6026con;\u62B9r;\uC000\u{1D525}s\u0100ew\u2223\u2229arow;\u6925arow;\u6926\u0280amopr\u223A\u223E\u2243\u225E\u2263rr;\u61FFtht;\u623Bk\u0100lr\u2249\u2253eftarrow;\u61A9ightarrow;\u61AAf;\uC000\u{1D559}bar;\u6015\u0180clt\u226F\u2274\u2278r;\uC000\u{1D4BD}as\xE8\u21F4rok;\u4127\u0100bp\u2282\u2287ull;\u6043hen\xBB\u1C5B\u0AE1\u22A3\0\u22AA\0\u22B8\u22C5\u22CE\0\u22D5\u22F3\0\0\u22F8\u2322\u2367\u2362\u237F\0\u2386\u23AA\u23B4cute\u803B\xED\u40ED\u0180;iy\u0771\u22B0\u22B5rc\u803B\xEE\u40EE;\u4438\u0100cx\u22BC\u22BFy;\u4435cl\u803B\xA1\u40A1\u0100fr\u039F\u22C9;\uC000\u{1D526}rave\u803B\xEC\u40EC\u0200;ino\u073E\u22DD\u22E9\u22EE\u0100in\u22E2\u22E6nt;\u6A0Ct;\u622Dfin;\u69DCta;\u6129lig;\u4133\u0180aop\u22FE\u231A\u231D\u0180cgt\u2305\u2308\u2317r;\u412B\u0180elp\u071F\u230F\u2313in\xE5\u078Ear\xF4\u0720h;\u4131f;\u62B7ed;\u41B5\u0280;cfot\u04F4\u232C\u2331\u233D\u2341are;\u6105in\u0100;t\u2338\u2339\u621Eie;\u69DDdo\xF4\u2319\u0280;celp\u0757\u234C\u2350\u235B\u2361al;\u62BA\u0100gr\u2355\u2359er\xF3\u1563\xE3\u234Darhk;\u6A17rod;\u6A3C\u0200cgpt\u236F\u2372\u2376\u237By;\u4451on;\u412Ff;\uC000\u{1D55A}a;\u43B9uest\u803B\xBF\u40BF\u0100ci\u238A\u238Fr;\uC000\u{1D4BE}n\u0280;Edsv\u04F4\u239B\u239D\u23A1\u04F3;\u62F9ot;\u62F5\u0100;v\u23A6\u23A7\u62F4;\u62F3\u0100;i\u0777\u23AElde;\u4129\u01EB\u23B8\0\u23BCcy;\u4456l\u803B\xEF\u40EF\u0300cfmosu\u23CC\u23D7\u23DC\u23E1\u23E7\u23F5\u0100iy\u23D1\u23D5rc;\u4135;\u4439r;\uC000\u{1D527}ath;\u4237pf;\uC000\u{1D55B}\u01E3\u23EC\0\u23F1r;\uC000\u{1D4BF}rcy;\u4458kcy;\u4454\u0400acfghjos\u240B\u2416\u2422\u2427\u242D\u2431\u2435\u243Bppa\u0100;v\u2413\u2414\u43BA;\u43F0\u0100ey\u241B\u2420dil;\u4137;\u443Ar;\uC000\u{1D528}reen;\u4138cy;\u4445cy;\u445Cpf;\uC000\u{1D55C}cr;\uC000\u{1D4C0}\u0B80ABEHabcdefghjlmnoprstuv\u2470\u2481\u2486\u248D\u2491\u250E\u253D\u255A\u2580\u264E\u265E\u2665\u2679\u267D\u269A\u26B2\u26D8\u275D\u2768\u278B\u27C0\u2801\u2812\u0180art\u2477\u247A\u247Cr\xF2\u09C6\xF2\u0395ail;\u691Barr;\u690E\u0100;g\u0994\u248B;\u6A8Bar;\u6962\u0963\u24A5\0\u24AA\0\u24B1\0\0\0\0\0\u24B5\u24BA\0\u24C6\u24C8\u24CD\0\u24F9ute;\u413Amptyv;\u69B4ra\xEE\u084Cbda;\u43BBg\u0180;dl\u088E\u24C1\u24C3;\u6991\xE5\u088E;\u6A85uo\u803B\xAB\u40ABr\u0400;bfhlpst\u0899\u24DE\u24E6\u24E9\u24EB\u24EE\u24F1\u24F5\u0100;f\u089D\u24E3s;\u691Fs;\u691D\xEB\u2252p;\u61ABl;\u6939im;\u6973l;\u61A2\u0180;ae\u24FF\u2500\u2504\u6AABil;\u6919\u0100;s\u2509\u250A\u6AAD;\uC000\u2AAD\uFE00\u0180abr\u2515\u2519\u251Drr;\u690Crk;\u6772\u0100ak\u2522\u252Cc\u0100ek\u2528\u252A;\u407B;\u405B\u0100es\u2531\u2533;\u698Bl\u0100du\u2539\u253B;\u698F;\u698D\u0200aeuy\u2546\u254B\u2556\u2558ron;\u413E\u0100di\u2550\u2554il;\u413C\xEC\u08B0\xE2\u2529;\u443B\u0200cqrs\u2563\u2566\u256D\u257Da;\u6936uo\u0100;r\u0E19\u1746\u0100du\u2572\u2577har;\u6967shar;\u694Bh;\u61B2\u0280;fgqs\u258B\u258C\u0989\u25F3\u25FF\u6264t\u0280ahlrt\u2598\u25A4\u25B7\u25C2\u25E8rrow\u0100;t\u0899\u25A1a\xE9\u24F6arpoon\u0100du\u25AF\u25B4own\xBB\u045Ap\xBB\u0966eftarrows;\u61C7ight\u0180ahs\u25CD\u25D6\u25DErrow\u0100;s\u08F4\u08A7arpoon\xF3\u0F98quigarro\xF7\u21F0hreetimes;\u62CB\u0180;qs\u258B\u0993\u25FAlan\xF4\u09AC\u0280;cdgs\u09AC\u260A\u260D\u261D\u2628c;\u6AA8ot\u0100;o\u2614\u2615\u6A7F\u0100;r\u261A\u261B\u6A81;\u6A83\u0100;e\u2622\u2625\uC000\u22DA\uFE00s;\u6A93\u0280adegs\u2633\u2639\u263D\u2649\u264Bppro\xF8\u24C6ot;\u62D6q\u0100gq\u2643\u2645\xF4\u0989gt\xF2\u248C\xF4\u099Bi\xED\u09B2\u0180ilr\u2655\u08E1\u265Asht;\u697C;\uC000\u{1D529}\u0100;E\u099C\u2663;\u6A91\u0161\u2669\u2676r\u0100du\u25B2\u266E\u0100;l\u0965\u2673;\u696Alk;\u6584cy;\u4459\u0280;acht\u0A48\u2688\u268B\u2691\u2696r\xF2\u25C1orne\xF2\u1D08ard;\u696Bri;\u65FA\u0100io\u269F\u26A4dot;\u4140ust\u0100;a\u26AC\u26AD\u63B0che\xBB\u26AD\u0200Eaes\u26BB\u26BD\u26C9\u26D4;\u6268p\u0100;p\u26C3\u26C4\u6A89rox\xBB\u26C4\u0100;q\u26CE\u26CF\u6A87\u0100;q\u26CE\u26BBim;\u62E6\u0400abnoptwz\u26E9\u26F4\u26F7\u271A\u272F\u2741\u2747\u2750\u0100nr\u26EE\u26F1g;\u67ECr;\u61FDr\xEB\u08C1g\u0180lmr\u26FF\u270D\u2714eft\u0100ar\u09E6\u2707ight\xE1\u09F2apsto;\u67FCight\xE1\u09FDparrow\u0100lr\u2725\u2729ef\xF4\u24EDight;\u61AC\u0180afl\u2736\u2739\u273Dr;\u6985;\uC000\u{1D55D}us;\u6A2Dimes;\u6A34\u0161\u274B\u274Fst;\u6217\xE1\u134E\u0180;ef\u2757\u2758\u1800\u65CAnge\xBB\u2758ar\u0100;l\u2764\u2765\u4028t;\u6993\u0280achmt\u2773\u2776\u277C\u2785\u2787r\xF2\u08A8orne\xF2\u1D8Car\u0100;d\u0F98\u2783;\u696D;\u600Eri;\u62BF\u0300achiqt\u2798\u279D\u0A40\u27A2\u27AE\u27BBquo;\u6039r;\uC000\u{1D4C1}m\u0180;eg\u09B2\u27AA\u27AC;\u6A8D;\u6A8F\u0100bu\u252A\u27B3o\u0100;r\u0E1F\u27B9;\u601Arok;\u4142\u8400<;cdhilqr\u082B\u27D2\u2639\u27DC\u27E0\u27E5\u27EA\u27F0\u0100ci\u27D7\u27D9;\u6AA6r;\u6A79re\xE5\u25F2mes;\u62C9arr;\u6976uest;\u6A7B\u0100Pi\u27F5\u27F9ar;\u6996\u0180;ef\u2800\u092D\u181B\u65C3r\u0100du\u2807\u280Dshar;\u694Ahar;\u6966\u0100en\u2817\u2821rtneqq;\uC000\u2268\uFE00\xC5\u281E\u0700Dacdefhilnopsu\u2840\u2845\u2882\u288E\u2893\u28A0\u28A5\u28A8\u28DA\u28E2\u28E4\u0A83\u28F3\u2902Dot;\u623A\u0200clpr\u284E\u2852\u2863\u287Dr\u803B\xAF\u40AF\u0100et\u2857\u2859;\u6642\u0100;e\u285E\u285F\u6720se\xBB\u285F\u0100;s\u103B\u2868to\u0200;dlu\u103B\u2873\u2877\u287Bow\xEE\u048Cef\xF4\u090F\xF0\u13D1ker;\u65AE\u0100oy\u2887\u288Cmma;\u6A29;\u443Cash;\u6014asuredangle\xBB\u1626r;\uC000\u{1D52A}o;\u6127\u0180cdn\u28AF\u28B4\u28C9ro\u803B\xB5\u40B5\u0200;acd\u1464\u28BD\u28C0\u28C4s\xF4\u16A7ir;\u6AF0ot\u80BB\xB7\u01B5us\u0180;bd\u28D2\u1903\u28D3\u6212\u0100;u\u1D3C\u28D8;\u6A2A\u0163\u28DE\u28E1p;\u6ADB\xF2\u2212\xF0\u0A81\u0100dp\u28E9\u28EEels;\u62A7f;\uC000\u{1D55E}\u0100ct\u28F8\u28FDr;\uC000\u{1D4C2}pos\xBB\u159D\u0180;lm\u2909\u290A\u290D\u43BCtimap;\u62B8\u0C00GLRVabcdefghijlmoprstuvw\u2942\u2953\u297E\u2989\u2998\u29DA\u29E9\u2A15\u2A1A\u2A58\u2A5D\u2A83\u2A95\u2AA4\u2AA8\u2B04\u2B07\u2B44\u2B7F\u2BAE\u2C34\u2C67\u2C7C\u2CE9\u0100gt\u2947\u294B;\uC000\u22D9\u0338\u0100;v\u2950\u0BCF\uC000\u226B\u20D2\u0180elt\u295A\u2972\u2976ft\u0100ar\u2961\u2967rrow;\u61CDightarrow;\u61CE;\uC000\u22D8\u0338\u0100;v\u297B\u0C47\uC000\u226A\u20D2ightarrow;\u61CF\u0100Dd\u298E\u2993ash;\u62AFash;\u62AE\u0280bcnpt\u29A3\u29A7\u29AC\u29B1\u29CCla\xBB\u02DEute;\u4144g;\uC000\u2220\u20D2\u0280;Eiop\u0D84\u29BC\u29C0\u29C5\u29C8;\uC000\u2A70\u0338d;\uC000\u224B\u0338s;\u4149ro\xF8\u0D84ur\u0100;a\u29D3\u29D4\u666El\u0100;s\u29D3\u0B38\u01F3\u29DF\0\u29E3p\u80BB\xA0\u0B37mp\u0100;e\u0BF9\u0C00\u0280aeouy\u29F4\u29FE\u2A03\u2A10\u2A13\u01F0\u29F9\0\u29FB;\u6A43on;\u4148dil;\u4146ng\u0100;d\u0D7E\u2A0Aot;\uC000\u2A6D\u0338p;\u6A42;\u443Dash;\u6013\u0380;Aadqsx\u0B92\u2A29\u2A2D\u2A3B\u2A41\u2A45\u2A50rr;\u61D7r\u0100hr\u2A33\u2A36k;\u6924\u0100;o\u13F2\u13F0ot;\uC000\u2250\u0338ui\xF6\u0B63\u0100ei\u2A4A\u2A4Ear;\u6928\xED\u0B98ist\u0100;s\u0BA0\u0B9Fr;\uC000\u{1D52B}\u0200Eest\u0BC5\u2A66\u2A79\u2A7C\u0180;qs\u0BBC\u2A6D\u0BE1\u0180;qs\u0BBC\u0BC5\u2A74lan\xF4\u0BE2i\xED\u0BEA\u0100;r\u0BB6\u2A81\xBB\u0BB7\u0180Aap\u2A8A\u2A8D\u2A91r\xF2\u2971rr;\u61AEar;\u6AF2\u0180;sv\u0F8D\u2A9C\u0F8C\u0100;d\u2AA1\u2AA2\u62FC;\u62FAcy;\u445A\u0380AEadest\u2AB7\u2ABA\u2ABE\u2AC2\u2AC5\u2AF6\u2AF9r\xF2\u2966;\uC000\u2266\u0338rr;\u619Ar;\u6025\u0200;fqs\u0C3B\u2ACE\u2AE3\u2AEFt\u0100ar\u2AD4\u2AD9rro\xF7\u2AC1ightarro\xF7\u2A90\u0180;qs\u0C3B\u2ABA\u2AEAlan\xF4\u0C55\u0100;s\u0C55\u2AF4\xBB\u0C36i\xED\u0C5D\u0100;r\u0C35\u2AFEi\u0100;e\u0C1A\u0C25i\xE4\u0D90\u0100pt\u2B0C\u2B11f;\uC000\u{1D55F}\u8180\xAC;in\u2B19\u2B1A\u2B36\u40ACn\u0200;Edv\u0B89\u2B24\u2B28\u2B2E;\uC000\u22F9\u0338ot;\uC000\u22F5\u0338\u01E1\u0B89\u2B33\u2B35;\u62F7;\u62F6i\u0100;v\u0CB8\u2B3C\u01E1\u0CB8\u2B41\u2B43;\u62FE;\u62FD\u0180aor\u2B4B\u2B63\u2B69r\u0200;ast\u0B7B\u2B55\u2B5A\u2B5Flle\xEC\u0B7Bl;\uC000\u2AFD\u20E5;\uC000\u2202\u0338lint;\u6A14\u0180;ce\u0C92\u2B70\u2B73u\xE5\u0CA5\u0100;c\u0C98\u2B78\u0100;e\u0C92\u2B7D\xF1\u0C98\u0200Aait\u2B88\u2B8B\u2B9D\u2BA7r\xF2\u2988rr\u0180;cw\u2B94\u2B95\u2B99\u619B;\uC000\u2933\u0338;\uC000\u219D\u0338ghtarrow\xBB\u2B95ri\u0100;e\u0CCB\u0CD6\u0380chimpqu\u2BBD\u2BCD\u2BD9\u2B04\u0B78\u2BE4\u2BEF\u0200;cer\u0D32\u2BC6\u0D37\u2BC9u\xE5\u0D45;\uC000\u{1D4C3}ort\u026D\u2B05\0\0\u2BD6ar\xE1\u2B56m\u0100;e\u0D6E\u2BDF\u0100;q\u0D74\u0D73su\u0100bp\u2BEB\u2BED\xE5\u0CF8\xE5\u0D0B\u0180bcp\u2BF6\u2C11\u2C19\u0200;Ees\u2BFF\u2C00\u0D22\u2C04\u6284;\uC000\u2AC5\u0338et\u0100;e\u0D1B\u2C0Bq\u0100;q\u0D23\u2C00c\u0100;e\u0D32\u2C17\xF1\u0D38\u0200;Ees\u2C22\u2C23\u0D5F\u2C27\u6285;\uC000\u2AC6\u0338et\u0100;e\u0D58\u2C2Eq\u0100;q\u0D60\u2C23\u0200gilr\u2C3D\u2C3F\u2C45\u2C47\xEC\u0BD7lde\u803B\xF1\u40F1\xE7\u0C43iangle\u0100lr\u2C52\u2C5Ceft\u0100;e\u0C1A\u2C5A\xF1\u0C26ight\u0100;e\u0CCB\u2C65\xF1\u0CD7\u0100;m\u2C6C\u2C6D\u43BD\u0180;es\u2C74\u2C75\u2C79\u4023ro;\u6116p;\u6007\u0480DHadgilrs\u2C8F\u2C94\u2C99\u2C9E\u2CA3\u2CB0\u2CB6\u2CD3\u2CE3ash;\u62ADarr;\u6904p;\uC000\u224D\u20D2ash;\u62AC\u0100et\u2CA8\u2CAC;\uC000\u2265\u20D2;\uC000>\u20D2nfin;\u69DE\u0180Aet\u2CBD\u2CC1\u2CC5rr;\u6902;\uC000\u2264\u20D2\u0100;r\u2CCA\u2CCD\uC000<\u20D2ie;\uC000\u22B4\u20D2\u0100At\u2CD8\u2CDCrr;\u6903rie;\uC000\u22B5\u20D2im;\uC000\u223C\u20D2\u0180Aan\u2CF0\u2CF4\u2D02rr;\u61D6r\u0100hr\u2CFA\u2CFDk;\u6923\u0100;o\u13E7\u13E5ear;\u6927\u1253\u1A95\0\0\0\0\0\0\0\0\0\0\0\0\0\u2D2D\0\u2D38\u2D48\u2D60\u2D65\u2D72\u2D84\u1B07\0\0\u2D8D\u2DAB\0\u2DC8\u2DCE\0\u2DDC\u2E19\u2E2B\u2E3E\u2E43\u0100cs\u2D31\u1A97ute\u803B\xF3\u40F3\u0100iy\u2D3C\u2D45r\u0100;c\u1A9E\u2D42\u803B\xF4\u40F4;\u443E\u0280abios\u1AA0\u2D52\u2D57\u01C8\u2D5Alac;\u4151v;\u6A38old;\u69BClig;\u4153\u0100cr\u2D69\u2D6Dir;\u69BF;\uC000\u{1D52C}\u036F\u2D79\0\0\u2D7C\0\u2D82n;\u42DBave\u803B\xF2\u40F2;\u69C1\u0100bm\u2D88\u0DF4ar;\u69B5\u0200acit\u2D95\u2D98\u2DA5\u2DA8r\xF2\u1A80\u0100ir\u2D9D\u2DA0r;\u69BEoss;\u69BBn\xE5\u0E52;\u69C0\u0180aei\u2DB1\u2DB5\u2DB9cr;\u414Dga;\u43C9\u0180cdn\u2DC0\u2DC5\u01CDron;\u43BF;\u69B6pf;\uC000\u{1D560}\u0180ael\u2DD4\u2DD7\u01D2r;\u69B7rp;\u69B9\u0380;adiosv\u2DEA\u2DEB\u2DEE\u2E08\u2E0D\u2E10\u2E16\u6228r\xF2\u1A86\u0200;efm\u2DF7\u2DF8\u2E02\u2E05\u6A5Dr\u0100;o\u2DFE\u2DFF\u6134f\xBB\u2DFF\u803B\xAA\u40AA\u803B\xBA\u40BAgof;\u62B6r;\u6A56lope;\u6A57;\u6A5B\u0180clo\u2E1F\u2E21\u2E27\xF2\u2E01ash\u803B\xF8\u40F8l;\u6298i\u016C\u2E2F\u2E34de\u803B\xF5\u40F5es\u0100;a\u01DB\u2E3As;\u6A36ml\u803B\xF6\u40F6bar;\u633D\u0AE1\u2E5E\0\u2E7D\0\u2E80\u2E9D\0\u2EA2\u2EB9\0\0\u2ECB\u0E9C\0\u2F13\0\0\u2F2B\u2FBC\0\u2FC8r\u0200;ast\u0403\u2E67\u2E72\u0E85\u8100\xB6;l\u2E6D\u2E6E\u40B6le\xEC\u0403\u0269\u2E78\0\0\u2E7Bm;\u6AF3;\u6AFDy;\u443Fr\u0280cimpt\u2E8B\u2E8F\u2E93\u1865\u2E97nt;\u4025od;\u402Eil;\u6030enk;\u6031r;\uC000\u{1D52D}\u0180imo\u2EA8\u2EB0\u2EB4\u0100;v\u2EAD\u2EAE\u43C6;\u43D5ma\xF4\u0A76ne;\u660E\u0180;tv\u2EBF\u2EC0\u2EC8\u43C0chfork\xBB\u1FFD;\u43D6\u0100au\u2ECF\u2EDFn\u0100ck\u2ED5\u2EDDk\u0100;h\u21F4\u2EDB;\u610E\xF6\u21F4s\u0480;abcdemst\u2EF3\u2EF4\u1908\u2EF9\u2EFD\u2F04\u2F06\u2F0A\u2F0E\u402Bcir;\u6A23ir;\u6A22\u0100ou\u1D40\u2F02;\u6A25;\u6A72n\u80BB\xB1\u0E9Dim;\u6A26wo;\u6A27\u0180ipu\u2F19\u2F20\u2F25ntint;\u6A15f;\uC000\u{1D561}nd\u803B\xA3\u40A3\u0500;Eaceinosu\u0EC8\u2F3F\u2F41\u2F44\u2F47\u2F81\u2F89\u2F92\u2F7E\u2FB6;\u6AB3p;\u6AB7u\xE5\u0ED9\u0100;c\u0ECE\u2F4C\u0300;acens\u0EC8\u2F59\u2F5F\u2F66\u2F68\u2F7Eppro\xF8\u2F43urlye\xF1\u0ED9\xF1\u0ECE\u0180aes\u2F6F\u2F76\u2F7Approx;\u6AB9qq;\u6AB5im;\u62E8i\xED\u0EDFme\u0100;s\u2F88\u0EAE\u6032\u0180Eas\u2F78\u2F90\u2F7A\xF0\u2F75\u0180dfp\u0EEC\u2F99\u2FAF\u0180als\u2FA0\u2FA5\u2FAAlar;\u632Eine;\u6312urf;\u6313\u0100;t\u0EFB\u2FB4\xEF\u0EFBrel;\u62B0\u0100ci\u2FC0\u2FC5r;\uC000\u{1D4C5};\u43C8ncsp;\u6008\u0300fiopsu\u2FDA\u22E2\u2FDF\u2FE5\u2FEB\u2FF1r;\uC000\u{1D52E}pf;\uC000\u{1D562}rime;\u6057cr;\uC000\u{1D4C6}\u0180aeo\u2FF8\u3009\u3013t\u0100ei\u2FFE\u3005rnion\xF3\u06B0nt;\u6A16st\u0100;e\u3010\u3011\u403F\xF1\u1F19\xF4\u0F14\u0A80ABHabcdefhilmnoprstux\u3040\u3051\u3055\u3059\u30E0\u310E\u312B\u3147\u3162\u3172\u318E\u3206\u3215\u3224\u3229\u3258\u326E\u3272\u3290\u32B0\u32B7\u0180art\u3047\u304A\u304Cr\xF2\u10B3\xF2\u03DDail;\u691Car\xF2\u1C65ar;\u6964\u0380cdenqrt\u3068\u3075\u3078\u307F\u308F\u3094\u30CC\u0100eu\u306D\u3071;\uC000\u223D\u0331te;\u4155i\xE3\u116Emptyv;\u69B3g\u0200;del\u0FD1\u3089\u308B\u308D;\u6992;\u69A5\xE5\u0FD1uo\u803B\xBB\u40BBr\u0580;abcfhlpstw\u0FDC\u30AC\u30AF\u30B7\u30B9\u30BC\u30BE\u30C0\u30C3\u30C7\u30CAp;\u6975\u0100;f\u0FE0\u30B4s;\u6920;\u6933s;\u691E\xEB\u225D\xF0\u272El;\u6945im;\u6974l;\u61A3;\u619D\u0100ai\u30D1\u30D5il;\u691Ao\u0100;n\u30DB\u30DC\u6236al\xF3\u0F1E\u0180abr\u30E7\u30EA\u30EEr\xF2\u17E5rk;\u6773\u0100ak\u30F3\u30FDc\u0100ek\u30F9\u30FB;\u407D;\u405D\u0100es\u3102\u3104;\u698Cl\u0100du\u310A\u310C;\u698E;\u6990\u0200aeuy\u3117\u311C\u3127\u3129ron;\u4159\u0100di\u3121\u3125il;\u4157\xEC\u0FF2\xE2\u30FA;\u4440\u0200clqs\u3134\u3137\u313D\u3144a;\u6937dhar;\u6969uo\u0100;r\u020E\u020Dh;\u61B3\u0180acg\u314E\u315F\u0F44l\u0200;ips\u0F78\u3158\u315B\u109Cn\xE5\u10BBar\xF4\u0FA9t;\u65AD\u0180ilr\u3169\u1023\u316Esht;\u697D;\uC000\u{1D52F}\u0100ao\u3177\u3186r\u0100du\u317D\u317F\xBB\u047B\u0100;l\u1091\u3184;\u696C\u0100;v\u318B\u318C\u43C1;\u43F1\u0180gns\u3195\u31F9\u31FCht\u0300ahlrst\u31A4\u31B0\u31C2\u31D8\u31E4\u31EErrow\u0100;t\u0FDC\u31ADa\xE9\u30C8arpoon\u0100du\u31BB\u31BFow\xEE\u317Ep\xBB\u1092eft\u0100ah\u31CA\u31D0rrow\xF3\u0FEAarpoon\xF3\u0551ightarrows;\u61C9quigarro\xF7\u30CBhreetimes;\u62CCg;\u42DAingdotse\xF1\u1F32\u0180ahm\u320D\u3210\u3213r\xF2\u0FEAa\xF2\u0551;\u600Foust\u0100;a\u321E\u321F\u63B1che\xBB\u321Fmid;\u6AEE\u0200abpt\u3232\u323D\u3240\u3252\u0100nr\u3237\u323Ag;\u67EDr;\u61FEr\xEB\u1003\u0180afl\u3247\u324A\u324Er;\u6986;\uC000\u{1D563}us;\u6A2Eimes;\u6A35\u0100ap\u325D\u3267r\u0100;g\u3263\u3264\u4029t;\u6994olint;\u6A12ar\xF2\u31E3\u0200achq\u327B\u3280\u10BC\u3285quo;\u603Ar;\uC000\u{1D4C7}\u0100bu\u30FB\u328Ao\u0100;r\u0214\u0213\u0180hir\u3297\u329B\u32A0re\xE5\u31F8mes;\u62CAi\u0200;efl\u32AA\u1059\u1821\u32AB\u65B9tri;\u69CEluhar;\u6968;\u611E\u0D61\u32D5\u32DB\u32DF\u332C\u3338\u3371\0\u337A\u33A4\0\0\u33EC\u33F0\0\u3428\u3448\u345A\u34AD\u34B1\u34CA\u34F1\0\u3616\0\0\u3633cute;\u415Bqu\xEF\u27BA\u0500;Eaceinpsy\u11ED\u32F3\u32F5\u32FF\u3302\u330B\u330F\u331F\u3326\u3329;\u6AB4\u01F0\u32FA\0\u32FC;\u6AB8on;\u4161u\xE5\u11FE\u0100;d\u11F3\u3307il;\u415Frc;\u415D\u0180Eas\u3316\u3318\u331B;\u6AB6p;\u6ABAim;\u62E9olint;\u6A13i\xED\u1204;\u4441ot\u0180;be\u3334\u1D47\u3335\u62C5;\u6A66\u0380Aacmstx\u3346\u334A\u3357\u335B\u335E\u3363\u336Drr;\u61D8r\u0100hr\u3350\u3352\xEB\u2228\u0100;o\u0A36\u0A34t\u803B\xA7\u40A7i;\u403Bwar;\u6929m\u0100in\u3369\xF0nu\xF3\xF1t;\u6736r\u0100;o\u3376\u2055\uC000\u{1D530}\u0200acoy\u3382\u3386\u3391\u33A0rp;\u666F\u0100hy\u338B\u338Fcy;\u4449;\u4448rt\u026D\u3399\0\0\u339Ci\xE4\u1464ara\xEC\u2E6F\u803B\xAD\u40AD\u0100gm\u33A8\u33B4ma\u0180;fv\u33B1\u33B2\u33B2\u43C3;\u43C2\u0400;deglnpr\u12AB\u33C5\u33C9\u33CE\u33D6\u33DE\u33E1\u33E6ot;\u6A6A\u0100;q\u12B1\u12B0\u0100;E\u33D3\u33D4\u6A9E;\u6AA0\u0100;E\u33DB\u33DC\u6A9D;\u6A9Fe;\u6246lus;\u6A24arr;\u6972ar\xF2\u113D\u0200aeit\u33F8\u3408\u340F\u3417\u0100ls\u33FD\u3404lsetm\xE9\u336Ahp;\u6A33parsl;\u69E4\u0100dl\u1463\u3414e;\u6323\u0100;e\u341C\u341D\u6AAA\u0100;s\u3422\u3423\u6AAC;\uC000\u2AAC\uFE00\u0180flp\u342E\u3433\u3442tcy;\u444C\u0100;b\u3438\u3439\u402F\u0100;a\u343E\u343F\u69C4r;\u633Ff;\uC000\u{1D564}a\u0100dr\u344D\u0402es\u0100;u\u3454\u3455\u6660it\xBB\u3455\u0180csu\u3460\u3479\u349F\u0100au\u3465\u346Fp\u0100;s\u1188\u346B;\uC000\u2293\uFE00p\u0100;s\u11B4\u3475;\uC000\u2294\uFE00u\u0100bp\u347F\u348F\u0180;es\u1197\u119C\u3486et\u0100;e\u1197\u348D\xF1\u119D\u0180;es\u11A8\u11AD\u3496et\u0100;e\u11A8\u349D\xF1\u11AE\u0180;af\u117B\u34A6\u05B0r\u0165\u34AB\u05B1\xBB\u117Car\xF2\u1148\u0200cemt\u34B9\u34BE\u34C2\u34C5r;\uC000\u{1D4C8}tm\xEE\xF1i\xEC\u3415ar\xE6\u11BE\u0100ar\u34CE\u34D5r\u0100;f\u34D4\u17BF\u6606\u0100an\u34DA\u34EDight\u0100ep\u34E3\u34EApsilo\xEE\u1EE0h\xE9\u2EAFs\xBB\u2852\u0280bcmnp\u34FB\u355E\u1209\u358B\u358E\u0480;Edemnprs\u350E\u350F\u3511\u3515\u351E\u3523\u352C\u3531\u3536\u6282;\u6AC5ot;\u6ABD\u0100;d\u11DA\u351Aot;\u6AC3ult;\u6AC1\u0100Ee\u3528\u352A;\u6ACB;\u628Alus;\u6ABFarr;\u6979\u0180eiu\u353D\u3552\u3555t\u0180;en\u350E\u3545\u354Bq\u0100;q\u11DA\u350Feq\u0100;q\u352B\u3528m;\u6AC7\u0100bp\u355A\u355C;\u6AD5;\u6AD3c\u0300;acens\u11ED\u356C\u3572\u3579\u357B\u3326ppro\xF8\u32FAurlye\xF1\u11FE\xF1\u11F3\u0180aes\u3582\u3588\u331Bppro\xF8\u331Aq\xF1\u3317g;\u666A\u0680123;Edehlmnps\u35A9\u35AC\u35AF\u121C\u35B2\u35B4\u35C0\u35C9\u35D5\u35DA\u35DF\u35E8\u35ED\u803B\xB9\u40B9\u803B\xB2\u40B2\u803B\xB3\u40B3;\u6AC6\u0100os\u35B9\u35BCt;\u6ABEub;\u6AD8\u0100;d\u1222\u35C5ot;\u6AC4s\u0100ou\u35CF\u35D2l;\u67C9b;\u6AD7arr;\u697Bult;\u6AC2\u0100Ee\u35E4\u35E6;\u6ACC;\u628Blus;\u6AC0\u0180eiu\u35F4\u3609\u360Ct\u0180;en\u121C\u35FC\u3602q\u0100;q\u1222\u35B2eq\u0100;q\u35E7\u35E4m;\u6AC8\u0100bp\u3611\u3613;\u6AD4;\u6AD6\u0180Aan\u361C\u3620\u362Drr;\u61D9r\u0100hr\u3626\u3628\xEB\u222E\u0100;o\u0A2B\u0A29war;\u692Alig\u803B\xDF\u40DF\u0BE1\u3651\u365D\u3660\u12CE\u3673\u3679\0\u367E\u36C2\0\0\0\0\0\u36DB\u3703\0\u3709\u376C\0\0\0\u3787\u0272\u3656\0\0\u365Bget;\u6316;\u43C4r\xEB\u0E5F\u0180aey\u3666\u366B\u3670ron;\u4165dil;\u4163;\u4442lrec;\u6315r;\uC000\u{1D531}\u0200eiko\u3686\u369D\u36B5\u36BC\u01F2\u368B\0\u3691e\u01004f\u1284\u1281a\u0180;sv\u3698\u3699\u369B\u43B8ym;\u43D1\u0100cn\u36A2\u36B2k\u0100as\u36A8\u36AEppro\xF8\u12C1im\xBB\u12ACs\xF0\u129E\u0100as\u36BA\u36AE\xF0\u12C1rn\u803B\xFE\u40FE\u01EC\u031F\u36C6\u22E7es\u8180\xD7;bd\u36CF\u36D0\u36D8\u40D7\u0100;a\u190F\u36D5r;\u6A31;\u6A30\u0180eps\u36E1\u36E3\u3700\xE1\u2A4D\u0200;bcf\u0486\u36EC\u36F0\u36F4ot;\u6336ir;\u6AF1\u0100;o\u36F9\u36FC\uC000\u{1D565}rk;\u6ADA\xE1\u3362rime;\u6034\u0180aip\u370F\u3712\u3764d\xE5\u1248\u0380adempst\u3721\u374D\u3740\u3751\u3757\u375C\u375Fngle\u0280;dlqr\u3730\u3731\u3736\u3740\u3742\u65B5own\xBB\u1DBBeft\u0100;e\u2800\u373E\xF1\u092E;\u625Cight\u0100;e\u32AA\u374B\xF1\u105Aot;\u65ECinus;\u6A3Alus;\u6A39b;\u69CDime;\u6A3Bezium;\u63E2\u0180cht\u3772\u377D\u3781\u0100ry\u3777\u377B;\uC000\u{1D4C9};\u4446cy;\u445Brok;\u4167\u0100io\u378B\u378Ex\xF4\u1777head\u0100lr\u3797\u37A0eftarro\xF7\u084Fightarrow\xBB\u0F5D\u0900AHabcdfghlmoprstuw\u37D0\u37D3\u37D7\u37E4\u37F0\u37FC\u380E\u381C\u3823\u3834\u3851\u385D\u386B\u38A9\u38CC\u38D2\u38EA\u38F6r\xF2\u03EDar;\u6963\u0100cr\u37DC\u37E2ute\u803B\xFA\u40FA\xF2\u1150r\u01E3\u37EA\0\u37EDy;\u445Eve;\u416D\u0100iy\u37F5\u37FArc\u803B\xFB\u40FB;\u4443\u0180abh\u3803\u3806\u380Br\xF2\u13ADlac;\u4171a\xF2\u13C3\u0100ir\u3813\u3818sht;\u697E;\uC000\u{1D532}rave\u803B\xF9\u40F9\u0161\u3827\u3831r\u0100lr\u382C\u382E\xBB\u0957\xBB\u1083lk;\u6580\u0100ct\u3839\u384D\u026F\u383F\0\0\u384Arn\u0100;e\u3845\u3846\u631Cr\xBB\u3846op;\u630Fri;\u65F8\u0100al\u3856\u385Acr;\u416B\u80BB\xA8\u0349\u0100gp\u3862\u3866on;\u4173f;\uC000\u{1D566}\u0300adhlsu\u114B\u3878\u387D\u1372\u3891\u38A0own\xE1\u13B3arpoon\u0100lr\u3888\u388Cef\xF4\u382Digh\xF4\u382Fi\u0180;hl\u3899\u389A\u389C\u43C5\xBB\u13FAon\xBB\u389Aparrows;\u61C8\u0180cit\u38B0\u38C4\u38C8\u026F\u38B6\0\0\u38C1rn\u0100;e\u38BC\u38BD\u631Dr\xBB\u38BDop;\u630Eng;\u416Fri;\u65F9cr;\uC000\u{1D4CA}\u0180dir\u38D9\u38DD\u38E2ot;\u62F0lde;\u4169i\u0100;f\u3730\u38E8\xBB\u1813\u0100am\u38EF\u38F2r\xF2\u38A8l\u803B\xFC\u40FCangle;\u69A7\u0780ABDacdeflnoprsz\u391C\u391F\u3929\u392D\u39B5\u39B8\u39BD\u39DF\u39E4\u39E8\u39F3\u39F9\u39FD\u3A01\u3A20r\xF2\u03F7ar\u0100;v\u3926\u3927\u6AE8;\u6AE9as\xE8\u03E1\u0100nr\u3932\u3937grt;\u699C\u0380eknprst\u34E3\u3946\u394B\u3952\u395D\u3964\u3996app\xE1\u2415othin\xE7\u1E96\u0180hir\u34EB\u2EC8\u3959op\xF4\u2FB5\u0100;h\u13B7\u3962\xEF\u318D\u0100iu\u3969\u396Dgm\xE1\u33B3\u0100bp\u3972\u3984setneq\u0100;q\u397D\u3980\uC000\u228A\uFE00;\uC000\u2ACB\uFE00setneq\u0100;q\u398F\u3992\uC000\u228B\uFE00;\uC000\u2ACC\uFE00\u0100hr\u399B\u399Fet\xE1\u369Ciangle\u0100lr\u39AA\u39AFeft\xBB\u0925ight\xBB\u1051y;\u4432ash\xBB\u1036\u0180elr\u39C4\u39D2\u39D7\u0180;be\u2DEA\u39CB\u39CFar;\u62BBq;\u625Alip;\u62EE\u0100bt\u39DC\u1468a\xF2\u1469r;\uC000\u{1D533}tr\xE9\u39AEsu\u0100bp\u39EF\u39F1\xBB\u0D1C\xBB\u0D59pf;\uC000\u{1D567}ro\xF0\u0EFBtr\xE9\u39B4\u0100cu\u3A06\u3A0Br;\uC000\u{1D4CB}\u0100bp\u3A10\u3A18n\u0100Ee\u3980\u3A16\xBB\u397En\u0100Ee\u3992\u3A1E\xBB\u3990igzag;\u699A\u0380cefoprs\u3A36\u3A3B\u3A56\u3A5B\u3A54\u3A61\u3A6Airc;\u4175\u0100di\u3A40\u3A51\u0100bg\u3A45\u3A49ar;\u6A5Fe\u0100;q\u15FA\u3A4F;\u6259erp;\u6118r;\uC000\u{1D534}pf;\uC000\u{1D568}\u0100;e\u1479\u3A66at\xE8\u1479cr;\uC000\u{1D4CC}\u0AE3\u178E\u3A87\0\u3A8B\0\u3A90\u3A9B\0\0\u3A9D\u3AA8\u3AAB\u3AAF\0\0\u3AC3\u3ACE\0\u3AD8\u17DC\u17DFtr\xE9\u17D1r;\uC000\u{1D535}\u0100Aa\u3A94\u3A97r\xF2\u03C3r\xF2\u09F6;\u43BE\u0100Aa\u3AA1\u3AA4r\xF2\u03B8r\xF2\u09EBa\xF0\u2713is;\u62FB\u0180dpt\u17A4\u3AB5\u3ABE\u0100fl\u3ABA\u17A9;\uC000\u{1D569}im\xE5\u17B2\u0100Aa\u3AC7\u3ACAr\xF2\u03CEr\xF2\u0A01\u0100cq\u3AD2\u17B8r;\uC000\u{1D4CD}\u0100pt\u17D6\u3ADCr\xE9\u17D4\u0400acefiosu\u3AF0\u3AFD\u3B08\u3B0C\u3B11\u3B15\u3B1B\u3B21c\u0100uy\u3AF6\u3AFBte\u803B\xFD\u40FD;\u444F\u0100iy\u3B02\u3B06rc;\u4177;\u444Bn\u803B\xA5\u40A5r;\uC000\u{1D536}cy;\u4457pf;\uC000\u{1D56A}cr;\uC000\u{1D4CE}\u0100cm\u3B26\u3B29y;\u444El\u803B\xFF\u40FF\u0500acdefhiosw\u3B42\u3B48\u3B54\u3B58\u3B64\u3B69\u3B6D\u3B74\u3B7A\u3B80cute;\u417A\u0100ay\u3B4D\u3B52ron;\u417E;\u4437ot;\u417C\u0100et\u3B5D\u3B61tr\xE6\u155Fa;\u43B6r;\uC000\u{1D537}cy;\u4436grarr;\u61DDpf;\uC000\u{1D56B}cr;\uC000\u{1D4CF}\u0100jn\u3B85\u3B87;\u600Dj;\u600C'.split("").map((c) => c.charCodeAt(0))
3480
+ );
3481
+
3482
+ // node_modules/.pnpm/entities@4.5.0/node_modules/entities/lib/esm/generated/decode-data-xml.js
3483
+ var decode_data_xml_default = new Uint16Array(
3484
+ // prettier-ignore
3485
+ "\u0200aglq \x1B\u026D\0\0p;\u4026os;\u4027t;\u403Et;\u403Cuot;\u4022".split("").map((c) => c.charCodeAt(0))
3486
+ );
3487
+
3488
+ // node_modules/.pnpm/entities@4.5.0/node_modules/entities/lib/esm/decode_codepoint.js
3489
+ var _a2;
3490
+ var decodeMap2 = /* @__PURE__ */ new Map([
3491
+ [0, 65533],
3492
+ // C1 Unicode control character reference replacements
3493
+ [128, 8364],
3494
+ [130, 8218],
3495
+ [131, 402],
3496
+ [132, 8222],
3497
+ [133, 8230],
3498
+ [134, 8224],
3499
+ [135, 8225],
3500
+ [136, 710],
3501
+ [137, 8240],
3502
+ [138, 352],
3503
+ [139, 8249],
3504
+ [140, 338],
3505
+ [142, 381],
3506
+ [145, 8216],
3507
+ [146, 8217],
3508
+ [147, 8220],
3509
+ [148, 8221],
3510
+ [149, 8226],
3511
+ [150, 8211],
3512
+ [151, 8212],
3513
+ [152, 732],
3514
+ [153, 8482],
3515
+ [154, 353],
3516
+ [155, 8250],
3517
+ [156, 339],
3518
+ [158, 382],
3519
+ [159, 376]
3520
+ ]);
3521
+ var fromCodePoint2 = (
3522
+ // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition, node/no-unsupported-features/es-builtins
3523
+ (_a2 = String.fromCodePoint) !== null && _a2 !== void 0 ? _a2 : function(codePoint) {
3524
+ let output = "";
3525
+ if (codePoint > 65535) {
3526
+ codePoint -= 65536;
3527
+ output += String.fromCharCode(codePoint >>> 10 & 1023 | 55296);
3528
+ codePoint = 56320 | codePoint & 1023;
3529
+ }
3530
+ output += String.fromCharCode(codePoint);
3531
+ return output;
3532
+ }
3533
+ );
3534
+ function replaceCodePoint2(codePoint) {
3535
+ var _a3;
3536
+ if (codePoint >= 55296 && codePoint <= 57343 || codePoint > 1114111) {
3537
+ return 65533;
3538
+ }
3539
+ return (_a3 = decodeMap2.get(codePoint)) !== null && _a3 !== void 0 ? _a3 : codePoint;
3540
+ }
3541
+
3542
+ // node_modules/.pnpm/entities@4.5.0/node_modules/entities/lib/esm/decode.js
3543
+ var CharCodes3;
3544
+ (function(CharCodes4) {
3545
+ CharCodes4[CharCodes4["NUM"] = 35] = "NUM";
3546
+ CharCodes4[CharCodes4["SEMI"] = 59] = "SEMI";
3547
+ CharCodes4[CharCodes4["EQUALS"] = 61] = "EQUALS";
3548
+ CharCodes4[CharCodes4["ZERO"] = 48] = "ZERO";
3549
+ CharCodes4[CharCodes4["NINE"] = 57] = "NINE";
3550
+ CharCodes4[CharCodes4["LOWER_A"] = 97] = "LOWER_A";
3551
+ CharCodes4[CharCodes4["LOWER_F"] = 102] = "LOWER_F";
3552
+ CharCodes4[CharCodes4["LOWER_X"] = 120] = "LOWER_X";
3553
+ CharCodes4[CharCodes4["LOWER_Z"] = 122] = "LOWER_Z";
3554
+ CharCodes4[CharCodes4["UPPER_A"] = 65] = "UPPER_A";
3555
+ CharCodes4[CharCodes4["UPPER_F"] = 70] = "UPPER_F";
3556
+ CharCodes4[CharCodes4["UPPER_Z"] = 90] = "UPPER_Z";
3557
+ })(CharCodes3 || (CharCodes3 = {}));
3558
+ var TO_LOWER_BIT2 = 32;
3559
+ var BinTrieFlags2;
3560
+ (function(BinTrieFlags3) {
3561
+ BinTrieFlags3[BinTrieFlags3["VALUE_LENGTH"] = 49152] = "VALUE_LENGTH";
3562
+ BinTrieFlags3[BinTrieFlags3["BRANCH_LENGTH"] = 16256] = "BRANCH_LENGTH";
3563
+ BinTrieFlags3[BinTrieFlags3["JUMP_TABLE"] = 127] = "JUMP_TABLE";
3564
+ })(BinTrieFlags2 || (BinTrieFlags2 = {}));
3565
+ function isNumber2(code) {
3566
+ return code >= CharCodes3.ZERO && code <= CharCodes3.NINE;
3567
+ }
3568
+ function isHexadecimalCharacter2(code) {
3569
+ return code >= CharCodes3.UPPER_A && code <= CharCodes3.UPPER_F || code >= CharCodes3.LOWER_A && code <= CharCodes3.LOWER_F;
3570
+ }
3571
+ function isAsciiAlphaNumeric2(code) {
3572
+ return code >= CharCodes3.UPPER_A && code <= CharCodes3.UPPER_Z || code >= CharCodes3.LOWER_A && code <= CharCodes3.LOWER_Z || isNumber2(code);
3573
+ }
3574
+ function isEntityInAttributeInvalidEnd2(code) {
3575
+ return code === CharCodes3.EQUALS || isAsciiAlphaNumeric2(code);
3576
+ }
3577
+ var EntityDecoderState2;
3578
+ (function(EntityDecoderState3) {
3579
+ EntityDecoderState3[EntityDecoderState3["EntityStart"] = 0] = "EntityStart";
3580
+ EntityDecoderState3[EntityDecoderState3["NumericStart"] = 1] = "NumericStart";
3581
+ EntityDecoderState3[EntityDecoderState3["NumericDecimal"] = 2] = "NumericDecimal";
3582
+ EntityDecoderState3[EntityDecoderState3["NumericHex"] = 3] = "NumericHex";
3583
+ EntityDecoderState3[EntityDecoderState3["NamedEntity"] = 4] = "NamedEntity";
3584
+ })(EntityDecoderState2 || (EntityDecoderState2 = {}));
3585
+ var DecodingMode2;
3586
+ (function(DecodingMode3) {
3587
+ DecodingMode3[DecodingMode3["Legacy"] = 0] = "Legacy";
3588
+ DecodingMode3[DecodingMode3["Strict"] = 1] = "Strict";
3589
+ DecodingMode3[DecodingMode3["Attribute"] = 2] = "Attribute";
3590
+ })(DecodingMode2 || (DecodingMode2 = {}));
3591
+ var EntityDecoder2 = class {
3592
+ constructor(decodeTree, emitCodePoint, errors) {
3593
+ this.decodeTree = decodeTree;
3594
+ this.emitCodePoint = emitCodePoint;
3595
+ this.errors = errors;
3596
+ this.state = EntityDecoderState2.EntityStart;
3597
+ this.consumed = 1;
3598
+ this.result = 0;
3599
+ this.treeIndex = 0;
3600
+ this.excess = 1;
3601
+ this.decodeMode = DecodingMode2.Strict;
3602
+ }
3603
+ /** Resets the instance to make it reusable. */
3604
+ startEntity(decodeMode) {
3605
+ this.decodeMode = decodeMode;
3606
+ this.state = EntityDecoderState2.EntityStart;
3607
+ this.result = 0;
3608
+ this.treeIndex = 0;
3609
+ this.excess = 1;
3610
+ this.consumed = 1;
3611
+ }
3612
+ /**
3613
+ * Write an entity to the decoder. This can be called multiple times with partial entities.
3614
+ * If the entity is incomplete, the decoder will return -1.
3615
+ *
3616
+ * Mirrors the implementation of `getDecoder`, but with the ability to stop decoding if the
3617
+ * entity is incomplete, and resume when the next string is written.
3618
+ *
3619
+ * @param string The string containing the entity (or a continuation of the entity).
3620
+ * @param offset The offset at which the entity begins. Should be 0 if this is not the first call.
3621
+ * @returns The number of characters that were consumed, or -1 if the entity is incomplete.
3622
+ */
3623
+ write(str, offset) {
3624
+ switch (this.state) {
3625
+ case EntityDecoderState2.EntityStart: {
3626
+ if (str.charCodeAt(offset) === CharCodes3.NUM) {
3627
+ this.state = EntityDecoderState2.NumericStart;
3628
+ this.consumed += 1;
3629
+ return this.stateNumericStart(str, offset + 1);
3630
+ }
3631
+ this.state = EntityDecoderState2.NamedEntity;
3632
+ return this.stateNamedEntity(str, offset);
3633
+ }
3634
+ case EntityDecoderState2.NumericStart: {
3635
+ return this.stateNumericStart(str, offset);
3636
+ }
3637
+ case EntityDecoderState2.NumericDecimal: {
3638
+ return this.stateNumericDecimal(str, offset);
3639
+ }
3640
+ case EntityDecoderState2.NumericHex: {
3641
+ return this.stateNumericHex(str, offset);
3642
+ }
3643
+ case EntityDecoderState2.NamedEntity: {
3644
+ return this.stateNamedEntity(str, offset);
3645
+ }
3646
+ }
3647
+ }
3648
+ /**
3649
+ * Switches between the numeric decimal and hexadecimal states.
3650
+ *
3651
+ * Equivalent to the `Numeric character reference state` in the HTML spec.
3652
+ *
3653
+ * @param str The string containing the entity (or a continuation of the entity).
3654
+ * @param offset The current offset.
3655
+ * @returns The number of characters that were consumed, or -1 if the entity is incomplete.
3656
+ */
3657
+ stateNumericStart(str, offset) {
3658
+ if (offset >= str.length) {
3659
+ return -1;
3660
+ }
3661
+ if ((str.charCodeAt(offset) | TO_LOWER_BIT2) === CharCodes3.LOWER_X) {
3662
+ this.state = EntityDecoderState2.NumericHex;
3663
+ this.consumed += 1;
3664
+ return this.stateNumericHex(str, offset + 1);
3665
+ }
3666
+ this.state = EntityDecoderState2.NumericDecimal;
3667
+ return this.stateNumericDecimal(str, offset);
3668
+ }
3669
+ addToNumericResult(str, start, end, base) {
3670
+ if (start !== end) {
3671
+ const digitCount = end - start;
3672
+ this.result = this.result * Math.pow(base, digitCount) + parseInt(str.substr(start, digitCount), base);
3673
+ this.consumed += digitCount;
3674
+ }
3675
+ }
3676
+ /**
3677
+ * Parses a hexadecimal numeric entity.
3678
+ *
3679
+ * Equivalent to the `Hexademical character reference state` in the HTML spec.
3680
+ *
3681
+ * @param str The string containing the entity (or a continuation of the entity).
3682
+ * @param offset The current offset.
3683
+ * @returns The number of characters that were consumed, or -1 if the entity is incomplete.
3684
+ */
3685
+ stateNumericHex(str, offset) {
3686
+ const startIdx = offset;
3687
+ while (offset < str.length) {
3688
+ const char = str.charCodeAt(offset);
3689
+ if (isNumber2(char) || isHexadecimalCharacter2(char)) {
3690
+ offset += 1;
3691
+ } else {
3692
+ this.addToNumericResult(str, startIdx, offset, 16);
3693
+ return this.emitNumericEntity(char, 3);
3694
+ }
3695
+ }
3696
+ this.addToNumericResult(str, startIdx, offset, 16);
3697
+ return -1;
3698
+ }
3699
+ /**
3700
+ * Parses a decimal numeric entity.
3701
+ *
3702
+ * Equivalent to the `Decimal character reference state` in the HTML spec.
3703
+ *
3704
+ * @param str The string containing the entity (or a continuation of the entity).
3705
+ * @param offset The current offset.
3706
+ * @returns The number of characters that were consumed, or -1 if the entity is incomplete.
3707
+ */
3708
+ stateNumericDecimal(str, offset) {
3709
+ const startIdx = offset;
3710
+ while (offset < str.length) {
3711
+ const char = str.charCodeAt(offset);
3712
+ if (isNumber2(char)) {
3713
+ offset += 1;
3714
+ } else {
3715
+ this.addToNumericResult(str, startIdx, offset, 10);
3716
+ return this.emitNumericEntity(char, 2);
3717
+ }
3718
+ }
3719
+ this.addToNumericResult(str, startIdx, offset, 10);
3720
+ return -1;
3721
+ }
3722
+ /**
3723
+ * Validate and emit a numeric entity.
3724
+ *
3725
+ * Implements the logic from the `Hexademical character reference start
3726
+ * state` and `Numeric character reference end state` in the HTML spec.
3727
+ *
3728
+ * @param lastCp The last code point of the entity. Used to see if the
3729
+ * entity was terminated with a semicolon.
3730
+ * @param expectedLength The minimum number of characters that should be
3731
+ * consumed. Used to validate that at least one digit
3732
+ * was consumed.
3733
+ * @returns The number of characters that were consumed.
3734
+ */
3735
+ emitNumericEntity(lastCp, expectedLength) {
3736
+ var _a3;
3737
+ if (this.consumed <= expectedLength) {
3738
+ (_a3 = this.errors) === null || _a3 === void 0 ? void 0 : _a3.absenceOfDigitsInNumericCharacterReference(this.consumed);
3739
+ return 0;
3740
+ }
3741
+ if (lastCp === CharCodes3.SEMI) {
3742
+ this.consumed += 1;
3743
+ } else if (this.decodeMode === DecodingMode2.Strict) {
3744
+ return 0;
3745
+ }
3746
+ this.emitCodePoint(replaceCodePoint2(this.result), this.consumed);
3747
+ if (this.errors) {
3748
+ if (lastCp !== CharCodes3.SEMI) {
3749
+ this.errors.missingSemicolonAfterCharacterReference();
3750
+ }
3751
+ this.errors.validateNumericCharacterReference(this.result);
3752
+ }
3753
+ return this.consumed;
3754
+ }
3755
+ /**
3756
+ * Parses a named entity.
3757
+ *
3758
+ * Equivalent to the `Named character reference state` in the HTML spec.
3759
+ *
3760
+ * @param str The string containing the entity (or a continuation of the entity).
3761
+ * @param offset The current offset.
3762
+ * @returns The number of characters that were consumed, or -1 if the entity is incomplete.
3763
+ */
3764
+ stateNamedEntity(str, offset) {
3765
+ const { decodeTree } = this;
3766
+ let current = decodeTree[this.treeIndex];
3767
+ let valueLength = (current & BinTrieFlags2.VALUE_LENGTH) >> 14;
3768
+ for (; offset < str.length; offset++, this.excess++) {
3769
+ const char = str.charCodeAt(offset);
3770
+ this.treeIndex = determineBranch2(decodeTree, current, this.treeIndex + Math.max(1, valueLength), char);
3771
+ if (this.treeIndex < 0) {
3772
+ return this.result === 0 || // If we are parsing an attribute
3773
+ this.decodeMode === DecodingMode2.Attribute && // We shouldn't have consumed any characters after the entity,
3774
+ (valueLength === 0 || // And there should be no invalid characters.
3775
+ isEntityInAttributeInvalidEnd2(char)) ? 0 : this.emitNotTerminatedNamedEntity();
3776
+ }
3777
+ current = decodeTree[this.treeIndex];
3778
+ valueLength = (current & BinTrieFlags2.VALUE_LENGTH) >> 14;
3779
+ if (valueLength !== 0) {
3780
+ if (char === CharCodes3.SEMI) {
3781
+ return this.emitNamedEntityData(this.treeIndex, valueLength, this.consumed + this.excess);
3782
+ }
3783
+ if (this.decodeMode !== DecodingMode2.Strict) {
3784
+ this.result = this.treeIndex;
3785
+ this.consumed += this.excess;
3786
+ this.excess = 0;
3787
+ }
3788
+ }
3789
+ }
3790
+ return -1;
3791
+ }
3792
+ /**
3793
+ * Emit a named entity that was not terminated with a semicolon.
3794
+ *
3795
+ * @returns The number of characters consumed.
3796
+ */
3797
+ emitNotTerminatedNamedEntity() {
3798
+ var _a3;
3799
+ const { result, decodeTree } = this;
3800
+ const valueLength = (decodeTree[result] & BinTrieFlags2.VALUE_LENGTH) >> 14;
3801
+ this.emitNamedEntityData(result, valueLength, this.consumed);
3802
+ (_a3 = this.errors) === null || _a3 === void 0 ? void 0 : _a3.missingSemicolonAfterCharacterReference();
3803
+ return this.consumed;
3804
+ }
3805
+ /**
3806
+ * Emit a named entity.
3807
+ *
3808
+ * @param result The index of the entity in the decode tree.
3809
+ * @param valueLength The number of bytes in the entity.
3810
+ * @param consumed The number of characters consumed.
3811
+ *
3812
+ * @returns The number of characters consumed.
3813
+ */
3814
+ emitNamedEntityData(result, valueLength, consumed) {
3815
+ const { decodeTree } = this;
3816
+ this.emitCodePoint(valueLength === 1 ? decodeTree[result] & ~BinTrieFlags2.VALUE_LENGTH : decodeTree[result + 1], consumed);
3817
+ if (valueLength === 3) {
3818
+ this.emitCodePoint(decodeTree[result + 2], consumed);
3819
+ }
3820
+ return consumed;
3821
+ }
3822
+ /**
3823
+ * Signal to the parser that the end of the input was reached.
3824
+ *
3825
+ * Remaining data will be emitted and relevant errors will be produced.
3826
+ *
3827
+ * @returns The number of characters consumed.
3828
+ */
3829
+ end() {
3830
+ var _a3;
3831
+ switch (this.state) {
3832
+ case EntityDecoderState2.NamedEntity: {
3833
+ return this.result !== 0 && (this.decodeMode !== DecodingMode2.Attribute || this.result === this.treeIndex) ? this.emitNotTerminatedNamedEntity() : 0;
3834
+ }
3835
+ // Otherwise, emit a numeric entity if we have one.
3836
+ case EntityDecoderState2.NumericDecimal: {
3837
+ return this.emitNumericEntity(0, 2);
3838
+ }
3839
+ case EntityDecoderState2.NumericHex: {
3840
+ return this.emitNumericEntity(0, 3);
3841
+ }
3842
+ case EntityDecoderState2.NumericStart: {
3843
+ (_a3 = this.errors) === null || _a3 === void 0 ? void 0 : _a3.absenceOfDigitsInNumericCharacterReference(this.consumed);
3844
+ return 0;
3845
+ }
3846
+ case EntityDecoderState2.EntityStart: {
3847
+ return 0;
3848
+ }
3849
+ }
3850
+ }
3851
+ };
3852
+ function getDecoder(decodeTree) {
3853
+ let ret = "";
3854
+ const decoder = new EntityDecoder2(decodeTree, (str) => ret += fromCodePoint2(str));
3855
+ return function decodeWithTrie(str, decodeMode) {
3856
+ let lastIndex = 0;
3857
+ let offset = 0;
3858
+ while ((offset = str.indexOf("&", offset)) >= 0) {
3859
+ ret += str.slice(lastIndex, offset);
3860
+ decoder.startEntity(decodeMode);
3861
+ const len = decoder.write(
3862
+ str,
3863
+ // Skip the "&"
3864
+ offset + 1
3865
+ );
3866
+ if (len < 0) {
3867
+ lastIndex = offset + decoder.end();
3868
+ break;
3869
+ }
3870
+ lastIndex = offset + len;
3871
+ offset = len === 0 ? lastIndex + 1 : lastIndex;
3872
+ }
3873
+ const result = ret + str.slice(lastIndex);
3874
+ ret = "";
3875
+ return result;
3876
+ };
3877
+ }
3878
+ function determineBranch2(decodeTree, current, nodeIdx, char) {
3879
+ const branchCount = (current & BinTrieFlags2.BRANCH_LENGTH) >> 7;
3880
+ const jumpOffset = current & BinTrieFlags2.JUMP_TABLE;
3881
+ if (branchCount === 0) {
3882
+ return jumpOffset !== 0 && char === jumpOffset ? nodeIdx : -1;
3883
+ }
3884
+ if (jumpOffset) {
3885
+ const value = char - jumpOffset;
3886
+ return value < 0 || value >= branchCount ? -1 : decodeTree[nodeIdx + value] - 1;
3887
+ }
3888
+ let lo = nodeIdx;
3889
+ let hi = lo + branchCount - 1;
3890
+ while (lo <= hi) {
3891
+ const mid = lo + hi >>> 1;
3892
+ const midVal = decodeTree[mid];
3893
+ if (midVal < char) {
3894
+ lo = mid + 1;
3895
+ } else if (midVal > char) {
3896
+ hi = mid - 1;
3897
+ } else {
3898
+ return decodeTree[mid + branchCount];
3899
+ }
3900
+ }
3901
+ return -1;
3902
+ }
3903
+ var htmlDecoder = getDecoder(decode_data_html_default);
3904
+ var xmlDecoder = getDecoder(decode_data_xml_default);
3905
+
3906
+ // node_modules/.pnpm/entities@4.5.0/node_modules/entities/lib/esm/generated/encode-html.js
3907
+ function restoreDiff(arr) {
3908
+ for (let i = 1; i < arr.length; i++) {
3909
+ arr[i][0] += arr[i - 1][0] + 1;
3910
+ }
3911
+ return arr;
3912
+ }
3913
+ var encode_html_default = new Map(/* @__PURE__ */ restoreDiff([[9, "&Tab;"], [0, "&NewLine;"], [22, "&excl;"], [0, "&quot;"], [0, "&num;"], [0, "&dollar;"], [0, "&percnt;"], [0, "&amp;"], [0, "&apos;"], [0, "&lpar;"], [0, "&rpar;"], [0, "&ast;"], [0, "&plus;"], [0, "&comma;"], [1, "&period;"], [0, "&sol;"], [10, "&colon;"], [0, "&semi;"], [0, { v: "&lt;", n: 8402, o: "&nvlt;" }], [0, { v: "&equals;", n: 8421, o: "&bne;" }], [0, { v: "&gt;", n: 8402, o: "&nvgt;" }], [0, "&quest;"], [0, "&commat;"], [26, "&lbrack;"], [0, "&bsol;"], [0, "&rbrack;"], [0, "&Hat;"], [0, "&lowbar;"], [0, "&DiacriticalGrave;"], [5, { n: 106, o: "&fjlig;" }], [20, "&lbrace;"], [0, "&verbar;"], [0, "&rbrace;"], [34, "&nbsp;"], [0, "&iexcl;"], [0, "&cent;"], [0, "&pound;"], [0, "&curren;"], [0, "&yen;"], [0, "&brvbar;"], [0, "&sect;"], [0, "&die;"], [0, "&copy;"], [0, "&ordf;"], [0, "&laquo;"], [0, "&not;"], [0, "&shy;"], [0, "&circledR;"], [0, "&macr;"], [0, "&deg;"], [0, "&PlusMinus;"], [0, "&sup2;"], [0, "&sup3;"], [0, "&acute;"], [0, "&micro;"], [0, "&para;"], [0, "&centerdot;"], [0, "&cedil;"], [0, "&sup1;"], [0, "&ordm;"], [0, "&raquo;"], [0, "&frac14;"], [0, "&frac12;"], [0, "&frac34;"], [0, "&iquest;"], [0, "&Agrave;"], [0, "&Aacute;"], [0, "&Acirc;"], [0, "&Atilde;"], [0, "&Auml;"], [0, "&angst;"], [0, "&AElig;"], [0, "&Ccedil;"], [0, "&Egrave;"], [0, "&Eacute;"], [0, "&Ecirc;"], [0, "&Euml;"], [0, "&Igrave;"], [0, "&Iacute;"], [0, "&Icirc;"], [0, "&Iuml;"], [0, "&ETH;"], [0, "&Ntilde;"], [0, "&Ograve;"], [0, "&Oacute;"], [0, "&Ocirc;"], [0, "&Otilde;"], [0, "&Ouml;"], [0, "&times;"], [0, "&Oslash;"], [0, "&Ugrave;"], [0, "&Uacute;"], [0, "&Ucirc;"], [0, "&Uuml;"], [0, "&Yacute;"], [0, "&THORN;"], [0, "&szlig;"], [0, "&agrave;"], [0, "&aacute;"], [0, "&acirc;"], [0, "&atilde;"], [0, "&auml;"], [0, "&aring;"], [0, "&aelig;"], [0, "&ccedil;"], [0, "&egrave;"], [0, "&eacute;"], [0, "&ecirc;"], [0, "&euml;"], [0, "&igrave;"], [0, "&iacute;"], [0, "&icirc;"], [0, "&iuml;"], [0, "&eth;"], [0, "&ntilde;"], [0, "&ograve;"], [0, "&oacute;"], [0, "&ocirc;"], [0, "&otilde;"], [0, "&ouml;"], [0, "&div;"], [0, "&oslash;"], [0, "&ugrave;"], [0, "&uacute;"], [0, "&ucirc;"], [0, "&uuml;"], [0, "&yacute;"], [0, "&thorn;"], [0, "&yuml;"], [0, "&Amacr;"], [0, "&amacr;"], [0, "&Abreve;"], [0, "&abreve;"], [0, "&Aogon;"], [0, "&aogon;"], [0, "&Cacute;"], [0, "&cacute;"], [0, "&Ccirc;"], [0, "&ccirc;"], [0, "&Cdot;"], [0, "&cdot;"], [0, "&Ccaron;"], [0, "&ccaron;"], [0, "&Dcaron;"], [0, "&dcaron;"], [0, "&Dstrok;"], [0, "&dstrok;"], [0, "&Emacr;"], [0, "&emacr;"], [2, "&Edot;"], [0, "&edot;"], [0, "&Eogon;"], [0, "&eogon;"], [0, "&Ecaron;"], [0, "&ecaron;"], [0, "&Gcirc;"], [0, "&gcirc;"], [0, "&Gbreve;"], [0, "&gbreve;"], [0, "&Gdot;"], [0, "&gdot;"], [0, "&Gcedil;"], [1, "&Hcirc;"], [0, "&hcirc;"], [0, "&Hstrok;"], [0, "&hstrok;"], [0, "&Itilde;"], [0, "&itilde;"], [0, "&Imacr;"], [0, "&imacr;"], [2, "&Iogon;"], [0, "&iogon;"], [0, "&Idot;"], [0, "&imath;"], [0, "&IJlig;"], [0, "&ijlig;"], [0, "&Jcirc;"], [0, "&jcirc;"], [0, "&Kcedil;"], [0, "&kcedil;"], [0, "&kgreen;"], [0, "&Lacute;"], [0, "&lacute;"], [0, "&Lcedil;"], [0, "&lcedil;"], [0, "&Lcaron;"], [0, "&lcaron;"], [0, "&Lmidot;"], [0, "&lmidot;"], [0, "&Lstrok;"], [0, "&lstrok;"], [0, "&Nacute;"], [0, "&nacute;"], [0, "&Ncedil;"], [0, "&ncedil;"], [0, "&Ncaron;"], [0, "&ncaron;"], [0, "&napos;"], [0, "&ENG;"], [0, "&eng;"], [0, "&Omacr;"], [0, "&omacr;"], [2, "&Odblac;"], [0, "&odblac;"], [0, "&OElig;"], [0, "&oelig;"], [0, "&Racute;"], [0, "&racute;"], [0, "&Rcedil;"], [0, "&rcedil;"], [0, "&Rcaron;"], [0, "&rcaron;"], [0, "&Sacute;"], [0, "&sacute;"], [0, "&Scirc;"], [0, "&scirc;"], [0, "&Scedil;"], [0, "&scedil;"], [0, "&Scaron;"], [0, "&scaron;"], [0, "&Tcedil;"], [0, "&tcedil;"], [0, "&Tcaron;"], [0, "&tcaron;"], [0, "&Tstrok;"], [0, "&tstrok;"], [0, "&Utilde;"], [0, "&utilde;"], [0, "&Umacr;"], [0, "&umacr;"], [0, "&Ubreve;"], [0, "&ubreve;"], [0, "&Uring;"], [0, "&uring;"], [0, "&Udblac;"], [0, "&udblac;"], [0, "&Uogon;"], [0, "&uogon;"], [0, "&Wcirc;"], [0, "&wcirc;"], [0, "&Ycirc;"], [0, "&ycirc;"], [0, "&Yuml;"], [0, "&Zacute;"], [0, "&zacute;"], [0, "&Zdot;"], [0, "&zdot;"], [0, "&Zcaron;"], [0, "&zcaron;"], [19, "&fnof;"], [34, "&imped;"], [63, "&gacute;"], [65, "&jmath;"], [142, "&circ;"], [0, "&caron;"], [16, "&breve;"], [0, "&DiacriticalDot;"], [0, "&ring;"], [0, "&ogon;"], [0, "&DiacriticalTilde;"], [0, "&dblac;"], [51, "&DownBreve;"], [127, "&Alpha;"], [0, "&Beta;"], [0, "&Gamma;"], [0, "&Delta;"], [0, "&Epsilon;"], [0, "&Zeta;"], [0, "&Eta;"], [0, "&Theta;"], [0, "&Iota;"], [0, "&Kappa;"], [0, "&Lambda;"], [0, "&Mu;"], [0, "&Nu;"], [0, "&Xi;"], [0, "&Omicron;"], [0, "&Pi;"], [0, "&Rho;"], [1, "&Sigma;"], [0, "&Tau;"], [0, "&Upsilon;"], [0, "&Phi;"], [0, "&Chi;"], [0, "&Psi;"], [0, "&ohm;"], [7, "&alpha;"], [0, "&beta;"], [0, "&gamma;"], [0, "&delta;"], [0, "&epsi;"], [0, "&zeta;"], [0, "&eta;"], [0, "&theta;"], [0, "&iota;"], [0, "&kappa;"], [0, "&lambda;"], [0, "&mu;"], [0, "&nu;"], [0, "&xi;"], [0, "&omicron;"], [0, "&pi;"], [0, "&rho;"], [0, "&sigmaf;"], [0, "&sigma;"], [0, "&tau;"], [0, "&upsi;"], [0, "&phi;"], [0, "&chi;"], [0, "&psi;"], [0, "&omega;"], [7, "&thetasym;"], [0, "&Upsi;"], [2, "&phiv;"], [0, "&piv;"], [5, "&Gammad;"], [0, "&digamma;"], [18, "&kappav;"], [0, "&rhov;"], [3, "&epsiv;"], [0, "&backepsilon;"], [10, "&IOcy;"], [0, "&DJcy;"], [0, "&GJcy;"], [0, "&Jukcy;"], [0, "&DScy;"], [0, "&Iukcy;"], [0, "&YIcy;"], [0, "&Jsercy;"], [0, "&LJcy;"], [0, "&NJcy;"], [0, "&TSHcy;"], [0, "&KJcy;"], [1, "&Ubrcy;"], [0, "&DZcy;"], [0, "&Acy;"], [0, "&Bcy;"], [0, "&Vcy;"], [0, "&Gcy;"], [0, "&Dcy;"], [0, "&IEcy;"], [0, "&ZHcy;"], [0, "&Zcy;"], [0, "&Icy;"], [0, "&Jcy;"], [0, "&Kcy;"], [0, "&Lcy;"], [0, "&Mcy;"], [0, "&Ncy;"], [0, "&Ocy;"], [0, "&Pcy;"], [0, "&Rcy;"], [0, "&Scy;"], [0, "&Tcy;"], [0, "&Ucy;"], [0, "&Fcy;"], [0, "&KHcy;"], [0, "&TScy;"], [0, "&CHcy;"], [0, "&SHcy;"], [0, "&SHCHcy;"], [0, "&HARDcy;"], [0, "&Ycy;"], [0, "&SOFTcy;"], [0, "&Ecy;"], [0, "&YUcy;"], [0, "&YAcy;"], [0, "&acy;"], [0, "&bcy;"], [0, "&vcy;"], [0, "&gcy;"], [0, "&dcy;"], [0, "&iecy;"], [0, "&zhcy;"], [0, "&zcy;"], [0, "&icy;"], [0, "&jcy;"], [0, "&kcy;"], [0, "&lcy;"], [0, "&mcy;"], [0, "&ncy;"], [0, "&ocy;"], [0, "&pcy;"], [0, "&rcy;"], [0, "&scy;"], [0, "&tcy;"], [0, "&ucy;"], [0, "&fcy;"], [0, "&khcy;"], [0, "&tscy;"], [0, "&chcy;"], [0, "&shcy;"], [0, "&shchcy;"], [0, "&hardcy;"], [0, "&ycy;"], [0, "&softcy;"], [0, "&ecy;"], [0, "&yucy;"], [0, "&yacy;"], [1, "&iocy;"], [0, "&djcy;"], [0, "&gjcy;"], [0, "&jukcy;"], [0, "&dscy;"], [0, "&iukcy;"], [0, "&yicy;"], [0, "&jsercy;"], [0, "&ljcy;"], [0, "&njcy;"], [0, "&tshcy;"], [0, "&kjcy;"], [1, "&ubrcy;"], [0, "&dzcy;"], [7074, "&ensp;"], [0, "&emsp;"], [0, "&emsp13;"], [0, "&emsp14;"], [1, "&numsp;"], [0, "&puncsp;"], [0, "&ThinSpace;"], [0, "&hairsp;"], [0, "&NegativeMediumSpace;"], [0, "&zwnj;"], [0, "&zwj;"], [0, "&lrm;"], [0, "&rlm;"], [0, "&dash;"], [2, "&ndash;"], [0, "&mdash;"], [0, "&horbar;"], [0, "&Verbar;"], [1, "&lsquo;"], [0, "&CloseCurlyQuote;"], [0, "&lsquor;"], [1, "&ldquo;"], [0, "&CloseCurlyDoubleQuote;"], [0, "&bdquo;"], [1, "&dagger;"], [0, "&Dagger;"], [0, "&bull;"], [2, "&nldr;"], [0, "&hellip;"], [9, "&permil;"], [0, "&pertenk;"], [0, "&prime;"], [0, "&Prime;"], [0, "&tprime;"], [0, "&backprime;"], [3, "&lsaquo;"], [0, "&rsaquo;"], [3, "&oline;"], [2, "&caret;"], [1, "&hybull;"], [0, "&frasl;"], [10, "&bsemi;"], [7, "&qprime;"], [7, { v: "&MediumSpace;", n: 8202, o: "&ThickSpace;" }], [0, "&NoBreak;"], [0, "&af;"], [0, "&InvisibleTimes;"], [0, "&ic;"], [72, "&euro;"], [46, "&tdot;"], [0, "&DotDot;"], [37, "&complexes;"], [2, "&incare;"], [4, "&gscr;"], [0, "&hamilt;"], [0, "&Hfr;"], [0, "&Hopf;"], [0, "&planckh;"], [0, "&hbar;"], [0, "&imagline;"], [0, "&Ifr;"], [0, "&lagran;"], [0, "&ell;"], [1, "&naturals;"], [0, "&numero;"], [0, "&copysr;"], [0, "&weierp;"], [0, "&Popf;"], [0, "&Qopf;"], [0, "&realine;"], [0, "&real;"], [0, "&reals;"], [0, "&rx;"], [3, "&trade;"], [1, "&integers;"], [2, "&mho;"], [0, "&zeetrf;"], [0, "&iiota;"], [2, "&bernou;"], [0, "&Cayleys;"], [1, "&escr;"], [0, "&Escr;"], [0, "&Fouriertrf;"], [1, "&Mellintrf;"], [0, "&order;"], [0, "&alefsym;"], [0, "&beth;"], [0, "&gimel;"], [0, "&daleth;"], [12, "&CapitalDifferentialD;"], [0, "&dd;"], [0, "&ee;"], [0, "&ii;"], [10, "&frac13;"], [0, "&frac23;"], [0, "&frac15;"], [0, "&frac25;"], [0, "&frac35;"], [0, "&frac45;"], [0, "&frac16;"], [0, "&frac56;"], [0, "&frac18;"], [0, "&frac38;"], [0, "&frac58;"], [0, "&frac78;"], [49, "&larr;"], [0, "&ShortUpArrow;"], [0, "&rarr;"], [0, "&darr;"], [0, "&harr;"], [0, "&updownarrow;"], [0, "&nwarr;"], [0, "&nearr;"], [0, "&LowerRightArrow;"], [0, "&LowerLeftArrow;"], [0, "&nlarr;"], [0, "&nrarr;"], [1, { v: "&rarrw;", n: 824, o: "&nrarrw;" }], [0, "&Larr;"], [0, "&Uarr;"], [0, "&Rarr;"], [0, "&Darr;"], [0, "&larrtl;"], [0, "&rarrtl;"], [0, "&LeftTeeArrow;"], [0, "&mapstoup;"], [0, "&map;"], [0, "&DownTeeArrow;"], [1, "&hookleftarrow;"], [0, "&hookrightarrow;"], [0, "&larrlp;"], [0, "&looparrowright;"], [0, "&harrw;"], [0, "&nharr;"], [1, "&lsh;"], [0, "&rsh;"], [0, "&ldsh;"], [0, "&rdsh;"], [1, "&crarr;"], [0, "&cularr;"], [0, "&curarr;"], [2, "&circlearrowleft;"], [0, "&circlearrowright;"], [0, "&leftharpoonup;"], [0, "&DownLeftVector;"], [0, "&RightUpVector;"], [0, "&LeftUpVector;"], [0, "&rharu;"], [0, "&DownRightVector;"], [0, "&dharr;"], [0, "&dharl;"], [0, "&RightArrowLeftArrow;"], [0, "&udarr;"], [0, "&LeftArrowRightArrow;"], [0, "&leftleftarrows;"], [0, "&upuparrows;"], [0, "&rightrightarrows;"], [0, "&ddarr;"], [0, "&leftrightharpoons;"], [0, "&Equilibrium;"], [0, "&nlArr;"], [0, "&nhArr;"], [0, "&nrArr;"], [0, "&DoubleLeftArrow;"], [0, "&DoubleUpArrow;"], [0, "&DoubleRightArrow;"], [0, "&dArr;"], [0, "&DoubleLeftRightArrow;"], [0, "&DoubleUpDownArrow;"], [0, "&nwArr;"], [0, "&neArr;"], [0, "&seArr;"], [0, "&swArr;"], [0, "&lAarr;"], [0, "&rAarr;"], [1, "&zigrarr;"], [6, "&larrb;"], [0, "&rarrb;"], [15, "&DownArrowUpArrow;"], [7, "&loarr;"], [0, "&roarr;"], [0, "&hoarr;"], [0, "&forall;"], [0, "&comp;"], [0, { v: "&part;", n: 824, o: "&npart;" }], [0, "&exist;"], [0, "&nexist;"], [0, "&empty;"], [1, "&Del;"], [0, "&Element;"], [0, "&NotElement;"], [1, "&ni;"], [0, "&notni;"], [2, "&prod;"], [0, "&coprod;"], [0, "&sum;"], [0, "&minus;"], [0, "&MinusPlus;"], [0, "&dotplus;"], [1, "&Backslash;"], [0, "&lowast;"], [0, "&compfn;"], [1, "&radic;"], [2, "&prop;"], [0, "&infin;"], [0, "&angrt;"], [0, { v: "&ang;", n: 8402, o: "&nang;" }], [0, "&angmsd;"], [0, "&angsph;"], [0, "&mid;"], [0, "&nmid;"], [0, "&DoubleVerticalBar;"], [0, "&NotDoubleVerticalBar;"], [0, "&and;"], [0, "&or;"], [0, { v: "&cap;", n: 65024, o: "&caps;" }], [0, { v: "&cup;", n: 65024, o: "&cups;" }], [0, "&int;"], [0, "&Int;"], [0, "&iiint;"], [0, "&conint;"], [0, "&Conint;"], [0, "&Cconint;"], [0, "&cwint;"], [0, "&ClockwiseContourIntegral;"], [0, "&awconint;"], [0, "&there4;"], [0, "&becaus;"], [0, "&ratio;"], [0, "&Colon;"], [0, "&dotminus;"], [1, "&mDDot;"], [0, "&homtht;"], [0, { v: "&sim;", n: 8402, o: "&nvsim;" }], [0, { v: "&backsim;", n: 817, o: "&race;" }], [0, { v: "&ac;", n: 819, o: "&acE;" }], [0, "&acd;"], [0, "&VerticalTilde;"], [0, "&NotTilde;"], [0, { v: "&eqsim;", n: 824, o: "&nesim;" }], [0, "&sime;"], [0, "&NotTildeEqual;"], [0, "&cong;"], [0, "&simne;"], [0, "&ncong;"], [0, "&ap;"], [0, "&nap;"], [0, "&ape;"], [0, { v: "&apid;", n: 824, o: "&napid;" }], [0, "&backcong;"], [0, { v: "&asympeq;", n: 8402, o: "&nvap;" }], [0, { v: "&bump;", n: 824, o: "&nbump;" }], [0, { v: "&bumpe;", n: 824, o: "&nbumpe;" }], [0, { v: "&doteq;", n: 824, o: "&nedot;" }], [0, "&doteqdot;"], [0, "&efDot;"], [0, "&erDot;"], [0, "&Assign;"], [0, "&ecolon;"], [0, "&ecir;"], [0, "&circeq;"], [1, "&wedgeq;"], [0, "&veeeq;"], [1, "&triangleq;"], [2, "&equest;"], [0, "&ne;"], [0, { v: "&Congruent;", n: 8421, o: "&bnequiv;" }], [0, "&nequiv;"], [1, { v: "&le;", n: 8402, o: "&nvle;" }], [0, { v: "&ge;", n: 8402, o: "&nvge;" }], [0, { v: "&lE;", n: 824, o: "&nlE;" }], [0, { v: "&gE;", n: 824, o: "&ngE;" }], [0, { v: "&lnE;", n: 65024, o: "&lvertneqq;" }], [0, { v: "&gnE;", n: 65024, o: "&gvertneqq;" }], [0, { v: "&ll;", n: new Map(/* @__PURE__ */ restoreDiff([[824, "&nLtv;"], [7577, "&nLt;"]])) }], [0, { v: "&gg;", n: new Map(/* @__PURE__ */ restoreDiff([[824, "&nGtv;"], [7577, "&nGt;"]])) }], [0, "&between;"], [0, "&NotCupCap;"], [0, "&nless;"], [0, "&ngt;"], [0, "&nle;"], [0, "&nge;"], [0, "&lesssim;"], [0, "&GreaterTilde;"], [0, "&nlsim;"], [0, "&ngsim;"], [0, "&LessGreater;"], [0, "&gl;"], [0, "&NotLessGreater;"], [0, "&NotGreaterLess;"], [0, "&pr;"], [0, "&sc;"], [0, "&prcue;"], [0, "&sccue;"], [0, "&PrecedesTilde;"], [0, { v: "&scsim;", n: 824, o: "&NotSucceedsTilde;" }], [0, "&NotPrecedes;"], [0, "&NotSucceeds;"], [0, { v: "&sub;", n: 8402, o: "&NotSubset;" }], [0, { v: "&sup;", n: 8402, o: "&NotSuperset;" }], [0, "&nsub;"], [0, "&nsup;"], [0, "&sube;"], [0, "&supe;"], [0, "&NotSubsetEqual;"], [0, "&NotSupersetEqual;"], [0, { v: "&subne;", n: 65024, o: "&varsubsetneq;" }], [0, { v: "&supne;", n: 65024, o: "&varsupsetneq;" }], [1, "&cupdot;"], [0, "&UnionPlus;"], [0, { v: "&sqsub;", n: 824, o: "&NotSquareSubset;" }], [0, { v: "&sqsup;", n: 824, o: "&NotSquareSuperset;" }], [0, "&sqsube;"], [0, "&sqsupe;"], [0, { v: "&sqcap;", n: 65024, o: "&sqcaps;" }], [0, { v: "&sqcup;", n: 65024, o: "&sqcups;" }], [0, "&CirclePlus;"], [0, "&CircleMinus;"], [0, "&CircleTimes;"], [0, "&osol;"], [0, "&CircleDot;"], [0, "&circledcirc;"], [0, "&circledast;"], [1, "&circleddash;"], [0, "&boxplus;"], [0, "&boxminus;"], [0, "&boxtimes;"], [0, "&dotsquare;"], [0, "&RightTee;"], [0, "&dashv;"], [0, "&DownTee;"], [0, "&bot;"], [1, "&models;"], [0, "&DoubleRightTee;"], [0, "&Vdash;"], [0, "&Vvdash;"], [0, "&VDash;"], [0, "&nvdash;"], [0, "&nvDash;"], [0, "&nVdash;"], [0, "&nVDash;"], [0, "&prurel;"], [1, "&LeftTriangle;"], [0, "&RightTriangle;"], [0, { v: "&LeftTriangleEqual;", n: 8402, o: "&nvltrie;" }], [0, { v: "&RightTriangleEqual;", n: 8402, o: "&nvrtrie;" }], [0, "&origof;"], [0, "&imof;"], [0, "&multimap;"], [0, "&hercon;"], [0, "&intcal;"], [0, "&veebar;"], [1, "&barvee;"], [0, "&angrtvb;"], [0, "&lrtri;"], [0, "&bigwedge;"], [0, "&bigvee;"], [0, "&bigcap;"], [0, "&bigcup;"], [0, "&diam;"], [0, "&sdot;"], [0, "&sstarf;"], [0, "&divideontimes;"], [0, "&bowtie;"], [0, "&ltimes;"], [0, "&rtimes;"], [0, "&leftthreetimes;"], [0, "&rightthreetimes;"], [0, "&backsimeq;"], [0, "&curlyvee;"], [0, "&curlywedge;"], [0, "&Sub;"], [0, "&Sup;"], [0, "&Cap;"], [0, "&Cup;"], [0, "&fork;"], [0, "&epar;"], [0, "&lessdot;"], [0, "&gtdot;"], [0, { v: "&Ll;", n: 824, o: "&nLl;" }], [0, { v: "&Gg;", n: 824, o: "&nGg;" }], [0, { v: "&leg;", n: 65024, o: "&lesg;" }], [0, { v: "&gel;", n: 65024, o: "&gesl;" }], [2, "&cuepr;"], [0, "&cuesc;"], [0, "&NotPrecedesSlantEqual;"], [0, "&NotSucceedsSlantEqual;"], [0, "&NotSquareSubsetEqual;"], [0, "&NotSquareSupersetEqual;"], [2, "&lnsim;"], [0, "&gnsim;"], [0, "&precnsim;"], [0, "&scnsim;"], [0, "&nltri;"], [0, "&NotRightTriangle;"], [0, "&nltrie;"], [0, "&NotRightTriangleEqual;"], [0, "&vellip;"], [0, "&ctdot;"], [0, "&utdot;"], [0, "&dtdot;"], [0, "&disin;"], [0, "&isinsv;"], [0, "&isins;"], [0, { v: "&isindot;", n: 824, o: "&notindot;" }], [0, "&notinvc;"], [0, "&notinvb;"], [1, { v: "&isinE;", n: 824, o: "&notinE;" }], [0, "&nisd;"], [0, "&xnis;"], [0, "&nis;"], [0, "&notnivc;"], [0, "&notnivb;"], [6, "&barwed;"], [0, "&Barwed;"], [1, "&lceil;"], [0, "&rceil;"], [0, "&LeftFloor;"], [0, "&rfloor;"], [0, "&drcrop;"], [0, "&dlcrop;"], [0, "&urcrop;"], [0, "&ulcrop;"], [0, "&bnot;"], [1, "&profline;"], [0, "&profsurf;"], [1, "&telrec;"], [0, "&target;"], [5, "&ulcorn;"], [0, "&urcorn;"], [0, "&dlcorn;"], [0, "&drcorn;"], [2, "&frown;"], [0, "&smile;"], [9, "&cylcty;"], [0, "&profalar;"], [7, "&topbot;"], [6, "&ovbar;"], [1, "&solbar;"], [60, "&angzarr;"], [51, "&lmoustache;"], [0, "&rmoustache;"], [2, "&OverBracket;"], [0, "&bbrk;"], [0, "&bbrktbrk;"], [37, "&OverParenthesis;"], [0, "&UnderParenthesis;"], [0, "&OverBrace;"], [0, "&UnderBrace;"], [2, "&trpezium;"], [4, "&elinters;"], [59, "&blank;"], [164, "&circledS;"], [55, "&boxh;"], [1, "&boxv;"], [9, "&boxdr;"], [3, "&boxdl;"], [3, "&boxur;"], [3, "&boxul;"], [3, "&boxvr;"], [7, "&boxvl;"], [7, "&boxhd;"], [7, "&boxhu;"], [7, "&boxvh;"], [19, "&boxH;"], [0, "&boxV;"], [0, "&boxdR;"], [0, "&boxDr;"], [0, "&boxDR;"], [0, "&boxdL;"], [0, "&boxDl;"], [0, "&boxDL;"], [0, "&boxuR;"], [0, "&boxUr;"], [0, "&boxUR;"], [0, "&boxuL;"], [0, "&boxUl;"], [0, "&boxUL;"], [0, "&boxvR;"], [0, "&boxVr;"], [0, "&boxVR;"], [0, "&boxvL;"], [0, "&boxVl;"], [0, "&boxVL;"], [0, "&boxHd;"], [0, "&boxhD;"], [0, "&boxHD;"], [0, "&boxHu;"], [0, "&boxhU;"], [0, "&boxHU;"], [0, "&boxvH;"], [0, "&boxVh;"], [0, "&boxVH;"], [19, "&uhblk;"], [3, "&lhblk;"], [3, "&block;"], [8, "&blk14;"], [0, "&blk12;"], [0, "&blk34;"], [13, "&square;"], [8, "&blacksquare;"], [0, "&EmptyVerySmallSquare;"], [1, "&rect;"], [0, "&marker;"], [2, "&fltns;"], [1, "&bigtriangleup;"], [0, "&blacktriangle;"], [0, "&triangle;"], [2, "&blacktriangleright;"], [0, "&rtri;"], [3, "&bigtriangledown;"], [0, "&blacktriangledown;"], [0, "&dtri;"], [2, "&blacktriangleleft;"], [0, "&ltri;"], [6, "&loz;"], [0, "&cir;"], [32, "&tridot;"], [2, "&bigcirc;"], [8, "&ultri;"], [0, "&urtri;"], [0, "&lltri;"], [0, "&EmptySmallSquare;"], [0, "&FilledSmallSquare;"], [8, "&bigstar;"], [0, "&star;"], [7, "&phone;"], [49, "&female;"], [1, "&male;"], [29, "&spades;"], [2, "&clubs;"], [1, "&hearts;"], [0, "&diamondsuit;"], [3, "&sung;"], [2, "&flat;"], [0, "&natural;"], [0, "&sharp;"], [163, "&check;"], [3, "&cross;"], [8, "&malt;"], [21, "&sext;"], [33, "&VerticalSeparator;"], [25, "&lbbrk;"], [0, "&rbbrk;"], [84, "&bsolhsub;"], [0, "&suphsol;"], [28, "&LeftDoubleBracket;"], [0, "&RightDoubleBracket;"], [0, "&lang;"], [0, "&rang;"], [0, "&Lang;"], [0, "&Rang;"], [0, "&loang;"], [0, "&roang;"], [7, "&longleftarrow;"], [0, "&longrightarrow;"], [0, "&longleftrightarrow;"], [0, "&DoubleLongLeftArrow;"], [0, "&DoubleLongRightArrow;"], [0, "&DoubleLongLeftRightArrow;"], [1, "&longmapsto;"], [2, "&dzigrarr;"], [258, "&nvlArr;"], [0, "&nvrArr;"], [0, "&nvHarr;"], [0, "&Map;"], [6, "&lbarr;"], [0, "&bkarow;"], [0, "&lBarr;"], [0, "&dbkarow;"], [0, "&drbkarow;"], [0, "&DDotrahd;"], [0, "&UpArrowBar;"], [0, "&DownArrowBar;"], [2, "&Rarrtl;"], [2, "&latail;"], [0, "&ratail;"], [0, "&lAtail;"], [0, "&rAtail;"], [0, "&larrfs;"], [0, "&rarrfs;"], [0, "&larrbfs;"], [0, "&rarrbfs;"], [2, "&nwarhk;"], [0, "&nearhk;"], [0, "&hksearow;"], [0, "&hkswarow;"], [0, "&nwnear;"], [0, "&nesear;"], [0, "&seswar;"], [0, "&swnwar;"], [8, { v: "&rarrc;", n: 824, o: "&nrarrc;" }], [1, "&cudarrr;"], [0, "&ldca;"], [0, "&rdca;"], [0, "&cudarrl;"], [0, "&larrpl;"], [2, "&curarrm;"], [0, "&cularrp;"], [7, "&rarrpl;"], [2, "&harrcir;"], [0, "&Uarrocir;"], [0, "&lurdshar;"], [0, "&ldrushar;"], [2, "&LeftRightVector;"], [0, "&RightUpDownVector;"], [0, "&DownLeftRightVector;"], [0, "&LeftUpDownVector;"], [0, "&LeftVectorBar;"], [0, "&RightVectorBar;"], [0, "&RightUpVectorBar;"], [0, "&RightDownVectorBar;"], [0, "&DownLeftVectorBar;"], [0, "&DownRightVectorBar;"], [0, "&LeftUpVectorBar;"], [0, "&LeftDownVectorBar;"], [0, "&LeftTeeVector;"], [0, "&RightTeeVector;"], [0, "&RightUpTeeVector;"], [0, "&RightDownTeeVector;"], [0, "&DownLeftTeeVector;"], [0, "&DownRightTeeVector;"], [0, "&LeftUpTeeVector;"], [0, "&LeftDownTeeVector;"], [0, "&lHar;"], [0, "&uHar;"], [0, "&rHar;"], [0, "&dHar;"], [0, "&luruhar;"], [0, "&ldrdhar;"], [0, "&ruluhar;"], [0, "&rdldhar;"], [0, "&lharul;"], [0, "&llhard;"], [0, "&rharul;"], [0, "&lrhard;"], [0, "&udhar;"], [0, "&duhar;"], [0, "&RoundImplies;"], [0, "&erarr;"], [0, "&simrarr;"], [0, "&larrsim;"], [0, "&rarrsim;"], [0, "&rarrap;"], [0, "&ltlarr;"], [1, "&gtrarr;"], [0, "&subrarr;"], [1, "&suplarr;"], [0, "&lfisht;"], [0, "&rfisht;"], [0, "&ufisht;"], [0, "&dfisht;"], [5, "&lopar;"], [0, "&ropar;"], [4, "&lbrke;"], [0, "&rbrke;"], [0, "&lbrkslu;"], [0, "&rbrksld;"], [0, "&lbrksld;"], [0, "&rbrkslu;"], [0, "&langd;"], [0, "&rangd;"], [0, "&lparlt;"], [0, "&rpargt;"], [0, "&gtlPar;"], [0, "&ltrPar;"], [3, "&vzigzag;"], [1, "&vangrt;"], [0, "&angrtvbd;"], [6, "&ange;"], [0, "&range;"], [0, "&dwangle;"], [0, "&uwangle;"], [0, "&angmsdaa;"], [0, "&angmsdab;"], [0, "&angmsdac;"], [0, "&angmsdad;"], [0, "&angmsdae;"], [0, "&angmsdaf;"], [0, "&angmsdag;"], [0, "&angmsdah;"], [0, "&bemptyv;"], [0, "&demptyv;"], [0, "&cemptyv;"], [0, "&raemptyv;"], [0, "&laemptyv;"], [0, "&ohbar;"], [0, "&omid;"], [0, "&opar;"], [1, "&operp;"], [1, "&olcross;"], [0, "&odsold;"], [1, "&olcir;"], [0, "&ofcir;"], [0, "&olt;"], [0, "&ogt;"], [0, "&cirscir;"], [0, "&cirE;"], [0, "&solb;"], [0, "&bsolb;"], [3, "&boxbox;"], [3, "&trisb;"], [0, "&rtriltri;"], [0, { v: "&LeftTriangleBar;", n: 824, o: "&NotLeftTriangleBar;" }], [0, { v: "&RightTriangleBar;", n: 824, o: "&NotRightTriangleBar;" }], [11, "&iinfin;"], [0, "&infintie;"], [0, "&nvinfin;"], [4, "&eparsl;"], [0, "&smeparsl;"], [0, "&eqvparsl;"], [5, "&blacklozenge;"], [8, "&RuleDelayed;"], [1, "&dsol;"], [9, "&bigodot;"], [0, "&bigoplus;"], [0, "&bigotimes;"], [1, "&biguplus;"], [1, "&bigsqcup;"], [5, "&iiiint;"], [0, "&fpartint;"], [2, "&cirfnint;"], [0, "&awint;"], [0, "&rppolint;"], [0, "&scpolint;"], [0, "&npolint;"], [0, "&pointint;"], [0, "&quatint;"], [0, "&intlarhk;"], [10, "&pluscir;"], [0, "&plusacir;"], [0, "&simplus;"], [0, "&plusdu;"], [0, "&plussim;"], [0, "&plustwo;"], [1, "&mcomma;"], [0, "&minusdu;"], [2, "&loplus;"], [0, "&roplus;"], [0, "&Cross;"], [0, "&timesd;"], [0, "&timesbar;"], [1, "&smashp;"], [0, "&lotimes;"], [0, "&rotimes;"], [0, "&otimesas;"], [0, "&Otimes;"], [0, "&odiv;"], [0, "&triplus;"], [0, "&triminus;"], [0, "&tritime;"], [0, "&intprod;"], [2, "&amalg;"], [0, "&capdot;"], [1, "&ncup;"], [0, "&ncap;"], [0, "&capand;"], [0, "&cupor;"], [0, "&cupcap;"], [0, "&capcup;"], [0, "&cupbrcap;"], [0, "&capbrcup;"], [0, "&cupcup;"], [0, "&capcap;"], [0, "&ccups;"], [0, "&ccaps;"], [2, "&ccupssm;"], [2, "&And;"], [0, "&Or;"], [0, "&andand;"], [0, "&oror;"], [0, "&orslope;"], [0, "&andslope;"], [1, "&andv;"], [0, "&orv;"], [0, "&andd;"], [0, "&ord;"], [1, "&wedbar;"], [6, "&sdote;"], [3, "&simdot;"], [2, { v: "&congdot;", n: 824, o: "&ncongdot;" }], [0, "&easter;"], [0, "&apacir;"], [0, { v: "&apE;", n: 824, o: "&napE;" }], [0, "&eplus;"], [0, "&pluse;"], [0, "&Esim;"], [0, "&Colone;"], [0, "&Equal;"], [1, "&ddotseq;"], [0, "&equivDD;"], [0, "&ltcir;"], [0, "&gtcir;"], [0, "&ltquest;"], [0, "&gtquest;"], [0, { v: "&leqslant;", n: 824, o: "&nleqslant;" }], [0, { v: "&geqslant;", n: 824, o: "&ngeqslant;" }], [0, "&lesdot;"], [0, "&gesdot;"], [0, "&lesdoto;"], [0, "&gesdoto;"], [0, "&lesdotor;"], [0, "&gesdotol;"], [0, "&lap;"], [0, "&gap;"], [0, "&lne;"], [0, "&gne;"], [0, "&lnap;"], [0, "&gnap;"], [0, "&lEg;"], [0, "&gEl;"], [0, "&lsime;"], [0, "&gsime;"], [0, "&lsimg;"], [0, "&gsiml;"], [0, "&lgE;"], [0, "&glE;"], [0, "&lesges;"], [0, "&gesles;"], [0, "&els;"], [0, "&egs;"], [0, "&elsdot;"], [0, "&egsdot;"], [0, "&el;"], [0, "&eg;"], [2, "&siml;"], [0, "&simg;"], [0, "&simlE;"], [0, "&simgE;"], [0, { v: "&LessLess;", n: 824, o: "&NotNestedLessLess;" }], [0, { v: "&GreaterGreater;", n: 824, o: "&NotNestedGreaterGreater;" }], [1, "&glj;"], [0, "&gla;"], [0, "&ltcc;"], [0, "&gtcc;"], [0, "&lescc;"], [0, "&gescc;"], [0, "&smt;"], [0, "&lat;"], [0, { v: "&smte;", n: 65024, o: "&smtes;" }], [0, { v: "&late;", n: 65024, o: "&lates;" }], [0, "&bumpE;"], [0, { v: "&PrecedesEqual;", n: 824, o: "&NotPrecedesEqual;" }], [0, { v: "&sce;", n: 824, o: "&NotSucceedsEqual;" }], [2, "&prE;"], [0, "&scE;"], [0, "&precneqq;"], [0, "&scnE;"], [0, "&prap;"], [0, "&scap;"], [0, "&precnapprox;"], [0, "&scnap;"], [0, "&Pr;"], [0, "&Sc;"], [0, "&subdot;"], [0, "&supdot;"], [0, "&subplus;"], [0, "&supplus;"], [0, "&submult;"], [0, "&supmult;"], [0, "&subedot;"], [0, "&supedot;"], [0, { v: "&subE;", n: 824, o: "&nsubE;" }], [0, { v: "&supE;", n: 824, o: "&nsupE;" }], [0, "&subsim;"], [0, "&supsim;"], [2, { v: "&subnE;", n: 65024, o: "&varsubsetneqq;" }], [0, { v: "&supnE;", n: 65024, o: "&varsupsetneqq;" }], [2, "&csub;"], [0, "&csup;"], [0, "&csube;"], [0, "&csupe;"], [0, "&subsup;"], [0, "&supsub;"], [0, "&subsub;"], [0, "&supsup;"], [0, "&suphsub;"], [0, "&supdsub;"], [0, "&forkv;"], [0, "&topfork;"], [0, "&mlcp;"], [8, "&Dashv;"], [1, "&Vdashl;"], [0, "&Barv;"], [0, "&vBar;"], [0, "&vBarv;"], [1, "&Vbar;"], [0, "&Not;"], [0, "&bNot;"], [0, "&rnmid;"], [0, "&cirmid;"], [0, "&midcir;"], [0, "&topcir;"], [0, "&nhpar;"], [0, "&parsim;"], [9, { v: "&parsl;", n: 8421, o: "&nparsl;" }], [44343, { n: new Map(/* @__PURE__ */ restoreDiff([[56476, "&Ascr;"], [1, "&Cscr;"], [0, "&Dscr;"], [2, "&Gscr;"], [2, "&Jscr;"], [0, "&Kscr;"], [2, "&Nscr;"], [0, "&Oscr;"], [0, "&Pscr;"], [0, "&Qscr;"], [1, "&Sscr;"], [0, "&Tscr;"], [0, "&Uscr;"], [0, "&Vscr;"], [0, "&Wscr;"], [0, "&Xscr;"], [0, "&Yscr;"], [0, "&Zscr;"], [0, "&ascr;"], [0, "&bscr;"], [0, "&cscr;"], [0, "&dscr;"], [1, "&fscr;"], [1, "&hscr;"], [0, "&iscr;"], [0, "&jscr;"], [0, "&kscr;"], [0, "&lscr;"], [0, "&mscr;"], [0, "&nscr;"], [1, "&pscr;"], [0, "&qscr;"], [0, "&rscr;"], [0, "&sscr;"], [0, "&tscr;"], [0, "&uscr;"], [0, "&vscr;"], [0, "&wscr;"], [0, "&xscr;"], [0, "&yscr;"], [0, "&zscr;"], [52, "&Afr;"], [0, "&Bfr;"], [1, "&Dfr;"], [0, "&Efr;"], [0, "&Ffr;"], [0, "&Gfr;"], [2, "&Jfr;"], [0, "&Kfr;"], [0, "&Lfr;"], [0, "&Mfr;"], [0, "&Nfr;"], [0, "&Ofr;"], [0, "&Pfr;"], [0, "&Qfr;"], [1, "&Sfr;"], [0, "&Tfr;"], [0, "&Ufr;"], [0, "&Vfr;"], [0, "&Wfr;"], [0, "&Xfr;"], [0, "&Yfr;"], [1, "&afr;"], [0, "&bfr;"], [0, "&cfr;"], [0, "&dfr;"], [0, "&efr;"], [0, "&ffr;"], [0, "&gfr;"], [0, "&hfr;"], [0, "&ifr;"], [0, "&jfr;"], [0, "&kfr;"], [0, "&lfr;"], [0, "&mfr;"], [0, "&nfr;"], [0, "&ofr;"], [0, "&pfr;"], [0, "&qfr;"], [0, "&rfr;"], [0, "&sfr;"], [0, "&tfr;"], [0, "&ufr;"], [0, "&vfr;"], [0, "&wfr;"], [0, "&xfr;"], [0, "&yfr;"], [0, "&zfr;"], [0, "&Aopf;"], [0, "&Bopf;"], [1, "&Dopf;"], [0, "&Eopf;"], [0, "&Fopf;"], [0, "&Gopf;"], [1, "&Iopf;"], [0, "&Jopf;"], [0, "&Kopf;"], [0, "&Lopf;"], [0, "&Mopf;"], [1, "&Oopf;"], [3, "&Sopf;"], [0, "&Topf;"], [0, "&Uopf;"], [0, "&Vopf;"], [0, "&Wopf;"], [0, "&Xopf;"], [0, "&Yopf;"], [1, "&aopf;"], [0, "&bopf;"], [0, "&copf;"], [0, "&dopf;"], [0, "&eopf;"], [0, "&fopf;"], [0, "&gopf;"], [0, "&hopf;"], [0, "&iopf;"], [0, "&jopf;"], [0, "&kopf;"], [0, "&lopf;"], [0, "&mopf;"], [0, "&nopf;"], [0, "&oopf;"], [0, "&popf;"], [0, "&qopf;"], [0, "&ropf;"], [0, "&sopf;"], [0, "&topf;"], [0, "&uopf;"], [0, "&vopf;"], [0, "&wopf;"], [0, "&xopf;"], [0, "&yopf;"], [0, "&zopf;"]])) }], [8906, "&fflig;"], [0, "&filig;"], [0, "&fllig;"], [0, "&ffilig;"], [0, "&ffllig;"]]));
3914
+
3915
+ // node_modules/.pnpm/entities@4.5.0/node_modules/entities/lib/esm/escape.js
3916
+ var xmlCodeMap = /* @__PURE__ */ new Map([
3917
+ [34, "&quot;"],
3918
+ [38, "&amp;"],
3919
+ [39, "&apos;"],
3920
+ [60, "&lt;"],
3921
+ [62, "&gt;"]
3922
+ ]);
3923
+ var getCodePoint = (
3924
+ // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
3925
+ String.prototype.codePointAt != null ? (str, index) => str.codePointAt(index) : (
3926
+ // http://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae
3927
+ (c, index) => (c.charCodeAt(index) & 64512) === 55296 ? (c.charCodeAt(index) - 55296) * 1024 + c.charCodeAt(index + 1) - 56320 + 65536 : c.charCodeAt(index)
3928
+ )
3929
+ );
3930
+ function getEscaper(regex, map) {
3931
+ return function escape2(data) {
3932
+ let match;
3933
+ let lastIdx = 0;
3934
+ let result = "";
3935
+ while (match = regex.exec(data)) {
3936
+ if (lastIdx !== match.index) {
3937
+ result += data.substring(lastIdx, match.index);
3938
+ }
3939
+ result += map.get(match[0].charCodeAt(0));
3940
+ lastIdx = match.index + 1;
3941
+ }
3942
+ return result + data.substring(lastIdx);
3943
+ };
3944
+ }
3945
+ var escapeUTF8 = getEscaper(/[&<>'"]/g, xmlCodeMap);
3946
+ var escapeAttribute = getEscaper(/["&\u00A0]/g, /* @__PURE__ */ new Map([
3947
+ [34, "&quot;"],
3948
+ [38, "&amp;"],
3949
+ [160, "&nbsp;"]
3950
+ ]));
3951
+ var escapeText = getEscaper(/[&<>\u00A0]/g, /* @__PURE__ */ new Map([
3952
+ [38, "&amp;"],
3953
+ [60, "&lt;"],
3954
+ [62, "&gt;"],
3955
+ [160, "&nbsp;"]
3956
+ ]));
3957
+
3958
+ // node_modules/.pnpm/entities@4.5.0/node_modules/entities/lib/esm/index.js
3959
+ var EntityLevel;
3960
+ (function(EntityLevel2) {
3961
+ EntityLevel2[EntityLevel2["XML"] = 0] = "XML";
3962
+ EntityLevel2[EntityLevel2["HTML"] = 1] = "HTML";
3963
+ })(EntityLevel || (EntityLevel = {}));
3964
+ var EncodingMode;
3965
+ (function(EncodingMode2) {
3966
+ EncodingMode2[EncodingMode2["UTF8"] = 0] = "UTF8";
3967
+ EncodingMode2[EncodingMode2["ASCII"] = 1] = "ASCII";
3968
+ EncodingMode2[EncodingMode2["Extensive"] = 2] = "Extensive";
3969
+ EncodingMode2[EncodingMode2["Attribute"] = 3] = "Attribute";
3970
+ EncodingMode2[EncodingMode2["Text"] = 4] = "Text";
3971
+ })(EncodingMode || (EncodingMode = {}));
3972
+
3973
+ // node_modules/.pnpm/dom-serializer@2.0.0/node_modules/dom-serializer/lib/esm/foreignNames.js
3974
+ var elementNames = new Map([
3975
+ "altGlyph",
3976
+ "altGlyphDef",
3977
+ "altGlyphItem",
3978
+ "animateColor",
3979
+ "animateMotion",
3980
+ "animateTransform",
3981
+ "clipPath",
3982
+ "feBlend",
3983
+ "feColorMatrix",
3984
+ "feComponentTransfer",
3985
+ "feComposite",
3986
+ "feConvolveMatrix",
3987
+ "feDiffuseLighting",
3988
+ "feDisplacementMap",
3989
+ "feDistantLight",
3990
+ "feDropShadow",
3991
+ "feFlood",
3992
+ "feFuncA",
3993
+ "feFuncB",
3994
+ "feFuncG",
3995
+ "feFuncR",
3996
+ "feGaussianBlur",
3997
+ "feImage",
3998
+ "feMerge",
3999
+ "feMergeNode",
4000
+ "feMorphology",
4001
+ "feOffset",
4002
+ "fePointLight",
4003
+ "feSpecularLighting",
4004
+ "feSpotLight",
4005
+ "feTile",
4006
+ "feTurbulence",
4007
+ "foreignObject",
4008
+ "glyphRef",
4009
+ "linearGradient",
4010
+ "radialGradient",
4011
+ "textPath"
4012
+ ].map((val) => [val.toLowerCase(), val]));
4013
+ var attributeNames = new Map([
4014
+ "definitionURL",
4015
+ "attributeName",
4016
+ "attributeType",
4017
+ "baseFrequency",
4018
+ "baseProfile",
4019
+ "calcMode",
4020
+ "clipPathUnits",
4021
+ "diffuseConstant",
4022
+ "edgeMode",
4023
+ "filterUnits",
4024
+ "glyphRef",
4025
+ "gradientTransform",
4026
+ "gradientUnits",
4027
+ "kernelMatrix",
4028
+ "kernelUnitLength",
4029
+ "keyPoints",
4030
+ "keySplines",
4031
+ "keyTimes",
4032
+ "lengthAdjust",
4033
+ "limitingConeAngle",
4034
+ "markerHeight",
4035
+ "markerUnits",
4036
+ "markerWidth",
4037
+ "maskContentUnits",
4038
+ "maskUnits",
4039
+ "numOctaves",
4040
+ "pathLength",
4041
+ "patternContentUnits",
4042
+ "patternTransform",
4043
+ "patternUnits",
4044
+ "pointsAtX",
4045
+ "pointsAtY",
4046
+ "pointsAtZ",
4047
+ "preserveAlpha",
4048
+ "preserveAspectRatio",
4049
+ "primitiveUnits",
4050
+ "refX",
4051
+ "refY",
4052
+ "repeatCount",
4053
+ "repeatDur",
4054
+ "requiredExtensions",
4055
+ "requiredFeatures",
4056
+ "specularConstant",
4057
+ "specularExponent",
4058
+ "spreadMethod",
4059
+ "startOffset",
4060
+ "stdDeviation",
4061
+ "stitchTiles",
4062
+ "surfaceScale",
4063
+ "systemLanguage",
4064
+ "tableValues",
4065
+ "targetX",
4066
+ "targetY",
4067
+ "textLength",
4068
+ "viewBox",
4069
+ "viewTarget",
4070
+ "xChannelSelector",
4071
+ "yChannelSelector",
4072
+ "zoomAndPan"
4073
+ ].map((val) => [val.toLowerCase(), val]));
4074
+
4075
+ // node_modules/.pnpm/domutils@3.2.2/node_modules/domutils/lib/esm/helpers.js
4076
+ var DocumentPosition;
4077
+ (function(DocumentPosition2) {
4078
+ DocumentPosition2[DocumentPosition2["DISCONNECTED"] = 1] = "DISCONNECTED";
4079
+ DocumentPosition2[DocumentPosition2["PRECEDING"] = 2] = "PRECEDING";
4080
+ DocumentPosition2[DocumentPosition2["FOLLOWING"] = 4] = "FOLLOWING";
4081
+ DocumentPosition2[DocumentPosition2["CONTAINS"] = 8] = "CONTAINS";
4082
+ DocumentPosition2[DocumentPosition2["CONTAINED_BY"] = 16] = "CONTAINED_BY";
4083
+ })(DocumentPosition || (DocumentPosition = {}));
4084
+
4085
+ // node_modules/.pnpm/htmlparser2@10.1.0/node_modules/htmlparser2/dist/esm/index.js
4086
+ function parseDocument(data, options) {
4087
+ const handler = new DomHandler(void 0, options);
4088
+ new Parser(handler, options).end(data);
4089
+ return handler.root;
4090
+ }
4091
+
4092
+ // src/html-parser.ts
4093
+ function decompileHTML(html) {
4094
+ const diagnostics = [];
4095
+ const story = createStory();
4096
+ const doc = parseDocument(html);
4097
+ const twine2Data = findElement(doc, "tw-storydata");
4098
+ if (twine2Data) {
4099
+ decompileTwine2(twine2Data, story, diagnostics);
4100
+ return { story, diagnostics };
4101
+ }
4102
+ const twine1Data = findElementByIdPattern(doc, /^store(?:-a|A)rea$/);
4103
+ if (twine1Data) {
4104
+ decompileTwine1(twine1Data, story, diagnostics);
4105
+ return { story, diagnostics };
4106
+ }
4107
+ diagnostics.push({ level: "error", message: "Malformed HTML source; story data not found." });
4108
+ return { story, diagnostics };
4109
+ }
4110
+ function decompileTwine2(storyData, story, diagnostics) {
4111
+ let startnode = 0;
4112
+ const attrs = storyData.attribs ?? {};
4113
+ if (attrs["name"]) story.name = attrs["name"];
4114
+ if (attrs["startnode"]) {
4115
+ const parsed = parseInt(attrs["startnode"], 10);
4116
+ if (Number.isNaN(parsed)) {
4117
+ diagnostics.push({
4118
+ level: "warning",
4119
+ message: `Cannot parse "tw-storydata" content attribute "startnode" as an integer; value "${attrs["startnode"]}".`
4120
+ });
4121
+ } else {
4122
+ startnode = parsed;
4123
+ }
4124
+ }
4125
+ if (attrs["ifid"]) story.ifid = attrs["ifid"].toUpperCase();
4126
+ if (attrs["zoom"]) {
4127
+ const parsed = parseFloat(attrs["zoom"]);
4128
+ if (Number.isNaN(parsed)) {
4129
+ diagnostics.push({
4130
+ level: "warning",
4131
+ message: `Cannot parse "tw-storydata" content attribute "zoom" as a float; value "${attrs["zoom"]}".`
4132
+ });
4133
+ } else {
4134
+ story.twine2.zoom = parsed;
4135
+ }
4136
+ }
4137
+ if (attrs["format"]) story.twine2.format = attrs["format"];
4138
+ if (attrs["format-version"]) story.twine2.formatVersion = attrs["format-version"];
4139
+ if (attrs["options"]) {
4140
+ for (const opt of attrs["options"].split(/\s+/).filter((s) => s.length > 0)) {
4141
+ story.twine2.options.set(opt, true);
4142
+ }
4143
+ }
4144
+ for (const node of storyData.children ?? []) {
4145
+ if (node.type !== "tag" && node.type !== "style" && node.type !== "script") continue;
4146
+ switch (node.name) {
4147
+ case "style":
4148
+ case "script": {
4149
+ const text = getTextContent(node).trim();
4150
+ if (text.length === 0) continue;
4151
+ const name = node.name === "style" ? "Story Stylesheet" : "Story JavaScript";
4152
+ const tags = node.name === "style" ? ["stylesheet"] : ["script"];
4153
+ storyAdd(story, { name, tags, text }, diagnostics);
4154
+ break;
4155
+ }
4156
+ case "tw-tag": {
4157
+ const tagAttrs = node.attribs ?? {};
4158
+ const tagName = tagAttrs["name"] ?? "";
4159
+ const tagColor = tagAttrs["color"] ?? "";
4160
+ if (tagName) story.twine2.tagColors.set(tagName, tagColor);
4161
+ break;
4162
+ }
4163
+ case "tw-passagedata": {
4164
+ let pid = 0;
4165
+ const pAttrs = node.attribs ?? {};
4166
+ const name = pAttrs["name"] ?? "";
4167
+ const tags = pAttrs["tags"] ? pAttrs["tags"].split(/\s+/).filter((s) => s.length > 0) : [];
4168
+ const metadata = {};
4169
+ if (pAttrs["pid"]) {
4170
+ const parsed = parseInt(pAttrs["pid"], 10);
4171
+ if (Number.isNaN(parsed)) {
4172
+ diagnostics.push({
4173
+ level: "warning",
4174
+ message: `Cannot parse "tw-passagedata" content attribute "pid" as an integer; value "${pAttrs["pid"]}".`
4175
+ });
4176
+ } else {
4177
+ pid = parsed;
4178
+ }
4179
+ }
4180
+ if (pAttrs["position"]) metadata.position = pAttrs["position"];
4181
+ if (pAttrs["size"]) metadata.size = pAttrs["size"];
4182
+ if (pid === startnode && pid !== 0) {
4183
+ story.twine2.start = name;
4184
+ }
4185
+ const text = getTextContent(node).trim();
4186
+ const passage = { name, tags, text };
4187
+ if (metadata.position || metadata.size) {
4188
+ passage.metadata = metadata;
4189
+ }
4190
+ storyAdd(story, passage, diagnostics);
4191
+ break;
4192
+ }
4193
+ }
4194
+ }
4195
+ storyPrepend(story, { name: "StoryData", tags: [], text: marshalStoryData(story) }, diagnostics);
4196
+ }
4197
+ function decompileTwine1(storeArea, story, diagnostics) {
4198
+ for (const node of storeArea.children ?? []) {
4199
+ if (node.type !== "tag" || node.name !== "div") continue;
4200
+ const nodeAttrs = node.attribs ?? {};
4201
+ if (!("tiddler" in nodeAttrs)) continue;
4202
+ const name = nodeAttrs["tiddler"] ?? "";
4203
+ const tags = nodeAttrs["tags"] ? nodeAttrs["tags"].split(/\s+/).filter((s) => s.length > 0) : [];
4204
+ const metadata = {};
4205
+ if (nodeAttrs["twine-position"]) metadata.position = nodeAttrs["twine-position"];
4206
+ const rawContent = getTextContent(node);
4207
+ const text = tiddlerUnescape(rawContent).trim();
4208
+ const passage = { name, tags, text };
4209
+ if (metadata.position) {
4210
+ passage.metadata = metadata;
4211
+ }
4212
+ storyAdd(story, passage, diagnostics);
4213
+ }
4214
+ }
4215
+ function findElement(node, tagName) {
4216
+ if (node.type === "tag" && node.name === tagName) return node;
4217
+ for (const child of node.children ?? []) {
4218
+ const found = findElement(child, tagName);
4219
+ if (found) return found;
4220
+ }
4221
+ return void 0;
4222
+ }
4223
+ function findElementByIdPattern(node, idPattern) {
4224
+ if (node.type === "tag" && node.attribs?.["id"] && idPattern.test(node.attribs["id"])) return node;
4225
+ for (const child of node.children ?? []) {
4226
+ const found = findElementByIdPattern(child, idPattern);
4227
+ if (found) return found;
4228
+ }
4229
+ return void 0;
4230
+ }
4231
+ function getTextContent(el) {
4232
+ let text = "";
4233
+ for (const child of el.children ?? []) {
4234
+ if (child.type === "text" && child.data) {
4235
+ text += child.data;
4236
+ }
4237
+ }
4238
+ return text;
4239
+ }
4240
+
1388
4241
  // src/loader.ts
1389
4242
  function loadSources(story, filenames, opts, diagnostics, processedFiles) {
1390
4243
  for (const filename of filenames) {
@@ -1403,6 +4256,10 @@ function loadSources(story, filenames, opts, diagnostics, processedFiles) {
1403
4256
  case "twee2":
1404
4257
  loadTwee(story, filename, { ...opts, twee2Compat: true }, diagnostics);
1405
4258
  break;
4259
+ case "htm":
4260
+ case "html":
4261
+ loadHTML(story, filename, diagnostics);
4262
+ break;
1406
4263
  case "css":
1407
4264
  loadTagged(story, "stylesheet", filename, diagnostics);
1408
4265
  break;
@@ -1525,6 +4382,11 @@ function parseFontFile(filename) {
1525
4382
  diagnostics: []
1526
4383
  };
1527
4384
  }
4385
+ function parseHTMLFile(filename) {
4386
+ const source = readUTF8(filename);
4387
+ const result = decompileHTML(source);
4388
+ return { passages: result.story.passages, diagnostics: [...result.diagnostics] };
4389
+ }
1528
4390
  function parseFile(filename, opts) {
1529
4391
  const ext = normalizedFileExt(filename);
1530
4392
  switch (ext) {
@@ -1534,6 +4396,9 @@ function parseFile(filename, opts) {
1534
4396
  case "tw2":
1535
4397
  case "twee2":
1536
4398
  return parseTweeFile(filename, { ...opts, twee2Compat: true });
4399
+ case "htm":
4400
+ case "html":
4401
+ return parseHTMLFile(filename);
1537
4402
  case "css":
1538
4403
  return parseTaggedFile("stylesheet", filename);
1539
4404
  case "js":
@@ -1573,6 +4438,13 @@ function parseFile(filename, opts) {
1573
4438
  return void 0;
1574
4439
  }
1575
4440
  }
4441
+ function loadHTML(story, filename, diagnostics) {
4442
+ const result = parseHTMLFile(filename);
4443
+ diagnostics.push(...result.diagnostics);
4444
+ for (const p of result.passages) {
4445
+ storyAdd(story, p, diagnostics);
4446
+ }
4447
+ }
1576
4448
  function loadTwee(story, filename, opts, diagnostics) {
1577
4449
  const result = parseTweeFile(filename, opts);
1578
4450
  diagnostics.push(...result.diagnostics);
@@ -1666,21 +4538,20 @@ var VERSION = "1.2.0";
1666
4538
 
1667
4539
  // src/output-twine2.ts
1668
4540
  var CREATOR_NAME = "Twee-ts";
1669
- function toTwine2Archive(story, startName, diagnostics, options) {
1670
- return getTwine2DataChunk(story, startName, diagnostics, options) + "\n";
4541
+ function toTwine2Archive(story, startName, options) {
4542
+ return getTwine2DataChunk(story, startName, options) + "\n";
1671
4543
  }
1672
- function toTwine2HTML(story, format, startName, diagnostics, options) {
4544
+ function toTwine2HTML(story, format, startName, options) {
1673
4545
  let template = readFormatSource(format);
1674
4546
  if (template.includes("{{STORY_NAME}}")) {
1675
4547
  template = template.replaceAll("{{STORY_NAME}}", htmlEscape(story.name));
1676
4548
  }
1677
4549
  if (template.includes("{{STORY_DATA}}")) {
1678
- template = template.replace("{{STORY_DATA}}", getTwine2DataChunk(story, startName, diagnostics, options));
4550
+ template = template.replace("{{STORY_DATA}}", getTwine2DataChunk(story, startName, options));
1679
4551
  }
1680
4552
  return template;
1681
4553
  }
1682
- function getTwine2DataChunk(story, startName, diagnostics, options) {
1683
- ensureIFID(story, diagnostics);
4554
+ function getTwine2DataChunk(story, startName, options) {
1684
4555
  const parts = [];
1685
4556
  let startID = "";
1686
4557
  let pid = 0;
@@ -1749,23 +4620,6 @@ function getTwine2DataChunk(story, startName, diagnostics, options) {
1749
4620
  const wrapper = `<!-- UUID://${htmlCommentSanitize(story.ifid)}// --><tw-storydata name="${attrEscape(story.name)}" startnode="${attrEscape(startID)}" creator="${attrEscape(CREATOR_NAME)}" creator-version="${attrEscape(VERSION)}" ifid="${attrEscape(story.ifid)}" zoom="${attrEscape(zoom)}" format="${attrEscape(story.twine2.format)}" format-version="${attrEscape(story.twine2.formatVersion)}" options="${attrEscape(optionsStr)}" tags="${attrEscape(story.twine2.tags)}" hidden>`;
1750
4621
  return wrapper + parts.join("") + "</tw-storydata>";
1751
4622
  }
1752
- function ensureIFID(story, diagnostics) {
1753
- if (story.ifid !== "") return;
1754
- if (story.legacyIFID !== "") {
1755
- story.ifid = story.legacyIFID;
1756
- diagnostics.push({
1757
- level: "warning",
1758
- message: 'Story IFID not found; reusing "ifid" entry from the "StorySettings" special passage.'
1759
- });
1760
- } else {
1761
- const ifid = generateIFID();
1762
- story.ifid = ifid;
1763
- diagnostics.push({
1764
- level: "error",
1765
- message: `Story IFID not found. Add an IFID to your story: {"ifid":"${ifid}"}`
1766
- });
1767
- }
1768
- }
1769
4623
 
1770
4624
  // src/output-twine1.ts
1771
4625
  var import_node_fs5 = require("fs");
@@ -1776,7 +4630,7 @@ function toTwine1Archive(story, _startName) {
1776
4630
  return `<div id="storeArea" data-size="${count}">${data}</div>
1777
4631
  `;
1778
4632
  }
1779
- function toTwine1HTML(story, format, startName, _diagnostics) {
4633
+ function toTwine1HTML(story, format, startName) {
1780
4634
  const formatDir = (0, import_node_path6.dirname)(format.filename);
1781
4635
  const parentDir = (0, import_node_path6.dirname)(formatDir);
1782
4636
  let template = readFormatSource(format);
@@ -2333,6 +5187,7 @@ async function buildOutput(options, cache, changedFiles) {
2333
5187
  if (testMode) {
2334
5188
  story.twine2.options.set("debug", true);
2335
5189
  }
5190
+ ensureIFID(story, diagnostics);
2336
5191
  let output;
2337
5192
  switch (outputMode) {
2338
5193
  case "twee3":
@@ -2340,7 +5195,7 @@ async function buildOutput(options, cache, changedFiles) {
2340
5195
  output = toTwee(story, outputMode);
2341
5196
  break;
2342
5197
  case "twine2-archive":
2343
- output = toTwine2Archive(story, startName, diagnostics, { sourceInfo });
5198
+ output = toTwine2Archive(story, startName, { sourceInfo });
2344
5199
  break;
2345
5200
  case "twine1-archive":
2346
5201
  output = toTwine1Archive(story, startName);
@@ -2359,7 +5214,7 @@ async function buildOutput(options, cache, changedFiles) {
2359
5214
  throw new TweeTsError("No story format available for HTML output.", diagnostics);
2360
5215
  }
2361
5216
  if (format.isTwine2) {
2362
- output = toTwine2HTML(story, format, startName, diagnostics, { sourceInfo });
5217
+ output = toTwine2HTML(story, format, startName, { sourceInfo });
2363
5218
  } else {
2364
5219
  if (story.name === "" && !storyHas(story, "StoryTitle")) {
2365
5220
  diagnostics.push({
@@ -2367,7 +5222,7 @@ async function buildOutput(options, cache, changedFiles) {
2367
5222
  message: 'Special passage "StoryTitle" not found.'
2368
5223
  });
2369
5224
  }
2370
- output = toTwine1HTML(story, format, startName, diagnostics);
5225
+ output = toTwine1HTML(story, format, startName);
2371
5226
  }
2372
5227
  const modulePaths = options.modules ? getFilenames(options.modules) : [];
2373
5228
  output = modifyHead(output, modulePaths, options.headFile, diagnostics);
@@ -2384,6 +5239,23 @@ async function buildOutput(options, cache, changedFiles) {
2384
5239
  };
2385
5240
  return { output, story, format, diagnostics, stats };
2386
5241
  }
5242
+ function ensureIFID(story, diagnostics) {
5243
+ if (story.ifid !== "") return;
5244
+ if (story.legacyIFID !== "") {
5245
+ story.ifid = story.legacyIFID;
5246
+ diagnostics.push({
5247
+ level: "warning",
5248
+ message: 'Story IFID not found; reusing "ifid" entry from the "StorySettings" special passage.'
5249
+ });
5250
+ } else {
5251
+ const ifid = generateIFID();
5252
+ story.ifid = ifid;
5253
+ diagnostics.push({
5254
+ level: "error",
5255
+ message: `Story IFID not found. Add an IFID to your story: {"ifid":"${ifid}"}`
5256
+ });
5257
+ }
5258
+ }
2387
5259
  function storyToJSON(story) {
2388
5260
  const scripts = [];
2389
5261
  const stylesheets = [];
@@ -2705,6 +5577,8 @@ function scaffoldConfig() {
2705
5577
  // Annotate the CommonJS export names for ESM import in node:
2706
5578
  0 && (module.exports = {
2707
5579
  CONFIG_FILENAME,
5580
+ ItemType,
5581
+ StoryBuilder,
2708
5582
  TweeLexer,
2709
5583
  TweeTsError,
2710
5584
  applyTagAliases,
@@ -2712,6 +5586,8 @@ function scaffoldConfig() {
2712
5586
  compile,
2713
5587
  compileIncremental,
2714
5588
  compileToFile,
5589
+ createIFID,
5590
+ decompileHTML,
2715
5591
  discoverCachedFormats,
2716
5592
  discoverFormats,
2717
5593
  fetchAndCacheFormat,