{"version":3,"file":"static/js/902.6e4e23cc.chunk.js","mappings":";kHAEA,IAAIA,EAASC,OAAOC,UAAUC,eAC1BC,EAAQH,OAAOC,UAAUG,SACzBC,EAAiBL,OAAOK,eACxBC,EAAON,OAAOO,yBAEdC,EAAU,SAAiBC,GAC9B,MAA6B,oBAAlBC,MAAMF,QACTE,MAAMF,QAAQC,GAGK,mBAApBN,EAAMQ,KAAKF,EACnB,EAEIG,EAAgB,SAAuBC,GAC1C,IAAKA,GAA2B,oBAApBV,EAAMQ,KAAKE,GACtB,OAAO,EAGR,IASIC,EATAC,EAAoBhB,EAAOY,KAAKE,EAAK,eACrCG,EAAmBH,EAAII,aAAeJ,EAAII,YAAYhB,WAAaF,EAAOY,KAAKE,EAAII,YAAYhB,UAAW,iBAE9G,GAAIY,EAAII,cAAgBF,IAAsBC,EAC7C,OAAO,EAMR,IAAKF,KAAOD,GAEZ,MAAsB,qBAARC,GAAuBf,EAAOY,KAAKE,EAAKC,EACvD,EAGII,EAAc,SAAqBC,EAAQC,GAC1Cf,GAAmC,cAAjBe,EAAQC,KAC7BhB,EAAec,EAAQC,EAAQC,KAAM,CACpCC,YAAY,EACZC,cAAc,EACdC,MAAOJ,EAAQK,SACfC,UAAU,IAGXP,EAAOC,EAAQC,MAAQD,EAAQK,QAEjC,EAGIE,EAAc,SAAqBd,EAAKQ,GAC3C,GAAa,cAATA,EAAsB,CACzB,IAAKtB,EAAOY,KAAKE,EAAKQ,GACrB,OACM,GAAIf,EAGV,OAAOA,EAAKO,EAAKQ,GAAMG,KAEzB,CAEA,OAAOX,EAAIQ,EACZ,EAEAO,EAAOC,QAAU,SAASC,IACzB,IAAIV,EAASC,EAAMU,EAAKC,EAAMC,EAAaC,EACvCf,EAASgB,UAAU,GACnBC,EAAI,EACJC,EAASF,UAAUE,OACnBC,GAAO,EAaX,IAVsB,mBAAXnB,IACVmB,EAAOnB,EACPA,EAASgB,UAAU,IAAM,CAAC,EAE1BC,EAAI,IAES,MAAVjB,GAAqC,kBAAXA,GAAyC,oBAAXA,KAC3DA,EAAS,CAAC,GAGJiB,EAAIC,IAAUD,EAGpB,GAAe,OAFfhB,EAAUe,UAAUC,IAInB,IAAKf,KAAQD,EACZW,EAAMJ,EAAYR,EAAQE,GAItBF,KAHJa,EAAOL,EAAYP,EAASC,MAKvBiB,GAAQN,IAASpB,EAAcoB,KAAUC,EAAczB,EAAQwB,MAC9DC,GACHA,GAAc,EACdC,EAAQH,GAAOvB,EAAQuB,GAAOA,EAAM,IAEpCG,EAAQH,GAAOnB,EAAcmB,GAAOA,EAAM,CAAC,EAI5Cb,EAAYC,EAAQ,CAAEE,KAAMA,EAAMI,SAAUK,EAAOQ,EAAMJ,EAAOF,MAGtC,qBAATA,GACjBd,EAAYC,EAAQ,CAAEE,KAAMA,EAAMI,SAAUO,KAQjD,OAAOb,CACR,qBClHA,IAAIoB,EAAgB,kCAEhBC,EAAgB,MAChBC,EAAmB,OAGnBC,EAAiB,yCACjBC,EAAc,QACdC,EAAc,uDACdC,EAAkB,UAGlBC,EAAa,aAMbC,EAAe,GA8OnB,SAASC,EAAKC,GACZ,OAAOA,EAAMA,EAAIC,QAAQJ,EAAYC,GAAgBA,CACvD,CAnOAnB,EAAOC,QAAU,SAASsB,EAAO/B,GAC/B,GAAqB,kBAAV+B,EACT,MAAM,IAAIC,UAAU,mCAGtB,IAAKD,EAAO,MAAO,GAEnB/B,EAAUA,GAAW,CAAC,EAKtB,IAAIiC,EAAS,EACTC,EAAS,EAOb,SAASC,EAAeN,GACtB,IAAIO,EAAQP,EAAIQ,MAAMjB,GAClBgB,IAAOH,GAAUG,EAAMnB,QAC3B,IAAID,EAAIa,EAAIS,YAvCF,MAwCVJ,GAAUlB,EAAIa,EAAIZ,OAASD,EAAIkB,EAASL,EAAIZ,MAC9C,CAOA,SAASsB,IACP,IAAIC,EAAQ,CAAEC,KAAMR,EAAQC,OAAQA,GACpC,OAAO,SAASQ,GAGd,OAFAA,EAAKH,SAAW,IAAII,EAASH,GAC7BI,IACOF,CACT,CACF,CAUA,SAASC,EAASH,GAChBK,KAAKL,MAAQA,EACbK,KAAKC,IAAM,CAAEL,KAAMR,EAAQC,OAAQA,GACnCW,KAAKE,OAAS/C,EAAQ+C,MACxB,CAKAJ,EAAS9D,UAAUmE,QAAUjB,EAE7B,IAAIkB,EAAa,GAQjB,SAASC,EAAMC,GACb,IAAIC,EAAM,IAAIC,MACZrD,EAAQ+C,OAAS,IAAMd,EAAS,IAAMC,EAAS,KAAOiB,GAQxD,GANAC,EAAIE,OAASH,EACbC,EAAIG,SAAWvD,EAAQ+C,OACvBK,EAAIX,KAAOR,EACXmB,EAAIlB,OAASA,EACbkB,EAAIL,OAAShB,GAET/B,EAAQwD,OAGV,MAAMJ,EAFNH,EAAWQ,KAAKL,EAIpB,CAQA,SAASf,EAAMqB,GACb,IAAIC,EAAID,EAAGE,KAAK7B,GAChB,GAAK4B,EAAL,CACA,IAAI9B,EAAM8B,EAAE,GAGZ,OAFAxB,EAAeN,GACfE,EAAQA,EAAM8B,MAAMhC,EAAIZ,QACjB0C,CAJO,CAKhB,CAKA,SAASf,IACPP,EAAMhB,EACR,CAQA,SAASyC,EAASC,GAChB,IAAIC,EAEJ,IADAD,EAAQA,GAAS,GACTC,EAAIC,MACA,IAAND,GACFD,EAAMN,KAAKO,GAGf,OAAOD,CACT,CAQA,SAASE,IACP,IAAIC,EAAM3B,IACV,GAnJgB,KAmJKR,EAAMoC,OAAO,IAlJvB,KAkJyCpC,EAAMoC,OAAO,GAAjE,CAGA,IADA,IAAInD,EAAI,EAENW,GAAgBI,EAAMoC,OAAOnD,KAtJpB,KAuJIe,EAAMoC,OAAOnD,IAxJZ,KAwJmCe,EAAMoC,OAAOnD,EAAI,OAEhEA,EAIJ,GAFAA,GAAK,EAEDW,IAAiBI,EAAMoC,OAAOnD,EAAI,GACpC,OAAOkC,EAAM,0BAGf,IAAIrB,EAAME,EAAM8B,MAAM,EAAG7C,EAAI,GAM7B,OALAkB,GAAU,EACVC,EAAeN,GACfE,EAAQA,EAAM8B,MAAM7C,GACpBkB,GAAU,EAEHgC,EAAI,CACTE,KApKa,UAqKbH,QAASpC,GAvBgE,CAyB7E,CAQA,SAASwC,IACP,IAAIH,EAAM3B,IAGN+B,EAAOjC,EAAMf,GACjB,GAAKgD,EAAL,CAIA,GAHAL,KAGK5B,EAAMd,GAAc,OAAO2B,EAAM,wBAGtC,IAAIqB,EAAMlC,EAAMb,GAEZgD,EAAMN,EAAI,CACZE,KA7LiB,cA8LjBK,SAAU7C,EAAK0C,EAAK,GAAGxC,QAAQX,EAAeQ,IAC9CvB,MAAOmE,EACH3C,EAAK2C,EAAI,GAAGzC,QAAQX,EAAeQ,IACnCA,IAMN,OAFAU,EAAMZ,GAEC+C,CApBU,CAqBnB,CAyBA,OADA5B,IAjBA,WACE,IAKI8B,EALAC,EAAQ,GAMZ,IAJAb,EAASa,GAIDD,EAAOL,MACA,IAATK,IACFC,EAAMlB,KAAKiB,GACXZ,EAASa,IAIb,OAAOA,CACT,CAGOC,EACT,qBCnPApE,EAAOC,QAAU,SAAmBhB,GAClC,OAAc,MAAPA,GAAkC,MAAnBA,EAAII,aACY,oBAA7BJ,EAAII,YAAYgF,UAA2BpF,EAAII,YAAYgF,SAASpF,EAC/E,mCCDa,IAA4bqF,EAAxbC,EAAEC,OAAOC,IAAI,iBAAiBjB,EAAEgB,OAAOC,IAAI,gBAAgBC,EAAEF,OAAOC,IAAI,kBAAkBE,EAAEH,OAAOC,IAAI,qBAAqBG,EAAEJ,OAAOC,IAAI,kBAAkBI,EAAEL,OAAOC,IAAI,kBAAkBK,EAAEN,OAAOC,IAAI,iBAAiBM,EAAEP,OAAOC,IAAI,wBAAwBO,EAAER,OAAOC,IAAI,qBAAqBtB,EAAEqB,OAAOC,IAAI,kBAAkBQ,EAAET,OAAOC,IAAI,uBAAuBS,EAAEV,OAAOC,IAAI,cAAcU,EAAEX,OAAOC,IAAI,cAAcW,EAAEZ,OAAOC,IAAI,mBACtb,SAASY,EAAEC,GAAG,GAAG,kBAAkBA,GAAG,OAAOA,EAAE,CAAC,IAAIC,EAAED,EAAEE,SAAS,OAAOD,GAAG,KAAKhB,EAAE,OAAOe,EAAEA,EAAE1B,MAAQ,KAAKc,EAAE,KAAKE,EAAE,KAAKD,EAAE,KAAKxB,EAAE,KAAK8B,EAAE,OAAOK,EAAE,QAAQ,OAAOA,EAAEA,GAAGA,EAAEE,UAAY,KAAKT,EAAE,KAAKD,EAAE,KAAKE,EAAE,KAAKG,EAAE,KAAKD,EAAE,KAAKL,EAAE,OAAOS,EAAE,QAAQ,OAAOC,GAAG,KAAK/B,EAAE,OAAO+B,EAAE,CAAC,CADkMjB,EAAEE,OAAOC,IAAI,0BAC9MxE,EAAQwF,gBAAgBX,EAAE7E,EAAQyF,gBAAgBb,EAAE5E,EAAQ0F,QAAQpB,EAAEtE,EAAQ2F,WAAWZ,EAAE/E,EAAQ4F,SAASnB,EAAEzE,EAAQ6F,KAAKX,EAAElF,EAAQ8F,KAAKb,EAAEjF,EAAQ+F,OAAOxC,EAAEvD,EAAQgG,SAASrB,EAAE3E,EAAQiG,WAAWvB,EAAE1E,EAAQkG,SAAShD,EAChelD,EAAQmG,aAAanB,EAAEhF,EAAQoG,YAAY,WAAW,OAAM,CAAE,EAAEpG,EAAQqG,iBAAiB,WAAW,OAAM,CAAE,EAAErG,EAAQsG,kBAAkB,SAASjB,GAAG,OAAOD,EAAEC,KAAKR,CAAC,EAAE7E,EAAQuG,kBAAkB,SAASlB,GAAG,OAAOD,EAAEC,KAAKT,CAAC,EAAE5E,EAAQwG,UAAU,SAASnB,GAAG,MAAM,kBAAkBA,GAAG,OAAOA,GAAGA,EAAEE,WAAWjB,CAAC,EAAEtE,EAAQyG,aAAa,SAASpB,GAAG,OAAOD,EAAEC,KAAKN,CAAC,EAAE/E,EAAQ0G,WAAW,SAASrB,GAAG,OAAOD,EAAEC,KAAKZ,CAAC,EAAEzE,EAAQ2G,OAAO,SAAStB,GAAG,OAAOD,EAAEC,KAAKH,CAAC,EAAElF,EAAQ4G,OAAO,SAASvB,GAAG,OAAOD,EAAEC,KAAKJ,CAAC,EACvejF,EAAQ6G,SAAS,SAASxB,GAAG,OAAOD,EAAEC,KAAK9B,CAAC,EAAEvD,EAAQ8G,WAAW,SAASzB,GAAG,OAAOD,EAAEC,KAAKV,CAAC,EAAE3E,EAAQ+G,aAAa,SAAS1B,GAAG,OAAOD,EAAEC,KAAKX,CAAC,EAAE1E,EAAQgH,WAAW,SAAS3B,GAAG,OAAOD,EAAEC,KAAKnC,CAAC,EAAElD,EAAQiH,eAAe,SAAS5B,GAAG,OAAOD,EAAEC,KAAKL,CAAC,EAClPhF,EAAQkH,mBAAmB,SAAS7B,GAAG,MAAM,kBAAkBA,GAAG,oBAAoBA,GAAGA,IAAIZ,GAAGY,IAAIV,GAAGU,IAAIX,GAAGW,IAAInC,GAAGmC,IAAIL,GAAGK,IAAIF,GAAG,kBAAkBE,GAAG,OAAOA,IAAIA,EAAEE,WAAWL,GAAGG,EAAEE,WAAWN,GAAGI,EAAEE,WAAWX,GAAGS,EAAEE,WAAWV,GAAGQ,EAAEE,WAAWR,GAAGM,EAAEE,WAAWlB,QAAG,IAASgB,EAAE8B,YAAkB,EAAEnH,EAAQoH,OAAOhC,sCCV/SrF,EAAOC,QAAU,EAAjBD,6BCHF,IAAIsH,EAAQC,EAAQ,OAapB,SAASC,EAAcjG,EAAOkG,GAC5B,IAKI5D,EALA6D,EAAS,KACb,IAAKnG,GAA0B,kBAAVA,EACnB,OAAOmG,EAST,IALA,IAEIzD,EACArE,EAHAwE,EAAekD,EAAM/F,GACrBoG,EAAkC,oBAAbF,EAIhBjH,EAAI,EAAGoH,EAAMxD,EAAa3D,OAAQD,EAAIoH,EAAKpH,IAElDyD,GADAJ,EAAcO,EAAa5D,IACJyD,SACvBrE,EAAQiE,EAAYjE,MAEhB+H,EACFF,EAASxD,EAAUrE,EAAOiE,GACjBjE,IACT8H,IAAWA,EAAS,CAAC,GACrBA,EAAOzD,GAAYrE,GAIvB,OAAO8H,CACT,CAEA1H,EAAOC,QAAUuH,EACjBxH,EAAOC,QAAPD,QAAyBwH,sCC1CzB,SAASK,EAAgBvC,EAAGL,GAC1B,KAAMK,aAAaL,GAAI,MAAM,IAAIzD,UAAU,oCAC7C,oHCDA,SAASsG,EAAkBnD,EAAGY,GAC5B,IAAK,IAAIH,EAAI,EAAGA,EAAIG,EAAE9E,OAAQ2E,IAAK,CACjC,IAAI2C,EAAIxC,EAAEH,GACV2C,EAAErI,WAAaqI,EAAErI,aAAc,EAAIqI,EAAEpI,cAAe,EAAI,UAAWoI,IAAMA,EAAEjI,UAAW,GAAK1B,OAAOK,eAAekG,GAAG,OAAcoD,EAAE7I,KAAM6I,EAC5I,CACF,CACA,SAASC,EAAarD,EAAGY,EAAGH,GAC1B,OAAOG,GAAKuC,EAAkBnD,EAAEtG,UAAWkH,GAAIH,GAAK0C,EAAkBnD,EAAGS,GAAIhH,OAAOK,eAAekG,EAAG,YAAa,CACjH7E,UAAU,IACR6E,CACN,sCCXA,SAASsD,EAAiB1C,GACxB,GAAI,oBAAsBf,QAAU,MAAQe,EAAEf,OAAOiD,WAAa,MAAQlC,EAAE,cAAe,OAAOzG,MAAMoJ,KAAK3C,EAC/G,8ICEA,SAAS4C,EAAmB5C,GAC1B,OCJF,SAA4BA,GAC1B,GAAIzG,MAAMF,QAAQ2G,GAAI,OAAO,EAAA6C,EAAA,GAAiB7C,EAChD,CDES,CAAkBA,KAAM,EAAA8C,EAAA,GAAgB9C,KAAM,EAAA+C,EAAA,GAA2B/C,IELlF,WACE,MAAM,IAAI/D,UAAU,uIACtB,CFGwF,EACxF,wtBGNA,SAAS+G,EAAgBnD,GACvB,OAAOmD,EAAkBnK,OAAOoK,eAAiBpK,OAAOqK,eAAeC,OAAS,SAAUtD,GACxF,OAAOA,EAAEuD,WAAavK,OAAOqK,eAAerD,EAC9C,EAAGmD,EAAgBnD,EACrB,CCJA,SAASwD,IACP,IACE,IAAIxD,GAAKyD,QAAQxK,UAAUyK,QAAQ/J,KAAKgK,QAAQC,UAAUH,QAAS,IAAI,WAAa,IACtF,CAAE,MAAOzD,GAAI,CACb,OAAQwD,EAA4B,WAClC,QAASxD,CACX,IACF,0BCJA,SAAS6D,EAAW7D,EAAG2C,EAAGpD,GACxB,OAAOoD,EAAI,EAAeA,GCF5B,SAAoC3C,EAAGT,GACrC,GAAIA,IAAM,WAAY,OAAQA,IAAM,mBAAqBA,GAAI,OAAOA,EACpE,QAAI,IAAWA,EAAG,MAAM,IAAInD,UAAU,4DACtC,OAAO,EAAA0H,EAAA,GAAsB9D,EAC/B,CDFgC,CAA0BA,EAAG,IAA6B2D,QAAQC,UAAUjB,EAAGpD,GAAK,GAAI,EAAeS,GAAG/F,aAAe0I,EAAEoB,MAAM/D,EAAGT,GACpK,gBEJA,SAASyE,EAAUhE,EAAGT,GACpB,GAAI,mBAAqBA,GAAK,OAASA,EAAG,MAAM,IAAInD,UAAU,sDAC9D4D,EAAE/G,UAAYD,OAAOiL,OAAO1E,GAAKA,EAAEtG,UAAW,CAC5CgB,YAAa,CACXO,MAAOwF,EACPtF,UAAU,EACVH,cAAc,KAEdvB,OAAOK,eAAe2G,EAAG,YAAa,CACxCtF,UAAU,IACR6E,IAAK,EAAA6D,EAAA,GAAepD,EAAGT,EAC7B,CCRA,SAAS2E,EAAiBlE,GACxB,IAAIG,EAAI,mBAAqBgE,IAAM,IAAIA,SAAQ,EAC/C,OAAOD,EAAmB,SAA0BlE,GAClD,GAAI,OAASA,ICPjB,SAA2BA,GACzB,IACE,OAAQ,IAAMoE,SAAShL,SAASO,KAAKqG,GAAGqE,QAAQ,gBAClD,CAAE,MAAOxE,GACP,MAAO,mBAAqBG,CAC9B,CACF,CDCuB,CAAiBA,GAAI,OAAOA,EAC/C,GAAI,mBAAqBA,EAAG,MAAM,IAAI5D,UAAU,sDAChD,QAAI,IAAW+D,EAAG,CAChB,GAAIA,EAAEmE,IAAItE,GAAI,OAAOG,EAAEoE,IAAIvE,GAC3BG,EAAEqE,IAAIxE,EAAGyE,EACX,CACA,SAASA,IACP,OEZN,SAAoBzE,EAAGT,EAAGY,GACxB,GAAI,IAA4B,OAAOwD,QAAQC,UAAUG,MAAM,KAAM5I,WACrE,IAAIwH,EAAI,CAAC,MACTA,EAAE9E,KAAKkG,MAAMpB,EAAGpD,GAChB,IAAIO,EAAI,IAAKE,EAAEsD,KAAKS,MAAM/D,EAAG2C,IAC7B,OAAOxC,IAAK,EAAAiD,EAAA,GAAetD,EAAGK,EAAElH,WAAY6G,CAC9C,CFMa,CAAUE,EAAG7E,UAAW,EAAe8B,MAAMhD,YACtD,CACA,OAAOwK,EAAQxL,UAAYD,OAAOiL,OAAOjE,EAAE/G,UAAW,CACpDgB,YAAa,CACXO,MAAOiK,EACPnK,YAAY,EACZI,UAAU,EACVH,cAAc,MAEd,EAAA6I,EAAA,GAAeqB,EAASzE,EAC9B,EAAGkE,EAAiBlE,EACtB,CGWO,SAAS0E,EAAkBlK,GAEhC,OAAKA,GAA0B,kBAAVA,EAKjB,aAAcA,GAAS,SAAUA,EAC5BmC,EAASnC,EAAMmC,UAIpB,UAAWnC,GAAS,QAASA,EACxBmC,EAASnC,GAId,SAAUA,GAAS,WAAYA,EAC1BmK,EAAMnK,GAIR,GAnBE,EAoBX,CAMA,SAASmK,EAAMA,GACb,OAAOC,EAAMD,GAASA,EAAM9H,MAAQ,IAAM+H,EAAMD,GAASA,EAAMrI,OACjE,CAMA,SAASK,EAAS2B,GAChB,OAAOqG,EAAMrG,GAAOA,EAAI1B,OAAS,IAAM+H,EAAMrG,GAAOA,EAAIpB,IAC1D,CAMA,SAAS0H,EAAMpK,GACb,OAAOA,GAA0B,kBAAVA,EAAqBA,EAAQ,CACtD,CCvEO,IAAMqK,EAAY,SAAAC,GAmBvB,SAAAD,EAAYnH,EAAQqH,EAAOC,GAAQ,IAAAC,GAAAxC,EAAAA,EAAAA,GAAA,KAAAoC,GAEjC,IAAMK,EAAQ,CAAC,KAAM,MAEjBvI,EAAW,CAEbC,MAAO,CAACC,KAAM,KAAMP,OAAQ,MAE5BY,IAAK,CAACL,KAAM,KAAMP,OAAQ,OAU5B,GAPA2I,EAAApB,EAAA,KAAAgB,GAEqB,kBAAVE,IACTC,EAASD,EACTA,OAAQI,GAGY,kBAAXH,EAAqB,CAC9B,IAAMJ,EAAQI,EAAOX,QAAQ,MAEd,IAAXO,EACFM,EAAM,GAAKF,GAEXE,EAAM,GAAKF,EAAO/G,MAAM,EAAG2G,GAC3BM,EAAM,GAAKF,EAAO/G,MAAM2G,EAAQ,GAEpC,CAwJA,OAtJIG,IAEE,SAAUA,GAAS,aAAcA,EAC/BA,EAAMpI,WAGRA,EAAWoI,EAAMpI,UAIZ,UAAWoI,GAAS,QAASA,EAGpCpI,EAAWoI,GAGJ,SAAUA,GAAS,WAAYA,KAEtCpI,EAASC,MAAQmI,IAWrBE,EAAK5K,KAAOqK,EAAkBK,IAAU,MAOxCE,EAAKG,QAA4B,kBAAX1H,EAAsBA,EAAO0H,QAAU1H,EAU7DuH,EAAKI,MAAQ,GAES,kBAAX3H,GAAuBA,EAAO2H,QACvCJ,EAAKI,MAAQ3H,EAAO2H,OAUtBJ,EAAKvH,OAASuH,EAAKG,QAYnBH,EAAKK,MAOLL,EAAKpI,KAAOF,EAASC,MAAMC,KAO3BoI,EAAK3I,OAASK,EAASC,MAAMN,OAO7B2I,EAAKtI,SAAWA,EAOhBsI,EAAK9H,OAAS+H,EAAM,GAOpBD,EAAKM,OAASL,EAAM,GAOpBD,EAAKO,KAYLP,EAAKQ,OAOLR,EAAKS,SAULT,EAAKU,IAOLV,EAAKW,KACLX,CACF,CAAC,OAAAjB,EAAAa,EAAAC,IAAAlC,EAAAA,EAAAA,GAAAiC,EAAA,CAvMsB,CAuMtBX,EAvM+BzG,QA0MlCoH,EAAa5L,UAAUuM,KAAO,GAC9BX,EAAa5L,UAAUoB,KAAO,GAC9BwK,EAAa5L,UAAUyE,OAAS,GAChCmH,EAAa5L,UAAUmM,QAAU,GACjCP,EAAa5L,UAAUoM,MAAQ,GAC/BR,EAAa5L,UAAUqM,MAAQ,KAC/BT,EAAa5L,UAAUqD,OAAS,KAChCuI,EAAa5L,UAAU4D,KAAO,KAC9BgI,EAAa5L,UAAUkE,OAAS,KAChC0H,EAAa5L,UAAUsM,OAAS,KAChCV,EAAa5L,UAAU0D,SAAW,KC7K3B,IAAMkJ,EAAO,CAACC,SAcrB,SAAkBD,EAAME,GACtB,QAAYZ,IAARY,GAAoC,kBAARA,EAC9B,MAAM,IAAI3J,UAAU,mCAGtB4J,EAAWH,GACX,IAIII,EAJArJ,EAAQ,EACRM,GAAO,EACP0H,EAAQiB,EAAKxK,OAIjB,QAAY8J,IAARY,GAAoC,IAAfA,EAAI1K,QAAgB0K,EAAI1K,OAASwK,EAAKxK,OAAQ,CACrE,KAAOuJ,KACL,GAA+B,KAA3BiB,EAAKK,WAAWtB,IAGlB,GAAIqB,EAAc,CAChBrJ,EAAQgI,EAAQ,EAChB,KACF,OACS1H,EAAM,IAGf+I,GAAe,EACf/I,EAAM0H,EAAQ,GAIlB,OAAO1H,EAAM,EAAI,GAAK2I,EAAK5H,MAAMrB,EAAOM,EAC1C,CAEA,GAAI6I,IAAQF,EACV,MAAO,GAGT,IAAIM,GAAoB,EACpBC,EAAWL,EAAI1K,OAAS,EAE5B,KAAOuJ,KACL,GAA+B,KAA3BiB,EAAKK,WAAWtB,IAGlB,GAAIqB,EAAc,CAChBrJ,EAAQgI,EAAQ,EAChB,KACF,OAEIuB,EAAmB,IAGrBF,GAAe,EACfE,EAAmBvB,EAAQ,GAGzBwB,GAAY,IAEVP,EAAKK,WAAWtB,KAAWmB,EAAIG,WAAWE,KACxCA,EAAW,IAGblJ,EAAM0H,IAKRwB,GAAY,EACZlJ,EAAMiJ,IAMVvJ,IAAUM,EACZA,EAAMiJ,EACGjJ,EAAM,IACfA,EAAM2I,EAAKxK,QAGb,OAAOwK,EAAK5H,MAAMrB,EAAOM,EAC3B,EA9F+BmJ,QAwG/B,SAAiBR,GAGf,GAFAG,EAAWH,GAES,IAAhBA,EAAKxK,OACP,MAAO,IAGT,IAGIiL,EAHApJ,GAAO,EACP0H,EAAQiB,EAAKxK,OAKjB,OAASuJ,GACP,GAA+B,KAA3BiB,EAAKK,WAAWtB,IAClB,GAAI0B,EAAgB,CAClBpJ,EAAM0H,EACN,KACF,OACU0B,IAEVA,GAAiB,GAIrB,OAAOpJ,EAAM,EACc,KAAvB2I,EAAKK,WAAW,GACd,IACA,IACM,IAARhJ,GAAoC,KAAvB2I,EAAKK,WAAW,GAC7B,KACAL,EAAK5H,MAAM,EAAGf,EACpB,EAxIwCqJ,QAkJxC,SAAiBV,GACfG,EAAWH,GAEX,IASIS,EATA1B,EAAQiB,EAAKxK,OAEb6B,GAAO,EACPsJ,EAAY,EACZC,GAAY,EAGZC,EAAc,EAIlB,KAAO9B,KAAS,CACd,IAAM+B,EAAOd,EAAKK,WAAWtB,GAE7B,GAAa,KAAT+B,EAWAzJ,EAAM,IAGRoJ,GAAiB,EACjBpJ,EAAM0H,EAAQ,GAGH,KAAT+B,EAEEF,EAAW,EACbA,EAAW7B,EACc,IAAhB8B,IACTA,EAAc,GAEPD,GAAY,IAGrBC,GAAe,QAzBf,GAAIJ,EAAgB,CAClBE,EAAY5B,EAAQ,EACpB,KACF,CAwBJ,CAEA,GACE6B,EAAW,GACXvJ,EAAM,GAEU,IAAhBwJ,GAEiB,IAAhBA,GAAqBD,IAAavJ,EAAM,GAAKuJ,IAAaD,EAAY,EAEvE,MAAO,GAGT,OAAOX,EAAK5H,MAAMwI,EAAUvJ,EAC9B,EA/MiD0J,KAyNjD,WAGY,IAFV,IAEIC,EAFAjC,GAAS,EAEHkC,EAAA3L,UAAAE,OAHK0L,EAAQ,IAAArN,MAAAoN,GAAAE,EAAA,EAAAA,EAAAF,EAAAE,IAARD,EAAQC,GAAA7L,UAAA6L,GAKvB,OAASpC,EAAQmC,EAAS1L,QACxB2K,EAAWe,EAASnC,IAEhBmC,EAASnC,KACXiC,OACa1B,IAAX0B,EAAuBE,EAASnC,GAASiC,EAAS,IAAME,EAASnC,IAIvE,YAAkBO,IAAX0B,EAAuB,IAahC,SAAmBhB,GACjBG,EAAWH,GAEX,IAAMoB,EAAkC,KAAvBpB,EAAKK,WAAW,GAG7B1L,EAuBN,SAAyBqL,EAAMqB,GAC7B,IAMIP,EAEAQ,EARAC,EAAS,GACTC,EAAoB,EACpBC,GAAa,EACbC,EAAO,EACP3C,GAAS,EAMb,OAASA,GAASiB,EAAKxK,QAAQ,CAC7B,GAAIuJ,EAAQiB,EAAKxK,OACfsL,EAAOd,EAAKK,WAAWtB,OAClB,IAAa,KAAT+B,EACT,MAEAA,EAAO,EACT,CAEA,GAAa,KAATA,EAAuB,CACzB,GAAIW,IAAc1C,EAAQ,GAAc,IAAT2C,QAExB,GAAID,IAAc1C,EAAQ,GAAc,IAAT2C,EAAY,CAChD,GACEH,EAAO/L,OAAS,GACM,IAAtBgM,GACyC,KAAzCD,EAAOlB,WAAWkB,EAAO/L,OAAS,IACO,KAAzC+L,EAAOlB,WAAWkB,EAAO/L,OAAS,GAElC,GAAI+L,EAAO/L,OAAS,GAGlB,IAFA8L,EAAiBC,EAAO1K,YAAY,QAEb0K,EAAO/L,OAAS,EAAG,CACpC8L,EAAiB,GACnBC,EAAS,GACTC,EAAoB,GAGpBA,GADAD,EAASA,EAAOnJ,MAAM,EAAGkJ,IACE9L,OAAS,EAAI+L,EAAO1K,YAAY,KAG7D4K,EAAY1C,EACZ2C,EAAO,EACP,QACF,OACK,GAAIH,EAAO/L,OAAS,EAAG,CAC5B+L,EAAS,GACTC,EAAoB,EACpBC,EAAY1C,EACZ2C,EAAO,EACP,QACF,CAGEL,IACFE,EAASA,EAAO/L,OAAS,EAAI+L,EAAS,MAAQ,KAC9CC,EAAoB,EAExB,MACMD,EAAO/L,OAAS,EAClB+L,GAAU,IAAMvB,EAAK5H,MAAMqJ,EAAY,EAAG1C,GAE1CwC,EAASvB,EAAK5H,MAAMqJ,EAAY,EAAG1C,GAGrCyC,EAAoBzC,EAAQ0C,EAAY,EAG1CA,EAAY1C,EACZ2C,EAAO,CACT,MAAoB,KAATZ,GAAyBY,GAAQ,EAC1CA,IAEAA,GAAQ,CAEZ,CAEA,OAAOH,CACT,CAtGcI,CAAgB3B,GAAOoB,GAEd,IAAjBzM,EAAMa,QAAiB4L,IACzBzM,EAAQ,KAGNA,EAAMa,OAAS,GAA0C,KAArCwK,EAAKK,WAAWL,EAAKxK,OAAS,KACpDb,GAAS,KAGX,OAAOyM,EAAW,IAAMzM,EAAQA,CAClC,CA9BsCiN,CAAUZ,EAChD,EAxOuDa,IAAK,KA0W5D,SAAS1B,EAAWH,GAClB,GAAoB,kBAATA,EACT,MAAM,IAAIzJ,UACR,mCAAqCuL,KAAKC,UAAU/B,GAG1D,CChaO,IAAMgC,EAAO,CAACC,IAErB,WACE,MAAO,GACT,GCoBO,SAASC,EAAMC,GACpB,OACoB,OAAlBA,GACyB,kBAAlBA,GAEPA,EAAcC,MAEdD,EAAchD,MAElB,CCxBO,SAASkD,EAAUrC,GACxB,GAAoB,kBAATA,EACTA,EAAO,IAAIsC,IAAItC,QACV,IAAKkC,EAAMlC,GAAO,CAEvB,IAAMvI,EAAQ,IAAIlB,UAChB,+EACEyJ,EACA,KAGJ,MADAvI,EAAMqJ,KAAO,uBACPrJ,CACR,CAEA,GAAsB,UAAlBuI,EAAKuC,SAAsB,CAE7B,IAAM9K,EAAQ,IAAIlB,UAAU,kCAE5B,MADAkB,EAAMqJ,KAAO,yBACPrJ,CACR,CAEA,OAWF,SAA6BqI,GAC3B,GAAqB,KAAjBA,EAAI0C,SAAiB,CAEvB,IAAM/K,EAAQ,IAAIlB,UAChB,wDAGF,MADAkB,EAAMqJ,KAAO,4BACPrJ,CACR,CAEA,IAAMgL,EAAW3C,EAAI2C,SACjB1D,GAAS,EAEb,OAASA,EAAQ0D,EAASjN,QACxB,GACiC,KAA/BiN,EAASpC,WAAWtB,IACe,KAAnC0D,EAASpC,WAAWtB,EAAQ,GAC5B,CACA,IAAM2D,EAAQD,EAASpC,WAAWtB,EAAQ,GAC1C,GAAc,KAAV2D,GAAoC,MAAVA,EAAyB,CAErD,IAAMjL,EAAQ,IAAIlB,UAChB,uDAGF,MADAkB,EAAMqJ,KAAO,4BACPrJ,CACR,CACF,CAGF,OAAOkL,mBAAmBF,EAC5B,CA1CSG,CAAoB5C,EAC7B,CCgEA,IAAM6C,EAAQ,CAAC,UAAW,OAAQ,WAAY,OAAQ,UAAW,WAEpDC,EAAK,WA8IhB,OAAA/F,EAAAA,EAAAA,IAvHA,SAAA+F,EAAYnO,GAEV,IAAIJ,GAFaqI,EAAAA,EAAAA,GAAA,KAAAkG,GAOfvO,EAHGI,EAEuB,kBAAVA,GAoYtB,SAAgBA,GACd,OAAOoO,EAAWpO,EACpB,CAtY4CqO,CAAOrO,GACnC,CAACA,MAAAA,GACFuN,EAAMvN,GACL,CAACqL,KAAMrL,GAEPA,EANA,CAAC,EAiBbyC,KAAK6L,KAAO,CAAC,EAOb7L,KAAK8L,SAAW,GAShB9L,KAAK+L,QAAU,GAOf/L,KAAK6K,IAAMD,EAAKC,MAQhB7K,KAAKzC,MAYLyC,KAAKgM,OAULhM,KAAKmK,OAULnK,KAAKiM,IAML,IAFA,IAkBIxK,EAlBAkG,GAAS,IAEJA,EAAQ8D,EAAMrN,QAAQ,CAC7B,IAAMqD,EAAOgK,EAAM9D,GAKjBlG,KAAQtE,QACU+K,IAAlB/K,EAAQsE,IACU,OAAlBtE,EAAQsE,KAGRzB,KAAKyB,GAAiB,YAATA,GAAkBqE,EAAAA,EAAAA,GAAO3I,EAAQsE,IAAStE,EAAQsE,GAEnE,CAMA,IAAKA,KAAQtE,EAENsO,EAAMS,SAASzK,KAElBzB,KAAKyB,GAAQtE,EAAQsE,GAG3B,GAEA,EAAA5E,IAAA,OAAAyK,IAKA,WACE,OAAOtH,KAAK+L,QAAQ/L,KAAK+L,QAAQ3N,OAAS,EAC5C,EAEAmJ,IASA,SAASqB,GACHkC,EAAMlC,KACRA,EAAOqC,EAAUrC,IAGnBuD,EAAevD,EAAM,QAEjB5I,KAAK4I,OAASA,GAChB5I,KAAK+L,QAAQnL,KAAKgI,EAEtB,GAEA,CAAA/L,IAAA,UAAAyK,IAGA,WACE,MAA4B,kBAAdtH,KAAK4I,KAAoBA,EAAKQ,QAAQpJ,KAAK4I,WAAQV,CACnE,EAEAX,IAKA,SAAY6B,GACVL,EAAW/I,KAAK6I,SAAU,WAC1B7I,KAAK4I,KAAOA,EAAKe,KAAKP,GAAW,GAAIpJ,KAAK6I,SAC5C,GAEA,CAAAhM,IAAA,WAAAyK,IAGA,WACE,MAA4B,kBAAdtH,KAAK4I,KAAoBA,EAAKC,SAAS7I,KAAK4I,WAAQV,CACpE,EAEAX,IAOA,SAAasB,GACXsD,EAAetD,EAAU,YACzBuD,EAAWvD,EAAU,YACrB7I,KAAK4I,KAAOA,EAAKe,KAAK3J,KAAKoJ,SAAW,GAAIP,EAC5C,GAEA,CAAAhM,IAAA,UAAAyK,IAGA,WACE,MAA4B,kBAAdtH,KAAK4I,KAAoBA,EAAKU,QAAQtJ,KAAK4I,WAAQV,CACnE,EAEAX,IAOA,SAAY+B,GAIV,GAHA8C,EAAW9C,EAAS,WACpBP,EAAW/I,KAAKoJ,QAAS,WAErBE,EAAS,CACX,GAA8B,KAA1BA,EAAQL,WAAW,GACrB,MAAM,IAAIzI,MAAM,iCAGlB,GAAI8I,EAAQ4C,SAAS,IAAK,GACxB,MAAM,IAAI1L,MAAM,yCAEpB,CAEAR,KAAK4I,KAAOA,EAAKe,KAAK3J,KAAKoJ,QAASpJ,KAAKqM,MAAQ/C,GAAW,IAC9D,GAEA,CAAAzM,IAAA,OAAAyK,IAGA,WACE,MAA4B,kBAAdtH,KAAK4I,KACfA,EAAKC,SAAS7I,KAAK4I,KAAM5I,KAAKsJ,cAC9BpB,CACN,EAEAX,IAOA,SAAS8E,GACPF,EAAeE,EAAM,QACrBD,EAAWC,EAAM,QACjBrM,KAAK4I,KAAOA,EAAKe,KAAK3J,KAAKoJ,SAAW,GAAIiD,GAAQrM,KAAKsJ,SAAW,IACpE,GAEA,CAAAzM,IAAA,WAAAU,MASA,SAAS+O,GACP,OAAQtM,KAAKzC,OAAS,IAAIpB,SAASmQ,QAAYpE,EACjD,GAEA,CAAArL,IAAA,UAAAU,MAgBA,SAAQkD,EAAQqH,EAAOC,GACrB,IAAMI,EAAU,IAAIP,EAAanH,EAAQqH,EAAOC,GAWhD,OATI/H,KAAK4I,OACPT,EAAQ/K,KAAO4C,KAAK4I,KAAO,IAAMT,EAAQ/K,KACzC+K,EAAQI,KAAOvI,KAAK4I,MAGtBT,EAAQE,OAAQ,EAEhBrI,KAAK8L,SAASlL,KAAKuH,GAEZA,CACT,GAEA,CAAAtL,IAAA,OAAAU,MAgBA,SAAKkD,EAAQqH,EAAOC,GAClB,IAAMI,EAAUnI,KAAKmI,QAAQ1H,EAAQqH,EAAOC,GAI5C,OAFAI,EAAQE,MAAQ,KAETF,CACT,GAEA,CAAAtL,IAAA,OAAAU,MAoBA,SAAKkD,EAAQqH,EAAOC,GAClB,IAAMI,EAAUnI,KAAKmI,QAAQ1H,EAAQqH,EAAOC,GAI5C,MAFAI,EAAQE,OAAQ,EAEVF,CACR,IAAC,CApWe,GAiXlB,SAASiE,EAAWG,EAAMnP,GACxB,GAAImP,GAAQA,EAAKL,SAAStD,EAAK6B,KAC7B,MAAM,IAAIjK,MACR,IAAMpD,EAAO,uCAAyCwL,EAAK6B,IAAM,IAGvE,CAYA,SAAS0B,EAAeI,EAAMnP,GAC5B,IAAKmP,EACH,MAAM,IAAI/L,MAAM,IAAMpD,EAAO,oBAEjC,CAYA,SAAS2L,EAAWH,EAAMxL,GACxB,IAAKwL,EACH,MAAM,IAAIpI,MAAM,YAAcpD,EAAO,kCAEzC,iDCvfA,SAASoP,EAAStJ,GAChB,OAAO,EAAAuJ,EAAA,GAAevJ,KAAM,EAAA8C,EAAA,GAAgB9C,KAAM,EAAA+C,EAAA,GAA2B/C,KAAM,EAAAwJ,EAAA,IACrF,CCCO,SAASC,EAAKtM,GACnB,GAAIA,EACF,MAAMA,CAEV,gBCXe,SAAS1D,EAAcY,GACrC,GAAqB,kBAAVA,GAAgC,OAAVA,EAChC,OAAO,EAGR,IAAMvB,EAAYD,OAAOqK,eAAe7I,GACxC,OAAsB,OAAdvB,GAAsBA,IAAcD,OAAOC,WAAkD,OAArCD,OAAOqK,eAAepK,OAA0BmG,OAAOyK,eAAerP,MAAY4E,OAAOiD,YAAY7H,EACtK,CC+BO,SAASsP,IAEd,IAAMC,EAAM,GAENC,EAAW,CAACC,IAKlB,WAAwB,QAAAnD,EAAA3L,UAAAE,OAAR6O,EAAM,IAAAxQ,MAAAoN,GAAAE,EAAA,EAAAA,EAAAF,EAAAE,IAANkD,EAAMlD,GAAA7L,UAAA6L,GACpB,IAAImD,GAAmB,EAEjBC,EAAWF,EAAOG,MAExB,GAAwB,oBAAbD,EACT,MAAM,IAAIhO,UAAU,2CAA6CgO,IAWnE,SAASE,EAAKhN,GACZ,IAAMiN,EAAKR,IAAMI,GACbvF,GAAS,EAEb,GAAItH,EACF8M,EAAS9M,OADX,CAKA,QAAAkN,EAAArP,UAAAE,OATsBiH,EAAM,IAAA5I,MAAA8Q,EAAA,EAAAA,EAAA,KAAAC,EAAA,EAAAA,EAAAD,EAAAC,IAANnI,EAAMmI,EAAA,GAAAtP,UAAAsP,GAU5B,OAAS7F,EAAQsF,EAAO7O,QACA,OAAlBiH,EAAOsC,SAAqCO,IAAlB7C,EAAOsC,KACnCtC,EAAOsC,GAASsF,EAAOtF,IAK3BsF,EAAS5H,EAGLiI,EAqDH,SAAcG,EAAYN,GAE/B,IAAIO,EAEJ,OAAOC,EAQP,SAASA,IAAuB,QAAAC,EAAA1P,UAAAE,OAAZyP,EAAU,IAAApR,MAAAmR,GAAAE,EAAA,EAAAA,EAAAF,EAAAE,IAAVD,EAAUC,GAAA5P,UAAA4P,GAC5B,IAEI3D,EAFE4D,EAAoBN,EAAWrP,OAASyP,EAAWzP,OAIrD2P,GACFF,EAAWjN,KAAKoN,GAGlB,IACE7D,EAASsD,EAAW3G,MAAM9G,KAAM6N,EAClC,CAAE,MAAOxN,GAOP,GAAI0N,GAAqBL,EACvB,MAPsCrN,EAUxC,OAAO2N,EAViC3N,EAW1C,CAEK0N,IACC5D,GAAUA,EAAO8D,MAA+B,oBAAhB9D,EAAO8D,KACzC9D,EAAO8D,KAAKA,EAAMD,GACT7D,aAAkB3J,MAC3BwN,EAAK7D,GAEL8D,EAAK9D,GAGX,CAOA,SAAS6D,EAAK3N,GACZ,IAAKqN,EAAQ,CACXA,GAAS,EAAI,QAAAQ,EAAAhQ,UAAAE,OAFOiH,EAAM,IAAA5I,MAAAyR,EAAA,EAAAA,EAAA,KAAAC,EAAA,EAAAA,EAAAD,EAAAC,IAAN9I,EAAM8I,EAAA,GAAAjQ,UAAAiQ,GAG1BhB,EAAQrG,WAAC,EAAD,CAACzG,GAAK+N,OAAK/I,GACrB,CACF,CAOA,SAAS4I,EAAK1Q,GACZyQ,EAAK,KAAMzQ,EACb,CACF,CAxHQ8Q,CAAKf,EAAID,GAAKvG,WAAC,EAAGzB,GAElB8H,EAAQrG,WAAC,EAAD,CAAC,MAAIsH,OAAK/I,GAhBpB,CAkBF,GAjCIyB,WAAC,EAAD,CAAC,MAAIsH,QAAAtI,EAAAA,EAAAA,GAAKmH,IAkChB,EAhDuBqB,IAmDvB,SAAaC,GACX,GAA0B,oBAAfA,EACT,MAAM,IAAIpP,UACR,+CAAiDoP,GAKrD,OADAzB,EAAIlM,KAAK2N,GACFxB,CACT,GA1DA,OAAOA,CA2DT,CC3EO,IAAMyB,EAQb,SAASC,IACP,IAMIC,EANEC,EAAe9B,IAEf+B,EAAY,GAEdC,EAAY,CAAC,EAGbC,GAAe,EA2BnB,OAvBAC,EAAUlD,KA6CV,SAAchP,EAAKU,GACjB,GAAmB,kBAARV,EAET,OAAyB,IAArBqB,UAAUE,QACZ4Q,EAAe,OAAQN,GACvBG,EAAUhS,GAAOU,EACVwR,GAIDE,EAAIvS,KAAKmS,EAAWhS,IAAQgS,EAAUhS,IAAS,KAIzD,GAAIA,EAGF,OAFAmS,EAAe,OAAQN,GACvBG,EAAYhS,EACLkS,EAIT,OAAOF,CACT,EAlEAE,EAAUG,YAAShH,EACnB6G,EAAUI,cAAWjH,EAGrB6G,EAAUK,OAiEV,WACE,GAAIV,EACF,OAAOK,EAGT,OAASD,EAAcF,EAAUxQ,QAAQ,CACvC,IAAAiR,EAAA7C,EAA+BoC,EAAUE,IAAlCQ,EAAQD,EAAA,GAAKlS,EAAOkS,EAAArO,MAAA,GAE3B,IAAmB,IAAf7D,EAAQ,GAAZ,EAImB,IAAfA,EAAQ,KACVA,EAAQ,QAAK+K,GAIf,IAAMqH,EAAcD,EAAS5S,KAAIoK,MAAbwI,EAAQ,CAAMP,GAASX,QAAAtI,EAAAA,EAAAA,GAAK3I,KAErB,oBAAhBoS,GACTZ,EAAaL,IAAIiB,EAVnB,CAYF,CAKA,OAHAb,GAAS,EACTI,EAAcU,OAAOC,kBAEdV,CACT,EA1FAA,EAAUH,UAAYA,EAEtBG,EAAUT,IA+FV,SAAa/Q,GAAmB,QAAAsM,EAAA3L,UAAAE,OAATjB,EAAO,IAAAV,MAAAoN,EAAA,EAAAA,EAAA,KAAAE,EAAA,EAAAA,EAAAF,EAAAE,IAAP5M,EAAO4M,EAAA,GAAA7L,UAAA6L,GAE5B,IAAI2F,EAIJ,GAFAV,EAAe,MAAON,GAER,OAAVnR,QAA4B2K,IAAV3K,QAEf,GAAqB,oBAAVA,EAChBoS,EAAS7I,WAAC,EAAD,CAACvJ,GAAK6Q,OAAKjR,QACf,IAAqB,kBAAVI,EAOhB,MAAM,IAAI4B,UAAU,+BAAiC5B,EAAQ,KANzDd,MAAMF,QAAQgB,GAChBqS,EAAQrS,GAERsS,EAAUtS,EAId,CAEImS,IACFb,EAAUa,SAAW3T,OAAO+T,OAAOjB,EAAUa,UAAY,CAAC,EAAGA,IAG/D,OAAOX,EAMP,SAASgB,EAAIxS,GACX,GAAqB,oBAAVA,EACToS,EAAUpS,OACL,IAAqB,kBAAVA,EAQhB,MAAM,IAAI4B,UAAU,+BAAiC5B,EAAQ,KAP7D,GAAId,MAAMF,QAAQgB,GAAQ,CACxB,IAAAyS,EAAAxD,EAA6BjP,GAAtB0S,EAAMD,EAAA,GAAK7S,EAAO6S,EAAAhP,MAAA,GACzB2O,EAAS7I,WAAC,EAAD,CAACmJ,GAAM7B,QAAAtI,EAAAA,EAAAA,GAAK3I,IACvB,MACE0S,EAAUtS,EAId,CACF,CAMA,SAASsS,EAAU1F,GACjByF,EAAQzF,EAAO+F,SAEX/F,EAAOuF,WACTA,EAAW3T,OAAO+T,OAAOJ,GAAY,CAAC,EAAGvF,EAAOuF,UAEpD,CAMA,SAASE,EAAQM,GACf,IAAIvI,GAAS,EAEb,GAAgB,OAAZuI,QAAgChI,IAAZgI,OAEjB,KAAIzT,MAAMF,QAAQ2T,GAMvB,MAAM,IAAI/Q,UAAU,oCAAsC+Q,EAAU,KALpE,OAASvI,EAAQuI,EAAQ9R,QAAQ,CAE/B2R,EADcG,EAAQvI,GAExB,CAGF,CACF,CAOA,SAASgI,EAAUM,EAAQ1S,GAKzB,IAJA,IAEI4S,EAFAxI,GAAS,IAIJA,EAAQiH,EAAUxQ,QACzB,GAAIwQ,EAAUjH,GAAO,KAAOsI,EAAQ,CAClCE,EAAQvB,EAAUjH,GAClB,KACF,CAGEwI,GACEC,EAAWD,EAAM,KAAOC,EAAW7S,KACrCA,EAAQM,GAAO,EAAMsS,EAAM,GAAI5S,IAGjC4S,EAAM,GAAK5S,GAGXqR,EAAUhO,KAAInE,MAAAT,UAAAgF,MAAAtE,KAAKwB,WAEvB,CACF,EApMA6Q,EAAU9J,MAuMV,SAAeoL,GACbtB,EAAUK,SACV,IAAM7G,EAAO+H,EAAMD,GACbnB,EAASH,EAAUG,OAGzB,GAFAqB,EAAa,QAASrB,GAElBsB,EAAQtB,EAAQ,SAElB,OAAO,IAAIA,EAAOuB,OAAOlI,GAAOA,GAAMtD,QAIxC,OAAOiK,EAAOuB,OAAOlI,GAAOA,EAC9B,EAnNAwG,EAAUpE,UAsNV,SAAmB9K,EAAMwQ,GACvBtB,EAAUK,SACV,IAAM7G,EAAO+H,EAAMD,GACblB,EAAWJ,EAAUI,SAI3B,GAHAuB,EAAe,YAAavB,GAC5BwB,EAAW9Q,GAEP2Q,EAAQrB,EAAU,WAEpB,OAAO,IAAIA,EAAStP,EAAM0I,GAAMqI,UAIlC,OAAOzB,EAAStP,EAAM0I,EACxB,EAlOAwG,EAAU/B,IA0OV,SAAanN,EAAMwQ,EAAKlD,GACtBwD,EAAW9Q,GACXkP,EAAUK,SAELjC,GAA2B,oBAARkD,IACtBlD,EAAWkD,EACXA,OAAMnI,GAGR,IAAKiF,EACH,OAAO,IAAI0D,QAAQC,GAUrB,SAASA,EAASC,EAASC,GAUzB,SAAShD,EAAK3N,EAAO4Q,EAAM1I,GACzB0I,EAAOA,GAAQpR,EACXQ,EACF2Q,EAAO3Q,GACE0Q,EACTA,EAAQE,GAGR9D,EAAS,KAAM8D,EAAM1I,EAEzB,CAlBAoG,EAAa3B,IAAInN,EAAMyQ,EAAMD,GAAMrC,EAmBrC,CA5BA8C,EAAS,KAAM3D,EA6BjB,EAnRA4B,EAAUmC,QAsRV,SAAiBrR,EAAM0I,GAErB,IAAI4B,EAEAgH,EAOJ,OALApC,EAAU/B,IAAInN,EAAM0I,EAAMyF,GAE1BoD,EAAW,UAAW,MAAOD,GAGtBhH,EAOP,SAAS6D,EAAK3N,EAAO4Q,GACnBtE,EAAKtM,GACL8J,EAAS8G,EACTE,GAAW,CACb,CACF,EA3SApC,EAAUsC,QAkTV,SAAiBhB,EAAKlD,GAKpB,GAJA4B,EAAUK,SACVmB,EAAa,UAAWxB,EAAUG,QAClCwB,EAAe,UAAW3B,EAAUI,WAE/BhC,EACH,OAAO,IAAI0D,QAAQC,GAUrB,SAASA,EAASC,EAASC,GACzB,IAAMzI,EAAO+H,EAAMD,GA0BnB,SAASrC,EAAK3N,EAAOkI,GACflI,IAAUkI,EACZyI,EAAO3Q,GACE0Q,EACTA,EAAQxI,GAGR4E,EAAS,KAAM5E,EAEnB,CAjCAwG,EAAU/B,IAAI+B,EAAU9J,MAAMsD,GAAOA,GAAM,SAAClI,EAAO4Q,EAAM1I,GACvD,IAAIlI,GAAU4Q,GAAS1I,EAEhB,CAEL,IAAM4B,EAAS4E,EAAUpE,UAAUsG,EAAM1I,QAE1BL,IAAXiC,GAAmC,OAAXA,IAsMZ,kBADI5M,EAnMY4M,IAoMJnI,EAASzE,GAnMnCgL,EAAKhL,MAAQ4M,EAEb5B,EAAK4B,OAASA,GAGhB6D,EAAK3N,EAAOkI,EACd,MAdEyF,EAAK3N,GA0Mf,IAA8B9C,CA3LxB,GAiBF,CA5CAuT,EAAS,KAAM3D,EA6CjB,EAvWA4B,EAAUuC,YA0WV,SAAqBjB,GAEnB,IAAIc,EAEJpC,EAAUK,SACVmB,EAAa,cAAexB,EAAUG,QACtCwB,EAAe,cAAe3B,EAAUI,UAExC,IAAM5G,EAAO+H,EAAMD,GAMnB,OAJAtB,EAAUsC,QAAQ9I,EAAMyF,GAExBoD,EAAW,cAAe,UAAWD,GAE9B5I,EAMP,SAASyF,EAAK3N,GACZ8Q,GAAW,EACXxE,EAAKtM,EACP,CACF,EA/XO0O,EAIP,SAASA,IAIP,IAHA,IAAMwC,EAAc9C,IAChB9G,GAAS,IAEJA,EAAQiH,EAAUxQ,QACzBmT,EAAYjD,IAAGxH,MAAfyK,GAAWzL,EAAAA,EAAAA,GAAQ8I,EAAUjH,KAK/B,OAFA4J,EAAY1F,KAAKhO,GAAO,EAAM,CAAC,EAAGgR,IAE3B0C,CACT,CAiXF,CA3auB9C,GAAOW,SAExBH,EAAM,CAAC,EAAEhT,eAkbf,SAASuU,EAAQjT,EAAOH,GACtB,MACmB,oBAAVG,GAGPA,EAAMvB,YAeV,SAAcuB,GAEZ,IAAIV,EAEJ,IAAKA,KAAOU,EACV,GAAI0R,EAAIvS,KAAKa,EAAOV,GAClB,OAAO,EAIX,OAAO,CACT,CArBK2U,CAAKjU,EAAMvB,YAAcoB,KAAQG,EAAMvB,UAE5C,CA4BA,SAASuU,EAAanT,EAAMG,GAC1B,GAAqB,oBAAVA,EACT,MAAM,IAAI4B,UAAU,WAAa/B,EAAO,qBAE5C,CASA,SAASsT,EAAetT,EAAMG,GAC5B,GAAqB,oBAAVA,EACT,MAAM,IAAI4B,UAAU,WAAa/B,EAAO,uBAE5C,CASA,SAAS4R,EAAe5R,EAAMsR,GAC5B,GAAIA,EACF,MAAM,IAAIlO,MACR,gBACEpD,EACA,mHAGR,CAQA,SAASuT,EAAW9Q,GAGlB,IAAKuQ,EAAWvQ,IAA8B,kBAAdA,EAAK0B,KACnC,MAAM,IAAIpC,UAAU,uBAAyBU,EAAO,IAGxD,CAUA,SAASuR,EAAWhU,EAAMqU,EAAWN,GACnC,IAAKA,EACH,MAAM,IAAI3Q,MACR,IAAMpD,EAAO,0BAA4BqU,EAAY,YAG3D,CAMA,SAASnB,EAAM/S,GACb,OAOF,SAAyBA,GACvB,OAAOiJ,QACLjJ,GACmB,kBAAVA,GACP,YAAaA,GACb,aAAcA,EAEpB,CAdSmU,CAAgBnU,GAASA,EAAQ,IAAImO,EAAMnO,EACpD,CCrjBA,IAAMoU,EAAe,CAAC,EAuCtB,SAASC,EAAIrU,EAAOsU,EAAiBC,GACnC,GAqDF,SAAcvU,GACZ,OAAOiJ,QAAQjJ,GAA0B,kBAAVA,EACjC,CAvDMsC,CAAKtC,GAAQ,CACf,GAAI,UAAWA,EACb,MAAsB,SAAfA,EAAMgE,MAAoBuQ,EAAmBvU,EAAMA,MAAX,GAGjD,GAAIsU,GAAmB,QAAStU,GAASA,EAAMwU,IAC7C,OAAOxU,EAAMwU,IAGf,GAAI,aAAcxU,EAChB,OAAOyU,GAAIzU,EAAM0U,SAAUJ,EAAiBC,EAEhD,CAEA,OAAIrV,MAAMF,QAAQgB,GACTyU,GAAIzU,EAAOsU,EAAiBC,GAG9B,EACT,CAcA,SAASE,GAAI/E,EAAQ4E,EAAiBC,GAKpC,IAHA,IAAM3H,EAAS,GACXxC,GAAS,IAEJA,EAAQsF,EAAO7O,QACtB+L,EAAOxC,GAASiK,EAAI3E,EAAOtF,GAAQkK,EAAiBC,GAGtD,OAAO3H,EAAOR,KAAK,GACrB,CCzEO,SAASuI,GAAOC,EAAMxS,EAAOyS,EAAQC,GAC1C,IAGIxE,EAHE5N,EAAMkS,EAAK/T,OACbkU,EAAa,EAajB,GAPE3S,EADEA,EAAQ,GACDA,EAAQM,EAAM,EAAIA,EAAMN,EAEzBA,EAAQM,EAAMA,EAAMN,EAE9ByS,EAASA,EAAS,EAAIA,EAAS,EAG3BC,EAAMjU,OAAS,KACjByP,EAAapR,MAAMoJ,KAAKwM,IACbE,QAAQ5S,EAAOyS,GAE1BD,EAAKD,OAAMpL,MAAXqL,GAAIrM,EAAAA,EAAAA,GAAW+H,SAMf,IAHIuE,GAAQD,EAAKD,OAAOvS,EAAOyS,GAGxBE,EAAaD,EAAMjU,SACxByP,EAAawE,EAAMrR,MAAMsR,EAAYA,EAAa,MACvCC,QAAQ5S,EAAO,GAE1BwS,EAAKD,OAAMpL,MAAXqL,GAAIrM,EAAAA,EAAAA,GAAW+H,IACfyE,GAAc,IACd3S,GAAS,GAGf,CAkBO,SAASiB,GAAKuR,EAAME,GACzB,OAAIF,EAAK/T,OAAS,GAChB8T,GAAOC,EAAMA,EAAK/T,OAAQ,EAAGiU,GACtBF,GAEFE,CACT,CCvEA,IAAMpW,GAAiB,CAAC,EAAEA,eA+B1B,SAASuW,GAAgBR,EAAKS,GAE5B,IAAIC,EAEJ,IAAKA,KAAQD,EAAW,CACtB,IAEME,GAFQ1W,GAAeS,KAAKsV,EAAKU,GAAQV,EAAIU,QAAQxK,KAEpC8J,EAAIU,GAAQ,CAAC,GAE9BE,EAAQH,EAAUC,GAEpBhJ,OAAI,EAER,GAAIkJ,EACF,IAAKlJ,KAAQkJ,EAAO,CACb3W,GAAeS,KAAKiW,EAAMjJ,KAAOiJ,EAAKjJ,GAAQ,IACnD,IAAMnM,EAAQqV,EAAMlJ,GACpBmJ,GAEEF,EAAKjJ,GACLjN,MAAMF,QAAQgB,GAASA,EAAQA,EAAQ,CAACA,GAAS,GAErD,CAEJ,CACF,CAUA,SAASsV,GAAWC,EAAUX,GAK5B,IAJA,IAAIxK,GAAS,EAEPoL,EAAS,KAENpL,EAAQwK,EAAK/T,SAEE,UAApB+T,EAAKxK,GAAOoI,IAAkB+C,EAAWC,GAAQnS,KAAKuR,EAAKxK,IAG/DuK,GAAOY,EAAU,EAAG,EAAGC,EACzB,CC5EO,ICaMC,GAAaC,GAAW,YAcxBC,GAAoBD,GAAW,cAuB/BE,GAAaF,GAAW,uBAa9B,SAASG,GAAa1J,GAC3B,OAGW,OAATA,IAAkBA,EAAO,IAAe,MAATA,EAEnC,CAaO,IAAM2J,GAAaJ,GAAW,MAoBxBK,GAAgBL,GAAW,cAe3BM,GAAmBN,GAAW,kBAiBpC,SAASO,GAAmB9J,GACjC,OAAgB,OAATA,GAAiBA,GAAQ,CAClC,CAWO,SAAS+J,GAA0B/J,GACxC,OAAgB,OAATA,IAAkBA,EAAO,GAAc,KAATA,EACvC,CAiBO,SAASgK,GAAchK,GAC5B,OAAiB,IAAVA,IAAyB,IAAVA,GAAwB,KAATA,CACvC,CAuBO,IAAMiK,GAAqBV,GD9LhC,wwCCoNWW,GAAoBX,GAAW,MAQ5C,SAASA,GAAWY,GAClB,OAUA,SAAenK,GACb,OAAgB,OAATA,GAAiBmK,EAAMC,KAAKrD,OAAOsD,aAAarK,GACzD,CACF,CC3MO,SAASsK,GAAaC,EAASC,EAAI3S,EAAM4S,GAC9C,IAAMC,EAAQD,EAAMA,EAAM,EAAI3E,OAAOC,kBACjC4E,EAAO,EACX,OAGA,SAAe3K,GACb,GAAIgK,GAAchK,GAEhB,OADAuK,EAAQK,MAAM/S,GACPgT,EAAO7K,GAEhB,OAAOwK,EAAGxK,EACZ,EAGA,SAAS6K,EAAO7K,GACd,OAAIgK,GAAchK,IAAS2K,IAASD,GAClCH,EAAQO,QAAQ9K,GACT6K,IAETN,EAAQQ,KAAKlT,GACN2S,EAAGxK,GACZ,CACF,CCtDO,IAAMvJ,GAAU,CACrBuU,SAOF,SAA2BT,GACzB,IAMIU,EANEC,EAAeX,EAAQY,QAC3B7U,KAAK8U,OAAOjC,WAAWkC,gBASzB,SAAoCrL,GAClC,GAAa,OAATA,EAEF,YADAuK,EAAQO,QAAQ9K,GAMlB,OAHAuK,EAAQK,MAAM,cACdL,EAAQO,QAAQ9K,GAChBuK,EAAQQ,KAAK,cACNT,GAAaC,EAASW,EAAc,aAC7C,IAGA,SAA0BlL,GAExB,OADAuK,EAAQK,MAAM,aACPU,EAAUtL,EACnB,IAlBA,OAAOkL,EAqBP,SAASI,EAAUtL,GACjB,IAAMuL,EAAQhB,EAAQK,MAAM,YAAa,CACvCY,YAAa,OACbP,SAAAA,IAMF,OAJIA,IACFA,EAAStH,KAAO4H,GAElBN,EAAWM,EACJpJ,EAAKnC,EACd,CAGA,SAASmC,EAAKnC,GACZ,OAAa,OAATA,GACFuK,EAAQQ,KAAK,aACbR,EAAQQ,KAAK,kBACbR,EAAQO,QAAQ9K,IAGd8J,GAAmB9J,IACrBuK,EAAQO,QAAQ9K,GAChBuK,EAAQQ,KAAK,aACNO,IAITf,EAAQO,QAAQ9K,GACTmC,EACT,CACF,GC1DO,IAAMsJ,GAAW,CACtBT,SAYF,SAA4BT,GAC1B,IAKImB,EAEAC,EAEAC,EATEC,EAAOvV,KAEPoI,EAAQ,GACVoN,EAAY,EAOhB,OAAO7V,EAGP,SAASA,EAAM+J,GAWb,GAAI8L,EAAYpN,EAAMhK,OAAQ,CAC5B,IAAMqX,EAAOrN,EAAMoN,GAEnB,OADAD,EAAKG,eAAiBD,EAAK,GACpBxB,EAAQY,QACbY,EAAK,GAAGE,aACRC,EACAC,EAHK5B,CAILvK,EACJ,CAGA,OAAOmM,EAAmBnM,EAC5B,CAGA,SAASkM,EAAiBlM,GAMxB,GALA8L,IAKID,EAAKG,eAAeI,WAAY,CAClCP,EAAKG,eAAeI,gBAAa5N,EAC7BkN,GACFW,IAWF,IANA,IAGIrO,EAHEsO,EAAmBT,EAAKU,OAAO7X,OACjC8X,EAAkBF,EAKfE,KACL,GACsC,SAApCX,EAAKU,OAAOC,GAAiB,IACY,cAAzCX,EAAKU,OAAOC,GAAiB,GAAG3U,KAChC,CACAmG,EAAQ6N,EAAKU,OAAOC,GAAiB,GAAGjW,IACxC,KACF,CAEFkW,EAAeX,GAIf,IADA,IAAI7N,EAAQqO,EACLrO,EAAQ4N,EAAKU,OAAO7X,QACzBmX,EAAKU,OAAOtO,GAAO,GAAG1H,IAAMlE,OAAO+T,OAAO,CAAC,EAAGpI,GAC9CC,IAaF,OATAuK,GACEqD,EAAKU,OACLC,EAAkB,EAClB,EACAX,EAAKU,OAAOjV,MAAMgV,IAIpBT,EAAKU,OAAO7X,OAASuJ,EACdkO,EAAmBnM,EAC5B,CACA,OAAO/J,EAAM+J,EACf,CAGA,SAASmM,EAAmBnM,GAM1B,GAAI8L,IAAcpN,EAAMhK,OAAQ,CAI9B,IAAKgX,EACH,OAAOgB,EAAkB1M,GAM3B,GAAI0L,EAAUiB,kBAAoBjB,EAAUiB,iBAAiBC,SAC3D,OAAOC,EAAU7M,GAQnB6L,EAAKiB,UAAYhQ,QACf4O,EAAUiB,mBAAqBjB,EAAUqB,8BAE7C,CAIA,OADAlB,EAAKG,eAAiB,CAAC,EAChBzB,EAAQyC,MACbC,GACAC,EACAC,EAHK5C,CAILvK,EACJ,CAGA,SAASkN,EAAqBlN,GAG5B,OAFI0L,GAAWW,IACfI,EAAeX,GACRY,EAAkB1M,EAC3B,CAGA,SAASmN,EAAsBnN,GAG7B,OAFA6L,EAAKT,OAAOgC,KAAKvB,EAAKwB,MAAMnX,MAAQ4V,IAAcpN,EAAMhK,OACxDkX,EAAkBC,EAAKwB,MAAMC,OACtBT,EAAU7M,EACnB,CAGA,SAAS0M,EAAkB1M,GAGzB,OADA6L,EAAKG,eAAiB,CAAC,EAChBzB,EAAQY,QACb8B,GACAM,EACAV,EAHKtC,CAILvK,EACJ,CAGA,SAASuN,EAAkBvN,GAIzB,OAHA8L,IACApN,EAAMxH,KAAK,CAAC2U,EAAKc,iBAAkBd,EAAKG,iBAEjCU,EAAkB1M,EAC3B,CAGA,SAAS6M,EAAU7M,GACjB,OAAa,OAATA,GACE0L,GAAWW,IACfI,EAAe,QACflC,EAAQO,QAAQ9K,KAGlB0L,EAAYA,GAAaG,EAAKT,OAAOoC,KAAK3B,EAAKwB,OAC/C9C,EAAQK,MAAM,YAAa,CACzBY,YAAa,OACbP,SAAUU,EACV8B,WAAY/B,IAEPgC,EAAa1N,GACtB,CAGA,SAAS0N,EAAa1N,GACpB,OAAa,OAATA,GACF2N,EAAapD,EAAQQ,KAAK,cAAc,GACxC0B,EAAe,QACflC,EAAQO,QAAQ9K,IAGd8J,GAAmB9J,IACrBuK,EAAQO,QAAQ9K,GAChB2N,EAAapD,EAAQQ,KAAK,cAE1Be,EAAY,EACZD,EAAKiB,eAAYtO,EACVvI,IAETsU,EAAQO,QAAQ9K,GACT0N,EACT,CAOA,SAASC,EAAapC,EAAOqC,GAC3B,IAAMC,EAAShC,EAAKiC,YAAYvC,GAyChC,GAxCIqC,GAAKC,EAAO3W,KAAK,MACrBqU,EAAMN,SAAWU,EACbA,IAAYA,EAAWhI,KAAO4H,GAClCI,EAAaJ,EACbG,EAAUqC,WAAWxC,EAAMtV,OAC3ByV,EAAUsC,MAAMH,GAmCZhC,EAAKT,OAAOgC,KAAK7B,EAAMtV,MAAMC,MAAO,CAEtC,IADA,IAAI+H,EAAQyN,EAAUa,OAAO7X,OACtBuJ,KACL,GAEEyN,EAAUa,OAAOtO,GAAO,GAAGhI,MAAMqX,OAAS1B,KAExCF,EAAUa,OAAOtO,GAAO,GAAG1H,KAE3BmV,EAAUa,OAAOtO,GAAO,GAAG1H,IAAI+W,OAAS1B,GAI1C,OAcJ,IARA,IAGIqC,EAEAjQ,EALEsO,EAAmBT,EAAKU,OAAO7X,OACjC8X,EAAkBF,EAOfE,KACL,GACsC,SAApCX,EAAKU,OAAOC,GAAiB,IACY,cAAzCX,EAAKU,OAAOC,GAAiB,GAAG3U,KAChC,CACA,GAAIoW,EAAM,CACRjQ,EAAQ6N,EAAKU,OAAOC,GAAiB,GAAGjW,IACxC,KACF,CACA0X,GAAO,CACT,CAMF,IAJAxB,EAAeX,GAGf7N,EAAQqO,EACDrO,EAAQ4N,EAAKU,OAAO7X,QACzBmX,EAAKU,OAAOtO,GAAO,GAAG1H,IAAMlE,OAAO+T,OAAO,CAAC,EAAGpI,GAC9CC,IAIFuK,GACEqD,EAAKU,OACLC,EAAkB,EAClB,EACAX,EAAKU,OAAOjV,MAAMgV,IAIpBT,EAAKU,OAAO7X,OAASuJ,CACvB,CACF,CAMA,SAASwO,EAAe9B,GAItB,IAHA,IAAI1M,EAAQS,EAAMhK,OAGXuJ,KAAU0M,GAAM,CACrB,IAAMlE,EAAQ/H,EAAMT,GACpB4N,EAAKG,eAAiBvF,EAAM,GAC5BA,EAAM,GAAGsE,KAAK/X,KAAK6Y,EAAMtB,EAC3B,CACA7L,EAAMhK,OAASiW,CACjB,CACA,SAAS0B,IACPX,EAAUsC,MAAM,CAAC,OACjBrC,OAAanN,EACbkN,OAAYlN,EACZqN,EAAKG,eAAeI,gBAAa5N,CACnC,CACF,GArVMyO,GAAqB,CACzBjC,SA0VF,SAA2BT,EAASC,EAAI0D,GAGtC,OAAO5D,GACLC,EACAA,EAAQY,QAAQ7U,KAAK8U,OAAOjC,WAAWsC,SAAUjB,EAAI0D,GACrD,aACA5X,KAAK8U,OAAOjC,WAAWgF,QAAQC,KAAK5L,SAAS,qBAAkBhE,EAAY,EAE/E,GCnXO,IAAM6P,GAAY,CACvBrD,SAQF,SAA2BT,EAASC,EAAI0D,GACtC,OAgBA,SAAelO,GACb,OAAOgK,GAAchK,GACjBsK,GAAaC,EAAS+D,EAAO,aAA7BhE,CAA2CtK,GAC3CsO,EAAMtO,EACZ,EAgBA,SAASsO,EAAMtO,GACb,OAAgB,OAATA,GAAiB8J,GAAmB9J,GAAQwK,EAAGxK,GAAQkO,EAAIlO,EACpE,CACF,EA/CEuO,SAAS,GCGJ,SAASC,GAAYjC,GAkB1B,IAhBA,IAGIkC,EAEAC,EAEAC,EAEAC,EAEAzK,EAEA0K,EAEAC,EAfEC,EAAQ,CAAC,EACX9Q,GAAS,IAeJA,EAAQsO,EAAO7X,QAAQ,CAC9B,KAAOuJ,KAAS8Q,GACd9Q,EAAQ8Q,EAAM9Q,GAMhB,GAJAwQ,EAAQlC,EAAOtO,GAKbA,GACkB,cAAlBwQ,EAAM,GAAG5W,MACqB,mBAA9B0U,EAAOtO,EAAQ,GAAG,GAAGpG,QAGrB8W,EAAa,IADbE,EAAYJ,EAAM,GAAGhB,WAAWlB,QAGP7X,QACW,oBAAlCma,EAAUF,GAAY,GAAG9W,OAEzB8W,GAAc,GAGdA,EAAaE,EAAUna,QACW,YAAlCma,EAAUF,GAAY,GAAG9W,MAEzB,OAAS8W,EAAaE,EAAUna,QACQ,YAAlCma,EAAUF,GAAY,GAAG9W,MAGS,cAAlCgX,EAAUF,GAAY,GAAG9W,OAC3BgX,EAAUF,GAAY,GAAGK,6BAA8B,EACvDL,KAOR,GAAiB,UAAbF,EAAM,GACJA,EAAM,GAAGjD,cACXnZ,OAAO+T,OAAO2I,EAAOE,GAAW1C,EAAQtO,IACxCA,EAAQ8Q,EAAM9Q,GACd6Q,GAAO,QAIN,GAAIL,EAAM,GAAGS,WAAY,CAG5B,IAFAP,EAAa1Q,EACbyQ,OAAYlQ,EACLmQ,MAGoB,gBAFzBC,EAAarC,EAAOoC,IAEP,GAAG9W,MACS,oBAAvB+W,EAAW,GAAG/W,OAEQ,UAAlB+W,EAAW,KACTF,IACFnC,EAAOmC,GAAW,GAAG7W,KAAO,mBAE9B+W,EAAW,GAAG/W,KAAO,aACrB6W,EAAYC,GAMdD,IAEFD,EAAM,GAAGlY,IAAMlE,OAAO+T,OAAO,CAAC,EAAGmG,EAAOmC,GAAW,GAAGzY,QAGtDkO,EAAaoI,EAAOjV,MAAMoX,EAAWzQ,IAC1B4K,QAAQ4F,GACnBjG,GAAO+D,EAAQmC,EAAWzQ,EAAQyQ,EAAY,EAAGvK,GAErD,CACF,CACA,OAAQ2K,CACV,CASA,SAASG,GAAW1C,EAAQ4C,GA0B1B,IAzBA,IAaItB,EAEA5C,EAfEM,EAAQgB,EAAO4C,GAAY,GAC3BC,EAAU7C,EAAO4C,GAAY,GAC/BE,EAAgBF,EAAa,EAE3BG,EAAiB,GACjBC,EACJhE,EAAMkC,YAAc2B,EAAQhE,OAAOG,EAAMC,aAAaD,EAAMtV,OACxDuZ,EAAcD,EAAUhD,OAExBwC,EAAQ,GAERU,EAAO,CAAC,EAKVxR,GAAS,EAETyR,EAAUnE,EACVoE,EAAS,EACT1Z,EAAQ,EACN2Z,EAAS,CAAC3Z,GAITyZ,GAAS,CAEd,KAAOnD,IAAS8C,GAAe,KAAOK,IAGtCJ,EAAepY,KAAKmY,GACfK,EAAQjC,aACXI,EAASuB,EAAQtB,YAAY4B,GACxBA,EAAQ/L,MACXkK,EAAO3W,KAAK,MAEV+T,GACFsE,EAAUxB,WAAW2B,EAAQzZ,OAE3ByZ,EAAQV,8BACVO,EAAUM,oCAAqC,GAEjDN,EAAUvB,MAAMH,GACZ6B,EAAQV,8BACVO,EAAUM,wCAAqCrR,IAKnDyM,EAAWyE,EACXA,EAAUA,EAAQ/L,IACpB,CAKA,IADA+L,EAAUnE,IACDtN,EAAQuR,EAAY9a,QAGC,SAA1B8a,EAAYvR,GAAO,IACW,UAA9BuR,EAAYvR,EAAQ,GAAG,IACvBuR,EAAYvR,GAAO,GAAGpG,OAAS2X,EAAYvR,EAAQ,GAAG,GAAGpG,MACzD2X,EAAYvR,GAAO,GAAGhI,MAAMC,OAASsZ,EAAYvR,GAAO,GAAG1H,IAAIL,OAE/DD,EAAQgI,EAAQ,EAChB2R,EAAO1Y,KAAKjB,GAEZyZ,EAAQjC,gBAAajP,EACrBkR,EAAQzE,cAAWzM,EACnBkR,EAAUA,EAAQ/L,MAqBtB,IAhBA4L,EAAUhD,OAAS,GAKfmD,GAEFA,EAAQjC,gBAAajP,EACrBkR,EAAQzE,cAAWzM,GAEnBoR,EAAOlM,MAKTzF,EAAQ2R,EAAOlb,OACRuJ,KAAS,CACd,IAAM3G,EAAQkY,EAAYlY,MAAMsY,EAAO3R,GAAQ2R,EAAO3R,EAAQ,IACxDhI,EAAQqZ,EAAe5L,MAC7BqL,EAAMlG,QAAQ,CAAC5S,EAAOA,EAAQqB,EAAM5C,OAAS,IAC7C8T,GAAO+D,EAAQtW,EAAO,EAAGqB,EAC3B,CAEA,IADA2G,GAAS,IACAA,EAAQ8Q,EAAMra,QACrB+a,EAAKE,EAASZ,EAAM9Q,GAAO,IAAM0R,EAASZ,EAAM9Q,GAAO,GACvD0R,GAAUZ,EAAM9Q,GAAO,GAAK8Q,EAAM9Q,GAAO,GAAK,EAEhD,OAAOwR,CACT,CC/MO,IAAMhZ,GAAU,CACrBuU,SAyBF,SAAyBT,EAASC,GAEhC,IAAIS,EACJ,OAYA,SAAoBjL,GAKlB,OAJAuK,EAAQK,MAAM,WACdK,EAAWV,EAAQK,MAAM,eAAgB,CACvCY,YAAa,YAERsE,EAAY9P,EACrB,EAYA,SAAS8P,EAAY9P,GACnB,OAAa,OAATA,EACK+P,EAAW/P,GAKhB8J,GAAmB9J,GACduK,EAAQyC,MACbgD,GACAC,EACAF,EAHKxF,CAILvK,IAIJuK,EAAQO,QAAQ9K,GACT8P,EACT,CAOA,SAASC,EAAW/P,GAGlB,OAFAuK,EAAQQ,KAAK,gBACbR,EAAQQ,KAAK,WACNP,EAAGxK,EACZ,CAOA,SAASiQ,EAAgBjQ,GAQvB,OAPAuK,EAAQO,QAAQ9K,GAChBuK,EAAQQ,KAAK,gBACbE,EAAStH,KAAO4G,EAAQK,MAAM,eAAgB,CAC5CY,YAAa,UACbP,SAAAA,IAEFA,EAAWA,EAAStH,KACbmM,CACT,CACF,EAvGEzI,QAeF,SAAwBkF,GAEtB,OADAiC,GAAYjC,GACLA,CACT,GAdMyD,GAAwB,CAC5BhF,SAwGF,SAA8BT,EAASC,EAAI0D,GACzC,IAAMrC,EAAOvV,KACb,OAOA,SAAwB0J,GAKtB,OAJAuK,EAAQQ,KAAK,gBACbR,EAAQK,MAAM,cACdL,EAAQO,QAAQ9K,GAChBuK,EAAQQ,KAAK,cACNT,GAAaC,EAAS2F,EAAU,aACzC,EAOA,SAASA,EAASlQ,GAChB,GAAa,OAATA,GAAiB8J,GAAmB9J,GACtC,OAAOkO,EAAIlO,GAKb,IAAMmQ,EAAOtE,EAAKU,OAAOV,EAAKU,OAAO7X,OAAS,GAC9C,OACGmX,EAAKT,OAAOjC,WAAWgF,QAAQC,KAAK5L,SAAS,iBAC9C2N,GACiB,eAAjBA,EAAK,GAAGtY,MACRsY,EAAK,GAAGC,eAAeD,EAAK,IAAI,GAAMzb,QAAU,EAEzC8V,EAAGxK,GAELuK,EAAQuC,UAAUjB,EAAKT,OAAOjC,WAAWqE,KAAMU,EAAK1D,EAApDD,CAAwDvK,EACjE,CACF,EA/IEuO,SAAS,GCbJ,IAAMf,GAAO,CAClBxC,SAOF,SAAwBT,GACtB,IAAMsB,EAAOvV,KACP+Z,EAAU9F,EAAQY,QAEtBkD,IAoBF,SAAuBrO,GACrB,GAAa,OAATA,EAEF,YADAuK,EAAQO,QAAQ9K,GAOlB,OAJAuK,EAAQK,MAAM,mBACdL,EAAQO,QAAQ9K,GAChBuK,EAAQQ,KAAK,mBACbc,EAAKc,sBAAmBnO,EACjB6R,CACT,GA3BE9F,EAAQY,QACN7U,KAAK8U,OAAOjC,WAAWmH,YACvBC,EACAjG,GACEC,EACAA,EAAQY,QACN7U,KAAK8U,OAAOjC,WAAWqE,KACvB+C,EACAhG,EAAQY,QAAQ1U,GAAS8Z,IAE3B,gBAIN,OAAOF,EAgBP,SAASE,EAAevQ,GACtB,GAAa,OAATA,EAQJ,OAJAuK,EAAQK,MAAM,cACdL,EAAQO,QAAQ9K,GAChBuK,EAAQQ,KAAK,cACbc,EAAKc,sBAAmBnO,EACjB6R,EAPL9F,EAAQO,QAAQ9K,EAQpB,CACF,GC1DO,IAAMwQ,GAAW,CACtBC,WAAYC,MAEDC,GAASC,GAAkB,UAC3BC,GAAOD,GAAkB,QAMtC,SAASA,GAAkBE,GACzB,MAAO,CACL9F,SAUF,SAAwBT,GACtB,IAAMsB,EAAOvV,KACP6S,EAAa7S,KAAK8U,OAAOjC,WAAW2H,GACpCD,EAAOtG,EAAQY,QAAQhC,EAAYlT,EAAO8a,GAChD,OAAO9a,EAGP,SAASA,EAAM+J,GACb,OAAOgR,EAAQhR,GAAQ6Q,EAAK7Q,GAAQ+Q,EAAQ/Q,EAC9C,CAGA,SAAS+Q,EAAQ/Q,GACf,GAAa,OAATA,EAMJ,OAFAuK,EAAQK,MAAM,QACdL,EAAQO,QAAQ9K,GACTmC,EALLoI,EAAQO,QAAQ9K,EAMpB,CAGA,SAASmC,EAAKnC,GACZ,OAAIgR,EAAQhR,IACVuK,EAAQQ,KAAK,QACN8F,EAAK7Q,KAIduK,EAAQO,QAAQ9K,GACTmC,EACT,CAMA,SAAS6O,EAAQhR,GACf,GAAa,OAATA,EACF,OAAO,EAET,IAAMyI,EAAOU,EAAWnJ,GACpB/B,GAAS,EACb,GAAIwK,EAGF,OAASxK,EAAQwK,EAAK/T,QAAQ,CAC5B,IAAMqX,EAAOtD,EAAKxK,GAClB,IAAK8N,EAAKd,UAAYc,EAAKd,SAASjY,KAAK6Y,EAAMA,EAAKZ,UAClD,OAAO,CAEX,CAEF,OAAO,CACT,CACF,EAjEEwF,WAAYC,GACA,SAAVI,EAAmBG,QAAyBzS,GAiElD,CAMA,SAASkS,GAAeQ,GACtB,OAGA,SAAwB3E,EAAQ6C,GAC9B,IAEIxE,EAFA3M,GAAS,EAMb,OAASA,GAASsO,EAAO7X,aACT8J,IAAVoM,EACE2B,EAAOtO,IAAoC,SAA1BsO,EAAOtO,GAAO,GAAGpG,OACpC+S,EAAQ3M,EACRA,KAEQsO,EAAOtO,IAAoC,SAA1BsO,EAAOtO,GAAO,GAAGpG,OAExCoG,IAAU2M,EAAQ,IACpB2B,EAAO3B,GAAO,GAAGrU,IAAMgW,EAAOtO,EAAQ,GAAG,GAAG1H,IAC5CgW,EAAO/D,OAAOoC,EAAQ,EAAG3M,EAAQ2M,EAAQ,GACzC3M,EAAQ2M,EAAQ,GAElBA,OAAQpM,GAGZ,OAAO0S,EAAgBA,EAAc3E,EAAQ6C,GAAW7C,CAC1D,CACF,CAaA,SAAS0E,GAAuB1E,EAAQ6C,GAGtC,IAFA,IAAID,EAAa,IAERA,GAAc5C,EAAO7X,QAC5B,IACGya,IAAe5C,EAAO7X,QACU,eAA/B6X,EAAO4C,GAAY,GAAGtX,OACW,SAAnC0U,EAAO4C,EAAa,GAAG,GAAGtX,KAC1B,CAQA,IAPA,IAAMsK,EAAOoK,EAAO4C,EAAa,GAAG,GAC9BgC,EAAS/B,EAAQtB,YAAY3L,GAC/BlE,EAAQkT,EAAOzc,OACf0c,GAAe,EACfzG,EAAO,EAEP0G,OAAI,EACDpT,KAAS,CACd,IAAMqT,EAAQH,EAAOlT,GACrB,GAAqB,kBAAVqT,EAAoB,CAE7B,IADAF,EAAcE,EAAM5c,OACyB,KAAtC4c,EAAM/R,WAAW6R,EAAc,IACpCzG,IACAyG,IAEF,GAAIA,EAAa,MACjBA,GAAe,CACjB,MAEK,IAAe,IAAXE,EACPD,GAAO,EACP1G,SACK,IAAe,IAAX2G,EAEJ,CAELrT,IACA,KACF,CACF,CACA,GAAI0M,EAAM,CACR,IAAMY,EAAQ,CACZ1T,KACEsX,IAAe5C,EAAO7X,QAAU2c,GAAQ1G,EAAO,EAC3C,aACA,oBACN1U,MAAO,CACLC,KAAMiM,EAAK5L,IAAIL,KACfP,OAAQwM,EAAK5L,IAAIZ,OAASgV,EAC1B2C,OAAQnL,EAAK5L,IAAI+W,OAAS3C,EAC1B4G,OAAQpP,EAAKlM,MAAMsb,OAAStT,EAC5BuT,aAAcvT,EACVmT,EACAjP,EAAKlM,MAAMub,aAAeJ,GAEhC7a,IAAKlE,OAAO+T,OAAO,CAAC,EAAGjE,EAAK5L,MAE9B4L,EAAK5L,IAAMlE,OAAO+T,OAAO,CAAC,EAAGmF,EAAMtV,OAC/BkM,EAAKlM,MAAMqX,SAAWnL,EAAK5L,IAAI+W,OACjCjb,OAAO+T,OAAOjE,EAAMoJ,IAEpBgB,EAAO/D,OACL2G,EACA,EACA,CAAC,QAAS5D,EAAO6D,GACjB,CAAC,OAAQ7D,EAAO6D,IAElBD,GAAc,EAElB,CACAA,GACF,CAEF,OAAO5C,CACT,CC/LO,SAASkE,GAAWtH,EAAYoD,EAAQ6C,GAK7C,IAHA,IAAMpL,EAAS,GACX/F,GAAS,IAEJA,EAAQkL,EAAWzU,QAAQ,CAClC,IAAM2S,EAAU8B,EAAWlL,GAAOwS,WAE9BpJ,IAAYrD,EAAOxB,SAAS6E,KAC9BkF,EAASlF,EAAQkF,EAAQ6C,GACzBpL,EAAO9M,KAAKmQ,GAEhB,CAEA,OAAOkF,CACT,CCcO,SAASkF,GAAgBrG,EAAQsG,EAAYvV,GAElD,IAAI6B,EAAQ3L,OAAO+T,OACjBjK,EACI9J,OAAO+T,OAAO,CAAC,EAAGjK,GAClB,CACEjG,KAAM,EACNP,OAAQ,EACR2X,OAAQ,GAEd,CACEiE,OAAQ,EACRC,cAAe,IAIbG,EAAc,CAAC,EAEfC,EAAuB,GAEzBT,EAAS,GAETzS,EAAQ,GASN6L,EAAU,CACdO,QAkJF,SAAiB9K,GACX8J,GAAmB9J,IACrBhC,EAAM9H,OACN8H,EAAMrI,OAAS,EACfqI,EAAMsP,SAAoB,IAAVtN,EAAc,EAAI,EAClC6R,MACmB,IAAV7R,IACThC,EAAMrI,SACNqI,EAAMsP,UAIJtP,EAAMwT,aAAe,EACvBxT,EAAMuT,UAENvT,EAAMwT,eAKFxT,EAAMwT,eAAiBL,EAAOnT,EAAMuT,QAAQ7c,SAC9CsJ,EAAMwT,cAAgB,EACtBxT,EAAMuT,WAKVnC,EAAQnE,SAAWjL,CAIrB,EAhLE4K,MAmLF,SAAe/S,EAAMia,GAGnB,IAAMvG,EAAQuG,GAAU,CAAC,EAKzB,OAJAvG,EAAM1T,KAAOA,EACb0T,EAAMtV,MAAQoX,IACd+B,EAAQ7C,OAAOrV,KAAK,CAAC,QAASqU,EAAO6D,IACrC1Q,EAAMxH,KAAKqU,GACJA,CACT,EA3LER,KA8LF,SAAclT,GACZ,IAAM0T,EAAQ7M,EAAMgF,MAGpB,OAFA6H,EAAMhV,IAAM8W,IACZ+B,EAAQ7C,OAAOrV,KAAK,CAAC,OAAQqU,EAAO6D,IAC7B7D,CACT,EAlMEJ,QAAS4G,GAyMX,SAA+B9U,EAAW+U,GACxCC,EAAUhV,EAAW+U,EAAK7V,KAC5B,IA1ME6Q,MAAO+E,EAAiBG,GACxBpF,UAAWiF,EAAiBG,EAAmB,CAC7CpF,WAAW,KASTsC,EAAU,CACdnE,SAAU,KACVjL,KAAM,KACNgM,eAAgB,CAAC,EACjBO,OAAQ,GACRnB,OAAAA,EACA0C,YAAAA,EACAsC,eA6CF,SAAwB7E,EAAO4G,GAC7B,OAsYJ,SAAyBhB,EAAQgB,GAC/B,IAIIC,EAJAnU,GAAS,EAEPwC,EAAS,GAGf,OAASxC,EAAQkT,EAAOzc,QAAQ,CAC9B,IAAM4c,EAAQH,EAAOlT,GAEjBpK,OAAK,EACT,GAAqB,kBAAVyd,EACTzd,EAAQyd,OAER,OAAQA,GACN,KAAM,EACJzd,EAAQ,KACR,MAEF,KAAM,EACJA,EAAQ,KACR,MAEF,KAAM,EACJA,EAAQ,OACR,MAEF,KAAM,EACJA,EAAQse,EAAa,IAAM,KAC3B,MAEF,KAAM,EACJ,IAAKA,GAAcC,EAAO,SAC1Bve,EAAQ,IACR,MAEF,QAEEA,EAAQkT,OAAOsD,aAAaiH,GAGlCc,GAAmB,IAAXd,EACR7Q,EAAOvJ,KAAKrD,EACd,CACA,OAAO4M,EAAOR,KAAK,GACrB,CAlbWoS,CAAgBvE,EAAYvC,GAAQ4G,EAC7C,EA9CE9E,IAAAA,EACAU,WAkEF,SAAoBla,GAClB8d,EAAY9d,EAAMqC,MAAQrC,EAAM8B,OAChCkc,GACF,EApEE7D,MAsBF,SAAe1W,GAKb,GAJA6Z,EAASja,GAAKia,EAAQ7Z,GACtBgb,IAGkC,OAA9BnB,EAAOA,EAAOzc,OAAS,GACzB,MAAO,GAMT,OAJAud,EAAUP,EAAY,GAGtBtC,EAAQ7C,OAASkE,GAAWmB,EAAsBxC,EAAQ7C,OAAQ6C,GAC3DA,EAAQ7C,MACjB,GA3BIgG,EAAQb,EAAW1G,SAAShY,KAAKoc,EAAS7E,GAW9C,OAHImH,EAAWjB,YACbmB,EAAqB1a,KAAKwa,GAErBtC,EA4BP,SAAStB,EAAYvC,GACnB,OA8VJ,SAAqB4F,EAAQ5F,GAC3B,IAKIiH,EALEC,EAAalH,EAAMtV,MAAMsb,OACzBmB,EAAmBnH,EAAMtV,MAAMub,aAC/BmB,EAAWpH,EAAMhV,IAAIgb,OACrBqB,EAAiBrH,EAAMhV,IAAIib,aAGjC,GAAIiB,IAAeE,EAEjBH,EAAO,CAACrB,EAAOsB,GAAYnb,MAAMob,EAAkBE,QAC9C,CAEL,GADAJ,EAAOrB,EAAO7Z,MAAMmb,EAAYE,GAC5BD,GAAoB,EAAG,CACzB,IAAMG,EAAOL,EAAK,GACE,kBAATK,EACTL,EAAK,GAAKK,EAAKvb,MAAMob,GAErBF,EAAKM,OAET,CACIF,EAAiB,GAEnBJ,EAAKtb,KAAKia,EAAOwB,GAAUrb,MAAM,EAAGsb,GAExC,CACA,OAAOJ,CACT,CAxXWO,CAAY5B,EAAQ5F,EAC7B,CAGA,SAAS8B,IAEP,IAAA2F,EAAqDhV,EACrD,MAAO,CACL9H,KAFS8c,EAAJ9c,KAGLP,OAHiBqd,EAANrd,OAIX2X,OAJyB0F,EAAN1F,OAKnBiE,OALiCyB,EAANzB,OAM3BC,aAN+CwB,EAAZxB,aAQvC,CAsBA,SAASc,IAGP,IADA,IAAIW,EACGjV,EAAMuT,OAASJ,EAAOzc,QAAQ,CACnC,IAAM4c,EAAQH,EAAOnT,EAAMuT,QAG3B,GAAqB,kBAAVD,EAKT,IAJA2B,EAAajV,EAAMuT,OACfvT,EAAMwT,aAAe,IACvBxT,EAAMwT,aAAe,GAGrBxT,EAAMuT,SAAW0B,GACjBjV,EAAMwT,aAAeF,EAAM5c,QAE3Bwe,EAAG5B,EAAM/R,WAAWvB,EAAMwT,oBAG5B0B,EAAG5B,EAEP,CACF,CAQA,SAAS4B,EAAGlT,GAGVuS,EAAQA,EAAMvS,EAChB,CAsEA,SAASkS,EAAkBiB,EAAGnB,GAC5BA,EAAKoB,SACP,CAQA,SAASrB,EAAiBsB,EAAUvB,GAClC,OAWA,SAAc3I,EAAYmK,EAAaC,GAErC,IAAIC,EAEAC,EAEA9G,EAEAqF,EACJ,OAAOjf,MAAMF,QAAQsW,GACjBuK,EAAuBvK,GACvB,aAAcA,EAEduK,EAAuB,CAACvK,IAS5B,SAA+B5G,GAC7B,OAAOtM,EAGP,SAASA,EAAM+J,GACb,IAAM2T,EAAe,OAAT3T,GAAiBuC,EAAIvC,GAC3BsI,EAAe,OAATtI,GAAiBuC,EAAI6L,KAOjC,OAAOsF,EANM,GAAHhP,QAAAtI,EAAAA,EAAAA,GAGJrJ,MAAMF,QAAQ8gB,GAAOA,EAAMA,EAAM,CAACA,GAAO,KAAEvX,EAAAA,EAAAA,GAC3CrJ,MAAMF,QAAQyV,GAAOA,EAAMA,EAAM,CAACA,GAAO,KAExCoL,CAA6B1T,EACtC,CACF,CAvBI4T,CAAsBzK,GA+B1B,SAASuK,EAAuBjL,GAG9B,OAFA+K,EAAmB/K,EACnBgL,EAAiB,EACG,IAAhBhL,EAAK/T,OACA6e,EAEFM,EAAgBpL,EAAKgL,GAC9B,CAQA,SAASI,EAAgB5W,GACvB,OAGA,SAAe+C,GAKbgS,EAwER,WACE,IAAM8B,EAAazG,IACb0G,EAAgB3E,EAAQnE,SACxB+I,EAAwB5E,EAAQzC,iBAChCsH,EAAmB7E,EAAQ7C,OAAO7X,OAClCwf,EAAanhB,MAAMoJ,KAAKuC,GAC9B,MAAO,CACL0U,QAAAA,EACAjX,KAAM8X,GAQR,SAASb,IACPpV,EAAQ8V,EACR1E,EAAQnE,SAAW8I,EACnB3E,EAAQzC,iBAAmBqH,EAC3B5E,EAAQ7C,OAAO7X,OAASuf,EACxBvV,EAAQwV,EACRrC,GACF,CACF,CAhGesC,GACPxH,EAAmB1P,EACdA,EAAUsR,UACba,EAAQzC,iBAAmB1P,GAK7B,GACEA,EAAUvJ,MACV0b,EAAQhE,OAAOjC,WAAWgF,QAAQC,KAAK5L,SAASvF,EAAUvJ,MAE1D,OAAOwa,EAAIlO,GAEb,OAAO/C,EAAU+N,SAAShY,KAIxB8e,EAASzf,OAAO+T,OAAO/T,OAAOiL,OAAO8R,GAAU0C,GAAU1C,EACzD7E,EACAC,EACA0D,EAPKjR,CAQL+C,EACJ,CACF,CAGA,SAASwK,EAAGxK,GAGV,OADAqT,EAAS1G,EAAkBqF,GACpBsB,CACT,CAGA,SAASpF,EAAIlO,GAGX,OADAgS,EAAKoB,YACCK,EAAiBD,EAAiB9e,OAC/Bmf,EAAgBL,EAAiBC,IAEnCF,CACT,CACF,CACF,CAOA,SAAStB,EAAUhV,EAAWd,GACxBc,EAAUwT,aAAemB,EAAqBpP,SAASvF,IACzD2U,EAAqB1a,KAAK+F,GAExBA,EAAUoK,SACZmB,GACE4G,EAAQ7C,OACRpQ,EACAiT,EAAQ7C,OAAO7X,OAASyH,EACxBc,EAAUoK,QAAQ+H,EAAQ7C,OAAOjV,MAAM6E,GAAOiT,IAG9CnS,EAAUmX,YACZhF,EAAQ7C,OAAStP,EAAUmX,UAAUhF,EAAQ7C,OAAQ6C,GAEzD,CAuCA,SAASyC,IACH7T,EAAM9H,QAAQyb,GAAe3T,EAAMrI,OAAS,IAC9CqI,EAAMrI,OAASgc,EAAY3T,EAAM9H,MACjC8H,EAAMsP,QAAUqE,EAAY3T,EAAM9H,MAAQ,EAE9C,CACF,iBCleame,GAAgB,CAC3B3gB,KAAM,gBACNsX,SAOF,SAA+BT,EAASC,EAAI0D,GAC1C,IAEIoG,EAFA3J,EAAO,EAGX,OAYA,SAAe3K,GAGb,OAFAuK,EAAQK,MAAM,iBAehB,SAAgB5K,GAEd,OADAsU,EAAStU,EACFgR,EAAQhR,EACjB,CAhBSqJ,CAAOrJ,EAChB,EA2BA,SAASgR,EAAQhR,GACf,OAAIA,IAASsU,GACX/J,EAAQK,MAAM,yBACP2J,EAASvU,IAEd2K,GAAQ,IAAe,OAAT3K,GAAiB8J,GAAmB9J,KACpDuK,EAAQQ,KAAK,iBACNP,EAAGxK,IAELkO,EAAIlO,EACb,CAYA,SAASuU,EAASvU,GAChB,OAAIA,IAASsU,GACX/J,EAAQO,QAAQ9K,GAChB2K,IACO4J,IAEThK,EAAQQ,KAAK,yBACNf,GAAchK,GACjBsK,GAAaC,EAASyG,EAAS,aAA/B1G,CAA6CtK,GAC7CgR,EAAQhR,GACd,CACF,GCpFO,IAAMyI,GAAO,CAClB/U,KAAM,OACNsX,SA0BF,SAA2BT,EAASC,EAAI0D,GACtC,IAAMrC,EAAOvV,KACP6Z,EAAOtE,EAAKU,OAAOV,EAAKU,OAAO7X,OAAS,GAC1C8f,EACFrE,GAAyB,eAAjBA,EAAK,GAAGtY,KACZsY,EAAK,GAAGC,eAAeD,EAAK,IAAI,GAAMzb,OACtC,EACFiW,EAAO,EACX,OAGA,SAAe3K,GACb,IAAMyU,EACJ5I,EAAKG,eAAenU,OACV,KAATmI,GAAwB,KAATA,GAAwB,KAATA,EAC3B,gBACA,eACN,GACW,kBAATyU,GACK5I,EAAKG,eAAesI,QAAUtU,IAAS6L,EAAKG,eAAesI,OAC5D3K,GAAW3J,GACf,CAOA,GANK6L,EAAKG,eAAenU,OACvBgU,EAAKG,eAAenU,KAAO4c,EAC3BlK,EAAQK,MAAM6J,EAAM,CAClBvF,YAAY,KAGH,kBAATuF,EAEF,OADAlK,EAAQK,MAAM,kBACE,KAAT5K,GAAwB,KAATA,EAClBuK,EAAQyC,MAAMqH,GAAenG,EAAKwG,EAAlCnK,CAA4CvK,GAC5C0U,EAAS1U,GAEf,IAAK6L,EAAKiB,WAAsB,KAAT9M,EAGrB,OAFAuK,EAAQK,MAAM,kBACdL,EAAQK,MAAM,iBACP+J,EAAO3U,EAElB,CACA,OAAOkO,EAAIlO,EACb,EAGA,SAAS2U,EAAO3U,GACd,OAAI2J,GAAW3J,MAAW2K,EAAO,IAC/BJ,EAAQO,QAAQ9K,GACT2U,KAGL9I,EAAKiB,WAAanC,EAAO,KAC1BkB,EAAKG,eAAesI,OACjBtU,IAAS6L,EAAKG,eAAesI,OACpB,KAATtU,GAAwB,KAATA,IAEnBuK,EAAQQ,KAAK,iBACN2J,EAAS1U,IAEXkO,EAAIlO,EACb,CAKA,SAAS0U,EAAS1U,GAKhB,OAJAuK,EAAQK,MAAM,kBACdL,EAAQO,QAAQ9K,GAChBuK,EAAQQ,KAAK,kBACbc,EAAKG,eAAesI,OAASzI,EAAKG,eAAesI,QAAUtU,EACpDuK,EAAQyC,MACbqB,GAEAxC,EAAKiB,UAAYoB,EAAM0G,EACvBrK,EAAQY,QACN0J,GACAC,EACAC,GAGN,CAGA,SAASH,EAAQ5U,GAGf,OAFA6L,EAAKG,eAAegJ,kBAAmB,EACvCR,IACOM,EAAY9U,EACrB,CAGA,SAAS+U,EAAY/U,GACnB,OAAIgK,GAAchK,IAChBuK,EAAQK,MAAM,4BACdL,EAAQO,QAAQ9K,GAChBuK,EAAQQ,KAAK,4BACN+J,GAEF5G,EAAIlO,EACb,CAGA,SAAS8U,EAAY9U,GAInB,OAHA6L,EAAKG,eAAerB,KAClB6J,EACA3I,EAAKuE,eAAe7F,EAAQQ,KAAK,mBAAmB,GAAMrW,OACrD8V,EAAGxK,EACZ,CACF,EAnIEiM,aAAc,CACZjB,SAwIJ,SAAkCT,EAASC,EAAI0D,GAC7C,IAAMrC,EAAOvV,KAEb,OADAuV,EAAKG,eAAeI,gBAAa5N,EAC1B+L,EAAQyC,MAAMqB,GAAWuG,EAASK,GAGzC,SAASL,EAAQ5U,GAOf,OANA6L,EAAKG,eAAekJ,kBAClBrJ,EAAKG,eAAekJ,mBACpBrJ,EAAKG,eAAegJ,iBAIf1K,GACLC,EACAC,EACA,iBACAqB,EAAKG,eAAerB,KAAO,EAJtBL,CAKLtK,EACJ,CAGA,SAASiV,EAASjV,GAChB,OAAI6L,EAAKG,eAAekJ,oBAAsBlL,GAAchK,IAC1D6L,EAAKG,eAAekJ,uBAAoB1W,EACxCqN,EAAKG,eAAegJ,sBAAmBxW,EAChC2W,EAAiBnV,KAE1B6L,EAAKG,eAAekJ,uBAAoB1W,EACxCqN,EAAKG,eAAegJ,sBAAmBxW,EAChC+L,EAAQY,QAAQiK,GAAiB5K,EAAI2K,EAArC5K,CAAuDvK,GAChE,CAGA,SAASmV,EAAiBnV,GAOxB,OALA6L,EAAKG,eAAeI,YAAa,EAEjCP,EAAKiB,eAAYtO,EAGV8L,GACLC,EACAA,EAAQY,QAAQ1C,GAAM+B,EAAI0D,GAC1B,aACArC,EAAKT,OAAOjC,WAAWgF,QAAQC,KAAK5L,SAAS,qBACzChE,EACA,EANC8L,CAOLtK,EACJ,CACF,GAxLE+K,KAsNF,SAAyBR,GACvBA,EAAQQ,KAAKzU,KAAK0V,eAAenU,KACnC,GApNMgd,GAAoC,CACxC7J,SAyNF,SAA0CT,EAASC,EAAI0D,GACrD,IAAMrC,EAAOvV,KAIb,OAAOgU,GACLC,GASF,SAAqBvK,GACnB,IAAMmQ,EAAOtE,EAAKU,OAAOV,EAAKU,OAAO7X,OAAS,GAC9C,OAAQsV,GAAchK,IACpBmQ,GACiB,6BAAjBA,EAAK,GAAGtY,KACN2S,EAAGxK,GACHkO,EAAIlO,EACV,GAdE,2BACA6L,EAAKT,OAAOjC,WAAWgF,QAAQC,KAAK5L,SAAS,qBACzChE,EACA,EAYR,EA/OE+P,SAAS,GAIL6G,GAAkB,CACtBpK,SAmLF,SAAwBT,EAASC,EAAI0D,GACnC,IAAMrC,EAAOvV,KACb,OAAOgU,GACLC,GAOF,SAAqBvK,GACnB,IAAMmQ,EAAOtE,EAAKU,OAAOV,EAAKU,OAAO7X,OAAS,GAC9C,OAAOyb,GACY,mBAAjBA,EAAK,GAAGtY,MACRsY,EAAK,GAAGC,eAAeD,EAAK,IAAI,GAAMzb,SAAWmX,EAAKG,eAAerB,KACnEH,EAAGxK,GACHkO,EAAIlO,EACV,GAZE,iBACA6L,EAAKG,eAAerB,KAAO,EAY/B,EApME4D,SAAS,GCvBJ,IAAM8G,GAAa,CACxB3hB,KAAM,aACNsX,SAWF,SAAiCT,EAASC,EAAI0D,GAC5C,IAAMrC,EAAOvV,KACb,OAYA,SAAe0J,GACb,GAAa,KAATA,EAAa,CACf,IAAMuS,EAAQ1G,EAAKG,eAWnB,OAVKuG,EAAM+C,OACT/K,EAAQK,MAAM,aAAc,CAC1BsE,YAAY,IAEdqD,EAAM+C,MAAO,GAEf/K,EAAQK,MAAM,oBACdL,EAAQK,MAAM,oBACdL,EAAQO,QAAQ9K,GAChBuK,EAAQQ,KAAK,oBACNuD,CACT,CACA,OAAOJ,EAAIlO,EACb,EAYA,SAASsO,EAAMtO,GACb,OAAIgK,GAAchK,IAChBuK,EAAQK,MAAM,8BACdL,EAAQO,QAAQ9K,GAChBuK,EAAQQ,KAAK,8BACbR,EAAQQ,KAAK,oBACNP,IAETD,EAAQQ,KAAK,oBACNP,EAAGxK,GACZ,CACF,EA/DEiM,aAAc,CACZjB,SA4EJ,SAAwCT,EAASC,EAAI0D,GACnD,IAAMrC,EAAOvV,KACb,OAeA,SAAmB0J,GACjB,GAAIgK,GAAchK,GAGhB,OAAOsK,GACLC,EACAgL,EACA,aACA1J,EAAKT,OAAOjC,WAAWgF,QAAQC,KAAK5L,SAAS,qBACzChE,EACA,EANC8L,CAOLtK,GAEJ,OAAOuV,EAAWvV,EACpB,EAeA,SAASuV,EAAWvV,GAClB,OAAOuK,EAAQY,QAAQkK,GAAY7K,EAAI0D,EAAhC3D,CAAqCvK,EAC9C,CACF,GA3HE+K,KA8HF,SAAcR,GACZA,EAAQQ,KAAK,aACf,GCjGO,SAASyK,GACdjL,EACAC,EACA0D,EACArW,EACA4d,EACAC,EACAC,EACAC,EACAnL,GAEA,IAAMC,EAAQD,GAAO3E,OAAOC,kBACxB8P,EAAU,EACd,OAcA,SAAe7V,GACb,GAAa,KAATA,EAMF,OALAuK,EAAQK,MAAM/S,GACd0S,EAAQK,MAAM6K,GACdlL,EAAQK,MAAM8K,GACdnL,EAAQO,QAAQ9K,GAChBuK,EAAQQ,KAAK2K,GACNI,EAIT,GAAa,OAAT9V,GAA0B,KAATA,GAAwB,KAATA,GAAe0J,GAAa1J,GAC9D,OAAOkO,EAAIlO,GAQb,OANAuK,EAAQK,MAAM/S,GACd0S,EAAQK,MAAM+K,GACdpL,EAAQK,MAAMgL,GACdrL,EAAQK,MAAM,cAAe,CAC3BY,YAAa,WAERuK,EAAI/V,EACb,EAYA,SAAS8V,EAAe9V,GACtB,OAAa,KAATA,GACFuK,EAAQK,MAAM8K,GACdnL,EAAQO,QAAQ9K,GAChBuK,EAAQQ,KAAK2K,GACbnL,EAAQQ,KAAK0K,GACblL,EAAQQ,KAAKlT,GACN2S,IAETD,EAAQK,MAAMgL,GACdrL,EAAQK,MAAM,cAAe,CAC3BY,YAAa,WAERwK,EAAShW,GAClB,CAYA,SAASgW,EAAShW,GAChB,OAAa,KAATA,GACFuK,EAAQQ,KAAK,eACbR,EAAQQ,KAAK6K,GACNE,EAAe9V,IAEX,OAATA,GAA0B,KAATA,GAAe8J,GAAmB9J,GAC9CkO,EAAIlO,IAEbuK,EAAQO,QAAQ9K,GACA,KAATA,EAAciW,EAAiBD,EACxC,CAYA,SAASC,EAAejW,GACtB,OAAa,KAATA,GAAwB,KAATA,GAAwB,KAATA,GAChCuK,EAAQO,QAAQ9K,GACTgW,GAEFA,EAAShW,EAClB,CAYA,SAAS+V,EAAI/V,GACX,OACG6V,GACS,OAAT7V,GAA0B,KAATA,IAAe+J,GAA0B/J,GAQzD6V,EAAUnL,GAAkB,KAAT1K,GACrBuK,EAAQO,QAAQ9K,GAChB6V,IACOE,GAEI,KAAT/V,GACFuK,EAAQO,QAAQ9K,GAChB6V,IACOE,GAMI,OAAT/V,GAA0B,KAATA,GAAwB,KAATA,GAAe0J,GAAa1J,GACvDkO,EAAIlO,IAEbuK,EAAQO,QAAQ9K,GACA,KAATA,EAAckW,EAAYH,IAxB/BxL,EAAQQ,KAAK,eACbR,EAAQQ,KAAK6K,GACbrL,EAAQQ,KAAK4K,GACbpL,EAAQQ,KAAKlT,GACN2S,EAAGxK,GAqBd,CAYA,SAASkW,EAAUlW,GACjB,OAAa,KAATA,GAAwB,KAATA,GAAwB,KAATA,GAChCuK,EAAQO,QAAQ9K,GACT+V,GAEFA,EAAI/V,EACb,CACF,CCzLO,SAASmW,GAAa5L,EAASC,EAAI0D,EAAKrW,EAAMue,EAAYR,GAC/D,IAGI3H,EAHEpC,EAAOvV,KACTqU,EAAO,EAGX,OAYA,SAAe3K,GAMb,OALAuK,EAAQK,MAAM/S,GACd0S,EAAQK,MAAMwL,GACd7L,EAAQO,QAAQ9K,GAChBuK,EAAQQ,KAAKqL,GACb7L,EAAQK,MAAMgL,GACP5E,CACT,EAYA,SAASA,EAAQhR,GACf,OACE2K,EAAO,KACE,OAAT3K,GACS,KAATA,GACU,KAATA,IAAgBiO,GAMP,KAATjO,IACE2K,GACD,2BAA4BkB,EAAKT,OAAOjC,WAEnC+E,EAAIlO,GAEA,KAATA,GACFuK,EAAQQ,KAAK6K,GACbrL,EAAQK,MAAMwL,GACd7L,EAAQO,QAAQ9K,GAChBuK,EAAQQ,KAAKqL,GACb7L,EAAQQ,KAAKlT,GACN2S,GAILV,GAAmB9J,IACrBuK,EAAQK,MAAM,cACdL,EAAQO,QAAQ9K,GAChBuK,EAAQQ,KAAK,cACNiG,IAETzG,EAAQK,MAAM,cAAe,CAC3BY,YAAa,WAER6K,EAAYrW,GACrB,CAYA,SAASqW,EAAYrW,GACnB,OACW,OAATA,GACS,KAATA,GACS,KAATA,GACA8J,GAAmB9J,IACnB2K,IAAS,KAETJ,EAAQQ,KAAK,eACNiG,EAAQhR,KAEjBuK,EAAQO,QAAQ9K,GACXiO,IAAMA,GAAQjE,GAAchK,IACjB,KAATA,EAAcsW,EAAcD,EACrC,CAYA,SAASC,EAAYtW,GACnB,OAAa,KAATA,GAAwB,KAATA,GAAwB,KAATA,GAChCuK,EAAQO,QAAQ9K,GAChB2K,IACO0L,GAEFA,EAAYrW,EACrB,CACF,CCtHO,SAASuW,GAAahM,EAASC,EAAI0D,EAAKrW,EAAMue,EAAYR,GAE/D,IAAItB,EACJ,OAYA,SAAetU,GACb,GAAa,KAATA,GAAwB,KAATA,GAAwB,KAATA,EAMhC,OALAuK,EAAQK,MAAM/S,GACd0S,EAAQK,MAAMwL,GACd7L,EAAQO,QAAQ9K,GAChBuK,EAAQQ,KAAKqL,GACb9B,EAAkB,KAATtU,EAAc,GAAKA,EACrBwW,EAET,OAAOtI,EAAIlO,EACb,EAcA,SAASwW,EAAMxW,GACb,OAAIA,IAASsU,GACX/J,EAAQK,MAAMwL,GACd7L,EAAQO,QAAQ9K,GAChBuK,EAAQQ,KAAKqL,GACb7L,EAAQQ,KAAKlT,GACN2S,IAETD,EAAQK,MAAMgL,GACP5E,EAAQhR,GACjB,CAYA,SAASgR,EAAQhR,GACf,OAAIA,IAASsU,GACX/J,EAAQQ,KAAK6K,GACNY,EAAMlC,IAEF,OAATtU,EACKkO,EAAIlO,GAIT8J,GAAmB9J,IAErBuK,EAAQK,MAAM,cACdL,EAAQO,QAAQ9K,GAChBuK,EAAQQ,KAAK,cACNT,GAAaC,EAASyG,EAAS,gBAExCzG,EAAQK,MAAM,cAAe,CAC3BY,YAAa,WAERmJ,EAAO3U,GAChB,CAOA,SAAS2U,EAAO3U,GACd,OAAIA,IAASsU,GAAmB,OAATtU,GAAiB8J,GAAmB9J,IACzDuK,EAAQQ,KAAK,eACNiG,EAAQhR,KAEjBuK,EAAQO,QAAQ9K,GACA,KAATA,EAAcyW,EAAS9B,EAChC,CAYA,SAAS8B,EAAOzW,GACd,OAAIA,IAASsU,GAAmB,KAATtU,GACrBuK,EAAQO,QAAQ9K,GACT2U,GAEFA,EAAO3U,EAChB,CACF,CClIO,SAAS0W,GAAkBnM,EAASC,GAEzC,IAAIyD,EACJ,OAGA,SAAShY,EAAM+J,GACb,GAAI8J,GAAmB9J,GAKrB,OAJAuK,EAAQK,MAAM,cACdL,EAAQO,QAAQ9K,GAChBuK,EAAQQ,KAAK,cACbkD,GAAO,EACAhY,EAET,GAAI+T,GAAchK,GAChB,OAAOsK,GACLC,EACAtU,EACAgY,EAAO,aAAe,aAHjB3D,CAILtK,GAEJ,OAAOwK,EAAGxK,EACZ,CACF,CC7BO,SAAS2W,GAAoB9iB,GAClC,OACEA,EAEG0B,QAAQ,cAAe,KAEvBA,QAAQ,SAAU,IAOlBqhB,cACAC,aAEP,CChBO,IAAMC,GAAa,CACxBpjB,KAAM,aACNsX,SAaF,SAA4BT,EAASC,EAAI0D,GACvC,IAEI6I,EAFElL,EAAOvV,KAGb,OAYA,SAAe0J,GAKb,OADAuK,EAAQK,MAAM,cAchB,SAAgB5K,GAGd,OAAOmW,GAAanjB,KAClB6Y,EACAtB,EACAyM,EAEA9I,EACA,kBACA,wBACA,wBARKiI,CASLnW,EACJ,CA1BSqJ,CAAOrJ,EAChB,EAqCA,SAASgX,EAAWhX,GAIlB,OAHA+W,EAAaJ,GACX9K,EAAKuE,eAAevE,EAAKU,OAAOV,EAAKU,OAAO7X,OAAS,GAAG,IAAI4C,MAAM,GAAI,IAE3D,KAAT0I,GACFuK,EAAQK,MAAM,oBACdL,EAAQO,QAAQ9K,GAChBuK,EAAQQ,KAAK,oBACNkM,GAEF/I,EAAIlO,EACb,CAYA,SAASiX,EAAYjX,GAEnB,OAAO+J,GAA0B/J,GAC7B0W,GAAkBnM,EAAS2M,EAA3BR,CAA8C1W,GAC9CkX,EAAkBlX,EACxB,CAYA,SAASkX,EAAkBlX,GACzB,OAAOwV,GACLjL,EACA4M,EAEAjJ,EACA,wBACA,+BACA,qCACA,2BACA,8BATKsH,CAULxV,EACJ,CAYA,SAASmX,EAAiBnX,GACxB,OAAOuK,EAAQY,QAAQiM,GAAa9I,EAAOA,EAApC/D,CAA2CvK,EACpD,CAcA,SAASsO,EAAMtO,GACb,OAAOgK,GAAchK,GACjBsK,GAAaC,EAAS8M,EAAiB,aAAvC/M,CAAqDtK,GACrDqX,EAAgBrX,EACtB,CAcA,SAASqX,EAAgBrX,GACvB,OAAa,OAATA,GAAiB8J,GAAmB9J,IACtCuK,EAAQQ,KAAK,cAKbc,EAAKT,OAAOkM,QAAQpgB,KAAK6f,GAKlBvM,EAAGxK,IAELkO,EAAIlO,EACb,CACF,GAtLMoX,GAAc,CAClBpM,SA2LF,SAA6BT,EAASC,EAAI0D,GACxC,OAcA,SAAqBlO,GACnB,OAAO+J,GAA0B/J,GAC7B0W,GAAkBnM,EAASgN,EAA3Bb,CAAyC1W,GACzCkO,EAAIlO,EACV,EAaA,SAASuX,EAAavX,GACpB,OAAOuW,GACLhM,EACAiN,EACAtJ,EACA,kBACA,wBACA,wBANKqI,CAOLvW,EACJ,CAYA,SAASwX,EAAWxX,GAClB,OAAOgK,GAAchK,GACjBsK,GAAaC,EAASkN,EAA8B,aAApDnN,CAAkEtK,GAClEyX,EAA6BzX,EACnC,CAYA,SAASyX,EAA6BzX,GACpC,OAAgB,OAATA,GAAiB8J,GAAmB9J,GAAQwK,EAAGxK,GAAQkO,EAAIlO,EACpE,CACF,EAlQEuO,SAAS,GCjBJ,IAAMmJ,GAAe,CAC1BhkB,KAAM,eACNsX,SAaF,SAA8BT,EAASC,EAAI0D,GACzC,IAAMrC,EAAOvV,KACb,OAgBA,SAAe0J,GAMb,OAHAuK,EAAQK,MAAM,gBAGPN,GAAaC,EAASoN,EAAa,aAAc,EAAjDrN,CAAwDtK,EACjE,EAYA,SAAS2X,EAAY3X,GACnB,IAAMmQ,EAAOtE,EAAKU,OAAOV,EAAKU,OAAO7X,OAAS,GAC9C,OAAOyb,GACY,eAAjBA,EAAK,GAAGtY,MACRsY,EAAK,GAAGC,eAAeD,EAAK,IAAI,GAAMzb,QAAU,EAC9Csc,EAAQhR,GACRkO,EAAIlO,EACV,CAYA,SAASgR,EAAQhR,GACf,OAAa,OAATA,EACKsO,EAAMtO,GAEX8J,GAAmB9J,GACduK,EAAQY,QAAQyM,GAAc5G,EAAS1C,EAAvC/D,CAA8CvK,IAEvDuK,EAAQK,MAAM,iBACP+J,EAAO3U,GAChB,CAYA,SAAS2U,EAAO3U,GACd,OAAa,OAATA,GAAiB8J,GAAmB9J,IACtCuK,EAAQQ,KAAK,iBACNiG,EAAQhR,KAEjBuK,EAAQO,QAAQ9K,GACT2U,EACT,CAGA,SAASrG,EAAMtO,GAKb,OAJAuK,EAAQQ,KAAK,gBAINP,EAAGxK,EACZ,CACF,GAvGM4X,GAAe,CACnB5M,SA4GF,SAA8BT,EAASC,EAAI0D,GACzC,IAAMrC,EAAOvV,KACb,OAAOshB,EAaP,SAASA,EAAa5X,GAGpB,OAAI6L,EAAKT,OAAOgC,KAAKvB,EAAKwB,MAAMnX,MACvBgY,EAAIlO,GAET8J,GAAmB9J,IACrBuK,EAAQK,MAAM,cACdL,EAAQO,QAAQ9K,GAChBuK,EAAQQ,KAAK,cACN6M,GASFtN,GAAaC,EAASoN,EAAa,aAAc,EAAjDrN,CAAwDtK,EACjE,CAYA,SAAS2X,EAAY3X,GACnB,IAAMmQ,EAAOtE,EAAKU,OAAOV,EAAKU,OAAO7X,OAAS,GAC9C,OAAOyb,GACY,eAAjBA,EAAK,GAAGtY,MACRsY,EAAK,GAAGC,eAAeD,EAAK,IAAI,GAAMzb,QAAU,EAC9C8V,EAAGxK,GACH8J,GAAmB9J,GACnB4X,EAAa5X,GACbkO,EAAIlO,EACV,CACF,EApKEuO,SAAS,GCDJ,IAAMsJ,GAAa,CACxBnkB,KAAM,aACNsX,SA2DF,SAA4BT,EAASC,EAAI0D,GACvC,IAAIvD,EAAO,EACX,OAYA,SAAe3K,GAGb,OADAuK,EAAQK,MAAM,cAchB,SAAgB5K,GAEd,OADAuK,EAAQK,MAAM,sBACPkN,EAAa9X,EACtB,CAhBSqJ,CAAOrJ,EAChB,EA2BA,SAAS8X,EAAa9X,GACpB,OAAa,KAATA,GAAe2K,IAAS,GAC1BJ,EAAQO,QAAQ9K,GACT8X,GAII,OAAT9X,GAAiB+J,GAA0B/J,IAC7CuK,EAAQQ,KAAK,sBACNiG,EAAQhR,IAEVkO,EAAIlO,EACb,CAYA,SAASgR,EAAQhR,GACf,OAAa,KAATA,GACFuK,EAAQK,MAAM,sBACPmN,EAAgB/X,IAEZ,OAATA,GAAiB8J,GAAmB9J,IACtCuK,EAAQQ,KAAK,cAINP,EAAGxK,IAERgK,GAAchK,GACTsK,GAAaC,EAASyG,EAAS,aAA/B1G,CAA6CtK,IAKtDuK,EAAQK,MAAM,kBACPzI,EAAKnC,GACd,CAcA,SAAS+X,EAAgB/X,GACvB,OAAa,KAATA,GACFuK,EAAQO,QAAQ9K,GACT+X,IAETxN,EAAQQ,KAAK,sBACNiG,EAAQhR,GACjB,CAYA,SAASmC,EAAKnC,GACZ,OAAa,OAATA,GAA0B,KAATA,GAAe+J,GAA0B/J,IAC5DuK,EAAQQ,KAAK,kBACNiG,EAAQhR,KAEjBuK,EAAQO,QAAQ9K,GACTmC,EACT,CACF,EA5LEkF,QAIF,SAA2BkF,EAAQ6C,GACjC,IAGI3Y,EAEAoa,EALAd,EAAaxD,EAAO7X,OAAS,EAC7BwW,EAAe,EAOkB,eAAjCqB,EAAOrB,GAAc,GAAGrT,OAC1BqT,GAAgB,GAKhB6E,EAAa,EAAI7E,GACc,eAA/BqB,EAAOwD,GAAY,GAAGlY,OAEtBkY,GAAc,GAGiB,uBAA/BxD,EAAOwD,GAAY,GAAGlY,OACrBqT,IAAiB6E,EAAa,GAC5BA,EAAa,EAAI7E,GACmB,eAAnCqB,EAAOwD,EAAa,GAAG,GAAGlY,QAE9BkY,GAAc7E,EAAe,IAAM6E,EAAa,EAAI,GAElDA,EAAa7E,GAYf1C,GAAO+D,EAAQrB,EAAc6E,EAAa7E,EAAe,EAAG,CAC1D,CAAC,QAZHzU,EAAU,CACRoB,KAAM,iBACN5B,MAAOsW,EAAOrB,GAAc,GAAGjV,MAC/BM,IAAKgW,EAAOwD,GAAY,GAAGxZ,KASR6Y,GACnB,CAAC,QARHyB,EAAO,CACLhZ,KAAM,YACN5B,MAAOsW,EAAOrB,GAAc,GAAGjV,MAC/BM,IAAKgW,EAAOwD,GAAY,GAAGxZ,IAC3BiV,YAAa,QAIG4D,GAChB,CAAC,OAAQyB,EAAMzB,GACf,CAAC,OAAQ3Y,EAAS2Y,KAGtB,OAAO7C,CACT,GC5DO,IAAMyL,GAAkB,CAC7BtkB,KAAM,kBACNsX,SAkEF,SAAiCT,EAASC,EAAI0D,GAC5C,IAEIoG,EAFEzI,EAAOvV,KAGb,OAaA,SAAe0J,GACb,IAEIiY,EAFAha,EAAQ4N,EAAKU,OAAO7X,OAIxB,KAAOuJ,KAGL,GACiC,eAA/B4N,EAAKU,OAAOtO,GAAO,GAAGpG,MACS,eAA/BgU,EAAKU,OAAOtO,GAAO,GAAGpG,MACS,YAA/BgU,EAAKU,OAAOtO,GAAO,GAAGpG,KACtB,CACAogB,EAA2C,cAA/BpM,EAAKU,OAAOtO,GAAO,GAAGpG,KAClC,KACF,CAKF,IAAKgU,EAAKT,OAAOgC,KAAKvB,EAAKwB,MAAMnX,QAAU2V,EAAKiB,WAAamL,GAG3D,OAFA1N,EAAQK,MAAM,qBACd0J,EAAStU,EAiBb,SAAgBA,GAEd,OADAuK,EAAQK,MAAM,6BACP+J,EAAO3U,EAChB,CAnBWqJ,CAAOrJ,GAEhB,OAAOkO,EAAIlO,EACb,EA6BA,SAAS2U,EAAO3U,GACd,OAAIA,IAASsU,GACX/J,EAAQO,QAAQ9K,GACT2U,IAETpK,EAAQQ,KAAK,6BACNf,GAAchK,GACjBsK,GAAaC,EAAS+D,EAAO,aAA7BhE,CAA2CtK,GAC3CsO,EAAMtO,GACZ,CAaA,SAASsO,EAAMtO,GACb,OAAa,OAATA,GAAiB8J,GAAmB9J,IACtCuK,EAAQQ,KAAK,qBACNP,EAAGxK,IAELkO,EAAIlO,EACb,CACF,EAtKEoU,UAIF,SAAkC7H,EAAQ6C,GAExC,IAEI3Y,EAEAoa,EAEAiG,EANA7Y,EAAQsO,EAAO7X,OAUnB,KAAOuJ,KACL,GAAyB,UAArBsO,EAAOtO,GAAO,GAAgB,CAChC,GAA8B,YAA1BsO,EAAOtO,GAAO,GAAGpG,KAAoB,CACvCpB,EAAUwH,EACV,KACF,CAC8B,cAA1BsO,EAAOtO,GAAO,GAAGpG,OACnBgZ,EAAO5S,EAEX,KAGgC,YAA1BsO,EAAOtO,GAAO,GAAGpG,MAEnB0U,EAAO/D,OAAOvK,EAAO,GAElB6Y,GAAwC,eAA1BvK,EAAOtO,GAAO,GAAGpG,OAClCif,EAAa7Y,GAInB,IAAMia,EAAU,CACdrgB,KAAM,gBACN5B,MAAO5D,OAAO+T,OAAO,CAAC,EAAGmG,EAAOsE,GAAM,GAAG5a,OACzCM,IAAKlE,OAAO+T,OAAO,CAAC,EAAGmG,EAAOA,EAAO7X,OAAS,GAAG,GAAG6B,MAItDgW,EAAOsE,GAAM,GAAGhZ,KAAO,oBAInBif,GACFvK,EAAO/D,OAAOqI,EAAM,EAAG,CAAC,QAASqH,EAAS9I,IAC1C7C,EAAO/D,OAAOsO,EAAa,EAAG,EAAG,CAAC,OAAQvK,EAAO9V,GAAS,GAAI2Y,IAC9D7C,EAAO9V,GAAS,GAAGF,IAAMlE,OAAO+T,OAAO,CAAC,EAAGmG,EAAOuK,GAAY,GAAGvgB,MAEjEgW,EAAO9V,GAAS,GAAKyhB,EAKvB,OADA3L,EAAOrV,KAAK,CAAC,OAAQghB,EAAS9I,IACvB7C,CACT,GC3DO,IAAM4L,GAAiB,CAC5B,UACA,UACA,QACA,OACA,WACA,aACA,OACA,UACA,SACA,MACA,WACA,KACA,UACA,SACA,MACA,MACA,KACA,KACA,WACA,aACA,SACA,SACA,OACA,QACA,WACA,KACA,KACA,KACA,KACA,KACA,KACA,OACA,SACA,KACA,OACA,SACA,SACA,KACA,OACA,OACA,OACA,WACA,MACA,WACA,KACA,WACA,SACA,IACA,QACA,SACA,UACA,UACA,QACA,QACA,KACA,QACA,KACA,QACA,QACA,KACA,QACA,MAeWC,GAAe,CAAC,MAAO,SAAU,QAAS,YCxE1CC,GAAW,CACtB3kB,KAAM,WACNsX,SAsCF,SAA0BT,EAASC,EAAI0D,GACrC,IAEIoG,EAEAgE,EAEApW,EAEAjE,EAEAsa,EAVE1M,EAAOvV,KAWb,OAYA,SAAe0J,GAEb,OAaF,SAAgBA,GAId,OAHAuK,EAAQK,MAAM,YACdL,EAAQK,MAAM,gBACdL,EAAQO,QAAQ9K,GACTsV,CACT,CAlBSjM,CAAOrJ,EAChB,EAiCA,SAASsV,EAAKtV,GACZ,OAAa,KAATA,GACFuK,EAAQO,QAAQ9K,GACTwY,GAEI,KAATxY,GACFuK,EAAQO,QAAQ9K,GAChBsY,GAAa,EACNG,GAEI,KAATzY,GACFuK,EAAQO,QAAQ9K,GAChBsU,EAAS,EAMFzI,EAAKiB,UAAYtC,EAAKkO,GAI3BpP,GAAWtJ,IACbuK,EAAQO,QAAQ9K,GAEhBkC,EAAS6E,OAAOsD,aAAarK,GACtB2Y,GAEFzK,EAAIlO,EACb,CAgBA,SAASwY,EAAgBxY,GACvB,OAAa,KAATA,GACFuK,EAAQO,QAAQ9K,GAChBsU,EAAS,EACFsE,GAEI,KAAT5Y,GACFuK,EAAQO,QAAQ9K,GAChBsU,EAAS,EACTrW,EAAQ,EACD4a,GAILvP,GAAWtJ,IACbuK,EAAQO,QAAQ9K,GAChBsU,EAAS,EAGFzI,EAAKiB,UAAYtC,EAAKkO,GAExBxK,EAAIlO,EACb,CAYA,SAAS4Y,EAAkB5Y,GACzB,OAAa,KAATA,GACFuK,EAAQO,QAAQ9K,GAGT6L,EAAKiB,UAAYtC,EAAKkO,GAExBxK,EAAIlO,EACb,CAYA,SAAS6Y,EAAgB7Y,GACvB,IAAMnM,EAAQ,SACd,OAAImM,IAASnM,EAAM0L,WAAWtB,MAC5BsM,EAAQO,QAAQ9K,GACFnM,IAAVoK,EAGK4N,EAAKiB,UAAYtC,EAAKyB,EAExB4M,GAEF3K,EAAIlO,EACb,CAYA,SAASyY,EAAczY,GACrB,OAAIsJ,GAAWtJ,IACbuK,EAAQO,QAAQ9K,GAEhBkC,EAAS6E,OAAOsD,aAAarK,GACtB2Y,GAEFzK,EAAIlO,EACb,CAcA,SAAS2Y,EAAQ3Y,GACf,GACW,OAATA,GACS,KAATA,GACS,KAATA,GACA+J,GAA0B/J,GAC1B,CACA,IAAM8Y,EAAiB,KAAT9Y,EACRtM,EAAOwO,EAAO0U,cACpB,OAAKkC,GAAUR,IAAcF,GAAa5V,SAAS9O,GAM/CykB,GAAe3V,SAASN,EAAO0U,gBACjCtC,EAAS,EACLwE,GACFvO,EAAQO,QAAQ9K,GACT+Y,GAKFlN,EAAKiB,UAAYtC,EAAGxK,GAAQiM,EAAajM,KAElDsU,EAAS,EAEFzI,EAAKiB,YAAcjB,EAAKT,OAAOgC,KAAKvB,EAAKwB,MAAMnX,MAClDgY,EAAIlO,GACJsY,EACAU,EAAwBhZ,GACxBiZ,EAA4BjZ,KAtB9BsU,EAAS,EAGFzI,EAAKiB,UAAYtC,EAAGxK,GAAQiM,EAAajM,GAoBpD,CAGA,OAAa,KAATA,GAAewJ,GAAkBxJ,IACnCuK,EAAQO,QAAQ9K,GAChBkC,GAAU6E,OAAOsD,aAAarK,GACvB2Y,GAEFzK,EAAIlO,EACb,CAYA,SAAS+Y,EAAiB/Y,GACxB,OAAa,KAATA,GACFuK,EAAQO,QAAQ9K,GAGT6L,EAAKiB,UAAYtC,EAAKyB,GAExBiC,EAAIlO,EACb,CAYA,SAASgZ,EAAwBhZ,GAC/B,OAAIgK,GAAchK,IAChBuK,EAAQO,QAAQ9K,GACTgZ,GAEFE,EAAYlZ,EACrB,CAyBA,SAASiZ,EAA4BjZ,GACnC,OAAa,KAATA,GACFuK,EAAQO,QAAQ9K,GACTkZ,GAII,KAATlZ,GAAwB,KAATA,GAAesJ,GAAWtJ,IAC3CuK,EAAQO,QAAQ9K,GACTmZ,GAELnP,GAAchK,IAChBuK,EAAQO,QAAQ9K,GACTiZ,GAEFC,EAAYlZ,EACrB,CAgBA,SAASmZ,EAAsBnZ,GAE7B,OACW,KAATA,GACS,KAATA,GACS,KAATA,GACS,KAATA,GACAwJ,GAAkBxJ,IAElBuK,EAAQO,QAAQ9K,GACTmZ,GAEFC,EAA2BpZ,EACpC,CAeA,SAASoZ,EAA2BpZ,GAClC,OAAa,KAATA,GACFuK,EAAQO,QAAQ9K,GACTqZ,GAELrP,GAAchK,IAChBuK,EAAQO,QAAQ9K,GACToZ,GAEFH,EAA4BjZ,EACrC,CAeA,SAASqZ,EAA6BrZ,GACpC,OACW,OAATA,GACS,KAATA,GACS,KAATA,GACS,KAATA,GACS,KAATA,EAEOkO,EAAIlO,GAEA,KAATA,GAAwB,KAATA,GACjBuK,EAAQO,QAAQ9K,GAChBuY,EAAUvY,EACHsZ,GAELtP,GAAchK,IAChBuK,EAAQO,QAAQ9K,GACTqZ,GAEFE,EAA+BvZ,EACxC,CAcA,SAASsZ,EAA6BtZ,GACpC,OAAIA,IAASuY,GACXhO,EAAQO,QAAQ9K,GAChBuY,EAAU,KACHiB,GAEI,OAATxZ,GAAiB8J,GAAmB9J,GAC/BkO,EAAIlO,IAEbuK,EAAQO,QAAQ9K,GACTsZ,EACT,CAYA,SAASC,EAA+BvZ,GACtC,OACW,OAATA,GACS,KAATA,GACS,KAATA,GACS,KAATA,GACS,KAATA,GACS,KAATA,GACS,KAATA,GACS,KAATA,GACA+J,GAA0B/J,GAEnBoZ,EAA2BpZ,IAEpCuK,EAAQO,QAAQ9K,GACTuZ,EACT,CAaA,SAASC,EAAkCxZ,GACzC,OAAa,KAATA,GAAwB,KAATA,GAAegK,GAAchK,GACvCiZ,EAA4BjZ,GAE9BkO,EAAIlO,EACb,CAYA,SAASkZ,EAAYlZ,GACnB,OAAa,KAATA,GACFuK,EAAQO,QAAQ9K,GACTyZ,GAEFvL,EAAIlO,EACb,CAYA,SAASyZ,EAAczZ,GACrB,OAAa,OAATA,GAAiB8J,GAAmB9J,GAG/BiM,EAAajM,GAElBgK,GAAchK,IAChBuK,EAAQO,QAAQ9K,GACTyZ,GAEFvL,EAAIlO,EACb,CAYA,SAASiM,EAAajM,GACpB,OAAa,KAATA,GAA0B,IAAXsU,GACjB/J,EAAQO,QAAQ9K,GACT0Z,GAEI,KAAT1Z,GAA0B,IAAXsU,GACjB/J,EAAQO,QAAQ9K,GACT2Z,GAEI,KAAT3Z,GAA0B,IAAXsU,GACjB/J,EAAQO,QAAQ9K,GACT4Z,GAEI,KAAT5Z,GAA0B,IAAXsU,GACjB/J,EAAQO,QAAQ9K,GACT0Y,GAEI,KAAT1Y,GAA0B,IAAXsU,GACjB/J,EAAQO,QAAQ9K,GACT6Z,IAEL/P,GAAmB9J,IAAqB,IAAXsU,GAA2B,IAAXA,EAQpC,OAATtU,GAAiB8J,GAAmB9J,IACtCuK,EAAQQ,KAAK,gBACN+O,EAAkB9Z,KAE3BuK,EAAQO,QAAQ9K,GACTiM,IAZL1B,EAAQQ,KAAK,gBACNR,EAAQyC,MACb+M,GACAC,EACAF,EAHKvP,CAILvK,GAQN,CAaA,SAAS8Z,EAAkB9Z,GACzB,OAAOuK,EAAQyC,MACbiN,GACAC,EACAF,EAHKzP,CAILvK,EACJ,CAaA,SAASka,EAAyBla,GAIhC,OAHAuK,EAAQK,MAAM,cACdL,EAAQO,QAAQ9K,GAChBuK,EAAQQ,KAAK,cACNoP,CACT,CAaA,SAASA,EAAmBna,GAC1B,OAAa,OAATA,GAAiB8J,GAAmB9J,GAC/B8Z,EAAkB9Z,IAE3BuK,EAAQK,MAAM,gBACPqB,EAAajM,GACtB,CAYA,SAAS0Z,EAA0B1Z,GACjC,OAAa,KAATA,GACFuK,EAAQO,QAAQ9K,GACT0Y,GAEFzM,EAAajM,EACtB,CAYA,SAAS2Z,EAAuB3Z,GAC9B,OAAa,KAATA,GACFuK,EAAQO,QAAQ9K,GAChBkC,EAAS,GACFkY,GAEFnO,EAAajM,EACtB,CAYA,SAASoa,EAAsBpa,GAC7B,GAAa,KAATA,EAAa,CACf,IAAMtM,EAAOwO,EAAO0U,cACpB,OAAIwB,GAAa5V,SAAS9O,IACxB6W,EAAQO,QAAQ9K,GACT4Z,GAEF3N,EAAajM,EACtB,CACA,OAAIsJ,GAAWtJ,IAASkC,EAAOxN,OAAS,GACtC6V,EAAQO,QAAQ9K,GAEhBkC,GAAU6E,OAAOsD,aAAarK,GACvBoa,GAEFnO,EAAajM,EACtB,CAYA,SAAS6Z,EAAwB7Z,GAC/B,OAAa,KAATA,GACFuK,EAAQO,QAAQ9K,GACT0Y,GAEFzM,EAAajM,EACtB,CAoBA,SAAS0Y,EAA8B1Y,GACrC,OAAa,KAATA,GACFuK,EAAQO,QAAQ9K,GACT4Z,GAII,KAAT5Z,GAA0B,IAAXsU,GACjB/J,EAAQO,QAAQ9K,GACT0Y,GAEFzM,EAAajM,EACtB,CAYA,SAAS4Z,EAAkB5Z,GACzB,OAAa,OAATA,GAAiB8J,GAAmB9J,IACtCuK,EAAQQ,KAAK,gBACNiP,EAAkBha,KAE3BuK,EAAQO,QAAQ9K,GACT4Z,EACT,CAYA,SAASI,EAAkBha,GAMzB,OALAuK,EAAQQ,KAAK,YAKNP,EAAGxK,EACZ,CACF,EArzBEoU,UAeF,SAA2B7H,GACzB,IAAItO,EAAQsO,EAAO7X,OACnB,KAAOuJ,MACoB,UAArBsO,EAAOtO,GAAO,IAA4C,aAA1BsO,EAAOtO,GAAO,GAAGpG,QAInDoG,EAAQ,GAAmC,eAA9BsO,EAAOtO,EAAQ,GAAG,GAAGpG,OAEpC0U,EAAOtO,GAAO,GAAGhI,MAAQsW,EAAOtO,EAAQ,GAAG,GAAGhI,MAE9CsW,EAAOtO,EAAQ,GAAG,GAAGhI,MAAQsW,EAAOtO,EAAQ,GAAG,GAAGhI,MAElDsW,EAAO/D,OAAOvK,EAAQ,EAAG,IAE3B,OAAOsO,CACT,EA9BEK,UAAU,GAINmN,GAAkB,CACtB/O,SAk2BF,SAAiCT,EAASC,EAAI0D,GAC5C,OAaA,SAAelO,GAIb,OAHAuK,EAAQK,MAAM,cACdL,EAAQO,QAAQ9K,GAChBuK,EAAQQ,KAAK,cACNR,EAAQY,QAAQkD,GAAW7D,EAAI0D,EACxC,CACF,EAr3BEK,SAAS,GAEL0L,GAA2B,CAC/BjP,SAizBF,SAA0CT,EAASC,EAAI0D,GACrD,IAAMrC,EAAOvV,KACb,OAaA,SAAe0J,GACb,GAAI8J,GAAmB9J,GAIrB,OAHAuK,EAAQK,MAAM,cACdL,EAAQO,QAAQ9K,GAChBuK,EAAQQ,KAAK,cACNuD,EAET,OAAOJ,EAAIlO,EACb,EAaA,SAASsO,EAAMtO,GACb,OAAO6L,EAAKT,OAAOgC,KAAKvB,EAAKwB,MAAMnX,MAAQgY,EAAIlO,GAAQwK,EAAGxK,EAC5D,CACF,EAv1BEuO,SAAS,GCvBX,IAAM8L,GAAsB,CAC1BrP,SAwbF,SAAqCT,EAASC,EAAI0D,GAChD,IAAMrC,EAAOvV,KACb,OAOA,SAAe0J,GACb,GAAa,OAATA,EACF,OAAOkO,EAAIlO,GAKb,OAHAuK,EAAQK,MAAM,cACdL,EAAQO,QAAQ9K,GAChBuK,EAAQQ,KAAK,cACNO,CACT,EAOA,SAASA,EAAUtL,GACjB,OAAO6L,EAAKT,OAAOgC,KAAKvB,EAAKwB,MAAMnX,MAAQgY,EAAIlO,GAAQwK,EAAGxK,EAC5D,CACF,EAldEuO,SAAS,GAIE+L,GAAa,CACxB5mB,KAAM,aACNsX,SAQF,SAA4BT,EAASC,EAAI0D,GACvC,IASIoG,EATEzI,EAAOvV,KAEPikB,EAAa,CACjBvP,SA+SF,SAA4BT,EAASC,EAAI0D,GACvC,IAAIvD,EAAO,EACX,OAAO6P,EAOP,SAASA,EAAYxa,GAInB,OAHAuK,EAAQK,MAAM,cACdL,EAAQO,QAAQ9K,GAChBuK,EAAQQ,KAAK,cACN9U,CACT,CAcA,SAASA,EAAM+J,GAKb,OADAuK,EAAQK,MAAM,mBACPZ,GAAchK,GACjBsK,GACEC,EACAkQ,EACA,aACA5O,EAAKT,OAAOjC,WAAWgF,QAAQC,KAAK5L,SAAS,qBACzChE,EACA,EANN8L,CAOEtK,GACFya,EAAoBza,EAC1B,CAcA,SAASya,EAAoBza,GAC3B,OAAIA,IAASsU,GACX/J,EAAQK,MAAM,2BACP8P,EAAc1a,IAEhBkO,EAAIlO,EACb,CAcA,SAAS0a,EAAc1a,GACrB,OAAIA,IAASsU,GACX3J,IACAJ,EAAQO,QAAQ9K,GACT0a,GAEL/P,GAAQgQ,GACVpQ,EAAQQ,KAAK,2BACNf,GAAchK,GACjBsK,GAAaC,EAASqQ,EAAoB,aAA1CtQ,CAAwDtK,GACxD4a,EAAmB5a,IAElBkO,EAAIlO,EACb,CAcA,SAAS4a,EAAmB5a,GAC1B,OAAa,OAATA,GAAiB8J,GAAmB9J,IACtCuK,EAAQQ,KAAK,mBACNP,EAAGxK,IAELkO,EAAIlO,EACb,CACF,EA7ZEuO,SAAS,GAEPsM,EAAgB,EAChBF,EAAW,EAGf,OAcA,SAAe3a,GAEb,OAeF,SAA4BA,GAC1B,IAAMmQ,EAAOtE,EAAKU,OAAOV,EAAKU,OAAO7X,OAAS,GAS9C,OARAmmB,EACE1K,GAAyB,eAAjBA,EAAK,GAAGtY,KACZsY,EAAK,GAAGC,eAAeD,EAAK,IAAI,GAAMzb,OACtC,EACN4f,EAAStU,EACTuK,EAAQK,MAAM,cACdL,EAAQK,MAAM,mBACdL,EAAQK,MAAM,2BACPkN,EAAa9X,EACtB,CA1BS8a,CAAmB9a,EAC5B,EAuCA,SAAS8X,EAAa9X,GACpB,OAAIA,IAASsU,GACXqG,IACApQ,EAAQO,QAAQ9K,GACT8X,GAEL6C,EAAW,EACNzM,EAAIlO,IAEbuK,EAAQQ,KAAK,2BACNf,GAAchK,GACjBsK,GAAaC,EAASwQ,EAAY,aAAlCzQ,CAAgDtK,GAChD+a,EAAW/a,GACjB,CAcA,SAAS+a,EAAW/a,GAClB,OAAa,OAATA,GAAiB8J,GAAmB9J,IACtCuK,EAAQQ,KAAK,mBACNc,EAAKiB,UACRtC,EAAGxK,GACHuK,EAAQyC,MAAMqN,GAAqBW,EAAgB1M,EAAnD/D,CAA0DvK,KAEhEuK,EAAQK,MAAM,uBACdL,EAAQK,MAAM,cAAe,CAC3BY,YAAa,WAERwG,EAAKhS,GACd,CAcA,SAASgS,EAAKhS,GACZ,OAAa,OAATA,GAAiB8J,GAAmB9J,IACtCuK,EAAQQ,KAAK,eACbR,EAAQQ,KAAK,uBACNgQ,EAAW/a,IAEhBgK,GAAchK,IAChBuK,EAAQQ,KAAK,eACbR,EAAQQ,KAAK,uBACNT,GAAaC,EAAS0Q,EAAY,aAAlC3Q,CAAgDtK,IAE5C,KAATA,GAAeA,IAASsU,EACnBpG,EAAIlO,IAEbuK,EAAQO,QAAQ9K,GACTgS,EACT,CAcA,SAASiJ,EAAWjb,GAClB,OAAa,OAATA,GAAiB8J,GAAmB9J,GAC/B+a,EAAW/a,IAEpBuK,EAAQK,MAAM,uBACdL,EAAQK,MAAM,cAAe,CAC3BY,YAAa,WAER0P,EAAKlb,GACd,CAcA,SAASkb,EAAKlb,GACZ,OAAa,OAATA,GAAiB8J,GAAmB9J,IACtCuK,EAAQQ,KAAK,eACbR,EAAQQ,KAAK,uBACNgQ,EAAW/a,IAEP,KAATA,GAAeA,IAASsU,EACnBpG,EAAIlO,IAEbuK,EAAQO,QAAQ9K,GACTkb,EACT,CAeA,SAASF,EAAehb,GACtB,OAAOuK,EAAQY,QAAQoP,EAAYjM,EAAO6M,EAAnC5Q,CAAkDvK,EAC3D,CAcA,SAASmb,EAAcnb,GAIrB,OAHAuK,EAAQK,MAAM,cACdL,EAAQO,QAAQ9K,GAChBuK,EAAQQ,KAAK,cACNG,CACT,CAcA,SAASA,EAAalL,GACpB,OAAO6a,EAAgB,GAAK7Q,GAAchK,GACtCsK,GACEC,EACA6Q,EACA,aACAP,EAAgB,EAJlBvQ,CAKEtK,GACFob,EAAmBpb,EACzB,CAcA,SAASob,EAAmBpb,GAC1B,OAAa,OAATA,GAAiB8J,GAAmB9J,GAC/BuK,EAAQyC,MAAMqN,GAAqBW,EAAgB1M,EAAnD/D,CAA0DvK,IAEnEuK,EAAQK,MAAM,iBACPyQ,EAAarb,GACtB,CAcA,SAASqb,EAAarb,GACpB,OAAa,OAATA,GAAiB8J,GAAmB9J,IACtCuK,EAAQQ,KAAK,iBACNqQ,EAAmBpb,KAE5BuK,EAAQO,QAAQ9K,GACTqb,EACT,CAcA,SAAS/M,EAAMtO,GAEb,OADAuK,EAAQQ,KAAK,cACNP,EAAGxK,EACZ,CAsHF,EA1aE4M,UAAU,GChBZ,IAAM0O,GAAU7P,SAAS8P,cAAc,KAMhC,SAASC,GAA8B3nB,GAC5C,IAAM4nB,EAAqB,IAAM5nB,EAAQ,IACzCynB,GAAQI,UAAYD,EACpB,IAAME,EAAOL,GAAQM,YAUrB,OAAyC,KAArCD,EAAKpc,WAAWoc,EAAKjnB,OAAS,IAAiC,SAAVb,KAQlD8nB,IAASF,GAA6BE,EAC/C,CCjBO,IAAMF,GAAqB,CAChC/nB,KAAM,qBACNsX,SAOF,SAAoCT,EAASC,EAAI0D,GAC/C,IAGIzD,EAEAL,EALEyB,EAAOvV,KACTqU,EAAO,EAKX,OAgBA,SAAe3K,GAKb,OAJAuK,EAAQK,MAAM,sBACdL,EAAQK,MAAM,4BACdL,EAAQO,QAAQ9K,GAChBuK,EAAQQ,KAAK,4BACNuK,CACT,EAiBA,SAASA,EAAKtV,GACZ,OAAa,KAATA,GACFuK,EAAQK,MAAM,mCACdL,EAAQO,QAAQ9K,GAChBuK,EAAQQ,KAAK,mCACN8Q,IAETtR,EAAQK,MAAM,2BACdH,EAAM,GACNL,EAAOZ,GACA3V,EAAMmM,GACf,CAcA,SAAS6b,EAAQ7b,GACf,OAAa,KAATA,GAAwB,MAATA,GACjBuK,EAAQK,MAAM,uCACdL,EAAQO,QAAQ9K,GAChBuK,EAAQQ,KAAK,uCACbR,EAAQK,MAAM,2BACdH,EAAM,EACNL,EAAOR,GACA/V,IAET0W,EAAQK,MAAM,2BACdH,EAAM,EACNL,EAAOT,GACA9V,EAAMmM,GACf,CAmBA,SAASnM,EAAMmM,GACb,GAAa,KAATA,GAAe2K,EAAM,CACvB,IAAMY,EAAQhB,EAAQQ,KAAK,2BAC3B,OACEX,IAASZ,IACRgS,GAA8B3P,EAAKuE,eAAe7E,KAOrDhB,EAAQK,MAAM,4BACdL,EAAQO,QAAQ9K,GAChBuK,EAAQQ,KAAK,4BACbR,EAAQQ,KAAK,sBACNP,GATE0D,EAAIlO,EAUf,CACA,OAAIoK,EAAKpK,IAAS2K,IAASF,GACzBF,EAAQO,QAAQ9K,GACTnM,GAEFqa,EAAIlO,EACb,CACF,GC/IO,IAAM8b,GAAkB,CAC7BpoB,KAAM,kBACNsX,SAOF,SAAiCT,EAASC,EAAI0D,GAC5C,OAYA,SAAelO,GAKb,OAJAuK,EAAQK,MAAM,mBACdL,EAAQK,MAAM,gBACdL,EAAQO,QAAQ9K,GAChBuK,EAAQQ,KAAK,gBACN4J,CACT,EAYA,SAASA,EAAO3U,GAEd,OAAI6J,GAAiB7J,IACnBuK,EAAQK,MAAM,wBACdL,EAAQO,QAAQ9K,GAChBuK,EAAQQ,KAAK,wBACbR,EAAQQ,KAAK,mBACNP,GAEF0D,EAAIlO,EACb,CACF,GClDO,IAAM+b,GAAa,CACxBroB,KAAM,aACNsX,SAOF,SAA4BT,EAASC,GACnC,OAGA,SAAexK,GAIb,OAHAuK,EAAQK,MAAM,cACdL,EAAQO,QAAQ9K,GAChBuK,EAAQQ,KAAK,cACNT,GAAaC,EAASC,EAAI,aACnC,CACF,GCVO,IAAMwR,GAAW,CACtBtoB,KAAM,WACNsX,SA8IF,SAA0BT,EAASC,EAAI0D,GACrC,IAGI+N,EAEA3E,EALEzL,EAAOvV,KACT2H,EAAQ4N,EAAKU,OAAO7X,OAOxB,KAAOuJ,KACL,IACkC,eAA/B4N,EAAKU,OAAOtO,GAAO,GAAGpG,MACU,cAA/BgU,EAAKU,OAAOtO,GAAO,GAAGpG,QACvBgU,EAAKU,OAAOtO,GAAO,GAAGie,UACvB,CACAD,EAAapQ,EAAKU,OAAOtO,GAAO,GAChC,KACF,CAEF,OAiBA,SAAe+B,GAEb,IAAKic,EACH,OAAO/N,EAAIlO,GAYb,GAAIic,EAAWE,UACb,OAAOC,EAAYpc,GAerB,OAbAsX,EAAUzL,EAAKT,OAAOkM,QAAQ9U,SAC5BmU,GACE9K,EAAKuE,eAAe,CAClBna,MAAOgmB,EAAW1lB,IAClBA,IAAKsV,EAAKwB,UAIhB9C,EAAQK,MAAM,YACdL,EAAQK,MAAM,eACdL,EAAQO,QAAQ9K,GAChBuK,EAAQQ,KAAK,eACbR,EAAQQ,KAAK,YACNuD,CACT,EAkBA,SAASA,EAAMtO,GAKb,OAAa,KAATA,EACKuK,EAAQY,QACbkR,GACAC,EACAhF,EAAUgF,EAAaF,EAHlB7R,CAILvK,GAIS,KAATA,EACKuK,EAAQY,QACboR,GACAD,EACAhF,EAAUkF,EAAmBJ,EAHxB7R,CAILvK,GAIGsX,EAAUgF,EAAWtc,GAAQoc,EAAYpc,EAClD,CAgBA,SAASwc,EAAiBxc,GACxB,OAAOuK,EAAQY,QACbsR,GACAH,EACAF,EAHK7R,CAILvK,EACJ,CAkBA,SAASsc,EAAWtc,GAElB,OAAOwK,EAAGxK,EACZ,CAkBA,SAASoc,EAAYpc,GAEnB,OADAic,EAAWC,WAAY,EAChBhO,EAAIlO,EACb,CACF,EA5TEoU,UAqCF,SAA2B7H,EAAQ6C,GACjC,IAGI7D,EAEA+J,EAEAoH,EAEAC,EATA1e,EAAQsO,EAAO7X,OACf4Y,EAAS,EAWb,KAAOrP,KAEL,GADAsN,EAAQgB,EAAOtO,GAAO,GAClBqX,EAAM,CAER,GACiB,SAAf/J,EAAM1T,MACU,cAAf0T,EAAM1T,MAAwB0T,EAAM4Q,UAErC,MAKuB,UAArB5P,EAAOtO,GAAO,IAAiC,cAAfsN,EAAM1T,OACxC0T,EAAM4Q,WAAY,EAEtB,MAAO,GAAIO,GACT,GACuB,UAArBnQ,EAAOtO,GAAO,KACE,eAAfsN,EAAM1T,MAAwC,cAAf0T,EAAM1T,QACrC0T,EAAM2Q,YAEP5G,EAAOrX,EACY,cAAfsN,EAAM1T,MAAsB,CAC9ByV,EAAS,EACT,KACF,MAEsB,aAAf/B,EAAM1T,OACf6kB,EAAQze,GAGZ,IAAM2e,EAAQ,CACZ/kB,KAA+B,cAAzB0U,EAAO+I,GAAM,GAAGzd,KAAuB,OAAS,QACtD5B,MAAO5D,OAAO+T,OAAO,CAAC,EAAGmG,EAAO+I,GAAM,GAAGrf,OACzCM,IAAKlE,OAAO+T,OAAO,CAAC,EAAGmG,EAAOA,EAAO7X,OAAS,GAAG,GAAG6B,MAEhDsmB,EAAQ,CACZhlB,KAAM,QACN5B,MAAO5D,OAAO+T,OAAO,CAAC,EAAGmG,EAAO+I,GAAM,GAAGrf,OACzCM,IAAKlE,OAAO+T,OAAO,CAAC,EAAGmG,EAAOmQ,GAAO,GAAGnmB,MAEpCsa,EAAO,CACXhZ,KAAM,YACN5B,MAAO5D,OAAO+T,OAAO,CAAC,EAAGmG,EAAO+I,EAAOhI,EAAS,GAAG,GAAG/W,KACtDA,IAAKlE,OAAO+T,OAAO,CAAC,EAAGmG,EAAOmQ,EAAQ,GAAG,GAAGzmB,QAuC9C,OA/BA0mB,EAAQzlB,GANRylB,EAAQ,CACN,CAAC,QAASC,EAAOxN,GACjB,CAAC,QAASyN,EAAOzN,IAIC7C,EAAOjV,MAAMge,EAAO,EAAGA,EAAOhI,EAAS,IAG3DqP,EAAQzlB,GAAKylB,EAAO,CAAC,CAAC,QAAS9L,EAAMzB,KAKrCuN,EAAQzlB,GACNylB,EACAlM,GACErB,EAAQhE,OAAOjC,WAAW2T,WAAW1O,KACrC7B,EAAOjV,MAAMge,EAAOhI,EAAS,EAAGoP,EAAQ,GACxCtN,IAKJuN,EAAQzlB,GAAKylB,EAAO,CAClB,CAAC,OAAQ9L,EAAMzB,GACf7C,EAAOmQ,EAAQ,GACfnQ,EAAOmQ,EAAQ,GACf,CAAC,OAAQG,EAAOzN,KAIlBuN,EAAQzlB,GAAKylB,EAAOpQ,EAAOjV,MAAMolB,EAAQ,IAGzCC,EAAQzlB,GAAKylB,EAAO,CAAC,CAAC,OAAQC,EAAOxN,KACrC5G,GAAO+D,EAAQ+I,EAAM/I,EAAO7X,OAAQioB,GAC7BpQ,CACT,EAtIEkE,WAiBF,SAA4BlE,GAC1B,IAAItO,GAAS,EACb,OAASA,EAAQsO,EAAO7X,QAAQ,CAC9B,IAAM6W,EAAQgB,EAAOtO,GAAO,GAEX,eAAfsN,EAAM1T,MACS,cAAf0T,EAAM1T,MACS,aAAf0T,EAAM1T,OAGN0U,EAAO/D,OAAOvK,EAAQ,EAAkB,eAAfsN,EAAM1T,KAAwB,EAAI,GAC3D0T,EAAM1T,KAAO,OACboG,IAEJ,CACA,OAAOsO,CACT,GA7BM8P,GAAoB,CACxBrR,SA4TF,SAA0BT,EAASC,EAAI0D,GACrC,OAYA,SAAuBlO,GAKrB,OAJAuK,EAAQK,MAAM,YACdL,EAAQK,MAAM,kBACdL,EAAQO,QAAQ9K,GAChBuK,EAAQQ,KAAK,kBACNgS,CACT,EAYA,SAASA,EAAe/c,GACtB,OAAO+J,GAA0B/J,GAC7B0W,GAAkBnM,EAASyS,EAA3BtG,CAAyC1W,GACzCgd,EAAahd,EACnB,CAYA,SAASgd,EAAahd,GACpB,OAAa,KAATA,EACKid,EAAYjd,GAEdwV,GACLjL,EACA2S,EACAC,EACA,sBACA,6BACA,mCACA,yBACA,4BACA,GATK3H,CAULxV,EACJ,CAYA,SAASkd,EAAyBld,GAChC,OAAO+J,GAA0B/J,GAC7B0W,GAAkBnM,EAAS6S,EAA3B1G,CAA4C1W,GAC5Cid,EAAYjd,EAClB,CAYA,SAASmd,EAA2Bnd,GAClC,OAAOkO,EAAIlO,EACb,CAYA,SAASod,EAAgBpd,GACvB,OAAa,KAATA,GAAwB,KAATA,GAAwB,KAATA,EACzBuW,GACLhM,EACA8S,EACAnP,EACA,gBACA,sBACA,sBANKqI,CAOLvW,GAEGid,EAAYjd,EACrB,CAYA,SAASqd,EAAmBrd,GAC1B,OAAO+J,GAA0B/J,GAC7B0W,GAAkBnM,EAAS0S,EAA3BvG,CAAwC1W,GACxCid,EAAYjd,EAClB,CAYA,SAASid,EAAYjd,GACnB,OAAa,KAATA,GACFuK,EAAQK,MAAM,kBACdL,EAAQO,QAAQ9K,GAChBuK,EAAQQ,KAAK,kBACbR,EAAQQ,KAAK,YACNP,GAEF0D,EAAIlO,EACb,CACF,GAndMuc,GAAyB,CAC7BvR,SAwdF,SAA+BT,EAASC,EAAI0D,GAC1C,IAAMrC,EAAOvV,KACb,OAYA,SAAuB0J,GACrB,OAAOmW,GAAanjB,KAClB6Y,EACAtB,EACA+S,EACAC,EACA,YACA,kBACA,kBAPKpH,CAQLnW,EACJ,EAYA,SAASsd,EAAmBtd,GAC1B,OAAO6L,EAAKT,OAAOkM,QAAQ9U,SACzBmU,GACE9K,EAAKuE,eAAevE,EAAKU,OAAOV,EAAKU,OAAO7X,OAAS,GAAG,IAAI4C,MAAM,GAAI,KAGtEkT,EAAGxK,GACHkO,EAAIlO,EACV,CAYA,SAASud,EAAqBvd,GAC5B,OAAOkO,EAAIlO,EACb,CACF,GAhhBMyc,GAA8B,CAClCzR,SAqhBF,SAAoCT,EAASC,EAAI0D,GAC/C,OAcA,SAAiClO,GAO/B,OAJAuK,EAAQK,MAAM,aACdL,EAAQK,MAAM,mBACdL,EAAQO,QAAQ9K,GAChBuK,EAAQQ,KAAK,mBACNyS,CACT,EAcA,SAASA,EAAuBxd,GAC9B,OAAa,KAATA,GACFuK,EAAQK,MAAM,mBACdL,EAAQO,QAAQ9K,GAChBuK,EAAQQ,KAAK,mBACbR,EAAQQ,KAAK,aACNP,GAEF0D,EAAIlO,EACb,CACF,GC9lBO,IAAMyd,GAAkB,CAC7B/pB,KAAM,kBACNsX,SAQF,SAAiCT,EAASC,EAAI0D,GAC5C,IAAMrC,EAAOvV,KACb,OAYA,SAAe0J,GAKb,OAJAuK,EAAQK,MAAM,cACdL,EAAQK,MAAM,oBACdL,EAAQO,QAAQ9K,GAChBuK,EAAQQ,KAAK,oBACNuK,CACT,EAYA,SAASA,EAAKtV,GACZ,OAAa,KAATA,GACFuK,EAAQK,MAAM,eACdL,EAAQO,QAAQ9K,GAChBuK,EAAQQ,KAAK,eACbR,EAAQQ,KAAK,cACNuD,GAEFJ,EAAIlO,EACb,CA6BA,SAASsO,EAAMtO,GAMb,OAAgB,KAATA,GAAe,2BAA4B6L,EAAKT,OAAOjC,WAC1D+E,EAAIlO,GACJwK,EAAGxK,EACT,CACF,EAvFEyQ,WAAYuL,GAASvL,YCUhB,SAASiN,GAAkB1d,GAChC,OACW,OAATA,GACA+J,GAA0B/J,IAC1BkK,GAAkBlK,GAEX,EAELiK,GAAmBjK,GACd,OADT,CAGF,CClBO,IAAM2d,GAAY,CACvBjqB,KAAM,YACNsX,SA4KF,SAA2BT,EAASC,GAClC,IAKI8J,EALEsJ,EAAmBtnB,KAAK8U,OAAOjC,WAAWyU,iBAAiBxP,KAC3DnD,EAAW3U,KAAK2U,SAChB5B,EAASqU,GAAkBzS,GAIjC,OAYA,SAAejL,GAGb,OAFAsU,EAAStU,EACTuK,EAAQK,MAAM,qBACP+J,EAAO3U,EAChB,EAYA,SAAS2U,EAAO3U,GACd,GAAIA,IAASsU,EAEX,OADA/J,EAAQO,QAAQ9K,GACT2U,EAET,IAAMpJ,EAAQhB,EAAQQ,KAAK,qBAGrBuD,EAAQoP,GAAkB1d,GAI1BsV,GACHhH,GAAoB,IAAVA,GAAejF,GAAWuU,EAAiBpb,SAASxC,GAC3D0c,GACHrT,GAAsB,IAAXA,GAAgBiF,GAAUsP,EAAiBpb,SAASyI,GAGlE,OAFAM,EAAMsS,MAAQ/gB,QAAmB,KAAXwX,EAAgBgB,EAAOA,IAASjM,IAAWqT,IACjEnR,EAAMuS,OAAShhB,QAAmB,KAAXwX,EAAgBoI,EAAQA,IAAUpO,IAAUgH,IAC5D9K,EAAGxK,EACZ,CACF,EAlOEyQ,WAQF,SAA6BlE,EAAQ6C,GACnC,IAEIkG,EAEAsH,EAEA/L,EAEAkN,EAEAC,EAEApZ,EAEAqZ,EAEA3Q,EAhBArP,GAAS,EAsBb,OAASA,EAAQsO,EAAO7X,QAEtB,GACuB,UAArB6X,EAAOtO,GAAO,IACY,sBAA1BsO,EAAOtO,GAAO,GAAGpG,MACjB0U,EAAOtO,GAAO,GAAG6f,OAKjB,IAHAxI,EAAOrX,EAGAqX,KAEL,GACsB,SAApB/I,EAAO+I,GAAM,IACY,sBAAzB/I,EAAO+I,GAAM,GAAGzd,MAChB0U,EAAO+I,GAAM,GAAGuI,OAEhBzO,EAAQgB,eAAe7D,EAAO+I,GAAM,IAAI/V,WAAW,KACjD6P,EAAQgB,eAAe7D,EAAOtO,GAAO,IAAIsB,WAAW,GACtD,CAKA,IACGgN,EAAO+I,GAAM,GAAGwI,QAAUvR,EAAOtO,GAAO,GAAG4f,SAC3CtR,EAAOtO,GAAO,GAAG1H,IAAI+W,OAASf,EAAOtO,GAAO,GAAGhI,MAAMqX,QAAU,MAE7Df,EAAO+I,GAAM,GAAG/e,IAAI+W,OACnBf,EAAO+I,GAAM,GAAGrf,MAAMqX,OACtBf,EAAOtO,GAAO,GAAG1H,IAAI+W,OACrBf,EAAOtO,GAAO,GAAGhI,MAAMqX,QACzB,GAGF,SAIF1I,EACE2H,EAAO+I,GAAM,GAAG/e,IAAI+W,OAASf,EAAO+I,GAAM,GAAGrf,MAAMqX,OAAS,GAC5Df,EAAOtO,GAAO,GAAG1H,IAAI+W,OAASf,EAAOtO,GAAO,GAAGhI,MAAMqX,OAAS,EAC1D,EACA,EACN,IAAMrX,EAAQ5D,OAAO+T,OAAO,CAAC,EAAGmG,EAAO+I,GAAM,GAAG/e,KAC1CA,EAAMlE,OAAO+T,OAAO,CAAC,EAAGmG,EAAOtO,GAAO,GAAGhI,OAC/CioB,GAAUjoB,GAAQ2O,GAClBsZ,GAAU3nB,EAAKqO,GACfmZ,EAAkB,CAChBlmB,KAAM+M,EAAM,EAAI,iBAAmB,mBACnC3O,MAAAA,EACAM,IAAKlE,OAAO+T,OAAO,CAAC,EAAGmG,EAAO+I,GAAM,GAAG/e,MAEzCynB,EAAkB,CAChBnmB,KAAM+M,EAAM,EAAI,iBAAmB,mBACnC3O,MAAO5D,OAAO+T,OAAO,CAAC,EAAGmG,EAAOtO,GAAO,GAAGhI,OAC1CM,IAAAA,GAEFsa,EAAO,CACLhZ,KAAM+M,EAAM,EAAI,aAAe,eAC/B3O,MAAO5D,OAAO+T,OAAO,CAAC,EAAGmG,EAAO+I,GAAM,GAAG/e,KACzCA,IAAKlE,OAAO+T,OAAO,CAAC,EAAGmG,EAAOtO,GAAO,GAAGhI,QAE1C2mB,EAAQ,CACN/kB,KAAM+M,EAAM,EAAI,SAAW,WAC3B3O,MAAO5D,OAAO+T,OAAO,CAAC,EAAG2X,EAAgB9nB,OACzCM,IAAKlE,OAAO+T,OAAO,CAAC,EAAG4X,EAAgBznB,MAEzCgW,EAAO+I,GAAM,GAAG/e,IAAMlE,OAAO+T,OAAO,CAAC,EAAG2X,EAAgB9nB,OACxDsW,EAAOtO,GAAO,GAAGhI,MAAQ5D,OAAO+T,OAAO,CAAC,EAAG4X,EAAgBznB,KAC3D0nB,EAAa,GAGT1R,EAAO+I,GAAM,GAAG/e,IAAI+W,OAASf,EAAO+I,GAAM,GAAGrf,MAAMqX,SACrD2Q,EAAa/mB,GAAK+mB,EAAY,CAC5B,CAAC,QAAS1R,EAAO+I,GAAM,GAAIlG,GAC3B,CAAC,OAAQ7C,EAAO+I,GAAM,GAAIlG,MAK9B6O,EAAa/mB,GAAK+mB,EAAY,CAC5B,CAAC,QAASrB,EAAOxN,GACjB,CAAC,QAAS2O,EAAiB3O,GAC3B,CAAC,OAAQ2O,EAAiB3O,GAC1B,CAAC,QAASyB,EAAMzB,KAMlB6O,EAAa/mB,GACX+mB,EACAxN,GACErB,EAAQhE,OAAOjC,WAAW2T,WAAW1O,KACrC7B,EAAOjV,MAAMge,EAAO,EAAGrX,GACvBmR,IAKJ6O,EAAa/mB,GAAK+mB,EAAY,CAC5B,CAAC,OAAQpN,EAAMzB,GACf,CAAC,QAAS4O,EAAiB5O,GAC3B,CAAC,OAAQ4O,EAAiB5O,GAC1B,CAAC,OAAQwN,EAAOxN,KAId7C,EAAOtO,GAAO,GAAG1H,IAAI+W,OAASf,EAAOtO,GAAO,GAAGhI,MAAMqX,QACvDA,EAAS,EACT2Q,EAAa/mB,GAAK+mB,EAAY,CAC5B,CAAC,QAAS1R,EAAOtO,GAAO,GAAImR,GAC5B,CAAC,OAAQ7C,EAAOtO,GAAO,GAAImR,MAG7B9B,EAAS,EAEX9E,GAAO+D,EAAQ+I,EAAO,EAAGrX,EAAQqX,EAAO,EAAG2I,GAC3ChgB,EAAQqX,EAAO2I,EAAWvpB,OAAS4Y,EAAS,EAC5C,KACF,CAMNrP,GAAS,EACT,OAASA,EAAQsO,EAAO7X,QACQ,sBAA1B6X,EAAOtO,GAAO,GAAGpG,OACnB0U,EAAOtO,GAAO,GAAGpG,KAAO,QAG5B,OAAO0U,CACT,GAyEA,SAAS2R,GAAUlgB,EAAOsP,GACxBtP,EAAMrI,QAAU2X,EAChBtP,EAAMsP,QAAUA,EAChBtP,EAAMwT,cAAgBlE,CACxB,CCvPO,IAAM6Q,GAAW,CACtBzqB,KAAM,WACNsX,SAOF,SAA0BT,EAASC,EAAI0D,GACrC,IAAIvD,EAAO,EACX,OAcA,SAAe3K,GAMb,OALAuK,EAAQK,MAAM,YACdL,EAAQK,MAAM,kBACdL,EAAQO,QAAQ9K,GAChBuK,EAAQQ,KAAK,kBACbR,EAAQK,MAAM,oBACP0K,CACT,EAcA,SAASA,EAAKtV,GACZ,OAAIsJ,GAAWtJ,IACbuK,EAAQO,QAAQ9K,GACToe,GAEFC,EAAWre,EACpB,CAcA,SAASoe,EAAmBpe,GAE1B,OAAa,KAATA,GAAwB,KAATA,GAAwB,KAATA,GAAewJ,GAAkBxJ,IAEjE2K,EAAO,EACA2T,EAAyBte,IAE3Bqe,EAAWre,EACpB,CAcA,SAASse,EAAyBte,GAChC,OAAa,KAATA,GACFuK,EAAQO,QAAQ9K,GAChB2K,EAAO,EACA4T,IAKG,KAATve,GAAwB,KAATA,GAAwB,KAATA,GAAewJ,GAAkBxJ,KAChE2K,IAAS,IAETJ,EAAQO,QAAQ9K,GACTse,IAET3T,EAAO,EACA0T,EAAWre,GACpB,CAYA,SAASue,EAAUve,GACjB,OAAa,KAATA,GACFuK,EAAQQ,KAAK,oBACbR,EAAQK,MAAM,kBACdL,EAAQO,QAAQ9K,GAChBuK,EAAQQ,KAAK,kBACbR,EAAQQ,KAAK,YACNP,GAII,OAATxK,GAA0B,KAATA,GAAwB,KAATA,GAAe0J,GAAa1J,GACvDkO,EAAIlO,IAEbuK,EAAQO,QAAQ9K,GACTue,EACT,CAYA,SAASF,EAAWre,GAClB,OAAa,KAATA,GACFuK,EAAQO,QAAQ9K,GACTwe,GAEL/U,GAAWzJ,IACbuK,EAAQO,QAAQ9K,GACTqe,GAEFnQ,EAAIlO,EACb,CAYA,SAASwe,EAAiBxe,GACxB,OAAOwJ,GAAkBxJ,GAAQye,EAAWze,GAAQkO,EAAIlO,EAC1D,CAYA,SAASye,EAAWze,GAClB,OAAa,KAATA,GACFuK,EAAQO,QAAQ9K,GAChB2K,EAAO,EACA6T,GAEI,KAATxe,GAEFuK,EAAQQ,KAAK,oBAAoBlT,KAAO,gBACxC0S,EAAQK,MAAM,kBACdL,EAAQO,QAAQ9K,GAChBuK,EAAQQ,KAAK,kBACbR,EAAQQ,KAAK,YACNP,GAEFkU,EAAW1e,EACpB,CAcA,SAAS0e,EAAW1e,GAElB,IAAc,KAATA,GAAewJ,GAAkBxJ,KAAU2K,IAAS,GAAI,CAC3D,IAAMhH,EAAgB,KAAT3D,EAAc0e,EAAaD,EAExC,OADAlU,EAAQO,QAAQ9K,GACT2D,CACT,CACA,OAAOuK,EAAIlO,EACb,CACF,GCzNO,IAAM2e,GAAW,CACtBjrB,KAAM,WACNsX,SAOF,SAA0BT,EAASC,EAAI0D,GACrC,IAEIoG,EAEArW,EAEAqV,EANEzH,EAAOvV,KAOb,OAYA,SAAe0J,GAIb,OAHAuK,EAAQK,MAAM,YACdL,EAAQK,MAAM,gBACdL,EAAQO,QAAQ9K,GACTsV,CACT,EAgBA,SAASA,EAAKtV,GACZ,OAAa,KAATA,GACFuK,EAAQO,QAAQ9K,GACTwY,GAEI,KAATxY,GACFuK,EAAQO,QAAQ9K,GACTyY,GAEI,KAATzY,GACFuK,EAAQO,QAAQ9K,GACT4e,GAILtV,GAAWtJ,IACbuK,EAAQO,QAAQ9K,GACT6e,GAEF3Q,EAAIlO,EACb,CAgBA,SAASwY,EAAgBxY,GACvB,OAAa,KAATA,GACFuK,EAAQO,QAAQ9K,GACT4Y,GAEI,KAAT5Y,GACFuK,EAAQO,QAAQ9K,GAChB/B,EAAQ,EACD4a,GAELvP,GAAWtJ,IACbuK,EAAQO,QAAQ9K,GACTlI,GAEFoW,EAAIlO,EACb,CAYA,SAAS4Y,EAAkB5Y,GACzB,OAAa,KAATA,GACFuK,EAAQO,QAAQ9K,GACT8e,GAEF5Q,EAAIlO,EACb,CAYA,SAAStI,EAAQsI,GACf,OAAa,OAATA,EACKkO,EAAIlO,GAEA,KAATA,GACFuK,EAAQO,QAAQ9K,GACT+e,GAELjV,GAAmB9J,IACrBsT,EAAc5b,EACPsnB,EAAiBhf,KAE1BuK,EAAQO,QAAQ9K,GACTtI,EACT,CAYA,SAASqnB,EAAa/e,GACpB,OAAa,KAATA,GACFuK,EAAQO,QAAQ9K,GACT8e,GAEFpnB,EAAQsI,EACjB,CAYA,SAAS8e,EAAW9e,GAClB,OAAgB,KAATA,EACHzJ,EAAIyJ,GACK,KAATA,EACA+e,EAAa/e,GACbtI,EAAQsI,EACd,CAYA,SAAS6Y,EAAgB7Y,GACvB,IAAMnM,EAAQ,SACd,OAAImM,IAASnM,EAAM0L,WAAWtB,MAC5BsM,EAAQO,QAAQ9K,GACCnM,IAAVoK,EAAyBghB,EAAQpG,GAEnC3K,EAAIlO,EACb,CAYA,SAASif,EAAMjf,GACb,OAAa,OAATA,EACKkO,EAAIlO,GAEA,KAATA,GACFuK,EAAQO,QAAQ9K,GACTkf,GAELpV,GAAmB9J,IACrBsT,EAAc2L,EACPD,EAAiBhf,KAE1BuK,EAAQO,QAAQ9K,GACTif,EACT,CAYA,SAASC,EAAWlf,GAClB,OAAa,KAATA,GACFuK,EAAQO,QAAQ9K,GACTmf,GAEFF,EAAMjf,EACf,CAYA,SAASmf,EAASnf,GAChB,OAAa,KAATA,EACKzJ,EAAIyJ,GAEA,KAATA,GACFuK,EAAQO,QAAQ9K,GACTmf,GAEFF,EAAMjf,EACf,CAYA,SAASlI,EAAYkI,GACnB,OAAa,OAATA,GAA0B,KAATA,EACZzJ,EAAIyJ,GAET8J,GAAmB9J,IACrBsT,EAAcxb,EACPknB,EAAiBhf,KAE1BuK,EAAQO,QAAQ9K,GACTlI,EACT,CAYA,SAAS8mB,EAAY5e,GACnB,OAAa,OAATA,EACKkO,EAAIlO,GAEA,KAATA,GACFuK,EAAQO,QAAQ9K,GACTof,GAELtV,GAAmB9J,IACrBsT,EAAcsL,EACPI,EAAiBhf,KAE1BuK,EAAQO,QAAQ9K,GACT4e,EACT,CAYA,SAASQ,EAAiBpf,GACxB,OAAgB,KAATA,EAAczJ,EAAIyJ,GAAQ4e,EAAY5e,EAC/C,CAYA,SAASyY,EAAczY,GAErB,OAAIsJ,GAAWtJ,IACbuK,EAAQO,QAAQ9K,GACTqf,GAEFnR,EAAIlO,EACb,CAYA,SAASqf,EAASrf,GAEhB,OAAa,KAATA,GAAewJ,GAAkBxJ,IACnCuK,EAAQO,QAAQ9K,GACTqf,GAEFC,EAAgBtf,EACzB,CAYA,SAASsf,EAAgBtf,GACvB,OAAI8J,GAAmB9J,IACrBsT,EAAcgM,EACPN,EAAiBhf,IAEtBgK,GAAchK,IAChBuK,EAAQO,QAAQ9K,GACTsf,GAEF/oB,EAAIyJ,EACb,CAYA,SAAS6e,EAAQ7e,GAEf,OAAa,KAATA,GAAewJ,GAAkBxJ,IACnCuK,EAAQO,QAAQ9K,GACT6e,GAEI,KAAT7e,GAAwB,KAATA,GAAe+J,GAA0B/J,GACnDuf,EAAevf,GAEjBkO,EAAIlO,EACb,CAYA,SAASuf,EAAevf,GACtB,OAAa,KAATA,GACFuK,EAAQO,QAAQ9K,GACTzJ,GAII,KAATyJ,GAAwB,KAATA,GAAesJ,GAAWtJ,IAC3CuK,EAAQO,QAAQ9K,GACTwf,GAEL1V,GAAmB9J,IACrBsT,EAAciM,EACPP,EAAiBhf,IAEtBgK,GAAchK,IAChBuK,EAAQO,QAAQ9K,GACTuf,GAEFhpB,EAAIyJ,EACb,CAYA,SAASwf,EAAqBxf,GAE5B,OACW,KAATA,GACS,KAATA,GACS,KAATA,GACS,KAATA,GACAwJ,GAAkBxJ,IAElBuK,EAAQO,QAAQ9K,GACTwf,GAEFC,EAA0Bzf,EACnC,CAaA,SAASyf,EAA0Bzf,GACjC,OAAa,KAATA,GACFuK,EAAQO,QAAQ9K,GACT0f,GAEL5V,GAAmB9J,IACrBsT,EAAcmM,EACPT,EAAiBhf,IAEtBgK,GAAchK,IAChBuK,EAAQO,QAAQ9K,GACTyf,GAEFF,EAAevf,EACxB,CAaA,SAAS0f,EAA4B1f,GACnC,OACW,OAATA,GACS,KAATA,GACS,KAATA,GACS,KAATA,GACS,KAATA,EAEOkO,EAAIlO,GAEA,KAATA,GAAwB,KAATA,GACjBuK,EAAQO,QAAQ9K,GAChBsU,EAAStU,EACF2f,GAEL7V,GAAmB9J,IACrBsT,EAAcoM,EACPV,EAAiBhf,IAEtBgK,GAAchK,IAChBuK,EAAQO,QAAQ9K,GACT0f,IAETnV,EAAQO,QAAQ9K,GACT4f,EACT,CAYA,SAASD,EAA4B3f,GACnC,OAAIA,IAASsU,GACX/J,EAAQO,QAAQ9K,GAChBsU,OAAS9V,EACFqhB,GAEI,OAAT7f,EACKkO,EAAIlO,GAET8J,GAAmB9J,IACrBsT,EAAcqM,EACPX,EAAiBhf,KAE1BuK,EAAQO,QAAQ9K,GACT2f,EACT,CAYA,SAASC,EAA8B5f,GACrC,OACW,OAATA,GACS,KAATA,GACS,KAATA,GACS,KAATA,GACS,KAATA,GACS,KAATA,EAEOkO,EAAIlO,GAEA,KAATA,GAAwB,KAATA,GAAe+J,GAA0B/J,GACnDuf,EAAevf,IAExBuK,EAAQO,QAAQ9K,GACT4f,EACT,CAaA,SAASC,EAAiC7f,GACxC,OAAa,KAATA,GAAwB,KAATA,GAAe+J,GAA0B/J,GACnDuf,EAAevf,GAEjBkO,EAAIlO,EACb,CAYA,SAASzJ,EAAIyJ,GACX,OAAa,KAATA,GACFuK,EAAQO,QAAQ9K,GAChBuK,EAAQQ,KAAK,gBACbR,EAAQQ,KAAK,YACNP,GAEF0D,EAAIlO,EACb,CAgBA,SAASgf,EAAiBhf,GAKxB,OAJAuK,EAAQQ,KAAK,gBACbR,EAAQK,MAAM,cACdL,EAAQO,QAAQ9K,GAChBuK,EAAQQ,KAAK,cACN+U,CACT,CAgBA,SAASA,EAAgB9f,GAGvB,OAAOgK,GAAchK,GACjBsK,GACEC,EACAwV,EACA,aACAlU,EAAKT,OAAOjC,WAAWgF,QAAQC,KAAK5L,SAAS,qBACzChE,EACA,EANN8L,CAOEtK,GACF+f,EAAsB/f,EAC5B,CAgBA,SAAS+f,EAAsB/f,GAE7B,OADAuK,EAAQK,MAAM,gBACP0I,EAAYtT,EACrB,CACF,GC9rBO,IAAMggB,GAAiB,CAC5BtsB,KAAM,iBACNsX,SAQF,SAAgCT,EAASC,EAAI0D,GAC3C,IAAMrC,EAAOvV,KACb,OAYA,SAAe0J,GAMb,OALAuK,EAAQK,MAAM,aACdL,EAAQK,MAAM,eACdL,EAAQO,QAAQ9K,GAChBuK,EAAQQ,KAAK,eACbR,EAAQQ,KAAK,aACNuD,CACT,EAGA,SAASA,EAAMtO,GAKb,OAAgB,KAATA,GAAe,2BAA4B6L,EAAKT,OAAOjC,WAC1D+E,EAAIlO,GACJwK,EAAGxK,EACT,CACF,EAxCEyQ,WAAYuL,GAASvL,YCJhB,IAAMwP,GAAkB,CAC7BvsB,KAAM,kBACNsX,SAOF,SAAiCT,EAASC,EAAI0D,GAC5C,OAaA,SAAelO,GAGb,OAFAuK,EAAQK,MAAM,mBACdL,EAAQO,QAAQ9K,GACTsO,CACT,EAaA,SAASA,EAAMtO,GACb,OAAI8J,GAAmB9J,IACrBuK,EAAQQ,KAAK,mBACNP,EAAGxK,IAELkO,EAAIlO,EACb,CACF,GC5CO,UAAMkgB,GAAW,CACtBxsB,KAAM,WACNsX,SA8EF,SAA0BT,EAASC,EAAI0D,GACrC,IAGIvD,EAEAY,EAJAoP,EAAW,EAKf,OAcA,SAAe3a,GAGb,OAFAuK,EAAQK,MAAM,YACdL,EAAQK,MAAM,oBACPkN,EAAa9X,EACtB,EAYA,SAAS8X,EAAa9X,GACpB,OAAa,KAATA,GACFuK,EAAQO,QAAQ9K,GAChB2a,IACO7C,IAETvN,EAAQQ,KAAK,oBACNoV,EAAQngB,GACjB,CAYA,SAASmgB,EAAQngB,GAEf,OAAa,OAATA,EACKkO,EAAIlO,GAMA,KAATA,GACFuK,EAAQK,MAAM,SACdL,EAAQO,QAAQ9K,GAChBuK,EAAQQ,KAAK,SACNoV,GAII,KAATngB,GACFuL,EAAQhB,EAAQK,MAAM,oBACtBD,EAAO,EACA+P,EAAc1a,IAEnB8J,GAAmB9J,IACrBuK,EAAQK,MAAM,cACdL,EAAQO,QAAQ9K,GAChBuK,EAAQQ,KAAK,cACNoV,IAIT5V,EAAQK,MAAM,gBACPzI,EAAKnC,GACd,CAYA,SAASmC,EAAKnC,GACZ,OACW,OAATA,GACS,KAATA,GACS,KAATA,GACA8J,GAAmB9J,IAEnBuK,EAAQQ,KAAK,gBACNoV,EAAQngB,KAEjBuK,EAAQO,QAAQ9K,GACTmC,EACT,CAYA,SAASuY,EAAc1a,GAErB,OAAa,KAATA,GACFuK,EAAQO,QAAQ9K,GAChB2K,IACO+P,GAIL/P,IAASgQ,GACXpQ,EAAQQ,KAAK,oBACbR,EAAQQ,KAAK,YACNP,EAAGxK,KAIZuL,EAAM1T,KAAO,eACNsK,EAAKnC,GACd,CACF,EA7NEqH,QAMF,SAAyBkF,GACvB,IAGItO,EAEA2M,EALAwV,EAAgB7T,EAAO7X,OAAS,EAChC2rB,EAAiB,EAOrB,IACsC,eAAnC9T,EAAO8T,GAAgB,GAAGxoB,MACU,UAAnC0U,EAAO8T,GAAgB,GAAGxoB,QACO,eAAlC0U,EAAO6T,GAAe,GAAGvoB,MACU,UAAlC0U,EAAO6T,GAAe,GAAGvoB,MAK3B,IAHAoG,EAAQoiB,IAGCpiB,EAAQmiB,GACf,GAA8B,iBAA1B7T,EAAOtO,GAAO,GAAGpG,KAAyB,CAE5C0U,EAAO8T,GAAgB,GAAGxoB,KAAO,kBACjC0U,EAAO6T,GAAe,GAAGvoB,KAAO,kBAChCwoB,GAAkB,EAClBD,GAAiB,EACjB,KACF,CAKJniB,EAAQoiB,EAAiB,EACzBD,IACA,OAASniB,GAASmiB,QACF5hB,IAAVoM,EACE3M,IAAUmiB,GAA2C,eAA1B7T,EAAOtO,GAAO,GAAGpG,OAC9C+S,EAAQ3M,GAGVA,IAAUmiB,GACgB,eAA1B7T,EAAOtO,GAAO,GAAGpG,OAEjB0U,EAAO3B,GAAO,GAAG/S,KAAO,eACpBoG,IAAU2M,EAAQ,IACpB2B,EAAO3B,GAAO,GAAGrU,IAAMgW,EAAOtO,EAAQ,GAAG,GAAG1H,IAC5CgW,EAAO/D,OAAOoC,EAAQ,EAAG3M,EAAQ2M,EAAQ,GACzCwV,GAAiBniB,EAAQ2M,EAAQ,EACjC3M,EAAQ2M,EAAQ,GAElBA,OAAQpM,GAGZ,OAAO+N,CACT,EA1DEtB,SAgEF,SAAkBjL,GAEhB,OACW,KAATA,GACgD,oBAAhD1J,KAAKiW,OAAOjW,KAAKiW,OAAO7X,OAAS,GAAG,GAAGmD,IAE3C,GCzDO,IAAM4T,IAAQ6U,GAAG,CAAC,GAAJC,EAAAA,GAAAA,IAAAA,EAAAA,GAAAA,IAAAA,EAAAA,GAAAA,IAAAA,EAAAA,GAAAA,IAAAA,EAAAA,GAAAA,IAAAA,EAAAA,GAAAA,IAAAA,EAAAA,GAAAA,IAAAA,EAAAA,GAAAA,IAAAA,EAAAA,GAAAA,IAAAA,EAAAA,GAAAA,GAAAD,GAClB,GAAK7X,IACL,GAAKA,IACL,GAAKA,IACL,GAAKA,IACL,GAAKA,IACL,GAAKA,IACL,GAAKA,IACL,GAAKA,IACL,GAAKA,IACL,GAAKA,KAAI8X,EAAAA,GAAAA,IAAAA,EAAAA,GAAAA,IAAAA,EAAAA,GAAAA,IAAAA,EAAAA,GAAAA,GAAAD,GACT,GAAK7X,IACL,GAAKA,IACL,GAAKA,IACL,GAAK4M,KAIKhK,IAAckV,EAAAA,GAAAA,GAAA,GACxB,GAAKzJ,IAIKxG,IAAWiQ,EAAAA,GAAAA,IAAAA,EAAAA,GAAAA,IAAAA,EAAAA,GAAAA,GAAA,IACpB,EAAI7I,KACJ,EAAIA,IACL,GAAKA,IAIKlK,IAAI+S,EAAAA,GAAAA,IAAAA,EAAAA,GAAAA,IAAAA,EAAAA,GAAAA,IAAAA,EAAAA,GAAAA,IAAAA,EAAAA,GAAAA,IAAAA,EAAAA,GAAAA,IAAAA,EAAAA,GAAAA,IAAAA,EAAAA,GAAAA,GAAA,GACd,GAAK1I,IACL,GAAKxD,IACL,GAAK,CAAC2D,GAAiB3D,KACvB,GAAKgE,IACL,GAAKL,IACL,GAAK3D,IACL,GAAKiG,IACL,IAAMA,IAII3J,IAAM4P,EAAAA,GAAAA,IAAAA,EAAAA,GAAAA,GAAA,GAChB,GAAK9E,IACL,GAAKK,IAIKjL,IAAI2P,GAAG,CAAC,GAAJD,EAAAA,GAAAA,IAAAA,EAAAA,GAAAA,IAAAA,EAAAA,GAAAA,IAAAA,EAAAA,GAAAA,IAAAA,EAAAA,GAAAA,IAAAA,EAAAA,GAAAA,IAAAA,EAAAA,GAAAA,IAAAA,EAAAA,GAAAA,IAAAA,EAAAA,GAAAA,IAAAA,EAAAA,GAAAA,GAAAC,IACb,EAAIzE,KACJ,EAAIA,KACJ,EAAIA,IACL,GAAK0B,IACL,GAAKhC,IACL,GAAKkC,IACL,GAAK,CAACQ,GAAUQ,KAChB,GAAKqB,IACL,GAAK,CAACC,GAAiBnE,KACvB,GAAKE,KAAQuE,EAAAA,GAAAA,IAAAA,EAAAA,GAAAA,GAAAC,GACb,GAAK7C,IACL,GAAKuC,KAIKpD,GAAa,CACxB1O,KAAM,CAACuP,GAAW8C,KAIP7C,GAAmB,CAC9BxP,KAAM,CAAC,GAAI,KAIAD,GAAU,CACrBC,KAAM,ICpFD,SAAS7S,GAAM9H,GACpB,IAAMuS,EAAWvS,GAAW,CAAC,EACvB0V,E1CHD,SAA2BuX,GAKhC,IAHA,IAAMpY,EAAM,CAAC,EACTrK,GAAS,IAEJA,EAAQyiB,EAAWhsB,QAC1BoU,GAAgBR,EAAKoY,EAAWziB,IAGlC,OAAOqK,CACT,C0CLIqY,CAAkB,CAACC,GAAiBlc,QAAAtI,EAAAA,EAAAA,GAAM4J,EAAS0a,YAAc,MAG7DtV,EAAS,CACbkM,QAAS,GACTlK,KAAM,CAAC,EACPjE,WAAAA,EACA1S,QAAS6G,EAAO7G,IAChBgV,SAAUnO,EAAOmO,IACjB+B,KAAMlQ,EAAOkQ,IACbmD,OAAQrT,EAAOqT,IACfE,KAAMvT,EAAOuT,KAEf,OAAOzF,EAKP,SAAS9N,EAAO+S,GACd,OAEA,SAAiBlU,GACf,OAAOsV,GAAgBrG,EAAQiF,EAASlU,EAC1C,CACF,CACF,CClCA,IAAM0kB,GAAS,cCDR,SAASC,GAAgCjtB,EAAOkR,GACrD,IAAM/E,EAAO8F,OAAOib,SAASltB,EAAOkR,GACpC,OAEE/E,EAAO,GACE,KAATA,GACCA,EAAO,IAAMA,EAAO,IAEpBA,EAAO,KAAOA,EAAO,KAErBA,EAAO,OAASA,EAAO,OAEvBA,EAAO,OAASA,EAAO,OACL,SAAX,MAAPA,IACkB,SAAX,MAAPA,IAEDA,EAAO,QAEA,SAEF+G,OAAOsD,aAAarK,EAC7B,CCjCA,IAAMghB,GACJ,oEAwBF,SAASC,GAAOC,EAAIC,EAAIC,GACtB,GAAID,EAEF,OAAOA,EAKT,GAAa,KADAC,EAAG7hB,WAAW,GACV,CACf,IAAMsT,EAAOuO,EAAG7hB,WAAW,GACrB8hB,EAAe,MAATxO,GAAyB,KAATA,EAC5B,OAAOiO,GAAgCM,EAAG9pB,MAAM+pB,EAAM,EAAI,GAAIA,EAAM,GAAK,GAC3E,CACA,OAAO7F,GAA8B4F,IAAOF,CAC9C,CCkHA,IAAM3b,GAAM,CAAC,EAAEhT,eAYF+uB,GAcX,SAAUztB,EAAO+O,EAAUnP,GAKzB,MAJwB,kBAAbmP,IACTnP,EAAUmP,EACVA,OAAWpE,GAcjB,SAAkB/K,GAEhB,IAAM8tB,EAAS,CACbC,WAAY,GACZC,eAAgB,CAAC,WAAY,WAAY,UAAW,YAAa,UACjE7W,MAAO,CACLuT,SAAUuD,EAAOC,IACjBC,iBAAkBC,EAClBC,cAAeD,EACfE,WAAYL,EAAOxJ,IACnB7C,WAAYqM,EAAOrM,GACnByG,gBAAiB+F,EACjBpG,mBAAoBoG,EACpBvH,WAAYoH,EAAOM,GACnBC,oBAAqB/f,EACrBggB,oBAAqBhgB,EACrBwV,aAAcgK,EAAOM,EAAU9f,GAC/Bge,SAAUwB,EAAOxB,EAAUhe,GAC3BigB,aAAcN,EACd1f,KAAM0f,EACNO,cAAeP,EACf/K,WAAY4K,EAAO5K,GACnBuL,4BAA6BngB,EAC7BogB,sBAAuBpgB,EACvBqgB,sBAAuBrgB,EACvBsgB,SAAUd,EAAOc,IACjBvC,gBAAiByB,EAAOe,IACxBC,kBAAmBhB,EAAOe,IAC1BpK,SAAUqJ,EAAOiB,GAAMzgB,GACvB0gB,aAAcf,EACdlD,SAAU+C,EAAOiB,GAAMzgB,GACvB2gB,aAAchB,EACdiB,MAAOpB,EAAOoB,IACdjG,MAAO3a,EACPyf,KAAMD,EAAOC,IACboB,SAAUrB,EAAOqB,IACjBC,cAAeC,EACfC,YAAaxB,EAAOjZ,GAAM0a,GAC1BC,cAAe1B,EAAOjZ,IACtBwP,UAAWyJ,EAAOzJ,IAClBoL,UAAWC,EACXC,gBAAiBrhB,EACjBshB,0BAA2BthB,EAC3BuhB,oBAAqBvhB,EACrBwhB,cAAehC,EAAOxJ,IACtByL,OAAQjC,EAAOiC,IACftP,cAAeqN,EAAOrN,KAExBtJ,KAAM,CACJgX,WAAY6B,IACZC,mBAAoBC,EACpB3F,SAAUyF,IACV9B,cAAeiC,EACfnC,iBAAkBoC,EAClB3O,WAAYuO,IACZK,qBAAsBC,EACtBC,oCAAqCC,EACrCC,gCAAiCD,EACjCE,wBAAyBC,EACzBjK,WAAYsJ,EAAOY,GACnBC,gBAAiBC,EACjBzC,oBAAqB0C,EACrBzC,oBAAqB0C,EACrBxC,cAAe8B,EACfxM,aAAckM,EAAOiB,GACrB3E,SAAU0D,EAAOkB,GACjB3C,aAAc+B,EACd/hB,KAAM+hB,EACNpN,WAAY8M,IACZvB,4BAA6B0C,EAC7BzC,sBAAuB0C,EACvBzC,sBAAuB0C,EACvBzC,SAAUoB,IACV3D,gBAAiB2D,EAAOsB,GACxBxC,kBAAmBkB,EAAOsB,GAC1B7M,SAAUuL,EAAOuB,GACjBvC,aAAcsB,EACdvF,SAAUiF,EAAOwB,GACjBvC,aAAcqB,EACdpB,MAAOc,EAAOyB,GACdxI,MAAOyI,EACPC,UAAWC,EACXzJ,WAAY0J,EACZ9D,KAAMiC,EAAO8B,GACb3C,SAAUa,IACVV,YAAaU,IACbR,cAAeQ,IACf3L,UAAW2L,IACXL,gBAAiBoC,EACjBnC,0BAA2BoC,EAC3BnC,oBAAqBoC,EACrBC,SAAUC,EACVrC,cAAeE,EAAOoC,GACtBC,0BAA2BC,EAC3BC,kBAAmBC,EACnBzC,OAAQC,IACRvP,cAAeuP,MAGnByC,GAAU9E,GAAS9tB,GAAW,CAAC,GAAG6yB,iBAAmB,IAGrD,IAAMnkB,EAAO,CAAC,EACd,OAAO+E,EAUP,SAASA,EAAQqF,GAqBf,IAnBA,IAAIhF,EAAO,CACT1P,KAAM,OACN0Q,SAAU,IAGN6G,EAAU,CACd1Q,MAAO,CAAC6I,GACRgf,WAAY,GACZhF,OAAAA,EACA3W,MAAAA,EACAG,KAAAA,EACA7I,OAAAA,EACAskB,OAAAA,EACAC,QAAAA,EACAC,QAAAA,GAGIC,EAAY,GACd1oB,GAAS,IACJA,EAAQsO,EAAO7X,QAAQ,CAG9B,GAC4B,gBAA1B6X,EAAOtO,GAAO,GAAGpG,MACS,kBAA1B0U,EAAOtO,GAAO,GAAGpG,KAEjB,GAAyB,UAArB0U,EAAOtO,GAAO,GAChB0oB,EAAUzvB,KAAK+G,QAGfA,EAAQ2oB,EAAYra,EADPoa,EAAUjjB,MACWzF,EAGxC,CAEA,IADAA,GAAS,IACAA,EAAQsO,EAAO7X,QAAQ,CAC9B,IAAMmyB,EAAUtF,EAAOhV,EAAOtO,GAAO,IACjCsH,GAAIvS,KAAK6zB,EAASta,EAAOtO,GAAO,GAAGpG,OACrCgvB,EAAQta,EAAOtO,GAAO,GAAGpG,MAAM7E,KAC7BX,OAAO+T,OACL,CACEgK,eAAgB7D,EAAOtO,GAAO,GAAGmS,gBAEnChB,GAEF7C,EAAOtO,GAAO,GAGpB,CAGA,GAAImR,EAAQmX,WAAW7xB,OAAS,EAAG,CACjC,IAAMyb,EAAOf,EAAQmX,WAAWnX,EAAQmX,WAAW7xB,OAAS,IAC5Cyb,EAAK,IAAM2W,IACnB9zB,KAAKoc,OAAS5Q,EAAW2R,EAAK,GACxC,CA0BA,IAvBA5I,EAAKvR,SAAW,CACdC,MAAO+H,GACLuO,EAAO7X,OAAS,EACZ6X,EAAO,GAAG,GAAGtW,MACb,CACEC,KAAM,EACNP,OAAQ,EACR2X,OAAQ,IAGhB/W,IAAKyH,GACHuO,EAAO7X,OAAS,EACZ6X,EAAOA,EAAO7X,OAAS,GAAG,GAAG6B,IAC7B,CACEL,KAAM,EACNP,OAAQ,EACR2X,OAAQ,KAMlBrP,GAAS,IACAA,EAAQsjB,EAAOC,WAAW9sB,QACjC6S,EAAOga,EAAOC,WAAWvjB,GAAOsJ,IAASA,EAE3C,OAAOA,CACT,CAQA,SAASqf,EAAYra,EAAQtW,EAAOvB,GAYlC,IAXA,IAIIquB,EAEArU,EAEAqY,EAEArS,EAVAzW,EAAQhI,EAAQ,EAChB+wB,GAAoB,EACpBC,GAAa,IASRhpB,GAASvJ,GAAQ,CACxB,IAAM+Z,EAAQlC,EAAOtO,GAmCrB,GAjCoB,kBAAlBwQ,EAAM,GAAG5W,MACS,gBAAlB4W,EAAM,GAAG5W,MACS,eAAlB4W,EAAM,GAAG5W,MAEQ,UAAb4W,EAAM,GACRuY,IAEAA,IAEFtS,OAAWlW,GACgB,oBAAlBiQ,EAAM,GAAG5W,KACD,UAAb4W,EAAM,MAENsU,GACCrO,GACAsS,GACAD,IAEDA,EAAsB9oB,GAExByW,OAAWlW,GAGK,eAAlBiQ,EAAM,GAAG5W,MACS,kBAAlB4W,EAAM,GAAG5W,MACS,mBAAlB4W,EAAM,GAAG5W,MACS,mBAAlB4W,EAAM,GAAG5W,MACS,6BAAlB4W,EAAM,GAAG5W,OAIT6c,OAAWlW,IAGTwoB,GACa,UAAbvY,EAAM,IACY,mBAAlBA,EAAM,GAAG5W,OACY,IAAtBmvB,GACc,SAAbvY,EAAM,KACa,kBAAlBA,EAAM,GAAG5W,MACU,gBAAlB4W,EAAM,GAAG5W,MACb,CACA,GAAIkrB,EAAU,CACZ,IAAImE,EAAYjpB,EAEhB,IADAyQ,OAAYlQ,EACL0oB,KAAa,CAClB,IAAMC,EAAY5a,EAAO2a,GACzB,GACwB,eAAtBC,EAAU,GAAGtvB,MACS,oBAAtBsvB,EAAU,GAAGtvB,KACb,CACA,GAAqB,SAAjBsvB,EAAU,GAAe,SACzBzY,IACFnC,EAAOmC,GAAW,GAAG7W,KAAO,kBAC5BovB,GAAa,GAEfE,EAAU,GAAGtvB,KAAO,aACpB6W,EAAYwY,CACd,MAAO,GACiB,eAAtBC,EAAU,GAAGtvB,MACS,qBAAtBsvB,EAAU,GAAGtvB,MACS,+BAAtBsvB,EAAU,GAAGtvB,MACS,qBAAtBsvB,EAAU,GAAGtvB,MACS,mBAAtBsvB,EAAU,GAAGtvB,KAIb,KAEJ,CAEEkvB,KACErY,GAAaqY,EAAsBrY,KAErCqU,EAASqE,SAAU,GAIrBrE,EAASxsB,IAAMlE,OAAO+T,OACpB,CAAC,EACDsI,EAAYnC,EAAOmC,GAAW,GAAGzY,MAAQwY,EAAM,GAAGlY,KAEpDgW,EAAO/D,OAAOkG,GAAazQ,EAAO,EAAG,CAAC,OAAQ8kB,EAAUtU,EAAM,KAC9DxQ,IACAvJ,GACF,CAGsB,mBAAlB+Z,EAAM,GAAG5W,OACXkrB,EAAW,CACTlrB,KAAM,WACNuvB,SAAS,EACTnxB,MAAO5D,OAAO+T,OAAO,CAAC,EAAGqI,EAAM,GAAGxY,OAElCM,SAAKiI,GAGP+N,EAAO/D,OAAOvK,EAAO,EAAG,CAAC,QAAS8kB,EAAUtU,EAAM,KAClDxQ,IACAvJ,IACAqyB,OAAsBvoB,EACtBkW,GAAW,EAEf,CACF,CAEA,OADAnI,EAAOtW,GAAO,GAAGmxB,QAAUH,EACpBvyB,CACT,CAcA,SAAS+xB,EAAQtzB,EAAKU,GACpBsO,EAAKhP,GAAOU,CACd,CAYA,SAAS6yB,EAAQvzB,GACf,OAAOgP,EAAKhP,EACd,CAYA,SAASuuB,EAAOpkB,EAAQ+pB,GACtB,OAAO/R,EAOP,SAASA,EAAK/J,GACZX,EAAM5X,KAAKsD,KAAMgH,EAAOiO,GAAQA,GAC5B8b,GAAKA,EAAIr0B,KAAKsD,KAAMiV,EAC1B,CACF,CAMA,SAASrJ,IACP5L,KAAKoI,MAAMxH,KAAK,CACdW,KAAM,WACN0Q,SAAU,IAEd,CAgBA,SAASqC,EAAMzU,EAAMoV,EAAO+b,GAU1B,OATehxB,KAAKoI,MAAMpI,KAAKoI,MAAMhK,OAAS,GAEvC6T,SAASrR,KAAKf,GACrBG,KAAKoI,MAAMxH,KAAKf,GAChBG,KAAKiwB,WAAWrvB,KAAK,CAACqU,EAAO+b,IAE7BnxB,EAAKH,SAAW,CACdC,MAAO+H,GAAMuN,EAAMtV,QAEdE,CACT,CAUA,SAASytB,EAAOyD,GACd,OAAO3K,EAOP,SAASA,EAAMnR,GACT8b,GAAKA,EAAIr0B,KAAKsD,KAAMiV,GACxBR,EAAK/X,KAAKsD,KAAMiV,EAClB,CACF,CAYA,SAASR,EAAKQ,EAAOgc,GACnB,IAAMpxB,EAAOG,KAAKoI,MAAMgF,MAClB4R,EAAOhf,KAAKiwB,WAAW7iB,MAC7B,IAAK4R,EACH,MAAM,IAAIxe,MACR,iBACEyU,EAAM1T,KACN,MACAkG,EAAkB,CAChB9H,MAAOsV,EAAMtV,MACbM,IAAKgV,EAAMhV,MAEb,yBAWN,OATW+e,EAAK,GAAGzd,OAAS0T,EAAM1T,OAC5B0vB,EACFA,EAAYv0B,KAAKsD,KAAMiV,EAAO+J,EAAK,KAEnBA,EAAK,IAAMwR,IACnB9zB,KAAKsD,KAAMiV,EAAO+J,EAAK,KAGnCnf,EAAKH,SAASO,IAAMyH,GAAMuN,EAAMhV,KACzBJ,CACT,CAMA,SAASqwB,IACP,OhDlpBG,SAAkB3yB,EAAOJ,GAC9B,IAAMuS,EAAWvS,GAAWwU,EAQ5B,OAAOC,EAAIrU,EAN2B,mBAA7BmS,EAASmC,iBACZnC,EAASmC,gBAGmB,mBAAzBnC,EAASoC,aAA4BpC,EAASoC,YAGzD,CgDwoBW3V,CAAS6D,KAAKoI,MAAMgF,MAC7B,CAUA,SAASyf,IACPsD,EAAQ,+BAA+B,EACzC,CAMA,SAASxD,EAAqB1X,GACxBmb,EAAQ,iCACOpwB,KAAKoI,MAAMpI,KAAKoI,MAAMhK,OAAS,GACvCuB,MAAQ6P,OAAOib,SAASzqB,KAAK8Z,eAAe7E,GAAQ,IAC7Dkb,EAAQ,+BAEZ,CAMA,SAAS9B,IACP,IAAMxiB,EAAO7L,KAAKkwB,SACLlwB,KAAKoI,MAAMpI,KAAKoI,MAAMhK,OAAS,GACvC8yB,KAAOrlB,CACd,CAMA,SAASyiB,IACP,IAAMziB,EAAO7L,KAAKkwB,SACLlwB,KAAKoI,MAAMpI,KAAKoI,MAAMhK,OAAS,GACvCwmB,KAAO/Y,CACd,CAMA,SAASuiB,IAEHgC,EAAQ,oBACZpwB,KAAK4L,SACLukB,EAAQ,kBAAkB,GAC5B,CAMA,SAASjC,IACP,IAAMriB,EAAO7L,KAAKkwB,SACLlwB,KAAKoI,MAAMpI,KAAKoI,MAAMhK,OAAS,GACvCb,MAAQsO,EAAK5M,QAAQ,2BAA4B,IACtDkxB,EAAQ,iBACV,CAMA,SAAS5B,IACP,IAAM1iB,EAAO7L,KAAKkwB,SACLlwB,KAAKoI,MAAMpI,KAAKoI,MAAMhK,OAAS,GACvCb,MAAQsO,EAAK5M,QAAQ,eAAgB,GAC5C,CAMA,SAASyvB,EAA4BzZ,GACnC,IAAMsR,EAAQvmB,KAAKkwB,SACbrwB,EAAOG,KAAKoI,MAAMpI,KAAKoI,MAAMhK,OAAS,GAC5CyB,EAAK0mB,MAAQA,EACb1mB,EAAK4gB,WAAaJ,GAChBrgB,KAAK8Z,eAAe7E,IACpBqL,aACJ,CAMA,SAASqO,IACP,IAAM9iB,EAAO7L,KAAKkwB,SACLlwB,KAAKoI,MAAMpI,KAAKoI,MAAMhK,OAAS,GACvC+yB,MAAQtlB,CACf,CAMA,SAAS4iB,IACP,IAAM5iB,EAAO7L,KAAKkwB,SACLlwB,KAAKoI,MAAMpI,KAAKoI,MAAMhK,OAAS,GACvCsK,IAAMmD,CACb,CAMA,SAAS2hB,EAAyBvY,GAChC,IAAMpV,EAAOG,KAAKoI,MAAMpI,KAAKoI,MAAMhK,OAAS,GAC5C,IAAKyB,EAAKuxB,MAAO,CACf,IAAMA,EAAQpxB,KAAK8Z,eAAe7E,GAAO7W,OACzCyB,EAAKuxB,MAAQA,CACf,CACF,CAMA,SAAStB,IACPK,EAAQ,gCAAgC,EAC1C,CAMA,SAASP,EAAgC3a,GAC1BjV,KAAKoI,MAAMpI,KAAKoI,MAAMhK,OAAS,GACvCgzB,MAAqD,KAA7CpxB,KAAK8Z,eAAe7E,GAAOhM,WAAW,GAAY,EAAI,CACrE,CAMA,SAASymB,IACPS,EAAQ,+BACV,CAOA,SAAS5E,EAAYtW,GACnB,IAAMpV,EAAOG,KAAKoI,MAAMpI,KAAKoI,MAAMhK,OAAS,GACxCyb,EAAOha,EAAKoS,SAASpS,EAAKoS,SAAS7T,OAAS,GAC3Cyb,GAAsB,SAAdA,EAAKtY,QAEhBsY,EAAOU,MAEF7a,SAAW,CACdC,MAAO+H,GAAMuN,EAAMtV,QAGrBE,EAAKoS,SAASrR,KAAKiZ,IAErB7Z,KAAKoI,MAAMxH,KAAKiZ,EAClB,CAOA,SAAS+T,EAAW3Y,GAClB,IAAM4E,EAAO7Z,KAAKoI,MAAMgF,MACxByM,EAAKtc,OAASyC,KAAK8Z,eAAe7E,GAClC4E,EAAKna,SAASO,IAAMyH,GAAMuN,EAAMhV,IAClC,CAOA,SAASkvB,EAAiBla,GACxB,IAAM6D,EAAU9Y,KAAKoI,MAAMpI,KAAKoI,MAAMhK,OAAS,GAE/C,GAAIgyB,EAAQ,eAIV,OAHatX,EAAQ7G,SAAS6G,EAAQ7G,SAAS7T,OAAS,GACnDsB,SAASO,IAAMyH,GAAMuN,EAAMhV,UAChCkwB,EAAQ,gBAIPC,EAAQ,iCACTnF,EAAOE,eAAejf,SAAS4M,EAAQvX,QAEvCgqB,EAAY7uB,KAAKsD,KAAMiV,GACvB2Y,EAAWlxB,KAAKsD,KAAMiV,GAE1B,CAOA,SAAS2Z,IACPuB,EAAQ,eAAe,EACzB,CAOA,SAAStB,IACP,IAAMhjB,EAAO7L,KAAKkwB,SACLlwB,KAAKoI,MAAMpI,KAAKoI,MAAMhK,OAAS,GACvCb,MAAQsO,CACf,CAOA,SAASijB,IACP,IAAMjjB,EAAO7L,KAAKkwB,SACLlwB,KAAKoI,MAAMpI,KAAKoI,MAAMhK,OAAS,GACvCb,MAAQsO,CACf,CAOA,SAAS2iB,IACP,IAAM3iB,EAAO7L,KAAKkwB,SACLlwB,KAAKoI,MAAMpI,KAAKoI,MAAMhK,OAAS,GACvCb,MAAQsO,CACf,CAOA,SAASujB,IACP,IAAMvvB,EAAOG,KAAKoI,MAAMpI,KAAKoI,MAAMhK,OAAS,GAI5C,GAAIgyB,EAAQ,eAAgB,CAE1B,IAAMiB,EAAgBjB,EAAQ,kBAAoB,WAClDvwB,EAAK0B,MAAQ,YAEb1B,EAAKwxB,cAAgBA,SAEdxxB,EAAK6I,WACL7I,EAAKsxB,KACd,aAEStxB,EAAK4gB,kBAEL5gB,EAAK0mB,MAEd4J,EAAQ,gBACV,CAOA,SAASpB,IACP,IAAMlvB,EAAOG,KAAKoI,MAAMpI,KAAKoI,MAAMhK,OAAS,GAI5C,GAAIgyB,EAAQ,eAAgB,CAE1B,IAAMiB,EAAgBjB,EAAQ,kBAAoB,WAClDvwB,EAAK0B,MAAQ,YAEb1B,EAAKwxB,cAAgBA,SAEdxxB,EAAK6I,WACL7I,EAAKsxB,KACd,aAEStxB,EAAK4gB,kBAEL5gB,EAAK0mB,MAEd4J,EAAQ,gBACV,CAOA,SAASjB,EAAgBja,GACvB,IAAMoF,EAASra,KAAK8Z,eAAe7E,GAC7Bqc,EAAWtxB,KAAKoI,MAAMpI,KAAKoI,MAAMhK,OAAS,GAGhDkzB,EAAS/K,MDp9BN,SAAsBhpB,GAC3B,OAAOA,EAAM0B,QAAQyrB,GAA4BC,GACnD,CCk9BqB4G,CAAalX,GAE9BiX,EAAS7Q,WAAaJ,GAAoBhG,GAAQiG,aACpD,CAOA,SAAS0O,IACP,IAAMwC,EAAWxxB,KAAKoI,MAAMpI,KAAKoI,MAAMhK,OAAS,GAC1Cb,EAAQyC,KAAKkwB,SACbrwB,EAAOG,KAAKoI,MAAMpI,KAAKoI,MAAMhK,OAAS,GAG5C,GADA+xB,EAAQ,eAAe,GACL,SAAdtwB,EAAK0B,KAAiB,CAGxB,IAAM0Q,EAAWuf,EAASvf,SAC1BpS,EAAKoS,SAAWA,CAClB,MACEpS,EAAKkS,IAAMxU,CAEf,CAOA,SAAS+xB,IACP,IAAMzjB,EAAO7L,KAAKkwB,SACLlwB,KAAKoI,MAAMpI,KAAKoI,MAAMhK,OAAS,GACvCsK,IAAMmD,CACb,CAOA,SAAS0jB,IACP,IAAM1jB,EAAO7L,KAAKkwB,SACLlwB,KAAKoI,MAAMpI,KAAKoI,MAAMhK,OAAS,GACvC+yB,MAAQtlB,CACf,CAOA,SAAS4jB,IACPU,EAAQ,cACV,CAOA,SAASnD,IACPmD,EAAQ,gBAAiB,YAC3B,CAOA,SAASd,EAAsBpa,GAC7B,IAAMsR,EAAQvmB,KAAKkwB,SACbrwB,EAAOG,KAAKoI,MAAMpI,KAAKoI,MAAMhK,OAAS,GAG5CyB,EAAK0mB,MAAQA,EAEb1mB,EAAK4gB,WAAaJ,GAChBrgB,KAAK8Z,eAAe7E,IACpBqL,cACF6P,EAAQ,gBAAiB,OAC3B,CAOA,SAASrC,EAA+B7Y,GACtCkb,EAAQ,yBAA0Blb,EAAM1T,KAC1C,CAMA,SAAS0sB,EAA8BhZ,GACrC,IAGI1X,EAHEsO,EAAO7L,KAAK8Z,eAAe7E,GAC3B1T,EAAO6uB,EAAQ,0BAGjB7uB,GACFhE,EAAQitB,GACN3e,EACS,oCAATtK,EAA6C,GAAK,IAEpD4uB,EAAQ,2BAGR5yB,EADe2nB,GAA8BrZ,GAG/C,IAAMgO,EAAO7Z,KAAKoI,MAAMgF,MACxByM,EAAKtc,OAASA,EACdsc,EAAKna,SAASO,IAAMyH,GAAMuN,EAAMhV,IAClC,CAMA,SAASytB,EAAuBzY,GAC9B2Y,EAAWlxB,KAAKsD,KAAMiV,GACTjV,KAAKoI,MAAMpI,KAAKoI,MAAMhK,OAAS,GACvCsK,IAAM1I,KAAK8Z,eAAe7E,EACjC,CAMA,SAASwY,EAAoBxY,GAC3B2Y,EAAWlxB,KAAKsD,KAAMiV,GACTjV,KAAKoI,MAAMpI,KAAKoI,MAAMhK,OAAS,GACvCsK,IAAM,UAAY1I,KAAK8Z,eAAe7E,EAC7C,CAOA,SAAS8J,IACP,MAAO,CACLxd,KAAM,aACN0Q,SAAU,GAEd,CAGA,SAASyZ,IACP,MAAO,CACLnqB,KAAM,OACN2vB,KAAM,KACNtM,KAAM,KACNrnB,MAAO,GAEX,CAGA,SAASqsB,IACP,MAAO,CACLroB,KAAM,aACNhE,MAAO,GAEX,CAGA,SAASijB,IACP,MAAO,CACLjf,KAAM,aACNkf,WAAY,GACZ8F,MAAO,KACP4K,MAAO,KACPzoB,IAAK,GAET,CAGA,SAASwjB,KACP,MAAO,CACL3qB,KAAM,WACN0Q,SAAU,GAEd,CAGA,SAAS2P,KAEP,MAAO,CACLrgB,KAAM,UACN6vB,WAAOlpB,EACP+J,SAAU,GAEd,CAGA,SAASka,KACP,MAAO,CACL5qB,KAAM,QAEV,CAGA,SAAS8qB,KACP,MAAO,CACL9qB,KAAM,OACNhE,MAAO,GAEX,CAGA,SAASivB,KACP,MAAO,CACLjrB,KAAM,QACN4vB,MAAO,KACPzoB,IAAK,GACLqJ,IAAK,KAET,CAGA,SAASsZ,KACP,MAAO,CACL9pB,KAAM,OACN4vB,MAAO,KACPzoB,IAAK,GACLuJ,SAAU,GAEd,CAMA,SAASE,GAAK8C,GACZ,MAAO,CACL1T,KAAM,OACNkwB,QAAwB,gBAAfxc,EAAM1T,KACf5B,MAAO,KACP+xB,OAAQzc,EAAM6b,QACd7e,SAAU,GAEd,CAMA,SAASwa,GAASxX,GAChB,MAAO,CACL1T,KAAM,WACNmwB,OAAQzc,EAAM6b,QACda,QAAS,KACT1f,SAAU,GAEd,CAGA,SAAS0P,KACP,MAAO,CACLpgB,KAAM,YACN0Q,SAAU,GAEd,CAGA,SAASob,KACP,MAAO,CACL9rB,KAAM,SACN0Q,SAAU,GAEd,CAGA,SAASsI,KACP,MAAO,CACLhZ,KAAM,OACNhE,MAAO,GAEX,CAGA,SAASwgB,KACP,MAAO,CACLxc,KAAM,gBAEV,CACF,CA3kCWqwB,CAASz0B,EAATy0B,CChLJ,SAAqB3b,GAC1B,MAAQiC,GAAYjC,KAGpB,OAAOA,CACT,CD4KM4b,CACE5sB,GAAM9H,GAASgY,WAAWuC,MHxK3B,WACL,IAKIoa,EALAzyB,EAAS,EACTuM,EAAS,GAETjM,GAAQ,EAGZ,OAGA,SAAsBpC,EAAO+O,EAAUrM,GAErC,IAEIT,EAEA6N,EAEA0L,EAEAgZ,EAEAroB,EAVEmR,EAAS,GAuBf,IAVAtd,EAAQqO,EAASrO,EAAMpB,SAASmQ,GAChCyM,EAAgB,EAChBnN,EAAS,GACLjM,IAE0B,QAAxBpC,EAAM0L,WAAW,IACnB8P,IAEFpZ,OAAQuI,GAEH6Q,EAAgBxb,EAAMa,QAAQ,CAMnC,GALAmsB,GAAOyH,UAAYjZ,EAEnBgZ,GADAvyB,EAAQ+qB,GAAOxpB,KAAKxD,UAEO2K,IAAhB1I,EAAMmI,MAAsBnI,EAAMmI,MAAQpK,EAAMa,OAC3DsL,EAAOnM,EAAM0L,WAAW8oB,IACnBvyB,EAAO,CACVoM,EAASrO,EAAMyD,MAAM+X,GACrB,KACF,CACA,GAAa,KAATrP,GAAeqP,IAAkBgZ,GAAeD,EAClDjX,EAAOja,MAAM,GACbkxB,OAAmB5pB,OAUnB,OARI4pB,IACFjX,EAAOja,MAAM,GACbkxB,OAAmB5pB,GAEjB6Q,EAAgBgZ,IAClBlX,EAAOja,KAAKrD,EAAMyD,MAAM+X,EAAegZ,IACvC1yB,GAAU0yB,EAAchZ,GAElBrP,GACN,KAAK,EACHmR,EAAOja,KAAK,OACZvB,IACA,MAEF,KAAK,EAGH,IAFAgO,EAA+B,EAAxB4kB,KAAKC,KAAK7yB,EAAS,GAC1Bwb,EAAOja,MAAM,GACNvB,IAAWgO,GAAMwN,EAAOja,MAAM,GACrC,MAEF,KAAK,GACHia,EAAOja,MAAM,GACbvB,EAAS,EACT,MAEF,QACEyyB,GAAmB,EACnBzyB,EAAS,EAIf0Z,EAAgBgZ,EAAc,CAChC,CAMA,OALI9xB,IACE6xB,GAAkBjX,EAAOja,MAAM,GAC/BgL,GAAQiP,EAAOja,KAAKgL,GACxBiP,EAAOja,KAAK,OAEPia,CACT,CACF,CG+EwCsX,GAAa50B,EAAO+O,GAAU,KAGpE,EAglCF,SAAS5E,GAAMrF,GACb,MAAO,CACLzC,KAAMyC,EAAEzC,KACRP,OAAQgD,EAAEhD,OACV2X,OAAQ3U,EAAE2U,OAEd,CAOA,SAAS+Y,GAAUqC,EAAUhI,GAE3B,IADA,IAAIziB,GAAS,IACJA,EAAQyiB,EAAWhsB,QAAQ,CAClC,IAAMb,EAAQ6sB,EAAWziB,GACrBlL,MAAMF,QAAQgB,GAChBwyB,GAAUqC,EAAU70B,GAEpBkV,GAAU2f,EAAU70B,EAExB,CACF,CAOA,SAASkV,GAAU2f,EAAU3f,GAE3B,IAAI5V,EACJ,IAAKA,KAAO4V,EACV,GAAIxD,GAAIvS,KAAK+V,EAAW5V,GACtB,GAAY,mBAARA,EAA0B,CAC5B,IACWw1B,EADLzf,EAAQH,EAAU5V,GACxB,GAAI+V,GACFyf,EAAAD,EAASv1B,IAAK+D,KAAIkG,MAAAurB,GAAAvsB,EAAAA,EAAAA,GAAI8M,GAE1B,MAAO,GAAY,eAAR/V,EAAsB,CAC/B,IACWy1B,EADL1f,EAAQH,EAAU5V,GACxB,GAAI+V,GACF0f,EAAAF,EAASv1B,IAAK+D,KAAIkG,MAAAwrB,GAAAxsB,EAAAA,EAAAA,GAAI8M,GAE1B,MAAO,GAAY,UAAR/V,GAA2B,SAARA,EAAgB,CAC5C,IAAM+V,EAAQH,EAAU5V,GACpB+V,GACF7W,OAAO+T,OAAOsiB,EAASv1B,GAAM+V,EAEjC,CAGN,CAGA,SAAS4d,GAAe7d,EAAMC,GAC5B,MAAID,EACI,IAAInS,MACR,iBACEmS,EAAKpR,KACL,MACAkG,EAAkB,CAChB9H,MAAOgT,EAAKhT,MACZM,IAAK0S,EAAK1S,MAEZ,0BACA2S,EAAMrR,KACN,MACAkG,EAAkB,CAChB9H,MAAOiT,EAAMjT,MACbM,IAAK2S,EAAM3S,MAEb,aAGE,IAAIO,MACR,oCACEoS,EAAMrR,KACN,MACAkG,EAAkB,CAChB9H,MAAOiT,EAAMjT,MACbM,IAAK2S,EAAM3S,MAEb,kBAGR,CE31Ce,SAASsyB,GAAYp1B,GAAS,IAAA6K,EAAA,KAkB3CjM,OAAO+T,OAAO9P,KAAM,CAACkP,OAhBN,SAACmB,GAEd,IAAMX,EAAmC1H,EAAK6D,KAAK,YAEnD,OAAOmf,GACL3a,EACAtU,OAAO+T,OAAO,CAAC,EAAGJ,EAAUvS,EAAS,CAInCitB,WAAYpiB,EAAK6D,KAAK,wBAA0B,GAChDmkB,gBAAiBhoB,EAAK6D,KAAK,2BAA6B,KAG9D,GAGF,CC6BO,SAAS2mB,GAAaj1B,GAM3B,IAJA,IAAM4M,EAAS,GACXxC,GAAS,EACThI,EAAQ,EACR8yB,EAAO,IACF9qB,EAAQpK,EAAMa,QAAQ,CAC7B,IAAMsL,EAAOnM,EAAM0L,WAAWtB,GAE1B1I,EAAU,GAGd,GACW,KAATyK,GACAwJ,GAAkB3V,EAAM0L,WAAWtB,EAAQ,KAC3CuL,GAAkB3V,EAAM0L,WAAWtB,EAAQ,IAE3C8qB,EAAO,OAGJ,GAAI/oB,EAAO,IACT,oBAAoBoK,KAAKrD,OAAOsD,aAAarK,MAChDzK,EAAUwR,OAAOsD,aAAarK,SAI7B,GAAIA,EAAO,OAASA,EAAO,MAAO,CACrC,IAAM2D,EAAO9P,EAAM0L,WAAWtB,EAAQ,GAGlC+B,EAAO,OAAS2D,EAAO,OAASA,EAAO,OACzCpO,EAAUwR,OAAOsD,aAAarK,EAAM2D,GACpColB,EAAO,GAIPxzB,EAAU,QAEd,MAGEA,EAAUwR,OAAOsD,aAAarK,GAE5BzK,IACFkL,EAAOvJ,KAAKrD,EAAMyD,MAAMrB,EAAOgI,GAAQ+qB,mBAAmBzzB,IAC1DU,EAAQgI,EAAQ8qB,EAAO,EACvBxzB,EAAU,IAERwzB,IACF9qB,GAAS8qB,EACTA,EAAO,EAEX,CACA,OAAOtoB,EAAOR,KAAK,IAAMpM,EAAMyD,MAAMrB,EACvC,CCrBO,IAyEMgzB,GAYT,SAAU7e,GACR,QAAa5L,IAAT4L,GAA+B,OAATA,EACxB,OAAOI,GAGT,GAAoB,kBAATJ,EACT,OA8ER,SAAqB4C,GACnB,OAAOkc,GAAYrxB,GAKnB,SAASA,EAAK1B,GACZ,OAAOA,GAAQA,EAAK0B,OAASmV,CAC/B,CACF,CAvFemc,CAAY/e,GAGrB,GAAoB,kBAATA,EACT,OAAOrX,MAAMF,QAAQuX,GAAQgf,GAAWhf,GAgDhD,SAAsB4C,GACpB,OAAOkc,GAAY5gB,GAMnB,SAASA,EAAInS,GAEX,IAAIhD,EAEJ,IAAKA,KAAO6Z,EAEV,GAAI7W,EAAKhD,KAAS6Z,EAAM7Z,GAAM,OAAO,EAGvC,OAAO,CACT,CACF,CAlEwDk2B,CAAajf,GAG/D,GAAoB,oBAATA,EACT,OAAO8e,GAAY9e,GAGrB,MAAM,IAAItT,MAAM,+CAClB,EAOJ,SAASsyB,GAAWE,GAKlB,IAHA,IAAMC,EAAS,GACXtrB,GAAS,IAEJA,EAAQqrB,EAAM50B,QACrB60B,EAAOtrB,GAASgrB,GAAQK,EAAMrrB,IAGhC,OAAOirB,IAOP,WACgB,IAAd,IAAIjrB,GAAS,EAACkC,EAAA3L,UAAAE,OADAyP,EAAU,IAAApR,MAAAoN,GAAAE,EAAA,EAAAA,EAAAF,EAAAE,IAAV8D,EAAU9D,GAAA7L,UAAA6L,GAGxB,OAASpC,EAAQsrB,EAAO70B,QAAQ,KAAA80B,EAC9B,IAAIA,EAAAD,EAAOtrB,IAAOjL,KAAIoK,MAAAosB,EAAA,CAAClzB,MAAIoO,OAAKP,IAAa,OAAO,CACtD,CAEA,OAAO,CACT,GACF,CAmDA,SAAS+kB,GAAYlc,GACnB,OAQA,SAAmB7W,GAAqB,QAAA0N,EAAArP,UAAAE,OAAZyP,EAAU,IAAApR,MAAA8Q,EAAA,EAAAA,EAAA,KAAAC,EAAA,EAAAA,EAAAD,EAAAC,IAAVK,EAAUL,EAAA,GAAAtP,UAAAsP,GACpC,OAAOhH,QACL3G,GACkB,kBAATA,GACP,SAAUA,GAEV2G,QAAQkQ,EAAMha,KAAIoK,MAAV4P,EAAK,CAAM1W,KAAMH,GAAIuO,OAAKP,KAExC,CACF,CAEA,SAASqG,KACP,OAAO,CACT,CC5NO,IAAMif,IAAW,EAKXC,IAAO,EAoCPC,GAeT,SAAUpiB,EAAM6C,EAAMwf,EAASC,GACT,oBAATzf,GAA0C,oBAAZwf,IACvCC,EAAUD,EAEVA,EAAUxf,EACVA,EAAO,MAGT,IAAM0f,EAAKb,GAAQ7e,GACb2f,EAAOF,GAAW,EAAI,GAS5B,SAASG,EAAQ7zB,EAAM8H,EAAOgsB,GAG5B,IAAMp2B,EAAQsC,GAAwB,kBAATA,EAAoBA,EAAO,CAAC,EAEzD,GAA0B,kBAAftC,EAAMgE,KAAmB,CAClC,IAAMnE,EAEqB,kBAAlBG,EAAM8kB,QACT9kB,EAAM8kB,QAEc,kBAAf9kB,EAAMH,KACXG,EAAMH,UACN8K,EAENnM,OAAOK,eAAew3B,EAAO,OAAQ,CACnCr2B,MACE,SAAiBsC,EAAK0B,MAAQnE,EAAO,IAAMA,EAAO,IAAM,IAAO,KAErE,CAEA,OAAOw2B,EAEP,SAASA,IAEP,IAEIC,EAEA7c,EAEA8c,EANA3pB,EAAS,GAQb,KAAK2J,GAAQ0f,EAAG3zB,EAAM8H,EAAOgsB,EAAQA,EAAQv1B,OAAS,IAAM,SAC1D+L,EA0CZ,SAAkB5M,GAChB,GAAId,MAAMF,QAAQgB,GAChB,OAAOA,EAGT,GAAqB,kBAAVA,EACT,MAAO,CAAC41B,GAAU51B,GAGpB,MAAO,CAACA,EACV,CApDqBw2B,CAAST,EAAQzzB,EAAM8zB,IAE5BxpB,EAAO,KAAOipB,IAChB,OAAOjpB,EAKX,GAAItK,EAAKoS,UA1GC,SA0GW9H,EAAO,GAO1B,IALA6M,GAAUuc,EAAU1zB,EAAKoS,SAAS7T,QAAU,GAAKq1B,EAEjDK,EAAeH,EAAQvlB,OAAOvO,GAGvBmX,GAAU,GAAKA,EAASnX,EAAKoS,SAAS7T,QAAQ,CAInD,IAFAy1B,EAAYH,EAAQ7zB,EAAKoS,SAAS+E,GAASA,EAAQ8c,EAAvCJ,IAEE,KAAON,GACnB,OAAOS,EAGT7c,EAC0B,kBAAjB6c,EAAU,GAAkBA,EAAU,GAAK7c,EAASyc,CAC/D,CAGF,OAAOtpB,CACT,CACF,CAvEAupB,CAAQziB,OAAM/I,EAAW,GAAzBwrB,EAwEF,EC7EG,IAAME,GAeT,SAAU3iB,EAAM6C,EAAMwf,EAASC,GACT,oBAATzf,GAA0C,oBAAZwf,IACvCC,EAAUD,EACVA,EAAUxf,EACVA,EAAO,MAGTuf,GAAapiB,EAAM6C,GAMnB,SAAkBjU,EAAM8zB,GACtB,IAAMK,EAASL,EAAQA,EAAQv1B,OAAS,GACxC,OAAOk1B,EACLzzB,EACAm0B,EAASA,EAAO/hB,SAAS7K,QAAQvH,GAAQ,KACzCm0B,EAEJ,GAbmCT,EAcrC,ECrJSU,GAAavsB,GAAM,SAUnBwsB,GAAWxsB,GAAM,OAsB9B,SAASA,GAAMnG,GACb,OAQA,SAAe1B,GACb,IAAM6H,EAAS7H,GAAQA,EAAKH,UAAYG,EAAKH,SAAS6B,IAAU,CAAC,EAGjE,MAAO,CAEL3B,KAAM8H,EAAM9H,MAAQ,KAEpBP,OAAQqI,EAAMrI,QAAU,KAExB2X,OAAQtP,EAAMsP,QAAU,EAAItP,EAAMsP,OAAS,KAE/C,CACF,CChEA,IAAM/H,GAAM,CAAC,EAAEhT,eA0Cf,SAASk4B,GAAM52B,GACb,OAAOkT,OAAOlT,GAAS,IAAIgjB,aAC7B,CC7CO,SAAS6T,GAAkBnY,EAAOpc,GACvC,IAIIw0B,EAJEC,EAAK7jB,OAAO5Q,EAAK4gB,YAAYF,cAC7BgU,EAAS/B,GAAa8B,EAAGhU,eACzB3Y,EAAQsU,EAAMuY,cAAcptB,QAAQktB,IAI3B,IAAX3sB,GACFsU,EAAMuY,cAAc5zB,KAAK0zB,GACzBrY,EAAMwY,eAAeH,GAAM,EAC3BD,EAAUpY,EAAMuY,cAAcp2B,SAE9B6d,EAAMwY,eAAeH,KACrBD,EAAU1sB,EAAQ,GAGpB,IAAM+sB,EAAezY,EAAMwY,eAAeH,GAGpCjJ,EAAO,CACX9pB,KAAM,UACN8gB,QAAS,IACTsS,WAAY,CACV3pB,KAAM,IAAMiR,EAAM2Y,cAAgB,MAAQL,EAC1CD,GACErY,EAAM2Y,cACN,SACAL,GACCG,EAAe,EAAI,IAAMA,EAAe,IAC3CG,iBAAiB,EACjBC,gBAAiB,CAAC,mBAEpB7iB,SAAU,CAAC,CAAC1Q,KAAM,OAAQhE,MAAOkT,OAAO4jB,MAE1CpY,EAAM8Y,MAAMl1B,EAAMwrB,GAGlB,IAAM2J,EAAM,CACVzzB,KAAM,UACN8gB,QAAS,MACTsS,WAAY,CAAC,EACb1iB,SAAU,CAACoZ,IAGb,OADApP,EAAM8Y,MAAMl1B,EAAMm1B,GACX/Y,EAAMgZ,UAAUp1B,EAAMm1B,EAC/B,CCpCO,SAASE,GAAOjZ,EAAOpc,GAC5B,IAAMs1B,EAAUt1B,EAAKwxB,cACjB+D,EAAS,IAQb,GANgB,cAAZD,EACFC,GAAU,KACW,SAAZD,IACTC,GAAU,KAAOv1B,EAAK0mB,OAAS1mB,EAAK4gB,YAAc,KAGlC,mBAAd5gB,EAAK0B,KACP,MAAO,CAACA,KAAM,OAAQhE,MAAO,KAAOsC,EAAKkS,IAAMqjB,GAGjD,IAAMC,EAAWpZ,EAAMjK,IAAInS,GACrB0c,EAAO8Y,EAAS,GAElB9Y,GAAsB,SAAdA,EAAKhb,KACfgb,EAAKhf,MAAQ,IAAMgf,EAAKhf,MAExB83B,EAAS9iB,QAAQ,CAAChR,KAAM,OAAQhE,MAAO,MAGzC,IAAMsc,EAAOwb,EAASA,EAASj3B,OAAS,GAQxC,OANIyb,GAAsB,SAAdA,EAAKtY,KACfsY,EAAKtc,OAAS63B,EAEdC,EAASz0B,KAAK,CAACW,KAAM,OAAQhE,MAAO63B,IAG/BC,CACT,CC+DA,SAASC,GAAcz1B,GACrB,IAAM6xB,EAAS7xB,EAAK6xB,OAEpB,YAAkBxpB,IAAXwpB,GAAmC,OAAXA,EAC3B7xB,EAAKoS,SAAS7T,OAAS,EACvBszB,CACN,CCpHO,SAAS6D,GAAUh4B,GAQxB,IAPA,IAAM2C,EAASuQ,OAAOlT,GAChBgtB,EAAS,YACX/qB,EAAQ+qB,EAAOxpB,KAAKb,GACpBs1B,EAAO,EAELj2B,EAAQ,GAEPC,GACLD,EAAMqB,KACJ60B,GAASv1B,EAAOc,MAAMw0B,EAAMh2B,EAAMmI,OAAQ6tB,EAAO,GAAG,GACpDh2B,EAAM,IAGRg2B,EAAOh2B,EAAMmI,MAAQnI,EAAM,GAAGpB,OAC9BoB,EAAQ+qB,EAAOxpB,KAAKb,GAKtB,OAFAX,EAAMqB,KAAK60B,GAASv1B,EAAOc,MAAMw0B,GAAOA,EAAO,GAAG,IAE3Cj2B,EAAMoK,KAAK,GACpB,CAYA,SAAS8rB,GAASl4B,EAAOoC,EAAOM,GAC9B,IAAIkc,EAAa,EACbE,EAAW9e,EAAMa,OAErB,GAAIuB,EAGF,IAFA,IAAI+J,EAAOnM,EAAMm4B,YAAYvZ,GAlDrB,IAoDDzS,GAnDG,KAmDaA,GACrByS,IACAzS,EAAOnM,EAAMm4B,YAAYvZ,GAI7B,GAAIlc,EAGF,IAFA,IAAIyJ,EAAOnM,EAAMm4B,YAAYrZ,EAAW,GA3DhC,IA6DD3S,GA5DG,KA4DaA,GACrB2S,IACA3S,EAAOnM,EAAMm4B,YAAYrZ,EAAW,GAIxC,OAAOA,EAAWF,EAAa5e,EAAMyD,MAAMmb,EAAYE,GAAY,EACrE,CCxCO,IAAMsZ,GAAW,CACtBC,WCbK,SAAoB3Z,EAAOpc,GAEhC,IAAMsK,EAAS,CACb5I,KAAM,UACN8gB,QAAS,aACTsS,WAAY,CAAC,EACb1iB,SAAUgK,EAAM5N,KAAK4N,EAAMjK,IAAInS,IAAO,IAGxC,OADAoc,EAAM8Y,MAAMl1B,EAAMsK,GACX8R,EAAMgZ,UAAUp1B,EAAMsK,EAC/B,EDIE0rB,MEbK,SAAmB5Z,EAAOpc,GAE/B,IAAMsK,EAAS,CAAC5I,KAAM,UAAW8gB,QAAS,KAAMsS,WAAY,CAAC,EAAG1iB,SAAU,IAE1E,OADAgK,EAAM8Y,MAAMl1B,EAAMsK,GACX,CAAC8R,EAAMgZ,UAAUp1B,EAAMsK,GAAS,CAAC5I,KAAM,OAAQhE,MAAO,MAC/D,EFSEmM,KGbK,SAAcuS,EAAOpc,GAC1B,IAAMtC,EAAQsC,EAAKtC,MAAQsC,EAAKtC,MAAQ,KAAO,GAGzC2zB,EAAOrxB,EAAKqxB,KAAOrxB,EAAKqxB,KAAK1xB,MAAM,uBAAyB,KAE5Dm1B,EAAa,CAAC,EAEhBzD,IACFyD,EAAWmB,UAAY,CAAC,YAAc5E,IAKxC,IAAI/mB,EAAS,CACX5I,KAAM,UACN8gB,QAAS,OACTsS,WAAAA,EACA1iB,SAAU,CAAC,CAAC1Q,KAAM,OAAQhE,MAAAA,KAa5B,OAVIsC,EAAK+kB,OACPza,EAAO0B,KAAO,CAAC+Y,KAAM/kB,EAAK+kB,OAG5B3I,EAAM8Y,MAAMl1B,EAAMsK,GAIlBA,EAAS,CAAC5I,KAAM,UAAW8gB,QAAS,MAAOsS,WAAY,CAAC,EAAG1iB,SAAU,CAHrE9H,EAAS8R,EAAMgZ,UAAUp1B,EAAMsK,KAI/B8R,EAAM8Y,MAAMl1B,EAAMsK,GACXA,CACT,EHlBE4rB,OIfK,SAAuB9Z,EAAOpc,GAEnC,IAAMsK,EAAS,CACb5I,KAAM,UACN8gB,QAAS,MACTsS,WAAY,CAAC,EACb1iB,SAAUgK,EAAMjK,IAAInS,IAGtB,OADAoc,EAAM8Y,MAAMl1B,EAAMsK,GACX8R,EAAMgZ,UAAUp1B,EAAMsK,EAC/B,EJME+hB,SKjBK,SAAkBjQ,EAAOpc,GAE9B,IAAMsK,EAAS,CACb5I,KAAM,UACN8gB,QAAS,KACTsS,WAAY,CAAC,EACb1iB,SAAUgK,EAAMjK,IAAInS,IAGtB,OADAoc,EAAM8Y,MAAMl1B,EAAMsK,GACX8R,EAAMgZ,UAAUp1B,EAAMsK,EAC/B,ELQEiqB,kBAAAA,GACA4B,SMXK,SAAkB/Z,EAAOpc,GAI9B,IAHA,IAAMo2B,EAAeha,EAAMga,aACvBC,EAAK,EAEFA,KAAMD,GAAcC,IAE3B,IAAMzV,EAAahQ,OAAOylB,GAS1B,OAPAD,EAAaxV,GAAc,CACzBlf,KAAM,qBACNkf,WAAAA,EACAxO,SAAU,CAAC,CAAC1Q,KAAM,YAAa0Q,SAAUpS,EAAKoS,WAC9CvS,SAAUG,EAAKH,UAGV00B,GAAkBnY,EAAO,CAC9B1a,KAAM,oBACNkf,WAAAA,EACA/gB,SAAUG,EAAKH,UAEnB,ENREkiB,QOpBK,SAAiB3F,EAAOpc,GAE7B,IAAMsK,EAAS,CACb5I,KAAM,UACN8gB,QAAS,IAAMxiB,EAAKuxB,MACpBuD,WAAY,CAAC,EACb1iB,SAAUgK,EAAMjK,IAAInS,IAGtB,OADAoc,EAAM8Y,MAAMl1B,EAAMsK,GACX8R,EAAMgZ,UAAUp1B,EAAMsK,EAC/B,EPWEkiB,KQnBK,SAAcpQ,EAAOpc,GAC1B,GAAIoc,EAAMka,UAAW,CAEnB,IAAMhsB,EAAS,CAAC5I,KAAM,MAAOhE,MAAOsC,EAAKtC,OAEzC,OADA0e,EAAM8Y,MAAMl1B,EAAMsK,GACX8R,EAAMgZ,UAAUp1B,EAAMsK,EAC/B,CAGA,OAAO,IACT,ERUEisB,eSjBK,SAAwBna,EAAOpc,GACpC,IAAMwd,EAAMpB,EAAMuE,WAAW3gB,EAAK4gB,YAElC,IAAKpD,EACH,OAAO6X,GAAOjZ,EAAOpc,GAIvB,IAAM80B,EAAa,CAAC72B,IAAK00B,GAAanV,EAAI3U,KAAO,IAAKqJ,IAAKlS,EAAKkS,KAE9C,OAAdsL,EAAI8T,YAAgCjpB,IAAdmV,EAAI8T,QAC5BwD,EAAWxD,MAAQ9T,EAAI8T,OAIzB,IAAMhnB,EAAS,CAAC5I,KAAM,UAAW8gB,QAAS,MAAOsS,WAAAA,EAAY1iB,SAAU,IAEvE,OADAgK,EAAM8Y,MAAMl1B,EAAMsK,GACX8R,EAAMgZ,UAAUp1B,EAAMsK,EAC/B,ETAEqiB,MUpBK,SAAevQ,EAAOpc,GAE3B,IAAM80B,EAAa,CAAC72B,IAAK00B,GAAa3yB,EAAK6I,MAE1B,OAAb7I,EAAKkS,UAA6B7J,IAAbrI,EAAKkS,MAC5B4iB,EAAW5iB,IAAMlS,EAAKkS,KAGL,OAAflS,EAAKsxB,YAAiCjpB,IAAfrI,EAAKsxB,QAC9BwD,EAAWxD,MAAQtxB,EAAKsxB,OAI1B,IAAMhnB,EAAS,CAAC5I,KAAM,UAAW8gB,QAAS,MAAOsS,WAAAA,EAAY1iB,SAAU,IAEvE,OADAgK,EAAM8Y,MAAMl1B,EAAMsK,GACX8R,EAAMgZ,UAAUp1B,EAAMsK,EAC/B,EVKEksB,WWvBK,SAAoBpa,EAAOpc,GAEhC,IAAM0a,EAAO,CAAChZ,KAAM,OAAQhE,MAAOsC,EAAKtC,MAAM0B,QAAQ,YAAa,MACnEgd,EAAM8Y,MAAMl1B,EAAM0a,GAGlB,IAAMpQ,EAAS,CACb5I,KAAM,UACN8gB,QAAS,OACTsS,WAAY,CAAC,EACb1iB,SAAU,CAACsI,IAGb,OADA0B,EAAM8Y,MAAMl1B,EAAMsK,GACX8R,EAAMgZ,UAAUp1B,EAAMsK,EAC/B,EXUEmsB,cYpBK,SAAuBra,EAAOpc,GACnC,IAAMwd,EAAMpB,EAAMuE,WAAW3gB,EAAK4gB,YAElC,IAAKpD,EACH,OAAO6X,GAAOjZ,EAAOpc,GAIvB,IAAM80B,EAAa,CAAC3pB,KAAMwnB,GAAanV,EAAI3U,KAAO,KAEhC,OAAd2U,EAAI8T,YAAgCjpB,IAAdmV,EAAI8T,QAC5BwD,EAAWxD,MAAQ9T,EAAI8T,OAIzB,IAAMhnB,EAAS,CACb5I,KAAM,UACN8gB,QAAS,IACTsS,WAAAA,EACA1iB,SAAUgK,EAAMjK,IAAInS,IAGtB,OADAoc,EAAM8Y,MAAMl1B,EAAMsK,GACX8R,EAAMgZ,UAAUp1B,EAAMsK,EAC/B,EZFEkhB,KavBK,SAAcpP,EAAOpc,GAE1B,IAAM80B,EAAa,CAAC3pB,KAAMwnB,GAAa3yB,EAAK6I,MAEzB,OAAf7I,EAAKsxB,YAAiCjpB,IAAfrI,EAAKsxB,QAC9BwD,EAAWxD,MAAQtxB,EAAKsxB,OAI1B,IAAMhnB,EAAS,CACb5I,KAAM,UACN8gB,QAAS,IACTsS,WAAAA,EACA1iB,SAAUgK,EAAMjK,IAAInS,IAGtB,OADAoc,EAAM8Y,MAAMl1B,EAAMsK,GACX8R,EAAMgZ,UAAUp1B,EAAMsK,EAC/B,EbOEsiB,SFfK,SAAkBxQ,EAAOpc,EAAMm0B,GACpC,IAAMuC,EAAUta,EAAMjK,IAAInS,GACpB22B,EAAQxC,EAyEhB,SAAmBn0B,GACjB,IAAI22B,GAAQ,EACZ,GAAkB,SAAd32B,EAAK0B,KAAiB,CACxBi1B,EAAQ32B,EAAK6xB,SAAU,EAIvB,IAHA,IAAMzf,EAAWpS,EAAKoS,SAClBtK,GAAS,GAEL6uB,KAAW7uB,EAAQsK,EAAS7T,QAClCo4B,EAAQlB,GAAcrjB,EAAStK,GAEnC,CAEA,OAAO6uB,CACT,CAtFyBC,CAAUzC,GAAUsB,GAAcz1B,GAEnD80B,EAAa,CAAC,EAEd1iB,EAAW,GAEjB,GAA4B,mBAAjBpS,EAAK8xB,QAAuB,CACrC,IAEIhQ,EAFEpF,EAAOga,EAAQ,GAIjBha,GAAsB,YAAdA,EAAKhb,MAAuC,MAAjBgb,EAAK8F,QAC1CV,EAAYpF,GAEZoF,EAAY,CAACpgB,KAAM,UAAW8gB,QAAS,IAAKsS,WAAY,CAAC,EAAG1iB,SAAU,IACtEskB,EAAQhkB,QAAQoP,IAGdA,EAAU1P,SAAS7T,OAAS,GAC9BujB,EAAU1P,SAASM,QAAQ,CAAChR,KAAM,OAAQhE,MAAO,MAGnDokB,EAAU1P,SAASM,QAAQ,CACzBhR,KAAM,UACN8gB,QAAS,QACTsS,WAAY,CAACpzB,KAAM,WAAYowB,QAAS9xB,EAAK8xB,QAAS+E,UAAU,GAChEzkB,SAAU,KAKZ0iB,EAAWmB,UAAY,CAAC,iBAC1B,CAIA,IAFA,IAAInuB,GAAS,IAEJA,EAAQ4uB,EAAQn4B,QAAQ,CAC/B,IAAMu4B,EAAQJ,EAAQ5uB,IAIpB6uB,GACU,IAAV7uB,GACe,YAAfgvB,EAAMp1B,MACY,MAAlBo1B,EAAMtU,UAENpQ,EAASrR,KAAK,CAACW,KAAM,OAAQhE,MAAO,OAGnB,YAAfo5B,EAAMp1B,MAAwC,MAAlBo1B,EAAMtU,SAAoBmU,EAGxDvkB,EAASrR,KAAK+1B,GAFd1kB,EAASrR,KAAIkG,MAAbmL,GAAQnM,EAAAA,EAAAA,GAAS6wB,EAAM1kB,UAI3B,CAEA,IAAM4H,EAAO0c,EAAQA,EAAQn4B,OAAS,GAGlCyb,IAAS2c,GAAuB,YAAd3c,EAAKtY,MAAuC,MAAjBsY,EAAKwI,UACpDpQ,EAASrR,KAAK,CAACW,KAAM,OAAQhE,MAAO,OAItC,IAAM4M,EAAS,CAAC5I,KAAM,UAAW8gB,QAAS,KAAMsS,WAAAA,EAAY1iB,SAAAA,GAE5D,OADAgK,EAAM8Y,MAAMl1B,EAAMsK,GACX8R,EAAMgZ,UAAUp1B,EAAMsK,EAC/B,EErDEgI,Kc3BK,SAAc8J,EAAOpc,GAE1B,IAAM80B,EAAa,CAAC,EACd4B,EAAUta,EAAMjK,IAAInS,GACtB8H,GAAS,EAOb,IAL0B,kBAAf9H,EAAKF,OAAqC,IAAfE,EAAKF,QACzCg1B,EAAWh1B,MAAQE,EAAKF,SAIjBgI,EAAQ4uB,EAAQn4B,QAAQ,CAC/B,IAAMu4B,EAAQJ,EAAQ5uB,GAEtB,GACiB,YAAfgvB,EAAMp1B,MACY,OAAlBo1B,EAAMtU,SACNsU,EAAMhC,YACNl4B,MAAMF,QAAQo6B,EAAMhC,WAAWmB,YAC/Ba,EAAMhC,WAAWmB,UAAU5pB,SAAS,kBACpC,CACAyoB,EAAWmB,UAAY,CAAC,sBACxB,KACF,CACF,CAGA,IAAM3rB,EAAS,CACb5I,KAAM,UACN8gB,QAASxiB,EAAK4xB,QAAU,KAAO,KAC/BkD,WAAAA,EACA1iB,SAAUgK,EAAM5N,KAAKkoB,GAAS,IAGhC,OADAta,EAAM8Y,MAAMl1B,EAAMsK,GACX8R,EAAMgZ,UAAUp1B,EAAMsK,EAC/B,EdPEwX,Ue7BK,SAAmB1F,EAAOpc,GAE/B,IAAMsK,EAAS,CACb5I,KAAM,UACN8gB,QAAS,IACTsS,WAAY,CAAC,EACb1iB,SAAUgK,EAAMjK,IAAInS,IAGtB,OADAoc,EAAM8Y,MAAMl1B,EAAMsK,GACX8R,EAAMgZ,UAAUp1B,EAAMsK,EAC/B,EfoBEysB,KgB7BK,SAAc3a,EAAOpc,GAE1B,IAAMsK,EAAS,CAAC5I,KAAM,OAAQ0Q,SAAUgK,EAAM5N,KAAK4N,EAAMjK,IAAInS,KAE7D,OADAoc,EAAM8Y,MAAMl1B,EAAMsK,GACX8R,EAAMgZ,UAAUp1B,EAAMsK,EAC/B,EhByBEkjB,OiB/BK,SAAgBpR,EAAOpc,GAE5B,IAAMsK,EAAS,CACb5I,KAAM,UACN8gB,QAAS,SACTsS,WAAY,CAAC,EACb1iB,SAAUgK,EAAMjK,IAAInS,IAGtB,OADAoc,EAAM8Y,MAAMl1B,EAAMsK,GACX8R,EAAMgZ,UAAUp1B,EAAMsK,EAC/B,EjBsBE0sB,MkB9BK,SAAe5a,EAAOpc,GAC3B,IAAMi3B,EAAO7a,EAAMjK,IAAInS,GACjBk3B,EAAWD,EAAKta,QAEhBwa,EAAe,GAErB,GAAID,EAAU,CAEZ,IAAMxa,EAAO,CACXhb,KAAM,UACN8gB,QAAS,QACTsS,WAAY,CAAC,EACb1iB,SAAUgK,EAAM5N,KAAK,CAAC0oB,IAAW,IAEnC9a,EAAM8Y,MAAMl1B,EAAKoS,SAAS,GAAIsK,GAC9Bya,EAAap2B,KAAK2b,EACpB,CAEA,GAAIua,EAAK14B,OAAS,EAAG,CAEnB,IAAM64B,EAAO,CACX11B,KAAM,UACN8gB,QAAS,QACTsS,WAAY,CAAC,EACb1iB,SAAUgK,EAAM5N,KAAKyoB,GAAM,IAGvBn3B,EAAQs0B,GAAWp0B,EAAKoS,SAAS,IACjChS,EAAMi0B,GAASr0B,EAAKoS,SAASpS,EAAKoS,SAAS7T,OAAS,IACtDuB,EAAMC,MAAQK,EAAIL,OAAMq3B,EAAKv3B,SAAW,CAACC,MAAAA,EAAOM,IAAAA,IACpD+2B,EAAap2B,KAAKq2B,EACpB,CAGA,IAAM9sB,EAAS,CACb5I,KAAM,UACN8gB,QAAS,QACTsS,WAAY,CAAC,EACb1iB,SAAUgK,EAAM5N,KAAK2oB,GAAc,IAGrC,OADA/a,EAAM8Y,MAAMl1B,EAAMsK,GACX8R,EAAMgZ,UAAUp1B,EAAMsK,EAC/B,ElBXE+sB,UmBjCK,SAAmBjb,EAAOpc,GAI/B,IAAMsK,EAAS,CACb5I,KAAM,UACN8gB,QAAS,KACTsS,WAAY,CAAC,EACb1iB,SAAUgK,EAAMjK,IAAInS,IAGtB,OADAoc,EAAM8Y,MAAMl1B,EAAMsK,GACX8R,EAAMgZ,UAAUp1B,EAAMsK,EAC/B,EnBsBEgtB,SoBtBK,SAAkBlb,EAAOpc,EAAMm0B,GAWpC,IAVA,IAAMoD,EAAWpD,EAASA,EAAO/hB,cAAW/J,EAGtCma,EAAuB,KADZ+U,EAAWA,EAAShwB,QAAQvH,GAAQ,GACpB,KAAO,KAClCw3B,EAAQrD,GAA0B,UAAhBA,EAAOzyB,KAAmByyB,EAAOqD,WAAQnvB,EAC3D9J,EAASi5B,EAAQA,EAAMj5B,OAASyB,EAAKoS,SAAS7T,OAChDk5B,GAAa,EAEXC,EAAQ,KAELD,EAAYl5B,GAAQ,CAE3B,IAAMo5B,EAAO33B,EAAKoS,SAASqlB,GAErB3C,EAAa,CAAC,EACd8C,EAAaJ,EAAQA,EAAMC,QAAapvB,EAE1CuvB,IACF9C,EAAW0C,MAAQI,GAIrB,IAAIttB,EAAS,CAAC5I,KAAM,UAAW8gB,QAAAA,EAASsS,WAAAA,EAAY1iB,SAAU,IAE1DulB,IACFrtB,EAAO8H,SAAWgK,EAAMjK,IAAIwlB,GAC5Bvb,EAAM8Y,MAAMyC,EAAMrtB,GAClBA,EAAS8R,EAAMgZ,UAAUp1B,EAAMsK,IAGjCotB,EAAM32B,KAAKuJ,EACb,CAGA,IAAMA,EAAS,CACb5I,KAAM,UACN8gB,QAAS,KACTsS,WAAY,CAAC,EACb1iB,SAAUgK,EAAM5N,KAAKkpB,GAAO,IAG9B,OADAtb,EAAM8Y,MAAMl1B,EAAMsK,GACX8R,EAAMgZ,UAAUp1B,EAAMsK,EAC/B,EpBpBEoQ,KqBhCK,SAAc0B,EAAOpc,GAE1B,IAAMsK,EAAS,CAAC5I,KAAM,OAAQhE,MAAOg4B,GAAU9kB,OAAO5Q,EAAKtC,SAE3D,OADA0e,EAAM8Y,MAAMl1B,EAAMsK,GACX8R,EAAMgZ,UAAUp1B,EAAMsK,EAC/B,ErB4BE4T,csBpCK,SAAuB9B,EAAOpc,GAEnC,IAAMsK,EAAS,CACb5I,KAAM,UACN8gB,QAAS,KACTsS,WAAY,CAAC,EACb1iB,SAAU,IAGZ,OADAgK,EAAM8Y,MAAMl1B,EAAMsK,GACX8R,EAAMgZ,UAAUp1B,EAAMsK,EAC/B,EtB2BEutB,KAAMC,GACNC,KAAMD,GACNnX,WAAYmX,GACZE,mBAAoBF,IAItB,SAASA,KAEP,OAAO,IACT,CuBwGA,IAAM1oB,GAAM,CAAC,EAAEhT,eAYR,SAAS67B,GAAY7mB,EAAM9T,GAChC,IAAMuS,EAAWvS,GAAW,CAAC,EACvBg5B,EAAYzmB,EAASqoB,qBAAsB,EAE3C9B,EAAe,CAAC,EA2DtB,OAnDAha,EAAMka,UAAYA,EAElBla,EAAM2Y,mBACuB1sB,IAA3BwH,EAASklB,eAA0D,OAA3BllB,EAASklB,cAC7C,gBACAllB,EAASklB,cAEf3Y,EAAM+b,cAAgBtoB,EAASsoB,eAAiB,YAEhD/b,EAAMgc,qBAAuBvoB,EAASuoB,sBAAwB,KAE9Dhc,EAAMic,wBAA0BxoB,EAASwoB,yBAA2B,CAClEpC,UAAW,CAAC,YAGd7Z,EAAMkc,kBAAoBzoB,EAASyoB,mBAAqB,kBAExDlc,EAAMmc,eAAiB1oB,EAAS0oB,eAEhCnc,EAAMoc,YAAc3oB,EAAS2oB,YAE7Bpc,EAAM0Z,UAAQ2C,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GAAO3C,IAAajmB,EAASimB,UAI3C1Z,EAAMuE,W5BxLD,SAAqBvP,GAE1B,IAAMsnB,EAAQx8B,OAAOiL,OAAO,MAE5B,IAAKiK,IAASA,EAAK1P,KACjB,MAAM,IAAIf,MAAM,wCAUlB,OAPAozB,GAAM3iB,EAAM,cAAc,SAACuP,GACzB,IAAM8T,EAAKH,GAAM3T,EAAWC,YACxB6T,IAAOrlB,GAAIvS,KAAK67B,EAAOjE,KACzBiE,EAAMjE,GAAM9T,EAEhB,IAKA,SAAoBC,GAClB,IAAM6T,EAAKH,GAAM1T,GAEjB,OAAO6T,GAAMrlB,GAAIvS,KAAK67B,EAAOjE,GAAMiE,EAAMjE,GAAM,IACjD,CACF,C4BiKqBkE,CAAYvnB,GAC/BgL,EAAMga,aAAeA,EAErBha,EAAMuY,cAAgB,GAEtBvY,EAAMwY,eAAiB,CAAC,EAExBxY,EAAM8Y,MAAQA,GACd9Y,EAAMgZ,UAAYA,GAClBhZ,EAAMrK,IAsGN,SAAkB/R,EAAMm0B,GAEtB,OAAOpiB,GAAIqK,EAAOpc,EAAMm0B,EAC1B,EAxGA/X,EAAMjK,IAkHN,SAAkBgiB,GAEhB,OAAOhiB,GAAIiK,EAAO+X,EACpB,EApHA/X,EAAM5N,KAAOA,GAEb4N,EAAMwc,QAAUA,EAEhB7E,GAAM3iB,EAAM,sBAAsB,SAACuP,GACjC,IAAM8T,EAAK7jB,OAAO+P,EAAWC,YAAYF,cAIpCtR,GAAIvS,KAAKu5B,EAAc3B,KAC1B2B,EAAa3B,GAAM9T,EAEvB,IAGOvE,EAWP,SAASwc,EAAQ9lB,EAAMC,GAErB,GAAID,GAAQ,SAAUA,GAAQA,EAAK9G,KAAM,CAEvC,IAAMA,EAAO8G,EAAK9G,KAEdA,EAAK6sB,QACY,YAAf9lB,EAAMrR,OACRqR,EAAQ,CACNrR,KAAM,UACN8gB,QAAS,GACTsS,WAAY,CAAC,EACb1iB,SAAU,KAIdW,EAAMyP,QAAUxW,EAAK6sB,OAGJ,YAAf9lB,EAAMrR,MAAsBsK,EAAK8sB,cACnC/lB,EAAM+hB,YAAU2D,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GAAO1lB,EAAM+hB,YAAe9oB,EAAK8sB,cAG/C,aAAc/lB,GAASA,EAAMX,UAAYpG,EAAK+sB,YAChDhmB,EAAMX,SAAWpG,EAAK+sB,UAE1B,CAEA,GAAIjmB,EAAM,CACR,IAAMkmB,EAAM,SAAUlmB,EAAOA,EAAO,CAACjT,SAAUiT,ICpQ9C,SAAmB9S,GACxB,OACGA,IACAA,EAAKH,WACLG,EAAKH,SAASC,QACdE,EAAKH,SAASC,MAAMC,OACpBC,EAAKH,SAASC,MAAMN,SACpBQ,EAAKH,SAASO,MACdJ,EAAKH,SAASO,IAAIL,OAClBC,EAAKH,SAASO,IAAIZ,MAEvB,ED2PWy5B,CAAUD,KAEbjmB,EAAMlT,SAAW,CAACC,MAAOs0B,GAAW4E,GAAM54B,IAAKi0B,GAAS2E,IAE5D,CAEA,OAAOjmB,CACT,CAUA,SAASqJ,EAAMpc,EAAMwiB,EAAS0W,EAAO9mB,GAOnC,OANIxV,MAAMF,QAAQw8B,KAChB9mB,EAAW8mB,EACXA,EAAQ,CAAC,GAIJN,EAAQ54B,EAAM,CACnB0B,KAAM,UACN8gB,QAAAA,EACAsS,WAAYoE,GAAS,CAAC,EACtB9mB,SAAUA,GAAY,IAE1B,CA8BF,CAYA,SAAS8iB,GAAMlvB,EAAMmzB,GACfnzB,EAAKnG,WAAUs5B,EAAGt5B,S7BpTjB,SAAkBG,GACvB,MAAO,CAACF,MAAOs0B,GAAWp0B,GAAOI,IAAKi0B,GAASr0B,GACjD,C6BkTmCH,CAASmG,GAC5C,CAcA,SAASovB,GAAUpvB,EAAMmzB,GAEvB,IAAI7uB,EAAS6uB,EAGb,GAAInzB,GAAQA,EAAKgG,KAAM,CACrB,IAAM6sB,EAAQ7yB,EAAKgG,KAAK6sB,MAClBE,EAAY/yB,EAAKgG,KAAK+sB,UACtBD,EAAc9yB,EAAKgG,KAAK8sB,YAET,kBAAVD,IAGW,YAAhBvuB,EAAO5I,KACT4I,EAAOkY,QAAUqW,EAOjBvuB,EAAS,CACP5I,KAAM,UACN8gB,QAASqW,EACT/D,WAAY,CAAC,EACb1iB,SAAU,KAeI,YAAhB9H,EAAO5I,MAAsBo3B,IAC/BxuB,EAAOwqB,YAAU2D,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GAAOnuB,EAAOwqB,YAAegE,IAI9C,aAAcxuB,GACdA,EAAO8H,UACO,OAAd2mB,QACc1wB,IAAd0wB,IAGAzuB,EAAO8H,SAAW2mB,EAEtB,CAEA,OAAOzuB,CACT,CAeO,SAASyH,GAAIqK,EAAOpc,EAAMm0B,GAC/B,IAAMzyB,EAAO1B,GAAQA,EAAK0B,KAG1B,IAAKA,EACH,MAAM,IAAIf,MAAM,uBAAyBX,EAAO,KAGlD,OAAIoP,GAAIvS,KAAKuf,EAAM0Z,SAAUp0B,GACpB0a,EAAM0Z,SAASp0B,GAAM0a,EAAOpc,EAAMm0B,GAGvC/X,EAAMoc,aAAepc,EAAMoc,YAAYnsB,SAAS3K,GAG3C,aAAc1B,GAAIy4B,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GAAOz4B,GAAI,IAAEoS,SAAUD,GAAIiK,EAAOpc,KAASA,EAGlEoc,EAAMmc,eACDnc,EAAMmc,eAAenc,EAAOpc,EAAMm0B,GAiE7C,SAA+B/X,EAAOpc,GACpC,IAAMgM,EAAOhM,EAAKgM,MAAQ,CAAC,EAErB1B,IACJ,UAAWtK,IACToP,GAAIvS,KAAKmP,EAAM,gBAAkBoD,GAAIvS,KAAKmP,EAAM,aAE9C,CACEtK,KAAM,UACN8gB,QAAS,MACTsS,WAAY,CAAC,EACb1iB,SAAUD,GAAIiK,EAAOpc,IALvB,CAAC0B,KAAM,OAAQhE,MAAOsC,EAAKtC,OASjC,OADA0e,EAAM8Y,MAAMl1B,EAAMsK,GACX8R,EAAMgZ,UAAUp1B,EAAMsK,EAC/B,CA9ES8uB,CAAsBhd,EAAOpc,EACtC,CAaO,SAASmS,GAAIiK,EAAO+X,GAEzB,IAAM/mB,EAAS,GAEf,GAAI,aAAc+mB,EAGhB,IAFA,IAAMkF,EAAQlF,EAAO/hB,SACjBtK,GAAS,IACJA,EAAQuxB,EAAM96B,QAAQ,CAC7B,IAAM+L,EAASyH,GAAIqK,EAAOid,EAAMvxB,GAAQqsB,GAGxC,GAAI7pB,EAAQ,CACV,GAAIxC,GAAmC,UAA1BuxB,EAAMvxB,EAAQ,GAAGpG,OACvB9E,MAAMF,QAAQ4N,IAA2B,SAAhBA,EAAO5I,OACnC4I,EAAO5M,MAAQ4M,EAAO5M,MAAM0B,QAAQ,OAAQ,MAGzCxC,MAAMF,QAAQ4N,IAA2B,YAAhBA,EAAO5I,MAAoB,CACvD,IAAMgb,EAAOpS,EAAO8H,SAAS,GAEzBsK,GAAsB,SAAdA,EAAKhb,OACfgb,EAAKhf,MAAQgf,EAAKhf,MAAM0B,QAAQ,OAAQ,IAE5C,CAGExC,MAAMF,QAAQ4N,GAChB8C,EAAOrM,KAAIkG,MAAXmG,GAAMnH,EAAAA,EAAAA,GAASqE,IAEf8C,EAAOrM,KAAKuJ,EAEhB,CACF,CAGF,OAAO8C,CACT,CA0CO,SAASoB,GAAK6qB,EAAO1C,GAE1B,IAAMrsB,EAAS,GACXxC,GAAS,EAMb,IAJI6uB,GACFrsB,EAAOvJ,KAAK,CAACW,KAAM,OAAQhE,MAAO,SAG3BoK,EAAQuxB,EAAM96B,QACjBuJ,GAAOwC,EAAOvJ,KAAK,CAACW,KAAM,OAAQhE,MAAO,OAC7C4M,EAAOvJ,KAAKs4B,EAAMvxB,IAOpB,OAJI6uB,GAAS0C,EAAM96B,OAAS,GAC1B+L,EAAOvJ,KAAK,CAACW,KAAM,OAAQhE,MAAO,OAG7B4M,CACT,CEheO,SAASgvB,GAAOloB,EAAM9T,GAC3B,IAAM8e,EAAQ6b,GAAY7mB,EAAM9T,GAC1B0C,EAAOoc,EAAMrK,IAAIX,EAAM,MACvBmoB,EClFD,SAAgBnd,GAKrB,IAHA,IAAMod,EAAY,GACd1xB,GAAS,IAEJA,EAAQsU,EAAMuY,cAAcp2B,QAAQ,CAC3C,IAAMif,EAAMpB,EAAMga,aAAaha,EAAMuY,cAAc7sB,IAEnD,GAAK0V,EAAL,CAWA,IAPA,IAAMld,EAAU8b,EAAMjK,IAAIqL,GACpBiX,EAAK7jB,OAAO4M,EAAIoD,YAAYF,cAC5BgU,EAAS/B,GAAa8B,EAAGhU,eAC3BgZ,EAAiB,EAEfC,EAAiB,KAEdD,GAAkBrd,EAAMwY,eAAeH,IAAK,CAEnD,IAAMkF,EAAgB,CACpBj4B,KAAM,UACN8gB,QAAS,IACTsS,WAAY,CACV3pB,KACE,IACAiR,EAAM2Y,cACN,SACAL,GACC+E,EAAiB,EAAI,IAAMA,EAAiB,IAC/CG,qBAAqB,EACrB3D,UAAW,CAAC,yBACZ4D,UAAWzd,EAAMkc,mBAEnBlmB,SAAU,CAAC,CAAC1Q,KAAM,OAAQhE,MAAO,YAG/B+7B,EAAiB,GACnBE,EAAcvnB,SAASrR,KAAK,CAC1BW,KAAM,UACN8gB,QAAS,MACTpQ,SAAU,CAAC,CAAC1Q,KAAM,OAAQhE,MAAOkT,OAAO6oB,OAIxCC,EAAen7B,OAAS,GAC1Bm7B,EAAe34B,KAAK,CAACW,KAAM,OAAQhE,MAAO,MAG5Cg8B,EAAe34B,KAAK44B,EACtB,CAEA,IAAM3f,EAAO1Z,EAAQA,EAAQ/B,OAAS,GAEtC,GAAIyb,GAAsB,YAAdA,EAAKtY,MAAuC,MAAjBsY,EAAKwI,QAAiB,KAAAsX,EACrDC,EAAW/f,EAAK5H,SAAS4H,EAAK5H,SAAS7T,OAAS,GAClDw7B,GAA8B,SAAlBA,EAASr4B,KACvBq4B,EAASr8B,OAAS,IAElBsc,EAAK5H,SAASrR,KAAK,CAACW,KAAM,OAAQhE,MAAO,OAG3Co8B,EAAA9f,EAAK5H,UAASrR,KAAIkG,MAAA6yB,EAAIJ,EACxB,MACEp5B,EAAQS,KAAIkG,MAAZ3G,EAAgBo5B,GAIlB,IAAM9M,EAAW,CACflrB,KAAM,UACN8gB,QAAS,KACTsS,WAAY,CAACL,GAAIrY,EAAM2Y,cAAgB,MAAQL,GAC/CtiB,SAAUgK,EAAM5N,KAAKlO,GAAS,IAGhC8b,EAAM8Y,MAAM1X,EAAKoP,GAEjB4M,EAAUz4B,KAAK6rB,EApEf,CAqEF,CAEA,GAAyB,IAArB4M,EAAUj7B,OAId,MAAO,CACLmD,KAAM,UACN8gB,QAAS,UACTsS,WAAY,CAACkF,eAAe,EAAM/D,UAAW,CAAC,cAC9C7jB,SAAU,CACR,CACE1Q,KAAM,UACN8gB,QAASpG,EAAMgc,qBACftD,YAAU2D,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GAEL5tB,KAAKzF,MAAMyF,KAAKC,UAAUsR,EAAMic,2BAAyB,IAC5D5D,GAAI,mBAENriB,SAAU,CAAC,CAAC1Q,KAAM,OAAQhE,MAAO0e,EAAM+b,iBAEzC,CAACz2B,KAAM,OAAQhE,MAAO,MACtB,CACEgE,KAAM,UACN8gB,QAAS,KACTsS,WAAY,CAAC,EACb1iB,SAAUgK,EAAM5N,KAAKgrB,GAAW,IAElC,CAAC93B,KAAM,OAAQhE,MAAO,OAG5B,CD5Beu8B,CAAO7d,GAUpB,OARImd,GAIFv5B,EAAKoS,SAASrR,KAAK,CAACW,KAAM,OAAQhE,MAAO,MAAO67B,GAI3C38B,MAAMF,QAAQsD,GAAQ,CAAC0B,KAAM,OAAQ0Q,SAAUpS,GAAQA,CAChE,CE3EA,IAUA,GAPI,SAAU0R,EAAapU,GACrB,OAAOoU,GAAe,QAASA,EAcrC,SAAgBA,EAAapU,GAC3B,OAAO,SAAC0C,EAAM0I,EAAM8E,GAClBkE,EAAYvE,IAAImsB,GAAOt5B,EAAM1C,GAAUoL,GAAM,SAAClI,GAC5CgN,EAAKhN,EACP,GACF,CACF,CAnBU05B,CAAOxoB,EAAapU,GA2B9B,SAAgBA,GAEd,OAAO,SAAC0C,GAAI,OAAKs5B,GAAOt5B,EAAM1C,EAAQ,CACxC,CA7BU68B,CAAOzoB,GAAepU,EAC5B,kBCpCS88B,IAAMt0B,EAAAA,EAAAA,IAOjB,SAAAs0B,EAAYr4B,EAAUs4B,EAAQC,IAAO30B,EAAAA,EAAAA,GAAA,KAAAy0B,GACnCj6B,KAAK4B,SAAWA,EAChB5B,KAAKk6B,OAASA,EACVC,IACFn6B,KAAKm6B,MAAQA,EAEjB,ICPK,SAASC,GAAM5B,EAAa2B,GAOjC,IALA,IAAMv4B,EAAW,CAAC,EAEZs4B,EAAS,CAAC,EACZvyB,GAAS,IAEJA,EAAQ6wB,EAAYp6B,QAC3BrC,OAAO+T,OAAOlO,EAAU42B,EAAY7wB,GAAO/F,UAC3C7F,OAAO+T,OAAOoqB,EAAQ1B,EAAY7wB,GAAOuyB,QAG3C,OAAO,IAAID,GAAOr4B,EAAUs4B,EAAQC,EACtC,CCrBO,SAAS3vB,GAAUjN,GACxB,OAAOA,EAAM+iB,aACf,CFiBA2Z,GAAOj+B,UAAU4F,SAAW,CAAC,EAE7Bq4B,GAAOj+B,UAAUk+B,OAAS,CAAC,EAE3BD,GAAOj+B,UAAUm+B,MAAQ,KG3BlB,IAAME,IAAI10B,EAAAA,EAAAA,IAMf,SAAA00B,EAAYz4B,EAAU04B,IAAW90B,EAAAA,EAAAA,GAAA,KAAA60B,GAE/Br6B,KAAK4B,SAAWA,EAEhB5B,KAAKs6B,UAAYA,CACnB,IAIFD,GAAKr+B,UAAUm+B,MAAQ,KACvBE,GAAKr+B,UAAUu+B,SAAU,EACzBF,GAAKr+B,UAAUw+B,YAAa,EAC5BH,GAAKr+B,UAAUy+B,mBAAoB,EACnCJ,GAAKr+B,UAAU0+B,QAAS,EACxBL,GAAKr+B,UAAU2+B,gBAAiB,EAChCN,GAAKr+B,UAAU4+B,gBAAiB,EAChCP,GAAKr+B,UAAU6+B,uBAAwB,EACvCR,GAAKr+B,UAAU8+B,iBAAkB,EACjCT,GAAKr+B,UAAUglB,SAAU,ECxBzB,IAAI+Z,GAAS,EAEAR,GAAUS,KACVR,GAAaQ,KACbP,GAAoBO,KACpBN,GAASM,KACTJ,GAAiBI,KACjBL,GAAiBK,KACjBH,GAAwBG,KAErC,SAASA,KACP,OAAA/I,KAAAgJ,IAAO,IAAOF,GAChB,CCPA,IAAM9H,GAASl3B,OAAOyV,KAAK0pB,GAEdC,GAAW,SAAAC,GAQtB,SAAAD,EAAYv5B,EAAU04B,EAAWe,EAAMlB,GAAO,IAAAnyB,GAAAxC,EAAAA,EAAAA,GAAA,KAAA21B,GAC5C,IAAIxzB,GAAS,EAMb,GAFA2zB,GAFAtzB,EAAApB,EAAA,KAAAu0B,EAAA,CAAMv5B,EAAU04B,IAEL,QAASH,GAEA,kBAATkB,EACT,OAAS1zB,EAAQsrB,GAAO70B,QAAQ,CAC9B,IAAMsY,EAAQuc,GAAOtrB,GACrB2zB,GAAItzB,EAAOirB,GAAOtrB,IAAS0zB,EAAOH,EAAMxkB,MAAYwkB,EAAMxkB,GAC5D,CACD,OAAA1O,CACH,CAAC,OAAAjB,EAAAo0B,EAAAC,IAAAz1B,EAAAA,EAAAA,GAAAw1B,EAAA,CArBqB,CAASd,IA+BjC,SAASiB,GAAKruB,EAAQpQ,EAAKU,GACrBA,IAEF0P,EAAOpQ,GAAOU,EAElB,CAZA49B,GAAYn/B,UAAUglB,SAAU,ECbhC,IAAM/R,GAAM,CAAC,EAAEhT,eAMR,SAAS+K,GAAOwZ,GAErB,IAII/e,EAJEG,EAAW,CAAC,EAEZs4B,EAAS,CAAC,EAIhB,IAAKz4B,KAAQ+e,EAAWmU,WACtB,GAAI1lB,GAAIvS,KAAK8jB,EAAWmU,WAAYlzB,GAAO,CACzC,IAAMlE,EAAQijB,EAAWmU,WAAWlzB,GAC9Bia,EAAO,IAAIyf,GACf15B,EACA+e,EAAW+a,UAAU/a,EAAWgb,YAAc,CAAC,EAAG/5B,GAClDlE,EACAijB,EAAW2Z,OAIX3Z,EAAWsa,iBACXta,EAAWsa,gBAAgB5uB,SAASzK,KAEpCia,EAAKof,iBAAkB,GAGzBl5B,EAASH,GAAQia,EAEjBwe,EAAO1vB,GAAU/I,IAASA,EAC1By4B,EAAO1vB,GAAUkR,EAAK4e,YAAc74B,CACtC,CAGF,OAAO,IAAIw4B,GAAOr4B,EAAUs4B,EAAQ1Z,EAAW2Z,MACjD,CCvDO,IAAMsB,GAAQz0B,GAAO,CAC1BmzB,MAAO,QACPoB,UAAS,SAAC1e,EAAGpb,GACX,MAAO,SAAWA,EAAKT,MAAM,GAAGsf,aAClC,EACAqU,WAAY,CACV+G,aAAc,KACdC,aAAc,KACdC,UAAW,KACXC,UAAW,KACXC,UAAW,KACXC,WAAY,KACZC,UAAW,QCZFC,GAAMj1B,GAAO,CACxBmzB,MAAO,MACPoB,UAAS,SAAC1e,EAAGpb,GACX,MAAO,OAASA,EAAKT,MAAM,GAAGsf,aAChC,EACAqU,WAAY,CAACuH,QAAS,KAAMC,QAAS,KAAMC,SAAU,QCFhD,SAASC,GAAuBb,EAAYlB,GACjD,OAAOA,KAAakB,EAAaA,EAAWlB,GAAaA,CAC3D,CCAO,SAASgC,GAAyBd,EAAY55B,GACnD,OAAOy6B,GAAuBb,EAAY55B,EAAS0e,cACrD,CCNO,IAAMic,GAAQv1B,GAAO,CAC1BmzB,MAAO,QACPqB,WAAY,CAACgB,WAAY,eACzBjB,UAAWe,GACX3H,WAAY,CAAC4H,MAAO,KAAME,WAAY,QCJ3BC,GAAO11B,GAAO,CACzBu0B,UAAS,SAAC1e,EAAGpb,GACX,MAAgB,SAATA,EAAkBA,EAAO,QAAUA,EAAKT,MAAM,GAAGsf,aAC1D,EACAqU,WAAY,CACVgI,qBAAsB,KACtBC,WAAYpC,GACZqC,iBAAkB,KAClBC,SAAUtC,GACVuC,YAAavC,GACbwC,aAActC,GACduC,aAAcvC,GACdwC,YAAaxC,GACbyC,aAAcvC,GACdwC,YAAa,KACbtI,gBAAiB8F,GACjByC,YAAa,KACbC,aAAc9C,GACd+C,eAAgB3C,GAChB4C,iBAAkB,KAClBC,aAAcjD,GACdkD,WAAY9C,GACZ+C,YAAanD,GACboD,aAAc,KACdC,WAAYrD,GACZsD,YAAa,KACbC,iBAAkB,KAClBrE,UAAW,KACXsE,eAAgBpD,GAChBqD,UAAWvD,GACXwD,SAAU,KACVC,UAAW3D,GACX4D,cAAe5D,GACf6D,oBAAqB7D,GACrB8D,gBAAiB,KACjBC,SAAU3D,GACV4D,gBAAiB,KACjBC,aAAc/D,GACdgE,YAAalE,GACbmE,aAAcnE,GACdoE,aAAc,KACdC,aAAcrE,GACdsE,oBAAqBlE,GACrBmE,aAAcrE,GACdsE,aAActE,GACduE,YAAavE,GACbwE,aAAc1E,GACd2E,YAAazE,GACb0E,SAAU,KACVC,aAAc3E,GACd4E,aAAc5E,GACd6E,aAAc7E,GACd8E,cAAe,KACfC,KAAM,QC7CGpT,GAAOrlB,GAAO,CACzBmzB,MAAO,OACPqB,WAAY,CACVkE,cAAe,iBACfC,UAAW,QACXC,QAAS,MACTC,UAAW,cAEbtE,UAAWe,GACXxB,gBAAiB,CAAC,UAAW,WAAY,QAAS,YAClDnG,WAAY,CAEVmL,KAAM,KACNC,OAAQpF,GACRqF,cAAepF,GACfqF,UAAWrF,GACXsF,OAAQ,KACRC,MAAO,KACPC,gBAAiB7F,GACjB8F,oBAAqB9F,GACrB+F,eAAgB/F,GAChBxoB,IAAK,KACLwuB,GAAI,KACJC,MAAOjG,GACPkG,eAAgB,KAChBC,aAAc9F,GACd+F,UAAWpG,GACXqG,SAAUrG,GACVsG,SAAUjG,GACVkG,QAAS,KACTC,QAAS,KACTpP,QAAS4I,GACTyG,KAAM,KACNlL,UAAW8E,GACXqG,KAAMvG,GACNwG,QAAS,KACT/gC,QAAS,KACTghC,gBAAiB3G,GACjB4G,SAAU7G,GACV8G,aAAczG,GACd0G,OAAQ5G,GAASC,GACjB4G,YAAa,KACb11B,KAAM,KACN21B,SAAU,KACVC,SAAU,KACVC,QAASnH,GACToH,MAAOpH,GACPqH,IAAK,KACLC,QAAS,KACTnL,SAAU6D,GACVuH,SAAUrH,GACVsH,UAAWvH,GACXwH,QAAS,KACTC,aAAc,KACdC,cAAe,KACfC,KAAM,KACNC,WAAY,KACZC,YAAa,KACbC,WAAY,KACZC,eAAgBhI,GAChBiI,WAAY,KACZC,QAAS7H,GACT8H,OAAQhI,GACRiI,OAAQpI,GACRqI,KAAMlI,GACN1vB,KAAM,KACN63B,SAAU,KACVC,QAASlI,GACTmI,UAAWnI,GACXtG,GAAI,KACJ0O,WAAY,KACZC,YAAa,KACbC,MAAO3I,GACP4I,UAAW,KACXC,UAAW,KACX5P,GAAI,KACJ6P,MAAO9I,GACP+I,OAAQ,KACRC,SAAU3I,GACV4I,QAAS5I,GACT6I,UAAWlJ,GACXmJ,SAAU9I,GACVzc,KAAM,KACNoI,MAAO,KACP2K,KAAM,KACNyS,SAAU,KACVxxB,KAAM,KACNyxB,QAAS,KACTC,KAAMtJ,GACNuJ,IAAKpJ,GACLqJ,SAAU,KACV5vB,IAAK,KACL6vB,UAAWtJ,GACXrU,MAAO,KACP4d,OAAQ,KACRC,IAAK,KACLC,UAAWzJ,GACX0J,SAAU7J,GACV8J,MAAO9J,GACPn9B,KAAM,KACNknC,MAAO,KACPC,SAAUhK,GACViK,WAAYjK,GACZkK,QAAS,KACTC,aAAc,KACdC,WAAY,KACZC,cAAe,KACfC,cAAe,KACfC,eAAgB,KAChBC,eAAgB,KAChBC,OAAQ,KACRC,SAAU,KACVC,UAAW,KACXC,iBAAkB,KAClBC,SAAU,KACVC,QAAS,KACTC,QAAS,KACTC,cAAe,KACfC,cAAe,KACfC,kBAAmB,KACnBC,OAAQ,KACRC,YAAa,KACbC,MAAO,KACPC,WAAY,KACZC,OAAQ,KACRC,UAAW,KACXC,YAAa,KACbC,WAAY,KACZC,YAAa,KACbC,WAAY,KACZC,YAAa,KACbC,OAAQ,KACRC,iBAAkB,KAClBC,UAAW,KACXC,QAAS,KACTC,QAAS,KACTC,QAAS,KACTC,WAAY,KACZC,aAAc,KACdC,QAAS,KACTC,UAAW,KACXC,UAAW,KACXC,WAAY,KACZC,QAAS,KACTC,iBAAkB,KAClBC,OAAQ,KACRC,aAAc,KACdC,iBAAkB,KAClBC,UAAW,KACXC,YAAa,KACbC,UAAW,KACXC,eAAgB,KAChBC,YAAa,KACbC,aAAc,KACdC,aAAc,KACdC,YAAa,KACbC,WAAY,KACZC,YAAa,KACbC,UAAW,KACXC,UAAW,KACXC,SAAU,KACVC,WAAY,KACZC,WAAY,KACZC,QAAS,KACTC,QAAS,KACTC,OAAQ,KACRC,UAAW,KACXC,WAAY,KACZC,WAAY,KACZC,aAAc,KACdC,mBAAoB,KACpBC,QAAS,KACTC,SAAU,KACVC,SAAU,KACVC,YAAa,KACbC,0BAA2B,KAC3BC,SAAU,KACVC,UAAW,KACXC,SAAU,KACVC,aAAc,KACdC,UAAW,KACXC,UAAW,KACXC,SAAU,KACVC,UAAW,KACXC,aAAc,KACdC,SAAU,KACVC,qBAAsB,KACtBC,SAAU,KACVC,eAAgB,KAChBC,UAAW,KACXC,QAAS,KACThrB,KAAMub,GACN0P,QAASvP,GACTwP,QAAS,KACTC,KAAMvP,GACNwP,YAAa,KACbC,YAAa9P,GACb+P,QAAS,KACTC,cAAe,KACfC,oBAAqB,KACrBC,OAAQ,KACRC,QAAS,KACTC,SAAUpQ,GACVqQ,eAAgB,KAChBC,IAAKjQ,GACLkQ,SAAUvQ,GACVwQ,SAAUxQ,GACVzD,KAAM4D,GACNsQ,QAAStQ,GACTuQ,QAASrQ,GACTsQ,MAAO,KACPC,OAAQ5Q,GACR6Q,SAAU7Q,GACV8Q,SAAU9Q,GACV+Q,mBAAoB/Q,GACpBgR,yBAA0BhR,GAC1BiR,eAAgB,KAChBC,MAAO,KACPp3B,KAAMqmB,GACNgR,MAAO,KACPC,KAAM,KACNC,KAAMlR,GACNmR,WAAYrR,GACZ18B,IAAK,KACLguC,OAAQ,KACRC,QAAS,KACTC,OAAQ,KACRrsC,MAAO+6B,GACPjH,KAAM,KACNv0B,MAAO,KACP+sC,SAAUvR,GACVx9B,OAAQ,KACRi0B,MAAO,KACP+a,UAAW,KACX3qC,KAAM,KACN4qC,cAAe5R,GACf6R,OAAQ,KACR7uC,MAAOi9B,GACP6R,MAAO3R,GACPrsB,KAAM,KACNi+B,mBAAoB,KAIpBjV,MAAO,KACPkV,MAAO,KACPC,QAAS5R,GACT6R,KAAM,KACNC,WAAY,KACZC,QAAS,KACTC,OAAQlS,GACRmS,YAAa,KACbC,aAAcpS,GACdqS,YAAa,KACbC,YAAa,KACb3nB,KAAM,KACN4nB,QAAS,KACTC,QAAS,KACTC,MAAO,KACPzjC,KAAM,KACN0jC,SAAU,KACVC,SAAU,KACVC,MAAO,KACPC,QAAShT,GACTiT,QAASjT,GACTpiB,MAAO,KACPs1B,KAAM,KACNC,MAAO,KACPC,YAAa,KACbC,OAAQlT,GACRmT,WAAYnT,GACZrP,KAAM,KACNyiB,SAAU,KACVC,OAAQ,KACRC,aAActT,GACduT,YAAavT,GACbwT,SAAU3T,GACV4T,OAAQ5T,GACR6T,QAAS7T,GACT8T,OAAQ9T,GACR+T,OAAQ,KACRC,QAAS,KACTC,OAAQ,KACRC,IAAK,KACLC,YAAahU,GACbx5B,MAAO,KACPytC,OAAQ,KACRC,UAAWpU,GACXqU,QAAS,KACTC,QAAS,KACTv0B,KAAM,KACNw0B,UAAWrU,GACXsU,UAAW,KACXC,QAAS,KACTC,OAAQ,KACRC,MAAO,KACPC,OAAQ1U,GAGR2U,kBAAmB,KACnBC,YAAa,KACbC,SAAU,KACVC,wBAAyBjV,GACzBkV,sBAAuBlV,GACvBhmB,OAAQ,KACR3S,SAAU,KACV20B,QAASmE,GACTgV,SAAU,KACVC,aAAc,QCrTLC,GAAM5oC,GAAO,CACxBmzB,MAAO,MACPqB,WAAY,CACVqU,aAAc,gBACdC,kBAAmB,qBACnBC,WAAY,cACZC,cAAe,iBACfC,UAAW,aACXna,UAAW,QACXoa,SAAU,YACVC,SAAU,YACVC,mBAAoB,sBACpBC,0BAA2B,8BAC3BC,aAAc,gBACdC,eAAgB,kBAChBhP,YAAa,cACbiP,SAAU,WACVC,iBAAkB,oBAClBC,iBAAkB,oBAClBC,YAAa,eACbC,SAAU,YACVC,WAAY,cACZC,aAAc,gBACdC,WAAY,cACZC,SAAU,YACVC,eAAgB,mBAChBC,YAAa,eACbC,UAAW,aACXC,YAAa,eACbC,WAAY,cACZC,UAAW,aACXC,2BAA4B,+BAC5BC,yBAA0B,6BAC1B3O,SAAU,WACV4O,UAAW,cACXC,aAAc,iBACdC,aAAc,iBACdC,eAAgB,kBAChBC,cAAe,iBACfC,cAAe,iBACfC,UAAW,aACXC,UAAW,aACXC,YAAa,eACbC,QAAS,WACTC,YAAa,gBACbC,aAAc,iBACdC,QAAS,WACTC,QAAS,WACTC,QAAS,WACTC,SAAU,YACVC,MAAO,SACPC,UAAW,cACXC,WAAY,eACZlO,QAAS,UACTmO,WAAY,aACZlO,aAAc,eACdG,cAAe,gBACfgO,QAAS,UACT5N,SAAU,WACVC,UAAW,YACXC,iBAAkB,mBAClBC,SAAU,WACVC,QAAS,UACTC,QAAS,UACTI,OAAQ,SACRC,YAAa,cACbC,MAAO,QACPC,WAAY,aACZC,OAAQ,SACRC,UAAW,YACXC,YAAa,cACbC,WAAY,aACZC,YAAa,cACbC,WAAY,aACZC,YAAa,cACbC,OAAQ,SACRC,iBAAkB,mBAClBC,UAAW,YACXuM,MAAO,QACPtM,QAAS,UACTC,QAAS,UACTC,QAAS,UACTqM,UAAW,YACXC,WAAY,aACZpM,aAAc,eACdC,QAAS,UACTC,UAAW,YACXC,UAAW,YACXC,WAAY,aACZC,QAAS,UACTE,OAAQ,SACRC,aAAc,eACdC,iBAAkB,mBAClBE,YAAa,cACbC,UAAW,YACXE,YAAa,cACbC,aAAc,eACdC,aAAc,eACdC,YAAa,cACbC,WAAY,aACZC,YAAa,cACbC,UAAW,YACXiL,aAAc,eACdhL,UAAW,YACXC,SAAU,WACVC,WAAY,aACZC,WAAY,aACZC,QAAS,UACTC,QAAS,UACTC,OAAQ,SACRC,UAAW,YACXC,WAAY,aACZC,WAAY,aACZC,aAAc,eACduK,SAAU,WACVrK,QAAS,UACTC,SAAU,WACVC,SAAU,WACVG,SAAU,WACVC,UAAW,YACXC,SAAU,WACV+J,OAAQ,SACR7J,UAAW,YACXC,UAAW,YACXC,SAAU,WACVC,UAAW,YACXC,aAAc,eACdC,SAAU,WACVE,SAAU,WACVC,eAAgB,iBAChBC,UAAW,YACXqJ,OAAQ,SACRC,iBAAkB,oBAClBC,kBAAmB,qBACnBC,WAAY,cACZC,QAAS,WACTC,cAAe,iBACf7I,eAAgB,iBAChB8I,gBAAiB,mBACjBC,eAAgB,kBAChBC,UAAW,aACXC,YAAa,eACbC,sBAAuB,yBACvBC,uBAAwB,0BACxBC,gBAAiB,mBACjBC,iBAAkB,oBAClBC,cAAe,iBACfC,eAAgB,kBAChBC,iBAAkB,oBAClBC,cAAe,iBACfC,YAAa,eACbrI,SAAU,WACVsI,WAAY,cACZC,eAAgB,kBAChBC,cAAe,iBACfC,gBAAiB,mBACjB1vC,OAAQ,SACR2vC,kBAAmB,qBACnBC,mBAAoB,sBACpBC,YAAa,eACbC,aAAc,gBACdC,WAAY,eACZC,YAAa,eACbC,SAAU,YACVC,aAAc,gBACdC,cAAe,iBACfC,aAAc,gBACdC,SAAU,aACVC,YAAa,gBACbC,YAAa,gBACbC,YAAa,eACbC,YAAa,eACbC,QAAS,WAETC,cAAe,gBACfC,cAAe,iBAEjBra,UAAWc,GACX1H,WAAY,CACVkhB,MAAOhb,GACPgV,aAAcnV,GACdob,WAAY,KACZC,SAAU,KACVjG,kBAAmB,KACnBkG,WAAYtb,GACZub,UAAWvb,GACXqV,WAAY,KACZmG,OAAQxb,GACRyb,cAAe,KACfC,cAAe,KACfC,QAAS3b,GACT4b,UAAW,KACXtG,cAAe,KACfuG,cAAe,KACfC,YAAa,KACbC,KAAM,KACNv2B,MAAO,KACPw2B,KAAMhc,GACNic,GAAI,KACJC,SAAU,KACV3G,UAAWvV,GACX5E,UAAW8E,GACXic,KAAM,KACN3G,SAAU,KACV4G,cAAe,KACf3G,SAAU,KACV7C,MAAO,KACP8C,mBAAoB,KACpBC,0BAA2B,KAC3BC,aAAc,KACdC,eAAgB,KAChBpwC,QAAS,KACT42C,kBAAmB,KACnBC,iBAAkB,KAClBzV,YAAa,KACb0V,OAAQ,KACRC,GAAI,KACJC,GAAI,KACJ90C,EAAG,KACHmuC,SAAU,KACV4G,cAAe,KACfC,QAAS3c,GACT4c,gBAAiB5c,GACjB6c,UAAW,KACXC,QAAS,KACTC,IAAK,KACLC,QAAShd,GACT+V,iBAAkB,KAClB3O,SAAUvH,GACVod,GAAI,KACJC,GAAI,KACJC,SAAU,KACVC,SAAU,KACVC,UAAWrd,GACXgW,iBAAkB,KAClBzwC,IAAK,KACLkY,MAAO,KACP6/B,SAAUtd,GACVud,0BAA2B,KAC3BC,KAAM,KACNvH,YAAajW,GACbkW,SAAU,KACVuH,OAAQ,KACRC,UAAW,KACXC,YAAa,KACbxH,WAAY,KACZC,aAAc,KACdwH,UAAW,KACXC,eAAgB,KAChBxH,WAAY,KACZC,SAAU,KACVC,eAAgB,KAChBC,YAAa,KACbC,UAAW,KACXC,YAAa,KACbC,WAAY,KACZmH,OAAQ,KACRC,GAAI,KACJ5yC,KAAM,KACN6yC,GAAI,KACJC,GAAI,KACJC,GAAIje,GACJke,GAAIle,GACJ2W,UAAW3W,GACX4W,2BAA4B,KAC5BC,yBAA0B,KAC1BsH,SAAU,KACVC,kBAAmB,KACnBC,cAAe,KACfzoB,QAAS,KACT0oB,QAASve,GACTwe,kBAAmB,KACnBC,WAAY,KACZzW,OAAQ,KACR13B,KAAM,KACN63B,SAAU,KACV4O,UAAW/W,GACXgX,aAAchX,GACdiX,aAAcjX,GACdpG,GAAI,KACJ8kB,YAAa1e,GACbkX,eAAgB,KAChByH,kBAAmB,KACnBC,GAAI,KACJC,IAAK,KACLC,UAAW9e,GACXh4B,EAAGg4B,GACH+e,GAAI/e,GACJgf,GAAIhf,GACJif,GAAIjf,GACJkf,GAAIlf,GACJmf,aAAchf,GACdif,iBAAkB,KAClBC,UAAW,KACXC,WAAY,KACZC,SAAU,KACVC,QAAS,KACThpB,KAAM,KACNipB,aAAc,KACdtI,cAAe,KACfC,cAAe,KACfsI,kBAAmB1f,GACnB2f,MAAO,KACPtI,UAAW,KACXC,UAAW,KACXC,YAAa,KACbqI,aAAc,KACdC,YAAa,KACbC,YAAa,KACbnf,KAAM,KACNof,iBAAkB,KAClBC,UAAW,KACXC,aAAc,KACdxmC,IAAK,KACLkS,MAAO,KACPu0B,uBAAwB,KACxBC,sBAAuB,KACvBC,UAAWpgB,GACXqgB,UAAW,KACX9W,OAAQ,KACRC,IAAK,KACL8W,KAAM,KACN59C,KAAM,KACN80C,QAAS,KACTC,YAAa,KACbC,aAAc,KACdC,QAAS,KACTC,QAAS,KACTC,QAAS,KACTC,SAAU,KACVC,MAAO,KACPC,UAAW,KACXC,WAAY,KACZsI,WAAY,KACZC,SAAU,KACVlkC,OAAQ,KACRytB,QAAS,KACTmO,WAAY,KACZlO,aAAc,KACdG,cAAe,KACfgO,QAAS,KACT5N,SAAU,KACVC,UAAW,KACXC,iBAAkB,KAClBC,SAAU,KACVC,QAAS,KACTC,QAAS,KACTI,OAAQ,KACRC,YAAa,KACbC,MAAO,KACPC,WAAY,KACZC,OAAQ,KACRC,UAAW,KACXC,YAAa,KACbC,WAAY,KACZC,YAAa,KACbC,WAAY,KACZC,YAAa,KACbC,OAAQ,KACRC,iBAAkB,KAClBC,UAAW,KACXuM,MAAO,KACPtM,QAAS,KACTC,QAAS,KACTC,QAAS,KACTqM,UAAW,KACXC,WAAY,KACZpM,aAAc,KACdC,QAAS,KACTC,UAAW,KACXC,UAAW,KACXC,WAAY,KACZC,QAAS,KACTE,OAAQ,KACRC,aAAc,KACdC,iBAAkB,KAClBE,YAAa,KACbC,UAAW,KACXE,YAAa,KACbC,aAAc,KACdC,aAAc,KACdC,YAAa,KACbC,WAAY,KACZC,YAAa,KACbC,UAAW,KACXiL,aAAc,KACdhL,UAAW,KACXC,SAAU,KACVC,WAAY,KACZC,WAAY,KACZC,QAAS,KACTC,QAAS,KACTC,OAAQ,KACRC,UAAW,KACXC,WAAY,KACZC,WAAY,KACZC,aAAc,KACduK,SAAU,KACVrK,QAAS,KACTC,SAAU,KACVC,SAAU,KACVG,SAAU,KACVC,UAAW,KACXC,SAAU,KACV+J,OAAQ,KACR7J,UAAW,KACXC,UAAW,KACXC,SAAU,KACVC,UAAW,KACXC,aAAc,KACdC,SAAU,KACVE,SAAU,KACVC,eAAgB,KAChBC,UAAW,KACXqJ,OAAQ,KACR+H,QAAS,KACTC,SAAU,KACV3vC,MAAO,KACP4vC,OAAQ,KACRC,YAAa,KACbvzC,OAAQ,KACRwzC,SAAU,KACVC,QAAS,KACTnI,iBAAkB3Y,GAClB4Y,kBAAmB5Y,GACnB6Y,WAAY,KACZC,QAAS,KACT5qC,KAAM,KACN6yC,WAAY/gB,GACZghB,oBAAqB,KACrBC,iBAAkB,KAClBC,aAAc,KACdC,MAAO,KACP1R,KAAMvP,GACNkhB,MAAO,KACPnG,cAAe,KACflC,cAAe,KACfsI,OAAQ,KACRC,UAAWthB,GACXuhB,UAAWvhB,GACXwhB,UAAWxhB,GACXyhB,cAAe,KACfC,oBAAqB,KACrBC,eAAgB,KAChBC,UAAW,KACX16C,SAAUi5B,GACV33B,EAAG,KACHq5C,OAAQ,KACR3R,eAAgB,KAChB4R,KAAM,KACNC,KAAM,KACN5R,IAAKhQ,GACL4T,IAAK5T,GACL6Y,gBAAiB,KACjBgJ,YAAa,KACbC,UAAW,KACXC,mBAAoB/hB,GACpBgiB,iBAAkBhiB,GAClBiiB,cAAejiB,GACfkiB,gBAAiBliB,GACjBrL,SAAU,KACVwtB,QAAS,KACT7yC,OAAQ,KACR8yC,OAAQ,KACRC,GAAI,KACJC,GAAI,KACJC,MAAO,KACPC,KAAM,KACN1J,eAAgB,KAChB2J,KAAM,KACNC,MAAO,KACPC,aAAc,KACdC,iBAAkB/iB,GAClBgjB,iBAAkBhjB,GAClBijB,aAAc,KACdC,QAAS,KACTC,YAAa,KACbC,aAAc,KACdC,MAAO,KACPC,MAAO,KACPC,YAAa,KACbrK,UAAW,KACXC,YAAa,KACbC,sBAAuBpZ,GACvBqZ,uBAAwBrZ,GACxBrgB,OAAQ,KACR6jC,OAAQ,KACRlK,gBAAiBnZ,GACjBoZ,iBAAkB,KAClBC,cAAe,KACfC,eAAgB,KAChBC,iBAAkB1Z,GAClB2Z,cAAe3Z,GACf4Z,YAAa,KACbp1C,MAAO,KACPi/C,aAAczjB,GACd0jB,aAAc,KACdC,oBAAqB,KACrBC,WAAY,KACZC,cAAe,KACfC,qBAAsB,KACtBC,eAAgB5jB,GAChBoR,SAAUvR,GACVgkB,YAAa,KACbxhD,OAAQ,KACRyhD,QAASjkB,GACTkkB,QAASlkB,GACT6Z,WAAY,KACZC,eAAgB,KAChBC,cAAe,KACfoK,WAAY,KACZjJ,cAAe,KACfzkB,MAAO,KACP2tB,kBAAmB,KACnBv9C,KAAM,KACNyD,OAAQ61B,GACR7B,GAAI,KACJuC,UAAW,KACXmZ,gBAAiB,KACjBqK,GAAI,KACJC,GAAI,KACJrK,kBAAmBja,GACnBka,mBAAoBla,GACpBukB,QAAS,KACTpK,YAAa,KACbC,aAAc,KACdC,WAAYra,GACZztB,OAAQ,KACR+nC,YAAata,GACbya,cAAeza,GACf0a,aAAc,KACdH,SAAUva,GACVwa,aAAcxa,GACduU,QAAS,KACToG,SAAU3a,GACV4a,YAAa5a,GACb6a,YAAa7a,GACbwkB,QAAS,KACTC,WAAY,KACZC,WAAY,KACZ/S,MAAO,KACPgT,OAAQ,KACR7J,YAAa,KACbC,YAAa,KACb6J,EAAG,KACHC,GAAI,KACJC,GAAI,KACJC,iBAAkB,KAClB/J,QAAShb,GACTglB,EAAG,KACHC,GAAI,KACJC,GAAI,KACJC,iBAAkB,KAClBC,EAAG,KACHC,WAAY,QCpiBH1zB,GAAO+N,GAAM,CAAC6B,GAAKR,GAAOc,GAAOG,GAAMsjB,IAAW,QAClDpQ,GAAMxV,GAAM,CAAC6B,GAAKR,GAAOc,GAAOG,GAAMujB,IAAU,OCM9C,SAASC,GAAa/iD,GACnC,GAAIA,EAAQgjD,iBAAmBhjD,EAAQijD,mBACrC,MAAM,IAAIjhD,UACR,4EAIJ,GACEhC,EAAQgjD,iBACRhjD,EAAQijD,oBACRjjD,EAAQkjD,aAER,OAAO,SAACpvC,GACN2iB,GAAM3iB,EAAM,WAAW,SAACpR,EAAM8H,EAAO24C,GACnC,IAEIluC,EAFE4hB,EAAsCssB,EAc5C,GAVInjD,EAAQgjD,gBACV/tC,GAAUjV,EAAQgjD,gBAAgBj0C,SAASrM,EAAKwiB,SACvCllB,EAAQijD,qBACjBhuC,EAASjV,EAAQijD,mBAAmBl0C,SAASrM,EAAKwiB,WAG/CjQ,GAAUjV,EAAQkjD,cAAiC,kBAAV14C,IAC5CyK,GAAUjV,EAAQkjD,aAAaxgD,EAAM8H,EAAOqsB,IAG1C5hB,GAA2B,kBAAVzK,EAAoB,CACQ,IAAA44C,EAA/C,GAAIpjD,EAAQqjD,kBAAoB3gD,EAAKoS,UACnCsuC,EAAAvsB,EAAO/hB,UAASC,OAAMpL,MAAAy5C,EAAA,CAAC54C,EAAO,GAACyG,QAAAtI,EAAAA,EAAAA,GAAKjG,EAAKoS,iBAEzC+hB,EAAO/hB,SAASC,OAAOvK,EAAO,GAGhC,OAAOA,CACT,CAGF,GACF,CAEJ,iBCrDO,SAAS5H,GAAW0gD,GAEzB,IAAMljD,EAEJkjD,GAA0B,kBAAVA,GAAqC,SAAfA,EAAMl/C,KAExCk/C,EAAMljD,OAAS,GACfkjD,EAIN,MAAwB,kBAAVljD,GAA4D,KAAtCA,EAAM0B,QAAQ,eAAgB,GACpE,CChBA,IAAMyhD,GAAQ,kBACRC,GAAO,UACPC,GAAM,SA+CZ,SAASC,GAAMj2B,GACb,MAAO,IAAMA,EAAGtK,aAClB,CAMA,SAASwgC,GAAUl2B,GACjB,OAAOA,EAAGtpB,OAAO,GAAGif,aACtB,CC1DO,IAAMwgC,GAAc,CACzB7T,QAAS,UACTsD,SAAU,WACVlN,OAAQ,SACR0Q,gBAAiB,kBACjBC,iBAAkB,mBAClBC,cAAe,gBACfC,eAAgB,iBAChBC,iBAAkB,mBAClBpvC,OAAQ,SACR02B,aAAc,eACdC,aAAc,eACdC,UAAW,YACXC,UAAW,YACXC,UAAW,YACXC,WAAY,aACZC,UAAW,YACXS,WAAY,kBCxBd,YCFMukB,GAAY,CAAC,OAAQ,QAAS,SAAU,OAMvC,SAASC,GAAeC,GAC7B,IAAMx4C,GAAOw4C,GAAO,IAAIniD,OAClBoiD,EAAQz4C,EAAIpH,OAAO,GAEzB,GAAc,MAAV6/C,GAA2B,MAAVA,EACnB,OAAOz4C,EAGT,IAAM04C,EAAQ14C,EAAItB,QAAQ,KAC1B,IAAe,IAAXg6C,EACF,OAAO14C,EAKT,IAFA,IAAIf,GAAS,IAEJA,EAAQq5C,GAAU5iD,QAAQ,CACjC,IAAM+M,EAAW61C,GAAUr5C,GAE3B,GACEy5C,IAAUj2C,EAAS/M,QACnBsK,EAAI1H,MAAM,EAAGmK,EAAS/M,QAAQkiB,gBAAkBnV,EAEhD,OAAOzC,CAEX,CAGA,OAAe,KADff,EAAQe,EAAItB,QAAQ,OACAg6C,EAAQz5C,IAKb,KADfA,EAAQe,EAAItB,QAAQ,OACAg6C,EAAQz5C,EAJnBe,EASF,oBACT,CCmEA,IAAMuG,GAAM,CAAC,EAAEhT,eAITolD,GAAgB,IAAIC,IAAI,CAAC,QAAS,QAAS,QAAS,QAAS,OAM5D,SAASC,GAAgBzoC,EAASjZ,GAOvC,IALA,IAGI82B,EAHE1kB,EAAW,GACbuvC,GAAc,IAITA,EAAa3hD,EAAKoS,SAAS7T,QAGf,aAFnBu4B,EAAQ92B,EAAKoS,SAASuvC,IAEZjgD,KACR0Q,EAASrR,KAAK6gD,GAAQ3oC,EAAS6d,EAAO6qB,EAAY3hD,IAC1B,SAAf82B,EAAMp1B,KASC,YAAd1B,EAAK0B,MACJ8/C,GAAch6C,IAAIxH,EAAKwiB,UACvBtiB,GAAW42B,IAEZ1kB,EAASrR,KAAK+1B,EAAMp5B,OAEE,QAAfo5B,EAAMp1B,MAAmBuX,EAAQ3b,QAAQukD,UAElDzvC,EAASrR,KAAK+1B,EAAMp5B,OAIxB,OAAO0U,CACT,CAQA,SAASwvC,GAAQ3oC,EAASjZ,EAAM8H,EAAOqsB,GACrC,IAaIpyB,EAbEzE,EAAU2b,EAAQ3b,QAClBo+B,OACyBrzB,IAA7B/K,EAAQwkD,iBACJV,GACA9jD,EAAQwkD,iBACRC,EAAe9oC,EAAQ+oC,OAGvBzkD,EAAOyC,EAAKwiB,QAEZsS,EAAa,CAAC,EAChBktB,EAASD,EASb,GAL2B,SAAvBA,EAAaznB,OAA6B,QAAT/8B,IACnCykD,EAASjS,GACT92B,EAAQ+oC,OAASA,GAGfhiD,EAAK80B,WACP,IAAK/yB,KAAY/B,EAAK80B,WAChB1lB,GAAIvS,KAAKmD,EAAK80B,WAAY/yB,IAC5BkgD,GAAYntB,EAAY/yB,EAAU/B,EAAK80B,WAAW/yB,GAAWkX,GAKtD,OAAT1b,GAA0B,OAATA,GACnB0b,EAAQipC,YAGV,IAAM9vC,EAAWsvC,GAAgBzoC,EAASjZ,GAE7B,OAATzC,GAA0B,OAATA,GACnB0b,EAAQipC,YAIVjpC,EAAQ+oC,OAASD,EAIjB,IAuOuBvgD,EAvOjB3B,EAAWG,EAAKH,UAAY,CAChCC,MAAO,CAACC,KAAM,KAAMP,OAAQ,KAAM2X,OAAQ,MAC1C/W,IAAK,CAACL,KAAM,KAAMP,OAAQ,KAAM2X,OAAQ,OAEpCgrC,EACJ7kD,EAAQ8kD,YAAchzC,GAAIvS,KAAKS,EAAQ8kD,WAAY7kD,GAC/CD,EAAQ8kD,WAAW7kD,GACnBA,EACA8kD,EAA6B,kBAAdF,GAA0BA,IAAcG,EAAAA,SAE7D,IAAKC,GAAAA,mBAA2BJ,GAC9B,MAAM,IAAI7iD,UAAU,uBAADiP,OACOhR,EAAI,uCAsDhC,GAlDAu3B,EAAW93B,IAAM8K,EAEJ,MAATvK,GAAgBD,EAAQklD,aAC1B1tB,EAAWz3B,OACqB,oBAAvBC,EAAQklD,WACXllD,EAAQklD,WACN5xC,OAAOkkB,EAAW3pB,MAAQ,IAC1BnL,EAAKoS,SACuB,kBAArB0iB,EAAWxD,MAAqBwD,EAAWxD,MAAQ,MAE5Dh0B,EAAQklD,YAGH,MAATjlD,GAAgBm+B,IAClB5G,EAAW3pB,KAAOuwB,EAChB9qB,OAAOkkB,EAAW3pB,MAAQ,IAC1BnL,EAAKoS,SACuB,kBAArB0iB,EAAWxD,MAAqBwD,EAAWxD,MAAQ,OAK3D+wB,GACQ,SAAT9kD,GACgB,YAAhB42B,EAAOzyB,MACY,QAAnByyB,EAAO3R,UAEPsS,EAAW2tB,QAAS,GAInBJ,GACS,OAAT9kD,GACU,OAATA,GACS,OAATA,GACS,OAATA,GACS,OAATA,GACS,OAATA,IAEFu3B,EAAW4tB,MAAQ/yC,OAAOib,SAASrtB,EAAKkE,OAAO,GAAI,KAGxC,QAATlE,GAAkBD,EAAQqlD,oBAC5B7tB,EAAW72B,IAAMX,EAAQqlD,kBACvB/xC,OAAOkkB,EAAW72B,KAAO,IACzB2S,OAAOkkB,EAAW5iB,KAAO,IACG,kBAArB4iB,EAAWxD,MAAqBwD,EAAWxD,MAAQ,QAIzD+wB,GAAkB,OAAT9kD,GAAiC,YAAhB42B,EAAOzyB,KAAoB,CACxD,IAAMkhD,EA0DV,SAAyB5iD,GACvB,IAAI8H,GAAS,EAEb,OAASA,EAAQ9H,EAAKoS,SAAS7T,QAAQ,CACrC,IAAMu4B,EAAQ92B,EAAKoS,SAAStK,GAE5B,GAAmB,YAAfgvB,EAAMp1B,MAAwC,UAAlBo1B,EAAMtU,QACpC,OAAOsU,CAEX,CAEA,OAAO,IACT,CAtEkB+rB,CAAgB7iD,GAC9B80B,EAAWhD,QACT8wB,GAASA,EAAM9tB,WAAanuB,QAAQi8C,EAAM9tB,WAAWhD,SAAW,KAClEgD,EAAWhtB,MAAQg7C,GAAuB3uB,EAAQn0B,GAClD80B,EAAWlD,QAA6B,OAAnBuC,EAAO3R,OAC9B,CA4CA,OA1CK6/B,GAAmB,OAAT9kD,GAA0B,OAATA,IAC9Bu3B,EAAWlD,QAAmB,OAATr0B,EACrBu3B,EAAWvD,MAAQtY,EAAQipC,WAGhB,OAAT3kD,GAA0B,OAATA,IACfu3B,EAAW0C,QACR1C,EAAWz1B,QAAOy1B,EAAWz1B,MAAQ,CAAC,GAE3Cy1B,EAAWz1B,MAAM0jD,UAAYjuB,EAAW0C,aACjC1C,EAAW0C,OAGf6qB,IACHvtB,EAAWkuB,SAAoB,OAATzlD,IAIrB8kD,GAAkB,OAAT9kD,GAAiC,YAAhB42B,EAAOzyB,OACpCozB,EAAWkuB,SAAWr8C,QAA2B,UAAnBwtB,EAAO3R,UAInCllB,EAAQ2lD,YACVnuB,EAAW,kBAsIN,EADgBtzB,EArI0B3B,GAuI3CC,MAAMC,KACV,IACAyB,EAAI1B,MAAMN,OACV,IACAgC,EAAIpB,IAAIL,KACR,IACAyB,EAAIpB,IAAIZ,QAEP4M,IAAIwE,QACJ9G,KAAK,MA7IHu4C,GAAS/kD,EAAQ4lD,eACpBpuB,EAAWquB,eAAiBnjD,EAAKH,WAI9BwiD,GAAS/kD,EAAQ8lD,sBACpBtuB,EAAWhtB,MAAQg7C,GAAuB3uB,EAAQn0B,GAClD80B,EAAWuuB,aAAeP,GAAuB3uB,IAG9CkuB,IACHvtB,EAAW90B,KAAOA,GAIboS,EAAS7T,OAAS,EACrB+jD,EAAAA,cAAoBH,EAAWrtB,EAAY1iB,GAC3CkwC,EAAAA,cAAoBH,EAAWrtB,EACrC,CAyBA,SAASguB,GAAuB3uB,EAAQn0B,GAItC,IAHA,IAAI8H,GAAS,EACTw7C,EAAQ,IAEHx7C,EAAQqsB,EAAO/hB,SAAS7T,QAC3B41B,EAAO/hB,SAAStK,KAAW9H,GACK,YAAhCm0B,EAAO/hB,SAAStK,GAAOpG,MAAoB4hD,IAGjD,OAAOA,CACT,CAQA,SAASrB,GAAY/oB,EAAOt3B,EAAMlE,EAAOs7B,GACvC,IAAMnd,EJjWD,SAAcmmC,EAAQtkD,GAC3B,IAAM28B,EAAS1vB,GAAUjN,GACrBkE,EAAOlE,EACP6lD,EAAO/oB,GAEX,GAAIH,KAAU2nB,EAAO3nB,OACnB,OAAO2nB,EAAOjgD,SAASigD,EAAO3nB,OAAOA,IAGvC,GAAIA,EAAO97B,OAAS,GAA4B,SAAvB87B,EAAOl5B,MAAM,EAAG,IAAiB0/C,GAAM5sC,KAAKvW,GAAQ,CAE3E,GAAwB,MAApBA,EAAM+D,OAAO,GAAY,CAE3B,IAAM+hD,EAAO9lD,EAAMyD,MAAM,GAAG/B,QAAQ0hD,GAAMG,IAC1Cr/C,EAAO,OAAS4hD,EAAK/hD,OAAO,GAAGif,cAAgB8iC,EAAKriD,MAAM,EAC5D,KAAO,CAEL,IAAMqiD,EAAO9lD,EAAMyD,MAAM,GAEzB,IAAK2/C,GAAK7sC,KAAKuvC,GAAO,CACpB,IAAIC,EAASD,EAAKpkD,QAAQ2hD,GAAKC,IAEN,MAArByC,EAAOhiD,OAAO,KAChBgiD,EAAS,IAAMA,GAGjB/lD,EAAQ,OAAS+lD,CACnB,CACF,CAEAF,EAAOjoB,EACT,CAEA,OAAO,IAAIioB,EAAK3hD,EAAMlE,EACxB,CI+TegmD,CAAK1qB,EAAIgpB,OAAQpgD,GAC1B0I,EAAS5M,EAIE,OAAX4M,QAA8BjC,IAAXiC,GAAwBA,IAAWA,IAMtD1N,MAAMF,QAAQ4N,KAChBA,EAASuR,EAAKif,eClUX,SAAmB1tB,EAAQ9P,GAChC,IAAMuS,EAAWvS,GAAW,CAAC,EAK7B,OAF4C,KAA9B8P,EAAOA,EAAO7O,OAAS,GAAY,GAAHgQ,QAAAtI,EAAAA,EAAAA,GAAOmH,GAAM,CAAE,KAAMA,GAGhEtD,MACE+F,EAAS8zC,SAAW,IAAM,IACzB,MACsB,IAArB9zC,EAAS+zC,QAAoB,GAAK,MAEtC1kD,MACL,CDqTmC2kD,CAAOv5C,GAAiBA,EExW3CR,KAAK,KAAK5K,QF2WF,UAAlB2c,EAAK9Z,UAA0C,kBAAXuI,IACtCA,EAkBJ,SAAoB5M,GAElB,IAAM4M,EAAS,CAAC,EAEhB,IACEjL,GAAM3B,EAAO6H,EACf,CAAE,MAAAu+C,GACA,CAGF,OAAOx5C,EAMP,SAAS/E,EAAShI,EAAM4F,GACtB,IAAMN,EAAyB,SAArBtF,EAAK4D,MAAM,EAAG,GAAgB,MAAHoN,OAAShR,EAAK4D,MAAM,IAAO5D,EAChE+M,EAAOzH,EAAEzD,QAAQ,YAAa2kD,KAAkB5gD,CAClD,CACF,CAtCa6gD,CAAW15C,IAGlBuR,EAAKye,OAASze,EAAK9Z,SACrBm3B,EACE9pB,GAAIvS,KAAKqkD,GAAarlC,EAAK9Z,UACvBm/C,GAAYrlC,EAAK9Z,UACjB8Z,EAAK9Z,UACPuI,EACKuR,EAAK4e,YACdvB,EAAMrd,EAAK4e,WAAanwB,GAE5B,CAgCA,SAASy5C,GAAc/mC,EAAGgO,GACxB,OAAOA,EAAGtK,aACZ,CG5YA,IAAMtR,GAAM,CAAC,EAAEhT,eACT6nD,GACJ,oEAGIC,GAAa,CACjB7zC,QAAS,CAAC8oB,GAAI,gBAAiB1E,GAAI,mCACnC0vB,UAAW,CAAChrB,GAAI,aAAc1E,GAAI,kCAClC2vB,WAAY,CAAC3vB,GAAI,wCACjByD,mBAAoB,CAACzD,GAAI,wCACzB4vB,WAAY,CAAC5vB,GAAI,wCACjBp0B,OAAQ,CAAC84B,GAAI,WAAY1E,GAAI,6BAC7B6vB,UAAW,CACTnrB,GAAI,eACJ1E,GAAI,sDAEN8vB,aAAc,CACZprB,GAAI,kBACJ1E,GAAI,sDAEN+vB,gBAAiB,CACfrrB,GAAI,qBACJ1E,GAAI,sDAENgwB,iBAAkB,CAChBtrB,GAAI,sBACJ1E,GAAI,mDAUD,SAASiwB,GAAcpnD,GAC5B,IAAK,IAAMN,KAAOknD,GAChB,GAAI90C,GAAIvS,KAAKqnD,GAAYlnD,IAAQoS,GAAIvS,KAAKS,EAASN,GAAM,CACvD,IAAM2nD,EAAcT,GAAWlnD,GAC/B4nD,QAAQC,KAAK,oCAADt2C,OAERo2C,EAAYxrB,GAAK,QAAH5qB,OAAYo2C,EAAYxrB,GAAE,gBAAkB,SAAQ,MAAA5qB,OAC9DvR,EAAG,YAAAuR,OAAY01C,GAAS,KAAA11C,OAAIo2C,EAAYlwB,GAAE,4BAE3CyvB,GAAWlnD,EACpB,CAGF,IAAMkS,EAAYP,IACfF,IAAIikB,IACJjkB,IAAInR,EAAQwnD,eAAiB,IAC7Br2C,IAAIs2C,IAAYtsB,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GACZn7B,EAAQ0nD,qBAAmB,IAC9B9sB,oBAAoB,KAErBzpB,IAAInR,EAAQ2nD,eAAiB,IAC7Bx2C,IAAI4xC,GAAc/iD,GAEfoL,EAAO,IAAImD,EAEe,kBAArBvO,EAAQ8U,SACjB1J,EAAKhL,MAAQJ,EAAQ8U,cACS/J,IAArB/K,EAAQ8U,UAA+C,OAArB9U,EAAQ8U,UACnDwyC,QAAQC,KAAK,uEAADt2C,OACgEjR,EAAQ8U,SAAQ,OAI9F,IAAM8yC,EAAWh2C,EAAUmC,QAAQnC,EAAU9J,MAAMsD,GAAOA,GAE1D,GAAsB,SAAlBw8C,EAASxjD,KACX,MAAM,IAAIpC,UAAU,0BAItB,IAAIgL,EAASg4C,EAAAA,cACXA,EAAAA,SACA,CAAC,EACDZ,GAAgB,CAACpkD,QAAAA,EAAS0kD,OAAQx1B,GAAM01B,UAAW,GAAIgD,IAOzD,OAJI5nD,EAAQ24B,YACV3rB,EAASg4C,EAAAA,cAAoB,MAAO,CAACrsB,UAAW34B,EAAQ24B,WAAY3rB,IAG/DA,CACT,CAEAo6C,GAAcS,UAAY,CAExB/yC,SAAUgzC,GAAAA,OAEVnvB,UAAWmvB,GAAAA,OAEX5E,aAAc4E,GAAAA,KACd9E,gBAAiB8E,GAAAA,QAAkBA,GAAAA,QACnC7E,mBAAoB6E,GAAAA,QAAkBA,GAAAA,QACtCzE,iBAAkByE,GAAAA,KAElBN,cAAeM,GAAAA,QACbA,GAAAA,UAAoB,CAClBA,GAAAA,OACAA,GAAAA,KACAA,GAAAA,QACEA,GAAAA,UAAoB,CAClBA,GAAAA,KACAA,GAAAA,OACAA,GAAAA,OACAA,GAAAA,KACAA,GAAAA,QAGEA,GAAAA,WAMVH,cAAeG,GAAAA,QACbA,GAAAA,UAAoB,CAClBA,GAAAA,OACAA,GAAAA,KACAA,GAAAA,QACEA,GAAAA,UAAoB,CAClBA,GAAAA,KACAA,GAAAA,OACAA,GAAAA,OACAA,GAAAA,KACAA,GAAAA,QAGEA,GAAAA,WAOVnC,UAAWmC,GAAAA,KACXlC,aAAckC,GAAAA,KACdvD,SAAUuD,GAAAA,KACVhC,oBAAqBgC,GAAAA,KACrBtD,iBAAkBsD,GAAAA,UAAoB,CAACA,GAAAA,KAAgBA,GAAAA,OACvD5C,WAAY4C,GAAAA,UAAoB,CAACA,GAAAA,KAAgBA,GAAAA,SACjDzC,kBAAmByC,GAAAA,KACnBhD,WAAYgD,GAAAA","sources":["../node_modules/extend/index.js","../node_modules/inline-style-parser/index.js","../node_modules/is-buffer/index.js","../node_modules/react-markdown/node_modules/react-is/cjs/react-is.production.min.js","../node_modules/react-markdown/node_modules/react-is/index.js","../node_modules/style-to-object/index.js","../node_modules/@babel/runtime/helpers/esm/classCallCheck.js","../node_modules/@babel/runtime/helpers/esm/createClass.js","../node_modules/@babel/runtime/helpers/esm/iterableToArray.js","../node_modules/@babel/runtime/helpers/esm/toConsumableArray.js","../node_modules/@babel/runtime/helpers/esm/arrayWithoutHoles.js","../node_modules/@babel/runtime/helpers/esm/nonIterableSpread.js","../node_modules/@babel/runtime/helpers/esm/getPrototypeOf.js","../node_modules/@babel/runtime/helpers/esm/isNativeReflectConstruct.js","../node_modules/@babel/runtime/helpers/esm/callSuper.js","../node_modules/@babel/runtime/helpers/esm/possibleConstructorReturn.js","../node_modules/@babel/runtime/helpers/esm/inherits.js","../node_modules/@babel/runtime/helpers/esm/wrapNativeSuper.js","../node_modules/@babel/runtime/helpers/esm/isNativeFunction.js","../node_modules/@babel/runtime/helpers/esm/construct.js","../node_modules/unist-util-stringify-position/lib/index.js","../node_modules/vfile-message/lib/index.js","../node_modules/vfile/lib/minpath.browser.js","../node_modules/vfile/lib/minproc.browser.js","../node_modules/vfile/lib/minurl.shared.js","../node_modules/vfile/lib/minurl.browser.js","../node_modules/vfile/lib/index.js","../node_modules/@babel/runtime/helpers/esm/toArray.js","../node_modules/bail/index.js","../node_modules/is-plain-obj/index.js","../node_modules/trough/lib/index.js","../node_modules/unified/lib/index.js","../node_modules/mdast-util-to-string/lib/index.js","../node_modules/micromark-util-chunked/index.js","../node_modules/micromark-util-combine-extensions/index.js","../node_modules/micromark-util-character/lib/unicode-punctuation-regex.js","../node_modules/micromark-util-character/index.js","../node_modules/micromark-factory-space/index.js","../node_modules/micromark/lib/initialize/content.js","../node_modules/micromark/lib/initialize/document.js","../node_modules/micromark-core-commonmark/lib/blank-line.js","../node_modules/micromark-util-subtokenize/index.js","../node_modules/micromark-core-commonmark/lib/content.js","../node_modules/micromark/lib/initialize/flow.js","../node_modules/micromark/lib/initialize/text.js","../node_modules/micromark-util-resolve-all/index.js","../node_modules/micromark/lib/create-tokenizer.js","../node_modules/micromark-core-commonmark/lib/thematic-break.js","../node_modules/micromark-core-commonmark/lib/list.js","../node_modules/micromark-core-commonmark/lib/block-quote.js","../node_modules/micromark-factory-destination/index.js","../node_modules/micromark-factory-label/index.js","../node_modules/micromark-factory-title/index.js","../node_modules/micromark-factory-whitespace/index.js","../node_modules/micromark-util-normalize-identifier/index.js","../node_modules/micromark-core-commonmark/lib/definition.js","../node_modules/micromark-core-commonmark/lib/code-indented.js","../node_modules/micromark-core-commonmark/lib/heading-atx.js","../node_modules/micromark-core-commonmark/lib/setext-underline.js","../node_modules/micromark-util-html-tag-name/index.js","../node_modules/micromark-core-commonmark/lib/html-flow.js","../node_modules/micromark-core-commonmark/lib/code-fenced.js","../node_modules/decode-named-character-reference/index.dom.js","../node_modules/micromark-core-commonmark/lib/character-reference.js","../node_modules/micromark-core-commonmark/lib/character-escape.js","../node_modules/micromark-core-commonmark/lib/line-ending.js","../node_modules/micromark-core-commonmark/lib/label-end.js","../node_modules/micromark-core-commonmark/lib/label-start-image.js","../node_modules/micromark-util-classify-character/index.js","../node_modules/micromark-core-commonmark/lib/attention.js","../node_modules/micromark-core-commonmark/lib/autolink.js","../node_modules/micromark-core-commonmark/lib/html-text.js","../node_modules/micromark-core-commonmark/lib/label-start-link.js","../node_modules/micromark-core-commonmark/lib/hard-break-escape.js","../node_modules/micromark-core-commonmark/lib/code-text.js","../node_modules/micromark/lib/constructs.js","../node_modules/micromark/lib/parse.js","../node_modules/micromark/lib/preprocess.js","../node_modules/micromark-util-decode-numeric-character-reference/index.js","../node_modules/micromark-util-decode-string/index.js","../node_modules/mdast-util-from-markdown/lib/index.js","../node_modules/micromark/lib/postprocess.js","../node_modules/remark-parse/lib/index.js","../node_modules/micromark-util-sanitize-uri/index.js","../node_modules/unist-util-is/lib/index.js","../node_modules/unist-util-visit-parents/lib/index.js","../node_modules/unist-util-visit/lib/index.js","../node_modules/unist-util-position/lib/index.js","../node_modules/mdast-util-definitions/lib/index.js","../node_modules/mdast-util-to-hast/lib/handlers/footnote-reference.js","../node_modules/mdast-util-to-hast/lib/revert.js","../node_modules/mdast-util-to-hast/lib/handlers/list-item.js","../node_modules/trim-lines/index.js","../node_modules/mdast-util-to-hast/lib/handlers/index.js","../node_modules/mdast-util-to-hast/lib/handlers/blockquote.js","../node_modules/mdast-util-to-hast/lib/handlers/break.js","../node_modules/mdast-util-to-hast/lib/handlers/code.js","../node_modules/mdast-util-to-hast/lib/handlers/delete.js","../node_modules/mdast-util-to-hast/lib/handlers/emphasis.js","../node_modules/mdast-util-to-hast/lib/handlers/footnote.js","../node_modules/mdast-util-to-hast/lib/handlers/heading.js","../node_modules/mdast-util-to-hast/lib/handlers/html.js","../node_modules/mdast-util-to-hast/lib/handlers/image-reference.js","../node_modules/mdast-util-to-hast/lib/handlers/image.js","../node_modules/mdast-util-to-hast/lib/handlers/inline-code.js","../node_modules/mdast-util-to-hast/lib/handlers/link-reference.js","../node_modules/mdast-util-to-hast/lib/handlers/link.js","../node_modules/mdast-util-to-hast/lib/handlers/list.js","../node_modules/mdast-util-to-hast/lib/handlers/paragraph.js","../node_modules/mdast-util-to-hast/lib/handlers/root.js","../node_modules/mdast-util-to-hast/lib/handlers/strong.js","../node_modules/mdast-util-to-hast/lib/handlers/table.js","../node_modules/mdast-util-to-hast/lib/handlers/table-cell.js","../node_modules/mdast-util-to-hast/lib/handlers/table-row.js","../node_modules/mdast-util-to-hast/lib/handlers/text.js","../node_modules/mdast-util-to-hast/lib/handlers/thematic-break.js","../node_modules/mdast-util-to-hast/lib/state.js","../node_modules/unist-util-generated/lib/index.js","../node_modules/mdast-util-to-hast/lib/index.js","../node_modules/mdast-util-to-hast/lib/footer.js","../node_modules/remark-rehype/lib/index.js","../node_modules/property-information/lib/util/schema.js","../node_modules/property-information/lib/util/merge.js","../node_modules/property-information/lib/normalize.js","../node_modules/property-information/lib/util/info.js","../node_modules/property-information/lib/util/types.js","../node_modules/property-information/lib/util/defined-info.js","../node_modules/property-information/lib/util/create.js","../node_modules/property-information/lib/xlink.js","../node_modules/property-information/lib/xml.js","../node_modules/property-information/lib/util/case-sensitive-transform.js","../node_modules/property-information/lib/util/case-insensitive-transform.js","../node_modules/property-information/lib/xmlns.js","../node_modules/property-information/lib/aria.js","../node_modules/property-information/lib/html.js","../node_modules/property-information/lib/svg.js","../node_modules/property-information/index.js","../node_modules/react-markdown/lib/rehype-filter.js","../node_modules/hast-util-whitespace/index.js","../node_modules/property-information/lib/find.js","../node_modules/property-information/lib/hast-to-react.js","../node_modules/style-to-object/index.mjs","../node_modules/react-markdown/lib/uri-transformer.js","../node_modules/react-markdown/lib/ast-to-react.js","../node_modules/comma-separated-tokens/index.js","../node_modules/space-separated-tokens/index.js","../node_modules/react-markdown/lib/react-markdown.js"],"sourcesContent":["'use strict';\n\nvar hasOwn = Object.prototype.hasOwnProperty;\nvar toStr = Object.prototype.toString;\nvar defineProperty = Object.defineProperty;\nvar gOPD = Object.getOwnPropertyDescriptor;\n\nvar isArray = function isArray(arr) {\n\tif (typeof Array.isArray === 'function') {\n\t\treturn Array.isArray(arr);\n\t}\n\n\treturn toStr.call(arr) === '[object Array]';\n};\n\nvar isPlainObject = function isPlainObject(obj) {\n\tif (!obj || toStr.call(obj) !== '[object Object]') {\n\t\treturn false;\n\t}\n\n\tvar hasOwnConstructor = hasOwn.call(obj, 'constructor');\n\tvar hasIsPrototypeOf = obj.constructor && obj.constructor.prototype && hasOwn.call(obj.constructor.prototype, 'isPrototypeOf');\n\t// Not own constructor property must be Object\n\tif (obj.constructor && !hasOwnConstructor && !hasIsPrototypeOf) {\n\t\treturn false;\n\t}\n\n\t// Own properties are enumerated firstly, so to speed up,\n\t// if last one is own, then all properties are own.\n\tvar key;\n\tfor (key in obj) { /**/ }\n\n\treturn typeof key === 'undefined' || hasOwn.call(obj, key);\n};\n\n// If name is '__proto__', and Object.defineProperty is available, define __proto__ as an own property on target\nvar setProperty = function setProperty(target, options) {\n\tif (defineProperty && options.name === '__proto__') {\n\t\tdefineProperty(target, options.name, {\n\t\t\tenumerable: true,\n\t\t\tconfigurable: true,\n\t\t\tvalue: options.newValue,\n\t\t\twritable: true\n\t\t});\n\t} else {\n\t\ttarget[options.name] = options.newValue;\n\t}\n};\n\n// Return undefined instead of __proto__ if '__proto__' is not an own property\nvar getProperty = function getProperty(obj, name) {\n\tif (name === '__proto__') {\n\t\tif (!hasOwn.call(obj, name)) {\n\t\t\treturn void 0;\n\t\t} else if (gOPD) {\n\t\t\t// In early versions of node, obj['__proto__'] is buggy when obj has\n\t\t\t// __proto__ as an own property. Object.getOwnPropertyDescriptor() works.\n\t\t\treturn gOPD(obj, name).value;\n\t\t}\n\t}\n\n\treturn obj[name];\n};\n\nmodule.exports = function extend() {\n\tvar options, name, src, copy, copyIsArray, clone;\n\tvar target = arguments[0];\n\tvar i = 1;\n\tvar length = arguments.length;\n\tvar deep = false;\n\n\t// Handle a deep copy situation\n\tif (typeof target === 'boolean') {\n\t\tdeep = target;\n\t\ttarget = arguments[1] || {};\n\t\t// skip the boolean and the target\n\t\ti = 2;\n\t}\n\tif (target == null || (typeof target !== 'object' && typeof target !== 'function')) {\n\t\ttarget = {};\n\t}\n\n\tfor (; i < length; ++i) {\n\t\toptions = arguments[i];\n\t\t// Only deal with non-null/undefined values\n\t\tif (options != null) {\n\t\t\t// Extend the base object\n\t\t\tfor (name in options) {\n\t\t\t\tsrc = getProperty(target, name);\n\t\t\t\tcopy = getProperty(options, name);\n\n\t\t\t\t// Prevent never-ending loop\n\t\t\t\tif (target !== copy) {\n\t\t\t\t\t// Recurse if we're merging plain objects or arrays\n\t\t\t\t\tif (deep && copy && (isPlainObject(copy) || (copyIsArray = isArray(copy)))) {\n\t\t\t\t\t\tif (copyIsArray) {\n\t\t\t\t\t\t\tcopyIsArray = false;\n\t\t\t\t\t\t\tclone = src && isArray(src) ? src : [];\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tclone = src && isPlainObject(src) ? src : {};\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Never move original objects, clone them\n\t\t\t\t\t\tsetProperty(target, { name: name, newValue: extend(deep, clone, copy) });\n\n\t\t\t\t\t// Don't bring in undefined values\n\t\t\t\t\t} else if (typeof copy !== 'undefined') {\n\t\t\t\t\t\tsetProperty(target, { name: name, newValue: copy });\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Return the modified object\n\treturn target;\n};\n","// http://www.w3.org/TR/CSS21/grammar.html\n// https://github.com/visionmedia/css-parse/pull/49#issuecomment-30088027\nvar COMMENT_REGEX = /\\/\\*[^*]*\\*+([^/*][^*]*\\*+)*\\//g;\n\nvar NEWLINE_REGEX = /\\n/g;\nvar WHITESPACE_REGEX = /^\\s*/;\n\n// declaration\nvar PROPERTY_REGEX = /^(\\*?[-#/*\\\\\\w]+(\\[[0-9a-z_-]+\\])?)\\s*/;\nvar COLON_REGEX = /^:\\s*/;\nvar VALUE_REGEX = /^((?:'(?:\\\\'|.)*?'|\"(?:\\\\\"|.)*?\"|\\([^)]*?\\)|[^};])+)/;\nvar SEMICOLON_REGEX = /^[;\\s]*/;\n\n// https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String/Trim#Polyfill\nvar TRIM_REGEX = /^\\s+|\\s+$/g;\n\n// strings\nvar NEWLINE = '\\n';\nvar FORWARD_SLASH = '/';\nvar ASTERISK = '*';\nvar EMPTY_STRING = '';\n\n// types\nvar TYPE_COMMENT = 'comment';\nvar TYPE_DECLARATION = 'declaration';\n\n/**\n * @param {String} style\n * @param {Object} [options]\n * @return {Object[]}\n * @throws {TypeError}\n * @throws {Error}\n */\nmodule.exports = function(style, options) {\n  if (typeof style !== 'string') {\n    throw new TypeError('First argument must be a string');\n  }\n\n  if (!style) return [];\n\n  options = options || {};\n\n  /**\n   * Positional.\n   */\n  var lineno = 1;\n  var column = 1;\n\n  /**\n   * Update lineno and column based on `str`.\n   *\n   * @param {String} str\n   */\n  function updatePosition(str) {\n    var lines = str.match(NEWLINE_REGEX);\n    if (lines) lineno += lines.length;\n    var i = str.lastIndexOf(NEWLINE);\n    column = ~i ? str.length - i : column + str.length;\n  }\n\n  /**\n   * Mark position and patch `node.position`.\n   *\n   * @return {Function}\n   */\n  function position() {\n    var start = { line: lineno, column: column };\n    return function(node) {\n      node.position = new Position(start);\n      whitespace();\n      return node;\n    };\n  }\n\n  /**\n   * Store position information for a node.\n   *\n   * @constructor\n   * @property {Object} start\n   * @property {Object} end\n   * @property {undefined|String} source\n   */\n  function Position(start) {\n    this.start = start;\n    this.end = { line: lineno, column: column };\n    this.source = options.source;\n  }\n\n  /**\n   * Non-enumerable source string.\n   */\n  Position.prototype.content = style;\n\n  var errorsList = [];\n\n  /**\n   * Error `msg`.\n   *\n   * @param {String} msg\n   * @throws {Error}\n   */\n  function error(msg) {\n    var err = new Error(\n      options.source + ':' + lineno + ':' + column + ': ' + msg\n    );\n    err.reason = msg;\n    err.filename = options.source;\n    err.line = lineno;\n    err.column = column;\n    err.source = style;\n\n    if (options.silent) {\n      errorsList.push(err);\n    } else {\n      throw err;\n    }\n  }\n\n  /**\n   * Match `re` and return captures.\n   *\n   * @param {RegExp} re\n   * @return {undefined|Array}\n   */\n  function match(re) {\n    var m = re.exec(style);\n    if (!m) return;\n    var str = m[0];\n    updatePosition(str);\n    style = style.slice(str.length);\n    return m;\n  }\n\n  /**\n   * Parse whitespace.\n   */\n  function whitespace() {\n    match(WHITESPACE_REGEX);\n  }\n\n  /**\n   * Parse comments.\n   *\n   * @param {Object[]} [rules]\n   * @return {Object[]}\n   */\n  function comments(rules) {\n    var c;\n    rules = rules || [];\n    while ((c = comment())) {\n      if (c !== false) {\n        rules.push(c);\n      }\n    }\n    return rules;\n  }\n\n  /**\n   * Parse comment.\n   *\n   * @return {Object}\n   * @throws {Error}\n   */\n  function comment() {\n    var pos = position();\n    if (FORWARD_SLASH != style.charAt(0) || ASTERISK != style.charAt(1)) return;\n\n    var i = 2;\n    while (\n      EMPTY_STRING != style.charAt(i) &&\n      (ASTERISK != style.charAt(i) || FORWARD_SLASH != style.charAt(i + 1))\n    ) {\n      ++i;\n    }\n    i += 2;\n\n    if (EMPTY_STRING === style.charAt(i - 1)) {\n      return error('End of comment missing');\n    }\n\n    var str = style.slice(2, i - 2);\n    column += 2;\n    updatePosition(str);\n    style = style.slice(i);\n    column += 2;\n\n    return pos({\n      type: TYPE_COMMENT,\n      comment: str\n    });\n  }\n\n  /**\n   * Parse declaration.\n   *\n   * @return {Object}\n   * @throws {Error}\n   */\n  function declaration() {\n    var pos = position();\n\n    // prop\n    var prop = match(PROPERTY_REGEX);\n    if (!prop) return;\n    comment();\n\n    // :\n    if (!match(COLON_REGEX)) return error(\"property missing ':'\");\n\n    // val\n    var val = match(VALUE_REGEX);\n\n    var ret = pos({\n      type: TYPE_DECLARATION,\n      property: trim(prop[0].replace(COMMENT_REGEX, EMPTY_STRING)),\n      value: val\n        ? trim(val[0].replace(COMMENT_REGEX, EMPTY_STRING))\n        : EMPTY_STRING\n    });\n\n    // ;\n    match(SEMICOLON_REGEX);\n\n    return ret;\n  }\n\n  /**\n   * Parse declarations.\n   *\n   * @return {Object[]}\n   */\n  function declarations() {\n    var decls = [];\n\n    comments(decls);\n\n    // declarations\n    var decl;\n    while ((decl = declaration())) {\n      if (decl !== false) {\n        decls.push(decl);\n        comments(decls);\n      }\n    }\n\n    return decls;\n  }\n\n  whitespace();\n  return declarations();\n};\n\n/**\n * Trim `str`.\n *\n * @param {String} str\n * @return {String}\n */\nfunction trim(str) {\n  return str ? str.replace(TRIM_REGEX, EMPTY_STRING) : EMPTY_STRING;\n}\n","/*!\n * Determine if an object is a Buffer\n *\n * @author   Feross Aboukhadijeh <https://feross.org>\n * @license  MIT\n */\n\nmodule.exports = function isBuffer (obj) {\n  return obj != null && obj.constructor != null &&\n    typeof obj.constructor.isBuffer === 'function' && obj.constructor.isBuffer(obj)\n}\n","/**\n * @license React\n * react-is.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n'use strict';var b=Symbol.for(\"react.element\"),c=Symbol.for(\"react.portal\"),d=Symbol.for(\"react.fragment\"),e=Symbol.for(\"react.strict_mode\"),f=Symbol.for(\"react.profiler\"),g=Symbol.for(\"react.provider\"),h=Symbol.for(\"react.context\"),k=Symbol.for(\"react.server_context\"),l=Symbol.for(\"react.forward_ref\"),m=Symbol.for(\"react.suspense\"),n=Symbol.for(\"react.suspense_list\"),p=Symbol.for(\"react.memo\"),q=Symbol.for(\"react.lazy\"),t=Symbol.for(\"react.offscreen\"),u;u=Symbol.for(\"react.module.reference\");\nfunction v(a){if(\"object\"===typeof a&&null!==a){var r=a.$$typeof;switch(r){case b:switch(a=a.type,a){case d:case f:case e:case m:case n:return a;default:switch(a=a&&a.$$typeof,a){case k:case h:case l:case q:case p:case g:return a;default:return r}}case c:return r}}}exports.ContextConsumer=h;exports.ContextProvider=g;exports.Element=b;exports.ForwardRef=l;exports.Fragment=d;exports.Lazy=q;exports.Memo=p;exports.Portal=c;exports.Profiler=f;exports.StrictMode=e;exports.Suspense=m;\nexports.SuspenseList=n;exports.isAsyncMode=function(){return!1};exports.isConcurrentMode=function(){return!1};exports.isContextConsumer=function(a){return v(a)===h};exports.isContextProvider=function(a){return v(a)===g};exports.isElement=function(a){return\"object\"===typeof a&&null!==a&&a.$$typeof===b};exports.isForwardRef=function(a){return v(a)===l};exports.isFragment=function(a){return v(a)===d};exports.isLazy=function(a){return v(a)===q};exports.isMemo=function(a){return v(a)===p};\nexports.isPortal=function(a){return v(a)===c};exports.isProfiler=function(a){return v(a)===f};exports.isStrictMode=function(a){return v(a)===e};exports.isSuspense=function(a){return v(a)===m};exports.isSuspenseList=function(a){return v(a)===n};\nexports.isValidElementType=function(a){return\"string\"===typeof a||\"function\"===typeof a||a===d||a===f||a===e||a===m||a===n||a===t||\"object\"===typeof a&&null!==a&&(a.$$typeof===q||a.$$typeof===p||a.$$typeof===g||a.$$typeof===h||a.$$typeof===l||a.$$typeof===u||void 0!==a.getModuleId)?!0:!1};exports.typeOf=v;\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n  module.exports = require('./cjs/react-is.production.min.js');\n} else {\n  module.exports = require('./cjs/react-is.development.js');\n}\n","var parse = require('inline-style-parser');\n\n/**\n * Parses inline style to object.\n *\n * @example\n * // returns { 'line-height': '42' }\n * StyleToObject('line-height: 42;');\n *\n * @param  {String}      style      - The inline style.\n * @param  {Function}    [iterator] - The iterator function.\n * @return {null|Object}\n */\nfunction StyleToObject(style, iterator) {\n  var output = null;\n  if (!style || typeof style !== 'string') {\n    return output;\n  }\n\n  var declaration;\n  var declarations = parse(style);\n  var hasIterator = typeof iterator === 'function';\n  var property;\n  var value;\n\n  for (var i = 0, len = declarations.length; i < len; i++) {\n    declaration = declarations[i];\n    property = declaration.property;\n    value = declaration.value;\n\n    if (hasIterator) {\n      iterator(property, value, declaration);\n    } else if (value) {\n      output || (output = {});\n      output[property] = value;\n    }\n  }\n\n  return output;\n}\n\nmodule.exports = StyleToObject;\nmodule.exports.default = StyleToObject; // ESM support\n","function _classCallCheck(a, n) {\n  if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\");\n}\nexport { _classCallCheck as default };","import toPropertyKey from \"./toPropertyKey.js\";\nfunction _defineProperties(e, r) {\n  for (var t = 0; t < r.length; t++) {\n    var o = r[t];\n    o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, toPropertyKey(o.key), o);\n  }\n}\nfunction _createClass(e, r, t) {\n  return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, \"prototype\", {\n    writable: !1\n  }), e;\n}\nexport { _createClass as default };","function _iterableToArray(r) {\n  if (\"undefined\" != typeof Symbol && null != r[Symbol.iterator] || null != r[\"@@iterator\"]) return Array.from(r);\n}\nexport { _iterableToArray as default };","import arrayWithoutHoles from \"./arrayWithoutHoles.js\";\nimport iterableToArray from \"./iterableToArray.js\";\nimport unsupportedIterableToArray from \"./unsupportedIterableToArray.js\";\nimport nonIterableSpread from \"./nonIterableSpread.js\";\nfunction _toConsumableArray(r) {\n  return arrayWithoutHoles(r) || iterableToArray(r) || unsupportedIterableToArray(r) || nonIterableSpread();\n}\nexport { _toConsumableArray as default };","import arrayLikeToArray from \"./arrayLikeToArray.js\";\nfunction _arrayWithoutHoles(r) {\n  if (Array.isArray(r)) return arrayLikeToArray(r);\n}\nexport { _arrayWithoutHoles as default };","function _nonIterableSpread() {\n  throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\nexport { _nonIterableSpread as default };","function _getPrototypeOf(t) {\n  return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) {\n    return t.__proto__ || Object.getPrototypeOf(t);\n  }, _getPrototypeOf(t);\n}\nexport { _getPrototypeOf as default };","function _isNativeReflectConstruct() {\n  try {\n    var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {}));\n  } catch (t) {}\n  return (_isNativeReflectConstruct = function _isNativeReflectConstruct() {\n    return !!t;\n  })();\n}\nexport { _isNativeReflectConstruct as default };","import getPrototypeOf from \"./getPrototypeOf.js\";\nimport isNativeReflectConstruct from \"./isNativeReflectConstruct.js\";\nimport possibleConstructorReturn from \"./possibleConstructorReturn.js\";\nfunction _callSuper(t, o, e) {\n  return o = getPrototypeOf(o), possibleConstructorReturn(t, isNativeReflectConstruct() ? Reflect.construct(o, e || [], getPrototypeOf(t).constructor) : o.apply(t, e));\n}\nexport { _callSuper as default };","import _typeof from \"./typeof.js\";\nimport assertThisInitialized from \"./assertThisInitialized.js\";\nfunction _possibleConstructorReturn(t, e) {\n  if (e && (\"object\" == _typeof(e) || \"function\" == typeof e)) return e;\n  if (void 0 !== e) throw new TypeError(\"Derived constructors may only return object or undefined\");\n  return assertThisInitialized(t);\n}\nexport { _possibleConstructorReturn as default };","import setPrototypeOf from \"./setPrototypeOf.js\";\nfunction _inherits(t, e) {\n  if (\"function\" != typeof e && null !== e) throw new TypeError(\"Super expression must either be null or a function\");\n  t.prototype = Object.create(e && e.prototype, {\n    constructor: {\n      value: t,\n      writable: !0,\n      configurable: !0\n    }\n  }), Object.defineProperty(t, \"prototype\", {\n    writable: !1\n  }), e && setPrototypeOf(t, e);\n}\nexport { _inherits as default };","import getPrototypeOf from \"./getPrototypeOf.js\";\nimport setPrototypeOf from \"./setPrototypeOf.js\";\nimport isNativeFunction from \"./isNativeFunction.js\";\nimport construct from \"./construct.js\";\nfunction _wrapNativeSuper(t) {\n  var r = \"function\" == typeof Map ? new Map() : void 0;\n  return _wrapNativeSuper = function _wrapNativeSuper(t) {\n    if (null === t || !isNativeFunction(t)) return t;\n    if (\"function\" != typeof t) throw new TypeError(\"Super expression must either be null or a function\");\n    if (void 0 !== r) {\n      if (r.has(t)) return r.get(t);\n      r.set(t, Wrapper);\n    }\n    function Wrapper() {\n      return construct(t, arguments, getPrototypeOf(this).constructor);\n    }\n    return Wrapper.prototype = Object.create(t.prototype, {\n      constructor: {\n        value: Wrapper,\n        enumerable: !1,\n        writable: !0,\n        configurable: !0\n      }\n    }), setPrototypeOf(Wrapper, t);\n  }, _wrapNativeSuper(t);\n}\nexport { _wrapNativeSuper as default };","function _isNativeFunction(t) {\n  try {\n    return -1 !== Function.toString.call(t).indexOf(\"[native code]\");\n  } catch (n) {\n    return \"function\" == typeof t;\n  }\n}\nexport { _isNativeFunction as default };","import isNativeReflectConstruct from \"./isNativeReflectConstruct.js\";\nimport setPrototypeOf from \"./setPrototypeOf.js\";\nfunction _construct(t, e, r) {\n  if (isNativeReflectConstruct()) return Reflect.construct.apply(null, arguments);\n  var o = [null];\n  o.push.apply(o, e);\n  var p = new (t.bind.apply(t, o))();\n  return r && setPrototypeOf(p, r.prototype), p;\n}\nexport { _construct as default };","/**\n * @typedef {import('unist').Node} Node\n * @typedef {import('unist').Point} Point\n * @typedef {import('unist').Position} Position\n */\n\n/**\n * @typedef NodeLike\n * @property {string} type\n * @property {PositionLike | null | undefined} [position]\n *\n * @typedef PositionLike\n * @property {PointLike | null | undefined} [start]\n * @property {PointLike | null | undefined} [end]\n *\n * @typedef PointLike\n * @property {number | null | undefined} [line]\n * @property {number | null | undefined} [column]\n * @property {number | null | undefined} [offset]\n */\n\n/**\n * Serialize the positional info of a point, position (start and end points),\n * or node.\n *\n * @param {Node | NodeLike | Position | PositionLike | Point | PointLike | null | undefined} [value]\n *   Node, position, or point.\n * @returns {string}\n *   Pretty printed positional info of a node (`string`).\n *\n *   In the format of a range `ls:cs-le:ce` (when given `node` or `position`)\n *   or a point `l:c` (when given `point`), where `l` stands for line, `c` for\n *   column, `s` for `start`, and `e` for end.\n *   An empty string (`''`) is returned if the given value is neither `node`,\n *   `position`, nor `point`.\n */\nexport function stringifyPosition(value) {\n  // Nothing.\n  if (!value || typeof value !== 'object') {\n    return ''\n  }\n\n  // Node.\n  if ('position' in value || 'type' in value) {\n    return position(value.position)\n  }\n\n  // Position.\n  if ('start' in value || 'end' in value) {\n    return position(value)\n  }\n\n  // Point.\n  if ('line' in value || 'column' in value) {\n    return point(value)\n  }\n\n  // ?\n  return ''\n}\n\n/**\n * @param {Point | PointLike | null | undefined} point\n * @returns {string}\n */\nfunction point(point) {\n  return index(point && point.line) + ':' + index(point && point.column)\n}\n\n/**\n * @param {Position | PositionLike | null | undefined} pos\n * @returns {string}\n */\nfunction position(pos) {\n  return point(pos && pos.start) + '-' + point(pos && pos.end)\n}\n\n/**\n * @param {number | null | undefined} value\n * @returns {number}\n */\nfunction index(value) {\n  return value && typeof value === 'number' ? value : 1\n}\n","/**\n * @typedef {import('unist').Node} Node\n * @typedef {import('unist').Position} Position\n * @typedef {import('unist').Point} Point\n * @typedef {object & {type: string, position?: Position | undefined}} NodeLike\n */\n\nimport {stringifyPosition} from 'unist-util-stringify-position'\n\n/**\n * Message.\n */\nexport class VFileMessage extends Error {\n  /**\n   * Create a message for `reason` at `place` from `origin`.\n   *\n   * When an error is passed in as `reason`, the `stack` is copied.\n   *\n   * @param {string | Error | VFileMessage} reason\n   *   Reason for message, uses the stack and message of the error if given.\n   *\n   *   > 👉 **Note**: you should use markdown.\n   * @param {Node | NodeLike | Position | Point | null | undefined} [place]\n   *   Place in file where the message occurred.\n   * @param {string | null | undefined} [origin]\n   *   Place in code where the message originates (example:\n   *   `'my-package:my-rule'` or `'my-rule'`).\n   * @returns\n   *   Instance of `VFileMessage`.\n   */\n  // To do: next major: expose `undefined` everywhere instead of `null`.\n  constructor(reason, place, origin) {\n    /** @type {[string | null, string | null]} */\n    const parts = [null, null]\n    /** @type {Position} */\n    let position = {\n      // @ts-expect-error: we always follows the structure of `position`.\n      start: {line: null, column: null},\n      // @ts-expect-error: \"\n      end: {line: null, column: null}\n    }\n\n    super()\n\n    if (typeof place === 'string') {\n      origin = place\n      place = undefined\n    }\n\n    if (typeof origin === 'string') {\n      const index = origin.indexOf(':')\n\n      if (index === -1) {\n        parts[1] = origin\n      } else {\n        parts[0] = origin.slice(0, index)\n        parts[1] = origin.slice(index + 1)\n      }\n    }\n\n    if (place) {\n      // Node.\n      if ('type' in place || 'position' in place) {\n        if (place.position) {\n          // To do: next major: deep clone.\n          // @ts-expect-error: looks like a position.\n          position = place.position\n        }\n      }\n      // Position.\n      else if ('start' in place || 'end' in place) {\n        // @ts-expect-error: looks like a position.\n        // To do: next major: deep clone.\n        position = place\n      }\n      // Point.\n      else if ('line' in place || 'column' in place) {\n        // To do: next major: deep clone.\n        position.start = place\n      }\n    }\n\n    // Fields from `Error`.\n    /**\n     * Serialized positional info of error.\n     *\n     * On normal errors, this would be something like `ParseError`, buit in\n     * `VFile` messages we use this space to show where an error happened.\n     */\n    this.name = stringifyPosition(place) || '1:1'\n\n    /**\n     * Reason for message.\n     *\n     * @type {string}\n     */\n    this.message = typeof reason === 'object' ? reason.message : reason\n\n    /**\n     * Stack of message.\n     *\n     * This is used by normal errors to show where something happened in\n     * programming code, irrelevant for `VFile` messages,\n     *\n     * @type {string}\n     */\n    this.stack = ''\n\n    if (typeof reason === 'object' && reason.stack) {\n      this.stack = reason.stack\n    }\n\n    /**\n     * Reason for message.\n     *\n     * > 👉 **Note**: you should use markdown.\n     *\n     * @type {string}\n     */\n    this.reason = this.message\n\n    /* eslint-disable no-unused-expressions */\n    /**\n     * State of problem.\n     *\n     * * `true` — marks associated file as no longer processable (error)\n     * * `false` — necessitates a (potential) change (warning)\n     * * `null | undefined` — for things that might not need changing (info)\n     *\n     * @type {boolean | null | undefined}\n     */\n    this.fatal\n\n    /**\n     * Starting line of error.\n     *\n     * @type {number | null}\n     */\n    this.line = position.start.line\n\n    /**\n     * Starting column of error.\n     *\n     * @type {number | null}\n     */\n    this.column = position.start.column\n\n    /**\n     * Full unist position.\n     *\n     * @type {Position | null}\n     */\n    this.position = position\n\n    /**\n     * Namespace of message (example: `'my-package'`).\n     *\n     * @type {string | null}\n     */\n    this.source = parts[0]\n\n    /**\n     * Category of message (example: `'my-rule'`).\n     *\n     * @type {string | null}\n     */\n    this.ruleId = parts[1]\n\n    /**\n     * Path of a file (used throughout the `VFile` ecosystem).\n     *\n     * @type {string | null}\n     */\n    this.file\n\n    // The following fields are “well known”.\n    // Not standard.\n    // Feel free to add other non-standard fields to your messages.\n\n    /**\n     * Specify the source value that’s being reported, which is deemed\n     * incorrect.\n     *\n     * @type {string | null}\n     */\n    this.actual\n\n    /**\n     * Suggest acceptable values that can be used instead of `actual`.\n     *\n     * @type {Array<string> | null}\n     */\n    this.expected\n\n    /**\n     * Link to docs for the message.\n     *\n     * > 👉 **Note**: this must be an absolute URL that can be passed as `x`\n     * > to `new URL(x)`.\n     *\n     * @type {string | null}\n     */\n    this.url\n\n    /**\n     * Long form description of the message (you should use markdown).\n     *\n     * @type {string | null}\n     */\n    this.note\n    /* eslint-enable no-unused-expressions */\n  }\n}\n\nVFileMessage.prototype.file = ''\nVFileMessage.prototype.name = ''\nVFileMessage.prototype.reason = ''\nVFileMessage.prototype.message = ''\nVFileMessage.prototype.stack = ''\nVFileMessage.prototype.fatal = null\nVFileMessage.prototype.column = null\nVFileMessage.prototype.line = null\nVFileMessage.prototype.source = null\nVFileMessage.prototype.ruleId = null\nVFileMessage.prototype.position = null\n","// A derivative work based on:\n// <https://github.com/browserify/path-browserify>.\n// Which is licensed:\n//\n// MIT License\n//\n// Copyright (c) 2013 James Halliday\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy of\n// this software and associated documentation files (the \"Software\"), to deal in\n// the Software without restriction, including without limitation the rights to\n// use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\n// the Software, and to permit persons to whom the Software is furnished to do so,\n// subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in all\n// copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\n// FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\n// COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\n// IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\n// CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n// A derivative work based on:\n//\n// Parts of that are extracted from Node’s internal `path` module:\n// <https://github.com/nodejs/node/blob/master/lib/path.js>.\n// Which is licensed:\n//\n// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nexport const path = {basename, dirname, extname, join, sep: '/'}\n\n/* eslint-disable max-depth, complexity */\n\n/**\n * Get the basename from a path.\n *\n * @param {string} path\n *   File path.\n * @param {string | undefined} [ext]\n *   Extension to strip.\n * @returns {string}\n *   Stem or basename.\n */\nfunction basename(path, ext) {\n  if (ext !== undefined && typeof ext !== 'string') {\n    throw new TypeError('\"ext\" argument must be a string')\n  }\n\n  assertPath(path)\n  let start = 0\n  let end = -1\n  let index = path.length\n  /** @type {boolean | undefined} */\n  let seenNonSlash\n\n  if (ext === undefined || ext.length === 0 || ext.length > path.length) {\n    while (index--) {\n      if (path.charCodeAt(index) === 47 /* `/` */) {\n        // If we reached a path separator that was not part of a set of path\n        // separators at the end of the string, stop now.\n        if (seenNonSlash) {\n          start = index + 1\n          break\n        }\n      } else if (end < 0) {\n        // We saw the first non-path separator, mark this as the end of our\n        // path component.\n        seenNonSlash = true\n        end = index + 1\n      }\n    }\n\n    return end < 0 ? '' : path.slice(start, end)\n  }\n\n  if (ext === path) {\n    return ''\n  }\n\n  let firstNonSlashEnd = -1\n  let extIndex = ext.length - 1\n\n  while (index--) {\n    if (path.charCodeAt(index) === 47 /* `/` */) {\n      // If we reached a path separator that was not part of a set of path\n      // separators at the end of the string, stop now.\n      if (seenNonSlash) {\n        start = index + 1\n        break\n      }\n    } else {\n      if (firstNonSlashEnd < 0) {\n        // We saw the first non-path separator, remember this index in case\n        // we need it if the extension ends up not matching.\n        seenNonSlash = true\n        firstNonSlashEnd = index + 1\n      }\n\n      if (extIndex > -1) {\n        // Try to match the explicit extension.\n        if (path.charCodeAt(index) === ext.charCodeAt(extIndex--)) {\n          if (extIndex < 0) {\n            // We matched the extension, so mark this as the end of our path\n            // component\n            end = index\n          }\n        } else {\n          // Extension does not match, so our result is the entire path\n          // component\n          extIndex = -1\n          end = firstNonSlashEnd\n        }\n      }\n    }\n  }\n\n  if (start === end) {\n    end = firstNonSlashEnd\n  } else if (end < 0) {\n    end = path.length\n  }\n\n  return path.slice(start, end)\n}\n\n/**\n * Get the dirname from a path.\n *\n * @param {string} path\n *   File path.\n * @returns {string}\n *   File path.\n */\nfunction dirname(path) {\n  assertPath(path)\n\n  if (path.length === 0) {\n    return '.'\n  }\n\n  let end = -1\n  let index = path.length\n  /** @type {boolean | undefined} */\n  let unmatchedSlash\n\n  // Prefix `--` is important to not run on `0`.\n  while (--index) {\n    if (path.charCodeAt(index) === 47 /* `/` */) {\n      if (unmatchedSlash) {\n        end = index\n        break\n      }\n    } else if (!unmatchedSlash) {\n      // We saw the first non-path separator\n      unmatchedSlash = true\n    }\n  }\n\n  return end < 0\n    ? path.charCodeAt(0) === 47 /* `/` */\n      ? '/'\n      : '.'\n    : end === 1 && path.charCodeAt(0) === 47 /* `/` */\n    ? '//'\n    : path.slice(0, end)\n}\n\n/**\n * Get an extname from a path.\n *\n * @param {string} path\n *   File path.\n * @returns {string}\n *   Extname.\n */\nfunction extname(path) {\n  assertPath(path)\n\n  let index = path.length\n\n  let end = -1\n  let startPart = 0\n  let startDot = -1\n  // Track the state of characters (if any) we see before our first dot and\n  // after any path separator we find.\n  let preDotState = 0\n  /** @type {boolean | undefined} */\n  let unmatchedSlash\n\n  while (index--) {\n    const code = path.charCodeAt(index)\n\n    if (code === 47 /* `/` */) {\n      // If we reached a path separator that was not part of a set of path\n      // separators at the end of the string, stop now.\n      if (unmatchedSlash) {\n        startPart = index + 1\n        break\n      }\n\n      continue\n    }\n\n    if (end < 0) {\n      // We saw the first non-path separator, mark this as the end of our\n      // extension.\n      unmatchedSlash = true\n      end = index + 1\n    }\n\n    if (code === 46 /* `.` */) {\n      // If this is our first dot, mark it as the start of our extension.\n      if (startDot < 0) {\n        startDot = index\n      } else if (preDotState !== 1) {\n        preDotState = 1\n      }\n    } else if (startDot > -1) {\n      // We saw a non-dot and non-path separator before our dot, so we should\n      // have a good chance at having a non-empty extension.\n      preDotState = -1\n    }\n  }\n\n  if (\n    startDot < 0 ||\n    end < 0 ||\n    // We saw a non-dot character immediately before the dot.\n    preDotState === 0 ||\n    // The (right-most) trimmed path component is exactly `..`.\n    (preDotState === 1 && startDot === end - 1 && startDot === startPart + 1)\n  ) {\n    return ''\n  }\n\n  return path.slice(startDot, end)\n}\n\n/**\n * Join segments from a path.\n *\n * @param {Array<string>} segments\n *   Path segments.\n * @returns {string}\n *   File path.\n */\nfunction join(...segments) {\n  let index = -1\n  /** @type {string | undefined} */\n  let joined\n\n  while (++index < segments.length) {\n    assertPath(segments[index])\n\n    if (segments[index]) {\n      joined =\n        joined === undefined ? segments[index] : joined + '/' + segments[index]\n    }\n  }\n\n  return joined === undefined ? '.' : normalize(joined)\n}\n\n/**\n * Normalize a basic file path.\n *\n * @param {string} path\n *   File path.\n * @returns {string}\n *   File path.\n */\n// Note: `normalize` is not exposed as `path.normalize`, so some code is\n// manually removed from it.\nfunction normalize(path) {\n  assertPath(path)\n\n  const absolute = path.charCodeAt(0) === 47 /* `/` */\n\n  // Normalize the path according to POSIX rules.\n  let value = normalizeString(path, !absolute)\n\n  if (value.length === 0 && !absolute) {\n    value = '.'\n  }\n\n  if (value.length > 0 && path.charCodeAt(path.length - 1) === 47 /* / */) {\n    value += '/'\n  }\n\n  return absolute ? '/' + value : value\n}\n\n/**\n * Resolve `.` and `..` elements in a path with directory names.\n *\n * @param {string} path\n *   File path.\n * @param {boolean} allowAboveRoot\n *   Whether `..` can move above root.\n * @returns {string}\n *   File path.\n */\nfunction normalizeString(path, allowAboveRoot) {\n  let result = ''\n  let lastSegmentLength = 0\n  let lastSlash = -1\n  let dots = 0\n  let index = -1\n  /** @type {number | undefined} */\n  let code\n  /** @type {number} */\n  let lastSlashIndex\n\n  while (++index <= path.length) {\n    if (index < path.length) {\n      code = path.charCodeAt(index)\n    } else if (code === 47 /* `/` */) {\n      break\n    } else {\n      code = 47 /* `/` */\n    }\n\n    if (code === 47 /* `/` */) {\n      if (lastSlash === index - 1 || dots === 1) {\n        // Empty.\n      } else if (lastSlash !== index - 1 && dots === 2) {\n        if (\n          result.length < 2 ||\n          lastSegmentLength !== 2 ||\n          result.charCodeAt(result.length - 1) !== 46 /* `.` */ ||\n          result.charCodeAt(result.length - 2) !== 46 /* `.` */\n        ) {\n          if (result.length > 2) {\n            lastSlashIndex = result.lastIndexOf('/')\n\n            if (lastSlashIndex !== result.length - 1) {\n              if (lastSlashIndex < 0) {\n                result = ''\n                lastSegmentLength = 0\n              } else {\n                result = result.slice(0, lastSlashIndex)\n                lastSegmentLength = result.length - 1 - result.lastIndexOf('/')\n              }\n\n              lastSlash = index\n              dots = 0\n              continue\n            }\n          } else if (result.length > 0) {\n            result = ''\n            lastSegmentLength = 0\n            lastSlash = index\n            dots = 0\n            continue\n          }\n        }\n\n        if (allowAboveRoot) {\n          result = result.length > 0 ? result + '/..' : '..'\n          lastSegmentLength = 2\n        }\n      } else {\n        if (result.length > 0) {\n          result += '/' + path.slice(lastSlash + 1, index)\n        } else {\n          result = path.slice(lastSlash + 1, index)\n        }\n\n        lastSegmentLength = index - lastSlash - 1\n      }\n\n      lastSlash = index\n      dots = 0\n    } else if (code === 46 /* `.` */ && dots > -1) {\n      dots++\n    } else {\n      dots = -1\n    }\n  }\n\n  return result\n}\n\n/**\n * Make sure `path` is a string.\n *\n * @param {string} path\n *   File path.\n * @returns {asserts path is string}\n *   Nothing.\n */\nfunction assertPath(path) {\n  if (typeof path !== 'string') {\n    throw new TypeError(\n      'Path must be a string. Received ' + JSON.stringify(path)\n    )\n  }\n}\n\n/* eslint-enable max-depth, complexity */\n","// Somewhat based on:\n// <https://github.com/defunctzombie/node-process/blob/master/browser.js>.\n// But I don’t think one tiny line of code can be copyrighted. 😅\nexport const proc = {cwd}\n\nfunction cwd() {\n  return '/'\n}\n","/**\n * @typedef URL\n * @property {string} hash\n * @property {string} host\n * @property {string} hostname\n * @property {string} href\n * @property {string} origin\n * @property {string} password\n * @property {string} pathname\n * @property {string} port\n * @property {string} protocol\n * @property {string} search\n * @property {any} searchParams\n * @property {string} username\n * @property {() => string} toString\n * @property {() => string} toJSON\n */\n\n/**\n * Check if `fileUrlOrPath` looks like a URL.\n *\n * @param {unknown} fileUrlOrPath\n *   File path or URL.\n * @returns {fileUrlOrPath is URL}\n *   Whether it’s a URL.\n */\n// From: <https://github.com/nodejs/node/blob/fcf8ba4/lib/internal/url.js#L1501>\nexport function isUrl(fileUrlOrPath) {\n  return (\n    fileUrlOrPath !== null &&\n    typeof fileUrlOrPath === 'object' &&\n    // @ts-expect-error: indexable.\n    fileUrlOrPath.href &&\n    // @ts-expect-error: indexable.\n    fileUrlOrPath.origin\n  )\n}\n","/// <reference lib=\"dom\" />\n\nimport {isUrl} from './minurl.shared.js'\n\n// See: <https://github.com/nodejs/node/blob/fcf8ba4/lib/internal/url.js>\n\n/**\n * @param {string | URL} path\n *   File URL.\n * @returns {string}\n *   File URL.\n */\nexport function urlToPath(path) {\n  if (typeof path === 'string') {\n    path = new URL(path)\n  } else if (!isUrl(path)) {\n    /** @type {NodeJS.ErrnoException} */\n    const error = new TypeError(\n      'The \"path\" argument must be of type string or an instance of URL. Received `' +\n        path +\n        '`'\n    )\n    error.code = 'ERR_INVALID_ARG_TYPE'\n    throw error\n  }\n\n  if (path.protocol !== 'file:') {\n    /** @type {NodeJS.ErrnoException} */\n    const error = new TypeError('The URL must be of scheme file')\n    error.code = 'ERR_INVALID_URL_SCHEME'\n    throw error\n  }\n\n  return getPathFromURLPosix(path)\n}\n\n/**\n * Get a path from a POSIX URL.\n *\n * @param {URL} url\n *   URL.\n * @returns {string}\n *   File path.\n */\nfunction getPathFromURLPosix(url) {\n  if (url.hostname !== '') {\n    /** @type {NodeJS.ErrnoException} */\n    const error = new TypeError(\n      'File URL host must be \"localhost\" or empty on darwin'\n    )\n    error.code = 'ERR_INVALID_FILE_URL_HOST'\n    throw error\n  }\n\n  const pathname = url.pathname\n  let index = -1\n\n  while (++index < pathname.length) {\n    if (\n      pathname.charCodeAt(index) === 37 /* `%` */ &&\n      pathname.charCodeAt(index + 1) === 50 /* `2` */\n    ) {\n      const third = pathname.charCodeAt(index + 2)\n      if (third === 70 /* `F` */ || third === 102 /* `f` */) {\n        /** @type {NodeJS.ErrnoException} */\n        const error = new TypeError(\n          'File URL path must not include encoded / characters'\n        )\n        error.code = 'ERR_INVALID_FILE_URL_PATH'\n        throw error\n      }\n    }\n  }\n\n  return decodeURIComponent(pathname)\n}\n\nexport {isUrl} from './minurl.shared.js'\n","/**\n * @typedef {import('unist').Node} Node\n * @typedef {import('unist').Position} Position\n * @typedef {import('unist').Point} Point\n * @typedef {import('./minurl.shared.js').URL} URL\n * @typedef {import('../index.js').Data} Data\n * @typedef {import('../index.js').Value} Value\n */\n\n/**\n * @typedef {Record<string, unknown> & {type: string, position?: Position | undefined}} NodeLike\n *\n * @typedef {'ascii' | 'utf8' | 'utf-8' | 'utf16le' | 'ucs2' | 'ucs-2' | 'base64' | 'base64url' | 'latin1' | 'binary' | 'hex'} BufferEncoding\n *   Encodings supported by the buffer class.\n *\n *   This is a copy of the types from Node, copied to prevent Node globals from\n *   being needed.\n *   Copied from: <https://github.com/DefinitelyTyped/DefinitelyTyped/blob/90a4ec8/types/node/buffer.d.ts#L170>\n *\n * @typedef {Options | URL | Value | VFile} Compatible\n *   Things that can be passed to the constructor.\n *\n * @typedef VFileCoreOptions\n *   Set multiple values.\n * @property {Value | null | undefined} [value]\n *   Set `value`.\n * @property {string | null | undefined} [cwd]\n *   Set `cwd`.\n * @property {Array<string> | null | undefined} [history]\n *   Set `history`.\n * @property {URL | string | null | undefined} [path]\n *   Set `path`.\n * @property {string | null | undefined} [basename]\n *   Set `basename`.\n * @property {string | null | undefined} [stem]\n *   Set `stem`.\n * @property {string | null | undefined} [extname]\n *   Set `extname`.\n * @property {string | null | undefined} [dirname]\n *   Set `dirname`.\n * @property {Data | null | undefined} [data]\n *   Set `data`.\n *\n * @typedef Map\n *   Raw source map.\n *\n *   See:\n *   <https://github.com/mozilla/source-map/blob/58819f0/source-map.d.ts#L15-L23>.\n * @property {number} version\n *   Which version of the source map spec this map is following.\n * @property {Array<string>} sources\n *   An array of URLs to the original source files.\n * @property {Array<string>} names\n *   An array of identifiers which can be referenced by individual mappings.\n * @property {string | undefined} [sourceRoot]\n *   The URL root from which all sources are relative.\n * @property {Array<string> | undefined} [sourcesContent]\n *   An array of contents of the original source files.\n * @property {string} mappings\n *   A string of base64 VLQs which contain the actual mappings.\n * @property {string} file\n *   The generated file this source map is associated with.\n *\n * @typedef {{[key: string]: unknown} & VFileCoreOptions} Options\n *   Configuration.\n *\n *   A bunch of keys that will be shallow copied over to the new file.\n *\n * @typedef {Record<string, unknown>} ReporterSettings\n *   Configuration for reporters.\n */\n\n/**\n * @template {ReporterSettings} Settings\n *   Options type.\n * @callback Reporter\n *   Type for a reporter.\n * @param {Array<VFile>} files\n *   Files to report.\n * @param {Settings} options\n *   Configuration.\n * @returns {string}\n *   Report.\n */\n\nimport bufferLike from 'is-buffer'\nimport {VFileMessage} from 'vfile-message'\nimport {path} from './minpath.js'\nimport {proc} from './minproc.js'\nimport {urlToPath, isUrl} from './minurl.js'\n\n/**\n * Order of setting (least specific to most), we need this because otherwise\n * `{stem: 'a', path: '~/b.js'}` would throw, as a path is needed before a\n * stem can be set.\n *\n * @type {Array<'basename' | 'dirname' | 'extname' | 'history' | 'path' | 'stem'>}\n */\nconst order = ['history', 'path', 'basename', 'stem', 'extname', 'dirname']\n\nexport class VFile {\n  /**\n   * Create a new virtual file.\n   *\n   * `options` is treated as:\n   *\n   * *   `string` or `Buffer` — `{value: options}`\n   * *   `URL` — `{path: options}`\n   * *   `VFile` — shallow copies its data over to the new file\n   * *   `object` — all fields are shallow copied over to the new file\n   *\n   * Path related fields are set in the following order (least specific to\n   * most specific): `history`, `path`, `basename`, `stem`, `extname`,\n   * `dirname`.\n   *\n   * You cannot set `dirname` or `extname` without setting either `history`,\n   * `path`, `basename`, or `stem` too.\n   *\n   * @param {Compatible | null | undefined} [value]\n   *   File value.\n   * @returns\n   *   New instance.\n   */\n  constructor(value) {\n    /** @type {Options | VFile} */\n    let options\n\n    if (!value) {\n      options = {}\n    } else if (typeof value === 'string' || buffer(value)) {\n      options = {value}\n    } else if (isUrl(value)) {\n      options = {path: value}\n    } else {\n      options = value\n    }\n\n    /**\n     * Place to store custom information (default: `{}`).\n     *\n     * It’s OK to store custom data directly on the file but moving it to\n     * `data` is recommended.\n     *\n     * @type {Data}\n     */\n    this.data = {}\n\n    /**\n     * List of messages associated with the file.\n     *\n     * @type {Array<VFileMessage>}\n     */\n    this.messages = []\n\n    /**\n     * List of filepaths the file moved between.\n     *\n     * The first is the original path and the last is the current path.\n     *\n     * @type {Array<string>}\n     */\n    this.history = []\n\n    /**\n     * Base of `path` (default: `process.cwd()` or `'/'` in browsers).\n     *\n     * @type {string}\n     */\n    this.cwd = proc.cwd()\n\n    /* eslint-disable no-unused-expressions */\n    /**\n     * Raw value.\n     *\n     * @type {Value}\n     */\n    this.value\n\n    // The below are non-standard, they are “well-known”.\n    // As in, used in several tools.\n\n    /**\n     * Whether a file was saved to disk.\n     *\n     * This is used by vfile reporters.\n     *\n     * @type {boolean}\n     */\n    this.stored\n\n    /**\n     * Custom, non-string, compiled, representation.\n     *\n     * This is used by unified to store non-string results.\n     * One example is when turning markdown into React nodes.\n     *\n     * @type {unknown}\n     */\n    this.result\n\n    /**\n     * Source map.\n     *\n     * This type is equivalent to the `RawSourceMap` type from the `source-map`\n     * module.\n     *\n     * @type {Map | null | undefined}\n     */\n    this.map\n    /* eslint-enable no-unused-expressions */\n\n    // Set path related properties in the correct order.\n    let index = -1\n\n    while (++index < order.length) {\n      const prop = order[index]\n\n      // Note: we specifically use `in` instead of `hasOwnProperty` to accept\n      // `vfile`s too.\n      if (\n        prop in options &&\n        options[prop] !== undefined &&\n        options[prop] !== null\n      ) {\n        // @ts-expect-error: TS doesn’t understand basic reality.\n        this[prop] = prop === 'history' ? [...options[prop]] : options[prop]\n      }\n    }\n\n    /** @type {string} */\n    let prop\n\n    // Set non-path related properties.\n    for (prop in options) {\n      // @ts-expect-error: fine to set other things.\n      if (!order.includes(prop)) {\n        // @ts-expect-error: fine to set other things.\n        this[prop] = options[prop]\n      }\n    }\n  }\n\n  /**\n   * Get the full path (example: `'~/index.min.js'`).\n   *\n   * @returns {string}\n   */\n  get path() {\n    return this.history[this.history.length - 1]\n  }\n\n  /**\n   * Set the full path (example: `'~/index.min.js'`).\n   *\n   * Cannot be nullified.\n   * You can set a file URL (a `URL` object with a `file:` protocol) which will\n   * be turned into a path with `url.fileURLToPath`.\n   *\n   * @param {string | URL} path\n   */\n  set path(path) {\n    if (isUrl(path)) {\n      path = urlToPath(path)\n    }\n\n    assertNonEmpty(path, 'path')\n\n    if (this.path !== path) {\n      this.history.push(path)\n    }\n  }\n\n  /**\n   * Get the parent path (example: `'~'`).\n   */\n  get dirname() {\n    return typeof this.path === 'string' ? path.dirname(this.path) : undefined\n  }\n\n  /**\n   * Set the parent path (example: `'~'`).\n   *\n   * Cannot be set if there’s no `path` yet.\n   */\n  set dirname(dirname) {\n    assertPath(this.basename, 'dirname')\n    this.path = path.join(dirname || '', this.basename)\n  }\n\n  /**\n   * Get the basename (including extname) (example: `'index.min.js'`).\n   */\n  get basename() {\n    return typeof this.path === 'string' ? path.basename(this.path) : undefined\n  }\n\n  /**\n   * Set basename (including extname) (`'index.min.js'`).\n   *\n   * Cannot contain path separators (`'/'` on unix, macOS, and browsers, `'\\'`\n   * on windows).\n   * Cannot be nullified (use `file.path = file.dirname` instead).\n   */\n  set basename(basename) {\n    assertNonEmpty(basename, 'basename')\n    assertPart(basename, 'basename')\n    this.path = path.join(this.dirname || '', basename)\n  }\n\n  /**\n   * Get the extname (including dot) (example: `'.js'`).\n   */\n  get extname() {\n    return typeof this.path === 'string' ? path.extname(this.path) : undefined\n  }\n\n  /**\n   * Set the extname (including dot) (example: `'.js'`).\n   *\n   * Cannot contain path separators (`'/'` on unix, macOS, and browsers, `'\\'`\n   * on windows).\n   * Cannot be set if there’s no `path` yet.\n   */\n  set extname(extname) {\n    assertPart(extname, 'extname')\n    assertPath(this.dirname, 'extname')\n\n    if (extname) {\n      if (extname.charCodeAt(0) !== 46 /* `.` */) {\n        throw new Error('`extname` must start with `.`')\n      }\n\n      if (extname.includes('.', 1)) {\n        throw new Error('`extname` cannot contain multiple dots')\n      }\n    }\n\n    this.path = path.join(this.dirname, this.stem + (extname || ''))\n  }\n\n  /**\n   * Get the stem (basename w/o extname) (example: `'index.min'`).\n   */\n  get stem() {\n    return typeof this.path === 'string'\n      ? path.basename(this.path, this.extname)\n      : undefined\n  }\n\n  /**\n   * Set the stem (basename w/o extname) (example: `'index.min'`).\n   *\n   * Cannot contain path separators (`'/'` on unix, macOS, and browsers, `'\\'`\n   * on windows).\n   * Cannot be nullified (use `file.path = file.dirname` instead).\n   */\n  set stem(stem) {\n    assertNonEmpty(stem, 'stem')\n    assertPart(stem, 'stem')\n    this.path = path.join(this.dirname || '', stem + (this.extname || ''))\n  }\n\n  /**\n   * Serialize the file.\n   *\n   * @param {BufferEncoding | null | undefined} [encoding='utf8']\n   *   Character encoding to understand `value` as when it’s a `Buffer`\n   *   (default: `'utf8'`).\n   * @returns {string}\n   *   Serialized file.\n   */\n  toString(encoding) {\n    return (this.value || '').toString(encoding || undefined)\n  }\n\n  /**\n   * Create a warning message associated with the file.\n   *\n   * Its `fatal` is set to `false` and `file` is set to the current file path.\n   * Its added to `file.messages`.\n   *\n   * @param {string | Error | VFileMessage} reason\n   *   Reason for message, uses the stack and message of the error if given.\n   * @param {Node | NodeLike | Position | Point | null | undefined} [place]\n   *   Place in file where the message occurred.\n   * @param {string | null | undefined} [origin]\n   *   Place in code where the message originates (example:\n   *   `'my-package:my-rule'` or `'my-rule'`).\n   * @returns {VFileMessage}\n   *   Message.\n   */\n  message(reason, place, origin) {\n    const message = new VFileMessage(reason, place, origin)\n\n    if (this.path) {\n      message.name = this.path + ':' + message.name\n      message.file = this.path\n    }\n\n    message.fatal = false\n\n    this.messages.push(message)\n\n    return message\n  }\n\n  /**\n   * Create an info message associated with the file.\n   *\n   * Its `fatal` is set to `null` and `file` is set to the current file path.\n   * Its added to `file.messages`.\n   *\n   * @param {string | Error | VFileMessage} reason\n   *   Reason for message, uses the stack and message of the error if given.\n   * @param {Node | NodeLike | Position | Point | null | undefined} [place]\n   *   Place in file where the message occurred.\n   * @param {string | null | undefined} [origin]\n   *   Place in code where the message originates (example:\n   *   `'my-package:my-rule'` or `'my-rule'`).\n   * @returns {VFileMessage}\n   *   Message.\n   */\n  info(reason, place, origin) {\n    const message = this.message(reason, place, origin)\n\n    message.fatal = null\n\n    return message\n  }\n\n  /**\n   * Create a fatal error associated with the file.\n   *\n   * Its `fatal` is set to `true` and `file` is set to the current file path.\n   * Its added to `file.messages`.\n   *\n   * > 👉 **Note**: a fatal error means that a file is no longer processable.\n   *\n   * @param {string | Error | VFileMessage} reason\n   *   Reason for message, uses the stack and message of the error if given.\n   * @param {Node | NodeLike | Position | Point | null | undefined} [place]\n   *   Place in file where the message occurred.\n   * @param {string | null | undefined} [origin]\n   *   Place in code where the message originates (example:\n   *   `'my-package:my-rule'` or `'my-rule'`).\n   * @returns {never}\n   *   Message.\n   * @throws {VFileMessage}\n   *   Message.\n   */\n  fail(reason, place, origin) {\n    const message = this.message(reason, place, origin)\n\n    message.fatal = true\n\n    throw message\n  }\n}\n\n/**\n * Assert that `part` is not a path (as in, does not contain `path.sep`).\n *\n * @param {string | null | undefined} part\n *   File path part.\n * @param {string} name\n *   Part name.\n * @returns {void}\n *   Nothing.\n */\nfunction assertPart(part, name) {\n  if (part && part.includes(path.sep)) {\n    throw new Error(\n      '`' + name + '` cannot be a path: did not expect `' + path.sep + '`'\n    )\n  }\n}\n\n/**\n * Assert that `part` is not empty.\n *\n * @param {string | undefined} part\n *   Thing.\n * @param {string} name\n *   Part name.\n * @returns {asserts part is string}\n *   Nothing.\n */\nfunction assertNonEmpty(part, name) {\n  if (!part) {\n    throw new Error('`' + name + '` cannot be empty')\n  }\n}\n\n/**\n * Assert `path` exists.\n *\n * @param {string | undefined} path\n *   Path.\n * @param {string} name\n *   Dependency name.\n * @returns {asserts path is string}\n *   Nothing.\n */\nfunction assertPath(path, name) {\n  if (!path) {\n    throw new Error('Setting `' + name + '` requires `path` to be set too')\n  }\n}\n\n/**\n * Assert `value` is a buffer.\n *\n * @param {unknown} value\n *   thing.\n * @returns {value is Buffer}\n *   Whether `value` is a Node.js buffer.\n */\nfunction buffer(value) {\n  return bufferLike(value)\n}\n","import arrayWithHoles from \"./arrayWithHoles.js\";\nimport iterableToArray from \"./iterableToArray.js\";\nimport unsupportedIterableToArray from \"./unsupportedIterableToArray.js\";\nimport nonIterableRest from \"./nonIterableRest.js\";\nfunction _toArray(r) {\n  return arrayWithHoles(r) || iterableToArray(r) || unsupportedIterableToArray(r) || nonIterableRest();\n}\nexport { _toArray as default };","/**\n * Throw a given error.\n *\n * @param {Error|null|undefined} [error]\n *   Maybe error.\n * @returns {asserts error is null|undefined}\n */\nexport function bail(error) {\n  if (error) {\n    throw error\n  }\n}\n","export default function isPlainObject(value) {\n\tif (typeof value !== 'object' || value === null) {\n\t\treturn false;\n\t}\n\n\tconst prototype = Object.getPrototypeOf(value);\n\treturn (prototype === null || prototype === Object.prototype || Object.getPrototypeOf(prototype) === null) && !(Symbol.toStringTag in value) && !(Symbol.iterator in value);\n}\n","// To do: remove `void`s\n// To do: remove `null` from output of our APIs, allow it as user APIs.\n\n/**\n * @typedef {(error?: Error | null | undefined, ...output: Array<any>) => void} Callback\n *   Callback.\n *\n * @typedef {(...input: Array<any>) => any} Middleware\n *   Ware.\n *\n * @typedef Pipeline\n *   Pipeline.\n * @property {Run} run\n *   Run the pipeline.\n * @property {Use} use\n *   Add middleware.\n *\n * @typedef {(...input: Array<any>) => void} Run\n *   Call all middleware.\n *\n *   Calls `done` on completion with either an error or the output of the\n *   last middleware.\n *\n *   > 👉 **Note**: as the length of input defines whether async functions get a\n *   > `next` function,\n *   > it’s recommended to keep `input` at one value normally.\n\n *\n * @typedef {(fn: Middleware) => Pipeline} Use\n *   Add middleware.\n */\n\n/**\n * Create new middleware.\n *\n * @returns {Pipeline}\n *   Pipeline.\n */\nexport function trough() {\n  /** @type {Array<Middleware>} */\n  const fns = []\n  /** @type {Pipeline} */\n  const pipeline = {run, use}\n\n  return pipeline\n\n  /** @type {Run} */\n  function run(...values) {\n    let middlewareIndex = -1\n    /** @type {Callback} */\n    const callback = values.pop()\n\n    if (typeof callback !== 'function') {\n      throw new TypeError('Expected function as last argument, not ' + callback)\n    }\n\n    next(null, ...values)\n\n    /**\n     * Run the next `fn`, or we’re done.\n     *\n     * @param {Error | null | undefined} error\n     * @param {Array<any>} output\n     */\n    function next(error, ...output) {\n      const fn = fns[++middlewareIndex]\n      let index = -1\n\n      if (error) {\n        callback(error)\n        return\n      }\n\n      // Copy non-nullish input into values.\n      while (++index < values.length) {\n        if (output[index] === null || output[index] === undefined) {\n          output[index] = values[index]\n        }\n      }\n\n      // Save the newly created `output` for the next call.\n      values = output\n\n      // Next or done.\n      if (fn) {\n        wrap(fn, next)(...output)\n      } else {\n        callback(null, ...output)\n      }\n    }\n  }\n\n  /** @type {Use} */\n  function use(middelware) {\n    if (typeof middelware !== 'function') {\n      throw new TypeError(\n        'Expected `middelware` to be a function, not ' + middelware\n      )\n    }\n\n    fns.push(middelware)\n    return pipeline\n  }\n}\n\n/**\n * Wrap `middleware` into a uniform interface.\n *\n * You can pass all input to the resulting function.\n * `callback` is then called with the output of `middleware`.\n *\n * If `middleware` accepts more arguments than the later given in input,\n * an extra `done` function is passed to it after that input,\n * which must be called by `middleware`.\n *\n * The first value in `input` is the main input value.\n * All other input values are the rest input values.\n * The values given to `callback` are the input values,\n * merged with every non-nullish output value.\n *\n * * if `middleware` throws an error,\n *   returns a promise that is rejected,\n *   or calls the given `done` function with an error,\n *   `callback` is called with that error\n * * if `middleware` returns a value or returns a promise that is resolved,\n *   that value is the main output value\n * * if `middleware` calls `done`,\n *   all non-nullish values except for the first one (the error) overwrite the\n *   output values\n *\n * @param {Middleware} middleware\n *   Function to wrap.\n * @param {Callback} callback\n *   Callback called with the output of `middleware`.\n * @returns {Run}\n *   Wrapped middleware.\n */\nexport function wrap(middleware, callback) {\n  /** @type {boolean} */\n  let called\n\n  return wrapped\n\n  /**\n   * Call `middleware`.\n   * @this {any}\n   * @param {Array<any>} parameters\n   * @returns {void}\n   */\n  function wrapped(...parameters) {\n    const fnExpectsCallback = middleware.length > parameters.length\n    /** @type {any} */\n    let result\n\n    if (fnExpectsCallback) {\n      parameters.push(done)\n    }\n\n    try {\n      result = middleware.apply(this, parameters)\n    } catch (error) {\n      const exception = /** @type {Error} */ (error)\n\n      // Well, this is quite the pickle.\n      // `middleware` received a callback and called it synchronously, but that\n      // threw an error.\n      // The only thing left to do is to throw the thing instead.\n      if (fnExpectsCallback && called) {\n        throw exception\n      }\n\n      return done(exception)\n    }\n\n    if (!fnExpectsCallback) {\n      if (result && result.then && typeof result.then === 'function') {\n        result.then(then, done)\n      } else if (result instanceof Error) {\n        done(result)\n      } else {\n        then(result)\n      }\n    }\n  }\n\n  /**\n   * Call `callback`, only once.\n   *\n   * @type {Callback}\n   */\n  function done(error, ...output) {\n    if (!called) {\n      called = true\n      callback(error, ...output)\n    }\n  }\n\n  /**\n   * Call `done` with one value.\n   *\n   * @param {any} [value]\n   */\n  function then(value) {\n    done(null, value)\n  }\n}\n","/**\n * @typedef {import('unist').Node} Node\n * @typedef {import('vfile').VFileCompatible} VFileCompatible\n * @typedef {import('vfile').VFileValue} VFileValue\n * @typedef {import('..').Processor} Processor\n * @typedef {import('..').Plugin} Plugin\n * @typedef {import('..').Preset} Preset\n * @typedef {import('..').Pluggable} Pluggable\n * @typedef {import('..').PluggableList} PluggableList\n * @typedef {import('..').Transformer} Transformer\n * @typedef {import('..').Parser} Parser\n * @typedef {import('..').Compiler} Compiler\n * @typedef {import('..').RunCallback} RunCallback\n * @typedef {import('..').ProcessCallback} ProcessCallback\n *\n * @typedef Context\n * @property {Node} tree\n * @property {VFile} file\n */\n\nimport {bail} from 'bail'\nimport isBuffer from 'is-buffer'\nimport extend from 'extend'\nimport isPlainObj from 'is-plain-obj'\nimport {trough} from 'trough'\nimport {VFile} from 'vfile'\n\n// Expose a frozen processor.\nexport const unified = base().freeze()\n\nconst own = {}.hasOwnProperty\n\n// Function to create the first processor.\n/**\n * @returns {Processor}\n */\nfunction base() {\n  const transformers = trough()\n  /** @type {Processor['attachers']} */\n  const attachers = []\n  /** @type {Record<string, unknown>} */\n  let namespace = {}\n  /** @type {boolean|undefined} */\n  let frozen\n  let freezeIndex = -1\n\n  // Data management.\n  // @ts-expect-error: overloads are handled.\n  processor.data = data\n  processor.Parser = undefined\n  processor.Compiler = undefined\n\n  // Lock.\n  processor.freeze = freeze\n\n  // Plugins.\n  processor.attachers = attachers\n  // @ts-expect-error: overloads are handled.\n  processor.use = use\n\n  // API.\n  processor.parse = parse\n  processor.stringify = stringify\n  // @ts-expect-error: overloads are handled.\n  processor.run = run\n  processor.runSync = runSync\n  // @ts-expect-error: overloads are handled.\n  processor.process = process\n  processor.processSync = processSync\n\n  // Expose.\n  return processor\n\n  // Create a new processor based on the processor in the current scope.\n  /** @type {Processor} */\n  function processor() {\n    const destination = base()\n    let index = -1\n\n    while (++index < attachers.length) {\n      destination.use(...attachers[index])\n    }\n\n    destination.data(extend(true, {}, namespace))\n\n    return destination\n  }\n\n  /**\n   * @param {string|Record<string, unknown>} [key]\n   * @param {unknown} [value]\n   * @returns {unknown}\n   */\n  function data(key, value) {\n    if (typeof key === 'string') {\n      // Set `key`.\n      if (arguments.length === 2) {\n        assertUnfrozen('data', frozen)\n        namespace[key] = value\n        return processor\n      }\n\n      // Get `key`.\n      return (own.call(namespace, key) && namespace[key]) || null\n    }\n\n    // Set space.\n    if (key) {\n      assertUnfrozen('data', frozen)\n      namespace = key\n      return processor\n    }\n\n    // Get space.\n    return namespace\n  }\n\n  /** @type {Processor['freeze']} */\n  function freeze() {\n    if (frozen) {\n      return processor\n    }\n\n    while (++freezeIndex < attachers.length) {\n      const [attacher, ...options] = attachers[freezeIndex]\n\n      if (options[0] === false) {\n        continue\n      }\n\n      if (options[0] === true) {\n        options[0] = undefined\n      }\n\n      /** @type {Transformer|void} */\n      const transformer = attacher.call(processor, ...options)\n\n      if (typeof transformer === 'function') {\n        transformers.use(transformer)\n      }\n    }\n\n    frozen = true\n    freezeIndex = Number.POSITIVE_INFINITY\n\n    return processor\n  }\n\n  /**\n   * @param {Pluggable|null|undefined} [value]\n   * @param {...unknown} options\n   * @returns {Processor}\n   */\n  function use(value, ...options) {\n    /** @type {Record<string, unknown>|undefined} */\n    let settings\n\n    assertUnfrozen('use', frozen)\n\n    if (value === null || value === undefined) {\n      // Empty.\n    } else if (typeof value === 'function') {\n      addPlugin(value, ...options)\n    } else if (typeof value === 'object') {\n      if (Array.isArray(value)) {\n        addList(value)\n      } else {\n        addPreset(value)\n      }\n    } else {\n      throw new TypeError('Expected usable value, not `' + value + '`')\n    }\n\n    if (settings) {\n      namespace.settings = Object.assign(namespace.settings || {}, settings)\n    }\n\n    return processor\n\n    /**\n     * @param {import('..').Pluggable<unknown[]>} value\n     * @returns {void}\n     */\n    function add(value) {\n      if (typeof value === 'function') {\n        addPlugin(value)\n      } else if (typeof value === 'object') {\n        if (Array.isArray(value)) {\n          const [plugin, ...options] = value\n          addPlugin(plugin, ...options)\n        } else {\n          addPreset(value)\n        }\n      } else {\n        throw new TypeError('Expected usable value, not `' + value + '`')\n      }\n    }\n\n    /**\n     * @param {Preset} result\n     * @returns {void}\n     */\n    function addPreset(result) {\n      addList(result.plugins)\n\n      if (result.settings) {\n        settings = Object.assign(settings || {}, result.settings)\n      }\n    }\n\n    /**\n     * @param {PluggableList|null|undefined} [plugins]\n     * @returns {void}\n     */\n    function addList(plugins) {\n      let index = -1\n\n      if (plugins === null || plugins === undefined) {\n        // Empty.\n      } else if (Array.isArray(plugins)) {\n        while (++index < plugins.length) {\n          const thing = plugins[index]\n          add(thing)\n        }\n      } else {\n        throw new TypeError('Expected a list of plugins, not `' + plugins + '`')\n      }\n    }\n\n    /**\n     * @param {Plugin} plugin\n     * @param {...unknown} [value]\n     * @returns {void}\n     */\n    function addPlugin(plugin, value) {\n      let index = -1\n      /** @type {Processor['attachers'][number]|undefined} */\n      let entry\n\n      while (++index < attachers.length) {\n        if (attachers[index][0] === plugin) {\n          entry = attachers[index]\n          break\n        }\n      }\n\n      if (entry) {\n        if (isPlainObj(entry[1]) && isPlainObj(value)) {\n          value = extend(true, entry[1], value)\n        }\n\n        entry[1] = value\n      } else {\n        // @ts-expect-error: fine.\n        attachers.push([...arguments])\n      }\n    }\n  }\n\n  /** @type {Processor['parse']} */\n  function parse(doc) {\n    processor.freeze()\n    const file = vfile(doc)\n    const Parser = processor.Parser\n    assertParser('parse', Parser)\n\n    if (newable(Parser, 'parse')) {\n      // @ts-expect-error: `newable` checks this.\n      return new Parser(String(file), file).parse()\n    }\n\n    // @ts-expect-error: `newable` checks this.\n    return Parser(String(file), file) // eslint-disable-line new-cap\n  }\n\n  /** @type {Processor['stringify']} */\n  function stringify(node, doc) {\n    processor.freeze()\n    const file = vfile(doc)\n    const Compiler = processor.Compiler\n    assertCompiler('stringify', Compiler)\n    assertNode(node)\n\n    if (newable(Compiler, 'compile')) {\n      // @ts-expect-error: `newable` checks this.\n      return new Compiler(node, file).compile()\n    }\n\n    // @ts-expect-error: `newable` checks this.\n    return Compiler(node, file) // eslint-disable-line new-cap\n  }\n\n  /**\n   * @param {Node} node\n   * @param {VFileCompatible|RunCallback} [doc]\n   * @param {RunCallback} [callback]\n   * @returns {Promise<Node>|void}\n   */\n  function run(node, doc, callback) {\n    assertNode(node)\n    processor.freeze()\n\n    if (!callback && typeof doc === 'function') {\n      callback = doc\n      doc = undefined\n    }\n\n    if (!callback) {\n      return new Promise(executor)\n    }\n\n    executor(null, callback)\n\n    /**\n     * @param {null|((node: Node) => void)} resolve\n     * @param {(error: Error) => void} reject\n     * @returns {void}\n     */\n    function executor(resolve, reject) {\n      // @ts-expect-error: `doc` can’t be a callback anymore, we checked.\n      transformers.run(node, vfile(doc), done)\n\n      /**\n       * @param {Error|null} error\n       * @param {Node} tree\n       * @param {VFile} file\n       * @returns {void}\n       */\n      function done(error, tree, file) {\n        tree = tree || node\n        if (error) {\n          reject(error)\n        } else if (resolve) {\n          resolve(tree)\n        } else {\n          // @ts-expect-error: `callback` is defined if `resolve` is not.\n          callback(null, tree, file)\n        }\n      }\n    }\n  }\n\n  /** @type {Processor['runSync']} */\n  function runSync(node, file) {\n    /** @type {Node|undefined} */\n    let result\n    /** @type {boolean|undefined} */\n    let complete\n\n    processor.run(node, file, done)\n\n    assertDone('runSync', 'run', complete)\n\n    // @ts-expect-error: we either bailed on an error or have a tree.\n    return result\n\n    /**\n     * @param {Error|null} [error]\n     * @param {Node} [tree]\n     * @returns {void}\n     */\n    function done(error, tree) {\n      bail(error)\n      result = tree\n      complete = true\n    }\n  }\n\n  /**\n   * @param {VFileCompatible} doc\n   * @param {ProcessCallback} [callback]\n   * @returns {Promise<VFile>|undefined}\n   */\n  function process(doc, callback) {\n    processor.freeze()\n    assertParser('process', processor.Parser)\n    assertCompiler('process', processor.Compiler)\n\n    if (!callback) {\n      return new Promise(executor)\n    }\n\n    executor(null, callback)\n\n    /**\n     * @param {null|((file: VFile) => void)} resolve\n     * @param {(error?: Error|null|undefined) => void} reject\n     * @returns {void}\n     */\n    function executor(resolve, reject) {\n      const file = vfile(doc)\n\n      processor.run(processor.parse(file), file, (error, tree, file) => {\n        if (error || !tree || !file) {\n          done(error)\n        } else {\n          /** @type {unknown} */\n          const result = processor.stringify(tree, file)\n\n          if (result === undefined || result === null) {\n            // Empty.\n          } else if (looksLikeAVFileValue(result)) {\n            file.value = result\n          } else {\n            file.result = result\n          }\n\n          done(error, file)\n        }\n      })\n\n      /**\n       * @param {Error|null|undefined} [error]\n       * @param {VFile|undefined} [file]\n       * @returns {void}\n       */\n      function done(error, file) {\n        if (error || !file) {\n          reject(error)\n        } else if (resolve) {\n          resolve(file)\n        } else {\n          // @ts-expect-error: `callback` is defined if `resolve` is not.\n          callback(null, file)\n        }\n      }\n    }\n  }\n\n  /** @type {Processor['processSync']} */\n  function processSync(doc) {\n    /** @type {boolean|undefined} */\n    let complete\n\n    processor.freeze()\n    assertParser('processSync', processor.Parser)\n    assertCompiler('processSync', processor.Compiler)\n\n    const file = vfile(doc)\n\n    processor.process(file, done)\n\n    assertDone('processSync', 'process', complete)\n\n    return file\n\n    /**\n     * @param {Error|null|undefined} [error]\n     * @returns {void}\n     */\n    function done(error) {\n      complete = true\n      bail(error)\n    }\n  }\n}\n\n/**\n * Check if `value` is a constructor.\n *\n * @param {unknown} value\n * @param {string} name\n * @returns {boolean}\n */\nfunction newable(value, name) {\n  return (\n    typeof value === 'function' &&\n    // Prototypes do exist.\n    // type-coverage:ignore-next-line\n    value.prototype &&\n    // A function with keys in its prototype is probably a constructor.\n    // Classes’ prototype methods are not enumerable, so we check if some value\n    // exists in the prototype.\n    // type-coverage:ignore-next-line\n    (keys(value.prototype) || name in value.prototype)\n  )\n}\n\n/**\n * Check if `value` is an object with keys.\n *\n * @param {Record<string, unknown>} value\n * @returns {boolean}\n */\nfunction keys(value) {\n  /** @type {string} */\n  let key\n\n  for (key in value) {\n    if (own.call(value, key)) {\n      return true\n    }\n  }\n\n  return false\n}\n\n/**\n * Assert a parser is available.\n *\n * @param {string} name\n * @param {unknown} value\n * @returns {asserts value is Parser}\n */\nfunction assertParser(name, value) {\n  if (typeof value !== 'function') {\n    throw new TypeError('Cannot `' + name + '` without `Parser`')\n  }\n}\n\n/**\n * Assert a compiler is available.\n *\n * @param {string} name\n * @param {unknown} value\n * @returns {asserts value is Compiler}\n */\nfunction assertCompiler(name, value) {\n  if (typeof value !== 'function') {\n    throw new TypeError('Cannot `' + name + '` without `Compiler`')\n  }\n}\n\n/**\n * Assert the processor is not frozen.\n *\n * @param {string} name\n * @param {unknown} frozen\n * @returns {asserts frozen is false}\n */\nfunction assertUnfrozen(name, frozen) {\n  if (frozen) {\n    throw new Error(\n      'Cannot call `' +\n        name +\n        '` on a frozen processor.\\nCreate a new processor first, by calling it: use `processor()` instead of `processor`.'\n    )\n  }\n}\n\n/**\n * Assert `node` is a unist node.\n *\n * @param {unknown} node\n * @returns {asserts node is Node}\n */\nfunction assertNode(node) {\n  // `isPlainObj` unfortunately uses `any` instead of `unknown`.\n  // type-coverage:ignore-next-line\n  if (!isPlainObj(node) || typeof node.type !== 'string') {\n    throw new TypeError('Expected node, got `' + node + '`')\n    // Fine.\n  }\n}\n\n/**\n * Assert that `complete` is `true`.\n *\n * @param {string} name\n * @param {string} asyncName\n * @param {unknown} complete\n * @returns {asserts complete is true}\n */\nfunction assertDone(name, asyncName, complete) {\n  if (!complete) {\n    throw new Error(\n      '`' + name + '` finished async. Use `' + asyncName + '` instead'\n    )\n  }\n}\n\n/**\n * @param {VFileCompatible} [value]\n * @returns {VFile}\n */\nfunction vfile(value) {\n  return looksLikeAVFile(value) ? value : new VFile(value)\n}\n\n/**\n * @param {VFileCompatible} [value]\n * @returns {value is VFile}\n */\nfunction looksLikeAVFile(value) {\n  return Boolean(\n    value &&\n      typeof value === 'object' &&\n      'message' in value &&\n      'messages' in value\n  )\n}\n\n/**\n * @param {unknown} [value]\n * @returns {value is VFileValue}\n */\nfunction looksLikeAVFileValue(value) {\n  return typeof value === 'string' || isBuffer(value)\n}\n","/**\n * @typedef {import('mdast').Root|import('mdast').Content} Node\n *\n * @typedef Options\n *   Configuration (optional).\n * @property {boolean | null | undefined} [includeImageAlt=true]\n *   Whether to use `alt` for `image`s.\n * @property {boolean | null | undefined} [includeHtml=true]\n *   Whether to use `value` of HTML.\n */\n\n/** @type {Options} */\nconst emptyOptions = {}\n\n/**\n * Get the text content of a node or list of nodes.\n *\n * Prefers the node’s plain-text fields, otherwise serializes its children,\n * and if the given value is an array, serialize the nodes in it.\n *\n * @param {unknown} value\n *   Thing to serialize, typically `Node`.\n * @param {Options | null | undefined} [options]\n *   Configuration (optional).\n * @returns {string}\n *   Serialized `value`.\n */\nexport function toString(value, options) {\n  const settings = options || emptyOptions\n  const includeImageAlt =\n    typeof settings.includeImageAlt === 'boolean'\n      ? settings.includeImageAlt\n      : true\n  const includeHtml =\n    typeof settings.includeHtml === 'boolean' ? settings.includeHtml : true\n\n  return one(value, includeImageAlt, includeHtml)\n}\n\n/**\n * One node or several nodes.\n *\n * @param {unknown} value\n *   Thing to serialize.\n * @param {boolean} includeImageAlt\n *   Include image `alt`s.\n * @param {boolean} includeHtml\n *   Include HTML.\n * @returns {string}\n *   Serialized node.\n */\nfunction one(value, includeImageAlt, includeHtml) {\n  if (node(value)) {\n    if ('value' in value) {\n      return value.type === 'html' && !includeHtml ? '' : value.value\n    }\n\n    if (includeImageAlt && 'alt' in value && value.alt) {\n      return value.alt\n    }\n\n    if ('children' in value) {\n      return all(value.children, includeImageAlt, includeHtml)\n    }\n  }\n\n  if (Array.isArray(value)) {\n    return all(value, includeImageAlt, includeHtml)\n  }\n\n  return ''\n}\n\n/**\n * Serialize a list of nodes.\n *\n * @param {Array<unknown>} values\n *   Thing to serialize.\n * @param {boolean} includeImageAlt\n *   Include image `alt`s.\n * @param {boolean} includeHtml\n *   Include HTML.\n * @returns {string}\n *   Serialized nodes.\n */\nfunction all(values, includeImageAlt, includeHtml) {\n  /** @type {Array<string>} */\n  const result = []\n  let index = -1\n\n  while (++index < values.length) {\n    result[index] = one(values[index], includeImageAlt, includeHtml)\n  }\n\n  return result.join('')\n}\n\n/**\n * Check if `value` looks like a node.\n *\n * @param {unknown} value\n *   Thing.\n * @returns {value is Node}\n *   Whether `value` is a node.\n */\nfunction node(value) {\n  return Boolean(value && typeof value === 'object')\n}\n","/**\n * Like `Array#splice`, but smarter for giant arrays.\n *\n * `Array#splice` takes all items to be inserted as individual argument which\n * causes a stack overflow in V8 when trying to insert 100k items for instance.\n *\n * Otherwise, this does not return the removed items, and takes `items` as an\n * array instead of rest parameters.\n *\n * @template {unknown} T\n *   Item type.\n * @param {Array<T>} list\n *   List to operate on.\n * @param {number} start\n *   Index to remove/insert at (can be negative).\n * @param {number} remove\n *   Number of items to remove.\n * @param {Array<T>} items\n *   Items to inject into `list`.\n * @returns {void}\n *   Nothing.\n */\nexport function splice(list, start, remove, items) {\n  const end = list.length\n  let chunkStart = 0\n  /** @type {Array<unknown>} */\n  let parameters\n\n  // Make start between zero and `end` (included).\n  if (start < 0) {\n    start = -start > end ? 0 : end + start\n  } else {\n    start = start > end ? end : start\n  }\n  remove = remove > 0 ? remove : 0\n\n  // No need to chunk the items if there’s only a couple (10k) items.\n  if (items.length < 10000) {\n    parameters = Array.from(items)\n    parameters.unshift(start, remove)\n    // @ts-expect-error Hush, it’s fine.\n    list.splice(...parameters)\n  } else {\n    // Delete `remove` items starting from `start`\n    if (remove) list.splice(start, remove)\n\n    // Insert the items in chunks to not cause stack overflows.\n    while (chunkStart < items.length) {\n      parameters = items.slice(chunkStart, chunkStart + 10000)\n      parameters.unshift(start, 0)\n      // @ts-expect-error Hush, it’s fine.\n      list.splice(...parameters)\n      chunkStart += 10000\n      start += 10000\n    }\n  }\n}\n\n/**\n * Append `items` (an array) at the end of `list` (another array).\n * When `list` was empty, returns `items` instead.\n *\n * This prevents a potentially expensive operation when `list` is empty,\n * and adds items in batches to prevent V8 from hanging.\n *\n * @template {unknown} T\n *   Item type.\n * @param {Array<T>} list\n *   List to operate on.\n * @param {Array<T>} items\n *   Items to add to `list`.\n * @returns {Array<T>}\n *   Either `list` or `items`.\n */\nexport function push(list, items) {\n  if (list.length > 0) {\n    splice(list, list.length, 0, items)\n    return list\n  }\n  return items\n}\n","/**\n * @typedef {import('micromark-util-types').Extension} Extension\n * @typedef {import('micromark-util-types').Handles} Handles\n * @typedef {import('micromark-util-types').HtmlExtension} HtmlExtension\n * @typedef {import('micromark-util-types').NormalizedExtension} NormalizedExtension\n */\n\nimport {splice} from 'micromark-util-chunked'\n\nconst hasOwnProperty = {}.hasOwnProperty\n\n/**\n * Combine multiple syntax extensions into one.\n *\n * @param {Array<Extension>} extensions\n *   List of syntax extensions.\n * @returns {NormalizedExtension}\n *   A single combined extension.\n */\nexport function combineExtensions(extensions) {\n  /** @type {NormalizedExtension} */\n  const all = {}\n  let index = -1\n\n  while (++index < extensions.length) {\n    syntaxExtension(all, extensions[index])\n  }\n\n  return all\n}\n\n/**\n * Merge `extension` into `all`.\n *\n * @param {NormalizedExtension} all\n *   Extension to merge into.\n * @param {Extension} extension\n *   Extension to merge.\n * @returns {void}\n */\nfunction syntaxExtension(all, extension) {\n  /** @type {keyof Extension} */\n  let hook\n\n  for (hook in extension) {\n    const maybe = hasOwnProperty.call(all, hook) ? all[hook] : undefined\n    /** @type {Record<string, unknown>} */\n    const left = maybe || (all[hook] = {})\n    /** @type {Record<string, unknown> | undefined} */\n    const right = extension[hook]\n    /** @type {string} */\n    let code\n\n    if (right) {\n      for (code in right) {\n        if (!hasOwnProperty.call(left, code)) left[code] = []\n        const value = right[code]\n        constructs(\n          // @ts-expect-error Looks like a list.\n          left[code],\n          Array.isArray(value) ? value : value ? [value] : []\n        )\n      }\n    }\n  }\n}\n\n/**\n * Merge `list` into `existing` (both lists of constructs).\n * Mutates `existing`.\n *\n * @param {Array<unknown>} existing\n * @param {Array<unknown>} list\n * @returns {void}\n */\nfunction constructs(existing, list) {\n  let index = -1\n  /** @type {Array<unknown>} */\n  const before = []\n\n  while (++index < list.length) {\n    // @ts-expect-error Looks like an object.\n    ;(list[index].add === 'after' ? existing : before).push(list[index])\n  }\n\n  splice(existing, 0, 0, before)\n}\n\n/**\n * Combine multiple HTML extensions into one.\n *\n * @param {Array<HtmlExtension>} htmlExtensions\n *   List of HTML extensions.\n * @returns {HtmlExtension}\n *   A single combined HTML extension.\n */\nexport function combineHtmlExtensions(htmlExtensions) {\n  /** @type {HtmlExtension} */\n  const handlers = {}\n  let index = -1\n\n  while (++index < htmlExtensions.length) {\n    htmlExtension(handlers, htmlExtensions[index])\n  }\n\n  return handlers\n}\n\n/**\n * Merge `extension` into `all`.\n *\n * @param {HtmlExtension} all\n *   Extension to merge into.\n * @param {HtmlExtension} extension\n *   Extension to merge.\n * @returns {void}\n */\nfunction htmlExtension(all, extension) {\n  /** @type {keyof HtmlExtension} */\n  let hook\n\n  for (hook in extension) {\n    const maybe = hasOwnProperty.call(all, hook) ? all[hook] : undefined\n    const left = maybe || (all[hook] = {})\n    const right = extension[hook]\n    /** @type {keyof Handles} */\n    let type\n\n    if (right) {\n      for (type in right) {\n        // @ts-expect-error assume document vs regular handler are managed correctly.\n        left[type] = right[type]\n      }\n    }\n  }\n}\n","// This module is generated by `script/`.\n//\n// CommonMark handles attention (emphasis, strong) markers based on what comes\n// before or after them.\n// One such difference is if those characters are Unicode punctuation.\n// This script is generated from the Unicode data.\n\n/**\n * Regular expression that matches a unicode punctuation character.\n */\nexport const unicodePunctuationRegex =\n  /[!-\\/:-@\\[-`\\{-~\\xA1\\xA7\\xAB\\xB6\\xB7\\xBB\\xBF\\u037E\\u0387\\u055A-\\u055F\\u0589\\u058A\\u05BE\\u05C0\\u05C3\\u05C6\\u05F3\\u05F4\\u0609\\u060A\\u060C\\u060D\\u061B\\u061D-\\u061F\\u066A-\\u066D\\u06D4\\u0700-\\u070D\\u07F7-\\u07F9\\u0830-\\u083E\\u085E\\u0964\\u0965\\u0970\\u09FD\\u0A76\\u0AF0\\u0C77\\u0C84\\u0DF4\\u0E4F\\u0E5A\\u0E5B\\u0F04-\\u0F12\\u0F14\\u0F3A-\\u0F3D\\u0F85\\u0FD0-\\u0FD4\\u0FD9\\u0FDA\\u104A-\\u104F\\u10FB\\u1360-\\u1368\\u1400\\u166E\\u169B\\u169C\\u16EB-\\u16ED\\u1735\\u1736\\u17D4-\\u17D6\\u17D8-\\u17DA\\u1800-\\u180A\\u1944\\u1945\\u1A1E\\u1A1F\\u1AA0-\\u1AA6\\u1AA8-\\u1AAD\\u1B5A-\\u1B60\\u1B7D\\u1B7E\\u1BFC-\\u1BFF\\u1C3B-\\u1C3F\\u1C7E\\u1C7F\\u1CC0-\\u1CC7\\u1CD3\\u2010-\\u2027\\u2030-\\u2043\\u2045-\\u2051\\u2053-\\u205E\\u207D\\u207E\\u208D\\u208E\\u2308-\\u230B\\u2329\\u232A\\u2768-\\u2775\\u27C5\\u27C6\\u27E6-\\u27EF\\u2983-\\u2998\\u29D8-\\u29DB\\u29FC\\u29FD\\u2CF9-\\u2CFC\\u2CFE\\u2CFF\\u2D70\\u2E00-\\u2E2E\\u2E30-\\u2E4F\\u2E52-\\u2E5D\\u3001-\\u3003\\u3008-\\u3011\\u3014-\\u301F\\u3030\\u303D\\u30A0\\u30FB\\uA4FE\\uA4FF\\uA60D-\\uA60F\\uA673\\uA67E\\uA6F2-\\uA6F7\\uA874-\\uA877\\uA8CE\\uA8CF\\uA8F8-\\uA8FA\\uA8FC\\uA92E\\uA92F\\uA95F\\uA9C1-\\uA9CD\\uA9DE\\uA9DF\\uAA5C-\\uAA5F\\uAADE\\uAADF\\uAAF0\\uAAF1\\uABEB\\uFD3E\\uFD3F\\uFE10-\\uFE19\\uFE30-\\uFE52\\uFE54-\\uFE61\\uFE63\\uFE68\\uFE6A\\uFE6B\\uFF01-\\uFF03\\uFF05-\\uFF0A\\uFF0C-\\uFF0F\\uFF1A\\uFF1B\\uFF1F\\uFF20\\uFF3B-\\uFF3D\\uFF3F\\uFF5B\\uFF5D\\uFF5F-\\uFF65]/\n","/**\n * @typedef {import('micromark-util-types').Code} Code\n */\n\nimport {unicodePunctuationRegex} from './lib/unicode-punctuation-regex.js'\n\n/**\n * Check whether the character code represents an ASCII alpha (`a` through `z`,\n * case insensitive).\n *\n * An **ASCII alpha** is an ASCII upper alpha or ASCII lower alpha.\n *\n * An **ASCII upper alpha** is a character in the inclusive range U+0041 (`A`)\n * to U+005A (`Z`).\n *\n * An **ASCII lower alpha** is a character in the inclusive range U+0061 (`a`)\n * to U+007A (`z`).\n *\n * @param code\n *   Code.\n * @returns\n *   Whether it matches.\n */\nexport const asciiAlpha = regexCheck(/[A-Za-z]/)\n\n/**\n * Check whether the character code represents an ASCII alphanumeric (`a`\n * through `z`, case insensitive, or `0` through `9`).\n *\n * An **ASCII alphanumeric** is an ASCII digit (see `asciiDigit`) or ASCII alpha\n * (see `asciiAlpha`).\n *\n * @param code\n *   Code.\n * @returns\n *   Whether it matches.\n */\nexport const asciiAlphanumeric = regexCheck(/[\\dA-Za-z]/)\n\n/**\n * Check whether the character code represents an ASCII atext.\n *\n * atext is an ASCII alphanumeric (see `asciiAlphanumeric`), or a character in\n * the inclusive ranges U+0023 NUMBER SIGN (`#`) to U+0027 APOSTROPHE (`'`),\n * U+002A ASTERISK (`*`), U+002B PLUS SIGN (`+`), U+002D DASH (`-`), U+002F\n * SLASH (`/`), U+003D EQUALS TO (`=`), U+003F QUESTION MARK (`?`), U+005E\n * CARET (`^`) to U+0060 GRAVE ACCENT (`` ` ``), or U+007B LEFT CURLY BRACE\n * (`{`) to U+007E TILDE (`~`).\n *\n * See:\n * **\\[RFC5322]**:\n * [Internet Message Format](https://tools.ietf.org/html/rfc5322).\n * P. Resnick.\n * IETF.\n *\n * @param code\n *   Code.\n * @returns\n *   Whether it matches.\n */\nexport const asciiAtext = regexCheck(/[#-'*+\\--9=?A-Z^-~]/)\n\n/**\n * Check whether a character code is an ASCII control character.\n *\n * An **ASCII control** is a character in the inclusive range U+0000 NULL (NUL)\n * to U+001F (US), or U+007F (DEL).\n *\n * @param {Code} code\n *   Code.\n * @returns {boolean}\n *   Whether it matches.\n */\nexport function asciiControl(code) {\n  return (\n    // Special whitespace codes (which have negative values), C0 and Control\n    // character DEL\n    code !== null && (code < 32 || code === 127)\n  )\n}\n\n/**\n * Check whether the character code represents an ASCII digit (`0` through `9`).\n *\n * An **ASCII digit** is a character in the inclusive range U+0030 (`0`) to\n * U+0039 (`9`).\n *\n * @param code\n *   Code.\n * @returns\n *   Whether it matches.\n */\nexport const asciiDigit = regexCheck(/\\d/)\n\n/**\n * Check whether the character code represents an ASCII hex digit (`a` through\n * `f`, case insensitive, or `0` through `9`).\n *\n * An **ASCII hex digit** is an ASCII digit (see `asciiDigit`), ASCII upper hex\n * digit, or an ASCII lower hex digit.\n *\n * An **ASCII upper hex digit** is a character in the inclusive range U+0041\n * (`A`) to U+0046 (`F`).\n *\n * An **ASCII lower hex digit** is a character in the inclusive range U+0061\n * (`a`) to U+0066 (`f`).\n *\n * @param code\n *   Code.\n * @returns\n *   Whether it matches.\n */\nexport const asciiHexDigit = regexCheck(/[\\dA-Fa-f]/)\n\n/**\n * Check whether the character code represents ASCII punctuation.\n *\n * An **ASCII punctuation** is a character in the inclusive ranges U+0021\n * EXCLAMATION MARK (`!`) to U+002F SLASH (`/`), U+003A COLON (`:`) to U+0040 AT\n * SIGN (`@`), U+005B LEFT SQUARE BRACKET (`[`) to U+0060 GRAVE ACCENT\n * (`` ` ``), or U+007B LEFT CURLY BRACE (`{`) to U+007E TILDE (`~`).\n *\n * @param code\n *   Code.\n * @returns\n *   Whether it matches.\n */\nexport const asciiPunctuation = regexCheck(/[!-/:-@[-`{-~]/)\n\n/**\n * Check whether a character code is a markdown line ending.\n *\n * A **markdown line ending** is the virtual characters M-0003 CARRIAGE RETURN\n * LINE FEED (CRLF), M-0004 LINE FEED (LF) and M-0005 CARRIAGE RETURN (CR).\n *\n * In micromark, the actual character U+000A LINE FEED (LF) and U+000D CARRIAGE\n * RETURN (CR) are replaced by these virtual characters depending on whether\n * they occurred together.\n *\n * @param {Code} code\n *   Code.\n * @returns {boolean}\n *   Whether it matches.\n */\nexport function markdownLineEnding(code) {\n  return code !== null && code < -2\n}\n\n/**\n * Check whether a character code is a markdown line ending (see\n * `markdownLineEnding`) or markdown space (see `markdownSpace`).\n *\n * @param {Code} code\n *   Code.\n * @returns {boolean}\n *   Whether it matches.\n */\nexport function markdownLineEndingOrSpace(code) {\n  return code !== null && (code < 0 || code === 32)\n}\n\n/**\n * Check whether a character code is a markdown space.\n *\n * A **markdown space** is the concrete character U+0020 SPACE (SP) and the\n * virtual characters M-0001 VIRTUAL SPACE (VS) and M-0002 HORIZONTAL TAB (HT).\n *\n * In micromark, the actual character U+0009 CHARACTER TABULATION (HT) is\n * replaced by one M-0002 HORIZONTAL TAB (HT) and between 0 and 3 M-0001 VIRTUAL\n * SPACE (VS) characters, depending on the column at which the tab occurred.\n *\n * @param {Code} code\n *   Code.\n * @returns {boolean}\n *   Whether it matches.\n */\nexport function markdownSpace(code) {\n  return code === -2 || code === -1 || code === 32\n}\n\n// Size note: removing ASCII from the regex and using `asciiPunctuation` here\n// In fact adds to the bundle size.\n/**\n * Check whether the character code represents Unicode punctuation.\n *\n * A **Unicode punctuation** is a character in the Unicode `Pc` (Punctuation,\n * Connector), `Pd` (Punctuation, Dash), `Pe` (Punctuation, Close), `Pf`\n * (Punctuation, Final quote), `Pi` (Punctuation, Initial quote), `Po`\n * (Punctuation, Other), or `Ps` (Punctuation, Open) categories, or an ASCII\n * punctuation (see `asciiPunctuation`).\n *\n * See:\n * **\\[UNICODE]**:\n * [The Unicode Standard](https://www.unicode.org/versions/).\n * Unicode Consortium.\n *\n * @param code\n *   Code.\n * @returns\n *   Whether it matches.\n */\nexport const unicodePunctuation = regexCheck(unicodePunctuationRegex)\n\n/**\n * Check whether the character code represents Unicode whitespace.\n *\n * Note that this does handle micromark specific markdown whitespace characters.\n * See `markdownLineEndingOrSpace` to check that.\n *\n * A **Unicode whitespace** is a character in the Unicode `Zs` (Separator,\n * Space) category, or U+0009 CHARACTER TABULATION (HT), U+000A LINE FEED (LF),\n * U+000C (FF), or U+000D CARRIAGE RETURN (CR) (**\\[UNICODE]**).\n *\n * See:\n * **\\[UNICODE]**:\n * [The Unicode Standard](https://www.unicode.org/versions/).\n * Unicode Consortium.\n *\n * @param code\n *   Code.\n * @returns\n *   Whether it matches.\n */\nexport const unicodeWhitespace = regexCheck(/\\s/)\n\n/**\n * Create a code check from a regex.\n *\n * @param {RegExp} regex\n * @returns {(code: Code) => boolean}\n */\nfunction regexCheck(regex) {\n  return check\n\n  /**\n   * Check whether a code matches the bound regex.\n   *\n   * @param {Code} code\n   *   Character code.\n   * @returns {boolean}\n   *   Whether the character code matches the bound regex.\n   */\n  function check(code) {\n    return code !== null && regex.test(String.fromCharCode(code))\n  }\n}\n","/**\n * @typedef {import('micromark-util-types').Effects} Effects\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenType} TokenType\n */\n\nimport {markdownSpace} from 'micromark-util-character'\n\n// To do: implement `spaceOrTab`, `spaceOrTabMinMax`, `spaceOrTabWithOptions`.\n\n/**\n * Parse spaces and tabs.\n *\n * There is no `nok` parameter:\n *\n * *   spaces in markdown are often optional, in which case this factory can be\n *     used and `ok` will be switched to whether spaces were found or not\n * *   one line ending or space can be detected with `markdownSpace(code)` right\n *     before using `factorySpace`\n *\n * ###### Examples\n *\n * Where `␉` represents a tab (plus how much it expands) and `␠` represents a\n * single space.\n *\n * ```markdown\n * ␉\n * ␠␠␠␠\n * ␉␠\n * ```\n *\n * @param {Effects} effects\n *   Context.\n * @param {State} ok\n *   State switched to when successful.\n * @param {TokenType} type\n *   Type (`' \\t'`).\n * @param {number | undefined} [max=Infinity]\n *   Max (exclusive).\n * @returns\n *   Start state.\n */\nexport function factorySpace(effects, ok, type, max) {\n  const limit = max ? max - 1 : Number.POSITIVE_INFINITY\n  let size = 0\n  return start\n\n  /** @type {State} */\n  function start(code) {\n    if (markdownSpace(code)) {\n      effects.enter(type)\n      return prefix(code)\n    }\n    return ok(code)\n  }\n\n  /** @type {State} */\n  function prefix(code) {\n    if (markdownSpace(code) && size++ < limit) {\n      effects.consume(code)\n      return prefix\n    }\n    effects.exit(type)\n    return ok(code)\n  }\n}\n","/**\n * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct\n * @typedef {import('micromark-util-types').Initializer} Initializer\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').Token} Token\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n */\n\nimport {factorySpace} from 'micromark-factory-space'\nimport {markdownLineEnding} from 'micromark-util-character'\n/** @type {InitialConstruct} */\nexport const content = {\n  tokenize: initializeContent\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Initializer}\n */\nfunction initializeContent(effects) {\n  const contentStart = effects.attempt(\n    this.parser.constructs.contentInitial,\n    afterContentStartConstruct,\n    paragraphInitial\n  )\n  /** @type {Token} */\n  let previous\n  return contentStart\n\n  /** @type {State} */\n  function afterContentStartConstruct(code) {\n    if (code === null) {\n      effects.consume(code)\n      return\n    }\n    effects.enter('lineEnding')\n    effects.consume(code)\n    effects.exit('lineEnding')\n    return factorySpace(effects, contentStart, 'linePrefix')\n  }\n\n  /** @type {State} */\n  function paragraphInitial(code) {\n    effects.enter('paragraph')\n    return lineStart(code)\n  }\n\n  /** @type {State} */\n  function lineStart(code) {\n    const token = effects.enter('chunkText', {\n      contentType: 'text',\n      previous\n    })\n    if (previous) {\n      previous.next = token\n    }\n    previous = token\n    return data(code)\n  }\n\n  /** @type {State} */\n  function data(code) {\n    if (code === null) {\n      effects.exit('chunkText')\n      effects.exit('paragraph')\n      effects.consume(code)\n      return\n    }\n    if (markdownLineEnding(code)) {\n      effects.consume(code)\n      effects.exit('chunkText')\n      return lineStart\n    }\n\n    // Data.\n    effects.consume(code)\n    return data\n  }\n}\n","/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').ContainerState} ContainerState\n * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct\n * @typedef {import('micromark-util-types').Initializer} Initializer\n * @typedef {import('micromark-util-types').Point} Point\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').Token} Token\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\n/**\n * @typedef {[Construct, ContainerState]} StackItem\n */\n\nimport {factorySpace} from 'micromark-factory-space'\nimport {markdownLineEnding} from 'micromark-util-character'\nimport {splice} from 'micromark-util-chunked'\n/** @type {InitialConstruct} */\nexport const document = {\n  tokenize: initializeDocument\n}\n\n/** @type {Construct} */\nconst containerConstruct = {\n  tokenize: tokenizeContainer\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Initializer}\n */\nfunction initializeDocument(effects) {\n  const self = this\n  /** @type {Array<StackItem>} */\n  const stack = []\n  let continued = 0\n  /** @type {TokenizeContext | undefined} */\n  let childFlow\n  /** @type {Token | undefined} */\n  let childToken\n  /** @type {number} */\n  let lineStartOffset\n  return start\n\n  /** @type {State} */\n  function start(code) {\n    // First we iterate through the open blocks, starting with the root\n    // document, and descending through last children down to the last open\n    // block.\n    // Each block imposes a condition that the line must satisfy if the block is\n    // to remain open.\n    // For example, a block quote requires a `>` character.\n    // A paragraph requires a non-blank line.\n    // In this phase we may match all or just some of the open blocks.\n    // But we cannot close unmatched blocks yet, because we may have a lazy\n    // continuation line.\n    if (continued < stack.length) {\n      const item = stack[continued]\n      self.containerState = item[1]\n      return effects.attempt(\n        item[0].continuation,\n        documentContinue,\n        checkNewContainers\n      )(code)\n    }\n\n    // Done.\n    return checkNewContainers(code)\n  }\n\n  /** @type {State} */\n  function documentContinue(code) {\n    continued++\n\n    // Note: this field is called `_closeFlow` but it also closes containers.\n    // Perhaps a good idea to rename it but it’s already used in the wild by\n    // extensions.\n    if (self.containerState._closeFlow) {\n      self.containerState._closeFlow = undefined\n      if (childFlow) {\n        closeFlow()\n      }\n\n      // Note: this algorithm for moving events around is similar to the\n      // algorithm when dealing with lazy lines in `writeToChild`.\n      const indexBeforeExits = self.events.length\n      let indexBeforeFlow = indexBeforeExits\n      /** @type {Point | undefined} */\n      let point\n\n      // Find the flow chunk.\n      while (indexBeforeFlow--) {\n        if (\n          self.events[indexBeforeFlow][0] === 'exit' &&\n          self.events[indexBeforeFlow][1].type === 'chunkFlow'\n        ) {\n          point = self.events[indexBeforeFlow][1].end\n          break\n        }\n      }\n      exitContainers(continued)\n\n      // Fix positions.\n      let index = indexBeforeExits\n      while (index < self.events.length) {\n        self.events[index][1].end = Object.assign({}, point)\n        index++\n      }\n\n      // Inject the exits earlier (they’re still also at the end).\n      splice(\n        self.events,\n        indexBeforeFlow + 1,\n        0,\n        self.events.slice(indexBeforeExits)\n      )\n\n      // Discard the duplicate exits.\n      self.events.length = index\n      return checkNewContainers(code)\n    }\n    return start(code)\n  }\n\n  /** @type {State} */\n  function checkNewContainers(code) {\n    // Next, after consuming the continuation markers for existing blocks, we\n    // look for new block starts (e.g. `>` for a block quote).\n    // If we encounter a new block start, we close any blocks unmatched in\n    // step 1 before creating the new block as a child of the last matched\n    // block.\n    if (continued === stack.length) {\n      // No need to `check` whether there’s a container, of `exitContainers`\n      // would be moot.\n      // We can instead immediately `attempt` to parse one.\n      if (!childFlow) {\n        return documentContinued(code)\n      }\n\n      // If we have concrete content, such as block HTML or fenced code,\n      // we can’t have containers “pierce” into them, so we can immediately\n      // start.\n      if (childFlow.currentConstruct && childFlow.currentConstruct.concrete) {\n        return flowStart(code)\n      }\n\n      // If we do have flow, it could still be a blank line,\n      // but we’d be interrupting it w/ a new container if there’s a current\n      // construct.\n      // To do: next major: remove `_gfmTableDynamicInterruptHack` (no longer\n      // needed in micromark-extension-gfm-table@1.0.6).\n      self.interrupt = Boolean(\n        childFlow.currentConstruct && !childFlow._gfmTableDynamicInterruptHack\n      )\n    }\n\n    // Check if there is a new container.\n    self.containerState = {}\n    return effects.check(\n      containerConstruct,\n      thereIsANewContainer,\n      thereIsNoNewContainer\n    )(code)\n  }\n\n  /** @type {State} */\n  function thereIsANewContainer(code) {\n    if (childFlow) closeFlow()\n    exitContainers(continued)\n    return documentContinued(code)\n  }\n\n  /** @type {State} */\n  function thereIsNoNewContainer(code) {\n    self.parser.lazy[self.now().line] = continued !== stack.length\n    lineStartOffset = self.now().offset\n    return flowStart(code)\n  }\n\n  /** @type {State} */\n  function documentContinued(code) {\n    // Try new containers.\n    self.containerState = {}\n    return effects.attempt(\n      containerConstruct,\n      containerContinue,\n      flowStart\n    )(code)\n  }\n\n  /** @type {State} */\n  function containerContinue(code) {\n    continued++\n    stack.push([self.currentConstruct, self.containerState])\n    // Try another.\n    return documentContinued(code)\n  }\n\n  /** @type {State} */\n  function flowStart(code) {\n    if (code === null) {\n      if (childFlow) closeFlow()\n      exitContainers(0)\n      effects.consume(code)\n      return\n    }\n    childFlow = childFlow || self.parser.flow(self.now())\n    effects.enter('chunkFlow', {\n      contentType: 'flow',\n      previous: childToken,\n      _tokenizer: childFlow\n    })\n    return flowContinue(code)\n  }\n\n  /** @type {State} */\n  function flowContinue(code) {\n    if (code === null) {\n      writeToChild(effects.exit('chunkFlow'), true)\n      exitContainers(0)\n      effects.consume(code)\n      return\n    }\n    if (markdownLineEnding(code)) {\n      effects.consume(code)\n      writeToChild(effects.exit('chunkFlow'))\n      // Get ready for the next line.\n      continued = 0\n      self.interrupt = undefined\n      return start\n    }\n    effects.consume(code)\n    return flowContinue\n  }\n\n  /**\n   * @param {Token} token\n   * @param {boolean | undefined} [eof]\n   * @returns {void}\n   */\n  function writeToChild(token, eof) {\n    const stream = self.sliceStream(token)\n    if (eof) stream.push(null)\n    token.previous = childToken\n    if (childToken) childToken.next = token\n    childToken = token\n    childFlow.defineSkip(token.start)\n    childFlow.write(stream)\n\n    // Alright, so we just added a lazy line:\n    //\n    // ```markdown\n    // > a\n    // b.\n    //\n    // Or:\n    //\n    // > ~~~c\n    // d\n    //\n    // Or:\n    //\n    // > | e |\n    // f\n    // ```\n    //\n    // The construct in the second example (fenced code) does not accept lazy\n    // lines, so it marked itself as done at the end of its first line, and\n    // then the content construct parses `d`.\n    // Most constructs in markdown match on the first line: if the first line\n    // forms a construct, a non-lazy line can’t “unmake” it.\n    //\n    // The construct in the third example is potentially a GFM table, and\n    // those are *weird*.\n    // It *could* be a table, from the first line, if the following line\n    // matches a condition.\n    // In this case, that second line is lazy, which “unmakes” the first line\n    // and turns the whole into one content block.\n    //\n    // We’ve now parsed the non-lazy and the lazy line, and can figure out\n    // whether the lazy line started a new flow block.\n    // If it did, we exit the current containers between the two flow blocks.\n    if (self.parser.lazy[token.start.line]) {\n      let index = childFlow.events.length\n      while (index--) {\n        if (\n          // The token starts before the line ending…\n          childFlow.events[index][1].start.offset < lineStartOffset &&\n          // …and either is not ended yet…\n          (!childFlow.events[index][1].end ||\n            // …or ends after it.\n            childFlow.events[index][1].end.offset > lineStartOffset)\n        ) {\n          // Exit: there’s still something open, which means it’s a lazy line\n          // part of something.\n          return\n        }\n      }\n\n      // Note: this algorithm for moving events around is similar to the\n      // algorithm when closing flow in `documentContinue`.\n      const indexBeforeExits = self.events.length\n      let indexBeforeFlow = indexBeforeExits\n      /** @type {boolean | undefined} */\n      let seen\n      /** @type {Point | undefined} */\n      let point\n\n      // Find the previous chunk (the one before the lazy line).\n      while (indexBeforeFlow--) {\n        if (\n          self.events[indexBeforeFlow][0] === 'exit' &&\n          self.events[indexBeforeFlow][1].type === 'chunkFlow'\n        ) {\n          if (seen) {\n            point = self.events[indexBeforeFlow][1].end\n            break\n          }\n          seen = true\n        }\n      }\n      exitContainers(continued)\n\n      // Fix positions.\n      index = indexBeforeExits\n      while (index < self.events.length) {\n        self.events[index][1].end = Object.assign({}, point)\n        index++\n      }\n\n      // Inject the exits earlier (they’re still also at the end).\n      splice(\n        self.events,\n        indexBeforeFlow + 1,\n        0,\n        self.events.slice(indexBeforeExits)\n      )\n\n      // Discard the duplicate exits.\n      self.events.length = index\n    }\n  }\n\n  /**\n   * @param {number} size\n   * @returns {void}\n   */\n  function exitContainers(size) {\n    let index = stack.length\n\n    // Exit open containers.\n    while (index-- > size) {\n      const entry = stack[index]\n      self.containerState = entry[1]\n      entry[0].exit.call(self, effects)\n    }\n    stack.length = size\n  }\n  function closeFlow() {\n    childFlow.write([null])\n    childToken = undefined\n    childFlow = undefined\n    self.containerState._closeFlow = undefined\n  }\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeContainer(effects, ok, nok) {\n  // Always populated by defaults.\n\n  return factorySpace(\n    effects,\n    effects.attempt(this.parser.constructs.document, ok, nok),\n    'linePrefix',\n    this.parser.constructs.disable.null.includes('codeIndented') ? undefined : 4\n  )\n}\n","/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\nimport {factorySpace} from 'micromark-factory-space'\nimport {markdownLineEnding, markdownSpace} from 'micromark-util-character'\n/** @type {Construct} */\nexport const blankLine = {\n  tokenize: tokenizeBlankLine,\n  partial: true\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeBlankLine(effects, ok, nok) {\n  return start\n\n  /**\n   * Start of blank line.\n   *\n   * > 👉 **Note**: `␠` represents a space character.\n   *\n   * ```markdown\n   * > | ␠␠␊\n   *     ^\n   * > | ␊\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    return markdownSpace(code)\n      ? factorySpace(effects, after, 'linePrefix')(code)\n      : after(code)\n  }\n\n  /**\n   * At eof/eol, after optional whitespace.\n   *\n   * > 👉 **Note**: `␠` represents a space character.\n   *\n   * ```markdown\n   * > | ␠␠␊\n   *       ^\n   * > | ␊\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function after(code) {\n    return code === null || markdownLineEnding(code) ? ok(code) : nok(code)\n  }\n}\n","/**\n * @typedef {import('micromark-util-types').Chunk} Chunk\n * @typedef {import('micromark-util-types').Event} Event\n * @typedef {import('micromark-util-types').Token} Token\n */\n\nimport {splice} from 'micromark-util-chunked'\n/**\n * Tokenize subcontent.\n *\n * @param {Array<Event>} events\n *   List of events.\n * @returns {boolean}\n *   Whether subtokens were found.\n */\nexport function subtokenize(events) {\n  /** @type {Record<string, number>} */\n  const jumps = {}\n  let index = -1\n  /** @type {Event} */\n  let event\n  /** @type {number | undefined} */\n  let lineIndex\n  /** @type {number} */\n  let otherIndex\n  /** @type {Event} */\n  let otherEvent\n  /** @type {Array<Event>} */\n  let parameters\n  /** @type {Array<Event>} */\n  let subevents\n  /** @type {boolean | undefined} */\n  let more\n  while (++index < events.length) {\n    while (index in jumps) {\n      index = jumps[index]\n    }\n    event = events[index]\n\n    // Add a hook for the GFM tasklist extension, which needs to know if text\n    // is in the first content of a list item.\n    if (\n      index &&\n      event[1].type === 'chunkFlow' &&\n      events[index - 1][1].type === 'listItemPrefix'\n    ) {\n      subevents = event[1]._tokenizer.events\n      otherIndex = 0\n      if (\n        otherIndex < subevents.length &&\n        subevents[otherIndex][1].type === 'lineEndingBlank'\n      ) {\n        otherIndex += 2\n      }\n      if (\n        otherIndex < subevents.length &&\n        subevents[otherIndex][1].type === 'content'\n      ) {\n        while (++otherIndex < subevents.length) {\n          if (subevents[otherIndex][1].type === 'content') {\n            break\n          }\n          if (subevents[otherIndex][1].type === 'chunkText') {\n            subevents[otherIndex][1]._isInFirstContentOfListItem = true\n            otherIndex++\n          }\n        }\n      }\n    }\n\n    // Enter.\n    if (event[0] === 'enter') {\n      if (event[1].contentType) {\n        Object.assign(jumps, subcontent(events, index))\n        index = jumps[index]\n        more = true\n      }\n    }\n    // Exit.\n    else if (event[1]._container) {\n      otherIndex = index\n      lineIndex = undefined\n      while (otherIndex--) {\n        otherEvent = events[otherIndex]\n        if (\n          otherEvent[1].type === 'lineEnding' ||\n          otherEvent[1].type === 'lineEndingBlank'\n        ) {\n          if (otherEvent[0] === 'enter') {\n            if (lineIndex) {\n              events[lineIndex][1].type = 'lineEndingBlank'\n            }\n            otherEvent[1].type = 'lineEnding'\n            lineIndex = otherIndex\n          }\n        } else {\n          break\n        }\n      }\n      if (lineIndex) {\n        // Fix position.\n        event[1].end = Object.assign({}, events[lineIndex][1].start)\n\n        // Switch container exit w/ line endings.\n        parameters = events.slice(lineIndex, index)\n        parameters.unshift(event)\n        splice(events, lineIndex, index - lineIndex + 1, parameters)\n      }\n    }\n  }\n  return !more\n}\n\n/**\n * Tokenize embedded tokens.\n *\n * @param {Array<Event>} events\n * @param {number} eventIndex\n * @returns {Record<string, number>}\n */\nfunction subcontent(events, eventIndex) {\n  const token = events[eventIndex][1]\n  const context = events[eventIndex][2]\n  let startPosition = eventIndex - 1\n  /** @type {Array<number>} */\n  const startPositions = []\n  const tokenizer =\n    token._tokenizer || context.parser[token.contentType](token.start)\n  const childEvents = tokenizer.events\n  /** @type {Array<[number, number]>} */\n  const jumps = []\n  /** @type {Record<string, number>} */\n  const gaps = {}\n  /** @type {Array<Chunk>} */\n  let stream\n  /** @type {Token | undefined} */\n  let previous\n  let index = -1\n  /** @type {Token | undefined} */\n  let current = token\n  let adjust = 0\n  let start = 0\n  const breaks = [start]\n\n  // Loop forward through the linked tokens to pass them in order to the\n  // subtokenizer.\n  while (current) {\n    // Find the position of the event for this token.\n    while (events[++startPosition][1] !== current) {\n      // Empty.\n    }\n    startPositions.push(startPosition)\n    if (!current._tokenizer) {\n      stream = context.sliceStream(current)\n      if (!current.next) {\n        stream.push(null)\n      }\n      if (previous) {\n        tokenizer.defineSkip(current.start)\n      }\n      if (current._isInFirstContentOfListItem) {\n        tokenizer._gfmTasklistFirstContentOfListItem = true\n      }\n      tokenizer.write(stream)\n      if (current._isInFirstContentOfListItem) {\n        tokenizer._gfmTasklistFirstContentOfListItem = undefined\n      }\n    }\n\n    // Unravel the next token.\n    previous = current\n    current = current.next\n  }\n\n  // Now, loop back through all events (and linked tokens), to figure out which\n  // parts belong where.\n  current = token\n  while (++index < childEvents.length) {\n    if (\n      // Find a void token that includes a break.\n      childEvents[index][0] === 'exit' &&\n      childEvents[index - 1][0] === 'enter' &&\n      childEvents[index][1].type === childEvents[index - 1][1].type &&\n      childEvents[index][1].start.line !== childEvents[index][1].end.line\n    ) {\n      start = index + 1\n      breaks.push(start)\n      // Help GC.\n      current._tokenizer = undefined\n      current.previous = undefined\n      current = current.next\n    }\n  }\n\n  // Help GC.\n  tokenizer.events = []\n\n  // If there’s one more token (which is the cases for lines that end in an\n  // EOF), that’s perfect: the last point we found starts it.\n  // If there isn’t then make sure any remaining content is added to it.\n  if (current) {\n    // Help GC.\n    current._tokenizer = undefined\n    current.previous = undefined\n  } else {\n    breaks.pop()\n  }\n\n  // Now splice the events from the subtokenizer into the current events,\n  // moving back to front so that splice indices aren’t affected.\n  index = breaks.length\n  while (index--) {\n    const slice = childEvents.slice(breaks[index], breaks[index + 1])\n    const start = startPositions.pop()\n    jumps.unshift([start, start + slice.length - 1])\n    splice(events, start, 2, slice)\n  }\n  index = -1\n  while (++index < jumps.length) {\n    gaps[adjust + jumps[index][0]] = adjust + jumps[index][1]\n    adjust += jumps[index][1] - jumps[index][0] - 1\n  }\n  return gaps\n}\n","/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').Resolver} Resolver\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').Token} Token\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\nimport {factorySpace} from 'micromark-factory-space'\nimport {markdownLineEnding} from 'micromark-util-character'\nimport {subtokenize} from 'micromark-util-subtokenize'\n/**\n * No name because it must not be turned off.\n * @type {Construct}\n */\nexport const content = {\n  tokenize: tokenizeContent,\n  resolve: resolveContent\n}\n\n/** @type {Construct} */\nconst continuationConstruct = {\n  tokenize: tokenizeContinuation,\n  partial: true\n}\n\n/**\n * Content is transparent: it’s parsed right now. That way, definitions are also\n * parsed right now: before text in paragraphs (specifically, media) are parsed.\n *\n * @type {Resolver}\n */\nfunction resolveContent(events) {\n  subtokenize(events)\n  return events\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeContent(effects, ok) {\n  /** @type {Token | undefined} */\n  let previous\n  return chunkStart\n\n  /**\n   * Before a content chunk.\n   *\n   * ```markdown\n   * > | abc\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function chunkStart(code) {\n    effects.enter('content')\n    previous = effects.enter('chunkContent', {\n      contentType: 'content'\n    })\n    return chunkInside(code)\n  }\n\n  /**\n   * In a content chunk.\n   *\n   * ```markdown\n   * > | abc\n   *     ^^^\n   * ```\n   *\n   * @type {State}\n   */\n  function chunkInside(code) {\n    if (code === null) {\n      return contentEnd(code)\n    }\n\n    // To do: in `markdown-rs`, each line is parsed on its own, and everything\n    // is stitched together resolving.\n    if (markdownLineEnding(code)) {\n      return effects.check(\n        continuationConstruct,\n        contentContinue,\n        contentEnd\n      )(code)\n    }\n\n    // Data.\n    effects.consume(code)\n    return chunkInside\n  }\n\n  /**\n   *\n   *\n   * @type {State}\n   */\n  function contentEnd(code) {\n    effects.exit('chunkContent')\n    effects.exit('content')\n    return ok(code)\n  }\n\n  /**\n   *\n   *\n   * @type {State}\n   */\n  function contentContinue(code) {\n    effects.consume(code)\n    effects.exit('chunkContent')\n    previous.next = effects.enter('chunkContent', {\n      contentType: 'content',\n      previous\n    })\n    previous = previous.next\n    return chunkInside\n  }\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeContinuation(effects, ok, nok) {\n  const self = this\n  return startLookahead\n\n  /**\n   *\n   *\n   * @type {State}\n   */\n  function startLookahead(code) {\n    effects.exit('chunkContent')\n    effects.enter('lineEnding')\n    effects.consume(code)\n    effects.exit('lineEnding')\n    return factorySpace(effects, prefixed, 'linePrefix')\n  }\n\n  /**\n   *\n   *\n   * @type {State}\n   */\n  function prefixed(code) {\n    if (code === null || markdownLineEnding(code)) {\n      return nok(code)\n    }\n\n    // Always populated by defaults.\n\n    const tail = self.events[self.events.length - 1]\n    if (\n      !self.parser.constructs.disable.null.includes('codeIndented') &&\n      tail &&\n      tail[1].type === 'linePrefix' &&\n      tail[2].sliceSerialize(tail[1], true).length >= 4\n    ) {\n      return ok(code)\n    }\n    return effects.interrupt(self.parser.constructs.flow, nok, ok)(code)\n  }\n}\n","/**\n * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct\n * @typedef {import('micromark-util-types').Initializer} Initializer\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n */\n\nimport {blankLine, content} from 'micromark-core-commonmark'\nimport {factorySpace} from 'micromark-factory-space'\nimport {markdownLineEnding} from 'micromark-util-character'\n/** @type {InitialConstruct} */\nexport const flow = {\n  tokenize: initializeFlow\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Initializer}\n */\nfunction initializeFlow(effects) {\n  const self = this\n  const initial = effects.attempt(\n    // Try to parse a blank line.\n    blankLine,\n    atBlankEnding,\n    // Try to parse initial flow (essentially, only code).\n    effects.attempt(\n      this.parser.constructs.flowInitial,\n      afterConstruct,\n      factorySpace(\n        effects,\n        effects.attempt(\n          this.parser.constructs.flow,\n          afterConstruct,\n          effects.attempt(content, afterConstruct)\n        ),\n        'linePrefix'\n      )\n    )\n  )\n  return initial\n\n  /** @type {State} */\n  function atBlankEnding(code) {\n    if (code === null) {\n      effects.consume(code)\n      return\n    }\n    effects.enter('lineEndingBlank')\n    effects.consume(code)\n    effects.exit('lineEndingBlank')\n    self.currentConstruct = undefined\n    return initial\n  }\n\n  /** @type {State} */\n  function afterConstruct(code) {\n    if (code === null) {\n      effects.consume(code)\n      return\n    }\n    effects.enter('lineEnding')\n    effects.consume(code)\n    effects.exit('lineEnding')\n    self.currentConstruct = undefined\n    return initial\n  }\n}\n","/**\n * @typedef {import('micromark-util-types').Code} Code\n * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct\n * @typedef {import('micromark-util-types').Initializer} Initializer\n * @typedef {import('micromark-util-types').Resolver} Resolver\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n */\n\nexport const resolver = {\n  resolveAll: createResolver()\n}\nexport const string = initializeFactory('string')\nexport const text = initializeFactory('text')\n\n/**\n * @param {'string' | 'text'} field\n * @returns {InitialConstruct}\n */\nfunction initializeFactory(field) {\n  return {\n    tokenize: initializeText,\n    resolveAll: createResolver(\n      field === 'text' ? resolveAllLineSuffixes : undefined\n    )\n  }\n\n  /**\n   * @this {TokenizeContext}\n   * @type {Initializer}\n   */\n  function initializeText(effects) {\n    const self = this\n    const constructs = this.parser.constructs[field]\n    const text = effects.attempt(constructs, start, notText)\n    return start\n\n    /** @type {State} */\n    function start(code) {\n      return atBreak(code) ? text(code) : notText(code)\n    }\n\n    /** @type {State} */\n    function notText(code) {\n      if (code === null) {\n        effects.consume(code)\n        return\n      }\n      effects.enter('data')\n      effects.consume(code)\n      return data\n    }\n\n    /** @type {State} */\n    function data(code) {\n      if (atBreak(code)) {\n        effects.exit('data')\n        return text(code)\n      }\n\n      // Data.\n      effects.consume(code)\n      return data\n    }\n\n    /**\n     * @param {Code} code\n     * @returns {boolean}\n     */\n    function atBreak(code) {\n      if (code === null) {\n        return true\n      }\n      const list = constructs[code]\n      let index = -1\n      if (list) {\n        // Always populated by defaults.\n\n        while (++index < list.length) {\n          const item = list[index]\n          if (!item.previous || item.previous.call(self, self.previous)) {\n            return true\n          }\n        }\n      }\n      return false\n    }\n  }\n}\n\n/**\n * @param {Resolver | undefined} [extraResolver]\n * @returns {Resolver}\n */\nfunction createResolver(extraResolver) {\n  return resolveAllText\n\n  /** @type {Resolver} */\n  function resolveAllText(events, context) {\n    let index = -1\n    /** @type {number | undefined} */\n    let enter\n\n    // A rather boring computation (to merge adjacent `data` events) which\n    // improves mm performance by 29%.\n    while (++index <= events.length) {\n      if (enter === undefined) {\n        if (events[index] && events[index][1].type === 'data') {\n          enter = index\n          index++\n        }\n      } else if (!events[index] || events[index][1].type !== 'data') {\n        // Don’t do anything if there is one data token.\n        if (index !== enter + 2) {\n          events[enter][1].end = events[index - 1][1].end\n          events.splice(enter + 2, index - enter - 2)\n          index = enter + 2\n        }\n        enter = undefined\n      }\n    }\n    return extraResolver ? extraResolver(events, context) : events\n  }\n}\n\n/**\n * A rather ugly set of instructions which again looks at chunks in the input\n * stream.\n * The reason to do this here is that it is *much* faster to parse in reverse.\n * And that we can’t hook into `null` to split the line suffix before an EOF.\n * To do: figure out if we can make this into a clean utility, or even in core.\n * As it will be useful for GFMs literal autolink extension (and maybe even\n * tables?)\n *\n * @type {Resolver}\n */\nfunction resolveAllLineSuffixes(events, context) {\n  let eventIndex = 0 // Skip first.\n\n  while (++eventIndex <= events.length) {\n    if (\n      (eventIndex === events.length ||\n        events[eventIndex][1].type === 'lineEnding') &&\n      events[eventIndex - 1][1].type === 'data'\n    ) {\n      const data = events[eventIndex - 1][1]\n      const chunks = context.sliceStream(data)\n      let index = chunks.length\n      let bufferIndex = -1\n      let size = 0\n      /** @type {boolean | undefined} */\n      let tabs\n      while (index--) {\n        const chunk = chunks[index]\n        if (typeof chunk === 'string') {\n          bufferIndex = chunk.length\n          while (chunk.charCodeAt(bufferIndex - 1) === 32) {\n            size++\n            bufferIndex--\n          }\n          if (bufferIndex) break\n          bufferIndex = -1\n        }\n        // Number\n        else if (chunk === -2) {\n          tabs = true\n          size++\n        } else if (chunk === -1) {\n          // Empty\n        } else {\n          // Replacement character, exit.\n          index++\n          break\n        }\n      }\n      if (size) {\n        const token = {\n          type:\n            eventIndex === events.length || tabs || size < 2\n              ? 'lineSuffix'\n              : 'hardBreakTrailing',\n          start: {\n            line: data.end.line,\n            column: data.end.column - size,\n            offset: data.end.offset - size,\n            _index: data.start._index + index,\n            _bufferIndex: index\n              ? bufferIndex\n              : data.start._bufferIndex + bufferIndex\n          },\n          end: Object.assign({}, data.end)\n        }\n        data.end = Object.assign({}, token.start)\n        if (data.start.offset === data.end.offset) {\n          Object.assign(data, token)\n        } else {\n          events.splice(\n            eventIndex,\n            0,\n            ['enter', token, context],\n            ['exit', token, context]\n          )\n          eventIndex += 2\n        }\n      }\n      eventIndex++\n    }\n  }\n  return events\n}\n","/**\n * @typedef {import('micromark-util-types').Event} Event\n * @typedef {import('micromark-util-types').Resolver} Resolver\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n */\n\n/**\n * Call all `resolveAll`s.\n *\n * @param {Array<{resolveAll?: Resolver | undefined}>} constructs\n *   List of constructs, optionally with `resolveAll`s.\n * @param {Array<Event>} events\n *   List of events.\n * @param {TokenizeContext} context\n *   Context used by `tokenize`.\n * @returns {Array<Event>}\n *   Changed events.\n */\nexport function resolveAll(constructs, events, context) {\n  /** @type {Array<Resolver>} */\n  const called = []\n  let index = -1\n\n  while (++index < constructs.length) {\n    const resolve = constructs[index].resolveAll\n\n    if (resolve && !called.includes(resolve)) {\n      events = resolve(events, context)\n      called.push(resolve)\n    }\n  }\n\n  return events\n}\n","/**\n * @typedef {import('micromark-util-types').Chunk} Chunk\n * @typedef {import('micromark-util-types').Code} Code\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').ConstructRecord} ConstructRecord\n * @typedef {import('micromark-util-types').Effects} Effects\n * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct\n * @typedef {import('micromark-util-types').ParseContext} ParseContext\n * @typedef {import('micromark-util-types').Point} Point\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').Token} Token\n * @typedef {import('micromark-util-types').TokenType} TokenType\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n */\n\n/**\n * @callback Restore\n * @returns {void}\n *\n * @typedef Info\n * @property {Restore} restore\n * @property {number} from\n *\n * @callback ReturnHandle\n *   Handle a successful run.\n * @param {Construct} construct\n * @param {Info} info\n * @returns {void}\n */\n\nimport {markdownLineEnding} from 'micromark-util-character'\nimport {push, splice} from 'micromark-util-chunked'\nimport {resolveAll} from 'micromark-util-resolve-all'\n/**\n * Create a tokenizer.\n * Tokenizers deal with one type of data (e.g., containers, flow, text).\n * The parser is the object dealing with it all.\n * `initialize` works like other constructs, except that only its `tokenize`\n * function is used, in which case it doesn’t receive an `ok` or `nok`.\n * `from` can be given to set the point before the first character, although\n * when further lines are indented, they must be set with `defineSkip`.\n *\n * @param {ParseContext} parser\n * @param {InitialConstruct} initialize\n * @param {Omit<Point, '_bufferIndex' | '_index'> | undefined} [from]\n * @returns {TokenizeContext}\n */\nexport function createTokenizer(parser, initialize, from) {\n  /** @type {Point} */\n  let point = Object.assign(\n    from\n      ? Object.assign({}, from)\n      : {\n          line: 1,\n          column: 1,\n          offset: 0\n        },\n    {\n      _index: 0,\n      _bufferIndex: -1\n    }\n  )\n  /** @type {Record<string, number>} */\n  const columnStart = {}\n  /** @type {Array<Construct>} */\n  const resolveAllConstructs = []\n  /** @type {Array<Chunk>} */\n  let chunks = []\n  /** @type {Array<Token>} */\n  let stack = []\n  /** @type {boolean | undefined} */\n  let consumed = true\n\n  /**\n   * Tools used for tokenizing.\n   *\n   * @type {Effects}\n   */\n  const effects = {\n    consume,\n    enter,\n    exit,\n    attempt: constructFactory(onsuccessfulconstruct),\n    check: constructFactory(onsuccessfulcheck),\n    interrupt: constructFactory(onsuccessfulcheck, {\n      interrupt: true\n    })\n  }\n\n  /**\n   * State and tools for resolving and serializing.\n   *\n   * @type {TokenizeContext}\n   */\n  const context = {\n    previous: null,\n    code: null,\n    containerState: {},\n    events: [],\n    parser,\n    sliceStream,\n    sliceSerialize,\n    now,\n    defineSkip,\n    write\n  }\n\n  /**\n   * The state function.\n   *\n   * @type {State | void}\n   */\n  let state = initialize.tokenize.call(context, effects)\n\n  /**\n   * Track which character we expect to be consumed, to catch bugs.\n   *\n   * @type {Code}\n   */\n  let expectedCode\n  if (initialize.resolveAll) {\n    resolveAllConstructs.push(initialize)\n  }\n  return context\n\n  /** @type {TokenizeContext['write']} */\n  function write(slice) {\n    chunks = push(chunks, slice)\n    main()\n\n    // Exit if we’re not done, resolve might change stuff.\n    if (chunks[chunks.length - 1] !== null) {\n      return []\n    }\n    addResult(initialize, 0)\n\n    // Otherwise, resolve, and exit.\n    context.events = resolveAll(resolveAllConstructs, context.events, context)\n    return context.events\n  }\n\n  //\n  // Tools.\n  //\n\n  /** @type {TokenizeContext['sliceSerialize']} */\n  function sliceSerialize(token, expandTabs) {\n    return serializeChunks(sliceStream(token), expandTabs)\n  }\n\n  /** @type {TokenizeContext['sliceStream']} */\n  function sliceStream(token) {\n    return sliceChunks(chunks, token)\n  }\n\n  /** @type {TokenizeContext['now']} */\n  function now() {\n    // This is a hot path, so we clone manually instead of `Object.assign({}, point)`\n    const {line, column, offset, _index, _bufferIndex} = point\n    return {\n      line,\n      column,\n      offset,\n      _index,\n      _bufferIndex\n    }\n  }\n\n  /** @type {TokenizeContext['defineSkip']} */\n  function defineSkip(value) {\n    columnStart[value.line] = value.column\n    accountForPotentialSkip()\n  }\n\n  //\n  // State management.\n  //\n\n  /**\n   * Main loop (note that `_index` and `_bufferIndex` in `point` are modified by\n   * `consume`).\n   * Here is where we walk through the chunks, which either include strings of\n   * several characters, or numerical character codes.\n   * The reason to do this in a loop instead of a call is so the stack can\n   * drain.\n   *\n   * @returns {void}\n   */\n  function main() {\n    /** @type {number} */\n    let chunkIndex\n    while (point._index < chunks.length) {\n      const chunk = chunks[point._index]\n\n      // If we’re in a buffer chunk, loop through it.\n      if (typeof chunk === 'string') {\n        chunkIndex = point._index\n        if (point._bufferIndex < 0) {\n          point._bufferIndex = 0\n        }\n        while (\n          point._index === chunkIndex &&\n          point._bufferIndex < chunk.length\n        ) {\n          go(chunk.charCodeAt(point._bufferIndex))\n        }\n      } else {\n        go(chunk)\n      }\n    }\n  }\n\n  /**\n   * Deal with one code.\n   *\n   * @param {Code} code\n   * @returns {void}\n   */\n  function go(code) {\n    consumed = undefined\n    expectedCode = code\n    state = state(code)\n  }\n\n  /** @type {Effects['consume']} */\n  function consume(code) {\n    if (markdownLineEnding(code)) {\n      point.line++\n      point.column = 1\n      point.offset += code === -3 ? 2 : 1\n      accountForPotentialSkip()\n    } else if (code !== -1) {\n      point.column++\n      point.offset++\n    }\n\n    // Not in a string chunk.\n    if (point._bufferIndex < 0) {\n      point._index++\n    } else {\n      point._bufferIndex++\n\n      // At end of string chunk.\n      // @ts-expect-error Points w/ non-negative `_bufferIndex` reference\n      // strings.\n      if (point._bufferIndex === chunks[point._index].length) {\n        point._bufferIndex = -1\n        point._index++\n      }\n    }\n\n    // Expose the previous character.\n    context.previous = code\n\n    // Mark as consumed.\n    consumed = true\n  }\n\n  /** @type {Effects['enter']} */\n  function enter(type, fields) {\n    /** @type {Token} */\n    // @ts-expect-error Patch instead of assign required fields to help GC.\n    const token = fields || {}\n    token.type = type\n    token.start = now()\n    context.events.push(['enter', token, context])\n    stack.push(token)\n    return token\n  }\n\n  /** @type {Effects['exit']} */\n  function exit(type) {\n    const token = stack.pop()\n    token.end = now()\n    context.events.push(['exit', token, context])\n    return token\n  }\n\n  /**\n   * Use results.\n   *\n   * @type {ReturnHandle}\n   */\n  function onsuccessfulconstruct(construct, info) {\n    addResult(construct, info.from)\n  }\n\n  /**\n   * Discard results.\n   *\n   * @type {ReturnHandle}\n   */\n  function onsuccessfulcheck(_, info) {\n    info.restore()\n  }\n\n  /**\n   * Factory to attempt/check/interrupt.\n   *\n   * @param {ReturnHandle} onreturn\n   * @param {{interrupt?: boolean | undefined} | undefined} [fields]\n   */\n  function constructFactory(onreturn, fields) {\n    return hook\n\n    /**\n     * Handle either an object mapping codes to constructs, a list of\n     * constructs, or a single construct.\n     *\n     * @param {Array<Construct> | Construct | ConstructRecord} constructs\n     * @param {State} returnState\n     * @param {State | undefined} [bogusState]\n     * @returns {State}\n     */\n    function hook(constructs, returnState, bogusState) {\n      /** @type {Array<Construct>} */\n      let listOfConstructs\n      /** @type {number} */\n      let constructIndex\n      /** @type {Construct} */\n      let currentConstruct\n      /** @type {Info} */\n      let info\n      return Array.isArray(constructs) /* c8 ignore next 1 */\n        ? handleListOfConstructs(constructs)\n        : 'tokenize' in constructs\n        ? // @ts-expect-error Looks like a construct.\n          handleListOfConstructs([constructs])\n        : handleMapOfConstructs(constructs)\n\n      /**\n       * Handle a list of construct.\n       *\n       * @param {ConstructRecord} map\n       * @returns {State}\n       */\n      function handleMapOfConstructs(map) {\n        return start\n\n        /** @type {State} */\n        function start(code) {\n          const def = code !== null && map[code]\n          const all = code !== null && map.null\n          const list = [\n            // To do: add more extension tests.\n            /* c8 ignore next 2 */\n            ...(Array.isArray(def) ? def : def ? [def] : []),\n            ...(Array.isArray(all) ? all : all ? [all] : [])\n          ]\n          return handleListOfConstructs(list)(code)\n        }\n      }\n\n      /**\n       * Handle a list of construct.\n       *\n       * @param {Array<Construct>} list\n       * @returns {State}\n       */\n      function handleListOfConstructs(list) {\n        listOfConstructs = list\n        constructIndex = 0\n        if (list.length === 0) {\n          return bogusState\n        }\n        return handleConstruct(list[constructIndex])\n      }\n\n      /**\n       * Handle a single construct.\n       *\n       * @param {Construct} construct\n       * @returns {State}\n       */\n      function handleConstruct(construct) {\n        return start\n\n        /** @type {State} */\n        function start(code) {\n          // To do: not needed to store if there is no bogus state, probably?\n          // Currently doesn’t work because `inspect` in document does a check\n          // w/o a bogus, which doesn’t make sense. But it does seem to help perf\n          // by not storing.\n          info = store()\n          currentConstruct = construct\n          if (!construct.partial) {\n            context.currentConstruct = construct\n          }\n\n          // Always populated by defaults.\n\n          if (\n            construct.name &&\n            context.parser.constructs.disable.null.includes(construct.name)\n          ) {\n            return nok(code)\n          }\n          return construct.tokenize.call(\n            // If we do have fields, create an object w/ `context` as its\n            // prototype.\n            // This allows a “live binding”, which is needed for `interrupt`.\n            fields ? Object.assign(Object.create(context), fields) : context,\n            effects,\n            ok,\n            nok\n          )(code)\n        }\n      }\n\n      /** @type {State} */\n      function ok(code) {\n        consumed = true\n        onreturn(currentConstruct, info)\n        return returnState\n      }\n\n      /** @type {State} */\n      function nok(code) {\n        consumed = true\n        info.restore()\n        if (++constructIndex < listOfConstructs.length) {\n          return handleConstruct(listOfConstructs[constructIndex])\n        }\n        return bogusState\n      }\n    }\n  }\n\n  /**\n   * @param {Construct} construct\n   * @param {number} from\n   * @returns {void}\n   */\n  function addResult(construct, from) {\n    if (construct.resolveAll && !resolveAllConstructs.includes(construct)) {\n      resolveAllConstructs.push(construct)\n    }\n    if (construct.resolve) {\n      splice(\n        context.events,\n        from,\n        context.events.length - from,\n        construct.resolve(context.events.slice(from), context)\n      )\n    }\n    if (construct.resolveTo) {\n      context.events = construct.resolveTo(context.events, context)\n    }\n  }\n\n  /**\n   * Store state.\n   *\n   * @returns {Info}\n   */\n  function store() {\n    const startPoint = now()\n    const startPrevious = context.previous\n    const startCurrentConstruct = context.currentConstruct\n    const startEventsIndex = context.events.length\n    const startStack = Array.from(stack)\n    return {\n      restore,\n      from: startEventsIndex\n    }\n\n    /**\n     * Restore state.\n     *\n     * @returns {void}\n     */\n    function restore() {\n      point = startPoint\n      context.previous = startPrevious\n      context.currentConstruct = startCurrentConstruct\n      context.events.length = startEventsIndex\n      stack = startStack\n      accountForPotentialSkip()\n    }\n  }\n\n  /**\n   * Move the current point a bit forward in the line when it’s on a column\n   * skip.\n   *\n   * @returns {void}\n   */\n  function accountForPotentialSkip() {\n    if (point.line in columnStart && point.column < 2) {\n      point.column = columnStart[point.line]\n      point.offset += columnStart[point.line] - 1\n    }\n  }\n}\n\n/**\n * Get the chunks from a slice of chunks in the range of a token.\n *\n * @param {Array<Chunk>} chunks\n * @param {Pick<Token, 'end' | 'start'>} token\n * @returns {Array<Chunk>}\n */\nfunction sliceChunks(chunks, token) {\n  const startIndex = token.start._index\n  const startBufferIndex = token.start._bufferIndex\n  const endIndex = token.end._index\n  const endBufferIndex = token.end._bufferIndex\n  /** @type {Array<Chunk>} */\n  let view\n  if (startIndex === endIndex) {\n    // @ts-expect-error `_bufferIndex` is used on string chunks.\n    view = [chunks[startIndex].slice(startBufferIndex, endBufferIndex)]\n  } else {\n    view = chunks.slice(startIndex, endIndex)\n    if (startBufferIndex > -1) {\n      const head = view[0]\n      if (typeof head === 'string') {\n        view[0] = head.slice(startBufferIndex)\n      } else {\n        view.shift()\n      }\n    }\n    if (endBufferIndex > 0) {\n      // @ts-expect-error `_bufferIndex` is used on string chunks.\n      view.push(chunks[endIndex].slice(0, endBufferIndex))\n    }\n  }\n  return view\n}\n\n/**\n * Get the string value of a slice of chunks.\n *\n * @param {Array<Chunk>} chunks\n * @param {boolean | undefined} [expandTabs=false]\n * @returns {string}\n */\nfunction serializeChunks(chunks, expandTabs) {\n  let index = -1\n  /** @type {Array<string>} */\n  const result = []\n  /** @type {boolean | undefined} */\n  let atTab\n  while (++index < chunks.length) {\n    const chunk = chunks[index]\n    /** @type {string} */\n    let value\n    if (typeof chunk === 'string') {\n      value = chunk\n    } else\n      switch (chunk) {\n        case -5: {\n          value = '\\r'\n          break\n        }\n        case -4: {\n          value = '\\n'\n          break\n        }\n        case -3: {\n          value = '\\r' + '\\n'\n          break\n        }\n        case -2: {\n          value = expandTabs ? ' ' : '\\t'\n          break\n        }\n        case -1: {\n          if (!expandTabs && atTab) continue\n          value = ' '\n          break\n        }\n        default: {\n          // Currently only replacement character.\n          value = String.fromCharCode(chunk)\n        }\n      }\n    atTab = chunk === -2\n    result.push(value)\n  }\n  return result.join('')\n}\n","/**\n * @typedef {import('micromark-util-types').Code} Code\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\nimport {factorySpace} from 'micromark-factory-space'\nimport {markdownLineEnding, markdownSpace} from 'micromark-util-character'\n/** @type {Construct} */\nexport const thematicBreak = {\n  name: 'thematicBreak',\n  tokenize: tokenizeThematicBreak\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeThematicBreak(effects, ok, nok) {\n  let size = 0\n  /** @type {NonNullable<Code>} */\n  let marker\n  return start\n\n  /**\n   * Start of thematic break.\n   *\n   * ```markdown\n   * > | ***\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    effects.enter('thematicBreak')\n    // To do: parse indent like `markdown-rs`.\n    return before(code)\n  }\n\n  /**\n   * After optional whitespace, at marker.\n   *\n   * ```markdown\n   * > | ***\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function before(code) {\n    marker = code\n    return atBreak(code)\n  }\n\n  /**\n   * After something, before something else.\n   *\n   * ```markdown\n   * > | ***\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function atBreak(code) {\n    if (code === marker) {\n      effects.enter('thematicBreakSequence')\n      return sequence(code)\n    }\n    if (size >= 3 && (code === null || markdownLineEnding(code))) {\n      effects.exit('thematicBreak')\n      return ok(code)\n    }\n    return nok(code)\n  }\n\n  /**\n   * In sequence.\n   *\n   * ```markdown\n   * > | ***\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function sequence(code) {\n    if (code === marker) {\n      effects.consume(code)\n      size++\n      return sequence\n    }\n    effects.exit('thematicBreakSequence')\n    return markdownSpace(code)\n      ? factorySpace(effects, atBreak, 'whitespace')(code)\n      : atBreak(code)\n  }\n}\n","/**\n * @typedef {import('micromark-util-types').Code} Code\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').ContainerState} ContainerState\n * @typedef {import('micromark-util-types').Exiter} Exiter\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\nimport {factorySpace} from 'micromark-factory-space'\nimport {asciiDigit, markdownSpace} from 'micromark-util-character'\nimport {blankLine} from './blank-line.js'\nimport {thematicBreak} from './thematic-break.js'\n\n/** @type {Construct} */\nexport const list = {\n  name: 'list',\n  tokenize: tokenizeListStart,\n  continuation: {\n    tokenize: tokenizeListContinuation\n  },\n  exit: tokenizeListEnd\n}\n\n/** @type {Construct} */\nconst listItemPrefixWhitespaceConstruct = {\n  tokenize: tokenizeListItemPrefixWhitespace,\n  partial: true\n}\n\n/** @type {Construct} */\nconst indentConstruct = {\n  tokenize: tokenizeIndent,\n  partial: true\n}\n\n// To do: `markdown-rs` parses list items on their own and later stitches them\n// together.\n\n/**\n * @type {Tokenizer}\n * @this {TokenizeContext}\n */\nfunction tokenizeListStart(effects, ok, nok) {\n  const self = this\n  const tail = self.events[self.events.length - 1]\n  let initialSize =\n    tail && tail[1].type === 'linePrefix'\n      ? tail[2].sliceSerialize(tail[1], true).length\n      : 0\n  let size = 0\n  return start\n\n  /** @type {State} */\n  function start(code) {\n    const kind =\n      self.containerState.type ||\n      (code === 42 || code === 43 || code === 45\n        ? 'listUnordered'\n        : 'listOrdered')\n    if (\n      kind === 'listUnordered'\n        ? !self.containerState.marker || code === self.containerState.marker\n        : asciiDigit(code)\n    ) {\n      if (!self.containerState.type) {\n        self.containerState.type = kind\n        effects.enter(kind, {\n          _container: true\n        })\n      }\n      if (kind === 'listUnordered') {\n        effects.enter('listItemPrefix')\n        return code === 42 || code === 45\n          ? effects.check(thematicBreak, nok, atMarker)(code)\n          : atMarker(code)\n      }\n      if (!self.interrupt || code === 49) {\n        effects.enter('listItemPrefix')\n        effects.enter('listItemValue')\n        return inside(code)\n      }\n    }\n    return nok(code)\n  }\n\n  /** @type {State} */\n  function inside(code) {\n    if (asciiDigit(code) && ++size < 10) {\n      effects.consume(code)\n      return inside\n    }\n    if (\n      (!self.interrupt || size < 2) &&\n      (self.containerState.marker\n        ? code === self.containerState.marker\n        : code === 41 || code === 46)\n    ) {\n      effects.exit('listItemValue')\n      return atMarker(code)\n    }\n    return nok(code)\n  }\n\n  /**\n   * @type {State}\n   **/\n  function atMarker(code) {\n    effects.enter('listItemMarker')\n    effects.consume(code)\n    effects.exit('listItemMarker')\n    self.containerState.marker = self.containerState.marker || code\n    return effects.check(\n      blankLine,\n      // Can’t be empty when interrupting.\n      self.interrupt ? nok : onBlank,\n      effects.attempt(\n        listItemPrefixWhitespaceConstruct,\n        endOfPrefix,\n        otherPrefix\n      )\n    )\n  }\n\n  /** @type {State} */\n  function onBlank(code) {\n    self.containerState.initialBlankLine = true\n    initialSize++\n    return endOfPrefix(code)\n  }\n\n  /** @type {State} */\n  function otherPrefix(code) {\n    if (markdownSpace(code)) {\n      effects.enter('listItemPrefixWhitespace')\n      effects.consume(code)\n      effects.exit('listItemPrefixWhitespace')\n      return endOfPrefix\n    }\n    return nok(code)\n  }\n\n  /** @type {State} */\n  function endOfPrefix(code) {\n    self.containerState.size =\n      initialSize +\n      self.sliceSerialize(effects.exit('listItemPrefix'), true).length\n    return ok(code)\n  }\n}\n\n/**\n * @type {Tokenizer}\n * @this {TokenizeContext}\n */\nfunction tokenizeListContinuation(effects, ok, nok) {\n  const self = this\n  self.containerState._closeFlow = undefined\n  return effects.check(blankLine, onBlank, notBlank)\n\n  /** @type {State} */\n  function onBlank(code) {\n    self.containerState.furtherBlankLines =\n      self.containerState.furtherBlankLines ||\n      self.containerState.initialBlankLine\n\n    // We have a blank line.\n    // Still, try to consume at most the items size.\n    return factorySpace(\n      effects,\n      ok,\n      'listItemIndent',\n      self.containerState.size + 1\n    )(code)\n  }\n\n  /** @type {State} */\n  function notBlank(code) {\n    if (self.containerState.furtherBlankLines || !markdownSpace(code)) {\n      self.containerState.furtherBlankLines = undefined\n      self.containerState.initialBlankLine = undefined\n      return notInCurrentItem(code)\n    }\n    self.containerState.furtherBlankLines = undefined\n    self.containerState.initialBlankLine = undefined\n    return effects.attempt(indentConstruct, ok, notInCurrentItem)(code)\n  }\n\n  /** @type {State} */\n  function notInCurrentItem(code) {\n    // While we do continue, we signal that the flow should be closed.\n    self.containerState._closeFlow = true\n    // As we’re closing flow, we’re no longer interrupting.\n    self.interrupt = undefined\n    // Always populated by defaults.\n\n    return factorySpace(\n      effects,\n      effects.attempt(list, ok, nok),\n      'linePrefix',\n      self.parser.constructs.disable.null.includes('codeIndented')\n        ? undefined\n        : 4\n    )(code)\n  }\n}\n\n/**\n * @type {Tokenizer}\n * @this {TokenizeContext}\n */\nfunction tokenizeIndent(effects, ok, nok) {\n  const self = this\n  return factorySpace(\n    effects,\n    afterPrefix,\n    'listItemIndent',\n    self.containerState.size + 1\n  )\n\n  /** @type {State} */\n  function afterPrefix(code) {\n    const tail = self.events[self.events.length - 1]\n    return tail &&\n      tail[1].type === 'listItemIndent' &&\n      tail[2].sliceSerialize(tail[1], true).length === self.containerState.size\n      ? ok(code)\n      : nok(code)\n  }\n}\n\n/**\n * @type {Exiter}\n * @this {TokenizeContext}\n */\nfunction tokenizeListEnd(effects) {\n  effects.exit(this.containerState.type)\n}\n\n/**\n * @type {Tokenizer}\n * @this {TokenizeContext}\n */\nfunction tokenizeListItemPrefixWhitespace(effects, ok, nok) {\n  const self = this\n\n  // Always populated by defaults.\n\n  return factorySpace(\n    effects,\n    afterPrefix,\n    'listItemPrefixWhitespace',\n    self.parser.constructs.disable.null.includes('codeIndented')\n      ? undefined\n      : 4 + 1\n  )\n\n  /** @type {State} */\n  function afterPrefix(code) {\n    const tail = self.events[self.events.length - 1]\n    return !markdownSpace(code) &&\n      tail &&\n      tail[1].type === 'listItemPrefixWhitespace'\n      ? ok(code)\n      : nok(code)\n  }\n}\n","/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').Exiter} Exiter\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\nimport {factorySpace} from 'micromark-factory-space'\nimport {markdownSpace} from 'micromark-util-character'\n/** @type {Construct} */\nexport const blockQuote = {\n  name: 'blockQuote',\n  tokenize: tokenizeBlockQuoteStart,\n  continuation: {\n    tokenize: tokenizeBlockQuoteContinuation\n  },\n  exit\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeBlockQuoteStart(effects, ok, nok) {\n  const self = this\n  return start\n\n  /**\n   * Start of block quote.\n   *\n   * ```markdown\n   * > | > a\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    if (code === 62) {\n      const state = self.containerState\n      if (!state.open) {\n        effects.enter('blockQuote', {\n          _container: true\n        })\n        state.open = true\n      }\n      effects.enter('blockQuotePrefix')\n      effects.enter('blockQuoteMarker')\n      effects.consume(code)\n      effects.exit('blockQuoteMarker')\n      return after\n    }\n    return nok(code)\n  }\n\n  /**\n   * After `>`, before optional whitespace.\n   *\n   * ```markdown\n   * > | > a\n   *      ^\n   * ```\n   *\n   * @type {State}\n   */\n  function after(code) {\n    if (markdownSpace(code)) {\n      effects.enter('blockQuotePrefixWhitespace')\n      effects.consume(code)\n      effects.exit('blockQuotePrefixWhitespace')\n      effects.exit('blockQuotePrefix')\n      return ok\n    }\n    effects.exit('blockQuotePrefix')\n    return ok(code)\n  }\n}\n\n/**\n * Start of block quote continuation.\n *\n * ```markdown\n *   | > a\n * > | > b\n *     ^\n * ```\n *\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeBlockQuoteContinuation(effects, ok, nok) {\n  const self = this\n  return contStart\n\n  /**\n   * Start of block quote continuation.\n   *\n   * Also used to parse the first block quote opening.\n   *\n   * ```markdown\n   *   | > a\n   * > | > b\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function contStart(code) {\n    if (markdownSpace(code)) {\n      // Always populated by defaults.\n\n      return factorySpace(\n        effects,\n        contBefore,\n        'linePrefix',\n        self.parser.constructs.disable.null.includes('codeIndented')\n          ? undefined\n          : 4\n      )(code)\n    }\n    return contBefore(code)\n  }\n\n  /**\n   * At `>`, after optional whitespace.\n   *\n   * Also used to parse the first block quote opening.\n   *\n   * ```markdown\n   *   | > a\n   * > | > b\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function contBefore(code) {\n    return effects.attempt(blockQuote, ok, nok)(code)\n  }\n}\n\n/** @type {Exiter} */\nfunction exit(effects) {\n  effects.exit('blockQuote')\n}\n","/**\n * @typedef {import('micromark-util-types').Effects} Effects\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenType} TokenType\n */\n\nimport {\n  asciiControl,\n  markdownLineEndingOrSpace,\n  markdownLineEnding\n} from 'micromark-util-character'\n/**\n * Parse destinations.\n *\n * ###### Examples\n *\n * ```markdown\n * <a>\n * <a\\>b>\n * <a b>\n * <a)>\n * a\n * a\\)b\n * a(b)c\n * a(b)\n * ```\n *\n * @param {Effects} effects\n *   Context.\n * @param {State} ok\n *   State switched to when successful.\n * @param {State} nok\n *   State switched to when unsuccessful.\n * @param {TokenType} type\n *   Type for whole (`<a>` or `b`).\n * @param {TokenType} literalType\n *   Type when enclosed (`<a>`).\n * @param {TokenType} literalMarkerType\n *   Type for enclosing (`<` and `>`).\n * @param {TokenType} rawType\n *   Type when not enclosed (`b`).\n * @param {TokenType} stringType\n *   Type for the value (`a` or `b`).\n * @param {number | undefined} [max=Infinity]\n *   Depth of nested parens (inclusive).\n * @returns {State}\n *   Start state.\n */ // eslint-disable-next-line max-params\nexport function factoryDestination(\n  effects,\n  ok,\n  nok,\n  type,\n  literalType,\n  literalMarkerType,\n  rawType,\n  stringType,\n  max\n) {\n  const limit = max || Number.POSITIVE_INFINITY\n  let balance = 0\n  return start\n\n  /**\n   * Start of destination.\n   *\n   * ```markdown\n   * > | <aa>\n   *     ^\n   * > | aa\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    if (code === 60) {\n      effects.enter(type)\n      effects.enter(literalType)\n      effects.enter(literalMarkerType)\n      effects.consume(code)\n      effects.exit(literalMarkerType)\n      return enclosedBefore\n    }\n\n    // ASCII control, space, closing paren.\n    if (code === null || code === 32 || code === 41 || asciiControl(code)) {\n      return nok(code)\n    }\n    effects.enter(type)\n    effects.enter(rawType)\n    effects.enter(stringType)\n    effects.enter('chunkString', {\n      contentType: 'string'\n    })\n    return raw(code)\n  }\n\n  /**\n   * After `<`, at an enclosed destination.\n   *\n   * ```markdown\n   * > | <aa>\n   *      ^\n   * ```\n   *\n   * @type {State}\n   */\n  function enclosedBefore(code) {\n    if (code === 62) {\n      effects.enter(literalMarkerType)\n      effects.consume(code)\n      effects.exit(literalMarkerType)\n      effects.exit(literalType)\n      effects.exit(type)\n      return ok\n    }\n    effects.enter(stringType)\n    effects.enter('chunkString', {\n      contentType: 'string'\n    })\n    return enclosed(code)\n  }\n\n  /**\n   * In enclosed destination.\n   *\n   * ```markdown\n   * > | <aa>\n   *      ^\n   * ```\n   *\n   * @type {State}\n   */\n  function enclosed(code) {\n    if (code === 62) {\n      effects.exit('chunkString')\n      effects.exit(stringType)\n      return enclosedBefore(code)\n    }\n    if (code === null || code === 60 || markdownLineEnding(code)) {\n      return nok(code)\n    }\n    effects.consume(code)\n    return code === 92 ? enclosedEscape : enclosed\n  }\n\n  /**\n   * After `\\`, at a special character.\n   *\n   * ```markdown\n   * > | <a\\*a>\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function enclosedEscape(code) {\n    if (code === 60 || code === 62 || code === 92) {\n      effects.consume(code)\n      return enclosed\n    }\n    return enclosed(code)\n  }\n\n  /**\n   * In raw destination.\n   *\n   * ```markdown\n   * > | aa\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function raw(code) {\n    if (\n      !balance &&\n      (code === null || code === 41 || markdownLineEndingOrSpace(code))\n    ) {\n      effects.exit('chunkString')\n      effects.exit(stringType)\n      effects.exit(rawType)\n      effects.exit(type)\n      return ok(code)\n    }\n    if (balance < limit && code === 40) {\n      effects.consume(code)\n      balance++\n      return raw\n    }\n    if (code === 41) {\n      effects.consume(code)\n      balance--\n      return raw\n    }\n\n    // ASCII control (but *not* `\\0`) and space and `(`.\n    // Note: in `markdown-rs`, `\\0` exists in codes, in `micromark-js` it\n    // doesn’t.\n    if (code === null || code === 32 || code === 40 || asciiControl(code)) {\n      return nok(code)\n    }\n    effects.consume(code)\n    return code === 92 ? rawEscape : raw\n  }\n\n  /**\n   * After `\\`, at special character.\n   *\n   * ```markdown\n   * > | a\\*a\n   *       ^\n   * ```\n   *\n   * @type {State}\n   */\n  function rawEscape(code) {\n    if (code === 40 || code === 41 || code === 92) {\n      effects.consume(code)\n      return raw\n    }\n    return raw(code)\n  }\n}\n","/**\n * @typedef {import('micromark-util-types').Effects} Effects\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').TokenType} TokenType\n */\n\nimport {markdownLineEnding, markdownSpace} from 'micromark-util-character'\n/**\n * Parse labels.\n *\n * > 👉 **Note**: labels in markdown are capped at 999 characters in the string.\n *\n * ###### Examples\n *\n * ```markdown\n * [a]\n * [a\n * b]\n * [a\\]b]\n * ```\n *\n * @this {TokenizeContext}\n *   Tokenize context.\n * @param {Effects} effects\n *   Context.\n * @param {State} ok\n *   State switched to when successful.\n * @param {State} nok\n *   State switched to when unsuccessful.\n * @param {TokenType} type\n *   Type of the whole label (`[a]`).\n * @param {TokenType} markerType\n *   Type for the markers (`[` and `]`).\n * @param {TokenType} stringType\n *   Type for the identifier (`a`).\n * @returns {State}\n *   Start state.\n */ // eslint-disable-next-line max-params\nexport function factoryLabel(effects, ok, nok, type, markerType, stringType) {\n  const self = this\n  let size = 0\n  /** @type {boolean} */\n  let seen\n  return start\n\n  /**\n   * Start of label.\n   *\n   * ```markdown\n   * > | [a]\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    effects.enter(type)\n    effects.enter(markerType)\n    effects.consume(code)\n    effects.exit(markerType)\n    effects.enter(stringType)\n    return atBreak\n  }\n\n  /**\n   * In label, at something, before something else.\n   *\n   * ```markdown\n   * > | [a]\n   *      ^\n   * ```\n   *\n   * @type {State}\n   */\n  function atBreak(code) {\n    if (\n      size > 999 ||\n      code === null ||\n      code === 91 ||\n      (code === 93 && !seen) ||\n      // To do: remove in the future once we’ve switched from\n      // `micromark-extension-footnote` to `micromark-extension-gfm-footnote`,\n      // which doesn’t need this.\n      // Hidden footnotes hook.\n      /* c8 ignore next 3 */\n      (code === 94 &&\n        !size &&\n        '_hiddenFootnoteSupport' in self.parser.constructs)\n    ) {\n      return nok(code)\n    }\n    if (code === 93) {\n      effects.exit(stringType)\n      effects.enter(markerType)\n      effects.consume(code)\n      effects.exit(markerType)\n      effects.exit(type)\n      return ok\n    }\n\n    // To do: indent? Link chunks and EOLs together?\n    if (markdownLineEnding(code)) {\n      effects.enter('lineEnding')\n      effects.consume(code)\n      effects.exit('lineEnding')\n      return atBreak\n    }\n    effects.enter('chunkString', {\n      contentType: 'string'\n    })\n    return labelInside(code)\n  }\n\n  /**\n   * In label, in text.\n   *\n   * ```markdown\n   * > | [a]\n   *      ^\n   * ```\n   *\n   * @type {State}\n   */\n  function labelInside(code) {\n    if (\n      code === null ||\n      code === 91 ||\n      code === 93 ||\n      markdownLineEnding(code) ||\n      size++ > 999\n    ) {\n      effects.exit('chunkString')\n      return atBreak(code)\n    }\n    effects.consume(code)\n    if (!seen) seen = !markdownSpace(code)\n    return code === 92 ? labelEscape : labelInside\n  }\n\n  /**\n   * After `\\`, at a special character.\n   *\n   * ```markdown\n   * > | [a\\*a]\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function labelEscape(code) {\n    if (code === 91 || code === 92 || code === 93) {\n      effects.consume(code)\n      size++\n      return labelInside\n    }\n    return labelInside(code)\n  }\n}\n","/**\n * @typedef {import('micromark-util-types').Code} Code\n * @typedef {import('micromark-util-types').Effects} Effects\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenType} TokenType\n */\n\nimport {factorySpace} from 'micromark-factory-space'\nimport {markdownLineEnding} from 'micromark-util-character'\n/**\n * Parse titles.\n *\n * ###### Examples\n *\n * ```markdown\n * \"a\"\n * 'b'\n * (c)\n * \"a\n * b\"\n * 'a\n *     b'\n * (a\\)b)\n * ```\n *\n * @param {Effects} effects\n *   Context.\n * @param {State} ok\n *   State switched to when successful.\n * @param {State} nok\n *   State switched to when unsuccessful.\n * @param {TokenType} type\n *   Type of the whole title (`\"a\"`, `'b'`, `(c)`).\n * @param {TokenType} markerType\n *   Type for the markers (`\"`, `'`, `(`, and `)`).\n * @param {TokenType} stringType\n *   Type for the value (`a`).\n * @returns {State}\n *   Start state.\n */ // eslint-disable-next-line max-params\nexport function factoryTitle(effects, ok, nok, type, markerType, stringType) {\n  /** @type {NonNullable<Code>} */\n  let marker\n  return start\n\n  /**\n   * Start of title.\n   *\n   * ```markdown\n   * > | \"a\"\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    if (code === 34 || code === 39 || code === 40) {\n      effects.enter(type)\n      effects.enter(markerType)\n      effects.consume(code)\n      effects.exit(markerType)\n      marker = code === 40 ? 41 : code\n      return begin\n    }\n    return nok(code)\n  }\n\n  /**\n   * After opening marker.\n   *\n   * This is also used at the closing marker.\n   *\n   * ```markdown\n   * > | \"a\"\n   *      ^\n   * ```\n   *\n   * @type {State}\n   */\n  function begin(code) {\n    if (code === marker) {\n      effects.enter(markerType)\n      effects.consume(code)\n      effects.exit(markerType)\n      effects.exit(type)\n      return ok\n    }\n    effects.enter(stringType)\n    return atBreak(code)\n  }\n\n  /**\n   * At something, before something else.\n   *\n   * ```markdown\n   * > | \"a\"\n   *      ^\n   * ```\n   *\n   * @type {State}\n   */\n  function atBreak(code) {\n    if (code === marker) {\n      effects.exit(stringType)\n      return begin(marker)\n    }\n    if (code === null) {\n      return nok(code)\n    }\n\n    // Note: blank lines can’t exist in content.\n    if (markdownLineEnding(code)) {\n      // To do: use `space_or_tab_eol_with_options`, connect.\n      effects.enter('lineEnding')\n      effects.consume(code)\n      effects.exit('lineEnding')\n      return factorySpace(effects, atBreak, 'linePrefix')\n    }\n    effects.enter('chunkString', {\n      contentType: 'string'\n    })\n    return inside(code)\n  }\n\n  /**\n   *\n   *\n   * @type {State}\n   */\n  function inside(code) {\n    if (code === marker || code === null || markdownLineEnding(code)) {\n      effects.exit('chunkString')\n      return atBreak(code)\n    }\n    effects.consume(code)\n    return code === 92 ? escape : inside\n  }\n\n  /**\n   * After `\\`, at a special character.\n   *\n   * ```markdown\n   * > | \"a\\*b\"\n   *      ^\n   * ```\n   *\n   * @type {State}\n   */\n  function escape(code) {\n    if (code === marker || code === 92) {\n      effects.consume(code)\n      return inside\n    }\n    return inside(code)\n  }\n}\n","/**\n * @typedef {import('micromark-util-types').Effects} Effects\n * @typedef {import('micromark-util-types').State} State\n */\n\nimport {factorySpace} from 'micromark-factory-space'\nimport {markdownLineEnding, markdownSpace} from 'micromark-util-character'\n/**\n * Parse spaces and tabs.\n *\n * There is no `nok` parameter:\n *\n * *   line endings or spaces in markdown are often optional, in which case this\n *     factory can be used and `ok` will be switched to whether spaces were found\n *     or not\n * *   one line ending or space can be detected with\n *     `markdownLineEndingOrSpace(code)` right before using `factoryWhitespace`\n *\n * @param {Effects} effects\n *   Context.\n * @param {State} ok\n *   State switched to when successful.\n * @returns\n *   Start state.\n */\nexport function factoryWhitespace(effects, ok) {\n  /** @type {boolean} */\n  let seen\n  return start\n\n  /** @type {State} */\n  function start(code) {\n    if (markdownLineEnding(code)) {\n      effects.enter('lineEnding')\n      effects.consume(code)\n      effects.exit('lineEnding')\n      seen = true\n      return start\n    }\n    if (markdownSpace(code)) {\n      return factorySpace(\n        effects,\n        start,\n        seen ? 'linePrefix' : 'lineSuffix'\n      )(code)\n    }\n    return ok(code)\n  }\n}\n","/**\n * Normalize an identifier (as found in references, definitions).\n *\n * Collapses markdown whitespace, trim, and then lower- and uppercase.\n *\n * Some characters are considered “uppercase”, such as U+03F4 (`ϴ`), but if their\n * lowercase counterpart (U+03B8 (`θ`)) is uppercased will result in a different\n * uppercase character (U+0398 (`Θ`)).\n * So, to get a canonical form, we perform both lower- and uppercase.\n *\n * Using uppercase last makes sure keys will never interact with default\n * prototypal values (such as `constructor`): nothing in the prototype of\n * `Object` is uppercase.\n *\n * @param {string} value\n *   Identifier to normalize.\n * @returns {string}\n *   Normalized identifier.\n */\nexport function normalizeIdentifier(value) {\n  return (\n    value\n      // Collapse markdown whitespace.\n      .replace(/[\\t\\n\\r ]+/g, ' ')\n      // Trim.\n      .replace(/^ | $/g, '')\n      // Some characters are considered “uppercase”, but if their lowercase\n      // counterpart is uppercased will result in a different uppercase\n      // character.\n      // Hence, to get that form, we perform both lower- and uppercase.\n      // Upper case makes sure keys will not interact with default prototypal\n      // methods: no method is uppercase.\n      .toLowerCase()\n      .toUpperCase()\n  )\n}\n","/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\nimport {factoryDestination} from 'micromark-factory-destination'\nimport {factoryLabel} from 'micromark-factory-label'\nimport {factorySpace} from 'micromark-factory-space'\nimport {factoryTitle} from 'micromark-factory-title'\nimport {factoryWhitespace} from 'micromark-factory-whitespace'\nimport {\n  markdownLineEnding,\n  markdownLineEndingOrSpace,\n  markdownSpace\n} from 'micromark-util-character'\nimport {normalizeIdentifier} from 'micromark-util-normalize-identifier'\n/** @type {Construct} */\nexport const definition = {\n  name: 'definition',\n  tokenize: tokenizeDefinition\n}\n\n/** @type {Construct} */\nconst titleBefore = {\n  tokenize: tokenizeTitleBefore,\n  partial: true\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeDefinition(effects, ok, nok) {\n  const self = this\n  /** @type {string} */\n  let identifier\n  return start\n\n  /**\n   * At start of a definition.\n   *\n   * ```markdown\n   * > | [a]: b \"c\"\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    // Do not interrupt paragraphs (but do follow definitions).\n    // To do: do `interrupt` the way `markdown-rs` does.\n    // To do: parse whitespace the way `markdown-rs` does.\n    effects.enter('definition')\n    return before(code)\n  }\n\n  /**\n   * After optional whitespace, at `[`.\n   *\n   * ```markdown\n   * > | [a]: b \"c\"\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function before(code) {\n    // To do: parse whitespace the way `markdown-rs` does.\n\n    return factoryLabel.call(\n      self,\n      effects,\n      labelAfter,\n      // Note: we don’t need to reset the way `markdown-rs` does.\n      nok,\n      'definitionLabel',\n      'definitionLabelMarker',\n      'definitionLabelString'\n    )(code)\n  }\n\n  /**\n   * After label.\n   *\n   * ```markdown\n   * > | [a]: b \"c\"\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function labelAfter(code) {\n    identifier = normalizeIdentifier(\n      self.sliceSerialize(self.events[self.events.length - 1][1]).slice(1, -1)\n    )\n    if (code === 58) {\n      effects.enter('definitionMarker')\n      effects.consume(code)\n      effects.exit('definitionMarker')\n      return markerAfter\n    }\n    return nok(code)\n  }\n\n  /**\n   * After marker.\n   *\n   * ```markdown\n   * > | [a]: b \"c\"\n   *         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function markerAfter(code) {\n    // Note: whitespace is optional.\n    return markdownLineEndingOrSpace(code)\n      ? factoryWhitespace(effects, destinationBefore)(code)\n      : destinationBefore(code)\n  }\n\n  /**\n   * Before destination.\n   *\n   * ```markdown\n   * > | [a]: b \"c\"\n   *          ^\n   * ```\n   *\n   * @type {State}\n   */\n  function destinationBefore(code) {\n    return factoryDestination(\n      effects,\n      destinationAfter,\n      // Note: we don’t need to reset the way `markdown-rs` does.\n      nok,\n      'definitionDestination',\n      'definitionDestinationLiteral',\n      'definitionDestinationLiteralMarker',\n      'definitionDestinationRaw',\n      'definitionDestinationString'\n    )(code)\n  }\n\n  /**\n   * After destination.\n   *\n   * ```markdown\n   * > | [a]: b \"c\"\n   *           ^\n   * ```\n   *\n   * @type {State}\n   */\n  function destinationAfter(code) {\n    return effects.attempt(titleBefore, after, after)(code)\n  }\n\n  /**\n   * After definition.\n   *\n   * ```markdown\n   * > | [a]: b\n   *           ^\n   * > | [a]: b \"c\"\n   *               ^\n   * ```\n   *\n   * @type {State}\n   */\n  function after(code) {\n    return markdownSpace(code)\n      ? factorySpace(effects, afterWhitespace, 'whitespace')(code)\n      : afterWhitespace(code)\n  }\n\n  /**\n   * After definition, after optional whitespace.\n   *\n   * ```markdown\n   * > | [a]: b\n   *           ^\n   * > | [a]: b \"c\"\n   *               ^\n   * ```\n   *\n   * @type {State}\n   */\n  function afterWhitespace(code) {\n    if (code === null || markdownLineEnding(code)) {\n      effects.exit('definition')\n\n      // Note: we don’t care about uniqueness.\n      // It’s likely that that doesn’t happen very frequently.\n      // It is more likely that it wastes precious time.\n      self.parser.defined.push(identifier)\n\n      // To do: `markdown-rs` interrupt.\n      // // You’d be interrupting.\n      // tokenizer.interrupt = true\n      return ok(code)\n    }\n    return nok(code)\n  }\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeTitleBefore(effects, ok, nok) {\n  return titleBefore\n\n  /**\n   * After destination, at whitespace.\n   *\n   * ```markdown\n   * > | [a]: b\n   *           ^\n   * > | [a]: b \"c\"\n   *           ^\n   * ```\n   *\n   * @type {State}\n   */\n  function titleBefore(code) {\n    return markdownLineEndingOrSpace(code)\n      ? factoryWhitespace(effects, beforeMarker)(code)\n      : nok(code)\n  }\n\n  /**\n   * At title.\n   *\n   * ```markdown\n   *   | [a]: b\n   * > | \"c\"\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function beforeMarker(code) {\n    return factoryTitle(\n      effects,\n      titleAfter,\n      nok,\n      'definitionTitle',\n      'definitionTitleMarker',\n      'definitionTitleString'\n    )(code)\n  }\n\n  /**\n   * After title.\n   *\n   * ```markdown\n   * > | [a]: b \"c\"\n   *               ^\n   * ```\n   *\n   * @type {State}\n   */\n  function titleAfter(code) {\n    return markdownSpace(code)\n      ? factorySpace(effects, titleAfterOptionalWhitespace, 'whitespace')(code)\n      : titleAfterOptionalWhitespace(code)\n  }\n\n  /**\n   * After title, after optional whitespace.\n   *\n   * ```markdown\n   * > | [a]: b \"c\"\n   *               ^\n   * ```\n   *\n   * @type {State}\n   */\n  function titleAfterOptionalWhitespace(code) {\n    return code === null || markdownLineEnding(code) ? ok(code) : nok(code)\n  }\n}\n","/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\nimport {factorySpace} from 'micromark-factory-space'\nimport {markdownLineEnding, markdownSpace} from 'micromark-util-character'\n/** @type {Construct} */\nexport const codeIndented = {\n  name: 'codeIndented',\n  tokenize: tokenizeCodeIndented\n}\n\n/** @type {Construct} */\nconst furtherStart = {\n  tokenize: tokenizeFurtherStart,\n  partial: true\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeCodeIndented(effects, ok, nok) {\n  const self = this\n  return start\n\n  /**\n   * Start of code (indented).\n   *\n   * > **Parsing note**: it is not needed to check if this first line is a\n   * > filled line (that it has a non-whitespace character), because blank lines\n   * > are parsed already, so we never run into that.\n   *\n   * ```markdown\n   * > |     aaa\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    // To do: manually check if interrupting like `markdown-rs`.\n\n    effects.enter('codeIndented')\n    // To do: use an improved `space_or_tab` function like `markdown-rs`,\n    // so that we can drop the next state.\n    return factorySpace(effects, afterPrefix, 'linePrefix', 4 + 1)(code)\n  }\n\n  /**\n   * At start, after 1 or 4 spaces.\n   *\n   * ```markdown\n   * > |     aaa\n   *         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function afterPrefix(code) {\n    const tail = self.events[self.events.length - 1]\n    return tail &&\n      tail[1].type === 'linePrefix' &&\n      tail[2].sliceSerialize(tail[1], true).length >= 4\n      ? atBreak(code)\n      : nok(code)\n  }\n\n  /**\n   * At a break.\n   *\n   * ```markdown\n   * > |     aaa\n   *         ^  ^\n   * ```\n   *\n   * @type {State}\n   */\n  function atBreak(code) {\n    if (code === null) {\n      return after(code)\n    }\n    if (markdownLineEnding(code)) {\n      return effects.attempt(furtherStart, atBreak, after)(code)\n    }\n    effects.enter('codeFlowValue')\n    return inside(code)\n  }\n\n  /**\n   * In code content.\n   *\n   * ```markdown\n   * > |     aaa\n   *         ^^^^\n   * ```\n   *\n   * @type {State}\n   */\n  function inside(code) {\n    if (code === null || markdownLineEnding(code)) {\n      effects.exit('codeFlowValue')\n      return atBreak(code)\n    }\n    effects.consume(code)\n    return inside\n  }\n\n  /** @type {State} */\n  function after(code) {\n    effects.exit('codeIndented')\n    // To do: allow interrupting like `markdown-rs`.\n    // Feel free to interrupt.\n    // tokenizer.interrupt = false\n    return ok(code)\n  }\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeFurtherStart(effects, ok, nok) {\n  const self = this\n  return furtherStart\n\n  /**\n   * At eol, trying to parse another indent.\n   *\n   * ```markdown\n   * > |     aaa\n   *            ^\n   *   |     bbb\n   * ```\n   *\n   * @type {State}\n   */\n  function furtherStart(code) {\n    // To do: improve `lazy` / `pierce` handling.\n    // If this is a lazy line, it can’t be code.\n    if (self.parser.lazy[self.now().line]) {\n      return nok(code)\n    }\n    if (markdownLineEnding(code)) {\n      effects.enter('lineEnding')\n      effects.consume(code)\n      effects.exit('lineEnding')\n      return furtherStart\n    }\n\n    // To do: the code here in `micromark-js` is a bit different from\n    // `markdown-rs` because there it can attempt spaces.\n    // We can’t yet.\n    //\n    // To do: use an improved `space_or_tab` function like `markdown-rs`,\n    // so that we can drop the next state.\n    return factorySpace(effects, afterPrefix, 'linePrefix', 4 + 1)(code)\n  }\n\n  /**\n   * At start, after 1 or 4 spaces.\n   *\n   * ```markdown\n   * > |     aaa\n   *         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function afterPrefix(code) {\n    const tail = self.events[self.events.length - 1]\n    return tail &&\n      tail[1].type === 'linePrefix' &&\n      tail[2].sliceSerialize(tail[1], true).length >= 4\n      ? ok(code)\n      : markdownLineEnding(code)\n      ? furtherStart(code)\n      : nok(code)\n  }\n}\n","/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').Resolver} Resolver\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').Token} Token\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\nimport {factorySpace} from 'micromark-factory-space'\nimport {\n  markdownLineEnding,\n  markdownLineEndingOrSpace,\n  markdownSpace\n} from 'micromark-util-character'\nimport {splice} from 'micromark-util-chunked'\n/** @type {Construct} */\nexport const headingAtx = {\n  name: 'headingAtx',\n  tokenize: tokenizeHeadingAtx,\n  resolve: resolveHeadingAtx\n}\n\n/** @type {Resolver} */\nfunction resolveHeadingAtx(events, context) {\n  let contentEnd = events.length - 2\n  let contentStart = 3\n  /** @type {Token} */\n  let content\n  /** @type {Token} */\n  let text\n\n  // Prefix whitespace, part of the opening.\n  if (events[contentStart][1].type === 'whitespace') {\n    contentStart += 2\n  }\n\n  // Suffix whitespace, part of the closing.\n  if (\n    contentEnd - 2 > contentStart &&\n    events[contentEnd][1].type === 'whitespace'\n  ) {\n    contentEnd -= 2\n  }\n  if (\n    events[contentEnd][1].type === 'atxHeadingSequence' &&\n    (contentStart === contentEnd - 1 ||\n      (contentEnd - 4 > contentStart &&\n        events[contentEnd - 2][1].type === 'whitespace'))\n  ) {\n    contentEnd -= contentStart + 1 === contentEnd ? 2 : 4\n  }\n  if (contentEnd > contentStart) {\n    content = {\n      type: 'atxHeadingText',\n      start: events[contentStart][1].start,\n      end: events[contentEnd][1].end\n    }\n    text = {\n      type: 'chunkText',\n      start: events[contentStart][1].start,\n      end: events[contentEnd][1].end,\n      contentType: 'text'\n    }\n    splice(events, contentStart, contentEnd - contentStart + 1, [\n      ['enter', content, context],\n      ['enter', text, context],\n      ['exit', text, context],\n      ['exit', content, context]\n    ])\n  }\n  return events\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeHeadingAtx(effects, ok, nok) {\n  let size = 0\n  return start\n\n  /**\n   * Start of a heading (atx).\n   *\n   * ```markdown\n   * > | ## aa\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    // To do: parse indent like `markdown-rs`.\n    effects.enter('atxHeading')\n    return before(code)\n  }\n\n  /**\n   * After optional whitespace, at `#`.\n   *\n   * ```markdown\n   * > | ## aa\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function before(code) {\n    effects.enter('atxHeadingSequence')\n    return sequenceOpen(code)\n  }\n\n  /**\n   * In opening sequence.\n   *\n   * ```markdown\n   * > | ## aa\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function sequenceOpen(code) {\n    if (code === 35 && size++ < 6) {\n      effects.consume(code)\n      return sequenceOpen\n    }\n\n    // Always at least one `#`.\n    if (code === null || markdownLineEndingOrSpace(code)) {\n      effects.exit('atxHeadingSequence')\n      return atBreak(code)\n    }\n    return nok(code)\n  }\n\n  /**\n   * After something, before something else.\n   *\n   * ```markdown\n   * > | ## aa\n   *       ^\n   * ```\n   *\n   * @type {State}\n   */\n  function atBreak(code) {\n    if (code === 35) {\n      effects.enter('atxHeadingSequence')\n      return sequenceFurther(code)\n    }\n    if (code === null || markdownLineEnding(code)) {\n      effects.exit('atxHeading')\n      // To do: interrupt like `markdown-rs`.\n      // // Feel free to interrupt.\n      // tokenizer.interrupt = false\n      return ok(code)\n    }\n    if (markdownSpace(code)) {\n      return factorySpace(effects, atBreak, 'whitespace')(code)\n    }\n\n    // To do: generate `data` tokens, add the `text` token later.\n    // Needs edit map, see: `markdown.rs`.\n    effects.enter('atxHeadingText')\n    return data(code)\n  }\n\n  /**\n   * In further sequence (after whitespace).\n   *\n   * Could be normal “visible” hashes in the heading or a final sequence.\n   *\n   * ```markdown\n   * > | ## aa ##\n   *           ^\n   * ```\n   *\n   * @type {State}\n   */\n  function sequenceFurther(code) {\n    if (code === 35) {\n      effects.consume(code)\n      return sequenceFurther\n    }\n    effects.exit('atxHeadingSequence')\n    return atBreak(code)\n  }\n\n  /**\n   * In text.\n   *\n   * ```markdown\n   * > | ## aa\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function data(code) {\n    if (code === null || code === 35 || markdownLineEndingOrSpace(code)) {\n      effects.exit('atxHeadingText')\n      return atBreak(code)\n    }\n    effects.consume(code)\n    return data\n  }\n}\n","/**\n * @typedef {import('micromark-util-types').Code} Code\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').Resolver} Resolver\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\nimport {factorySpace} from 'micromark-factory-space'\nimport {markdownLineEnding, markdownSpace} from 'micromark-util-character'\n/** @type {Construct} */\nexport const setextUnderline = {\n  name: 'setextUnderline',\n  tokenize: tokenizeSetextUnderline,\n  resolveTo: resolveToSetextUnderline\n}\n\n/** @type {Resolver} */\nfunction resolveToSetextUnderline(events, context) {\n  // To do: resolve like `markdown-rs`.\n  let index = events.length\n  /** @type {number | undefined} */\n  let content\n  /** @type {number | undefined} */\n  let text\n  /** @type {number | undefined} */\n  let definition\n\n  // Find the opening of the content.\n  // It’ll always exist: we don’t tokenize if it isn’t there.\n  while (index--) {\n    if (events[index][0] === 'enter') {\n      if (events[index][1].type === 'content') {\n        content = index\n        break\n      }\n      if (events[index][1].type === 'paragraph') {\n        text = index\n      }\n    }\n    // Exit\n    else {\n      if (events[index][1].type === 'content') {\n        // Remove the content end (if needed we’ll add it later)\n        events.splice(index, 1)\n      }\n      if (!definition && events[index][1].type === 'definition') {\n        definition = index\n      }\n    }\n  }\n  const heading = {\n    type: 'setextHeading',\n    start: Object.assign({}, events[text][1].start),\n    end: Object.assign({}, events[events.length - 1][1].end)\n  }\n\n  // Change the paragraph to setext heading text.\n  events[text][1].type = 'setextHeadingText'\n\n  // If we have definitions in the content, we’ll keep on having content,\n  // but we need move it.\n  if (definition) {\n    events.splice(text, 0, ['enter', heading, context])\n    events.splice(definition + 1, 0, ['exit', events[content][1], context])\n    events[content][1].end = Object.assign({}, events[definition][1].end)\n  } else {\n    events[content][1] = heading\n  }\n\n  // Add the heading exit at the end.\n  events.push(['exit', heading, context])\n  return events\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeSetextUnderline(effects, ok, nok) {\n  const self = this\n  /** @type {NonNullable<Code>} */\n  let marker\n  return start\n\n  /**\n   * At start of heading (setext) underline.\n   *\n   * ```markdown\n   *   | aa\n   * > | ==\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    let index = self.events.length\n    /** @type {boolean | undefined} */\n    let paragraph\n    // Find an opening.\n    while (index--) {\n      // Skip enter/exit of line ending, line prefix, and content.\n      // We can now either have a definition or a paragraph.\n      if (\n        self.events[index][1].type !== 'lineEnding' &&\n        self.events[index][1].type !== 'linePrefix' &&\n        self.events[index][1].type !== 'content'\n      ) {\n        paragraph = self.events[index][1].type === 'paragraph'\n        break\n      }\n    }\n\n    // To do: handle lazy/pierce like `markdown-rs`.\n    // To do: parse indent like `markdown-rs`.\n    if (!self.parser.lazy[self.now().line] && (self.interrupt || paragraph)) {\n      effects.enter('setextHeadingLine')\n      marker = code\n      return before(code)\n    }\n    return nok(code)\n  }\n\n  /**\n   * After optional whitespace, at `-` or `=`.\n   *\n   * ```markdown\n   *   | aa\n   * > | ==\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function before(code) {\n    effects.enter('setextHeadingLineSequence')\n    return inside(code)\n  }\n\n  /**\n   * In sequence.\n   *\n   * ```markdown\n   *   | aa\n   * > | ==\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function inside(code) {\n    if (code === marker) {\n      effects.consume(code)\n      return inside\n    }\n    effects.exit('setextHeadingLineSequence')\n    return markdownSpace(code)\n      ? factorySpace(effects, after, 'lineSuffix')(code)\n      : after(code)\n  }\n\n  /**\n   * After sequence, after optional whitespace.\n   *\n   * ```markdown\n   *   | aa\n   * > | ==\n   *       ^\n   * ```\n   *\n   * @type {State}\n   */\n  function after(code) {\n    if (code === null || markdownLineEnding(code)) {\n      effects.exit('setextHeadingLine')\n      return ok(code)\n    }\n    return nok(code)\n  }\n}\n","/**\n * List of lowercase HTML “block” tag names.\n *\n * The list, when parsing HTML (flow), results in more relaxed rules (condition\n * 6).\n * Because they are known blocks, the HTML-like syntax doesn’t have to be\n * strictly parsed.\n * For tag names not in this list, a more strict algorithm (condition 7) is used\n * to detect whether the HTML-like syntax is seen as HTML (flow) or not.\n *\n * This is copied from:\n * <https://spec.commonmark.org/0.30/#html-blocks>.\n *\n * > 👉 **Note**: `search` was added in `CommonMark@0.31`.\n */\nexport const htmlBlockNames = [\n  'address',\n  'article',\n  'aside',\n  'base',\n  'basefont',\n  'blockquote',\n  'body',\n  'caption',\n  'center',\n  'col',\n  'colgroup',\n  'dd',\n  'details',\n  'dialog',\n  'dir',\n  'div',\n  'dl',\n  'dt',\n  'fieldset',\n  'figcaption',\n  'figure',\n  'footer',\n  'form',\n  'frame',\n  'frameset',\n  'h1',\n  'h2',\n  'h3',\n  'h4',\n  'h5',\n  'h6',\n  'head',\n  'header',\n  'hr',\n  'html',\n  'iframe',\n  'legend',\n  'li',\n  'link',\n  'main',\n  'menu',\n  'menuitem',\n  'nav',\n  'noframes',\n  'ol',\n  'optgroup',\n  'option',\n  'p',\n  'param',\n  'search',\n  'section',\n  'summary',\n  'table',\n  'tbody',\n  'td',\n  'tfoot',\n  'th',\n  'thead',\n  'title',\n  'tr',\n  'track',\n  'ul'\n]\n\n/**\n * List of lowercase HTML “raw” tag names.\n *\n * The list, when parsing HTML (flow), results in HTML that can include lines\n * without exiting, until a closing tag also in this list is found (condition\n * 1).\n *\n * This module is copied from:\n * <https://spec.commonmark.org/0.30/#html-blocks>.\n *\n * > 👉 **Note**: `textarea` was added in `CommonMark@0.30`.\n */\nexport const htmlRawNames = ['pre', 'script', 'style', 'textarea']\n","/**\n * @typedef {import('micromark-util-types').Code} Code\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').Resolver} Resolver\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\nimport {\n  asciiAlpha,\n  asciiAlphanumeric,\n  markdownLineEnding,\n  markdownLineEndingOrSpace,\n  markdownSpace\n} from 'micromark-util-character'\nimport {htmlBlockNames, htmlRawNames} from 'micromark-util-html-tag-name'\nimport {blankLine} from './blank-line.js'\n\n/** @type {Construct} */\nexport const htmlFlow = {\n  name: 'htmlFlow',\n  tokenize: tokenizeHtmlFlow,\n  resolveTo: resolveToHtmlFlow,\n  concrete: true\n}\n\n/** @type {Construct} */\nconst blankLineBefore = {\n  tokenize: tokenizeBlankLineBefore,\n  partial: true\n}\nconst nonLazyContinuationStart = {\n  tokenize: tokenizeNonLazyContinuationStart,\n  partial: true\n}\n\n/** @type {Resolver} */\nfunction resolveToHtmlFlow(events) {\n  let index = events.length\n  while (index--) {\n    if (events[index][0] === 'enter' && events[index][1].type === 'htmlFlow') {\n      break\n    }\n  }\n  if (index > 1 && events[index - 2][1].type === 'linePrefix') {\n    // Add the prefix start to the HTML token.\n    events[index][1].start = events[index - 2][1].start\n    // Add the prefix start to the HTML line token.\n    events[index + 1][1].start = events[index - 2][1].start\n    // Remove the line prefix.\n    events.splice(index - 2, 2)\n  }\n  return events\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeHtmlFlow(effects, ok, nok) {\n  const self = this\n  /** @type {number} */\n  let marker\n  /** @type {boolean} */\n  let closingTag\n  /** @type {string} */\n  let buffer\n  /** @type {number} */\n  let index\n  /** @type {Code} */\n  let markerB\n  return start\n\n  /**\n   * Start of HTML (flow).\n   *\n   * ```markdown\n   * > | <x />\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    // To do: parse indent like `markdown-rs`.\n    return before(code)\n  }\n\n  /**\n   * At `<`, after optional whitespace.\n   *\n   * ```markdown\n   * > | <x />\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function before(code) {\n    effects.enter('htmlFlow')\n    effects.enter('htmlFlowData')\n    effects.consume(code)\n    return open\n  }\n\n  /**\n   * After `<`, at tag name or other stuff.\n   *\n   * ```markdown\n   * > | <x />\n   *      ^\n   * > | <!doctype>\n   *      ^\n   * > | <!--xxx-->\n   *      ^\n   * ```\n   *\n   * @type {State}\n   */\n  function open(code) {\n    if (code === 33) {\n      effects.consume(code)\n      return declarationOpen\n    }\n    if (code === 47) {\n      effects.consume(code)\n      closingTag = true\n      return tagCloseStart\n    }\n    if (code === 63) {\n      effects.consume(code)\n      marker = 3\n      // To do:\n      // tokenizer.concrete = true\n      // To do: use `markdown-rs` style interrupt.\n      // While we’re in an instruction instead of a declaration, we’re on a `?`\n      // right now, so we do need to search for `>`, similar to declarations.\n      return self.interrupt ? ok : continuationDeclarationInside\n    }\n\n    // ASCII alphabetical.\n    if (asciiAlpha(code)) {\n      effects.consume(code)\n      // @ts-expect-error: not null.\n      buffer = String.fromCharCode(code)\n      return tagName\n    }\n    return nok(code)\n  }\n\n  /**\n   * After `<!`, at declaration, comment, or CDATA.\n   *\n   * ```markdown\n   * > | <!doctype>\n   *       ^\n   * > | <!--xxx-->\n   *       ^\n   * > | <![CDATA[>&<]]>\n   *       ^\n   * ```\n   *\n   * @type {State}\n   */\n  function declarationOpen(code) {\n    if (code === 45) {\n      effects.consume(code)\n      marker = 2\n      return commentOpenInside\n    }\n    if (code === 91) {\n      effects.consume(code)\n      marker = 5\n      index = 0\n      return cdataOpenInside\n    }\n\n    // ASCII alphabetical.\n    if (asciiAlpha(code)) {\n      effects.consume(code)\n      marker = 4\n      // // Do not form containers.\n      // tokenizer.concrete = true\n      return self.interrupt ? ok : continuationDeclarationInside\n    }\n    return nok(code)\n  }\n\n  /**\n   * After `<!-`, inside a comment, at another `-`.\n   *\n   * ```markdown\n   * > | <!--xxx-->\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function commentOpenInside(code) {\n    if (code === 45) {\n      effects.consume(code)\n      // // Do not form containers.\n      // tokenizer.concrete = true\n      return self.interrupt ? ok : continuationDeclarationInside\n    }\n    return nok(code)\n  }\n\n  /**\n   * After `<![`, inside CDATA, expecting `CDATA[`.\n   *\n   * ```markdown\n   * > | <![CDATA[>&<]]>\n   *        ^^^^^^\n   * ```\n   *\n   * @type {State}\n   */\n  function cdataOpenInside(code) {\n    const value = 'CDATA['\n    if (code === value.charCodeAt(index++)) {\n      effects.consume(code)\n      if (index === value.length) {\n        // // Do not form containers.\n        // tokenizer.concrete = true\n        return self.interrupt ? ok : continuation\n      }\n      return cdataOpenInside\n    }\n    return nok(code)\n  }\n\n  /**\n   * After `</`, in closing tag, at tag name.\n   *\n   * ```markdown\n   * > | </x>\n   *       ^\n   * ```\n   *\n   * @type {State}\n   */\n  function tagCloseStart(code) {\n    if (asciiAlpha(code)) {\n      effects.consume(code)\n      // @ts-expect-error: not null.\n      buffer = String.fromCharCode(code)\n      return tagName\n    }\n    return nok(code)\n  }\n\n  /**\n   * In tag name.\n   *\n   * ```markdown\n   * > | <ab>\n   *      ^^\n   * > | </ab>\n   *       ^^\n   * ```\n   *\n   * @type {State}\n   */\n  function tagName(code) {\n    if (\n      code === null ||\n      code === 47 ||\n      code === 62 ||\n      markdownLineEndingOrSpace(code)\n    ) {\n      const slash = code === 47\n      const name = buffer.toLowerCase()\n      if (!slash && !closingTag && htmlRawNames.includes(name)) {\n        marker = 1\n        // // Do not form containers.\n        // tokenizer.concrete = true\n        return self.interrupt ? ok(code) : continuation(code)\n      }\n      if (htmlBlockNames.includes(buffer.toLowerCase())) {\n        marker = 6\n        if (slash) {\n          effects.consume(code)\n          return basicSelfClosing\n        }\n\n        // // Do not form containers.\n        // tokenizer.concrete = true\n        return self.interrupt ? ok(code) : continuation(code)\n      }\n      marker = 7\n      // Do not support complete HTML when interrupting.\n      return self.interrupt && !self.parser.lazy[self.now().line]\n        ? nok(code)\n        : closingTag\n        ? completeClosingTagAfter(code)\n        : completeAttributeNameBefore(code)\n    }\n\n    // ASCII alphanumerical and `-`.\n    if (code === 45 || asciiAlphanumeric(code)) {\n      effects.consume(code)\n      buffer += String.fromCharCode(code)\n      return tagName\n    }\n    return nok(code)\n  }\n\n  /**\n   * After closing slash of a basic tag name.\n   *\n   * ```markdown\n   * > | <div/>\n   *          ^\n   * ```\n   *\n   * @type {State}\n   */\n  function basicSelfClosing(code) {\n    if (code === 62) {\n      effects.consume(code)\n      // // Do not form containers.\n      // tokenizer.concrete = true\n      return self.interrupt ? ok : continuation\n    }\n    return nok(code)\n  }\n\n  /**\n   * After closing slash of a complete tag name.\n   *\n   * ```markdown\n   * > | <x/>\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function completeClosingTagAfter(code) {\n    if (markdownSpace(code)) {\n      effects.consume(code)\n      return completeClosingTagAfter\n    }\n    return completeEnd(code)\n  }\n\n  /**\n   * At an attribute name.\n   *\n   * At first, this state is used after a complete tag name, after whitespace,\n   * where it expects optional attributes or the end of the tag.\n   * It is also reused after attributes, when expecting more optional\n   * attributes.\n   *\n   * ```markdown\n   * > | <a />\n   *        ^\n   * > | <a :b>\n   *        ^\n   * > | <a _b>\n   *        ^\n   * > | <a b>\n   *        ^\n   * > | <a >\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function completeAttributeNameBefore(code) {\n    if (code === 47) {\n      effects.consume(code)\n      return completeEnd\n    }\n\n    // ASCII alphanumerical and `:` and `_`.\n    if (code === 58 || code === 95 || asciiAlpha(code)) {\n      effects.consume(code)\n      return completeAttributeName\n    }\n    if (markdownSpace(code)) {\n      effects.consume(code)\n      return completeAttributeNameBefore\n    }\n    return completeEnd(code)\n  }\n\n  /**\n   * In attribute name.\n   *\n   * ```markdown\n   * > | <a :b>\n   *         ^\n   * > | <a _b>\n   *         ^\n   * > | <a b>\n   *         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function completeAttributeName(code) {\n    // ASCII alphanumerical and `-`, `.`, `:`, and `_`.\n    if (\n      code === 45 ||\n      code === 46 ||\n      code === 58 ||\n      code === 95 ||\n      asciiAlphanumeric(code)\n    ) {\n      effects.consume(code)\n      return completeAttributeName\n    }\n    return completeAttributeNameAfter(code)\n  }\n\n  /**\n   * After attribute name, at an optional initializer, the end of the tag, or\n   * whitespace.\n   *\n   * ```markdown\n   * > | <a b>\n   *         ^\n   * > | <a b=c>\n   *         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function completeAttributeNameAfter(code) {\n    if (code === 61) {\n      effects.consume(code)\n      return completeAttributeValueBefore\n    }\n    if (markdownSpace(code)) {\n      effects.consume(code)\n      return completeAttributeNameAfter\n    }\n    return completeAttributeNameBefore(code)\n  }\n\n  /**\n   * Before unquoted, double quoted, or single quoted attribute value, allowing\n   * whitespace.\n   *\n   * ```markdown\n   * > | <a b=c>\n   *          ^\n   * > | <a b=\"c\">\n   *          ^\n   * ```\n   *\n   * @type {State}\n   */\n  function completeAttributeValueBefore(code) {\n    if (\n      code === null ||\n      code === 60 ||\n      code === 61 ||\n      code === 62 ||\n      code === 96\n    ) {\n      return nok(code)\n    }\n    if (code === 34 || code === 39) {\n      effects.consume(code)\n      markerB = code\n      return completeAttributeValueQuoted\n    }\n    if (markdownSpace(code)) {\n      effects.consume(code)\n      return completeAttributeValueBefore\n    }\n    return completeAttributeValueUnquoted(code)\n  }\n\n  /**\n   * In double or single quoted attribute value.\n   *\n   * ```markdown\n   * > | <a b=\"c\">\n   *           ^\n   * > | <a b='c'>\n   *           ^\n   * ```\n   *\n   * @type {State}\n   */\n  function completeAttributeValueQuoted(code) {\n    if (code === markerB) {\n      effects.consume(code)\n      markerB = null\n      return completeAttributeValueQuotedAfter\n    }\n    if (code === null || markdownLineEnding(code)) {\n      return nok(code)\n    }\n    effects.consume(code)\n    return completeAttributeValueQuoted\n  }\n\n  /**\n   * In unquoted attribute value.\n   *\n   * ```markdown\n   * > | <a b=c>\n   *          ^\n   * ```\n   *\n   * @type {State}\n   */\n  function completeAttributeValueUnquoted(code) {\n    if (\n      code === null ||\n      code === 34 ||\n      code === 39 ||\n      code === 47 ||\n      code === 60 ||\n      code === 61 ||\n      code === 62 ||\n      code === 96 ||\n      markdownLineEndingOrSpace(code)\n    ) {\n      return completeAttributeNameAfter(code)\n    }\n    effects.consume(code)\n    return completeAttributeValueUnquoted\n  }\n\n  /**\n   * After double or single quoted attribute value, before whitespace or the\n   * end of the tag.\n   *\n   * ```markdown\n   * > | <a b=\"c\">\n   *            ^\n   * ```\n   *\n   * @type {State}\n   */\n  function completeAttributeValueQuotedAfter(code) {\n    if (code === 47 || code === 62 || markdownSpace(code)) {\n      return completeAttributeNameBefore(code)\n    }\n    return nok(code)\n  }\n\n  /**\n   * In certain circumstances of a complete tag where only an `>` is allowed.\n   *\n   * ```markdown\n   * > | <a b=\"c\">\n   *             ^\n   * ```\n   *\n   * @type {State}\n   */\n  function completeEnd(code) {\n    if (code === 62) {\n      effects.consume(code)\n      return completeAfter\n    }\n    return nok(code)\n  }\n\n  /**\n   * After `>` in a complete tag.\n   *\n   * ```markdown\n   * > | <x>\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function completeAfter(code) {\n    if (code === null || markdownLineEnding(code)) {\n      // // Do not form containers.\n      // tokenizer.concrete = true\n      return continuation(code)\n    }\n    if (markdownSpace(code)) {\n      effects.consume(code)\n      return completeAfter\n    }\n    return nok(code)\n  }\n\n  /**\n   * In continuation of any HTML kind.\n   *\n   * ```markdown\n   * > | <!--xxx-->\n   *          ^\n   * ```\n   *\n   * @type {State}\n   */\n  function continuation(code) {\n    if (code === 45 && marker === 2) {\n      effects.consume(code)\n      return continuationCommentInside\n    }\n    if (code === 60 && marker === 1) {\n      effects.consume(code)\n      return continuationRawTagOpen\n    }\n    if (code === 62 && marker === 4) {\n      effects.consume(code)\n      return continuationClose\n    }\n    if (code === 63 && marker === 3) {\n      effects.consume(code)\n      return continuationDeclarationInside\n    }\n    if (code === 93 && marker === 5) {\n      effects.consume(code)\n      return continuationCdataInside\n    }\n    if (markdownLineEnding(code) && (marker === 6 || marker === 7)) {\n      effects.exit('htmlFlowData')\n      return effects.check(\n        blankLineBefore,\n        continuationAfter,\n        continuationStart\n      )(code)\n    }\n    if (code === null || markdownLineEnding(code)) {\n      effects.exit('htmlFlowData')\n      return continuationStart(code)\n    }\n    effects.consume(code)\n    return continuation\n  }\n\n  /**\n   * In continuation, at eol.\n   *\n   * ```markdown\n   * > | <x>\n   *        ^\n   *   | asd\n   * ```\n   *\n   * @type {State}\n   */\n  function continuationStart(code) {\n    return effects.check(\n      nonLazyContinuationStart,\n      continuationStartNonLazy,\n      continuationAfter\n    )(code)\n  }\n\n  /**\n   * In continuation, at eol, before non-lazy content.\n   *\n   * ```markdown\n   * > | <x>\n   *        ^\n   *   | asd\n   * ```\n   *\n   * @type {State}\n   */\n  function continuationStartNonLazy(code) {\n    effects.enter('lineEnding')\n    effects.consume(code)\n    effects.exit('lineEnding')\n    return continuationBefore\n  }\n\n  /**\n   * In continuation, before non-lazy content.\n   *\n   * ```markdown\n   *   | <x>\n   * > | asd\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function continuationBefore(code) {\n    if (code === null || markdownLineEnding(code)) {\n      return continuationStart(code)\n    }\n    effects.enter('htmlFlowData')\n    return continuation(code)\n  }\n\n  /**\n   * In comment continuation, after one `-`, expecting another.\n   *\n   * ```markdown\n   * > | <!--xxx-->\n   *             ^\n   * ```\n   *\n   * @type {State}\n   */\n  function continuationCommentInside(code) {\n    if (code === 45) {\n      effects.consume(code)\n      return continuationDeclarationInside\n    }\n    return continuation(code)\n  }\n\n  /**\n   * In raw continuation, after `<`, at `/`.\n   *\n   * ```markdown\n   * > | <script>console.log(1)</script>\n   *                            ^\n   * ```\n   *\n   * @type {State}\n   */\n  function continuationRawTagOpen(code) {\n    if (code === 47) {\n      effects.consume(code)\n      buffer = ''\n      return continuationRawEndTag\n    }\n    return continuation(code)\n  }\n\n  /**\n   * In raw continuation, after `</`, in a raw tag name.\n   *\n   * ```markdown\n   * > | <script>console.log(1)</script>\n   *                             ^^^^^^\n   * ```\n   *\n   * @type {State}\n   */\n  function continuationRawEndTag(code) {\n    if (code === 62) {\n      const name = buffer.toLowerCase()\n      if (htmlRawNames.includes(name)) {\n        effects.consume(code)\n        return continuationClose\n      }\n      return continuation(code)\n    }\n    if (asciiAlpha(code) && buffer.length < 8) {\n      effects.consume(code)\n      // @ts-expect-error: not null.\n      buffer += String.fromCharCode(code)\n      return continuationRawEndTag\n    }\n    return continuation(code)\n  }\n\n  /**\n   * In cdata continuation, after `]`, expecting `]>`.\n   *\n   * ```markdown\n   * > | <![CDATA[>&<]]>\n   *                  ^\n   * ```\n   *\n   * @type {State}\n   */\n  function continuationCdataInside(code) {\n    if (code === 93) {\n      effects.consume(code)\n      return continuationDeclarationInside\n    }\n    return continuation(code)\n  }\n\n  /**\n   * In declaration or instruction continuation, at `>`.\n   *\n   * ```markdown\n   * > | <!-->\n   *         ^\n   * > | <?>\n   *       ^\n   * > | <!q>\n   *        ^\n   * > | <!--ab-->\n   *             ^\n   * > | <![CDATA[>&<]]>\n   *                   ^\n   * ```\n   *\n   * @type {State}\n   */\n  function continuationDeclarationInside(code) {\n    if (code === 62) {\n      effects.consume(code)\n      return continuationClose\n    }\n\n    // More dashes.\n    if (code === 45 && marker === 2) {\n      effects.consume(code)\n      return continuationDeclarationInside\n    }\n    return continuation(code)\n  }\n\n  /**\n   * In closed continuation: everything we get until the eol/eof is part of it.\n   *\n   * ```markdown\n   * > | <!doctype>\n   *               ^\n   * ```\n   *\n   * @type {State}\n   */\n  function continuationClose(code) {\n    if (code === null || markdownLineEnding(code)) {\n      effects.exit('htmlFlowData')\n      return continuationAfter(code)\n    }\n    effects.consume(code)\n    return continuationClose\n  }\n\n  /**\n   * Done.\n   *\n   * ```markdown\n   * > | <!doctype>\n   *               ^\n   * ```\n   *\n   * @type {State}\n   */\n  function continuationAfter(code) {\n    effects.exit('htmlFlow')\n    // // Feel free to interrupt.\n    // tokenizer.interrupt = false\n    // // No longer concrete.\n    // tokenizer.concrete = false\n    return ok(code)\n  }\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeNonLazyContinuationStart(effects, ok, nok) {\n  const self = this\n  return start\n\n  /**\n   * At eol, before continuation.\n   *\n   * ```markdown\n   * > | * ```js\n   *            ^\n   *   | b\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    if (markdownLineEnding(code)) {\n      effects.enter('lineEnding')\n      effects.consume(code)\n      effects.exit('lineEnding')\n      return after\n    }\n    return nok(code)\n  }\n\n  /**\n   * A continuation.\n   *\n   * ```markdown\n   *   | * ```js\n   * > | b\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function after(code) {\n    return self.parser.lazy[self.now().line] ? nok(code) : ok(code)\n  }\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeBlankLineBefore(effects, ok, nok) {\n  return start\n\n  /**\n   * Before eol, expecting blank line.\n   *\n   * ```markdown\n   * > | <div>\n   *          ^\n   *   |\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    effects.enter('lineEnding')\n    effects.consume(code)\n    effects.exit('lineEnding')\n    return effects.attempt(blankLine, ok, nok)\n  }\n}\n","/**\n * @typedef {import('micromark-util-types').Code} Code\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\nimport {factorySpace} from 'micromark-factory-space'\nimport {markdownLineEnding, markdownSpace} from 'micromark-util-character'\n/** @type {Construct} */\nconst nonLazyContinuation = {\n  tokenize: tokenizeNonLazyContinuation,\n  partial: true\n}\n\n/** @type {Construct} */\nexport const codeFenced = {\n  name: 'codeFenced',\n  tokenize: tokenizeCodeFenced,\n  concrete: true\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeCodeFenced(effects, ok, nok) {\n  const self = this\n  /** @type {Construct} */\n  const closeStart = {\n    tokenize: tokenizeCloseStart,\n    partial: true\n  }\n  let initialPrefix = 0\n  let sizeOpen = 0\n  /** @type {NonNullable<Code>} */\n  let marker\n  return start\n\n  /**\n   * Start of code.\n   *\n   * ```markdown\n   * > | ~~~js\n   *     ^\n   *   | alert(1)\n   *   | ~~~\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    // To do: parse whitespace like `markdown-rs`.\n    return beforeSequenceOpen(code)\n  }\n\n  /**\n   * In opening fence, after prefix, at sequence.\n   *\n   * ```markdown\n   * > | ~~~js\n   *     ^\n   *   | alert(1)\n   *   | ~~~\n   * ```\n   *\n   * @type {State}\n   */\n  function beforeSequenceOpen(code) {\n    const tail = self.events[self.events.length - 1]\n    initialPrefix =\n      tail && tail[1].type === 'linePrefix'\n        ? tail[2].sliceSerialize(tail[1], true).length\n        : 0\n    marker = code\n    effects.enter('codeFenced')\n    effects.enter('codeFencedFence')\n    effects.enter('codeFencedFenceSequence')\n    return sequenceOpen(code)\n  }\n\n  /**\n   * In opening fence sequence.\n   *\n   * ```markdown\n   * > | ~~~js\n   *      ^\n   *   | alert(1)\n   *   | ~~~\n   * ```\n   *\n   * @type {State}\n   */\n  function sequenceOpen(code) {\n    if (code === marker) {\n      sizeOpen++\n      effects.consume(code)\n      return sequenceOpen\n    }\n    if (sizeOpen < 3) {\n      return nok(code)\n    }\n    effects.exit('codeFencedFenceSequence')\n    return markdownSpace(code)\n      ? factorySpace(effects, infoBefore, 'whitespace')(code)\n      : infoBefore(code)\n  }\n\n  /**\n   * In opening fence, after the sequence (and optional whitespace), before info.\n   *\n   * ```markdown\n   * > | ~~~js\n   *        ^\n   *   | alert(1)\n   *   | ~~~\n   * ```\n   *\n   * @type {State}\n   */\n  function infoBefore(code) {\n    if (code === null || markdownLineEnding(code)) {\n      effects.exit('codeFencedFence')\n      return self.interrupt\n        ? ok(code)\n        : effects.check(nonLazyContinuation, atNonLazyBreak, after)(code)\n    }\n    effects.enter('codeFencedFenceInfo')\n    effects.enter('chunkString', {\n      contentType: 'string'\n    })\n    return info(code)\n  }\n\n  /**\n   * In info.\n   *\n   * ```markdown\n   * > | ~~~js\n   *        ^\n   *   | alert(1)\n   *   | ~~~\n   * ```\n   *\n   * @type {State}\n   */\n  function info(code) {\n    if (code === null || markdownLineEnding(code)) {\n      effects.exit('chunkString')\n      effects.exit('codeFencedFenceInfo')\n      return infoBefore(code)\n    }\n    if (markdownSpace(code)) {\n      effects.exit('chunkString')\n      effects.exit('codeFencedFenceInfo')\n      return factorySpace(effects, metaBefore, 'whitespace')(code)\n    }\n    if (code === 96 && code === marker) {\n      return nok(code)\n    }\n    effects.consume(code)\n    return info\n  }\n\n  /**\n   * In opening fence, after info and whitespace, before meta.\n   *\n   * ```markdown\n   * > | ~~~js eval\n   *           ^\n   *   | alert(1)\n   *   | ~~~\n   * ```\n   *\n   * @type {State}\n   */\n  function metaBefore(code) {\n    if (code === null || markdownLineEnding(code)) {\n      return infoBefore(code)\n    }\n    effects.enter('codeFencedFenceMeta')\n    effects.enter('chunkString', {\n      contentType: 'string'\n    })\n    return meta(code)\n  }\n\n  /**\n   * In meta.\n   *\n   * ```markdown\n   * > | ~~~js eval\n   *           ^\n   *   | alert(1)\n   *   | ~~~\n   * ```\n   *\n   * @type {State}\n   */\n  function meta(code) {\n    if (code === null || markdownLineEnding(code)) {\n      effects.exit('chunkString')\n      effects.exit('codeFencedFenceMeta')\n      return infoBefore(code)\n    }\n    if (code === 96 && code === marker) {\n      return nok(code)\n    }\n    effects.consume(code)\n    return meta\n  }\n\n  /**\n   * At eol/eof in code, before a non-lazy closing fence or content.\n   *\n   * ```markdown\n   * > | ~~~js\n   *          ^\n   * > | alert(1)\n   *             ^\n   *   | ~~~\n   * ```\n   *\n   * @type {State}\n   */\n  function atNonLazyBreak(code) {\n    return effects.attempt(closeStart, after, contentBefore)(code)\n  }\n\n  /**\n   * Before code content, not a closing fence, at eol.\n   *\n   * ```markdown\n   *   | ~~~js\n   * > | alert(1)\n   *             ^\n   *   | ~~~\n   * ```\n   *\n   * @type {State}\n   */\n  function contentBefore(code) {\n    effects.enter('lineEnding')\n    effects.consume(code)\n    effects.exit('lineEnding')\n    return contentStart\n  }\n\n  /**\n   * Before code content, not a closing fence.\n   *\n   * ```markdown\n   *   | ~~~js\n   * > | alert(1)\n   *     ^\n   *   | ~~~\n   * ```\n   *\n   * @type {State}\n   */\n  function contentStart(code) {\n    return initialPrefix > 0 && markdownSpace(code)\n      ? factorySpace(\n          effects,\n          beforeContentChunk,\n          'linePrefix',\n          initialPrefix + 1\n        )(code)\n      : beforeContentChunk(code)\n  }\n\n  /**\n   * Before code content, after optional prefix.\n   *\n   * ```markdown\n   *   | ~~~js\n   * > | alert(1)\n   *     ^\n   *   | ~~~\n   * ```\n   *\n   * @type {State}\n   */\n  function beforeContentChunk(code) {\n    if (code === null || markdownLineEnding(code)) {\n      return effects.check(nonLazyContinuation, atNonLazyBreak, after)(code)\n    }\n    effects.enter('codeFlowValue')\n    return contentChunk(code)\n  }\n\n  /**\n   * In code content.\n   *\n   * ```markdown\n   *   | ~~~js\n   * > | alert(1)\n   *     ^^^^^^^^\n   *   | ~~~\n   * ```\n   *\n   * @type {State}\n   */\n  function contentChunk(code) {\n    if (code === null || markdownLineEnding(code)) {\n      effects.exit('codeFlowValue')\n      return beforeContentChunk(code)\n    }\n    effects.consume(code)\n    return contentChunk\n  }\n\n  /**\n   * After code.\n   *\n   * ```markdown\n   *   | ~~~js\n   *   | alert(1)\n   * > | ~~~\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function after(code) {\n    effects.exit('codeFenced')\n    return ok(code)\n  }\n\n  /**\n   * @this {TokenizeContext}\n   * @type {Tokenizer}\n   */\n  function tokenizeCloseStart(effects, ok, nok) {\n    let size = 0\n    return startBefore\n\n    /**\n     *\n     *\n     * @type {State}\n     */\n    function startBefore(code) {\n      effects.enter('lineEnding')\n      effects.consume(code)\n      effects.exit('lineEnding')\n      return start\n    }\n\n    /**\n     * Before closing fence, at optional whitespace.\n     *\n     * ```markdown\n     *   | ~~~js\n     *   | alert(1)\n     * > | ~~~\n     *     ^\n     * ```\n     *\n     * @type {State}\n     */\n    function start(code) {\n      // Always populated by defaults.\n\n      // To do: `enter` here or in next state?\n      effects.enter('codeFencedFence')\n      return markdownSpace(code)\n        ? factorySpace(\n            effects,\n            beforeSequenceClose,\n            'linePrefix',\n            self.parser.constructs.disable.null.includes('codeIndented')\n              ? undefined\n              : 4\n          )(code)\n        : beforeSequenceClose(code)\n    }\n\n    /**\n     * In closing fence, after optional whitespace, at sequence.\n     *\n     * ```markdown\n     *   | ~~~js\n     *   | alert(1)\n     * > | ~~~\n     *     ^\n     * ```\n     *\n     * @type {State}\n     */\n    function beforeSequenceClose(code) {\n      if (code === marker) {\n        effects.enter('codeFencedFenceSequence')\n        return sequenceClose(code)\n      }\n      return nok(code)\n    }\n\n    /**\n     * In closing fence sequence.\n     *\n     * ```markdown\n     *   | ~~~js\n     *   | alert(1)\n     * > | ~~~\n     *     ^\n     * ```\n     *\n     * @type {State}\n     */\n    function sequenceClose(code) {\n      if (code === marker) {\n        size++\n        effects.consume(code)\n        return sequenceClose\n      }\n      if (size >= sizeOpen) {\n        effects.exit('codeFencedFenceSequence')\n        return markdownSpace(code)\n          ? factorySpace(effects, sequenceCloseAfter, 'whitespace')(code)\n          : sequenceCloseAfter(code)\n      }\n      return nok(code)\n    }\n\n    /**\n     * After closing fence sequence, after optional whitespace.\n     *\n     * ```markdown\n     *   | ~~~js\n     *   | alert(1)\n     * > | ~~~\n     *        ^\n     * ```\n     *\n     * @type {State}\n     */\n    function sequenceCloseAfter(code) {\n      if (code === null || markdownLineEnding(code)) {\n        effects.exit('codeFencedFence')\n        return ok(code)\n      }\n      return nok(code)\n    }\n  }\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeNonLazyContinuation(effects, ok, nok) {\n  const self = this\n  return start\n\n  /**\n   *\n   *\n   * @type {State}\n   */\n  function start(code) {\n    if (code === null) {\n      return nok(code)\n    }\n    effects.enter('lineEnding')\n    effects.consume(code)\n    effects.exit('lineEnding')\n    return lineStart\n  }\n\n  /**\n   *\n   *\n   * @type {State}\n   */\n  function lineStart(code) {\n    return self.parser.lazy[self.now().line] ? nok(code) : ok(code)\n  }\n}\n","/// <reference lib=\"dom\" />\n\n/* eslint-env browser */\n\nconst element = document.createElement('i')\n\n/**\n * @param {string} value\n * @returns {string|false}\n */\nexport function decodeNamedCharacterReference(value) {\n  const characterReference = '&' + value + ';'\n  element.innerHTML = characterReference\n  const char = element.textContent\n\n  // Some named character references do not require the closing semicolon\n  // (`&not`, for instance), which leads to situations where parsing the assumed\n  // named reference of `&notit;` will result in the string `¬it;`.\n  // When we encounter a trailing semicolon after parsing, and the character\n  // reference to decode was not a semicolon (`&semi;`), we can assume that the\n  // matching was not complete.\n  // @ts-expect-error: TypeScript is wrong that `textContent` on elements can\n  // yield `null`.\n  if (char.charCodeAt(char.length - 1) === 59 /* `;` */ && value !== 'semi') {\n    return false\n  }\n\n  // If the decoded string is equal to the input, the character reference was\n  // not valid.\n  // @ts-expect-error: TypeScript is wrong that `textContent` on elements can\n  // yield `null`.\n  return char === characterReference ? false : char\n}\n","/**\n * @typedef {import('micromark-util-types').Code} Code\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\nimport {decodeNamedCharacterReference} from 'decode-named-character-reference'\nimport {\n  asciiAlphanumeric,\n  asciiDigit,\n  asciiHexDigit\n} from 'micromark-util-character'\n/** @type {Construct} */\nexport const characterReference = {\n  name: 'characterReference',\n  tokenize: tokenizeCharacterReference\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeCharacterReference(effects, ok, nok) {\n  const self = this\n  let size = 0\n  /** @type {number} */\n  let max\n  /** @type {(code: Code) => boolean} */\n  let test\n  return start\n\n  /**\n   * Start of character reference.\n   *\n   * ```markdown\n   * > | a&amp;b\n   *      ^\n   * > | a&#123;b\n   *      ^\n   * > | a&#x9;b\n   *      ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    effects.enter('characterReference')\n    effects.enter('characterReferenceMarker')\n    effects.consume(code)\n    effects.exit('characterReferenceMarker')\n    return open\n  }\n\n  /**\n   * After `&`, at `#` for numeric references or alphanumeric for named\n   * references.\n   *\n   * ```markdown\n   * > | a&amp;b\n   *       ^\n   * > | a&#123;b\n   *       ^\n   * > | a&#x9;b\n   *       ^\n   * ```\n   *\n   * @type {State}\n   */\n  function open(code) {\n    if (code === 35) {\n      effects.enter('characterReferenceMarkerNumeric')\n      effects.consume(code)\n      effects.exit('characterReferenceMarkerNumeric')\n      return numeric\n    }\n    effects.enter('characterReferenceValue')\n    max = 31\n    test = asciiAlphanumeric\n    return value(code)\n  }\n\n  /**\n   * After `#`, at `x` for hexadecimals or digit for decimals.\n   *\n   * ```markdown\n   * > | a&#123;b\n   *        ^\n   * > | a&#x9;b\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function numeric(code) {\n    if (code === 88 || code === 120) {\n      effects.enter('characterReferenceMarkerHexadecimal')\n      effects.consume(code)\n      effects.exit('characterReferenceMarkerHexadecimal')\n      effects.enter('characterReferenceValue')\n      max = 6\n      test = asciiHexDigit\n      return value\n    }\n    effects.enter('characterReferenceValue')\n    max = 7\n    test = asciiDigit\n    return value(code)\n  }\n\n  /**\n   * After markers (`&#x`, `&#`, or `&`), in value, before `;`.\n   *\n   * The character reference kind defines what and how many characters are\n   * allowed.\n   *\n   * ```markdown\n   * > | a&amp;b\n   *       ^^^\n   * > | a&#123;b\n   *        ^^^\n   * > | a&#x9;b\n   *         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function value(code) {\n    if (code === 59 && size) {\n      const token = effects.exit('characterReferenceValue')\n      if (\n        test === asciiAlphanumeric &&\n        !decodeNamedCharacterReference(self.sliceSerialize(token))\n      ) {\n        return nok(code)\n      }\n\n      // To do: `markdown-rs` uses a different name:\n      // `CharacterReferenceMarkerSemi`.\n      effects.enter('characterReferenceMarker')\n      effects.consume(code)\n      effects.exit('characterReferenceMarker')\n      effects.exit('characterReference')\n      return ok\n    }\n    if (test(code) && size++ < max) {\n      effects.consume(code)\n      return value\n    }\n    return nok(code)\n  }\n}\n","/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\nimport {asciiPunctuation} from 'micromark-util-character'\n/** @type {Construct} */\nexport const characterEscape = {\n  name: 'characterEscape',\n  tokenize: tokenizeCharacterEscape\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeCharacterEscape(effects, ok, nok) {\n  return start\n\n  /**\n   * Start of character escape.\n   *\n   * ```markdown\n   * > | a\\*b\n   *      ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    effects.enter('characterEscape')\n    effects.enter('escapeMarker')\n    effects.consume(code)\n    effects.exit('escapeMarker')\n    return inside\n  }\n\n  /**\n   * After `\\`, at punctuation.\n   *\n   * ```markdown\n   * > | a\\*b\n   *       ^\n   * ```\n   *\n   * @type {State}\n   */\n  function inside(code) {\n    // ASCII punctuation.\n    if (asciiPunctuation(code)) {\n      effects.enter('characterEscapeValue')\n      effects.consume(code)\n      effects.exit('characterEscapeValue')\n      effects.exit('characterEscape')\n      return ok\n    }\n    return nok(code)\n  }\n}\n","/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\nimport {factorySpace} from 'micromark-factory-space'\nimport {markdownLineEnding} from 'micromark-util-character'\n/** @type {Construct} */\nexport const lineEnding = {\n  name: 'lineEnding',\n  tokenize: tokenizeLineEnding\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeLineEnding(effects, ok) {\n  return start\n\n  /** @type {State} */\n  function start(code) {\n    effects.enter('lineEnding')\n    effects.consume(code)\n    effects.exit('lineEnding')\n    return factorySpace(effects, ok, 'linePrefix')\n  }\n}\n","/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').Event} Event\n * @typedef {import('micromark-util-types').Resolver} Resolver\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').Token} Token\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\nimport {factoryDestination} from 'micromark-factory-destination'\nimport {factoryLabel} from 'micromark-factory-label'\nimport {factoryTitle} from 'micromark-factory-title'\nimport {factoryWhitespace} from 'micromark-factory-whitespace'\nimport {markdownLineEndingOrSpace} from 'micromark-util-character'\nimport {push, splice} from 'micromark-util-chunked'\nimport {normalizeIdentifier} from 'micromark-util-normalize-identifier'\nimport {resolveAll} from 'micromark-util-resolve-all'\n/** @type {Construct} */\nexport const labelEnd = {\n  name: 'labelEnd',\n  tokenize: tokenizeLabelEnd,\n  resolveTo: resolveToLabelEnd,\n  resolveAll: resolveAllLabelEnd\n}\n\n/** @type {Construct} */\nconst resourceConstruct = {\n  tokenize: tokenizeResource\n}\n/** @type {Construct} */\nconst referenceFullConstruct = {\n  tokenize: tokenizeReferenceFull\n}\n/** @type {Construct} */\nconst referenceCollapsedConstruct = {\n  tokenize: tokenizeReferenceCollapsed\n}\n\n/** @type {Resolver} */\nfunction resolveAllLabelEnd(events) {\n  let index = -1\n  while (++index < events.length) {\n    const token = events[index][1]\n    if (\n      token.type === 'labelImage' ||\n      token.type === 'labelLink' ||\n      token.type === 'labelEnd'\n    ) {\n      // Remove the marker.\n      events.splice(index + 1, token.type === 'labelImage' ? 4 : 2)\n      token.type = 'data'\n      index++\n    }\n  }\n  return events\n}\n\n/** @type {Resolver} */\nfunction resolveToLabelEnd(events, context) {\n  let index = events.length\n  let offset = 0\n  /** @type {Token} */\n  let token\n  /** @type {number | undefined} */\n  let open\n  /** @type {number | undefined} */\n  let close\n  /** @type {Array<Event>} */\n  let media\n\n  // Find an opening.\n  while (index--) {\n    token = events[index][1]\n    if (open) {\n      // If we see another link, or inactive link label, we’ve been here before.\n      if (\n        token.type === 'link' ||\n        (token.type === 'labelLink' && token._inactive)\n      ) {\n        break\n      }\n\n      // Mark other link openings as inactive, as we can’t have links in\n      // links.\n      if (events[index][0] === 'enter' && token.type === 'labelLink') {\n        token._inactive = true\n      }\n    } else if (close) {\n      if (\n        events[index][0] === 'enter' &&\n        (token.type === 'labelImage' || token.type === 'labelLink') &&\n        !token._balanced\n      ) {\n        open = index\n        if (token.type !== 'labelLink') {\n          offset = 2\n          break\n        }\n      }\n    } else if (token.type === 'labelEnd') {\n      close = index\n    }\n  }\n  const group = {\n    type: events[open][1].type === 'labelLink' ? 'link' : 'image',\n    start: Object.assign({}, events[open][1].start),\n    end: Object.assign({}, events[events.length - 1][1].end)\n  }\n  const label = {\n    type: 'label',\n    start: Object.assign({}, events[open][1].start),\n    end: Object.assign({}, events[close][1].end)\n  }\n  const text = {\n    type: 'labelText',\n    start: Object.assign({}, events[open + offset + 2][1].end),\n    end: Object.assign({}, events[close - 2][1].start)\n  }\n  media = [\n    ['enter', group, context],\n    ['enter', label, context]\n  ]\n\n  // Opening marker.\n  media = push(media, events.slice(open + 1, open + offset + 3))\n\n  // Text open.\n  media = push(media, [['enter', text, context]])\n\n  // Always populated by defaults.\n\n  // Between.\n  media = push(\n    media,\n    resolveAll(\n      context.parser.constructs.insideSpan.null,\n      events.slice(open + offset + 4, close - 3),\n      context\n    )\n  )\n\n  // Text close, marker close, label close.\n  media = push(media, [\n    ['exit', text, context],\n    events[close - 2],\n    events[close - 1],\n    ['exit', label, context]\n  ])\n\n  // Reference, resource, or so.\n  media = push(media, events.slice(close + 1))\n\n  // Media close.\n  media = push(media, [['exit', group, context]])\n  splice(events, open, events.length, media)\n  return events\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeLabelEnd(effects, ok, nok) {\n  const self = this\n  let index = self.events.length\n  /** @type {Token} */\n  let labelStart\n  /** @type {boolean} */\n  let defined\n\n  // Find an opening.\n  while (index--) {\n    if (\n      (self.events[index][1].type === 'labelImage' ||\n        self.events[index][1].type === 'labelLink') &&\n      !self.events[index][1]._balanced\n    ) {\n      labelStart = self.events[index][1]\n      break\n    }\n  }\n  return start\n\n  /**\n   * Start of label end.\n   *\n   * ```markdown\n   * > | [a](b) c\n   *       ^\n   * > | [a][b] c\n   *       ^\n   * > | [a][] b\n   *       ^\n   * > | [a] b\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    // If there is not an okay opening.\n    if (!labelStart) {\n      return nok(code)\n    }\n\n    // If the corresponding label (link) start is marked as inactive,\n    // it means we’d be wrapping a link, like this:\n    //\n    // ```markdown\n    // > | a [b [c](d) e](f) g.\n    //                  ^\n    // ```\n    //\n    // We can’t have that, so it’s just balanced brackets.\n    if (labelStart._inactive) {\n      return labelEndNok(code)\n    }\n    defined = self.parser.defined.includes(\n      normalizeIdentifier(\n        self.sliceSerialize({\n          start: labelStart.end,\n          end: self.now()\n        })\n      )\n    )\n    effects.enter('labelEnd')\n    effects.enter('labelMarker')\n    effects.consume(code)\n    effects.exit('labelMarker')\n    effects.exit('labelEnd')\n    return after\n  }\n\n  /**\n   * After `]`.\n   *\n   * ```markdown\n   * > | [a](b) c\n   *       ^\n   * > | [a][b] c\n   *       ^\n   * > | [a][] b\n   *       ^\n   * > | [a] b\n   *       ^\n   * ```\n   *\n   * @type {State}\n   */\n  function after(code) {\n    // Note: `markdown-rs` also parses GFM footnotes here, which for us is in\n    // an extension.\n\n    // Resource (`[asd](fgh)`)?\n    if (code === 40) {\n      return effects.attempt(\n        resourceConstruct,\n        labelEndOk,\n        defined ? labelEndOk : labelEndNok\n      )(code)\n    }\n\n    // Full (`[asd][fgh]`) or collapsed (`[asd][]`) reference?\n    if (code === 91) {\n      return effects.attempt(\n        referenceFullConstruct,\n        labelEndOk,\n        defined ? referenceNotFull : labelEndNok\n      )(code)\n    }\n\n    // Shortcut (`[asd]`) reference?\n    return defined ? labelEndOk(code) : labelEndNok(code)\n  }\n\n  /**\n   * After `]`, at `[`, but not at a full reference.\n   *\n   * > 👉 **Note**: we only get here if the label is defined.\n   *\n   * ```markdown\n   * > | [a][] b\n   *        ^\n   * > | [a] b\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function referenceNotFull(code) {\n    return effects.attempt(\n      referenceCollapsedConstruct,\n      labelEndOk,\n      labelEndNok\n    )(code)\n  }\n\n  /**\n   * Done, we found something.\n   *\n   * ```markdown\n   * > | [a](b) c\n   *           ^\n   * > | [a][b] c\n   *           ^\n   * > | [a][] b\n   *          ^\n   * > | [a] b\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function labelEndOk(code) {\n    // Note: `markdown-rs` does a bunch of stuff here.\n    return ok(code)\n  }\n\n  /**\n   * Done, it’s nothing.\n   *\n   * There was an okay opening, but we didn’t match anything.\n   *\n   * ```markdown\n   * > | [a](b c\n   *        ^\n   * > | [a][b c\n   *        ^\n   * > | [a] b\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function labelEndNok(code) {\n    labelStart._balanced = true\n    return nok(code)\n  }\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeResource(effects, ok, nok) {\n  return resourceStart\n\n  /**\n   * At a resource.\n   *\n   * ```markdown\n   * > | [a](b) c\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function resourceStart(code) {\n    effects.enter('resource')\n    effects.enter('resourceMarker')\n    effects.consume(code)\n    effects.exit('resourceMarker')\n    return resourceBefore\n  }\n\n  /**\n   * In resource, after `(`, at optional whitespace.\n   *\n   * ```markdown\n   * > | [a](b) c\n   *         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function resourceBefore(code) {\n    return markdownLineEndingOrSpace(code)\n      ? factoryWhitespace(effects, resourceOpen)(code)\n      : resourceOpen(code)\n  }\n\n  /**\n   * In resource, after optional whitespace, at `)` or a destination.\n   *\n   * ```markdown\n   * > | [a](b) c\n   *         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function resourceOpen(code) {\n    if (code === 41) {\n      return resourceEnd(code)\n    }\n    return factoryDestination(\n      effects,\n      resourceDestinationAfter,\n      resourceDestinationMissing,\n      'resourceDestination',\n      'resourceDestinationLiteral',\n      'resourceDestinationLiteralMarker',\n      'resourceDestinationRaw',\n      'resourceDestinationString',\n      32\n    )(code)\n  }\n\n  /**\n   * In resource, after destination, at optional whitespace.\n   *\n   * ```markdown\n   * > | [a](b) c\n   *          ^\n   * ```\n   *\n   * @type {State}\n   */\n  function resourceDestinationAfter(code) {\n    return markdownLineEndingOrSpace(code)\n      ? factoryWhitespace(effects, resourceBetween)(code)\n      : resourceEnd(code)\n  }\n\n  /**\n   * At invalid destination.\n   *\n   * ```markdown\n   * > | [a](<<) b\n   *         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function resourceDestinationMissing(code) {\n    return nok(code)\n  }\n\n  /**\n   * In resource, after destination and whitespace, at `(` or title.\n   *\n   * ```markdown\n   * > | [a](b ) c\n   *           ^\n   * ```\n   *\n   * @type {State}\n   */\n  function resourceBetween(code) {\n    if (code === 34 || code === 39 || code === 40) {\n      return factoryTitle(\n        effects,\n        resourceTitleAfter,\n        nok,\n        'resourceTitle',\n        'resourceTitleMarker',\n        'resourceTitleString'\n      )(code)\n    }\n    return resourceEnd(code)\n  }\n\n  /**\n   * In resource, after title, at optional whitespace.\n   *\n   * ```markdown\n   * > | [a](b \"c\") d\n   *              ^\n   * ```\n   *\n   * @type {State}\n   */\n  function resourceTitleAfter(code) {\n    return markdownLineEndingOrSpace(code)\n      ? factoryWhitespace(effects, resourceEnd)(code)\n      : resourceEnd(code)\n  }\n\n  /**\n   * In resource, at `)`.\n   *\n   * ```markdown\n   * > | [a](b) d\n   *          ^\n   * ```\n   *\n   * @type {State}\n   */\n  function resourceEnd(code) {\n    if (code === 41) {\n      effects.enter('resourceMarker')\n      effects.consume(code)\n      effects.exit('resourceMarker')\n      effects.exit('resource')\n      return ok\n    }\n    return nok(code)\n  }\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeReferenceFull(effects, ok, nok) {\n  const self = this\n  return referenceFull\n\n  /**\n   * In a reference (full), at the `[`.\n   *\n   * ```markdown\n   * > | [a][b] d\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function referenceFull(code) {\n    return factoryLabel.call(\n      self,\n      effects,\n      referenceFullAfter,\n      referenceFullMissing,\n      'reference',\n      'referenceMarker',\n      'referenceString'\n    )(code)\n  }\n\n  /**\n   * In a reference (full), after `]`.\n   *\n   * ```markdown\n   * > | [a][b] d\n   *          ^\n   * ```\n   *\n   * @type {State}\n   */\n  function referenceFullAfter(code) {\n    return self.parser.defined.includes(\n      normalizeIdentifier(\n        self.sliceSerialize(self.events[self.events.length - 1][1]).slice(1, -1)\n      )\n    )\n      ? ok(code)\n      : nok(code)\n  }\n\n  /**\n   * In reference (full) that was missing.\n   *\n   * ```markdown\n   * > | [a][b d\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function referenceFullMissing(code) {\n    return nok(code)\n  }\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeReferenceCollapsed(effects, ok, nok) {\n  return referenceCollapsedStart\n\n  /**\n   * In reference (collapsed), at `[`.\n   *\n   * > 👉 **Note**: we only get here if the label is defined.\n   *\n   * ```markdown\n   * > | [a][] d\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function referenceCollapsedStart(code) {\n    // We only attempt a collapsed label if there’s a `[`.\n\n    effects.enter('reference')\n    effects.enter('referenceMarker')\n    effects.consume(code)\n    effects.exit('referenceMarker')\n    return referenceCollapsedOpen\n  }\n\n  /**\n   * In reference (collapsed), at `]`.\n   *\n   * > 👉 **Note**: we only get here if the label is defined.\n   *\n   * ```markdown\n   * > | [a][] d\n   *         ^\n   * ```\n   *\n   *  @type {State}\n   */\n  function referenceCollapsedOpen(code) {\n    if (code === 93) {\n      effects.enter('referenceMarker')\n      effects.consume(code)\n      effects.exit('referenceMarker')\n      effects.exit('reference')\n      return ok\n    }\n    return nok(code)\n  }\n}\n","/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\nimport {labelEnd} from './label-end.js'\n\n/** @type {Construct} */\nexport const labelStartImage = {\n  name: 'labelStartImage',\n  tokenize: tokenizeLabelStartImage,\n  resolveAll: labelEnd.resolveAll\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeLabelStartImage(effects, ok, nok) {\n  const self = this\n  return start\n\n  /**\n   * Start of label (image) start.\n   *\n   * ```markdown\n   * > | a ![b] c\n   *       ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    effects.enter('labelImage')\n    effects.enter('labelImageMarker')\n    effects.consume(code)\n    effects.exit('labelImageMarker')\n    return open\n  }\n\n  /**\n   * After `!`, at `[`.\n   *\n   * ```markdown\n   * > | a ![b] c\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function open(code) {\n    if (code === 91) {\n      effects.enter('labelMarker')\n      effects.consume(code)\n      effects.exit('labelMarker')\n      effects.exit('labelImage')\n      return after\n    }\n    return nok(code)\n  }\n\n  /**\n   * After `![`.\n   *\n   * ```markdown\n   * > | a ![b] c\n   *         ^\n   * ```\n   *\n   * This is needed in because, when GFM footnotes are enabled, images never\n   * form when started with a `^`.\n   * Instead, links form:\n   *\n   * ```markdown\n   * ![^a](b)\n   *\n   * ![^a][b]\n   *\n   * [b]: c\n   * ```\n   *\n   * ```html\n   * <p>!<a href=\\\"b\\\">^a</a></p>\n   * <p>!<a href=\\\"c\\\">^a</a></p>\n   * ```\n   *\n   * @type {State}\n   */\n  function after(code) {\n    // To do: use a new field to do this, this is still needed for\n    // `micromark-extension-gfm-footnote`, but the `label-start-link`\n    // behavior isn’t.\n    // Hidden footnotes hook.\n    /* c8 ignore next 3 */\n    return code === 94 && '_hiddenFootnoteSupport' in self.parser.constructs\n      ? nok(code)\n      : ok(code)\n  }\n}\n","/**\n * @typedef {import('micromark-util-types').Code} Code\n */\n\nimport {\n  markdownLineEndingOrSpace,\n  unicodePunctuation,\n  unicodeWhitespace\n} from 'micromark-util-character'\n/**\n * Classify whether a code represents whitespace, punctuation, or something\n * else.\n *\n * Used for attention (emphasis, strong), whose sequences can open or close\n * based on the class of surrounding characters.\n *\n * > 👉 **Note**: eof (`null`) is seen as whitespace.\n *\n * @param {Code} code\n *   Code.\n * @returns {typeof constants.characterGroupWhitespace | typeof constants.characterGroupPunctuation | undefined}\n *   Group.\n */\nexport function classifyCharacter(code) {\n  if (\n    code === null ||\n    markdownLineEndingOrSpace(code) ||\n    unicodeWhitespace(code)\n  ) {\n    return 1\n  }\n  if (unicodePunctuation(code)) {\n    return 2\n  }\n}\n","/**\n * @typedef {import('micromark-util-types').Code} Code\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').Event} Event\n * @typedef {import('micromark-util-types').Point} Point\n * @typedef {import('micromark-util-types').Resolver} Resolver\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').Token} Token\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\nimport {push, splice} from 'micromark-util-chunked'\nimport {classifyCharacter} from 'micromark-util-classify-character'\nimport {resolveAll} from 'micromark-util-resolve-all'\n/** @type {Construct} */\nexport const attention = {\n  name: 'attention',\n  tokenize: tokenizeAttention,\n  resolveAll: resolveAllAttention\n}\n\n/**\n * Take all events and resolve attention to emphasis or strong.\n *\n * @type {Resolver}\n */\nfunction resolveAllAttention(events, context) {\n  let index = -1\n  /** @type {number} */\n  let open\n  /** @type {Token} */\n  let group\n  /** @type {Token} */\n  let text\n  /** @type {Token} */\n  let openingSequence\n  /** @type {Token} */\n  let closingSequence\n  /** @type {number} */\n  let use\n  /** @type {Array<Event>} */\n  let nextEvents\n  /** @type {number} */\n  let offset\n\n  // Walk through all events.\n  //\n  // Note: performance of this is fine on an mb of normal markdown, but it’s\n  // a bottleneck for malicious stuff.\n  while (++index < events.length) {\n    // Find a token that can close.\n    if (\n      events[index][0] === 'enter' &&\n      events[index][1].type === 'attentionSequence' &&\n      events[index][1]._close\n    ) {\n      open = index\n\n      // Now walk back to find an opener.\n      while (open--) {\n        // Find a token that can open the closer.\n        if (\n          events[open][0] === 'exit' &&\n          events[open][1].type === 'attentionSequence' &&\n          events[open][1]._open &&\n          // If the markers are the same:\n          context.sliceSerialize(events[open][1]).charCodeAt(0) ===\n            context.sliceSerialize(events[index][1]).charCodeAt(0)\n        ) {\n          // If the opening can close or the closing can open,\n          // and the close size *is not* a multiple of three,\n          // but the sum of the opening and closing size *is* multiple of three,\n          // then don’t match.\n          if (\n            (events[open][1]._close || events[index][1]._open) &&\n            (events[index][1].end.offset - events[index][1].start.offset) % 3 &&\n            !(\n              (events[open][1].end.offset -\n                events[open][1].start.offset +\n                events[index][1].end.offset -\n                events[index][1].start.offset) %\n              3\n            )\n          ) {\n            continue\n          }\n\n          // Number of markers to use from the sequence.\n          use =\n            events[open][1].end.offset - events[open][1].start.offset > 1 &&\n            events[index][1].end.offset - events[index][1].start.offset > 1\n              ? 2\n              : 1\n          const start = Object.assign({}, events[open][1].end)\n          const end = Object.assign({}, events[index][1].start)\n          movePoint(start, -use)\n          movePoint(end, use)\n          openingSequence = {\n            type: use > 1 ? 'strongSequence' : 'emphasisSequence',\n            start,\n            end: Object.assign({}, events[open][1].end)\n          }\n          closingSequence = {\n            type: use > 1 ? 'strongSequence' : 'emphasisSequence',\n            start: Object.assign({}, events[index][1].start),\n            end\n          }\n          text = {\n            type: use > 1 ? 'strongText' : 'emphasisText',\n            start: Object.assign({}, events[open][1].end),\n            end: Object.assign({}, events[index][1].start)\n          }\n          group = {\n            type: use > 1 ? 'strong' : 'emphasis',\n            start: Object.assign({}, openingSequence.start),\n            end: Object.assign({}, closingSequence.end)\n          }\n          events[open][1].end = Object.assign({}, openingSequence.start)\n          events[index][1].start = Object.assign({}, closingSequence.end)\n          nextEvents = []\n\n          // If there are more markers in the opening, add them before.\n          if (events[open][1].end.offset - events[open][1].start.offset) {\n            nextEvents = push(nextEvents, [\n              ['enter', events[open][1], context],\n              ['exit', events[open][1], context]\n            ])\n          }\n\n          // Opening.\n          nextEvents = push(nextEvents, [\n            ['enter', group, context],\n            ['enter', openingSequence, context],\n            ['exit', openingSequence, context],\n            ['enter', text, context]\n          ])\n\n          // Always populated by defaults.\n\n          // Between.\n          nextEvents = push(\n            nextEvents,\n            resolveAll(\n              context.parser.constructs.insideSpan.null,\n              events.slice(open + 1, index),\n              context\n            )\n          )\n\n          // Closing.\n          nextEvents = push(nextEvents, [\n            ['exit', text, context],\n            ['enter', closingSequence, context],\n            ['exit', closingSequence, context],\n            ['exit', group, context]\n          ])\n\n          // If there are more markers in the closing, add them after.\n          if (events[index][1].end.offset - events[index][1].start.offset) {\n            offset = 2\n            nextEvents = push(nextEvents, [\n              ['enter', events[index][1], context],\n              ['exit', events[index][1], context]\n            ])\n          } else {\n            offset = 0\n          }\n          splice(events, open - 1, index - open + 3, nextEvents)\n          index = open + nextEvents.length - offset - 2\n          break\n        }\n      }\n    }\n  }\n\n  // Remove remaining sequences.\n  index = -1\n  while (++index < events.length) {\n    if (events[index][1].type === 'attentionSequence') {\n      events[index][1].type = 'data'\n    }\n  }\n  return events\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeAttention(effects, ok) {\n  const attentionMarkers = this.parser.constructs.attentionMarkers.null\n  const previous = this.previous\n  const before = classifyCharacter(previous)\n\n  /** @type {NonNullable<Code>} */\n  let marker\n  return start\n\n  /**\n   * Before a sequence.\n   *\n   * ```markdown\n   * > | **\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    marker = code\n    effects.enter('attentionSequence')\n    return inside(code)\n  }\n\n  /**\n   * In a sequence.\n   *\n   * ```markdown\n   * > | **\n   *     ^^\n   * ```\n   *\n   * @type {State}\n   */\n  function inside(code) {\n    if (code === marker) {\n      effects.consume(code)\n      return inside\n    }\n    const token = effects.exit('attentionSequence')\n\n    // To do: next major: move this to resolver, just like `markdown-rs`.\n    const after = classifyCharacter(code)\n\n    // Always populated by defaults.\n\n    const open =\n      !after || (after === 2 && before) || attentionMarkers.includes(code)\n    const close =\n      !before || (before === 2 && after) || attentionMarkers.includes(previous)\n    token._open = Boolean(marker === 42 ? open : open && (before || !close))\n    token._close = Boolean(marker === 42 ? close : close && (after || !open))\n    return ok(code)\n  }\n}\n\n/**\n * Move a point a bit.\n *\n * Note: `move` only works inside lines! It’s not possible to move past other\n * chunks (replacement characters, tabs, or line endings).\n *\n * @param {Point} point\n * @param {number} offset\n * @returns {void}\n */\nfunction movePoint(point, offset) {\n  point.column += offset\n  point.offset += offset\n  point._bufferIndex += offset\n}\n","/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\nimport {\n  asciiAlpha,\n  asciiAlphanumeric,\n  asciiAtext,\n  asciiControl\n} from 'micromark-util-character'\n/** @type {Construct} */\nexport const autolink = {\n  name: 'autolink',\n  tokenize: tokenizeAutolink\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeAutolink(effects, ok, nok) {\n  let size = 0\n  return start\n\n  /**\n   * Start of an autolink.\n   *\n   * ```markdown\n   * > | a<https://example.com>b\n   *      ^\n   * > | a<user@example.com>b\n   *      ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    effects.enter('autolink')\n    effects.enter('autolinkMarker')\n    effects.consume(code)\n    effects.exit('autolinkMarker')\n    effects.enter('autolinkProtocol')\n    return open\n  }\n\n  /**\n   * After `<`, at protocol or atext.\n   *\n   * ```markdown\n   * > | a<https://example.com>b\n   *       ^\n   * > | a<user@example.com>b\n   *       ^\n   * ```\n   *\n   * @type {State}\n   */\n  function open(code) {\n    if (asciiAlpha(code)) {\n      effects.consume(code)\n      return schemeOrEmailAtext\n    }\n    return emailAtext(code)\n  }\n\n  /**\n   * At second byte of protocol or atext.\n   *\n   * ```markdown\n   * > | a<https://example.com>b\n   *        ^\n   * > | a<user@example.com>b\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function schemeOrEmailAtext(code) {\n    // ASCII alphanumeric and `+`, `-`, and `.`.\n    if (code === 43 || code === 45 || code === 46 || asciiAlphanumeric(code)) {\n      // Count the previous alphabetical from `open` too.\n      size = 1\n      return schemeInsideOrEmailAtext(code)\n    }\n    return emailAtext(code)\n  }\n\n  /**\n   * In ambiguous protocol or atext.\n   *\n   * ```markdown\n   * > | a<https://example.com>b\n   *        ^\n   * > | a<user@example.com>b\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function schemeInsideOrEmailAtext(code) {\n    if (code === 58) {\n      effects.consume(code)\n      size = 0\n      return urlInside\n    }\n\n    // ASCII alphanumeric and `+`, `-`, and `.`.\n    if (\n      (code === 43 || code === 45 || code === 46 || asciiAlphanumeric(code)) &&\n      size++ < 32\n    ) {\n      effects.consume(code)\n      return schemeInsideOrEmailAtext\n    }\n    size = 0\n    return emailAtext(code)\n  }\n\n  /**\n   * After protocol, in URL.\n   *\n   * ```markdown\n   * > | a<https://example.com>b\n   *             ^\n   * ```\n   *\n   * @type {State}\n   */\n  function urlInside(code) {\n    if (code === 62) {\n      effects.exit('autolinkProtocol')\n      effects.enter('autolinkMarker')\n      effects.consume(code)\n      effects.exit('autolinkMarker')\n      effects.exit('autolink')\n      return ok\n    }\n\n    // ASCII control, space, or `<`.\n    if (code === null || code === 32 || code === 60 || asciiControl(code)) {\n      return nok(code)\n    }\n    effects.consume(code)\n    return urlInside\n  }\n\n  /**\n   * In email atext.\n   *\n   * ```markdown\n   * > | a<user.name@example.com>b\n   *              ^\n   * ```\n   *\n   * @type {State}\n   */\n  function emailAtext(code) {\n    if (code === 64) {\n      effects.consume(code)\n      return emailAtSignOrDot\n    }\n    if (asciiAtext(code)) {\n      effects.consume(code)\n      return emailAtext\n    }\n    return nok(code)\n  }\n\n  /**\n   * In label, after at-sign or dot.\n   *\n   * ```markdown\n   * > | a<user.name@example.com>b\n   *                 ^       ^\n   * ```\n   *\n   * @type {State}\n   */\n  function emailAtSignOrDot(code) {\n    return asciiAlphanumeric(code) ? emailLabel(code) : nok(code)\n  }\n\n  /**\n   * In label, where `.` and `>` are allowed.\n   *\n   * ```markdown\n   * > | a<user.name@example.com>b\n   *                   ^\n   * ```\n   *\n   * @type {State}\n   */\n  function emailLabel(code) {\n    if (code === 46) {\n      effects.consume(code)\n      size = 0\n      return emailAtSignOrDot\n    }\n    if (code === 62) {\n      // Exit, then change the token type.\n      effects.exit('autolinkProtocol').type = 'autolinkEmail'\n      effects.enter('autolinkMarker')\n      effects.consume(code)\n      effects.exit('autolinkMarker')\n      effects.exit('autolink')\n      return ok\n    }\n    return emailValue(code)\n  }\n\n  /**\n   * In label, where `.` and `>` are *not* allowed.\n   *\n   * Though, this is also used in `emailLabel` to parse other values.\n   *\n   * ```markdown\n   * > | a<user.name@ex-ample.com>b\n   *                    ^\n   * ```\n   *\n   * @type {State}\n   */\n  function emailValue(code) {\n    // ASCII alphanumeric or `-`.\n    if ((code === 45 || asciiAlphanumeric(code)) && size++ < 63) {\n      const next = code === 45 ? emailValue : emailLabel\n      effects.consume(code)\n      return next\n    }\n    return nok(code)\n  }\n}\n","/**\n * @typedef {import('micromark-util-types').Code} Code\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\nimport {factorySpace} from 'micromark-factory-space'\nimport {\n  asciiAlpha,\n  asciiAlphanumeric,\n  markdownLineEnding,\n  markdownLineEndingOrSpace,\n  markdownSpace\n} from 'micromark-util-character'\n/** @type {Construct} */\nexport const htmlText = {\n  name: 'htmlText',\n  tokenize: tokenizeHtmlText\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeHtmlText(effects, ok, nok) {\n  const self = this\n  /** @type {NonNullable<Code> | undefined} */\n  let marker\n  /** @type {number} */\n  let index\n  /** @type {State} */\n  let returnState\n  return start\n\n  /**\n   * Start of HTML (text).\n   *\n   * ```markdown\n   * > | a <b> c\n   *       ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    effects.enter('htmlText')\n    effects.enter('htmlTextData')\n    effects.consume(code)\n    return open\n  }\n\n  /**\n   * After `<`, at tag name or other stuff.\n   *\n   * ```markdown\n   * > | a <b> c\n   *        ^\n   * > | a <!doctype> c\n   *        ^\n   * > | a <!--b--> c\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function open(code) {\n    if (code === 33) {\n      effects.consume(code)\n      return declarationOpen\n    }\n    if (code === 47) {\n      effects.consume(code)\n      return tagCloseStart\n    }\n    if (code === 63) {\n      effects.consume(code)\n      return instruction\n    }\n\n    // ASCII alphabetical.\n    if (asciiAlpha(code)) {\n      effects.consume(code)\n      return tagOpen\n    }\n    return nok(code)\n  }\n\n  /**\n   * After `<!`, at declaration, comment, or CDATA.\n   *\n   * ```markdown\n   * > | a <!doctype> c\n   *         ^\n   * > | a <!--b--> c\n   *         ^\n   * > | a <![CDATA[>&<]]> c\n   *         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function declarationOpen(code) {\n    if (code === 45) {\n      effects.consume(code)\n      return commentOpenInside\n    }\n    if (code === 91) {\n      effects.consume(code)\n      index = 0\n      return cdataOpenInside\n    }\n    if (asciiAlpha(code)) {\n      effects.consume(code)\n      return declaration\n    }\n    return nok(code)\n  }\n\n  /**\n   * In a comment, after `<!-`, at another `-`.\n   *\n   * ```markdown\n   * > | a <!--b--> c\n   *          ^\n   * ```\n   *\n   * @type {State}\n   */\n  function commentOpenInside(code) {\n    if (code === 45) {\n      effects.consume(code)\n      return commentEnd\n    }\n    return nok(code)\n  }\n\n  /**\n   * In comment.\n   *\n   * ```markdown\n   * > | a <!--b--> c\n   *           ^\n   * ```\n   *\n   * @type {State}\n   */\n  function comment(code) {\n    if (code === null) {\n      return nok(code)\n    }\n    if (code === 45) {\n      effects.consume(code)\n      return commentClose\n    }\n    if (markdownLineEnding(code)) {\n      returnState = comment\n      return lineEndingBefore(code)\n    }\n    effects.consume(code)\n    return comment\n  }\n\n  /**\n   * In comment, after `-`.\n   *\n   * ```markdown\n   * > | a <!--b--> c\n   *             ^\n   * ```\n   *\n   * @type {State}\n   */\n  function commentClose(code) {\n    if (code === 45) {\n      effects.consume(code)\n      return commentEnd\n    }\n    return comment(code)\n  }\n\n  /**\n   * In comment, after `--`.\n   *\n   * ```markdown\n   * > | a <!--b--> c\n   *              ^\n   * ```\n   *\n   * @type {State}\n   */\n  function commentEnd(code) {\n    return code === 62\n      ? end(code)\n      : code === 45\n      ? commentClose(code)\n      : comment(code)\n  }\n\n  /**\n   * After `<![`, in CDATA, expecting `CDATA[`.\n   *\n   * ```markdown\n   * > | a <![CDATA[>&<]]> b\n   *          ^^^^^^\n   * ```\n   *\n   * @type {State}\n   */\n  function cdataOpenInside(code) {\n    const value = 'CDATA['\n    if (code === value.charCodeAt(index++)) {\n      effects.consume(code)\n      return index === value.length ? cdata : cdataOpenInside\n    }\n    return nok(code)\n  }\n\n  /**\n   * In CDATA.\n   *\n   * ```markdown\n   * > | a <![CDATA[>&<]]> b\n   *                ^^^\n   * ```\n   *\n   * @type {State}\n   */\n  function cdata(code) {\n    if (code === null) {\n      return nok(code)\n    }\n    if (code === 93) {\n      effects.consume(code)\n      return cdataClose\n    }\n    if (markdownLineEnding(code)) {\n      returnState = cdata\n      return lineEndingBefore(code)\n    }\n    effects.consume(code)\n    return cdata\n  }\n\n  /**\n   * In CDATA, after `]`, at another `]`.\n   *\n   * ```markdown\n   * > | a <![CDATA[>&<]]> b\n   *                    ^\n   * ```\n   *\n   * @type {State}\n   */\n  function cdataClose(code) {\n    if (code === 93) {\n      effects.consume(code)\n      return cdataEnd\n    }\n    return cdata(code)\n  }\n\n  /**\n   * In CDATA, after `]]`, at `>`.\n   *\n   * ```markdown\n   * > | a <![CDATA[>&<]]> b\n   *                     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function cdataEnd(code) {\n    if (code === 62) {\n      return end(code)\n    }\n    if (code === 93) {\n      effects.consume(code)\n      return cdataEnd\n    }\n    return cdata(code)\n  }\n\n  /**\n   * In declaration.\n   *\n   * ```markdown\n   * > | a <!b> c\n   *          ^\n   * ```\n   *\n   * @type {State}\n   */\n  function declaration(code) {\n    if (code === null || code === 62) {\n      return end(code)\n    }\n    if (markdownLineEnding(code)) {\n      returnState = declaration\n      return lineEndingBefore(code)\n    }\n    effects.consume(code)\n    return declaration\n  }\n\n  /**\n   * In instruction.\n   *\n   * ```markdown\n   * > | a <?b?> c\n   *         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function instruction(code) {\n    if (code === null) {\n      return nok(code)\n    }\n    if (code === 63) {\n      effects.consume(code)\n      return instructionClose\n    }\n    if (markdownLineEnding(code)) {\n      returnState = instruction\n      return lineEndingBefore(code)\n    }\n    effects.consume(code)\n    return instruction\n  }\n\n  /**\n   * In instruction, after `?`, at `>`.\n   *\n   * ```markdown\n   * > | a <?b?> c\n   *           ^\n   * ```\n   *\n   * @type {State}\n   */\n  function instructionClose(code) {\n    return code === 62 ? end(code) : instruction(code)\n  }\n\n  /**\n   * After `</`, in closing tag, at tag name.\n   *\n   * ```markdown\n   * > | a </b> c\n   *         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function tagCloseStart(code) {\n    // ASCII alphabetical.\n    if (asciiAlpha(code)) {\n      effects.consume(code)\n      return tagClose\n    }\n    return nok(code)\n  }\n\n  /**\n   * After `</x`, in a tag name.\n   *\n   * ```markdown\n   * > | a </b> c\n   *          ^\n   * ```\n   *\n   * @type {State}\n   */\n  function tagClose(code) {\n    // ASCII alphanumerical and `-`.\n    if (code === 45 || asciiAlphanumeric(code)) {\n      effects.consume(code)\n      return tagClose\n    }\n    return tagCloseBetween(code)\n  }\n\n  /**\n   * In closing tag, after tag name.\n   *\n   * ```markdown\n   * > | a </b> c\n   *          ^\n   * ```\n   *\n   * @type {State}\n   */\n  function tagCloseBetween(code) {\n    if (markdownLineEnding(code)) {\n      returnState = tagCloseBetween\n      return lineEndingBefore(code)\n    }\n    if (markdownSpace(code)) {\n      effects.consume(code)\n      return tagCloseBetween\n    }\n    return end(code)\n  }\n\n  /**\n   * After `<x`, in opening tag name.\n   *\n   * ```markdown\n   * > | a <b> c\n   *         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function tagOpen(code) {\n    // ASCII alphanumerical and `-`.\n    if (code === 45 || asciiAlphanumeric(code)) {\n      effects.consume(code)\n      return tagOpen\n    }\n    if (code === 47 || code === 62 || markdownLineEndingOrSpace(code)) {\n      return tagOpenBetween(code)\n    }\n    return nok(code)\n  }\n\n  /**\n   * In opening tag, after tag name.\n   *\n   * ```markdown\n   * > | a <b> c\n   *         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function tagOpenBetween(code) {\n    if (code === 47) {\n      effects.consume(code)\n      return end\n    }\n\n    // ASCII alphabetical and `:` and `_`.\n    if (code === 58 || code === 95 || asciiAlpha(code)) {\n      effects.consume(code)\n      return tagOpenAttributeName\n    }\n    if (markdownLineEnding(code)) {\n      returnState = tagOpenBetween\n      return lineEndingBefore(code)\n    }\n    if (markdownSpace(code)) {\n      effects.consume(code)\n      return tagOpenBetween\n    }\n    return end(code)\n  }\n\n  /**\n   * In attribute name.\n   *\n   * ```markdown\n   * > | a <b c> d\n   *          ^\n   * ```\n   *\n   * @type {State}\n   */\n  function tagOpenAttributeName(code) {\n    // ASCII alphabetical and `-`, `.`, `:`, and `_`.\n    if (\n      code === 45 ||\n      code === 46 ||\n      code === 58 ||\n      code === 95 ||\n      asciiAlphanumeric(code)\n    ) {\n      effects.consume(code)\n      return tagOpenAttributeName\n    }\n    return tagOpenAttributeNameAfter(code)\n  }\n\n  /**\n   * After attribute name, before initializer, the end of the tag, or\n   * whitespace.\n   *\n   * ```markdown\n   * > | a <b c> d\n   *           ^\n   * ```\n   *\n   * @type {State}\n   */\n  function tagOpenAttributeNameAfter(code) {\n    if (code === 61) {\n      effects.consume(code)\n      return tagOpenAttributeValueBefore\n    }\n    if (markdownLineEnding(code)) {\n      returnState = tagOpenAttributeNameAfter\n      return lineEndingBefore(code)\n    }\n    if (markdownSpace(code)) {\n      effects.consume(code)\n      return tagOpenAttributeNameAfter\n    }\n    return tagOpenBetween(code)\n  }\n\n  /**\n   * Before unquoted, double quoted, or single quoted attribute value, allowing\n   * whitespace.\n   *\n   * ```markdown\n   * > | a <b c=d> e\n   *            ^\n   * ```\n   *\n   * @type {State}\n   */\n  function tagOpenAttributeValueBefore(code) {\n    if (\n      code === null ||\n      code === 60 ||\n      code === 61 ||\n      code === 62 ||\n      code === 96\n    ) {\n      return nok(code)\n    }\n    if (code === 34 || code === 39) {\n      effects.consume(code)\n      marker = code\n      return tagOpenAttributeValueQuoted\n    }\n    if (markdownLineEnding(code)) {\n      returnState = tagOpenAttributeValueBefore\n      return lineEndingBefore(code)\n    }\n    if (markdownSpace(code)) {\n      effects.consume(code)\n      return tagOpenAttributeValueBefore\n    }\n    effects.consume(code)\n    return tagOpenAttributeValueUnquoted\n  }\n\n  /**\n   * In double or single quoted attribute value.\n   *\n   * ```markdown\n   * > | a <b c=\"d\"> e\n   *             ^\n   * ```\n   *\n   * @type {State}\n   */\n  function tagOpenAttributeValueQuoted(code) {\n    if (code === marker) {\n      effects.consume(code)\n      marker = undefined\n      return tagOpenAttributeValueQuotedAfter\n    }\n    if (code === null) {\n      return nok(code)\n    }\n    if (markdownLineEnding(code)) {\n      returnState = tagOpenAttributeValueQuoted\n      return lineEndingBefore(code)\n    }\n    effects.consume(code)\n    return tagOpenAttributeValueQuoted\n  }\n\n  /**\n   * In unquoted attribute value.\n   *\n   * ```markdown\n   * > | a <b c=d> e\n   *            ^\n   * ```\n   *\n   * @type {State}\n   */\n  function tagOpenAttributeValueUnquoted(code) {\n    if (\n      code === null ||\n      code === 34 ||\n      code === 39 ||\n      code === 60 ||\n      code === 61 ||\n      code === 96\n    ) {\n      return nok(code)\n    }\n    if (code === 47 || code === 62 || markdownLineEndingOrSpace(code)) {\n      return tagOpenBetween(code)\n    }\n    effects.consume(code)\n    return tagOpenAttributeValueUnquoted\n  }\n\n  /**\n   * After double or single quoted attribute value, before whitespace or the end\n   * of the tag.\n   *\n   * ```markdown\n   * > | a <b c=\"d\"> e\n   *               ^\n   * ```\n   *\n   * @type {State}\n   */\n  function tagOpenAttributeValueQuotedAfter(code) {\n    if (code === 47 || code === 62 || markdownLineEndingOrSpace(code)) {\n      return tagOpenBetween(code)\n    }\n    return nok(code)\n  }\n\n  /**\n   * In certain circumstances of a tag where only an `>` is allowed.\n   *\n   * ```markdown\n   * > | a <b c=\"d\"> e\n   *               ^\n   * ```\n   *\n   * @type {State}\n   */\n  function end(code) {\n    if (code === 62) {\n      effects.consume(code)\n      effects.exit('htmlTextData')\n      effects.exit('htmlText')\n      return ok\n    }\n    return nok(code)\n  }\n\n  /**\n   * At eol.\n   *\n   * > 👉 **Note**: we can’t have blank lines in text, so no need to worry about\n   * > empty tokens.\n   *\n   * ```markdown\n   * > | a <!--a\n   *            ^\n   *   | b-->\n   * ```\n   *\n   * @type {State}\n   */\n  function lineEndingBefore(code) {\n    effects.exit('htmlTextData')\n    effects.enter('lineEnding')\n    effects.consume(code)\n    effects.exit('lineEnding')\n    return lineEndingAfter\n  }\n\n  /**\n   * After eol, at optional whitespace.\n   *\n   * > 👉 **Note**: we can’t have blank lines in text, so no need to worry about\n   * > empty tokens.\n   *\n   * ```markdown\n   *   | a <!--a\n   * > | b-->\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function lineEndingAfter(code) {\n    // Always populated by defaults.\n\n    return markdownSpace(code)\n      ? factorySpace(\n          effects,\n          lineEndingAfterPrefix,\n          'linePrefix',\n          self.parser.constructs.disable.null.includes('codeIndented')\n            ? undefined\n            : 4\n        )(code)\n      : lineEndingAfterPrefix(code)\n  }\n\n  /**\n   * After eol, after optional whitespace.\n   *\n   * > 👉 **Note**: we can’t have blank lines in text, so no need to worry about\n   * > empty tokens.\n   *\n   * ```markdown\n   *   | a <!--a\n   * > | b-->\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function lineEndingAfterPrefix(code) {\n    effects.enter('htmlTextData')\n    return returnState(code)\n  }\n}\n","/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\nimport {labelEnd} from './label-end.js'\n\n/** @type {Construct} */\nexport const labelStartLink = {\n  name: 'labelStartLink',\n  tokenize: tokenizeLabelStartLink,\n  resolveAll: labelEnd.resolveAll\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeLabelStartLink(effects, ok, nok) {\n  const self = this\n  return start\n\n  /**\n   * Start of label (link) start.\n   *\n   * ```markdown\n   * > | a [b] c\n   *       ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    effects.enter('labelLink')\n    effects.enter('labelMarker')\n    effects.consume(code)\n    effects.exit('labelMarker')\n    effects.exit('labelLink')\n    return after\n  }\n\n  /** @type {State} */\n  function after(code) {\n    // To do: this isn’t needed in `micromark-extension-gfm-footnote`,\n    // remove.\n    // Hidden footnotes hook.\n    /* c8 ignore next 3 */\n    return code === 94 && '_hiddenFootnoteSupport' in self.parser.constructs\n      ? nok(code)\n      : ok(code)\n  }\n}\n","/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\nimport {markdownLineEnding} from 'micromark-util-character'\n/** @type {Construct} */\nexport const hardBreakEscape = {\n  name: 'hardBreakEscape',\n  tokenize: tokenizeHardBreakEscape\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeHardBreakEscape(effects, ok, nok) {\n  return start\n\n  /**\n   * Start of a hard break (escape).\n   *\n   * ```markdown\n   * > | a\\\n   *      ^\n   *   | b\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    effects.enter('hardBreakEscape')\n    effects.consume(code)\n    return after\n  }\n\n  /**\n   * After `\\`, at eol.\n   *\n   * ```markdown\n   * > | a\\\n   *       ^\n   *   | b\n   * ```\n   *\n   *  @type {State}\n   */\n  function after(code) {\n    if (markdownLineEnding(code)) {\n      effects.exit('hardBreakEscape')\n      return ok(code)\n    }\n    return nok(code)\n  }\n}\n","/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').Previous} Previous\n * @typedef {import('micromark-util-types').Resolver} Resolver\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').Token} Token\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\nimport {markdownLineEnding} from 'micromark-util-character'\n/** @type {Construct} */\nexport const codeText = {\n  name: 'codeText',\n  tokenize: tokenizeCodeText,\n  resolve: resolveCodeText,\n  previous\n}\n\n// To do: next major: don’t resolve, like `markdown-rs`.\n/** @type {Resolver} */\nfunction resolveCodeText(events) {\n  let tailExitIndex = events.length - 4\n  let headEnterIndex = 3\n  /** @type {number} */\n  let index\n  /** @type {number | undefined} */\n  let enter\n\n  // If we start and end with an EOL or a space.\n  if (\n    (events[headEnterIndex][1].type === 'lineEnding' ||\n      events[headEnterIndex][1].type === 'space') &&\n    (events[tailExitIndex][1].type === 'lineEnding' ||\n      events[tailExitIndex][1].type === 'space')\n  ) {\n    index = headEnterIndex\n\n    // And we have data.\n    while (++index < tailExitIndex) {\n      if (events[index][1].type === 'codeTextData') {\n        // Then we have padding.\n        events[headEnterIndex][1].type = 'codeTextPadding'\n        events[tailExitIndex][1].type = 'codeTextPadding'\n        headEnterIndex += 2\n        tailExitIndex -= 2\n        break\n      }\n    }\n  }\n\n  // Merge adjacent spaces and data.\n  index = headEnterIndex - 1\n  tailExitIndex++\n  while (++index <= tailExitIndex) {\n    if (enter === undefined) {\n      if (index !== tailExitIndex && events[index][1].type !== 'lineEnding') {\n        enter = index\n      }\n    } else if (\n      index === tailExitIndex ||\n      events[index][1].type === 'lineEnding'\n    ) {\n      events[enter][1].type = 'codeTextData'\n      if (index !== enter + 2) {\n        events[enter][1].end = events[index - 1][1].end\n        events.splice(enter + 2, index - enter - 2)\n        tailExitIndex -= index - enter - 2\n        index = enter + 2\n      }\n      enter = undefined\n    }\n  }\n  return events\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Previous}\n */\nfunction previous(code) {\n  // If there is a previous code, there will always be a tail.\n  return (\n    code !== 96 ||\n    this.events[this.events.length - 1][1].type === 'characterEscape'\n  )\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeCodeText(effects, ok, nok) {\n  const self = this\n  let sizeOpen = 0\n  /** @type {number} */\n  let size\n  /** @type {Token} */\n  let token\n  return start\n\n  /**\n   * Start of code (text).\n   *\n   * ```markdown\n   * > | `a`\n   *     ^\n   * > | \\`a`\n   *      ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    effects.enter('codeText')\n    effects.enter('codeTextSequence')\n    return sequenceOpen(code)\n  }\n\n  /**\n   * In opening sequence.\n   *\n   * ```markdown\n   * > | `a`\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function sequenceOpen(code) {\n    if (code === 96) {\n      effects.consume(code)\n      sizeOpen++\n      return sequenceOpen\n    }\n    effects.exit('codeTextSequence')\n    return between(code)\n  }\n\n  /**\n   * Between something and something else.\n   *\n   * ```markdown\n   * > | `a`\n   *      ^^\n   * ```\n   *\n   * @type {State}\n   */\n  function between(code) {\n    // EOF.\n    if (code === null) {\n      return nok(code)\n    }\n\n    // To do: next major: don’t do spaces in resolve, but when compiling,\n    // like `markdown-rs`.\n    // Tabs don’t work, and virtual spaces don’t make sense.\n    if (code === 32) {\n      effects.enter('space')\n      effects.consume(code)\n      effects.exit('space')\n      return between\n    }\n\n    // Closing fence? Could also be data.\n    if (code === 96) {\n      token = effects.enter('codeTextSequence')\n      size = 0\n      return sequenceClose(code)\n    }\n    if (markdownLineEnding(code)) {\n      effects.enter('lineEnding')\n      effects.consume(code)\n      effects.exit('lineEnding')\n      return between\n    }\n\n    // Data.\n    effects.enter('codeTextData')\n    return data(code)\n  }\n\n  /**\n   * In data.\n   *\n   * ```markdown\n   * > | `a`\n   *      ^\n   * ```\n   *\n   * @type {State}\n   */\n  function data(code) {\n    if (\n      code === null ||\n      code === 32 ||\n      code === 96 ||\n      markdownLineEnding(code)\n    ) {\n      effects.exit('codeTextData')\n      return between(code)\n    }\n    effects.consume(code)\n    return data\n  }\n\n  /**\n   * In closing sequence.\n   *\n   * ```markdown\n   * > | `a`\n   *       ^\n   * ```\n   *\n   * @type {State}\n   */\n  function sequenceClose(code) {\n    // More.\n    if (code === 96) {\n      effects.consume(code)\n      size++\n      return sequenceClose\n    }\n\n    // Done!\n    if (size === sizeOpen) {\n      effects.exit('codeTextSequence')\n      effects.exit('codeText')\n      return ok(code)\n    }\n\n    // More or less accents: mark as data.\n    token.type = 'codeTextData'\n    return data(code)\n  }\n}\n","/**\n * @typedef {import('micromark-util-types').Extension} Extension\n */\n\nimport {\n  attention,\n  autolink,\n  blockQuote,\n  characterEscape,\n  characterReference,\n  codeFenced,\n  codeIndented,\n  codeText,\n  definition,\n  hardBreakEscape,\n  headingAtx,\n  htmlFlow,\n  htmlText,\n  labelEnd,\n  labelStartImage,\n  labelStartLink,\n  lineEnding,\n  list,\n  setextUnderline,\n  thematicBreak\n} from 'micromark-core-commonmark'\nimport {resolver as resolveText} from './initialize/text.js'\n\n/** @satisfies {Extension['document']} */\nexport const document = {\n  [42]: list,\n  [43]: list,\n  [45]: list,\n  [48]: list,\n  [49]: list,\n  [50]: list,\n  [51]: list,\n  [52]: list,\n  [53]: list,\n  [54]: list,\n  [55]: list,\n  [56]: list,\n  [57]: list,\n  [62]: blockQuote\n}\n\n/** @satisfies {Extension['contentInitial']} */\nexport const contentInitial = {\n  [91]: definition\n}\n\n/** @satisfies {Extension['flowInitial']} */\nexport const flowInitial = {\n  [-2]: codeIndented,\n  [-1]: codeIndented,\n  [32]: codeIndented\n}\n\n/** @satisfies {Extension['flow']} */\nexport const flow = {\n  [35]: headingAtx,\n  [42]: thematicBreak,\n  [45]: [setextUnderline, thematicBreak],\n  [60]: htmlFlow,\n  [61]: setextUnderline,\n  [95]: thematicBreak,\n  [96]: codeFenced,\n  [126]: codeFenced\n}\n\n/** @satisfies {Extension['string']} */\nexport const string = {\n  [38]: characterReference,\n  [92]: characterEscape\n}\n\n/** @satisfies {Extension['text']} */\nexport const text = {\n  [-5]: lineEnding,\n  [-4]: lineEnding,\n  [-3]: lineEnding,\n  [33]: labelStartImage,\n  [38]: characterReference,\n  [42]: attention,\n  [60]: [autolink, htmlText],\n  [91]: labelStartLink,\n  [92]: [hardBreakEscape, characterEscape],\n  [93]: labelEnd,\n  [95]: attention,\n  [96]: codeText\n}\n\n/** @satisfies {Extension['insideSpan']} */\nexport const insideSpan = {\n  null: [attention, resolveText]\n}\n\n/** @satisfies {Extension['attentionMarkers']} */\nexport const attentionMarkers = {\n  null: [42, 95]\n}\n\n/** @satisfies {Extension['disable']} */\nexport const disable = {\n  null: []\n}\n","/**\n * @typedef {import('micromark-util-types').Create} Create\n * @typedef {import('micromark-util-types').FullNormalizedExtension} FullNormalizedExtension\n * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct\n * @typedef {import('micromark-util-types').ParseContext} ParseContext\n * @typedef {import('micromark-util-types').ParseOptions} ParseOptions\n */\n\nimport {combineExtensions} from 'micromark-util-combine-extensions'\nimport {content} from './initialize/content.js'\nimport {document} from './initialize/document.js'\nimport {flow} from './initialize/flow.js'\nimport {text, string} from './initialize/text.js'\nimport {createTokenizer} from './create-tokenizer.js'\nimport * as defaultConstructs from './constructs.js'\n\n/**\n * @param {ParseOptions | null | undefined} [options]\n * @returns {ParseContext}\n */\nexport function parse(options) {\n  const settings = options || {}\n  const constructs =\n    /** @type {FullNormalizedExtension} */\n    combineExtensions([defaultConstructs, ...(settings.extensions || [])])\n\n  /** @type {ParseContext} */\n  const parser = {\n    defined: [],\n    lazy: {},\n    constructs,\n    content: create(content),\n    document: create(document),\n    flow: create(flow),\n    string: create(string),\n    text: create(text)\n  }\n  return parser\n\n  /**\n   * @param {InitialConstruct} initial\n   */\n  function create(initial) {\n    return creator\n    /** @type {Create} */\n    function creator(from) {\n      return createTokenizer(parser, initial, from)\n    }\n  }\n}\n","/**\n * @typedef {import('micromark-util-types').Chunk} Chunk\n * @typedef {import('micromark-util-types').Code} Code\n * @typedef {import('micromark-util-types').Encoding} Encoding\n * @typedef {import('micromark-util-types').Value} Value\n */\n\n/**\n * @callback Preprocessor\n * @param {Value} value\n * @param {Encoding | null | undefined} [encoding]\n * @param {boolean | null | undefined} [end=false]\n * @returns {Array<Chunk>}\n */\n\nconst search = /[\\0\\t\\n\\r]/g\n\n/**\n * @returns {Preprocessor}\n */\nexport function preprocess() {\n  let column = 1\n  let buffer = ''\n  /** @type {boolean | undefined} */\n  let start = true\n  /** @type {boolean | undefined} */\n  let atCarriageReturn\n  return preprocessor\n\n  /** @type {Preprocessor} */\n  function preprocessor(value, encoding, end) {\n    /** @type {Array<Chunk>} */\n    const chunks = []\n    /** @type {RegExpMatchArray | null} */\n    let match\n    /** @type {number} */\n    let next\n    /** @type {number} */\n    let startPosition\n    /** @type {number} */\n    let endPosition\n    /** @type {Code} */\n    let code\n\n    // @ts-expect-error `Buffer` does allow an encoding.\n    value = buffer + value.toString(encoding)\n    startPosition = 0\n    buffer = ''\n    if (start) {\n      // To do: `markdown-rs` actually parses BOMs (byte order mark).\n      if (value.charCodeAt(0) === 65279) {\n        startPosition++\n      }\n      start = undefined\n    }\n    while (startPosition < value.length) {\n      search.lastIndex = startPosition\n      match = search.exec(value)\n      endPosition =\n        match && match.index !== undefined ? match.index : value.length\n      code = value.charCodeAt(endPosition)\n      if (!match) {\n        buffer = value.slice(startPosition)\n        break\n      }\n      if (code === 10 && startPosition === endPosition && atCarriageReturn) {\n        chunks.push(-3)\n        atCarriageReturn = undefined\n      } else {\n        if (atCarriageReturn) {\n          chunks.push(-5)\n          atCarriageReturn = undefined\n        }\n        if (startPosition < endPosition) {\n          chunks.push(value.slice(startPosition, endPosition))\n          column += endPosition - startPosition\n        }\n        switch (code) {\n          case 0: {\n            chunks.push(65533)\n            column++\n            break\n          }\n          case 9: {\n            next = Math.ceil(column / 4) * 4\n            chunks.push(-2)\n            while (column++ < next) chunks.push(-1)\n            break\n          }\n          case 10: {\n            chunks.push(-4)\n            column = 1\n            break\n          }\n          default: {\n            atCarriageReturn = true\n            column = 1\n          }\n        }\n      }\n      startPosition = endPosition + 1\n    }\n    if (end) {\n      if (atCarriageReturn) chunks.push(-5)\n      if (buffer) chunks.push(buffer)\n      chunks.push(null)\n    }\n    return chunks\n  }\n}\n","/**\n * Turn the number (in string form as either hexa- or plain decimal) coming from\n * a numeric character reference into a character.\n *\n * Sort of like `String.fromCharCode(Number.parseInt(value, base))`, but makes\n * non-characters and control characters safe.\n *\n * @param {string} value\n *   Value to decode.\n * @param {number} base\n *   Numeric base.\n * @returns {string}\n *   Character.\n */\nexport function decodeNumericCharacterReference(value, base) {\n  const code = Number.parseInt(value, base)\n  if (\n    // C0 except for HT, LF, FF, CR, space.\n    code < 9 ||\n    code === 11 ||\n    (code > 13 && code < 32) ||\n    // Control character (DEL) of C0, and C1 controls.\n    (code > 126 && code < 160) ||\n    // Lone high surrogates and low surrogates.\n    (code > 55295 && code < 57344) ||\n    // Noncharacters.\n    (code > 64975 && code < 65008) /* eslint-disable no-bitwise */ ||\n    (code & 65535) === 65535 ||\n    (code & 65535) === 65534 /* eslint-enable no-bitwise */ ||\n    // Out of range\n    code > 1114111\n  ) {\n    return '\\uFFFD'\n  }\n  return String.fromCharCode(code)\n}\n","import {decodeNamedCharacterReference} from 'decode-named-character-reference'\nimport {decodeNumericCharacterReference} from 'micromark-util-decode-numeric-character-reference'\nconst characterEscapeOrReference =\n  /\\\\([!-/:-@[-`{-~])|&(#(?:\\d{1,7}|x[\\da-f]{1,6})|[\\da-z]{1,31});/gi\n\n/**\n * Decode markdown strings (which occur in places such as fenced code info\n * strings, destinations, labels, and titles).\n *\n * The “string” content type allows character escapes and -references.\n * This decodes those.\n *\n * @param {string} value\n *   Value to decode.\n * @returns {string}\n *   Decoded value.\n */\nexport function decodeString(value) {\n  return value.replace(characterEscapeOrReference, decode)\n}\n\n/**\n * @param {string} $0\n * @param {string} $1\n * @param {string} $2\n * @returns {string}\n */\nfunction decode($0, $1, $2) {\n  if ($1) {\n    // Escape.\n    return $1\n  }\n\n  // Reference.\n  const head = $2.charCodeAt(0)\n  if (head === 35) {\n    const head = $2.charCodeAt(1)\n    const hex = head === 120 || head === 88\n    return decodeNumericCharacterReference($2.slice(hex ? 2 : 1), hex ? 16 : 10)\n  }\n  return decodeNamedCharacterReference($2) || $0\n}\n","/**\n * @typedef {import('micromark-util-types').Encoding} Encoding\n * @typedef {import('micromark-util-types').Event} Event\n * @typedef {import('micromark-util-types').ParseOptions} ParseOptions\n * @typedef {import('micromark-util-types').Token} Token\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Value} Value\n *\n * @typedef {import('unist').Parent} UnistParent\n * @typedef {import('unist').Point} Point\n *\n * @typedef {import('mdast').PhrasingContent} PhrasingContent\n * @typedef {import('mdast').StaticPhrasingContent} StaticPhrasingContent\n * @typedef {import('mdast').Content} Content\n * @typedef {import('mdast').Break} Break\n * @typedef {import('mdast').Blockquote} Blockquote\n * @typedef {import('mdast').Code} Code\n * @typedef {import('mdast').Definition} Definition\n * @typedef {import('mdast').Emphasis} Emphasis\n * @typedef {import('mdast').Heading} Heading\n * @typedef {import('mdast').HTML} HTML\n * @typedef {import('mdast').Image} Image\n * @typedef {import('mdast').ImageReference} ImageReference\n * @typedef {import('mdast').InlineCode} InlineCode\n * @typedef {import('mdast').Link} Link\n * @typedef {import('mdast').LinkReference} LinkReference\n * @typedef {import('mdast').List} List\n * @typedef {import('mdast').ListItem} ListItem\n * @typedef {import('mdast').Paragraph} Paragraph\n * @typedef {import('mdast').Root} Root\n * @typedef {import('mdast').Strong} Strong\n * @typedef {import('mdast').Text} Text\n * @typedef {import('mdast').ThematicBreak} ThematicBreak\n * @typedef {import('mdast').ReferenceType} ReferenceType\n * @typedef {import('../index.js').CompileData} CompileData\n */\n\n/**\n * @typedef {Root | Content} Node\n * @typedef {Extract<Node, UnistParent>} Parent\n *\n * @typedef {Omit<UnistParent, 'type' | 'children'> & {type: 'fragment', children: Array<PhrasingContent>}} Fragment\n */\n\n/**\n * @callback Transform\n *   Extra transform, to change the AST afterwards.\n * @param {Root} tree\n *   Tree to transform.\n * @returns {Root | undefined | null | void}\n *   New tree or nothing (in which case the current tree is used).\n *\n * @callback Handle\n *   Handle a token.\n * @param {CompileContext} this\n *   Context.\n * @param {Token} token\n *   Current token.\n * @returns {void}\n *   Nothing.\n *\n * @typedef {Record<string, Handle>} Handles\n *   Token types mapping to handles\n *\n * @callback OnEnterError\n *   Handle the case where the `right` token is open, but it is closed (by the\n *   `left` token) or because we reached the end of the document.\n * @param {Omit<CompileContext, 'sliceSerialize'>} this\n *   Context.\n * @param {Token | undefined} left\n *   Left token.\n * @param {Token} right\n *   Right token.\n * @returns {void}\n *   Nothing.\n *\n * @callback OnExitError\n *   Handle the case where the `right` token is open but it is closed by\n *   exiting the `left` token.\n * @param {Omit<CompileContext, 'sliceSerialize'>} this\n *   Context.\n * @param {Token} left\n *   Left token.\n * @param {Token} right\n *   Right token.\n * @returns {void}\n *   Nothing.\n *\n * @typedef {[Token, OnEnterError | undefined]} TokenTuple\n *   Open token on the stack, with an optional error handler for when\n *   that token isn’t closed properly.\n */\n\n/**\n * @typedef Config\n *   Configuration.\n *\n *   We have our defaults, but extensions will add more.\n * @property {Array<string>} canContainEols\n *   Token types where line endings are used.\n * @property {Handles} enter\n *   Opening handles.\n * @property {Handles} exit\n *   Closing handles.\n * @property {Array<Transform>} transforms\n *   Tree transforms.\n *\n * @typedef {Partial<Config>} Extension\n *   Change how markdown tokens from micromark are turned into mdast.\n *\n * @typedef CompileContext\n *   mdast compiler context.\n * @property {Array<Node | Fragment>} stack\n *   Stack of nodes.\n * @property {Array<TokenTuple>} tokenStack\n *   Stack of tokens.\n * @property {<Key extends keyof CompileData>(key: Key) => CompileData[Key]} getData\n *   Get data from the key/value store.\n * @property {<Key extends keyof CompileData>(key: Key, value?: CompileData[Key]) => void} setData\n *   Set data into the key/value store.\n * @property {(this: CompileContext) => void} buffer\n *   Capture some of the output data.\n * @property {(this: CompileContext) => string} resume\n *   Stop capturing and access the output data.\n * @property {<Kind extends Node>(this: CompileContext, node: Kind, token: Token, onError?: OnEnterError) => Kind} enter\n *   Enter a token.\n * @property {(this: CompileContext, token: Token, onError?: OnExitError) => Node} exit\n *   Exit a token.\n * @property {TokenizeContext['sliceSerialize']} sliceSerialize\n *   Get the string value of a token.\n * @property {Config} config\n *   Configuration.\n *\n * @typedef FromMarkdownOptions\n *   Configuration for how to build mdast.\n * @property {Array<Extension | Array<Extension>> | null | undefined} [mdastExtensions]\n *   Extensions for this utility to change how tokens are turned into a tree.\n *\n * @typedef {ParseOptions & FromMarkdownOptions} Options\n *   Configuration.\n */\n\n// To do: micromark: create a registry of tokens?\n// To do: next major: don’t return given `Node` from `enter`.\n// To do: next major: remove setter/getter.\n\nimport {toString} from 'mdast-util-to-string'\nimport {parse} from 'micromark/lib/parse.js'\nimport {preprocess} from 'micromark/lib/preprocess.js'\nimport {postprocess} from 'micromark/lib/postprocess.js'\nimport {decodeNumericCharacterReference} from 'micromark-util-decode-numeric-character-reference'\nimport {decodeString} from 'micromark-util-decode-string'\nimport {normalizeIdentifier} from 'micromark-util-normalize-identifier'\nimport {decodeNamedCharacterReference} from 'decode-named-character-reference'\nimport {stringifyPosition} from 'unist-util-stringify-position'\nconst own = {}.hasOwnProperty\n\n/**\n * @param value\n *   Markdown to parse.\n * @param encoding\n *   Character encoding for when `value` is `Buffer`.\n * @param options\n *   Configuration.\n * @returns\n *   mdast tree.\n */\nexport const fromMarkdown =\n  /**\n   * @type {(\n   *   ((value: Value, encoding: Encoding, options?: Options | null | undefined) => Root) &\n   *   ((value: Value, options?: Options | null | undefined) => Root)\n   * )}\n   */\n\n  /**\n   * @param {Value} value\n   * @param {Encoding | Options | null | undefined} [encoding]\n   * @param {Options | null | undefined} [options]\n   * @returns {Root}\n   */\n  function (value, encoding, options) {\n    if (typeof encoding !== 'string') {\n      options = encoding\n      encoding = undefined\n    }\n    return compiler(options)(\n      postprocess(\n        parse(options).document().write(preprocess()(value, encoding, true))\n      )\n    )\n  }\n\n/**\n * Note this compiler only understand complete buffering, not streaming.\n *\n * @param {Options | null | undefined} [options]\n */\nfunction compiler(options) {\n  /** @type {Config} */\n  const config = {\n    transforms: [],\n    canContainEols: ['emphasis', 'fragment', 'heading', 'paragraph', 'strong'],\n    enter: {\n      autolink: opener(link),\n      autolinkProtocol: onenterdata,\n      autolinkEmail: onenterdata,\n      atxHeading: opener(heading),\n      blockQuote: opener(blockQuote),\n      characterEscape: onenterdata,\n      characterReference: onenterdata,\n      codeFenced: opener(codeFlow),\n      codeFencedFenceInfo: buffer,\n      codeFencedFenceMeta: buffer,\n      codeIndented: opener(codeFlow, buffer),\n      codeText: opener(codeText, buffer),\n      codeTextData: onenterdata,\n      data: onenterdata,\n      codeFlowValue: onenterdata,\n      definition: opener(definition),\n      definitionDestinationString: buffer,\n      definitionLabelString: buffer,\n      definitionTitleString: buffer,\n      emphasis: opener(emphasis),\n      hardBreakEscape: opener(hardBreak),\n      hardBreakTrailing: opener(hardBreak),\n      htmlFlow: opener(html, buffer),\n      htmlFlowData: onenterdata,\n      htmlText: opener(html, buffer),\n      htmlTextData: onenterdata,\n      image: opener(image),\n      label: buffer,\n      link: opener(link),\n      listItem: opener(listItem),\n      listItemValue: onenterlistitemvalue,\n      listOrdered: opener(list, onenterlistordered),\n      listUnordered: opener(list),\n      paragraph: opener(paragraph),\n      reference: onenterreference,\n      referenceString: buffer,\n      resourceDestinationString: buffer,\n      resourceTitleString: buffer,\n      setextHeading: opener(heading),\n      strong: opener(strong),\n      thematicBreak: opener(thematicBreak)\n    },\n    exit: {\n      atxHeading: closer(),\n      atxHeadingSequence: onexitatxheadingsequence,\n      autolink: closer(),\n      autolinkEmail: onexitautolinkemail,\n      autolinkProtocol: onexitautolinkprotocol,\n      blockQuote: closer(),\n      characterEscapeValue: onexitdata,\n      characterReferenceMarkerHexadecimal: onexitcharacterreferencemarker,\n      characterReferenceMarkerNumeric: onexitcharacterreferencemarker,\n      characterReferenceValue: onexitcharacterreferencevalue,\n      codeFenced: closer(onexitcodefenced),\n      codeFencedFence: onexitcodefencedfence,\n      codeFencedFenceInfo: onexitcodefencedfenceinfo,\n      codeFencedFenceMeta: onexitcodefencedfencemeta,\n      codeFlowValue: onexitdata,\n      codeIndented: closer(onexitcodeindented),\n      codeText: closer(onexitcodetext),\n      codeTextData: onexitdata,\n      data: onexitdata,\n      definition: closer(),\n      definitionDestinationString: onexitdefinitiondestinationstring,\n      definitionLabelString: onexitdefinitionlabelstring,\n      definitionTitleString: onexitdefinitiontitlestring,\n      emphasis: closer(),\n      hardBreakEscape: closer(onexithardbreak),\n      hardBreakTrailing: closer(onexithardbreak),\n      htmlFlow: closer(onexithtmlflow),\n      htmlFlowData: onexitdata,\n      htmlText: closer(onexithtmltext),\n      htmlTextData: onexitdata,\n      image: closer(onexitimage),\n      label: onexitlabel,\n      labelText: onexitlabeltext,\n      lineEnding: onexitlineending,\n      link: closer(onexitlink),\n      listItem: closer(),\n      listOrdered: closer(),\n      listUnordered: closer(),\n      paragraph: closer(),\n      referenceString: onexitreferencestring,\n      resourceDestinationString: onexitresourcedestinationstring,\n      resourceTitleString: onexitresourcetitlestring,\n      resource: onexitresource,\n      setextHeading: closer(onexitsetextheading),\n      setextHeadingLineSequence: onexitsetextheadinglinesequence,\n      setextHeadingText: onexitsetextheadingtext,\n      strong: closer(),\n      thematicBreak: closer()\n    }\n  }\n  configure(config, (options || {}).mdastExtensions || [])\n\n  /** @type {CompileData} */\n  const data = {}\n  return compile\n\n  /**\n   * Turn micromark events into an mdast tree.\n   *\n   * @param {Array<Event>} events\n   *   Events.\n   * @returns {Root}\n   *   mdast tree.\n   */\n  function compile(events) {\n    /** @type {Root} */\n    let tree = {\n      type: 'root',\n      children: []\n    }\n    /** @type {Omit<CompileContext, 'sliceSerialize'>} */\n    const context = {\n      stack: [tree],\n      tokenStack: [],\n      config,\n      enter,\n      exit,\n      buffer,\n      resume,\n      setData,\n      getData\n    }\n    /** @type {Array<number>} */\n    const listStack = []\n    let index = -1\n    while (++index < events.length) {\n      // We preprocess lists to add `listItem` tokens, and to infer whether\n      // items the list itself are spread out.\n      if (\n        events[index][1].type === 'listOrdered' ||\n        events[index][1].type === 'listUnordered'\n      ) {\n        if (events[index][0] === 'enter') {\n          listStack.push(index)\n        } else {\n          const tail = listStack.pop()\n          index = prepareList(events, tail, index)\n        }\n      }\n    }\n    index = -1\n    while (++index < events.length) {\n      const handler = config[events[index][0]]\n      if (own.call(handler, events[index][1].type)) {\n        handler[events[index][1].type].call(\n          Object.assign(\n            {\n              sliceSerialize: events[index][2].sliceSerialize\n            },\n            context\n          ),\n          events[index][1]\n        )\n      }\n    }\n\n    // Handle tokens still being open.\n    if (context.tokenStack.length > 0) {\n      const tail = context.tokenStack[context.tokenStack.length - 1]\n      const handler = tail[1] || defaultOnError\n      handler.call(context, undefined, tail[0])\n    }\n\n    // Figure out `root` position.\n    tree.position = {\n      start: point(\n        events.length > 0\n          ? events[0][1].start\n          : {\n              line: 1,\n              column: 1,\n              offset: 0\n            }\n      ),\n      end: point(\n        events.length > 0\n          ? events[events.length - 2][1].end\n          : {\n              line: 1,\n              column: 1,\n              offset: 0\n            }\n      )\n    }\n\n    // Call transforms.\n    index = -1\n    while (++index < config.transforms.length) {\n      tree = config.transforms[index](tree) || tree\n    }\n    return tree\n  }\n\n  /**\n   * @param {Array<Event>} events\n   * @param {number} start\n   * @param {number} length\n   * @returns {number}\n   */\n  function prepareList(events, start, length) {\n    let index = start - 1\n    let containerBalance = -1\n    let listSpread = false\n    /** @type {Token | undefined} */\n    let listItem\n    /** @type {number | undefined} */\n    let lineIndex\n    /** @type {number | undefined} */\n    let firstBlankLineIndex\n    /** @type {boolean | undefined} */\n    let atMarker\n    while (++index <= length) {\n      const event = events[index]\n      if (\n        event[1].type === 'listUnordered' ||\n        event[1].type === 'listOrdered' ||\n        event[1].type === 'blockQuote'\n      ) {\n        if (event[0] === 'enter') {\n          containerBalance++\n        } else {\n          containerBalance--\n        }\n        atMarker = undefined\n      } else if (event[1].type === 'lineEndingBlank') {\n        if (event[0] === 'enter') {\n          if (\n            listItem &&\n            !atMarker &&\n            !containerBalance &&\n            !firstBlankLineIndex\n          ) {\n            firstBlankLineIndex = index\n          }\n          atMarker = undefined\n        }\n      } else if (\n        event[1].type === 'linePrefix' ||\n        event[1].type === 'listItemValue' ||\n        event[1].type === 'listItemMarker' ||\n        event[1].type === 'listItemPrefix' ||\n        event[1].type === 'listItemPrefixWhitespace'\n      ) {\n        // Empty.\n      } else {\n        atMarker = undefined\n      }\n      if (\n        (!containerBalance &&\n          event[0] === 'enter' &&\n          event[1].type === 'listItemPrefix') ||\n        (containerBalance === -1 &&\n          event[0] === 'exit' &&\n          (event[1].type === 'listUnordered' ||\n            event[1].type === 'listOrdered'))\n      ) {\n        if (listItem) {\n          let tailIndex = index\n          lineIndex = undefined\n          while (tailIndex--) {\n            const tailEvent = events[tailIndex]\n            if (\n              tailEvent[1].type === 'lineEnding' ||\n              tailEvent[1].type === 'lineEndingBlank'\n            ) {\n              if (tailEvent[0] === 'exit') continue\n              if (lineIndex) {\n                events[lineIndex][1].type = 'lineEndingBlank'\n                listSpread = true\n              }\n              tailEvent[1].type = 'lineEnding'\n              lineIndex = tailIndex\n            } else if (\n              tailEvent[1].type === 'linePrefix' ||\n              tailEvent[1].type === 'blockQuotePrefix' ||\n              tailEvent[1].type === 'blockQuotePrefixWhitespace' ||\n              tailEvent[1].type === 'blockQuoteMarker' ||\n              tailEvent[1].type === 'listItemIndent'\n            ) {\n              // Empty\n            } else {\n              break\n            }\n          }\n          if (\n            firstBlankLineIndex &&\n            (!lineIndex || firstBlankLineIndex < lineIndex)\n          ) {\n            listItem._spread = true\n          }\n\n          // Fix position.\n          listItem.end = Object.assign(\n            {},\n            lineIndex ? events[lineIndex][1].start : event[1].end\n          )\n          events.splice(lineIndex || index, 0, ['exit', listItem, event[2]])\n          index++\n          length++\n        }\n\n        // Create a new list item.\n        if (event[1].type === 'listItemPrefix') {\n          listItem = {\n            type: 'listItem',\n            _spread: false,\n            start: Object.assign({}, event[1].start),\n            // @ts-expect-error: we’ll add `end` in a second.\n            end: undefined\n          }\n          // @ts-expect-error: `listItem` is most definitely defined, TS...\n          events.splice(index, 0, ['enter', listItem, event[2]])\n          index++\n          length++\n          firstBlankLineIndex = undefined\n          atMarker = true\n        }\n      }\n    }\n    events[start][1]._spread = listSpread\n    return length\n  }\n\n  /**\n   * Set data.\n   *\n   * @template {keyof CompileData} Key\n   *   Field type.\n   * @param {Key} key\n   *   Key of field.\n   * @param {CompileData[Key]} [value]\n   *   New value.\n   * @returns {void}\n   *   Nothing.\n   */\n  function setData(key, value) {\n    data[key] = value\n  }\n\n  /**\n   * Get data.\n   *\n   * @template {keyof CompileData} Key\n   *   Field type.\n   * @param {Key} key\n   *   Key of field.\n   * @returns {CompileData[Key]}\n   *   Value.\n   */\n  function getData(key) {\n    return data[key]\n  }\n\n  /**\n   * Create an opener handle.\n   *\n   * @param {(token: Token) => Node} create\n   *   Create a node.\n   * @param {Handle} [and]\n   *   Optional function to also run.\n   * @returns {Handle}\n   *   Handle.\n   */\n  function opener(create, and) {\n    return open\n\n    /**\n     * @this {CompileContext}\n     * @param {Token} token\n     * @returns {void}\n     */\n    function open(token) {\n      enter.call(this, create(token), token)\n      if (and) and.call(this, token)\n    }\n  }\n\n  /**\n   * @this {CompileContext}\n   * @returns {void}\n   */\n  function buffer() {\n    this.stack.push({\n      type: 'fragment',\n      children: []\n    })\n  }\n\n  /**\n   * @template {Node} Kind\n   *   Node type.\n   * @this {CompileContext}\n   *   Context.\n   * @param {Kind} node\n   *   Node to enter.\n   * @param {Token} token\n   *   Corresponding token.\n   * @param {OnEnterError | undefined} [errorHandler]\n   *   Handle the case where this token is open, but it is closed by something else.\n   * @returns {Kind}\n   *   The given node.\n   */\n  function enter(node, token, errorHandler) {\n    const parent = this.stack[this.stack.length - 1]\n    // @ts-expect-error: Assume `Node` can exist as a child of `parent`.\n    parent.children.push(node)\n    this.stack.push(node)\n    this.tokenStack.push([token, errorHandler])\n    // @ts-expect-error: `end` will be patched later.\n    node.position = {\n      start: point(token.start)\n    }\n    return node\n  }\n\n  /**\n   * Create a closer handle.\n   *\n   * @param {Handle} [and]\n   *   Optional function to also run.\n   * @returns {Handle}\n   *   Handle.\n   */\n  function closer(and) {\n    return close\n\n    /**\n     * @this {CompileContext}\n     * @param {Token} token\n     * @returns {void}\n     */\n    function close(token) {\n      if (and) and.call(this, token)\n      exit.call(this, token)\n    }\n  }\n\n  /**\n   * @this {CompileContext}\n   *   Context.\n   * @param {Token} token\n   *   Corresponding token.\n   * @param {OnExitError | undefined} [onExitError]\n   *   Handle the case where another token is open.\n   * @returns {Node}\n   *   The closed node.\n   */\n  function exit(token, onExitError) {\n    const node = this.stack.pop()\n    const open = this.tokenStack.pop()\n    if (!open) {\n      throw new Error(\n        'Cannot close `' +\n          token.type +\n          '` (' +\n          stringifyPosition({\n            start: token.start,\n            end: token.end\n          }) +\n          '): it’s not open'\n      )\n    } else if (open[0].type !== token.type) {\n      if (onExitError) {\n        onExitError.call(this, token, open[0])\n      } else {\n        const handler = open[1] || defaultOnError\n        handler.call(this, token, open[0])\n      }\n    }\n    node.position.end = point(token.end)\n    return node\n  }\n\n  /**\n   * @this {CompileContext}\n   * @returns {string}\n   */\n  function resume() {\n    return toString(this.stack.pop())\n  }\n\n  //\n  // Handlers.\n  //\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onenterlistordered() {\n    setData('expectingFirstListItemValue', true)\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onenterlistitemvalue(token) {\n    if (getData('expectingFirstListItemValue')) {\n      const ancestor = this.stack[this.stack.length - 2]\n      ancestor.start = Number.parseInt(this.sliceSerialize(token), 10)\n      setData('expectingFirstListItemValue')\n    }\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitcodefencedfenceinfo() {\n    const data = this.resume()\n    const node = this.stack[this.stack.length - 1]\n    node.lang = data\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitcodefencedfencemeta() {\n    const data = this.resume()\n    const node = this.stack[this.stack.length - 1]\n    node.meta = data\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitcodefencedfence() {\n    // Exit if this is the closing fence.\n    if (getData('flowCodeInside')) return\n    this.buffer()\n    setData('flowCodeInside', true)\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitcodefenced() {\n    const data = this.resume()\n    const node = this.stack[this.stack.length - 1]\n    node.value = data.replace(/^(\\r?\\n|\\r)|(\\r?\\n|\\r)$/g, '')\n    setData('flowCodeInside')\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitcodeindented() {\n    const data = this.resume()\n    const node = this.stack[this.stack.length - 1]\n    node.value = data.replace(/(\\r?\\n|\\r)$/g, '')\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitdefinitionlabelstring(token) {\n    const label = this.resume()\n    const node = this.stack[this.stack.length - 1]\n    node.label = label\n    node.identifier = normalizeIdentifier(\n      this.sliceSerialize(token)\n    ).toLowerCase()\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitdefinitiontitlestring() {\n    const data = this.resume()\n    const node = this.stack[this.stack.length - 1]\n    node.title = data\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitdefinitiondestinationstring() {\n    const data = this.resume()\n    const node = this.stack[this.stack.length - 1]\n    node.url = data\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitatxheadingsequence(token) {\n    const node = this.stack[this.stack.length - 1]\n    if (!node.depth) {\n      const depth = this.sliceSerialize(token).length\n      node.depth = depth\n    }\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitsetextheadingtext() {\n    setData('setextHeadingSlurpLineEnding', true)\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitsetextheadinglinesequence(token) {\n    const node = this.stack[this.stack.length - 1]\n    node.depth = this.sliceSerialize(token).charCodeAt(0) === 61 ? 1 : 2\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitsetextheading() {\n    setData('setextHeadingSlurpLineEnding')\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n\n  function onenterdata(token) {\n    const node = this.stack[this.stack.length - 1]\n    let tail = node.children[node.children.length - 1]\n    if (!tail || tail.type !== 'text') {\n      // Add a new text node.\n      tail = text()\n      // @ts-expect-error: we’ll add `end` later.\n      tail.position = {\n        start: point(token.start)\n      }\n      // @ts-expect-error: Assume `parent` accepts `text`.\n      node.children.push(tail)\n    }\n    this.stack.push(tail)\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n\n  function onexitdata(token) {\n    const tail = this.stack.pop()\n    tail.value += this.sliceSerialize(token)\n    tail.position.end = point(token.end)\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n\n  function onexitlineending(token) {\n    const context = this.stack[this.stack.length - 1]\n    // If we’re at a hard break, include the line ending in there.\n    if (getData('atHardBreak')) {\n      const tail = context.children[context.children.length - 1]\n      tail.position.end = point(token.end)\n      setData('atHardBreak')\n      return\n    }\n    if (\n      !getData('setextHeadingSlurpLineEnding') &&\n      config.canContainEols.includes(context.type)\n    ) {\n      onenterdata.call(this, token)\n      onexitdata.call(this, token)\n    }\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n\n  function onexithardbreak() {\n    setData('atHardBreak', true)\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n\n  function onexithtmlflow() {\n    const data = this.resume()\n    const node = this.stack[this.stack.length - 1]\n    node.value = data\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n\n  function onexithtmltext() {\n    const data = this.resume()\n    const node = this.stack[this.stack.length - 1]\n    node.value = data\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n\n  function onexitcodetext() {\n    const data = this.resume()\n    const node = this.stack[this.stack.length - 1]\n    node.value = data\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n\n  function onexitlink() {\n    const node = this.stack[this.stack.length - 1]\n    // Note: there are also `identifier` and `label` fields on this link node!\n    // These are used / cleaned here.\n    // To do: clean.\n    if (getData('inReference')) {\n      /** @type {ReferenceType} */\n      const referenceType = getData('referenceType') || 'shortcut'\n      node.type += 'Reference'\n      // @ts-expect-error: mutate.\n      node.referenceType = referenceType\n      // @ts-expect-error: mutate.\n      delete node.url\n      delete node.title\n    } else {\n      // @ts-expect-error: mutate.\n      delete node.identifier\n      // @ts-expect-error: mutate.\n      delete node.label\n    }\n    setData('referenceType')\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n\n  function onexitimage() {\n    const node = this.stack[this.stack.length - 1]\n    // Note: there are also `identifier` and `label` fields on this link node!\n    // These are used / cleaned here.\n    // To do: clean.\n    if (getData('inReference')) {\n      /** @type {ReferenceType} */\n      const referenceType = getData('referenceType') || 'shortcut'\n      node.type += 'Reference'\n      // @ts-expect-error: mutate.\n      node.referenceType = referenceType\n      // @ts-expect-error: mutate.\n      delete node.url\n      delete node.title\n    } else {\n      // @ts-expect-error: mutate.\n      delete node.identifier\n      // @ts-expect-error: mutate.\n      delete node.label\n    }\n    setData('referenceType')\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n\n  function onexitlabeltext(token) {\n    const string = this.sliceSerialize(token)\n    const ancestor = this.stack[this.stack.length - 2]\n    // @ts-expect-error: stash this on the node, as it might become a reference\n    // later.\n    ancestor.label = decodeString(string)\n    // @ts-expect-error: same as above.\n    ancestor.identifier = normalizeIdentifier(string).toLowerCase()\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n\n  function onexitlabel() {\n    const fragment = this.stack[this.stack.length - 1]\n    const value = this.resume()\n    const node = this.stack[this.stack.length - 1]\n    // Assume a reference.\n    setData('inReference', true)\n    if (node.type === 'link') {\n      /** @type {Array<StaticPhrasingContent>} */\n      // @ts-expect-error: Assume static phrasing content.\n      const children = fragment.children\n      node.children = children\n    } else {\n      node.alt = value\n    }\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n\n  function onexitresourcedestinationstring() {\n    const data = this.resume()\n    const node = this.stack[this.stack.length - 1]\n    node.url = data\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n\n  function onexitresourcetitlestring() {\n    const data = this.resume()\n    const node = this.stack[this.stack.length - 1]\n    node.title = data\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n\n  function onexitresource() {\n    setData('inReference')\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n\n  function onenterreference() {\n    setData('referenceType', 'collapsed')\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n\n  function onexitreferencestring(token) {\n    const label = this.resume()\n    const node = this.stack[this.stack.length - 1]\n    // @ts-expect-error: stash this on the node, as it might become a reference\n    // later.\n    node.label = label\n    // @ts-expect-error: same as above.\n    node.identifier = normalizeIdentifier(\n      this.sliceSerialize(token)\n    ).toLowerCase()\n    setData('referenceType', 'full')\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n\n  function onexitcharacterreferencemarker(token) {\n    setData('characterReferenceType', token.type)\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitcharacterreferencevalue(token) {\n    const data = this.sliceSerialize(token)\n    const type = getData('characterReferenceType')\n    /** @type {string} */\n    let value\n    if (type) {\n      value = decodeNumericCharacterReference(\n        data,\n        type === 'characterReferenceMarkerNumeric' ? 10 : 16\n      )\n      setData('characterReferenceType')\n    } else {\n      const result = decodeNamedCharacterReference(data)\n      value = result\n    }\n    const tail = this.stack.pop()\n    tail.value += value\n    tail.position.end = point(token.end)\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitautolinkprotocol(token) {\n    onexitdata.call(this, token)\n    const node = this.stack[this.stack.length - 1]\n    node.url = this.sliceSerialize(token)\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitautolinkemail(token) {\n    onexitdata.call(this, token)\n    const node = this.stack[this.stack.length - 1]\n    node.url = 'mailto:' + this.sliceSerialize(token)\n  }\n\n  //\n  // Creaters.\n  //\n\n  /** @returns {Blockquote} */\n  function blockQuote() {\n    return {\n      type: 'blockquote',\n      children: []\n    }\n  }\n\n  /** @returns {Code} */\n  function codeFlow() {\n    return {\n      type: 'code',\n      lang: null,\n      meta: null,\n      value: ''\n    }\n  }\n\n  /** @returns {InlineCode} */\n  function codeText() {\n    return {\n      type: 'inlineCode',\n      value: ''\n    }\n  }\n\n  /** @returns {Definition} */\n  function definition() {\n    return {\n      type: 'definition',\n      identifier: '',\n      label: null,\n      title: null,\n      url: ''\n    }\n  }\n\n  /** @returns {Emphasis} */\n  function emphasis() {\n    return {\n      type: 'emphasis',\n      children: []\n    }\n  }\n\n  /** @returns {Heading} */\n  function heading() {\n    // @ts-expect-error `depth` will be set later.\n    return {\n      type: 'heading',\n      depth: undefined,\n      children: []\n    }\n  }\n\n  /** @returns {Break} */\n  function hardBreak() {\n    return {\n      type: 'break'\n    }\n  }\n\n  /** @returns {HTML} */\n  function html() {\n    return {\n      type: 'html',\n      value: ''\n    }\n  }\n\n  /** @returns {Image} */\n  function image() {\n    return {\n      type: 'image',\n      title: null,\n      url: '',\n      alt: null\n    }\n  }\n\n  /** @returns {Link} */\n  function link() {\n    return {\n      type: 'link',\n      title: null,\n      url: '',\n      children: []\n    }\n  }\n\n  /**\n   * @param {Token} token\n   * @returns {List}\n   */\n  function list(token) {\n    return {\n      type: 'list',\n      ordered: token.type === 'listOrdered',\n      start: null,\n      spread: token._spread,\n      children: []\n    }\n  }\n\n  /**\n   * @param {Token} token\n   * @returns {ListItem}\n   */\n  function listItem(token) {\n    return {\n      type: 'listItem',\n      spread: token._spread,\n      checked: null,\n      children: []\n    }\n  }\n\n  /** @returns {Paragraph} */\n  function paragraph() {\n    return {\n      type: 'paragraph',\n      children: []\n    }\n  }\n\n  /** @returns {Strong} */\n  function strong() {\n    return {\n      type: 'strong',\n      children: []\n    }\n  }\n\n  /** @returns {Text} */\n  function text() {\n    return {\n      type: 'text',\n      value: ''\n    }\n  }\n\n  /** @returns {ThematicBreak} */\n  function thematicBreak() {\n    return {\n      type: 'thematicBreak'\n    }\n  }\n}\n\n/**\n * Copy a point-like value.\n *\n * @param {Point} d\n *   Point-like value.\n * @returns {Point}\n *   unist point.\n */\nfunction point(d) {\n  return {\n    line: d.line,\n    column: d.column,\n    offset: d.offset\n  }\n}\n\n/**\n * @param {Config} combined\n * @param {Array<Extension | Array<Extension>>} extensions\n * @returns {void}\n */\nfunction configure(combined, extensions) {\n  let index = -1\n  while (++index < extensions.length) {\n    const value = extensions[index]\n    if (Array.isArray(value)) {\n      configure(combined, value)\n    } else {\n      extension(combined, value)\n    }\n  }\n}\n\n/**\n * @param {Config} combined\n * @param {Extension} extension\n * @returns {void}\n */\nfunction extension(combined, extension) {\n  /** @type {keyof Extension} */\n  let key\n  for (key in extension) {\n    if (own.call(extension, key)) {\n      if (key === 'canContainEols') {\n        const right = extension[key]\n        if (right) {\n          combined[key].push(...right)\n        }\n      } else if (key === 'transforms') {\n        const right = extension[key]\n        if (right) {\n          combined[key].push(...right)\n        }\n      } else if (key === 'enter' || key === 'exit') {\n        const right = extension[key]\n        if (right) {\n          Object.assign(combined[key], right)\n        }\n      }\n    }\n  }\n}\n\n/** @type {OnEnterError} */\nfunction defaultOnError(left, right) {\n  if (left) {\n    throw new Error(\n      'Cannot close `' +\n        left.type +\n        '` (' +\n        stringifyPosition({\n          start: left.start,\n          end: left.end\n        }) +\n        '): a different token (`' +\n        right.type +\n        '`, ' +\n        stringifyPosition({\n          start: right.start,\n          end: right.end\n        }) +\n        ') is open'\n    )\n  } else {\n    throw new Error(\n      'Cannot close document, a token (`' +\n        right.type +\n        '`, ' +\n        stringifyPosition({\n          start: right.start,\n          end: right.end\n        }) +\n        ') is still open'\n    )\n  }\n}\n","/**\n * @typedef {import('micromark-util-types').Event} Event\n */\n\nimport {subtokenize} from 'micromark-util-subtokenize'\n\n/**\n * @param {Array<Event>} events\n * @returns {Array<Event>}\n */\nexport function postprocess(events) {\n  while (!subtokenize(events)) {\n    // Empty\n  }\n  return events\n}\n","/**\n * @typedef {import('mdast').Root} Root\n * @typedef {import('mdast-util-from-markdown').Options} Options\n */\n\nimport {fromMarkdown} from 'mdast-util-from-markdown'\n\n/**\n * @this {import('unified').Processor}\n * @type {import('unified').Plugin<[Options?] | void[], string, Root>}\n */\nexport default function remarkParse(options) {\n  /** @type {import('unified').ParserFunction<Root>} */\n  const parser = (doc) => {\n    // Assume options.\n    const settings = /** @type {Options} */ (this.data('settings'))\n\n    return fromMarkdown(\n      doc,\n      Object.assign({}, settings, options, {\n        // Note: these options are not in the readme.\n        // The goal is for them to be set by plugins on `data` instead of being\n        // passed by users.\n        extensions: this.data('micromarkExtensions') || [],\n        mdastExtensions: this.data('fromMarkdownExtensions') || []\n      })\n    )\n  }\n\n  Object.assign(this, {Parser: parser})\n}\n","import {asciiAlphanumeric} from 'micromark-util-character'\nimport {encode} from 'micromark-util-encode'\n/**\n * Make a value safe for injection as a URL.\n *\n * This encodes unsafe characters with percent-encoding and skips already\n * encoded sequences (see `normalizeUri`).\n * Further unsafe characters are encoded as character references (see\n * `micromark-util-encode`).\n *\n * A regex of allowed protocols can be given, in which case the URL is\n * sanitized.\n * For example, `/^(https?|ircs?|mailto|xmpp)$/i` can be used for `a[href]`, or\n * `/^https?$/i` for `img[src]` (this is what `github.com` allows).\n * If the URL includes an unknown protocol (one not matched by `protocol`, such\n * as a dangerous example, `javascript:`), the value is ignored.\n *\n * @param {string | undefined} url\n *   URI to sanitize.\n * @param {RegExp | null | undefined} [protocol]\n *   Allowed protocols.\n * @returns {string}\n *   Sanitized URI.\n */\nexport function sanitizeUri(url, protocol) {\n  const value = encode(normalizeUri(url || ''))\n  if (!protocol) {\n    return value\n  }\n  const colon = value.indexOf(':')\n  const questionMark = value.indexOf('?')\n  const numberSign = value.indexOf('#')\n  const slash = value.indexOf('/')\n  if (\n    // If there is no protocol, it’s relative.\n    colon < 0 ||\n    // If the first colon is after a `?`, `#`, or `/`, it’s not a protocol.\n    (slash > -1 && colon > slash) ||\n    (questionMark > -1 && colon > questionMark) ||\n    (numberSign > -1 && colon > numberSign) ||\n    // It is a protocol, it should be allowed.\n    protocol.test(value.slice(0, colon))\n  ) {\n    return value\n  }\n  return ''\n}\n\n/**\n * Normalize a URL.\n *\n * Encode unsafe characters with percent-encoding, skipping already encoded\n * sequences.\n *\n * @param {string} value\n *   URI to normalize.\n * @returns {string}\n *   Normalized URI.\n */\nexport function normalizeUri(value) {\n  /** @type {Array<string>} */\n  const result = []\n  let index = -1\n  let start = 0\n  let skip = 0\n  while (++index < value.length) {\n    const code = value.charCodeAt(index)\n    /** @type {string} */\n    let replace = ''\n\n    // A correct percent encoded value.\n    if (\n      code === 37 &&\n      asciiAlphanumeric(value.charCodeAt(index + 1)) &&\n      asciiAlphanumeric(value.charCodeAt(index + 2))\n    ) {\n      skip = 2\n    }\n    // ASCII.\n    else if (code < 128) {\n      if (!/[!#$&-;=?-Z_a-z~]/.test(String.fromCharCode(code))) {\n        replace = String.fromCharCode(code)\n      }\n    }\n    // Astral.\n    else if (code > 55295 && code < 57344) {\n      const next = value.charCodeAt(index + 1)\n\n      // A correct surrogate pair.\n      if (code < 56320 && next > 56319 && next < 57344) {\n        replace = String.fromCharCode(code, next)\n        skip = 1\n      }\n      // Lone surrogate.\n      else {\n        replace = '\\uFFFD'\n      }\n    }\n    // Unicode.\n    else {\n      replace = String.fromCharCode(code)\n    }\n    if (replace) {\n      result.push(value.slice(start, index), encodeURIComponent(replace))\n      start = index + skip + 1\n      replace = ''\n    }\n    if (skip) {\n      index += skip\n      skip = 0\n    }\n  }\n  return result.join('') + value.slice(start)\n}\n","/**\n * @typedef {import('unist').Node} Node\n * @typedef {import('unist').Parent} Parent\n */\n\n/**\n * @typedef {Record<string, unknown>} Props\n * @typedef {null | undefined | string | Props | TestFunctionAnything | Array<string | Props | TestFunctionAnything>} Test\n *   Check for an arbitrary node, unaware of TypeScript inferral.\n *\n * @callback TestFunctionAnything\n *   Check if a node passes a test, unaware of TypeScript inferral.\n * @param {unknown} this\n *   The given context.\n * @param {Node} node\n *   A node.\n * @param {number | null | undefined} [index]\n *   The node’s position in its parent.\n * @param {Parent | null | undefined} [parent]\n *   The node’s parent.\n * @returns {boolean | void}\n *   Whether this node passes the test.\n */\n\n/**\n * @template {Node} Kind\n *   Node type.\n * @typedef {Kind['type'] | Partial<Kind> | TestFunctionPredicate<Kind> | Array<Kind['type'] | Partial<Kind> | TestFunctionPredicate<Kind>>} PredicateTest\n *   Check for a node that can be inferred by TypeScript.\n */\n\n/**\n * Check if a node passes a certain test.\n *\n * @template {Node} Kind\n *   Node type.\n * @callback TestFunctionPredicate\n *   Complex test function for a node that can be inferred by TypeScript.\n * @param {Node} node\n *   A node.\n * @param {number | null | undefined} [index]\n *   The node’s position in its parent.\n * @param {Parent | null | undefined} [parent]\n *   The node’s parent.\n * @returns {node is Kind}\n *   Whether this node passes the test.\n */\n\n/**\n * @callback AssertAnything\n *   Check that an arbitrary value is a node, unaware of TypeScript inferral.\n * @param {unknown} [node]\n *   Anything (typically a node).\n * @param {number | null | undefined} [index]\n *   The node’s position in its parent.\n * @param {Parent | null | undefined} [parent]\n *   The node’s parent.\n * @returns {boolean}\n *   Whether this is a node and passes a test.\n */\n\n/**\n * Check if a node is a node and passes a certain node test.\n *\n * @template {Node} Kind\n *   Node type.\n * @callback AssertPredicate\n *   Check that an arbitrary value is a specific node, aware of TypeScript.\n * @param {unknown} [node]\n *   Anything (typically a node).\n * @param {number | null | undefined} [index]\n *   The node’s position in its parent.\n * @param {Parent | null | undefined} [parent]\n *   The node’s parent.\n * @returns {node is Kind}\n *   Whether this is a node and passes a test.\n */\n\n/**\n * Check if `node` is a `Node` and whether it passes the given test.\n *\n * @param node\n *   Thing to check, typically `Node`.\n * @param test\n *   A check for a specific node.\n * @param index\n *   The node’s position in its parent.\n * @param parent\n *   The node’s parent.\n * @returns\n *   Whether `node` is a node and passes a test.\n */\nexport const is =\n  /**\n   * @type {(\n   *   (() => false) &\n   *   (<Kind extends Node = Node>(node: unknown, test: PredicateTest<Kind>, index: number, parent: Parent, context?: unknown) => node is Kind) &\n   *   (<Kind extends Node = Node>(node: unknown, test: PredicateTest<Kind>, index?: null | undefined, parent?: null | undefined, context?: unknown) => node is Kind) &\n   *   ((node: unknown, test: Test, index: number, parent: Parent, context?: unknown) => boolean) &\n   *   ((node: unknown, test?: Test, index?: null | undefined, parent?: null | undefined, context?: unknown) => boolean)\n   * )}\n   */\n  (\n    /**\n     * @param {unknown} [node]\n     * @param {Test} [test]\n     * @param {number | null | undefined} [index]\n     * @param {Parent | null | undefined} [parent]\n     * @param {unknown} [context]\n     * @returns {boolean}\n     */\n    // eslint-disable-next-line max-params\n    function is(node, test, index, parent, context) {\n      const check = convert(test)\n\n      if (\n        index !== undefined &&\n        index !== null &&\n        (typeof index !== 'number' ||\n          index < 0 ||\n          index === Number.POSITIVE_INFINITY)\n      ) {\n        throw new Error('Expected positive finite index')\n      }\n\n      if (\n        parent !== undefined &&\n        parent !== null &&\n        (!is(parent) || !parent.children)\n      ) {\n        throw new Error('Expected parent node')\n      }\n\n      if (\n        (parent === undefined || parent === null) !==\n        (index === undefined || index === null)\n      ) {\n        throw new Error('Expected both parent and index')\n      }\n\n      // @ts-expect-error Looks like a node.\n      return node && node.type && typeof node.type === 'string'\n        ? Boolean(check.call(context, node, index, parent))\n        : false\n    }\n  )\n\n/**\n * Generate an assertion from a test.\n *\n * Useful if you’re going to test many nodes, for example when creating a\n * utility where something else passes a compatible test.\n *\n * The created function is a bit faster because it expects valid input only:\n * a `node`, `index`, and `parent`.\n *\n * @param test\n *   *   when nullish, checks if `node` is a `Node`.\n *   *   when `string`, works like passing `(node) => node.type === test`.\n *   *   when `function` checks if function passed the node is true.\n *   *   when `object`, checks that all keys in test are in node, and that they have (strictly) equal values.\n *   *   when `array`, checks if any one of the subtests pass.\n * @returns\n *   An assertion.\n */\nexport const convert =\n  /**\n   * @type {(\n   *   (<Kind extends Node>(test: PredicateTest<Kind>) => AssertPredicate<Kind>) &\n   *   ((test?: Test) => AssertAnything)\n   * )}\n   */\n  (\n    /**\n     * @param {Test} [test]\n     * @returns {AssertAnything}\n     */\n    function (test) {\n      if (test === undefined || test === null) {\n        return ok\n      }\n\n      if (typeof test === 'string') {\n        return typeFactory(test)\n      }\n\n      if (typeof test === 'object') {\n        return Array.isArray(test) ? anyFactory(test) : propsFactory(test)\n      }\n\n      if (typeof test === 'function') {\n        return castFactory(test)\n      }\n\n      throw new Error('Expected function, string, or object as test')\n    }\n  )\n\n/**\n * @param {Array<string | Props | TestFunctionAnything>} tests\n * @returns {AssertAnything}\n */\nfunction anyFactory(tests) {\n  /** @type {Array<AssertAnything>} */\n  const checks = []\n  let index = -1\n\n  while (++index < tests.length) {\n    checks[index] = convert(tests[index])\n  }\n\n  return castFactory(any)\n\n  /**\n   * @this {unknown}\n   * @param {Array<unknown>} parameters\n   * @returns {boolean}\n   */\n  function any(...parameters) {\n    let index = -1\n\n    while (++index < checks.length) {\n      if (checks[index].call(this, ...parameters)) return true\n    }\n\n    return false\n  }\n}\n\n/**\n * Turn an object into a test for a node with a certain fields.\n *\n * @param {Props} check\n * @returns {AssertAnything}\n */\nfunction propsFactory(check) {\n  return castFactory(all)\n\n  /**\n   * @param {Node} node\n   * @returns {boolean}\n   */\n  function all(node) {\n    /** @type {string} */\n    let key\n\n    for (key in check) {\n      // @ts-expect-error: hush, it sure works as an index.\n      if (node[key] !== check[key]) return false\n    }\n\n    return true\n  }\n}\n\n/**\n * Turn a string into a test for a node with a certain type.\n *\n * @param {string} check\n * @returns {AssertAnything}\n */\nfunction typeFactory(check) {\n  return castFactory(type)\n\n  /**\n   * @param {Node} node\n   */\n  function type(node) {\n    return node && node.type === check\n  }\n}\n\n/**\n * Turn a custom test into a test for a node that passes that test.\n *\n * @param {TestFunctionAnything} check\n * @returns {AssertAnything}\n */\nfunction castFactory(check) {\n  return assertion\n\n  /**\n   * @this {unknown}\n   * @param {unknown} node\n   * @param {Array<unknown>} parameters\n   * @returns {boolean}\n   */\n  function assertion(node, ...parameters) {\n    return Boolean(\n      node &&\n        typeof node === 'object' &&\n        'type' in node &&\n        // @ts-expect-error: fine.\n        Boolean(check.call(this, node, ...parameters))\n    )\n  }\n}\n\nfunction ok() {\n  return true\n}\n","/**\n * @typedef {import('unist').Node} Node\n * @typedef {import('unist').Parent} Parent\n * @typedef {import('unist-util-is').Test} Test\n */\n\n/**\n * @typedef {boolean | 'skip'} Action\n *   Union of the action types.\n *\n * @typedef {number} Index\n *   Move to the sibling at `index` next (after node itself is completely\n *   traversed).\n *\n *   Useful if mutating the tree, such as removing the node the visitor is\n *   currently on, or any of its previous siblings.\n *   Results less than 0 or greater than or equal to `children.length` stop\n *   traversing the parent.\n *\n * @typedef {[(Action | null | undefined | void)?, (Index | null | undefined)?]} ActionTuple\n *   List with one or two values, the first an action, the second an index.\n *\n * @typedef {Action | ActionTuple | Index | null | undefined | void} VisitorResult\n *   Any value that can be returned from a visitor.\n */\n\n/**\n * @template {Node} [Visited=Node]\n *   Visited node type.\n * @template {Parent} [Ancestor=Parent]\n *   Ancestor type.\n * @callback Visitor\n *   Handle a node (matching `test`, if given).\n *\n *   Visitors are free to transform `node`.\n *   They can also transform the parent of node (the last of `ancestors`).\n *\n *   Replacing `node` itself, if `SKIP` is not returned, still causes its\n *   descendants to be walked (which is a bug).\n *\n *   When adding or removing previous siblings of `node` (or next siblings, in\n *   case of reverse), the `Visitor` should return a new `Index` to specify the\n *   sibling to traverse after `node` is traversed.\n *   Adding or removing next siblings of `node` (or previous siblings, in case\n *   of reverse) is handled as expected without needing to return a new `Index`.\n *\n *   Removing the children property of an ancestor still results in them being\n *   traversed.\n * @param {Visited} node\n *   Found node.\n * @param {Array<Ancestor>} ancestors\n *   Ancestors of `node`.\n * @returns {VisitorResult}\n *   What to do next.\n *\n *   An `Index` is treated as a tuple of `[CONTINUE, Index]`.\n *   An `Action` is treated as a tuple of `[Action]`.\n *\n *   Passing a tuple back only makes sense if the `Action` is `SKIP`.\n *   When the `Action` is `EXIT`, that action can be returned.\n *   When the `Action` is `CONTINUE`, `Index` can be returned.\n */\n\n/**\n * @template {Node} [Tree=Node]\n *   Tree type.\n * @template {Test} [Check=string]\n *   Test type.\n * @typedef {Visitor<import('./complex-types.js').Matches<import('./complex-types.js').InclusiveDescendant<Tree>, Check>, Extract<import('./complex-types.js').InclusiveDescendant<Tree>, Parent>>} BuildVisitor\n *   Build a typed `Visitor` function from a tree and a test.\n *\n *   It will infer which values are passed as `node` and which as `parents`.\n */\n\nimport {convert} from 'unist-util-is'\nimport {color} from './color.js'\n\n/**\n * Continue traversing as normal.\n */\nexport const CONTINUE = true\n\n/**\n * Stop traversing immediately.\n */\nexport const EXIT = false\n\n/**\n * Do not traverse this node’s children.\n */\nexport const SKIP = 'skip'\n\n/**\n * Visit nodes, with ancestral information.\n *\n * This algorithm performs *depth-first* *tree traversal* in *preorder*\n * (**NLR**) or if `reverse` is given, in *reverse preorder* (**NRL**).\n *\n * You can choose for which nodes `visitor` is called by passing a `test`.\n * For complex tests, you should test yourself in `visitor`, as it will be\n * faster and will have improved type information.\n *\n * Walking the tree is an intensive task.\n * Make use of the return values of the visitor when possible.\n * Instead of walking a tree multiple times, walk it once, use `unist-util-is`\n * to check if a node matches, and then perform different operations.\n *\n * You can change the tree.\n * See `Visitor` for more info.\n *\n * @param tree\n *   Tree to traverse.\n * @param test\n *   `unist-util-is`-compatible test\n * @param visitor\n *   Handle each node.\n * @param reverse\n *   Traverse in reverse preorder (NRL) instead of the default preorder (NLR).\n * @returns\n *   Nothing.\n */\nexport const visitParents =\n  /**\n   * @type {(\n   *   (<Tree extends Node, Check extends Test>(tree: Tree, test: Check, visitor: BuildVisitor<Tree, Check>, reverse?: boolean | null | undefined) => void) &\n   *   (<Tree extends Node>(tree: Tree, visitor: BuildVisitor<Tree>, reverse?: boolean | null | undefined) => void)\n   * )}\n   */\n  (\n    /**\n     * @param {Node} tree\n     * @param {Test} test\n     * @param {Visitor<Node>} visitor\n     * @param {boolean | null | undefined} [reverse]\n     * @returns {void}\n     */\n    function (tree, test, visitor, reverse) {\n      if (typeof test === 'function' && typeof visitor !== 'function') {\n        reverse = visitor\n        // @ts-expect-error no visitor given, so `visitor` is test.\n        visitor = test\n        test = null\n      }\n\n      const is = convert(test)\n      const step = reverse ? -1 : 1\n\n      factory(tree, undefined, [])()\n\n      /**\n       * @param {Node} node\n       * @param {number | undefined} index\n       * @param {Array<Parent>} parents\n       */\n      function factory(node, index, parents) {\n        /** @type {Record<string, unknown>} */\n        // @ts-expect-error: hush\n        const value = node && typeof node === 'object' ? node : {}\n\n        if (typeof value.type === 'string') {\n          const name =\n            // `hast`\n            typeof value.tagName === 'string'\n              ? value.tagName\n              : // `xast`\n              typeof value.name === 'string'\n              ? value.name\n              : undefined\n\n          Object.defineProperty(visit, 'name', {\n            value:\n              'node (' + color(node.type + (name ? '<' + name + '>' : '')) + ')'\n          })\n        }\n\n        return visit\n\n        function visit() {\n          /** @type {ActionTuple} */\n          let result = []\n          /** @type {ActionTuple} */\n          let subresult\n          /** @type {number} */\n          let offset\n          /** @type {Array<Parent>} */\n          let grandparents\n\n          if (!test || is(node, index, parents[parents.length - 1] || null)) {\n            result = toResult(visitor(node, parents))\n\n            if (result[0] === EXIT) {\n              return result\n            }\n          }\n\n          // @ts-expect-error looks like a parent.\n          if (node.children && result[0] !== SKIP) {\n            // @ts-expect-error looks like a parent.\n            offset = (reverse ? node.children.length : -1) + step\n            // @ts-expect-error looks like a parent.\n            grandparents = parents.concat(node)\n\n            // @ts-expect-error looks like a parent.\n            while (offset > -1 && offset < node.children.length) {\n              // @ts-expect-error looks like a parent.\n              subresult = factory(node.children[offset], offset, grandparents)()\n\n              if (subresult[0] === EXIT) {\n                return subresult\n              }\n\n              offset =\n                typeof subresult[1] === 'number' ? subresult[1] : offset + step\n            }\n          }\n\n          return result\n        }\n      }\n    }\n  )\n\n/**\n * Turn a return value into a clean result.\n *\n * @param {VisitorResult} value\n *   Valid return values from visitors.\n * @returns {ActionTuple}\n *   Clean result.\n */\nfunction toResult(value) {\n  if (Array.isArray(value)) {\n    return value\n  }\n\n  if (typeof value === 'number') {\n    return [CONTINUE, value]\n  }\n\n  return [value]\n}\n","/**\n * @typedef {import('unist').Node} Node\n * @typedef {import('unist').Parent} Parent\n * @typedef {import('unist-util-is').Test} Test\n * @typedef {import('unist-util-visit-parents').VisitorResult} VisitorResult\n */\n\n/**\n * Check if `Child` can be a child of `Ancestor`.\n *\n * Returns the ancestor when `Child` can be a child of `Ancestor`, or returns\n * `never`.\n *\n * @template {Node} Ancestor\n *   Node type.\n * @template {Node} Child\n *   Node type.\n * @typedef {(\n *   Ancestor extends Parent\n *     ? Child extends Ancestor['children'][number]\n *       ? Ancestor\n *       : never\n *     : never\n * )} ParentsOf\n */\n\n/**\n * @template {Node} [Visited=Node]\n *   Visited node type.\n * @template {Parent} [Ancestor=Parent]\n *   Ancestor type.\n * @callback Visitor\n *   Handle a node (matching `test`, if given).\n *\n *   Visitors are free to transform `node`.\n *   They can also transform `parent`.\n *\n *   Replacing `node` itself, if `SKIP` is not returned, still causes its\n *   descendants to be walked (which is a bug).\n *\n *   When adding or removing previous siblings of `node` (or next siblings, in\n *   case of reverse), the `Visitor` should return a new `Index` to specify the\n *   sibling to traverse after `node` is traversed.\n *   Adding or removing next siblings of `node` (or previous siblings, in case\n *   of reverse) is handled as expected without needing to return a new `Index`.\n *\n *   Removing the children property of `parent` still results in them being\n *   traversed.\n * @param {Visited} node\n *   Found node.\n * @param {Visited extends Node ? number | null : never} index\n *   Index of `node` in `parent`.\n * @param {Ancestor extends Node ? Ancestor | null : never} parent\n *   Parent of `node`.\n * @returns {VisitorResult}\n *   What to do next.\n *\n *   An `Index` is treated as a tuple of `[CONTINUE, Index]`.\n *   An `Action` is treated as a tuple of `[Action]`.\n *\n *   Passing a tuple back only makes sense if the `Action` is `SKIP`.\n *   When the `Action` is `EXIT`, that action can be returned.\n *   When the `Action` is `CONTINUE`, `Index` can be returned.\n */\n\n/**\n * Build a typed `Visitor` function from a node and all possible parents.\n *\n * It will infer which values are passed as `node` and which as `parent`.\n *\n * @template {Node} Visited\n *   Node type.\n * @template {Parent} Ancestor\n *   Parent type.\n * @typedef {Visitor<Visited, ParentsOf<Ancestor, Visited>>} BuildVisitorFromMatch\n */\n\n/**\n * Build a typed `Visitor` function from a list of descendants and a test.\n *\n * It will infer which values are passed as `node` and which as `parent`.\n *\n * @template {Node} Descendant\n *   Node type.\n * @template {Test} Check\n *   Test type.\n * @typedef {(\n *   BuildVisitorFromMatch<\n *     import('unist-util-visit-parents/complex-types.js').Matches<Descendant, Check>,\n *     Extract<Descendant, Parent>\n *   >\n * )} BuildVisitorFromDescendants\n */\n\n/**\n * Build a typed `Visitor` function from a tree and a test.\n *\n * It will infer which values are passed as `node` and which as `parent`.\n *\n * @template {Node} [Tree=Node]\n *   Node type.\n * @template {Test} [Check=string]\n *   Test type.\n * @typedef {(\n *   BuildVisitorFromDescendants<\n *     import('unist-util-visit-parents/complex-types.js').InclusiveDescendant<Tree>,\n *     Check\n *   >\n * )} BuildVisitor\n */\n\nimport {visitParents} from 'unist-util-visit-parents'\n\n/**\n * Visit nodes.\n *\n * This algorithm performs *depth-first* *tree traversal* in *preorder*\n * (**NLR**) or if `reverse` is given, in *reverse preorder* (**NRL**).\n *\n * You can choose for which nodes `visitor` is called by passing a `test`.\n * For complex tests, you should test yourself in `visitor`, as it will be\n * faster and will have improved type information.\n *\n * Walking the tree is an intensive task.\n * Make use of the return values of the visitor when possible.\n * Instead of walking a tree multiple times, walk it once, use `unist-util-is`\n * to check if a node matches, and then perform different operations.\n *\n * You can change the tree.\n * See `Visitor` for more info.\n *\n * @param tree\n *   Tree to traverse.\n * @param test\n *   `unist-util-is`-compatible test\n * @param visitor\n *   Handle each node.\n * @param reverse\n *   Traverse in reverse preorder (NRL) instead of the default preorder (NLR).\n * @returns\n *   Nothing.\n */\nexport const visit =\n  /**\n   * @type {(\n   *   (<Tree extends Node, Check extends Test>(tree: Tree, test: Check, visitor: BuildVisitor<Tree, Check>, reverse?: boolean | null | undefined) => void) &\n   *   (<Tree extends Node>(tree: Tree, visitor: BuildVisitor<Tree>, reverse?: boolean | null | undefined) => void)\n   * )}\n   */\n  (\n    /**\n     * @param {Node} tree\n     * @param {Test} test\n     * @param {Visitor} visitor\n     * @param {boolean | null | undefined} [reverse]\n     * @returns {void}\n     */\n    function (tree, test, visitor, reverse) {\n      if (typeof test === 'function' && typeof visitor !== 'function') {\n        reverse = visitor\n        visitor = test\n        test = null\n      }\n\n      visitParents(tree, test, overload, reverse)\n\n      /**\n       * @param {Node} node\n       * @param {Array<Parent>} parents\n       */\n      function overload(node, parents) {\n        const parent = parents[parents.length - 1]\n        return visitor(\n          node,\n          parent ? parent.children.indexOf(node) : null,\n          parent\n        )\n      }\n    }\n  )\n\nexport {CONTINUE, EXIT, SKIP} from 'unist-util-visit-parents'\n","/**\n * @typedef {import('unist').Position} Position\n * @typedef {import('unist').Node} Node\n * @typedef {import('unist').Point} Point\n */\n\n/**\n * @typedef NodeLike\n * @property {string} type\n * @property {PositionLike | null | undefined} [position]\n *\n * @typedef PositionLike\n * @property {PointLike | null | undefined} [start]\n * @property {PointLike | null | undefined} [end]\n *\n * @typedef PointLike\n * @property {number | null | undefined} [line]\n * @property {number | null | undefined} [column]\n * @property {number | null | undefined} [offset]\n */\n\n/**\n * Get the starting point of `node`.\n *\n * @param node\n *   Node.\n * @returns\n *   Point.\n */\nexport const pointStart = point('start')\n\n/**\n * Get the ending point of `node`.\n *\n * @param node\n *   Node.\n * @returns\n *   Point.\n */\nexport const pointEnd = point('end')\n\n/**\n * Get the positional info of `node`.\n *\n * @param {NodeLike | Node | null | undefined} [node]\n *   Node.\n * @returns {Position}\n *   Position.\n */\nexport function position(node) {\n  return {start: pointStart(node), end: pointEnd(node)}\n}\n\n/**\n * Get the positional info of `node`.\n *\n * @param {'start' | 'end'} type\n *   Side.\n * @returns\n *   Getter.\n */\nfunction point(type) {\n  return point\n\n  /**\n   * Get the point info of `node` at a bound side.\n   *\n   * @param {NodeLike | Node | null | undefined} [node]\n   * @returns {Point}\n   */\n  function point(node) {\n    const point = (node && node.position && node.position[type]) || {}\n\n    // To do: next major: don’t return points when invalid.\n    return {\n      // @ts-expect-error: in practice, null is allowed.\n      line: point.line || null,\n      // @ts-expect-error: in practice, null is allowed.\n      column: point.column || null,\n      // @ts-expect-error: in practice, null is allowed.\n      offset: point.offset > -1 ? point.offset : null\n    }\n  }\n}\n","/**\n * @typedef {import('mdast').Root} Root\n * @typedef {import('mdast').Content} Content\n * @typedef {import('mdast').Definition} Definition\n */\n\n/**\n * @typedef {Root | Content} Node\n *\n * @callback GetDefinition\n *   Get a definition by identifier.\n * @param {string | null | undefined} [identifier]\n *   Identifier of definition.\n * @returns {Definition | null}\n *   Definition corresponding to `identifier` or `null`.\n */\n\nimport {visit} from 'unist-util-visit'\n\nconst own = {}.hasOwnProperty\n\n/**\n * Find definitions in `tree`.\n *\n * Uses CommonMark precedence, which means that earlier definitions are\n * preferred over duplicate later definitions.\n *\n * @param {Node} tree\n *   Tree to check.\n * @returns {GetDefinition}\n *   Getter.\n */\nexport function definitions(tree) {\n  /** @type {Record<string, Definition>} */\n  const cache = Object.create(null)\n\n  if (!tree || !tree.type) {\n    throw new Error('mdast-util-definitions expected node')\n  }\n\n  visit(tree, 'definition', (definition) => {\n    const id = clean(definition.identifier)\n    if (id && !own.call(cache, id)) {\n      cache[id] = definition\n    }\n  })\n\n  return definition\n\n  /** @type {GetDefinition} */\n  function definition(identifier) {\n    const id = clean(identifier)\n    // To do: next major: return `undefined` when not found.\n    return id && own.call(cache, id) ? cache[id] : null\n  }\n}\n\n/**\n * @param {string | null | undefined} [value]\n * @returns {string}\n */\nfunction clean(value) {\n  return String(value || '').toUpperCase()\n}\n","/**\n * @typedef {import('mdast').FootnoteReference} FootnoteReference\n * @typedef {import('hast').Element} Element\n * @typedef {import('../state.js').State} State\n */\n\nimport {normalizeUri} from 'micromark-util-sanitize-uri'\n\n/**\n * Turn an mdast `footnoteReference` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {FootnoteReference} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function footnoteReference(state, node) {\n  const id = String(node.identifier).toUpperCase()\n  const safeId = normalizeUri(id.toLowerCase())\n  const index = state.footnoteOrder.indexOf(id)\n  /** @type {number} */\n  let counter\n\n  if (index === -1) {\n    state.footnoteOrder.push(id)\n    state.footnoteCounts[id] = 1\n    counter = state.footnoteOrder.length\n  } else {\n    state.footnoteCounts[id]++\n    counter = index + 1\n  }\n\n  const reuseCounter = state.footnoteCounts[id]\n\n  /** @type {Element} */\n  const link = {\n    type: 'element',\n    tagName: 'a',\n    properties: {\n      href: '#' + state.clobberPrefix + 'fn-' + safeId,\n      id:\n        state.clobberPrefix +\n        'fnref-' +\n        safeId +\n        (reuseCounter > 1 ? '-' + reuseCounter : ''),\n      dataFootnoteRef: true,\n      ariaDescribedBy: ['footnote-label']\n    },\n    children: [{type: 'text', value: String(counter)}]\n  }\n  state.patch(node, link)\n\n  /** @type {Element} */\n  const sup = {\n    type: 'element',\n    tagName: 'sup',\n    properties: {},\n    children: [link]\n  }\n  state.patch(node, sup)\n  return state.applyData(node, sup)\n}\n","/**\n * @typedef {import('hast').ElementContent} ElementContent\n *\n * @typedef {import('mdast').Content} Content\n * @typedef {import('mdast').Reference} Reference\n * @typedef {import('mdast').Root} Root\n *\n * @typedef {import('./state.js').State} State\n */\n\n/**\n * @typedef {Root | Content} Nodes\n * @typedef {Extract<Nodes, Reference>} References\n */\n\n// To do: next major: always return array.\n\n/**\n * Return the content of a reference without definition as plain text.\n *\n * @param {State} state\n *   Info passed around.\n * @param {References} node\n *   Reference node (image, link).\n * @returns {ElementContent | Array<ElementContent>}\n *   hast content.\n */\nexport function revert(state, node) {\n  const subtype = node.referenceType\n  let suffix = ']'\n\n  if (subtype === 'collapsed') {\n    suffix += '[]'\n  } else if (subtype === 'full') {\n    suffix += '[' + (node.label || node.identifier) + ']'\n  }\n\n  if (node.type === 'imageReference') {\n    return {type: 'text', value: '![' + node.alt + suffix}\n  }\n\n  const contents = state.all(node)\n  const head = contents[0]\n\n  if (head && head.type === 'text') {\n    head.value = '[' + head.value\n  } else {\n    contents.unshift({type: 'text', value: '['})\n  }\n\n  const tail = contents[contents.length - 1]\n\n  if (tail && tail.type === 'text') {\n    tail.value += suffix\n  } else {\n    contents.push({type: 'text', value: suffix})\n  }\n\n  return contents\n}\n","/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('hast').ElementContent} ElementContent\n * @typedef {import('hast').Properties} Properties\n * @typedef {import('mdast').Content} Content\n * @typedef {import('mdast').ListItem} ListItem\n * @typedef {import('mdast').Parent} Parent\n * @typedef {import('mdast').Root} Root\n * @typedef {import('../state.js').State} State\n */\n\n/**\n * @typedef {Root | Content} Nodes\n * @typedef {Extract<Nodes, Parent>} Parents\n */\n\n/**\n * Turn an mdast `listItem` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {ListItem} node\n *   mdast node.\n * @param {Parents | null | undefined} parent\n *   Parent of `node`.\n * @returns {Element}\n *   hast node.\n */\nexport function listItem(state, node, parent) {\n  const results = state.all(node)\n  const loose = parent ? listLoose(parent) : listItemLoose(node)\n  /** @type {Properties} */\n  const properties = {}\n  /** @type {Array<ElementContent>} */\n  const children = []\n\n  if (typeof node.checked === 'boolean') {\n    const head = results[0]\n    /** @type {Element} */\n    let paragraph\n\n    if (head && head.type === 'element' && head.tagName === 'p') {\n      paragraph = head\n    } else {\n      paragraph = {type: 'element', tagName: 'p', properties: {}, children: []}\n      results.unshift(paragraph)\n    }\n\n    if (paragraph.children.length > 0) {\n      paragraph.children.unshift({type: 'text', value: ' '})\n    }\n\n    paragraph.children.unshift({\n      type: 'element',\n      tagName: 'input',\n      properties: {type: 'checkbox', checked: node.checked, disabled: true},\n      children: []\n    })\n\n    // According to github-markdown-css, this class hides bullet.\n    // See: <https://github.com/sindresorhus/github-markdown-css>.\n    properties.className = ['task-list-item']\n  }\n\n  let index = -1\n\n  while (++index < results.length) {\n    const child = results[index]\n\n    // Add eols before nodes, except if this is a loose, first paragraph.\n    if (\n      loose ||\n      index !== 0 ||\n      child.type !== 'element' ||\n      child.tagName !== 'p'\n    ) {\n      children.push({type: 'text', value: '\\n'})\n    }\n\n    if (child.type === 'element' && child.tagName === 'p' && !loose) {\n      children.push(...child.children)\n    } else {\n      children.push(child)\n    }\n  }\n\n  const tail = results[results.length - 1]\n\n  // Add a final eol.\n  if (tail && (loose || tail.type !== 'element' || tail.tagName !== 'p')) {\n    children.push({type: 'text', value: '\\n'})\n  }\n\n  /** @type {Element} */\n  const result = {type: 'element', tagName: 'li', properties, children}\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n\n/**\n * @param {Parents} node\n * @return {Boolean}\n */\nfunction listLoose(node) {\n  let loose = false\n  if (node.type === 'list') {\n    loose = node.spread || false\n    const children = node.children\n    let index = -1\n\n    while (!loose && ++index < children.length) {\n      loose = listItemLoose(children[index])\n    }\n  }\n\n  return loose\n}\n\n/**\n * @param {ListItem} node\n * @return {Boolean}\n */\nfunction listItemLoose(node) {\n  const spread = node.spread\n\n  return spread === undefined || spread === null\n    ? node.children.length > 1\n    : spread\n}\n","const tab = 9 /* `\\t` */\nconst space = 32 /* ` ` */\n\n/**\n * Remove initial and final spaces and tabs at the line breaks in `value`.\n * Does not trim initial and final spaces and tabs of the value itself.\n *\n * @param {string} value\n *   Value to trim.\n * @returns {string}\n *   Trimmed value.\n */\nexport function trimLines(value) {\n  const source = String(value)\n  const search = /\\r?\\n|\\r/g\n  let match = search.exec(source)\n  let last = 0\n  /** @type {Array<string>} */\n  const lines = []\n\n  while (match) {\n    lines.push(\n      trimLine(source.slice(last, match.index), last > 0, true),\n      match[0]\n    )\n\n    last = match.index + match[0].length\n    match = search.exec(source)\n  }\n\n  lines.push(trimLine(source.slice(last), last > 0, false))\n\n  return lines.join('')\n}\n\n/**\n * @param {string} value\n *   Line to trim.\n * @param {boolean} start\n *   Whether to trim the start of the line.\n * @param {boolean} end\n *   Whether to trim the end of the line.\n * @returns {string}\n *   Trimmed line.\n */\nfunction trimLine(value, start, end) {\n  let startIndex = 0\n  let endIndex = value.length\n\n  if (start) {\n    let code = value.codePointAt(startIndex)\n\n    while (code === tab || code === space) {\n      startIndex++\n      code = value.codePointAt(startIndex)\n    }\n  }\n\n  if (end) {\n    let code = value.codePointAt(endIndex - 1)\n\n    while (code === tab || code === space) {\n      endIndex--\n      code = value.codePointAt(endIndex - 1)\n    }\n  }\n\n  return endIndex > startIndex ? value.slice(startIndex, endIndex) : ''\n}\n","import {blockquote} from './blockquote.js'\nimport {hardBreak} from './break.js'\nimport {code} from './code.js'\nimport {strikethrough} from './delete.js'\nimport {emphasis} from './emphasis.js'\nimport {footnoteReference} from './footnote-reference.js'\nimport {footnote} from './footnote.js'\nimport {heading} from './heading.js'\nimport {html} from './html.js'\nimport {imageReference} from './image-reference.js'\nimport {image} from './image.js'\nimport {inlineCode} from './inline-code.js'\nimport {linkReference} from './link-reference.js'\nimport {link} from './link.js'\nimport {listItem} from './list-item.js'\nimport {list} from './list.js'\nimport {paragraph} from './paragraph.js'\nimport {root} from './root.js'\nimport {strong} from './strong.js'\nimport {table} from './table.js'\nimport {tableRow} from './table-row.js'\nimport {tableCell} from './table-cell.js'\nimport {text} from './text.js'\nimport {thematicBreak} from './thematic-break.js'\n\n/**\n * Default handlers for nodes.\n */\nexport const handlers = {\n  blockquote,\n  break: hardBreak,\n  code,\n  delete: strikethrough,\n  emphasis,\n  footnoteReference,\n  footnote,\n  heading,\n  html,\n  imageReference,\n  image,\n  inlineCode,\n  linkReference,\n  link,\n  listItem,\n  list,\n  paragraph,\n  root,\n  strong,\n  table,\n  tableCell,\n  tableRow,\n  text,\n  thematicBreak,\n  toml: ignore,\n  yaml: ignore,\n  definition: ignore,\n  footnoteDefinition: ignore\n}\n\n// Return nothing for nodes that are ignored.\nfunction ignore() {\n  // To do: next major: return `undefined`.\n  return null\n}\n","/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('mdast').Blockquote} Blockquote\n * @typedef {import('../state.js').State} State\n */\n\n/**\n * Turn an mdast `blockquote` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {Blockquote} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function blockquote(state, node) {\n  /** @type {Element} */\n  const result = {\n    type: 'element',\n    tagName: 'blockquote',\n    properties: {},\n    children: state.wrap(state.all(node), true)\n  }\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('hast').Text} Text\n * @typedef {import('mdast').Break} Break\n * @typedef {import('../state.js').State} State\n */\n\n/**\n * Turn an mdast `break` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {Break} node\n *   mdast node.\n * @returns {Array<Element | Text>}\n *   hast element content.\n */\nexport function hardBreak(state, node) {\n  /** @type {Element} */\n  const result = {type: 'element', tagName: 'br', properties: {}, children: []}\n  state.patch(node, result)\n  return [state.applyData(node, result), {type: 'text', value: '\\n'}]\n}\n","/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('hast').Properties} Properties\n * @typedef {import('mdast').Code} Code\n * @typedef {import('../state.js').State} State\n\n */\n\n/**\n * Turn an mdast `code` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {Code} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function code(state, node) {\n  const value = node.value ? node.value + '\\n' : ''\n  // To do: next major, use `node.lang` w/o regex, the splitting’s been going\n  // on for years in remark now.\n  const lang = node.lang ? node.lang.match(/^[^ \\t]+(?=[ \\t]|$)/) : null\n  /** @type {Properties} */\n  const properties = {}\n\n  if (lang) {\n    properties.className = ['language-' + lang]\n  }\n\n  // Create `<code>`.\n  /** @type {Element} */\n  let result = {\n    type: 'element',\n    tagName: 'code',\n    properties,\n    children: [{type: 'text', value}]\n  }\n\n  if (node.meta) {\n    result.data = {meta: node.meta}\n  }\n\n  state.patch(node, result)\n  result = state.applyData(node, result)\n\n  // Create `<pre>`.\n  result = {type: 'element', tagName: 'pre', properties: {}, children: [result]}\n  state.patch(node, result)\n  return result\n}\n","/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('mdast').Delete} Delete\n * @typedef {import('../state.js').State} State\n\n */\n\n/**\n * Turn an mdast `delete` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {Delete} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function strikethrough(state, node) {\n  /** @type {Element} */\n  const result = {\n    type: 'element',\n    tagName: 'del',\n    properties: {},\n    children: state.all(node)\n  }\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('mdast').Emphasis} Emphasis\n * @typedef {import('../state.js').State} State\n */\n\n/**\n * Turn an mdast `emphasis` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {Emphasis} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function emphasis(state, node) {\n  /** @type {Element} */\n  const result = {\n    type: 'element',\n    tagName: 'em',\n    properties: {},\n    children: state.all(node)\n  }\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('mdast').Footnote} Footnote\n * @typedef {import('../state.js').State} State\n */\n\nimport {footnoteReference} from './footnote-reference.js'\n\n// To do: when both:\n// * <https://github.com/micromark/micromark-extension-footnote>\n// * <https://github.com/syntax-tree/mdast-util-footnote>\n// …are archived, remove this (also from mdast).\n// These inline notes are not used in GFM.\n\n/**\n * Turn an mdast `footnote` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {Footnote} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function footnote(state, node) {\n  const footnoteById = state.footnoteById\n  let no = 1\n\n  while (no in footnoteById) no++\n\n  const identifier = String(no)\n\n  footnoteById[identifier] = {\n    type: 'footnoteDefinition',\n    identifier,\n    children: [{type: 'paragraph', children: node.children}],\n    position: node.position\n  }\n\n  return footnoteReference(state, {\n    type: 'footnoteReference',\n    identifier,\n    position: node.position\n  })\n}\n","/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('mdast').Heading} Heading\n * @typedef {import('../state.js').State} State\n */\n\n/**\n * Turn an mdast `heading` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {Heading} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function heading(state, node) {\n  /** @type {Element} */\n  const result = {\n    type: 'element',\n    tagName: 'h' + node.depth,\n    properties: {},\n    children: state.all(node)\n  }\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('mdast').HTML} Html\n * @typedef {import('../state.js').State} State\n * @typedef {import('../../index.js').Raw} Raw\n */\n\n/**\n * Turn an mdast `html` node into hast (`raw` node in dangerous mode, otherwise\n * nothing).\n *\n * @param {State} state\n *   Info passed around.\n * @param {Html} node\n *   mdast node.\n * @returns {Raw | Element | null}\n *   hast node.\n */\nexport function html(state, node) {\n  if (state.dangerous) {\n    /** @type {Raw} */\n    const result = {type: 'raw', value: node.value}\n    state.patch(node, result)\n    return state.applyData(node, result)\n  }\n\n  // To do: next major: return `undefined`.\n  return null\n}\n","/**\n * @typedef {import('hast').ElementContent} ElementContent\n * @typedef {import('hast').Element} Element\n * @typedef {import('hast').Properties} Properties\n * @typedef {import('mdast').ImageReference} ImageReference\n * @typedef {import('../state.js').State} State\n */\n\nimport {normalizeUri} from 'micromark-util-sanitize-uri'\nimport {revert} from '../revert.js'\n\n/**\n * Turn an mdast `imageReference` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {ImageReference} node\n *   mdast node.\n * @returns {ElementContent | Array<ElementContent>}\n *   hast node.\n */\nexport function imageReference(state, node) {\n  const def = state.definition(node.identifier)\n\n  if (!def) {\n    return revert(state, node)\n  }\n\n  /** @type {Properties} */\n  const properties = {src: normalizeUri(def.url || ''), alt: node.alt}\n\n  if (def.title !== null && def.title !== undefined) {\n    properties.title = def.title\n  }\n\n  /** @type {Element} */\n  const result = {type: 'element', tagName: 'img', properties, children: []}\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('hast').Properties} Properties\n * @typedef {import('mdast').Image} Image\n * @typedef {import('../state.js').State} State\n */\n\nimport {normalizeUri} from 'micromark-util-sanitize-uri'\n\n/**\n * Turn an mdast `image` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {Image} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function image(state, node) {\n  /** @type {Properties} */\n  const properties = {src: normalizeUri(node.url)}\n\n  if (node.alt !== null && node.alt !== undefined) {\n    properties.alt = node.alt\n  }\n\n  if (node.title !== null && node.title !== undefined) {\n    properties.title = node.title\n  }\n\n  /** @type {Element} */\n  const result = {type: 'element', tagName: 'img', properties, children: []}\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('hast').Text} Text\n * @typedef {import('mdast').InlineCode} InlineCode\n * @typedef {import('../state.js').State} State\n */\n\n/**\n * Turn an mdast `inlineCode` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {InlineCode} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function inlineCode(state, node) {\n  /** @type {Text} */\n  const text = {type: 'text', value: node.value.replace(/\\r?\\n|\\r/g, ' ')}\n  state.patch(node, text)\n\n  /** @type {Element} */\n  const result = {\n    type: 'element',\n    tagName: 'code',\n    properties: {},\n    children: [text]\n  }\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('hast').ElementContent} ElementContent\n * @typedef {import('hast').Properties} Properties\n * @typedef {import('mdast').LinkReference} LinkReference\n * @typedef {import('../state.js').State} State\n */\n\nimport {normalizeUri} from 'micromark-util-sanitize-uri'\nimport {revert} from '../revert.js'\n\n/**\n * Turn an mdast `linkReference` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {LinkReference} node\n *   mdast node.\n * @returns {ElementContent | Array<ElementContent>}\n *   hast node.\n */\nexport function linkReference(state, node) {\n  const def = state.definition(node.identifier)\n\n  if (!def) {\n    return revert(state, node)\n  }\n\n  /** @type {Properties} */\n  const properties = {href: normalizeUri(def.url || '')}\n\n  if (def.title !== null && def.title !== undefined) {\n    properties.title = def.title\n  }\n\n  /** @type {Element} */\n  const result = {\n    type: 'element',\n    tagName: 'a',\n    properties,\n    children: state.all(node)\n  }\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('hast').Properties} Properties\n * @typedef {import('mdast').Link} Link\n * @typedef {import('../state.js').State} State\n */\n\nimport {normalizeUri} from 'micromark-util-sanitize-uri'\n\n/**\n * Turn an mdast `link` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {Link} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function link(state, node) {\n  /** @type {Properties} */\n  const properties = {href: normalizeUri(node.url)}\n\n  if (node.title !== null && node.title !== undefined) {\n    properties.title = node.title\n  }\n\n  /** @type {Element} */\n  const result = {\n    type: 'element',\n    tagName: 'a',\n    properties,\n    children: state.all(node)\n  }\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('hast').Properties} Properties\n * @typedef {import('mdast').List} List\n * @typedef {import('../state.js').State} State\n */\n\n/**\n * Turn an mdast `list` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {List} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function list(state, node) {\n  /** @type {Properties} */\n  const properties = {}\n  const results = state.all(node)\n  let index = -1\n\n  if (typeof node.start === 'number' && node.start !== 1) {\n    properties.start = node.start\n  }\n\n  // Like GitHub, add a class for custom styling.\n  while (++index < results.length) {\n    const child = results[index]\n\n    if (\n      child.type === 'element' &&\n      child.tagName === 'li' &&\n      child.properties &&\n      Array.isArray(child.properties.className) &&\n      child.properties.className.includes('task-list-item')\n    ) {\n      properties.className = ['contains-task-list']\n      break\n    }\n  }\n\n  /** @type {Element} */\n  const result = {\n    type: 'element',\n    tagName: node.ordered ? 'ol' : 'ul',\n    properties,\n    children: state.wrap(results, true)\n  }\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('mdast').Paragraph} Paragraph\n * @typedef {import('../state.js').State} State\n */\n\n/**\n * Turn an mdast `paragraph` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {Paragraph} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function paragraph(state, node) {\n  /** @type {Element} */\n  const result = {\n    type: 'element',\n    tagName: 'p',\n    properties: {},\n    children: state.all(node)\n  }\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","/**\n * @typedef {import('hast').Root} HastRoot\n * @typedef {import('hast').Element} HastElement\n * @typedef {import('mdast').Root} MdastRoot\n * @typedef {import('../state.js').State} State\n */\n\n/**\n * Turn an mdast `root` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {MdastRoot} node\n *   mdast node.\n * @returns {HastRoot | HastElement}\n *   hast node.\n */\nexport function root(state, node) {\n  /** @type {HastRoot} */\n  const result = {type: 'root', children: state.wrap(state.all(node))}\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('mdast').Strong} Strong\n * @typedef {import('../state.js').State} State\n */\n\n/**\n * Turn an mdast `strong` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {Strong} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function strong(state, node) {\n  /** @type {Element} */\n  const result = {\n    type: 'element',\n    tagName: 'strong',\n    properties: {},\n    children: state.all(node)\n  }\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('mdast').Table} Table\n * @typedef {import('../state.js').State} State\n */\n\nimport {pointStart, pointEnd} from 'unist-util-position'\n\n/**\n * Turn an mdast `table` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {Table} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function table(state, node) {\n  const rows = state.all(node)\n  const firstRow = rows.shift()\n  /** @type {Array<Element>} */\n  const tableContent = []\n\n  if (firstRow) {\n    /** @type {Element} */\n    const head = {\n      type: 'element',\n      tagName: 'thead',\n      properties: {},\n      children: state.wrap([firstRow], true)\n    }\n    state.patch(node.children[0], head)\n    tableContent.push(head)\n  }\n\n  if (rows.length > 0) {\n    /** @type {Element} */\n    const body = {\n      type: 'element',\n      tagName: 'tbody',\n      properties: {},\n      children: state.wrap(rows, true)\n    }\n\n    const start = pointStart(node.children[1])\n    const end = pointEnd(node.children[node.children.length - 1])\n    if (start.line && end.line) body.position = {start, end}\n    tableContent.push(body)\n  }\n\n  /** @type {Element} */\n  const result = {\n    type: 'element',\n    tagName: 'table',\n    properties: {},\n    children: state.wrap(tableContent, true)\n  }\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('mdast').TableCell} TableCell\n * @typedef {import('../state.js').State} State\n */\n\n/**\n * Turn an mdast `tableCell` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {TableCell} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function tableCell(state, node) {\n  // Note: this function is normally not called: see `table-row` for how rows\n  // and their cells are compiled.\n  /** @type {Element} */\n  const result = {\n    type: 'element',\n    tagName: 'td', // Assume body cell.\n    properties: {},\n    children: state.all(node)\n  }\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","/**\n * @typedef {import('hast').Properties} Properties\n * @typedef {import('hast').Element} Element\n * @typedef {import('hast').ElementContent} ElementContent\n * @typedef {import('mdast').Content} Content\n * @typedef {import('mdast').Parent} Parent\n * @typedef {import('mdast').Root} Root\n * @typedef {import('mdast').TableRow} TableRow\n * @typedef {import('../state.js').State} State\n */\n\n/**\n * @typedef {Root | Content} Nodes\n * @typedef {Extract<Nodes, Parent>} Parents\n */\n\n/**\n * Turn an mdast `tableRow` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {TableRow} node\n *   mdast node.\n * @param {Parents | null | undefined} parent\n *   Parent of `node`.\n * @returns {Element}\n *   hast node.\n */\nexport function tableRow(state, node, parent) {\n  const siblings = parent ? parent.children : undefined\n  // Generate a body row when without parent.\n  const rowIndex = siblings ? siblings.indexOf(node) : 1\n  const tagName = rowIndex === 0 ? 'th' : 'td'\n  const align = parent && parent.type === 'table' ? parent.align : undefined\n  const length = align ? align.length : node.children.length\n  let cellIndex = -1\n  /** @type {Array<ElementContent>} */\n  const cells = []\n\n  while (++cellIndex < length) {\n    // Note: can also be undefined.\n    const cell = node.children[cellIndex]\n    /** @type {Properties} */\n    const properties = {}\n    const alignValue = align ? align[cellIndex] : undefined\n\n    if (alignValue) {\n      properties.align = alignValue\n    }\n\n    /** @type {Element} */\n    let result = {type: 'element', tagName, properties, children: []}\n\n    if (cell) {\n      result.children = state.all(cell)\n      state.patch(cell, result)\n      result = state.applyData(node, result)\n    }\n\n    cells.push(result)\n  }\n\n  /** @type {Element} */\n  const result = {\n    type: 'element',\n    tagName: 'tr',\n    properties: {},\n    children: state.wrap(cells, true)\n  }\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","/**\n * @typedef {import('hast').Element} HastElement\n * @typedef {import('hast').Text} HastText\n * @typedef {import('mdast').Text} MdastText\n * @typedef {import('../state.js').State} State\n */\n\nimport {trimLines} from 'trim-lines'\n\n/**\n * Turn an mdast `text` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {MdastText} node\n *   mdast node.\n * @returns {HastText | HastElement}\n *   hast node.\n */\nexport function text(state, node) {\n  /** @type {HastText} */\n  const result = {type: 'text', value: trimLines(String(node.value))}\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('mdast').ThematicBreak} ThematicBreak\n * @typedef {import('../state.js').State} State\n */\n\n/**\n * Turn an mdast `thematicBreak` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {ThematicBreak} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function thematicBreak(state, node) {\n  /** @type {Element} */\n  const result = {\n    type: 'element',\n    tagName: 'hr',\n    properties: {},\n    children: []\n  }\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","/**\n * @typedef {import('hast').Content} HastContent\n * @typedef {import('hast').Element} HastElement\n * @typedef {import('hast').ElementContent} HastElementContent\n * @typedef {import('hast').Properties} HastProperties\n * @typedef {import('hast').Root} HastRoot\n * @typedef {import('hast').Text} HastText\n *\n * @typedef {import('mdast').Content} MdastContent\n * @typedef {import('mdast').Definition} MdastDefinition\n * @typedef {import('mdast').FootnoteDefinition} MdastFootnoteDefinition\n * @typedef {import('mdast').Parent} MdastParent\n * @typedef {import('mdast').Root} MdastRoot\n */\n\n/**\n * @typedef {HastRoot | HastContent} HastNodes\n * @typedef {MdastRoot | MdastContent} MdastNodes\n * @typedef {Extract<MdastNodes, MdastParent>} MdastParents\n *\n * @typedef EmbeddedHastFields\n *   hast fields.\n * @property {string | null | undefined} [hName]\n *   Generate a specific element with this tag name instead.\n * @property {HastProperties | null | undefined} [hProperties]\n *   Generate an element with these properties instead.\n * @property {Array<HastElementContent> | null | undefined} [hChildren]\n *   Generate an element with this content instead.\n *\n * @typedef {Record<string, unknown> & EmbeddedHastFields} MdastData\n *   mdast data with embedded hast fields.\n *\n * @typedef {MdastNodes & {data?: MdastData | null | undefined}} MdastNodeWithData\n *   mdast node with embedded hast data.\n *\n * @typedef PointLike\n *   Point-like value.\n * @property {number | null | undefined} [line]\n *   Line.\n * @property {number | null | undefined} [column]\n *   Column.\n * @property {number | null | undefined} [offset]\n *   Offset.\n *\n * @typedef PositionLike\n *   Position-like value.\n * @property {PointLike | null | undefined} [start]\n *   Point-like value.\n * @property {PointLike | null | undefined} [end]\n *   Point-like value.\n *\n * @callback Handler\n *   Handle a node.\n * @param {State} state\n *   Info passed around.\n * @param {any} node\n *   mdast node to handle.\n * @param {MdastParents | null | undefined} parent\n *   Parent of `node`.\n * @returns {HastElementContent | Array<HastElementContent> | null | undefined}\n *   hast node.\n *\n * @callback HFunctionProps\n *   Signature of `state` for when props are passed.\n * @param {MdastNodes | PositionLike | null | undefined} node\n *   mdast node or unist position.\n * @param {string} tagName\n *   HTML tag name.\n * @param {HastProperties} props\n *   Properties.\n * @param {Array<HastElementContent> | null | undefined} [children]\n *   hast content.\n * @returns {HastElement}\n *   Compiled element.\n *\n * @callback HFunctionNoProps\n *   Signature of `state` for when no props are passed.\n * @param {MdastNodes | PositionLike | null | undefined} node\n *   mdast node or unist position.\n * @param {string} tagName\n *   HTML tag name.\n * @param {Array<HastElementContent> | null | undefined} [children]\n *   hast content.\n * @returns {HastElement}\n *   Compiled element.\n *\n * @typedef HFields\n *   Info on `state`.\n * @property {boolean} dangerous\n *   Whether HTML is allowed.\n * @property {string} clobberPrefix\n *   Prefix to use to prevent DOM clobbering.\n * @property {string} footnoteLabel\n *   Label to use to introduce the footnote section.\n * @property {string} footnoteLabelTagName\n *   HTML used for the footnote label.\n * @property {HastProperties} footnoteLabelProperties\n *   Properties on the HTML tag used for the footnote label.\n * @property {string} footnoteBackLabel\n *   Label to use from backreferences back to their footnote call.\n * @property {(identifier: string) => MdastDefinition | null} definition\n *   Definition cache.\n * @property {Record<string, MdastFootnoteDefinition>} footnoteById\n *   Footnote definitions by their identifier.\n * @property {Array<string>} footnoteOrder\n *   Identifiers of order when footnote calls first appear in tree order.\n * @property {Record<string, number>} footnoteCounts\n *   Counts for how often the same footnote was called.\n * @property {Handlers} handlers\n *   Applied handlers.\n * @property {Handler} unknownHandler\n *   Handler for any none not in `passThrough` or otherwise handled.\n * @property {(from: MdastNodes, node: HastNodes) => void} patch\n *   Copy a node’s positional info.\n * @property {<Type extends HastNodes>(from: MdastNodes, to: Type) => Type | HastElement} applyData\n *   Honor the `data` of `from`, and generate an element instead of `node`.\n * @property {(node: MdastNodes, parent: MdastParents | null | undefined) => HastElementContent | Array<HastElementContent> | null | undefined} one\n *   Transform an mdast node to hast.\n * @property {(node: MdastNodes) => Array<HastElementContent>} all\n *   Transform the children of an mdast parent to hast.\n * @property {<Type extends HastContent>(nodes: Array<Type>, loose?: boolean | null | undefined) => Array<Type | HastText>} wrap\n *   Wrap `nodes` with line endings between each node, adds initial/final line endings when `loose`.\n * @property {(left: MdastNodeWithData | PositionLike | null | undefined, right: HastElementContent) => HastElementContent} augment\n *   Like `state` but lower-level and usable on non-elements.\n *   Deprecated: use `patch` and `applyData`.\n * @property {Array<string>} passThrough\n *   List of node types to pass through untouched (except for their children).\n *\n * @typedef Options\n *   Configuration (optional).\n * @property {boolean | null | undefined} [allowDangerousHtml=false]\n *   Whether to persist raw HTML in markdown in the hast tree.\n * @property {string | null | undefined} [clobberPrefix='user-content-']\n *   Prefix to use before the `id` attribute on footnotes to prevent it from\n *   *clobbering*.\n * @property {string | null | undefined} [footnoteBackLabel='Back to content']\n *   Label to use from backreferences back to their footnote call (affects\n *   screen readers).\n * @property {string | null | undefined} [footnoteLabel='Footnotes']\n *   Label to use for the footnotes section (affects screen readers).\n * @property {HastProperties | null | undefined} [footnoteLabelProperties={className: ['sr-only']}]\n *   Properties to use on the footnote label (note that `id: 'footnote-label'`\n *   is always added as footnote calls use it with `aria-describedby` to\n *   provide an accessible label).\n * @property {string | null | undefined} [footnoteLabelTagName='h2']\n *   Tag name to use for the footnote label.\n * @property {Handlers | null | undefined} [handlers]\n *   Extra handlers for nodes.\n * @property {Array<string> | null | undefined} [passThrough]\n *   List of custom mdast node types to pass through (keep) in hast (note that\n *   the node itself is passed, but eventual children are transformed).\n * @property {Handler | null | undefined} [unknownHandler]\n *   Handler for all unknown nodes.\n *\n * @typedef {Record<string, Handler>} Handlers\n *   Handle nodes.\n *\n * @typedef {HFunctionProps & HFunctionNoProps & HFields} State\n *   Info passed around.\n */\n\nimport {visit} from 'unist-util-visit'\nimport {position, pointStart, pointEnd} from 'unist-util-position'\nimport {generated} from 'unist-util-generated'\nimport {definitions} from 'mdast-util-definitions'\nimport {handlers} from './handlers/index.js'\n\nconst own = {}.hasOwnProperty\n\n/**\n * Create `state` from an mdast tree.\n *\n * @param {MdastNodes} tree\n *   mdast node to transform.\n * @param {Options | null | undefined} [options]\n *   Configuration.\n * @returns {State}\n *   `state` function.\n */\nexport function createState(tree, options) {\n  const settings = options || {}\n  const dangerous = settings.allowDangerousHtml || false\n  /** @type {Record<string, MdastFootnoteDefinition>} */\n  const footnoteById = {}\n\n  // To do: next major: add `options` to state, remove:\n  // `dangerous`, `clobberPrefix`, `footnoteLabel`, `footnoteLabelTagName`,\n  // `footnoteLabelProperties`, `footnoteBackLabel`, `passThrough`,\n  // `unknownHandler`.\n\n  // To do: next major: move to `state.options.allowDangerousHtml`.\n  state.dangerous = dangerous\n  // To do: next major: move to `state.options`.\n  state.clobberPrefix =\n    settings.clobberPrefix === undefined || settings.clobberPrefix === null\n      ? 'user-content-'\n      : settings.clobberPrefix\n  // To do: next major: move to `state.options`.\n  state.footnoteLabel = settings.footnoteLabel || 'Footnotes'\n  // To do: next major: move to `state.options`.\n  state.footnoteLabelTagName = settings.footnoteLabelTagName || 'h2'\n  // To do: next major: move to `state.options`.\n  state.footnoteLabelProperties = settings.footnoteLabelProperties || {\n    className: ['sr-only']\n  }\n  // To do: next major: move to `state.options`.\n  state.footnoteBackLabel = settings.footnoteBackLabel || 'Back to content'\n  // To do: next major: move to `state.options`.\n  state.unknownHandler = settings.unknownHandler\n  // To do: next major: move to `state.options`.\n  state.passThrough = settings.passThrough\n\n  state.handlers = {...handlers, ...settings.handlers}\n\n  // To do: next major: replace utility with `definitionById` object, so we\n  // only walk once (as we need footnotes too).\n  state.definition = definitions(tree)\n  state.footnoteById = footnoteById\n  /** @type {Array<string>} */\n  state.footnoteOrder = []\n  /** @type {Record<string, number>} */\n  state.footnoteCounts = {}\n\n  state.patch = patch\n  state.applyData = applyData\n  state.one = oneBound\n  state.all = allBound\n  state.wrap = wrap\n  // To do: next major: remove `augment`.\n  state.augment = augment\n\n  visit(tree, 'footnoteDefinition', (definition) => {\n    const id = String(definition.identifier).toUpperCase()\n\n    // Mimick CM behavior of link definitions.\n    // See: <https://github.com/syntax-tree/mdast-util-definitions/blob/8290999/index.js#L26>.\n    if (!own.call(footnoteById, id)) {\n      footnoteById[id] = definition\n    }\n  })\n\n  // @ts-expect-error Hush, it’s fine!\n  return state\n\n  /**\n   * Finalise the created `right`, a hast node, from `left`, an mdast node.\n   *\n   * @param {MdastNodeWithData | PositionLike | null | undefined} left\n   * @param {HastElementContent} right\n   * @returns {HastElementContent}\n   */\n  /* c8 ignore start */\n  // To do: next major: remove.\n  function augment(left, right) {\n    // Handle `data.hName`, `data.hProperties, `data.hChildren`.\n    if (left && 'data' in left && left.data) {\n      /** @type {MdastData} */\n      const data = left.data\n\n      if (data.hName) {\n        if (right.type !== 'element') {\n          right = {\n            type: 'element',\n            tagName: '',\n            properties: {},\n            children: []\n          }\n        }\n\n        right.tagName = data.hName\n      }\n\n      if (right.type === 'element' && data.hProperties) {\n        right.properties = {...right.properties, ...data.hProperties}\n      }\n\n      if ('children' in right && right.children && data.hChildren) {\n        right.children = data.hChildren\n      }\n    }\n\n    if (left) {\n      const ctx = 'type' in left ? left : {position: left}\n\n      if (!generated(ctx)) {\n        // @ts-expect-error: fine.\n        right.position = {start: pointStart(ctx), end: pointEnd(ctx)}\n      }\n    }\n\n    return right\n  }\n  /* c8 ignore stop */\n\n  /**\n   * Create an element for `node`.\n   *\n   * @type {HFunctionProps}\n   */\n  /* c8 ignore start */\n  // To do: next major: remove.\n  function state(node, tagName, props, children) {\n    if (Array.isArray(props)) {\n      children = props\n      props = {}\n    }\n\n    // @ts-expect-error augmenting an element yields an element.\n    return augment(node, {\n      type: 'element',\n      tagName,\n      properties: props || {},\n      children: children || []\n    })\n  }\n  /* c8 ignore stop */\n\n  /**\n   * Transform an mdast node into a hast node.\n   *\n   * @param {MdastNodes} node\n   *   mdast node.\n   * @param {MdastParents | null | undefined} [parent]\n   *   Parent of `node`.\n   * @returns {HastElementContent | Array<HastElementContent> | null | undefined}\n   *   Resulting hast node.\n   */\n  function oneBound(node, parent) {\n    // @ts-expect-error: that’s a state :)\n    return one(state, node, parent)\n  }\n\n  /**\n   * Transform the children of an mdast node into hast nodes.\n   *\n   * @param {MdastNodes} parent\n   *   mdast node to compile\n   * @returns {Array<HastElementContent>}\n   *   Resulting hast nodes.\n   */\n  function allBound(parent) {\n    // @ts-expect-error: that’s a state :)\n    return all(state, parent)\n  }\n}\n\n/**\n * Copy a node’s positional info.\n *\n * @param {MdastNodes} from\n *   mdast node to copy from.\n * @param {HastNodes} to\n *   hast node to copy into.\n * @returns {void}\n *   Nothing.\n */\nfunction patch(from, to) {\n  if (from.position) to.position = position(from)\n}\n\n/**\n * Honor the `data` of `from` and maybe generate an element instead of `to`.\n *\n * @template {HastNodes} Type\n *   Node type.\n * @param {MdastNodes} from\n *   mdast node to use data from.\n * @param {Type} to\n *   hast node to change.\n * @returns {Type | HastElement}\n *   Nothing.\n */\nfunction applyData(from, to) {\n  /** @type {Type | HastElement} */\n  let result = to\n\n  // Handle `data.hName`, `data.hProperties, `data.hChildren`.\n  if (from && from.data) {\n    const hName = from.data.hName\n    const hChildren = from.data.hChildren\n    const hProperties = from.data.hProperties\n\n    if (typeof hName === 'string') {\n      // Transforming the node resulted in an element with a different name\n      // than wanted:\n      if (result.type === 'element') {\n        result.tagName = hName\n      }\n      // Transforming the node resulted in a non-element, which happens for\n      // raw, text, and root nodes (unless custom handlers are passed).\n      // The intent is likely to keep the content around (otherwise: pass\n      // `hChildren`).\n      else {\n        result = {\n          type: 'element',\n          tagName: hName,\n          properties: {},\n          children: []\n        }\n\n        // To do: next major: take the children from the `root`, or inject the\n        // raw/text/comment or so into the element?\n        // if ('children' in node) {\n        //   // @ts-expect-error: assume `children` are allowed in elements.\n        //   result.children = node.children\n        // } else {\n        //   // @ts-expect-error: assume `node` is allowed in elements.\n        //   result.children.push(node)\n        // }\n      }\n    }\n\n    if (result.type === 'element' && hProperties) {\n      result.properties = {...result.properties, ...hProperties}\n    }\n\n    if (\n      'children' in result &&\n      result.children &&\n      hChildren !== null &&\n      hChildren !== undefined\n    ) {\n      // @ts-expect-error: assume valid children are defined.\n      result.children = hChildren\n    }\n  }\n\n  return result\n}\n\n/**\n * Transform an mdast node into a hast node.\n *\n * @param {State} state\n *   Info passed around.\n * @param {MdastNodes} node\n *   mdast node.\n * @param {MdastParents | null | undefined} [parent]\n *   Parent of `node`.\n * @returns {HastElementContent | Array<HastElementContent> | null | undefined}\n *   Resulting hast node.\n */\n// To do: next major: do not expose, keep bound.\nexport function one(state, node, parent) {\n  const type = node && node.type\n\n  // Fail on non-nodes.\n  if (!type) {\n    throw new Error('Expected node, got `' + node + '`')\n  }\n\n  if (own.call(state.handlers, type)) {\n    return state.handlers[type](state, node, parent)\n  }\n\n  if (state.passThrough && state.passThrough.includes(type)) {\n    // To do: next major: deep clone.\n    // @ts-expect-error: types of passed through nodes are expected to be added manually.\n    return 'children' in node ? {...node, children: all(state, node)} : node\n  }\n\n  if (state.unknownHandler) {\n    return state.unknownHandler(state, node, parent)\n  }\n\n  return defaultUnknownHandler(state, node)\n}\n\n/**\n * Transform the children of an mdast node into hast nodes.\n *\n * @param {State} state\n *   Info passed around.\n * @param {MdastNodes} parent\n *   mdast node to compile\n * @returns {Array<HastElementContent>}\n *   Resulting hast nodes.\n */\n// To do: next major: do not expose, keep bound.\nexport function all(state, parent) {\n  /** @type {Array<HastElementContent>} */\n  const values = []\n\n  if ('children' in parent) {\n    const nodes = parent.children\n    let index = -1\n    while (++index < nodes.length) {\n      const result = one(state, nodes[index], parent)\n\n      // To do: see if we van clean this? Can we merge texts?\n      if (result) {\n        if (index && nodes[index - 1].type === 'break') {\n          if (!Array.isArray(result) && result.type === 'text') {\n            result.value = result.value.replace(/^\\s+/, '')\n          }\n\n          if (!Array.isArray(result) && result.type === 'element') {\n            const head = result.children[0]\n\n            if (head && head.type === 'text') {\n              head.value = head.value.replace(/^\\s+/, '')\n            }\n          }\n        }\n\n        if (Array.isArray(result)) {\n          values.push(...result)\n        } else {\n          values.push(result)\n        }\n      }\n    }\n  }\n\n  return values\n}\n\n/**\n * Transform an unknown node.\n *\n * @param {State} state\n *   Info passed around.\n * @param {MdastNodes} node\n *   Unknown mdast node.\n * @returns {HastText | HastElement}\n *   Resulting hast node.\n */\nfunction defaultUnknownHandler(state, node) {\n  const data = node.data || {}\n  /** @type {HastText | HastElement} */\n  const result =\n    'value' in node &&\n    !(own.call(data, 'hProperties') || own.call(data, 'hChildren'))\n      ? {type: 'text', value: node.value}\n      : {\n          type: 'element',\n          tagName: 'div',\n          properties: {},\n          children: all(state, node)\n        }\n\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n\n/**\n * Wrap `nodes` with line endings between each node.\n *\n * @template {HastContent} Type\n *   Node type.\n * @param {Array<Type>} nodes\n *   List of nodes to wrap.\n * @param {boolean | null | undefined} [loose=false]\n *   Whether to add line endings at start and end.\n * @returns {Array<Type | HastText>}\n *   Wrapped nodes.\n */\nexport function wrap(nodes, loose) {\n  /** @type {Array<Type | HastText>} */\n  const result = []\n  let index = -1\n\n  if (loose) {\n    result.push({type: 'text', value: '\\n'})\n  }\n\n  while (++index < nodes.length) {\n    if (index) result.push({type: 'text', value: '\\n'})\n    result.push(nodes[index])\n  }\n\n  if (loose && nodes.length > 0) {\n    result.push({type: 'text', value: '\\n'})\n  }\n\n  return result\n}\n","/**\n * @typedef PointLike\n * @property {number | null | undefined} [line]\n * @property {number | null | undefined} [column]\n * @property {number | null | undefined} [offset]\n *\n * @typedef PositionLike\n * @property {PointLike | null | undefined} [start]\n * @property {PointLike | null | undefined} [end]\n *\n * @typedef NodeLike\n * @property {PositionLike | null | undefined} [position]\n */\n\n/**\n * Check if `node` is generated.\n *\n * @param {NodeLike | null | undefined} [node]\n *   Node to check.\n * @returns {boolean}\n *   Whether `node` is generated (does not have positional info).\n */\nexport function generated(node) {\n  return (\n    !node ||\n    !node.position ||\n    !node.position.start ||\n    !node.position.start.line ||\n    !node.position.start.column ||\n    !node.position.end ||\n    !node.position.end.line ||\n    !node.position.end.column\n  )\n}\n","/**\n * @typedef {import('hast').Content} HastContent\n * @typedef {import('hast').Root} HastRoot\n *\n * @typedef {import('mdast').Content} MdastContent\n * @typedef {import('mdast').Root} MdastRoot\n *\n * @typedef {import('./state.js').Options} Options\n */\n\n/**\n * @typedef {HastRoot | HastContent} HastNodes\n * @typedef {MdastRoot | MdastContent} MdastNodes\n */\n\nimport {footer} from './footer.js'\nimport {createState} from './state.js'\n\n/**\n * Transform mdast to hast.\n *\n * ##### Notes\n *\n * ###### HTML\n *\n * Raw HTML is available in mdast as `html` nodes and can be embedded in hast\n * as semistandard `raw` nodes.\n * Most utilities ignore `raw` nodes but two notable ones don’t:\n *\n * *   `hast-util-to-html` also has an option `allowDangerousHtml` which will\n *     output the raw HTML.\n *     This is typically discouraged as noted by the option name but is useful\n *     if you completely trust authors\n * *   `hast-util-raw` can handle the raw embedded HTML strings by parsing them\n *     into standard hast nodes (`element`, `text`, etc).\n *     This is a heavy task as it needs a full HTML parser, but it is the only\n *     way to support untrusted content\n *\n * ###### Footnotes\n *\n * Many options supported here relate to footnotes.\n * Footnotes are not specified by CommonMark, which we follow by default.\n * They are supported by GitHub, so footnotes can be enabled in markdown with\n * `mdast-util-gfm`.\n *\n * The options `footnoteBackLabel` and `footnoteLabel` define natural language\n * that explains footnotes, which is hidden for sighted users but shown to\n * assistive technology.\n * When your page is not in English, you must define translated values.\n *\n * Back references use ARIA attributes, but the section label itself uses a\n * heading that is hidden with an `sr-only` class.\n * To show it to sighted users, define different attributes in\n * `footnoteLabelProperties`.\n *\n * ###### Clobbering\n *\n * Footnotes introduces a problem, as it links footnote calls to footnote\n * definitions on the page through `id` attributes generated from user content,\n * which results in DOM clobbering.\n *\n * DOM clobbering is this:\n *\n * ```html\n * <p id=x></p>\n * <script>alert(x) // `x` now refers to the DOM `p#x` element</script>\n * ```\n *\n * Elements by their ID are made available by browsers on the `window` object,\n * which is a security risk.\n * Using a prefix solves this problem.\n *\n * More information on how to handle clobbering and the prefix is explained in\n * Example: headings (DOM clobbering) in `rehype-sanitize`.\n *\n * ###### Unknown nodes\n *\n * Unknown nodes are nodes with a type that isn’t in `handlers` or `passThrough`.\n * The default behavior for unknown nodes is:\n *\n * *   when the node has a `value` (and doesn’t have `data.hName`,\n *     `data.hProperties`, or `data.hChildren`, see later), create a hast `text`\n *     node\n * *   otherwise, create a `<div>` element (which could be changed with\n *     `data.hName`), with its children mapped from mdast to hast as well\n *\n * This behavior can be changed by passing an `unknownHandler`.\n *\n * @param {MdastNodes} tree\n *   mdast tree.\n * @param {Options | null | undefined} [options]\n *   Configuration.\n * @returns {HastNodes | null | undefined}\n *   hast tree.\n */\n// To do: next major: always return a single `root`.\nexport function toHast(tree, options) {\n  const state = createState(tree, options)\n  const node = state.one(tree, null)\n  const foot = footer(state)\n\n  if (foot) {\n    // @ts-expect-error If there’s a footer, there were definitions, meaning block\n    // content.\n    // So assume `node` is a parent node.\n    node.children.push({type: 'text', value: '\\n'}, foot)\n  }\n\n  // To do: next major: always return root?\n  return Array.isArray(node) ? {type: 'root', children: node} : node\n}\n","/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('hast').ElementContent} ElementContent\n *\n * @typedef {import('./state.js').State} State\n */\n\nimport {normalizeUri} from 'micromark-util-sanitize-uri'\n\n/**\n * Generate a hast footer for called footnote definitions.\n *\n * @param {State} state\n *   Info passed around.\n * @returns {Element | undefined}\n *   `section` element or `undefined`.\n */\nexport function footer(state) {\n  /** @type {Array<ElementContent>} */\n  const listItems = []\n  let index = -1\n\n  while (++index < state.footnoteOrder.length) {\n    const def = state.footnoteById[state.footnoteOrder[index]]\n\n    if (!def) {\n      continue\n    }\n\n    const content = state.all(def)\n    const id = String(def.identifier).toUpperCase()\n    const safeId = normalizeUri(id.toLowerCase())\n    let referenceIndex = 0\n    /** @type {Array<ElementContent>} */\n    const backReferences = []\n\n    while (++referenceIndex <= state.footnoteCounts[id]) {\n      /** @type {Element} */\n      const backReference = {\n        type: 'element',\n        tagName: 'a',\n        properties: {\n          href:\n            '#' +\n            state.clobberPrefix +\n            'fnref-' +\n            safeId +\n            (referenceIndex > 1 ? '-' + referenceIndex : ''),\n          dataFootnoteBackref: true,\n          className: ['data-footnote-backref'],\n          ariaLabel: state.footnoteBackLabel\n        },\n        children: [{type: 'text', value: '↩'}]\n      }\n\n      if (referenceIndex > 1) {\n        backReference.children.push({\n          type: 'element',\n          tagName: 'sup',\n          children: [{type: 'text', value: String(referenceIndex)}]\n        })\n      }\n\n      if (backReferences.length > 0) {\n        backReferences.push({type: 'text', value: ' '})\n      }\n\n      backReferences.push(backReference)\n    }\n\n    const tail = content[content.length - 1]\n\n    if (tail && tail.type === 'element' && tail.tagName === 'p') {\n      const tailTail = tail.children[tail.children.length - 1]\n      if (tailTail && tailTail.type === 'text') {\n        tailTail.value += ' '\n      } else {\n        tail.children.push({type: 'text', value: ' '})\n      }\n\n      tail.children.push(...backReferences)\n    } else {\n      content.push(...backReferences)\n    }\n\n    /** @type {Element} */\n    const listItem = {\n      type: 'element',\n      tagName: 'li',\n      properties: {id: state.clobberPrefix + 'fn-' + safeId},\n      children: state.wrap(content, true)\n    }\n\n    state.patch(def, listItem)\n\n    listItems.push(listItem)\n  }\n\n  if (listItems.length === 0) {\n    return\n  }\n\n  return {\n    type: 'element',\n    tagName: 'section',\n    properties: {dataFootnotes: true, className: ['footnotes']},\n    children: [\n      {\n        type: 'element',\n        tagName: state.footnoteLabelTagName,\n        properties: {\n          // To do: use structured clone.\n          ...JSON.parse(JSON.stringify(state.footnoteLabelProperties)),\n          id: 'footnote-label'\n        },\n        children: [{type: 'text', value: state.footnoteLabel}]\n      },\n      {type: 'text', value: '\\n'},\n      {\n        type: 'element',\n        tagName: 'ol',\n        properties: {},\n        children: state.wrap(listItems, true)\n      },\n      {type: 'text', value: '\\n'}\n    ]\n  }\n}\n","/**\n * @typedef {import('hast').Root} HastRoot\n * @typedef {import('mdast').Root} MdastRoot\n * @typedef {import('mdast-util-to-hast').Options} Options\n * @typedef {import('unified').Processor<any, any, any, any>} Processor\n *\n * @typedef {import('mdast-util-to-hast')} DoNotTouchAsThisImportIncludesRawInTree\n */\n\nimport {toHast} from 'mdast-util-to-hast'\n\n// Note: the `<MdastRoot, HastRoot>` overload doesn’t seem to work :'(\n\n/**\n * Plugin that turns markdown into HTML to support rehype.\n *\n * *   If a destination processor is given, that processor runs with a new HTML\n *     (hast) tree (bridge-mode).\n *     As the given processor runs with a hast tree, and rehype plugins support\n *     hast, that means rehype plugins can be used with the given processor.\n *     The hast tree is discarded in the end.\n *     It’s highly unlikely that you want to do this.\n * *   The common case is to not pass a destination processor, in which case the\n *     current processor continues running with a new HTML (hast) tree\n *     (mutate-mode).\n *     As the current processor continues with a hast tree, and rehype plugins\n *     support hast, that means rehype plugins can be used after\n *     `remark-rehype`.\n *     It’s likely that this is what you want to do.\n *\n * @param destination\n *   Optional unified processor.\n * @param options\n *   Options passed to `mdast-util-to-hast`.\n */\nconst remarkRehype =\n  /** @type {(import('unified').Plugin<[Processor, Options?]|[null|undefined, Options?]|[Options]|[], MdastRoot>)} */\n  (\n    function (destination, options) {\n      return destination && 'run' in destination\n        ? bridge(destination, options)\n        : mutate(destination || options)\n    }\n  )\n\nexport default remarkRehype\n\n/**\n * Bridge-mode.\n * Runs the destination with the new hast tree.\n *\n * @type {import('unified').Plugin<[Processor, Options?], MdastRoot>}\n */\nfunction bridge(destination, options) {\n  return (node, file, next) => {\n    destination.run(toHast(node, options), file, (error) => {\n      next(error)\n    })\n  }\n}\n\n/**\n * Mutate-mode.\n * Further plugins run on the hast tree.\n *\n * @type {import('unified').Plugin<[Options?]|void[], MdastRoot, HastRoot>}\n */\nfunction mutate(options) {\n  // @ts-expect-error: assume a corresponding node is returned by `toHast`.\n  return (node) => toHast(node, options)\n}\n","/**\n * @typedef {import('./info.js').Info} Info\n * @typedef {Record<string, Info>} Properties\n * @typedef {Record<string, string>} Normal\n */\n\nexport class Schema {\n  /**\n   * @constructor\n   * @param {Properties} property\n   * @param {Normal} normal\n   * @param {string} [space]\n   */\n  constructor(property, normal, space) {\n    this.property = property\n    this.normal = normal\n    if (space) {\n      this.space = space\n    }\n  }\n}\n\n/** @type {Properties} */\nSchema.prototype.property = {}\n/** @type {Normal} */\nSchema.prototype.normal = {}\n/** @type {string|null} */\nSchema.prototype.space = null\n","/**\n * @typedef {import('./schema.js').Properties} Properties\n * @typedef {import('./schema.js').Normal} Normal\n */\n\nimport {Schema} from './schema.js'\n\n/**\n * @param {Schema[]} definitions\n * @param {string} [space]\n * @returns {Schema}\n */\nexport function merge(definitions, space) {\n  /** @type {Properties} */\n  const property = {}\n  /** @type {Normal} */\n  const normal = {}\n  let index = -1\n\n  while (++index < definitions.length) {\n    Object.assign(property, definitions[index].property)\n    Object.assign(normal, definitions[index].normal)\n  }\n\n  return new Schema(property, normal, space)\n}\n","/**\n * @param {string} value\n * @returns {string}\n */\nexport function normalize(value) {\n  return value.toLowerCase()\n}\n","export class Info {\n  /**\n   * @constructor\n   * @param {string} property\n   * @param {string} attribute\n   */\n  constructor(property, attribute) {\n    /** @type {string} */\n    this.property = property\n    /** @type {string} */\n    this.attribute = attribute\n  }\n}\n\n/** @type {string|null} */\nInfo.prototype.space = null\nInfo.prototype.boolean = false\nInfo.prototype.booleanish = false\nInfo.prototype.overloadedBoolean = false\nInfo.prototype.number = false\nInfo.prototype.commaSeparated = false\nInfo.prototype.spaceSeparated = false\nInfo.prototype.commaOrSpaceSeparated = false\nInfo.prototype.mustUseProperty = false\nInfo.prototype.defined = false\n","let powers = 0\n\nexport const boolean = increment()\nexport const booleanish = increment()\nexport const overloadedBoolean = increment()\nexport const number = increment()\nexport const spaceSeparated = increment()\nexport const commaSeparated = increment()\nexport const commaOrSpaceSeparated = increment()\n\nfunction increment() {\n  return 2 ** ++powers\n}\n","import {Info} from './info.js'\nimport * as types from './types.js'\n\n/** @type {Array<keyof types>} */\n// @ts-expect-error: hush.\nconst checks = Object.keys(types)\n\nexport class DefinedInfo extends Info {\n  /**\n   * @constructor\n   * @param {string} property\n   * @param {string} attribute\n   * @param {number|null} [mask]\n   * @param {string} [space]\n   */\n  constructor(property, attribute, mask, space) {\n    let index = -1\n\n    super(property, attribute)\n\n    mark(this, 'space', space)\n\n    if (typeof mask === 'number') {\n      while (++index < checks.length) {\n        const check = checks[index]\n        mark(this, checks[index], (mask & types[check]) === types[check])\n      }\n    }\n  }\n}\n\nDefinedInfo.prototype.defined = true\n\n/**\n * @param {DefinedInfo} values\n * @param {string} key\n * @param {unknown} value\n */\nfunction mark(values, key, value) {\n  if (value) {\n    // @ts-expect-error: assume `value` matches the expected value of `key`.\n    values[key] = value\n  }\n}\n","/**\n * @typedef {import('./schema.js').Properties} Properties\n * @typedef {import('./schema.js').Normal} Normal\n *\n * @typedef {Record<string, string>} Attributes\n *\n * @typedef {Object} Definition\n * @property {Record<string, number|null>} properties\n * @property {(attributes: Attributes, property: string) => string} transform\n * @property {string} [space]\n * @property {Attributes} [attributes]\n * @property {Array<string>} [mustUseProperty]\n */\n\nimport {normalize} from '../normalize.js'\nimport {Schema} from './schema.js'\nimport {DefinedInfo} from './defined-info.js'\n\nconst own = {}.hasOwnProperty\n\n/**\n * @param {Definition} definition\n * @returns {Schema}\n */\nexport function create(definition) {\n  /** @type {Properties} */\n  const property = {}\n  /** @type {Normal} */\n  const normal = {}\n  /** @type {string} */\n  let prop\n\n  for (prop in definition.properties) {\n    if (own.call(definition.properties, prop)) {\n      const value = definition.properties[prop]\n      const info = new DefinedInfo(\n        prop,\n        definition.transform(definition.attributes || {}, prop),\n        value,\n        definition.space\n      )\n\n      if (\n        definition.mustUseProperty &&\n        definition.mustUseProperty.includes(prop)\n      ) {\n        info.mustUseProperty = true\n      }\n\n      property[prop] = info\n\n      normal[normalize(prop)] = prop\n      normal[normalize(info.attribute)] = prop\n    }\n  }\n\n  return new Schema(property, normal, definition.space)\n}\n","import {create} from './util/create.js'\n\nexport const xlink = create({\n  space: 'xlink',\n  transform(_, prop) {\n    return 'xlink:' + prop.slice(5).toLowerCase()\n  },\n  properties: {\n    xLinkActuate: null,\n    xLinkArcRole: null,\n    xLinkHref: null,\n    xLinkRole: null,\n    xLinkShow: null,\n    xLinkTitle: null,\n    xLinkType: null\n  }\n})\n","import {create} from './util/create.js'\n\nexport const xml = create({\n  space: 'xml',\n  transform(_, prop) {\n    return 'xml:' + prop.slice(3).toLowerCase()\n  },\n  properties: {xmlLang: null, xmlBase: null, xmlSpace: null}\n})\n","/**\n * @param {Record<string, string>} attributes\n * @param {string} attribute\n * @returns {string}\n */\nexport function caseSensitiveTransform(attributes, attribute) {\n  return attribute in attributes ? attributes[attribute] : attribute\n}\n","import {caseSensitiveTransform} from './case-sensitive-transform.js'\n\n/**\n * @param {Record<string, string>} attributes\n * @param {string} property\n * @returns {string}\n */\nexport function caseInsensitiveTransform(attributes, property) {\n  return caseSensitiveTransform(attributes, property.toLowerCase())\n}\n","import {create} from './util/create.js'\nimport {caseInsensitiveTransform} from './util/case-insensitive-transform.js'\n\nexport const xmlns = create({\n  space: 'xmlns',\n  attributes: {xmlnsxlink: 'xmlns:xlink'},\n  transform: caseInsensitiveTransform,\n  properties: {xmlns: null, xmlnsXLink: null}\n})\n","import {booleanish, number, spaceSeparated} from './util/types.js'\nimport {create} from './util/create.js'\n\nexport const aria = create({\n  transform(_, prop) {\n    return prop === 'role' ? prop : 'aria-' + prop.slice(4).toLowerCase()\n  },\n  properties: {\n    ariaActiveDescendant: null,\n    ariaAtomic: booleanish,\n    ariaAutoComplete: null,\n    ariaBusy: booleanish,\n    ariaChecked: booleanish,\n    ariaColCount: number,\n    ariaColIndex: number,\n    ariaColSpan: number,\n    ariaControls: spaceSeparated,\n    ariaCurrent: null,\n    ariaDescribedBy: spaceSeparated,\n    ariaDetails: null,\n    ariaDisabled: booleanish,\n    ariaDropEffect: spaceSeparated,\n    ariaErrorMessage: null,\n    ariaExpanded: booleanish,\n    ariaFlowTo: spaceSeparated,\n    ariaGrabbed: booleanish,\n    ariaHasPopup: null,\n    ariaHidden: booleanish,\n    ariaInvalid: null,\n    ariaKeyShortcuts: null,\n    ariaLabel: null,\n    ariaLabelledBy: spaceSeparated,\n    ariaLevel: number,\n    ariaLive: null,\n    ariaModal: booleanish,\n    ariaMultiLine: booleanish,\n    ariaMultiSelectable: booleanish,\n    ariaOrientation: null,\n    ariaOwns: spaceSeparated,\n    ariaPlaceholder: null,\n    ariaPosInSet: number,\n    ariaPressed: booleanish,\n    ariaReadOnly: booleanish,\n    ariaRelevant: null,\n    ariaRequired: booleanish,\n    ariaRoleDescription: spaceSeparated,\n    ariaRowCount: number,\n    ariaRowIndex: number,\n    ariaRowSpan: number,\n    ariaSelected: booleanish,\n    ariaSetSize: number,\n    ariaSort: null,\n    ariaValueMax: number,\n    ariaValueMin: number,\n    ariaValueNow: number,\n    ariaValueText: null,\n    role: null\n  }\n})\n","import {\n  boolean,\n  overloadedBoolean,\n  booleanish,\n  number,\n  spaceSeparated,\n  commaSeparated\n} from './util/types.js'\nimport {create} from './util/create.js'\nimport {caseInsensitiveTransform} from './util/case-insensitive-transform.js'\n\nexport const html = create({\n  space: 'html',\n  attributes: {\n    acceptcharset: 'accept-charset',\n    classname: 'class',\n    htmlfor: 'for',\n    httpequiv: 'http-equiv'\n  },\n  transform: caseInsensitiveTransform,\n  mustUseProperty: ['checked', 'multiple', 'muted', 'selected'],\n  properties: {\n    // Standard Properties.\n    abbr: null,\n    accept: commaSeparated,\n    acceptCharset: spaceSeparated,\n    accessKey: spaceSeparated,\n    action: null,\n    allow: null,\n    allowFullScreen: boolean,\n    allowPaymentRequest: boolean,\n    allowUserMedia: boolean,\n    alt: null,\n    as: null,\n    async: boolean,\n    autoCapitalize: null,\n    autoComplete: spaceSeparated,\n    autoFocus: boolean,\n    autoPlay: boolean,\n    blocking: spaceSeparated,\n    capture: null,\n    charSet: null,\n    checked: boolean,\n    cite: null,\n    className: spaceSeparated,\n    cols: number,\n    colSpan: null,\n    content: null,\n    contentEditable: booleanish,\n    controls: boolean,\n    controlsList: spaceSeparated,\n    coords: number | commaSeparated,\n    crossOrigin: null,\n    data: null,\n    dateTime: null,\n    decoding: null,\n    default: boolean,\n    defer: boolean,\n    dir: null,\n    dirName: null,\n    disabled: boolean,\n    download: overloadedBoolean,\n    draggable: booleanish,\n    encType: null,\n    enterKeyHint: null,\n    fetchPriority: null,\n    form: null,\n    formAction: null,\n    formEncType: null,\n    formMethod: null,\n    formNoValidate: boolean,\n    formTarget: null,\n    headers: spaceSeparated,\n    height: number,\n    hidden: boolean,\n    high: number,\n    href: null,\n    hrefLang: null,\n    htmlFor: spaceSeparated,\n    httpEquiv: spaceSeparated,\n    id: null,\n    imageSizes: null,\n    imageSrcSet: null,\n    inert: boolean,\n    inputMode: null,\n    integrity: null,\n    is: null,\n    isMap: boolean,\n    itemId: null,\n    itemProp: spaceSeparated,\n    itemRef: spaceSeparated,\n    itemScope: boolean,\n    itemType: spaceSeparated,\n    kind: null,\n    label: null,\n    lang: null,\n    language: null,\n    list: null,\n    loading: null,\n    loop: boolean,\n    low: number,\n    manifest: null,\n    max: null,\n    maxLength: number,\n    media: null,\n    method: null,\n    min: null,\n    minLength: number,\n    multiple: boolean,\n    muted: boolean,\n    name: null,\n    nonce: null,\n    noModule: boolean,\n    noValidate: boolean,\n    onAbort: null,\n    onAfterPrint: null,\n    onAuxClick: null,\n    onBeforeMatch: null,\n    onBeforePrint: null,\n    onBeforeToggle: null,\n    onBeforeUnload: null,\n    onBlur: null,\n    onCancel: null,\n    onCanPlay: null,\n    onCanPlayThrough: null,\n    onChange: null,\n    onClick: null,\n    onClose: null,\n    onContextLost: null,\n    onContextMenu: null,\n    onContextRestored: null,\n    onCopy: null,\n    onCueChange: null,\n    onCut: null,\n    onDblClick: null,\n    onDrag: null,\n    onDragEnd: null,\n    onDragEnter: null,\n    onDragExit: null,\n    onDragLeave: null,\n    onDragOver: null,\n    onDragStart: null,\n    onDrop: null,\n    onDurationChange: null,\n    onEmptied: null,\n    onEnded: null,\n    onError: null,\n    onFocus: null,\n    onFormData: null,\n    onHashChange: null,\n    onInput: null,\n    onInvalid: null,\n    onKeyDown: null,\n    onKeyPress: null,\n    onKeyUp: null,\n    onLanguageChange: null,\n    onLoad: null,\n    onLoadedData: null,\n    onLoadedMetadata: null,\n    onLoadEnd: null,\n    onLoadStart: null,\n    onMessage: null,\n    onMessageError: null,\n    onMouseDown: null,\n    onMouseEnter: null,\n    onMouseLeave: null,\n    onMouseMove: null,\n    onMouseOut: null,\n    onMouseOver: null,\n    onMouseUp: null,\n    onOffline: null,\n    onOnline: null,\n    onPageHide: null,\n    onPageShow: null,\n    onPaste: null,\n    onPause: null,\n    onPlay: null,\n    onPlaying: null,\n    onPopState: null,\n    onProgress: null,\n    onRateChange: null,\n    onRejectionHandled: null,\n    onReset: null,\n    onResize: null,\n    onScroll: null,\n    onScrollEnd: null,\n    onSecurityPolicyViolation: null,\n    onSeeked: null,\n    onSeeking: null,\n    onSelect: null,\n    onSlotChange: null,\n    onStalled: null,\n    onStorage: null,\n    onSubmit: null,\n    onSuspend: null,\n    onTimeUpdate: null,\n    onToggle: null,\n    onUnhandledRejection: null,\n    onUnload: null,\n    onVolumeChange: null,\n    onWaiting: null,\n    onWheel: null,\n    open: boolean,\n    optimum: number,\n    pattern: null,\n    ping: spaceSeparated,\n    placeholder: null,\n    playsInline: boolean,\n    popover: null,\n    popoverTarget: null,\n    popoverTargetAction: null,\n    poster: null,\n    preload: null,\n    readOnly: boolean,\n    referrerPolicy: null,\n    rel: spaceSeparated,\n    required: boolean,\n    reversed: boolean,\n    rows: number,\n    rowSpan: number,\n    sandbox: spaceSeparated,\n    scope: null,\n    scoped: boolean,\n    seamless: boolean,\n    selected: boolean,\n    shadowRootClonable: boolean,\n    shadowRootDelegatesFocus: boolean,\n    shadowRootMode: null,\n    shape: null,\n    size: number,\n    sizes: null,\n    slot: null,\n    span: number,\n    spellCheck: booleanish,\n    src: null,\n    srcDoc: null,\n    srcLang: null,\n    srcSet: null,\n    start: number,\n    step: null,\n    style: null,\n    tabIndex: number,\n    target: null,\n    title: null,\n    translate: null,\n    type: null,\n    typeMustMatch: boolean,\n    useMap: null,\n    value: booleanish,\n    width: number,\n    wrap: null,\n    writingSuggestions: null,\n\n    // Legacy.\n    // See: https://html.spec.whatwg.org/#other-elements,-attributes-and-apis\n    align: null, // Several. Use CSS `text-align` instead,\n    aLink: null, // `<body>`. Use CSS `a:active {color}` instead\n    archive: spaceSeparated, // `<object>`. List of URIs to archives\n    axis: null, // `<td>` and `<th>`. Use `scope` on `<th>`\n    background: null, // `<body>`. Use CSS `background-image` instead\n    bgColor: null, // `<body>` and table elements. Use CSS `background-color` instead\n    border: number, // `<table>`. Use CSS `border-width` instead,\n    borderColor: null, // `<table>`. Use CSS `border-color` instead,\n    bottomMargin: number, // `<body>`\n    cellPadding: null, // `<table>`\n    cellSpacing: null, // `<table>`\n    char: null, // Several table elements. When `align=char`, sets the character to align on\n    charOff: null, // Several table elements. When `char`, offsets the alignment\n    classId: null, // `<object>`\n    clear: null, // `<br>`. Use CSS `clear` instead\n    code: null, // `<object>`\n    codeBase: null, // `<object>`\n    codeType: null, // `<object>`\n    color: null, // `<font>` and `<hr>`. Use CSS instead\n    compact: boolean, // Lists. Use CSS to reduce space between items instead\n    declare: boolean, // `<object>`\n    event: null, // `<script>`\n    face: null, // `<font>`. Use CSS instead\n    frame: null, // `<table>`\n    frameBorder: null, // `<iframe>`. Use CSS `border` instead\n    hSpace: number, // `<img>` and `<object>`\n    leftMargin: number, // `<body>`\n    link: null, // `<body>`. Use CSS `a:link {color: *}` instead\n    longDesc: null, // `<frame>`, `<iframe>`, and `<img>`. Use an `<a>`\n    lowSrc: null, // `<img>`. Use a `<picture>`\n    marginHeight: number, // `<body>`\n    marginWidth: number, // `<body>`\n    noResize: boolean, // `<frame>`\n    noHref: boolean, // `<area>`. Use no href instead of an explicit `nohref`\n    noShade: boolean, // `<hr>`. Use background-color and height instead of borders\n    noWrap: boolean, // `<td>` and `<th>`\n    object: null, // `<applet>`\n    profile: null, // `<head>`\n    prompt: null, // `<isindex>`\n    rev: null, // `<link>`\n    rightMargin: number, // `<body>`\n    rules: null, // `<table>`\n    scheme: null, // `<meta>`\n    scrolling: booleanish, // `<frame>`. Use overflow in the child context\n    standby: null, // `<object>`\n    summary: null, // `<table>`\n    text: null, // `<body>`. Use CSS `color` instead\n    topMargin: number, // `<body>`\n    valueType: null, // `<param>`\n    version: null, // `<html>`. Use a doctype.\n    vAlign: null, // Several. Use CSS `vertical-align` instead\n    vLink: null, // `<body>`. Use CSS `a:visited {color}` instead\n    vSpace: number, // `<img>` and `<object>`\n\n    // Non-standard Properties.\n    allowTransparency: null,\n    autoCorrect: null,\n    autoSave: null,\n    disablePictureInPicture: boolean,\n    disableRemotePlayback: boolean,\n    prefix: null,\n    property: null,\n    results: number,\n    security: null,\n    unselectable: null\n  }\n})\n","import {\n  boolean,\n  number,\n  spaceSeparated,\n  commaSeparated,\n  commaOrSpaceSeparated\n} from './util/types.js'\nimport {create} from './util/create.js'\nimport {caseSensitiveTransform} from './util/case-sensitive-transform.js'\n\nexport const svg = create({\n  space: 'svg',\n  attributes: {\n    accentHeight: 'accent-height',\n    alignmentBaseline: 'alignment-baseline',\n    arabicForm: 'arabic-form',\n    baselineShift: 'baseline-shift',\n    capHeight: 'cap-height',\n    className: 'class',\n    clipPath: 'clip-path',\n    clipRule: 'clip-rule',\n    colorInterpolation: 'color-interpolation',\n    colorInterpolationFilters: 'color-interpolation-filters',\n    colorProfile: 'color-profile',\n    colorRendering: 'color-rendering',\n    crossOrigin: 'crossorigin',\n    dataType: 'datatype',\n    dominantBaseline: 'dominant-baseline',\n    enableBackground: 'enable-background',\n    fillOpacity: 'fill-opacity',\n    fillRule: 'fill-rule',\n    floodColor: 'flood-color',\n    floodOpacity: 'flood-opacity',\n    fontFamily: 'font-family',\n    fontSize: 'font-size',\n    fontSizeAdjust: 'font-size-adjust',\n    fontStretch: 'font-stretch',\n    fontStyle: 'font-style',\n    fontVariant: 'font-variant',\n    fontWeight: 'font-weight',\n    glyphName: 'glyph-name',\n    glyphOrientationHorizontal: 'glyph-orientation-horizontal',\n    glyphOrientationVertical: 'glyph-orientation-vertical',\n    hrefLang: 'hreflang',\n    horizAdvX: 'horiz-adv-x',\n    horizOriginX: 'horiz-origin-x',\n    horizOriginY: 'horiz-origin-y',\n    imageRendering: 'image-rendering',\n    letterSpacing: 'letter-spacing',\n    lightingColor: 'lighting-color',\n    markerEnd: 'marker-end',\n    markerMid: 'marker-mid',\n    markerStart: 'marker-start',\n    navDown: 'nav-down',\n    navDownLeft: 'nav-down-left',\n    navDownRight: 'nav-down-right',\n    navLeft: 'nav-left',\n    navNext: 'nav-next',\n    navPrev: 'nav-prev',\n    navRight: 'nav-right',\n    navUp: 'nav-up',\n    navUpLeft: 'nav-up-left',\n    navUpRight: 'nav-up-right',\n    onAbort: 'onabort',\n    onActivate: 'onactivate',\n    onAfterPrint: 'onafterprint',\n    onBeforePrint: 'onbeforeprint',\n    onBegin: 'onbegin',\n    onCancel: 'oncancel',\n    onCanPlay: 'oncanplay',\n    onCanPlayThrough: 'oncanplaythrough',\n    onChange: 'onchange',\n    onClick: 'onclick',\n    onClose: 'onclose',\n    onCopy: 'oncopy',\n    onCueChange: 'oncuechange',\n    onCut: 'oncut',\n    onDblClick: 'ondblclick',\n    onDrag: 'ondrag',\n    onDragEnd: 'ondragend',\n    onDragEnter: 'ondragenter',\n    onDragExit: 'ondragexit',\n    onDragLeave: 'ondragleave',\n    onDragOver: 'ondragover',\n    onDragStart: 'ondragstart',\n    onDrop: 'ondrop',\n    onDurationChange: 'ondurationchange',\n    onEmptied: 'onemptied',\n    onEnd: 'onend',\n    onEnded: 'onended',\n    onError: 'onerror',\n    onFocus: 'onfocus',\n    onFocusIn: 'onfocusin',\n    onFocusOut: 'onfocusout',\n    onHashChange: 'onhashchange',\n    onInput: 'oninput',\n    onInvalid: 'oninvalid',\n    onKeyDown: 'onkeydown',\n    onKeyPress: 'onkeypress',\n    onKeyUp: 'onkeyup',\n    onLoad: 'onload',\n    onLoadedData: 'onloadeddata',\n    onLoadedMetadata: 'onloadedmetadata',\n    onLoadStart: 'onloadstart',\n    onMessage: 'onmessage',\n    onMouseDown: 'onmousedown',\n    onMouseEnter: 'onmouseenter',\n    onMouseLeave: 'onmouseleave',\n    onMouseMove: 'onmousemove',\n    onMouseOut: 'onmouseout',\n    onMouseOver: 'onmouseover',\n    onMouseUp: 'onmouseup',\n    onMouseWheel: 'onmousewheel',\n    onOffline: 'onoffline',\n    onOnline: 'ononline',\n    onPageHide: 'onpagehide',\n    onPageShow: 'onpageshow',\n    onPaste: 'onpaste',\n    onPause: 'onpause',\n    onPlay: 'onplay',\n    onPlaying: 'onplaying',\n    onPopState: 'onpopstate',\n    onProgress: 'onprogress',\n    onRateChange: 'onratechange',\n    onRepeat: 'onrepeat',\n    onReset: 'onreset',\n    onResize: 'onresize',\n    onScroll: 'onscroll',\n    onSeeked: 'onseeked',\n    onSeeking: 'onseeking',\n    onSelect: 'onselect',\n    onShow: 'onshow',\n    onStalled: 'onstalled',\n    onStorage: 'onstorage',\n    onSubmit: 'onsubmit',\n    onSuspend: 'onsuspend',\n    onTimeUpdate: 'ontimeupdate',\n    onToggle: 'ontoggle',\n    onUnload: 'onunload',\n    onVolumeChange: 'onvolumechange',\n    onWaiting: 'onwaiting',\n    onZoom: 'onzoom',\n    overlinePosition: 'overline-position',\n    overlineThickness: 'overline-thickness',\n    paintOrder: 'paint-order',\n    panose1: 'panose-1',\n    pointerEvents: 'pointer-events',\n    referrerPolicy: 'referrerpolicy',\n    renderingIntent: 'rendering-intent',\n    shapeRendering: 'shape-rendering',\n    stopColor: 'stop-color',\n    stopOpacity: 'stop-opacity',\n    strikethroughPosition: 'strikethrough-position',\n    strikethroughThickness: 'strikethrough-thickness',\n    strokeDashArray: 'stroke-dasharray',\n    strokeDashOffset: 'stroke-dashoffset',\n    strokeLineCap: 'stroke-linecap',\n    strokeLineJoin: 'stroke-linejoin',\n    strokeMiterLimit: 'stroke-miterlimit',\n    strokeOpacity: 'stroke-opacity',\n    strokeWidth: 'stroke-width',\n    tabIndex: 'tabindex',\n    textAnchor: 'text-anchor',\n    textDecoration: 'text-decoration',\n    textRendering: 'text-rendering',\n    transformOrigin: 'transform-origin',\n    typeOf: 'typeof',\n    underlinePosition: 'underline-position',\n    underlineThickness: 'underline-thickness',\n    unicodeBidi: 'unicode-bidi',\n    unicodeRange: 'unicode-range',\n    unitsPerEm: 'units-per-em',\n    vAlphabetic: 'v-alphabetic',\n    vHanging: 'v-hanging',\n    vIdeographic: 'v-ideographic',\n    vMathematical: 'v-mathematical',\n    vectorEffect: 'vector-effect',\n    vertAdvY: 'vert-adv-y',\n    vertOriginX: 'vert-origin-x',\n    vertOriginY: 'vert-origin-y',\n    wordSpacing: 'word-spacing',\n    writingMode: 'writing-mode',\n    xHeight: 'x-height',\n    // These were camelcased in Tiny. Now lowercased in SVG 2\n    playbackOrder: 'playbackorder',\n    timelineBegin: 'timelinebegin'\n  },\n  transform: caseSensitiveTransform,\n  properties: {\n    about: commaOrSpaceSeparated,\n    accentHeight: number,\n    accumulate: null,\n    additive: null,\n    alignmentBaseline: null,\n    alphabetic: number,\n    amplitude: number,\n    arabicForm: null,\n    ascent: number,\n    attributeName: null,\n    attributeType: null,\n    azimuth: number,\n    bandwidth: null,\n    baselineShift: null,\n    baseFrequency: null,\n    baseProfile: null,\n    bbox: null,\n    begin: null,\n    bias: number,\n    by: null,\n    calcMode: null,\n    capHeight: number,\n    className: spaceSeparated,\n    clip: null,\n    clipPath: null,\n    clipPathUnits: null,\n    clipRule: null,\n    color: null,\n    colorInterpolation: null,\n    colorInterpolationFilters: null,\n    colorProfile: null,\n    colorRendering: null,\n    content: null,\n    contentScriptType: null,\n    contentStyleType: null,\n    crossOrigin: null,\n    cursor: null,\n    cx: null,\n    cy: null,\n    d: null,\n    dataType: null,\n    defaultAction: null,\n    descent: number,\n    diffuseConstant: number,\n    direction: null,\n    display: null,\n    dur: null,\n    divisor: number,\n    dominantBaseline: null,\n    download: boolean,\n    dx: null,\n    dy: null,\n    edgeMode: null,\n    editable: null,\n    elevation: number,\n    enableBackground: null,\n    end: null,\n    event: null,\n    exponent: number,\n    externalResourcesRequired: null,\n    fill: null,\n    fillOpacity: number,\n    fillRule: null,\n    filter: null,\n    filterRes: null,\n    filterUnits: null,\n    floodColor: null,\n    floodOpacity: null,\n    focusable: null,\n    focusHighlight: null,\n    fontFamily: null,\n    fontSize: null,\n    fontSizeAdjust: null,\n    fontStretch: null,\n    fontStyle: null,\n    fontVariant: null,\n    fontWeight: null,\n    format: null,\n    fr: null,\n    from: null,\n    fx: null,\n    fy: null,\n    g1: commaSeparated,\n    g2: commaSeparated,\n    glyphName: commaSeparated,\n    glyphOrientationHorizontal: null,\n    glyphOrientationVertical: null,\n    glyphRef: null,\n    gradientTransform: null,\n    gradientUnits: null,\n    handler: null,\n    hanging: number,\n    hatchContentUnits: null,\n    hatchUnits: null,\n    height: null,\n    href: null,\n    hrefLang: null,\n    horizAdvX: number,\n    horizOriginX: number,\n    horizOriginY: number,\n    id: null,\n    ideographic: number,\n    imageRendering: null,\n    initialVisibility: null,\n    in: null,\n    in2: null,\n    intercept: number,\n    k: number,\n    k1: number,\n    k2: number,\n    k3: number,\n    k4: number,\n    kernelMatrix: commaOrSpaceSeparated,\n    kernelUnitLength: null,\n    keyPoints: null, // SEMI_COLON_SEPARATED\n    keySplines: null, // SEMI_COLON_SEPARATED\n    keyTimes: null, // SEMI_COLON_SEPARATED\n    kerning: null,\n    lang: null,\n    lengthAdjust: null,\n    letterSpacing: null,\n    lightingColor: null,\n    limitingConeAngle: number,\n    local: null,\n    markerEnd: null,\n    markerMid: null,\n    markerStart: null,\n    markerHeight: null,\n    markerUnits: null,\n    markerWidth: null,\n    mask: null,\n    maskContentUnits: null,\n    maskUnits: null,\n    mathematical: null,\n    max: null,\n    media: null,\n    mediaCharacterEncoding: null,\n    mediaContentEncodings: null,\n    mediaSize: number,\n    mediaTime: null,\n    method: null,\n    min: null,\n    mode: null,\n    name: null,\n    navDown: null,\n    navDownLeft: null,\n    navDownRight: null,\n    navLeft: null,\n    navNext: null,\n    navPrev: null,\n    navRight: null,\n    navUp: null,\n    navUpLeft: null,\n    navUpRight: null,\n    numOctaves: null,\n    observer: null,\n    offset: null,\n    onAbort: null,\n    onActivate: null,\n    onAfterPrint: null,\n    onBeforePrint: null,\n    onBegin: null,\n    onCancel: null,\n    onCanPlay: null,\n    onCanPlayThrough: null,\n    onChange: null,\n    onClick: null,\n    onClose: null,\n    onCopy: null,\n    onCueChange: null,\n    onCut: null,\n    onDblClick: null,\n    onDrag: null,\n    onDragEnd: null,\n    onDragEnter: null,\n    onDragExit: null,\n    onDragLeave: null,\n    onDragOver: null,\n    onDragStart: null,\n    onDrop: null,\n    onDurationChange: null,\n    onEmptied: null,\n    onEnd: null,\n    onEnded: null,\n    onError: null,\n    onFocus: null,\n    onFocusIn: null,\n    onFocusOut: null,\n    onHashChange: null,\n    onInput: null,\n    onInvalid: null,\n    onKeyDown: null,\n    onKeyPress: null,\n    onKeyUp: null,\n    onLoad: null,\n    onLoadedData: null,\n    onLoadedMetadata: null,\n    onLoadStart: null,\n    onMessage: null,\n    onMouseDown: null,\n    onMouseEnter: null,\n    onMouseLeave: null,\n    onMouseMove: null,\n    onMouseOut: null,\n    onMouseOver: null,\n    onMouseUp: null,\n    onMouseWheel: null,\n    onOffline: null,\n    onOnline: null,\n    onPageHide: null,\n    onPageShow: null,\n    onPaste: null,\n    onPause: null,\n    onPlay: null,\n    onPlaying: null,\n    onPopState: null,\n    onProgress: null,\n    onRateChange: null,\n    onRepeat: null,\n    onReset: null,\n    onResize: null,\n    onScroll: null,\n    onSeeked: null,\n    onSeeking: null,\n    onSelect: null,\n    onShow: null,\n    onStalled: null,\n    onStorage: null,\n    onSubmit: null,\n    onSuspend: null,\n    onTimeUpdate: null,\n    onToggle: null,\n    onUnload: null,\n    onVolumeChange: null,\n    onWaiting: null,\n    onZoom: null,\n    opacity: null,\n    operator: null,\n    order: null,\n    orient: null,\n    orientation: null,\n    origin: null,\n    overflow: null,\n    overlay: null,\n    overlinePosition: number,\n    overlineThickness: number,\n    paintOrder: null,\n    panose1: null,\n    path: null,\n    pathLength: number,\n    patternContentUnits: null,\n    patternTransform: null,\n    patternUnits: null,\n    phase: null,\n    ping: spaceSeparated,\n    pitch: null,\n    playbackOrder: null,\n    pointerEvents: null,\n    points: null,\n    pointsAtX: number,\n    pointsAtY: number,\n    pointsAtZ: number,\n    preserveAlpha: null,\n    preserveAspectRatio: null,\n    primitiveUnits: null,\n    propagate: null,\n    property: commaOrSpaceSeparated,\n    r: null,\n    radius: null,\n    referrerPolicy: null,\n    refX: null,\n    refY: null,\n    rel: commaOrSpaceSeparated,\n    rev: commaOrSpaceSeparated,\n    renderingIntent: null,\n    repeatCount: null,\n    repeatDur: null,\n    requiredExtensions: commaOrSpaceSeparated,\n    requiredFeatures: commaOrSpaceSeparated,\n    requiredFonts: commaOrSpaceSeparated,\n    requiredFormats: commaOrSpaceSeparated,\n    resource: null,\n    restart: null,\n    result: null,\n    rotate: null,\n    rx: null,\n    ry: null,\n    scale: null,\n    seed: null,\n    shapeRendering: null,\n    side: null,\n    slope: null,\n    snapshotTime: null,\n    specularConstant: number,\n    specularExponent: number,\n    spreadMethod: null,\n    spacing: null,\n    startOffset: null,\n    stdDeviation: null,\n    stemh: null,\n    stemv: null,\n    stitchTiles: null,\n    stopColor: null,\n    stopOpacity: null,\n    strikethroughPosition: number,\n    strikethroughThickness: number,\n    string: null,\n    stroke: null,\n    strokeDashArray: commaOrSpaceSeparated,\n    strokeDashOffset: null,\n    strokeLineCap: null,\n    strokeLineJoin: null,\n    strokeMiterLimit: number,\n    strokeOpacity: number,\n    strokeWidth: null,\n    style: null,\n    surfaceScale: number,\n    syncBehavior: null,\n    syncBehaviorDefault: null,\n    syncMaster: null,\n    syncTolerance: null,\n    syncToleranceDefault: null,\n    systemLanguage: commaOrSpaceSeparated,\n    tabIndex: number,\n    tableValues: null,\n    target: null,\n    targetX: number,\n    targetY: number,\n    textAnchor: null,\n    textDecoration: null,\n    textRendering: null,\n    textLength: null,\n    timelineBegin: null,\n    title: null,\n    transformBehavior: null,\n    type: null,\n    typeOf: commaOrSpaceSeparated,\n    to: null,\n    transform: null,\n    transformOrigin: null,\n    u1: null,\n    u2: null,\n    underlinePosition: number,\n    underlineThickness: number,\n    unicode: null,\n    unicodeBidi: null,\n    unicodeRange: null,\n    unitsPerEm: number,\n    values: null,\n    vAlphabetic: number,\n    vMathematical: number,\n    vectorEffect: null,\n    vHanging: number,\n    vIdeographic: number,\n    version: null,\n    vertAdvY: number,\n    vertOriginX: number,\n    vertOriginY: number,\n    viewBox: null,\n    viewTarget: null,\n    visibility: null,\n    width: null,\n    widths: null,\n    wordSpacing: null,\n    writingMode: null,\n    x: null,\n    x1: null,\n    x2: null,\n    xChannelSelector: null,\n    xHeight: number,\n    y: null,\n    y1: null,\n    y2: null,\n    yChannelSelector: null,\n    z: null,\n    zoomAndPan: null\n  }\n})\n","/**\n * @typedef {import('./lib/util/info.js').Info} Info\n * @typedef {import('./lib/util/schema.js').Schema} Schema\n */\n\nimport {merge} from './lib/util/merge.js'\nimport {xlink} from './lib/xlink.js'\nimport {xml} from './lib/xml.js'\nimport {xmlns} from './lib/xmlns.js'\nimport {aria} from './lib/aria.js'\nimport {html as htmlBase} from './lib/html.js'\nimport {svg as svgBase} from './lib/svg.js'\n\nexport {find} from './lib/find.js'\nexport {hastToReact} from './lib/hast-to-react.js'\nexport {normalize} from './lib/normalize.js'\nexport const html = merge([xml, xlink, xmlns, aria, htmlBase], 'html')\nexport const svg = merge([xml, xlink, xmlns, aria, svgBase], 'svg')\n","import {visit} from 'unist-util-visit'\n\n/**\n * @typedef {import('unist').Node} Node\n * @typedef {import('hast').Root} Root\n * @typedef {import('hast').Element} Element\n *\n * @callback AllowElement\n * @param {Element} element\n * @param {number} index\n * @param {Element|Root} parent\n * @returns {boolean|undefined}\n *\n * @typedef Options\n * @property {Array<string>} [allowedElements]\n * @property {Array<string>} [disallowedElements=[]]\n * @property {AllowElement} [allowElement]\n * @property {boolean} [unwrapDisallowed=false]\n */\n\n/**\n * @type {import('unified').Plugin<[Options], Root>}\n */\nexport default function rehypeFilter(options) {\n  if (options.allowedElements && options.disallowedElements) {\n    throw new TypeError(\n      'Only one of `allowedElements` and `disallowedElements` should be defined'\n    )\n  }\n\n  if (\n    options.allowedElements ||\n    options.disallowedElements ||\n    options.allowElement\n  ) {\n    return (tree) => {\n      visit(tree, 'element', (node, index, parent_) => {\n        const parent = /** @type {Element|Root} */ (parent_)\n        /** @type {boolean|undefined} */\n        let remove\n\n        if (options.allowedElements) {\n          remove = !options.allowedElements.includes(node.tagName)\n        } else if (options.disallowedElements) {\n          remove = options.disallowedElements.includes(node.tagName)\n        }\n\n        if (!remove && options.allowElement && typeof index === 'number') {\n          remove = !options.allowElement(node, index, parent)\n        }\n\n        if (remove && typeof index === 'number') {\n          if (options.unwrapDisallowed && node.children) {\n            parent.children.splice(index, 1, ...node.children)\n          } else {\n            parent.children.splice(index, 1)\n          }\n\n          return index\n        }\n\n        return undefined\n      })\n    }\n  }\n}\n","/**\n * Check if the given value is *inter-element whitespace*.\n *\n * @param {unknown} thing\n *   Thing to check (typically `Node` or `string`).\n * @returns {boolean}\n *   Whether the `value` is inter-element whitespace (`boolean`): consisting of\n *   zero or more of space, tab (`\\t`), line feed (`\\n`), carriage return\n *   (`\\r`), or form feed (`\\f`).\n *   If a node is passed it must be a `Text` node, whose `value` field is\n *   checked.\n */\nexport function whitespace(thing) {\n  /** @type {string} */\n  const value =\n    // @ts-expect-error looks like a node.\n    thing && typeof thing === 'object' && thing.type === 'text'\n      ? // @ts-expect-error looks like a text.\n        thing.value || ''\n      : thing\n\n  // HTML whitespace expression.\n  // See <https://infra.spec.whatwg.org/#ascii-whitespace>.\n  return typeof value === 'string' && value.replace(/[ \\t\\n\\f\\r]/g, '') === ''\n}\n","/**\n * @typedef {import('./util/schema.js').Schema} Schema\n */\n\nimport {normalize} from './normalize.js'\nimport {DefinedInfo} from './util/defined-info.js'\nimport {Info} from './util/info.js'\n\nconst valid = /^data[-\\w.:]+$/i\nconst dash = /-[a-z]/g\nconst cap = /[A-Z]/g\n\n/**\n * @param {Schema} schema\n * @param {string} value\n * @returns {Info}\n */\nexport function find(schema, value) {\n  const normal = normalize(value)\n  let prop = value\n  let Type = Info\n\n  if (normal in schema.normal) {\n    return schema.property[schema.normal[normal]]\n  }\n\n  if (normal.length > 4 && normal.slice(0, 4) === 'data' && valid.test(value)) {\n    // Attribute or property.\n    if (value.charAt(4) === '-') {\n      // Turn it into a property.\n      const rest = value.slice(5).replace(dash, camelcase)\n      prop = 'data' + rest.charAt(0).toUpperCase() + rest.slice(1)\n    } else {\n      // Turn it into an attribute.\n      const rest = value.slice(4)\n\n      if (!dash.test(rest)) {\n        let dashes = rest.replace(cap, kebab)\n\n        if (dashes.charAt(0) !== '-') {\n          dashes = '-' + dashes\n        }\n\n        value = 'data' + dashes\n      }\n    }\n\n    Type = DefinedInfo\n  }\n\n  return new Type(prop, value)\n}\n\n/**\n * @param {string} $0\n * @returns {string}\n */\nfunction kebab($0) {\n  return '-' + $0.toLowerCase()\n}\n\n/**\n * @param {string} $0\n * @returns {string}\n */\nfunction camelcase($0) {\n  return $0.charAt(1).toUpperCase()\n}\n","/**\n * `hast` is close to `React`, but differs in a couple of cases.\n *\n * To get a React property from a hast property, check if it is in\n * `hastToReact`, if it is, then use the corresponding value,\n * otherwise, use the hast property.\n *\n * @type {Record<string, string>}\n */\nexport const hastToReact = {\n  classId: 'classID',\n  dataType: 'datatype',\n  itemId: 'itemID',\n  strokeDashArray: 'strokeDasharray',\n  strokeDashOffset: 'strokeDashoffset',\n  strokeLineCap: 'strokeLinecap',\n  strokeLineJoin: 'strokeLinejoin',\n  strokeMiterLimit: 'strokeMiterlimit',\n  typeOf: 'typeof',\n  xLinkActuate: 'xlinkActuate',\n  xLinkArcRole: 'xlinkArcrole',\n  xLinkHref: 'xlinkHref',\n  xLinkRole: 'xlinkRole',\n  xLinkShow: 'xlinkShow',\n  xLinkTitle: 'xlinkTitle',\n  xLinkType: 'xlinkType',\n  xmlnsXLink: 'xmlnsXlink'\n}\n","import StyleToObject from './index.js';\n\nexport default StyleToObject;\n","const protocols = ['http', 'https', 'mailto', 'tel']\n\n/**\n * @param {string} uri\n * @returns {string}\n */\nexport function uriTransformer(uri) {\n  const url = (uri || '').trim()\n  const first = url.charAt(0)\n\n  if (first === '#' || first === '/') {\n    return url\n  }\n\n  const colon = url.indexOf(':')\n  if (colon === -1) {\n    return url\n  }\n\n  let index = -1\n\n  while (++index < protocols.length) {\n    const protocol = protocols[index]\n\n    if (\n      colon === protocol.length &&\n      url.slice(0, protocol.length).toLowerCase() === protocol\n    ) {\n      return url\n    }\n  }\n\n  index = url.indexOf('?')\n  if (index !== -1 && colon > index) {\n    return url\n  }\n\n  index = url.indexOf('#')\n  if (index !== -1 && colon > index) {\n    return url\n  }\n\n  // eslint-disable-next-line no-script-url\n  return 'javascript:void(0)'\n}\n","/**\n * @template T\n * @typedef {import('react').ComponentType<T>} ComponentType<T>\n */\n\n/**\n * @template {import('react').ElementType} T\n * @typedef {import('react').ComponentPropsWithoutRef<T>} ComponentPropsWithoutRef<T>\n */\n\n/**\n * @typedef {import('react').ReactNode} ReactNode\n * @typedef {import('unist').Position} Position\n * @typedef {import('hast').Element} Element\n * @typedef {import('hast').ElementContent} ElementContent\n * @typedef {import('hast').Root} Root\n * @typedef {import('hast').Text} Text\n * @typedef {import('hast').Comment} Comment\n * @typedef {import('hast').DocType} Doctype\n * @typedef {import('property-information').Info} Info\n * @typedef {import('property-information').Schema} Schema\n * @typedef {import('./complex-types.js').ReactMarkdownProps} ReactMarkdownProps\n *\n * @typedef Raw\n * @property {'raw'} type\n * @property {string} value\n *\n * @typedef Context\n * @property {Options} options\n * @property {Schema} schema\n * @property {number} listDepth\n *\n * @callback TransformLink\n * @param {string} href\n * @param {Array<ElementContent>} children\n * @param {string?} title\n * @returns {string}\n *\n * @callback TransformImage\n * @param {string} src\n * @param {string} alt\n * @param {string?} title\n * @returns {string}\n *\n * @typedef {import('react').HTMLAttributeAnchorTarget} TransformLinkTargetType\n *\n * @callback TransformLinkTarget\n * @param {string} href\n * @param {Array<ElementContent>} children\n * @param {string?} title\n * @returns {TransformLinkTargetType|undefined}\n *\n * @typedef {keyof JSX.IntrinsicElements} ReactMarkdownNames\n *\n * To do: is `data-sourcepos` typeable?\n *\n * @typedef {ComponentPropsWithoutRef<'code'> & ReactMarkdownProps & {inline?: boolean}} CodeProps\n * @typedef {ComponentPropsWithoutRef<'h1'> & ReactMarkdownProps & {level: number}} HeadingProps\n * @typedef {ComponentPropsWithoutRef<'li'> & ReactMarkdownProps & {checked: boolean|null, index: number, ordered: boolean}} LiProps\n * @typedef {ComponentPropsWithoutRef<'ol'> & ReactMarkdownProps & {depth: number, ordered: true}} OrderedListProps\n * @typedef {ComponentPropsWithoutRef<'td'> & ReactMarkdownProps & {style?: Record<string, unknown>, isHeader: false}} TableDataCellProps\n * @typedef {ComponentPropsWithoutRef<'th'> & ReactMarkdownProps & {style?: Record<string, unknown>, isHeader: true}} TableHeaderCellProps\n * @typedef {ComponentPropsWithoutRef<'tr'> & ReactMarkdownProps & {isHeader: boolean}} TableRowProps\n * @typedef {ComponentPropsWithoutRef<'ul'> & ReactMarkdownProps & {depth: number, ordered: false}} UnorderedListProps\n *\n * @typedef {ComponentType<CodeProps>} CodeComponent\n * @typedef {ComponentType<HeadingProps>} HeadingComponent\n * @typedef {ComponentType<LiProps>} LiComponent\n * @typedef {ComponentType<OrderedListProps>} OrderedListComponent\n * @typedef {ComponentType<TableDataCellProps>} TableDataCellComponent\n * @typedef {ComponentType<TableHeaderCellProps>} TableHeaderCellComponent\n * @typedef {ComponentType<TableRowProps>} TableRowComponent\n * @typedef {ComponentType<UnorderedListProps>} UnorderedListComponent\n *\n * @typedef SpecialComponents\n * @property {CodeComponent|ReactMarkdownNames} code\n * @property {HeadingComponent|ReactMarkdownNames} h1\n * @property {HeadingComponent|ReactMarkdownNames} h2\n * @property {HeadingComponent|ReactMarkdownNames} h3\n * @property {HeadingComponent|ReactMarkdownNames} h4\n * @property {HeadingComponent|ReactMarkdownNames} h5\n * @property {HeadingComponent|ReactMarkdownNames} h6\n * @property {LiComponent|ReactMarkdownNames} li\n * @property {OrderedListComponent|ReactMarkdownNames} ol\n * @property {TableDataCellComponent|ReactMarkdownNames} td\n * @property {TableHeaderCellComponent|ReactMarkdownNames} th\n * @property {TableRowComponent|ReactMarkdownNames} tr\n * @property {UnorderedListComponent|ReactMarkdownNames} ul\n *\n * @typedef {Partial<Omit<import('./complex-types.js').NormalComponents, keyof SpecialComponents> & SpecialComponents>} Components\n *\n * @typedef Options\n * @property {boolean} [sourcePos=false]\n * @property {boolean} [rawSourcePos=false]\n * @property {boolean} [skipHtml=false]\n * @property {boolean} [includeElementIndex=false]\n * @property {null|false|TransformLink} [transformLinkUri]\n * @property {TransformImage} [transformImageUri]\n * @property {TransformLinkTargetType|TransformLinkTarget} [linkTarget]\n * @property {Components} [components]\n */\n\nimport React from 'react'\nimport ReactIs from 'react-is'\nimport {whitespace} from 'hast-util-whitespace'\nimport {svg, find, hastToReact} from 'property-information'\nimport {stringify as spaces} from 'space-separated-tokens'\nimport {stringify as commas} from 'comma-separated-tokens'\nimport style from 'style-to-object'\nimport {uriTransformer} from './uri-transformer.js'\n\nconst own = {}.hasOwnProperty\n\n// The table-related elements that must not contain whitespace text according\n// to React.\nconst tableElements = new Set(['table', 'thead', 'tbody', 'tfoot', 'tr'])\n\n/**\n * @param {Context} context\n * @param {Element|Root} node\n */\nexport function childrenToReact(context, node) {\n  /** @type {Array<ReactNode>} */\n  const children = []\n  let childIndex = -1\n  /** @type {Comment|Doctype|Element|Raw|Text} */\n  let child\n\n  while (++childIndex < node.children.length) {\n    child = node.children[childIndex]\n\n    if (child.type === 'element') {\n      children.push(toReact(context, child, childIndex, node))\n    } else if (child.type === 'text') {\n      // Currently, a warning is triggered by react for *any* white space in\n      // tables.\n      // So we drop it.\n      // See: <https://github.com/facebook/react/pull/7081>.\n      // See: <https://github.com/facebook/react/pull/7515>.\n      // See: <https://github.com/remarkjs/remark-react/issues/64>.\n      // See: <https://github.com/remarkjs/react-markdown/issues/576>.\n      if (\n        node.type !== 'element' ||\n        !tableElements.has(node.tagName) ||\n        !whitespace(child)\n      ) {\n        children.push(child.value)\n      }\n    } else if (child.type === 'raw' && !context.options.skipHtml) {\n      // Default behavior is to show (encoded) HTML.\n      children.push(child.value)\n    }\n  }\n\n  return children\n}\n\n/**\n * @param {Context} context\n * @param {Element} node\n * @param {number} index\n * @param {Element|Root} parent\n */\nfunction toReact(context, node, index, parent) {\n  const options = context.options\n  const transform =\n    options.transformLinkUri === undefined\n      ? uriTransformer\n      : options.transformLinkUri\n  const parentSchema = context.schema\n  /** @type {ReactMarkdownNames} */\n  // @ts-expect-error assume a known HTML/SVG element.\n  const name = node.tagName\n  /** @type {Record<string, unknown>} */\n  const properties = {}\n  let schema = parentSchema\n  /** @type {string} */\n  let property\n\n  if (parentSchema.space === 'html' && name === 'svg') {\n    schema = svg\n    context.schema = schema\n  }\n\n  if (node.properties) {\n    for (property in node.properties) {\n      if (own.call(node.properties, property)) {\n        addProperty(properties, property, node.properties[property], context)\n      }\n    }\n  }\n\n  if (name === 'ol' || name === 'ul') {\n    context.listDepth++\n  }\n\n  const children = childrenToReact(context, node)\n\n  if (name === 'ol' || name === 'ul') {\n    context.listDepth--\n  }\n\n  // Restore parent schema.\n  context.schema = parentSchema\n\n  // Nodes created by plugins do not have positional info, in which case we use\n  // an object that matches the position interface.\n  const position = node.position || {\n    start: {line: null, column: null, offset: null},\n    end: {line: null, column: null, offset: null}\n  }\n  const component =\n    options.components && own.call(options.components, name)\n      ? options.components[name]\n      : name\n  const basic = typeof component === 'string' || component === React.Fragment\n\n  if (!ReactIs.isValidElementType(component)) {\n    throw new TypeError(\n      `Component for name \\`${name}\\` not defined or is not renderable`\n    )\n  }\n\n  properties.key = index\n\n  if (name === 'a' && options.linkTarget) {\n    properties.target =\n      typeof options.linkTarget === 'function'\n        ? options.linkTarget(\n            String(properties.href || ''),\n            node.children,\n            typeof properties.title === 'string' ? properties.title : null\n          )\n        : options.linkTarget\n  }\n\n  if (name === 'a' && transform) {\n    properties.href = transform(\n      String(properties.href || ''),\n      node.children,\n      typeof properties.title === 'string' ? properties.title : null\n    )\n  }\n\n  if (\n    !basic &&\n    name === 'code' &&\n    parent.type === 'element' &&\n    parent.tagName !== 'pre'\n  ) {\n    properties.inline = true\n  }\n\n  if (\n    !basic &&\n    (name === 'h1' ||\n      name === 'h2' ||\n      name === 'h3' ||\n      name === 'h4' ||\n      name === 'h5' ||\n      name === 'h6')\n  ) {\n    properties.level = Number.parseInt(name.charAt(1), 10)\n  }\n\n  if (name === 'img' && options.transformImageUri) {\n    properties.src = options.transformImageUri(\n      String(properties.src || ''),\n      String(properties.alt || ''),\n      typeof properties.title === 'string' ? properties.title : null\n    )\n  }\n\n  if (!basic && name === 'li' && parent.type === 'element') {\n    const input = getInputElement(node)\n    properties.checked =\n      input && input.properties ? Boolean(input.properties.checked) : null\n    properties.index = getElementsBeforeCount(parent, node)\n    properties.ordered = parent.tagName === 'ol'\n  }\n\n  if (!basic && (name === 'ol' || name === 'ul')) {\n    properties.ordered = name === 'ol'\n    properties.depth = context.listDepth\n  }\n\n  if (name === 'td' || name === 'th') {\n    if (properties.align) {\n      if (!properties.style) properties.style = {}\n      // @ts-expect-error assume `style` is an object\n      properties.style.textAlign = properties.align\n      delete properties.align\n    }\n\n    if (!basic) {\n      properties.isHeader = name === 'th'\n    }\n  }\n\n  if (!basic && name === 'tr' && parent.type === 'element') {\n    properties.isHeader = Boolean(parent.tagName === 'thead')\n  }\n\n  // If `sourcePos` is given, pass source information (line/column info from markdown source).\n  if (options.sourcePos) {\n    properties['data-sourcepos'] = flattenPosition(position)\n  }\n\n  if (!basic && options.rawSourcePos) {\n    properties.sourcePosition = node.position\n  }\n\n  // If `includeElementIndex` is given, pass node index info to components.\n  if (!basic && options.includeElementIndex) {\n    properties.index = getElementsBeforeCount(parent, node)\n    properties.siblingCount = getElementsBeforeCount(parent)\n  }\n\n  if (!basic) {\n    properties.node = node\n  }\n\n  // Ensure no React warnings are emitted for void elements w/ children.\n  return children.length > 0\n    ? React.createElement(component, properties, children)\n    : React.createElement(component, properties)\n}\n\n/**\n * @param {Element|Root} node\n * @returns {Element?}\n */\nfunction getInputElement(node) {\n  let index = -1\n\n  while (++index < node.children.length) {\n    const child = node.children[index]\n\n    if (child.type === 'element' && child.tagName === 'input') {\n      return child\n    }\n  }\n\n  return null\n}\n\n/**\n * @param {Element|Root} parent\n * @param {Element} [node]\n * @returns {number}\n */\nfunction getElementsBeforeCount(parent, node) {\n  let index = -1\n  let count = 0\n\n  while (++index < parent.children.length) {\n    if (parent.children[index] === node) break\n    if (parent.children[index].type === 'element') count++\n  }\n\n  return count\n}\n\n/**\n * @param {Record<string, unknown>} props\n * @param {string} prop\n * @param {unknown} value\n * @param {Context} ctx\n */\nfunction addProperty(props, prop, value, ctx) {\n  const info = find(ctx.schema, prop)\n  let result = value\n\n  // Ignore nullish and `NaN` values.\n  // eslint-disable-next-line no-self-compare\n  if (result === null || result === undefined || result !== result) {\n    return\n  }\n\n  // Accept `array`.\n  // Most props are space-separated.\n  if (Array.isArray(result)) {\n    result = info.commaSeparated ? commas(result) : spaces(result)\n  }\n\n  if (info.property === 'style' && typeof result === 'string') {\n    result = parseStyle(result)\n  }\n\n  if (info.space && info.property) {\n    props[\n      own.call(hastToReact, info.property)\n        ? hastToReact[info.property]\n        : info.property\n    ] = result\n  } else if (info.attribute) {\n    props[info.attribute] = result\n  }\n}\n\n/**\n * @param {string} value\n * @returns {Record<string, string>}\n */\nfunction parseStyle(value) {\n  /** @type {Record<string, string>} */\n  const result = {}\n\n  try {\n    style(value, iterator)\n  } catch {\n    // Silent.\n  }\n\n  return result\n\n  /**\n   * @param {string} name\n   * @param {string} v\n   */\n  function iterator(name, v) {\n    const k = name.slice(0, 4) === '-ms-' ? `ms-${name.slice(4)}` : name\n    result[k.replace(/-([a-z])/g, styleReplacer)] = v\n  }\n}\n\n/**\n * @param {unknown} _\n * @param {string} $1\n */\nfunction styleReplacer(_, $1) {\n  return $1.toUpperCase()\n}\n\n/**\n * @param {Position|{start: {line: null, column: null, offset: null}, end: {line: null, column: null, offset: null}}} pos\n * @returns {string}\n */\nfunction flattenPosition(pos) {\n  return [\n    pos.start.line,\n    ':',\n    pos.start.column,\n    '-',\n    pos.end.line,\n    ':',\n    pos.end.column\n  ]\n    .map(String)\n    .join('')\n}\n","/**\n * @typedef Options\n *   Configuration for `stringify`.\n * @property {boolean} [padLeft=true]\n *   Whether to pad a space before a token.\n * @property {boolean} [padRight=false]\n *   Whether to pad a space after a token.\n */\n\n/**\n * @typedef {Options} StringifyOptions\n *   Please use `StringifyOptions` instead.\n */\n\n/**\n * Parse comma-separated tokens to an array.\n *\n * @param {string} value\n *   Comma-separated tokens.\n * @returns {Array<string>}\n *   List of tokens.\n */\nexport function parse(value) {\n  /** @type {Array<string>} */\n  const tokens = []\n  const input = String(value || '')\n  let index = input.indexOf(',')\n  let start = 0\n  /** @type {boolean} */\n  let end = false\n\n  while (!end) {\n    if (index === -1) {\n      index = input.length\n      end = true\n    }\n\n    const token = input.slice(start, index).trim()\n\n    if (token || !end) {\n      tokens.push(token)\n    }\n\n    start = index + 1\n    index = input.indexOf(',', start)\n  }\n\n  return tokens\n}\n\n/**\n * Serialize an array of strings or numbers to comma-separated tokens.\n *\n * @param {Array<string|number>} values\n *   List of tokens.\n * @param {Options} [options]\n *   Configuration for `stringify` (optional).\n * @returns {string}\n *   Comma-separated tokens.\n */\nexport function stringify(values, options) {\n  const settings = options || {}\n\n  // Ensure the last empty entry is seen.\n  const input = values[values.length - 1] === '' ? [...values, ''] : values\n\n  return input\n    .join(\n      (settings.padRight ? ' ' : '') +\n        ',' +\n        (settings.padLeft === false ? '' : ' ')\n    )\n    .trim()\n}\n","/**\n * Parse space-separated tokens to an array of strings.\n *\n * @param {string} value\n *   Space-separated tokens.\n * @returns {Array<string>}\n *   List of tokens.\n */\nexport function parse(value) {\n  const input = String(value || '').trim()\n  return input ? input.split(/[ \\t\\n\\r\\f]+/g) : []\n}\n\n/**\n * Serialize an array of strings as space separated-tokens.\n *\n * @param {Array<string|number>} values\n *   List of tokens.\n * @returns {string}\n *   Space-separated tokens.\n */\nexport function stringify(values) {\n  return values.join(' ').trim()\n}\n","/**\n * @typedef {import('react').ReactNode} ReactNode\n * @typedef {import('react').ReactElement<{}>} ReactElement\n * @typedef {import('unified').PluggableList} PluggableList\n * @typedef {import('hast').Root} Root\n * @typedef {import('./rehype-filter.js').Options} FilterOptions\n * @typedef {import('./ast-to-react.js').Options} TransformOptions\n *\n * @typedef CoreOptions\n * @property {string} children\n *\n * @typedef PluginOptions\n * @property {PluggableList} [remarkPlugins=[]]\n * @property {PluggableList} [rehypePlugins=[]]\n * @property {import('remark-rehype').Options | undefined} [remarkRehypeOptions={}]\n *\n * @typedef LayoutOptions\n * @property {string} [className]\n *\n * @typedef {CoreOptions & PluginOptions & LayoutOptions & FilterOptions & TransformOptions} ReactMarkdownOptions\n *\n * @typedef Deprecation\n * @property {string} id\n * @property {string} [to]\n */\n\nimport React from 'react'\nimport {VFile} from 'vfile'\nimport {unified} from 'unified'\nimport remarkParse from 'remark-parse'\nimport remarkRehype from 'remark-rehype'\nimport PropTypes from 'prop-types'\nimport {html} from 'property-information'\nimport rehypeFilter from './rehype-filter.js'\nimport {childrenToReact} from './ast-to-react.js'\n\nconst own = {}.hasOwnProperty\nconst changelog =\n  'https://github.com/remarkjs/react-markdown/blob/main/changelog.md'\n\n/** @type {Record<string, Deprecation>} */\nconst deprecated = {\n  plugins: {to: 'remarkPlugins', id: 'change-plugins-to-remarkplugins'},\n  renderers: {to: 'components', id: 'change-renderers-to-components'},\n  astPlugins: {id: 'remove-buggy-html-in-markdown-parser'},\n  allowDangerousHtml: {id: 'remove-buggy-html-in-markdown-parser'},\n  escapeHtml: {id: 'remove-buggy-html-in-markdown-parser'},\n  source: {to: 'children', id: 'change-source-to-children'},\n  allowNode: {\n    to: 'allowElement',\n    id: 'replace-allownode-allowedtypes-and-disallowedtypes'\n  },\n  allowedTypes: {\n    to: 'allowedElements',\n    id: 'replace-allownode-allowedtypes-and-disallowedtypes'\n  },\n  disallowedTypes: {\n    to: 'disallowedElements',\n    id: 'replace-allownode-allowedtypes-and-disallowedtypes'\n  },\n  includeNodeIndex: {\n    to: 'includeElementIndex',\n    id: 'change-includenodeindex-to-includeelementindex'\n  }\n}\n\n/**\n * React component to render markdown.\n *\n * @param {ReactMarkdownOptions} options\n * @returns {ReactElement}\n */\nexport function ReactMarkdown(options) {\n  for (const key in deprecated) {\n    if (own.call(deprecated, key) && own.call(options, key)) {\n      const deprecation = deprecated[key]\n      console.warn(\n        `[react-markdown] Warning: please ${\n          deprecation.to ? `use \\`${deprecation.to}\\` instead of` : 'remove'\n        } \\`${key}\\` (see <${changelog}#${deprecation.id}> for more info)`\n      )\n      delete deprecated[key]\n    }\n  }\n\n  const processor = unified()\n    .use(remarkParse)\n    .use(options.remarkPlugins || [])\n    .use(remarkRehype, {\n      ...options.remarkRehypeOptions,\n      allowDangerousHtml: true\n    })\n    .use(options.rehypePlugins || [])\n    .use(rehypeFilter, options)\n\n  const file = new VFile()\n\n  if (typeof options.children === 'string') {\n    file.value = options.children\n  } else if (options.children !== undefined && options.children !== null) {\n    console.warn(\n      `[react-markdown] Warning: please pass a string as \\`children\\` (not: \\`${options.children}\\`)`\n    )\n  }\n\n  const hastNode = processor.runSync(processor.parse(file), file)\n\n  if (hastNode.type !== 'root') {\n    throw new TypeError('Expected a `root` node')\n  }\n\n  /** @type {ReactElement} */\n  let result = React.createElement(\n    React.Fragment,\n    {},\n    childrenToReact({options, schema: html, listDepth: 0}, hastNode)\n  )\n\n  if (options.className) {\n    result = React.createElement('div', {className: options.className}, result)\n  }\n\n  return result\n}\n\nReactMarkdown.propTypes = {\n  // Core options:\n  children: PropTypes.string,\n  // Layout options:\n  className: PropTypes.string,\n  // Filter options:\n  allowElement: PropTypes.func,\n  allowedElements: PropTypes.arrayOf(PropTypes.string),\n  disallowedElements: PropTypes.arrayOf(PropTypes.string),\n  unwrapDisallowed: PropTypes.bool,\n  // Plugin options:\n  remarkPlugins: PropTypes.arrayOf(\n    PropTypes.oneOfType([\n      PropTypes.object,\n      PropTypes.func,\n      PropTypes.arrayOf(\n        PropTypes.oneOfType([\n          PropTypes.bool,\n          PropTypes.string,\n          PropTypes.object,\n          PropTypes.func,\n          PropTypes.arrayOf(\n            // prettier-ignore\n            // type-coverage:ignore-next-line\n            PropTypes.any\n          )\n        ])\n      )\n    ])\n  ),\n  rehypePlugins: PropTypes.arrayOf(\n    PropTypes.oneOfType([\n      PropTypes.object,\n      PropTypes.func,\n      PropTypes.arrayOf(\n        PropTypes.oneOfType([\n          PropTypes.bool,\n          PropTypes.string,\n          PropTypes.object,\n          PropTypes.func,\n          PropTypes.arrayOf(\n            // prettier-ignore\n            // type-coverage:ignore-next-line\n            PropTypes.any\n          )\n        ])\n      )\n    ])\n  ),\n  // Transform options:\n  sourcePos: PropTypes.bool,\n  rawSourcePos: PropTypes.bool,\n  skipHtml: PropTypes.bool,\n  includeElementIndex: PropTypes.bool,\n  transformLinkUri: PropTypes.oneOfType([PropTypes.func, PropTypes.bool]),\n  linkTarget: PropTypes.oneOfType([PropTypes.func, PropTypes.string]),\n  transformImageUri: PropTypes.func,\n  components: PropTypes.object\n}\n"],"names":["hasOwn","Object","prototype","hasOwnProperty","toStr","toString","defineProperty","gOPD","getOwnPropertyDescriptor","isArray","arr","Array","call","isPlainObject","obj","key","hasOwnConstructor","hasIsPrototypeOf","constructor","setProperty","target","options","name","enumerable","configurable","value","newValue","writable","getProperty","module","exports","extend","src","copy","copyIsArray","clone","arguments","i","length","deep","COMMENT_REGEX","NEWLINE_REGEX","WHITESPACE_REGEX","PROPERTY_REGEX","COLON_REGEX","VALUE_REGEX","SEMICOLON_REGEX","TRIM_REGEX","EMPTY_STRING","trim","str","replace","style","TypeError","lineno","column","updatePosition","lines","match","lastIndexOf","position","start","line","node","Position","whitespace","this","end","source","content","errorsList","error","msg","err","Error","reason","filename","silent","push","re","m","exec","slice","comments","rules","c","comment","pos","charAt","type","declaration","prop","val","ret","property","decl","decls","declarations","isBuffer","u","b","Symbol","for","d","e","f","g","h","k","l","n","p","q","t","v","a","r","$$typeof","ContextConsumer","ContextProvider","Element","ForwardRef","Fragment","Lazy","Memo","Portal","Profiler","StrictMode","Suspense","SuspenseList","isAsyncMode","isConcurrentMode","isContextConsumer","isContextProvider","isElement","isForwardRef","isFragment","isLazy","isMemo","isPortal","isProfiler","isStrictMode","isSuspense","isSuspenseList","isValidElementType","getModuleId","typeOf","parse","require","StyleToObject","iterator","output","hasIterator","len","_classCallCheck","_defineProperties","o","_createClass","_iterableToArray","from","_toConsumableArray","arrayLikeToArray","iterableToArray","unsupportedIterableToArray","_getPrototypeOf","setPrototypeOf","getPrototypeOf","bind","__proto__","_isNativeReflectConstruct","Boolean","valueOf","Reflect","construct","_callSuper","assertThisInitialized","apply","_inherits","create","_wrapNativeSuper","Map","Function","indexOf","has","get","set","Wrapper","stringifyPosition","point","index","VFileMessage","_Error","place","origin","_this","parts","undefined","message","stack","fatal","ruleId","file","actual","expected","url","note","path","basename","ext","assertPath","seenNonSlash","charCodeAt","firstNonSlashEnd","extIndex","dirname","unmatchedSlash","extname","startPart","startDot","preDotState","code","join","joined","_len","segments","_key","absolute","allowAboveRoot","lastSlashIndex","result","lastSegmentLength","lastSlash","dots","normalizeString","normalize","sep","JSON","stringify","proc","cwd","isUrl","fileUrlOrPath","href","urlToPath","URL","protocol","hostname","pathname","third","decodeURIComponent","getPathFromURLPosix","order","VFile","bufferLike","buffer","data","messages","history","stored","map","includes","assertNonEmpty","assertPart","stem","encoding","part","_toArray","arrayWithHoles","nonIterableRest","bail","toStringTag","trough","fns","pipeline","run","values","middlewareIndex","callback","pop","next","fn","_len2","_key2","middleware","called","wrapped","_len3","parameters","_key3","fnExpectsCallback","done","then","_len4","_key4","concat","wrap","use","middelware","unified","base","frozen","transformers","attachers","namespace","freezeIndex","processor","assertUnfrozen","own","Parser","Compiler","freeze","_attachers$freezeInde","attacher","transformer","Number","POSITIVE_INFINITY","settings","addPlugin","addList","addPreset","assign","add","_value","plugin","plugins","entry","isPlainObj","doc","vfile","assertParser","newable","String","assertCompiler","assertNode","compile","Promise","executor","resolve","reject","tree","runSync","complete","assertDone","process","processSync","destination","keys","asyncName","looksLikeAVFile","emptyOptions","one","includeImageAlt","includeHtml","alt","all","children","splice","list","remove","items","chunkStart","unshift","syntaxExtension","extension","hook","left","right","constructs","existing","before","asciiAlpha","regexCheck","asciiAlphanumeric","asciiAtext","asciiControl","asciiDigit","asciiHexDigit","asciiPunctuation","markdownLineEnding","markdownLineEndingOrSpace","markdownSpace","unicodePunctuation","unicodeWhitespace","regex","test","fromCharCode","factorySpace","effects","ok","max","limit","size","enter","prefix","consume","exit","tokenize","previous","contentStart","attempt","parser","contentInitial","lineStart","token","contentType","document","childFlow","childToken","lineStartOffset","self","continued","item","containerState","continuation","documentContinue","checkNewContainers","_closeFlow","closeFlow","indexBeforeExits","events","indexBeforeFlow","exitContainers","documentContinued","currentConstruct","concrete","flowStart","interrupt","_gfmTableDynamicInterruptHack","check","containerConstruct","thereIsANewContainer","thereIsNoNewContainer","lazy","now","offset","containerContinue","flow","_tokenizer","flowContinue","writeToChild","eof","stream","sliceStream","defineSkip","write","seen","nok","disable","null","blankLine","after","partial","subtokenize","event","lineIndex","otherIndex","otherEvent","subevents","more","jumps","_isInFirstContentOfListItem","subcontent","_container","eventIndex","context","startPosition","startPositions","tokenizer","childEvents","gaps","current","adjust","breaks","_gfmTasklistFirstContentOfListItem","chunkInside","contentEnd","continuationConstruct","contentContinue","prefixed","tail","sliceSerialize","initial","flowInitial","afterConstruct","resolver","resolveAll","createResolver","string","initializeFactory","text","field","notText","atBreak","resolveAllLineSuffixes","extraResolver","chunks","bufferIndex","tabs","chunk","_index","_bufferIndex","createTokenizer","initialize","columnStart","resolveAllConstructs","accountForPotentialSkip","fields","constructFactory","info","addResult","onsuccessfulcheck","expandTabs","atTab","serializeChunks","main","state","view","startIndex","startBufferIndex","endIndex","endBufferIndex","head","shift","sliceChunks","_point","chunkIndex","go","_","restore","onreturn","returnState","bogusState","listOfConstructs","constructIndex","handleListOfConstructs","def","handleMapOfConstructs","handleConstruct","startPoint","startPrevious","startCurrentConstruct","startEventsIndex","startStack","store","resolveTo","thematicBreak","marker","sequence","initialSize","kind","atMarker","inside","onBlank","listItemPrefixWhitespaceConstruct","endOfPrefix","otherPrefix","initialBlankLine","notBlank","furtherBlankLines","notInCurrentItem","indentConstruct","blockQuote","open","contBefore","factoryDestination","literalType","literalMarkerType","rawType","stringType","balance","enclosedBefore","raw","enclosed","enclosedEscape","rawEscape","factoryLabel","markerType","labelInside","labelEscape","factoryTitle","begin","escape","factoryWhitespace","normalizeIdentifier","toLowerCase","toUpperCase","definition","identifier","labelAfter","markerAfter","destinationBefore","destinationAfter","titleBefore","afterWhitespace","defined","beforeMarker","titleAfter","titleAfterOptionalWhitespace","codeIndented","afterPrefix","furtherStart","headingAtx","sequenceOpen","sequenceFurther","setextUnderline","paragraph","heading","htmlBlockNames","htmlRawNames","htmlFlow","closingTag","markerB","declarationOpen","tagCloseStart","continuationDeclarationInside","tagName","commentOpenInside","cdataOpenInside","slash","basicSelfClosing","completeClosingTagAfter","completeAttributeNameBefore","completeEnd","completeAttributeName","completeAttributeNameAfter","completeAttributeValueBefore","completeAttributeValueQuoted","completeAttributeValueUnquoted","completeAttributeValueQuotedAfter","completeAfter","continuationCommentInside","continuationRawTagOpen","continuationClose","continuationCdataInside","continuationStart","blankLineBefore","continuationAfter","nonLazyContinuationStart","continuationStartNonLazy","continuationBefore","continuationRawEndTag","nonLazyContinuation","codeFenced","closeStart","startBefore","beforeSequenceClose","sequenceClose","sizeOpen","sequenceCloseAfter","initialPrefix","beforeSequenceOpen","infoBefore","atNonLazyBreak","metaBefore","meta","contentBefore","beforeContentChunk","contentChunk","element","createElement","decodeNamedCharacterReference","characterReference","innerHTML","char","textContent","numeric","characterEscape","lineEnding","labelEnd","labelStart","_balanced","_inactive","labelEndNok","resourceConstruct","labelEndOk","referenceFullConstruct","referenceNotFull","referenceCollapsedConstruct","close","media","group","label","insideSpan","resourceBefore","resourceOpen","resourceEnd","resourceDestinationAfter","resourceDestinationMissing","resourceBetween","resourceTitleAfter","referenceFullAfter","referenceFullMissing","referenceCollapsedOpen","labelStartImage","classifyCharacter","attention","attentionMarkers","_open","_close","openingSequence","closingSequence","nextEvents","movePoint","autolink","schemeOrEmailAtext","emailAtext","schemeInsideOrEmailAtext","urlInside","emailAtSignOrDot","emailLabel","emailValue","htmlText","instruction","tagOpen","commentEnd","commentClose","lineEndingBefore","cdata","cdataClose","cdataEnd","instructionClose","tagClose","tagCloseBetween","tagOpenBetween","tagOpenAttributeName","tagOpenAttributeNameAfter","tagOpenAttributeValueBefore","tagOpenAttributeValueQuoted","tagOpenAttributeValueUnquoted","tagOpenAttributeValueQuotedAfter","lineEndingAfter","lineEndingAfterPrefix","labelStartLink","hardBreakEscape","codeText","between","tailExitIndex","headEnterIndex","_document","_defineProperty","_text","resolveText","extensions","combineExtensions","defaultConstructs","search","decodeNumericCharacterReference","parseInt","characterEscapeOrReference","decode","$0","$1","$2","hex","fromMarkdown","config","transforms","canContainEols","opener","link","autolinkProtocol","onenterdata","autolinkEmail","atxHeading","codeFlow","codeFencedFenceInfo","codeFencedFenceMeta","codeTextData","codeFlowValue","definitionDestinationString","definitionLabelString","definitionTitleString","emphasis","hardBreak","hardBreakTrailing","html","htmlFlowData","htmlTextData","image","listItem","listItemValue","onenterlistitemvalue","listOrdered","onenterlistordered","listUnordered","reference","onenterreference","referenceString","resourceDestinationString","resourceTitleString","setextHeading","strong","closer","atxHeadingSequence","onexitatxheadingsequence","onexitautolinkemail","onexitautolinkprotocol","characterEscapeValue","onexitdata","characterReferenceMarkerHexadecimal","onexitcharacterreferencemarker","characterReferenceMarkerNumeric","characterReferenceValue","onexitcharacterreferencevalue","onexitcodefenced","codeFencedFence","onexitcodefencedfence","onexitcodefencedfenceinfo","onexitcodefencedfencemeta","onexitcodeindented","onexitcodetext","onexitdefinitiondestinationstring","onexitdefinitionlabelstring","onexitdefinitiontitlestring","onexithardbreak","onexithtmlflow","onexithtmltext","onexitimage","onexitlabel","labelText","onexitlabeltext","onexitlineending","onexitlink","onexitreferencestring","onexitresourcedestinationstring","onexitresourcetitlestring","resource","onexitresource","onexitsetextheading","setextHeadingLineSequence","onexitsetextheadinglinesequence","setextHeadingText","onexitsetextheadingtext","configure","mdastExtensions","tokenStack","resume","setData","getData","listStack","prepareList","handler","defaultOnError","firstBlankLineIndex","containerBalance","listSpread","tailIndex","tailEvent","_spread","and","errorHandler","onExitError","lang","title","depth","referenceType","ancestor","decodeString","fragment","ordered","spread","checked","compiler","postprocess","atCarriageReturn","endPosition","lastIndex","Math","ceil","preprocess","combined","_combined$key","_combined$key2","remarkParse","normalizeUri","skip","encodeURIComponent","convert","castFactory","typeFactory","anyFactory","propsFactory","tests","checks","_checks$index","CONTINUE","EXIT","visitParents","visitor","reverse","is","step","factory","parents","visit","subresult","grandparents","toResult","parent","pointStart","pointEnd","clean","footnoteReference","counter","id","safeId","footnoteOrder","footnoteCounts","reuseCounter","properties","clobberPrefix","dataFootnoteRef","ariaDescribedBy","patch","sup","applyData","revert","subtype","suffix","contents","listItemLoose","trimLines","last","trimLine","codePointAt","handlers","blockquote","break","className","delete","footnote","footnoteById","no","dangerous","imageReference","inlineCode","linkReference","results","loose","listLoose","disabled","child","root","table","rows","firstRow","tableContent","body","tableCell","tableRow","siblings","align","cellIndex","cells","cell","alignValue","toml","ignore","yaml","footnoteDefinition","createState","allowDangerousHtml","footnoteLabel","footnoteLabelTagName","footnoteLabelProperties","footnoteBackLabel","unknownHandler","passThrough","_objectSpread","cache","definitions","augment","hName","hProperties","hChildren","ctx","generated","props","to","defaultUnknownHandler","nodes","toHast","foot","listItems","referenceIndex","backReferences","backReference","dataFootnoteBackref","ariaLabel","_tail$children","tailTail","dataFootnotes","footer","bridge","mutate","Schema","normal","space","merge","Info","attribute","boolean","booleanish","overloadedBoolean","number","commaSeparated","spaceSeparated","commaOrSpaceSeparated","mustUseProperty","powers","increment","pow","types","DefinedInfo","_Info","mask","mark","transform","attributes","xlink","xLinkActuate","xLinkArcRole","xLinkHref","xLinkRole","xLinkShow","xLinkTitle","xLinkType","xml","xmlLang","xmlBase","xmlSpace","caseSensitiveTransform","caseInsensitiveTransform","xmlns","xmlnsxlink","xmlnsXLink","aria","ariaActiveDescendant","ariaAtomic","ariaAutoComplete","ariaBusy","ariaChecked","ariaColCount","ariaColIndex","ariaColSpan","ariaControls","ariaCurrent","ariaDetails","ariaDisabled","ariaDropEffect","ariaErrorMessage","ariaExpanded","ariaFlowTo","ariaGrabbed","ariaHasPopup","ariaHidden","ariaInvalid","ariaKeyShortcuts","ariaLabelledBy","ariaLevel","ariaLive","ariaModal","ariaMultiLine","ariaMultiSelectable","ariaOrientation","ariaOwns","ariaPlaceholder","ariaPosInSet","ariaPressed","ariaReadOnly","ariaRelevant","ariaRequired","ariaRoleDescription","ariaRowCount","ariaRowIndex","ariaRowSpan","ariaSelected","ariaSetSize","ariaSort","ariaValueMax","ariaValueMin","ariaValueNow","ariaValueText","role","acceptcharset","classname","htmlfor","httpequiv","abbr","accept","acceptCharset","accessKey","action","allow","allowFullScreen","allowPaymentRequest","allowUserMedia","as","async","autoCapitalize","autoComplete","autoFocus","autoPlay","blocking","capture","charSet","cite","cols","colSpan","contentEditable","controls","controlsList","coords","crossOrigin","dateTime","decoding","default","defer","dir","dirName","download","draggable","encType","enterKeyHint","fetchPriority","form","formAction","formEncType","formMethod","formNoValidate","formTarget","headers","height","hidden","high","hrefLang","htmlFor","httpEquiv","imageSizes","imageSrcSet","inert","inputMode","integrity","isMap","itemId","itemProp","itemRef","itemScope","itemType","language","loading","loop","low","manifest","maxLength","method","min","minLength","multiple","muted","nonce","noModule","noValidate","onAbort","onAfterPrint","onAuxClick","onBeforeMatch","onBeforePrint","onBeforeToggle","onBeforeUnload","onBlur","onCancel","onCanPlay","onCanPlayThrough","onChange","onClick","onClose","onContextLost","onContextMenu","onContextRestored","onCopy","onCueChange","onCut","onDblClick","onDrag","onDragEnd","onDragEnter","onDragExit","onDragLeave","onDragOver","onDragStart","onDrop","onDurationChange","onEmptied","onEnded","onError","onFocus","onFormData","onHashChange","onInput","onInvalid","onKeyDown","onKeyPress","onKeyUp","onLanguageChange","onLoad","onLoadedData","onLoadedMetadata","onLoadEnd","onLoadStart","onMessage","onMessageError","onMouseDown","onMouseEnter","onMouseLeave","onMouseMove","onMouseOut","onMouseOver","onMouseUp","onOffline","onOnline","onPageHide","onPageShow","onPaste","onPause","onPlay","onPlaying","onPopState","onProgress","onRateChange","onRejectionHandled","onReset","onResize","onScroll","onScrollEnd","onSecurityPolicyViolation","onSeeked","onSeeking","onSelect","onSlotChange","onStalled","onStorage","onSubmit","onSuspend","onTimeUpdate","onToggle","onUnhandledRejection","onUnload","onVolumeChange","onWaiting","onWheel","optimum","pattern","ping","placeholder","playsInline","popover","popoverTarget","popoverTargetAction","poster","preload","readOnly","referrerPolicy","rel","required","reversed","rowSpan","sandbox","scope","scoped","seamless","selected","shadowRootClonable","shadowRootDelegatesFocus","shadowRootMode","shape","sizes","slot","span","spellCheck","srcDoc","srcLang","srcSet","tabIndex","translate","typeMustMatch","useMap","width","writingSuggestions","aLink","archive","axis","background","bgColor","border","borderColor","bottomMargin","cellPadding","cellSpacing","charOff","classId","clear","codeBase","codeType","color","compact","declare","face","frame","frameBorder","hSpace","leftMargin","longDesc","lowSrc","marginHeight","marginWidth","noResize","noHref","noShade","noWrap","object","profile","prompt","rev","rightMargin","scheme","scrolling","standby","summary","topMargin","valueType","version","vAlign","vLink","vSpace","allowTransparency","autoCorrect","autoSave","disablePictureInPicture","disableRemotePlayback","security","unselectable","svg","accentHeight","alignmentBaseline","arabicForm","baselineShift","capHeight","clipPath","clipRule","colorInterpolation","colorInterpolationFilters","colorProfile","colorRendering","dataType","dominantBaseline","enableBackground","fillOpacity","fillRule","floodColor","floodOpacity","fontFamily","fontSize","fontSizeAdjust","fontStretch","fontStyle","fontVariant","fontWeight","glyphName","glyphOrientationHorizontal","glyphOrientationVertical","horizAdvX","horizOriginX","horizOriginY","imageRendering","letterSpacing","lightingColor","markerEnd","markerMid","markerStart","navDown","navDownLeft","navDownRight","navLeft","navNext","navPrev","navRight","navUp","navUpLeft","navUpRight","onActivate","onBegin","onEnd","onFocusIn","onFocusOut","onMouseWheel","onRepeat","onShow","onZoom","overlinePosition","overlineThickness","paintOrder","panose1","pointerEvents","renderingIntent","shapeRendering","stopColor","stopOpacity","strikethroughPosition","strikethroughThickness","strokeDashArray","strokeDashOffset","strokeLineCap","strokeLineJoin","strokeMiterLimit","strokeOpacity","strokeWidth","textAnchor","textDecoration","textRendering","transformOrigin","underlinePosition","underlineThickness","unicodeBidi","unicodeRange","unitsPerEm","vAlphabetic","vHanging","vIdeographic","vMathematical","vectorEffect","vertAdvY","vertOriginX","vertOriginY","wordSpacing","writingMode","xHeight","playbackOrder","timelineBegin","about","accumulate","additive","alphabetic","amplitude","ascent","attributeName","attributeType","azimuth","bandwidth","baseFrequency","baseProfile","bbox","bias","by","calcMode","clip","clipPathUnits","contentScriptType","contentStyleType","cursor","cx","cy","defaultAction","descent","diffuseConstant","direction","display","dur","divisor","dx","dy","edgeMode","editable","elevation","exponent","externalResourcesRequired","fill","filter","filterRes","filterUnits","focusable","focusHighlight","format","fr","fx","fy","g1","g2","glyphRef","gradientTransform","gradientUnits","hanging","hatchContentUnits","hatchUnits","ideographic","initialVisibility","in","in2","intercept","k1","k2","k3","k4","kernelMatrix","kernelUnitLength","keyPoints","keySplines","keyTimes","kerning","lengthAdjust","limitingConeAngle","local","markerHeight","markerUnits","markerWidth","maskContentUnits","maskUnits","mathematical","mediaCharacterEncoding","mediaContentEncodings","mediaSize","mediaTime","mode","numOctaves","observer","opacity","operator","orient","orientation","overflow","overlay","pathLength","patternContentUnits","patternTransform","patternUnits","phase","pitch","points","pointsAtX","pointsAtY","pointsAtZ","preserveAlpha","preserveAspectRatio","primitiveUnits","propagate","radius","refX","refY","repeatCount","repeatDur","requiredExtensions","requiredFeatures","requiredFonts","requiredFormats","restart","rotate","rx","ry","scale","seed","side","slope","snapshotTime","specularConstant","specularExponent","spreadMethod","spacing","startOffset","stdDeviation","stemh","stemv","stitchTiles","stroke","surfaceScale","syncBehavior","syncBehaviorDefault","syncMaster","syncTolerance","syncToleranceDefault","systemLanguage","tableValues","targetX","targetY","textLength","transformBehavior","u1","u2","unicode","viewBox","viewTarget","visibility","widths","x","x1","x2","xChannelSelector","y","y1","y2","yChannelSelector","z","zoomAndPan","htmlBase","svgBase","rehypeFilter","allowedElements","disallowedElements","allowElement","parent_","_parent$children","unwrapDisallowed","thing","valid","dash","cap","kebab","camelcase","hastToReact","protocols","uriTransformer","uri","first","colon","tableElements","Set","childrenToReact","childIndex","toReact","skipHtml","transformLinkUri","parentSchema","schema","addProperty","listDepth","component","components","basic","React","ReactIs","linkTarget","inline","level","transformImageUri","input","getInputElement","getElementsBeforeCount","textAlign","isHeader","sourcePos","rawSourcePos","sourcePosition","includeElementIndex","siblingCount","count","Type","rest","dashes","find","padRight","padLeft","commas","_unused","styleReplacer","parseStyle","changelog","deprecated","renderers","astPlugins","escapeHtml","allowNode","allowedTypes","disallowedTypes","includeNodeIndex","ReactMarkdown","deprecation","console","warn","remarkPlugins","remarkRehype","remarkRehypeOptions","rehypePlugins","hastNode","propTypes","PropTypes"],"sourceRoot":""}