@rohal12/twee-ts 1.13.1 → 1.15.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.
@@ -1,3 +1,63 @@
1
+ // src/media-types.ts
2
+ import { extname } from "path";
3
+ var MEDIA_TYPE_MAP = {
4
+ // Audio
5
+ aac: "audio/aac",
6
+ flac: "audio/flac",
7
+ ogg: "audio/ogg",
8
+ wav: "audio/wav",
9
+ mp3: "audio/mpeg",
10
+ m4a: "audio/mp4",
11
+ oga: "audio/ogg",
12
+ opus: "audio/ogg",
13
+ wave: "audio/wav",
14
+ weba: "audio/webm",
15
+ // Fonts
16
+ otf: "font/otf",
17
+ ttf: "font/ttf",
18
+ woff: "font/woff",
19
+ woff2: "font/woff2",
20
+ // Images
21
+ gif: "image/gif",
22
+ jpeg: "image/jpeg",
23
+ jpg: "image/jpeg",
24
+ png: "image/png",
25
+ svg: "image/svg+xml",
26
+ tif: "image/tiff",
27
+ tiff: "image/tiff",
28
+ webp: "image/webp",
29
+ // Metadata
30
+ vtt: "text/vtt",
31
+ // Video
32
+ mp4: "video/mp4",
33
+ ogv: "video/ogg",
34
+ webm: "video/webm"
35
+ };
36
+ function mediaTypeFromExt(ext) {
37
+ return MEDIA_TYPE_MAP[ext] ?? "application/octet-stream";
38
+ }
39
+ function mediaTypeFromFilename(filename) {
40
+ return mediaTypeFromExt(normalizedFileExt(filename));
41
+ }
42
+ function normalizedFileExt(filename) {
43
+ const ext = extname(filename);
44
+ if (!ext) return "";
45
+ return ext.slice(1).toLowerCase();
46
+ }
47
+ function slugify(original) {
48
+ return original.replace(/[\x00-\x20!-/:-@[-^`{-\x9f]+/g, "_");
49
+ }
50
+ function fontFormatHint(ext) {
51
+ switch (ext) {
52
+ case "ttf":
53
+ return "truetype";
54
+ case "otf":
55
+ return "opentype";
56
+ default:
57
+ return ext;
58
+ }
59
+ }
60
+
1
61
  // src/compiler.ts
2
62
  import { writeFileSync as writeFileSync2 } from "fs";
3
63
 
@@ -488,68 +548,6 @@ function getStoryStats(story, wordCountMethod = "tweego") {
488
548
  // src/filesystem.ts
489
549
  import { readdirSync, statSync, watch as fsWatch } from "fs";
490
550
  import { resolve, relative, join } from "path";
491
-
492
- // src/media-types.ts
493
- import { extname } from "path";
494
- var MEDIA_TYPE_MAP = {
495
- // Audio
496
- aac: "audio/aac",
497
- flac: "audio/flac",
498
- ogg: "audio/ogg",
499
- wav: "audio/wav",
500
- mp3: "audio/mpeg",
501
- m4a: "audio/mp4",
502
- oga: "audio/ogg",
503
- opus: "audio/ogg",
504
- wave: "audio/wav",
505
- weba: "audio/webm",
506
- // Fonts
507
- otf: "font/otf",
508
- ttf: "font/ttf",
509
- woff: "font/woff",
510
- woff2: "font/woff2",
511
- // Images
512
- gif: "image/gif",
513
- jpeg: "image/jpeg",
514
- jpg: "image/jpeg",
515
- png: "image/png",
516
- svg: "image/svg+xml",
517
- tif: "image/tiff",
518
- tiff: "image/tiff",
519
- webp: "image/webp",
520
- // Metadata
521
- vtt: "text/vtt",
522
- // Video
523
- mp4: "video/mp4",
524
- ogv: "video/ogg",
525
- webm: "video/webm"
526
- };
527
- function mediaTypeFromExt(ext) {
528
- return MEDIA_TYPE_MAP[ext] ?? "application/octet-stream";
529
- }
530
- function mediaTypeFromFilename(filename) {
531
- return mediaTypeFromExt(normalizedFileExt(filename));
532
- }
533
- function normalizedFileExt(filename) {
534
- const ext = extname(filename);
535
- if (!ext) return "";
536
- return ext.slice(1).toLowerCase();
537
- }
538
- function slugify(original) {
539
- return original.replace(/[\x00-\x20!-/:-@[-^`{-\x9f]+/g, "_");
540
- }
541
- function fontFormatHint(ext) {
542
- switch (ext) {
543
- case "ttf":
544
- return "truetype";
545
- case "otf":
546
- return "opentype";
547
- default:
548
- return ext;
549
- }
550
- }
551
-
552
- // src/filesystem.ts
553
551
  function getFilenames(pathnames, outFilename) {
554
552
  const filenames = [];
555
553
  const absOutFile = outFilename ? resolve(outFilename) : "";
@@ -1253,8 +1251,7 @@ function parseTwee(source, options = {}) {
1253
1251
  return { passages, diagnostics };
1254
1252
  }
1255
1253
 
1256
- // node_modules/.pnpm/entities@7.0.1/node_modules/entities/dist/esm/decode-codepoint.js
1257
- var _a;
1254
+ // node_modules/.pnpm/entities@8.0.0/node_modules/entities/dist/decode-codepoint.js
1258
1255
  var decodeMap = /* @__PURE__ */ new Map([
1259
1256
  [0, 65533],
1260
1257
  // C1 Unicode control character reference replacements
@@ -1286,47 +1283,16 @@ var decodeMap = /* @__PURE__ */ new Map([
1286
1283
  [158, 382],
1287
1284
  [159, 376]
1288
1285
  ]);
1289
- var fromCodePoint = (
1290
- // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition, n/no-unsupported-features/es-builtins
1291
- (_a = String.fromCodePoint) !== null && _a !== void 0 ? _a : ((codePoint) => {
1292
- let output = "";
1293
- if (codePoint > 65535) {
1294
- codePoint -= 65536;
1295
- output += String.fromCharCode(codePoint >>> 10 & 1023 | 55296);
1296
- codePoint = 56320 | codePoint & 1023;
1297
- }
1298
- output += String.fromCharCode(codePoint);
1299
- return output;
1300
- })
1301
- );
1302
1286
  function replaceCodePoint(codePoint) {
1303
- var _a3;
1304
1287
  if (codePoint >= 55296 && codePoint <= 57343 || codePoint > 1114111) {
1305
1288
  return 65533;
1306
1289
  }
1307
- return (_a3 = decodeMap.get(codePoint)) !== null && _a3 !== void 0 ? _a3 : codePoint;
1290
+ return decodeMap.get(codePoint) ?? codePoint;
1308
1291
  }
1309
1292
 
1310
- // node_modules/.pnpm/entities@7.0.1/node_modules/entities/dist/esm/internal/decode-shared.js
1293
+ // node_modules/.pnpm/entities@8.0.0/node_modules/entities/dist/internal/decode-shared.js
1311
1294
  function decodeBase64(input) {
1312
- const binary = (
1313
- // eslint-disable-next-line n/no-unsupported-features/node-builtins
1314
- typeof atob === "function" ? (
1315
- // Browser (and Node >=16)
1316
- // eslint-disable-next-line n/no-unsupported-features/node-builtins
1317
- atob(input)
1318
- ) : (
1319
- // Older Node versions (<16)
1320
- // eslint-disable-next-line n/no-unsupported-features/node-builtins
1321
- typeof Buffer.from === "function" ? (
1322
- // eslint-disable-next-line n/no-unsupported-features/node-builtins
1323
- Buffer.from(input, "base64").toString("binary")
1324
- ) : (
1325
- // eslint-disable-next-line unicorn/no-new-buffer, n/no-deprecated-api
1326
- new Buffer(input, "base64").toString("binary")
1327
- )
1328
- )
1329
- );
1295
+ const binary = atob(input);
1330
1296
  const evenLength = binary.length & ~1;
1331
1297
  const out = new Uint16Array(evenLength / 2);
1332
1298
  for (let index = 0, outIndex = 0; index < evenLength; index += 2) {
@@ -1337,36 +1303,36 @@ function decodeBase64(input) {
1337
1303
  return out;
1338
1304
  }
1339
1305
 
1340
- // node_modules/.pnpm/entities@7.0.1/node_modules/entities/dist/esm/generated/decode-data-html.js
1306
+ // node_modules/.pnpm/entities@8.0.0/node_modules/entities/dist/generated/decode-data-html.js
1341
1307
  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");
1342
1308
 
1343
- // node_modules/.pnpm/entities@7.0.1/node_modules/entities/dist/esm/generated/decode-data-xml.js
1309
+ // node_modules/.pnpm/entities@8.0.0/node_modules/entities/dist/generated/decode-data-xml.js
1344
1310
  var xmlDecodeTree = /* @__PURE__ */ decodeBase64("AAJhZ2xxBwARABMAFQBtAg0AAAAAAA8AcAAmYG8AcwAnYHQAPmB0ADxg9SFvdCJg");
1345
1311
 
1346
- // node_modules/.pnpm/entities@7.0.1/node_modules/entities/dist/esm/internal/bin-trie-flags.js
1312
+ // node_modules/.pnpm/entities@8.0.0/node_modules/entities/dist/internal/bin-trie-flags.js
1347
1313
  var BinTrieFlags;
1348
- (function(BinTrieFlags3) {
1349
- BinTrieFlags3[BinTrieFlags3["VALUE_LENGTH"] = 49152] = "VALUE_LENGTH";
1350
- BinTrieFlags3[BinTrieFlags3["FLAG13"] = 8192] = "FLAG13";
1351
- BinTrieFlags3[BinTrieFlags3["BRANCH_LENGTH"] = 8064] = "BRANCH_LENGTH";
1352
- BinTrieFlags3[BinTrieFlags3["JUMP_TABLE"] = 127] = "JUMP_TABLE";
1314
+ (function(BinTrieFlags2) {
1315
+ BinTrieFlags2[BinTrieFlags2["VALUE_LENGTH"] = 49152] = "VALUE_LENGTH";
1316
+ BinTrieFlags2[BinTrieFlags2["FLAG13"] = 8192] = "FLAG13";
1317
+ BinTrieFlags2[BinTrieFlags2["BRANCH_LENGTH"] = 8064] = "BRANCH_LENGTH";
1318
+ BinTrieFlags2[BinTrieFlags2["JUMP_TABLE"] = 127] = "JUMP_TABLE";
1353
1319
  })(BinTrieFlags || (BinTrieFlags = {}));
1354
1320
 
1355
- // node_modules/.pnpm/entities@7.0.1/node_modules/entities/dist/esm/decode.js
1321
+ // node_modules/.pnpm/entities@8.0.0/node_modules/entities/dist/decode.js
1356
1322
  var CharCodes;
1357
- (function(CharCodes4) {
1358
- CharCodes4[CharCodes4["NUM"] = 35] = "NUM";
1359
- CharCodes4[CharCodes4["SEMI"] = 59] = "SEMI";
1360
- CharCodes4[CharCodes4["EQUALS"] = 61] = "EQUALS";
1361
- CharCodes4[CharCodes4["ZERO"] = 48] = "ZERO";
1362
- CharCodes4[CharCodes4["NINE"] = 57] = "NINE";
1363
- CharCodes4[CharCodes4["LOWER_A"] = 97] = "LOWER_A";
1364
- CharCodes4[CharCodes4["LOWER_F"] = 102] = "LOWER_F";
1365
- CharCodes4[CharCodes4["LOWER_X"] = 120] = "LOWER_X";
1366
- CharCodes4[CharCodes4["LOWER_Z"] = 122] = "LOWER_Z";
1367
- CharCodes4[CharCodes4["UPPER_A"] = 65] = "UPPER_A";
1368
- CharCodes4[CharCodes4["UPPER_F"] = 70] = "UPPER_F";
1369
- CharCodes4[CharCodes4["UPPER_Z"] = 90] = "UPPER_Z";
1323
+ (function(CharCodes3) {
1324
+ CharCodes3[CharCodes3["NUM"] = 35] = "NUM";
1325
+ CharCodes3[CharCodes3["SEMI"] = 59] = "SEMI";
1326
+ CharCodes3[CharCodes3["EQUALS"] = 61] = "EQUALS";
1327
+ CharCodes3[CharCodes3["ZERO"] = 48] = "ZERO";
1328
+ CharCodes3[CharCodes3["NINE"] = 57] = "NINE";
1329
+ CharCodes3[CharCodes3["LOWER_A"] = 97] = "LOWER_A";
1330
+ CharCodes3[CharCodes3["LOWER_F"] = 102] = "LOWER_F";
1331
+ CharCodes3[CharCodes3["LOWER_X"] = 120] = "LOWER_X";
1332
+ CharCodes3[CharCodes3["LOWER_Z"] = 122] = "LOWER_Z";
1333
+ CharCodes3[CharCodes3["UPPER_A"] = 65] = "UPPER_A";
1334
+ CharCodes3[CharCodes3["UPPER_F"] = 70] = "UPPER_F";
1335
+ CharCodes3[CharCodes3["UPPER_Z"] = 90] = "UPPER_Z";
1370
1336
  })(CharCodes || (CharCodes = {}));
1371
1337
  var TO_LOWER_BIT = 32;
1372
1338
  function isNumber(code) {
@@ -1382,33 +1348,51 @@ function isEntityInAttributeInvalidEnd(code) {
1382
1348
  return code === CharCodes.EQUALS || isAsciiAlphaNumeric(code);
1383
1349
  }
1384
1350
  var EntityDecoderState;
1385
- (function(EntityDecoderState3) {
1386
- EntityDecoderState3[EntityDecoderState3["EntityStart"] = 0] = "EntityStart";
1387
- EntityDecoderState3[EntityDecoderState3["NumericStart"] = 1] = "NumericStart";
1388
- EntityDecoderState3[EntityDecoderState3["NumericDecimal"] = 2] = "NumericDecimal";
1389
- EntityDecoderState3[EntityDecoderState3["NumericHex"] = 3] = "NumericHex";
1390
- EntityDecoderState3[EntityDecoderState3["NamedEntity"] = 4] = "NamedEntity";
1351
+ (function(EntityDecoderState2) {
1352
+ EntityDecoderState2[EntityDecoderState2["EntityStart"] = 0] = "EntityStart";
1353
+ EntityDecoderState2[EntityDecoderState2["NumericStart"] = 1] = "NumericStart";
1354
+ EntityDecoderState2[EntityDecoderState2["NumericDecimal"] = 2] = "NumericDecimal";
1355
+ EntityDecoderState2[EntityDecoderState2["NumericHex"] = 3] = "NumericHex";
1356
+ EntityDecoderState2[EntityDecoderState2["NamedEntity"] = 4] = "NamedEntity";
1391
1357
  })(EntityDecoderState || (EntityDecoderState = {}));
1392
1358
  var DecodingMode;
1393
- (function(DecodingMode3) {
1394
- DecodingMode3[DecodingMode3["Legacy"] = 0] = "Legacy";
1395
- DecodingMode3[DecodingMode3["Strict"] = 1] = "Strict";
1396
- DecodingMode3[DecodingMode3["Attribute"] = 2] = "Attribute";
1359
+ (function(DecodingMode2) {
1360
+ DecodingMode2[DecodingMode2["Legacy"] = 0] = "Legacy";
1361
+ DecodingMode2[DecodingMode2["Strict"] = 1] = "Strict";
1362
+ DecodingMode2[DecodingMode2["Attribute"] = 2] = "Attribute";
1397
1363
  })(DecodingMode || (DecodingMode = {}));
1398
1364
  var EntityDecoder = class {
1365
+ decodeTree;
1366
+ emitCodePoint;
1367
+ errors;
1399
1368
  constructor(decodeTree, emitCodePoint, errors) {
1400
1369
  this.decodeTree = decodeTree;
1401
1370
  this.emitCodePoint = emitCodePoint;
1402
1371
  this.errors = errors;
1403
- this.state = EntityDecoderState.EntityStart;
1404
- this.consumed = 1;
1405
- this.result = 0;
1406
- this.treeIndex = 0;
1407
- this.excess = 1;
1408
- this.decodeMode = DecodingMode.Strict;
1409
- this.runConsumed = 0;
1410
1372
  }
1411
- /** Resets the instance to make it reusable. */
1373
+ /** The current state of the decoder. */
1374
+ state = EntityDecoderState.EntityStart;
1375
+ /** Characters that were consumed while parsing an entity. */
1376
+ consumed = 1;
1377
+ /**
1378
+ * The result of the entity.
1379
+ *
1380
+ * Either the result index of a numeric entity, or the codepoint of a
1381
+ * numeric entity.
1382
+ */
1383
+ result = 0;
1384
+ /** The current index in the decode tree. */
1385
+ treeIndex = 0;
1386
+ /** The number of characters that were consumed in excess. */
1387
+ excess = 1;
1388
+ /** The mode in which the decoder is operating. */
1389
+ decodeMode = DecodingMode.Strict;
1390
+ /** The number of characters that have been consumed in the current run. */
1391
+ runConsumed = 0;
1392
+ /**
1393
+ * Resets the instance to make it reusable.
1394
+ * @param decodeMode Entity decoding mode to use.
1395
+ */
1412
1396
  startEntity(decodeMode) {
1413
1397
  this.decodeMode = decodeMode;
1414
1398
  this.state = EntityDecoderState.EntityStart;
@@ -1424,7 +1408,6 @@ var EntityDecoder = class {
1424
1408
  *
1425
1409
  * Mirrors the implementation of `getDecoder`, but with the ability to stop decoding if the
1426
1410
  * entity is incomplete, and resume when the next string is written.
1427
- *
1428
1411
  * @param input The string containing the entity (or a continuation of the entity).
1429
1412
  * @param offset The offset at which the entity begins. Should be 0 if this is not the first call.
1430
1413
  * @returns The number of characters that were consumed, or -1 if the entity is incomplete.
@@ -1458,7 +1441,6 @@ var EntityDecoder = class {
1458
1441
  * Switches between the numeric decimal and hexadecimal states.
1459
1442
  *
1460
1443
  * Equivalent to the `Numeric character reference state` in the HTML spec.
1461
- *
1462
1444
  * @param input The string containing the entity (or a continuation of the entity).
1463
1445
  * @param offset The current offset.
1464
1446
  * @returns The number of characters that were consumed, or -1 if the entity is incomplete.
@@ -1479,7 +1461,6 @@ var EntityDecoder = class {
1479
1461
  * Parses a hexadecimal numeric entity.
1480
1462
  *
1481
1463
  * Equivalent to the `Hexademical character reference state` in the HTML spec.
1482
- *
1483
1464
  * @param input The string containing the entity (or a continuation of the entity).
1484
1465
  * @param offset The current offset.
1485
1466
  * @returns The number of characters that were consumed, or -1 if the entity is incomplete.
@@ -1502,7 +1483,6 @@ var EntityDecoder = class {
1502
1483
  * Parses a decimal numeric entity.
1503
1484
  *
1504
1485
  * Equivalent to the `Decimal character reference state` in the HTML spec.
1505
- *
1506
1486
  * @param input The string containing the entity (or a continuation of the entity).
1507
1487
  * @param offset The current offset.
1508
1488
  * @returns The number of characters that were consumed, or -1 if the entity is incomplete.
@@ -1525,7 +1505,6 @@ var EntityDecoder = class {
1525
1505
  *
1526
1506
  * Implements the logic from the `Hexademical character reference start
1527
1507
  * state` and `Numeric character reference end state` in the HTML spec.
1528
- *
1529
1508
  * @param lastCp The last code point of the entity. Used to see if the
1530
1509
  * entity was terminated with a semicolon.
1531
1510
  * @param expectedLength The minimum number of characters that should be
@@ -1534,9 +1513,8 @@ var EntityDecoder = class {
1534
1513
  * @returns The number of characters that were consumed.
1535
1514
  */
1536
1515
  emitNumericEntity(lastCp, expectedLength) {
1537
- var _a3;
1538
1516
  if (this.consumed <= expectedLength) {
1539
- (_a3 = this.errors) === null || _a3 === void 0 ? void 0 : _a3.absenceOfDigitsInNumericCharacterReference(this.consumed);
1517
+ this.errors?.absenceOfDigitsInNumericCharacterReference(this.consumed);
1540
1518
  return 0;
1541
1519
  }
1542
1520
  if (lastCp === CharCodes.SEMI) {
@@ -1557,7 +1535,6 @@ var EntityDecoder = class {
1557
1535
  * Parses a named entity.
1558
1536
  *
1559
1537
  * Equivalent to the `Named character reference state` in the HTML spec.
1560
- *
1561
1538
  * @param input The string containing the entity (or a continuation of the entity).
1562
1539
  * @param offset The current offset.
1563
1540
  * @returns The number of characters that were consumed, or -1 if the entity is incomplete.
@@ -1630,24 +1607,20 @@ var EntityDecoder = class {
1630
1607
  }
1631
1608
  /**
1632
1609
  * Emit a named entity that was not terminated with a semicolon.
1633
- *
1634
1610
  * @returns The number of characters consumed.
1635
1611
  */
1636
1612
  emitNotTerminatedNamedEntity() {
1637
- var _a3;
1638
1613
  const { result, decodeTree } = this;
1639
1614
  const valueLength = (decodeTree[result] & BinTrieFlags.VALUE_LENGTH) >> 14;
1640
1615
  this.emitNamedEntityData(result, valueLength, this.consumed);
1641
- (_a3 = this.errors) === null || _a3 === void 0 ? void 0 : _a3.missingSemicolonAfterCharacterReference();
1616
+ this.errors?.missingSemicolonAfterCharacterReference();
1642
1617
  return this.consumed;
1643
1618
  }
1644
1619
  /**
1645
1620
  * Emit a named entity.
1646
- *
1647
1621
  * @param result The index of the entity in the decode tree.
1648
1622
  * @param valueLength The number of bytes in the entity.
1649
1623
  * @param consumed The number of characters consumed.
1650
- *
1651
1624
  * @returns The number of characters consumed.
1652
1625
  */
1653
1626
  emitNamedEntityData(result, valueLength, consumed) {
@@ -1662,11 +1635,9 @@ var EntityDecoder = class {
1662
1635
  * Signal to the parser that the end of the input was reached.
1663
1636
  *
1664
1637
  * Remaining data will be emitted and relevant errors will be produced.
1665
- *
1666
1638
  * @returns The number of characters consumed.
1667
1639
  */
1668
1640
  end() {
1669
- var _a3;
1670
1641
  switch (this.state) {
1671
1642
  case EntityDecoderState.NamedEntity: {
1672
1643
  return this.result !== 0 && (this.decodeMode !== DecodingMode.Attribute || this.result === this.treeIndex) ? this.emitNotTerminatedNamedEntity() : 0;
@@ -1679,7 +1650,7 @@ var EntityDecoder = class {
1679
1650
  return this.emitNumericEntity(0, 3);
1680
1651
  }
1681
1652
  case EntityDecoderState.NumericStart: {
1682
- (_a3 = this.errors) === null || _a3 === void 0 ? void 0 : _a3.absenceOfDigitsInNumericCharacterReference(this.consumed);
1653
+ this.errors?.absenceOfDigitsInNumericCharacterReference(this.consumed);
1683
1654
  return 0;
1684
1655
  }
1685
1656
  case EntityDecoderState.EntityStart: {
@@ -1717,36 +1688,36 @@ function determineBranch(decodeTree, current, nodeIndex, char) {
1717
1688
  return -1;
1718
1689
  }
1719
1690
 
1720
- // node_modules/.pnpm/htmlparser2@10.1.0/node_modules/htmlparser2/dist/esm/Tokenizer.js
1691
+ // node_modules/.pnpm/htmlparser2@12.0.0/node_modules/htmlparser2/dist/Tokenizer.js
1721
1692
  var CharCodes2;
1722
- (function(CharCodes4) {
1723
- CharCodes4[CharCodes4["Tab"] = 9] = "Tab";
1724
- CharCodes4[CharCodes4["NewLine"] = 10] = "NewLine";
1725
- CharCodes4[CharCodes4["FormFeed"] = 12] = "FormFeed";
1726
- CharCodes4[CharCodes4["CarriageReturn"] = 13] = "CarriageReturn";
1727
- CharCodes4[CharCodes4["Space"] = 32] = "Space";
1728
- CharCodes4[CharCodes4["ExclamationMark"] = 33] = "ExclamationMark";
1729
- CharCodes4[CharCodes4["Number"] = 35] = "Number";
1730
- CharCodes4[CharCodes4["Amp"] = 38] = "Amp";
1731
- CharCodes4[CharCodes4["SingleQuote"] = 39] = "SingleQuote";
1732
- CharCodes4[CharCodes4["DoubleQuote"] = 34] = "DoubleQuote";
1733
- CharCodes4[CharCodes4["Dash"] = 45] = "Dash";
1734
- CharCodes4[CharCodes4["Slash"] = 47] = "Slash";
1735
- CharCodes4[CharCodes4["Zero"] = 48] = "Zero";
1736
- CharCodes4[CharCodes4["Nine"] = 57] = "Nine";
1737
- CharCodes4[CharCodes4["Semi"] = 59] = "Semi";
1738
- CharCodes4[CharCodes4["Lt"] = 60] = "Lt";
1739
- CharCodes4[CharCodes4["Eq"] = 61] = "Eq";
1740
- CharCodes4[CharCodes4["Gt"] = 62] = "Gt";
1741
- CharCodes4[CharCodes4["Questionmark"] = 63] = "Questionmark";
1742
- CharCodes4[CharCodes4["UpperA"] = 65] = "UpperA";
1743
- CharCodes4[CharCodes4["LowerA"] = 97] = "LowerA";
1744
- CharCodes4[CharCodes4["UpperF"] = 70] = "UpperF";
1745
- CharCodes4[CharCodes4["LowerF"] = 102] = "LowerF";
1746
- CharCodes4[CharCodes4["UpperZ"] = 90] = "UpperZ";
1747
- CharCodes4[CharCodes4["LowerZ"] = 122] = "LowerZ";
1748
- CharCodes4[CharCodes4["LowerX"] = 120] = "LowerX";
1749
- CharCodes4[CharCodes4["OpeningSquareBracket"] = 91] = "OpeningSquareBracket";
1693
+ (function(CharCodes3) {
1694
+ CharCodes3[CharCodes3["Tab"] = 9] = "Tab";
1695
+ CharCodes3[CharCodes3["NewLine"] = 10] = "NewLine";
1696
+ CharCodes3[CharCodes3["FormFeed"] = 12] = "FormFeed";
1697
+ CharCodes3[CharCodes3["CarriageReturn"] = 13] = "CarriageReturn";
1698
+ CharCodes3[CharCodes3["Space"] = 32] = "Space";
1699
+ CharCodes3[CharCodes3["ExclamationMark"] = 33] = "ExclamationMark";
1700
+ CharCodes3[CharCodes3["Number"] = 35] = "Number";
1701
+ CharCodes3[CharCodes3["Amp"] = 38] = "Amp";
1702
+ CharCodes3[CharCodes3["SingleQuote"] = 39] = "SingleQuote";
1703
+ CharCodes3[CharCodes3["DoubleQuote"] = 34] = "DoubleQuote";
1704
+ CharCodes3[CharCodes3["Dash"] = 45] = "Dash";
1705
+ CharCodes3[CharCodes3["Slash"] = 47] = "Slash";
1706
+ CharCodes3[CharCodes3["Zero"] = 48] = "Zero";
1707
+ CharCodes3[CharCodes3["Nine"] = 57] = "Nine";
1708
+ CharCodes3[CharCodes3["Semi"] = 59] = "Semi";
1709
+ CharCodes3[CharCodes3["Lt"] = 60] = "Lt";
1710
+ CharCodes3[CharCodes3["Eq"] = 61] = "Eq";
1711
+ CharCodes3[CharCodes3["Gt"] = 62] = "Gt";
1712
+ CharCodes3[CharCodes3["Questionmark"] = 63] = "Questionmark";
1713
+ CharCodes3[CharCodes3["UpperA"] = 65] = "UpperA";
1714
+ CharCodes3[CharCodes3["LowerA"] = 97] = "LowerA";
1715
+ CharCodes3[CharCodes3["UpperF"] = 70] = "UpperF";
1716
+ CharCodes3[CharCodes3["LowerF"] = 102] = "LowerF";
1717
+ CharCodes3[CharCodes3["UpperZ"] = 90] = "UpperZ";
1718
+ CharCodes3[CharCodes3["LowerZ"] = 122] = "LowerZ";
1719
+ CharCodes3[CharCodes3["LowerX"] = 120] = "LowerX";
1720
+ CharCodes3[CharCodes3["OpeningSquareBracket"] = 91] = "OpeningSquareBracket";
1750
1721
  })(CharCodes2 || (CharCodes2 = {}));
1751
1722
  var State;
1752
1723
  (function(State2) {
@@ -1769,12 +1740,12 @@ var State;
1769
1740
  State2[State2["InProcessingInstruction"] = 17] = "InProcessingInstruction";
1770
1741
  State2[State2["BeforeComment"] = 18] = "BeforeComment";
1771
1742
  State2[State2["CDATASequence"] = 19] = "CDATASequence";
1772
- State2[State2["InSpecialComment"] = 20] = "InSpecialComment";
1773
- State2[State2["InCommentLike"] = 21] = "InCommentLike";
1774
- State2[State2["BeforeSpecialS"] = 22] = "BeforeSpecialS";
1775
- State2[State2["BeforeSpecialT"] = 23] = "BeforeSpecialT";
1776
- State2[State2["SpecialStartSequence"] = 24] = "SpecialStartSequence";
1777
- State2[State2["InSpecialTag"] = 25] = "InSpecialTag";
1743
+ State2[State2["DeclarationSequence"] = 20] = "DeclarationSequence";
1744
+ State2[State2["InSpecialComment"] = 21] = "InSpecialComment";
1745
+ State2[State2["InCommentLike"] = 22] = "InCommentLike";
1746
+ State2[State2["SpecialStartSequence"] = 23] = "SpecialStartSequence";
1747
+ State2[State2["InSpecialTag"] = 24] = "InSpecialTag";
1748
+ State2[State2["InPlainText"] = 25] = "InPlainText";
1778
1749
  State2[State2["InEntity"] = 26] = "InEntity";
1779
1750
  })(State || (State = {}));
1780
1751
  function isWhitespace(c) {
@@ -1794,12 +1765,56 @@ var QuoteType;
1794
1765
  QuoteType2[QuoteType2["Double"] = 3] = "Double";
1795
1766
  })(QuoteType || (QuoteType = {}));
1796
1767
  var Sequences = {
1768
+ Empty: new Uint8Array(0),
1797
1769
  Cdata: new Uint8Array([67, 68, 65, 84, 65, 91]),
1798
1770
  // CDATA[
1799
1771
  CdataEnd: new Uint8Array([93, 93, 62]),
1800
1772
  // ]]>
1801
- CommentEnd: new Uint8Array([45, 45, 62]),
1802
- // `-->`
1773
+ CommentEnd: new Uint8Array([45, 45, 33, 62]),
1774
+ // `--!>`
1775
+ Doctype: new Uint8Array([100, 111, 99, 116, 121, 112, 101]),
1776
+ // `doctype`
1777
+ IframeEnd: new Uint8Array([60, 47, 105, 102, 114, 97, 109, 101]),
1778
+ // `</iframe`
1779
+ NoembedEnd: new Uint8Array([
1780
+ 60,
1781
+ 47,
1782
+ 110,
1783
+ 111,
1784
+ 101,
1785
+ 109,
1786
+ 98,
1787
+ 101,
1788
+ 100
1789
+ ]),
1790
+ // `</noembed`
1791
+ NoframesEnd: new Uint8Array([
1792
+ 60,
1793
+ 47,
1794
+ 110,
1795
+ 111,
1796
+ 102,
1797
+ 114,
1798
+ 97,
1799
+ 109,
1800
+ 101,
1801
+ 115
1802
+ ]),
1803
+ // `</noframes`
1804
+ Plaintext: new Uint8Array([
1805
+ 60,
1806
+ 47,
1807
+ 112,
1808
+ 108,
1809
+ 97,
1810
+ 105,
1811
+ 110,
1812
+ 116,
1813
+ 101,
1814
+ 120,
1815
+ 116
1816
+ ]),
1817
+ // `</plaintext`
1803
1818
  ScriptEnd: new Uint8Array([60, 47, 115, 99, 114, 105, 112, 116]),
1804
1819
  // `</script`
1805
1820
  StyleEnd: new Uint8Array([60, 47, 115, 116, 121, 108, 101]),
@@ -1822,22 +1837,43 @@ var Sequences = {
1822
1837
  XmpEnd: new Uint8Array([60, 47, 120, 109, 112])
1823
1838
  // `</xmp`
1824
1839
  };
1840
+ var specialStartSequences = /* @__PURE__ */ new Map([
1841
+ [Sequences.IframeEnd[2], Sequences.IframeEnd],
1842
+ [Sequences.NoembedEnd[2], Sequences.NoembedEnd],
1843
+ [Sequences.Plaintext[2], Sequences.Plaintext],
1844
+ [Sequences.ScriptEnd[2], Sequences.ScriptEnd],
1845
+ [Sequences.TitleEnd[2], Sequences.TitleEnd],
1846
+ [Sequences.XmpEnd[2], Sequences.XmpEnd]
1847
+ ]);
1825
1848
  var Tokenizer = class {
1826
- constructor({ xmlMode = false, decodeEntities = true }, cbs) {
1849
+ cbs;
1850
+ /** The current state the tokenizer is in. */
1851
+ state = State.Text;
1852
+ /** The read buffer. */
1853
+ buffer = "";
1854
+ /** The beginning of the section that is currently being read. */
1855
+ sectionStart = 0;
1856
+ /** The index within the buffer that we are currently looking at. */
1857
+ index = 0;
1858
+ /** The start of the last entity. */
1859
+ entityStart = 0;
1860
+ /** Some behavior, eg. when decoding entities, is done while we are in another state. This keeps track of the other state type. */
1861
+ baseState = State.Text;
1862
+ /** For special parsing behavior inside of script and style tags. */
1863
+ isSpecial = false;
1864
+ /** Indicates whether the tokenizer has been paused. */
1865
+ running = true;
1866
+ /** The offset of the current buffer. */
1867
+ offset = 0;
1868
+ xmlMode;
1869
+ decodeEntities;
1870
+ recognizeSelfClosing;
1871
+ entityDecoder;
1872
+ constructor({ xmlMode = false, decodeEntities = true, recognizeSelfClosing = xmlMode }, cbs) {
1827
1873
  this.cbs = cbs;
1828
- this.state = State.Text;
1829
- this.buffer = "";
1830
- this.sectionStart = 0;
1831
- this.index = 0;
1832
- this.entityStart = 0;
1833
- this.baseState = State.Text;
1834
- this.isSpecial = false;
1835
- this.running = true;
1836
- this.offset = 0;
1837
- this.currentSequence = void 0;
1838
- this.sequenceIndex = 0;
1839
1874
  this.xmlMode = xmlMode;
1840
1875
  this.decodeEntities = decodeEntities;
1876
+ this.recognizeSelfClosing = recognizeSelfClosing;
1841
1877
  this.entityDecoder = new EntityDecoder(xmlMode ? xmlDecodeTree : htmlDecodeTree, (cp, consumed) => this.emitCodePoint(cp, consumed));
1842
1878
  }
1843
1879
  reset() {
@@ -1846,7 +1882,9 @@ var Tokenizer = class {
1846
1882
  this.sectionStart = 0;
1847
1883
  this.index = 0;
1848
1884
  this.baseState = State.Text;
1849
- this.currentSequence = void 0;
1885
+ this.isSpecial = false;
1886
+ this.currentSequence = Sequences.Empty;
1887
+ this.sequenceIndex = 0;
1850
1888
  this.running = true;
1851
1889
  this.offset = 0;
1852
1890
  }
@@ -1879,56 +1917,63 @@ var Tokenizer = class {
1879
1917
  this.startEntity();
1880
1918
  }
1881
1919
  }
1882
- stateSpecialStartSequence(c) {
1883
- const isEnd = this.sequenceIndex === this.currentSequence.length;
1884
- const isMatch = isEnd ? (
1885
- // If we are at the end of the sequence, make sure the tag name has ended
1886
- isEndOfTagSection(c)
1887
- ) : (
1888
- // Otherwise, do a case-insensitive comparison
1889
- (c | 32) === this.currentSequence[this.sequenceIndex]
1890
- );
1891
- if (!isMatch) {
1892
- this.isSpecial = false;
1893
- } else if (!isEnd) {
1894
- this.sequenceIndex++;
1895
- return;
1920
+ currentSequence = Sequences.Empty;
1921
+ sequenceIndex = 0;
1922
+ enterTagBody() {
1923
+ if (this.currentSequence === Sequences.Plaintext) {
1924
+ this.currentSequence = Sequences.Empty;
1925
+ this.state = State.InPlainText;
1926
+ } else if (this.isSpecial) {
1927
+ this.state = State.InSpecialTag;
1928
+ this.sequenceIndex = 0;
1929
+ } else {
1930
+ this.state = State.Text;
1896
1931
  }
1897
- this.sequenceIndex = 0;
1898
- this.state = State.InTagName;
1899
- this.stateInTagName(c);
1900
1932
  }
1901
- /** Look for an end tag. For <title> tags, also decode entities. */
1902
- stateInSpecialTag(c) {
1903
- if (this.sequenceIndex === this.currentSequence.length) {
1904
- if (c === CharCodes2.Gt || isWhitespace(c)) {
1905
- const endOfText = this.index - this.currentSequence.length;
1906
- if (this.sectionStart < endOfText) {
1907
- const actualIndex = this.index;
1908
- this.index = endOfText;
1909
- this.cbs.ontext(this.sectionStart, endOfText);
1910
- this.index = actualIndex;
1911
- }
1912
- this.isSpecial = false;
1913
- this.sectionStart = endOfText + 2;
1914
- this.stateInClosingTagName(c);
1933
+ /**
1934
+ * Match the opening tag name against an HTML text-only tag sequence.
1935
+ *
1936
+ * Some tags share an initial prefix (`script`/`style`, `title`/`textarea`,
1937
+ * `noembed`/`noframes`), so we may switch to an alternate sequence at the
1938
+ * first distinguishing byte. On a successful full match we fall back to
1939
+ * the normal tag-name state; a later `>` will enter raw-text, RCDATA, or
1940
+ * plaintext mode based on `currentSequence` / `isSpecial`.
1941
+ * @param c Current character code point.
1942
+ */
1943
+ stateSpecialStartSequence(c) {
1944
+ const lower = c | 32;
1945
+ if (this.sequenceIndex < this.currentSequence.length) {
1946
+ if (lower === this.currentSequence[this.sequenceIndex]) {
1947
+ this.sequenceIndex++;
1915
1948
  return;
1916
1949
  }
1917
- this.sequenceIndex = 0;
1918
- }
1919
- if ((c | 32) === this.currentSequence[this.sequenceIndex]) {
1920
- this.sequenceIndex += 1;
1921
- } else if (this.sequenceIndex === 0) {
1922
- if (this.currentSequence === Sequences.TitleEnd) {
1923
- if (this.decodeEntities && c === CharCodes2.Amp) {
1924
- this.startEntity();
1950
+ if (this.sequenceIndex === 3) {
1951
+ if (this.currentSequence === Sequences.ScriptEnd && lower === Sequences.StyleEnd[3]) {
1952
+ this.currentSequence = Sequences.StyleEnd;
1953
+ this.sequenceIndex = 4;
1954
+ return;
1925
1955
  }
1926
- } else if (this.fastForwardTo(CharCodes2.Lt)) {
1927
- this.sequenceIndex = 1;
1956
+ if (this.currentSequence === Sequences.TitleEnd && lower === Sequences.TextareaEnd[3]) {
1957
+ this.currentSequence = Sequences.TextareaEnd;
1958
+ this.sequenceIndex = 4;
1959
+ return;
1960
+ }
1961
+ } else if (this.sequenceIndex === 4 && this.currentSequence === Sequences.NoembedEnd && lower === Sequences.NoframesEnd[4]) {
1962
+ this.currentSequence = Sequences.NoframesEnd;
1963
+ this.sequenceIndex = 5;
1964
+ return;
1928
1965
  }
1929
- } else {
1930
- this.sequenceIndex = Number(c === CharCodes2.Lt);
1966
+ } else if (isEndOfTagSection(c)) {
1967
+ this.sequenceIndex = 0;
1968
+ this.state = State.InTagName;
1969
+ this.stateInTagName(c);
1970
+ return;
1931
1971
  }
1972
+ this.isSpecial = false;
1973
+ this.currentSequence = Sequences.Empty;
1974
+ this.sequenceIndex = 0;
1975
+ this.state = State.InTagName;
1976
+ this.stateInTagName(c);
1932
1977
  }
1933
1978
  stateCDATASequence(c) {
1934
1979
  if (c === Sequences.Cdata[this.sequenceIndex]) {
@@ -1940,14 +1985,19 @@ var Tokenizer = class {
1940
1985
  }
1941
1986
  } else {
1942
1987
  this.sequenceIndex = 0;
1943
- this.state = State.InDeclaration;
1944
- this.stateInDeclaration(c);
1988
+ if (this.xmlMode) {
1989
+ this.state = State.InDeclaration;
1990
+ this.stateInDeclaration(c);
1991
+ } else {
1992
+ this.state = State.InSpecialComment;
1993
+ this.stateInSpecialComment(c);
1994
+ }
1945
1995
  }
1946
1996
  }
1947
1997
  /**
1948
1998
  * When we wait for one specific character, we can speed things up
1949
1999
  * by skipping through the buffer until we find it.
1950
- *
2000
+ * @param c Current character code point.
1951
2001
  * @returns Whether the character was found.
1952
2002
  */
1953
2003
  fastForwardTo(c) {
@@ -1959,6 +2009,16 @@ var Tokenizer = class {
1959
2009
  this.index = this.buffer.length + this.offset - 1;
1960
2010
  return false;
1961
2011
  }
2012
+ /**
2013
+ * Emit a comment token and return to the text state.
2014
+ * @param offset Number of characters in the end sequence that have already been matched.
2015
+ */
2016
+ emitComment(offset) {
2017
+ this.cbs.oncomment(this.sectionStart, this.index, offset);
2018
+ this.sequenceIndex = 0;
2019
+ this.sectionStart = this.index + 1;
2020
+ this.state = State.Text;
2021
+ }
1962
2022
  /**
1963
2023
  * Comments and CDATA end with `-->` and `]]>`.
1964
2024
  *
@@ -1966,14 +2026,26 @@ var Tokenizer = class {
1966
2026
  * - Their end sequences have a distinct character they start with.
1967
2027
  * - That character is then repeated, so we have to check multiple repeats.
1968
2028
  * - All characters but the start character of the sequence can be skipped.
2029
+ * @param c Current character code point.
1969
2030
  */
1970
2031
  stateInCommentLike(c) {
1971
- if (c === this.currentSequence[this.sequenceIndex]) {
2032
+ if (!this.xmlMode && this.currentSequence === Sequences.CommentEnd && this.sequenceIndex <= 1 && /*
2033
+ * We're still at the very start of the comment: the only
2034
+ * characters consumed since `<!--` are the dashes that
2035
+ * advanced sequenceIndex (0 for `<!-->`, 1 for `<!--->`).
2036
+ */
2037
+ this.index === this.sectionStart + this.sequenceIndex && c === CharCodes2.Gt) {
2038
+ this.emitComment(this.sequenceIndex);
2039
+ } else if (this.currentSequence === Sequences.CommentEnd && this.sequenceIndex === 2 && c === CharCodes2.Gt) {
2040
+ this.emitComment(2);
2041
+ } else if (this.currentSequence === Sequences.CommentEnd && this.sequenceIndex === this.currentSequence.length - 1 && c !== CharCodes2.Gt) {
2042
+ this.sequenceIndex = Number(c === CharCodes2.Dash);
2043
+ } else if (c === this.currentSequence[this.sequenceIndex]) {
1972
2044
  if (++this.sequenceIndex === this.currentSequence.length) {
1973
2045
  if (this.currentSequence === Sequences.CdataEnd) {
1974
2046
  this.cbs.oncdata(this.sectionStart, this.index, 2);
1975
2047
  } else {
1976
- this.cbs.oncomment(this.sectionStart, this.index, 2);
2048
+ this.cbs.oncomment(this.sectionStart, this.index, 3);
1977
2049
  }
1978
2050
  this.sequenceIndex = 0;
1979
2051
  this.sectionStart = this.index + 1;
@@ -1992,61 +2064,107 @@ var Tokenizer = class {
1992
2064
  *
1993
2065
  * XML allows a lot more characters here (@see https://www.w3.org/TR/REC-xml/#NT-NameStartChar).
1994
2066
  * We allow anything that wouldn't end the tag.
2067
+ * @param c Current character code point.
1995
2068
  */
1996
2069
  isTagStartChar(c) {
1997
2070
  return this.xmlMode ? !isEndOfTagSection(c) : isASCIIAlpha(c);
1998
2071
  }
1999
- startSpecial(sequence, offset) {
2000
- this.isSpecial = true;
2001
- this.currentSequence = sequence;
2002
- this.sequenceIndex = offset;
2003
- this.state = State.SpecialStartSequence;
2004
- }
2005
- stateBeforeTagName(c) {
2006
- if (c === CharCodes2.ExclamationMark) {
2007
- this.state = State.BeforeDeclaration;
2008
- this.sectionStart = this.index + 1;
2009
- } else if (c === CharCodes2.Questionmark) {
2010
- this.state = State.InProcessingInstruction;
2011
- this.sectionStart = this.index + 1;
2012
- } else if (this.isTagStartChar(c)) {
2013
- const lower = c | 32;
2014
- this.sectionStart = this.index;
2015
- if (this.xmlMode) {
2016
- this.state = State.InTagName;
2017
- } else if (lower === Sequences.ScriptEnd[2]) {
2018
- this.state = State.BeforeSpecialS;
2019
- } else if (lower === Sequences.TitleEnd[2] || lower === Sequences.XmpEnd[2]) {
2020
- this.state = State.BeforeSpecialT;
2021
- } else {
2022
- this.state = State.InTagName;
2023
- }
2024
- } else if (c === CharCodes2.Slash) {
2025
- this.state = State.BeforeClosingTagName;
2026
- } else {
2027
- this.state = State.Text;
2028
- this.stateText(c);
2029
- }
2030
- }
2031
- stateInTagName(c) {
2032
- if (isEndOfTagSection(c)) {
2033
- this.cbs.onopentagname(this.sectionStart, this.index);
2034
- this.sectionStart = -1;
2072
+ /**
2073
+ * Scan raw-text / RCDATA content for the matching end tag.
2074
+ *
2075
+ * For RCDATA tags (`<title>`, `<textarea>`) entities are decoded inline.
2076
+ * For raw-text tags (`<script>`, `<style>`, etc.) we fast-forward to `<`.
2077
+ * @param c Current character code point.
2078
+ */
2079
+ stateInSpecialTag(c) {
2080
+ if (this.sequenceIndex === this.currentSequence.length) {
2081
+ if (isEndOfTagSection(c)) {
2082
+ const endOfText = this.index - this.currentSequence.length;
2083
+ if (this.sectionStart < endOfText) {
2084
+ const actualIndex = this.index;
2085
+ this.index = endOfText;
2086
+ this.cbs.ontext(this.sectionStart, endOfText);
2087
+ this.index = actualIndex;
2088
+ }
2089
+ this.isSpecial = false;
2090
+ this.sectionStart = endOfText + 2;
2091
+ this.stateInClosingTagName(c);
2092
+ return;
2093
+ }
2094
+ this.sequenceIndex = 0;
2095
+ }
2096
+ if ((c | 32) === this.currentSequence[this.sequenceIndex]) {
2097
+ this.sequenceIndex += 1;
2098
+ } else if (this.sequenceIndex === 0) {
2099
+ if (this.currentSequence === Sequences.TitleEnd || this.currentSequence === Sequences.TextareaEnd) {
2100
+ if (this.decodeEntities && c === CharCodes2.Amp) {
2101
+ this.startEntity();
2102
+ }
2103
+ } else if (this.fastForwardTo(CharCodes2.Lt)) {
2104
+ this.sequenceIndex = 1;
2105
+ }
2106
+ } else {
2107
+ this.sequenceIndex = Number(c === CharCodes2.Lt);
2108
+ }
2109
+ }
2110
+ stateBeforeTagName(c) {
2111
+ if (c === CharCodes2.ExclamationMark) {
2112
+ this.state = State.BeforeDeclaration;
2113
+ this.sectionStart = this.index + 1;
2114
+ } else if (c === CharCodes2.Questionmark) {
2115
+ if (this.xmlMode) {
2116
+ this.state = State.InProcessingInstruction;
2117
+ this.sequenceIndex = 0;
2118
+ this.sectionStart = this.index + 1;
2119
+ } else {
2120
+ this.state = State.InSpecialComment;
2121
+ this.sectionStart = this.index;
2122
+ }
2123
+ } else if (this.isTagStartChar(c)) {
2124
+ this.sectionStart = this.index;
2125
+ const special = this.xmlMode || this.cbs.isInForeignContext?.() ? void 0 : specialStartSequences.get(c | 32);
2126
+ if (special === void 0) {
2127
+ this.state = State.InTagName;
2128
+ } else {
2129
+ this.isSpecial = true;
2130
+ this.currentSequence = special;
2131
+ this.sequenceIndex = 3;
2132
+ this.state = State.SpecialStartSequence;
2133
+ }
2134
+ } else if (c === CharCodes2.Slash) {
2135
+ this.state = State.BeforeClosingTagName;
2136
+ } else {
2137
+ this.state = State.Text;
2138
+ this.stateText(c);
2139
+ }
2140
+ }
2141
+ stateInTagName(c) {
2142
+ if (isEndOfTagSection(c)) {
2143
+ this.cbs.onopentagname(this.sectionStart, this.index);
2144
+ this.sectionStart = -1;
2035
2145
  this.state = State.BeforeAttributeName;
2036
2146
  this.stateBeforeAttributeName(c);
2037
2147
  }
2038
2148
  }
2039
2149
  stateBeforeClosingTagName(c) {
2040
2150
  if (isWhitespace(c)) {
2151
+ if (this.xmlMode) {
2152
+ } else {
2153
+ this.state = State.InSpecialComment;
2154
+ this.sectionStart = this.index;
2155
+ }
2041
2156
  } else if (c === CharCodes2.Gt) {
2042
2157
  this.state = State.Text;
2158
+ if (!this.xmlMode) {
2159
+ this.sectionStart = this.index + 1;
2160
+ }
2043
2161
  } else {
2044
2162
  this.state = this.isTagStartChar(c) ? State.InClosingTagName : State.InSpecialComment;
2045
2163
  this.sectionStart = this.index;
2046
2164
  }
2047
2165
  }
2048
2166
  stateInClosingTagName(c) {
2049
- if (c === CharCodes2.Gt || isWhitespace(c)) {
2167
+ if (isEndOfTagSection(c)) {
2050
2168
  this.cbs.onclosetag(this.sectionStart, this.index);
2051
2169
  this.sectionStart = -1;
2052
2170
  this.state = State.AfterClosingTagName;
@@ -2062,12 +2180,7 @@ var Tokenizer = class {
2062
2180
  stateBeforeAttributeName(c) {
2063
2181
  if (c === CharCodes2.Gt) {
2064
2182
  this.cbs.onopentagend(this.index);
2065
- if (this.isSpecial) {
2066
- this.state = State.InSpecialTag;
2067
- this.sequenceIndex = 0;
2068
- } else {
2069
- this.state = State.Text;
2070
- }
2183
+ this.enterTagBody();
2071
2184
  this.sectionStart = this.index + 1;
2072
2185
  } else if (c === CharCodes2.Slash) {
2073
2186
  this.state = State.InSelfClosingTag;
@@ -2076,12 +2189,26 @@ var Tokenizer = class {
2076
2189
  this.sectionStart = this.index;
2077
2190
  }
2078
2191
  }
2192
+ /**
2193
+ * Handle `/` before `>` in an opening tag.
2194
+ *
2195
+ * In HTML mode, text-only tags ignore the self-closing flag and still enter
2196
+ * their raw-text/RCDATA/plaintext state unless self-closing tags are being
2197
+ * recognized. In XML mode, or for ordinary tags, the tokenizer returns to
2198
+ * regular text parsing after emitting the self-closing callback.
2199
+ * @param c Current character code point.
2200
+ */
2079
2201
  stateInSelfClosingTag(c) {
2080
2202
  if (c === CharCodes2.Gt) {
2081
2203
  this.cbs.onselfclosingtag(this.index);
2082
- this.state = State.Text;
2083
2204
  this.sectionStart = this.index + 1;
2205
+ if (!this.recognizeSelfClosing) {
2206
+ this.enterTagBody();
2207
+ return;
2208
+ }
2209
+ this.state = State.Text;
2084
2210
  this.isSpecial = false;
2211
+ this.currentSequence = Sequences.Empty;
2085
2212
  } else if (!isWhitespace(c)) {
2086
2213
  this.state = State.BeforeAttributeName;
2087
2214
  this.stateBeforeAttributeName(c);
@@ -2149,12 +2276,54 @@ var Tokenizer = class {
2149
2276
  this.startEntity();
2150
2277
  }
2151
2278
  }
2279
+ /**
2280
+ * Distinguish between CDATA, declarations, HTML comments, and HTML bogus
2281
+ * comments after `<!`.
2282
+ *
2283
+ * In HTML mode, only real comments and doctypes stay on declaration paths;
2284
+ * everything else becomes a bogus comment terminated by the next `>`.
2285
+ * @param c Current character code point.
2286
+ */
2152
2287
  stateBeforeDeclaration(c) {
2153
2288
  if (c === CharCodes2.OpeningSquareBracket) {
2154
2289
  this.state = State.CDATASequence;
2155
2290
  this.sequenceIndex = 0;
2156
- } else {
2291
+ } else if (this.xmlMode) {
2157
2292
  this.state = c === CharCodes2.Dash ? State.BeforeComment : State.InDeclaration;
2293
+ } else if ((c | 32) === Sequences.Doctype[0]) {
2294
+ this.state = State.DeclarationSequence;
2295
+ this.currentSequence = Sequences.Doctype;
2296
+ this.sequenceIndex = 1;
2297
+ } else if (c === CharCodes2.Gt) {
2298
+ this.cbs.oncomment(this.sectionStart, this.index, 0);
2299
+ this.state = State.Text;
2300
+ this.sectionStart = this.index + 1;
2301
+ } else if (c === CharCodes2.Dash) {
2302
+ this.state = State.BeforeComment;
2303
+ } else {
2304
+ this.state = State.InSpecialComment;
2305
+ }
2306
+ }
2307
+ /**
2308
+ * Continue matching `doctype` after `<!d`.
2309
+ *
2310
+ * A full `doctype` match stays on the declaration path; any other name falls
2311
+ * back to an HTML bogus comment, which matches browser behavior for
2312
+ * non-doctype `<!...>` constructs.
2313
+ * @param c Current character code point.
2314
+ */
2315
+ stateDeclarationSequence(c) {
2316
+ if (this.sequenceIndex === this.currentSequence.length) {
2317
+ this.state = State.InDeclaration;
2318
+ this.stateInDeclaration(c);
2319
+ } else if ((c | 32) === this.currentSequence[this.sequenceIndex]) {
2320
+ this.sequenceIndex += 1;
2321
+ } else if (c === CharCodes2.Gt) {
2322
+ this.cbs.oncomment(this.sectionStart, this.index, 0);
2323
+ this.state = State.Text;
2324
+ this.sectionStart = this.index + 1;
2325
+ } else {
2326
+ this.state = State.InSpecialComment;
2158
2327
  }
2159
2328
  }
2160
2329
  stateInDeclaration(c) {
@@ -2164,21 +2333,39 @@ var Tokenizer = class {
2164
2333
  this.sectionStart = this.index + 1;
2165
2334
  }
2166
2335
  }
2336
+ /**
2337
+ * XML processing instructions (`<?...?>`).
2338
+ *
2339
+ * In HTML mode `<?` is routed to `InSpecialComment` instead, so this
2340
+ * state is only reachable in XML mode.
2341
+ * @param c Current character code point.
2342
+ */
2167
2343
  stateInProcessingInstruction(c) {
2168
- if (c === CharCodes2.Gt || this.fastForwardTo(CharCodes2.Gt)) {
2169
- this.cbs.onprocessinginstruction(this.sectionStart, this.index);
2344
+ if (c === CharCodes2.Questionmark) {
2345
+ this.sequenceIndex = 1;
2346
+ } else if (c === CharCodes2.Gt && this.sequenceIndex === 1) {
2347
+ this.cbs.onprocessinginstruction(this.sectionStart, this.index - 1);
2348
+ this.sequenceIndex = 0;
2170
2349
  this.state = State.Text;
2171
2350
  this.sectionStart = this.index + 1;
2351
+ } else {
2352
+ this.sequenceIndex = Number(this.fastForwardTo(CharCodes2.Questionmark));
2172
2353
  }
2173
2354
  }
2174
2355
  stateBeforeComment(c) {
2175
2356
  if (c === CharCodes2.Dash) {
2176
2357
  this.state = State.InCommentLike;
2177
2358
  this.currentSequence = Sequences.CommentEnd;
2178
- this.sequenceIndex = 2;
2359
+ this.sequenceIndex = 0;
2179
2360
  this.sectionStart = this.index + 1;
2180
- } else {
2361
+ } else if (this.xmlMode) {
2181
2362
  this.state = State.InDeclaration;
2363
+ } else if (c === CharCodes2.Gt) {
2364
+ this.cbs.oncomment(this.sectionStart, this.index, 0);
2365
+ this.state = State.Text;
2366
+ this.sectionStart = this.index + 1;
2367
+ } else {
2368
+ this.state = State.InSpecialComment;
2182
2369
  }
2183
2370
  }
2184
2371
  stateInSpecialComment(c) {
@@ -2188,38 +2375,6 @@ var Tokenizer = class {
2188
2375
  this.sectionStart = this.index + 1;
2189
2376
  }
2190
2377
  }
2191
- stateBeforeSpecialS(c) {
2192
- const lower = c | 32;
2193
- if (lower === Sequences.ScriptEnd[3]) {
2194
- this.startSpecial(Sequences.ScriptEnd, 4);
2195
- } else if (lower === Sequences.StyleEnd[3]) {
2196
- this.startSpecial(Sequences.StyleEnd, 4);
2197
- } else {
2198
- this.state = State.InTagName;
2199
- this.stateInTagName(c);
2200
- }
2201
- }
2202
- stateBeforeSpecialT(c) {
2203
- const lower = c | 32;
2204
- switch (lower) {
2205
- case Sequences.TitleEnd[3]: {
2206
- this.startSpecial(Sequences.TitleEnd, 4);
2207
- break;
2208
- }
2209
- case Sequences.TextareaEnd[3]: {
2210
- this.startSpecial(Sequences.TextareaEnd, 4);
2211
- break;
2212
- }
2213
- case Sequences.XmpEnd[3]: {
2214
- this.startSpecial(Sequences.XmpEnd, 4);
2215
- break;
2216
- }
2217
- default: {
2218
- this.state = State.InTagName;
2219
- this.stateInTagName(c);
2220
- }
2221
- }
2222
- }
2223
2378
  startEntity() {
2224
2379
  this.baseState = this.state;
2225
2380
  this.state = State.InEntity;
@@ -2248,7 +2403,7 @@ var Tokenizer = class {
2248
2403
  */
2249
2404
  cleanup() {
2250
2405
  if (this.running && this.sectionStart !== this.index) {
2251
- if (this.state === State.Text || this.state === State.InSpecialTag && this.sequenceIndex === 0) {
2406
+ if (this.state === State.Text || this.state === State.InPlainText || this.state === State.InSpecialTag && this.sequenceIndex === 0) {
2252
2407
  this.cbs.ontext(this.sectionStart, this.index);
2253
2408
  this.sectionStart = this.index;
2254
2409
  } else if (this.state === State.InAttributeValueDq || this.state === State.InAttributeValueSq || this.state === State.InAttributeValueNq) {
@@ -2273,6 +2428,10 @@ var Tokenizer = class {
2273
2428
  this.stateText(c);
2274
2429
  break;
2275
2430
  }
2431
+ case State.InPlainText: {
2432
+ this.index = this.buffer.length + this.offset - 1;
2433
+ break;
2434
+ }
2276
2435
  case State.SpecialStartSequence: {
2277
2436
  this.stateSpecialStartSequence(c);
2278
2437
  break;
@@ -2285,6 +2444,10 @@ var Tokenizer = class {
2285
2444
  this.stateCDATASequence(c);
2286
2445
  break;
2287
2446
  }
2447
+ case State.DeclarationSequence: {
2448
+ this.stateDeclarationSequence(c);
2449
+ break;
2450
+ }
2288
2451
  case State.InAttributeValueDq: {
2289
2452
  this.stateInAttributeValueDoubleQuotes(c);
2290
2453
  break;
@@ -2337,14 +2500,6 @@ var Tokenizer = class {
2337
2500
  this.stateAfterClosingTagName(c);
2338
2501
  break;
2339
2502
  }
2340
- case State.BeforeSpecialS: {
2341
- this.stateBeforeSpecialS(c);
2342
- break;
2343
- }
2344
- case State.BeforeSpecialT: {
2345
- this.stateBeforeSpecialT(c);
2346
- break;
2347
- }
2348
2503
  case State.InAttributeValueNq: {
2349
2504
  this.stateInAttributeValueNoQuotes(c);
2350
2505
  break;
@@ -2386,21 +2541,87 @@ var Tokenizer = class {
2386
2541
  this.handleTrailingData();
2387
2542
  this.cbs.onend();
2388
2543
  }
2544
+ handleTrailingCommentLikeData(endIndex) {
2545
+ if (this.state !== State.InCommentLike) {
2546
+ return false;
2547
+ }
2548
+ if (this.currentSequence === Sequences.CdataEnd) {
2549
+ if (this.xmlMode) {
2550
+ if (this.sectionStart < endIndex) {
2551
+ this.cbs.oncdata(this.sectionStart, endIndex, 0);
2552
+ }
2553
+ } else {
2554
+ const cdataStart = this.sectionStart - Sequences.Cdata.length - 1;
2555
+ this.cbs.oncomment(cdataStart, endIndex, 0);
2556
+ }
2557
+ } else {
2558
+ const offset = this.xmlMode ? 0 : Math.min(this.sequenceIndex, Sequences.CommentEnd.length - 1);
2559
+ this.cbs.oncomment(this.sectionStart, endIndex, offset);
2560
+ }
2561
+ return true;
2562
+ }
2563
+ handleTrailingMarkupDeclaration(endIndex) {
2564
+ if (this.xmlMode) {
2565
+ switch (this.state) {
2566
+ case State.InSpecialComment:
2567
+ case State.BeforeComment:
2568
+ case State.CDATASequence:
2569
+ case State.DeclarationSequence:
2570
+ case State.InDeclaration: {
2571
+ this.cbs.ontext(this.sectionStart, endIndex);
2572
+ return true;
2573
+ }
2574
+ default: {
2575
+ return false;
2576
+ }
2577
+ }
2578
+ }
2579
+ switch (this.state) {
2580
+ case State.BeforeDeclaration:
2581
+ case State.InSpecialComment:
2582
+ case State.BeforeComment:
2583
+ case State.CDATASequence: {
2584
+ this.cbs.oncomment(this.sectionStart, endIndex, 0);
2585
+ return true;
2586
+ }
2587
+ case State.DeclarationSequence: {
2588
+ if (this.sequenceIndex !== Sequences.Doctype.length) {
2589
+ this.cbs.oncomment(this.sectionStart, endIndex, 0);
2590
+ }
2591
+ return true;
2592
+ }
2593
+ case State.InDeclaration: {
2594
+ return true;
2595
+ }
2596
+ default: {
2597
+ return false;
2598
+ }
2599
+ }
2600
+ }
2389
2601
  /** Handle any trailing data. */
2390
2602
  handleTrailingData() {
2391
2603
  const endIndex = this.buffer.length + this.offset;
2604
+ if (this.handleTrailingCommentLikeData(endIndex) || this.handleTrailingMarkupDeclaration(endIndex)) {
2605
+ return;
2606
+ }
2392
2607
  if (this.sectionStart >= endIndex) {
2393
2608
  return;
2394
2609
  }
2395
- if (this.state === State.InCommentLike) {
2396
- if (this.currentSequence === Sequences.CdataEnd) {
2397
- this.cbs.oncdata(this.sectionStart, endIndex, 0);
2398
- } else {
2399
- this.cbs.oncomment(this.sectionStart, endIndex, 0);
2610
+ switch (this.state) {
2611
+ case State.InTagName:
2612
+ case State.BeforeAttributeName:
2613
+ case State.BeforeAttributeValue:
2614
+ case State.AfterAttributeName:
2615
+ case State.InAttributeName:
2616
+ case State.InAttributeValueSq:
2617
+ case State.InAttributeValueDq:
2618
+ case State.InAttributeValueNq:
2619
+ case State.InClosingTagName: {
2620
+ break;
2621
+ }
2622
+ default: {
2623
+ this.cbs.ontext(this.sectionStart, endIndex);
2400
2624
  }
2401
- } 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) {
2402
- } else {
2403
- this.cbs.ontext(this.sectionStart, endIndex);
2404
2625
  }
2405
2626
  }
2406
2627
  emitCodePoint(cp, consumed) {
@@ -2422,7 +2643,8 @@ var Tokenizer = class {
2422
2643
  }
2423
2644
  };
2424
2645
 
2425
- // node_modules/.pnpm/htmlparser2@10.1.0/node_modules/htmlparser2/dist/esm/Parser.js
2646
+ // node_modules/.pnpm/htmlparser2@12.0.0/node_modules/htmlparser2/dist/Parser.js
2647
+ var { fromCodePoint } = String;
2426
2648
  var formTags = /* @__PURE__ */ new Set([
2427
2649
  "input",
2428
2650
  "option",
@@ -2433,6 +2655,7 @@ var formTags = /* @__PURE__ */ new Set([
2433
2655
  "textarea"
2434
2656
  ]);
2435
2657
  var pTag = /* @__PURE__ */ new Set(["p"]);
2658
+ var headingTags = /* @__PURE__ */ new Set(["h1", "h2", "h3", "h4", "h5", "h6", "p"]);
2436
2659
  var tableSectionTags = /* @__PURE__ */ new Set(["thead", "tbody"]);
2437
2660
  var ddtTags = /* @__PURE__ */ new Set(["dd", "dt"]);
2438
2661
  var rtpTags = /* @__PURE__ */ new Set(["rt", "rp"]);
@@ -2441,14 +2664,15 @@ var openImpliesClose = /* @__PURE__ */ new Map([
2441
2664
  ["th", /* @__PURE__ */ new Set(["th"])],
2442
2665
  ["td", /* @__PURE__ */ new Set(["thead", "th", "td"])],
2443
2666
  ["body", /* @__PURE__ */ new Set(["head", "link", "script"])],
2667
+ ["a", /* @__PURE__ */ new Set(["a"])],
2444
2668
  ["li", /* @__PURE__ */ new Set(["li"])],
2445
2669
  ["p", pTag],
2446
- ["h1", pTag],
2447
- ["h2", pTag],
2448
- ["h3", pTag],
2449
- ["h4", pTag],
2450
- ["h5", pTag],
2451
- ["h6", pTag],
2670
+ ["h1", headingTags],
2671
+ ["h2", headingTags],
2672
+ ["h3", headingTags],
2673
+ ["h4", headingTags],
2674
+ ["h5", headingTags],
2675
+ ["h6", headingTags],
2452
2676
  ["select", formTags],
2453
2677
  ["input", formTags],
2454
2678
  ["output", formTags],
@@ -2485,6 +2709,7 @@ var openImpliesClose = /* @__PURE__ */ new Map([
2485
2709
  ["tbody", tableSectionTags],
2486
2710
  ["tfoot", tableSectionTags]
2487
2711
  ]);
2712
+ var DOCUMENT_TYPE = "doctype";
2488
2713
  var voidElements = /* @__PURE__ */ new Set([
2489
2714
  "area",
2490
2715
  "base",
@@ -2514,98 +2739,201 @@ var htmlIntegrationElements = /* @__PURE__ */ new Set([
2514
2739
  "ms",
2515
2740
  "mtext",
2516
2741
  "annotation-xml",
2517
- "foreignobject",
2742
+ "foreignObject",
2518
2743
  "desc",
2519
2744
  "title"
2520
2745
  ]);
2746
+ var svgTagNameAdjustments = /* @__PURE__ */ new Map([
2747
+ ["altglyph", "altGlyph"],
2748
+ ["altglyphdef", "altGlyphDef"],
2749
+ ["altglyphitem", "altGlyphItem"],
2750
+ ["animatecolor", "animateColor"],
2751
+ ["animatemotion", "animateMotion"],
2752
+ ["animatetransform", "animateTransform"],
2753
+ ["clippath", "clipPath"],
2754
+ ["feblend", "feBlend"],
2755
+ ["fecolormatrix", "feColorMatrix"],
2756
+ ["fecomponenttransfer", "feComponentTransfer"],
2757
+ ["fecomposite", "feComposite"],
2758
+ ["feconvolvematrix", "feConvolveMatrix"],
2759
+ ["fediffuselighting", "feDiffuseLighting"],
2760
+ ["fedisplacementmap", "feDisplacementMap"],
2761
+ ["fedistantlight", "feDistantLight"],
2762
+ ["fedropshadow", "feDropShadow"],
2763
+ ["feflood", "feFlood"],
2764
+ ["fefunca", "feFuncA"],
2765
+ ["fefuncb", "feFuncB"],
2766
+ ["fefuncg", "feFuncG"],
2767
+ ["fefuncr", "feFuncR"],
2768
+ ["fegaussianblur", "feGaussianBlur"],
2769
+ ["feimage", "feImage"],
2770
+ ["femerge", "feMerge"],
2771
+ ["femergenode", "feMergeNode"],
2772
+ ["femorphology", "feMorphology"],
2773
+ ["feoffset", "feOffset"],
2774
+ ["fepointlight", "fePointLight"],
2775
+ ["fespecularlighting", "feSpecularLighting"],
2776
+ ["fespotlight", "feSpotLight"],
2777
+ ["fetile", "feTile"],
2778
+ ["feturbulence", "feTurbulence"],
2779
+ ["foreignobject", "foreignObject"],
2780
+ ["glyphref", "glyphRef"],
2781
+ ["lineargradient", "linearGradient"],
2782
+ ["radialgradient", "radialGradient"],
2783
+ ["textpath", "textPath"]
2784
+ ]);
2785
+ var ForeignContext;
2786
+ (function(ForeignContext2) {
2787
+ ForeignContext2[ForeignContext2["None"] = 0] = "None";
2788
+ ForeignContext2[ForeignContext2["Svg"] = 1] = "Svg";
2789
+ ForeignContext2[ForeignContext2["MathML"] = 2] = "MathML";
2790
+ })(ForeignContext || (ForeignContext = {}));
2521
2791
  var reNameEnd = /\s|\//;
2522
2792
  var Parser = class {
2793
+ options;
2794
+ /** The start index of the last event. */
2795
+ startIndex = 0;
2796
+ /** The end index of the last event. */
2797
+ endIndex = 0;
2798
+ /**
2799
+ * Store the start index of the current open tag,
2800
+ * so we can update the start index for attributes.
2801
+ */
2802
+ openTagStart = 0;
2803
+ tagname = "";
2804
+ attribname = "";
2805
+ attribvalue = "";
2806
+ attribs = null;
2807
+ stack = [];
2808
+ foreignContext;
2809
+ cbs;
2810
+ lowerCaseTagNames;
2811
+ lowerCaseAttributeNames;
2812
+ recognizeSelfClosing;
2813
+ /** We are parsing HTML. Inverse of the `xmlMode` option. */
2814
+ htmlMode;
2815
+ tokenizer;
2816
+ buffers = [];
2817
+ bufferOffset = 0;
2818
+ /** The index of the last written buffer. Used when resuming after a `pause()`. */
2819
+ writeIndex = 0;
2820
+ /** Indicates whether the parser has finished running / `.end` has been called. */
2821
+ ended = false;
2523
2822
  constructor(cbs, options = {}) {
2524
- var _a3, _b, _c, _d, _e, _f;
2525
2823
  this.options = options;
2526
- this.startIndex = 0;
2527
- this.endIndex = 0;
2528
- this.openTagStart = 0;
2529
- this.tagname = "";
2530
- this.attribname = "";
2531
- this.attribvalue = "";
2532
- this.attribs = null;
2533
- this.stack = [];
2534
- this.buffers = [];
2535
- this.bufferOffset = 0;
2536
- this.writeIndex = 0;
2537
- this.ended = false;
2538
- this.cbs = cbs !== null && cbs !== void 0 ? cbs : {};
2824
+ this.cbs = cbs ?? {};
2539
2825
  this.htmlMode = !this.options.xmlMode;
2540
- this.lowerCaseTagNames = (_a3 = options.lowerCaseTags) !== null && _a3 !== void 0 ? _a3 : this.htmlMode;
2541
- this.lowerCaseAttributeNames = (_b = options.lowerCaseAttributeNames) !== null && _b !== void 0 ? _b : this.htmlMode;
2542
- this.recognizeSelfClosing = (_c = options.recognizeSelfClosing) !== null && _c !== void 0 ? _c : !this.htmlMode;
2543
- this.tokenizer = new ((_d = options.Tokenizer) !== null && _d !== void 0 ? _d : Tokenizer)(this.options, this);
2544
- this.foreignContext = [!this.htmlMode];
2545
- (_f = (_e = this.cbs).onparserinit) === null || _f === void 0 ? void 0 : _f.call(_e, this);
2826
+ this.lowerCaseTagNames = options.lowerCaseTags ?? this.htmlMode;
2827
+ this.lowerCaseAttributeNames = options.lowerCaseAttributeNames ?? this.htmlMode;
2828
+ this.recognizeSelfClosing = options.recognizeSelfClosing ?? !this.htmlMode;
2829
+ this.tokenizer = new (options.Tokenizer ?? Tokenizer)(this.options, this);
2830
+ this.foreignContext = [ForeignContext.None];
2831
+ this.cbs.onparserinit?.(this);
2546
2832
  }
2547
2833
  // Tokenizer event handlers
2548
- /** @internal */
2834
+ /**
2835
+ * @param start Start index for the current parser event.
2836
+ * @param endIndex End index for the current parser event.
2837
+ * @internal
2838
+ */
2549
2839
  ontext(start, endIndex) {
2550
- var _a3, _b;
2551
2840
  const data = this.getSlice(start, endIndex);
2552
2841
  this.endIndex = endIndex - 1;
2553
- (_b = (_a3 = this.cbs).ontext) === null || _b === void 0 ? void 0 : _b.call(_a3, data);
2842
+ this.cbs.ontext?.(data);
2554
2843
  this.startIndex = endIndex;
2555
2844
  }
2556
- /** @internal */
2845
+ /**
2846
+ * @param cp Current Unicode code point.
2847
+ * @param endIndex End index for the current parser event.
2848
+ * @internal
2849
+ */
2557
2850
  ontextentity(cp, endIndex) {
2558
- var _a3, _b;
2559
2851
  this.endIndex = endIndex - 1;
2560
- (_b = (_a3 = this.cbs).ontext) === null || _b === void 0 ? void 0 : _b.call(_a3, fromCodePoint(cp));
2852
+ this.cbs.ontext?.(fromCodePoint(cp));
2561
2853
  this.startIndex = endIndex;
2562
2854
  }
2855
+ /** @internal */
2856
+ isInForeignContext() {
2857
+ return this.foreignContext[0] !== ForeignContext.None;
2858
+ }
2563
2859
  /**
2564
2860
  * Checks if the current tag is a void element. Override this if you want
2565
2861
  * to specify your own additional void elements.
2862
+ * @param name Name of the pseudo selector.
2566
2863
  */
2567
2864
  isVoidElement(name) {
2568
2865
  return this.htmlMode && voidElements.has(name);
2569
2866
  }
2570
- /** @internal */
2867
+ /**
2868
+ * Read a tag name from the buffer.
2869
+ *
2870
+ * When `lowerCaseTagNames` is enabled (the default in HTML mode), the name
2871
+ * is lowercased and may be adjusted for SVG casing or the `image` → `img`
2872
+ * alias.
2873
+ * @param start Start index of the tag name in the buffer.
2874
+ * @param endIndex End index of the tag name in the buffer.
2875
+ */
2876
+ readTagName(start, endIndex) {
2877
+ const name = this.lowerCaseTagNames ? this.getSlice(start, endIndex).toLowerCase() : this.getSlice(start, endIndex);
2878
+ if (!(this.lowerCaseTagNames && this.htmlMode)) {
2879
+ return name;
2880
+ }
2881
+ if (this.foreignContext[0] === ForeignContext.Svg) {
2882
+ return svgTagNameAdjustments.get(name) ?? name;
2883
+ }
2884
+ if (this.foreignContext.length > 1) {
2885
+ const adjusted = svgTagNameAdjustments.get(name);
2886
+ if (adjusted !== void 0 && this.stack.includes(adjusted)) {
2887
+ return adjusted;
2888
+ }
2889
+ }
2890
+ if (!this.isInForeignContext()) {
2891
+ return name === "image" ? "img" : name;
2892
+ }
2893
+ return name;
2894
+ }
2895
+ /**
2896
+ * @param start Start index for the current parser event.
2897
+ * @param endIndex End index for the current parser event.
2898
+ * @internal
2899
+ */
2571
2900
  onopentagname(start, endIndex) {
2572
2901
  this.endIndex = endIndex;
2573
- let name = this.getSlice(start, endIndex);
2574
- if (this.lowerCaseTagNames) {
2575
- name = name.toLowerCase();
2576
- }
2577
- this.emitOpenTag(name);
2902
+ this.emitOpenTag(this.readTagName(start, endIndex));
2578
2903
  }
2579
2904
  emitOpenTag(name) {
2580
- var _a3, _b, _c, _d;
2581
2905
  this.openTagStart = this.startIndex;
2582
2906
  this.tagname = name;
2907
+ if (this.htmlMode && name === "form" && this.stack.includes("form")) {
2908
+ this.tagname = "";
2909
+ return;
2910
+ }
2583
2911
  const impliesClose = this.htmlMode && openImpliesClose.get(name);
2584
2912
  if (impliesClose) {
2585
2913
  while (this.stack.length > 0 && impliesClose.has(this.stack[0])) {
2586
- const element = this.stack.shift();
2587
- (_b = (_a3 = this.cbs).onclosetag) === null || _b === void 0 ? void 0 : _b.call(_a3, element, true);
2914
+ this.popElement(true);
2588
2915
  }
2589
2916
  }
2590
2917
  if (!this.isVoidElement(name)) {
2591
2918
  this.stack.unshift(name);
2592
2919
  if (this.htmlMode) {
2593
- if (foreignContextElements.has(name)) {
2594
- this.foreignContext.unshift(true);
2920
+ if (name === "svg") {
2921
+ this.foreignContext.unshift(ForeignContext.Svg);
2922
+ } else if (name === "math") {
2923
+ this.foreignContext.unshift(ForeignContext.MathML);
2595
2924
  } else if (htmlIntegrationElements.has(name)) {
2596
- this.foreignContext.unshift(false);
2925
+ this.foreignContext.unshift(ForeignContext.None);
2597
2926
  }
2598
2927
  }
2599
2928
  }
2600
- (_d = (_c = this.cbs).onopentagname) === null || _d === void 0 ? void 0 : _d.call(_c, name);
2929
+ this.cbs.onopentagname?.(name);
2601
2930
  if (this.cbs.onopentag)
2602
2931
  this.attribs = {};
2603
2932
  }
2604
2933
  endOpenTag(isImplied) {
2605
- var _a3, _b;
2606
2934
  this.startIndex = this.openTagStart;
2607
2935
  if (this.attribs) {
2608
- (_b = (_a3 = this.cbs).onopentag) === null || _b === void 0 ? void 0 : _b.call(_a3, this.tagname, this.attribs, isImplied);
2936
+ this.cbs.onopentag?.(this.tagname, this.attribs, isImplied);
2609
2937
  this.attribs = null;
2610
2938
  }
2611
2939
  if (this.cbs.onclosetag && this.isVoidElement(this.tagname)) {
@@ -2613,80 +2941,107 @@ var Parser = class {
2613
2941
  }
2614
2942
  this.tagname = "";
2615
2943
  }
2616
- /** @internal */
2944
+ /**
2945
+ * @param endIndex End index for the current parser event.
2946
+ * @internal
2947
+ */
2617
2948
  onopentagend(endIndex) {
2618
2949
  this.endIndex = endIndex;
2619
2950
  this.endOpenTag(false);
2620
2951
  this.startIndex = endIndex + 1;
2621
2952
  }
2622
- /** @internal */
2953
+ /**
2954
+ * @param start Start index for the current parser event.
2955
+ * @param endIndex End index for the current parser event.
2956
+ * @internal
2957
+ */
2623
2958
  onclosetag(start, endIndex) {
2624
- var _a3, _b, _c, _d, _e, _f, _g, _h;
2625
2959
  this.endIndex = endIndex;
2626
- let name = this.getSlice(start, endIndex);
2627
- if (this.lowerCaseTagNames) {
2628
- name = name.toLowerCase();
2629
- }
2630
- if (this.htmlMode && (foreignContextElements.has(name) || htmlIntegrationElements.has(name))) {
2631
- this.foreignContext.shift();
2632
- }
2960
+ const name = this.readTagName(start, endIndex);
2633
2961
  if (!this.isVoidElement(name)) {
2634
2962
  const pos = this.stack.indexOf(name);
2635
2963
  if (pos !== -1) {
2636
- for (let index = 0; index <= pos; index++) {
2637
- const element = this.stack.shift();
2638
- (_b = (_a3 = this.cbs).onclosetag) === null || _b === void 0 ? void 0 : _b.call(_a3, element, index !== pos);
2964
+ for (let index = 0; index < pos; index++) {
2965
+ this.popElement(true);
2639
2966
  }
2967
+ this.popElement(false);
2640
2968
  } else if (this.htmlMode && name === "p") {
2641
2969
  this.emitOpenTag("p");
2642
2970
  this.closeCurrentTag(true);
2643
2971
  }
2644
2972
  } else if (this.htmlMode && name === "br") {
2645
- (_d = (_c = this.cbs).onopentagname) === null || _d === void 0 ? void 0 : _d.call(_c, "br");
2646
- (_f = (_e = this.cbs).onopentag) === null || _f === void 0 ? void 0 : _f.call(_e, "br", {}, true);
2647
- (_h = (_g = this.cbs).onclosetag) === null || _h === void 0 ? void 0 : _h.call(_g, "br", false);
2973
+ this.cbs.onopentagname?.("br");
2974
+ this.cbs.onopentag?.("br", {}, true);
2975
+ this.cbs.onclosetag?.("br", false);
2648
2976
  }
2649
2977
  this.startIndex = endIndex + 1;
2650
2978
  }
2651
- /** @internal */
2979
+ /**
2980
+ * @param endIndex End index for the current parser event.
2981
+ * @internal
2982
+ */
2652
2983
  onselfclosingtag(endIndex) {
2653
2984
  this.endIndex = endIndex;
2654
- if (this.recognizeSelfClosing || this.foreignContext[0]) {
2985
+ if (this.recognizeSelfClosing || this.isInForeignContext()) {
2655
2986
  this.closeCurrentTag(false);
2656
2987
  this.startIndex = endIndex + 1;
2657
2988
  } else {
2658
2989
  this.onopentagend(endIndex);
2659
2990
  }
2660
2991
  }
2992
+ /**
2993
+ * Pop the top element off the stack, emit a close event, and maintain
2994
+ * the foreign context stack.
2995
+ * @param implied Whether this close is implied (not from an explicit end tag).
2996
+ */
2997
+ popElement(implied) {
2998
+ const element = this.stack.shift();
2999
+ if (this.htmlMode && (foreignContextElements.has(element) || htmlIntegrationElements.has(element))) {
3000
+ this.foreignContext.shift();
3001
+ }
3002
+ this.cbs.onclosetag?.(element, implied);
3003
+ }
2661
3004
  closeCurrentTag(isOpenImplied) {
2662
- var _a3, _b;
2663
3005
  const name = this.tagname;
2664
3006
  this.endOpenTag(isOpenImplied);
2665
3007
  if (this.stack[0] === name) {
2666
- (_b = (_a3 = this.cbs).onclosetag) === null || _b === void 0 ? void 0 : _b.call(_a3, name, !isOpenImplied);
2667
- this.stack.shift();
3008
+ this.popElement(!isOpenImplied);
2668
3009
  }
2669
3010
  }
2670
- /** @internal */
3011
+ /**
3012
+ * @param start Start index for the current parser event.
3013
+ * @param endIndex End index for the current parser event.
3014
+ * @internal
3015
+ */
2671
3016
  onattribname(start, endIndex) {
2672
3017
  this.startIndex = start;
2673
3018
  const name = this.getSlice(start, endIndex);
2674
3019
  this.attribname = this.lowerCaseAttributeNames ? name.toLowerCase() : name;
2675
3020
  }
2676
- /** @internal */
3021
+ /**
3022
+ * @param start Start index for the current parser event.
3023
+ * @param endIndex End index for the current parser event.
3024
+ * @internal
3025
+ */
2677
3026
  onattribdata(start, endIndex) {
2678
3027
  this.attribvalue += this.getSlice(start, endIndex);
2679
3028
  }
2680
- /** @internal */
3029
+ /**
3030
+ * @param cp Current Unicode code point.
3031
+ * @internal
3032
+ */
2681
3033
  onattribentity(cp) {
2682
3034
  this.attribvalue += fromCodePoint(cp);
2683
3035
  }
2684
- /** @internal */
3036
+ /**
3037
+ * @param quote Quote type used for the current attribute.
3038
+ * @param endIndex End index for the current parser event.
3039
+ * @internal
3040
+ */
2685
3041
  onattribend(quote2, endIndex) {
2686
- var _a3, _b;
2687
3042
  this.endIndex = endIndex;
2688
- (_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);
2689
- if (this.attribs && !Object.prototype.hasOwnProperty.call(this.attribs, this.attribname)) {
3043
+ this.cbs.onattribute?.(this.attribname, this.attribvalue, quote2 === QuoteType.Double ? '"' : quote2 === QuoteType.Single ? "'" : quote2 === QuoteType.NoValue ? void 0 : null);
3044
+ if (this.attribs && !Object.hasOwn(this.attribs, this.attribname)) {
2690
3045
  this.attribs[this.attribname] = this.attribvalue;
2691
3046
  }
2692
3047
  this.attribvalue = "";
@@ -2699,17 +3054,25 @@ var Parser = class {
2699
3054
  }
2700
3055
  return name;
2701
3056
  }
2702
- /** @internal */
3057
+ /**
3058
+ * @param start Start index for the current parser event.
3059
+ * @param endIndex End index for the current parser event.
3060
+ * @internal
3061
+ */
2703
3062
  ondeclaration(start, endIndex) {
2704
3063
  this.endIndex = endIndex;
2705
3064
  const value = this.getSlice(start, endIndex);
2706
3065
  if (this.cbs.onprocessinginstruction) {
2707
- const name = this.getInstructionName(value);
3066
+ const name = this.htmlMode ? this.lowerCaseTagNames ? DOCUMENT_TYPE : value.slice(0, DOCUMENT_TYPE.length) : this.getInstructionName(value);
2708
3067
  this.cbs.onprocessinginstruction(`!${name}`, `!${value}`);
2709
3068
  }
2710
3069
  this.startIndex = endIndex + 1;
2711
3070
  }
2712
- /** @internal */
3071
+ /**
3072
+ * @param start Start index for the current parser event.
3073
+ * @param endIndex End index for the current parser event.
3074
+ * @internal
3075
+ */
2713
3076
  onprocessinginstruction(start, endIndex) {
2714
3077
  this.endIndex = endIndex;
2715
3078
  const value = this.getSlice(start, endIndex);
@@ -2719,57 +3082,66 @@ var Parser = class {
2719
3082
  }
2720
3083
  this.startIndex = endIndex + 1;
2721
3084
  }
2722
- /** @internal */
3085
+ /**
3086
+ * @param start Start index for the current parser event.
3087
+ * @param endIndex End index for the current parser event.
3088
+ * @param offset Offset applied when computing parser indices.
3089
+ * @internal
3090
+ */
2723
3091
  oncomment(start, endIndex, offset) {
2724
- var _a3, _b, _c, _d;
2725
3092
  this.endIndex = endIndex;
2726
- (_b = (_a3 = this.cbs).oncomment) === null || _b === void 0 ? void 0 : _b.call(_a3, this.getSlice(start, endIndex - offset));
2727
- (_d = (_c = this.cbs).oncommentend) === null || _d === void 0 ? void 0 : _d.call(_c);
3093
+ this.cbs.oncomment?.(this.getSlice(start, endIndex - offset));
3094
+ this.cbs.oncommentend?.();
2728
3095
  this.startIndex = endIndex + 1;
2729
3096
  }
2730
- /** @internal */
3097
+ /**
3098
+ * @param start Start index for the current parser event.
3099
+ * @param endIndex End index for the current parser event.
3100
+ * @param offset Offset applied when computing parser indices.
3101
+ * @internal
3102
+ */
2731
3103
  oncdata(start, endIndex, offset) {
2732
- var _a3, _b, _c, _d, _e, _f, _g, _h, _j, _k;
2733
3104
  this.endIndex = endIndex;
2734
3105
  const value = this.getSlice(start, endIndex - offset);
2735
3106
  if (!this.htmlMode || this.options.recognizeCDATA) {
2736
- (_b = (_a3 = this.cbs).oncdatastart) === null || _b === void 0 ? void 0 : _b.call(_a3);
2737
- (_d = (_c = this.cbs).ontext) === null || _d === void 0 ? void 0 : _d.call(_c, value);
2738
- (_f = (_e = this.cbs).oncdataend) === null || _f === void 0 ? void 0 : _f.call(_e);
3107
+ this.cbs.oncdatastart?.();
3108
+ this.cbs.ontext?.(value);
3109
+ this.cbs.oncdataend?.();
3110
+ } else if (this.isInForeignContext()) {
3111
+ this.cbs.ontext?.(value);
2739
3112
  } else {
2740
- (_h = (_g = this.cbs).oncomment) === null || _h === void 0 ? void 0 : _h.call(_g, `[CDATA[${value}]]`);
2741
- (_k = (_j = this.cbs).oncommentend) === null || _k === void 0 ? void 0 : _k.call(_j);
3113
+ this.cbs.oncomment?.(`[CDATA[${value}]]`);
3114
+ this.cbs.oncommentend?.();
2742
3115
  }
2743
3116
  this.startIndex = endIndex + 1;
2744
3117
  }
2745
3118
  /** @internal */
2746
3119
  onend() {
2747
- var _a3, _b;
2748
3120
  if (this.cbs.onclosetag) {
2749
3121
  this.endIndex = this.startIndex;
2750
3122
  for (let index = 0; index < this.stack.length; index++) {
2751
3123
  this.cbs.onclosetag(this.stack[index], true);
2752
3124
  }
2753
3125
  }
2754
- (_b = (_a3 = this.cbs).onend) === null || _b === void 0 ? void 0 : _b.call(_a3);
3126
+ this.cbs.onend?.();
2755
3127
  }
2756
3128
  /**
2757
3129
  * Resets the parser to a blank state, ready to parse a new HTML document
2758
3130
  */
2759
3131
  reset() {
2760
- var _a3, _b, _c, _d;
2761
- (_b = (_a3 = this.cbs).onreset) === null || _b === void 0 ? void 0 : _b.call(_a3);
3132
+ this.cbs.onreset?.();
2762
3133
  this.tokenizer.reset();
2763
3134
  this.tagname = "";
2764
3135
  this.attribname = "";
3136
+ this.attribvalue = "";
2765
3137
  this.attribs = null;
2766
3138
  this.stack.length = 0;
2767
3139
  this.startIndex = 0;
2768
3140
  this.endIndex = 0;
2769
- (_d = (_c = this.cbs).onparserinit) === null || _d === void 0 ? void 0 : _d.call(_c, this);
3141
+ this.cbs.onparserinit?.(this);
2770
3142
  this.buffers.length = 0;
2771
3143
  this.foreignContext.length = 0;
2772
- this.foreignContext.unshift(!this.htmlMode);
3144
+ this.foreignContext.unshift(ForeignContext.None);
2773
3145
  this.bufferOffset = 0;
2774
3146
  this.writeIndex = 0;
2775
3147
  this.ended = false;
@@ -2777,7 +3149,6 @@ var Parser = class {
2777
3149
  /**
2778
3150
  * Resets the parser, then parses a complete document and
2779
3151
  * pushes it to the handler.
2780
- *
2781
3152
  * @param data Document to parse.
2782
3153
  */
2783
3154
  parseComplete(data) {
@@ -2785,6 +3156,9 @@ var Parser = class {
2785
3156
  this.end(data);
2786
3157
  }
2787
3158
  getSlice(start, end) {
3159
+ if (start === end) {
3160
+ return "";
3161
+ }
2788
3162
  while (start - this.bufferOffset >= this.buffers[0].length) {
2789
3163
  this.shiftBuffer();
2790
3164
  }
@@ -2802,13 +3176,11 @@ var Parser = class {
2802
3176
  }
2803
3177
  /**
2804
3178
  * Parses a chunk of data and calls the corresponding callbacks.
2805
- *
2806
3179
  * @param chunk Chunk to parse.
2807
3180
  */
2808
3181
  write(chunk) {
2809
- var _a3, _b;
2810
3182
  if (this.ended) {
2811
- (_b = (_a3 = this.cbs).onerror) === null || _b === void 0 ? void 0 : _b.call(_a3, new Error(".write() after done!"));
3183
+ this.cbs.onerror?.(new Error(".write() after done!"));
2812
3184
  return;
2813
3185
  }
2814
3186
  this.buffers.push(chunk);
@@ -2819,13 +3191,11 @@ var Parser = class {
2819
3191
  }
2820
3192
  /**
2821
3193
  * Parses the end of the buffer and clears the stack, calls onend.
2822
- *
2823
3194
  * @param chunk Optional final chunk to parse.
2824
3195
  */
2825
3196
  end(chunk) {
2826
- var _a3, _b;
2827
3197
  if (this.ended) {
2828
- (_b = (_a3 = this.cbs).onerror) === null || _b === void 0 ? void 0 : _b.call(_a3, new Error(".end() after done!"));
3198
+ this.cbs.onerror?.(new Error(".end() after done!"));
2829
3199
  return;
2830
3200
  }
2831
3201
  if (chunk)
@@ -2850,27 +3220,9 @@ var Parser = class {
2850
3220
  if (this.ended)
2851
3221
  this.tokenizer.end();
2852
3222
  }
2853
- /**
2854
- * Alias of `write`, for backwards compatibility.
2855
- *
2856
- * @param chunk Chunk to parse.
2857
- * @deprecated
2858
- */
2859
- parseChunk(chunk) {
2860
- this.write(chunk);
2861
- }
2862
- /**
2863
- * Alias of `end`, for backwards compatibility.
2864
- *
2865
- * @param chunk Optional final chunk to parse.
2866
- * @deprecated
2867
- */
2868
- done(chunk) {
2869
- this.end(chunk);
2870
- }
2871
3223
  };
2872
3224
 
2873
- // node_modules/.pnpm/domelementtype@2.3.0/node_modules/domelementtype/lib/esm/index.js
3225
+ // node_modules/.pnpm/domelementtype@3.0.0/node_modules/domelementtype/dist/index.js
2874
3226
  var ElementType;
2875
3227
  (function(ElementType2) {
2876
3228
  ElementType2["Root"] = "root";
@@ -2883,8 +3235,8 @@ var ElementType;
2883
3235
  ElementType2["CDATA"] = "cdata";
2884
3236
  ElementType2["Doctype"] = "doctype";
2885
3237
  })(ElementType || (ElementType = {}));
2886
- function isTag(elem) {
2887
- return elem.type === ElementType.Tag || elem.type === ElementType.Script || elem.type === ElementType.Style;
3238
+ function isTag(element) {
3239
+ return element.type === ElementType.Tag || element.type === ElementType.Script || element.type === ElementType.Style;
2888
3240
  }
2889
3241
  var Root = ElementType.Root;
2890
3242
  var Text = ElementType.Text;
@@ -2896,15 +3248,18 @@ var Tag = ElementType.Tag;
2896
3248
  var CDATA = ElementType.CDATA;
2897
3249
  var Doctype = ElementType.Doctype;
2898
3250
 
2899
- // node_modules/.pnpm/domhandler@5.0.3/node_modules/domhandler/lib/esm/node.js
3251
+ // node_modules/.pnpm/domhandler@6.0.1/node_modules/domhandler/dist/node.js
2900
3252
  var Node = class {
2901
- constructor() {
2902
- this.parent = null;
2903
- this.prev = null;
2904
- this.next = null;
2905
- this.startIndex = null;
2906
- this.endIndex = null;
2907
- }
3253
+ /** Parent of the node */
3254
+ parent = null;
3255
+ /** Previous sibling */
3256
+ prev = null;
3257
+ /** Next sibling */
3258
+ next = null;
3259
+ /** The start index of the node. Requires `withStartIndices` on the handler to be `true. */
3260
+ startIndex = null;
3261
+ /** The end index of the node. Requires `withEndIndices` on the handler to be `true. */
3262
+ endIndex = null;
2908
3263
  // Read-write aliases for properties
2909
3264
  /**
2910
3265
  * Same as {@link parent}.
@@ -2923,8 +3278,8 @@ var Node = class {
2923
3278
  get previousSibling() {
2924
3279
  return this.prev;
2925
3280
  }
2926
- set previousSibling(prev) {
2927
- this.prev = prev;
3281
+ set previousSibling(previous) {
3282
+ this.prev = previous;
2928
3283
  }
2929
3284
  /**
2930
3285
  * Same as {@link next}.
@@ -2938,7 +3293,6 @@ var Node = class {
2938
3293
  }
2939
3294
  /**
2940
3295
  * Clone this node, and optionally its children.
2941
- *
2942
3296
  * @param recursive Clone child nodes as well.
2943
3297
  * @returns A clone of the node.
2944
3298
  */
@@ -2947,6 +3301,7 @@ var Node = class {
2947
3301
  }
2948
3302
  };
2949
3303
  var DataNode = class extends Node {
3304
+ data;
2950
3305
  /**
2951
3306
  * @param data The content of the data node
2952
3307
  */
@@ -2966,34 +3321,36 @@ var DataNode = class extends Node {
2966
3321
  }
2967
3322
  };
2968
3323
  var Text2 = class extends DataNode {
2969
- constructor() {
2970
- super(...arguments);
2971
- this.type = ElementType.Text;
2972
- }
3324
+ type = ElementType.Text;
2973
3325
  get nodeType() {
2974
3326
  return 3;
2975
3327
  }
2976
3328
  };
2977
3329
  var Comment2 = class extends DataNode {
2978
- constructor() {
2979
- super(...arguments);
2980
- this.type = ElementType.Comment;
2981
- }
3330
+ type = ElementType.Comment;
2982
3331
  get nodeType() {
2983
3332
  return 8;
2984
3333
  }
2985
3334
  };
2986
3335
  var ProcessingInstruction = class extends DataNode {
3336
+ type = ElementType.Directive;
3337
+ name;
2987
3338
  constructor(name, data) {
2988
3339
  super(data);
2989
3340
  this.name = name;
2990
- this.type = ElementType.Directive;
2991
3341
  }
2992
3342
  get nodeType() {
2993
3343
  return 1;
2994
3344
  }
3345
+ /** If this is a doctype, the document type name (parse5 only). */
3346
+ "x-name";
3347
+ /** If this is a doctype, the document type public identifier (parse5 only). */
3348
+ "x-publicId";
3349
+ /** If this is a doctype, the document type system identifier (parse5 only). */
3350
+ "x-systemId";
2995
3351
  };
2996
3352
  var NodeWithChildren = class extends Node {
3353
+ children;
2997
3354
  /**
2998
3355
  * @param children Children of the node. Only certain node types can have children.
2999
3356
  */
@@ -3004,8 +3361,7 @@ var NodeWithChildren = class extends Node {
3004
3361
  // Aliases
3005
3362
  /** First child of the node. */
3006
3363
  get firstChild() {
3007
- var _a3;
3008
- return (_a3 = this.children[0]) !== null && _a3 !== void 0 ? _a3 : null;
3364
+ return this.children[0] ?? null;
3009
3365
  }
3010
3366
  /** Last child of the node. */
3011
3367
  get lastChild() {
@@ -3023,28 +3379,26 @@ var NodeWithChildren = class extends Node {
3023
3379
  }
3024
3380
  };
3025
3381
  var CDATA2 = class extends NodeWithChildren {
3026
- constructor() {
3027
- super(...arguments);
3028
- this.type = ElementType.CDATA;
3029
- }
3382
+ type = ElementType.CDATA;
3030
3383
  get nodeType() {
3031
3384
  return 4;
3032
3385
  }
3033
3386
  };
3034
3387
  var Document = class extends NodeWithChildren {
3035
- constructor() {
3036
- super(...arguments);
3037
- this.type = ElementType.Root;
3038
- }
3388
+ type = ElementType.Root;
3039
3389
  get nodeType() {
3040
3390
  return 9;
3041
3391
  }
3042
3392
  };
3043
3393
  var Element = class extends NodeWithChildren {
3394
+ name;
3395
+ attribs;
3396
+ type;
3044
3397
  /**
3045
3398
  * @param name Name of the tag, eg. `div`, `span`.
3046
3399
  * @param attribs Object mapping attribute names to attribute values.
3047
3400
  * @param children Children of the node.
3401
+ * @param type Node type used for the new node instance.
3048
3402
  */
3049
3403
  constructor(name, attribs, children = [], type = name === "script" ? ElementType.Script : name === "style" ? ElementType.Style : ElementType.Tag) {
3050
3404
  super(children);
@@ -3067,16 +3421,19 @@ var Element = class extends NodeWithChildren {
3067
3421
  this.name = name;
3068
3422
  }
3069
3423
  get attributes() {
3070
- return Object.keys(this.attribs).map((name) => {
3071
- var _a3, _b;
3072
- return {
3073
- name,
3074
- value: this.attribs[name],
3075
- namespace: (_a3 = this["x-attribsNamespace"]) === null || _a3 === void 0 ? void 0 : _a3[name],
3076
- prefix: (_b = this["x-attribsPrefix"]) === null || _b === void 0 ? void 0 : _b[name]
3077
- };
3078
- });
3079
- }
3424
+ return Object.keys(this.attribs).map((name) => ({
3425
+ name,
3426
+ value: this.attribs[name],
3427
+ namespace: this["x-attribsNamespace"]?.[name],
3428
+ prefix: this["x-attribsPrefix"]?.[name]
3429
+ }));
3430
+ }
3431
+ /** Element namespace (parse5 only). */
3432
+ namespace;
3433
+ /** Element attribute namespaces (parse5 only). */
3434
+ "x-attribsNamespace";
3435
+ /** Element attribute namespace-related prefixes (parse5 only). */
3436
+ "x-attribsPrefix";
3080
3437
  };
3081
3438
  function isTag2(node) {
3082
3439
  return isTag(node);
@@ -3105,7 +3462,9 @@ function cloneNode(node, recursive = false) {
3105
3462
  } else if (isTag2(node)) {
3106
3463
  const children = recursive ? cloneChildren(node.children) : [];
3107
3464
  const clone = new Element(node.name, { ...node.attribs }, children);
3108
- children.forEach((child) => child.parent = clone);
3465
+ for (const child of children) {
3466
+ child.parent = clone;
3467
+ }
3109
3468
  if (node.namespace != null) {
3110
3469
  clone.namespace = node.namespace;
3111
3470
  }
@@ -3119,12 +3478,16 @@ function cloneNode(node, recursive = false) {
3119
3478
  } else if (isCDATA(node)) {
3120
3479
  const children = recursive ? cloneChildren(node.children) : [];
3121
3480
  const clone = new CDATA2(children);
3122
- children.forEach((child) => child.parent = clone);
3481
+ for (const child of children) {
3482
+ child.parent = clone;
3483
+ }
3123
3484
  result = clone;
3124
3485
  } else if (isDocument(node)) {
3125
3486
  const children = recursive ? cloneChildren(node.children) : [];
3126
3487
  const clone = new Document(children);
3127
- children.forEach((child) => child.parent = clone);
3488
+ for (const child of children) {
3489
+ child.parent = clone;
3490
+ }
3128
3491
  if (node["x-mode"]) {
3129
3492
  clone["x-mode"] = node["x-mode"];
3130
3493
  }
@@ -3149,43 +3512,55 @@ function cloneNode(node, recursive = false) {
3149
3512
  }
3150
3513
  function cloneChildren(childs) {
3151
3514
  const children = childs.map((child) => cloneNode(child, true));
3152
- for (let i = 1; i < children.length; i++) {
3153
- children[i].prev = children[i - 1];
3154
- children[i - 1].next = children[i];
3515
+ for (let index = 1; index < children.length; index++) {
3516
+ children[index].prev = children[index - 1];
3517
+ children[index - 1].next = children[index];
3155
3518
  }
3156
3519
  return children;
3157
3520
  }
3158
3521
 
3159
- // node_modules/.pnpm/domhandler@5.0.3/node_modules/domhandler/lib/esm/index.js
3160
- var defaultOpts = {
3522
+ // node_modules/.pnpm/domhandler@6.0.1/node_modules/domhandler/dist/index.js
3523
+ var defaultOptions = {
3161
3524
  withStartIndices: false,
3162
3525
  withEndIndices: false,
3163
3526
  xmlMode: false
3164
3527
  };
3165
3528
  var DomHandler = class {
3529
+ /** The elements of the DOM */
3530
+ dom = [];
3531
+ /** The root element for the DOM */
3532
+ root = new Document(this.dom);
3533
+ /** Called once parsing has completed. */
3534
+ callback;
3535
+ /** Settings for the handler. */
3536
+ options;
3537
+ /** Callback whenever a tag is closed. */
3538
+ elementCB;
3539
+ /** Indicated whether parsing has been completed. */
3540
+ done = false;
3541
+ /** Stack of open tags. */
3542
+ tagStack = [this.root];
3543
+ /** A data node that is still being written to. */
3544
+ lastNode = null;
3545
+ /** Reference to the parser instance. Used for location information. */
3546
+ parser = null;
3166
3547
  /**
3167
3548
  * @param callback Called once parsing has completed.
3168
3549
  * @param options Settings for the handler.
3169
3550
  * @param elementCB Callback whenever a tag is closed.
3170
3551
  */
3171
3552
  constructor(callback, options, elementCB) {
3172
- this.dom = [];
3173
- this.root = new Document(this.dom);
3174
- this.done = false;
3175
- this.tagStack = [this.root];
3176
- this.lastNode = null;
3177
- this.parser = null;
3178
3553
  if (typeof options === "function") {
3179
3554
  elementCB = options;
3180
- options = defaultOpts;
3555
+ options = defaultOptions;
3181
3556
  }
3182
3557
  if (typeof callback === "object") {
3183
3558
  options = callback;
3184
3559
  callback = void 0;
3185
3560
  }
3186
- this.callback = callback !== null && callback !== void 0 ? callback : null;
3187
- this.options = options !== null && options !== void 0 ? options : defaultOpts;
3188
- this.elementCB = elementCB !== null && elementCB !== void 0 ? elementCB : null;
3561
+ this.callback = callback ?? null;
3562
+ this.options = options ?? defaultOptions;
3563
+ this.elementCB = elementCB ?? null;
3189
3564
  }
3190
3565
  onparserinit(parser) {
3191
3566
  this.parser = parser;
@@ -3212,12 +3587,12 @@ var DomHandler = class {
3212
3587
  }
3213
3588
  onclosetag() {
3214
3589
  this.lastNode = null;
3215
- const elem = this.tagStack.pop();
3216
- if (this.options.withEndIndices) {
3217
- elem.endIndex = this.parser.endIndex;
3590
+ const element = this.tagStack.pop();
3591
+ if (this.options.withEndIndices && this.parser) {
3592
+ element.endIndex = this.parser.endIndex;
3218
3593
  }
3219
3594
  if (this.elementCB)
3220
- this.elementCB(elem);
3595
+ this.elementCB(element);
3221
3596
  }
3222
3597
  onopentag(name, attribs) {
3223
3598
  const type = this.options.xmlMode ? ElementType.Tag : void 0;
@@ -3229,7 +3604,7 @@ var DomHandler = class {
3229
3604
  const { lastNode } = this;
3230
3605
  if (lastNode && lastNode.type === ElementType.Text) {
3231
3606
  lastNode.data += data;
3232
- if (this.options.withEndIndices) {
3607
+ if (this.options.withEndIndices && this.parser) {
3233
3608
  lastNode.endIndex = this.parser.endIndex;
3234
3609
  }
3235
3610
  } else {
@@ -3274,10 +3649,10 @@ var DomHandler = class {
3274
3649
  addNode(node) {
3275
3650
  const parent = this.tagStack[this.tagStack.length - 1];
3276
3651
  const previousSibling = parent.children[parent.children.length - 1];
3277
- if (this.options.withStartIndices) {
3652
+ if (this.options.withStartIndices && this.parser) {
3278
3653
  node.startIndex = this.parser.startIndex;
3279
3654
  }
3280
- if (this.options.withEndIndices) {
3655
+ if (this.options.withEndIndices && this.parser) {
3281
3656
  node.endIndex = this.parser.endIndex;
3282
3657
  }
3283
3658
  parent.children.push(node);
@@ -3290,616 +3665,7 @@ var DomHandler = class {
3290
3665
  }
3291
3666
  };
3292
3667
 
3293
- // node_modules/.pnpm/entities@4.5.0/node_modules/entities/lib/esm/generated/decode-data-html.js
3294
- var decode_data_html_default = new Uint16Array(
3295
- // prettier-ignore
3296
- '\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))
3297
- );
3298
-
3299
- // node_modules/.pnpm/entities@4.5.0/node_modules/entities/lib/esm/generated/decode-data-xml.js
3300
- var decode_data_xml_default = new Uint16Array(
3301
- // prettier-ignore
3302
- "\u0200aglq \x1B\u026D\0\0p;\u4026os;\u4027t;\u403Et;\u403Cuot;\u4022".split("").map((c) => c.charCodeAt(0))
3303
- );
3304
-
3305
- // node_modules/.pnpm/entities@4.5.0/node_modules/entities/lib/esm/decode_codepoint.js
3306
- var _a2;
3307
- var decodeMap2 = /* @__PURE__ */ new Map([
3308
- [0, 65533],
3309
- // C1 Unicode control character reference replacements
3310
- [128, 8364],
3311
- [130, 8218],
3312
- [131, 402],
3313
- [132, 8222],
3314
- [133, 8230],
3315
- [134, 8224],
3316
- [135, 8225],
3317
- [136, 710],
3318
- [137, 8240],
3319
- [138, 352],
3320
- [139, 8249],
3321
- [140, 338],
3322
- [142, 381],
3323
- [145, 8216],
3324
- [146, 8217],
3325
- [147, 8220],
3326
- [148, 8221],
3327
- [149, 8226],
3328
- [150, 8211],
3329
- [151, 8212],
3330
- [152, 732],
3331
- [153, 8482],
3332
- [154, 353],
3333
- [155, 8250],
3334
- [156, 339],
3335
- [158, 382],
3336
- [159, 376]
3337
- ]);
3338
- var fromCodePoint2 = (
3339
- // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition, node/no-unsupported-features/es-builtins
3340
- (_a2 = String.fromCodePoint) !== null && _a2 !== void 0 ? _a2 : function(codePoint) {
3341
- let output = "";
3342
- if (codePoint > 65535) {
3343
- codePoint -= 65536;
3344
- output += String.fromCharCode(codePoint >>> 10 & 1023 | 55296);
3345
- codePoint = 56320 | codePoint & 1023;
3346
- }
3347
- output += String.fromCharCode(codePoint);
3348
- return output;
3349
- }
3350
- );
3351
- function replaceCodePoint2(codePoint) {
3352
- var _a3;
3353
- if (codePoint >= 55296 && codePoint <= 57343 || codePoint > 1114111) {
3354
- return 65533;
3355
- }
3356
- return (_a3 = decodeMap2.get(codePoint)) !== null && _a3 !== void 0 ? _a3 : codePoint;
3357
- }
3358
-
3359
- // node_modules/.pnpm/entities@4.5.0/node_modules/entities/lib/esm/decode.js
3360
- var CharCodes3;
3361
- (function(CharCodes4) {
3362
- CharCodes4[CharCodes4["NUM"] = 35] = "NUM";
3363
- CharCodes4[CharCodes4["SEMI"] = 59] = "SEMI";
3364
- CharCodes4[CharCodes4["EQUALS"] = 61] = "EQUALS";
3365
- CharCodes4[CharCodes4["ZERO"] = 48] = "ZERO";
3366
- CharCodes4[CharCodes4["NINE"] = 57] = "NINE";
3367
- CharCodes4[CharCodes4["LOWER_A"] = 97] = "LOWER_A";
3368
- CharCodes4[CharCodes4["LOWER_F"] = 102] = "LOWER_F";
3369
- CharCodes4[CharCodes4["LOWER_X"] = 120] = "LOWER_X";
3370
- CharCodes4[CharCodes4["LOWER_Z"] = 122] = "LOWER_Z";
3371
- CharCodes4[CharCodes4["UPPER_A"] = 65] = "UPPER_A";
3372
- CharCodes4[CharCodes4["UPPER_F"] = 70] = "UPPER_F";
3373
- CharCodes4[CharCodes4["UPPER_Z"] = 90] = "UPPER_Z";
3374
- })(CharCodes3 || (CharCodes3 = {}));
3375
- var TO_LOWER_BIT2 = 32;
3376
- var BinTrieFlags2;
3377
- (function(BinTrieFlags3) {
3378
- BinTrieFlags3[BinTrieFlags3["VALUE_LENGTH"] = 49152] = "VALUE_LENGTH";
3379
- BinTrieFlags3[BinTrieFlags3["BRANCH_LENGTH"] = 16256] = "BRANCH_LENGTH";
3380
- BinTrieFlags3[BinTrieFlags3["JUMP_TABLE"] = 127] = "JUMP_TABLE";
3381
- })(BinTrieFlags2 || (BinTrieFlags2 = {}));
3382
- function isNumber2(code) {
3383
- return code >= CharCodes3.ZERO && code <= CharCodes3.NINE;
3384
- }
3385
- function isHexadecimalCharacter2(code) {
3386
- return code >= CharCodes3.UPPER_A && code <= CharCodes3.UPPER_F || code >= CharCodes3.LOWER_A && code <= CharCodes3.LOWER_F;
3387
- }
3388
- function isAsciiAlphaNumeric2(code) {
3389
- return code >= CharCodes3.UPPER_A && code <= CharCodes3.UPPER_Z || code >= CharCodes3.LOWER_A && code <= CharCodes3.LOWER_Z || isNumber2(code);
3390
- }
3391
- function isEntityInAttributeInvalidEnd2(code) {
3392
- return code === CharCodes3.EQUALS || isAsciiAlphaNumeric2(code);
3393
- }
3394
- var EntityDecoderState2;
3395
- (function(EntityDecoderState3) {
3396
- EntityDecoderState3[EntityDecoderState3["EntityStart"] = 0] = "EntityStart";
3397
- EntityDecoderState3[EntityDecoderState3["NumericStart"] = 1] = "NumericStart";
3398
- EntityDecoderState3[EntityDecoderState3["NumericDecimal"] = 2] = "NumericDecimal";
3399
- EntityDecoderState3[EntityDecoderState3["NumericHex"] = 3] = "NumericHex";
3400
- EntityDecoderState3[EntityDecoderState3["NamedEntity"] = 4] = "NamedEntity";
3401
- })(EntityDecoderState2 || (EntityDecoderState2 = {}));
3402
- var DecodingMode2;
3403
- (function(DecodingMode3) {
3404
- DecodingMode3[DecodingMode3["Legacy"] = 0] = "Legacy";
3405
- DecodingMode3[DecodingMode3["Strict"] = 1] = "Strict";
3406
- DecodingMode3[DecodingMode3["Attribute"] = 2] = "Attribute";
3407
- })(DecodingMode2 || (DecodingMode2 = {}));
3408
- var EntityDecoder2 = class {
3409
- constructor(decodeTree, emitCodePoint, errors) {
3410
- this.decodeTree = decodeTree;
3411
- this.emitCodePoint = emitCodePoint;
3412
- this.errors = errors;
3413
- this.state = EntityDecoderState2.EntityStart;
3414
- this.consumed = 1;
3415
- this.result = 0;
3416
- this.treeIndex = 0;
3417
- this.excess = 1;
3418
- this.decodeMode = DecodingMode2.Strict;
3419
- }
3420
- /** Resets the instance to make it reusable. */
3421
- startEntity(decodeMode) {
3422
- this.decodeMode = decodeMode;
3423
- this.state = EntityDecoderState2.EntityStart;
3424
- this.result = 0;
3425
- this.treeIndex = 0;
3426
- this.excess = 1;
3427
- this.consumed = 1;
3428
- }
3429
- /**
3430
- * Write an entity to the decoder. This can be called multiple times with partial entities.
3431
- * If the entity is incomplete, the decoder will return -1.
3432
- *
3433
- * Mirrors the implementation of `getDecoder`, but with the ability to stop decoding if the
3434
- * entity is incomplete, and resume when the next string is written.
3435
- *
3436
- * @param string The string containing the entity (or a continuation of the entity).
3437
- * @param offset The offset at which the entity begins. Should be 0 if this is not the first call.
3438
- * @returns The number of characters that were consumed, or -1 if the entity is incomplete.
3439
- */
3440
- write(str, offset) {
3441
- switch (this.state) {
3442
- case EntityDecoderState2.EntityStart: {
3443
- if (str.charCodeAt(offset) === CharCodes3.NUM) {
3444
- this.state = EntityDecoderState2.NumericStart;
3445
- this.consumed += 1;
3446
- return this.stateNumericStart(str, offset + 1);
3447
- }
3448
- this.state = EntityDecoderState2.NamedEntity;
3449
- return this.stateNamedEntity(str, offset);
3450
- }
3451
- case EntityDecoderState2.NumericStart: {
3452
- return this.stateNumericStart(str, offset);
3453
- }
3454
- case EntityDecoderState2.NumericDecimal: {
3455
- return this.stateNumericDecimal(str, offset);
3456
- }
3457
- case EntityDecoderState2.NumericHex: {
3458
- return this.stateNumericHex(str, offset);
3459
- }
3460
- case EntityDecoderState2.NamedEntity: {
3461
- return this.stateNamedEntity(str, offset);
3462
- }
3463
- }
3464
- }
3465
- /**
3466
- * Switches between the numeric decimal and hexadecimal states.
3467
- *
3468
- * Equivalent to the `Numeric character reference state` in the HTML spec.
3469
- *
3470
- * @param str The string containing the entity (or a continuation of the entity).
3471
- * @param offset The current offset.
3472
- * @returns The number of characters that were consumed, or -1 if the entity is incomplete.
3473
- */
3474
- stateNumericStart(str, offset) {
3475
- if (offset >= str.length) {
3476
- return -1;
3477
- }
3478
- if ((str.charCodeAt(offset) | TO_LOWER_BIT2) === CharCodes3.LOWER_X) {
3479
- this.state = EntityDecoderState2.NumericHex;
3480
- this.consumed += 1;
3481
- return this.stateNumericHex(str, offset + 1);
3482
- }
3483
- this.state = EntityDecoderState2.NumericDecimal;
3484
- return this.stateNumericDecimal(str, offset);
3485
- }
3486
- addToNumericResult(str, start, end, base) {
3487
- if (start !== end) {
3488
- const digitCount = end - start;
3489
- this.result = this.result * Math.pow(base, digitCount) + parseInt(str.substr(start, digitCount), base);
3490
- this.consumed += digitCount;
3491
- }
3492
- }
3493
- /**
3494
- * Parses a hexadecimal numeric entity.
3495
- *
3496
- * Equivalent to the `Hexademical character reference state` in the HTML spec.
3497
- *
3498
- * @param str The string containing the entity (or a continuation of the entity).
3499
- * @param offset The current offset.
3500
- * @returns The number of characters that were consumed, or -1 if the entity is incomplete.
3501
- */
3502
- stateNumericHex(str, offset) {
3503
- const startIdx = offset;
3504
- while (offset < str.length) {
3505
- const char = str.charCodeAt(offset);
3506
- if (isNumber2(char) || isHexadecimalCharacter2(char)) {
3507
- offset += 1;
3508
- } else {
3509
- this.addToNumericResult(str, startIdx, offset, 16);
3510
- return this.emitNumericEntity(char, 3);
3511
- }
3512
- }
3513
- this.addToNumericResult(str, startIdx, offset, 16);
3514
- return -1;
3515
- }
3516
- /**
3517
- * Parses a decimal numeric entity.
3518
- *
3519
- * Equivalent to the `Decimal character reference state` in the HTML spec.
3520
- *
3521
- * @param str The string containing the entity (or a continuation of the entity).
3522
- * @param offset The current offset.
3523
- * @returns The number of characters that were consumed, or -1 if the entity is incomplete.
3524
- */
3525
- stateNumericDecimal(str, offset) {
3526
- const startIdx = offset;
3527
- while (offset < str.length) {
3528
- const char = str.charCodeAt(offset);
3529
- if (isNumber2(char)) {
3530
- offset += 1;
3531
- } else {
3532
- this.addToNumericResult(str, startIdx, offset, 10);
3533
- return this.emitNumericEntity(char, 2);
3534
- }
3535
- }
3536
- this.addToNumericResult(str, startIdx, offset, 10);
3537
- return -1;
3538
- }
3539
- /**
3540
- * Validate and emit a numeric entity.
3541
- *
3542
- * Implements the logic from the `Hexademical character reference start
3543
- * state` and `Numeric character reference end state` in the HTML spec.
3544
- *
3545
- * @param lastCp The last code point of the entity. Used to see if the
3546
- * entity was terminated with a semicolon.
3547
- * @param expectedLength The minimum number of characters that should be
3548
- * consumed. Used to validate that at least one digit
3549
- * was consumed.
3550
- * @returns The number of characters that were consumed.
3551
- */
3552
- emitNumericEntity(lastCp, expectedLength) {
3553
- var _a3;
3554
- if (this.consumed <= expectedLength) {
3555
- (_a3 = this.errors) === null || _a3 === void 0 ? void 0 : _a3.absenceOfDigitsInNumericCharacterReference(this.consumed);
3556
- return 0;
3557
- }
3558
- if (lastCp === CharCodes3.SEMI) {
3559
- this.consumed += 1;
3560
- } else if (this.decodeMode === DecodingMode2.Strict) {
3561
- return 0;
3562
- }
3563
- this.emitCodePoint(replaceCodePoint2(this.result), this.consumed);
3564
- if (this.errors) {
3565
- if (lastCp !== CharCodes3.SEMI) {
3566
- this.errors.missingSemicolonAfterCharacterReference();
3567
- }
3568
- this.errors.validateNumericCharacterReference(this.result);
3569
- }
3570
- return this.consumed;
3571
- }
3572
- /**
3573
- * Parses a named entity.
3574
- *
3575
- * Equivalent to the `Named character reference state` in the HTML spec.
3576
- *
3577
- * @param str The string containing the entity (or a continuation of the entity).
3578
- * @param offset The current offset.
3579
- * @returns The number of characters that were consumed, or -1 if the entity is incomplete.
3580
- */
3581
- stateNamedEntity(str, offset) {
3582
- const { decodeTree } = this;
3583
- let current = decodeTree[this.treeIndex];
3584
- let valueLength = (current & BinTrieFlags2.VALUE_LENGTH) >> 14;
3585
- for (; offset < str.length; offset++, this.excess++) {
3586
- const char = str.charCodeAt(offset);
3587
- this.treeIndex = determineBranch2(decodeTree, current, this.treeIndex + Math.max(1, valueLength), char);
3588
- if (this.treeIndex < 0) {
3589
- return this.result === 0 || // If we are parsing an attribute
3590
- this.decodeMode === DecodingMode2.Attribute && // We shouldn't have consumed any characters after the entity,
3591
- (valueLength === 0 || // And there should be no invalid characters.
3592
- isEntityInAttributeInvalidEnd2(char)) ? 0 : this.emitNotTerminatedNamedEntity();
3593
- }
3594
- current = decodeTree[this.treeIndex];
3595
- valueLength = (current & BinTrieFlags2.VALUE_LENGTH) >> 14;
3596
- if (valueLength !== 0) {
3597
- if (char === CharCodes3.SEMI) {
3598
- return this.emitNamedEntityData(this.treeIndex, valueLength, this.consumed + this.excess);
3599
- }
3600
- if (this.decodeMode !== DecodingMode2.Strict) {
3601
- this.result = this.treeIndex;
3602
- this.consumed += this.excess;
3603
- this.excess = 0;
3604
- }
3605
- }
3606
- }
3607
- return -1;
3608
- }
3609
- /**
3610
- * Emit a named entity that was not terminated with a semicolon.
3611
- *
3612
- * @returns The number of characters consumed.
3613
- */
3614
- emitNotTerminatedNamedEntity() {
3615
- var _a3;
3616
- const { result, decodeTree } = this;
3617
- const valueLength = (decodeTree[result] & BinTrieFlags2.VALUE_LENGTH) >> 14;
3618
- this.emitNamedEntityData(result, valueLength, this.consumed);
3619
- (_a3 = this.errors) === null || _a3 === void 0 ? void 0 : _a3.missingSemicolonAfterCharacterReference();
3620
- return this.consumed;
3621
- }
3622
- /**
3623
- * Emit a named entity.
3624
- *
3625
- * @param result The index of the entity in the decode tree.
3626
- * @param valueLength The number of bytes in the entity.
3627
- * @param consumed The number of characters consumed.
3628
- *
3629
- * @returns The number of characters consumed.
3630
- */
3631
- emitNamedEntityData(result, valueLength, consumed) {
3632
- const { decodeTree } = this;
3633
- this.emitCodePoint(valueLength === 1 ? decodeTree[result] & ~BinTrieFlags2.VALUE_LENGTH : decodeTree[result + 1], consumed);
3634
- if (valueLength === 3) {
3635
- this.emitCodePoint(decodeTree[result + 2], consumed);
3636
- }
3637
- return consumed;
3638
- }
3639
- /**
3640
- * Signal to the parser that the end of the input was reached.
3641
- *
3642
- * Remaining data will be emitted and relevant errors will be produced.
3643
- *
3644
- * @returns The number of characters consumed.
3645
- */
3646
- end() {
3647
- var _a3;
3648
- switch (this.state) {
3649
- case EntityDecoderState2.NamedEntity: {
3650
- return this.result !== 0 && (this.decodeMode !== DecodingMode2.Attribute || this.result === this.treeIndex) ? this.emitNotTerminatedNamedEntity() : 0;
3651
- }
3652
- // Otherwise, emit a numeric entity if we have one.
3653
- case EntityDecoderState2.NumericDecimal: {
3654
- return this.emitNumericEntity(0, 2);
3655
- }
3656
- case EntityDecoderState2.NumericHex: {
3657
- return this.emitNumericEntity(0, 3);
3658
- }
3659
- case EntityDecoderState2.NumericStart: {
3660
- (_a3 = this.errors) === null || _a3 === void 0 ? void 0 : _a3.absenceOfDigitsInNumericCharacterReference(this.consumed);
3661
- return 0;
3662
- }
3663
- case EntityDecoderState2.EntityStart: {
3664
- return 0;
3665
- }
3666
- }
3667
- }
3668
- };
3669
- function getDecoder(decodeTree) {
3670
- let ret = "";
3671
- const decoder = new EntityDecoder2(decodeTree, (str) => ret += fromCodePoint2(str));
3672
- return function decodeWithTrie(str, decodeMode) {
3673
- let lastIndex = 0;
3674
- let offset = 0;
3675
- while ((offset = str.indexOf("&", offset)) >= 0) {
3676
- ret += str.slice(lastIndex, offset);
3677
- decoder.startEntity(decodeMode);
3678
- const len = decoder.write(
3679
- str,
3680
- // Skip the "&"
3681
- offset + 1
3682
- );
3683
- if (len < 0) {
3684
- lastIndex = offset + decoder.end();
3685
- break;
3686
- }
3687
- lastIndex = offset + len;
3688
- offset = len === 0 ? lastIndex + 1 : lastIndex;
3689
- }
3690
- const result = ret + str.slice(lastIndex);
3691
- ret = "";
3692
- return result;
3693
- };
3694
- }
3695
- function determineBranch2(decodeTree, current, nodeIdx, char) {
3696
- const branchCount = (current & BinTrieFlags2.BRANCH_LENGTH) >> 7;
3697
- const jumpOffset = current & BinTrieFlags2.JUMP_TABLE;
3698
- if (branchCount === 0) {
3699
- return jumpOffset !== 0 && char === jumpOffset ? nodeIdx : -1;
3700
- }
3701
- if (jumpOffset) {
3702
- const value = char - jumpOffset;
3703
- return value < 0 || value >= branchCount ? -1 : decodeTree[nodeIdx + value] - 1;
3704
- }
3705
- let lo = nodeIdx;
3706
- let hi = lo + branchCount - 1;
3707
- while (lo <= hi) {
3708
- const mid = lo + hi >>> 1;
3709
- const midVal = decodeTree[mid];
3710
- if (midVal < char) {
3711
- lo = mid + 1;
3712
- } else if (midVal > char) {
3713
- hi = mid - 1;
3714
- } else {
3715
- return decodeTree[mid + branchCount];
3716
- }
3717
- }
3718
- return -1;
3719
- }
3720
- var htmlDecoder = getDecoder(decode_data_html_default);
3721
- var xmlDecoder = getDecoder(decode_data_xml_default);
3722
-
3723
- // node_modules/.pnpm/entities@4.5.0/node_modules/entities/lib/esm/generated/encode-html.js
3724
- function restoreDiff(arr) {
3725
- for (let i = 1; i < arr.length; i++) {
3726
- arr[i][0] += arr[i - 1][0] + 1;
3727
- }
3728
- return arr;
3729
- }
3730
- 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;"]]));
3731
-
3732
- // node_modules/.pnpm/entities@4.5.0/node_modules/entities/lib/esm/escape.js
3733
- var xmlCodeMap = /* @__PURE__ */ new Map([
3734
- [34, "&quot;"],
3735
- [38, "&amp;"],
3736
- [39, "&apos;"],
3737
- [60, "&lt;"],
3738
- [62, "&gt;"]
3739
- ]);
3740
- var getCodePoint = (
3741
- // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
3742
- String.prototype.codePointAt != null ? (str, index) => str.codePointAt(index) : (
3743
- // http://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae
3744
- (c, index) => (c.charCodeAt(index) & 64512) === 55296 ? (c.charCodeAt(index) - 55296) * 1024 + c.charCodeAt(index + 1) - 56320 + 65536 : c.charCodeAt(index)
3745
- )
3746
- );
3747
- function getEscaper(regex, map) {
3748
- return function escape2(data) {
3749
- let match;
3750
- let lastIdx = 0;
3751
- let result = "";
3752
- while (match = regex.exec(data)) {
3753
- if (lastIdx !== match.index) {
3754
- result += data.substring(lastIdx, match.index);
3755
- }
3756
- result += map.get(match[0].charCodeAt(0));
3757
- lastIdx = match.index + 1;
3758
- }
3759
- return result + data.substring(lastIdx);
3760
- };
3761
- }
3762
- var escapeUTF8 = getEscaper(/[&<>'"]/g, xmlCodeMap);
3763
- var escapeAttribute = getEscaper(/["&\u00A0]/g, /* @__PURE__ */ new Map([
3764
- [34, "&quot;"],
3765
- [38, "&amp;"],
3766
- [160, "&nbsp;"]
3767
- ]));
3768
- var escapeText = getEscaper(/[&<>\u00A0]/g, /* @__PURE__ */ new Map([
3769
- [38, "&amp;"],
3770
- [60, "&lt;"],
3771
- [62, "&gt;"],
3772
- [160, "&nbsp;"]
3773
- ]));
3774
-
3775
- // node_modules/.pnpm/entities@4.5.0/node_modules/entities/lib/esm/index.js
3776
- var EntityLevel;
3777
- (function(EntityLevel2) {
3778
- EntityLevel2[EntityLevel2["XML"] = 0] = "XML";
3779
- EntityLevel2[EntityLevel2["HTML"] = 1] = "HTML";
3780
- })(EntityLevel || (EntityLevel = {}));
3781
- var EncodingMode;
3782
- (function(EncodingMode2) {
3783
- EncodingMode2[EncodingMode2["UTF8"] = 0] = "UTF8";
3784
- EncodingMode2[EncodingMode2["ASCII"] = 1] = "ASCII";
3785
- EncodingMode2[EncodingMode2["Extensive"] = 2] = "Extensive";
3786
- EncodingMode2[EncodingMode2["Attribute"] = 3] = "Attribute";
3787
- EncodingMode2[EncodingMode2["Text"] = 4] = "Text";
3788
- })(EncodingMode || (EncodingMode = {}));
3789
-
3790
- // node_modules/.pnpm/dom-serializer@2.0.0/node_modules/dom-serializer/lib/esm/foreignNames.js
3791
- var elementNames = new Map([
3792
- "altGlyph",
3793
- "altGlyphDef",
3794
- "altGlyphItem",
3795
- "animateColor",
3796
- "animateMotion",
3797
- "animateTransform",
3798
- "clipPath",
3799
- "feBlend",
3800
- "feColorMatrix",
3801
- "feComponentTransfer",
3802
- "feComposite",
3803
- "feConvolveMatrix",
3804
- "feDiffuseLighting",
3805
- "feDisplacementMap",
3806
- "feDistantLight",
3807
- "feDropShadow",
3808
- "feFlood",
3809
- "feFuncA",
3810
- "feFuncB",
3811
- "feFuncG",
3812
- "feFuncR",
3813
- "feGaussianBlur",
3814
- "feImage",
3815
- "feMerge",
3816
- "feMergeNode",
3817
- "feMorphology",
3818
- "feOffset",
3819
- "fePointLight",
3820
- "feSpecularLighting",
3821
- "feSpotLight",
3822
- "feTile",
3823
- "feTurbulence",
3824
- "foreignObject",
3825
- "glyphRef",
3826
- "linearGradient",
3827
- "radialGradient",
3828
- "textPath"
3829
- ].map((val) => [val.toLowerCase(), val]));
3830
- var attributeNames = new Map([
3831
- "definitionURL",
3832
- "attributeName",
3833
- "attributeType",
3834
- "baseFrequency",
3835
- "baseProfile",
3836
- "calcMode",
3837
- "clipPathUnits",
3838
- "diffuseConstant",
3839
- "edgeMode",
3840
- "filterUnits",
3841
- "glyphRef",
3842
- "gradientTransform",
3843
- "gradientUnits",
3844
- "kernelMatrix",
3845
- "kernelUnitLength",
3846
- "keyPoints",
3847
- "keySplines",
3848
- "keyTimes",
3849
- "lengthAdjust",
3850
- "limitingConeAngle",
3851
- "markerHeight",
3852
- "markerUnits",
3853
- "markerWidth",
3854
- "maskContentUnits",
3855
- "maskUnits",
3856
- "numOctaves",
3857
- "pathLength",
3858
- "patternContentUnits",
3859
- "patternTransform",
3860
- "patternUnits",
3861
- "pointsAtX",
3862
- "pointsAtY",
3863
- "pointsAtZ",
3864
- "preserveAlpha",
3865
- "preserveAspectRatio",
3866
- "primitiveUnits",
3867
- "refX",
3868
- "refY",
3869
- "repeatCount",
3870
- "repeatDur",
3871
- "requiredExtensions",
3872
- "requiredFeatures",
3873
- "specularConstant",
3874
- "specularExponent",
3875
- "spreadMethod",
3876
- "startOffset",
3877
- "stdDeviation",
3878
- "stitchTiles",
3879
- "surfaceScale",
3880
- "systemLanguage",
3881
- "tableValues",
3882
- "targetX",
3883
- "targetY",
3884
- "textLength",
3885
- "viewBox",
3886
- "viewTarget",
3887
- "xChannelSelector",
3888
- "yChannelSelector",
3889
- "zoomAndPan"
3890
- ].map((val) => [val.toLowerCase(), val]));
3891
-
3892
- // node_modules/.pnpm/domutils@3.2.2/node_modules/domutils/lib/esm/helpers.js
3893
- var DocumentPosition;
3894
- (function(DocumentPosition2) {
3895
- DocumentPosition2[DocumentPosition2["DISCONNECTED"] = 1] = "DISCONNECTED";
3896
- DocumentPosition2[DocumentPosition2["PRECEDING"] = 2] = "PRECEDING";
3897
- DocumentPosition2[DocumentPosition2["FOLLOWING"] = 4] = "FOLLOWING";
3898
- DocumentPosition2[DocumentPosition2["CONTAINS"] = 8] = "CONTAINS";
3899
- DocumentPosition2[DocumentPosition2["CONTAINED_BY"] = 16] = "CONTAINED_BY";
3900
- })(DocumentPosition || (DocumentPosition = {}));
3901
-
3902
- // node_modules/.pnpm/htmlparser2@10.1.0/node_modules/htmlparser2/dist/esm/index.js
3668
+ // node_modules/.pnpm/htmlparser2@12.0.0/node_modules/htmlparser2/dist/index.js
3903
3669
  function parseDocument(data, options) {
3904
3670
  const handler = new DomHandler(void 0, options);
3905
3671
  new Parser(handler, options).end(data);
@@ -4143,17 +3909,35 @@ function loadInlineSources(story, sources, opts, diagnostics) {
4143
3909
  }
4144
3910
  const content = typeof source.content === "string" ? source.content : source.content.toString("utf-8");
4145
3911
  const ext = normalizedFileExt(source.filename);
4146
- if (ext === "tw" || ext === "twee" || ext === "tw2" || ext === "twee2" || !ext) {
4147
- const twee2 = ext === "tw2" || ext === "twee2" || opts.twee2Compat;
4148
- const result = parseTwee(content, {
4149
- filename: source.filename,
4150
- trim: opts.trim ?? true,
4151
- twee2Compat: twee2
4152
- });
4153
- diagnostics.push(...result.diagnostics);
4154
- for (const p of result.passages) {
4155
- storyAdd(story, p, diagnostics);
3912
+ switch (ext) {
3913
+ case "":
3914
+ case "tw":
3915
+ case "twee":
3916
+ case "tw2":
3917
+ case "twee2": {
3918
+ const twee2 = ext === "tw2" || ext === "twee2" || opts.twee2Compat;
3919
+ const result = parseTwee(content, {
3920
+ filename: source.filename,
3921
+ trim: opts.trim ?? true,
3922
+ twee2Compat: twee2
3923
+ });
3924
+ diagnostics.push(...result.diagnostics);
3925
+ for (const p of result.passages) {
3926
+ storyAdd(story, p, diagnostics);
3927
+ }
3928
+ break;
4156
3929
  }
3930
+ case "css":
3931
+ storyAdd(story, { name: basename(source.filename), tags: ["stylesheet"], text: content }, diagnostics);
3932
+ break;
3933
+ case "js":
3934
+ storyAdd(story, { name: basename(source.filename), tags: ["script"], text: content }, diagnostics);
3935
+ break;
3936
+ default:
3937
+ diagnostics.push({
3938
+ level: "warning",
3939
+ message: `load ${source.filename}: in-memory sources of type .${ext} are not supported; skipped.`
3940
+ });
4157
3941
  }
4158
3942
  }
4159
3943
  }
@@ -4351,7 +4135,27 @@ function loadSourcesCached(story, filenames, opts, diagnostics, processedFiles,
4351
4135
  }
4352
4136
 
4353
4137
  // src/version.ts
4354
- var VERSION = "1.2.0";
4138
+ import { readFileSync as readFileSync2 } from "fs";
4139
+ import { dirname, join as join3 } from "path";
4140
+ import { fileURLToPath } from "url";
4141
+ var PACKAGE_NAME = "@rohal12/twee-ts";
4142
+ function findPackageVersion(startDir) {
4143
+ let dir = startDir;
4144
+ for (; ; ) {
4145
+ try {
4146
+ const pkg = JSON.parse(readFileSync2(join3(dir, "package.json"), "utf-8"));
4147
+ if (pkg.name === PACKAGE_NAME && typeof pkg.version === "string") return pkg.version;
4148
+ } catch {
4149
+ }
4150
+ const parent = dirname(dir);
4151
+ if (parent === dir) return void 0;
4152
+ dir = parent;
4153
+ }
4154
+ }
4155
+ function moduleDir() {
4156
+ return typeof __dirname === "string" ? __dirname : dirname(fileURLToPath(import.meta.url));
4157
+ }
4158
+ var VERSION = findPackageVersion(moduleDir()) ?? "0.0.0";
4355
4159
 
4356
4160
  // src/output-twine2.ts
4357
4161
  var CREATOR_NAME = "Twee-ts";
@@ -4441,8 +4245,8 @@ function getTwine2DataChunk(story, startName, options) {
4441
4245
  }
4442
4246
 
4443
4247
  // src/output-twine1.ts
4444
- import { readFileSync as readFileSync2 } from "fs";
4445
- import { join as join3, dirname } from "path";
4248
+ import { readFileSync as readFileSync3 } from "fs";
4249
+ import { join as join4, dirname as dirname2 } from "path";
4446
4250
  var CREATOR_NAME2 = "twee-ts";
4447
4251
  function toTwine1Archive(story, _startName) {
4448
4252
  const { data, count } = getTwine1PassageChunk(story);
@@ -4450,19 +4254,19 @@ function toTwine1Archive(story, _startName) {
4450
4254
  `;
4451
4255
  }
4452
4256
  function toTwine1HTML(story, format, startName) {
4453
- const formatDir = dirname(format.filename);
4454
- const parentDir = dirname(formatDir);
4257
+ const formatDir = dirname2(format.filename);
4258
+ const parentDir = dirname2(formatDir);
4455
4259
  let template = readFormatSource(format);
4456
4260
  const { data, count } = getTwine1PassageChunk(story);
4457
- template = tryReplaceComponent(template, '"USER_LIB"', join3(formatDir, "userlib.js"), false);
4458
- template = tryReplaceComponent(template, '"ENGINE"', join3(parentDir, "engine.js"), true);
4459
- template = tryReplaceComponent(template, '"SUGARCANE"', join3(formatDir, "code.js"), true);
4460
- template = tryReplaceComponent(template, '"JONAH"', join3(formatDir, "code.js"), true);
4261
+ template = tryReplaceComponent(template, '"USER_LIB"', join4(formatDir, "userlib.js"), false);
4262
+ template = tryReplaceComponent(template, '"ENGINE"', join4(parentDir, "engine.js"), true);
4263
+ template = tryReplaceComponent(template, '"SUGARCANE"', join4(formatDir, "code.js"), true);
4264
+ template = tryReplaceComponent(template, '"JONAH"', join4(formatDir, "code.js"), true);
4461
4265
  if (story.twine1.settings.get("jquery") === "on") {
4462
- template = tryReplaceComponent(template, '"JQUERY"', join3(parentDir, "jquery.js"), true);
4266
+ template = tryReplaceComponent(template, '"JQUERY"', join4(parentDir, "jquery.js"), true);
4463
4267
  }
4464
4268
  if (story.twine1.settings.get("modernizr") === "on") {
4465
- template = tryReplaceComponent(template, '"MODERNIZR"', join3(parentDir, "modernizr.js"), true);
4269
+ template = tryReplaceComponent(template, '"MODERNIZR"', join4(parentDir, "modernizr.js"), true);
4466
4270
  }
4467
4271
  const displayStart = startName === "Start" ? "" : startName;
4468
4272
  template = template.replace('"VERSION"', `Compiled with ${CREATOR_NAME2}, ${VERSION}`);
@@ -4475,7 +4279,7 @@ function toTwine1HTML(story, format, startName) {
4475
4279
  } else {
4476
4280
  let footer;
4477
4281
  try {
4478
- footer = readFileSync2(join3(formatDir, "footer.html"), "utf-8");
4282
+ footer = readFileSync3(join4(formatDir, "footer.html"), "utf-8");
4479
4283
  } catch {
4480
4284
  footer = "</div>\n</body>\n</html>\n";
4481
4285
  }
@@ -4505,7 +4309,7 @@ function getTwine1PassageChunk(story) {
4505
4309
  function tryReplaceComponent(template, placeholder, componentPath, required) {
4506
4310
  if (!template.includes(placeholder)) return template;
4507
4311
  try {
4508
- let content = readFileSync2(componentPath, "utf-8");
4312
+ let content = readFileSync3(componentPath, "utf-8");
4509
4313
  if (content.charCodeAt(0) === 65279) content = content.slice(1);
4510
4314
  return template.replace(placeholder, () => content);
4511
4315
  } catch (e) {
@@ -4602,8 +4406,8 @@ function modifyHead(html, modulePaths, headFile, diagnostics) {
4602
4406
  }
4603
4407
 
4604
4408
  // src/remote-formats.ts
4605
- import { mkdirSync, readFileSync as readFileSync3, writeFileSync, existsSync, readdirSync as readdirSync3, statSync as statSync4, rmSync } from "fs";
4606
- import { join as join4 } from "path";
4409
+ import { mkdirSync, readFileSync as readFileSync4, writeFileSync, existsSync, readdirSync as readdirSync3, statSync as statSync4, rmSync } from "fs";
4410
+ import { join as join5 } from "path";
4607
4411
  import { homedir as homedir2 } from "os";
4608
4412
  var DEFAULT_SFA_INDICES = [
4609
4413
  "https://videlais.github.io/story-formats-archive/official/index.json",
@@ -4611,8 +4415,8 @@ var DEFAULT_SFA_INDICES = [
4611
4415
  ];
4612
4416
  function getCacheDir() {
4613
4417
  const xdg = process.env["XDG_CACHE_HOME"];
4614
- const base = xdg || join4(homedir2(), ".cache");
4615
- return join4(base, "twee-ts", "storyformats");
4418
+ const base = xdg || join5(homedir2(), ".cache");
4419
+ return join5(base, "twee-ts", "storyformats");
4616
4420
  }
4617
4421
  var indexCache = /* @__PURE__ */ new Map();
4618
4422
  function clearIndexCache() {
@@ -4702,9 +4506,9 @@ async function fetchAndCacheFormat(entry, downloadUrl) {
4702
4506
  throw new Error(`Failed to parse format JSON from ${downloadUrl}`);
4703
4507
  }
4704
4508
  const cacheDir = getCacheDir();
4705
- const formatDir = join4(cacheDir, entry.name, entry.version);
4509
+ const formatDir = join5(cacheDir, entry.name, entry.version);
4706
4510
  mkdirSync(formatDir, { recursive: true });
4707
- const formatPath = join4(formatDir, "format.js");
4511
+ const formatPath = join5(formatDir, "format.js");
4708
4512
  writeFileSync(formatPath, text, "utf-8");
4709
4513
  return {
4710
4514
  id,
@@ -4728,9 +4532,9 @@ async function fetchDirectFormat(url) {
4728
4532
  }
4729
4533
  const id = makeFormatId(data.name, data.version);
4730
4534
  const cacheDir = getCacheDir();
4731
- const formatDir = join4(cacheDir, data.name, data.version);
4535
+ const formatDir = join5(cacheDir, data.name, data.version);
4732
4536
  mkdirSync(formatDir, { recursive: true });
4733
- const formatPath = join4(formatDir, "format.js");
4537
+ const formatPath = join5(formatDir, "format.js");
4734
4538
  writeFileSync(formatPath, text, "utf-8");
4735
4539
  return {
4736
4540
  id,
@@ -4778,10 +4582,10 @@ async function resolveRemoteFormat(name, version, indices, urls) {
4778
4582
  return void 0;
4779
4583
  }
4780
4584
  function getCachedFormat(name, version) {
4781
- const formatPath = join4(getCacheDir(), name, version, "format.js");
4585
+ const formatPath = join5(getCacheDir(), name, version, "format.js");
4782
4586
  try {
4783
4587
  if (!existsSync(formatPath)) return void 0;
4784
- const source = readFileSync3(formatPath, "utf-8");
4588
+ const source = readFileSync4(formatPath, "utf-8");
4785
4589
  const id = makeFormatId(name, version);
4786
4590
  const data = parseFormatJSON(source, id);
4787
4591
  if (!data) return void 0;
@@ -4997,7 +4801,9 @@ function storyToJSON(story) {
4997
4801
  }
4998
4802
 
4999
4803
  export {
4804
+ mediaTypeFromFilename,
4805
+ TweeTsError,
5000
4806
  compile,
5001
4807
  compileIncremental
5002
4808
  };
5003
- //# sourceMappingURL=chunk-EQAUFATA.js.map
4809
+ //# sourceMappingURL=chunk-W3SNMQO4.js.map