@qwickapps/react-framework 1.9.0 → 1.9.2

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.
Files changed (56) hide show
  1. package/README.md +7 -4
  2. package/dist/components/forms/FormField.d.ts.map +1 -1
  3. package/dist/components/forms/FormSelect.d.ts.map +1 -1
  4. package/dist/index.css +1 -1
  5. package/dist/index.esm.css +1 -1
  6. package/dist/index.esm.js +2179 -1517
  7. package/dist/index.js +2179 -1517
  8. package/dist/palettes/manifest.json +22 -22
  9. package/dist/palettes/{palette-boutique.1.8.0.css → palette-boutique.1.9.2.css} +29 -29
  10. package/dist/palettes/{palette-boutique.1.8.0.min.css → palette-boutique.1.9.2.min.css} +1 -1
  11. package/dist/palettes/palette-boutique.latest.css +29 -29
  12. package/dist/palettes/palette-boutique.latest.min.css +1 -1
  13. package/dist/schemas/FormFieldSchema.d.ts +0 -1
  14. package/dist/schemas/FormFieldSchema.d.ts.map +1 -1
  15. package/dist/schemas/FormSelectSchema.d.ts +0 -1
  16. package/dist/schemas/FormSelectSchema.d.ts.map +1 -1
  17. package/package.json +1 -1
  18. package/src/components/Html.tsx +1 -7
  19. package/src/components/Logo.tsx +1 -1
  20. package/src/components/QwickApp.css +2 -2
  21. package/src/components/blocks/index.ts +0 -2
  22. package/src/components/forms/FormField.tsx +0 -6
  23. package/src/components/forms/FormSelect.tsx +0 -6
  24. package/src/components/layout/GridCellWrapper.tsx +4 -4
  25. package/src/palettes/PaletteBoutique.css +29 -29
  26. package/src/schemas/FormFieldSchema.ts +0 -11
  27. package/src/schemas/FormSelectSchema.ts +0 -11
  28. package/src/schemas/transformers/ReactNodeTransformer.ts +1 -1
  29. package/dist/palettes/palette-autumn.1.8.1.css +0 -174
  30. package/dist/palettes/palette-autumn.1.8.1.min.css +0 -1
  31. package/dist/palettes/palette-boutique.1.8.1.css +0 -176
  32. package/dist/palettes/palette-boutique.1.8.1.min.css +0 -1
  33. package/dist/palettes/palette-cosmic.1.8.1.css +0 -174
  34. package/dist/palettes/palette-cosmic.1.8.1.min.css +0 -1
  35. package/dist/palettes/palette-default.1.8.1.css +0 -178
  36. package/dist/palettes/palette-default.1.8.1.min.css +0 -1
  37. package/dist/palettes/palette-ocean.1.8.1.css +0 -174
  38. package/dist/palettes/palette-ocean.1.8.1.min.css +0 -1
  39. package/dist/palettes/palette-spring.1.8.1.css +0 -168
  40. package/dist/palettes/palette-spring.1.8.1.min.css +0 -1
  41. package/dist/palettes/palette-winter.1.8.1.css +0 -174
  42. package/dist/palettes/palette-winter.1.8.1.min.css +0 -1
  43. package/src/components/blocks/HeroSlideshow.tsx +0 -156
  44. package/src/stories/HeroSlideshow.stories.tsx +0 -164
  45. /package/dist/palettes/{palette-autumn.1.8.0.css → palette-autumn.1.9.2.css} +0 -0
  46. /package/dist/palettes/{palette-autumn.1.8.0.min.css → palette-autumn.1.9.2.min.css} +0 -0
  47. /package/dist/palettes/{palette-cosmic.1.8.0.css → palette-cosmic.1.9.2.css} +0 -0
  48. /package/dist/palettes/{palette-cosmic.1.8.0.min.css → palette-cosmic.1.9.2.min.css} +0 -0
  49. /package/dist/palettes/{palette-default.1.8.0.css → palette-default.1.9.2.css} +0 -0
  50. /package/dist/palettes/{palette-default.1.8.0.min.css → palette-default.1.9.2.min.css} +0 -0
  51. /package/dist/palettes/{palette-ocean.1.8.0.css → palette-ocean.1.9.2.css} +0 -0
  52. /package/dist/palettes/{palette-ocean.1.8.0.min.css → palette-ocean.1.9.2.min.css} +0 -0
  53. /package/dist/palettes/{palette-spring.1.8.0.css → palette-spring.1.9.2.css} +0 -0
  54. /package/dist/palettes/{palette-spring.1.8.0.min.css → palette-spring.1.9.2.min.css} +0 -0
  55. /package/dist/palettes/{palette-winter.1.8.0.css → palette-winter.1.9.2.css} +0 -0
  56. /package/dist/palettes/{palette-winter.1.8.0.min.css → palette-winter.1.9.2.min.css} +0 -0
package/dist/index.esm.js CHANGED
@@ -6324,42 +6324,24 @@ function getAugmentedNamespace(n) {
6324
6324
  return a;
6325
6325
  }
6326
6326
 
6327
- var lib$5 = {};
6327
+ var commonjs = {};
6328
6328
 
6329
6329
  var Parser$4 = {};
6330
6330
 
6331
- var Tokenizer$1 = {};
6331
+ var Tokenizer$2 = {};
6332
6332
 
6333
- var decode = {};
6334
-
6335
- var decodeDataHtml = {};
6336
-
6337
- // Generated using scripts/write-decode-map.ts
6338
- Object.defineProperty(decodeDataHtml, "__esModule", { value: true });
6339
- decodeDataHtml.default = new Uint16Array(
6340
- // prettier-ignore
6341
- "\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\ud835\udd04rave\u803b\xc0\u40c0pha;\u4391acr;\u4100d;\u6a53\u0100gp\x9d\xa1on;\u4104f;\uc000\ud835\udd38plyFunction;\u6061ing\u803b\xc5\u40c5\u0100cs\xbe\xc3r;\uc000\ud835\udc9cign;\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\ud835\udd05pf;\uc000\ud835\udd39eve;\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\ud835\udc9ep\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\ud835\udd07\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\ud835\udd3b\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\ud835\udc9frok;\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\ud835\udd08rave\u803b\xc8\u40c8ement;\u6208\u0100ap\u04fa\u04fecr;\u4112ty\u0253\u0506\0\0\u0512mallSquare;\u65fberySmallSquare;\u65ab\u0100gp\u0526\u052aon;\u4118f;\uc000\ud835\udd3csilon;\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\ud835\udd09lled\u0253\u0597\0\0\u05a3mallSquare;\u65fcerySmallSquare;\u65aa\u0370\u05ba\0\u05bf\0\0\u05c4f;\uc000\ud835\udd3dAll;\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\ud835\udd0a;\u62d9pf;\uc000\ud835\udd3eeater\u0300EFGLST\u0635\u0644\u064e\u0656\u065b\u0666qual\u0100;L\u063e\u063f\u6265ess;\u62dbullEqual;\u6267reater;\u6aa2ess;\u6277lantEqual;\u6a7eilde;\u6273cr;\uc000\ud835\udca2;\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\ud835\udd40a;\u4399cr;\u6110ilde;\u4128\u01eb\u079a\0\u079ecy;\u4406l\u803b\xcf\u40cf\u0280cfosu\u07ac\u07b7\u07bc\u07c2\u07d0\u0100iy\u07b1\u07b5rc;\u4134;\u4419r;\uc000\ud835\udd0dpf;\uc000\ud835\udd41\u01e3\u07c7\0\u07ccr;\uc000\ud835\udca5rcy;\u4408kcy;\u4404\u0380HJacfos\u07e4\u07e8\u07ec\u07f1\u07fd\u0802\u0808cy;\u4425cy;\u440cppa;\u439a\u0100ey\u07f6\u07fbdil;\u4136;\u441ar;\uc000\ud835\udd0epf;\uc000\ud835\udd42cr;\uc000\ud835\udca6\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\ud835\udd0f\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\ud835\udd43er\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\ud835\udd10nusPlus;\u6213pf;\uc000\ud835\udd44c\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\ud835\udd11\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\ud835\udca9ilde\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\ud835\udd12rave\u803b\xd2\u40d2\u0180aei\u0dee\u0df2\u0df6cr;\u414cga;\u43a9cron;\u439fpf;\uc000\ud835\udd46enCurly\u0100DQ\u0e0e\u0e1aoubleQuote;\u601cuote;\u6018;\u6a54\u0100cl\u0e27\u0e2cr;\uc000\ud835\udcaaash\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\ud835\udd13i;\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\ud835\udcab;\u43a8\u0200Ufos\u0f11\u0f16\u0f1b\u0f1fOT\u803b\"\u4022r;\uc000\ud835\udd14pf;\u611acr;\uc000\ud835\udcac\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\ud835\udd16ort\u0200DLRU\u112a\u1134\u113e\u1149ownArrow\xbb\u041eeftArrow\xbb\u089aightArrow\xbb\u0fddpArrow;\u6191gma;\u43a3allCircle;\u6218pf;\uc000\ud835\udd4a\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\ud835\udcaear;\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\ud835\udd17\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\ud835\udd4bipleDot;\u60db\u0100ct\u12d6\u12dbr;\uc000\ud835\udcafrok;\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\ud835\udd18rave\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\ud835\udd4c\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\ud835\udcb0ilde;\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\ud835\udd19pf;\uc000\ud835\udd4dcr;\uc000\ud835\udcb1dash;\u62aa\u0280cefos\u14a7\u14ac\u14b1\u14b6\u14bcirc;\u4174dge;\u62c0r;\uc000\ud835\udd1apf;\uc000\ud835\udd4ecr;\uc000\ud835\udcb2\u0200fios\u14cb\u14d0\u14d2\u14d8r;\uc000\ud835\udd1b;\u439epf;\uc000\ud835\udd4fcr;\uc000\ud835\udcb3\u0480AIUacfosu\u14f1\u14f5\u14f9\u14fd\u1504\u150f\u1514\u151a\u1520cy;\u442fcy;\u4407cy;\u442ecute\u803b\xdd\u40dd\u0100iy\u1509\u150drc;\u4176;\u442br;\uc000\ud835\udd1cpf;\uc000\ud835\udd50cr;\uc000\ud835\udcb4ml;\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\ud835\udcb5\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\ud835\udd1erave\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\ud835\udd52\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\ud835\udcb6;\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\ud835\udd1fg\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\ud835\udd53\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\ud835\udcb7mi;\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\ud835\udd20\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\ud835\udd54o\xe4\u0254\u8100\xa9;s\u0155\u1b1dr;\u6117\u0100ao\u1b25\u1b29rr;\u61b5ss;\u6717\u0100cu\u1b32\u1b37r;\uc000\ud835\udcb8\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\ud835\udd21ar\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\ud835\udd55\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\ud835\udcb9;\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\ud835\udd22\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\ud835\udd56\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\ud835\udd23lig;\u8000\ufb01lig;\uc000fj\u0180alt\u1fd9\u1fdc\u1fe1t;\u666dig;\u8000\ufb02ns;\u65b1of;\u4192\u01f0\u1fee\0\u1ff3f;\uc000\ud835\udd57\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\ud835\udcbb\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\ud835\udd24\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\ud835\udd58\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\ud835\udd25s\u0100ew\u2223\u2229arow;\u6925arow;\u6926\u0280amopr\u223a\u223e\u2243\u225e\u2263rr;\u61fftht;\u623bk\u0100lr\u2249\u2253eftarrow;\u61a9ightarrow;\u61aaf;\uc000\ud835\udd59bar;\u6015\u0180clt\u226f\u2274\u2278r;\uc000\ud835\udcbdas\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\ud835\udd26rave\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\ud835\udd5aa;\u43b9uest\u803b\xbf\u40bf\u0100ci\u238a\u238fr;\uc000\ud835\udcben\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\ud835\udd27ath;\u4237pf;\uc000\ud835\udd5b\u01e3\u23ec\0\u23f1r;\uc000\ud835\udcbfrcy;\u4458kcy;\u4454\u0400acfghjos\u240b\u2416\u2422\u2427\u242d\u2431\u2435\u243bppa\u0100;v\u2413\u2414\u43ba;\u43f0\u0100ey\u241b\u2420dil;\u4137;\u443ar;\uc000\ud835\udd28reen;\u4138cy;\u4445cy;\u445cpf;\uc000\ud835\udd5ccr;\uc000\ud835\udcc0\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\ud835\udd29\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\ud835\udd5dus;\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\ud835\udcc1m\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\ud835\udd2ao;\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\ud835\udd5e\u0100ct\u28f8\u28fdr;\uc000\ud835\udcc2pos\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\ud835\udd2b\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\ud835\udd5f\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\ud835\udcc3ort\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\ud835\udd2c\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\ud835\udd60\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\ud835\udd2d\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\ud835\udd61nd\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\ud835\udcc5;\u43c8ncsp;\u6008\u0300fiopsu\u2fda\u22e2\u2fdf\u2fe5\u2feb\u2ff1r;\uc000\ud835\udd2epf;\uc000\ud835\udd62rime;\u6057cr;\uc000\ud835\udcc6\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\ud835\udd2f\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\ud835\udd63us;\u6a2eimes;\u6a35\u0100ap\u325d\u3267r\u0100;g\u3263\u3264\u4029t;\u6994olint;\u6a12ar\xf2\u31e3\u0200achq\u327b\u3280\u10bc\u3285quo;\u603ar;\uc000\ud835\udcc7\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\ud835\udd30\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\ud835\udd64a\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\ud835\udcc8tm\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\ud835\udd31\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\ud835\udd65rk;\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\ud835\udcc9;\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\ud835\udd32rave\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\ud835\udd66\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\ud835\udcca\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\ud835\udd33tr\xe9\u39aesu\u0100bp\u39ef\u39f1\xbb\u0d1c\xbb\u0d59pf;\uc000\ud835\udd67ro\xf0\u0efbtr\xe9\u39b4\u0100cu\u3a06\u3a0br;\uc000\ud835\udccb\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\ud835\udd34pf;\uc000\ud835\udd68\u0100;e\u1479\u3a66at\xe8\u1479cr;\uc000\ud835\udccc\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\ud835\udd35\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\ud835\udd69im\xe5\u17b2\u0100Aa\u3ac7\u3acar\xf2\u03cer\xf2\u0a01\u0100cq\u3ad2\u17b8r;\uc000\ud835\udccd\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\ud835\udd36cy;\u4457pf;\uc000\ud835\udd6acr;\uc000\ud835\udcce\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\ud835\udd37cy;\u4436grarr;\u61ddpf;\uc000\ud835\udd6bcr;\uc000\ud835\udccf\u0100jn\u3b85\u3b87;\u600dj;\u600c"
6342
- .split("")
6343
- .map(function (c) { return c.charCodeAt(0); }));
6344
-
6345
- var decodeDataXml = {};
6346
-
6347
- // Generated using scripts/write-decode-map.ts
6348
- Object.defineProperty(decodeDataXml, "__esModule", { value: true });
6349
- decodeDataXml.default = new Uint16Array(
6350
- // prettier-ignore
6351
- "\u0200aglq\t\x15\x18\x1b\u026d\x0f\0\0\x12p;\u4026os;\u4027t;\u403et;\u403cuot;\u4022"
6352
- .split("")
6353
- .map(function (c) { return c.charCodeAt(0); }));
6333
+ var decode$1 = {};
6354
6334
 
6355
- var decode_codepoint = {};
6335
+ var decodeCodepoint = {};
6356
6336
 
6357
6337
  (function (exports) {
6358
6338
  // Adapted from https://github.com/mathiasbynens/he/blob/36afe179392226cf1b6ccdb16ebbb7a5a844d93a/src/he.js#L106-L134
6359
6339
  var _a;
6360
6340
  Object.defineProperty(exports, "__esModule", { value: true });
6361
- exports.replaceCodePoint = exports.fromCodePoint = void 0;
6362
- var decodeMap = new Map([
6341
+ exports.fromCodePoint = void 0;
6342
+ exports.replaceCodePoint = replaceCodePoint;
6343
+ exports.decodeCodePoint = decodeCodePoint;
6344
+ const decodeMap = new Map([
6363
6345
  [0, 65533],
6364
6346
  // C1 Unicode control character reference replacements
6365
6347
  [128, 8364],
@@ -6394,17 +6376,17 @@ var decode_codepoint = {};
6394
6376
  * Polyfill for `String.fromCodePoint`. It is used to create a string from a Unicode code point.
6395
6377
  */
6396
6378
  exports.fromCodePoint =
6397
- // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition, node/no-unsupported-features/es-builtins
6398
- (_a = String.fromCodePoint) !== null && _a !== void 0 ? _a : function (codePoint) {
6399
- var output = "";
6400
- if (codePoint > 0xffff) {
6401
- codePoint -= 0x10000;
6402
- output += String.fromCharCode(((codePoint >>> 10) & 0x3ff) | 0xd800);
6403
- codePoint = 0xdc00 | (codePoint & 0x3ff);
6379
+ // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition, n/no-unsupported-features/es-builtins
6380
+ (_a = String.fromCodePoint) !== null && _a !== void 0 ? _a : ((codePoint) => {
6381
+ let output = "";
6382
+ if (codePoint > 65535) {
6383
+ codePoint -= 65536;
6384
+ output += String.fromCharCode(((codePoint >>> 10) & 1023) | 55296);
6385
+ codePoint = 56320 | (codePoint & 1023);
6404
6386
  }
6405
6387
  output += String.fromCharCode(codePoint);
6406
6388
  return output;
6407
- };
6389
+ });
6408
6390
  /**
6409
6391
  * Replace the given code point with a replacement character if it is a
6410
6392
  * surrogate or is outside the valid range. Otherwise return the code
@@ -6412,12 +6394,12 @@ var decode_codepoint = {};
6412
6394
  */
6413
6395
  function replaceCodePoint(codePoint) {
6414
6396
  var _a;
6415
- if ((codePoint >= 0xd800 && codePoint <= 0xdfff) || codePoint > 0x10ffff) {
6416
- return 0xfffd;
6397
+ if ((codePoint >= 55296 && codePoint <= 57343) ||
6398
+ codePoint > 1114111) {
6399
+ return 65533;
6417
6400
  }
6418
6401
  return (_a = decodeMap.get(codePoint)) !== null && _a !== void 0 ? _a : codePoint;
6419
6402
  }
6420
- exports.replaceCodePoint = replaceCodePoint;
6421
6403
  /**
6422
6404
  * Replace the code point if relevant, then convert it to a string.
6423
6405
  *
@@ -6428,48 +6410,91 @@ var decode_codepoint = {};
6428
6410
  function decodeCodePoint(codePoint) {
6429
6411
  return (0, exports.fromCodePoint)(replaceCodePoint(codePoint));
6430
6412
  }
6431
- exports.default = decodeCodePoint;
6432
6413
 
6433
- } (decode_codepoint));
6414
+ } (decodeCodepoint));
6415
+
6416
+ var decodeDataHtml$1 = {};
6417
+
6418
+ var decodeShared = {};
6419
+
6420
+ Object.defineProperty(decodeShared, "__esModule", { value: true });
6421
+ decodeShared.decodeBase64 = decodeBase64;
6422
+ /*
6423
+ * Shared base64 decode helper for generated decode data.
6424
+ * Assumes global atob is available.
6425
+ */
6426
+ function decodeBase64(input) {
6427
+ const binary =
6428
+ // eslint-disable-next-line n/no-unsupported-features/node-builtins
6429
+ typeof atob === "function"
6430
+ ? // Browser (and Node >=16)
6431
+ // eslint-disable-next-line n/no-unsupported-features/node-builtins
6432
+ atob(input)
6433
+ : // Older Node versions (<16)
6434
+ // eslint-disable-next-line n/no-unsupported-features/node-builtins
6435
+ typeof Buffer.from === "function"
6436
+ ? // eslint-disable-next-line n/no-unsupported-features/node-builtins
6437
+ Buffer.from(input, "base64").toString("binary")
6438
+ : // eslint-disable-next-line unicorn/no-new-buffer, n/no-deprecated-api
6439
+ new Buffer(input, "base64").toString("binary");
6440
+ const evenLength = binary.length & ~1; // Round down to even length
6441
+ const out = new Uint16Array(evenLength / 2);
6442
+ for (let index = 0, outIndex = 0; index < evenLength; index += 2) {
6443
+ const lo = binary.charCodeAt(index);
6444
+ const hi = binary.charCodeAt(index + 1);
6445
+ out[outIndex++] = lo | (hi << 8);
6446
+ }
6447
+ return out;
6448
+ }
6449
+
6450
+ // Generated using scripts/write-decode-map.ts
6451
+ Object.defineProperty(decodeDataHtml$1, "__esModule", { value: true });
6452
+ decodeDataHtml$1.htmlDecodeTree = void 0;
6453
+ const decode_shared_js_1$1 = decodeShared;
6454
+ decodeDataHtml$1.htmlDecodeTree = (0, decode_shared_js_1$1.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");
6455
+
6456
+ var decodeDataXml$1 = {};
6457
+
6458
+ // Generated using scripts/write-decode-map.ts
6459
+ Object.defineProperty(decodeDataXml$1, "__esModule", { value: true });
6460
+ decodeDataXml$1.xmlDecodeTree = void 0;
6461
+ const decode_shared_js_1 = decodeShared;
6462
+ decodeDataXml$1.xmlDecodeTree = (0, decode_shared_js_1.decodeBase64)("AAJhZ2xxBwARABMAFQBtAg0AAAAAAA8AcAAmYG8AcwAnYHQAPmB0ADxg9SFvdCJg");
6463
+
6464
+ var binTrieFlags = {};
6465
+
6466
+ Object.defineProperty(binTrieFlags, "__esModule", { value: true });
6467
+ binTrieFlags.BinTrieFlags = void 0;
6468
+ /**
6469
+ * Bit flags & masks for the binary trie encoding used for entity decoding.
6470
+ *
6471
+ * Bit layout (16 bits total):
6472
+ * 15..14 VALUE_LENGTH (+1 encoding; 0 => no value)
6473
+ * 13 FLAG13. If valueLength>0: semicolon required flag (implicit ';').
6474
+ * If valueLength==0: compact run flag.
6475
+ * 12..7 BRANCH_LENGTH Branch length (0 => single branch in 6..0 if jumpOffset==char) OR run length (when compact run)
6476
+ * 6..0 JUMP_TABLE Jump offset (jump table) OR single-branch char code OR first run char
6477
+ */
6478
+ var BinTrieFlags;
6479
+ (function (BinTrieFlags) {
6480
+ BinTrieFlags[BinTrieFlags["VALUE_LENGTH"] = 49152] = "VALUE_LENGTH";
6481
+ BinTrieFlags[BinTrieFlags["FLAG13"] = 8192] = "FLAG13";
6482
+ BinTrieFlags[BinTrieFlags["BRANCH_LENGTH"] = 8064] = "BRANCH_LENGTH";
6483
+ BinTrieFlags[BinTrieFlags["JUMP_TABLE"] = 127] = "JUMP_TABLE";
6484
+ })(BinTrieFlags || (binTrieFlags.BinTrieFlags = BinTrieFlags = {}));
6434
6485
 
6435
6486
  (function (exports) {
6436
- var __createBinding = (commonjsGlobal && commonjsGlobal.__createBinding) || (Object.create ? (function(o, m, k, k2) {
6437
- if (k2 === undefined) k2 = k;
6438
- var desc = Object.getOwnPropertyDescriptor(m, k);
6439
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6440
- desc = { enumerable: true, get: function() { return m[k]; } };
6441
- }
6442
- Object.defineProperty(o, k2, desc);
6443
- }) : (function(o, m, k, k2) {
6444
- if (k2 === undefined) k2 = k;
6445
- o[k2] = m[k];
6446
- }));
6447
- var __setModuleDefault = (commonjsGlobal && commonjsGlobal.__setModuleDefault) || (Object.create ? (function(o, v) {
6448
- Object.defineProperty(o, "default", { enumerable: true, value: v });
6449
- }) : function(o, v) {
6450
- o["default"] = v;
6451
- });
6452
- var __importStar = (commonjsGlobal && commonjsGlobal.__importStar) || function (mod) {
6453
- if (mod && mod.__esModule) return mod;
6454
- var result = {};
6455
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
6456
- __setModuleDefault(result, mod);
6457
- return result;
6458
- };
6459
- var __importDefault = (commonjsGlobal && commonjsGlobal.__importDefault) || function (mod) {
6460
- return (mod && mod.__esModule) ? mod : { "default": mod };
6461
- };
6462
6487
  Object.defineProperty(exports, "__esModule", { value: true });
6463
- exports.decodeXML = exports.decodeHTMLStrict = exports.decodeHTMLAttribute = exports.decodeHTML = exports.determineBranch = exports.EntityDecoder = exports.DecodingMode = exports.BinTrieFlags = exports.fromCodePoint = exports.replaceCodePoint = exports.decodeCodePoint = exports.xmlDecodeTree = exports.htmlDecodeTree = void 0;
6464
- var decode_data_html_js_1 = __importDefault(decodeDataHtml);
6465
- exports.htmlDecodeTree = decode_data_html_js_1.default;
6466
- var decode_data_xml_js_1 = __importDefault(decodeDataXml);
6467
- exports.xmlDecodeTree = decode_data_xml_js_1.default;
6468
- var decode_codepoint_js_1 = __importStar(decode_codepoint);
6469
- exports.decodeCodePoint = decode_codepoint_js_1.default;
6470
- var decode_codepoint_js_2 = decode_codepoint;
6471
- Object.defineProperty(exports, "replaceCodePoint", { enumerable: true, get: function () { return decode_codepoint_js_2.replaceCodePoint; } });
6472
- Object.defineProperty(exports, "fromCodePoint", { enumerable: true, get: function () { return decode_codepoint_js_2.fromCodePoint; } });
6488
+ exports.xmlDecodeTree = exports.htmlDecodeTree = exports.replaceCodePoint = exports.fromCodePoint = exports.decodeCodePoint = exports.EntityDecoder = exports.DecodingMode = void 0;
6489
+ exports.determineBranch = determineBranch;
6490
+ exports.decodeHTML = decodeHTML;
6491
+ exports.decodeHTMLAttribute = decodeHTMLAttribute;
6492
+ exports.decodeHTMLStrict = decodeHTMLStrict;
6493
+ exports.decodeXML = decodeXML;
6494
+ const decode_codepoint_js_1 = decodeCodepoint;
6495
+ const decode_data_html_js_1 = decodeDataHtml$1;
6496
+ const decode_data_xml_js_1 = decodeDataXml$1;
6497
+ const bin_trie_flags_js_1 = binTrieFlags;
6473
6498
  var CharCodes;
6474
6499
  (function (CharCodes) {
6475
6500
  CharCodes[CharCodes["NUM"] = 35] = "NUM";
@@ -6486,13 +6511,7 @@ var decode_codepoint = {};
6486
6511
  CharCodes[CharCodes["UPPER_Z"] = 90] = "UPPER_Z";
6487
6512
  })(CharCodes || (CharCodes = {}));
6488
6513
  /** Bit that needs to be set to convert an upper case ASCII character to lower case */
6489
- var TO_LOWER_BIT = 32;
6490
- var BinTrieFlags;
6491
- (function (BinTrieFlags) {
6492
- BinTrieFlags[BinTrieFlags["VALUE_LENGTH"] = 49152] = "VALUE_LENGTH";
6493
- BinTrieFlags[BinTrieFlags["BRANCH_LENGTH"] = 16256] = "BRANCH_LENGTH";
6494
- BinTrieFlags[BinTrieFlags["JUMP_TABLE"] = 127] = "JUMP_TABLE";
6495
- })(BinTrieFlags = exports.BinTrieFlags || (exports.BinTrieFlags = {}));
6514
+ const TO_LOWER_BIT = 32;
6496
6515
  function isNumber(code) {
6497
6516
  return code >= CharCodes.ZERO && code <= CharCodes.NINE;
6498
6517
  }
@@ -6530,13 +6549,14 @@ var decode_codepoint = {};
6530
6549
  DecodingMode[DecodingMode["Strict"] = 1] = "Strict";
6531
6550
  /** Entities in attributes have limitations on ending characters. */
6532
6551
  DecodingMode[DecodingMode["Attribute"] = 2] = "Attribute";
6533
- })(DecodingMode = exports.DecodingMode || (exports.DecodingMode = {}));
6552
+ })(DecodingMode || (exports.DecodingMode = DecodingMode = {}));
6534
6553
  /**
6535
6554
  * Token decoder with support of writing partial entities.
6536
6555
  */
6537
- var EntityDecoder = /** @class */ (function () {
6538
- function EntityDecoder(
6556
+ class EntityDecoder {
6557
+ constructor(
6539
6558
  /** The tree used to decode entities. */
6559
+ // biome-ignore lint/correctness/noUnusedPrivateClassMembers: False positive
6540
6560
  decodeTree,
6541
6561
  /**
6542
6562
  * The function that is called when a codepoint is decoded.
@@ -6570,16 +6590,19 @@ var decode_codepoint = {};
6570
6590
  this.excess = 1;
6571
6591
  /** The mode in which the decoder is operating. */
6572
6592
  this.decodeMode = DecodingMode.Strict;
6593
+ /** The number of characters that have been consumed in the current run. */
6594
+ this.runConsumed = 0;
6573
6595
  }
6574
6596
  /** Resets the instance to make it reusable. */
6575
- EntityDecoder.prototype.startEntity = function (decodeMode) {
6597
+ startEntity(decodeMode) {
6576
6598
  this.decodeMode = decodeMode;
6577
6599
  this.state = EntityDecoderState.EntityStart;
6578
6600
  this.result = 0;
6579
6601
  this.treeIndex = 0;
6580
6602
  this.excess = 1;
6581
6603
  this.consumed = 1;
6582
- };
6604
+ this.runConsumed = 0;
6605
+ }
6583
6606
  /**
6584
6607
  * Write an entity to the decoder. This can be called multiple times with partial entities.
6585
6608
  * If the entity is incomplete, the decoder will return -1.
@@ -6587,113 +6610,106 @@ var decode_codepoint = {};
6587
6610
  * Mirrors the implementation of `getDecoder`, but with the ability to stop decoding if the
6588
6611
  * entity is incomplete, and resume when the next string is written.
6589
6612
  *
6590
- * @param string The string containing the entity (or a continuation of the entity).
6613
+ * @param input The string containing the entity (or a continuation of the entity).
6591
6614
  * @param offset The offset at which the entity begins. Should be 0 if this is not the first call.
6592
6615
  * @returns The number of characters that were consumed, or -1 if the entity is incomplete.
6593
6616
  */
6594
- EntityDecoder.prototype.write = function (str, offset) {
6617
+ write(input, offset) {
6595
6618
  switch (this.state) {
6596
6619
  case EntityDecoderState.EntityStart: {
6597
- if (str.charCodeAt(offset) === CharCodes.NUM) {
6620
+ if (input.charCodeAt(offset) === CharCodes.NUM) {
6598
6621
  this.state = EntityDecoderState.NumericStart;
6599
6622
  this.consumed += 1;
6600
- return this.stateNumericStart(str, offset + 1);
6623
+ return this.stateNumericStart(input, offset + 1);
6601
6624
  }
6602
6625
  this.state = EntityDecoderState.NamedEntity;
6603
- return this.stateNamedEntity(str, offset);
6626
+ return this.stateNamedEntity(input, offset);
6604
6627
  }
6605
6628
  case EntityDecoderState.NumericStart: {
6606
- return this.stateNumericStart(str, offset);
6629
+ return this.stateNumericStart(input, offset);
6607
6630
  }
6608
6631
  case EntityDecoderState.NumericDecimal: {
6609
- return this.stateNumericDecimal(str, offset);
6632
+ return this.stateNumericDecimal(input, offset);
6610
6633
  }
6611
6634
  case EntityDecoderState.NumericHex: {
6612
- return this.stateNumericHex(str, offset);
6635
+ return this.stateNumericHex(input, offset);
6613
6636
  }
6614
6637
  case EntityDecoderState.NamedEntity: {
6615
- return this.stateNamedEntity(str, offset);
6638
+ return this.stateNamedEntity(input, offset);
6616
6639
  }
6617
6640
  }
6618
- };
6641
+ }
6619
6642
  /**
6620
6643
  * Switches between the numeric decimal and hexadecimal states.
6621
6644
  *
6622
6645
  * Equivalent to the `Numeric character reference state` in the HTML spec.
6623
6646
  *
6624
- * @param str The string containing the entity (or a continuation of the entity).
6647
+ * @param input The string containing the entity (or a continuation of the entity).
6625
6648
  * @param offset The current offset.
6626
6649
  * @returns The number of characters that were consumed, or -1 if the entity is incomplete.
6627
6650
  */
6628
- EntityDecoder.prototype.stateNumericStart = function (str, offset) {
6629
- if (offset >= str.length) {
6651
+ stateNumericStart(input, offset) {
6652
+ if (offset >= input.length) {
6630
6653
  return -1;
6631
6654
  }
6632
- if ((str.charCodeAt(offset) | TO_LOWER_BIT) === CharCodes.LOWER_X) {
6655
+ if ((input.charCodeAt(offset) | TO_LOWER_BIT) === CharCodes.LOWER_X) {
6633
6656
  this.state = EntityDecoderState.NumericHex;
6634
6657
  this.consumed += 1;
6635
- return this.stateNumericHex(str, offset + 1);
6658
+ return this.stateNumericHex(input, offset + 1);
6636
6659
  }
6637
6660
  this.state = EntityDecoderState.NumericDecimal;
6638
- return this.stateNumericDecimal(str, offset);
6639
- };
6640
- EntityDecoder.prototype.addToNumericResult = function (str, start, end, base) {
6641
- if (start !== end) {
6642
- var digitCount = end - start;
6643
- this.result =
6644
- this.result * Math.pow(base, digitCount) +
6645
- parseInt(str.substr(start, digitCount), base);
6646
- this.consumed += digitCount;
6647
- }
6648
- };
6661
+ return this.stateNumericDecimal(input, offset);
6662
+ }
6649
6663
  /**
6650
6664
  * Parses a hexadecimal numeric entity.
6651
6665
  *
6652
6666
  * Equivalent to the `Hexademical character reference state` in the HTML spec.
6653
6667
  *
6654
- * @param str The string containing the entity (or a continuation of the entity).
6668
+ * @param input The string containing the entity (or a continuation of the entity).
6655
6669
  * @param offset The current offset.
6656
6670
  * @returns The number of characters that were consumed, or -1 if the entity is incomplete.
6657
6671
  */
6658
- EntityDecoder.prototype.stateNumericHex = function (str, offset) {
6659
- var startIdx = offset;
6660
- while (offset < str.length) {
6661
- var char = str.charCodeAt(offset);
6672
+ stateNumericHex(input, offset) {
6673
+ while (offset < input.length) {
6674
+ const char = input.charCodeAt(offset);
6662
6675
  if (isNumber(char) || isHexadecimalCharacter(char)) {
6663
- offset += 1;
6676
+ // Convert hex digit to value (0-15); 'a'/'A' -> 10.
6677
+ const digit = char <= CharCodes.NINE
6678
+ ? char - CharCodes.ZERO
6679
+ : (char | TO_LOWER_BIT) - CharCodes.LOWER_A + 10;
6680
+ this.result = this.result * 16 + digit;
6681
+ this.consumed++;
6682
+ offset++;
6664
6683
  }
6665
6684
  else {
6666
- this.addToNumericResult(str, startIdx, offset, 16);
6667
6685
  return this.emitNumericEntity(char, 3);
6668
6686
  }
6669
6687
  }
6670
- this.addToNumericResult(str, startIdx, offset, 16);
6671
- return -1;
6672
- };
6688
+ return -1; // Incomplete entity
6689
+ }
6673
6690
  /**
6674
6691
  * Parses a decimal numeric entity.
6675
6692
  *
6676
6693
  * Equivalent to the `Decimal character reference state` in the HTML spec.
6677
6694
  *
6678
- * @param str The string containing the entity (or a continuation of the entity).
6695
+ * @param input The string containing the entity (or a continuation of the entity).
6679
6696
  * @param offset The current offset.
6680
6697
  * @returns The number of characters that were consumed, or -1 if the entity is incomplete.
6681
6698
  */
6682
- EntityDecoder.prototype.stateNumericDecimal = function (str, offset) {
6683
- var startIdx = offset;
6684
- while (offset < str.length) {
6685
- var char = str.charCodeAt(offset);
6699
+ stateNumericDecimal(input, offset) {
6700
+ while (offset < input.length) {
6701
+ const char = input.charCodeAt(offset);
6686
6702
  if (isNumber(char)) {
6687
- offset += 1;
6703
+ this.result = this.result * 10 + (char - CharCodes.ZERO);
6704
+ this.consumed++;
6705
+ offset++;
6688
6706
  }
6689
6707
  else {
6690
- this.addToNumericResult(str, startIdx, offset, 10);
6691
6708
  return this.emitNumericEntity(char, 2);
6692
6709
  }
6693
6710
  }
6694
- this.addToNumericResult(str, startIdx, offset, 10);
6695
- return -1;
6696
- };
6711
+ return -1; // Incomplete entity
6712
+ }
6697
6713
  /**
6698
6714
  * Validate and emit a numeric entity.
6699
6715
  *
@@ -6707,7 +6723,7 @@ var decode_codepoint = {};
6707
6723
  * was consumed.
6708
6724
  * @returns The number of characters that were consumed.
6709
6725
  */
6710
- EntityDecoder.prototype.emitNumericEntity = function (lastCp, expectedLength) {
6726
+ emitNumericEntity(lastCp, expectedLength) {
6711
6727
  var _a;
6712
6728
  // Ensure we consumed at least one digit.
6713
6729
  if (this.consumed <= expectedLength) {
@@ -6729,23 +6745,77 @@ var decode_codepoint = {};
6729
6745
  this.errors.validateNumericCharacterReference(this.result);
6730
6746
  }
6731
6747
  return this.consumed;
6732
- };
6748
+ }
6733
6749
  /**
6734
6750
  * Parses a named entity.
6735
6751
  *
6736
6752
  * Equivalent to the `Named character reference state` in the HTML spec.
6737
6753
  *
6738
- * @param str The string containing the entity (or a continuation of the entity).
6754
+ * @param input The string containing the entity (or a continuation of the entity).
6739
6755
  * @param offset The current offset.
6740
6756
  * @returns The number of characters that were consumed, or -1 if the entity is incomplete.
6741
6757
  */
6742
- EntityDecoder.prototype.stateNamedEntity = function (str, offset) {
6743
- var decodeTree = this.decodeTree;
6744
- var current = decodeTree[this.treeIndex];
6745
- // The mask is the number of bytes of the value, including the current byte.
6746
- var valueLength = (current & BinTrieFlags.VALUE_LENGTH) >> 14;
6747
- for (; offset < str.length; offset++, this.excess++) {
6748
- var char = str.charCodeAt(offset);
6758
+ stateNamedEntity(input, offset) {
6759
+ const { decodeTree } = this;
6760
+ let current = decodeTree[this.treeIndex];
6761
+ // The length is the number of bytes of the value, including the current byte.
6762
+ let valueLength = (current & bin_trie_flags_js_1.BinTrieFlags.VALUE_LENGTH) >> 14;
6763
+ while (offset < input.length) {
6764
+ // Handle compact runs (possibly inline): valueLength == 0 and SEMI_REQUIRED bit set.
6765
+ if (valueLength === 0 && (current & bin_trie_flags_js_1.BinTrieFlags.FLAG13) !== 0) {
6766
+ const runLength = (current & bin_trie_flags_js_1.BinTrieFlags.BRANCH_LENGTH) >> 7; /* 2..63 */
6767
+ // If we are starting a run, check the first char.
6768
+ if (this.runConsumed === 0) {
6769
+ const firstChar = current & bin_trie_flags_js_1.BinTrieFlags.JUMP_TABLE;
6770
+ if (input.charCodeAt(offset) !== firstChar) {
6771
+ return this.result === 0
6772
+ ? 0
6773
+ : this.emitNotTerminatedNamedEntity();
6774
+ }
6775
+ offset++;
6776
+ this.excess++;
6777
+ this.runConsumed++;
6778
+ }
6779
+ // Check remaining characters in the run.
6780
+ while (this.runConsumed < runLength) {
6781
+ if (offset >= input.length) {
6782
+ return -1;
6783
+ }
6784
+ const charIndexInPacked = this.runConsumed - 1;
6785
+ const packedWord = decodeTree[this.treeIndex + 1 + (charIndexInPacked >> 1)];
6786
+ const expectedChar = charIndexInPacked % 2 === 0
6787
+ ? packedWord & 0xff
6788
+ : (packedWord >> 8) & 0xff;
6789
+ if (input.charCodeAt(offset) !== expectedChar) {
6790
+ this.runConsumed = 0;
6791
+ return this.result === 0
6792
+ ? 0
6793
+ : this.emitNotTerminatedNamedEntity();
6794
+ }
6795
+ offset++;
6796
+ this.excess++;
6797
+ this.runConsumed++;
6798
+ }
6799
+ this.runConsumed = 0;
6800
+ this.treeIndex += 1 + (runLength >> 1);
6801
+ current = decodeTree[this.treeIndex];
6802
+ valueLength = (current & bin_trie_flags_js_1.BinTrieFlags.VALUE_LENGTH) >> 14;
6803
+ }
6804
+ if (offset >= input.length)
6805
+ break;
6806
+ const char = input.charCodeAt(offset);
6807
+ /*
6808
+ * Implicit semicolon handling for nodes that require a semicolon but
6809
+ * don't have an explicit ';' branch stored in the trie. If we have
6810
+ * a value on the current node, it requires a semicolon, and the
6811
+ * current input character is a semicolon, emit the entity using the
6812
+ * current node (without descending further).
6813
+ */
6814
+ if (char === CharCodes.SEMI &&
6815
+ valueLength !== 0 &&
6816
+ (current & bin_trie_flags_js_1.BinTrieFlags.FLAG13) !== 0) {
6817
+ return this.emitNamedEntityData(this.treeIndex, valueLength, this.consumed + this.excess);
6818
+ }
6749
6819
  this.treeIndex = determineBranch(decodeTree, current, this.treeIndex + Math.max(1, valueLength), char);
6750
6820
  if (this.treeIndex < 0) {
6751
6821
  return this.result === 0 ||
@@ -6759,7 +6829,7 @@ var decode_codepoint = {};
6759
6829
  : this.emitNotTerminatedNamedEntity();
6760
6830
  }
6761
6831
  current = decodeTree[this.treeIndex];
6762
- valueLength = (current & BinTrieFlags.VALUE_LENGTH) >> 14;
6832
+ valueLength = (current & bin_trie_flags_js_1.BinTrieFlags.VALUE_LENGTH) >> 14;
6763
6833
  // If the branch is a value, store it and continue
6764
6834
  if (valueLength !== 0) {
6765
6835
  // If the entity is terminated by a semicolon, we are done.
@@ -6767,28 +6837,32 @@ var decode_codepoint = {};
6767
6837
  return this.emitNamedEntityData(this.treeIndex, valueLength, this.consumed + this.excess);
6768
6838
  }
6769
6839
  // If we encounter a non-terminated (legacy) entity while parsing strictly, then ignore it.
6770
- if (this.decodeMode !== DecodingMode.Strict) {
6840
+ if (this.decodeMode !== DecodingMode.Strict &&
6841
+ (current & bin_trie_flags_js_1.BinTrieFlags.FLAG13) === 0) {
6771
6842
  this.result = this.treeIndex;
6772
6843
  this.consumed += this.excess;
6773
6844
  this.excess = 0;
6774
6845
  }
6775
6846
  }
6847
+ // Increment offset & excess for next iteration
6848
+ offset++;
6849
+ this.excess++;
6776
6850
  }
6777
6851
  return -1;
6778
- };
6852
+ }
6779
6853
  /**
6780
6854
  * Emit a named entity that was not terminated with a semicolon.
6781
6855
  *
6782
6856
  * @returns The number of characters consumed.
6783
6857
  */
6784
- EntityDecoder.prototype.emitNotTerminatedNamedEntity = function () {
6858
+ emitNotTerminatedNamedEntity() {
6785
6859
  var _a;
6786
- var _b = this, result = _b.result, decodeTree = _b.decodeTree;
6787
- var valueLength = (decodeTree[result] & BinTrieFlags.VALUE_LENGTH) >> 14;
6860
+ const { result, decodeTree } = this;
6861
+ const valueLength = (decodeTree[result] & bin_trie_flags_js_1.BinTrieFlags.VALUE_LENGTH) >> 14;
6788
6862
  this.emitNamedEntityData(result, valueLength, this.consumed);
6789
6863
  (_a = this.errors) === null || _a === void 0 ? void 0 : _a.missingSemicolonAfterCharacterReference();
6790
6864
  return this.consumed;
6791
- };
6865
+ }
6792
6866
  /**
6793
6867
  * Emit a named entity.
6794
6868
  *
@@ -6798,17 +6872,18 @@ var decode_codepoint = {};
6798
6872
  *
6799
6873
  * @returns The number of characters consumed.
6800
6874
  */
6801
- EntityDecoder.prototype.emitNamedEntityData = function (result, valueLength, consumed) {
6802
- var decodeTree = this.decodeTree;
6875
+ emitNamedEntityData(result, valueLength, consumed) {
6876
+ const { decodeTree } = this;
6803
6877
  this.emitCodePoint(valueLength === 1
6804
- ? decodeTree[result] & ~BinTrieFlags.VALUE_LENGTH
6878
+ ? decodeTree[result] &
6879
+ ~(bin_trie_flags_js_1.BinTrieFlags.VALUE_LENGTH | bin_trie_flags_js_1.BinTrieFlags.FLAG13)
6805
6880
  : decodeTree[result + 1], consumed);
6806
6881
  if (valueLength === 3) {
6807
6882
  // For multi-byte values, we need to emit the second byte.
6808
6883
  this.emitCodePoint(decodeTree[result + 2], consumed);
6809
6884
  }
6810
6885
  return consumed;
6811
- };
6886
+ }
6812
6887
  /**
6813
6888
  * Signal to the parser that the end of the input was reached.
6814
6889
  *
@@ -6816,7 +6891,7 @@ var decode_codepoint = {};
6816
6891
  *
6817
6892
  * @returns The number of characters consumed.
6818
6893
  */
6819
- EntityDecoder.prototype.end = function () {
6894
+ end() {
6820
6895
  var _a;
6821
6896
  switch (this.state) {
6822
6897
  case EntityDecoderState.NamedEntity: {
@@ -6843,9 +6918,8 @@ var decode_codepoint = {};
6843
6918
  return 0;
6844
6919
  }
6845
6920
  }
6846
- };
6847
- return EntityDecoder;
6848
- }());
6921
+ }
6922
+ }
6849
6923
  exports.EntityDecoder = EntityDecoder;
6850
6924
  /**
6851
6925
  * Creates a function that decodes entities in a string.
@@ -6854,28 +6928,28 @@ var decode_codepoint = {};
6854
6928
  * @returns A function that decodes entities in a string.
6855
6929
  */
6856
6930
  function getDecoder(decodeTree) {
6857
- var ret = "";
6858
- var decoder = new EntityDecoder(decodeTree, function (str) { return (ret += (0, decode_codepoint_js_1.fromCodePoint)(str)); });
6859
- return function decodeWithTrie(str, decodeMode) {
6860
- var lastIndex = 0;
6861
- var offset = 0;
6862
- while ((offset = str.indexOf("&", offset)) >= 0) {
6863
- ret += str.slice(lastIndex, offset);
6931
+ let returnValue = "";
6932
+ const decoder = new EntityDecoder(decodeTree, (data) => (returnValue += (0, decode_codepoint_js_1.fromCodePoint)(data)));
6933
+ return function decodeWithTrie(input, decodeMode) {
6934
+ let lastIndex = 0;
6935
+ let offset = 0;
6936
+ while ((offset = input.indexOf("&", offset)) >= 0) {
6937
+ returnValue += input.slice(lastIndex, offset);
6864
6938
  decoder.startEntity(decodeMode);
6865
- var len = decoder.write(str,
6939
+ const length = decoder.write(input,
6866
6940
  // Skip the "&"
6867
6941
  offset + 1);
6868
- if (len < 0) {
6942
+ if (length < 0) {
6869
6943
  lastIndex = offset + decoder.end();
6870
6944
  break;
6871
6945
  }
6872
- lastIndex = offset + len;
6873
- // If `len` is 0, skip the current `&` and continue.
6874
- offset = len === 0 ? lastIndex + 1 : lastIndex;
6946
+ lastIndex = offset + length;
6947
+ // If `length` is 0, skip the current `&` and continue.
6948
+ offset = length === 0 ? lastIndex + 1 : lastIndex;
6875
6949
  }
6876
- var result = ret + str.slice(lastIndex);
6950
+ const result = returnValue + input.slice(lastIndex);
6877
6951
  // Make sure we don't keep a reference to the final string.
6878
- ret = "";
6952
+ returnValue = "";
6879
6953
  return result;
6880
6954
  };
6881
6955
  }
@@ -6889,1017 +6963,892 @@ var decode_codepoint = {};
6889
6963
  * @param char The current character.
6890
6964
  * @returns The index of the next node, or -1 if no branch is taken.
6891
6965
  */
6892
- function determineBranch(decodeTree, current, nodeIdx, char) {
6893
- var branchCount = (current & BinTrieFlags.BRANCH_LENGTH) >> 7;
6894
- var jumpOffset = current & BinTrieFlags.JUMP_TABLE;
6966
+ function determineBranch(decodeTree, current, nodeIndex, char) {
6967
+ const branchCount = (current & bin_trie_flags_js_1.BinTrieFlags.BRANCH_LENGTH) >> 7;
6968
+ const jumpOffset = current & bin_trie_flags_js_1.BinTrieFlags.JUMP_TABLE;
6895
6969
  // Case 1: Single branch encoded in jump offset
6896
6970
  if (branchCount === 0) {
6897
- return jumpOffset !== 0 && char === jumpOffset ? nodeIdx : -1;
6971
+ return jumpOffset !== 0 && char === jumpOffset ? nodeIndex : -1;
6898
6972
  }
6899
6973
  // Case 2: Multiple branches encoded in jump table
6900
6974
  if (jumpOffset) {
6901
- var value = char - jumpOffset;
6975
+ const value = char - jumpOffset;
6902
6976
  return value < 0 || value >= branchCount
6903
6977
  ? -1
6904
- : decodeTree[nodeIdx + value] - 1;
6978
+ : decodeTree[nodeIndex + value] - 1;
6905
6979
  }
6906
- // Case 3: Multiple branches encoded in dictionary
6907
- // Binary search for the character.
6908
- var lo = nodeIdx;
6909
- var hi = lo + branchCount - 1;
6980
+ // Case 3: Multiple branches encoded in packed dictionary (two keys per uint16)
6981
+ const packedKeySlots = (branchCount + 1) >> 1;
6982
+ /*
6983
+ * Treat packed keys as a virtual sorted array of length `branchCount`.
6984
+ * Key(i) = low byte for even i, high byte for odd i in slot i>>1.
6985
+ */
6986
+ let lo = 0;
6987
+ let hi = branchCount - 1;
6910
6988
  while (lo <= hi) {
6911
- var mid = (lo + hi) >>> 1;
6912
- var midVal = decodeTree[mid];
6913
- if (midVal < char) {
6989
+ const mid = (lo + hi) >>> 1;
6990
+ const slot = mid >> 1;
6991
+ const packed = decodeTree[nodeIndex + slot];
6992
+ const midKey = (packed >> ((mid & 1) * 8)) & 0xff;
6993
+ if (midKey < char) {
6914
6994
  lo = mid + 1;
6915
6995
  }
6916
- else if (midVal > char) {
6996
+ else if (midKey > char) {
6917
6997
  hi = mid - 1;
6918
6998
  }
6919
6999
  else {
6920
- return decodeTree[mid + branchCount];
7000
+ return decodeTree[nodeIndex + packedKeySlots + mid];
6921
7001
  }
6922
7002
  }
6923
7003
  return -1;
6924
7004
  }
6925
- exports.determineBranch = determineBranch;
6926
- var htmlDecoder = getDecoder(decode_data_html_js_1.default);
6927
- var xmlDecoder = getDecoder(decode_data_xml_js_1.default);
7005
+ const htmlDecoder = /* #__PURE__ */ getDecoder(decode_data_html_js_1.htmlDecodeTree);
7006
+ const xmlDecoder = /* #__PURE__ */ getDecoder(decode_data_xml_js_1.xmlDecodeTree);
6928
7007
  /**
6929
7008
  * Decodes an HTML string.
6930
7009
  *
6931
- * @param str The string to decode.
7010
+ * @param htmlString The string to decode.
6932
7011
  * @param mode The decoding mode.
6933
7012
  * @returns The decoded string.
6934
7013
  */
6935
- function decodeHTML(str, mode) {
6936
- if (mode === void 0) { mode = DecodingMode.Legacy; }
6937
- return htmlDecoder(str, mode);
7014
+ function decodeHTML(htmlString, mode = DecodingMode.Legacy) {
7015
+ return htmlDecoder(htmlString, mode);
6938
7016
  }
6939
- exports.decodeHTML = decodeHTML;
6940
7017
  /**
6941
7018
  * Decodes an HTML string in an attribute.
6942
7019
  *
6943
- * @param str The string to decode.
7020
+ * @param htmlAttribute The string to decode.
6944
7021
  * @returns The decoded string.
6945
7022
  */
6946
- function decodeHTMLAttribute(str) {
6947
- return htmlDecoder(str, DecodingMode.Attribute);
7023
+ function decodeHTMLAttribute(htmlAttribute) {
7024
+ return htmlDecoder(htmlAttribute, DecodingMode.Attribute);
6948
7025
  }
6949
- exports.decodeHTMLAttribute = decodeHTMLAttribute;
6950
7026
  /**
6951
7027
  * Decodes an HTML string, requiring all entities to be terminated by a semicolon.
6952
7028
  *
6953
- * @param str The string to decode.
7029
+ * @param htmlString The string to decode.
6954
7030
  * @returns The decoded string.
6955
7031
  */
6956
- function decodeHTMLStrict(str) {
6957
- return htmlDecoder(str, DecodingMode.Strict);
7032
+ function decodeHTMLStrict(htmlString) {
7033
+ return htmlDecoder(htmlString, DecodingMode.Strict);
6958
7034
  }
6959
- exports.decodeHTMLStrict = decodeHTMLStrict;
6960
7035
  /**
6961
7036
  * Decodes an XML string, requiring all entities to be terminated by a semicolon.
6962
7037
  *
6963
- * @param str The string to decode.
7038
+ * @param xmlString The string to decode.
6964
7039
  * @returns The decoded string.
6965
7040
  */
6966
- function decodeXML(str) {
6967
- return xmlDecoder(str, DecodingMode.Strict);
7041
+ function decodeXML(xmlString) {
7042
+ return xmlDecoder(xmlString, DecodingMode.Strict);
6968
7043
  }
6969
- exports.decodeXML = decodeXML;
7044
+ var decode_codepoint_js_2 = decodeCodepoint;
7045
+ Object.defineProperty(exports, "decodeCodePoint", { enumerable: true, get: function () { return decode_codepoint_js_2.decodeCodePoint; } });
7046
+ Object.defineProperty(exports, "fromCodePoint", { enumerable: true, get: function () { return decode_codepoint_js_2.fromCodePoint; } });
7047
+ Object.defineProperty(exports, "replaceCodePoint", { enumerable: true, get: function () { return decode_codepoint_js_2.replaceCodePoint; } });
7048
+ // Re-export for use by eg. htmlparser2
7049
+ var decode_data_html_js_2 = decodeDataHtml$1;
7050
+ Object.defineProperty(exports, "htmlDecodeTree", { enumerable: true, get: function () { return decode_data_html_js_2.htmlDecodeTree; } });
7051
+ var decode_data_xml_js_2 = decodeDataXml$1;
7052
+ Object.defineProperty(exports, "xmlDecodeTree", { enumerable: true, get: function () { return decode_data_xml_js_2.xmlDecodeTree; } });
6970
7053
 
6971
- } (decode));
6972
-
6973
- (function (exports) {
6974
- Object.defineProperty(exports, "__esModule", { value: true });
6975
- exports.QuoteType = void 0;
6976
- var decode_js_1 = decode;
6977
- var CharCodes;
6978
- (function (CharCodes) {
6979
- CharCodes[CharCodes["Tab"] = 9] = "Tab";
6980
- CharCodes[CharCodes["NewLine"] = 10] = "NewLine";
6981
- CharCodes[CharCodes["FormFeed"] = 12] = "FormFeed";
6982
- CharCodes[CharCodes["CarriageReturn"] = 13] = "CarriageReturn";
6983
- CharCodes[CharCodes["Space"] = 32] = "Space";
6984
- CharCodes[CharCodes["ExclamationMark"] = 33] = "ExclamationMark";
6985
- CharCodes[CharCodes["Number"] = 35] = "Number";
6986
- CharCodes[CharCodes["Amp"] = 38] = "Amp";
6987
- CharCodes[CharCodes["SingleQuote"] = 39] = "SingleQuote";
6988
- CharCodes[CharCodes["DoubleQuote"] = 34] = "DoubleQuote";
6989
- CharCodes[CharCodes["Dash"] = 45] = "Dash";
6990
- CharCodes[CharCodes["Slash"] = 47] = "Slash";
6991
- CharCodes[CharCodes["Zero"] = 48] = "Zero";
6992
- CharCodes[CharCodes["Nine"] = 57] = "Nine";
6993
- CharCodes[CharCodes["Semi"] = 59] = "Semi";
6994
- CharCodes[CharCodes["Lt"] = 60] = "Lt";
6995
- CharCodes[CharCodes["Eq"] = 61] = "Eq";
6996
- CharCodes[CharCodes["Gt"] = 62] = "Gt";
6997
- CharCodes[CharCodes["Questionmark"] = 63] = "Questionmark";
6998
- CharCodes[CharCodes["UpperA"] = 65] = "UpperA";
6999
- CharCodes[CharCodes["LowerA"] = 97] = "LowerA";
7000
- CharCodes[CharCodes["UpperF"] = 70] = "UpperF";
7001
- CharCodes[CharCodes["LowerF"] = 102] = "LowerF";
7002
- CharCodes[CharCodes["UpperZ"] = 90] = "UpperZ";
7003
- CharCodes[CharCodes["LowerZ"] = 122] = "LowerZ";
7004
- CharCodes[CharCodes["LowerX"] = 120] = "LowerX";
7005
- CharCodes[CharCodes["OpeningSquareBracket"] = 91] = "OpeningSquareBracket";
7006
- })(CharCodes || (CharCodes = {}));
7007
- /** All the states the tokenizer can be in. */
7008
- var State;
7009
- (function (State) {
7010
- State[State["Text"] = 1] = "Text";
7011
- State[State["BeforeTagName"] = 2] = "BeforeTagName";
7012
- State[State["InTagName"] = 3] = "InTagName";
7013
- State[State["InSelfClosingTag"] = 4] = "InSelfClosingTag";
7014
- State[State["BeforeClosingTagName"] = 5] = "BeforeClosingTagName";
7015
- State[State["InClosingTagName"] = 6] = "InClosingTagName";
7016
- State[State["AfterClosingTagName"] = 7] = "AfterClosingTagName";
7017
- // Attributes
7018
- State[State["BeforeAttributeName"] = 8] = "BeforeAttributeName";
7019
- State[State["InAttributeName"] = 9] = "InAttributeName";
7020
- State[State["AfterAttributeName"] = 10] = "AfterAttributeName";
7021
- State[State["BeforeAttributeValue"] = 11] = "BeforeAttributeValue";
7022
- State[State["InAttributeValueDq"] = 12] = "InAttributeValueDq";
7023
- State[State["InAttributeValueSq"] = 13] = "InAttributeValueSq";
7024
- State[State["InAttributeValueNq"] = 14] = "InAttributeValueNq";
7025
- // Declarations
7026
- State[State["BeforeDeclaration"] = 15] = "BeforeDeclaration";
7027
- State[State["InDeclaration"] = 16] = "InDeclaration";
7028
- // Processing instructions
7029
- State[State["InProcessingInstruction"] = 17] = "InProcessingInstruction";
7030
- // Comments & CDATA
7031
- State[State["BeforeComment"] = 18] = "BeforeComment";
7032
- State[State["CDATASequence"] = 19] = "CDATASequence";
7033
- State[State["InSpecialComment"] = 20] = "InSpecialComment";
7034
- State[State["InCommentLike"] = 21] = "InCommentLike";
7035
- // Special tags
7036
- State[State["BeforeSpecialS"] = 22] = "BeforeSpecialS";
7037
- State[State["SpecialStartSequence"] = 23] = "SpecialStartSequence";
7038
- State[State["InSpecialTag"] = 24] = "InSpecialTag";
7039
- State[State["BeforeEntity"] = 25] = "BeforeEntity";
7040
- State[State["BeforeNumericEntity"] = 26] = "BeforeNumericEntity";
7041
- State[State["InNamedEntity"] = 27] = "InNamedEntity";
7042
- State[State["InNumericEntity"] = 28] = "InNumericEntity";
7043
- State[State["InHexEntity"] = 29] = "InHexEntity";
7044
- })(State || (State = {}));
7045
- function isWhitespace(c) {
7046
- return (c === CharCodes.Space ||
7047
- c === CharCodes.NewLine ||
7048
- c === CharCodes.Tab ||
7049
- c === CharCodes.FormFeed ||
7050
- c === CharCodes.CarriageReturn);
7051
- }
7052
- function isEndOfTagSection(c) {
7053
- return c === CharCodes.Slash || c === CharCodes.Gt || isWhitespace(c);
7054
- }
7055
- function isNumber(c) {
7056
- return c >= CharCodes.Zero && c <= CharCodes.Nine;
7057
- }
7058
- function isASCIIAlpha(c) {
7059
- return ((c >= CharCodes.LowerA && c <= CharCodes.LowerZ) ||
7060
- (c >= CharCodes.UpperA && c <= CharCodes.UpperZ));
7061
- }
7062
- function isHexDigit(c) {
7063
- return ((c >= CharCodes.UpperA && c <= CharCodes.UpperF) ||
7064
- (c >= CharCodes.LowerA && c <= CharCodes.LowerF));
7065
- }
7066
- var QuoteType;
7067
- (function (QuoteType) {
7068
- QuoteType[QuoteType["NoValue"] = 0] = "NoValue";
7069
- QuoteType[QuoteType["Unquoted"] = 1] = "Unquoted";
7070
- QuoteType[QuoteType["Single"] = 2] = "Single";
7071
- QuoteType[QuoteType["Double"] = 3] = "Double";
7072
- })(QuoteType = exports.QuoteType || (exports.QuoteType = {}));
7073
- /**
7074
- * Sequences used to match longer strings.
7075
- *
7076
- * We don't have `Script`, `Style`, or `Title` here. Instead, we re-use the *End
7077
- * sequences with an increased offset.
7078
- */
7079
- var Sequences = {
7080
- Cdata: new Uint8Array([0x43, 0x44, 0x41, 0x54, 0x41, 0x5b]),
7081
- CdataEnd: new Uint8Array([0x5d, 0x5d, 0x3e]),
7082
- CommentEnd: new Uint8Array([0x2d, 0x2d, 0x3e]),
7083
- ScriptEnd: new Uint8Array([0x3c, 0x2f, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74]),
7084
- StyleEnd: new Uint8Array([0x3c, 0x2f, 0x73, 0x74, 0x79, 0x6c, 0x65]),
7085
- TitleEnd: new Uint8Array([0x3c, 0x2f, 0x74, 0x69, 0x74, 0x6c, 0x65]), // `</title`
7086
- };
7087
- var Tokenizer = /** @class */ (function () {
7088
- function Tokenizer(_a, cbs) {
7089
- var _b = _a.xmlMode, xmlMode = _b === void 0 ? false : _b, _c = _a.decodeEntities, decodeEntities = _c === void 0 ? true : _c;
7090
- this.cbs = cbs;
7091
- /** The current state the tokenizer is in. */
7092
- this.state = State.Text;
7093
- /** The read buffer. */
7094
- this.buffer = "";
7095
- /** The beginning of the section that is currently being read. */
7096
- this.sectionStart = 0;
7097
- /** The index within the buffer that we are currently looking at. */
7098
- this.index = 0;
7099
- /** Some behavior, eg. when decoding entities, is done while we are in another state. This keeps track of the other state type. */
7100
- this.baseState = State.Text;
7101
- /** For special parsing behavior inside of script and style tags. */
7102
- this.isSpecial = false;
7103
- /** Indicates whether the tokenizer has been paused. */
7104
- this.running = true;
7105
- /** The offset of the current buffer. */
7106
- this.offset = 0;
7107
- this.currentSequence = undefined;
7108
- this.sequenceIndex = 0;
7109
- this.trieIndex = 0;
7110
- this.trieCurrent = 0;
7111
- /** For named entities, the index of the value. For numeric entities, the code point. */
7112
- this.entityResult = 0;
7113
- this.entityExcess = 0;
7114
- this.xmlMode = xmlMode;
7115
- this.decodeEntities = decodeEntities;
7116
- this.entityTrie = xmlMode ? decode_js_1.xmlDecodeTree : decode_js_1.htmlDecodeTree;
7117
- }
7118
- Tokenizer.prototype.reset = function () {
7119
- this.state = State.Text;
7120
- this.buffer = "";
7121
- this.sectionStart = 0;
7122
- this.index = 0;
7123
- this.baseState = State.Text;
7124
- this.currentSequence = undefined;
7125
- this.running = true;
7126
- this.offset = 0;
7127
- };
7128
- Tokenizer.prototype.write = function (chunk) {
7129
- this.offset += this.buffer.length;
7130
- this.buffer = chunk;
7131
- this.parse();
7132
- };
7133
- Tokenizer.prototype.end = function () {
7134
- if (this.running)
7135
- this.finish();
7136
- };
7137
- Tokenizer.prototype.pause = function () {
7138
- this.running = false;
7139
- };
7140
- Tokenizer.prototype.resume = function () {
7141
- this.running = true;
7142
- if (this.index < this.buffer.length + this.offset) {
7143
- this.parse();
7144
- }
7145
- };
7146
- /**
7147
- * The current index within all of the written data.
7148
- */
7149
- Tokenizer.prototype.getIndex = function () {
7150
- return this.index;
7151
- };
7152
- /**
7153
- * The start of the current section.
7154
- */
7155
- Tokenizer.prototype.getSectionStart = function () {
7156
- return this.sectionStart;
7157
- };
7158
- Tokenizer.prototype.stateText = function (c) {
7159
- if (c === CharCodes.Lt ||
7160
- (!this.decodeEntities && this.fastForwardTo(CharCodes.Lt))) {
7161
- if (this.index > this.sectionStart) {
7162
- this.cbs.ontext(this.sectionStart, this.index);
7163
- }
7164
- this.state = State.BeforeTagName;
7165
- this.sectionStart = this.index;
7166
- }
7167
- else if (this.decodeEntities && c === CharCodes.Amp) {
7168
- this.state = State.BeforeEntity;
7169
- }
7170
- };
7171
- Tokenizer.prototype.stateSpecialStartSequence = function (c) {
7172
- var isEnd = this.sequenceIndex === this.currentSequence.length;
7173
- var isMatch = isEnd
7174
- ? // If we are at the end of the sequence, make sure the tag name has ended
7175
- isEndOfTagSection(c)
7176
- : // Otherwise, do a case-insensitive comparison
7177
- (c | 0x20) === this.currentSequence[this.sequenceIndex];
7178
- if (!isMatch) {
7179
- this.isSpecial = false;
7180
- }
7181
- else if (!isEnd) {
7182
- this.sequenceIndex++;
7183
- return;
7184
- }
7185
- this.sequenceIndex = 0;
7186
- this.state = State.InTagName;
7187
- this.stateInTagName(c);
7188
- };
7189
- /** Look for an end tag. For <title> tags, also decode entities. */
7190
- Tokenizer.prototype.stateInSpecialTag = function (c) {
7191
- if (this.sequenceIndex === this.currentSequence.length) {
7192
- if (c === CharCodes.Gt || isWhitespace(c)) {
7193
- var endOfText = this.index - this.currentSequence.length;
7194
- if (this.sectionStart < endOfText) {
7195
- // Spoof the index so that reported locations match up.
7196
- var actualIndex = this.index;
7197
- this.index = endOfText;
7198
- this.cbs.ontext(this.sectionStart, endOfText);
7199
- this.index = actualIndex;
7200
- }
7201
- this.isSpecial = false;
7202
- this.sectionStart = endOfText + 2; // Skip over the `</`
7203
- this.stateInClosingTagName(c);
7204
- return; // We are done; skip the rest of the function.
7205
- }
7206
- this.sequenceIndex = 0;
7207
- }
7208
- if ((c | 0x20) === this.currentSequence[this.sequenceIndex]) {
7209
- this.sequenceIndex += 1;
7210
- }
7211
- else if (this.sequenceIndex === 0) {
7212
- if (this.currentSequence === Sequences.TitleEnd) {
7213
- // We have to parse entities in <title> tags.
7214
- if (this.decodeEntities && c === CharCodes.Amp) {
7215
- this.state = State.BeforeEntity;
7216
- }
7217
- }
7218
- else if (this.fastForwardTo(CharCodes.Lt)) {
7219
- // Outside of <title> tags, we can fast-forward.
7220
- this.sequenceIndex = 1;
7221
- }
7222
- }
7223
- else {
7224
- // If we see a `<`, set the sequence index to 1; useful for eg. `<</script>`.
7225
- this.sequenceIndex = Number(c === CharCodes.Lt);
7226
- }
7227
- };
7228
- Tokenizer.prototype.stateCDATASequence = function (c) {
7229
- if (c === Sequences.Cdata[this.sequenceIndex]) {
7230
- if (++this.sequenceIndex === Sequences.Cdata.length) {
7231
- this.state = State.InCommentLike;
7232
- this.currentSequence = Sequences.CdataEnd;
7233
- this.sequenceIndex = 0;
7234
- this.sectionStart = this.index + 1;
7235
- }
7236
- }
7237
- else {
7238
- this.sequenceIndex = 0;
7239
- this.state = State.InDeclaration;
7240
- this.stateInDeclaration(c); // Reconsume the character
7241
- }
7242
- };
7243
- /**
7244
- * When we wait for one specific character, we can speed things up
7245
- * by skipping through the buffer until we find it.
7246
- *
7247
- * @returns Whether the character was found.
7248
- */
7249
- Tokenizer.prototype.fastForwardTo = function (c) {
7250
- while (++this.index < this.buffer.length + this.offset) {
7251
- if (this.buffer.charCodeAt(this.index - this.offset) === c) {
7252
- return true;
7253
- }
7254
- }
7255
- /*
7256
- * We increment the index at the end of the `parse` loop,
7257
- * so set it to `buffer.length - 1` here.
7258
- *
7259
- * TODO: Refactor `parse` to increment index before calling states.
7260
- */
7261
- this.index = this.buffer.length + this.offset - 1;
7262
- return false;
7263
- };
7264
- /**
7265
- * Comments and CDATA end with `-->` and `]]>`.
7266
- *
7267
- * Their common qualities are:
7268
- * - Their end sequences have a distinct character they start with.
7269
- * - That character is then repeated, so we have to check multiple repeats.
7270
- * - All characters but the start character of the sequence can be skipped.
7271
- */
7272
- Tokenizer.prototype.stateInCommentLike = function (c) {
7273
- if (c === this.currentSequence[this.sequenceIndex]) {
7274
- if (++this.sequenceIndex === this.currentSequence.length) {
7275
- if (this.currentSequence === Sequences.CdataEnd) {
7276
- this.cbs.oncdata(this.sectionStart, this.index, 2);
7277
- }
7278
- else {
7279
- this.cbs.oncomment(this.sectionStart, this.index, 2);
7280
- }
7281
- this.sequenceIndex = 0;
7282
- this.sectionStart = this.index + 1;
7283
- this.state = State.Text;
7284
- }
7285
- }
7286
- else if (this.sequenceIndex === 0) {
7287
- // Fast-forward to the first character of the sequence
7288
- if (this.fastForwardTo(this.currentSequence[0])) {
7289
- this.sequenceIndex = 1;
7290
- }
7291
- }
7292
- else if (c !== this.currentSequence[this.sequenceIndex - 1]) {
7293
- // Allow long sequences, eg. --->, ]]]>
7294
- this.sequenceIndex = 0;
7295
- }
7296
- };
7297
- /**
7298
- * HTML only allows ASCII alpha characters (a-z and A-Z) at the beginning of a tag name.
7299
- *
7300
- * XML allows a lot more characters here (@see https://www.w3.org/TR/REC-xml/#NT-NameStartChar).
7301
- * We allow anything that wouldn't end the tag.
7302
- */
7303
- Tokenizer.prototype.isTagStartChar = function (c) {
7304
- return this.xmlMode ? !isEndOfTagSection(c) : isASCIIAlpha(c);
7305
- };
7306
- Tokenizer.prototype.startSpecial = function (sequence, offset) {
7307
- this.isSpecial = true;
7308
- this.currentSequence = sequence;
7309
- this.sequenceIndex = offset;
7310
- this.state = State.SpecialStartSequence;
7311
- };
7312
- Tokenizer.prototype.stateBeforeTagName = function (c) {
7313
- if (c === CharCodes.ExclamationMark) {
7314
- this.state = State.BeforeDeclaration;
7315
- this.sectionStart = this.index + 1;
7316
- }
7317
- else if (c === CharCodes.Questionmark) {
7318
- this.state = State.InProcessingInstruction;
7319
- this.sectionStart = this.index + 1;
7320
- }
7321
- else if (this.isTagStartChar(c)) {
7322
- var lower = c | 0x20;
7323
- this.sectionStart = this.index;
7324
- if (!this.xmlMode && lower === Sequences.TitleEnd[2]) {
7325
- this.startSpecial(Sequences.TitleEnd, 3);
7326
- }
7327
- else {
7328
- this.state =
7329
- !this.xmlMode && lower === Sequences.ScriptEnd[2]
7330
- ? State.BeforeSpecialS
7331
- : State.InTagName;
7332
- }
7333
- }
7334
- else if (c === CharCodes.Slash) {
7335
- this.state = State.BeforeClosingTagName;
7336
- }
7337
- else {
7338
- this.state = State.Text;
7339
- this.stateText(c);
7340
- }
7341
- };
7342
- Tokenizer.prototype.stateInTagName = function (c) {
7343
- if (isEndOfTagSection(c)) {
7344
- this.cbs.onopentagname(this.sectionStart, this.index);
7345
- this.sectionStart = -1;
7346
- this.state = State.BeforeAttributeName;
7347
- this.stateBeforeAttributeName(c);
7348
- }
7349
- };
7350
- Tokenizer.prototype.stateBeforeClosingTagName = function (c) {
7351
- if (isWhitespace(c)) ;
7352
- else if (c === CharCodes.Gt) {
7353
- this.state = State.Text;
7354
- }
7355
- else {
7356
- this.state = this.isTagStartChar(c)
7357
- ? State.InClosingTagName
7358
- : State.InSpecialComment;
7359
- this.sectionStart = this.index;
7360
- }
7361
- };
7362
- Tokenizer.prototype.stateInClosingTagName = function (c) {
7363
- if (c === CharCodes.Gt || isWhitespace(c)) {
7364
- this.cbs.onclosetag(this.sectionStart, this.index);
7365
- this.sectionStart = -1;
7366
- this.state = State.AfterClosingTagName;
7367
- this.stateAfterClosingTagName(c);
7368
- }
7369
- };
7370
- Tokenizer.prototype.stateAfterClosingTagName = function (c) {
7371
- // Skip everything until ">"
7372
- if (c === CharCodes.Gt || this.fastForwardTo(CharCodes.Gt)) {
7373
- this.state = State.Text;
7374
- this.baseState = State.Text;
7375
- this.sectionStart = this.index + 1;
7376
- }
7377
- };
7378
- Tokenizer.prototype.stateBeforeAttributeName = function (c) {
7379
- if (c === CharCodes.Gt) {
7380
- this.cbs.onopentagend(this.index);
7381
- if (this.isSpecial) {
7382
- this.state = State.InSpecialTag;
7383
- this.sequenceIndex = 0;
7384
- }
7385
- else {
7386
- this.state = State.Text;
7387
- }
7388
- this.baseState = this.state;
7389
- this.sectionStart = this.index + 1;
7390
- }
7391
- else if (c === CharCodes.Slash) {
7392
- this.state = State.InSelfClosingTag;
7393
- }
7394
- else if (!isWhitespace(c)) {
7395
- this.state = State.InAttributeName;
7396
- this.sectionStart = this.index;
7397
- }
7398
- };
7399
- Tokenizer.prototype.stateInSelfClosingTag = function (c) {
7400
- if (c === CharCodes.Gt) {
7401
- this.cbs.onselfclosingtag(this.index);
7402
- this.state = State.Text;
7403
- this.baseState = State.Text;
7404
- this.sectionStart = this.index + 1;
7405
- this.isSpecial = false; // Reset special state, in case of self-closing special tags
7406
- }
7407
- else if (!isWhitespace(c)) {
7408
- this.state = State.BeforeAttributeName;
7409
- this.stateBeforeAttributeName(c);
7410
- }
7411
- };
7412
- Tokenizer.prototype.stateInAttributeName = function (c) {
7413
- if (c === CharCodes.Eq || isEndOfTagSection(c)) {
7414
- this.cbs.onattribname(this.sectionStart, this.index);
7415
- this.sectionStart = -1;
7416
- this.state = State.AfterAttributeName;
7417
- this.stateAfterAttributeName(c);
7418
- }
7419
- };
7420
- Tokenizer.prototype.stateAfterAttributeName = function (c) {
7421
- if (c === CharCodes.Eq) {
7422
- this.state = State.BeforeAttributeValue;
7423
- }
7424
- else if (c === CharCodes.Slash || c === CharCodes.Gt) {
7425
- this.cbs.onattribend(QuoteType.NoValue, this.index);
7426
- this.state = State.BeforeAttributeName;
7427
- this.stateBeforeAttributeName(c);
7428
- }
7429
- else if (!isWhitespace(c)) {
7430
- this.cbs.onattribend(QuoteType.NoValue, this.index);
7431
- this.state = State.InAttributeName;
7432
- this.sectionStart = this.index;
7433
- }
7434
- };
7435
- Tokenizer.prototype.stateBeforeAttributeValue = function (c) {
7436
- if (c === CharCodes.DoubleQuote) {
7437
- this.state = State.InAttributeValueDq;
7438
- this.sectionStart = this.index + 1;
7439
- }
7440
- else if (c === CharCodes.SingleQuote) {
7441
- this.state = State.InAttributeValueSq;
7442
- this.sectionStart = this.index + 1;
7443
- }
7444
- else if (!isWhitespace(c)) {
7445
- this.sectionStart = this.index;
7446
- this.state = State.InAttributeValueNq;
7447
- this.stateInAttributeValueNoQuotes(c); // Reconsume token
7448
- }
7449
- };
7450
- Tokenizer.prototype.handleInAttributeValue = function (c, quote) {
7451
- if (c === quote ||
7452
- (!this.decodeEntities && this.fastForwardTo(quote))) {
7453
- this.cbs.onattribdata(this.sectionStart, this.index);
7454
- this.sectionStart = -1;
7455
- this.cbs.onattribend(quote === CharCodes.DoubleQuote
7456
- ? QuoteType.Double
7457
- : QuoteType.Single, this.index);
7458
- this.state = State.BeforeAttributeName;
7459
- }
7460
- else if (this.decodeEntities && c === CharCodes.Amp) {
7461
- this.baseState = this.state;
7462
- this.state = State.BeforeEntity;
7463
- }
7464
- };
7465
- Tokenizer.prototype.stateInAttributeValueDoubleQuotes = function (c) {
7466
- this.handleInAttributeValue(c, CharCodes.DoubleQuote);
7467
- };
7468
- Tokenizer.prototype.stateInAttributeValueSingleQuotes = function (c) {
7469
- this.handleInAttributeValue(c, CharCodes.SingleQuote);
7470
- };
7471
- Tokenizer.prototype.stateInAttributeValueNoQuotes = function (c) {
7472
- if (isWhitespace(c) || c === CharCodes.Gt) {
7473
- this.cbs.onattribdata(this.sectionStart, this.index);
7474
- this.sectionStart = -1;
7475
- this.cbs.onattribend(QuoteType.Unquoted, this.index);
7476
- this.state = State.BeforeAttributeName;
7477
- this.stateBeforeAttributeName(c);
7478
- }
7479
- else if (this.decodeEntities && c === CharCodes.Amp) {
7480
- this.baseState = this.state;
7481
- this.state = State.BeforeEntity;
7482
- }
7483
- };
7484
- Tokenizer.prototype.stateBeforeDeclaration = function (c) {
7485
- if (c === CharCodes.OpeningSquareBracket) {
7486
- this.state = State.CDATASequence;
7487
- this.sequenceIndex = 0;
7488
- }
7489
- else {
7490
- this.state =
7491
- c === CharCodes.Dash
7492
- ? State.BeforeComment
7493
- : State.InDeclaration;
7494
- }
7495
- };
7496
- Tokenizer.prototype.stateInDeclaration = function (c) {
7497
- if (c === CharCodes.Gt || this.fastForwardTo(CharCodes.Gt)) {
7498
- this.cbs.ondeclaration(this.sectionStart, this.index);
7499
- this.state = State.Text;
7500
- this.sectionStart = this.index + 1;
7501
- }
7502
- };
7503
- Tokenizer.prototype.stateInProcessingInstruction = function (c) {
7504
- if (c === CharCodes.Gt || this.fastForwardTo(CharCodes.Gt)) {
7505
- this.cbs.onprocessinginstruction(this.sectionStart, this.index);
7506
- this.state = State.Text;
7507
- this.sectionStart = this.index + 1;
7508
- }
7509
- };
7510
- Tokenizer.prototype.stateBeforeComment = function (c) {
7511
- if (c === CharCodes.Dash) {
7512
- this.state = State.InCommentLike;
7513
- this.currentSequence = Sequences.CommentEnd;
7514
- // Allow short comments (eg. <!-->)
7515
- this.sequenceIndex = 2;
7516
- this.sectionStart = this.index + 1;
7517
- }
7518
- else {
7519
- this.state = State.InDeclaration;
7520
- }
7521
- };
7522
- Tokenizer.prototype.stateInSpecialComment = function (c) {
7523
- if (c === CharCodes.Gt || this.fastForwardTo(CharCodes.Gt)) {
7524
- this.cbs.oncomment(this.sectionStart, this.index, 0);
7525
- this.state = State.Text;
7526
- this.sectionStart = this.index + 1;
7527
- }
7528
- };
7529
- Tokenizer.prototype.stateBeforeSpecialS = function (c) {
7530
- var lower = c | 0x20;
7531
- if (lower === Sequences.ScriptEnd[3]) {
7532
- this.startSpecial(Sequences.ScriptEnd, 4);
7533
- }
7534
- else if (lower === Sequences.StyleEnd[3]) {
7535
- this.startSpecial(Sequences.StyleEnd, 4);
7536
- }
7537
- else {
7538
- this.state = State.InTagName;
7539
- this.stateInTagName(c); // Consume the token again
7540
- }
7541
- };
7542
- Tokenizer.prototype.stateBeforeEntity = function (c) {
7543
- // Start excess with 1 to include the '&'
7544
- this.entityExcess = 1;
7545
- this.entityResult = 0;
7546
- if (c === CharCodes.Number) {
7547
- this.state = State.BeforeNumericEntity;
7548
- }
7549
- else if (c === CharCodes.Amp) ;
7550
- else {
7551
- this.trieIndex = 0;
7552
- this.trieCurrent = this.entityTrie[0];
7553
- this.state = State.InNamedEntity;
7554
- this.stateInNamedEntity(c);
7555
- }
7556
- };
7557
- Tokenizer.prototype.stateInNamedEntity = function (c) {
7558
- this.entityExcess += 1;
7559
- this.trieIndex = (0, decode_js_1.determineBranch)(this.entityTrie, this.trieCurrent, this.trieIndex + 1, c);
7560
- if (this.trieIndex < 0) {
7561
- this.emitNamedEntity();
7562
- this.index--;
7563
- return;
7564
- }
7565
- this.trieCurrent = this.entityTrie[this.trieIndex];
7566
- var masked = this.trieCurrent & decode_js_1.BinTrieFlags.VALUE_LENGTH;
7567
- // If the branch is a value, store it and continue
7568
- if (masked) {
7569
- // The mask is the number of bytes of the value, including the current byte.
7570
- var valueLength = (masked >> 14) - 1;
7571
- // If we have a legacy entity while parsing strictly, just skip the number of bytes
7572
- if (!this.allowLegacyEntity() && c !== CharCodes.Semi) {
7573
- this.trieIndex += valueLength;
7574
- }
7575
- else {
7576
- // Add 1 as we have already incremented the excess
7577
- var entityStart = this.index - this.entityExcess + 1;
7578
- if (entityStart > this.sectionStart) {
7579
- this.emitPartial(this.sectionStart, entityStart);
7580
- }
7581
- // If this is a surrogate pair, consume the next two bytes
7582
- this.entityResult = this.trieIndex;
7583
- this.trieIndex += valueLength;
7584
- this.entityExcess = 0;
7585
- this.sectionStart = this.index + 1;
7586
- if (valueLength === 0) {
7587
- this.emitNamedEntity();
7588
- }
7589
- }
7590
- }
7591
- };
7592
- Tokenizer.prototype.emitNamedEntity = function () {
7593
- this.state = this.baseState;
7594
- if (this.entityResult === 0) {
7595
- return;
7596
- }
7597
- var valueLength = (this.entityTrie[this.entityResult] & decode_js_1.BinTrieFlags.VALUE_LENGTH) >>
7598
- 14;
7599
- switch (valueLength) {
7600
- case 1: {
7601
- this.emitCodePoint(this.entityTrie[this.entityResult] &
7602
- ~decode_js_1.BinTrieFlags.VALUE_LENGTH);
7603
- break;
7604
- }
7605
- case 2: {
7606
- this.emitCodePoint(this.entityTrie[this.entityResult + 1]);
7607
- break;
7608
- }
7609
- case 3: {
7610
- this.emitCodePoint(this.entityTrie[this.entityResult + 1]);
7611
- this.emitCodePoint(this.entityTrie[this.entityResult + 2]);
7612
- }
7613
- }
7614
- };
7615
- Tokenizer.prototype.stateBeforeNumericEntity = function (c) {
7616
- if ((c | 0x20) === CharCodes.LowerX) {
7617
- this.entityExcess++;
7618
- this.state = State.InHexEntity;
7619
- }
7620
- else {
7621
- this.state = State.InNumericEntity;
7622
- this.stateInNumericEntity(c);
7623
- }
7624
- };
7625
- Tokenizer.prototype.emitNumericEntity = function (strict) {
7626
- var entityStart = this.index - this.entityExcess - 1;
7627
- var numberStart = entityStart + 2 + Number(this.state === State.InHexEntity);
7628
- if (numberStart !== this.index) {
7629
- // Emit leading data if any
7630
- if (entityStart > this.sectionStart) {
7631
- this.emitPartial(this.sectionStart, entityStart);
7632
- }
7633
- this.sectionStart = this.index + Number(strict);
7634
- this.emitCodePoint((0, decode_js_1.replaceCodePoint)(this.entityResult));
7635
- }
7636
- this.state = this.baseState;
7637
- };
7638
- Tokenizer.prototype.stateInNumericEntity = function (c) {
7639
- if (c === CharCodes.Semi) {
7640
- this.emitNumericEntity(true);
7641
- }
7642
- else if (isNumber(c)) {
7643
- this.entityResult = this.entityResult * 10 + (c - CharCodes.Zero);
7644
- this.entityExcess++;
7645
- }
7646
- else {
7647
- if (this.allowLegacyEntity()) {
7648
- this.emitNumericEntity(false);
7649
- }
7650
- else {
7651
- this.state = this.baseState;
7652
- }
7653
- this.index--;
7654
- }
7655
- };
7656
- Tokenizer.prototype.stateInHexEntity = function (c) {
7657
- if (c === CharCodes.Semi) {
7658
- this.emitNumericEntity(true);
7659
- }
7660
- else if (isNumber(c)) {
7661
- this.entityResult = this.entityResult * 16 + (c - CharCodes.Zero);
7662
- this.entityExcess++;
7663
- }
7664
- else if (isHexDigit(c)) {
7665
- this.entityResult =
7666
- this.entityResult * 16 + ((c | 0x20) - CharCodes.LowerA + 10);
7667
- this.entityExcess++;
7668
- }
7669
- else {
7670
- if (this.allowLegacyEntity()) {
7671
- this.emitNumericEntity(false);
7672
- }
7673
- else {
7674
- this.state = this.baseState;
7675
- }
7676
- this.index--;
7677
- }
7678
- };
7679
- Tokenizer.prototype.allowLegacyEntity = function () {
7680
- return (!this.xmlMode &&
7681
- (this.baseState === State.Text ||
7682
- this.baseState === State.InSpecialTag));
7683
- };
7684
- /**
7685
- * Remove data that has already been consumed from the buffer.
7686
- */
7687
- Tokenizer.prototype.cleanup = function () {
7688
- // If we are inside of text or attributes, emit what we already have.
7689
- if (this.running && this.sectionStart !== this.index) {
7690
- if (this.state === State.Text ||
7691
- (this.state === State.InSpecialTag && this.sequenceIndex === 0)) {
7692
- this.cbs.ontext(this.sectionStart, this.index);
7693
- this.sectionStart = this.index;
7694
- }
7695
- else if (this.state === State.InAttributeValueDq ||
7696
- this.state === State.InAttributeValueSq ||
7697
- this.state === State.InAttributeValueNq) {
7698
- this.cbs.onattribdata(this.sectionStart, this.index);
7699
- this.sectionStart = this.index;
7700
- }
7701
- }
7702
- };
7703
- Tokenizer.prototype.shouldContinue = function () {
7704
- return this.index < this.buffer.length + this.offset && this.running;
7705
- };
7706
- /**
7707
- * Iterates through the buffer, calling the function corresponding to the current state.
7708
- *
7709
- * States that are more likely to be hit are higher up, as a performance improvement.
7710
- */
7711
- Tokenizer.prototype.parse = function () {
7712
- while (this.shouldContinue()) {
7713
- var c = this.buffer.charCodeAt(this.index - this.offset);
7714
- switch (this.state) {
7715
- case State.Text: {
7716
- this.stateText(c);
7717
- break;
7718
- }
7719
- case State.SpecialStartSequence: {
7720
- this.stateSpecialStartSequence(c);
7721
- break;
7722
- }
7723
- case State.InSpecialTag: {
7724
- this.stateInSpecialTag(c);
7725
- break;
7726
- }
7727
- case State.CDATASequence: {
7728
- this.stateCDATASequence(c);
7729
- break;
7730
- }
7731
- case State.InAttributeValueDq: {
7732
- this.stateInAttributeValueDoubleQuotes(c);
7733
- break;
7734
- }
7735
- case State.InAttributeName: {
7736
- this.stateInAttributeName(c);
7737
- break;
7738
- }
7739
- case State.InCommentLike: {
7740
- this.stateInCommentLike(c);
7741
- break;
7742
- }
7743
- case State.InSpecialComment: {
7744
- this.stateInSpecialComment(c);
7745
- break;
7746
- }
7747
- case State.BeforeAttributeName: {
7748
- this.stateBeforeAttributeName(c);
7749
- break;
7750
- }
7751
- case State.InTagName: {
7752
- this.stateInTagName(c);
7753
- break;
7754
- }
7755
- case State.InClosingTagName: {
7756
- this.stateInClosingTagName(c);
7757
- break;
7758
- }
7759
- case State.BeforeTagName: {
7760
- this.stateBeforeTagName(c);
7761
- break;
7762
- }
7763
- case State.AfterAttributeName: {
7764
- this.stateAfterAttributeName(c);
7765
- break;
7766
- }
7767
- case State.InAttributeValueSq: {
7768
- this.stateInAttributeValueSingleQuotes(c);
7769
- break;
7770
- }
7771
- case State.BeforeAttributeValue: {
7772
- this.stateBeforeAttributeValue(c);
7773
- break;
7774
- }
7775
- case State.BeforeClosingTagName: {
7776
- this.stateBeforeClosingTagName(c);
7777
- break;
7778
- }
7779
- case State.AfterClosingTagName: {
7780
- this.stateAfterClosingTagName(c);
7781
- break;
7782
- }
7783
- case State.BeforeSpecialS: {
7784
- this.stateBeforeSpecialS(c);
7785
- break;
7786
- }
7787
- case State.InAttributeValueNq: {
7788
- this.stateInAttributeValueNoQuotes(c);
7789
- break;
7790
- }
7791
- case State.InSelfClosingTag: {
7792
- this.stateInSelfClosingTag(c);
7793
- break;
7794
- }
7795
- case State.InDeclaration: {
7796
- this.stateInDeclaration(c);
7797
- break;
7798
- }
7799
- case State.BeforeDeclaration: {
7800
- this.stateBeforeDeclaration(c);
7801
- break;
7802
- }
7803
- case State.BeforeComment: {
7804
- this.stateBeforeComment(c);
7805
- break;
7806
- }
7807
- case State.InProcessingInstruction: {
7808
- this.stateInProcessingInstruction(c);
7809
- break;
7810
- }
7811
- case State.InNamedEntity: {
7812
- this.stateInNamedEntity(c);
7813
- break;
7814
- }
7815
- case State.BeforeEntity: {
7816
- this.stateBeforeEntity(c);
7817
- break;
7818
- }
7819
- case State.InHexEntity: {
7820
- this.stateInHexEntity(c);
7821
- break;
7822
- }
7823
- case State.InNumericEntity: {
7824
- this.stateInNumericEntity(c);
7825
- break;
7826
- }
7827
- default: {
7828
- // `this._state === State.BeforeNumericEntity`
7829
- this.stateBeforeNumericEntity(c);
7830
- }
7831
- }
7832
- this.index++;
7833
- }
7834
- this.cleanup();
7835
- };
7836
- Tokenizer.prototype.finish = function () {
7837
- if (this.state === State.InNamedEntity) {
7838
- this.emitNamedEntity();
7839
- }
7840
- // If there is remaining data, emit it in a reasonable way
7841
- if (this.sectionStart < this.index) {
7842
- this.handleTrailingData();
7843
- }
7844
- this.cbs.onend();
7845
- };
7846
- /** Handle any trailing data. */
7847
- Tokenizer.prototype.handleTrailingData = function () {
7848
- var endIndex = this.buffer.length + this.offset;
7849
- if (this.state === State.InCommentLike) {
7850
- if (this.currentSequence === Sequences.CdataEnd) {
7851
- this.cbs.oncdata(this.sectionStart, endIndex, 0);
7852
- }
7853
- else {
7854
- this.cbs.oncomment(this.sectionStart, endIndex, 0);
7855
- }
7856
- }
7857
- else if (this.state === State.InNumericEntity &&
7858
- this.allowLegacyEntity()) {
7859
- this.emitNumericEntity(false);
7860
- // All trailing data will have been consumed
7861
- }
7862
- else if (this.state === State.InHexEntity &&
7863
- this.allowLegacyEntity()) {
7864
- this.emitNumericEntity(false);
7865
- // All trailing data will have been consumed
7866
- }
7867
- else if (this.state === State.InTagName ||
7868
- this.state === State.BeforeAttributeName ||
7869
- this.state === State.BeforeAttributeValue ||
7870
- this.state === State.AfterAttributeName ||
7871
- this.state === State.InAttributeName ||
7872
- this.state === State.InAttributeValueSq ||
7873
- this.state === State.InAttributeValueDq ||
7874
- this.state === State.InAttributeValueNq ||
7875
- this.state === State.InClosingTagName) ;
7876
- else {
7877
- this.cbs.ontext(this.sectionStart, endIndex);
7878
- }
7879
- };
7880
- Tokenizer.prototype.emitPartial = function (start, endIndex) {
7881
- if (this.baseState !== State.Text &&
7882
- this.baseState !== State.InSpecialTag) {
7883
- this.cbs.onattribdata(start, endIndex);
7884
- }
7885
- else {
7886
- this.cbs.ontext(start, endIndex);
7887
- }
7888
- };
7889
- Tokenizer.prototype.emitCodePoint = function (cp) {
7890
- if (this.baseState !== State.Text &&
7891
- this.baseState !== State.InSpecialTag) {
7892
- this.cbs.onattribentity(cp);
7893
- }
7894
- else {
7895
- this.cbs.ontextentity(cp);
7896
- }
7897
- };
7898
- return Tokenizer;
7899
- }());
7900
- exports.default = Tokenizer;
7901
-
7902
- } (Tokenizer$1));
7054
+ } (decode$1));
7055
+
7056
+ Object.defineProperty(Tokenizer$2, "__esModule", { value: true });
7057
+ Tokenizer$2.QuoteType = void 0;
7058
+ const decode_1$1 = decode$1;
7059
+ var CharCodes;
7060
+ (function (CharCodes) {
7061
+ CharCodes[CharCodes["Tab"] = 9] = "Tab";
7062
+ CharCodes[CharCodes["NewLine"] = 10] = "NewLine";
7063
+ CharCodes[CharCodes["FormFeed"] = 12] = "FormFeed";
7064
+ CharCodes[CharCodes["CarriageReturn"] = 13] = "CarriageReturn";
7065
+ CharCodes[CharCodes["Space"] = 32] = "Space";
7066
+ CharCodes[CharCodes["ExclamationMark"] = 33] = "ExclamationMark";
7067
+ CharCodes[CharCodes["Number"] = 35] = "Number";
7068
+ CharCodes[CharCodes["Amp"] = 38] = "Amp";
7069
+ CharCodes[CharCodes["SingleQuote"] = 39] = "SingleQuote";
7070
+ CharCodes[CharCodes["DoubleQuote"] = 34] = "DoubleQuote";
7071
+ CharCodes[CharCodes["Dash"] = 45] = "Dash";
7072
+ CharCodes[CharCodes["Slash"] = 47] = "Slash";
7073
+ CharCodes[CharCodes["Zero"] = 48] = "Zero";
7074
+ CharCodes[CharCodes["Nine"] = 57] = "Nine";
7075
+ CharCodes[CharCodes["Semi"] = 59] = "Semi";
7076
+ CharCodes[CharCodes["Lt"] = 60] = "Lt";
7077
+ CharCodes[CharCodes["Eq"] = 61] = "Eq";
7078
+ CharCodes[CharCodes["Gt"] = 62] = "Gt";
7079
+ CharCodes[CharCodes["Questionmark"] = 63] = "Questionmark";
7080
+ CharCodes[CharCodes["UpperA"] = 65] = "UpperA";
7081
+ CharCodes[CharCodes["LowerA"] = 97] = "LowerA";
7082
+ CharCodes[CharCodes["UpperF"] = 70] = "UpperF";
7083
+ CharCodes[CharCodes["LowerF"] = 102] = "LowerF";
7084
+ CharCodes[CharCodes["UpperZ"] = 90] = "UpperZ";
7085
+ CharCodes[CharCodes["LowerZ"] = 122] = "LowerZ";
7086
+ CharCodes[CharCodes["LowerX"] = 120] = "LowerX";
7087
+ CharCodes[CharCodes["OpeningSquareBracket"] = 91] = "OpeningSquareBracket";
7088
+ })(CharCodes || (CharCodes = {}));
7089
+ /** All the states the tokenizer can be in. */
7090
+ var State;
7091
+ (function (State) {
7092
+ State[State["Text"] = 1] = "Text";
7093
+ State[State["BeforeTagName"] = 2] = "BeforeTagName";
7094
+ State[State["InTagName"] = 3] = "InTagName";
7095
+ State[State["InSelfClosingTag"] = 4] = "InSelfClosingTag";
7096
+ State[State["BeforeClosingTagName"] = 5] = "BeforeClosingTagName";
7097
+ State[State["InClosingTagName"] = 6] = "InClosingTagName";
7098
+ State[State["AfterClosingTagName"] = 7] = "AfterClosingTagName";
7099
+ // Attributes
7100
+ State[State["BeforeAttributeName"] = 8] = "BeforeAttributeName";
7101
+ State[State["InAttributeName"] = 9] = "InAttributeName";
7102
+ State[State["AfterAttributeName"] = 10] = "AfterAttributeName";
7103
+ State[State["BeforeAttributeValue"] = 11] = "BeforeAttributeValue";
7104
+ State[State["InAttributeValueDq"] = 12] = "InAttributeValueDq";
7105
+ State[State["InAttributeValueSq"] = 13] = "InAttributeValueSq";
7106
+ State[State["InAttributeValueNq"] = 14] = "InAttributeValueNq";
7107
+ // Declarations
7108
+ State[State["BeforeDeclaration"] = 15] = "BeforeDeclaration";
7109
+ State[State["InDeclaration"] = 16] = "InDeclaration";
7110
+ // Processing instructions
7111
+ State[State["InProcessingInstruction"] = 17] = "InProcessingInstruction";
7112
+ // Comments & CDATA
7113
+ State[State["BeforeComment"] = 18] = "BeforeComment";
7114
+ State[State["CDATASequence"] = 19] = "CDATASequence";
7115
+ State[State["InSpecialComment"] = 20] = "InSpecialComment";
7116
+ State[State["InCommentLike"] = 21] = "InCommentLike";
7117
+ // Special tags
7118
+ State[State["BeforeSpecialS"] = 22] = "BeforeSpecialS";
7119
+ State[State["BeforeSpecialT"] = 23] = "BeforeSpecialT";
7120
+ State[State["SpecialStartSequence"] = 24] = "SpecialStartSequence";
7121
+ State[State["InSpecialTag"] = 25] = "InSpecialTag";
7122
+ State[State["InEntity"] = 26] = "InEntity";
7123
+ })(State || (State = {}));
7124
+ function isWhitespace(c) {
7125
+ return (c === CharCodes.Space ||
7126
+ c === CharCodes.NewLine ||
7127
+ c === CharCodes.Tab ||
7128
+ c === CharCodes.FormFeed ||
7129
+ c === CharCodes.CarriageReturn);
7130
+ }
7131
+ function isEndOfTagSection(c) {
7132
+ return c === CharCodes.Slash || c === CharCodes.Gt || isWhitespace(c);
7133
+ }
7134
+ function isASCIIAlpha(c) {
7135
+ return ((c >= CharCodes.LowerA && c <= CharCodes.LowerZ) ||
7136
+ (c >= CharCodes.UpperA && c <= CharCodes.UpperZ));
7137
+ }
7138
+ var QuoteType;
7139
+ (function (QuoteType) {
7140
+ QuoteType[QuoteType["NoValue"] = 0] = "NoValue";
7141
+ QuoteType[QuoteType["Unquoted"] = 1] = "Unquoted";
7142
+ QuoteType[QuoteType["Single"] = 2] = "Single";
7143
+ QuoteType[QuoteType["Double"] = 3] = "Double";
7144
+ })(QuoteType || (Tokenizer$2.QuoteType = QuoteType = {}));
7145
+ /**
7146
+ * Sequences used to match longer strings.
7147
+ *
7148
+ * We don't have `Script`, `Style`, or `Title` here. Instead, we re-use the *End
7149
+ * sequences with an increased offset.
7150
+ */
7151
+ const Sequences = {
7152
+ Cdata: new Uint8Array([0x43, 0x44, 0x41, 0x54, 0x41, 0x5b]), // CDATA[
7153
+ CdataEnd: new Uint8Array([0x5d, 0x5d, 0x3e]), // ]]>
7154
+ CommentEnd: new Uint8Array([0x2d, 0x2d, 0x3e]), // `-->`
7155
+ ScriptEnd: new Uint8Array([0x3c, 0x2f, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74]), // `</script`
7156
+ StyleEnd: new Uint8Array([0x3c, 0x2f, 0x73, 0x74, 0x79, 0x6c, 0x65]), // `</style`
7157
+ TitleEnd: new Uint8Array([0x3c, 0x2f, 0x74, 0x69, 0x74, 0x6c, 0x65]), // `</title`
7158
+ TextareaEnd: new Uint8Array([
7159
+ 0x3c, 0x2f, 0x74, 0x65, 0x78, 0x74, 0x61, 0x72, 0x65, 0x61,
7160
+ ]), // `</textarea`
7161
+ XmpEnd: new Uint8Array([0x3c, 0x2f, 0x78, 0x6d, 0x70]), // `</xmp`
7162
+ };
7163
+ let Tokenizer$1 = class Tokenizer {
7164
+ constructor({ xmlMode = false, decodeEntities = true, }, cbs) {
7165
+ this.cbs = cbs;
7166
+ /** The current state the tokenizer is in. */
7167
+ this.state = State.Text;
7168
+ /** The read buffer. */
7169
+ this.buffer = "";
7170
+ /** The beginning of the section that is currently being read. */
7171
+ this.sectionStart = 0;
7172
+ /** The index within the buffer that we are currently looking at. */
7173
+ this.index = 0;
7174
+ /** The start of the last entity. */
7175
+ this.entityStart = 0;
7176
+ /** Some behavior, eg. when decoding entities, is done while we are in another state. This keeps track of the other state type. */
7177
+ this.baseState = State.Text;
7178
+ /** For special parsing behavior inside of script and style tags. */
7179
+ this.isSpecial = false;
7180
+ /** Indicates whether the tokenizer has been paused. */
7181
+ this.running = true;
7182
+ /** The offset of the current buffer. */
7183
+ this.offset = 0;
7184
+ this.currentSequence = undefined;
7185
+ this.sequenceIndex = 0;
7186
+ this.xmlMode = xmlMode;
7187
+ this.decodeEntities = decodeEntities;
7188
+ this.entityDecoder = new decode_1$1.EntityDecoder(xmlMode ? decode_1$1.xmlDecodeTree : decode_1$1.htmlDecodeTree, (cp, consumed) => this.emitCodePoint(cp, consumed));
7189
+ }
7190
+ reset() {
7191
+ this.state = State.Text;
7192
+ this.buffer = "";
7193
+ this.sectionStart = 0;
7194
+ this.index = 0;
7195
+ this.baseState = State.Text;
7196
+ this.currentSequence = undefined;
7197
+ this.running = true;
7198
+ this.offset = 0;
7199
+ }
7200
+ write(chunk) {
7201
+ this.offset += this.buffer.length;
7202
+ this.buffer = chunk;
7203
+ this.parse();
7204
+ }
7205
+ end() {
7206
+ if (this.running)
7207
+ this.finish();
7208
+ }
7209
+ pause() {
7210
+ this.running = false;
7211
+ }
7212
+ resume() {
7213
+ this.running = true;
7214
+ if (this.index < this.buffer.length + this.offset) {
7215
+ this.parse();
7216
+ }
7217
+ }
7218
+ stateText(c) {
7219
+ if (c === CharCodes.Lt ||
7220
+ (!this.decodeEntities && this.fastForwardTo(CharCodes.Lt))) {
7221
+ if (this.index > this.sectionStart) {
7222
+ this.cbs.ontext(this.sectionStart, this.index);
7223
+ }
7224
+ this.state = State.BeforeTagName;
7225
+ this.sectionStart = this.index;
7226
+ }
7227
+ else if (this.decodeEntities && c === CharCodes.Amp) {
7228
+ this.startEntity();
7229
+ }
7230
+ }
7231
+ stateSpecialStartSequence(c) {
7232
+ const isEnd = this.sequenceIndex === this.currentSequence.length;
7233
+ const isMatch = isEnd
7234
+ ? // If we are at the end of the sequence, make sure the tag name has ended
7235
+ isEndOfTagSection(c)
7236
+ : // Otherwise, do a case-insensitive comparison
7237
+ (c | 0x20) === this.currentSequence[this.sequenceIndex];
7238
+ if (!isMatch) {
7239
+ this.isSpecial = false;
7240
+ }
7241
+ else if (!isEnd) {
7242
+ this.sequenceIndex++;
7243
+ return;
7244
+ }
7245
+ this.sequenceIndex = 0;
7246
+ this.state = State.InTagName;
7247
+ this.stateInTagName(c);
7248
+ }
7249
+ /** Look for an end tag. For <title> tags, also decode entities. */
7250
+ stateInSpecialTag(c) {
7251
+ if (this.sequenceIndex === this.currentSequence.length) {
7252
+ if (c === CharCodes.Gt || isWhitespace(c)) {
7253
+ const endOfText = this.index - this.currentSequence.length;
7254
+ if (this.sectionStart < endOfText) {
7255
+ // Spoof the index so that reported locations match up.
7256
+ const actualIndex = this.index;
7257
+ this.index = endOfText;
7258
+ this.cbs.ontext(this.sectionStart, endOfText);
7259
+ this.index = actualIndex;
7260
+ }
7261
+ this.isSpecial = false;
7262
+ this.sectionStart = endOfText + 2; // Skip over the `</`
7263
+ this.stateInClosingTagName(c);
7264
+ return; // We are done; skip the rest of the function.
7265
+ }
7266
+ this.sequenceIndex = 0;
7267
+ }
7268
+ if ((c | 0x20) === this.currentSequence[this.sequenceIndex]) {
7269
+ this.sequenceIndex += 1;
7270
+ }
7271
+ else if (this.sequenceIndex === 0) {
7272
+ if (this.currentSequence === Sequences.TitleEnd) {
7273
+ // We have to parse entities in <title> tags.
7274
+ if (this.decodeEntities && c === CharCodes.Amp) {
7275
+ this.startEntity();
7276
+ }
7277
+ }
7278
+ else if (this.fastForwardTo(CharCodes.Lt)) {
7279
+ // Outside of <title> tags, we can fast-forward.
7280
+ this.sequenceIndex = 1;
7281
+ }
7282
+ }
7283
+ else {
7284
+ // If we see a `<`, set the sequence index to 1; useful for eg. `<</script>`.
7285
+ this.sequenceIndex = Number(c === CharCodes.Lt);
7286
+ }
7287
+ }
7288
+ stateCDATASequence(c) {
7289
+ if (c === Sequences.Cdata[this.sequenceIndex]) {
7290
+ if (++this.sequenceIndex === Sequences.Cdata.length) {
7291
+ this.state = State.InCommentLike;
7292
+ this.currentSequence = Sequences.CdataEnd;
7293
+ this.sequenceIndex = 0;
7294
+ this.sectionStart = this.index + 1;
7295
+ }
7296
+ }
7297
+ else {
7298
+ this.sequenceIndex = 0;
7299
+ this.state = State.InDeclaration;
7300
+ this.stateInDeclaration(c); // Reconsume the character
7301
+ }
7302
+ }
7303
+ /**
7304
+ * When we wait for one specific character, we can speed things up
7305
+ * by skipping through the buffer until we find it.
7306
+ *
7307
+ * @returns Whether the character was found.
7308
+ */
7309
+ fastForwardTo(c) {
7310
+ while (++this.index < this.buffer.length + this.offset) {
7311
+ if (this.buffer.charCodeAt(this.index - this.offset) === c) {
7312
+ return true;
7313
+ }
7314
+ }
7315
+ /*
7316
+ * We increment the index at the end of the `parse` loop,
7317
+ * so set it to `buffer.length - 1` here.
7318
+ *
7319
+ * TODO: Refactor `parse` to increment index before calling states.
7320
+ */
7321
+ this.index = this.buffer.length + this.offset - 1;
7322
+ return false;
7323
+ }
7324
+ /**
7325
+ * Comments and CDATA end with `-->` and `]]>`.
7326
+ *
7327
+ * Their common qualities are:
7328
+ * - Their end sequences have a distinct character they start with.
7329
+ * - That character is then repeated, so we have to check multiple repeats.
7330
+ * - All characters but the start character of the sequence can be skipped.
7331
+ */
7332
+ stateInCommentLike(c) {
7333
+ if (c === this.currentSequence[this.sequenceIndex]) {
7334
+ if (++this.sequenceIndex === this.currentSequence.length) {
7335
+ if (this.currentSequence === Sequences.CdataEnd) {
7336
+ this.cbs.oncdata(this.sectionStart, this.index, 2);
7337
+ }
7338
+ else {
7339
+ this.cbs.oncomment(this.sectionStart, this.index, 2);
7340
+ }
7341
+ this.sequenceIndex = 0;
7342
+ this.sectionStart = this.index + 1;
7343
+ this.state = State.Text;
7344
+ }
7345
+ }
7346
+ else if (this.sequenceIndex === 0) {
7347
+ // Fast-forward to the first character of the sequence
7348
+ if (this.fastForwardTo(this.currentSequence[0])) {
7349
+ this.sequenceIndex = 1;
7350
+ }
7351
+ }
7352
+ else if (c !== this.currentSequence[this.sequenceIndex - 1]) {
7353
+ // Allow long sequences, eg. --->, ]]]>
7354
+ this.sequenceIndex = 0;
7355
+ }
7356
+ }
7357
+ /**
7358
+ * HTML only allows ASCII alpha characters (a-z and A-Z) at the beginning of a tag name.
7359
+ *
7360
+ * XML allows a lot more characters here (@see https://www.w3.org/TR/REC-xml/#NT-NameStartChar).
7361
+ * We allow anything that wouldn't end the tag.
7362
+ */
7363
+ isTagStartChar(c) {
7364
+ return this.xmlMode ? !isEndOfTagSection(c) : isASCIIAlpha(c);
7365
+ }
7366
+ startSpecial(sequence, offset) {
7367
+ this.isSpecial = true;
7368
+ this.currentSequence = sequence;
7369
+ this.sequenceIndex = offset;
7370
+ this.state = State.SpecialStartSequence;
7371
+ }
7372
+ stateBeforeTagName(c) {
7373
+ if (c === CharCodes.ExclamationMark) {
7374
+ this.state = State.BeforeDeclaration;
7375
+ this.sectionStart = this.index + 1;
7376
+ }
7377
+ else if (c === CharCodes.Questionmark) {
7378
+ this.state = State.InProcessingInstruction;
7379
+ this.sectionStart = this.index + 1;
7380
+ }
7381
+ else if (this.isTagStartChar(c)) {
7382
+ const lower = c | 0x20;
7383
+ this.sectionStart = this.index;
7384
+ if (this.xmlMode) {
7385
+ this.state = State.InTagName;
7386
+ }
7387
+ else if (lower === Sequences.ScriptEnd[2]) {
7388
+ this.state = State.BeforeSpecialS;
7389
+ }
7390
+ else if (lower === Sequences.TitleEnd[2] ||
7391
+ lower === Sequences.XmpEnd[2]) {
7392
+ this.state = State.BeforeSpecialT;
7393
+ }
7394
+ else {
7395
+ this.state = State.InTagName;
7396
+ }
7397
+ }
7398
+ else if (c === CharCodes.Slash) {
7399
+ this.state = State.BeforeClosingTagName;
7400
+ }
7401
+ else {
7402
+ this.state = State.Text;
7403
+ this.stateText(c);
7404
+ }
7405
+ }
7406
+ stateInTagName(c) {
7407
+ if (isEndOfTagSection(c)) {
7408
+ this.cbs.onopentagname(this.sectionStart, this.index);
7409
+ this.sectionStart = -1;
7410
+ this.state = State.BeforeAttributeName;
7411
+ this.stateBeforeAttributeName(c);
7412
+ }
7413
+ }
7414
+ stateBeforeClosingTagName(c) {
7415
+ if (isWhitespace(c)) ;
7416
+ else if (c === CharCodes.Gt) {
7417
+ this.state = State.Text;
7418
+ }
7419
+ else {
7420
+ this.state = this.isTagStartChar(c)
7421
+ ? State.InClosingTagName
7422
+ : State.InSpecialComment;
7423
+ this.sectionStart = this.index;
7424
+ }
7425
+ }
7426
+ stateInClosingTagName(c) {
7427
+ if (c === CharCodes.Gt || isWhitespace(c)) {
7428
+ this.cbs.onclosetag(this.sectionStart, this.index);
7429
+ this.sectionStart = -1;
7430
+ this.state = State.AfterClosingTagName;
7431
+ this.stateAfterClosingTagName(c);
7432
+ }
7433
+ }
7434
+ stateAfterClosingTagName(c) {
7435
+ // Skip everything until ">"
7436
+ if (c === CharCodes.Gt || this.fastForwardTo(CharCodes.Gt)) {
7437
+ this.state = State.Text;
7438
+ this.sectionStart = this.index + 1;
7439
+ }
7440
+ }
7441
+ stateBeforeAttributeName(c) {
7442
+ if (c === CharCodes.Gt) {
7443
+ this.cbs.onopentagend(this.index);
7444
+ if (this.isSpecial) {
7445
+ this.state = State.InSpecialTag;
7446
+ this.sequenceIndex = 0;
7447
+ }
7448
+ else {
7449
+ this.state = State.Text;
7450
+ }
7451
+ this.sectionStart = this.index + 1;
7452
+ }
7453
+ else if (c === CharCodes.Slash) {
7454
+ this.state = State.InSelfClosingTag;
7455
+ }
7456
+ else if (!isWhitespace(c)) {
7457
+ this.state = State.InAttributeName;
7458
+ this.sectionStart = this.index;
7459
+ }
7460
+ }
7461
+ stateInSelfClosingTag(c) {
7462
+ if (c === CharCodes.Gt) {
7463
+ this.cbs.onselfclosingtag(this.index);
7464
+ this.state = State.Text;
7465
+ this.sectionStart = this.index + 1;
7466
+ this.isSpecial = false; // Reset special state, in case of self-closing special tags
7467
+ }
7468
+ else if (!isWhitespace(c)) {
7469
+ this.state = State.BeforeAttributeName;
7470
+ this.stateBeforeAttributeName(c);
7471
+ }
7472
+ }
7473
+ stateInAttributeName(c) {
7474
+ if (c === CharCodes.Eq || isEndOfTagSection(c)) {
7475
+ this.cbs.onattribname(this.sectionStart, this.index);
7476
+ this.sectionStart = this.index;
7477
+ this.state = State.AfterAttributeName;
7478
+ this.stateAfterAttributeName(c);
7479
+ }
7480
+ }
7481
+ stateAfterAttributeName(c) {
7482
+ if (c === CharCodes.Eq) {
7483
+ this.state = State.BeforeAttributeValue;
7484
+ }
7485
+ else if (c === CharCodes.Slash || c === CharCodes.Gt) {
7486
+ this.cbs.onattribend(QuoteType.NoValue, this.sectionStart);
7487
+ this.sectionStart = -1;
7488
+ this.state = State.BeforeAttributeName;
7489
+ this.stateBeforeAttributeName(c);
7490
+ }
7491
+ else if (!isWhitespace(c)) {
7492
+ this.cbs.onattribend(QuoteType.NoValue, this.sectionStart);
7493
+ this.state = State.InAttributeName;
7494
+ this.sectionStart = this.index;
7495
+ }
7496
+ }
7497
+ stateBeforeAttributeValue(c) {
7498
+ if (c === CharCodes.DoubleQuote) {
7499
+ this.state = State.InAttributeValueDq;
7500
+ this.sectionStart = this.index + 1;
7501
+ }
7502
+ else if (c === CharCodes.SingleQuote) {
7503
+ this.state = State.InAttributeValueSq;
7504
+ this.sectionStart = this.index + 1;
7505
+ }
7506
+ else if (!isWhitespace(c)) {
7507
+ this.sectionStart = this.index;
7508
+ this.state = State.InAttributeValueNq;
7509
+ this.stateInAttributeValueNoQuotes(c); // Reconsume token
7510
+ }
7511
+ }
7512
+ handleInAttributeValue(c, quote) {
7513
+ if (c === quote ||
7514
+ (!this.decodeEntities && this.fastForwardTo(quote))) {
7515
+ this.cbs.onattribdata(this.sectionStart, this.index);
7516
+ this.sectionStart = -1;
7517
+ this.cbs.onattribend(quote === CharCodes.DoubleQuote
7518
+ ? QuoteType.Double
7519
+ : QuoteType.Single, this.index + 1);
7520
+ this.state = State.BeforeAttributeName;
7521
+ }
7522
+ else if (this.decodeEntities && c === CharCodes.Amp) {
7523
+ this.startEntity();
7524
+ }
7525
+ }
7526
+ stateInAttributeValueDoubleQuotes(c) {
7527
+ this.handleInAttributeValue(c, CharCodes.DoubleQuote);
7528
+ }
7529
+ stateInAttributeValueSingleQuotes(c) {
7530
+ this.handleInAttributeValue(c, CharCodes.SingleQuote);
7531
+ }
7532
+ stateInAttributeValueNoQuotes(c) {
7533
+ if (isWhitespace(c) || c === CharCodes.Gt) {
7534
+ this.cbs.onattribdata(this.sectionStart, this.index);
7535
+ this.sectionStart = -1;
7536
+ this.cbs.onattribend(QuoteType.Unquoted, this.index);
7537
+ this.state = State.BeforeAttributeName;
7538
+ this.stateBeforeAttributeName(c);
7539
+ }
7540
+ else if (this.decodeEntities && c === CharCodes.Amp) {
7541
+ this.startEntity();
7542
+ }
7543
+ }
7544
+ stateBeforeDeclaration(c) {
7545
+ if (c === CharCodes.OpeningSquareBracket) {
7546
+ this.state = State.CDATASequence;
7547
+ this.sequenceIndex = 0;
7548
+ }
7549
+ else {
7550
+ this.state =
7551
+ c === CharCodes.Dash
7552
+ ? State.BeforeComment
7553
+ : State.InDeclaration;
7554
+ }
7555
+ }
7556
+ stateInDeclaration(c) {
7557
+ if (c === CharCodes.Gt || this.fastForwardTo(CharCodes.Gt)) {
7558
+ this.cbs.ondeclaration(this.sectionStart, this.index);
7559
+ this.state = State.Text;
7560
+ this.sectionStart = this.index + 1;
7561
+ }
7562
+ }
7563
+ stateInProcessingInstruction(c) {
7564
+ if (c === CharCodes.Gt || this.fastForwardTo(CharCodes.Gt)) {
7565
+ this.cbs.onprocessinginstruction(this.sectionStart, this.index);
7566
+ this.state = State.Text;
7567
+ this.sectionStart = this.index + 1;
7568
+ }
7569
+ }
7570
+ stateBeforeComment(c) {
7571
+ if (c === CharCodes.Dash) {
7572
+ this.state = State.InCommentLike;
7573
+ this.currentSequence = Sequences.CommentEnd;
7574
+ // Allow short comments (eg. <!-->)
7575
+ this.sequenceIndex = 2;
7576
+ this.sectionStart = this.index + 1;
7577
+ }
7578
+ else {
7579
+ this.state = State.InDeclaration;
7580
+ }
7581
+ }
7582
+ stateInSpecialComment(c) {
7583
+ if (c === CharCodes.Gt || this.fastForwardTo(CharCodes.Gt)) {
7584
+ this.cbs.oncomment(this.sectionStart, this.index, 0);
7585
+ this.state = State.Text;
7586
+ this.sectionStart = this.index + 1;
7587
+ }
7588
+ }
7589
+ stateBeforeSpecialS(c) {
7590
+ const lower = c | 0x20;
7591
+ if (lower === Sequences.ScriptEnd[3]) {
7592
+ this.startSpecial(Sequences.ScriptEnd, 4);
7593
+ }
7594
+ else if (lower === Sequences.StyleEnd[3]) {
7595
+ this.startSpecial(Sequences.StyleEnd, 4);
7596
+ }
7597
+ else {
7598
+ this.state = State.InTagName;
7599
+ this.stateInTagName(c); // Consume the token again
7600
+ }
7601
+ }
7602
+ stateBeforeSpecialT(c) {
7603
+ const lower = c | 0x20;
7604
+ switch (lower) {
7605
+ case Sequences.TitleEnd[3]: {
7606
+ this.startSpecial(Sequences.TitleEnd, 4);
7607
+ break;
7608
+ }
7609
+ case Sequences.TextareaEnd[3]: {
7610
+ this.startSpecial(Sequences.TextareaEnd, 4);
7611
+ break;
7612
+ }
7613
+ case Sequences.XmpEnd[3]: {
7614
+ this.startSpecial(Sequences.XmpEnd, 4);
7615
+ break;
7616
+ }
7617
+ default: {
7618
+ this.state = State.InTagName;
7619
+ this.stateInTagName(c); // Consume the token again
7620
+ }
7621
+ }
7622
+ }
7623
+ startEntity() {
7624
+ this.baseState = this.state;
7625
+ this.state = State.InEntity;
7626
+ this.entityStart = this.index;
7627
+ this.entityDecoder.startEntity(this.xmlMode
7628
+ ? decode_1$1.DecodingMode.Strict
7629
+ : this.baseState === State.Text ||
7630
+ this.baseState === State.InSpecialTag
7631
+ ? decode_1$1.DecodingMode.Legacy
7632
+ : decode_1$1.DecodingMode.Attribute);
7633
+ }
7634
+ stateInEntity() {
7635
+ const indexInBuffer = this.index - this.offset;
7636
+ const length = this.entityDecoder.write(this.buffer, indexInBuffer);
7637
+ // If `length` is positive, we are done with the entity.
7638
+ if (length >= 0) {
7639
+ this.state = this.baseState;
7640
+ if (length === 0) {
7641
+ this.index -= 1;
7642
+ }
7643
+ }
7644
+ else {
7645
+ if (indexInBuffer < this.buffer.length &&
7646
+ this.buffer.charCodeAt(indexInBuffer) === CharCodes.Amp) {
7647
+ this.state = this.baseState;
7648
+ this.index -= 1;
7649
+ return;
7650
+ }
7651
+ // Mark buffer as consumed.
7652
+ this.index = this.offset + this.buffer.length - 1;
7653
+ }
7654
+ }
7655
+ /**
7656
+ * Remove data that has already been consumed from the buffer.
7657
+ */
7658
+ cleanup() {
7659
+ // If we are inside of text or attributes, emit what we already have.
7660
+ if (this.running && this.sectionStart !== this.index) {
7661
+ if (this.state === State.Text ||
7662
+ (this.state === State.InSpecialTag && this.sequenceIndex === 0)) {
7663
+ this.cbs.ontext(this.sectionStart, this.index);
7664
+ this.sectionStart = this.index;
7665
+ }
7666
+ else if (this.state === State.InAttributeValueDq ||
7667
+ this.state === State.InAttributeValueSq ||
7668
+ this.state === State.InAttributeValueNq) {
7669
+ this.cbs.onattribdata(this.sectionStart, this.index);
7670
+ this.sectionStart = this.index;
7671
+ }
7672
+ }
7673
+ }
7674
+ shouldContinue() {
7675
+ return this.index < this.buffer.length + this.offset && this.running;
7676
+ }
7677
+ /**
7678
+ * Iterates through the buffer, calling the function corresponding to the current state.
7679
+ *
7680
+ * States that are more likely to be hit are higher up, as a performance improvement.
7681
+ */
7682
+ parse() {
7683
+ while (this.shouldContinue()) {
7684
+ const c = this.buffer.charCodeAt(this.index - this.offset);
7685
+ switch (this.state) {
7686
+ case State.Text: {
7687
+ this.stateText(c);
7688
+ break;
7689
+ }
7690
+ case State.SpecialStartSequence: {
7691
+ this.stateSpecialStartSequence(c);
7692
+ break;
7693
+ }
7694
+ case State.InSpecialTag: {
7695
+ this.stateInSpecialTag(c);
7696
+ break;
7697
+ }
7698
+ case State.CDATASequence: {
7699
+ this.stateCDATASequence(c);
7700
+ break;
7701
+ }
7702
+ case State.InAttributeValueDq: {
7703
+ this.stateInAttributeValueDoubleQuotes(c);
7704
+ break;
7705
+ }
7706
+ case State.InAttributeName: {
7707
+ this.stateInAttributeName(c);
7708
+ break;
7709
+ }
7710
+ case State.InCommentLike: {
7711
+ this.stateInCommentLike(c);
7712
+ break;
7713
+ }
7714
+ case State.InSpecialComment: {
7715
+ this.stateInSpecialComment(c);
7716
+ break;
7717
+ }
7718
+ case State.BeforeAttributeName: {
7719
+ this.stateBeforeAttributeName(c);
7720
+ break;
7721
+ }
7722
+ case State.InTagName: {
7723
+ this.stateInTagName(c);
7724
+ break;
7725
+ }
7726
+ case State.InClosingTagName: {
7727
+ this.stateInClosingTagName(c);
7728
+ break;
7729
+ }
7730
+ case State.BeforeTagName: {
7731
+ this.stateBeforeTagName(c);
7732
+ break;
7733
+ }
7734
+ case State.AfterAttributeName: {
7735
+ this.stateAfterAttributeName(c);
7736
+ break;
7737
+ }
7738
+ case State.InAttributeValueSq: {
7739
+ this.stateInAttributeValueSingleQuotes(c);
7740
+ break;
7741
+ }
7742
+ case State.BeforeAttributeValue: {
7743
+ this.stateBeforeAttributeValue(c);
7744
+ break;
7745
+ }
7746
+ case State.BeforeClosingTagName: {
7747
+ this.stateBeforeClosingTagName(c);
7748
+ break;
7749
+ }
7750
+ case State.AfterClosingTagName: {
7751
+ this.stateAfterClosingTagName(c);
7752
+ break;
7753
+ }
7754
+ case State.BeforeSpecialS: {
7755
+ this.stateBeforeSpecialS(c);
7756
+ break;
7757
+ }
7758
+ case State.BeforeSpecialT: {
7759
+ this.stateBeforeSpecialT(c);
7760
+ break;
7761
+ }
7762
+ case State.InAttributeValueNq: {
7763
+ this.stateInAttributeValueNoQuotes(c);
7764
+ break;
7765
+ }
7766
+ case State.InSelfClosingTag: {
7767
+ this.stateInSelfClosingTag(c);
7768
+ break;
7769
+ }
7770
+ case State.InDeclaration: {
7771
+ this.stateInDeclaration(c);
7772
+ break;
7773
+ }
7774
+ case State.BeforeDeclaration: {
7775
+ this.stateBeforeDeclaration(c);
7776
+ break;
7777
+ }
7778
+ case State.BeforeComment: {
7779
+ this.stateBeforeComment(c);
7780
+ break;
7781
+ }
7782
+ case State.InProcessingInstruction: {
7783
+ this.stateInProcessingInstruction(c);
7784
+ break;
7785
+ }
7786
+ case State.InEntity: {
7787
+ this.stateInEntity();
7788
+ break;
7789
+ }
7790
+ }
7791
+ this.index++;
7792
+ }
7793
+ this.cleanup();
7794
+ }
7795
+ finish() {
7796
+ if (this.state === State.InEntity) {
7797
+ this.entityDecoder.end();
7798
+ this.state = this.baseState;
7799
+ }
7800
+ this.handleTrailingData();
7801
+ this.cbs.onend();
7802
+ }
7803
+ /** Handle any trailing data. */
7804
+ handleTrailingData() {
7805
+ const endIndex = this.buffer.length + this.offset;
7806
+ // If there is no remaining data, we are done.
7807
+ if (this.sectionStart >= endIndex) {
7808
+ return;
7809
+ }
7810
+ if (this.state === State.InCommentLike) {
7811
+ if (this.currentSequence === Sequences.CdataEnd) {
7812
+ this.cbs.oncdata(this.sectionStart, endIndex, 0);
7813
+ }
7814
+ else {
7815
+ this.cbs.oncomment(this.sectionStart, endIndex, 0);
7816
+ }
7817
+ }
7818
+ else if (this.state === State.InTagName ||
7819
+ this.state === State.BeforeAttributeName ||
7820
+ this.state === State.BeforeAttributeValue ||
7821
+ this.state === State.AfterAttributeName ||
7822
+ this.state === State.InAttributeName ||
7823
+ this.state === State.InAttributeValueSq ||
7824
+ this.state === State.InAttributeValueDq ||
7825
+ this.state === State.InAttributeValueNq ||
7826
+ this.state === State.InClosingTagName) ;
7827
+ else {
7828
+ this.cbs.ontext(this.sectionStart, endIndex);
7829
+ }
7830
+ }
7831
+ emitCodePoint(cp, consumed) {
7832
+ if (this.baseState !== State.Text &&
7833
+ this.baseState !== State.InSpecialTag) {
7834
+ if (this.sectionStart < this.entityStart) {
7835
+ this.cbs.onattribdata(this.sectionStart, this.entityStart);
7836
+ }
7837
+ this.sectionStart = this.entityStart + consumed;
7838
+ this.index = this.sectionStart - 1;
7839
+ this.cbs.onattribentity(cp);
7840
+ }
7841
+ else {
7842
+ if (this.sectionStart < this.entityStart) {
7843
+ this.cbs.ontext(this.sectionStart, this.entityStart);
7844
+ }
7845
+ this.sectionStart = this.entityStart + consumed;
7846
+ this.index = this.sectionStart - 1;
7847
+ this.cbs.ontextentity(cp, this.sectionStart);
7848
+ }
7849
+ }
7850
+ };
7851
+ Tokenizer$2.default = Tokenizer$1;
7903
7852
 
7904
7853
  var __createBinding$1 = (commonjsGlobal && commonjsGlobal.__createBinding) || (Object.create ? (function(o, m, k, k2) {
7905
7854
  if (k2 === undefined) k2 = k;
@@ -7917,18 +7866,28 @@ var __setModuleDefault$1 = (commonjsGlobal && commonjsGlobal.__setModuleDefault)
7917
7866
  }) : function(o, v) {
7918
7867
  o["default"] = v;
7919
7868
  });
7920
- var __importStar$1 = (commonjsGlobal && commonjsGlobal.__importStar) || function (mod) {
7921
- if (mod && mod.__esModule) return mod;
7922
- var result = {};
7923
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding$1(result, mod, k);
7924
- __setModuleDefault$1(result, mod);
7925
- return result;
7926
- };
7869
+ var __importStar$1 = (commonjsGlobal && commonjsGlobal.__importStar) || (function () {
7870
+ var ownKeys = function(o) {
7871
+ ownKeys = Object.getOwnPropertyNames || function (o) {
7872
+ var ar = [];
7873
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
7874
+ return ar;
7875
+ };
7876
+ return ownKeys(o);
7877
+ };
7878
+ return function (mod) {
7879
+ if (mod && mod.__esModule) return mod;
7880
+ var result = {};
7881
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding$1(result, mod, k[i]);
7882
+ __setModuleDefault$1(result, mod);
7883
+ return result;
7884
+ };
7885
+ })();
7927
7886
  Object.defineProperty(Parser$4, "__esModule", { value: true });
7928
7887
  Parser$4.Parser = void 0;
7929
- var Tokenizer_js_1 = __importStar$1(Tokenizer$1);
7930
- var decode_js_1 = decode;
7931
- var formTags = new Set([
7888
+ const Tokenizer_js_1 = __importStar$1(Tokenizer$2);
7889
+ const decode_1 = decode$1;
7890
+ const formTags = new Set([
7932
7891
  "input",
7933
7892
  "option",
7934
7893
  "optgroup",
@@ -7937,11 +7896,11 @@ var formTags = new Set([
7937
7896
  "datalist",
7938
7897
  "textarea",
7939
7898
  ]);
7940
- var pTag = new Set(["p"]);
7941
- var tableSectionTags = new Set(["thead", "tbody"]);
7942
- var ddtTags = new Set(["dd", "dt"]);
7943
- var rtpTags = new Set(["rt", "rp"]);
7944
- var openImpliesClose = new Map([
7899
+ const pTag = new Set(["p"]);
7900
+ const tableSectionTags = new Set(["thead", "tbody"]);
7901
+ const ddtTags = new Set(["dd", "dt"]);
7902
+ const rtpTags = new Set(["rt", "rp"]);
7903
+ const openImpliesClose = new Map([
7945
7904
  ["tr", new Set(["tr", "th", "td"])],
7946
7905
  ["th", new Set(["th"])],
7947
7906
  ["td", new Set(["thead", "th", "td"])],
@@ -7990,7 +7949,7 @@ var openImpliesClose = new Map([
7990
7949
  ["tbody", tableSectionTags],
7991
7950
  ["tfoot", tableSectionTags],
7992
7951
  ]);
7993
- var voidElements = new Set([
7952
+ const voidElements = new Set([
7994
7953
  "area",
7995
7954
  "base",
7996
7955
  "basefont",
@@ -8011,8 +7970,8 @@ var voidElements = new Set([
8011
7970
  "track",
8012
7971
  "wbr",
8013
7972
  ]);
8014
- var foreignContextElements = new Set(["math", "svg"]);
8015
- var htmlIntegrationElements = new Set([
7973
+ const foreignContextElements = new Set(["math", "svg"]);
7974
+ const htmlIntegrationElements = new Set([
8016
7975
  "mi",
8017
7976
  "mo",
8018
7977
  "mn",
@@ -8023,11 +7982,10 @@ var htmlIntegrationElements = new Set([
8023
7982
  "desc",
8024
7983
  "title",
8025
7984
  ]);
8026
- var reNameEnd = /\s|\//;
8027
- var Parser$3 = /** @class */ (function () {
8028
- function Parser(cbs, options) {
8029
- if (options === void 0) { options = {}; }
8030
- var _a, _b, _c, _d, _e;
7985
+ const reNameEnd = /\s|\//;
7986
+ let Parser$3 = class Parser {
7987
+ constructor(cbs, options = {}) {
7988
+ var _a, _b, _c, _d, _e, _f;
8031
7989
  this.options = options;
8032
7990
  /** The start index of the last event. */
8033
7991
  this.startIndex = 0;
@@ -8043,7 +8001,6 @@ var Parser$3 = /** @class */ (function () {
8043
8001
  this.attribvalue = "";
8044
8002
  this.attribs = null;
8045
8003
  this.stack = [];
8046
- this.foreignContext = [];
8047
8004
  this.buffers = [];
8048
8005
  this.bufferOffset = 0;
8049
8006
  /** The index of the last written buffer. Used when resuming after a `pause()`. */
@@ -8051,71 +8008,75 @@ var Parser$3 = /** @class */ (function () {
8051
8008
  /** Indicates whether the parser has finished running / `.end` has been called. */
8052
8009
  this.ended = false;
8053
8010
  this.cbs = cbs !== null && cbs !== void 0 ? cbs : {};
8054
- this.lowerCaseTagNames = (_a = options.lowerCaseTags) !== null && _a !== void 0 ? _a : !options.xmlMode;
8011
+ this.htmlMode = !this.options.xmlMode;
8012
+ this.lowerCaseTagNames = (_a = options.lowerCaseTags) !== null && _a !== void 0 ? _a : this.htmlMode;
8055
8013
  this.lowerCaseAttributeNames =
8056
- (_b = options.lowerCaseAttributeNames) !== null && _b !== void 0 ? _b : !options.xmlMode;
8057
- this.tokenizer = new ((_c = options.Tokenizer) !== null && _c !== void 0 ? _c : Tokenizer_js_1.default)(this.options, this);
8058
- (_e = (_d = this.cbs).onparserinit) === null || _e === void 0 ? void 0 : _e.call(_d, this);
8014
+ (_b = options.lowerCaseAttributeNames) !== null && _b !== void 0 ? _b : this.htmlMode;
8015
+ this.recognizeSelfClosing =
8016
+ (_c = options.recognizeSelfClosing) !== null && _c !== void 0 ? _c : !this.htmlMode;
8017
+ this.tokenizer = new ((_d = options.Tokenizer) !== null && _d !== void 0 ? _d : Tokenizer_js_1.default)(this.options, this);
8018
+ this.foreignContext = [!this.htmlMode];
8019
+ (_f = (_e = this.cbs).onparserinit) === null || _f === void 0 ? void 0 : _f.call(_e, this);
8059
8020
  }
8060
8021
  // Tokenizer event handlers
8061
8022
  /** @internal */
8062
- Parser.prototype.ontext = function (start, endIndex) {
8023
+ ontext(start, endIndex) {
8063
8024
  var _a, _b;
8064
- var data = this.getSlice(start, endIndex);
8025
+ const data = this.getSlice(start, endIndex);
8065
8026
  this.endIndex = endIndex - 1;
8066
8027
  (_b = (_a = this.cbs).ontext) === null || _b === void 0 ? void 0 : _b.call(_a, data);
8067
8028
  this.startIndex = endIndex;
8068
- };
8029
+ }
8069
8030
  /** @internal */
8070
- Parser.prototype.ontextentity = function (cp) {
8031
+ ontextentity(cp, endIndex) {
8071
8032
  var _a, _b;
8072
- /*
8073
- * Entities can be emitted on the character, or directly after.
8074
- * We use the section start here to get accurate indices.
8075
- */
8076
- var index = this.tokenizer.getSectionStart();
8077
- this.endIndex = index - 1;
8078
- (_b = (_a = this.cbs).ontext) === null || _b === void 0 ? void 0 : _b.call(_a, (0, decode_js_1.fromCodePoint)(cp));
8079
- this.startIndex = index;
8080
- };
8081
- Parser.prototype.isVoidElement = function (name) {
8082
- return !this.options.xmlMode && voidElements.has(name);
8083
- };
8033
+ this.endIndex = endIndex - 1;
8034
+ (_b = (_a = this.cbs).ontext) === null || _b === void 0 ? void 0 : _b.call(_a, (0, decode_1.fromCodePoint)(cp));
8035
+ this.startIndex = endIndex;
8036
+ }
8037
+ /**
8038
+ * Checks if the current tag is a void element. Override this if you want
8039
+ * to specify your own additional void elements.
8040
+ */
8041
+ isVoidElement(name) {
8042
+ return this.htmlMode && voidElements.has(name);
8043
+ }
8084
8044
  /** @internal */
8085
- Parser.prototype.onopentagname = function (start, endIndex) {
8045
+ onopentagname(start, endIndex) {
8086
8046
  this.endIndex = endIndex;
8087
- var name = this.getSlice(start, endIndex);
8047
+ let name = this.getSlice(start, endIndex);
8088
8048
  if (this.lowerCaseTagNames) {
8089
8049
  name = name.toLowerCase();
8090
8050
  }
8091
8051
  this.emitOpenTag(name);
8092
- };
8093
- Parser.prototype.emitOpenTag = function (name) {
8052
+ }
8053
+ emitOpenTag(name) {
8094
8054
  var _a, _b, _c, _d;
8095
8055
  this.openTagStart = this.startIndex;
8096
8056
  this.tagname = name;
8097
- var impliesClose = !this.options.xmlMode && openImpliesClose.get(name);
8057
+ const impliesClose = this.htmlMode && openImpliesClose.get(name);
8098
8058
  if (impliesClose) {
8099
- while (this.stack.length > 0 &&
8100
- impliesClose.has(this.stack[this.stack.length - 1])) {
8101
- var element = this.stack.pop();
8059
+ while (this.stack.length > 0 && impliesClose.has(this.stack[0])) {
8060
+ const element = this.stack.shift();
8102
8061
  (_b = (_a = this.cbs).onclosetag) === null || _b === void 0 ? void 0 : _b.call(_a, element, true);
8103
8062
  }
8104
8063
  }
8105
8064
  if (!this.isVoidElement(name)) {
8106
- this.stack.push(name);
8107
- if (foreignContextElements.has(name)) {
8108
- this.foreignContext.push(true);
8109
- }
8110
- else if (htmlIntegrationElements.has(name)) {
8111
- this.foreignContext.push(false);
8065
+ this.stack.unshift(name);
8066
+ if (this.htmlMode) {
8067
+ if (foreignContextElements.has(name)) {
8068
+ this.foreignContext.unshift(true);
8069
+ }
8070
+ else if (htmlIntegrationElements.has(name)) {
8071
+ this.foreignContext.unshift(false);
8072
+ }
8112
8073
  }
8113
8074
  }
8114
8075
  (_d = (_c = this.cbs).onopentagname) === null || _d === void 0 ? void 0 : _d.call(_c, name);
8115
8076
  if (this.cbs.onopentag)
8116
8077
  this.attribs = {};
8117
- };
8118
- Parser.prototype.endOpenTag = function (isImplied) {
8078
+ }
8079
+ endOpenTag(isImplied) {
8119
8080
  var _a, _b;
8120
8081
  this.startIndex = this.openTagStart;
8121
8082
  if (this.attribs) {
@@ -8126,60 +8087,55 @@ var Parser$3 = /** @class */ (function () {
8126
8087
  this.cbs.onclosetag(this.tagname, true);
8127
8088
  }
8128
8089
  this.tagname = "";
8129
- };
8090
+ }
8130
8091
  /** @internal */
8131
- Parser.prototype.onopentagend = function (endIndex) {
8092
+ onopentagend(endIndex) {
8132
8093
  this.endIndex = endIndex;
8133
8094
  this.endOpenTag(false);
8134
8095
  // Set `startIndex` for next node
8135
8096
  this.startIndex = endIndex + 1;
8136
- };
8097
+ }
8137
8098
  /** @internal */
8138
- Parser.prototype.onclosetag = function (start, endIndex) {
8139
- var _a, _b, _c, _d, _e, _f;
8099
+ onclosetag(start, endIndex) {
8100
+ var _a, _b, _c, _d, _e, _f, _g, _h;
8140
8101
  this.endIndex = endIndex;
8141
- var name = this.getSlice(start, endIndex);
8102
+ let name = this.getSlice(start, endIndex);
8142
8103
  if (this.lowerCaseTagNames) {
8143
8104
  name = name.toLowerCase();
8144
8105
  }
8145
- if (foreignContextElements.has(name) ||
8146
- htmlIntegrationElements.has(name)) {
8147
- this.foreignContext.pop();
8106
+ if (this.htmlMode &&
8107
+ (foreignContextElements.has(name) ||
8108
+ htmlIntegrationElements.has(name))) {
8109
+ this.foreignContext.shift();
8148
8110
  }
8149
8111
  if (!this.isVoidElement(name)) {
8150
- var pos = this.stack.lastIndexOf(name);
8112
+ const pos = this.stack.indexOf(name);
8151
8113
  if (pos !== -1) {
8152
- if (this.cbs.onclosetag) {
8153
- var count = this.stack.length - pos;
8154
- while (count--) {
8155
- // We know the stack has sufficient elements.
8156
- this.cbs.onclosetag(this.stack.pop(), count !== 0);
8157
- }
8114
+ for (let index = 0; index <= pos; index++) {
8115
+ const element = this.stack.shift();
8116
+ // We know the stack has sufficient elements.
8117
+ (_b = (_a = this.cbs).onclosetag) === null || _b === void 0 ? void 0 : _b.call(_a, element, index !== pos);
8158
8118
  }
8159
- else
8160
- this.stack.length = pos;
8161
8119
  }
8162
- else if (!this.options.xmlMode && name === "p") {
8120
+ else if (this.htmlMode && name === "p") {
8163
8121
  // Implicit open before close
8164
8122
  this.emitOpenTag("p");
8165
8123
  this.closeCurrentTag(true);
8166
8124
  }
8167
8125
  }
8168
- else if (!this.options.xmlMode && name === "br") {
8126
+ else if (this.htmlMode && name === "br") {
8169
8127
  // We can't use `emitOpenTag` for implicit open, as `br` would be implicitly closed.
8170
- (_b = (_a = this.cbs).onopentagname) === null || _b === void 0 ? void 0 : _b.call(_a, "br");
8171
- (_d = (_c = this.cbs).onopentag) === null || _d === void 0 ? void 0 : _d.call(_c, "br", {}, true);
8172
- (_f = (_e = this.cbs).onclosetag) === null || _f === void 0 ? void 0 : _f.call(_e, "br", false);
8128
+ (_d = (_c = this.cbs).onopentagname) === null || _d === void 0 ? void 0 : _d.call(_c, "br");
8129
+ (_f = (_e = this.cbs).onopentag) === null || _f === void 0 ? void 0 : _f.call(_e, "br", {}, true);
8130
+ (_h = (_g = this.cbs).onclosetag) === null || _h === void 0 ? void 0 : _h.call(_g, "br", false);
8173
8131
  }
8174
8132
  // Set `startIndex` for next node
8175
8133
  this.startIndex = endIndex + 1;
8176
- };
8134
+ }
8177
8135
  /** @internal */
8178
- Parser.prototype.onselfclosingtag = function (endIndex) {
8136
+ onselfclosingtag(endIndex) {
8179
8137
  this.endIndex = endIndex;
8180
- if (this.options.xmlMode ||
8181
- this.options.recognizeSelfClosing ||
8182
- this.foreignContext[this.foreignContext.length - 1]) {
8138
+ if (this.recognizeSelfClosing || this.foreignContext[0]) {
8183
8139
  this.closeCurrentTag(false);
8184
8140
  // Set `startIndex` for next node
8185
8141
  this.startIndex = endIndex + 1;
@@ -8188,36 +8144,36 @@ var Parser$3 = /** @class */ (function () {
8188
8144
  // Ignore the fact that the tag is self-closing.
8189
8145
  this.onopentagend(endIndex);
8190
8146
  }
8191
- };
8192
- Parser.prototype.closeCurrentTag = function (isOpenImplied) {
8147
+ }
8148
+ closeCurrentTag(isOpenImplied) {
8193
8149
  var _a, _b;
8194
- var name = this.tagname;
8150
+ const name = this.tagname;
8195
8151
  this.endOpenTag(isOpenImplied);
8196
8152
  // Self-closing tags will be on the top of the stack
8197
- if (this.stack[this.stack.length - 1] === name) {
8153
+ if (this.stack[0] === name) {
8198
8154
  // If the opening tag isn't implied, the closing tag has to be implied.
8199
8155
  (_b = (_a = this.cbs).onclosetag) === null || _b === void 0 ? void 0 : _b.call(_a, name, !isOpenImplied);
8200
- this.stack.pop();
8156
+ this.stack.shift();
8201
8157
  }
8202
- };
8158
+ }
8203
8159
  /** @internal */
8204
- Parser.prototype.onattribname = function (start, endIndex) {
8160
+ onattribname(start, endIndex) {
8205
8161
  this.startIndex = start;
8206
- var name = this.getSlice(start, endIndex);
8162
+ const name = this.getSlice(start, endIndex);
8207
8163
  this.attribname = this.lowerCaseAttributeNames
8208
8164
  ? name.toLowerCase()
8209
8165
  : name;
8210
- };
8166
+ }
8211
8167
  /** @internal */
8212
- Parser.prototype.onattribdata = function (start, endIndex) {
8168
+ onattribdata(start, endIndex) {
8213
8169
  this.attribvalue += this.getSlice(start, endIndex);
8214
- };
8170
+ }
8215
8171
  /** @internal */
8216
- Parser.prototype.onattribentity = function (cp) {
8217
- this.attribvalue += (0, decode_js_1.fromCodePoint)(cp);
8218
- };
8172
+ onattribentity(cp) {
8173
+ this.attribvalue += (0, decode_1.fromCodePoint)(cp);
8174
+ }
8219
8175
  /** @internal */
8220
- Parser.prototype.onattribend = function (quote, endIndex) {
8176
+ onattribend(quote, endIndex) {
8221
8177
  var _a, _b;
8222
8178
  this.endIndex = endIndex;
8223
8179
  (_b = (_a = this.cbs).onattribute) === null || _b === void 0 ? void 0 : _b.call(_a, this.attribname, this.attribvalue, quote === Tokenizer_js_1.QuoteType.Double
@@ -8232,78 +8188,79 @@ var Parser$3 = /** @class */ (function () {
8232
8188
  this.attribs[this.attribname] = this.attribvalue;
8233
8189
  }
8234
8190
  this.attribvalue = "";
8235
- };
8236
- Parser.prototype.getInstructionName = function (value) {
8237
- var index = value.search(reNameEnd);
8238
- var name = index < 0 ? value : value.substr(0, index);
8191
+ }
8192
+ getInstructionName(value) {
8193
+ const index = value.search(reNameEnd);
8194
+ let name = index < 0 ? value : value.substr(0, index);
8239
8195
  if (this.lowerCaseTagNames) {
8240
8196
  name = name.toLowerCase();
8241
8197
  }
8242
8198
  return name;
8243
- };
8199
+ }
8244
8200
  /** @internal */
8245
- Parser.prototype.ondeclaration = function (start, endIndex) {
8201
+ ondeclaration(start, endIndex) {
8246
8202
  this.endIndex = endIndex;
8247
- var value = this.getSlice(start, endIndex);
8203
+ const value = this.getSlice(start, endIndex);
8248
8204
  if (this.cbs.onprocessinginstruction) {
8249
- var name = this.getInstructionName(value);
8250
- this.cbs.onprocessinginstruction("!".concat(name), "!".concat(value));
8205
+ const name = this.getInstructionName(value);
8206
+ this.cbs.onprocessinginstruction(`!${name}`, `!${value}`);
8251
8207
  }
8252
8208
  // Set `startIndex` for next node
8253
8209
  this.startIndex = endIndex + 1;
8254
- };
8210
+ }
8255
8211
  /** @internal */
8256
- Parser.prototype.onprocessinginstruction = function (start, endIndex) {
8212
+ onprocessinginstruction(start, endIndex) {
8257
8213
  this.endIndex = endIndex;
8258
- var value = this.getSlice(start, endIndex);
8214
+ const value = this.getSlice(start, endIndex);
8259
8215
  if (this.cbs.onprocessinginstruction) {
8260
- var name = this.getInstructionName(value);
8261
- this.cbs.onprocessinginstruction("?".concat(name), "?".concat(value));
8216
+ const name = this.getInstructionName(value);
8217
+ this.cbs.onprocessinginstruction(`?${name}`, `?${value}`);
8262
8218
  }
8263
8219
  // Set `startIndex` for next node
8264
8220
  this.startIndex = endIndex + 1;
8265
- };
8221
+ }
8266
8222
  /** @internal */
8267
- Parser.prototype.oncomment = function (start, endIndex, offset) {
8223
+ oncomment(start, endIndex, offset) {
8268
8224
  var _a, _b, _c, _d;
8269
8225
  this.endIndex = endIndex;
8270
8226
  (_b = (_a = this.cbs).oncomment) === null || _b === void 0 ? void 0 : _b.call(_a, this.getSlice(start, endIndex - offset));
8271
8227
  (_d = (_c = this.cbs).oncommentend) === null || _d === void 0 ? void 0 : _d.call(_c);
8272
8228
  // Set `startIndex` for next node
8273
8229
  this.startIndex = endIndex + 1;
8274
- };
8230
+ }
8275
8231
  /** @internal */
8276
- Parser.prototype.oncdata = function (start, endIndex, offset) {
8232
+ oncdata(start, endIndex, offset) {
8277
8233
  var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;
8278
8234
  this.endIndex = endIndex;
8279
- var value = this.getSlice(start, endIndex - offset);
8280
- if (this.options.xmlMode || this.options.recognizeCDATA) {
8235
+ const value = this.getSlice(start, endIndex - offset);
8236
+ if (!this.htmlMode || this.options.recognizeCDATA) {
8281
8237
  (_b = (_a = this.cbs).oncdatastart) === null || _b === void 0 ? void 0 : _b.call(_a);
8282
8238
  (_d = (_c = this.cbs).ontext) === null || _d === void 0 ? void 0 : _d.call(_c, value);
8283
8239
  (_f = (_e = this.cbs).oncdataend) === null || _f === void 0 ? void 0 : _f.call(_e);
8284
8240
  }
8285
8241
  else {
8286
- (_h = (_g = this.cbs).oncomment) === null || _h === void 0 ? void 0 : _h.call(_g, "[CDATA[".concat(value, "]]"));
8242
+ (_h = (_g = this.cbs).oncomment) === null || _h === void 0 ? void 0 : _h.call(_g, `[CDATA[${value}]]`);
8287
8243
  (_k = (_j = this.cbs).oncommentend) === null || _k === void 0 ? void 0 : _k.call(_j);
8288
8244
  }
8289
8245
  // Set `startIndex` for next node
8290
8246
  this.startIndex = endIndex + 1;
8291
- };
8247
+ }
8292
8248
  /** @internal */
8293
- Parser.prototype.onend = function () {
8249
+ onend() {
8294
8250
  var _a, _b;
8295
8251
  if (this.cbs.onclosetag) {
8296
8252
  // Set the end index for all remaining tags
8297
8253
  this.endIndex = this.startIndex;
8298
- for (var index = this.stack.length; index > 0; this.cbs.onclosetag(this.stack[--index], true))
8299
- ;
8254
+ for (let index = 0; index < this.stack.length; index++) {
8255
+ this.cbs.onclosetag(this.stack[index], true);
8256
+ }
8300
8257
  }
8301
8258
  (_b = (_a = this.cbs).onend) === null || _b === void 0 ? void 0 : _b.call(_a);
8302
- };
8259
+ }
8303
8260
  /**
8304
8261
  * Resets the parser to a blank state, ready to parse a new HTML document
8305
8262
  */
8306
- Parser.prototype.reset = function () {
8263
+ reset() {
8307
8264
  var _a, _b, _c, _d;
8308
8265
  (_b = (_a = this.cbs).onreset) === null || _b === void 0 ? void 0 : _b.call(_a);
8309
8266
  this.tokenizer.reset();
@@ -8315,42 +8272,44 @@ var Parser$3 = /** @class */ (function () {
8315
8272
  this.endIndex = 0;
8316
8273
  (_d = (_c = this.cbs).onparserinit) === null || _d === void 0 ? void 0 : _d.call(_c, this);
8317
8274
  this.buffers.length = 0;
8275
+ this.foreignContext.length = 0;
8276
+ this.foreignContext.unshift(!this.htmlMode);
8318
8277
  this.bufferOffset = 0;
8319
8278
  this.writeIndex = 0;
8320
8279
  this.ended = false;
8321
- };
8280
+ }
8322
8281
  /**
8323
8282
  * Resets the parser, then parses a complete document and
8324
8283
  * pushes it to the handler.
8325
8284
  *
8326
8285
  * @param data Document to parse.
8327
8286
  */
8328
- Parser.prototype.parseComplete = function (data) {
8287
+ parseComplete(data) {
8329
8288
  this.reset();
8330
8289
  this.end(data);
8331
- };
8332
- Parser.prototype.getSlice = function (start, end) {
8290
+ }
8291
+ getSlice(start, end) {
8333
8292
  while (start - this.bufferOffset >= this.buffers[0].length) {
8334
8293
  this.shiftBuffer();
8335
8294
  }
8336
- var slice = this.buffers[0].slice(start - this.bufferOffset, end - this.bufferOffset);
8295
+ let slice = this.buffers[0].slice(start - this.bufferOffset, end - this.bufferOffset);
8337
8296
  while (end - this.bufferOffset > this.buffers[0].length) {
8338
8297
  this.shiftBuffer();
8339
8298
  slice += this.buffers[0].slice(0, end - this.bufferOffset);
8340
8299
  }
8341
8300
  return slice;
8342
- };
8343
- Parser.prototype.shiftBuffer = function () {
8301
+ }
8302
+ shiftBuffer() {
8344
8303
  this.bufferOffset += this.buffers[0].length;
8345
8304
  this.writeIndex--;
8346
8305
  this.buffers.shift();
8347
- };
8306
+ }
8348
8307
  /**
8349
8308
  * Parses a chunk of data and calls the corresponding callbacks.
8350
8309
  *
8351
8310
  * @param chunk Chunk to parse.
8352
8311
  */
8353
- Parser.prototype.write = function (chunk) {
8312
+ write(chunk) {
8354
8313
  var _a, _b;
8355
8314
  if (this.ended) {
8356
8315
  (_b = (_a = this.cbs).onerror) === null || _b === void 0 ? void 0 : _b.call(_a, new Error(".write() after done!"));
@@ -8361,13 +8320,13 @@ var Parser$3 = /** @class */ (function () {
8361
8320
  this.tokenizer.write(chunk);
8362
8321
  this.writeIndex++;
8363
8322
  }
8364
- };
8323
+ }
8365
8324
  /**
8366
8325
  * Parses the end of the buffer and clears the stack, calls onend.
8367
8326
  *
8368
8327
  * @param chunk Optional final chunk to parse.
8369
8328
  */
8370
- Parser.prototype.end = function (chunk) {
8329
+ end(chunk) {
8371
8330
  var _a, _b;
8372
8331
  if (this.ended) {
8373
8332
  (_b = (_a = this.cbs).onerror) === null || _b === void 0 ? void 0 : _b.call(_a, new Error(".end() after done!"));
@@ -8377,17 +8336,17 @@ var Parser$3 = /** @class */ (function () {
8377
8336
  this.write(chunk);
8378
8337
  this.ended = true;
8379
8338
  this.tokenizer.end();
8380
- };
8339
+ }
8381
8340
  /**
8382
8341
  * Pauses parsing. The parser won't emit events until `resume` is called.
8383
8342
  */
8384
- Parser.prototype.pause = function () {
8343
+ pause() {
8385
8344
  this.tokenizer.pause();
8386
- };
8345
+ }
8387
8346
  /**
8388
8347
  * Resumes parsing after `pause` was called.
8389
8348
  */
8390
- Parser.prototype.resume = function () {
8349
+ resume() {
8391
8350
  this.tokenizer.resume();
8392
8351
  while (this.tokenizer.running &&
8393
8352
  this.writeIndex < this.buffers.length) {
@@ -8395,27 +8354,26 @@ var Parser$3 = /** @class */ (function () {
8395
8354
  }
8396
8355
  if (this.ended)
8397
8356
  this.tokenizer.end();
8398
- };
8357
+ }
8399
8358
  /**
8400
8359
  * Alias of `write`, for backwards compatibility.
8401
8360
  *
8402
8361
  * @param chunk Chunk to parse.
8403
8362
  * @deprecated
8404
8363
  */
8405
- Parser.prototype.parseChunk = function (chunk) {
8364
+ parseChunk(chunk) {
8406
8365
  this.write(chunk);
8407
- };
8366
+ }
8408
8367
  /**
8409
8368
  * Alias of `end`, for backwards compatibility.
8410
8369
  *
8411
8370
  * @param chunk Optional final chunk to parse.
8412
8371
  * @deprecated
8413
8372
  */
8414
- Parser.prototype.done = function (chunk) {
8373
+ done(chunk) {
8415
8374
  this.end(chunk);
8416
- };
8417
- return Parser;
8418
- }());
8375
+ }
8376
+ };
8419
8377
  Parser$4.Parser = Parser$3;
8420
8378
 
8421
8379
  var lib$4 = {};
@@ -8967,168 +8925,808 @@ function cloneChildren(childs) {
8967
8925
  if (k2 === undefined) k2 = k;
8968
8926
  o[k2] = m[k];
8969
8927
  }));
8970
- var __exportStar = (commonjsGlobal && commonjsGlobal.__exportStar) || function(m, exports) {
8971
- for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
8928
+ var __exportStar = (commonjsGlobal && commonjsGlobal.__exportStar) || function(m, exports) {
8929
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
8930
+ };
8931
+ Object.defineProperty(exports, "__esModule", { value: true });
8932
+ exports.DomHandler = void 0;
8933
+ var domelementtype_1 = lib$3;
8934
+ var node_js_1 = node$1;
8935
+ __exportStar(node$1, exports);
8936
+ // Default options
8937
+ var defaultOpts = {
8938
+ withStartIndices: false,
8939
+ withEndIndices: false,
8940
+ xmlMode: false,
8941
+ };
8942
+ var DomHandler = /** @class */ (function () {
8943
+ /**
8944
+ * @param callback Called once parsing has completed.
8945
+ * @param options Settings for the handler.
8946
+ * @param elementCB Callback whenever a tag is closed.
8947
+ */
8948
+ function DomHandler(callback, options, elementCB) {
8949
+ /** The elements of the DOM */
8950
+ this.dom = [];
8951
+ /** The root element for the DOM */
8952
+ this.root = new node_js_1.Document(this.dom);
8953
+ /** Indicated whether parsing has been completed. */
8954
+ this.done = false;
8955
+ /** Stack of open tags. */
8956
+ this.tagStack = [this.root];
8957
+ /** A data node that is still being written to. */
8958
+ this.lastNode = null;
8959
+ /** Reference to the parser instance. Used for location information. */
8960
+ this.parser = null;
8961
+ // Make it possible to skip arguments, for backwards-compatibility
8962
+ if (typeof options === "function") {
8963
+ elementCB = options;
8964
+ options = defaultOpts;
8965
+ }
8966
+ if (typeof callback === "object") {
8967
+ options = callback;
8968
+ callback = undefined;
8969
+ }
8970
+ this.callback = callback !== null && callback !== void 0 ? callback : null;
8971
+ this.options = options !== null && options !== void 0 ? options : defaultOpts;
8972
+ this.elementCB = elementCB !== null && elementCB !== void 0 ? elementCB : null;
8973
+ }
8974
+ DomHandler.prototype.onparserinit = function (parser) {
8975
+ this.parser = parser;
8976
+ };
8977
+ // Resets the handler back to starting state
8978
+ DomHandler.prototype.onreset = function () {
8979
+ this.dom = [];
8980
+ this.root = new node_js_1.Document(this.dom);
8981
+ this.done = false;
8982
+ this.tagStack = [this.root];
8983
+ this.lastNode = null;
8984
+ this.parser = null;
8985
+ };
8986
+ // Signals the handler that parsing is done
8987
+ DomHandler.prototype.onend = function () {
8988
+ if (this.done)
8989
+ return;
8990
+ this.done = true;
8991
+ this.parser = null;
8992
+ this.handleCallback(null);
8993
+ };
8994
+ DomHandler.prototype.onerror = function (error) {
8995
+ this.handleCallback(error);
8996
+ };
8997
+ DomHandler.prototype.onclosetag = function () {
8998
+ this.lastNode = null;
8999
+ var elem = this.tagStack.pop();
9000
+ if (this.options.withEndIndices) {
9001
+ elem.endIndex = this.parser.endIndex;
9002
+ }
9003
+ if (this.elementCB)
9004
+ this.elementCB(elem);
9005
+ };
9006
+ DomHandler.prototype.onopentag = function (name, attribs) {
9007
+ var type = this.options.xmlMode ? domelementtype_1.ElementType.Tag : undefined;
9008
+ var element = new node_js_1.Element(name, attribs, undefined, type);
9009
+ this.addNode(element);
9010
+ this.tagStack.push(element);
9011
+ };
9012
+ DomHandler.prototype.ontext = function (data) {
9013
+ var lastNode = this.lastNode;
9014
+ if (lastNode && lastNode.type === domelementtype_1.ElementType.Text) {
9015
+ lastNode.data += data;
9016
+ if (this.options.withEndIndices) {
9017
+ lastNode.endIndex = this.parser.endIndex;
9018
+ }
9019
+ }
9020
+ else {
9021
+ var node = new node_js_1.Text(data);
9022
+ this.addNode(node);
9023
+ this.lastNode = node;
9024
+ }
9025
+ };
9026
+ DomHandler.prototype.oncomment = function (data) {
9027
+ if (this.lastNode && this.lastNode.type === domelementtype_1.ElementType.Comment) {
9028
+ this.lastNode.data += data;
9029
+ return;
9030
+ }
9031
+ var node = new node_js_1.Comment(data);
9032
+ this.addNode(node);
9033
+ this.lastNode = node;
9034
+ };
9035
+ DomHandler.prototype.oncommentend = function () {
9036
+ this.lastNode = null;
9037
+ };
9038
+ DomHandler.prototype.oncdatastart = function () {
9039
+ var text = new node_js_1.Text("");
9040
+ var node = new node_js_1.CDATA([text]);
9041
+ this.addNode(node);
9042
+ text.parent = node;
9043
+ this.lastNode = text;
9044
+ };
9045
+ DomHandler.prototype.oncdataend = function () {
9046
+ this.lastNode = null;
9047
+ };
9048
+ DomHandler.prototype.onprocessinginstruction = function (name, data) {
9049
+ var node = new node_js_1.ProcessingInstruction(name, data);
9050
+ this.addNode(node);
9051
+ };
9052
+ DomHandler.prototype.handleCallback = function (error) {
9053
+ if (typeof this.callback === "function") {
9054
+ this.callback(error, this.dom);
9055
+ }
9056
+ else if (error) {
9057
+ throw error;
9058
+ }
9059
+ };
9060
+ DomHandler.prototype.addNode = function (node) {
9061
+ var parent = this.tagStack[this.tagStack.length - 1];
9062
+ var previousSibling = parent.children[parent.children.length - 1];
9063
+ if (this.options.withStartIndices) {
9064
+ node.startIndex = this.parser.startIndex;
9065
+ }
9066
+ if (this.options.withEndIndices) {
9067
+ node.endIndex = this.parser.endIndex;
9068
+ }
9069
+ parent.children.push(node);
9070
+ if (previousSibling) {
9071
+ node.prev = previousSibling;
9072
+ previousSibling.next = node;
9073
+ }
9074
+ node.parent = parent;
9075
+ this.lastNode = null;
9076
+ };
9077
+ return DomHandler;
9078
+ }());
9079
+ exports.DomHandler = DomHandler;
9080
+ exports.default = DomHandler;
9081
+ } (lib$4));
9082
+
9083
+ var lib$2 = {};
9084
+
9085
+ var stringify$5 = {};
9086
+
9087
+ var lib$1 = {};
9088
+
9089
+ var lib = {};
9090
+
9091
+ var decode = {};
9092
+
9093
+ var decodeDataHtml = {};
9094
+
9095
+ // Generated using scripts/write-decode-map.ts
9096
+ Object.defineProperty(decodeDataHtml, "__esModule", { value: true });
9097
+ decodeDataHtml.default = new Uint16Array(
9098
+ // prettier-ignore
9099
+ "\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\ud835\udd04rave\u803b\xc0\u40c0pha;\u4391acr;\u4100d;\u6a53\u0100gp\x9d\xa1on;\u4104f;\uc000\ud835\udd38plyFunction;\u6061ing\u803b\xc5\u40c5\u0100cs\xbe\xc3r;\uc000\ud835\udc9cign;\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\ud835\udd05pf;\uc000\ud835\udd39eve;\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\ud835\udc9ep\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\ud835\udd07\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\ud835\udd3b\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\ud835\udc9frok;\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\ud835\udd08rave\u803b\xc8\u40c8ement;\u6208\u0100ap\u04fa\u04fecr;\u4112ty\u0253\u0506\0\0\u0512mallSquare;\u65fberySmallSquare;\u65ab\u0100gp\u0526\u052aon;\u4118f;\uc000\ud835\udd3csilon;\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\ud835\udd09lled\u0253\u0597\0\0\u05a3mallSquare;\u65fcerySmallSquare;\u65aa\u0370\u05ba\0\u05bf\0\0\u05c4f;\uc000\ud835\udd3dAll;\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\ud835\udd0a;\u62d9pf;\uc000\ud835\udd3eeater\u0300EFGLST\u0635\u0644\u064e\u0656\u065b\u0666qual\u0100;L\u063e\u063f\u6265ess;\u62dbullEqual;\u6267reater;\u6aa2ess;\u6277lantEqual;\u6a7eilde;\u6273cr;\uc000\ud835\udca2;\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\ud835\udd40a;\u4399cr;\u6110ilde;\u4128\u01eb\u079a\0\u079ecy;\u4406l\u803b\xcf\u40cf\u0280cfosu\u07ac\u07b7\u07bc\u07c2\u07d0\u0100iy\u07b1\u07b5rc;\u4134;\u4419r;\uc000\ud835\udd0dpf;\uc000\ud835\udd41\u01e3\u07c7\0\u07ccr;\uc000\ud835\udca5rcy;\u4408kcy;\u4404\u0380HJacfos\u07e4\u07e8\u07ec\u07f1\u07fd\u0802\u0808cy;\u4425cy;\u440cppa;\u439a\u0100ey\u07f6\u07fbdil;\u4136;\u441ar;\uc000\ud835\udd0epf;\uc000\ud835\udd42cr;\uc000\ud835\udca6\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\ud835\udd0f\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\ud835\udd43er\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\ud835\udd10nusPlus;\u6213pf;\uc000\ud835\udd44c\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\ud835\udd11\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\ud835\udca9ilde\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\ud835\udd12rave\u803b\xd2\u40d2\u0180aei\u0dee\u0df2\u0df6cr;\u414cga;\u43a9cron;\u439fpf;\uc000\ud835\udd46enCurly\u0100DQ\u0e0e\u0e1aoubleQuote;\u601cuote;\u6018;\u6a54\u0100cl\u0e27\u0e2cr;\uc000\ud835\udcaaash\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\ud835\udd13i;\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\ud835\udcab;\u43a8\u0200Ufos\u0f11\u0f16\u0f1b\u0f1fOT\u803b\"\u4022r;\uc000\ud835\udd14pf;\u611acr;\uc000\ud835\udcac\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\ud835\udd16ort\u0200DLRU\u112a\u1134\u113e\u1149ownArrow\xbb\u041eeftArrow\xbb\u089aightArrow\xbb\u0fddpArrow;\u6191gma;\u43a3allCircle;\u6218pf;\uc000\ud835\udd4a\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\ud835\udcaear;\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\ud835\udd17\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\ud835\udd4bipleDot;\u60db\u0100ct\u12d6\u12dbr;\uc000\ud835\udcafrok;\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\ud835\udd18rave\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\ud835\udd4c\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\ud835\udcb0ilde;\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\ud835\udd19pf;\uc000\ud835\udd4dcr;\uc000\ud835\udcb1dash;\u62aa\u0280cefos\u14a7\u14ac\u14b1\u14b6\u14bcirc;\u4174dge;\u62c0r;\uc000\ud835\udd1apf;\uc000\ud835\udd4ecr;\uc000\ud835\udcb2\u0200fios\u14cb\u14d0\u14d2\u14d8r;\uc000\ud835\udd1b;\u439epf;\uc000\ud835\udd4fcr;\uc000\ud835\udcb3\u0480AIUacfosu\u14f1\u14f5\u14f9\u14fd\u1504\u150f\u1514\u151a\u1520cy;\u442fcy;\u4407cy;\u442ecute\u803b\xdd\u40dd\u0100iy\u1509\u150drc;\u4176;\u442br;\uc000\ud835\udd1cpf;\uc000\ud835\udd50cr;\uc000\ud835\udcb4ml;\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\ud835\udcb5\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\ud835\udd1erave\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\ud835\udd52\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\ud835\udcb6;\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\ud835\udd1fg\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\ud835\udd53\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\ud835\udcb7mi;\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\ud835\udd20\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\ud835\udd54o\xe4\u0254\u8100\xa9;s\u0155\u1b1dr;\u6117\u0100ao\u1b25\u1b29rr;\u61b5ss;\u6717\u0100cu\u1b32\u1b37r;\uc000\ud835\udcb8\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\ud835\udd21ar\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\ud835\udd55\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\ud835\udcb9;\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\ud835\udd22\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\ud835\udd56\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\ud835\udd23lig;\u8000\ufb01lig;\uc000fj\u0180alt\u1fd9\u1fdc\u1fe1t;\u666dig;\u8000\ufb02ns;\u65b1of;\u4192\u01f0\u1fee\0\u1ff3f;\uc000\ud835\udd57\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\ud835\udcbb\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\ud835\udd24\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\ud835\udd58\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\ud835\udd25s\u0100ew\u2223\u2229arow;\u6925arow;\u6926\u0280amopr\u223a\u223e\u2243\u225e\u2263rr;\u61fftht;\u623bk\u0100lr\u2249\u2253eftarrow;\u61a9ightarrow;\u61aaf;\uc000\ud835\udd59bar;\u6015\u0180clt\u226f\u2274\u2278r;\uc000\ud835\udcbdas\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\ud835\udd26rave\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\ud835\udd5aa;\u43b9uest\u803b\xbf\u40bf\u0100ci\u238a\u238fr;\uc000\ud835\udcben\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\ud835\udd27ath;\u4237pf;\uc000\ud835\udd5b\u01e3\u23ec\0\u23f1r;\uc000\ud835\udcbfrcy;\u4458kcy;\u4454\u0400acfghjos\u240b\u2416\u2422\u2427\u242d\u2431\u2435\u243bppa\u0100;v\u2413\u2414\u43ba;\u43f0\u0100ey\u241b\u2420dil;\u4137;\u443ar;\uc000\ud835\udd28reen;\u4138cy;\u4445cy;\u445cpf;\uc000\ud835\udd5ccr;\uc000\ud835\udcc0\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\ud835\udd29\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\ud835\udd5dus;\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\ud835\udcc1m\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\ud835\udd2ao;\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\ud835\udd5e\u0100ct\u28f8\u28fdr;\uc000\ud835\udcc2pos\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\ud835\udd2b\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\ud835\udd5f\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\ud835\udcc3ort\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\ud835\udd2c\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\ud835\udd60\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\ud835\udd2d\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\ud835\udd61nd\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\ud835\udcc5;\u43c8ncsp;\u6008\u0300fiopsu\u2fda\u22e2\u2fdf\u2fe5\u2feb\u2ff1r;\uc000\ud835\udd2epf;\uc000\ud835\udd62rime;\u6057cr;\uc000\ud835\udcc6\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\ud835\udd2f\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\ud835\udd63us;\u6a2eimes;\u6a35\u0100ap\u325d\u3267r\u0100;g\u3263\u3264\u4029t;\u6994olint;\u6a12ar\xf2\u31e3\u0200achq\u327b\u3280\u10bc\u3285quo;\u603ar;\uc000\ud835\udcc7\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\ud835\udd30\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\ud835\udd64a\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\ud835\udcc8tm\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\ud835\udd31\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\ud835\udd65rk;\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\ud835\udcc9;\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\ud835\udd32rave\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\ud835\udd66\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\ud835\udcca\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\ud835\udd33tr\xe9\u39aesu\u0100bp\u39ef\u39f1\xbb\u0d1c\xbb\u0d59pf;\uc000\ud835\udd67ro\xf0\u0efbtr\xe9\u39b4\u0100cu\u3a06\u3a0br;\uc000\ud835\udccb\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\ud835\udd34pf;\uc000\ud835\udd68\u0100;e\u1479\u3a66at\xe8\u1479cr;\uc000\ud835\udccc\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\ud835\udd35\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\ud835\udd69im\xe5\u17b2\u0100Aa\u3ac7\u3acar\xf2\u03cer\xf2\u0a01\u0100cq\u3ad2\u17b8r;\uc000\ud835\udccd\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\ud835\udd36cy;\u4457pf;\uc000\ud835\udd6acr;\uc000\ud835\udcce\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\ud835\udd37cy;\u4436grarr;\u61ddpf;\uc000\ud835\udd6bcr;\uc000\ud835\udccf\u0100jn\u3b85\u3b87;\u600dj;\u600c"
9100
+ .split("")
9101
+ .map(function (c) { return c.charCodeAt(0); }));
9102
+
9103
+ var decodeDataXml = {};
9104
+
9105
+ // Generated using scripts/write-decode-map.ts
9106
+ Object.defineProperty(decodeDataXml, "__esModule", { value: true });
9107
+ decodeDataXml.default = new Uint16Array(
9108
+ // prettier-ignore
9109
+ "\u0200aglq\t\x15\x18\x1b\u026d\x0f\0\0\x12p;\u4026os;\u4027t;\u403et;\u403cuot;\u4022"
9110
+ .split("")
9111
+ .map(function (c) { return c.charCodeAt(0); }));
9112
+
9113
+ var decode_codepoint = {};
9114
+
9115
+ (function (exports) {
9116
+ // Adapted from https://github.com/mathiasbynens/he/blob/36afe179392226cf1b6ccdb16ebbb7a5a844d93a/src/he.js#L106-L134
9117
+ var _a;
9118
+ Object.defineProperty(exports, "__esModule", { value: true });
9119
+ exports.replaceCodePoint = exports.fromCodePoint = void 0;
9120
+ var decodeMap = new Map([
9121
+ [0, 65533],
9122
+ // C1 Unicode control character reference replacements
9123
+ [128, 8364],
9124
+ [130, 8218],
9125
+ [131, 402],
9126
+ [132, 8222],
9127
+ [133, 8230],
9128
+ [134, 8224],
9129
+ [135, 8225],
9130
+ [136, 710],
9131
+ [137, 8240],
9132
+ [138, 352],
9133
+ [139, 8249],
9134
+ [140, 338],
9135
+ [142, 381],
9136
+ [145, 8216],
9137
+ [146, 8217],
9138
+ [147, 8220],
9139
+ [148, 8221],
9140
+ [149, 8226],
9141
+ [150, 8211],
9142
+ [151, 8212],
9143
+ [152, 732],
9144
+ [153, 8482],
9145
+ [154, 353],
9146
+ [155, 8250],
9147
+ [156, 339],
9148
+ [158, 382],
9149
+ [159, 376],
9150
+ ]);
9151
+ /**
9152
+ * Polyfill for `String.fromCodePoint`. It is used to create a string from a Unicode code point.
9153
+ */
9154
+ exports.fromCodePoint =
9155
+ // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition, node/no-unsupported-features/es-builtins
9156
+ (_a = String.fromCodePoint) !== null && _a !== void 0 ? _a : function (codePoint) {
9157
+ var output = "";
9158
+ if (codePoint > 0xffff) {
9159
+ codePoint -= 0x10000;
9160
+ output += String.fromCharCode(((codePoint >>> 10) & 0x3ff) | 0xd800);
9161
+ codePoint = 0xdc00 | (codePoint & 0x3ff);
9162
+ }
9163
+ output += String.fromCharCode(codePoint);
9164
+ return output;
9165
+ };
9166
+ /**
9167
+ * Replace the given code point with a replacement character if it is a
9168
+ * surrogate or is outside the valid range. Otherwise return the code
9169
+ * point unchanged.
9170
+ */
9171
+ function replaceCodePoint(codePoint) {
9172
+ var _a;
9173
+ if ((codePoint >= 0xd800 && codePoint <= 0xdfff) || codePoint > 0x10ffff) {
9174
+ return 0xfffd;
9175
+ }
9176
+ return (_a = decodeMap.get(codePoint)) !== null && _a !== void 0 ? _a : codePoint;
9177
+ }
9178
+ exports.replaceCodePoint = replaceCodePoint;
9179
+ /**
9180
+ * Replace the code point if relevant, then convert it to a string.
9181
+ *
9182
+ * @deprecated Use `fromCodePoint(replaceCodePoint(codePoint))` instead.
9183
+ * @param codePoint The code point to decode.
9184
+ * @returns The decoded code point.
9185
+ */
9186
+ function decodeCodePoint(codePoint) {
9187
+ return (0, exports.fromCodePoint)(replaceCodePoint(codePoint));
9188
+ }
9189
+ exports.default = decodeCodePoint;
9190
+
9191
+ } (decode_codepoint));
9192
+
9193
+ (function (exports) {
9194
+ var __createBinding = (commonjsGlobal && commonjsGlobal.__createBinding) || (Object.create ? (function(o, m, k, k2) {
9195
+ if (k2 === undefined) k2 = k;
9196
+ var desc = Object.getOwnPropertyDescriptor(m, k);
9197
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
9198
+ desc = { enumerable: true, get: function() { return m[k]; } };
9199
+ }
9200
+ Object.defineProperty(o, k2, desc);
9201
+ }) : (function(o, m, k, k2) {
9202
+ if (k2 === undefined) k2 = k;
9203
+ o[k2] = m[k];
9204
+ }));
9205
+ var __setModuleDefault = (commonjsGlobal && commonjsGlobal.__setModuleDefault) || (Object.create ? (function(o, v) {
9206
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
9207
+ }) : function(o, v) {
9208
+ o["default"] = v;
9209
+ });
9210
+ var __importStar = (commonjsGlobal && commonjsGlobal.__importStar) || function (mod) {
9211
+ if (mod && mod.__esModule) return mod;
9212
+ var result = {};
9213
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
9214
+ __setModuleDefault(result, mod);
9215
+ return result;
8972
9216
  };
8973
- Object.defineProperty(exports, "__esModule", { value: true });
8974
- exports.DomHandler = void 0;
8975
- var domelementtype_1 = lib$3;
8976
- var node_js_1 = node$1;
8977
- __exportStar(node$1, exports);
8978
- // Default options
8979
- var defaultOpts = {
8980
- withStartIndices: false,
8981
- withEndIndices: false,
8982
- xmlMode: false,
9217
+ var __importDefault = (commonjsGlobal && commonjsGlobal.__importDefault) || function (mod) {
9218
+ return (mod && mod.__esModule) ? mod : { "default": mod };
8983
9219
  };
8984
- var DomHandler = /** @class */ (function () {
9220
+ Object.defineProperty(exports, "__esModule", { value: true });
9221
+ exports.decodeXML = exports.decodeHTMLStrict = exports.decodeHTMLAttribute = exports.decodeHTML = exports.determineBranch = exports.EntityDecoder = exports.DecodingMode = exports.BinTrieFlags = exports.fromCodePoint = exports.replaceCodePoint = exports.decodeCodePoint = exports.xmlDecodeTree = exports.htmlDecodeTree = void 0;
9222
+ var decode_data_html_js_1 = __importDefault(decodeDataHtml);
9223
+ exports.htmlDecodeTree = decode_data_html_js_1.default;
9224
+ var decode_data_xml_js_1 = __importDefault(decodeDataXml);
9225
+ exports.xmlDecodeTree = decode_data_xml_js_1.default;
9226
+ var decode_codepoint_js_1 = __importStar(decode_codepoint);
9227
+ exports.decodeCodePoint = decode_codepoint_js_1.default;
9228
+ var decode_codepoint_js_2 = decode_codepoint;
9229
+ Object.defineProperty(exports, "replaceCodePoint", { enumerable: true, get: function () { return decode_codepoint_js_2.replaceCodePoint; } });
9230
+ Object.defineProperty(exports, "fromCodePoint", { enumerable: true, get: function () { return decode_codepoint_js_2.fromCodePoint; } });
9231
+ var CharCodes;
9232
+ (function (CharCodes) {
9233
+ CharCodes[CharCodes["NUM"] = 35] = "NUM";
9234
+ CharCodes[CharCodes["SEMI"] = 59] = "SEMI";
9235
+ CharCodes[CharCodes["EQUALS"] = 61] = "EQUALS";
9236
+ CharCodes[CharCodes["ZERO"] = 48] = "ZERO";
9237
+ CharCodes[CharCodes["NINE"] = 57] = "NINE";
9238
+ CharCodes[CharCodes["LOWER_A"] = 97] = "LOWER_A";
9239
+ CharCodes[CharCodes["LOWER_F"] = 102] = "LOWER_F";
9240
+ CharCodes[CharCodes["LOWER_X"] = 120] = "LOWER_X";
9241
+ CharCodes[CharCodes["LOWER_Z"] = 122] = "LOWER_Z";
9242
+ CharCodes[CharCodes["UPPER_A"] = 65] = "UPPER_A";
9243
+ CharCodes[CharCodes["UPPER_F"] = 70] = "UPPER_F";
9244
+ CharCodes[CharCodes["UPPER_Z"] = 90] = "UPPER_Z";
9245
+ })(CharCodes || (CharCodes = {}));
9246
+ /** Bit that needs to be set to convert an upper case ASCII character to lower case */
9247
+ var TO_LOWER_BIT = 32;
9248
+ var BinTrieFlags;
9249
+ (function (BinTrieFlags) {
9250
+ BinTrieFlags[BinTrieFlags["VALUE_LENGTH"] = 49152] = "VALUE_LENGTH";
9251
+ BinTrieFlags[BinTrieFlags["BRANCH_LENGTH"] = 16256] = "BRANCH_LENGTH";
9252
+ BinTrieFlags[BinTrieFlags["JUMP_TABLE"] = 127] = "JUMP_TABLE";
9253
+ })(BinTrieFlags = exports.BinTrieFlags || (exports.BinTrieFlags = {}));
9254
+ function isNumber(code) {
9255
+ return code >= CharCodes.ZERO && code <= CharCodes.NINE;
9256
+ }
9257
+ function isHexadecimalCharacter(code) {
9258
+ return ((code >= CharCodes.UPPER_A && code <= CharCodes.UPPER_F) ||
9259
+ (code >= CharCodes.LOWER_A && code <= CharCodes.LOWER_F));
9260
+ }
9261
+ function isAsciiAlphaNumeric(code) {
9262
+ return ((code >= CharCodes.UPPER_A && code <= CharCodes.UPPER_Z) ||
9263
+ (code >= CharCodes.LOWER_A && code <= CharCodes.LOWER_Z) ||
9264
+ isNumber(code));
9265
+ }
9266
+ /**
9267
+ * Checks if the given character is a valid end character for an entity in an attribute.
9268
+ *
9269
+ * Attribute values that aren't terminated properly aren't parsed, and shouldn't lead to a parser error.
9270
+ * See the example in https://html.spec.whatwg.org/multipage/parsing.html#named-character-reference-state
9271
+ */
9272
+ function isEntityInAttributeInvalidEnd(code) {
9273
+ return code === CharCodes.EQUALS || isAsciiAlphaNumeric(code);
9274
+ }
9275
+ var EntityDecoderState;
9276
+ (function (EntityDecoderState) {
9277
+ EntityDecoderState[EntityDecoderState["EntityStart"] = 0] = "EntityStart";
9278
+ EntityDecoderState[EntityDecoderState["NumericStart"] = 1] = "NumericStart";
9279
+ EntityDecoderState[EntityDecoderState["NumericDecimal"] = 2] = "NumericDecimal";
9280
+ EntityDecoderState[EntityDecoderState["NumericHex"] = 3] = "NumericHex";
9281
+ EntityDecoderState[EntityDecoderState["NamedEntity"] = 4] = "NamedEntity";
9282
+ })(EntityDecoderState || (EntityDecoderState = {}));
9283
+ var DecodingMode;
9284
+ (function (DecodingMode) {
9285
+ /** Entities in text nodes that can end with any character. */
9286
+ DecodingMode[DecodingMode["Legacy"] = 0] = "Legacy";
9287
+ /** Only allow entities terminated with a semicolon. */
9288
+ DecodingMode[DecodingMode["Strict"] = 1] = "Strict";
9289
+ /** Entities in attributes have limitations on ending characters. */
9290
+ DecodingMode[DecodingMode["Attribute"] = 2] = "Attribute";
9291
+ })(DecodingMode = exports.DecodingMode || (exports.DecodingMode = {}));
9292
+ /**
9293
+ * Token decoder with support of writing partial entities.
9294
+ */
9295
+ var EntityDecoder = /** @class */ (function () {
9296
+ function EntityDecoder(
9297
+ /** The tree used to decode entities. */
9298
+ decodeTree,
9299
+ /**
9300
+ * The function that is called when a codepoint is decoded.
9301
+ *
9302
+ * For multi-byte named entities, this will be called multiple times,
9303
+ * with the second codepoint, and the same `consumed` value.
9304
+ *
9305
+ * @param codepoint The decoded codepoint.
9306
+ * @param consumed The number of bytes consumed by the decoder.
9307
+ */
9308
+ emitCodePoint,
9309
+ /** An object that is used to produce errors. */
9310
+ errors) {
9311
+ this.decodeTree = decodeTree;
9312
+ this.emitCodePoint = emitCodePoint;
9313
+ this.errors = errors;
9314
+ /** The current state of the decoder. */
9315
+ this.state = EntityDecoderState.EntityStart;
9316
+ /** Characters that were consumed while parsing an entity. */
9317
+ this.consumed = 1;
9318
+ /**
9319
+ * The result of the entity.
9320
+ *
9321
+ * Either the result index of a numeric entity, or the codepoint of a
9322
+ * numeric entity.
9323
+ */
9324
+ this.result = 0;
9325
+ /** The current index in the decode tree. */
9326
+ this.treeIndex = 0;
9327
+ /** The number of characters that were consumed in excess. */
9328
+ this.excess = 1;
9329
+ /** The mode in which the decoder is operating. */
9330
+ this.decodeMode = DecodingMode.Strict;
9331
+ }
9332
+ /** Resets the instance to make it reusable. */
9333
+ EntityDecoder.prototype.startEntity = function (decodeMode) {
9334
+ this.decodeMode = decodeMode;
9335
+ this.state = EntityDecoderState.EntityStart;
9336
+ this.result = 0;
9337
+ this.treeIndex = 0;
9338
+ this.excess = 1;
9339
+ this.consumed = 1;
9340
+ };
9341
+ /**
9342
+ * Write an entity to the decoder. This can be called multiple times with partial entities.
9343
+ * If the entity is incomplete, the decoder will return -1.
9344
+ *
9345
+ * Mirrors the implementation of `getDecoder`, but with the ability to stop decoding if the
9346
+ * entity is incomplete, and resume when the next string is written.
9347
+ *
9348
+ * @param string The string containing the entity (or a continuation of the entity).
9349
+ * @param offset The offset at which the entity begins. Should be 0 if this is not the first call.
9350
+ * @returns The number of characters that were consumed, or -1 if the entity is incomplete.
9351
+ */
9352
+ EntityDecoder.prototype.write = function (str, offset) {
9353
+ switch (this.state) {
9354
+ case EntityDecoderState.EntityStart: {
9355
+ if (str.charCodeAt(offset) === CharCodes.NUM) {
9356
+ this.state = EntityDecoderState.NumericStart;
9357
+ this.consumed += 1;
9358
+ return this.stateNumericStart(str, offset + 1);
9359
+ }
9360
+ this.state = EntityDecoderState.NamedEntity;
9361
+ return this.stateNamedEntity(str, offset);
9362
+ }
9363
+ case EntityDecoderState.NumericStart: {
9364
+ return this.stateNumericStart(str, offset);
9365
+ }
9366
+ case EntityDecoderState.NumericDecimal: {
9367
+ return this.stateNumericDecimal(str, offset);
9368
+ }
9369
+ case EntityDecoderState.NumericHex: {
9370
+ return this.stateNumericHex(str, offset);
9371
+ }
9372
+ case EntityDecoderState.NamedEntity: {
9373
+ return this.stateNamedEntity(str, offset);
9374
+ }
9375
+ }
9376
+ };
8985
9377
  /**
8986
- * @param callback Called once parsing has completed.
8987
- * @param options Settings for the handler.
8988
- * @param elementCB Callback whenever a tag is closed.
9378
+ * Switches between the numeric decimal and hexadecimal states.
9379
+ *
9380
+ * Equivalent to the `Numeric character reference state` in the HTML spec.
9381
+ *
9382
+ * @param str The string containing the entity (or a continuation of the entity).
9383
+ * @param offset The current offset.
9384
+ * @returns The number of characters that were consumed, or -1 if the entity is incomplete.
8989
9385
  */
8990
- function DomHandler(callback, options, elementCB) {
8991
- /** The elements of the DOM */
8992
- this.dom = [];
8993
- /** The root element for the DOM */
8994
- this.root = new node_js_1.Document(this.dom);
8995
- /** Indicated whether parsing has been completed. */
8996
- this.done = false;
8997
- /** Stack of open tags. */
8998
- this.tagStack = [this.root];
8999
- /** A data node that is still being written to. */
9000
- this.lastNode = null;
9001
- /** Reference to the parser instance. Used for location information. */
9002
- this.parser = null;
9003
- // Make it possible to skip arguments, for backwards-compatibility
9004
- if (typeof options === "function") {
9005
- elementCB = options;
9006
- options = defaultOpts;
9386
+ EntityDecoder.prototype.stateNumericStart = function (str, offset) {
9387
+ if (offset >= str.length) {
9388
+ return -1;
9007
9389
  }
9008
- if (typeof callback === "object") {
9009
- options = callback;
9010
- callback = undefined;
9390
+ if ((str.charCodeAt(offset) | TO_LOWER_BIT) === CharCodes.LOWER_X) {
9391
+ this.state = EntityDecoderState.NumericHex;
9392
+ this.consumed += 1;
9393
+ return this.stateNumericHex(str, offset + 1);
9011
9394
  }
9012
- this.callback = callback !== null && callback !== void 0 ? callback : null;
9013
- this.options = options !== null && options !== void 0 ? options : defaultOpts;
9014
- this.elementCB = elementCB !== null && elementCB !== void 0 ? elementCB : null;
9015
- }
9016
- DomHandler.prototype.onparserinit = function (parser) {
9017
- this.parser = parser;
9018
- };
9019
- // Resets the handler back to starting state
9020
- DomHandler.prototype.onreset = function () {
9021
- this.dom = [];
9022
- this.root = new node_js_1.Document(this.dom);
9023
- this.done = false;
9024
- this.tagStack = [this.root];
9025
- this.lastNode = null;
9026
- this.parser = null;
9027
- };
9028
- // Signals the handler that parsing is done
9029
- DomHandler.prototype.onend = function () {
9030
- if (this.done)
9031
- return;
9032
- this.done = true;
9033
- this.parser = null;
9034
- this.handleCallback(null);
9035
- };
9036
- DomHandler.prototype.onerror = function (error) {
9037
- this.handleCallback(error);
9395
+ this.state = EntityDecoderState.NumericDecimal;
9396
+ return this.stateNumericDecimal(str, offset);
9038
9397
  };
9039
- DomHandler.prototype.onclosetag = function () {
9040
- this.lastNode = null;
9041
- var elem = this.tagStack.pop();
9042
- if (this.options.withEndIndices) {
9043
- elem.endIndex = this.parser.endIndex;
9398
+ EntityDecoder.prototype.addToNumericResult = function (str, start, end, base) {
9399
+ if (start !== end) {
9400
+ var digitCount = end - start;
9401
+ this.result =
9402
+ this.result * Math.pow(base, digitCount) +
9403
+ parseInt(str.substr(start, digitCount), base);
9404
+ this.consumed += digitCount;
9044
9405
  }
9045
- if (this.elementCB)
9046
- this.elementCB(elem);
9047
9406
  };
9048
- DomHandler.prototype.onopentag = function (name, attribs) {
9049
- var type = this.options.xmlMode ? domelementtype_1.ElementType.Tag : undefined;
9050
- var element = new node_js_1.Element(name, attribs, undefined, type);
9051
- this.addNode(element);
9052
- this.tagStack.push(element);
9053
- };
9054
- DomHandler.prototype.ontext = function (data) {
9055
- var lastNode = this.lastNode;
9056
- if (lastNode && lastNode.type === domelementtype_1.ElementType.Text) {
9057
- lastNode.data += data;
9058
- if (this.options.withEndIndices) {
9059
- lastNode.endIndex = this.parser.endIndex;
9407
+ /**
9408
+ * Parses a hexadecimal numeric entity.
9409
+ *
9410
+ * Equivalent to the `Hexademical character reference state` in the HTML spec.
9411
+ *
9412
+ * @param str The string containing the entity (or a continuation of the entity).
9413
+ * @param offset The current offset.
9414
+ * @returns The number of characters that were consumed, or -1 if the entity is incomplete.
9415
+ */
9416
+ EntityDecoder.prototype.stateNumericHex = function (str, offset) {
9417
+ var startIdx = offset;
9418
+ while (offset < str.length) {
9419
+ var char = str.charCodeAt(offset);
9420
+ if (isNumber(char) || isHexadecimalCharacter(char)) {
9421
+ offset += 1;
9422
+ }
9423
+ else {
9424
+ this.addToNumericResult(str, startIdx, offset, 16);
9425
+ return this.emitNumericEntity(char, 3);
9060
9426
  }
9061
9427
  }
9062
- else {
9063
- var node = new node_js_1.Text(data);
9064
- this.addNode(node);
9065
- this.lastNode = node;
9066
- }
9428
+ this.addToNumericResult(str, startIdx, offset, 16);
9429
+ return -1;
9067
9430
  };
9068
- DomHandler.prototype.oncomment = function (data) {
9069
- if (this.lastNode && this.lastNode.type === domelementtype_1.ElementType.Comment) {
9070
- this.lastNode.data += data;
9071
- return;
9431
+ /**
9432
+ * Parses a decimal numeric entity.
9433
+ *
9434
+ * Equivalent to the `Decimal character reference state` in the HTML spec.
9435
+ *
9436
+ * @param str The string containing the entity (or a continuation of the entity).
9437
+ * @param offset The current offset.
9438
+ * @returns The number of characters that were consumed, or -1 if the entity is incomplete.
9439
+ */
9440
+ EntityDecoder.prototype.stateNumericDecimal = function (str, offset) {
9441
+ var startIdx = offset;
9442
+ while (offset < str.length) {
9443
+ var char = str.charCodeAt(offset);
9444
+ if (isNumber(char)) {
9445
+ offset += 1;
9446
+ }
9447
+ else {
9448
+ this.addToNumericResult(str, startIdx, offset, 10);
9449
+ return this.emitNumericEntity(char, 2);
9450
+ }
9072
9451
  }
9073
- var node = new node_js_1.Comment(data);
9074
- this.addNode(node);
9075
- this.lastNode = node;
9452
+ this.addToNumericResult(str, startIdx, offset, 10);
9453
+ return -1;
9076
9454
  };
9077
- DomHandler.prototype.oncommentend = function () {
9078
- this.lastNode = null;
9455
+ /**
9456
+ * Validate and emit a numeric entity.
9457
+ *
9458
+ * Implements the logic from the `Hexademical character reference start
9459
+ * state` and `Numeric character reference end state` in the HTML spec.
9460
+ *
9461
+ * @param lastCp The last code point of the entity. Used to see if the
9462
+ * entity was terminated with a semicolon.
9463
+ * @param expectedLength The minimum number of characters that should be
9464
+ * consumed. Used to validate that at least one digit
9465
+ * was consumed.
9466
+ * @returns The number of characters that were consumed.
9467
+ */
9468
+ EntityDecoder.prototype.emitNumericEntity = function (lastCp, expectedLength) {
9469
+ var _a;
9470
+ // Ensure we consumed at least one digit.
9471
+ if (this.consumed <= expectedLength) {
9472
+ (_a = this.errors) === null || _a === void 0 ? void 0 : _a.absenceOfDigitsInNumericCharacterReference(this.consumed);
9473
+ return 0;
9474
+ }
9475
+ // Figure out if this is a legit end of the entity
9476
+ if (lastCp === CharCodes.SEMI) {
9477
+ this.consumed += 1;
9478
+ }
9479
+ else if (this.decodeMode === DecodingMode.Strict) {
9480
+ return 0;
9481
+ }
9482
+ this.emitCodePoint((0, decode_codepoint_js_1.replaceCodePoint)(this.result), this.consumed);
9483
+ if (this.errors) {
9484
+ if (lastCp !== CharCodes.SEMI) {
9485
+ this.errors.missingSemicolonAfterCharacterReference();
9486
+ }
9487
+ this.errors.validateNumericCharacterReference(this.result);
9488
+ }
9489
+ return this.consumed;
9079
9490
  };
9080
- DomHandler.prototype.oncdatastart = function () {
9081
- var text = new node_js_1.Text("");
9082
- var node = new node_js_1.CDATA([text]);
9083
- this.addNode(node);
9084
- text.parent = node;
9085
- this.lastNode = text;
9491
+ /**
9492
+ * Parses a named entity.
9493
+ *
9494
+ * Equivalent to the `Named character reference state` in the HTML spec.
9495
+ *
9496
+ * @param str The string containing the entity (or a continuation of the entity).
9497
+ * @param offset The current offset.
9498
+ * @returns The number of characters that were consumed, or -1 if the entity is incomplete.
9499
+ */
9500
+ EntityDecoder.prototype.stateNamedEntity = function (str, offset) {
9501
+ var decodeTree = this.decodeTree;
9502
+ var current = decodeTree[this.treeIndex];
9503
+ // The mask is the number of bytes of the value, including the current byte.
9504
+ var valueLength = (current & BinTrieFlags.VALUE_LENGTH) >> 14;
9505
+ for (; offset < str.length; offset++, this.excess++) {
9506
+ var char = str.charCodeAt(offset);
9507
+ this.treeIndex = determineBranch(decodeTree, current, this.treeIndex + Math.max(1, valueLength), char);
9508
+ if (this.treeIndex < 0) {
9509
+ return this.result === 0 ||
9510
+ // If we are parsing an attribute
9511
+ (this.decodeMode === DecodingMode.Attribute &&
9512
+ // We shouldn't have consumed any characters after the entity,
9513
+ (valueLength === 0 ||
9514
+ // And there should be no invalid characters.
9515
+ isEntityInAttributeInvalidEnd(char)))
9516
+ ? 0
9517
+ : this.emitNotTerminatedNamedEntity();
9518
+ }
9519
+ current = decodeTree[this.treeIndex];
9520
+ valueLength = (current & BinTrieFlags.VALUE_LENGTH) >> 14;
9521
+ // If the branch is a value, store it and continue
9522
+ if (valueLength !== 0) {
9523
+ // If the entity is terminated by a semicolon, we are done.
9524
+ if (char === CharCodes.SEMI) {
9525
+ return this.emitNamedEntityData(this.treeIndex, valueLength, this.consumed + this.excess);
9526
+ }
9527
+ // If we encounter a non-terminated (legacy) entity while parsing strictly, then ignore it.
9528
+ if (this.decodeMode !== DecodingMode.Strict) {
9529
+ this.result = this.treeIndex;
9530
+ this.consumed += this.excess;
9531
+ this.excess = 0;
9532
+ }
9533
+ }
9534
+ }
9535
+ return -1;
9086
9536
  };
9087
- DomHandler.prototype.oncdataend = function () {
9088
- this.lastNode = null;
9537
+ /**
9538
+ * Emit a named entity that was not terminated with a semicolon.
9539
+ *
9540
+ * @returns The number of characters consumed.
9541
+ */
9542
+ EntityDecoder.prototype.emitNotTerminatedNamedEntity = function () {
9543
+ var _a;
9544
+ var _b = this, result = _b.result, decodeTree = _b.decodeTree;
9545
+ var valueLength = (decodeTree[result] & BinTrieFlags.VALUE_LENGTH) >> 14;
9546
+ this.emitNamedEntityData(result, valueLength, this.consumed);
9547
+ (_a = this.errors) === null || _a === void 0 ? void 0 : _a.missingSemicolonAfterCharacterReference();
9548
+ return this.consumed;
9089
9549
  };
9090
- DomHandler.prototype.onprocessinginstruction = function (name, data) {
9091
- var node = new node_js_1.ProcessingInstruction(name, data);
9092
- this.addNode(node);
9550
+ /**
9551
+ * Emit a named entity.
9552
+ *
9553
+ * @param result The index of the entity in the decode tree.
9554
+ * @param valueLength The number of bytes in the entity.
9555
+ * @param consumed The number of characters consumed.
9556
+ *
9557
+ * @returns The number of characters consumed.
9558
+ */
9559
+ EntityDecoder.prototype.emitNamedEntityData = function (result, valueLength, consumed) {
9560
+ var decodeTree = this.decodeTree;
9561
+ this.emitCodePoint(valueLength === 1
9562
+ ? decodeTree[result] & ~BinTrieFlags.VALUE_LENGTH
9563
+ : decodeTree[result + 1], consumed);
9564
+ if (valueLength === 3) {
9565
+ // For multi-byte values, we need to emit the second byte.
9566
+ this.emitCodePoint(decodeTree[result + 2], consumed);
9567
+ }
9568
+ return consumed;
9093
9569
  };
9094
- DomHandler.prototype.handleCallback = function (error) {
9095
- if (typeof this.callback === "function") {
9096
- this.callback(error, this.dom);
9570
+ /**
9571
+ * Signal to the parser that the end of the input was reached.
9572
+ *
9573
+ * Remaining data will be emitted and relevant errors will be produced.
9574
+ *
9575
+ * @returns The number of characters consumed.
9576
+ */
9577
+ EntityDecoder.prototype.end = function () {
9578
+ var _a;
9579
+ switch (this.state) {
9580
+ case EntityDecoderState.NamedEntity: {
9581
+ // Emit a named entity if we have one.
9582
+ return this.result !== 0 &&
9583
+ (this.decodeMode !== DecodingMode.Attribute ||
9584
+ this.result === this.treeIndex)
9585
+ ? this.emitNotTerminatedNamedEntity()
9586
+ : 0;
9587
+ }
9588
+ // Otherwise, emit a numeric entity if we have one.
9589
+ case EntityDecoderState.NumericDecimal: {
9590
+ return this.emitNumericEntity(0, 2);
9591
+ }
9592
+ case EntityDecoderState.NumericHex: {
9593
+ return this.emitNumericEntity(0, 3);
9594
+ }
9595
+ case EntityDecoderState.NumericStart: {
9596
+ (_a = this.errors) === null || _a === void 0 ? void 0 : _a.absenceOfDigitsInNumericCharacterReference(this.consumed);
9597
+ return 0;
9598
+ }
9599
+ case EntityDecoderState.EntityStart: {
9600
+ // Return 0 if we have no entity.
9601
+ return 0;
9602
+ }
9097
9603
  }
9098
- else if (error) {
9099
- throw error;
9604
+ };
9605
+ return EntityDecoder;
9606
+ }());
9607
+ exports.EntityDecoder = EntityDecoder;
9608
+ /**
9609
+ * Creates a function that decodes entities in a string.
9610
+ *
9611
+ * @param decodeTree The decode tree.
9612
+ * @returns A function that decodes entities in a string.
9613
+ */
9614
+ function getDecoder(decodeTree) {
9615
+ var ret = "";
9616
+ var decoder = new EntityDecoder(decodeTree, function (str) { return (ret += (0, decode_codepoint_js_1.fromCodePoint)(str)); });
9617
+ return function decodeWithTrie(str, decodeMode) {
9618
+ var lastIndex = 0;
9619
+ var offset = 0;
9620
+ while ((offset = str.indexOf("&", offset)) >= 0) {
9621
+ ret += str.slice(lastIndex, offset);
9622
+ decoder.startEntity(decodeMode);
9623
+ var len = decoder.write(str,
9624
+ // Skip the "&"
9625
+ offset + 1);
9626
+ if (len < 0) {
9627
+ lastIndex = offset + decoder.end();
9628
+ break;
9629
+ }
9630
+ lastIndex = offset + len;
9631
+ // If `len` is 0, skip the current `&` and continue.
9632
+ offset = len === 0 ? lastIndex + 1 : lastIndex;
9100
9633
  }
9634
+ var result = ret + str.slice(lastIndex);
9635
+ // Make sure we don't keep a reference to the final string.
9636
+ ret = "";
9637
+ return result;
9101
9638
  };
9102
- DomHandler.prototype.addNode = function (node) {
9103
- var parent = this.tagStack[this.tagStack.length - 1];
9104
- var previousSibling = parent.children[parent.children.length - 1];
9105
- if (this.options.withStartIndices) {
9106
- node.startIndex = this.parser.startIndex;
9639
+ }
9640
+ /**
9641
+ * Determines the branch of the current node that is taken given the current
9642
+ * character. This function is used to traverse the trie.
9643
+ *
9644
+ * @param decodeTree The trie.
9645
+ * @param current The current node.
9646
+ * @param nodeIdx The index right after the current node and its value.
9647
+ * @param char The current character.
9648
+ * @returns The index of the next node, or -1 if no branch is taken.
9649
+ */
9650
+ function determineBranch(decodeTree, current, nodeIdx, char) {
9651
+ var branchCount = (current & BinTrieFlags.BRANCH_LENGTH) >> 7;
9652
+ var jumpOffset = current & BinTrieFlags.JUMP_TABLE;
9653
+ // Case 1: Single branch encoded in jump offset
9654
+ if (branchCount === 0) {
9655
+ return jumpOffset !== 0 && char === jumpOffset ? nodeIdx : -1;
9656
+ }
9657
+ // Case 2: Multiple branches encoded in jump table
9658
+ if (jumpOffset) {
9659
+ var value = char - jumpOffset;
9660
+ return value < 0 || value >= branchCount
9661
+ ? -1
9662
+ : decodeTree[nodeIdx + value] - 1;
9663
+ }
9664
+ // Case 3: Multiple branches encoded in dictionary
9665
+ // Binary search for the character.
9666
+ var lo = nodeIdx;
9667
+ var hi = lo + branchCount - 1;
9668
+ while (lo <= hi) {
9669
+ var mid = (lo + hi) >>> 1;
9670
+ var midVal = decodeTree[mid];
9671
+ if (midVal < char) {
9672
+ lo = mid + 1;
9107
9673
  }
9108
- if (this.options.withEndIndices) {
9109
- node.endIndex = this.parser.endIndex;
9674
+ else if (midVal > char) {
9675
+ hi = mid - 1;
9110
9676
  }
9111
- parent.children.push(node);
9112
- if (previousSibling) {
9113
- node.prev = previousSibling;
9114
- previousSibling.next = node;
9677
+ else {
9678
+ return decodeTree[mid + branchCount];
9115
9679
  }
9116
- node.parent = parent;
9117
- this.lastNode = null;
9118
- };
9119
- return DomHandler;
9120
- }());
9121
- exports.DomHandler = DomHandler;
9122
- exports.default = DomHandler;
9123
- } (lib$4));
9124
-
9125
- var lib$2 = {};
9126
-
9127
- var stringify$5 = {};
9128
-
9129
- var lib$1 = {};
9130
-
9131
- var lib = {};
9680
+ }
9681
+ return -1;
9682
+ }
9683
+ exports.determineBranch = determineBranch;
9684
+ var htmlDecoder = getDecoder(decode_data_html_js_1.default);
9685
+ var xmlDecoder = getDecoder(decode_data_xml_js_1.default);
9686
+ /**
9687
+ * Decodes an HTML string.
9688
+ *
9689
+ * @param str The string to decode.
9690
+ * @param mode The decoding mode.
9691
+ * @returns The decoded string.
9692
+ */
9693
+ function decodeHTML(str, mode) {
9694
+ if (mode === void 0) { mode = DecodingMode.Legacy; }
9695
+ return htmlDecoder(str, mode);
9696
+ }
9697
+ exports.decodeHTML = decodeHTML;
9698
+ /**
9699
+ * Decodes an HTML string in an attribute.
9700
+ *
9701
+ * @param str The string to decode.
9702
+ * @returns The decoded string.
9703
+ */
9704
+ function decodeHTMLAttribute(str) {
9705
+ return htmlDecoder(str, DecodingMode.Attribute);
9706
+ }
9707
+ exports.decodeHTMLAttribute = decodeHTMLAttribute;
9708
+ /**
9709
+ * Decodes an HTML string, requiring all entities to be terminated by a semicolon.
9710
+ *
9711
+ * @param str The string to decode.
9712
+ * @returns The decoded string.
9713
+ */
9714
+ function decodeHTMLStrict(str) {
9715
+ return htmlDecoder(str, DecodingMode.Strict);
9716
+ }
9717
+ exports.decodeHTMLStrict = decodeHTMLStrict;
9718
+ /**
9719
+ * Decodes an XML string, requiring all entities to be terminated by a semicolon.
9720
+ *
9721
+ * @param str The string to decode.
9722
+ * @returns The decoded string.
9723
+ */
9724
+ function decodeXML(str) {
9725
+ return xmlDecoder(str, DecodingMode.Strict);
9726
+ }
9727
+ exports.decodeXML = decodeXML;
9728
+
9729
+ } (decode));
9132
9730
 
9133
9731
  var encode = {};
9134
9732
 
@@ -10879,22 +11477,37 @@ function isValidFeed(value) {
10879
11477
  }) : function(o, v) {
10880
11478
  o["default"] = v;
10881
11479
  });
10882
- var __importStar = (commonjsGlobal && commonjsGlobal.__importStar) || function (mod) {
10883
- if (mod && mod.__esModule) return mod;
10884
- var result = {};
10885
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
10886
- __setModuleDefault(result, mod);
10887
- return result;
10888
- };
11480
+ var __importStar = (commonjsGlobal && commonjsGlobal.__importStar) || (function () {
11481
+ var ownKeys = function(o) {
11482
+ ownKeys = Object.getOwnPropertyNames || function (o) {
11483
+ var ar = [];
11484
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
11485
+ return ar;
11486
+ };
11487
+ return ownKeys(o);
11488
+ };
11489
+ return function (mod) {
11490
+ if (mod && mod.__esModule) return mod;
11491
+ var result = {};
11492
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
11493
+ __setModuleDefault(result, mod);
11494
+ return result;
11495
+ };
11496
+ })();
10889
11497
  var __importDefault = (commonjsGlobal && commonjsGlobal.__importDefault) || function (mod) {
10890
11498
  return (mod && mod.__esModule) ? mod : { "default": mod };
10891
11499
  };
10892
11500
  Object.defineProperty(exports, "__esModule", { value: true });
10893
- exports.DomUtils = exports.parseFeed = exports.getFeed = exports.ElementType = exports.Tokenizer = exports.createDomStream = exports.parseDOM = exports.parseDocument = exports.DefaultHandler = exports.DomHandler = exports.Parser = void 0;
10894
- var Parser_js_1 = Parser$4;
11501
+ exports.DomUtils = exports.getFeed = exports.ElementType = exports.QuoteType = exports.Tokenizer = exports.DefaultHandler = exports.DomHandler = exports.Parser = void 0;
11502
+ exports.parseDocument = parseDocument;
11503
+ exports.parseDOM = parseDOM;
11504
+ exports.createDocumentStream = createDocumentStream;
11505
+ exports.createDomStream = createDomStream;
11506
+ exports.parseFeed = parseFeed;
11507
+ const Parser_js_1 = Parser$4;
10895
11508
  var Parser_js_2 = Parser$4;
10896
11509
  Object.defineProperty(exports, "Parser", { enumerable: true, get: function () { return Parser_js_2.Parser; } });
10897
- var domhandler_1 = lib$4;
11510
+ const domhandler_1 = lib$4;
10898
11511
  var domhandler_2 = lib$4;
10899
11512
  Object.defineProperty(exports, "DomHandler", { enumerable: true, get: function () { return domhandler_2.DomHandler; } });
10900
11513
  // Old name for DomHandler
@@ -10904,14 +11517,13 @@ function isValidFeed(value) {
10904
11517
  * Parses the data, returns the resulting document.
10905
11518
  *
10906
11519
  * @param data The data that should be parsed.
10907
- * @param options Optional options for the parser and DOM builder.
11520
+ * @param options Optional options for the parser and DOM handler.
10908
11521
  */
10909
11522
  function parseDocument(data, options) {
10910
- var handler = new domhandler_1.DomHandler(undefined, options);
11523
+ const handler = new domhandler_1.DomHandler(undefined, options);
10911
11524
  new Parser_js_1.Parser(handler, options).end(data);
10912
11525
  return handler.root;
10913
11526
  }
10914
- exports.parseDocument = parseDocument;
10915
11527
  /**
10916
11528
  * Parses data, returns an array of the root nodes.
10917
11529
  *
@@ -10919,50 +11531,59 @@ function isValidFeed(value) {
10919
11531
  * Use `parseDocument` to get the `Document` node instead.
10920
11532
  *
10921
11533
  * @param data The data that should be parsed.
10922
- * @param options Optional options for the parser and DOM builder.
11534
+ * @param options Optional options for the parser and DOM handler.
10923
11535
  * @deprecated Use `parseDocument` instead.
10924
11536
  */
10925
11537
  function parseDOM(data, options) {
10926
11538
  return parseDocument(data, options).children;
10927
11539
  }
10928
- exports.parseDOM = parseDOM;
10929
11540
  /**
10930
11541
  * Creates a parser instance, with an attached DOM handler.
10931
11542
  *
10932
- * @param callback A callback that will be called once parsing has been completed.
10933
- * @param options Optional options for the parser and DOM builder.
11543
+ * @param callback A callback that will be called once parsing has been completed, with the resulting document.
11544
+ * @param options Optional options for the parser and DOM handler.
11545
+ * @param elementCallback An optional callback that will be called every time a tag has been completed inside of the DOM.
11546
+ */
11547
+ function createDocumentStream(callback, options, elementCallback) {
11548
+ const handler = new domhandler_1.DomHandler((error) => callback(error, handler.root), options, elementCallback);
11549
+ return new Parser_js_1.Parser(handler, options);
11550
+ }
11551
+ /**
11552
+ * Creates a parser instance, with an attached DOM handler.
11553
+ *
11554
+ * @param callback A callback that will be called once parsing has been completed, with an array of root nodes.
11555
+ * @param options Optional options for the parser and DOM handler.
10934
11556
  * @param elementCallback An optional callback that will be called every time a tag has been completed inside of the DOM.
11557
+ * @deprecated Use `createDocumentStream` instead.
10935
11558
  */
10936
11559
  function createDomStream(callback, options, elementCallback) {
10937
- var handler = new domhandler_1.DomHandler(callback, options, elementCallback);
11560
+ const handler = new domhandler_1.DomHandler(callback, options, elementCallback);
10938
11561
  return new Parser_js_1.Parser(handler, options);
10939
11562
  }
10940
- exports.createDomStream = createDomStream;
10941
- var Tokenizer_js_1 = Tokenizer$1;
11563
+ var Tokenizer_js_1 = Tokenizer$2;
10942
11564
  Object.defineProperty(exports, "Tokenizer", { enumerable: true, get: function () { return __importDefault(Tokenizer_js_1).default; } });
11565
+ Object.defineProperty(exports, "QuoteType", { enumerable: true, get: function () { return Tokenizer_js_1.QuoteType; } });
10943
11566
  /*
10944
11567
  * All of the following exports exist for backwards-compatibility.
10945
11568
  * They should probably be removed eventually.
10946
11569
  */
10947
11570
  exports.ElementType = __importStar(lib$3);
10948
- var domutils_1 = lib$2;
11571
+ const domutils_1 = lib$2;
10949
11572
  var domutils_2 = lib$2;
10950
11573
  Object.defineProperty(exports, "getFeed", { enumerable: true, get: function () { return domutils_2.getFeed; } });
10951
- var parseFeedDefaultOptions = { xmlMode: true };
11574
+ const parseFeedDefaultOptions = { xmlMode: true };
10952
11575
  /**
10953
11576
  * Parse a feed.
10954
11577
  *
10955
11578
  * @param feed The feed that should be parsed, as a string.
10956
11579
  * @param options Optionally, options for parsing. When using this, you should set `xmlMode` to `true`.
10957
11580
  */
10958
- function parseFeed(feed, options) {
10959
- if (options === void 0) { options = parseFeedDefaultOptions; }
11581
+ function parseFeed(feed, options = parseFeedDefaultOptions) {
10960
11582
  return (0, domutils_1.getFeed)(parseDOM(feed, options));
10961
11583
  }
10962
- exports.parseFeed = parseFeed;
10963
11584
  exports.DomUtils = __importStar(lib$2);
10964
11585
 
10965
- } (lib$5));
11586
+ } (commonjs));
10966
11587
 
10967
11588
  var escapeStringRegexp$1 = string => {
10968
11589
  if (typeof string !== 'string') {
@@ -13693,7 +14314,15 @@ let MapGenerator$2 = class MapGenerator {
13693
14314
  }
13694
14315
  }
13695
14316
  } else if (this.css) {
13696
- this.css = this.css.replace(/\n*\/\*#[\S\s]*?\*\/$/gm, '');
14317
+ let startIndex;
14318
+ while ((startIndex = this.css.lastIndexOf('/*#')) !== -1) {
14319
+ let endIndex = this.css.indexOf('*/', startIndex + 3);
14320
+ if (endIndex === -1) break
14321
+ while (startIndex > 0 && this.css[startIndex - 1] === '\n') {
14322
+ startIndex--;
14323
+ }
14324
+ this.css = this.css.slice(0, startIndex) + this.css.slice(endIndex + 2);
14325
+ }
13697
14326
  }
13698
14327
  }
13699
14328
 
@@ -14426,7 +15055,7 @@ let Parser$2 = class Parser {
14426
15055
  node.source.end.offset++;
14427
15056
 
14428
15057
  let text = token[1].slice(2, -2);
14429
- if (/^\s*$/.test(text)) {
15058
+ if (!text.trim()) {
14430
15059
  node.text = '';
14431
15060
  node.raws.left = text;
14432
15061
  node.raws.right = '';
@@ -15605,10 +16234,9 @@ let NoWorkResult$1 = class NoWorkResult {
15605
16234
  this._css = css;
15606
16235
  this._opts = opts;
15607
16236
  this._map = undefined;
15608
- let root;
15609
16237
 
15610
16238
  let str = stringify$1;
15611
- this.result = new Result$1(this._processor, root, this._opts);
16239
+ this.result = new Result$1(this._processor, undefined, this._opts);
15612
16240
  this.result.css = css;
15613
16241
 
15614
16242
  let self = this;
@@ -15618,7 +16246,7 @@ let NoWorkResult$1 = class NoWorkResult {
15618
16246
  }
15619
16247
  });
15620
16248
 
15621
- let map = new MapGenerator(str, root, this._opts, css);
16249
+ let map = new MapGenerator(str, undefined, this._opts, css);
15622
16250
  if (map.isMap()) {
15623
16251
  let [generatedCSS, generatedMap] = map.generate();
15624
16252
  if (generatedCSS) {
@@ -15684,7 +16312,7 @@ let Root$1 = root;
15684
16312
 
15685
16313
  let Processor$1 = class Processor {
15686
16314
  constructor(plugins = []) {
15687
- this.version = '8.5.6';
16315
+ this.version = '8.5.8';
15688
16316
  this.plugins = this.normalize(plugins);
15689
16317
  }
15690
16318
 
@@ -15843,7 +16471,7 @@ LazyResult.registerPostcss(postcss);
15843
16471
  var postcss_1 = postcss;
15844
16472
  postcss.default = postcss;
15845
16473
 
15846
- const htmlparser = lib$5;
16474
+ const htmlparser = commonjs;
15847
16475
  const escapeStringRegexp = escapeStringRegexp$1;
15848
16476
  const { isPlainObject } = isPlainObject$2;
15849
16477
  const deepmerge = cjs;
@@ -15933,7 +16561,8 @@ function sanitizeHtml(html, options, _recursing) {
15933
16561
  }
15934
16562
 
15935
16563
  let result = '';
15936
- // Used for hot swapping the result variable with an empty string in order to "capture" the text written to it.
16564
+ // Used for hot swapping the result variable with an empty string
16565
+ // in order to "capture" the text written to it.
15937
16566
  let tempResult = '';
15938
16567
 
15939
16568
  function Frame(tag, attribs) {
@@ -15964,7 +16593,8 @@ function sanitizeHtml(html, options, _recursing) {
15964
16593
  options.parser = Object.assign({}, htmlParserDefaults, options.parser);
15965
16594
 
15966
16595
  const tagAllowed = function (name) {
15967
- return options.allowedTags === false || (options.allowedTags || []).indexOf(name) > -1;
16596
+ return options.allowedTags === false ||
16597
+ (options.allowedTags || []).indexOf(name) > -1;
15968
16598
  };
15969
16599
 
15970
16600
  // vulnerableTags
@@ -16146,7 +16776,8 @@ function sanitizeHtml(html, options, _recursing) {
16146
16776
  }
16147
16777
 
16148
16778
  const isBeingEscaped = skip && (options.disallowedTagsMode === 'escape' || options.disallowedTagsMode === 'recursiveEscape');
16149
- const shouldPreserveEscapedAttributes = isBeingEscaped && options.preserveEscapedAttributes;
16779
+ const shouldPreserveEscapedAttributes = isBeingEscaped &&
16780
+ options.preserveEscapedAttributes;
16150
16781
 
16151
16782
  if (shouldPreserveEscapedAttributes) {
16152
16783
  each(attribs, function(value, a) {
@@ -16160,8 +16791,10 @@ function sanitizeHtml(html, options, _recursing) {
16160
16791
  delete frame.attribs[a];
16161
16792
  return;
16162
16793
  }
16163
- // If the value is empty, check if the attribute is in the allowedEmptyAttributes array.
16164
- // If it is not in the allowedEmptyAttributes array, and it is a known non-boolean attribute, delete it
16794
+ // If the value is empty, check if the attribute is
16795
+ // in the allowedEmptyAttributes array.
16796
+ // If it is not in the allowedEmptyAttributes array,
16797
+ // and it is a known non-boolean attribute, delete it
16165
16798
  // List taken from https://html.spec.whatwg.org/multipage/indices.html#attributes-3
16166
16799
  if (value === '' && (!options.allowedEmptyAttributes.includes(a)) &&
16167
16800
  (options.nonBooleanAttributes.includes(a) || options.nonBooleanAttributes.includes('*'))) {
@@ -16172,9 +16805,11 @@ function sanitizeHtml(html, options, _recursing) {
16172
16805
  // as necessary if there are specific values defined.
16173
16806
  let passedAllowedAttributesMapCheck = false;
16174
16807
  if (!allowedAttributesMap ||
16175
- (has(allowedAttributesMap, name) && allowedAttributesMap[name].indexOf(a) !== -1) ||
16808
+ (has(allowedAttributesMap, name) &&
16809
+ allowedAttributesMap[name].indexOf(a) !== -1) ||
16176
16810
  (allowedAttributesMap['*'] && allowedAttributesMap['*'].indexOf(a) !== -1) ||
16177
- (has(allowedAttributesGlobMap, name) && allowedAttributesGlobMap[name].test(a)) ||
16811
+ (has(allowedAttributesGlobMap, name) &&
16812
+ allowedAttributesGlobMap[name].test(a)) ||
16178
16813
  (allowedAttributesGlobMap['*'] && allowedAttributesGlobMap['*'].test(a))) {
16179
16814
  passedAllowedAttributesMapCheck = true;
16180
16815
  } else if (allowedAttributesMap && allowedAttributesMap[name]) {
@@ -16218,12 +16853,14 @@ function sanitizeHtml(html, options, _recursing) {
16218
16853
  const parsed = parseUrl(value);
16219
16854
 
16220
16855
  if (options.allowedScriptHostnames || options.allowedScriptDomains) {
16221
- const allowedHostname = (options.allowedScriptHostnames || []).find(function (hostname) {
16222
- return hostname === parsed.url.hostname;
16223
- });
16224
- const allowedDomain = (options.allowedScriptDomains || []).find(function(domain) {
16225
- return parsed.url.hostname === domain || parsed.url.hostname.endsWith(`.${domain}`);
16226
- });
16856
+ const allowedHostname = (options.allowedScriptHostnames || [])
16857
+ .find(function (hostname) {
16858
+ return hostname === parsed.url.hostname;
16859
+ });
16860
+ const allowedDomain = (options.allowedScriptDomains || [])
16861
+ .find(function(domain) {
16862
+ return parsed.url.hostname === domain || parsed.url.hostname.endsWith(`.${domain}`);
16863
+ });
16227
16864
  allowed = allowedHostname || allowedDomain;
16228
16865
  }
16229
16866
  } catch (e) {
@@ -16247,13 +16884,18 @@ function sanitizeHtml(html, options, _recursing) {
16247
16884
  allowed = has(options, 'allowIframeRelativeUrls')
16248
16885
  ? options.allowIframeRelativeUrls
16249
16886
  : (!options.allowedIframeHostnames && !options.allowedIframeDomains);
16250
- } else if (options.allowedIframeHostnames || options.allowedIframeDomains) {
16251
- const allowedHostname = (options.allowedIframeHostnames || []).find(function (hostname) {
16252
- return hostname === parsed.url.hostname;
16253
- });
16254
- const allowedDomain = (options.allowedIframeDomains || []).find(function(domain) {
16255
- return parsed.url.hostname === domain || parsed.url.hostname.endsWith(`.${domain}`);
16256
- });
16887
+ } else if (
16888
+ options.allowedIframeHostnames ||
16889
+ options.allowedIframeDomains
16890
+ ) {
16891
+ const allowedHostname = (options.allowedIframeHostnames || [])
16892
+ .find(function (hostname) {
16893
+ return hostname === parsed.url.hostname;
16894
+ });
16895
+ const allowedDomain = (options.allowedIframeDomains || [])
16896
+ .find(function(domain) {
16897
+ return parsed.url.hostname === domain || parsed.url.hostname.endsWith(`.${domain}`);
16898
+ });
16257
16899
  allowed = allowedHostname || allowedDomain;
16258
16900
  }
16259
16901
  } catch (e) {
@@ -16307,9 +16949,17 @@ function sanitizeHtml(html, options, _recursing) {
16307
16949
  return t;
16308
16950
  });
16309
16951
  if (allowedSpecificClasses && allowedWildcardClasses) {
16310
- value = filterClasses(value, deepmerge(allowedSpecificClasses, allowedWildcardClasses), allowedClassesGlobs);
16952
+ value = filterClasses(
16953
+ value,
16954
+ deepmerge(allowedSpecificClasses, allowedWildcardClasses),
16955
+ allowedClassesGlobs
16956
+ );
16311
16957
  } else {
16312
- value = filterClasses(value, allowedSpecificClasses || allowedWildcardClasses, allowedClassesGlobs);
16958
+ value = filterClasses(
16959
+ value,
16960
+ allowedSpecificClasses || allowedWildcardClasses,
16961
+ allowedClassesGlobs
16962
+ );
16313
16963
  }
16314
16964
  if (!value.length) {
16315
16965
  delete frame.attribs[a];
@@ -16320,7 +16970,10 @@ function sanitizeHtml(html, options, _recursing) {
16320
16970
  if (options.parseStyleAttributes) {
16321
16971
  try {
16322
16972
  const abstractSyntaxTree = postcssParse(name + ' {' + value + '}', { map: false });
16323
- const filteredAST = filterCss(abstractSyntaxTree, options.allowedStyles);
16973
+ const filteredAST = filterCss(
16974
+ abstractSyntaxTree,
16975
+ options.allowedStyles
16976
+ );
16324
16977
 
16325
16978
  value = stringifyStyleAttributes(filteredAST);
16326
16979
 
@@ -16386,6 +17039,11 @@ function sanitizeHtml(html, options, _recursing) {
16386
17039
  // your concern, don't allow them. The same is essentially true for style tags
16387
17040
  // which have their own collection of XSS vectors.
16388
17041
  result += text;
17042
+ } else if ((options.disallowedTagsMode === 'discard' || options.disallowedTagsMode === 'completelyDiscard') && (nonTextTagsArray.indexOf(tag) !== -1)) {
17043
+ // htmlparser2 does not decode entities inside raw text elements like
17044
+ // textarea and option. The text is already properly encoded, so pass
17045
+ // it through without additional escaping to avoid double-encoding.
17046
+ result += text;
16389
17047
  } else if (!addedText) {
16390
17048
  const escaped = escapeHtml(text, false);
16391
17049
  if (options.textFilter) {
@@ -16453,7 +17111,8 @@ function sanitizeHtml(html, options, _recursing) {
16453
17111
  tempResult = '';
16454
17112
  }
16455
17113
  // remove the opening tag from the result
16456
- result = result.substring(0, frame.tagPosition) + result.substring(frame.tagPosition + frame.openingTagLength);
17114
+ result = result.substring(0, frame.tagPosition) +
17115
+ result.substring(frame.tagPosition + frame.openingTagLength);
16457
17116
  return;
16458
17117
  } else if (filterResult) {
16459
17118
  result = result.substring(0, frame.tagPosition);
@@ -16488,6 +17147,17 @@ function sanitizeHtml(html, options, _recursing) {
16488
17147
  parser.write(html);
16489
17148
  parser.end();
16490
17149
 
17150
+ if (options.disallowedTagsMode === 'escape' || options.disallowedTagsMode === 'recursiveEscape') {
17151
+ const lastParsedIndex = parser.endIndex;
17152
+ if (lastParsedIndex != null && lastParsedIndex >= 0 &&
17153
+ lastParsedIndex < html.length) {
17154
+ const unparsed = html.substring(lastParsedIndex);
17155
+ result += escapeHtml(unparsed);
17156
+ } else if ((lastParsedIndex == null || lastParsedIndex < 0) && html.length > 0 && result === '') {
17157
+ result = escapeHtml(html);
17158
+ }
17159
+ }
17160
+
16491
17161
  return result;
16492
17162
 
16493
17163
  function initializeState() {
@@ -16598,8 +17268,10 @@ function sanitizeHtml(html, options, _recursing) {
16598
17268
  * Modifies the abstractSyntaxTree object.
16599
17269
  *
16600
17270
  * @param {object} abstractSyntaxTree - Object representation of CSS attributes.
16601
- * @property {array[Declaration]} abstractSyntaxTree.nodes[0] - Each object cointains prop and value key, i.e { prop: 'color', value: 'red' }.
16602
- * @param {object} allowedStyles - Keys are properties (i.e color), value is list of permitted regex rules (i.e /green/i).
17271
+ * @property {array[Declaration]} abstractSyntaxTree.nodes[0] -
17272
+ * Each object contains prop and value key, i.e { prop: 'color', value: 'red' }.
17273
+ * @param {object} allowedStyles - Keys are properties (i.e color),
17274
+ * value is list of permitted regex rules (i.e /green/i).
16603
17275
  * @return {object} - The modified tree.
16604
17276
  */
16605
17277
  function filterCss(abstractSyntaxTree, allowedStyles) {
@@ -16621,7 +17293,8 @@ function sanitizeHtml(html, options, _recursing) {
16621
17293
  }
16622
17294
 
16623
17295
  if (selectedRule) {
16624
- abstractSyntaxTree.nodes[0].nodes = astRules.nodes.reduce(filterDeclarations(selectedRule), []);
17296
+ abstractSyntaxTree.nodes[0].nodes = astRules.nodes
17297
+ .reduce(filterDeclarations(selectedRule), []);
16625
17298
  }
16626
17299
 
16627
17300
  return abstractSyntaxTree;
@@ -16632,7 +17305,8 @@ function sanitizeHtml(html, options, _recursing) {
16632
17305
  * values in the inline style attribute format.
16633
17306
  *
16634
17307
  * @param {AbstractSyntaxTree} filteredAST
16635
- * @return {string} - Example: "color:yellow;text-align:center !important;font-family:helvetica;"
17308
+ * @return {string} - Example:
17309
+ * "color:yellow;text-align:center !important;font-family:helvetica;"
16636
17310
  */
16637
17311
  function stringifyStyleAttributes(filteredAST) {
16638
17312
  return filteredAST.nodes[0].nodes
@@ -16649,21 +17323,25 @@ function sanitizeHtml(html, options, _recursing) {
16649
17323
  * Filters the existing attributes for the given property. Discards any attributes
16650
17324
  * which don't match the allowlist.
16651
17325
  *
16652
- * @param {object} selectedRule - Example: { color: red, font-family: helvetica }
16653
- * @param {array} allowedDeclarationsList - List of declarations which pass the allowlist.
16654
- * @param {object} attributeObject - Object representing the current css property.
16655
- * @property {string} attributeObject.type - Typically 'declaration'.
16656
- * @property {string} attributeObject.prop - The CSS property, i.e 'color'.
16657
- * @property {string} attributeObject.value - The corresponding value to the css property, i.e 'red'.
16658
- * @return {function} - When used in Array.reduce, will return an array of Declaration objects
17326
+ * @param {object} selectedRule - Example: { color: red, font-family: helvetica }
17327
+ * @param {array} allowedDeclarationsList - List of declarations
17328
+ * which pass the allowlist.
17329
+ * @param {object} attributeObject - Object representing the current css property.
17330
+ * @property {string} attributeObject.type - Typically 'declaration'.
17331
+ * @property {string} attributeObject.prop - The CSS property, i.e 'color'.
17332
+ * @property {string} attributeObject.value - The corresponding value to
17333
+ * the css property, i.e 'red'.
17334
+ * @return {function} - When used in Array.reduce,
17335
+ * will return an array of Declaration objects
16659
17336
  */
16660
17337
  function filterDeclarations(selectedRule) {
16661
17338
  return function (allowedDeclarationsList, attributeObject) {
16662
17339
  // If this property is allowlisted...
16663
17340
  if (has(selectedRule, attributeObject.prop)) {
16664
- const matchesRegex = selectedRule[attributeObject.prop].some(function(regularExpression) {
16665
- return regularExpression.test(attributeObject.value);
16666
- });
17341
+ const matchesRegex = selectedRule[attributeObject.prop]
17342
+ .some(function(regularExpression) {
17343
+ return regularExpression.test(attributeObject.value);
17344
+ });
16667
17345
 
16668
17346
  if (matchesRegex) {
16669
17347
  allowedDeclarationsList.push(attributeObject);
@@ -16795,7 +17473,7 @@ sanitizeHtml.simpleTransform = function(newTagName, newAttribs, merge) {
16795
17473
 
16796
17474
  return {
16797
17475
  tagName: newTagName,
16798
- attribs: attribs
17476
+ attribs
16799
17477
  };
16800
17478
  };
16801
17479
  };
@@ -23221,7 +23899,6 @@ function FormFieldView({
23221
23899
  multiline = false,
23222
23900
  rows,
23223
23901
  placeholder,
23224
- name,
23225
23902
  startAdornment,
23226
23903
  endAdornment,
23227
23904
  inputProps,
@@ -23287,7 +23964,6 @@ function FormFieldView({
23287
23964
  children: label
23288
23965
  }), jsx(Input$5, {
23289
23966
  id: fieldId,
23290
- name: name,
23291
23967
  type: type,
23292
23968
  value: value,
23293
23969
  onChange: handleChange,
@@ -23337,7 +24013,6 @@ function FormSelectView({
23337
24013
  fullWidth = true,
23338
24014
  size = 'small',
23339
24015
  placeholder,
23340
- name,
23341
24016
  // Exclude ViewProps that conflict with MUI FormControl types
23342
24017
  margin: _margin,
23343
24018
  marginTop: _marginTop,
@@ -23387,7 +24062,6 @@ function FormSelectView({
23387
24062
  shrink: true,
23388
24063
  children: label
23389
24064
  }), jsxs(Select, {
23390
- name: name,
23391
24065
  value: value,
23392
24066
  onChange: handleChange,
23393
24067
  disabled: disabled,
@@ -31362,12 +32036,6 @@ __decorate([Field(), Editor({
31362
32036
  description: 'Placeholder text when no value is selected',
31363
32037
  placeholder: 'Select an option...'
31364
32038
  }), IsOptional(), IsString(), __metadata("design:type", String)], FormSelectModel.prototype, "placeholder", void 0);
31365
- __decorate([Field(), Editor({
31366
- field_type: FieldType.TEXT,
31367
- label: 'Name',
31368
- description: 'Name attribute for the select (for forms and accessibility)',
31369
- placeholder: 'Enter name...'
31370
- }), IsOptional(), IsString(), __metadata("design:type", String)], FormSelectModel.prototype, "name", void 0);
31371
32039
  FormSelectModel = __decorate([Schema('FormSelect', '1.0.0')], FormSelectModel);
31372
32040
 
31373
32041
  /**
@@ -31454,12 +32122,6 @@ __decorate([Field(), Editor({
31454
32122
  description: 'Placeholder text',
31455
32123
  placeholder: 'Enter text...'
31456
32124
  }), IsOptional(), IsString(), __metadata("design:type", String)], FormFieldModel.prototype, "placeholder", void 0);
31457
- __decorate([Field(), Editor({
31458
- field_type: FieldType.TEXT,
31459
- label: 'Name',
31460
- description: 'Name attribute for the input (for forms and accessibility)',
31461
- placeholder: 'Enter name...'
31462
- }), IsOptional(), IsString(), __metadata("design:type", String)], FormFieldModel.prototype, "name", void 0);
31463
32125
  FormFieldModel = __decorate([Schema('FormField', '1.0.0')], FormFieldModel);
31464
32126
 
31465
32127
  /**