@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.
@@ -76,6 +76,10 @@ function tiddlerEscape(s) {
76
76
  if (s.length === 0) return s;
77
77
  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");
78
78
  }
79
+ function tiddlerUnescape(s) {
80
+ if (s.length === 0) return s;
81
+ return s.replace(/\\n/g, "\n").replace(/\\t/g, " ").replace(/\\s/g, "\\");
82
+ }
79
83
  function tweeEscape(s) {
80
84
  if (s.length === 0) return s;
81
85
  return s.replace(/[\\[\]{}]/g, (ch) => "\\" + ch);
@@ -553,6 +557,8 @@ var KNOWN_EXTENSIONS = /* @__PURE__ */ new Set([
553
557
  "twee",
554
558
  "tw2",
555
559
  "twee2",
560
+ "htm",
561
+ "html",
556
562
  "css",
557
563
  "js",
558
564
  "otf",
@@ -911,6 +917,17 @@ function readFormatSource(format) {
911
917
  import { basename } from "path";
912
918
  import { statSync as statSync3 } from "fs";
913
919
 
920
+ // src/types.ts
921
+ var ItemType = {
922
+ Error: 0,
923
+ EOF: 1,
924
+ Header: 2,
925
+ Name: 3,
926
+ Tags: 4,
927
+ Metadata: 5,
928
+ Content: 6
929
+ };
930
+
914
931
  // src/lexer.ts
915
932
  var EOF = -1;
916
933
  var HEADER_DELIM = "::";
@@ -943,10 +960,16 @@ var LexerContext = class {
943
960
  throw new Error("backup would leave pos < start");
944
961
  }
945
962
  }
963
+ // Line-counting invariant: next() increments this.line for each newline during
964
+ // character-by-character scanning. However, Content items are produced by jumping
965
+ // this.pos directly (e.g. via indexOf) without calling next(), so those newlines
966
+ // haven't been counted yet. emit() re-counts newlines in [start, pos) for Content
967
+ // items to compensate. This is safe because this.start is reset to this.pos after
968
+ // every emit(), so no range is ever counted twice.
946
969
  emit(type) {
947
970
  const val = this.input.slice(this.start, this.pos);
948
971
  this.items.push({ type, line: this.line, pos: this.start, val });
949
- if (type === 6 /* Content */) {
972
+ if (type === ItemType.Content) {
950
973
  for (let i = this.start; i < this.pos; i++) {
951
974
  if (this.input.charCodeAt(i) === 10) this.line++;
952
975
  }
@@ -967,7 +990,7 @@ var LexerContext = class {
967
990
  }
968
991
  errorf(message) {
969
992
  this.items.push({
970
- type: 0 /* Error */,
993
+ type: ItemType.Error,
971
994
  line: this.line,
972
995
  pos: this.start,
973
996
  val: message
@@ -1009,7 +1032,7 @@ function lexProlog(ctx) {
1009
1032
  ctx.ignore();
1010
1033
  return lexHeaderDelim;
1011
1034
  }
1012
- ctx.emit(1 /* EOF */);
1035
+ ctx.emit(ItemType.EOF);
1013
1036
  return null;
1014
1037
  }
1015
1038
  function lexContent(ctx) {
@@ -1019,19 +1042,19 @@ function lexContent(ctx) {
1019
1042
  const i = ctx.input.indexOf(NEWLINE_HEADER_DELIM, ctx.pos);
1020
1043
  if (i > -1) {
1021
1044
  ctx.pos = i + 1;
1022
- ctx.emit(6 /* Content */);
1045
+ ctx.emit(ItemType.Content);
1023
1046
  return lexHeaderDelim;
1024
1047
  }
1025
1048
  ctx.pos = ctx.input.length;
1026
1049
  if (ctx.pos > ctx.start) {
1027
- ctx.emit(6 /* Content */);
1050
+ ctx.emit(ItemType.Content);
1028
1051
  }
1029
- ctx.emit(1 /* EOF */);
1052
+ ctx.emit(ItemType.EOF);
1030
1053
  return null;
1031
1054
  }
1032
1055
  function lexHeaderDelim(ctx) {
1033
1056
  ctx.pos += HEADER_DELIM.length;
1034
- ctx.emit(2 /* Header */);
1057
+ ctx.emit(ItemType.Header);
1035
1058
  return lexName;
1036
1059
  }
1037
1060
  function lexName(ctx) {
@@ -1060,7 +1083,7 @@ function lexName(ctx) {
1060
1083
  break outer;
1061
1084
  }
1062
1085
  }
1063
- ctx.emit(3 /* Name */);
1086
+ ctx.emit(ItemType.Name);
1064
1087
  switch (r) {
1065
1088
  case 91:
1066
1089
  return lexTags;
@@ -1077,7 +1100,7 @@ function lexName(ctx) {
1077
1100
  ctx.ignore();
1078
1101
  return lexContent;
1079
1102
  }
1080
- ctx.emit(1 /* EOF */);
1103
+ ctx.emit(ItemType.EOF);
1081
1104
  return null;
1082
1105
  }
1083
1106
  function lexNextOptionalBlock(ctx) {
@@ -1100,7 +1123,7 @@ function lexNextOptionalBlock(ctx) {
1100
1123
  ctx.ignore();
1101
1124
  return lexContent;
1102
1125
  case EOF:
1103
- ctx.emit(1 /* EOF */);
1126
+ ctx.emit(ItemType.EOF);
1104
1127
  return null;
1105
1128
  }
1106
1129
  return ctx.errorf(`illegal character '${String.fromCharCode(r)}' amid the optional blocks`);
@@ -1120,7 +1143,7 @@ function lexTags(ctx) {
1120
1143
  if (r === 10) ctx.backup();
1121
1144
  return ctx.errorf("unterminated tag block");
1122
1145
  case 93:
1123
- if (ctx.pos > ctx.start) ctx.emit(4 /* Tags */);
1146
+ if (ctx.pos > ctx.start) ctx.emit(ItemType.Tags);
1124
1147
  return lexNextOptionalBlock;
1125
1148
  case 91:
1126
1149
  return ctx.errorf(`unexpected left square bracket '['`);
@@ -1153,7 +1176,7 @@ function lexMetadata(ctx) {
1153
1176
  case 125:
1154
1177
  depth--;
1155
1178
  if (depth === 0) {
1156
- if (ctx.pos > ctx.start) ctx.emit(5 /* Metadata */);
1179
+ if (ctx.pos > ctx.start) ctx.emit(ItemType.Metadata);
1157
1180
  return lexNextOptionalBlock;
1158
1181
  }
1159
1182
  break;
@@ -1204,10 +1227,10 @@ function parseTwee(source, options = {}) {
1204
1227
  const passages = [];
1205
1228
  let current = null;
1206
1229
  let pCount = 0;
1207
- let lastType = 1 /* EOF */;
1230
+ let lastType = ItemType.EOF;
1208
1231
  for (const item of tweeLexer(source)) {
1209
1232
  switch (item.type) {
1210
- case 0 /* Error */:
1233
+ case ItemType.Error:
1211
1234
  diagnostics.push({
1212
1235
  level: "error",
1213
1236
  message: `line ${item.line}: Malformed twee source; ${item.val}.`,
@@ -1215,19 +1238,19 @@ function parseTwee(source, options = {}) {
1215
1238
  line: item.line
1216
1239
  });
1217
1240
  return { passages, diagnostics };
1218
- case 1 /* EOF */:
1241
+ case ItemType.EOF:
1219
1242
  if (pCount > 0 && current) {
1220
1243
  passages.push(current);
1221
1244
  }
1222
1245
  return { passages, diagnostics };
1223
- case 2 /* Header */:
1246
+ case ItemType.Header:
1224
1247
  pCount++;
1225
1248
  if (pCount > 1 && current) {
1226
1249
  passages.push(current);
1227
1250
  }
1228
1251
  current = { name: "", tags: [], text: "", source: { file: filename, line: item.line } };
1229
1252
  break;
1230
- case 3 /* Name */: {
1253
+ case ItemType.Name: {
1231
1254
  if (!current) break;
1232
1255
  const name = tweeUnescape(item.val).trim();
1233
1256
  if (name.length === 0) {
@@ -1242,9 +1265,9 @@ function parseTwee(source, options = {}) {
1242
1265
  current.name = name;
1243
1266
  break;
1244
1267
  }
1245
- case 4 /* Tags */: {
1268
+ case ItemType.Tags: {
1246
1269
  if (!current) break;
1247
- if (lastType !== 3 /* Name */) {
1270
+ if (lastType !== ItemType.Name) {
1248
1271
  diagnostics.push({
1249
1272
  level: "error",
1250
1273
  message: `line ${item.line}: Malformed twee source; optional tags block must immediately follow the passage name.`,
@@ -1257,9 +1280,9 @@ function parseTwee(source, options = {}) {
1257
1280
  current.tags = tweeUnescape(inner).split(/\s+/).filter(Boolean);
1258
1281
  break;
1259
1282
  }
1260
- case 5 /* Metadata */: {
1283
+ case ItemType.Metadata: {
1261
1284
  if (!current) break;
1262
- if (lastType !== 3 /* Name */ && lastType !== 4 /* Tags */) {
1285
+ if (lastType !== ItemType.Name && lastType !== ItemType.Tags) {
1263
1286
  diagnostics.push({
1264
1287
  level: "error",
1265
1288
  message: `line ${item.line}: Malformed twee source; optional metadata block must immediately follow the passage name or tags block.`,
@@ -1291,7 +1314,7 @@ function parseTwee(source, options = {}) {
1291
1314
  }
1292
1315
  break;
1293
1316
  }
1294
- case 6 /* Content */: {
1317
+ case ItemType.Content: {
1295
1318
  if (!current) break;
1296
1319
  if (trim) {
1297
1320
  current.text = item.val.trim();
@@ -1319,6 +1342,2808 @@ function parseTwee(source, options = {}) {
1319
1342
  return { passages, diagnostics };
1320
1343
  }
1321
1344
 
1345
+ // node_modules/.pnpm/entities@7.0.1/node_modules/entities/dist/esm/decode-codepoint.js
1346
+ var _a;
1347
+ var decodeMap = /* @__PURE__ */ new Map([
1348
+ [0, 65533],
1349
+ // C1 Unicode control character reference replacements
1350
+ [128, 8364],
1351
+ [130, 8218],
1352
+ [131, 402],
1353
+ [132, 8222],
1354
+ [133, 8230],
1355
+ [134, 8224],
1356
+ [135, 8225],
1357
+ [136, 710],
1358
+ [137, 8240],
1359
+ [138, 352],
1360
+ [139, 8249],
1361
+ [140, 338],
1362
+ [142, 381],
1363
+ [145, 8216],
1364
+ [146, 8217],
1365
+ [147, 8220],
1366
+ [148, 8221],
1367
+ [149, 8226],
1368
+ [150, 8211],
1369
+ [151, 8212],
1370
+ [152, 732],
1371
+ [153, 8482],
1372
+ [154, 353],
1373
+ [155, 8250],
1374
+ [156, 339],
1375
+ [158, 382],
1376
+ [159, 376]
1377
+ ]);
1378
+ var fromCodePoint = (
1379
+ // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition, n/no-unsupported-features/es-builtins
1380
+ (_a = String.fromCodePoint) !== null && _a !== void 0 ? _a : ((codePoint) => {
1381
+ let output = "";
1382
+ if (codePoint > 65535) {
1383
+ codePoint -= 65536;
1384
+ output += String.fromCharCode(codePoint >>> 10 & 1023 | 55296);
1385
+ codePoint = 56320 | codePoint & 1023;
1386
+ }
1387
+ output += String.fromCharCode(codePoint);
1388
+ return output;
1389
+ })
1390
+ );
1391
+ function replaceCodePoint(codePoint) {
1392
+ var _a3;
1393
+ if (codePoint >= 55296 && codePoint <= 57343 || codePoint > 1114111) {
1394
+ return 65533;
1395
+ }
1396
+ return (_a3 = decodeMap.get(codePoint)) !== null && _a3 !== void 0 ? _a3 : codePoint;
1397
+ }
1398
+
1399
+ // node_modules/.pnpm/entities@7.0.1/node_modules/entities/dist/esm/internal/decode-shared.js
1400
+ function decodeBase64(input) {
1401
+ const binary = (
1402
+ // eslint-disable-next-line n/no-unsupported-features/node-builtins
1403
+ typeof atob === "function" ? (
1404
+ // Browser (and Node >=16)
1405
+ // eslint-disable-next-line n/no-unsupported-features/node-builtins
1406
+ atob(input)
1407
+ ) : (
1408
+ // Older Node versions (<16)
1409
+ // eslint-disable-next-line n/no-unsupported-features/node-builtins
1410
+ typeof Buffer.from === "function" ? (
1411
+ // eslint-disable-next-line n/no-unsupported-features/node-builtins
1412
+ Buffer.from(input, "base64").toString("binary")
1413
+ ) : (
1414
+ // eslint-disable-next-line unicorn/no-new-buffer, n/no-deprecated-api
1415
+ new Buffer(input, "base64").toString("binary")
1416
+ )
1417
+ )
1418
+ );
1419
+ const evenLength = binary.length & ~1;
1420
+ const out = new Uint16Array(evenLength / 2);
1421
+ for (let index = 0, outIndex = 0; index < evenLength; index += 2) {
1422
+ const lo = binary.charCodeAt(index);
1423
+ const hi = binary.charCodeAt(index + 1);
1424
+ out[outIndex++] = lo | hi << 8;
1425
+ }
1426
+ return out;
1427
+ }
1428
+
1429
+ // node_modules/.pnpm/entities@7.0.1/node_modules/entities/dist/esm/generated/decode-data-html.js
1430
+ 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");
1431
+
1432
+ // node_modules/.pnpm/entities@7.0.1/node_modules/entities/dist/esm/generated/decode-data-xml.js
1433
+ var xmlDecodeTree = /* @__PURE__ */ decodeBase64("AAJhZ2xxBwARABMAFQBtAg0AAAAAAA8AcAAmYG8AcwAnYHQAPmB0ADxg9SFvdCJg");
1434
+
1435
+ // node_modules/.pnpm/entities@7.0.1/node_modules/entities/dist/esm/internal/bin-trie-flags.js
1436
+ var BinTrieFlags;
1437
+ (function(BinTrieFlags3) {
1438
+ BinTrieFlags3[BinTrieFlags3["VALUE_LENGTH"] = 49152] = "VALUE_LENGTH";
1439
+ BinTrieFlags3[BinTrieFlags3["FLAG13"] = 8192] = "FLAG13";
1440
+ BinTrieFlags3[BinTrieFlags3["BRANCH_LENGTH"] = 8064] = "BRANCH_LENGTH";
1441
+ BinTrieFlags3[BinTrieFlags3["JUMP_TABLE"] = 127] = "JUMP_TABLE";
1442
+ })(BinTrieFlags || (BinTrieFlags = {}));
1443
+
1444
+ // node_modules/.pnpm/entities@7.0.1/node_modules/entities/dist/esm/decode.js
1445
+ var CharCodes;
1446
+ (function(CharCodes4) {
1447
+ CharCodes4[CharCodes4["NUM"] = 35] = "NUM";
1448
+ CharCodes4[CharCodes4["SEMI"] = 59] = "SEMI";
1449
+ CharCodes4[CharCodes4["EQUALS"] = 61] = "EQUALS";
1450
+ CharCodes4[CharCodes4["ZERO"] = 48] = "ZERO";
1451
+ CharCodes4[CharCodes4["NINE"] = 57] = "NINE";
1452
+ CharCodes4[CharCodes4["LOWER_A"] = 97] = "LOWER_A";
1453
+ CharCodes4[CharCodes4["LOWER_F"] = 102] = "LOWER_F";
1454
+ CharCodes4[CharCodes4["LOWER_X"] = 120] = "LOWER_X";
1455
+ CharCodes4[CharCodes4["LOWER_Z"] = 122] = "LOWER_Z";
1456
+ CharCodes4[CharCodes4["UPPER_A"] = 65] = "UPPER_A";
1457
+ CharCodes4[CharCodes4["UPPER_F"] = 70] = "UPPER_F";
1458
+ CharCodes4[CharCodes4["UPPER_Z"] = 90] = "UPPER_Z";
1459
+ })(CharCodes || (CharCodes = {}));
1460
+ var TO_LOWER_BIT = 32;
1461
+ function isNumber(code) {
1462
+ return code >= CharCodes.ZERO && code <= CharCodes.NINE;
1463
+ }
1464
+ function isHexadecimalCharacter(code) {
1465
+ return code >= CharCodes.UPPER_A && code <= CharCodes.UPPER_F || code >= CharCodes.LOWER_A && code <= CharCodes.LOWER_F;
1466
+ }
1467
+ function isAsciiAlphaNumeric(code) {
1468
+ return code >= CharCodes.UPPER_A && code <= CharCodes.UPPER_Z || code >= CharCodes.LOWER_A && code <= CharCodes.LOWER_Z || isNumber(code);
1469
+ }
1470
+ function isEntityInAttributeInvalidEnd(code) {
1471
+ return code === CharCodes.EQUALS || isAsciiAlphaNumeric(code);
1472
+ }
1473
+ var EntityDecoderState;
1474
+ (function(EntityDecoderState3) {
1475
+ EntityDecoderState3[EntityDecoderState3["EntityStart"] = 0] = "EntityStart";
1476
+ EntityDecoderState3[EntityDecoderState3["NumericStart"] = 1] = "NumericStart";
1477
+ EntityDecoderState3[EntityDecoderState3["NumericDecimal"] = 2] = "NumericDecimal";
1478
+ EntityDecoderState3[EntityDecoderState3["NumericHex"] = 3] = "NumericHex";
1479
+ EntityDecoderState3[EntityDecoderState3["NamedEntity"] = 4] = "NamedEntity";
1480
+ })(EntityDecoderState || (EntityDecoderState = {}));
1481
+ var DecodingMode;
1482
+ (function(DecodingMode3) {
1483
+ DecodingMode3[DecodingMode3["Legacy"] = 0] = "Legacy";
1484
+ DecodingMode3[DecodingMode3["Strict"] = 1] = "Strict";
1485
+ DecodingMode3[DecodingMode3["Attribute"] = 2] = "Attribute";
1486
+ })(DecodingMode || (DecodingMode = {}));
1487
+ var EntityDecoder = class {
1488
+ constructor(decodeTree, emitCodePoint, errors) {
1489
+ this.decodeTree = decodeTree;
1490
+ this.emitCodePoint = emitCodePoint;
1491
+ this.errors = errors;
1492
+ this.state = EntityDecoderState.EntityStart;
1493
+ this.consumed = 1;
1494
+ this.result = 0;
1495
+ this.treeIndex = 0;
1496
+ this.excess = 1;
1497
+ this.decodeMode = DecodingMode.Strict;
1498
+ this.runConsumed = 0;
1499
+ }
1500
+ /** Resets the instance to make it reusable. */
1501
+ startEntity(decodeMode) {
1502
+ this.decodeMode = decodeMode;
1503
+ this.state = EntityDecoderState.EntityStart;
1504
+ this.result = 0;
1505
+ this.treeIndex = 0;
1506
+ this.excess = 1;
1507
+ this.consumed = 1;
1508
+ this.runConsumed = 0;
1509
+ }
1510
+ /**
1511
+ * Write an entity to the decoder. This can be called multiple times with partial entities.
1512
+ * If the entity is incomplete, the decoder will return -1.
1513
+ *
1514
+ * Mirrors the implementation of `getDecoder`, but with the ability to stop decoding if the
1515
+ * entity is incomplete, and resume when the next string is written.
1516
+ *
1517
+ * @param input The string containing the entity (or a continuation of the entity).
1518
+ * @param offset The offset at which the entity begins. Should be 0 if this is not the first call.
1519
+ * @returns The number of characters that were consumed, or -1 if the entity is incomplete.
1520
+ */
1521
+ write(input, offset) {
1522
+ switch (this.state) {
1523
+ case EntityDecoderState.EntityStart: {
1524
+ if (input.charCodeAt(offset) === CharCodes.NUM) {
1525
+ this.state = EntityDecoderState.NumericStart;
1526
+ this.consumed += 1;
1527
+ return this.stateNumericStart(input, offset + 1);
1528
+ }
1529
+ this.state = EntityDecoderState.NamedEntity;
1530
+ return this.stateNamedEntity(input, offset);
1531
+ }
1532
+ case EntityDecoderState.NumericStart: {
1533
+ return this.stateNumericStart(input, offset);
1534
+ }
1535
+ case EntityDecoderState.NumericDecimal: {
1536
+ return this.stateNumericDecimal(input, offset);
1537
+ }
1538
+ case EntityDecoderState.NumericHex: {
1539
+ return this.stateNumericHex(input, offset);
1540
+ }
1541
+ case EntityDecoderState.NamedEntity: {
1542
+ return this.stateNamedEntity(input, offset);
1543
+ }
1544
+ }
1545
+ }
1546
+ /**
1547
+ * Switches between the numeric decimal and hexadecimal states.
1548
+ *
1549
+ * Equivalent to the `Numeric character reference state` in the HTML spec.
1550
+ *
1551
+ * @param input The string containing the entity (or a continuation of the entity).
1552
+ * @param offset The current offset.
1553
+ * @returns The number of characters that were consumed, or -1 if the entity is incomplete.
1554
+ */
1555
+ stateNumericStart(input, offset) {
1556
+ if (offset >= input.length) {
1557
+ return -1;
1558
+ }
1559
+ if ((input.charCodeAt(offset) | TO_LOWER_BIT) === CharCodes.LOWER_X) {
1560
+ this.state = EntityDecoderState.NumericHex;
1561
+ this.consumed += 1;
1562
+ return this.stateNumericHex(input, offset + 1);
1563
+ }
1564
+ this.state = EntityDecoderState.NumericDecimal;
1565
+ return this.stateNumericDecimal(input, offset);
1566
+ }
1567
+ /**
1568
+ * Parses a hexadecimal numeric entity.
1569
+ *
1570
+ * Equivalent to the `Hexademical character reference state` in the HTML spec.
1571
+ *
1572
+ * @param input The string containing the entity (or a continuation of the entity).
1573
+ * @param offset The current offset.
1574
+ * @returns The number of characters that were consumed, or -1 if the entity is incomplete.
1575
+ */
1576
+ stateNumericHex(input, offset) {
1577
+ while (offset < input.length) {
1578
+ const char = input.charCodeAt(offset);
1579
+ if (isNumber(char) || isHexadecimalCharacter(char)) {
1580
+ const digit = char <= CharCodes.NINE ? char - CharCodes.ZERO : (char | TO_LOWER_BIT) - CharCodes.LOWER_A + 10;
1581
+ this.result = this.result * 16 + digit;
1582
+ this.consumed++;
1583
+ offset++;
1584
+ } else {
1585
+ return this.emitNumericEntity(char, 3);
1586
+ }
1587
+ }
1588
+ return -1;
1589
+ }
1590
+ /**
1591
+ * Parses a decimal numeric entity.
1592
+ *
1593
+ * Equivalent to the `Decimal character reference state` in the HTML spec.
1594
+ *
1595
+ * @param input The string containing the entity (or a continuation of the entity).
1596
+ * @param offset The current offset.
1597
+ * @returns The number of characters that were consumed, or -1 if the entity is incomplete.
1598
+ */
1599
+ stateNumericDecimal(input, offset) {
1600
+ while (offset < input.length) {
1601
+ const char = input.charCodeAt(offset);
1602
+ if (isNumber(char)) {
1603
+ this.result = this.result * 10 + (char - CharCodes.ZERO);
1604
+ this.consumed++;
1605
+ offset++;
1606
+ } else {
1607
+ return this.emitNumericEntity(char, 2);
1608
+ }
1609
+ }
1610
+ return -1;
1611
+ }
1612
+ /**
1613
+ * Validate and emit a numeric entity.
1614
+ *
1615
+ * Implements the logic from the `Hexademical character reference start
1616
+ * state` and `Numeric character reference end state` in the HTML spec.
1617
+ *
1618
+ * @param lastCp The last code point of the entity. Used to see if the
1619
+ * entity was terminated with a semicolon.
1620
+ * @param expectedLength The minimum number of characters that should be
1621
+ * consumed. Used to validate that at least one digit
1622
+ * was consumed.
1623
+ * @returns The number of characters that were consumed.
1624
+ */
1625
+ emitNumericEntity(lastCp, expectedLength) {
1626
+ var _a3;
1627
+ if (this.consumed <= expectedLength) {
1628
+ (_a3 = this.errors) === null || _a3 === void 0 ? void 0 : _a3.absenceOfDigitsInNumericCharacterReference(this.consumed);
1629
+ return 0;
1630
+ }
1631
+ if (lastCp === CharCodes.SEMI) {
1632
+ this.consumed += 1;
1633
+ } else if (this.decodeMode === DecodingMode.Strict) {
1634
+ return 0;
1635
+ }
1636
+ this.emitCodePoint(replaceCodePoint(this.result), this.consumed);
1637
+ if (this.errors) {
1638
+ if (lastCp !== CharCodes.SEMI) {
1639
+ this.errors.missingSemicolonAfterCharacterReference();
1640
+ }
1641
+ this.errors.validateNumericCharacterReference(this.result);
1642
+ }
1643
+ return this.consumed;
1644
+ }
1645
+ /**
1646
+ * Parses a named entity.
1647
+ *
1648
+ * Equivalent to the `Named character reference state` in the HTML spec.
1649
+ *
1650
+ * @param input The string containing the entity (or a continuation of the entity).
1651
+ * @param offset The current offset.
1652
+ * @returns The number of characters that were consumed, or -1 if the entity is incomplete.
1653
+ */
1654
+ stateNamedEntity(input, offset) {
1655
+ const { decodeTree } = this;
1656
+ let current = decodeTree[this.treeIndex];
1657
+ let valueLength = (current & BinTrieFlags.VALUE_LENGTH) >> 14;
1658
+ while (offset < input.length) {
1659
+ if (valueLength === 0 && (current & BinTrieFlags.FLAG13) !== 0) {
1660
+ const runLength = (current & BinTrieFlags.BRANCH_LENGTH) >> 7;
1661
+ if (this.runConsumed === 0) {
1662
+ const firstChar = current & BinTrieFlags.JUMP_TABLE;
1663
+ if (input.charCodeAt(offset) !== firstChar) {
1664
+ return this.result === 0 ? 0 : this.emitNotTerminatedNamedEntity();
1665
+ }
1666
+ offset++;
1667
+ this.excess++;
1668
+ this.runConsumed++;
1669
+ }
1670
+ while (this.runConsumed < runLength) {
1671
+ if (offset >= input.length) {
1672
+ return -1;
1673
+ }
1674
+ const charIndexInPacked = this.runConsumed - 1;
1675
+ const packedWord = decodeTree[this.treeIndex + 1 + (charIndexInPacked >> 1)];
1676
+ const expectedChar = charIndexInPacked % 2 === 0 ? packedWord & 255 : packedWord >> 8 & 255;
1677
+ if (input.charCodeAt(offset) !== expectedChar) {
1678
+ this.runConsumed = 0;
1679
+ return this.result === 0 ? 0 : this.emitNotTerminatedNamedEntity();
1680
+ }
1681
+ offset++;
1682
+ this.excess++;
1683
+ this.runConsumed++;
1684
+ }
1685
+ this.runConsumed = 0;
1686
+ this.treeIndex += 1 + (runLength >> 1);
1687
+ current = decodeTree[this.treeIndex];
1688
+ valueLength = (current & BinTrieFlags.VALUE_LENGTH) >> 14;
1689
+ }
1690
+ if (offset >= input.length)
1691
+ break;
1692
+ const char = input.charCodeAt(offset);
1693
+ if (char === CharCodes.SEMI && valueLength !== 0 && (current & BinTrieFlags.FLAG13) !== 0) {
1694
+ return this.emitNamedEntityData(this.treeIndex, valueLength, this.consumed + this.excess);
1695
+ }
1696
+ this.treeIndex = determineBranch(decodeTree, current, this.treeIndex + Math.max(1, valueLength), char);
1697
+ if (this.treeIndex < 0) {
1698
+ return this.result === 0 || // If we are parsing an attribute
1699
+ this.decodeMode === DecodingMode.Attribute && // We shouldn't have consumed any characters after the entity,
1700
+ (valueLength === 0 || // And there should be no invalid characters.
1701
+ isEntityInAttributeInvalidEnd(char)) ? 0 : this.emitNotTerminatedNamedEntity();
1702
+ }
1703
+ current = decodeTree[this.treeIndex];
1704
+ valueLength = (current & BinTrieFlags.VALUE_LENGTH) >> 14;
1705
+ if (valueLength !== 0) {
1706
+ if (char === CharCodes.SEMI) {
1707
+ return this.emitNamedEntityData(this.treeIndex, valueLength, this.consumed + this.excess);
1708
+ }
1709
+ if (this.decodeMode !== DecodingMode.Strict && (current & BinTrieFlags.FLAG13) === 0) {
1710
+ this.result = this.treeIndex;
1711
+ this.consumed += this.excess;
1712
+ this.excess = 0;
1713
+ }
1714
+ }
1715
+ offset++;
1716
+ this.excess++;
1717
+ }
1718
+ return -1;
1719
+ }
1720
+ /**
1721
+ * Emit a named entity that was not terminated with a semicolon.
1722
+ *
1723
+ * @returns The number of characters consumed.
1724
+ */
1725
+ emitNotTerminatedNamedEntity() {
1726
+ var _a3;
1727
+ const { result, decodeTree } = this;
1728
+ const valueLength = (decodeTree[result] & BinTrieFlags.VALUE_LENGTH) >> 14;
1729
+ this.emitNamedEntityData(result, valueLength, this.consumed);
1730
+ (_a3 = this.errors) === null || _a3 === void 0 ? void 0 : _a3.missingSemicolonAfterCharacterReference();
1731
+ return this.consumed;
1732
+ }
1733
+ /**
1734
+ * Emit a named entity.
1735
+ *
1736
+ * @param result The index of the entity in the decode tree.
1737
+ * @param valueLength The number of bytes in the entity.
1738
+ * @param consumed The number of characters consumed.
1739
+ *
1740
+ * @returns The number of characters consumed.
1741
+ */
1742
+ emitNamedEntityData(result, valueLength, consumed) {
1743
+ const { decodeTree } = this;
1744
+ this.emitCodePoint(valueLength === 1 ? decodeTree[result] & ~(BinTrieFlags.VALUE_LENGTH | BinTrieFlags.FLAG13) : decodeTree[result + 1], consumed);
1745
+ if (valueLength === 3) {
1746
+ this.emitCodePoint(decodeTree[result + 2], consumed);
1747
+ }
1748
+ return consumed;
1749
+ }
1750
+ /**
1751
+ * Signal to the parser that the end of the input was reached.
1752
+ *
1753
+ * Remaining data will be emitted and relevant errors will be produced.
1754
+ *
1755
+ * @returns The number of characters consumed.
1756
+ */
1757
+ end() {
1758
+ var _a3;
1759
+ switch (this.state) {
1760
+ case EntityDecoderState.NamedEntity: {
1761
+ return this.result !== 0 && (this.decodeMode !== DecodingMode.Attribute || this.result === this.treeIndex) ? this.emitNotTerminatedNamedEntity() : 0;
1762
+ }
1763
+ // Otherwise, emit a numeric entity if we have one.
1764
+ case EntityDecoderState.NumericDecimal: {
1765
+ return this.emitNumericEntity(0, 2);
1766
+ }
1767
+ case EntityDecoderState.NumericHex: {
1768
+ return this.emitNumericEntity(0, 3);
1769
+ }
1770
+ case EntityDecoderState.NumericStart: {
1771
+ (_a3 = this.errors) === null || _a3 === void 0 ? void 0 : _a3.absenceOfDigitsInNumericCharacterReference(this.consumed);
1772
+ return 0;
1773
+ }
1774
+ case EntityDecoderState.EntityStart: {
1775
+ return 0;
1776
+ }
1777
+ }
1778
+ }
1779
+ };
1780
+ function determineBranch(decodeTree, current, nodeIndex, char) {
1781
+ const branchCount = (current & BinTrieFlags.BRANCH_LENGTH) >> 7;
1782
+ const jumpOffset = current & BinTrieFlags.JUMP_TABLE;
1783
+ if (branchCount === 0) {
1784
+ return jumpOffset !== 0 && char === jumpOffset ? nodeIndex : -1;
1785
+ }
1786
+ if (jumpOffset) {
1787
+ const value = char - jumpOffset;
1788
+ return value < 0 || value >= branchCount ? -1 : decodeTree[nodeIndex + value] - 1;
1789
+ }
1790
+ const packedKeySlots = branchCount + 1 >> 1;
1791
+ let lo = 0;
1792
+ let hi = branchCount - 1;
1793
+ while (lo <= hi) {
1794
+ const mid = lo + hi >>> 1;
1795
+ const slot = mid >> 1;
1796
+ const packed = decodeTree[nodeIndex + slot];
1797
+ const midKey = packed >> (mid & 1) * 8 & 255;
1798
+ if (midKey < char) {
1799
+ lo = mid + 1;
1800
+ } else if (midKey > char) {
1801
+ hi = mid - 1;
1802
+ } else {
1803
+ return decodeTree[nodeIndex + packedKeySlots + mid];
1804
+ }
1805
+ }
1806
+ return -1;
1807
+ }
1808
+
1809
+ // node_modules/.pnpm/htmlparser2@10.1.0/node_modules/htmlparser2/dist/esm/Tokenizer.js
1810
+ var CharCodes2;
1811
+ (function(CharCodes4) {
1812
+ CharCodes4[CharCodes4["Tab"] = 9] = "Tab";
1813
+ CharCodes4[CharCodes4["NewLine"] = 10] = "NewLine";
1814
+ CharCodes4[CharCodes4["FormFeed"] = 12] = "FormFeed";
1815
+ CharCodes4[CharCodes4["CarriageReturn"] = 13] = "CarriageReturn";
1816
+ CharCodes4[CharCodes4["Space"] = 32] = "Space";
1817
+ CharCodes4[CharCodes4["ExclamationMark"] = 33] = "ExclamationMark";
1818
+ CharCodes4[CharCodes4["Number"] = 35] = "Number";
1819
+ CharCodes4[CharCodes4["Amp"] = 38] = "Amp";
1820
+ CharCodes4[CharCodes4["SingleQuote"] = 39] = "SingleQuote";
1821
+ CharCodes4[CharCodes4["DoubleQuote"] = 34] = "DoubleQuote";
1822
+ CharCodes4[CharCodes4["Dash"] = 45] = "Dash";
1823
+ CharCodes4[CharCodes4["Slash"] = 47] = "Slash";
1824
+ CharCodes4[CharCodes4["Zero"] = 48] = "Zero";
1825
+ CharCodes4[CharCodes4["Nine"] = 57] = "Nine";
1826
+ CharCodes4[CharCodes4["Semi"] = 59] = "Semi";
1827
+ CharCodes4[CharCodes4["Lt"] = 60] = "Lt";
1828
+ CharCodes4[CharCodes4["Eq"] = 61] = "Eq";
1829
+ CharCodes4[CharCodes4["Gt"] = 62] = "Gt";
1830
+ CharCodes4[CharCodes4["Questionmark"] = 63] = "Questionmark";
1831
+ CharCodes4[CharCodes4["UpperA"] = 65] = "UpperA";
1832
+ CharCodes4[CharCodes4["LowerA"] = 97] = "LowerA";
1833
+ CharCodes4[CharCodes4["UpperF"] = 70] = "UpperF";
1834
+ CharCodes4[CharCodes4["LowerF"] = 102] = "LowerF";
1835
+ CharCodes4[CharCodes4["UpperZ"] = 90] = "UpperZ";
1836
+ CharCodes4[CharCodes4["LowerZ"] = 122] = "LowerZ";
1837
+ CharCodes4[CharCodes4["LowerX"] = 120] = "LowerX";
1838
+ CharCodes4[CharCodes4["OpeningSquareBracket"] = 91] = "OpeningSquareBracket";
1839
+ })(CharCodes2 || (CharCodes2 = {}));
1840
+ var State;
1841
+ (function(State2) {
1842
+ State2[State2["Text"] = 1] = "Text";
1843
+ State2[State2["BeforeTagName"] = 2] = "BeforeTagName";
1844
+ State2[State2["InTagName"] = 3] = "InTagName";
1845
+ State2[State2["InSelfClosingTag"] = 4] = "InSelfClosingTag";
1846
+ State2[State2["BeforeClosingTagName"] = 5] = "BeforeClosingTagName";
1847
+ State2[State2["InClosingTagName"] = 6] = "InClosingTagName";
1848
+ State2[State2["AfterClosingTagName"] = 7] = "AfterClosingTagName";
1849
+ State2[State2["BeforeAttributeName"] = 8] = "BeforeAttributeName";
1850
+ State2[State2["InAttributeName"] = 9] = "InAttributeName";
1851
+ State2[State2["AfterAttributeName"] = 10] = "AfterAttributeName";
1852
+ State2[State2["BeforeAttributeValue"] = 11] = "BeforeAttributeValue";
1853
+ State2[State2["InAttributeValueDq"] = 12] = "InAttributeValueDq";
1854
+ State2[State2["InAttributeValueSq"] = 13] = "InAttributeValueSq";
1855
+ State2[State2["InAttributeValueNq"] = 14] = "InAttributeValueNq";
1856
+ State2[State2["BeforeDeclaration"] = 15] = "BeforeDeclaration";
1857
+ State2[State2["InDeclaration"] = 16] = "InDeclaration";
1858
+ State2[State2["InProcessingInstruction"] = 17] = "InProcessingInstruction";
1859
+ State2[State2["BeforeComment"] = 18] = "BeforeComment";
1860
+ State2[State2["CDATASequence"] = 19] = "CDATASequence";
1861
+ State2[State2["InSpecialComment"] = 20] = "InSpecialComment";
1862
+ State2[State2["InCommentLike"] = 21] = "InCommentLike";
1863
+ State2[State2["BeforeSpecialS"] = 22] = "BeforeSpecialS";
1864
+ State2[State2["BeforeSpecialT"] = 23] = "BeforeSpecialT";
1865
+ State2[State2["SpecialStartSequence"] = 24] = "SpecialStartSequence";
1866
+ State2[State2["InSpecialTag"] = 25] = "InSpecialTag";
1867
+ State2[State2["InEntity"] = 26] = "InEntity";
1868
+ })(State || (State = {}));
1869
+ function isWhitespace(c) {
1870
+ return c === CharCodes2.Space || c === CharCodes2.NewLine || c === CharCodes2.Tab || c === CharCodes2.FormFeed || c === CharCodes2.CarriageReturn;
1871
+ }
1872
+ function isEndOfTagSection(c) {
1873
+ return c === CharCodes2.Slash || c === CharCodes2.Gt || isWhitespace(c);
1874
+ }
1875
+ function isASCIIAlpha(c) {
1876
+ return c >= CharCodes2.LowerA && c <= CharCodes2.LowerZ || c >= CharCodes2.UpperA && c <= CharCodes2.UpperZ;
1877
+ }
1878
+ var QuoteType;
1879
+ (function(QuoteType2) {
1880
+ QuoteType2[QuoteType2["NoValue"] = 0] = "NoValue";
1881
+ QuoteType2[QuoteType2["Unquoted"] = 1] = "Unquoted";
1882
+ QuoteType2[QuoteType2["Single"] = 2] = "Single";
1883
+ QuoteType2[QuoteType2["Double"] = 3] = "Double";
1884
+ })(QuoteType || (QuoteType = {}));
1885
+ var Sequences = {
1886
+ Cdata: new Uint8Array([67, 68, 65, 84, 65, 91]),
1887
+ // CDATA[
1888
+ CdataEnd: new Uint8Array([93, 93, 62]),
1889
+ // ]]>
1890
+ CommentEnd: new Uint8Array([45, 45, 62]),
1891
+ // `-->`
1892
+ ScriptEnd: new Uint8Array([60, 47, 115, 99, 114, 105, 112, 116]),
1893
+ // `</script`
1894
+ StyleEnd: new Uint8Array([60, 47, 115, 116, 121, 108, 101]),
1895
+ // `</style`
1896
+ TitleEnd: new Uint8Array([60, 47, 116, 105, 116, 108, 101]),
1897
+ // `</title`
1898
+ TextareaEnd: new Uint8Array([
1899
+ 60,
1900
+ 47,
1901
+ 116,
1902
+ 101,
1903
+ 120,
1904
+ 116,
1905
+ 97,
1906
+ 114,
1907
+ 101,
1908
+ 97
1909
+ ]),
1910
+ // `</textarea`
1911
+ XmpEnd: new Uint8Array([60, 47, 120, 109, 112])
1912
+ // `</xmp`
1913
+ };
1914
+ var Tokenizer = class {
1915
+ constructor({ xmlMode = false, decodeEntities = true }, cbs) {
1916
+ this.cbs = cbs;
1917
+ this.state = State.Text;
1918
+ this.buffer = "";
1919
+ this.sectionStart = 0;
1920
+ this.index = 0;
1921
+ this.entityStart = 0;
1922
+ this.baseState = State.Text;
1923
+ this.isSpecial = false;
1924
+ this.running = true;
1925
+ this.offset = 0;
1926
+ this.currentSequence = void 0;
1927
+ this.sequenceIndex = 0;
1928
+ this.xmlMode = xmlMode;
1929
+ this.decodeEntities = decodeEntities;
1930
+ this.entityDecoder = new EntityDecoder(xmlMode ? xmlDecodeTree : htmlDecodeTree, (cp, consumed) => this.emitCodePoint(cp, consumed));
1931
+ }
1932
+ reset() {
1933
+ this.state = State.Text;
1934
+ this.buffer = "";
1935
+ this.sectionStart = 0;
1936
+ this.index = 0;
1937
+ this.baseState = State.Text;
1938
+ this.currentSequence = void 0;
1939
+ this.running = true;
1940
+ this.offset = 0;
1941
+ }
1942
+ write(chunk) {
1943
+ this.offset += this.buffer.length;
1944
+ this.buffer = chunk;
1945
+ this.parse();
1946
+ }
1947
+ end() {
1948
+ if (this.running)
1949
+ this.finish();
1950
+ }
1951
+ pause() {
1952
+ this.running = false;
1953
+ }
1954
+ resume() {
1955
+ this.running = true;
1956
+ if (this.index < this.buffer.length + this.offset) {
1957
+ this.parse();
1958
+ }
1959
+ }
1960
+ stateText(c) {
1961
+ if (c === CharCodes2.Lt || !this.decodeEntities && this.fastForwardTo(CharCodes2.Lt)) {
1962
+ if (this.index > this.sectionStart) {
1963
+ this.cbs.ontext(this.sectionStart, this.index);
1964
+ }
1965
+ this.state = State.BeforeTagName;
1966
+ this.sectionStart = this.index;
1967
+ } else if (this.decodeEntities && c === CharCodes2.Amp) {
1968
+ this.startEntity();
1969
+ }
1970
+ }
1971
+ stateSpecialStartSequence(c) {
1972
+ const isEnd = this.sequenceIndex === this.currentSequence.length;
1973
+ const isMatch = isEnd ? (
1974
+ // If we are at the end of the sequence, make sure the tag name has ended
1975
+ isEndOfTagSection(c)
1976
+ ) : (
1977
+ // Otherwise, do a case-insensitive comparison
1978
+ (c | 32) === this.currentSequence[this.sequenceIndex]
1979
+ );
1980
+ if (!isMatch) {
1981
+ this.isSpecial = false;
1982
+ } else if (!isEnd) {
1983
+ this.sequenceIndex++;
1984
+ return;
1985
+ }
1986
+ this.sequenceIndex = 0;
1987
+ this.state = State.InTagName;
1988
+ this.stateInTagName(c);
1989
+ }
1990
+ /** Look for an end tag. For <title> tags, also decode entities. */
1991
+ stateInSpecialTag(c) {
1992
+ if (this.sequenceIndex === this.currentSequence.length) {
1993
+ if (c === CharCodes2.Gt || isWhitespace(c)) {
1994
+ const endOfText = this.index - this.currentSequence.length;
1995
+ if (this.sectionStart < endOfText) {
1996
+ const actualIndex = this.index;
1997
+ this.index = endOfText;
1998
+ this.cbs.ontext(this.sectionStart, endOfText);
1999
+ this.index = actualIndex;
2000
+ }
2001
+ this.isSpecial = false;
2002
+ this.sectionStart = endOfText + 2;
2003
+ this.stateInClosingTagName(c);
2004
+ return;
2005
+ }
2006
+ this.sequenceIndex = 0;
2007
+ }
2008
+ if ((c | 32) === this.currentSequence[this.sequenceIndex]) {
2009
+ this.sequenceIndex += 1;
2010
+ } else if (this.sequenceIndex === 0) {
2011
+ if (this.currentSequence === Sequences.TitleEnd) {
2012
+ if (this.decodeEntities && c === CharCodes2.Amp) {
2013
+ this.startEntity();
2014
+ }
2015
+ } else if (this.fastForwardTo(CharCodes2.Lt)) {
2016
+ this.sequenceIndex = 1;
2017
+ }
2018
+ } else {
2019
+ this.sequenceIndex = Number(c === CharCodes2.Lt);
2020
+ }
2021
+ }
2022
+ stateCDATASequence(c) {
2023
+ if (c === Sequences.Cdata[this.sequenceIndex]) {
2024
+ if (++this.sequenceIndex === Sequences.Cdata.length) {
2025
+ this.state = State.InCommentLike;
2026
+ this.currentSequence = Sequences.CdataEnd;
2027
+ this.sequenceIndex = 0;
2028
+ this.sectionStart = this.index + 1;
2029
+ }
2030
+ } else {
2031
+ this.sequenceIndex = 0;
2032
+ this.state = State.InDeclaration;
2033
+ this.stateInDeclaration(c);
2034
+ }
2035
+ }
2036
+ /**
2037
+ * When we wait for one specific character, we can speed things up
2038
+ * by skipping through the buffer until we find it.
2039
+ *
2040
+ * @returns Whether the character was found.
2041
+ */
2042
+ fastForwardTo(c) {
2043
+ while (++this.index < this.buffer.length + this.offset) {
2044
+ if (this.buffer.charCodeAt(this.index - this.offset) === c) {
2045
+ return true;
2046
+ }
2047
+ }
2048
+ this.index = this.buffer.length + this.offset - 1;
2049
+ return false;
2050
+ }
2051
+ /**
2052
+ * Comments and CDATA end with `-->` and `]]>`.
2053
+ *
2054
+ * Their common qualities are:
2055
+ * - Their end sequences have a distinct character they start with.
2056
+ * - That character is then repeated, so we have to check multiple repeats.
2057
+ * - All characters but the start character of the sequence can be skipped.
2058
+ */
2059
+ stateInCommentLike(c) {
2060
+ if (c === this.currentSequence[this.sequenceIndex]) {
2061
+ if (++this.sequenceIndex === this.currentSequence.length) {
2062
+ if (this.currentSequence === Sequences.CdataEnd) {
2063
+ this.cbs.oncdata(this.sectionStart, this.index, 2);
2064
+ } else {
2065
+ this.cbs.oncomment(this.sectionStart, this.index, 2);
2066
+ }
2067
+ this.sequenceIndex = 0;
2068
+ this.sectionStart = this.index + 1;
2069
+ this.state = State.Text;
2070
+ }
2071
+ } else if (this.sequenceIndex === 0) {
2072
+ if (this.fastForwardTo(this.currentSequence[0])) {
2073
+ this.sequenceIndex = 1;
2074
+ }
2075
+ } else if (c !== this.currentSequence[this.sequenceIndex - 1]) {
2076
+ this.sequenceIndex = 0;
2077
+ }
2078
+ }
2079
+ /**
2080
+ * HTML only allows ASCII alpha characters (a-z and A-Z) at the beginning of a tag name.
2081
+ *
2082
+ * XML allows a lot more characters here (@see https://www.w3.org/TR/REC-xml/#NT-NameStartChar).
2083
+ * We allow anything that wouldn't end the tag.
2084
+ */
2085
+ isTagStartChar(c) {
2086
+ return this.xmlMode ? !isEndOfTagSection(c) : isASCIIAlpha(c);
2087
+ }
2088
+ startSpecial(sequence, offset) {
2089
+ this.isSpecial = true;
2090
+ this.currentSequence = sequence;
2091
+ this.sequenceIndex = offset;
2092
+ this.state = State.SpecialStartSequence;
2093
+ }
2094
+ stateBeforeTagName(c) {
2095
+ if (c === CharCodes2.ExclamationMark) {
2096
+ this.state = State.BeforeDeclaration;
2097
+ this.sectionStart = this.index + 1;
2098
+ } else if (c === CharCodes2.Questionmark) {
2099
+ this.state = State.InProcessingInstruction;
2100
+ this.sectionStart = this.index + 1;
2101
+ } else if (this.isTagStartChar(c)) {
2102
+ const lower = c | 32;
2103
+ this.sectionStart = this.index;
2104
+ if (this.xmlMode) {
2105
+ this.state = State.InTagName;
2106
+ } else if (lower === Sequences.ScriptEnd[2]) {
2107
+ this.state = State.BeforeSpecialS;
2108
+ } else if (lower === Sequences.TitleEnd[2] || lower === Sequences.XmpEnd[2]) {
2109
+ this.state = State.BeforeSpecialT;
2110
+ } else {
2111
+ this.state = State.InTagName;
2112
+ }
2113
+ } else if (c === CharCodes2.Slash) {
2114
+ this.state = State.BeforeClosingTagName;
2115
+ } else {
2116
+ this.state = State.Text;
2117
+ this.stateText(c);
2118
+ }
2119
+ }
2120
+ stateInTagName(c) {
2121
+ if (isEndOfTagSection(c)) {
2122
+ this.cbs.onopentagname(this.sectionStart, this.index);
2123
+ this.sectionStart = -1;
2124
+ this.state = State.BeforeAttributeName;
2125
+ this.stateBeforeAttributeName(c);
2126
+ }
2127
+ }
2128
+ stateBeforeClosingTagName(c) {
2129
+ if (isWhitespace(c)) {
2130
+ } else if (c === CharCodes2.Gt) {
2131
+ this.state = State.Text;
2132
+ } else {
2133
+ this.state = this.isTagStartChar(c) ? State.InClosingTagName : State.InSpecialComment;
2134
+ this.sectionStart = this.index;
2135
+ }
2136
+ }
2137
+ stateInClosingTagName(c) {
2138
+ if (c === CharCodes2.Gt || isWhitespace(c)) {
2139
+ this.cbs.onclosetag(this.sectionStart, this.index);
2140
+ this.sectionStart = -1;
2141
+ this.state = State.AfterClosingTagName;
2142
+ this.stateAfterClosingTagName(c);
2143
+ }
2144
+ }
2145
+ stateAfterClosingTagName(c) {
2146
+ if (c === CharCodes2.Gt || this.fastForwardTo(CharCodes2.Gt)) {
2147
+ this.state = State.Text;
2148
+ this.sectionStart = this.index + 1;
2149
+ }
2150
+ }
2151
+ stateBeforeAttributeName(c) {
2152
+ if (c === CharCodes2.Gt) {
2153
+ this.cbs.onopentagend(this.index);
2154
+ if (this.isSpecial) {
2155
+ this.state = State.InSpecialTag;
2156
+ this.sequenceIndex = 0;
2157
+ } else {
2158
+ this.state = State.Text;
2159
+ }
2160
+ this.sectionStart = this.index + 1;
2161
+ } else if (c === CharCodes2.Slash) {
2162
+ this.state = State.InSelfClosingTag;
2163
+ } else if (!isWhitespace(c)) {
2164
+ this.state = State.InAttributeName;
2165
+ this.sectionStart = this.index;
2166
+ }
2167
+ }
2168
+ stateInSelfClosingTag(c) {
2169
+ if (c === CharCodes2.Gt) {
2170
+ this.cbs.onselfclosingtag(this.index);
2171
+ this.state = State.Text;
2172
+ this.sectionStart = this.index + 1;
2173
+ this.isSpecial = false;
2174
+ } else if (!isWhitespace(c)) {
2175
+ this.state = State.BeforeAttributeName;
2176
+ this.stateBeforeAttributeName(c);
2177
+ }
2178
+ }
2179
+ stateInAttributeName(c) {
2180
+ if (c === CharCodes2.Eq || isEndOfTagSection(c)) {
2181
+ this.cbs.onattribname(this.sectionStart, this.index);
2182
+ this.sectionStart = this.index;
2183
+ this.state = State.AfterAttributeName;
2184
+ this.stateAfterAttributeName(c);
2185
+ }
2186
+ }
2187
+ stateAfterAttributeName(c) {
2188
+ if (c === CharCodes2.Eq) {
2189
+ this.state = State.BeforeAttributeValue;
2190
+ } else if (c === CharCodes2.Slash || c === CharCodes2.Gt) {
2191
+ this.cbs.onattribend(QuoteType.NoValue, this.sectionStart);
2192
+ this.sectionStart = -1;
2193
+ this.state = State.BeforeAttributeName;
2194
+ this.stateBeforeAttributeName(c);
2195
+ } else if (!isWhitespace(c)) {
2196
+ this.cbs.onattribend(QuoteType.NoValue, this.sectionStart);
2197
+ this.state = State.InAttributeName;
2198
+ this.sectionStart = this.index;
2199
+ }
2200
+ }
2201
+ stateBeforeAttributeValue(c) {
2202
+ if (c === CharCodes2.DoubleQuote) {
2203
+ this.state = State.InAttributeValueDq;
2204
+ this.sectionStart = this.index + 1;
2205
+ } else if (c === CharCodes2.SingleQuote) {
2206
+ this.state = State.InAttributeValueSq;
2207
+ this.sectionStart = this.index + 1;
2208
+ } else if (!isWhitespace(c)) {
2209
+ this.sectionStart = this.index;
2210
+ this.state = State.InAttributeValueNq;
2211
+ this.stateInAttributeValueNoQuotes(c);
2212
+ }
2213
+ }
2214
+ handleInAttributeValue(c, quote2) {
2215
+ if (c === quote2 || !this.decodeEntities && this.fastForwardTo(quote2)) {
2216
+ this.cbs.onattribdata(this.sectionStart, this.index);
2217
+ this.sectionStart = -1;
2218
+ this.cbs.onattribend(quote2 === CharCodes2.DoubleQuote ? QuoteType.Double : QuoteType.Single, this.index + 1);
2219
+ this.state = State.BeforeAttributeName;
2220
+ } else if (this.decodeEntities && c === CharCodes2.Amp) {
2221
+ this.startEntity();
2222
+ }
2223
+ }
2224
+ stateInAttributeValueDoubleQuotes(c) {
2225
+ this.handleInAttributeValue(c, CharCodes2.DoubleQuote);
2226
+ }
2227
+ stateInAttributeValueSingleQuotes(c) {
2228
+ this.handleInAttributeValue(c, CharCodes2.SingleQuote);
2229
+ }
2230
+ stateInAttributeValueNoQuotes(c) {
2231
+ if (isWhitespace(c) || c === CharCodes2.Gt) {
2232
+ this.cbs.onattribdata(this.sectionStart, this.index);
2233
+ this.sectionStart = -1;
2234
+ this.cbs.onattribend(QuoteType.Unquoted, this.index);
2235
+ this.state = State.BeforeAttributeName;
2236
+ this.stateBeforeAttributeName(c);
2237
+ } else if (this.decodeEntities && c === CharCodes2.Amp) {
2238
+ this.startEntity();
2239
+ }
2240
+ }
2241
+ stateBeforeDeclaration(c) {
2242
+ if (c === CharCodes2.OpeningSquareBracket) {
2243
+ this.state = State.CDATASequence;
2244
+ this.sequenceIndex = 0;
2245
+ } else {
2246
+ this.state = c === CharCodes2.Dash ? State.BeforeComment : State.InDeclaration;
2247
+ }
2248
+ }
2249
+ stateInDeclaration(c) {
2250
+ if (c === CharCodes2.Gt || this.fastForwardTo(CharCodes2.Gt)) {
2251
+ this.cbs.ondeclaration(this.sectionStart, this.index);
2252
+ this.state = State.Text;
2253
+ this.sectionStart = this.index + 1;
2254
+ }
2255
+ }
2256
+ stateInProcessingInstruction(c) {
2257
+ if (c === CharCodes2.Gt || this.fastForwardTo(CharCodes2.Gt)) {
2258
+ this.cbs.onprocessinginstruction(this.sectionStart, this.index);
2259
+ this.state = State.Text;
2260
+ this.sectionStart = this.index + 1;
2261
+ }
2262
+ }
2263
+ stateBeforeComment(c) {
2264
+ if (c === CharCodes2.Dash) {
2265
+ this.state = State.InCommentLike;
2266
+ this.currentSequence = Sequences.CommentEnd;
2267
+ this.sequenceIndex = 2;
2268
+ this.sectionStart = this.index + 1;
2269
+ } else {
2270
+ this.state = State.InDeclaration;
2271
+ }
2272
+ }
2273
+ stateInSpecialComment(c) {
2274
+ if (c === CharCodes2.Gt || this.fastForwardTo(CharCodes2.Gt)) {
2275
+ this.cbs.oncomment(this.sectionStart, this.index, 0);
2276
+ this.state = State.Text;
2277
+ this.sectionStart = this.index + 1;
2278
+ }
2279
+ }
2280
+ stateBeforeSpecialS(c) {
2281
+ const lower = c | 32;
2282
+ if (lower === Sequences.ScriptEnd[3]) {
2283
+ this.startSpecial(Sequences.ScriptEnd, 4);
2284
+ } else if (lower === Sequences.StyleEnd[3]) {
2285
+ this.startSpecial(Sequences.StyleEnd, 4);
2286
+ } else {
2287
+ this.state = State.InTagName;
2288
+ this.stateInTagName(c);
2289
+ }
2290
+ }
2291
+ stateBeforeSpecialT(c) {
2292
+ const lower = c | 32;
2293
+ switch (lower) {
2294
+ case Sequences.TitleEnd[3]: {
2295
+ this.startSpecial(Sequences.TitleEnd, 4);
2296
+ break;
2297
+ }
2298
+ case Sequences.TextareaEnd[3]: {
2299
+ this.startSpecial(Sequences.TextareaEnd, 4);
2300
+ break;
2301
+ }
2302
+ case Sequences.XmpEnd[3]: {
2303
+ this.startSpecial(Sequences.XmpEnd, 4);
2304
+ break;
2305
+ }
2306
+ default: {
2307
+ this.state = State.InTagName;
2308
+ this.stateInTagName(c);
2309
+ }
2310
+ }
2311
+ }
2312
+ startEntity() {
2313
+ this.baseState = this.state;
2314
+ this.state = State.InEntity;
2315
+ this.entityStart = this.index;
2316
+ this.entityDecoder.startEntity(this.xmlMode ? DecodingMode.Strict : this.baseState === State.Text || this.baseState === State.InSpecialTag ? DecodingMode.Legacy : DecodingMode.Attribute);
2317
+ }
2318
+ stateInEntity() {
2319
+ const indexInBuffer = this.index - this.offset;
2320
+ const length = this.entityDecoder.write(this.buffer, indexInBuffer);
2321
+ if (length >= 0) {
2322
+ this.state = this.baseState;
2323
+ if (length === 0) {
2324
+ this.index -= 1;
2325
+ }
2326
+ } else {
2327
+ if (indexInBuffer < this.buffer.length && this.buffer.charCodeAt(indexInBuffer) === CharCodes2.Amp) {
2328
+ this.state = this.baseState;
2329
+ this.index -= 1;
2330
+ return;
2331
+ }
2332
+ this.index = this.offset + this.buffer.length - 1;
2333
+ }
2334
+ }
2335
+ /**
2336
+ * Remove data that has already been consumed from the buffer.
2337
+ */
2338
+ cleanup() {
2339
+ if (this.running && this.sectionStart !== this.index) {
2340
+ if (this.state === State.Text || this.state === State.InSpecialTag && this.sequenceIndex === 0) {
2341
+ this.cbs.ontext(this.sectionStart, this.index);
2342
+ this.sectionStart = this.index;
2343
+ } else if (this.state === State.InAttributeValueDq || this.state === State.InAttributeValueSq || this.state === State.InAttributeValueNq) {
2344
+ this.cbs.onattribdata(this.sectionStart, this.index);
2345
+ this.sectionStart = this.index;
2346
+ }
2347
+ }
2348
+ }
2349
+ shouldContinue() {
2350
+ return this.index < this.buffer.length + this.offset && this.running;
2351
+ }
2352
+ /**
2353
+ * Iterates through the buffer, calling the function corresponding to the current state.
2354
+ *
2355
+ * States that are more likely to be hit are higher up, as a performance improvement.
2356
+ */
2357
+ parse() {
2358
+ while (this.shouldContinue()) {
2359
+ const c = this.buffer.charCodeAt(this.index - this.offset);
2360
+ switch (this.state) {
2361
+ case State.Text: {
2362
+ this.stateText(c);
2363
+ break;
2364
+ }
2365
+ case State.SpecialStartSequence: {
2366
+ this.stateSpecialStartSequence(c);
2367
+ break;
2368
+ }
2369
+ case State.InSpecialTag: {
2370
+ this.stateInSpecialTag(c);
2371
+ break;
2372
+ }
2373
+ case State.CDATASequence: {
2374
+ this.stateCDATASequence(c);
2375
+ break;
2376
+ }
2377
+ case State.InAttributeValueDq: {
2378
+ this.stateInAttributeValueDoubleQuotes(c);
2379
+ break;
2380
+ }
2381
+ case State.InAttributeName: {
2382
+ this.stateInAttributeName(c);
2383
+ break;
2384
+ }
2385
+ case State.InCommentLike: {
2386
+ this.stateInCommentLike(c);
2387
+ break;
2388
+ }
2389
+ case State.InSpecialComment: {
2390
+ this.stateInSpecialComment(c);
2391
+ break;
2392
+ }
2393
+ case State.BeforeAttributeName: {
2394
+ this.stateBeforeAttributeName(c);
2395
+ break;
2396
+ }
2397
+ case State.InTagName: {
2398
+ this.stateInTagName(c);
2399
+ break;
2400
+ }
2401
+ case State.InClosingTagName: {
2402
+ this.stateInClosingTagName(c);
2403
+ break;
2404
+ }
2405
+ case State.BeforeTagName: {
2406
+ this.stateBeforeTagName(c);
2407
+ break;
2408
+ }
2409
+ case State.AfterAttributeName: {
2410
+ this.stateAfterAttributeName(c);
2411
+ break;
2412
+ }
2413
+ case State.InAttributeValueSq: {
2414
+ this.stateInAttributeValueSingleQuotes(c);
2415
+ break;
2416
+ }
2417
+ case State.BeforeAttributeValue: {
2418
+ this.stateBeforeAttributeValue(c);
2419
+ break;
2420
+ }
2421
+ case State.BeforeClosingTagName: {
2422
+ this.stateBeforeClosingTagName(c);
2423
+ break;
2424
+ }
2425
+ case State.AfterClosingTagName: {
2426
+ this.stateAfterClosingTagName(c);
2427
+ break;
2428
+ }
2429
+ case State.BeforeSpecialS: {
2430
+ this.stateBeforeSpecialS(c);
2431
+ break;
2432
+ }
2433
+ case State.BeforeSpecialT: {
2434
+ this.stateBeforeSpecialT(c);
2435
+ break;
2436
+ }
2437
+ case State.InAttributeValueNq: {
2438
+ this.stateInAttributeValueNoQuotes(c);
2439
+ break;
2440
+ }
2441
+ case State.InSelfClosingTag: {
2442
+ this.stateInSelfClosingTag(c);
2443
+ break;
2444
+ }
2445
+ case State.InDeclaration: {
2446
+ this.stateInDeclaration(c);
2447
+ break;
2448
+ }
2449
+ case State.BeforeDeclaration: {
2450
+ this.stateBeforeDeclaration(c);
2451
+ break;
2452
+ }
2453
+ case State.BeforeComment: {
2454
+ this.stateBeforeComment(c);
2455
+ break;
2456
+ }
2457
+ case State.InProcessingInstruction: {
2458
+ this.stateInProcessingInstruction(c);
2459
+ break;
2460
+ }
2461
+ case State.InEntity: {
2462
+ this.stateInEntity();
2463
+ break;
2464
+ }
2465
+ }
2466
+ this.index++;
2467
+ }
2468
+ this.cleanup();
2469
+ }
2470
+ finish() {
2471
+ if (this.state === State.InEntity) {
2472
+ this.entityDecoder.end();
2473
+ this.state = this.baseState;
2474
+ }
2475
+ this.handleTrailingData();
2476
+ this.cbs.onend();
2477
+ }
2478
+ /** Handle any trailing data. */
2479
+ handleTrailingData() {
2480
+ const endIndex = this.buffer.length + this.offset;
2481
+ if (this.sectionStart >= endIndex) {
2482
+ return;
2483
+ }
2484
+ if (this.state === State.InCommentLike) {
2485
+ if (this.currentSequence === Sequences.CdataEnd) {
2486
+ this.cbs.oncdata(this.sectionStart, endIndex, 0);
2487
+ } else {
2488
+ this.cbs.oncomment(this.sectionStart, endIndex, 0);
2489
+ }
2490
+ } 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) {
2491
+ } else {
2492
+ this.cbs.ontext(this.sectionStart, endIndex);
2493
+ }
2494
+ }
2495
+ emitCodePoint(cp, consumed) {
2496
+ if (this.baseState !== State.Text && this.baseState !== State.InSpecialTag) {
2497
+ if (this.sectionStart < this.entityStart) {
2498
+ this.cbs.onattribdata(this.sectionStart, this.entityStart);
2499
+ }
2500
+ this.sectionStart = this.entityStart + consumed;
2501
+ this.index = this.sectionStart - 1;
2502
+ this.cbs.onattribentity(cp);
2503
+ } else {
2504
+ if (this.sectionStart < this.entityStart) {
2505
+ this.cbs.ontext(this.sectionStart, this.entityStart);
2506
+ }
2507
+ this.sectionStart = this.entityStart + consumed;
2508
+ this.index = this.sectionStart - 1;
2509
+ this.cbs.ontextentity(cp, this.sectionStart);
2510
+ }
2511
+ }
2512
+ };
2513
+
2514
+ // node_modules/.pnpm/htmlparser2@10.1.0/node_modules/htmlparser2/dist/esm/Parser.js
2515
+ var formTags = /* @__PURE__ */ new Set([
2516
+ "input",
2517
+ "option",
2518
+ "optgroup",
2519
+ "select",
2520
+ "button",
2521
+ "datalist",
2522
+ "textarea"
2523
+ ]);
2524
+ var pTag = /* @__PURE__ */ new Set(["p"]);
2525
+ var tableSectionTags = /* @__PURE__ */ new Set(["thead", "tbody"]);
2526
+ var ddtTags = /* @__PURE__ */ new Set(["dd", "dt"]);
2527
+ var rtpTags = /* @__PURE__ */ new Set(["rt", "rp"]);
2528
+ var openImpliesClose = /* @__PURE__ */ new Map([
2529
+ ["tr", /* @__PURE__ */ new Set(["tr", "th", "td"])],
2530
+ ["th", /* @__PURE__ */ new Set(["th"])],
2531
+ ["td", /* @__PURE__ */ new Set(["thead", "th", "td"])],
2532
+ ["body", /* @__PURE__ */ new Set(["head", "link", "script"])],
2533
+ ["li", /* @__PURE__ */ new Set(["li"])],
2534
+ ["p", pTag],
2535
+ ["h1", pTag],
2536
+ ["h2", pTag],
2537
+ ["h3", pTag],
2538
+ ["h4", pTag],
2539
+ ["h5", pTag],
2540
+ ["h6", pTag],
2541
+ ["select", formTags],
2542
+ ["input", formTags],
2543
+ ["output", formTags],
2544
+ ["button", formTags],
2545
+ ["datalist", formTags],
2546
+ ["textarea", formTags],
2547
+ ["option", /* @__PURE__ */ new Set(["option"])],
2548
+ ["optgroup", /* @__PURE__ */ new Set(["optgroup", "option"])],
2549
+ ["dd", ddtTags],
2550
+ ["dt", ddtTags],
2551
+ ["address", pTag],
2552
+ ["article", pTag],
2553
+ ["aside", pTag],
2554
+ ["blockquote", pTag],
2555
+ ["details", pTag],
2556
+ ["div", pTag],
2557
+ ["dl", pTag],
2558
+ ["fieldset", pTag],
2559
+ ["figcaption", pTag],
2560
+ ["figure", pTag],
2561
+ ["footer", pTag],
2562
+ ["form", pTag],
2563
+ ["header", pTag],
2564
+ ["hr", pTag],
2565
+ ["main", pTag],
2566
+ ["nav", pTag],
2567
+ ["ol", pTag],
2568
+ ["pre", pTag],
2569
+ ["section", pTag],
2570
+ ["table", pTag],
2571
+ ["ul", pTag],
2572
+ ["rt", rtpTags],
2573
+ ["rp", rtpTags],
2574
+ ["tbody", tableSectionTags],
2575
+ ["tfoot", tableSectionTags]
2576
+ ]);
2577
+ var voidElements = /* @__PURE__ */ new Set([
2578
+ "area",
2579
+ "base",
2580
+ "basefont",
2581
+ "br",
2582
+ "col",
2583
+ "command",
2584
+ "embed",
2585
+ "frame",
2586
+ "hr",
2587
+ "img",
2588
+ "input",
2589
+ "isindex",
2590
+ "keygen",
2591
+ "link",
2592
+ "meta",
2593
+ "param",
2594
+ "source",
2595
+ "track",
2596
+ "wbr"
2597
+ ]);
2598
+ var foreignContextElements = /* @__PURE__ */ new Set(["math", "svg"]);
2599
+ var htmlIntegrationElements = /* @__PURE__ */ new Set([
2600
+ "mi",
2601
+ "mo",
2602
+ "mn",
2603
+ "ms",
2604
+ "mtext",
2605
+ "annotation-xml",
2606
+ "foreignobject",
2607
+ "desc",
2608
+ "title"
2609
+ ]);
2610
+ var reNameEnd = /\s|\//;
2611
+ var Parser = class {
2612
+ constructor(cbs, options = {}) {
2613
+ var _a3, _b, _c, _d, _e, _f;
2614
+ this.options = options;
2615
+ this.startIndex = 0;
2616
+ this.endIndex = 0;
2617
+ this.openTagStart = 0;
2618
+ this.tagname = "";
2619
+ this.attribname = "";
2620
+ this.attribvalue = "";
2621
+ this.attribs = null;
2622
+ this.stack = [];
2623
+ this.buffers = [];
2624
+ this.bufferOffset = 0;
2625
+ this.writeIndex = 0;
2626
+ this.ended = false;
2627
+ this.cbs = cbs !== null && cbs !== void 0 ? cbs : {};
2628
+ this.htmlMode = !this.options.xmlMode;
2629
+ this.lowerCaseTagNames = (_a3 = options.lowerCaseTags) !== null && _a3 !== void 0 ? _a3 : this.htmlMode;
2630
+ this.lowerCaseAttributeNames = (_b = options.lowerCaseAttributeNames) !== null && _b !== void 0 ? _b : this.htmlMode;
2631
+ this.recognizeSelfClosing = (_c = options.recognizeSelfClosing) !== null && _c !== void 0 ? _c : !this.htmlMode;
2632
+ this.tokenizer = new ((_d = options.Tokenizer) !== null && _d !== void 0 ? _d : Tokenizer)(this.options, this);
2633
+ this.foreignContext = [!this.htmlMode];
2634
+ (_f = (_e = this.cbs).onparserinit) === null || _f === void 0 ? void 0 : _f.call(_e, this);
2635
+ }
2636
+ // Tokenizer event handlers
2637
+ /** @internal */
2638
+ ontext(start, endIndex) {
2639
+ var _a3, _b;
2640
+ const data = this.getSlice(start, endIndex);
2641
+ this.endIndex = endIndex - 1;
2642
+ (_b = (_a3 = this.cbs).ontext) === null || _b === void 0 ? void 0 : _b.call(_a3, data);
2643
+ this.startIndex = endIndex;
2644
+ }
2645
+ /** @internal */
2646
+ ontextentity(cp, endIndex) {
2647
+ var _a3, _b;
2648
+ this.endIndex = endIndex - 1;
2649
+ (_b = (_a3 = this.cbs).ontext) === null || _b === void 0 ? void 0 : _b.call(_a3, fromCodePoint(cp));
2650
+ this.startIndex = endIndex;
2651
+ }
2652
+ /**
2653
+ * Checks if the current tag is a void element. Override this if you want
2654
+ * to specify your own additional void elements.
2655
+ */
2656
+ isVoidElement(name) {
2657
+ return this.htmlMode && voidElements.has(name);
2658
+ }
2659
+ /** @internal */
2660
+ onopentagname(start, endIndex) {
2661
+ this.endIndex = endIndex;
2662
+ let name = this.getSlice(start, endIndex);
2663
+ if (this.lowerCaseTagNames) {
2664
+ name = name.toLowerCase();
2665
+ }
2666
+ this.emitOpenTag(name);
2667
+ }
2668
+ emitOpenTag(name) {
2669
+ var _a3, _b, _c, _d;
2670
+ this.openTagStart = this.startIndex;
2671
+ this.tagname = name;
2672
+ const impliesClose = this.htmlMode && openImpliesClose.get(name);
2673
+ if (impliesClose) {
2674
+ while (this.stack.length > 0 && impliesClose.has(this.stack[0])) {
2675
+ const element = this.stack.shift();
2676
+ (_b = (_a3 = this.cbs).onclosetag) === null || _b === void 0 ? void 0 : _b.call(_a3, element, true);
2677
+ }
2678
+ }
2679
+ if (!this.isVoidElement(name)) {
2680
+ this.stack.unshift(name);
2681
+ if (this.htmlMode) {
2682
+ if (foreignContextElements.has(name)) {
2683
+ this.foreignContext.unshift(true);
2684
+ } else if (htmlIntegrationElements.has(name)) {
2685
+ this.foreignContext.unshift(false);
2686
+ }
2687
+ }
2688
+ }
2689
+ (_d = (_c = this.cbs).onopentagname) === null || _d === void 0 ? void 0 : _d.call(_c, name);
2690
+ if (this.cbs.onopentag)
2691
+ this.attribs = {};
2692
+ }
2693
+ endOpenTag(isImplied) {
2694
+ var _a3, _b;
2695
+ this.startIndex = this.openTagStart;
2696
+ if (this.attribs) {
2697
+ (_b = (_a3 = this.cbs).onopentag) === null || _b === void 0 ? void 0 : _b.call(_a3, this.tagname, this.attribs, isImplied);
2698
+ this.attribs = null;
2699
+ }
2700
+ if (this.cbs.onclosetag && this.isVoidElement(this.tagname)) {
2701
+ this.cbs.onclosetag(this.tagname, true);
2702
+ }
2703
+ this.tagname = "";
2704
+ }
2705
+ /** @internal */
2706
+ onopentagend(endIndex) {
2707
+ this.endIndex = endIndex;
2708
+ this.endOpenTag(false);
2709
+ this.startIndex = endIndex + 1;
2710
+ }
2711
+ /** @internal */
2712
+ onclosetag(start, endIndex) {
2713
+ var _a3, _b, _c, _d, _e, _f, _g, _h;
2714
+ this.endIndex = endIndex;
2715
+ let name = this.getSlice(start, endIndex);
2716
+ if (this.lowerCaseTagNames) {
2717
+ name = name.toLowerCase();
2718
+ }
2719
+ if (this.htmlMode && (foreignContextElements.has(name) || htmlIntegrationElements.has(name))) {
2720
+ this.foreignContext.shift();
2721
+ }
2722
+ if (!this.isVoidElement(name)) {
2723
+ const pos = this.stack.indexOf(name);
2724
+ if (pos !== -1) {
2725
+ for (let index = 0; index <= pos; index++) {
2726
+ const element = this.stack.shift();
2727
+ (_b = (_a3 = this.cbs).onclosetag) === null || _b === void 0 ? void 0 : _b.call(_a3, element, index !== pos);
2728
+ }
2729
+ } else if (this.htmlMode && name === "p") {
2730
+ this.emitOpenTag("p");
2731
+ this.closeCurrentTag(true);
2732
+ }
2733
+ } else if (this.htmlMode && name === "br") {
2734
+ (_d = (_c = this.cbs).onopentagname) === null || _d === void 0 ? void 0 : _d.call(_c, "br");
2735
+ (_f = (_e = this.cbs).onopentag) === null || _f === void 0 ? void 0 : _f.call(_e, "br", {}, true);
2736
+ (_h = (_g = this.cbs).onclosetag) === null || _h === void 0 ? void 0 : _h.call(_g, "br", false);
2737
+ }
2738
+ this.startIndex = endIndex + 1;
2739
+ }
2740
+ /** @internal */
2741
+ onselfclosingtag(endIndex) {
2742
+ this.endIndex = endIndex;
2743
+ if (this.recognizeSelfClosing || this.foreignContext[0]) {
2744
+ this.closeCurrentTag(false);
2745
+ this.startIndex = endIndex + 1;
2746
+ } else {
2747
+ this.onopentagend(endIndex);
2748
+ }
2749
+ }
2750
+ closeCurrentTag(isOpenImplied) {
2751
+ var _a3, _b;
2752
+ const name = this.tagname;
2753
+ this.endOpenTag(isOpenImplied);
2754
+ if (this.stack[0] === name) {
2755
+ (_b = (_a3 = this.cbs).onclosetag) === null || _b === void 0 ? void 0 : _b.call(_a3, name, !isOpenImplied);
2756
+ this.stack.shift();
2757
+ }
2758
+ }
2759
+ /** @internal */
2760
+ onattribname(start, endIndex) {
2761
+ this.startIndex = start;
2762
+ const name = this.getSlice(start, endIndex);
2763
+ this.attribname = this.lowerCaseAttributeNames ? name.toLowerCase() : name;
2764
+ }
2765
+ /** @internal */
2766
+ onattribdata(start, endIndex) {
2767
+ this.attribvalue += this.getSlice(start, endIndex);
2768
+ }
2769
+ /** @internal */
2770
+ onattribentity(cp) {
2771
+ this.attribvalue += fromCodePoint(cp);
2772
+ }
2773
+ /** @internal */
2774
+ onattribend(quote2, endIndex) {
2775
+ var _a3, _b;
2776
+ this.endIndex = endIndex;
2777
+ (_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);
2778
+ if (this.attribs && !Object.prototype.hasOwnProperty.call(this.attribs, this.attribname)) {
2779
+ this.attribs[this.attribname] = this.attribvalue;
2780
+ }
2781
+ this.attribvalue = "";
2782
+ }
2783
+ getInstructionName(value) {
2784
+ const index = value.search(reNameEnd);
2785
+ let name = index < 0 ? value : value.substr(0, index);
2786
+ if (this.lowerCaseTagNames) {
2787
+ name = name.toLowerCase();
2788
+ }
2789
+ return name;
2790
+ }
2791
+ /** @internal */
2792
+ ondeclaration(start, endIndex) {
2793
+ this.endIndex = endIndex;
2794
+ const value = this.getSlice(start, endIndex);
2795
+ if (this.cbs.onprocessinginstruction) {
2796
+ const name = this.getInstructionName(value);
2797
+ this.cbs.onprocessinginstruction(`!${name}`, `!${value}`);
2798
+ }
2799
+ this.startIndex = endIndex + 1;
2800
+ }
2801
+ /** @internal */
2802
+ onprocessinginstruction(start, endIndex) {
2803
+ this.endIndex = endIndex;
2804
+ const value = this.getSlice(start, endIndex);
2805
+ if (this.cbs.onprocessinginstruction) {
2806
+ const name = this.getInstructionName(value);
2807
+ this.cbs.onprocessinginstruction(`?${name}`, `?${value}`);
2808
+ }
2809
+ this.startIndex = endIndex + 1;
2810
+ }
2811
+ /** @internal */
2812
+ oncomment(start, endIndex, offset) {
2813
+ var _a3, _b, _c, _d;
2814
+ this.endIndex = endIndex;
2815
+ (_b = (_a3 = this.cbs).oncomment) === null || _b === void 0 ? void 0 : _b.call(_a3, this.getSlice(start, endIndex - offset));
2816
+ (_d = (_c = this.cbs).oncommentend) === null || _d === void 0 ? void 0 : _d.call(_c);
2817
+ this.startIndex = endIndex + 1;
2818
+ }
2819
+ /** @internal */
2820
+ oncdata(start, endIndex, offset) {
2821
+ var _a3, _b, _c, _d, _e, _f, _g, _h, _j, _k;
2822
+ this.endIndex = endIndex;
2823
+ const value = this.getSlice(start, endIndex - offset);
2824
+ if (!this.htmlMode || this.options.recognizeCDATA) {
2825
+ (_b = (_a3 = this.cbs).oncdatastart) === null || _b === void 0 ? void 0 : _b.call(_a3);
2826
+ (_d = (_c = this.cbs).ontext) === null || _d === void 0 ? void 0 : _d.call(_c, value);
2827
+ (_f = (_e = this.cbs).oncdataend) === null || _f === void 0 ? void 0 : _f.call(_e);
2828
+ } else {
2829
+ (_h = (_g = this.cbs).oncomment) === null || _h === void 0 ? void 0 : _h.call(_g, `[CDATA[${value}]]`);
2830
+ (_k = (_j = this.cbs).oncommentend) === null || _k === void 0 ? void 0 : _k.call(_j);
2831
+ }
2832
+ this.startIndex = endIndex + 1;
2833
+ }
2834
+ /** @internal */
2835
+ onend() {
2836
+ var _a3, _b;
2837
+ if (this.cbs.onclosetag) {
2838
+ this.endIndex = this.startIndex;
2839
+ for (let index = 0; index < this.stack.length; index++) {
2840
+ this.cbs.onclosetag(this.stack[index], true);
2841
+ }
2842
+ }
2843
+ (_b = (_a3 = this.cbs).onend) === null || _b === void 0 ? void 0 : _b.call(_a3);
2844
+ }
2845
+ /**
2846
+ * Resets the parser to a blank state, ready to parse a new HTML document
2847
+ */
2848
+ reset() {
2849
+ var _a3, _b, _c, _d;
2850
+ (_b = (_a3 = this.cbs).onreset) === null || _b === void 0 ? void 0 : _b.call(_a3);
2851
+ this.tokenizer.reset();
2852
+ this.tagname = "";
2853
+ this.attribname = "";
2854
+ this.attribs = null;
2855
+ this.stack.length = 0;
2856
+ this.startIndex = 0;
2857
+ this.endIndex = 0;
2858
+ (_d = (_c = this.cbs).onparserinit) === null || _d === void 0 ? void 0 : _d.call(_c, this);
2859
+ this.buffers.length = 0;
2860
+ this.foreignContext.length = 0;
2861
+ this.foreignContext.unshift(!this.htmlMode);
2862
+ this.bufferOffset = 0;
2863
+ this.writeIndex = 0;
2864
+ this.ended = false;
2865
+ }
2866
+ /**
2867
+ * Resets the parser, then parses a complete document and
2868
+ * pushes it to the handler.
2869
+ *
2870
+ * @param data Document to parse.
2871
+ */
2872
+ parseComplete(data) {
2873
+ this.reset();
2874
+ this.end(data);
2875
+ }
2876
+ getSlice(start, end) {
2877
+ while (start - this.bufferOffset >= this.buffers[0].length) {
2878
+ this.shiftBuffer();
2879
+ }
2880
+ let slice = this.buffers[0].slice(start - this.bufferOffset, end - this.bufferOffset);
2881
+ while (end - this.bufferOffset > this.buffers[0].length) {
2882
+ this.shiftBuffer();
2883
+ slice += this.buffers[0].slice(0, end - this.bufferOffset);
2884
+ }
2885
+ return slice;
2886
+ }
2887
+ shiftBuffer() {
2888
+ this.bufferOffset += this.buffers[0].length;
2889
+ this.writeIndex--;
2890
+ this.buffers.shift();
2891
+ }
2892
+ /**
2893
+ * Parses a chunk of data and calls the corresponding callbacks.
2894
+ *
2895
+ * @param chunk Chunk to parse.
2896
+ */
2897
+ write(chunk) {
2898
+ var _a3, _b;
2899
+ if (this.ended) {
2900
+ (_b = (_a3 = this.cbs).onerror) === null || _b === void 0 ? void 0 : _b.call(_a3, new Error(".write() after done!"));
2901
+ return;
2902
+ }
2903
+ this.buffers.push(chunk);
2904
+ if (this.tokenizer.running) {
2905
+ this.tokenizer.write(chunk);
2906
+ this.writeIndex++;
2907
+ }
2908
+ }
2909
+ /**
2910
+ * Parses the end of the buffer and clears the stack, calls onend.
2911
+ *
2912
+ * @param chunk Optional final chunk to parse.
2913
+ */
2914
+ end(chunk) {
2915
+ var _a3, _b;
2916
+ if (this.ended) {
2917
+ (_b = (_a3 = this.cbs).onerror) === null || _b === void 0 ? void 0 : _b.call(_a3, new Error(".end() after done!"));
2918
+ return;
2919
+ }
2920
+ if (chunk)
2921
+ this.write(chunk);
2922
+ this.ended = true;
2923
+ this.tokenizer.end();
2924
+ }
2925
+ /**
2926
+ * Pauses parsing. The parser won't emit events until `resume` is called.
2927
+ */
2928
+ pause() {
2929
+ this.tokenizer.pause();
2930
+ }
2931
+ /**
2932
+ * Resumes parsing after `pause` was called.
2933
+ */
2934
+ resume() {
2935
+ this.tokenizer.resume();
2936
+ while (this.tokenizer.running && this.writeIndex < this.buffers.length) {
2937
+ this.tokenizer.write(this.buffers[this.writeIndex++]);
2938
+ }
2939
+ if (this.ended)
2940
+ this.tokenizer.end();
2941
+ }
2942
+ /**
2943
+ * Alias of `write`, for backwards compatibility.
2944
+ *
2945
+ * @param chunk Chunk to parse.
2946
+ * @deprecated
2947
+ */
2948
+ parseChunk(chunk) {
2949
+ this.write(chunk);
2950
+ }
2951
+ /**
2952
+ * Alias of `end`, for backwards compatibility.
2953
+ *
2954
+ * @param chunk Optional final chunk to parse.
2955
+ * @deprecated
2956
+ */
2957
+ done(chunk) {
2958
+ this.end(chunk);
2959
+ }
2960
+ };
2961
+
2962
+ // node_modules/.pnpm/domelementtype@2.3.0/node_modules/domelementtype/lib/esm/index.js
2963
+ var ElementType;
2964
+ (function(ElementType2) {
2965
+ ElementType2["Root"] = "root";
2966
+ ElementType2["Text"] = "text";
2967
+ ElementType2["Directive"] = "directive";
2968
+ ElementType2["Comment"] = "comment";
2969
+ ElementType2["Script"] = "script";
2970
+ ElementType2["Style"] = "style";
2971
+ ElementType2["Tag"] = "tag";
2972
+ ElementType2["CDATA"] = "cdata";
2973
+ ElementType2["Doctype"] = "doctype";
2974
+ })(ElementType || (ElementType = {}));
2975
+ function isTag(elem) {
2976
+ return elem.type === ElementType.Tag || elem.type === ElementType.Script || elem.type === ElementType.Style;
2977
+ }
2978
+ var Root = ElementType.Root;
2979
+ var Text = ElementType.Text;
2980
+ var Directive = ElementType.Directive;
2981
+ var Comment = ElementType.Comment;
2982
+ var Script = ElementType.Script;
2983
+ var Style = ElementType.Style;
2984
+ var Tag = ElementType.Tag;
2985
+ var CDATA = ElementType.CDATA;
2986
+ var Doctype = ElementType.Doctype;
2987
+
2988
+ // node_modules/.pnpm/domhandler@5.0.3/node_modules/domhandler/lib/esm/node.js
2989
+ var Node = class {
2990
+ constructor() {
2991
+ this.parent = null;
2992
+ this.prev = null;
2993
+ this.next = null;
2994
+ this.startIndex = null;
2995
+ this.endIndex = null;
2996
+ }
2997
+ // Read-write aliases for properties
2998
+ /**
2999
+ * Same as {@link parent}.
3000
+ * [DOM spec](https://dom.spec.whatwg.org)-compatible alias.
3001
+ */
3002
+ get parentNode() {
3003
+ return this.parent;
3004
+ }
3005
+ set parentNode(parent) {
3006
+ this.parent = parent;
3007
+ }
3008
+ /**
3009
+ * Same as {@link prev}.
3010
+ * [DOM spec](https://dom.spec.whatwg.org)-compatible alias.
3011
+ */
3012
+ get previousSibling() {
3013
+ return this.prev;
3014
+ }
3015
+ set previousSibling(prev) {
3016
+ this.prev = prev;
3017
+ }
3018
+ /**
3019
+ * Same as {@link next}.
3020
+ * [DOM spec](https://dom.spec.whatwg.org)-compatible alias.
3021
+ */
3022
+ get nextSibling() {
3023
+ return this.next;
3024
+ }
3025
+ set nextSibling(next) {
3026
+ this.next = next;
3027
+ }
3028
+ /**
3029
+ * Clone this node, and optionally its children.
3030
+ *
3031
+ * @param recursive Clone child nodes as well.
3032
+ * @returns A clone of the node.
3033
+ */
3034
+ cloneNode(recursive = false) {
3035
+ return cloneNode(this, recursive);
3036
+ }
3037
+ };
3038
+ var DataNode = class extends Node {
3039
+ /**
3040
+ * @param data The content of the data node
3041
+ */
3042
+ constructor(data) {
3043
+ super();
3044
+ this.data = data;
3045
+ }
3046
+ /**
3047
+ * Same as {@link data}.
3048
+ * [DOM spec](https://dom.spec.whatwg.org)-compatible alias.
3049
+ */
3050
+ get nodeValue() {
3051
+ return this.data;
3052
+ }
3053
+ set nodeValue(data) {
3054
+ this.data = data;
3055
+ }
3056
+ };
3057
+ var Text2 = class extends DataNode {
3058
+ constructor() {
3059
+ super(...arguments);
3060
+ this.type = ElementType.Text;
3061
+ }
3062
+ get nodeType() {
3063
+ return 3;
3064
+ }
3065
+ };
3066
+ var Comment2 = class extends DataNode {
3067
+ constructor() {
3068
+ super(...arguments);
3069
+ this.type = ElementType.Comment;
3070
+ }
3071
+ get nodeType() {
3072
+ return 8;
3073
+ }
3074
+ };
3075
+ var ProcessingInstruction = class extends DataNode {
3076
+ constructor(name, data) {
3077
+ super(data);
3078
+ this.name = name;
3079
+ this.type = ElementType.Directive;
3080
+ }
3081
+ get nodeType() {
3082
+ return 1;
3083
+ }
3084
+ };
3085
+ var NodeWithChildren = class extends Node {
3086
+ /**
3087
+ * @param children Children of the node. Only certain node types can have children.
3088
+ */
3089
+ constructor(children) {
3090
+ super();
3091
+ this.children = children;
3092
+ }
3093
+ // Aliases
3094
+ /** First child of the node. */
3095
+ get firstChild() {
3096
+ var _a3;
3097
+ return (_a3 = this.children[0]) !== null && _a3 !== void 0 ? _a3 : null;
3098
+ }
3099
+ /** Last child of the node. */
3100
+ get lastChild() {
3101
+ return this.children.length > 0 ? this.children[this.children.length - 1] : null;
3102
+ }
3103
+ /**
3104
+ * Same as {@link children}.
3105
+ * [DOM spec](https://dom.spec.whatwg.org)-compatible alias.
3106
+ */
3107
+ get childNodes() {
3108
+ return this.children;
3109
+ }
3110
+ set childNodes(children) {
3111
+ this.children = children;
3112
+ }
3113
+ };
3114
+ var CDATA2 = class extends NodeWithChildren {
3115
+ constructor() {
3116
+ super(...arguments);
3117
+ this.type = ElementType.CDATA;
3118
+ }
3119
+ get nodeType() {
3120
+ return 4;
3121
+ }
3122
+ };
3123
+ var Document = class extends NodeWithChildren {
3124
+ constructor() {
3125
+ super(...arguments);
3126
+ this.type = ElementType.Root;
3127
+ }
3128
+ get nodeType() {
3129
+ return 9;
3130
+ }
3131
+ };
3132
+ var Element = class extends NodeWithChildren {
3133
+ /**
3134
+ * @param name Name of the tag, eg. `div`, `span`.
3135
+ * @param attribs Object mapping attribute names to attribute values.
3136
+ * @param children Children of the node.
3137
+ */
3138
+ constructor(name, attribs, children = [], type = name === "script" ? ElementType.Script : name === "style" ? ElementType.Style : ElementType.Tag) {
3139
+ super(children);
3140
+ this.name = name;
3141
+ this.attribs = attribs;
3142
+ this.type = type;
3143
+ }
3144
+ get nodeType() {
3145
+ return 1;
3146
+ }
3147
+ // DOM Level 1 aliases
3148
+ /**
3149
+ * Same as {@link name}.
3150
+ * [DOM spec](https://dom.spec.whatwg.org)-compatible alias.
3151
+ */
3152
+ get tagName() {
3153
+ return this.name;
3154
+ }
3155
+ set tagName(name) {
3156
+ this.name = name;
3157
+ }
3158
+ get attributes() {
3159
+ return Object.keys(this.attribs).map((name) => {
3160
+ var _a3, _b;
3161
+ return {
3162
+ name,
3163
+ value: this.attribs[name],
3164
+ namespace: (_a3 = this["x-attribsNamespace"]) === null || _a3 === void 0 ? void 0 : _a3[name],
3165
+ prefix: (_b = this["x-attribsPrefix"]) === null || _b === void 0 ? void 0 : _b[name]
3166
+ };
3167
+ });
3168
+ }
3169
+ };
3170
+ function isTag2(node) {
3171
+ return isTag(node);
3172
+ }
3173
+ function isCDATA(node) {
3174
+ return node.type === ElementType.CDATA;
3175
+ }
3176
+ function isText(node) {
3177
+ return node.type === ElementType.Text;
3178
+ }
3179
+ function isComment(node) {
3180
+ return node.type === ElementType.Comment;
3181
+ }
3182
+ function isDirective(node) {
3183
+ return node.type === ElementType.Directive;
3184
+ }
3185
+ function isDocument(node) {
3186
+ return node.type === ElementType.Root;
3187
+ }
3188
+ function cloneNode(node, recursive = false) {
3189
+ let result;
3190
+ if (isText(node)) {
3191
+ result = new Text2(node.data);
3192
+ } else if (isComment(node)) {
3193
+ result = new Comment2(node.data);
3194
+ } else if (isTag2(node)) {
3195
+ const children = recursive ? cloneChildren(node.children) : [];
3196
+ const clone = new Element(node.name, { ...node.attribs }, children);
3197
+ children.forEach((child) => child.parent = clone);
3198
+ if (node.namespace != null) {
3199
+ clone.namespace = node.namespace;
3200
+ }
3201
+ if (node["x-attribsNamespace"]) {
3202
+ clone["x-attribsNamespace"] = { ...node["x-attribsNamespace"] };
3203
+ }
3204
+ if (node["x-attribsPrefix"]) {
3205
+ clone["x-attribsPrefix"] = { ...node["x-attribsPrefix"] };
3206
+ }
3207
+ result = clone;
3208
+ } else if (isCDATA(node)) {
3209
+ const children = recursive ? cloneChildren(node.children) : [];
3210
+ const clone = new CDATA2(children);
3211
+ children.forEach((child) => child.parent = clone);
3212
+ result = clone;
3213
+ } else if (isDocument(node)) {
3214
+ const children = recursive ? cloneChildren(node.children) : [];
3215
+ const clone = new Document(children);
3216
+ children.forEach((child) => child.parent = clone);
3217
+ if (node["x-mode"]) {
3218
+ clone["x-mode"] = node["x-mode"];
3219
+ }
3220
+ result = clone;
3221
+ } else if (isDirective(node)) {
3222
+ const instruction = new ProcessingInstruction(node.name, node.data);
3223
+ if (node["x-name"] != null) {
3224
+ instruction["x-name"] = node["x-name"];
3225
+ instruction["x-publicId"] = node["x-publicId"];
3226
+ instruction["x-systemId"] = node["x-systemId"];
3227
+ }
3228
+ result = instruction;
3229
+ } else {
3230
+ throw new Error(`Not implemented yet: ${node.type}`);
3231
+ }
3232
+ result.startIndex = node.startIndex;
3233
+ result.endIndex = node.endIndex;
3234
+ if (node.sourceCodeLocation != null) {
3235
+ result.sourceCodeLocation = node.sourceCodeLocation;
3236
+ }
3237
+ return result;
3238
+ }
3239
+ function cloneChildren(childs) {
3240
+ const children = childs.map((child) => cloneNode(child, true));
3241
+ for (let i = 1; i < children.length; i++) {
3242
+ children[i].prev = children[i - 1];
3243
+ children[i - 1].next = children[i];
3244
+ }
3245
+ return children;
3246
+ }
3247
+
3248
+ // node_modules/.pnpm/domhandler@5.0.3/node_modules/domhandler/lib/esm/index.js
3249
+ var defaultOpts = {
3250
+ withStartIndices: false,
3251
+ withEndIndices: false,
3252
+ xmlMode: false
3253
+ };
3254
+ var DomHandler = class {
3255
+ /**
3256
+ * @param callback Called once parsing has completed.
3257
+ * @param options Settings for the handler.
3258
+ * @param elementCB Callback whenever a tag is closed.
3259
+ */
3260
+ constructor(callback, options, elementCB) {
3261
+ this.dom = [];
3262
+ this.root = new Document(this.dom);
3263
+ this.done = false;
3264
+ this.tagStack = [this.root];
3265
+ this.lastNode = null;
3266
+ this.parser = null;
3267
+ if (typeof options === "function") {
3268
+ elementCB = options;
3269
+ options = defaultOpts;
3270
+ }
3271
+ if (typeof callback === "object") {
3272
+ options = callback;
3273
+ callback = void 0;
3274
+ }
3275
+ this.callback = callback !== null && callback !== void 0 ? callback : null;
3276
+ this.options = options !== null && options !== void 0 ? options : defaultOpts;
3277
+ this.elementCB = elementCB !== null && elementCB !== void 0 ? elementCB : null;
3278
+ }
3279
+ onparserinit(parser) {
3280
+ this.parser = parser;
3281
+ }
3282
+ // Resets the handler back to starting state
3283
+ onreset() {
3284
+ this.dom = [];
3285
+ this.root = new Document(this.dom);
3286
+ this.done = false;
3287
+ this.tagStack = [this.root];
3288
+ this.lastNode = null;
3289
+ this.parser = null;
3290
+ }
3291
+ // Signals the handler that parsing is done
3292
+ onend() {
3293
+ if (this.done)
3294
+ return;
3295
+ this.done = true;
3296
+ this.parser = null;
3297
+ this.handleCallback(null);
3298
+ }
3299
+ onerror(error) {
3300
+ this.handleCallback(error);
3301
+ }
3302
+ onclosetag() {
3303
+ this.lastNode = null;
3304
+ const elem = this.tagStack.pop();
3305
+ if (this.options.withEndIndices) {
3306
+ elem.endIndex = this.parser.endIndex;
3307
+ }
3308
+ if (this.elementCB)
3309
+ this.elementCB(elem);
3310
+ }
3311
+ onopentag(name, attribs) {
3312
+ const type = this.options.xmlMode ? ElementType.Tag : void 0;
3313
+ const element = new Element(name, attribs, void 0, type);
3314
+ this.addNode(element);
3315
+ this.tagStack.push(element);
3316
+ }
3317
+ ontext(data) {
3318
+ const { lastNode } = this;
3319
+ if (lastNode && lastNode.type === ElementType.Text) {
3320
+ lastNode.data += data;
3321
+ if (this.options.withEndIndices) {
3322
+ lastNode.endIndex = this.parser.endIndex;
3323
+ }
3324
+ } else {
3325
+ const node = new Text2(data);
3326
+ this.addNode(node);
3327
+ this.lastNode = node;
3328
+ }
3329
+ }
3330
+ oncomment(data) {
3331
+ if (this.lastNode && this.lastNode.type === ElementType.Comment) {
3332
+ this.lastNode.data += data;
3333
+ return;
3334
+ }
3335
+ const node = new Comment2(data);
3336
+ this.addNode(node);
3337
+ this.lastNode = node;
3338
+ }
3339
+ oncommentend() {
3340
+ this.lastNode = null;
3341
+ }
3342
+ oncdatastart() {
3343
+ const text = new Text2("");
3344
+ const node = new CDATA2([text]);
3345
+ this.addNode(node);
3346
+ text.parent = node;
3347
+ this.lastNode = text;
3348
+ }
3349
+ oncdataend() {
3350
+ this.lastNode = null;
3351
+ }
3352
+ onprocessinginstruction(name, data) {
3353
+ const node = new ProcessingInstruction(name, data);
3354
+ this.addNode(node);
3355
+ }
3356
+ handleCallback(error) {
3357
+ if (typeof this.callback === "function") {
3358
+ this.callback(error, this.dom);
3359
+ } else if (error) {
3360
+ throw error;
3361
+ }
3362
+ }
3363
+ addNode(node) {
3364
+ const parent = this.tagStack[this.tagStack.length - 1];
3365
+ const previousSibling = parent.children[parent.children.length - 1];
3366
+ if (this.options.withStartIndices) {
3367
+ node.startIndex = this.parser.startIndex;
3368
+ }
3369
+ if (this.options.withEndIndices) {
3370
+ node.endIndex = this.parser.endIndex;
3371
+ }
3372
+ parent.children.push(node);
3373
+ if (previousSibling) {
3374
+ node.prev = previousSibling;
3375
+ previousSibling.next = node;
3376
+ }
3377
+ node.parent = parent;
3378
+ this.lastNode = null;
3379
+ }
3380
+ };
3381
+
3382
+ // node_modules/.pnpm/entities@4.5.0/node_modules/entities/lib/esm/generated/decode-data-html.js
3383
+ var decode_data_html_default = new Uint16Array(
3384
+ // prettier-ignore
3385
+ '\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))
3386
+ );
3387
+
3388
+ // node_modules/.pnpm/entities@4.5.0/node_modules/entities/lib/esm/generated/decode-data-xml.js
3389
+ var decode_data_xml_default = new Uint16Array(
3390
+ // prettier-ignore
3391
+ "\u0200aglq \x1B\u026D\0\0p;\u4026os;\u4027t;\u403Et;\u403Cuot;\u4022".split("").map((c) => c.charCodeAt(0))
3392
+ );
3393
+
3394
+ // node_modules/.pnpm/entities@4.5.0/node_modules/entities/lib/esm/decode_codepoint.js
3395
+ var _a2;
3396
+ var decodeMap2 = /* @__PURE__ */ new Map([
3397
+ [0, 65533],
3398
+ // C1 Unicode control character reference replacements
3399
+ [128, 8364],
3400
+ [130, 8218],
3401
+ [131, 402],
3402
+ [132, 8222],
3403
+ [133, 8230],
3404
+ [134, 8224],
3405
+ [135, 8225],
3406
+ [136, 710],
3407
+ [137, 8240],
3408
+ [138, 352],
3409
+ [139, 8249],
3410
+ [140, 338],
3411
+ [142, 381],
3412
+ [145, 8216],
3413
+ [146, 8217],
3414
+ [147, 8220],
3415
+ [148, 8221],
3416
+ [149, 8226],
3417
+ [150, 8211],
3418
+ [151, 8212],
3419
+ [152, 732],
3420
+ [153, 8482],
3421
+ [154, 353],
3422
+ [155, 8250],
3423
+ [156, 339],
3424
+ [158, 382],
3425
+ [159, 376]
3426
+ ]);
3427
+ var fromCodePoint2 = (
3428
+ // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition, node/no-unsupported-features/es-builtins
3429
+ (_a2 = String.fromCodePoint) !== null && _a2 !== void 0 ? _a2 : function(codePoint) {
3430
+ let output = "";
3431
+ if (codePoint > 65535) {
3432
+ codePoint -= 65536;
3433
+ output += String.fromCharCode(codePoint >>> 10 & 1023 | 55296);
3434
+ codePoint = 56320 | codePoint & 1023;
3435
+ }
3436
+ output += String.fromCharCode(codePoint);
3437
+ return output;
3438
+ }
3439
+ );
3440
+ function replaceCodePoint2(codePoint) {
3441
+ var _a3;
3442
+ if (codePoint >= 55296 && codePoint <= 57343 || codePoint > 1114111) {
3443
+ return 65533;
3444
+ }
3445
+ return (_a3 = decodeMap2.get(codePoint)) !== null && _a3 !== void 0 ? _a3 : codePoint;
3446
+ }
3447
+
3448
+ // node_modules/.pnpm/entities@4.5.0/node_modules/entities/lib/esm/decode.js
3449
+ var CharCodes3;
3450
+ (function(CharCodes4) {
3451
+ CharCodes4[CharCodes4["NUM"] = 35] = "NUM";
3452
+ CharCodes4[CharCodes4["SEMI"] = 59] = "SEMI";
3453
+ CharCodes4[CharCodes4["EQUALS"] = 61] = "EQUALS";
3454
+ CharCodes4[CharCodes4["ZERO"] = 48] = "ZERO";
3455
+ CharCodes4[CharCodes4["NINE"] = 57] = "NINE";
3456
+ CharCodes4[CharCodes4["LOWER_A"] = 97] = "LOWER_A";
3457
+ CharCodes4[CharCodes4["LOWER_F"] = 102] = "LOWER_F";
3458
+ CharCodes4[CharCodes4["LOWER_X"] = 120] = "LOWER_X";
3459
+ CharCodes4[CharCodes4["LOWER_Z"] = 122] = "LOWER_Z";
3460
+ CharCodes4[CharCodes4["UPPER_A"] = 65] = "UPPER_A";
3461
+ CharCodes4[CharCodes4["UPPER_F"] = 70] = "UPPER_F";
3462
+ CharCodes4[CharCodes4["UPPER_Z"] = 90] = "UPPER_Z";
3463
+ })(CharCodes3 || (CharCodes3 = {}));
3464
+ var TO_LOWER_BIT2 = 32;
3465
+ var BinTrieFlags2;
3466
+ (function(BinTrieFlags3) {
3467
+ BinTrieFlags3[BinTrieFlags3["VALUE_LENGTH"] = 49152] = "VALUE_LENGTH";
3468
+ BinTrieFlags3[BinTrieFlags3["BRANCH_LENGTH"] = 16256] = "BRANCH_LENGTH";
3469
+ BinTrieFlags3[BinTrieFlags3["JUMP_TABLE"] = 127] = "JUMP_TABLE";
3470
+ })(BinTrieFlags2 || (BinTrieFlags2 = {}));
3471
+ function isNumber2(code) {
3472
+ return code >= CharCodes3.ZERO && code <= CharCodes3.NINE;
3473
+ }
3474
+ function isHexadecimalCharacter2(code) {
3475
+ return code >= CharCodes3.UPPER_A && code <= CharCodes3.UPPER_F || code >= CharCodes3.LOWER_A && code <= CharCodes3.LOWER_F;
3476
+ }
3477
+ function isAsciiAlphaNumeric2(code) {
3478
+ return code >= CharCodes3.UPPER_A && code <= CharCodes3.UPPER_Z || code >= CharCodes3.LOWER_A && code <= CharCodes3.LOWER_Z || isNumber2(code);
3479
+ }
3480
+ function isEntityInAttributeInvalidEnd2(code) {
3481
+ return code === CharCodes3.EQUALS || isAsciiAlphaNumeric2(code);
3482
+ }
3483
+ var EntityDecoderState2;
3484
+ (function(EntityDecoderState3) {
3485
+ EntityDecoderState3[EntityDecoderState3["EntityStart"] = 0] = "EntityStart";
3486
+ EntityDecoderState3[EntityDecoderState3["NumericStart"] = 1] = "NumericStart";
3487
+ EntityDecoderState3[EntityDecoderState3["NumericDecimal"] = 2] = "NumericDecimal";
3488
+ EntityDecoderState3[EntityDecoderState3["NumericHex"] = 3] = "NumericHex";
3489
+ EntityDecoderState3[EntityDecoderState3["NamedEntity"] = 4] = "NamedEntity";
3490
+ })(EntityDecoderState2 || (EntityDecoderState2 = {}));
3491
+ var DecodingMode2;
3492
+ (function(DecodingMode3) {
3493
+ DecodingMode3[DecodingMode3["Legacy"] = 0] = "Legacy";
3494
+ DecodingMode3[DecodingMode3["Strict"] = 1] = "Strict";
3495
+ DecodingMode3[DecodingMode3["Attribute"] = 2] = "Attribute";
3496
+ })(DecodingMode2 || (DecodingMode2 = {}));
3497
+ var EntityDecoder2 = class {
3498
+ constructor(decodeTree, emitCodePoint, errors) {
3499
+ this.decodeTree = decodeTree;
3500
+ this.emitCodePoint = emitCodePoint;
3501
+ this.errors = errors;
3502
+ this.state = EntityDecoderState2.EntityStart;
3503
+ this.consumed = 1;
3504
+ this.result = 0;
3505
+ this.treeIndex = 0;
3506
+ this.excess = 1;
3507
+ this.decodeMode = DecodingMode2.Strict;
3508
+ }
3509
+ /** Resets the instance to make it reusable. */
3510
+ startEntity(decodeMode) {
3511
+ this.decodeMode = decodeMode;
3512
+ this.state = EntityDecoderState2.EntityStart;
3513
+ this.result = 0;
3514
+ this.treeIndex = 0;
3515
+ this.excess = 1;
3516
+ this.consumed = 1;
3517
+ }
3518
+ /**
3519
+ * Write an entity to the decoder. This can be called multiple times with partial entities.
3520
+ * If the entity is incomplete, the decoder will return -1.
3521
+ *
3522
+ * Mirrors the implementation of `getDecoder`, but with the ability to stop decoding if the
3523
+ * entity is incomplete, and resume when the next string is written.
3524
+ *
3525
+ * @param string The string containing the entity (or a continuation of the entity).
3526
+ * @param offset The offset at which the entity begins. Should be 0 if this is not the first call.
3527
+ * @returns The number of characters that were consumed, or -1 if the entity is incomplete.
3528
+ */
3529
+ write(str, offset) {
3530
+ switch (this.state) {
3531
+ case EntityDecoderState2.EntityStart: {
3532
+ if (str.charCodeAt(offset) === CharCodes3.NUM) {
3533
+ this.state = EntityDecoderState2.NumericStart;
3534
+ this.consumed += 1;
3535
+ return this.stateNumericStart(str, offset + 1);
3536
+ }
3537
+ this.state = EntityDecoderState2.NamedEntity;
3538
+ return this.stateNamedEntity(str, offset);
3539
+ }
3540
+ case EntityDecoderState2.NumericStart: {
3541
+ return this.stateNumericStart(str, offset);
3542
+ }
3543
+ case EntityDecoderState2.NumericDecimal: {
3544
+ return this.stateNumericDecimal(str, offset);
3545
+ }
3546
+ case EntityDecoderState2.NumericHex: {
3547
+ return this.stateNumericHex(str, offset);
3548
+ }
3549
+ case EntityDecoderState2.NamedEntity: {
3550
+ return this.stateNamedEntity(str, offset);
3551
+ }
3552
+ }
3553
+ }
3554
+ /**
3555
+ * Switches between the numeric decimal and hexadecimal states.
3556
+ *
3557
+ * Equivalent to the `Numeric character reference state` in the HTML spec.
3558
+ *
3559
+ * @param str The string containing the entity (or a continuation of the entity).
3560
+ * @param offset The current offset.
3561
+ * @returns The number of characters that were consumed, or -1 if the entity is incomplete.
3562
+ */
3563
+ stateNumericStart(str, offset) {
3564
+ if (offset >= str.length) {
3565
+ return -1;
3566
+ }
3567
+ if ((str.charCodeAt(offset) | TO_LOWER_BIT2) === CharCodes3.LOWER_X) {
3568
+ this.state = EntityDecoderState2.NumericHex;
3569
+ this.consumed += 1;
3570
+ return this.stateNumericHex(str, offset + 1);
3571
+ }
3572
+ this.state = EntityDecoderState2.NumericDecimal;
3573
+ return this.stateNumericDecimal(str, offset);
3574
+ }
3575
+ addToNumericResult(str, start, end, base) {
3576
+ if (start !== end) {
3577
+ const digitCount = end - start;
3578
+ this.result = this.result * Math.pow(base, digitCount) + parseInt(str.substr(start, digitCount), base);
3579
+ this.consumed += digitCount;
3580
+ }
3581
+ }
3582
+ /**
3583
+ * Parses a hexadecimal numeric entity.
3584
+ *
3585
+ * Equivalent to the `Hexademical character reference state` in the HTML spec.
3586
+ *
3587
+ * @param str The string containing the entity (or a continuation of the entity).
3588
+ * @param offset The current offset.
3589
+ * @returns The number of characters that were consumed, or -1 if the entity is incomplete.
3590
+ */
3591
+ stateNumericHex(str, offset) {
3592
+ const startIdx = offset;
3593
+ while (offset < str.length) {
3594
+ const char = str.charCodeAt(offset);
3595
+ if (isNumber2(char) || isHexadecimalCharacter2(char)) {
3596
+ offset += 1;
3597
+ } else {
3598
+ this.addToNumericResult(str, startIdx, offset, 16);
3599
+ return this.emitNumericEntity(char, 3);
3600
+ }
3601
+ }
3602
+ this.addToNumericResult(str, startIdx, offset, 16);
3603
+ return -1;
3604
+ }
3605
+ /**
3606
+ * Parses a decimal numeric entity.
3607
+ *
3608
+ * Equivalent to the `Decimal character reference state` in the HTML spec.
3609
+ *
3610
+ * @param str The string containing the entity (or a continuation of the entity).
3611
+ * @param offset The current offset.
3612
+ * @returns The number of characters that were consumed, or -1 if the entity is incomplete.
3613
+ */
3614
+ stateNumericDecimal(str, offset) {
3615
+ const startIdx = offset;
3616
+ while (offset < str.length) {
3617
+ const char = str.charCodeAt(offset);
3618
+ if (isNumber2(char)) {
3619
+ offset += 1;
3620
+ } else {
3621
+ this.addToNumericResult(str, startIdx, offset, 10);
3622
+ return this.emitNumericEntity(char, 2);
3623
+ }
3624
+ }
3625
+ this.addToNumericResult(str, startIdx, offset, 10);
3626
+ return -1;
3627
+ }
3628
+ /**
3629
+ * Validate and emit a numeric entity.
3630
+ *
3631
+ * Implements the logic from the `Hexademical character reference start
3632
+ * state` and `Numeric character reference end state` in the HTML spec.
3633
+ *
3634
+ * @param lastCp The last code point of the entity. Used to see if the
3635
+ * entity was terminated with a semicolon.
3636
+ * @param expectedLength The minimum number of characters that should be
3637
+ * consumed. Used to validate that at least one digit
3638
+ * was consumed.
3639
+ * @returns The number of characters that were consumed.
3640
+ */
3641
+ emitNumericEntity(lastCp, expectedLength) {
3642
+ var _a3;
3643
+ if (this.consumed <= expectedLength) {
3644
+ (_a3 = this.errors) === null || _a3 === void 0 ? void 0 : _a3.absenceOfDigitsInNumericCharacterReference(this.consumed);
3645
+ return 0;
3646
+ }
3647
+ if (lastCp === CharCodes3.SEMI) {
3648
+ this.consumed += 1;
3649
+ } else if (this.decodeMode === DecodingMode2.Strict) {
3650
+ return 0;
3651
+ }
3652
+ this.emitCodePoint(replaceCodePoint2(this.result), this.consumed);
3653
+ if (this.errors) {
3654
+ if (lastCp !== CharCodes3.SEMI) {
3655
+ this.errors.missingSemicolonAfterCharacterReference();
3656
+ }
3657
+ this.errors.validateNumericCharacterReference(this.result);
3658
+ }
3659
+ return this.consumed;
3660
+ }
3661
+ /**
3662
+ * Parses a named entity.
3663
+ *
3664
+ * Equivalent to the `Named character reference state` in the HTML spec.
3665
+ *
3666
+ * @param str The string containing the entity (or a continuation of the entity).
3667
+ * @param offset The current offset.
3668
+ * @returns The number of characters that were consumed, or -1 if the entity is incomplete.
3669
+ */
3670
+ stateNamedEntity(str, offset) {
3671
+ const { decodeTree } = this;
3672
+ let current = decodeTree[this.treeIndex];
3673
+ let valueLength = (current & BinTrieFlags2.VALUE_LENGTH) >> 14;
3674
+ for (; offset < str.length; offset++, this.excess++) {
3675
+ const char = str.charCodeAt(offset);
3676
+ this.treeIndex = determineBranch2(decodeTree, current, this.treeIndex + Math.max(1, valueLength), char);
3677
+ if (this.treeIndex < 0) {
3678
+ return this.result === 0 || // If we are parsing an attribute
3679
+ this.decodeMode === DecodingMode2.Attribute && // We shouldn't have consumed any characters after the entity,
3680
+ (valueLength === 0 || // And there should be no invalid characters.
3681
+ isEntityInAttributeInvalidEnd2(char)) ? 0 : this.emitNotTerminatedNamedEntity();
3682
+ }
3683
+ current = decodeTree[this.treeIndex];
3684
+ valueLength = (current & BinTrieFlags2.VALUE_LENGTH) >> 14;
3685
+ if (valueLength !== 0) {
3686
+ if (char === CharCodes3.SEMI) {
3687
+ return this.emitNamedEntityData(this.treeIndex, valueLength, this.consumed + this.excess);
3688
+ }
3689
+ if (this.decodeMode !== DecodingMode2.Strict) {
3690
+ this.result = this.treeIndex;
3691
+ this.consumed += this.excess;
3692
+ this.excess = 0;
3693
+ }
3694
+ }
3695
+ }
3696
+ return -1;
3697
+ }
3698
+ /**
3699
+ * Emit a named entity that was not terminated with a semicolon.
3700
+ *
3701
+ * @returns The number of characters consumed.
3702
+ */
3703
+ emitNotTerminatedNamedEntity() {
3704
+ var _a3;
3705
+ const { result, decodeTree } = this;
3706
+ const valueLength = (decodeTree[result] & BinTrieFlags2.VALUE_LENGTH) >> 14;
3707
+ this.emitNamedEntityData(result, valueLength, this.consumed);
3708
+ (_a3 = this.errors) === null || _a3 === void 0 ? void 0 : _a3.missingSemicolonAfterCharacterReference();
3709
+ return this.consumed;
3710
+ }
3711
+ /**
3712
+ * Emit a named entity.
3713
+ *
3714
+ * @param result The index of the entity in the decode tree.
3715
+ * @param valueLength The number of bytes in the entity.
3716
+ * @param consumed The number of characters consumed.
3717
+ *
3718
+ * @returns The number of characters consumed.
3719
+ */
3720
+ emitNamedEntityData(result, valueLength, consumed) {
3721
+ const { decodeTree } = this;
3722
+ this.emitCodePoint(valueLength === 1 ? decodeTree[result] & ~BinTrieFlags2.VALUE_LENGTH : decodeTree[result + 1], consumed);
3723
+ if (valueLength === 3) {
3724
+ this.emitCodePoint(decodeTree[result + 2], consumed);
3725
+ }
3726
+ return consumed;
3727
+ }
3728
+ /**
3729
+ * Signal to the parser that the end of the input was reached.
3730
+ *
3731
+ * Remaining data will be emitted and relevant errors will be produced.
3732
+ *
3733
+ * @returns The number of characters consumed.
3734
+ */
3735
+ end() {
3736
+ var _a3;
3737
+ switch (this.state) {
3738
+ case EntityDecoderState2.NamedEntity: {
3739
+ return this.result !== 0 && (this.decodeMode !== DecodingMode2.Attribute || this.result === this.treeIndex) ? this.emitNotTerminatedNamedEntity() : 0;
3740
+ }
3741
+ // Otherwise, emit a numeric entity if we have one.
3742
+ case EntityDecoderState2.NumericDecimal: {
3743
+ return this.emitNumericEntity(0, 2);
3744
+ }
3745
+ case EntityDecoderState2.NumericHex: {
3746
+ return this.emitNumericEntity(0, 3);
3747
+ }
3748
+ case EntityDecoderState2.NumericStart: {
3749
+ (_a3 = this.errors) === null || _a3 === void 0 ? void 0 : _a3.absenceOfDigitsInNumericCharacterReference(this.consumed);
3750
+ return 0;
3751
+ }
3752
+ case EntityDecoderState2.EntityStart: {
3753
+ return 0;
3754
+ }
3755
+ }
3756
+ }
3757
+ };
3758
+ function getDecoder(decodeTree) {
3759
+ let ret = "";
3760
+ const decoder = new EntityDecoder2(decodeTree, (str) => ret += fromCodePoint2(str));
3761
+ return function decodeWithTrie(str, decodeMode) {
3762
+ let lastIndex = 0;
3763
+ let offset = 0;
3764
+ while ((offset = str.indexOf("&", offset)) >= 0) {
3765
+ ret += str.slice(lastIndex, offset);
3766
+ decoder.startEntity(decodeMode);
3767
+ const len = decoder.write(
3768
+ str,
3769
+ // Skip the "&"
3770
+ offset + 1
3771
+ );
3772
+ if (len < 0) {
3773
+ lastIndex = offset + decoder.end();
3774
+ break;
3775
+ }
3776
+ lastIndex = offset + len;
3777
+ offset = len === 0 ? lastIndex + 1 : lastIndex;
3778
+ }
3779
+ const result = ret + str.slice(lastIndex);
3780
+ ret = "";
3781
+ return result;
3782
+ };
3783
+ }
3784
+ function determineBranch2(decodeTree, current, nodeIdx, char) {
3785
+ const branchCount = (current & BinTrieFlags2.BRANCH_LENGTH) >> 7;
3786
+ const jumpOffset = current & BinTrieFlags2.JUMP_TABLE;
3787
+ if (branchCount === 0) {
3788
+ return jumpOffset !== 0 && char === jumpOffset ? nodeIdx : -1;
3789
+ }
3790
+ if (jumpOffset) {
3791
+ const value = char - jumpOffset;
3792
+ return value < 0 || value >= branchCount ? -1 : decodeTree[nodeIdx + value] - 1;
3793
+ }
3794
+ let lo = nodeIdx;
3795
+ let hi = lo + branchCount - 1;
3796
+ while (lo <= hi) {
3797
+ const mid = lo + hi >>> 1;
3798
+ const midVal = decodeTree[mid];
3799
+ if (midVal < char) {
3800
+ lo = mid + 1;
3801
+ } else if (midVal > char) {
3802
+ hi = mid - 1;
3803
+ } else {
3804
+ return decodeTree[mid + branchCount];
3805
+ }
3806
+ }
3807
+ return -1;
3808
+ }
3809
+ var htmlDecoder = getDecoder(decode_data_html_default);
3810
+ var xmlDecoder = getDecoder(decode_data_xml_default);
3811
+
3812
+ // node_modules/.pnpm/entities@4.5.0/node_modules/entities/lib/esm/generated/encode-html.js
3813
+ function restoreDiff(arr) {
3814
+ for (let i = 1; i < arr.length; i++) {
3815
+ arr[i][0] += arr[i - 1][0] + 1;
3816
+ }
3817
+ return arr;
3818
+ }
3819
+ 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;"]]));
3820
+
3821
+ // node_modules/.pnpm/entities@4.5.0/node_modules/entities/lib/esm/escape.js
3822
+ var xmlCodeMap = /* @__PURE__ */ new Map([
3823
+ [34, "&quot;"],
3824
+ [38, "&amp;"],
3825
+ [39, "&apos;"],
3826
+ [60, "&lt;"],
3827
+ [62, "&gt;"]
3828
+ ]);
3829
+ var getCodePoint = (
3830
+ // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
3831
+ String.prototype.codePointAt != null ? (str, index) => str.codePointAt(index) : (
3832
+ // http://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae
3833
+ (c, index) => (c.charCodeAt(index) & 64512) === 55296 ? (c.charCodeAt(index) - 55296) * 1024 + c.charCodeAt(index + 1) - 56320 + 65536 : c.charCodeAt(index)
3834
+ )
3835
+ );
3836
+ function getEscaper(regex, map) {
3837
+ return function escape2(data) {
3838
+ let match;
3839
+ let lastIdx = 0;
3840
+ let result = "";
3841
+ while (match = regex.exec(data)) {
3842
+ if (lastIdx !== match.index) {
3843
+ result += data.substring(lastIdx, match.index);
3844
+ }
3845
+ result += map.get(match[0].charCodeAt(0));
3846
+ lastIdx = match.index + 1;
3847
+ }
3848
+ return result + data.substring(lastIdx);
3849
+ };
3850
+ }
3851
+ var escapeUTF8 = getEscaper(/[&<>'"]/g, xmlCodeMap);
3852
+ var escapeAttribute = getEscaper(/["&\u00A0]/g, /* @__PURE__ */ new Map([
3853
+ [34, "&quot;"],
3854
+ [38, "&amp;"],
3855
+ [160, "&nbsp;"]
3856
+ ]));
3857
+ var escapeText = getEscaper(/[&<>\u00A0]/g, /* @__PURE__ */ new Map([
3858
+ [38, "&amp;"],
3859
+ [60, "&lt;"],
3860
+ [62, "&gt;"],
3861
+ [160, "&nbsp;"]
3862
+ ]));
3863
+
3864
+ // node_modules/.pnpm/entities@4.5.0/node_modules/entities/lib/esm/index.js
3865
+ var EntityLevel;
3866
+ (function(EntityLevel2) {
3867
+ EntityLevel2[EntityLevel2["XML"] = 0] = "XML";
3868
+ EntityLevel2[EntityLevel2["HTML"] = 1] = "HTML";
3869
+ })(EntityLevel || (EntityLevel = {}));
3870
+ var EncodingMode;
3871
+ (function(EncodingMode2) {
3872
+ EncodingMode2[EncodingMode2["UTF8"] = 0] = "UTF8";
3873
+ EncodingMode2[EncodingMode2["ASCII"] = 1] = "ASCII";
3874
+ EncodingMode2[EncodingMode2["Extensive"] = 2] = "Extensive";
3875
+ EncodingMode2[EncodingMode2["Attribute"] = 3] = "Attribute";
3876
+ EncodingMode2[EncodingMode2["Text"] = 4] = "Text";
3877
+ })(EncodingMode || (EncodingMode = {}));
3878
+
3879
+ // node_modules/.pnpm/dom-serializer@2.0.0/node_modules/dom-serializer/lib/esm/foreignNames.js
3880
+ var elementNames = new Map([
3881
+ "altGlyph",
3882
+ "altGlyphDef",
3883
+ "altGlyphItem",
3884
+ "animateColor",
3885
+ "animateMotion",
3886
+ "animateTransform",
3887
+ "clipPath",
3888
+ "feBlend",
3889
+ "feColorMatrix",
3890
+ "feComponentTransfer",
3891
+ "feComposite",
3892
+ "feConvolveMatrix",
3893
+ "feDiffuseLighting",
3894
+ "feDisplacementMap",
3895
+ "feDistantLight",
3896
+ "feDropShadow",
3897
+ "feFlood",
3898
+ "feFuncA",
3899
+ "feFuncB",
3900
+ "feFuncG",
3901
+ "feFuncR",
3902
+ "feGaussianBlur",
3903
+ "feImage",
3904
+ "feMerge",
3905
+ "feMergeNode",
3906
+ "feMorphology",
3907
+ "feOffset",
3908
+ "fePointLight",
3909
+ "feSpecularLighting",
3910
+ "feSpotLight",
3911
+ "feTile",
3912
+ "feTurbulence",
3913
+ "foreignObject",
3914
+ "glyphRef",
3915
+ "linearGradient",
3916
+ "radialGradient",
3917
+ "textPath"
3918
+ ].map((val) => [val.toLowerCase(), val]));
3919
+ var attributeNames = new Map([
3920
+ "definitionURL",
3921
+ "attributeName",
3922
+ "attributeType",
3923
+ "baseFrequency",
3924
+ "baseProfile",
3925
+ "calcMode",
3926
+ "clipPathUnits",
3927
+ "diffuseConstant",
3928
+ "edgeMode",
3929
+ "filterUnits",
3930
+ "glyphRef",
3931
+ "gradientTransform",
3932
+ "gradientUnits",
3933
+ "kernelMatrix",
3934
+ "kernelUnitLength",
3935
+ "keyPoints",
3936
+ "keySplines",
3937
+ "keyTimes",
3938
+ "lengthAdjust",
3939
+ "limitingConeAngle",
3940
+ "markerHeight",
3941
+ "markerUnits",
3942
+ "markerWidth",
3943
+ "maskContentUnits",
3944
+ "maskUnits",
3945
+ "numOctaves",
3946
+ "pathLength",
3947
+ "patternContentUnits",
3948
+ "patternTransform",
3949
+ "patternUnits",
3950
+ "pointsAtX",
3951
+ "pointsAtY",
3952
+ "pointsAtZ",
3953
+ "preserveAlpha",
3954
+ "preserveAspectRatio",
3955
+ "primitiveUnits",
3956
+ "refX",
3957
+ "refY",
3958
+ "repeatCount",
3959
+ "repeatDur",
3960
+ "requiredExtensions",
3961
+ "requiredFeatures",
3962
+ "specularConstant",
3963
+ "specularExponent",
3964
+ "spreadMethod",
3965
+ "startOffset",
3966
+ "stdDeviation",
3967
+ "stitchTiles",
3968
+ "surfaceScale",
3969
+ "systemLanguage",
3970
+ "tableValues",
3971
+ "targetX",
3972
+ "targetY",
3973
+ "textLength",
3974
+ "viewBox",
3975
+ "viewTarget",
3976
+ "xChannelSelector",
3977
+ "yChannelSelector",
3978
+ "zoomAndPan"
3979
+ ].map((val) => [val.toLowerCase(), val]));
3980
+
3981
+ // node_modules/.pnpm/domutils@3.2.2/node_modules/domutils/lib/esm/helpers.js
3982
+ var DocumentPosition;
3983
+ (function(DocumentPosition2) {
3984
+ DocumentPosition2[DocumentPosition2["DISCONNECTED"] = 1] = "DISCONNECTED";
3985
+ DocumentPosition2[DocumentPosition2["PRECEDING"] = 2] = "PRECEDING";
3986
+ DocumentPosition2[DocumentPosition2["FOLLOWING"] = 4] = "FOLLOWING";
3987
+ DocumentPosition2[DocumentPosition2["CONTAINS"] = 8] = "CONTAINS";
3988
+ DocumentPosition2[DocumentPosition2["CONTAINED_BY"] = 16] = "CONTAINED_BY";
3989
+ })(DocumentPosition || (DocumentPosition = {}));
3990
+
3991
+ // node_modules/.pnpm/htmlparser2@10.1.0/node_modules/htmlparser2/dist/esm/index.js
3992
+ function parseDocument(data, options) {
3993
+ const handler = new DomHandler(void 0, options);
3994
+ new Parser(handler, options).end(data);
3995
+ return handler.root;
3996
+ }
3997
+
3998
+ // src/html-parser.ts
3999
+ function decompileHTML(html) {
4000
+ const diagnostics = [];
4001
+ const story = createStory();
4002
+ const doc = parseDocument(html);
4003
+ const twine2Data = findElement(doc, "tw-storydata");
4004
+ if (twine2Data) {
4005
+ decompileTwine2(twine2Data, story, diagnostics);
4006
+ return { story, diagnostics };
4007
+ }
4008
+ const twine1Data = findElementByIdPattern(doc, /^store(?:-a|A)rea$/);
4009
+ if (twine1Data) {
4010
+ decompileTwine1(twine1Data, story, diagnostics);
4011
+ return { story, diagnostics };
4012
+ }
4013
+ diagnostics.push({ level: "error", message: "Malformed HTML source; story data not found." });
4014
+ return { story, diagnostics };
4015
+ }
4016
+ function decompileTwine2(storyData, story, diagnostics) {
4017
+ let startnode = 0;
4018
+ const attrs = storyData.attribs ?? {};
4019
+ if (attrs["name"]) story.name = attrs["name"];
4020
+ if (attrs["startnode"]) {
4021
+ const parsed = parseInt(attrs["startnode"], 10);
4022
+ if (Number.isNaN(parsed)) {
4023
+ diagnostics.push({
4024
+ level: "warning",
4025
+ message: `Cannot parse "tw-storydata" content attribute "startnode" as an integer; value "${attrs["startnode"]}".`
4026
+ });
4027
+ } else {
4028
+ startnode = parsed;
4029
+ }
4030
+ }
4031
+ if (attrs["ifid"]) story.ifid = attrs["ifid"].toUpperCase();
4032
+ if (attrs["zoom"]) {
4033
+ const parsed = parseFloat(attrs["zoom"]);
4034
+ if (Number.isNaN(parsed)) {
4035
+ diagnostics.push({
4036
+ level: "warning",
4037
+ message: `Cannot parse "tw-storydata" content attribute "zoom" as a float; value "${attrs["zoom"]}".`
4038
+ });
4039
+ } else {
4040
+ story.twine2.zoom = parsed;
4041
+ }
4042
+ }
4043
+ if (attrs["format"]) story.twine2.format = attrs["format"];
4044
+ if (attrs["format-version"]) story.twine2.formatVersion = attrs["format-version"];
4045
+ if (attrs["options"]) {
4046
+ for (const opt of attrs["options"].split(/\s+/).filter((s) => s.length > 0)) {
4047
+ story.twine2.options.set(opt, true);
4048
+ }
4049
+ }
4050
+ for (const node of storyData.children ?? []) {
4051
+ if (node.type !== "tag" && node.type !== "style" && node.type !== "script") continue;
4052
+ switch (node.name) {
4053
+ case "style":
4054
+ case "script": {
4055
+ const text = getTextContent(node).trim();
4056
+ if (text.length === 0) continue;
4057
+ const name = node.name === "style" ? "Story Stylesheet" : "Story JavaScript";
4058
+ const tags = node.name === "style" ? ["stylesheet"] : ["script"];
4059
+ storyAdd(story, { name, tags, text }, diagnostics);
4060
+ break;
4061
+ }
4062
+ case "tw-tag": {
4063
+ const tagAttrs = node.attribs ?? {};
4064
+ const tagName = tagAttrs["name"] ?? "";
4065
+ const tagColor = tagAttrs["color"] ?? "";
4066
+ if (tagName) story.twine2.tagColors.set(tagName, tagColor);
4067
+ break;
4068
+ }
4069
+ case "tw-passagedata": {
4070
+ let pid = 0;
4071
+ const pAttrs = node.attribs ?? {};
4072
+ const name = pAttrs["name"] ?? "";
4073
+ const tags = pAttrs["tags"] ? pAttrs["tags"].split(/\s+/).filter((s) => s.length > 0) : [];
4074
+ const metadata = {};
4075
+ if (pAttrs["pid"]) {
4076
+ const parsed = parseInt(pAttrs["pid"], 10);
4077
+ if (Number.isNaN(parsed)) {
4078
+ diagnostics.push({
4079
+ level: "warning",
4080
+ message: `Cannot parse "tw-passagedata" content attribute "pid" as an integer; value "${pAttrs["pid"]}".`
4081
+ });
4082
+ } else {
4083
+ pid = parsed;
4084
+ }
4085
+ }
4086
+ if (pAttrs["position"]) metadata.position = pAttrs["position"];
4087
+ if (pAttrs["size"]) metadata.size = pAttrs["size"];
4088
+ if (pid === startnode && pid !== 0) {
4089
+ story.twine2.start = name;
4090
+ }
4091
+ const text = getTextContent(node).trim();
4092
+ const passage = { name, tags, text };
4093
+ if (metadata.position || metadata.size) {
4094
+ passage.metadata = metadata;
4095
+ }
4096
+ storyAdd(story, passage, diagnostics);
4097
+ break;
4098
+ }
4099
+ }
4100
+ }
4101
+ storyPrepend(story, { name: "StoryData", tags: [], text: marshalStoryData(story) }, diagnostics);
4102
+ }
4103
+ function decompileTwine1(storeArea, story, diagnostics) {
4104
+ for (const node of storeArea.children ?? []) {
4105
+ if (node.type !== "tag" || node.name !== "div") continue;
4106
+ const nodeAttrs = node.attribs ?? {};
4107
+ if (!("tiddler" in nodeAttrs)) continue;
4108
+ const name = nodeAttrs["tiddler"] ?? "";
4109
+ const tags = nodeAttrs["tags"] ? nodeAttrs["tags"].split(/\s+/).filter((s) => s.length > 0) : [];
4110
+ const metadata = {};
4111
+ if (nodeAttrs["twine-position"]) metadata.position = nodeAttrs["twine-position"];
4112
+ const rawContent = getTextContent(node);
4113
+ const text = tiddlerUnescape(rawContent).trim();
4114
+ const passage = { name, tags, text };
4115
+ if (metadata.position) {
4116
+ passage.metadata = metadata;
4117
+ }
4118
+ storyAdd(story, passage, diagnostics);
4119
+ }
4120
+ }
4121
+ function findElement(node, tagName) {
4122
+ if (node.type === "tag" && node.name === tagName) return node;
4123
+ for (const child of node.children ?? []) {
4124
+ const found = findElement(child, tagName);
4125
+ if (found) return found;
4126
+ }
4127
+ return void 0;
4128
+ }
4129
+ function findElementByIdPattern(node, idPattern) {
4130
+ if (node.type === "tag" && node.attribs?.["id"] && idPattern.test(node.attribs["id"])) return node;
4131
+ for (const child of node.children ?? []) {
4132
+ const found = findElementByIdPattern(child, idPattern);
4133
+ if (found) return found;
4134
+ }
4135
+ return void 0;
4136
+ }
4137
+ function getTextContent(el) {
4138
+ let text = "";
4139
+ for (const child of el.children ?? []) {
4140
+ if (child.type === "text" && child.data) {
4141
+ text += child.data;
4142
+ }
4143
+ }
4144
+ return text;
4145
+ }
4146
+
1322
4147
  // src/loader.ts
1323
4148
  function loadSources(story, filenames, opts, diagnostics, processedFiles) {
1324
4149
  for (const filename of filenames) {
@@ -1337,6 +4162,10 @@ function loadSources(story, filenames, opts, diagnostics, processedFiles) {
1337
4162
  case "twee2":
1338
4163
  loadTwee(story, filename, { ...opts, twee2Compat: true }, diagnostics);
1339
4164
  break;
4165
+ case "htm":
4166
+ case "html":
4167
+ loadHTML(story, filename, diagnostics);
4168
+ break;
1340
4169
  case "css":
1341
4170
  loadTagged(story, "stylesheet", filename, diagnostics);
1342
4171
  break;
@@ -1459,6 +4288,11 @@ function parseFontFile(filename) {
1459
4288
  diagnostics: []
1460
4289
  };
1461
4290
  }
4291
+ function parseHTMLFile(filename) {
4292
+ const source = readUTF8(filename);
4293
+ const result = decompileHTML(source);
4294
+ return { passages: result.story.passages, diagnostics: [...result.diagnostics] };
4295
+ }
1462
4296
  function parseFile(filename, opts) {
1463
4297
  const ext = normalizedFileExt(filename);
1464
4298
  switch (ext) {
@@ -1468,6 +4302,9 @@ function parseFile(filename, opts) {
1468
4302
  case "tw2":
1469
4303
  case "twee2":
1470
4304
  return parseTweeFile(filename, { ...opts, twee2Compat: true });
4305
+ case "htm":
4306
+ case "html":
4307
+ return parseHTMLFile(filename);
1471
4308
  case "css":
1472
4309
  return parseTaggedFile("stylesheet", filename);
1473
4310
  case "js":
@@ -1507,6 +4344,13 @@ function parseFile(filename, opts) {
1507
4344
  return void 0;
1508
4345
  }
1509
4346
  }
4347
+ function loadHTML(story, filename, diagnostics) {
4348
+ const result = parseHTMLFile(filename);
4349
+ diagnostics.push(...result.diagnostics);
4350
+ for (const p of result.passages) {
4351
+ storyAdd(story, p, diagnostics);
4352
+ }
4353
+ }
1510
4354
  function loadTwee(story, filename, opts, diagnostics) {
1511
4355
  const result = parseTweeFile(filename, opts);
1512
4356
  diagnostics.push(...result.diagnostics);
@@ -1600,21 +4444,20 @@ var VERSION = "1.2.0";
1600
4444
 
1601
4445
  // src/output-twine2.ts
1602
4446
  var CREATOR_NAME = "Twee-ts";
1603
- function toTwine2Archive(story, startName, diagnostics, options) {
1604
- return getTwine2DataChunk(story, startName, diagnostics, options) + "\n";
4447
+ function toTwine2Archive(story, startName, options) {
4448
+ return getTwine2DataChunk(story, startName, options) + "\n";
1605
4449
  }
1606
- function toTwine2HTML(story, format, startName, diagnostics, options) {
4450
+ function toTwine2HTML(story, format, startName, options) {
1607
4451
  let template = readFormatSource(format);
1608
4452
  if (template.includes("{{STORY_NAME}}")) {
1609
4453
  template = template.replaceAll("{{STORY_NAME}}", htmlEscape(story.name));
1610
4454
  }
1611
4455
  if (template.includes("{{STORY_DATA}}")) {
1612
- template = template.replace("{{STORY_DATA}}", getTwine2DataChunk(story, startName, diagnostics, options));
4456
+ template = template.replace("{{STORY_DATA}}", getTwine2DataChunk(story, startName, options));
1613
4457
  }
1614
4458
  return template;
1615
4459
  }
1616
- function getTwine2DataChunk(story, startName, diagnostics, options) {
1617
- ensureIFID(story, diagnostics);
4460
+ function getTwine2DataChunk(story, startName, options) {
1618
4461
  const parts = [];
1619
4462
  let startID = "";
1620
4463
  let pid = 0;
@@ -1683,23 +4526,6 @@ function getTwine2DataChunk(story, startName, diagnostics, options) {
1683
4526
  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>`;
1684
4527
  return wrapper + parts.join("") + "</tw-storydata>";
1685
4528
  }
1686
- function ensureIFID(story, diagnostics) {
1687
- if (story.ifid !== "") return;
1688
- if (story.legacyIFID !== "") {
1689
- story.ifid = story.legacyIFID;
1690
- diagnostics.push({
1691
- level: "warning",
1692
- message: 'Story IFID not found; reusing "ifid" entry from the "StorySettings" special passage.'
1693
- });
1694
- } else {
1695
- const ifid = generateIFID();
1696
- story.ifid = ifid;
1697
- diagnostics.push({
1698
- level: "error",
1699
- message: `Story IFID not found. Add an IFID to your story: {"ifid":"${ifid}"}`
1700
- });
1701
- }
1702
- }
1703
4529
 
1704
4530
  // src/output-twine1.ts
1705
4531
  import { readFileSync as readFileSync2 } from "fs";
@@ -1710,7 +4536,7 @@ function toTwine1Archive(story, _startName) {
1710
4536
  return `<div id="storeArea" data-size="${count}">${data}</div>
1711
4537
  `;
1712
4538
  }
1713
- function toTwine1HTML(story, format, startName, _diagnostics) {
4539
+ function toTwine1HTML(story, format, startName) {
1714
4540
  const formatDir = dirname(format.filename);
1715
4541
  const parentDir = dirname(formatDir);
1716
4542
  let template = readFormatSource(format);
@@ -2264,6 +5090,7 @@ async function buildOutput(options, cache, changedFiles) {
2264
5090
  if (testMode) {
2265
5091
  story.twine2.options.set("debug", true);
2266
5092
  }
5093
+ ensureIFID(story, diagnostics);
2267
5094
  let output;
2268
5095
  switch (outputMode) {
2269
5096
  case "twee3":
@@ -2271,7 +5098,7 @@ async function buildOutput(options, cache, changedFiles) {
2271
5098
  output = toTwee(story, outputMode);
2272
5099
  break;
2273
5100
  case "twine2-archive":
2274
- output = toTwine2Archive(story, startName, diagnostics, { sourceInfo });
5101
+ output = toTwine2Archive(story, startName, { sourceInfo });
2275
5102
  break;
2276
5103
  case "twine1-archive":
2277
5104
  output = toTwine1Archive(story, startName);
@@ -2290,7 +5117,7 @@ async function buildOutput(options, cache, changedFiles) {
2290
5117
  throw new TweeTsError("No story format available for HTML output.", diagnostics);
2291
5118
  }
2292
5119
  if (format.isTwine2) {
2293
- output = toTwine2HTML(story, format, startName, diagnostics, { sourceInfo });
5120
+ output = toTwine2HTML(story, format, startName, { sourceInfo });
2294
5121
  } else {
2295
5122
  if (story.name === "" && !storyHas(story, "StoryTitle")) {
2296
5123
  diagnostics.push({
@@ -2298,7 +5125,7 @@ async function buildOutput(options, cache, changedFiles) {
2298
5125
  message: 'Special passage "StoryTitle" not found.'
2299
5126
  });
2300
5127
  }
2301
- output = toTwine1HTML(story, format, startName, diagnostics);
5128
+ output = toTwine1HTML(story, format, startName);
2302
5129
  }
2303
5130
  const modulePaths = options.modules ? getFilenames(options.modules) : [];
2304
5131
  output = modifyHead(output, modulePaths, options.headFile, diagnostics);
@@ -2315,6 +5142,23 @@ async function buildOutput(options, cache, changedFiles) {
2315
5142
  };
2316
5143
  return { output, story, format, diagnostics, stats };
2317
5144
  }
5145
+ function ensureIFID(story, diagnostics) {
5146
+ if (story.ifid !== "") return;
5147
+ if (story.legacyIFID !== "") {
5148
+ story.ifid = story.legacyIFID;
5149
+ diagnostics.push({
5150
+ level: "warning",
5151
+ message: 'Story IFID not found; reusing "ifid" entry from the "StorySettings" special passage.'
5152
+ });
5153
+ } else {
5154
+ const ifid = generateIFID();
5155
+ story.ifid = ifid;
5156
+ diagnostics.push({
5157
+ level: "error",
5158
+ message: `Story IFID not found. Add an IFID to your story: {"ifid":"${ifid}"}`
5159
+ });
5160
+ }
5161
+ }
2318
5162
  function storyToJSON(story) {
2319
5163
  const scripts = [];
2320
5164
  const stylesheets = [];